pax_global_header00006660000000000000000000000064124631475760014531gustar00rootroot0000000000000052 comment=358bb45b4add77bf772aeded4b3e600e2c30814c glances-2.3/000077500000000000000000000000001246314757600130115ustar00rootroot00000000000000glances-2.3/.gitignore000066400000000000000000000006211246314757600150000ustar00rootroot00000000000000*~ *.py[co] # Packages *.egg *.egg-info dist build # Eclipse *.pydevproject .project .metadata bin/** tmp/** tmp/**/* *.tmp *.bak *.swp *~.nib local.properties .classpath .settings/ .loadpath # External tool builders .externalToolBuilders/ # Locally stored "Eclipse launch configurations" *.launch # CDT-specific .cproject # PDT-specific .buildpath # ctags .tags* # Sphinx _build # Tox .tox/ glances-2.3/.travis.yml000066400000000000000000000003671246314757600151300ustar00rootroot00000000000000language: python python: - "2.7" - "3.3" - "3.4" - "pypy" install: - pip install -r requirements.txt - pip install coveralls script: - python setup.py install - coverage run --source=glances unitest.py after_success: - coverallsglances-2.3/AUTHORS000066400000000000000000000017371246314757600140710ustar00rootroot00000000000000========== Developers ========== Nicolas Hennion (aka) Nicolargo http://blog.nicolargo.com https://twitter.com/nicolargo nicolashennion@gmail.com PGP Fingerprint: 835F C447 3BCD 60E9 9200 2778 ABA4 D1AB 9731 6A3C PGP Public key: gpg --keyserver pgp.mit.edu --recv-keys 0xaba4d1ab97316a3c Alessio Sergi (aka) al3hex https://twitter.com/al3hex Brandon Philips (aka) Philips http://ifup.org/ Jon Renner (aka) Jrenner https://github.com/jrenner Maxime Desbrus (aka) desbma https://github.com/desbma Nicolas Hart (aka) NclsHart for the UI design https://github.com/nclsHart ========= Packagers ========= Rémi Verchère for the Debian package https://github.com/rverchere/debian-glances Philip Lacroix for the Slackware (SlackBuild) package gasol.wu@gmail.com for the FreeBSD port Frederic Aoustin (https://github.com/fraoustin) and Nicolas Bourges (installer) for the Windows port Aljaž Srebrnič for the MacPorts package http://www.macports.org/ports.php?by=name&substr=glances glances-2.3/COPYING000066400000000000000000000167441246314757600140600ustar00rootroot00000000000000 GNU LESSER 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. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. glances-2.3/MANIFEST.in000066400000000000000000000005721246314757600145530ustar00rootroot00000000000000include AUTHORS include COPYING include NEWS include README.rst include conf/glances.conf include glances/outputs/bottle/*.tpl include glances/outputs/static/*.ico include glances/outputs/static/css/*.css include glances/outputs/static/js/*.js include man/glances.1 recursive-include docs images/*.png glances-doc.html recursive-include glances *.py recursive-include i18n *.mo glances-2.3/NEWS000066400000000000000000000432571246314757600135230ustar00rootroot00000000000000============================================================================== Glances Version 2.x ============================================================================== Version 2.3 =========== Enhancements and news features: * Add the Docker plugin (issue #440) with per container CPU and memory monitoring (issue #490) * Add the RAID plugin (issue #447) * Add actions on alerts (issue #132). It is now possible to run action (command line) by triggers. Action could contain {{tag}} (Mustache) with stat value. * Add InfluxDB export module (--export-influxdb) (issue #455) * Add StatsD export module (--export-statsd) (issue #465) * Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client mode (issue #463) * The Web inteface is now based on Bootstrap / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart * It is now possible, through the configuration file, to define if an alarm should be logged or not (using the _log option) (issue #437) * You can now set alarm for Disk IO * API: add getAllLimits and getAllViews methods (issue #481) and allow CORS request (issue #479) * SNMP client support NetApp appliance (issue #394) Bugs corrected: * R/W error with the glances.log file (issue #474) Other enhancement: * Alert < 3 seconds are no longer displayed Version 2.2.1 ============= * Fix incorrect kernel thread detection with --hide-kernel-threads (issue #457) * Handle IOError exception if no /etc/os-release to use Glances on Synology DSM (issue #458) * Check issue error in client/server mode (issue #459) Version 2.2 =========== Enhancements and news features: * Add centralized curse interface with a Glances servers list to monitor (issue #418) * Add processes tree view (--tree) (issue #444) * Improve graph history feature (issue #69) * Extended stats is disable by default (use --enable-process-extended to enable it - issue #430) * Add a short key ('F') and a command line option (--fs-free-space) to display FS free space instead of used space (issue #411) * Add a short key ('2') and a command line option (--disable-left-sidebar) to disable/enable the side bar (issue #429) * Add CPU times sort short key ('t') in the curse interface (issue #449) * Refactor operating system detection for GNU/Linux operating system * Code optimization Bugs corrected: * Correct a bug with Glances pip install --user (issue #383) * Correct issue on battery stat update (issue #433) * Correct issue on process no longer exist (issues #414 and #432) Version 2.1.2 ============= Maintenance version (only needed for Mac OS X). Bugs corrected: * Mac OS X: Error if Glances is not ran with sudo (issue #426) Version 2.1.1 ============= Enhancement: * Automaticaly compute top processes number for the current screen (issue #408) * CPU and Memory footprint optimization (issue #401) Bugs corrected: * Mac OS X 10.9: Exception at start (issue #423) * Process no longer exists (issue #421) * Error with Glances Client with Python 3.4.1 (issue #419) * TypeError: memory_maps() takes exactly 2 arguments (issue #413) * No filesystem informations since Glances 2.0 bug enhancement (issue #381) Version 2.1 =========== * Add user process filter feature User can define a process filter pattern (as a regular expression). The pattern could be defined from the command line (-f ) or by pressing the ENTER key in the curse interface. For the moment, process filter feature is only available in standalone mode. * Add extended processes informations for top process Top process stats availables: CPU affinity, extended memory information (shared, text, lib, datat, dirty, swap), open threads/files and TCP/UDP network sessions, IO nice level For the moment, extended processes stats are only available in standalone mode. * Add --process-short-name tag and '/' key to switch between short/command line * Create a max_processes key in the configuration file The goal is to reduce the number of displayed processes in the curses UI and so limit the CPU footprint of the Glances standalone mode. The API always return all the processes, the key is only active in the curses UI. If the key is not define, all the processes will be displayed. The default value is 20 (processes displayed). For the moment, this feature is only available in standalone mode. * Alias for network interfaces, disks and sensors Users can configure alias from the Glances configuration file. * Add Glances log message (in the /tmp/glances.log file) The default log level is INFO, you can switch to the DEBUG mode using the -d option on the command line. * Add RESTFul API to the Web server mode RestFul API doc: https://github.com/nicolargo/glances/wiki/The-Glances-RESTFULL-JSON-API * Improve SNMP fallback mode for Cisco IOS, VMware ESXi * Add --theme-white feature to optimize display for white background * Experimental history feature (--enable-history option on the command line) This feature allows users to generate graphs within the curse interface. Graphs are available for CPU, LOAD and MEM. To generate graph, click on the 'g' key. To reset the history, press the 'r' key. Note: This feature uses the matplotlib library. * CI: Improve Travis coverage Bugs corrected: * Quitting glances leaves a column layout to the current terminal (issue #392) * Glances crashes with malformed UTF-8 sequences in process command lines (issue #391) * SNMP fallback mode is not Python 3 compliant (issue #386) * Trouble using batinfo, hddtemp, pysensors w/ Python (issue #324) Version 2.0.1 ============= Maintenance version. Bugs corrected: * Error when displaying numeric process user names (#380) * Display users without username correctly (#379) * Bug when parsing configuration file (#378) * The sda2 partition is not seen by glances (#376) * Client crash if server is ended during XML request (#375) * Error with the Sensors module on Debian/Ubuntu (#373) * Windows don't view all processes (#319) Version 2.0 =========== Glances v2.0 is not a simple upgrade of the version 1.x but a complete code refactoring. Based on a plugins system, it aims at providing an easy way to add news features. - Core defines the basics and commons functions. - all stats are grabbed through plugins (see the glances/plugins source folder). - also outputs methods (Curse, Web mode, CSV) are managed as plugins. The Curse interface is almost the same than the version 1.7. Some improvements have been made: - space optimisation for the CPU, LOAD and MEM stats (justified alignment) - CPU: . CPU stats are displayed as soon as Glances is started . steal CPU alerts are no more logged - LOAD: . 5 min LOAD alerts are no more logged - File System: . Display the device name (if space is available) - Sensors: . Sensors and HDD temperature are displayed in the same block - Process list: . Refactor columns: CPU%, MEM%, VIRT, RES, PID, USER, NICE, STATUS, TIME, IO, Command/name . The running processes status is highlighted . The process name is highlighted in the command line Glances 2.0 brings a brand new Web Interface. You can run Glances in Web server mode and consult the stats directly from a standard Web Browser. The client mode can now fallback to a simple SNMP mode if Glances server is not found on the remote machine. Complete release notes: * Cut ifName and DiskName if they are too long in the curses interface (by Nicolargo) * Windows CLI is OK but early experimental (by Nicolargo) * Add bitrate limits to the networks interfaces (by Nicolargo) * Batteries % stats are now in the sensors list (by Nicolargo) * Refactor the client/server password security: using SHA256 (by Nicolargo, based on Alessio Sergi's example script) * Refactor the CSV output (by Nicolargo) * Glances client fallback to SNMP server if Glances one not found (by Nicolargo) * Process list: Highlight running/basename processes (by Alessio Sergi) * New Web server mode thk to the Bottle library (by Nicolargo) * Responsive design for Bottle interface (by Nicolargo) * Remove HTML output (by Nicolargo) * Enable/disable for optional plugins through the command line (by Nicolargo) * Refactor the API (by Nicolargo) * Load-5 alert are no longer logged (by Nicolargo) * Rename In/Out by Read/Write for DiskIO according to #339 (by Nicolargo) * Migrate from pysensors to py3sensors (by Alessio Sergi) * Migration to PsUtil 2.x (by Nicolargo) * New plugins system (by Nicolargo) * Python 2.x and 3.x compatibility (by Alessio Sergi) * Code quality improvements (by Alessio Sergi) * Refactor unitaries tests (by Nicolargo) * Development now follow the git flow workflow (by Nicolargo) ============================================================================== Glances Version 1.x ============================================================================== Version 1.7.7 ============= * Fix CVS export [issue #348] * Adapt to PSUtil 2.1.1 * Compatibility with Python 3.4 * Improve German update Version 1.7.6 ============= * Adapt to psutil 2.0.0 API * Fixed psutil 0.5.x support on Windows * Fix help screen in 80x24 terminal size * Implement toggle of process list display ('z' key) Version 1.7.5 ============= * Force the Pypi installer to use the PsUtil branch 1.x (#333) Version 1.7.4 ============= * Add threads number in the task summary line (#308) * Add system uptime (#276) * Add CPU steal % to cpu extended stats (#309) * You can hide disk from the IOdisk view using the conf file (#304) * You can hide network interface from the Network view using the conf file * Optimisation of CPU consumption (around ~10%) * Correct issue #314: Client/server mode always asks for password * Correct issue #315: Defining password in client/server mode doesn't work as intended * Correct issue #316: Crash in client server mode * Correct issue #318: Argument parser, try-except blocks never get triggered Version 1.7.3 ============= * Add --password argument to enter the client/server password from the prompt * Fix an issue with the configuration file path (#296) * Fix an issue with the HTML template (#301) Version 1.7.2 ============= * Console interface is now Microsoft Windows compatible (thk to @fraoustin) * Update documentation and Wiki regarding the API * Added package name for python sources/headers in openSUSE/SLES/SLED * Add FreeBSD packager * Bugs corrected Version 1.7.1 ============= * Fix IoWait error on FreeBSD / Mac OS * HDDTemp module is now Python v3 compatible * Don't warn a process is not running if countmin=0 * Add Pypi badge on the README.rst * Update documentation * Add document structure for http://readthedocs.org Version 1.7 =========== * Add monitored processes list * Add hard disk temperature monitoring (thanks to the HDDtemp daemon) * Add batteries capacities information (thanks to the Batinfo lib) * Add command line argument -r toggles processes (reduce CPU usage) * Add command line argument -1 to run Glances in per CPU mode * Platform/architecture is more specific now * XML-RPC server: Add IPv6 support for the client/server mode * Add support for local conf file * Add a uninstall script * Add getNetTimeSinceLastUpdate() getDiskTimeSinceLastUpdate() and getProcessDiskTimeSinceLastUpdate() in the API * Add more translation: Italien, Chinese * and last but not least... up to 100 hundred bugs corrected / software and * docs improvements Version 1.6.1 ============= * Add per-user settings (configuration file) support * Add -z/--nobold option for better appearance under Solarized terminal * Key 'u' shows cumulative net traffic * Work in improving autoUnit * Take into account the number of core in the CPU process limit * API improvment add time_since_update for disk, process_disk and network * Improve help display * Add more dummy FS to the ignore list * Code refactory: PsUtil < 0.4.1 is depredicated (Thk to Alessio) * Correct a bug on the CPU process limit * Fix crash bug when specifying custom server port * Add Debian style init script for the Glances server Version 1.6 =========== * Configuration file: user can defines limits * In client/server mode, limits are set by the server side * Display limits in the help screen * Add per process IO (read and write) rate in B per second IO rate only available on Linux from a root account * If CPU iowait alert then sort by processes by IO rate * Per CPU display IOwait (if data is available) * Add password for the client/server mode (-P password) * Process column style auto (underline) or manual (bold) * Display a sort indicator (is space is available) * Change the table key in the help screen Version 1.5.2 ============= * Add sensors module (enable it with -e option) * Improve CPU stats (IO wait, Nice, IRQ) * More stats in lower space (yes it's possible) * Refactor processes list and count (lower CPU/MEM footprint) * Add functions to the RCP method * Completed unit test * and fixes... Version 1.5.1 ============= * Patch for PsUtil 0.4 compatibility * Test PsUtil version before running Glances Version 1.5 =========== * Add a client/server mode (XMLRPC) for remote monitoring * Correct a bug on process IO with non root users * Add 'w' shortkey to delete finished warning message * Add 'x' shortkey to delete finished warning/critical message * Bugs correction * Code optimization Version 1.4.2.2 =============== * Add switch between bit/sec and byte/sec for network IO * Add Changelog (generated with gitchangelog) Version 1.4.2.1 =============== * Minor patch to solve memomy issue (#94) on Mac OS X Version 1.4.2 ============= * Use the news virtual_memory() and virtual_swap() fct (PsUtil) * Display "Top process" in logs * Minor patch on man page for Debian packaging * Code optimization (less try and except) Version 1.4.1.1 =============== * Minor patch to disable Process IO for OS X (not available in PsUtil) Version 1.4.1 ============= * Per core CPU stats (if space is available) * Add Process IO Read/Write information (if space is available) * Uniformize units Version 1.4 =========== * Goodby StatGrab... Welcome to the PsUtil library ! * No more autotools, use setup.py to install (or package) * Only major stats (CPU, Load and memory) use background colors * Improve operating system name detection * New system info: one-line layout and add Arch Linux support * No decimal places for values < GB * New memory and swap layout * Add percentage of usage for both memory and swap * Add MEM% usage, NICE, STATUS, UID, PID and running TIME per process * Add sort by MEM% ('m' key) * Add sort by Process name ('p' key) * Multiple minor fixes, changes and improvements * Disable Disk IO module from the command line (-d) * Disable Mount module from the command line (-m) * Disable Net rate module from the command line (-n) * Improved FreeBSD support * Cleaning code and style * Code is now checked with pep8 * CSV and HTML output (experimental functions, no yet documentation) Version 1.3.7 ============= * Display (if terminal space is available) an alerts history (logs) * Add a limits classe to manage stats limits * Manage black and white console (issue #31) Version 1.3.6 ============= * Add control before libs import * Change static Python path (issue #20) * Correct a bug with a network interface disaippear (issue #27) * Add French and Spanish translation (thx to Jean Bob) Version 1.3.5 ============= * Add an help panel when Glances is running (key: 'h') * Add keys descriptions in the syntax (--help | -h) Version 1.3.4 ============= * New key: 'n' to enable/disable network stats * New key: 'd' to enable/disable disk IO stats * New key: 'f' to enable/disable FS stats * Reorganised the screen when stat are not available|disable * Force Glances to use the enmbeded fs stats (issue #16) Version 1.3.3 ============= * Automatically swith between process short and long name * Center the host / system information * Always put the hour/date in the bottom/right * Correct a bug if there is a lot of Disk/IO * Add control about available libstatgrab functions Version 1.3.2 ============= * Add alert for network bit rate° * Change the caption * Optimised net, disk IO and fs display (share the space) Disable on Ubuntu because the libstatgrab return a zero value for the network interface speed. Version 1.3.1 ============= * Add alert on load (depend on number of CPU core) * Fix bug when the FS list is very long Version 1.3 =========== * Add file system stats (total and used space) * Adapt unit dynamically (K, M, G) * Add man page (Thanks to Edouard Bourguignon) Version 1.2 =========== * Resize the terminal and the windows are adapted dynamically * Refresh screen instantanetly when a key is pressed Version 1.1.3 ============= * Add disk IO monitoring * Add caption * Correct a bug when computing the bitrate with the option -t * Catch CTRL-C before init the screen (Bug #2) * Check if mem.total = 0 before division (Bug #1) glances-2.3/README.rst000066400000000000000000000147241246314757600145100ustar00rootroot00000000000000=============================== Glances - An eye on your system =============================== .. image:: https://api.flattr.com/button/flattr-badge-large.png :target: https://flattr.com/thing/484466/nicolargoglances-on-GitHub .. image:: https://scrutinizer-ci.com/g/nicolargo/glances/badges/quality-score.png?b=master :target: https://scrutinizer-ci.com/g/nicolargo/glances/ .. image:: https://travis-ci.org/nicolargo/glances.png?branch=master :target: https://travis-ci.org/nicolargo/glances .. image:: https://badge.fury.io/py/Glances.png :target: http://badge.fury.io/py/Glances .. image:: https://pypip.in/d/Glances/badge.png :target: https://pypi.python.org/pypi/Glances/ :alt: Downloads Follow Glances on Twitter: `@nicolargo`_ or `@glances_system`_ **Glances** is a cross-platform curses-based system monitoring tool written in Python. It uses the `psutil`_ library to get information from your system. .. image:: https://raw.github.com/nicolargo/glances/master/docs/images/screenshot-wide.png Requirements ============ - ``python >= 2.6`` (tested with version 2.6, 2.7, 3.3, 3.4) - ``psutil >= 2.0.0`` - ``setuptools`` Optionals dependencies: - ``bottle`` (for Web server mode) - ``py3sensors`` (for hardware monitoring support) [Linux-only] - ``hddtemp`` (for HDD temperature monitoring support) [Linux-only] - ``batinfo`` (for battery monitoring support) [Linux-only] - ``pymdstat`` (for RAID support) [Linux-only] - ``pysnmp`` (for SNMP support) - ``zeroconf`` and ``netifaces`` (for the auto discoverer mode) - ``influxdb`` (for the InfluxDB export module) - ``statsd`` (for the StatsD export module) - ``pystache`` (for the action script feature) - ``docker-py`` (for the Docker monitoring support) [Linux-only] Installation ============ Glances Auto Install script --------------------------- To install both dependencies and latest Glances production ready version (aka *master* branch), just enter the following command line: .. code-block:: console curl -L http://bit.ly/glances | /bin/bash or .. code-block:: console wget -O- http://bit.ly/glances | /bin/bash *Note*: Only supported on some GNU/Linux distributions. If you want to support other distributions, please contribute to `glancesautoinstall`_. PyPI: The simple way -------------------- Glances is on ``PyPI``. By using PyPI, you are sure to have the latest stable version. To install, simply use ``pip``: .. code-block:: console pip install Glances *Note*: Python headers are required to install psutil. For example, on Debian/Ubuntu you need to install first the *python-dev* package. *Note 2*: You can also install the following libs in order to use optionnal features: .. code-block:: console pip install bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz zeroconf netifaces pymdstat influxdb statsd pystache To upgrade Glances to the latest version: .. code-block:: console pip install --upgrade Glances If you need to install Glances in a specific user location, use: .. code-block:: console export PYTHONUSERBASE=~/mylocalpath pip install --user Glances GNU/Linux --------- At the moment, packages exist for the following GNU/Linux distributions: - Arch Linux - Debian (Testing/Sid) - Fedora/CentOS/RHEL - Gentoo - Slackware (SlackBuild) - Ubuntu (13.04+) - Void Linux So you should be able to install it using your favorite package manager. FreeBSD ------- To install the binary package: .. code-block:: console # pkg install py27-glances To install Glances from ports: .. code-block:: console # cd /usr/ports/sysutils/py-glances/ # make install clean OS X ---- OS X users can install Glances using ``Homebrew`` or ``MacPorts``. Homebrew ```````` .. code-block:: console $ brew install python $ pip install Glances MacPorts ```````` .. code-block:: console $ sudo port install glances Windows ------- - Install Python for Windows: http://www.python.org/getit/ - Install the psutil library: https://pypi.python.org/pypi?:action=display&name=psutil#downloads - Install the colorconsole library: https://pypi.python.org/pypi/colorconsole - Install Glances Download Glances from here: http://nicolargo.github.io/glances/ Source ------ To install Glances from source: .. code-block:: console $ curl -L https://github.com/nicolargo/glances/archive/vX.Y.tar.gz -o glances-X.Y.tar.gz $ tar -zxvf glances-*.tar.gz $ cd glances-* # python setup.py install *Note*: Python headers are required to install psutil. For example, on Debian/Ubuntu you need to install first the *python-dev* package. Puppet ------ You can install Glances using ``Puppet``: https://github.com/rverchere/puppet-glances Usage ===== For the standalone mode, just run: .. code-block:: console $ glances For the Web server mode, run: .. code-block:: console $ glances -w and enter the URL ``http://:61208`` in your favorite web browser. For the client/server mode, run: .. code-block:: console $ glances -s on the server side and run: .. code-block:: console $ glances -c on the client one. You can also detect and display all Glances servers available on your network or defined in the configuration file: .. code-block:: console $ glances --browser and RTFM, always. Documentation ============= For complete documentation see `glances-doc`_. If you have any question (after RTFM!), please post it on the official Q&A `forum`_. Gateway to other services ========================= Glances can export stats to: ``CSV`` file, ``InfluxDB`` and ``StatsD`` server. How to contribute ? =================== If you want to contribute to the Glances project, read this `Wiki`_ page. There is also a chat dedicated to the Glances' developpers: .. image:: https://badges.gitter.im/Join%20Chat.svg :target: https://gitter.im/nicolargo/glances?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge Author ====== Nicolas Hennion (@nicolargo) License ======= LGPL. See ``COPYING`` for more details. .. _psutil: https://github.com/giampaolo/psutil .. _glancesautoinstall: https://github.com/nicolargo/glancesautoinstall .. _@nicolargo: https://twitter.com/nicolargo .. _@glances_system: https://twitter.com/glances_system .. _glances-doc: https://github.com/nicolargo/glances/blob/master/docs/glances-doc.rst .. _forum: https://groups.google.com/forum/?hl=en#!forum/glances-users .. _Wiki: https://github.com/nicolargo/glances/wiki/How-to-contribute-to-Glances-%3F glances-2.3/conf/000077500000000000000000000000001246314757600137365ustar00rootroot00000000000000glances-2.3/conf/glances-test.conf000066400000000000000000000102431246314757600171760ustar00rootroot00000000000000[cpu] # Default values if not defined: 50/70/90 user_careful=50 user_warning=70 user_critical=90 #user_log=False user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert iowait_careful=50 iowait_warning=70 iowait_critical=90 system_careful=50 system_warning=70 system_critical=90 steal_careful=50 steal_warning=70 steal_critical=90 #steal_log=True [percpu] # Default values if not defined: 50/70/90 user_careful=50 user_warning=70 user_critical=90 iowait_careful=50 iowait_warning=70 iowait_critical=90 system_careful=50 system_warning=70 system_critical=90 [load] # Value * number of cores # Default values if not defined: 0.7/1.0/5.0 per number of cores # Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages # http://www.linuxjournal.com/article/9001 careful=0.7 warning=1.0 critical=5.0 #log=False [mem] # Default limits for free RAM memory in % # Default values if not defined: 50/70/90 careful=50 warning=70 critical=90 [memswap] # Default limits for free swap memory in % # Default values if not defined: 50/70/90 careful=50 warning=70 critical=90 [network] # Define the list of hidden network interfaces (comma separeted) hide=lo # WLAN0 alias name wlan0_alias=Wireless # WLAN0 Default limits (in bits per second aka bps) for interface bitrate wlan0_rx_careful=4000000 wlan0_rx_warning=5000000 wlan0_rx_critical=6000000 wlan0_rx_log=True wlan0_tx_careful=700000 wlan0_tx_warning=900000 wlan0_tx_critical=1000000 wlan0_tx_log=True [diskio] # Define the list of hidden disks (comma separeted) hide=sda5 # Alias for sda1 #sda1_alias=IntDisk # SDA1 limits (in bytes per second aka Bps) for interface bitrate sda2_rx_careful=150000000 sda2_rx_warning=180000000 sda2_rx_critical=200000000 #sda2_rx_log=True sda2_tx_careful=150000000 sda2_tx_warning=180000000 sda2_tx_critical=200000000 #sda2_tx_log=True [fs] # Default limits for free filesytem space in % # Default values if not defined: 50/70/90 careful=50 careful_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert warning=70 critical=90 [sensors] # Sensors core limits # Default values if not defined: 60/70/80 temperature_core_careful=50 temperature_core_warning=70 temperature_core_critical=80 # Temperatures in °C for hddtemp # Default values if not defined: 45/52/60 temperature_hdd_careful=45 temperature_hdd_warning=52 temperature_hdd_critical=60 # Battery % limits battery_careful=80 battery_warning=90 battery_critical=95 # Sensors alias temp1_alias=Motherboard 0 temp2_alias=Motherboard 1 core 0_alias=CPU Core 0 core 1_alias=CPU Core 1 [processlist] # Limit values for CPU/MEM per process in % # Default values if not defined: 50/70/90 cpu_careful=50 cpu_warning=70 cpu_critical=90 mem_careful=50 mem_warning=70 mem_critical=90 [monitor] # Define the list of processes to monitor # *** This section is optional *** # The list is composed of items (list_#nb <= 10) # An item is defined: # * description: Description of the processes (max 16 chars) # * regex: regular expression of the processes to monitor # * command: (optional) full path to shell command/script for extended stat # Use with caution. Should return a single line string. # Only execute when at least one process is running # By default display CPU and MEM % # Limitation: Do not use in client / server mode # * countmin: (optional) minimal number of processes # A warning will be displayed if number of process < count # * countmax: (optional) maximum number of processes # A warning will be displayed if number of process > count #list_1_description=Dropbox #list_1_regex=.*dropbox.* #list_1_countmin=1 #list_1_command=dropbox status | head -1 list_1_description=Python programs list_1_regex=.*python.* list_2_description=Famous Xeyes list_2_regex=.*xeyes.* list_2_countmin=1 [serverlist] # Define the static server list server_1_name=localhost server_1_alias=My local PC server_1_port=61209 server_2_name=localhost server_2_port=61235 server_3_name=192.168.0.17 server_3_alias=Another PC on my network server_3_port=61209 server_4_name=pasbon server_4_port=61237 [influxdb] host=localhost port=8086 user=root password=root db=glances [statsd] host=localhost port=8125 #prefix=glances glances-2.3/conf/glances.conf000066400000000000000000000077201246314757600162270ustar00rootroot00000000000000[cpu] # Default values if not defined: 50/70/90 user_careful=50 user_warning=70 user_critical=90 #user_log=False #user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert iowait_careful=50 iowait_warning=70 iowait_critical=90 system_careful=50 system_warning=70 system_critical=90 steal_careful=50 steal_warning=70 steal_critical=90 #steal_log=True [percpu] # Default values if not defined: 50/70/90 user_careful=50 user_warning=70 user_critical=90 iowait_careful=50 iowait_warning=70 iowait_critical=90 system_careful=50 system_warning=70 system_critical=90 [load] # Value * number of cores # Default values if not defined: 0.7/1.0/5.0 per number of cores # Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages # http://www.linuxjournal.com/article/9001 careful=0.7 warning=1.0 critical=5.0 #log=False [mem] # Default limits for free RAM memory in % # Default values if not defined: 50/70/90 careful=50 warning=70 critical=90 [memswap] # Default limits for free swap memory in % # Default values if not defined: 50/70/90 careful=50 warning=70 critical=90 #[network] # Define the list of hidden network interfaces (comma separeted) #hide=lo # WLAN 0 alias #wlan0_alias=Wireless IF # WLAN 0 Default limits (in bits per second aka bps) for interface bitrate #wlan0_rx_careful=4000000 #wlan0_rx_warning=5000000 #wlan0_rx_critical=6000000 #wlan0_rx_log=True #wlan0_tx_careful=700000 #wlan0_tx_warning=900000 #wlan0_tx_critical=1000000 #wlan0_tx_log=True #[diskio] # Define the list of hidden disks (comma separeted) #hide=sda2,sda5 # Alias for sda1 #sda1_alias=IntDisk [fs] # Default limits for free filesytem space in % # Default values if not defined: 50/70/90 # It is also possible to define per mount point value # Example: /_careful=40 careful=50 warning=70 critical=90 [sensors] # Sensors core limits # Default values if not defined: 60/70/80 temperature_core_careful=60 temperature_core_warning=70 temperature_core_critical=80 # Temperatures in °C for hddtemp # Default values if not defined: 45/52/60 temperature_hdd_careful=45 temperature_hdd_warning=52 temperature_hdd_critical=60 # Battery % limits battery_careful=80 battery_warning=90 battery_critical=95 # Sensors alias #temp1_alias=Motherboard 0 #temp2_alias=Motherboard 1 #core 0_alias=CPU Core 0 #core 1_alias=CPU Core 1 [processlist] # Limit values for CPU/MEM per process in % # Default values if not defined: 50/70/90 cpu_careful=50 cpu_warning=70 cpu_critical=90 mem_careful=50 mem_warning=70 mem_critical=90 #[monitor] # Define the list of processes to monitor # *** This section is optional *** # The list is composed of items (list_#nb <= 10) # An item is defined: # * description: Description of the processes (max 16 chars) # * regex: regular expression of the processes to monitor # * command: (optional) full path to shell command/script for extended stat # Use with caution. Should return a single line string. # Only execute when at least one process is running # By default display CPU and MEM % # Limitation: Do not use in client / server mode # * countmin: (optional) minimal number of processes # A warning will be displayed if number of process < count # * countmax: (optional) maximum number of processes # A warning will be displayed if number of process > count #list_1_description=Dropbox #list_1_regex=.*dropbox.* #list_1_countmin=1 #list_1_command=dropbox status | head -1 #list_1_description=Python programs #list_1_regex=.*python.* #list_2_description=Famous Xeyes #list_2_regex=.*xeyes.* #list_2_countmin=1 #[serverlist] # Define the static server list #server_1_name=localhost #server_1_alias=My local PC #server_1_port=61209 #server_2_name=localhost #server_2_port=61235 #server_3_name=192.168.0.17 #server_3_alias=Another PC on my network #server_3_port=61209 #server_4_name=pasbon #server_4_port=61237 [influxdb] host=localhost port=8086 user=root password=root db=glances [statsd] host=localhost port=8125 #prefix=glances glances-2.3/docs/000077500000000000000000000000001246314757600137415ustar00rootroot00000000000000glances-2.3/docs/Makefile000066400000000000000000000127001246314757600154010ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Glances.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Glances.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/Glances" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Glances" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." glances-2.3/docs/conf.py000066400000000000000000000202071246314757600152410ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Glances documentation build configuration file, created by # sphinx-quickstart on Tue Mar 25 19:57:21 2014. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import datetime import os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) cwd = os.path.realpath(os.path.dirname(__file__)) project_path = os.path.realpath(os.path.join(cwd, '..', 'glances')) def get_version(): init_file = os.path.realpath(os.path.join(project_path, '__init__.py')) f = open(init_file, 'r') try: for line in f: if line.startswith('__version__'): return line.strip().split(' = ')[1] else: raise ValueError("Version string not found") finally: f.close() _version = get_version() _year = datetime.datetime.now().year _copyright = u'{0}, Nicolas Hennion'.format(_year) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'Glances' copyright = _copyright # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = _version # The full version, including alpha/beta/rc tags. release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". #html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'Glancesdoc' # -- Options for LaTeX output -------------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'Glances.tex', u'Glances Documentation', u'Nicolas Hennion', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'glances', u'Glances Documentation', [u'Nicolas Hennion'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------------ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'Glances', u'Glances Documentation', u'Nicolas Hennion', 'Glances', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' glances-2.3/docs/glances-doc.html000066400000000000000000001322531246314757600170140ustar00rootroot00000000000000 Glances

Glances

This manual describes Glances version 2.3.

Copyright © 2011-2015 Nicolas Hennion <nicolas@nicolargo.com>

January 2015

Introduction

Glances is a cross-platform curses-based system monitoring tool which aims to present a maximum of information in a minimum of space, ideally to fit in a classical 80x24 terminal or higher to have additional information. It can adapt dynamically the displayed information depending on the terminal size.

Glances can also work in client/server mode. Remote monitoring could be done via terminal or web interface.

Glances is written in Python and uses the psutil library to get information from your system.

Console (80x24)

images/screenshot.png

Full view (>80x24)

images/screenshot-wide.png

Web interface (Firefox)

images/screenshot-web.png

Usage

Standalone Mode

Simply run:

$ glances

Client/Server Mode

If you want to remotely monitor a machine, called server, from another one, called client, just run on the server:

server$ glances -s

and on the client:

client$ glances -c @server

where @server is the IP address or hostname of the server.

Glances can centralize available Glances servers using the --browser option. The server list can be staticaly defined in the Glances configuration file (section [serverlist]). Glances can also detect and display all Glances servers available on you network (auto discover mode is based on the the Zeroconf protocol only available on GNU/Linux and Mac OS X):

client$ glances --browser

It is possible to disable the auto discover mode --disable-autodiscover.

In server mode, you can set the bind address -B ADDRESS and listening TCP port -p PORT.

In client mode, you can set the TCP port of the server -p PORT.

You can set a password to access to the server --password.

Default binding address is 0.0.0.0 (Glances will listen on all the available network interfaces) and TCP port is 61209.

In client/server mode, limits are set by the server side.

Glances is IPv6 compatible. Just use the -B :: option to bind to all IPv6 addresses.

As an experimental feature, if Glances server is not detected by the client, the latter will try to grab stats using the SNMP protocol:

client$ glances -c @snmpserver

Note: Stats grabbed by SNMP request are limited (operating system dependent).

Web Server Mode

If you want to remotely monitor a machine, called server, from any device with a web browser, just run the server with the -w option:

server$ glances -w

and on the client enter the following URL in your favorite web browser:

http://@server:61208

where @server is the IP address or hostname of the server.

To change the refresh rate of the page, just add the period in seconds between refreshes at the end of the URL, ie. to refresh every 10s, use http://@server:61208/10.

The Glances web interface follows responsive web design principles.

Screenshot from Chrome on Android

images/screenshot-web2.png

Command Reference

Command-Line Options

-h, --help show this help message and exit
-V, --version show program's version number and exit
-d, --debug Enable debug mode
-C CONF_FILE, --config CONF_FILE
 path to the configuration file
--enable-history
 enable the history mode
--disable-bold disable bold mode in the terminal
--disable-diskio
 disable disk I/O module
--disable-fs disable filesystem module
--disable-network
 disable network module
--disable-sensors
 disable sensors module
--disable-left-sidebar
 disable left sidebar
--disable-process
 disable process module
--disable-log disable log module
--enable-process-extended
 enable extended stats on top process
--enable-history
 enable the history mode
--path-history PATH_HISTORY
 Set the export path for graph history
--export-csv CSV_FILE
 export stats to a CSV file
--export-influxdb
 export stats to an InfluxDB server
--export-statsd
 export stats to a Statsd server
-c CLIENT, --client CLIENT
 connect to a Glances server by IPv4/IPv6 address or hostname
-s, --server run Glances in server mode
--browser run the Glances client browser (list of Glances server)
--disable-autodiscover
 disable autodiscover feature
-p PORT, --port PORT
 define the client/server TCP port [default: 61209]
-B BIND_ADDRESS, --bind BIND_ADDRESS
 bind server to the given IPv4/IPv6 address or hostname
--password-badidea PASSWORD_ARG
 define password from the command line
--password define a client/server password from the prompt or file
--disable-autodiscover
 Hide Glances server from the auto discover feature
--snmp-community SNMP_COMMUNITY
 SNMP community
--snmp-port SNMP_PORT
 SNMP port
--snmp-version SNMP_VERSION
 SNMP version (1, 2c or 3)
--snmp-user SNMP_USER
 SNMP username (only for SNMPv3)
--snmp-auth SNMP_AUTH
 SNMP authentication key (only for SNMPv3)
--snmp-force force SNMP mode
-t TIME, --time TIME
 set refresh time in seconds [default: 3 sec]
-w, --webserver
 run Glances in web server mode
-f PROCESS_FILTER, --process-filter PROCESS_FILTER
 set the process filter patern (regular expression)
--process-short-name
 force short name for processes name
--hide-kernel-threads
 hide kernel threads in process list
--tree display processes as a tree
-b, --byte display network rate in byte per second
-1, --percpu start Glances in per CPU mode
--fs-free-space
 display FS free space instead of used
--theme-white optimize display for white background

Interactive Commands

The following commands (key pressed) are supported while in Glances:

ENTER

Set the process filter Filter is a regular expression pattern:

  • gnome: all processes starting with the gnome string
  • .*gnome.*: all processes containing the gnome string
a

Sort process list automatically

  • If CPU iowait >60%, sort processes by I/O read and write
  • If CPU >70%, sort processes by CPU usage
  • If MEM >70%, sort processes by memory usage
b
Switch between bit/s or Byte/s for network I/O
c
Sort processes by CPU usage
d
Show/hide disk I/O stats
e
Enable/disable top extended stats
f
Show/hide file system stats
F
Switch between FS used and free space
g
Generate graphs for current history
h
Show/hide the help screen
i
Sort processes by I/O rate
l
Show/hide log messages
m
Sort processes by MEM usage
n
Show/hide network stats
p
Sort processes by name
q or ESC
Quit the current Glances session
r
Reset history
s
Show/hide sensors stats
t
Sort process by CPU times (TIME+)
T
View network I/O as combination
u
View cumulative network I/O
w
Delete finished warning log messages
x
Delete finished warning and critical log messages
z
Show/hide processes stats
1
Switch between global CPU and per-CPU stats
2
Enable/disable left sidebar
/
Switch between short name / command line (processes name)

In the Glances client browser (accessible through the --browser command line argument):

ENTER
Run Glances client to the selected server
UP
Up in the servers list
DOWN
Down in the servers list
q or ESC
Quit Glances

Configuration

No configuration file is mandatory to use Glances.

Furthermore a configuration file is needed to set up limits, disks or network interfaces to hide and/or monitored processes list or to define alias.

By default, the configuration file is under:

Linux:/etc/glances/glances.conf
*BSD and OS X:/usr/local/etc/glances/glances.conf
Windows:%APPDATA%\glances\glances.conf

On Windows XP, the %APPDATA% path is:

C:\Documents and Settings\<User>\Application Data

Since Windows Vista and newer versions:

C:\Users\<User>\AppData\Roaming
or
%userprofile%\AppData\Roaming

You can override the default configuration, located in one of the above directories on your system, except for Windows.

Just copy the glances.conf file to your $XDG_CONFIG_HOME directory, e.g., on Linux:

mkdir -p $XDG_CONFIG_HOME/glances
cp /usr/share/doc/glances/glances.conf $XDG_CONFIG_HOME/glances/

On OS X, you should copy the configuration file to ~/Library/Application Support/glances/.

Configuration file description

Each plugin and export module can have a section.

Example for the CPU plugin:

[cpu]
user_careful=50
user_warning=70
user_critical=90
iowait_careful=50
iowait_warning=70
iowait_critical=90
system_careful=50
system_warning=70
system_critical=90
steal_careful=50
steal_warning=70
steal_critical=90

By default Steal CPU time alerts aren't logged. If you want to enable log/alert, just add:

steal_log=True

Logs and debug mode

Glances logs all its internal messages to a log file. By default, only INFO & WARNING & ERROR &CRITICAL levels are logged, but DEBUG messages can ben logged using the -d option on the command line.

By default, the log file is under:

Linux, *BSD and OS X:
 /tmp/glances.log
Windows:%APPDATA%\Local\temp\glances.log

If glances.log is not writable, a new file will be created and returned to the user console.

Anatomy Of The Application

Legend

GREEN stat counter is "OK"
BLUE stat counter is "CAREFUL"
MAGENTA stat counter is "WARNING"
RED stat counter is "CRITICAL"

Note: only stats with colored background will be logged in the alert view.

CPU

Short view:

images/cpu.png

If enough horizontal space is available, extended CPU information are displayed.

Extended view:

images/cpu-wide.png

To switch to per-CPU stats, just hit the 1 key:

images/per-cpu.png

The CPU stats are shown as a percentage and for the configured refresh time. The total CPU usage is displayed on the first line.

If user|system CPU is <50%, then status is set to "OK"
If user|system CPU is >50%, then status is set to "CAREFUL"
If user|system CPU is >70%, then status is set to "WARNING"
If user|system CPU is >90%, then status is set to "CRITICAL"

Note: limit values can be overwritten in the configuration file under the [cpu] and/or [percpu] sections.

Load

images/load.png

On the No Sheep blog, Zachary Tirrell defines the load average [1]:

"In short it is the average sum of the number of processes waiting in the run-queue plus the number currently executing over 1, 5, and 15 minutes time periods."

Glances gets the number of CPU core to adapt the alerts. Alerts on load average are only set on 15 minutes time period. The first line also displays the number of CPU core.

If load average is <0.7*core, then status is set to "OK"
If load average is >0.7*core, then status is set to "CAREFUL"
If load average is >1*core, then status is set to "WARNING"
If load average is >5*core, then status is set to "CRITICAL"

Note: limit values can be overwritten in the configuration file under the [load] section.

Memory

Glances uses two columns: one for the RAM and one for the SWAP.

images/mem.png

If enough space is available, Glances displays extended information for the RAM:

images/mem-wide.png

Alerts are only set for used memory and used swap.

If used memory|swap is <50%, then status is set to "OK"
If used memory|swap is >50%, then status is set to "CAREFUL"
If used memory|swap is >70%, then status is set to "WARNING"
If used memory|swap is >90%, then status is set to "CRITICAL"

Note: limit values can be overwritten in the configuration file under the [memory] and/or [memswap] sections.

Network

images/network.png

Glances displays the network interface bit rate. The unit is adapted dynamically (bits per second, kbits per second, Mbits per second, etc).

Alerts are only set if the maximum speed per network interface is available (see sample in the configuration file).

Note: it is possibile to define a list of network interfaces to hide and per-interface limit values in the [network] section of the configuration file and aliases for interface name.

Disk I/O

images/diskio.png

Glances displays the disk I/O throughput. The unit is adapted dynamically.

There is no alert on this information.

Note: it is possible to define a list of disks to hide under the [diskio] section in the configuration file and aliases for disk name.

File System

images/fs.png

Glances displays the used and total file system disk space. The unit is adapted dynamically.

Alerts are set for used disk space.

If used disk is <50%, then status is set to "OK"
If used disk is >50%, then status is set to "CAREFUL"
If used disk is >70%, then status is set to "WARNING"
If used disk is >90%, then status is set to "CRITICAL"

Note: limit values can be overwritten in the configuration file under the [filesystem] section.

If a RAID controller is detected on you system, its status will be displayed:

images/raid.png

Sensors

Glances can displays the sensors information using lm-sensors, hddtemp and batinfo [2].

All of the above libraries are available only on Linux.

As of lm-sensors, a filter is being applied in order to display temperature only.

images/sensors.png

There is no alert on this information.

Note: limit values and sensors alias names can be defined in the configuration file under the [sensors] section.

Processes List

Compact view:

images/processlist.png

Full view:

images/processlist-wide.png

Three views are available for processes:

  • Processes summary
  • Optional monitored processes list (see below)
  • Processes list

The processes summary line display:

  • Tasks number (total number of processes)
  • Threads number
  • Running tasks number
  • Sleeping tasks number
  • Other tasks number (not running or sleeping)
  • Sort key

By default, or if you hit the a key, the processes list is automatically sorted by:

  • CPU if there is no alert (default behavior)
  • CPU if a CPU or LOAD alert is detected
  • MEM if a memory alert is detected
  • Disk I/O if a CPU iowait alert is detected

The number of processes in the list is adapted to the screen size.

CPU%
% of CPU used by the process
MEM%
% of MEM used by the process
VIRT
Total program size - Virtual Memory Size (VMS)
RES
Resident Set Size (RSS)
PID
Process ID
USER
User ID
NI
Nice level of the process (niceness other than 0 is highlighted)
S
Process status (running process is highlighted)
TIME+
Cumulative CPU time used
IOR/s
Per process I/O read rate (in Byte/s)
IOW/s
Per process I/O write rate (in Byte/s)
COMMAND
Process command line User cans switch to the process name by pressing on the / key

Process status legend:

R
Running
S
Sleeping (may be interrupted)
D
Disk sleep (may not be interrupted)
T
Traced / Stopped
Z
Zombie

In standalone mode, additionals informations are provided for the top process:

images/processlist-top.png
  • CPU affinity (number of cores used by the process)
  • Extended memory information (swap, shared, text, lib, data and dirty on Linux)
  • Open threads, files and network sessions (TCP and UDP)
  • IO nice level

The extended stats feature could be enabled using the --enable-process-extended option (command line) or the e key (curses interface).

Note: limit values can be overwritten in the configuration file under the [process] section.

Monitored Processes List

The monitored processes list allows user, through the configuration file, to group processes and quickly show if the number of running processes is not good.

images/monitored.png

Each item is defined by:

  • description: description of the processes (max 16 chars).
  • regex: regular expression of the processes to monitor.
  • command (optional): full path to shell command/script for extended stat. Should return a single line string. Use with caution.
  • countmin (optional): minimal number of processes. A warning will be displayed if number of processes < count.
  • countmax (optional): maximum number of processes. A warning will be displayed if number of processes > count.

Up to 10 items can be defined.

For example, if you want to monitor the Nginx processes on a Web server, the following definition should do the job:

[monitor]
list_1_description=Nginx server
list_1_regex=.*nginx.*
list_1_command=nginx -v
list_1_countmin=1
list_1_countmax=4

If you also want to monitor the PHP-FPM daemon processes, you should add another item:

[monitor]
list_1_description=Nginx server
list_1_regex=.*nginx.*
list_1_command=nginx -v
list_1_countmin=1
list_1_countmax=4
list_1_description=PHP-FPM
list_1_regex=.*php-fpm.*
list_1_countmin=1
list_1_countmax=20

In client/server mode, the list is defined on the server side. A new method, called getAllMonitored, is available in the APIs and get the JSON representation of the monitored processes list.

Alerts are set as following:

If number of processes is 0, then status is set to "CRITICAL"
If number of processes is min < current < max, then status is set to "OK"
Else status is set to "WARNING"

Logs

images/logs.png

A log messages list is displayed in the bottom of the screen if (and only if):

  • at least one WARNING or CRITICAL alert was occurred
  • space is available in the bottom of the console/terminal

Each alert message displays the following information:

  1. start datetime
  2. duration if alert is terminated or ongoing if the alert is still in progress
  3. alert name
  4. {min,avg,max} values or number of running processes for monitored processes list alerts

Docker

If you use Docker, Glances can help you to monitor your container. Glances uses the Docker API through the Docker-Py library.

images/docker.png

Actions

Glances can trigger actions on events.

By action, we mean all shell command line. For example, if you want to execute the foo.py script if the last 5 minutes load are critical then add the action line to the Glances configuration file:

[load]
critical=5.0
critical_action=python /path/to/foo.py

All the stats are available in the command line through the use of the {{mustache}} syntax. Another example to create a log file containing used vs total disk space if a space trigger warning is reached:

[fs]
warning=70
warning_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert

Note: You can use all the stats for the current plugin (see https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to for the stats list)

Gateway to others services

CSV

It is possible to export statistics to CSV file.

$ glances --export-csv /tmp/glances.csv

CSV file description: - Stats description (first line) - Stats (others lines)

InfluxDB

You can export statistics to an InfluxDB server (time series server). The connection should be defined in the Glances configuration file as following:

[influxdb]
host=localhost
port=8086
user=root
password=root
db=glances

and run Glances with:

$ glances --export-influxdb

Statsd

You can export statistics to a Statsd server (welcome to Graphite !). The connection should be defined in the Glances configuration file as following:

[statsd]
host=localhost
port=8125
prefix=glances

Note: the prefix option is optionnal ('glances by default')

and run Glances with:

$ glances --export-statsd

Glances will generate stats as:

'glances.cpu.user': 12.5,
'glances.cpu.total': 14.9,
'glances.load.cpucore': 4,
'glances.load.min1': 0.19,
...

APIs Documentations

Glances includes a XML-RPC server and a RESTFUL-JSON API which and can be used by another client software.

APIs documentations are available at:

Support

To post a question about Glances use case, please post it to the offical Q&A forum.

To report a bug or a feature request use the bug tracking system at https://github.com/nicolargo/glances/issues.

Feel free to contribute !

[1]http://nosheep.net/story/defining-unix-load-average/
[2]https://github.com/nicolargo/batinfo
glances-2.3/docs/glances-doc.rst000066400000000000000000000547051246314757600166650ustar00rootroot00000000000000======= Glances ======= This manual describes *Glances* version 2.3. Copyright © 2011-2015 Nicolas Hennion January 2015 .. contents:: Table of Contents Introduction ============ Glances is a cross-platform curses-based system monitoring tool which aims to present a maximum of information in a minimum of space, ideally to fit in a classical 80x24 terminal or higher to have additional information. It can adapt dynamically the displayed information depending on the terminal size. Glances can also work in client/server mode. Remote monitoring could be done via terminal or web interface. Glances is written in Python and uses the `psutil`_ library to get information from your system. Console (80x24) .. image:: images/screenshot.png Full view (>80x24) .. image:: images/screenshot-wide.png Web interface (Firefox) .. image:: images/screenshot-web.png Usage ===== Standalone Mode --------------- Simply run: .. code-block:: console $ glances Client/Server Mode ------------------ If you want to remotely monitor a machine, called ``server``, from another one, called ``client``, just run on the server: .. code-block:: console server$ glances -s and on the client: .. code-block:: console client$ glances -c @server where ``@server`` is the IP address or hostname of the server. Glances can centralize available Glances servers using the ``--browser`` option. The server list can be staticaly defined in the Glances configuration file (section [serverlist]). Glances can also detect and display all Glances servers available on you network (auto discover mode is based on the the Zeroconf protocol only available on GNU/Linux and Mac OS X): .. code-block:: console client$ glances --browser It is possible to disable the auto discover mode ``--disable-autodiscover``. In server mode, you can set the bind address ``-B ADDRESS`` and listening TCP port ``-p PORT``. In client mode, you can set the TCP port of the server ``-p PORT``. You can set a password to access to the server ``--password``. Default binding address is ``0.0.0.0`` (Glances will listen on all the available network interfaces) and TCP port is ``61209``. In client/server mode, limits are set by the server side. Glances is ``IPv6`` compatible. Just use the ``-B ::`` option to bind to all IPv6 addresses. As an experimental feature, if Glances server is not detected by the client, the latter will try to grab stats using the ``SNMP`` protocol: .. code-block:: console client$ glances -c @snmpserver Note: Stats grabbed by SNMP request are limited (operating system dependent). Web Server Mode --------------- If you want to remotely monitor a machine, called ``server``, from any device with a web browser, just run the server with the ``-w`` option: .. code-block:: console server$ glances -w and on the client enter the following URL in your favorite web browser: :: http://@server:61208 where ``@server`` is the IP address or hostname of the server. To change the refresh rate of the page, just add the period in seconds between refreshes at the end of the URL, ie. to refresh every 10s, use ``http://@server:61208/10``. The Glances web interface follows responsive web design principles. Screenshot from Chrome on Android .. image:: images/screenshot-web2.png Command Reference ================= Command-Line Options -------------------- -h, --help show this help message and exit -V, --version show program's version number and exit -d, --debug Enable debug mode -C CONF_FILE, --config CONF_FILE path to the configuration file --enable-history enable the history mode --disable-bold disable bold mode in the terminal --disable-diskio disable disk I/O module --disable-fs disable filesystem module --disable-network disable network module --disable-sensors disable sensors module --disable-left-sidebar disable left sidebar --disable-process disable process module --disable-log disable log module --enable-process-extended enable extended stats on top process --enable-history enable the history mode --path-history PATH_HISTORY Set the export path for graph history --export-csv CSV_FILE export stats to a CSV file --export-influxdb export stats to an InfluxDB server --export-statsd export stats to a Statsd server -c CLIENT, --client CLIENT connect to a Glances server by IPv4/IPv6 address or hostname -s, --server run Glances in server mode --browser run the Glances client browser (list of Glances server) --disable-autodiscover disable autodiscover feature -p PORT, --port PORT define the client/server TCP port [default: 61209] -B BIND_ADDRESS, --bind BIND_ADDRESS bind server to the given IPv4/IPv6 address or hostname --password-badidea PASSWORD_ARG define password from the command line --password define a client/server password from the prompt or file --disable-autodiscover Hide Glances server from the auto discover feature --snmp-community SNMP_COMMUNITY SNMP community --snmp-port SNMP_PORT SNMP port --snmp-version SNMP_VERSION SNMP version (1, 2c or 3) --snmp-user SNMP_USER SNMP username (only for SNMPv3) --snmp-auth SNMP_AUTH SNMP authentication key (only for SNMPv3) --snmp-force force SNMP mode -t TIME, --time TIME set refresh time in seconds [default: 3 sec] -w, --webserver run Glances in web server mode -f PROCESS_FILTER, --process-filter PROCESS_FILTER set the process filter patern (regular expression) --process-short-name force short name for processes name --hide-kernel-threads hide kernel threads in process list --tree display processes as a tree -b, --byte display network rate in byte per second -1, --percpu start Glances in per CPU mode --fs-free-space display FS free space instead of used --theme-white optimize display for white background Interactive Commands -------------------- The following commands (key pressed) are supported while in Glances: ``ENTER`` Set the process filter Filter is a regular expression pattern: - gnome: all processes starting with the gnome string - .*gnome.*: all processes containing the gnome string ``a`` Sort process list automatically - If CPU iowait ``>60%``, sort processes by I/O read and write - If CPU ``>70%``, sort processes by CPU usage - If MEM ``>70%``, sort processes by memory usage ``b`` Switch between bit/s or Byte/s for network I/O ``c`` Sort processes by CPU usage ``d`` Show/hide disk I/O stats ``e`` Enable/disable top extended stats ``f`` Show/hide file system stats ``F`` Switch between FS used and free space ``g`` Generate graphs for current history ``h`` Show/hide the help screen ``i`` Sort processes by I/O rate ``l`` Show/hide log messages ``m`` Sort processes by MEM usage ``n`` Show/hide network stats ``p`` Sort processes by name ``q`` or ``ESC`` Quit the current Glances session ``r`` Reset history ``s`` Show/hide sensors stats ``t`` Sort process by CPU times (TIME+) ``T`` View network I/O as combination ``u`` View cumulative network I/O ``w`` Delete finished warning log messages ``x`` Delete finished warning and critical log messages ``z`` Show/hide processes stats ``1`` Switch between global CPU and per-CPU stats ``2`` Enable/disable left sidebar ``/`` Switch between short name / command line (processes name) In the Glances client browser (accessible through the --browser command line argument): ``ENTER`` Run Glances client to the selected server ``UP`` Up in the servers list ``DOWN`` Down in the servers list ``q`` or ``ESC`` Quit Glances Configuration ============= No configuration file is mandatory to use Glances. Furthermore a configuration file is needed to set up limits, disks or network interfaces to hide and/or monitored processes list or to define alias. By default, the configuration file is under: :Linux: ``/etc/glances/glances.conf`` :\*BSD and OS X: ``/usr/local/etc/glances/glances.conf`` :Windows: ``%APPDATA%\glances\glances.conf`` On Windows XP, the ``%APPDATA%`` path is: :: C:\Documents and Settings\\Application Data Since Windows Vista and newer versions: :: C:\Users\\AppData\Roaming or %userprofile%\AppData\Roaming You can override the default configuration, located in one of the above directories on your system, except for Windows. Just copy the ``glances.conf`` file to your ``$XDG_CONFIG_HOME`` directory, e.g., on Linux: .. code-block:: console mkdir -p $XDG_CONFIG_HOME/glances cp /usr/share/doc/glances/glances.conf $XDG_CONFIG_HOME/glances/ On OS X, you should copy the configuration file to ``~/Library/Application Support/glances/``. *Configuration file description* Each plugin and export module can have a section. Example for the CPU plugin: .. code-block:: [cpu] user_careful=50 user_warning=70 user_critical=90 iowait_careful=50 iowait_warning=70 iowait_critical=90 system_careful=50 system_warning=70 system_critical=90 steal_careful=50 steal_warning=70 steal_critical=90 By default Steal CPU time alerts aren't logged. If you want to enable log/alert, just add: .. code-block:: steal_log=True Logs and debug mode =================== Glances logs all its internal messages to a log file. By default, only INFO & WARNING & ERROR &CRITICAL levels are logged, but DEBUG messages can ben logged using the -d option on the command line. By default, the log file is under: :Linux, \*BSD and OS X: ``/tmp/glances.log`` :Windows: ``%APPDATA%\Local\temp\glances.log`` If glances.log is not writable, a new file will be created and returned to the user console. Anatomy Of The Application ========================== Legend ------ | ``GREEN`` stat counter is ``"OK"`` | ``BLUE`` stat counter is ``"CAREFUL"`` | ``MAGENTA`` stat counter is ``"WARNING"`` | ``RED`` stat counter is ``"CRITICAL"`` *Note*: only stats with colored background will be logged in the alert view. Header ------ .. image:: images/header.png The header shows the hostname, OS name, release version, platform architecture and system uptime (on the upper right corner). Additionally, on GNU/Linux, it also shows the kernel version. In client mode, the server connection status is displayed. Connected: .. image:: images/connected.png Disconnected: .. image:: images/disconnected.png CPU --- Short view: .. image:: images/cpu.png If enough horizontal space is available, extended CPU information are displayed. Extended view: .. image:: images/cpu-wide.png To switch to per-CPU stats, just hit the ``1`` key: .. image:: images/per-cpu.png The CPU stats are shown as a percentage and for the configured refresh time. The total CPU usage is displayed on the first line. | If user|system CPU is ``<50%``, then status is set to ``"OK"`` | If user|system CPU is ``>50%``, then status is set to ``"CAREFUL"`` | If user|system CPU is ``>70%``, then status is set to ``"WARNING"`` | If user|system CPU is ``>90%``, then status is set to ``"CRITICAL"`` *Note*: limit values can be overwritten in the configuration file under the ``[cpu]`` and/or ``[percpu]`` sections. Load ---- .. image:: images/load.png On the *No Sheep* blog, *Zachary Tirrell* defines the load average [1]_: "In short it is the average sum of the number of processes waiting in the run-queue plus the number currently executing over 1, 5, and 15 minutes time periods." Glances gets the number of CPU core to adapt the alerts. Alerts on load average are only set on 15 minutes time period. The first line also displays the number of CPU core. | If load average is ``<0.7*core``, then status is set to ``"OK"`` | If load average is ``>0.7*core``, then status is set to ``"CAREFUL"`` | If load average is ``>1*core``, then status is set to ``"WARNING"`` | If load average is ``>5*core``, then status is set to ``"CRITICAL"`` *Note*: limit values can be overwritten in the configuration file under the ``[load]`` section. Memory ------ Glances uses two columns: one for the ``RAM`` and one for the ``SWAP``. .. image:: images/mem.png If enough space is available, Glances displays extended information for the ``RAM``: .. image:: images/mem-wide.png Alerts are only set for used memory and used swap. | If used memory|swap is ``<50%``, then status is set to ``"OK"`` | If used memory|swap is ``>50%``, then status is set to ``"CAREFUL"`` | If used memory|swap is ``>70%``, then status is set to ``"WARNING"`` | If used memory|swap is ``>90%``, then status is set to ``"CRITICAL"`` *Note*: limit values can be overwritten in the configuration file under the ``[memory]`` and/or ``[memswap]`` sections. Network ------- .. image:: images/network.png Glances displays the network interface bit rate. The unit is adapted dynamically (bits per second, kbits per second, Mbits per second, etc). Alerts are only set if the maximum speed per network interface is available (see sample in the configuration file). *Note*: it is possibile to define a list of network interfaces to hide and per-interface limit values in the ``[network]`` section of the configuration file and aliases for interface name. Disk I/O -------- .. image:: images/diskio.png Glances displays the disk I/O throughput. The unit is adapted dynamically. There is no alert on this information. *Note*: it is possible to define a list of disks to hide under the ``[diskio]`` section in the configuration file and aliases for disk name. File System ----------- .. image:: images/fs.png Glances displays the used and total file system disk space. The unit is adapted dynamically. Alerts are set for used disk space. | If used disk is ``<50%``, then status is set to ``"OK"`` | If used disk is ``>50%``, then status is set to ``"CAREFUL"`` | If used disk is ``>70%``, then status is set to ``"WARNING"`` | If used disk is ``>90%``, then status is set to ``"CRITICAL"`` *Note*: limit values can be overwritten in the configuration file under the ``[filesystem]`` section. If a RAID controller is detected on you system, its status will be displayed: .. image:: images/raid.png Sensors ------- Glances can displays the sensors information using `lm-sensors`, `hddtemp` and `batinfo` [2]_. All of the above libraries are available only on Linux. As of lm-sensors, a filter is being applied in order to display temperature only. .. image:: images/sensors.png There is no alert on this information. *Note*: limit values and sensors alias names can be defined in the configuration file under the ``[sensors]`` section. Processes List -------------- Compact view: .. image:: images/processlist.png Full view: .. image:: images/processlist-wide.png Three views are available for processes: * Processes summary * Optional monitored processes list (see below) * Processes list The processes summary line display: * Tasks number (total number of processes) * Threads number * Running tasks number * Sleeping tasks number * Other tasks number (not running or sleeping) * Sort key By default, or if you hit the ``a`` key, the processes list is automatically sorted by: * ``CPU`` if there is no alert (default behavior) * ``CPU`` if a CPU or LOAD alert is detected * ``MEM`` if a memory alert is detected * ``Disk I/O`` if a CPU iowait alert is detected The number of processes in the list is adapted to the screen size. ``CPU%`` % of CPU used by the process ``MEM%`` % of MEM used by the process ``VIRT`` Total program size - Virtual Memory Size (VMS) ``RES`` Resident Set Size (RSS) ``PID`` Process ID ``USER`` User ID ``NI`` Nice level of the process (niceness other than 0 is highlighted) ``S`` Process status (running process is highlighted) ``TIME+`` Cumulative CPU time used ``IOR/s`` Per process I/O read rate (in Byte/s) ``IOW/s`` Per process I/O write rate (in Byte/s) ``COMMAND`` Process command line User cans switch to the process name by pressing on the ``/`` key Process status legend: ``R`` Running ``S`` Sleeping (may be interrupted) ``D`` Disk sleep (may not be interrupted) ``T`` Traced / Stopped ``Z`` Zombie In standalone mode, additionals informations are provided for the top process: .. image:: images/processlist-top.png * CPU affinity (number of cores used by the process) * Extended memory information (swap, shared, text, lib, data and dirty on Linux) * Open threads, files and network sessions (TCP and UDP) * IO nice level The extended stats feature could be enabled using the --enable-process-extended option (command line) or the ``e`` key (curses interface). *Note*: limit values can be overwritten in the configuration file under the ``[process]`` section. Monitored Processes List ------------------------ The monitored processes list allows user, through the configuration file, to group processes and quickly show if the number of running processes is not good. .. image:: images/monitored.png Each item is defined by: * ``description``: description of the processes (max 16 chars). * ``regex``: regular expression of the processes to monitor. * ``command`` (optional): full path to shell command/script for extended stat. Should return a single line string. Use with caution. * ``countmin`` (optional): minimal number of processes. A warning will be displayed if number of processes < count. * ``countmax`` (optional): maximum number of processes. A warning will be displayed if number of processes > count. Up to 10 items can be defined. For example, if you want to monitor the Nginx processes on a Web server, the following definition should do the job: :: [monitor] list_1_description=Nginx server list_1_regex=.*nginx.* list_1_command=nginx -v list_1_countmin=1 list_1_countmax=4 If you also want to monitor the PHP-FPM daemon processes, you should add another item: :: [monitor] list_1_description=Nginx server list_1_regex=.*nginx.* list_1_command=nginx -v list_1_countmin=1 list_1_countmax=4 list_1_description=PHP-FPM list_1_regex=.*php-fpm.* list_1_countmin=1 list_1_countmax=20 In client/server mode, the list is defined on the server side. A new method, called `getAllMonitored`, is available in the APIs and get the JSON representation of the monitored processes list. Alerts are set as following: | If number of processes is 0, then status is set to ``"CRITICAL"`` | If number of processes is min < current < max, then status is set to ``"OK"`` | Else status is set to ``"WARNING"`` Logs ---- .. image:: images/logs.png A log messages list is displayed in the bottom of the screen if (and only if): - at least one ``WARNING`` or ``CRITICAL`` alert was occurred - space is available in the bottom of the console/terminal Each alert message displays the following information: 1. start datetime 2. duration if alert is terminated or `ongoing` if the alert is still in progress 3. alert name 4. {min,avg,max} values or number of running processes for monitored processes list alerts Docker ------ If you use Docker, Glances can help you to monitor your container. Glances uses the Docker API through the Docker-Py library. .. image:: images/docker.png Actions ------- Glances can trigger actions on events. By action, we mean all shell command line. For example, if you want to execute the foo.py script if the last 5 minutes load are critical then add the action line to the Glances configuration file: .. code-block:: [load] critical=5.0 critical_action=python /path/to/foo.py All the stats are available in the command line through the use of the {{mustache}} syntax. Another example to create a log file containing used vs total disk space if a space trigger warning is reached: .. code-block:: [fs] warning=70 warning_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert *Note*: You can use all the stats for the current plugin (see https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to for the stats list) Gateway to others services ========================== *CSV* It is possible to export statistics to CSV file. .. code-block:: console $ glances --export-csv /tmp/glances.csv CSV file description: - Stats description (first line) - Stats (others lines) *InfluxDB* You can export statistics to an InfluxDB server (time series server). The connection should be defined in the Glances configuration file as following: .. code-block:: [influxdb] host=localhost port=8086 user=root password=root db=glances and run Glances with: .. code-block:: console $ glances --export-influxdb *Statsd* You can export statistics to a Statsd server (welcome to Graphite !). The connection should be defined in the Glances configuration file as following: .. code-block:: [statsd] host=localhost port=8125 prefix=glances Note: the prefix option is optionnal ('glances by default') and run Glances with: .. code-block:: console $ glances --export-statsd Glances will generate stats as: .. code-block:: 'glances.cpu.user': 12.5, 'glances.cpu.total': 14.9, 'glances.load.cpucore': 4, 'glances.load.min1': 0.19, ... APIs Documentations =================== Glances includes a `XML-RPC server`_ and a `RESTFUL-JSON`_ API which and can be used by another client software. APIs documentations are available at: - XML-RPC: https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to - RESTFUL-JSON: https://github.com/nicolargo/glances/wiki/The-Glances-RESTFULL-JSON-API Support ======= To post a question about Glances use case, please post it to the offical Q&A `forum`_. To report a bug or a feature request use the bug tracking system at https://github.com/nicolargo/glances/issues. Feel free to contribute ! .. [1] http://nosheep.net/story/defining-unix-load-average/ .. [2] https://github.com/nicolargo/batinfo .. _psutil: https://code.google.com/p/psutil/ .. _XML-RPC server: http://docs.python.org/2/library/simplexmlrpcserver.html .. _RESTFUL-JSON: http://jsonapi.org/ .. _forum: https://groups.google.com/forum/?hl=en#!forum/glances-users glances-2.3/docs/images/000077500000000000000000000000001246314757600152065ustar00rootroot00000000000000glances-2.3/docs/images/connected.png000066400000000000000000000223421246314757600176610ustar00rootroot00000000000000PNG  IHDR!sBITOtEXtSoftwareShutterc IDATx]w\T"UF,@4(MbAc>+^Q%FFbJ4Q"V қ[m{W'a;9sfs\$ 02^1\61:F 5`Enc CFFl*5D7@&a=Q!N;(bR0fق\ME3 g",Ta;\ede44qܲFT2"Z0 [;41av+x?gƄ12[=0 DF&5[XN~fX6erb?L ._63?´I[Sc 4M,?֊" SW3 [\>CwXuO1*7yˏ'eg16{lɡZymr?Ӎͮ[c͝di2rOP>ƏL1`j YuCYd`$6Yf)!Fn!ʐySpe! 6Zee#J-߈#]^[Dž-}^B&wul±vr&-f} ELâ)\-ƞ{nWֳO'\H&,y639!n돀$<hD*Xo~X7(27 1NbgV>l$;p5Ȍ ȨossƮ-y>v}NK{ɱI[0$` 6s+Hb#iyKKDp 6qjEER}>XXV'-"@20:G+x}݀ñٍ_θ;4g}LGõG3()0fMӓS3bz ÓM9I^FI<w-=95U_zI% ;qtlF.~'5#C;!TON8Qu׍枦$pG1NnEBiI(&*~5>X"q$~H[ c7SCkeQgoOHJ}pn68+ 1iI)ǦMt~}ֽlj)Ŭgc"sJMLI|x՗N5:{Á'$^KJa&<>2S@]M.|}cR>3*I81W};KH^Ezm> s_WYYqG|d>fS#V ata !W6 ylf=i!o6/]z?خE,Ķ6gW%~7;aXTĀ`@:lQO}䆝䩌t&,l/cֵKݽarpn^M r&xq[6b&"Ml4ir;.k1.4"=͈Jo%"t,BErK}g]s@b[gW%uv+i\zr1Eqnw΋X<(q)#F[0&DM`Ă h,Ѷ nզ=Ĕ1YhC~+%`0Ggo\1.Ki$9 { fAdnjOv̩,i}vQoh `#6+r#C?"k"7xSh/.A.v}o \vƕ@~󂖅Ki~ پ9e'W'6={_o;<]xbJOoe\zux͵mkۧ$X'ԓUx[z錎l눑ðn͑HlZ.d Ҿ}pD?H_$?dԦH@>Ō}ή"\ R53B-@??18 +p*ѭc;"z?t~yg:P߫W#s\F8uQ$BfU-/c)6mRnPpƱ!|Qg;žQ=zN 3zw]QA={N:Sz}]zvgbA  ݹDc%%q=U"= dESCo]}7S)r7 @UȾ*RkLG@x,q@@:dDf)*؄޿ss* 겔unAm$C m"muiqFTCF\_y+ik0EQ>/9:D_xq~)~ۧ5-lyM?aD_s/3.fV߾}BWj 'j5~6w3wnj(2Jpީ  $8L.}5$F>B{3Wgk{:Ɍ鮿_[H0@jAԸYЂsB$=@я/3yRhWV^=k痿> D]J:8RG}r؊*K>VQyez}zS74;:4it:2Dō~:w?- /rƖtA?g`?xj;wh%x~be~պ8&(r DJ#3{ {+unWkGvGl @XHڌ&}IUY3&j{|%BO76'(fF}33Fn?0 R䞧>Cm.K:91Jtu3.F}3Ko,@eg7M|URIXe{6&|k\Zޛy2.MJ$rJ+;4>-G3_xF~"U 2uY :#ti,P {F5DC1Xl+Rw o+@[vuvz0Hc А\[RI[K|Z#̸5<>󗰄x߬w$zJ@T?K*Z:ιt9oH*_tޟ6h8CS Q15g5e @UBں y]U*ʥYI>Jvd|ǯ7FC0~WQR uj|ǭRÞ21W@nj}3+(Ղjn5eO 1 ui&%j*FZ+ij$p 5Ptm l)D?'j k5:իA*2&Oa_]8g7sfMrqi͜li3f5paa"nŸ4GMӳgacK@ڌ1m SWq uwN%[V?f@4:m!(U؄iH<:ٺ5DQhW)K5f:gC[򉙊mxCrN.oӊ5nЀFl.P+=bfOR;jJ>&ެ3G|-vkw v@ܼKͻ~!]gJBH(qo/+i 4=wlj7L RhVBG Pk͜.X N)˹`1 ){+@"ʰS7%00 Õqw\=|E#rm~WVr7;awlwZYqwP&Q_4JݬRW6vB@gb>DOw‹}Zrrܳzcma>DT)bl6NPL4OE9E"tt%` SWJmmavm!dȅZ59!"@j[s7<.Lu:%?  >!iz=ҩ{F/z5#f^".y::$&1@}?i+2ۆN;?Q+U v!KQ#+G4T+ cDM/➡=_]$pQX]JY=Bu>[-u sP'n(S[:k w.$dAJ5B)@GQbullMZ'[/WnkH}Eƛ15#l.-E~}qo9z<Q~'{ OeF$)l|F2DQigsK]fG"xՏ@UV-QV{ۤjk1[t ejЪM K"ǖB00@,$P)@dQh\HzH[.m~M~g.?Qc"{w7{++{饶yHT vޮ^[BfH]4"i?w&߳szRKl"ʄ=[7i=۲z1#mtΘ9w{GO9*1bBmo4+ Sy8WALF@lE&t 냧Iav=Ւܝy 7' H"hQ]yi٢:֯eBc;]s7{\WnzHT vn[]ҝP(hٶ+rtіkT_=fI8T? ҔCiKӪJ)#{up8Q\KXU%Q:8,~Kq&%ӄ*_=tBDk _iuε_J yx}g#!ޝV][y[V%gb[XT(Yg.;zY B- ʌ{]S;<`ɨJ$=Կ(O镪 S}&(j۪J,,빞NWYq*3샺zOٮޛ͸F:}xg>%e4ޠ"Lhۼ'> nf (vm #J`a鯕 xTMu1{ZFO%PCnSogI[C|kҰmyr4!er >/ʽ_=؝DcOԕez{',Ui5Mj*~͔/o0n3E~:KGw*eiB7UyGw"M8;O3nYN*f-O^4óFD@IB >'Y:9{VyAz:`NVvdC{q4:zNY'\ϬPw˵M,l y6ڹOFFc7;+ߣȔ>~ov&u'4__c| z Z_޽o)?t$z4 roI$Ȧyۀw%WN|w?=A2U/i![N)¾^25uG-_nd;@5:2jm@QPj^_[O$7/ٙc+b\|\f{r4mt-<*]"sׯ:6x 8PN6圈-?V.;'5xfBݺxhK%r " w*4MJjVVUh,=LP7ޛKi*ۦ7rJjj–#wsT6+[ n~ hř;JM%V  .\}7C˞2!^24/WgmA[~ҪJ5ĉ>1zo6P|ǪEFO><`y;gͿ\A AmaBD)Os=Y*dd ӹ?һ'_.2&@%Xhqrh(뮼B5uٛvs~FVvlʫ%Z9%ۆ ʳ6ʮG|ӏo=Y?0,Pm YwN_R`ؓNP90O`Vp5Ud ?>6OPTwL"0M33_1BUqr5 IEgsbe\4GzX סS.ķ îVx޵tn䨩b߬]_~6Kj9-#'gH;k O}]usoOLW2DƪIM鵟go[D`ČVW8|:-DgK|#P^}]T?=@xmlpHs3oMoz5#*׭8e͖3T}Q-p9-xh=r]=P؃2jf`iLM] WSj N,ZtقDM5y u9sH$sA1qTys1XdSFEP'ʷm7{Di0ç-vŽ*ħAyLên Hּ2ʖm>Ta#wYy֑c^œxNQ Kd) apƳkLZ'iۇξSYቆQknךf?Ͼ 5Vhfh  $o(2CwG ՎprIDATH[L'T)woFxKFHɨ"faE%[-jdMaVHW=ʊ؟~nUOKdoWtbU'“ RAt 1l=XZh?[:&|6W#C]6 zarr@mv[Z)d1& h[\竐h/nxٍf '[t1x")sBITOtEXtSoftwareShutterc IDATx}wX9 ޻%vhݨ=[l{C (Ɔ `o;}fwQ}ۇGa̝s=iVi@?X~op#P"%»*ߟؘ*ގ!BL+kǃޔYKWP>fEEo<ֽ!}L%^*ȏ|b\$vyv^YyEz]!\iY~nĎ$]в_ m|(\DvE?9HI!q8mg3bٕ# "aH0%%!L4G?O:1R,exRx?%!r"cEDf"LwG2Ake}=bcOgݐohM$GdUBKxP[;% 0=X [ߵ喐JD\4!ʪU"۫ }Pm2tb Prh#B㊟\A8FZODYQ$%S3I,4@-M;d%wB9[̭8_bC/~8z_&Zf#N]Sg۳DQF>  'Ā eUc3qms [o0Fјֱ%:7o o F!nM4Uϊ7Cl?Q1C]! =oy_mke֞31 q'NP܃]9}F 5%˱(;tӗY%(E|b ԘŐHfQv(״ZOt:.Fܩ3ZuyQǶMGmy ;Yʏ>6mWމ}ĸuZ[[fp[A9 QwƵQ9sI}ŗCknaخݺ}3i)lҢ3's$̚` _3o]{ZXDVBh-G<շAZB%Me}m<2~@1s:_5rr`C[t:x9CM@h1wZ}dQXɒ%z/ℯ׫P|rU[chk H/B`ΣQ/Ӥ_mc i_?<}{hESo:; 4 gʩNeʻʻޫ' vZBc;\ĹehlBt\Bt.>*aky&&!: ?QoIkEGމ<}bR Nȧ ؽtOY=7!ECze^',2`?yBJ$mq>ؾ;9mLTf}d᾽jb}j&Ѭ~4 $7|Tͺy Agk߮\@]I~6OQ-/hm`')[P kpm'1i@CF?ٞ5ʹ)ރr &M`ȈY˻Kwy13}u]5|#ACG9HoYi[:G;;<9}%d|>&2XGwԥ4ŽԿói\˄So:ꬁ|a(l4+{O$xPFA@ !O->s^Q![aԧ^z0YjҝCwl6^89_t^~B^(/Wh<>+\\0m5:tAv}5FJe~s [0] &.])U$㶺dD! u`N]9!v]T7HvePtILﮯũ6qi:w$͹z\ןDh%Mҹ?~Zrs<類pi{HP/̑(b s2AʜWulsddݕ8m ٙDdބߎMkG9{͊JÓWs׻TһwÐTSjthJ2JaQ{ ʈgDXj/?_/WYf*x*Mkn tϮ>̥sc9cTRs씪ǷjogLȠHn7nhYO eTq \E{Z k:Wh^u*f&<@š4S5+Q)ƢgnJ3 6dF+/x:ݤ޿~U)/d:br @ڱ%xb3 X㔳O**-E'T (A|UT~J+Z47 8tTbMiy% Υ 4( zP`ZΑn%:ȩ\,ʾ S?uU֧T&}'H-GrΟ?e2ek15in;zjG g4Q*S̰0؁DS5 nǡ{R5}=_Yz2Ippþ?K>xqC~! ) zPQj(c%˦n\ڍ~vDJ00c _~\{$ށ9?l}ewN5?aE4_)\y RZnDnrD'pgS-au;mGQ-G+QB`ۄ`D[D(Iϱ/fωjKD${ڿүG%(ePLDIqaQohJBSKFC#@g> '||{4Ĝ-S@}"D1H?'b|Sup}qSq3ACYp2+A1SWbEʼnb|?ns (-J\?b9ijG 'Dq &[/8;ZnA&Fo[XANMۚ9&.]#9)Ő7J Vr8HF[76msrKhZB]s]H峎 !fѢOr(bp*- =L:ڽCd3s(&aS'rʮhJ{dʄېROg|4qE,Z3c GU D1'iƃt0ᙼLͦ20y7X$4hK4gR]H QaS?k[vYwU.w>7&F/|r|ҍ"ZqP;R,j61)9%-I4â)))w&*Vz UqKθk՜S=oۍ {y 8ʘf~(v̓ H"XEA 'p.pHs\k{ C,'""R ̈bJИ |h>uPN9<~|]'2@;l>?*^gDW k}ZN^sFLkԶ4<5 }[ߎO8q@3JᬶD9*~t.)w5z3M~}h% lV3\ù,h•cP㨡 s$ƤuT֙h-BcbbDǙkڅLr.>: Kk(?|NtԩEߏ 9?#!]<=t1dYQD*$ZL H>1OTPR=^nkɈ;7pW^{$3ѵ}F$!`Qn^Ĩz5VG4o޼}it=uل7z*6gky|ATP>ƗҜ,VPA02☔fW0?̄/m=9Cw{U頹aa :{k9QM G"욒u?-W4ϠXa5_| Ӗ 97DEyux)Vw>X5w?͡r iNAށ7VQRԾucŒ-n4əqw_͘u|)TQ{3#j!qj4Rqx)/t {|;o{\yJQ@=HQ"*wA9>J7n۔b*Exp']znX*&rmdhg{w<=xuJSF_\gi AEs%b%'qzK/ҍywcRP#E(y,]d_&Ӳܬt1a*D\xSPu(wo %:7ne}٤m'^} `zà/ C/!*M-[ؠFNyf=U6f#JdzulK4q+>3ЫU/+xH?}HW, q_P yr3AuڻBvf>%T"$:5y^X7WW&a֊IѣR@ AR1׏޾lч󫷯0}j(TzĔ\EWDr >#2 8 :Z2N7<~Z.WQ XTqO7z}A֬yFh R9![^u;֟lUNy^Pμ^~|< P-L}@: Pd# }IvV ЪIۯj=TvJxnBKJZlAo,:`֫ic&V0]aNb&$Yk9ڳa '[˷'|r8/hU?VӖhkʹ?c5sUwp'EGrrZf`%9jߖgg:?Sه($t!LPk4:G.RywłGwRlA.)LJAVP? *m8b>rL`鶜xho''y4IPP>8rI!3m@ oٻl Kh3b %4|Y{(6M&}Ȥ@x= ~ 7'X>+,to6vR:~{kX6 _?y ' [!8v|/ʱm[G:` ~M=T(a|f羘U)<ݘƣv2fsZjrY43{f8N6TL?: $(9 e[ #yĦO@NuD٬y|yyj1ϊ`׏uhU{9s8~'&Oo&Qp c4 P\٪J:#\[ވrlk(f*rȽ0h* VZ5Q4vuIDAT^_i{0:juIue ^WYJ9ԻX9e<:1g<9z*iG;\qdϓ1?}Mzn  E:G@%b{s7 hCuA_`icNZ ] >ex!ܽldƯ ޔPbJG"HX̿g9fc A^`1kѥTѩ#dT=zP<_}ʌwX.p~^?zxrv]G5Rᕰ{6PBY ?\2Vy&F2KR",(8XM C$XTXSnk֮k3-}QmwDQOj=*hB7  4m^/˦&N#K $t_TtRt0K*0(ߤݽwROכE|SR( &\B/_tAZ^?[yjwVLYųWN>ֳQ޽إOxHTWvtHe#&v#CVz5vks1S(ɀ@´BdX '$Q\l%{|\_)F Xq)~7󃳞FYc_0G@C?:5 B(mTE F!ˆ(*ɻ$φR;K y$dD'"?[LBv obS2s[ ** rH#[@HYbrȾKX:iP"Q Blg0Ov>y2- ^#lu2 q¼`n&D *i&͋'>J4ťa3 )f(Ѥr(~y,R qIJ^|3S, ;m[!<\6N!,M>B'~27CB::!,XB%UBڣBrWM ]h!ObgRThEBA+hp"[6%N.'v\@VA(#muVqc*{ P87ZphllMKQXP@ N CQRH!"žOQ2(Dx#bgE1Z~dO@(pi2KQ.ES^(q(J|C#3r!ZNrw3waPjwE> ?}y Ur~lаsnk`UnD:9H}Zp#Nlߦߖc7tz̭Ƶ-1S%s!s6>sH}mPiO^rx/0yF%`" jS]YPCy%)"Ry[limcJgb>[scrX>򣀃*-;&O_"EQTyn[]v TysS -JLYk毋{ϵ 7XmYQ6ɹ*4m@Oʧ⅃<.ٵsϸmIHiʷ{\9we4JR((JT*#UZs?gwl``G) qq8[|`a@x\mtzGp;q7cZ%*}*9Lj\{Oj=?c|LsĬξmrwP2؄}]()&cI<6{6ok}ZL\s,::Nۖ1*woowZq ^|H: JK6o@|z`ǯ2]۷1 W=/ @hD0w)M y\9d޶#:ס5H~-Ns ~eskO"6rňknS\RnGE^ |p.\QT鞗qZW˫Zi$F48HK@@\kȻRCWq+es)!])'4[:ұS'7|d.sb& JcV"ЏCevVJWp7|MdœXhB;{Y5BMM4 M@*RCx;Ѫ9YyS(IDX2>%¬qq*UR>M2uy)N tm@TN2 DR%ld{拏qZU65̨ Ċ O+בCX)D(YƂ[X#no?3=Pdm2iz 7kC!(b$*1<;hE.V#d;^ع`عߒxL2S޶5;cĤ?1@ںjYӤ”kZ wL2e.LDf&4L&hVQ&p8;0N*B/R@i@B ¾Ժ{йĩ]rU0! &vƳ/G SlǥܘTF͝l3%d"F~W&ud|!h2k#8˷9/ϸf,txް3IpǩӖI7B ME("L)6C9mg9[#Y@\8_f>:+gƤEǺʻJY'wг_U{ЫE}- ]uYB uo0!  %*()B-Q)<cQg}'J͌mzAy7nLiyjkA %FufNC&r,JN|F:PXԌB\dAmȍg)0?Ko<W@ȣ;l'| "i+0„4:4yriÔѦݳCsVH6%ylwVrnunEv=iT^.s|_Sb81 C( }BDm)oCAh3D4,W$"@ s H\]/Nu:SN2rEŌL9H5*5p|AJ}R>/nfk(5DJ1f=I7y{hAQC FqֲlWb1]}|\5rجD9;0J hb4tpL\T ]|}\4(N -2Xme؞&71x'w;ᤱb  AJB$UrSUZ{ 4%+zi#chDL&DvvR|+p6~) D; h eu Е7aN, N\uuzXoux<Ħjї)n8:?]Yn>Z@)ḿ]_jP۶wIAJ\Wo,ێ67oDj;u`9{m>r|k`Ū#E PE1 @x?bۆ"o\I-դ-*o>`B[W"_i1WRm*eJWr]i0릠 m}xGNށ*T(E'Ϡ *)0iT .DIO!Ϙ!k/Ui:*X?jj0Fg i^T_7XMGbNhP]M@SӨl )q^ͺ/Q iBe^ƞAZ`VbӲ+hœ\NeB C$rˍ=J/3@1s9VR!^^^1<6 52FPC%~\ gT\<@;/+pӽsw]doB['^rV|?9qwpĸ3۲Lf!֨(" A8~ˈ‡Gs݃@yQg?w|"+\ܥ dQh$3l;)B{ch/OԾe^^X; 5Dw;|_g~ﳶ$))ya/}|h}dx&piF8>L#`A ΝԄSc=h@@u,ٍY )?f E_ BxbM$4kH\BSOy)Nޜ:+F>mh Wx9ѷD97f%-JSDj  :C+ hPHwE(D/LDN(s$/ǼTT\jk`+"$` "v&߈^•20@M)-,,@Q2QOhuP9Dbf %zD(2k04RPqռY0sbϋ'f3Ǯh 4.%u ylfB ĂwRrEpcԒ& Q$v)&щ# \.7 "hJY@kڈ3iB|UP2v%v-v^oQ=m*P08B^:* !GmM s;cG ACdIfD\U,cTq0"*TDA,#`fw~KB$)ӆ4P PT ҏ<%"f4f Ə <"50d" " mwP BFWNSIi$HD̉(8#sR sZ eA A-R8ėר_Q{BұC0Ғ.c[YSRJЦ[X,1H8)BƢd6Z4qbDBpY6mŎk3Am@k,az\""~ky+ 1Zj93g1匲oYt(FcSB-ALt%O`a'[?BpF57PP$@I*4&?Ǘ' U7 LYPJƥbusJp7k( --[N&0Q*Q Y' hnQG$c|*o9ΖX7%4y"(rIEI9 ?f9lPH*0+|s1"/IENDB`glances-2.3/docs/images/cpu.png000066400000000000000000000165371246314757600165170ustar00rootroot00000000000000PNG  IHDRxDžfSsBITOtEXtSoftwareShutterc IDATx\wXW?g"J"`%QK X@&{,K5wh좂T VVٹevwvoyag̜{9P   gdn0߁{|`^_.%J݆g{9.X,g ai~ ɔ ) s4Z DF6)qE4!A*F9|%TEs?XTJVtqNlΔd@y;T@Z:Ģ Gx' A?n>~{-M5Wj|rꙝ}z̈́S1s 5F $ f^[;))|;tmSĴli{Ok,M rrbMwHu ջD.ri~n8["I"+P4.SNAs rovV'FV uv ՠJjvUWMyqwשd)X;w%bWbV1'1s+'x7t_~#efVm0]V xiǥwJZ7PX>y|&+|J̕zT<{DK[]d4!e܀FC5oW 3Z.]$ . q~ܶaH8fƵyo*R 3C=7*yt>5:fˁ@ߛ:cfbBsrƯY Eέ[BT~:"q1O Lp8/X=!3?|5_|Vi_3QbJO% 2mLgǔ]Hz2 Ml0[xL^M$f^3za[۵Oc{1(_:"Vi (*M V,4cLm|,}*Lj{B{WwWNә<:-_5/Zs7_yEL !>/ĕ_.Kd_.}sf'^W^/tD^|dU^#fit~ⵗ3F|ӫ~aNy7n{>cN4YfU8cH3xv2$2%) RV@$D #þse)%sg?q6]'$*ywN:F)WL9N OKdʗ{RflPY;s1Qw,VĘY &Dcf9d|Md:_ f53O;>)B^|x.`qf ĩi_}\}X_!/pq Xo :n??,r픻qNqNNH{ijRikv:w6FIܜ` b&6Ces3<.2#Ce~Z?%Jswe"z}ZlC ,"P%Tou:dƖbEҦ6-`>]2xD:~PM/:mf{TQ)=WL$Y YWiKzLUoA9r ώNk?ZXb#-~B3KH8' I0q"T S;&`JװYYFE,x 8+X 0,:cB>UJUU)T]3ʟxEn"}x{' >Fsn.& 5;=NꃉksiN7\7ccXpx;IO{YJPT _;綻}֨;yz)&4Zqقtܺ@$1bqӯ&*,k'@n/5Jzӿ=`Ϲ !{? 5aɫuvniIr>y$J/鴞$b\sB^`2\Լ}ĒN"!(TqP-/gh|N#佭Uosd # Gb @XÁZ^?v$fŔ㏔6TG ʻD٦1g#D(sp0zzP F>Dd=W5B.t|]luᶤGYƝRK8t[GX^f2!yvko23-|)3d7o]I{QlU7rȇmGJ/Ŭ?IW)R,:^WmF=R"_A(I alme(?<ޜXaP;(Mͼ^1 -DR1wD XfGW̠jk W!wgWMH_)rqBfqh)>#|ʂ=Ox+N)L?O ;-UY7#F"&p (4AL:+Y9!6!i/g]¢e([C,g@yt"! 7OtutTۈ 2UgX8bH@<;q%m2DZk L/(hؾe1= eeb+'W N }ͻ;SV1DJG4 \{p; %)(jʧ,1՗FmY͂-]apZMO/I@ ߎv7s@͡m:Dx'!n+G#kiYoq7wD O׏:pk.+o$$'B=xں Iqgcv)iWmrF r89Ɵ(:9K*Ɯm0ko]xqU>wnVxw9g=3Od7ȳ-2:dV zv3pmDڸ{?X7>,ḽiH?ңQ@`CjeBMm\kb߮^/\۟-쩫ǭy|x+|ٽg"ȧSgv W6%ZC,m#_(ei/jIZya5jt~N/35󇞎;zKJָgIzOU^d&ZXUFƎVθ~$f%;cm{jHFOTub%שM&4|+8?éACSjx;MQWyk+6=-SZy @RgQ]tu߮s 7s >$?^ɤ k\@ VR̻GgWnytm +5>BJ6#Gbk %Rp~ߗ 0}aA@§/%| d |M,6ڰb+6uŚV.~OCx`-ZAh=ia9ZpÖ&N \l84eh`T&C>l'G۱{%Q=ȭ]ĸUmv II'U2fh铙<?c@ u6EDB|(PA )Dt)pBdk(u]CO֌;EEs^g&h:v;fڭ۷oRS BVmp+fQӃ=me@@M xB\\‰C<%HQط=.\;ef;1jٍ,QG E-ڐh'LoʉƱ#^3>-;bݼŻ;,Z;$Z"Wx||ҝ1S;Thh9{zD{рVDCPUn{oN?tI΋#k6eo䕣g{Frc떟kYC{_h/Vջkv\0a)VWJFd(P~ilFm{{zK%ˆV=;GsS&S7- = ށO'+7ҍlV"1͊ wUӉE Pj`&S7͞CDT~_& j5VӴZEӴaM]*DD(FnaH+=G 4/:fqtHnhjUGlEƹUVԿJ=g~bؽa2(.*!6-l@liH%{WK˚hRbW(3O,Bdʨh"똉{\ e=GOY}WWq֤E;F@&+Lt 8jɆNa "ѧD$"<1D~ƘUPr1k.S u:EvM)"UaX=2%r`c g~Քi^-Tq蟯rc*EbfC?3HFy0ݻd.hah. SޜXG߅+D!/%|h5#<3)2 /(0&_!nH1hgG D@0 0 RaךiiND%.~ȋ(pb5lnV87+.ȁ$.@*VpZO:] B (+p,\spo@nR|H)Ϟ\&F wj잀Xq(34YY ׀oB?}?hkL^IENDB`glances-2.3/docs/images/disconnected.png000066400000000000000000000234571246314757600203710ustar00rootroot00000000000000PNG  IHDR$sBITOtEXtSoftwareShutterc IDATxڽ}wT9LwYW&QtAT/ ]Q"  M"7V-$d2هܜܜ{9\i-~`u 0xPA~$>sPzb|PM$gʳG"(OA(B*B>a .CW1BrD#_D }Mj*ys%D_]H "M=@b?`_B|&do9CyAU b/3BQaׄa=_QeP5a.%ml5Ë (T6S1WDPQ0fiPLXS7ILeS, O 98 )/S" Ro `aR1L$T%sIHH!JW Ru9]ɮYr >P%nN &o ggtl X9J14}{ԵoM;^)AyQ,vDi%!jȨ'gP)sۚ'"RF}Og,V9' Dɂ 58@˿?UE)4 }S-)W|lO]}f}]ߺP*RWT_g٣X"JyށEuNxWi>PѴK\JKtDpKucZO}gӹrR ,/mIGcлnRA/ŇBPFkm>vn_0i1x US mj8°Z;Fսi՜khey3f>dp:LٍφIH%3`;Q^9*dQ"j٪V #esW  ځ9HJ~oB[a@ʨw:^V CR4;.yzH3nLgϦ~ywSz ЦzPws)g3e6v27 yz/*Uag6>#ƗxV7ҭ־B&Sy=q(G~(AÚ+>Vctg-jܙ֣r٤fnF`xc[`ʄwm-}l{=jAzH? _<1@E?6c'#G|H?U'5&L}Msޛ?ess*0. CD@c1tOIӼIuM-8Ru5=d!P h1&ɩ*geѴB騁z@:ѽ:X X]Uq4Cc. ~n*\˙^BG-q6KX5Po=sm0P^ƶStR c j$*j7jK21ŶmԨ Is6Wc Y緕;"5e_ 4t@= k_lh_M IJU0>=6h༼2,\e:<Ս;_^x4.O8lٝCӱ-M;4/Ì-h`%֟fr ŁP2%k{͂-#FO*eGnÿ=qA|&=PN2<Q#(rmӡ&+K{CiO_sprI{֋lǴc_tфJ1c,0Zɺ4Ig,^{~,N GyvOF!+DA%'W#l8e3@]F[g*5ԼOu?46F?Է3ut{tOy,mo~!!4H:L _J~Tܿ{6.6iݱ !Z&+2/?OdɉB29fѺ᩵it3x:}bhC:i)d|ٻ,1%`@vpF4jdϕc- 'hnWuʠ pqYY0tˇ椛Lʹn%!y 2Z;)t]Z[]~\1 \SбNz7w-;ΩlߡrHO5z-0<8l-_ : Da:N [}aQ*> _|cdoǎ9 df/p;,/H0Q8<%M廿~ۛ>arqeщ'Ö ޲>)Ua)I߲_[Uq2ꬭW) M9V`RosHYUǖ}x=*N7myHj cK?̉s lmy.I* G1N==%4~t{ v/ jju۱c~DӾ|yάSf:Xv'ݥ7+3Wv n)Ea6͠OokϹ^Ƣ4z,- rt:`:\@ܕ 1kˇ*Q%aG2$q lGʽ j-8vY% D MCyRHu%Q%D7􍟵L2NA-(kh=nG+h} *\raE8-=N \c4nFnu0"4SDFGxz9Qu:xv cFA8N\=B IijágձNh]DhEq'!%<L>eJm4P4 \^I[yV37?'nץ]esoY:/l{n\H|z}ll^dz’0v1۱N" Şj5og4/֨ev$4H5`6~Ya 41Q%x0R4C&a|N&w"syq|_4֡9KްW#Ք`GeW' CɺK<@'6m`fa҄x;5t$nƯL7md>4 S)ol7;TI3\\c?;?Itk2Pe E_5TWd|Sqp/9GK^uwed&unMR=}hސbb"y>MŌu睹A1_{둻$Krՠmv?ʓQ׾h&H9֭~.kxWthmXJl˧+=eguKBY p!vF>3FĬzΊ"^`RXX$mF_vLsxWןa[f?\p`#epxUk+Om>crkC+f |P m*w%%) x+۶H|Û !?ҿ{ t6Mu9/4I rJy,1?:k۽ƇzuM nD1㕫dG'aꦻr;'Pޅr#Om\v;Bw>jLJ~edX-7:+qmp2y̕|τ^>PЧ>6ZlrѮyF=5⏯XU>a-ynWٽx,ENN1vо^V:(@$9>rd\l히=bK#vOG=BD"]ZMܞ{[CsJժ]굟zvgQt!| D[V[= tOEen- -dG ױ‘GqĚZ)bwavM:_V gfKYQ p8ΰqEO;UotODλ}ިkC17εžd0QRP2@u6avb_2Y@\^>"& {1wɔwiK'9E [>>cWc&)@cbh`.mhWqݗ{?>& %)g :Rh)a t{}uou{g e:{pө8a{9oXN;VIѳy}No+>aZw; Q0-M=ϣ(+q (v$m G~oٕ=_8Rʊ9 sLg,YYx9 3I y}7 ('r %T5"Jؒ_5wĽh|J ~oQ~z+kws?>vAol|܌ 9n" f3#N2Rq0IDATubg* UNޝm0N6K)ܽxYW&~<-W.yO<?_!!^~[kV`I|7?C!wH00 Nu,jޘRU73S}#ۭeF&R#hsl?Ñ>q'[Y_Iɩ'o!X6((DH!g2Aݪ:M똌a#Lhۤ^Fu uzvdv=sN_<)w6P+vO{~!4}}Lj^;zE5ԯ'PT Fk.Yի柳m{G$@ޭ%-#3A4q~nfV#ݫ4L?Jn 0} e\+wN7#jy]& o SkK{(+@-0/PfS؀ >w;d=cfO-Q4jd2k&Y}ݩ]2+{ @eѣJԁ]i[6g(K*0zT/G) hlrg$!Od< "!7wY _샋&,8cs(#_*Mza0\ҕ<;8>Hj">tE_VY}zPb1Omst gu+p?;#5kgԸYe{459.;.@n,:^Tk9P}!Ⱄa"Hl "i?|_vP 4QDŽ>sF"3܊/NңA1!R|HE"΅7Vܻ^4ycWڶ mV]3 {Lc:DH9㇃7#>_NҽѶus70j*ۣK &Em6l1{ЅڸBjh֬|."/Xeyyf ԁاP9 Dq֍~X?[{Mj!\5 )we,KY>╨M_jʡn`!os Jͩ*+ŇUOlҾ{?.+`$gH'`y#^|.ɫvdT5:O3R53qD@w[7W/rʹx.ˁ D?Gh=az}eW *r:D 5:#\KVH9axCwś(0:={7\+ڼ&jXHUU>H?yG&ś۾҇"whs syÈrL2Fi͊W]I+*~դ2fs$t 0TeO@B'L=q8שm67S]JK8 =r]K;xV6*H>kc<:V,m 7? UVc7b:?W̴-hˉ9uϥB}צtYBz9b^DPNl+G+ڍ}=2xLUx;Z,x("u-mfJ DVP(F9w,bQPELc:߽B=~mOqS"RM[a=l j9#y TF>.BGW<"H>bZ7Zh/YV$[ 9i~:ê nB0Ԯ_c[O.#PÄd2DY2!J )>|Z'eyRUy)\UzkghlBUęv;RtʖT`%c 5$c09 wS&:EhꑥWQ @ţ(x)G vIzW L1DA!ĭCUS:PYO-TH$ԡ|L=-BT$(A"If \PFSTi6zD>LYlQ}nO!ePR䕈ʨ./¾,':Å2- .i#v$%llOD,{Y+EkoSET LG9I*$逘Hb7. ufPLwIIJNVLHP]|CT 1ʨoiHvٓGI)1 n7k ";ĝfi٩Zqk*|pR "mI {Ǿ %8D@1@\ZЦ&QKavMݝ[&\4KBO S<|tczH`zLN=dS|6i݁3I'}Ix) Ns܂~\Sӫ/C u%SUO&F~!x#|fyo:hӽ&o lYbf| !RM"0p]a`5еLPGڔ~޾Ayڙ+@+%Z2TC~0>9?@ 0"],Og4,D)Hggۿuw uҳҎ^vBcX2.[Cҥۼg.rU={:vrKc.j=BKr|w/ _UFA%bbyM-|,G`ΗӉ\ǜp֦#?s1߭@07"dz-Xz~ 6sTb#2݉‡BԢ/@5%jΪ:pI}ܘ/V@I%| FX#}Di`̎(~i@ANLƲ+yFUykOǏ̥Q/ܮ SRe+bZ8Ld~kuGhwK߻#*R{uÑ!R' /n"B4|O͍9TWN|v2~ҏOR{ 2rmp27l7^ߵDFa<4tgVd&Ƭzޖ,S̿{?)ؾ_Gv}P|"SUV1k9:[vj` hZB'u/{;nMN`F[jմ;jТUVK| ev 2]=+dFO?7|ZL?^70;%+g tdVTd,]BU<Ûu06wh)H} B -ا}9/5XnUk Xtjќ ?یGYI6\:w<|nCnUFUŐ UPD'EjwYTvU256i+g(gΔ7l4eH p PvCH #;IT w8:^N*ԌK! 5c F{MKN誁Lhʣ(e9D0kcMzI6Ѹ{pP0ԓs>y5WCKB"$Cf Tdpqtn1HlRáN fUUhGeHđ_4(:z7$+k ǁDLjQ=CŒ%(0SjUG5p|ATQgT k'=+;[\9Bb(H亄UdT7Te,)w?i輒u wȫ)dQQIVP0THe6 I}k ҕCn GHJJBRF UNlDF9Po(v>rF-%d KQf-]AD)D@%E"IqaƪOgm9Hq4¿"鈈5CŖŷ wA0ɧPmȄÎhw|۩+Ơ^3 6e3::Qw>H޽`[fn 0axg @ euXp"iVBNX]U'Fmb)ճ[ܛ^2X-/憕a MRj_T>CS_Qt~S9bM+m;"Rfnd:F,@w1]*oS>jfumm型%vڵ|篕뿵sۥ;U' WhIr]Ftdx44,OeZ2Ŧ͠ @n $%;zf#[om&曖_87()M뜶|k*r8T3z+fUIaa&!Sזat?ԊO{-HTPU 5KTIJ=Ӱ"ik $*T{T/+ýT/,/+"Ȱ1 b1 ׄTbծ'ՃW ^Pː*Y.1-ڑK[Y2.[-zmZwٳ}`MŤz_,WGDD*|{QFMJq)T~+_/RP~ yB( Lf-:Y&5˔CѦ$R'p^+_/МI"4g$yv|B3n)y!ի ~N5ZL' (r99Ү(ŠRHV!5"`eiA=xLI3 ,w^=k/}zJXWDҒQ/ѥVUi2vaz1y?&vh:FmiDrST/>Fkۍ-]Z>f{,%-JJlJO7)mߖ6[^F;7,JPM!>nY57 n+'ftNB3?;{I_l[tjzO1!T`PM3-\.uhU-@VgO-,s^jbbnU(:pᅟ=90+i]Faߨ } `ͻthą6mDDi(`dw |8L9$ooUɬyWƽo(g 7 M+7TDjr1\wjA5LmMp)iY)&mp2...:*ZGN'Zj Sq5҄+\K4atvx BBI@ gE:TֹZUZC:V  "!@1a<>gsM_>'y;azg= D P " _PZ߭o7Hϯ|Xe~ç@SݿH]σ^a?H鹖,'h1,_" @DI0,>ג~~'dg?vyVr8# ?cň 03$?<"'։W՜6bCLM 3`^QÃW'Ek#Vdiֳ+ JN0>Mփ!ٻ K \`ypD/,6E%L% W !h4!EY H<#RzP9p aX yfDyPD{cHOcs =h8eIf 7*$bf` UUYkDE#eY#"$"眵fj8 KH=k\C.#=3<>APâԬsۿfˈ= `.Ll_m` c t~562@zGHy,$k%`$6C[$1\)L>5c^vqJ[1vuJobO6]/]eDpDOO ۝/HaJE4CrDh}1&\c 4!t5v+Q*(M.7Lҁ$û¹':C]]_"B@+$i͞\e?Ǿ&;&W9pa-!!@h8fDbakmHE<3Zk iDB$c{$2d"#1zD̞p4^#s{ff", , z3;L'ccDs A( =yY#BkL 6 R"!"/ZkXE5 ChB ["@ZGc `c |0Zc"MIy|gCD2z AKͺty!<1Y=:oqaX+ٮcuWsgbl44͊1 &A]^ݼR!-(:B,,6D)J4ny̓ &^vX؜.veHw,_6uPa4٘K:}q^Մ(qӇ|=ԥ[h4a[1гRWpҔ׈\u.DIЊA9s[MCDD"hġ1`ץmS&$غ%zFXO Pr9ֻnMF0vt;&I!A"4DHH~TUZkDBB}cb"d5A!#EF,xv/)Ģd !ڢr{ck,ia 33`0{f 2 2sZz={"rڢ((22DƳ#CXfa"`t/ưxfYwR @{=7w,DȞ} '(9Qs5?M/]|D@ٳHZ"ˈA1'z}`덁z"LhAQU1{cxs{ 9gaB""^zk/b5RYד1FáFS4d,*@4Fb{6Z96" :e^/"3knfKN|߿O^25ۿ[}˓fo]q_GP^u_|/Wy;g;s?3xy_~o(nG柮" g餉2s +}]/7|3Sn7wX˞G|o PX{^cASJZ&z޿\h/_!1teOLF0bDұ^Gp\z7 A =7A<{@@1_ynں~?;g"N,L,='4{/&'vl {XvGo{WEDσwp/刺YQZ `ёOYȫ.wϻe vN>_j0ɒ/py4pJƾW@ʧ/g0`$K_@!v F-DS4qBZ(3RW/M)  2Dڗs]5T̨bIW9p}j ^{BT DDF]J[Ĭ(M(J 4d}mYΚHI kd$g-üRÛNfA}c ⑍!pU(P @B7r\e13"4"ZUr,c*QaalQ݀"4+F#cL9ĭF$ϾX*gP(A %*+Xr>Db\U`Q>XWUl¤s7r؂}>lq)g|[_s ?aǬ'?oz& -:cc{& 1^wܩOH]|Q|sgbUy~~}<=E&t{ifΜQg{D9kxd91cάl*'̝U3 ft~awbb>K[8vl޼uԏM߶qZd⽦31gΌB3mܹ3;& 9?ZQs#팽;p}OU 3N^t~Ο6@[ B,=x=wRB9,;h>@I|];z,ۆGcu{-ZMWG^o}뎝(؞arW'W},:z&-]r_̹s4SZ?ҤUbJGTǶ"e!M#- $p4U71hJeQ3{PyPDTeY"B͊^D<gBr1{2*D,BL>.yl'=oysu!m^'[?o7p?{7u8O-g{V]e_yG'mo^ԟ˿ڱ^sKz^wu߲sǛ=㥎Oy۟q\sԡGLRcy>_1G>U  k=g]B|'BaG1#O2mor_%vtߵ`ڂUpa K8cٝ:M@??iC'~Q{O/w[dѧ雞׏&ܯIa-|i˖p?p;>t};NAW댅+?sGp}kom?<'NyS O<̗.x[ 7~x}^`ڲW>o_~9g0Ead~{NsΗr]Sʷs=nyC7>T,_w9_>G QM1՗s9O{)@p݊˾B|#G.neLUY>w-}>Y/vCථ]S\ sYsJbdX\Ԏ 'Jf{yAQn$ c֚b;NDJT00vԁXӅiKcb ۤ{BRX?#X{ !GZ9w79 2l)3%PJij$%Ue 4-ߐ%uIb@ XciG*{ELEr^ xȞY!c0UU!BQXDƊs ce:禦1:"b園P*~SC",aDrdb6Ꙅ2DG"@ {eg"TQUWba9W &&O.yntlxCЭyɂ2E_eD@$Dvڌ 6B`.{ϹrӾ7a~LNM[nսsOj "TSߑ/ vg oA/{'Ž_}_ןu??)4$ޑ@A{s_hՅ,__u߰iMl= 3gE}gyK#Xr+_tW5Likw<9g~UFVza{ɵ9I??S{q9#ӏ+3^%}~<ؒ- 8;s}ߖ#xW盗]/y~׮G4˯~\ 0F UO\t?^w}gKW>]rgWl]7~.:{}Jw+_{ʜ+X|k^_Orsy߼e7}[:`/K܌93)@Aa)0("n+M31߯~$# 톇 :iW/$X#6>~b{2H_yia4m[\)iLW`US] vn`[ -}5iE*o ǎ,5pr<ێLX"m.f ֎PY$i8H4!gW,IW/|G3H  ɔ0PDOP0iJbjN6mH¢j j2 ,<ZG\_R@X 6kKhU 1{$Cv(~m0#WU d TUk Y( aks@<1c0R'"<+*"5g}/"DVC1hTzoa坈"fP ȐVu!;t #b&LN޶Ph*& #T(J˫xy3*=0 ^'h7/'7<lqN fzs_8ک(hsS`x[P<<=KpwRx}?[7%("ΛPȑNRmF|`< oq/0eK=p5nCqlݣXN _?TrPma8nI.p?|K%K޾U7_f<9ԟ6ܿ\O9s}x::`cAe^GDX'~8$z+|S,;pKs&0f5 c,n?zBOX:w}҄rCf4_ݶi2)|:aп 6 A˜ _-n`1y1/:~vN'4vn3Y@Z؄*نҨ#,͕ΊNqdךf_d-5TL"k8x*HU PxP/ĎPdM4\`C@59(%DMCMXu `/D9GycXKO8VPˏQbgpaRGӤ*^&oO:lX(K$.$ic42ZYSmQhxg1ީ03Qy1K="^DT蝛0Fue9 {\UD&&&  j8 ]1XU"г\[k5XJE7rh("&'cMQa "bbbΝhbtށAX9&YT;aVo\;XSSC 9PFvn6jm߳K8}̥T@q³̘~M?=}zA9ds;GDA[._Zؕ|e ;|| Np;^ك[g|!rߖbog~Ϳ: ߺଛ6K{ǥ0ďn^um݋̤huS| 69iNSyt3QCmQ`5{};w!k߹dt~w9W,ooz;j$]7l{0~Ol]ߒS۷sgo}[Jnu)0I5LO}&"آ1s{*:W,6PVO2qL$j#[N$;{/s-v5x,IR6Uc(dCQ򈨅A/$NB׊5uTn %/}k+@i;އWQɦ#݋=þ,1|h{tC_93z곿_==غ{v Uݾr嚍#U2Csa/"w\5ڹ]2frC:|#_̿sfbOz’)"qfȢ֭SKz(If\\U;w 3( EaR`m9"F;UaEQcX3X[UU0螴g `jjy-ϡZ j(BĩLPzACEaYgC#IIXT.VpW>_ທ7?y˗`|'[˖.3xԪvރ D>orq{K}쬷{Uo~q{Y[|,O]pE|cƂ.V_t<%Κ46s֑/xĩ RW˟^GY__Wnnܑ0S^ƑLJiw6]BޛPY'ӎzՙp< _^oz/K~rLf3&)-yxOx_ChKy_ƍ+3x{)OX4ߍ Y>9[~\廆5W:θ;!͓FN;mÎk/r}py׽3bG>mu?Z`uEW_/Z}boOs͟gv{;^~s9=e77Xz˷rrƜiכx6pډG~vU쪕&z5ՃpN{^?;o;[V_EW-4?n>忸׽rG/\[!π3`m #QS`Fum˒칱T6ݭfx/cƅ{O)+Qj5T=.u|F $G$Jl#~@ 7u T]((I³p. k6J6/-iU@1f})uVrK&ai $[Nh(' Y*&lc#o4"p4+"gfBLZWyWُ11h arplXUPD+}K4Q칪*f.ǎ6, B8EYMj1d\W{dbr9g ªYohyؐ]QX"v0͓PmY{ṗtM/s΍뮽Vg?{nn{ne{Poz/+6URLckWZeDnW~-/{/E_|ͷ߻{o|t+V?ꒋ}<./~{u+. ;󶛯O.?~߼mC}x-;o{?;F ~gt߲ bs6YTw^~9W7ޱ3ݴjːAܻGEk B=ꛮz"N_y㝏OΙcGzU+{|4r^KgӃ_xk|d8{W-q̛ȵUUHvxsO ִ&í?uU]u; ]qzׂs+߳m^_wC[G2kYm[ڍ ;{{oabrۺ;wl۾y=kdu`, gbjUWݺIpۺ[#rs;o]qm8z{op pwf@>zݷ._![ -~|`G~+}C”ln?e)K=`+{;lm);>'6iͤLaۄ1Őh&A-fB*)#'XԍZ^ ]ܤJ/Ug,Fڔ1Ե 7l;ՙAzR}ES15$U1FP8vl)aMcȄm{ &X.B [[`Ȱg2v$BD;t"2SVjhw;"Ea`Pk ,RƔ.qiH]e%Q}A@+ЁBS.k gOdILX-4H~q-l^1_!`@[6z5O+* t'kξgWCRAZV кc Efp{ g}5Q ַ2B|G -@dp6/ n C%_.ޢ kW=/{7[)U yr+h[O4\^Z7ҁcN]tDlCjǘ9BfQKIwNţJx®mԸU0C3."[6gvx觵1oU.'sj%KY͟"d~Y(,Hm mcB 5)Dx^Hم|6b kiӌ!uEi, -; FDF@K0@BCTU!% -UUy"y>J⨪dx5r05b&'Ԅy] ^yZ6/L]ze9X>U"U#a1jiBfYakIp ʉȲ=ȱր*֪؊lBf Wrh%a8Rw s,@ ͦaUen> a=: vgQBU1_$$C^j QC5^$tP0~~ZEVB"39A2q-N~JS.vf'V|klB3M#T~RA&&&Z(UӹJJ.hT% hT.nJYc kpyQc`p$k̠,!heUU1yEԿEygʲh;pXkVs,KDFwS5, aV# y@..-4+۹Y-q{ºdo,-cG˥Pnk֬Z%4D%ƲN@tLksٚ>R6 .&U7"= W،lմ:Edi "+beVԖ."f5+2s4T:fU<}Rķ( &=^'N1R&pS%7`&틩] :'~LT<$VcA kV"I],U[CjHi%8#3[hӞ53&eR5!55̪i7"ymH "uTB <٢0{v;Z[U6LL ;5@81@aQ׳7uG,Aa4TT1ƐqNۄ!i"9,E=+r0U69]= Hh8 L6c Fq9?F{f3@#Q-İ0C] AL;NPmz>rI(:̪C|\" ds3uQ?4 hDvկB{d$X0fO7_-4M80le5w5M׺ 9?K̹۽11G iKL=3 n\0!jo=ٸШް.\CJA$%׃Z،tx*f5zq!ڇ%ϺVc2BDZlZK}=M(0p\Nӷyh_g>'xF6K4σ^h87FZҕI=533"  UI[J>E hw@f:HH @DxT aRәB t P#Oz7oܻ04!-6uId7aڅTcVYkg'jS{2 q63@1l{4-mwk *Rpj[{7YCSs#t՘Os4n>;~Oha߽ħʌ7"KHʭU`}s#{Uq̅hlzz`26Ch:E4ֶ@wL&Ѷ>ƜT_! lɚ1wx=~zDGI3U]i ݲIS*ZI5Y-V EX,R+TIqizn$lO 骱ʲjSΰA=m fK{1C?h.eQIf@bBw6zV6ШDUˣn԰"3ƨChAD0."-{(hd.]@Xc2ư*s A+@WyhCD}Z@U^$»zNlKVwv_%pOw/B!/y47y#''A#nI픟M ;m3$O[bWevBAvx'nwXTA%EܽN-0y{Z7maͲ]-I*1[*g>M2{ˏgd~ZD'80g/ZC!j5+ĴTgƓJofh'`33H -Ⱥov@Ss_m*P# (`EDKdԹ(DhN<{VA.SlS0Dy/Ɛ`oϱICVhqU*(EdTFƚإ)"*U0!Vα(cB@XFEt6%X:kmphwFj^Zb3z1:U]i흯Tٓ:jؗ_MJR! M †0Sp@4$fqdzYgq'jrv43[[ ڪPڪzJ4cLX-Ctn 6uGrI0*iXS,6ޝA1RԹV]CBK4j42hazׇJJJ\Z:Q2Q>gz-&$Rt9c ƨ=;奕6?XD8NSP=1ƈ!FB̃J#HGs#"P48F̢6y*(bPzeaNI{B\$H7j6hEɳ:ǵ?(V[gxB nXƞ{ŬsQ IR/ݳ_܊ҡf#)aklzwOc{~3;[.6^4H&yf*]q:HJ1g¤uB/Bftϧc]Wu(0:bgHo-In1Ige aM+A5NGCn#YuZ,5dRjgˆZ{`jI1{4#եBkfڭ["Nj:_R7DeQ 1dav1Igz%5DduB^|Ua3S%ACFG#vȔE1dUy:{Q{o 뽳H; c {,<(hf-T΅D"l{c1Vd/d%%\i즊SՏD']fɖ֏t{mM(4$%-O69"spس$%22cp$?{K0Z5 Rmȣ7JNe *B̢u6{KS&iU>m_z K޳UP/x·g&dl%n8C#yRd4vZD /LA\ ѷ7ۈӺ>Ե~r< ;Oc˘ ]"d{J]}=PX@c Bqr Z;WI*eb,RyVU !*PR}ݨSkTKЀ޹J!ep.:gS"S1!2G|olRf4 055d8fm-˂ i*ԓ\سf6ǘ&ɄԋlT_j-Ɉ2`cR8t5yO;Moz5UUF{i?5JW0DH^׻r`iZZb2vZx)`۸vŧc5v-`5q!9'۠wE&M/t[t ],u0]V3-O\E5cdtk<LqoL8kqf %3CkLjB(z\܌@B: :b IDAT tD5WZ*,eDƘ,Q' (,!C9 BDFAtP~s^XTS=! vypQ=!7@uL`d6ըӂd !*E*4yu$}5T^zjqh9 J**Stw "i὇VIyG1v) ݩ^[33']1q-=M,$W+VJҝ-_1JveSG"8yq1 1-t+LCw۳ZҬL15R۩){H1QeWlMmieO^RY3.չ#آq}t D]wZJBwF@Zz ERQw&`m(jb9R`к M`Fmo$ꠜΌhNi6$ #@uV.IW&4[ & QhmE88( bmAd4af%PP呡8M5֖6 9jD C:eA(9`Q/"w6\jH{RժBzS=A{la g'&sZ֪T8b/  (۰0vGHrUQ7 fT㞘щ4`Mw {*mخ{m|͆u\2:EL %'jd-G#fM*i?^~7 plX^3"B#1qf:582XkQCF{ng!g[]ݶDӎclAt>=IHrG-q'xr֟2-ҳ%cSΟ;f\v~`dRNԘ5^gwNΑ2PY{чҳQ^ͩ jI]/qD8$|heX斅ϬF!c"(K&|Ed'6#1 CWHīf,UUYkskmEM;mSbxd  S3Wzd~6̅-t !qoDArYʲ@B,f¼uuݣT(KUSäA2]lfecȨ|b:J1/i]; {lб.n=њC- cg߬"t1^`iNB3r~zm5`uZK{܍ )21pqli͠Yf~:a>f&+yuij;/ЅTI՞qvђ LT[7v3R]he2F"I -l5IPKTgN*ʃzzfCDdT9煝nV/~ 1!-Xy M`=G McB-(,9(2U-t<*{eY*T[k5z9罵V؋HYDݘЭ[U.Y!yH #Ds'wl)*03$w څŚ1Ƭ_2Ϗ!jpc17 imM/A$[4p S}BEu"v9q`)$W]NCD).fVn^{f80p('ܼ,XazwqziDKՈO!iφ»cZ4 dž.A0 "c 9<1:sD1uB{ m|zqǤI&*aQ:(Ə},- lQRTΫJ1gX9f:?Ms幙BQO@A>rhi-R+"\O8̺ȱ aJ\4S?zH=ͯ:|ՏcDH{N'_WX<;EY!S5awuT1h#`[s5" cla kׇPMF!M JDtK4(?Ʈ;<ڟsUUmIewl6 ͐B $KރB %B ;{l̽?<|_@ZiW3ww~ 8cȹR$8p [Xp΅RZS"M$=}[*Q6,&_&%avIP3Rv eWStOfG^ap ZCaWsF0VwA \*7o¬ .L+w-ㇷw/m? Iq9CҤH1!!> )BnL,Ó( R&9)y$ۂB͕؅ z[ I|(Ks5L/#┦Z)͉7 ,3t H}Y =b(5<}.'o\02tm~*M0??wCnEP2 HJ*5^_?\pIjϦ"`}Q%֨˾~ 8|g}yCq) '[RB0y lgӞrq.]U0aZ{'.ﲫ.=n| rnCb4_~lxqhw・r}>KpA:xRǞ3i wa1 -ez+P˰t"6cҍk&Ȳ#@Ҝt1w̬ٹ[XgĘA?"M@\pRYRJ+S\pR<9462^Xh-&[mߡIK>eR*D`' Cێ,ԛ"".lIim<5i$L6CF2xiGմ8HJe"{H&Φ ?>Kߙ2"Ͷ(O:HOo~6gvf #ec)ȏ'T掘zڙ_Ys01# X; J+ lokKT.9|EqդUDG~׃FIb"IP8LH$zx1+GI`n~zX]臄`j0i 8(OJB6~&foҽ(I:3faHU0c4U+1@4=Guxgїr}zz;T60'؟p"5FEFۂu7w獪C ͺ$ vwU= 8~LI.hml<֧Ĉ X~ׅu47Ąe "Rf9WL2`F^9w\ҌsJkDpW`p92al20sabaJ+v&"%,cƤrm;X-RJ#V0u\b)2s|L L0VzԇI;24|CH B3m "ɞ6kh91#zwen={RU}C-CU|1D}ޙS>yǕySQ]kIWzu쵻Y+u_S^}E:㡷&8Cq' vf!$T|?> AC``U/KuϬ1ʞ.'o彛.gw"+lxG3ܫSw1/Oz/,?P^9siu}rQs7-G{Ęq&@Md^ehCV+ r*%]<ɱ+g\Jp!gyɪ5ch$ 2&3&B*,a KXƪPẮٽ≄R*ڷm8cK:PH8cJ9T bB4>ET)) ؖJ 3Xhȭ49Y'N"֑e|wι /@WBcEr}|fi۵fsk}h~C/.[+suj+..]=mWgH'YHn?/z%Mj)$)1hh^okJ[1amML|L&i{Jѡ0HFQ(#3dcx|PP*#)y{c"}X eR' OJS u "fn"Aè󐞔/ lW1lٴavbկݿzϝ?vC7ރI[mgLZoܱ_;dgq H$Ϝx +c1d7lRĘr:'ȅ V=qdξA1p(vOɡYe1N-{ ̊ 64wNyGz))xh}+=eAoMCݤ/i&otDM ֓dN'C!u?-7kʴo?]1-b+6TqYrwn;&uKYF]cYy#-Y,1$} |Lt~KnmbG0xNYXSFI\ %/v5;~=k odww~cDbxdOg۳/h0lҰI3oK^~=|V4޸ w2 MAv޾#77zŵ;3[WWq)I/&.,Z*JbJΎAжͧTW4x"ӗ(;SA(z?09FT7~{\XEDp5;h.]#ZWoiYbmSr- #R3hP2HkP$#q븚1S goDM\vZ< c%ȉ9^1Hq9MhHj8g 83 l!jp]Xng1P`F806%S;Pxȃda$i1Sr,|4RcK&%l==(sNڻdӪrֲ%7.̍\Y7r zjwYqC,Dn yk 폻"TN R QK 2$`~I풂U몽θy n!iM!HKvNi ,d _ιyc f઴K)@X3)d̲D4# BXE !%sJ[D)l @2fRh4J4cL)m 8.ZpWkͱ2DJJ%9 BƄ+;bŐ92a`ASO1e6sД: П#}J$ⰽ&0(emlmL Ru"ẮՖ()u~٘ڜDLg͕T:a,8mQc ?#nC"ڄ%){hWw#{;;Z;ň<[`dwM(PB@gMZS7p[(-+94WL+&Tni1iyLYWC%[zXCs!#nj?8(:&xBLr#pƓ&A2)bŧ^y;FYM  &.I 7zm;?ФgʏY@cv_}es;+Y#h%0e,)ksrkFv~z)I/ &1{>y3:쒜G{rKJ s@Bk@V~~ʷ݋%$񌹮m%¼/W"1BٟsRPxrqQ 8q` f!!_ۂ<}ddه+.exa QUeJ);*C '8Ʊ 2pl]DT4fƜ)}CqPKli^^;au4V^y {˼sV}zա-#'qFN*߆55 q?{ZmK޿`[Bgma(A4\pڔ7B-nz\3qRa0}q>f bc׿$ ks])C" (*% 3ka1خ+¶&KPI/"lN8.mDљXG#DJB,8"s3ΔsK(emd%f!45X;IÕ>QOPĖdg wM 4 |ɣq0fZQ8f2fd t*~3m@'Җ6W)j 0Hoe5Ŀ}Ҳ% ?'DkC;(ifzCyx)oƌC%ЃcBN,1D\4S0.9 yDa[Vr_2NJ;DG"dFO1ۂ~Y.4Rz@.I UT&ۣ1 }Byq&"PԅBΑve!hq}Boв-p F,NLXHxLe  , 29D ]f~iR}iVӚȔ7WX,˲mKJm-G'8פTBNOoZE]Ҥ²]%qD);@)3&O$\s٤&]E[RIZQʄD2Ve=Ŀ 9?E&+p)$wDM*1$0#3ffI!2^scg*0 R?pi8pTdB-ff鬐#,i)P6$νڔ}IWPC!s80S-i&%[MA.eg5:= S C-4:igL(yWz Y(pOQO]=M7iEi\dݩ9;Th*]y&Llu:oh)cpc/I+o:3Ǥ pќ: %Pzb{ aYr ,+#pײRZ*e-fZjEs\Wi3MLw7XLH&MR)KKW0ȎD8JJWq 6cʷRYBh 7 MU1^FѶ$LT~6R |CD"x\V Kp.a}Uq+脘Dk@,#={d0upx)a@{)tQzčCQ 1IrwR{M_Jc@,UoB4ȴ$T!,k4I¡y`NɜقB4 m)bۖ~74,l1!ږeLDGgAfBg3t] /5ds%ڲS.ݒ+%QRwOR)ȅ`+HD[֖mD[& 1/*&{xBRJMQpns3BaJ)bP(X0E!% )_4eN% LK%g+ęo?aH>cRP}R;#)4DR~Ӱa?|7)^Ҿwv))er*0p/1[1/B\n.%NiAu)KԄSsBV!ew`XSarT1C!ek *KK6hI1)F]ĥY-2iBR,`{$;0GIR4 CR+elq|۰[2lWO%÷ ` `VmSFC![>\0h,'KcPn&IiAui$`&1&8rƽ u?5ɍMEbT\#8]"J8 MC*2g7Ƹ: pRF 긮kB21du]Ι:ҕ1(])85>9)F&Vs+:QpƔq=cȐe`GZb{`oi\DΘLN4A0ɀ-œ[{wƌi17G7δ.zaG oe@QιM5b/ 8)2{9O @# ,aד;L[Od 1 z`YW~ǔueȺ&{5 A!ib7^:sp&7AI 2;xGG(Q3;2n>)5›_ aX߅P+UzCVܛ 2F|i{?l&{ یqd,Nyȑq'/عwg+#If q?{!g$nŒiͻVAe .pW#Ҽwu˖ۺzKJv#f̅-A&I: x@!x ޠ}Ƽ" `l%!MpɈN48 ӎp|FgLke歞Wp([ۖ9/0$@!a~nhDt]5R)Sa{_4)RjҦmQ)-,3O$4mFaٖq'JqͲZ+9땵悓&q8PM{ȸJI3aA`Afd8H$b )4$}u.`Vґ㮸k #Hh/;/w܊ 򪡮?ʱkv VT~܅ߺ8pd3H+p~ }?zٷ(2-Zdӵ'@ig]q3sPX^eypg}im\r7E;Kc˖]tºľOt3Q8Q *En`0*`3L.87iXk:P״M04꼟T_>MH @Ͱ_b'z̀fR(tIq&i*%2sXR濁J/QɘsPQ,qR&y+`TO7fY#g2J /XvSXSwzU6/ Ü=a}Ƀ@)_rۧ1Q{Z?PZ,8h AcOwֲG֮}cqhU.Oɷ?\`P8dPވ2$ޘTK7t(NPJ/f= v`.̯K@j /8o>|J-u`H>jRsLQH vXn)s"H$[1wM//R71-0ܗZKnn˶{n8鍈9ӎ;\:zYA{h1)דl?RXiڼ*+blrBѻDQi>d|`Μ37q;Sq~Ǣrw1g\z|}?ەwm\}i˯Yg y7]Onٌ͏kyj%ܢ+sƕ*柳,4gywYU^FLY8ǚGN c捚4&rxOc͜1Zw= PLL+eNϵyMEcKJJ[,`nn⒱s;Wl|>BEAu]nD cQYdw ))ͱli=AzH9XE#r c <Ԡ) N+E_uӒܕs=EUED5вg>lMXr׮kWGX~Z[o||kHs"/g)[k9KmN@F W5qĪln2)7guչE}wCfܸѕE<ֹweGUS#} ;bk'ϭ.}م=L3Ix E aI)Hi2m/? THWJXܴ4; ЕRJL$RҘjǑȘm ;NE,;iS5is4`,rƈ1Ԩ& “gJ)ƘRd 662 r\s}~t:QzFwJW,8(>`{⌺hӪ.j?܊1SM O8MQti]5a5{] ͟xI%gx'vNRx>xm?< IDATlƣC X|?_UfY=Z6cDl6ݸ99 YxlwIg\:V $1f_r_2G0@س=e =3HFB BM>?xoY_<%qI/e%ٳ}5K:hs^>鐅+hmhhӏ|Y;qRK3m8{WPh<$XEglף/ʙquXR-"_pK ɘUz {w7pHJe?v>N?xɗ|/9wỏ?YcO7/ԍ7?;=%&8y<;Y,Q}~k; ul_ȦN ^ [jL/'Ԇ_Y2*q-->$בIDCk"qs_1V:z5϶%!hzFN+v:ꊿ-.3 0~;99`)x˓v%Kz T=ƇyhĥOWg_ntlt;N\V2n;Ͽ #'yF)Z0TOc"lMZU7DԴ㕿6뢡)+V󋥳b~ڊ w˒uKՅs? y%6>ޛƢ&wny둭[ο򴋾^; PoƎ&3ΣgÈ$wҬOup>9',< JrU;mt^I1pMcVxhEu!λw7ˏ/ʏ5K @|ǩI ]xٹ<. f I}r "tYG"6ovQe&69SfN*˳3fvԷ֚;qE_=\NZ_?'yy[:M9P0Ծ jgMavY<>Z5zvyekKm~ucGEs&,9;n'՟?Пg/Rs5MlfMU𔺞wޏ@:HL=gH]D[r'۝Lk/>/+O>\{jWqj񻞻okSTcϮX+^c;]g޺ƞv=zKYAt㉜3pf=a/pAb`p˻.xa{ϝSܶ ^Xp}37p7JSGl &xosyy/TxaѬ'5`:}|t7u m.:qgTM,ip$5)F6i/4$%@ r\. _[]:} i@;#LC?iȨe<}+9{SVNwo}ӿ`(<Ŋw`/]T0v™_ֲq,K!( i pڤUN9jQS7::Գ6 Ap%]ٗvN"ص_^G,8h?VwN9&pw_d s "rzuڔ_ n& 畗4&nlmVBsoJCޯ8}]SX}ug-Ϯ aN5Jre5U5%KNwlhn^ڦ8[r'\k{ 9E-׽=.'q!I*6+!g䪜瞘qdugM i2=?wALWXtOlU/>?֟f{vgq%3,_Dr?QicBƘiݮQHWrImL1)%MEs.lK$!^&$r\׸XKDHHdh|&;"bAhE4b,\2H/eSژi"GLIk-QZJ%83\x<5!c6cq:`0R+lhDey3rD #ʼn֗^rrݷb?ڹyP9ETngó9+5maǞ=.ˑ>ŽoOW47wvMbM?yNվ >/:riuk1nδQ];V99fUD+eξ&_tߵڕs#96TFC!z]>tu55[/rh©5z ^Pʏ(6Ԏ ;wm9vt4ٲ~7s綵~8[VNe#H}w:2JdQ0bxmӪ݌ b22oǞ^`\`@i4O\u6m;Us.93@un-`6$m_ya ,| : , DyQԣS ܳvnq]W-_[ܶoScC It=SF6B]_I(`Rka&ÄYj KieYEym  3Sˍy\ g#G8\k֝FA'}m@ȹPF{d[ GٜS{[}YWkC13uHIjrfE xfqʫ,2cQrJ >`s#Oe#ry:q_UWʝ_.9vrOТ4G V7Ϙ4o)3Q @Jat?IJ  e[V.@KiT׎vw7;,r+w%̿o=ӭ tХ<~/;eP|O?gĞv7#4[ ͭ^[fK;p^xY-ve~vW<pA0FڡQ=ss{8ڶ]7隣.X#*ϱr K- BDܕ ]q#}a@ c{w)aE#laYA.C'kV"7SmTh#J+O`"ږEZ#j-BRR"V 8#"ۖEDH+rJ+[D lYE#Q3mq0U2ܿRqh$bkJi\"JI82M'2HIӔ"WrN'Fr@GsK9t4ZTV MIyK)J:1.@977#stQ$ >t窊r^pwNI=w5$94;߸~MSX:"}&T{ygK}j9Ďnw 큊 Yn)>m2vD27d2BP|ҹ3O߮qNcKN?┝zRizhձ ǁ1{Fzװy;wMx_ JIGj0)RsM^#ڔ3ƻ1 3h\skQz.C)KFװᐺx|C\puʃϻ1ܫoJ+G#j)hdȕT@nkq?S{^ @DHȄ`_}Ot0==Bĥ1,`ow8=Ϻ]l֕a ]syq捜uYcGKJszU`Pe-#@h\Xj NT`aJI(K0iW_  pblNM%F6&(Ru+׭g/mN;7^?vv+aWg~ݏQ3y6C%=pBb='xӮ{f7UϫrJk火ғ0Rik.)H}6M2gNS I!`:aLH5Gs.nA1 eU_sJsyG%%m%L.ZTR;1c1GЊ򖯛mhO% gg7ueami4~RZQ XYhhnfȶK!v9l ǔҶ,'*[JJgs<r@cKH$e۶"S1s !\lI!m);eƹʖ ,\x<^f5 0c8B8DL` # MS.L4Bڶ-[JMNX-mWlr%N &б10vzqϬ|!n+DaAՇ5<0JᦫqqxbTyԁG} y+Sk#!VlÍ'iSӯ|I)@h`?2u]>HPTŸXAY^$_}x(g勿w߂D>yCX<6AJArhDyW]{Qxf:3_!tvAjߎ_~0?~}5|ysj 8گ=*M_N,`yǎ8hǻ>yWnܵk"T kF#'6N'5};); 18a/.j՝_zwf{đw?`c<H+:Xu\gb|[timY#o>y/VVx|ځ]}Q&0h|!LO00L367s$<se=>f؟4pX4b,[vłl0z;֮( ?1C=F_{/{gJG|zɼVpt y&|nRekkH܎ywVywi3v=ο ļ`{< 47f̸W.I_r0?07.W_WQOZ/9J AYP5{f'`ф"B3&wm$gϭ1H aP-Q٪/޶?i37 ϭϳIq_UyFbH`TVQVVW {4 [R]WYVokST3: {v7KTZ9!MZ͜Qkv7::fa vMDGswԉMp03T;<5GR(mPF{{Ti&`uDW[(* DWU5 ̚Y]HF}=5 %9>l:@fAE/1s|v[0,ONPv<4\kEu*(#R&;+cDDMNi 2iZN TC/Dߑ80f#<7fFxK\/H,k=,X6#M IDATCkxw-(/=BuC6䳇0"?~pFO^yN8:1;۫q)CڜK/mָf*V,/,-7xLOx ykꑮ1//y mv@rJ|x)vt<"…voxD{\󣚾߽2g d V:X1cN}aޖ8"PYM?qHEsʪj* L?2D㤑4P5'H HWˁýq3XXU[ HlPh( z~#Bw}|Wm633f iW㺰Ν{׮x9w̟W][][^T+gw$hj(=q@p.*.WQ!80dZJg6{&ڛ S8%6tݲ,8xl&͜%5e,*;k9/eRgHD-1).¶mhRie=KZ;14J)ۖI*逢%?DZ$qHH*\$qƤԖm;.4 ƹp]3E/?]%󱕲`zuͳ)tqTbipJP+%P pWaIJkW){~Y4J4EN.0uF԰ypjMCpXiV;͔*+}p57} 5e+UwqcbPiEp ឞ8sp!ԙGSˠ:GK#c5=ujSHOGL9/qRQtq3]SӦe8ʛ-O!'?u3j,0dgJoqBnn*T*"e>ӌlgid%8} nm<=B^RI7ƉqnEt8A5 HwX)v:EM pI`@H1'd9֌L]*` |dLϑ '[%9u{sND!c/V&@'Ƥ-ϨFhicN(C|% Cݽg Cfǥ%I;%28}eiS7~mIHK|l5GljӮn85trCI_1Y}3,#P -ieJ.+|rM姰Ii-eͧ)4 տLn:Fg1B Tr쓕I)Gl/hpb6$eIDg+Ӿ_\) @bȒ#YJݐGJ[0GtAv[)U1LY'0Nw 19'SYOԤ= ɠƐ ~ }~rÄ0cg㬸J2d4֊H)( a0δR,3BZi' &ؕ : dL+BJO$ Y87_UʑJiI[;dFV\j`4$Dl9sXnBbmK9"y<T²9ge#rZx"7 twoޙ$0(0.gۖTӏaOK_n gJ_K{I]:6|j;J}dIESzӞ$D;QHG/M4SOϬcXǐ"aZ3 _jc`|ZNjփ s h<& /M15˕  q .@T& SQl29kt+b)MeD1EK:}ݍ`=+N NK}'k;,I(0 yhb<-O6ҫ” _L#YZbL% 9`}&6z]y'm%?Jrfg!N9Ø\d**tȑkN<!A)m\8Ey<g#* JI'܉QcL8O!TʍdwbɋCuGxǶm0MSjJOdB!WJXyz(s8g%lz=m+BrM LHJYC&Ls'?U~@-N6j7M!Rqx HJZFa;'p;qYF˕@x}^5>dʒUNH{"8۾rE kiÖ0@Όoڗ߰l>=t-4q;fMD[.n?2&Igds W ! NGLk-^x '6CS0.Jm七!On8Iғ>Y~FEǶ#\pMA2"9c`#nUBM%SXrDUcMI=Vݖ IfvoөvӯQnE9\Wi&u%QM#N[I 3Tw ȜY'o6;ct ٟޞDXr@?rKVeW!`Xr;5"R𡶥Ȳ֤t5NJɰz0a&"18ٶrJ3J{-."2 !w;h?w8kN󖵑}Irf)p %ei3dRmJ4Ԥ8*Ji)mCH J%74!hN>(%9\ۖJkCII97L)]~-m rȜ92D8' SpGu(\8I鈊v/ʉIXJDSn/]m-GG%&5f?<DR:8ㄛ?> j^t嗬W?x5(Qp57Ҵzx>lpלO~m]TdUh/WDI.W5qcLpuW޸aeO$>^ܓk.vúj7*5g QIN~oCm³~{S-`I@Q)\o$hHҤ)(TVYZ9oGjUؐ!SJ*8M$?n>U>?8YIסl:iPJfcփv*IA 93GƴT.ݰ~W9y9m+?K3v0ӴpjYB'YkyQ k9e#f8}A;+(:憛wIul8z{GN CO5>%sfțwF,r"<+6e5qUJ1 x,"d3C(##DxB M|uA=:nLZ{+ϹW?)#AYP+Y._arPdm*[teQ#}}uoLe|%>񻇷on/~+?|Xwoޏ9`pVȼG"DԶy"WZ+8m{d8dR[nfLX>^D, ˹`l[4sFўAn T?IO#CMXt7P/k=Ol3'Z5Ul{w@JOK'WoXܷ}K8C5vۏr xs/o9Sđ`^`Uԇw} &_kίCq"xo[O/ Ċ_ /_wK3 7-[|Ѭby'~jPA>XvԳ@y1 [NzҞÑ.8¥\TQ-t Xk/ў VtmDp% ᱞވbYr/ոLX,JL!2OMtس)e')o^T'?cG׭m~OD<2flzϮ;u{QJ?D?nj fU$>x1R8Cv=?.S}z{127/X|x73Աc XH4W[U`ƒV6А#8+E=G{m S34\2u+f##/n\&:m): h -c̖ h/Xzɜ<a@Ru&.9O=s6Y\#1s7T{'<+םdox$BoU, D-0^w0FFAâU8fR HF2X1wڥylt8bq[`Ś%3K= ᆦYeyyM+W7pHT`'vzstE1`r2eJuԴo~26ufϪ =ۢR XV[F[^ymW|ѝnzh8R;h96h{-n!# oӏ[?@Ѻ9;sf_UVn5&?y@u띷nX=~ g<ȯ L-(/) 1ŸSX\'?u\k/-,:˿WFӭU~ٺ~U\P!3RoөRq.^5 C?Pq3 M (d `բW_70ٍFCSU@eHH#g4{#MKvE<_cpo|4-.BHvA6ͪZ\0G?(*jg̛? abypUws / +W3n鏮[jq/dw~"NI•yϜS^4˯Y?;lG,όyz^z˕JTʖR)dB;\[nheSek-7LG+Ոc{7| ?%O\{όןxovGk(츝pv<߿MLɉў;QܹԷI]{Bf4VG۟vu zvol|+k{yۗvE{`v }~vu`}&f(uޔl"Lc5)|tir&׻4I'h8'QSzԓ֘jL 'f¹X#2wYlѶ$SFLp/S 2:9iP%KELJnɏ5;W؃[=37-=kLFq]3.VNqP2f__JRj~s-5 X{o߳@SN+K |菕s#P,#f5Sf:9>m`apFvB_3;9!Q|E.XTX &c^N. oo sxh[Z_]0cI?w8ٳm ρщ IDAT=:V9 ~З0hk3W}+ʊ}# o1]{O!*sCY*oi.>GJ |1m3@)=FV^Î,-# l|Ƀo9u9ۏ;{]g|4ǖhzzYYR+bjb軏=y8 +ggK6xR 4rN).0;̓[^oތ\5ksKFn~ɍ["Ҧ+;}|1P9sn/:z/|6qwSsӮ/4@8aBiGBJPyڅkVY:h##(|VMDnco_qOZYꋛq_y 5{T̫'C==:d! B^*^H+A凅0$[e":>~`eյ[/BmWTV7^ßqX [J]?Ac8tW_-:g[o= \0NACx e%.}՟[o0jEm" F)߬՗-`ܷ+ KXfHr(px$STR$ 1PX2Dn -~tC?Zr܎@ַ%9 yjf/WS"p7kȖd~ƑgLdFNqL8 Z1{T0`…S!3&⇶%Fc]`F% 9Pܚ~”.%Jicɐ<*Q' ]D$d$B(Ppm $vv|ZGKY]tq}NC>OG|-%Iޅ4ZqZ+K$Ass,IE`NeRrՍu>^4ֶhpPhg{v<ۙhCH}C =a&ص ixP  C8xXۡq=u~?k[wݵAl Da/S#/neعC/7ȈDu`Rb$^Ȯ Oe֣&BO7=*X'G?Z %_8-"hۖ"ך pcQ a0oyvcJk -A Tz8`9An uY.OxǾTTov 3id6B0EA`p0|ڊ+PZ)Nȶ4# 6 ?Đ\{/E3D@F$ &hxD0[I*@뎁[Ikgon2&HM7e4N`HGt0=?÷r9[,^r3DZJHK)q@ZI4))NߡKSxMc{vz/]W569W6zzu 0ʔC7y9 ZU:XKNHs"Oa@$ D,XRYdFҳZ6@Кq=p`qJv#}:+Bx u̦5f"%=0G&FF,`@E["8D*^s FW_|x$8>쭔*iE Mk?+[zA0:4C¶-[RiVM`NH˶RҜa``ƪrlU`i$Ƹ517440';2j%F"q& ʱ@欻}ꑖW_|\0>(:W.M]vŠY>g_^9?Q2}W2H' ɡʖ83ȸi >m62D.mjzi?:N tyevwM3^~݆k˟hq䵿}׮ *K _^|`Wh{^|qS+{-W >uuן{OMBrKOlzE_tOOpN뫏|ԕɲ >FIwtW||3yK,ڟ=14 }ƱEM890;ok 衑8Bd+Bg^wW-:Y`{6|gN01`З?;Ц>$Т.3?yWgǷ ,FpW>!wï/4 t-6uwY;n9>w)4>w%/k^erhJmv 1*U,_hu#賊Ii7=Sϔd%"d7?\Tt C#kf.Xq0( =d@rW<˶,s=Í_>s OhvNE|rסn@i `\.0PSs?++0,yэwuY`ȫ-Yrkq3_,C1H]lԂޝ63ĉwǂ/n/k~}UO-6~4&92>Ur9aÖ́AN,-&7|q˃;W=³>öV_~=Y/|^ϨEM't?mr38-<`d~wǥkZrubڋn1p]E]_詸i@˨< ]/.7naDi"g1Ii@Oqن˾6Gl{3Hi"J+xly{խ=d Yږf!ֿ5Ӣ4քyr+r=zH`qdjD$b~F[9uF;F! ԗ{8h?|\Gڏt[8zr*fԄѸ榇-#18#]}@koAe]UDvE(Gvg AKMޒڲ9uk"ͼB#?vx+-zjN;,xonͯ-KC`BVgp<$z'Oqm]iawuU4hEQe> 77wD"Ⱇm1̱pY]uY[ۇ'$ח{P{g<T}6jP,$$ۏLHHw4+se_@ܥ%!XRZ`yG"+*Dٷ=*lU}:5r{$F$kU81}EDgT85~P/=,Scɏ͖бIGY5M]Ŏ%)Ecta: NF.Q5 (,L3?q^[f~[*U+&56#bW9>RWf7M 1`S!F^IDA AnXr, j H&B8v[wW&f4ʲd(rmp۬1`1ɘvoy%:`/9d18[ٲh43乡龷o1}@۷ԩ_-^kHױHr9:tk4@h+rԚ.tҕKڋ#wsLGCwX&o9l+} t r!dS{w ә80<0jl(2#漖K{TڳsxҢNwt(ә bs&枮ȁ3:vw\O7}{+7jLAZ2T܎B[oOpD2-;8)]yxPXT .TcC9F슜E?XS-,J#3 [pbh`p,/lPlZw9v>LWF1 ClMuP@/m#|v7~/1^YMg{Nj퐑T¦о)Z, OYz3iB!l^+3Ã0-=+zCwjj /B3=}ֳ%?Tb6Ƹ +&"\^@E}3k*)iFS("RcZ[^r]\cŖ/M@**nI)lp N eD۵XWߖmn붃U`Pk1ə#lM̻Q5MgưEY_F ꚨKc$e"㓍t17\}qO|;v@LɁy;H2; Gت(oF pz5rYB/S+cacJڦlr>QLM XOq l;3KO?x{ [SW+k̘JKƳG" J\vl,D}ͪfؿ XZd&r]|[&hXi*yG.KT"K><)$bP$ֺ֑ugeWeOc*S> d|OlE C[O4a0Sȇ!eKHVSW[=Fv$=bX,mN=*K~굴57g3l&RkX;LD3lsZ%|2ٶ؄, ׿}/lo̥(MiaXW̪6[ryiGhO'X]IZI$mj\!:-{b 6S(J4l 0>WM.8[hTAEX=L3ňRqU9cy*%ATĖk®yWyW=&/KGeR~4R:Y!BCB!r︸>@7rnI )DXX}7'>jOQUKv*'z[l2m])e S*񺠋#65g4[nGZ[MM)O0d75 "Φ48.)y٦jt&Q#dc׾k~vft2BD)K};8ks;9a^O)RGRs`t*֒d2)@c&ecݎ&M A®)D0s>E:X=ODx{:4ek-;z4xJ9ʺ"i8N#!2x 2W\zuy1X#.YY?|j(&\}TyXn5^{_Uf[pWɂVLƩq(# ]8xYT:%#P\l/$E^|q})o|44ik}ۨx|#tIaHL 'Wz3?ߺKa˖|WwOI7iykOh?7=ixw勏D\aMHTT/Z .$kkM R @Az˙g2Սa ՜II~j26D6y8uhzOkFe^B+@$r: D 6^wUGN)z/u3 Y)qźtAR PH,"2&4gQ),$lZvWE$Jh)]t0Ʋ0*2 )a['T tOR Ҟf4qEQG>JR,DMx}Ţ?oro{P~_g'tZYBaO=umLշ?r룖Ri-!*cT׊O975xjh skiv=OYDmQׯs=4[?Lnf%5/+N?eBA :p4 iooGM{_oHQ'n9zIKS0ʫ&gLo3Wn ༳W盃wI{>1"CkLzڊ|aͧ}D0/BϘuǜfCzdQj'QTqdy땬vA-{r|.qQ,,?wɰZHL5 ՇڠcՆ#TEį }ԻZM==煐V ѧ^PM !;Ⅷz!Dfۼe2`ƨ>s$gv_M0c涞0z֨f SN̶Bx(Dnl+tu4ukS'\%W7O`(M+a%\ط|k_ώ2i2"CO]{M#Sd)W_3Fvط|W Oz{vvf(7kW,JZzy|)LfÖ ԲȵZluzే+ecj]w'n>'Nuz>4xnX׼l}a8ico{ww~Ϯ|҅jCn Xخ"W.FROoܱo9 T=T% C"*AP 3LZ)"X)ߩ )˂$ / 1X.\BNHQW(vt!V"I3egޤ5"Zkk !F LRFiL U߸f_~%'/Xvڕ7\w~o X}}û_bh}W9S] Eܴ+z1=&`c-+er =WfVGxk68>1aqfr2g{[׵g E];\}핧-@33Zm:y-{.?{lh@)MxbO H3i;m _ YLV޳/5^f7u nzuohqL>Gm9=?OjI"XF`d7Ok& ܍ceS:$˥nB"Gko,TaW4\:W0Ǫ&^#H͡ދɬvT y5hk{^w, W‚*R Q}-iѡR܎ :_ ?^7)IyK:_%,'ƥ\w_.%t~âSNBqdYNuX /=q mwÅ?H5 R ">iC_E\vI;~ b\]+^uu|;tv T`(lB+;Rf .^~䦍޻॰uczkUէnk/?eˀzO85=+\zu.ΰ}^rLKz9%t!`4;H _j3K/zO_n+6xrէ^vY+ tZkF6)N/[鑱IkȮ=v]l}8ke'7Ka1`0+(&!e}Wm goo=0׷|rXK#PG0b#v/|'oS\+xI xYߟo7->6foɻsj _+RTUV狈8Gr+A<,-L+/=KqZ%r; ;tQqIEpTߏ̣l  'Ž}hh_gqǥslq[0Ҕ6H:G -P.>! ٞ}?-DeF &P >/=yȏޱw+r-Yީbu:y7wک7|g NծakKBIњR ?y v]<~ oo]w}֭rQ ' p၈RH+В"΅_O~3?]^Ȉ,bP Bc"-ᴟ<Ѕ[W֞AEF%a6;W[f6lh*U̧ՑtLDvm4 F` MHDJ)]fcܶhqpgpjǎ|Oq7^z1l_Km sAɷ.|w=6lQ^{oWv g /ćr_vdhB% j1EV_hs$("Lxr?2㗝OD&OڵQqin6ˏ9n o<"GGryՖ 6-}񿇚4XO6 Wس{w<7sκ%Mp _s/REם3ùccsp[qf5PokHd';yJު-J)d *m '!l0YkX-"Y ) K>]@HH&L{r^ǘE1y.g?ʿE;>xp Ag㏶l`q=ap`r^04|hV^#|hcXTJyrbd`BiOW᳃ve^em7~p&䩠%TkM03C)/k`,$hlE{M17c%f ZePJAcRȒz?>W&=CV(0Zfbh ij,ي" Erzt4eƲ)B'Hv^.!DhlUF'O@5.x.:Qk+L2-amPZ+ <̮tl'.d=,\,0x>B?~P/Q02-4ىI.X3fO{Hp`c:CS?o?Q\c^^ 'FG UH`,#_HD(zى' =R'=姎?vϡKnIlgXzUG)j 9 z$ "PLkGj}抑s6_ԶUq@bl\b)jk?-޺tM[ɻT2/\@#Zf#*b- zJ3nA\8D I[qk8o dT542$PIY |w qi)>;ұ~IMԱnXQ&pTDќni?q<]l*Y2K3ɩ./>\횜)]F_2F! pSlvbaӬz/LτXשJO`eJ)@VRC Y{D#g)Q:̛fzi O,HDXR"* Zk&+`z&S8c08o#b tiR mE\Xs#""$-"AOF\ AD5 (Bk5,J-E|!\)D("ahRnI,3!!:SQ qc5nf1?e6>j_|QK"M}G_tβF}֘eWK*;V^fy~⹑5g_GV/3ckN9EccK2`ErlSw3J# ]{ן?{'O:smq`GQܟ:s@t7x7!V||v U(55{Q/XO*%O,vKf 9;3|)ѱ&J^d%]G*s1$!kV0oMw=/=~3(lʞt]׾r%6!PE;KVyR_#7|78*y&#]`fQM -k?*Ir2tjӏ`bdB)ϙzIUvg/L[w睒X}Ζޙm/ 645skMS^;@XSG4c [W/Zե[qĪe^߉瞾lڗZK쎇 AH@ oٺ7-םY6!Gw} {7u(;r;^MR=xhb*gS*bv 6Iw1˧=Җf|f)0 CcXS?pȡ@h (" zҊPkbc56IA6T¨ janz1d8 0Zw?Z%}0 ) }I1=XDkXUK6&]]ߺo߿g&+omf2_~g#_5o;o.H#^7.y2o~aQ77]/ی?n{a ę@sωo3t܎m0R'pL#@MOݱ~xt1 ?.X[/7ǟx~_rmD?5n8,>ܕTo(}Ծg =}@[nkg z[ϓCNI?z>O)"U¹T [*Ǜ3~MRe)0f_T)m4%WR$v?J[`itSƩf+rK7cQc$jq귔YHM swt _u)L>9ym3@$-矒g !=&>ewUo?O3ʗw>m`IDkR#ɒ#.l*߽䨩}x)ӊZIPi]ǿ+M̺*5|~sٍ@7z_fiq HOnoOPxHJW١Fw,Jeݷ_UǿmԷ7^皚hۯo͓Sc+5ߺ@3i_aĥ!Τ4SCͯK{`HdI<)+,=}c_z䏷q/,HBb|_0 `lnG/\ ӯw=g~J#N)GqgOkG MHZPZRKSyUO""IDATs[3[BU|/,iS>[ 㜞a8#r_Okj-K}7a]/Y)1c,0yZ1 솎ܧ;!6՚D+mB< ֙1յU&)R^5c8=|`hHMu-̌OsS@-noN).?TYg{RX7i{S=E)'GǦ!&@gpv3[j]sBFmet79L-.\͛>x`LP͝43:YelEe(1ō_\{YohT@-ġZlXםpj֬:ۃс u-ٕ3AZf-2z)<(Juol#%r硾Zt,!KH@њ`:I!ڢ-q?iSo7+3ar3T犨,e[y;=^ʲp"jjn`2J eX*Hh2 Ȫ.* bQTV5u(V@'"ED.m F ̠rOH7{f|tWSCLC cP ݔp *͌MNvuwd}  Pm==i,:"*NL hsx̺٘{妭}{t{NJ0 \hp\Ͽ-}#yQAt88!ꦶfohA =_*[ٿ2-Y1m-vtCD.@jH5U#8TSkKs3XCDY"q J)RDV + U<@l5iE"&ʹ̨#4:3 {ǻI}ZTVR}Wfx\=04#:k<)afWJfAmR, N 9 ")!VZP+@B 9+ˀD*iödL?F^,p~u"jZiZm=z2(Ea.g܇\>3D\q_k7^j@)S9ll.{%;)&evp962zgY ;0FxfvH'Ny}@rqH {SzcC'`ap2(0XZ%!wStƚTZAC#QTXJL{ߪU}BEܾ޻w:TbݡUԥ<d;[rPJzQϚrpUcd6D UgqG*kd?l˜ q0SFr<H, +2@ΦTJcgP8Lȁ&:F-V;`TOMXӺdUI@q!Pk.#E_.]~o"n=I@kX܏IESYP.8~ NB$G'"cC юy/j0$$E (7 *i/MiΏ8g[g,:JQ1C"ƼYz>RqJVI^?X$idvSﮛbtxV饖ikڮ=Vl]jΰ;Z/q9[` wZUYQ/ipS.nTԝ3pB3uc@ Fow.,&j_*Pø(ҳ|O3L:-̑1V v9PZ#"[ A6cmh-1F9a2w!=VL*1i|M"JR BlC ҊƤa)Ӕm iKr|"$L, D FnhDy 3kED脃 tZw)։@kγDS:*a%vr=YΚ;bP",bsR抐u'ktX;JzBV*{\ #KWiʑR,yAI5\s罀bSn3# X42֯?[7ԋFݲtL4!|# bYڳ& =}O+rb9alAyu(%Q%D+"r<\IJ9W #~RG]Ӟe)K>8%"ΒW+D(F04i!XJ[F$Z#qHGq&ZKzuwc-Bv&c]`wzmiVQr9LJ?\tNi0\BEMMQJkX*-4!rZKDZ#@UZEMYpvDJ³QJY]W5fE4dHX!kSvV.{_N`p){^1Ec"yVJR D,[fфF+Y:IENDB`glances-2.3/docs/images/fs.png000066400000000000000000000233521246314757600163310ustar00rootroot00000000000000PNG  IHDR5V}sBITOtEXtSoftwareShutterc IDATxڵ]w|WKBz# I)RC tiJDzE"Jo RC(R( J MZ $~}?m\}"ͽݙ}̑C;Ӌ:<' !V BKoWGA͈!w#~D`h -O*F X&BjRF0 $ f[3-싼ks3kgl2'cG $@,-R3JD`M0{"$-͛09BpE 'D$J}H"R!bSSXG&ު{GGB,0Pۿb̛8\*0G^$#uT=T#k :҇Xn%= nFC 27hz1:V~E Q2: B,K]v:VLw\E1/ZMAڍ#˥c+(.k5'ˈ^-|~'Vf*Sl!V)D\&|wrlE@1|]p8:=~'M߭ϏQY' o>o -EǪi{zaev:'LjήFg:z|)eYU4Q6frhhQlwe tuG-ٻ򔮋>j~l=l2qi/%[r$Sv~uG28F0EJ~Ȃ^.Gّ'jsA1]_lNVāEأ AabCjᅥњ^14pAsS " WgufM-;ٲQkS@7Aްڤ]>Y)/4U,z޸gF82,KA ]xZP~З>ȃX8wxN\r txq| ~%# i8"'~@YA')]~ =IWi p7{bW7!!}E.rZW7J*eZҙG#f %ngd>8黇aQ톶ǯ4]ckR6Ky7vo޲1IЖn~[_L?'յuPy͙)g6ƐJC*~c=Ϳ<+1 B Y)W^=ĻO4Kw{?fGX(i/sWu?1M/@,f 3ls6Mŵv}ٌ}KNv;\ ߌTveҜ:K +=yXgMj#4TQ|/CM`"y:Jp#?btf>.;k[ةGkzhҸiM[H'3bTà:+IM6n5D 3@X4][~-|x\{@f&W=~C}N%&>=aܖCUkeѼ3(" Lq%@!P}oO*6{/?LO6ضe-;mپm~+ H[2h@ˌ! OOU[gxa\Z6箞!gCqG@2D0-:reA3@ L Y6z "FOBnqA]ah(WXYX4MW4tbnԝ"|#}(#'dja%yyʬlO7 R7d,|i$LbJ׬۳~^fſirZoDRnhDFr\x=Ĕ䋋[Z))SR9Q ]JMIMIyrSQ],xx?-(r> "ʣ+R_7 5xQOհAw&h+KT. ̞2Ak^8O 7 ߲LjkR>v[kB`3@R_[7]_Q}އ1c/?fCJYo|U:4qD6R(P:#PlΌ1+oY15ZcDgIJp(GKj$ԶapkN_ N P@& ( veN@Nq9Iz=?+0 Cl>0cN 'OE ;.@YO@\@"\Wښ#@ Bz& N%l5ǑpXE7:h1%ID'#+#'Mx)ZHۺBN} !."MFv3s*D61:{9xg<ЮfL;,qXD62"ZnHc -#7+caѐ 1(8f/GfzȪ@5b9YUN͙\dagQ:Pn*}|fk.@<r?Hjm鏲*F&pc y<>w&fr =1(/Mx$kvMobڑaÇQZ j*ZaL%jsmTuz WT?pu!cȐ9ЬuFD@B;+Z}#mqԷ;<}@(ֻa$E&KX >fhǓVT55̷MI#W CƸin P=^Sri3WWbB@I {-9x^(k#AۓJ9&:u˥4lg)|'sOr\T-Y<ՊcE{څ/ɂ϶ᆞqɕ4T'dV=t *^|.kzϟDGb)F/H^a/Q pUCeU~t%0lOئ45@&3jp}_Rش;uZ|rZC^:Hm__vRO[ZVnre|6~>}}?Ps̢2,PEM٪fIjR<3da',>|~5dx9WOi{-P2|ml=d_yPiP5=X0lؤ]U=?V(͸3.lFX~U%5W%5"̔$Z]*)A"Xj4hp^`SW@|uTf ]~򂀻)&>r zE/5@.NGЦ< Abk!MX "YvP|c Ү 7RtGΚS]DZm:R =lC22.F{gl#^/OJJL63fJn^vZ♟> l74FqݞO.@v0voqC.ۆʁF`'pKbOJHB)V ]q2(TE6@eU]r@o{sJR wa&VE&%WM 1pɇj/#uِ7|73O{kP)bgfȤKA]J^ݾ6cʧ^{/h a)`[pL͗ĝغfєap<_ aF$-F̵7ߌ_]΀P>>2W"c1AkRF7D  Jw7難Go#l.NcnvF@Kx~bqax^;꩘[heX[}+W{*h~a&ޝnru7*ia쾔;^ֶ~7Cѹ#?)_l$ {wrcU `jPxP̼eؑ=-dx%d@5w̸۬޳{i;VvIZ:c#5Gk(<\ASRm!ΆsQn>hL(<+OAڠ7I#270UTs+!hH(vB0_jJj_jdnmfʀ #n 1.jڎ]HX Ƽ#JKNe,,Po)JӞWYL=W4A}'3l6XcO66pX$䏛>I4T1|#};d |efKّ۬W 4m:AdԶCrM]Phb%@Fejg5N#_]MFY LP@4 u'Q8BeuNUQu\Ұ澥V w=:MGK:t }@nұɍ,tcW"YjO8:gt=Y&u:N貧cLE.8@[b| '[~a¸+l*AA`Њ},*=9{Z( 7WFǻ-udؠqۚz@*saI/{yՋ2wbN/p=+, $X)#UlBFdZ([ն"qGlwt +2oLs(fƫ0Fsŵ ͣ8@@pV =m)31ix/YeqPD˃5L,M9_j=QGu|݇"^Qz,uctJԲn,vպ)%@>/E@5 ye~dcpf_YpgMb8S{E( G9}.QfZN- Ǫ&`9l~HErVUc#$"Bp4&JrKjkQ\;t 9y \0g5g̦qx]\8b(a|ljtЃәFEB{y1[镖~_jZl@{ 5SѥoW^täBLe4B=ea nwr| f|NafA%ֺ0]hD.J#߻%2  }\Rs43ߢ|=wUUI{(*`Rj-.F'K߭Agw fX`̹У'}RNXT ںz"nGvzm`\_F?vA(Boa ʝ!}1G/'~1M֣Bc^~D]kz~3-#">l&jtӯm"M巫/ݢː/\(6&h34|֕ Սk)|1_o2:#;k^ZqX/蓔RM[U'@i]6ziVz2z .ĄÛIX15CG^+~P49NdlHض֟-o9AEawc7v?++ pCT6Ku'vup"ˀ#f`|pj㮇azIE #-v3qeHj[eh, Eg-zIDATeiLGj4F9%e 4ydž?vǗgT3"+Jޝwl*&d}qsQ hE™7 4]PpohKLĕ+&-"^r)azP7d^,7V_ I1|zG~G^+ m7p5;=l:vxݻN0Կi]4芬lO7H:hnt-2c=7kŋ[Ϋ ܫ" 9){ X>OeD]Zu:/ /˖PDPZ;LĊTQM# EŗS12e%yUSfYMMэ'no )߮S_38[eޅ#i"$͝=DդϢu3@XQ@)|ɨ3`#Y~kɪ}+WNwK3z7lקK:JxZ`"v"TM͛% yMᾢR PAz||won"w:\ \u$G3l<-Ļ˜M2K/}^CD E@MT=Z#j,ZFݫ&s"^5S \K`<T&}3gųuؙ+*Yub sWqW~5V0/g}u`;芟'[h>s`\mٻ-cn.R'_QV.(XnV%LoRKKyŸ=EA*&<_^c ?kD7Xvy5?Y"!ۼ{>;(>\MIHrСqƃ*jMᛆ|lm8kC 0QZx/7+ 'buR D7Qϋ8N k&F߾,FsxѿJLyCP #-RGNs}zXg @7I:#(TJDxN BkiaM|MitV}#P%B*ErpƝ_s%-KCO_ĥa_v^|S,p+Vp|P` 6+@m@'Љ#<i_}cjNdn"e.a9Weezx@ģ9A.Iy*E4gnJݾvnV>^ڍ^ݿ~=V;[󪴭h:]et:kz zblCiE5#z ] cyu;}~AA+mȨeV_Zot[oT,V?y~FixhCM,2Ziv fGb=o l_`Ôv:&:y.AA(T{稝VSZ6GWo7}BE;ٽs*{ǧ@e_wYV~~5AA :Tފf vvtJ5F]!Uؽ< 1A B~hqC+A2^KJOTCo)|=YaY!O 0lkdw7/ّ;,cs6)ΑmZYX)|@ޤfRq{;"W8t_%MYsJ۩gs>/A{Rmo:45Jx}KjJy~ eNVoP5ՏMgl;#6b;{@G~UN7ADM鎿w4bgJf ;Yg 5jN 7R>;[+yq"]qTκwo&TUnPL&AQpo{s% ,/cZ;iVͿ&0 1$b1&$Y XY$\NqxB1ҳ4MQڦ:AikqA /(I!ߠ?AAADUUr9Y %0M+ȓ(&tӀkHRHYrj͏$Z,$a Mסi24r,rE0j* Ài88 !?}@ J$Y(eV 6.nVZ MAo|RIiVAg88i@U (t: p 6. nV!ALSHHRHH$H&ȤSP saf~f~j4j|>QʋFQEX-N'\'fn/2AAQ>C*B:F*bi=h3]Opfd(e" B9r67EHW* S@ 9;U|+n+fj&4h``H9,&@%m6n yƨwn,.7=P  |zDD^c׹a^3"lL,ntnCL $0M#J"Lbs}cPQ+x{Ȅ_0aBu9DO` 30ёF]]hM"AAݡ8* 0iaᷮiHj$IjnǠw{qI}H&m DSr}_MӐH&5<`add>Zm};7  ?t pXs3䑻?T Dn{ʿ BI&FX[[ExnI=EQHS A=N"N^) }ǰ8xi Lbey+ SqzƱy.Pr EA8EXm6x<F0=3!|#=9n~LDڮr{8mbmڸJ1SV)^'JqY-|7vhZy~͖C2c(WֲʛA$Sg'P]fA쉢r4MwY׮e;CdDIbp:\8d8t]7B|X(9$\s,VW122z.BguDKz -SjMנ4RI~,\^0==)ݮBKAlSR)d33iS鼀әИM^r" "l6+6d4a+ݒ$`E\.Wh.XCQΡ tMCNfx^ M9?8714ׁ0}4MDa,--bRNc 24r2}84;)OL@ee' E! LBM0R,Œ1kL 2$Ic!Ӎrmٌfɇ+xu4 ΑH%h CKaza! c$S$q,/ЍkBI4NCX Kz1>>qXl{i!5AA* ! ($}n\nm + PsArȤd2u>H Bb_ȤX^Y˗!"+ơChiƾ4x#L0 x^$ 6ut +0M6_^1V<00Va$͒k,G5n/D"]Ӡ ]Ǧ[Lf#AH\_ Wٳ/accL K &B ._q92) zxb8tF z] vIy~[u!AA\Ϥi~ɦMHۃ! lA0>> v>/H#cllffC5(N{`!c8`s[_ 'N#XOiH#aqq\  *kMp\vAĒFtBNn#C81|drEQNH$ !޺Fޛ \NBXZ\ĉ'q|G!r9$R[nV+%$ "a}c=,oF 2&30V+$n100as}6+l`sT ~&.ascc߃rPYe kyf(`,?sM|=[ST.-\Οp/ QI$HO)IAB!~^ &z1>>~{ [Q8VL/"AHt خEŅ `Š׋1rr= L,9L24 I`-p9p:$ `$IW)Vi%EU qpg,Yui$<;M*Ĺ nc[*Őǯ} K108H/ Aqݒ就T"7Ad0<4LOLbyiw7 +{A?_8P{7^~+_^gíݎd"(B$X-VXm68Nx\. ;p rCD [A Вz0|REAQTd2i$II1SiqYhZuqG ɈF#xU:u+fgrS =bmll`iy $ S8Mr`k(7@!kd3(ԡ: Cb" 2,a6v8vd2VL.X,}[c?s?|ꁾ`^<~s_i$Ή6Ev.xx<x`;t8`Z!KRq~Uגݖ H|<^viu D"xBX)F' n v*lZt:ST5m`q1atdޡ!\n8vX,T0^]vdYbLӄu d 677Fu8^:"n6>|$[\; "+-0 ߏyz xهj~;G^i%a1 ,//!Y"ڨY`|baDQigJW(^+ RL &7˒;۝]XͮŢ ):p>SdH^'_ty;18Áuq蝏alS4 pffaxx6(#, , NFFGq1RIA`ӿx,U`.m^USx,P~;LTUHWFL&i AAAx4MÕ+Wf6Frall3jtSǦl׾W0 |뱇LމpKxK:=nW. ?/ѧ|X^ZiƝ~ b>=Yi៾zr鸯?brj /O+~whiS^.w~7?c=zl_*b"V(TI ecT~ν3u5}ja|jSӘVo {,.mß@՛n:Οxw;v 6[~iX\\D8V++AqcXYYiHc0lV[G| J LĮyI׹ə^k |uq}oV__?Xbþy3A#av v3.c}ew߃af"03³<+WB9#>V1>>ix!HRi}cǠ9U,-/ [[-9XG*B(]whWB)YXZZ7``` @Z_9b4N',:X <~6|2ÎC8dƐ<hE!0BZ2+XMAÉi\ˉswcos޻|H՟-VOޏﹷd7s>IQp9,,\x pdik/~3Ogq:#?1}c|l?sǵ?~<7+zg|qhv._ <ûB9|?F/G<Ӹp}hziy<|#4n7Giԉ"I;)L;%\xH6V"Nj/t:׿ X\\D0Cǵ577IA9VVVv^/2cF5U|3-3 0뼯 Q[v'\^ċї2u awHT0 IDAT bD\mb9#9uvw$c o/ixo+Ͳ@x_-}oU wm;y5=\}ʜq;m7_xۖ;e=i_'<`c}vb{^5Mի-&13s#'l,LLLbllsXt .G";ip:pE$ 9dIf2pf`A}oF :8jEVM On=CƝA ccmxmvx%y:ρ76M Ӷ{, k9=}eK>P}݈_ȻhV Z/h-vRm{3F}?O៿Q9l{,9onb2aߨZmc1==Aw߇DQ1sΝ; 41QM{!EWVVÇ  L&2|؊*OVXl6l6[f3=}hÎCx0cjcoݘ>o@<~K SŠ_$Q`vlƮ[cX_[Kg^lKgN'&KVWpR1wǭÉl6?ۑYf`zfKO|q/_wN L'0v4jۊ,ٗD}EN#cáCp=-? U X~D?I‘#󘘘Q>8;NX6<WRqu81ᦛoo|3ছonK  nfw;p]wtr2E Dx0@&fja~(a;cdX hǿxƬ#5˚9<<38K8KuDwyh(Ks8?W_7 3醏l=##+n}o}^KO]Z]oy^ąW~3ԭx/JnQnf<3߿ⳟ}ӛG~_ w܁}omw{ _**j L022Cf1{|}I!ݯ8μ"VVW`Zg/9.]I AAAuaC:x {fE,gV:FވC5S_ |jI#U^qw3vt9w#{ 0 ;aM),W?xb`z?LCoaH:$#G=c8ҋ0L~οrty~Q,\D"A1:6Sކ7M}X} Ë/<4܍~, .̋/ Th"ͳØ? (36 ǎ ^~e;r\ËVW 111ANAkHq'J|>|=iRzcg 0ëWa-*6Z咜xYx[8< o,r0xzCgNa4R|b UWk>oZ7s׽{g>5AQqq=v b,`>ox{d2pc:;*Պ7͸۪b|/uA\l*W4SmmUGIkP[3Zی%s;spz7 bsc3atbt|Nw!Xe<%hJeESũ4jn!u `UnvQgpE,T~!Kvp1L.Tn.Uoy>ծNx DI7k/l;˞i}tNS߶:oX@.r`0Ϝ)$I?I qv;gfp = KMA,xfM30)X,sÀcqwTRfI# w֓D1x f.͜\=_TU9]1tz BbO`$Kg^rd$Ű _A E   zV~^ոx0;;RKrjeð-63oqÖ!H {ș9\,aykG;k >$.gM7u8ΜyW./yu:7`t| IӸr2\Ud,d 0t69" z 4qR<0::}Jv 1~<Lnv, hG=6 {^Rɼ5ŀGǾD׉Ţx%0055'N`vvN PL-Bon"L4}͐fqyL(!Ar9lnfɔs{bmXT!20X"LMbPe>yvkvб5uC:30sy'(H?,^nn;W[2VW|"װeŸ9=2krWbmmss4JHAa`ss O􌣐;}3%0qnr[t#Nb"H ΔM=iT4r90V}m2n B eod .,'܂CEQz*T/^l6=< b휭b!'&zjKLK4tcnpcbLM6tl gJrYU4M$ ps7qw Z^tb0}(nSdY$SI EH$dze`{X]YA0ġCA{J&A0 Zibb|=ߴiȡ.iHLU6U  f{, Bk`0WΞoz ffAbkN0 2dYodaebccEHRTiŕ&HKK=AF4ll9X% ST38 S`$"a:f3$I깺/a U8].~ǫ04U"GvTS)3ݳ蛸BVo9 +׼o ;וX_;YgX`XP]ADf#psDX~ c- `KMӐI+0 FFjy!šf,pë_LNNB%hK.!ӌ -AXd &'{.A+:f:.U{?OkUG`;: Ө rA\+$ V+ffuo}q]8^~e+AD#Y$S)LLNͺzs3{0<ױYmI$\boSUxtvƊa&|}獟!A}b4߁-,//AD3~ v{`:Z7 ,gW/Ű=1`>Q)xF{a__ū,Bk [a_?K.! PA a-<`a 7yN`]٬+ uz62u0<Ʊt];Lre]B wқoXd* )DI؁ ujqM߳|%N_jY |X?ɤ˕``% ۡ@ VA.t0'͍XqhC>}5'z&\!1`-a]ic,&ﵧ]* &D0Ȃ `& 8~K?V?n*NHŒve?7q&~WggU_RsCMS^7bgݨVWn^:wrP)`#mc+gmd۫c6ҶW{bYɺQպNoĺo,x6^/cZ]dt=q|Oe<C,۵}ttמBZuLDRܗFmmf/淖0J Gv0-8ը(m Zn3Ml= viuL#egv]5̛mo8/o+&H(0 cWGc ma>oS[{/b>qNɇ XwxuB]Qrz=@kTU eS==2ARm$ևmS|vFo Z#ҭtoFʢ ) YilMYy zyn{:]#J`UV3´f5*ͨYKI|A RgB`{=V3Xήt0x D+8V!f 1w̃jo] %pq\,6Ō}'p+*`)2441#$bf3⯙)ޱ7+xnE5sL-A^ڨi]k'4M#n4!#Fq=׍n _Q֦2:t-ɩ8( »'~| 5V،?ARK wWw(AQ,y滇zRdٶQ F. B@R@?f ̝)W9 Rņz#4*ZzGw}ccMɪg0|mukiڮQ*~}SV[{'ZY)FW >8XL&ޅ_2RF(|8-\ͬm#oČ}k*/SHj^|fIe yѹr977`F0<2zlDDEXeu1HkxQU#팪U)<5E/ek[a^#a9蘦Y6]عS%vk?n vG-nOݽq09۷_,VrK#wN$q@m#x;͇.%/jj 7yNMƬ_?XZ5y~ :bgʟ!: @xk K1xC?`Da1Y>kDp*ސ7WGިdSΪs ^'mnqL bM>S&` %UJ)QYD-vaoMӨ:9 h7c5Qx8?3 cPKrR!ԓQla(p,ނrJcǯz066oX AH5駟ƣ>3g  "ɔF [5mQf IDAT}:hJכz}]e+^VjƱ)nU=DQ(p:p)(IzsҮ3v4~緛z34}ծ_KU"o5:W-5~n>7tN:sn`syC^|/,?7∪1o9M{pu DD"l(.j`dde?=|Wz[鱬e3ۿ+v˷guϏrZ 1! ^'| \UUK. /dY<>AQG{a5ov\QLu"n&U,jo}+wB$( UUK F+ fŚ=vѭݑo|5SJv >K;ۀ vohkw.pfےE+0 UU08̡21h6zU?TX'zfgXIhmLӄ,V ͆T<Ń>qZ @u"F(z}Jo3~I1ڮw*CvL5N4M?Μ9Ø0 Nl_bo 9NBrFOc)Tavxb$C>[I>PGvI&0y~@i|bc~ >vwP(Y8z=$EH c{}Hӻ:`"wj[¤7㸥^_ktD,v;r8z$tA,˥v+amk \N]Rf[J# Ts}۱G, `[va6Y;%9{J7tSi `xxcϧBCLӄn5o&/0 Xכ!A>sX43g;hxlD|kuJa1r9X,Һ]I WWO1==D"Q8O#i$P q-DT!ő3Hi 7`ZYpHvD'A %WSm^k?x^ &&vgNiA@"jC=/~^v#$ ?(z2eKKKXZZяF - 9N >0|a7a:B]šA@!0 @D[24.&&&aZgMii0 |v}ԶO=i?"!ΝN +⺑~'UھWSE~G ^z'$?rӸtnF]BQuf3 1᥷DUU$b1'28nLOϔ:AHD`&LWU,-^)>MUw˲\QHD bΕ+WDrvBl/VЌQמ\;!^olMӄ\ beO<9VZCX4JH###Zc#$N7i;{"egTn'}}om/I0^yh( A}{*,ַp7BhAJ#b4͆GS [}>/)a2Y/N~ﯔf6Gs^e3妊\6:h8LDU'3ߋzO<40X)4 0x>ד$IqtQ;s = h<+qPtO)C wCdfeVeUꎯYYw'wp]SRdBM`1K @E{{{ܺuk((KۻE*.&]Yn}|:y eY8Nm=Maxx4$ iQyfgVt7M0 hI`lР/6!=ݛ'͒[ ~_?DV؛zU}7ߝ7tc y3,IS7gc RJvnb{k6QԶƀѸ4h1ah9?y`ubC  :׽ul$:_vYl,Qa;"G7{q끪(899>(sl)Yc}}Zvka)mLeײ |B8KFJ1*,&Xi&( _XExeY^׈]%{wwMѻŸ,RsLycIY|phIӔxDN(0 r뱻{kg !d^RA7,3+!?HߧSϒЬJ,s_C}S.fZϕ1>ޠUuŭ3,0ׯG,Azr3jYXmͮ-lYXB5V}ڨZ^L}8`>GNo~oY0mRӷL_۶tY7w@=& 5\K[~ ʪyY8ſOܹibYF8gfkjye;ɕgi+eHsgmIV.*Pk*o\2[΢(5"gc7s7m{^ORk=!2,˚YgIfVڼmvf%6^7LkbnM=EQ̏gO0ml|3oܗgYUllz&D$It:EmyT'TWJQjYh}>ֳZ-,qy޳z/c8,L?s-WYy7&g AW߳|xN!syn ReIQh)z-)+ߋc4;]ۥ 5Y\Tl.yIpEmί*N? }0SU0 >ݗf}>qhht6e b9ώb6h(yctT[ mATM!"I8X@t:m*Z(J8{TUAYiy9NN&BLuEf* B\'=8A.-b4/h$IUDqJV "3e|o{.my:S|%{oBĢ C+d,H$QUEk gbyBSfssV=-q=Bؠu 6岬ιF}_ фpm&i[dqHZ*ڭ"j"5c0Y$@|K28Q*W_sr- OOa/x=&+J,_1ΉJ//k NخG+ |de;,+Z.q\͵u<6LT4taۢ24#N3ztCyhyNREE ȧJ1v{!avo;LG'X K6:d,+_R#Nwy1QHYUop]*鴻ɀ~=iq=ϿT<~rpãdlUUJ9swu]we WnʏJ5/$/Y1wvYmJUTeu^"[S{pڵh]*̽6h87ýϿ?X:>m_K ep]sʊ#O_TZ67(AfghQҊp2谱[m:5V _na!Ԃ\i{ iu:?pI2K\C IHVuȋz, /al =;mT)a8<Q diJnPAAIҊ8|wݍuVZ"{ܿ{3 /  p[vwv>nߥR9i9>yY]&ab;{O C Xu8'Jv!i |Dl[-66Ɠ4xA;wIBǏ1 )jN4e4a%n٠s^g2%XɢAɢf& #8*2\"m. ;lp}]gs(,(dB&n±$> :K3gV=mkK60$m$bcTEEN9E^EA^]PAC4xDpT`!nی1""GOYyg}w?<,o{t6F(;n" QB" RXlP2 6z~qtFom@!m<ˡ]XVI.5h^@ݮt #|8&b<[ɦt:]"'˳٪MFlSv!I2MUj^c,m ۩r.qpl ײm]()v8lt{=RLC<;dEow:^@hM ږ$Y![.Au,FYR r1[-z.2/=G͆ 6hA)Mas}T$-(#$bm}  ~P1diƲv= ,r^7m[`.hRx9llnM^TaHY)s6wv6x _~-k-vl;}VgncRi[HejX[gp4cPJ`VDA,Z g r!Y**_u0P9YgNg\L&3,yrj ÐxD$EqNzY㺴vC۝OhР! | , ,@& A |Z$F)8.Ԯp$,i C&E! J)T)Ng٠AC4j^8qhРAeL IDATe.r3VO^0d˗/)94.}hР! z@P&94 4hi@10:U^Pfɡ1hȋ/1Km>Am;u9 RENfEcL !lC#CRl 4h34bJ 1ϟ??Wʶm66X__EAĄ Ynz BؠFL3J f@4hР'CgeY!4RԵ*2 !lРAfIdʲg]Ysz)@kR!_SJyͤlp} Bg__Q':Wwť7:a_u/?ޢft[WTT:6X *WmZR,p $bo"]J]c),IU|.@"PFcY641uk۱BPZkp*e]`(UiLgvs I]tnʅnc'A,,QZ8iAg  PĘ:ш7Nq{QPN]"ضEU+j^uŶmV(u]EY1~/=[k}N[zV{pL٩}ߩf[}0(s{׽ޘ K7%$BeYF#cImǙNsg+Rfoj|9s^1)bf;o|y9i۲q\wmƣ*<(Kvl\EZRϟul8qKpWImɘ"9y3 ]z1m*+,!#4@qm4Ye]JRW-Jb{gq|tH!fsK(GEMKo8 T`nﰽOz`v Jk@z.r*LJ)j $-J(u.6| ݖ±%i \cxOsfm:-1FXfԅmM|% È(.-˪ ˶\s(J)&2@Je!ѪLW@Zzܺb(q\[-$*Hn=Hv?o0S\fs{+Jؽso7ͨ=+pm4bJiltZ&QJEhm^[Y֌ǣskNZY)1<'nwؠn)4I<)PVp:V^G:jUax4"Msuݢ=ϧ뱱g s&1Qeٜ.›\[x#n]rd<&IδyAam;?{}ʆ61[0Vg8 ?e'O99ptp ܹ{vx"MBk6ۛ]?8 ܹKBctؖ(58L0L^)L \狯fw߈²{3>KUOOQ@ރzƟןf0N"Soon0xyprEPv_|Kh`xBU@awwB! |4kJɐ/(;w_}KL>}>iVdY6;۷{k/SbaIA4P~g_ mY?)CHzoRf)Y^ d-dmmtG BwiwzpgAMBD1~Qrp<83>nǃ_ N8:>!%K3{>sf[~*0X]]4a˜R(':QT u4F雵iBdݭ.?GdƖbe闔m'Ƶ0CN#~QcFR)}^FxWAZ;G, q.Yng}iI_AFTU*Uqރ&ш8Dt]v:6`pq(/0ZqR`d뺗޿6h>hԽ"x}A-_ſ/PEt1lG SV{=^<_ 1ш>vU-!%}D389B[.kbٰX]TUAgqm*1n=Ѱ΃ǃ]٭u`ǣRT`Ʋ}o0^ݭmhy2'ܿ'xaa*M%j_xq81J1E&hOADoU˲~J$11t^QVyZԍ?2F!Y-C+\"ϓ8qu-{@QNl%r^I>$aornwh;XPUE4￧xO1Lo2x1)-\Ai2(lxid2$Oc NcKvq>q!zr]Ϟ2m4^A 'c r]|K {/& #JN7s) hR$"NS<'K2hB,`48њۏ~]4do8$Ҧj#MI?D.m#qʪ|D&q[?TY289*RBSFcƲ$YacK(I-kV3߫Qc>q8JNƤi9h<&lC*}z˲ɓ0B8.Q8(*:=߻QT'E&AMgNNPy* ?zD'pV_E?ey!Ms m̱{ HRpw^sa@J{ܪʒ ɒ^oJ){ !dk{ܱojW΢(%V"Rq\vvwY___Rt]68>:!GGp-p=Oqx . h>|xٲ=[^{j&5:Q=av0ҐmDQD4};3ZZzQҺpo%C>fU7V0~i[d JUOC&|lIPZ.h2~{7GS+ iAOW?>|u&i4goǦ*9>5^Շ(rc =5qr||c A/W$#?z4o!ݪ‹/s/={xOkE[zBu8ۖeq]<'INo[g2ڎSLc8>>^Ua8akkbeh6ze.#Gkw.woFڲ41c,s{ٹDW:"iaOZs٩fU+J[jj θ ̬&3c8/1b×NEޛ^5ZyB0f>_ޝHKmZLÄ͹[tf)0Uh7 a$ZJ={gnWݱ8YF339_;B"S9ACgKntXRrZ}DZmnm3(Kz\DR%]agg(y77.$~sk((|>G(>Gk˼>77 29kqwww_x߾Z|7KN\J0f+yeY π/q<|LTfmG HQ:1diE+hQI2x{8MTS4 |$ѳh7:{yF^6E1sȋ Ę8N̅(nG*2 c,'`1t:^ɳW{3[ߤ99>"/+llt"/R^52t7/IL~h|/h.I)I" sPZvon!@Zm*ʢı.vwȳ#\ק(2,ò$aKIes_˯Y|ۿxb;.w?HϑqNwߑٶ˯-T /;Iŋ{iQNoGJeDUd/,[w곇<'X7l3Z뛸&^'[%\x2Կ)Y )y7֚p2-c ve\u-sZZ p%RUuU091;gw5ƐqAmڗ.R9/ض,\]r Aa-la3 ĝReAEӧt6v{k}NbtBQdlvwf^1N5Gxa ^6:nɻ9 mc}}˽{E.6"p$L>Ƚp!}X! <ܫgԵ^Lunߺ''(Ĺ̪7BJ5diq-h~yh@eHa{- ~HTegt[m8uLK˷ N}k^[1bCQW ۶m{L,ec̰6hU}eɓ?-}g/xWTeYPTzV\drVnYjI;Mz{VgmZ#Ϭ?Q-.1kkֵ(/$`{.kPeܤ풧 YSO0leUvѦ`RL(f_G˲1h掳͝m^ZǤgJa6lFa 4i}P򡵡Ԋ*)"-{.$Sles ih t#SUA4%S8NpD]T8/KʲFW%tZ( JUtڨ"}TY0QMX40C&|? &sz~cۄ[ya` }!/r<_*?SǪlE Aץ鰱kYiB:P1Fl!("ڬM3:$qL ]<.b$%h1Ft!B*ceUI+r뚖eEX z08,V K 5ݿINgq&j_\ɲ6.Ēr +cnj'c,,˩lj^ZXS%97}!e{qJ100 &>R ӝNzkk$IxݖC8#gqhya! _UkkTyd8LFCZkLcɈ/ȓr>fAc:hYʄBg_$~̰, ˶Q8z^ٴ\{{LpN~Vμ>\E~/KZs;p\UU UkK)uRZ 'e)Y2mZ+BBؠEfe^PJ$c4U54ax+O4$8JP:'y?L?f:8ܕ22x9\[x{D5y׳DUx|UqrjF+b՗4K?2LwWTpmZa$0gZ)8"Nbٽ !lI* rVBsS6Ya.N^7Ox6_ ɯ'ߐ#tCxxqiYal]$$KQDQBO./VԄNNa>2 E6A%thqe8d٬5߲#?qkfao)}6wh Ϟf9mSdYaZCGP^Ef(]jO'@xń32[W.4KX3 ͢AA&)ǷS8ԌlXxw Y$/rTd 4HiCil:N-Îdwk3NN !nG!tAt8d8DRYeh$YFmF#LhƀtF EyNyoH{a!rLIi,+ " LCf9h7.JYhxB  2Y?%an19=~oGbL E WiƲ2dg}IzMyM:{YY|ZkZ1Qj6r">!a.# i4s]m؆7BnWh+mҲeXI_I/CZo`5:.A@4_q_7񃷵C+a?!h4APML&3=|7+ssޅa5nm~<:99Z 5Ygq(F/MTm]J'䅢7aJ`!-85 >'7j`G&#S Au~:eLx*ri4u, rkq3OѪ4[].8>;%H,#  ]._e9r/Z8Ш 8 r-s8BGR'("|/򗪌JZ& dF_;<lB\d%BfiE< \Ϧ|(ĴL ˲e^C {W~zS{*($s+ϟqjBEN+e1L5q+|!P Qf4,Co$yZ1TIn/Ź[k bd&_jYsx,z $R@񶐦I`<. V$I,$H9 |Z[ɽRRk1H(,s޽$oZjg$rHC2m,+7kȟ[Ee9'^hQHA-&̖SĔ\(\vjn)S"QzW"C^tBK8,j!$R fxLоОuڶbO)s.BSw"+T A2&4@4a/, l-YhRY;ꢗQI_xt QC_6^2_& a! ^),-OG(.뺕-R+M (|y\ E'^ik )Vb,_r-HuVOS&bQsMi8Fz㰳˓o.{avٔ^OӡV]9oyNܔRbj+p$u:5K8QJ8WޗRjY}{v^t:Y~$ {{t:E?ȗXQK:kkO$N{4(/UOE<ٹVXCݭcRA @)%~}_ +DAj9ul%7oi(&R^lAP,űA{_QotZdjccs!_(g۶Ѫ(DbI|s-^HE7$L.ڏȋgySײU-mr lLLXiT)YaBJ̳cK$Ah4# ܦ:!H $vT+s ²-3[1dZ#/r|X\^<έoLLo:涹sujjL&c& q|ki9ka.lIi!K¢փmjNh"/5̳RcRv*-›j2͘LDQx+^A z.ٜt{xۖ"rwB`YV}zKAݦ<׋:;X&^V SR)RA&o[w$~ TQٶI]k&J9.;;;GCӲoЬ~D^흇dGѢs4FJiHZ<Ք1OP̞[8/>c‹ ĔU+YR/BK9;;ܤhb&eٔ,6"-AKd[FR;0}+AͨS7HӰքH^). iq: R? (he΀A,+tl|>'/yjXQBdԭ0Jҝ9A!v~InzN+VaS3(-Qt:b}M"\aY蕻EAe9,OI2겻 -FÐL9nϛșy1Ҳq]4lm?Qlp#/>FiBD&NeElM4is2^ !zmA|># B4yQ-B`&e88mXĶmvvvg30$RLӺX4Y[_$ yE¹aXmb6ZNgy]ka7CWzخ#^VMGOE|w Ag8`mNKOY*qp3 ZG? B Xl"_g(nJR.F }O!A2m%Jb.0aL(I iwz/F!4eN ga2:;& mc"]%i9i&!YQ]0$BXE0/tNLe8( ^!y!i OuanmY~XƂR4I˲i6$IHhoAZZ4Qd2mܠPZ5t,ѩ$/Ad]* Iȉr;&IS ME[8uC]v͡٨QU&!Ze1 6iXT" R9 p2gOelQQ6APhA6c IDATVV2n^oIM)Ni |oıB "#H2&lZ@M3l2B%1Qh$ VOQ(EnWIBznu3_uEDbJIӡ,E<_ )2MRh4r jQB!mc6^oy_=zy$o0fEZ眄z{NvS(E_c?VM^zԢ{}ߊT %ͧQyhDB.=w]1qB5 RggI|:&s& YT:Glo6c:bJE+&qF4]dCCQVy!Q01ㅼ}Oyd4)=L#&YSgGi85 HUX䤽ƟKZIV_.+Ďc~q7y0bRDϓ<'CшYv+ϛNRXH0$I?iQUD1Ay)$hl2! <(\3a8:B֛N)4s/wWޭ)I2DegєipkJAͶ8N&yh<"}* D:9V)ILi]SX6-(=$Zpm$V!I |eh{p㐃(ɱM=%D<+Ɠ-p;ކ 0W,+$~)U$d8Eogo*BXwtX ja]|(CdY9.  r7I),AxY0k"$QAt!>c/PY&+uu;~Tttl<|I@.uOTB+.]U9w|^;> _孔??8Z)=5g *^%Y;gs4Q-~M}OxAMɣHo[a"*|8a1Bb Ҋ[nw%k~w6j_m5 JZ E.*oڄC^WW]yo :߁އJk˷0ˊ} 4}\lϋv+Sqˇ:zh !PB 0| {+R7o ^]qCP"*TPE *Tp{2UUPw4\tuݿ/ܩmϾߩΡ{0h-jƷXB *3\NKg5[)UVaאI=rFq5BMNjDw@$zwUO+a *TPׅ}F܅*|P *TPB ޖVPÀB *TP"E &*a *TP]%.s VP *TxwB/+4^8ʓIӢjʘ( B[-?ɲ BJ:A@^R2 qZz/^`PꕽgRBTvb $^W &֚*{BV=%?w] a'39;bk~G28<9a磏˜_|}^ɧ`|5s?,'Ӣj)A(ߙoG?fxvpz]@o :Bv7>W4$jAQV5Ja;.[ O 0L V(Fhp~bs:O4mPDQDF!{ ./~~Q&K%8:8?nkׄQFo}~ҳrx1y)Ikj29ATH 1gBfHVϱ9^*]q46~IcZMFO>6?YqCo}Thalt-fe::1yu<% C#-'!ɔڀf>y vmcd>?drv_?/l~ğ|F~.g_<`ѧO~L4}Zyy1Ly΃MC ˒Ysi5Xkg .h#}J2z4 ~D_OO?# O86O~+f~Jn|Ne֏~â@M'?~g}VM!*rmH`y2*  (ԗ(MݡnW=xccYZxߦn燴.};egg˰y7OnO1 BOv<;`H!7|ğ?߲۟G& ?w_Xz'_04%Y1oǿLOO6=~= Klk ?i0͂σ+TpOBcn"ox3zK:۶1MBd1-a#5Ad<$)ϟ=hM;ŨmDd鸬moi0MaHDAlsFU=vvM3LMx ʆnONBm䌧ΆHi a`Z&ipna Ã}8fiY8 [({Q$ĉfЫ$ EQy *T>ߖa}VU+wN4Mvvw, Y!-\yE+|P?1 l4fg N럅Ys.VKY5:u8Iӌ𝑦G6Q4L)f3\SPqrʰ)qd _~!-,M9gd]EgG욃) +gſ?gM(hTNCBo)5Z=Fqۏ?3MD!tG$qyK7_o|@g1l!#8M4 "N YnB|W`:c5 rWV9|4 |sǧ_;H-y3Mhl˲1f6q>i^74JKÓ#, |]r8I,=}c&u.2"ǐnZ~BJeBa4KaDƶkϳ,# <0LbcfRA@H)qul~,#Iv+U 8lR|RN)w0h+EQHhqj=4. iͦh]^Z)΃VMCR n]}@ c<CJ)E5 NAwaIL,kH)5B7K11QJc&/4e7+'ٲH* aR@k*y3$ 򦜞MD|.af7REaA9TQ dc(PJ@"DJ˰dd@vR ](gx1Zc5KqxR u&#<hLcBI/V/CO>!,d0`gwiyW_}Eee3  CP(8;=%QZ3N9:>"_ܓ֚㰻K|}DQQ-ft4$k-۝eOc&vŵÐÃڝ6fk1LV֑vjxޜFBNOQ^hѣ^"TrQʾ9 kkH[!N͡. b]E$IO^O$2F!'GH)D ,b}}4Hpn~IJI`>3MWal0Zs|tt:^otєl;;/+8_J5~FjEZ" 9͐er;Gf6>`]EAuByeQ7V+SJr FA[s7L8=9u]5L f)'>||NJ"G:eg9Ʉti 8CFC&1zfU ^v|2՛MZMJ)v\濩{w! NCD8Ow(j5S@KDB 1 ^& [+Ee ippOKBxu_xߝPR!ש#,ˢh0N}IːnjFY5ó3!EQPo4LW%4B&m}:nx|{.anwN&A@'28hb%]j4l.<'GHCh4Y[[vBDYDQD^9.oJՐR PJMU]L0oSx[4 2Y9;mЗsw~:Z]WO5l,hiYH24ieeH!PZb4"&qu J'$I R c @ie)Yc6aHVUQ+TP›hU)߇B(+id2^}WVshZGGKH1G}Z ! ijs=NON0MZFQ#|ߧn_&LYjWHwe42h440}R:ƌGClƶl6?{ocIfǖk-#{ԋ(@$j0I$$Hh!G3\cfȌ-+3{]w;}9֚7ꪢ(փ#B!9Z $> ZM*JZˬP H},Ȳ 1MT0'l6kL'gHn! ai0]^y鞣ʏ'5nz=zx/ImRF/Nj![ь dwwoϟsxpTJ?gm IDATWI[^.mtfk8a\$x[u|~f>1!?]糭-`XxEg~^?#w o KtS{Sa{<{'~ۉʹfZݻ! :YFo~ܥڳٽE)b1g~rҊ!J*F)iۻpa1Zk D*-', .1aF/~ﲀ?a[3yĝ`08S̼ qc: }rO QDYLSk~q& ժj g<_Kܻ$IO )[[ᅚhx&j>I283`:yyFxŜ,Ͱ $BdpA5pBEs24MYVg}Fw:} dag`0(kvi`# b)y)VJkW?xt'~E|B_W;{wi(MSSl c%Nju7wW^/9/}|[pʹd8" '{/wt;$8x4`>#$8xc-$!۳ YefeA<W<{H?!Qp8!yiTc RyGXX]<yxaAA`4p|r1UY'vI)+!Rdq0*bE<y{@ICqE?|d0  %? }ŹIM`t:rj4_Jn"⧂' $R)ţGf|Wȍs,:LϢ`x68}e;lo\ۧ{{wn'aw{w ֜!:؝10/?@k'ɵ2m1m]#d<0O!TJqKmG ϾMO{Qr8b<JKaK+=K1Ñdw{ddI -_}j9|?dk2cqpsgA(CV's<9],|bf# < ~A2mm?Y$<)#0O:)rSR60F[xGoB~Iצx8C'&y0_^ghAHlg0 cS8O)tc񣘇|0 Ʉ ɓox„eT^kD MpƠ"PESkN䪊rNNkOlyoJ<":pH M'e<9?'_eXA&w=9|{ky{}޽yMpr|D]H}Pȑ:ӑㄝH`OO't\ 9q)|Ww mOw9w>PB'B!a_չs}e+ˊ24PUe%ĥitM =a-y#aBX֛ $jT4UM]5~*Mɲ(nLU- Oi8>>iXTu.5`tP9ϟ>CXZ84xJ2OVCtC :|)H7kl|mjclǬ7Gn8²^ZMy{?{v7B > g{$ח,}RWFhMŷD|X~p){`]g~vf{.\vuz_swY W1j_ ^n0!?/ ՛$W}/~ ~^9[1!Bl[2Bњ>UY"GxԵF)E5fFt]QŻAq[H/$|Fyεw\[nM"$k&ϣiLi@IIG4ujn빔d245ZVPX(D8Ku #ohhOItc%ESխHDju݃JtJġGEsgz;ٟggHߥ~4й?oCީ}ߤ{vn7r|{nnC4^N>sY_gTi=Bς:ѣNjA{ 0F%gj#Y֢DVX|>Z )6¾ܫ{T}=%]45Ȼ(fohL_Ѧw7Ml+o{/yÏSkG=!MfRHZ3dݽ)/>e˜6=YC&p9G' ݻ/i ]<~jx0޽{غM7ɋǏG%sr7K e=zBأǏw`0*etqrM&<|5qP <|xKjCcotA4`wʽGPe)u$!q7OKΤ}/~ɗǨxGK>{|6YG#zSo_=!'l`Π9 lkG?Eu U0F8MH!fXs!!UU3LNm=$IL]ר `wo|`IYWah<$+J@ѣG@ /SJڣGO{8un,h@g{C<)ɳR[ C#U=8yBDq X- t?@ c\ww=ŋ)hH2cMRݣGQzG!!,e@ъ^*tKnF}>{|YN"z<#oKO^VFg誢,+ں<]!5OtAY̗+T$0ɳ5ujPƴGϟ?2ջ]ѣGO\:B,eZ +:k>SmͶ%>~?k/n7o^77}!j}-|WpUG{|Ϋe~txPy;|gGRʂ*p3uj`5|uUrpxepfx ѣ{Xޖ@f=z'=~ʋWdro,~Oշ~"ѣG&r6τ =z`2"xJeHRVZUj q:jZV]Sk}R $Ah!BJ(BW-|3O,+G j4bI1oQ!,McgXWXcG s(=k~FR865ycBH09dI֫YQZ80$ M10u@`lCQX<( 0fZQsQl6ꚬ(F$b Bޢ[)eaCy4MѺF(pR]J]6o~.Gw hO{ a=z`0/uM'98xl8|o٤-ٿo<)Kl/_g$I.XmrIB(^W_rx&)b9:<.+,kI[BwpogJ^gj#b}kR($ɀ;wpF)MEOH1uLGptوlug )IFc=|@`~ j\PP~x2",Xo6גhM}&-ۣњt=gɘ'ֆ F}!'/ h'ۻ{a1?I芲ԄA|#sgQ<ڽOZ:23 }kƣ* Sk^$bJ3#*kȫtPRī.]=zBأG?O 7YΝFa׏dOrtrBXZY-,Kt),Hꢠ*<5 f81YSsҭ+ ‹'IKïO=f{+a:vkX͏d IDAT׳UeƷ~E2cy4`(+jm ′*o5Vq$0U |[χ20|8 ph ܞ9͊oWg8ZZ)erݦ9YL"%++r` X5O9>PTYఆ!_SH!Jzi4E1kkɳL$8:9L>C*\ё,lrGGGTUCD>z&KY7)p<Ϩ@Z˧O8٥JdXP6֬V vfS|^"j(aS9:Y%Q0*LSTM7]bv;C] do^ߣǏ;9x_wM%OSۿއRmΟP8wLrܯbt^ͯItݐg)u(aY,W6]Xo~5}Ť72:X$QQm:rWF7N=%}5U]cEJDuFKU JqYJ+JUzEnƸ_hҴ9䘦iLsO-pyIYUcpm}Mtq8|Yʋ5uUQV;YC(rZ yQ`eXE!MSgy7gLQd<+i(kr~LUc#B"G×,OYv},3?]X' / >{P #KSOଡ'TEF5O FLL6m R)C5eɏ5MzqL9M^BsPUד4CkMgᴝToyUa6M``UUwdc,ȯ%uRݴ_nԥj9g)"߾i~/u]+ץb>(4@+Nڣ8wKHf;wD)ǃ C#b0_n{>:_s*#/K|?V,)1N v$gOG=l2*sR*wsps\<8e~D&jx۾dIFmm @ A5R)4AyGU鳔!"CTUu!%AvVuGMc)\RxAaB4lKZeI ]P<]PZD mlhRG4oTa`mC]뷚*'"(ڈhw]`Ay ksiSH)q"˜(!nu\yRuuk'gtc8)d4;=qxQec}=~p_n>䗼|Z;rxx{`/ '`ĽGRg􇆔t~9zNU?2 l6}T{  \SZoc.3~`HUG)9G.})ڨ*zB8n5%[/9ϱB2؝M9FW( 5GXsUlo2&p|2G ɤO5 gXc289>dm1n {{{(騵!bV#18!g*1}=GsLypeA0bf4HQT5 om٣NXg5g9gط#-~i/: ܻ(i{ߣk[( 6QGˎ ]{ mqݽҡ米{d a0sAHht]la*JZ1u3ڬkM$A ʺdZR6jo1o# 4 |DpeB!˖JJ2MT>q5Ёb8GYd8<630 $ ֬)b0ɧ1 봸ł"C*>z5B(FÐ Ð'_A/`0b:b4Ym>3m5f~2Gkݵs,i,loo̦SoצXp:c4 lS0N C0\ڈ^C4^5hϑCۮ~Ea2LDaԦڝ6Y,|F!Q1MH&5BN]#~A0iPkA ^( Z1tx2By~H!фpx0 I1dʝ]fRj tCcǦbPWc()ZV 4XGTA68Ib|$J8Z6d:F~ A$f8xAӚاk֛ ښ$ AaѧM(%ye{{;{MX[f4eلϴ㫯>BHWK #5 dLW5to91X/!mMQWktIiS=O [.:6$m2{IC)kH͚GYk0ď<& 8V%H=1BÈdB$Ւ,(]@ܚ %RI<'/*t)/LDY" B;S8IJ5U0*Kr_f)E>늺,I7+6% ]}?#5ru;Қt!pBbaY2=h{hD@I .s }&M2[Sk}yiVpkHtq|tLTuMhZҬ$6ܩR#pB uZ0?cZKXӐW Ӱ KQT80MfBWy) QatEQ,$]|Igci!3EpGWefs$eY"Y'R(B^.0e)*٪Z:Ӻ*x)cjyMyzuUpt*vưYYii Պ(k-֬ $UU>,(%߬WbKK\\TEɳ' B>e]51F?TyIZY/Nɲpו淿5'جSZ6a@USDm6VOa?c.Q9s՗Vl{ׯۿg?hܾ_XcmW,u?e3g(V9сR"1'g !PBhY{j,ް8MqU< 8URl[}(x3I޾FNp:ŹnzROӖik5靊'©jB`&SRb9=x z,USN!smx5cvQ5js2+Kt]lM_qM>+hOB{u/99=WѝmƧ)RJiZI>Xk.!^ pkݚ̟Odw-9RvۺjC>{o{|;w9|߯wXP{\|]оa_sk~!?O'YagX< AXc^ y8q|0L}yCy~n#vrM -M]vi ~ v,tB%N/-B"{gxF-Ԉ_vSXc.ʜ%F U4+9g|@W c:%\9~c^2=ovyEX!Wl!sFQ;~9#J)Li{UN{FO{|􄰝d7^; k.w&O^ !y&?QݻwɷOޓF<mxyY}h@ ^6miu﷼R%aTtH1LHgXWTCQP<6%YyyZA8T4MEbV%Q0lEL!2 " I%P8ʺ|LӠRb~VG+D* a{yq{:G ޞQlV̗k,T> Zs]!b<>Պ|KZEZCL&(%XTFy~+(xm0d\a# GYA@U;<89>f[fXYHFmt:0uζ8>95#+gKczbNkx/^P5ٌ8ZSUA\J߇hz a?8+e)f {ADI`0̈Ր/{BH1|Ha8`I3~㪜4P7ѐ7M+$sZ78v^t0uE9L;2F<3vb<' !;1iHC!H#޻%G/I7)xA{$Qu wc27$I~fݹ3YY]@ "hV#@O$]]Krr2HɌJ?@ HvٱΙN[kIxdEcRlE~8K=<#g"3גK?WC!l».B%1y'+bkQ )d+t 3u/89>D m͟"m_Y0¦BռhzUVm΄XGS$qV5 ]5|K=Ydxńk*l, jY|.*s"ڦٷ R|?ې1ڗ0JbhuLm=f$Rm5 k:td?~U﹭gc}ߊez-=miAavӘKߣYͭ~i a9Lm~uV{}[9 c4< w_K'*:x+gﯛ y%6̵?)ynZ=}`"9'n IDAT~B hMݠpH,Hz9==Lh=axA.TƴheY>PrQ7h//6si\_bSߛ<@pn (5ﶍ]ʳ6ئA@5nk,RZvn~ ;6!ooگ'WhWscƔuUQUWےЏݠU@KPJaZlo=/kvkkHRjMۀQF/}EYw #tUP\U˸c"BjZLc>Д"+p NIC_6:B}zd{5/_Ha,uU1o93fQ/~.e|:BŲ(T8h#~|,C  CeYJln`S"建~\egΔBoFx;xV[[r帱y34uNN99>H d{%IP朼oln5Qg#^/x.REHO0PVs|tBe%-uIYllnFZNOR1oW_S(ZmB*[;|o9)U bs='Kbt]JrFrS8=1l ]k r9zUωyr'a{eV3aw #( G){Cxdk1ke7+[ьlY<-ln)BƓFkS%B 2cX'yn7x-q׶w v~hC0D ь66J"OfTFw|6h VcE9>Jb1GztXNm}'KgMڊɭ_N =K=#gv|fZ'D*Aiq"kDIr<6X,iki(,ݚ C&28(q+~Rխv4&I"f)Mc zG}PU9Q=MY4qLDo4fk< vl)UX*ƣ '/SE2J)J uɛQ)pdAllp*V1=?Dm(4 XhcA/(2VyF-jxchtU\x3619Aos鍆llLhL q_kX柔 ލ><x':ӡCG;tY`9=Ӕpm=c a@-:K#|7aI2R NɳAi4UiΕ  .mʧG+OCϛ\_pmz{=aūs\coo6=[-WԦa8%z1Z\UIf̭ݕ뱱xcf6=z<4Ґ5y锪* M3gu&I B\/њ,4M5gi UQ8P6 tUKDz\Եyk4!mI>yj@, BJhp( uYZ.BZ(I^i8f>_2%Yq.G`?&FWZUԒ&q[,6'qP0?3?'Yjg]6l0?9LVYJUp|ejD)8^a&N'1-4\tYy],EbjAniLCEZcTjk88:')QdYFEQyFc k$+ TuI%%V@D&T%/_ɡCGKcbɒ/^P)ٕ"##-smŵc5Wʡ34s(_ͤ io(g՜?៱M}?F׼y"ϰ 8ɉ15y^b TeA<_P *C v~0>=ku:s>xڇ^O!|L?!]HAHd<kBb~AC'.IC$agqg)$f7w}9.2gG)R\F6X0yq !쭞ѪarerMFw5}q)g(Tmr{ߟDJUU7mv}1.+hsWeӿ6A{>g>>v=^wn')7l[c{v?Z{ޱgDr '$NSv|7)t {1Uw! F|WRgz{_ouw}2~Dr2zθ`]ahCұf}MJ^G)UT.񘦮(/)5#q$s=tU2_,6=6[Q5Պ4/n &bjMЧ*SP9'''Bjlm륨)$ucrؤ,3$T-OZәFA(%#OOɊ E0Utn BIK^Gf Mx>;;;)W ~VNAJ`4yN(a) [% OWIeYyai: *Ca 1| ű`|w{krgw2[,2$~orzDUC(>BHn?dսpujI%iS>k@ء,oA5|Ĵ69뱽6Cr|1l=y^C_o{8 {}dIY,5w<~JY'FB2 1u6Uq4[0!&Ð ao0d5 u( sijM' \~{d O/9Wmx!/ב@xrA󺸕ukUf 쳳x2\EL66yJJ7BSY-THHp_kʜτVi219寞rzt6(P#${+g ӧH))5RJǡ(M^}vCvhMk(<}歉 ƛ۸4$Ag+!R)XpQS۶kxT6篟%mtpkM朕r] ޚu[ EZh~+&#QLY,6 (MJ! {k >)m뺦i,硔67'AQfNgl~1 As]! <2 /3 8Q ]8'!~~sBh8|F1,pT6<˨Md>gC 񲜺.fG{$&=H+\\4jB/eA{|)Ҩ>AullcjCV!emɓ=Re‡JX,puϣgst嫉x v>-yY){wI|AZRKY֤y(qZtmXI*]K8zs NGAE+/ChY) B1c^fZ꺢( B ۪KYy JIZݮMC$I(]4ut\F~cg{%)j 4UњX\j5ynZKD2#8c{'D mV4>aM1(Ҝ,/R/5!2~ |#)G KgUֵF  $4 EZ(C\G{sfk rӬw<'KrUH* r֫PWDQ*8x h});K'YZ!TUf mjm!6oSءCv+2Jx6).)LV #OFu1ZYY\/4AKVTt&|?!I|\Gs(m0)p~mnY-io<K?^8.#IݐHR\ϧ+۴!W4I̧ eqUq k)hl#Vp2=jZ#hBM4#tE'ETyFAg%&פ) n.QaV Q1-ƼkyR(U SUyr]dūW-J&KV=m'4Zb!^ﱺ8O?-g|'H)T, ʲ"j$ސRW׊tP\@\DO#ё:BءÃˋiޛl,%Om5硗F7E]^iekX?Mjn&qנ iֺⲇ-׷uU1bd)Jh#Z.0ZcH!ϟGB,c1k} ص"m$p\iyy%Rs,R^l]_h9vJRgQI1L9;G$M8yلo2طhG;ta]=1</b/}~7A}A|W;aj^u}iHkχm1lcmI.#2d[gد-roa#^g{?{A1i~zRc$BHAc̵vIR*Z_\kzYcp֤;t«~SQ?_wy{|-PiWJA waɷ/g0%mDlH\DnZjFn,4\x!^jk[[y&,28I~0uIYVA@cP7aGԵռ:.FDŽ^:mZVYO/)4nYw&p8@ }#?h?OںƂc YV {QV} h8%y89EnAUA ]EJKUUT=ȏX#݀ɘ<֖&_̗seѳM19H~Wޕ'[7ӱ >Du{|nZKev\>Sϻ.BءC_& ڴzMv?O(@ا4 c%Rlm[~qJ9<}'o)ۑ!ф|%Ue%[`5` ?='yK|xۦ)V5XC?OVz>IϿyzy0d1_:o!+qs֞ A8o'lq_:`~7"iV" g3a~P1$g3B^0l;/~X_K89"VDiNca2=Mc#+{LFV>?◚FW jAzۅ.Vb5\;tkGG;tCi hfnZ#5;3_ nW۽lzQDť?2٘/_'ds Mޭ akh_cm z()k$~ ]HcA"KGO)*y>Mvdє Ss?G)Q6!񘲮lln1H?\֚ۤG9TG P#vvwf01/e;!d0Kxx8svX%OIN_р$Nlnl2 *X)YArRAo8fc{uA9EAG9`89m~ُr=ٺ/ {(ב:BءCgS,YVCpKH}u10Z?L}i-[,K8><ȪX&[}.*HZ0UJ ]ipfEM][׮*^p4ğov]UP1%F48[ẊTī%^CMkqomCkv۴{c%Aชx>A"CeH/y "67=a0Q.dgO{ʲB)؞ ?c<,ʈ%}|uqQd#:tC~~L,m۬ .@gB wﱻV_C,khﱋUURUhhS]n}Frdb {=b]/q6_B@c̻FmZ[V߂ݮonS8RBHX@Ik |kA)f]:K/ j'jyo)P6=[8J!ek#D AUWJ)X(5mm`E yF!Pl,hFߺ~UٱCQVx6ۭ2v3?)l :t#7y|gμ{S[s'=[vDf[r[ Vb*ʺ'~?~˿W'Nc7󿡘K1?ۜolQO>ś{?AD,+HGA8dgk^h_WXk) <}O2[%i$OH4/hSpl0\+iUFouY\ZWG?a23?=d:ƃq!0@Uђ㓷-{!{O]RG4M繭莮QJa^cgk OO1x֘)&upxx|?[rcRveo[wǦ>} Q}C?mlO>xׂTW?dɝ)"~oΌ@zyBkӆ `9xI9? !RcڦN">[5 ڠ2 zĦ!$4=hxvTxd16;k2h! 0MU&"5%VKm̙-48.7ޤ %uv?{N(.vZ,6z!E^?lQ/ O5ɐlo)H&шF|*].~3dgg"Ka)hՆ!ǧ6z_B<`{0Q qbk#[͹=wӴQp0uU}iQ1oppݭ1i(0G'T x^uopɆ`:=%>NH`ײ\͉~Q5mnW_F('<ۧ ~H%UE4ưey /_RVpēag~2@)((!޸j3Egx>:Bg;Y߿GxEZf)-ȳbI^UeƟ-տ/? _ŷ?DWi ?!R<5咞xKDʡY^CZa(kU(7`0Lrd р0u.7n,#{0gf h@o꭪r_rcxYUY2k~sF7~ c-OI$ cX&y f &52k*iG!P2{R} ur4,JE4EuKir]DiQ }iqx#9>.^$CZ2mw]&47h׷OG Ŏ}"~ !Y9hiϔnrW0ϸ{uh#m9[b F‘5?3g-s?'? wu]$엟!_@-ZqBn`ng"T4M!N8M+ &MbfZ9HPQyJ(I*[i*Y!DUOaϏ=op enswk^ޭN7:4gv~7cuv F*%^eɭ W_խdrrjkyueX=٘???Gz?ӟ=$0ؘ"O#z>2 =c3I*!ψYzkMΜ>Mgs WPR=15&˘8I:yDdtֽ1s$5ǢTu)aoL'!K+GG|AT)<.{E.bFX/߄Ttq,(Jthei974ekn^5]Ѩd20t\%I2jU\@,}aBQ2J!K"(Ʊ$EEUf 7N ME`pYLD[I~GCREUR/QΜj7Ʊ-vM1^QU':^K?LO`h*V 4 l ct$|6M1&&BVmWPv=4ULLMbkk&SSYfs+SQJ]M)J(۲L-\D^RGo$;C[#^%}3O0e 5˗vswv:?s:{׮? /??CJSiF炜 f&Zhaf0;3Kgc<ԘC&ǎ.=?סe mRX^\&uZYz}$ . CWLƴ&SUl"M|e(u@Phq69f(H{ 4CG &(d'*WG(a} p}K%rLqK 3hym# KAjLubA<{¼OORUJ&J2&E,_f;Oj}FFLMM!d&4 cPPEŗ^da9D4 j q*$iiq9'p{m~8NFW% KN, Y[8aٜ:w.ȕ29uXc8U !UiSy.ax.Nw+vdOx2rVty !}V܊NQ =Mxx͇3c7AÒ{t2 7GY]Ϝ<W.eUo噧`e5_}ʥ?v(izHOaWA5CG ) :2 8a̞8MdYn6PkHH4E~LFbG:CwaD#Gհt ,F3LlCchT{VǙBc:S8`!wPQU ôPu J'OqbvҘ\Q@fr㜽4,-1MuD(:a`82 i,ǣK("F6cj*Y!9yXP=AieneEũql4uNZ'u{HDRqa^C?8dGV*ZTnzAy -jAUKNY:! Evƍ9qD!RJT!"TݠZhZAy^)!Nҽ覉kDa@DJBC:~}d.L?+lPj:J, H$DA^" e2Q@mE1jj̱Zz}TU:*ZUqL. OS<%NRTE0ND.ɵv-sIÐ$I(8p{.&Ѕ0,r@$ }z=z!G硃:v{ldI@X՘dmu'XY^"Mffgi4ƙ=~Օe66֙fmu0 ZmoWn>)^"?4wlȇ />|YY^q*\|yg?O06kyAoo?<;w->Op;DZ ?os_5~Wݎ兹9~WSl |>k^ڱ˗r/wsOǹ_ߡnFF(X]^dCH n BQе9$ƶm}"{Bf=z, (=BYg.=O7<,c}mM͉,NC NhaW04AAs.\3REEiUa , Vz$A4, &ZkiE#}8/p{<2t%J%Q['':&Q",_!MR (s5tUlwK쑱̗ӈ,$)a>aL(U%꺆E1c#W^y$ 0`ei~ˤYo}47 }0q߾ܫ+0OdeiOwݷ>~l5?4'ӏ=Ɠ_"O?-@3-|f_yO~/A>OrKη{xDZeyiO|>O=yubKˋ|~`cm^&4l;3yEI ˝$ȚYsH _,KY[].FMNd׽=mq?)t `GCjiʦJ6\愥Wc%r$';0/Y-Nk~Z=<(BAr ^euzrd ']Hhʇn@ ' 4acmA^5uuZm\$QXH Jzl qC$H!(r)Cyw^OB{8mG> ss )eF %ͲZ:󋋅G:/crrڇX8ܫ<bQz|6: @x9>{x#T*Ωgyw//uxgy ŗ^N~=eY :ǿwȣoR:gΞ{o.|wpF8y4399wzqvs[7jn;w[5=W $)%vT!UİGl h~먪Pݟ)ؖo^ r+97PB) VD!PP#n|k˹^PqyI677v\^e[/GaYk+ҿ7ܧ|ռjF} ƴ-Lk:Yh$J.a395MH4IMp k+RDA߽dBJ&)ޠ ,j\eT)!!:`f8ȘNelAxq$jDq=F BӗmbqUp~S,Gf7t,J&"<>NLӢRqfW5ze]mLBQJ &Lt Ux6G5?(8i#[$1}̺*JMn$PTj:!SHU8$CtDU(jT5 M!YQ5p>ٶg ڒiZހP(ʖXUULFSWUjJTaa5oĠ8#0q86;*<28fIb&Ǐs>M?$]kmp0~ 9zG?y߹~WQӍbQc&qȄL*Ls啋h<}֚F^F&^(IȲT pTK#(4rYȗI^ܞT5?W晚!t\i9NdW}#"lPNt(rMmo3^mrpzƧq ŗ/ ɰǎ:re(EPks sWnٌ7#sPA$A.S*Bo+TL&1BUBa1ɹsM'iˮPYj󯻟!x饗huTyȢ>/t7(jmX$  |/($dByeUjU66V¸4cLƱqV.= "6^ՀP07;{<k|Z>{+K|Xv k~'Oz~2>W.ᨍz3΀]CG,+K>sZuSy ׿{y`6AO˳92=,oo(y#w,KKON>sgVtc b߼Ϩ=ͩQX$YJ}lgϡj:Ih GbFنc<#Eu|#"cq"zܵi d`/ferP W`C*jYBTS)ej:bc9menP;bUpln Ͳl Uk5TmšLLM159 ImC,MI6Uי%"ͤZ1K`a +kwu Ǧ&ٶ6B`j!Il#Sarz)[DIКi9-aSx1& ]erb$TLOR*P}P*c #kضFPk415=Is}]' \G)NƙӧhRoy.9S8 eY^f& FiTnΚQқi-o:GVnwl!uxH'd{pTЙ2_-E|;{vg(_w~7xt$IB&477xK_;ǘr8rcCy;` } ;G$Ib$a}}3_PN}:~j>}E7mM\]!>ol iQب]I8=IRAQ^xΩ$E4Ƕ1MrPd%^|uv}adY?c[X%0/>`PoYe;$Yw^X@UܞۿJ i!SԨթիXA%\fYz]a&z]4RbCEiǩ( a125(D 6MlB9Q1LBtTM [Q<̃,JAj^ UU!Ib(R"DaZ9F^E%]alA@SU8!C4ݤh`&aXFCN>B~6у`a:4#uSg~o~W?~#>';|7_ =on"oeue/~|~HC姟?m{#onooK/y#汏|m_,-/|~VE"5*DZ JE&ግcE1 NOԏQ4p}4Jn` O/AMB}\g4di=Ev1DFf:ߧO49PցWnY/u(+(D÷YmLB@9Kc671I>nBg4 @QɈӴ>`"μ3Inn.|Ƽ` J6sY_^ohy. ]e 7ae[nյ5S&I3lJ%^2d dyq AYݺ$Y]@ 0<MQ2za* M"VWPvSa X#t<*Y*Vfd#›a̞8"31L̘;{7;}#2w?|{ ܯ;G]~ )]^O<($>0o~[:w^z)3yͼ篾q~C?w̧>SO$^G(iFDk Q4\fInh4(I9n|at0ssWPA$;z~}ܰEB.l_d<# G+x>ld#h۱QAGq:jC4EQxGiZ[c|ȏŘPrܒ>%yE)ev!70 6 )* !@7 ⃅* `qi]7PUeU-3M2.r!e3{8 $TrD $M1Lud녮i8!9T4d.q enp}?6uqYG0%؊VucOШ:l< i;:yKWYZZs1mcǎSڄaaYD~EDR9~ aa&nlSNcssΞA&>ss qLO`갼B2 ,ű-gpTIӤPOrs$n )fP5ͲI>~@QC-Ν-O .}I3#4ld }݊CkNl{WTv+k{={}w~XϮEFU@Cao~ʶe I(* ԆW BA׊[((7G($e$k*"Jiݫ'v0 M D-.$I춑ʨ4GA HIаQ $j4q`h(i*j: (,ILM+gnޫi@AbiRUPU|sT",VsdRb6,Bc?B3Qtm݊f۵)O#w`p9w>G|O\)ny|}sQ!C8;St6X@!, ,WGo(BH쁬ǐ'M|sA >L)^z> rPkslz^k,DQzBűtq3͋7𶁥4i57>S*EcB=$$LqӜ>>1U6oHY>Iꪨ$.R 4w; awRuӘ^CDQ\m@0DH.%Wסߧ.aJP U$)P)G6"+ŷ{utd#{5tnF3#m)U/^"L4'5(!۶ vs8u4ame8 X(4]H3X$$e$q& Izu`DB%Av òȒ?lTJnaFB PC&!):*MI$ELk{,]BU\߃\}ˆ֦EhL#RpOىԏmo[=#SQGqHr4Mm' mL┸l,4I "O>S!Mb0#S4 CUU1u( Hc9(0Q&e. N/jqk:wɫsU(pֺRDpݎz?ehۍ=|}oLtNđld#@xfI45!~~;A[}Ν;K{crH L;Fg}oxC-&T%/_\/^x4^k&>6TJe|HY\X$ã;qr5gPR(E]f0(ISpӬQH}Eܳj1&Lji YB`b| ߥnߒP㌏!CUhnnb- ߚ0zs0- J;'L8AvOcbznw&Z6^i:ؖIEAln6IĶ&&&PAIi6Ccg]2WWÐubff{ŗ/h aT*Y.P804 :pI 'J*ӧ -Q2K &gx3קiOl-0!#\g+UMOLtU! $Mc:Ude6Z;63,Sg33Y /ir&s":vu 5[K @ IDATvcY^k bq, W] Y^yt`Yֹ*qq(S˿Ayc̍4 ] ?4jNFQc-\JܾKۅ4&3*_3gphR)Q* "i:aELӶVtM%ҭzO`((TľÙa lǡ>`tIJMUEUTKǴ Dac:e cYPEtllBcLD %v/]b&qadPqffghm=y2f15>]1cqG6m»6ͰZ)`uu G#B\02`yueExa4Maƭ|Y.ßSWϟRZ-Ixx$Q{H%'cd>;!Q!.$bmmNejf^װiBhL $J +Up->Qeǘi:  S88 mpö;L;-{Ş׿auY'Svk8N^^;k|/pi&G \{_| ,˦ZrgY]or)\fj<"ݞ?j!wҶ[uJ7 T)B>E #'; jN$veB; ى8f}eAxe".=T"D#^eD>Ij" l8q}۲Bm:+KxM67Z;3)Sڭ&Ir|<2IYY\n2Iaix.KS 2q]`0\fxW*!NHIɕKI%}"M sY[_% < tM`&c&f ΰL@}S8=VGQVyף]ie~^=a9/,/sGa2VZlٶSEċ(4/HjBd.%vAUUEU,^48{6(8XA~p QEQ8y.I!SAT$E4dy^(PnMI"s9ER ~LUVLV$sU Ft]#bTDSnOr@(,d$ɨO>7Dn7XWkw ʿWF7)Vb0e_g7>UNpfyJ -:V)]:B^bn.;1 %u(]jmTju,CBUיd1F,sW@9yciSQq E+4r8Feoi%'8{4Yh N |LDW&;H*z156#Ʋ,s/|2U]mؖ=Cz@MaDh#.,AW!-$ZHpn1j͐fwUU]>}xNkE QYN!Q9sRJE9>=U^jZ&Qb4MuTUg$T+&NbU4-U8IRI`%*s2^ː-B9Hb&痖z:,߾KC_ }o&o:yKwoSDADADHUS1M 2R0qpQ2[PE Ir_WQX: x{{H$&Nb8>1E1Q%ɑu !0Fi C)d*#LJt:}FFPl09Cּe(\; dIӔ$~4 zzVEgGpjވXfEQEE]QT,D0 b5L?iqLE2&Iz'1aG1i> 4UDG j:WTq]Tc2 T%DabYuVB"*u]DJaX%iv]bfE׉X?J)Y @852FpXO_iY3_nI'ȿ7'[[ܸq}QTsx<Ϡ< |d[dOdS{ԧU | 4MPF}; Z?gre3;R>Y eA1̅x`Q2vB>^-.$, vQӈAA-aH{,p4F78(13D%*"4q!cE RQi=.{[Dݽށ4M }p@kfscK c "lon8CC7 w&gXohxa =sҎI=NE`t!^'OH(nH $N(5ƶMaR5 >) Q$7dO"$R!0L%NGܿ&R*7I2^!qTTU%ȏT,簂BU9SI=L[\qs&_Aꟷ{.ABE jnפ!c&Ig&#.E=NOp^@XC2Ϙeb kagp H$1.x@<3c:ۛz($8ipO0ďB$!MS!qT3&.#\[E1mg dE%M#(FQ58zav|=MSǮCپyAf:MSƣ!;~b4! 3!}̈`8P8 s7< 2kt'4-`@S0 y.~ﳭ hJAB1RJ BEq"TE ) Y˲}4MQU@B:'cEɀResDe=pmz0x{Z,g$?ˣ$|? @8z|xQmf$x ii"R*(U"i)]\uZ;ş;?̈}o_Zw.Uga)( =Eيq좁D[N?t2y8M!N^蘏( Nz;Δ8)1I~O_ϟZ MS|ߟZ{F`& 7=IL۳5kSY{2ALSa&kS}C(̒ pR)%]uÐZF,DP^( q)R08N9,&ҊkgAsTG!VU^? O}Q@k:0ivTL;>D# Uf:IsB*\½^@gFA+WOuOX_ˈ[6'B=~(iʃҜ L&BԪ|嚕w!Y<_Ap?%7 Feގ}kXU#.ҩ*Dat1EE5(zvh2%"ĥQhҟBl@44U!c΢/I4Pɨ; <`&qת,̲-8"bTU~a+d*Xzp'YN:Z7ǃ39w³]8R9v5l {PdN1IM%MgZ/ уh8dwgo|Dyo|/͍rrݹ~N|.wɸpnqa@#]W !$QJ7o xx ?&_$Ns.U26Ke:dq}NNlc 9 Vˏ;QYf{+K>O6iQˋ 67!JAbyq8 QuC<~noXO2biv)IRU.\TUcUuuRXST+U:vgX? •kװ4CòX^^^i8#13?@^ |T]g{fkׯS5=O|fVܺu$tx1I*F.1 $ e?AG4Z Z`0D ̴I#4|˪RV |6680#ᘥE]IaYk˲}YQ(r&ӂ@y?MIR Mivc'1|ES)xD\1D2;^ @~'|܃瓏?ceZ}4͗R[Yl絁7ZmVD`*qbJ{& coDg7%3tY2k؏'$!TȒ9H\"tNyEa}>/T]=7FU{]|䆪zVhNqe$ U6gQհ4Wje("*+NTU Uw\?xn*ʹXZ•&.STz\k;SaUs wD T-VV| `ۡK7t5n|vMi! )4[ܸy3u Ts-qm|?Dt߸ՕEֱJ ]#2,L%?poTV!ӪQaB " \vvw-LMUkX$SƎ4JYrc6Pm(Ze^vϲZh4B׳$ N{gi4YӪbIg S7&)O r&OYɤLq{Ŕv/~+O=䯾$QoL]É x"!Tɵ7q{HE1elPUJ(BEyUŶG(FV S%d'D!D閙\OA%剢(F.˝;wðl_O}SeC4MckkhBAUU ØgB:'òIIg4g*FN,Ӯ;_D/g?EQk5 UՉrvB2Sb4MY_{?5n`04[_A,-mgwG2nկ}f5;M/ P#hEj0`VM3ijg`OP/sp\2>Ɉu2(?w-^Mt_컺^3 Cl{L7aDףnh 3g͜ZaGQHi8ɗ 2Y:U]%b4]umO=RO N8ˬI:LӤZr5oOWz:3@ᅊc?w8K-2:j{G$;B[PlAM7_}_ļ*^'>eO".4{뤓#yN#q쭷>8P*ay}Fl̳4d} QTp1v4+\5MK%iOܟu0>Y*Z0 GOe;s9|^l3%R՞^pn:TJAE09űf#R^o`*l_jNb{L1ѨQ뺥5T LC#TU#BlGQ,N*X}ItN#RJx<& ZJ&c;044I< Ddyi {У.," }0sK,Su-M<4!2ˈ$U$4oߦh44/b欼XK 0 z*[w]rp0R IȈ!TSxv%YRE~,.}`xM2^* _YhDOiqӴnn1=>tY}gd%N;q&1oܐRDQT8 x Hy\/qaܾ}0ܵ2+Uyt:?C>CqkvBAӴ:Pt%Wg)+@)> z|8N y12v'矗0-T%GaD%8%%J8K/3bM (* jҌYMG)]בC3 #8{̰G!pAc|dPU+us/Gӗ7oSt0ulwwr2(FGDqJ`8r:hݒ+ZoR$ڤhuHr5SeccpR.@zӋE Ea7ۗ` u:942g=hy Y,b'.̵Cg{n?)%FV3Mwݴk#&P4%Mhk9I㸄Y2De0 ]Ŷm |nPQT6S2 d5b43b:sss誤ǸiN3hNt:{DIaZM8C,ĵG G7¬|fE40dmme4M+XYK򵮠GV|K_? U8)rc?Ǐ.Ϋ׮ƛ_9r>ayUADDQi8KFHEjzt!E(`0z-6"K@بhW,_\J;CJn1W3<<܋^a0N[",+8.>99h r0x%rq }uȁIiNZ5E^}oDZm\,Uc5n^]ao{ ۶sYz\T5 jmSQ354AS%Q Jy8"E Af(UT-GI[8M+onGxK7h:U GcJW^K>Mcn[,5p\]7{P52 t 8 P,22VfJp]f!JY*IiZ#H= !_TgO NJBT-ڍ6z2s4aT VWxR[TZHjih*ZeU(ҠT%#tEhdL2 ?`1ΏFe&-g,5ا8gHia*1<)U5 4M*ahG§AP6nqwHAI1̵V-k5,,;.^UHMUrRUZެSUP0wAJHU*aPרPUqVRQo4L UQ!tLA,fvl (]NUU=eݬ9g!PUܤR$3K|%c 0UZru>h'̷O 7 9P$i?7E7c@6[O>%%2!rd4!i, ]G5 CFǤixP7,tMEôpØ Iu헗0NF: 1%ɀ0 .7La&@\~>G:q}Df r\F;0I^Huq]P,%fQQ<.aƌ]S@G}Fcy!30 C]\l b|aHߧըSuLQ629uEFmj8iP$V#a:aNIEa>2+2o4M4-ee#%Hl4Ϸ;?w~_#S8A̺8 #|n|,.< adjm Ca0b1N FCۥfأ|!ΰo59͖th4adgnkC:J; _NMkB zD 1:G/|/:0V?-,|JS9؛Z{Ngm(s~>;ۛ$daƱIw]=:;[vN0E <3n/p똺p:xA;~ .~"ެʥ9X#Vi!Y,dDMqXCEQX;aPT$E N#8=JX}!QU?dמ\hq˪pWi4Ƕ4wGg=|UʼnISrI/h\qI ~()e䢞"n0}YY:a Ahqt9ni^vw\X=$.ڞo@slD.{G8bx.Hp磎%%%u$P4I>ϛ?kp-@$X,$^7)46IYųE!"\-";%d.E];$S=&ӂ#R,] J@H+,ڙ>4ҥrz}-VZut;e#}JY8FUUe2]$59MvlnP3Q (/tOPz_ ܧo״À*W^] AF?%3WfPzqH )a3s)q># *,RU\ƵZα*ż4O2\)hV?,AdjÜ~Kuòp0wǟ\f6쳕 zlon^/wիg_E^s/mUz~1Qie얐 X6xS%s]89+~Pj;>4%Dc)CybM܂,Uu8 uMS(w\O yCHE>dM׳B?85SHsuL7 )(I9#r Op> XC oIK (Fzn9(,bJ.yaڐJY8N2SUsi0FQLhMrX1QĄuA9T$!PrP&Khc֦8cGI$q'E[ "siǙ0Y CӬĄoR%%"!A*dJRhG@*U3&,'MifΓk #y&06kOH*|0HvLOl Nis8AfIFDU DDɀ4H1KthYhz@"-~6S|?̟]Xwy!4RqR|0$.VvsZ(i Yܬ=iqO 9X|>8̞Iy]2'ojg,Ácg[ߩR>.CHqwn`6m|"p9깱+10A7UUKKs180 kd)Bq=8,jҥwMQ,QQ̣+$s [mV UỸFQ-o%G1~ $Ij|ViI!EAh(e @A ų$0r CL܏q- m}VWW JR''%͟S;Թ3@x\vw/n4-n*Zmu Uy=@#lPp}-N &`5xAHƎWƘʳ~p2Ǿf-cбZʾ8T9)R <R IBP2g-Q!Hkx=-D$!Pii5FWZ] &ףc4vX+xCF88"UC﹁{hi@;,dBG33i/fxCoo_W~b3tP sE $j( Sp?&pҽ}zGZ޽{Qivkk]>S߿ϓ'O2hmE$_2ZH">C|v]޽ݻwiY3 q&Ibf P24ƍ8q[qmܽZiy!Als1_׸q(udBw>[:S~ݸl) 3OsA>r84,Ӏ$8jg1 IDAT7'B%"*1h+fc-C]&}G#t]Ǐp]+W ,f.s R?.wɁǏяw7+Wxx ۶eBTXoܸVZ7w%/k|dcc5"L#=Y+4My뭷JœHa]%0̂jf 'i m<pp80m* K/ϊpk1kY<|H&P(74"y#\ &_:/o9sȬyIC O*~, q!tmB.0 X={vY.[DM4]/8''= thKw^oҪVKdv<qdȓ`a?LCtS~12 _"4~E?[|K]yK;Xv&H)K7 |M* ޺"ce@2։IP,gy4x)T,')eI,Y +YB,ROdkTŒ3-3.w)}AL/EK˫B8 S +nlP55f5V!ųMPZf!)U~^bnvjFCLVl4Hʶz!c-FQF\+Y&29i&"I'(`h{wL>^/d"QC74Ȃ>Py{3/b*n Fӧ^+/\{ۏ30u,n8; ᝂPTa 34ñφ^U5.]^&C>b/MS$Y5 3D %2Ly8/ irQ.KU4" dyJ (J m îlwm{@(%먪`H0LIPUQNEz}zݠwU-j:Vj5fTYe~!qD$cJtYQuM0-zY@ P$dI!TMASUAQBS^|\2ԡsޝ(b]ZF蚆#~`*6$a9Fn~! nܸIJ̝IP][k+Dn~$k("䂌UT2- =704$G!M LDHc$ {H Q$ͥh :M$`ei&vªeY[t607]Z> 9~ "k+H],JcUefjZҘ++K%a7Dsq]Y(UmM$a|>]!NSrv,.ñ{lu{mtH}DѢL<4IDI8P2( wpV=LLLrʵ 4 IxBEK+KKku\']\G C LyT!\*a$$t<z*dhm=B)W0*%&Oq"4e;|C)a:.$ŵ]\! Q #+#NftlejJ!15r@s$" YvE$TdDDrylSC< ^j(r|@g$a~')B:6=<CveFNO#H:oww zp׸Y_Y%iJU$i6?8 |wZM:m^ ]QqmsvW34fq}v. NmF B246 aȉÐfAxsl,~$M8 K@"Hc# %hQXgPFvq:^ȅM-{]Ij/S ̪] ZI^WH#o>E8ӉF4=qF#8}<l[h[=<,eg12:C}y\WV=}˺"HȳlPyEw9v^G M"v`]<ld#99I 6HIKlKmC$'~gEqFQn>hq\NH^R#~ų y:Al>,Fi6ӉeyOyc@f۟=ĹO y9EcEi7 /+K:.qYUJR׉NA4&eTY*$!'IJ%N@4]ó] $'j ( GT 9E.QI5ygu,(q!WÀ8MөX&Q`aATX䂄,^h'|% Q̢EN# *L ҢI/ê`:aމx%IƲ,$I(rAQ1MU0X EȊHJ5w!r!$I  fYvUc~UĢc-;mO&%BN^<DHh6 \.(̕@w!D&xe<[wp)+]ՅY[ܹHŧh3z]$R%޹FU-U^!)iI j X_[w{cPE'ʪ¥+L-W#'R0*Ͻ&qm]LʕkWyEp] Xu}8/r!s+F,+#/S<{nQC!DQܷν}zp@Y=yXܤ$IU=EҌ{cS#G VN>,o _& Y3s\{RM[_&ڠUTDEv٫ fEdpD|8%OmꇐG6Z)? )`۞ÃD+lJQ+]--1=IO@*V]byy0>9$yag$YML c5Vck+1.͓Fai!K2:(jl@OJJH ƨE{YU Ԑ%i^~4[[qY311~"+*}48C7 ̊I]XQvhD,B$HJ?Wxt}>c)$f[g!K /h$yQx qHi# q?*4EY&gT:mIzHl8A IgM~hG2yf B9t ԣV%DQDK/)gaTTٹ=Oi:g?8|ZAEjA}®m{&`?ߵ ҀkF$<'Ip{A(Zl֥H&c @=(t~T!!2Z&n9X~Dʼ+?\4!I28{ RDGdZC(B5"/9G@rE/q06k%&:'Nb' Ç-q>aZaɳo, "TSU?רk%턈$AHf$*M!>MPDCF$-`t;]jiX2b8Vwga !K"a!~$QTj $qL;֮݊5~_u/^ߣi|WZNx}41Bc^dzvO|h'Yx*~+Fq8N'𕯑}~ !]}s}\˰5^z5?ڞK\'| a}:"[^775v@EDOVɁ_*|/:?ޟ ϽLa½ivw]hF:#3hm095RAB* V #)'>Qg^/^RX,޻˃寬]?wmܼEQEq45itsin/}qgi8__ɃYܡfY6?cc;w660T^ODQH{oS鋄GZa|#FQH LMmh̶jU>}/W7h76[dIA2@ 0SM8Y"n+:TbvZF$[ U5jSsTu;x|W^y%X| Vx~a~J9&+Ɋ$Z(Vs9CVVW {MMM$gyI8zgyW;PynըX/ $&,z=<:@hضDIm;ln٫ iHu|ae\W7de+w~W<5NƽJQVt1Xڤl4h{|泟gz8<%PdYy8+MJR}j$Id#C0C6,S~bp'q]8 OxRp?@*a&^4͑$QRH0CҨ-{ ^3؎{% ;vۭaNA*"Y?qaL.EΞ3G7LV8C4E 3҄N$ɩIG%M6V鶶HFB"GӳBA5E6E$.)*R$EV5Ȓs͑Hb+xv(:5zǑsxp #B<&JY(Jg%%D$HL;g{ _۴{7I=8ɳFkWѬ1^~v#^yETED:fueSӴ;6FAv%鑅N~GQ!/sc/| ~O믲|+x`BA.A7q$;#Flv!~reed<(Uaw;Nѽ@l1/p EvB]7 >}7`anݧ66$,.-ܕUESM/Z؛FQd6V-8]V5H8u\6[<5|6{wZ4 GG.` |Qݏv lҩ+xsDzfi80 C0$sTUEӴgp;=QpgT9=nŧ8.;hgdi_~T+hH ` wo^gg>:ŸPX I(Zd;|zb ,FYsbr$Y"]"ɲDCGWtDgθ"فwE;v(qԇuWx;JS\BQa)Ϫג%kgIOb+I:6~< 7޶ b8̐ Ba1Bie:}/Gq>,`/]ݏ"W&^X/skSR uJ';Z),7>KܼyϽEytE=82odӄYv!ݰxXSv%*kkB@4[HiYYLg'?w_f}[Zerf~Uܽ"˨JD\qkRB)@  ABD&&Yb~vvE0"tcRW_iϽ2,LwzḺg]cueAHs1,˯|6}lUO) 1ob/hw㣏y~GGEy( F]jV<9*.i*o.xa×{eض:z!IHcEQtu < |Zv*PyjG;).rO4~ QYyQ WPE{4[,hI}b$IZ`aZuqdIwt;! u./,`ha*QcZLM&}IFΥ+W}4Mڤi XJ7Ccs<yMd]Yl.?n;Χf?B{|گ'xz&~hdK^&S &k.z6l<hϡ$U,.J& j(Vsˍ$9_AMyo.|s6Yz8qar%K[4M7\GVAnK/̥g0Uac.Ô22R@`nn#c}c,i7q^fQXnZisX,D"]'#f/c+UZ9xyH眸|GGln6lv?k7TRu_'?yٹ؝M'oz2kwɲ$$>}{mJ& zM0>1Av,W )( +PGv"iY=}AUQT07J#vQ] 1Ӕ IRQVH4 e UU ױ$}qp\j # 4!#:6I`U*eX2 }?0ƘG2 afj{޸#j=*}wG۴ :8q\|q'B| y"Ӡmǡ)%;T wv0j" P3>>ȊLE,hA&E'2YA&CDgӱLsdId}evIs Ա PUzش-IR%%&(! 9H[[MlERtH'\TE% =lEeDI]9sw5YJEdIZ'@3ϧߵIu * TQUr<7D |'$*d)A'nk8a^ֶ[Ꮾ gYEog4&Kܝkޡ9?yh4#Q9z/0U$ =?'+h+IW]!w U3T1#ǜ&b:|/ q5IW̓FpAXJף^r* US#INN7n&M"Įk۴]Q'?b0[|MAMbDG-اk;x^G (-"?BOtk|v0q 4$KsArVWfz&xFsho9?yG؎KIm$q}㲂eYH|rEQ05$yr ~[LR!M"(0=`njAX]]u]]6̎5>ȫvqoa!YFUTi?g ƌFaMq؆I.+dV  =PTv% H#@q}i.ay1Y^x\ 됥)Y^,`Da9^9ݾ a1x/P9y 0/s@?@^i^;q]|`Ԓυ=G]cp}K gPQ x ou]Rih(*I4$K=u\~~\J9gYHu:G7sxx0`ksoE'_ns^{~ b[iJbxsmQEۍ}ȳ RqRl{?0` "t?[e!Kvۇ_L^y]:QDŘUcݤ;IѨ}_ZߧV;'2_( U^KRoAxie֝2o8W'hKZe _$^PGwFO(ӓ4[C,G:S/)"?GTEnwhd᝟DkkZ85SF6lj&#ȲDӵ}0D"!67Xᩩy^amUyt $Lu㐚1ųiSŝ[w „VV{;X. LLL'1qcGê'rzIUUTxjjizQB2ƕi2YjضD?d/[Qz:#h4sRFoT,2LFL=ua'?OdϱBR4SS˥?wkϿ[/27aho3schi7x0>1"tZtBWE&qj:UF%Ya|ln?ӟ$V6&3i60:Uuq$q'oڱ-$N]5X5y#|}@{$N:IZ3;ɒ(Bŵ-߻_P3UN"OkL^4Kp6a>= 'Z_a%gX^M,)bXZ$L֧p.+=^@(kTCBNPF ^z%Wpgm! ):aiJomDH}kN YHsːU{AAF΁gSD&E޽ih5(Ks4Mu̫`iQ9WdV+-/&vg|h;7%_y}ژU||hXaOQMTqs0Q$ ƍAnn}K GQ8  IDAT4<'S'ثhp̲Tl|,y3>>7 lFU,^r!+ DݦZCJUUA5`$OJ^z\oi>e!xyAppCpR c @יPfF+,CU5.]HH$IdynZ\{yꦎǻo@@S3dضC& q9."jl 4/ aѦZcb2V#eE/EK\kIYU<Cp.e q`Qc&n`h Vn yD8Nf?Ц,\DUXQ4/]f<'Lu0c< TT!ϠAD7Lj5 Q!;-bAZ^h5x݆ýz}:J44~'$ * ^ց|׶-LIEr >h|'F;fE!eu F!V" }D$O|,9a!!* qy@Y􃱌kr{.[xaHӥfSαx;=]0$fB͌HC%ݹw!!U]ck}!Oypv Iܼ}0Ό΍lmlA붹̋,-/in ճ >ۛ,({\o+]ij˲0 usRԄ)£P-WDfcd ˺Z?8W<yQUJŢb(D$OE(dqae,'r($r Ii < C%ϋwahꨒHԪu4MA$* J,-<(ݾ(It2y.RHH>Y<&#dUǬd{6WqfGgeIFtttdI8}j'hwmU2ESt ]0-3 uSӌO"@)%iOK{q*:~I hl0**nCNO)( + vpXR仍oe}d~rui?/8$͍=WE3}qjlŻ7w>rnݺc ?Ηҟ1Õ|>]PRTgTSׯ_7(aJQ)vtV 錄4W:iUv*E蚎j\t*NlBE6W$OVB:=UQ ݪ"!2}$"tEniɩ2=5[aHyLNQU+<$&|\Gu 3K>^f訚r|@gaDȩD%I̘E>i$KȦU!yi8j~BQi۱{Ȋ nE">nZ1tq@ 6Qb^IXG||D A }RI@>|NTv )+tVb~BT5Q(^7vlǰ~ASZض,BHd$"H,+g%e+NIY%Z%8Y=*$cO`ll<ȡZ"T*֎yd~r[?}PDV{ }<8OѸ 0dvUUY__ݻ$$@m[,iਨ:>j)AE%]f-ʈR t\/6BIEt*YY$Y2vU)QX&b^HI`)GbB#cz.= J$ YFfIYD0&$qH(HgY%3d]G C[IDQ0?7ij"+E-XfufVQ೾h4;ױq\?ѵ]wd~GV**ޛI}?=3+h>XHBCh QDP&MFӁ&Ln Af8d((nC83 g`3=ݵUg{:xDRVtU73˪ϟoÐNAAߏ-( Q4A40D{ frBˋy(}P-F^YX߫ff?t[x?};X8{~]6Un\fu & +D:>˶A$C\£8I3Fu]nMZeA(v9P>Ggآj*o X_)J7n1gw R\zDI_9f- }VWVF'YݬC6(J&H!t:t;QVUâߣݲ|L-&(*"DFQ\WvH<%ILIljU:xkk("GF"~ot I"Fꠠ@el\rޤj:_%xlDjg.Qm0;S%ct;mo}?.+Q7^_#k/ ~ V*(cen(~u`rf +Ly9?gBvϣə*fΛo{>T*=룚Z,c*[أI4r77V4 \2FH5zf @H] ÈffKD9덓,K&fnWfYש՚T 4FH&gE4kUgOQou81]E$a\Wt,Q` vVdxO=Jѽ l5bEǹ|~z g˔+ZG/eϗ⨁mR>.X~beZGQHLGNa3bx}NƐZR;U|<ċLBWXYbl| *;w^rIvF!#bd#dRo %8~5` iT$c蘦A$sMPe L->u(Urرu:u7닜.CJA]NvmX@VWpzf~Τ(A/Lc6_ёhMSXa2Rٌ\`56nGx"q'_Wm W=6n4YZ3;;IrL{u?fn=ǜ )%O>8ob#3ܹso'ݴö}iQ1׿~$̽F<߇iQޭsE^M{.Q#G٨5p=);?0 )f tj eb,BS!Bt ~( n#e,]n}TM#_(LhзU KUQd͏=& e? Z4E#1ꀊB"j?sr+V^o-!VDh6kn0v3\Gc5y&kȐo`4|H~EHZ(:DٝHO~q٭1SxMͥav)/}K{\Y8}CjFZhTs8/e'gr@ng[z0L9 $^oFI|v ~}:xR}A<0x ub߰|W͛7򗿌m#t`?)aq@Qr=ɱ@?t8K/@̬EIHu gIK6bwTv"l'e-8e!P)q=6a̞˥4 q#V}|̩I6Vx'hlVA3Y_`T$IB:&woq( c 9;;I$$HWͩqyFMױ-((U&x%X1I,036I"1u$|;dy$hJ*&yge}sDoY(dLV8es^:r]j|g0^evܹw+g,ځ!ib{"af l[ ? Ѽ}/o˿z<c"I''d#vIs`?sI/$IK qims^uvϭ?~c简1r{iIAۃOVzC0HCTUˣ)O! H3if|DpC >xs 4@q(?)dLOMck!Tq=3VPq{tM;ЙΐfPUD0-.BJUBƩ6Q( IP.311M.kSo4-R%mY35sR1O.grȖPTA4(xPUtEIP,2{4nNs-[a+&&U6ju09(r4[** V&CeLRiVJ$VHTa|B>L<( -]Ӊr.O v.؉}F}vcy* ~ȟq8":C`:S(0SxXI^{Y p{s?wc;Oz6墇IN`[1"-UKؒ8~,+Cƶu ȧi%X__LK$fg֎& CGQTlt:b(X[]nGLKyr s{8&gA G8I2Y.| f0drY$UQҒ2`V:t2&bL$E˶QuUSgR2* B's5 CyۢP,ǢٗB$NB"D~_!)8l(մ\ysb'vb'v|_de/ fNͳrtN@aGI>Lzoʞ٭a^%*Cx̣7۝=>SG,AhE*!L($HA=Ĵ53QH V6JBYŬU;Ԛ,^f8}3nqѬUI]ƥKFw>iQAf*'׼ڝ0n(m [VɐLf;|R:ap4Ge>KMmcha!nDԩR$":N"Vo>>AA5)%V.ހƲmtU!cTMG]zmn^)@<@w1Ia)2t; }]BJɱ]jQJ]SS"{nv.KB( Bw7sUӑ2!t]O[!$Q4"_9; ^Ng;/ ?sG+WPp]ff>q qrC}6laGXYYn6ݤ-OTZG)Q~=mLR(1!؛p s(080v)1N7WqsQ$3p]F#ռKу-[O J~B }5Հ8A;; e?ȁPy<{aylg^:2 Rv>1ieU{a9vDיY3XG ;{3|"E&3Y`EZC9؇H هvM(@UQA!PU-;*q ^Sh_`~BAH;0 ]'I[ҏw qtlBʄ8Nд-R&MSq]pMgoHvdgW05u2M4,$XY;EQ1MUU ahH^Ѹii$0}bgs2T g$t:AQ*ôp{%yJm'5ӲetQddGOvT T֣loXޫ:J0v;G9_Vo $Kdl Fŋg{W|b//@l6™\Ѿ!NKe6'7Q:(<Ҭia8BRb6w+_ eaH>a?MqJ3~ޫ0`l(tRӝBh#k!L.i/a%`|l1No~i%r*iw{E4hwL,)XYz@Sdme:N]7cR SװMMS=յ5:sTݲ;Eζ0p}d|"xd3@',ci IDATt@ A6'k[4u 095@1a}ez=ru`znJ!Gcszx;eaaX^^v0 (=Ӳ ]VVðd3^0-Oֻ^BV:^1;#Ѳ* 90dvfG(j㹌,}*^/_v966O &g0_XmqZUD%/r=p4KKmlrq{qϓKgR6#.#Q,0lXzxs^O?cK_eƊ:]-7/x>.\hӼ_߼Oݗ6x _<?䫿ܹuX7ܩq.S 36Kح[$?O#~wz~k/wH7^{}{OͰYe i߹K>k(6_ko+>ڟ۝!~1ܮs* P*7w(JEJ5B)7QIC2mU4nraHmE={F8$I*!D bu$(꧛0 y6ai6LOOy1A2B8 e&Apvk}UmdT̴, "FI([D4e"FARUDR Hc8EAu(:ݮE= ŘS;nk=R6;>|> %'@='UfsrqD}C렪:BqtUX*ھP* F&CUqsjzaz|R1GNYsTz,q|W~G|_^gfn_Y]/huwަo}.ᇷ?זH^&/=ڭ&NCiX5RvR>)<,p\'uEQxjӳ̝qs$ vk_@&~>g&0>(" CE6vM;y qn~P!t<~k_q^y~qizO[;Cellv=_0qo5 -!%0p> PO@U8-i 0NhH=Բ8A&E L#qZ$" o8N#40fcʩS N?!ju뺾nl/"0BfؐIT8-VGNn_MPDT F34L |BBFD7 ^bDS5%-@IL蚁N!IuDAtdIC<r BQT^I'GQgd*"b%Ef1E.4ʀ@' (KEL&X~R*P$I$сϑ2#Ltt6x,pΟv#fg287kU{rgyR͜'<.}_כhk`3NJGpж3,9ˍkW  v ۶iO稈ǜee177Dž zcH)7I|{#ϳLıǩ ;%NRu1 (wnW~W(Jz=d2<#">|a1f+|ROiĩA cTUGSM*L Ʋ$ 1qT  2V2͆ <ߧR7{a-.'qY "a=8b;^RLOnP IV.aFC1L~7M|=J`YB|"t?$]FTΝ;KۥT*^LE,..( Q*<{q%^es$=I_QOT|FRbG cXF|[+ZS7ðly=dWDHXsۭqJ$vfwVKdp;7]>CuF 'ʼnc}bpvb@05=™k#fٹSI3]}dY|M=z4Z+\. c*7@&N3xJ%JhLsܾ'^=qk4A-CP%b1M3=HkH!:QJjd q* e 4SBjci/hg/ `Xyݳ>8 #BxP$ըz/gnw{ln#:0 >vm[y_#v<)DzRYtڭ=It^: 4 UOV5:as \C:΋/vט+zm,Q7zf ܸ 8)<q{du?Ix6a6W~#`'( C\~BzYg 3;޷eYs}*㓔 Y +t,{I 6Ӳ=k^y"( s9Μ>B2y'!fJD 1,,`YqPNŴ,!YZ\"ӧ1^)!l,QkuEUQQ&yNs;˓+SUe{^M#{cC:5~0aj ;N, s(3||*g/a6ϝe}cb :Yۧ2fS{OW1;?zm>,po'sffXZ|tQ6&' wK Q^y2H?C.d_`S423=9E,-$_(y}6WYؠVd3i#"p=Mӈ#;8پۧ!2YbGbV>GPDu*1jrYj+eݩ2knڤ,>i$e͑f\om4`;tTC ^k)FT6 84-T@=M)Ks9DEWh7kQ5ݠR`V磪R\w}t¶l$qL͎`Z*2ID7t(4m,SEQj*-|?TMWIegd=Tl>xPkRV2@qgDx|6`P\)L}w+{jR|63b=brCUhx~K%,$|4C'=.`栿. }o(dbBazLJҨVOpzz(ZdtxQm4ˆI.=:yМ؉}FQ2'SS|UqSv'0݆2))>іm"40 LUX\Y~'vAX"! CN TE%AHĉ0m4U%QX9+cvd26R( 1tiYEz&E#t"$Go9 oB> L `w̓@.dy4isEB_)ʜEW5 iٜyb %.ŌkWYɗ*\xR*aivP5 1Jj8{47Z8lg38Q@$x~:g: P;+Wp EYEfF'vb'Ճ?cݎv-}Lru~iԪOxGq$!ꬉJ%·xn/KI`>G||E7;Zop_lKVIβvd2A k$"T;S$q]8 65CGU4ME2ej((hFXaFfe{\~\&n4$Ɉu?0;7=I#=LM!%fl"C#-.ttNmeL6tV&K&C4P$шXbN605tM٘F$t6n]I8IEUDduժAѶPu8i6{$IDX$+P,SnŶJ EUiu0H=%%&y Ie| /] w%itX`动1~ Q\,֣ N/uYviy/, <{'`N3w#;UU'DQȖvG J?Qis"OӜ;f~;N5.^YM'%<޻*K<{0SDb$^LEf ^DHk4U@%a='%TT UIN 0VRinmu\?s4#(@ i ;l[Tt(?fryNP26^A#8l\ͣEH-#^ߣuъYl;KP}2vr(R 㐖bV }+cUe|z =:FPtLqcAmRAWT C^k{\V0I RD{R#_ii*zDQ 4$>EGUJu <0 CQL"<FQ4<6($8<-6/)oJ8wf? J܏OPhbChFwPfCT__oרܽWh7u+(>~F4Mfvzwi/,BsߩSgc!}/@tlfllv}(Pm}s9߽zN} ؑ/UƙcqXBpj4:\svGW)tU:T,Q.YY}4ʜKS2+*VUUPTI6vhIi\4E'3;v&LNLj5aیKpjfypQ%U.OʈVg BB;7έt:KxG.{JDQk$7];6Bq-!0ulKo KAӸ#y^Ra50%;68P`e#R&8h[NקV"=8s}=OfޞmR$8K*uۤnRu\]%=X*JG^wX'tx~Ȇs$$TO]T5h5uN)r4hw;h:NnӤnb!JU\' BL;GNU4CQF҃ Q,v8QQ\tSvw&wq><#DHJtτn8}2SE7@=[f6LE9x Tff*/?:~˕1Ƴ|TŋvRy6^>>fe*$ 8ڛ}[|+_+}̌_~H,noSgM\iz+vJD&W!;V`gaH;1)K*b^DB g9.Sm(K;!gfYY|D̜Z\cn (өrޣ9ŌML3=NE3?ǃdM&x{}榢Ԗn\<>+/_dscOk6S|D~_lP(p;1.Se Fu4ymI0as 3 E"?|l%F ܼq_;K4g&EHb +åWШUY]ߤPOQ% +Kn>z~Q[_ G97GR :f}W}ݽ/ cT9:V;x}j \7cZdK t(G@ajh!$͑5 Lo/$ #jbɡQ"i6N#~v͙ 4]#͑ &Jbg2~~uu x)=^-q<2,KIfgY]z@.LqwU^tKwQݴsOqPuDL;H@IξDF BmL "TMY7b0hTJcM8&Q366{\lNU2Va̒XX %cF)%q ubNTdm⇂3sV87#_(!BQ7,rfii~+)1sW[z)Lοn215M/Jizt1f椐\xG0>VQO1 NMvZ|6䄅X_l6Oƶ l"b" iS)f[F1hLNNs: |Cqrym5τX*_''Nᖿ}2l-@X(ܽsAWU{Ͼt~%gQ{^_a'cl&Pִ'J@{9gb_wwڟ' 5]w[y20 X\\#VR*tT77 i։DL0Q.fp5|m}EYH`gc}m'ndG}37F*iap>qUbt5JD^zM8dquw2dH3 +Çawm}ܼs CzF>kS(wwK+7eL4;;싖 KoSX| KavYZzEMK%,i6{'䌴 =ǴkkLLMI{zvIgs Dbgl8Σ%76( 4Z6VX5s}t;4q7+\ta_W\g|lϗh7@UTJ9Z=I\zq}4r@>ZzpXH}@2ЬW ?6nt:[iVk'#ekO9!|wC9@ lFMH~vWQ(d(m?{w~{.BbTfwUu0 n޼y`TU+_ .]BӴ GIFMn߾M;z?13I{rO9 ;뎦i_!o-欭p7sݜ=ː:lǢ|wr KCz&S> XfXɈV) oG ˗19V| "<ܿF RabrW]24D!} +[S(0.^D0j"g+Vck}յ11EQa}yR)8$LL>|V 0HR!ey.q!z:E՘_$NM{%2fgf1X^]Fq}0٨=7)2 KWR/,?ygvR)*ܣR*׸x2&V!R޻ƨJR!${q*`uk}0R%a19V\ +bWku'C J_$O=pa7?4 R{՘GG;_ҾP* |->Q][r5 t.ˢCx$y^/$rs~/ srQzT+@]KvHQjEN0cKQ\)n*T] /ɩi1tUbJ8vUr20 c S%]<ݤZah*iQ']z#2;fL1&'fW+m\bixA;-6Z9c12Mr"cqZ耐|Q_TdiVU4B)IvSdQky 99=f23.nJBJl}7@ W F_xAoLl/W>vHPviI6(ϣSxQoT"#Kwx?#?YYF(ʑl7~+OYL^ʅ}%S>w4wmodw4ɰ9tO=ۿE;gVoX~ZK|mv`!@8 YZ)¾VAC.zZ7m`+%-:\#=mt # @7u<֧J lxBJ4U!#c nnG&( ildYB(4]8.Oe?w$;[(_a6KG~u_s=M~Y1gPT$ ]Ƕz UM\*1b%L \ۥ> i%$ cv"_TH˵SB2958q Y[8!$j2 4 E2<0 U091A9pu4]Guᐭm(:gӨv:$YȌA 2RFOr|.@\>S%9" @?Z';q5 `ue !HdW9)$i:DŽv<~ԃ;= An!`uu4M։㐵e6 Q-6qg \G5)I@w;)%Q"H@4}ϑvy΀?Oo7 [E8 ث]]9##;Z|iGl/#g;<:6~ \x,.>8,PQtc˟Ek&{W^\딕GK<{?q$H{FhU*3gss3:ۭA*Z sS4'2M0bέWx^17@Y,U0t MI)%Atp݃nλ?~{8vu}'sXEa||FJ7,a81-y8f{}9>|FD'J%痿/tzѹ<۱I^^z '<\\$JRd拔,;>%bM˼˞zNg28:^pAl>'/KS4%8&hfq8,>g#6Ad3=%Qlm2w“{ "p\7 w,u.a"]Ew7I>eU=`+RLLNcqJ2ኪD! zvSt{}*f8*&1=Di255,s&C,e{s ПCU0cF^G,ca@4M._̠ۦQVmsxi$c:aoJVCW%/jƛoARF%[kK:J*jlw|("tZlwzdB% 9qܢ¢ 9L";;6^08Ft~!ÑKEhARѫh0L,M!$I "qN}i 3?7IQU5gE:Q&iN>C8;Y"b!( A?u?t4L(3 )1t)E!"D8Pi;)y o37UG/7[[e.kiHzE{  vБΣf4 o~M<~XsM^v'3b.\{SAHB:|vީojfFUpz['c[]RI%ZmNO0p\,~sqwP_LT z_vk\ϰYB淾 v2hoi ^0nVwZ$w7@,8Zk_~3&.kofx;ߡ?Sm>R-mH(Ο7x{hNFJf(0AL(vU>G_41qDe_le@xk(Goh}ѡEn WW's'c?zD*+ }EGKMd`L6< xM<9w`MF]8"I^YN;_R2M0d R\>s ^J$! n}=L"MH7KS<߼O4q>{6K#G'4]4ͣQ^3a0#j@7yXFaܺ}$=\%d{a;ӪP*]ȗa_8йz247miuoͿi)_{,MO_5p"ndTbh|RYas}$$iz@`g癛cE3-bP4ՒA Y4'&yW? tZi)f6&+kH$Tk$??;Vu7$OձdIvpkYB\ajbi"ǟ9Q2*e wioZ׮;7>~=2j,MPuLMAGw'u_*@x#V6X_;$x'~kːet:m֖="];mz=>,-#Z[H[v{DqDĄG> VVVt:$qL$)Ve("rк(i4(Y*{6so0ho(%^YBEi4I@ZR6Mlom*LMO0#/,@!DF34tfATex 妆5Gr;K0Qt] a2_#3Tk#?2VUw_J""8' gkj^22 ԅqvdMk}S$w=}3oiJk{8!")wIe$AJ1IimyR 0$Nb4;986YYF$AP 8S1>ϱY,MEλw$S 322 !N6 =Ysj(Fƞ_C}jΈmF zB7t4MͣB }w=xm_uk Uey"I,)c=M^%e} m{ǍO>s T*ebι7X_m%S;=/=soAE1IQV<'I Os#<4 lFHIclnk,Eħ>T8nFnk!|WDT }U  RH2Oh>9 )%i'$9>:àg7s[T!WKvpeq2ВTȤ8OJ gBI\jB+^]N#6y0&R/#q0A`E&Z,hmoߥ#H'rV4 9#h!dyDqaħFnR)W!H2A$IL\$JH"ubCe(DQO'g>vGNgHOv"28,HzHM!<#M3Bg:.Z2 wY}/@4/fp/){`MYwXX}v̠'9ym{x4״>' D!,`pg>QL9 %MimosO0v~G3Sν4~>ƉQL;0/UU%I=ɫ}k[*R1Tk 45' |oxOD$9@8:BuT͡~uqN l ǴAq@IG@y-3J#IDaH!IS͠!} *C0Q? 5H!^`4벩JQg0wD.e^U*)>>E+tZ*^)#"cڭma6߶Y~UcLH }:-z8U%\?MÅ'G?.=$P$o?\k?aoqaz7rE:Un޾,V`DYò0 TƷs2㞹)iy}v1ʅ{:1ƞiJ^v6uJlwVi6X- N~yx [@E$fpq(<~hI\bixTa~nM{1C0 NKX:͚p9rijwyY |]YSdϣۼ˟ݱՕe~w?/忢T.mԞO>s.x=dks7֙f.`J 0(-|Dz,0@S5> 4}W7 ؾL"oOvQ**c&^@20Qжq\(LMѬZ<\|@ paMS$S5]Lu CLC'IBz>gM&nLѨ6XJ$aa;!R8 e"MSC7s$RѩLrG!Pkb2=7G.Hv4B&ףQ _XJ|}M~k$ik6&Ҙnk /18 |+{12}8.a^ kgQRO1V+D259 Ko}k&oggXXzrzM=7ѓU._gmE?4v`tsIѸt-&+cau,,155AV߾v+\fI2Vo hTM0ddm%C<^!N~7FlD_W5}u䗹\0 qҕϹɇ|oAh!#:cVWN|YL2$.\dvvx37?GRB4t]?=@AÐb`JRי*pv^>bɣ[B4Mezz 4ju:ӳaYV!nذ,jS.Wo65 󏭣R4qfs\@^!0tCןu$)i.!Rep?!%Z2355$4!=0@JuRi*NoI$͔c)zRV{kȳRJ4MuU5ME RHE9B2Mԧ꟥35T?9j"E^{_=aRc,gbYV@H \iE)bw=Mrf#IBHFd|?35ӀTZzⱱFV^D?ve'wZdjnp2{ub<+\z§FghŹGj:sX:J1ޡ?clrjzDUz.aJfYsm ²,.\\8EO2kT5,=_UU##*f!fgK,,h6*(׮\EW3:CdR7g{N8(7Qs3#Lm^E(J}T ZE}JJR99蔥$h%0ʥhtečM{jT*%\O&g& !jWڃ*.x(vų/Q F<\X?ul_k7"c 6J[J/50<~O$i* LCPhc65B#Lc (vY4 CA@dYޖNQ8.ab)i* QCQ>~`IahZ؁*=SmE7,8DTtC*Qj5OL`&A\ M V2t4@^8T^?=O^8L C) <'E0QhEsR4f0z4 ڢoS4j:-ۤVfsUB:("z.)Z^RQh4ǩ,G3L!}Mυ5M'}6vvNGi CT,%M3J >ۭ.RiۙIS4II MS܌ EOPt}X*ղŰߥsL-0$[[خ_8&L /Q4 ߱"X3wEQ =BfÿC$QOH|p,>Y>wo|ɉ1[=Q0Z\:O3)wޥ>[fV=f]>[k$xD:cC f{kwzLNMQ#UP >tt{lԊ,=yDG,/369`ey} i.Q)*$pc1lZmN@A}(yL` ޾l8YYY9=(%~Rϳ_TQoCO_ 6V dYOoSnm   " b&S(@7M0' 2~;Cl+Oԉ;d$ }'CmN~@DqkgXےy (zascU@T50\;-}V,uDOEID$Qt`5r\" {'uIӄ8$}p3xOTi6PH!w|e2F=M(sV޹qy O6WsqIݫyC`LNRBVR9!B|I"i( Ic|o:2jJ*) nܼy* $U3uJ " Y*ԫ ]eki @(k3;3͠A*9iFF1 M#"JeDk:j00- R`scNw.Fn\|:coW$Z /^ni<guz tM:ƥWiVM6AUqzn407C5OϗA"u{co?{'Y9vA`i.qn$ic:;cgۄyuq0܇m>(E*Rwm^r} C9w=c_^Nl Awڭ5pgmAwHGVTp'w7x֙y%C>裃%\uLK4gV]r_.\;F9O=(Pi:?G,Ń{wOQ׏0\%ocHx!>{õdYC.sKB?Xd{`8n;UAP"=4;𬞷;R;$&>>V, lIخxD *| 7Leɑfi86nQ4Ͳ(<*RZRRll23c@Nlc$L)Zd R3G py^;)rs(^ 4 ѻ>AMjDsl$iJI'F4<68M% S(̣pIJ:o8XJ 'cJA^?tRgam]c,A7- =,י2q YJW ]/NԜ$jn6RIp8$H_OU4T@L̒k~0M\ǡb6볦EZmFRa2hVM7; b!!eN;ŜDdRBQDV'<ڄT5^-FgA; vֈ5&+ĝ7Ha0D|5猓$O6 4%"BR.ݰ\gx4 ,c:`&q*{)~xStR%OB `h*AavTwj0s E!0ERw]GU{0J, M3 ݐ)`~RϻieIYO'SMɒ3Zq@V!p9킱l?RY}~@x<7$.V(ZG3 yQEQdWHu lO%X2ejzx~Yg?=Suo}{yx+WˋJ9ܹ\@9 |uKU$KjB%ds v`~7:?˂wOᤚ~_:-&K՞GEI-*&G>cjG!6c~s&dハoW_y86Z)ÈÕ t`R+,>Yi.~g6 ~YuQ;t謵v2{ _c(k{NCd^Q#˲(/,B+A=a"(_Ƥ 0`/* uYLV!I|,>R=zCEOJ~M/dD>wniQ'U!Bn)B13vqMq OSPf)~ 2f LC~,v:ęV]s(#DS%Ndc{c ojuwZG8V0tz(Jx0L di)^^Ȳb~gޕ8avMZK*7)$Ib;t" < y1Q8c^㧜POB(di7lQr^g/|L9GJILzoL4x,ԈEdGZ3vɒׯ͛a@RarvGKT1 9ag%$*rwq̷>5*tUbO!ќd0I|{k U$ąQ*.W]&FV+ JEaa1?;Ň$ݠQuNif?AK-JAgÚW$Qľˣ@m IDATg.*5!.ܳ12E9n+B-;Y"ewsNI<5u4RJpy/]902^NwLNP6 0D( %@Q *u0h[=AlxA6?$Ep~kܸ ѡegs}kT`8dh(0Dy$YA\^h R :n6VGJ$B (g$N10JHMH#GbðV*T%hJEQ%1++t5ľ*{ۮ64%Nb&PQl%q7ߠk+3RHjhɪ._YHx\\wZ{iF {qwyH"fGKMRR'w&7k,Ϫ ]?9/tH^A130Wn67ao :h2^}üF$E!YۤZo;QhTiTF8ս£.2|ϥZb9.ms=4K>CV5t~VUHS?D`hg:k=H0=,#L}to@*ڜxFm[,/>deCKriٙmRVv{;i&K|@+",aD~Q^]!LHi4j8auvq$5ڭj=\#+"nHU_[^ 696 Zs5Yuuj.a3dkMr1$i7$ڇ%X1lpkY]pzNUUZ8R",-HEcQ"iL_ JPבň T rbD! v?L&ϩqDE@TTEEEV­`,' ! J<3ĵ䴄Pcc9T IZ,OBˉla}by- Q"b2 yR= ۽RwX\cM{!Y6]zK9L w!4z٣|17<Sh0%m@d~vYRYdEy|"Q.@ }i$ԪU `ueq|[ya 5z}luqܹ갎278( ADQ04N{{Ȳa]DcpxcյE|Aaa(57QB"aIqϝ{I] ϹL>ϫž6(1 >рs6ťݻs{k7 G /;ϣ/3|&yz`EJt7uxiǰȊiгtUj~G< בE0X0_nshhRZM X H(Mk'qU*ؖa,-SQUm9xx6>ӤQ:Au=MQvA(\@D1k!# `5=U@!pBx&찮" Fbԑ0s$9bwv QPq| YY穚P7 !ӝAn JXdll 4_ί~j:' vߎmc/8I>e\.̜Ln%T×$YwCoqg$sI+նM6BCʫK F^aDR4pOmԙt5j\9OfXlio?r~x2MZF7-2IBY^;,U(F"GGKsgx<"8&8趇yh8"hx\vX?"f{. Y`o6-5oC^Ͳq ہAÚG}lD [": Оu+4.޿c2`Z_%aI6@|LJHeެ;n ʲE|`s9sg=djmۘ$I}a!.^k)Ξ;?G ʊB:ò,Dҥˈ={ HBTfGڏx* tϱAK1Q\W[CQe|kW3Lq̭T)dS覅aZdyƯ!?]mیK|kZѨ׈'hܧmX"?yvu F'Ӵ]N[X@Lpz,Mvqt$mN ֪p5"Z }1u8+KpN#ݞN߃SgW*_޸ WX+טa(+\rSyp]ɱ8r{|Je\Ad ,HfL&H$q. ɔ2,~G!W(rn@3K6WŶL$n.R2Cۧ732Ai]޺~lj>KKxOX4(; 8?q-FsPgz%_NX]BEQ<-7ۯ|p~A"_*ϱtnܼaXb!K2 28|GAB>q\~?#H2=VAQ@ `L%E !+j*wȯDf}f%ʢ* !m27U=gm4YQz(b$l9JyLz84el[,)ML`&݁ޭvhTkGhG@*V^YP[/D=Q3;?LQ!h1j!A84ŵ f!!z_&QBB]**T i\2b:e/hTW6$0{.X6fYI&b4m,4>1$E虄*W MiPkq݀@Uo<`GAKA=K z{|85v5myfi6~Owy|@{p['4 0uVq5T:M&GKdȥh&&I4M 4ÃÍICX8>0d\rY \< d:E!4tAŋHBHGV4ߥod&p:t8MNWOx.W`brT2(GFy~n!; P~!2RvA"DU4tVWw?xXM(Jk$ b&v0ݹBpBAH[q`uw>us–'w(Q^l$Y[ z{yK;Lښ^.?K8,.wzB6pϴtaxi#ffhrNg֢]J4aзLwǫʮ3:6=~݇w4Oe,l֏ȷFGc8\G9<.`=;QM]UVWV0 }i[e"R_[JQLc $cZ8 $ NF@Fc3Y$BQ(t:Z-4YFQTb ckۨXwShJ^q:} )mYS)D 4YZ]8zȲO<)"vbl}~PT2E>CBj }@ǒq0LY$׵(ERm5gp ?^qNY22i08500 &N7TY 9{S=b]^z cB(TLS@1VK$(8hHO$pö- DVTY$ED|,uhGŐYQ |wa@] 0qdUQLsDI&0 c#x"k;hn!I|BA\CD +2nz1ִX06Xs"}^"✍(TeaEoOa *w;_e'&+VY\x,JAT+2-fsu4-ğI$9$FaH*`=F90:F E BH&M T m UqaG}J215yRJ(mZ;(;>.|/lN`$O$eT&,IBӲ4EUۏyIERl6 s#[Q|d3BG7D E y'd/V;Y2i \LLm7eܛ_9/kR^{_׿:wKW.#:-0)*0G*^!d&"ؓ(d3)ڍ j"xaIGغKesuJ{sē){w; ryOO̔][9smjݽ9@`EB' cx~@>W7>WX)0rL|ᰲ;#1M/w|?ћZ%0ǟ*L+˔"(o39B |ӟk|>h#ǒM.guiΏPqE! C%bݼd!8Y_oӨ #oD&%re?Ufcn>Fz#vԩG\~%Ϗ0Q0 ǡzQa7,Eel DzbÿLJPfg=Byx ML%r2cv Q&4UEI5D$J(@ہP%){47a]$YmMy ,q,o]+ zSmaxQGKL"M:& \!!J|(D//Wp\^M2#L0"M`IQ=x((IH, SER M&f6(]eBnl< 7r$u]' Cm8cjnФ>HN}b' y,FR!cQ՗?9k>+|X+/=D,׍}v%gxDԶGڛgJ Lf0b MԻ&-N"O#.<^OMK-$2%. IDATsN 4-NB$؆Aզ8cR!OҞ5DZJeMneSz{)cceud2Nݡϒȕ6+AiAuI MrҪWI 8A@ ]EӨm峴m6qYr,q reY85(<8Ta+i ă*8"_}zsˋKgV^m)P]QM> Tj;c!s uo]ɵy8{TrI^h 6F}ߏj9'C—LE2l?cw2NǶ|Yʫ\z>ǁSl@q=dܺ(ldv JNl}3EщCaC?q;b[}KnܸaW|=+z(~7)"rĂJDqȊF&0]|)7`<I%$TYez4]жm|߈؏DE_?2Y wEwϮ {P~asD"8=}|f~nVq`0 }'=w~{ogSOw@3a@ppWHSmgx]pxޓ==5G{{^:V8t}wAϳǴ OF4Z yGWn9qx@8uzB>AL NOQH/ W׹r""WEL3#@(J;,-r53tXdqEؑIةSeYmHEdyVK+IfJs$^^@2//\>x('(I*ƓE4 4X\duޟX-|5._' ϐͯ8Y^Y!k\ps(Hi1.D0 Íy-܊]pf o5ܼ͆P^VO~O{^F艝؉ m9Q^nI7sÿ=*z@hm:*GcmuNgH@٤V#+c 'izCS}X*M2qC2 C$Kcib4B購g ӽ=c`0؇$q˰ #fsy"VzA<ԙ"0Zt},rư>'E1^ +P+kXwsͱQ*yJ=̅K=7{Yܺ<^wW{-Ozr?xb58'vb'#5nF " 8(tX`v$[_]Y;hym~IvȚ; {q]?ױ'A"⡢ll5j|dvz(X8yw;,ˡQaC;N_{tϥ ؎g}F>/|qqy0;X_~NY,,-a[6uB YaZaxR9>L>jP@! s c/pX]Y,<Ci$AQw7(KȲBˉS{:( (<;l3L ʓqGq~ytm5]'JPf08D9Hi{j q#QzOZjZ5hxMpjQx~tmcS3xtr G!'`) >Fp^_W¹k,=߱0emoW>s.GhneawwHqAq߅ "CXFu{I~(u(")MB%r&&&h+8K[W跟 Qp Z _ VOnO(q~"b@U^{U<[)6rOk׮¹>lݰ!lsJ,׺hZn*(/l-pPmos3ȁo+T˫y7qa'1_LgrroLMϠJ!dVcJOKW)Ǹ}֡95uL*ه>wf"w]eXȲV-zq:)5dqXwl6)ɀN|Ӿ qΜ=3gyyp._}+KKA,sۯ)Ois'A85}D,F.u, NZX hixze^j<Ǣi*AD9Ci1 KCTUA vR*aT4tZ6&wQaR"t]dr\7@\׍ؑdyCTGC|#@@%>ic 4UZ$/4TH$$q0lhbI $IЧ(?5!P5B!TƈIq/ҏBJ@~b'vbOf)S˅ LN!K"SgΧب8=UOɩ$i?r$hLLNum@vKK ospLN>?+Y_'\v2NDU ?0 |l+ ϡ89eX\ ,>|" |$ Ez.iM!O? &+`ut\&YDKr5$2~?">&aC=&&hZ"| 38xAX!yz7œpP x{Ns3|$LLM4d-N>w|)~_ + r,x6Vs\@2&^%Ng#+NĎfcǿerbkW.qĿLLP*"e"*)$>cu޼'LOX(SUܾ@7rXup\DQ\eB@hdqzyBß! !uvYTc3i-Nu:.ᯒQ,4+k4Z=#mr"B`YXZlV2deqkID%h@JȤ$g(4͞΅i(B#B?pݭށNt űJcDɉzߡ3ea'Ov]j WDa!zBa(DtD3M<` xxk޿OXSLjȩ(295o&b[1jpW_l*Adyv0׃}Bb'dlqk p]U?|؄aHW:6Ww ~Eyn=~璈'0 D2$ ^=k4E?'B|?IL{s&Q?+Ϗڀi߻CUg}z zXwW׹St=X{-r{3 Ib~1G, b4Z~uU9f,V vh.`8.++G[_}F9ٲmݡZmzm,/3 y~?d\FU5f5<$BDK;qX>wypKbwȩͳMnߺIDʖW9]Hqh$@.ьV/Ӫ,nwI'Tdv{=V~8a1gOZm?+PFڃ6jp6Lg뜿xW_{o3y(FjOe1^^a2$xGZ':~@Հ6 $Y"{fd,(I4ni4ҍ "O,s Bux*z_aKgrdRI\űMPTAHgeDqS.1V^0#,Qp,rًPf@.'L>{$O4EU"`@,!n9N)A$04M\;?YY]e|D<\ǦRm/d)**mc`͠ny4OZ'nsS/NQ>mBZM0 T*aȲL[~ueYu]$X G!G}UQ6я[a'QQp Q]CG(iiţ3$i9ϟai ~p‹039\)5<؀G<ح ׶|7?7;+k}aKKѱѵi c֦30ԳXCG>Vq{{]cK2]SgeevxmlsKʶ_=R9k-keʋ6eGOP+@ի8!a{HFLU˲Ŵllۢ&~w$)6M6!`Y `q~ߍB"ob =:~  X@=Füσ %~b/A$ICB-IHRA(md2ZL0 Qq6@ $;@8E& hcE٘G`pԎF@nT ׶\X2M*hdiJO33=I"ﱻGvנLc8-gTߧ>{QRp.I*dUHdF+1\=8'9D #wxT*8( ~o.LXp͍8jsQXXdw[fRiBrNyi M8s!!8GR$ocC |U׹p"kkH8֟s ,IE{v#T ۪]VT~͠U%J*/I~GM ?j}@(p /]bYn߾_a@M~/w%3\FI)/FLti1yx"ALSRd~vt&C٢0q7/PEɉ ܻC:_V)j\>K?F̥LoΝo>jyb\`c~7/ W'!|M$s"}1qSIJWxg_WIS%+^Sk\:z$Ib?~;_ 2"V GsY? 乒+Kf #I2dfUeW[T+-jQId2k3YKJYY$IF0syz_-#3>^~=?y—"(ǜ;щ}Tpݳ/vaP=8^HeA]_S'#ceJt O Ð]"Lnrt],ˢh4ZymcY+++~! Ͳ㰰͛7YXX0 R|JvT*QRB_!BC*a Air MW]y (g1D &}LC'2k]'>N|\iFuRFF6cfzz=;ۥ+!qa?xf<@mQ,PQ,Imcwl#%hΖ IDAT\AHIqbʳ#Ie\ ϟ=ዟt'RQq:n&oHR(D*} OP\qDbRe"bu}v翺MRSOt/QڝTȱ]9lrjL&A͒AȐfP52ϖ6쳟bhCױGT JTM%e)!%̢NY&tu'2%dN2*:=oVgmI|cT,q\3idX2&NQװ+39r Qځds2Y|סVeZ[蔕e d&\:w,.\˲vջ/^ ?.QA W0f$099"|gϞ冫APLN*ZrM2lT]c{2׮Vk:kldP4^M>GU[++o{aytuܨŦs[zHŎFdy\m iTT-n|D|x]bJY-4ī KlSzv$[#QQl$2t]ggYYy K2B(Qe,-JKZqm[2EOdolhu^,@+T+XjLӢǝcŷ]duie@d*tN'l(8T l4ZX]YY1\.˫ ~yqɋɓmTru SWquG1ZrûF:vBԪpgL,]٪ud""C\?"BUJ2<{)訅Q9T+B(ƹv kk+,*{i[fȿkPO /g] 쓟OTbzz399ǏvڐpP(Ni6C™bH\hfz*N۷os]LNƚt;wW_a6|i*d7n AlfΞ5:ʏ);q{H{@=K>h VksQ8ݓA݁񐖈B y)'Qyd aý{3ߎE˕:-1?ZK+[T^e)=-YݦYKmָwdתS{jZ|n`vNwͫ/N}O?}i9(Nfyw0#}ɗ: ^w +5L+a(˥iZLO"=~=~((膉ah$L`ګPą٦e@H% p0"R}}#=Hnݴh%JQ,)CRu\yXCL˲4^GR!F5MC'Oj5pU1 tH$H)q]@Fh;^> Q5EF:2b@31@i$q J&l,!Eհd0}Ups`UyIl[{P;f3(BFQVsOyL9$:ME=$=a^?E>85*H0:ՑQ/:( B9YvT%<'@R,u]o qlZA4u\;fpFQDy^ CacB\E4$W^4!/~=2xu}gY֞,>eQ,|EQ}0tf:Azm337m,ˢ儨 $r%vt wt[T^8}dIlߍ$,wHP\@ˎ!ŹE& I6Vwbo+C@JZN=w7sF>d!7>}c;?3"O(OF\ajr EQ, .n\.? |f'7ӟDfj 3bC6vj$~OggQ"y3Iohqgq;ỲУn?irbħ?ރDR!tL_Mm"v?=H/:Pу4OsuΪ5/~ vn].)%1 Z |U=!b0}0ݬ]m͍uZ6BANQCU\=pK{,R"$:2҉"/fR=  ka8 벍>F A5:+"#y$ 0]z}0^f1Tfȩ]TU%_'T>)+_2Hi+bҦ+K0-TM#i4w%ds`ffD2 l^+1YqQ.'4UӘ373⌠NS<$'.l%ntWk<_C.LWfX4,>4c`xId'XSW'FFocsvߵ71C ש9qwu "cwG2u{(_5;wyP5.<|Ft'pV zF^({v8vA|bk{I&T_`%0C*Q=&l94MTl6Cdf ׻$pN|nHG J\o}ۛ9(]I$/ R;[,n09wNMvW+8T:v(p7Y/|q:Q i0`~H fЩ(M=ȡU{eENQ50Qth}A'/A 6XӤۖJEHJ 0$"k!F AtUF.qcmE(,&8 lmWǸ$4}.p(q􌝵E<t@B9T([_]z9VD!Ϟ<' <COKWݟW'Vn{<($":lT}EG8b"<ZA(Cyo^Y" C޻2R=D+MkHU :Ail TjD;iLNM\F|G( BJ 099A" "B_4>@@z DV"D2x zI CGv]Si6؎C:!_( ̌4 VJbYaG"4bRyB"X,h4`AUո[ d8(x&^|D`cm3Neﯪb C|(4ȤtzۓV9d2Pqm "Lc:NXAy8g&u$!nFJ%+q=z˵ᵟQtƗ ^n`mJLXů\ ُMW'F':RS_S2 Tx+ LeߪK)z$?;" dUP ' QE}0$ ѼϜRN5Eű0!抟S:4{)nwa|X ]K0x 4iu _ro-L'-n޺MX^];0BdLvA!"JХ $0)JeȤt6A"aPB຤IVVpxAfdƸ2+m339NcX]Y&+HJI&Զq\t6M&%e\jY-dJc rN0|#) _495X ci:AZ$~ ]&~ҬѬ$3SxNd:ō)|V #P5iIF'!a$Q:|B!PHN@:M#Jn4xdf/iHƬkJ%VihNVE")k Bh ISL Bץ\F8lFR'vioiP, qO\oĩhJLxbi`41E.iDpbfF:m~z,cF\EzbEd3I/c cd>ƘŋcIe2Wf&Y\\|fH b}kLrUL #LN͒2WGWC`kf޸+PTHR/ze'?+GoXvק}H}J}9q)3JeaD:d\AS)35> :.aR0M( Ct]#!Z ]@ ^UXf%=M{k۴[MgncP>RQ(,!fBK+U`:rY(XAF0U\zRHjwn끌gգ(B* 4UQI&Y#LC EAݨJxEdpTL0,Làx(BA54t]C4Dt&:6fa|MUBѠl ,TEB3 B&czz% q= rLE*d26aPuKЧXG.v0 PX ᩢǣN.ŗVZ'^IbZLm0'YbѵN}OiTg>kA96l &)eSr_,lqٗvQT~t&&VιB:eJ| fƞc2kbc]y+Цq痿F a.Yn\c"kYnzq f& *ʽZI>I|O"Z[&/ҍT>1kbe7Z!id4U0M4Cu<CP^auf6aDJL"B,bl| Ch^̎!VJ&b XVl&MV=nFQl ɢi*j ]55E"T۱iud9vaXLMMR.WH$ E }a8 KL,~061IZN "O<IX`sz^MqZCY'g |tz.Jzկ͹4NRҳ}ܞ=bWNH&+(כ %(a̢(^m45.HJ(BWU|vqe%s]lCg> %jb 3"%Ba Ri^\3$IHj|D.eޟ8_> b6|D%B:xl4ya8XxFs¶GO|![8T&tm*; +V?|{CWi4۸n2NgOi6[iڝab#@,={ƘCH.l^DEWL6q:-,]G(23dj&)oocyd2Q,-m4/A|ߏ w+v_SJ|ϣ,}ٶC"~]{o7x{(3{ć[ VBCAﶛt!Row3{gzPzztX]ᾂ =C?I9v<#⑷{!]:6^$iYx{|1k8a2„6%Q[-NUJ ȕWQ,B\/]0 ˶9Y~xwiv>H~uF/dv,CUǓ8]3: =yy?~uE\Gqlze qw{~Qxq頩G\H4D <&t{h*" CE% \~_Q@|$Agb?EhHOJ a:؎Rc|\6 =NL& R ( aiu2N}}= Aǥ]͟!d\HsOױ%&oqaxoDQ&Q5P:AqUbч} nqkĤ4#؍O>Th:%Sic8ɏ9v6ҩ"(o:=4NBDS_EׯG0WL7?ȮyxT[]~&D(BAzm響01_}q)t_SFLO:Ȁ@ AQI%,аmb! [۱3P(I:)Ya]͠ϓL$b`$IVV\N0GD_:KK[,$?/_T }L IDATag)FDJ)yo)X#rP$*{DdM>Y ((g}ޓ]a 6t13@ٔJy>,̚*;dRօ4QgLPȲ]>:R)JMS1TA$RT2iFLZ0 i t]!GЂu4A\`~wIeL2ٌE 3s36d1 {5wyXZuAA3W,eةILbD08 d\e6iBic&膱md\D2Dd2ed2itMjlPubHqk9T"t|&P5꺎8v'Ԉd&xT;aH2i111JW(Dlո 'rPxK1U`iOookVv: }iڭ&jNE*;d)omIqͳ{TP*ftxDtjM  ++kۯȊ|qrF` ^^0 |?ftИhEАQDբnh4ZdRB7iFvPuuJzvhIҩ$J4z=\CQ|?]LCCQۦy#~wBxivV+o_?O9 <u=;ݩw֗Y?ݾk/${>_uw(d}e ?|!ɽ͕6WEkl G P-sɋg8վ?x3߈]gqO(~01hڻ1.A|ueN =[@*cE|f&YZ\$/АA 꼓Q.{&a3:et(+c /ZX^Q37Z 鷣$DfpgI|w^f[N$C'}M9ͣs)@PP$2}YQ)K׷Ǽ @ Gxw" %hFCF]Ou;SM\U8owUUB0 8D Eh1%?ŗ5t3v~AVE|XN*샶 yx@ (A]H?COD&k4٬i#‰I V*+hh6V=Udb4*; vfNc}_\ڛq̣P$=A7 U[!tFs~h0DUAAʉ|qqa&a}Qnd20P>a:\xll|Chī:/E_A$2ADk:_£{>7YF|-8plkї@\+qbs<?o cYą6= 'V c86]Ӑ =8(;%Cr,Co|/#C𼀯|ZgmmǏZ[q} vqz*ZL2@FryULLdy<i"b~oz~h_ڛs*D3P`LQqt QIAq>g=qD2*M<^a/{sFpVy^_}zW4 EhJ%LJiJ187[ƥ:o`Afl~{ 081kwQcpj">˛rl{ʠ,_ZN2ضϖI|K#a;mJyJpi])aYv}@awD} aW`/7xEe' A(@pWp}1a}|qA4x~;"De4ZB]m (O~j\)@0WcO{A02;*D u Ϗ >^O?'5{[̎6RCSjIta66+Nm \.D Lqi07nb(J78vLz㳳Nd>,`2-`8u08&ffO>壹1wvh4#靟2QY:p.WnΓ%:Tur$nG6;brW2onѳc96Vb ^Y>}밾U۷)%b᷷y[|ůX~zXF3{#&s& ϞbmˋeBEf/x_߰Ydu(d<Ə"45r\6PTMCUk_W\N!Q)翛4i}7P ʙҶ e+C3;k׃ *o}w=+q1_xk/>>0%<\ɓ^ gl,.>F?!Sb:3b1iyRgD*q* }j)+2I ?Y CB౺ n<{VLMN> 4=<~#[;cF UWJTAA$[?JTw<}#KjD0⾡g#^-/m2j2No[5wHRF'ڍ*TհaMuO$:( َ\':'ѱ:: >~`h7` &I" pE!{@W/=ϣ{ߣ~uQU8tF(Ld"AaLn=|?ؙ* qi>ZfjXyx}RH"!BtZj\@.ATd$QBQ^ob&dD"P:2vAVqAPjhI,z qI3RF ^uHC (܄aHEyq.%VF>?"K뺎<~`yy!8lKI)z*կCu,B5!P5l;f<%jW?.+2 u(z'^zI EQPa ?ڡsAr?1y2 l~|P林Axy\6~W?ʩ FksD)v\snk{b(VotY[?f ᵺ!yzs8uScR逢=mǝh?wKWߣ(=.$DQe/1Iw8 ]^C"n'h:tu\5#0dlrv}x3 Mx( ,3=QBtl [4mc\zvID5* LtgfgrbKר6 >"S_Fygs>f*"G 33ԫ5[#_f&X,!CzF4>F\[V=`0m;{A¢k;(BcfzmJ<;B"jw?(lp\le>A-"l xGӍuވt3&B*A˲E[UU'/ȈFd9:BPUgӳm4²,PR#Na nݺE=gd!ǶMD"8FsXdtZ-|?" 2d!PU 0b f B(؎faԱMQMdRcmms"0tTB~@:d MձqP$TUBߥ^yGk((D2ƩF)+M23;D!hZpl@?w0!aj0Msx5!1 KvwEQ iڑPn`AܟTVY|_>37]qD"1} >Įi*0MLuެ;+=|v9)5Zr.o,N? N8EMomgo&G̗u\5 ໿͕O~K4zkIV8}J2/6Vڨw..1h4xՙy*yEVzZYJ')z};}n3 5~353Å&q;mqvY_p#8i7`,K(hLNNÇKTޔgQi5CӲ(G鴛,/?"]A%>lTB"TUݬs׿f2Q AC90b}}YS pj5)*LLN*!q%rUՐ۶l`q@xƐ') pbb a@.7"{}쁅$+a "!/ҽ*!+^ }IFݢ?4-IcM\A#xn3P$U׹{SmnGclf0t0t:-uﱸ&\.u^= w=0  F3³(%ybPŐ\;&9]EsT+|0?OG7FjV3U"E@]T7 bYnC3X$I,vPٰ$iElTB2rDԊ1AH.Ib1V@ IDATs\\z"j-ν9,a$m雃\5QFn՘٨+i <ɉ"*^dCPThe IddY&I$a eM͋ Do3_pyUCcT=nPr榫(< }Ibli-ީeVqxMDV$"&E1iFp(-bgƮiPd v{a@++Qm!x"u,1>^Q.- !m8.׮]Kkbldyuva8 @x*S$ /IJMH0X^^Fâ(qm8<f ,;S.ؖEGta Q20++ D "3_HQ*Qz}02!YJ?0L8'o?~fi.\0\Ӵ! ^E"3PWnw螎ᢙuzΕ+WX[[4MJt]>#LDe qa2 wR+oRlF2EôރKԟohN=ޢ`Q#vUff kahvI[3YY= sQA u.I$O`;/k'f { c(*?n5嗨I~[nPĊ$f!{Zu76X`q~!Xw_ÜvminE7$_\ U|/.Rw7]( <=;fRgHkk10o?rp6 aكG< g1==ܻwҗLJkz4q[ǂmL0(k:BvK( R!5Ȋ$%RUUp5~{ JDwχmUUoAyc.B۶eyXn3NF%,z~ܞѻ2B"Wx7~dF?//;ޓL'&uJ5MvB@0?_N0 LtCH(8iqۿY10kj *i sTW"k5(rn3=.GM߆Zڕ*2,{3wVEqs/I3YJ&jY$ 0BQ$TUc%ᱞA,lGG3V({.<7L4F⨠(ΓCQa;qE446 Ðy?OO|k[={~OX!0xds%/I&/C)aZoy I09Y2$$S,^#X$I!}+iOʹ~sx/}&~ 5}M4=" \ZDD*JGwlfg] t]3CZIMuKR?912K;$)8wIXM7EU4M%0HIzIC,K?⤖x7XaIs͛ns '9}r[_ֻ:,ݺQ;o2)|qqs/P(ٕߌy" vF !+ȄAlbi;еX˛7_ t] (Ya<\wwkzAXPfZI)5: $qPT}&AmTݠZBfpP*lSsN?SPh@32sGn+bI(HXbLuJckNC<4"@UsH@LsZ/ C]7(bZ[CZ9/9u4U6\jJ$"tRYT|>\סѨ R$TU"H7b, IT Ȳ>]"X-MsyEr9nܸjM NĄqH>,I64 $f5=ia( 2w n5LT¶mX$,;e(rl>2R̹*".vp Ac3Ka>lz(@Yo0x MM͛|;U_bu/`*rxh!I_9u< ̑RPW#!)w-9djs LU tC-`Jo> eWd[[Jt|?Sg-Biȡx^2s ̔G^5]GLOSMq"΀S1 ً&nݡ:5Tم9Y_diFVUfX*r˫8C[G|n޺A6|U& z``Y) fkvk.ocvTڽG vPant$&LZ# ZL C#bB$!!˶ d|xw.5*OgM$kzhbQ Gޥ|Mql MSVB IH"!&RQ,)}A $)F ]%#L0-&''k,h1 ;Rv̰G _.@< 8{vN6:f_7cwtk,_/ ς'H풛L7G>KRH}mY%Pnws, W/%9/R'Xp DqI6˵- ؜7678{r*k}w 0D6""dbߢ… ܾ} ._̏~!;W5Md o8RE:7o&"֖!+۷Ȯcqω5yh) GQI9٪G) t>iJK$㶯}=EޓeIm6dBuwn&<~/}0?W,iꎽc1̓YFݽC}u ˶B|"K $#bG|Үy.`uܼ~"E˕/EwW,D/ R-dkУM^y0Sjbo;zzzc@xܾ pbufpG'Jq8zS{.kIݙZE;!^hĨ6w?)}VWeS'BLkꆋ Sf EVcҚ!pE7zX6rwǶXY^uczʘ$FA:fRx\HcH\ץ\u!KKy Nʕ+QJv#Jª"B:3 $CIO@BV(K\xk׮q9??qbI~>2Ȟɱw&}~Ŏ8FVB) yDaGlAN6i֘ |c\o[{,MYL3v9O0r;^|0HySsG۶v=`HϾo;kzFӮǠduRݵ'ƫm}r;La-;l;HG۶^#0}FG Ð0N^k> ,a9*Bid-#Zv1|>ـߧ>us%}s?6Zsf:a211AVc`\~˲0&9\.G_$ӳk<\̛Oq# U}D(ϯ T,Y`aU!oEl>TR!;H"c\iZ)X>d.84QY8D^G5tu#ZYV1&s, yDzUjE66q`/'LX]`fn! sb~uЌAbHvCT!IiZM j m T&'tXx( \]\>O>O$!P,$:~ ySE KR"1J4 qh4LMM"m@*b(RP~,n*6w?0@gmD:Q/kLfaW%(#'R.*m hF;u."-ɄasU̩h\V6 2!W;yyZȲZLK>=@pGG sSn4=jX$IXjxQ@{h" TMu-t]#.k!![;Vg/uk>x=<6;J,ǜ>1tm7Uw}KW e-?ǀngRe6 NQS(NilmnUvBBTkxc*e&J:cdG~Vٮ%m$1ˎSX\$ |@.F.Ocs/UIMG&y.,j9 Fu$vAg>'ϜX/bԦ(Ll $zoy)@eۨ:I+O^P3>:Z?*ePQNIL}s܋YYzi%)}׆+NCMddr'zB #D8-<KOx$9Zt XA^qe\_\#:>Pc[&[H:fYv㎋H SInVXbX }( 1M"LFm0tG$<ǥgZF EUØ@bbBŶ-\~&Av 0ysCb)Ʊ] "C(s0FV%dEF P1ُm LzG}&F21ΘG?cEI" l̇" uCNHfSFt2oR2h:v8Se?q䃚/prae(BsD#b8 GQ8F27?ڷPd8$%/-R9/܏M 5ǹ27>$2h.g{V IDAT8NRIGp3ɡ"0QIQՄwLVTEfi1LT>C!8MUUY~蜮I|gDfdXA?gfeCH`2uwZ?F2wo!fQ!Ğyc{lTv"&|vBnXID즟&J^~jPlKO-]:4CmYAeY[ =Jj %A!\I,kPTʥI5,[>uR:nesc4]6V1M ! \ǡAYQ8qtg9O CF篢(Cm+0fPi6L pq'Y< Fɟ((C'N`'1c=h;Ruu-S'~Μ=G؝uniB5w2dɼuVFVz?lHj{G<_բ'j,/*|=Ϯ;h XTFgzzW_5w?N#\}kv`p>,Ԗ} Gy8!>-P9k<^YǶX|v;/?" |'yF}/NZtڭ}w]=dH/EpeA!|beY躎mۏ*;$177Dž q~Ӌ^t" y.1??Of5as _jBryfټ~l&'^hLM<5Y[YN碄gܹ3'N6reIˎ<\e@prf"CS$0Q[|p<1@(I/խO3t Ezn`:S0,^ SI6HNVBA6^XD-8VNƩR!mΜ=Cy0 dr**pEי,,A']D1Ru;E7i<Ѯ~ @KxS6_CulAtrF"}ԉ*ID\wɄEIƹ8q:F$}GiZG~F92/\6$kdX9G1M >A2"oa0??O.öap+P[05Ijs R Dzb&!/r/qwqqq8(lkC9U*o\űM G1LLs\gn"G#IܿdA%:-SӸr+e: `"0{cAqجw_>}@\VWQ($N/(<|PR7:\0^B,I %%6u2?3ͽ_cGc2ry,,,"3L1x4Rj8Gxb-/g$h3L-UTJe] T H'lˤɆMe?H@)j"Z\SL&\DLv=axO ) $iR bdhϢj}O^VqILgYa Jk/2oh zHIiAh^:4RMQ'〽Qq }\P5_|:Asl|W֑eU>DJgůwRc?<9ӟ=!8<K9pB UuQÈ._&|4U=V5ڰ=t|v򎬥'͵eZ |/jHe%Q sl7}UUN/ç,n|hn߸EhڃDGTHQ:L^cFQo <{JudE1a'&v:EtM= #_65kى+٪oI$)?{% K j!vV'=?~Iј"gQ +*"m7YYwj^%Ο:B=v<&&+X٬!AqSڤ7xqÄ37>3@3Kt:ܺu) I/ecTU5%_fY rTI'lx뺩1 |[./vC'F< |!{O\}[}?{? )`(G$gÀ Pq4u}$v؆  qç.t;6%yھ*`pI5I=4 |@n_%!r݉IX 4q5kG/ p'`;/ ccok&ܛ%;1*oDA@GSdRu MEV 0 2BE6>'Y *6h C45b, dI´mdEPaLFs{ME3gVoew|ׯsE`PQ|q2Ym7~f X~t]0n)j$%5/&^7,Gq;dӀ$5> IIdݍ^Igυ/ęoQ_{f\CevYYYZvIpMy,2=ayei$siڨqenAA.#)iZI}K $+|j$F-Coo@ r3gYu]|?`n4i:'0Hm"ys$__o-B\oɹ|}޹6hB!އhgz.JžV ٷas=)NyDB>G?+3gL8{+M.>JhCUO37SPP_dUc" 35ܹ;F@W9ub.qn"0w03=[or{;@DH1 bD=A:6911!<0= 큀:|씝;HbE#d8YGsue)9|a}}5'M/:'5h f YGG.% GG`"fA?DC\Dz~@~t86,=Ie'(j` @LsmTM# |*{bg z0$re3ey2,U3c̀asN 3,E|ߧRpu螺fB%ma ߱u^Y*Vg4ڙC!ppʊDq0m)B߆XZZҥK}4qt]'Az;򯒂@'F(W֓י<'&s4Vf}ڸ!jlσ?sAP Yyv"l 膞^@²ll5dcʬ.?EGT-h56O/b{tP89xHBЮo2]fJ)Jյ5& Twmw10=:fA ]br;t]CSұOx>MT^z]8&w?,Lt5սvLq^@c%SCtxw2N殴8=$uxoĩI3p죌QE'ٹe.Ȉew56z=^v1;l8j~NG( [֧"*j 0;yilq{y[2'l>|o:ĈxFMqMB 3 $0>ꓤ맟=>|]b!fK\f`ܺ5Fn׶8(f7NB}5m{/dcsׯ1Q*t6>ڭ(έxÕ\l2Un(OL>WW?cۑ>A~p; Z6*s7W$D9Htm~s0P,lWnɲ"17aĵ6"!˿:N&1A:`yG=˨E8|e/fB=,I;Ht qA$f6X8kE& 3a $&QpE]$- @=L{^v|n 0 ׯ S8GifQ#=f;"{ՌeǍF0SEQ~s@#,$+LO"&G|^OHjl5{+;^%M.y]U/&&i$5~j(7*;Q;l7"er:-dt[-$Enb (zZEql8U !|wMa bP1i5M{P*sEZ+SLQt#d"$(K(b6f9=8SI9KRE3` fMam۔e|4X"+'t]Buw/^D$\Q80:y6z1f鮻Ie<# yjR!x@PPD|8Ap]\_|j툖—7p{ٵSHRjvA3~bE|\ …a6ϟ]-B@mnI.Kd߸gN! t~wBlws{s_"/c]$Ecc}VWVz'nyϜVFkÙZ_]|3e[X\:MXja;9bhP~Ϙ9y|cݽtmՕe$\|jEq(>Dx895݇w YX/3$7 I>33oR*1{=2W|F3?%T^W)R,=<[9FI>ٴn58wC$(2^ MAb,!)#I1[ujuy6~Q(( MBy   *hXPMqQ UGC$jC=\.y F $ma_&Pg`[ǔJ%,eܻwK. 'aGM4f}0R(f P!͢~Ypݻq$4,}Fq|zu}MUU,BUesTn& lj$i|5H $]ӱi4An4 |EV鄞cl51 =Ygv$9sϟH]Y !bx5 š9{h{$3@5ZWwԙ=|/"2+*Kuw=ʐH$s/؄a@ݦ,.ZJ& q5DdA:[u_D!ihqm )!bUԞZE,,,}J%>jW_}w}>|Ot*?Ϲqg|G\|_iOSZ(smmM0<@4mXlje4ejj^{h͛Z<4RJ>#fggz渔E܆CGo~/fCe&&h;-MlV4릹#Ifڙ4(JE S46X(np/L$vq$-U;{Q|:լmf e}RGo޸AgGʲt{Ǔ>zHB=Z-E_z[,eÀl iJ8mIrBVPiBRmᖧi5KZ~H1.!lG MXBԧ*w6v^?Oh?)Ifet=yb>=$;zs{ɓcvKRح߫?w- HtY섐"+6^e`Lj"Zc r )#8I@= IDAT  MmG I7o  5?`gkN$n`;N*YP Y7&%I~X(rO /LWKx`/YlÛ>,][oI{ 2ai\|$Ixt]yeqJ)66I'’I#ݘ$qlE'P&J4V'1ƀ^!.:)[ePT&EBOfwKR4f52I/[$|w.R8Y:nURouO=.}=v T*!kgr5 @,>kG$Ir@ǣX?CSpYJh/G;$w{kl?Olm=8 Y]/@!z>WV7u?oq:M:m?6E0N56ݬ7x.n{=rb#~:c5*g%ң O&:+x߯0a?"س=/^!q Mkk'ӓ8 *v1/C(??,#vv FiZ$lmm#RL  [Vl.:71)JT߄!6T˙vuufAg}Dɶ }~ |QPi_jÐ?E|??O:HiPV6 q9k\"5)Xhlۥ{(U H93$TdRq@AiLzN+K7Hm~hj5$aee^$yTpxMƙ*'&|=MkMZR*RrUmwȜycu]xYhfF!'wL>sRHߧ65 qKS2T DZ tDv ) e;XJ"MB*?]Xj2vB@l,1JV.G8 p $+ ^[,UG(*_B2;SCYK|Gۛ\p qFk!uTԦ6moNs Gxr-66IdW,ooM~3"ߧX*v70qV~OH!qSr(i[IJu m Z;= aNr9> ez['T0;%%J XC`;8ژ\Be ,Ʊm8?ssVRtNc{ NV+()vȤmY 0( X*S,8NZNXl=Y!l^{8Y8 ='Zkl98.Pp|lp3 ͑P<~+<qFtC5qsLP@&A1v:8h#@(\.hMa)*"p@jN T$XXA0(DP߸w^xA@b~~R SBC_a`X|uoRP*F$Kzwy-JҨ~tq`3V_j}^[K|*侴â~v |R,~eU6VCgk?Ncze}$rF{:]nnk(#L^?NZsnQ/fc[(BJg?Ҳ3ěj\wI?SRveV`Fr )*.1*Hi7c;mrRk 8kI,r "? )~ HI,_H4)UX}Y|?I>³5_7 !+\hx!KwK5lBZ.]DF\t pr@(m,SLv!N2@eYI)pr20'Z&w9^yspW&1и.Kl8jkIX}HEIʥRuޏ%ΓB!(Uj\{Es@Xfqq&H4ӳsLJ0BV;!J '"lDum8T*4b FP SfIId![5ReF 2FE`Eck;=XeeQԤqRRV&jL6NӔl2c]J?hMPP`x,G ZdJ0I65E$Y]jI Zq\z׮[oyTU#(hqL {Ԏƣ@9 zZۥX,󐱷P(߼Ï~eYaH(Jqn=-̝|aBsɈI>J/6q5M`mv %h4wXXԧڛ(4ܦ';4ԫܹGE%ހO;X63 I`eJvMR*|ÇOhG{q 1:͝%&JJWW,/±-ܧ[MD D6L" X ;[ Jz8Gqn^ZR ??ߓ+;> !ƍN$jP }ݡ<-I)BG!actz>jRH8˲FBeF)VCيj1Y-[(Q)Je)Q'&Ff,51LD-sN `vԦ*$I!3hr=<8[(P(WV+"^R1b*a'RH\xYBog02_" C(тTQI5J*,;=Z#Ee̗f6dGbnooSL4Z.jvM~ާ_KJ13;Dž\&:KELuiZxހ8Jx #,̵+/ L9<RI22"eM٠t2$[r8;gx|o|;C*;uաXZLAͳw/lӉol͓ql<~wޟƐ/d.Z>=||.KcΟЉvQ pg*{!|Igt[" It 6{X:j%1cG]boP*H~Riq)jBo@xĉFJkS2Q4|}'ȽB?%J,\,{FvKhLhdu&$~ku4vvv3NQA1)N-leE!^oЧ㺅 H)l8JF$!' !ru<2!I W^-:,$|6_ s{ۥZN K%Ujضoyc|84VLڽ(C?ݬIę@P(!<!$m}80x#Mw Shk$#G!@8)Gsq]Sk ¨.p\Z3 ($I­[h\~}$QR,Ipl&Irq~3>}"xl'N;u?ڶv!-Lz05X qҶfI7~X@UewOHp(; $R #{!,϶=dqx@i"dF埦$јFiFio֤ev+:E1 }tsa4 Hi75F'OiWˢ(dkc ]T6a.i D'DC()hzNt k#.af.7\*k5NP+WInՄ:ۛs w{<붹 *2^/Kl~ JAHMh"{i7= 1@kL㸒8IFbC‘-/#u?,BÚq 8>i³mJ)H%Qڳ 1e=zD^cjjn;E׻, mm QPTJ8?ͭ;/_{Kse>蓑^B7>;¥\r>~ Gٜy|t&թioiti;)R+17U~wZ=LfD(VA@TBW/r n  L%o\_~NS~pkvkH0-y+|oP<e1'xʧ`}2=rA!}K`w1aDϪaF4jfª֘̈́zamqM)F3XZZb0"bޣ+9/3U킔,,]f*Fx٪:7>Mi5^}?( <xܹsr=-^Xb,k-ee2G}vz}K){,]DQ$#G7n봸r]ڝQ6 \Pt2NL ~PD! 7o= ׮,!c;4MT*,W_.T볈8DX K%fU>7osA·b||5 & )1O!|Zb<q\83B8 G/q v(Q]đe$*Ӫ ) R%0iNSLf̝&ZIG8vq'jzKl;cL5ܘ(s>3vϤSf2پ4D,&#=cX_W3f8̨FQ9jgs`{9aj jvz$;\~\nj$@x:~硄gλ3}~8sZG='-ɝ~B_t-&vJaף̠#JzunJ=vD:I}(H$s6NS5tocZh\k7soWkCx$B*yA@e6ׯ.3;3I# #Z!xLMO#Ï wA/#w9 S{ :%LGxxCy>J\~G_~_}c[ PBi~@Z$gnMɖ^v{G/FGgˎ[~Ӥv:\|݌CWN1Vsslooh ʺS4Z;$:en~0i;RTE,JHaHkĩ$J"R \@$DQH$n/(Ô4{Oq޾6n@Osb~@xݺwCYO+AHE,!c;4۟'Έڭ;IF &'ү׍l3i2R0:_ _u uI٥CIAo}DY4|ƣ0!x_fx!Iv]mLJTٍ"S=ݶIo0Opnae( i~!&XMh! C o%ZǸMG(eE+AȬQwGt>|ZIm= +bb)JYKEla^EZUHVnRB`4YO$ ډ2,m4!IbvM^DZU͌ڝD'%%wy  0S8J.J)ffAR⅋XD*EX"L"e9a4kh08]R¥˗in v8C^n133s\z$"8gta0lml=}eo 9F`?EJ'd.p9V{z? 'OY&~Ce? I9ʹ c4 0dnn^xhs0=#Q*{6.hǛWy!ˇN0I~K 럩Mk}!M5w4Mue#[t In8'IBjk'/ |&#:L}<>Io\8i'9:mu9kO :BJ0ЩAI!π¢^\* <q N`"4Ow,PR5lY@;Zr4J<BRTMi4r6ŮoJ3`mZv k)eQV!TXCĬ IDATR\)!e 5]C* 4IMh')), +R.y*E$caR*RpٌԦT' zmx i0j= uLF=Gtm{qSN*,Ȁ0Fr8^<~K.Q(,D@}&^·Y]cx3恝VT˘*4hW͐=BS1p+|yVҥxq*3\G?>vGp RW^VqeHio@m\\JVW%̥KW-OѻAӣP֏DE M^}:vnrʵ%+&I-ݼƩ/_l~8p즋װDBQ0AD}+[߾k 5i\{ lŸc%^~[غ'\XN"-$Qb Wf:&,R='=Yo*:E1t:8F3wIӌ<\I*%{DS%kx:s{jM#LPJEjҌE!FAىANl+;( Y[[RJ8($oX +e 4Z) :0>W):qFa6#r4%A(eS)sF397^U~o |3IS}3tmt)K,ͱĽwѩ&2!۶'eQp?xpxT4,'d8~Όa&l;# Ðb8絽[c~4$gG9<-Q>gY;;AVBPI!`|(diInRuW#,,K ǭD[R0>; +(7&ٙ*3;;ÃMtJnanv5ۥR-,./]۟lq"nj"$q$?\qaicy /B1e$Iq .m:6;E>wKa*~n@gYJC.p" Ӭ{->O` [4 Ze Wۇwort~Ԍ1X!foŤ&ۄ'qDV*tsoW|GJq*8ߥxQ1I~wTƁ0eto?0lf曛ƖcNB-R2 i0@RaJ)b"y? b|$:`TBq'1%(Mx2Ry9k}2&Yp착0Ea(5tAilo8iwڣk V=$p ii5i5v Aդ?{Rw"P.ǽ{ RV{` H3f#Z=/&4CA]{_~FV1|pefG]6ַQBS%."u[($#ڽ$;SE/nAT߿C82T/hM)@ FOvoGQ,'11?iuO4ˍGc>=A11%l!y=ReJdgR)2t-!rٛ3f RTfC@M4|"wQ$r qtr+wN{oA5֙8n$aQq\) 32MTcM{=Ru;؅2rI.umDQ+$4i-0vIt"F[i:J-JB$E7&E R2KDdCC{}! r6pnyR]~7~.e913b9d4)sI()pH>sޞ٭{?/C_;La-:գ:ჽi7?dNvn bs\E'1n;7.Dooglnnӏ?iM'mN^god{dZޠݻYݻwn~|- k|3wJ'pl=z26I9ljN\JL֓:g8x,:=)'_~u]]YU@BJJJ2GQ@\Zv鶻4[ )z:m%(2˗/"0aT0=57q=SN4s[w:htEe'=:ETREBԤXvFF>VAP% s3l=&I4R,:JƐD'(e13;$n'f5e 8SaӪu`l.IX>aKf0XN,ȣDeRR#oPIp?)͸0=8Q zұn̎μ,=Ds\nbǵ ˇv:9\Hf$3ZF^}d-dNՃsP( EP6QX$]4Js !)DqXQSć:@ܳ_ FŢKZT-uˌzfV!bqllK! S[bv6,D4 :-B1q`[<>M~P<5>Qqى$Y1!siq X TKlғDax"@(X| ejFQ"*K }?aFfl$M pl$I>(]qS RDZc+NSthQXW7rPx|@Ja{쀑v`VcvV c/Y1Ib;`$~Q'z<:F[o1t?FǠqqqjef:sq礕cr)w^dǢL nc=hQϱ߹o'(Dсw~lLR淾cj˸*:DO>1toj.s:[zM,0f}PD K[;ԧgY}B@aa*pdia;OΌ+op "̗ȕ n|}=Z{TUv0-<~M믽x2[Qǯ9qw.RhIjtv;2Wi@Wyg2H%u $!PVf+nbDT 3g HtBFUJ68j4O"r0}t0a7TmڶeѭTfIۦV:3G'q 80@Z"-)T*STE"&1RmtJL(e2k6(nW^N݁G$zHc~zSJeNz,\Be^%@AI0̵BqeBLs0bp{xDa&8|OO>?i>wXq=8f8cDp;RR$)j(Ѿ5~J9 cM@h|*Rl\˱JQ[ZY9YȘ=Ї$<5E\ +( C();vyxdiq6%~0==Mb7^}U\KYZXd-_z>,R#@lx 3ll-UU^;qyja4r(\[JU /N؂ >ZŦ̣$$)\\iHCl#jl1UgRTYsytvWc$y, u=i%43vPMR(L*hހ`@He4 YT."ƀ%~/Ȥ=;۴Ӊ)Xܳ3臲C'9TQD٤jg|* bN2ux|lj|aʨmT]A瀍5/]2aفQ>Ors]{u |\J&Ѡ=*Am X\/o88XI-i=ZÖ0}~d?0|vܦP,YN&jSHd`#:YXjuj8~wN8x*fKu y>^Ǐ]e{|Iau*0MD'1*&+HG:EplIG'ɏJ9gc4o}3Y8m p8(IP-O\iau) - wRqqqm[|~ CؖM$X+Dc6BhweS#ܘlTAISRIӓsM d֘o[X.c,6QgD&cTJ!k- x2)%@DDqe۔E|## q3zeDQ۱=(dm)%vIgqqMR摧4%R, -٥"*LcLBjB(uBa Z˱i4<~ʀ@NjP siI{uǀ:)Bxܱ^3Bi=ô}5R ˲m;^T*4ܼyckkk2AJM ,7c#W*lRYil89T{&J4I!HR%1leL;p8/e65~R2520,)ro&IqL43r'ٹf(SRQ= -HO)ƖtdCɼ?thveH92b k;>,Ec瞯bɏ/eYGNf:ϳL=?}=!#sr=9ID<7z?soƇ`<nXtQ4M]WqtǮqSҼ~#:Σ]7>ijFC2aff7qt rQ_:Kل me9L5$ך,ʩ>8'SY[l)ka:铦)a>V?eqjpRqp:WI ۿJbˍ`"m9udp 9 jY̘eOCs޾–{'\fƘl~(/əq'9227~t<$';c<ᘔ'}j /o4},7#U~U:=y: '9O_S[pPR`\vL`m;n`̓ur Y&M5IRa;wH;/7X-A-=>.~ސ%!5$Qи1bΈC]!((G7Ia{iǧe!=vcN_8p, qI,#tV9Y#D=GCrp%wdsֵWx\ ﳱCej]F* xdre|ߣŅ lom2U bҠʣLJTjuf#^Yhcz odz4lR*`9Jf<6xfƧ$o_KSb}t>ȷ^z>/kL$ZܺP;[kُ$Y^p=r* KK !_4\i e@h:kϬ\c_|w}9`v,##2"2#Ef9};j{?#}ƽO>?;.J8DDĩU4fuoɓ'D kpx0zQ(Br ʭzCR>Oꨓ;RG3cEZ^Ħ/ri$Wfφ( +{ρDHZqh=lSXh w;RCIFS*p4y[(W`{lv,.̳v(Ti)BPi6QU(J zvX %Cv\jՊŰ"LIJ*TkUF!Ԥ8)a Z80=SUv{uk #Eg,Zs }8╓Ir"9nT*UFU*#gXḷtUHGItQ&7*q,0Mrpj$FN"ӥ.Y d*LJ2kR):E_V!qH}z4f()e5`g7VVnm?nᄹ[4UnZ^ѽɳco-cr͝.[tG6rI*~]֟q7EY77amsҺ/|Jƒ&'uj ߠlq =wB!r{O֙[l[v6;:k./>?CEYrsuƒ/ w=(=?Gwo$fuq 󘟟O1|iERE/O/8^ԡ=ZN9>Nrkgiie#~5'8WVIdTG IDAT t8`=,;1yfcҢ~?L|S3;7G6ad nŰX^^QZ PUy)@(*jUzjn*S2YZVxC'4H(*c{BZlҊ"̒!PT 4QQmۄZLeʏȄΕ4}a+D>zN!IIa{.alJ28$@vCQ>Z(rHЈGb@ ^jRPF@aQGPe_gzZr;.j;&~ls tzf{Z=ۧb- TFk7޼k^'/Xgt>7XإŰ5X,.-鍈z۵&d2bg[o"T6מPZp@RmAAgq{yըߥ2 twX2Nfk%Q ֶhU˸g$kIGO8ky}E K,uZCvww6ZDО y~?cxR j*g9_qK W?W7:Hub#IJRxDW}9ju8 H$3ȋ@ VXk;F7 AVzA$ 3cXEĄQUPkl岲BjQTTRZiđ~rp2c:b~pi Ir&bHB:{>GcSRo%SMuNq,*<12mT 1Ig Ԧ d50x1,J9@V,nYs֛.׳!~g#$ULFCӳq]0pS–Ip0블+e&/w1>A,ٽ{a﹌"2D<>ӟ~p0j2 h4GȚ O?~ן>e1t{?CMI2p=ǦR9,G?f]S̭}SDf}(X[ߤaQo~~Y|I*t_i_%GzK2="'NA9{]\F74~a^(LP_p%H`wh8NoK$8Gkz:6Q*t( Aјc>k.38f4i>$8IP0QUef jdUW*֟ZM<ףٜ=+'̸,Ue |ty_i+h ^Ҟ[\2pnYӄ;iRyN d?I TUk@:ڥiօgkbq)}^"c4;:~WH t̜|'( sS;̮]`8tCabOVCߡ럎M$!00:rAoJq'o_iֳl$shcO׳vD9V?22x`cx&&>zΝ;X%CӰ'cNJ+$I?EpPgT²B'Sv2X2@u\S9*eM#cr[_YƭیGcڤ5|TM[Dΐ."ի@:2Vl$df O0k=Yh0r!K"d{Ho_^:ns vvr;GKܾډ2zE<} @Ѧnih%MŒ>3'T5:gXzV6gi˫`^7ךab "hjLʁiUIB8ZB3-|Ϧ>lldB$4g y(N(W|WRI*$1n榜Apw;{2 ģZQvp?E{In"@8唗J0r8NW%1N#BӨժ$3te:H$;*BxnL`y"_C@(Y?hYsr _hkj[e { uj7Tdvi&s9 ͢UVx>\_f#޸{Ͽx;Ĩ"M[Y96.q<)ʖD)e?-KaM@/ ^9suM%&iID$4E MS(&㢪 ~Ԑ:ni QTZ.aC" ~ Bh*bAGq[3"BM2J1=% &r_%@X.s@ꅝK _!9"Ҳg31i4,EFnŠA$gL奛(zp\-[,Mܼ7&eMjW^y&"TTK*Yaiufn%tzX2͙yBgssZf0vXm17?O4szCPTM߷Q߹3ss3lcڭ6/a);8~Y`D«Uge ^P_5n,αJt?NFTDՠZ2z?3ۻ;23b~nP$g͐w s>N 2iM7XIJ/qe}}(N(, CALs/r7o2vޥޘaiquFc0,+5(I($cJf)KWUi5!qh4Nw/8T͒ؓ{YaLÛQiYjhy㺽ʳL.8J.6IS>gaZijv2Pf@pċ u5~*ndx|S\o{x wvhT-j33t:DQbUS=^ %M>—OyݧRPk$xgeڵ[;[ coŸglOXx죏赫S2ad8s %,PeejD-B6~ɨj1#=~9˨*<7awg&3s fgwz:NgΘL?uq|Kfj'kܾ`#tl&Q Xƭ7yt;7Ww &}TT곌{?Rqۨz(xl|泖 aHjX /\<IuΠr~@Y̻.R_q抒$ VrBLxa{o l guey$qx& 4F Ax0r@$3~RV"p2")FaH$$IL`eyz ]K%lo Le'j,./aQ*aUyDs͍|G "{z1 K4gjQBRV-1Uaw2"*jmS\B0!1R)OM lm?^k]]K$O,zFuMkGQ A0@ |=W"RAHoT&>L;``<3ۧ\m{{(`0 m?~L#<!ϜOyg8%FGh2ĝ }9G./ t_v6;2Gypz}zݴLUH!?9x+yH\QT%unWu /TD(&W83P;cxyWc(E34lô*hGtJex.n`UʴZ3lnXb0 ŅʖŐnDZJ\h1cQT'\X`繦IYb8p8dҲ$"AdyAd8vDZ RD1C;CtàV3AQ'VqF R0 ,Ue1Ln((L~Mu_ ă 8^]zH4ͼ"\*LlO!"y ۫l#JgHBoF:V*/(j*U"qQ/#Xc&akLN:ӊBu^9˦u@^]r"<> yt 2QDqv)[e ]ew{.0Xlaz.biP$JP42pb }Fap0 MMU]w/9~B$x]&clμuTd: '#8!bvw  \"ZYʢJ쪥R^0BA$LQ c[.Ӛ#yZC2'ywOTU} H?$C]]eiŹLF5iha88 _qBGg1DyUNjS«`=D  ?$;9K"󳃌0O[9sf-H YSD 8!7Lcv6QT%:aL&<|e c<ŒԝLp^@(L2A^eJ)(.lqM0P]Oi}߿/jE"HzhqQR4D}.J(]sP֕V4z4M˙ABzݮun?Mpv"Aq jJΥ*"Nf }V!_f."wsӯTPy q ]}Q[*>m[$ AfB@rqaA^NE3U u©D)y]lV\ ?Tq",8NPHzPA6DdF3(SFGNE@R^«E0Qk(9tL΢7*% vݮuymE}q͓N2"+Txt?!|??z:_ph%4UIK@ UUR@35"Ri)TA M {Hx9 3kJ_RU5JV 0plX}㚪j-( Ea d0 Kj{i`zY5w c:ֿk|ȍY^*eC!eaţ/)I,PV !DN8"YH`]P'#yԤts$|s un_&}bfN%Jj0})Z{|q-" t, .U ^"3b*U}8B+Y$&f,3{0N8`%;&ϸ:KK$qik5(Du{lnm% 2>FqT4 ]'إRĕ l]JƝ۷ Yئ֘ayq8`~~RrERRU]Ex CTMu@I B$yMEz)j =;;G`x$05sť8&B`h*Z&QU2B0&#iA0hW 7ٕcWL<#LE4zҁc>f]vݾX+-4nI2"#k ?2z,#j pN^cnM2Y9dA@G̶ڴ J^gX(JPpseDTda&V0JH#ɐMvύwR57-T ib:QVY^Hs8UP6KϷLUU(ivDG!l`s.rPhfA?L t]%c4-$[[{%b8t u(B,!-BBH*B\Gb}NE:^D a:ǹh0 ^vݾ.TEe#Pf>%"{:+>?g E:R̿=MZ6 ]y_vmOpk&F%±C (U, MUU+5C330w84P@Tzx 3{nǪT)[PVUH +Z0B TԶV-#H_V4Mz=FcUZ>~DHHbC*5!eQը+ȟ0(WU H@t*2QG1pP25qSU q* <5Q1p3ڢv\i!(Q}FY:Mt/cjp*TnנjZT*\^IR^^sPJB!.v۷oEE"A%;V;&yN~ݾs0fNz=D Y׹uMO倄t-gJk?cx$8{:gɉڅf)zr yk.TS]_BǙ NAB{nӷ \f~ri -dS-p.MU.N*')0qRq!P48$s zD 4-\g>(΄͍ TqIx.(`j0q=ϥ\q UI* @ n QBj e&L`yu㱰ih&(k 6g}cgO',ܤըa:O?:&w]:]}1EZrFM̽ű/tTus℔tJAG$IBEh1i]k@x ǿ8G!fȴ8]Pdkie2m#VNAPi2LP!|~ 1*.Fu ^W (ti0I/P bR8/<2O?` ΄( 3RBDIB9騊 ɼ"C#I8,Yۈ8dgo F~ IDATL\akk+ng᠗{!2:x8^~+#9fgɞ)JTcq$h`Yf@1rJ\tWͼ@_v sk%su9if*Y϶IqkmkB7v5z3(<x2,%m(%p4l8=?uF$)aȋ E$EQn=wMq<٫\A)hMwd4"bDvpJ-"<8%NC=[|4MX08L HbH d+ ZY"E]nfd]_ğ0mzsE"!R9[nf.Z3|ȝ8N|ϝ˾AaW.34T> /[ÚI`Ymsm:iAp { L;7XF/x:9WE\ m̩T3t..D!eYNatPzD Ri 4zhe%HZNfMKlR/NKazޔ8aS*c $L)ST B0̔u90ZMN_W׀z~>=eY祤(t^0(&?& + 0'2t󹾾2y˂(ѯZ՞cb %C*YxODB\2Ghi;mkf`AJ*5!cZ6AV\.*8.I:^Q̚QcCқR%z0OƸx)Wܹsak X{T5ZY*Vߛ0j5*2qNUKkwug`A9pRgM4E%JD"0u( S_h1I%>%(]QJStslg3(Sp`* ǿfa4(ka* ۿFӴ$/jU eXεǏooFc~# uz~cΝ;wдE\TI:ARz"n?}pǏsϺipggt8!Ҁ}]~W=㤾9)e?Q:W}N??GdnN!`˴C(Wj꺞2 {~Ruc*L2Ӓʼ:Yg\*yA=n+,NH۞I& qh!=Mnڙ12]wNfgW*9{s\*V {2ƶ'B*uvvV*(*jgi!q>Ph4L&&N818h{El'ͫw]|E ,D؞GGIDax<:gqHnSÐ5#cןah:ADQ')3tatM'PE8!N|E':A},ERI>SFIqU#efnnFm3 [[[躎O//|Or(@-$)?8Nh4__s q聼(_/J EZ>$7`O^kT"00 j~?gQm4 ӟHEi4"}0E}?UU1M9,4sʹ4ֈCE|SjFQ\4sAl6iیc\O>Ad$}A>oy [[[8ç~ٜSt8ȺNZt}{MeH'_8 cq]>`*JT954F>&I>g̩JvM\f0PVs08Oot]77N.4e!Ip=ֈ>u)Jy_y>e1V ÐO?*}Q&HJQҦեE466oQ.Flllp-&R)wH3yFl~ m|;gq4] 8:r~]x!yq*LvRII3̜tܝ^??ӧg690daaC/D5EA$GKK-铆}~a()ۦiĄѮ( F8 T*e(N([1333h4>Q#C?dZ^#Mi2"!Zy1@WD"S 0sS_Ҡ+sC\@Z->:Nѐ>LKјJ,ޓyܺu ]8 ÇA\TSZl)n7҈'IfN#tfgg@jxwM؅aHET*ְmj_+mv! <%j6ܺu UUve, 0g2*333ythqݻwsN9Js.Q] d1 Cm;7ƋNdR.y v<}4%WMӘl2B>;;_|1/0 t:yƍCNZE}ޞJ vs'2 8i4Z-fff 93 #amy[0{eYw.,,|>SF lVrH$Aj|{> t:ql6sGp8Gd`>.vQuf8$?~xbD%u QEa"vGl6I$qGָ}vg)}eB}GAԽ5jQ1 7o~d:a,..SFA21u7o?1S4 x1I|:rmwJ%V:\7e \] J!D(hcO04e4T24#jRܹuaCVT[TSà*VB.qI!jd%R Q'>Q"րaK02n3ӨDcq\0ҘaqizihJFDO-e`P cUpsuZx2FlV-̽+478fs}![Q Id: l\Qu_b!짒/zweN]I`ną,c^u;^W\rc-h4뱿G/tmvmwK~^Dʨimf8Lzܼy˲//X__Zb60{"TD&~U;ݾqv !rgV*HQVcww7…aHܹsY>Sr RTt$%QxAYmWH}lll8N~*siH:rGhA1oV/sT*嵔xkeio}n˿_*򈡌Jut]Dz,ɣ[[[?E4{S|:s>ww9=b8n)H`RtxHr]$?f0>$"[Fy}}=ooh4ѣGy`0ȣȒX'c,IqGoݻwÇyd2!"ZVp_OYotxq-2:. t]g0΁0 tEn޼g}Fɣd r92j(*D1/?gYSa?~__GGZ.:"6V 4vy ^ֹ}q'ӺLӱ}gqaN)UeR7qO":x뗥(_?MzE ֑B!{8ԫXLx4Bi`:**I,E!t@UԔCR?L=Q(8 њ@Q,Q1j.&O~HŲP4eTAynJ"!Rf8]Q{N)Qxe $Qf'Uq,ȂqCҋRdz&Ov51U n@ϊQ)%&DOZ9F0^V~n`E2K2fa&f5x׾.EzWV{FM#*#6LnzwaiiԻw8&c@=i?/yܽ{ViERE}tGݭb&/S|4MY]]HS. Al4 TE}ƍ=)h*?I;wU󵱱1P6QJVkFǼ`7"֊hz*Tu]a&/BQ^hZx7@GB~)ŽtZv͝;wzSշ8< `?-eYEcU wwwi4X/\ݼy0xׯ_RN`*Y=__!}{A`ar5}]:ɊF?m4|ߦT*Jamm-0,"j[K)A.nYVK BnlooGG|/~"m)NՆj}{[Y__lfbyFw֝:O*Ji d&3E^OZg HG!NH!n7;$EJu:t"d1avDɸ\4A޻yO]AQ9(1Q M+GAFHqz4&,m& Z$IÀ( 3,DF?<zt*5'"h:A`m)I/]$Y om=~O{D7="vww-RhWEdj8 K& zsQ(xAH׹>Hdyy]ǡT*嚈/JGTAz K(_K_{{{Ž*R:mG>^y YSunu*DQĝ;w׼t݁'>KYexm#/˼5 G}OE>*n~Q(-:jUǏY]]-pK1u~r]VE*y;]LJ?bjS?;7&:Q.)yI5O\eyy‘`Y \<44μK1֞7σ,4ʳ.g96azpRplߧ ^y[oLU;j/EʿN766IR*~O)oV’$)MEǭݿwe~Tjt` /|o}[lnnd3 8=$@?֭[ɟ ovQj FZ=M\e(zAEO?Y8T*h4jF=SK_ zGq"j5k/;í[<7o_0,NJRDZgQ,iΠ_ h@WOB`&ЌB]p\Dof ϛԾڹqbZYWo GU"M1L 6n|J˨_*"K=|lg9A~10MlB)mYq|T_G keZ"AJ4сS)PiXA,0mŞE&9b -:NUC}ZVaH)Y:THuC /eY|ϧ2TJdZ(^=y1bӯ v]"Mqee`-2Pniv>zZF&FXVklTU>я(=Q{ @ [VG94TGNo|"ʱ:A ra`${ntx饗{.jnU^3g*R#opxxXDxW+Ez<Gz^8|gggZF,HzdLU$Iԧ>śoQ,//, TǵmǡDN Ncqoͧ>r]*ER]_iq=n5.("4 J)qRfz_e|:5ڿߧ&(0x)Eىuؼ~L)H>vH%!y]l xͷICH$cEvbLWp7}de':  MV3`KSkǹqeZO:kVk<>>|7n\c4[+y44k_TWj.~qud##!Ajg?)qI#o~z`s2{NERag{NuV>[[[ٛCs6"{63Na0lz!FVuMƬj]W:HPikBӭ[o HuXrI'QTwZI{'g?css`;p[vRuC?N=JTT.t:?l6~۷_5/_ܽ{w>r1=ʦ}su饲;,7?ȝ;wԧ>UG?W~Wx<3Nڣsl9jU(PkE $K5ƴ?:I!N?6927Zܾ>s(J8apPɸ5c(ts9\ʯ:JIDrBTj ܼq:퀔RbJ㭇gaUjo@yűmdq,r-0DYTkUJ%FcV5h1HףŠZ_ŗ^:<&1KIշY@㲰9A\wY,;B"E@JatEɀ \N"9.vXjmL GrZ9 Ð@L't:E*Q#:Ft?ER2 0TJQ'h_ MS~ꫯ"ݽ9vt:(QU|ӟƲ,zEݒH|ЬmGy;;;E@1Oޫ*/+++n]T*U{"m!SRwu~ӟr=* N0TZ$.IjQv*U$Q>pk*etar0"lWnUٶ]D}ߧh qmܻw-~`Zo]8eYVT9Cqj7 ױYY٠R)(ʊ=צPTlE¼@c`o|kll\3-ZQ̳ٶCۡRB(bg{}" 8?&{D,1 ,TS]mpZV'jvE4P'7э[EHEREIRUqssJrDܺu~ET\ACR"j|/"sz 8> )4M?>@:8)u0>?>ȝ^9( 777vY΂@4Q^Tp0#::upP^6Q)(8Q/Pϩީ@kdY0MO|EZ_'AJ~̯JA8F!c븮ˋ/X)!tixJA2"7D2u@7\ӢGll[2i]QME}8RJ;RHPN"7iPUzI$H^\\к+J~@Duc[ܼys Qha8MP*NE7*7nܠDh$5^?i֣#=FJӁ$3q `0 Uƻj/gP`h5tV~_ȋ(0wgTHU9JU@TNM2>tT^7uAnݺU)"™&=VCQS TVD<< ީN3i B5O@4[XET)չ'1&gG6apQO:4Rzq_sP\:f bER8$677 ¤mX^{&%M~Wpms԰08{osZ^Q;]OyG鑽W#x7[1 v9<<O5T5;Ìz퐞:~݈eS,b}@öSS/ew{83rvs}/ue9E 1xoY߉u>Q"4BmX8؟wLH[" TFihw2` ѕa$ QӅT:JԅgYfetft9݃{]lkk=PO8t.*B8x=X9JұayCz(!m}yM(Noѱl$$f3t 6eZEqEo5k_00yB2! ;{92$_,[H@8썜V ?ꨨNp,' GG1J^z;mGz^e!O|*W)ZEh3\ky// Ap&Ψۓu@h4IE> hcIKb lL {ӆ/SbEfAH4j! ?RK^u0LsX&9O9+ي$}&G&c8&;aRVID'>&vH4`eH)v3Vȕ\ۢtPA8 HVqv}Z+KKeVVC1kU*U,4 LLBi@%qAF,"<騴XR'[t|,$M)y.iX;MK̯ 1'@@6qG,޵(M¾NGlwmr$Q)4hA ZVE&WA0 x^npQdPtx\_ _E`B@CafГjG9 xȱBr iJ߈cD6DK`=O>k~LZF4 TBY!"D~LW0r08w;dD#YV~,;P&v 2 eƞ0uxHHb1!gwyL.{A.$=z>Jmiiw}jU (l!RI#p2GȔvWP2+>$IV:pg]FQ)iWp(詡|W\Ev@52 HLSv]< <6:H:Yu@i +@k8՛̝f,@(<#83x/>~>ܣb1$:9 r-=wȚSEKBh.rMQc傣ӥ@LGBG?m&c)z*rAvQƲP3w䨾زzp3"]=\CxV2b!ى1'=4D%P"#y?ۧ|7 yd)t9(8iPW 2 #\Zĥ=EŶ$Q8(e44g b$'0$3E&3av&r,~?axZFRJL2 jND1i !%լ^y/39^4L>}ߧRecR\+ӜWkcZ(ݠׅɓ$ljBbHK(LX'\?t꼹 B aM鑆(J-c2SuV$'y#M%D/zyEauP}~E M Cb"zj9㻕YA\K0LƌY8׆QmΎ9r "ca!ADQDR# 0sӂj"x:38Y VVֹeXIl($"){{{t>ZŅ*%!QH1z9r:ىoh]vbVO&ANp9huv?޽,,)yi5vq^Yjwfcw?^_ {Vbed,i RmZ9ݽ20-WI␝1~pqn&$G}ֲl߸E8HiP$nrj2 Įgxh0%) 2I0"XNо|s6g49VUPyƱ6Rڤha:-a2z~~r=m8bR罩k~ҘRе4T<5,lOiiV)J8O"5q< 0bNx6ߜrTIsw9nkG1gi*J4<|R 8fMuSO*s^?-;ܥ2lk7n!>N +뤑O7 5ڭ&~iIW^dI ZF}|z T9 ;E O4M1LZN]0+WX]_gZ\,$MR($3zTfqy$v\mnܸs7x!x i}ldiq^EJ%0%t]FQ9k-,,p;Z$|R)){+eDb$H O0m\5kT]ʥ ¨EH:jȢF邴D/xKSIq8KR;Sהdx3&V=?O˖Fm˼DC`&jykQz3TjNQF0)|u9 98S`<&1ȸPnb5O[4'#:;^Cx<}4nFAhcq^FrퟂT `0mvZ{=~2f$AR8R1qE" CRYF{va@1ɢcEZH >I"evqlrX$QLY=$"4( WqD <E<i%D^pm(rlfX8Y͓.@QHS& v ;됊 (AH^}<LbVR[IaSk]mgXY__R&w6kņՓ9)eLshfH$:VW_㊭ru}=ai BdN,3f V{액U [ D)J6jͱԋ]'ɀ*a6`Pa|3i4dҞKQsppe9J%!Og&Ch4FCH DJ( L)wd ZN)Snu)I:eOE M6D?̯Hbt |Od(FB>i!QgKÔRuz~'* !"M! H)UJ tZL&N%~GI%XEǰldI g8ib($am,D^{;ݓȖ$1;{[״{rjUy,!?]C,9hHc dR !d!TE^˳ GH|}?UiZDqʣG[olmRDTG=I4R*OcB҅aH$Is^Ȍ(*Gd@qnHf{?fs%̜nYڑXʉ+gyͩEDm^ ^u>Op֭#!hΦCxi'K=vteΛ bs^cO;O{eL<:2$zɅL3_Qc$5|^ePBriQT9X~Wx=aNzWQʫymQ쓊tXWUO`?-p (+wR4%cYM $,+)ꄐv d!RcwJɤ'육WYe We|$PLh{kj 2*T 9y8c&!%iX3 C9w0H#%Q|n:bReYfth:ffIe. cxjY M2a{%;%|S RɏX&TKqHHWq,RL`YWayezI>A{fJDhq(=:z}ݹWF(5IQ"eJբ%JK`&,,,Hv%D (0Y"SiXiYqDZVhÐT !,D1Mu=.Y *KiK!"e[_E4kl$)&` Sf`gBV٬yO2Uv $)꽤C紆t$8ZR.{oʩtIEx&EzM @"{smzJ6`)ɨXz¬qN R\m'&7 (7_SLP8)iCp(R0kj $rrJtrҹu]TL gM=8 O2z/4ϗJv"Hp2Xz'KU`Q0 (I\LcwvJeNId88 }n42z8"3ى> #nH!%Ck0lviF %a R !v8`Z$QdO8<qL-[ڵlpmsa 6o[*WX][`5i뛛~'1qc+gBj̣GHZmۅ>[VGhmyym[ضظ}) m=qF9/'O84+ֳ^cgS҇Q/3TFfpҖK21@J9!D g%fat]wHH8q8t-+"FQv`Y1kܺu##,>7wP8̜ktYcOO3@|"!^O.;YDP)|.=|89P8"! [s㭭bvzbrֵk0j> Y*H 0D:* IkÐP({%:?/i:;\סni:DaH]Bf՞#&zM/,ԯ ?S(˘M'I-Nܩt,"& IDATR:,TYa0FKL@V78 ;1H<'Kfl4ab[BsڭAzTUa<7۲p]H('(ǨekUeXAEx^ZKftfZ{:]q-ETU,6E#$!gt_E@f58p۶Y]]sm~ꫯGE+P5( Z}\Td&qi֚u)iM~l w4i=/bJ)$TQsE +B%ϕgɀym'L`)= N}}']j&?ӯiH,*/er ^|En߾GWY[HdDz* l[i@zz6OPhO02OENg7-OeVr(~7j#Ձ `,t3pĶڔUzQ.e*Q [\riyx, @ȯ[yc{oITkUӄ(p\˶Hӄ8Ii:ecw1st]d~T҇_a[&rGin8t:)+mv-6Jt$C3NJŲC*Km> )ykT`cc/| O>o&.>dgg:~!4QіIߦaݯNwS: sn=sV2YInhQx%=ˀpCe!#R:#`aT6<ϯ(@@Zڵkܺu7nsϱIR!ct:J(Kr|={?50i㘈FZd矸rkOu6\1wÜ)] 2vRp"nnG(Kcl(",WT]`umZWd'0!\ U~9RLӢZꬭiej X ҄NAAR\O粴 AT*qh},a0 i61-:xK}a8X_htuqI:RE@` HiW拷ci7'ͣi@GRFQlmmtp7YXq-6vFAߧnt}0 laOd 1ʠg3س=5|bF<(dgy~R> ,\Bj5j,..SשVJ% ӦqBH%lj=>J.Rdb8YiO8TfZGPm>9˭38ik[Oj(&CXGU+laeejărAFJUL $$"=#H8d ǵ(hZ JRyqQ)KqSxΠ9nI:8B*(FGHc^O\^ӔTJD J. nafaHA/M$9`QHm0M(g`Rx޽B^)!v(IJ$diq[>8& gFje8u&n;8u[ x t1>Ib!Ӏ@'8Ӕ3hœXUG6#:f: E$+ T@qN0$^\" bq<_4L4!4M\(Ls84c V'T2E󖦰;$ +0xHe41+ $05 fFQ+~A; #\jG sKs$`@P˲V8Nc!tM~L"ҋgwvϼnG7xmҊz\}eok o#$L3ҟJP^jn64 (q0, 'cYVV^c%3E{yEGpE)fo&}7)3kv)ÙÀĬ#杚" V˕nV A\6W`DQt{p pի2%PioB]fN J[ZA4YfX( ilV6^Xț[а{s$YD:NY dD  Ⱥlt`kDs7@WUU7"jY ~c<¬̿d!LZT&i rmѕ=\_/7f %ur@x|oP@UUJ!`|mC47͠\.v;ڔ  NQm. 8e/Y]^22f*? OPy pC!&`~P0t<{ 1 G2\plCF0FLz6 S]2 ` T&Yg8߲,}PJ^FU!/(n$bL8p(@xd'x :.2`f )@F-4Gp*d;`I-| 0fW/r& u@b؄N,x|>eI%TFItskz&tÂm9  yx̣QҵUNNh,bZ A)HU* PS`* 97m]ס;OUաQ?^60} Y&Ua۟-`5eIuQY;n[@,"T'܀x&yXc?7(a?*Q'1OS_ׇ[A$ &5Phxoh:[o(<( (Y{`f2kh#Z;D!Q?}ڋa^nr/!(t~_!= AyT pՑ&NI^`S 8HERP!MUP9F2Cp9-¤O~}<ބR7LGE%,;|ڠ'c̵xCfU -‡c6& TQ!+ `D $A l_]7QVx DYR!"TEBwW]7 px *i1㞑5t^ i'|BH%PY>E(@쨢yO{O(GCF4Icpa6#{^! ve/8aRf j&zu*|KV-)  .qsfauQ\^0J[G-(g/IxMCcEJŹ{ٳMY[QPQJN/NF)[M.#_6@K.YH!ލ 8,zyY il~$2zh`mmm244p|ъ0$ ܓB 1zTb8*;w!9]X18Iz G}I!iA{Rʒo0J冇2APaݻ]"xRTg+Jk4(Jh4$ zPR}~dx˅\^`灯<ǐJ+J8N5J$b{{ CZ};,4"{+ FA)JCƁ$}>.C5qoɚ'ҟoWy0LǾgu +o?ο^z=q=AAc5x5u W#fTe4*H5aRA۷4MȲ 4 ZRN4 ;`%4Ms_Fw`w|2vܬDDATnwZvrr#(%|rpA!B7YᒻǕ_YYix!VVVk\ĺn hC*-S1!(t_j.eY5 496H-<>@W* 'cqg܇Pt`` `XՒ WA tplx kYů#A~"o88k>찪- @J( ]2m۶KW_^`KSJ穪"TZ,$(* kY eY ȃPJ'm֞0.Pߝ;`mܳ(I;n^OygoTBVљ&puG?~3,-a&,˂.h`0EWQETBe $I(J899At+ 8RkẐ?HKӫe fϿ߃,)VlC|or닋u&lBtȊ IqAȳ|ymˆa,..nð(J4U@j0iw ) 5H>Zm4qrx X+>TH28D 9W+,CUԦx1DQDw^ "rP .Hsx @;0(aBs=Gn A࠯R#q ٘VJ)gzBm8Vt8à0Sy(O4g:4փ4&g* SM'Sao%NxR_ pq0CIU!+c0M~-DY(xm0pGAyPPz~  7턡r LWpFIqk<}yB/F@_dK2S?N窉#碿jgDqAas!Lͺ*)pǿ?1 RAQ3kI 1xH$nwh?/w[u.p ]oq3`>0%˵1MQ ["N~ 2"(rjXAB$'S|{7es}VUA'0t_}nܼDx apсF)2 {+ Oē̌A[*Oӯm IDATȀ `2 ޼7;g5h!fϻtZΨa [b1DPЇ ⼿[ĂBI`^)sʍCs08wGG]DiW#[ .W0ȀY{ er/#֣vjW_}f?Oxӟ9={UUQ.0JZv+QBF $In(.A'w op pTj x{2ڝL˂iX@ TBy APiyN$X۸77a=P 0M+eY7\44PX(4i+ ӭ2]cz,# Mg K{?=ܼy%oUV2 p,B@A{Y0OAB=l ߠw)o$Jdh@\*c 6/ <<҉MEw ;1ҷʑl0 ,(m(Vi,(ItNe\~??__ɓ'/?;;;W'J2%X{7; VvKcwLjaiC ^m(@7 v(V fjsZ6H0#+u) ah2'= R ? |L|נ{ AAF$$>6 ?d'C0|aHWSXm&P8AAQ^NP?i!d<~IA}лL}pO^?=ނ"`|_x\r<5H.ދ EѲ,nNSޠC`QŻヒ'?ch~ T,j8I֠{Z.'w&)/OK11Lxta&DItQd iBܻz@vnSpi`l?rl 6akT2WfC膁̀o@/|/8$1x$T9`}@)`{'&\q ,KzƬN"DЃ8}Ӧhg`XTO& `pz(h4$ rR +++hpvvVM\nBUUr' !Um'Rq8 $}G>BEޱYdoCVTeB7'+%\RInPjU۴k}$$I ^|:&r "֖ DSU (IIǕ3۸qƠME[G>K䜊l)A턜@z,A?t;8뜈aC%!*A8KZ1<ɷgw` qcV°\ܴۗ8+yG*Ih &4()X5H)u]aX(wmvw[ SNhNA!x%іa`dCV/Js:jQIi;( *nFf ~ 4M[o^xqd^a4J5_ :)h7چXeNiÔ$ y. i`Z^ZUEkE#,&/`0vic iT朕p/\F3mRH!@K2$YConw:|v:ǃBAaT3Λr"(`_5kxCr*Or|\B @8ד4MXz P!iګ9M of^Q'r~B )dBi2FQ)S2h '''k7J, c /I`c alp<ϫ:Wg )a.,60oE;e9M;;v_/ChKQ罨MomMy?~NP|軟#|ߠn7wPVqA^YO\Ġc;$ 3P_CNXO  s/1 9 GL *2,(Ms5\'WOО^y;}x߿j.XCVE E4p3J5Uưy,Tvյe<}(|<.F PXEg hܣf%J?GeRRZu?FCw٧={T~r^.#Jgqקw;ҡ6]/!}.5>DwRԨyI3@<KA- "ŏ5O5 ZBÓiL1ljCul={~=syzN (Bt:Ԏ(z> CBWH!SJO Rc8;kW%mmͷkAA4~8N o^4 QBLBn rIynZ5ȋS;y, cln>+ڶC0T6Li_*JWEulӂmZA@YQAm "Ѵ$Ȋ ۶EBT*ؔ`6ãCWDo{ IV>S|嗸/RŪD:~aɴ  ո2OztWX¹샼xtex/x'[4x À,u=f:vAæ,`j aLsN'M,,^!b8N|F?hE$Y*!B( Ȋ ۦ$ R ˲<9W_g0_yj5c#-pHj`p~uI+QELWqg\qB:0 (>c{(EBضݝ csrm[{_V{Z\*w~ض=_M)RؖKAZbJK;w8yG]O:,38 "`R 4._s @F>o5(h޽4uSFC,L1GEމP4 [CāYeؖv}洡蛯a[&t#zzS1- nk eQhUkʒzNNN`ZkNNN׮͛@,` 0x`,@Xx ܣ p9dDaT(JԿgVњ7IHis Wmې$i(_th6O!cVdc77 e{4M빿.4އ Ln Tc5O b!(Ϸm%Hn߾w@_cﻵ?5Ph\꿬ܴB:ٜ۳IpNcJLReŪ`' IDAT1KTܨ珒(!Q q{ΰfAR!nQy˰):&(dE l>4YVܹsz{0 uܽsw\mY{8RxkcwGœ'qtt4v놎>y睡2\޹2+?-p]x mWV7IqTx 8З#J{ ⵣ8ƵebRTfԹi¤ޟٶ TU;UdUŋw^6VWjBVDr沤(X߸^d ƿZb 'N5VB̢:d!S#| $ᥗ^{DQD{c OOO'cuuw+:,UW^F<;h2&a@[NGw\"f|~iH⤞@\@1E-4l6}Jq||  z_iYP n%#}<}ޅaݣ:o Zch4UFg,:9Y)%V˖$ _^{w۷q}@׵M?KXYYHYet^tׂ0~-yU^&ݫ:C8 ^8ay__Ș DD&X(&G"F'~ۓS_gms3wݻIڵxͷpttv39^/QoBU*,k:E.Rx1I4p\NL95d4INa4Yߴ@~4X(L%q~+W REV($$IoW^ye&Iݿ`[ZgQ bg{@Z^ 9೶z@$2:b&eyOM:Y%\|ۼζmX˲19{YH! (@ kR^|X mݝ,Qy!,`EeHQQ^°G)uSJڜ666&eZggF |ibºppL2:#o (f>)脨%cy xؒ(ڇD^$x `Nh]rt D~ ~67oʥ[<qq<ǣq43rAJM2>|~fEeeHC5bRv" ZB&p'BΒLÀ(\\΅ߏ {fa̷B{ًdmC-p},..~z=ѣoP.7X&;?קU&d3$ꟼƗpae[Ӹ?wp9QBC7}J׮]CZT@aڛmz/2.K`ooawq˲`-Bo+++ (JZ]]Ûou11>~'/>L,>ΜuE$/C !+@a ( 8̨/lc񼀯4yT%I!-( :@Ӵ\ly 1Ce<{ f^{{{x!dYv70|<RȼZmBj.IpWohD]'gm@,``trPp&ALC^/Ni6O7pQ'(ހ)uX^*˲rEQJiP%v *2Jܼ<4Ms=yyGBTUu%A1m_E|/y Jef_OKH;aq#=~I0I>]IcE}aa Q u|P״:wI+tdE?UU(Pe^4BDQtȔJ%,ZFA 2DQ,˨T*T*. $ eEh]]]ҒĸKY__ǻヌ^_=e@0 |7u~  Y/hC(M0`2ʳ 'i[BYomFr19r#(=.<0F|F{e&1~A_olQPԈggMl=}qtt#B7tj,d`%G3{~{R)eLq$m0M<kض :9𚆒C+~Rׂ}OOOVFoa/fi[{ o޼Y?#B|UP @XH!"R^@R0bVif`,f899iPTU-A¬_D 0}$>\O"@/ W^Vu=ܰ#l=y9@¶-t]Zg(.Y$U b;>>Ɠ'qxx߃eYXYYA\ܾ4GրjP8m"",rA}7?~yC1eYJh/ëqVqRa4Mlmman z [EQ:~B9(sB =OJ%֠Y`88R,Dy#;mHZ6duQz}Ґ̴xAϺ)P3XF-H5bSgg,t:,, Jgh_6ǽWR8A47a{O@s IX[[i,AXaڋd>UDyޝ 0 `aa ?i=[&S.Zt]wCJqiT}̽~7oO~ƛ_~~kn )dRj~A}2z=`ggGnx?/dvFI*Qy>d璺" QNߟ>GF+lۂXZ^kw %j+?裍% ߏ]>yr Ēx2EEQt@۶q]Efggg.4M뙛\y(OE7G4aaaaZ[D@]o4rV//k{ѕ>>@o{>(/RkY/`.nl /ƵkװPGZ(^GzQO&#AzOYu:!VVWynkX\\DTx ۶$y;wċ>& c'J%׮_GyJY ''{A\r,knllضţ\0WQvU4t=jk&IAa`/UUq jGR 0: "t]/aRg1 ^XkNcyqEQ\p9a,6AV,.-aeunvPZ!Y0$P T*jX^Y2j: 994\u]᡼7n??@Z'|ۤiO<*onbueKXXp֡4֗˜$ai YV\ B& qڃ8 fjERm,.-W^Shd??o1@$g ۊZ Ni~%YFR2&q>:[NOOZ4΂i&tMi0-ӵX*Ó( WV IΚM˶^(W*# ܾq(jH)mСwpU j[]]uvÐ_Ypd]4# ]e4Ʃ:G•U|!2>ol6S`?<8W_=D5,XYYE@YV ) Āh\4R t~ɫB$^o@T!ظ}!E1}P3kF[\"ҨVw!mVڵ j ӴP7m(/`|ultMi:y|ijP/3 )8Ji~p'K+yڶ^c3 íi}B'q̲g}Qh߄mOqzzi[mYggM([O%,--auq kջw(\zO9yr~Gy~ӲiZ\.R`qqy߅9**qZ IDATLR6[p7kIwګ\(*(t/8aUڹ'M%ȲQ"3 F1N b7nނH=*A%ݗ; }dJD9~%Ϡi ʶm{=lzx9j$~~o,(c8?1onڵcslk`tp&0e 'P⻐ (T .;oK ^]@W})dYvJs# / wB.A'x*6 aiNgOPb7zU-p5 EuYEuvCCj jظeJeJ*D\DZ.B/ro0Ĥʯ߫൒sv Q\_U=wҮJUؠUB$c F&|0  XBB !ZvW09wLOt]U=}9v֍u1SLJ%xKXu===`94-HD0{,$)i!WYm|>~ ]y GS)TSE$&'&07n7‘MU)ffcaj>54%*}Uٳ3B˞TݧI 5Ӑ:-ފ@S䭌CIqQx&$P,k L@qihT˓~~$qpr^)@pEBzQ + 6l$@Dk~6&H;`G^> Xͯبzߗ s(29A!133 #`y/(BXJx @'[oK(W}1{vFA.n.-apէub(Qe0_ ʪ<~?Ba T=,&'%0$j%m_jSNjS[C``"Zj&JϲQª]V/jBnsQiOlv2SKYF`^g^{٬~y81At 4n7(+ JA</jA HA3̖wjCm~՛Q˛ ,FڱbjJsKtMM (R+]\wKbS'Y'B ¬)^'̉#녋ttXB^.42"J%$)XpHA`Y?{/~?T]DGG'(_&o`Fj'?ya=py9 tuv!/z>Euuwan~^"bbz!tk~_rёrzwQgggОJ-|z+*>FH$82'\MP\3ia# Wij@ުgy~bvwRb~%.Aik}5JCnzYOD܊&"Ht[aM(w# oñG159)PS9 thQ'ҮY,E ϵEO n݊$S57;:>~0Ch%P FF@Q~n- Z/X,X,~|^oZ}677T^(ߤ T|>tttb֭8}4esy$I`Pw@..g%::0T꿑]n7z{T1e]cŒh1QD0:A!oʟ)!E~3M)4r3Q&vi f11ܗZKHiR 5_`ۯ Pǎ ~6ܯ loVlv (e 6<:7;V7Ɠ)U%$<.RA#BEi>H%8dG]XeJzcqaCzVjZ Izi2"  VLCi@`4fEaph@Or( A򣻧G*Q)Xf)t >~ߟ>XwOg>߰O~n (Lc!#t/A#a#.!h]\Ĵw }u ӳ3^aT*ax".44"(:::N#NcK$eYd kOijYߨ7`;3} EEg$%<5j g_W(FzmVjVr-p0m q΀VS.v0xщ˷o bјtJ[EWwn7`lN<}_c@y#~> ~5kzi-P(yx B;0=3˅bT'E,C$5 Lh2GzZYYkg^Ŗ>%׏Rf@$P(E蔄y4EjynUA4{̃B#<٨PF̙#7A()44v΃XKio 0VWj@he2JZo/]ѕJ/sg+6/32?E$mpŕWrzR 5,nyZ3MM3dY+j z a'ydKQn'x<5*Ty}Jfa=,,eYP%Dy"%k6ZD$T{͔DhJ[x "Ν?bʪ kҏ~ȣͭHX%7K9D_^oZ9\$x@Ā$@aJM'aJH'?׵z Zf "7`݈b79z ڙn7O&q :zVAwO.b;.r.,VY/EmuT.gp=Huʂ9> L&16:O##] !ԻffcU; 4S^":.,,`qq>FT8VWV,vm-oF#0e9#[꘰*([5)Ṅ=&*/fȕ>܉՜zxN-fǍ[87sQ"µ8N:Quk~CjNjXϽh 8sV,g0>>TB \{|ۤ?}KűGz7 rxc H7:wU _ _<ٙi@ڍFIT#_WxyMӈع:wT[m>3zǏoxn}뱲ã?'$Hfy?G^0TzzJ /YK}fgv^s-n~> ?2VWWs?oP/ ?||8Į{7QP&='8.; ۅ+o~seQFԮ@`0$QjlXKX (p\`jP  EAV'Oqr{"b ~DFx 9+ mi(# Rz*iLuY@PufH[3&5#7w&T JJFS0ۯD"َ3gN3g03#!I=_;dRù_)7ux腊yg?+Ǐ㾏\ ;z`CC"O~# KO"с={hƗ?wɉqLNԉD:@WK7tPL:~3A[<4 yX*,Rd`Zm8=VƷq۷R?IHRCHpE6tWVa"*q"*PG`WUx ]%\ χ1<16:@["<0o ٞ?8xi<( wn\cxljW㑇ٳg_{/}E ~b\ ^:|X ^lx>LNcO\f2iO!ޖx ܏~ߑH$я} x~cճg`yy .Gλۅ=u<8,y)7T_xp_CƛnQ)5pp>o}]ӧNG?xΟÁg~[oQ= mTK >"O>Ç^/JOa%C4=#߿Ij^iLZ0 9>5#flwYH_J@ffض5 Ԙ`i>? ᑝyVFX![e ?*T__zZuկS#_W#W![mG$IJ?PgE *8kp166^?AغwްCC[ Ax-f$rՈFV"N|އ}}O| ^xCwWwp~oqu#bhV{85u= =x[&iP7!\;|y= w#B0nw^~Zc{[k!QV{YsN~Mo)w=ꮸ>?7+?rEw݃{n@(B(=7eSٗi{ޅ.( ox[yg/Gvصg/B0߽wxo{]+=q7:::AQn7V 8}wލxo{"3u5VPKK(A| ].iSбRTBZ , ٓ&CR4LcZ7CUQ҃ѫ_<)|X]]^=;5"H[yz v. `|| M=>B֭ꊚ4jkZ˷B~Ffl4- aKCxqkv#J!hΝ9 ØKϣT*ZpkRh󡯯o|poG"ק&'ϪOj7"woZٹ9lꪚ_y̴n0)BRwOoyȮr94tŕ;LM^gWwJz7 n((;n(wvkϟ(d AQ|evAczx<صg/~}>ՍQO`<&q+سw_'ʁJRV*.14 X%혞S'p=yN(CWV0˷%ƫO]+I@{őIct.|?:rtz}".IS,DC۶t/A U>}X"wCZ>ĎmǍH[]v)x#| v\(ʘyL&17; Ai\Vxo#:::1:2, Ƴ`~nB "iܿ_m%#G YrsG7^K4X>U{c97U<Ȥ3MӘƳ9ݘF@5]cC#!C/<<`5Ք_SZT9kgNY:x _|Aח^|O>8`k ,~S54-Lkó7YѪ 7kv f'Fotr|zd;$091ёac!| (f108dq~ ۞½~/GW_h4}7ތ1)u(z8y?oov ^'yɥ#W,]7܈q<4|໶{-p^CCp-I&ωo|]g>ogN<5O!{ͷǏ"J/ ,-. 6n Q,r dT;(QB)tt3gXl+Fb1D"P~?Ks@.kx`ԄzBc<S C(QK=A"aqa]CCaIJ!PZV6,,FsJJ$P2щ Lazz ( }/={ߏg#/!$yuw-bj; wG?yn\}nfyS%2/U|i 33S۲E ^/*(z۳L8'' E1?7΁.F10Џx,) O-RwpzDCE+3$ KAj]H4^;mԨI1!VXWj:Ϫ9 tE0,qܮΝX(ԩ(z /ڽǶ$׈FCE_*0mAeF$֐١ar\{zUm+5p̉Ch4ybbbc#E.$w@h08W=G^>g~v"v'F+C0>kc8ܳG~_whUzrjL˗+4'4_x;F0,FQ,!Dъ2:H f:wp-Mp)?Fa~EByoI9^󢷷YBAlٲEW8;(TyUj"0Fz~XB} C02 Ra @P@0Ys+ǑL#N#˩ >}:aPL9=ړfLiy{$՚6tw !X/ F米CC&rtk[nseL$I" &'N#]BX6JELLay9Y  !с`0TDJ^b8ԋ484˛fٵg8ϼz g^=Us_gW~uZ@!Ixˁt K@)lGz>ٹY~c$*bχ4<*Սl6[c2J/jQJ˅N;WkkDxS ?lލJwߌ9|~ R+R#`0C{dҘC&"KK( QXB \8n>$ |TV=v5;u4͔o'd= ?)WDqW[oԳj @h_)GzH&@@MADT,bxdƖB(hr9q]AӋx-B'hT8x%񚂸NN::;$z#7(4sh|& FmtLF&N-r!BlLt9d2res @4, < -@Ό&iAG &NyeWˮp|Ln=N:T( "]T7O-@60[# d2EV0 L&P8 T%I󫘝Urk |U+C_sV>@{Gr+9)2" ~7-fr[4A`&P=z5} bU` w8$D z#j].i}yG]oLK_Beee `xnEI 8Z&韏NQhK$?@P(`ue . pe 4 +1](NjT )B!mS'lw.'jYTf_`s|S!4Ryvi T@%h$*D]G('%d2 Wd+_*Lf>Rz1qHt =p8'h@ ?wJ~of?fibɩpZ_Mݿ s\p\( HݠiU`yyKKfX@%  $!EVX  en[B8A4E @H:#kTwvm|w=0(%E~ a|x$mf^&W?77^%(ʔ/f5AiF184(1%oÖ>## )vӃd0OBT2iR tMGDzʁ_d?EHhEB+ژ 58 !PASp~K}Fǰу´ i@JA"=!wbBҕ\N RU E&0`h< uż^>L! rRu9eoiހөrNwYb^ 3A,C<?ை B0($qAi.xbSR(CLݍD"ih~- " V#r`<@Ӵ!(5@ڃ>V>ͤ!4Z|j$ҨhNfHЛM n[ m^9)(Dsye\ ϕK|^/q Z>$z=~=AKC>ʯלn|ZB#NG> ,//cY$P0p$p(Tv%$awKiߐrvUT#316>zz{5Yx[&f*r ݃p8l%5 menVVV <(Z<B[[J"rVr9KE`0$IшЯ,E1 mFj>2Y ADȯi0e%^23Z}36P>jYe7`j-`ZRWQ[+J+]̀n=YcgE$MF$'deӁOx9a2}Ê~xe2ԫ0Ctq.XELO'EdS+jaZfDP $.C,ptBfOqjx9{&ޒZ=JɌ(ס͝A;J}cI@J*N.r4HZjLr2TBFzvo՟ϯUA^NXOzu%tڤ!^llJ7li[>2t &6k|5fm'Je+5tZZ`t|3iivL7'bϷ;C$~h䥲C7{M'#zdhрsk0y@_3=o{q3Q$͔j:ο]7ws% S?'t SQAu8$IFU"|=L an|6o]僨7? $hgUmj]{`^eFcPxslLbwWgivNԬ|v\NDR'&jg>izk c~Gzˬlfkt. V7GqkT 8>j#6BBʄ̊-41ǓB2Fo|yE=bE3/tcpV jee9FZsǺ 1nhۿ`dD3".η.Jkc͟0$"H!b`VȔT}@O((LHUH+ D Gԣ/̖"4<ΣuSrLa."zjGfԈ=XbkX}6&tXy'= ¯:K30ɇ1_06-s)>yUٝ&= j.h0pG\iDK]R5jZ k}6og_w2,bGO>m- hXj5vCȭ̬626\jF^MMYwN|FvjڃFgF/k/1 U˘61+-u^sѡQ7ˋ[ O0sb ?}iWS=?!>qo0O_br³-uArzBJbđu.v)Ujڣ%G0FT: rnjVäU#mF0/+rx> oHocvjPo_J|߄ᙗҹ&Z-8Z&:ؙF~pˑ/!:7j/$ OM'Sv86%#q9V]uO1lUHIA:@3-|TwTҞF+eyL~l$8 UF}-=f{Xg\Q=UD|n  vЇKy{_5 AS΍ԁ w 2.9WZ-G߸ۋ&t 1ML{)U';|y^Ge|^DaOv+LY\z^=dx MPH ؑ=(DW ϡE Ihw!1"g֑rULx."2$v;響1O=xe`xNRo:}-9;-+1H|/eO7 HNN `JvOI=Z TwRԈN =;ϭn?ǂfVճ<Ӿ=^'nڤ$ qxxcw2<5:FEӏCWMȘ{ G٩٩&4^x|ftRjƓ3M ]9b+뢞i#>Ny8%,͟YL>7o}Xt䄋[0'_,@L II#ko `, 4ŤBʓNFNIwЃ1ÕCZ!U]ѽF7Cʲo%?Nq+>c&F|Zuѭ"?,1//%|oXw>|tw6ϛ񏲒^g`+HTgeexDC,_VIi Y0iʊb=fvyrO6hVDZk@wl=#eV|E>_|q\)0g fGjT,A+Ko,2՚u0!ԏœH/+Ho$QV֪4+';Rqnw7Ϝ\ FUriSD}.vY1@NK]ʹVQfbwAgy/E4Dzj~^U{W*y 0#jE15N1޴͍ iW/?}l9ʂز_/'`v^~UW)9J/O8x拢ܤнyZ'|u oa cT]ӊ~WMMcoS ?<%]K= NT<O+b7]FsAg "әaqw/l|碀:L%ֽC̚kج Q;HoxݭJHl=7{WT)y@bP=(ʍ9q0d*&_̛,-0Q7?wgo:!f6[q^b3rbFao:(p2m$+.RpM߁ K޿HKX:zBzY|X|MHO/QiJ][Q|=˸sfv([͊:=}ۀdDZcQeg'2F9k9!)Sr0 Nl[Z9v6>׻%JV"<_=[!P/3ouɃ:"9v- EӢ ٟH`8xr @t"u"\ T$t^j^΁uOmq5*nʏ7Λxٶs1ހ ݳJol =hι-zNm>0+9-+)-ttfu9zIUo]|=渫gٶ_ONLJLJ;1#@lÒ(yR&5)WĢa %'$'$_ 5E5rMugGļw7.Gn=Hy|?z&@i5iBFN(tEިGeJ>d`>`AR$)4a/S?e!n9%D%kװ0hM*+J&q2 s[C+? `0ܱ+o&80>a +#S8?8.P[^7¹c_I49c7NRظC(r?(mthC؏pVΊc6Mʘ]@̔t0V.X1iy!ndE%"|kRk5N=Ilܻ=ƨW_+iK(4Ъy\e{߳5">Ŝ7 vy[|{f{j@ׂ֗Q'ms1 g eu* P}!#}Z3lm#ҷ?TԷѧC>֐e]{0fd*{K'! @bds 9ӒXAEK#[4KEdgi/}}h,l‚%o63]ΣVh*I}2|k&Zm6;Plj^GM:ATITQbJws LXV[#k8 g(U4mVlTcXerPAb$!ZXRB+*FDDK 71pA}fKm`mDG2uZjj(7p Kir $jSFՐWJ`UUҵ8Q iojUܦj첻`mDG%zY@@bJId߰w 泲Ti ݩxŚqRJsuU?VN!LAII@ldjd)Kbr 6fj9 @c\p@siJA3HL;WĽQ뿪0`uݞy$l!i 7 5*uBIa>_\-nзtҬUK' u2(QfF e9CDԫ /k=h8e>uPps /O\>sElߎͬ쬧}*D6sn}{ho63(}Q*o)6k>%b7,]0a@-X6DQS7鈥]z~x p}~ t.IC~a2TOLPtaC/GnѶK sjCa~qRcR[ü$oνkj0!k[F^y|7ŵ*A]hz}JIkf8g(iXPZV#}F%#.nծ&*j"` 2~.mr%oMIszttrtѩ{Ii!ւ(BU`Ħ=(w֠GGvCOCL0wYiq4-?P=IKL>Wnh7d`nأGRd`fѶ.+|߹l[|xy&ӎD^ i'%{D}c/g&*u#CK;c=  %yyZSrI^Tz>E:jH{ s #Xv*irՌӧgb ܐÞ&eB֬ej 'c˽n"Eyٍ/d-MsϖnRX[eիX6N~]6 E;WfYFdO tG˸I! ګNov팊 P^U' R#G( ^^r?&z+;00g b 9 V7۱Pb-NZە/,vKEԳk6ES `.o37\/U9.zjAgm=0a7Ju_"z t:o`y <5 3) D9r] #Zܠs޳ȏn9U|z1_:(#l]I:\UiҢ*.2KhF`3j+rXx"q]q5OVZ*3kxa`g=޺?) G:Ibn&ҩU$}P+8#ݹ@"=fu8x]<Mۻn6j &P Ge?lm"9 ZFeT*ā&6xQnƴStpT0V2avFzL4zri5 S&3:w.\Yv9$ukYjjH.'ܭE"&p<2alb0;L1P+jAǹX-X[lu{!1'zE \A#w1 IG4Øy,>y䖰/V˄>TGV(qO։_1`E1[_{gGmVhR}^~t;-i#7Wv Q Ζ`xl(ra DCE=tP W/;ݛf^?I`IENDB`glances-2.3/docs/images/load.png000066400000000000000000000154131246314757600166370ustar00rootroot00000000000000PNG  IHDR{L_=sBITOtEXtSoftwareShutterc IDATx]w|?g[ʦ@:$ )T|>߳<i{""hI!${Hlcn <;=sl?.\kT ] 6HOwkzQ xNrҤưVZeqsPt\kz,<&b814d_T+_!kl~QZqiɹ ~<_MzN٘|$6e}G%%%?b#zLIIqIIqIac{>LNOUWQ6>f˰Ebu+^oc0KPi[qÆsI`+@wo]"[v{B n!RD Η˭XhvG͟CE?<=qKIW;nW_O?1^q8~v_Oۿ&>H@3CkL nCmB_z9NƪK߭^ntɫ ^Vm|ҥҰ W޷M8aΆs`)zwG]S|s;ou|od-_ᰡC~u CgBetª/ ?J,¸2%Z ui@)jG3<;Gpl[`)+W&W]6jL>}3(?¡GҴHq/(}xN~ĵ/uRZ%(f?+ =x~[삜'mMi13 vúȡʵb3L.{b>~X1On>a{ t+2"Pݕ/O}i]*߈eԵQ]~Ǿ +6EiZA| H&Ghއ\`k"Nu]&]_K 72/5W C"c&$qlY`]Bμ4l'Dڥ$2x3Ƨb6U_r!yR(7摵_j{On,="6rO;]CStЭy[piƶg%v@!@4~;!) |Vp!Dg6CXGAC̚?{Dt kʛ`Έ@(KiLi@ٟ$ nҖ>RA=;9{YڡCTvث?:6jQ:EQ2~՚1|;9v(FQګ&݄7gorr ~ܤqĴ0݇K4Uաן{v~g`-s[ >kCy13N1! }Fڶȸ;ɲ7 [C~J)6o(Vw"~Rע'/(oޡ^z-ǵ8K:`/sSʃ![2 edVb} < H=ڗ1atNčj+#9TnjFac O6hʊAsg܁ÿw໑QO(^-;<^4H[Ɔޭ:d0AoGs15{9İ d#s  ?3˞Oi FGu8 9',ږXhDt pԀzı-bC TFe+ESY]3 g}b&o\E~0`$H%Y+rܱ*|DL57bu;6E9.qkΝċ5fg@0g;h7+'fV8 Fg6$"ܑĻhVsvIX'Gi qFĚYɋm;>Ku:I.΍_pMȯN?,~;!Ӑ KA]I# ;v'BCϥjaL߱so0dL:|C A5I/ܩBQ^W }=[&Cu=gb\";XWG1BqPuU2[qՏ-2X v"[&)<쏗|F0?~PcΣ+z/=/yjMlww<~v-u[ k/n~-24d]3R&GO 2z)q{s%@787 ӣr.&jU*Aa҅VMVl\H_~tLYg/UԊV%q2o.:{|˒fǩH=1qti⴯΄č.yvXǿ"`@l C^bVbF1" Qr.'UbaauV_ϋD@}I_L5iY LXFBڈ,զRE eNB}M(;kʒISwQ53׮OէE;l@Zr%Urn4ɕ`Qѡ%H,FxPóP]O#(F`$ T+׋#)[/y*sLD&+ 6TNlxCuiB{QX>yɞNҜ#UJ iФlauA({$(P"Bb]Xk`P)v`]-W(t`ۼ I&Bʣrjmʌ5'D>̚ dD-8Δl2n{.X&y r3{noyU7R4-QYzyD uծGIj\NlEg$ w]^]+~\և>M/|pױ5z yԃ'+\id+óA  -M%Q n= ѧ&}c+ :Dnq˂X)7hQPxx l !z{;Gp4aw9dW"˃;P.DEXHFyr*#䐼9Ȓs3y@=&KWO\~c a#9qhtRx*_xWRekEB%#[-бOE 'BgRq^%qɐ[p"S&(5edО@ɖkbb5HHEE=2tA&vިQl*ܟmRd_V(bY~E_yLdq6OH@cC\y  hqHX(lPxӟ{r}XC surJI.Д4g}5S ds.Y|X h-ϭ[tȶoQx ="cwb\>uͫNu3r qk2V_^2:N,dJ{(^8y ۳ҍ9;s[iiv;#H/KmO|QC:Kd MR?S`NXikpۻO=M2떑os~+>[Qu6de>;y%™]˦w:)eJ黫{L[fggB=зG t|JM4c΢qNZY҇s:ZgMQe\K1 !n'ztT~KU7i){~uy}].$"yKNoX1ﳦS\.0Ul0^zА&+lytlRfG׉:by3O0cs>MCzY_qv?W\. d@p̃;2oo-;y=>wHΠW8 r+JVT*̲?9.pW#uiٹے,#ʛ̚&1Նf.\gul@*nԉo4o"гXNp dnDь9)BC6Ě~2YA-B/ Yn6w3_in ǖ#&˱⸅I*.T2Y.CvBKVHhTuoFMJ”=Σޝw25f=BE1y^bF o7旞1! l rvʖV#_@ў5ŏr*s>%Դ9cW[%.Ҍ#X7’ tfqgJ65vkO5ȵnӶALa_ޭ'F 5% :iV e2C$N#qyogpeGB[43_lTtO%ʑ[Cdl΂$kdՙw&nV9˳xJ#S3v}cl^rBàkh}nf Jo_:+z&:fE\[)I"|j﨩P%lBB>m^oԸ::`E䤚-'_:_i6 K*B#qSB. 0C*xD,PD fXlE%:SXۃ \ Qdl,u2'9bJ  n^w-xN׉UNDAԁuQN1tvގy3@PIѿaX5IqYY!S@-GˑC2%A'bs@qF;F+v$eby eȚMVec "q"&s prO!*}IENDB`glances-2.3/docs/images/logs.png000066400000000000000000000603501246314757600166640ustar00rootroot00000000000000PNG  IHDRV7sBITOtEXtSoftwareShutterc IDATx]w\ӟ{WRX&Q&XcA5hѠ&j=$vEl(v:wrg?wpИ77| <7ζٙA6 B?ic@_׾AhPRP[VR10`mtbkeF!PKhd(5^'V. 7PuOuzF3`\WKir*P#no0. WoS}5_g Po"*o30hg @j( *٩xk.V͟ՙЎ05bZ_|ckXEA;H_Ywg r]O6 sq}÷['L2Z*&*Ww| }MupMR1#0`5Xjkj?rd(X'Q@wdܴ6W 0B 0016x%X,sa3Õ/˵ߩPsg3@HU~s΀ u`Wq3]3N U!Cvq3}uGqc 4rMWNiҸ&^YT{H^IU߃l"Pu[ 0` `;MǕe@4H^O|:#0Sͥwãuv 0`@#n ѱttܮw#N[LcY;VAƐC5s]LG2`+iUsTT#j08>ACVw?W0B 0З0:N':Y+%{6`Dk%6Ml!p**ڰ 0σ 8Fz*OuҐagd@4^Fz-=7*5C!p8lL'Aûr2_eIwP` Le(Up4UQ+y*` $3B,[)zH_vzaT _|h.Ȳ\;ڏNW1xO#U?4 j':uC,=燅u\D{ pe_&A_P**2ʝОz T\{R NҚ+ W>7X%G*FO I>=}SINrjahcSb=1oDbQQz±C|ycߣϕ}z+ {ǚho84t q n .n: UWcckwݩ;E䧏UIdԩ}0sdokwW<.ymnВ΃?O1%uꗿ KۏZ9g$=Z41so\.U;ϋ77r`C_0Wy|[$uk @|/`R̙iEyooޖIYJ~?s٤S}H~o|¢?VvgX)O,ZǮӦT E% |rb{;y RNQi;:q9<.DZ)EBQ+B9κ6m7(u<๷(-nb0r$I$]񔢨k;ؒuE5$ ^תz $A$ׂV5?KUzcV%I$) y Etң*M-+jyyXl\4 jE$I$?d3cGcvP ItܜBQ%:MC5׾(΢v I?(Q.l[=_&[( 1^X{L(*1*O8TƏY{ka2JZޔyh1?A>s\Kc6Sž5mph=iϣ䤇 W6V.h/_PX)Wj d -H. #}'<dz/(,bj,` ߾¨^-u fڥ*Wqg<="P}U+Q;:fi{/v'٩/waf},o1x) $@LWmz֥*{D֭fƴycch{j ~'{kqmTŬ khgr0 hNמ+.ֈim8*Ś곺Is^B{v~/\;,iRГƧA}-oߧzuqzL+,A*f}oOaO6Pk-iؼ0#}fNqBȿ ؑn<:,q.q? wEJCF~ں3~֫1xDm_BPw.䔛qLɲk1qX B:4 S//#\fd_%( rh.y$~ʣJS[͟U21FHWgőx<&Ӝ?Jnm]wpW燎 ?oo]:@grk֏31ݬ ?Ptt E];ȷC[|yۘشn7}F\0pM9[MRV_1>^rO&GZ0@ (=(`i{8XjM2_;bLZ }|VjҶl[JL=Tǯs[_QWN̤:unMWgeΕ|0Uϻ"LWn"aZҿø?snʍҷ`^{Jߝ6ҏe%Zwn'}:9.شЂ2T E:/:OQTۋ;~{&p~ߑk3UٿuW]jpr9<?+6z! -յUNo$ scEQُ/3_dݶm%H`d\U_~A@bFZG97 :|[Mic2)=:a^&,(wg?Nx;/&{msؼ$!#07q9\6}j(q =BWBgyUՋUؿNFlq+fw6S~)ƪn| F_g vxlM'p5^hPYiwH!X!.u 0`F%៨xU!Zrz]HUc!t 0`.!dz)ިz )bC]O$k3"\m@j1 U~ǀ RSB ՛I5;2jɍ^/ E6"$I BX:a,'qtCGaGB5bM-n^/ŀ3߷" 9[sg VEn#%)lԱ=(jl̾\ @?!$Ö:<;L.ю9V͈B>OWwsi*)MS k-TįTai^,V㿌 &@Vѝo eY4YdxH-upҳֿ˛I9[F.|VEn;S-A<.?QSqwxR~;hzOϤ@8>etPg.H ~^~͎,Σ .|ǰ$#&+ +\>rV)6\tvEBKXI%-K/+X<N\EyވBXIaּ90^CZM%@ˤ.Wʁ7ùXɍ۝n^'tHI)Y^*N8[igх @z [=%;n9/2~.l yqS3ǭYFᾩLsufD]Ws_,kiH1Sr]q0ۭe7 ᑟOZ!ҭe'ӡcL[P@8)7O< 1^-εA^ۣ!R?YnL(;!*7=kesdPߵ@(˖1hzYvjS9"&#G9Ԧi7&Z5&O՞'\L/].u/)P U+SY3X\qڻnj3fF]ɫ^^i?,xS?J_J7cK2]b@K0˝D◚ͯP./G?7IW_~d?B ^Ve˕Z .b2UF$ۛc#:9X!zDu)곿0pI{ȦY ˒?n͝&zgW_}'U]??ŗO _X?u#}\W/zU{! l: ë’O䐽L]JᲧ<y{$2kr70a^Cuϩ5y >Sl.=Xr6Q(gDw~P"AZjLcVPy!z_Wt^$HQģ4xdmcM!x|(ڽŞo_?|. luӡt!vֲҭ'r755 =5M?(&QƑ3 i(x!}x?GLto^xuB& o`wz9ˡۚRN&zw`7wy+_ &d/3o};8粕F,9/f,P%Y@pٛ[=ezjnkP^^8P";n9 =`qY$kKKfbz]97^g$R~_Kܝ"^+Oiv$kGfWpnڹڦI9 k;u - E؝NEwcG}6͡i!*ucH#z>A3rY.IyhZY $i XBiBS5wPC@||f=5["Y' VJS'mܚjBK):9s;f>,loNo[59Kw?\y>'Ťgi>Tί1cnٍӝMvbc4۽ҏȺYϖR~Rw5r]+te{wRrS1ʋ bv,h/+߁BZvsG}&)=v 6.!AAr޾\EPۻU+c. `11T4:s:~&{V| #Z:Dedu4qZe?s=7+D\t`kq>%< PVE]}k{Rvˤ3R wy|,,Xu jl6(}$A^kG];s#d4YpD27f>#=N->z྘_5$vn]n8TG}˾M1vx%4 q i>v^ι'R4f+$%@U]NNxO{4{"Y2+6%Ƶ^M_ڭ,,w_%FyhYyv)nj9[[nf 3e|{,M^Z)NwڏlZ7}nD / @'(!VwmbsZ16BGut|!9vÊdж'+fL_,|H.2n`YqD/I˳Jkeye*/ IDAT*Y8l}C'Tp_I󓋔&锛V{zgR%\j6*fv*wDEr̪~!QgiߒƩhR!%TU{.z,)(U]fcdCja_?>9?}1.l^/ߓgbotĹV,os§ت"@3-?ni.F,yypǵK^]R6{?nTzwj9y^3I#uu5d4/[ضh20В ,,J܁bp[5oӮ Fkm_Y HrDz1+ EJQZb}U@;[r@<)E<d!MfR[?IOo"fő*GR>"P䊡+Is_N. V;z%}wN+sGEWU׊PňufjV\W曒?/ZCE%& ݐW)˗ U"2ɱ)VM%GJ$Gny=>pr^K>ϓE8NӦu)U sz/4'Pi,-E2n$@wVԥ¼&cn|g뒵er^oM'xldh˞4On-,f%~1/8_@:4@~؏lܑ&5r]s_\BY?磼}TTET"^`'2Q !ȏ_(j.W<ٶp>Wu+ϿnLa@Vfjʩ|] kL& @8faL4qn*{ZXL ڪ !b8ﰆ;*p},-oOԯZSm J "ݗ7];ҧJ@l>wvB495WEQJ2$tYv׃RN/,5:9KcW|%Ouo6st^jamAtEPP]m,k*$H 珤OAldf ]<6_yS_o?7;cRe1GιWn L_s5Jm7ƞZ6ie!Pd}9˱=CzsZLriiF\owpEP P+Q`8';_Tk-1@.v9IEYqs^ϒ#dbO>j~ԙ=2.6A4[a=B7:OɟR[Ṫzڲס iR+o&{-aʾZLvxsYV ||}}|<|ϡz<$16FlZbhv!aivP¤GyV izNO4+$3yNΖ|%(d{ȈA, /* DZTT;pjG ȋ_^1 lyGU={] Yr*ۨ4V<:<<ݦԜ\1},؆)E 9暩K/ )<` 4#rH~|v瀼_M1 ]r-O 57$woŤU,Au7vg @%o>=}g 4S`'rӪN/O)n"@YKI_=Z;d\yXn:Ey;n蜊 6KwmsXE2Il屲<=ĂۘC@<ңcC6)X~Y\>nk]^aVX>/hҽ,yk1:[s篑ꔿڿOG}j(N(~{蝟JJs^<6o6o_^sU9xs"j_ {$D *%.}?fsz1]^6^%1OPM~0P:a,0` Y,T** i2}]az2y]vxqPX'պƪKfX/.~w*B4㑾לbX$I$$I$4b,HUCA I:dV¯sDKo;׺a]zCd4AlG<IJ;ily!J¢kxeSSze v,Rm-0 ZIc] dzKvg*::_owLEU՗?4cd$dHʾ_?R&09q^#_Lo3ʯ Efud_|]3Ck 8ֲ7}S ᑟO_DG-ːo􈲓1s}-ZzL(q˓oH 1Ҿʵu{ϻC\#utn p﫡CPޠSer D,\B ;䋩KqΜ]R‚[rxbjXy`ҭ= '\L/]Ŭ>T( ©ˬ,.8R cR0ٞJa9xt9_e-9e|B+__tX߽(6nbKq?t oa#EqZ1u&ҼvCw ܆훠2 ܏H %&?h,ػG7qizuĒg1K-&/Gĭ\RSMy {|r?G=][5%wg+\O"sYrHOy_<& o`wz9ˡۚRN&zw`7wyˤ~Oiv$kGL,_qh⽼6w F(K.TjrIRtHR.^PXU6]gϩC'jfگZUI>Eʾ a}oyÚ^^޲kKo۽gLYy˪~aqyRT(Q+'mݵ~&Oʜ۵"xJ=MԴD~No3hr?o!@ۿUc|}O 3ܱwg~TǐF{*/\\ZieۻJ3 etk2wRVDoH^f,ֽ򀮺!sk. ~Є5<5ҸԀq>c;w uq> &ȍ==۷5sW7MЩHn^)er!f=[KIu90=h dz/3#ymIVUstS7}TrZK7~E==snĔlµxT&:庾lD>ɧ" ,%U8/MGY 53RܭoeaqAEe% {7jEtw#+)=Wۏۤzo]Ҏۈw-o|"(wt._<  @=51j}֍_~)f>|_d/+߁o4FɆiH㴸V:xzdl{E"k#ע[׋\(X@8l VZQqCn`nj[+o\oҷUmW [7 E Cc8֗4"q{qy{#snXF<"Zfg'\}kj8˜ś4Q LIW=跿i:!sOQB=:/ڵbM T $]UتmT&H5޾\qGeV. xeZRr c0ܛ/Jhr>Df. Xڃ0 S6~̅]GB^ʳJkeye*3Y856";kp8 [|`kL:F21X{7*?2nO'ϮߺJsX߸O۩wM"@G)}O.[H=k/w\۸u%5ˌu:_Gh/z։LkbۊXu*XBE_p:ARR]rdձ7ǫe#F~5A|Omz ԳoJJ QE O Hs_Vq,曅< |Tr3\HOɂkt$?ዧxiBŚPGٵؑ_u+@ﻛvZѿ?Le45藥 1Xy':,$W +4:*Y`$O^kƛqC|z 朒g"V-xEJ`6 o@zGnTWq8[+9Y)f+ 80?#q˜j7P*Wr͆BY$A2a0S5Ekw%;@V>_7]Nt ޵{›;Rb/.+5`t;[},,|mr}n.і=iJ[X׫X_b^qtho OeuFYg>(6* [Gy{~}TP|]kNȁt?L/3Cm qU}E=nշ*jJ.T"^`gS*Xǹ#iR}PVڲ!b8p;*\ uGǥ#*}Z4b,=k Mӈ԰T*#8WMىYr ŏu{1VzEf6T(H[g+K-TJ|ImL9rĥx+(Uup[Oe6l+SOts`X^&|Ѷ aX-ΕzQ)uv0Q'uwQ8{͙+7:ҩiԶ}oʏY^.0p,2/y((S(-m\uf3n7:+~I|awCܰ^>~KWM||@`y%]?hB~>\ \gl^! tιz=S1:z4liF\{o__w[6BaP%D9ZN/ژYjM_ mASfJtSm Ta=B7:OɟR[N޾> =mوÆ4)7Nye_Q9&\]>>ގ\`rC yC' ri;xL;I2[Pd IDAT>(R ERh,J+11W.j؃% /0w=4׻[g1́*^o'HjˠmkCKR~5ۺ۷>S}g>LbUg`~3-iCGɿ|QU˫BW^U" *fa8aG񼠙[FVWO][wK?,VvY}hW?$Jutد}]@@Q;:IYJPyYvjS9"&#G&f[f?N+P8s1tA61۳$Uh~Javy%===:>:vΗDYK=atWv%/%~ɒ~puo6 [v! 5qɴ{#,z!-yd)"hqDܪ%eY̒| |U۟W}Jsorʀp?gl#T=eT9ߵ#Z}*KZ0gobҤ[ZP" 2w^V;8naEU)J8kBRi+l?u#$_ l8dϽ_d|جiKu|Q$~WL\(A~E8u5c_J{̘=cv^jԕ<;.SkU*}jti`ۨ!NҲs K<ΒC޳]w>s8E<e;1ll'Gb1Yڵh^]zx_|Q{NwУ9\,HOɆLMG'^yU{"9GJʛClmP.C2"=߾P<]nyPCB%{r0.64(to^x64&*L96XH+ͣcL76{Hٵw< K Y] r!hInz*m%r3R(䦧XXS4k>\{Uԣ}7^O{s4yXxkDe>˩Xlr2ѻ{{$s[&kâ?r,XTFԁt'M*TR? ]j7hޣKYd-x/Ƶ/+ f _u4 ):Ӱy;gQ~^XytR`Js@^J7 ax ]{{mLF$/y3:ԭ.뎌v Gx^]q.ʾwr!{/DHY|lNjW. lVg}^'yefNHSJj+*y]h'{c,<'z 99\M7N8k-uH >/ǭG:<<#kt!~ԕ b|7pNn?\W8)nz&@ӬCQjX^ڪ}GhC%;!~Ϡw'z?NRIiCг<ﺄpZ{[a2 yAI13r0=Z)LHNM[/$;&7L˜# ;qZr@") ol Zv[^vӎ3U$c2,!={?;e/;7cSIӜau']Ӿ =P}Y˄Ҵ+tǖ2~֕ՂG;m9Cx ֚j_m\(9Km5ﲼcz %54sǬIeES' x]Yvӫ;qhWO6bu>:݉ꪫ'oקk>q"xBrVOV瑎.?O7ޟ4iaR]1OngSkO_Lҹ6=i^lJ>m(/k VmƎ1cؒO,z91I.=V]iKFsN}: 3Oȴ'uFkRTU\mM{;iiF1`m$ku*e]uVN9R 9w'“Xq>?(%m^wP]{I1U[׵͵Z-ݾP\%R2 i¾& rіeJZ'Ȃ.g'{u{[ՕH6dQquZ G/R>:U7NeWko.=s.~WPy.Gvekpdm WYk|YC\xTd y;%MY]ohU2%ۧ3MZKy䩲Xuݔѧn*nn.%!0is$hrC-l{UwnHڨRTWtgsdhZ^SWUu:^<yc=n|Y ]o3 /Z7(PviWQc1yb.V2^<5yr+SnKT;q^m}utpA5 k/"d8+ EnI/GlaX'7kmX Y9*` #; jnϨk}4_f@mE̖[s&TbSxrR`(88UR 7זU/[x-kb~(/6ųY5|Wx| g"#7*ڻ8kY،3EC'33yرqBOH'@'Pj9n"NKGp* ?.,z}\9er0Nvnvޑ'6f'( }_ؕ]xC=Grc;t JLz{h{ٝ|w!HC:_6^\V5SlÝɐj yݱ$O.cu/_o?}7P]Afڦ 4)9!%׏~y X^3j#D ]%s`B>YOsCAÇ+3h]{w#0o?.~nیGǦ '!- O_+ܹ)Dztv[+&AXy,8ac㌩o-J^9c9M+ "ȗ$VPXU\h־_k_ <?~񆾋]*#wߞ~3(JܡI68Δ8veU:Ҿnwr";7,R颇nVw3tQuzi:Xm׾XEo(=h/j\ź<=cݏmuh|x𳯚fN~T{5 K{MTԗ~@;=i+zzGj%_9╆.nȘ7x؈L=k{oX.u)iw楌₪៻SN<Y!cLX_̞a6`,RL h3SwA JJy*:b7L aJI \c[ D R퍜U!ĚřҙL].U/g2B"W 餪mDΪB:U*XeQWҸIHӫcfh`Ii֕WjيED6_- :NQ: bHEڳ;Pҡ%fDnYy mL{(L7@R-EJJLM嵬fX>c jQռİt`M &@HK)E:h]BrU  ʏcmH Q'r2(ԮQD!Ԃd +G]EoLh=bw_"d_38`澲!c ;Lrb6c.(f 41^*[CӰ"uDʯ.5" ?/!f4v#=yԟ'k]ghz d$(iae[wG޿wroFQ3t|ՈǑ8˘zΣNDG?`uۑCzqmG^VIu;Y5tc‡nK(ipiUM?GTlԃ{/頯\~-#d?H̽ԟ[0QcIIOv¨W"cݹvৱ.&D8"ٮZHWyb0USw}KVYYqIgi39]V|߷ QeŅL0 ,/+)Ͽ9D&_^R^^R^VRQ;k"N s;&+|VqS."I;D a?yu̓Wyo#9[{χ1N%SfIKCV"nT߭$#Tj hmbݛ/$V^{0aݡU>4s/zGRe%,-ouqΰ;6-hWUҘ#cԬ:*;iQzM{t_=p[i7 g Xn8io 4+Jbbkjf/oZkՒD (i:XH-Bw,mTkyݍYM@MYL?̸< ' ." {ﭏқ|-ӧ)*írf:;ߎZu$?t{gk9v u#N| <5Ώ"̳1;pM_z^DΞ* gCW9IJvOl,%E̢xK3Ke<Ǹo{W({QQrB\r u( b>_Oo (yXkKok_;x\Du _vL1VQR̟]JoFH Q<کºOR!Gq9a5 qi7%=L!LO J6&` κX@ȵg~pnӻ<- sv@屓OKjYR7or-,ylbSfۖO82w#@4qpj/A+'.kF{kt(#Q@49u``Oc,6!YW N&p1/U++ʥ=y-Z,d@:q~ E&]& _12ԇ^ڲCʡ"+k󈹞eO."ṷkxW!Q==aa&ZRӌMM0qɊM煦T#@>C^lu3ŐصK͉ɕ`mB Md&<8`Q]-ۻs'=96!GBfo"I76イ$9g$%W1ǃp])NV-J%!N. nAd嗛AKnooZ\5'y3%lĬ^ xZ*1^]DJ*QƬL`M!]#A)qe^9 Kn^P_A2ʣ&CFʍ%%r@O,BQ&<w\AW;G~{H%`x9,K_J$:\Q,{_"KT*9f͠Raeqvv|R xqi3Ϙy9]]6gCLE_fO$W&`iȟqj²6DFX_$DDZO6<_KmqY"K`]|l5cAЋ_s?%ukGT٧)޳j6~YyӃsTEvֹ"Don),$-uWO.PoդVV$R-u;h9:~cy B8vv@@&hn˗dli bC~5_b?xp?s5w<&SzawQv0杪t +t.OzoVuVǗ6\#[{{[#ʭ]ͺ!\j4 g/k8`ԳV!Tџ^|UL,GBg9BuR(t9Ⱥ5SGxwΣM3Z_RPQ`?u.M\_/k6KA#AԔԔԔreeK@T-$A ,Ţ!p9diJq,yx͇QN2]~x֦>Z۷62`<(%5ӭ>OU)wTw_}DE_%fTM{]iFFr8Kr4sl߷vХ ~sWg+i #e:XnF(==箚;o0TߔS[ox~|D_[r 6_԰Wzr:G¦sñ-,z!6Bvtܸܭee/+S$-zޔ'|+D> Q6=ss=>o06B$W_x 1l|L ^P䡯B9Fe\K;6='$V$h`=bR4tM!ezqE0 6czX|s?"D5fgl[T8r.\(pҎe\(9L݌ÌQß1$w"0I_{;\|~Ъu rÀ ORD'EsYi&퇷({\ ^lqwX֭1K1U\ LRQU?[oXDk*d%dI)3AHPƎ#2_@ʧTdme 1vI4mN0Re*0 >: b|/7jlcz#Fj0κaWT bύ`мJ8XR>gjDzt|n#7EUTjX11Ө 4Ho̍+: 5&D?tZBɺ#U'%5Y5! -VyRz +慬IxxȪ!Z["M {--3IV Om&@cyܛH)ޠ5;+^#]=u1|uQv"]s/p&dتL5H6ʻ~W?ܧfJđF6>S6Ax篝:݌'|3dG Ftz8)O$[4;[=Q_FU|3+ۦQaȉX"נ3̜eL.; ڴu ޽{'7KN>Wn4@Ҙ#ޞ`,0J أcWD\CwμGO4Ƕܔ}n`<|,*B`b̳>+p4~d{Y|YX7xT[G,KV<%"+I˳g^JP1Twknb~s<&o)o,#R7dC8M?yf3? ^BbnJ?XAbF$oaɇ"?"4T&(uSm7/۬oJ%!С&o~>|y|O &I.e  GXYկߜ[k|^kEM4ԇKw/v7F*KqdR̺gn% -N&ץ5+KJb<0èo:!57;.ڑ)u9L?Aظˤ7ޤe} 0ۡ1+UΊ ˸qFz|ֹ}/:ujxH#z$Ij sP <4#fGIR5jו9]Ƕ2dwe>;ki#!ltSHJT0nak|w *jA?B yDRU&@#>_`O=L+?~b"S&⽃:<Ԧ媔je㠿|WQEI((`u>nQ?hjҼ+6%0 iϻZْ6 1&o"j^FH1iq6&(qƍ*Zi.*W^;uA `6)Q0(A U?cge99ai)h0C h$Ɔ!zÂ)bס?r bP?o:jpqw$:P 'WՐ'dz<<-?F4r$$9l{@.TJ*hdYVrem/z%/spG){SD†P;Y E"e"@,Y.6gL.G)VbĴUݏZGOk#e!L,9em7_S]\| )N+P 'an1X+^`pn*fyzPZZ*o@JTKzKm]R j:-νu7IB!N&X\]W$0rqJl|Ƙ-WƼpaJmPY]2r&/JEͽ)D w0w~[ɣ?T"i$E|}γw<@z8OcT6߶.ͭ-,Mx2lȡ5mBX~^H5|8๋G8*3G m\]\!+gWצz-,|ݚlՁ#/MQ KRãTtmfmm|=. cC9[XNƇ #kߧ[#}x] ?ʆ:mC;;[[B, 2U_Ub蕬VHo@=xN\żf=&N߹mN>sn+||~ƨO65xv2bU;:5;Ƥ_ABQgzmX{y~HpeP,{rhgU<嫫(΋7o?1HټиwǴhO˯{g+S{9s^7d!roNX(O -x Jc>HVa}i00d3x6N.#2-F  DcU B9<yp2.hes£FYUzq?%!rf4Pu;@鉳JHcanxB/Nhkr:t.Ƞ߼6;~:rvt>YqoU+g? *Ңy_ePz)ڏ{?ɡ68kqYikgR6qS17nwr%ԊPcT}0b`P3j 6c<-i&9$2Eww,8L09 )a3BӄٗV-X4y<\Q8IR* +z(*iZHU;,3j.8ǰnAێ2ì~o+xHo2᎚AUQF ZV@R6(\UTYeLF8>4>FG#"ZTV3@VOҏ]#m"6&k RNjD" ӳX#ĦpbR ,w*cc5 豫?%bW6fgMGqfEZz;u`դ0g6b fʢEAlyj+VT?4(Ӭ4f&Bq~iKc?6%I:/F;P06u"@qv':Lzck 7x.7ߎz^tĊ@£ocg`@dK\ӰT}lEItKVf#Y6~?TRiwBߌ8@Wg/#-K<ۀ0a1t1\Oitגf̌ o95Ybqjt`:~6wIf|sϥ4%FvZu .]yIy5=;&Ē,_a`tx#S&}IZ_:dnnfy[ UW#-BT T{E 4CZڨ?tR w%cֽǦ)Cyp3}^L2S(Iqs/]{eirgw:pk[do9uIE&! K$MK걠"fEHD<O'O~im/]YϢX$'Aypmm5yV\Rn Yh*NswI;Iա&6 Ry\[βO6z.2KN$>x&]X\.@Xiμ+/狚l~rpȻWӗ}bQ ."4]aXf$0x#5o)&Z $^URY WWkG62iaLO/7򰷛;߳pu1Ysc'SxIa.m?y~֣I~"D=rsC biKXapv^ K:Q_s1CEqQGa3+J$<[/kˉ`OȪq#{oHm ;QKSPk2V4hOw}S |{>~q, 7^Wo< KNgL2 }޳EBJ|^\&Xv9r+GJr0ϾGn;)m+}g w"?\JȰr~S^ؼ%,lEʗ'0ʖ┄@կ/z-mBY{t?vztr!f m?e Hn4G)irŮ3O 29g '~bz_'|]߸)4^ H]+Ф#,(*ScG&-&wL$cNC[KL.fʾ>sY=[fF$bV=$.Gp$"e>x#.nϜu/m^Sg!ɚ@%{{:v0x*ULcUj4@q5M5?* xVC{œlWmi}ҷQY5;lDرWOQBʆH~>ȫRuݟ:<ߴWn/Lu%IE0gإ_W oNHzJKqhЉ,w4cs9BU|hoUN#C.YW!5EuX.xN5Sա5zbԫbq\5fԺe:k2#]ZJ [?ypm_(i$lӦ)f7NHs&{^9@1720H?eڞ*"Oǝ F˶\Ȝ_Β`v~dex Z9]ں=}P,rJ]$ s5aJ3!DӦDΛWq$g&}]+[!a?nr-ձ+>LA҉C>6w=wYVPW˻R̃$?ǃ̀{4HSH"[JՅfQ"QMjf56oѲDW+kɏGs[6*5L.-ɒ˜r 6)۽ zUcXkAM_w ;=/bny[kkarυbCK|֔EJ5D+"䰬B͝Xӆ \{n/" y/W+F&j <)iLt~)D+Ӈ4%ӹOd޳eUlGuGQnSX.~XkK_?H[V9F\D ]i/c~S.=u܏{,^A 2?+-?wvny!m8b_ѳZIQ*q8;"g}f:}S^/PaPfkְِ S2jZwNS=Hzw߾x*֦`U) oD.,5vIچtl:65WX+3zΝ"ǔbҬI"]`h& SJ4Mlc[֙ZW,52WncX7]1̰Ï Kgn Y7&x_kz^8߮>\DIna)cCr8d̘Qh˯ Ν#˦[$9KD,.m*ɫ40jaJ.TSH0%yOwnaɈ>*14;k70J&~3\=} K&}2ø>6]] DBF^IF*y<Iq-Zw_wO9y"\[1:>\ܲA ]h`oqbI2a5\wx 0374M t'm찢a3O2BeO/#n}a2hJn,K5 la R6UzuŒ.tX#ɢILR~*? }u'IiHcmiYX䪚ݤ^=o1IbJ -XNb]wn|oVN|I~l[yVL R3N\zC"Z3 fm-k R?o + 6@C"+4ف&~A!ZU&-?[ |RC[%IDATEi"ZV.5yoTqLu&f0I+rDk/[aL636B uĈV iL~%vU5F4$1(3 xV2T#2HLMQtU*,e\)!:9ar Fmh8o=r X+Q>dL,&Fu'CuZjhDVZ15XbZ0j׮kh2 +[:TjJ&mX0G9C.biİi7bbf k"a#N#ubzl*V۠3L+DB5иyM]: ;P$d ɹH Jĵ9~)j :䱜26)`y}:P 3{$ÅpI5b؄hMi,QEQC[ڀk'l:X$ivŘTbHQ3*a1XkMAM>ltјPls#4>mkPy0͐z"ݗ5* 6} A,ϤQ h1PYQoD.t,Ez>xOAC- [UJiHn&V;9# @UpyԨL~':&ע3CL(H5uDT_5T^r|N jG3tȳ @H[Fڈe54au7 V[hS(S:ߴ@D!( 1sZcv6\@*IuD" )̢c RgrJu\z;Te"\uM:}Λi˛E\  wqUs{}A\ZF*\Q*G Ǹ _;X=:^05j!ڑ^1cQі ,siMzmc)65,K<{_3+Z-wO%AL_mZؽ{GWKN|XkmB ݲB(14y;ij@j ߤV4|sU׊M{t%\ d_Hcq$ Sn~ZM_"2%\;s*nU5Bom+}gp"?rPs7i$*zŀSĽ,|8| K>TUZ)}֨P2tmc5C5ZӑZ_]7/۬x*A{HЫ[-~Ѵs2y  pÔa_@B܇G Y0l`>n ,G̳?Ť^9Iwc ~[w<ˑޤӄ_&uD\1Owzt Yta_Gs2\5ZK>TU;^JV:NiuP՛Ë^ˮ~Xֶ폧$s~U-&+?lЀAc'HwwpWՕS&8gՎ͹'8gՎyrӰ+GG7jy#G@+Cj0~akV;T~$8$ TKÉȨwoqmZ#WgG9F8n?sJI=ڙp04;uIcZn$Epv@ \?g֎!p`WU' >9#u5>mSGst1k6÷O?:/0.ƙ3Xf*Ps7= "brLzOAnr5!pD:>WRHV*䵗Q aP~̚IGKZhJd޻we}GweqQVP_c;d%3dA94#YSK(J-&즅f ǬjK#Ǵ>1d1\&=/H?*ks :5}*dl@ȱ* 11[[s?v^O*2sg& !ġMںr'`M׼."/Oe 򍯊IQ~z67gL9G4OPѨ^$I! rE,SiÉ ]}'_ Nι`wl- )ƧҸicӯ8zrMP&/.;q(\l I1 DyQ~1Ywtξ5s̛YBQJssd_XKeVr)+*9i\e*0J HxqEu)[؄io8];ܜǹ$pؼT[Nwr_D)*ͅJ nyO;bߤisTDc,ӻs'==J  % mahbM '669w%^Tc]dX[\E7V<ݽ(.a@y"B@@%b\5D0kƘEH%1W44yΆVOF { y47j|*z|)@:TK3+_NGZŨS*X~ӯ o-\wcUARxXѻO9WN|XyevbZpip4WheUBA!csh .$qG\EjNW5E1@Es#//'//'省M7Q֔n58*:¬J}]=Щ7¤LwHC!dpNob~D48g{VYO{0/[{=D8`.Ћ5kpdttd(5g V|kz9W1< /=/+!'!<<G]‹,898yyBxф`g *KGQGl@bVO܏Uy]kz58*fP(^̫Wu,~& CܣbbPE`̃-7:opv뛱1>ש ğ4yŧĞ/n޴97}rllҳ]V$^۔;/%66iZ׶@[Vu'Z.ke,1*&E2BՎ7=0sJ?/v;Pd p>0|vrn=ĵ,-1avkل_0dS{><|YSSfΟc>"_ܗUe㢢'Ho[Ф4g a[Sk>GEQG̒W9/%66yZ'cISP _|xۋfNNHrf^7l"eq[ -V B f5K»-@U,::5W9B{apΖҼ =.eouwapniʌT=eƂ dqIK^ttBKN*1aKȮ?ܵuh>[kǛ8-/=;ُ,x~ܹO?'濽i).|DoZwt1f8TNmO٥{ 7@9P+j (w,l!}Pz൲ ]s,=- J:#ŭ+XЊn4~燣ҧ Qkݎ0쟫xWV*PwwD}]l{ C埗V+07X5|2]CU r,L ʧ* 5/٘JuN r_?so9/ s]lU+ @]iǛ) AD3)\!#0ʞ,CvoYSe:bpgЂ?L1 /9A/ռB:904TN 0@V{ufy\/60%'Ze"ӽ=ʅ܁Nv1" _OzS_[Lm ٕ͘dsl&f뢦PTK%62E g9x3L'`R̢`YQ(ʾLtě3of  !a[R;kZ)+)>6$Kz0rWq4"ht LWFtM?ŮWϖx+c@]Rw@G\v):"u'`*ԧ(_PcĐ1ЎfH`JtICNqY:3b P\1%0Ub5p\K#4Pr jD?20= Ƹ+ʫuA`h ʰvU%-GKu{5;kˍFG]UHC'feFL0R q<løX&ʩ`C#W"DM vX,̲ DF Fׇ9"k?h'MEWI+ ̝BɻXPIENDB`glances-2.3/docs/images/mem.png000066400000000000000000000324231246314757600164760ustar00rootroot00000000000000PNG  IHDRLMEsBITOtEXtSoftwareShutterc IDATx=u\T b)E1Y[Zsu-5wMPWlE $$ffSofޛ@}f;ws dok@/h,)'Üo~}~bo Lא׃hG 6İ^/H{u\G_z&jLwi 5 F:)|qu<>B %&=C]ord8E:9Y%>VCD#P%4j(VBXABZ:*шW7~]ZWR4K*-+ $_Z0R]_a)7ǏzhrTF #D&G!?.DJ߉7B?v$ #f2>~ 4ʸbT~=q/¤e@bǴ8_@\ю&tOg #O_'u?а=;!jtۤ|G2o^蘚,~gS 긌`rCIXL*Kʚ*z@ggn{'B̧}rQG>yӥ\j|c8a{vP螸e6j=CDt{I׊>X%_!,} 2N3_Ӌ=J{u| 1/O˗ejl0`XW䕐:Q6"6pv鑯tHۈ4nC9k*83ѪYbfޭ ^.>qͳ׍1\&sm9S0j勵KZ ݳgE-ue\ޣֲ$}fjY,]mk5tjpfJ#6=<?۷wm̪ 5>t~/ua6lP/e|(W˜v3+'@tP[E)ƹ7)%9 ݷwy-G٘^$*֤9d U`vg\LS5ҍM?2,nݽ~xhkoX @9Z9v IK]Ǯ^љe-tq]PN#E t`MyV NS疬)e7Q܇sx0c6Wn *x-dѸO=O׻܍OOucG< zKTd}8U̡$ܾCEvۛW+! Q(ڟv8| A[njb̈́g"= Y!L|V |q#AK<={%Nϸ&,n ljmbi1hþSw{c [xZͯmCwy {?~P0/O]&>;ǫ 7!Wf{5ItFi|{Y(=En sc羻gzQ>2.;0 cP/et*QiNVVv#Rp8/aģӘ摱kr=W?yoJm8m5QjW.hܬifM%]s9Ȣ1ܒ\cz&JA,/uSyi?}'"3!ZvrviSա"=@lo0jz`v^&]z#O.dk DP<{ӂƭ77歧@u޷q%;GM9~ձW/݇/.;Ia'˗IU0j!.Ϙ8]6B uu+()U`ͳwt籵$B<MU;bqN ځ0؊̪ydarRX#1}9?MMs$dY.;;{pΝ;bl;t|+#S'y6pl{[伉+%sprt0S#^lջ}$!z|+Lqݐ#79m4BliOFGG?4=ae14ۤ3jAweU_4ffn.^Goʓ\lێσ$F&<ݬŚ@\.{bD"`}5:1k6)&["GHK? K~λ'llݢgm} 8xq;3-Mk2@`ˈ^2\\`3>\Ji5,1DŽ_iR dջ]B5ت&[}<5Kaϊ]ڴt^t/'uq.JŸ UO`zTAk2͗n$AТvφǕ1JR֝ OYȳc g3#WY{1JT'dR/_':ԓD]|U,!<;q8l m88=CRaR^ƒC( Y^[ 4ை,kypTdQRN"j^ܬǫ5PQqVШG͆-\XCHd<9\(QI=|ORXHRsɂOJ{|Tlm,< s]{m=~2,?^"E[9[ u Ysw>&ܽ\-ۻ5PC⬃WdzV-\X++4n8zR䕛6 u nu!)HCmkﰧcjPAHxak;uac;{ [)Ѳ@ngbǷ}xw,^k/7mk|Qkv(NeJD8zbĕȰ.ݲW;5ۭ7)Ě/K#*C=c}Z d?{ƶ,f˽ xЯ.ǵ5,z{Ť/v(oi_'@s /er#4.ZdokKJXd DS8/QL VD;ÀXʶP[ԋb̑ * d1e8Oe7r 5Of{]ºULLS#LŴAJx33ڊDS]i*#FfN3Al#+hCl(Bs]`OcEёZ)Q6Fa!%N8a:k2ièҮ *cw|4'Tɉk *Ԣ|ÊR5%y|M-m Y!Vv4IJx0H_7 J]I@щqiq6%f e;%_.Vtrjhdq[)9k^Sՙme'as6?Xl܄1'C%+XY:r۰+9)pP~=Qĕ68E@!|sGٖuG/&7qŸؾ¥AVg:tѲjT 6n !Mu4N ٫Adf_I`&8kAwͪԉGr' dx;'s2rwb zffW(œ|iҞMؼYP֌_A/ r:fwg'lM"D*{  ۳|RpY.+܊hQ׺IP:[b{@Y'U誣)c[XY/?$_RQ=qܰP\bQ~MrNnu+UAwʓ?!{뚵<7/ F)avjU949P#d~ν"1] ~bouzвy}ڵ򔿯'/:r<ѳ1QW>,ab;rdrBӅ17+V,&(;_H[6s=:tBVtpuc;ѯfSu;o; cNJKڍ+a>~kOe&aW:RgA5P \#vUM(N4яGSQ(ee-א:p~-B&j3yNܵPi$(x̗A~1`=u?2w 6mݼqN7aԔ|ɇ'TDLH*E ~^w-askXzmnwpx$q٦"mϣr[K_SNJ"KvWBhKOTY&e<%2 .*]-].qrv]ϛ<κ G3CT_EyN`$)O ()a1ь`qGݱpʌDu:4CH̏McRY8;>ZOpk& x[aȺKlͻ7\?>F*۱ {V*0Y$02"{W k2 =xU ߳JI.Z*P 0ќꇐ=||.Ky"~lصO!I"Vͮߌ]u!l팍1 ̄/[܂]6R\ş3O-PRtS^Ym^ ֌GLȻwB^nMxw1FOU{1 :wrwL? ;nc: p\<B _ՐRIt? @liT"\y$i vFAlzL6~^M,&vޒ;jيݓq]/s^|F@5U'_ĶB=ʊdq8{io Zy{(qFnC{Qhڰkcӂ{rTe U&;G ܳ)#ZY@ut1!9 !Mu,NT *EQJ? D&լL򓶿_,&Z2e%&f5- yߖbkd"cO4^947޹+ M'ɔ #7/ܓT$vKȼ_~^7 sb0V,Y=ȭWoŵ)BSy*GDKk4>~̂U3w=p3CkM3>Euԥq|qj֨!fh;}g:hkr@Z/s>{~O.,A*)*TEE(E֢,q]ܣhמX:Wv1`Y KZ]wZ'1CIvo,^TECl ꩗3#סSm$iuiӹcߣz WCVN 'di9wWzky1 wm/=rbck=8Y'1YG¤'=M2vk١ZӻB)y}.GEܺw]pCi!NbM_O 2b<˓XӗusŦsɯmڵGGX4CΧufau [M#cGFEDFG'=IهB2s0uǷdq4 Hpl`cL Ǫ*5M@B6d# f)UkG{`L*۴mY󞔐* /6C) [OAR%4}&lWI"ɷ`9~t%^^\; ͹C ˶/Ǜ[?V<8ci}T?&||.]yGihq^J.4pB8["MIHj6U~$`iǗ+[ ۴ّ|8WbĔ-ͺmI2噱IW'+6HRs98/51)+\݁袨JH9{Hyr `LM=QcQ)R0ojF>1td+t[m1)>ͣw$eȓHbݖys^rD<`вs96M,03x%cU(M0 LB䝟sL0/SSgm}ۡ8 :vI"T"$ִV:da͚k5|>uaI%@~m?lԧC ~S.t s(LxM3E"󦋧LzL6߽H]'K33 O\A˫l"-}HgAt1kφ2 PDRbBiDl!}.^Ue+[OG=z20Ę1ku%ROE` 1`DI>GlQI; <-=,.wdTJVu!t kvflcmoƅ #0C' FzCf:7_h=&JutT|P$2R5kp~bu?(K;LFjxiC>FHJtyHx:#E(I%i Sl{1fѢU% WQc 0RnF7̸oF'JtݍzdJ"~^ٴ o/PL01uSQB~TX5֑1T@MuA:as !F#lW1n!lbhv!Ez:G :HLUoh0`U!0jAjMʜv7!LY) |KShLTqT؉TfJɪR+/r*)l" #%qa+U:SEeGA"XUe61#iN)aj}_@ߕ~xWuR[?IENDB`glances-2.3/docs/images/monitored.png000066400000000000000000000276361246314757600177320ustar00rootroot00000000000000PNG  IHDRjr}sBITOtEXtSoftwareShutterc IDATxg@ڀߙ]`,*6jXr-1$I1zi檉Ĩ1`]4T/m-,wP]`q =/y; @ @ @ @ @ @ @ @ O>~1ݒy2ք @|3#qY" @bX=&ur)1ٛ 0>*.{;a 5uJem] lEj3t7;`!;:?6ݶOl"l9Lq1 \]Lo,}mS@wKɟԪ[XׁcFM2oæ)릯ҁy3m(-{)ɀUKu&j7?^OM()V{'u?9ݞ?9L% Om%sw\\2~Qk7M 3= /]s4zl~myN 5> i1/[?~GcvfkGӨ`nφ$4e~F\`ΐ$? ʌ C/˓R>t AZqaicDϱ貔b`;Eio4J-2j| pB_Xl -fqpSb@[n|;%Ifs+mHӟ~#։R_Usa,gSA~H?C+6܈tP{k)#'ɓEnL`Y%_-r̭._7efo0gٲpQ!g;*U|^H 1htjR)둱XNχN&ҳ~wޚZM@PR%y;9RxV QDVkjaz >_6(zp!Ϸ: hipx8D鉹]$MJL㳿/Un/ mߎ1g}"BkTS/橫`D˺aGf0SUuBSiZwnu7-󘙖^"u&` Ƃ/ d;'f.|7e[+#or:;, uv@iԘaP%D+wNOfts(rFOUn)L3fJRssW ӵxsk_kUf`ukE%UqoOqs0wx|p&Fu3 b܂e啄0: &OIbu4(AڕRlۧuޓ3|/!hvWd*ivn9J|O73Gm 1xzW;Γ X`_T|?gp=nQn nQ&,]g˅ -'7b'[Qx */_wpeC%^`x~HnȒ;͵oܿ:ϵ4tʆxeϋ$8qH/ m_' &.`xz^eA).-(WOad繫HNyAnxT[Cn~aݶ0&h5!ϸauArR I0ü^C4'|ZzΏcs}>tǽC\aA ܚ3{'N̄QSS 1^`߱/"9mٚVuI[Uh^=*x_w2HkݺO]8?z{ns|:IݙRz7)a)D,F7_%s^Ш#; x"Rhsbu'»xa@k.6$P9R}yVj leZpM5 (AQ,MN麉n;$jPդUiH8ceQ[2/!f(mʝy&A]24`A_\A4Kpc6N ozs߽ii2*PՈQ[t%(o5p`5Ͷםo~i\ D;ݲ6}Kmug oɬƣ.@(6{==PKu(OpsE%Kw@ꬪ:\Rhlk+.WݢιE4$ 5O4 [w(hC?Ŕz4T3r0Mkh43KRm1ŀI`[χ\r)LIpM/R_YR\(14^-6`8 gYQog]&s1ڠUqcXL0va?S.\Z%DNvצ7~Fk1j,VU5#zSM>j`ܐ1 ںbUMΓf|w[L?њ/Y-)_G}#6SAq8 Lv]*rS R6v0+]2X-lU2枎]ěW^ Ko6&S9|`0=&Tk[W< =l dV{cuft*۔qtSCc,-u~>th]+#/:8.48"sNjNd)1/NFG߈7|Ż^`SkĴ ryic|ROX=MXO EHf5$O.ʪFs0D~!H- ~Ň3tI ?W!zpħU6֝cFlfy3\`,wv:I`BI鲀 `O;0pA8VoХgg J |nlֽV@UjO|OyVߝIS^ȫɹԲ~#]Yܩl~I.:`h8m5o5I]kUuVY|mv跒2ىӊYkwg1PXRZlh:cGq\uo6 #ٸyW2M9=B{s_* ϟw1cr{ 秺nU\| < Z9aҷɵ8x]^8 a gI/Z@ @ @ @ wB6_lVGζ/10ce(KSε?ei6R_:S$s~Ib`"FZz(<[xMK\w ~E>n4$m֞yLA۷Ӳ9gRر]mW7g|U]nUјTM<>F*mIevg G KOR(w#֖':df.(sHrBSĀձQRfՓjgxN~2+A_{:B[]yQ]㊧ۘp֗-6]iQAɩ=5`WO->985'-݇>y+Ugn?: d#IcKxof~T^,\Sۨ#y2w6|NcV g@^; '-Zk 5[po=Y'־3ql  H~ӉwDz-%gdMH2hqе3K]!qK׬8 ]MZ&<8J+J PӏJ]ְ/ "o9+j(4ãEaXЮM zsHn͡ϟ 19`Pr?s,fpՇCoh4/i;}=!Ml-d3k6寖k'ԾOr^?i]G (pqGܽȮ+s Gy%Z9[}2Go-غ3/8ECpuӻͶdo^ 740s-nݙ((lERL4Sa`0S&PqYx}%JQ6EX)Xr;鲶 `<e> J? ȾXW=ݾo "7ySgSloIsw_mW ?䷴_PS#ʡcVG;nMh$6|H'۷x>XwfqY th4@HVI3EoPҁ9t6mG`Ŭ/o`n4#~Qҳ^YWBQ16'Ӿ@w-W,bz5rWkk]<#W\-Kj:[13 MW\I*SUJVٙ( Lٹ7W@_*uyoBCD65UV? ;J j{J(nSLkI! Ό j?9_~ޣ&,TLiU&~y^޿ը-87T,V_?&oh}}'@2l2kc'ᅰZC> +KM'}w>kwm߳C+0 gqYx]b+ʔ8s錤w޾i>0,:0aA}Ew}!+8Sjs*nlpO.CG:۩g:wvH}˗+ ږo[,iNؘm3ex 0v ɻJs8ȫ9{g\7 (<r)W .-<{$TRYD`rpt?:eߗ6PYMfSodhߏ ]'|:a}R.xq}b2enSeᎴƛ(vxA˭;aOO;r%q}@}@ @ ם1ݒy2ք @ho[cX'! Ea lEj3t7;`wY tǁ$9<ӪȾɳ^%jn6?}-5){sR/UòL,oee\ũ&n>v=>:O0|gHeF!xI}ꀥӗORA^Otdeu .c`@Ӟ ^7{d^ͩtP>ewG󏮛 zfwVRd;X][xrH'h>;#jqdgT}dmPC~ouO}'-L?Jj(Pp̔O컾Lk D>b ڡ.AXk4][]{`oK}vuT4/%=m@.5e7>m!Y˾7Kl;"`qDž6 Ĥ杏_~%$j<#A}La)̬Qr\{I7譲[.yI bǿg>rNwjɿF Yț * PvwCa34Lbgm} 20T:IBzaJ!kZ)瞯k߿֪kW9BnfAP[F)iVt\=xށl *-%D˝#;dyR ,Kxg pv<&u}oXbt4()#=^$g,1@) ?SxjՒu2,ou&UE.QP٦3Mꈤ4Y w]~Jվea>`} 1x @{Z_UopI?Pԯ4 Qhw>M55` ߽newq><]^[V դ-푝Q[ "~|+r`o?)qZ=M,tͫh¸7Q'3uwKWd#̹Ӌ5gI&#}>IU?V3'` $`-;B#[3ҞUynP(:ʾO4Kpc6N O}:>.9)?c(i[lcx\:-풝r} ;D6ƧogZխ;8UP.IDATS \Z I 2[qx#K >mP8cX6`zD57J qОzc,>oȣ( cYXLOXr`q`w: yʸg$0fʟ *8 vŤuw26OQ Ϭwޛ)b̶~|_om]neصg:ɔ~;V`=087ۏ+`zNHgUWRP Mme(ﻢA}ţO5>eo١JqޑE쓪UGNy%t)Tܬ!hp6>iB^lvM4s'>yT~go>S}tAUٙԞؿ;J:LWNZȲuֱ6E G )qi]z>e?>{ڒu1ݝMPgwҲo+ڳz>*ʷ!>! ~] gdG @ @ @ 6=yh),{ɢ%ӮwBg7:4g:cbAʚ|}'Av]e_KvA^|ܬ?]l.>+_J1Z}ow-Н¾V8(<ȹ-tdg?=/*yRm]7Ǒ}e}U}`&q緢7e~@),p80fzHQcbVeNao !D|0Wc-w|s6fn;>=w΄D IT-rr*K9Y ?gZ'&~.(sIBSĀձQRFU E4Խ0@VpXܮ96v|vnriJYpkB?*N[𘤮u$c`7um-Ym.M 뻬a# kDIBDi-> _uv|' `Ul4Pz% 88wd]qҾqG}'C'v7nO1dϬ<#4ZCT,ҕe1' kXO۲wQQJwo >,O}Me9dokd߿;Ⱦup<~x_LCϯ+r?uƜ1EZۂ^lfa&n*y(|Sz>)'7p76Tm:w=}Ⱦ}Ut}D;ݲ6}K1&Ռ7DvI*SU׎ix$E*'2ю8YtJpox0s:9;Rhlk+.Wݢιܫmn =<}߹~:8hgV5˛b`ǹ U8Yx H~hqz>%&tR~`J;^YR\(14^-¾/ ZԕcX`ӿ}}~w"'M k??#I5[5\jQ۷6>qC,^2j-W5s`,nS|:Uu P[[ȎO5S^"pXӕ7K,E7GTȾvѾ:o$Ʌ/v)P!m-/UYh0\{K ]VޞL@ poo ։;HZjTJ#UAűGhЛ\N HR.ںDAy@ @ @ +XMKar%[pݟ]0as m5_[}!cxB}L-7:->^;7طӲ9gRر]mW7g|U]nUh <#T9Oٞ5-{"7C6dkϼ_|&`׾;=|LD?F К R^'̛,B d<Z;?loRZM\^u ?̨WT1CǺIF̽՗.4/A"|z`د}ü1pëQG[;2 #}nkg;|҃Jͱ#5޷>&Hde@2`0XʛX<>K=zm)qI7v\5\ʪFc$7SSh;E|Zjo2eD==7ů&eޤ2"vѡǽǛ |C-'K}^P;?֌:zɧmM%HˇY2\F+#ŦV~'\W6Ii2+:3@}ǚ7=SCc,-ub: |I̪luJ~SDžG$IQԉ,%W (r}϶i^#NFN~8hOS|3Ud⯮7 e4!>vv.o>7?ܱH]:?Pf(i(d#J":d:I: "1˘PYM!Aܔ }X L-rwR}գtj |G^fn 39ނHb:'J>𶭤1\°ʪCG2jUfЀT$!DxX4ZdmP2gr#v6Dtq0ښoK@kckr_CTT3?tLCO߹vDN€ _m*[ok#_+++++*m!Qu/Vj~!Z;jӽBG6<EŃC+8`I/d矬Oּc{Gp(_q-|W?^2> IDYE@ AtɖGD]@C `>xV}lV._r Ee*(:N{i+yQrZl(,)hjv>pGn5pdW8֪sr\hN+EEHQP@>,>Ж[)OZkMm_}|s*t8OjO lf]Ѱ?cdqz 097=PŇjHpl@#@2!2IDQ(JoI<" {'i֚<;hhdpۿ󨬈K_VԬ BpB)Ɂg7u?(4gD?S3@G0ן D$F%Ө e7TE6׷ʪOSގp3agF,j=8GO ?epb6hJO3&Ǐ+6kЮ |Щ]wln>v̽(O>9vyw%va\iR%ADի)& Osq9ʍGX, tmڵ=Y>jԜY/}.zKAU[,5+[a~|_43je#:;/Tt50 -qXĐΫ h.l&DtT7F[ n}tkǾ]C%[KEH%S8Z" #Kh Y2'0"`P>-MMCÒd31q_qcc%ud Msgm5d./<jj`,SA`>UCj>/{PaxKWup3"J$K@N;B6@ DžO;VEʈHx9l)=aG& 5uGkT ([I{^[ԃ',$ N" DR$a=U{nj9vxC8D>o9Y,<,=/'6xy^:yxgZ.nX{>{>̾}3]l-˵A魧m;ܐz$p4VZbZmeM. d0Ǥg2ExuLp76{{M?b;ܫ/tQM#򒒂֯e-sH Mψr % ֣r׏͚ Dž/>? ͣ0z@Lcb~@U9եƆ|TNaD]cdqq8|J; [98-9uflO{_ҹB (}?pU""XSF黻F7sQ'yڤ/[6{[E|?!#ypR̞w2:Xtq˾r2*$6ӷõ)BW~t ]41}ǎ;zcn'Ԟ>Qn;w2)}t{ x㏋珽7&<1ȲB3cy~c5}鱾K& 﫦QFBџON&?v=7 lxԴ@"N$݉v4?emSfGFgpt@hk,&IG_>mLN\'h=TSA>6kcSzh,H\G]+P}n摩WF8\<rou\>x RRP+wk!(r4gK5BwtcY}oy}/ߔje:¨Y(Q " zlә6~p.^B3@KϫsozW?DKIWU~(Itї~Wfto  !J<)h@-d >)_?9gG{OK FwUέ].Ap .t\.%k/LY7vi|ǮIIt'CZ$шj)dQ:d3$l&3q8cØ7M^?C*֧` C=(xɳKr#,9 M&A;xke$mR\ccB˒ s=Od#yDShz`@7R#i; W6 eød}u[xgƋ히4ITKAHÍ#1S $P2=.HU%I(:d (ʹ}mV=w[CioXvT.Xx*;$h [iQ r9HJ@>z_XK l]iJ*JgqrȒ"ZZ5dr1 _d:sV*5HJVA Y(G "\$05<'I=m$r`D[(}ԟ0LH"'rz^F#QfŽC%/DR.IYOHnM1tg7ϦWZ"fUku #'K|E=.wwBb(S p5se>ؚ&6FAv%eksceg)-E In-s *fK& yOؓ],@&l!=|G'l^LLl'E^m{h u!⿬g=0ktHݵ;TࢉPˇսF Ay̬ΑX{.wI!YWvID\;Y".p!{Gp&]ybSH&Mʡ/B8x5 FY)$L|]{|ۛ>$vbT#2)(K['<׾^Xd}OLNIᕨ!_nC#solL@Ǘ0=wO*B(>iv̙>85~'TAcg>n`z\y~Əv uW6#μ[ uv}C.$ 9>Yg}kVW >:O9#=}#5䓶|ߔE3XXCk~~n'}uQCS~/qxu4Ƌ;>[dZ%EIaziCSqǼz~҂/|m;3Oij;~y^]3*Iwuޣ?^hH>c*w3O{SՀ;JT/eD}/~Q-U:\"mٔ31Bm"01K/5"H 3r7NzCbyc}7cj eHR3-D^Q73Kwb M@ :\.|p?eA_ذa_7;o?K%۵]RU; 4qʓsG~ʚC"@pIuϖTdذ)7n5q?8鷧ΖG։A\9-Zk +G_=&|a n޲.A_\QtrC =䞇G|FN0EΨs?4Α'tO~2wC|DJ V-wJeh96! IHP"AK!qB0{Jnʥp*b:Ab'Vx 6x97=bUXv@viO|r;yT e\&qĈp,)@I ʒ,![F o2b?XHvWuN߻c0jلP%F{Qvu@Z?@kTM}9DDb81VKdFzpmF9-)6`+#@HHM rfW" X"3:5s< ZA刽̮3􋵠%a:vqdvۈ.qq69-Zc؛yǐn QqiomLUQ6[Pć&4ټ{֯C\BJcg?rsW?=ntU5n>)i͞[{_Q+j#؎MSxJ*΢};͚'9걳'ǔWUNk!~9QGnȄ{6,!ob6gJΚ;9걳&EWe i&$au{it/9Fy3Co7\s!"oFrV>[>iTw˩}Qcޟgi6cʸvYSrwoٕSf;тcnI#h>|T7d?䐚rOF\7eM4[ bhE:tdָAl;U~ݴ' K[ "qԨԣ{k5!)U;V=ItݗIm~+XOSG5F1TIuSg4ahr5KP/i#GW;䮻N9M"hXTyIH)B&ts+Ց ۬hM\Gg SPE8)ktn62tU[ Hy+:S!Ԁ0C`jBPxdH+0Crk"߰Ơ@2"yQ[ ]{_03*F`ٜmgI!S tͤf}lcapޔTǴC@"&%5kD`:bƇ;=f@mT^`[oȮ+Y o)!`ʒRA8vR^9)Ar{H2ngCyd m9+Y|N 3le4 l g|T5 >$f tJaAudIqd!m.mDU͝g!bCU{{?bg,<b1ThKíVĔj5$J>aZsFAeB|T[5eޙ](jK ezL^B'Nᡚr^{wޅa[6UgDZJiI݆`0~+o>PФӺ-`lWvW͠SZacOJJ>uNܠ,@l{lhg¬EAAgKW?[>:2j6d}LHC_UESQr"J><~]UrfY꺟iWޚh(oN:jLޥskR4K+#""ZNXRFYˇwN+;U4\@+wG}'g̽{@1Zpߝ 7cF *^"`6힥z&oQĶV.Q %ԐX\Pxw-sIDATtX8V]PݶM]d.Iyvh̶rssV_\@ߖ:65_*$p9 Б MD116CV ި}!V̙l&q:r!Jmx@k陲ΝjݽޣGbjвE'Ǭy3~q?y'K=Z-ul Wo {]p'٦kfX5E6+HJOMcl xo5,޻hٓέC;crlֽEN辕s6l[}ކG<.Hퟎ8OwUwr%t0ԫм*~{Յ3۹ܯϢ*KlMy'2~eEwjUSZDۚ!<)\[ZLVapc|Ƶ1}r~59"BsӅ\{:JNXe%Okỳ珶]}فQ@ dyN6:*{37JSe}K}TG6 -rn%,/<Ū %t6XÂ۞: >Ǘ^wXp'18Ɩou{ud[K4ge~. +SĦƓ'[a/֫k8[μS}]zk#n> y.XUy>~V[E/bд\ -TGe ,Fy (iı)Ig3t4òI!b @ei?4QDoRM\gzO$Ae g!l3Y֯qyg#/,7Q>Mo,؎T4i i[C/|?ޓt"(Cl/!ӄ]$.#  x*g3ω!G۲1fen߄R?dt3.î@-3ve*{ള:ƗѼMu H5Ȥթtz$njy<xcBQQ r6*fd<5EMuHU_-L3#n깍8y °.A+,6JWTk8}HCa IENDB`glances-2.3/docs/images/per-cpu.png000066400000000000000000000447531246314757600173040ustar00rootroot00000000000000PNG  IHDR,JibKGD pHYs  tIME/4uN IDATxw|TE߳-=J5"T)J+6|"ذ=* A *vG MP5 Fzm޽n@}}^v;g̙s>gj %п~V%MռosT]doHm b_1uĠ"HJWU]υ9R>D4w'Ee& DD ?mFRdFIAۘg+߱Lpu3^2mLf)\@ͦ:w% {Dpk!86(dž^{0TBwDDԭT~;D#N=Bh&Z,KgnEcTq(~Sa,f5'L\%xߊ:a%4GUZJ%0(Q2?QVDV47ݢZ 4o.1mwW\фTxjc1{Y3n!L&4Q% P')j]afPh 7TP7heItG! 8:sQ,e4ėBYmRX 68Q&u)2ţz!fp0*Ic,3G "A|> ^!b3񏄄f(| "!|bDkBnpgR 8*Fa򨡳6[OR}JOʝN\n.wyamdټ]v)hgΓމ]o3Gh\GS.d‡,5s&=|͜iU\6[ï,NH.u'bcyrG|a57}A<:;~^<Пw%*l 6b:+h5fo12rFEjj|i56-,;¯I/_S90alIo-N5e{m(?Ė^Bcx'9=QFe)0$y+(w}%KaۼM7}fQ;!c{$('-cn8әH6aLåLb OdQpyp,)s ,js'wHV#*(U?[B1xZR)'~ڙOhg@õA~\~V27&cG5`d FP2ezV2][̲gR{\4{1u噏?فMG 4K] z ,UZHjy6ϭG᯿S67={R.<6 , 8f^b=7t4|gy =$L\6W?9WKIxŐ=,{'̳߯G&1˥Tg3л636#(!Tpa/Gɼl$wY^ƞV<׽⥯2pt^^/izh"QBRyU .t-?8y7A`!ð>S|u0 eϠm~1i*ߑ8;K\R0Q. XEo1nm9d<}^ġ3 Noż9Zm+! ȍ*PMӥ&#>'[2Iu_znfxyk׹)JؽGXب n~czțW%Eꇂ&qML,)UЄ&xn&q^+0  NMo|ż5itP>V e n[jI*إ(.S8*GYfM|snzXI9 ǰQ@nxckcn[O>G`S=6=z;ޟ2)kIj w"\*IeZ |O;nS&0e{^ $hഩJicu<9ҁ~uaxV5\{n}:^a^q''% >Q]_{~^AZlK/qC&].2x߷O1n "\_lU̺G{$q*Yh<) q4L7z\sɧ $!UV1k|^XMU΅ h`nKi?*50th߁G|A[[><gL߃Ip:®B"x82#ؾZBV<7N[ :DFh1J:/ Y7W} w٢\U ]8@X^NW6Ex #zVZ$4.>Su2.W/dkUߐ%߾[wzViީGz*~9FYx85Nݪyĺ3|V:̾={B`$6&p/pӳ?R*Էyd&ʓ_ͯ{fq8i9{\ƌ{EE abT^\A{yAPL?~7>|ʄjE[Z L࿜ۙ}$MI&'}ŔoG\Oy7O~po=`|{jIaCE,F[}XD(rgtPF#mx۲KH?쩺Q(òHSUK͈꾊u_"Y k3 eE"2aJ(&J5"jEN(a9+>672,WGOuV1˨6Bbk{l]4"F$^NApY F@a/3Y=z :{.$0֗N=EhQR?pnmbRIJزXfI3Ujl'~2aT:GˌU4=\SnV;u^7쏿S5NQ*Uo]ޮ1RB0H2RVSh8ԙz  ͽQ>:VzX[AHuAVnit]/p2PfJHje8>:4'!cbPV{ 3iM0>S0tƪ+WWiQf|l}]<=eJnD&V٥SM?E $=$"r(2Mxf~qxWCRBc<64f8@%Q&|"eQ#+#$dU?Z[#7 (Qxx:IDN|-t&6f`w8ܡ?u wUX4B }OUjMmQ4hWt\M3ydtc&?brT s,ddE!"u^, n[>XIz*c'T  mt+ݏ't~lAyӡg1j(ҫ87BC1L&O";{hR4SXԔwԧMk Hβi?4Qw;u75Ytr;(%.Z@iרIL27tN|ϷOW1ވ˟jHVIΧ|J)GjֶA ?GRR Oh3Pg}h/N)`1[\T#NiÎ_KXa6X5dޟ\N ]#07J"*LBgqn )^UŠ=Gf6 :~Wm3C*JݚĐ n1F4뉆XaZ z!D2I䖗iá_ٻd\Z;߇ƍcL:{KpiNsW0]F(ްO+H,d8h19?D0רDj*ɝ!I)[wi>cǁ2{L#ZRW66\`@$d_W5㺧H!nu"8Nڌ{podVHWat;g9fF5%P *c$܀A3HuQj; iRȰ~ysQ4IAD ʠ||\CWVa_Hhm̐>gܒ\\Ƙ_e[-N <[pQg59}wr4gx/%9S^x5Dę3cJ_WDus[M,$edLEU hl2 놨lq:!w9\_% E|pIQh߆%]Rā*+MJk`6 QǚYVWN/^>;5$g6Pyֶh_Oq?\IuZ#Wt2_=/_f_>nNˠ{+?(#6^dWq&<v;%|xre"}q$U(p!ohM 0l@{}PSn@yX҈6m`<ryKw)q﹝#qi1o N 9_Œܾ<(ؕ3B 3m?,ξA9Zq{v:B21i9Cio#Zڕ){Ċl.<f*gudln%5'^.lwx$M}XjLX 'WQ .}(˩~oIbg%Ai.RB?3׀M֎9*v͊(\0A4NvZ'{_>QXC[5USCuF?lM=]J;_;!L:*`z#;s^mø6#DQoX)=[47Ж{6ߟ/!&y[4:2qS6&'(:=-훆tUuSR+F`SzI/Ò E/iAt8+ei~7?'}|^qAٽ4X/ (Ȓ(׾h|2^#R$ M_-ZB8/eA-qq5}nd\R@FJȩOgXj~}e?/s;3tq N}lZJƚ{OTn]KjO+dIZ@F^*e"LiU-̉kNw?dvҠ91qǫe!m;*Up$vh rlϹ+^*ImҢMsh0:&5zVxfPOZYHd'sX3F;2}y^d'=֊-<#A#ZИ5ŋv~-ޝ_5u7|2j)7Jvbg]Յ%H*|J6s؈y͵7䍈͍Ut?c{YMbНgvz]c  1ds6$%-v6W6iKAXt}>Oze_ ׭?Rw'ptZ5'ik)ӽUO[{mB^B=[ K!_ZsY/%R| [&$gzm%,O=߄_uɗ}s=TeZ)~gdfI٬Lm!F }^sr#/7m"/^!e-/O'DZ+qHMp`r_,NhFKEFwr}Od"=3w=tF]Ra|h?6+^M9'eR)^z@eւ f?$7zhzqit{tDi-9cnbp sP}iVSݜys".hGvZvvPtrƤE5Tq+6RIˎ9+J^qLҖ(p2:zrSQ1']ނ[b>S@nRR$'pҘ>f4I⩎ ˬ"Jf8R ]/=ѢOf}^W-T,'gr I׌/;#%|y}5'zdQMɻ+H96"S7}U<iڃeQvzK`SKR'њΐOSH-wQ/rjX~/ec|OJ{ON^?dp-uTr=e'T3$P$cjU_eda'Oގ{`HtξnJ-ew/;|^ qהܒEX;qF'vt &T]z|eSqɕ"X*fq 1Bx-jIע ~õFstȇIjv?)Hr<8ZBdoD[@nՉ8B_WӒt.8T BΠ m.J:^)_b18rbXW-ޞGS ;x)_[̒GK9\of$pYt(J8A E"=o+n7tJ(TUU.IZ?¢.ڽYzCI N,bsN.2߱]SUnT}В]IajO1<`Nc,Qɭ#1}nu ?qGKlAC4i aPV,s ׅQd^[b8Վ${adv.zZ"uB%zW]ǩ!t4zE ٍQ R3WC+"c^捌dDbdXx""hKhN$ fä _}ڱbtz!MuT*SQGCe`98Xh6F#J SFB? (UW1<*I]~7`#tWe |Ny[R!DtF/4X,`o3jWZ4<M|0ͪM -$LۣJb7h/)+4FlE? q+%JN Tma#FMYb ?$Aog*VP{ R'Hpgr:^y44!p!R?"#L MUEpyD^Nd$C}< ѕ :ί4>a9+) Oɣ"!!=8~ӊgpV2\ MFiG#%k{23tM獯I^زp/GqXf0&A(q-$`Z#q5ɴjgłGl_ƏСH3.GpSU>_>qj%Kg|xO=d4Ȉc@8<ܔ w|(3fn tdt0_?WAa6]!_>^AKͱ.R }ֻ:iւ7ۮg)A}8ؔ8:=ؔ }u_?UjM̠KS% Du`+ ¿-W(qcB.#}.w`Wf_OJ4~BUGwZ2@ Fۇ蚢u'Բݶ8N}gZ?%)3dجԄyR\CqiOɮ9_WFF%YI9^Xa{۰UHDވIQ0yGSϵQ?+!O`4٤mӰ1^\4')B\[MΦjJkq ԆFsԎj*Ƚ?`2Y|Uڻ|Z*~CpHTI έ&os Gk꒬*1i+ Pkڗƾm$rqVɃꓙ5GBhdp:z g얗vR=_n6$NbX2d'qP}' w^O2|'YJ QeNs_u[TzԚѣ۞Hy`~]hТ/wsçmE\)t !~=*+[?>"-^\?['8˿->}h=k܆ec!Yزc?'0dͱ,/捄D^|&49g):Vx)_W΁uI"ܸ\f( J)OVlx,skqI!t/auH̳bv)Ͳ M5\>? N/$OlfӴ#LRAq5UJ܉klT3gxUJ-Z*S*Cc2zPȷyZ#BD +J, X .5#4S2YddwcزӻNGRaoyf~]-̥߬KtlkZa 9{v}~òofeU2P[`՗%\Tj]8kxnjHp`·Iֹ.[IOH"1֎bG|ǘ\0l%|; =QMk޾y>f,ubH1![!CK_/x)T5wHl[͖xk;:꘾-ʕ^~m!),{H*ő R1tiuc:=(-Ҕ44g]jF>7X ?<5rTFf0fcAwِۛ~&!\Χ[]99iW7 N f<%gУ8Elfg , 3[rk8ό+K ޕ'ֵܩ'Mf:m$\ ˨茁 (Bٜ>}Ӄ=Q+vfsƽ';.͸awRxFMn_goy'WQ9F/ByC|w;OwKGZnθI$# Y)%Ĕ5i$F!Y)˧)[fDrykvunƭw͸,?-gtIB披h;+> ϫ'sAZ:j?U#Yi<`D!#e$'x pH粛 /NRV?h?V5A_T_>Ǟ3 ?r'5 8]{ }J~fʒN )FxKc>N [BZwx3 ֈ9Z22`EѹNa=ZˬO2ĝ[9^|H`''uhv旱&dvnm ಽXv=O"]pv-0 suvGطN8R fvYs{t?INwB@Ux8u\"|цSz@%TƞGh yufVUs/M/9E:R N4*,9^ gcI%yGl4a'{gS8`'>DH> 4 Θ4 :b3v{lWKg? {$DPߗI*&$] AT*Z'7[.} Gз㻗wNA_NW>ٝ䛝C:9sSׇVeL}~S? b\rBx+S w>7h7΢}l5&F`;NF@9*y$, ZܚC39$ZB?\"j / =yQBbx5Jtfb'_x)|m?_4墡qԳ9U>_ĩDޗE ~yõ60N؄i"%8gqQu_OudiXSiBʩd2+)A۔y(zJ-Ai!1;z4iKk"i|s'/i v.n^ƚs?1~gw8>FJD'F J)u G0zMz%Rӛ2cx}vgT*`W揄 laAaĐ06ˮ4ZҜ`VY.i"Sjai4 ڀn9|:q/twH7 1cͳRIW2QIY_nN֧)VL-zbǒGѶ_e&ǩ<.iٍ*eɘ/eL]:m*KD! fj{PTFqqew/`p{V/>Y7P;2Q_7JF _(S` IePf2NoOg#9y!Bqr*q>i4CJEH )-L vDuKʬY&'6128'q͎帓Q^Wn]PI/"Й Pt'9죈RЧ{=V 6zĘNC>yDc uCo c) ZEtNKĤC+_@RsձڭLʢh7[(af0ql;@b%ifr:S\K(;{!]x{!A4O0ЌY,"Q%|s̕72 p bVL=KXx]_ Tߥgwh"{?5oꧦ~WRV~B 5UWGN  Ewiɺ>+/-n&EBDxhӡE0?>e5/ͮYW^HVV74L+Нޟ?5vpl=j`ߖP 4-DyYDҝ˦UײrX v&}0D<1.-¾XЕPl5[ӧ]}".ˌW,9NFݑ)VpaOEFyvXZjlxHzgٻt/"O뗈ed-[c;CVqEl(YʧED<\ˍWG ,yf+`4]%YAI6eoƠ'_dT s_3Lf"͝j&K'^!\Fg-[cе ,K0\֌nְ%cK^ >4b~۷eŧ]ZBrÞ=8ln3GCW%kiˠ]S _REEd#}f]>=Y?kcփWev[xf?Lu-nvsx6?ThوU6#yfj\=l$>>DhYe`*w>KF؋پ `IDAT:^3zճ⎻㓂)oboOdSiv`B[%[ab 1KlXrbPӍ5=Y"2OiRO8~o|gRe/q y9oO✼yO/OϽ5:35htz D\Τbrw|׋^]jX'ZsjRV=f1atjzO.!nc3&o?`stcSIcdatvI\t_<Շ3^'1Sy7 Noy XVBS*l m*mWsnϬ&u˳ԋQ/YqL5%kf{Ѣ 88Na{͵9yż3ї8ɹOfʽ:^Al(gOC{}>OL]OܾKY> xnXאC;՛O1, owq?r$¢c~QQVn CW1;{lj2 C:one w`%+>'?9 Uߔl˕'wEўGJ%8LH~I 1|B}#ͲvCʗw{ i-z1t5h?K,]FgпmMB `9;e_?[Kpǒa0Ȗ4z CI8@ n;/}1x^, ^%@H/X߼gaϧkDGEDzv ՝YZ>{d%E^ih貄& QLh}Ǭ;#^WE6O.uviIXYZ?QQwʐ̞|TþБ7SeyТ' $uyr&'FM`XWg4i@5, 3m~|+hvy|0fQk_k) [ ^?b!\^{)Ux) r;֤'Y Y!c_l\ukփih;#nT|>v>JGd226.Oճ'`~zaK 6B$s 'g'#e&JR$REqq%c6XyRog#x9Qho-eE 9n$}dj{S'8^d+?ew.MSnRL%U{ouߛl"9JV5&l0%?LyvY4RzWe?9s`/̳[gkG!5 Nyz}8|ϪK*q˝\ѳ5M7C˸~(:ĩAMg Ev~3qgI)zͼC+=1SԱ;}Fg/\d:}Fr8ޚ %]WR]$^7.V[/FeE sF_ٙdɐVM$_*_BDc.˧7pydk n2~WA g~`huk$)$/7\;/tRz G4]jaBEj h)DȂ˅g9KItSѥ/H9BD@2(Sjݗg  2L. k1~ӓ/IP _Y5"!87+ B4=%DO)! nC_Gs>ÝH+؅(AJL@OA,yMLD GOD|\F"sLT8- ۄ7!L9 G̛L+w(r&[p4poa^;dtM٣ec,`*q;RK%";[[3i1/,M%qaLN( PD&dgBJE _0wb="fwpj'P8GK2eq>f| mI-@'x(4 YW "#>nDDkd-zlczaEfU%,,Y( Q(E&d2UWXc@qQrsR OD!L7M42 "D-kZ^,[`2ՆcȵL`yβW3ugA# 9'"[_Rȿ5_Wʥ{b哉8W'f5w Ij V, } bZp]{ˤrLȄ'"ZEk@b(Ր^Bs"* D9 ȲxS <^ıߢ P2d2LZ3(JFQX${Yc2`Y{'@z QIXWSDXV<܈);ן /u)OQIW_"ӌiDL!?rEuPr1bV d9z tURÈ ctфʁd f xB}%ӤVP//POrEskhš>BoD!ahEn}Ih5%̡On& #8F*YȿyֈVP VS)7ʉVe2,'bZo(QYh3vm> ND=JE7UY~ '2!  XOV{S'Ű!ںBs>z3]dC̀ B!foSC qWVt;w{Ҍ7׏.Xy):kO}]sЭpl?J;?;dUj#3 MŌ(:oMԀ愣U{~U׽,l%KS3j=A#VI8n GuRŝ߰`4( 1Ћp옍؃G:a*T<66wHcso;n[M6`/iڶlu_ [gL8|D1&YY>ON6@\;ns~} wVyPۿ3Qƿ}`Ys3 )Nqg6}?OK*xJnz qtC+fѤrgƗ?MPyw'3Af,{Ž =f, yszo:5Ÿ_Nm_u$@xݪ'Z)UnstGIЂ{=_2nOs덧M?%'G_'gC]S =-Ky)a>o% uaҐ'RDi~˙jb"0ȈVXMDE%l:{2qU7*}g {N;৉hg]1<ɽe=XTiƖ K]tP4#ZQ8KɮеS{W篜GNYʾ2]8&۹kG]{SWl 0PUЀJ[S>b ۶(sx7]G)T^_ =!܁'Z:nҡ쵳dkަޢ9{R|h‘?^U'~5[i"J+x6jӾὐy|R:Vf+h;j5DZ! Hc8KYI :zg}m>SrرJe9kgL yWXb\e"-I^>VDi/v=QNPw" by_$ }ݙkجVEit%::ԟvlԐ¢<qܡc-A<^5eLqjN{7,|2nҡެk+,JCln~\n6x~i!aQ^- m@TuTr9A+  t?{,ٚ!aEũHuYn6dAi3"dMMP:#Q-j0qͻW&ijtb;6qq⾋h}<8ZagR!!nY֧⤨Hpt,B"Kb(@Mar|ׯ+2W4 1yd\B^B>:qKZNM訛ϑ4ĭ?߰:6v鬐}wo06:`kaѹб]tZv$n׈cS/HjuH]^@]qhދV~iStb/v.^Y0lM3 ;1 /$+#Cu7WYDڨt )s- vJGHրԢ1<ڥ^S/cn0HSA.Iyr]u-ZƕIYϣ]5T 2_n:wp_ +(ɏJ @QGoꩤ& jn):tѩ!@Sb!N R!;<"ODepmԩ"YmD,6AtDQ3m7 /U;&χ0̇ΊʳjgMumT>?6TϛQmX'^wnpӷ;  p܈$^y.@ıޔeFdNjfKa/Qw?_9 PQ~re3)uiڹ^a=& @no+^X4rݚ}(x Zϖ4RJIQPWrIA{W#,j oQ/BJoOt0~Ӧˆ ]+LE,J;tsl=1 Ł@qᜎ&l d4=WHҞ=H`3c_X6,|\tvs 7 52/6pId_6h:6V|=+#22䘗:;D}:*ޭBRl>ׇ=`ҟ=P)0,691E@?{y]Rۘ,t@I±ͻtv@<oµȔ>p6Fpbrn7m^|g֡jٹWkpD2?lYo(Y|.\9i,aʓ$B KAlau\Ry7k|{ҙR=7*qu͞7^?|q>)&U١Iu`W}tPL GczVx~xaXDd`/M$#SzOkm⮼,NyHhG3ؤܛ{0mc T4ď|i޼y+5fF`#Z)Č;Fi7.K[)6ܒ&uf޼Meӷpց*X4o޼Mʀ@v=DGNekB@tl$:"iyYn >$u*{[.~eCOrK/!:6*(]ZZp.M8%f/x,ŝGw6iNשs>*ǧm$þ𝒄Wb6@^޹$6q` p O(bP>2SQfiFSB#jK C!THRat P ~6N*e7 & R Afs Jb͠31{5N樄SHkؤL%G֫؟^2&?y{{5z%R , ,˅jf6/1])uevƾfԕ3<|>m_l.oeՙx>ŔBZ+%6M 25}T:V+ڃt\FBIq1E[l %H]U)79;C^r.-eCFCs˅HkFgG?>W~?ξW#M'xxR.[61ZuzpcGylǗ ;t&J!^xqbV6m舨bJ{ѯm(,?~TehːɃ@e~ ?,]iIB7g9,sTӔӣ8"1]hѶE֝' jSYiaU0QT<临/˼N|toWjiyWt_=b,)*jJ rSFQʛ- W3:>:4lL'~Upn6'WP922Dr(Q% -g4VY$R!'~) AB J#)5_{ۀƎDh>d6٤"> +惦0tz6Ö*3aO/MaA?C*r\32'mS'giqŏ)gSfֿܭэb+iZh4ViaGЦ=[˦M:z>x%IGTnNyf Ĵ DtvASeC[F+!/$bt096:6.1,0 ~ڥ<|Íߨ),(K.W |p`c b/gkcauYy3I|#_!Fx\s_,|qsͅ: AT "A&9RDN44Y>G9zGym^BTxTDxt\F8Ѭ\Pz]R 8sSżLr$VnPKgV9jߙs1߶i_ӻW#g|(6 ]rψpB[n>2{ızm߆-{L\Ꮃ+5 * }'o8fXƵu1MxhT A346֮ӤۨY2>b_i?S[44޻_ 3#]&ӚWUsՀr]աe,ɶLgmn^bm,:S Cj]IqPMzկZ&7ԆyUD5L4޲ l{M/0_O:nUM n;ى ^f)(#7nn0 }tT<ש@ %(&R_#Q*0sޏ+\(nѰ[mǢe=WK=wr@)rNԶ߿t_+Fy]j0X[b椐)7t=6Q}uzBkO=_6dW5egHc-kwd f =/q 9Mnu.3B0Kj1gC 5b#r(?+8\ܪAA)K?ya׳pjۖ6Ήzp~^[y B:ߪ8qJ(I{ph޲)4:Irȹ((J{zzɌlB:X+Xoh }pƜ1|XհwLPN8fj{mϻU"GLl>N&YL<=IuȌ =81N|>U~^eaۦ(>yŠN2{nkkZ9{昭09k3h#CO!@[™OKyסiRdYA.)|}34Kg_/bM{]$0om-er㖰4a`ޔ it[#\|t/ؘ6&:םάʏiLrL8%ӁR(tM\&䕓%^RwVX Zb[?}"ѧ?~1-#ôo>7(E&"?rXpe#-Bt~MTȔNsτ_byK&a,i2)!@+WZ~4#Jdu&D=CD^zO:M/e)Hdi U٧s4K"8"Z\I#os|3?.W,#`B52c0u.cZ(x (-lmmD |$ tr(Nu֌;F Bv80 x-4)hMk"bdgS m V ;c2 *ɿƗ$,b,A$"Ahm2'pX]'/O'~D -X80}73+b~lUCPR*dzHE( k&>#xOEӮDւV걵 sr#y:1լˇ3@ ̌͝Jbَ7E%YR6ԿP6x7ebȐj-bY"\6lQWOը嶊a KkR &8\k nQ .rbzq(hV5nOLmKB6ELBHF_Z#bH.}2hLj@ҢT ?ƒTk S۝h5K0 L~drj#a[p,6.G̒.1# bh'RX>hAXsefj6`(Ksn""$.~n16ZP - -X>Dڵi4(j|CڢC4ۚ &j\%Bipz[<5>r*ŵ4ɕ](`}cY̠JaJDөl3rK "^;A^M$T!1LoB S8q0_ K 2z)Bcr}x֔a]؜xNz|aKƔCiy,8zf[ڈ7vukYw/޺s%LzE b-Lm:%rjbkhP u3{B,`d^=S΂}U l;hor~V]+(Q'9EMwɗy,<khS;`۞[x8ŮO8rX *+1%ѷ.RJ7=ߩJ_o8=HYX;L̑H u;N7o]7~zÂjsR˙r^ܿz,8pnMsCiSD 2C'eg.z'Im*<:N9o=vJbpȬ7"$F: @bxθBIVDUr=f<=]WhN$Obot$`Qg,xTT8gݾٰp$M+mjl=?|CB Ö?v_MRw=~`hMߪ7Myg E?7Nٺk e03ZkȺB}ot)K>|WZ5c}xٔ^ڵ$LIhKo. ޛmڵPDPdFIm`FnWIW.6k׵_=|$5}ɻ{?dsYodFnLPɪ~a~r&pEߍ?L ㈮$:b,_Gy 7guݔ%Wf'Yc Qnm(f_B_̭zǒLj բÔ~r&n 7B*bߔ&?YAB U مy1 C&;tsm\ӲwGÝdzSH=:pe7s G!!%&!O DC I()•{EYWWOH6vmØ*u ~&#ad~զwsmQb"`r֑Y{ԙ^7>/"|G"&uQ)tGu "BI/_ˈu\mZh *@2'C>)m0T>}Idq.:)*^+a 5{ 24CsGB!"8P_hDǦ#7=tR|q %ts+x}#"o9t\n6=>ˁIjH^}=|k|5EtNQl䄆,:|]n:_E7칷i}7yT@^kFmhǀFuڼQyzunfʪ|=wjި,ŠUloG{56|JـR8? M YtU'\B^9N8QuMj91Zu K)0+z_ _8g4>nV[c+y_ڴ6xy-@rncZ^>PTmq;O0qçկ8Ts7qnؽѼW%}yZY'Bg)8'%ĶƫYxH1Wi6lԒ? ϕynʌjE6cgMNԦŻHU/_Rx1'%({͜9ZI~! +Dpj^#'OWjC#]}+W`YoLjVFtJp7ϐYm0`6Іސ\C(sf bjېjcuLgA@9NN]B*\}^TXFo9E@ViFio`YרkV.֊CkMQwKKS?G{JJ=V{Z_VRlRN2f6ٸ^T!C4z([owO<+b5;pJ}+Thܪ5DĽ(i@<"ߵAGv ?vSV iSfNIo>ucmzvy׳`hS[](ϊ-[Iˇ|iڼn8{{ʗmXe^mQ/lS!S:c+4=a^7 ZndJC 8fZSVlH<Дc  GQf*_^4bظ%`K95|NH3V5p B6!\7vq'dwmLL{t頋&?v߬$˝nz+{Vm&Uf8_W]~<oS=wmDG}dvr:'jl۹jѣ۱jB ^ *f4n9n*qn^4C |י0@NYkmj#os#Ya޼u!]uGU;1XѴrif64Һ9t_k?r}<mI t#CMUfB9vmΠoz~1ju'[>9ޚe>rmQ:|9z}<Ƕ_zՓ?uٜ'4n3VN-uS2G߹*cm!@I 'Xy=0 愯Jh>TOQ&+tmHdӼZ9[/F1hk7J}67[kA#UuS$) - 8. { tu{15oכ\C;z7AAQsFܯ%OIm.z8/rͶ_n^y3$4lRjg̭S \ ;>Tx>zzCA7^*C2rtsRN^X]UNDTmծ#&l9vږ,Z]Fj@v|6}X?YYMW~O轫db 6snYO^O2V1N(8 1*T%޾$&G>~lkqʎ]{q-#UdvֳooƦS]ԉ7<*aDDgy i\a4.7 PB#s eDÊqޒRJkc %\BխHY䗩Me޽cS4Q}]|8"R-(E9v*|J !Inv6lIϔ7s wQڰrkql~.j ?hwtxJPZJWOi5&Ԝ'[.j?gjxI`udЈWv IDAT[y |й>yǣ>hHm{f_sDT̀_fdS:h"ˋ@ku[-%IEz^J#K ^vYE &Fd*!OsY[X4t :k YEZNCTƺ \ufyLkkۻt|>лWnֹ3%moˊ/#B0l{Vdӫ>FQS[Hwsmé.aioA^T=KKQu+(|kd!oB,|ͼkW83cQU]P{1e876p@{H~vu7ܰ?wfo~fz'AM_K"U P =*fѱ(XC,,C%(tBD)m~\+ƴ9shsW% >ڜ1qev;S[ Q1Y,}ݮae]}‰KTڮae'N]?YbSGVFkS43xyݠM1&lM͟8Q|V~ù9(rM[~%3Umj0~`TO'f͉~O#t5`W(&±# ͖ŒP>X2MNPYȈ[/- NMF%uSv_|M\ݢǖ!]IEkP$&5&ua^AĢP> @'((Чur\p "/NRE>.mn\ l5I9Ъ#T[:hueH*w\ȗ5:n1ݣog( ZXQ[AÉdFGl |,Fnk$UU<( nCsQcDmCc178, Z,nZ SqD"#XMp`ix~]lH3{gtJ^{@E]RAvz%WPڐ4sk0M AX0h|mXq.h_o M\XRYPu`CDvljOqxѩ;fjg_K?<;uڛ8mVuL+bI*WZTd!b[Ï=Gu6ٟԳV3лR0č`J)!Ԙ"1냱Qۏ\ub`"9"ള"ltzV~ۨMFm6~ $-"MT@75&^;FݠvH1}aX] ȓ{p&j_Acgj@u M~}tyÍ}d..7s~뜨 J;|V&EzsηW's"7Pw.w[^ݺu 65v{@okLqZ|l\ll\\l\\RUى)Шר^Hᓝ;/ۿ::L\ 0 jb1YBYцػyyUR;}69om>:DA[֪<`3"K,8w>cdP`s>Ni|}awt>ӴS+OѸ[5?۹yZ;/bx x'@줄BFT=k}3W4-jĂQ0XF.ڨ[U&ERvT^ɍg^,},Jo[xUvqVPL^|z. 6޽&b>>Ȯ!_z{2BG%agB5 &ǝ҈=FW+cϝJt4U-uO>s!J% &С ?uk46fv_3N;7nԴ_~:y%NCPk隩.7MrWׯNFGOnW[+CTN% iUvvѥDw.}sQ߫!@[p4ɱ7 'wR*u6uCuu͸ F1/GĘůwu<۵buHOЌV0(dt?G?b\_:mzg 77.A}KNQ~/@^2HbKBmxظ(]AEJ6޻Ǡc1]BVsPֱv *|}KYs[_&b߳h֚҇TmFYYW~Yy YS{,{ҼBjt`akبI:<^3=x=sys=d8 i1Kloґ ;dso8fO"#9\= ?0x_ *f׬NL^wLȼkUљ4S[=X9fx~!$DꚩkdRm*&$c[UaO'nH'q 1y uƛ7 M^={右l ^&G0hbO|ђ=yD㮥[g:诃-^Ȃ f?PT` ެqYqou.0C5&O:cQTNgx6Oɏ#CF<ݞ'M.?@Sc `^+jޯ[K[޿lm8_I I:<_WE償Z8{y˗ls_0fw"-Jpww>_"(玜w-^d7*by/db`w)g<3;IsjhkLfU9 N^[~L:C_z۲38ʳ_fVMJ;?l?~WŢg̜XR_M%5D۸9=۷(kM[qh7D3̼ÈXtI&EEi3Ks]T$ Z0Q8NqC1w=/iRIh#Q}YMY˜PY͵FS?u|T>Xb! h ŵ@^@q+NTpݡX($ 9ؑ}Μ{;Oo29g-kG։(H ]dö @+We&GgX z ʷ7I߷JgQ>)T b`DgN &_OA2RXo} /rO>|Hspj6_"¦f6lSF""g:,J%(R'X;|rc4T6#" $K YDz;tB΄XqYq̧U14.GGav1GzѩH żPLag5m+84G_ 3*^d'',16Su7ɪgDxkyIqgI^oTt-xTsuy aKqx$|=b<(ڔKDӶzN&X#^V(r:z!I88Xb ҋ *@|A!i/XRƺAf3C:i1.W)FJp KI~C ]~k_k6 z ZG*TD禤 $XRMZ∖s!,n2wŎ7S=K(v 5to '#XPAc AQ&ȟ c2# HN@\M?6 bc"8'5U%qfYȹv?W( 0G?!+ CA%SC/Iϻ5<12SQPBK(RÈ$nKJ&Vx)-"ӣ6xڻ^l?h!W{JjI!0.!6X ~ȥ@޷ !YU`)d T6!?k݂3[W\&d6-F֭],ҩ-kl(@pQ1* Ľ,u]r^6o7X $ ]-n HG@G!6K_cIQ~#3NfYr6 \z0d=b"TS/Ol?Y}('E)p"vîD|6[.ch~~5oN@=SF"Gߘ!2Y|TJaKV(Dq<6Dj^@I$ .W5:}neJΛBsՍCNdfG_Q<03= oXAUރQSD OZj;uf"ռ%9H *.QQh =Gs~q-g!Lkp^/`A@@uEe]ͤ~}2kQA"Z2 2QjQ[o"*[TU:W.oLY6x鼖`v;ġegb£;Z.Qeg"c"w4s}F[O&bd,AT~8xOOLi>K?!"!Y4ϙ Ċnf(gڐ;bM&Ir͊JRsrbVZ"(v r("& e*I>UQM7Ԅ<%beR^G%L 냈a-z<[ (>P~bW ^rbxlDtĹ}KPWdtlxtlxtǗkVZp#&`U#GCZ̎]ᐭ"'p,qie19毺՟8mic~~p!8)4aK*9O/C.+aCWtw־d)0x6 J}voXА%;'=w1 wʹ &GPu6|xGbpN6hÒ x*Hto7, "{ ,35I`*qWɧ2 ?sFniY?O57 KIvៜ ~볎z \X BYUWcJ$ .<:[] "̂ZYgep7TZN'K6oHXɌsGt̪m'l]tc;j` 0qȊb=refUbo# =y[9&W ϞwѺ)80 &8jog?qFlD SEz 2**DƆG/?2*Ȕ*DĆG -6GƄGńSirJ]]gcBTΘ.bcĭ7C#v,CAdT~0*8xWwuׂnDEl[FJv`bwi8]MOt.QI%誮on=F%H_d@k6LneSn?8v=$_K}b>9Ņ-dxPdC!OmۮĹzE;φ] >SBZ%Ay!}BA:O!GF{EM"?Ʒ@~,dL =G԰(o1R891#^3 MN9"]G>6=VZ4(kuٷD6t,xsB*b1~Bq0CS  @{(ɏcUS8E9zP YVzQ=zt"҄sr!3YL׮ 6of>쀆 }}kFu7h(: 7hlïڔ\5LXڧE߷1 "kU^_qSm>4m7ohtt/>B6e 56!nf\]㧷a+PMT1$ѥᾐQx^qO7ϸ^nJRsu㶏oğjMY9e-t17{.>4!__yCu9S!ڳǼulٿgqs>CDE^n*yBi2 VE*"OAxb]E"fPE$'4,"%bM[@'0½.@(]Ź >"O &GK>@ tozTƒX i>ɉ6Pps긱 , x JQ({``)3G =gA<a6ѳx/peQ#ܣW1L Q;ErW&Du$RyOz&޳WСZmd9X&+`יy"\Z2*bDKכ)AtTǷ} Knb>RZƧA7 2kJѡB>_&9oۉxq>c۸̽/߸C AQw IDATXfR6 ]ȵ%NzKv[ *SR(5-9ŃǞ>a>C,J줐)ہ\Bdmh:rSH# 2 )ڝVKmATU M=7Nh,Bj@dĬEPIp(Q\SgwsQ-w8H08DB'K֏R0 %܄ ?5r9~,!#xoocZJʙj(N Z}4Mw=(979E:}G9HIv{R~Ĭ͟/ӣSQJсFrd֝ۯƣۻ؛نdދtȍLcsOYJQcr[`tFZq@^7CC.]LŢg I$EgShnI\*zXS:׎B+T, k+Yga&lKzd,Ě4 R/A2uYjlsDE;hV4\Ъq T M[ԘDn#1 y752;55O[Uц-a䴏Zh\M@VO$,йuk_;tBhBXMW o:ib'BGJ4iv!!B=q\}]t/W\9[柋UnVT'ֿ}#dfv9LcҾcr 㬏k5Y7ۋ 6uuX1x(HRX*v_{@RxМQ-"cR'ڱJJ@kobhrf#ef⣻TXL `ZfxBXf|.*pt Oma*g*]rPL9T-h`F1 ɦ! _kw;5i2>~jp& 2?jΎJ&N5̏ ͹רޠ 4e>/!¨3Gb !BAP)U>pm߻{FS%p.UYe!wЅ72#ILv҃ /k{8v3_w^YUh_%d MNmo. x~v'Uo,[m&:@8ݑÙ"}p  ?`FlB4!7'Q"I +ɁX"Sdћ^^.xyDJ(TDBZL2ʿA!~V/śE ͚ObQWRўy緰ĔC olؙ3$9˼ ^w(˙+j~q1uį,QY7P? zC}"D@RJӏHWeT$cD1ֽKHSTnZ61nC쀳Os1m}*seY)/3.LxS~ҩjzq 9yp" q]j/_u'f[ͅ2{ϝ;yޕj=e:jWvڤC=Sdt,h_(`1W̌#{1]x{xtx)bPgi_^6DtF"40F=հ%)i%R[C Uw+Lɹ}U."YX!%>Ǹ BG2McdN>%oyM'S.̚Qn;:Cn}3{npc/s4`/#pqK8?{/Õ眽9 ~Cbt>no$= `5;Z/Ћcf_?TlSNM'l[I2mNxA3Ƒ)Sǯ?ZB]v=fY9}YcvpN]GѡP(`ufN7ϡ.X.:d^:ym"vNń3_C,1D)m c;i7!`9TvrubY ݝZ$4B. #_BƆ*WB'v1: KjZ&MXQ"Aa?Z$=E( BV#&QX~ *}ߠK!?:a8=0+qVF!["hy7$(H[M36 rSbCTQ[z}(B&:HZ-vK&E/kLKd>!U>~K'@ Ԩ$ţ7{5; kb́B#;yņM"Yb:e}32[3oSԪF Xύp0$)RXRn/i *b| .ۙkio!%׀DI%:Ҵ1 L r@˛|rベGGbTN ; `Pa4(112\/جTK}L&9i|Ha7h33| ;RUoyzLE5☓7oG6OOVLU39O.'YOxq6[Gl6n3Ӳfx8Yr DDo˾D we _Ш&7l1f᫑A7"/8Rea7?p#`ߺIMk@1`_hD {Ј#=UHOhZ}tYαv},\NqlgwPhĶ(?>`8=ƾn1E&GKJLKy Tk9mө7*%SWr΄hַuQAk ^yٰCug8U2cәa!6i0%uV7  ;=^ ϺtȀꦰ.~`r] }R$-ȚgBWtAfu7 ;sF>saט"7D0Z?-˵aaGwlV^#v@y 9,}j7He4{$[3mqhZ" Yn5mqxkMsIN% Q w%ڷPi_JD}f&i臦R_Rӑyv5B6,q T{}IӇr:~.Iǧ?5DҮm{)eW'N=aog0'*<9u3/=h̔TsWdaM׿ >0E :SBgoKYϵr^4`U47@=OSO9UC|4ȣX4TZb1l=q61A l&~O s$7-(d )] [< #V/Jp%]eZQ|Za$1e[Np*<wNn_^ MVmrM?~Htj9꽖}ekعцKwҭ v<#+hIH%թ؈[zGU@Cg>z|~rJQQGTVW}&"6":xa}CùZ%] ソpUFGATF^|+<*&eëj,xNńױ^?~!4&,*_KzrOAW8cو3U!2*Ϧ  ~vvLhlF6 ~hvw_)^MrcV[w"On\wW3rjWM_H=-1xd(ɉY=nڃWo܉:q߹^˪2[(>0_vJ#G]]oɕЈ( WF\9ey[g.e?mvaF{ЈmסߙɌڶbѯԣC OH:r_ONULN~s>lEe;8Id=qb6F܈ݞCT:⍈ki塐4~ߚ,}-PF6 84ig)  ;wQ7TVq02 xggwuW""wK+ Ca>Fm[nsWfd?t{.۞Z7,!!ЊR}w\wؚv\t ޓW}%j4zȀ@C?NnDGD ꫗naa'6rh_]Jчv`BF ^Xڅ`k*kOX³CJнgx3Sw]|ВUPΌgW6Ұ~t'Ggk ;wQ_&qL綌hRZA@LP۞<4n# SǑE.0DXac='a}S 2 (Í2 Y(p@; QN Eϕ-Hބ(āG[ڗׯ*kE&i trʖ_[ؿ[[-\Or&sƭI7߇Cs ugih߯=}̯\-­]>nݲys?~s 898k8yǬT 6)C_&,ݢq5ϜTg4]m\{Ynڧ kO[7+Wrwi8(@w3ǭңKvɴln%.4h շ?Mb@cK="ošu-$[q]>nӺe.=ՃS xu`^&mNn5oyo?L`Z,Vw:R<ŜTL=LM*;E Mڔˎ 'I+U,O`ekߊ+BG$بUhok۲iVG\Og/i|x}Le=T#, ,>Jwsǔ ^1$9iתiVG\KgόTZG[ظ@M;}gql6i ǭ) ;/d|FlK-0g{TEm)qDW#GkUq%~(˴\ 4z{^˞eh¹?{'YӅ>aGZ ?F{knۖ_7lptsI݃}~׿װu7*MX5 AkA\6NӇV4g@0gnD]krP|vXYՂEC_?pШy `M52nt||m~ [5~֜6-7l`tt/>b6^jp٥ "{;@ 'N uI<\ZMpe*19@:^Iή[uX^(C8CQ-oE>xs>.0t^ƍw0^So3^|gC:,`?/2 r^^~sM+E'L}aݶ{Z{+ѭ^v_ʖ5!ZN0Ĕ{D(+7IQ {Cvt7}iDcaU~ߍ: RCn JB-Y{W/^ڰO>J̹qᅲ˰ax[&J$CW22&L/i]&?=\=4>} eUG=k" R/Y^<[ Id2ᛶ\ONطJF_㮈hln6_^#M&z(8'KvxyAk>M~z5!:;?EOxcM>MO8s' ڿyѬu!Y:[7Vp*ͰO>~cx,mWV 2vkMP- 3Q#"L \ I=W x䚱ة$p/9nЋ|uOU5q+E[E*i[}e ,J$)QRRc.;28Ujaᖅty괎ΥyZW9KyUܕJBm۔׬LgUUʒW|?]k|&皽NRP##F2.D BG[W6v]gRϙ+5^OrU-ų@^,I {U`0/AsKʩfӥ~4mH?/bL jr+ٹm{`[cC.^HEmǹv~UGNcT(xr(5{Oַ%M@c7Og^|WA>T&%ۉ|#]$~Ka N,%a% r Q w}t>61KkB'DI#Gćl`}~3 ֡eĭܘ];Ƙ"!T- I 9pN|װ h\r*!G51'CSY9kаYM0o}3axN&X'&dh[m2p-sq;㝪"^7 -附p#.hpGY@!X鐶}c(qzǟʫ3g[l9QAZ4e>/s7Aiݯ U+VC~jQuM**T*uLiX6Ɉw:Va(TJ; :FcYȒg} :3s9;rҤ&34*_yhu#E,o~C:LxqhҨ bqtOm[-KD}Վj`{gUϽ I^|>?'3^3yby׽yʔT0ե*24JYZ.Oe@^݃3? `ӣ$d,CgҕPU\ àyKƭ,M<4\4)W~6Xi\޷6܃\D4lN}2ݷv֏hh n+׬] ט/Fj'#{Tר jTXΘ* ͡^јx;)祼SP@ӂc)$"r4)/ GcjN:ñ剤ւU SSjU!$CzHm!#wE#[U\uN1Ao[}ܺ'uۻַ/~nt0GoC쀳Ol vzΉ]kE~P)V~^~u:ŸGj] }hCUamM.4X ؆ ^wKjժWVJ}弫52{Zxk5==ޝ_7&d>2vņݻTצQyFl^󆵨We)KF.vbѦ[ۖRY4i[֨E;zUZXƯj>%@ ?ܽ*: O nz ;ܽA*U3~r~pMփSƧ6N!E~Fu@*wǃoq/5|^<ӯZjJhGjիT̕ڷ'd󟞻;bʀ:Qo Ϟx^ߔ*>3ԅ'Y7oUצ% }QC?@ͰN ZmKL%~mwu8Jt03BBDF*8 4_8cϼxVmұsF\jh_zؠge{5v{O 5c̷&ǵk.#3R;<6n9(y +|>4F1Sa>bol ; HP2`/.-Y;}gը9&.; ߼3]'9ǤeM{ .͏VoqhDA/{u% OP}={>ܭ9J&c.Ό]6yټu+'No'"|c,`?zƖ'y":o,se4AtT:Ϊ4ݣ\]u?ϭ\H}ΆLLtF'v[};/nNG; sfYб7xm} 6ANҮb~]G]Kg7#gڏsw@EC5B;kiQk!_e_˨(>vmwYL]s"_M*i"0OiWb懿ыZRt遯WwT>ۈ)jcnipPf1 ~k{_6LMG49k)z6xxi{[>=pUL;i?ƪ%ח=pՖN?p;t 6e\NsԞ(kvt:kZ:)c M?knV4B%Y&ځFJ1͒һI Dn`I)vݾoT̈^卩'w ٓ!=\uFgQ;lEI+$g?Qeh( -|8(m4?:k4Sh\Ko2jI''K~,KxƜhoGd˳JKS/*CS$1hI2 bx$P M/v2 l-#9W "_-5ʱRV9o \(H$۴Ҥ܈BmF`{nZ5j==\#??KR>)f G C´{di,yV\xΙȱdqr[" ?a*JRJ`6*Z+!)r6u3}ud|u%꬛OZ(BdA(hٶT6\kc6ØWXht)/.k!"3"f寈i]/#Bsˌu3("1v-w5iʷο~M8 ,$z/,iÐ1+$A,WM/d˘M̰Jy " zȃ,/lʵiB&u"C*^yD @"wK(^Tz mFQGn'n")P>Ί>a+R$CƩ tdRw"!P#"nsB֬6'G@ vBdǶI5tqH ڠK5Wc/"X7.RAgRL& uCgl)E%xIzA@a80! T/?y["Fz oWO܁"oZ)|HTH#%AC Tʼn,΀DKDh9\j xޛeq~|IݜCEЕ) bE_boW5PT h%WBc2(dDŽc9D)u#XyEaE C}3ա@!1+zWڤTF街v_Qԍ 5|Mz˱ҳ߁*ŭ)V+>v0h_Xl <#*=;>ᙙ 1 3^8T\PTLXT?0jGDa.  :0&O PiE7x\ѩof`aP1Bd&DZم\`z 2XjEbsQ6=#(ȴ5A9WEDD/4O*'L7x~7"d&y៝xqP~CuXhn* Հyi w3:FczFAb!cX'A'\[`~D|t6ߦ4G=^^A< gj%ɇ',9 VĶB>]i +9emd^B<]zMVFDž|M~K>ԀLR̯_~R Ήu W_Y@]XhK~^Pk~v} #3 ׯOܧuꂷyə}vO\&+!o3^Œe!cwmT27-o N'l1j^ !/֩K_}Gg?IݦG3gkUP&@. r:מv~G&;f$tVV\bӴ/2l ( H0N"1 Fso% s8) p|sw _7k' J)ed<-Q%J7oOHl[#5IYOcDW Y8mk-6Cf^0$—Y_hجq+~ykҡd1cwߗt}k&y!w$؟Kd ɋP/H9ģL L D[Vf}E-A;u(e>ꠙےu HΙ!En];BVf-v6@d5*<E/v*dӲB= ?nsTz=vn'.D\cƴVTm1yéC/ҾA`9z;Ɖ)a_gr)xܟ"oGX]5ҹGig0TFW2C"oGLVMg"nGmYss ז-l#ãsiڳJ֭QFJFͽ^_r":uk֡Fl2I={G<{E^QUrQ;19Ư_'&& ޿t?Zk9;Ȁr5܉[һy~k>9 Ol8uJvZ>FljGwu~\3FWA^u}=xziTo# .hu^P}ds;@.nټE97 IDAT*uݻۜj~~jP8۳pt-nW.@Y"C{o5S,02ӳUb8ThҦlvT| L$+"UYqWkT$67_Jp*Ysf:eFt+3Fԣ!?߻z㯬N U z3,l ȘfKb%Bz~yPP^WӁƤ#[ 냇 f\##,R@gWAb...۸dKc\q&>Ѿ wf J(`xwˏE?K~~-|;58LVOrgP2ypkhN:>*RAז8)UA f=ZElp~TaITU*6[ƭK WNxx͆vɏ߷z{^|w: |4(ohǗگ*[ ^ߌ|:[:W (͊(4L]jL5,UdGb?tk0G%?snֻ>[{+Q) oE%6C} w`ew' PUCYa&b|?_0AF*$w !;Tow A |H%ʕq62NHҸ¹+d+v+kxWwdv-"盄tpm䶲:y;<̛YRQĶ$Ԑ11 c4Tk>),О9Zp &/vBb,K2&ߐ@yY"iAlNPLJhcVdRM^@toMXɽn/et3/ppvPL:,6AZS,I JwSuX+xKjU|Lbp]!3=Wm %h0Ia 9B+|`c^MvX& r(lWѢ$(.>4Mu)Q쳎E{!lKYPxR K6A'9nOrJ@QZM9g-'PĿ<>s?g2I! Jhm UBmuڪEU]k[tA]ҢUu[U[-勒K efyg}w&/7Hfy,s^;r0yR.f\;ʎA"Q!GG,&lif׿_:ӗ/u:CBkWBqLꎪ<υNx֘C{VIS=V _J\ n_Yx&s{NJKM::pEE᭓{3phb^5\F1jok2#ynϩ\#>9Fu/}۟Gm"YpWΥ3g^~ׅ(NzN留7m!D!,"T|,vKJs{~fۮN+I|te_:~1acCם5Qq7LX2\k?Wi!uA0eA5~'PZcqBP߄ zI`|Q D.30{SJ|4@s58ו波Ysbz311Ohjrئ=Ǐiفl?bbjxmL;5IwX|ʴmbcTߦKiq77Nؘۼ4>ah| XV; s`Щ*M\j&rлJm#&#bs3w־N1$>we?ܼa@X.#TYWw{Bj9b+nѱqd承YsQ7^GHT:5oРY3uo {~Fݞ^>\P!x'yabO:6&zֽ' 'xeĀN kDkѱqdɫrSš ^ZlGʄBCjƔqn7znm}i7s}BHH}vl?.dCA<ؙc:6XgO HѠ4^mqq =WʴտM\ʱ-ju}߾+ne|ٝBsjky1UGDGk>ެӰ:y~^RinC ή[}![}=Zq1_J\iK+*I-EbBYy ]8=%PPV'KzwtH9UaiyL7 YSEӹy`:]1/T3]++iOTWQl?k2`cCV@"s>5=l௖ wl9tFN.rk7$Vsd[n !>8#-I 2Ϥ_xecyW8[ߛ0qo]?}UWmb`|(-shڪۑmAkʈhs4S w͟L\kۗ/:oƶ'~"yr͇湝yָMX[ϱ[/RSGgkxi(n;o{5Fs} K&KHșy]/FD(Jˡã8_ğ^bpDZK[ɟt(*9 H2 * / nArۥ2UFOIepEJyNy o$8<|~~Porΐi&p`I%*=X%ꦧEijj\U1қkc@ e̩Pa."Pt fah@-9PP9L[@\~M2H7A)$rQ#Q|M\3|d8yC\MfʼEd:ՀF|h675H* Ae{y4ڂ*zAmo1H"t{a[@3i<'Q&P8\/r!>Qwt P=`Ebm+4c@2hh\)vOḦFC5)Jn1I *%)Ò>ּ:Cy !~0giIpN\Tyz'`7#C{˧QFn!BLOZQeʁR+ f̬QC? 8J\ひg!Rs}<$6ސύ1=wXѫx=$-P@6?t: ڄ z@:=u*, F7cڲc(P"h9[Q"1Dbxrdsk%"I*o &`$F4HP YL,`Z`RBd{AXXP:>.4)Fj-JZ[KbuŁXFx(O$ si9qbA`ljlXd"!y Y!1%ʄ&1/P8 ebYژrHQ`M%.t0&Ѳ5A0򾘰&栁$m `yN>W2'/W QGE z8`%) ";".72EGJ1MqL) (>!]e β"-" YESQt6"Z`$Z'E 6$@:/f4*Da0u8 ̂Af1To6:A϶[wLHǓ{j]yKYr0IN]Ү,^՟~_ݯBdͮ,ޒi#q:ajk Tē{jǯ2{ %NOw_xYtuƮ;yKh4I)bEb!OL+h5({fmnQW瀫ff +Sxi`9ξ@Tk8]@lޖ `ӞL3W|%"r*IRxhқG/lXB+^0ZYpV1[(1U@h ,nj „5)Bz0e{􍌈4}ΛSRs.ABYO;dW7{ܹSds:G葸o7mgB6&obsNDa0:@]~JĴ߸oN \ZvGi}=޷o3~!sޜs% Ywp{IqǞQ[40vj'\ND$usw7̪r_βh@qlU5غC @  !0hmIIKAIyG:P ^ UDxH᠅Cj|(E!t-T0 7,g$ K>XMdEX_ Y<\lNdR%8W-ݐt(9t_׋FKܗrpo=SA-[3|tӎ&3B;+5ijpm2d\~ؚrpu":8k㖴lY뱡Rʽ>ϛv{Â!(Qը/?mT?X!`Rޟ3w%j䔃I:Ώ$$?RRV9qx_r0)'.. _゚;=ZwmfgQWDz_aωI>?١+Rʽ>M߽!OEil6o:t~{I)iRe!᭾ϫKʘpu-mZУNlŮm>i7RO]_oھ;G|Xȣom7jǭ8O׮CTBj9_=2w^8gwAvm}ZK //5iԨǜ=$YSߕ?/GNo-_z(B=:z,=`єq]Z5=ӧzqJnٲe{T>/_٭C|1a$h[6Cd;閭:ӤAKvt{']s e|'4lިn,U;hGD+AIDAT7'I+{7Pbp= ** @T:n ᠋!x#$F61AIO$r=]Z K]7AB'1$ 7taӬ:}u{B qW}xhWBUg,@BfҬ: g<6J)\4DSKBBŵxo¶{+TOP UB<9;~.\w>,Cv*Ur_O+^:w|վὙ|T6.5M_~╖eu*nvsgdng)׏0h\h/S,tʵK)_qRS˙|Oᕝ6e7֤ M^jU]@=? z~{w-dxS!OX^]xL2~@D>/UJvEo($":f7Mw+DD9mRBBlnԭi6:ᛤ{WvrdJFϗhBYnCidΪrO |Ʊy.Ox:}ּFTН{U bbo;fhGJx?q0@«VGwދM {$*K]eKbKZA ThZP ! AkmR+oSa'MjAjș|M'm}HP'eI%""o֫(6CBZPT"A\:9jK˂3@W qtie5Ӗp i[,f:տ'Fq;!Ψs3ǣ$ A@DN`v/q)Oy.M?ˣ{Oٹgv}O6iǽ\qM!bYM#}qˮ"KH'@#Q MY*OJD!(yxJ#6)L)Kr()Z X?M/KN#!O<%0 tcF! bP0$&L fTzD?aVVq/eH)`  uh2uj ![غQyQFMB/ $:G3#7BW-i^/9 WmI[-cZ^q7b^ڏFx/QvTj !S{3phb^٣ƔB XzsQ G2#7h.,z0g ?|U{nKBGZFB!r^÷FvyS3FƴsX(U{B;|뉂 on޾yLD#ԮՉxV|2wy f3D7"+ӈd$XF14D>"d8wc)ԓr=BD/-y"= EEZXen/xF:nC3~]R]IVFEKST H@ Eb đDU R)E6Ì^5rOvhRWfbNڧ> /'wn1lFjEPq#~YҿO}3_tua٨qO,kϿvh͜nB0gG{{Ĵ%"IA晔 of9e^PH0y҈W"9g79=审啟_vHșy]-[La%[|X@7ZO`Td3~xR[3FV=t]#N3&Vn jLzݭ3ANM0KV"91= ֓M[f/h;>&#:[Û垕2E TΌ $ xZF ^J R т#V%7PTń{Xi'l=H$ !'iP~AJ"dޣ\|(q\(+kѫ$01&z Z`zցY-; tA7maPA&@4iOVvD1)gىurO8ָhk|ETQRײe=~\F OLCsZgjcdÉkg=2ez,OBTUWpʣ8 *Lwb+HyۜEkСu 3`+c L (MD3TH* &I3#1FJH1.tzlBL E<m^J;PVc( b"H]U5͋@b}v[O1[B#VlX=|a1DMTxiNS.ձ"t$0x*sjRbZAKK^ŜMi'"A2>KirY =' ~HQ)ʀ82P խd)&ZJU=ܱ"{Y4/!eW# \TO{+;] ]5 ,֠zg +YRne)ZgɈtfP[?ྺ{j"yrM5\3RρZܧ3M1}Vzܱ?w#Xq_gq+ PK7 '?\ѓv!)m  ! axB4o8+FR l ߤI VąP׀ 1$G쓇 hc2u"Hd4T!Ƭ&PdjYj-n3GN ~%D;6:"iDYA 7K5GC¿ee &BpV{ 1  *Fr]["3/ˠ? Y0Ȁ &K-DJQ \LX`bY1sJN6!H ,I@ŝe9)H]$L-7rV @>5IENDB`glances-2.3/docs/images/processlist-wide.png000066400000000000000000006741111246314757600212260ustar00rootroot00000000000000PNG  IHDREm sBITOtEXtSoftwareShutterc IDATx}w`նZsNzM&EP t\ ^+E*`"!Jr3s{΋ɜ={vY~a8?h]'r>G"{ii *VÍ~}C"""M44_zW}6_dnD܈s7O36>2T#f _"|Ȍq,%@Dyx] 䳒ۭٟ36ˑi]gGڂ!+( ̡.{H  ȵ/M%\x yxhs$x_QԹDߙqFًZ0b\249( 9\)7rviGOB 2׵")gs[x!ImQ,_-2to _@ (Ņ ū7&"σ }(9uhiDѺ'.ws:xTAD+zgH GN&21#D {Poaf]`u vPj|P!xJ*4B$4k4jD_څBZ' jg%_ulZC@E 1Ju`!@"B`QtLjL~fXL@r"qT~S hP8XP2J6I3sb1OBĕ7G~iZuw2v%̰3l.wD.0عB zV(< z3Hd#6kYy.ֆ&c1"@0;qxu$  cX9"1KEA %rIa1jG pQb4׊s`? A|\XJ-}`e'/U\r}y& ! yA(gĸ-(BeIJ@KܢX^Ù消W5E Κ@jTDUwMl&HE êEj$FGe~S͏ijj<]ii&ktR_U"/o vݛRFw`݋l?wA4)7"3z} m}6L-dXYZBFց,b/>D#QތU.RCOR.}$3^>yO)1H &MዯP4Ip1LΒI9 L%ZM) "Ex zҕENDb`Cr΅x/kNo6rϪc[u.鐡L4B}77iP0$ .Y.Z_ǘw8{˿ѹLQ\v8cۂbߜ:{oN$wq칣KtcVMUOTUPcN_/3jT"FQ*XW'+~;cN$Ż}՛Vn^yڴu7KRӭOΜw Xyf_aժKުFjn_jW\r底+WiDZ&'Ynu˾_j[8oj*TnMT.ws4դis.uA(:Ž@G,qac-3/Ե۟e9], V<$PP5q[!|tS7f 0TS#>5ik֭swNп'k֘??S?†.zewj?gDtlh%c/?}S?ȒnP^>ywGJŦb:tCzn~G}97]z]ɶD?ڕ+>~>B UW4iz9D뾄t1S 0 o.W6 t,0be(m;:c"4Oe qxf9z}VOgؓu`#nL z)2LkCAଯa4}Gc#H!6GrVMRC{0hܯ Xx3^T9C7_? |! 꿴>!r| *i?w>rUU.GՄy?.}@?2 V~`c,2*ėj|Gyg=)ϠߚmkI{{ң)jχ&iΒ&V9%[ӏ2%빞8Q֊K !f/ j|-񡍱}* v n1`6+h]`&wەRW41v}Ҍnޗuk+[&bܳyVmz±vR=RKMo P|m ܜ{5r>T|NSVy<y{fGݬRk cd'~>w4mMy;%cq̅Q Ru|!sND2w,;?:'^v^e( ᓱ!V^ {蚚Dbm9zv^DŦGLLjw~jV_w﹥P Ϗ_N ^"@P"l1|3[i=mVVS5(с#k](d+ @RTJ0r#F~u@nPNu]Z^:ϵLx}E.o|&Pn.ӣO@{;}ݦb]YzO^[kqFu|׳Gxtak^5C>Ѫ|\:o}y@Hz߿=ٺB/Ǎ,}#&:1&]~σՊ(; 'f^_qFuWaa:-'Ƿד*@=G Qvyia?YWCkVBx3'O,P_Gdtd/,g~ؓ_4<7m)[8߰_>7xWE2g:ū6c¸vdRsk|}j_ߊ=c:ZrZ^I]@ܕ[{)kң>ғ-V?W~\Ed͚zM;4QE<䷋$rK44U2ݗ?Z~Z W7{nzDFyӿ^ %o'|IөL׹s߷hO6wse/}zNPv3^ѣES|iOuxO3܇}m/[e\>ő[+qנWv{蹭 ''"%3GMmPךE-{"JJC=bsoN\ėl6g턊?0s~SV|_"ʡ%cԼEOuٶ粳]D[q|r a xr@y(bF28|"vFX>AEy^.Ä>@Wzʂst]Z2b"! bزFŚ_ _L] em^:LDPm ziof ZΓu}Z U^~ā5Ca5%7y]߇@IiPSHf%(nnX"cJ;"-uQ4A`s@Ρ.h٤by7tU(Tm\|.gw5{t/پ}_y Ctd{8u@-ڽ6o5ڥ+VVd-mtMe Mgaa8Ly?gi}_MՈvL۰_USzɉmX3ZjeDa㴌YoJL t;r߸x=ڹc׾y @zmzOˍ|] v&#l\%y?=nX_ x챾_lܻLA#SlҪu%"iڶifV1VI|~}, Lzɢ_yiztxY{.M>dк{g xoyv35Sl$տũC۵ۨU?o۲UV8`rSF6=^>Z0S0AhWG̿ttLiұDhdT oΨh֔οjeu&ޖ@GnڪM?{|*yk<=nh}3<Ό'@( F>7dϨ%:tJ.;H)k* 77eyw j׿AA5OO候bE_I;kn?=D(ɅfԵkמS+bv-9X t;l \Ul ƌh_PSUa[4~dNcF([xt9a'Z p8+J_۽k@?Wmǔ;w3eUN|aL噏8 D[vWG&fL/mol~6eg5lF{ f%DBKk`~GĬ.in!;.=A)ghRdDBncx.'0F2 0<</+8nˮ%5Ja1( *ah@wۃu_lߠP&>V&;w>R7bKfn!3׬^:sXYϿ6Cj,ɹed k?pɮCV̞{8Zbq<~s|*EץkzAĔ;m~ci˶mQ&np)3W8qxFA@Ѝ}[v=o׳oL\pl'փ|;Oڽ 7xk^B-=-mᆳ_;~N-S$1O_y}/*z&C/ ) )XõO|=ubo>X/ϙvI?g{k^& dI9c۵,Oxnbd/>yCfLXqkFE"'/:V]rqRC&Rkm;r5sߟ7۸i>EO;/sx}("VM@WC?o'nqk۪l"w̢oP['>eOێ:{)e#DO[`вVL5>#|{SmhS2ސfrg D]]F jqίb[?@ޯJO>Ts;}#CG0&33 V6rPխ83oͧ+ 75.x<в/Z, )(!dN+(~%fW41EQ38̆M'O9nP;e-[ݴJVomP&{*iшK@/4Ϳ}qk k@3ڵ W)!9:PN\B\bXv&m$4 W8BTDTU/YEE49 q*9f"~"B{$i_u{uYB_{mB uҜ/;sinm/YԵ(h$ ھփ տ: +p^[νI&r)e9ݳ{605p3u%IWZ^> [vm_짍@>׾q5s;OGQfx͊K}}-##Rl-))z-JD#TkQSPIːb;I|*~1 \ң py̔Z]H˛ }(qD qNQ IDAT^A]-?[;Y?l%yQu !DON; ܵm g SZ]J.[Х?GIg#ggU9 s:;xVJpժTuu*baOƄ\VKl9 5v`9_'Ջ/F (r9 .;H(kɒ\x(W .tpXUt8"21 'ny. H+_fO O4i&##=򍻱!2r+$\L1wEz$RI56N(oή_ 7'!ziwSWǼ)~S 2!;n4b5kwS_#CBgFaJ>h6uB[F4]':U;dl$Ю^3d8kǷkK-qeuvzɷz",Ҵgeϖn=OV%P6q˰oIM7QJ =Ռ+FYd t"Wsu-,b#IQSM#MUU#|~$5 ݗ4VͶ Yk'oMBZQDE,T:x5gUgU~HT`-=7=h*$ I(Yr34c|rbNTJJ7^/t+a(ᐎcYWjg$*VhJ,IONG -T \ɆpRJ eĂ&EI Z6aIe' |; DLФqO;` sJԴ9]-z~fLyklhќ&# i.Td҈ d~.BŊ1&Jddux!A\ Ԝ(%ơtUsOzn)mvxvd /$\F$?PϮ;MՉ,~UÐ.|J%pZeJ,AVK b1$8HD/][y(RΛ)؇9vɨpth2G([7*% {kʑ;{wJ/{%*WZBxL,Vzj #l2ɉPS͚WNPw,U<-&/끵`K9\)C c)U^XqJj5 5z-nS^'x[ʾ ! uo*[x&mo{aoU( \;LfT(Z@ްH*_\7˿ *Eͼ@l&IfJRժT@<&TMe ƱQUTͶݢxeEV3J-ʛ 4[+ZLU54{R%o֟2OJ8Di֏u^zW*eTyW!#{Iܴ(-i;K!\Z$zc-ȱRo-W]E̗||gfM+'R~%Xxm~yފڅ+ߥWnN ;[k7Jl[+Y.Ow@ZcJYha|?T19\=L:6TH|5~aE  xoì?擷 xp)usu† <ά>xGdfzO KU3ݪ1aoRrj7m B|"w5" &vgF6pRJ^Ϸʛ\8+ ݢZٲom}=8C_t[B=ljy.nʝoٻyղ*ac#.&Ň%@Pwbb9\/x!rH_/arJ%y߁KMVA+|#5=΂$HNM4\Y$(M_&>q}Kڣ&g=N[.nU#5=Ǝ3]u(-4噔6~a嘷W.>ûkvW;ʆ!"SCT;: %۾ۖP;txۮ`:7+k. {}q/"Qj}|"/eçߙ}ܴӽY]~;b(gߴA#_;| sv~#Q̯5_Gc~:+u?1RɽE.ZsJz&O<<3jcND)W58O;L ӎDEZ!S]Rsxʇ޿z"Df| diW?К5A/п?"W㻳G8! ddEpI/~@ߚUwftО;Zr rjpOfW gn;͕#`D4abRć~S}pdV_vOzq°O~2:&0)Ws}<Z,''HF(h,c@vOzq°aO~2|}8vy_~|#/E2me(zn#/}vFzwnxE6規Vyyi2.^v8Җ_?Wf.]= CE8W.k W5NJ/3+aȳ&~S .̟'V2S'ۨoծ0r#5;cgu1{.IWYƎ݉B,paۜ_9ݲe-iZc"NZcᢂ.#',[ogT9.a7Ve*e/+ov|DLd? ܚgחхBm&BxDfh̸kt)ٱ\c(=o͗8kC? O0Ds!$B!{cf,`3$}cA(7$/ 6Q3W̥oc2PI^KX9iύ"gZm'˾!n)=ץ+/3*5 0g&3l_DFWY 0Υ&9$9Ǿ5JgozêMNJomqr6ޮ뵉 aJ/s2rܕC^_RbeATՍ'mKEuᥱ/ް"Qxjp_Mo 'sFzim砠Wx;c=q$3ò[+\Ws;a"BPovDlCtQN 14_YW&\0e%|xk ¿J8`١R؉~Jýۄ_iG> IF!?DW98qq= J~p>'/98qF`$4HkwjrbSa`j2DGxC1\{2L9Dr \\`#!B#cy䵥迈C/wJ< 1 r}WzL(h1@V֢) 7CRzID`O )@\7F5`I0AzC6؁<č_f :P9#?|pϕÉay`ʂ`+{^>xx\Ȣ t;zԎCzc  (l0$SC>Xf z I&hd "&'&`:-]25ؼbV]=͒T NX:ڄͻ"`I8xɢ^I%U(K.rm?нJV-cZACב;Jb1~5lWENdĪƯ>E7:ɁJCеLBOu=b97>\Ga .cSZ9~H`8hDz)PfWa( :!VpD* ׃h M3SH?tFeXD>:L_QH[)#.I5Br0M5YJlm6W2R͋p[uBXb7o60Q'D>h[f\B >sxWz]Đ=\r03EK<' oL=z,RrMuYQ:!$†)!|D'+|_j:cfuPBDdgUWJ}/g5Y"$W6(p9FpfN3Z-&r=ڋ*q=넩Q:kF&l]ܣ猍%{2RQ 86h we5[2 [" RrWt#Rt (9)3ZzfFCƲHch}恛%rVq=ёaP^(+1( Nu䄠m dV2(o^&wJAM$"Aɇ"ara"yybn'Ws}Rn%e˔U rdCtpz5)l_lQlΤe$򼁝ÁE<|² UADO?G(튲>Rdl ՋETh29nbXd"?'<Wæ|宾LE>F.]˲ &RB&)MF$2|9'L  5H&V6uI>k  _[-1@xx M'J'OiLr ԅ G@!v3EeYDEi=o\E366,H4a*׬bbԐ#i$/4$7Ʀ[ f= 0fy-]ےe Hw`2ɺdBdL~Ū;W5/$QDQq$ 2=p86}i͜8F$XX||F9hrbPлePsW*A> bfx6 &w& "UTU#G>QERoUJь9L ;†'De@z8ٚ'a/LN1]1nG#<&ec ;/] T䃸8Nj{IRT=APo rȟ9?Q΢!,EHQ$ AL?((BJ(wVp{xv8+3?zQ@yt̵͒:ntv_=Z Ш0 BVidX< ^'#G H H31N؆r|2a?IGyɅf9;* WJ8 g8wIauG.+?iF!4Mrqj 5r &~3jԳ( CT[@=uAl{EGz%t֓5/9%Ӝe(jɢ=~O̅qjz`l?sxDd1,'w@B r\nGvLObSa.mk1e[qGO7Qr|Nzc DED1Rg ,D}^[åk=+젘R JEJ^BLE%#K{=FNk+Zu60L;E%w  zиޓnjVcC~Mq+_?r뤝Zrz[ bc滈Г]M-Y yd }rSK%E {`kJ(2|6*9sP983s\‘HqE0Q$g5|٨ժR +k9""tDt#\˜ π<֒Pes)D& i299h|TIEtך&j)Aϙyj0846 "+%X}r%F ;!E$( y(g_\! m_aZcMbu#COW5%b `2&ķ|.E#, :i r [֗gBp(`KWVE{$Aa\8@4uHri$$|vfva$20 q*|- ;X?Q Rc=,eh((+γ's#HXEPx'x^g%TD/le2M*V qf WR~%<"P1 /[bfmHE. H^QDɿ(08 eî_;dQ^#}Ű<Ƹю_C::=: WX/+_XLyx/pĨX([B;Y/3:C,$p*ZW$=h@jz c`!ȦșX-pڏ|hCF1"DIhr <9g tG(Y,^%|Q{祉g{BΠLUT.[]Q"7_$;&! kي}\] WzlD9L"4mD7wxu3Նrt +x[6U,ળ$CYR7 faPgH JE=L&##.p6.+cJAfR~*ne,2 aϝ2ޑQg#../h0%?0\&/ڃ1Q)V.X1nR$c{uHϦidۃñ!S'WSƳK'i%UGYj+eos.0պZG\XA^K^Xh6 78@0DDE==Շ\_ws- ; v̕҈I~7%&~h8 {@zIKf[:/8_VlZ /X2<^/EBBQwE1blS;뭋0f/9dٸɋ$#O PD7ыLFޑRNiK cMǍLi8F4@>\v3QpZDHVB ޫ4Q?XN&O^^Ty9Ȭ28nZ6}LKPN@8aBǖG^mtLJ]ܝ9oྙe)1שc"k 4ok1_ɋ9A#be#]q騅̻ڔv=2/#P2">̔Ҝ.ZH׹bX:)^̹\~yKX.كy`;\s$VQz~y)7ecFK 2IFx/;5 jv< $XuS#Qf:|V,ShZc6ܕ3~C$e_9~t$z%MӢѨCg?sz3Įy,հ@ײGaEb20cuvQaOMQ: 0yY!B6,Ux G @r$&> p~ȧJC"َQd%B`CP풘$8:S<u8xH ,)qEu߃^DQ&%>m/_9a'zƹ YY.xvگGu,Ht3/((]ޤjy g6ԩB+%#! oPGnܺvqrq@mܶnCJᶳoܺnu۸uƭ/q/ܸu^*}kO}ac-Pėh!5}~Xs0]oغv [nغvW +0}ڍϦ׫qQ7l]iE-/YU4 ~3W" Rޙ֣OFm{_ݰuŲW"(H3D'nR6lIݰ%uտ.ۿI0`fS׭ߒjne!̣3֬K[.mGhU2sx d5̣ۈ6֩Rѓf/ۼf]oK7m8Pjڴ5F,k?=FEN5qh W]vVbi7OHT-hT-+gt,POYV!_]Q5T4}+>~Kl"iZ4jTwUmI4MUh4AUrh %賵7^qMϺ/ o5Vٸzk6^7EA 1{ͦ ĕ uo/­LMݴ:uG틠QÙ7bZcYf4IUͩ6/5Sd$(ዴuiRoz6*8h,^9GŰp%G[R7~ٲ~sMGN_9u}ڒ٣;VOHU>o͝54˾tT9k>V1: `%m5ǵ[n\v~_s.[̭Y9ٱE{Iꇳ@L;<(`3-@J+9'v!a p L',\bZo9rN>ռw33Pe&@a,tvmHDeъq#&Ą\*ӲP\+8%4#bJml"FLP8m/~;BZ%-_mywSk*X֚m|yStcͥ&RcǴ=6ɷ >є>r-MP|6-Mk:MwMzJ[b(۲up7㉻W&?0i3m|eU.Ǒ#Jb69zQGU Ģu8q_Z$m=So}aIGlͺ|28ծsझ\G_06y ?Sc|t{Д}W.@.e'9cw-_MDЧ– Iw¾rzeФ}}Җ7{ʛ|˫ O0b=npikN;UZߝV/,;1]#O:O:~o߫tJ#@ΐstuAwQr;y߸1g:_:<ع#L'`bThX9hQΙݕ%D+eXMr*|;e iZ柣7  M2z{V։ U TDC& \wFT۾kKҸiEKלa#7 !D3[:.]6gT_4h m#zΛ\󕏆&zKOfhFMq6;%#j[ `%7NehtHn]2yoyáIGnӟ \󙉯޵gsCw5 ksc*Z)sGTe! bǡKio7W?Ķ'/&;Ժ 2HgUn)? (-:)=i3GzsG" 5~Ywe{ύs`&/VT(z?@ ΋ GK=ӣr\t{, H52P~ȡW0PlKVf %s`k l(~zPX(0b)Q) w? @hKN.LE؎EQbI& 6};B?dwʼn HCqwE[{Xww(Rܝ$`q(qf뻡}~m޽3̙3<9P`vljdX(Pe~pm`?:lO%h^C ^KXKI8x|*Af hck|L\Ƒh2^<#zt;z$2k B&.e,*?7x<@FӮ *"$)PYZ|,k L+m.tY02->@V#DTg]jh7 @E ;>MN= $~@"է.@*H]\R䷾+q UAWUebߧվvt0J8jmMN;'}$ݥ._An2$WARFOl,yUx87Eas '59FSJ(w=G{ H.-#@_0HWH>q'5$| (u~SkB%d%X'ėQebK zЎ7_0.mƘJ&Q51cK ӿvs4cƴn=~MIR@RFOl"y]ihBPOOV.xBÆP znаw74C7@nРwwB@~rڹg{:Mx_ĈB#cHxVݰg9Q&2s8!wjag]*)RiںL`""2F !c\UU @/0P),I¹OWGB KV4mU_&0KaO; 2UNI]Nzt4 LA\XDRBZPz(ޛHn$Q 㱂0bt1AXcժL9?1%A=mHcs ު&Y?{av4wU ns8N<wnӔQfu5MƒjV}ߖsiC,+3U+nss=jqRg'O~[F c 9*{un`;}.Ƽ Y>2nQƴf`=eq3:6t{-?0)1<ͫGw H NJM'n>OZ8iZaߟK 7"D^3h]|ȋ8̳a߾VAi?IӇAȺ1|m xUD Zh0`*Ͷ_]:׹vhqْƜUĒUzp_gO|J)d)#of(_7M/VgECO}ƈȤ; u_h*@n#@!u""cb]^s臄4lp[ \f'APt~ws'Ǎ_U,JK]<8fQsNWB‘;u$:~oFK…g0iIS55 L5vfsQ{sw/搯tuwN1=),Иe#@ 5cØG $ \؜~Rnlز5@UާǗ,^%FZtaK \-Z582%Ŋ*?-8◦i{@ڰ3zwqό$[?ت胭%Qq1]TmNWc޾xzt@]|z c9⫴KEC4nݩ}v&?)`:52&az2__keZ8;d׊j=f_D o >3 S_Y2IVڶiy^ 7N^5zUZ2b} &#֣.0E)aDDcdZIDF8WeˤJ:l[1$Ċ+KF>kܲcm:hږ~7z `<!$*@4yM*]uZ3ѹ9pdW7w\"?Jh;7 o̸jzU"pey{e#Qt ޒ F_raʉ5 Ń!< Hn+j4pn\Gp1Ŕ&J3* }:%yES2V%~rjk?}~~({s@P*?:LWI4%|*RT BPJʑxR@(lĞl, $^8X+˕`!خ~@+>hT2`R(v[wQ{xdE9 ~/MWe5i+g9̈́;OF6 ۀyx`bXhDz]I0'DOC(2"e!l^"1.ܤ|e_ōB%ɋFzTbPiaCbPWi@MVwB?\l_g5O4Yt>;m-J˖`qrwbxj d[ |zp_?h"ꝷS@ @nb:!ȏX0UEg׬o.NKNO^g_Nen_&栶ݪ䵆vZ㇆kZv;!37=05E1b`uƕ+K2rJFg%C (,VS"0&TDF=R]N| gmkzc7Ed9<6tֹ;1w¹{ 1 Z1b9" +ccR匆Mko$C/.up\MV&WLMS$ų6^9[9hdC u 6x0vLz˃m7ea|M#),7eR}K%WV|_ye #YBVP$~VhIg_I۠魲O\Nϊw{&~ЮK֝z?dMSSW:2]h s-Fh&1Ak׹eo:ǮmV.7peIܾMN?dOZo q=g9JLQ`WO\~R2\1hcj@; )gB,V+Fujd Y@r-PO#*`5BL 0␩)"T͏@Pv"lGD`n?Nd qc6 jMFb` 0̫bCQ3l}L|@1022~p@k4@&Ge1]KhٿEMjxk#KWXع?&V|`E'}mE>р.,Ey34_͇ !:/ "|$Oxe}O=_kB?*-s> ̯ۣU^JCUglOnWk_Dz1(o>] 3lpeNV HkJ .6fYaXa;a*.4=)!)KNoRhj=z`]i cT%ZB]ZRE= \YY"x`+`luL)JlPu9PgT#+8mFZ+Qf<]=uzH4n M<h*ܵР}u&.MIO.YiN9MPqtj5˳%BYˈpoҲU]rBs5\ZW#6j*G wiU.MXҠwl o&(*> }~߷w鿶q-;zvF^aY4p 1F>.n˒?z4i7f<'W"0(sevV_#ʌT ya7%Bȶ~r5[O7}@.ve) t ^lAm7OfZ]8oHs/j x`ܘ_Mqת? dh|?GИHi8t_ I b~z˹Q &̮96n/Xuu,f%.˄M>ېYnD-zb c1يG>yѴ,Fܬ;"b :f.$:is,lnxcsnQsVN %)w,Uƈグ UG vwr69WFWO `Ҧ/[ו '{MYȺikPˢw-b烧BI+*02JHtIW#)m]]IGʶÜ3DQ“ˏ$)h'S|"Ġ7,R`$b+}c8g"k?{"#ܔ,+Zm:lmlIt&@@BlxiZ5?oD,,yYH?Aq-hdX3a ub'wQd0R\:1եd"`Osb92Jj*3⎝ӎŢ˩7j6Qbm=')Fdҧ˫iV|:xZ#X9Malc7:SQM\2=W0Ů46#Xf;\[5b"!M+?S(8*0B4Fd0L9SoPF$=@yIcft]P5lYwy`,^0s<9 `6'Nc J&2n;׿1iĬfZ{1LŠ*2:0Sѝ&c0ƈ)~;LZ r kV27Gc}y$gf0u!Iq ?b~c^M;mİ%s.jbc8gvc~ \x2Yhh6a_3RfIڒ0aeLЦ=x3C>S!qvR(o` aR K|lc2g;zγA晖TdD5}q/Sf@T- lA 焍X=[Û9hS sOw̲.L<`Q 1 *o%V,*l3~C5i*pu12a1\Desܹ3d ۾tB,-8_,尌voqj@t?#nM̶Jٽձ30Ъղ_[ՍY;'1:`ޔ6wo[%Yh0bAa8/6eRDə\&3^9k(T eʣq5iZ{9UM;UܡBHĵpM9-ÌV9DYM;U3Ʈ">TWniP: y0O9ۏuW:^lc =˿6{iw bgFd νc\LK5ێYAɥHj$i6jL,qEC.5Mެ"s90}֓vOq`۬kjjp0ְ𨫿6Ӱɋ!QcH\oKC!jY8E d6.d抢,b %nM۶~n'"K=aciK;l{}mnc1MlE/N񓋈}qO`=+y%͖ޖ]onHh:{!e||نf"^;"9gse6y) j?lo}k֕a 960ߛY4ݗoCn[YlYӸ1`Inˏ~Ήa¥D0;|uj]^G39H=e "B^{Pѐ7 ODpӰw!oZ&^z.9oMuqR:ʡ%ݜ-r{vivw!96w]N9tе9:HNl0x幻8V"!tNIQa 䊩填ء(%ŕ)*4aPXi8j`cc1J=]Uح+rwٟ=WϻЮacsɹۥ*Pu-?r~b,(8eȫGVn`EZBUīЗXIϱḿC"NwJaNӘ5NfMeq+ ~~.bIi/r)1{#q7wEB0]VF$rz1Ƥb4w;CWЦ(%eXǀK mLrsRC1_^|" O4_(@7kJUzdQ^.oסV>9-LZF(zsrC7KEv[wc'i88Wô!ZezLt92@|QW" 5 0$tW l[f4gšOcR<$X $c1Wc@ภ1B(',L.U٨`U0ZzJ"Q2.ʝ **G״DJug+y }@Xd}ٻhZ?ڶawQcJiQsaJᙇ^DL.:nf"&֦l>*ΰ;b`,Ln:]&l4)Nߑ4Wql-ַvÚ>_++ $ 36r8Ww}]3^y¶MC ,8IQ~![Uk#*(K:|7U~|P3e$9ؕї*#3 s\8"]bI7->NP'ǃ CЮfinD]wd#<]Hx[G5FXqWGxq`5WC/Lo8v]fhHxԋqyt*$@0˻kv˨W7v;&*4<*4`jDU`;ᏋBBÃYQzwQ/o\#mbKxy⟣y$kw>V64" bM۟}ڙ˯Fs? ~|y4Q»o ۵GEDE^2V:|NCB]P:~9v/<:u_}}k|=b b|ſF7 ^zuOϐ[~j[bƋ_GE\?vJ-uXdGqyk3J:?zޛW7 '6$NFykѽ7GkB܌V| I0,2ɕmcjW2z?Uċ'tP, Z[RS,sS%YI[,FXYm5r򮐆vgF_gC\W.kft3v,ֽ{ɮM3'ŻX*c_!f`@J UocJ7*LqbbsF )79UۮCa]侍-kXXRoO5/oPQ 2@ip>)H2*[B+HST0h0jƒGBFI!_ LڽCE\}sjسkJ/vDfH¡"ڟF5/GqAX:`oK#q:U&!bwٞM3bOKh"zzS홼.ih/ Ⱦ0Nn8w1Ib3|/_.7B4xlӵ=}/ꇊ_vy(6En_>c*"@y{VI<4ë>.ٯ'fS:g>b؄! ]Ղj3䬮] \Ot[eUcFt~Z,ӵ;|ϾKhIX:po?ߗP< (ܶ@JA^<Ҿo#fX&?3v2`? e>;LX֩}k&>%x" ym#}Z}>#M'gW=N pz#pՆq8N8s[E}t@6n=>y؈a3>W: Ϣ.o"^ — ~ܮ[6'#G#{VeW2P{OqYDfABy.k?D4 7Du  \葶 :j*@X4 jNmP[R&L2Ƅv?NhuwƵs Mqmd@'$\mOkW[ vre x;iJ?MP@H,3Ěݶl鬟1kɮbbs:=9@W UsKFuBp=&_oZ|B4|𫰐RHů7->)wA}!NrY*"I$>E^9<E1~>W|WF޻~gs sR.9~ͧb-|[~RUE滠V1ANe$JҦ#{Z߷Oygc܄yVm`Z!YCy¶އO+k;9w9[@ۍpcr(ݺ!DM@r{k(S>u!vOO{쭡 G40^)UɏI5īXjYa1#}%b5Y5Avc;{pbo`)RUG}:("h?ߥd}~qa*@5N&zf y]+7ZmFWo;:Lvp5;IIO%=_8s]nF;p|-}g贯C=*BxIij ҭǯdB㸴3 h8rcnl>~[9&aO5YP7, ;ǵ,AE&Tʞ1$M4؊ޗr˟ G k^tgePuh۶/>l4,L7,(SQ[S} x&:?}մdagJ|6Y+OuտqJAt\gyBK UZ KgO wCu{5/|3\whқ=LFܵ>mŠқ=LFܹ!m򀜊.߶A i8s5Z*`!p1$skZ4] .VS\%&OҺ~M+ˑ-ljŹx2-k(~UROjwrum/VkRY*1scD+)*VegA0Siw7ViM^%mRz;eYl(UI5k66eMgOT3N&Z^=$?vSi@L1Ɉ2jD9 K24IcD}KL.*%caz%HO*Dp¦' (AU~bNQYT-d@5\].56OҦ~M[BUXPR*RAl)84m(t:p5j'O<05i* \U{YuJe)"j1yk i@{̲{53D1I?~VUdIf9F:k+4}p%GT=ػ"d~b%HJJӔ~B\,05u^ K{_ 7رiCm3ACI^S:}PKxUAj> P H ̚7P`iVAyq}c'Av`NrrZ+^jF?1̭MIԻ,e5v:Ht~ꙵo?=N=ϴgm;젌*"}TyTmD+ɚVK~ ^U*7!  P% ~ld+' t?ys>Wh ۊ KEAnS/"˩> EPyfEdv`纍+λΫ{-5͚C,_Rf^RraѩWC0W ō7;M>sJ9A$cQ2xǷwagw?^˶8W_av)k BRZo `Ѫ5jtorwbxlI93۰HbL.r(FkYvedrw˶bxi#Yu.?GW: vG4wUrrOǠKj#?9c $JM J{v3s`x<>G K2痬=s}6?$PeՈ*T2އ1%c@fYn\L;?B7N g e5Iߣc^%cR43tn(,d IDATRf(~m?J m8#8b601 [8uǔa i΋% n،{M.F<=-6Qʂ幥 RF:-Qϋ'1Z<dv S,Z] %XB6hFk~`]ab+ي9?F<]#bX4}kpJҲa5D)`MS(dtU ^Vk{/]jy=Ҿm> My+YZM:& Aj>WMUrJ^l'U|.s&ndbZniyԞ=ҁҰcGKVD(4jB'~B1$ݩb`A4cލiP'SABFQ3Zg_(B# u?SK(SS/A*2s_]q56 ja\xlHʎ byPZQ Y5u5+N+=|jW6F}nQԖMF uʸ0IIFQ-ʺٰ ^X(wr o&$b^yK rP޺"ꁓ0 ܭSd}ĩ(Pmp7NNrYkK9"cMry#$1m0l7};FdlU@, qa>^ [ In# |# 29G/r1"gl1ZjѱT`‰bK)lh1+Ȳ2#{j,Ah۬,/ UHl=%Ҫ܄l[KVN^v`^tg}m XSf}Dr qQXߤZ9H0m[xY}H(&RԟW^0vAn|)Der]˒IrcXlkʑ,i!;9R?#398WCV7jQǏ8¯?TB0Q!&S\)@Dڥo1QĪ70^=rkġ\)7fSDir7ib1ٵq^ƸDEm2ƇK)lYrl[v-Ƹ˧|kNboKƓOÄV?H2g_$I*7!pvN? dEiWäz9cR=m!-4cYP d069(a#,kBYQbfBzkLϹIEJ HpczixaUdkGqT{ڶ퐖{+Oٝgιh֯LVҦǺ;}3Um,E-úեRcTl\&B {X"@bV#Θ.1o '&[oyipHPĿuv碙sn*m"MZ"KrrJrJJjv0r56.mيig|(ʭ&rTuDg1iKH#ʌ":94w" 禎8;1_ƺ;}󫚚+Y}!;>W;!vVzUoOI:4$А %#]nlrVkY+cE U!Qcd}G7_ϑ[5\䚆}FO`@Ϛ, h;gK!d$*6ƣ vm-@Sŀ, ^ȍ __\>{#]b?]`l#3ώ+Vv\+~'Ajl:u~JwGWB$О Rvod'r՚qԯUu;tϑD׷9Gvpwi!%O,qÆ=\}z6׊KNlM&-9gm bij/sIIDћˡ+fLm2m}?IhK Ȳѐ~N&tUgm]>Ǐ~zX9u 3zx[]'-9UW{'Zf)(Yi]ꊑ^}亡2<;Y^F7(ZtͿC]\\uUuw^0ocF-%_檩NqymҠÔkD ӛH"[5 2G*s8S6ս)kiY[v;Tr$hIdR-PO*J%l1Kϻ35p" z/=&R~{wAEG0[%(|mݢ)JSofl$^sJhH=2lҩJMM#ʼnAm9OIKWѯaO ӽqwpL ^VMϙ[T2-CmVŝY/NenԝusRbf Ʃǜ[8j_u'|@ҡSϦ*^ * ҊXc1vc1XcX#`8  ( {ǹq3^gZkYhɲ֖T>Q5\wyCI}E U_Ooﳣնar`۪ ˊ~xEIw*`eMOn[DۻW?4PbeqϟkV=Ewb"vP sp )@/IC*<̲5^KN&*|uy㟧2+1E x~>F kY=,,I_.9EKVU֙k9=f((4T>k#>uǨ.#!;HnX#Xל gxϲ5^jqɷU?Xd zMK-*|qiⓙU|["u9-gR'x/Yf PqEgf-)[1өfPUt2#^H,ש 0h6)| }߰)//_pzmIenU8{ h%[TexϿcAo~ xo}͊T@ Pn\u{IUwN]y(@8Xo3խm/Tق<-ٶÿ=43(OY>!/ɥ[{k.=^QTHw2.msa,F/ t#WQs֟+lmUA'u8+_\-peey>LDʯww-=Vin&'STaI>>_~ߤB:hܯ>y H) \w@V?|27_h5X/U#Ky֯nb!9͉2ըҤ3,_<탢8~Bkd%v/yօ`9ǮH Ϯ\seI}%d ήZs;Gؠ›&(a @ޡ6 RS5 ?qP W15jSU\;C]-\O[zzfjLE0k @j1"$ {X##Tǀ@`Y&3-J$@CVX:hbFlb .&)f;RLDK|YzMaz¤;3V'N_uS^o~it'|Y 1k&Vk% /!!NH0BԊ бX@*.] VkJu&/79x֣B,@c@(pA:d]EJXׅu5J#v뿎?l`vk4_x&WU_={-\Ln]i r[8z?F+0p Ck&`my0Ee˜mfF0u\5'']!Z WeD'ÀÌ| /zBs">Bml[V)ym֥sdr*2-Wf/¡ vP@)y^: 4g\\^q/ҥ 7ܐq!k O(w0cio63w\.PJ!cOe"gw50Tibsh]MZ WUxf}'cc]Wn86cu*8~$ffUެOK@3}/$C P}]t9BŦoW b_chH~rLI(1.gJ[8֛k@E-惲w"C$EY "ġQ:"rL;.2J*>Dݱpi~̀Xٲ#B$SuxQFL 0/TFLҋ5&B{z!5_ED yJ r0hِ]H,(%?xAm *>D`+"{CVd(D^iQWEBIS঄ta>l<ì!e½Vaۖ>oe,L;1AzqXCPf4CFi ,"^Ԅ$Y@<̢`pkSe @t#jhUU!N!S'h<&WzHke peb] =ZBO!-Dc6ED7̎14\MnȸV0FKsx ̯Lܰ5Wsrq谼O-sA2lĵi['FeC?6 t."n2tJX%$l|sIJgC' }V"̖ĭQiBTLLAjUxMo\gE So|M~0D7\rM-8^A"ˑ[l|+e.΋|"#V0&!"2Ě޵E" g#b"b#b_eF2?b;b##CO][ ;18K\yqyGrx]gz *12&%Uf$zqȧ7g',e򹨧'#-1ߝs.$D\j'a*\lFu,v\dL?SE&>Igԋݾ#b#bboZAτOw6򡬁M?"S,0zo/3Qk2a\]o> zzĪ>2LixOw܍ s`m;:LS#v>wo{'64e=m$3pͰ+GviCīmdnc\AQ%ҥP Vu(i$$'aԾ#AqOO eX;%~ţT7Cs0GoST05 ⪇V[*0Κ\0@6KoNs]@qDYuv|Tl-տK _ p!%H ] 'GLXR֥1_J;0,l2X1BGtw!Ck1Zv'v/36.(Ii<]5  h;`$Wٻr`$2٢aceDT8ݍ+*s_bUϺ,,p x,_S#,UVif`J[MVjptC}*@f\a(QiO8i^\dSJ> L K[!y4ٻGg×vΩv` OwJ`m&gW_zh2f6/\VG-sQ`yA~z}Af%NHjdXs"$aIe<|,<#DmюM3&ɬ Z=.ޘJ+ q,֬ q'{Ww[+?}wU4G'qg"` )m7`BZ|m%UӤqϖ'y+H4h2uϪ.(Ov͘D̟se!Ϩ,Bx IDATVG7N<<\˩W-› ǵKRgt8YYUk0R'Om#[RmMO:YɂN\w4YBfaN ˟gw]ߛr8-GYv|%>tRu<2C OTYȞFa`:{6kӞVRL+_.GQyN?&7uP0nJ7anqǺ-|ΖǞt.@7g]`paY3sY<6yL9}".54VQ2DPKH[6+F ǹ/,X]W~ڔWsh&mEIϷ|Dڞ3VR83Szd3D/WIZthњc!OcCo&)@]JW)_d*c+k?MH~xx@(X٧Dا2aQ0P2ʵ!8+v$61A%?wb,m2.^|&sFsعL5eQo|V "e߾c_b> [ ͯJyA-\XN1UEч]I!ʆ.COO:yU{O% 0у-<D{)2i:f{1 w{ma&R}ݸ譧GD'9=$ f\LgqDLBD?E 4iAX͏L|ԩ qS#gW42aQv4jhcCN nۿɗ@bߤ :l,"$`U۔W)_NyRIJn]Kc \T 'ls9i?rqAX6UW_"T0hvעËמy,"%P;=kbHHnvjO2 8y衍 U.9LSu`H ڙ9XpKaiQ>>3Z0IE{L,wac$LG)bȻ`LĨؤT#MUGoE&d/nҌHb?h텐ؤ بa^&E&EşfQF{~jaW SE4>%J"+,Z-@3}rӿ;Z֭ke,uLoT7!0Zw!$.)^ R!K_ݽ9 (:)*.I%q.\ֳ "N |veìNt2qȶVt$)2n?QqI.Lh]$@Eݛ V OF?:X`LrT :jOmF 0m雪qgL')*._f@d3ܓV]~/Y^vR-1x &d+k(6kY>4pMkN;Eej5zqV~"|>jm]Ȥٯg㒟_LErz~ LR̲ZϬ퐥݉LKP`R֜o3̸yvmGxt\rTAjTdaQsG5)Bˏɚ/|zdV T޻XcU#j$wn!{u:+r򝇒u gGhUav.U }ܨICN~-6qȹogH?E 0oK|m7G߾De̻b15U? <Υ3~RsCHw.zcM`L2i1@ld"U+*3B"b,BF=G=̨ \~4`ȯg4 SzĦj隶{9{"d+ZQlmR;yȥb |ރċ>&+Z(o䬬{w_i15tU YUҰ5w&>j=4dHL͠4ܪ߾PK15Ek?[h\CGs˗͙hm@NY<x\5HM'}wNw߭I/s#k3(Ra={ԭTwhDWO}/@O뚊 FbQ_͒ȧv^~J vۏYs!R#WL;*@TӸG|H >'z+G/e'>W3s-9@FmcE/V73 ֕vDZ]IJ{pףJ^㤑`ҽqߵ4]yNGIn6]]; Q"د_ۻF-€ێhQr~% Z{)&#;3I=TE~fWSsR#O}k3[]-,og/c[bIm'K)6ܬ؛g.T֥z;{}5OhŒJW^ jA9PA/3^>nZJ)-cHG> sM*HNPaGXY1Y>&}Z|xk,wv돉̻כ|N}r2˸61^ݱaVw2oSj 'G%J\ꋬc} Q‘sqXjh|o$1=2Wj}s[X^%. aV;{ݺwع='^]4ek ɽʌį/>չtb̠gʉЇS#bVҼOP\ 9O~l+QBc3e&>T򉱃=>>] r`x:A? *dzֶ̳R`4ȇ+//0g$$HL|>h:_,'aNHKW?}V`9DJQY1Ȳ~һ}Q2pǗ9Эr&ߪ OFiHԌOvH DƖ" #pUѡ,ArL ~}NukOPb/>AO/s{c+ (Zl_\Tq(i2LZZ%&;hF7BmtjCu[QNJ@P"eJ_'(?>Xe"\(xT|SRXb<̮˲?W;[q!29TGVF<0]fتa ?X܇L>5` Pv+!)@fJ?2H~`"R/BNF/N ,neZgqngce D4tk @u~Z^%erl`b bxI"3K.z èPs5KS$&ր`s Uoji|!F$o&o(,/BZDFz@uEzA5dBCS\!s:inЖJՊK CްkW']1T۽AXܰ=Uҙc H(K>0)aAg/cðMsX .ш Vm * k*L) : 0% Dxu[ñ>U,G9خ@N6uf*:1`a.Qߢ}[^E-7'~*V|D|YŇ`_Wfʀ \lLБNKYJ/RXy`be5|0l7w1|-lgzJ֊F{k8 !\ɥ"mOiI}:کG&6~nz|&RD2#nbؤz3Cƫ:|z[B|F'Aq^S0(֌s7<+;oa=慽-9QY"nM|l:7嘏Uj{)olRĈaB&ER53e6-<[<%K E? g5܍D @e'e3Pu]|'-\uH'kϮz_t`fI4Q^VVћI{]=XSb FM(AI.hIsqRcLlQ"岆s4i1Šws^缪/Ber 0iu jcNQ<^Z:WZwʊ &ُXgՠzТyL Yzeۗyb$*}-(+U*6=õJuN_qVG^ԫ/1 ;{KXB\,35B Es=qFOXޟ;uojiQyJj]<>ʡ#d$7q'Zkn"!0l2zm镈OMF(qѻ T1[Ueg~Ul+5F"XH`pztF:Wx%pIzbqT_,Pc g2u}%;Y][ۺfU`ƍlTtҞBknnAH7R*1kk[הCi`J^e (xSy1IQAb lXYNfEJ]U0`"L⩣x;8QVUD&Xؙ SîyW+\46!MZx+"žڵ9oT BPb+WW7V)AV5&ZjaO=_#OXB07q O?b[}B0bAG6weQYLJXڙw "Ĩg7ZvDQ,xqhq}@⺿Fcm J"q[k0%ճvO ;Mueyj͸Ƚ#Fi[R"RĤYƍYK'wiԬ?{'|Q:qAVoΖkb*n$wqT?Ma`i>%݅܆q-4oܬY@9IvKmKZFD~Rwo3}(n}F\>ykجieȨnæ͛:!I4jڌ2楷x԰aKھ|JFmYr'[Ϋ ({y%[98Y}URe/>WE hf 5 K'GS MdK5{(H͕ZO'LͺrMW(&W8gtO w8kȧr8`Q;mӡojz[:^YBXkrYZJ u L悠2ƥT]6b|/5/-A"U7.fԝă4wn gObz|p4,cҷIV?jd$]&uT_=ھc]=w2+xׯz|pIv{&.].d5cݘ $вրe>(ضbQF<ĵ3l&-SÆ',fyƛJ(>\NY:"jxV~|_i׭}]) NU2߀dY_ϾOԐ}{k})ۦ4Bʯ1FJѻmӈXNK-ՐEK*C.'̤{72uIcDY §bLMN 27e 9QKJg[ Y'1n-n^^3jc IDAT4utjئsa]2R-ge̍%:#uihuAqWÿ`T05\0SG=t2'^džmN\;oАv?u+aa 'ڪA^D}JY԰OR- ^78"1s'Դ,a@sJ:Є#44NնJ Yؤ1嗒g[X6snT Q(shfSK\oy*ZU9xW\ Zs?|ś#כ_vױyhljw޴t?D/.mXt2JEYSXE ދ}֭s(y{o_qE?'޺B6=4h<p˥\ TA% |ЃY,[kd?3E//ozY7*;浑u6"(skוK)jFL3E=޿9lj"IϓD闥Y܄[yU]WWH{̇j_||jld|128Kjkr/4>7ek7-{fť OfV 4TN/]]wӲ}gm_WVÈn<i}ιy %śoURYim,;kUiX''3MJ$Z}'GXlM) }PO\?,;̷mi >_nbЂW+0{mwKW[oZ97,:Jc7yPYG72,HXv÷0W_z0+;OVPhيבT&] U@Q׃k[|8q_j膕'\TqM(\J  ׯ]x9d۽`!oi>n^R_*Av{cz"ͼW_ _U998$9nG/^vv>E߳8uv-;R2u K1p w!*:O&^v'#|V{ٶ# g^ rl)2,du2QW0`8:#:@MqG_usg]c~,PS9M{l~͝λՎωwؤ;w=~_1vy%n=XH*5Y|ɿb [ cmLjSbLĆLkXP' ;N< l#,782ta2ygJ4">fr}[B}AS90>M jݵx Nxq f,{;cWAʹ-.!'fЈK0 Xh kΈS zc" D88;L1Y8\̷izđm ku&5 jMDW ۀT?F,FT(9BRTI۝_iBx-s/ke[jneWh>*P?A4+#XrԀ&aC&M~I8zE q-LL쁺!5\bBa^@Q%*E?GeM@\4YCP-[*8c[HZ/Ƙ=S- ψR2-l~gu1(baѐ0m+h7X3E` E) 8-VDD?EҰ2>#UG w40=m,WRȞRn e5]-0BP%itCX~_%p"C1=KKl2tӡp8Ew.Z?tnz0p!t<p"e:^ 2ӥ̩d)ȋ 1Neb-N!3A/PBHAH&;<}zkd?~ Fpi?Dlі*G,v-+8͂Cm%?ㆡQ#BLVwa3ahsvWz'Ccҭ?8B+SEI]6 O]٥U|`Ѻ@dA7]zJ?1 &LUij!,5c TSi=eݯu-y9=`KbTӕr5HgQD]wLwLs$j*yx fc2fl{AL h,[D&.&*'DLO"gY%wMuW#jV. i1QuzMDG&E&]1y֥smWm\xreD?) N$6)*6lORY 'f_'W'?#æv=K H))Qlg-ixJDaqvmଫ'N$渦pI vQ8 Nb%V-&BPi䪮?u)fESɌ]@&cBi.XfgQOoX^}b럦remjd S69{ixTiOGf3΍ZO:r&ixT)$A8||MZ"f?ZL2>e."Ie}V|ɕ}eդrbS)XS:0Pz Cd}Wxju_{)H_h ( $SE\tb(Z޹[o/RMzU"z.g͒yER6kwBMʲР+d0dy!1~^6D P I"\HF_:֮E5r !^J Oi%ER `A rv`W@0\).Rᛋ C~v.ڔR@:u*`s*KS=Ϊy/"yEsR6F-ԥC/{-`9C"2¥\ F"!3@faJ3+W@dp jt_L-d6J*F9xWRҬB37tܦEunȷz&8M)*ګ1b"E2(so`RߵL  aǣaOz\}Êcc/8[B`]efMժ~F4wˈ1]hٯI,>뗯_|:U{.6_ oztv9&Ԕ/Sσ"e_%>}fۺ.ATMy*%E3@2ԽA^sGml9QYV(҅GisF{>;y@٧Xا2axK\'n]b׳>x6nTރJdܠj]aQGml-6\7e".l2{NI j#&Sdv[ 1a-YO4;Ƕ4ڹ ^' ѱlj1 M:~WD{ y֡ .mمKȤ譧GD'9}lKS %(Q2FQbX2dl/;OG=y~0Um7rhP웴!gw{eocReQaoף?"eݺP|>w憖ZtxcOcClh\&ްAá KP[#Cq;|;a_gD,P`'f:J0 ,;&g$F&=~p緦ݸG![]uN|dlbI$iW:G{|nړZ{!$6)>6c$~.&6 W|Dxl5G%Eŝ^WLFLuUG%>2AdvR@bbר'"I3m'E%ݻTE]V{?J&Y߫tjNi8xuZ.zEE-/b0jk}c M%uNa5rUK4N{_j% Wi5e`bGeM i%&ט"NI}MVڒbA+K`d24 i{ 魖@?mLo%չYy8rsz-VrHUuKz-魷7^51ldBq.YdV[]Xpm槷jc}e)9E*B+Hv4,qَR@b౨{43 &~>$_IOB݄T~Glܢ:އb㒣]Hb?xиP"ވ1l(mn<8vȲD&G%Lmi^̃7DR ՘u V~Us }J 1S8u#>E"Lsah3r҄%GVFveg+MD`floH*B@l \ȶ6Rc\K'Ole|[6Դ'+zkү y%gVNF=>̻c1dְMYӜ* 񯋭[72L*߆D~ӽ:wg_0iK/Q,9Í7Յ9 1ƲnQ`W2E. غu#s~g̦̭:i~!z=۹c|Rn|QcB]-qcD7K;*56GBbNY0={S#LHןT##""Pd=1S"kRO/#3b>q#O\Ӑm$"KaeSN=dǓ)xȼaEgܳ5S+$ 4>"ޱM1=ڍ[uQ^ݶ]c/:mRX{cB~ː:c.{=-(}[SeȢaEfcJdf䞙?a{mPȽ>1ati92ml*&{v龕DHYw]?6/80kWaЙ{6T{:zu|T!4g۬6ge+>v9`@EFolMNVƉr Vaf>#u:]>q^*/dqn~F 哧O{wܙ3g|cy-1ksc|e{nOV|ږ^Bx?SڣvGyf}4 ԫҵꞇڣFRad鶵7ˬaABn~Vbԅ_Y ygdTsq]WJ3D6۴ʫ\*{.qk5lxpSHtDS+w>Ȩ4U\*:Lq'f?=n=ro5#M_d3KHȷ]8F9{&msgigې{ 眝-?;2W6@t/2~0|#GjggwW$|^/-6yh]R'r󳒢.>D7*^/Xо{.ĵ."M[LܿR:n?ƤCw}<%7u U'FF{͛/'P'x"Q{ꐔ;Y ղQnb4)I vׁ KV&+DPXzv}ꅺy(syšD=k]WzR"HN!cX?׾ҳhsG/2,oE:p`Y_ :3&wu~D]NFϺEsf[eZڻ(!]fnP*FA%~]gw\WQ{#[&$_><{9#oY+*,IoV-%U҆ErwK^ZIEetd{:?#z$Q8yY^=c=Bؤ,vr - iL84Խ)﹵dwuP^ $bP&m rLq~j];uu#N͌XvpBXtlN;N2fo^>[@9rԇQ"[AI\4aĒƔ)0! cs%k]'\35Yk(=>:3&pYv̯ďWg*rJ7$z{,ŋs(czi_G,qưNIIs1m}ѳ'.^] LA7A] nȩ#k)xNlMȃ8Y/ r\|%ːG};V 8Y|b~?ޣgOn^8?ʼnFJ;UjJCnZ eZ Q ](G,Lx3to1ʽ[ `xq0jJ},e!IPYuHM/(66cO+C ϺӔ~nep'Ʊ4ʹr4Bsڡ:h.}ۛ=AWHNBݜr i۪0 {~r[#@&mY$T{r˒O~nحoV̵5?|:|} kQeLD]37N{±_K-3wDŽڣ!NsFJu5(cqUYm{%vk!?#4~p.#.tzwwF)D KFL~GXϘ JS-$A5lPGîaۇ? Y{7{ys!`X HP-8rS:[q[`=ݟMEwܘ񱲏*b';1,A/`]fc1Fԩ{>ed_L:cmjTR+q+(wVRaZ_s1;Iuj[bZG<"߄ )+›,o8$F;l ']ݡS4Z0o,zugd.az)en[l\Jnm]CO&t;y^,ڌ1}p;u9s>Xbʌ(.d"Ӿ"[':R`Ȃͦm,5nj׾g>f/nN{Fo.Eɬ`|(*DnA~d7KJ0YWHo:{,ʵjà*2^OaI71ߩ>FiR-KXWNK)FG,Ŝ)٭uO^J1"w!G9 `d##D۫=5i쓗SL̳(]rlW Ud {~Mc ]aA%!TrV,ՊZRyCˇkfBʑ iشneZЁLe.wv tX׭&{=H3~DlYU}.(XXG]]zy}2 [x3SvZ9cBQV+ݕ6-[iTF!P4RT |R:&D[N5[ f/Rb5;V=`#K%+v,6ay [Z8ֵ=":󟣼Xb[&PoYtut>]: b4UAUu$ s񫻧_=};{5-'z'Mkk?3)0NUNcc4AiuZA3} BEg[x-g$B"DZ\ikS^); xiκwN00H-">?{<[4AϕUX3\@"f Vݭ_7~@&a,IED$, Kv6,L CeJe4fKݿw:R7,0faJ= l Vka_tz,58~9WU:P{?u}`+1hZD|t: (UFPjl%^,z9;{5)}Bg[/H_9z" -"Y&¥9|be`F8(ZH14rB5kO(5!_632YX%ePceIm6C'eFƔ'SF=Tcd3ێtcJt2 |8PQRnR3ip2@ިߴ/x.J+{tj?ZwnnKsvӞUW,I8*f(#gL>{qߌg#%0voQ/ݛ>$+haCz lԴVQJs TCv,3[ڛT?۽ 6jL[YQbH<>sF$n^ɬw5OW?*ŀ*vF ڄKOa:--GG!H3:p_{-!@MLy9y^FdLg kc3' ͛_?&cO>=ujѱ,_^TaMC9NOzh` gU>롖ǘz}*uMI Զgk^Yo = j '`2RCo苑:4٩w 8G6 8+J#1htVTw+NMP{7*x@L@{[OV Jڌz2E>q![>/fAUZ\I{7ڑJi01n{%wne<ѳF1Z! Gs8^/D۴ɽ'{ŀOC]~Bb̢e2^Ovy\#y"k{O]T/{#;`Dmc3k)+VVlV:{FN%~ػ]˶U);|DY{m0joW;Fcv+`; Ȼ_ϡXs tKYigK5a `zgb_.:Sa%w>7 ʚ͍ݛ`JOO*VTx}bձFIig84wa9O&|d3F/|-ȴZ2~f3o֡> cӿܲ`]̪oV}ǽ2 3W<كL)zsϿ²?u!ޚXp܊wwq$*hޕ߭81ܜre̦;kw ڞ;ket5W4Ƥ]n3|h4o]G/5&}?FGM  oFOٱCz ^{0,boEөܿ?ݘ~)?\̶ Q, |b0g0>?IF]v#`K.QX u #, X2g}]fض8 b9Z+5g `\<۶4!|Tl8LWaÊ^9q>ܟքUjeT+nK2._ )zձ%,;\zbMDsΩI;4r+92\+(C?!X=ƈ̤b N?Ə#dZ]s*cLK| K{ -m.W?'2iˣ*0VlI;bt OwW7#Ś' u*\OR'*6nM>S$b6u5\eϦM7 c Ƙqk376>=|0K)JAՀ0gde?ۧao)W] b|29mY5`-Zpnai\MQ*{so>K ~[<ūϊ24]d2 [4܋%ITŀ]"g4!P!ȸj'4%X}}ks:~]^=ɶ^lK2%Bl*n?Sr|0F ťULk4B)dIfk rM hB S̡r#mpz+4 JW!.tL9$" 9$$htLD<  Hs\Rv2F` ;} f5` LLaTc>r Ҵ#߄1^iė =3R&2aK3D~[%`.׾#(E"Dd۬īQJyY$[䟋;ܜ oCLVfdkf0Io9+[ul͉k%\א85^YK!rg JF,qeSnkM$PtB.TiD|Pdwm_HMR~&V!/YF1fXd]^g`q͎ؔX 5PN+Rcxu0o\xeD6чrOxHJHHxLGo Q٧HtЂ]܊{p%#Zx٢KmgF=zxj^  ?q܃q"?Y' id?#SQwo"NWR՛|q\$yTE'.}鯇:53noO\_(zc#8kGuUzpj|Z>b#F>(ϕԜƟyy[Nܸ(Z`oiڌ^O";{Q m>1upow^|rѓ| %eŒ:- Gإ_y6]_9`Gvץ'?9* ˢV9rJǙSEN|w >ۙˬ!Μ(]\2$r`!&`rJ#+}7hȽX㨱 ;_Mb8v$OBb 99W,Cu$] ya]cINݰ߉_rqSlwNSmF{[acwKwk=ݱ97 hT@uM,9@h 'lg%4Y b ;Bwr?z=ÖɉBNXD$BHs2ap!{z* +V/qT˦Zli9CWv3-R#Ӱe'%ЭK݁!?BDSL+eM6iřU"PuDjcoݜ*W<U:fY6(82|dhv;x(zLё+`-gs=uevhxa)xUƈ;ZQQ?DSL?W>e+n?,ٷ>z8 >A]-,GTbU{TwKbZU ьNXնǞoٜjRXHAo3etvuYƫ2fxti離'C]xn e>~n7ybf/K|ڊK9Vpw m]M^=@v؜?jgGٴh| Bڦ,OZ"?Q IY{k୲(@ҲN_VfҴߎW|7)鏃[|M6?7?J=L!~wn WOܜ` 2v=3$?e"^޽?i|OSq꫄ִO_ *3}ݻ+65tCNiJR_xe`_R^ 2oph`r"ppr!pOؔ`@D؜۷{FNp$u~CNɪ>_NSjuWvuR :9!;3̀zcV[_4͇|pR,.ʌh;mlٺ!_i/+}zⴣfF[1{ül&ZA?6 z:62c Xޏ+Cm+wh&(nc/pW $lf'G>qn%:TQfmfVqs8\擕i»]oOEoxȺd,Bнg.^_wci»]_h-f{;GO~+@Nf06?IM 1q3!{}^0v Os9 m$c|,OrBzev4N-Cʐ֫#~ɸo<<=3wxo d'-*{gu0٠'e+֑Pus[mڒm*gt4lCYy3z9P8=X鶭NȚikw 42DykPOPwڠO{NUVz~N#/HG[l&)QO}ۻb]ա a塵iOOSMcW$֞ |$G'苪{oƶ>"xz>a~PVbE?dT\dTܩ-l gKy8{y@OTbis)-kQ{[o^1E VUSV^Bº*tŴ=<27Kai2'=nt^BxsdP2cؐ~Bi@`9#F aodZԜw~xՠ6l<4+Mz zx[V )/;?Oyuоo) C~0SgΉULtt}ծ^e'_߳񦁙'l<43مMz j;-cL "C@WmhS )K;b ֚iĚM[Lͥ7>6s7 T}g)C f-rk5lxpS  o.=}6ϭ7Y%Zhj)YC1)7yjб Cx4~"Bŗ~,І!:c鿎Kw¾>:3_JPjB(2P(j@,< cѸ탳S(!Znh ۇ:>i}lcʭ"o񺶣39Fb@QKsy$YrlLǝC2v !18!AES$eE#H,+!=6%,x`oX,]B15#˃f+8bH'hCr;SSެqﲟwG?o_JM͑@/U^\`E0/tfB9O Frح%q|lI65pXҿֽjzr|YEsG/2,o =6yQ0>6DO[.2߮37D@5>ř#ѾG@t?[Up0rI&RV@`2Z٭/iZb,!y?M઴EjVR"S!h=t=Z1a{%jG̡ճ| x}@:;YF`ȉ/4@yn*\Hա^% [ 7#P+tĖOfY*AwdHO6~k8lĩR$0*cXo;oĉ;r@ nL|{d+zUS7??U{c[>&qj&&MO;{r> Hb`(7tf \y5'vf Slv%-ìnCI1T pXY QFmu[Eg!̥}ߟϢo^p?<ߑưlR]1rKMKYV6֪͠z*̼UD`d7oãjf^f5aPj7"T `xTHpUh}Cl1Qf3@AZoh6 2(uI}d|qm2Iol-5-)3sh}W4ML"DY>pVZ=Mh;ǰ 9ᦫ|pNH~ I1r*AER框lXtO p1$N#ԑRɱy  «Ld ҐWj-|iN2M-ۮ)iO\ 4ZN]q9Ud8g/-Ø-kxPMEw:]a%e)(N>r(K2R HV#oJB^@KG9!cBjik K2g_ N| IDAT7 \biCGsi@/TJikVσ~[f2CY v1/W"03εULX6Θpؓ BTŢ "ҪeuZՖ/د+n;q?۳mJFqG%hLeLԪd^rXJ^;ޙ٫rIq EАyƷ"E],UAw"TcB|my>]&jZ`Ёw{?uu^g0<X2JݿW֐A7,0fa\7Ҫt2*-0UY1(*ո7R{Rgϝ͇ZConV"O{.-4([ݢ"Es]&b`|BUB,V @Xav2[B&3ΖZ+XI5cs;9NsN) !N+f!nAF$msy9Dn bnsxJaΓ0WcHP̊J[=Z U(ZoiVMe-K:'@zo0T+J)3Γ4}N5ioQZIl2v.#D0s'&?ٌY+SqL"?E{YVL`;P+:ʢi^y`SizJ~5 i?stlϰ;_lNtM{My 3JLN0;"z kcSvu;q%_!3?zrɆ+Ç>7umB+ۊ֧Ŗ^)/5 1}skoPvGE~1+K"%EHЯۄ>Z^>4Gg0rݚRroMiB0>| #aP ZOZ+V6>4r!W=а" ٨+s)GY_0On_ڌzirUct0}Μ(o)J*&,.#4 KUFB8'~!*2E< v9%'E ,TleFO@~I'k$p:"Vq G3˅}ȵ |BM| \#K О[ʘrMIeFdtb~ցztTQv?֞i,7z5FJZLٵ';x=C!mۀQ{.\8۲*E.7th)B挃s,Mjv2Uȧc?1*nӾ2sʡտhߝaEwNO4g^h{gjeTYF>bmʐc:$F`9}C3iǙFnG,# Xlڹv=pFM}ODUȠU-j=n4o+-۽&E^Ȃ839./N/m`V.&lfy7y}K&\PvmAiQ/n=&BI6=6AQEIXx +4H!ܢ6= *n9̣`P\N*Ϛxj^u\ ZrK?ҥxgJNrH/&aj+T-`v[[KFD+Hz8]Nmb߭TI pT glMwJ1A \s8n"EKLg#Ihr)C?#>/&1#X;`FfF5 ɒaRNTm<-БûQe6BGX}sZ9B$ʕpca7a7ݘˢ`&8aĶ"dv3=/;v ,)A`R|Czy6C(9EV>>bz19WMrmr-HO!/Mi.U#ł"ʱgp!+q@Ru)-ᡍ+ȣ)x"l\I_j6-eGPC0]8\_bFbX{h` z#oߢ[SPJ$Z;o~*$PZ(:Sb{XTL Y(3xLi(hr WO(dޑ P鲄vJuC",y Y4{h!(8ˬ[SUX Rĺ^F@!uS"̀K߰XClp-IQv-b/KJRopk 9{/9<&f+ƥ\c]K+ b=xjI}9#6`5SԢ}MJo'ʉ"QUjUJ"ӕVJ<1QNn lK9f"i`A2QK HW,VlyĊ -gA%#.L$3Q*J-2Djʧ'ɆJQm^?@} _JVNHs)Ռӗջ!,TCw %wK-Q d<1z*JȁT|×/66곲!Kq`Bx#txl%thWP Qc voI V"UDFeӁ( ҎVfXmKoAWBQ(]*+H!@PБx BAYGMQ0E++8,B{)}Q@h-p|uku݆$F ʕ.QH -ZzdIOEW\(joD%wi.vQrbG/D)#U)L!>׽oQ2)?aj# GGh+bk"lO8tS -W!obIQ%/7J> ŷ#|WscB~Q8_z,_A<~RWcӕQD{plb5-;&K7#D`I\8oCO8KU|۶\sQ˟T|Dm#gM"[D⪳ z^0 @ʧћ'Gc#M'"VZ Z },#6,!n5Ɲ:KŏsΜ`qQduГǬ(hSw","!b(y!7pN=LdE'x'DE^KM>$`ԥZ.~Y_CچZ[E/~Ygɋ?x ,*{H}@tuל[YY|D|/^GN~Xw.DEj:~)&*:žɄ*fc\v7.*:֟'SqeǢ!\R[킆o@㢢㢢"Ϳ_EgaſEFG2 ;@8u MNދ<1OmQD|h+9_Ř{1wiﯵ*6z~}c" _KHeI` pF8=a*xq͔bb}f[<.NaԌ]@'Bq D]%!/B`H Tɼ#6,..j%pO,,v֨؊4j _h5Y+gǤa׌-]!3aȶ$]`읡bg/joP[kW9fj[6~Qg]i+_qML/hjNZ?MuQB h{*t4{'gujcKh5KbyC)@ =N S.!aȶdʫ#Lw쉱Z+Jy2d7t~qRwRh IDATe_hcvmBDܩbQMزi¦6IeO uDT@~9uhzEo  -=!" #,띻׌-[13a6󯥝IDv<^7nц̗C~OEdUCOO =uzY퓆]7n̄<c,Æz?p.IfzUvcaޏ֟O4EƦE7@L~t :Izfh~j\N?Y½߻?ٲqe^f Q†${zwR[RӬϻK|:mI}Utp@e&=Ϟ%=T~`[ WNԷGU{%AMpadzVBBZ#(nhkBD`Z_;@lo1Wf>=~@ u <t1`DEDžuj7յ0ny}i/gm3&2mCi )n̕YC__^}uv^r/.*:.2W{@T^=7z֞s"NW%LʕΒ{WN_0 @/NxLejמ&V2xfݧm>}9aKW {}=rd,uգPz˱w]6_#R?(.#zb4P"PQWz qEqS|yYDH1o9SqV4/96TNEIH@Ɉ*Zcv_(fyFj1 S)W䌇oyI}dG?O^ƻ:TL0uܬؾ Dv`sPw݆?[E*'1;=J_4vI RRz.h^n̑'p6 "FxO~iױRPǶx-&D,'K^/<[ՕA]۹[UvDơbN~y%* :E EƻN%gvj;MZ:M!r;My}/;A߿~߻oT6lr먁}o~\3pK3e ^0OaHEH}hӦ/LL/9cVO0-qNo";8 tˮ{i:~]}1 nTщrY (/=.۔3* zK7ZDTeգlm⢢o#SZżQb28K@f]PaO,C8@"@-/'ȍ~V^O+`Z}̐yqmWCƶiݺϋx^}l[ȣ~}ۗ߫ǘ~KWt7kws[zwd@4}r:~^wʖiӴ}9|5\Lpl_@c_}I{G=0ȍ=}^;[)x ͩ/nj[t:-Ly=L94i\r* AՒFB̓6pt=#a>q?GhE۷n}~>[V:qޝ&-ߺ 9fNnlfQG>,D4&n[ia'3t?lڨ^ӆ.}0S)[K?iHϞ]ape-gOǏv֧6zp|{5QV}89w%'3~j83>5l>= Ϝ4&٢izM?v)0 o(amzRf~S M/2!(( ؈B>%EHrDJwPVAA \6y^%P죈B Q< u9Ot݇F)^`0 HMspBP:.q:!:GK>U\9V+ dxqt".գ8#\\J - eM򐕔iV<:.*:Ԕjk!lYs# oz@xl) ؃ZxvDeo^ 5v>1ZRhuq;nFj-]̀)7rO!E޾upӁ oe.&6ׯ&P7<*J1,Ĕcי"Ss=2L,(o(x& @/˷I}yrh[,''D{z"rƂg%Ĕo9N5Rh֭oU<4$M&R)VsSr DW;';e|˱$.J`2ꡙL 78\h̾v7ݼ2O~҃\)^!{Fp,PrcZ(~ijWAP1E}F&a-Cdʷ B i+>{N/Uc;jL@2EU5X,9-OLgx'7Srwh~S]Ul,x(} I_'*1苌&ySEш  `B4 6ch`N" m o@$}6XFu+d> ?zgH K U̧UlA<=K|9Pb4e(BM%2Vx|&/dS՚Loe܊sW9^%,%N9 MbpVe:brhaNo,ƌgh890H,[ yy`MBur ۺUQWY4>Yo^&/8+ ._'b .07l*m@/.~Q*`ܖEw>^Y"“u ?smʭɌs[hEB[rrXr+Vi&ջ,ba/q&2Ȅ9fG#P~Bde$ZjS$VLd5v]%F6/b_yʰuhqFc%?0+ڸJmG"osT@p^@^aj7{*cQ{g{*GM5!+K34.^^.v|{kAz|V%ы&D6듺j ֜%ߊkG#CU*ۯ5hg ߪ7C@z~V˲^cKϱֈv~M%qҪ5n~n*'T֩=|;TqpjN2*>k `שW"-ZZ.Al-Qq?ʈPpuU QF `}c2B;@|5Nyox~1"P6}n%cL)ѾZ3@&YjSiI S-ɡI_c4n~* eȊ8go'.\ՉhBMI4@YωAwi")ov5b]gQM&F'X'vUɱyDU `Bh1@GpS}9v|U0 !h|߼)._+E "X.G.H8Qt2B|a?O`3} (2MEZQnlUbjmզܨ2l>FՁ-:Qш2l*}_T|Ϸ|^  ,Vraaq=cէ\ ?:C,tqQi=cדUǞsYs\4ѻJ5*ӢwjV(e?0hiY%95-Tn2xhW'ξ,AYe\VQz*^ `~?~AMjUָc A /ғR>II|w7GK)zJhJ^'VQVUOwcwɉIIIq~x6%TdѾ'!^xj?ݾ@6Z>vdG#lgMO^+)z"-*reV1ݒ#}|Zz|54y`5;B ^`uO3YcU{϶}Ur/e9IK|c`oɹ{4Rn7m+{Wh5rB+lA׋OeIVR8Qrm IDAT"*XЩ#WdQN/c%m iӨvj ~7{{V,%$ϡSGRi|_8=k8yv 'WIIIIIɩgPy1{ tq.ۮZ m`'΄ %\ծQzfϏ]J!ϝH2ux&Ĺ$3a0AHi+i:aF`cI¹ICwzG%OŸtm&qB;W j6n1ng)gYp|DH]_pg3˼jVR@7&,4ϡL5k] ˈ|{)m/tiʔu_ϯ=ԮeDJt}Ge?\<k%24,tk=ƽ՘.k;">-'T5rSŜȤ9YP t1^q Y3;6wiļ{6?LjU\]mBl¦H)mC .2wN6`@G:sPf^!M'4[B@՚cg'sB@֞B ˠwlE6~|l]I:PKs^vb9aA&͚}4$_z27*2+>ҦA\H @zfdz= t8K&b/fӿ;me~>6$ <>~igb04}7 cvGI@#ܮg6r }9bա~?SV]wj c̊ɫ~þcteÏ+> W:ܗ0Ou~.=7b++f 1'Α]7&r3e.sLJ/>z#!$/vOΞ+']0yEGټIWbK3 $?S$oE?v%X$ZL1tw:7o#wOY0nNĐ(lƕ6sϿ~r|ORCQʰ`oBi&.=¼6$w啝PF;#ܗa&ܟп;m?)uDZ/RJIR*SBcvǚ.GAeFe ;7Xh'LʀR4Ƿ8؈bIj<WϿe9Kt'Ęr⯬-A\?,B0=4v۩*vΝ{%݄h_c]86@zAqQ}}qZ,3ݳlѦɊ/tXsH(Etֿӗ58M9 RtI$ž;;1j_r3 jJ-h{l~lD\ϺĽ5Z+:f߯J$-q W$`gN:v]s~nD.7"ƿ-7Kr"ƐKEF]0isRPtՍ!m,Ʈz {B~ՍW|To3%-$܂M`6 Z J@1Hkc ٰvZ; %5sęMˉKD mjOO6\^c+bE",)+N%fI vL3Knk"]s"p*?]cM³=zJ[_%<3,ݎR[ץ,6R ,;9b)7Z(*U/mXۣcV(6G.QVG2cK5|LWm?BQaQY:K8:hC/dԘT"^<6n8˲8~.昸PH2BgB].wʺK=""Q 2[┒y}gYUiC M >E,?KϞ6 >7YDBMmt gRiٱRAU* VeQnke=.s.":j ŭHDהs䕟ڊ;_0v[>Qj Zb.#M܁"7HY ɠ<DyѥF?ki!1!'g2 .BqYE?\AЯTW@}ǺJE-pjp(3RhT+HaT 1Jjw*$"6M雯yK^tsFBIty.̗(vl'Ju) 3?QHע@rx*[pP8,O-8{ n!R3LEz!bNt7zY ESr%VutcQ119`K )Gc2N'4VMNDJ"e.61g ˉqh{nT}P? WŚe :7/ݵPrgE`*2֭9* [P_$Z$V J(YGB'DjGDA +?[J%lr6+!g=::6wPҮ+*!DL1U""G&rheKr֝#6ЖGqYzߒX ROV@Q ˛R̎ȉ" Ƞ%4\Eqk B'wCi5v qSRN/,M0 *VIS @e/pC徠Jl ez#n/8hu'1Lsٸ]\m^.J/nDj(YcT-(<3PB|?REv~R4n-NdQ%߀r?;Ta{eEl|~#HX,= -qnmܪ2||UjAƘrZȧ@<(,: T-'OYa#Zk@]Ei|NzFLDT̵3LAYܕȘ;l򅿽>+Y&e|_`~g0?N湩bsS_ "pz 6Ӷ :2D,$=DM g@[9:S~?u3"Ԏm4ԩEga.* =:=%ܔ]nIjÎ JȬaol,xqRxJyL6¶?ؐJj)MFpڢSe& XR*|HJ$eAq#i sX>\"6NDǚ¼‡˕2$Uס-"` C/|S df "?I[N-M@#!K)DbQ ~n%]#3#@}7Tg" Q@ 4ൗ)hė xOwK2Mv}Gm\Ty8!ڀ%鏉:޽-w3 *)0{'j=,["gS[5{zdݾ 'X4r %b.$j 1+l˲ŵȠńdAy\KDy2mai3[jI=?nl9qµYG6{[9xpמmMНeU$$jNKp>8w'j_-Zp雧c/e#@2cN=oi5jּțk^f\Z8.DE&ʫ⅂.yۋF6_X 8rR͝7_8ЕKzd:+>bǛ)X*Po)]ejIϬSF]3j#v։,QpA=vm N M[|`ӆjb*InnYzt7:)VcO~h "1d( 6P`85~Z c1ND!*(DMd R u*`֣73Lqp}S]5!"5h|{/S_aZnN(Ym igKB>\Rsn61f,r.3/]VrłH/ކej>P2kovm&tDK(8I$::o$)gi'ҬSIӿnyvt{=e|+@2MyH¨jڝ}[~|1/ Ѻd|mET{uuxܳt[^tq՗L}g{3M TovYFSMxgtcƌv._~q{#c&1|"ڳˤhPMkz5+OoN 7[t}}j3׍H\ыgj\^unzbc N5zΘi՝˖~gAkj/ܭo#sD.!w?ҫ{s!Yrt;|lDgu/SZځjlj,d?0Z> ọT9/YEuQ{XF2/=/^q.2T~nmz6n)y]hiʟaقooE OCJHft3|9¹BD E?Yc@,dgGƔ}KtPoK<@{ IDATYe|N~w@Y |Zu8g%fwWQP{׼IoEy ҪjsfѸ!ֺxuq7zŕ=+xGz~  bOlecu9>˯m&v{ؐGN5Ι=k21KN<#ا!+V/.[#8>0Ou~Op=~]!'R@4>m#;^}kPLJ}"D_۵χ7CoD;d 6"y|ݹv]^LQ/B>4Jjr%k‰"("HO(?"1"=|%g(x2T]Vx[ARY6=yZYƏi.=ͺ8LS=Ze<`,I۾e#[u͋ M,t?#63WnE]<7USn\cvXC[z=Ųr!"5AuƵVq<3S"nw4y7y%?{cA_oS2r;β**DzM8p+N\;3d1.㇎:Zpe)rү_]0lmi,crc!Foޔu?uSɐ/vIo00*TDq\߳ ~a tSՕA52yVpVѼ[3ڨ[ۤ$y}} L,av !Vtle 'zkҩqVq~/!ה.1NWA W47A@z-QDTJ }ЍEh8y\gA|gTu)E5GC'@-jTY2:]ψ}ѽNWm<]sH\!*5>Mmt˨z};gyvWwLо}_M,3Q:sְ{B31-B(lBw@1ղAZ ߐi:N<u@of;W`^kS?ʜJ|ΣTEo;5]U,=!Dҷy&rV֑Қ]]l( & ]MIxu8Me*/\:s f[a~Щ=lJ?lU ,kv`Ґ^='nMm;ݠF̙!A9Gݿй3:j`ןی.ŐT7i6Mn8}r=D( I6ql8@D}o[7k۪YV'cH4 2u'oY6a}zO=ݼuԥ] Hboe2XA3{Ѕg ߜآQ Xuvy669 oW]KıB"U#VI,B]SIR*pdT2%=Pψ;AwO&RV%{( ~5{Y=N,gq`hEfY&@%?X}SI1ĮeZiEt_瀽wco8ӥ߭}\@LwL QO:q+i,mٻO168zQ߬Ybhn:v=M/T*J[n6Mg!'S]Ey 75S~9ʘi-R{w#iNx2H+.S@ۍ~|EMVpvwV#xŴBvOs?}l JSv3?(2|M{%׷.T婑_F KW$>ut%@jio->yc]>uTDĒW 4]ڋ{^h7 rCwGQuSPCAA`/* cA *JWPEKW:H{NHm-s̝ OޗLs=ysڱ`Ŵ{yƵWʳXh\zˎ[kH:Z>|xgK_{U" ՝4%FCIvy _j5ѡ>*<+>YsUf|Z!-Dp .Ś1k9~lѓ"Ӣz?u衭;ޝ=jR`Ȁji%yX:"o?|^Dd /\Ӣ{d] -/;%g6͙bjk@٭UYzǻ7JNL51v;M#2VwNX֯ OB)ع],=4DT "_|R«)m0߀Vik_q6ހyf?c06 f뚼[}Vg&>;%+RJfνd@yԶs#{hŢ6ٰܿ涹u#ADa6Ť{Ykuȑ~fĞ{|zHL C|=⥻w+A{ uz=ed|}SсQDfڬOmew%CXb7.^yNuI'FҲi=oGEg%p7#y݁3;w/]);{3慌И(RzŠ`.A /Q뛁$>Hl^(s| HQ} ڬ5[(CR@#毼;m!}kܞ1#D, BQC毼;m!}k~P}Fy-3W}Uա_|ݐ+"O?"dnjaq/&-ˣ9D sV};ts׶U{ѿ6~+8ZK3xP6v:C͎}ZY["(\ѩ"vGX108#![G`eWN9[@ƙM6hDWs>1q NM8gj꠯5_Q@"It+vAJ?+x;;zlcddNZ!>/WWs}"Jr2ҡr7>J>?9{=C@eI{&Ng.{}p޻ig ͐zaxGr9n=v<8*3,rz"HEiE^j's\"_p߿$w&^<ݞxR4\WJE1g!/okbji_WQNU>d)3\' Pv8 ĢU+泡f:~hBC =U[5#;ldHv+8!NpUŢ@(;O3Lt==+,)2UnJ/:0 \y<7֩|p,m"^Z|p,ϵ˾ٵmY]F_.p#/[$9ʬN'meV栀@ vLj:v%EoEyZI/~Wg~ O} 7CvK{9䯽E НbNmTt2TtwUee}쒅T쾟)[`pb6>wr*O5ɉf\ ܻɍ/Dt؇+\įlՃ^~bpX`K͇nmΙ['Hݛ'`j؏_:w2~fY،vM ?%uU9\)/'}Sm'حϑ,~J'ջ "AdOfHXm:V?C k=tԗ{Š;B/QT?DI-RNYK i[= 후l?{]·;4qom3"eAHDY .8?{ySS"Դ3/޸ {p-s,qUlDF q¶޻ (-!^<-uuvc,8 BdAɑ]~رݍڷx{럎3`_%UR+zb{J!) HrۡgLOwKvDRqΝwR zRIBB };,Aw;.Cݮ#>N'og"(x[m\o[?5qxe6C e.qY:%e7¾"\8ut}2= _O'` $dB9NXy-MCiıtdY$$ H5P)/>VS:L*x j#".<,iUrqj߾!"X.N'Ryf, v:$rZu8A9*8RXojW=L$\?rTa: 2ԯm7rXo.I0TU0YJp YنMy 4` 3$4 t;;2ƪ1(;ܳwA`~ "7hnsG|w&KԤ{wLTְ b晫7f(8U Ξwn.3}o%CgyaV9`=2 qs9ĄD<z<gc J6$%i ^h]x'.KY1ܳH͢zP cIDC-v*Lͪ0L3;>lc# \@iIMF5jW$5u]כjbնbdI.պYx"?PyVzԌ08|l~"oY&wȖdg8- OMr3?ֽkbP~nz^2d;9`Hb/ܝ 2[)¯ڨ$ pDdwPƌ9̙;knʕz]SQARur?[ -{ڑ9p1}e%Ơz2 W\Wm"Y*IU+ST)RP()zѝ(HIp,~?_9Ύ #!ݎhler=Wtq[7H(O0a:2o%yEw+G6kf[ < @b|TlE c̻&>7l`{D{4ǻ8Ҍdn,3%I͠=Ήcm|7)oq=AN'F@Kq*ڪA42_.jg @FTީ^=xzxH=G*%RJֆuI޻3Hx#?.4 <+Jp#)0%Â[ RryPoLdcԲ"艋F6H:}-!,Aw^r%ۥF lRNފz.ָ?g)ӗBn̻G| *be.c,=c~׬R7m@Ԥ2 eQqzȇLב5{#@G6I=}39OҦǘ^aKJcUېC R~݈zUL豦!%YIy:N;  :oY2&R? R\ϫ"jYU]?[ozfϙǍlsvoվj[l魝G?/Qc[ُQ+YztvGνB%&$XuԎب]xWᅭ?aSw'|od{3d`]Ǭ?vڦKԺVcco v;d+4x Ȼ*?pȧxn7j쐶Y˱ t:\̖cPӸqO=K^HSwiX3ϯ6$C7}Xo*]xדܲg稸?e8 ޻+֏48;uÏ}:R7>u7f&{pyӋI +Rh,&Iv$:aեǜF i_U[!t`7wۤm{'6aեGFq_;4<6l妒/hucpSPčEOu~&D2ea[ґ]eXnGlzk9C>erOdao9?d$e;:F1e IDAT0@oGfLRb ; w6m`joYoV\+c4Zv̍L b_q~ߗeJ%^5sEDzk۱imc2xFF %#U(1=EhS\="S*G殌mڜ{<3&v{8W뒆 U b*`gwƎvއRNCfY5??ߠikuЂsfKص ̓`˾g֨U#5a镦q['Oi ЛGӽ[t;?Z9Vjջ}; )`z3ې0*?y?CN#L lO+^ wx>\ YE@[q߅~=|`˹1k-x'dI<)#tfn[5 }W +{|1Mr'KT6ڲݽo.8/?ZPϒyC)~{}~𿲊N/}?8Rvaۆ;ϒrOϚnW37u$ڰ+i[S"n,`җh7Dun&Nvf]Vݴ=m/Z?ܐw̉R:&7~, 6}1%zEٯmX^mm3[(wM#ϡM ~o3u>q.wfF=CkË\.t`m3Y[(Geq{cȜ)e8M?ٹvp 1_5@wPkw6k[DV\UMy`n_;C^XPzaR|DޜrYzGDmKoYb3Xi;᭞AP靂 " -'DP3ۙ[8% n=U5Ϗ_U{jȚ >S[]Mog9嘱\\VطIu< !9̘/{bRy֍GPxf7Ֆ#߲s]+㉥_p%\>.ۡ%չNjD@qşpH".SQy ?w!-~-_^>XkG-/ʁ|hZL`nLO vyWHkzuՌ]tȝ\ΰ? h}:ԧC ڤzuvF1yrdA”Zn y<7F(K&8 9I ErFgl}!?ew3\iQ4`3i6"P}}ϻЯ *-V9vwWX#:|LTNeq \;_fz9ObJ&B5D@|"j FJ$PtL*)J_)g *[«*V"qK_6?~qϧ&B-Ԅ7^{́BPֽ#z!OOC%_ i)Dl y]s.5j[HU9H_BX #~ Z|CJ%xP|RO-SY1C(fY4:ޠ6D? /Dw4́FM%c'oT(z!?B9r YIYpQWcCy5 !'z} 4/ !"u%]mTR!Q1;˼f)oK<+L|;g_}Hq-?IlG0~!ꭾˤ0A ~?WuzCZrP@.C)QIhn+2!%;/R3O=v2Z}Lk|,UZZq\Sr }d4&U+Fϖ3el]Hz9!0fln0Del]hɮ_#}6<8z/CЇ>: y oS,&Mfc:CSC:zç4vnw E@C*Vl L^5B(؉ >7;H3P3~L"NHE [ `s. |b2_@xx @;!!~$X <:,t[rqD4*IUHӿq[ 鏑V0L)I|A;Ik y׃i;aZDo fUܘvD! {BnC|*#OjXaꋔ!f\YFTt_3j"vW6ߟK-iz~C301~ZѧlUM 9 x6zV`-ߗÇE GhPP[ " :jw>b|4Is ~H+RYKW+ t%@d? uPG?r)GhaQ^:ugҭض:jZX-0ٚ4=]<*Th|#҃oDW?ĭ2bFm>^ӑs+U<F?13;MǮnYQ*GCBsǑm>z+%7L?]v(S]+7xܕ ϫ,/!}|sO{W*ؿ15oi9s}+ial\i+69{uZ}];]DCu⧽p_|r|1n=}ĖA5> T|3گ|b׹\+1&>IԠS/W 4wNJ/_o}%?NoMnh$c}j0 HFُ>z3'A X=?]HsIo)г-IV^b'Ϝ۹WbL=3GG%U73İ+L_=N{ݤbL1vZ .l)u$Y7D̀h_ Gw7Zmwcoon(~+<@^_Ò-8ܝPK9UII `_(>8nW7@vłx+KI߰{@5W2x7f|,]_@1}PH56 |?92϶:Olwh^c|/$4eBh^1Cl ǕC7y{ 1?-+զsJo_sOFG PTPթLmrm/@5% S>z}U`VM>h[k۴jB'@D^zx࠲םo'U)W .dبYW.Ɗo^ɥ15%ɵ᯿RwxdSD.7Mbp^oάny& 9l7vV씩NoNgMwXn^Q_I{iU!@QwN%aF>8kab $m:(B,Qcϝ=o!8ۏ;s~ASy )X? ub"jߡVxeٕ&cuڷ5c{F}9ksH雷VBʹsoIf_OQJ1^ƮiSD$IA:=ˌDr/91jvet20?=?Λ 7aj1)7fE?A)QD`0ovul?ny W@$&=!UskV(0fM3% \]VЃr_ʘMQ4\ wHly KcҘj#OQOЪ6I#j`pv%!؂@]RRH @z4+*$ b>؄1Q+gi~t8oL9o9(.LMTrM%'ܬ}$fsC$J$ wATK6FBszʀ>V{W=Tǁ-Y}tđBBPWijR[΢ (/0]uL!ve(G,{;g'XQ"FD^}$9z_dTۈHsii_T~/?cCGEr*yV e nذw-*=5bTUfloػW*Nk9fU~s-jYUd{b3/8c╃Mp=8[zՎ?GY/CqVR>{_yy'as~t Ro.7| `gJeK?[^eU/zuMgkmw=έ" I猛{/ςpnge aLOT6Ԩ2%^3{ŤdXI^}A%3/~y ]wvE?D!ڂj'miK8BawK ;ѣhW3[{^ԨKOpRo.M6-mE~J[${߈n9 jɔ% ?쾁%^]ٚ?'$;ή_kq]ַi^-}7  Rslqg `lwjeK>[XFYgykimZD70Sox{{o7ٴvgKnzL/rS@F]z}36H˶nي:U(E`xkœdnԥGߧl8ll}&v;A(:5lIڝ+ է77f/W*ue\DHE֔Y{88g 9nYo+GR7 gl"'RUSTqSxkqnkGϔE2EnQj,(AQ&)pfW%F׋/ OFssHiHY$R L-6Q>Ū 0H y8*V%,%#ԎFylɚ me׾M+ef̱ܼBdGHՖH P9vPYm/+\<›ɾR݇NۿeܷnjsFe+6赤 doPFˁWo k۫rX":ιb펃'N/F=rv=y b5$XCsw[/5l]$RunQtDdjczVq;w]ϴ8A5)Yo}..x1-C '/yt0`n8GxZ#"ÞlmV州lJ@B8nofT{^tZW?fY3:vG\d|i"O{r=kua`å/C\[ [W+i@\[ղIˑ;D]Tlަ^ȑm'ʛp_9 ((gK `v]G_ć z޹g]&԰?rVܰ?8[@&8*_ Ȟ}NQT&cLVį騺"hxJ.g9WE|,9P@<{ؽO a [W/sس-n$o~( Lh hjRRa7XkJb񭲴lcCC乤13FB+?Upr'1o*Li_DTD!{42zoo_"쓐Bl@T/;}kwfv T"03y@ 2;{zͅg{?s;fvwȅK=?sʢ^_rЏGy'/&Pzn_41 aPSqɁCKߨf˱@xƑVGj` BU{|jPc~}?Y͚kaV B)]T;^@հH, Ɔdω[+׮ yu3(r (x;z=>P\5T5E\vE+i `/}j q%#C|jrA D3c4 X&iXĚB-l}+VMxT!@>,M;})ӼԎT8?7X,F~8]VB}Dz$u0ΖwR+v&I 寺;yWzcyܜ8iB$\R" 46Ӱ3RҤK bnL4򌔱4i$rKb a۱Wm={4)!JQSoŬAd$'=#bSrĹCbȪK,̐%9ɐWыjЀ r( $Dpdfd;C\@@- hj^ w+ic^SJ`M:4pS1ChA.,_!l~lb86$SXI(.AA1I, bb+!5=Pg%Ag UZH:D>wQĖj_gPby8X%|W \I=+U:sQ1\i^{ƼF&GY7 c'*@b/_NNK17KX/ᔊNfգUXꐜ f$|gѨۘKer9̃z> |lFoc/떕 CEn) Rqn18r] ;ڢžS_xcOq(=Z[>aH*ɲ@htpo0=9,9ƪ]I8 __~mV]ޝū2=5l鴗.ON$,zPb&@}_{r7KJesC<=G^2g$i"AB纓,<͐Am:% k(^W'Jz2fP׊J% )<󈦧:%42<@Isխ(PyIBC v@D*:^?&kef#ns:֟7Hl >qt}'Vѐ%Z4-!2eX9:hK듊S.|Y(s(ZiܶGKU5 ___N)R%/ZDh% ER^xt&)X{uv\oBRNChG?&u-wKI ȽS#ذWN D FRhҴ,}q\(1'1P9VedIJc@*/ΈF:6p`k旕/ki(XTR|6h` kJ ,AJzWsV-:,YŮt ɒt;;Of8UkW̔@`ȯ,,S,ҡƊ{vI$uOѿ,"nM.ɻkh9gwC ++n4Y5l?ouo%ZfH6Սm`zYxΉ"̴=esmZCx^sw&GBgsÑQ R7~%%Tw!=53)MH C& |6 ){~[HMJxP~;F>ↄ`B'Uԋğ#݄RJ8*W/*3 ,ڿPQ,Rn_6C:{y2U(ޝR4-U er 0&Ϯ*EL260GȏIer?|@OGvJysHrf&'z";YRӋ%K+yKq1/c躪;2ToPR>)LLɳ <٫sTƃd\yܞ?3|8q@:Hj_wQW5C`[ۓ0꒣vcLݸ7ފ)I-v(&061}SjDfd/HM*Br0Y/lI[{GMk;\e[ۏ7kKzOُn񼗲+Y{w -v 9?64|{LP"VC3}?q_LAw-_>vT.Q끟>e?6f * $xx?+8AkMpu1gQkmoEm m΅^0{bӫq1DSjD#ȞU?s#!\] ͜-5cliX38;e$o')-@D_c^64X;Vc \O(3o Sn8ܖ4pWu;Fʆ?cHb -؊Dq6z$i3娳A56+!|/#ZH8t|?u5Mʁ (i>u$paF q[V!\f)[gKj_5յ,1 )'ٮ*+<@D$jd^v `2ɱl *告%ȩ 7qQasnEOqa(_gA+͢U &RH6sTM|j"~uELq= J]έQS0A =. }:uΏRu: bpd>&ƬRN!O>cl`=43?m2ЈZlѠ>d*?YMWcyw&YC ָN4}OG2.唽B?p8lކIFʏ=u[g{+W^V_6 JO}GJZWM1m̲M2.մ}XS1 CsՁ^N朎ԍ_Lْ oo16,@H>uUww~urm&W1Hdl:j׺5\gzůwkq g^J5%Rѵ9MzԯD@q%ιb2)-lj3g(w],<ó'gEi緬lb%)䷓}?ٓڰ+g &#ߋ'̽VDf@ W\)[qݐklrjnȿcS g@?t/dSV 6@I]Ʈ `'"H!| }J=5??O)"ڳoZ8f]\x'TƏ]b"U*Ϗ7pae:`cYBl|r̉K7~hȿmƄm LY#S_`OŔe ZZ,gܘ~N6!e=mSOXn!mH3g־r{>[8gT[snfrܸ\J[Eh"$nO4V1΄;l.'i˰B-ҤK&^nϖ dh tjc՘%Eԕn<5 (EOvZD" ˝G"^Zx(E n "Ԋ>FwaLbJ>*$.fS؉^kuA5G]6/ђ=0+Қ>+])-}6&ۋl%L';N+YqOl!E y!jnCJ׃|"1Bp/VsQ"+ F(Am26tft>iUdGD0{XぢF:+Tѹʹ3C4sDٝ^~i1}jڏ4`9J p&Ʈ <ˌ]X'5 `ZZ] >F;S_C.yN"ӦE|i:udED/^}REr R!V$܀}dgX}B>cKB^zĘp?DA(Bt-N@S'P)nzW)$n|:ޡL6rA\(texĞcmPO*Ѻ|#E!*v>dAj92xZ8m\䝔NAлO,nG!p02 xj O1?*^K~s!7. mޓ>fB e?}\?#? F,U/**" 7홼۳.G^u, plV,W("$ɧu"# W>n6^(,*"~/ReWߪ[%&UݪʹG{+ 겎&?ѭeD—;9#uKX(bjtFHl]<&$7i+!R  1_< b8daJ0#ir}!#'.6jHLL = J5 }h[,:Q;&G+ Yx$PJ*n T,z:*wTUWwk[!2~un7gT#R0mhf3'5!&|e'O?/,z$dx {L+M ?9 L;*Z*S߽*b^!e ȫ%GyseHH${ BnAe$TlS#FXFWnA*[՚hC1!Tɕ2k;ǾG=E$QLԈDr= Q2K{O[n~{Pp~ƫj"S_[`I;E u:R=)wm9 x 3Oź^񋢀i65c1M؝9ޟVF[qPMSi G yY$>]AUXM>MIyA_Z)゙Xt=I|j왭 ٥@͡ >J&UB # 0W$CzUb v)*FQQݢj 7c~PwM&*A$"?DuFi3ס0 m)'"Z}H>~0G|%l9R4Lfxb,-Q95@7jy$5qyA]_dN~U)1UR4w ` j:/@2n(uo<:Z7gކQ vt hqWj8~;Swa<3TWzzڒO*?(]9@& fY1tziJ-"|fR( 4Jf"zE[˓Ta4oj[% ~ZTM IoCB-XBV3xނp&F@OyIjg)C1A/:K4/xT4(h"-,6{;dEP.gIbJDjHiWbD1+=RY 1# jn:#жG//u3$iRܯUu`g@߆ D~-sh%}vQT]R W UTH T@J#HUB( H #=Bz6cܙ3˻?_s˹=9Q8zqPCݑɚt@@6ʻD`# {-[ l*{/Ž"?+G^VJۗpV)gi<6ٯ'Y8$^Tm?KTjOdYR,V0*HW& .'}6J⤬đxPPro{ Q#"_QC:W%GeH<}jDV4jw IDATJrFm[q=*} Jާ+(e'ӿCt@ 9ʏNB^X+*wS ^U%O#Қ:D"''+ G"<EztϨJcZXgdBh3Ubmr wѱ'fY.2Nqk<0/%ޡomkzF#9:RI̚؎O0ゴ,g ]ɿ8nWi"2#LՓ(囲ݢKt&{E!vUY|ŏɨ>ơ?`Ԗ}>6^2uHUWɒ"+>#U_6J@6&TiqC|i/,i8mEgPkugne/~j!Y8Ac~{Ƌ5k77 ֥&b_sI5g8ƅh]H'݉9wOn%'m@i#?N67hޖE^;‘ +h =Ȩׅm,>~t[q1mf quay[7]o޽~:-{ *wicWEDiTzDZ#܈{d0F<]@؝{Vئ't­ގwLu Ba׶ש$'i@ iۖ Wc==46ȥG@ͤG0rk-zCYl9yZ͓;v9.iz["ouȊ9 nrc xP_ 6:w5jD_ft vE:ZAά_]t-*ÛVr 4{Ӊou`m6]q [ƕ īͦ7F [E5AD'`EӼ=먰%;tFxčt rR h$Uzc\}Ms6y-2t mGG,%:R Gd7A~V걑,Kb]SFmR',=q|T-R)T`{[n47Hޓr4:A=y<}H%Kur8Jص$=(XeYMuF:pXE5s6{"j97[Xc/Q<3J{XvTI,0"OZKVP-e҂ GP+@N-;ǒ#\ Yk0-yj[d)T:ku;{Ӟ.ͷ9B̴Qw!J`ģgȔU^hL*{6jey7&CtOj=up^Z/LeƐkiFmM0jz.[2aǟtْIƟN6k ^5'q jܮM?BQ.J.4sk= hiݭɹQ?V>e*lz@Sah̩{^B.+"_5Hk =4,;x>:diko Z'a~?ݭi؎6SU'b zDzsεM?]w̱{# Eʐٟ(hE&(e4 UhkbN[ yq=_ln?煫sBlO2x8mk7y꥘ Mw @Q"&Ex*JҾḵ^dB>l ^HkN/:7HxeL)F_/O_1cw$(@iʲ$7& !=0$+DK)AKq`tA#/M>_IF.5_ OAO~ ~9 Wgٞhp&xL,ޏ•*Nx'5xd}̔}%W"G#?oUE#tMNfBJɃx䨪֝74QnCxPAnz49 Y<,GQ8 F"E 0_ P3`DRR-EJgQ [PcB @gҜxzYH5lRyx/1}LR2xb.ZaYf9:s}_}'] &e("cO32z`_WOdh ?vEv8KowS^7_Ūo# {{g[h%I(5?͇Aon3s߉3X{ٽ噦Z$n˱k/x:z8vܬF.5-'Oou zxe*@"B$J1漎ySF7`+oq8"vm94\ҵxҕһe1/)],{e&YG>@Wkqj欭gQ[lPFo] ƁV!"DjӁ}d󝑵jybs<uU ϧvN lú5+Iy%n<;wRڕHA;-?Hrv:׹y .W[BK<[=Sޒ>}n#i*m-7uc܅ѿǛxԧeE9h^2H ^9?kރk~DYс}T/@D*^/3lOLU1w HJﭟzzآlo6`s\!').s4gDmm؂Fwj䧍IT#w{o$͚} ]'e&+<!u̳e!usJ4NFz/&=fH0@m\6?-#Au&7D &VDٔ! k{`U{ԧOQHn\o\3TȤmO6 5;myl8o&X1濎>1g_,_㩃rCjUl?7wAhz~shD\yަfpf{S1gwQ̗{a)f n&@pڏ]@o fgNyI"@xcvu_p'7/ p5?S-1UwFWԚ,ykɌn 6M4Zr sѾc-Bmfܝ3! u*c~\orh|gC%k ?6/{o釒헫a|op">]]>< wn>g-85U?wt7 ̗ ea)r񽹋G!̋>;^X򑊭&a|\ϗK1#Wcx[Iϸ;ؠɇOL+ѢcԜ|ϖ/9|":Ovư{d|{g㹟)xF\ݕS>?ƨ% ml뛠C >LJ{eƉ H,exHM P V\aX?P`wBP s,O•+!I.,~O#(4,kfRqHXPz7DvA|f*UI9dۋ^6Znr@my5>iIɋŪD 㣌-C pZ &+4jMjy}fA@u qѾ[PQWz٩w+z֪am[܍ ߿־!@B8x;o^ٷVkho\>VVNܥIF#HW,ۥ}mh-(+=_-7rh- D,*L( Qtݛ$-ѽصΚ ʮMж۰ TrӤO76|g^3TEy7zN˘GQYg5&*cyV2=۷#M%U{>_/{|c#eGMgJ]&1| ip9 ܿ8n! |U94LfFjxrVH8VDĄZ[Y56RcOnZS(6Cm{iWűw |(EMEG\ڳjJK?i N"+9H%T]q4ysc w8cLY=CzωMs~Xl H%p٭:vhP{ |Q]tHLOݿf9GSlg].]S7dO=5@]^nN]votXF>^Ը6f9GSB*Wض9ḳ֥֯o!{O\[Wn^ऄ~8d}n=XCD, k DmHIszX~Ü/6y;)ݎeG?ܹSt!}&5>ra0.pPî 7dɲ^`ig4dS?}a6/yф]mޖ[a?i{;v ߿oGZpB{<JbئmC;_wxMZL?{r  l:cO]1i?qZ%LW}JN|w$,!I~ ɏAB(k *Fa JSA=S>ϋ^:k}oF-EM'bM>~$l/] jEhQoq蚵v8z睤"cikJmzؔ]7h4ۓx$lz{Yt7;"R,;a lLc>Xvn]W?}V!xyqr:Q6ܫ4m/#Kuξ]};KIUu]4} ře]֞=YV!x 헥S֕f'N3q՚с:BYWv)Oٯ \68su]va}7s uBlL]̴bb']ןK7B$(\ um<|D]EfIL4B*C[R߼wF8b[tb$~5a?5M76n*jyM#Z'|q?^>íAwwzcY'cf*lD4 }5Er?q7G&}J\?'Ĕ]M&G i6"ZڳdF$b4h+TԻQOSӓ^9 #ECHƉ[ %2ѭAwwL2 iD`녘7v:t~4V]u:\~&ޥ~#?$xȠ;O&YG觩I/T-g=`KF~ZP,MҋUh;aUzϟk<ݵֆlSd(NN%CAI'3Hr<[NPLJLIɯL*qN2f4O~Ou´2 2Ϫ^jψ%ȞBj;}o6&tI/{0Ujy(eH %E5`h WE'>mhj;[F?# 5KlP͟Wi\HUAU@^k&{%Fs9. d\/<Q!P)*Bb.H7.(vGR nYy X"S׬FE.^ l-γ/g ʖ,B.+g沘'f իFRO%  eϲLu e=K(F,EYMߠDV_}^e,JK"kz4!kٮM6톯> ? ^֝&Vn7}H_.wc܁! 6ݸG+4zš/?Zo=JӡeMt郧)Uأ1&}-=|R}#Q&UAV3M*H()F8+- vtΫ5 )"L. 3REj罉\y5q#^>zzݸ7SJ7xn|ޟWIf|\ԧi^]_-E2eHRov;|ߟL[ 2=Mĭ{El2jk;㛂7.h6I"Ougg򒁱P`Saw?vgGR )Ui7pD0f>ySƔ'i~] i:hO7b?}Χn33\9[;߻zRvWz, ]=]5&R@3uUm;7,fsGiFVdZJ<G݉(b y}bB2C-␲r.-&"QX(StشV%f0GgbʛM@*j/4&wgQ޽C0웜`׃0"+f^BkYxOdNsXPEf=ffhyyMlJ6'< 񖮒7@.{oGj.Q>鲭oE./?G !ɶ hkծḾ6+k hIzQ"btU((yE|sR4W`%-FTxBX-[ 2ܚSJ:T4IK8SOq)[3yi}ުth\Q3>ř+] t&Wq6іث.k2 *>@)4 #D-MHz|:+:>ߨ\K̘J 4L<EKL‘NT8Rѳ݂~ |jUWt q^3x^@h$ 5s_vU:mekc5+]1:jKSxyi%"w^G(A]#C4zrƄ;A:TձDd 0uryy&E$]o)橓7" S Єy-m[zcǃG |᫇u[Uu<R s>$*p Lhf{ Qf%{?u*,Y^_"h+xs891E=g:u=($h=`vL0DG_@w@] b3M /XݰΥnG-ė.) -N#c yp8cĂ:Xͣa0=X:O@@[1ASWϚחÅ$U~sGi9)#-kʐ8X UXGrSt.#,Jȴދ}iSE|6<#RJ Y"Kv`h)Q=b ][K0E,ZJQywХ2@$;]˽ɘ*AP+u.3TeCn:jV"'76G9m,ۛeOޛx)<[14kW<R␫|Sr * ]d;4B8jkTtUمש8=.!`ɰ1tϸnv+q t?ʬ߾‹u ģj5+wx%yRtw̺ BWI>3\O6ז:fI?v3ė'YŻB{Z~ZAϢ*(#.)LjoO{:78ǎ<2eɬZ]ϠSd~Ӵ)l{="O_g0N},RﴏȐK_ޭc3q>k iT~Ӵ>JꗏHr^Aa,-{v"!tQ7\M r ,L*dvΊ}^ԁ3%-LYneUyI3K- 61~RSBo^R[_L7cԃ W̢t y>FJ{O|Vn5xϗ.G9|VzbAEEd{>K*irbJˎ'C`sic%?ROĺGB [Q[MAt«uBﯿbn7}Lgb_C0ʬ Pr};v-;qOI܈klޫW2q>ZէĞK3"3ROO>:뫞-Oh@8ߎz򗾌4';ߪB(.7exRGiU}ƻUoG='IEQi1Qdcl%'=?A^x;jHuzvʍϛz焧Utԋ[x^J~u ַW*[W.aRO/#2LصޘO;\MWmsSgfDIX9:-;#W稯4f}~z`3߯~rlyȿT΅?N7{iRmϞ/,A)1Lt-mV88LC2EyQVX| L?LaYݕLa~ }D@9l1Qk^ozľm&- uWs[eΔ~*2=YGW=v`4˾(7(P~():mM1/N.c,Se;nl(+E"".oOݺ7 ]}(o#ެԅt3ezEbHv-L}̎i<Á1`|۞㛃jsuseÒ=1&YBLG E_^+. Ym6plm,pXi}AdpbD!mC=Aya\,57y;. 7˨4V?.?=cLU o^m4iޜtȌ?VIgx|,|joNq`6%\ZʇtC[.]{j/0Bz~%}¼7ѿyv,C7ώ\:y 0_{*~GG笚Kgz;ƁҺ( л$aL>8w߂kvr_\8{o?FYc&~7ߝ;~^Šp[q͖rON^*z 語353`L>0wwrX՞DBBe^~42#\u8SLD,B;H(x=hx?Zkď_I#d:QΪv\KD`yǐww Zg"3w'{@@oLcc"q{WlY׏yi:zw?[>1Гb/zEE) ?M%79u]s if=Fߞ-ۓ4c[󰔡Sv̭ç.]|s^\XvcB~W\O;220e2_f!:hRqk8zឈ13Ϻ y1R6]ܿDL4$ƔWpmB- }S.BE]yڊɶvR,<0ܻP녻E3ZO]YѢc,d̸v?->._pՔY%sXog3ĢqlQ.Zb0y|_d,bꂲyq7PLDXzRiĦj'D ʉ)%&+-5Ȍք :Qb +|E8*@@@ǐy4!4EV* s$cXPrgvRH2¥ QyW2=@T,`uKjjHԡJ;7Eu/S@~raa`gw}Eu;ʱcO5X5P˿X}!g"MT4 g˯Onȴyfe̓El!L@e |ϖsOvԳ<pÍóż?V\;x-*'FAzRty=TV&Ee$<[|k,A'rxORN9b<[|k&M(-8""kqw"-,W];8 ).g1R ˾r.HCD+1DfT @ad崡U漺XR\Wb,!pȦ4K %]jr_" =dGP/]%^ J81TjuZB ɱD4gBzb|@^͇qi!֑6 .#8'MY$4%bp.=o16S̔YFR;FL*R+JZUERD k:v)WJ-IWU5.vҏEr Ke QUn,]iH@GcTջQ2đPSW54,MEEo4سB&fcxD<[*c;2,SA -q)e 陁+{DI@\(V "9Bs8?ٴvПx$7݁O1ԧEF,MX,U&J]VRSCܯΊ 8NFZ`qÉG|GCgDdTQywܭ9O̙D (McMT=(eJD @CvW8DKҎ* ̮*D\o[ cZG @mu 9ϫPu;,w8Ӳ 2A[#Px%ꖁW*I (t?6@ý^pIiEW2vDnjB5<|=A@1~JDӈ sKexY܅ut$FW2Dݙ1ԔP7qraYuF5QE++&ŒClGVS ҅ghbӐHN[ZC׀V5)4A DmV0%g.K5(Uy~:!b*=JHWߥ]Drq?@Gdgu!^?Bt֤cK@)W kC#bE(09V=m>(*N ]M"/<~hBq( 6Dm6DMVB2/-2}/]F#Ca|"U(xD!jkx!J ޼&KbN[Yֵ3o7^☆_ڤ:8>n֛͗☆VT!nswm4R5%2v=j+iWM\z[wm`epQ-;"K1xKPy;"]t vB`t[uw`X8q=\u9pܹ~n^7UƵ7hso:voD_qgpBU"Lm<xAQuPTNV'w'T,GD9"Gfu-cT Ft yjۿC^/ݟk;|7Nl)Hg]nM|iףw &F w޺iyݾyZ͟;{#W_ o>d 1qxATv{۳xεH-ފuz._6] ƼJ(/MFB{ss^Y>fYrHDvQrd JoVxLK{Gi-煃*!^25aH-uupȸC+Է^ekF4!R"= يqgHͬCM1o=WD>ѿ\۩h3 IDAT xS@Zw^m zub*Hy<7ֶj~@ƭO+~9ǭRIPPv5?G:yxxhWحk7=lP#o+! ,uֵg4AD愃]WjkEǩ3f/?#U}9dD;[dP@#=F5nuds`feeq^쫧w^x2ÐFF:>zߍ׷ޗ2O]W-^`0еv!5-3Ъi늈|Ao+9GtJ)AGC"tc^x1o.wziɇ}m;a TSoE9@%̍<8kƇk=ꥥFrT07wq{x.OV|*Њ=)5T m)U_}qǵ3}嫛WN9zGe/T}u.eYŘ @ lJę@#)w24fI:h)"1s(Q]!y#"r*C?f9ěQ(T @8?JH 33_'*,AL*F6[TKJ<+"I.|B{gٛۯmKlRTeC봨Zvcƽg~MU@;JI$h9JX wUKbo5[U`phl4[3R3ָ$yqؓjfΫb[* |WF 4B30=e,Kƻv%1hw!>('b6m^Djs)YGn:mÊMYw=%>:NW4y=!ޫyiǃFo| s[xsvpNWcJN{w8z+;?\4yte]|1r@i?q::>m#1eK\BLn}ֶgcy-NTjOn/hǗ;ĊȀ&'&%*RĝHuj5@r |b*o󈩜e%G$DQ)T`Xv'@PrǸJB0D7 o %e3b ?X΁9ݐh[tT$T[/憷nmAjińQH?Z+R7\YV!x[\Q]`gQL-Q#F/?o(,6~_iiq}yQ[=a'ݪ=z6' .@qG<8Էڰ D*on.Xhv_'2>{ Ye~]ׅ]Xo^9.|;wa}7}f!x{sD#B<"2.o]3oI?Vw5X  $U:#D4\aT6cKG:Td,4Aљ]gPNIDaWYQ-LO׮j/zy+˧E p1#kGV~ٷbq$%=>~]ny |*qb֨"CI+ͶxMÉ~r@*0@{~oNNϵ=5D+>\c512ގIFJ}{z6{3{usBid^-N="T*BX2Q _ UAQQ;(d܁"ﲽ(QKA@c2/g <XqAՉIT<-,hUQ2Jfvj åXxs>оZN7ƗH8/L|Z+;?(|^ZJdBXы83- BXXA5Ic8ҠȈN.F)}eZWi.ԪCs\^Sl O3E'vy/撘GiFJM;8="3"$yKH98="KgZ֨EQ9 +.غWp?TQs DcT9'iB"Hi\Pttl׶uv#qj感X}3zJ1~|6? ]8*K!=-=xZz:-HёW&eggW)24FDZT\(1=슀Cx-I' =p~ƢT>PIy;eY]B^G2"Ӻtp^ ͆%3EMć4cݳ 1˥M͊\D!o]6[XSeu y*dF]Ƶ=|'"7[#[Χ33g4-j{w ;VzͩPtx[sYr 6A>'Q+:Ro9!0$mJ(Oܱ [?/g$"!n;ua(i҄k[.FLiy eݑpwE6 "2# iU$Y!qc%ڳ3ޱ? 6F" QoO$ 1gR&JK0|QF!xzG. ڲ7fNFBK $ህP߭qϋ\4k{ ͨ.ۉQ?뺽oE.??\5~5Xk4l|:|N_gxTb-BX'Zq;CySٮ*1mb3+t(+!ثO#B :t!+`BDJq EwsѸz .73֟_ ?!ݱD8řtB4K^PYc=/j(z^5Շ9E,CGɏ^FI"]OSJ& AUb]HEpL[PQhvAA/Sb<#'B_맟b WF[ O5~O۴ݬr҅2ZB@c,L kl?AcANjvlbhC[Gwnyxۮ 3]ZSP,$-}b MQ)2W"J JTT%2&"T>)*z}-[OdY>#լ8']v_A[ Z6z[2S !{k]@ۢw֣?w<#bmt7࣪){eE/`ǡ:v~D!$>a"~HI&)mXwϐCa24@pn5y yFQ0m o.@iK8AFԏ$%Y=L2: 4GyKKWZ\Y"!1 /|0óNK"fk%W3<򷶳ETG6׷li]WRL)5%UHt9[f֣ί>(`_!|a=1 k.5qѤFn/v]{v{I.$$4  | ɯAhs+Evc8cޮ,{z:, f{Y6t`ϙD6լmG12/YNHI@ƍq 1W[NfGVu7S:PE"b*K#Cgd¨ 1D(Ƚ0u (bg^ũ3SUvˆ@dgRR3BNg'dLc*zYNSwߍ~Wƹ i %P4c53=E1tNJK,yg̀ai}Ld{{lg^J@sZ[kVv!u4Rمh|:n|㣨dPP@HEA@xE"*B`HG*B U:)4B3)O>&;{)yΞ;3Fzq֛ѕ^v*u2 @jy$!H#QYGLFRÈ: Ծ;T!J׻4xšÚvv%Tz;# _ R rq}I8? zEMfM 4r7&=G~K4OT xƿٵc40Q9ɇ8%%f m\)1#Ⱦ-ck=sd|k7]*q5_5 _e%rtSP56zxlz5R}-5b}8m7Kݗ-UZdPhܸso|kVnG$)03=בx/YQ}ZauzxQO׮ݢկah-]t8/Obc[tR r˭9Sگ?z=c2&]ޣUp%gt{/5jim;O^]vg%k 8qPGj7nCkNaփ_pl_710JRVO׮ӢkdYDKn\;ǭ\_޹^grpn Ҳts'+\$T'TXS=t %5&bbn< bI|JOLhyR"G ;Dބ~C EBm}K^DضI\ E(3e=d)\8ئm;r N hܷJ][&喚7 #5xO#@YfBf\3Aw6hĠE.@++|6iߴY=qĒRR:B@$,|6iTŠk&\~`<|k!,l f.u$ȻfQR Y7O=w=Z?tfyd>qed,>`2JPFP#g|FN?~ ̑3ǹ_ޞ0ur]ܔ?m ^Mƶ?c$NqQ{WBET"o $j%!%(H{~ #,d;8qԊ+vPRABev\@oΒm/ey繲 6|'(Hۖ0#w :A=9n?xwyNzsdMYf0nټ$T(u@_ǩY_^1z\1|ےׯ/IiJ/=.u_' _ni Tf*U QcLIfV0j{+~C*|GM+.0O  ̗L+KPTA$麪#wIcU+^+pm+ 47GpƄZ" 0P4 RtO&]5;RnL%QyN*Q#: N@nIq]a&L]96yRjc@q fUOBS(% 3G+%ϟ忙U,<0+zNn0`" #6,~r[<Se+D!E^{oE-fK 4v5:GQb~7p\xы-4giPჷDQt zf@f #J ڌfH3]4"y1E63JXL/DE6UƬSƅHCgEו \u$=Α|Ӌ*b22W6 J:]Ha 2|y0L]D5j8jlK6nfGr'Г`yKu8R]C-SPhk"~UF[z ,M8_ЬB&PuS rA {BQ\a`"ڲyT2<+rb꒩b$2v V,JLz}N BUWz纁z\+@#r>hBd+Fm#@!ŅL෶0BLH=[&^RɔGk{m=mhpܔ+ҦjU3= UlVQ""?WXeϋL&cVsd>#9 h:?;ʿ&gkR N(3b >1HJ{X5f싡43>xˍ6XU=2"^Z!{y G}d 0NCDcIDѹP{h{u Ż=MGzQa~}IҵDf!ѣ`ׄk`bzV/rOuR\f v2$:)@VKU1 $Gm?y}ҭQ(lbAq LYZ " %H T A]< WE" ^SV@,9[!(}\EɌX(LjN(U4:Q&Aүom>0k} =E-,mD4:Qμq3? Dǃ x~ *7+t4frPh &A P2"gAkJH(pxƢ LTÍ4ȮV`Du* GC,Ⅴ8̡s z:*b= ;% @w?#2p[ &MJ^"}>m|6yKו$sCҁ}",h"e Iވē߿}, ?ά1^*b@%3G@BNq_.>(7Hآ bn6q`UUFh.rWbpֈӦtk;ʞy3o_|ƝḊzGwӆP\)3mj{A6{`|y{O,mI3o_|զ]n3mK왡&ͺ }O}Qv>3tٷ])Q*D|kn# r{wM q*ʑEŻfϺhXF̚p+ςt8,"PT(bWsK5ߌϺ轾;J9{r­ 2l9H*lc;FS=EP|4ӷک9/leFwxogߖſpDl_ ~E,J~wCY%|E#ns ++ R\t$TL5q=E"9QR'rrGǬLjڅ=e rx l#U;A瀊 `HXM[[B-_m|7Rf+ԧ/|ńH+mՐ "`kq*eM' J\p ^85eGNUƻʯ_: /XpY q]'/tϤW~ʣ4H`W,thoM+? ^:e/<鮽IL^0dx#lծ*\TDR9^]BlG6B?~ZUό|:'!9g/Xj٣% c}j=~}fdNu|{<;}{̭UVOK?jQ];%}RZU3W܌zS?&?jvZ=?~9uނSh˻|ٳϝ9 ʎ:SFU=8HrVnGTeK`NZlΏ3KMM^5}ndwP#fcrSKg.ۗr1ݻFz6nÝicτ'^>i5O1ߝ.=caC->\o6U,>ێ6{_:C}_`cmq='*WohٶhONꅂeyYz#rwuoҦ |_8# \[Bwڷk/;0?~q^=WQsF7 FzY^[.זs<ݼuvIJ™$%Q"&0] ~Isק_6 /eC?w7K܈(&j{ʣ͢-*ԩ4ޏED m^xH4 X`n%]z-SlqZ\׏drڰNG8Jd.y_}{on׸- ~GkHHu8|{el]Ź-x<ImZ%DDaX8lr e;գR:/nmߴ#"U*A]Οw4kl>dX499O\z}uɨy4 C^譶>.sH%;MAF|Yw܄9=c9|Λm}G?](U5&~^yPeyelc}$^OALo+T\򧰽 p3NlX3"^ ]-}9'KKIAFbwcI1b̙W(ˆ"dO)((x\+@=O2y!!EFYܛYm! Jv0`Tkc- " 6xV er9LR)R.d5Z㉙G RHҍ{^*I=8r -OKPx0 0ێ:CpxEM_q=Qd'5}CpxEЎE7ZtҪ%oXWaP2@?P>oZ}YUaУ_{c\^TXBդlW5F:N|۽w.oнɹ֝zy ukH~տ6K8ۮ{ RG݈N[*rm[e\`38Ot{nqss6|Ւ[dIz~Jwqќox:"vP[#6 D`(-}nΦ-_/qɿ8.q me; B œ_mKr31`nkT]MV}w>zm:p!ۯ!)FQUr!޷Wv}1ܥ)G*CjMr1/諭; @$͙rA*ʿt(J@~}'}?[.{%]wS>׾{cY?[0;qwWmE7:r匙ؖYF@]~?skOn_5_l6,wU궔;"eqUjuLE=!R*=C5a3rrJӐEa=TIʪԅ,NwK^QJ._2'ߜeCF C$bc:-$PícQz&T.H- &c]A ʉIAQ9"Z2- qUuL՛αKv[{3³y?Sߒ*~͌BcR $?xv[;s<9Ǐg(~ڜ6 t\5u sofB]]~*hIb78T^ [V)X3.í{38,@/} -Ѧ.OT}]6I'`Żo3Zw則_zEK{6#|)ߴ©RDEJ/t8]>,%Wz)v]Jw! +u"6tJՍH9r^ vM⫿ym{fO?zkAӎ Ek/+d/v^=J q2pj{QnM(;1Ly}|߂;JJluW1\f†TP=6C\+EMymTƄj\(T07A+刼yK`>z^f֩Mc~̴4u<@gs}DPVtT]sKSAl@3v$"z%/2(+:w*Tm mY ߓ*F&~?t4q]Z.3v8 Q7!cj#"Q n{7RVhP8ȕb>RD熑c׊(o>`:bVڇ( D7D2сDmm\RC N5E,#^F̑@b[rg ,@,!\qw_N҉jU4`$$cK+8[&OeꂴCY!2y! ;$Mx`qM.^ 1=\wO=uf n:xG' lE)]ۥS<dlA&9:aзg = o@=v)"o_̓ZU,;-.k&"; H 4+ӄ3WנCI$y# "rT: Orȳe-jJo_<⡍Vlˌm] WVRӁ-*b8>\9I:O[ U<ڭ{cv?y?yyІ< OT6O=oSXa@fN(@뒝wN ׼s?B~ N0R(qg}w|pėr$)Sg{%TI/'պ[ӊܤ³w|{6Ra8w֙>e}Еns/?k3|+ nWZ|n~Wlq6krjͤ4 T#zr!X&Ųlun4SvU:h)tE 32IJ=ꫫk#xoG(;"Zջ}II.R+ s&D-Cјl"Ox,$ܮ@#0֋!/*_Ubr_T+Y9 &f0;fNʽO8{<E |/}RVeJϑA r5gD5dzi^ ` kZ?8ԅ|R{X$ԷX*H;PyUDi<:d*e{~94i LWxL%/ \2)(0,)}姝 EV9ӝv}[JD"(TPpZqhZA^0ۍ;ʿr843@KB !H@r\E~ԫZ_w䧞,ܹU瞺oԓ]cVs.p[D@(H;XYwsO]@VZXuq~q]r䧝x;I\pwxW~{ާg>=џp!>}׵~uu~mTH$`r xy5kk?z&W$F7.}U @xfdpeW>kĝ&n ;ܮѦcÛ7oױMTޱy{jq-~x?w=gΠA5[4{SRɪ%*ӿ~Ǘ\lX@\߹]}e 2kPxwV PdKI}aU | -9J`&PQc ,~")ϗ~q >,`b$5̒HysIX DI*dx#'͖J2~Jz"ōwxYX¦GoV`ݭ+.?4 bE$u^#=ۢרծ&nT"t~[^9hsW^[/~z-7l̪9xT&CQ]fs_^\#8/qcvUamOn:|5fzon (@>ނX%h|s(ˢ6kbЈ6vJ}[֪#Une:kfiqݢr:t.D<nN̨sDbx}D|k7],v[L֚]eWkyMMk2ѧELt#]m"KפѧeLv5q{n[;տ-cuDe7SSSSSҮޱSIwK;mk6 %s IDATÛOLJRVϨVk5f`˫_,̑lc4t*I[:jQ]E1k\^# ;{gO#4~G.7=u= NMnC,:f罦#{QTdNF6L5__aiZVfpUՋWW?.aˍYvŇS%GNOK Os~" Ym^lKʋ2jٳB%f6ƒJzNxE?$ջ;یhk̳d>:2Gu|!Kiڛ3mT,4j[.ݞֶyw[2`Od t'km%$zk9 kB:v bX,~1O=7-ygVO,{Q;$n- ԓ +߿qQ_%̚#e({3_:C:~QWVYNjKR91w}-q\w 'owu$u !;yʏ&lV 4yqlLhݓ3F7K #Kr|ӏu~1oi~:NO9~U]GBu-}`,fP/,13 B˵#f-`;ۤ+k~|@A @#k?}oٹF`#"]O&l%\+]M`Ø& K5F.\B`bGG%G6w)6w*ԬwJQ 4]ek%j~V.$eW>y̼޶u6w|'d¶.=.ly?e;z(_l_;e=}^>p R繲.1EǦɸ+~ m þ8j6-?wNzsTC'/{3lSl^S i8Z#hkbn?BIKe}5Nj5uC[/gcso[Q@SZF&O3F"^ANGYҠ2r [h,k Wy2R;** 4? R'Ey6(^AZpMPTèD*|;(;tWԡ+Ҋ!;JLHq6ʶ%HW&A46Af\5 b8An.\ҨG4 Sd\Inb"*(ǂRjґV_VPПd{(QRpdk5M{>'MP?dN lW`3I#jTJof#t0c(؃9Ʀ>jrȈzkaeҦ' ZPPh< S萹sK("D)۰jiiTz&<0>$r{QR74嗵n>XWFcH`VPSߏ/X E }A%w,5eq@1}UU=w--1Eoоp "{*B2'DYR1"iǃcz) Il:4dUF 2EzUC\n4ȸ- YB QWjF-)[sl5cj ҡD*dT<K T 0όL1C ʥ2A Lc3(4\3Ǭمogz(DZǯ# hm}?^0*0YTVd> ^ph@G2N̦AǤzY4d!=bHԜhÃ3%HL]~ֈF≾G$\X8FPMR~5b%W7'dଦ,ҍj'4cV/{jI5 S:KzJJ=DF?ő  @Bq&ܞ2k:RU$2=>I&^y Pqlj*(D8[tJz"C|$eEQg>!zMШZs!$IHwiPi?brGd[^(@B~ Ui}OK%k$4,L@PyT`°\B _'u{hF]U͆ 0` 9SPX #R:b|ɀ"VYa!7 ;/Pp'18 ZhfVnjkPq{yAmGy*Ycum %BS!5(}#@9 f\SA=_O p6OsG @ߪN3=EZޙz2LWT]Vv0%h6tf|ԧ替l=]R_V<%\1$J3@A'8Ft䏃r#W.wp$ocI݅dnFi9I-]޸@%:$#_['و,Dn=@U- %g{C@.]#%2bgSkA}3-.13SV*ay߷u?qCWZ޾=P|. kӨM4gǎ?ɜ $hK~9`6BzOD 7Ȇڐ\SpM҃g' 7NJ>nɇ"/b?F> hhR2}pF "F'.qQ^{?LJ#z2ٗ|4)̶AyrUEҔ4-\` [9{9H%ێ,Ǹy@psTBd܇˕BbmvIk6ªtCDЧaˡ?:{9pOp8?r]p@]؅SNٸl\+Ɍlf}nnhG,|`-4?yS>C(//1Q)Wn=z dG}5mI9p$eq#}~A#N~wSNٰl\H|Bq3)mWQ MG̒0N^5oMZVNO^G>">6  :t,,{j "S_6]ɚF,?\ ll. dWu8T2I 5n0enԳo`ϒ0~*wdpnrRE]@l: O=>FZ_-0eӱD{QC9 sjOD9L:zB_!lZF$,Ն/^ɭjD[(e.U&וCɔBmyءRux ;~>㦩?T@r*~#k;3>}پvX^4i΀2{ȚHziPF>e񽇮q:K>5[?wY9G+eo8@IM ~Eg6/Pw} 6-| gKn}O}ɶad]!V5͞6ʾī~5$SiߺM^nLi7㳮w~-49a`Rq|ׂΓrw͋>XT+0@?H3UG`A@-Eiog]k|wuAs/:",LŒ*S;"C~*&+ԛ}T=xeE*n'% Y7{hW#bרvA%Pn W40/*j>Jcy,#Lc Si4 ߞLMh\$AԜl6pwZm3IdT˖5؋-^.W_R3P{l~\/;H+ uo*4BZ:7 m}=WD9|pƵsG\Z9+g.OJMM^9cn7+̟7Y l'ӫrWZj抛5_\ǗX2ͱs~ܺkMRPս _pΜ?ʎtw.7s"9V;W.?w¹] x1ǑRn5_1{~)azݧ.zt-h{zݦ.ߚt},r4iߊa>Ϳس?h,"feA!ɨWUjQ v=&wլRSWXYk> MHm:|_w8g ߈|;we̷v?\/5ntRO+(4jht#6Ǚ]JMv_u}^/c(qa8T'%LAWkrVZj1:N"&3^˟Fh2vǶYOsY6'l3IW?]DZW[l9ow-G>iAovu?@> 2qcn^޿"rSGu|虁/Z-ڝ]VYH+t.iqป F;ꅷ툏<|ݛ6+Jxxh1շvg~>u!:OULz)%%rF7,4d@DhFb? )S5U_nF(t|E5*^&.<78GtywWՈ;Y{%{&ƕKk<9q'2L1K&GvpT )$&m6~cJ k7ZtM=+L~X:!`e "n唍b1=FuB,R҇tzy_vV~{[BZ~=/^TTr>'%_*uFvC^>.; _vu7 Fl<*旾zj<*&@ei߽V~˱-z"wg;bzħ"YGG{!2;uv,bHj`lE,&r-虻ajz[z'(w @p r(Ah-%og qc1=߼wk06{~ "spIaVE]T.!u}3]r6?Q`QwR N0sJ^?x:V ( &t *&rh`E?=fcŵBueA2UO Ykwg*˓9j-PVRNzXAgvPcNg EV?(y -" b̩WHʲlWo(xм15y >ZOf%Gpm+Vn1ix*0, sumKr!8y1PN-AaPs/m;T  7Ee%ص;߶%9arNe~ln]7@zuuWʠޘKO۞@*L=[it D^5}! [/{U~vM8H*rW lnuVyr`Wf>~ɍsU `vⴅWmE׏:|̽kv1M+C~_OK =79ri/< %amUp% W()n: nIB @C-jjN  oC^"ϓ]XRuZ%J+jc8SAB܏P]րX@05izke;s2AαKv[{wx4;KHjW7n^.p:"e+ T1QIgwViP#]PRYIZF#]u޻q)"8& 0,^ A~CZxy|hTrc" Q\|?k[ TGxl#@J .WA㫑kY4` kV?8ԅ| ?i*8M98Sgm^5sO]K#sgv>Oߺ^~m s0~y]}e'? ĠP )uf+WfsO]wP~zOTE@t_K$5jUHE jT&C\!_uqf:K/VlJ5NNP-KcLƤA=v6 :esr@F;79iZAs;$dYԜ{3I~=t=ZX #.iO}+Fy姝Sɛ w M^zxĩsKn|."S@0It<!"}hBIa@*1?%|Tš :m1&b ;m'`"vx8B/fƐ,ha(0 ,x3ɣOU>- )xv6PAE:? ވku9.A~ n_F;eY1Bp2b(V_@ WYwJ4x_-4'HV#qe ^$u>⟮]e1j\YR!+DP`WOm36N=ӱ[=5.3F.DuU&\^\zj[>44~Ћ~Ά֮_^C>_N\}Q]g}|NHݸ C@;]AA5l Oy/7|{#v%,D(:RH:ȶQAV_o h؍čJdLA)${QFhsaVk5f`˫_,Qͥu |r܂IlG8տU:-{XJmi>jk̀l$Z>5__qiھr;:qj^Vtg\Zxzͩ'0‘-n4ƥҙ~ٹAIV&k#+Zވf nX{dj>kt~ vv;gn\k3޴K{ IKVPx&qgqC_jѰ{Ûv%,ЌN}?OpҵEOM0#QQ=s̴4UZXcQRNP*8ڦmkٻ{ٖju9jq5(~CV>Uf\7F<pr\k}{,Za뱾Upۑbk9f@+k6\*Q5ٚ@Қ ӎ+'ǘ C(ZJCڹy> FJ-jsD,ߘopTdeunG oq0X؆HĒ>=e!LdDPU)"NK_}3!muH^{Rlj(GN=V `ܒmR߂"d& Ofbnf Lr'+T~eŘqa-K/(1 JЃ2|6i\xF,ͰcPS]'.Uo_~|;no! +^5ky/8|(P[G2`|i#ѻ+~ ?}rAwM1:UG>ht0i2@݅˔iLXawaޞxl<:dz Wg\n/[U|Á l[0߿Qs];\4lbzwgUeTo@Dvpq T3³L^T~ 镆\!E<1쀴PvTf"kV =8YHsFJ ~Ȇopfc5z UMQCQ!H]@;p3Q /ԀV8F@4*qѬd6kx&]ѮLh'#UD $%1W!n9 z! kCM}`]k9T!?\PC~qL+%)8c_SfʼXF jxdFbDȐgbDuK#"1oJԁMǮQkΫC6XS%w~mRCyM$c=wՈz;B 8",0Z619QEMKowJ#*Fg,AѲIK=iD=P}̕󺗗NNw*8gQеQlG(a< kZ5Qe!kݠ Jw$1NIҴDa&Id K> n96u`*kF IEёDf+Ĺ]wD">na%'ƺyBsuĎ AtC[ŵ/+ҋ6Cm^Q -UGeiyIDD'jc a/8'\G5^Qm ''2 kaO6T*+ޗ:+~VE y)"܈Mh[<Tm1ARfS4co1Ǻ0ar%+_ :QSLf;-.hz%6M$\e$hd [7 +.\$ٕ7:EH(K#H ].hRRA/SCLwv,0s,\+g$98":]β2W?\w>U8ќfÌ@:&AQsVcH5\. L7A jݤzg@`TvbܭBP͋I?(e й2d8 DPșBMȳB*R ]DO $ paŨ)I.p׵.2HjMilWE#ad(eM$IY,sPtENt|&^s7"'2,ˬ)V",i GE2ū HI`kaT;dba9R@ǩєa"*pr@!p#?V=Y*d8{ܾŵ__qʸ Lw6!lt !X NEEЁ@'}^`0(N+RL>Ȝ*KD }u꣍]F<،"j6d#cr }e>ې{q}I-:]ؤ~> _LC6-.elݔj|,eOz3Ob$U),$cɹYzJ"J-SqPUh(2ɩVFG=Lo)zUd$PTbíMuE "͠I_mkV̛8S-:)y,{DcS{h2{}?~"v Ft:ƣtJ7Wi4cn^:w:pOI7=OGW>x./6e[JZN쒼Uo>=@!PɹE@ŧ޾^+:+L_d1o͆*j.I4F5Rw<\hUc<9{O7:s7Vw)dw5Cm0Ș;M!9Q,H0oBϚ)S/mM g&wbrtXe_W6H0ӞIY]v軣'E zL?tΛ;R+ݔT)2!))K}wt}> t^8.mcPQWzmzd_:dK8/^5>e/bC@;_4hӑ{ڕ_K}V6YN̕o}S*N*)њ"@o}cWy֒˯%+ }3u$|D}7\;e0#b[<ا柩K*.-X ]_1 qf[3+􉠨oCK:hr1I@L;b'i+HHShH˞FF9uh5K ʀPB N/da $3eq̀!w*Q! lIU:,3"dd~Yxc[e@G~][z<"66t}YW~j'ݗ+2iﯻO=euԜ M {g_ӢF_^o loE퇞||m']?eٛgM}W:ѧ:ZwiW^ܩI+Ԕ;"z8=s$q(8}Ơn<֓&_*9{x[pCJ@k'~ڴmyv ?G.G+MPk;swh=g Y]ߥzyDv`'֞_4Y/?zG*X|_9}wqIwMΗD۷RW"gכS~7,/_|wteuρeoy{Rn`' $_iU뫟48| ۦ1^ů> PzkU/Ő=LDK=ĊbǪjTWIQ`᪮lh8XV%T ^` #,1"H ;h>,^AR+ r `ؐWb1&[*(/x횙Q٫x`xX[ IDATHSPPVC ukax ^@a"o {*\0 O\]orrΜK%Ҷ6# Ql"toiI}ꦯU5jt[{\b;W|KVmڲbT`cSQv|E%s?tFp?dz)cשO\('# 4Rq4T'JK#P$gSw7o0Ջ#Q oV?+=B..x ᪾˳KϰQhj#j ;^DE6z+ƭjߓ~8k.Mڄ\PLE[7@+֢g]V50?񊦕XL_tfFy4㴤S麞`÷~LTW;mkm|jΜyB a+_4+x۟xE*h~UT9zdz;8 ";CaNz<9g/AJ.w?;Dunqa-u }'ggL~[^i;wGusqr\En7#o'e|{?hϹ6'tQBe bQ%2w/M8hqibBC qg0h35e!4O Q"t/Rh>$ dkauY@DB8J˝ťg'm3=f,&;Qhw~뜡)) fsxo4Q/Y,JI0ogqDM730~ǣD7x\]c}<OBѵ;=b!MMx&W8O~AK߿ Vtl)*]x}|nK I|zT>9ѻkΔr_OKOܿ74ޢ֖ޙҵg'#LInbp)f-xMGEyǶI?Y{ybM$ѷePLn}t@GJ[c|yo 8ưZ~ٱ\uϵPAYۙ}{G%=:%;GVΈիO*4yEnJĬF=G˛R`39cǎj'1S8  C$K#eT^]r@Cr|uV`n;ʀxBE <kЪ]BN y r2OdIpY&zgi7^o}嚋< ehr2Odk]PF{bXA(-&QG$ڻ}Dҁ q<ғ?Ի'F~aohQj.xQ*s,dff2i*'*ss2Os*sQAzWX0ݼoHXdI_@2FꑶoPzْAT\)j7շrƯ9BV}4D:!9 QW.2PӄqEp[t,BqMqMb&Y(PZ+$MŢpX(HfK-Ⱥ@}kǤ|7Z4Qʈ,."/ [\+iޚ@]\}F vb6wxrɦƤ֣DBsG= -|_K; %,AS&5# Dnk~ tS%B3QtxћuZ륀(x.܌bk~Q7v/l1HG;T}#Σryu`s)@m/jDŽL /Υ㒐ܦ4E h$& x. LʚHLAQ C\F[g疊Gz-=7m޴_\>Ii,rY~{f >7 2$OCHQB".|l@RdṞPWD'cȉ7 6Q@(3Ԅ{gOK6r\W}zrUe@OY"UhǸ?VojҽYq|{}qQ++f*@୚Te*32F:5"E[8Ӽ̱3/޴`yʎհJ$kXyj֩S#k<,o}wߗÑُe7QuZ2ÒM/ؔS%%Y엥(Ǔ?՚5 bc6^t@L< =YE,X/W]Ⱥ^Va㊃&—tS}tTB`ǿ_S3 [U?#{X򳎟JQz eOP2{u-7U?v LED\ڵjGTFc^]KD~?iTn]k[| E׬]f|0%E(y3A_\tdn)x.ʂ @-/McϹ{ցb"z܃;u-@h+>>Pw̅KgڳaI/ ~ja7 =-eub=ڗՂ̽%B /%mַG3?\BzS^"U:8+%QhfX2;o+H.W+$h!Uu<.ǐb Ѹd+ͥ8U&#T$& q$@b^Dh*/#B |E0U Ey!큌ܻ "l4lrS_ڻ@MeS_yi{\ON35>E ?gܩyiz8~#y6Vkp~⣍fxGZNn2S.8o J#jnرD~t)./ʮ{-9k){?\u=ϵmZ55}i~ W\!͎qTZe ;TE3{ ~1eߔէ\&l9id|6qϴ^~7^k'+“ZۡC^Zxg'-?PsLnP%E>fq.rvZ!oU>=GgPˇps`U)(>u(sm7۴:8s{J&ݖ,n.ܿdOٖjdo>6|fiz=fMB}.e[ qy<0=o"4ou^A= /Lm&p׼ܰcfAt}^hVyX^i7rP/8?{!qodvTDQ9_]rTKv~̾5 yQN{>ZןSE[xu鱀Yq Q+(m{G~0/ȁpFQɩoKR=>wڡRiotnCym_|W rL}͌sm }Uп?M7[xsGd;4QRLTy^ŇgJbyq &wd,<~ڿfmYv%!bG=w5tơB1럝y(Or^7Uk]b5V1/Sz{-%w|kKf qHk*ZcvV1YEDw4+$T^1g?9?սw5Y-9 ۃygL)>G>Y$9" 'N_+8d g7+y7q1S5^JWEZZq`_eX]b.>D_YD+?DUyj]F+V1 ,/&52M幣C]Êc4k #9 uq3NtLC`lE<ޤLJiՠ/1|"6YFMycJ(eB]j?{y59-U"czdC~P( IDUA1g'!:.*HLLc%sRK'!ķ>c<^%@a`9u+dܕgP8A+v9. WUX-C -mh"%~C\nMe@BN¸FΡZ"{FO;FBJoLl# PFxzk/)*"6~9tzU=$dqp5BUAtw9ќ0EJO7ґ('zڐ^,AT-B.Jww6idC?:LK2!Biwpt45zl71>g~>Subtuf!%IN"CQǞ "eP^Ghhkb:F3gG(?ppy,U~\y݌170bK0sk A U`dH7SH5^q5NBGjfFxƕTbX0++D$ 51+݇hks& 2)CJm1dIR"QCP휭pˌ5}3M\PIf]oJvGaBs@N'vd*PDQh,)emNT.ZY2ӏ*aͰGGea+RȅAHʁb66Q/$"GL$y%/-Dtdbm1/AUT/ Q=Gl)dU,0lu zģX*V5a.J48Hj2L7 EOW!N5w'$LAnP/"t0QSd;X9EH ֥5B'-OqX[&D)IP/_I&C|c3+N01ƈJ YXd4$a6Pǚ [Qkՠ{L2WLCpMx ܦ.!G5+ ľ Ya<l$2< ױ U%`-(R! aYߑPDrS/nMD@/\0 26sk@ʛTX6\S•~Vp:~+<1lm2%cK^i d,l+τ&L>ʎʰRlf2V9l_i%XaT#0VX !rlceC;E> 0J(|GnM*AiUI6@w6.C1vEx:("DVIZ{D6 +(h~8)2R) >$ jZG+5'li 7m"{~~ "FKDa ~ʍZ=K*i?ϞrQ;D LX[ ]fi'J9s71EA6orw \´)"bJNٶ3E>lx klG.W)kZ4Ek,сP@x㲡4CXV[k:bw{=9j OĘo6=͞PV.Ddc4{r|Zjl +x"A/G94Dyn}Ҷna˷&kNЬ-p `Q Rݾx6el]:ueDfDtØg:jB9x#36~FʀADv͌f7Q{[ ΐmĊ֘Ly IDATw2S} e(j: [2|C]yEh3(uO6lپzżucԲytz:;H Z>뷤/9}]/ٿ{d[x/7lپjgOVg0i8Gyp0ӥ7/R$/9B]C[ZVr:/9: %R'~*hDURV?)qFGmZ9SҵQEږ;I3er%R`,n;kԓ]M^ RѶUBvf%r72mB~7K_`=cH\ D} zbNr7Y-!p\/30$ߏ2ɘSF/<Y[/D@շ1Fݙד L)\[O ?磽FC ADg!xU!Pȃ+0gY@L]-NC/m7-YtߞO|eLF>BcC e›tJ'<&u`CoE?!I@ t]__ '~okQ #VHi#J@lƃ6W`C^ztn){ؕEK8{~/گΣ' l-@ˮlp;4x`a?['!3QEH0x0C~j^nѩd94΅C~jI6;~Q뮷z}z{S :ZLh2]mW?e¸E=dIYmb(=MDwjπ-!FO ʲ`B-C9+\aRB f廅vD\WkN%uc)r]Cl»pS柎QⳞӷn~ѵhP(nC>CgHcm ӔPud䈻NS͝`wRhf8Dg M@O!&.0/ 2uY.Ȧ=#D3&uٓnuX>6U"%I?ϬYedzRHHb9N8>_{HݙKiUa"`F5;8o3~HVI`ן[12vlsk|}m{ Un<ӷI^?mߘǹt<ɏ۱q%Z_1}ƭ_Y##([4˅JңQΜf`Ӝ N4KPeGx.jy9K,c:u}lyd3w({{ߟY'tD\5ZUǹX;Gtvwƹ1٠K<" Mw Wvo3YHzun%9ъk5Da<t,#>t *RsJhBOv9RkP .O{>:W$mD]-n|f!h~@"e1bE@5y/g$ Edʠ?|1S`B47!\DO|.HkOk?+0 5Lpˀ8lW#9e嚏Q퇄zm_6dS7 8#Ƿ8Yۼ1S_?tm2 y[cv Bf!]hn(+8wT>#5= {?՞j>٫]XL!s?\j~HqfTc;>\z5 s2']8ys#|a]/ܘMgPlv?cP -bICj{'>=^ƺIqy~Ώ1Ă<{XFr]2ԻL|dOYA#fMl|A%%zI`ւo'OTv@WQ:~&G:֋(<ocb߾+5X螟>kQ譫^sukޝzѽ?}:bH8RlFEft(&JA $\~l$V!OIˉm`!6ҝVX) 7NjӨ˹6デِVѓ(dՈ5bQ hXPT&OP׹>@U6<lY\ؑOa9i]Ϻur0Ъ5Qy^<eg5+"OKJQ,0說ﱎeƃq?}=oqZW!\M~" !ElGpQ'BD$U4~9d -'g PT\et׾Z͓cי"(jQGCޤ6f?V@] 2}!#A_ɑw^R&z͓xq,ɋVl(k q&2,YM$YcC' 5VY<nx0P89|!~طho^PJ "%$0-*-+s-1 P-6?27\WTL_ b#UKE灼,?%ƞ]7*e`t;Ș?4vxF_GOVn8E޲FINF EtQfBGiu Ix=@jP/Ҥ*$?B9,(Q\clDNSU2bŧn^w93`C7}uaiY%4JѢq6RnPl=`@sճ0ƹà @Hn7fm=$ |"n7y]}1eYu@rW]RϽ5]+ǀKzYT܈P탧'=jCLٟ"_'@|ƹU8ٶP{=f;3g&?rȁC6:S JK=xS%2+ZeBnzXfYWWNLM"ND48LI~%`=8yS9. &DŽm\ݲe/VԬQHycqp2QY*^ɐ9"%%4JDOK͢н*'y-kU ;I3Wdr$PZN3x A帶ZFUBnd.O.RE;u-"Ff 9='.&DWUR:2ш=*&!W mf0YvlKʚ?OAf=E G btfCzIe51$XjI䂉\ olSC'ل  @~։s[9 8wq{u`sX(32F5#-+:4(~">Q}L>2f5Jx|q1F -J @S2ݢ_*׉3˓?y$O.eߺt'䆼<ӢEUoEѷvu -d,$b=W%~6Fz,5Pdq׎k}YrӫzҳK$RQFLP^%%>\_,X`x|{|>oѴ}2ycrBWXt`C>rck{#6w >ҬuǪ܀ֽ^ߍ@%&~.8-z~M_Oʍ"[ Z NQS!&\<~ߍ38>uω}{Ytŧeyon|DEg.:k=tKӺu[[CG n* !=kw&}^F\xW·n a32;}?0#n&WIІw[c,XîVƶ{,?BVJɅ}Ufxxj[0B11LYiWZ <Œ(#upZHi_3?NPU=% 3O((Uv &kcvd8Am5|p~%nֶsDoo;gx=!iƍvs]WdmR >FUYsj*\ņ1@ah/LُxN5Գ3@c[My~5cvpވ_>9 (_Ims3S%pQ~Qo١<*Ώ :nddսL9eͿ*jj8?5_R>ڟY?O~o~?b9[p* Zs1;6w䫹*L סK sqmƩ|vlCKh]F Hz>f\U%U`;;Q&ލҼOgMx}jeL)TL0E =ƩgB]~2?H׬KU]RF)mt2|lѝ*#i$p)]MoA1٤v$>D[V_y0 Rjqb0vjc!*u&j OT!3`_r@;v! r隘/H /bz(O $lZpdeXftB`jYdNp@QGh&(ODM%_>D̨T~)M=fv /ם(>4#Pi!V?]+u4HʘSP&j'Sy!(odC oti&Q@AE3Wܗ*k `;3Pۓ, 5ZD6[A#ЁD\Uui l&wM *y[s+twK,j43@.6M*i]` k.ˉEn,h{ €,N<٨ H$@dV] dFœNU\jSʢ^b^LV@ӏxN *%$H‹A%4@sB90\Pyn/rUܾ%OGAd)LQDZ+ *E\RI3Zd܉Ն2-D.'7U˞ꠧLrvh[8A@-n1 "kk@Ǿ3y@r# 3Ցol. HA1琨\T\#G2X6;E\'En4;hR*JG+=+뱭\*m~YkšfQ? BZj[]';f);$~ 9ڋp% (p5h&ҵfd4KD߄13 U+@GVu!'WoD. 9+$z0뫚bd(ʺ?? We]aSfO{DNY!WdM$t C*SI'AsHrlc=Dؾ F/>e-j` j3 -qRl4(?mBj YV؀L,`Y&u[7nٺdFCa1D1PVH;FP@Dvæ[.}S_#9F "a+_^QGo|_Xy- ꎅ\G0[Yu0+"S28=>-}u:tifԾ#*IaDOꧭ7o[wuu2x#ԘK0%[֧mY4}D𹶓a'KK۲pu}q^og_e]֙y>'bo|o~^)c]چ>{DHv.^a뺴uLyQ|ptc'i i YIh$wZE$}Ě!7 `hκARaQi?%[mڲpڈI>9&c"|bp>qƚ蝬ANuyw[~"dSj ]h]1=X PA%u${5҃i$+ 2=!#:q P6 .'GwP$f.(d$MZnbe 0I+3 ,bQK~㡗 yf~IA٠{;4x`IWZK,au~D;~lעpQ4͌^c׏ؿ#ccw.Iz4C~/ӃxrܚίOy@ڨ]s>gRW5$қf' 3`T&d RݡϽIg,0Oj:xxUd>x&.+9%I/ RnMwçRq~65^! MvWA1{?X ^O/w=i@(DkaH>Ӓb+4 ]IŒ]JUu呅B.L|%DRIh\F 0 |I'2i v-1Pva\" (Ԛ a77E"&.{R8ЭZx_{L׋w6FtޓY>(6:yq`r;2aaq,sƗ|wF_;si_uaDѵ1 3V8 q7kCh< uiYlwo"@i)}˦M^|梫[$FʯHdu!?ϖelH߶wIqVnېǹ_ K7k嶍[8{!#vl}mL߾!;÷A#˃&#Jߙ˔ًdQ|-oqr7k}L;Wz{X,vf:PcđBT|=qֆ6ywvf42WFj^sQ]7:{78wghp_Qotsl9 J^x+4kӌ߭L'/9[#o{o+s~Z >|ǼZ7][ǫƐd5CA~CUƞ%w(fm8p`iU2&8D54P[zkE7gn+!W]zؙ3֥m뷻]ˍi< ^ ~)+!G6mR.k[i"P!7Bv,8P L"x^WB>BTtLEnu퓜͇<7nU3oOzf @Iֶ-T2nk fDB5dd"do}.EʞЫ#34Ol6tj_\EzKO/U8bc\CtQy M+yʯu  dd go734ETjo1ן&opS?е/\H&|~~Ѓ=S_4kYo%޺ne\F>NuM/)-nuWfy;'w=ޡC{^0?sq)ROeMFPǑz |I^Վib,c~,giд[g=Sb?_ %vRb[ 4" ʞ "#3(Osm%r>޳s8VF",z]"8h ^N+.#  5=A"[oo\A^ ;4턈 $2wl?5z޲}ݚc:7]@dZ0GEo{IfRD^@P 6U(V]u \+bE(ETT@AzzHB$$3=?斧2 ~?y.y><,x*]^)[X2-=s:镲u;t%_ߜ3c:mz7%Rf =y\ LƁ 5:` DLBiqy7gTawz͌i=O $')t4)[oo\QQ`FЇ2tcC-~FX`nhJK`?c>]Y'5v Któ[H: HPbеӿ]ƵJ`[VJ`䩷~ߤUbbw-Iq (uۑOCV~j: ȇW3?v[Ž _žK/hZaJQaɈ摷 8 G|ӁS[{D+4D}?q@rz3.)RZtha8ʹA0 )}w)ZR\p$B^f4b!! gJ`ZOp?znOgXd?){Ay|&MR/Łk@P҆i 6;UiL݁%3rTKY(ZZTPC;/9{>b}L:>uVmPn-,gb$ۯY#B@8ZZ\PÈEnk.ު=3y᳽yyHv k}}Aɟ< j!P攊vEʦoUGee[8/sJǿE7{6Ɲ+~9_L{^ V);Vhe; E8:{)k5mr|ׁR@Xl ۋ*GսޞI8Ld\fG [F!*qs'>FJ:8JuB,E%˪q,e&=(YAzetr桊օmg1v $8/S_@{jϺ򣅣pso#3al?Rw/@@ޢdϵԿU}K%_}T)}56u0 iRO2v/]B(R8_!'0RN;d@r.,1l׳>$s70=sv̅Nk`Ǯ/sPeYDuNQơBggnjjm Rf޲Ôӫ ]Ec,@kY_0垿B5X5(_ lT"bCL c=TQ\<}8aص3:-yj`Oƭ?Ktό{YB&ȗvzS݃t^*-űu_./k9ŗ$3'ɇ|S7Ǝrgc֩CU^Gfu+Ҋd*=Q3l- u1*MwIR֝Hlz˽S+`XϤi*_2YRV/"Vy3SBLQ(Vvt}cnHܶ{ ֘Ib^=@RSQ3FI~NhW@h ܒ Z#ӊ{eR*S_?&ɕ֋?|@ç[J9APqZW8OE#gbU_q{vl?C4?uY|_( Jc~R8o  3: o}F`R>>kbASIcf9X4m}s8\>ҒQm"=їܬmӚ~=˸޼mSnkϟ Yde. o% Nd^ckasX ѽ X£g vڝ\qPI޶cif&! un,޾ A ٰAf0p0Q8o[aZ.Iz TNLl #=QmI %)mOsx҃ dD)D >NE"n;֪KFl?gzAIR UPp?~"7a\eŴ+R€ݫh:ru٩>p^:& yz#Nk.n;ЗP9|`yM|30cU@௛]o(~*3m;ֲKfLJP!ğ4b=ɛU69.U !:Eggf(d>{C5yY!%e9Ո8.m\qhfQ& x#"7::tg!:yFā[eekFRoQK4u`-S: =5L7}WxRh꼯tf' 6ùJs1G4˼\}ـ1pOY{ f]8w_Cξta [3Y01܁T2Y9|=1vܾe?mպ;ʼQ?wH鱑#l/E#l/7Xx~/+'>Ve 8a1NbFЫm\F5&U TV4V\h^~Q/ʺlxooXQ%z٭.g6.\Av@$oЀQ/!.X$/ۯ4"b?je[\r!.X,df]кu:L ensA:~rޙ#ysmN;\qOZtYƽ'Mw?;lզM dg&Ty !խğYv^%0ǧEV;@F$\D6 5nGmpp=Li,Ϸ^=uA]BI-=z͝[7ɨYP,X^{oԸ͏]1{K<^W4&ժ]_1hĭuƴC7zY{Uw__b+r'688r+E0sbi 60Ɗ CTwLtwU,f5\*kϖ w\,K2tˁBW\ @H: Wqިe6d4eh]#5knaĚR%hSjzc:ʂΝt6b_`A;:uZMW}@e3ODBOIE m6Wtc7fN1Ϗd^>5ְF|8KO~?~~DVp;:Z0~"|WU1̨3[&3[6W6A>W6! *a? 4"=DxC(=5|aW+8Ȕ %gC/:^Ǝ`Dh̳2DKd͙n俗3UX;Q~dg#FX6~.Bu%{O.x)*'OlDC;ц !lp2C`ĭx\Tu(Kݲу=?c?@z#r*vrk;yerwTvj)Odѓ}Ԃ|uk2%C5PN>X2Y$$;[qqVb`Q8|o@7ŷWoNi*ALpΡD"1/0JVo*mg |e &cHmAi0.iRK)$rPTI"ETl6TJ| È솈TtƓfk'gI=~=ALSFM9th}%7'YF[nK{y[,O^U^"s!)cH`X1SFm,TKD6YErNjR^"qJ=E =$&@ '^Σ"VO@J?"+X}AXFC\~jX=Y "}a82d(:\!\Zکj'/K&5d|%p]TG,C !w7GJAj%#X'V3d,u"ϨBʓP5rpIh_I` ̅( 'WmU.AܦJh 7P!8~'WśD }:ߴP~#$'h=c%i1HR-D@ ׫#C֦Fn%$qHq -"u:G^Jp:!_*ق P:JCAAw'WoXn+T0_P-v[8 Ykqb㱮,,'њuT9o۲0 A_wt{\qk^1 'RaBK>2ESle''< S7ˆ ,P/kLUIK񈣸BP+} @>=:9H!lm-lNsP*䶭\NwCuEjk'|eb+EFicyb窤 9D>Cz2ubL $;=qHo$,-M:fмxxSϐ'ΛޮZ(sy(7<߷G%7:E/z"Fhdxcf&|{LJdn/M<<4lqfMreOxЁ Gd?EeKRPi qUis$ӄ@)fIMh:Xg(ԲgoHj}֎Tjz',VeKl3uWO}ACpj`̱YJ/,5lЈ^z}h$^poi v}ė{GԯO4< r">͒Mj\!e/)%* {Ez}X fLM:wtȡ 7Aǥ2(2'r?UcdR +YW"ɠ/ߦoIl=8MNp[tȡw=6?|8cЛ$a ^enֈ+@9 5 yz-VDV7{X'"a =WMކQ'_\u6Mҗ V Fsg%|̏BD_g -^CvD:FVX>إԴʖ޲{-}6MZA ٪oFg1ʵǒ\i5iALX_R[e}Uk?8h;ni'E,9|aR-Z}:yܼM}GbZuqaطkǮ;vܙ{7`˘~ɌweEo h6wLUk7+9}c6Z9\@B{ؼjՇ]_YjU>.S_dY)\V`#1Eܞ+Bߚ9BH\g>צ~ڋ|SԤc}??W?>d@v=[;]׺hK7cϦ4soxrfj&oۼx[٤ ~3fdMM4Ⱥ%y[7gGnU2A ş_oĎ/'ek:oVIYЯ쵏 U8kۊ,DZ,O~(4Z7Ur%@-}[̜8%չW{Ncfɬ :$ >?X񗵛|;.LGcҺN_7>ݸP晑Xӟ\0ou o#[jKf>z]#һM_l|ϛc$}MgJ&cfdM#d>}*Yr(1Dh˽ZJ9#**ld(J0B!V2ILr׬"/ZY&* FV9F|O8)mMlt5kX4ʂ.h4v4UꂋP1S'1h̪_Ԇ+dW>B0qHYA4Mx8_TTk(w<&N..{Bk͵/d/08A e1I H<ٹ}Ιe6D 7:嫦Q"B  ҳ;g6slpCOS]˜>z' >jy{UV~2偮ݤ/[|5=UןyD`^`^Po?.}WEOw6b9]#aPUiOV ٪jN~c/6+ TD,ڲLjq6E7I1䫕{hL>S^|=yl8x,9 "|jWu9~_E %I^*e}!pV !ORj1M2HT_kuz3.z +ѯ ?q!wtdSɄ'0א2By ޼>TQ`fzb+G!ɝBKBi3ׅʋH1Z!3!'E?zw'=w|ӂ>uHcQΟ8spOT陲mڌ})[z1o_njrq+4Z"4Vd!L0f$~# ]ӳgׯZwLL:/tm3͹> 53o?~߽Ij Ir0(fA iA(-.kgʨ`\!fTmqyK 8=ҍqPϩ|?~`^uazT.drc|bP!Wl1_z(&tٌ^!c%qLk=|[7* wn׳&Aj.Nns:]ߞ)Mc~_#[Vl] tz׉̺*򾘝{?rV Y)_uv1ަV&)W ;]*\<#FMjSTZP5㇯\|c%h0}}^3~IpQX#M8>EaNJ ÐV/T}J4MS_~s`Ԍ|8K{ b7J:PE^el(( iS#dmpo1ba7|Do8~k//vOvspY^|hmgF7ʲ"j״9@>a{̜Ra?Ԛq$u!! "wD8pHOyDdswN!io5+5kVK~: ٽ (b$۹+nF p0XHaIIEBlVw8D4M*N$b ߨyI^SL9>;BhUa->{4R` e_М \vPj_B^Uhji Bfa:^??JF=_/UPDU0>xni>Ln֦^pimۜ~$qk!&&"k|aaтrbYKZbőU$ĀTs'3d=C&;dҿM`ӡRS)WT6i>_Zu4؟ki3N T^x bQ}VJ ORVֲKF&X}wX334'ZZW޶cidEoOZInz`n<џѠAFZujwu 3h2m)XJ+E(e \U?5Vt4(8 AeL@6X}OL¯:r֕&L> @gvm<ѰuW7-]. J*6+=0C#h. z}Ѧ_L`m(O6Wz30T& d>>D՞RRڒ}39VdeX#dA<dkQLZҿ2ƒEd4Jg)okAMA@ŃlZG-UUi0G-fǙ 3Ba@ eN{b9ibZXPg{ekV޸K2|}@I~HCj7H76iY~K9P eVްK7(RSbinl27,ne菂IJ g"8 @E¹2reve kޢ=v3%h)D@9S *F4]\ui1hO:'ka^B*V4x~皮:^_GpE$2P`$>;xwƍ㝣VX_}FŮXϕ' }ٽ.oL'Ţ2|и1?wcGr`c{}Hb#,s.z1φ^zGuv= m;Wob3L ђLnle}x:޻#^p#6ZL{&uIsjAIFN/:r3)\6m^e>iFx-'׺‚EHBm/Pv=uS*n=5 a[_n#ް3u LA ^zd֎rJlq@O>;zN?vPjbBcG?B/Q Y6zs)zctXAHtgQD$c#J>3WJدlp(pMD3{}'w;zOI5N`%I\)2-ܾRfpUTorw'QhGD %CHwrtI\OT+@8])!+NUfeO;86\V˞&SBf'qΣ'{|sJ#t}^Io_qX=qm8(?ONe9>7sW{V.}VԐi<_7gr8/ śxJoHoKNA<jelE Q懚o<%2A^~4UZ6.E}T&puv)m t6f1Lz/|/|)? 'ꕄA1{ QmH%sJNH8Α,;GH$ Txh{d|'BSN&+H< U0r͕`M2_y?:$3$T/UOVcMl>/|GCqVe'F/fs7 H=Vw;0\)AI#WZ 4$G":iR ̎x?mq !At{3#WgŏHNg|.ԭyxVM ܣf0O ^|j^X :/Gr\x]h룤OB\Ɨܣ4t\oxuvQ$=~E!#IPM'ujaDr/1^Y j@CHӯpn_5>2:/HK=A/4b=Vg24(R7]Vޖ!^P^ Ub2HPPx)N1Wd׫?I<tM<2aZ;$FWǡ+}8Ewo_ҹoTde$?Pa"d`ު11r8Uc_xuKOTCr! #H4,xrA^3X 2 A*TT(0Z]f$wO<<1{rĉwWI\E`m;'3LC˽IXIMϦT\KQǴ?)BĨR:>Hygϫ4q>$j'lo7m#䮌H0k.{̒ZtYJ1fcMb+!o:*D6g(%. Rew+B nORhVpx̳kCޮ ct8eI5pcC# ʋ[y_*N0{5V bXUQͧh)dqh7dSp]%HsJAEjpm4@]^r-lWzW#ذHd@`$k3<-7l}j\Ý"TyS/rs]K< 6"* u]:lB+kѭhG@O}zsP~O_;M _kԕr,d[BZȮ"wB!~XI%'x^$";-.S$&0l ,ˉKB׶ +G>Y}|>h+O3WʶGQmArĕO߉/ß#],w=YN %蝉l"\ }O̰$wx9IXYcO9Ir} DbcGǶ[;%sM;O\sc=u̫Ym,f.hkڅ<;QP,D.[S-⨾>7mQ$)%|^pkI嚧{Yv~њ+1 f6|a'mLGD j0"4,H2 zXǠQϏ̹(w̟cvr#!tЧoMkaɼ-ߟ|xPuea_xE"@upiAN-:A U(R!dgnMG-5WZRVSvd,_ˁlXMRU4K$x1z H0$h? nk\&f$r1S+h(8%hp!|\ƃWD*rUO|G`?$\>5 85dt:l~j?U^9rs0N( }"A_LJX^rCCA.6\^GC`W}`Orf{Q]7˽O5+GL|y3 Fyb) uv(3:fT|)~mEZ/f]GqkdJIЮرwnR-Z}:Uk?4h;ni5Q*wܱk]viWqΦ8*{if,a|zwɆ6-z{@C?ə0Mmf+9}uW2P++WݴjÇׅ}:~H =&[+J.8@-9-?ܼus^7J&$^N׶*Z ("4R36|Ԟ}~7ygڟ]|zÅ?oy9o^? !󦏖Ͽ׽& R'`Z;&|d_7nm:z|Nw+7ugue}ey+7\S7641/?wa?oXgno8~Ve U>s4 %d"~@Gg-@e͔0yB#Xx{L^Dq|-X;rٝ4i~Jlo P>OPxESXjH&&I(jT;%$YicX/am"]F!\,}վZ#JO͝|X}Ei0f-YkCAYUiG8ԡe-폔 l"q}ΙeluhDK fz2պW/7`33[_|Ox{>~8jژNAP\D7.ݯuQd~ݻ ]VYqE; -3$1TU/)tƂ Bp3->N@8s]"g("\-xY 7KOmq&/sZ?z.,Ks2長vurˎ㕈N{6 Tmy^V|SօgC^]A_0SfMǢѢ-;τڷ,ZG1lHz4r~_C fּU[3իmcSA M?1~w+#k' /rpxD~ϏwsQb( M|{ƈԯk|찡'ģ타i>6cG>5F}dzfBW0~yK_8giW]dJq.d!(gr-B ?J y'W }>qbaٸ>N=ٟ/d֗Ңz׿Oo^( C03=66IbB$AXֻ~03>0Sv k3M]qWʟm {|X8‘#[o+hɯjwX uÊcMQfPiK+( P:rF#".1iqIDATd:y9eӯͨX: !բ"gtz1Py1 O@IOTBEe \vWpwR~49 6oYPt8wOC$5wg>?eٶ#;W}yu}bݛo/ݕcs/ ku7?37G<;=_l-6Edyʟ!'EFDNTdpF!Tav nӷ4Vg4AWl'w4R؄)fT9? m]FY*IZڸ9gkh1&c[h ʼfqw5ȱhhB^yC?AS+O@fr͹$#֒=km9M.6UH;?D (Ja$$PDxQ7m}A[bl6UWz*4Ugw^Vj$oJ5*YҼvꪦc}K4V,4g^A2D|H^p,H@ID}?2IV>Zuޭk+NpׂCa/VN87OQK*-GeEǾu Y:3>CF0d}3scxz"G!Qǐ U" % Vg^P(!'PHro kZ^qeFX%#0EuJ~ZPj=GC Xۼwt΍n}K-8K:m+ =[\Ud$f^"nw`=Z@X6KeG~/lj>79yoiTTQ0+3f?$R\ldwDv<(h--|3>ҙ ڐ"LyU5"@ K:lb\1"b ,GICF-)fZZIfDL##n&$9(WW&eG|1CZ;5ZU *vorϫRk_"hq| *.nF[ԟXmX?^_遬v|JJ9jU]BJ<I!ƹ 0 iӫ ]E K4wЋL? 4 }=oUN-5^"5$ϣ! )HY ?E%NŪ`|~jkpq)!i_=Yߎ7gn\y3mPIQ꥜Z3~7!\T凷nlx^"`iDN=sv̅N'7c㇯1(؅~$&Np@XC7@Kj3j.zW9(8gH 1`Q*>("ٗ2kvi[2$1PN@.E=L2tKsCǜI)rL(9pB)j ;"p3L6f/ ={k B^\eKGN#5 6f]М \vV7|uHh"fCEJDkCa۠۟u]m?eVBFkHkmsKm}If0mx3dkb|*JXjs?ѭr`+v*ܜмRܪmmnVor3m"ŔmE;ig,ּެMӚ4B?@<`N ُBDq˰OPwTXZ.@s`%d8H5JEG@j$WQ^{DPbzfF-Ϯ>Nj.wJ d'2ҒJ ԋ0پ ;=Pax@cn+Lk%37ْ'.:NNIf(em WJy2C EU@bk7pT*OYO?hkJy2Cį1u*^֖r!bUcZ(n,C.P7&<#gSY>l )J)[CwbH'b }>/%0 {Dy( 3D+$V tJz|qfSO0|~HCj7LC%h.@LYo?KAӟ=Jˬ/1.AbF!-/Cnyi1h/oSA0 &GS]4o_]\}i'580oў ͇Өt岔^gܩڡߍ,Hڎ?Ti#7jG]`{)bٟwH)v' }ٽ.oL >Qu;f&6~m&>wLFنP! d[KzfGFs] W 9u|Ǿت(Ssz>^$|ǚ o{dDgnygE%8ѹ-xTۼ`A0h2RM䀑@㟩 q'c7m\ўW+C, ^;CӒږ7blO.r*3c;L@]u"ӷeY={8Ƙϭ\t yC׫iCC,^wۚuS2tuoQ0mxuQځms߮gxS|r.7 6BU{?{NtdJO5:g]gaPrCO8Kg?\]O#}r{KhLqqY´i?Q "|߹rUw2F|˽cƌ~Ƕ=pj7N TCKRXu!ý#8Ӧ;7!;By $QuzgZNmH(/KIYToq"u\5mi<шdìU6+MFV(DA;"2*Q\WOZz&n?NE3;սl;wz-46̔%Khz@gfSzZ?#+>͐ړO'oceI1HY1k=HOC.Jh<G2vn&; 5\Cd:=B&8rYGl'qj2EtrBiYk uߣTV 7@3|kbb;CRk<'`2?#+2('F2%5 m):?W+i#[vJ; qy-!Ɔ&˝J^DZ!R%C> o>5ȵ`5p{kV0[(T݁."dX$A5RAߡ$73n"A>tjzlXׄJ݁ V ͚YL59"C2KA;w:xJyR2!zA9ǒC"isIPi6А&.d ٲtfF}=Li*4W,|{H;{.ܒuDX5)L 7JX0Aulj&r@d PBIȊL{J-U.׻0Y$&Ѧr{i~AȆFB!0$*(!(שdSФ11$3 kb!d)I ] %2 0Ep^o k6OP$B1}|952aHtjıT1`LFBo0+g: TOS<@\N_PH C=Q3ӹξH%bH\$;/dMG ).֛_ïAUDxH;d%SV!QU8 xa xTʵ.Jȁ/WۥIENDB`glances-2.3/docs/images/processlist.png000066400000000000000000004500461246314757600202770ustar00rootroot00000000000000PNG  IHDRVJP;5sBITOtEXtSoftwareShutterc IDATx}wT9{KQ@)A RD P@*(]zawaaLr?Mn2|y샻Lrs﹧|O\ٲ8??w%O7qzB۳w!0s9E\0e?D.zA3,'o"" Ȥ40A@@*A! "#)a,M?Khl4nlP4wDih;E^E*asx?مvkD >;Ar4J1UˆcXf%( tH?ޗRd-;<qcVW^1mKNv9Q&  >}輱X8>Ev.d&!&o$Qh5Ve qʻw#ļ2ZYg~n<dcZt m+(" ^1Gd%x!퍈!rx=K{(Hq/u$"_Mwꦂg2\{XB &YgfdZbْR)B  20ol»x'*6욁eݨi8Ȑ|eS կ0a˙%"$ο\+N|:܄\5 $U2{-NljJ8ņ/+&Br3AbG֤s4YNH uY;f;(`Bu a=]CP.wL ܰ !a<2oںrz*kg9Lfr9!]EKH1-JrhݕTtkXc2\AяC9 3 CcE*Lf s] =d [Gl0 -BZ^`h0H!:ٔtcLaHqe~ta:Q8kGڊb Titx6I 1Rȿ/BW޾($>e!R+A^Pž ( O1dt$4DC!kP-G˔(x8\8 ]"XnA OQX[B3 u $P4u(N"+qfA*eK!.7Kbb Kوb$"@f*d$isNU|*@fj1s\HM] ˠw=>[n~ Jd8f-Fr5 QSO6lt/Eo0s& y[M8$2,nUN#/Yشf@FRE()XVA!BEӖ$ %SlcHalAF"1@*dM9" BEѭV"XV{B0d\LM.m0.x<L#D2) 1B;lJh~TAȪVQgxs^KU[[bt_8(ȇW{h 1bw;^J X_ F3aM,ٌ2r%M5^Im(|e' `6V (6A53:}vȹSIQH!RLQ)5%S7R"BꗒPWKXN{0"3CwbBT %3hVAeXIVgtvc bgјtp-PQR'bޡ Oތ< bgb>Q޳1om'Qkq"·{xc.Q L@O}^?кu.hi0ԕD`9KDwِ9 4gkl|8:o^>fnOCbb-8Lb誽")pE!E~ !")◶ Re%BX 8;]z" f$1IvK3Xԙ%U> 2!(fh[aVU@0i,40K0t/( /&!zQ3bZD3[#dY&^߂XϮs ^]֪ xW9Y Ec/V~GdYϘC"C q9,.c.DS $za#H#I ,I!zx̵|#"H"T -f +۴)@"ˊ,rPewEQ'AF{~P:@5eE @  Cf~CQEE֞)˲"+Bn(h:o\%>_" oD}#zذv_b_7SuX`Q;R! %$ $IO;]n|]/H, }dl\]BS@.bĪ PUZzKFGCJ_X%_fǮJ96rNb{7>C :$d mCm7c%؃B v]nV/9-Z6nܴs㦝{Wkvޥ}`dF{#>35l(?v Ga[@?(N .oBݷ_OJ$'SOO.<|=꒧Qe; k]3󓶅#"j}sfߛP]x͛ߩCQ8tM!*;TrP rrV]qꕳFy ըD!53;yO !: %@/OWL\|65 E/ϣ}2?7ڸe ok<8i'dVvjn.s<+cs8 o-Xm~ D_WaF?gOzFrغΧe ::uo|9XY˝w<(f3No#x*fS }Ʃ CDRN̾CFًOeEQ ~4:΢ 6AdS=tH!J440!"D#sM v ǜH׷)Մ21ZW\N^$d$ %-REPƮ(j :GH#SEk׈MR:w<${ȹ.V ސItS]+IC$K{xc49LtڡwT{6yG g$ ?~ 0iN'> Z h3 ݘ!t_l$ o+&d52D7T hKY;έE4 P 1U#dʵ;(񬓋V[RI<l>VN[NG ޣffI_+-EVPQ'H;tG3^~eΉtoи0y01>cwLhήQvihJF,0Gw߭]XJe| #zf Ya\gfpqCGKExԎPE>]_uߥc)NWOTܟk7oO5uYu?cyԲ>_~Q@G'>zFL2nP;L3n u իY`SFإ]R4^f\ P˙?|&([0|}I}zO>y\q-r|F E_8㙛og`1wv|;vH wF-A6)o[ݗ_z0缤Wqph^뮩Z;̅g4feŭBlҨXv >}'}\-A]ώέ~_1Ó|grK)x>\CC\{M_۠>>R(:wa߮(PNEnw`zgoZ3{_5:dž}rʒ[ݑN3dz%|kP|*5G-$j{ͺYG"Ǧw?M \J͓gt I_?[>kQwxx.ˮKq_|,==K'|6~`dwmHl+gxm-dWz̙W8-סy>ko-.9;as:)-ťX2$e ."[eIPvN54_OD+PUe@}xi.v%`&r%J<өEBV(כf41[br2PA&HNY{sGۧr@^Vn)vצY#vܰyق]%n($KJ&S߾PvKg|ڏUh?jZN/+ǙS 7oVn{=eGa RfEf\p2zNR}D~ϖ߼޴qv-<&+i}:$!"DnT-vd@q?Ԉu$S6:$L\x%EA6/&/'^I*ݪN]<y]kۦ3bLE~&I~w >! \٫c=ƗWGӻiԸ]C7znz=]ը$2wanгBWђ{oѳխj޲x>kְQF`\Bֽ./K lI?/O?m.z}QMYC8:o[/wxč~f,,Q:3պ0k|9:W'f>|7_|CS ] #s>{_zuFz8A9=S'Wu^]u$DLOG>?R*}aԔL\='?>suDT΂.fX̊ghTP3a;n^ hȲ0  @dßBCھkaO$Hd'Vع@V5swks7~EhfyK< ;oghEgޞ g7~EhfUImtg{NY9} [2:A=eשHEs.lRy1 <5SGݧLc: ]kOJ[ J\(Գ09]pn<6>i[Ƀkp*"b ^]4ۭgogܽg>Wgo`yrW hA(3jcL`:K^]4m'SXZZ @D@ Ȋ[+2~ciJڙMTcqB=v@ֽ ;l,/l)ߞpqN];em7gnתE6<<טwr4ӟHkۡK҃rPPRҖ뒪We9OX88؊Dzo/\ .y굋'cA ԏ<a_}E7([WO4~Nv¦Þs '}|3W.]`qj#:'gG<.Z6u?m*e!P.u}7Nl=xb+Y D8`ww:s fTp$!g3a(ISADO%OϽP7cߙKoX8鈐~j޸i8x~w8r‘Q kTbR|6ե-Kvr#:s,U!' iOֶ'分+X]<)Z$uCWhU5nqJí+*II=Q%Oҳ[ח{|v%ToIZ;6e B]ZT^ݻ\?xw63Ox1e Ɯ5[R&@==-~j̓uRΟfm^r7G2E}PDL$d2!™POm^b7])_m99-F8rmY;Eg7O\MPҒR)*.ʰ3Q{+!"/9 QX/';-wBdDe×)( 9r YQIOɀPdP_3׬#r>{KszGW/G?jKjˉ+{laa-;ײe[/AQ`TMFj|UR*7.ҊpoF9E G_?r\T,+nJqItӕ&[7ٶm\+}.;z-bYq\9؁+"ǟb\^fN\[g96bQjȗ&78u89ޒ6a_1j &ɦ Zi16[yX/~mC5jTՄoBT_,prM^)WC7S,߯eՄ߄TڏDCF-GMޮOVk?;|vJnKJj]%Y6Z}lL7q."0e8QD:b|QDA6 &[4&ޕ8===B(kKP 5P rG"NG-BR,kFr szU2'v4`ʡۊiJY:z?0K' '!RX+jBDҤ뇳v_Y9,+h7:$TdӃQZ\t@gtFj+Tcb5 (}^{2oߕ^yv%FArڮQ:Oa@ ˊf,Ubq?[UT&ulޡ a*]$-M&IcdϪmٴq=f~lS4^IGIK+2R~8(j1}[u}r JA[$ 4~:I9Ɔ|Q2Xpq IDATAQy d5(I[R`mZvڍnФD/^'HuTʌa]:PO[qPhH1nƍ|—=m&o& C AǕB?:]:Ďe>IAPRNW<*U9 e[T1 F$gA ESGfƻD-/x HQ9" L0 9ZrtF /kx[κQ+#O~ѝu1ڍޟo&3o[#^pşqQ>`qw 4x楳ƿݳK(*Q~MEQ rI!7 I#E̛3S?8>lB(I9w>=wqU4!O[( 23CH:c*W6xH[\9"A$ Skٗ^RS6$ky^6Q`ܒ z?M ʤ6 F ƗJH(WV/].|Y5~n6~tO/?t*lhQ%_׵#eɗPy,IG. y굮Yv% 綬X@K#=jP1ȨDcUߥ^…KV|}O_cѮ+ĸ[J+0S=_k- RG۵Zm<wKXXV[9W$`dz}Ϳ -Zwn޸RѼ>֮seHI>}6c ,tR65K͝+kf0M=_dܹ%iϻ?ݽVʺNH!D#G4|{ٜ ?W(U@|Q;Vy2 7~3ճmĨ*}?QF?؁$Su?*=o_ܧkC-?8xmsFl٦ hzk[;lǢZah9jo -XEg^ɂ@9#b oW6xj~ R{>@~7>:9|W{oܛpuո ~p0ڲ׬H`d:rX *M"dy>9h 4+)sE̢:xh7vpzjN3NE<, qj v 7mで3 ezLwL(2MeԊxo1_RϷ`9=7-11Ŏt̗EŒ{Ժk2*Z!%==W_t-')IW}gj '~lN/Ն|?oe"_2?>xݕ^`cFt|R!vc&UI-ݿ?7AN=Rί0x~#zzCޛdA6CXII:f3Φ>4уu2K?B"Zdzrľ料o:d@}+g] ׷|9m;Z띓7OGoe[/{f{u2C=xbӒ͙o][5yv!^G}h;25[֋tK\UB&w̫BY-x/{Ϙ#2d!yV`[oqG_b2'lN/Fy|첬OT1b;4ˮv-Pߏ\ξgMV^tfARN9=q1jXع`"גCp]kj)]pʈ_ko&0p{? @ugܹ4e JNJ(kY̏*W+ޕ>~$kB7Cg H{HXlX#1l2{1(b5,t+;֏J-uuє5xo<}+$HFSKy.b QPXVy{ /XkK YN 5bd0?Rŋإf|x1 dd,ȝ{XE\u{%KO~ tș^9V%]# iܖV ^Χvz0XD^n3謅Z<)i ZB 0"ʧ'Dn@|uks%aC!d 0 ~-)YIq/;{~~v~{+f "V Ջv^갊gCLDNy٫#up]q6_(rPVCY4Ck2+?  Sʎ ޝu$ vm'`9CChyޘʾ=t¸w<md. 2eǻrxYaCG\a-]ᵝڷ7.EOn45DS,E<* `ͦX5"-"1,W|p$"0uS |$r&j)2W&z=Z +H A6јʅe9"4ثoe|zWMvܺv*w5Wn歅 @򇮝dzS{8*/8$2Њoei$+ $4L6 k?"9m&Ӥ tG B|t[DL"kZa{\/SiHđRfGGw|TEFDZ@P\5N4VT75UwP*kGAMv5-{L胣Z4rܶPQXlÓ1ZA\^Z0(=X,Cэl~)p)S _ޏoժfgzSm}8-8D0vRrVu93 1prxp0m/t2wkiv*quLc=h/9S' ZZzkwUȦx)2hO%&q,?''(*A!_,bJHjBB.0p"T*(RlkQ[IEzx S[defrV2AU29/C "hD$/E:gzxq"2IKͺbrdK.Țx@ݡ$t|%@D+07&f&!M!͎AėIP%3F͗Y_(4-r}0 2_jLr|L8M-d( қ( i:-makvXzxh T@A= ] %8뤒5TP_;1R2dՊc.e;O*J17rư(S&Qafq2%V\G{IFDPvijT̀3fs` >apA"[isIl:.B* n ;1Q.$2m_$L6D 3 y_^jFlzS'/h}oq͉; RHYUP;hn]"tAV 6Km&>3ejeUBK r4 $GnK[B,7FDŽ!YsuFEa^18}Ö ;MN(xUGb`Yrb,]O$ fV=bK8j$#B*>Ͻ vuLMf gq_fxkМ+T{5sumP酵s"KB:`=+ kDDh8@0hwi`oV5}̼gP3V7P;K4Ch<֗ϥ;RPBdD͘HkL K%GFrCNQ`͌cJs'Y [I "gv)#ԥj \'E{B,0ߖA"(' aQ,S7~zlZz)^drizR /2(P! eFyVZ]@M1q\@+46]{ ,ϒTE$tKy!u3eBDpd)ٷzICgbKqEUqD P(ێ\@ׂ /@ha@NðE4'!rHD|F∐ل*L F5$TR={pF 3a>JLBFxSיݣê¡RB\3-<=jD "6|$>Lw,!*D1P-G B4joKhMy 腐xϹör% C:VJFx ߢ 96͖%K$?,li%#~J(p{27R[$BⰨ<)g3iȦknBOYKRk@|gaD$"O #fe~AȊ ʲ|ĵif,( O ?TX^؀d|Kh?ҎDŽ9{ unu(\@ZWᖀ %Wq(@D&#T6Kqz?L E]:J|13)nXa]x̵2߇zHZT[Co^Q)(&۶rnBd+ Wvʱ xtK+[Gp0<.h5oWW9"8tChkE!=Z+gzKo8C6UE!ňFh6{eysahD;+DNpCsN2#wB\Qʆ\ GT»_$ 4A4:K C4HM՝g!bg-!L'q6,0HQF23jNg; lVo^Et 5LR Mmnp Z EB9g PG!^-d$l % ~dap~K=9@`Cm"*bTCRAVC25,02Y|3Geҍ$ IDAT՞qFqLXd܏(ڂg:"J~Nw(t3_#E[hLh^‘z|$ZC"לXG0ǐ2*^Lc2'6KD O"tLĂ"'S}ж"V^풭t2bgmg9M1f@hYTϕVD/"+Nm:SQv8t, ̋"[4>  @Qr0(+dbo~K!sh#{H#ͩN{qDQ\FI\MsKU#%)I))o߼uC!mە[g>OWcII˚F&Oҍ;~x-- 0b?l߳yIϢ@bm{ϯIٺ}ϖoپg=*Ww=D=R(d/߰yw虩H@wfSYfoݶg=ٸ/{l6~vj A*ql޶g?|BQ=r?5_ՊQUU=Wjm{֮i#?S[B)oƙܒv:}mڣb)YY̤3l [/ p|Nۼeͻ6nٵqˮMۿko(<;6n޵zُ)V/4;7l޴Z4:G#{@Nd&Q< `]aP4r  dYM^Kf7XRd%"LtN+їHQdUɊ,+,AY{.T*XtY6Z30ϐkNbV%d,NTF)j?ZV7:m>Z9)䨶$$P(.dKTFN{\a*lek}eJ%(k?PRn+Y7nR:i'HɑPb^ߗ 1BH=r71١]?1/iBN>VlMq(ڨq֛s􁭟4MKs1(p3{Ŧ}w4lf@YNYg亸ǎPm{R/g ?wBx-6}}ь,E~=u%dOʝɚ̸+a~#gz+n(qNXq#_ ёԬE+׭W(.(㏦oܽD R~{%K^W_\ice٦鵃zk_A^ `2:-Z- nLEyk'dc{}wJd.E}Ş=y=?>H: eѕr&Ny޷A㍋ kd#8<ٜfL(-oȰdE(*{ 毦]$AQQ2H.9[ jfWmL-T@yfi6ߔXNd#lPH& Ht7RDgI\DXHAbvF1*U_oe=jJ>{БZ4lTdihHYB+Zn}1٣3Ȗ軐8QOʥ'Oޅ'>򽦕,8|Ð%GsG>(r䑽{.}۔Z3XFw*M^7kOg:r޾pԉ48qzRV :V-rɋVhv)g_L}z |r#1}L,F U[iā/s_~QFc6Ww5+o^9}o+я#)=kuz7+ttz^wOBG"W |}J>۬R.ee"XO\-|j弝~d jK *F"b "B"FaQ# Gg/mbdhnN'/7 7Bc7lI(Q&e9Qtv͇^1A#XNhY;OM%RRpo 9y +T?ZENmrx݉Kx杹+Yd:Kl\_Z\kar5ؠquJ↑sSZf\ӓu:}6wO@Nf2m) yRe}Ry cs}fq+)pғ a'np&W@ Z@d\#{-fHC#X< ճzKƭ`ΊՋi& &JS˷] 2"߮v웮/q+-Ц]Bp.>iBOo.!C>4듾۷ѶP'X t15կ(_OKE#XzKvQ b؁h# &K$ݐ8lKN^W-M8X 2 h  %à~xC! -eRT.8\ \- ɑPD/ 1# }AR"d,k[݊[7─ Q? 2di8yИ_>֊ʃSݼ77‡^mZS}>s2$p:# g~bD2l8S|qkj?O,yT0֚V/%WҚwNk=_VH$(H ȬDve-KmY:eC}ԝKke "`?9p;ktG|)&"|2L< -@Ag0-o}VTtfnǶrl/sg.Wfג sմHp$+]DZ8z2@D(A@j}nN D>1i{hDhmqP.Yquude_(3Ȅh&ҞBh\i M,M:ǎ(PS<i}av#`#s419ZEL?(Dbw:A((uH2UC#s6$bJj\?y#ukwR='S^z,):`|`[/r#Ύ)M׷,Yd^Oww|o(WVՃ62'{ ~h#r7`G<}E6Y5ua7ɉ)r+"o[H)[5J"';?MYy`l%"YSB8mG%6NUʞkb+#b koAl(UQ>s>-WYTi]\ "/wŇR|м0ir7p(e#ab( 'dTmkq&GwP9-m N^R7 E^ttKZI+}6bYZ~ƕ˷c 1J?pE"W\qʪ7\et iRqYbc"l:)8يPN)W"OS 5H)@Z>NBL]!e)R\2EH_lr E5nY LF| 7NZt,HDs'ҥ+7ַFġGxwǽWB՚x}[v\'e'$OH(P\Ѽkmʓy|D&~/diƨu6nzɕfY+\6\q˖OH(G䖕]׸Lgz+*SYhL)c M4h䠖5ʕXv{$Ek*…jw#KAPN:}6`GDFzQG[B' kpLy22&ĶfsXMvf] oQZD;㷖;0JCYړj+qV |> en^x*9NǹP#4d\ٹ`D70ѱ}ՙm}i| !rMFzZ>aa(=)_|ʺ7".杵WFG'Byj :'7HY}̸pLnt+;|wơ4` VI?0oo{LlGVO_${G9z} +^5oxɛFzt~O3>]L xm& {gκiW]{%X]RfzIus+VLI-ؘ Q;}B!ӄ9xKC1'Fn56OK[lir0)D'̩]mbtDGEBġ|K.贊΅7:'jvXL -^պ>2Tfgyu&ulP0wvwBn%;{sؙG&{ am]DV"!'yk@a˰9f"&{Ƕ*"3(md-`{QǝɝD!2u$.`4$L*ŨiQЦd1m\Z]ka1pKaqOqੑ$d5FG6an9$]4 ͂7 E]: =b`OI9PB<(e=f3!(ӀgیDn_|ChL;@29 K PX34HU:t.ITcE='""Ќaq `+8!cܩf< bLҲ^CNN]A^FT#kY7MMe0LI4e A)O'Y2@ً6Fj!YmHcâJ߿L3JJX((k*b+ݮݮk(v H)R!(=33'gܽ8<穻SN/U ^`@׃*LKNY s0Cm p ěSL*1n6 bk.l(q?+…a]gBփ0$px|3 tbV- o*FfBiQLEal};9?m"nsjx|}xdbs$ӝӅQmAXwz Vq+)>ExeG^([Cv~_gĈ{yVQdeȮ2m`F0`;*Tv+v+rtC 3bt"^ӇFW\ϘVx])Hx F}[. X}z? 3vXu8!aǞ}+u#Sny`5f<-p)i euv0j`<_1\ZHѯ/2Ipv*tyH{o`56z$Td.rF&e"eU`Bf34L/4ĿnfbQ.Bj>_1_)"X̛LF,G fQnX(Tea ;F#CJ/4 j|}z+c& LZl*ᤏBKn4VPDǦtBa!1_gDCHwH!0Qf!LH1%%{ wDĂ06q>Ȱ]#xxkMG1|Kkk_DGÚVpQXE1&[b^24k4@uFiV>)ѧ|Em[CO%ƌ ̽{F ,9?1W3#B}sMB=,= >'"##GD>>=2D:uK]ǝ8(.ٖIbY˵Q$2)| sj@LO1-粗.o.D0 ZKbR0#++XN7$0p Q!OFWc.yh L± )-+ L\9!+A+Xm䍺S<R<4A Wg>L~X{9:6Tp>dMU7+Y ;}+]0\c Qbtb7 rj7i Q1.YBB݉ܽ{NTY0F=sa߼.#h1)zz֘-[5*I, {H%)f4\r1 Kǿ^|ʡ]%\㺡'ue-]g/'(<ԃê rs#슮<"JD1`aT3t>)J ĴR r֭[w]Dx[\v l*0iĉ`ztt?uћ[%ؠKE9JtP{KH/[)l[B7!d IDAT% }"j SQ!% Z0,h٪Yǀ$;_ g gDt71Ipshy4:6.,/ ˁ.naL]$D5:{Y$yngSXU}c]7c%fT'o3#KVp(HfޠL 9ٴ tc<ǀfU67{ufӱןUUM[vzַ%o.(!wsDן9:R]ϚurOD>_wvߵ}|1rΨ xmV[_20/u qsuPM7eu%: ʐa'KeZd p Tf*6{hgl\ۻ+Ds܌H~w^V;&o=.=(!.TWb[6nnptUR1{[svBԣ[GI%5G|ff=TzjѨwOo:Uo-s˹i|zZN^ՁT{ Gw4bD|ԃ; )wћq17Niy-wq%<&tKNDeKZOz."2:.i]%L3}q< `9t?vq.{{ey۝#"qO{Yrj;gq"K'؈OWalF8t%zh\dԣ+GW,o5v@n]~.1lK#]ߕGяw6ww:>v&kâb#jO{0Xuq}H :=<>2&ʱ,Nmfl;(!]]$] t_/'DE,q&cnjK1k/ϮW5;!֖00J&hqba?|nws9lB59yIxoߠa# MhH U >H^{xcш/|MȲ7r5$*b9Y:}kF~F wkƮ56ߴ=o!eHtwB{έu3%`P>u~{P6huo1o;:Z0 7N?Ш2 0%:ӿG+^[9e#O^( Uɽ~ڹcξ)ѠJm{wA"<G@z(ϫĆ@XóOqz0S:ukٔe[y"nQ[6nl/GWL0-4l:3vuz~}lˠTLKص~AZ 2o%\W Ie} HQH\k}x^=.84_5xJq =\m:znɵޗMRVo1?@\upྉuh|Z@ܽCC;-%eЊyM ;fD֎pkؽED`ONҧݟ:,\Cb,kqiQi-( q`t o & #Cn6Mj<@E 2,,TTϷŒ;?u탏i;Hu?$0h~Į}P(v"22&<˓s5NH}ps')m ^ N. ` )=|9XS!ZX{g_vRz֧WK.E`5,)h?>mKyޖtw']y"53uC6uMsaGEq4T߰^wn +9wH v ,˖̂wd$,K]þK>X9XX(l45q|׭%|y/^E{{q?|%w*e3i:$d;Y<ݶA5Xի'ߊRb<͖IuQ+C3?<^RXcgaj7ܿx̌WgwSXտmۯ<Af5\ҴS[\}:dwWNE('d؏o Z(7Rjh OPc5ϥw]@^==J#o%pirʹA{o⾩{X$Rzj+23_?Zڰ : -b] ̭{G71u^G-є^R^4NxA^E^%@RJ%Ȋ}ӻ'%3DKAP߰OoѣpZA{S`lt?NHz-p*>U*BV?v<8Ya`߉M4WxOo Wh+F"~|(GIE"K3dAE>_>}5yIoJE'ӒRu{4doKtO1J n~bƘ|v>ɿ~?[^Sʷś.{+j[iǡm%.{-`3(iS6l#t|i~B%ɥe*^~>IR2HٸY|{V_}6fCDk7篡xGlk@ @ضYzwfWS@,T̀bn*u>ڋ1@U( LU`U@i^8Ҕ%9nxlAZjO,Ey>k,HRk _7,>i1\²ᄝm㗍=|c7`zdW"|¾ {66~`DgӪ6#aL(xgCFtr ;p+Y?x柛S׫)p|FPh* .[[c,o2KJ}7#:-Oi~׭EecNN9x%SZ/P|Pe7e>Y@$-_z.mGQS#"k<}T;LNUu{ BlF6:9ט3Y"iDEonEomiYLp()hx۶hں˴C?188|5>?e!-ns mţR~w)-ݛ>gb7>>Ġnh۲i.wvv)OF"!1` nO`_p̃|/~8Uqo?3 kK]z/^KZ&55 h~W4ߊ3 bUN5 E_d-}sv ܇ٗzhKq\d4@Yx پ_Ɔ#0%ؼvNn+@#DH,-DZX XҌ sPcdf)2uI%V^}XE&bm4D|򐁷Gҫn$fĶnuKVN&QVB{zS=xTԞl*UNJƩ`0L:p{dmju(Y ,˜@T^̰ 3-ȥjĶn5K2c^^aٺچXEҭe]+DG2]ދ dZ' ~|kݨD|TbQMNWU *rUB7z)G#}=dk껒.6uuj2Ӿ! 3t#߫77^=6mcn,DhxF44Rˤ bg Sd%O >.eLIG2>W"Uֲ5n6I'߈TմIF/ i@ߓ#/ ;az]kjSdurM:|>CFGHH7O-{yS{6W}=-D|23ƨ~tkUϚW t4p΄)J<(}jjZjjZzɡAmݎ]b[Vd?*c?nWwz;yLBni(ڵQ κL Z^;kϺ_ӯ am_$^_X @Zם^@a5R6+%n=~g]YXA޼sV<<֩S\ۥ\9qݩG~Tr"2*t3S]WWv#PvmGѢQf>3ׯ料n h/[돍[lIj.]ѹNAjcT2~qÙz5pucj ]?&8tעs>:Aȼfi iyc;pf6C {뻺zi[oQB$lewyHz>~Ȝר.\M)xy*K+WuPldfzZ`Ԟ]]|lP&~>:|crusaМuZ m=vy~<~͜?:Vb0ZRԞ^..:_*?$8ZJPоv=}17 ~(m7wLNUZZeA zLB cLs(>c·>*zrMQ4'婾&jtnje.` Orڵ!C"R˼-2s`GRv!ۢm%)AcQǶޠitH]뱥j{æ[m7'6ݛZ.nZzlOGݡעn/dVt ԇ`(ywg:i9x:>:t:qs -4_@=XyTg V66}g,}篟me=y nҊPjcT 1ykZk 6" !"C.RJ 1ѡFXV[K }VCK7$"@6r?V|pJ|'GKҕU?/SdK',?E=y)^˼Smsⵥ4&r3t"\t-~=GV?={;Kť^gmXx`k(H4wgWkaxkDmZyE~}z|Ea'ruK>?Dzȅu53%zd4 h!yVz|<ه&^}UɳvXԚY.,?YʥȦ9F=)y6޸xdJY~b0\~sO]qx(Ky$G ^#87n%zLph\]nO>j͞;u{HEI秗=P!@ :1"5xՉ֭?^9WfA?s}z|EtGOA@o{Ci^TZe3WcJ;_hլ}bgbgW=FQxჿD\{ ~Dmva=z[ +7ްTLZ;gu-͟8+P|\1]|Ժ*l[N^?YNhR~>7"Ea+Zd!G.|\LH ? 3ӣnÙYy4>϶LS״#@]܍C9JRVS6';pr{Yl’Vե3>_|P9]~X 'ZvWEƵdt|Q5g;RwS?#rٖ(*#t_mYtcy6 r$ |0m:6҆A5`d c hW.}F𑺛{O" IJF =FcuŨKHf,wʄ)y.o8`uvF`v_fWHrQ<=",9㝧vk& wزLzɛNݏ1f07d;ln&&+Ǡ'C~LRPCe~TXpCFvHݷ16|iAV+f2ֿRXP#QqCi8r+!_w(,LtAG&ɍr5h%`3d|?S@2?Q݄ j9)뫮㔼 /x$¶ -_an$z<;ަ!%hX,qћ"k^A?B00eY@~G a2$MwVqquaO4+yo2]d[؈dBͪt{D)E+Cg A"A^/VL1g{1kH²q޶h42hs`P &Izg2CDF[oڏtMQ$xFi:s^&9? GU01f&*{31gS?_Tanƥ7A`},L3;#zGlLflBGG,LɬhR] al)}7Y5ЯZd2(~LR&I(̻ixA 1w7ӫGNr (12A*'@Q k s5f/(x`8w3[yKX"L** W*GP+ɸ_P8]o 2\{ׅnq ;#WE&'l#萗<ظ' d1˙ě1+ڇJE|>.v r3G9ݟc?y!PCubjL~ ^DHFz $Pc)9Ub ]$P[NAoKxazdʥJZkA7UkHQ>"ֺqQWVGtH՘cAUBlG)^Ok_[E/%f Xbҁ&xL苸pk ȕNތM<>ҍMȕOތM:>ҕw:wZz|LlË:H.'bbbm`xƔg$;X ̋Ln,zma漘_G Oϥ.w-.Q ;H`u?[ <}7!Qb[89#vq*0w1l#OF .1:M<и:c|Tije͚'cLXތ 0܊1`s^}uL2UYrYg7^nerdad!c:xB,sӁuȊo.c sU*Q\h8g)5Y53ڿ%n-d%/J:`/By~2ٗw RcdFLW>DhcB\ck%$/nhI$27-`Ҫ7飼4c) z&\4h!F =b1%ʄkdYE0!|X?"M(B\SRqy0O0j8DxWuh GD0tY!C {e^Cƀ巇wƨܠvt%~$7d5r*\*vC+cb ۸CYE 1z LOEd㲕5 l4 <+Cy&`o,*6bYlѶ v7e?f3,FZ9?C]iMV\`qv״I;ej;3g9ς~jrͬm̈́cYzIv׶M~>#dʹo/ aBcj pM]}G=EJmȥ3&D:<#0!*V rq2ґ_K~X}azq`x+R=g;T㏛r@ƸHn`+$d1b Le/sxk{ˆC0"x6b@TKVB1lž1 疎{6:dpU1IIfY}G=Jg!-t4Z{nDޜT׌trYD%Vj+1!$,Ҋj#S,I1wwwc'>aG\]6jѫI1T֎K+bL㤈gvuЈTc=}gϣ$/Tn7sŇ1qO"nYB&| ܊Kw( Įݗߏ{')&zj>ߺ$=yEz@~X;^OTwWۣ#TzPmZHgwEqگ2DT9UC5|-)R 5Z6j|=jdݿ:| Q(!0@~Zj4r,J~Lv*s_7hJشLBjZaqrϟ&o׮3o5ȲἠM5/W#+@{NBn5uꁁ [>E6-6ldح/P_3 s |UƄ{#Ǣ7$dn-+{ yJ^M>ּZ1_RglgOSеeB|n9vᡧ?/!:N;.9X{glZ(TI' 01`n"',e uRA[ 2w:Q3an':St3+Bխ/">߸JKDCFNCwogl4?hAӷFo@:h[ĉ:]D`D r7 3E\%?+~Tcmft-Qֹd1f-89-m>$SOxea>Kr{+(Zbǎvus(JBSHy|R)3V%B>ٵ[I\`>Abn"t>C x29aʤXsBVPwBY0Mfnw\3upk7afA$ٟ?<% C(+)4J{_*zǮ;o>|3AV<^t'Oi C\I)є|x@Biȹ^.Ҡwr]j\a=VPؾá+;SUwR(M=uߕiYCz%mU1H{g_I =8Y׌+mwՀUlNB2aqT: h~=]WޖhJרB7 M. KgGBaWIZ2O/=[;t-vRO i{k٦2?G9k-@ͫ$vX~ +`ݻnqZ\lڧtZ@9(H }LA+=]M7n@9,1p'?,"WAR> zwRpQ,V`)Gc{-9ZZ1*ese)c^rd$ynVS`{J唘'X})h\qr=UJ (-J F6- OB"%=DncgQ0 zfIzm2e!}2K쫅~N-07~Nrd0?^oAs.h7HxV:nҙcߦ$~۴5 Dc7ê"%3!0Wul+F1 jZCNRRc}BFk1`ZD!ABs^@ +'şs*}s+xSOoeʘ%;Ogb "ʬxEC:hѮe6]f} gT 11cy7!/bu`0(k5UUsmFjs+jSqDZZc7~V~>`cvL Wk(,S!tLCMϲMZ}}"ռv>?]TF?Xb[% iC"Aih4Q dxvTW݃]5oT:ɩs sg@ @Kr2ƌ;dEa$T) - lhYN؟= X r 1ܙl}CŠmkJ&jCy5,b\S>]Z껴B~G(nڬo/ (?HUW&ء3y MJM1*'G^#ohۗ-]v{s4:@ܗ:f2)3b_[lŒ؋+&xUJwױWI1mo9$dqȊYGL,cth} ʬa0M:x,> ҙڪgLDsMuK[U̫a݋V #z>UkZc 'aڹG qZ'ɨs/_Rg 6ʃt! Idc笡 N }ٖsptҖsky϶嵘Ү>ϋ| L_ z> {/4MhK۱@Hj2d;bSr4iep7m }ui;Ѝ: kGEA rd4E,d5bNI1_7Sh&&;Ɔ1ʸ妓D bl4Lx"6҈|N#qd\4 :@c` N d} urh6 ;{gY*;ܦn*WRNNp OȦ}EfH)鮸f] |QIdӡwK3qfɏƾ"F 5 O@/7}pLK^ 0_f aj;yi'r KLgɾxnk<^c2`쪣ѧ|Eyu1я%O)fюY3e-s!&/.SqMu2Q8]2|GG=Jzp~^Z'eC @KAjYw5aB%M,hHHI:2jx>@KbjjDo8wkXU9"Q'a c 60)YвUI #`=ʴ~lL4GqW/*o5 +1Mb瑧"CW;~ w(b'#C1=\V΋)]5\\>@$/n2}B7;w)1Mk1M+/]!4gqՁ[7VZ;ayrumںX [iaY!C]{4Hĝ-Zx |+ k([L[<9_˟_ ‰]P٤Ym=w : E"y6M;~|W8^%.˹l[y3';0V܈̠eX9#ND.kXjeyH:Yt%C&F=2* {HnqGѝLpԊNPN:!N1Au5 (35Fc7&ܩJJU3p Hpj`ͽ'TZo[ѭzYq\5ٸ7E ;jۼ9h;HIS!Xo-@./훦}$SCF)ƣ0V~nc#Qs^ JHd hx? 4n[^ZPm슔qLj29+\gݦUhL [r/ڠdhvӷB5,2EA>-F W}wɍ/Z60FbbIٽ0Ol5&FGlFl|؆Xk>ia٣Jn~ѪIGɋձߏ;~kR2֛uG)oOI-\;4D5܈Vd-:,{X0ri8k7M4vQ[^Sp- Tb*ZM@_\_V6qFc"& [hx[TS;7R~LЩR`u὜b%#sfoX(wc4rMՃU/5]*0lڭ981^wO-{kh΋Td^'`+~s*y]Aq>\{i0h\K74MW_*Ww#ReVˉa䢉 Ocb  xNGѓCr;}+gڷ>pT)UMe/#!W^ϩ$J=׎}>JT2L@Upƺ)wՕ=aONa[LAٵFWJ =<v1bCfѶ)A&}{6Updζ17rmuv6z1\*BQtOͻ~5jVtQA<6BqM 7}5nEBC2xXäCcE)^C#Vl<,čku]<' dl `e}4s!ef6 =~T-דy~:ڔFB䮍7l!0 Ƿ Р2\u1ή*ȰK}C=3g$S2S֞0@)PL dgsdɦuݺ.p͓ۅѦ~ٴrgo[H!g`[NL}WVMꦼUP]ͣq0F{{e$V8᲏?߼RΞԮg3+JzN5=3 R،տps펽V+ Zdu50JN#=2tǍ|=Ct{VL N91Y!Q.k .`a+[lfUV%༳)g1ݙt%i)'WogS/3iG֩.qvu>1F4{ d˩ SIoѸ^%SHB'W|@X  'lRP;AŗJ_{PsSȜc%9vxU3nķ" 5S'F ##L灋<:}ѰƋ_س~"y~k )u!B wf`Cf:>K}.yp{#V RdQ2,xb{[]u r?oHRK"bʪԛ B b6}9&0+0N|FqG\,2wf9 d.P}fzsʻ ~BU,L' 9 Uu Y!K) e0%N}'w5ԑ ;-)qo2uM o^zĖӾ|GT^aVA,Q2\?"dg7U..e.Kz&F6}]7{U Z(1]"k۰45F U^m&~KWms7:-31GpbQ}z;;MdƩ 7fʝ\SǭW [ͤR×SQrUMB"sArᐹ{/.;nB{ 2WErA7)XB2wGS9d">idnᯊu{doQqH"@Bbm3,,rޮ5A"עye}}Р^ۧAvM *{=dDSDeN_L)m7hL6g} t(U>}pjcө hzM0WE@?BB ۊ$[9!ω@\FKi`z936/I@>N^T]G `Ζ=8PUӮ\J󐯿kՊ)6c* 38'&y*{Ӈ-bc7!PgĦ'vX,3:o]^Whn5GG6ߋ3֧I[_t9XcT(Ekƕ5c糨7O:a3[YKĽ3F=gt.Wbl&Y3R JH(/w_Z4_J#s6ǹq? oIzr>U6Hۀ[#s9ytǮ.:sƣyr+ 7rp ۾6k : F20>P|fh"2cD^ d9eO܎Q [*H8?_R4j _>YS_]z+trnujƼUo%0*P9ظ `T;iCϙIִл7vԛR}\ja 1&JTMf2[87yjTUJ0&gw3JxJ_ WV>@Mxiz#z|vCQιrX29tnkrʹ}YdD_ Xw꽕^/N% 1}*cWk 㑔&D >&85. ylʊK)ǰN!| 6e%P;:~Vumm{F2kLPXWL+ySCOrvʃ÷,~yZS{'y|}36?Iؿ˓YsKs̶xVM|'6G]ݪ;~{Kxd8O%Q-M sߘrtAڎzZ*<@i s鿘L^v"k^{4̕ː9ȒY}p(jjI sc;oThGH^ehO -O]L̻źI_3eɞ `Ύ~|qOU5.X3s̓c8w`ZxK?9f3+;%QDY9;I}zzoF_=@i/Q٦g3o kVJ}/?F(19cCj\ofWn#08 `TcWd KӔٌt+q=gWot3Z¿uί}WC زd6?7Ӣ`~rL`^ε;-?jSN˴#ku&}ɵ~xAtsQ|=>l `eCAKyk-ߔz>'*K=7('{}4M;Q,9jzKyoz!иkgoacIS?,<r('De#Q5Xd +I1-=3!P+S.#vˮOT%-tgrrcd3!eco|O#s)#qtNaR~tG2dٛ2瘘fJdǁ^8>|O==󫒙SzB H&+cUpe׾׃j築ZM.F)r.HvM=04ۏ|q.;/伩$VT= ƃtqol HFrrH uEtYR=,9!wr'(#i{ qB cȝ/>Q(,l *@ʙe;Y-i{#޻l1F{h;iQW$9cs V;,r[ t82rj }Q1 v5&lz~ pZ#&XUݪc GUi `/@.M!XǢTd@%G埣 J!YLx>Y+YŸTrI#y;^>*/pY1X,&E^ RQ-@aB.gm\G(Ux)YP])o=r1[KM|DI|9Xa!L;kCU23v|_w~τ*&+-V鯒wv_K<Hz$Af ^_?o Nx#2c8=i782ADLT\73:!"amMm',^/Lpvc~A֡pR!X;N &$?1Q eFrNRqWvO;r_&9Y~lBn2Tc%(xE Aڡm\-4C cYGb@A^E?dB 0qbވ:IG9ED2B<3Zwx;_u ć /K&D ɹE!8Z2Brgg.(ϜSHAebe J^Rӎc9p;LLq9o"#U))甘MsX!'IoXHk t R/\̺e[JS֞VIVV R%x&{Z< FSBC 6PTa\6@qJPGeh BĒ_h)fJAqS"eXM,S%oR˘[i(V@܏Ht)v3'[NE f?(1f~0(LQƀ)La sqĘnB1'AQݘ{rwĂ)Le3٠q+֦L3?lWvޡ޾jIrf lU>՚>)5dI+"ϘGt xRP0Ѷr2=AU?OS+0h&cʬeH."КK".$Q?9I.,0MދPx%ҒVn1Ͼ0ma8$5O?Ƙ<2fi #Ƽ.uއna5?~f#Y&0YC@H-)vQd 9m S4{xKuF7]AM>q8Fw/`nHBt\Z0j,{Qo}ZfitVUw]/+8u[O=zz܎i C==qvɽGO AFu.ړ#sYb8v/h)ef-0L:R&I/;;S; 2427~?nNZ ܛ}ΉQ!Z<%)brL=Ns*| 3s]?BJ5Y:ޑoBdD2R?Н!Z:@o*.GwNh@L-Z_@j:ʕHF0G}REVK$0h>Gfg"eŷH Ab±PidC w_8$z|n*TLch &s˒bwCyhމc5#cI?zV-zZ V%^F֙ϐm&V OcQӣ߂ nCWU!HTέ 18sI'Rt& d˺e!Y*G|Ht&5-H  ZYa ]pZNO6xaV!bE}im~u>rS VA_Yr`6 ޹-xf?|]bԎf˺eOO("Jn\-H4_GVFJ_ZzMkMgVNJ@9nd * $_kXQŮsqY}Z"-r.VCvs ̟^ǘ.^P$0_܂{Ġ`?K,=C'Z]s%?[Q>Ix J>y'ƀ3ܜ>yed>oW*(q|Yͽ߭GWlRT_E=z3*--CJlF]c7l{V*O+8s.pmywqױ!5}>h}n?{5t ÈO$akKp7;ޗd=pŁ+wF~d*Yc,+w<>ˊA]U7]z~/lZ|o#:pca'i.=tx\@D\-;pYG_砪w'&YClܥfo(2/e@ewdN'j ׮;\\GOu<7X3cM7XIow\xmc;/q% n~x؃G{>+괛uKH,o6lH 09dˢ/USK ~vrY*n֞{?\deFb)L1W:fPPpSJ2xi߬[4n #t],ܾŰ]LoD;98&YGF2pvӷGsܷ]>}*;rLoBac`mBOeiתYA-voڷn޸uK dl0cۊR>_)ے>Zvh5-F,\Q%J^)Uei; ܣv9G,?a\v 哽iU{9U :fLQ d0S:[ܪsxKnKO˙O rԴ}7cf꡻acuƒ90ܭ?\ϱb;H#qX ^6UM7j׭%I̟!$5c_ypѷ&C 7y܆:hbg^Ƥ$~`}f:. s ,%)7eS-2__jdb]o0SΆn\ĩӀB9/}qHF2#A#s3Kn|mK׊p3 Bwwӆ]/ 4K!\0ǻO'Zˀ1S=9˱f¡ s 7eGO'Za}wrk-эZTgߕbSsﵵV6 Y|߾?yW.E:^m`cDщ1bѮV/79)>ٳj%<79:0`ywJ㙖_Fߠ LI7e[à?ň%ƀw6omBt.6צ""R'D 9UBzÆ? ~&|kfk-Ͽyy1Zv$O,r`B SnU_ZqέX@:zn&s֢+3rm[4o6t'gZ0nZXŦXi c·%98d.CG4 kˤb@`eZy DnlW ?]|b_ݬѝ}֮gz|~r?;/3l6%H姈|DOe&fV5\dqkKWI+T$=+ mA TQF} w"s39dB#{gue֍s\9+{ $2wC'[k٬-1 ZlaF Ei7"̌}rU 0 oƭŧzflb1Z~ !Uaa¯T1. _7[5oeږV t4ʚ bz&S{Ui'n`so<  {|ثbn \~d -ڷlޖ'10$'V%DkMxVV׸#x)r 2N4Gr1hOP!w . rc U*-"E >Cd"K8UFHff\;p7TTii$<YoOfHW-o~6r?0yy8u%0mظ0␤!g]G1߶Xk <̵P 2W~ ݲfDP `UPUQ P1)3N+P" :"PC_ֻqXI|0s!SC#6jLZ)Y>oןM9mۥQI_\{O \BX3X[R#-NȄa0`=͵v z; @ Kу5^Zzew6y| *! uBD9o_f.j.:-Pnpa ؒyu_Һ]k ( jqeVRF*J") #V͹9e%uW.F f;xFJZ4O 'OD^S[Nkj'[K*q 2׹hO(`ag<]9iX[U,;*,2J@(-yrjۉu1~.L2wgzHS-ѭfH\OҎMҴz|[Hr v7T!Jk1g[5H:!q1=%$ܯ3Vt ii@Ķo_V*Fr5JW߿ɬW$2uǓ{3\9ӭ=N\B핰10(2UZzcњ0ǜ;:Q[L]9oQ&e]??vϹ|ۤ|L#s1I[ [1(z4ۻG}clI#sBNGNsg$2!% 򦑹HX@VɪLi)i]'mN}5F9 3^yto`S@mþ"t>\ы"p5Q_`y%]D¼eB77v[4ۇOCU̦:cmn*#;R8/T$!nt{fm`ogӯD,xWhWWm}d *"p@k8r'j.,>ml2DH[G`'ƳQ&$EmW,""aFػdf_"52V b,C9gY?󹔝[wC Vgh2}Qy Y2&%)BYvdu~<˹"jDcH1CEȕ) H0;0![}Rˮ$N,AWZ Q$)W>skΰoA dhQx!!t.?Oe?1 a<0JU&.-L0dnXx9^g?b 5 9AU\A@nNrt)i+w"~6r \]RxAb !W sůM̶?XyTf8HRHS\JᅊnLm\xj%>%4dDn0 `Uo~lً+sFۙ^/%R ~Fe H)Ls:LP)f[: o=ǘ)yS(ٗB]dƿDYFKPI|=hd_~ sA갸$yJ~8. vQYau#.V@ bɺEkv@lr` aT ʸm"0yXE},vcv9HL caw`9Y\c%nQ)0RtYҩ! uV/eP#it6ceC]7y\[B[IXII 3*XrKd'*$Y#4ӴrLM٪'L ۖw>CUJ{HXV&& Hmsj422W$"dOHD.\$1EQve>W0?N-Ug 8:qLȕ9DM16q;Œpk?鵣<'hH8]]g'M H1̇f=Mvy7[@s kdqws$0`jmte/{`ٻFiUF]}i/3 ^"= %V<&$ ,a-HԔ!@XįBn "/0rf'hX%P~,P XmbsNkkkjXy}(9-:YSO_VRAD\ 3^|Fԇ OE#ƼSڧոoT'>c-#\%F?3xW/[%rERU:Fj ^n7hOW,~*,;D4X'&U W>l(XSH22,,#r.:8)k<.sax GUn+TAP:y$FsW2` MY޷肒ߕn`1#^V65sU-,Qf- j<|UPj5[o lIw>oOЁL mu뜁^jXzWO&_p3mlE aEܝF^jY÷ǚoy6Ɨrk<|%=>qڛV̛yP~;~we%V1}ބNMB*lo߳jʼn-\\|])yr?qʯ6Z0oujȠCנּ͛?{ (?K;HI0?HʸZ!w'Ƅ߯Ā^m|eBz=;fx5{6n\wod޿w}-ܻ8>[_ ?n* Kn̽[l"wSV<-L`u#bsi>wtXZNGW~Z ;nCKOh*>p|]atobί|X Bv֍ws!8tFLc%WDH1^wq~\qߣy^߾΀l/Ȋ)gL6zT)|Si/= N~U^m39t" 'G=v/l!VfR}B.+A)/u@Ͱ~uL``"[M;,[rI4GCVUaSF{@UcQRA\:PEo*I{Q !i KUt$\II!X&TjuрbJ1T)tjZ[vZ! +sFts: qV!*? ȿ{]XJrh;|̢\>H1X*iP~so11Ydf ؒdZbNpT]\f[G?rF6~ s|Ϣ;⇻!6m {/zC~[B:.^5n88)Ӎ\mw}_6&. ݈ە`a\3SYidnMw1z9d.RHR(0ܬ#ɤeFȢn ߳ow?+n蝿:w$V6FYG>+Fɼ{r._pKh$3̟.ȕ,p 1QhPohrdK0AJ-EĹE3+fva/ F֐n꜓>]*[4h)srn2aAm[֩UtQ/oZͼWݎ!MKuΥ; A5U j:%ujjnzQHQVPCP#m] *#B*@g Y4 &-SHZq tĊ'uP q*HsiXY[<+dA@.Z'(U6םÀ@Bv%IVz?c*y[bY@ `u_!Q<ĺl[ti,Gؖww]=p/3ɡHvDc˵XkFw-WoǔY@ T5y\v]_ ~ɉELrkw7n㦆 \݄KqrGأŐVw61ڮ4w݆3O^#bIF]]箛\ͧ4F沮I!}ǁ-+ kdP -e2:6S9(!^S=>˱"s eSTv?l]',Dk;^LVTIt\2˥89`pB㏌+ƞ[XRs/R )@ b#s#RpuU,@0`ljqAX_9r@Oc$,{IȠ58!&j#Tnxab$ W氨2؅!]i8uH$8a{UZ@#so$1_ `U+oȕc9e[֢̔(b? 5 JbufӶ-l7j'Z0)*p\IPCSY%|j(3Ĵ3#>Ԗ*.mM} myky߲ږg-,r KZ?gwӃb%D%# J8T@'A~Z1\y8XXV3e)l*B IoWU>1׊~k0l~snSu&E_̾-/m> &K~J@Wi} (, P Ϣ0(aD WBXG $P^ F+2ZL@rY6]XT*KC8Ӓ؋W?R .RPްSyҏqr]l,Y)`}7Cj dU>]G l~QHJXtF^b 㨭u3sk =VڅL U^FCޭš> 6V\9cc{h%נL޹Ù54wԗcs-mc\N`dpn ʐ02{{;vuB $T%+{g~sa:lt: g19DjoW~d -۷ji[Ft[9lb$\.E*AqI\KX%*bݟ@vc &-+` a,SXیJp]3X&nRa>F!$Qee7RN &ɐԁV>rHp9|8Xc|pc *|O;S`L.iF.T\ёBL ?fފ̧pIzr>U6"F;E se.6֠Snh͎}:cWޥhj!ki,+7]mGcz]pq_55]_,٣L 0+w6TZokv68 ȃt+V8."ۻCj?Ǽ OGOit Ȼn6!KS>$wfusN&k #?=BamT6Ndz#^+|YziVqy$iƃ(E$ԛW]?rw>)a+wfLo7mq~kӥ hSD/:#Uo.%Ejg@Xj, )yWJ IDAT&_v )flXEAcHV*-4 LHhdt~W%@z<'\ tPYSOlߪ[h[X)x +b+UhP^0 K~0Aߥ{295p]-S?]Qcbâϗ͡t_26i_Lt_?WY=c͂Ss˜맭|!s9~@Ȼf9'?'ޑ9d.닿ݳzᚓ#1҆'S)}/"^E8-JnLNPZFכսcLSÿuί}WC زd[eE4B˿U@ӽq0b+.(3]/.ڨJUչ9RnGQ}}9M64$BA"*JG)VAADEHbDH&'HH/;;sgvy~'3s=9\ s"d/>Z.*WQ 1h67ɀMOB>R."xdL_(6a h w+_p &P72S}aUy@X'@AB{\} fw{eo9'7,̷S*"ZӅ2i5a㬚s{ܔ'm"‹sFyrVHK*OD {Jl^S>JJ0_Qzu=nc*:OߩRGH}=IOtE)Xĕ.ዘXjypOGujV#X#̫[fq/ .unVX9LtIi~ (@(N$˰X Sa1aH]"l@)C.U&m6d My/jjk'OhJkP"%ۈ(,Gܭ5s7 uXK|jZf=2Cd>42qѐSqD҂/@[s?Zu@|gO} {-(g jH3 jKͥ!S]W,#&Yn^i&# 'xw_*B3 9A^ DBgNJ]&Přl~7k= $C5s 4ރ{-zzV^lkg '?KF1!2Hŵ(6uQ [- ])pkCmx-=!G}u]0QT-$ФHِ_{{EN5m<\&I'ZӼ;YjR @А|9Ʊy^;/l%_a~+ւ/L=E~m"ڊ[޼bYVYw0+З #Cb\ sн5n6' pæ.5s&dg1 E1|LX'iCM\Y3]d4B d`"z1` %t9ʗKWW$pQFz(mTDV\uceeR鐍̓O޵wP(:3~nI^C{P (QL1Fxd_MrwZ`H!~Iіk {LpҶeRڢ/|w>,ܓ^Ms죤&\ٳՒVLUعSzBKQ~C3yeu6c'TtjȒ*ZSn w.bʜ6Kȅ%Ð 81ܳ|[3bG-70 Hp9  H|^DCG$sYǔbɏ4-b$^%\KOǏ|Mіk~ie9!W4^cz5;ϟŞt +d%U?9nwVfKeN$(ä׵rAM^gŗ9LJ5lX%l~י|3+G&nG 8kAD>VދPaݶv+"A.{(ީp"F3AUH2DЮoԑ[M?(NJ! })'_Y+pQ5lj]$!\]26w?xM2>fk<.PTtP?zo9^FuY.]|_Tr:nxo4r̜^wk>wN>4TEDI 4qOD3rg c;q. 0Ϝ[CYWGs^>wX䀤^sg 9C^0kC=> ┈;1wQIb S{t&N28*y`R0Ym%}{{_M$) ^v/t́q ੩&J3M( aa"6 }l+NXsLvs"(D8JA^|e/ϜX>1kF4?G H&8=ڎ2THItvh\A $́C<}3bogIwK 6nk`1avg'S%K49P{H>VĹyz P0/=ܾ«)W3S@^fn+!ia<,='<.+%-:/}]&m/_\vV'H[>{c[.zdѮ9r/lT)h7ెJnmGd<3aOԮ);~2}"b =2)ʽc36-"Bm=w-Z1R?s^mgT&6qU7AϯMu /1{HV/inm9v ttJw_lz+*{Zv奥[:{ʄ,4I8M;KP͒somCy+~G.`uGE|mǔ^j\`xaѱ;_ZdIuY* mHhDDKGe΢[)+zʒ:;>"޶=T_527Bw) DP(ɠOƴ,47hORȨ!Bb" S \=|%^6a+qn4`o$ɧ!tjIࢨJW6E㏏n(]ԡ=8Q2D kA!VWnf,Nzm4Ӂǿ, ޡM~KnWq5q%/58`L}_r_EJRxqsm}aoAyYB"V}4~/+iwIgN#{.c]j9Yb<}x |'5{k;|y7 T&7[ZOR ߖCWiKY*1!6{˅ XtuTu#fOt j:6#;< Ylf0,wG=8˷`ܓNb_lĖbuz4uԭ m#6L>KZ A!"H7:#Oљ%a (/{t%7$VDe_!MkD$6Kn&}eW%pQ n AMSθ,]XN!f#0|Ĉ* tYhv$)o?L9֥=W\hH^BGS{ɕ۾be^w"I_.t6=Nv"L J\=Bcà8,[{ryN!U-xU^?pQ_!!XTuY@ť9o$#bVSѴX7![ΦJ^S~dBܹ9!82ꇑ{ʒAJse~EXКq$Տl9usŰ #o|$GEvh>{ϲ_Hi>)H'5]սVN}CE\wMͽ9^ɦX> ԝt(aD !s-.P Q'(f; ?|"vʾd 0S{;R iͽ"ٵy)s^gmH?]Da&#-Ȭ:ccџT5<_tD}BO]:*:*tKIBɶ>4]٠}ܺ|R|_Q_`=нɐjr'v!{C=Pu . U SfHƑŧOe8Qxs)Eԋ-kFHܤtj̽˸J/tzKl*x $*}> s>X@Z~/fWk!QEhkNia75|q[%vW~zJR=uQF켾\nakD8ߊr@!*G@\R$Ym @9J.HUZx @ k=բk'=Wa5(9+ (DZŒb(v:& wđCp#!Vcqg@:5wd%)q/tƍ"!)qr̀"EjlÍW^W xM3Z^ޛ=D:dʩ'>'nҭsr<fXz1 }v-,O&e .޳#<.~[6`C%Qҷ# yODI z$p󖥮I.G >YEesNO vᄈ2}81-Or7vx{M@\#=ԃ\R#E&f! ?za'y^M<|˩`ĒE" 顂"I+ =*Q4 eXJRjԜZwGnA!!3L&&yj) "(BbOv0()&]Q$29s\{d Y$$ Wgl5VÃԽpTyLe^w{2MQ@?<YY6@߼hi^ٗl!P~y7%RJ" [zQ!= OM4.f)쨨d) 4(*#ӆ|-}+-8vt.V:YsVx|{ϓ&Xv㉝}kGrs'>4Ȏ@wfdg*\0ף_orvuhWl&J=T8U4^o*?62'_ Td3F҆K/JMJ;%Ò*#VHgyj=&G'E((KF `68sȤTgǷhnUN{<5+v<arkEz=>rld{v 5z|哃9.=\zFBv+5p{|$/ipa *y./Yi1 jH@XA"+ʝlSAQKt㦡Wl1 *P$d gΕ ,ކ c17{g9;g^Q|<   }TPk7S4fJJJJrJjFlt$0݁F[jPB~+[49stv*F$d&$'f*˄R|zvY)ɩ䈐@G<λEJ:4FJJjjJ2b0G +/G=;]hJ!Dbu?)R*X@TyI>Ȁr j$.~R,dpE|ZB姤/N'6J"@o7 7fHjޓ\kۖ0%52?,8쫤x0dHd!UCosȻew ̬/GGobuJx կ_'.! Jq֯eC{O*oiC{\ $F7Fx oPrĖ"_%D%Wϧ_6BpQ IDAT5տ}TzaGhQcZ8?-қ'*?}⢣#lrZG32ZNѵm#?8=MFޤZOFs{ٓq@xs)!$!K"\~mԘonv[C7lZfL}|/'V :^ճSd,wHFynbY/;Enur]ِ䮋{r躐w]M0&A1ɥr6]B{0<'_sUί/IǶ|Jޡj1QN}EŝHWaA=VkDxfkerTV\߲>5zOJjuv٠ɕ:d '澃V. cJ:'0f0;<:sEgI Zmo=IF~.e5K؊)h`MQ/ƠD uRX襙}3%DHə!c, \ϹkmOlDŧlέr3|rW(葴f`[ƺYeC*1BWQ.Xj/~L]J1ȯ}]ag7} g,Ou{7|kҼ]xfʷy^>r4F lʯs=4׽^\&nk8vܨk+Tdmᄇ쇷(y?Gu\eV?[,Y.~̰?2 Ν}\ݴ#8@SdMs`&~@gu2=~w_Y*^AEhѳ`s__ߝ;9ˇIy}8~ mN9IEKϿޠv o0.! k%ҋ;qJn8wJ#{ݲ/MW>>Ts6*I4|>kj=_0'7ZTބwb?RɅY_W39Ό4r.pygۇE9 &j-%U{D¹JEj3K@D[X廮`)Q[:sS6n8>}ȕ[vuo?5B?9=y;+*Am7h&PƾʜZmn>mcX-1R[?)`0U"3&NEԕwdTM j=W>0n$$ rP\Wh\.l[-ya<7Fz Je-je O)Ebb bxo!]V zj2D&?` ģSE'ѤFyiOTJ 2i{^ #kVN6Am;~rkߙ#t,@~-1i^䆠YlW"Ju}*볯F"^ u}$|Τ(YiΈY6%^xޞhG$.B=` v<@p$:F4nR@2HZBNz@?1H)8bMQ70!N-Hݫ?V"Q z |h'[S]ajukY'bn [3]Rpifv $,O*o=sC̠H9~V(6II5$9%7ʒJSĿJDp.NFTf@STx'~H+}BJ`X=_oWB N&ŸW@|ah1MdVe>!jfEFbJgl~lf zT}pdn7U^&>4Mhp}uD!Vܔu[(m'Wi1}|ڦ-] bQ!ڀ~UЄwz7YM+i$[VixyE`G|I|$ş-ܛ^O˥W!݃ Y,9A65L8 7}?)7 8vލb΅>;ݡꘪB>0xy%s=?:.]k iVq}/A3)kyOUodzx/EOPÓJ IhM:$2$6&-ӹ2t"7%d@D`GPd"*4Cs+"ʈ:G"h}v{͟׊L ctF8O \|8DRo°Њ9cJJZZq\.t#Ip?a#=#gnyo`OC9o[6-fN뙷l]|>ukIL?jxY.e:5ᓅ]+9pgGf>ޅA?&jfW=yn9 ‘TAP#KAͲo&uc$}onTgg6gTQكW (| &c Qo7^|]WBgPCeL/LFybU8R5Ih7L8"wҘl@HLjmلT~(5׋a D :XbO2Ȏ'$eE$R .&c $IseB`^n ﱚ%v}۞~H7.٨so]+B0R(#t֎M9$MOe_'R뛣cچ(Yg_s,H6<:zY縛zaܮk)Nty*ݾS$s-3ޘ DG9#4#$6ָ5P|; itm򎥟|\k{;%sXgx(CIEFn#坚?rF7bam+h=?p '@*՛J>SMKCfQ:խw͜[y0Ձ7gzjZ~.|)Ezٛ;t|ָ6ks&8*@AWЭw./(3MmjoSSqDŽ׮!QAy̍J>d]1ذz.TBDQʐ1?K}_+@Z&=':wAD, $k|VcuD>H<,^TfP' &Q#.)-&7xTi*(A1)$j̓g bBQ<^$DDwk$#9rV"92T~‚֖1U}n/7'}(;Vf(IFJ9@!I3.{/vh/\,a@Rx5 @ 2߷+*_(mV'lI}>咿H{i-pzekܥI.hDD%{F>кcŷˁT%/587Tᄑ_Y<.B!MߚN+_ ws}y>=B t[>}{W9;ߎܩS)?_.saCS>c#>'>6{kλ|=|`?o<|஗9UH:d~b)ƽ:3on<';jL{BeVG^vaתem$XeDZ7#7 KO:#G׾bow^N{=-޸Wvͳ|q"S!Ĉ8Oi4| _rKftuǂ."i-Hy.w-,vn[;$K˄Sx$'Ո& $KWgگd}ve~u2{p~9{Ѣ2]]߾j 7d 9~},?5PEU^U5^迈[fb{:Dׯ̈́%*JN#(ӞSZլ8<*vnH.#qyhG_x[ `޲e"QALm\B8{'P#}e!XϨխ|{~L(lpnmvc.v7|X8,:lc֥"/\Qs6VȞQZ0h?3Z d$AcwI_p|\Q\!6dw*6qT?'n;Ԫw^(PIʅ[ҁ"Y 8I mo;un̽=$W饳Lu%^U)cZ9:3n䒔95#5ߊs-H. f)υE9!s?*Mi3~]v>?os鱻2K׷9AʑWl|}lCE=yc"tR{.6yZ&cW.mo~um1y4&"-%qγ!֗jILyxge BQs133B2G|Pnl}ʺ@Oy&OPd73K)^T 5 c=;"[31#Q]J!LcJtR7?SP̭`# =Ñ~C7l""`` [8zp`JQ1Id|bz [̀ZXHhy6\v[/\)ץNI3WCB=HT@ћawf=Ī#Eg\#6  El*B O&& H*;RU$HڥdA-K:/˄H{pq_F?^{EvFdz{!QPzgĺ: 䞺Jw̨,ͫ@!_{ Yee{<9rXW_'̼_^b:м'%y'cؚP^!'vu;ZꊍWP̔H]$s6u~JX "/zV\H0#Q}?Tv`~jϗϭUdiˏQlU{"\vDV^_wݲ d*eUiػ5m=щ&W= @v-3GwǨб-8SS$֧R+5d+o5e𷆜aЪ7WmRZ%eon;aSwbz^}~>TF6^`YٹCЮ{& gmb دRiA+k_R彺{*w욝T#Y?m^DJM=XSl' [!GUVjAC,BK?M zDU @,%ِĿkņ)dnpT74O q 4,Ls R5JdqտkB^ rɿUG2*S1ЄS;ɹU{0-o(W  qD $m1rEpss8RWT|wnc'W IDAT@Dߎ̇UO8Uq@RD`7,Z=IpmQa+n\74ыEZ3O @'g9IV _*][qW9$]}̂?9}oM;fv+L;{??]#ywoo N}Mz}Pcޛ3OѺ@wt@y~8~N}뻔 `bay /M,A>|}2P{ϙ=((msy),:PVÝXq }U 48qsM ~m3,z|W!R&A&QLAm=(t&kLQ'o!uծ>:  h5T$mܡi:kCqRdm nbI6 6S=Nq׀V8˰?d| X!@[ȼȓL'r_`@kN?/1[SqQ/2TDCfGKWDFw}Ih1H@Դ@c׬h0k wѳ-!p{Q4n ޣ-9\GF K!}Z6!RE"Upo *Tė/ᦍw2^zL31A߇p]-@wyl 5札3.Ӫhf=Uo_L_iBngB?C@2B5<*ҥ7} cD>JXIbQij )<Ϣmh!GZ7>^fuAEݨ](6|z[clXvdʤŔPXq. Qo)P䤾Po=m.=m4f ]C&2(R~%x9m(C#MSIƦ֝n gJEFgddQ Ԭ2w)#x˄'lYۀO)9,&<*y"DMhkH(  Ch )hPZY4d]C%[{4p(H+_(G}<^h I"r}z| _O]ۢWd/C nhO@GVsVĚg&=-0r1S#Ip |aUV[^9OT!>~ \4 BqrTZv5C KCdsb6&2)F,2@`̞곿=`4"Wioū"dluJ3'gS!Gf ЩT{0TȌf i3LpN&^'Lo IC3F}C`U Fv&P݌?O Xq|ߞO՟AB+Qi]aY#ӆ-5 JTSf̱xžILM2 sfA8T1oQCa'r&)qN+ܡ`۝!ƖݜBlCԻ(|O7$]Hj9_?FjZ7EU%e& F_Z$Q3c-0@@gD 7 4|W#F+}(yg< a$,e&C &zpuo9ߥ` 5zS47Kj3\3Fc*$"=QFf6ZsSX7xCp v|j.7S^! *ԽdXqW}Q\_r[ ip#\ {Xu]#~޻*V{O!U@͜zMm_}!gm /SUZjd Pϡ@jslѽwMl,׵jEkuh^գ;Ws-ݵh}SbZ&3Ϛԩ)-#_sV̺U8To>QLZg|!"T8v / IhH;{(1^?gd9sQ Zc#N}L]%cq}A?%T鉅(}pK(qmcʐ?u<I0ըm/O4hv9=XH.4z_M#ZqO8(-KBRPg`qm?^w @xoFYir˳e@4[TG }(榢;٥t d9DK*ywwx"E+0."$+X f Wn"Tͤ^ CJ/vBPdnYh`lSEPHDr v 04v[u&VkM.+gm}o`{fm|!(.4{եLGb/v ;jH[iQMj H"ǒe:|ugO dbAN?!BMP4:Zu,Ms Aq ~<"[ Hx~洞ߍ{a3?}ooT5n̬O_p0ce՛=P0 d9ܴ 8ȕq*GM9Txbfg]t jĞrkk, q?7dnȮ}>ݧɟ3ruF.k.Q%h\7?[Sυ¬ ݼ}J~mgЋPі̾QyP!Otpi42BA,/Bz^BWK)s)JmОƻZĔyCP`Q JhXƑ]+C(o=IXZ ;thPʲg.RT̈i1eɷ?iK?G>mȼwXxl:O~oJd#ƥ_xś~:+򄹫8vȺ3W}]5+ /1oƣ饤 zG]rPAlywo{ˤYYtSqXxU?{ apg?noލBQmC`P7ݖ'{Oz7 S`qn~Gd` @j8g#|5ҠNSCw͊#ץi: n񣛹z$s+B%T?{K -ݧ_W+7W6gN R+(F2[ι^+e1y@ uțn+K =xѹ;^&F=Үˀ28ec_F|ȭ5[&SJcCu2?ٕ:#}gJ0nuyKfo~I(a/*%<;鵨?W/kN#ӕ! :ˮn,8SINP鑻'%.6գw甃A-&tbӅZS'Ƃ?"XO|qk֨24 t2XCy%1T|f' P7$F X97p4LBM>R}(=Ͳn$ xSfm$xUkC~)̭񰀌%` TEU274fӰ |_aRT i%,UG'QaA?nVw -k5d֑\Yu'x؞^s,E˕|2RnFNʸhv뛁%;O I>]]n.۵}~`ԓ&(z5ϛW-?pl*`Yf~st'5ꛝ{z, @@{?f+C]~л Ѡ^vE:a@)+Y1aPZo9#.ʡ8 UC N,箞8z6J/2 FxjǿhJ#G/ed ;)4fS2T]aގKy v/_C03 FII¬u@(:/(Ү1S,}rÀN k%˂ 7)E-֢]߫5O|DntgyYcboaaV')ڒVkI5﹊}nHA"4~l9u \R{u_١;/˼>׍|K♼r;6i[p9wEn5:<[ü  l5W2q >E`$@z:hWB 8:іځt[Ud.tCŤV댾 OA\aɷzmż lsΥbu{TǮkFrD޶zlۨrFNOh߉7g=f_ fſJjhZu](̠D= ->Z:ّ/FMkhLP3bSn'jDʹY}cJe1ȐwqΨ7E"(.A-ُ|e޺pkkn/w"eLz%=FXr1nbW|ɀ΋ߑaf4P$&w"eE BA <)ѦQݰBD-Rv ss2bNAESI,3nK*8(-QJA*RQ}m~PÒTagkOѢ,X|G[b߼x4.[4gOf+xi!N(6"+BڎUW ),D aOr$Hq9e JQ@X)s*J[%@fQnҜ~m( 'KS/'iE*( sAgz+4y24z\Ͱv`W<}y79d '0dJuEw}4Q,X蠮uP&䊶YS:n c~qnAC売ISzL$=4փ[( ^'YA}pt\r$ Tw3XE;}`3+e.*TA,H;QAJ9{D:F\;"-Ee3 n>>nzDs {_1Ïui$ /zK ys$ xZ ͨ7ƷRX?(XC!5&I] ]' Bv7R}o?ò0Ă'OU3 ֮ȺAg y""Gwfgڤm~X!m'QBHpӓR^tc 2-80.ZPY`yZ 'YE(U*u]WT\@'t=\HIHhUh캊 W$9{iaɳE!38{.nQH6s~関M.L: P'+n4o*mW%7v w;e_L7;Zͽ[X IDATO?9^{5'k({HWxl7hX¼mkt9i[~+ohvEe+R!ߛ;]cvN.w̼.+&lZկ[f+F:uWr'^5֫G8I|B\\B||Be=oQH "*&,n˟7iBһu< <^ =WmmnQIv}^. Xr^nGQ!ԪEZ@R^po7jV{mW=m*xi'8B')J[k5 -`Q&ڬvxPpݶ[s"AːmGv2ZjW1-Iܶ 5+W[5XFx1kT:Ts> _{!X\a$Uj%W6-m=Q׉Ѹ]Is6>Qegw,k8 VmmGM'w.$@<~5w緿\j_aߌerۑ']Ȱ(n>֟t*u-@>&z:8=˃̋,uβwԘz$y-*ACvE FHne^y sUp-w1em:xWU6ea9!2hj`V<(dbEy'E2zQwǥՌ!, !YFIXHh րԥ;|#(sP@La)s|Ql*e`Y)1JPg=<.#D%m wk>5{?0^u;IYk% ܱ,%?^~? &B#!:Txԥ)s^DK))NyW%]YڭN 2w 2wM-,27?cq%e.:5N]Iu_  '/i̵7"{Va|S3%mlf?%< ~3L0x(J{JA aY*=N6 d?Z\yl@;ƚ+Z7ox [:cu|)"r}C[os9S쎹;ۨ{0SٶzXU|ݘGWM~3z kmRXѶK-LQ="Iᴒ)~po,ώ>1 2zvۋ?]<}{k6O-|#~xp{723c޲Tnϱ UoXܳ "eXʯX+ łyic<;'y n+9(-Ѯ!`-֜ LZ?CDPbz{"pcyt 7,GA) 'X#Z%ć- 5lYZ8z%lC*$$]p9@dB"'[)s{~p&1ڳ["XF9D7AGCOϫc D*F>jd_hh>iۼ:L`;~5YM0Ddع]W視{ԮeHA jTBw ~$D+ŕ <-&P0v2L)OCQ"x&ĕy.POB(+BP"yKJd8E%&ᙪ#P+H#6Р{JGvxk|d/ 2 #\H+kmb4a LcL۾d\F.I+Kȵ x=SӦ2uw*TDmh ";:n>ƴKȕXp]DT6; Te?VԫV8*<\4D́L3\ <@ABe) 8Oir7J^K:Ҝy2U(xFU\p) l22'j;(n<5הSP)tkO/m_fZԭmNP u3UAK36Jo@@ hv#Tp%?r'pXK4UV) 蒈p;#ޑTՍOE+n*5jA>϶m"D'w8T{?ЦD\Ԉ!6 $gSSՀI@e3aBSà#UA( bswT*xAEek+ e\BQ%dOB wp,BMH1;DkNi>"4;̓ wQ ",$g{ƯDs"qBD{]Q29E|z& Rq$2a'^_g 41:WtꄊGs4c\uW/5C#)M!R+t/Gsך#tp4cŧÙ[aɎKg`<Yy> HUj#}sc W=9z*R=kwr?БZC`=՝JO{3';3f Pp`S"2!nnȩu xnƗ?wK׷Lma\rI}QqiDYM*]He-Yum$ J:2a dj.tcº|Ԣ:XxԞy{fޫ7~6C  NȝTGWf%;,5Q4==l*#\9X-hQxw-"ؾ6#KA# ]UٵG@9#! AmQ6e{+Dq9k蔹nmuWxy42J;uǬb~ "ޣ7{VLb<}ۉn eׁgәsRජUUA{E#Ei5tʼv7wkR JSn]5oɑRԇuwAֽKg~& B`)+A6 )sy,\;_i <8thgՕyXȵHͨ^0?r Scs~җ6(sUW!"2t_%e9q7N_E,/yָH$ k|2í?fMo 67cui?*/&%,C}MV c3A6FedjY%1'%SM^䩣&=v麜 +K foYy0i\R¾{ QDqJYgi;5%:!*.22J%Kf:}D[/CYY]GzS&]AyI ’UD:(|˼=t%<u}q虳~/}};gͤm'}͒ʉˋLVTX,YV9bԃV=[H$W^ӽ9( EZg;QDTE ^8uG7h7bN,W\6v]?|7ǂ727ͤ-5LRMCͥA˯eF'6KP%&\`#L%͈#)zIRQGQ7g^143l]v)U?>pKFpmgu3= J" q":Փ!iGIt#*-y ƗvcOWDž*pkZ!+<[fA`' x >; dxd<}e.85Bt=gg]v0Qa[5Ot㝨?p6m豽oWqnZ۲)l}cc=WOB&~w^nql|7LбA%]Q=?^v6Ռ`{uO㏬3wBnyuC}7G[cnXݮۅVlllܼ9K o@!'zTsglP{x#_9d'fBuߞ>}l$?ڹw+c*\dw2 =jQ{}'e=Qoұvѿk{Ndm/c#^ ,Ih0÷Ҥ䣗A4(0j<̿<; >}VmMyD]{էiV,_y-:cZom3hN M ?y9r R+/{ӛ %DkmP=`YRyA69"g܂k܃gk$@?pCDж;-zwGN3/>S/:f׽] J~kB9XtʞU=Bc!fY=nō ۃFJKx.T~yiC[XnKPgvO;o]S{=BA[޳s.=-TDzKԨb'ii㸩IEpx#ȸ+=EuY-*u0-1~dS")sFfA~?:Uoƹ5K|Z'ZnxQ a~H AO!- FFNU{EM>{쳁VtgR<`W4<ekAMj։'@co˺q7ӢZA2W,8ބ!%ƿl̕i.rww?tY5jti||$Tfdy%&05 o|3okV+eWF5x Qc)?Lkz#Vi:yɔ&>霠AP6*aBA|j4 .ZHq~~Pھ4t9/34li aTG֭J,_]Yɷkʡ_e#1b_ۖwɿ3/Ϣ2K97vX)^A#{}ͽ*/@d_IGDm 7B&iqD~ _K:Mć~bNg[&}ߤ_-|r%ޣz`w+7mHP&8DWݣ{HiT]@:K e|we"ܱq_$Ӕ -ݬojK Fxi-3ȕwNY2v_LШɥ2fQ& +O.@ ])[B<&)-kLj^I sϨXE uSV-Kcq i"|}8V0WW/8{b}wev^~.e# nA7\~}bh)B1%X' u(ٰ)w4}zG'<z5׭﹕tў6Fq0\l+S=8yCf#=I߹h夂g7N^[bѳk*]Ш^{ӻ~Zz>M-V52Y fUocevXz;fOQ`&ݟW+O\~ؿmA`I‹]4̌3`U}Ve~$`wTL(ZⲎ|M;Eʾye K?3#&70I1ts {el[5D *e]& \? Lm}a[f/yɳۇvdUKfVnM#ޙŀ0Dȹ8OE:,UY5#q7}F1HU)>.KHmCߪ e~X2&_1 {yJJ߶> W2+74w>b@;"[d_}gA9bJ#\-މ3ƾ+9eM'G&Odߕ ԲNT+fzP.~Sς\^NӹPr 3173sV7mе~1=iP,]Tz܄Ԧƣ- 6 ߿ŝM7X|Jyt]Utd K֡kycƬ)r2SS.Kk9mڼ1cW=.,K<l C:fvGxeݎ/% 3[V*4 N:}v܇z?frR=>w{@Fz7ʐ%Of[PQ%/TCWVp"h*LI쁔>2Z-ۼ666j&"t.tPyJhd(i l/"2a K`xukݗsTeZ{ D3ٶs^Yi;N;r~r4!}H(GHϐ'fD?,] I[\mZr6+/hahv߰on-秗F.ϒ4l![`*$³r,Nn យw ED,IxoQ|Ò-Iu&)drIT(QyEzX A-2Bbbٌ75 O@I45; 8 6 ߔL%^aPcJ28B?}ޏf?dW mveg((S`OOGbI7n!E+d{j@(LQ By)%6=:ssM8j{V\[XtdAxJ '/Den#ѢXzGzW{c.ݼ;zm=銂/2XUa+rbI*/FA dB@,rm/0$tXZGǂ 9y7*jPgV DLh޵/ 1i9|ȿ!^`IzHm9{ײ<\罭|^IQZKe;UmZ)x5Wp}bIz.\IQ79Q3$fcc-\N~nKwl[7ݴRұ2 vJܖ*fwY96jVCt*3]|"Wċzj_JZ)smMϻWU{}h ~m}g G9WmPqb+o A9X)|+WKQ웕G IDAT}n4Û Rf*Dj^'|I "wh5-ck?*LӴynD 14^uV<ѦT-acc̶攋hU_TJZ?HgħJJ4q{"3K逈#fzA4c햡5y;e#I/{A,IOГ]@rå%Rh2zzp E~na\.9d&!Û;o1moƁ|BpkE&,>Vl- _[T,!O|>tF"rIBk*%,-?$wA''+j!^t*)F96/U~*3bv&).b끺/{%e]=\J2fpO~yN<|uHnĤ JШ.*::$ڭyu!؊\2"!|.:63!6\9v G#$n!|pfljGַ\yX+Y-վ|gܼj׈+<*Dʏ'|*6>G<)Iܻ;䕋y e_n#9]sb`!^z}ԑf ;'!Eww,eO7^f>nn:1Vq2Ʉre:%NsLOyCGNzcIK ê<ݴqQhh]󎜸(9ϳN }#ҷ^IH;jJ%y u缌FmmypRfJJ"MmhJA]T^^!UU.-/$/]o|c w[{]8b,SRFw M~o~oCB*։ΣڨEq啽x++4DHUT(9Clf1=ſ}Hq߱Z;v;7Kxz'xKl~%OD ׭OHH0džk;_M+ۯL|x _̬ed#B<ʡ~Mp1e>,+-&rP9l^KKnq)wFtYI0Nݹ\}pbfS&<jL)4\Y b*3xܬk!Ǹm>JɥoH 8Aÿ-@yݿ[x< O6N"hOȹO'ACj;H7#ad]׶ ᮵=Wfk$9)M{BD/ ume)se lnq(-oΝS r^ں Svɒu/͛1g Sw'y""\4eь [:yat>:qh0Ѝk}Oߧ z c;б_ ٕݳ'}PHO*blӷ/R˹w=E+UGvJaRWCw:S^ѫū-LY-,7SnxkG^2cJjr>dYh1(.|ۧI+"=53϶ ;k]j~PE}iɧgٱ7o0@IҥgMe&<ҽRBG$~~x恥{ Aޘ"U0GKƩٳtNH3׳֢)Ϙ %Ig'Qi-TQq -%:j,:T1*ի$R+J׎GRG#4YANBTPb*a  <F翸2&MYk 7I}@eP/J̛,5>޲ox.9J] ຝ|8s.'E1j6L$%Wz :s(߹pʈDvyC -q#*59L Ī.P)ʹ )T^ylZxڈPqfSTt ..A\͖tD #@M_ #eD@E ¿ Eu މQ'*rWZ ˓ J$(dvjjЭc{SMF0Yr/5bSNdAs-ScSXM4aJfU4Ɯ@ +q9:ᐤ`UԸ FT *90$<:&81 "VD?e9/hІv1lqY6aMlHb#N3.@9HuP!BW5jh8DWG"1QQQOJGd63PD+·xGQNN,l=<=Н&_ŬsDW63fgL;BW{LmZE7N$;!6]$-&D_V߈lھGTȻ U#IvGȢTRE( l? eh܊TvWra]ߡ;fXuK&.]: !:`g*UjW}p/ϛl WTOW-"&vTtGq׹"h8OE"5%u][< wՙ;Td*8J 6f8P^:>YTݹ&7Ux=uv8\1MvL_8o]i|-NP`+R|[W\"#NGr^(Q# /cOLh"9ERQ_+_HKK*vo~6&c_[k9rk$gpu.׮2_(mz',_'T'O iuP&B&pxXUM)E%TgǯJ5F VxݥouPXaXvU/ȁ%qCiMapt,!9ryVA12dEt`U O l*zYyH8d/^.G㹴eQɉA^+?թ/ DG  aUnu%T/݀ivw%DaBq 嫠՘ 3ug'X!3?DaK(ژ}^b]; ߢD"Ly)bg@2+EPdQٲ/:zY:Ǎ{ށ]`d^Ŭg\=X*0pNReIV(8ᔗ]ҕ Y7yqK|8A+\*XUxH}pQCHyto!T@cҿZ:,wS0 ~: ?wpޝ/)Wj$/ݟO)MFtBg cy۠.KD MזR[rϱso8@^4Ut ʻ QWۢmWTjW 7wU7DGoPK&%Iۥwj<ܦ^6C=b/cNWSԪ|kYF sPV銠f}<4en5y.b7"%yWοFJ5lԸ!qцa2>n9Gol8Hw?Ѭ1-;gI5 rn|?nfC3fZ˟9;Y)p u|>N۷sw+ݢ}D59> Q;T]jR];ͯLgm.5cs ݷQ*w&A@RY:Fv l]2Fk3pd<$n!]5Ԑk;zPF^ϧOL}9k#[7\wnܥߧ~sk&yچJ {}hu.rֺuϸU:uӀnom[<iڊ#݃GfFkp٨]~C)$ &y&ODB3u{CbDF$e=ݪΒ2?ͨ{%|ߨʦ2z6*YM';|_kBRYm: 5䬴ytZr9\hӪLhun|mZOAx+,UZd)@;_<6f5+A^vZ EWD W}z3΅Y)sK*P} *pDv`AQ(: &bz7)&}CKCo˺~7ì̝ FoyvoWLHN]:#N)˦5!Ļ%Y9r@a?i:e٧|XVo3ʯNK-۾8H21$&4ࢡ%1 .4Yu&,UeqAk{6F۠e.r7ͱ.mrX{Qņu=|ԩC_o)Z*G6߾f:3'}?sډ' 8coa:KJ+݃:4z`PG,D#;jcb)J& Ĉ Pf47*MŎ̓<[@ÅcVB7R'a{}iHE*uj)#Q{9Z*}x,_§Q?׬&-~i#=[Y/̿w*5}DyOTO&cJqO4t=<\ P!TE^R SG|[MP3d)'ӽ8a wIh+ Tjѣ2[A;JzFQRYW+8\$ҭ! '\M;>ok7(cbc (- |4a3 NfBty->6wmr[|+q"JQp$3/us{n牐|Iγ6Ytz|<$/_ҥ>M]?W W3b/y([πBT]By2kac3e-01J;,[=Maʌ-@'waWW|.]9}瓊RĒhWI6) XͭDR_ynh&%^N2(>B%4Xo{lEVR_y!ڮ#Y<|DzVJ8}`bɩ cJdp`BmN  fo*:v._T Xa~Ig :*AgSU#tv@f׆_;m0Y1ezYp*ȬQS塚A%fI,,yt5wTvӔc~VͰk~bGכ@mCS@[{uJ1FckżhiA/@YfX7f@ 驳d|`_o6mGcԸ`:~9mڼ1cVŔB,oXp ʺ_dMުp!GxH{qPplj 1@`eP֮D[T4eBIT-Szݲ2w'#_ܻ,+4ONe*`y)MwܪrӇ^L)N'J]/ODí 3TϏMdf+bDQ+;(j힓Wa Q Ijψn̤2WN!QMf >d5e[_8(|) ˷"" +|FuQ2"Qz DśQAbRi@(+էU^`yrBh?nQڎ[lłD ȩw m:]䌿TȔu[Ю?nUB8+e!6|' 6 4Y>嶤^7. IDAT~$Y$ !Πta>nُ.}g|~FUZf nwQFO_~TCMmu7C!qŹ(%Jam3_{,59oh˓Le V*N?cjnjI(Tܮ\}0jF\ 0]I9S^Jd)MY3è' Ttia9)]Ed)&q5u eܘfCɠFVK`d3 gӹ6+XE(*b^-Q )se&$Gu6.2~z*| Q Q݉WHziq9qVjܡזxDX}ˈi݌M-zuTiQ[.|P R wEww/]ķl-T]'((jM B_8^n1Q5 >4s%P3ĊGvxIb_gБhRJ u;zgy^;LJE6p'ΖS.dXJq⭜W_K{Wl1hlܳgn'wi{:њ)t}QקGԠrΞ^1tj}WƏ}s;|ԡRY8H@ۑ̧^ȰP1!tcBf+'"r?Qa5_ _L<^X="EZB 4 `/R=a݃2 ^_ǰi[G*eo^dy Q ǖ~:LYHK]?i[G*eCX^Nܱ3~K(䦴GG?XнmԲ}[1BC{ mm,\U׷3{֙(mY N1x s+^#yԞMr68k31/}2|..{'ɳYC9:m{P)3nڶ%̧RD摌B`除Փ_ѷ_9eFƉ3Ct1֭ 1p%eB҇DI8] 4(x#U&< ~ 4)k9Ъϭ]&򀼜RA s%FDr9$P4W{':@U.^\WAEѮN&ܺ!rvxOUSpa_ -&_Nl Bx CGl_{yDp]EB_4m^L<+jd]\0;&Og*)>(G<+XFXPG = jƌRQpUg:jO5.g`E3oɼ'jKMl^Qk!ZN:˰&F /U+*E}"kE$hH|r ? py"؆LkD6Rb>b$ W$.ˠLFE1mے'r,a 6/A\&f{{m_DEӌDG̀C(6o_D82YZX|gǝ$]8CT2:UD COHȴW+"\:05{#J[cDH@\ h 6"p)1pa){n %SQmI|bT{HF eku y^ѹ& /%3 ?Pi 7L\ݥRm,BB\w.z,Z-\DUoThpRm7E )'+ҿU%&KJQIlk>o?(/ڶ[?EYit^ֿU/5$'z"͉C'k{sd7W]P)MQ-? "T`!끮?-EKM/{SND,zJ9(EG6%.\tjG1BLj9Mmt&7T7.> s`⊒9։[svT&lQb2E {VBm)#Gi6͍rBUFn ;9Bq)]I&#CT|;ُRMqb)w,-rc}lS!sVpwX FQMC08Cѯ[.pLޑ<&AVJM ݮk3 QzAT['+ Ī0 =( Eј^oB(+9kх; kTdxQDrQhRj@y((ؘIMH{LOHԥV^Ι*<ӁR,fȚ;s|b*nmUƮA(T "@dfPE-(("w  cl1QEz"(P͸"lf|!+-d Vӹ"*&?<7/\=U+F\FDcVz}>on._q{WM/qC^W:y|_%zo+!N\+J@ ^-KK@pҢӭG}W]~/rRY+~| wpS(2p8 VeS[EU0KCJQR֥TeSGyŰX3OK;:ѭM 9ЦDI٦Ȧ?I֟'S<4! #-BBw.A .N,VД74_pڦA\.¤qy}7.QLn)5މ'ឣ:s;[JԽ .|+/].i E>{Hq%fZe.E c.)*ԅ:]t>a%_3ﵘo?^Y èwƈJlNgb5lŇ{#:oV@T4^aD>읖#]\9{.%_q?nxVOZm[OŤŝGXaAu++?bDߺr2`wƿt F|j៭s3;&+??N_:þҹӿjlt 9,qV{%@PXP[۹@]b& Tqw{2X\l?mHֻG-T{RԬS} WݫXGS_ۑ݄#-;T>W90; ճ8vml#;tje`N mGt9k 篞8QG{GUlKi@ $ޤJ7J/P)H $@@H(! ofΙ%yL6gΙrÁU{tTœ>jzt^{9*}+ qR&掛08 VvB+ZNB/:]aޑ&=g/ѫB*}khڃ O6 P1~%1ao|Ug&KEE2v  &O4jJ䪇ȍPy7߸{WL[z wO!FV~u56nϧuv3:6Fy^QS4xʍK NPkFGܸxr˴z7՟UpW V[*u t#*~Z up= _|R"sUVphrcר7Y\m+@5 V+?'ScS>X vs!!5>:W媵̥˲SKr)d!*Ln aAR>VԄ(K2ƋYy >ZT.IIY35S٨!oVۨx30o²Zvt䕓{LQ8_l!LB)^fܳåowi?zU~ϦQQԼV?m=5<2hh}` XFov8烖-C&c݉Ϲy"R,G8#Һ`sua]I-e3?ϷVjܪQ $VS.ϤWY,FT!ߣh)Ԡ[vS {4}F͌nkNz%wE1`ъ4Dm/xXQ. jw\1RӫL Z!_LwN,;R"߾? [o|bqc= {{m֎ܯ;9B@'Ts61<\/߃ȩ>f=;؝$T=#3K$v$UZdEFFATLKaryȗC9x!r"<638LqFˎ?;(PG$_x|UqpD_zZˠuE&qh`IBqVi`u;,|+jW7>y5z;/̳ƧJEϐ>_5u”5a|OU;'tUwӟޏ;qۋv8^±Gt܋]O?W3ag7}`[.l9UzЫJK)3CxɅs$6tM!wi;K{יMYQR׮ m|80/d 'R.l^ Ix{="5jݏ܏f:q\ɐvoJm{8Pk3MF tW[8|"{W/=yHhn`ɼZd16ɀ:]*+[0. `5#zOm>)LY4{ș~ZX21Xťz͂-j4FaJSgVMpW80ۄ,#I07_Mѱ7coFny B,{pDJ{]6ݡBs 2}i̋2uѱ!yJiH񣹢iTCDw-H>Nʸf%OnWnR8p˹Q1QWo({p"I| hV|R1€4}K'O[)=4X!X  Hpkk6wk1RY]f2H[PSH\J+A $q[b *(&( Y_r%ֽ|0Ў;M97MZަqݫU[ֲ>ɃU|eVfǯDN^sѽ'JKAXRSVVu!5#ѐJ$ \.A: $%+±ɨH¯IчrrɡU]~;.ۉ$IZI2S,7фjHnɍc{h۩]N=>^7#Ͱ [J,vu#ZeyKqoo׹}N=ޞt<$v& ћԅhwĿŶNj6\hϧn'z׭gݢB{4@]nh6P,VԐ^;b43߉HGqmv1ѽxow:`Ymv,H!T/)6wpp|\.)Hq_E7bJU IDATd% Gʹ)K+mŽ2i -} 2yjRKr;{ڼo5e34οDCBة|P/? B\X@jhxK-`s[6.1iyU<!0pl6<|<4(Nr ͢Z J7KNC[1Ce{VCZ;H ꂛqV ؉f"t #~3qPaEl h*c}pF<1s~ ǥi`3 j*0ycrU4zo=X%_nWxCF=:"J"5avc62 ˇUWҨ d$eYU1h[>ũώ@/ȋ2 mTP˨M%,̲_QpIƣ))e`$Ɣˇ~?5U5~-vkɄI,G)))E^Ɔc8Z ;MwhQ2-f` {%y73󔹇r Qfo(j5a#h\(s'u)Qo)s0R&ǑX@\~Ccѳy#{Fw}}>q3޹h"wFg{ӬPtHƈw?l~v1Z6'uƼ%R [mw> E:#]vrox}u5;H*!R`Iu7L!ZMB8:2;E}c'hۑ$]O}Sgc=-s1V8HvvH2W a(~t37s:39$LզֱOebck4"vvGS]xE SSzdgFDfcFy@fMvm?3rX(ou^+)jSAY?aU`;b(.ms 2?^0YI`!iX??UGϵuN{?e퍙1{b߾8];=| q()FcH)^e_xX~#⼘13LuF-K6-\b6zU8pÍR(M:~ʹnt-ӄb>޶3#)gF|w |K_Rێ,g@PzfAg}n*{n3nw n~YAs]?ԹK_sX2Z. e* Вm(s,5)]L{V!I~2Ԣ\5fR**SFq`Ea@E[}qSO2wMOo(s/Q)s [k,20%m;>Ԛ35X [dh{~ҩUox`YI"9Y=ty;;is5N"(źRވ,q@dh5XSRm3-2塙n# O (~zzB6p|g{,wowrIK M37/SIsm{sBg{(6:|b2wV@nkI;xx9g_6m|[`݀[hT$6rY-\q`m4wm20 #rN49ѳ!1d n$,qL^+bKl !1o![/Ξ{fm]&(5yޛ'#;f) _ί/UŭߛQNjLs[Dy[zxG_tzRcQ6`\g{(falN޾-;{V+5w{gw/]|T$ RkN޶rg/0W2 \q|-|p8):WuCe U%Ui#GH,|P@ܒNY׭Q&?v;2|VPsWl7cW,&[p0:1gwYGj쪟qOxrecGPdIACZwG%W_KpīRIW۳'j hŠBU@u #FyPR#'X80-gYYsI',e6H 2w%E䋠0uI6 hORd@HBƊ'Q #W0Kr" ۑ\1,NRa+R9nDlG|Zu}O45_JtyB,Y=\Y6!rE U e: GTUj ]RÕ^ ܐD+n&jŠIK@c )DZ  uES9Eve)1}~ݍ8e&A bP{cuˇ9+r%^BB"?1ǂZF)3jzIA/[YpsG"W;Rh&FH[%T/ŶAE02PEX=בrw)uKOY`S +rv*Ϭ!pcOrğղRs܎Z0ӵU! ۖRGv%ȁtQj#*n/)%iu[qh7M_b=J2pV+r`5(pxpvavځs>)No?[t,QCwEPYE"/IuUXz 9ù_;e탈I.CN,?9s%qQƂd"A$k^F!/h6y_qr*Q.^},J_BS@ gm)pTx2b rڐ/2nb}wWG֓"PoICm麛++Ĭ}7jgZ |@&w+R o4vE*9Pbwd> Ee?~um_9@0kwr 0vI*;|f-R&䓚C)gC髽e43-)uS~xzB4K-n>mJi݀a2& QWcSc䲔F&,淰@IR@_}eoY Tƫ'0!H_W}o ~g.?j ѾkDjS+SCșcoF|]֦cH&-%n>P&ujS,,v.GQ|aˬg/aV8Pjq-͏㘒-WW2?}ra~d%C\tP7\X:J ߫`f"1Pf;LI q="\ݵj%~nQΞ蟸UG[Zt?K^KX7OmU،]~y%數]rx+7FUtw˶}#:_{V kZ~;x2ft;Wv/Yڳ^qbPT6z3?s:wa|݈V0) ;-30V֎o^ʮEeãJ-z>I=c՗$%bwjNQj+uлO1y7Qn\8}`ŤOn݅3K{D\ԵFVG{UHg3/mj7!姫Qb@(O=ztYuyܾUt[KݿRw/Z:_$6^|F.Z %6C0 ƟNyv9/ga o+ >h|w/ѻm}گEBE >^_V%@'ĚלqѢk{E%@S4~л4Qu,ƓqQ1WQt}>sxFT̍8.ʭME{~Z x#HZ; m{" 2^~1Z|d^A!'?i /'bbydUopR̅>7˿Oj>Ǎ m;/?~o/G^(v1Gw,fľHn+.E܈w; .vzԵ,/_NF^~l5/P鑣[TA^U+p R lqb!5^h0724~YVj)bf\fW 4rI"1;n(V}u%.X{[w`J)hXEK_[}o6kb7>Pi;GB]So 8=gЉwGmsƬ|_9LF+D[E{1& Ϯ- jVOTz8&A|+ӿTҀ7ϱ>_+9w,Fyз%ٛ)Iu`@Sv2)`QޔXUw3oyj.OU-moܳiʒ_o'Rp8J۶ewO,_~E{TU<=gOF 㿯XEs? H,&ڥR$M#P\x@9㸄)(sn.C1`**PZd/xTnpӪ[6mU߮CN'VN6`Lߞ#AOGg? *.`-?^&\sO^ε5z|~hBHfԸ>U^tvR)  )*Y{ĨfOb;vٝPdhk>X~>|vrӻgn٢MA ekPo~~Rh)Iq.6^-go;֜+xC{W9|ɓ[|}w\B* yTƽן:'Ph$*w:ă׬ dۅ3\NՌy\bz#Fd4(34<;O}OeX撧brDcϦu?JLMf:)8&0E_M{h8X']IQV#qhpFAL7~Mk`MrޭG`Ok^-Pp:ȜK3$lUs\ăo'U4*ulcGi[6׆s7ξtVyًv$ =>Qp15?v;%=z4oNJdhwG|!|Drn<)r|xLTVOdy㋒-&2W50s7+ɪ*սAMe҃27E1u}$_:H#-3lY\ Ǝh_u aWrvvҬ%/Y"F=-_,Y%aY08F|4~½rq$fjkUh}\x+7[Ch߻"}>^&T (KD~rAuVtcPMr⬌g,e}T"j:~_qv4'П|!K%#I 2w5_ϙ$2kA1^Ѕ+c 3bCx ʒjwuB,_H8ρ#zp" -[!qVpMB/n1k杧%X::e!QQb~=4@ο0~j\8`YZy-=HE[ORfvj.2+H'L$o/Ș3+zxj ҇ a55"rt+K2A^d)g7=mzUk~nb\ʺ|3p+>5+ɲAdD4F~Uڠ:kNmDao6h ){nY|Q ,YFɯ6)KU6oB'q'e kp"F@ӇS_J j;i֋,v05 1yd%۫4 !9^IY@> 4%5CBa學( j7Vb(t9ƥ !xC Vil2c ZSRn([p5AQ@0Eض ;pa7zl5A"^Bj횄O$)DfO+h}R ƷcOCɘò8;@/G)G6)Yb3@Q"U_-Ym[{25Y! /7ę`1IED>^ GVRZxT#^EWE"2b+AɁ=/=ȷ԰1F=1&7ɧvKr" e\"QWVcP-@,$TR|ex'BqVj:RJ0 ןgZ 9(r9X#c*~`쳿u]`yd/x܂Mُʣ?סv#?X#I&=B&uo^A x z}Zl+tU&eR0icMO|޻y*;v}O;ϖ>ͦaMM+}r=3+{h)MU; 3p*Ns޵7>ԵNٓigJ[L:YXX~|t"סI"Dc2ʣgPRF_C_ˢަqz?wxXftL&Ih:Eqܠ׻1"]`QC43;5zAUv7^ch:u,܍ҿєuj?Y|mg~ShxuGի nshg Wk(&7M>cÆ}f~)=ȽpGkF٭:YWr#*"5tvWnES16PZu|ѯE* ^'/!SukMQ'Vq3z_?- Jn |`djjwo75?pI/Z/<+F\~s/Z΁_=Oylڡe!:L435{t4x5y?[>uz yGLd#|fsj9+{:(_W(j,33X"27Ԣl@lwFDЃJ*k,`}~/_'PqQ|_g \ * +G[?xkn)f0'BS# |9ejd~t{?vj h 9~?~'Op57W̟~Prjԯ u4?صp[+vŚ;=,?rS{'Wwovd9pmN뵵1.|snEɧVO:EN" `)1.tT^5S~[)m?zoGf'^w42PcS@O(s(A*K Y3N`;q볨q'lMrl}s|g{(@̉wbg S|eV\ bsJK4~HX^{M6?æex~Us/c8rNgOQbU.$}7~~~1rW&ddPOI! QJxa,i{Q󏰡GϿK{ӫ7u[xYhn/3,{|VGDpԸ'%j\3 <|xh8Σss| #]sYzuϖێ!.:fS%wljntż9mE)|B@ dm;O|E[R ,rA!҂ +/pHUespmUn pFYN%]^t@yژ[kޭ <Ɔ("i(ǟ*Hfu@rok|?}2W!F/n-d$cÓ:S?FSVȓu{T z;s-Nh"'w|^$%,fzcWS+m'UW[e~XMUn1D݇%4$S@w1j8r))& Hq7,@ hĀ\˜ hTrBTcen#Dxrپ()1ZxLuxٛZݸ_Jw#Y{E sCBO|! 2D;H!z\=2cjJ[Qe nG]KWAN'30nRKL`#PcUwUv$2L|_e,5zE?]˶ (Д|>ЋNΡe~E!.%0MBj~5H! UΕYe>.$UPRU"e%/}a8e?}\I0 &)tU1l @VcX` 6;=SʭUvE-"U v nVCؽ  ȉ;ϥܗqfIՈ 6/WXGNfI: v ®+eB!@ڒÃ}rh$ns# d̒ Y {.A-b#bn?:Tl$4UP>zL1Q $'{6PV[yQ]2Ն }qP-0A0Rs*҆Q]HnhE[TWH@r* !kVm 0 rdyKSm!cbc4䈬 P!dǥC-ٕkd ɈH)$/M-$I D0OtߵB#OEmRWT⥐7J< gQ37[^-)sWTb*OQlA%k*PIEKuoJn ~IOfڴWn#;wɘ0&3O^UxFErY-Mp5s1IڕXSgI: R gmqI;sI&:Kh)Tx흾S^%wá_o?u=ZԬHg_|귏Ug߫ˏW#G<”@uiB6Z70"k8zv.m0WoP 5&41O~֛; |Dɠ(!/_YA.1d/qv=3bt%+{# \uDoU "Cȡ@%lƠWSDPؔf)ʃkMe"$aS1B,צHUB8ܥS{xEmΝ# #ߖ4/Z"v5!o?@9ڵ~}1'nLaa]4[T.I0X25G'\oԤu os=Ny@__+wS}3[a"fmU(}NQnJK4rϦ)KBQ7 &+H.`ڎ^mۘhu]͓Ԟ^WM*y|31!. B rf'g Js鹘1 Fq%a% "0_N*V;e2)%dzL|b<c5}#Z%4̥Ԉ;W]`[P[H4+2KE!MYzL_jdy)j,%ibsC{+h1Cj\wd?" _(* { VJHIvuLഭNo]½4X+%9͇RUVIf=Q/jDj*Hj??qdn$koRtIs&wc0 ac}ۍԲ01f֐Cd#⼪ &Zܕ@7뵮l@HԢod:(G43oۀ&Fڶ>Y*VSw#6"UD3!S8VZdJ%]GBb73}H]#?=*߀bC7up Au=*Jg,?鏊C @3 @.Jh2r]I3sJ)&M0-0(/bJJ쳴ds^;lPt8Ip6= ٛSPqHiwJѾc%·eqC9gx{5W)J7$`o4B05]_Z{Nc,&P.}*{լd@^4h],qYU-y7S7?me:?E |ܭ%aGg36jgZaEJB5!ΘבQӃ#RN1.~9kiBm;dH g/[ IDATll3yK}Uaaclˤi@޶^Ojw>m|.HԸ>#gޟ<2FeoA3Mkz~e65?ȠX調2 bΜi}}M @tޭ? LײL&6RYU3$Pt4 @0nح u`Pg(0gy`y_*$7 ʢ߈*Sӂ/3 @z^NFg> NKS: Aɮ?dq@@|3l 0}⨁y.4-*@Y6u,VWFlԃ7nzhuTSN:+)qEa31>tRj2bpy[=rϟVѳ - l6،?Y'4dP fëֽJ\pʳ XQ"!VyM%3+\#(R!T+PPe"mQ"S*ZTzS2!a ,|\PtAE%w"K@E f949]k~ ;d'Ub $2W_faVױF?%ԓcDTiibDG2;\xqE$33 DM,̱8ޘFktiC,6{Q:*%ɼa`c/ GsTýȱ'r!D8W3r+-NQԝ0x%@x!Ü+wHnzQ`D!٫ Y[#D };>7#74# *~QnF\nLPus*rg09C@-&##]/H*dGΒ=ܡ3Y- ”! G ` UIQ䐄@T=AW]X^ϴ#ukqeʙU}8p5^0!ACrȼY̺KOv 1.|+{i]|A<`CE"ɩ#HDM#]]}PLG·/GBt0QQ/@',KBƬf4gZR"ʜ8d%LX0)uy@gjrPuqzb/bCJ OKJl$u0^\eVfs˳9G?f"O&Ky_`X0 G,tQQ{5C^ڀ Yeh:ĵ]}#pE)H@@!1kzcV$i$DXH_r".*&oʇDq;W3ه4]AMH`Ff6vҷ,Ѿ~WMa<]R@_}ؚ/Qcf.?%KRZmґmڗv!Nz2SS@sK!2(j 9;_LZ>L!HCJhP F1Di&S!_F+( U=XDߎw])5BF*U싩@ڮD4ٓN= PPr K_n 3mq<WSG.v(B ˯)*Ɵ(s,Gt&>(zť5_s_S]g0 =)-czJbʣER*VR0JdF3Yz_?Y9xyc9?\~I0C=DP<\(nZ6j)Ag}盏ȍ,_( 4Fe27Б?S,1eH^_aKІMݼƇa)_ѳZ92+I9'z`_ˑ3G(>qV[Ujm[ߪ+hAģ$=DKܮL(%k`6l]=3eǷ!^e(s/Dc!Z7}kh!ƿXO<9裼IǐNjOXY BJkPYQ`1ĐvŸ*{ʸ0yY].#?ЛEoA7x&Etڙ^C MqH&H"3k(vS+8j(soQ梒l3U=`\X)sicY_-1mz<gΪO] mNf(sK/*5iO]<}wd-c*]N+3/9.-KO2^5OŦ[-r?k>x0\6UT j_:39̍6|OMOMOSW-Qg+۷vi7jSAc)o?Sxt꺔%oKn2nLho;%"[;9u`"ZIܮmklᓇWwƆBL6*~936#l>S CLBܟ<-j}FPưX Ci5t!Eo"iQFt#_ċ EiB uD6͘mP;սGE\IDS5\>뻔}${țOP۱Fu *w?SF-3DPw`oF1,u~M{\xz%뛲}HMܡl{8o8i}*RP]q+pO|R_󶶷u?O%My4f1mۑEJi&KEd^ʧb"\=b{ê7m]5Ox@jNM.0 cƦtYuՄät.p 8t[ DH.9NZL6uPRnuB-mps X-r']Rj PiI +z^iR rԒ fe(p/|z_= J6Gʺ'Lނd=軻@+?o|t+9*A^7Z?S@7 )R uOcI%yPʘ#\VfkcS և ;++my?MZ:c=Zi-D{b%(+P&@k6b":yHC9|µEG^~rt.}ʬt+qi:Wr' eMxpany8vpw>EQR@enP}MԋG+ưdQZ +Wݤz6x, vO[/zMJT>aSF)s/#4BCE9bCE O"EߺqܹAڮEy DWG6SLw}U RΘ6FضuX$eS%o'cC69 G/ .&&?ľ@@4p%G|>)۽9v D4KmPHTXW<{\XM UA`Rā^f& ~l%ٶJli.F7xL9y۾+M/t}eOIبk;RM3o߿2pIiiBm󵈹s<1hݯA#V9qnjҤqEV;-e-2>w5W[ڭEͺ qK%{ss/^sp?i4}B\dxD(bi)@MŒ5!Si'HR {ק/H]GaOE}m гo>Z1p|tj R5kpR|4H )hj~se}DÚagfU(kkVq}$*N0یI e$nQ~nTxe'?v w&)3Ů✠Qar=Z~t (@WGQ}).G0씝:奩o:/_lGҋB[.Py¢5mx]_*WöȔrK0}+<ُWq܈y' >&s?v౳#_6n.l*' j߾?=d߶4"fAyOӺ hhvK S%"KaI/Y p_QH.I!o*PIO~;{<4]Cr`AOeWo v ~CGlQ/&FPBaԈHH= MdbC'qQHopQ01" H?V _^adjYD`%rk\BNz ]\ =@Ɓ߇4Oڥݠt$:]k#*'M6P%R*kᴃ wC/iNR|^y,z?z!s )s]c"UoGj{(<$~Z+P:赒)7}(px'&} ,o,Q;^x#o3凵voڶ~th:Q%<{jRW6 !O~yBAFeMML'DA. WPIxJ#.^/"^o0:?pvDN [F `#nYavPP.ĨVouw8ۨ$r4'jJգ%"])9gl^uwْm'oh tʀ$LsBX268nRuNԽ ]yqh^ISlJz6_FM]wE MVD3*Ԯ?~!;;;DqsLeقMbfT}9wEߏ%ٝOX7B8ɇ" @v7)s".Ǡ˚( j/Sꨘ^R0[U@X!.Ň6V u)ut1RU~ RA"p 8U25lG%?h:ڀsa~?شz}~WE]E&>!2,0Ǧ$sӧse瞽)+?IZ~[LJ:oc2sSSC?ݞ-[L\?kyґSA =J ,0ѰKzۿ6?Σ]E[=p~2})kJ|)' 9m_[nوIWlڶk߽xL41iު]wzg em; k˶޴}1E7m=>;7m߽iCpMwoڹKPK@LY~x_Qܹiۻf 66n\6!o^5HDrsm޵qwT4*vHl>hH~om_OLG!RL6m%,K Q5͢En :dpRgH:tsI$7TuFB(dޫ7 eVqtA ޘ6"@@B>b<Í~ڴ,e3!Fլ1Fdك>NZcěg] Tr%d#ljވ{gwuJ t{˘ e&-_J~e,ήh'9g<(I[;tSȯ_\u5!:v#>m9rS{Pw7i`Uc|9W}V :jqq7" ZU=Q@DP@v|FK V59m8K[|V|e GOҔԤٴȣKW)INÍT8wәBT('S᪲`)0E4J 8 YI$e'DbI(0C'ҹ U\̺ެ?b)sQ_9"dIY~_{o_kO{֦\SSbIKQM8yϕ-bɋw(t(V%wbeV6e.#lRyk~{s(XO)niӟ(sC+թ gvm&#W.Xt YNQ'Zɓ5#5S洣#zH %S?ޞ]wzϺQ7g期JeTj󶂵[{_P$LID޽kϪ\W? q|$ O"<aI\BP"sSuǍeTT!jCe2"'p8qhSy6\ärA[ +Dl.±31PC>k (]N9:`ޟ}$պ_@Y(B1D$仼'Hj13DYϞv<ܔQJb.C)bgVs9f?F-/wI:d4*&g*ÆxHm)@-P5#C4 Z%k*v:LՔZϬ2Y l$un0~)g6@, }9&EmŒM9 8o2wnفs3Df f1#i51]/1DSGOY1{ E4gvk(+">k/V~P=41T T[&.KRbh3 tM(}9}i}oU5r|h۾_0k̐GutwU ; f ~ '$`1'O;]Crc5@7kr,ybēj!O`ؗ1B1$ӷd,\ks]s>K[ОPY#t]xʪNUirG&B3T$V"e *6TDAH^TM!D|yeX(r|ʎ/gCtn9볝Ӳt \ZrTU P6l޾Ű !<|^C;>jJ(4QfPʌrheG40<&"D. ,db̯Ҹ~=~ҭQ e.M @ A?\귓 gK-DOr[-u9ntkp)su3\N֊B{%M\A7GX 6/s/,/hz 1qօ%K|j0lAN%d@v*7g_߬Z(?r$API(kjٲteSα4z@EALL‡OQ6- T.'G&Sf4|*ɕTNvb3r2 θ0z PsT($ft0Kj%IDj3@(͸_fx-p20y۾+~xōWVBzWnӿ ˵Vm 7_Y@ 's_<5cM"/0V4oGQ.qQZ`2~pnkݢ=&+OR(6׼>{ͺ8µK[&ݚb>X|!@jSZP) *'ս6Us>IBMe]x|o'_P#}Ɋ OLfܣܠ- ~Wm)Y%lNiDM3&oRߦQ@ѰЧ1Zn{`Uݷdm~a/tk^V.C.Zto7k[|!-hxc#륚I0s Z}&;kVK)ߦtpg0Kx0{9n*a]K~ {bd'̒D!˷ۑh`"Qu4ZQ,ea̤bd  zD upk𡫥iROD$A۴Ph!T (.Av0Yc/|B0qCU`3h ^vAHJ[W^2O+(R[ ˔Bz_n~ayҢ2WHxg|&_\56]GgUJVŒ;4(_gkP6D[Ur"JSǾ 'muҰLm^_d_ήNy?'<(49ͲalV܄#uŢ`XBw/@Q72y3ǏDK$Ԏӿzw.0v f+ MYdA}^PX~gPw/I9Vgi_ SR/ :A5{'_d0%C~:חxݟd@fywԬ c_[鍟uE7@D,Z?~嫵gf6M?yATtWGǿ52iſ{iމB:  hҨ'ɼE6-q8lR<]h@=A1Yި!vK0b#BK79$Wx2lFj@҃P|KLAlQr`%h\gCzU֭ڢTx^HPgI=Ph~xUT8Rw JTM{ Q+EeR@i= [$չ~.PtVܣ/+ڭgw&?}BYAbTPZPS=j)͎CQTسqU#1dMF qcR_7j1rٱ.gZ7wXmC1yYB7[r]e+&Qca!yh@iq(:AxuY@ٷ~d jw2q!tFkV"I@jc1K"(e20ʠ֞d`ƞv5|FY!58T RʻH\؄4tkG%Wiȇx~ 3 rDwI6fP ->DmۡFwD9ڬA]>ZˠP/̺^Y`|%(P,[71 80mZrS:Ȍ;18 ܃~e+C 6HKdVLvhH1R{"xwvOTVgu)y0Qy{7Q{GN A@֛3@^%y!i!X.2FF\ I &}-h:n,oT:neJ>$XK$D sěf"=$jC q!G%͂Ex rX9(x1x\B]"8RA`NezNA,a!&+4:Op/'{S4jA{$:4 t_S۠ 2A59= d+s:Izx1_h%:<+4(/I#ŐhC[]H"3>N@7y|YfR6'|D7Pk*rJLAmV#`9zKƣF,y.Z] /˕$ &Է3eTVlyYTF&͂'s* UO,]^;ȎcS!E]0uJz%6Y([xFY}zr[(s"I& gfY:*/. zHF x *@"lk,z!*C@AS ?$ u{AaLٷnIyP1Lq<LygXnYأv,_k:dw=n)V7 'S2]M ':^ӆMKqsSsFtU6.ao5P)d*n/6j%=ȧϣGuFdMgΣUcj?3"3]2RFӲg,w)#Q0(;)ė VWoưz=P>ZgSbލfFaa<˱Eg"Mqoدwb'K[+-XcO&]_f\\ >id.M c@I6t:{xTG?xs@D#kYbafFA\U/R/"0nϤ)U6a"XТ<D5b.Bd]mO`XB)}<_ORwnE?4ﰥ]OP' U"SG gIʽR3N,@XCFqfd({F5 6u8A#R{K.f,/,lV3O*  0TȤ# oH~oǶu٥Q$1$JjUCN]z;{;wgy $(0^YsZv.|^6p^ KtQ%rsuPW8玈3P-x (Px *Yxm#`6f+j)p5$G[ F'J^ՓhiY˴(KgFZל{UҿƇ8~(pŨqHW2>mJkmLܖ&e.Ƶz9ɤp_ˑɯC(>fS掺eo5<ɍNN?/^ a.A#AH{|v_DJ(so5)szq͇̜rIxĎ-36>= n=<ޏ gI/:FܽC^tHNp~]!q̜͆zמxc{|=o/Խc{Avc\wtHǎP~ o# P"e>p% qF@:?}~x@GalVr PgJ#)O)?DmîQ$"PˌYDrb,C?)͒N "߫wdjƵX$=v4Ϣc-"hà8ZWLVxQGPb`μ9FTкT!Ekͼ9gS/M)ĸ=Egh+/?8l37=;#y@B}420t:2O,e2CfU)\3VIDAT!!aRHh펝:Ug#*E`}G=n6 R8 $cDm]U^ϟ?';$D#'ԨsSӓ1xꯙ>;Ui]'B<5]K' CVzE!tT{WQuφW*AS׸47}/C7(v Kߟ#tmHl2|]h"_x{Kh?\R(@!NȢ"UF*I4ݥKG}O׆6{۔w_q< 1{z3]*,Q" }ht?ڵ,9%uwzԺ~TxbGzlN#B_.|״|0 d8dO3þq}L #}53)pNL ~Cq}.9 ؃!&>I["nyO Tx .R=q`Ϲ) Tz?<<;!͑O[v.+uNS"pZH$w4u3qK E,bڏmlI~<ڔYAis;x*ߟgǤ=U_cSZdfՍK.[ܵ`q#는=e. ¦5ݯSAaA&&zESۧLx$tInZZ>RfMbƷT&(8~$ۧ^O)?n8ϒM8r(B맟G] S_N;j1~Ⱥ O#glX'IT@,:?N L [ĝ{$9 ~bC͝H9~όitkǝ{8bjB16C;51+NDoqGw@QU⭄E\3r4u6Ĥ*4?h]OgFO<hBovӣc֭noЛSppѪ"\is/Yj ][Ԯݬˋ#Z]G@>nͭK027!."<"pO^#8fIr;KL^E<~;|6|; ~gZ C VPO;4"i췞qW6?V;sN? q5eoJk|}o",uO nIN"]&.Z(/SҕG^o~XpSs[xef)=bm 4?Bz^-ԺKq]ZKܝ9N M]$*-Q!Lc iA#r PLDwT>=Z:Fj&|O`FCYwpРԩ#y} ;uKSǼnR&'dN6?'<<,b%NzuR`ThFU4 }9OnVܷxGԎQ6e㟟{ _Pn [ޝz OmmSk6(y`\eҴѯu9k҈){.K=et [M]x ><^{ GwUd$O\ ,G FZ2nB}ԗT ?{(1hP0*nFJ1Eb3Lʲ"n ʝ)>:jWP#zE~H7BG>ٕ(l.{ʶC^#&kGFFKɨ6IwoV X 1i;d{zT@_KlCElBKIl)'PUq]Y>DØC(4=*?l"Og+i|1c+ĘNtFC^1po"/$KG`*Iq쳉Hg(w!J5]Ln{T4"Grۋ}S4 O ڂd,DdRT"dz%I,)mR4a+L|!S,A^xc8櫗syP \#:RVs -KOZ"w?ooBϲaйNc"VuJ٧O٣D$jI ŁO??foIENDB`glances-2.3/docs/images/raid.png000066400000000000000000000127211246314757600166360ustar00rootroot00000000000000PNG  IHDRc#sBITOtEXtSoftwareShutterc mIDATxwXSgIB=(UPpjѢֶVk݊⠂XqEEAY@B#[-./}~K E@C$j7~MBSՃnpO^ߘ߆[y/}ThQK#v2!X|:(Xl͉\292xS^u#~~NT8x><9VȦ_*TbD 덠~.AenO:7C]˰ Lfc~d[^4<[fe5lvJ3RҸ̾~"wR$`RGyULPU!+^,l?N6wǝpX t=G g[BadK/;_)dw774~S݀As޿Tgq5em|ImZ>?7Mڙh&;Phݴ?^l >_ 1WW'(`}ȎJLr`6eAY>1uxdXl7d7;em+^3nLˉܗ{Zh4h偿\b_ye֏rՀg2({,73 v]N@ސ1 OyK=6@Nh~` ΰkeQ!Yb߉i~+Wh8Y3ʈi.0[s ? p9çۑ?ykSߟPvnozTڹn*#pefU2!e/(Zaߌ ۻiX#@ҟ9\bsX/ZfzXH 3$錙d&&LVɊ~4N ʍ|\?l 6BW@Prt*氞R_rgmN 7f[NG8E t{Kzϭگ?@gO(ojlu\񺸥Vn>~+~fZl^\U&kغr|Ir=`&)igp"靦cWx*򼔻cP DT"SK&4Wf+nY엑S"8p+UH@f푕C{g;naK5?$Ie_yCb4I@g &8PrfuW@̆ORme5R*H=e޴AuiV/\v,bǷIb~]QH JdIJN.aS̕e/ &k-jhʫ#f$렪[+|<Lmv39|7} pGR~6/T V3d!᭰e_yTSvn-u#FaaGh Z ;DŽB4]wxpPpȦL- ۛwr`Du Z=b`G7/w e>o墩twR)IՍ߾sD c#S+' :R>uY־PYƝxsKZb$cWvQ)(l3R lJ_]uZNƘjiQ mq+:k@q<3h}^|)xMʭv&e 7Li3Iq{xMZĮe>5?oULpz=UMx۴sKUqcjO88q?pؒ:?Iؙ i]EoʐdJ}zdya{)qB7jO1ڄ;Sϥ&U\.0N3%Iosϓ\>ADF(PW{○.Plxڶ"ݐ:NBBBNBBNBBNBBBNBBNjzY TG,Hr]ڿ (]`lßǯ?T'ydLܩ3{%j)@c9'a1oq#6pD7yBI7_:yGhAe堀ĝtF4 QzckEq}"'¸_}=gY~zq>wNG*l{_pΟ3kZ3$~|Idz3E?tFw p:~' 8ot'LŤW4dEՕI)f]G8##Ζ^RW'l )˄LT*%,`he8Mv&txS'=bQ<4&$G,N8-ô.+g ٣]o9~XSa pÒ}-΋: j1۬1:>ىLQ^k-O* _9JMSPسԎ8Y'aTᓝ l1mge FhtE5Fb`.E&ֺBNʞgk7S8ť;?go97m>&mtŒΰy3$sҞ@yr,9uU^) :y"ځ6H |"[G޹%K$F&=:Jq)=q" ch:FtD%ݺ)D:ҭ{A[#ݠsHn"zB["ݺmH7%["֋H!ҭn"ݚ_=[ăH7$vIHHIHIHIHHIHI":Q_I7֘7ԐAI|h\D6ҍj==e_9gO j,"z&x7'sED8:s:HMidIUYWDbҍj6s8U]dnt#h '\_uFB@"L%R6E}'"z-=YҮ nt#yT3z<ՁLSHz F4e2gz椄簜F%5K=  /޲-/tۖqAͱ@ʀA'2 2̾A7gwI7ng_*9v$)TIq_exLN:EniO]tr`odr29YY%̉16ٳ1)e`\i(òQVrI7icao?IJ{;MZyדnz|xte/*{'.Pmaqv%F>a,qG%~c=ǫWu$E7P(+(eLv7ge1Nǻ@v|@aUʢrCrۚ%5u`jFҦ#/}k~>*ޑO90WJsO-{mР)Z>g~-ӻ\!0)JЀ\/ kFzF2ҭ1⟗Ғ[u}@OIo9? `Ժ=?Xк.Ȫr76XMT^:\MR[[[Y<q߰Id|we4'O{֎8t Ǫltt읠P6Ff {>?."cW-R_)ղ^㣞72"݈ h[?\l=22ɒ@5",M۸.7,O:^+/8tBYU320>8Ss>Aᢪm~ "3agt2)>(@ +ڗ{Y:ARrnl&uhtCK!@BNBBNBBNBBBNBBNBBNBBNBBBNBBNBBNBBNBBBNB!?S|֞IENDB`glances-2.3/docs/images/screenshot-web.png000066400000000000000000006130551246314757600206560ustar00rootroot00000000000000PNG  IHDR 13@sBITOtEXtSoftwareShutterc IDATxwX76qݱ*DʼnjVk]muk{kp֭Qdpp$?exroI7߼olޔ4Mcf)37䲹$EQ^OiXzz0'عZW@ bVXXC.UjjF':) ͍$I( y$I:::ZYZdg+t,ܼEk+++at|>]] pcƍ IFAl 388>[8B @x  y~c;7cAl 3 6>o01 ac{ri*=K>ͺo͡2.L:ɤ|pd(5h 5 B};z3MYiЬIcMSCI͓C%R ƶwc4BƨR4b) !aHt+uHrccb#fjo h05- ܩ' eī1+6Ix톏N2Gd0 v̚<!bAU~4B祖Yc8Z]tDfh)0 3yZc&jmLwIř <܅ى 9Bdߴmm2*"<)KC-mugNދcN^]jd|rQI -ƷpuڰfUlZSu`xz/vĕ4dE7؉WMQyHZS.{u0g2.\R"=q;_^o^쒥񾒑 1A//cũʼng\0XBJU<&7..Ưs7!еU_C xtxi78( [t݂J P}o7[o/۰A8O9TU)΅~c}N\ M]3.īM=gPYɹi̳2R҉s!{։~cLAM:cw̓{lgH޿fl{}\LGp`yv};pEo_`'םzshܭ-GG4{nޚFX7ХnlY_zz?\oުo'3NJTk~Ws#ճ ˣҥ]> sɞ1P*E-ߍ}4խI1C(+ˬo/J֕Y\N*xw!mXʎ*;S;xۅu]Y)_i8P eGݰ4![tȡrMWi$b lL!^g] -NjSX$z~40_o=Ky#qhwO.ø޿/5*K_zl60ygf0 Cv薳a-q>'vގ#z"B8ϻCƒ!/WQɅGXâak gOҴ~_7pq"F[bJtws6RB(7Q)ٷ\^SXXbYK!_\oR6}(S2HH*BۙzPx]i#6`0زs1|xN5CzOY{8ʯ nYKؚ̄HB,C8e#v^0i3Ұi rӲ$m*^{6AUCO[!g\k?r'Gg1Co%$j-y 1aVkN]jk{B qPWFxϼ`[ִe@Dix;U2/JYnh^)[˿ng>Bx5Q dz!4yM{)J1aEޗ|qE6v۳A z`uI_Nn;g7?{qPZSLe7xC<9G(!6h[e y BiB`҃fʃǷiBhqh!,2 A_ś C:|5[:Tϕ:75oWOB{|c<:5%JmoWT2eޟvvL:Y\ *\vPNaj3#Z`$!h 4j?\2 6ܸJϩ>uo߾Ν;s8(SSNj;x>wo s>wo sBx<|>wECAlA1̩EŽ3 $6ɶXqa;_1 j`O Ǘry,?,UV<.Vx%UBRFٰ80h&ɡ@b-Z3 Slv}OßsrlHdXAx >aHVfN&|v1EQ4]5 Uke.fs8$!6Tll00 h?>ظ"ʥ`|1B(( >ظP%V:6Ł1tOGfH$8sLnnn``Om9Jx+Nix<IsZ4ì,׬XtM^ӫ>DO>[~˙1{Wص]ϟ۴%6.eSr{{ 䔔Q{{[[[> &&%K v8 {1wظ.u\'bV{g>o掟::y:cc~1 gǍݷw ^IM4ŔyqVUÿn9~e˾A#XB|"!´'Rs 6]v3ӺdMh,.Avy|z^H euhi.*-F~#EB 7;y6iQ߆WtS U{/u4)umzܺuR,_=Nѣ1 55IF jo|ِo&NJdȩϥϨlۚ+;2OMK[|EH þK՞ 9qafOځȑ#+3۲eˇޯϞuziEs4oV+)?[:,\뚂V;윜=<};Dϑ#GEܼ}mRrrM`GFE}tXDtBì^+$aB8rHxxx?~}qZz3gedd:9:._ڱqi:.&6N&qrS8:8[/ZlID1j蚑3~uQ]MSl!CóH6icki&2>2pjx8F!k2 /LyrkbI73oԺ[ ʍ|D}@K[g.E[<% gXAͭXn_t4Bs3.uL7彌V<%=xx'4LHHUJ$I.SY׿3C5ӧN^ /ݰIVŢY?мBϷɚC3a?5pg'OݸsO y,OZ4qc'O[m޾#`5<<=̞o߹+rMnjMKOyiJdnfcPggo/j'kaa1p@ggWT*MkN&UjWI(>mLWU˖DܢNqBRk] 6ЫB !RRӜK/# ֭P!:Svw`˳!dN.wfҺY tɡ2)TbϖŻB{Dس)󻑴WPf6l@?ND8RۻH\m&x8 Jy%ss3ƍy܌V}Rܩc%UBJUhnn[ܿ"N2KW>FqRS&7/!t%,BCn#geipdRi=o#7}µ?\ڽXVݸ¥fMΚ>MbaaCv^K bs7fp6!2-vԩ 1eܼQ+*py?nݲeS^jW*gӦ|W,D~V֭08~O~"'6=v6Z4}JHXqSAmV۶j ÈDݻ;44ѣ%PA;vݻ7Azx XJj3fedf]l9S mffTI,,4M"?';睺)3+K,O{|%(xd|I̦:c?O4BH,JcӬ ppMz|g=iAϖz5 B zyJ*VGa|*MWпD :.CRYnUFZzBյx Ä޿CDFf󈈔TS`윜ԇWrjnnB_|9@TOW3JZIm3L1BhEl)Ld|C4oAUӯM<} zW9y} ۷SRR(TUql\/\E9s*V~cA/L&&%"a,ĢĤ$SJ$IjԚWv#¤Ŀ0_3ʆc1ó*Ʒtg*T-&ABҨ%aF]X Y%VR`BܮۡOFF <;7á(nݺJD+[nVVVRRédl ?xT˗XX9V]o{7]p9R+U5}DVGѠA-[9jԨ;w?~ܢ'peKZ@snmߵ{ފJ_-pFW[΁GOxӔ_O:H$+LeLk|7yR61 !ԮM_uiClܸvk5/yK߾}֭/8ssso޼iR |Zi~6ǟ,^|"PX1ca̬,UaHdZ77/AH.(Ji8O"Jkd0u1F/1Gm٤ڴQGhl) t9o:߷)ReeyzRYN DjA8A`ҥ9v1զeϖdXV䝫_83c|XV8r}||RRRB:\n%N.7,RzO>+ԨoGbcX%scއVY\gizQiƍ#Jo!tuղff%7y˜ؒ}Uk*UQ@Bd d ~#G={ð^z˴"2޻gPaaS5eͫd{iղ80Wwn(jמ?je2/O,.L^?rK&D*,V;A !Ch!`61gΚQG-\gNzyzD>U˖MqvNδRR|{ӳgN8p@0̉'?n|9Pxݻve 6ǑQQoފOHe\$^z;wjl6æo&c IDATڗƎn#wK+K?wܼaV5@7m.Rpn]:u6;yUޭgXfr g('aQr.aoaF^9v%Y޶O'q.&"Kz6]FDÖ!FO\8igc4ENvXfF"b"""L1a"Jxv\P_0wϠvmV/[n=cŊf͒$I4h۶mݺuȸzWeol"JW.Y<1q.[dqm;;9 qwsU0oR%4*+<˽̐Lٕ:yUxȶ.8BsG } QqF^2.Ʊk:y񒨽dD ͗7gA C4bFa(`1"0(U-Z}Ѯ6h0djX~nLVQF}݅B^O^m S UXab6mzUffZvww(***8,|RI<.iSg}ԯ^_cJZRz\0tNnnTTVH,j>z\ DLCo,H֬\1g4Y /MJNvtpuj|#Dx֭[)))_VݱcGFFFq߲Z4{1qqQϞXã Tӟn4=٫WoukWӫ nn;n ׯۧSk>= (nM[mں:Ε徼ȑ#ϟ?GuѢE8tǏ!x<^~*s1o߾.]BpjJYffK?Zl\.7Q_2rI,yM.%%56>iƦG8ȝ>iPҲGn>|i*f۠Szp{UM8Bf߼,.3iѺk*HZnXdrzN!hc wCJII`OOO++eM؃;oE"QF Kf`0h2c+PdFRlZx_eҳ79qBS,̬g8NӴի?Ӯ>I  Wùs8P 'O{ԭ;w.YJX~ji99`Eh\fK*wϠ&M4=/,,DaоD"1!?z蘛oY{BW__dX,z!ԤQW EUǦÇ!!!yyy!KKˁZ[[k׮CypHHHo#ƕr<~P!`o//(0&M2 _[jm m'(::4nBMY>~؄cz#G<8n̘>=>M1ǔLLUu=n71ЪE W/qav}ƍ_aֻw>}|}Klŋ zÏXKW;+[-[Æ +3r`o__;k% }͏ܟp&OjؠAS0$I6ѣG&I{7~ojz/{xbc&~e!NSX0Lhfmm`o'%;;;##CTn#IF,866VzbSk4l[?ԥ+W۪zok\eB̟[ԥw?z',kl6m̨`tSDlê zyURWf)7S|(2>]m5}N5bcO%6.SbSl X8j$WAPeZ tx!3>6RRymdKI/IZIM!4liZѼJ|%ʡ4bcw7ԴdP[K"IRj-Ie3Sg5$kQO=6iZ.em i[4A`  `1111111111111y`ALj*ͯP(-J~ =wb 1[lnfMGI"˃m *OQOF` Z1 N#0Q%x7U?''3=޹H~m/Ko L\A& B N ƌݨ[ 1(n. ؆9q℻{V0 4Wo&(=%2Yb|WRy⥔,Edٱ_cXi8nG%1gHN3#JmT 9JzN$Cv.?ƥD"odJg{z|3sAm&naA\˰X4˜FM[{&)3 a_69PP7UBsCkWR{?Zľpy:S"H6 4Ms8FY|`l_~=44ɓ'~~~==ըʊfPZfflbRiisupos5k=6GclG ! ʪg5i?^~k* "1ƨ52i)_.R OB`)I*vxβ``hr2S_?Tdq̕VXk=QFt(ˣY=c#}C!PiGc$2ljBޖʛ2辚uh/Bg}>nVX΁B5p( x2A`2" GmCx z4Z(Г*wyr-a? _[wvկf~݀[oB+歋j4%]m1˘-v*.[u\d*]aR,j ùzk=e x{a*7|%++pZq׵(]i+gU`Q1c׫Ob8bF wpa V1P4Ŕ]2eɛtڭIǁCub!]ѳ'[nvmDO>rS\Ɯ.¥nUq "N[*#[Ӣݽ5=rO cwt)n7mO 5 5m;{Yݥ!َ][ EF9\ff13L΢E..)2vQ BHtBo]MBa,v{vꍃIZIzr慓 u#vumqJ_xgnCcl y]/yyy/v./)2 H= r8%f$I&fd;o?{1<ϷLG_ѓ|f|զүᄆ5BE]H@-5{[RZĴ*,78Zi1qSޢĒo!cz{+dU1U}Eb$RBAbqpp\.MS{YP~vo_{t?`:"QI9m2~ njdꑈ O䢾8g76l׿ȹ$'ܘʁ&j0w.iFf܄ןiB7^v|Wߌ ʬXeZB𢡊X3#7 ̄6`,'y8,>lPF3oevɸ/ݰVZU"bl ͬ0aUo94"^@ɩNBU Tb.x18U@F,6h癲髛9ȫ2WrNH_z^5*s:L[00ݰ<<%|jaGϕ ߦW[rrzT YYOjV >{*33C*U?bBA:v$jF6 JevLA)*?++71.}.qy\6l'hp6:(]dP)B4s<ӹuk f"C7V߻ Eaa!BH(FEEU8)BsKz-{|ѐ0~T ,ZiuC5ru[bb,gkmg@Pw@چK'utd}!NQ'f(\ki ^hDB ' BUc-^>~qV3Y" IN5d+ǩI|ʕ+Bܻw/z!Cj50&]&~~Q4?SOl:Iq,UNT\DԭG^| vçs0 )Hu#w+e'l,ع\u8ވElwj|ݱB^Q}ӳ!5t]W5,ZjRy`sקmϑ8hAH'8Abr9id&CJ@}=0*3 nJ8ND5;# 7ôz!|߲o˗ F]F>PE)F.y˖ӫqֽŐWNowXCrOHZ(j6.ڸ+T#xXY{?<ȭ)ANUe[!Jk0*uێ=NQVޝG0KW5ܫ|3r3X<]Ö5G]=pNhɠ?g7V8vbCES}?tkWϱ|1Ae! ˹{A=ez_0Ҭ!Qv)00vY$hŒWl{eJKͼK3fZ3kCRDž{p6.yһAZN}@+n4!D o ŰJ6ry,h7ׅ[mGcOX&E\!OHݵEeŠt;;[vrN{Bpp.Rl cVy|#ݪy) !De_߾~_Xt|:{`=3ʨ;܈4HQ˼]xЭa>Yg]z_s:e6V7L9cvR{VȶjA^!RL|FxA?I5vִot=3Dz/],,5ZtkS(>J/M-ϚGg9R7ˌr-] mێY8j41Ǎ};i_МQ%صKUF?z!bvvv?rH ]o?߯AɁ,yǡϸ|)a͋3=F,m!)#bOԛԿAÍpߤ)q9| j^QK0YpÈvMlKD=Èw~|3:ՍKt^c]t7j隁D?Y:nj/#2+Opo)4o˲U-N1`0[f{ya8* !GpB%R3(SaZױ,ia]9jc '$ٸpdRÑS!/<{{J3M/~Y(Z&>HK 6~TZzFInn[7b N~v_[:l+J7)dz,2.1ֽHl\в̼B̜Ɍ Kɠe0$ݳ!N_]5kOj,%YJ^i̺f+{em2vo2b&<(riD!ݕt9&8Jw&5_㺽Y*r/.xoYt_ϋ [I$^M| eDZ*=XĹխk6&wѫ?jk’XNcd,x-NlK-Ăٻ 6.jhEe9u٫ N yOmYp?϶~ uj4^Rݍӗm8f}{B:0E(U}gjM[2eW.XJFgSk`Wbz-%S\KCed4(1Qù,c#KΎt)q_.lu27Y9g_h(c_N2Mj IDATieSUXrNPmS,f*#5nݾ|s=$53r m"!hmoh]X*Iswq 1/. ib^&Mk1i-~[QI0 CMðz.bW{d͠lgK֘_"6.kj⬲aKuc}ua/f2!5m3bnyM!u؁j#4"3XImQKԿ?3.Pn݂E"*V1 ݴ\nhfξk舟ԡjoe/`Z+j6., v׷W{wz醴rO ʫʫ?LK 6TBIǻ֎#n/:K&^|CnKH˻wͽΜBz_|3ڈ'4t̥$Ki}ԫ2\PJ%^+yx=z:}D~APh֣[ObplDWܹx@];[ݻS CWo'%FSQ|a5`s"!IA.rz~eaѕvhSF^CsEآBـ 3cB obʉXiƟ# l&'Bֶu(c̺fθvV}-đ!k]s` !Ƣ.B oX%R-=%;;m~Fԭ#[}27PmצO_l%g!pbHO3fCOSRxRShB+ =<9?jӅY ܴ{:Ӽk+ hՠ|$BHj+i\P;8>\Dm[4EE#\Ҳug.Bȿ2.ۈY!R$kt }Apo״o緒UYx+]yڭdd6=C e&%"AGi$MVt\dٸ9ʥ[&+wnv~?vsӔAK9eɿX맂ͱj_ikʮ=fϟ'coX}(x_Tv>>e^skuSxz{܉~ _ABh'Ώ)TF1WkuA(*ĴbMuX@ķE-&|bª'kQ-F;و%IDb!0 _Nn_C#^3 bF6%B=B9q]%ƍ5C}eq!#h_??qpaYf *o#K`Av6FD]$B CS]~OH[(jƳgom7'Nzp[3fkfAw\˛R~[)Ar!˯k%Wʓ MJN7M|E3ErQ3 9h\;ݎ<: 7^Q`dfHWz⸨I&gU*‘?ܥKHrUձG1E'7пl~<]Be S"0.֮ܜ_"x*/#\Bf/*0lQ:pqk} /UIXpqc$u(11U!ZM#w:iskY ^.V Ro4Am$dk!Iܷ@fa|҂Ib؛wX3 ^*((v۪kڻOź*vl{o+JZQAAAϼ?@E%{~߾IνLK^ԣgq9yI:4-͌d-9 ar7bTI!Qp۫͢xULe<JH@+B03U1eI"2!"=Ұ0)]c}=nyɊ\zq.^K05t *wrmllʳx(AC}d4h˟Y_s/~u(WOU|4dܔZ"؈QA;2)iZ H1jթ_nZw)opI|`,ՀԵ`gbô6> yk߹ҭc|&M^ϔYJvj6lbIXgϲ& |Ф҄GQtTBMQ4)ƃ"5XJe#,Zgb-CWˆQu L^Z=4`A0euFZ˜c@xoF^H1V'BA:R`1H%I#`4?F.۳{(MQP=`32Hcḡ Ժv%]\dKMMK:1&|  @1r.R4y?gLjnRJv-_c2`c$nb!$(5#}@va(IHjSk}΃|9 %Tes d1X%tZJocbϊW|&I]{/qQ)b @! $.S,'غz,XL4+!I(da9luf^̧4SF'ͽ$8#'JNe:f-N 5)!rY~Uf={tq[uvVz}ԩE9vײesˢ`Գ}d,=k#:0sxY0J\Jkv|έµ2שDZ9rJm=`ۗxK)krEq–%gߵcaaU𾝝l:VŤ}z||aZ7tT,SȕmE>I(yvlT$r9Ht^n~|z&e2yD} J ;V3ofNE'@"Yi7OlԪrCA A, 8,--v-C! >҄(iLxP|,`Ct<-+gɖmQ$)l,dxߘ)0b/jҫ {`Ẽ6O_OIY OriZA^mopTbjZRtsYT1q)S[ -#,FDT{}Rr %D%d_'K)e G7{ɲf17ǩ+mbg.yfT\T! SvANT#F G=}+LXy M0j\pjiPxiFP4m]Y*߽+QgfE{oK #/#UƵA:-4]ߴҫ̔ȀK^5ӬO_,ۡk| CW> yy OX.HKs Ԕvڟ7,2U1&A˟Nop[7غ)ӥjzV1䓨l)0-ђa Z {r:}-5su = #+͛q(U Nn [_sQeVcef?Ι6(hQSi69oҤ0oGz&=fܩ Q3֍nK&&yFu\ۭ T?JbQsƂǶ3oQlKT8t,{,2|Mm{|S׸tQ -l{qb,OϏNFZ\Mӯ#E%_fS7\ \t`nggƷ;8%\{5'+x&fjTn^" qvGC!1׎Odq4d2 &#=.KMLuQ3qB6ӰSGYi mj}ۊG<'{gMS{.w@YR=f`-CPd{3?b减5P2jUpU!ISH$ȑ@4AL&@şBٕ4r+is,I-nIY0ܵtoS۫Wu._<--mӧO_bŶmZju]vݿܓl[Jh4-+~bYV|}233 KiT~\WcZ%feLmoxS>g؜-# lu^{`jk8p#'o옽+MLX7c]o8aWOypxB3kкC?>pu9+ϧh[ yCO9+? gD[tt:~d`0Ï R7kZhfq#ȠiH~pޘU  C#kGRLAЫB(̞ o ##]>[ͨf[[)kgxeX|:z,[_+hnaN{3A]ܾ|Q}Se^&Zಓ>d)u}KkKF!Kد^œ$$Pieoڵkɻ*G۳}k㷿J=u}},wcB?Cnnjh &ބ\3$xt ⰴh~2+,(=] Bfa۾ϭu~7r 7vV)۳?kښs N4͖E\$ W[|c m c~<8]YuyGڟ@i>&*X$I@@R)"^"wl #u4NUs==2}>==3%'&EĊ}D1[Rz5gj?e65nr)Z׳610\k:Q8tv4A\=Mkl!Yܘy\AI-SY/9nݺUyaM Ei?O0U/5-7Σ')6 :~~Ђu5rXZ@^{=MG6H+;Ovz 8,|Ȭ))|OBHj1a`X6JJK 9fA0)N_\j3 kwb=T7,u+w[ ,C(Lj, J "7#%چm2`4!ɵD`ppSSF ]Y^<193RRIokTz& &nڥcw lBiYg wᰘn@K\/ADXhi 02abfr9$2U}"wI g1R)M+(DɫMh:5H?;7Vd;Og~ d4iJF)9!So>S3t,td|C z\#Cci;W$I$ie$5%աeg$b=]}\ԢU|-->Y9oLۄd&gvsR1ɤ'?D BUnXU5տ^SPetexRcѢIpB!׭[jBnB!BUenwC!B!_1B!B!̍B!B!̍B!B!̍B!B!̍B!B!̍B!B!̍B!B!̍B!B!̍B!BfoH|o86K*ق=9! k!B!Tscy1΂%UXYRp ^I8ր BB!B\IT|Q J$`B!J:ocհP{gnUB!唞7i:#Of:BUJ"c= B!unGp d&KN)VB!BB.4FU0f& eX!Bt'vPg'o!B!qn/7ycT|޴ZsL!B!B*>IeGqdx0qÛNvҙLKQ(Wͳ|n k?zOnkaR^ IDATcwcsƺ9[@5;_"z@!BUX47BL Væ;$,!=35&s5 NLLf&J4,M(սaͱ;&z{B9%Ȕ;է_$)y^jTxPd< J G!Pؚ5G$b= B!~⯩Je|.ZZ޵SD$׸^zwXM9v# 8CצMf%ʮ3vlڹzt6xlg:cm$6^4d{Xܦzy.z%yQŸV1WM,4%iB!Rw׮]$WP'kU50C&G!Bn*&!KYX;' B[%-!B_H*qjϡx1B!BbTKscrcX1B!BϢS`nB!nL&aՠS07F!BUX.17F?:G.gq!B!YnPȸjxM5Ij 7F!BJL_%-:V YT]'D!B8+*lN]B!BӧIB!BqL@!B!΍B!B7;U>T#B!!B!ƿ m0ęŭ XwkC+Vzsl'{dʬP՜A[,91ÑK`!BU0O%J?~ uxDL&61ӴԮ't!82¼3k\_ٌ[=ߺJڠ.Vn;r_ xOe7KT 5/w_ o{ Cm37ﱵC9,@! {$JDUn:V_~i}e9ܲAF}_ nZHQUUQ?.i{ƚ>Wکs{UV#eK")kBH}/GixV̹(/o*_y:yOFQ.fl(Vݦ(Oߐ߽1zlz׶1A!j ^dG6okff{.^:U+OgyNm wcSNdŏX<._y/7M|VecQIDFF}WZDd]_ [y4Mg_g@d4-=lMv-;Nt3|>,od)MӴ\lmPu{ DT@j7tljK~] ֜a{/N 3[[w@ _>mvFZgu@n]iQIIQ>/y6u.KY,84I HzFwۛM c&^~m:X&=5qySOv]YۊNW=9Nnۼȭm6*k1nP+3$,KQ"Z>bcIͦD@il= =S\]],y.յϚ@QU٤.z0S9$\rN YcDdFgʴiwzc:wTN˧'hy vּ&^^|hp 7Ub:p+[SrF@=#wOyYni=LYF Χe71kwo4k_j~KRՎuԟyF u>K|*z3AY ,Gx¤}ΆݱA~WοM 8j׷ ڷwqɟ-7L(J] ܦccr$⬨CK^]ҠnZ<|?4!556w_Yft&YcnBUH)rZx'Lc_{ F#C,ۘ\Kh w{9h1 }5YiC:Qv^ K~vz"b{/>z9fZ$Й/.Ƨ!sy”ߞ: F:On|q}.do~qkU-aA&) Kòe>-miaBVg(i4hay̺VM ̥_NKiT ڳl>l5kxx//$X/uӑ[ U}/z<Ӧ懖 $?Yu7:O˼Y #MZe+bzTAHjZIL(O:-zN3g݌KJԶ!`]? zuSf)&H i2URBUmw} iXl. UBU$S# h*7>>OB2 rR2Z.Q0Y0K!^]T&Y=&o=?r]FS%6Lm SN~(HO:;Kk#drD4CP@ >bxrMzqHyl֝ x뇷$TT] ص$_Qr=w0}yt Zѵ:t>]4̷3u&ZhK.ڸL yCtܹy{acJZj "BMS)$p%K*zO|Lnebӥ_^2ْ?WoK2%`nvzPMfr(̖BVdbXyfLpt2+Ρ~@nmG[ q4jҒ؈ttG0\Zu/c%{aѸ;,hYV⷗t-l^k? :v*w}:e+me"Y&RQB!TJ `0>Y +w]+eiգ~(w娫\]} Zk4,y+G)?4nHv'Xvϕʝ:N_·o,`׬c6#upܪ+1%4ooG h/=7>葰bϱ"֠r$Nj􂺐9ѲŬS.7v/kq}{ٮyj:RBbE@ ر{YLhpy7WswW4]1dAs|vG&B CJS)J/m.Tߧ(E}"Cc#7+jXy_~7 __ i/!$U jVAb|c%T[qAPL3ePI͗zK9ێlh/KNK{N'g[:#p3˖ A)Rhq Tޣ 섘g:Ow^6)reJiݦY"U]]f`mdoB@bCQڜ_OSJ$I|KkY_b m $$) ByєOckEyQ9"rG NkI-9gGŋyLyD`Y^D $F|}tpfz=g\hIo9` " .!JV,. M+(`r 6 4U/)|ngYAIL fSNmr-0k^}r 7dlʛo޹n)4*,MIo<~bJc5>aIr^?}w>ĬQcl_ +ȳu!Z4P}Gd0tleaYw2ckkcmZ ZEb 91ET܍G>% 'ںqߙSIyPbw {4ebдGBEX|͗zK>SFW?,ձ)?]B`uq>ȪO:nFҎ5x`M;44r.GwUJ4G@=$ ]Wvͻ7Fֶ`rCѻK-Ь)=t֦&vͻ7e)Wo>8o 4unIę٥į!f2 L}oEIQܺ-l$9~;W{kE\~{&'`iodXZV/o^LƟ%H{ͨi[Z7?u-z/XHVy ǧpԤZ@=_:7>,}cKq'\j0z/n~9H"Թ$Ya6,x)Esh;"`v""ӹܷI[}4!w[:٤kq"\u[T[-tڄ̨kZ驚G_ys]\}Ț@Q dw{T?:.wyg}7j> ȍ|oևSzic7E(2Bl[+@k yQ]'g)c~ x9 t[RrT/e>rᵻoW05TR:۲3~3B"ϭl̿w&JTʺn83#{{9)Q,\=cѱ<}~-Igt~[MXx8I7c>_\$=hx$&<71Rf_J콴0`iSNP]^'V "ݎu7 B5B)=9`>i1Svnĝmg$JJFh:5HdaswюY e|x#ݳ-C+[y+L uNDo|Nvzrm+ia6T]5΍yvclWȌR5p,[6}&2AȢ]WJP9VA e W!oo.}y6+r3y4TqX83A?4֙v3:kЅBUՆ[~kZp&T4v 2MZ6v1 uߗw]=€{:ym<*ºLRխq̰:QFMc["Bc~^)UIR*L߭Hq2__:?5q9ٝYjMk9=B!sRc֗%{Ņ2]*LgUX6lVB!B̻w ?ܪ$VB!B8̍B!BanB!BanB!BanB!BanB!BanB!BanB!BanB!BanB!BanB!BanB!BanB!BanB!BanB!BanB!BanB!Banj&doLX!x!ʐku]4&iZ{J=7G!ILh"5 94MgQ3а` @ cA?; -nQ+^7^<&BL.Vn;r_ xOe~e~+}Ol9[=%аxE%5j\{_i9#i^Zń~V6 i~q%,_M2nľyLc_z$m>pM|G5lmTq_i}6Sik1޳&dKU0jîn?~YAQj1_`-[ג7M3*NmNxיڡ֜R 0]@ ;h?jqpc%g_%IirCu4bF3B\'՛o26l%9J9 a`b #ޝ{$?Q[mћn۶ߓZócǰkjȾ]􋛤b wr KDO' >~J9']~([`D[2l޾Noi˨36J,ZJsۍټaBptZLMBmw{sϊo3VN. Ǐnn 1em#21$ Z iH MoE>SyO8y,jT!!z IDATUY96 ('?mDDvW)&CkQ&C O|$_C6cn=Zݢ]{k0fa^S6(C|d`83w3S.?w񧩟Gfm}=AA%Ok*Ac{uf4ˏ~9|P4h!MK_WsC)]h^V-8_rcZc&ULDj7>cL&6L:76mGMviSվCJ7fCfm ΰpg;nXy7iFFtǽS8rL?l_ՇmVgt8s*m7$ i.2%B[Ѹk=Miq rRb2ȴj?˖/?~C~:I~"v #geѭ%]' KFqZA&Ŧ5mto>L׼x@%+sj@ͱqmmέdoH9hIpƮ]&  <3ͣegV2  MvO[Z3Ɋo:-zN3g݌K޷I4h ϳiլv /TYMoM?=Gߚ8l +-M;ͥ{I~iDdܙz`7=sT9@}Koՠ颜1؛Pzn\ldDL6_ܼnWpRe;nj;4LƇ)crÉnμGyUM HS6/s5t B-“]̘ ~9Ul+2c2=5$<;>Rj=;~ҤgV=;f^{{]051$Zv멙u{7BQILy>},o b2[עq!uq|4C*XtVG<], C&cEAaeҴ&[4"?#9%SĴԹݓ"g؀RiRkFg4Z=ls Jҵ[d>Ve䟻YqbY=>@65A{jAkv$n00: tWn߾}tp1k'WC% 1ygS 11 _3ZcHS>iፀlSGSH O)9VaA%yZc.yZ;IJA°.sH2 񋴲<Ҿ6ԩl LDJi M I}{'X@ }TxH Oh: rK&R%/cn 7g{>)?;3_^7 |<h)t7&\#G C6 hnmjjݬ1Tv ݷ] X7$р"㛒E0ژiknkk[ O0B&SP2TQiP:^6fFF掝Ld{ӡzn[XX52bESťH?{wWS9wmZ( c"kPc4YKYb]>IVvQ{|?}ss~y~sx-ظE#N>c 4^; \)vTq5=Ӯ敖_ nߵ|1׹'<^bX,'ӹ-M,*y7 Ș o| H^ѻrJ *,T]wvPK*$rhT&|<2UܙP'V_뮝-O[bR;i|t[1~Es{
lT5{@a_P4255.s({p.[a;='^IJlɧwsqWfLXlФ=N ɗoYXuqɫ[IE†Skx=.\]SdΚ'ʻjyc*rogJ8Fqzr * g@BٗX.o %ɏqE ӧjˁ(%7AƠ߃= Zu@Ɖ޷?\ _,xݪggsކZ.j;8c#CnlHvtՅNT;@@yfw\wջeAXRJ!.wދoڭwX:Z #Z)C~lĪ P6lo~_FJItV(8ֹȚIȩ*';Ω ߵcZNrEډUK}vgHz@Ug,hFZEGo @XywWUeK)<.#?Ah=QU>>NW_8wTz\t߹~Ibdɳ){'0  62|'LQM*<]"D -]N(K·xΚ?* 81vKl)#l:Psb*Z%GDCg\(8quv'v#_lǎsqq!B!PWGxjog[GLL $B!BB!B!B!"B!7F!B!ccB!Bƨb;vz4\a'Ec OU;2XWH+IJ2YIFmƖ Q2#n>-j[b Xn5NOAM4B`8mbϭT.lEq?F7}EJD_!Lزǽ37lM:ܖ3c]׾B ܊~NJ[L[9D[AћP&=8=\\9D3k)k'|Rٌx Aά ˞}#{[mseSbym%1ԭ'Λ5,#;ⵚ$1-776._I6V̎>v^3Faz33;6Д;o7aŮ9AZʧ[yמoG绲W?ʽRq}ڠW%4V gm")ب|%1r34Ao?Elm+)hLұ1z, YKcz 4 K9ڴcɏнhB<& )C;t6fDλY;}]XgXmK:8El]"Uy ޷ ؘ`/-~ۭATaWiOҪ'"R,"I FTo -~~ecga $h@ڞOgMy-g/W dDžڣ?(O=0 _4!\18y{@%IH b(Tj:WqJHpmV#"ٮo꒔b{g(-I6~׫ݛn?&ّ}Ua==?A\Bz[7;CҐP6Ȝמ/I]m~Z7yFM#MZw]dRBϤu1\݌%mɊ5qPJ+34QWm;װ :2;9}2Z57BkZ՛yd:LX8L%f,@Jț_F%%)ke: MXua/؄ ٠O޽oK⪫XFE!۬.v;)\p6i$DP3sF_3W,}ьQFOzl)h)zcB*'s';^v jus L7soC4NdgUZsio4}lܗۿ޶)ZqОN]>;,<7m$P\eK&;Sxxb8 3KDQOfupk:c8CZ!'RHOXbOLhQ%οbXcj*?9_;QSݷDh8s6KkES/.S6ܢ;Y?Ɉ!ast(Bj 3Ҋ^Yt_ 6*)IZ?'DX<u&UJ( a΃iCMdkJhaTӯ?6l(7._}eYþԔ_ v>$kD90=~$9EEsdNTSud9_VPRP\IvOv  hv+C9Уl!E=h%-UnN}lh麆 >W|Ƞ_!wf3KJy; Caf2wy3yϚ8lQeϣ)< C.G{8YCwAװ--\짹<}JxyS1Q%UFrEbCU:r9Gy B_T2`Ic-eQȶj= RAK" g/OUʛWjNM2FJ.:o  rnt:Xœ[ ΅<]gcikLAѰwyp/W<誆~%hλ1=4ӕOJ}ׯtx_MF ][F&cSFoM~(#Ls8E9PZQ|cc{866V=M[=Ok3yCL +0;Q)]:=OB\X _DTԕ'@>0blV]W(ҙϖ{A IDATe4Nsk{ ݕuzo9)re@×g. Lru.qׂ7{ruz^aq OAW /z_4s"&sC/&r$ a^|JaV*ߵH\Wd>])_Hd\M`j3ꓚBPp6[(߽C-TUW\RE(#Lߢh\lHQԙ:sbEk ʖ'u0E9c-t4u n ξ>z:uٯ4pF'kks-**tkmJ /75(]d6g)^ulgߡtd=Z}Vj, ŕܚT!"+"o{//ƍL &w`I JД;AFԴc7:rw @TY%VxA"@$/VGV-}H(Xmuփ-_1T494a]Z\}7LM9y0lQ[$(J)vdkȐdP~ڍkiޮMLz;] MIlErsʘfM(@0~;|,,NgsgQnEQsgs/z?Ve~wamfd~x׼l+?f좯m`9d` @8JOqW>NGzdQnt7¼bE 3=sn2 FdΜIL\x/pW斤E_CϤK5q^4CM +2_gVzWuw^]9!4)ܷv~`y8TG1w@VDJ.hbKo:Z^~UqǑk uܗx3~+qӳgw&2 Uc: nDۥ_|nƳ9ovT;6FvGo @XywW3N(ZN>U[Ev/u.uDK-s#|e/ UOϬ 8&Ҫ*nAe~'G+o]fчUT{XW8>4SnnM_vz[՟y%[0=~ԙ3'q1֏a0$oB!BmJ\\\m111!B!~t86F!B!*Aj@!B!dEF _c 0L!#sB!BplB!Bƨb;vz6Ya'EՋ{]v&xmmZ#f] ;4ÈްB[ZZ +T&lm_KO8',8D\J>w&y%I|+q)K¦Z;M~W VXL;ʼnҽK|cZzȊX-Q"+Bѝ:lSSp"֖<}!&?oPjAp_TYQ61u8p'Μw2Kؚ:iSRxpMgj_`@(x @ↇZɕC]cƒ_Os]H ]O 1zzԃ~(~%h \8*+}|_)hKmh>Ƣs{%ImCb ϡ&<)ZRV/;ܶ0|!Pzf0]u> gWYjND{ (&UjB6sI" 7|Q[8@`hyuNERz7`p+b$PW6k2QHFc__~#eMݑ.J/\j;cm5OsE##yg𾄗 CRs^nߜnGdr(Z=/ɯj撋9B|e|mn]qX @ H{aE= EśG;# 23tBuبL~X!u7&%I}AȪ,6`m_/ro/ %znNZV K9ڴcɏнP.\3ury$ib8hqtI/pLZ :1i`M,މ$v]vxSd^sػ>FW>޶x|KЕ4ԙ)*d 0` G{N(7F.}gԽ.8$ZEW) EXD zHghM+|AH5=3ή3k4MK91y1xk!S]/aێI]:rSDGFVdF_ݷ`xPgIr H . Y˲jstHHSifhayb(/5ևEK:!HI A%EQR9"lmKMJkp%;)z{3d?;ϣ*̦8p0Mu(]o @?=aL4d-}mgEd9cEQ-&{ok$T2KܧzKmϪ2A咑#ųkz 9_ָ;kϨL{p֋IRr6~7Pw>2wΡ4$y11cР  +I6ZFn䧞 `X̄dE5ۺ2.A\>vnz! @Tqd7h#^_cL0=Jrr EFGR#7t.=/)?-ADdD͎%@V'ji1q=}1^k}W9o;e3cQ/6cz<ҨxVY,֘UacY,5vD.`A>W[fnmf|PryG-=ƶL=}m4+ 99Tӕe8@ҀQE$ytĔrVd>/-q7+FN1eC% iq9ng@>*^;NF?^?rTo[ruTk箴O:w5U \M'8 ʨ8U?~v-IKYܹwSg,9kaAOi5j"2u,5z+%I^͜h*O-w5z֔)L]CO2>6ECT/\x9Y{;=U_MԘ@zL$ה')_3Ir.CUBΨ{Z҅4~14sqBNm* @cGwbi.(:Z +H()LxiKF֌B1h0גy[I:Ol{?PpxgG[dUJ˴$Λ*2++&s5)6J8#&39 䵙HXZwbd>fjs1`TruSxywe`p)ɑY1Z9F޿gJj&u)Qέi y0o [UbBKya TQRzzwչG{4YԱ1E^r*3zB"6hT:*39pnP5g 2SUVY <;6mN9EìY˷r]KlHOY?PjHD4u}x+eér<(dZ|LKCnwZsda܏teSe ʎom03ƾ|+6?gzu)K#1#h2q˘/70$@1@gqǡ$*z NڛNˉ"7k*]tOUo%'(,7n׃ޣH|匓9sx5SR;"*:a ,|T$.HmF~eW lΝfiͼ2xw,7pq[,L<=~gXrD]l\n,d?8HtS3_n.(ZssQbvgR8,I$$^}/D>aεՓml,{zV_ljt8hzFW]ZIRygOX$I>jݛֈΘ?oڛH<+gli,p$"~`.I5?y\Qij3ohӑxo;Z= {v6=8m4Mx ;^ 観́hɃWPz jOTF y)Re? WV⟢h4[%bPONͮ6/9Zdb=XEbY7o-l3Е4ut4M1l:\瘹.sf01L:R'(^C >9CN:hH+N֊>/|0sA*oxC?pFӏ>o AR& 2zzP/Nwr? #~Aς$@(v>ruz^aq OAW(7KNCFC*3  ٩*TvTf0=Ted)EWGF>ūd0dYPL?J鮫q@s?t@(ȮB0pCk|Lz%OABy ,K˪oW3zMw5UʃWWoGVEC&/ \Fc5HI[~)%BR_SI*[Cn3>(h5z13 /]z/ԁ5dž+ʀ"AURR,$.HoHR ru[PvegԕF} Q=9c-t4u .f޾8ۖ÷RZ(q"CF^3zƟ83ySK,&qGٶkr]uu{Wg1s/r v]{B,W|fŴa=K^[V"ŕܚuF"H q"Ni:T]wvPKqYG+D{\q~ɳR1M+c6UylˆwFdQfP;U4K9OHPIQOv}}7wU%] %:n7t~\gD7BV'ٞO„bھD!@'R m m,Xl[Eۊp *. @@@7 OCE:w`@~i܆sbEk ʖ'u>$wJ:M]4;.KP9H(ҧw0A-׏U2|Kk7qNzJMe4F.bg}̂&eνFid'l D_2j)P-pbz+*>Bu;'{GwBRz@Ϳl]l9z.lߐ#s9pIwnl銞~XLR%dY} ־5!uUlSY}؟p&΋xdEƓ댵Ey^x5ϧCĥ?4" Ӗ;ί2Ϭz,+r#CCJEoݺL0rGkթ{r] Y(?3R(j@+7OL-\/~bKb~#wsTmGvyv( ^_rM N]s,Te?=&Dm#,,χG˝W_\27.v3YD$_U"S@,. /Yzl1*@VzU-HQeXͪC=5g(BUܒ7ww vS IDATȼK%Woq86SQy\qZ8%y[Xdoh]@p`d*@(r*v+sKҢzRA]zPoy$e 嫏_qƢs{%IEl)nv.6AZ)cm  Qi҃ۃŕtn݇1k_DwXםYKY;aʯT2`@ew_J`@&y6f#֛R3Ydfl>̠%3泪mEtqz m '׿_>h(α t_ /W ΢Lزǽ37lMʃrcsu:ܱBBmAS8o֘f2²g7F7՟QVT4U%@!'>zý"YUZrД;oyoRыSoEd76jNQ\޶ȚN^ -: )@('w2=6ҳ P}ݐ*itl(?'-Mh؁BEs6U\r1G(ӵz Xq,`ojX~…kfv@eLm.=~F-(aa0>*&e+b:ܹKyaB sJ_{,&vmi݄TA""1PԚ.BV5zi3si{"hqtI{/pLZÕ34QWm;װCIH ,٨VQ oM@rR<$.IJ!w}f2|m+BIiwzѽch2YW;\'_/iU.*Ȋck%u3dHK2?9dw_j3uH'捂rh(#L-k%NNz_unz!+(0k>US;X<շ丏Tϝ]iDCn52ck Ѭsq3lήÇw2myW24OZ!yGQ5O㉉d=)6|luϗwFWY8xn>^7B#xrR8w;ng @y>*R },b %"*_pw3\mEw\~RC}ޡh$\9ƍmU=N  @`<EL?.aaaB6/b(ې$H]j3!0|[YF>1eC% i*2f1Eϴ߫Ja@fՆqp`F-PD>bfT~۹&k>rQ'ߝl>)q'b B}m{^e1,Y0m=؂+i!Er9Q%j..n'Ȩ3j[V\5mձnU^U,GaZ/L|k|?)e-@Dazlc.Bj 3D^zP5IvŸAi!d Cw>UΓ&|164FVha`27a`]~90TUe p4.2pvmd\i}Hf ]r˦s!>.(:Z +H()L 0Vpp ΅<]gci!]l;p_JhU ~0x @ $*{ynwlۜrV7YoUJdUJ˴$Λ*2++&!_<(O@BAT苪uV#iV}A5d*E] q#6\brNo9([iQ,Iɶײ=+wh` /:7H]Pد$My9FsF^A?c<+@#kk xDh'|%h\U1, 6Z G~]}![Q[t=R%Щ2ؒ\ {'[rpjjQBa&O5ؘbऽ)^^Nl)=QU;)Ql" kª؀ ]|va^߰ ROa;o뙙PsR3)>HFa=QC(*tɔD{V[kBU2,BcJ JPrJxƿVi6E}ę?cc_3V=⺔#GJ U< 'ie).|ɤCB w_e{a ݏ$.HTI(*ZC.2{ ~WY p]_^M7y}4E9}^uw۴XkN`Z kI,L LPJ*[D']~U^fܩkxߔ|"}"TS ggbMehL?^Ë#Ya$}J$E;7) M;>7p[IJKx`)[xMdEeH6\~@*]XR* 1|yfj/_Xw-xt smncceٳߴՓT iæiso:\@7o$; JP ],& 8P.LL@g=%*H?Gd堶vv),,B^^JO `*x)~·廊-`{yO\dƔBe<@jzySz_SQue ²Tfԛ`_Ro_U~R(3 9!HGۛoTX;0V=?-)&203ư ($ON[5IeiYUkNVi _tL$**y\¦}t%MM%z==NJdfO3y y8/K3</."Kܻp+e[1Sx.U'y׎{yzf߰Ub}| ~WX\SUJ@@Gُ3R>~@AZe8@{3Lh&FL(f ZH$rTթ {ŠiP#hwRnEn%Qj!Euм9f^qY)OI@c2i¼ìTlx92}(SUBـՇA # [PoM^ݪs2i3Dazlh5z1۠9?=J(̚OIKvwJ:M]4;.?s l~LTcԝ}}&6545t_{sp]8MY d LMM;SGnalc'ͼl 3՚anɃe$)?A"@$OǮ_4C挵06òf&ԹQPRL8@!#CBrsʘfM(@0~;ےh@[H(F}tqgnZjO%^Ja3TLm{[OBt[1~Es{<; Uwjtұ1עBVjuvHLֳr j%N?ӎ ]ԺRltd9nu裡gC(*H^ѻrJ *,-رwH{1Tp5'yWfF]1`[y1{`}mm!3Фjd(V߻ ׺kg ӖTNE PU~!CԴzOC@sDazlc.=p}f%G YS)UqǑkr;/&9/Wy-_}2[$rS;ש>wp}dY]5ynwYV$F3R~[m}yn7VWl}Р3-'L-:} +[,y۰]66.y5Yxrw[X~9_~r} R27.v3#y iU0  ss[VoBWqm&/L 3N+I(Pr}k-M4l\+aFp]:PGDP910e;v$с;.UI\sucTiɎFW,3Ɏ\3I*b?9ȑZ۪q^U~g@l<}x{e’cj/e@v\ތ' !cLv'v#_lj]GIY)رc...!P[sB]\\9m111\Y!B!~p86F!B!ccB!BFUBm/BB!B!B!±1B!B!ccB!B!B!B!B6 !B!P3j86F!B!g?~!B!P&CfUTT t#B!22&{ϩF!B!ñ1B!B!#B!B86F!B!plB!B!B!±1B!B!ccB!B!B!B!B!#B!B86F!B!plB!]E}?o;DEWE]];PD1ņ T D?AaD~y%B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B)@HfJ#o`1Q!BɎm塽)aE(HV?{5hA$[vZCDfa#~!BfkcݺpBI?NzMY,Ua{ob~rlBw.QzWxϗlBuy$2 ʋwm,曣!ɇ:n$RdmP;lrl*nR]P鸝S!Tjo**f)%YH B/ѥ$7Tz̿n㬒Dyb޲aKe6lK&s/_c1TPɽdO (47}R򘭁2f3MRſ4S]iZ;McK7?8x~aVS*ݜ!_ZWz dCm\`QQQtǹv{1tÏn}v.5rD  H((H(W87O\{$If|`z= :O!/v:[j>!$|BI5lB9=IR5Z^\zRvoHq BBr'#*;R +:"1[lk~id.!_Mdn0W3 >!$oǖ(iaH]_sr;8aYKx{aIwF% t^x]Bٱo/ϷSJvǘ$elH%G6$lHȡbBۙ d?B a^81*6B!j6r坠8^E Bt,:[kd)6Ւ 9$U,N}rlѫ;(Mh˓!j!{>cSߎ)E@ BϮ9`ߺtn׹9RP,IF; x\LtMG spX/:KfLzU/}{O=γ6e a={TKKWVV}vwmu'Ӯu(qF={ʕPE ^2=7,z_m/ۤwŹ9-a/_1,9h?=LWMB!T,A2w&pԜΚ?n "|#\faרP2o߽1CM6 NM:P˶!;B ` A¥Sg,֢2ݶl[}Jz܇[QkH׍gl]6a M ^05qJ%QGEP3(>/~N:+""Sœ\`*1ee*hhjo WFA ˂, H>?`@I+4o xjT;~ʗ򍪲@H CUr-PɪhB_7M 5=/>dDwfG5"mh,EUC%G6)dt龏7rp1۹JxJ-W_yk)ڕM^ZLd8WFIӻ[p,cmlgv&*~Ea#%\]Nfa#l۵4z&z 7Kf: x;8g=6 y|~<㪢VbqO쾤k@UTQzb| yqfyuI#u޽u_}mv_ߥmee:5e)0 sOt GiCWVܤv BBOxh9غ[ىA j6zԗG?$n 9_;wСt; -si"Hyi1gnq.ss/A[VKS\OxMG,>oa~s .ALi:ĭoFKxɟ>w`qZ+1RK2X-M 쬙Kcq l^v*x61SP05|y.MIog0ֿZMJȶZu"BaTD@WA$ßE=wӼEn>},OP84e]XKim㰏 `TNFV Uِ>?= `9eN K_d}NM[@HM5B!~Em ˜+}*~cxgJݬ&y1/>g| ~M8C1:o%ef% wd?o}0,VnJȬX+Ҵo'F`p_93N=`AҫvY iqԫ8ݧL@GߢcGalHʯK ^0+t>o+n)5us[F[~ޣG\;H}a^G; xW.F[Tz)pg ҼV}΋M (s"<〯ї1e~XЛpҙcGnp2cVJbz/>ѽZJ-[ ?9}6n=z -égTMp{67Gʲ&EI/~ujPͱ!_j 4rvۢ?wC ]>]|ǍB!TC݋@ ӈ{qj|-m*Whxwi(;H#l]|MŐm_s!$'wP;܋-`!_jZt/C42 !7kI;lp1*7r:͆}s{F߼ɌZ[u~@8m7|9գkǵթჟ܋K6/eQʶ$!g'tA >ͷ,^|ӝU[n!jzR @l$1!۶'N:>Ém=bǽ9ގCkw}EL>!>][g8@)].R~ޥO¢SI+ aH__㎽I/`ɻ@pBxA3[ MN?NB8#ѣLx, $tEcYƆq(_ơVR?Kr6*!x!Dlhl"x2ф!߆i6ꨯL[% nXb ,x]$;cIdĨt%/~rs!B5W30YME37C 0Ij߫ɼ7Q w1ȼ}*0djVly6tldvCah@5eqwU~8*B!Tc(OOOgggLB5a2-[b^\2{2wE0- j . 0'!Yey[`` 7Fcύo}n<&!)_5aB!{0!B!6F!B!6F!B!6.f핫\<8m1rcYgK;e SɌ痴IN,:=ӎME8aq~!Pm܋R8kΨ.쎝W>օSoǦڊKzx!%Haej{FjT%q{b (vȥQg- ]j~{gqS /Mv=,)}yvоK3E_K.7}w~uU >㚁s$*FqZݶ[ >n1^zInfcuker)+? %nz'Ӂc(EIݚA5γY ~ȗ地t#g hW_e=ڳJp%9BX47O}}c 4|W=NGwkݹAǑTQ13gn["LK yU)M+ZՈE`S|4)LIUe OrǧZ 1i˚qs_q[ɷ%GHv6bi]71G-9 5:6|KJ+9g%mV05+圮m龅-cYKq6- TP=>)lЬtWJczQA #ŧodPۧ*(v=n~!qVAi4iSEYlqar)7V.%=3fnqzM:-osbx*-;Z)!d2Y_ֲ\aoZw_.[ِ7-JaXKr~ !ژR3k Ty|;wj?{#6ǿ> vήmkfE_۳Ԕ͈[GP,99P* Nuwc]kA%;KNp0Sm-']wyO'_ :>go$uRũ1+/-; _~j| >)9cG^ݽek:~ܶ[-|Gִ}~FHARdXXF* x,!*/1UZU<TfC~ZjT!]R5|k^÷XZk_ ,NƖ4OVo}Ii%()89zY T6ٶc'˗E "ݓK !*ܹ"[;=F`hx&Q HbDXX\ 4#RM * R٨cK{6U8z_k.n:{$Ng6= *!21Q3kWKǯTՆc"qx_â*z,τԛvm>tC:߿C:>D$$_!Uͦmrq}"[95a^4sڰz֋m.Flf'~段C5g !2&a:h6e9⟒Qև+7]6{ /ACQj<<}j}ׂ׸߳!/z&+NyfM ~Kl t #:CP%U~23@Bm34M5 #6] u3w8v_Z>sW`aP*{y!>][,i?}ES/4lnZ]*aI7lMG<(~>N\:ySkU÷9mk + ~ͥ kΠl-Uԗ/0Q߈%x6!( .׳Gnx܏ R_23|xn;\O.,=O[7rUZVa%@٩II,~[ E>%f#s-_liӍ3 0tfY?[;-0@L G0*}5up~e%>TAAMMNnщ?;喲ɣVK7IW"@aG T!ŶaqSwCF^Urk˹+ ښ17Z:*$;-WМ R^5 !& )(2Ϳ]O FvFgX)Ajx1m.j??ݳᦠ9D_(W^0oXtefbW/ʰaQ|nD/~+;}p|r ON*1m՝4(xu JvdqccYod,2BV)PPfQc%PL5]]5)!Fd+3@,.BH 6!}''e%[_RZ ,Գ%5|l\zcQlޣkx\OxMG{^H ݰGKc&}MM"Re_"'g_qQI cQ~F>Y4"dWRފ,5KZp–Q0ֽ/دRէ/_!Twkc !i<}(>;XY9G+H8IWL]qS|w }wxsc^BVicadXߦuQ 2<-Q3Sg haabi~知񷭭_:gloahҬqY|lwkMϼ{ŨYYYYYYh0Jcc4(z/(hZYY5B R $Ħyd7en6n0t)I_jڒ;jȶU PK} /5JHjU̪VLR"$AC[[Yrg%yAsX?g7niȬ7a+()tݠei <qʢasAݝ,~,HtjAPJVVl% +++s=J)$Z%ਢoJP3i`M#ew_9,Fw'ܼQa.}snŲi팡YY9?V˷KY:-DQZk(62vC&MZ9_qaŷ)ᜊF//!3Fw>[..OGo;rsA=cko HJ)|Ǿ2qOr!'sX 龓7yɮ O s7dHi%L~>^5YRBYV·0Yo =j$ik9N(τT톌'Γ%yB쌉@Zvɱ˫+{(vǗwL\B]pp,o aB6"RV3wT[7NX_!TT1B!B:I LB!jy*x};)B!SamBڇo!q@ IDAT/#B!!B!V9,vHrp49eFNa!B!{kc^n' CG{ϤTlΚ3*D<>cϹuyZ=L/|v-@g%$q  dm 08 ^:{`!B!$ٯ?i-NO~*M ĩLl?[o >t*͵!@[Iw!B!nSYv]w/αeImjݧp8WmQ04~-=zzp;uҥׁ\&x !^$`4`CmpX-0@¸6B!BBV&Jj!V&pXWӔ4S\1})10܌noWk1j܁,㖦 &$;4 LXu8L]p,~-+/M>]s}}Źɟ|ObU'ӟn]tp1[@nニv v`<)rfBCv;>[+-qT#BX?TXQ0oog1d8.6O&qO曣!ɇ:n$RdVRcTmoC^78٨w혵\p8^{85aq Cvp.S=1 ޮ=ygKo&jvSz% Tl.u( tNKp|0‚%v;mi1~RFT<8߻4VNBv;9:3xx0=è5;_p8.V?CfZ!UBuSLD&TGbjY[@jė4 Imt: k^f Ph89ao򴬚tqt߃KWj21sh]A2Suy~G"SF̜]7nOȧg9Siz-ϘeMḹ ֊V# bDAUh=xyԩUq^^XQ$+n\ۆ_9A,=m&fs ͸[8G7FT LyW"Ǝ殠.()/6UdG(dŭ_r"Xʴ_2B!1Bdo@|t=ۡo5vx$?xHu6g Ma-OF[}&Q ˨]hAY{ם- r"U.ϩސ퓒$7Ⱡ◂CMi_UZSM-#k>U)-{9hFH#IaaI=Iem\T>@5/[,sfqu^oQCւP{ve?]?r>r1=aُŇNp0Sm-ⴷey(Sc%5B7 <=?4b4l57h=q@'K]V3e\uRFyҸW+;B dNuU0zv[Qq3 ɉͻnET3?,[qPژ~ܩؐS/Sr%JBRF})}Ɋxk@)Y`B<B焒.NYyQOlOo穉+G~YxGo ̯tN;g`v}666ؒ'MrH^%NBZϩFuJa!}OrA%bJR! =,Uh@x\e\F3.^d Q PV2+(3!;1V4aC_Ŕɣ]vЛdhCC5p9z\?uFg _ijl2`QKU7[VsD!(`CTWOycT/}-,ؿ e;K'NYt܁힣t9]Xoߡ{0g}޴C~& j}7Y4D6]3ݘ/va7M1y½cL(.7yÇƳ6+řfNVze(m~:֬w2cVV1QÐ2F0ciQΣ\w۸. (f6u8>~}0d:e&QcLqFK @}Eawmz cJ~段C5g !{:xZߟ`5na_n[x~Ss}@FtFGk͞pù0 ww("w_d雾7Ϭ{iPP,m}eF# ^v>w}}֙-U[$k\KgFM2N䋘^af2dDgN5kjKrD{{$ ; 貼*QD8‡ˏe8HS6S̏|1:5#%6ϓe<wy/xjvH}2n84"))nehU%SUQJ:ดNgEmvՌ:j`\RsoȞ[{ξJ~W.d_~-j޿6 Xf={rT|^[sQ7%%3o?}lT@)yW!6FX1 HN ϪCZ؃pvGLH h0BLVf[MMn\}5Lu?;eNr>zͲ~hRL% ʷrz]20(sRqNvŝNvTb&)S@Q_yvvgC_jnȒԢ]ͣXnFpP fVw.gs3Z]UKz݇_^z.NQkH׍gl]6aI(N87>>Oɸ:~(Y#_OcX+TV)QQElhFv;S|K;դ2Q߈%hYx?H§^nHkGE]#op*=߀ehgBŽ\)/?}lT@)yW!~9ELj'ު?a}Xі?ٵή#UVI-.XO%69t-d3VqJ6Ӷ4ܻ /-6" <$$1}?:0LݠͶJgqa^Wv6# 3AK].RCajhd>42RC*Qi1jYeϒDLgټ,>dF&ma 3bҁHA~unNLDRZA@4E5%(H.mH%-owm~$(i/,h֠06Zv|E=Tˆ:$N1%Uj%0dQ=prB'"1k7PQȿ?NVwM86d^aRXq~zkj#1]@ۇݻ]ۀF{W^E7DMPP, Y_|-!;UPoenIٮ(ePiI%/N,ARO1 2B` l "f?}K_\Ϩx1uey -naFd^&}3B2ĸmcuϪpl?*\D CBX#$ƒVra?GGGGG~^@K4Jz;a_߾xywKqS_ `:{2]kz]s-FDIP*-1̱C&l[upQg]*!S+J{<ݸaXn"5maS̳K#$;a3}pk ## A!?eaғ+TY34_Ϣ#L EtmgRP`mBA&* /8 z<<=O7KhQY]n&Uo{Ŀu7QIT$J\`M}"!xN5{[o)ǗmvNռ=ٸ̑k޾ YXXn!yg_xupy*4];SiNr>N(J[ve΢@surѦl#u19QRƈ G 91-;h3WȽb akNa0#{LnƬqD!w. ٸh=;zeOzf ^箺7+AWRSȈ˔tjKt]ڭt9vsrFT{r͵em[ौ()/U݆6%Xn`Wu}]EhGWMCgϔQ^KW)uq7X o.¨$^Zԁ t''sl"ʢԻK&ٗE2K6!d:ĜUraϕcg0gWxJa[Ԗ=J_u2.wU:JbJaK{X\jckۣ]L[f>=,< Z5ZZ%YP˃G!B!jj4-{-u=u(A ,[xƪm_ZiݾE]z&yFzwA[/;)"Hr[[^b_P!t{/b z^S)&W֫e/1Q/8vz"Rk9jAًi7q o>sv] ZW\O_R|9;JRԫR)#B!\185 aKkI R hGOaBx-S*6q$c?`Ȟυ?'`zk_ Pjث% sIX8' ٢WCژnoG ݞF; x\wJôo.5=8;a3>xoJ>NCDi?D[3Wu=m~ڦ&Gkבgr ^>|`^s)eNf^k?lctj.ؐ_0=+0R1nաe=4S A|xB!BΙDžZ؃pvs=SzyұecX.-w:cV,Utҟ(ŵW3G.s0R7O Me7kb!Yȼ>#-ad璶* lnteޞwu:4xGu3Byj IDATω'Yћ׸JN܊nKfjP_IamfˋxaڵffX"!B!^w8Qj}}R |ҵ:,<{RNXn׷/}EqtE],ko".ŶvXw2+vEHoRaJ0 3 kg}2'9$9_ {a Z\$IvhmSHO_(Y[1B+hʛ%/P}F_JL4Fۻ7[}7IC-isa'/1e [+3#=C=m!)jSÒX5} S`+O!B!ύ]S)/!扭 kبy]oh57oȈt:ȺmK361!=~UB!B;ucB!B!n@"B!ܘF( jj9j B!ǡp| \7o铇tl&x/[v<_Qܲٱ7NxE汀ZW8h1 -[3.6zFXU'ܻ{rϱ_"Rf6m* 3cqf<_ ׸iW#ʉ~u=wRDPY콶J^sOh+mT sz*'#E2/1HleʼeX~ꢧĜ§Lgk1f !v.~ib(`'Jչ299ui[۷ aT}1$B(7&?, `SXwFѸ 놊xy02QW;N.\v5F:9&q#ѭ By'xRYvުQ# d*l3k9Wv.xѫgmTV<{ ~E;Ĝݶh\:Mڴ0TDJq&|jl gwqo}J(R?ƽbc1 ^M>Y?Q]r Z?E𙚝]--l6r͢6/yS1dߠ_+3zɅf/X=Uge4Z\67bQt75J++B!_)7Vk?ˇϥؑoH@`U8QpGPfK!tw/p dڊ@W5~@H@HJKI1P c@(h ~jY> Sj5~5 KL-o@-@Hu1;p@gK@S7Fz֎41=VS DTdzpJ3,To=(UC,g ϙ%ua==]MɖVJ&ҤOKwυ`XV$C,CAQȪ(t9//VUm_WJaQR]1B=swN<΢!!Ro1|ˁ~<k2E2 F! wZGc */ 0d@n!8 R`5 1 f 00(Q6X.]JZ@8LKO 4 Pj5'8 -j=f0? l%3z* u娘vh:l͑}8o=ժo1vî=͑*E8s&SI!ǰQڡqM:YL@Ñm0i#;&T8w 4Ma=]l]VfbێNvͲխ+t~&h=~Ra6Xa{\n- 5l݊;aǐB)/xSץ0W*:\Nzuu ǹ9:~41U*`BM 0'r+@l} - 7@ તT  [PRJ@Q@*@Mo%kyPe`ZYKdJ^yH*_D@ @4Pq_cGei?ݹܟTE#.O=>+ׂNfmI?*8C%mSmdJgt6Ѯ4i(d|[Ucb?ׇ )g;{Wtr0`_w'a׉OgKO\F(?v74{|G~T٥ip]Y}BI !1G96/=+F?lďO<37inoU>9Vr8?)],Oưr,f5~ՂIڶc[y\cH!35Z4\gCrU -[X1LQ'Qo>}];m ,TSnZ)]rN/YU0e(+ֱcY,Y ҄{!)*I*{93>h  W eJmzZmoXlq+pʎk<[R?+/Nuz˚hfzﻓ,Pü7{D[>~2KUhpbo;I" 2ziZ_pIǐB)ondetjzJlȽ Ԭwӎ:l`\R>)%z:<=yalk𠯂jis7…C Vatd O]&Yx }qu%Ijzjd|*`\b,@U$&!U`? }A CԠpMOK2z(/=\unNLRܛ'8-IOK ?HVhZvj;OU{5Q+LM,q+(72ү$wu;oZƙk<*.xy붋ҔOsn|ŨG-hҮfխ@a T4o,Tc({-kJjŒl,+bH!{v[}t3' lQCH-Scn^ԛ)?1(-:gc\xڽw [KWf&%%gR+.Hze" h9H!hX:@7@x5ttv Q<:GΤ,@ )@[%=$3L{1mfȺYw.WCy훤ߡ{rMn۸^ƶç0~v?ˏ9oٹNYߧUz ̍U#sKKz=R'wo3wSߖ ̛viC,ա=/ګyCC\e (R*)EY[=\V*nVMHXP"FQ "Pp8EZ3IM)R`˘!t3GksccVCYCnbB7n#je̦hvWO$ @,-cEbVr'F lXջlD@GegQW_%~d& -ʋ g _`0@w8(i %] E Z"Ux20(9.~Zy@ {E-`@V,rq~LFr}˼^Nл}︀-[3n”[z~x!a')#tJÉݻ_zh\cER⧏wm/l}߭ ,s,3mԴh2+{^ȵR*=vb%C[>l{OuS_o>~њvuǏN>UpWr6Xa…TfL|,~˽Byyy}z7u8;5ۊ ꭗy+s~{{uv-~nQctoS,5j)zS(SWx;*R+30Grf 0f^X ԡ oZQ$!,//kZ=Ldkefgh޶06$EyAgo71yMp;6,֠e 0\_'OlV5Mݪekk(Қ(Ή{_ janb龜rR[ IX W !B9]ev.;0lNC[xb`^x.9'?퍿[qт}{8'+3ӦXJ櫨oOGo6: %7qmfnr"o횿x7Py ?MQlGBڎ!B/򲷷@B!LM= S0!*,9,B!?! 0B!z!B!ʍ !B!ʍ !B!ʍ .g=\ ^`Rf<.E/ӰmUIQxsZGwʲewXW_;W=Yywn#8.-o&*j|ڝ nˑ.ڷrJ\j&B ѳwo%pVo1{5`p8Mzp[Vaɐ+4y]W9Vțr26/p4GuuEEk喇qnBE%\j ԍtrtuWMWJToIe-yF,Xw?SW Sͬm+{\ٹe:GmcS[|zj2!B~6nf)p< ( tҁ+@p`'>%VJDAQ7 b`"GC%;` 8 Lm X@tR7p`$_k@W*]X0r}k`|;/}xiǖ[Cs!M HE} OȕBDGE?8y05p*]CiȰ7$5LgeR7ԹVƅ? {(1&B_ n5Gx< k)R+FFC:ٵ U^n@0 |$E (@o 8\W`N:@hU@,pX L%o@+>(B` З|J-%5Q?qќ\]Lno튭Nk$vxπ@wp8`?'Tk :zd''5⼴_vbl<#ħܜ沕I6YcbhZt.B!?onk7q<wؖY~?1<.Z6ZZ-Gy9{ݿjaqA;xB|P8ϣޮ"U3+VE 2<`<&i,P>Ā(j-p _2@m@UVbKhQsHh Ԓ#-BIHn~f` Tk*7|XߺUSnfu?QE;sU_^U^F)Q╥Sfn CA!67fjh5G8oXS;bԛO_3CqN;"[5|6)jܵiÔה.Y5Ljٷ0a ]:6u-MTDo&+X4JE~rWy& @{y`:0<$xL^J&Z4)GJ&JX&u)M yh0M}тc"Cy.i1کAz D6(@,LOǤC Ȅl!B~XA@%/ؐ{NM.znQǶ K~x'cYa5O3w^F$$E=:s?ۤ}n6q?wΕURn"'o l+.^W)Nohwwŷ2:7)ZsӼg6qU+z0]c"U1ЎA!BT*n̩cʤAVfFzm{ cCRtFzCTG`2wQj XP5ufkƌF g ١eV-7W;7 iOr=/\07o1ezwRDTPXO)B!|%EWyYA:* {^ؼ 9,Z^x6Z`EG7:浛6rR5̘Woòff:>xqdGIɬX V"'AV:g _^'Aҿe喪ޢf#,n_n ފbץGEsRokcxIB@oIe-yF,Xw?SWpɅˮ@ݨ@'GWw1y9+Lvk(z-Z{'] syY )ᅂNyX:1|Z6 TYegIR|O`U p쮝9n4@zx~(Էh;`ܟmj9tV*'(Qq[V B+:H`Y)?{ʒyɐ+4y]W9Vțr2V(wU2?MYw~̭MHMFSmJ:uu|%Y@-MQlbn[Mz&mZi*rcB(7& uduYw=ӬK[\:M6Ը-HU]I&fXIMEXaFs[(}@RC{Kջ~cops]H~j۰R R PPT,IZJM{ߍLѫ*:5UI|/AO Kbt컈R(LN"*2AKV 8Q ah"ªSTf5PF n"<[MX%@TDdY}zYz'#a^=y]{>sTeJfxPqÌ3_4WJuK`Ll%~/,aqX\slp--:2Ž7|Z/S}'C?;gV%g~<ፋ+Pmʄ֙p=)5 "3(Ynn;d"B紁ՐRJӿk^u#k;7[f/) Z-G9ecaasb.rnZ-?JhA-iOˢU.s'Owcɏ/j7щ Dw3´>tWeh4ضI&G?V64s=u_HHʅ})OK/76G%9]*.rymG@U'fVv s/M:lfg(i7AN!} VM n(?_"Kp^BN*/ZOV9ZjI_ïҖ+gM4Zp~85 g=ɒ35Z4\#OzYMQ~x BYV:,cUOSYTMy\H-ݹ2غf/+dfj0{:8L]_ovfŻ%դcʲixq֡V{U>IAU[=Nc4pɪf/LL.; ˱6|ҏwpҮ)B3P5~6Djx ѢW4,5&y]s@uzkի%ghqRsQy[:ja{}ҁՋ6H5XՄ:a-q&0eJԱy߀/fe ˆ.x+!v==8&暼6rVu7Cds^wvѴZnb>/Aib?u-Jޝ!xv䛂//=rMޠRӌGSS*L1%f}l ŋO]zMF՟(gu ߀}QLYYP5PWDNv2rr :훵ed'*\ R $`,Kaa9Z/lY^}ԍ T"Nav70)2AeQA%MmuiB ov]-ǦqY٬wK.oG.vg 79ô j'A L)}ʙlh߸WV% X<`u]QYnQ "OPE $I,`e^W@zLDzNgaRTLnF&(pߊ@vX\˦=&Fq#)un}4vԺ_wEli@S "冮eʣ[wV6_fMav}'CAj_;euLx0c&_翹Hs@w~RzRQytRu؈<]ѷ}~-]e-O/g_{ۥ :,Xf49[^@v0?$h8`㈮M̈q:(ِ1 a* s)`9u|H fĦjf:f\9@@aK  ,TL84׼ AF .n&=-[4X=Swug6]@rNJF%Ssl }=+4z|g$ ֣'POs+Al5%0qM !~t1/^9W+7NuV/졯jQ0q={@={W*Z$7r¯ iڽs%YǣL-[Qa֭ de2i/RXӡcٳtفfa@BxH>e΍mbf_ k-eKWGVŦ]3T,jZy9,;9qt%SlB?g`٥ r~#F6ڵbดwJlv60.)q`0oG$%E>bZ}da<=yalk~ˆS;od5?tً7Uk"r.], w7QVT(y+CAIYEEEXT|ͩB@7U}{#W&5oŬ_c@  E Nİ)=BG1,-F斖 TX7IC__F5 /Ѥ5ֽm3K3fG5J7>VFxULYZ;qɚѵcO%4Mag9&m\^cSf?W(O~#k>g-;AE7oV~=[%t!B~oѥjeܕi4y韄SǔIľ 5Ɔ~^ SÒX5} S`ő~ОN׿OҼu!Nv\QW}زYu|/GV濋TkƲ'6gc :{#ሡk*~ eZ{Sx/?~o,~-\nAa~͋2 'Cp]ww~j IϳN3Yˀrw2k:}Xң7;,1lN- UFaJ-s=V 70Ɖp+99oVTjv7 .܁/R'^:{ڴTmCF1{SSC=Zm]Oxcb{BAӤXD!?%3}~'T)^Bȷ*X>^^^PwjB]oS@]KEd+sH(͛luVu>qWc6dSğg+XQJjn;crB(hh~,$bA%ӕM:nˣKT?0\?\ÔG1* l;a=l\|RU^?6Oʐ'-uܸiֽ;L ;fC04*++ȲǢB^gtPWG[N!"Nv'if& /!G y װQssGqKg9zfz藸L14P:{@pշu X>{y`A͓6$F{jSvMU0'1"T YT緝l6{ξ3>IXk:ogO/}BR&B!|///{{{ !B!Lpp<_ B!BQnL!B!rcB!⸖Ӽ 3|9{[!D.jmV^5Y׵S8 B@~2ukݝwb${5,c/*eY_VuF+cjvtjg+YJ}mcrUW!PnL =dXqBF^|+*O[KpkXeտMa3OzjQJ@pUP@1.}AϽqodvWSD2xS Z1cҺ<( ˑ IDATp"`TT6se2zֶMo+)pR/xztr];vՁfnOboЯxvBSʒrk1lh[Z,Kпf6{I0u["` RVH%7 ) ^^[0;ڤCmc?5jY60PUD 6Ylr̙mR6"imPb4Z\67bQt75J+r԰FeK}F_^:6p3WQbLܘ a ^ ^J>ju(+kfz &̞.ztKU@J|\}Yqa9$^N5lǡGC)RtrPd7~3MmctO<[+e_@DثG~_ȳת8)wсbXDo5Ϯ Ir'%@Kջ~cops;YɱWC/)}E ֪ʡo$ȰOQs>i|YqRk*c{mu==c/.Qq8D;dtqom͵8̨維?<o?i[!/y͇eZrH\ڷ$I)N]\u40ƙRDY_yzYhzհ#Z>~.*Yj$J)j٧|oUmTCOW ySJ,}FMJIi̓D_;b)KQzGΝxaq ,jױ77uχT Ն<6{|b(hVw֌!,>OMU# `*\ `jYps35(ŨWuV-n]ҼeX*&jt1e'h7.Lr@V'w(jٷ0a FjJ{Թul"! 4Y ҄+}6;KM:zv)$}9c(p |1S1Ow]8>J [zXsWb[]LL.; ˱6->f׳oSwǭ3Lc,=FYWMV-soT _LIfcQVOkX{)) \jDR~=sgۀa7H(d5fvM5m8QjT(G>ƭ(U[5 &~'Yr2bXRvY e^7 1|ҏwpҮ)ͫX~~_˚%:L#6f8лVNgh0Rl~:~?]m-?J1qݘϡ[Ϳ&_wcϱ7S@V}٬Go˩=; =88zG$b/MT a(X@D&{AQ"Ď (R?(r?z7oΛ3 AS6nSDz@ d6miy5.0UgILNm8.L,emJ[(7.҉z|>7Al,Qah姭8|/tX':VCgP}{lDDsO(o+/UodkgԈf&2a4׋e تjl&z֧偭&GHxR9oPo;]:aIP4<_xBQWG] e.xF%11cZ9Րi9+;)ɸgH-^oa9+3NVyy;Y7Odc}m< ؎6:Zpfm6+_8qo~T|bO|8[iĝ\|E" g\? g•MԢK;WB_/Ҋ_ڰgS{t17f8.gAiL'Lj{bMc:b.DOw]aō&/ tYJq 4/h h5o,yE|G[&tm&/W1 Gif{]\c?óS>Fuϛ/EQ`2oyo)nq9n 708Hg&W.&HK>AϱW/Nv]ʗxi_.!4*KgN[j4*-KR;JF[T\]V6,s9䅜–O{WQ#xO5Kl=ty㕏$47½28b_J[SO~q YmcM$Nh<^d6֑TFbݰtdL,fnY혪mƼ*kIdb49"kx{u5ziGv(hZh=Ht":/U7o6Q/can JBk鋗nfx] @QVTմ#1'>oW/eLUC=vale%%__CqFӣ+r Q؅4KZQ@ 0K)@&0VM D4$J8ͧBXh!nF44Y|ctKvFHңBIf=|ʭtz,,Kc` ;vپ򽇻LIҼ̄LCDDF9߿nmGW]qu?&x[iQĘ2h4/@K.̺Sg%iQIy<8.!]}iuMEcwpR^t-/1褧,O1xÜ;u8jn,hi0y_o&%e2k]GJIb4O,\$țzģgM?/<+lr1Da>:/}uFxBE)vo'( а<5gj3˃ d O K\M!D;yheU I c#ύʿP Fm+EgE)NsEYdC5?%֟o&T;ȚaT,cƃMl7s鞛 ]GTŠ^g|Cʀ@P(=tkkm(PPW9D}$gؿLtM'/_x}xC4Feve 4kNT.{X)\SFO]VS} yPdUQZZLӿ=D@M|To8~n;Vpo-s)25^''Pʦ=<': H{|4gbP(JM.b ښ( S؈$r)%IV)#_'mtV0 WY=s=d|HfhJVԔI߶E&.5#+JY,'&T\eu:$@$X j<1wZ6 ABt^t'U%luk(0!T:!4]&a,Pq/r5:01h]yzé+;ʷsg +h%ɩAʼ"fb)NS*OQiV$):/@Zy+GY_騕n KԘ&S ?FYȎˮ9`(jƼ|O#;=!jv."XB2aEqٰiBl#rny Zq Tp<@ pe5(w-~E[i[7ehݗz%f̞u~-|,ӑ[ %ŤZOos}I +t⫬zƨUS^#;uJH3L d-@`J (8 $TUD p: [)^D ]1jm:kpgxEKP=Crv1[YÔ3ފ-h^ǸJAY29(KOH/P[Vk~[96[x)l\* &&(.LM/+K}8sc3O4%$ن$:L&* zMt*g4ys'3_|HBqv[U2?)Fɖ%=KZeU3˼ Ϥ9r3_{zۮDxS1&?+-W}!Y%Rbs9z(~=Ӝ`MQ3=ΟV\1M'F#;s;r{+;"PUgjzu% ֋v;;uB?D )+*^jG^ 'X+f;}UR_T]uĮh/IXe3>dG.SnzZ1o999@LLaK~vTH,{-i?YMo2ڃ_}#*LeQZL]qȳWo_A %Ǖ+KK!a5! :~@ q5nSld+hj}FeEQ@I>=ͥ.SБ:~24Uh̠g(PrO'{tKCŹIp WՌ>'̆1ھ[1vWsahVT0#nz< ʏO|PZfᆃ逥cfm9::t ڍpn¦ώ~fbLtqp\7F¤+ncEFssەs0i҂9 e N⭈ܺ'2[NJPdtF9־q'oMXtK>2cd2nܓ#Jc}X#y r(Nz~~o϶Ytރewu5 e{^Z1y` omѻ - ʵY37߀#uK'}Obkw{.-H`M:xqY=~oT|Éiw=st1TWogöm>PzߊZkc/n!x%T~mz, Xգ@M` `V≀K}uvXx֚׵S3U*@avGolBUio%C:@hjZ6{oud j(r}oi BK'\2|||<-??9v-n%)2哊4/gs_pz,!&LllKDN Oi8O@fZHpfq_F{(0,/UǪ o^aI%Cj]xYtƈ—ޠ1ú+pvk~'  Jǔ~촮WO<ɮ>[p:kifӮ.?!saoew2 L` (%6cD]WVY.ص/+>E1aHf#1Z&]=0͡;J?` 1ڼ".Pϳΰuޓ\6QѢ޿sԨ]A B9mw鲟 'ۖ,&B ATՁk,' 3&>4鼙G^9hZ:E?|`'aF/u؆YS/yTPvK~S<,7 g|N[-]3e4v=بp# O @#6o5$$c t1@@y2  &w};e,+ɝ{EUƩ0o}}q @ B.e!!!+L{P}~?dm/8]]Q.@ P'ߘVp{)zIsDbsER;Lc@ @ ݫ񱳳# A @ FPW&s|j_] XΩdI@h O>@O@%(P&O rS@` WR8vPG J3#s)" ۸ h軧=w^xO:ri][ 9nOҰ]܁bݲ4ö^bΈj;? KzÜ4FJ??$_wvᥕPh;5Rq%E'U!k0qNE~>Ke{%Eċb8<(=Erj?3 ~H 1bQ2{Su]?DV׼4T0Qp+bתҏ@|c, }6̀H_~/ Woi@&d^k~~FE)r4gJ@]VJ_T.f/, ~p\s7KvA xYNssۮsF"=fR}G/`!}@&K rGήxttqzZoӉHL~^6SXq}=xoM,JC#!zc\ Ő|G[&tm&/+9s*wǭYq`4e<Ͳ$ @ 7& \Xc~r8ߘ(`1b+_Y_KFX(̥B o-Ʀ2OE}@MFkWw]͢k>Kmh]I-+pb^w~h΍|}->7o0-kV$梗63p侱\BORBUΫƼZ "Rlȇ.[mӇ,0bg8ӯ+^mwwk:r._k7qdvL~nlNriL~Sħ{x.{ Su7Ud ϮyAje.f[#cB6N6dx^F w[:k/_ݴ N&DDO7HdŋA558(,EU IDATy"W8|ar2,2IPuICEGa&PiG@=5 z[*|58;0000t#V #| G.+"}@ OnJXr e!k\l=t1Č 8EwnI"4gI0r>)7%{t^صZV}y-vˉ~^ej|+'j(WB(K-<+*/H'kf2}8 +ʋmke5rҿ*m_T,ngGXFpG׮ako{rng_EiYX]j;r$JhP.N~wv錩.^Q&3I:1evo5oT1ئ>6XP ,U@/HgӁ@ D'P `d>b{P%7pʟ%q^~AP(/[W\/9)f'#VUc#?7s4>-l559 53VCgP}{lD1P1*x{|), 6қp@UPwXlTrC;3z9{CLbkg4.$va@l=towr|$szdKBO~g곡ZJ1Q`v>5%^h+;a M}e_yIMH%A|%@h1ơw? 25 b 4Ի/2(dx˕)W@1 ߘM.$Qv4Cحo0Y@'`5E@o\q'֖/t;@]HM0ńk4.E5f^j k2?5ƣ2“(O`ϋ&K%(),ehqľ_e2ק>zrjk"uRE^'c,82uo,'`e8e6ˬLնm ce$m2]_1"e# F:@dQ1ʣyֆ}{K]#SGuYzD+qR=JxƔrw EV[̥MǯvІ]{+Z|cJ.q0^݁ecB 9 ty\/t#08մGU2pdy C Rُ7^ZyhX3ۙA"^)Ҽl 2ά0V/!* CU==g~~^qxC ^>r^FdL!:)I,]Ut{o8*Y'L^,#y9EI4FL޸I+eZ5ҥEt#u(x@ CPq%4-ANLrŬzWl1c sx-Q)W2:g?9^Ti=?O+mQm_$?+ldm@I(O؈$._dR9*qY㟉[]]v.y5 t>U8̢$-*zzzzV- ,lj%m:qM\jFV6Ox!91 EuԊ\FeOP mT1V`DjWIL5}5𲪹$+ˑ_)\ (q*@ÏUC϶F1~o>sd2>865ǣT~o-cSSwV[k#YILZCӔ;z;x3czjTɽFTo}`  +3}@Ј۱r_]׊ n8^wR%U۸oPe;eBw_k,&a`Wq H~u x7# | \r݃v;6:W;=v=u0D~S%dm>}7gnu;ߥk#22 vKJF&&&&&z SE}y1U7011iZQ"%KR**˛;-;aH_ 'ީ-G$1R%'ђʖ,,IB5ec:M2‡cuj|/"j^]!Ta~{ th0(A T^$*7QWL@oЈo_m209Xl]/$z?2@>p nz79 8)ٱmR']YTnNL?<<| [y/X8m"cz/W6gh^nőۃy7MZp3.0߅V#_P\TX|n݊siKD3sʭ}/Nެ.}me\GW*2eܸ'w@ik9/;AIϯnÏn>f}VxM^[ZQ|nڛnf9.|s`7Yp+3v+F#ԉ``٤'Qֻ.,1S}r0u2e[G@ E%ǧjO5C{9ժKIJJ%I|Q[eS]wz6&ӗ!*G`I;CD|c]!Q@Y` 3G`wcI'@ ~Pſcu;$y#M}R?';"jkmW`c+" p(]KAuE@h^J.y@ ɡ|||nȐ^ay@ @ -pI. a`(g%b@ [ @≗.W"@ @ 5   yKA}IY)9mJ]{5@k՗" ah-U· rb뼡rTugAXy囝s;)ǯJ 6]Fuid6vL/gXʋmke5rҿ*m_T,ngGXFpG׮5b`j 鷽WNw/k Sj梴\ .9jˎ[I%4(NM ;tTn͙U$_I(߄ߨbMg;yr 3Q&:D~Ҧ_<>T$ע7d E)YL?UZ5@` (2@/@Pl߸|Cx?w@(+8xGZmboG#LI)>\H: ӧ>ZhMz袭ncwxcxq)+PG-!YC14-'};5a}t - @|,` ,I;91sQ3 sKPZ[N_t7 Mp3RSP3wn SҮѸU$׌[RKXKI}ϗ7,UȬ)}5!Di]<4/|-s9䅜–H47)\*AIa)C#*>[e5:xI1XGbIQh7{;e9-K)de]j6r1Z6_  Q(hpݼvkCQ@I>=ͥ.SБ:~~85cgۯ^. (ED6Љ%W>,Zk B9)wŀ 22pdy C.U.Jxx>Ae@L9SYd`%qfx UY]|q?p<{?O8 630g'7@ ZdO5P85| 4uM}t}vhD^\_(0!Tz4]&éV0RRfU;x_Cge (ezP[Fێ<7[[2?+Pm@I(I\Ȥ7^sfU?E|]TuyYaVjZvhּG K~@Y$-*zze!ZiYIXJ&}==Wr:ͺ rigVfut"Sƍ{rqWaFnPj]8m,gE`5 Q~x%%禽qfX 7[>{ wN2s(h'b4;{JCnQ(K X\uCTYV͝K<ˣsF8[QaSgG?Y8z-؊j!CI! BcCّ BeԴӼ"nV@ 9%,$$&BK7h̰F ڧ %1@ Q=@hyαFws(3QmˏDF!@|c@ |K]X=i@ CT@ @ @ ߘ@ @ P7&s|Nҫn~圚N,@ bNԵZkn:, kG7Vjfk޼Ym\3zf G;d kkKs釘 ];'@nneҘ/v`1F9zm}W*Pi;ƾ?!5䏽K_Ƕw m:$7f\0.I"|K2.p x X@ # 7B.J}]=Vr&V| lv1{gX8t[㚻Y{ j_PL@rvm7h~'0;m~7H^N7\„Ph+Hٕd]V5I콤z{64{X/90bX )yFnx-Rl`t@ ZOb(^a&q.5n2?r?-h=ՌZ#V:'m:9צ^5bՙ܏6|Bߝ:Beۻ,( S3MV8#u*p `?%Ih(`1b+_Y_KFX(̥B o-Ʀ2Ori ҟjˡY4vg+e%N,^Py:G p7ûڊ\f|,4PӤPh*VQjs{ s Y`zqj__W8u=0\n>TKZ/3O/<8/NU{LusXWI'Tn,v0m6.:=.m Y$, =_'eXTvp:/kZQ Z%ZzKy:oUbDKTONkc1dqa8ݶVV#/R=v5I5xvvNk|jpdedI9;o{9yz[#AJ^M!*vNe^aJ\U٥#GMrq+iygΘm91Q6I`Fm:kɓ{g6@7oXkb7jپс@ @8b P}^F襭=ej\j'򧔔k.qM\+V3V diȊ,ҬL>=z{=\$$4 t˛M8uޖF%*Ջ[@l @bs@P ȣKwYuO6鷣<1^[UtD+W<'偭l5tշg#V QS+_Kϫ\V,XtÙcz.J#IL"򙇩4?=?7h nr#w":FK4iztU11yvJdpгj^h$kY>[`#dq@L91sQ3 sKPZ[N_t7 &&t 7#5U[9 >s7v10E*nQEr͹$Tx%۾*J`pd֔H$yETS~~\x- ,mIKz:s~8Ga(0lY*N> ;<,F}mƼ8$m2]_1"e# F:@dQ1ʣy[Y̯lt -O%)ON5siw֌f6ּ}9&T/"^wc۴YtfgPoz[ 9qLɺ ^ LB?c6YBe倾- ҁM:P @@SjE)vo'(<&: Ukс@ @ߘR7wyqQ*'Ǐy=2O0̄X@MCs PȢvn[ ^Y 3Wnq9Zշ2LwX]Ӂ>9P /I/aq*=h.T+b)kj))xPiwM$m$B"DDςOOOlp4Epꝕ`C.!zrbبC$(*$1W}fw杝 d8v\k{P|ԩUay T)PԘ @TCݫJtN-΅ɯS╬^VY&̛B1Xޠ04'gi3;ij-Ie(eԸml*ʛyymjsWXUC-r^U*6_E cB)!z {D քyiH%|& ƟMJ>;Ax\'Yfw߿jRr($*vskf&t>ޤl@ Fx xeH):%-v%^T_A _M'L3d&L)m#N|[mж&&mNsNH_^36}p"APUa@kdff'2S(% aYVr1m,[>jR+ S ^0gKC}}#N.0ƅӱvnuwƝ;i+Jp fQgRqYfJؼ_'OGw~KiMMΰaQvBtY2j*1|!P>U˹ o#׋O(`x6@G@q}]wnӥ'wN(ES浩/l%Iks|rAZp}VQ[\m#uX_n}ѿ6-oN+md+$*DI{Lpb%yqa[vmJ?[V@"pc D"PW@HƊO-2uo 7wx/~%7V >ae:rb ^&z胥oh} ۝]CӌѠ׼-%^ל^@(˙b*hYaߊ$yZcgbtvB%;$^ =|ss%#f\Р{Op?Z!w|}^2g]Wv r׊Í}fo 5gy(go I Y.f2y϶Y2w򊝓 ~b$.z2j[7t T;mku* `x6@:88 BDIn Q^jV@ ~8"##9-""K cHv\5Y/'f)WH`L ALR@wn;in>LX)Ev1r?#-UUXa[x[?P۝Bމ>TqWq^Hho4tغcq՗ 0T& EL:mFO͜ˢsC/>#Fî᪬#ovRR);|Bqf\H ]%3dB`KE qQ@X'0rd=.{X*JGWN7{cs\zOO wG}G)~:/.ar*L\PWh|ܫaiTBLũ*O+,KNj肔dq|⒯+[V_!;I6P:C, ;PPpZr8l߶4ZPE(^îUY/-D3Ww RAL3-aɉ0Ȼ3fiD~8 71=[)Y1Wy6 Vlf D:Mrﮛ _+j>ӱ9W+֟ͧ0x` 4r0"`wYPP[ rm 8 _ۀ h0h ܓz58B W,kn~Dx\Dp溌{9"i~b4olnz7O% ]zӨT.{7焦@ӳtjp9iӿs?(g*LUdV9:?)իo>$Zemv3c?ܿOKm[L8 q['>;;x8deŅذc e <;%`,n?өO;Su&xuo%b69$b>j~ X[^)c! 0A;N.=/@6HZM*˖A4r*(+̥#R:5i(_owIb\ށ@ !I>nkk;{E) 4QgGpz?Tb&5X{.=}X%eڙYcqX4?W+EʻO_WZQ ޔByPTUH:"^Tؖ)7K[d0q;#@ ^è! eJg??Ta~ڏFj9+,T3N]5w]&6wP;&֤d0z@|UJs?7N(.,ceGqovutt]}hߥ, LUG-JЂ)]_b ^l(=[wó_~! o/هg>=uV̏夘Zclrzc+@B`y߾M)WA3&]-1<^MU**_? TmBbX%.GMIz}sߦ1wĽz2(ӄ7/r4|c=qVgE~kh URx[a < `.p|@> 6:zX*_Yj3/ٿߟ^eDYlm6rRN$gŽzO|8SG}=~Ls/kb#S|~eq֓cA+={١WCftզ>$oɗKChQJɜT>֣;FSR]޿"}3sc3MyKҖ-n>$;zaZw]s;![X~y-_wabrO'}SfLʳ:UɂU#Qށ@ 3doindu ԫ̯|} &rZT $"a Z$3J|MĤ?H{jD OLʼ>Nt+R^k@Ea=+X:/-i7f~4ϭOs7](HMJd5N')7{O,+&{|+,W|k?tֽs!U!Z(~f/+R|ndeH%J冦 /=+C6i na}ڙk0le*^|AFlݴJ^_ ӕQM wǀ0^T#mm( (|9hL0s WjU(TPw ?Fl g/~-vAрo;40S~C Ti vjk4V"nPRXWpxRQm';x3I wܛ !TR-|`Հ01c%kؼ,UH@`<UM *ZҲ\:"6-x J:T$6 F/:fgXfX|./YF06@ <5r/(*Df'tu**SP*RUý@G$b d~6Ng|fiXcFVdL3cNLиb IDAT@#)Rf+9SRU滈'װ8jLH$4M%`r8e.L4 4YekR@i!AbRlڅ^{Tޛˢ仧NMS(m%Ub ee$615 /)|HUDqZ_S:<+^eeo˼o*.Q j Moo{Y|RjzPl|NSsnM*hD/*ʛyy,|4,Y^1ԁ0=Ά]sU#Pށ@ ظdh֫[YU#Gֵ_3 Q}g9\}K:v598ȒGL-fff,(s̚ UQmg8<9Ap14[<;N`F 0~$wϔbIht”Lx<Nf+<4.oqnӆ51i;tυwBn06}p"A̬ATꁞ ?SB)W+βuncٲMQ4\9t'VPj) x/ԳUo' By;w7̺;{qΝ4GG w33)t,yG3M%Plޯ'Yc/57md;ÆGdɨq@}r˨f^EI׏EP]Mk'5< 檲>%F=U8#Vg868%]0~~ D9_;7S rLF{x91 zZ$Ѡ׼-%[ }92[K ؗpskpin+  @$ I>ߔhe(&^T"U raBOéHo=} u^ p_YMzK~Ѻ֔5D?RT"fHRe=v0-@g'Y2o,;$,\{6+ gKF̸&A <C,&^2g]WDZqͶ^ ;|w $$? =v9LB:9kUN^sRAO,%U/SFSEt [C|q\iSWoїx?îUY_v+%տdF U}Y+-,?{y Ps(m?!kB`4YJ Gdd{5,jy@Ӝ\h. %RJę]upq6+NUxZA2=!W@$u~HҐ(ʖW/j*n)2 <TP 2hr*fc gL5x+f-y$y,o9ICUKf[-@ Ȉx`iKN@U1K#yROΊ>ϳioeWo4;X ~h{wg"u^yW͹Eo^ll> ;ӻORlsݜM*!v*<pq  ,ڡ< 8 _ۀ W0h ܓk@7cc+57U?t"<.p"8|JSs]ƽTzte?Ytrp}7yz6ـN .2m7|v.g{ßぁ GP| eyB:?)ի)Tk#˸ fN?<ڶ7pNt?}wvpD)ʊ ?aSny佻wrK޻)"Y~SvL:'vJ*MllsHIJ} ,D) KS*=gTCȿrQawϝ\(({N;VRdR@kI%bc2(f]REt%ޟRk47W}Qu/ +}N6oeȮzN'IAUGVK@ ҇Ɛ$v"yCmmmmm`X?(rG@8i__SVb&5X{.=}X%eڙYcqX4?W+uǡƂCfz1~4+cJ `\7tDV*1 :4XqrX*QRwl^ o%ݭ2 vvF!χQ{CL@g??Ta~ڏFj9+kOH5sq!,,US{7Q)<;TM8as35)Yj$`ok;)_eҴ\(':8, ~a~Q۫]]Wi0w1Kf'r%h.//\6Tmr_/i7óh+PLF169 Zeؼoߦ͔KBMk6m} (RJL"%Bj3]NPm1fE\Вm#ߦ$oSXA\ 肘;O^=xS{i›9Mt>1ޞ8x+YD"5wޓhG. 5Qa 0*^b].2#׀yﺖW0|Zŋg/zB[9)BȀSF 2+-F}=~Ls/kb#S|~eq֓cA+={١WCftզ*qğOvMžL/0)=]Yؤpx }E(x?ֿy߰i7qȡņ,h-#^%Q*Dt@ ~%K?Q삊7Mӥ>E FPO3J,y#U㾀>J@RKPh7z3p@w`PLB(Í$bumk{hMA iafFz*L0 j@Q@BqjbVx(R_O/\}cΫMhE,CvlR6EEt5˨&@wQf^\aן :>>OyNs iAZöQ1Q?TL\{P"Hl x2[ҺPJas g;4څ^{<23h2;!*yQe ЬtE11t>Sbϰ`G 4iL̅)&?}usM (M<$? #|cA]@ q(9-&ѬWg# 2$FΏ >kgdG^&8s|Muj3j;sq\}so8alfffffj"oIjG:Fπ#5`-n@'D@i{^@2):} bIht”Lx<Nf+<4.oqnӆ51i;tυwBn-0 _\#33f?3 UTR+hgYeLj:l٦YK] F+|HviT!\*h`RϖFV\~3`( =c݌3mǍ;w>S Jp fQgRqYfJؼ_'O,#_Jk2nv ۏr˒QTe|r˨f^ia,8}BbJ> *GNڽ}Vm-(&d,Ue}BK;;2q Gqlvp*J<:׻` Wr޿w~o57r SΉnn<I`/Zg_zjvgאdʯ,&`_K]X+̶5&V ]*W@Hb 0*+J?`TѾA.L25w)&,IjN +ԑ{-hN-(Ay[7Rޚ3zу<D37d$G,t3 g[U;yIW?tdVM]6)Cf^ޟҰ9Q_Ei/|Mz&[EUY_v[-@ HX],_T RAO?ڼ[:zr0E ظ89pI>jTU:YN W %]ٲJd(qYnhq?TE%܂ҁvRgWl)(AXVj,avS6P1;g836e~o>{5,jy@Ӝ\hTȐZ2׿"kgZ>?NPi; de9!Gs6LKs@瑳;Ͽ&Qau*eWT_RkYiʑ~ۢhuCr?3-Z~_7.tQBzݲ{=6.'!.&6׸C@> pbE}94C𺽓R:.[WF'tlt^rԕmKS@։GGݝ<v2fOlX}ీvqN}ڙ3gw}+2T Jnڟn!>rȾCۘ'+֟|N#~_ζwT~[P!4$Pk[ xWǁ8@(e%L,gr/d(ޙޥ_Fwػ9'4E,Ba@mi䄯t~RW_6#=jGb@̫g*`57U?t"<.p"8|JSs]ƽ$`e:ΟZ9,Uveld\eo\ȐZҋBk#˸ fN+^3[8{w䖀wSdyWΟ>h琈eY6`Rn{"T{+䢦p;PPS7Q5ב@vǷ;_TmjlA^Z)^պ[>Iw7XtdWk$5XY6_W*/)Ltr 5W5Nxsʹ|˯k#˻w+++tԛrӳ2s5x}g2UT; x;yL tll]?z B+GZ_%& e9gNߓ\>zaM7?aYiE68<V'GΎS6ŶoŤ3  }> ED@'Ch Ee"| `L៲ P\w\ ;wMT[Su^jU=h%~ǶހMQlY yRmFysBBQ:ٺ_j}U{ IDAT׿ ϰ{?Ggj P J^xlġv˟:E8~Q۫]]Wi0wl7.Szg4}B_}{붣>qd|GMĹiYjY6*C<)%&tPTb2PB5Ǯ[KaUUt`Dw{7U-;(S0Փ?0w'N,V ]%#O6sZWo=%Ћ/wsFO=C ;|Pe}Jr$ːo>t'8zh6Fq=!uo\LmĿp >zC##%1ZD~ZVx,LY|i˖R>bMZR~erX/G}6=`k밑" 0{.M[GGB^=q@"h߁ @XLY]N.@PԉB4@;jʼ*zr,yJ [|%2iN%~?4a >yTsՂ}gK}vbRѝ_8W5}?ْNهǰWZU5_PeFCh\+ƕgFHڽL@~GHGT="qrnG!Fd|?M =ebΧJ1Q^0IJ z)5uTBR:o;7de?=7>G'R:yiZ\6 /4K7HےooM#?|tҭ#Yv#+C&6Ü3Ta(1T&[żUP"Mx켸Ńr II|xTxTڀK .dG@,/}PY='V9%hϟcLg;R? _Xgu)oEq,햴wʛ|d3ql?A֧SVw-}-Ѱi7qȡQsiU})C-^GK+Ia^GfݸrC?xG!{ 6WTψ|&܍7m[ ӕDz+mxpvڶiaawNaemB;,x?_nE!7-r 8 ;ȩWmi ][UAQPxsex`cA/~|C\,c_Sy2$>W\S@W_LJ)J^Ttq;n$2Ʃg/e$j[ eq/dUH@`<UՔ2++QBkM(J..j=J&0%ι; u˸V'ϫmTh,Ώ9;4@;l#Ѷ< d`Py,d"3}ɓvQFB:غ\ űAgjjяIyVh}.ȯBgNq[02H!O[O 3%&}KCwvCqg+iarԭs,ۥ{Z)|4nܩ֗(aֹi{/?OJM7q,rG9wj?J^wm$OI}usM (M<$?tynP.kv{R9 -)&K15 /J-ѮQcB")iLYݴe (}4]5}2 QS&Wyy2(rG|QGaTx%=2ϊ7ERݸο<7ij-Ve(e4Uқ[SMzmaE\xq^zRrF>? #=Te6 T-}MnAcaA8l|3y)Ng|fiށEtN?ϟ!E{vQ"MbdSo OL?(2vcA}N6hٯHR ^0gKC}}#N.0:C\Ǽ(6ɓ~(n\uf%cf43g-%0: 3 -l6mh[C\x'fJ}ދR 8 xY N3$o>?74"P Fx̃MYAi)36}p"APxMz0  eYT\xs˖mԥʡ;i47G6%S776ieÜSeht”Lx<Nf+>>R2چŶC0mGgA>!1)Wx 8 By;w7̺;{qΝJu㲝1_KiMMΰaQvFudpUބm?SGĪYȫ/kgdG^&8s yQ~?{$gģ}I} uQU'8ͧSOˬӆxpU(:'ῐE’%qg\wlɈ4hS=b_'Pw,ߐAAc]>Qk>7Rޚ3z{enN3_^(ψ0ƪ9A' RGN쵠9 0x \|#]Gv*K@@hm ~D`g$r/d(ݤW}/-ak[ m0)kN@/ oLIAؙôX~dɼwK̒[dyS[C?(<O-2uo 7wx]0mTkʫ5n2|[vGQ\ߋTfl dqο\l뜵*s'9 'NoȔQ(ԛ?ζo0%9ϾU*,Ұ9Q_Ei/|썰R K%՞6yv/J}yi|Z06[5nT\1EGzLvQ͔VEϛf=diFD #%u;nkB`{@ 265!0R@ pDFFsZDDDeTSLU\ ߞ> 9P;`z Θ6,jylA A*XSMi;2e֦K {Ǻ짹h2Q;_B!PM1y2)B@ 2-t@ !;@ @ @ ؘ@ @ @ q/.6mMwCv3EPæMwD1;CZ |Mb@S;;<ׄ~ T$4RPIFANmZ7U0-Ash9SXQ(J{yMGg{c&eƚTQW.i3}n\˿x!|u{S#NǥG+-9\AТ(^kεc_;gl(5RI5l)0yDg!Xd6ZfdTC@ ԧؘߛfK8/s@+qYnhq?TE%j/⾨(+!̢]`祒X'0r'q TjءG;ǦJx6<=4:"(8]jRö#ҷi"Jl53l܎Ӛ#a;E*b Vy6pآŐ(n{|'34iv<Σ )vŃKs@瑳;Ͽ& MF5x B]̣a'w֢LZdXXXKWw\m9hAW3叿P:9W3$l&,tU Rj8hs*UbQV t2xеQ30dQ /߰ΗnjqR H8x u*xtI,ceGqovutt]}hߥƟu>mr_/#O6sZWoY4q;#@ ^è!gmX,&z坠 :oM}M fzgy@:`R='-TB E_]pPYTt`Dw{7UjFh3ΛV/TxH|vD 4"8갨"IJiƩFl?6۷2S4r߰)%&tPT2:::ly#N +H[GG"T[;,&edLKfM,@t@>^@jS}Gj[F' Ў >]irZHXXɽK_$Kq}Xs=cg;U(5Y~<~A.P6/P]eL-ɌǧZdŤZ-WYMi)ՠTp\iK{`S}e&#ygCׁP25H=K R$Yvj=CD=005+V*$[ kǺ| ۟+Q݂ t:yM1xb/|s`Y5-#롓|?e$CQPxsex`cA=Ҫ;(. "`AX1džQ,+A&hQ45B4%Ɔ%b E,AAz/2=<ܙwνs]vJ} Dݵy6e>[RUn☠|; ;vyGbYk{lNtf|ZMz AD%Bht`AS"B[aqB[!RҌgr4mVѫqڵ,QXw"xZL@ b'$|R"_Ыx8^O@ ТFWǥr{}s.QPak$EnFrL J/&2:xi_3.(2 K)sy&={6bDעR^|% I\~";` 6 rc?y}KWheѲCQ3-b/]2ץPhe c'G# }t6n֪ˀI e`HiJHmQ;7ϑ-,:to_t'cP6FS 0Ah %_v`(^[9 0 BxeJ}\[PM!G~Nn;mneeeeeicF9ܶM~_{/Gld i}ofeeբ$Ɖ0!5:vso55XqA!NNLΣfۼis+n_N~MZ\2*[Kv) [cݹm.>k7CkaAȢ$&mwıK|4z8Z 70V$?xntWe&>w@"U~sâ&BnE~7w-, \^yvh*\l%s@H*j0nA%f}gű컸=.A$b63dD;pxþKwz.%w__ bعW2Yi啋u=gl3G^ۇLMm>\_3 ◧` o xZ|)@vo*ːY۰hێ<ɸiOo,q"\K6 cΑ#GAAAĿ S#cAAAq(7&   (7&   ʍ   rc   ܘ    (7&   &ܲ0|an_Ҽ!W=wHXp;Muϋ3CrShx̧si=C;kCk @݀>@ 8 Ruz]Z7s mD_?ē\[gגR#gtʀqZOE~# :\m,Np׾an9ֱ 8zh@j΀Uhfc6rm]<8 hO!Ps-ѻSmK6>lڦkGm:7Vkg.fT9@XTDr%E5"v63:\b/dN: ys{ך0tp^6s7.>ӋIa%$l͵4))˜ݞ~h2דVݣ ~RR{G?ο'jl޺Q$uܰeF]ȻswOLj~ٛ\a5a(nL>Lj= BX`3٭n,[n 7bc|vB_;ݔ1`߈$)|"r/Y8GQ Vsۘ9rO" ,%~K1ǎ@" `p)p\:{ `W Q=za:[w~v۱Qș$)) )Oѷ,=z*46xs*0tzKkν\Eil/g\IѰ=-KYy*y_V@I6 IDAT~ZTA]O|7yZt OK }jc-R#2maHMA( i. O%_W/{I[ќWa2rpwq谱H(bU"z8M :/FFl@; .q@T:W{@:`Q;~NfH46u6Jo ׽9aVfLɷۯ6};oܹ 7J+j Xʐ& l-ZS 2";so09|== RAnωu?,;{&#zꖈ=*w]|~H# J D-'?o>k١3pZ[6quY0JlN}w?)o T]!J%'b:ʭ8^Kk59/)m6bo<7'^*P*u  HJj]UKZ-NMJ**"2b%}fnpbF`zqׇ$kf S~ D(i-Q-;uءCዿQZQwocLӛkfWs8/=,H?S ƒW1!ZA0&Ѭ@\Iׄ5l@W1`7z@`u[@Rb@ 򪕪˨G!Fѕ/\ gBrӘ|pju4<.`鑐$)ĎGd+!RW0.(DBbE)w.D޹pt_Д];'~m{~~jj]7}gw4ůM{ohuo2=%WA@ G[˜ KS ,?f<{icהa1>K9S (?-dUr#x1rE3 @χ)qz]Xw"x) W\l @+ĭqAQ,-f\JkE_GԞ cdbb98=fo 9~JXmZ>PpwL- rc?y}KWheѲCQ3-b/]2ץPhe c'G# }t6n֪ˀI exnCVVWEx[sdG #= G?R_6ctlt=vͳl㫑䙣Xv<#>VqA!NNLΣZմ?ۯm mמ屵'CZ\qܭ+v*Nʪd'FYQګoICR*s@rS FIo= 'Mt[7Z)} chwq :o`—-,Uħ.T8}(]%"@ڱsd2./߀r;Ogj-K,/[.)9T5oJaҟ~sâ&BnE~7WŅ &,!`sB\z7 I8,q+fp!Ɉ3 ՘3.(2/Oo;f;oN5٢$8~:h(%֞E;'Ja1gcq{\\^(_t_B!ȑ#NNNd   _FDROEOAAAu(7&   (7&   ʍ   rc   ܘ    (7W:mwFu.<8VP!ۑ˻ >PA%jN% v+_dE 2߾ &_I2v1 .@pE ؕC7H+p DA:m;Muϋ)jI[h#'a-'Jٸ˵uA  \R`Ӣ, lܸ$8 ݸ Rj2'?$W\ceLVLJ6v{Bs+#ylj).ZIep);.?(n&@F(eE@\b/ WQ&d! ai@vn]fUܢ:w{ Ce3~s=4&,ōɇI*Xӿv<7IIeٚkiR` SʨdbUTkԥO;G|Ĥ 'ϞK)Ry܆ bn:5_Qѳ_Qk~9{dYxPf R,TFnn7iO3ux掫տu$׍w ǭXhп `mgY/8[[&.JM=ol U|i;V5͕Wk7TJe,?b+pHDEٱI`/+ 1z@( `0\Z񜯫GnH814jY9yO?8K ϔJi`'D/x_:}`Q7KN%(w飷Ĭ$%Of{ʠo^ZdBJJ+F@|~?݌NJs͇ 2W2cCF6 ^rA|r_Mz7"&#_h)`) 8Zk(hZo U թ#%4+z}GnT+NNb?|HX*iP}) %\[p;|4GWg^T}zZG|Ks}`E5#뀱 [;Ҿѕә ~zA :ą*ިÐISFw*=v`·)ElQv,`O;M+0 d~ GeY5G_dJ>!ʔwHl.@TcSʹFxZˢҹgioӳ_h(sI%}fnpTV īmv5OK/]J /t=nI/HrVf'dU\/V3(*75e^z}AFHO(5(!<-\~%(>2͛jߴg&]7vo߳\2nYY.zw_жʧ>Gkb2Tߠ: toߛiRemåK.!->: L39ifD)&Z @U<U>dԬ|Uj <,[dKVzc_WS5PTY*YmfSI6)IѠa50VݛsʣI":,-fJJ6I3=ѴkZBDQ/62=NMUS%Fe3Z{fk۹Gfw|r∉+ٽ;FVF웈74+ Z.XUbOJe sJ?b hQ&[ъK4rk>1ѫqڵ,qFǺqŋGnpfo /7&I{dVLY -+mtLLt?2Tr{}s.; ^v)el.aɯP67o_Bh+,}$O]h+DjTr")x”*PȌ/4/iƭ3(*j=E&Z1TJ^'hl+V/ӑ' + 뽫$΍9Zf͚[XwHqBob]tOj^EsZnWWUtn*xx4kLW af QJ-"r&dޥioԸ9XIg0#"i3V+vX') :g ̀WWqoԁQ@;hLgu.` "w@g д.fVVV-hqHSBoڹyhaq{;A!)RzL19q)* lg,ݯ{6z]jFG櫓reQ CKUܭ+v*Nʪd|Kɱ!Yzvnڦs I #vfSn|)~̶~&\E. J(2w~셋1YIzl^{Yiq@1R "NlNL;ub.S$S#xt5SP^^Y? ѐYzZ:=<Ɉed9zqwQ;p[@G7 =(ػ'+f'?tJ ml-{E+$?xntWe&>w@RLtTW;gRՕsnz0: ;wXiޱvfفyM59+#c/B)²$ xYZdpxVzu@p J1&l1tGz^}"֎{%-NaQyh!7z"CŅ &,!`sB\zni YToַ1xƎ>[v=.A$r)%JR-jڐ@}ώ?1f|qG+GϿ͂;uTr/<5_ %>]~„[F_KS/ D+_T5?ڵhM-v(粧PO z[u)[.V%A-'7sY}e\N,'\* v8r'ɛ94uUet-9QS8_t|YA'ѐ/nE?C'f.*8 D(Ǒ#G>+b ::{yU`񧦝.eEގ]YdA'OgĀN}Z\  R8 2>fY{lQq­r<+>WOsQ DcNn^:\Sq񾧅d qud J;ӑ#GAAAĿev S#cAAAq(7&   (7&   ʍ    L@0`Kk% jCk @@re`( WG GzYؼA˗{fc6rm]<ŃV#gtʀqZOE沌 -%V;-Bp^j=/ kvaΓڷknQA;Fdڽ}O,xs'FhոB+6ΦuS&帇s"%6jI[h#'a-'䲐#GAUǗ--Z,<{F"o/HeeY +]GW5R 3e7^ky̵ߤ\O/lDDvU/yͣ}߉i5doݨY* NWkqiW:?+*C92T2TJ+I¹Mr3$)Ÿ_iZ&(ܘ ja~*1rc8Yvh֭x]c )ʍ/8Փus:MJ+nl뼨_6, C/[[j=9:~^䆟h1K\/=ޱgQԁs>?I5{RK)9eJ y@QIoc 3%7qzgYܺ#ގB$IeW<@4u 7"lAfA6 M` t*MTDYVc<}sl;WoG[v]a,$~ͷل0|lo)ٜÍ!4=H5G]7b2^vNkSҕ޴?f~z?fM +0rpwq谱H(bcoot4uq+V9JMgF,'_:a%*WH kۈW q/JW./zڎz#WV"C5C$ȼr(=prW%K'B1APnLR}< 4hh}$٦ ҕȍ5/.`8`&͔&ft?NZ 6ga?Z._>w{k]a OnS> %P%>~\w~V!g-U)"3g s`WDⱍ?ߎfƆxU uC3t3:))Oϥ72\ɪ'?o>k١3pZ toJPptsa2T4TJ+QqsE>ٱ2cܘ [  @Y@xK `pƕ%/w$ tN0@~{rH|Z58/ٰ7åRŽ,3uozzj.)xv~w{QPSUv5OKۤۢԆBU`S* !^>*0, PzQBx" -o"j*+Azmr7MhQ[hEQf7vc1c"hreTP* 2aVe(Z}рC jzߘ >H}JRvp>xq٩_s.@%@rY2/r-Q1gEYEȌI,u*ɈK@_L{ohuo6=%㖆r:NeHHyk`mbǣo*zw_жFjYv[Y2Bˬ1Y59ۧV"i]925 Q|Fa9=@*&U)lJ w.4eΉ_۞_-1ii@TddM5'JN—+Q C$ȼ2f;oq~[6'v^QyA:`5O*V@OƜR. ӏ>|K4l Vwѫ۬QSm\=S=3 YY>;ly[q{\\^Id(Mm>\_T .Q&ZE~}c^dl*NaQyh!7z"Y%>]~„+Vdێ[7 WNa㗮R"oY|JR-jڐ@}ώ\hP U ʌмrǝ̒zO* Վ9D    eDDD([XX=SMAAAסܘ   ܘ    (7&   ʍ   rc   ܘ  ovBnjvPp Ze mV^F8ځK& Rq%u픪UzIE{6?pF%k\ JnY`4PQ)^.}Z9'&Xh?yMD^J/TK ;.3\̔4:w۪X5lu3E&d bn:5_Qѳ_QfPQZZB\*1ǎ@7,[!Iqݓ\JQP.椿?1sԛ=P7l)?w:&bsCDdA3z4N8/![SYSr/9rG%]h鶴 l[[j=9:~^DxQ=za:[w~v۱Qș$V~d/K#~C8^rSjkItn\IVlm?fpzL6N(@{w"Qv8y@'K-.-?J*+moDɃl y[s~N2_6R[p+貎dQ^w򠢌SX *xt@̳/T;Κmay5O@lq{uRy ?ͪ$ȼrfdz6y[h6ϣtB#oE-K`ZsE#u6+ZV_(~B̰n'?{wsYFy9Gꃃv.Y72Aț8ʫR53f8 J v=YG]7Zn& RkNq/J}vFzQ~+qlF_rlXa$)kM&|wg}+Dx~NfH46u6+ӦZm)#8yl5eWJSEz2:v0V7t)NN3|83w\|퍮&nc8n*GsZjr5໙S&X;oW,9;8tX$`mgY/8[.6sWIFZ}I kۈWs݁ѱse_ٕ??+[@e ?ͪ$ȼ2=&cszjI.8a#gܟ 4^;,b$Po)J.gpk 㜦zo/fidl&|d%GRڽSڹrc38@UVTM({[Z\QU}KdkW,5u]ίsS toJx/T3]_(wyO?8K Ϫ˱DO{ ms/;탵*/";so09|== F m/O$f%)6`&PTHͨA ޼bߵȄGW!~}қdhI;w NHIwVmv\036b4h3-'e٤(_ϛϤZvL`o=?V;6gaT!YZz_Wr<-鱅w}׳\q̝𸨰:x@' XJī! .8N_y4Mi25#%>_o%G/8zū{/*T\Q+3Qٔ HkTM ԭ9@O[%CuX;'kTio>3X?ϠfQᅮ5ٍ>3W^N*w&]vd]r/ 4jȆnb6.J:|}HOY6;m[RV8'ZWF.dzز`%XZX$Ykcmif>9N`E{&K@i{J/M}ω ϓo~EMJ-yC-b<="ʍ &V> K p.بܺ\#lU9vus97jk2@/h01EF9RT;GQi&7MڞrĈfK=/Dh[6lq(󸀥GB@K_Cn;]ϊ23D03H=rek:ABeꚭq lܚ_KNlZћ1jVPZQ~5D޹y}ASvi*ui Mn<9~&g{d{ȗS:WIRW%ؒ,˖}*# k *;$S83] +IlVvvl;zMTF9APnL11 Xv| K Kqr H"E0@O HPt6-wΆ+aᮿ usy^ !;(_QW&tzrfϞhk{^IYqVB\i'.T#If:;kCm[t:!ľCP31^*\/9Ml㫑䙣Xv<#>z{ӸrҔۢvn#;ZXt޾NPHJ/NsEScc33p^7dKo+Ъ!.Ƽ$O{ eileob]tOj "NlNL;ub.LT$㣣Z}[M[ìZ[FqYbw`Ei^%1S iNb\|J++*rbfUd^0bV҉+3Ws]6k,nkq.{OJ%I~0KA D),q>QRPKUo W%AUųA5'?xntWe&>w@p,=Gxk0lnܟA>[}FśB#G899! %jFCddHz l#""Bj OgĀN}Z\ lg<8yBB E8uoEqA,IѶVkZY jݣ{LSf!dRsi0^HXp>VS??,HFlt Rԩ/ ^;_,6#qBk}~ 3FW֭?_1Q'le΁ EâiUl(sz;ٚPd?qtԾ/~CqY* ļu E!p ]Jk@@ @[k#o2: Aԩ]wOT񚢇}u*,.Ndb2L*FJs36.UBs vifsX̀eھ{'ey.ט=~:'vXr,rmٴnC J AfFȾ3Jd6ՠSƅEЫlZ0R}3w9%2JQT@qym|loW8)pYZ{[c«9r%;xTm[{Sm KסN JuV1ôiW.*u<]}) ʪUI %$6&2 NKhV@`RqmdhÀ*IGCBT4ˋ/-yvFoKS|U~xQ֞$>w6*}gYfՔsNPʨVxR6}EIϟg|-U}:I .c59ʭVGtcG7ָW(U`(N}Rn!]mM9-=,,@g;L2 ['K_9!S|a4I牳98(~}u{1 vc=zmˤ ޱϛW1t/5dB,f#2J˺޶zb͈d.2 pq [Ɖ E;v}:pׄ]͡$={|LmW۔4,b݆.=3C\BqNS;[Kռ/~CAY* ļբiEz'OvfՖ Dem:wwM4+B-JҎO; h Ȁ#z˺H屿S%ow rY?ӬKC:̽OÂM8h$Fi\3GOX$׎###OY5ֻ tIk/KiPS`c}B^|[]ɨۨ% iOa΂*YQvx-LV7vU?BnXR7+^W%Wa?lsj!ݗ>iˉCb)q;=XS/bWI > ` QeT''W*=0NrGƕ220&SDL ;'[x_f0~LlM4k;cB'GBc_0L[ᇠuF"7s*?0m4KgCj'KtWU=_X>)ʐ?dIkKξd–06?+|wm .)KѴu?'?מ.C[?*MeK=׆`rՒCwK$߿\S>i7ej%glC#6 bވu'`ϴ%`iQPR{ 떝G.,젲Y? @RKߨ,$*ձ734?3':~L9?"{r^8EW*  O`3tFۀ Du Tzg4L{OT!wd/jʙLjЍ:.hZaeJo^׽|RYt9vƇ!_?\valr˝Gw2wvynggm/DZq=뚱緕7elE J^Z,ap6w^pW[ԶT̏N [3M( J5znkc`5}6xW@n\l{Ӱq#g9eߖfħӵQХ¬ ydY7C7m۾M:!ag^~}ԒU$ uZyȔq f->|ZBY* ļ$;mRii9j#kmyS aM Y.%" eW+VցSL1zЪ\+H}&;#&n2v?-d%f/]3aՕ/Kkq_U Ee$V糠Q(xĊ.Y%bq1P851?Tŧ*S Ԓb4lh Zt5~sw(&{r> fCtghd2}#F0kt}<}Ņ3K_=~ C+'FFT1bZsV^f9qNfY&C4-0AF74ExNS5yN{VHG@ 1@49E WF,&PD׹rUd|(^*%@ 3 ,Zɵkƻj_0<ʅW)oIϓ@V&@C\uq_v6-\sjheƆEx,Uή6(ҌkGƦH1D޳Sk死djc?<-@Nކdzqa'O#Jq(\pm9aNS/=2&;lg7;Ϯ3gMd9 BnA]m͌FL -zϱ`o$'UohkajnOwA2F-qK!mll iUz;↲ɲ&/}Ȟm(6mݜmӴQ]ڵhخn\J.Uj7U@̫uY?:8Q|c#:̭7af*K g!g Jw4`XQ@o@)u?KS zצCzqGθd"ȖMGq{s>1Q̏:?l2s[ޭ^e_<0s,'M hb1 ſ칓O`!5HkרES澼kަ_1RԭJ2iOSw fYW4h |=GhȄ)wn($9Z Ó+זZqQ`fW sG-|X (bPsŜvc]5oʊJҮ !+Y2>;Θ9ae. ]wMlf>~\׫#6 Olhi@nϫO#6in 7E=}U7U@̫лb< ,L~^hy7dP/-H ӟ;'O*K WN A I&O@NNGH ^ Ϣșj@ |mxnkppo"Lc@  g mb^=ob@ $6& Iʑ;;?~ߗ@3@ @ 1@ @ $6&@ @ Fj Dd&hB|/ÒVvҩ{5KΞ[Y 뀼@t@pxm /'x  |<\ :v5ӡ ~v??Γ%: s`̂$;jĦM ifn`.qMϽKѠ@'F*9t2 7ecc-3c/Gl =YVh3eXW{..?˻cFయGRPW:e^C:YQ7+W5G&|z|iH^ی !n!L ;/TVCf [$^y}Q'le΁ EâڨBR>YUI #K HlL (98 $PR10x\O(9t&!@n-tQ]mOrQǬRP/|ׂ);Y-W1J ArD< ܪ1LjӅvƖK4ijg+t)4:O. ?zƽ²;-Hzua3Mcݖ6{k׸q^o7h5Ki;6\o.-X:(WעAnY{_Jⴘ|~(':VOF]N~S! >,Y_%+.ϹǺ-m?y޽`JSzs)h_tUyG@9uH 6noMklp :ySƌrbR: R:|O{ sIZs <6b)q;=XS/83{7]3v G}oR!m@^!]80&(94س~ (vߏ/l \׽Kw=- M~^0m<+ϰ(#,35a %(ı7n~;%h*vǪZkBSn:>+q8.8\=Vk ?p+CBCp%-9 06?+|w .+=D1S߅c}h˻ /lRApdϵk:73؟Ui1ݷR0W㔽?z-EM'lZɨ;(1oĺgڒ((Zt)߽OuN|[xWU:Z]OaUϥԢaUI U$w5鏇>YihUOtJV!\AZ p0J޳hk)^9=vcCo) GdA g $ GގN}Yp yR "jt& :m@^$ uZyȔq f->!q\:kƞV Fѐ/.86 ɣ;;⦞aiD èr?ل(u˧,uEc:l|VfWWa$Er xڍӀBVo eB~yx%/-0L8J7%Nԫ}j6?_>1LJR n롞ژki0lM*E0 7*NzSmiF|:][u]*Ȑ*Ku3{XxӶ۴n~мvxX򕷨*w=W=ReW%W][ǤW,8'&52o*[lmԃ'q\pjCޓw,4ⱋ+8=5=\Ǧ3^|--rYID,AK2fc|"HlL x@D69`T_x xi˄{LhueKnqìSC#C$Zf=M*F3*bcG IbP=06WӃg* K^ Mۘ[ܴc&pB3m# ԼUYC?[m(JLQVYlS̛ nRbw)-IO,.g\1,M,r`Zу8-VZA3 1q떱㝎/TsчRê^\J)jѰ$L*{=ic88;vju1nϝ\qJ׼IYZ^ @.{5-h*E,K\ijWif;G
    fAS8'#3WĴq4RVg8=:nԱKi,xjxzYPY ,feSzvnms1&%#+'WkB]%8ei̜R]FQ*xM)0f9ra+%֫z׫Ra$>䚷0/5 lsťo}+n`83[Os7o%ԔT~~4?u7\ƍM=!  IDAT,ٳGF5b|@bcE@C? M/`:`zgz WmkÁV% pZ ̺|~6ʵK4~֍Kɥ-@Nކdzqa'O#ms}ڱyn#,XxlW5.36,czvvvvv, 4ڑ(s-0oƩJռai`Ѥ,hr-|j8[-ڹz.\6<1b*'hk [uw-,zyLِ 4ܙd3PE`3rh{ܜ){ _L5P8?@ pKLo᪍x@@/ 642`S&ۿpsXt1 @?k4QB2!}yk׼M'Rb1 ſ칓OrV=ep[w="^I!rƥOQՔu1(=ƙiCZGʟ'U`^EPO٠MT1Ϻ*A l<@C&L{tC $?/Ԛp-^\yVkFA])oa1Jv,3p΢Baf̹#s)o1[՚7eI%iW?q8T_˹jn茙V0juהVin}L1bS nntu Z]֫K J1Z~kÞoEI7Ohy֕ [;-yjJnS66a[`_EލX>2S>2/dz'g׮={lIy3Jx҂0齳{dU/c6C᫄a '$@ sũ򳨨(r@ _,^Zsu8&=<ܛD&@ "șj@ |}q[@}&$W@  _Brd#@ T&@  @ @ 1@ @ $6&f6WV#"7FX@  /:~:H *A6^)DGx #| jeEv Q u >2柝168V\mRnMϽKѠ@'F*9Q"ewk)@8L$ٍ[88OWz{ywvlH}^ z )f= piX [BO&Ҋޡi9bVfYcVF(Mt?=$^ [H|!]'>v4Y$mF7R(}{2@Z"aQtPܿԹoSϫ@xя?KmļE_}HlL |4g$;`<*-N`Á]kVEX->mh%.zթ(e1tw" t"~+TNAO5)]ɖ]"ȬCt=,rbi&\T1xTqf CujS=-ORG!˴}&EoOʒ\&1{tN STݘØIhAU%1qgS(,υWsj;'f\޲2q6hlǘnumۺ؛jk _Z2Zêrަ^W%Kkd"ؘ@P:.@2p3L9pOUrMm\UۂA? yfm'QdEE90eՙ {]6զVٗU6* ļ {e?SsFI^N["W+PeY̓>'>e%Q"ZŴ$xe܎@Oq<˄x$"ؘ@1 . t7/U`1]L|؆BfHʿ* \Fu|ו7U'ş~d8mt_gx ]/3f-=u] ߩ`7ƯbFVikR? %ʒoi xۣG&QlC#6 bވu'N+,HKr -?ļIä>]J_ Ho7R=\{*q>#Meˑщ|AF#{XtnfЕ~h[Ⓖbn>8eÏ2t2oՔQ3_$~];'_2?VۗU6* ļyulL)-ˏ:ԨǐfjgU~QCRe}i7=!9tq/n# g.p$"OșjD@^ͷO5.3e~)Jo^׽|RYt9vƇyozp*3·OU$zvކA8B)r>y!9yt'g[2liK!S-|F+|;[02iR%If'ۃ *KY2Ub ÄtSmdA64Mm//_̏N [3M[(ҌkGƦH1 Σ\8UKARv:wxN6rΒΦJOFviעcϺq)Ҧq5obX40dAkigg] jp]flX}эRʲ&W)oIϓ@V&ъ %n0M!>JoGD/Д >'l=I503t1gC&sgfuџ|lһ4'!^:1HIEo9ؼMMwB؀m-L-ڍonLgGb;L^=;:Y8u;QwYdTS/2TЗzZb^Ř6 ϲ09ƉzQ4=*Eؔ-(\5:(@ѤG'K=&8)`3rh{ܜ}Qoq$|4șjq9Uۖee_<0s,'Mf~sdK*¥ I!y,.Hh/{hi@nϫO#6in 7E+?Ѡ/[|c@3.mգXfn ׻U|+TAȹjn茙V0juj'@5mߤgY<|U! Z`,_OQ2aݣ$PkWõPxxApxr児]+6 JA|sQcџsE  3c3NB8fܵZ9$ʾ':V*ҩS_Ǐ zbĦ $>wtiPؿԺ2oSo@̫b< ,L~^{WU^+vZԔ.-llU*jJWtPxiG '%I;w[kۤ{d2#* E3@f|mb^=ob@ @P9SM @ r@ @ U!1@ @ HlL @  @)l;緍l2M$%ύK[T@w@NTj\x.=`p[Fr^DƬ.{%0ϭ1 섫6K(J@q\Z66ւ83rĖГ 4(>!᳛J-u{9AaNUnshEƨ,!Z{7 0zEvҊ?=$^ [H|-V{ˊeTD8L$ٍ[882y;;6kO z>/u,>v4Y$mF73FW{t# Gs.8#G)}{2@Z"aQt-\JmW^C:YQ7+Mu떿x{Oaw4:< ́>Y *\ɥgBcjѲ3w3 +MbO_S.w>}^[rfޤIYr5b h9sDfS :k\X=jR*p+2Kk +|, =-1sZM޲L IDI"w*f>mE%K0: Aԩ]wOx,͸ee6ԃ \ڂ}ὔ&81[ P~vcYSźm]M5/U[`5m^Uje mxs#k5bΌss<_V7ú/^aCļ'H4p 4pm)BZN,໏i1ˍ>Vko#bͱWk+3{F:o׫)眠 O5ױsL1gZ) =L<-Hz<_aI]OVl88Fʆ-rjrD E2$хvƖK4ijg+vYl\t4$`;Zz@ؘRn!]mM9-=,|kaڞ\H:_~s@GC4? iLgyrqP-(a6e҅iNX͌BwZ2cTp3xe?hro[=1fy} EoAMl.rиmx#c83 "EQpmק'>xMXقMҳǷJ_mmӣX 9(JhW)ϰ*gbв#vOrh. Z)_zϼ Ӂl>,> WG/)B/ZǮ<;Yj OaE4@6;&t~ !V-+7T!#d]'eM̘+AlRw֠XE#&ˊb QچB`"`R\(}g [ [+fܿأ]C6Etdy͇1 7y tIcOLJd( iӰE;]IY.;Kuj U"|5}cRxYv3 UpVG2@`#PTO6}QI⧻u)]O?ޘ&3}0(gO?2 pҹYdVE#/ -C:#y464bP XqL[Y eE2&yD~_ДneHh}\%g_Pabt;.)KѴu?'?מ.C[?,MeK=׆`rVCwK$߿\S>i7ej%Y0``e%מf. IDATinىO<~t¹o ڼWPwO$"Ha.p*e/^a>WE.]ʟ욹H̰FqHb`9s/͢Ȩ[?`K j2hJ>|;Ӏt``SOT4L{OT!_QGϥfm >q8;h0ktѻaweG*߂{z *&ʪ* _?\'/;'d|=]*Ȑ80T[V\Q uZyȔq f->Q@ ᕼX0(ݔd;YP ?x@Զrdk %APOmm4L&fT~!7.6d6nU,Ҍt2h@VA+˲nx oڶ}֭7tB΀ف9a^a==J?1%Q$`=t ,j e J3ί^~ǯ#PA#[@bc?u  1k ۢK+V'y/5ڌf2 )%e6(߈dvY׳`yĺy!F Bc]ee4iR15%aiu`bi%4RX+*dȕ%leBBvýk& ef'"Pe9j#kmyS aM Y.%" e\!#Y!1'#-$>ṕn;ꉨͫwz(آ '90}Ȃ<)ΰ+WXcbb*?TVOU?_mOYy'mE,Pq5nY׼IYZ.(CNz" ' KФ$/)\S@N_kD1!ޓ+Yx6;|GG "ZiL\]_O_q炥wNzb4lhϪvDdZsJ_=JϹ>};RV-W!C$PEAS]8=:nԱKi,xg5yN x cΞ1Xlc Q3o/diD݇v75hlLafZ0q[*,#d];]M+ @0U;NI2Kag}LzR*ǹ'y<;O'K3ccZ".>UZmCHN)60G֭N\ۆQ{dH>/zRҸzw6+䎢巐/gv5w@CGA#u{u47lbޡ9sGV㕆639gI=g4Q"uͩ&, P , <R%쪁Ns w/ hһ78cs]Һz֣gۇ-w3"Ӯ9~r/{^N+*R9aTf& t߸4=VJ_Ip[k{{"=g(wC7ެӔgxYXYw6N_6qϨz\Y֋n̓@QLЂŪ=| ) b_{j@rky(عt眥Cs=r>mYwGnZ:]]<􏅓tg+ ξc~W_Hx4ۘ a8#` Ik멄jܼ6t)60v(e[Z =>º}? ޢ79{y KBrGъGwXoÈf-;<ߣ`"gUHs:/w%*ڠȅ_=:巘BчmGsc$^U.R71TB86hxHJ!|q"""Y-,,TB{X.5,bh %ƄBTB%Ǻ]kWRe48^BH ƄKfe3zw!=%0h T$/BlBm+Zۋ{7NBVieooaҳ-ťOUĖb`rZWT-&iWx{_9ї|/SUjoHQLЂŪ=| )lQ79{y@EoUEIv$9szns+}o}o/@ I8,f19)T ttt B!ЬȰ0SM!B!KG1!B!ʍ !B!ʍ !B!ʍ !B!ʍ !B!ʍ !B!/PKXր 8 #+]VK|̱L4u)wÑG9,EXO\K74! ;.?n_4|MMrsӦgavndk5 FbԾ R\=}2=|,|w3c|%6rݾj IRm'/OeEZLa7'z !(RN+?pʊp 18D^ ^R8F\.aɞںx!PU|0ۭ[AOǍn4yY}=os>\LZt/_6+> f\}2ݤK7@ݵ.noXQгY@fuGI;{С$TO(00*S'$i~:Vq#@:G5%u6"ͺC 5RZۅCm!^c{thhŶ%i O+ =gwnECVj4|iřЍ"`Z k+Ng;Dߙؖ =;X<l8E(&00nRρ)Yy@`R<[G(\!,جwaP@*Nx+E  #0hBRJ3s <ErSs!n]_kaOں*I9†JgÌcU1RQ#uFP^BȧC1!E>t~D@>QLU 7x)~o\uI|CB|IRU ys??y?YD -)Ȉ}9<*s%*11ʞ'Ӛo[DjE<ڻ>$!A~ps\{ph]p,_a8zFuV緋ޠ)kh@GAF%%|:..Bޓd*]` k+WY)řB+wOܷdx46a<*Қw[J}S=?/WI 55PB9h`%K22Em: ?b|.Kj,p;[)|0z=#4;aseE7ӊ2trjxeq$Tʍ 䊀"@ \@ H)o\ib0vu'r\H2%0WM9l9g8ZPXؑƱ &ʀ>i{p,d0H (VytwOؾm8}0RR瑑 ?d.aÚd\xhwt]c>3|ʾCIz !ͩ&\ 4+Q,D@Ի)q@K`^Wԧ%yy/bZ%o[j^ػqPq|:ew4ju$xEJ}ZA%_okbvkWeج t0MG9G^xӕ˜ctyLa&1HsLD1Qif;i TT#%04>,͌M,{j!$0>..FFvmߺE>yJg̛. +x ׇ^uظ_Mb5L ˲g^=f%̬Y# . S!DY4r"@/@H9p(?u!xKbҟve5}r~HJC~:yR)zt3d6Qy:VvGvo.⳹w,9%)-Cg^),znLH9E` 4*l,@pzu$xK%sk}'{Kh=C~ :'9=w\j/yg2eڠ{zոްG_ Y0{i&^:!&*ӺNMcy{zxxw=^R fF+PB>@BL tFu$5k0tKlD 0"unj+"y84L#Dk\^} =V <.߯{<444u;ECVj4|iřЍ%j' ߠ䊿zֻz%MT^dȲ^Blݺ>4u-Ur 1>+V|Ms?s>I-kyn~7?s( U/!ӡܘr"?" ({.`7V.r c:$Kv!!v₤lttT)ڋ0ڽc%1/gCŸ S{D%&F]ٳdZAUy IDATHG{ׇv_t $nk>Ur ={|a K:Մ1 nyN GkB^@VlQ~[yRE+Iq:郻'l6fw>AqQ׍JY脼ǦA+Reîm57k79ʣz !(R.QL(" u{8@% HS+RӒ u h5o/F8 E #,LziRIE*3<5| ^Cgj.a C,|y/(1ԁ$-EC?Ie\IE5S]7<ȧz !PnLH5cHwױf CC+ 1^GWԧ%Kt]&&m)|5YFWϰ6*"#33f45aa1:<&0zL$9}&Z"QԨ4nޝ4**|ʑ?ZOy}Nf&=qE\|\xiloҢ}qj\3P~x&^>tq6&L:Omudd>JR_x#!ظ|)$&00ё*`@O@HNq0h,w0)օ)FoU:B^c]Crٿfwum !Nxvn熀LV(C%2PnVf%%PnLg8D~@"\x @/`"dօ.P55UY3:=?ܼ. EN~֢^MsrY;l{#gGtJ՗8p6YVy0.Zy1UlArRi kUo\+ESL\|)U2B8uNru2%Q\q氀ӺvН޿ [?^Y7b% Muk^_Li C%2PnVf%%PnLgp1-N3V-r7@\빱r+WUW|2] RxQDMo7ۣÃG)]~kBx69XODsUϪ隣xqׁ_ IR2BGFN0R(DYu#et:9лiŒ :O2Ժl^ң ,, ^zh(`Njnû Xs_s;wMrondWYydNEjE//YTt>=偂-Qޭ5|ܰ~rjRa;,|-=]!RSʻrPNVn%(n7֑eFy^*V|Qo_%ݾaX^]4fz?ذGOEU5⪨:Hf; ٷfMU䯂q l;0jo(H*JNrPIWsnTgN3c@S5c(kޓGr~qELRLMZ:a ǕffhRzWK 3;0jw,Q^'|;|Z{;[ y?rrSs!n]_{6u-ߙ(k%FPaXf۸z~sة[;hM(7&Kˍ@ /? ^]戾1_e+HݞoqsNݏ 1ѩ{C~&6~kdCes =<8y]@[Gd7$N\ NY\,Fut y&ipsuYYkӨ]sW͋!]K*Xi3 ZflAԍb}S}A9ZMt$l/^K̰_RF*<ڻ>$!A~ps\S {) ʍ6$Tð,['&`Ѱ/:w"2МjBޓdT};Y] *mf7kX ^-&=qߒWѨۄRoWޓ347UtPt:yO5rѸN!phפo;=,e R3%*CaTX`([,5fw)H~13W0 ϣ/qYۖfgTiqa^G_XzYi(IXR/ZeR9^媙4ǽGLi{pU$O}^3 Z+kwt]c>3|V9'%ò43Uz#:s?xM9HVGt254R ul@w 8b@ ב)so$dAa/D~D,6dVya\Q7Kt,VP_^#f9>,ZY|JӬ odWKrqĤpw67&TZǫgج$d̚5 C^J/ cOUF&6ʺz2 fʤ,t@\T]4mlWQۑ?O#Ͽ(擼fߧe1s\-d5t"9]vXAѦnJB9 yGLo]z:0&G ܘr"@/@H+/ 8պҥ>.i|ȏT9Z?ioB&{oxÛcsKy?:..ȫg=zz|͎}h}73K.Ӯ9~r/{^N+jdF0Wmn 8V: K:lԉkw`di7|' -:s2lN_7&UG,#gb?ȣ7 Nt~u $ɑvxm= v\SkCIz?ag|WܘB!BƄB!BƄB!BƄBH\b/{+ӃCKDjB>@q;2K ;_7Nǀѻ)~:=5 8T5` b/9xݛln%KFIF}TW OD%h:ա.E7o>2f[u!GOKNsiMeEZLa7'eyX7yN.+PuGYv1>:~( Uoo$Wg^N*Qʍ ! ? G~&X?L/4x5sud;yj40TNz6˽#:XmK~8,a[gu7ro>Zt14nJ4ּZ Cn@2{wz7; CIzk_HIwlZjPnL)=݀@+Sck=7Lgt:9лiŒe Q.i!< znvis]\yp*Nz tDS~~ l~bӧ2sPz_6焯~4xu_:X,,Gh Q݆w7;%y|>a">PLy̘6 w0eXWow3+1v1ӝ3mcsڹaϵIJR B/M3dj<`I}M5%ׂi9-y#JQݿ*gXظymjf;  ~rk UVTZŹϟ}Pmտ3"Q%Uk>'g1=47Tuϵ:#`N 6ɽa撓RZ٥,{8?0yޘ"Q3>;fREeFoJ_͌lV~reyg"Bj肚RrEρ17HLݔڤ97*L{31u>^g4WF`оյۯKOlv {Td^ωL3睿[3ͦ*SKL-HK_,3ۈk^ol1_K' 2l¬MJoJ"79v-]eo^,z+a{c:7jr_')5 ?N8v?CZ}[W_9 bB_g:1~ڎa¨Eq l;0jo(_J uZ C||gPOͫaM+{~&*w( U`1 rZ; WK 3;0jw,Q8vclmmmm')q5ıSDwhv]:uO{÷o~RSU?/zvծJv?z*Έϴ5Ģk9d\W E<5A^O,bɷ/hhe$GDŽ^t万qA|\JLgɴW-i۶ *>91֑} +ڽc%1/gCH[6w'߬dx+ 'Y" $eCS-G{ׇv_t $nk>An:ןՄЏP})6܌IizFZW6TQ7yzINQh5ёMh1NLa/_uD"òZoG/|gWo -h;Z ag"BG^yO>vPn4tK aVnexksט!{]:ܼ^Y9h\Ib-Y}5M=;+ue򟜹q(OZ _:\<+65κ7~OQ7j#XQtF]|;;ʁ-f|"lV|Fnq>44d^x^u7CI$` ޾i7mDV#&:mgb* -xxvƪyOJZ(n-JIL,T4,Y5?A-uhkea#w=\Rca(S*l5;,eE7?VP^;0ARz(**߲w#GZP HbYAa+xz|%OXS6J_T:,3:-kqgQn[< ag"B(7&#$@\.R4/7xVYG4tE JnO}f\I-cG/ (_v;26,y7IcV4qtZP 7P5*8?'"= 6+5 K6FzUWjuXaM2.f;P*6%ʆJ?e>UVeoVdel\J+O+UxXfjМjBʥ@yB@Dyv_v/ᅡvx::]pE]3(?/T硸<ɲbJnL3&y:Bg0o@__7+ #Y^ZbRz>ϸM#Ič8P>2Iƒ8qV;&=KR\:MNEl)FrwFӬs;"1%-]PK *#:._ش l(Ƨ&yy/bZ 0Zۋ{7j IDAT^Cgj.*ʻyaM+{[g?%WذuÒUs4,J*9TE3c^77ts*eOd[X7گ?aPnLȗ @ D 0hnXg5@ /5xi#aLijȤFYWOFyl\/cfffff|`/D~D,6dVyaVu7^=f%YF\jSܾʢU9˧4ͺpFj*FTyӜG-ƒ47K{6u Dx{(.ȫg=zz|͎}h}73+K * F޺Va,hZڍkǗgo=R{Ҋk^"3f=3e̺łͺqS}Fʲ^utc b,VU=OPL b_{j@rky(عt眥Cs=r>mYy{W?yծ .©lr`a|tiWx{_9ї|/WKZiO0$G^TPˏB~5c{gj!?Eeq_#AnM^a%J?͘ ^~ړ˗ WQ;B֙}2+>a|A@GGGB!IA4c_$= B8Fs !=mg,Rvrl|14cB!Cs !cv.Z<%?}] R!B1!/Iы#?}B!9ՄB!B(7&B!B(7&B!B(7&BF`x{q[!0Z&*TB]\^*P YU ^]l9in_5U$)B69lR 32Dvԥ G-btn!B: ^ߵ5m'2ڢec-&B갂+e#TzWje=|0&D9 HاMC! qV1㼦45PgP[ϐUWrEx8De<HD6[nJBKT1!-@0Ш LՑ+ůߡg> f͚w )=WK9y羄.s{*gb|8z6Ʌ>:'9=w0V]V2BW~UHCxa]Ӌiee:G{Hr2kmн|j:Ju"W|̞dZInS~<%5{kdɞZ8{{T#P^BȧCύ ys1-N3V-, u!xJ>7ۣÃG)]~kBx69\vji,^lu,`` ]Q:BeW~UH+&^zh(`Njnû Xs2i fCwΎnw2I3cn۴6~ e,b!^:wdie-[N}ۙ69qwNܰZbY)^c]VgoǗ&_shQ50}ޤk˖ %èEu"5|\JcD?t51|-=]!RS9v~LyJ& Rz%SUOnz]WK'$TO BJ}9JiRrHc*|d(AvF86x7߄Rlv {Td^MMS8wv#wtA+&Ѥv$r`ߒUFzƟoo9q'*B.V,]_+Vw0lDZЊ%bqNS;B1!En.4F^~+|wڏ~,uI|CB|I`r=O?X嚍CU|q"V|VFʚGDŽ^t万qA|\JLgɴW-i۶ *>91֑} +ڽc%1/gCH[6w'߬dGNG{ׇv_t $nkyaVg[>L4wxgD܊gZbQ2":1MCIz !ͩ&=@P9v{ᕕӏƽS-JIL,άڋq*.-͍Cq||՚AW5a[{d3J,.+ +}()hhiȼ<(!7Cz?HPST$jDǾL T@y%o ="sIEXcg8Rgd=|؟f'L]v.Q\dbN"aPR{8@?dם૵] +7XIFF)M> GkB^ wrJ"y7IкƮ* CPw{(tg4jq#Vn~:o2w'6EEl QWJuɑ7NG8}pWƌ+{Յw`E, "$`ŨQ""&1أQB4lQblX%( X .(DAy|3s=sϝ;w޸s9k|Ue*zq?Z 0Z6$Kjkq8vp6"~Ҋ\ }ǿTD)Ilߺ=OJPzYE`%@zLZ%%pT&yE7w(!5=3KTKqv\RZK ~ycW1h۔Q\F Yis0W'z{ꁁ:%iYE~"o% UI{ ܘ >e  C1Yi>4  xEޕhym^>Ė&fF 04 7ϑMM;tPr+(TX1opZ ܼU3 ːQQ.iS<ʄ]ȵqW ;gP\P/^y/s dřQ{u48 U|Es-%0M(OGf݁fښf9jenbjkwKI䕧lv"FYc{شokioBZŗԸWL˦}{{5 {W\aV%A%Ak  |y&\U'̊עoop nz]ĝ.A/(˼O4w5ZuҬj)aGŖ}}k.e5!u,*C2/X# zpvO3ъo]e<{qL߱ʒ܄Ol.@i|KUz*[_ymq䞵5^͞إ Qk^˃=pR s G;|6.v+Z:K*^?KWN$N{ q:<"a>Φf@ :+q\@vxCըW՘ 4ɵێ~W%A%>|ɉAA|(rprԜѴܒ  >;"##9-<ȋzo|V|/~ny E5 )5k8RFk \eCFș3{4#j֭'+è|*cpm[2ob6VRP2ec]>V(}5{ͮsHJ JiL1A|8+`O.?oyú1]k~`5 TE2%0̞;p1W^wPȞJM:~3kںNH/b˿u2 ~ ūdH-IjU) Iޭ n^&<{&".%q×Ŀir5;Y'e2k8)lpmegcEjGZyqؿ+ ?T-w+QԬEFȩq{?[Wy5ߦ,*'InUpozb5Ѩ:?E#_JȪJE7ssxt}g+k/' gPj>g4'Urw6Vv1eR':ܘ >*x `s\&;`{|<ANWQzak7\)N<~`I gijC6ݏ+>DF6{ ީBȏ8jHWK8v<:Q~)ʿ(5ٳTɇ)WJW凈tNZ0O!Fmqa& ܶ˕cz_=Z&[Tl]?3ndO3}^~:Q f~|1hzv뮦9;'? >ep[ _PC̈́:jpgwm{#Ҋ1`UYqs~ JUN`)JtQidh[O16m6պr P _ xYqnY .jQ]d=}p\)׃pS2Y$lᅎ=C_ŒRVUYAr̳BA6:Ο.U׫A_Oa"*eސ̥_LFeިө-_{.|?94u'K)q2'7vJGk)5Q^q3VdոV}o Zk~Mpquk&`UFCB0aH M>TQx;#12n2mxUΰ_g>VhZ;׉9GbimC{D1o4h]2!8͗<˾6<佼qXBFuݣM;VM_e}WMJv}X#GT&(*=b5_TcJƑ]&z82=QZwT/v@cۍWXxǡ_:m<~Jyb Fcuo>~ԅ[/%2 ʍ ȍ@.ExS/> O@n06\byv' ETy\8Qߟ(  VsimOIkk# G,јe>ªMO8*bهʲ#ÒcYjsvazh@ɩ] ԑXxj{M廯D' I.+1CM{}3-28ۏF& SÎᅱgԽv[Wn&扊\{SFF&t~RZ߶N}}n e:p^78ЄQ6g\|080`w},j]kCP$7FPS1+%=T~啸V!&}^a!U2!2! z{?8s♃KvR9gAϫ`Ww̪eEQ5pYvTឹVyskv6+~B~yi#&W _WNW53}"I,Pi\вK9 ?ڑ-ckW)lnrvJ KUxMrrJ3=$G$W#JHp3TY睓6|Q.N:h*+qx*LO xY39Ӹes¸-IJak+X ϶ O2]2y3.n[wںE&GHL-\cKrSSrǾc} 4?ƪۊv+֨/dza!U"po낲⡚˪E=S/[fvS/\1{GD *7?"'|ҿfVx(3JX[napLZ[[h)9taN 49H/%ogxAyj6mWLYq(JYbU`7P(#<}ϵ?o<ϥՔ'@)P hׁp@hWR IDAT[W<+)Av\J8+1<]*SYQFRlax`a-쌭<(z矀Eh!&NW-eO(W])Tj}Ïv|^ϐ(p-=|i5oC^lvβ FEg㱫M߰zWy\+T_u,~S|6M4AF2Z|H+Q ou);Oduj)X_5ȊxMZFh}"{*zZ5aQ G$p84U%tȢ\me᯿tCX滋Um[P(*Пϼ3}ח.{Me)ީ`,[IK^ԁDʹﶱsLZSMUK!Ъrb5 [|ɋ/ѸEcQ{~aΫz)qtLԐ[ WKP_ꔵ go\k٩C )LM*Ly+I*EQD)Ilߺ=OJP6XE`%@zLZDJzg4ͻ,sG Y"Z T㒊ZZAۦ2#󐐈|L[~$ExZ!mea#@$"׊Ѵv}uԓǬ5zF2JEY{jU^,+)GM#EݦU|n<}SD滋IQdDQK7oYuܯ@imW-INLHHHHHHL)l_1k ~^-T@PnL 2`t ~N`дzXF꟫xqLwYCh̴ƹg*h2773j̅ ܼU3 eѰqnX6ZgVz_Zs'j7Y[`化ʨX; .ׇEoy[N&j}Pm=f^6ػ,]=il޻9l=Gھ ^?NU 9J/\ 05|ܛ83:*sxO3]Qb'3}"¢f9Q#or-y2ְA&*u5tʓyu_19+#]fښf9jenbjkwKI䕧5|J7E_yhjq{[AU^}WOg}]޳>lwV"׬E2/(-/Gfg~T 0l^}Q.+났(EkRK!KIL2FV Lgf*X•#ˌ#v+c9=};)@QTh]ǥc hyߎ/miX 9MϘ6P8)ZH|܀5QHPR~8c? ~%iW,j9e9$3Ҧ[V,Svͳ"8x]Ljc Ί ;tۡB5_*ʊ mؼ;GWr\^ 5p\u$tq z!qi5fDF(xr-`㕯ʪ9`փ[U| V|3j. 6ً=\fV&}bsJ_:oTQ|=kkp= K8r  +M{trvlT]4}IW>tTXzN ~_T|:p&P|$> ?-A`Aux D;}MCԲ?x͝.@qW|CXY?/؅K~Ha_9aT"R9+89Dž\.8+E[~i}Iu`4ԖVs:o8IAfV:QM,I:ȫxWUSߟ]'>2o72|T )9z2l~AK7T7`Ç;99# O%[N3?ZD  ύHEN 5AħW{ĀN&|u5~NWB)1& B cNnZ ~'  (7& >'J/z@AКj   rc   ܘ    (7& gvZ[k3;(SMUȳA7i'ڋ ]@# 8 P e_NK,`P[˶͵1g% )h3s>ȋzo|vįh QANG糕ߦk=,tU9/e ;\.f/㋭skcQM3_s9ހv֮F/Çf̙rQ}5h֓NTw:[ MFZyl[$ɵ%Ee(ޟccB2kYiN:4U8/y],Cje-'`efΠ4i{-Aр AeeJ,Ab8+`4Q,' \ ! <BY(ԕgy_zugpX;/tW3mҹw[}wƥ &Ϟ B hwڲۖGdqZZ۵m~HL|hN\! _z73\QKu+x"!+!^!- e./g6^޾2Zmp|G|Ji45dgѤ2r*CVePwPȞJM:~3kںNI7rU^ (7&}0sv@[c.=7x <DBVwY;CXYk7z"a//t*)?߫򼈨tNZ0*-8gύeb= 2}lqy뿖$<{=o7FE5g#[ wnpG";869~x>T[9rN|!dq,t%_mx펳3Y-_CTCH5GWLLyટE?ᵙwLq?\-6uWqN[zw2m@ /Nm[(/uSjl3aNf6?]H4w ="|fAz\BFdio]r,Y>Vj(Q2PM7ձ ŒRV~eCdtnn3ɍeXɈ * rTԻ;\.,J_\ۻvٸ"7ퟚdk8{Һö4+!Px{r/=GX~8/=Tʺ;' Q>@&`Z馂" 4 b` `F!y'c$}n2mxoxTԹ}] cΐ:O-[ׅv6+͔Ѵvsډg]`kPFv M ;7_,g`ϒƝWbQ(-+TDeL"BZSFuZ|ʼQ-*SE[]ȾC?94u'K)q2'7vJGܛT#ugNq8cKVnۻaJ.afy-wZq^7ɨG)Րd@`۾ d,m;poSRkj3߉"ɶ7vU^Q1~f#V=lJ$i'rmGt.u_ *DYiw{{߇0~ě`,~& A1A|B1|x\QL<P;P~kCP$7FPr:qTo:-t"8F״}TSe9z?OjRg7߯Z|A9~ڦR˔!z{?8s♃KvȰdavؤPk*4I8ufj)+9ޠk 6.}%:Y(Lzt^ juo{7l9t)n~<4"6Yv|52b^zJ3=$G$W%G` l̷4$h*_՚ q檅qO3ZVF#I с;uhmyQw{~{$FTg2}[shYumcۑ'.2sTJ̸ */+xe/_42m|P><Zf]K͆Ս;BelzLz\S;Ѱ(J-:(t0hR@ U&+6XQvGVLpkBUwq393*fJUS]U"V2D?O]yQچ]֟O{ +11E,C|SDςpk(Y`4;NmT kwmB#BsY(ɧzlnFӯy %lj0 =d]n[+O_Ѧrc9Sd ou);Odujz!뱢 &::Z\S"_twōO* reʨ()+A0*R>+_Ҍ+X|*Y45Q%Q*| 9j[sJJ-jP@_i OT~"`,lHTTK}%=Yg84OSmZ%Kg37E~Ѵv}uԓ \ji~l%K \5u*e%e਩UmIafjZVǤ_f[I:i$yvo\JҞC`%X" =&s I\5UhwkYtsKR3DMg%_ŠmSFq|J2_deN;zWu@EzčO* r:AS"8:&j/* MsK#]%mQ&)c8#?TQ7+` @dss084Po %m5`=}_6jennfԘ yfU^~&=ahMn#;vޡVPP@oy[N&j_Ps|b` v-(EkRK!KILU*vk&e%^ 6hlo: =ˢ/?*ߥF)#{ٴooctA{Õ2}r~U;#c3r_83˥@`k(?7YqftT.f| -zf\K OgT+EvE'h1sL'&F6C ԬL[,~]MLzMXn)򴀭;)2Z/aݬ=lڷ7iпKd^PѠ F謉=LGϞ`yD'qҥS1wOW/͈Tnշ&OE+?GJhM5AT!TT,X A<:P3 lv Dq-k ^ygh ?jߵw}y-6q^LBg.~b;.ӬuW$M|=åPBYc@ssϢ{1Vc&O4hҌ'o;^P o=8Uŧh7`sn8eXmeIn'6J4>\F- :9Qgoͽng 3vBGZ{aei.9\C>UM_{jqҕ-+W ʕgֲ i9v4]@$gq=ːQ'aA͵y Yan;!g:YVFCJ+OHkO{iӢHzdw[oRi©-Gu|C%A ÇA'-'G͙M<hw[w|Ioi̙Eю iᴦ  zɄo٩JH<  Ta84,:8AZSMA|zɱn'GO7o-JXhbr Ajj{Qv7~Y{B5L   $5AAA(AAAAAAA_AP=ymfsp y  SMU`@o ^(`b Dc( l\pxVJe1GsقA˖S*cpm[2o}96nBWEx_]~Y_*^VO95HxFw|.gPRώ3ٚ-h3s>ȋzo_ͶÜ'~mEK]U_p::u>v$E;svBQHZ~iN:4U8/y]ȴ6uI>3X3(xzb/dK䈐ak;uޜ-襸qh3rLmt(͈uѲ?vU^ (7&Ay  m%`> ԯɨx%0̞;p1VXc6֍ZkTah*U͉+av-+mDG]W_jI_pozbѨ:Heg_d1Ė%$6e~4kQd(^nVv^tyq>b<_UZ=qϞ/ >{vv* 9 WOFq6Րz.p7yt.c-c2{{v,6oBǞ>,?߫CDTA_'ovA'Sv&؍i˼pO"^YG ~ W7'6sܲЃ\GynÑ|VIDATmj(|vjByO L<O{vצ7R+8v_u9yW,;Q5<{fA&KUʨy.9,%4E-wá,nS3Hol㣻WNmF*1UCaFznie6*ϊ-J{,Ui]Ooa^t;wƭ3U7$ȽA|l =üB 0tSc֫$^E6ʱ8u܉slļkٺ.{iǽܪsvlԹ}hZ;׉9Gbټg#wхl5dOrY`sMO=TQ"UvBZSFuZ|ʼQ-*SE[]VQ-ٛrh|g)NN3>UUSe]'Nt]Ko&\7F:?Μ4q?×W݊ѷw/m7\‚Qk?c/~[ ;⼮ɨGdײ4$ضoRHkJjMm7?; (]`'WtLF=g(yOz0͖{wEM=<^?Έ0c\:pcUr{I<=y8N~^Zg2*`KrSSrltzit}I5o679̲R%}5%yM~tLE)nf9)G8 dj0 Z<%dE>ΨVNU f$5*z,I с;uhmyQw{~{$F\QJ(9O(~;b%NxǏ>/3=m\7[\"=n2j.Lݿl]h2MpMnlîJK)J-:(%rsˁ@`7QȨ(7q)OUYUGm.O }^?YY*+yW'nzg6bD+~XW z矀Eh_w2D0WM?bEc4^b<> +,]7hw ?:[0 ppǮ^7I||ꭏ^rͧhS}-[ZTֱKelѷE:wdwД'L:n m &::Z\S"_|+qBh)CVn,it8$1á .WۄG * r/Ak(MDen,ZU.V@ls攔!@[`7Q{l'jkq%/DM*IDY,M} y"SNSj;кqe0)"X?vp4q]mk-- % ˇ>{㒞}nD$ͻ~R<+Ae1iUmHUSa[ˢ;_z%h%_8;.Hm(.c#߃Yisv0 Tyn.ߪrCD Yɹ p9(+dYI8jjO* r/AG ]C`( "4އy re|@mVfFPjQwm#Nv<9k-vq987Lt2^$&%$a 寢.߮9Ĵ]o 5LJکJwʐCopԴHO%B>Tym^>Ė&兯ن2}r~U;#c3r_83˥@`k(?7YqftT.f| -zf\K OgT+EtE3185xkɓё^˲൙YZZRy婜aݬ=lڷ7iпKdvsYVfx|ӯe;^ Vh{ȭ q#hlo: =ˢ/?exU^ >  \@*p@ޏp?U^35{x Dq-kT*IbQcϙ.wa$ї6-z7O8,_;Aarx j1)ӬuWM:z-MFY}N^>~'E8.wde[nUiƾ3c+Dq{,VK3*d ٨hS |h,hjre|YԲ8<7vl;+Lje qt<ذK+êPvQ\KstoMd qr Ug]0qV='zU^ >ÇA'-'G͙M- #22RiM5A1 _]ߪS+ᕐxJ & >XG_I19  ʍ ω҄K'?A8   ܘ    (7&   ʍ   "*0@W7HN/0l@"px@ت^˥f܉}L5{ߦQlW pujkٶ#<2/בZh2gcDxmB_Q_Zǖ)-7E1jy8T ⼔wm:wדn%׬| Qv L4(pP\"V_zu{t)|ۋ (T+ {ߩe+&z{t{b[飫$P%}Fs Zח˅]6cEzM){Öe%׬| 8|09 @ 8 @i,6u_BПᏐ_(2 ysv5W;?$įzzO]:@I [na=@ȉoTkqó ;r.$$>uS!!!!_77kRj2l[ȿ8u# <Ew]u>d}eۨ WKP_˼|zʧr/AH8|0MD%\@ʗd{^<(h ?H^NH$6d>]GlH\2L$*cwdFuݣM;}8}o 8ZuD._h-oRv}X#G /aZ M&g1mہj[  rc(r\;g ^|k&Ec^c"`1TAp(eU" <-u.Sw2޵WĿr/AG ]C`( "4އy zE" )sdGSӎ#=; J>mVfFPjQêj1SFieqMcޭZiXQƋפdB$,b% re.rʏ?w>N$PtLFlr݌5y**\ʑ?XⵙYZZRyi[w2޵l+m^eX} `>D `n@o@HIOtvU;k?І ^_)m;wK ]={d>*GM#8x]fe:4BiƓkȩ_Kơ7pM;`Xļ"kCNsǀp_qp:F{|L=J:]0wz8ڪô(e~m41 oڵXxdZ;7=;g_H+m^eY} aTOxx8AAAӚj   src   s9|0y   ?+;IENDB`glances-2.3/docs/images/screenshot-web2.png000066400000000000000000007442101246314757600207360ustar00rootroot00000000000000PNG  IHDR/ pHYs  tIMEA IDATxw|TU7ۦB:@ !@Bh@E@\QH,El?]l**@^ $'>)>g7O!Kܹ-cg,y睱fy͵\sƌŋw$ WzQ 6(ߠXX,λ/((p^q܈#&Nh2>\[[|O8 oo3g߿,wazE׫jZ0 EQ,hۭVl6۸`n?MW\ۃ#00tuuiz(9sq eȐ!UWW?^ O$JVYeDEeY$A - ((-:k477WTT(BӴd4{o1w'|R1i}Π(irߨTO>d͚5x0 c0bbbvax6.DGG0l-4M Ôo!*:ߟ8D!8h4JEe}}}5MiiM`FQoixq,Ht#wp4] YeY9rduuuaaaeeڼd6Ŏ-l醀\v#""4Mee .]Ԟ-y4M8aJJJ.^%`2{#Grw5k̘1#"""88XoUUU-e?²,qw|9K0 zFLLLdd$޹OfliVT:]V;{OOg@600pРA4h0ͻfѿe˖0 c-ƍ?D|rbLFꫯ]t0izذaw}NS%00l6Z}̘1,Z,(=z4q 'N,**Qa߾}7o.++c&!!aƌIII(AjXVVԯ_?\iA,KEEE]]nWT...,֚L&ݮV===zJr  ),,{gϞmEQ \4/t͛73f[,׷}~T*U}}+WZtVn좃J>}NAfsNNNcccLL#ݸqd|xlllxxx@@` ev{UUUqq Μ9շo_V+2˲EEE=p{/^1iҤٳ祗^"KN>]\\K/͚5zҥKq$d{}[b]pFEEUUUرC𘘘]v}}y饗 x{{q%˲'N F@@ܹs/]eYwuw5退EQ:VTT[]]{GדEib%$%%͘1h4~틉ׯ_YYYnnV+W8%5 |L8Q(>7`ppj)l1EfZo.8 ԩS AaF@ fVV?lZ駎jiii4MO8155eْSNQuѣG5kh4-[,_0EQ- /0eQ[^QFr#Gk ,]|j:&&y$I.] Kj*aylG6 Fc4}ue(իW-[tWדh:tHӉ\IƏ?ar+vFfIƙV$/]tƌ&V-h$8t:`EQ$ҰX,+VHOO#L1 cZ[w*ijjbӓeYIhfYń)~~~,DDDDFFꆆd]p""""<<\d24Mw&|"oΝW^zjnn.EQ)))'OOk׮ '8T*Ç7oޜG&e8㢢&N8aJE sl˗=ߞ+ @kVߠ(J*x(Rդ6ťK|AZ(N4Guuui>رcdFCfmwFն]eSCjǏw>D'|d޽'O$K sϵD2ޛojO>>?WMcO$I{9z5k}YGIAAA_|aZ_UE$& 6쭷ڽ{ww4;;nVu,:,//>1cƴ]Y㸱c۷СC-.Ub󙙙OZz-99zn91}M Ȳ,IsX~H7n=\OyȔ mCCCCmmm{QQQEE^'3FB*qTtyyy;VV;vnZGP5s9s_~(ӊ'zEQ֮]8uTQΞ=[ZZ(Aix뭷n/zJCC0ǵޠN#]TnmNfDUEPU__.(lmHlZZZTTTmm'Z-˲m۶EW$qv{vvvt n#](??{뭷j iڔN0L<Ϸ~I寿 dYfmڴO?uʤ(Jkv¢y-\pذaFMM7l<+k;wq=t<@zz: ,D?aR%[㟫Wްa$%M]իWwx K,1cF6 eϝ;SOsˤwI{QT^yxxHT]]襃8¾pA@EQh=4M;?/Z,%T*JEgټy3.%8'n#G}}q㪫qBt{!GydРA$< FƠ,YgzRػwAwaV+r~V+NPc[ڧORU<&==gzL#FpuueYek?Yyp*tcv]wQ%cVݓ$IQql@oӑ v7PEeYӍ3OOOji$h4?~|ǎӍ+)SX,IpX,4\r}p}Nlٲ[4MӴZnll|233N͐nڮDž $I-:a7FeEQfjeԩG^^^}٭U0̦M֭[v]CT~ia:nԔS(Jpp_LL Mh~N hѢ t:| XQ2eYEQOnۿ[\J-ewyEͿۡCL&0z^zQKKK322dYPTӀ r/d2-?fǷСCsss+++qzn 8&N0 #be/^oY>}߿b}!!!/_|2q.bY8j(DGGgqqq\,Λ7oذa t,`YzÃZOOψ//////wwwF'˲Zy>883{9sLvvJrwwMo!qS10| mIQTJJ Ώ(,tK..ߢĉEp ._HHHii`$IeAjuXXXXX˗/^ر6$Iϟ߾}CJJJi˯jիW?Ov^p[Ͽ^(J~~~eeegR4g7\9;;es$IbfС:7 @/EF:477 <㤵#ɓ'Zaz=ieff&$$x…j4Gmݺʱ<11 HoyEQT*qa4MWVVFEQ BCC[Eիb(رiAt:رcwv)ѣGx{I'2aS||OII ެ{pycY=wF6lh;ACCn7 F >~E˻N6oի}}}׮]{ر>s999K.=|pB4M䂦iZ\\ a6O:؂V}Ǘ,Y"Gy9.<00ݻwlQFӇeY;,a8 >qf[p9s4M/hz9Y+++[,[䌌-!CՉhVՒ W IDATvf]sMZm6:wj2kLCCVm8I 0dIttm(JxxxTT($Q믿>|رd"K/c?ѣǍ7h ep@{y2g = v(f6lZm믿>$ۘT;۷off&sh"֙,{{{466 ;6%%ɓFiiittthh#Dpssl$iOsݝ(G EQjѣGiVկƍ7'kQQ /pԩhAnn2.E!`j5 %*****:doݺuGٻwz H[Z'W^u̙b0v᤭<Ϗ?ǧ5w1w\k.RFd֬Y8~ѣ###;Y#""222JKK[ڠ"??vd w i{_W^u.F…իW:uOӫ0 ˲ n䬊xzzRU[[eYeY&5VSRR,Yr)9E}?C=d.]jժӧ!6\zj:L`y^Z\\LwUqak׮LDUӧ@o5?ς tlvXg4M!d j*J$ҧ馦8eﮮ޴ic" |qq1EQtbh#!I)ڿca222ΝpGVy/JE?s˖-cFzxxy睋/Eɓ z3Laa^cFXr;ϫBCQOgm۶I{J/ EQM[pƊ$ J4MPPjElz{{?e!===00pʕk֬X,:YYYT#˲:LZ˗~RQ'Nvڬ,Vk0׭[ ARRRRSS;yf uqq)++H`0ر믿޳gFt6-7782I$,,Vi:44`0GWZ>}L0keeeC!C^ЫtAxܸq tI=BJt_ucEQo>n$iРA{q\[b}O=믿_ő_}}}[QN8q.IRMMMRR,dɒW^yt=}<$$1bFXV(I `TTVձP677FwwwoooժZ+ar$I"%xj-eF466:(:G9*骪*|tחMk4+Vܰ(EQz|||€b,^F@o8KL. Aޟ={… d&R[TQYEQdY6999::GћzK|u:pVȘ?~SSSkFEE_]GKt:ݿm۶R 8._VAfs7dY]Rz 4jԨ+WpS{h4UUU?8.%@ѩf͚1cf뾎<ϋHfHIHH8p`|||PPkss3dp{!þAhOsۗ䛽#9sh4jJvۢf 10ѣx 777zڃ'T}}R8 wiZԳiwwg}vڵ׸qRRRBCCUgHG?2:gyfҥv':@^t;ĩc:6WW״4y>$$dĈ8y 83l0a,t;:ǓO>(ʭ(?:#G``̙3V+Nt$I ÇǩN"j~JHHy#FTUUl@\77UV%$$sN۸qc||<tU֮];dAP^(>>>ӦMiɓ8!tDD$I 50 5jԨ3fXVQ[J }ݾ}v5Zfs/K$(<??GuqqMϿfkYfuWڵkWccה)SouujiZޟqC,KӴJ8AF]]kwyݹsgQQNjaaa jɓ'{{{K:СC.\8||'Nhhhpn4x4\-˲wZi۶m?5(1DfF__%0<ZV,˲`h4~~~QQQ.@,˖9rd=p9s6MVחa7L6MūW[;HJJƒ 7t Ü>}ãmnnnYEq l޶m(d ˲ uuu޷W% 1B4M<_UUq,[RRrСfIeYyojj***Ύ:te8cv۷?^eeEt҅ &L=g@QqQQQ4M/{뮻MٷokdddhhsssGkl6T-SٌKy lv4 a\\\ntDQ$8zOơ(ѣG333cpʹ,Z'O4Ǐohhؾ}$Is̙\F( ElDNQThhׯ5k͛srr;Џfl6՚{9s$$$\sMպsΏ?6-22rҤI .nbٽ{W_}a4RRR.\8i$V gZm6[SSSFFFVV֢E 9R\\6hРiӦ͟?_9ܼ~~̙3&)((hы/NLLlgWooy>&&fڴi/ngWI\۷XRkh#EQL&ә3g i 2d^o_F0>>z(''t1 ɩ:{lQQlj!!!}i][sΕ-EEESjkk RT*UrrrVVСCi ot سgOsssC6lmWjTQbV cUdY޻woAAssK$YU*Z&ׂTpj08#ukZ3ZOf4kaf̘qСRR1$..n8.99EpAEQwI#\ZMM͇~UPPPPP`2njzƧzo(`0R>c+-\_(˫zhդJ.\駟K⒛"q0L?g}&Fl 0fqq>zA<==KJJdYi/[ouʕ+;rEQ~~~*իW5gwY|b(*$$bRnݺ3;rH}}Jrww'yl;wsYŒi4f$I .ӧOm;v\tIwwwVkL&J뮻Z$O>x 6\]]VdjÆ 7n$Iv:w:b477s׿ᄏ3tؑ#G~嗿oO뵓[yn+ݚuLjzƍgQӧ̙3{,*G8$%% 'NKxgKa^|ŧz`04{nt%Kt7HOOgYh4.^x~alll׿ȑ#k֬IMMeŋ ,[x.gϞ7|b :O> (jƍ-ə3gNNN ]vvΝ;%I5jm6ϝ;bb{'iZ}HQlR\\:vXvN8'LX{$)%%%55o&33ѣz~ܹs,'%%3FRɲq˗/ڵkڴi<=h }9zq~z &MjWJt.i92nKwmAhX20aի;Mӡ ,5j`tz>11npʕ J%//(楣ٟO?%&&s}=z3g.\p6ܻw/0 / /x{{{yynٲ4b_yGo۷DNObd5ɲ}f// :Vϟ+W8q"557큁>غu m[`````YlEQSN_rLQJjM# _jUqqjmckRҢkddW^vj*!!!66YfEEEN9s&y\E~~~رc<;WY8f2w$׼EEE<ϻEEE9DtLLL~~,vyyycc#qqqq-\QIzY۷4M0ҥK$566t_mmmCCdRbXV2n7559O~Aj,˒0Z-J~Mĉ}u2JhtU#/,,$E MMM^Me^z[n766t:ohh g$/,=zĈP___s79k EqO=zmtho)kvۻ'Ȳ\YYhn{Jd[r7<I6,,ԩS,'$$xzzVUU_؂h8. ??h4vդjǮ9E ^t}]ءyZBn|׏tl^wuuu^o߾EԴ(m'\: GQQ:ѨT*ݵ_*++I`ٜ644?w#"QTq}wW,:!Jn{jd" eeY&L&eϟgY;ׯZhϏdnQ^YϞ={F]ERm۶ҥKDL2ufy׮]fŮ]?ɈN1bD=Mӵd}5[G x{{ؤ* TUU$)11QV_3`@a2Ap###N>mn8ɝT!)i&g暏*2 /b9QH{TUU`"//oƍ۶m#c@ IDAT~|q$cƌ>|'׿nذ1СC[n(jڴimOJr}(rTfr.TѺ?}M6]p/?6[bEeee@@9s'_~nnnjڑovYI^p񼼼ZF:thvDeʕ+(;zc @\! EQ$mڴ.*,..x(#Fpiψu&MdZsrrXoooٜ[__rwDŽ[hƌq{?wqqYpaOv߻wŋ]\\} ;_\nd߿{Uzaܑ-0ל555fYXLЅzeYv*ù^Tm;.Я_Ç9 KHHHfff7_:.66_~8ydrrro{9s戢8k,G.fshh֭[GMWTTL<9++7ߜ6mc|MHHȁ,Xcǎ~}g}gcbb/^qFǜ)C Y~=I+nyx)S 4srrȴ7 ڟ<Ƿz_ӦM:ySȧPT&M}vޏeA4?^ϟꫯ<<<Ν-&})//o'_8YQQѢLaE冷LY8NLR@wU?EQڈ#h#crٶ>TRgŸ)Scǎӧ?'NT饗Zr(;Gy8pӧz~]_I 3rHt4///Qϟ?%3fM6L>}ݻwgffj4~%&&0`0رkU@k ,~'l 6DDD<=?EfXX$ITWW%}ZQV$I׬!Tzp8jԨ^(¢KxOMM%{+VowfГ0z,X,v Dt9RDz~ʔ)GHZ>|֓7N\ZTaÆ-]tٲe۶mKJJJKKt999YYYNv}OϺ|J8j|:DEE}?Ν; &<~ZfYViӦ\>%Iz_{5a6n8aZ-˲ ˗/w 2wx]REGGZAnlǎz~ҤI-zEQܼysQQ]]]u[mۖk4g͚c5ϟgϞ/bܸqGn/={9sfرFpt dddL:ǏI:55Q?##aZq9ey/^l\!i98wi:,,Bݔxxx2EQH֍.`ٻϸ&qɤB$#E D!,W\b/*umkY{!(kCP#B8{y`U#03939sz1V7ayyy:::-?{h椯6e.N/))Qv0///>ťfX+h4VRRBӿDUVijjnٲ u`2V7o^yyyy7r/EѮ^ڎE 9+mrwyyy=??s$n@֫W+((ȑ#sҥK8f#H$+VP`_ٳgOHHhj DlL7h98߿۷(+wCYކ?t:o߾ĘO 455ٲׯ_ ƌCѢY9++ѣG#F :G|}L&ÇEEEFFFy{{|_RRE&yP7@ OOODNNN-||8)qd(Nruh4]]ݚxu[x222rssi4Zݹ\W8rUVVmiiTh999Guvv޽bWlPӎs*?~```jjjII\.711.,,J E5`'͛r;wO>_M*l6ѧ@ hfWԹs粲2Y%YYYhM91t^6<]}@l6*E`0>g.gϞ16gaXT*eUJ- QJ'mmm4>dr l"_ڋ/LLLq\~qSu¯cǎ)))>}:y$HaaaDDDmmL&ѣj%MMM}p|V2:@ r 8^\\@#S(գ233#c͛/OMMH$d2ðv)< FLY__fmmmu]*Zj_<==QرcE]6P:.檖؊\@iw$)&&FW$W^GT mzzD"RxrǏOd2isݻw>垞dp8(}IyyDuA qPiQG++**de@k|FFF1W軽5Μ9s…l>/|~NNΥKN:j]Q_hw[FcU:uL&D7n1A8w{q8;;;8W^d0BFEEB*ZYY}WSSSz*ЫW/+++㚚{F?^zU]]+qy4jԨ;/_}Rݺ8 /*4cVǎۖ'ݻwn"H͏ӓJϟ?WLE˗/E"СZhllLRD"=y`XǏ$!2ѣG_VZK.bѷ_٠ACryNNιsvuȑ]v={6++K.h4wJU|q;l*B0**jذa>ŗF&+**땢3Eѱ$''H㌌ [[[ðׯ_\<==f]]>}͛)))&L2dL&p:885WZu4gp;L"[*^rehaΝCCCݻ|W^ >dJ՝4i1k׮(~=zMKK{H$R"NKR:=NGR>|r*ֽ-,,z%r&OUD߿W\^WW3bĈ9I|>_W9BxX߾}^Z]]ML[SS^UUEߔ:4ՕfcqqqzzsFehh3220L&;::C&^zU"%'m#榦*.d0W^U<7oޠ߿߶m[[3772e z ¦vfM\.󁁁/^ػw޽{߼y3NGGƍ<|Ç?$Rr;I1u JݴiS^^=zQF988>|X1٪D"A#0lٲeŧO~9scc*nA5Mo߾}%IFFƇ޾}K_ QFPU>>+Wdbejjph4Mnݺ%%%ݽ{7..H"XN:OqM|r\Թ@CC#"""""޽{?~>>>ÇWJu`QL)JիZ ttt 0L&[[[kjjO#Ƀ ҥKNNNEE\.WSS355ԩS3S LntjCC8x$;v0a‡ Q mmmieԂ?~X]]M̼cjjjaa|555$׷nݪ6lYJJŋ}}}mllvZXX(6 AN\]G7} 233ХR۷ X,>}:j~GנX$&*脿}Ç87%q177իj !HfDee{L&000LOOG3M444444[ZZׯ)9E" ^|Y!e2vAӛIDEBq"ޖC8r"H&0mwP@dӎJEK:`4wb'NL8 wssV޽{7##˫K.Ǐ_}I/ڰaFDgk/C}oNRI&5?h۴gn)o߾M$kA.Atuuь p{{{ ǏWͨ=~aJ066Fs񂂂rss>|XUUK RSSC{g?"m|5 m[)}% -DoB/]DR h8444111&&&..3h8B߿+++utt:u}E7O/ɨT7@D.IFP>/l6x\.W&}X O> B4W>ł;rvvvo߾522p8ͯemmB&91Pj՞CT%e2ٿ>r CTKDGT*{ԐdǛI׎'O|'Oև( 7v4 _'rKK>(MkeeIq3T驴\.'@9\18A=pQsq~ >J~ +d?gh;2\YY 15448g +..q|G$I^^@ a>933+h\.$ tFc2 8T0 h8r 4,JR(CA|^RI$D"|G( Nǰ's8 *Jt8!?$pv#|-S8A=p|?XTQ߾}K8po-_ҨK-(Djy=/w`JK%CmiC_pY7Q~faa1v؜z?6//^z\.wĈUUU?ǧh -((%0 ptt| ۻCyߺ~=NowqvvnʁIII3fa>>ˍt$ ^bۗBg`QQQP~$ط߿FFFBWWwGi+Wܾ}[GGD"8.ɾۇ~kaƍKMM]h5wٳ͛7ϛ7/222>>ȑ#ʹӭ[2̶kǎ{ABB‚ h4Zk޽{7**ĄX(ry gn5zT__ߖ N_n݋/ ?, ޽{ԩoAa3f8w\|||ll{E ޽knn՝:uӧ92`JT!޽{?~<>>֭[aaal6a2{޻wottt\\޽{&O{nL&1"11s/55;w*-wuuMKK>}z68a: qqqgΜ100XlYTTT||ѣG=<}:ò IDATeՊ͛o߾l2`ڵqqqpvvVh4g&$$DDDx[nOIIy?ϟ?1bjp׮]qqq[boM굮MJJJ2N5~Q__O1fKK#G|ѽ͛7Dfִ^`AYYYCCCkrlbaaqͲ2''M6[65MVTT4SNVr߿sL&+++kYCg̘!RilIIɲe˚Yiѻwnd2}||޼yӪmCC@ h"hϞ=>|秦~dzzz'N8p@k6|~ 0PTT7mڤ۷o=zYȑ#jmyÇy<ވ#,,,.]ڪr`A%$$?~Fm۶mN:,8_vvŊ$LSu?L&СøqܹL}R&]p?9fff'LuVee֭[;va(9Ƴg𨮮H$J4hВ%K\" ;tףG%KdffBpI sέ[^~aآE ߣGsԴ|G$11(E޾}ǚ5kJKKO8A dkk;{슊 pdԛ7oؼyx<F?r|ڵkaӧ=/я=jբhӦM8qbtU>3&@am%J.]֯_=|XlYii)oC_Z[[׮]#HnZb… cccRjݻw ;RSS c0'NlzM8Q[[;''T[VVVx,--]\\ΝwH "BQQQ;wׯŋ[F^ܹsVVV]tQZA(G;ذaÄ Z7n\zz P￷no]zU>|p1![n***ڷo׭[" ,XжСCۗNRg͚uƍ'OGKSRR%xjjԩS---w؁:޽[nD _~۷oq㆞i>|XSSlٲ8c[hQrrﳳΝLL&O0dƍ-㠄d:99D" H555 o߾q=zl޼YCC SNV*//o>BaoorܹF8x~ 9t萓:gΜILLLJJJNN0aoW^}#FDtT7rSLHOOЄǏ߿_o߾]vٳgS,NƍC?nذ!))iذa߽{wRRRs8_WWG\墢"oUc^">}㥥555Ď|~YYYkCN""zwFF[TKIIIaaꐙ+W7oyl]׮]w}݄wNݮ]cccBR+W<{, yfbbFijj]~=!!ڵkSNp8+xzz&'';::_hMkk^B8::nٲ%***11͛g׮]~Yxxx=8uŋ WlMhhh_… 'NdXwEǏ?x 11199911QiGnnn틉4iںukbbuj544O~54*aܹJh/_>tP ,C555owܩս{VmF^z5>>ٳ>>>J]doݺyf˜9s}}fHHHCCî]PBئP(Tj I҅ U3ٍ=zǎmH`0̔{wUlP͞=رceeemN4x>K.Ç)hkk?}422R5 Daaao޼9y$u5kaĈ=P0 vT*D"d@kkkGdz6{x<ޤI=TWW>rpܡCn޼y$8^WW4-$NQxx޽{Lɓb?;88ܹÇm;r&9zhCCK.UVVo0@M~̙VI (ƶ%INNNůU8NFFR ݲe۷o6uͨ\.ӧ{JJJLL <((h̙G0yǏGpx֭cXϟP(^^^D 33 60;wTWWzxx̟?d...%%%ׯ_g2666?^ 2y)S޾}s8[[F544ܹsg!!!n_|>~׮]O<ٿސ!CfΜJ${vq׮]JPZ1B1=xHHȓ'OjjjƏ\߸qcСcǎ={,Dھ}VTTTuuqǎyB`vvv8V(jhh<X">~طo_sssTդH'N3&88?sǎI$RhhR|OOϺ:7ovy̘1vss#H"/^hСCΝo޼IڀBϝ;wކ ̙s햇pܹʕ+;O_}A5W^z 88X(>|+<ݚy'&&޿=p޸\V"(fp߲Pӱm2ŋ{{{tLVSSsɛ7os444VZ~l4}v0jԨ4NCP$5Ju 4gϞ]vU fԩSP6=rȦJ+޽(-!׮]o߾+WΜ9eiiimn޼J-^XԎwAi4Vvvի[;rаFq@T*mb^x8>ECC#,,֭[ïZh555{AO [[[.Vҥ˸qݻn:W@@@rrrFF*0t:]MMm٨&uV .br'L@|Weee͝;wƌ}"*8wDbbbQ9~DB9m6bUUU>|@yl={͚5\.W$yUT*Ph4ZDDQ***RRRՕcYA9{vvveeҳ]իW8~qXL& 4M靪D"D*f BBBVXQ΀N;v֧OiӦՅ)N4|UVoݮD˧vvv?!WKKΝ;~݃-Dd29++KfffVUU]XXxΝ;ϝ;wĉ~k[QGGdR(;zyymdS w.܈t-qDb"hϜ9Pc… W}ijjRkF,SH$Rݹ\\6xbKvb?zH&x:0|YYݻwb1Ӫf0 E-х@sM}uu6oL&^UUhUI3UTZTTD"|>zM]^z%y{{noVB/^ wqq177UÇ'MԿOOϡC^rx׮]Ut\MTEWWWG?_qEFFW4#CPPTnǎh͛{9k-JWL,wرn9M8D6: 4E|#rG&''CnذhPݵv xѢE(nvvvxxӧ^ꆇ_zUPڑD"QOaرl6[u{y<^|x>}R* m(F^tiۦ+//G-Z8'mѣGH$&yDuL&s+WTػwK2`G={T"Qw'SSSD]]JRD"A} Bd B?*F=L&0`ҙTSS#)mlllPޖV0TR 00 SVTTb555==6Oh[Go)(TTGա;R(={(!о:""B.^Z.}v'OT aꂂ"={ԤR4d* =zTVVw%Dq ŊӅ tuuwի~*3Rt޽{%HFFFAAAWսxbhP(/XpbիWOeeeΝڵkfĻ2 DaL[UUh\G񶩮Jt:HKKݻw3b 2[sd2fT-2trǛoݩϙ'TnV[[{ƌ.]JLLD PQt0 ka!FY"ZFRQbZ MCR1 C] h4L&ksM.A.((@ix0 O8AdH$BJ* SzӒ4 _۷orrPDaջ%h@'E?P(ԩӨQ\]] 0@1l߼*uuu0BQSS0PԾ}zzzg0Hhcƍ]v]p! @ vvv&MqǏQX{~R,۷:ujʕłƶmۈkCBBjkkJAfT*<}+Wb2L9׎dDVz2o b-7s[Fq1QKD}N|8##C Jd///uuub*R$77e0aɓSRR㏶ lGEEE۷oݻw޽###[L&oذ{6mR l޼H$uuuGşݻwB8*++d(=Uщx9###LFPF9tP1QQQd'?  @l7Z\D"ihh5q~,JCT# EuPCOє-NNNaDUNNΡCd2N:J+:uԷo߼[n). 䂈uUSSMJqaŰX,$z8xyyٳKG\]]?ՕH$^⢢"@" ~6meeELfaaRE KmB}bs,''ɉᴤx|G߿"55=WWWIDׯ_oeefX&&&/_TBLMMsss-6f۾}{ '94h>JΪZ=رcqqqKZj666, P ^VVàhݺu$nD" 0MNN޴iӄ |;Okמ;wnƌ$)77>_}^zGz$%%h4++F'))):uQ_~p8F" D߿||<1ɓ'2lѢE2Z|D!bJ$duuÇyL۽GnnOϩS.\ Ϟ=jEAN2E1z|4}5艐yII$³g*=Gׯ_֭$HFFF+V@ Q|ŋhh_.\(--׮];vb94؁>|'oJS{H.7N&lՅСClllk+( B*P]uo :t+zzz-HCCCU70`@pppHHHwS͗-[F4NRF]XX:)222={~UQQ3v~ϪUt-rJ//+W(^Gk&==SN]~]$>}USXXXhiil޽{O>uwb2nnnc2-܋@ ;vܹ3Zhjj:u6/qqq߿?QBSS_~666nښb(% |>?$$ߟNkjjΜ9ѱѣG˗,kԩ{NGGgРA]oU ;vhkko޼k׮hԩSAKKȑ#[limwՃwrrڸqѮ]Z%99vРA...hԩSєĉ-..VSS#3$$gΜ144 V9I___333"&HMMmҥtvvnڵkOoN&U\rNorJ??={ܻwOBJ"Qݚ߶m6nܨ|5kJN4iIIID >{{PT0͛gkk敪a e˖Ԭ[nÆ WV-ˇ 2dM3`0Ѥ*ҹs綡ݕTH$C׏BD"@c"%aՇ9syh4Y8aNN}||޽;ddd\tAjbZF9rdܹ@ h޽PPmڴ@4ofd)a;v@8 q+fj{ٶm&Ng*B,d2e;AGGfvm;98敗oݺ_ݲeX,RgϞ% K$[n-]t(#GƍZ;*--}W2Q(Ϝ9:6-J߯zTL&UGGG1G[P(ժ%KVZ%) 㵵7nP%D044D(uwuuh-RHaٳgwIbzmm{6mT=PSSu!W Y[[| E xp5Μ9ӥKcN<ðsΡq$WJϟ/Jϟ?O1pBΝe2٘1cjkkQ~ӦM&&&;v`9߽{9rU*ևqƎ;]`tׯ_722rqqa]1JX\]]MLLTjqqqBBy^N:Z>!!!yyyDd6ӧOhR{[nB0;;˗-44 rtRfEh'N|ӧO`0T]H$SSSg"ҩS';;;V^^棤AAAeeem gbbҭ[7MMM>iiiݹs^^^zzzW\c2>}JHHPl9,r9zN& bcczzz\.uHMMmF4Ġ}Byzz*~@sP5~xt䨘3F;uZ'$$$???!!A>DH:99ihhե5۷_h(ƦO>111>XXXp8 " *<O>uuuxj[[[x< R___PPٳFGRT.{֭F۰X={D 6|KpÇi(ǏݚrᄆZZZyd2YWWwqqq7nT=z033c2ӧOo޼AW0www[['N(&ym'@=RSS{ǯq޽?|Tі^"lhhHRAII˗/U/>pL& /ޞHҒKbg={433޽{ySwwwmmmLVYY^驩1$ [BDGG 0 )));;d$iȑ2LqҐ:ikkK$>1dذaB0>>iA 2DgϞn!0ШHJJB5bcc檙̀XMN2e…kPԴSN<N7445Z433;w\rrE>ب3/^P dFWt!))IiR]]ݾ}6:͛7D[[[gggkjj233y=㓕:S.NGTLիL&Rijjxx@D"رcI*",rnn.hܱc89 {쉊JNN{n``L7UU˗߻w/99֭[sΥh۷?_~yܹs>ؕ l322d}jjjfff>}vÇ٣XO>ѣZ&b>|LH$x<~)))Æ khhy@D(XK,2eJjjk8Gs~A>}BBBl˗y}Gd3Κ5kO>Jvڵk׽{:>DڰaSLLLqq1Ś2ei`` Gl޼ݻ߱cGhh7@T;X[l4hPzz B=\]]3F=| 6][[d2x555jjj7oޔX,r555_TK"*++l6711pnnnO2eJgMJJJ322{nmm՞={nA߿K !ĤW^nJOO_z;.] A߳gϲgIRX~b444C5559T*ݿ?FSVV622JHH!*..JF$|}}ꚒJ&<ȶmۢ =z422;w̛7 1}t<uֿm?)߿aUUUHHH9sfYrÇ?.]teeeelty󦼤Eŋ`ؼy3RTTܴihypIz;;;%%%=='NH$ g^pȑ#[n  dŊ`!n*z]d(++D"ёRiyy9kI*BѣZ>}zBBٳ)S644x<=I+H$PNpg0Gbq8SXX79@upssիWXXأG?~bddHyX˗_~=)))66ܹsh .uVbbݻwWXѦE"_~)yDӓ?x|/@ohhHLL-'::ZYYe# q8Fp~811>>>H4ϟ?K.Yg̘qĉk׮|__߄Onذ=‰'d2Y######edɼx[iGyǏokk6:,Y8߾}+d544^UUSԠAcǎ-))yאH$a IDATgΜ333 I&x߼pLU%ɓ'kkkꪪ -[VXX(^hx<@R]]A . Ugd,|D섄2s ;t萻<@"zsx<^AAގJ|^ 8ѫ_~%%%ʚ HkkgIdI0e@XȜ@ʕ+]]]AAeee]V0DYZZZf"IMM D" :Jȑ#1Dֆ (++ Q0 /ZJxlKK˖--Gjhh`6qbcc{=w\SSW^M6yqgĨ(mmmP[;\Xlgg}R]]h"wwǏ D"_h+))-X }̝;b-] OLLٳgڵ111V9)޸q# B%..ECBB/_>e EϟP/]tĉ3g744ܶm%%%;;7nt]2 D"a0`hjI"444 y_/_ZYY͛7oܸq GŠBLVQQ9r$h󋏏R¬nF׬Y>{,4pBTGvssSUUPjjjdd͛Du<==_x>8Ķu &ۗd4dÿ́% hhjjD777oD'z{{/ܹsZZZvvv>})Zg̘ѧO6]QQq颢d&Hy#'@s\j, eeekkϿͤ?>%%E$7DTQQ1x`#S =2DF$aIbD"ӧݛᔗ>}899J0KlD񭭭2׬ S  PٳgT*2 {{v֭[%ٳgȅB~"~qƉD˗/#*/N0… we ɕuwwOIIHlXXDcc+lgg6WW;!rرx<Ǐ:::]R1LZd2-,,~cǢ ' /_>}!CN)(@"t*,ĄH$"<@  gUPHHiT}PR"c` 6 ,iӦ9;; ¨ol0|W \'l}@v)/^3fLxxɐ#& Amݺz}qwwE^Ƚ0$IKK FG^eZ[[ekxWڗlCyKB10<}mܸqGMMM˗/DZd=0a URR Ht=u-[]z4-00ԩS>|pww?rȅ ;u&ׯ_ܹСCcǎr dk+++3226nh``Ljodalll?XQK&~ŋP"azxxŒ O111!;vH$3nB111 : fOpB*ZQQijj Pd'0zA2X|թST˫?@uqƍ=z̘1Ǐ0`@llB!2dp leeI&'0ᬭѩ6lDF?Dծ ࠥ@uUV=|PMMm޼y:::߿t3̤OzuAA ÙQQQMbu- 2HFFwl_^KKk !99yǎ .BQ(?yDCCk˖-***֭+))T!Qۉ@@;6aX܆Jkkk–X . E$JeA/3ge_ZZm 6-x4a *iiiCGHRe5TUU-ZtՄPd/HŊ ֈ HW\A# ""HFbT*}4Z y'}:8:>Iҗ/_J$_߸6sFNUc@KڡChӧOawYbEUUՎ;@% bBkkw dhh. %[nNFS)**xp=ʈDOJ6}mZ$9nii&8@2ɓ333 ,U|kb(J}}VE~UUU;d E"L ɓ7mڔ 0~nl0B!JIlmm݋H$7;wH$Dd*:f̘ϝ%˗/t*~ SPnǛ7o8nѢE#Hۯs^]]mjj*`0A dIq{9U.X۷o_%ڡB~^t0d2¢7(';1__LP_EFF*))}+CQQq̘1/^X~=(Cex<'_{ӧ'OW??]f.ky{{{xxٳÇ] O>:>|PWWD"!1t7Sf:u$6,==](dpIֵk MLh4Z'Dr3g> UUUd2Y:aÆݹsyz{{{fkjj\z4''wFBd2׬Y##!\L m'Ny&Sz򧻋ˢEЩ@ȳ@7*((xFSSSq{MUJ[D DBR㶴|_e˦RQQ-tre$ʕ+QUUmnn琑NoooJ722>}:A #G"""6ltRPmL0! (Nn?ɓN:_9s8,,,&&DH~px߿Qcmmm{4en)k a:1B`={M oKF:ޣG^ 2= BU'O%eGӛL!C"##A pP|HKAOd*d8eݻC~1\ήϟs &GYYŋ ȀH$uk-\pΜ9wi'N7oތ3:R=j޼y8hfi2dz#GEE #Fo>|xeUUU6n߾]XX D0c;>[pkk۷o3)(( Aڕd2ڵkm⢫{!^nCCRZ (44\2a„7o۷ƍYYY }:$$dJJJ k]!id2ׯg08NOOP ‰'7GeX.\ HD$eggߺu xyy_0 Jջ  H$Ԋ&AQ6Mnn,XǏ֭C:eʙ3gBCCRv`JuV3]t ˅ ߿xg6-"""@/0h4ʕ+<ӀIh3#(..^~ϊ+`by߾}Jnjjڽ{7˂}6((HIm̙7p8|NaD >{D5BH4 B˗/H$0 XUUU`@9Ndd$֭[¦N:wV pbcc pbPF$ 8s`b1ٿ?4}t<_[[vԩKmذs-))A5tZ^^>w܁jjjltźs`"^]fCUUիVs?}!@MMMDD+rss➑.: L߾}L&ohh)ann* AaaaHHHkk+z֭4h@ x=:,-:eAЍ7rssH$RuuuRRb޽YTT[ IDATzAUUUZ. _H7iҤe˖=Z__㕖^|ƍsHէ?zHWW֭[p111Dn>ڵY5g϶rܲ2Pz4##RiZZm_|9lBs ÿPXVVTՄggBMMF(--}A Bq8### BOzw6F o߾E{.\^OOB455緙waUUD244TTTJ و )PxYܑ#G \ ﳐH$OnnSJJ L&2JѡCܹcff$lvUWN>ellL"˗ILL oG&ЭMRfٲezzzD"*77W^a ׯ_rrrw@hmm?LKRRRhh(YFQ>~V"444{M]PP`aaAR%N?}tRR)NÇ0>8tPff D" å^rrr@ϟpraÆdFP>]~=//B| .{L&<{GJ'Ni)sΝ0j(--Ç#²BAwI"kmmb X*JPa҂]0 ͫn1  ð2"d ѵW|>n1aXII /2 .}p8x< fR)NoscJfPjs\>6P@{G+ 0`5P(Ɯ62Lq8\}}=h' O[> 0` 0` 0` 0` 0` 0` 0` 0` 8l > }2 NTn;@K§ ({0` 0`BCЯt #80` 0`ï B A~$mMܧw>dѣ- ~=?!! } -[k.lNE%$$8::,_8""b߾}T*{v0PRRzibbbJJǏ9"8~$д~IEje_XXjժZkPVV^vן?..^UAAA(lluCp?S*=z+zppU6BIIIIIY9ݻ̒T*2FFF>>>F8iiihwĉX {իN'"fff|>ĉ~sJ$.kJ##۷khht000#ٳoF:уNeYYYsNoۜ9sTUU) ӧOV`2v x׌rO>t"(%% [ĤR3gDK{T=zq_[[@ p86}3gS< 00kkΜ9z8#))ȑ# o߾q,--Y,ϝ;WkD۷v܄OJJdРA;w|-B1̍7Z[[ȳ*@?v옎NRRҹs>~;~N?3d"n9 ]]]޼yd2F",XУG={(++ܹsgɉN۷/66ɓ'͙3gӦMQgooPSSxԯ_?ccc L"R~2 ccoyOccIГ&JuuuCBBJJJ:>o˖-STTܸqcJJ ëVNKKCikkڵKII\~rnݪwZcAÇё6O<@kbbd2[[[޿GһwoSSSԔSXX~tРAgΜ!Ƀ pMMM24mܸq/_v&C32SoAi(]JԘj&^!Cwo]T"KĥRK KʒK 7Et:} E"pĢ">|&&&T*:99Y[[2KO>M mmÇߺu+** %7nuְaÞ?. ;>κu"""N: 󪞞8RiIIaZZĉ_+AQQÇۻpHkii\t999444,((@OOO&)RifffNNzꚖVZZ࠭-KKK4' yQw^<<7o &&&f244q_ĀFpAԦMv0law[p8==^zKYfxZZZ^*Ӈdr8W^M);;;5zh<?m4"ðH$~E>}XYYEEE}CSM""":RT>[˫}`-Xlݺu&&&L8G=ڱch_=~={:88\vMYY^II2Nϟ?O;"vvvd2VWW}W`qjjj 3f.&&O>C  ɓ'h +QFݾ}`jjڧO:.700Xj޽wޮ >dȐ .!88… &MBVΙ3g^0^~ԔF@ lܸf>| 5))IL&ب?Ǐ7n8H$^zm~iiiATQQtt:x̙ ÇHOUUվ}jjjHv1H tI^;::u|KKM6DrA--e˖yyy %IPP8SNӧOhh(;A 2ds~~>Bp;;;3̖:.|ĉq#˗/5j@;wx2ϟΝ[YYQTTfݻ',YRQQ1eʔ~cI B !Axwe$<4D%eB ZE %bUj^m?;z@366SWWWQQ)//o@ Lnnn>>>D"yxx\|YFYlP(voB3x\dggciiԩSLrf @TVV.++3fT*r:+ƅ l2L"0֌3x<… x|yyyll'FDK.E|,KIII ^^^***=z 4˗vvv ,ryyy]YR{.**B3Ç,`0bbb޼yd(TzlUwg0@Px hcŊ#Gd0B477rׯ_/8 Ё ŋ~~~, s"im3iҤg/F"ȜF2wvv~ Ƅ Ǝ{޽ÇD"˗ٳgȰ7n -*--ёf---Y(&K '45I:n7>X)PoMW7b:I~ƧZ,߬Ci>r>~Դm6Fߦ6~ܾ[MMm…BÇx<>00pرmFVVV>|>_F-..۷oG"QZǕ+WLRTTԫW/ HɎaD*KBt9ƒ㹻92 c޼yl6ŋGF9p@O0˗GEEe߾}VVV2Bpn^˃H$jhhȄ x<##Ύsgς'%3,(( H+VxXTX,tҥKtzddd||Çyxx;ٳg;wrL&3 ߿ ~~~Y[[/_Ef@ fΜpB//% VTTCo߾K5;wNFj6Y2lhhcTJ$7mtEP6[l tss}\{nܸ  XnPʕ+l6b 0_|˪ǎkjjZhQ_ϟ? V_qtt Lm۶͘1P&p|T N5766H$铣#H\Eqq1ckkrO>-Y۷o0 _d29 #G_fƍAbݩW^=xѣG@sϞ=C}A. ꓙ8:UUU $J{xpq8\‚D"ɟGGRĩrfz3gBpN#MXvvϯar3/(Qx,Yn&n.KD }}ҤI;D\xcU H4D(jz)Rn L+I0`近RH"l9PS/N}X'e \Uxkǭ܌$Ig7̯ . ð I|7, q8K`֭[UC H2̐թ@pȫ³v JACNɥ-["N67, ϟ?GmH$sH$2 ꌍAO0aѢEmz/^̘1ӧ1L^*8qBy IDATMM_')JR)")ʼy&O>jjjEX9>} {{766~?HxkmmmAwUHp_WW߿qʕhbT*gxx"##MH$Az633kll})ʯf̘fbݼy3++UUUǏׯ_5k hWY!Ȏ{ͨQh4{<L=(ݫnkk4ZDB nݺ%6_o#)TTA&iVqX#5hGݏ6@{AANAM4z*\``CqfXiӖ XZ x<^yo ;;;A&Qƍ :uj}}˙LSvV`E$7]B$kjjD9L:,55uƌCH& ,J/R( ( bcC&&E5F5l BQ޷|?Fe  yĝ;;s={P(ٳ'G677+9?,0 DKRթòeˮ]vȑ/^ qj̝;(o.2ydqwD(zJJW3w9riw"N;wN =cs;vgee9::JB7㏯f䖖HSTeeeP(cffԴ|rZXXأGmmmIǝh4ɞ?`06nح[Є`ذa}q333=pϞ=effV__qׇGQTAi3(8(UDu+**"""~Çlj\}%GH YP0T6l`rcF jzn4]E]:J_dӼyN ,Rb#º*+ftwK.Mh(-xPa{:2E]]2p=/}ٳge_Ə_UU蘛?~lggG>eF̑|>HLBvv|63`1 //Yf͜93(((00P(rss̤]QWWz$۔2 ĺpd"& 000iщfsb 2..._HuqXTTtɐp82Ƭ'O$֜95F;??ǒ^x_}Wt"^z)kbb"ɴM`ll~z*rJeXTTrppVeɍ/QyɔPWWWSSx SSS557oJ jjjoe!ݛAzjKZ>ߧOQ{{{---iɔϯq\Ԕbcc3p@TBR g΢8c aaICi@A(C{oh%i9@޷rOtd'@ Y3 u{/3)LʨjzDEE1#GJNϞ=ۼUPP}Kzzzjiieff+{y߯^ĉÅB!V#jkk?eSL+Ռ :>rH−X,NH`nn#4$$ ǎsqqG4pႹ%WMMM&?+IA,755X%Orrr>}W=1p)++ixt:]VQ(WWWw)iiiiIX޳g۷RZZZ111r 477XBUUUf~$cX"&TfUpU h"I3AX,L3"S&G}m aoo/SZSֻ.5kϟ?zhʔ)ۄuxx֚5ktyڌɹo>}5BΙ]:*!ĤYjjjdp\Xܭ[7BuuҥFʀ'ݻw'%%M6)((]ԩSŋY,1STBcV\\VZZ*]bذa^^^>$ʚhkk2Tbh ǎ333[v۷={f^<) ŋKJJFe&!,lňGUgoܭ[Eb**8XiX+c7Gfh-Ah(F"]Q"H'aPִ^Z@-,,0 3330ҒflhhhsMrssg̘QPP@Ol3hyͧOLaaa!!!ݻwUTTE/Anttt\|:yK,$GDD?{&%KKK---Hdeeaq~(JmmÇ;}̙|>?77qe7nwP( ɉ;{lj`ol2kkBCCÇ߼y_:|$ZZZ tgϞ'O›666v|reea^|yfDGG;vժUQQQijj>}#N8qBʪW^Kz ((JRS\=N쬯fE<֭[;BN{yyQԿFLLԩSݛبK {177Oxxu-[̲ѣG'N:ujnZZZ{q)i?\ooUVegg)?### z'''X,~ݻw%3X,NOO2dȒ%K$E%lذaݺu?[II Jֶ8rHLLLۙ?bŊ-[ܽ{WUUuԨQQQQҿ{7n5jaqEQbhnݺ7nڴ)..J(J9 Æ 9sWWW?uaT-((طo߷~ md6#d kkk%`3eGo(- *+7'm^ЪF,iiM^ryIQ A6>~TؘQ_Qʤ+"L-e[P7na#l'N @$//OR@  )))+((ضm[߾}w.811=j,}$%%}s jiiڻw˗/333===SRR]ns~;w$i&Xw\]# f?EQJ ( "W4 ( J>|!CJDAx feeV}655|,>MMM˖- :t(),,\jU[)))<#r<,PѣG:ȑ#'Ol3#vrfu҅ 6LUUٳ.\|kΜ9sѢE\UɓիW7 , bgϞ=vX???ۍ6mr ɫBD*((l&%%ʗh4???]]Ӌ|2++355M!ehh8dȐǏNgm8p@ZZZPPаaPɉ|(g(GK`LL̆ MZ]]}kғX,޷o_FFƤIƎKkjj=z$_UaÆ ljj,HL4MUUX  ='6Hԡϟ?>|---wg IԎz;5555s̙;wnSSSxxCh^\СCh4ڭ[$'766zСC}I>;YYY˖-o͛'***Ο?/9{٧OΜ9sܹ.X ''GI(._<88xȐ! ̙3UV-\pРA%%%۷%/A-[Fm!\f͚E['NػwoTT*q7ڱeJTZZ􍕞ΝK*++?^^^.¥QO,oݺ5333 `̘1b޽{ҞdػV۴ ZB - Lj[W ~cbDKvkP(}ݘ1c;f N 3IHHH * 4IHH>T|9~jj)Ә"< 33|ک!L$$$$|H>M.$$$$$$$$$$$$$$$_:ˁ ȇM FBBBBBBBBBBBBCt-pOLL !!!!!!!!!!!! dwv(( ' !xJU `,%+ )HAFBBB+ΧE8H5FFF%YKK֭[|r!o痖VPP@ O͛7KKKI!`2G.--Pp8...:::444deexB^ײWRR n"k||)L>ŋqqq"k}3>+ 07 m(V %4 p 0`(=z݅ v---+0;YoX᛫!Ff7v/oo (++OOϞ=gϞ :F!m )yވ6ӦaXwP6bmm`0\JppfƍE7oK!(((111))8:>E 䎠rL;Ʃ%._/uRbBf|πRE|nfR)TKukW8-+g>e t8:QAQx(޼yYe(ׯ|s^~~~~~~_JAtg˟q,<G;o8)]v[xmFSތ}N,nCA>z!y?Ԯ_"EZZڷ~>1!!!...99?t0=0 LoW&2&d'i=8a]sAc\X(1=DŤB d̅np#QǤ2ç],8A{tGM_>c߾}ϟ?1x`OOϻwʴ?>|͠A 0ydrhtUU_5==ӳ˗/OKK =`𸸸#GxyyI_Ο?O?hozvw޽{OzU# x7 \xgAM71:Q*LYge-"._ǿ:B|x(`zJz,Y߀3GLǃcر4E1|A[oa"p}zyڈ'F{ng=fFfպoٜVW7vkʁQ~]NNNNNNW^mԩS_;琝!!zz3fͲxd`QmQGW\8(NR:u4&Bn|-nP!hL8DdҴq>v!yɌz4>|ժU[``08N8hYo#@-m /3c41&c5&iVyyRBg7~ꉶOh D/4R;j^e[o՞E?^Pa1f]Fٵ={x#==xLv755vZ56685k899]z!$$dϟ'0\.[n CR¢咏@JJPSS#)(qOC}OG8}W_"鷤u{rx" )6 ே1p?**="%p~|@'ٯWw ;دA  O\r} Me-w>sB]A}ˢۀo}\xOڞmL9NC4V6xۣGO /->_qkd YiŘV v>eqM@Nn_b)))?58yc 0 3i (lgl3pHp%>IҰ~3 Tz׋y<_i?s刼^FKEkF~ӣSKRqߝ;!(Go|P@P֡V\I턊D1?_?,] 0 EbcpNL&#ݓB?~̙380wvEEFFʻƸzxx^֭[?~<,,lɷnݪ#>ؘ`455) ]w''R2gͿA@q/(@l.1pP(q6h >qpsdԑ# P [y&A^*: ,>L2-^}_40P2T!C>s+Vg'5G)9bllnݺ;w>\rk׮]ׯ_hC sΝ;wN<)3+yzz߿?666::z۶mvvv4ߧO3g999]x֭[t:ܹsWTTzۇ;6yĸnjnP,$G|!dBo4wI c7D.555/\f(yfkkkQݾ}[Zojjo߾׫{OII!2QF۷/***>>… K.USkdllzΝK.ɜ3f޽l6{Сqqqw܉_v-ip" ~pni4)3;xuUu/c /q1 P Di4I c7&^_JVhiiaVVVWpvvNJJ222 ]d ٸq;wBCCǏ'$$$%%M2E:VVV111ǏݳgOtt۷7mdhh(ݻwtҞ={x"T# P݁ wE6mZFFիWƺ5J}w.]ܿ)SVy.\xҥ/Ξ=[EEvcƌ9{l\\ܙ3gFaXki~3&5bP0| JD?S-<+ lܚUF)B|gRRRaa_ehhhmmv D"HCCxٻwoKr:8e.zƍ 6HIJ%***66ܹsk׮Yڸѿ{^d:nHHHTTԭ[֯_. 1@LG酵!ĘX:PT&de@:^ӚHWWzF@,@k[<aARPP0R6*i(-Z4zׯS(^z%%%Y޽1}DNPVV&Ideey憆3gδXZZ ˉ޽{bAѨ(:ާO;v_ңGGN41+\2>>^sOOOHUUb8;t(`@GEFMt4t#* C-BBWQR^$=+պeeeWWW___9(Ι3gڴiՌJڵ+44p,***LMMFFF---O>%VtpFCիWDnnn4ƍ⋁?y:( R߰?ha͢?/*y1g ʳ;u+'HS|4ptAGʌN+⚚ŋRÇ=xرcӧOOKKtrvvvG&544=:---&&FWWwذa۷o_xqII+IcjjHӵnDhX,߿DDDDDԩS----[&i ! >x𠮮>a֭ H.\D</44/_ (>x@}չGD666W677߻wdL0aȑjjjp EE?C,_zNQQڵk2]II‚bw6IHHHHH*ڎ3ߚ5k^FG鸕/_VVV$%%Q}i޽=zz'Ϯ---}}}WZuΝXԴq'O&fDAvرu˗/V0]v!r麺:kk{[ M e"Rp`Jn{WPU "(E^s]:tNPRsPB&[}jJBȯF=swke`0})--]f: dcccMfmmACC#!!fkkzL∌7?????F111qFFF3g ~:qڵk!!!˗/&Hb͛?Ĕ[[[ؤIVTT~z@PSSz/=tu̸CA(tŒƒ= f\==:mn:wFVv͂揱R +߀'Nسg(\?\2--TOOpsrrȰ͵rŋsxA,6LIIIbx0p@DFRgرw~zwwׯN6tuEW+=KJ&L"#T(L"5`dHcҦ_3=7(\9-=g\ ɿ``E ի0iAI{n--755۷0GGG'''#++ |رc۶amnݺEijj tuu=w֮ 0(ghhvM RZ7s xL$]+++ cǎIt:F:eBRPPر#;; *L9'⥗wM<1vOEEF^# 09t ] d]_R5pCG,q ߊm0dƌOV͚wlBS$!66AQFY,!$lll[ZZlmmr2i8bb)((0p8peIGcU?1l:0y :͠2('IO.z`TSchɞ='ea~UܳDy*ĥKƍۯ_!C>}Z[[{ٲeʝFP4??***p0N:wz$&?=zTw]2(W)e`@H G|TUUxFt_޽{`899(F,8. m%899ikkK:0zw/}2 .B3d06WKSB,ZYYù{LAQQ"m;v,WTT$F400555##zӧOS/x4!3u,DעۍǭgR'ƞֱ~;I#0 /u]JGNyi5SPT*;<~$h8:?~D }k%dɒdJBnnnqqqϞ=uuurss%) !!ٳǏwqqIHHHMMMJJlJ$KKK:~aydK&n"x<1Kϖ6U:5oG>^<M\sTƝl&en}U RRyy9˵I&ikkHVV֠A=jiiYUU%}c(2 >goEL*J "824 D񶻍'DهflH [ccb z葚ډP(xbp N Huuq/[l FgNxh2{r@f/.??[}{5__7`O < 1Q1E.nO*jՆ 0{KemwFPf(oM ٯnn&*&f)NVXѣGٳg$&&M gϞ_Ο?o```ggJ zСC|||JJJ֬YSTT_bg"QľE!oSS#,?St5pi?s頧O_k((u68\|y3.0P6iKp}SFlȈX lniir?㣮r--7n\bbѣGKKKy<׊+]RCP8VeZ5 Ui4 1 C ].ԴԈĢםJtW龼n6(qOmH:˭[.\hjj){b!rt _t{r~9 @h*cbb<<wPВG;nWM-I]zcw}ۚeg98::+3o6Tir#222|}},X 4..o߾DboXիC 2dΝ;vݫPVVx՚|B}< Z11qq1O;+uד'g}+eeeMPJbhiiۗab\\\X,yf'Nzꔔ/^TVV'zyUyt ]-p4*+*9%JqD<e`vv1 Mt_?mH:-qP+44|.DRf%@c1``#F0?*7[IӃ8,5mMM DrJPF8-rjjjUUU2MUUq&)}bZ@Ɵ+k,pvBi};6Us˛++@ LqEՏedDEx"^AM͖^xP8dUӦOtɒEee%1]^g~WI;?ԩSƍ_`_s΍']ze 7o&KtWUUH\2EQQ)׬Y3bĈD'' X']eF\yy91[ZZD"|>]_2A+||r7 D檽{BT͜Wȭ֪ԥt*g/apwpE);v?[[-9 Χ!111ݺuIimm, 166677OOOlfood2 Gnp/))pׯ|zڎam=ke)/p:47zFmfyf#QF4O?e =Wg5+_. +z"(߉n݆I.$̰"(0y /] ޘQH'Kv-|H$222a2mVo%HJJᅤBa~#\.7//'^ t ]j?mt7r?pys~e}Bz|wޒg/mQZhQ`` 0pٳg#QVV>x͛uI"XiZ r g%3?k @WYF_?V!J?c?Q#cc*JWPc|k{?㏽{& k W?G΁ |`8}R.v֬Y#1=#2y'&''%;,,;'aLC3!t0jTx60F~'J`MdOB777=(Hт۸ )JWyyzSUӘy *1ϝ;W,777+++ /^uˤ///Q%?N744V^-A}+W;vd>yd޼yĩ~i ,P("H HR(ɢT||y7^JS"H 'ax+k Mqg4VGU'%{W ~k`i0̐;P4i a͘1cȑ(m۶}DGBQT$=|pՒkk9s,XPnnn.n9n89X,~'3.Z(44tڴi'V|>_n N:eaa`0N8(RF|o|Q"l@3[+V{gh# ~KH4Oē~7$ [\̿1PRPAT_3K2MMMԈ’6i3g۷O攲-Qðwee\.ӧ2ΨT>ͥ,77ཽ/_  pٖ]]]//wJ w1Ν; 0C}KҖ:^] XҲ*J-I!eQY} ZjXTQm(mz`m;z\tB{y4( #Dfd+?P(ݻwqqk"<<ُvuu0wޕ~L&s̘1\.ŋSSSooo=z wNjDk׮Irϙ30RlE{`޽̈ﹹ?ѷlllgWv44GXh0QnEE(Q6Z6݆> &YT~)RUSkn$"&CuNx%%%iiiӭ[7b=~OGԴ# 󢧧'O p² HiiittP(񩪪u***cƌɑs8__߆_uP@ж  5@79@sh` |LMMi4ZEEEbbwtt4!bX,>=1dӳSUU ?...nۻwo"YJJ w#FwRRbd?Rò EvrҎn8UuFZ^Խ]tJ6#f:4S5{bPKJnnnϟ?o޿){={dX555iii55omcƌinn&TTT8޿uurB]CYMM?x`РA"(66hoeeNWG NNN4<77W)<~8##ӓF ?BߡF_ICOIEe Ă[^5jekBե'=KwPb(=W 칻}KāaJ,*KUei%a@ NNg]RW}s&~Soޣ,GWrb;[D3fС_{0p}קG9 b"|L?skT\L$$$$$_<_D @4\IH "SÞj[T;b񝊊W\|䈑˗ݻB_OcJJʝ;w?LOF``۷]]]?77woK`B޹sgTTԝ;w.]4l0|Y Ҷld2?ŗ.]EgL&sϟuցhG@ ?{5lo*bAlk'6$64F%c%{o(A*Mz݅-;d)KDHdvvvwf̽g=dVTT0999AAAڞ=zPT;QWW}FFF իW?X㹹5iD('''?y݊elvNNNdd\.g[hQQQKzyy:uDb``EzjѢE\.wԩ_C@@*@λn =@@@607T3ݷoܐwμ+er9Bvz5b" sr.$^*j@GLwn*1E)l^澴е6UּKU$/|w3ፐ?R>\RR-4GGGwwׯ]VVV\n cH###W& V][H$r<##ɓ'j祼cl ,x{{\r}mmm}ȑ '''.#o#ccVZ삂ZElȑ'O|r||<Dx&+H$ϟ?AcLLLjuFFFtt4*f;wlgg|KAA5.,J(VTT( ,(~\.>yyyxss 6|Z]^^~իW+t}醆BPTr8G} *T]v5k!er۷3f(..:Y .,++344>}G>Utkmmi&JKKoݺ#Fr_N,V0 @Thv: ]qh @%/@F7);; WWI&X, dطo(ᷯ7,x]sz7eU"_qeK]׸BvY;hZn믿?~`nksiٲÇష2e@ `.TUUUݫ jժUhhFC lذiӦ)ʊG-]>((ٳg ֭֩Sj p̜9W** JìW?t*))2eJNNƦO>ݺu+i=eD1cƘ2E򢢢7n?|r .pd2Y||ҥK <׷k׮Mb%$$ܺuల p8JRPڵѣ58vlذAWWwժU7odXݻСC/zm޼޽{`bbާO .r޽ &M:t5k̙3f Μ9z^znݺ// ?+cq<o}`SUm z|`  :Ff{{{/^8+++##bedd;eʔot.u1㿍Nl71(e_b2bv[|j;;w">tqxb]xyp7Of("'FM8ٱ'X^zŬn!ڤI\}񷰽RԩӺu^xQ̔)S2335>H$oM4ؿ7o,,,OK˻.]4..N[[[3EIII-[~Xof۷oocǎK. ...I>8 SQQѠA{,,,6oޜ_cZZZ$>|ٳg3fǎd#JMF(Y[zu&MBBB}ZPTfnnn'%%%66 neeEYDGGO"ŋ6_ӦMkk={ܼyM6^|ܿڵ맟~233kg\㕗g},,, 󭬬BQTjjCttK}b<777>>l YRRr FRiLMMjuZZZttFȨUV&&&<8111..ݾP(ꫯRRR߿w@{;*,h ڐ>EN} -@i`[Cwk 7::::SNvھ}j&dw3վ}{mm툈}Ruubqdddzz:AhT۷o2ӲeK77}5iU*=y$%%w122W``.;71T)>>_^Bqw+ΖW\R**j`fO8uQbkk۲eKmm+ ___6-Ξ=K\兇ؐ)))<`nYfNNNZZZIII5֑,,,l۷o߿_cI,/!!1ԑǏ??)jԨQZԶm#F_-[xi7nXv-Y?_ɐa>_QQ@lR|Çkl6oAGGGP%'''&&үT*tbiib222ݻPp8nnn</77Ç՛$??ƍmѢ۷Y*,Xpĉoذ6rZغuVZx?1bę3gmVF/_pBrda;jiibJeii9n8Jr谵ω'd2*.. evŤYYYQQQ՟XZZiF*d/_>{oյkWSSӐƼ?$ҥQ````t/ӧOՕ!GJÛ7oeFBBBBB &v6mtuuMMMΟ?_=lٲ]J$LAC^ёtMQ(YYY/>SN3f6lXc>vvvr\Np…u։D"ٹ*++AUUUż')JZMKJJR).饧ݛ(f@CMT$UUUm$6MQA)"Q-fiٲeHo%KqMnݺU(xR?yTTT,KRuЁ(@3:aff6u .]M6dDZZ3㡑ц 9(UV1[}1c\.?W% *++ϝ;LDҳgϟ700=ѩ4 4/_+|IwΝ;wÇkL限@Z&&&k֬J+e`` 4|[4Hc圜FBr\- ,K*Vz^wͺ?jҤH$'#G1"%%iӦ,ӧ8rH54RжmsΑ'$,Ã'ӧO۷oGFFW߈T*]dZ4iׯ[|9=h6==s][[͛72ի[RR$5Pha-6Q@@wt36@:lیl1(ԏBam ,--;]VVv6(T*5k UV>>>^^^?.?>7nȑkjZ&۷5iӦݾ}|Y6lPcNT:88L<ȑ#!!!UUU[ȠW۷+JTϛ7/555**:[@@@u ۜw IDAToVTT0Ip8qikkO8QOOG(ݻkkk߿_qƙ-^bM 1Tׯgه:uTYY͛Ϟ= #_i̘1ӦM5j=dfO6ӧ˗/[QQؽ{W^3&33YgϞ.\,[9((txiӦͪU,X0{lLX$_hĉ/_dK.0`)++Ȩۧ(*33: CmQwwW^ynZ.ߺuٳVQQ5BSNۼnZjUX ={ׯ͙VT3g|{…fZbո-[r\(.['11Q{yyyii)gςsVf̘ѠwUTT\vm۵kD{eSBa޽(nܸq)tV|~|||W0};w, {{._A?{޼yuÇ'O6mFViӦ8ڭQT>>>O>MJJp8:u7n\ee%3iÙ7o^޽Ba~~+W~lcؘ~^q JQVVx#GK.}. \.)fSc<vatsεhѢfff#Ɏ9B%99yH׾wٳ.@T9Ѓ] ~,,9!Njx+>}.??_TvmժU$ t}O$@L>~XPik ӷ~Wvvvj$Zk,#(-rZVUT+EQ5^P)zW88;^H 8-r1[=s }%ύDһw/^ے;w:::?8ב<888??_*jTV9>s,qHիb|}}uuuoNZ?cJ;|sW͛GTVV2Y偁:P(~'wwN:Yf[lqĮ]Fנ(Jfkn,p4BYYY$ƍt JUUUehhH07X\\%ԩݞ={Q1I_brrr6mj``ЪU+f!Lsx<իN}-5668qa6-H4Ra74GZ&USRcǎ%)22292lذJfL[RRxΝ1bڵ0o޼o߾7'r/^xҙsĈ-(##c .߿LL5422\n]dgg5ss5kXYY3G |g 4;* -% bc;B  `whDVGFFt9[(J# `1l69qNEBY>.*,f_ uRR5ruEcZRWXE?k*N@$D"sss򂂂"`֑q֑lu3v=ݻ9y<޸qH*E3 wؑT3> 2D믿>}zUUUEEZfX:::EbXeee}CfEQFwLnIj\pvzҥ:uZbxs8zu:AjܹK 7YK,5mڔ~cv- N<ԛ-==EjjjjjP(lhm۶֭ 1^7ocZɗo>Y],4n6bRǗJVsӧOWO-!~Fu$???2lРA<(T*'OІnsԨQ͛tMh֬ݻwǍGR ---kkɓ')'' RAcjӦͷ~{[fbս! BPlذ!::znԷU^^YYqN4III͛7gM(O҇ޣ엗ϟ?hT_gΜE6m<~XZZlܸD7xfͺvZmjuqq1\)=Ȉ8BZR˳g.400c$jB!s2/Y֭cbb~X*H E.X\ۻlllH :4//͛m۶}\./**JHHpqq7%%寿ZxիW fhhXh||iF֖wܡaY[[O<_[5"߃9_   @ ;gҲ)e -[2ˋ#~yä@OkQ!CtES+5A*a eL.geeuܹu?Ց %IǎL2~ & 8P M>ӳAuDEEEtݗ066H$]v4i#GjiiYYYM<ۛd8KKK*;;[*QuҥBسgeRHw iii|>_'J=4u#s{{{e>3ƍ"M6q?RzJ,7o޼2334f2p8ݻڵ5k XZZ|Ic2@vvvjjjvN2O75Z2,66V*ٓ.nnntRy{{tttzzY ^hii7M6ױJ+W,-- !X,H$2ѣQ|||<&;v 1cF+;.\X[U==aÆ]p=s,D"擇2oJRIUٳgJٳMX,HD%5 $ ]TXGS9;vlΝ?H(ha` P7z0# Sz<P(i>8gF"b5k֬Cr}]aʔ)VVVpV^N V@ld8,* lmjP=@Vp*obr.\/BYYݻw[hE}\6#8pSN:ur8::]v}6qXX0v1?k׮YYY:tXdIee%|ɒ%zzzG|vBxL&[`]!UO\vwwe^$?~<|pkkk x/JmN:_յuꔣ}Wի>5&&&66W^;v${b50\8qݛΩLaiiiXTT#%H$ݺuo}3]]=zܽ{lbx푑cǎx)++KPW'---ZPEJ$wΝ;]zΞ={ ̙#Ȧ\ƝKZZbl6s8\Vj <==-ZXPP`iif7oNfVTZ '??Y-))پ}ŋ^\\,H,--IYбcǹsfddׯ&M{zzt1~ 3\wJJ5ffffff2iӦB066޸q#=z4= z t}޼y׮]/6QKK޾zŽ?.>>OWg֬Y^"N}fΜ o:T` 0U p 83" &axG899\2"""33SR5iחzt?usss ԭ(bXIII wpÇhbܹlQ.#ھ.|ݷi_W3[7(5944f%sgc"y- Y-@V{~L)_0Bq!{{UVp\ccm޽TݘubXlmm]cݽՑȃnC===\.nb5mt̘1۽{JKKR9~_ڶm~m߾Çr\*6o… dÇ^tIP899kNYYٞ={㏐lPhnn. /^\j+Vزe˭[ E"E 22244t"(!!A*=@+++Hm۶/#_@֭9F r޽˗/IIIVVV}vs5k֬_~Æ n"Eʊ/L||Ν;OqKRBfre۲eiZhHQSHH\KRoJt˨1655 F`oo_RRҽ{w9Q8c ;;d׺ukww{Y|}} pÙm8ޞ\4s* ČIi$V^M͞={֬Y(V<o̘1;w(p8'LwYt)i߸q˗|󍯯/M6UAIIIEEEߧ7i$RYXXjL)_[**ʌ={>}z6'Ot޽{1`bbb`` H%lÇIu֞?3ŋ~GJuO~Rݻ0`mmm222vIѰm۶2>}1C=yd̘1wknnn\\3L``ib҂*@ X~=i8 1bD%%%G^==zDԔ @BM;T:HRvFvXmqJ07xGkX,X,>ILLwNHvvǏ;֠I\D"!m %H莸 , 5[RE! 5fAR*>>>ςҬ.sdl;4si{Xņ?cqJ?w x=Wل au^~.F7?t{@!B!gsp  _Z6ޜB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!رp jT*qW4)..~p\mmRR1H$DER(eeeiiibRJ B!jtX, iժӧO#""po4ލ7={vbbb\\\\\\||Ν;E".]} jj}(-ZHLL$g rB!T.,X}O!-cǮ[.//KKKG+:EQeee@W[߿u޽~^666=zr;;;D;v 6lY,ۇq~ݻy<ս{|ٳICÀ,YfBrʋ/HĉGٳ={m:::Ǐo}wMݩSr:>&O\TTtO;޽{Y?kJr|^bhhT*ݛ\ۻpӦMVVVcƌřn ݻŋ3g$~ׂz#"hĉOo߾zooo//]vy{{{xxxw^xQA5k֌߿7fcc㤤:OpA """bbbrFFF ŋo>>>M47nX,~mLLLxx8WCurr(JV7oh|ϟ+Vl6-^ (bX?Sm_x-ZǏ &MڪT+W/x3̌|9/]Tj$4Ywb̙M4yٳg#rf޸q߿sl6Ç111^" :t޼y ޽jڴiYYYTTTxx] v\QQѵkFRׯCf]]]WQQaÆ.]sի5QFWw0rf͚?~<##^ѯ_;wfDDN:ʀR`j2U"ݻ˗#GtrrR(*dnn>`s娨(ѣ+++㏜}vcccOF!BԴT)ڰaY~YϓܠF755(666666d6id_!fyyyEYgҥ:ǎcɟr->냵e˖s9;;K"""/^}!!!'zҥK i&LqF5 ,8sLDD˗w5z:lIC՘ "(((::ٍY"l۶Ν;4[[3gg;ս{;w޸q#<<ĉ+WlٲG]dt+HR @XXEQ'O'g.Ô+W(*77 7oHYST# Ocok>|LG8TF<oΝootW\ٿ?sgϞ@br0dȐz^X|UK!~1^ښ<;;/i'oo(B!T*4iR[o֭[=wޥ(*$$D(N>WƏIIIE]S?R (e˖tU^ɓ'E}G.]?N۱c`Upt֭[SL 2֭[&L dmmmϞ=w^ W\ Ј}>|SN2dȄ ֬YwO;]NX￟9sL<9""$znܸqգun 1bĈ#̙믿0H]ׯ'СCAɿ i%$$5/_zCXXY!99~͛7Ϟ=#3|||bŊϟ'Ŋ(Vb6Acccȟ$4i҄t@;{[J%io߾э'N-ő`%EQgϦFrC6EEEEm۶=zD,H0.q777777P˝6mڹsnܸAYvF,իgΜ!) ^z… .?~Rj6l0>{UVk*'.\@+ :Qjjj\\˗/ɟ C8|m3Oz===ꢪ$RRRy_{ڵgֽ{7oL^zE$}O$;wtcdP9<<%%yUr&NH~ E={R@094JAlܹsɻd#-Ϩ/^ЇX $$ܹsZUUBv :)r|Q͛pKD"!͛od!B5#vAV$i8ju3A4Ϟ=D,===T>}+WHBc$˚5kH6///:q+Vرפɏ? u?1n2ݏ=z%ҥKx<?^ 0a•+W<<<4{xx\zu̘1>h۶K(].\ցiӦ={iGY,X,t!!E I &Yc\\\fΜibb״iSDaNKD]]]4iҳgO͛ڵkG:trt?iii$&&\":˖-#-mۊD"um,,,w4hyo>=== mt08HS]v&&& 5g+W2SԶ{uX,H$Gh88i^p\`-,,D"H$:9^58԰atuuLMM u/^ܱcGrˆD"v)..&M>TnwwwA;iQ p֭[\P(422vEQs Ύ^ܽd^t>zܧn&&& jhhH/lROOO"lܸ|޽{3-Z O>(۷?T߾}+**Jw}' B)IIIPnYG(J$۷RCCt˗>~JSHrz҅zW_}EV޿6m,dAa !Bu.ŇZhQ߾}膊VIgφ F%=z ۵kgoofJenn.igeei8KػwoRGBAJz|I"߿XUVi̼uV''5k8pOD"__ߜHr9 s*:n ?~|ԩaÆMz4 $<5jX,sٸD"7o@LLL||D"!!))޾CrJ`K# mժs4ZV5=Vc޽6m $s\.!]Ț"L 1k֬9t萝innF`ѣGd+2IQQт RRR藪OT%Ͱ2ڨT*rF{@.׸rm :v\#Ə?h``@<ɓ'^^^\.wZnA*˗Jb;{loVI _(ZZZ>y^`ƌIIIӧO7h~ʕKOOuC5 @EI)8|p\\o~w'OYp!Ν;?N} DBB;w&ǧs~Gy= z|>$Zxm۶"PXX_iӆdggk:NuH>}:'=UJJ}||fϞMcmۖt-~ D"?E!8:th#Fq8qiiܹs333IH GHDiiiI$#Fx޴~~h֭ @" KʈΈ֋JYӀvRZ@Q8u>S*_vttq(X,ֆ C7oVVVj -" r U*j@y󦧧ٳN`0BBBzۿDK hBW&h22)?D˔H$)))|WGGG&"֒ J ?nrΝLWW9ro߾T,++C7`0e׹sg/]Ļ= /]P"fݺur2buttA=Lf֭ X7olٲb͜9=ŋȹRA%PQQqggg°=z4NOOnTw޽ N<?dUVi[޽ó$I`Ĉ555d5Rinnn|||XX͛71cƼsrkWWW/{'OrbqHHn믆|ѻ=S>4@{ ɬYzu3NՐH$HQFV#tNyBltdW\龾D__N={y斊 u'M}JJJf̘Af͚UTT'M2EC9yF&h4]]]uT/d1| P(6mZKKS,BpaÆpr&aaaG ̙3`ggtRBqĉl60 X+!%[ۤhBD"dh bqUU߿8 D1222^zvv<j6T*L_^^`0VXd%_JUUU#FP;DFFK.---]d bccPѽdF՛?͛WXX8{#G!]!]FF6˗yѱ[Y%H֖;v v3KPhgg?vujZP$G۷o޽͛}V ݻ BOO) ?u|n#$X-ŚEM}/1 򈪩Дi߾}XOO=pELFC'Oף}mʴ(ă022Ҕ}bkx ~z;;;M]j ҕbJ8xKvo:oE,0jz ___-ϟOr8޽{7:7&9f׫y!p>GU`0 _%'/2fΜւhA,-Vk׮ׯov%--ի:uz[n~NvHfРAFܹVTKPPP0gΜ|Cƍ lUh4Z@@۹sgS̘1… E}@@G>UTZVV| /^xRyL&{.!5HHH044!4?,]vdJǎ N$䭠vΝ{ERCBB$ۑ6={0>>:t@@oܸAv˗/;bm۶-22޽{FFFݺu?~JmڴqqqQTȻ$jժgϞ,K  3=BhƍHQ%228pL& HL@zd2)ʝ3 IDAT;w***RRR}||>}z隚N:umUVV"='tԅSLMMQpS@\}v6W|_tL& W "...xqǎ feeu-֭[NBaKuOԊWTvԉ(˗/榦VVV*Jggg$iL&{򥍍M>}-[v:thϞ=SSS xN-H;vlsܹ{tuu;tн{ׯĨ?~|o߾|RtrrrwwhMy,jd&F8pmݾ};5-y;wQKLL,))iJpBa3~=0 `,,,  ƞ={P<ED.fjab`WNR:tdff=EP;% BD .$$ҴmۖHst)AovYǏ?r;ӻ}Z@CuPHtT*044| Þ;wNU LĘDR(jZMMfj9xCD -%>>^"=K(" mm rJ+++ qW4A!<@Mpa[UUU M=Q.˗#{%rT*DA02uTUpppiiZVhRk}-))iBA޽5p8LCCôiӐŸqrZ_uuu%sI˜4k qj]߼yַD-u kF+'AMP`0 ].oL~777SPPCyyy3*ԴPkpd[ر2,##]D}1cY]]]nnݻ ކϟSԪ*"5kg2YfYYYFEE;vâϙϓkؕyyy|ԩSOÇ 066dIII֭rP(DUWW򎑨nH֒BXx˗/cbbLMMb7N8h" JPdgggBAr功lllTjII DnT*Ԋ&66˫SN&&&rklrN D"Q=ƍLfMkkksrrd2Ei+++kĈNNNbҥKiiijnG!''{Ȑ!۷hׯ_sj{.6Ԩ={N2%00N rBO.5Pqh.Wñmݺ%9+Fv544_\SSS;;֭[Cf `0Y(0G7U*O<9v. ݻB8sa1 `0 `0 `0 `0 `0_4OMMyݻѣx?gtttكym`0 `8MݐJBP-#QN𰱱/^ܾ}7F󳴴H$OQA|󍵵5|>煅JUzϞ=MMM5׷ `aaѯ_? ECCCIIIff&} 9u[R^j LLLufbb"HDWW+JѣG6mN<|`㫂d.Xӓ)ʆ[n-ZW92mfggb(JCCwޯ8zhccc&KJJ/^ӧO000P*t:… 7n$' 9s>Ns),,T˭m۶˖-377qw͛iii-p0u6n8 B4E"Q^^5y@===B߼y˗ϙ3ɓwy7F[p@ HOO\0?~T*U"šUM<Ąf(Ͽxۉ*}]HHJS]]s .t]vZSNر\cǎU* X/bGKH+WhSNmihɨQx<H$z3N9rdXX!ڜ]r~# 2D"QVV͛۴iaÆ~RoAPz衫f)L& k֬aƍd J* @PQQf3˥h:u.))btm*BHRLb%&&"ENd2Y9NAAP(VaggpBKKK:T*bqEEԩS߼yҰaÆu޽@S8jԨA773gx<:P(b@ y]v.] p… {=}tv2۷oRRRllRMIIIϟhC A qcccˎ;'LTg$$$l۶h==CjGطo_Ԣ㓓N&JKK5k0Z_<޽{j*>>߁={&&&iƏ2k,Ԋ.\j*" ۽{ٳg}||Ш2{7ozxxt8իWRRҁ9/4… *y4So~Gs`2C j~Q޵kױcz{{ ÇE|$G3CxxxLL۴iC=ztFF:RT+V \gppppvv9|0͛7~z̘1d0/::zС_ŋ#Wڵ itiT*X,4hPLLL~VcvÛ7o>󃃃4;w%2mڴ;vتU72=z]p5,,4_o޼Dr-Uׯ__ZZLJJzFkժY01o޼G.ZDx,X JgΜKͻH#UcǎkBCC{꥙Ozzz\\џk׮eXdRܰa8`ggר'<N[iӦϨ_~E,7 {wu+hOO^ZYY7&&&22Mnlllǎр95F[tL&[b닋 Eii#GEJ섟|-Z$]Us8?ɓ 5C'SSy)@ǎ E^^X,]mmm ,Yb={cu???XLvPWW#!l)&mAAAO>mtk̜9^__d9)'.&''{yyݑ:~<8$$s? k3gL&JݏT+ `ڴiG~g8 ƍ k֬QѢE233l$\kwv̙3ޟ'r&) SRRM23UREݻw-[GA8qmJWW}2JT*U;kxeO| 2b޼yljj6=y򤶶6009ST< {m&1Xҝ;w_>yϿa:ܹsU*՜9szx5ׯ_޽CCC333ΝKVYr%;x`>}"##wє9wΝٳg㑞?T*Ǎi& m|||Nyйs{\64EĄd9,,..f2F<o} ʊ!WGV***[DTZYYH\a0!(((((hݺucǎz'q`0ʊ*++S*/f̘ajjk׮|466vrr:z ΝKh EZJOOo˖-4SQYY6onPu*Xܶm[b͛7M MLLZn=a„ؽ{e{ҥK[jbz5xӧO7Dk:H$j/͉^cccw̙smٲ}`kxzz7L* xU}}}MM~ 9UP~T'7o444eآy3999fffr۶m#T( 5??O촛Bs\5X[[;88ܿ_P;wk׮zzz}lll̙#FѳgO??irAF={H{G(>xBIx IDATO,F$ݿ)664#ϢRfffMPOhVVVbCuVCr㢦يF3[[[@ R9mTqTUU%ȞB"\vMR}56q })A__?!!Ν;m<==џ:::}! ֭k׮ĉ322ԧO-[(Yyy+kҥ !""8T<}KXX%1*]~wgT"\UTjc kԶC555t:d2.]s vrtt9r$ PTPH>iT*PP(III_s999 4Ą| aaaěPTZDh+p_@{xx 4h#- VVV}[x11hCБӧOwڥa@RyРӭ[իW>}zڵb8/աCRyFhSK,%MGjkk) T*Q?=p@jjjAAPf̘霒ʕ+۷o&O6mJׯ%oڴizzz~~~4m3[T*(jJJʤIvڼkw &&N/Xٽ{wVƌs)$Eqg̓d֭JOOAfff*i*8Thon#߯3a„}^zwUӇRT<މ}!y'/|}}---E```AAzzz2'O4DOoggx└իW-k+++LH8h4ZSij[ $3ޯUAQ{] RWWG?\(|h4JRk訍|VT*iRSS޾}O)X`A֭'OLT*UֈsB[9δiӮ_u-Ds!BAײ0=?vΝ;M#T_ J~- /77Wm吕M%A2U8+ *pLLLnܸqOoE͛5k=z4**jذaᥥW&["Ott4!P(j\d2Y^뇼):th޽:t H4%Tg[ybXwD:u֭[E"ZdeeYZZ~TRYYD"Ti`09B$ Kc0<OS(^]]i4[C4T*yfSG077W;~5 A rjde%haj|"sP6!Y.% 8`0\ ]WUUTOi4{lM6=}Tj CQ|ĉ\.wڵ'4hP\\!ݠP(OVn 20B4*EF.ST.\P(K.ݾ}FRi~~e~޽{ĉ5o6_#\.￿~ڵkncdd$˛Ԋ"###""E"Qbb"&*ĉ}166~cǾ[*ڔ  Tw`09A 7yRQ*r\Ӂ?VTXP5ؤBpqqAO.N<6?UWWo=7@,++j B{F_+y# G.SJ4GOl|uuu&kU[٨GQHFܶmfx捚{===:.&ܹsddP* :T|CPǏoݺe ( SW^ǖ~ E@'"ysg4udO5mzzz }"1GNN9Ĵi ׮]޶m[^ȱ]s͌^R,JETVVU9bKR5WJ#6e#Fؿ? U )  mFvd2YKrh~:@QTi޼yğ( www\sF?|B@8((hh{x$W+(*JDxֶyUCCôiӚrG@`hih&eO>]pIL}/;}06JC.C"նm[>ߌ  ?!P(JlZ"DRZZckkkT~%J_~jaaIpmۆƻǗ ,sss#"",,,"ݻhFh@׮]KKK!TD t҅|ֺukDBXgT*MrbP(>Χ$33]vL&?[ZZܻw,P@R?[;vȑ#[ƆjΎb}7䥞ȑ#+++ Gnnnc)LMZjڮM*J&}ED"y bbm&%%?cǎ 8_*oߞ|>yFKѤBAo8;;KfĎ aÆ C IJJjv) /d2w.ɚQ366֭[Se| ŗe`>,Tɩ :::m iiiڵ#.^\\(e؄-D"1cD"ɱN:%˧MF(LZ[(9[YY޿ 8}}} ?~~~&&&YYYPP 6۞ӧOzxxV( "ywRyǐ!C AI?Gowuͻ(Z]]ȑ#(pww$! oܸ΅I SGGPP(۷޽G7rde"% Z~~~]]RP(&MJ999Z&bqnn.N5jʄJף刉oWѢBd6m|%"ɴRk׮,^X(͛j)666-`0!tsNzzzHHȊ+>|r}||***N.;vܴiөSMMMCCC_zf"d77lٲݻbXOOٳ͛nݺŋϜ9-?7o|-Xۮ];\m޼y˗/ONNR;v'5lD[n]lʕ+]7or/*ٳgᶶϟ?733߿eee3sGrWWW[y5cً-B|}}l}9`ǏGHO!11i3edd\v-,,b888E>Jl<4 R 9>>eee ںO>uƌ999EEEB㹻wԩS'ҥKAAAӧOoݺuUUʕ+5R7nP[lرŋ555 >88ۗ.]dɒtHdiiߨۑk2ǏkիW/_|ѢEw100 +,,$K6mTXXSEӳ]vSS64%xI@@;hUV5_?-ٴi~rϞ=nnnӧOGjޭZZv-Mկ^4GuB2cƌ~ĉRiUUՄ ;&:~F O<ҫ6m6mڮ]ӋJҥK9{!C<== 䘃* sss___RYXX"6mؠFsuu511d#4e/^`h77,>r^|iӦ` B"Ο?ꚙuL&0h7zs~駮]ϙ3W… ,Y2mڴବ:׺u뼼<-nJJJN<9iҤ5k֤ vyyyeff^pAP*Ν;vlv uuux<ƍdH`m۶,]bXF" ÇZ$''0 66655U-z[yamm+YeqppL&uuu>}ةS'gggƒuuu׮]ۨ/۶mҩS'}}xn`0t4zZӧѾ;w+V˗/N:|P==?"kIҵk^zuL&?|V?{lÆ ._MrÇs܊SN9r{ܝ۵k0--mΜ9&L?~@ HLLܱcY;zƍC r7n ׯGGG8ӍJU  oިzZZӧO5O%ܹscccCCCutt>}:}tobT;vX,NMMUrٳgzjݒ.ymcccll,ǏObݻ9úȣJ:{,AL½Eݾ}<9֭BٵkׁԞz7o߾ÇGNTIT*UMMͷ~K$?AzpP]T|!Ν; t:xxxxzzd^!W\aÆO /XY!IK󪪪YfF BB^p\nj5jTLfii֭[O8膿)L___޽}={ %;}t9T*-,,ܱcDž %244șs8g"vLn'ɓ...-=ztKp?899ݿ_.Ŋٳfͺuڌlkk;aQYY~Сׯ_7.\yf3 mZ 'N`0]uL0_:#GLJJ:t(. 5 … \bggKK^7dû6pݻw'$$4*\<߿FFF@@> H7$q`ޓX[[=:''+SDFF\Hxxo)r=zhFBňC! 7nܸf͚ŋ?x`0 ;gپ#4?>**?qbO8ь')VRRbt_MNN^f{…˖-B5a0 `0_4o:Z|AOڏ Nwss`0 `0 `0 `0 `0 `0 `0T*uȐ!\.WTR(<| :ƍ`0 `0Z&M6FFF_-47RP `0 塭CT\,XQQ(??ѣGiӦŋkhh| PLJ|f(V.|Pp@_.}z#] 0` @W|d~`0 `0U-/DP×/_wڕdk `XC 0 p 0 ) @@j0 @@'Z@t wwaa0 `0̗ s{!]]ǏϚ5K.׮]ۣGzu *r`,@ @4zHU_ld-e {580 `0 GPK.gΜrrw޽h"-xQQQ;wrիW;6a==="APPPJJ=z3gL8QWWHӶm۶m8pI7999 µBE&Ҽxt$ n `8BBt" }\ )Q|f,A{W `0 נߺuܜb֭[1 ;;l&iffhkHHHnnիWRSllܹsQ\Nf͚eooDҡCQFYZZǣ4nnn ??62 IDATً/qmJh|C(8P*}y y۰t8a`@5  @O r'nc `0 YYYaaa,K*:::۷ul64''G˼333b1R`*O>&&&UUUM:99EGG a07nKKK>Oo Hmm-400u[qm+ (ps-MNq#hLXCH[0 `0 `>YYYVVVL&f;::fffiڵkW^^$ڠP(PKPJKKԔHd2=J)>}JPZjp\\NҢRd2J2M%\`~?Dw@@K=k4%hjn1I ```0 |_zEPLLLRm~~G:t@:uTTT$hkbufmmpTJRo+ITB$Jb0O\A9:0Z`Wc&4fI$LSL3e:a!4Ҩ w4ܞ0 `0 泆.HJ%())aJRCCCݻ?eO4ˋѩU:nnn^YY)Jqi @{SyoK| `*@/J0]!~NF0.z8J7\d3E p`0 `0L&+**jݺuT*}ꕇF{R[|E\P(-}޽{Wtuu;utu\[qL-\B0$]1`|Rg._"  ?=`dD; `0 ̠@qqU*X,~YhhhCCCIZPdИ; TZVV֯_?.L6SKaÆx<ޢELkK+t8 X\`L@I0H,?  5@ @ @SQN8x.:@@=nXyEq~ *+XPDh"*Dػ(v,A@aCf|5j2W^y<<`0 |\.WII۷ srr VTTҠ*JUUUi4S߾}Q\4iRLLLuuw?oF+//'>}  b1JEq@ɄRرc/_ܹ3JCJJ Ţ%%%λwKvСB` Qs$2>_"=T43`(x @|?#x"GӐ$h$<HP Єg`0 `0 `0 `0 `0 `0mCC`0l6{ĉ(vѣGϞ=޾}+HSiiim=t?C 66ٳg͛7>\?s֬Y%%%<op]`X6lձK[b6RPPdɒ .|DžNpwwp8'Oylh%%CN0SNB055U6eAaaafffrj \Q:,f3fҥW\ٶmlU\\\df̘!:;;>АdfeeyyyGO8!P c۶m'Olo?Lە+WJEe}}}__W^ђ%KM6k֬ Nьf̘ѿ%%ߟ;w.::ZVk@{ѳgO&vmٗeܹs̑MCV__?eʔ᜜  Ʒ#Q3F[[{ҤIGCA|ڵk3iPHxuWښf`0 Vp`0PHT*ollFYgggp8ֲ ee3gΘ@EEEee6$QrrJ8qR+Pf X,k\1~x__ԳgϊD!C]V[[;<<]B_~]UUiϞ=/_DDEEݦP(bx&&&ټO/^gRQQKHH  ѹuVllX,!ШwiMў?ށ*((xzzǷ\,\0 `;d:/e455#k׮MOOhllѣˍCCCQ*:cƌyݽ{7<< kk7nܸիd#N8RQ(P(79?/r9ݿ"~~~jM2qDU prr*//  `0l555555a &MJR'ڵkH6m* x|>_[[O>;v찵Eu Q'''Xp!څ~:Z޾}Դ֬YӮ2d!CϟWQQ! 0[n.11LJL\r%((H#ٳglleZıcǶlBEfSNurĉ111֟>7铚RQQxo桊ʡCΞ=#F߿G=R7"#$())m޼999Y]]cnnޫW/rJkjj ^ZG~~i,Z())CSLINN߿w+.[36YrիWgvt_ &yyd`0؂455555AUUUr5=z8pؼy3_\\ѣ%.$$Bddd(ܹsdJJJd=;D"ѣGe߿/{ʭ[h4ϧN0$%%u .F[lYMM͙3gZl_]]=334hYHHHE"QEEE۷~ee˗G>}\d KZXXӧOY 77UVYYYYZZz{{SԢ3fșTUU>}zŊK.% >/ 7nܹs% /^xӧ;VMMȑ#|Ν-"2668zΝ;`ƌ>>>tuuuuuҪ owB򟵵YYY666eee0##CѣGtXg e \[[&QAeȑYYYwNKKeʇ.^>еkiӦYXX $t/+W|䉬p;iҤɓ'ʴÆ ~o޼!(++Ϙ1痕EEE]ttWN:+V033>}#NOO߷oMȑ#|~uuu\\܉'dD444&LPSSmccPUU#cjooÇ3gΐ?JJJƍ?~fMMͭ[;F~ٳgϞ~L*>~x׮]uJ1bhRM8qʔ)񕔔L4 0 Vp`0vO?@uu;w t%t411m۶E-`쒒S&111:ujtt[>c<zEDUUUku ƸqܹӁjkkGGG0x<'''&Y__+YyFUUU]Jׯ_&B޽T*-..~A,%ɳg 0f̘["mJ!Hvܙ9r}͜9+UWW7===ŋ\.Ei֭[SN=s挬Lx]pp0D0uuu۷ogX7oD2T*mhh da]]) ºCCëW }zzz]T*UQQJM9M@єbȑ#srr{u>m۶ .+++wڵwqqq%(ʆ ޿I$<fէMΝ7mDӯ]VQQmmm>uuuIII)))ƍ377_z5RJ$YX,K.%/c޽'LPTTt%ҹs7jhhܺuL&S__㑿>\.wƍFFF111eee|> Xb3Rfذa...tФB?lܸQWWΝ+9 սvZzzÇYVVV111mD 2eJCCCZZZk666:::N@rC;w l6 !C۷o' BGG)S(((H$#Gu8ʂ h4ZE*mPTKjjj #%%ÇͫI=z]~g.\8nܸˮM" ՘ܾ}ãw_BAA :4<<<,, bq׮]+++ҥKDQ߽{f[[[QQQׯŋeGdvҥgϞT*U,$&&n߾ ar~N<<<233Q ŢP(]dgg Q.\puu}K)sWZE~=z4qCQTTTTT`0-,,[{G>qڰXj/.K~ YHmųgV\l2YoATڿ3gΜ?BlRd0k׮-..NHHh͞=;888&&vZppy\_~O^&z(7m ??у|L}ҺvZ+VPSS NHH@;&Ip޿aTn:IKŋmۆ 7oܳg?̞=[]]LJBIII{qwwߵk‚ l'HT*U+***>>>]S(Rwピq]grr={\]]CCCQ5Tm۶XR1p . ()((:M Dx0!ChjjqmlmmEmm{[ZZݻw͛ H2aGI9[VVpwު˗+++wt:=00˭mcȑYYY-c0vvv4ԩS,;w\VV֚4eʔ;;; CEEeРA~~~^^^%%%nnn7V\9w\==?'EhEEW^ivv[[[ ' *XQQ!vnҥSL2d۷o]]]'LЮO8QEEA{ >|HTWWZZZF),,,ssseIIIOv۞e*ee?RiWTT0`ݻwe-ȒJJJнȶVWWwҥF.444}Q($ƍTQQ|>Jp޽{:?ǏI) """:IKis eeAO9e<|biiw F(ڭ򟩩嚚wh/ÇGv<\(2z*&&F,!H]v5666##CI ݻwuuuvv6yFSSS7ZW8%%`up,  S@ q ϟ#R "4h+**BgxbrԠ ={-`۶mvvv<@ ͛7;wNVhK.533ۻwokFZZZ+V(//_n]kfmmm;;gv,JNWWWo{-+˩T*v&IR6mڄ_~vZ.;`٘ZYYٶm۞qqq]+555wF Ь,f 9>ZkJvX~ AvAUUՏ/4C]pիWe:P(!6eIHH$/ݜnݺJiS__ԯ_]즦^z!aA%f"g/ٹsg^ѣYBjkkQv\+++OEGg[sͭTQQIޔ`?P\/_䐅wA_Çg0 .|ӧO/]u-[x{{S(7o6//oԩ"wv999ׯ_?qĚ5kΞ={MjZc;v8}4]r`X"==]\SZZZ (++}Ƚ\.ܼ Ǐ9s&J| >>4ؿ?J駟LMM!)))h|rrb,XЫWA+D2c iC ill͋)Çe|kjj38::6KcƌYp͛7wE;3;wݻ/]$[|˖-#7Ñ5Ç-@<-jd&Nؿυ ܾ}p׮]o}UUUh/]UUuAȚD>H$wwNaYeeekhhv۰aFr}}}uuu>^[0TZTTԷo_r&$''-Zhʔ)hNrܡCΝ;s].Yk4 յiCDJJJUUռy^Çڿ*4668q"LR1c rWKSS366)޼ychh8eT ŋ s޼yVVVdm۶͛7s֭_>,,jÆ HDRt2bR :zmmI&۷D"QaazEa0L.*7Dܽ{FHѲ =rvvׯG{B QVV6w\9f&Lr䈬VnAAA$JԜ|x]] ]F.(;R(c.r T]]M&G9)a*v@______T*HV^J^y˵b!t¢s\ѣ ѣe;RO?xbۼ{ȑcǎRR ߽{]՝7o^```uu5NGG!=X,ֶmD"ʇJP~wTfa`` ɤh"իWaaaͅޞ={|OӧOxǏ5fԄ%&&}lllΝ;{lz5mZxcǎ?D"xB0??ӦMdk׮!{h@fv)dF}̘l߾}էOp8^"s믞-BIBw/&&n(mBBBIII}*Z]]bژ6o߾߿ۈ{aX@1DBaAA)ܻ"##XfBÇxB0""j:ws{|ٳg;BaX 11Qvɓ'!!!ӧOߵkRFBD",,,?~`HRXJ<~ʕ+,YuV]$ɦoq7fW\5kVDDD]],,,c0 Vp`0SFLQGr.}ŋ/]Ԯ{ٷo_s}l/_>|D`0di4ZiiiXXXTT'{^zկ_?333T۩S'eeeDRYYbjSQQihhx왬YMyy+,,, FCCCNNh/MMMAAADi}P^t̙3%%%r2sxx/}FFÇ[ȐcZZZj-Љ%B!5,d޽(O///ocӧ}x ?~]'C^|2RfF:B(^rE5MdDTJ-XTUUeffNҥK999:::BTVVfddȶ#J{qF=kjj~TUU>}cB޾}{ɒ%(!kccKnnﯯt*fH~c=zdnnN"-[w<)===##foխ[7QPPp]9}_TTTjj%DIlhh8|pYT@"lݺ5::K.JJJB:==]v ӭեRiMMMNN9O:%СC-#""^~mfffP`0 ? QSSSUUI|NH(V *rrPTtH.?CE@USSxxvc#sՐ5 'OD_ &v۷oK+W^vM6M?~<22R" i]vEFFz|Ft? odҥ7n)0 w|ê([ OR (Br9yH8/޵kל9s8)>/&\;JKK[tAlcc㰰T~ejj1S8zzz</33v1Yobb*g,`dd'C ݻ 41 +80+VL4͛x@X,ԩS<؆6۷/11L[7nܐ |HR (ߤgϞݺup8NNN ۶mfZWW҆m#B)// t `0?'ՓQPT6-組F@@@BB ,L0ƍ!!!Xkצ.*oߖZ`0 `0ORH`0 `0 `0 `0 `0 `cPT*P0P(.CBB f T*/X[[KhhJJJ굺Z.|x<&Ş0LEEELD"illL`0 `0 滀rJx">>ԩSUUU )P[ny{{<<>wMNN4iRgM<9%%~o_xq-544LNNvsskhttY,`0 `0]F||[:wlggg``8x @r۷+((lڴs%%%nnn\.4 ԩ/TTT\~ʕ+rv Rtԩϟ?Ns8zdr֭ 6X9RGGG*;v4K~zϞ= ???)):88()):u˗JeeeӦM k֬Y-0O~[^^РQ@PQQФIL[\0 `0 ]]SSCD@@*QTT| W!+Z@jjj2@[[[XvS>wFN^uqqg^zq8Tz.]~?|Іb˗͍_/_nkk(D"QSSKka\"o߾566VWWf0օ# [pX[[9rDv455CCCuuuTT*e0N:~\ `0 | Yjkk 94[[[t ܸqL\+W; d2eSԆ,(Ua)4޾>''y5 }ʖ+Vгg.]| `2|>͛7]t y̙3@[[[(g0RrM͛7OCCcٲe?%%p `0 @hPee5kBCCO8QYYyȈ敗/_XjUTTΝ 'OCL&s He맦`nnnMMM\.W^]t9qÇ 3ڐp8moNNPSSW^r---@ XSS~߾}͛xդ2ڵk3`0 `0>z.N ;wӧO||<N>ٳwAYK[$00ުULH$Z~=YHӑ0,HjjjdSr~_p8OOϟÃ̛7/<upp066>tPEEF}\[n]~ƌ,&ZZZgĢ"133L)ș$P+**ajj\_CP9ҼP8gΜ8 {9sѱy͛7 L&,3g@ HJJ"owUΞ=kmm}!C/`0 | &ݻw;tQQב)AAA׿+>|˝0a(..z BeooO , rA7S***"##utt,X wF__ѣmPRRr5k;vlРA6477WYYyȐ!YYYbƍ  `0)\PPbDY?~3gJRggg쮂`0 `08_b455ϟi% PNp82Gp8, vY[[nݺ-ZFD"Y]v%$$Y>l6[VP(T*UAAb Æ GIJ2tuuʧNB^6l<袢#F˖Ϟ=ݻͣo8 6©|]rrrt颭fTSSSfff>}Lc-F$Ax<2 Auuul65]`0 `0 gQ:u)޽̙3H?`ꑑL&ЩSyڵR(fsf̘ݻrI[[cϞ=('?p&䇯\ZL nkkKƍe;3i$33O9`0 `0 `0 `0 `0 `0 `0 `0 `0^(`0SN !0|x 0 ^tuuM_C `XL`PHsAKG <-\رcn``d2v)l۶F"@ccc~~~BB¥KP, 8`bb㓞N~蠠 pႮC9B177-?Ҙ1c;u`0JKK?~|7oޘD" BD}}}NNΟ-d;wN>K.]rtFegJbx׮]kWjjjF5j>y޽{`,[N ;v,""T/bkkܱKR ZZZ?v>͛7UUU>{npuu]|D"}PԨ͛7 ̜9L1-Yãӳ3(//}􌌌C=~]޽{lL{{ x'OԠܹsK,>~1 ߩ`2cǎEM<'!dpЁ@F+  SSӀ>{uDRRR"JJg#""9NΝ͛gccl2hjjjhh} Æ x"V\*!E*644(++><33cP s@`mm|H؈*t۷P"˪&Lp¦;wgذaX}322~DDD"ֶy͛7oГzÇ x{^|y>}֯_xcc#Fkwş,޹sB {rJ.PPP@P !___^SSs剉:::!ROO`YG+++B!&AAA Ν F] ȾQ~uڵtʕ.]z/h"Xp{>}k 7+8  3@x prx ΦLYhŚ6m@z Nwss[x?~B))) >-LT7o~ĉ}-jkk544={)H^^#8ТֿٳgWWW/[,??_,t.Ԅ_j`0\.GO333ɓo4tӧOZ~rrrrrlCEEEv(ʼy䔉t:*550u^z%&&Ξ=_ErRٝ:ub۷T^ {]tFrsstbhh<OMM-==3f2ӧ:22_~OJJ"u˗/˕()) :4!!Ύ 7nL0AGGGSSO>6m`0 + UG*vlŬogmd2'O|3g8;;3ܼy3...88X[[1@u .ͪ `,?PX`=f%3@̿W  @6 LX0@8We{?@Yͪ 0` GN   [o 7B6l$X ~pi`_c#K3@O"SSӁ[[nC,߸qLLL%655ݸqӓNoYGOn߾z1.\9r$o~N;88ر#77j,3tttnݚ, цP(@:u`XXXt?s||ȑ#?KѮw`֭r'X,F*D"ԩ˗˘fQUMMMiiia0999:uB422rNҥKȽ{v`EfMMMoݺEj-aZ{t@##0p8C/2J?~~~~||<~1 _ 4hiQ֠hWIKKۿff+̙]n߾]SS3<<ٳҥ z9жq.@&fuTd +F'N9E0%Fv 7L&snPm (Z)7I\wrdxo13ysp "@('" 0;:~ 1#P @ IF2 O$B?_zenn>l0;;;}}oק޽kYb8!!JΝ;5%A/_?~Vr)QF5?r{YZZ53z7oܼy]g B 1}5455HL&ή5ѣGMMÇKgkkAJݺuz͢E޽{ϛI_7ee#ED"k011QRR222loW) Ū-,++kjj޽ WJJ $zT*Ev (//ܹsnك_j .踋J*TIfϞ{!///MlllxʕM6Ūuww{}||W\{9y򤫫kHHW@PV2 slA@`Z2(4uz_0B4{e1 x+ y?X0 [N@?2[APpSM2¿G@  J9GD] pK* -\% /0z???[}Eqn}mTXA QNJ5h4%kLGcbh j b*HDDKeYǼ4%FϽ2{,ov۷oJ-Zo>xfsJJիWj˗ kĉG-1?˕dz~׮]p̙ڵkܻwI7`0dffoߞYf ޾Ɵ@>}jժ}vtܹ?c޼yF"><&&&&&~ׄo p^z109߽{wJJ i:uaZ߿@@X,ɉܹs'7l6߻wرc/۷o'? -[T՛7of'O 8pҥmӦ͞={RFFɓ'juAA}yPj@]]=K%pҪG>`c(B"R $d@'b*ʀ@{@Bk`{85(kP' t ff@+a"@x^#]#` &y0oqpp y󦗗ܹs. #Gј?PCKʁT` =N ?Q\(d6FN/]tuOO@!V+,~nRTRT^;rʔ))ga fqz"ӧ{j5iiiln?PPPդI++Ƿ,--+..g (T*)lߴcGF5 |D H +fiy$K+ʦVGPxxa i K_+Ob. ]@)*N<ٲeKTNNN...wx,Y"$$$(J bիW+`0DDDdc>~AIIGimm4waggסCXZZ#H5kn۶mO9ݻwU*.ѷo_FSyD–{Wڵï@۶mMֱcGt:ݍ7Zjşnݺj:11>I 888inO$22zZfM T*9r$\FI&OܵkWXlkk;k,FXAs]tiէRz葓VT*Ǐ?tӧKRѣGu:w}8ׯ?n8@oc(5Zj;88===U._Y\\lqǩNp0==1F|}}-Zxbkjgtmҥdŕ[vm&Mb)Ç9si śoyȑԂrhK!:ʕ+W\qpp yف9; BRƦ_~111~)QBS IDATgJ2cgbȻvppdJn޼ɖ/*..~NÉWH:(! H2pʯ.-/€,HrӵT5Q$+&eɇz [.zh ֖ x*.@!`{AT y``y>;999K.6mڦM+WSWBP(G߾}CBB;VPPPZZ:{9sL>O>jsrr/_^XX_ ?5k=ږ111'={4 4P(cø\-8ȑ#GJ%򼼼>h FQ澪O~Wsiذ R)0Fd23n_tҷ~믿fPRRr5kTleeeoo_){7oަM٣ X<~wygfY$̚5cX..\HHH`ޥK~GbX$9rEN6/_]h-Z4m믿pҥYf:yNi 򀛀8p3-:]Up1;k:qDrrrVlllJJJ+r0Gr פj-[ueSNmݺ5;hNNNll,?*,,L$+5ܸqcժU\i[ZLnݺwpř游85LSNY|V׮]۰a.ҌwyCBPܺuGE ?С?֦|,*}٭[^djǎ+&&&nذ!..pU(99]xen͖-[jժ~nbL?ҥKׯ/..D$򋍍Ň{Tme˖ K.U ++맟~:|Z[[ϟ?+g:;;^&QCF###5o߾+V`k}٭Yرc8U;;ڵK,>ĉOn֬Y8pɓ';wLKaϞ=vjРoo]v9oc+eg(@ !b~~~B!{q322.\ȵ;tP6m:u$nccÕ.**ڳg#""juZZںu&MTu7_R[hg}/}ыLGDDD;Ȭ]vDh b׍2*% /B!/'>w\OOO{{{ݻw/\`߾B0555:::))i`67mtu///H}YL&srr*0XI2~ڶmkmm]TTtҥס`Xp'<<<؟ƅ ^-sB`Zm@2u? J!B!ℐX@ $WM c'Z@@5:%BڵkhѢCӧA!B!B!B!B!B!B!B!B!"Fޕ=WӁLJ[C4Q+a,/"[nNNN;w>`m(233/^؇jժճgOLVyB֭[gϞT* xn/Xܽ{w77M6tʕ8Bo*m۶q@Ϟ=Ëjo!CBaXX0bGnnn ØL&c,N UցYy{{wѣwI] 奥W^5B!u oU˓_Gn'y?&ix&LrU.мys_n 8::*JZ޽{|Mjj*GGlj'Z[[3 T,KRRt߾}p >I*D"\VVhm۶{nv۵kW91q 6QFٙL͛7sm7n|96 K.qm &0P(W^&MBdJJJH$-i^^^_~%q&LHJJ_|񅇇ZDF`0_"B!BKVVV۷og7ߤϑd @k_- |*2LFqڴiSLߞo6f.ޱzjLsa#F'gh49(<<|K,ag6;\"Lr\ֹs޽{brssSSSۺu+WTn3tׯӞF!E^/--]`A׮]uֻw؞={Ջˌ3{N:M:%K^7>hР^z;vҥӧ;wj hCC`  ,[k@7hlĀ= 6+ d"/\0p""@k@H 8 T@ 0ϔ@ ;vpssѣţjR(z>##,##Yfc!"_ղ>ak6nQ͔Jի]\\jjzÆ  00P$Y<#JZ-iBym/a[nY$Vyyy k׮UڸqcGGGHT\\iii|FYhQǎ[lҗ֭~ !!a˖-3g߿^7;\paƍle>>>=z􈈈x%0MnVX‘` h Qэc:| 8 @\XO80XUD黾,*= LÁ߀R h6*|h F (ZQ =`- uCT5*((̙3xHd0M&SIII&Mಲ2Jղe lݺ_):RiFFѣGCBB,rL8 ٳSL Z,֭ پ};$,yyy)={d˯;vG!(ѺusFX, z?k.ޥKJRɓ'e2?600pڴi666lQz@j/_ gnnnVVVL^TڰaCPxnaBBBAAA=^GU*U||`;vlJ8dLt x>1 ˗/_rep6+ay> B1a|:i$j#a"""ڵk7bI~@PVV4oڵk5 I$Ǐ[ , O'''rVKB!.W͜9S(N2gϞݻw2dȶm""7wݻwONNӧOPPШQܬ늏ǏߵkݻO2EΞ=% 6RH$k/O_kРhlkkkgg6@/ (+!"lo+_jful&wp{M+@l1]* f 6W,otXIw6V&̀s]mǵk׮\2uT/fP(dL;>+<޽{mkk[Hʹs҆ ް ǎ SEEE]6b^x&$$366IkB!"H"إyyy7o&J:usecgeemذXZffmܹyƍpBo':t(<KӱY9h4t 2 SV G,K``8iR T!*xQ 4&"Sp ,x(pyx^e@+oYLEIV l~x{~>1`=p"8B-NwVZoߞ;L&DЏB$rtt,;d֭[BCC" FDbB0L3[1((ʘBAAC}||fȜ?PsIJJuԑd[VK!8L&SxxX\._۷ iii{xx 4hȐ! 40L]K0`Ȑ! ,h֬ڵk5jD㰸 )*{eplM~5?y@Gn:\`H*FTv,B'ܞ@` .rJ2ЬЕʮ4@7j2."wр/)y=5i$޽R,u֭rZgsvvf *?B@Pn]~˦M +|r߾}b&vٲeKYYYϞ=搒u@ަMW8M!RM6}7B?~ӝ]Jej-7޾}MBBBF=bĈ͛W~ɢ?sĉFq޼yM<m@T* ü6ZV(Zt1({8|` {d^d KآmyjXxx8`RQEjJˀ)0"6.;5 |xU`$p~ Xp:q))++۹s{۶mbXXT*8p@ Rtƌ|sС̠0III:c ) @ܸqʕ]e˖ɛXfM^ju?j'\_^*vܙ? >B.g+jF!r>~_v ЫW9s氵ЪLֵCeee矫Tٳg_zȑ#CBBzʕ+T(C?h4>xe˖bXG}b߿/-*ԩSd2YD^< pAV),)tWp l~n@ | \k4&'٘U==/'% |l(:hP1_L"NX~>U3n@P'Fūw>n7Rh*a!޽{vƎx☘aڵkz1w㏇d28qW^ݺu{uDҾ}{WWן֭[U$===**slG O9r;w M4r@Rݻw5g`?Cm'NnzȐ!^^^111eee 4`I!:Z\3?~sD'Ozyyy^^^ƵjڵkW;U*EY)JRɏݻ͛7PRRvZGG1c 4~-[R#0RdS';-צ4""B&) եR9s游xzz.\p…瞥P(r9k=_dZt^?dȐ#Fh"&&/ݏB!XlqVnݰ 6pӦMٳ'&88822_ettt<{,WW_5**Yf\LDRqh"+WoҡC۔J}ӧs*YxqXX˩SXL h{€\>B!B^Kb՛9sfzz;wt:UN֬p|ݻϞ=;77ãaÆlKӧ$33ѱ{u̚5)...77;yٲeMTΟ?ԩd//0v+lժUV?DžBaw<<OaE},!By- zk׮...RT]zuƍׯ_7]vHHHǎ|? IDATW_sԩSgڴi;wo^n]yy+MU0QQQwΦoe#8zh'';v:ty_^^^/K.Zݻ?+ ~: B!B!0 OB!'_mN8 \OB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B@@!("y%bL&J0 .Jr\c6Gg) Tj4kdr\,rL&xJDB!OI&k۶m:D!N}bԩ#srrrrr!Ctd2-Azz[8`0tqԨQR4444//m&FѮ]s۷{VVVaaayO>EYJշo_Bsunȑ# իWcbb4nܸ}f.\0mڴi޼yii}M֭[hh:Zjjrss6k޳gOyy|j:88Taz}nnn\\\AAF& 0ښa( BD"LKKпc1 ŷoNHHxҍӧ#G}B>|xJJٳgnnn͛77Z6;;;))}o&P8x`JŽK.%&&r kժ5lذ}egg[n^fdbF( pan[n( Zrsskժh|͛7_l6ўL!PŐ!CƍRD"P(d/i߾}HHsӦMFX,f7իW@@@HHhҤ\.H$:Kƍ333;v!51cƃfϞ]v%KԬ[4#F888X[['$$.HM&6o8&L 7 x";vlaaatttFF`:u̳}߯[\.tZje0$;bŊ}U@icc8ׯ.Jz}HHȱc-ZV{ԩ@[[˗#_T* 4v~lt?<}ի+g۶mׯg oVv.\8{0Cnf[޴iӏ?8!!᫯~P(tssڵkVVu;\"LLM #G3ܠɘL&V0X,F7ް+))ٽ{7w}СSZT!%T*Rd+PnΝ;O'0M\\\Ryvڱ5.##_~ XYw5 Ow588~b3ݞ N'*g>G \>|>jݺ+WawGݪI&o8f-Z/X,ח_~ɞ:Zlٱc޽{_.w>YYY~~~M4]o! 6m?z@rJ///Z N͝uioPTTt۷o7lذ^zM4ٸq#O4uԩ+Wroٲerrr+vrrr2L111gΜqpppuumٲenn?~(Ec2_a\zG=r;wx]t^Vڵkg6%oVgT*OOO t/vٳ'[*N:dӦM,FdɒYf|?W {n>>>SՎjӦE3+++!bΪB1b\.h4uֽwJ;w9rdjj@ 믿6o޼sN^"dee=JJKK5k{…gmF3fLJJJffc>k%}uV%' F5ySs… 6,>>͛5.ٱcG(g͚*رcN|rd45jtƍΝ;XǧW^=zXhmvv^6lW_}u-[?,,,44tƌjc,Ǐg!!!~b˻vZPP0}7n5kV>}M^ѣGlȑ#ЬYʊaB!#GB}jz޼yl?iFEEQj@EGGsz_bŢE7o>l0vlԒѣGhР3?cСJ{r\&&&#"cǎ ++ܹs~~~^^^D׮]{ɱ7;T~~~u1L/^OGڨQz5jH,iF"Px-~m<`D")))uV &xiթSaHTyhE,@*6lP,;::vڵAR1Uׯokk\\\ܮ]̝;wZH^B!aSI>ӹ-n\7~M6]r=<<ذȾ}r9>PZQFleD6555u\;;e˖Qɔ'p|]tQT:N*ׯdrwwgbvh4{ŊlaZ  vܹsWc`s5Gf''~EիWZ֭[c/DCZիk֬aC:.<<|„ O47#Fјd1lauEFFr;0b^<==G;cC:>ۗޤYV FQ"*ޅ7޻XK5bC&QD"";.[?}֥5|NNq;͝ί3ĉ!!!*ֶ{gϞ-,,ݻwyyytt{!cǎ4hA7o^m4VI8_{c]tϏ޶m5GM^P(8q"SL8\.C ݻ7u y3ڵk7lذo011qƍ(x<?[vrr*--ձpB]\\_H+J:4(6E15 U*W*VtilӦ%<Og|P*RaaB`X|>~:rpjj &)pX*H$uM6eNV\Y@کΝ;'N(++x3gμz*߲eD"177H${졍`ssscbb зo3gΌ?^& #\]].]hKW\.w۶m"h޼yۼy'ݽ{'O,\j͚5999b ΝK{ܹ+VX`]租~ЬY_5885Ĥ_-[ rЋZ5EEEW\ٷo_5J<3bqqq 褌^^^-Zӧkeeb >x򥹹H$OLL^ UJHjj{FFYrr2C[I(ۛ;wѣ,f1b?ZVTj:;;ŋW/8$$$$$I&}=}M}~СC^|I~kŎ;,Yo߾OH砍ԩ?0g&bRTTb*Jl6[R鴙h,,,сttJ3rR5nܸ &JRZMQmMݚfW1T*eNG *0aBLLL[""" !ڼys??o۷M J'N,++(~KII9tА!Ct&7t &3@DD~Ȝ9shk>}dee]vmM6ߨX,V(J gbѣΝ;Xcc:zSN9Yff}>QΝ]\\֭[G._tE'WULTzZdoo/ /h{=VͳX999[dɬYƍǨ ڏ嚛2666ݻwW*!--mŊ=z`i#u}eYYYǎ4h[ٳgEEEyccc__-[1"??ԨQSN*{ԇjj֬Y/kذ!É!tOv*FRRw}wMOOOLYT:t(33s$hmzꕿaag2##cʕAAAZc~אd>ooo_ՍRE~soׯ_iҤ/z|1`oʪؿ߲i&WWW6M'_OMM՞xS֭ׯu?~\TTDũvvv^^^ 8pS5ǭ[ \.=ztO>|ŋ: V]]]5EQ"'666..N"X,HxgΜIOO*>E{xxԫW/..Ω?J2$77ƍ2ɓ't.vݻwk6##1;4zzzGu^K?}'!HΞ=۹sgWWj;>>Eъj |2EQ;wJ.)))))xt-@ӤI.sN& V(ʜFiҹH%Gddի׾eձ⬧Nұm|>}ر###zxxh׹vtڵwi6olll'٣ 3#FHJJꫯ;?16-j[~5D:kOeljjZTTc[RRP(j5 ٻwONkرg5.\heee``````ll-XTӧO rH$;v,G1166ٳ'_ 5U֭[wՏ =|}Ew3ɓ'*JghΝ3_W$Ңm7~GR/Լ(@eddD?1PZZD"fb|ׯ> 222z]~}^+^Pi򑚧E3ڱx<^e2Yrrr)--=~ӂ >FQg֟:uJ,уf|1c߿_1?V(p8ݻwmT%\.M6e IDAT1@ GM糾]iӦ]v͚5&Mj޼yV5pn|׮]մ{ݻwEUIPTuP(T*ړ̹s:99m۶W^v:|0hbP8uԪ<::;N2V. B p8,V?@ Xj՝;wUnݶlիקOnݺybZZZ0e̮]ϟ/:llllccCQTBB[@^ׯ˗/TF 8PRl'&&~P >}<~X&UEyxxk{?y$::Z[IMMH$bҰ}]NNNhh(:thF 6lxn|pZl) jMx<^bb"`j4WWqƉDwСpO|Ym۶򔔔yy}W"pfX /p8\./\.w̙<ӦMh4?3Ν;|>?888,,c zzzƝ;w ӥRH$ D]v֭s, Q<qJt$/^OLOOW-Zѣѹs7nܨR:t<W*f͚EosΝ;wAOOox˰m۶ڵ+--}՞={BBBhZ]ϦM 4l0Frʰ0fhڻwOLLLd_~Ǐ:蛢@3N:_:ŋGJBa :֖8\]]ׯ_O['s VVV6w8@мys&uwRR҂ kk[W^^z+W 0G"[n?z^zI;w,YQRx<cpD"L(b,|>󙑁bqyܸqcݺuSL1cFqqqTT/^ܬY3JBN0BGwnڴiƍJׯ_={}@ z*))h4Wncch9P(dPxYFr022' -͛B!SĄY~ 6X[[WhtV4h]X,/_iӦQp}~|>_,3so&22R;СCCCC=bM>=::62SpCC 6jlРAddY*FQ\l37008}[*@``}jkWYdw>pA1-Z4h߶ vmgg-Z 8K{uݶm!C )@ c@ _(5r ,h߾=ͦVN>bccW\]^a9^`ԨQ}a~Y,Vxxx@@@M.AϗJth M߿_, 6j(RoaaA;fggWP*w^rŋ###ի陑wYF&ё\S"""G:thڴi;v숊*..600pppxfk׮y6l1-~yJJJ>}d2Yff###dddܿӳիW>>>wegٝ;wVT BOOfwA"p8;w"H-z߿_CC:wc;w6 qq'd" 8X,[U({6ݱc޽{3%BNJ6"r;JKKiFѰI𑖖V+NJJݻ7mϩFnݺ~3]ի p8KKKKKK_VVѣ8NǎmlllviiiBB "G@ _L/K>}4>>^'"//;,XKOOx3p6m*RP(ܶm8@@~ `߻j;P$B&@ /p S߸8*4)C +8 }aaaqR[h4MVV~ή<&&fϞ=ܶYjU۶mw^XXXygdddɒ=/H>P/_|@ 8p.}L0K$=~_MHHC;GlԨ+WBCCZ666u… r92Gӹsgϟ?.@X, ?@bzM5 חe@ h/g 6g1&r l ޻-LVq lIڠ:h8y+eee{>rSӮ]|֭[իw .N>=++K>} jV,kԩG"|h_#>/v D[leN:/֭ mS ,ݻwlllppJ222jԨQ### p4k֬<**V7T~zzz!!!LIyy9<@ EuiРAG!PוUx0 ҁW9Q7yW _I@٧W@ t L O]9́8xx,pڵKp}=x ODϟgeezݻwnDrӦM0`+WrrrƏ_I۵k׳g˗/ٓ|Ij:u-[.^ӿĉܹSPPP+=+88xǎRTp8@@QTiii.bX,V~~>0@ |zC6l8q֮Ν;_|p:64Z!~~~r<..nΝ^+WlժմiӒ?`MNP$@ux@+`Okgv G@4Pq^j x )>EQ򲰰(((vZPPPEk|H۫W/;;;}v]>>CL]|2 B`m,sǙz=rH :Ν;)PXX8aF044;vinnnHHȩS 3f cʕ ӧO'W@ j!pp8nݺd5yK~h7J(꧟~_~XX˗}||vر`DL&[lҥK߿x?p{-0n,!s @3`x@_@ <z@}51ŷڳgOYYٍ7rrr Ըqc)lƍW\ijjzʕ˗/TlmL,ZC'Np8vvv{p—!pzߠF ]ڇJ@[uT@O'pU9_ͰWe1@UFy8@ƍϝ;:<O__?=O^QbY^C )JR9sL.{&MYvnݺ`3{G5eʔТ"CC 1whѢ?S*:;;]ܹs6mSѣSSS9"Jmmm[j5zhF(h4 4Xv-;prvvNIIaԍI&;É#F077?tI/_ޥK .9sF$yzzڵkܹO<' |>?##ZפIŵ#׺ug̴#GoܹsweX B[.I+--533ۺu+Ͽv mkÆ *ٳEEEǏXd -^$'':tHRuܹgϞOMMչGGu֙9s&''jĈ;v?~QQׯ_oڴi…۸q###)S/\\ @&&&W^:uj v:yEQܹso޼) k~T4ip97fΜf޲XÇ|NkaXZ6V ,,ks" ~wX*qs+F 4.M,st=֭[ƍcnݺ{eƏmj̟ɓU-7o<6(J 0~1WX|U*[`o5 0ww/4V+<ŀㇽ]v8p@,WSgҤI7oެaÆEFF2eŋ۵kW۷oxx#Glmmµk^~¢bSNOڲ׷l|,K(2#ѣG;fjjp5byJbM<922{N*l̽,%g$C-p@4͉@Y*!p(xKM߼y>h/nܸXoΎӸqc+VTԠAnݺEFF9sF&Ѧ2_ k@'` 4=6 ~ f͚ݸqݭ&M7̙3$?~ݻ?~7o0%111VGVR)3l4,,;go檺F)))QT@$& 2\fiiSjZ"0χfx񂩜Y^^_/%%%66s233[l%~\.bKR<G``-[B… /^`ffVFtT(*77?juyy9իɓSSSSSScc{lggg@Po߾}LL c  """;;M[:YjU^^ѣ'Nرc},@ -}>?tаjR V3y褤J#F r Ųpww755e~y<ŋ{qܹgϞΙ3\{maa1tĘLְaAիWoٲe4"fffR;ؗ/_ 6ѣux8QP/ޮX9x7Xƛ嬺..t ~VA:S]믿NNN~BxNTz֭Z9MuxZHOLzb h8W1a„Ȫ*4j~HNN U(jٲeOc'Rq9Z\\\RRRi "33S{iӦ 55Uܾ}[wS\]]㿸@Vk4 6TO<ںu6m 0~;}NSiiiUҒfk.44SFrMLLjxFrskbª3rȗ/_jo5o<%%e޼yݺuJ ((̙3t'''LVn`Dh9 LC+Bۏ (uB77F=~ٳgTk֬QTs̩>;|kk ,J%Hp8l6V+LFQ.hhl6EQU \pj¤(jƍ8p@jjL&ڵk@@@(&%%%gΜ:u]ܹcii٭[jߑRYT*Z]+"dddhRiTݻwoܸqڴia?&J\.={6((H:X,6]r)zryfe@ tP(z{{gggGGG׭6mH$( EVVPCViOz)O>~Çse:F "H <|P__*f͚y{{?y%qjjjiiS7Bw IDATi6m>(DhO 8{}X+ @C]>7e'510`@VSjq]v2eJii3իGW000PTLqݾ}֭[wޭ>p^¶ T4Iv>6j@HrE*9.EQ]v522b2`hhsN6P[um۶"hϞ=n9r$ݴiS\\G~%%%Ȩ BیԔv9Ye2ل nܸի캥9~xLLu=9pBm>77W,~rڡ+ d2va J%nTm۶bWWKKKJIAAAֻzE.[ZZV*J\hܹzzz :tC *ޱڵŏ?XUߕJinnm۶X&IJeʼnWmmmB!nZZZ.\0//oŊW~~\.8z=> 8gz^urN ܤڀ0 {TҼ)i751ԩӌ3""";i7sҁ RRR.]z޽{۷(b"߳gP(:tpT(I /$/ h WR#ԇ={&$$茓4ׯgً-j?T*۵krܹ,7oN4M6/'OuLabӧOkPtR7lPg&ݻSNcǎ*gllsYf,͛_X~}S"TedT+)-Ӓ$J]\\LLL-Rǝ;w޲eaccSRR Gcǎ]v|;vL.\hҥdJ Bׂܼs??iĤP2ѣG/622>}z߾}삂턠xC[>|xtteJC~o߾Xo"|>TQ  ZRE> @)P! Ey7J]{|@(LSiS|U)~Æ wؑxd_~c+Ndjwԩ~DsbWPT)J@ +s@`ƵT}˴Sog+D~4iR|||nnn2 ۺ7MQ,o:@@XTlb mll.]P(T*H$jܸ֭[iIbʕj_RM6mݺucƌ ={\r#G?~\.x֭cL0YN4֭[eeeO?p@II@ ߽{ tnoE|||~v ,AAAeffnذaT*<O"\p_蒘u։'jR Զ??qq\T*T*޶mvZ|Uwt?W9r XLv=!(@Q_ff7|Ӻuk[[[.+H233uEjժQF\.777ڢgqqqBBm˜HT2OҥKiiipOTXXxjbsԯ_9kڴY4ɓ'jQQQO>mݺL&{{|~VVVDDDܹcccfe2YVVV|||S8Pyyyˁš5k& EaaӧO_zSvr*VΝ;CCC5k_\\Ab޽{;v }iBrjE .ӧOsy;FDDL8u//ׯ/\PJΞ={qڜ9s"""i;nܸᅴO@p={;99X,m|ذadrhkYseT`=ǭj  j)FJsvI<Xchhbkk61{{SN޽fW-,,Ξ={9tйsDGGoߞ .]ܼy']v/:GppM!@g7i$DQUvr|ǏW܄a_}iPJeJJʮ]:999v>>^'9@ Y @ 8X,VJJJrrrBB?o^vmN.]իW;;;xOEQ咗E @ Çoڴ!yfHHy˕+W~g(@lG@ a Xz e x(?c@b ;^Wr9[vttwIdnn{'**ӧLLL Ejjj\\\5glٲe˖-ܹNw(*///>>lS>b}ϟ?#33qd"/ܚ4i322"""@>$E9;;ŵQD&O 8g0R p pPYk6  NOkT+ٻ6l( )RTK.}S~bɄBaAA#pp81cX,U\\|ڵ۷31667o͉'4 6={ݻSEQ\.ݾ}{tt{!'N׊tCCÇC0~Ç(//e@@\.' P28dfccf͚9szh@ H$|}}OYfBQTQQm -[ܶm۶mۂI!|(2 tj]k@( w*J?` *(_N֭-,,v})ZݩSEmذ_~L>qƳg2&^׮]>|oDk2$""B@Ś0aBii)ZR cǎedd5k]߾}7oJKKSSSubL,3>  ʀ7u2b@)֜՛ً@ցb@@͛7oٲvB tȑ#U|999W积XfأGGGnjK.|w@sG7 i`2`d|7~>P#uӧ\,򣣣CCCP__ٝJe3h@YY;YQh׮]߾}-ZO?i<|N|~''vڝ={V mH*>}Ç՚4iҥKBV333_^ uww2,77999:klGGG>SʊK$gϞ=x@g۷=zDcD-ц0Rرcu7onjjZ^^_}ѣĉssswE֭[lǵn|CDoMj,p4iҤUVgϞŭZ200(((}v^^]3''ʕ+|??+W¦MtڕbRVcbb]_ݻبTW^T077W*/^޽zͽ}v֭6lfsrr"##+:@x?G=O7|+o={vT^dɽ{f^W_)Ç_p:QQQ#F`@@ pʀ@I!(;Pd1uzJ :t6lWV8-[ֵkW}}J ]͛:ǠAիokk{Q#@x]ˣjd@ 14@Aml YR,%FѶ8D\.ٳgմ3") \mh%˖-|G E yVk-''c JѰ삂_[3.kiiYF5Zb v)n޼V}||fϞ=iҤ˗KRBq…ѣG{xx2<8##֭[-Z`ĉ&MZd Uq2кu߿dӦMݺuqWZ%f̘ACN4iӦM \.ڵkAAihIh޼y}onJ&@ gٹYf~N9ڵkzT*ӧOuVZ5hЀ߹s'77Wa6mY{ZZZllJٙjՊRb#""*]|YYYC6m888pܜw2\]]6l׸qc6ݻw͛Sh%C 100PT޽{:Q1ʁ<! Z(o)0>W;\=O3~xZlٲ-Z4k֬bXzkVǦ(*##EOO@6m$ׯmW@'ڧ- a79^gjaD&w\S_ a RQA bXֽWEkjuoKquϺ" "2D+m%8j<>-瞜νy6W2kjժU``͛u7nXYYd2XjժM6m߾f2eʟ?/hٲӋjʕ+8έ[nݚd|`$%%mڴ3==&L l_r_"DEEm޼*JnZjٲ͛7)u{"##׮]~z [l,,,eŋE(zzz㏍5jl6[T޾}{֬YAXX )8::RAlZQС֭[x<ŋlٲׯSڶm۾}{T͛;;;3GEGӡдiSWWWkkksssBC+ÛJGݨ= \@p[w,8ͩ`R֮]h˩jT*?~|ii)ǫqj\n~~g(N.?{z/ :_;i0Z@-.`6@>ƴb^0@8H$ ,HKKKMMMKK]L&zΜ9FYX`O?kyakk;a„M6QӪdAq\޽{O6y֭1@FNn?~bBa[ԩSyyFP(LLL-uVii@ 4&ܜb5k֌zMKJJbs14 ŢKt6900033SOȸ}vΝ;tP_; '$Q]Kc*8ِ׈F 7x`wwwJGϞ=̨upRy9(..>t?g2|>wssSz]466K.R(D[Q)@ Y\\\߿_D2֭[T R&9n8[9sVZ5p@jlbᆪݻw͛>}:#*ڵk>w:i4={m9sf-/^L-x{{/X`ڴi&MwIN>SN˖-}.~˗/~ p>Ҁ7:*@7I}@6>* J{577/++|={Eާ55}}}cbbn޽{J}KPPx ,+/ΘdF(;@) g}BxTF>b p XBج^|ʕ!~h{%FSXXݲeˎ; T:8p귺GzzѣGGP*TԯzذagϞu Gj)Ps`sssRihA#lvAA^yQQX,h[[ۙ3giӦ zj|uT&:tz?ráϨTϨBT6ܡ_t I5'HN@4ìÔk!׭[@nJJJ #GਭSdb%}x@ ׂxnűU\EO{EE͛?>l0jYhhիW)u@NNίZ^^>m4?Xd mFqٽ{vI2R&8H ޶M+|ɶm(u7֮]ѢE Kd2:QQkL`6 H{p;w>uֹ}TP[---^6(@e.}\8M %K0'xDyyRC \TzyyEDDԶÇX,ENo9@ Gzxx`0eee'Çe2T*mڴٳguU^^,ʂrssB޽{k׮Q[QQQBѥKЀP(VUU5k0Zǻ8<x{R)LFWt̞hl@5CT߿`Pl6ѣV2eʤI^ᄡZmvvD"rB0%%}~0ԯN <85Gu}(-q;rW ~m=Ccx<]xƍׯߞ={4}ܹspp0ݽ===۶mP[b X -n׮Sm$??_.hBWg$++@ HKKӍ7ieee(blmmmv%5jpt= G ?~\UUeeeEyR>>>rp2 p{D$,n+MP(۵kץKDbnn01M "77m۶6JX@ ^ Lolffuz BR1L(;gjJEmR#HCc]jYC111666ZLX,66@  jҺ({\=XwخciOW4kcLݸqcL^6;Pclg`b=&m o  sN ]c 0`|G- LMM7l ,XPLdZYYY[[+ zb`0۷o .lܸ0%Kڷo%AAAB0**ߟJ u9ȑ#+++8J80\>v |>q`OƘ1cJejj6yB* Jǡ j$88r˖-ϟ?7L=sӡ:;wc?VMLL JD"QHHT*-Xx@1qwÇz5EEEoݺujj*ZҀWTW\/u7L@kJ(~ 5.hZWXWWW3 =\4L @ XnjS]]ohWT*J/BOR<ˈ # p:V cVw¨RalLPPPPYYVo޼=h j\wT@ӚLP' $ 1h#/9`4\DAe@h&Ϳ'U xVի.;eʔM޽{M6 \r <6>[#HT@vMW> 4l,Oy)q)-93ы=TXXH ׯ_vAiik"##uߓ7kx<޵kjsD2kعsg.[^^1eʔk׮f Bw;D p,,,̙C=tҷmvƍAݛ:wzs$''7n̘1 xO,776֭[s?~qT*UNN2Y d2E"moj1ctIP\vmҥu#(W&HQ@ ^'{]|y9Pf͚Aхz:w}Gibbz'OR(WÇJ4i?ez+/Z pqqIHH:ujm6ýzxb.]jB:u***ёJ\X,6lpƌ'Oo>66 N055= C#iM(z߇/MP}K`.NR@ pd`r--->bbcc;z'%%zMMwW{n*O^OLjSC8 ;}u{k;::>Oekk넄U<߷Z@ G'|bgg{1NNN>Ϟ?yťd[lYx֭[O>]^^Dz֭[Ǎgggw-ߪUY/Ç>D 8::z9VRyxxh4gg;2̒wDρ|`6@)dBH% 8sO+(p3@:7W7ܿG4ijժؼz`1+WxuaÆѹ(_^UUe0zWcBL-@x1vJ.b111|MnݴZmLLƍR)]֭[cǎ/gbbUV={F;wfff5*""q0y;wjpהKT*՝ͺvuʔ)uezh߾}9xk@ zkJ @FfM:5+++"":SNѣǷ~k`5iӦgΜپ}{EEU":uW>4h;{?f@+XZZ5O> w]v۷6󃃃?sWWWU\\ϟ;wNTٺuÔ)SFEEE%%%͚5/@ >X<`8x/o%TLyY3@K !0Zg @d@(_Q[YYM<j://̙3ugϞVqD^^^xxx-bccvj^rƍ;w4m4###::ȝ:uضmy>Bp͚5^^^O|ß={c5kѣ/]t/^H$77CݭF4MZZZ޽5 UpB3s̪*r@ `c 7f/@Kf&ꉛf_3;#i >8ox=<<Μ9ӣGZJ0`3g֯_?`?XX,>p l6 tڵ]xyyyҤIW:usBCCngϞ{ZXXՎW||w}gbb`0lHdjjJY훒Ү];>}E ‡\B <eI> l5 xl $K*/^z݀b l蒓/2%% &777::z„ Lf />裏>ڵkJJ_~:v=vشGum۶MJJvqqYrŋcccwء;x=zرcGllٳg-ZԨQ#vlllLr 8P [5k`~qqqqqqgΜ![fk׮Μ9caaѺukST> PXgzV dt+ @A"NU*T*rRi QGU\\`쾴ZV4i_CZd2l6-p|[n"ٳ'**jرOgΜIGvŋ͛7kڼ<ӡCOO'133p8L9ɬٳ;v1bӦMwp«Xbbbjjj`` _>|Hn@  E@z)FfQO 5{OB L- &wMLLT*VU*ZV(iҤɍ7rss;.{{Q;U{YZZߴz׮]Gtq?{}}Lcc4^dEyr]`ӦM+W?ӧǏommml#4[lxT7#w@ "p `D-UR/0Te*` X_6FpHHMwU*@ =X,V``X,޼ysvbnܸQ&SSSBD;ZhΎeffΝ;5r}h4ZVO`X&cmxXR{R2(xb n BQ[G&j333BsssV[UUwIyyyllʕ+É':88'|Ҷmۭ[=zgϞ۷'7@ "p>0`[yZĀ"+;`|c~"T /9=uQl u++;w#)//WT,K(,,ֶa3gk@.S^E4...*J/0겲իWQF=tРA;}taaɓy<_@ |h@#Of@7̏&NGx߹(5(gm5L #-d2Ynt^^^9LaÒsrrđTwzxxѣrK̬F [ʒ24,A@xE^xgffִiSK.2L7_O`0TNǏ7jԨ_~@ "p>"@lJ*/^Z@8=wt'ew *@[kH܁%G yŋ еkW"h޼y\.wz5  ho5kְX &P%#G :{lQQTzaGGiӦq8j?k3g)ʂZ=hР>fL9{Klܸ:""@^oݺeT;C =z;$f̘$\f@50\`{Ah^FУ8f4@pPgZA <@ ;*kmMib@+)J\Nn9@ ޽ٳgsέzGDD :zy޽5' >|„ *f'$$̝; loƎKx{{^zՇ&W@ L5,,{,('''99󙙙<_~ e\7/]444dN2ĉVիWE۷m>}ccc󋊊<ǀ &@ pxz$ J&`$+PH-p 8fPh <3+nܸȑ#cǎ3f?{/:t`0-пjasrrzIm{d2Fgdoo?a„܈YfEDD̛7-;{m~嗗.]ZhQyyy>}"""~o֨v|/^DFF&''+ Dpjs;ov[s\.Սjuqq1yPIiZ7X[[޼ySvUUʕ+?~\<1bĉ' ?cw 7fܾ};00P*"~scbb-[`ʔ)7nhݺ5m۶;ۋ/]0iٲejj*t"///]㫯񉎎^x1e[]]}Uy}Qz'`^}Sd P/h @wxfW (1GG=<=tҹsNi*jׯM:Զmێ;4zӧ=cƌ+VԫW/@`G&..nԩѣGܼ޽{wѭּyN:)JFT* [p8>>>mQQݻw?7vvvxEEE/_nLޞd?֭[zq͌ d[n=xCh4`0߯[UVVVV|8OZ-*))ٹsCt:88ܸq#11Pశ^xH$bXjjƍU Ŋ+ZlrJ%)..^dɵk Zn?RWQQq5ku,ǍgjjJ 9s&-pmᄈ-:##8>䓈[[[Jre2YLLk ccccccSZZCŋ͛77Jਪb0,y#FTg/^YZVO3fLll˗f7l䔓h\]]ZZ~'پX,677J'N8 ?sJebb"ˇ>vXØujffFy(JTUѣ---Gj|~EEիW/^Ld2MLL /eQUUE2͛7;::( 6]UU3g$6mjmmmnnP(++!CXZZ:::)J򴴴3g,,,VZEi1L&SV|w{agg1ghnܸA@ ҋ/;;;GGGWEDׯUʟ?>n8ӧOS˗/ ={ڴiC mGò2@_weebBxstt|SSS#8vX6mƏ}Z.!|\zӧ;wlժUllP(|i'uU + HS8 d 0@fU\L&u?iӦzULbcc|rFSDqҥ۶m ؊qqq0Bf͚wyaÆݻwÆ <==~]x~){#GΚ5k}(ɓ'gCOq}^^СC>}JMnjcǎ֖OcgggTS}}{jy<^^-[vaaaӦM3fQz]5SLqrrZ|ٳgtyƌݼtҥK޽P "00dĉ$߇~WV/77wҥW\a0^^^tt?J~C>{,Zk׮'NRRRRRRڵ}5ZܹQfY c̙]v ݵk]_~|VWWݻOPP^Z(~٥Kofٲe#GLјG)++裏B@ 0_… w"333&&fAZ A(cǎѩS_|nݚʜh"___D" t\[;vL7ح@ 4iRBB޽{kS lmm'Li&aа]_u؃Azz,F6:uT^^N-׈P(LLL-uVii@ 0*89j֬V՛z1u\(&7 3!}vΝ;tP~ *ߞ$5r޽I&0૯JA(5]\\iu5Btex5JX/J)+:@zVWWӏo޼Qj=߃t(?HdIqVZSc*% Fqq1%Я&I%b2nnn wޡoԨޫ@0J࠾7o޼yM֪U+PtgϞ e***Ə_GQVT*׮]a77=z JM6mԧOɓ' J5kܿY"2?uGNy4iҸq㼼<ݟ(Ç>|8$$~?GH"!UUUJ&9/zJ | '|@P9` $իW\I[?>x`ڵQ"""LLL@˵`t*H3 SPzAu.jZYQsssRIw"l6U"X\;@Μ9M6TSWHKe2YZZZHHȡC@Ǐ/++](677/--S+**J \zSqz xDѱco`ZC>\վWŋܽ{SNinݺYZZrU4^>,kϞ=D ㏴ 311#wR=eWG /4 2D&rʯIQk2h4ֺWLOh4@ 7f߾}ӧ֭[pP:z8p 1NԇЍ76nZf axPHY*F/[E$22jԩ?̙3gΜ?zD":u*8TWW7@ @X]$0@s xFU`L@we &V Xd ɜ;wnm#5k`YfZ۷o4 IDATZZ VUTl6qѥw8p`-d28J+""";;̙3L ¢u_%a0u*J~Ayyy=}7ދ/te8gVmVWW[:***77痕OjBrz*^L** =u^єJѼ:oqww7ʡ` 6Nbln߾dĉcǎ5`PJڵKf߻wOn5>՟aÆ5ѣvG*k2ԋN 7 C4@ |>\̌Z3v"J7lO?5k֌`ԡddd4nܘ'''0ĉ&P\\|Νƍ6l0q&M?>22pW\yD"KC PdddS)]k]pK@t֝wJ-n{x8_ӚZ)\[ lq\*T޷~[ѤI˗?{lΜ9zTԶmх76lwMܹspp0=///l۶mBB| 777.KbH$F%%y]dggkɩk/[hhfK$zJ#--ܹst$gkkm۶#GX,\7jԨ uiooJ8㪪*+++hG.Ӂ^S+eee[d2ug^d2y<ݑt]I&.]ZvmuuB(++{Yn"CryAAojZ ***:z(n5L_KRTN:ݻv`Z[[>|gϞzҤIrrrt@ X,677СFBUjjjxx=.]Pc&7n>óg֭멁ڵk ?~D(...,,,K#Q$ nkbb2a'''+Z :'x?^~~P 体r0Epp-[?n|62;wɡgjt4H"J3"JF0\n޽r=*???: ׯÇuS2J ӅC ۼys?? .J 7dGPYYڦM@wlUJ%ͮQ{R(zwK$Я~A^Z\\am9rZ.fTL6~۷3gX[[Sν.]Zb^ ڵkGҫW7nT*}X,>T*… ]'ȉ'lmmy\6miiioo?{:*) 'S }!p%@c gXT KG@HvQFn%jQ#[Ċ"PQP,ޖ]Nsf̙3SL@ X)uyZ7r{mvؑ^ ƒ .422w^߾}9`deeY2`X|>_,׹V*l6[Ν;/^\hK~~Ν;{avrDf(-HJJ믿&L믿޾}JWWƍT`۷/[lӦMQQQՎ.\1 U(^^^'UWW߹sg-JKKR( SZTT$V\I)/ׯV*W^ _dI۶m|@"gggwwǏݵDmrʕ+_.J;udggc:ڋaV K*;wPرcK,7o˗b_\\, boo/ɔJP(Ƞ5tuu[lbL&eXw7)6D_FGG?{bQ};w￟9s&e{p(-e˖M><<<\n^^T&9;;+ kkk///&YZZVO}|}}9p&0 @@IDUUL&R0a¬Y(LnݺaÆW(&$$,]T 'EMM͂ ƍׯ_?@1k֬h|p…׮]SӛWJ7x`ŋ0vppXv-Sp\]]]\\ H$=z45,&M4iP(rիUtuup*dԉNf͖.]J2PimڴUVn)pƍ+V8͚5k˖-~vK.ot@ƍر~xS,nl7zZɐ@ @ 4#<<|Ŋj桡֭#󋊊0`ޢ$$ԡaÆ`U.@ +@ S\\ܢE ڮ?~ŋI|aP6R$N@ 6@ 4e͚5ͥWUUGEEh0 &h={}3gΜ377&@ ‡]. 4jԨM6l6Ç999g>&NNN:tHHHp8ZZZ2'O@ @ @ @ @ 1Q!GO>׮]@n <<}BCC ߥ7`]]]BfO:UTTG[[{ذaJRP'OVWWG@ Od@ Kfdd$''WTT|򍌌ڴicdddjjZ\\L/++...L&Ĥql6Eƍ7fXDA O|>?::Sʕ+=<|H7WOO/333888&&FFÇ|=҅ .\O=bdd4a„={ ;vܻwݻ7vvv,/^Jߎ\.-6lK.7o9sy@ |ӯ_OA;m4>_UUE@` @s`4p*C1p`}5TۋplC=.> 45Ť*md2 04({< D[^`ͦMhرcLpARvڵkמ={3~Yܹ{nөS[Ο?͛T$RIϢL&>??oibŊvڝ9s-00p˖-'Np2;v| yw͛MMM#""˽oiQ .yfhh\.700󋍍% %#M~P@lr!!!+vW\YdԩS!h"[X4ְh`!b ,zh^8{@sc ,+w.|Kݻw֦>_>66QFtgggWWWo"SS :::{9tŢR7n|qZJR'ǎ[r%ҥK7o0LJqư0}=zd{̙3'22חw#GjTNVbbb~mmmAutttuuХKDU`Ϟ=/^hbbB@ ,l&ӷo_{{{6=xÇS!CY| daa! ^<5kJKKJ +|Pç.W)#Vc%Y3ͅ0Q#`jceeezzWӦMi4կ>zo߾l6[&`0</''@,--z˭+++E)שIXPn^@0߇e>઱Fm|ݻwk/Gg` D&mvΝkԨQΝϞ=K+ԉ4-[)//WuDP(JKK-,,4{|>YY8-(,,z* '&&&YXP0LGK.5j4mڴsSaJJJxxx=k/Lfyyq<==Uu E9" ϧ{OGGڵk;wR(uǏ߸qJիҥKsmܸqF,}}CpbL&d_O!''?7n޽{nܸgff.]L>vHL*++O>=u]vݺu̬k׮111WmL&SrBBrZt3R)4=yʕ={lذaƌ7o|K믁۶mKLL422ڵkvvۇ(5j=jh99 ƍPS)/t1TR4((}:tOVV֊+Tgo/_^[HW^^N@+啕%%%x?RIN lՓIC H7-%@\MK'*z >&s[ ,P 6װL=(5^=z?{m޴?~A֯_ORήiӦ .7#""w~iJNgϞr8zrMLL4p*++ dR*6nX-ӧ]G,O0g iժk݅BC>I.**קCp8/Ummme2~򊊊[_-ZHwQoo]D}iR&VTTshQ%|>vF[OᆱOi_In:p@5[J(,,tvv.++{@ 0I\^ H$z𡵵G\d;wVMqppro&ai.ޚ` drQZ+9P P U}9 `K D_EHN׊ހt􀆻D6n-'Le˖ӧO@i: BBBj*wܹ3ͦd~Luuu۵k BSN[ȨtNlyjӦM?T._ֽZjd2?S\}}}:GE(fhh`0d&Zlٿ =zʔ){4&ÇBf@ puuMOOR("-`v)nW._ljjJ|C*t֭QF_{])Jx(?411H 8bXρ_noM^@_ T:eBήNy`@x,T:=6PMV7x$?xg@зo_ݷo_K^ Ō3{ƍfPTTsΉ'8p@Plj?qĉJ2&&MZAAۧMd2Ԯ]ydZJUwK.Jr\ 888lٲIX3f3f锯Ӛ}Z~+VXvȑ#Ǐ/H\niii`` m 2VWWGDD߿BRSSl2qHB!ɲ.\i9 7na0r\$lݺU5JN}uP(ܴi  FIIÇ=JԨ.Q5}}W,Ю19jSG"̜9sƍ 3f 7W$xB#[[!Cp܊ .˗-[*-QUTT^zҥ'N9s&ɔdD5ɓd2Aee D"ùqƁ-Ǐ;::|P$::J"333#C+WPݻ?''QK… .]j׮vQQQBBBmpJ֭[''BȀXG?Hzߠ́ƀd~kx6P<J>N:g7gY"9s&!!%:ܣH$:x`罪ngϞw\.˻uVm_yyy{ϟqVJJJn޼Gidffܹ4!ܹCSC轨-//ҒTWW婺hѢmq87nW+**ݻGW߼yL&{/_lѢ%ݸ}v~~>VQYYÇfРA)))ԙ6mٲ9sJ'lqqqbӧwgjxq- %󓓓5O|=333@P(JJJRRRT0?|Ν_{}TeffN6}l6*'''55U5QT*(R]>x+dRIlr(@ 4z왘@@ 5vھ} 7V!|q addtUV!L@ hJf***(>zNp\}}}T@ A 7ؤ @ДSN5* 55FKKǧ>ڵkC]|ybbbuu5oڴiϞ=N:E@ W|Ty6@ >} fE"QVV֡C"##?)#vJKK>|DN"@ @ @ @ @ @ @ @ e˖>|X__CުUK.m޼aǎyɓɃ#}F켼ZNNN< h4@)ו0@> ; Y@VJ(O- ʀt@ 0$ ϗfff={,))9|,˫I&2ɓ'wQˠfaa󫪪?~|}<...FFF 8999??<6--j...NNN</777&&F.7##6mژ0LPXRR^XXT*P@ P* C4Y.WWWw/gڵm۶۷D"!É@ /`0CU*;w+̙奧G=zȑ# <0Bw3 Pp! m,`)9u4xj  7|w*E'pma`2kXXHrW^mffv]]@'''@̙3{dT.]7jԈSgyywMaXs֭`0h۶m׮]GqV/^}l/^l`` L&Ξ={vYYY*j*SQQ)RLJJd2}||>8@ jՊjܸqvΟ??`.]=Z(N4qi+ B%r(F[ X ,_V?0ͫf.oJ9ne2tWy|j@ X Kr@ī |asjf2}}}˫kw رc[juq//]ō;Օ#Jsrr,XЩS.]1pԨQvvvT\9|.]tyӦMǏ1ڵk7eʔwviǎM4Yv7*uӧ{cǎ  V]]]^^0'|LD@ o Yf͚5V*cǎeXBcTs[XXiP$=zݻ] ϟw޽… <O>,EEElmm۷o1 v ÖgϞ7ŋ_uϞ=999Uඊ E*h 4a%\ U{hd)\tf^ꪜyc8}Jtd@+@,873Oph{s}mllΝ{3glذv]]ݻ߻woϞ=d2٦M;ڤ?!!!!!Jvv/:99=|J\jj^^^mڴxpƍ{uqHԩS'KKKQ^^ollިQ#Tٳ[n.Y ߹s';enr1cl6%ʉ%SG`ĉEEEvFHhhFFC;vd2'Nx"xYdhh8dDP(BaxxxmCWWW++թS'333\ Jl۷U*?NLL֭;r %Hvjll\]]Vg&ٲeKkkk===TZPPÖ&M899XzH53eCbE Xd2======|>611NJKKU_ĉ jjjbbbݺurM4ױc6md={+ [[)SH)Sl6P(?>o޼Ft<'{@D].^', ";(djÝ14Da <}tܸqyyyL&v++R$))izzzoRoٲ\.OOO˭mmmsrrjjj4iΞ=x">>ڵn~l6&%%姟~Dt9sD|>!!!t $LMM y&p|LLLLLL˟>}J'FGGwIH$b0ԁ;p\]]EIIXp'))iڵ\.WT&$$ܺup,]K.|>_$qܐWWҸ8ZallsN+++TJwuY*ߚ7o#D"QaaԩS6ow,KP0 Pu .PN?w\---d2+++׭["^dIv\Bnݚ7o]Ç9R___.첲7د @ ҥK3f̨jv.\@Ţ^ϿzԩS ˖-vZnl޼ʕ+?39se˖z{ʕ^zQׯ˗<6lX|| yF,`+??@ j+`zb'` `aQL@畫ё釪{&MN8e^z%&&:99&1"66m۶5:ujDD)"666611qss۶mѣG===5g6m]cǎ;vMvЁ˗ok@0aBTTܹs-I^`[۷oRO?tU2}|\\\N>~zD++ӧkZɓ'O<ٺuk>Zرc/3!!!?C6mh;!C\.mHH˗W^MUEaaa.];w.-ggcǎ9sښ/%hѢU7n\KGn֬9$$$**ХK+W077SN;wI |-[xjxxxdddN(ژ=:..'&@Re@K̀u?;ڀV1 e } Sm5`r.Jr z= `G JX,j)~C;w.88XU!;=z4""bAAAGT2L--3f/_޸qW@@X,޹s'}|U__FQ~|rԷ,X`0KoM{9'4d fXj`P4*m…EEEw^~#h0 011IJJZrE"QF! IDATFFRRSd8xݔԧOn߾Tii]o>|XGGGUwܹs:P*))qvv֨!׋k;wNKKR~:e 999**J__ΣٳggddvZjj*]Ȝ9s6oLTWWZxرds^gZZZr|ƍ/{33LA+ESzX,f06j ==]КիY,־}=07 T`,  յ1|a-_醱] .}Enҫ:QW>",Co,}Æ sww;wUÇGr-,,ΝOMp8'O钽}UU"""9??QKKK^nP.94!|`0ԼR L&SS3gΤFYYYjj T\هRӦM)۬fǫ Faaauu53o޼f͚q8աۮ];333\&f͚2L;;;+J-RqqB4mؘm߾MZ[[nڴOX,RI!KpX,eaa|)-- KQ&Q*Eu1J`~JJ|ylmm= LJZJ`dPU_P֮xQP"9PRO2@YH5+]jB&Iˎ P}|<秧^A!ξuV@@1c.\&7/OArҼi\''e˖KRR*ڠ+CݝFT*Jfffh5ژQ%+--m$pPs-Lml6Ţ4BU5kV׭[wC`4a?|tj/({@OR!$;v]ZJ@>$W>k?"/_d0/_lvmm8UaAZZ[J ?~@i3 *7TRYǣ. 쓘B$ siܸB(//]qnn+F={lGG۷ovrB枦NP;!:`_|yݔi-?4ŋ ޽K@Po)ſIMM źxoF6@  ꥟-J[nS(jBMLL8ZW^+@xWxp {}{&X@K@:(M& 0w^EE @UQP%<>5b&~#} 8T7ZVVVbX5nG5jIm=TVVVVVr\s<:;;3 *FnnH$Rs e˖999ZC ccc6mڈbU`0LLL>rR)jNlԨP) 5᎝R,..H$l6ɉܹvָqMTvtt}65L&F#=z$ռ)T&@ _C.WUUYZZ$ _fg̘A 3L@ hP"|7S(Ҏ98άY}EDD'Dx?pq[?0b-x꧆|emmJk׮7nP )˫lv|wDTv҅E})++{FEÏ`p\???XѣWhDIIɋ/U݅~U$T# 6:552IhGl6[nomtd2JzLIIIÇq8Օ۩S<<<<<|xݺuvx"-++;pg޽iiieeeֶgϞߧ'֭[/_<>>bXOO}-[ z7ޢEq5i$##CKK`֭ׯ[nʕΝ+))SSSCCCU2,%%g͚5Ͽx{3Nڴi3k֬͛{zz6m_~<ԟ3glÇD 8;;?~-n#k׮r\&q8;VUUX5_oa۶m۷o={]yyMyyb3.....Zܹs?ٳg KKKB`05kW_lDrMUUU&&&ݺu+--UTUU-[l߾}.]|>…Trvd2MLL<<<~ׯN X!Hn*|||UÝTVVZ***jȑcƌQ*yyy7o<~8iiiQC*X,uQ ^^^C 122zŋ ϷW޽{@Z.HT(Ն*1eB R>pP5nץ+ S`\p \/ ly@6H9n d V ֮_@RRR@@3Ə/ݛOgX~tuuR/v}iKbbbcǺtҭ[7.[YY>11|Q9=Uc˖-ɣGݻH$u֒%KT/_9s#g``PPPtĉڎ!ϝ;fG=k,XMCMM͂ ƍׯ_?@1k֬$M9y$oݺ)é|… ]~T56`0-ZT*i_[,^xw͘1cĈrڵkg>v 700XfL&***wa:HիWL2s̊ ,^UVv}6LPP~}||2H$Zf!C Fffm$ɶmhE j՗j7L2j(///SSӪ/_***,X0`w],GEEQc@ FϞ=IW@xw>7˗/O'@ O ǿ% G @"@a. @ Q C^@ ]$1D@ ψ-n())ILLD @ |(%{ggdwsB"   qAQwUK)jE3&B$HDIAD7{ǧl;?x|f's~@ @ @ @ @ =Yr{)74\.7((|X(:ǴiZnP(mۖr8tƍK;v<|),,C<Xt߿IIIuuuӧO ;w!0aBPPP(LOO駟n߾]rA݇ fKJJΜ9[~aAXX؁khH"m8T*L&KNNNNNp8~jժ*r\.ߴiӛײ^*ifffWWg˖-;{,uXr8g\Q@9p7 j W` P \8@TR0 ,)0 8ļ`\htk@` 4Fb-YDVK$cǎ˖-+((صk۷'|ۘqO>dСǏD7n>}'O@920dK;p 7@{!ԀD0 h\2P(yc4 YCoH9^@W,pau l߾޽{GL722JihG-[tXܫW3gVرO>۷o|\.O?}Ι3g„ 111d dׯ?uGnٲeĉW^5ϴj*((?T*jG P%Hsqqr g^D MLBՖ >qƴAQB077={v{6oެY5kرct*j}۶m 6ݳg?iӦE޾};""O7(2uԚf٭Z=ztVBaiiSSS Ç S><}tCI&$$(J6T*-[vN4(442''g֭M ooo\N/\tiҕ1*_ j 0h / g4^KjB-~@5'%(pJoaaa{דbq۶m#""ta,/_<`AYYYqD"رc\\αEVo۶>2p?|M45jTF*++ϝ;}w W_)Js/6byyy1G,WTTdff۷/11Q366ڹsŋ Eѣ_~ŋ+9<<|Ϟ=2e i|ӦMn&2dHHH-gٴcnna<<ovttJ.]ڱcǻ}oߞ^$)ghhh6mbcc^JuJUicذa3gΜ={v-nmmɓݻwGGG=|ɓ:wܒ%K'LЦM;;;LvA?NV[?}JRyxx̚5]\~}ӦM̕ 7n\ӦMJerr֭[iM222g͚U낊@ k8weV(jӦM>_bqPPІ ̙s8p!C6nܨ+:dԨQSL9wܙ3gX,%S8}{,,,>#LV1~'fee>t/DQQQݨdΜ9\.788ۻVcy/...%%E,9;;_쪪m14- X@P=@հ({$pXb #E bInV%<]~,QlW p@YpaNNΝ;ueM47nХG5mڔQ]]ګWǏ ̱E&1_BQPPкu,*JR͚5={V"h"$$txbb9=?Ύ.//711qqq166e֭ۂ <(Jݗ/_Yqƍnj}IRGGmێ3F'hZD|r6}I>裈TH4j(kk={dee믿ܹɓ'?. {ys޽{]B4isss1JII kҤAEx<__UJJ/9R:uh" h4w捻xzzzxxsعsg.AwW^v[n]tٴiSaa!mK9::.Zիϟwpp߿ f͚E}{РAgϞ=}4ڵkxxUbbb$?@ /ptQ&%Zc6l@/X`|\RR?hР~IRi׮ݻɓ'|Hɓ'O<D!!!uܸqW\ꫯd2VeX@*DDDDEEUUU:Ç;0._Lתm۶5vڂ tW\iAF~:3BTۓ~\.z,z/T{1D+5OyZ)R P @o@ ߀ok#k1a r`*`PvչCOϟR8QF3\T6nܘ8R͛~ԩS^^^mڴٲe 3Ǐ9Nh޼aa@ 7o. 411 .\0sZ 8qkV\Y\\hX,jʔ).DBAAo޼yĉ:ÇӧOdt,|ܸqLFHLFQsD={t/B$mS{ճgE;wVN:f͚zbjrnCeXfff,fO>ݵk׸q#""^%)++[tiII m۶ 6ԩS޽{:0#G<}ߡp8+W\XZZ_^wD" СCTTݻ=ȑ#˔)Sh4M6=zT@  K_Bsss:lذƍA.spjkkkRtFR=˓oooߡCFZ4=^c,kݺu.]Nuu5R)H\P(ŋ*abbra]Jzz.s\={RhB!5`5X| D@!`|M]3x=^: 0ր|`Tm 2.WĀ Ui IDATN_e??}>|֭[/F[TjZCZZCCC;gtnnn˗/oݺI.]*H u(ҥK&!!D$}2d\.?~xaa!]IF#Jumiiy9fm۶~|~];VT@(& 2L7H$Gf\rggg]JHHHff&VXgggoowqr,K}x<2}嗧N:u=ڵk@VoNNN7Sn߾٩S'q6!!i/Y3Q/_riAkh۶m 񇥥/Syɂ@ B{RF=eZ]YY{nnS7WTTTVy/j ###JX,رctT*7nxK.%%%fԝ͛gggSܼ-[xZƦA/}cf[[[X{1ӟ=%%%<<\!U*U=3Tպ#G}joo^RN:uI$ѶfM|zrR^^^6mt)^^^y ە+W"ZLiٲ%B4jRoC}P=tPttove˖Gq]Pzܿ_պ!}t:<))P%Y7Z[WTT0CHOOrvvvu_P@x%DDD۷j\^S>(JD7h ??˗/wOeee-^e̘1Ǐ6lXBBw}gP|8@ _222ڲeX,())J7nE0EQG"/_I$SSS])//'>}kż$l@ HրT دpSN@ @ kYhjU)pL6-T*r4KJJ(255ez6u;ZmRRR||?˗뤓Ǐp\zfgggmmm1r8VfSUSP('E9rܸq;w|L&ҥK_TVV?~|ɛ7ozm׮]KoR -BjddffjRA%cccnw͘1#)));;۠todl޼y333344ƍ999FB(%^Eq8Z'm@ MUUUŵGeݻw@ h߾=WּI^&-\pРA 5jA...6333g`jee}ܲo8t>8VVVtSSS2QaӦυ'}ŧ`x(4%se̵Ju_J(6`H48@em}E8<@Lhvh4...h֖i/֥KBqQHFFFLLL߾}LTv]PܼyP%J$9.'uH,&Lp…Ǐ^Ȅ{{ݻ;99۷/dF***255՛}D"-,,||LERzZظqi˖- ,fzf(JBwN:YZZiСCqjuyyy5B7-@ 8^4::߿m۶W\n}nPVbŊΝ;-5Q;;;\<شpppxK Fc\޵kvdPeRizz se߲eK:h`<Ku\'@{ hN@P [M_JpFJ+@Լ=hr_5|mvرy_~_~ٴiիW)ڽ{wxx8}hIIIfff>}trmڴΪ`5j##.?LJJb^Ƹ|X,Z{nUUUN[655Ȩyl4J۰D>}O>f̘)SڵK-ZjՊbѩ9sssMMM{=_nnnNQԋ܂^EQLnݺUWWgddRZ˗ƎU]] 7k{<&2Ν;E1g|2RP(@  ""hWVVjll@ P yC3`_ n-g)=g\m 8/OuJKKy7n,k&**w}۷oUUX,>qDlllnt_1sLJV E֭V+W\!%,^Jqɓ'1bGEEiڢ~k֬ų\?Յ7o۷oȑǎcX G:q&<@9Pz(D(v]S^@?TZEgW`gZ yv/T;4#kLB,>]DDD˖-G1~xUQQ~&޽{;v4hRx<^uu͛7׬Y#SSSPhJJJVXQXI@KtppXhRTBy6l%%Kл}Z=cƌ+V;vԩ, m۶d%K|ǏW(<tŊ}„ |>Dғ\.w^UUѣGLsJ@PRRu &=~ƍ uN(EEEv:|0hyyyW9sݻu?ɓ'w!6l8qbtt4}ONN -G,7NVRiAAƍk:Bqҥq}tJNNζmjt-266~ѥϟ۷o.]Ν;'Jy<ުUbbb^u`˗/T*U*sέǂ@ P\\\o߾\.gϞb~%j^'Ι3'11QoФIwww 'ɞ>}z5D(=#ݳg3=é˻u.֭RkkN:E:::_A*СCu4u0l09]ly(/===11Qw$'/^hddԻwuˋ&&&j p  G5,=@m"r3s0(ޅ2\!P^0R_,o9@zݴn;**Joh(SNj:33ڵk|HO+<ݺu6662ׯ_-Zxzz8C`ddԲeKHfx CA͚5kժUwi۶X,.))rJ* ͎xҥK_훶jtQVVVz***bܺuKb*.@ @ 7o޴i^|M>|i#Chh C JϞ=ϝ;7dn@ ~-Ztq׮]q ҤI ='kkk@!Up1c_t@ %UP흝E"QHHȍ7j NN cF=sT\nddԧO>o]veXnnn}rI@ 7k8Ǝj/^?4h~@ [vؑҧO#J@8q"--jܸq$u٢E >VW5Ū*)){naaaO `_5L&+((9sfC/vA&L`iife2YvvҥKv&PU4Hxb\qƓ'Oo=zT/{-bqEE͛7VyfZZm*oݺ.RwttdXW^0422Zti~~> .~g>$?*DxS3@\y @ ?K9 8=_ )_7zNoodM*h O\H <{)&@+u>>72(==Po󋊊 DXXXxzzߺu3FCQEQR~ciݺ\.LIIyG'm޼Ç}}}=<<^NǎY,֡CΜ9CydXLX/\P^lYf3IR;'O еk;w0gbccg͚ձcG"pjG җ)cF63@.0HieG@'(^F@1z]w# u}:--~?乧Obf>#@ЫW/;;;VfKKKw͌"ڶm+nܸqŚ˝E"VRt֭<֭xJ喔Xڵkup6mKP(|D"9qď?hЌ֮]sZXXܻwFTd44eJ񪫫ϟ?vZ=~˙>Νرc- 8R)EQl6LP@ ^AQ'^/$$>HLL\reuuX,^`y󊊊ugP*۷gk׮MLLr:tHJJx}Yƍ/^@꫍7:nܸ +cBQXXجY3^(pp!@ODaG_'p |{ ƞ`Ō-@ e` tOhȁW/d3x` \\\X,sIEhZ777fѕ+WJ$;vƿnlժÇrA5cǎ=p͛xzz~wÇ?w\iߒarrrrr22Ǐ?heeYRRbffw?rV^wݻwh޼%K-[6cƌ߹sٳW\mLlll-[6zcǎ=~3رcMLLBBBhh֬Y 3f1c:~XXXXXX^^ޮ]!ƆE>˥FNbbbIIɰan߾!@ j8%ź{2 Ea*++׮]3eF]vٳg%IiiSt䜜VXAzСC:ȈbUWWk4VUUYXX_P;!p I@/J[10t1ƀ !J |L> +E@ZV1"66i\%j.eС^^^}QQQ]GigggPNLMMrqq\k!~lB9s&;H[y&nXjI~-\.߾}΃ȑ#m۶ef{fddԼyh][EDDtpѣGs8Eo=qD33wr16fz(-J?~QQі-[V^=j(7772Y@x8EaD_rxbddwV\\ӴiSWWWEQz:9 IDATryhhatVVVJMrlV;jX^Hpa>@ pn_@OA7=H p%o3f ~ 2fϼ I~~icc3mڴp^ :ƌsÇף̻BlvNjܹsee+W^M(^xx֭rwww### O]433c͚5j<OOyɌVsaX,]tsޅ o֭[@@B!(b0wg |򉿿#O^VVw߽w@x7F#JZ^7\.W$=4777fKY[[k4/sWwT2REѾ%\&MG; 8 ;A(VCe-oK TM nc`"P ~rzmc V(ӧ*w=0F¥KE9q޼yeee}ٿj=z7hkffT*u5DdTTTdbbR;lll.\ضmے:)ϯ%3ZuuuJJJppCL:v=Qyy9S HJo n.f"}d8{{)SZjΜ9tS@ JV222jj4*%@2#QJp8,\4MEE޹5@w*q<~n @ke<CpW+8́1՜SoctrΝzwdggSeoos`jjprrr9e˖/_ @Z-W*Z2eʣGO]]]WX!H͛;Ej$:M"ddddTYYY ٳg{{{/_ҥKG.]/^3\.短ݛ#***\Tb r !ee BOh48t.Yd̘1gvwwgD@ u --O>zֹe\NN^zF s1ejj@ }J߸qɉY[{{{+++סoH9QH66`=u)P4b ߮]#}M]Hl{^y@UݻwWzoeggy{{RxfǎӧO?{,sF1#Ur@ 0‘,TjiiillKd݆")&s@ z IIIP(l׮ZV(400$tDJJ޽{'LvdD"\ lӦM/^n]LLLuu{߾}O>y-<Oq1ʪ_>p j4z\SZTTR.]J/D…'N|Wm۶ =z/Q_5kkyyy@@@ƍ{C>//;w( Pż@ `ԩ{eddTQQum:FNN̙3CCConn^TTyafpxB!lVZmLLLFFッMMM333׭[gPJ+Ǝeee-Y$&&U 9g{ $|K@tx@p (ޯx lz%pYP=n_ϫrX@% d5}"4@+ y#5|@Vk9 ͚5ݻ_tDJJ̙3g̘1~xJu8D"m۶JcƉrgΜpB#DL˅UVB577c^Pꪽcǎ7n5jРAFFFLoɓ'5?~xɒ%+f5k7]8+VJ_}וJO?P(훓sݻw3_g4DRݛn=V+'L0k֬GPTVy#WUUhѢwz/͛7nܸ ŒYf ȑ#u666\.Ν;Ͽt3@ V+9ݻwg&ԩSK,!F a5DK@  _Ǝ{… .0_.JkB @xH`(-[ѥxڞ9s@ ›'`0-ZXbEnn.^"=zt۶m}@ XYYp8\^PPpΝO!@ @ @ @ @ O&M@ ='++KV׻ss!CHRҤ@ [pH@x9s}RRRaaa 1ciff&iR@ -8l۵kgff& ycS݁ :~ 2m2m2́{zS;;Çd`O0aBPPP(LOO駟n߾]rA݇ fKJJΜ9]GTTsee<ŋ۶m@@ nu2$77799D$ 9sZ!0554iRHHHEEō7,X@~KKb8rTFW`Prh_M Tvʠ 10p#W2x|xׁ2h D /pxwq8۷ tBƶ7P(mllN}߿Vjܹs+**H#`([p,X ((… ֭+--UTl6[ PUUUUrNNN|͇~HQ[¿!4- 2~ .~@PȀm p v(`8 H{[۪9q$P RN/#pz=NȨ_1yd{{ן:u ѣGl2qīWUVAAA知RVp8C"G _AAutnjZO011裏,--;vsxx={:4eʔ={M6t<<<ڴipݻqEJUJWUU~7W$;b@  j 0h;h}n(Ҁ m -V@5$(p<@G]v?MLL>6mڰXٳg6|>?((hĈNNNr<))i999rCCC:t1TJ۬Y1cxzzZXX8V @*.X %% u hpڷo_ZZGTTT矡mڴ{Q**33oYTROpvv>x\.p8'N,))afXpaΝ߿KK˂}߾} B-""I&EXy޽BH#8MLLϗrvv^b F0o޼wZV",_fKg:u;^pVZmǎNz(Hby̙3'O422ٳۗ,YHgpuu]j9qDIIԩS,YBW%I\\˗ W_q8>|Hƹ7@&M|~nn.$%%%,,I&|}}w9j7w\.*h݁ W\YUUu!J8i$cc-[\Yfi֭ R3~@ qppr/D/4i2~xZq ̝;wź2(@;|ӦM;qĺuՌܹsGC•Bȁ*`/#h%>)o@ ߣv05BV*CȞ4@%`V>5J`"p^Vj|̙3}k׮qƅGDD={޵dtgѣGkKKK-[Foطo_Ycߍ7C,t?@ ~X,K(RUPP½HԾ}WPPigg,H9Bj4jY}tt%j 4 ׀ٻiI& %zHCA\"uUYqYY]AuW]"A  Q B%Oɔ1?^0ʜ3gΜ̃?Fpkpxb NีZ>Qyڽ5k@綰Ɠ?ʲlNn[,+**ھ}rcǎ 4o'OǑr=zoKNV-{3Z(;Sh"__{nƍqwpܹ5`nJ/:O!r?j~ǻ߶6h`ڵϜ9ӡC ;ZWZu%!!7p}QT:.22R rȶA*a$MPmaXSz Gmyuez5㨼5 וFQ~) j幗=zhӦMVVVTT^̬#GGW\BY- nR6yp[lILLҥȑ#GtO?ԕ^***u<)//jB!nf+**r8qqqgϞZh4CVUIOVaǝ^/]Tmk1!n U ww'=TeFnCBhPu̟\Pʼ1m6O-"8Δsѓ89X5ePo=V| @ %z+))QVwiDEEH*uj拌,..7ʨ"8Vv{qqŋڴi#Z!l䥦w511J&)##O>ղ111%%%?cݻ+**ƌ#]z%BB38o.hVp j@V p[w0A[I;Bn*uԛfw/:t˗a)eee QFc;O "Kh*.]Դs2߿7WR79BoOp/]4$$)SbbbjuHHH=jׯ_`ѨtΚ5+&&ޫڕh߾}7o|Ep͚5fRF>,\tnڴl6B))?03ȲeçM >k׮ه(LҪU+eaΝ{cǎ)\el](w5W4$B~Xtv=999))iʔ)JoVu| ~F :tÆ `0۶Uii4|[ֿ 5jW,˅ ꟡E]Dd+.|(yXة `(ZhU.R>6PҪً'd UNQzP/pֶL;U[ȵ\NU*2ƕ*͘1_^bEEE2SZZ[o|GAAA#G2dl6 |;C9/wSN}juFF]I9BoVf488cǎ>>>&ҥK6k֬]vŇvzPPн[ZZ~Ν;7i׷… G)**ǫ6lXIIɗ_~)兩=4p0Cv>>))A zp8T*UqqUtp8Μ9Ӑ^:ռyv}4lPRm۶M.%&&WTTdgg۷f֭[Ƣ6%$$4l'Nj@EEW_}'`ʔ)/^|KJJ5k$&&v1>>ޣAC={TիW޺uR-GX!!QM``fsСs=cZz}ii,YT0Ǐw:&11Q_*uu6h Zt:ûwt:ju~~{#>>~޼y 6T&)33s|njj5jOh3fTZq~ UYJp[x2'E[8Uh x0A[I$8bT! <5\ E&hРi֭[ꫯvQO޽{+Ѿ}+ VkXϟIygW Cqq|rJek\\ܨQFcddݻkXejj$8n"Imֳg֭[{0L*&)B2De׮] 45jԚ5k^~eW5^cmVyoٳQF k׮Un\7|^)͛7WJm۶?u/YO?CBBnW.]l߾}ҤI|o6..ΣvEzqӧ{֭8pO?lٲQ׮];9~eO*`.Z'=^ IWࡪ R?y^a̪Q'xГa5}aQp0<9',YD^:uk׮7|7LHH0 ݻww5.“'Oꫯf͚j>c;v={򬰰[lݻw?7|HHH.\^ظq;w&''{mڵk׮m߾`c+Bk ~-[6o޼qƧzjϞ=wճX,kϯ]s#JBJh4ݻwgϞ?*%֭[n2vs/_|Q\\|۷~N:էO\Ã>|Plllll͛knps=zw;Ǐ>sWOZ)gON_S;T?C9|@u8k,c;Dj[,{e<,gUYR jUZg?ptt۫u?)|}}g̘n6srrZ7'0?]XbǎC WÆ YhK.͞=[R :;E%OUTXXRME3gŋ.]p¤$B!uݲ<JQػwc6o2}"<<3Ng}xJuܹZ7k4^~90=??cǎeKXVPl4lNIIIIIQqݻkNB!D5}=\ƍ x;v+ڵKq]w]e6DlK.=#?eee۷o;vlDDHHHqs~W[ZvС9995kSO=uС^xaܹcƌPV!0M2AXpB-(%B#hГ8E;\>^&pTfvUچ\I !ꤳ`լYW_}tfS^vҧ;bJYs.^l W\B VkTT{YQQQ=.yyy/ ~VZ}wrB+v q:mo||lW~?y 5s8w.--}۶mZ[.Z-VڴisSN1115hڐ+)~Azxn潫_!U~A EUT.sٓ8YYXA(ʽvYЁ{ǩ㒮ri34Zxj;nM4yWZܹs/\EV))))))qJ WTyyy&u՞۶m۳gFhq]:ud2 ;ud6Ϝ9swܩRB!OpT2avqt:V{#?44o߾Q),, f:g}ffΜOR^=Pu]=z0Lj=p8:tp:ӧO~NJ NvkZV߿AGI`wJ'#|P歍1Ar[>&aoma!̨ }Ip:^% mXPk4S'Xc(j5@Ȃ|}||ڵkl'NLy̙&M_ow^IOv{yyVUf'7oBBB.חڽ[XXx!BT*ψ#f? Z!/IIIʨ??-[~X~=P^^Çϝ;7###00wl6׌m۶ѣGϛ7﫯r8|U~޼yaf̘qq`XV^l:q{7mڴzk޽&)00e˖6m֬Yի̙3p?~(77ĉwVӮ]={O8t`ѣÇίf{tn۶MNGIAwPz+ZHrh}P v$ 項PV9ؠ)k/!h %g^|N~pB;֨ƐVutD`NP [n3s7o-Y!LpziӦ)]vs?X嫢7ߴZ{!Crss?o> /ɓgΜiZϝ;rju,YRZZ:dȐ￿Խp8>Ã>#>^pѣG9TM6=ぁS/--Ǐ߫WݻwWo8Tgپ};`䠠z(55577WNU!2a@/H#d;V iX n#ky:‘ X};C|=Yz8 !+rrȨmwNR  T:wl2>Cmݺգ˦FuܢN0{1L{ݛ9993gLJJ6lXpp/_z꙳7j &Ӆ %r%111}k i&W^!4B!B4_1cͳgϾ Æ ۱cԩS}B!B!D]hbʕ'{ĭ[>{z߾}w1~xT!B!UVmڴ)%%eݺuڵ^cbb߷oߚ !B!⺸{t{9sFf!B!B!B!B!B!B!B!B!B!Bq+%K4~* R z]!NC dy^@g _C8=9os!,,l{ollZ^v+**eGGG?CK,O"44t 0oÇ`0h޼F)((8u֭[lgB!Ff0}mZx!? E;>zQ8 68aV0,\i`YOŋw۾}{ZZZddѣ{/;6mڊ+}%Kknƍ~mFy䑳g?~P?)SwuK.5hРe˖_bC-B!2L9`,?B㴀סmCg[w% Zs!ãqxgDdddppFS[ѬXbڵgΜ"_3uO?}e^0`رc7nlXRSS~\8ƍ0`@ppp~~ի?3ɤlmѢń BCC-KJJL&ܹs8 _A޽˗] M67C۷o{(vFylR9B!B!θh  %dWm%h 5D@\v+<[Y:ňZ -!̓Dh4ӧ_|QRRsvٳgrrWZVVٳu 68{٣Th֬kjׯ__PPаa^z@iiiJJݻGkZ察7@Fz}^^^Y+ǁ{Fyѣ>>>_|fc+BIp!<S B=((($$ .ꫯ?:ujzzO3g`7okW^=zt:t:]^v)} tUyyyyj:88XV}ꖳgϾ&Mzw|rxBqrF{sK= r#i@U'eٜNnX,+**ھ},˿;6hHHH>yz)))gϞѣ~Re_lQfU՞T;-}6nܘi!B!Q[{^]#f8:wWx_pqTr^#++kԩJ}f6}teTHi4ֺ) jUYhѣ@6mz}fff9rO>>>>Kt: IjM\z-[t2rQF-]O?u%„B!N~'vR*%T@yݛ8`]Z^ۢ؁`$a'V-+ZZo[fͺuVWZS)CQh4*}׫je[.!v=((Ƚ088tLe%JJJo߾hѢ1cƜ8qbƌ111rBQvrUgPA@妺ˁ)-9k XAS57Z(dK` VcZ]&fi4&@TTJRVrQDFFV{ndddqq%f2%..fUSvxAAAmڴC-BzRȁn%h j@V p[w0 5j m\@;#DB'z^zǏ_pl6[FFF@@@||{СC/_ K,++KHHpb4;tp1JTQEҥKyyyAAAM6u߿!!!*E|B!vbCzU &ݠ/ڷo͛7_x(,,\fMllYt:]pܴilvϷIII@7 IDAT?̔7ʲeçM >k׮ه(LҪU+eaΝ{cǎqB!D=Ȩf!n3qh>ZT?8UB y/0+ރK5E$W\L& X`lYυv-\OYUәLs(TNVX&55JuZl/GGGWTTh4՚ /$''9l6 O>?yϏvtΚ5'eĕ|`[A:tЁe (Ч#: l(ftCI_zN:EDD겲cǎ]pt!BOiq{nwV 80~~4?8/NO0 h )xg hXo3"22255F[IV{?~;}ݽ g90+RJpFNw'ε5bQ+Oӿe0m۶rA&M$%%=#:N !Bԃvb8;+K6Cc= 8 a4l ^w q v`hG$ H e7N:eۯ%NttAVZe2ӰaCJUTTm6! KLL ޷o_P[7EEEum JHHhذwm'Nj*//O>e^~/T~WqAt¿B (ſ0>kGj=gϞjz[nUJ]B!$8uwn%vȆ>ɜmh x0A[I$8bJ`ʕָQFHѻwoJX,TIp\~/q pVa '9/rG~tY1E/&IRF !BHC0P%'pliTqoʽփ`r+,lu <oGxxf?t:?'ݻ:T*+̜9111ee?"""/^|ԩ'N&OWN(//OKKSX, 揂ʵIasֶRc۟*TV`PF'!++k̙ݺu;vo_@,!BԃvR{eӺ7z'An$8k“q핇syWNp:eҥ;wR;wMn;wtFFFFQќ?suѓ,( U8INNd{ j/_| zk6SRRf̘1f̘>11^ 7K! =8 Na-zrp9ʽ62>&EVvU+W%(Su]ǘ6 PT:ν#/`Z:N`>G+{Nq6p)hJӍl!r NQ\s< ilr⼖_0aO?ݪUN/!BHCqe%rI,h Zp &P8{턳B2; US. M[`0ƪ3g\ǘ%%%%%%aaa 4p_4>>^Redd([Ժujm۶ٳg$;e\r1u Oҵ\IN05]eÖFڵ;w>3f !ddA/p񰷶fԶ48p:^% mXP^5U0S'Xc(!-svgԩgϞMOOhڵAAAs 6'NLKKSdff9sI&:tp=o߾111{---urVN*##Ư*ntP,eiQ#<9jK\٪T*#F~A !Bԃvb]0 B:h=Un6h F()CJ!ϼx !.CCh_׶2nCZ:&DtbrK,9ydVVVYY޽^?~6mL4;8p`ppŋp^{^ڸqcAAALLȑ#׬Ypܣf ^ &4md2۷oٲe՚III>g}zZ2g bbbfsVVւ rss}- %ֳAtJ,fMgz()c7֭['%%i&22RӕdffYf׮]ʤ-B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!mE%@N- =4@wt 5d810C9o=4ذabŠR8q"))k_yttC=d4*BCC'O<`јo>|q C~x͛k4SNmݺu˖-rB)Ipqi:ރ2Oh`,}P -21@Bhm` 0H+y E.XosGNOoJj#GΝ뵯|Ȑ!sν뮻}Ʒz+22rÆ EEE{nݺeOC͟??nn޼ngP !B!L`*K"8-uh[PcYo nIq0<RV<B!V/\Yr BOIpW>tNxzPG:lB3ȯs{zE9GNz'Oz.]Ç 9sfjS~˗/+uzƎ۸qcŒolj7n܀W^gL&ek-&LjXRRR'&iܹ/~ӠvˮSqqMƍסC۷=TTTf;~xyOl6[iid!BHCQgJP u64".,Wnq"N^RR̙3`0̛75c+=wu:yyyyyy:W^ xZ/!AA:.?J>///OVj'Ξ=O4w_B!5R!6 pAtk'j$ȍkAT˚Uo\qN7n|jFzr|YYY6tv⚾+**ھ},˿;6hHHH>yz)))gϞѣG@@[jktj;"ڳwygѢE=ƍ= "B!n#D)5kQչ+ xkSg殻 |wn ZyyyGڴiDEEj=rw#_8NZBѸ6ypՏ?+W_9<B!$8m 4P^&AW=xVWpOrpoBp?5;v9sA̔tY_I^h4J>gOժjˆ\Bv{PP{app4L:*))پ}Eƌsĉ3fȡB!D=HCEpT)C.  r-`M܄hēO."6[iMnB{oXX|K/))l} RΟ?Yk9.??l6+\l6[9_sssYYix\$өjww?=:::555 HHaKo͚5K,B(>>>N`+))ٸqcuuuqqqFFaa8D"("*:uT{{˗:C;&Wz*9s"mmmȲ?b1 ŋkjj*++N4M0$I?}#G^ossu=##ﮪz衇Ξ={رsYtă>X__?55$IpHHu='O۷/md =^+6lp=X5vZ$ Byyy6l(++x_AAAffՌtݚ'NjFOTVVjҭL,..B===<Y^^ޫZPP pž={.]D%˲ձ\TTT[[[XXva(J__ѣG{zzcح,*E }>_SS5Mu]e4#ŋ1V|p,@8EQP֯_o&HSTNnW^)))4mrrO>!;$IXlݺuڵaq!is۽a@ ہ`cY*7`$() ޽{ppP}T\_[kjjXX^vL$`h4X3DJKK_x$}驩)!DAA=0o\r+S@zzz}]wܩX(b14/^N4JH[Z>f|Xp@J~޽h4?#tYVEǩ(0ۯt]7 #H$ѿzGGGnUMÜKz<!ؘi)oi4Msxx[ )t֧7olS0kt9ni )*4Biʲ\__بi]]]d><%v!w6YZZZ$Ie] Ø'/vЄGp\4 BQQuQVlG-[VZZ+I(Y [d6m.op͑[?a#`mD+eRU[[k-m^-JH$/_NR W~mK4MӬawB'lafEE''}A<$I\7HCx<R8`^&E1 c||ɓǎbd&(鴢 x|>|$k]UU]Ӱ'~%XUr5999}WMp8ͼӼ)Wd@࣏>,˗ci-q!Çg+Qsh]ràMf h"cccΝ3 #^ti'vM-- Z`dYNFOq+e/#IENDB`glances-2.3/docs/images/screenshot-wide.png000066400000000000000000015266741246314757600210440ustar00rootroot00000000000000PNG  IHDRemsBITOtEXtSoftwareShutterc IDATxwX.eaQ*v@cĘ$5NM؍FĂFFSe,fDfay{p8{;_3 @ .`  @ H#@ HQ0#q?0Šn黍?74 ؓ)u,͚xp~YCǐ[4a`ҪR `@vz*m)$0ZM]1mMplV7c,א}<ܬΖ>hwaYgo:/Ŵ599&+utRֈ~Zv5nHGws}xd#4Xjښ7Dr$TC&פѓGwvcVsxp0z}vY;U;s _mŭߏ | kx3yNIzi z{ 8=yjb>(K3naO#?,?[5'|D˼Fe(HckJQ㩁P&FHl8bѳܔiX30y#$*¢CꅇՆƩ1FU8 _Yt^:.@ ?oewJ`no+d]? $wÃRNC۴o(vrTk?lgKiӏ x/\K^{bܞ+z4rmCJNo>WѠY}/Ё̺ NXTu#mZz>vhtGv=Lwl?rG `;E`͓X_$hݘ)'"xjy 둪]{XU],BKݖwpl3m&D ^x'=w+µ+F:?qIh{<5C{\^LL[őJ!cRk~,T,vw1Nji G?:NBQT_nM2n1)=1⪕BGfN={OLhFu:xxwC{tk28-gʳnG="UPl4_rux]?zcgO+6]PggjM8jiz|簎mr9S15A\& .S UzzHIƵҡ.B~iԩћk,.hayTTO}w?t= _1gwbn%>;*v+43O]÷- 6o~EvLlU/2v2fq4_|%O|깐e,=9oֺCUc;Ԫ_} ե;뫈6DSŴ>ӏ+ x(FCy |-+R?^zӖ勧ko7I$:ŧwl(ܦstU#eS㡛_5_{C&0^%;ߐ ;23WJ_4z0}Mϋf?X0ĩCM[|}9baϽnX#Zun-p3dԷ]r_̺CrFEF.|NgL4g y  Y~j={;bŴ |nw{f#'|Zpv^ԄB-ְlN)$J_臦OM!Vez3ߌ۳x^ә;X9Ggc-=03?ۚTM˥=07ɊڔGETѕcf7"'u 1D: NJT-g۷T n.fp?< [pЏ*;q䶸2B_?uS] ݖu/+Qڧѻb3e(r|m}nk ʸݛT8?ڿNױrGQg~\yv(ޞՏbPphb<;I8,faiҴ/8K !>h$^YY"-L PaD  w"Ʌ8^On .TEjJ^*R+|]Hx!fL#*389o62]U̾vG?˨R<S%1'9CoT$$ e$G%`d¼urYDN>,sE~RcrXӒ4H\f%qBY$j-ֶ;$1ij(JV!jd?5|L 4yTO]lZq ?~1/xC'L ; ?^Wc֪w03nSʳtPg>3t\au0sBu"GF0]9fVs6t|1 yuy:O߾-ȮhȒZ9YbZ5L)DIH0cp@htEjuZ AQ#ү4V18t ŤU+z\Sj}Dzhے[\CP8 cM7wPN:i]K%z/Cԕ*,I1 ԑwg)hg?fjiij##wܻpuαPղ*02ʟXѪ'2t5P˫U)R^*\iGσu ں7#fjBK+!+(eH PWiuuc޳|%4O)׿"[Nt4t:MD.Us :Ӵ6RBk79*נ@ o}z c Y}GRTt00OxL @TWN :k1sƯΈ뻞<o1v87k'_Khͽ) 0OA`lcH n}__w>kҜRҷeϾZI0-ϖA,.R֞bM\LZIn,qJWc8¨A&H cvϫ V8pw_yTI닔R^Ri+'cٝzy(Kb+1TIU~겧eȫv׾o}ƾ_KbG3-ڏ rƀPg)yl~h&\4bmbW)~HY:Y &8ε'%Y"үrNeh{yT*9^·cG 춄l @ z~ Y66L'44֊[À]$Xz}Y?u$'xW1x!?,$EC5UÝ_vN-nêNRbؾG7غf˧e%]͞wi sXNCB[۹u0̍lAyk+=Wy3IU]{wpfջyCTU@ Bk-9:8Yڔ +W(MeiISL[YK"t{~i?+{̸w؀6m7[S%wc{X92κ:i-@}wR%ƤJ=c?{Fv9V?ɿdF}1S$ۼK褁A\]=A5F7``?`8)' Ӻɟ1o<?S\M1jkon.dTڌ)cn-'Lmoee'AlZmh{z47 GL Z th4y?qKWjP=}o&?Fԑ!:$|FwtZ:v;BqmncLoG_;:::8ڛq&z!+Vb?.;!*"kv 1C|t/c=0dW= :ɓ3K"fѸޞV^f!}_㆏Ԓ'~;WFWf^ڽ'QL 'ZOQt#X߀ɖޏ>=ecp? Ǒ_yEs@taٺ$w*3}~0&/ bmc֔sQ;GM?coy_N^m2e7ΙWfDbދ Հ:C{Ryd8 BV 8Igu_D˸=Lo0$->Wt:`h@XUS*w7-%Mٿq ؘ[.mcG|<E( 3{2Uz-ЙKxL$O lۉ_wJ9*&@14w-CqO*HZ}Uםc.E8~~~zB‡dJK6S,ˑK9YY%bw3BvΟ?ehKxU=s? 0###W#-)9W52KЊtpy#FV_>6 #F5cbڲ.B U@4y@Z@ /D9@r@ xksuq@ ^O|(q@ ޘA2@ Е*;@ Dc0^E^Cr"z8@ oJ?_@r@ 7%_H#$xZq@ G H#_d@ G  ;@ @ 9@ @ 9@ @ G @ G @ H#@ H#@ $C0#B #ću9'>َgEnsUEڭSQ֝.${I ΍W <<>yۑl!=ytgg[>i9wOi(ɡ1Y%38aXoOԲ7O?w_L2l}2ѝǒ0>PSj:ۿ-^r;fY)%_gNX`w Lmj `wwAI0\fue'QUޢ.1MhZ-,۩n 5;BTѦ^;}pˎ#x^l{[|a^>B$½Am\\]qSO%~L{ü9OX6r44ͯYgGU)[H#0#QcB|-:ivţG(>n6Ŭ]lHEɓ[gv._sc2fv}&6!>>?^#Oz'ug#Ig,?$Mzq~zXUyVՕ Yx>rH",:M^xX L? (ӚTS?PlwJ`no+d]? $wcUX_M s_Sʻ21@4u?G~Km? @YD=s p_H|gJ0v-Eȋ9r'SIVþ[&<uI8Y2ڒץY#fͰ4<o* K_>Oq :l -e.g84-ݻ)ZMz9tw6781&r-'W@}BX# (n96PN>z_bmq*3s]KjdW Ϋ@P&5*9z$0o?jlYz(rެu w_G|_+3̺CrFEF.|NgPqFܻ掕;]O9ms3I8_w{ItRE\9hԒ U߻ۏ ,v}[Jf>ӏ+}h1=+fÊug sSy2o.PG#S_X|퉴ۿ% W5ԫ%S j¼h .Culfqa~^|jU>R̝Uk$m?t tmRwhu<@?8uQ1`5*ILou_Y& jU~FR)(S{+ 7o4kmknkLJ%DuyICI٨<` ]IBͫ7wRN|ed^'پOK;~Uc-@{Q 0ȌՅj >>-UKTe'g|@fܶ+]N8AynB ;|u(]B-DZbUtCb[Xq4ND`Q|]|TLYeA~V7 iDSR.-SR*/Q-y8: Ȼʁ!;rHyA~5tXZMͲ *ҹ!il5]'s_BkCrs%b~EStn >X;mS\ΦR26y`Zl)@+Ga@Ze}>~%\x-~ҖgTXZ[|JQ IDATS̸:Bf} ևugc@CV\ԒWNtC '~Y:ajhg'(JV!ބ07mʁq1lJWJ 0_)N[Q{q+ J"m3ʙS3]9fVs6t|iS ^],mi7o== ƕiB6ۘs6֘M}$'W՛ǬU:`fݦEaIska4%^Bh +^qWc 4ku2-Uws?I\tѿo&31?hTy c l̪LS6 F]v/Ye?%lͭ*eG}yyєݸpRӥ wrEfԪ1 \/edsM8>4 d~VGH%wHd3 'ip`ʳ%ޖN-اdW>vDlBK0.0hK)DJX=OˇW˪Ȝ+z` FSG#EyM[i-rӈgGGwX=WrjDAzP+qna(mz F-M׎i`w*qZGL3"%Ո~KC<!*n|SoVƫq∀6=ϾBy}Ȗ-Mp rp6f"":Zvӳ;ݵi Qݾu>$K ޝ{U+G|ҷ+Ir]u| .ڠy *}͔Sjc~}oJ184o]_@a=paf( 2 w+B LVNƲ;y/ǍTI*v0cHF,Jo*էoCY)x[{o_TeJW+!.z6#R%"9q/0wiͺ>x=L ndžTiw)ƢG'=1~Sft<RKm JG|.x95FRRܰeIVl`,kGs6GȺ|, ʹE-Dz~}Y?u${;O%̵%7ƥdQLLv@$1pՐkLupw׺2SVaͰ 6w1ëڙ(u&ϟI*˕c 02bR/~tii Yb)xO?y@Il />NLHKGm8CyL1b_䄃w#yI|=Zz{9j ޽Yf;l@[6}H-xv,Ŵ$rN緪PDBK}GXH?Ԝ $t`񅟦4ሩa[Z FpbQ296r!VV.>}B?Φ׻PӶghԕk5;ю)+겖b\~+)Fzԉ̬3?4iҤjQsA#SOi ?dћ"_JGi*KKʫIBu3t1P?b $P߫7m5vŽpfkܿP`ncLoG_;:::8ڛqߚE?_UYTjʘ nmdO~^TU@ BUq궡c;#z@20|€>[{yêSΝ|>} mpBWĀ.޸]=vQ0~9^em@:8>b1KtYCZ @unEyk*u{3 6Y+M(ekn=4q= eY#9Q3Ŭ3hnCČ]{y ?xi9Ν=q ݬeщt fP?Mģ=~lmX<}y_IG2iVutyw5ugFj7?k^0BbVUԶ?\^@ 6w I8,='Oiʢ[!fձډdQ¤]~_V8zhxlll!@ 2@ 8@ 8@ x[|/*nnCJM| @ Q/hw@ @r}Ú]Lȭ}hN䟈m[6mn=z;o7RclBO&=XF؞:gF[#]hԫ}5)oޣ&vw0d>T mϰ.;GwK'C,א}<ܬO`!=ytgg[>i9wOy(Ƶ:jܐ8UI=-wW89qL>XY@şܧ: ig+?G+z~ߴ)a+~JEzeksĤx }Κb Lvȅ"<>|6zbϙhި ilmYI= wJ`5sʱ>cn&hӞ&pӿ(-z4%nڮ^XޫkFn`/tǛvh`:16?${|:efVh.0-l90߷F>ڴ|K٘`┛>]@z ?*5[ȸvr{##׈U `snrW8Ԅr&bp[vBimkL{f242uJqZ gx8{ZM8[,{tCH@gkڬ\[êd_궼{W߰nPIRVYǘT}Z˩SNN̹EPk^ۯք9VFW{h[׶-34Y7N?f,sd;/n~~HTI9P/.xoPk;K#jݢv0yPG uhN6&XU3ɮӞi9t|H{w[=9rNf{WQYZPY< ]־L=F_͠Ϊv_@A^f<@i40ڳ*ϺD؊v\1KZ^[2ٿrsl^4M0(՗,8d{EnS7X=S stTy@0,h8?\taqy@i57 ggd͑\Z m(Kz݉1qx]ũ.e:]%lD##;!mO4zژwi03?\r2jFv@)J::yzbpKG>dK i;k|v;qA~Cwyu2~ږ8fG=E1 ?Y~ ʬ;9w lv\=/-+R?^ңNzIr8rZO8Uh1 PN73p*h .)LxƘE{~Մ~qmJ$_`wĬOzvJ: JL;/u.U|AeDFʿ2B0#=zE}<Ǭ {B[̤H - Gdy@.η6fTI兙lBt?--/|plU 3$W8^Rӈӫ-spۙ\MRGݙ)9ӭ^AdM}mOǵ{tl,۪LZv}D{ T <3=E7n}>x5ԔJm¬d ʌ7R["-~+8?h֨ O蚷{QJ_X MB?z*rS|pz?qVvyyΝ9oP+Д]9vnzN"?"yޮXʦl06y`Z5j֨96;:{-z{O<Q"']?y+OkZ.foO=ͥ+5%yʦSOw!=ZFqM?Y(ӜĻwSj 39:h)3j*-Ȯ =JLWxuWWi &'oTc ˤNEq4&|{llXҚV##|-(*YT:1_)N[QkFGQVEhY8=,WVEۈ[?$~Y:ajhRk) 3 r N83Q)2):Wچ%-ҔKp[>PM+خ}Bz9j )үH⢋P{oF  :w4ĸVrϖi.޸]=vQ0~?g_ޡzn>>Zl oy'/6@(eΟ 6Ksue0_c䅷vxAwDce}#V]O*ЩmǑ_@s@taٺӥgH)nf7۳\ I ǯ4ev'>ߵQ)8)}{ʤūß?L{d ʲQGroѾ*~-[V,Oz},ofW7v%ėNz5j1:,x18T'NԈ-M];ޞT_PBg.1uܿ>yK&j>Έ՞zĭKiۍ@ h0 @ $@ f]ܚq^@ 8}  B4_'uG @  $_ kD[Ԝw#h&^, Ñ)IJwojI0! [6m[ɡ;@xo%es']$eW/Xd,+>t6\Afӥ/=^喴ZaHW&ڸ?uIi c ʓuNaǮ.|NHUz,|}SÃYZu4g-iAa@T_8 < 3 $UЕD cPF',r a{~6"elN_Uc wji'daZe[/i)ftrA-Nq&SRf2ܬO7{!EI_QGc|!_.C#Hw=Gɣ;;1L+ι{PtH>(K3nORɖguayxudUv[`g)91K:0YWypG-V}{#)Zjv^5beDCû;ܣ\h;Qz>&BkbwsX0.haypJO_O)IݸV:4E.1a:qjX rS'ݿqf=_[Ln.U(Mx S0vtF`7D3͂&sOcOU|aKO皞JboQpTr ITlŧVE0rm8Df< |4YE2~ږ8fG=E1 (moC'WG^5Y^|X AMg",/}22JyY%Qrn9+08$:)8Ss R}Vx_IJ )+Y*إQ" 1\S.g9w1))VQJx Ⱥ7?\pNzԫGdI:xX~ ʬ;9w o 4I@%c \&1҈NK $UOw)SpTܩ.Bk_y_d'f̒,ڍ\#H}P; jѣؤLpv|3rE $`%3J(fty6i7M"τO'R5ndţ3ݾn*k4慨63QHxm-tx.6ށ8ɹlN)$JHQ|WWG&5M;. tumnf`kkQMl0q8}ru_oJ(+cYwiƌ([c{jw lNTѵ<]|TLYeA~V7OP)yJIv#ᅘ116qc8u%yR YnNST&-~UlKyXP)%+xXTk;l5]'PnZqk+.Vic`ƹ?Z+*)ʱӵ-|(+<7WAH)߰t.3L<*{4;iY=ͼ~2Crs%bTߒ_5q7yg?fkd;eTfqrƗldm5d2Ήɗ;f;YYZT^$9zp<~BӞW rW7)s?' =yxnTM=<zNJ_{bj1cj>( 8 +ۮ DY*R@ [^`R: ReOAqqٔf M-MOeLЬ5,̳ 3`f,/㫛:es>kZ$.Lݷ9)|)=n"Ō2)b{gfw<$(Yҩ}SފֱuD T)ŎG _UG]k޽Աm]F/sʵJXP::zz7É}olNa|M=ѺM^0@ 1(hdww&WT|7V󒷍#cM=HdA46=>XInpgI7ⲥ>nv'v]6w,i7morc|X3) l7g[e#~g@iCS3tb[ HLoN\̏ OGހ1`l tÍbN)_2S J`jO~z6?^GNuo]{k>bփ&[{uL٘~Nr얄Şg.1iR={Og[YҿtS?H"Ԓ-K|56@?1[ƏuW.9e5Fj?|X}(=,<{CD=HXwLCXLusJ#4/+:tXF(E.>:41 Е][w:"i?8.Ҹ3i9ЩP6 zث%V]9Z {:ZkʗKۆ9x~d";|eV{8m@s*D/!#Q'XSȤΊߢK_47;t<)Nr@u0GvS.n;P($/H9zGՉ;ϔ;,"4;/c-SP׉^p' ^/Wc ϫ8w!~W-QX/RA_$pI?ίt3{&wv)X>ac |z^ye{N?m3ob$3Q!JLrB]"`3i]ZzЀ [%GYSVsi:gw |G|HF.0 G_צ~c57wnܕ/+Dof,JaCy:{[s?bF[{Dfǁ52CE^9hi5]{5\i2zڏ5Y!qhm@6Dbg$.'jHDf6Ň3&in  bֳ\}.2 ϩbvj_ Y83ȦI8z9xbgNe$N!2IX'd(udk\ ?C!JnFG&)b4xc'M:JւYV˖&`"I8JbTw+F!,֖ |Y3O0ܸ]6c̥E`,N:c5Xs>Z՟kSйCK'9NxAeVVڹONXl_YKs͎qVжQ"E@@-|(%d̋)' xraPL~I.I~_*Iwǯ,zY= fvRĖ\.;[GVoaU3Sv^uz+.!ᡞ 6.$՞~pcJK\ l}j(F._1ʦhe'nӐ7WvW{ky:5v@[Ev䪒Tq*gqJ HB>9K8WR X3xѴܝ?- 삗5<\hvm3Nn=N{~ )N^me)~c; 72 y V!Q̐+ . k-R+ }DGڏ+/ ۣ;}G g-܀QǒLʷq7P6o=׾+ ꅞN[]ԉ]\rnIٓuxҍ6<~$p NUis..YB#ж}^zk4~/_kig}L CBAfqc3sQ1nJ'yQ?ygsS[qo~Q&0|am xڏ911ϗ`{]=kRxԄw~}w40a(O)XZWfL1e9qOc]6z.<5Gng.7u9I[_Xܺ/ 4+xI]2uȊ8NlcAa9H49}܁q|[ ^Ddg۽<6Eתcemdžga$=OܠC^6)z r.ne7unI#w{ϫ^c[$绉GN` ̎om]]qz [;ʆ㥠SwLg\h|=NNی;SFHK V0x~]}]A[)Y q\yO Zׄ^h1EYXLd'%O>΅wžY޷#{f1 Xn3p):-Dblq3,}~Iߜ-r؇ϝb5rs~*zĶƌ[ }zfeiTc ؋])BsD. }f}I~F@%Oݥ)wiDI=Es>o+DewO~4YZlHaMwdm ]_+w7grks1% ]Oճܹ/Y` >cU @_qH[[Vw|gTEzs o~`y-UJ2ߩIQ92/^qf0^TsGȼڬS)NH+-v۷T~qra߸%U%$?]0?ojG~&/, ^}t7ijo nFEE M)wIoP{WBƬX}-"c [FWfux M~ml<~#uC^Lƽg8{~|fN͛eN"^gv|ԳY/,Pp3Oufp~;dm rKԁ#:1c}nsہʔ`ÿǶ}=]_26Ta4IP?=#S^Juؐ\fKh҃Kn7uI9s~ʳw L+2,n9Oõ,@amkS3)۠G?O-M\x7.-]TjtY"VɆ -[G/d1rD* _}̯)X.yԞ+,4SE$ab]/]"zjRHB.,!J Xl(iJasB1歧q[8)EFy]^2wer d}mg=@vUB?u{9|u¡-<,Z bO^wwm/o{L($2h0yܙk>Iw6]KI}J8~=cSwJveKE`]!BLgTH.r%iK;ZD?8ǜ/>?Xl1/>v7q寧}Swq%qش!h( 3 ;a1m}Bd_ ucPHX5e2q,nDr'Vݾ .GfjYHx!rhiOkKm>.{ Y 4WLSeLb|{:6hoW`&=S vрl\lr=V OjL<ڌD#P!ص)JJwֵSG= SbVN4S)ouX`󪕫?]ӕWo߮tƋ*|UgK.+%-8Ȼw/[嫙5_ה ebJj8$ yGDQiܙx!i\{V-2ī{y:ic^bf2dgGKx2f\,q1eH[7C'I[hCh*m/U}(* ӮݞyݥOooo/oO{1` ų2,YLSt\:h^. EtM.]9Ʉ g\ctiF=j~$V(FWr+U ,.`h D0&d pr NضӸY 6pAιkY1{\V#{jWJrΨdѴ_G]y*{fNqmDPK=;Oj7[x9?BL6 kfД!Fɒ~av@\h\Es?7%4U!||_8obqozenNn ye_|/O[o@/ԋjn2Uq!z;9{w4)QuN!櫧q@X;7F:.;PlԂKUI7oUd^湗*9+wiy{%Wri?/-Imz# <'-Nu{-až|=|Szf rOf/ nShIA_$pI?~p.R_{,xWϫ<мmAM)mAZ&?k.mClSr$r7m|(߃>SzlTi {+@^Y?^OkLRHq?OՃmbpqCdsVoh@%9ٿM5X.^!}lҢCcp iƋZy](Q~bԗEř6{\iOo4e7P}pۑzwxҔ// U1B8oY:7%}ݢoHveftIv|{,4cu@nnn~S67v"B@@@@ࠈ ' hM74ȦF&@v@4% rB #' t? )' t@@@"N@T qB ' hJ:N6T4G4dg5A#@D!D!DQ$pt, 샿EF4 a"d8&BfYcaQ`)"xM czq Ǖ/N+VQs qH1~Mn1p,g! !DQ@ cg1a8!@!Df+T~!. [srr ˱,2~,Au ׌+ǻC[5B!7B~:WN&ޏ X񙯿fo6; Tt}A/[,̃~jH⛥!Nԣo6~]>i~rM|b n_Gœ3t_Yfol.koʲ5UkT;/r dV}/v}86{WG:"u kdP:zVf_?yŊ_6\9곝.뇏&A$_oɪlqnكNGQn{+{sYbMkkҨשּVf#'\\޲Ʒ韆 9 rmKeqMQL.Jrc./f$͔76!pȸamĴ>/c~ç w3~I^(-{:()lr笓_'_bIPeyx~DM3"\R/ݺ"Y.?eҭ ߛz|znn WN~GG;B {n;rUYKfU㯟>Fj~lȌDHuɫzeFOiJ .ׯUE,2$9cݘ$Zl}]߿_3kmLBE m0R&sn`!V ˶ɲ=w,)9]-4'QWs=]qrMߕJ]; 9UI5}F^#qiKn_-]ze1nNrftWRuFC;] K2Y1~G,熃e;{%+?9\hBaQ),o ^4-,w+c l?e'+kn8ܧ-Y_N~;/7JrU9lnfeOX&z xq(m[/7h5z<兡 )f䛃(E\FMG8KI͆Jq x:I7ekt ?Mt FWqʦ?(4 rs9=ٻ@WAT :jMDo|84y۪]7K+tч93%D%-{͘>-br $tRA &?+=CcINVK,/c]xB, SPŗ/0=/u[h,{wTXNhon Y;1`^ ;:ƽ ]kѣwGcF(y'}zx8|߈,<.2Ԓ#$;3=O_$OC|n8pú8~,/>e<`گV*1vD}Vs1]l&?v\_V?RfgweV X~̉"$́5%Q: ?mXkȹz<͚v&1]&doݵrr 5klv|>Mѵj+{XY۱oX*I\>cja  L/$8`K{Sy~dC~!h츉f\?%?*>BT9`T-unkrRp7OGNCp{#6I+ q2c-ܽux致yxSe%¹]pVR5u!Z*=Hg2vDžsx=ViTiv[Ὰs%L_ sS@[ǚh4g9%lXK;w}!zam 9cɯNk. _i\r+PJPR i%p_mb괋ysM_!*˾{z*~DS9RH)yb4RЮWӟ?}[Lw4m!ھ̯#S$:W Nv]|_x;ߵޜQ],-OeE{oy5{Uʴ47v]RW/%ϡÂXdkɼ'/xm?փOӮb{G5E~gLyse~~.;`͉_?>d|{Anmhk8hJAзgM\x1߮2$6ܞ~G6yI<ňWtޓC:D^BV<[I˸*Q3B>3^-z]u+Bf=;w~F7Qyc^oIb[^ji97#'sxo?M W0m崚>=PRn^^f^nV^nnߦMc=%s@n>`A^.rL*$eyZjD2Ӡʴzq_Oy #ygL_;Xa~چd^_[_7*`>|{_۲3XUT吡NG./6Ta4 3)dDka=OȦio>vxg; d "n_+yN,-B,l @R{9XQBRKP<PIn8S_6_"JFA Xuƭk@'Pvm rKLfE:S@y**oRHBncP&D%h*\pEŽjkǬ3^b1NUkף4io}uo͑n[u}yb6 lAŭ]-wp )sx+ ]U=eb={/ 7 .a]\iׯMٝod8W: {*L:u,rޮ, ލKKO*5fLU\ r*ezҌڅؼJ! HJwx;{n;zcVo孴7^}18ёIk~Eè3?|{WI"͢a=濿,>^J+WnC-379AzXG!_o mFwǬȰsgϜk_w{c}Y|vSN=qڛ]Q tu,"XU?kg}zFHm9`0 P{Z+W~aJ ԈERa1~مF= a-c@`jj 9w>h?^S8'ͱzSe/Tȿ=ۭMN1 y*]nϮ꬇Z[W{<.29E [8)E[-+8yJ.6BS%Do'̷+X1gdc-ϵ/K\|eDeMؒ Džt;Wamn*_'i'EJ`UJ@e}=|孷z׌RONsyR{6<~:^un]5wN8~ksCv(5|~daa.A:Wg!c0"U Pհ@ѠYC~f ;0`S:us~?ȧn^nbyYi\_9ym Q Lޅl9lDߩr :geUG¤]k޽Աm]F/sʵJk6ZJ9 9BKzI.vO0m!V{/޼n7NdX3&Z?e.-qӚCY_" H$X jO"Ku, l7g[B.nφwKiMO+^c%P5\ GzYg=.Ɇ vCr 4 sg$ W^ =gVh U| az`jyn-PM~6GNVySEa\K\j3morc|X3V;>+Tc P]W::zz7É}olNa5_S[koViPvTC Wv){6߲ w5gU)rӷL<Ȼw/(H7Ev܋帊e⅗7}+j+Xw{,OH{i'^_ڸÀyD/x|^KlZe+ZWCLr?G@7#/^x1nPf"4IZv/C2+_=^UCy*V>6EIiG8uJžO CK{Z_V?רFOV69چ+aDTDeZSkYƿ IDAT TP*=2bKԵXu)֠o=;:2]իssgXއj9yzz\ h0:8ÿ\*_?z+WF^mA!09[yqW3 yc:,fҽ[Ȱ!:h1c4}mmpT1E.sjJ07UĴѬ-:Mwنː;tQ F|ۅꪻ}nu"r4qdw/{wp"M`sWP j#CL޲?!GQ.mlZظ}a^?gΜ97@iWu=K]H ;V>WW4]Q(7f;yx{y˅Hlj'd^9o3`ʰvnmMbaYr@ʁ v7kX.9w-A6ѦU@ۮ_x.PTq%مТK;'P x7h?ۜklZВL'kĀP:YN~JICC; ⨺s:K 9*Avv4>ٳmǖ ke"}[q}|{nO, ve^[w;Gأ؀YG{x 8ّ"JiLsDh-pivѥ]+ ڳ~uC3X.VPpt禄*:#b|v=.;kgl+Ήj c;;0"|t=[]9o 5Z9zv\ h0j)8鴾 i ry*[*K]J^nMȧx&]N1ʮ5>fqyy5kFE {̓Y  ˰;Φޘ6te9ٯaМwGl} )&[JbNDq >_h|$oLF^C;#H 3FE:)\s}珇egs돘<[dkbg2R nb ;lrC3ȼpj@<爢(1M L\#(h(!ܤh |A_{IpyrNـ~YEjZm>jlWE؟0ٮ'/}Yr?njixiD]qYO&B=.ueǧ̬/E4vV-W`l4Z_SA)*Ǔc:VSO88c90Fc9cYaXac70p34H*->Ϩ::sGu9qB 0x\ OEeqDO^*Z9=}g*k\Ih&4*,B s =+G Uϓ^ N&ǸZWШn do32W14 E(BzynGp(K6!)3"8X,B&c\y BESʇ B#oJcqrTg,h6= Y't?i`M jo\0 ޏ0y*gE E"BűIoAyOcέ]B9c5vׇ T EVP;tZU,80W;2 9+i8 j57ݒ(O@ȑ>We, @=+χxе0sV2~OѵbӞA\%RqyNB lV-caM{<#ò,p~{ݯV{S>c{>bo݃5Do0M:M}[*FRTX])tQ.Ї]5*t(M\epM1b sKS!ʴܴPl;s'r@Evo4%5uΝ&Ν$篻o*'s qܥʲFT 6~~ĥ'=\7 4,xHŸf; U0$xpu-_ [hw! XeFz0F֔27qm|/>Eݟ]90/69_naj*-zF|w4轪oOt9r9ww}UsjxJ6DIcyr-x6<8.LL@ =y~" Kne '!#L9ty~hS?w.ŰM" ܶQ> ן|{i᯾7Q~׵'Eޝz8i\V'% +7"oEwrո_+HF9}];eKrzvԥ}pP3zT^s,qhPXg@\ڠAf%L' ]")dֳsg}o0Ҫ[%$Ph-DW+~*9:[VȹYN! #}||4%^D@` {h*(/ -n"[GǵV^z]عC<'jNvUyy^kPv0vZz^F?o0% ]c繄 bav^VA^;O*{Z=óo! 0&]鏈جKKrՍxJˆcrF]~"Nf/2ޡۛ6ւL!jpͷ?cA7h4,qq ˲,˱,yi&}vqGGZ 2ĩ=ndd߉sCѮur=;vZ)Lb7ɹ/=&^J@p"_WwBIwCő2rAO9%< D0pBDEIYeyt9*A e۲\/{OxQYw2ԌiGOz?(U\(LiaVX<1SRrm,^%L;?aYӟ, Dz𪑢(@HQcGcFWTSmXaR: ReO yj gJCi|LYjʙRP.:U ^t$ xx⓳ؠ2>bdx [/ik6@mAqSxl83sxךs[pܵeMDluʕ5 uD<@&LZuk`X!ƀq3]!dZQ`Ӵ?DX}qY{^@'m7@ʨ!~XEN} Oڢ2ά&No_6'"ayY.ncu]kܰ1[#0`˱M-M Xuz!*?fZ`Dұ&'`)5!vogru9I% 's$r7oܻk -Lb݂[ه=k2 %^mM|A~rubZ/w16Lͮcl*nz0fh4 2 ˲r,k[۠HT<&Z%iLF:֭NLWsV{PR@۵t͒W9$jϊgz2u?+n dkSIjC X GO/#MAǡ$TCZQ 3ru=ufstbOKphN@GQeD:x]gU>aa$'0 "HR ~.9*f]uuU &P̀(~Tw媮ؾOJܮu9} {v,_wӆvhc9za/ e]U'^5*6)Y݀9DDМ8  $c ^[8v229!j/\8ӧ L'r`;c%VZ\#%mviYVG @W()+rt q;򽣯)xtwNcu"Wswmf\1'y~_~- P;N;.O[IsW> gL|ge;6<⋧O{ZԦ>zHo7W J%S/b1yiɞpN86gAm.I$ "Jx fbSSν ^D&>kn7:W\MQ+j5!6Q|yMpJ{}~Pjgӻm[_~ʕWL޹r墷9kgʱQF5}*lLGb#XXKa'Ix58PK udbabYG]FDDɠ\ED`Y0 @89Qv89K譕1X9P8"L#dwO&#XmX(b#++ ǵXlD$X(;Kդ2{mBEgmp)= LHN}EkqNօ#P"VbftȈ\!C &KLRNƆ.Vb%Vtu\Z@k%eB:H l7CVJBxbT\R=@BٔEEHrId[]j2!tGðy74Cc;F=[Y8[k՞^(Tx0GDIJ =.0005k>@ulȰ I,GC0ѓ&!( 'V h {`mP,0 d-":I @d\b:a\1`zHPEنPQ4X/.4A&BX 'SmA][gRF#Ga9EtN*\ -*n !!E GATM sD51(wB6r!=,[ĚBWOό* PCoL8htODTK+&Q,Ic#+򿨻}>%F B'KOLTo :hcQPdԷ%рg "0 ˰+TdpDAn|@Y5js+:7:0G8@T@s:ԃ1>=Z^DtR_hޓE$<U#,c%V ::1iOؘ4&En,xsтى5GSDNc(m!s<ܪ)P" []B0'$g""A,BA `҆ QQضa$W@pIaI j,|lK'R9m@D1>m>--Wkit) {ۖ2f\3)*AȽɄ$Y掆̕k `tXfgy6M|pS+7Go(2eJ+Q0 &.nCR$@q4ExD/>ṗv_fys?'w7VX s  ۣ1l^?O4/(ݿ?Q#çomm ÑLuwK >W՘q/?/Y-n _aJ6Uδd9Yyiݥ %%^%y}k xE}`֌u+e}x@Κ;{G>A}=s2F]xں۾]  >s3)n? m=.R?P~ު[It5ʉ&uR13gM>PӒ7hU&{`ތԺ/~a_7bn;+'4GPL`QlBF S\Mr@/Xۡ h%<~oɄO A3Λ5sz=ᦻƱ˟WMLEbdp%Wƀ>LᚏVWsNG>- 5BqW2:g2;:j 6}=n`p|6 0@K,L'3IB8@y0{\۾ؿLaVC/l-5?̧שлO:_> f3 zRI{6iMw_{޿w?nPimڢNGOfHo{iI0.˧׆G^6Y|ѝ&^s- J=s\'ٞ2gnt"`)g|}d TTʮ$(YᓿX|Çd|2 !j祈]j;FU|'Aӯ-uρ}?\_e:koY}=e &++''LHJvُ?q9}?x:$Ay~5a270к QVq}~_4G*Sw}Sƻ 9}{=>|u/e^[+mEW_2oW޳,6o1 ߿}sycvtu.|$Fa s>,V IDATgw҅ogڍukP#!2Dv;UHsC_->'HveuI~NyQ]VMխ*q|ߕvk!7m9 }_B7(cAeɻה ?YL'a?v@ W%F>7oy+cTb+=abRߴIg=ɮo[Bϳ .߶@`ڗ=יk%=0;i;n\OSe4&sv) @ .i†Xru?_ɨqj% ׻`_;W G 30F|ŀ/EpgYޕc}EEEYA>{zL,T?k٢ByJ>uio oD&l#۔DJ;}lC>2 swF_QR\EI'?qnhvVeIT[!O>+)Y#Nܶ.&K8g}QMp~1d|ufB00;bqH[~H_SFT݊ !k`G^å8,8O=}WQAߍw i0>CxRB'H%.+'^a:O6^_F"ڻϝϫ 6=+gIg3hl 4? }/a{1IوgOfI\ޛccBG'\{E܏s_\1yHpݕ;澤\i8irtqğlӫbL|=?O.U'Bؾ⊧f iǶ6xYjCqYH {6}yu)=:'Z(,KԜw;dGX;%+r"\͡JadftofbמSkR:9a.^#4T8|/[~fo Ep곉PkǁJ,^h f)ڟP)2 ;k&-ylS]Ctҟ~䗼zjц?痢Z g ޒ&ƎLe5Մz ykJٱ͇꥛Ϙ}ƀ-Z#6~]ޓm9`^*Ѷ}YU%@1Bַ5.k7T[v#݉}zCEz:$UʚU"C{$UsT? UAޮ<@uyicxw٩ٿm,@#\bs2fC|Ij'GC ti-rYmFvЦ p`ўIpI'`v"@ˆ,n`8 B TyfRъ̼Hϔj"!Ba|~7.~Ndʊ;& ߖ&p:*lXYq>>jDOxtr @'{?9OGvkjmRO׏)!Ϯq7T'^[c&={Ə8תTş| @ޛ{J1zOuRY+PQr"૷nϚp./f<=,<#ߔ#5[>< 4GM(_KI@A̹ >R}hy֢1k$kϻm߼@X9Q8q靓-.%EHX_+0=ۗk:,aۚO`?/zںsm+_W 9a Z*QCFÄk&6xdcnUU2{p{F]w啧 1| @_$*V@dʃIú\.EDAaD53$ vYI{uWP~Gw 8c̙~{}25 r+{Z]`BWW\a oy}N> Oi$T{׸>X+#݇/+G&/2IN wz&A55G8M PB_&\rayo\s''WTє_^uƕ<6ydH |^@E\a:wC^eߚ~_Wph0ۑ#kPS{܇QAb֘K#又Dؾx愁Qpp1(Tl[ux9ڽg̚׬}Cf<0x*I{.0Aߺڞ5ȓ7M\vm0"x뇬P㻍e"; ?}]??w=@2tT/=3abGu8WSʣJ7̙ K畊 W>tpZ[(V *dč6zM8*aךeO?X_[{vG~W:[J$pr߿GBwD=SL Xyĕ0-t޾jW|G\̓=&z˗=hڔ5^hL%-I3{os>- π y d%wι3⺦)*Vlڹ:g3וB׌DI--<\sGj5-ʠk;9;}&Q}ׄ>EQC~v.} )qlCMC[[~gFpg/<O[;x7XdwF~(@a>c6s (OV(o#rN`NPSMĵݳgCc競{Z ۅݦ]͙ޒ_tmIX9 X\6Jq+_(d *S91 .[B&U۶f=nv U&oۚ<7/t=\&'aCȿ<#ln⯟zM USC,,1K疮niP[ɫmxEQxA s ";7P|\l\@l(!ϥjIv:lz -Sqw`pDOPsU8GMq FH OO@ [=_]q F>Ԩހ4~k3$y׭J9# Jnl?O+͇ȓښuPSiQa0l\jZZu&Oμ ] ,#k.z&og~6.?6y+L9@:>a.\NznI%B]kUgXl\j8ve;Ju RzvN#Asvmc"۳p}?޸Wmbc%VNX8Wz*=E񵹕 lQwXtM֥}F#ν֋z{2+xxweacd$~_ߵMֹ}F#ι2TK9SFnCO_w<_om꺎sV>- yTW Oi#O# U܀eDA3g씞=OK7\F$1GĶq-'odu/SN;exޗt)C22O{?nk\^^ZVR`ǥ[ˆK]mݖSR>4Ѥ@ff#y7?D܂U?@=p{A"mWSyyvS7`$ d"8$ rw|ީ=:tq޼|.$PƚR};vꔕݹc ip>`Ӯ/,L+9;~1Eu ԩz?w#tk.9].(yS{xr!\~dc\d n8yUN;w윭re1&K9Mbs}z;bu7l]TcAyN 1kq[f2;vԹsN:v tRtg?ܗŸז%y^>fNHZKDŽx+Wi~c) eJ_\BmaIav hW1*]fiԸW,/J@IE?7<2%ڂ?W+gshB 趩q O@">j6n".###|O"Xu,NC-yǑ~J>_&{^BF")#Dg-=8Bxn72:0 2/+l_iۘ|Cto.kow>6򭷷Vކ@\wo- To)q詞Ds q\5J?ܓ|5LmokNMwx. ]/nvN^CRvDGܚu69MbpOҤ^y;,59\r6/ૅ6d%{G&[L.G3ad/szseS1.U;zc2A{nPnU+:]^]ŷ 5+H_ ^| w_B}~Uga iXrbo<#k 7C5b˂7eڌ;CeS\w*?&: @;,PW |۟]7~mX#4R!WWRv_NxhTsv+_y=u7s[7ip |}| , c%Vb.AR3lL@HP֒S1K dȒ"YGՎb_t aq 5!bFEQ$D@d\.F>% #=DA0;ZԸ 3*>jPs`()&DT|M7E˄ lb9Hd;Hvd+.IdM`i4YhS )Vʑ)URU2v2x;;8`cZ^:UQ& Aǫ7Vb%VN±6"0!2~3W"6,?IpԄ(CDq!B@@  ,J\6baYFlQCGw2MLHތHLVJ#D-'r5Px+ ]\!7ؼGy.A"X9JXYBU,[K80=l-V Eh'mlPu$ ? R.aBH{[5,UcC;AFD!gs Vf mQǾgsO4ӛG )JZ(?6{Zj7{g_lWs,,#'-S ;<>VK3g :w3;6!c-c6+'B >&3s3\ ]@)Ifц gc]n{+gY'Dmwl%"aaXADA%\$҅Pvn>z1,=9fKPh[p٧EKڌʺSh[E衺`(ʣ!Td<!(NjWsdh0g2Ag:gcjSUnX-Tmlg^)6,tM ZHvKJťUѨ @&鯣ĈڜQxhP=trڒE:A ށD  B8* òRdE!((y 뻂QG1 6<{lR w@-_{+vp'? Vq5@뜍\{_ c:~\U?ϝO܃ĝ۪|cn7tI-}(yO{qLk/a'݋>z EFk d3#-D`wS(OQJ/P>+-76ܶd˴T:D)jpbFz.YJhϴGjSCm `S/GE5 @D9ߧD$J1]@$ ú\ CKD l .T/ODW;eWOT&v3ŀDBVLmn1cq~{}06v@}zs HOA2p=ޙ`1b`_!7 z&ySY1J, ƝwW_3=)ϻ5\͜Cd}}̫gC IȜeՆ9R~"|[vgf-[X uֈ Ꮧv  ȗ4D~//)>,ϲF׫+ܶ=& 9ga òEi~{¼{uX0WӺ6}[++9ݿ% Bpx uwtKk>R\[UHkToTDV QrjUhE׼*t J!RA"J80L/^igʋP?*:UO?$_ҿ)D EJ6$ < `0 .,Mg7 ތ lڋIg0kQś"$ jc;,͍<bX0@%+ Cxhk M\7zg?)#gʊ;& ߖdNzdR? ~{>>j >:9|㏽gVQc)L!ijS=#q6h& #MxPz'Jj;l*uKF6Vb%Vh 7{"|Mh$izX=UxVʥm'辖Ip17j@+FfsmmGm"ѫ7m$@DTWq` 9Q` 9P!5 *%*%*1vu%<=bx Hp8qD< L$D7,7Ch%K(0 }IylT2'=U,A@^gR^0>n>4Fd¡SԎuu("@U}(@KI|7sd] taQ6BQ3ɕu"/w US5Oݪ"!TAv@rc)FƵkɧ^}w}uJ\qTBؾ؁R{3BՇN2q|Cb۪gJcP^Ę?=,k@3*0d_HP/ ۖivs"3:+<&h Q ' mIh~HH(Q3\T\Le2|}/VNXv(yCcB692:NXVZo@Le֊ rG$pk֗n\GA~3ƄCVd|Duw ǎ mІ1!9J䭚EGZ3s{bSu#LIK80W,(z;}哲 4U!rHi꜋W_[gN:#N@ 6\r}Od¢H"=>,%KOxpJ0jF[k1΢ 垏LEdJ訵5Nv@:/vn+G' rV-#}s?7 ^ߓՔTUTE YI5M is\ȸ<\O Ӊ L*[//~S2̭x+k(#{E$ Ƌ"lUon)7FGĄkX JoqoH#`$wMHU?N{'\ĉ (WG3C'מI YSVѭ;$C*.^u'Iqf );DZL\ǮmB' M}@qꜤgfTqP;iܣKnl?x@+OZ2K ?6;HqR<~4q?F[:D )Bl-tB@KAb%VZY)0@Z#7q"O[A=,㼂FP yz38'6y>A (G߹ s7sL!D {=s}"C,2F/YyvT\+^׍_H U6+w9fXO񞎢 6~NnI{ؗN;]ő y0J}=^\*=EϛW[{Ç1w<[(&R.)uK~?n+D@Hg]45^?HEn;;|D6Xs傉}yS{xr* [ XC;v꜕չc>V@Ri_&Nʳzw=t(#HUhlXZ H/(Ogyڪ"Lg֯wh1h@fpGF̈ǫrv.x&VRCT2(r?%"S, trE$'~jZCuS4o-K֭E')K_~)7c24nzŏr5)'Lݎr9Ffj˂7eڌ;AjW/\k~%_?N׭̛pnWwKO Q?$t+Wp%0R~(OM2‚J:wB$&{{c:@yH`b95~PGN=*MU'쯁6vF$ө yys-y>OsuZH%j#∴A6G*->*jW8G[hf)e.e%BU#ZQef%'}boFŬd8 SSGN G]rpBT7G-T,/Y`%a66C!# Q`e`-Fn}F:T5)qY S[$dD0 e@RC^EeyQhn5":d"ɫ\;UĢ6d(P㴸Tz"?5EF@`ȝޜ1"DFo;R4U'EI^U% Z690m)Lƨo7:"Q4zRtDɜBs\:߉nR mtNٚfwC,}{ZU ދκyG_QI]AukmZ/L8 % Fz=]:+~@@S $-2 Dc0ԐYRYVFnDձ82S YV;5ݚG1qmc ֢vFRID"z ٱUoI` Tf^ ʟIu[òE0+M)H Uф!{鄆pS`%}%ӞơUPd#' neHyS(+hjΖiD:-7tp7"l.d:5e '\L' "D%+]oaD'5 2f0 Ն5`hz!ffV3@Nzc.7c=K@ھSv,(7..%;/ҙӑΑ ?QpD;.8٩8FjYe8d״>.:&,lst1$MP$IFL‰>Td?R,ݖ1pJ0f1KEm-t-8-9_!yD ^^9^)Aۺߞ`uX/ 'JAݙR3"+́j-F(D4Zu"aςtw5aFio-a"X"DBltڡ(kQƧqGrsgs6-P`bW3fh@9V]95ctTk ZgT>WaQꛢd?RBk[8*ޤ&vj\#L,a)O0ڄ#E3Ǝ%JYgzTLB'c@~f/shT\4ՎFt,ii_'Tٜp U0{4{Ԋ$!ԃB=#wW)((E&DFJ¸&e w͜20Tȵf@|짰ER!Cy-喀ܘsEi [AW~**(cׯB.?^}ٓ_lϫ,+ݺG.Fʞʊ//h@Η|\T^Yv΀$V<#]]QYUQYU^YU^YUyrBH$6󊯊KՑ% L~kWVTͧQ%5a@WI' θ6 IlsËzG/hsu>yޛ'edh&trQ Fƫ[ 熑yco??%'ly+zD윤e)`0qq "( ('$ H(\ @2bm9.EUB7ʢ͹|TráaTK^^A }:G\˭ C9lCG]KzAD74"S+<OfTՉ]OόmEʫ" "Qܰ{:۷Jjz\5?)͘ʲgܖilԓ],V X ʈ$ _{侻w%}.-j0նïHlz;;Rh& -ChmNyH.ʔ7覿;;LVKڙ.+]Hi1PTɌ "05W灧'ԡהf\E@[Or'r}l=  WI߽Ň8#j/L1lt2r9~ K}ǵj!tw..@9Ѳߒ*~Xz oƯ>'íyz)c?\+20۸[[,z] 370<_O)(:$s~gu`]I)@ Q~˰ʘ_gZ;E:9`mɪQmnhFZb331爌N]쭑, zG<,9&goݟɼ !Zɸ90qEȼ٤s6}E3nGJ2\p\n?qVKRh(8W2 b5d9_\~ ;?.a4= R~}捝{o y9{l8E호[k$*+#ZmSsweWi'|ަ ]/Ç1{/~L_#05r*j|ۊBj>wj.2踝 `A @-EWY#+Cp\QH<ϋP<\UdBiQaz<GP[=FɀεAsO6 -PԲ^B216,KUGz%lq]2CIp9CV,1i6ZROHf!l% DNniuZC[2Ϣ{ IDATZX4HИ( BmPm4Vee0GҞ (Nh"XC3~#^SW.3w~zW7: 3V  "g5|0>=P\H/+HHL`N0!txԮoCPBƟk@wwC)KIRlTQYvY@nHf\͡Jm=hSBՇ8)jJ$ovyDj>ҋ))vҹ5*RO2/.y'X0JArlDї-/#qx85*Z()o=|vm}*C1AKД0&(,);^~ҴA}Qj6U&Xf]Qkx>~pYP|靻mGR@'uд\?}J `wtq{QJU2aşl| `0)Gdl`ӯ6!.V:{]$LN=""U0Gk\Gy•8Z&_aǣ]&n~y2t4&ÖhǛ1B/^6^zGN!l5Gm4ID@ss2`Cc~LCQQgJV*,N#OZv&'09)c[9h,/6G(tL3F3ɝ$JE]~v<@ߵSOpU;󖋻2 3&_I-$x욓܊dBCYLִ;&lznH62#;$+y+I&rGIj D+2C/.?c;i䥓:9Nٌ1&{_bWeʰw46Ay64fz^,LS*wQf@loun =<}Z߲_hRfY,*e%wϻ{|;FGoyҥu_vLGtdDDD @/.In$dfNK_M%N*RH"#";5BFZ(.&_[u$CPǙpb܌dHxLog=&Br"SynG;jڒ2Fdu7O*C~/;]͈fv$iWs蛯_)he^#?I e H >s 6ɻL*T3(hx66xkdɟupIyݭC ov7`3Ξut7PwRB’y=.n} I; ̢[:{tӲ߷z8s]Lq &m̱4,^) &7zNNu9{9,{MkO$vӞU[Cq?c @n]]02K()m҄= :qn]C]OqqCOHrY"F#rfKNFZ}#b0& H42WGf YOesOdJ*gI*If[$ ?oT"n.H$ `+=ݨmΧ0WMS|Xyo}mR{8WW:}wV@P NU;T6}(xݶMBiݖ_W;XedRN;MiNbieS6Q'*6-k}ûJxlOm\mn%)C&Li'"x;M˴}:gI:dTCAY(NHNBEsEJd,/.  $~5f=#cEjW]Ja6Ԝy-Rw|U?~nBBB/H/)"H V AҤ#E^C( %^Ϝۦl>>g_fggn9ySj^8 Ph/(]0@PYq/ 7 CLr. ĕ_Ī]^Cst08*˓*I*xyy]q< eO4_-@U~x!>zfiw|1ݝt"[˙T8x4wDo]zt=#F9ط QXunfv=V<(teNP9FM'˲˭7uwkLxKx6HOI:DDrcE8Haqa! Z(vSc1w8[Kn[\զH'87Z >8F :M. p_ rNe׹۱,%bd& %g'l }AY.")nY6l C J{(E$<б1?%?z! ,^$H30>@"-8W^-y'4ۄxQYwV  gą8jRԥ@G-j@6K@9GsW^m;Ƶڿ| = '.Bgwqdkw6ZvQ0o33K8)6D@v$DI, = B)F%pFpBE(" Zm#F @8E",!gK)Să&E:riC*)E&K&rIG#=L/ L/I"BhmĄ!"@D<3n+&ݫ=ceA < $b.;%,7Rqл%\<$Z1G1Pbh5Zv,!*[NQ}-a>)fȱ9l%5Q9FuX^M׈(I8.OQ6#"řrj73Dj(1 "p*X#bRp=` 1Z>u?IpEd.ku"8@0N>H!!Cs>Y d(6?3JEQJRlx(JEQD,DD0 JȨr;L\f# FP:a #JQE>Zx&D)|HGĽx`G SQW7@=]7F~ԫ$yA D K$o f{hڇ5KTZX"q9[q $nUȐ%kz]:R"JATM~/XVTϝ nyVkJTP-iZ-E@vyZ~vahSp|XSQH*oᾁR _pdk♬jT$r՜hP5{e sC&8rm+$ӜO_c/eˬէ~3=嚯'vo9vG=Q!(7xΧy4PQO-¥{g.t\nȄQ`OAPH7ұ^~~ 6 >Wfu>_s#@T%q_w]s@ZX>Yߪ@nNh?T_ڻat#@Pߙxrcyz>~%'ri%c.LJ/^A{.ݸ|vUO~ʗ>L} "Ýf'$$n;zqi}&NC;N>{s|[koE3U hJww_nI LG'Pv ^6Щ/]gvg׉)(Ki⭒a#PA-+}؂ϴڸ3&QVn4WT;r[:o;hʓ_)2!u'i;vŒ)+~I7y^X+4ݰj[:h3`ғoT׊L|[) "{pU f;@ct ͟W7"Z49RTgKچޝDmbCT젬7Z$8^}K^a<]^^N޴2!ޤ]0g6ܕomVmK'ڈ'?9咹+J 7Pk, bC77,{FiuqߝDmZ!`,f=_HH7E%D#OzH;)-+6dXR ?L$j cq5U.#&xWNIW*0v:4W }]{4mlVp⻓Tؐi0W#<5vt [~i[oȨzr[:fQ^*bƥ<ѻɀ3v^̧%v!>9eP˧iqޛDmZ!h*B@gͯ7吗'5.oƲrUpfڎTTb+k"l(*v;>My6 wF|ܘYe(Q=fH H;*V]Z)8u@ YvŊ+ACIx6 g_C /8Q\)9u[]moc/4{?V0 j7fOsh^ /ze ]ya/돦 رh Rܘ#b'\#ע\Qʧ=(,D]vhl+mg>1s )k{.=4oob6|@hV;hJVL^9[: gDܜ#d~ ݚyKt20V*wLi]R}H!BO8gfܙaA (ACS/]n% ,] t^-CuDۨC9Vb(UUm(˥!7g]7W_N.yx v3{իˠ gefq5ڠ2M{Cc򍐟ec6:Zd2feUhaefgݿdΓ=\=e% P߬kM5֗>?;# m(.˥!`g]5\-1Kɡj8 I +QLTvo6 ]rU~pXumPznk<S 0;ö^ @B9]c)Nt~<:we.]-َ5YYF#9n 56 Y׸ r[[6{OێܪB֝]?X~JpU yzceڋ:u=cm\IώRߟXy'~io#=h Hœlޞ?oUӐu磟ꖱ IDATo[rja/Q$LtmίcgGt'V}~ޛ%]?6mÂmWiIOrag'Oj .۸lTonlJw!}{Zu4[ȿzՑ&u`ױkVGCW^9mz*Oeշ{cuk-na/_ʦ-t"dV9WAVn 1Hbdj#R+%J[(P:uo g5{_?2`G; wp6OgϜĨ3oyU5f eeK;Ն!FAvώIƴ1f$YeSkTPB1-tˑ2"Ę\dNsS\f舋>G۵*Z8kG.ۙ}rmI_[!j4bd/o&\y$3|رC#r]/m<7d=>isƢq/^5Η1x ;_V3v/f߉:f̔q@11ͨD**iL"jK/9gWDtd-% -"\粥1;9jbS˙zK-5"Lb%ͯ nڥCuJ8ЗVcshR6[j1Q0 tւ ^:wnNV`K|N\1$0.V["2RM(*iALB+::ѡjNgESXp+s8Ch_mf=LyvWhwD`5i:0̫&ͨxth{v܄,[4obGl1]@R!>OO,-۟d[ھ½l-ix]6^? w~jk!}P%ϟ\x"NPgNM`exknlTP/=vKc RsLy.@(#+[Q/e:2YD"8c $BD#mɷRKʰ0붝uh3ݗ3fG:f9y  NNu}8ǺUDl&n;\!}_^: Ý![]r۹2=Ć(`S '<(ܴ^P/@GlMHKs_Ti[Ӆ?-o5M#Rhk+MEQ_o t>bku.FkBȬvϧì@M+袇U-P]f?}7)rP7.9sg<-WhoMaThGAg*)3[5(vΜQbtGfz5K?ܛfyŶ:3ڕL#3Y}'gNR:,!Ę}뗪.Vua4 q7sR \tA>`tc0O.W7}[q&=]QeeXVVs"24 ѕYAΝb⚄0YUaP74$4ig{~NrFyeρ6HsfѻqNT?NJv蔾~pKo'efR͡r*ue>CDLL*sٕR!js{].=rpOSekOXn+8aV׺_+5d[!ߺtYhQlrx[(*]41ϛof>D]qKӹ_lyĤ{w>}ȈDJك KH;^5ws Psub;bHն,>שi= ђ:z_ZPg/f|q;7K@CE u׾_p UwЗw|a5 U^[jgs3H;DZĤ $tT^itE_VTj7+_]Wtm{qK͆bq|ϡf:ދeedulXulG\|ׇuڷd9nLj.zNe|E_^R|C|?;33$EC&t듽[dUBv:Зrdm=AvÈ{lQplKmtV[hɷt߼xJ@go,tm[};/Z6x_+s{gI-۵n٦7tRKK͚Z \ל#yD9s3#[#j[6uΫgU AƊvi6-NXADd-&JM h<(NխܬM3PijIaqV('l2}hISn &(:Ȗ\mmR7n2s{|C[ڷ V3np(^L 4;$&Q\dF\cmQqz"XDp<-5;Ѵd}4㓞hI#2Q_]bslgC&?v2YhS",G(Š [6{)4mҮj|:1e_O5ɞ-bbwLkM,#d&ji jE ]|x@=?W._rԒjأ޾>>Z5qֳ4/040T\KlĈ; Ea1 ua bcbµ U':P_~&{?e'#ccbccbcc j[Oxw^mFD5} ݸUʸ=+MzHDZQpX'4*q|1S$q&D"D( iF#voaO6H2Oxwm[4lЬL*7Y+D'{&\P9 (%ב:PrN\l5uɰkP]T)"ϒSrQZɐwKy<.UUYʏPcwV=0UY6ޙi!@뾉'?o.M|nhk? ˿\S]p}uǍ;-*y B]EHA 2 vȚ˯C^<Ѥ2ؓkG@1v͵((ncש9uҥIOY3.BKSLٯׄ8~:0%X" n.s%{$]ȎWɜ- vd{b{\hȒSi$|E>BؼY!NιlK}iWqyӛZ4{C[Iuuΐn n! ~hr6/z/O.hKnARϐ'M$U| uyy|]:y2@>m^,UY7}~oB #?|:iu`*y?P3xQ`,}/dkonJҭ#YVOP+\P1v63SL'|>uw3ݬz 9gS_n!9] {Sr.4, Q'd%K-ߪ*pgvB\}mnU0n[GAMͫ9C>ǐ޷5V#_MaU+0q,1\~ٚ^tEnEE3Ur+cH|3uh=o r/of_YVV֏{j>*kE֕}׭>m7NzvA_pu뚭i5 xW\"I6|uG+'3S` 돽<~s*E[6ENCJt9ϴ,PCňވгU|ubϡk |FJ꼽jl2VB5D idE`RB{Ǟ^vl]!N_:RW'lhv<щ94: ElQU  ΡڿBN%A.h__ߨ`9T`M\"bёU˄|r+.O0LGX Ъ*/(bJ^B툮j-'l U(Μ(YFd[qɱ:Xdap1W@XPXxY@*W^L2;С ٌM!JV,S/6Q,PZēxax5.P˿jmPd=58Š+Km]Eo,G;h² :jt r#jFIu`7rYZ/7,ydLXW̳8uib*V$%yt< :^AreZBbfTX ` ,?"=FBQaeo|6>\5N8 :º#űtUױ8֠>&DlBpΤĂl!ǹlV]hˠlP!0:o/xQj[%y!d¿ /I\X$rRY.!'C7.Z"Kag#/71#&wxւ4PaC^2 zB([0 EQM |I)'TrHXW$}x6{mJEԗ L.mE$"sW}@U=ReFꉐ|DG:*'A!j@_!!@J`O8g RHG@L5z5dHBټY l>w4B$`qt4~B"kG wVmR1E x -),G&q? +78# WĒ ߉2YRM#Q,򘓭@2v1{(JVvg @x977kN٣7ċ. a3AsqV+.[Zɠg<[I-Nu@@YfAٜᷰ3ܓ "Z)2BGDn˳dP ‰R(>Ci"ID;7Ul8츽aܓ# b. Q&["B X(Ttwj:x_ +UDo Μy VF0WD NgWd&,aGu7YcHQvP|KVWiOƚg̓E; c" t)J!zp2WHaVQ=A `>1T K]G6*A)+Ra5ʎ7GRhVh(Y3 +̙}Y) z?`SQe8r8ĕY'_״)!B IDATiR?VVo6Ɖ?;kj(.r85ځN@P~JD^ BJ׈,$NK^Tա,&'|#$ ,Ža፳j{dֆCN\$C!_ Qij(.we[M3,u%I=cGܠj Ei_\roG; ϔ"BN Z8X B,Q{YZ7T:Mw>Dg"⮪7 S$Q J1_D !` : D9t.+D@< U76-(D6c)GG 1Ԗ${jY=}X7%_uəgΒ+,N`=L۬B-Ol`اG %СXyn^p)yfH_inZ BPvs'ٵzG!3; w:(fqa'9@͎BIv@=EQ`.7+s|raOc;'8Zn"I4a]'N8i0H=_/Z/?EyjWTyN |WQMZjJWY=]_P [%u|eс#VUD_n4ON;rtP!=D4ÿm9] Y vE5Ħ`b$^Mӹe{m4o{eiG{kb0s+It>è`o0{/.n宿49!DAhN8GP !?13Z&y\E@p+N陗 &'k2e\dgHPq+UUp_uhg^׷ DN:=xoK(9e'B MNtsѧ匕u_ߦ]'Ar БҎg"Tv}^m"#4E:xg#c?wWu-ŻIO#W'gec&NH{pg&Ӧy;wAd.Q ׻cp/4X 0j<[6Te_BϠ`{*6P.eN!eT%3w2,owWҵNo;VgE:RhC0s`Vg\D=&s{"/rqS?SMʹG:x"F<ɒZ@];VbE݄w^"{\ rS{p{rJeL=zE+z[sP{>]u($ d;?rF+@ߋJIA!a-^9nܨa-Z~}2"\Y ͘gx*Ŏ#i؋/O97\vOH`_|u0s-/i^ Ϗze ]y~/KAKef?j4OKNƲ||BGW'9e 4$ EGgEF71y]>Oif^Z:#=Ps}i6`޸UxW>|&wPjQK/5WQ=tM++nBW/ ^/Wkt Cweb@~[I+-}jүwi/Fk(X\u UlVq.jJgH02!үXTo]ϵ@}upGC 7wnEȡOԆэj."3de޻kss*r=3vl7-Bznpk[@j:]6Qj5{g2]W7}>˦m'*QZN51Q=չB~9#9y B<:o񘌽 Q7 PݴzDM_M%s>R85$64n\G)V D۰I'5mtA8\꠮L~}H_ ]s-X|Z *S}X?I[9&7^'Oj/3izAv%QxnFutG9po{,nUNߋ-^= h1+)#jA~G~?Ui}PQiޟ^Mz=moú68/]HFí]U\0`5[JAE"77o[x^sxOYͮbGbϪ÷݀FݟV :m7}R$##|ɾ=#ɥ o֠6OH s@ x0t=E"} +tݿEf6|Pd爬UC- /Eu/M,CDu&=ݯi_PL#hzM0K}b%Y ǧ X"EREv²uJ-i. 4ur?.VOx61gL}s?8Qצs|5uv/jg<3dk:(mdS!@:k*ES.1-BIsWkԚR/6ұZ 1aҴZ^z᯷CnJ@(/B(H4)IV/JCMG\Y}E$ī OU+mW32ʏWًG5Х7v\9vbS*mi}ziYY%Rz^\{N-cG,!*}ÛڝTH7E13n%֌i4RQd9#wlSx-xBT7BwOoTWꗮ}5Đw趍ShTSp-B^k'&2ضsYٶK)y{ņ<?3sXv[2FKS9:.M`W/#wŠPNS fi_ZQa)/l?'gS}{eC@ynȀc?.9 SOqoNiquӲm}g|ז{*];5<ؐ}ǶWY+fTjie#قk~o݌QMc}!6iꏏ>YǷT^kk£iHp{ED#f۹%TaB^]4_\fړ D׬{}44;߬N7c|kmcC!ɭvQ63)LpQ0Ϳdk@Y&oshh D wY8gj/]?X=F|\{u~banN^~/Y x5nlmd{j8Y;f}sEoO͘c֛~8OOdӚ~Oh~{oj|CuD:Ŷ+mG}ֳ&}Ñ 8|~(VZq)Biamo3Ҳݗ2nfL 0gܜmoG?҆NW'[*xU@>x(0jnGJ;y@*TOԞ C)Q.L CtzV']EI9iwZ]擇fjxa-'HHlJb:k;cjMCQ@T0fU/턐[WOʊa+k(SܟdC*ߨ`` *DX) ̆ņf#Z)0<&ѥvnA`H7tzk?9@#"qT:gM0a]@u՗4ӽ TQ )coUB*@T^*r.@4n K綫hlm]WQaC{E>jF|d\BZjU*Zv^L̹̓\HFݣIYUz7gWJuՀf㙈hCvwr8;I&[+לs)<[װ{ 3\fjvT78HM,XNnn}%smwFvW&.ۯSGi߆=isO֓)4@Aю}?9|_?)Q^eE9i=LͮZxz[o[}|Hrz^ =}UQ&O~.v8n9q:w+-y=ޝO%T1Z1/#l6hҔa]ilAϮ_lLdg]ӯ[чp ;TF\ :)L9"89@PV\5VT!g'(x(T*u7wz6eJ_*aHϚ6|Y~O[,jD$/w*N;aACT\c ?4X{Კncs~QgzCz4>,Ǔ3 H֟シ i3?-l'vV(Y1+ ?t4Ŗ~Sbst_E>#Ю ܜX eťbFije_ZOY: Zvߟ_XqhTM?OL'V>]c黲x(w0N֫FkZRDw}v ^ƾ7%khҞ0}C5O) ߈Myz- 2T #}Iř&׿KM?SU)^*6ڒZJ;o!SN4iMyzzdUre~mI6\j(/-bMup@Wzd=gj{5 [@xo6P|ŢHAȰ4U_ %(}F9ipi<iSd. @KH2tS8 j9~1]N@s]JW=ӥ0aօ܋5%Ud." Z&farX@m yjﱔ .ƟK7@*7X> uS[ol|i֫>im AVAl5idh3MT wt +\[hujgw_[ 9l\u @lEVF4k7+>]QbD tYwIQ&aWldL\rN$I*g8 `"Y`wٜs 3gwtުʃ LX\:vwTu)y67N) `›~sE7ϵ`ytS-vnS'o<#fkf\8oz'9QF⃛\,d!eזν_ݦٜ4 ۛpݽṡ{~)yq=o<.:ϛ씲lHJ>p}_]ifSܠIƤʩW aEc+/,K̻צgX ʍ@㕎19Ol9p*z &Ov\Uݣ72 xtId6wdV^`Q7^\Ը_X+Α cBE)FT=@r:\G"Wp)5`DnHvu[ 1REhS+ց2'7AVCNja˾18B #K.U s. DR9S` IDATB GQF1gEi6N/`;5 ic+#˺RߖP1QjqV14@ǖd8V;g-4w=XݛPhv]7k2%#R؀a\`H&x S@5>Qʚ;$is뛸/DYI6 AJf*#rƆE ,- )-ŦoGviޣk>d-,]'0#ujl~s ~DmFXSVXls8 4x![N}~<#^*JY^"*ָoϿC~M9RO_=ӻ%gk5)8MJ{''uTTm#B ]ПJ J8w5aâE~@`/(3%3_d{v^Y*bQ;+,n{ x%U<bYEWH1{;9.|s &|sFLA)9Q$].أi#ӄ.nO@rٝ2&Ƴ(t{FHbJSoHyI gugqsG%x5klŅ< .k`Bj@YA;./* jݫmpɹ\; _?|cҔ# \$=}OsAD@=S?rK.C'5e}h/'hdsD):%z{;$ATөfEGCqdRQv@6Z'Y<' ~C,ѠqR!C3u}78?iǏd=2񡷷:'\|融ºt";=} _v9RB# mLƁYE<}5> i5h?Is$]畞U$EndW{# `s\1Cr~;xn8 t<~+7^ݽȽ&vk"17չ4- 5:]-td"ae[[+9.jb}#-%9?TѬiI(~>0FoKc^%MGS"mc'/A>JMz-uy(V]5Xt\2UnU4v<|^.;ݺx#@Ftc pؕZ{F;4ˎWq:,Y&}2 ~].o{_{%.'٥OA%鱑rŧQHel?WN//ud[[bye؞zdу?|itz1s{=c^y4:>ݑl*8 _zzq屍'_Ҭwx&}G"p=p>B\M0p1@Hjbj3s'+#fL1,{xG{j 8F45μ< #i^S7?;_X1yIsNk_G3_J֖ؕ:߯PlmA];Kr3aS-,Th/]STG2V6cNU##nFpØP@[zօmVJB1kD!Eŷ\9f$"pf[D<}LD.Cl;m\>)`oNECDɗO|cH,b˶43kNw~2g Y3f=a?oؗF2{T15|}af_H;gLR]mLw=5w8ndo݈HX#^)g/ݛ\'ƾ(,H8e'\i?Gߚ8Xols;>iG;f sq޿Wveӟ\ee9-`^_yrڼٌSkԚ&lYi{/l8"ubU'^3 \~xiOo&fl@E[Μ_|>m+s~?AjCv@uX doXK[`7r/{Ykt]b';uqy ү])ēOfs*|W i^o|P_?GN"b?oˌI~}C 6kf%^m+`]{fczฌy FU<\CwDVgB+h/ܴ1@D5B'^tH EsH:y~OֻNo)^{K~x/lO7Z Ie I;aNxN.KCqm9΢cWG|,/峂 S{&unxTdS.MѹvԂSn+dKJQO@ %iqg=!"8a=@?C%~/ǡf Yvϑ"`YꕝpaZ@` aqvGg7Ǽ0ߞqUy.Di6 )jWB1;KARVꦿ,~MNu)_QZWWɐtIkߣZu] {*jB ƠċK*4(K?*Z75f~f]cPE⢪ACR@Lȴf֬Z\Qh&}EwNu'A9pbINPPK~HU]ڤ_K(w@*L^ qxK,4JSrWSpR(O2+H.CE,˕R `>B&yS;d_C^wD˜crGqUWʱ2&3Ϊ U61HQgq?<2<dn|5DPg">S$j8fa1ErxG;[ _B",EqEIΘkD6<&4 AN%TV6 0aذ՗ˁ N:.ʇGֆD &CUU ('5#SYA*:`,WoCǫv)".Wt4"h@Vޠy$>~r&j*U(YbTTV:@l R(6PR!A5tuJ)xxIMsUuCP@i OBӊ Ҫۦ3ɠ@_Xq`~1jCvFI:A *aoA+(>bg*3xb&ס\'K_ t)sI>@H>"oC)bRXt_)4P- 49Br*|)hDHLj"Bؑ!SD>Ȝ 0&@|XagM_i/)͞B[w& Q$=)URXu %+5`.93 m\ "eW/Q"(J. Rx(P֑*O+T\/6.MfIS1j ޾w/DR AT5U _Ie[I&\ZECQ i7W-T/3Vu"i#*b_Sꍛ,OC:@B@LmR$'o+1Sg*maUV@$*('Th!xUYUBu[%EzM=M_I,*:FY3^|"wJ\+!P: ]W^2TOz 4aRVZ-TTձ>!$oU]Yf㋍w2y%K4UW&$d<<%d:@˂ȷC^KՐ˄ Ezjאr42(z4Rh wRͱ}NFz`ŤuMZkQmQ&Vv {l"З>^~_Oky_Ç^o7mIx֣K׼+q=xsë/z}U;,A VYAʦPhr]ыQȲ;Uz(Fe!RD)ggQ>"]udT %S ̅ $q!L#㓮88q|Wi,Qv\CĻx/޸WOn,Z. 1=v\2&BF~4B@5W唧W. myu`` ٍ:'9!Y{ D I7"[2E'YJ j>S`8Jj4_ HiLMP!&Ga]VIgC{ִ˿oٰbwJZ?;^^;_ o F?]:Y[;%^pᬨ1sgUA!\Eʅc#Iꐩɤ"*~'" X5o\;g-5W+m'jꇖgpRcBE2K=&HDw$ BUM5z*DUEPkjj (/fY9BQSRbt+擸ALQ{I9F,C[GBVWQ]Ͼ%Q ;Jj]ギB($ʣaQ،NBF$OHY}6u 8IcShh꒕|&}= Ɂ ~H\xHk7yh$ qޛR3_KȘ^4Z}Es45kC?^TҰSϺ5M9.xS#NG{ח'ՒW׊C3;\;,*$c,u|BSw"o/ i6խ KABoף.}?ӡ-4ozTqkm"6O7Ču\ 2ɵPϓBCr-y*%ؕ*o}VZ'RKL{ǣĴ%Gd`鑦B_$׹QZ`Ez1Jc6p$STh[\E],P((XP{xN{~#p$v U9Q^=çN@H,}'g 9kP‘םU>B_^pkJũ$Y^D#h插^3AT-9Ynޔ&Pp}$&RQϞ0aGsXHaS[ IDAT JK]鋧{4uo\\{篟m4;iң`Y=+N`WPnuc1[>pqԤ,uON8[tZ3nz͞P^1M 9%)%Vu"T}+,TZ'BG6Ȳ闰Z}^254)\4D 2D4WɴaOep6lL@RN_)(UD- rm&V(/@6J@ ua/咼b8hǤHEi1eW,ָ7if*S[0."j~nxQ%I!m (%=AI.Gt*AQBjO1(*A^-i⢧IKH&"Fq;Go> `7”J ?ppofD}' %&3a2fS^ꦕ?:穣:.Y̹ LT%=0sB7:nӓ̵]0Dhެ糢=ҸW޲T_$s푋t"agٓwN`NW>9[F e3"u7miuͩav-KqA2׻joWK=!ZyBI65~78~Ś~1E37yI-/|7C3&:!m2+lAME:}W~l˵ԿRNc-NhKZm+NI=dHi+d r{ *oE(dHdĿ"JVU+4Tbd@2I*?B8CT8tzT(DwBW5Wk 7zN*]e%*zJ*x *BF؏De4 Ř3RDT3uې7& Qrj/EʕkJ.3 qDzǑbo3;t#Td 7(7:#2"INԔ.k''NlТHzVh0\j9Ũm_fCZaRfu Ib FF; NC-u5J_nqz|Znsv'l[ˤ6W|_$T~nT;92/an4D{eݙs;#7'mG@MjmфǷo2y{ 0=YVgE JvGlfNfܩm{jZ0ըߺXPzā4Nޜ=ZYKّN ͩ,<t&R$5"#y4Z?EEG˱ˏV+([J puT^VgC)+bATSԿ$74 qg&"9${HnHICQ)qpN#6Onğ̪JF*- u̷:0iԙ%11=_=Ըp 8W> #=lWןuH(הf\E-"MIihOef; $+nC\+-IWʵdvV20W.%s}V[t&u]h<Cdl <e%HZM=R-6RjTbW$R ?1n=J֐j%{=t{eм:f(6 e#iّQG3ظsEIss1b|TY ImG%Be"[Wwt|#>ΠBU*EڌH44$R%~Kao9QyU#M}SU\6@C& )VPxqˁO:o& {ѭjK=ϴ3w Zxt\[K q%陎̀~ :JX( 8cvl6{[r͐u?ZA 8sg-]>{p]7<+ҖS${IVfUg~Nc3&toQ;<=ld%qt~͢;{H\q?c/{)SFtUٽ>{`cj7أir/+|@3/.KO#O^]&%S繢*i}s9 6EF$!8cYu3rK%{3ltJ=B-DQ4xTR.  =O+t:X'Kĉ"<š8N͢0n2r0#GiѨfxrX $躇$|ܗ"mVޝ+ZyIW#4dzn*0#yՒ'r{Q<zth<5Hq@j}KIKo4IFQ }aP6)ēm߶tuℱo aIgvcewXY'&{ l9}s,HgJ/oKO/jRYi$t^CZ%B,~`X$}7 Q?x=o dq@@y7:L7,8YXz5g&g:"D8 CA٦w-0Wj|ϗƽ~ -8m)Gp"X3m^20 %sۓ~8ũO+d sڍHTC%ig|;Ӧz5+(VșNHrZ*/(?d=1^E&v!h^aT4H IqL(qrQ{ w{%I+uMT H"gn02*nAJk@hĽHB&:Ϝ;`yCIZ8qʏ@٫h'vɅ58CCDE j(11ծHIE!'R:$XڻPfz_Ɉn=`o=-O m2Buo$C!VyOzRᝩTʘ`F{wgnIshvJYSO ^B2GYzH!ELCC#(,@nWuY;ȨjT&MaPo{/huU|JڏSEK}3rΓ#9[{CU.TUO"V] KC"e!SQr87͗8MrM$fV=+fII;=KZ"JFVt6gL,˫Q 41鯣#H1 =S SF*"RAZ$ߘHU"ժKxLʩ`xCM3$QA]HSԩ捦˳Rŵݨ(:ɔ2Ib~VJı{DJ$'bҮKxRւt2p޻-#!"LX28hn_R0qR-h֕"$i_K+zgӅ7T9 ^ɄROVqaEFqc/d(-)}*{iL_#$1 B#AK2ҟDL V(J5N{hhUx0qR|\gȂ VBQL:.s#tQ`͵P->JɂID/{j^ +O?WQ#)LFӵ+;EFǫUQ`H2Sۛ^Xy?U2w! &@.>(DvmnEĠzo5+ nYU"HJ8+ғHn5vȀ+_(ǘ܃.v'A|.*-4A7V+'D T0ҷު7j*X`VӨ@L isTb, -B,] .i6lOG84BIxE|?hC;P=Cb_"7Qo)RY `Ie*$Ώ6Q2R*?RKT_}feUZA2*-0RwjR ^.jEmE|P<DZ}8F@ەC:xQ0{Y<@Z.#B)[$4yTwˣaQ/Rħ$VRtHAּ!rGH!(9 ]%2$1̏РSSTԔflQ uK.q5viiy~vq(O5YkHSKQ2brBrIsѣ|Y{b`r"*{:`xG(BSD䃯V)!9"YLs̍SԱRLh8W2EIL-J|lB&'aC9eYOAwh|2py S1+K, tIz$Q<+F(w `f" $-ODhaHAɺn`H }n hPϩR ZAAg(VEBh HBT2ijf[C=Pw)$1C,HH2h:nwT }ִ0n^lj%HQ*оkݚ 4i4y3j@΢Fp_jŹ&P!sI=fR~2{EJhpOf(d׸8@~$"i'C $d1"Nq7K!0u72硋w\ePt'F^A--QEQG^~.M.Z&}9B=/q ~QCX墛K-I̩2oKs].e R:DvKedPsm,bmXLykћH>p#kUz(0$'HiН!~x`=DnqzSΑE]Xu*G-4.T5]:ފw& J/E1?_7w{FndӥOr9Mw =c+Gv|9w$GצvE ;%3/&.{iUɜZ^^{>Non %EB)]jtV2_w@{͞h^3_|SPGM"\I+DbDYJ{3ND ISUͻ2X}dݜڞsǖ.e=9NA~y9j(8$/ьvmǙl!k?]: U3XZSC]E<5j& qQ]B_,<>mD!fgAx!ˉ` o;t~FlٱGr`,uNo6ۖ|r0Ǧ=ݦ&;|?;oE˨doI<sw/g;ecQҟ[z)BY_oضS_UQqu35Ug"I̳UAQ%sTq(͖|ͻĥooy(GzERڼ6:V> 6 d:^ב~%7 ŀ>9kH ?N)3^mZ6/O0dY_|9*4:d2~~]vz^ EPqI-F"[v"~$QjdJuŞ2IJ=q2*6pgq䁟@KM*c'J#"] ;-]b8Vtib'YS^( myKS6}߮uZ϶۹ ~Ѷd. 广K7Qm/*A)/jbT۳&!2FYo;/O=oձT[Lebl`ap6=A @Ϯ<  cG׾r5ztkw*#)( R?CZ-!HMֵUER6F㙠wvfq+GIFVHq;eu' @}f 027|ߓzfla! IDATKy!Gxve;̵;$aRN1fΏNϷk[-wy݌Ԡ֜txI:=GO| nᜟ2`~_)\DZ/SeU< ICUCEݐ^`Ӧ i\+BSN}|Hlaͫ~:&M}m8vju?3ZNlѱ֬D`+3+nb{68uc`Yɟ׬=`%SQK>x.f/ sd'ֺ~-N:{CqeT-\}$v/B UFz(T-_9z_Э;w|Nv..[oN8: w˛ gWAqj%\xW\A`OIک׬=鋥k7 7YSq7Lg:Ś߼LV?굖${u_y|~-yw嘁[aڱ~{"&{+5|n ܬ l4i S;׬;|;S@X (/*`ݳdԧG AgYڵ߾jwu|h3͙ Ҏ}99O?ڵU [|zw~ƧݛP됱1w~X\9),|:nʥY?3ED{b7Y?Ѱ1vݭaik)J-ouN;I@#{L~cDc-ٓZi/z.X /yc2Gv5y|}:O;فw9b&bs[ey[]vjsFPf9 {ӯ}+fDπzudOjyJY:`JEgΗ-fW~,3f-q&^7e7fwf˦G}kj/%u+7WF`5`aGvoWۯ"U{/qZ+} ޤPxnUYN-KcI'׼81|W`:A¶Z8s'H)It+ ]Q!7F5!c hqC˖ePaܵlߝ%JE;ṳ޲?91ALiw/?\"oL&~Ojա9'~MξZϼV2T.Z9HVfX˜a#Tj9)m[&ʴOfYoM8c9{b_V*kOI{V==UB6 Tʶ"W 6]7:Ξm}@\zy'̜0ɾXk&7'u0Lpq}[E592N|x}ѿlFI{C~ޟ2\{4K٣y{o?5E?:穣:.Ysr|S\ݕ7尗99ձe.,ΐ0ܙԘ/Wbg'_%AZ`0~kb޶/VK6h^h.w~z#!"N0g>LܿfwBN_Sd[kM%Vq?(3׵K,910k g\=eÞ;,hUbPL<Vb !%^x;td5 9s M&jZ5Dfap`Z[|wWܴ]5g.Y @? ww߬_GM+ P`8ub[^ݢ]td^{y6l kG ] %}L}ɴ@)kᄑ2+OK کNOt0*)4OQMGFOVŽ(T]݉Bu4c^eRCɍO-(`DrZwtkI}AFi9!98[syyH* Nkhv  p;,;k5w٤#f>$0մ/[qs;p&kgmXi?&$y:ztԩ 7'g'` ̉FZv6oݧ[-qvsY)pޡZxPC  #w23ڲ馥*u;=u^Oɾ{n߮V*g>eW˼3QKIj`Q1Nϯ$Iݐ3yd&DE)i#s ? =u=nY&g~]fWk-ͅH: i7Ssrq"9KY@ڸFVӖ{bu]:f;޻K] 5גvU | cWW|ڽ_R;bo$>ۡdȚzfZh=p:$6~y,6!=?'¯{SZ%W9+k} V @]?/ˁKa$W*bFCM*riIgH@+"X7 $')gF"2٭3 c+qgb<;dF2=fS{ G^/]}Ѧ{&Ղml)=GC=_=ncCtȈT#3p)5aOXg_ʍ;.Jٴ~@XY[dkT֭ x+':un('g$֭ade5f&ŐI,gT?ƀ[m1{k\Tݗge#.b3H/F al3ca6<Ւlrڜ1v$b,-&_'iuZ']{H-8Gzc^;|P&[ʮ%4#d,ZPetIM%=?Gf\=>|3օcǮ |gqj(=bIC7 Eh_8+RhSDasW^2Q{%ND@l$$sCg^:^}N|g=w}sO>*!*HvR$C,CE d# _}9;xTjv!}zrCS}v=o>_Iv[x7yyкA(g9 TAwCc0O>*r :.<'& ֤t-lg?;9 ށN-iE:yg L^T˥慙)4& sA~* "9>5f?8:Rhk2̻SJmO?v*i p҉cm,\ѿUzb2;~eGʁ`@AOJ,J-VbBuEϙM !@ -ޛ(HS:R-E,^P*T) K*)ݝyl/pwvsAy0i4K?Q TnA^@N~n&EuV,ǮuZ҄ʾbވ$IhI3A%Lq9< ǎR@]:3<ϛ=x!=?ngjgJ 3pπAS(?v\<蓣F9%lTdJ"Q|~NJv|hǮ\0B"2$I7dwÈ'eC-ڶn֦eoIےf"xOm,FV=VZ}it#+-=^dk?g4V4)D /"]e4oYB:ixX|%t:aC14H7vߖ|˷5;91)mH6UsI_Y'G$ nP&kn>+Zv^Yo&,@kM)Ϥ-@z Td]VZb7Y}9KKݰ [@E.qV{ε4GTzTi9s:A&"0=[Ak[]T۳o;F;OșM⽹ RwZ\?Š2f=ȋ!kO?jT wW&(QTYn]g~&Oys9Z @cwKneVՋq`{vzCo|nt{~m,ʜE$%ANY`CC&=ɧuwT\ )~=;N+X[Ps}{-*>@@>86DD 30$H('ҿ^&R*٧޸yt*6!-*vٗzN58Mѭx!gĬ2G޵t>eG,O~7o=i|9 ֻz޸s-Igij 0'_M.v+Lڳv^:p7K^}QEnsrƹ^JsYAnj!^ u5,WdKx5UIB(}UBɿOGLH[V0@c`^y=Ruz~ \bWܺVaA5|+*iUƶHU@Sw>$xki*`kqYikۨc3G$(fCYOT$ӫQdd5<*:ۅ,MEv|m ]us vq sئ-5:bӝm'80Gu¨#~ʹՍ rW^߾v I IDATńѝ=0=b:&g6_V4}l613! }V¥b8}P~8 oBL>fY3Eu1kTБvgYc֍S7&igݿEf}} }U^߾n?|bEv4 aF)%֡vDXʁӅ:Sv=}T _o׿U LQ]uu"}" cD`v3 `1[L>lP `1OGfĤzoڨaBS_4nu ιYxC2B"vcd3`Ks_}o19hSiۤcKw"*:"L`2TA| 0=b:X,&d߾ =5/ }fKc_FH1ZԊiw܀@aI #7rpFu#CZwmW[I )f}"o~&-OiHE 5̀#KۈkGƴ8ҁs:͖Ǿ5JT-5zɠo'c}Hy?T7;# >;v;ϋyb ;r8yрf ӈ"'N48u4 qr-29d2iaq΋̈b%eX"f;A?74QQ}\ TvueG>P?c>_qݙy29xe‰ZLMR>uʨ7@i_pN-lK>TtjgGfN^jBiq; ^Wh3X܃9˻cLN=3mqGBTMy3AOR- ?,8ʵR1ߡĢҋqo, 6|ǟ*[HiQď|œO`dԯ_S0@[ziL;P~l{<"[epG:[\A b(:i_3'-t|Iq=;|%o'||^sGȑ{b'ug<𳉕WO$ϻPrq7j?z5Б{%) 7K AɯrMPѾw^4}txz¸.~rF%@c~j˧ƚ>Ǘ^߶dy#>JKGw7Lq \{iN-򪝀 ﯯv>eӜDZT׹פW/J{+> :ٹaave9s}@'Ǐ=vӳy:"Ȟo&OΘߋLI_zx)n9CߙI?Y3y1zyQV'%>DŁ s&ǩJ{ݚO{sܫ'uO>`⬳Jj)v>m׺,<_~Z'JGTO "@q?~iO]_W|2uscarp۳~]qqq{ŎQc<83%톝fwrݚO{ WO;,]3 W%| }um;>>폦ƚY Ěu?~(աȅqڳϵlWMO"2尧qTzlߪ836禣|F9޼. V+-:ǽ@`e+k/j&?οJbxTHM]{ݹ'-؈1 1LZHj7laTSm! Ջ9otwtb|킄P9fx"u4QixnQ:m!jYK%zH$)S݋ԭsXI)$~{2U/JT PHWT΁!Lq+ QkE^5)7=K[Smڏ(L."*';SҊ^9rEWdhmYݏSP9LH45*m7oJ3TDpUi/FbeAzQkHKŕD'<@3UE (/muPMiޚXW<+M=_{sŷ_:æ. [H0zԵ`w~_|8sEO<=Mݐ ρW)E=4w8dS&:IjUJ\k8lD's&R>8 u7lF!Ņ.E]" 9P+T/Ewgive$(Iz!O=ЬoO𐶚 3x?-^,2;.ZCZ$ C{P?&@W54H[Q"h$Ҝ?0q>ewZeY3jݠYic|{K!GSU )ٶmMt-w\T"iG'@I>l\Hljep?XVIN0QD$QqT g o9dH[VgHcOgFԭWArr)c}P؋=xG1y%< $=*TnB;Q֖Y#"ÝBΊLvlNaVCD -Βz8`͝Rެ[j%0Y:LΎE 3|H p=9xCU;D^ui&BGRTM)DZuwFT4[7UcX:55BGΦCMŭ9ꁷ=m[]ts: 3&9b 4 1Ʊu_;X:'p_8zspwE cT7~Dc5t˨Q@ه3fjRz5U:V%f2>hH5+'[gQeQmu22ϲ+ xU1UĚHB XdHhFq1 r,2IΐA @q'- LZxi*P|lbj-'+]L{Wd u0Ld-<"ih 01̈>fYf),rR]hʶd '2vUq.tg VϦ,үrTjOži{zPċ !_=owQ@Ug;=B4A!gя[]1xGʐths 5pVHWN&ao)e1\!XdܟӖ-m{nۢM%76"RA[}7R4 Dq7 ;oZ,DfTNatR`\̂M, K #SA茡)4e\bq)35i ք4`UHD Y|5 y4zPq IԬB=wdwqx'X CUdHs6 Q6ġ:'BZvdTs McUy]#^&HiErYn P4}Z.#GIja)n5:2 zWPq!RkwߒUoRSjԲr}h|Ps$=yOp]'$DOƀ9mHs&P!xTSLPE#'+ty qVa8N&+I<4q>{H.s# %A?shEker)? C3eO4ar3 L-=nKW - <`0r5'?ŲmM:u]NlqN kS! Q&@9L%Z \ڞz y1*!=u&*UCT =)kevH9$ pâZcFCTТ%2[vIZG/` ըWmشUS w3Gyg݂a{֖3ٰ֮iFհyxO *n&Yd@FtՍ`6@Ս"g''5!"9a& c0(:ei*s廋B& #20XԦ.LK}1t.P0(kcH) I]w! (wB"7!2v@bI'K!YL#s_ݑf=Id.Nٻ^K)a#3Fn:s)QCm ʕg _Ȱ9/wgF3pb-iAj[B7Y߫]ɛWWڅ[Լ?  k}l7(w*H\{53\aF։ᰤ2}ϋ * =I;F0o뷝ȴBZ =y}@{L޽q/q7t ֹo]T^;v(  0"Z+ټ)7mh_,wGgY}QS{`͈mŅB ݶ_7m/^ْTan/wq6zWy/oIfOw.R`tX~s'yg , 46]/'`:V]"BBH2y47 k4on[,5_bi+qG{S"Ã-n]tԿY}+nL#U\ pR)A qD֨&eUHyD5are 7Sʇ4ilxySr$^^V7~˖%뮕PyN%nK/6ц;G ,ٖVij9>^Z~#|gO:NGxy3[P6~g˷m^Yr8rYζt5C?3hHK!E<=hqj5̟c5*넶kr@9WLpMɍ*ZUK@yP kHmniSRJGQ>L)!+ }\ΨSFRcRâB9 d_A& gS:]F! l;wÓN=%$c"qJ2eX:h/I;?&ۜ˰6 ӎwvz(^> ‹;fo?bܻofrS$q{p-!eg$+N;ʏ'٤9̷΀~f<[a 1KY{|tV#n{n!g\aO}S~ۿn;1h/I?Ow8xɑ{}{%a71%g8TO_|j-%d&%,v#s}+_g,Vzz9nG;7ۓUJ>ʮ@ILj3v=nTzhyiג^ͨGz$Lq8s;Vz9}^c;ۓ]F sExיLd~swVnTz'Ȥ *m>`y}:9KY=gn(4'-vT7nF^i@rbBs4"hNb#9_*)9|||aN$r^h5)8K( &R(xWahg}`Cqn9X;>]XALu/> 0VV\^U _7JDRPҦGsΛLq~f0X#MdҮ3?2̑}ͫs-mSlOqߛLxonԦM,eKx{ׯuĽ308 \@ZK57ѯ93ZsONU2wWiswW3|zM}Ҟb):o+Ȍs}ozm#F"]nxnG;h{vϞ?9j<"muvͯ0 Sj7GhX~?2Erߢ,ɩ%SWug;f.3KطnF[84ƃ !e)- J%'^'"*IfEjLiZ6͜pgYg-tR ОfІuF~͞L=k* YT+'RQU㫄AXcO2cdSVm_&tqG%*n IDAT=4)+gU:snL];1t-]7xE .coF\a_݉nE xf MAp¹sR.kO f>-'6}<937[+7Ly\KuĮ}74INmJ~VT|lbSyr9_i~\Ĩ%W۔$j>f_>זI<h`nEQ6&f˜ jwoAM\kHy݇6Lڲtg"z{ L5kBB#K7n|3kp[ 6ʕ8DYPvc}H$5U+љ? \[Q_~0ى?)iڻEM-ڴ|Z֭+lZTSCe'vH+3Neob&?H+o>@@K}D E㛶OL>͖D=%Y{+l'vfk"g2lٗN\(Z OLo\ʴ|wܵY7wx'yfsO$g)0&>zSd[H%-԰%R1F+q??¹.jdFT ܾp)'&/""z_ӕvn閤2ɕZC|leOx52(Ӑ(˫4k;V旂LP%ŗ@`d K> leQˆq,W6J @kEG:MRF t%& wJ8l=A>l:]B ,H= P`]" yhYh{Bb7ܺr .Ӭ˷!P.-48E'?/+ng2I Qg1 ]K7)% j=|]]t?osNA8>ٿ}{f{H.eG416-eJl [d՜,[ޡN$ -CTij3{5(SlOZM /z_*p#"_Yn%7E`~e}sh}-xJ\/[ۮF3(k/Hͯ@+*jkIWrb)A_pyayG7;~BN9ÑK.e r)=:K':]A3ZhTH!#9Mu=oGTvק.^kN:tv"QEt£ϻPNƍb@R+$E*(ᵑZ:N~O9Y !lWIY~N.ى ncNl4+R^Vev1Eoԣ$=T #C}$3 ) R=yHCEYaLk<"C<+P)`ȍg,4ֹKSʈ @ڏbA:[Mw@a3m8[9}7c@mt{5ի"6||8;_2C-ڵn֦eo*ptKcb_WVN ??ykWʋ*xM!HPYF2ժkZ@x޴'\GPT_r wwJpFCVAe9@@o yLqWx' {?y[R:gɛ\sOeH-p Bf2*Dyv[AFJj|h]!}HZ\CjM#wji KKZhq`+溘U3qnUGϿ;[9Y9s[B`wkk< m^ty.d8tSfc_KO}9WxbTqiZmլMQw0gўL@/^U~i˼7o۲Y#_zWuLp*QR t#8_ßל-?I#:`8^fBJKL28~We۹bjRiA XCg׿uҸ?Z]r_[j@qv= KN)+4$4!~g׿}ȒJbuʩWQG;W]<,rR='@5iBNoIGUQRCXOK+IUH .182h,,7TYM")*DICB_"/?HY"" {LGplɧغ*w8s`ov  R jR,a++u>QV"пnxg.[YfZJZzF^]Xr%8BDdN ȿTL:ջ笠Y}V"lhIy)95 @w433x&g."F}%"DA81_<> 9w,@J{alIqqwEI9nnX7\iS7 3?Sg!=ԍ o׭Y@ەPx~y 79ag"Z7 1@LQ͚3:]uވ)IB@zR2(*J qbp`5 &~ZwqV6C>+Y)uWZ@zuB}H~=PrZ&oa~+ ,=F<;mֹMBUա 7V=I4i&R^3GςWn]s kqJ*6ی٥nT6was?/k9a⢢cu7aF> ブuݧ}\TTF0sD@ѹ筝09VIh}>`Ń%Gazvnc6u&@oykzމ O%8=ѪI{Ϩ]_-g}ZeʠßqɱounggOgͽҿ}q[{O3b9?LS![ڞ;>At>đ~<;)ƿS+ _QPh7`j0+m^xC ‚HKrSDۍoW:nYkpcv4ؘ=>>n0ig̰ !JO"1վV}z׊ GN6lgX~{3Ud? 28#{֯8dڸY]ٕiSH_u"O:9F-lE8=q]~-'j#>~'!~pU\z0y$<;HτQr4y "FHMZE:ja,)&\be3 fCمh&)!ɤw $ X+{uMd`so;b+_$X. Z V\JV@[ Jf"l )Zȡ'Q_xy՚i2i+'dqmYo4H[HLd`DYDE!%;7CȾ=ʜAV  .A#F1B*N2d7-d[cVi؛:S#U~sj3CU"0]՝UQֽcI$AMy.jRxU2tr,H\H(aTFrq-HhcboJ)43A"n c\ 65rTrۘ-!=Z@u:b RX͌!Nۑ#I bܒF!c"mM^@`F. kߎHpZEe 6@ɹo4禀(zI, P!”{=&T!}SAmSkgTŏeޑ Fd` n%:H:"ԛĪ@.'I{..ZJ՜!R7PuAL3z9C O'cexcFܓZdSElS*4jJJkuItA; :iZwrHc\j}%J֤Ӄ%lkO85t~Jc UȚ oHpavpRh̎Ƹ!e!YT,-UA "'=@A uyȡJi&_ADR}^l@=PPODCŘ*KRoVmj6%uE7RxgMn@z @5<"|$3YYH f!|@ްkm1TG}H.\|H8=~4h۩-!rRPG*)9*訌˽J-gT>UO(OWHBDlɨ=JĠ ]<%gxn%HB3ʸDuDQ;Rt Ω !s)p: a\I6sҳ*ԩSI^;4}!e264/ua: 0=͕j#C<@՘}9Op5I B"&Qw1VgZ=N?y &pTu&/ISpQoj)@2UEl9q]zWOʥԕKޛVҧD4dCW:e_MQC[Cd,1gd[BRPeҶ&ϨD-o0>y'>s衉6odJz\]'R~~O O IDAT S}9M9w>9;ZV&g&J jxWjjd1L8y|1#| NSG ?[nߍ2GP'<90U+HN;6 "lL\ٯz:#/n{襹o9Ԋf`"Xt-֒(K>y*dN h>zXk?osTHRarIW< ~7"Ns_ݕfkҔBq R<#HN_,KNj4^aTܥ H؋oU:yL~7pوQ!'_?f#F. t޾=;uQ`gT)􈣣aCmS=Z^֊@R|Zy PJOO2QӖE]*-*&k4ũon[,x̉'RxZY #?qۚ4<~EQ ٻ] jEY ÛhqF)gx%9{.*(%_tOu7ߚ0eΣܖE/e%?ݲ_ñ/Liwcۻ?=%~P-iPrc'#"RxTK{BIR}?yS=ҭn n߮57Jwglg3c{pG,t%ɣ6u_m'_ͶeS `҇&~U+o͵=RT#@Eٟӯ0$h` Δ@4` Vݶ.+3bZ+켯YlM#8 ͝Euh^T|ҳ~~# a,*9 b9:Gt :v'fwon*C- (?H9VD7\!%vf|if ,ಒo,qQA)_\;$oe~xD  z[KOL !vhg;U7Fٹ0?.LejKbn1}E:.ӯf /( iT|+]nG&Oy[@,I={(Zú D{q_W1> ?͸.ͣ|˯^SN gk7bE:/O߸;׫zޭ'sI@g9燀 :a>pɥϗx͵=g5^u/u{Rb&%Ӛз[͔7|*4Rbԙ"_x`I|}3m.d\M en=;m@k|S%iGXvRge}.}hYs>y9M1C.3>]ϽWa n}շ~-xȺ/5diODZ9'ؾRF$dPoVj@E*e55kȨRѣ669y;QW\&S~\=Ѕ'y֒c@K-b)ȎQ%/Dxvs9zcDP0khd-5 8dR-%>tf3&&@ZXbCyJ9sD.gV,|1%۴gz:uټ kzz aȳfOL{%0~f־% ~vi/:_7ןMOsL1YCyrK 77<&C|aM8`zp񢞿0woMgxqy]{Hoe Yj w#+]Q0۳~}`Cq@v䞤Z:L'KM]R/ B( Wšr5zJOyh|\**{'79tу9Q*!/ٰj>F1ݣ G2UtCN9Ab_t-ϧupv֥QL oF{ŅRǙ.#St^/i9<yFc_}v&Ͽ'=_T37pnk/~lӤsʔj>گYȸ^7V^AL=1UNWu>̑}ov}gw`Lkeu|'Ժ7W^AL=1O/.È^?oXł <9jB>HG7ן܈/f([Gd)l,;o%v4UPEɱ9!<]Ejʏ9#of4YL aIj'ȎTJا!O* w.Z<%9,D*d'2sZ>EjbFGd!zʼnO zh0 EX"LtWIT$*I5D<f Bjy$Q̗|027lhRf꩝_Qܨw`zyW32uyN75ߥ-[_a.OoUg$RBt^,4l(HUQD,(EQ@RDH!$Mdw|lܻw~y||-3wfމP͞fbPw\˾udwց$ !R4{(/Wh1p6ihA }|"WT]pb颞QYҲ5&E7] !b Oo^W}<<=iRK=XNu?3wtJY^Ifo/VXjVjHkV*ɋAeq%g*WY\ ~a~ȯ۔~PWQuֹ#Y-F@{mof禜߽qo0Šc쿖yw֊dA0n{rk $ߤ }}l`$y kW]?ko{Vv8yv(oңy@@5Ǘ-37wdy[[c 7KNr9'gc߫ԧOmrp[%fǷ8sq%]&v,oңEO,<+s^Ų^!g{ߛ7u7z40n rV.qjq*UDEAm}yZkň#J]RROUsϕP)dLl uj50JslT]iAy}"CL[7D.^!y4/eIm3.GU511>;UftMD5U:9y\v;#rc5/#^)äiU;D#Y.3@ClRPŭd OlClR`ŭ|ɧp6 "(ݤiY+D &*SnU)RL&va3柇ԉ&>2Wؿ64xwyA6GdDO~3b0xZr׮wë#Ek[%-NAo ^]^}=>_QЕxAAd- _sSǬZI#Rm)Hŵ$"]d\Mb(ˈ3!q%NnIr$,Y&V*sUqb iw  10j.?vCmH}ݩ{*ԵgbTAQh+?ox+G0p(z [/.Q/.3+#![~7#".03l>(>Ve}H31ZE OSuޭBsd"*lYG~.dxw?S#dpa WkT4()jXvG5sxPPW-<虫0U1蠕#TU1BLCA=*m_'ζSq*erv_3{Uڮ Vok޶eO穟˷h8 x RN@̓F#Rx+dQ&yh欍:I޾Vc>8Mc6BEQ(:%VBrFqree>H+jH_* ecv\=9ǛY}}~T6cT$g槙!5=^|T(2״x* j%z2)UGa ~Yj'$9v1f(jx # (*{'qK&$8d%`jb=܉*$K `T*np!Q9= K+] !Έʲ 6^PZhʲrb,帲zv\q;] 5Z-d)uI [tTC11>QxQQUU;KƇ:]OT :hol$pU6 ĹE'X%eLgJOUWqBdUOGN#J=D)-c2|f]pˇ\69.T] )`S̫5T"F P lEwImṊ%`ξ[נqN-U?: /,2"O+U}ڷKvn=IsJߘk^VM>J`+Ixhş:c]'ֆ&E;XdR8/Y o;_YwJ4֬Î0: -1oŘP7):fU%;|R`|LVQ2a8e2A/:S8BV$]wϿSǟjh9=C?G ad>"^3W [7}O&=Pc}($(; S&VgX!~.AN7N!7gOBM x$mGxbjҳ /nbB{n3*,>-m'$Wz']C;Ԏzv0rEPnsLUÑ#ougުXE^Ӻ)v{EU2P;[X^D2~% z8sID*;T>$wO<yNf^eV|!D"n29F+ "͒qqV"8|sG1\ GVM%8 #EwKג}3+'I=QA҈^^LIGć$,x~yJ+;Jh//%£AL:@Ewشpߌf`?p}JnɱeWƏKwT\c?ĵ“붵{coYE̛f민n⪱&֒׎m7ĩK'-u@f7*1#9c&>uւXbM(>c Peɸ` lX^uOэ*B̜CX4y] ٪خû6"@YڹMWc}}Щ3:@f-o˲NuCg:I1"/ȌZe%I~a`J:h*zxNF:r\sNS_3f\\^O:Zl_Gܙٲ|5G>uARxຳUZ;wy s$ڱ&([7hl}*ժ/,Zbn;C"*M;v4'?]K~8U@us0{mٻ}ƌpAym g;ּ vplC_wBx.ZcKvp=¨񴉧ïk ޻ .M ͼU%kCyW4O>x}i_K.`I`ky\7V}jKfSu x;Tmڼo<^d5]w}\rK•W(ʼp {OMEvT|) ^$rMQ2 {y->yt ?![ℜB!~4^a2JHc}ޭz`d">"Q";eTShez%]R\%ȨB^jf+!{c$WWS>:26~髉k';ZB,z@QFjlWNwB* IDATS-K-CE4(jІXQbң;A|\ W3[RL"Od0<5`/jEI1.x1ShŎ =T6KI͟a?F5F=9^?+ߦtMe6QG*kL2/eކbhWŭ2h HRiz~iS?ZUیxbfO^n됔V`t!usGjyoQ9<67O7%Pޠ7{U%L:Yȟ_#"\,qhDm̉xC(Z3n,27SGor j۱=Io+@ԾX=LE lH:B *dk傫bRWV9bFHtCa^ɰpyRj dxw@YD4Dę(gQܱ?BoD:5b퀞XMh$KIє :۹dQGDbDhYXsnUKؓx $9)#K" &vC~xRꄒ7aD*@T%hdg =LFyd5O(0$HN HUt5Fd@eRQc"~͞"OLz4a"y^gi{QB_9#X>Vk8QkH(D>BQ&N>gR2,Nm! D!s50 zHޖ.Eҷ-8;8_/$$rA!XYG41Vg8>?&:uR1d~Q`p(q7QS.J R<H̺C6`XV΄L՜&yWmI9xxŐIytAy%6!Qx\5<z.E;^g5QیROym=s8W@P0 μ(sĐdּ5w4E)beHɛv8R؉.$}͂$bTC{$ i(acjFzn2*ew( k (OblrI/W A9 B듈ROmq"&DG{$2ZI"Ȩghp፵h$Wparώk\'`-TsDH(YD9q!¼r9He)9D=,KTiPTk9.@{Du x̞WQ$A{FViQy+$G`c)Tc$_QcV_M _pmNtxV3P0EZdˋfZ7&ɎnKt<9̡}x7hi,rwTCTY5iN1[CηK'JP!(neɷ\bM  {2n\^{4V^$JZ)BQdA%B ?o^Hv-?h4|]RA+7=5&^wBz-y[o4E^.hHlѱ榡W(z@at&_&}U$7J=K)玓K@VP"&C7{ǾNwM)&]= Ww⣩xT}^G"uPql[?]?.f>iBNZq}&8;+=PQ /Q5&4C"4Re"9P##=iEzu&7"e:O":''d5J h&kܛ"j &ɀA%5{"QUX^BgkM*<6 dmL()'XrZţ&2|LUN'걾~qu4[N@毄7Pe=Zttei^ő/»Peٕjwp}iC[ "sεx&Ǣ=wDbچwgt_BX|֜r9fHF>Յw\frA,㻍zk-lXT}. WFj UnXyӯ^}g:21msʳIm㴑,Y~ۥo__t ;<girlH"lZyۗ^ӿ:|uH}]`X݊G =Bu?z*H;qSjK{W=V`}>Ӿu3͕*u?V^4?vxf サ鿽?{gk}O66ǿnd%;S>3>_yK8|Z (2gCR17mM<(h}dG>nXL~.Clac(\Ǖ_/+BY0"`ZA5dC6M˥I,@ ɪiC{nPIMU\ ~Uϱ&߬/HtOwhHzzǫ7}hwN%B@]͚wM BDi#Ϟe//?;O]<@ |1Ml/,B]d9_Vh6|HӔSg]6YmfʴG5U$3O&,uٗMV4vlGeX(CΚ}TVDžvRQyKTQdF:_TV]X=17,ٽlVϿ[2-xY/_XdΕb}T[Tt2e\u_N>[ٷ_{4}j}!SuZ`ʙϾ=[3-ڈ.{sq7Kx7ι70@֒mOiq7s}r$&4DU~>xb5Ih-˶ssv~ѷޱmW>\rzvrOvn?euU)ؗUR FV|nOxUE!T82E \xCmhЧwG]XfK!.u V1$a"z\$7/yv 4;QQ/@>%UVAB^3jpT6kY⌐n$.Ar$/$HH<34.dp( ɞY* kX'Y;ODPĆ,*Ǩ%ʤy&˹)?EL7ˏ]j8MCU>FZOu1 @.JwbO\O57l7m2JO={u0fb]MjuYv\L@?;76yfxcӖiveX -&P!Ol6eX ͏/ܥ֎R#[(8k7w_bSyuL єX3w\.7 jbϫI[6uw w݌i 6LgJ+s9tzힾbW}~nwn[MlN=a:Ňgo9z wRb-LKI@7}n= h 纰_~ZcHTm.%'E mxR,o{>}{P/\LJ<mS㺥oڠn<kIfZ*o2~_ٲ |6ȳw}"δ燝,n_<޵֟;i^u;r-w7\Sܣvg4PW+Q.y_;}~eGgn{zo8y*MD?x:OV2P& Z 9݅R4]f}6܌rӿ~e)cb^!>W|456Ⱦ)/Y]5'8ȷԥw؁Y 8w`M饹})wշ*xgjN.>_& %p/.Ec^y |N;s=(?ɳ#>'DL7,|2J8?vc*}Oת uxg:ղۇW[IH5syE:w`SW+q5|:"bŸLVF^癞zsZdm {l~zܕqVD3 _/90>˺aB0Ѧ΀/-I/MCco\}VKWunbTޠшah[M W@#S3ϬKlyP>2Q .KrZ2|yR‹H˲ujKF̠ ~8c!&)9XpԢ@cP>:@߈Y^v 9{H n]Ro`X 38~wZ&N-B51q–WŶkAs^kq%6dۏzM._Q9zr+~^֜ӧ5v(>cǃb[wo`Jc9S>^˥ k}S +j^/' >c>G;ϑv^{EIggŔɓ?g hbpʬ2?ʚ+1zgϦL~K#yM@aلW_}=iU!m_ykPO`Gv0St(uݘАɯaۖ&;R|k7 3]ϳ"X -mP'R\ZQogD6\>=Xsi]ׯu!>_-'^/F'KƙK᏶m!ʹj夑'w+}R<^:g3CQ;n#kHj7 #E7RC @*t_|E7e'XsΜѵmӾ̹+#I|_͘<ڍ{W+<<űc˰<ƾӵ*k0mx`1e>;WVĸ!g?_jG]t iv7OX`J9Tzsw|r=t9 g4סn=g7 ~:6WUt>Igֆv050Dn:ZG{:J7OE'A w[`@”kRAaϝT:[Xrj;F*V͚by^TpM䵂oA %(?b<ڈe*ltؠv)[fyy%#aˎXQnSp_[tSd\Pn(JQ3"PD@(Km&)xdv+o\4|bҧtgUCe9~9Bڠ (*cz/. FH.һyM{` 1j:7s*r6Oyʹcv-\q\3ld;w6$ rզ +/x{?}َ4>)Ꮫ(nڪOcWeWqd&hI4O| ,xrf~nZ|z~á[9ٷnXwݧ]FdrʝnۨY{;`U\ή\/悛ja9zl8Duoٰ]Fo[` _ЎaJ0BY_ 1gm [ Nm^O|_u4uN,r2U++ڦW3ڸkOKHa/<5o_ϖqk-:EKw}# ; _;*o.Rd^DoxA~QysXϞp IDATu;B +GFۼ\;s.C8j7՞Q)&lb'w'OɵH|Hׯ+(̽|}i|FVmXG7JWP3۹QB 75'⟿/DԧOm򬞘H%|SϩTk_ͺutÖ;Q]Ei+ BCR6l}"o?.&+;4rJFf̧'e:lܪ>IQ;wjZ;84qm/s{g4Mdڞs>1VԔ^3oQt6R⾫5IL vo{k#+d!%4$_o*HjMj ?|LZui$Bt_zRv7A@aUtX7쉁4/9g9Ҁ; oNV\צT1i[d\58g3ZxZ j>毹\]վg* [+MPae٬N؛;Sʾ%zwn牼:MP{p`C.c^Zo9ӧS=0QMڏ3́inM=ju>j 縡(j";N*wmjgf+-pՕV1UC⏣!^Pŭ|+⛙_j5 ^p R=o;%>#*SnXoNR7*N-Eq\Qb5 \09'ɦ8?_g{'4mݼY6'{pጟ;*c |9G]Ӆ׵p/ZҷM|qbHq)Mp}pp''C.cƾJ%g–^)B̻6Tg3ӑdu7/Otۙ.!\![iyvmurA^.9CalkC/`-a62֩ /No_ ~\!X$AF5W*]B6{ /tB"A.1hNbP{ yO8|QlgF 6, `I=C`]I/zc)Rf31[ƻ5U+I!`LF$OZ_:Kr0J/qq'?0Urh"$'=Ȟi^se7~:P,5U5|@"s7]_aHہ4n9lY;_8K\Ȳ4V{cWs ^:4~ v-xyj7){}tu Z@vP#16ya'̜1b|%-JHJ%՚\a +f^D7rOjl%i]>׎o|G\=T$83S:f92HEQM|}!t3m9lAyu. =w20Vjp _C?9ZE\@P&bEeaK+\7bg+f(?8bZ|f].d|#}D50ۯIM^'o4u)ܴߴ1f3 19hnƽJT\?4oڪI}:.NVeu'8Ez1݆4?^Lq kKD3͙36Iށ*O/4UqJ-uO2 +CVnFaabݥ4k gJ"vL)Mn+gfFXTq8q!boEjlB,৓ͬΎF{$ӒF'Ze5 Q#DT ebeCT̆z( ו{X1`T1C[Fo<0"ϕ$oh9"(l,(C .7؟*)Lï;ƽ߯hkU"] cˑ!P}{CQf WatODdTkCU%p܈!z䭚"UAyAط~}³hwq7 D/gX@8t>,˟xMĖl+s@WU_Ь{3̭i+K uoꗹ5Lq$ p>F[tFɼ)vh*/.`=[_WS9 @o؏;uz<XE0uyH?9s֝RVµ3l<<;:81Έ)hMed9t=/7<$)ɐe6@}Hb>D`-Jͧ.|CfT'=ulh};1c<`tڇ>v+Kxfʄ_ozaVB$tw?@΍W- mo:VFwcPh#E@yQgZM]XЪlx{KE6`H=V}l?7Q±E/O\O6UVVΠiG%IOPǰLQ8N^{(R,Vtt) e#C1pϲb9c<ԉb*L,:g+a{U߾rZ)T˜!}cvAa}i}~~_6F,U󷚯ZVdFWHi-\&aliαk*DuVs9C Ne_ѱ3ɥd ܕ.uҕܬ=A -I- eԱLGKA[*В,"-$-c&h_Ox2*H  I#x) z-w;|'=ﮝG>hߏm(֟R'~k ]b @%KhoR@$68dkus8*.oD'pDe3j'$$+?%]lsl6i! 3Wa̼  G,z]WV_ۺgϿr=׋ZMahmh>]nRdA:s:ˁyvhqP y0#V:쿔oUV=ސ&3L/4ĵ7)ULFdU33 uܱsHڮV@H:Bu޿n=9Ѧ_aݺsT򖽩;TM9{k\Á7ىI2ox偒eUť*̶Dl?HSOE6/?@FDm|!w}?+f/ۥ3Rr|v+pB Z7 -IS˴"BpcYsi1 b|V;!XY]\xBް_y$ ju~cH>|&>94ۦOٖfq|Crì Z3 jkēNdZ7VlO\}CjI0 3-1usm3?ܑfO9~p hZ5>R{ }o>SuxWv#b"䂈'oO|M~&4;Ȭ~yܿV]B ZW&6ÅfpGE8~RDeඏږjhQ?}摒owjb,=_[9i i;̢EU7 z<`ɽҪ2 d吧Dk5]顝^ꢽH( =eWwc1!ܖc\P:\jfUF pFv[kg.xfC.ؔj6C:N~ň=!]3LP}t戍`K)t/cbsOQ I'ؗe.\ 4t"c.g!e'VۇČxu{s*"6Z9["0:F8Svl𜙬!HD+)Tx*dEHg{W"&w<%rWD&ס',v"P!NzusT򭦀oZb]yܓG8wDa!B$q6Ӡ1'(ډSuA` @, 1J(x ,lN 6f7oN~cʷH:һ!S __/?yg*u>%{%3Xr;2 /AҴ3VU/8]LQ @kAsן+v8%/=>`)L>b;UG9kUxQ»'t'NUH{ T>⊾̱' [8g@&-Z3 }ę;s8kE1?\> *W}zKfSV9HKƞ;g=Hӏ^X߷^lLyY=;ށ8xk[Z2<]nƩ V]+'9a5{%x3"BD`ɹj7dpyW.-łw駵: #?UUq~3w%?`a{3͓fnJW?G]X̶.hs-X;*m@Ow> [ޖeWp;$TeKήyu9C wfYӷ}4`<\ݽd\+ZxeA~۾}6qm܉k~pw^%LsF߬h[f-K2]8p,ձeX[>F ?U}ۈvMo˒wşM~knrj./e'ٙC|L[`g4=ˤ;t,Ο F^ba֒wl"xTz_6s]^΁>qmQA-;G=?k-.M ͺUFD/ vAAV}9Kե3尖 u++_(/*o&}-M'C4pSE~(5Y%GsQiٽ8`;_Y|  "u"~Y9A=w'#rCl)*x)IU$ y{ j%!) <Ϝ9|=rϩ% vz ͻI"#幂kXqOa/i3|uv|َMZ^Q4Ao3O8s bv¯~~<>f * rIw.dok |]2W{:,'of=HެXFye,Yge㡫cc|+~_+Q܃Ƚ /ߎ_xL"%2 pG]ac'YVQ6t㏲ĭ"9]U8[XJk 7 2{4ܼV(}^icza32Qfp˼'8T `QaJ &GoIȒmWԚݶ#=,aPf! R灧0I8]lX7c WȃL[(^&6vdT>}T9YGDGh5 FųuMb>ˈQ˶o:VE66ć?1uAƥI4ރ='TįK)bfI.\AZKiFX gb6bD?:qk{c'ފs 1k(ulSlc ;Pt"4@#KrvNR'zmқ5@v=\K]a" EmuF W:D%Rflj5(Fl&B^;By.kzI[@ĨPh UrΑӴoUl;%T"Q#2g 8+D%qpSiYpg~մFd^BmfɆ3#bAlހY.8Vq2(<^mP<wGC{rոeTl&M!^9I׫'b+{>2E)%p"l^( TJӂLd"fI(3w冋+KzIG>(hM g@f314?퇼ˡ :REsFNH- ኑ}ZT*#܋{&YȥPxTO/ڕ)X$EI"m%DCjsP3ZQ!7 oH'8 H 'wA F@DԌba?U^rpfXTzjxyogF0B%` 8Ğh@lrk\LŇMmiՕ :HqF!U1[]z"OZ4W}fl8 hHP CA̾v.Fŀ%@_ @W?y5D6:r&Ih"z4\=ejgp\esnbɪ$2쬃b "WtF^Ed9ǂeRED5Ӂ$v~À PO^:;ޜ&TgL7i"59QRSK OW(dQE 0:2ED!#.RX݊m{*fzlרs27qQdD9Ƅ(G{tr܇ˇKM\Q 8bUEl| jdD ̍[8԰ ),8D]fvaE IDATzH*R$oEyA*n券5e8骆\"jI0‘IP).8o r̈uy3qɽ]k߶77&Z(uux2A%p^?] DMGa)W3l}5\+AFz-U˚ykA ɯ# xޮetə{9?S<\5O&6c):UZ-Ӣna˼/%!!X+DP1D_di1;ݾ+KwL JΙ j#|H-{M袇|']5ydY<o>N?&{TRrHɛ(8"1ފl1"W2> %i#K3.z+?*eoGMXOW,-$݆[V.@Rs4/teJ3.ڲO~Oݕ^;~➱#o>K[gfoƆ#,}=@'?< M7/w'LoS;\vmK~Rpl~Svp]|[!GbշexY2!1Ѣr݂#*5"}do|$.l\?9NiM@㾣GiROo[@E.fՓY:'W`\LFpyiafo#돋v}b/c΍KϜDuWG`==e52Av6.Mt@׋Owı}fW% 66;C -PCIB/&^BI6;`pŽ[dYe jw+ɐ}W3g̜9w\po=~خ  Ж}j/uǖK/lX(I;7oF_B!y7/bZ(Mዛ/ԑރv\@ɩ1' qޅGc/2Hp3/L|g7-@3Gj1}[x;@m鋿vQNκxO&;.QTKYl̅IypaBE)gBv& ץ>>5.:U`B-QZH@^ @%Es^u,O3>?DM^.ʌyW=nIA tڿlظ]}ޙ]C?v[}u>!iznM2c+[쏗 ȫӎX:U0 +X׈s#d[W>LJ:$rm13H|B N;hbzuHp=B&Wc$$>t/w#E95"Ch@p~nvz^Po{ŸѨ2m5^(ĀR` ")Q+`ʞ=c95&dzVʼZ{=7%w)ݸԲs +#%Ί*eEfbU҉БCIk^j|l"-9KӸ6>sk v.CT\Bq dS%ܗp77oDzW'ߛp#Ygxsړ7e^f؄po_E`QUm"eD8Ax\yxƹgumrݲ^ .5 2wYyéq t s#kS>+I"ԩ#: U΃ӿ﹑F,$ |,eˮN1IV'ı=Lb, Tveg:?p݃M(,ڨSHŭ5qR]Dr 2{i_%{:"nPSY1 qi3˻E;?xɞ|xThVʙNP%ܛ>d2qOKB>Fy!";0)˯nux,]W;[Ysia>>و@$zVBb ^nЮ "\ZF<* k7KXLc?yբS:EX)?Wo?e}O2[,uKvzW|<6Kw΍@Dy[cg۷ub wy|vu+:ၬY?BI<4d$ÿgHXPidi#(յEz ~rM▂b ΊxGuȑQ\%.Zk.Ar'y2xbL?1ǺMCW0i Of)zObunq6K=}Gg6O]l߽Cիk:F -]eÈnwmwb@.QCGɨȥИ-=ܻ{g6+B{O:s R><5 Cc .,C& hJU捌Zː.o ?zy &p6>sb h;b3>wctEigc soLdFL[[q⨆lRmXJ.9*Ry_wG u)dYh'@AWzq:5FFUa@BS YrDxq@bMQ{R77e>whT^Rc>}fLhE+gH©Ȟ3_Ϟ9kٵ@-:Y's£bKfM]4qt#GkW^0w^.w^r_d796`rkƬ>p|̤&N,?eڪu/~1eV=0Y)N-iWļ@Xa]f(+*wחv*?n*(og׷v S [.,Tc)*y9"ʭGONpC/PTYfWƱO /anebU'7wBhn]r7Vv{?s7Pj /o}E!j[Q9Je §, ɣ[>~ɉ׼ّLCNʱ'P?On]Jdü<7tVyٹNOGPZ۵_Hf(O7b7Sx"6oa,L7n|N ޹q] ڌ99&FV-n: P#. ;"=eBI̲7)w/_ұ.3yZ)NO64wE r]:|*⽖ȪUkbm YrC>`w9z|%4.]$ &JT/^9"SDFyS>Yj^r-CJr1`_aTR~n^yy7roVό^<,=`_DW I9{XotҲ7w/_f1*̿j}MQJBr%sH s/g?frɝ|I$fژ:D rڤcgd$\+ أ^=z$Eھf`_W;ͩKcN I+T|&@lvQNS&lߤn9ǙG߼M놞{r«X.lzas m+#G0bXq2,y꾖.[h蝴:ј U9)_SR$3/kX$Wao,A1B@3;?cܒ4&+ȑ["`˗f>RګjsEj'FUHAL9܁GֻQNJb|L |2́5?*H^4gv$Y=&;w!anQ wsk.2V{OV<֊E' nT U]Temj SH5q_72#ƨRgUH|In&bHo~?w;l(9IѠzUgzbaҽ7*y]CiZ̋o^aUTҜ0[_SQZZBPmmsg0 ^iHdPD`^]Ιy9Fϵ˱^]^RR3~\~η>98A(lS"K0 i3V1sHtXܹ8u~'IҲ=/ro1'6͹u//|7|:yxtKoĮFbd. 8m[ ytIf~}Yz2K;)T4P]c110r`rhGs =j1`CK pCe_ mE PRXiETj "~rW Ui Z]?Y}y 5>ϸƢ{a%=)lM ?2O+9'8Nh{aFc((64Ὸf.6=Ry~6Ҧ)PUZ,SH gά:"! (t s?!r2bt& ނZEEӼZ?^_n@J4N~~}%꤮x l_z4ofz0[ 3<ږy40|G/#٭؂p /ίL 4@iթ!mJ}MhAo?5:-(sNHULT?C18BR4?!>B/@7+^gRUI;;̼7Ywr ;xРr;9-|UF9 wk:=}Mw7ToF) B`0'2{ߦ%vsvw3qЩ1Rvl>w;_oׄb |{q/ G L:yeO`rjA쨔N1)  e`KX*~pLôC?1iYߦxFo^,`哳4DE^N+UTTe>UA]QCYAJ}1 K9ΣWϯ510U{F?OPIGdg_|J̎$'DEV !PC4i]NB09α)JɖE BWUۿ/׈̂er)ܭE_-IQ"4 IDAT[̈́_Mo\JrN!gs+E')NCV6r]Bjo4O9zpڼ6!7r,rc |Fa1p#r"H~ /D"6W~fr׶}FgYx0oFt`+UD3*Û_f8ɬ@4+[g@M?zv>R ʬL%(6 Ђ.O[ =eT;)ʬм @/XBDm /zYò\h_!(z/$~SG5cPf#l$$f兰<\'9g݅rXĚ=vJcMv\!k'o$4b H(*j:#X?Yt݃\Lwd䡠G1J3g'ap}[3=22GP:-;2H3}Rll E{EU$\li̲1VmOPAō'$|EH0{ZJPbTZ{i_1Z8ww?-3XIL$oMek'T.E[IO(B2G@,:)7;v_ +DVذ/Ժ}y Kpo.ϾvIn@-eA+@a0BUA-,ЈI!y@8:40vOUo^Cz $luVזIZdGӼ>R%Ü*^gU /tJP,):Fl,yWۓA# bRo;z }ţآb#Wu0ǻ6:e<qo%ʞ}HN$A6lmб‚&n]lzK2a 2=dz yK=w\N'ǰRYHk*0T=OD5>FYE c !C6}F kAV/bQ fa}$r^$˄3(_04܍CzuWfꖶgz]yؠ~.n6B̯60VFIrG 5k͗]~[Byg<<:5uWrI!\f{Q(;ҵ3_QCd=#hn|*=$|'z֮/߻vS8lc }ղ ٜLY w?c֍6BbWŰpj_(liy-VoO`M'j^Ĥy{D omԏYJ3yl0BC6N@zc]Q@X!tnIT<_wެ-}, 6E HiĢzciE!c@wQJU/3a߅toQNUfKxw8>[4hs `JAR[#k٨Qf}9\šܼ\E*=* zP8}:9EoֱI Gs"~FrAR&ӼyyyyEj=* KtKyNa!ou!aJi;hܰa&eWpX}.*{إaٽ41X^sv{{9)$44~h' :)<ڼW^|BF^[ӷ @v3رwqS}M&K iS<۽"YO˦@Ґys4T>$m7~X`CFt=#|tq}_5~46PL(8%bjdt'ܺ5`-#O+"-6 ߴۇS%( Woն *8yңlҸEsB=>@+񒀾+~j@R߸CM#~XhQNJ+IZ\z]]p6oFs1` :ҝ~_er/雗m..<~j^7ogkbYnQ:=+hpMK{vrDG{ϗFd!ڸWhTfUYZ-Q;>+5` c*i5!>-JQ8' 6;}VNqh0nGعUJ0eȿ1jZ74JyAz ߾_x)mWnx .`xU /oLYEcٛn&O'5/nmچٿؗ3kz&+3KVJZC_PA8$'a081-jxgO)8ăjr{L_]|Dg+sQp~N2Lb:/ֳ?ٲ]<<㒥; |P箛8 .oY,]z .87{زm?ČhΟw"߀8Q?6_\vpР^Vmlsb/W G`Zeb:1C”V!F`mo6Lx>."љx [RȾA̿JשJ.jU6{0O6A2W?pI]@lRŦOV=xT'8VT |^ tem<WnuO :P~l+EV#>WsNc7f`c#Vt4&\llLڹ@{kCeuY,t䲕VU*|Kx)@БWv3̦]ij t/oT3M*6_"aQ2ɴN05!0~[]I]٫$L:j&'P>:e rB9_~&V?;/l9AU]煴T o?|r_YP/@V)ltuc㼢 !H!c}=aW#2mk]Ῑ0cMw~s&Ckd=ŏya!t^,#@)I@ vF;7yRE\߷daJ9r!Yr3DFԆ_7wŲ']ϿS\ \~'G'ȗį7V쌼+6jW7w7}Uso|zȏK0k|]_r0|Y˫w<*5HBGm[Mˁ sl "|AfeWHΪw]!JMϥJle7\I~l`[%nvP=cUzP .ec6]~@U<*Bob;"aLܬn^>gY~^/tc-1Z[LXj, Ub4& )=0}Q~>>u_GGεt V`@2B0qv#>jȆWآp;IJSy$[b.B2?c#q:^pd%<\@X|xZ̔l$Tn9 U]Ao^\{#X*Cc"wĻYu1t)4kBI-ჱwY8TbþuO";g+4[ ֢m.kQc{Tmˋva!B$ 5)ˋygv.||wɤsboWE 7Nh2y#1ye}Fd9Gb6匏\83BQDVtxJi#þ-m M^yI[ywxɚ߂lUCx򶹁Gb6SRn^?D +==8}ዉ U7#V{F5wvDbY3Y6,x[78:P?5'3t )v֪;n#qe@T\+bUa}™MtF0)"X8D|W)v*Xh1; .BԊ.,0l }έHѠ[GgEz.{(^|90`%}m7KFuh7]BaK7Y؁QC[9Y1Ϩ`'I2wQ3V]kjg m l&f2Ctt,vfv_8*-qQ 4OJ O#ڹxsN]ea: ,ĺJ  *5~#V[Ź*!trW?A'omX63޲CegLۘn %K/ =zyu0FvjgZ[7Ӛ-^zo+EofMEK c-9Mu,1sڰ={ I`YʾwUsTwo]d mö,9h>!R%]۩L$A ˉRo;j%[7}K`Wzk\.t0قDWcݍ^8XdQA"U0P (0lĶ;9 2$sWc7W#:~zvY!+pEvTnGiDVm@ SΈfmaI% .bՁY9 |  h\7ls=XՈ-:WYUT! )Au7ĐG+0& z 9g]BV+WCm.^)ۢ~,W[en5uWma[pq1okURFLx+_I`(dd3G!JT4o%ΒlX;,j* )LҜ8=fBw[Slo#ycdWy,Xa/g5/m,%[J']0A80O'c {\?q3_1uX ~C"\s̪kPˬhjp~"n BY~\ift@ `V^W EfK9W L -"j&Fg򞰕fl]kDAQYfv7bk:?YAȊӃVLdǴ gE ??m G_~,lKFt0< ^KBRz֙Gfԉ` ֪[vRe^E:7ivn1FOpK8Vn>s X h`qfv,ADG@ٯ B if=ʉx,,R.P.ׅ$ vmX{lMkys6LZCu (+YBwya&P7bmsF1mydCV$VDW\@غeYgޖ:Bo/c'`CIuu $"<5xugϯn PbI?.nu͞-CHA m2k7<(PaRorcTO̩mQrM28Q]v9$%EVGkSw?T `t!TԔB佫 CGSWƶz຦yOvqx3 ivR oZQk$l޻m*‡N⋽wQ!}cjNwimgSTc^ZM|/)1 \ߞWGB81S-˜(2(zGa!@$A`S[hHAnEB`W#TufSV@XTF@;sH6eun4M{M 3MM,{t {,o.n3'Qؼ+n0_3-&q2dجaN5=PiP'ÌUı.Ă<=YXBqM/N H|yQhI7|7>ĒE's h} b-9WhJ4|MRyi*\#rD:oƨE*x>>=.:U:wb5hO.]|*O%#6mлh̒Et;,#3 u@_z ?6^'響B@>6AmFk5OZl~"$Qj~2vY0quJb }ξjBnz6E8>}2.:U8B C& i9;rT`D4hК còYsK29&ܣ&|2K@%/osAq9>2'ܣ&5"3m[Qx*4xКƄf]{rz'c6 p&= ~o뗾fZ$ty?}s5ߤ}̅ Lʦ7݅Lsգy"HGlmwȺ\v)OϨ"fif&!L{[R. }4o#jp XC ^U/n1/K4DbbBn}fHECPNuUE~Z=Uf10hWaR7J:`Eb"JtɹR_|]'UFnDq[ EԬ]KIYOm+⨖c̞_fũ\>xtw; dR;T;FʳHHW/Z<"smkηcz%AR^~jn9X_V(sG)Ӆ5剸?p4` lrA~LRT=o1SXBZE4`hc~JNϝh1lq`VӼ/djlm_ʑZC4*˲TʂCؘi5)l~φʄ?v'5Ӛ'Y1~I|Vd9 Kg+S-͝=2g)s~L gC W|#KШM?g yMiѐU)7_-Ua6ç\ M.)T9oբi\"HL`$pޘ^R6W瑖/喪;jشKq:{O_{%€14xy0('S;%~gչoW?ZoVg IDAT7A0jG1ػKUA<ܢ$1f7S { vݐLoc^Lj Mj*슧hF."tkڔ)hPk'#1Nᡄ>R&Қ]G%-`BD`a٩\J vΟ͌c)BK=yp߯14b`~|r#M-^<'{wmFN۷;*:P\J凟O{!2@w)³ss!kij߻Qp/O2}T{_V(T{e5EVuPB 7;1 wt '",d"ryd4 y0?' pQFdLh'|jS+ܷZ`H{kg &zK,[IV%؟>CGz>үV+9&W)EJ4jM\YTZR2R,(@IJxr_"Ht"P|dYFV9$ ?g#0q~}fL\w1KX 9 jEٚFWϪ2QjP8N~`ϋȳd}Ի[#{w=)]k~#@dN) ul4`Ț┿}R{ Uӿ"c$]N֞(Agջw')7lZD5uo_|>_˖^7Cys4=Y|-ɉ|]ܣOpٕ [{\8[~YƝU^snޤx,Vw `%Af;z&-ϥ9BMeTP#5 kAlhcӵ"]l}y9_47dUɍZz\{!Ф*,9/vi,uDuM#܉b:c(;߮=Au f VEcf'SUQ8m}N0$[tPş+.&फ़z|<]g 81iJ[ C #@ȳǺMCW,9]iO'[p"SH{C\:߫l?}YêC_ozq_"McxJl]p'͘? 4GP0ky?]{cI|zwҝ۰0(zݽ xb̔foY*6ĘIMrWC_j_b؅)j_ufìi3gv-&<:rKb֞R'&+D a@N!=5E:tGz" VV;4qu'3e" *t a HR}%M-kl6AB B+ kl[N& |~] H_&+sL`1:>cW`HՊlIE~+1wl= <1}g@1l ,"{L]EHVw|=~޴pxKwb@r ,SS hܱ(>P+`MHc|#JY2 Ҡ~S;/#u ųر@$Le@lʝ#Fkj}j,p٬zuj{ˏTw8#$|3i܌EZn%?`۸h¯$`HQ =&u-jҩM}EH7K cd@Q2aA Sq4 2~(¨#d<Ɣ)>d':Wf<s@$IBB"$$Ɵ%DBƠt_ፕׯeV|oߙejy~:JS=g=kfRL`į۰׮#BR:.lYu=.>ڄ'sX7X^"v/5uEӤ1M3# ~݆5ve ,uh+"Bn!͛2鱳4g7 Tdq@bMQ%3/5U2&umݒDYN%*^ԭ:q+ˈkIT=Lʯc $4ŀ-9I$;3đdS,F`0[wӿg5[u+ Bq6fɤx`\x!]qB\vH=rWo9B֡O yjq/=7=7wО佝?){y'x_L&n;Xƽ0 "3 s^-^}s\7HBfO슾AV9(/Ljtv2sm,T{;h c`Gab]'=iDZMW+F8M FqEuxDv5N6>$)Z}lb%F7WPWGl9xx[Dž A [qӲIBGV?T3(O|$>'%:s/n2$8~_GMSUSž-7HUc 3q]&-dll6ҳﺃGv7Hfcג. 58z 034l.4[7Ҁ3E/2<*M!=?pxϯ[gѾzS)ݓtfL4P @>2f(\F%@A$aԩ i>w\ ;זCS !@$B$A$!R hߔwJ)!!IKMfe'߽t-KEӉ*mmqj|rleH}gG?.}vнZqT&j|Myz<'Sj2O |R]d@0*.??/DLE6>,=`_@0*)?7/|=rj$1*H*"R O//!]]Z02DH)CN"I P~ sN_X?݋brg &B݌ZVx\[<@ӪXQM_Z9 9V Qu!6߯rqk*JKAǖq &X vSXgx5Z@"myPצ[qe\ L"[8g¨x%";`rz+uw`+b w̲=5<+D n\bif M%ϊ$kG7wj\Yr歋@}g q`{6ww-V]|0I%V_|}/\ˆ<^ @7͇Ucd@kέ~TJғ_1H8@݂7EOUgسߎ"ɬ1c"u=2dE*DωFNʗy5,9,|Db@cD 2)sd #iQ<1%jK ySj:w^s<u?YX_SQ–^w95oeK'zMِki8 ֫}g R]%^k .m>2&qtrnI^*^dƉ)]>0KOwJ)Q+u0 #gG##uE3M!A IUz*XXw& E}[ T(:{6e̽?fA?y1ܹs﹯s!A`wXKSB:N᭠@@`ڏa]jϹ$/Do4ia8Oa~+9z8Yбё%^A}W(] 3sisdx'iwI۟HۗMȉjKԗ/0 vhuoRJޟRwv-q䗋O ZkO?}z|6_sc5t͌J/{~ܫRzn!љ?vN:/bIqvx e ڹStc@a}/KeJ%#23C\V<`w.x˅ϖ Q l_+wt{2;ZMt?jI{i $S+V bA:HqxPWiKzgmۈzu1)bsx^ HDdXdXaYs7ᶝ;kҼQ,|kOEcXdDWBV~1N)"Jܢ H qnqI Bd;iNMS~Q?lڢsAnjBӀRteˑmv1nnޜ_CI9_DCFD51OnPПns m QzE'%KjSeJ;bp|}{MbCI;2i(Q@KrZWQK Pd l :9=9weK6e(c[Bj:J1'Gq% Ȱ2ވP2o-"}RX$f_0j{js30Dif'ŋ{%~l}Fg[ vs9缱uths5@~Oj 4 B[$SkJ0KQྺ(mp@b)6 ]t]WO).^N1\O&kTS[|,64::l55bڊrjN?N($>l5)9mC*,Yy.؆t%~KA 5JMP~0+ZGynHŚW>Y#[ Qccڝo iٿ@k$BSq.CR -sȣm!͇ +sFWT|9KsC;esy&@sRZWQ 6H+]?#è8##I __Ig&~pĥGl1$)-(8R>F [jsq30ĴIo>3ouUW09s:kў ҵٰaq:ellb oo<]ȁ1M0?m2Kާ^יE`fƖy OgKx96 fq??HU@h5Rd;/}jNiV:zIo6Q9R$P@*\m&=]C\V0?yuDQDGBP05<(0V4PBN}|ֲy%de%}숤(' (b6*=ތ%شXC@eahs'sa+"EmcxkK:6a!vއecUK9xqa<㧵d}-)wnIum~;qv|to|PTW/SxpO 3\\MLP@GKQzobրp.v!㇏5А~@uݞ%n@d 'K;'=| 7oGM)"cVy8gYjZNrNM5f>ߴG:(1yV.}Pj6gnk)yi?xx0GV q͒C51bHLJZ^S\Z+,Ec޸tjV|RA1339i݅c&N{leʸʩcm߸œu.V;LMK]s~?{קnF(.H)Qw]iIP6a'GY(,5-jO8*GH[Fhɝ4!-m_{^H $4W)6JX r@iCUm%{* 0cour຋ #1eFvߋ;r7'G쥗k#uKVA 55yGN^-YiZwRBHCfd >N5GDC{m ~VʅS,z$; NC-?i%(F W;'ǎ;4)Rړ#om=}K91'&Qb=]gOyS}ZqD5bLIL#ggUz6ԮΆ<≴*$.z*7O{4oq0ؤz'{kTopxrXNuYtXG h{{kQ%D+t2v~a;?)/yykW[p5 TXb=WESMu~?x_\DϷ>g'Ž3aTH+9OzWgWiXJwI3.xoGXn [&Cu -NA!SxX VhI0p1᝺R՟>C@%٢?V[$)Tm,{ D>d E{, $SeяEі7z\5ц-LM46O T'4Q3dИv—z-smgKNpO=ܯ8XSK 0b.^̒{zw_ncLE8=xoҶ>C|rgJN4D8j}5]fDu* ƿh{ f-yWo:B!m{K ߟY^SK >sMXO}O~q5mM+Omyzy+]GU_yeϴ՗SNQ:S􋰞O=[ҨhhdH4ȝJA7yӘ:u+i>:{9 A:UTB;Xu xfzYoNW@ASW]):.Um~^^OOUezTX6-twH1i 3~QF]E[(;jn=R7{:Q1#Nqthg\s:TGԋ GZOx:xEr0/YKRE͆8 )QC߹TM}p _^T63:UAx5T.-2ԍJ Jh@ Ί׷,dj_Dq#lL¯ҹ6zgm#=0 ߱M 8U'h1x`oN3[/OuRS;VTU3_ uP5ށ snf1P/ղV|(zԒth@~*4wbg@˕W5*FxqZ6h"N-m"M^{! `|lHP$+@"4v[)䫅5QC%Dل% &T%ΆX)]`Qj:UfZWV*YZ[30_ Zw'D E VHjکU @ALR =bT`Jhp veUsrI7%aDATuiQi)U6v)2W;7\=HH^j7jBP,HoD !%_dbQh~i7ɸJaS9ޞ^:P$Ҡkf:pSh}'h\Q`rM GR?U4ޅACMC4V:+Ӡ ޠmsjmchi?c2.?s͗[[Wڎ)`c+^p JFLk+7@ޜT7 uwBw}\}|\FQ9#t-ETJ)} Q#b%TzBnrq: +Hh1Dʨuo&/ L(0㓆M R.sk^*gU_B}ʊL(4c{ #rY^6!$ݠ Rw苶+aɿAE"BAV2 zs&;X#]4`8CAx3V5fpYxD!'2(,N  { naB?pU[zaTH(4M&8^B>X &*688l]K0oj7t4 MY*Q/dIhp`z/NTR V~Q]7kʨAzU`<KJ뫧*kM$lZʘ &}ѫli{γإ$(YDP''P]HF*GE1UϳFkQdEWJ+Prd=eUY尰]UTM5z(T/uyaFYenrkI@ z)LT"A-\(pZ}4Pg+sDEMt,^U D$pPA t&9JjǏ xב jU1r?e |WRߍ|0"u-U!9ԁWW6>g>#]X}TOuj I.X sKv`4\kJ?Ֆ:R<)± n@o0ʍMu@~T H}f;jQt> 0@$hr9S q)QmFObP{".F%zrk"I5;&n(՜J`~H)pDeij'D-*4Psʉ[  lqVǷ Q_\()_Z>Kچ. 66< P"l`&p\NMOXuE3z"E q>Ii`@{p h0ձ^JFQ lTŧѢ̜G4*KUݔ=z#d%| B>XCTD%nUrF#R׃B =c0]I@ue5(_2LPdQD޵5!E+t"Q\jU)IdʻsSM?BQcHڮTSE`9r 2^z*x>4iQJFp<4vMɖ6xJ)ðFN3GZlVP*䏪*^o2esuiAS AKWwGSCv`/zDꅄOdW[0$t;ؠbTFʰbּ@`OL EcO.EzE4#yT @C2L"ݠ_B [R ,KTFajxE}UF^ϟ2$ݾ2@+UKVfo-'#uFD_#T $3ԟQ]aqrQV\睪OۡNFe;CU.mc${#܋}%_dxhzRP7ROXa̎PՁg$F β6 j+ړA !CPe ށJG($z pI!^/  _.]т:mhf4]ٷG˄^BhI4e>L쟾]{]j) 6D|h{>[5d {~ObnӒ?=VTY{cF޴_Co-3l;`"B;ǦJg]yU2A-ML~c>/_uZ;hPl:Oe8Nt}&xKlUtAuՍ~d4N!h?!4f?-c|iN&ڣ6 %◪l 2gZ}z"7sSdFcm޾u}{Sh!g%uZ$1c5ௗ_XoɖBt]x,tI`jC瞸勎NS~lvm᢭`c>'}\)!shCCU< < zi{=Ѩ8əǶ3'Z1x/_ttck _R #텐سwX@@=k~)Ѹ[&zZ<}=Dx襇.khDbl=nv@? +CkOlZy&t>_t!Q̩oC2HD{]>qkö勎 *5&xXqյkB8K+yԣ O'6OWK84Ǟ-|iKGWMJqwy[|x#i4")^Ca},C|׉>>:q7WI3O<]r^[T$5r{\ )jV!isOjcӴg)vKn.Nŋk~ݯڠZ}R#V|dUi\sd sGu%o[Nw͚4]bo{/y2?sj ,=Ǔ)eE3EV5ϷóQhf>cdt>lrUb#[WڛkЄ^ףbLoBM#|]߮ݓc=QrcZF1uW7,] 8YEq<9ŋvS"V|tʯwکB_ D-ORܒ(Du}F#;ϙh@ `i?WnvאQLݥoxrbݹL7zZ!+xz@6KGhRe7&|¼lӢ)0rşzA.c:cEEGv3 cgQE$Μ>A}q Egm<ʏ5+{1v߿2o yf̿]"_eޔsY3O1?j06c!>|O6TzL}տ`?TtdΨ/ב 1V~g>=)'s潷>8(V'Ռ Cd,|O-;ūO72vb{Lh#z]c#|`- A@uyT#y h*NO_^42X*E$"V4 XX h96ܯGþKpr{D?-r0*D|hC|B41^|cCTr.NVTח-Vhh'MxICJrSUوDL+uF04u3BW}1ڇVd/0[㻔Qaݲ-q_, p!Xv8vլixQh!լ>@6'wkU+Gopİ]}\=gb(QCY+?u'<,1v߿2yf잲ӉjT=\t/^smkzLx{ڶ?ɮ|e=c.ds}aI0gjh_تGCSBÅ g%SIm:cPU{ K M\փ FFnfT^m2ů֯Y՛s"bXZG[j'9ʠT1 9ˠ["j.^@OQi[\.̈]{'Ϟ(t~RճիJD7.؈ Mi~^XwK0UPdIm o5}޽m %rf̙6A@`,K7V=aӫf f4gL^-U[8[+zznD +2 I&羶?,?卹Y3hT!(bH Dy;?g=tҳ3ڄHذu=1߯;9>Ovސx#3^߸xγϽᏗd$3U?Aחda,֯֝7ií1\7~gNQ-4eD;Nd87\>=13XgՖӥvRd?rѐ5K挡xʮܸ,3pn9ŕײޞҺ}cU[NΊvz<,OETk|:FPm$ءuQ]hLԖ~){Pm4c i`ds66r<'}|G `BvCyҠ b4&=qB : 6dЀè1P9 _ue  {;{_:G+#)Cb?LnPf;le@RDgΧChL(kLju%us?[1oC㚄a+o;0'3_ IOSOL?(pwɉņцgj6|dVŖy?mhHОK6ZVsh C,*޸ ~Yٜ"ýk.{/XIv;rǿ|zymN4g i~Á9iTW`N}N40}bV;FmJB 碧g-x|҈fO@!`ai E4˂H_/8.8[p\9!ڄ]vʲ}%'d#2 BH樑w,' 2ҝĎCEn)P`AAe'e*!MʪC]<2C{nGnYEM.{ 0Zb -vyv,z沕;zknhωoVZplƿQHBZ a7`143D2NZ , U&k^rwOx(bRre+p\ǔ>gȥw/(_Y.~|;!?#ˋN\g}挡=C.Kvu:ٮVsǓ&=qg__|{ڮܱIE'<*-b"@syUe"~ nvƤ&yvZ>?[9NuST=Fc‡-:-]K0 vuu11+ՕUzT`0 \+f%\wE'8xlp%Ye%sZ.Cle6Bh}3w~v^+̃vVpڲ:H0Z{_n٪oQvɭxɢm'fwynU9=7@|zTũksOVX-u'\|u?spÏ܄n .:'94(24%0htP^"]RJ٘6-CkTy̠֭4^('P A>zxJ嶒jқ,F!¾%b:HU0#]b;,0RPF4GP&< 0WUSgj q<"LxB1%*yq)ǁlØ sx)(3 k0h4 D}@t}HK6SB(SRs.!"ZZ-ҏKx#&bCXL|\t(CRJx⩺^EE ,A )"P{i;2"izWQ,1 2 "ccz/.sG%j5|||fؖ!r,),*.***pDU$*%(UI8*WrOmwF™Μ=L53))y\qHlL9)d40Ӏ6ݾGosOߓB"e]Z$4#`OoI8՜4 <7W)_I%8g7~\㠵TI3G7i;:"Nf{?bovO36Ya)+}xOiYEܹ ~]_~ru񞿈]aHIG6R"-5$ń1yK[6t7m91w=3붎R%Ua|' KIk!엘ɑ4ǥK(%-=iStpOac;v)TDUL g#w ձMVVǁ<63;5 WxpOac:5K0rx7 IDAT_wUɷձYRZ S[<[KqiJkidWjRȚ]+w<5_؄o< Й7zʔ[3Z2'{UWC:FEԋz. ;댡njRⒻ5DpߩSe&&f&ˉj{MQؑtNI0rƸ= K-g-|!kҢM;X}\5Z0:~1PS;rNR:16djLh/j&][geuxfpgs">w" =Ӻ7iɤ C  lpؑ3}:c\|ɞn/WbqTEzԈNvNI8bƸҽ ~g[&&'~S5D0Ƙ<<*5D:R9o9{1% 1Bxx^j{1+w W)[%%e<-wbn2^S|a:qsgGO~iZ@WlWS?޾;0j$TH,OzS)"X(v@? tP"6 Xh;^vwvnf{=s>M$LoI mW'O}gg&3,}u_L<}cPݾ rgZQ qt4xN/z3w~iSf=){-ܞ߄:}-ߐgĄpPsf9_u"dzRjYzHٳl4ʩrHE[L2A.(qy~^- ?;rY*RS'$OgMSς=AɿoTº캨ADa*'L0V_/ #VY'x,0Qf\ ";sK ?|rs oq?xAzbHHTwsof=?/?1|ڼޓ DEk~zà<kΔ)<7]ėg:Wvr%JOr>$ W0"@g^ kl_lǁ޿yE1}(s) xɱ/>?Y˟t_>z4_/Ӌs)J|He.ZӏAgްhJV݇L_Yr%)B֛QЙ %lb@uyoϕUg |aPо9ϗw愇p R4#+{9?ο|HO:/zW׍HzqGyt8G%7\@"`Poy$|$q`wV0]Qb$MUbpf6ٹ'#@!ֿ`pm58o}QF}\wAf>af1( G}y-#B6zud+ACk,L*X=mDgjWMhR$]I"`1`G 2W 9v|{JlWG5 %|ljkYoԼM}Z-&`剪new`?Lؿdf feA}~oR+ JȬt l_`l;BL^9ΧMJ0eAvxi$Fυ$>byޙc|I_M@ÞX5V)n!Kbd.u-\Q' }vD#YYgܷ>S i:fP ōPAG3,?"j*qs ެl Bɞ=e}݋f2 M$$ YS$]o_ =hd,itzg:tU7w T`p!Xn/-E5QYkW%pM5]ƸmcG鐴~߁ FQZ+b hUJ}oG|4b 0:QKfU\2*Rj<5?uհK'.x;溴FR ġբ> wZo"Q+k.IHFTo@7]IѮԢh03iVsu][/4/$ߏ uŢz6ń@dlo A2XJ˕= ERI;pJg!FS!5 ȸԹ`&ˇ<ꔰ-O$F?缎~6G&=W鰒i[uCܔu.+WrgnjS;?^WhpR,}LBYcb)%c[{ ? ,LeQ_sZ[ٓizp[LD a tTq5ZN ΦCqEsE5,䷦'*v]"( ]-]D[tEdrل$}QH'3,?3A>K*R` HW^v4RqHE8C ҈!5D O$*iJ!*ӠAԠq)%2`C^@eqbC(JMڮ @DD$eH_ 'oP2ڢ^;>ͺC#yweh$v¨}b`!%)#& K;,Q>r_bd3:Ͽ6wM] `"X6'9"2Zc^󇾧E_jfT`)SsџgFڦҭ̑9@dC?`ZjMTL9K(CY1bfȒχ h4`ʢy3F 0,2o:3@zLӶ '5~cR" Œ` @_T4(0$ E[f(28mu6cmVk2F&?81ȨmlQqY,VՁdH ?T-ϙ{qZ"G[HҰ\+R%D QRa4 E,U\vDK.(w ԑb$P]n`gMUMe= z]O]u:^N!-=" bv n?;q˴1iTgGP-#nWb@tj6T/q2S[9}fo}EGh=َg7=O`j`ͳm0`@8VQ==-. 5]mr Z "2߈m!e<1)}S_Dȧ!ZJ^\J$ܢ% hMWcP-p(QQKAKDcك V.e|֘ٷ$ES N)LM j ejAڌH5pITB##-10b^$e9:vyq"ٶ3pESnD0㦣H0a:՘Hh{E#fѣ clzgM#Pw\a_q:8p2k n|,>[cf_zl፣E O~ +zoyB93}2|Vm7-CӁn^dH*'s|qv)gz0OTK K'!N]]2QX 4~%c1Ƿ\0enm065 msmT"дbX{e s z][7^٘_DCqn21>:zȸ̞ *6PJNP!NH%[eX%t^)|H 86)(Ǚt #0-rEu)lLMHa0P""+V~HE)Gwrڎ$+ ۨ3;.X=hȢj/zyڵ׮ݸpX]D*խY5dp2E=k~yQjF9bhcYb`%K@ft:ff`D7 Tc?ڃZZ٥,d,?.j4Ȉ`D|̛CY[3BtQ*cYGD}ú ~ZR / :6&PRL -dLPFD6iH3L R[-BfCBqAkMu%5<2,rӅX ɨ%x%o,?%5 TMFbqB-曪@NǏ }铎"QW,2 RuLH--k5ِèwLҥ`}#;Fd:8DQJ ۰YmD\L9/XS }i!VYx|ڪRahʬ (J1qL#JC~d\bE#) "px8{>SGPppeqv.QW= go|Io#j(Ufݳi#Y G̽C``;chTͯO. !}8.뫩mOAuzᮍ"yO_-x(ۃ-__j uG7So2%BSpxr66t/8~0Ḭ= ]M?1c;D&ܑ%*}!|McbW,^uXtD?0Dw7wdlRu,|],)S' XfšsVwURVcaT-Jt#pĵ;ˣ#Kh)n3ݝ \0e>:ݴGEĮ'GIomGѹIpܹorUl}Ct8bE"W #;7]w}\gZnzdM+7_ߑi)2 ҥA9ڎ4F"Xq̪4{d:I(sޝ,|77F?Ʋh~w:*`a׏(c=l ?;j`X[m<T(vkvY2UϕL='dxԷLh2(5; ?4qko/?^5E^Ny{@%lۚ u..p8elnj ɋkKO.IERlT^pkSfME^r$Bҭ g[8~rey;4N-p!A)?aǰg\f!Vt@D%Nß|5zsn.$2?:,ʼWY d*m6cdU'%S}c+Y+{-p }B8Lw=6qߥy\bW&~^9k鵪;n[y_,ziFBL8ʔ[N66S+,.|.n:vbΊk1S / t`o_Of(jj\i(P9Z YفK D5Z r=rи_m1忨:v9zev3n͍4>Q"~˱"Ơ c{!ڵ2akuwlށvI@ ݿx`:7]xӮ_VL36G;6+鐰{RCWNm^u  >8S:mSy[=ܚ9{vomz@e]u >eFhLjGJPkX5kߟSJ;խenYŮ  1}^N|!sN+V^Y[ q{!8QHPa2hHYġI șԍwt߳[S<-yGzE{n=ZF,A|.)vƧ[ ]5#BR-ΨjIo"&]m$ʑ),Y: B[\^ޤ{͚DuF%o|P鑬:'79t땔ێz }{vcc[dC@CjA-'7H@4mRܤ?eOq"؅kb_0ez;Ltkܸ*'[{(մ&|a=/5<6.._(ۀ||qszw\|U}u8_׽o|6L?OB.{_z"G;0<#0<YUvOWxk;(}u~jZ4[ ʢJ#[?Od2^nuvlLq!!HryUh"Ip YԬ]\eݧDg&8914zG&Q?,=sxW뗻uiym6V-(@u &ͩxr{1;eW>ېsO|yH{Ó xJrGOW$xS)F˂(Q?=PS%Z`XW. iGNuM{oR6O} f9dDڇ*F9N zx̋ye))ӱ7m痳;Wިela<or8q'^Yv l>O2-F2XH0YtA #8Y$&-`1dn ǰM+SCJ#5zRDh<ѕrwUg4ᣴ*:H^Vl;Y8zk#7^|  ݶ{'.z- VM|Ṳ}o;Y$2<Ε5 _.ꖷ$ @8[|ly `%ZM[%1D°F*  ]5-u sܬqK/:"юA܋σbM؎MߞlVĈ>:[!ccHZ;>5ep");}UuSNu {도rAImņqb) ;|x!&}q[5}vߖNߝY2\޹{uϝ-Ѹel`>w;4vړ.;[&{ !Rb89$igO8GgʹMiR-G: ^+Z`;pG^̊:XrC=6;O~stGǽ2:meD^ǵ89u*L_m:p95? Jnfڛۭ}C?OP|H=wjn^ͳum>Mrx YWiO_I;vx+M[9f}tiz0Wk#Zl=f7fQ|Q.]Z(wA9F`ڀr 3ew؀!Tz99EѪQ !J=%41"2*A,.)*WE1M~/c:(>t!Plx8w {jL002!zX Nd<EFUY`JݙśKKXRݞ)cBS_.ʏxU=&+9"t׿xHG+1eoy_(1NkOzڼųޝǜzC/G;8)KM$4ys:Љp3 [qa7q[ן<.q{JZsƴ _DdZsL4y NS.)#+°?R"%p8uRyڒ^뤞Ȗ'Ai}zǝ~odϤg<^w3w~ҳ_e~q@WL鞱n֪ER5ljC[:Ft:x1ڭsĪ =څ\WW٬疚YyЕ0<y_F57҂+Y_P/d\IOXY7sv#PU_m$߹PQou[%eUxC ܥr>F< :Ĺ+ުM:H9sZlGw{k{QÜlET wNEE:Qߎ""J\SDpZ*Q휻TyCB~yS˚BCGakf̰7X.rGN"!'m4KԜVu~IW>L0/}Aҍ,4,) od p5mֽE} (B}o, *_Ӵ .W"Ud\+t]?)jȟ'sECTM0b4Z6ehђ_Œ=K[A}FHA"OyA^{P ɀ 5^8۶lSٳ`'K nz#\ݴwo7)+I~Ҙ䬾UkԻwИ1/ w׫Hd5t}{s@,7.JyŁ7Fy gG&EYd`-/̓rh_}tb4ю #]'˒̪<ިw\p@a@~몛3t'@v)_0prAdA?W SQ$r^ɃIAD vL(pD",TD<^r8!93yA/8^B(yYG$x"%}b4{sېPzyP.Z ':ƙo'/7K'HLPp5WzQ1jШP85] #*.]C01i IeN+pD%b?9 T^DG$䀈$Ve]+p4]?Q%yt P[<:*].E'b|Ӂ@UyWDpk$Hޒ( /HVjF:28's9 W*<9^ Dbby%Jyε:ߣ˕Z~-ᆱeێ#rڬ_sۤ Yc C2ɟ̜{<rKB+şN$z^aDMd-V+Ur|A:ByA/ͭ XkBV3?B/Ӌb b'UU\Bz16GUU/nUM0k[߃ʽpB5ZpFۭt-#qul}l]Jj(IWV>xE& !S_h{~;HN%lۿwx72״2_QgU+K !ϛz-QaXZXd‡喋S})OxTӧ"yy ΎP^P/oU_ Ք#m㑮GPQTBUjt'(źx 쎡tM[qە?[aYt퍩e OVn=Փ.U4`vbyaCJ@4{u}O۹N|S [hv *!4ض P(;Y ׯBӏdӕhb }PWXu, kÒUh瑕 Xo0*%1P򼸊Y>fBBPytjX ډ e )9MnV6M݆4FJ%Z( ǣ 9q?ӷ㗯ڕ+JLkWK 0SDI{$QS.5J h~tpH‚15禕 *͑2Y֘45&CH@(TG Yb"~Z%`HFt *y1?^8B /(%|/1>UgaHxV%|T*K, >". %EkR0gHvaѱq.^H밶~ j2{Ta,gZA9 *K ah률0CQ= ݄J$D+1}Mg\ =X¶2]p#!aRAƉ߶_ߪugѻO mxjB؆1wP |om!u4_'RY#t#ڷjڸqn{J8h[};}sCut#ڷnڸIn&<{*fN=F| tqQFQ32/wթ31,~ȗPGDM(\ߺNݖ`c7؅vHG- t57)-{LPAu>3%s2#mtOɈKp6]V}Fu x2]Ѿј9W٬AE6:G("N1FN,=יW* ³-rKq.N7,ѻSXtؓQx١WAyEIHNs w ھ^|6GuqqbK3$.v`H7cONxKZm3wr2zbʼn _CK:AՋ}am9ơ<)S㱑juĨޣ/U(e\(l{o ޟP: E3{κm߱}.)I"ʣ(afD+""0a6lnc<2NK 0bR]m]ۑDyCB9*7_3yHằ_O=S2Y>~b #xOŽ',㥧x$/ ɓg8qNO_L/O$,99-zn4cGV>9_<οtH!f\iSfKn} OȆ/=00ȿ.}_ϴn86AL}mb)%%"EE9n/sAyگY}r*"QK^ΈHPWCNlH ]4YI ,c;]gDWCn w=/%` 8c}~r%{ޛb. ȳOJOU"I%=9y._c^eA.(qtӼU?ey}ۛOƏ2k(_ݳl4>``h DgG(ݽ& ҿ}e - xvYxOޙ>Y?[ soiݗW]`u_Uɴ0*;zc=/ _L@; 9͓Xp%u'<'+D@~,ZCf/^sD 'o{ 7jXkQBΫ&c/o, OIm Y?V(CI ?x3L>"n:}s苎h!FHS?Vc)dTqAxh6o LMr.Zkdۭ[] z327ΧMaʜu TՅl8H_r5}jS>8PLh\BL6ZlHf s3!pĂ^?ebP1j5 QTGeWZK8ۖ@{k YIDE"l:sCNz+Ʋ(yo_#eȱ=UMD=Uzs10JG{dPE8!jC,M -D>Ӷ:~IR ēm€q،k 5uwN9C3h>Ff\>BH[F=:|":0 [|:ሁ3_Dƽ.C)K,d,@GV)dLgg +lQ?k9IlZem^ږ[d)hN,^ ȞK=2ĸX''7a9uHԯC"0*},NhX/kv.uwFEh)6Ys9sSFBS*N=q25y+;HQM;:V r5 iԿC9*gr ʷ>!h (WBd屎и̛UKQ뒖]e/ zjL'OV]Q(A@|h4P~ޒ)͈V8d".e1kj}g 176-(֣mRgц|M&b3@[3zW,]}|f{Yt,L-/ɹg:u%Pf\L1kDy眤1I(xb0-3IFQTWHńY"2I]!"rFM~kNpgiߝ)$+)QHU3jlVw DDIABʫ"94^zPHlSJ)a3ڣ9@Nx"I5j~cK 8+Fl'HZ7qSC5)7>QC|i?v]WtR,$CO߈% N#0|e&Sd$};Sdo(k=HLEC) et$˒3 e m.Tc`QM~ vՉH6:Yf_x9Mv4++൅Evi` Imi! Gk`r 1ɈVp +(1 d!4>cf4yjS׸ ؃h5e3 ϜЭT1dcoxA|P4WgN. 2c_DIFvӉHDUYrBsHh*hIQb&PNFF8d6ޝDjϳ)Na_E)N˫wFG/ So0⁻ܱI _͑qh˨1Mnr<( 0푓 3]ߘɀUi-v!єص.Ud]ҾFc媉s28N꫟խJ$sU&˕sG}j墓qRQ魦]=#o}oG8AXLj>a59mn"ݒ$n]i}dcg&*`b,k' 1lHh~1WVCsNd0_C&Q/0b3WUsT=&R!` }H٧PFB0Uk@$Z?djDwGVpk3a9xu~G6@pzi+@^tk:]z @v qэJj=ӏ25M@747C;tKEy}M6jYwM4kX05o\P:!2[N"qrh0F%2oZO\OM{}DD]!فWfϓ򿎸Ӷe N:cMGFSOkUePUQ;@ή/~*so|e[Qfbu3ǡQC̾g~SJ- dw|pPqVJ߯~gy6V2t0ǜe"'v=A4w%5n}9kvu?WO :|7#KTO"Sj5`4sqYglZp,~7~2tսٱv/)edÀI3#l Uygl\9^ c}YW0L]M<<צ3wd@|li3>nv7!z5 EzUDҥ+W@T@EiB,(\{/IH=;s?M{ay->92?^ Ȋ3@6 DU|Ș/H/W@[f\sNu˱iGRC<1N kHV%3%2C'OZ].kD晴NW'ahfWBևLE mZl8 }v~bC/#~6_PRUws*;$5#Ț:k/q1Aԋ)q~Bi7}l^4T><;ϧV"1ȓT@ƫof0 Ӊ_a3\eW(z8~XnAgݪ*o= ^}h(svϠʟ7W:տAlr5L[t1(U{LAU4\N\#S|׳MHbH ˉg/z"z3eT${ɨW|E~YCksHfC?eByyxs_/xhE%j82{tr;^O[`VM vX+Twl;ռ# lDedz!ۻϧX6 AFh[E=2OaD9=;ug*wYTD}:$q6,O޶Yuw糋J*8ÇV{+K13O#}KƮsj{o*I[G\Gy˗{sVI=T&%#pgѵ_6_ӵ:A QM+5. 4Q1@lh&$2R1 k]f[֬k:CC?YGH6mhj-Db^:h;={,"ejJ,&qIh,zpt_iyez7`[V$؂sKۇOˈ<д@zHF@dzg͢+u1sT^;YGzď^~Og8'2Ld s}?u*өcؼs^&JŨ ZxLZ3K4RFiƹ.W<"F7c?Ql\'2-4E9 Ѕ,Zb_ΈIĵ\?-($Up<ȿFGסDk TE(ί1Ѵp".~BѴ2QW ; Oc=1{ܒǖ大UT+>;n:Ú:R=`آzOy]&&)7KQy/w3XݻG] Un9g: P# zExCyQa#g R3ёscb7iK?d Tڇ-{!9L3O9ҋ8K\$z~zϤäwb!9)4 [nɁweQXU|7ú_\+b,QSƽT~0zYVgvQ+foyRElQ^:s]ÏBTuz|Hwxt^G>O ɚB`m@%ll>6 6lLgg/;'XZ'Gt"K{~hbʯU#y3W_*쎵?aeeģn 7 Lܬo}ĺuecO&\_wj zښN hl%L  ҋ B 1vBN b-?׃S)ۂ"JOn:q;nqUg(~lr2:#zW.L:P@Dy7{#U'+J+&fuhsʻeEvrym!@[4[gg gv ڶ{εbew ʹ Wnon%ںSε*+[?7xO1ά+WH!ڒ+W aglQQ^_l 7߳# L0UͅL%CՎ s zی6+zSLy^pWiIcʉ^[C˧sf^σB$qs&7Im9K͝ă28!r>9'sfZvؘٯ6鵀lJ}'oLɕH|M{?lwI&n)$ץsg/Ol0qޫ= 5T֩eƵ%hW|/̻`0^֪4F,y2?Sp? ғj 5 Яٽ,3~7&ғ٥z*xQ/Q(jCG4H' H/J"2n<^Oae8FyH~كcO `J%8 EAKJ g2 Y|y^>&QM[6u&]r/DDd)lgAvq,%M; ȫIq8 Zh{'gws'FRo?e2GE΃ z~ؽG{ԭ}HU2~]n8oUA::-k܅LD.R' [$kkLV-ow{JPmGxLnP!M^h#pW<kwm<)\w@Yk mhOE { hٌ$*iZܩАDͭ@!J#R30Dԥ4Eժiѿ걇vZ8!`}i۷|BIP6+y͟O~ܶ}˧qk6(F,yu35!]\J"0Eժb(ߖ;{Tɻ4@{77J?7(]w*ʸ~&Uפ -?o?0-'+?NpWLNﶪ~䝧i9ىWgaZ{|;YʜWM6w^Ǖ䜴{ ^GO=zJܣ]T<y{@y~oy~7/)J]w}.ӯM_Ee)ܮsn~WN_S^E~Bv?ow%rǓ *(%@y2$ʯ:wt+z"5 RyU GB_~<~]ߗv)ۑ^'\74?]tǣQ$ xDS_uAҵ!݄g:$ Eovf<{>\#K.&e:LiLV?pã3'5+]]itoX gغ%UrdǙOgn߻ A!,+a+DrwưcWkAxϺ8~׉GOS,,V\w& 7Φё}LSY.oײ>R3-82C,֪ժM?I"Q}<#ÀJ),0ߖM5+e߬ | n*7V4EQ,)]u:S/~y/: 8JOg6NX n܂fz5`:m^@+b*,~ߙR͟ܟoy\O%*cFy9V0;b!2n gx1 ZtOq; r4X3B1yvD޹f?Eʌ ĊM阏nQ/zGe)ѡ$S4D,J^/U*R)AV(&P!HdI|uerB4N#QBm-!a5_ijr!v-#pN\)L[]Is:w)[Nll wڬ73ޭn9s)mds0E2j/ӟg:6D@jUYClǝ2Y \ڙXݫ_ }w/@sP 56Y% V;f&RgiZGrIV0_g!^r Il1&NԱ(L3`ʟ=Γ=Org;܄|&!|XhjE,gudIJ4А<(sb!ʴ?B5kfȜY풚2(?/dˑg=O)/d ίWda'=4yI cRۇzV`Q_p@? U'](gYA^1R LR51:]F3rDgš,Q[5*䙌SWz9s+[gʟ=ϑqȧ5 X= ^ffW #/1ZG @^c+M¬>m~Afe{igo6|mPysUR9=(حaZ9WMƝOf+:^=ҚEdg&‚݊dsu MB<,*b'@ ܬ˲,i5k9X=؆ JQNGԱԉ9ʮ2l__ELmb %L.@eGQMMQ4ME"SDp++ʔN$l,0ΊJ gY ,/AB^o[?Z(+;ќ}/N L[JFӭ0NRccʒ_p[OP.|LaKn/cUZP3}]\; w~Y/_O啱ƌDId PPKM2sjcc.|i%N[~]gVv0t-(ʼnG5f=g+i FܡAt%>t_{~s"fes+\ MΖffCRb*4\?yP[)>unzV} `+_(TLH X*՟oePj}7_|2FUאV-"ߨ;=}Dܣ KBIWp·5kӢic O2ZDܛh{'Î tR4 CY7Gq> %sԔUoT.qk]R\X$H1D.% 8,!DRhid28BdB 4m&oS!=7=?0 9Du{ov* W&aYuJ9ŀ?N,ð\[C`9BQcOS1 îARW0]Q*@̔Ԍ\SٝՍW, DcL ڢ6--<"YUuCmXC|9a:IԲѲy (TWS["15(|TjJ9mqzXAR߶ Ҫ7K0EVϽN2;„{0}7(3M' <-^}'SE U%6ǎEc0QLl<5uՈ J@ﴻ,yL3{l[FS?q=]kZ2C5Q<1[(?,K݈8=i]nX9qN!sdY*CRK =NIs*VUyl~+Y%yyEU{4uOTS|2̄bM̬*ﺡ4dzP:`ڧ^=k^O3@|wEs$@3 G4=;*YxJL%AQ/SGֈf_hI5Zʼl;z)(DU" &s}E<~V* sEinOyoې2[()hȃbӫ扳ale)-̀47$;w*U>]WPӖ0ºD|GטD=% ȠDmQ1;^Orj.hb}'8v@uWm1q/Z6hgQw~g'+u Ez1j3YLV3N.[otp yINDp?!I+g>gy*rlִ{#s. h̪s8KH]gNz Íe`7*4,X"L&׮`YUQ!ܗ݂8sJ #E p,@ę^U@9+saK-SXM+I.s ƭM4Eg׊`D438YAa;%,8̴Lho7wP [NDYR*/07!X"tA/o \?3I=ՍߢېF5JzkȈ^ifJ\{)&7~4*~næjhExzJyzEw;}'ZL{kDA1OzotǑzhjq[F77$(ةG5A(7"e`R!Du LnUŃ a#{7AQ(1:c(?]U>v]޾g/~3SZ`܅W꽗&&0BP5uNv@ן[g:}; _3]hy#nۑn}1'uy/<***I ]¨30#"*nTTh߷Oʉ ٢\'y)/6 hұemDGfW; v>yo:|dx8wR;B|Qfö5J@S sq_iQu`7l|[4jؼ^}>Aʷ͠[6jBރǣVU>n BjiouO]h0nlϘz|"ʌ~z r#lIz#E#_1/؈]@,S#څ6*R`1Aq8WM%_*}@=]9g:NM7exDf;mLlͦ,x^DG6~A05Rbn-Û8$0ة*ᱦ|a"ߙvhA-ÛLvIoܧc11-z2}R}ǝs BϿZ6P* @KL)'g9 #ԓG I2DWX)uбHnG#)o?NܵCHdFzʻ*o6q?npff?Ё"}ڌ肗(`Uȷ]+}"(JAFto\'ϿnM=VVoޭFQ ߯}}܈P1b;F[E, mFtK{* {ioh['((<}W%ƍSeI8ZߖtBsmƎ i{iqj|vʧieYaX*H) L& eJ/W+bƎm&X IDATkIjee@EVa{o9(L*H:#E:W77'OnU?Jr›6]w?)/N`|j!VVfe m ظVg`kzP׉޾&5uZ@H0 2-Cw3Qt>ׄaҲ~6̹߯?)SKD`O\>1񀲴K;WmkGc+\Eūx;8S\닯Y9'CHL .@tպ`6zܱ%$^ZW ln| Nj&d-5mp4~Wt`l8NaҡA>b e,Pf$xZ4P]Oat;j\iK@h'չ%=*Fx%V>v3>n茏&$ꯛ'; QEΤmNyO#JHڣ|JWV^}g. g-9WS+wQ7Ὥ* Fz&s _bM!^I9޸bR|ƚB:NxyyaA71nmvܧSi @/,>0~&Yy-ڑΫ 5_2՜\IN:Ro>$qKNھ{nbYI֝6 Rk`{w8?ٜa-uSiֻvVI6Y c4W1#qd '])N8q;4Qtd}fS6pk(p?cK+kg~}(3k7M8SS%IRV]h)%Ca:DVyOXOǽ5Ҫ:y"Y.*4Yl}Ec 9IEt3G_5y n?vVwQ3F(,Iӗ'U/JW8R}7-:Knԟg,: ΜWl#p+~o1QVN3}Hwp;~*ޮҍq4۲z|˓~["d)ʏd:Rzt"Үz;@nzgSѲZc @3*u_t(OJXJ8? ";I%Y!Ke)g gʝ=L9g+A}*F@ζ `._i(z%%@`~Jayt0o#`YػNwniN(b(W;Fي'S-[u[|9¦"b`$Aa6Qj)BAH!)egJ4WRrI"q0-|ŝze(zz"s˹рfeDBusU³UNP8mW mTz1A "03]2"FSz$jCPu@>MϿ5jktD_ 'H 6}EjR( *?*|Eʫ%-]Ow[ϗicX]u{hӉQN4k2߭D*t͈ rҭ5|R_#m^[;3d-f<5߿? 's6?~yBlīS J ۉy2$=:[ nMF@53Cwl#!Ȣjwy8"%UPlHP(t 嫙uZeN(YDqRrBdQ$rtI(DY[4y_ϗZKۑ!$#G-ӉV Q "TŻ!4WfgL=1ڡ 2NtZ϶8hrNjuWS͇kn6⨱V i Je^Q rsyZ)jVx>[uIiS1.χR!Int9rQ"u~unΨDFrl[![tNn>vvk{ #cQD|%EdQߟɎ@Q_V݌j4LcJMLQeB\0>F`I!qUla uدk g\JN=# Y (>&D+)#ۏ^1hsd+,1 DNή8er!" UbjDv@F kJ(DXٲo;z(%@I=317(Ee2W %$ FQJ.SCYdBP<,"MqEh|tBIjVu]45Pm ^WfTIo~X,jh" 7IB bDS]Qca`JVq&o=r|^GTbvU&|E@VTD -Y=k m1(N'ASބfEQ&4:qFnWk`Ld3Ae`P!Q~V"""Nrrn &WFQCz+EnEmfqsuݺ HkT]Gސf":cl3ԗ,#Tb|ǕgDz# %)aK}EOd9[t1zOO<DBxF%4A%"1ޢ(5%Kg;Jl_Ct\)Urj)YV;3=MTqj\2q=?JfhvsE3DB/"x(:E_o,i- |T\:_8eQ-/r"$RŲ(`pԄ]#*BFzy!Wew&#di,O eU_D7PNFN+ŏ.$3+,}gM4S" Q/LHJ4T+>522wP5]Qk]*~B~#&ׅA<7ѫH ).5  gvqheX:zQ| L5~ kT*IB( 'MS; FZ#]#ʰ Jys1[Nd P,(bU,` ;/]SeVgj=Nyޅey15_L!z8Y%:1u)i o Y6& ?>zw@"2wr !E ))"7²F!'UJ]`k*)BjUX4ZaRYқ""QKJT'j kK\+D .qƱd7xuyo{XHhCAj7U^ׇp~ؒ^_ߚoA:S7D,sELsR=DK6nAv[(z4 &;X3+F[LaWr-&U9>?"ҍN bdk.yIE%$.C[q ~rF2Is ^h:t:!jĥ.]8bD\ e > ujI>MrӨLF0 G@bE|XU}" 7x_el IȊcn@BK1n*MsDx[u&eYB؈:1xPHZCG}/UV} uC9n񨶸I3~ _L=n, .ࣺ(r UqbDWQkC:AJ=8{l\oÚz*_9,65e $#*f!L!>L DǙԳ.%j^S+э$J>cusŋVH#I81\Bd\Q,fCE[pd#,H!.NT6P*;uz ||qH N8DLQ*갣Fޤ3We@,sǔ":8*pROH(ZlnE&\e)Jev{@<[%R \P%7_H梮0~.B4KQG-)z W4FONLr'ޟec|(uCr!U#]nа d]:CW^bKt;~%/!D*"{vӿ&&2uP:CTHK-p\N˕1cX㗑4ϟ@pQ?Dc989ڊvIlmJP~{[ص}Ǯ5Dj~6O47"  VI|ּqTIY<4T,DcXOP~D&D(/ I\눨ZT teJYWL/`L4n<2~y{sP}Pr+%vO-aVMeI٩dRE⟉5;F.(0jm`b jBhr B_ZӞ~D FV:*r[ب]8Av7ļ'= F)E>H%_8>⃈8yGQ#AQRzsUC(D#(gΩXO"EQ&MqQkP(4h""P%}B)EvRxFJ+OXẻhBjǟ1 b&LKYN+?s@ oM#\1T@O֍siI14H9l[7wan^l`ۥ\Yv ,JgD*( :)|U ݗf|-wgJ!g%%4tŪ'V5 ~TA!67U/ "ˊ{ TiU/,5UwAYW, 'WJYBMu'}8짷W^+' )=ȭK "Ƿ!«N.hHwVܴ{pSGyxCg4K "Ƿ}9ܫNΡhHsJ#u/T j `T$s+{@ʗsNYZu^XvSAQ@iDǨrsJ|u^CڸAAa[P4,sewA[7C'؝OJC;?F0e'.;P^-Vᯛ k.fEYu[H)!!۱,!Ͻܡgoݭ"ۍ_'f;kZopȕIz.齞ὦxedz|2!] t9'k?pexZ^):Ahe!:nҺ(e ;={,̶?c̢E:E#ʹ_P>mЦu9)VY 覐A3i߳zeń*L]GS??~C+==fvuITl܇b6ϻ3ޝh6D5)RpMF hVi߈~>ZA.@,9Ry.ܝ7?ٷC}Pm?P:NveM!>xg5`q5(urE7P-%aLCxp`V?3"χ.\U*?u:Ir Z[t﯁A)  ""wJwN2m+B@U|NC|ǹ׋2D"Q*$& ^~Oe8EoSH>-"' Jx<9`b'2ZzhJ00(`o&"|h4K|* HP!} z )TYjo+:,[MħAaOvd. Io HM7:Ǹ+ǻ$O뱃ž옽DϞ:^RH/bO$عm`k1饛wC߾3&L׷Y)xpt׷\vH6ٽ {A[%{OU)'P+4*ET"#xES|$Nn߯zx|c׹-iAn#? :-cPIU5ҽ@Yo;3;>A;Ru&wg&zTH*dsOܲ=ћA=9?ۺ=^Y1zLCGJlr&GW۶ %U4谤Ms_Hxl컙mz#K`_N 2ծBRwBCkeCPבJ_>N5>v(~S{&͊'ɹvm1@t^ӵw QAGk 7g;(MayNo:]Kg!{/ӱۖz/A%mDR~=^Wp>[f5"$qOIA|p@\܀Nty΃1@lQ^RANr:/O¼Lq?n=|%w}w}^d|gЦ'zX?r}]x7I(Sd%jr)}[OcD`-ܿ+RWʻQȢS IDAT~? R޻$Ca1T˪z ;pdosMXd充=l׿QT/{AƻE$С:xꅐ]Oc!M[ۻ zÅ V%-ް7_f9i].|%ڏ$#h uq:uhr1,t1d}7S@սco0Bڙ^v.~q/vWۓ$ģ /$'ܣ{Oymd/,M{p?8Eik1>ъUύj;ub)wc)~tx_`mY 9p&~=RʍY4xލz1F).vܴZT~k] o[7[uv,Wtec$ Tߨokgfkib3O󀃕s('~@^u.Zdо/|ȕ`<,0G3}V`=uΑ^Yv %q[yl/;w}O+VS^mFt.Y {:EZJޱ!JKhDgg.;" 1/3[|.@[<ێF]z! ֺ/L:Sqzޤ*_x62g18ð/__84(kF?x֮+?{9~'߽tQȈU MqKO;X#;60Ȳ3Zt@h]~bLigo1q&7Imٜ9Kv%6;%VRGN@bvWϟ9kvf 7Is@4Cu*wPG0 _~`\gF#[7/=y([Mj;)ώMJiUkHεPi $, @_5SLBĂ2$K>`Uҁz˪#W8Qs%1DڔJyv~ vߘHObm=L⦠@Uڕ[v¬XB[w ߹V*AYw>ǭ|6{D oJ1Dq~vR ;\!:vlK\rw͡/B/)QcaR"Ү*o:B^<jb.Tܻf1iNҎiVƍ{moYLQQ |:{?]syR n&ɿ-;gI|bs'5pu(k-~2g%[ojcw" kSX8Oi3z_vlOĽ9͝؃±BݑQQX`T0! *eW 84HdV&!6Ji,ʏ*3 hWt/?}D5Hz~-ngG^_ua]˯gՑ~Vi@VB,m:\M2kr@~jXt_~mǷlM+֟o*n|Owb*88r:"%ª(#UXҽl ( !2tP |T.=YD*ﴸIg?cW>,St(7N#)U}x?)WG̝(M(UN6wwSF󧽺shFEG~RI &jyiL*}zu<%sEVMd6% (Bk6ٸ'4ME>!XY|͸ɻx_}PʢaeYxݭtǯOzN,w00N!]6,<׃Rצ=;:;ӻ&,"V^[99nݙ`Ȱkwje[S;N]L݆5*> Nd}ޜ8e3f\~2խvlo.pJcw26} S)p[7mBܸgM3kW)p[?-n҄Kp;oqf`6 u'6MQofoqfYmק]'gf>9[>16Imc[,smGINtzoO6=GodY] c+ T"@\J#^iWwGQu;MBIDzMERUEPQ)*(ME$Pmziݝc&}??dΝ{=9yNXiia 扱q&H`а\mIMCYQO’hu0Ջ tp/$(\?#y2;lDϏ'ZDX+G I=yrWz gE]DY9 02CC0&<_X+߯E^ /oٻb*j325gEK7]}chT!$c/پԼZZLiyc{2tc$gLk|b=z6!^5AOwvڕ^~f\)<<%AZۗOd߽OrVz3l=k'u=z?v6n+?"H/rzJ3]b=܁Iܒs;Ɉu7gl{.F 8?]/h&3k՚}"6FX(IF+[\x7y}J* (bn\SZ^{s< "r,vA^ h;y/{mgr/DMt*\"9H}4Ź+06oN?GKXT?mݙG?)<` jJvNErw -߳)[ ԝ%atse' '*aS17w)arX  I>0(BLaMIٍٶ2a(B Rufn޴Ő1(cXDd/nz"0?IyK,p,UCA]G8wVCrJA~VCy' eׯ)-/ɽq}9ns ڟgHnF4;_[ ɦ(9CϒX֠T|b5o]/e6}'߃-D I>» %K[ ժ9 X]DV_YZ à_Z٧AƏ@yAEo_9޻YlIV7k?3{?&K'>;ÓUe֗gl( Sam_po9.|mʹQ:8%iISŻqP/ou!Eΰsُ81>3{k i#͇W2NxaEP;ӊYmc~s =v&z# uZxe> )boz&<Թk?(.<Eg9PL6tx{' Z4˳yEvscڒ=u X~Zns|P{2Fv3w+ y;ˈYR0qXVFLZd -֙Y4hCxr4);'KUzM@$AqUVEٕMBNQFs#㰕zO:ݬm;t}l!V,J *xwL~xw5~qVITURsl,&<Ĺsrv̇Yt"${řS~~g5h)Ow+b;]#!^_o2>W>;^]ꮈfV9x"8l`$PWPTUBNzѧWЯ%ĝDsڭ 'H֙}1C;I^qR٤Sb5( wJ\@4ڲp Y >=?  0*;^0>sKO\)v ZBD`j\hrj"Djɱ,KQ|}(Pm r!>6:텞-rqT;X=êPTu9:LG 9^վP$] =ր Ż:k$J;JBܕ *,,f y=b(z]>ȁ#i8F.S%N fwy 2.aQ]3ulC#Bċp `NtVq! * zRJ_|c{y0vDXj.};M@p,W]\ Bh1LuQ^~S'*{Ql?ݾ]߅< lLeQ54 gBW' kV(Ͽz7LB&M=;W8 kJXj?(뺦}׺ E}d w{-a~b]nzBk)v& @}wf(N K3ǤzZr;_Z1] xc=4+jSAjJssyq6â 7drҏc?6_P|2ڛ9*`3QN~E8 0\qbm_%%/?/pX5k].v2MH/]X*wd@dՁ.!9+:+}ZU\ Q4HqKɭIoc_䴍߲+f4՜?^f.J wjS,'vQ9hߵS.=G9KI# LF٦NJ5}F X 'bBZs+ep<|~&K:Jj1T۲vI7S"DZz}w5z?Y_ 鐩Hb: ߏSO%?΀9TԮ Q $1$D/`H?M (WohߥsN>׆YKp RiVyTANQ%߄P.l;oGDz 9rr>aghIѤ,Fa(aIsbyH+h/*vH;0'gJ kY/q,+`AKkPW(<ѫW/8"Kh "' ,'TaI+ׅ jqYB _-("D ;D5 =qa5NX"6YL8xq`)>ӭ;ͪ+\i}[''{ w)JH4uoaķ' h׼YN}Gtk@iύתߘm=rj[_})OtktOϿlI{IF 9:E䦡FbLjޢy0yޭU6(U,o2;ޓoE p"'vUrޗɽ{ |IN{HX^~φLx؛[-|q=AoPDLNYw `QcERbbJfhHLE2yhz:7$*ƔY͞[<)lcESg'opSO&StRMfgLxx+ mjk{wF5Y͛7O4 11cs8ؑԗ")mN1YnlK!=ǎ".}^^Oce &߼ۈ13]HƄ|rѐvX ΠɩvTU~O3pZ VkaAú2*0"<7 D4~)O=x_ۖ}jңq*XPn^Fro=sԬ`Һ}tѧ;xOLzs#}"*f]Opߓue|k~5Z`aae˯]* =nd -'RvRd d7}j ;zvHomcת9:e扂i_3뷵\]&M.Im $0O|Jڬ ba{.z?;.8dTEt?DCŋIÞfqQͻiX]R-_u՛gE+ւ(cgۤq}pD IDATnTɁm%@º͝q)Y B3?hWI!8k|`r3_' }'-&7h5Zά:'@!oQtnK6EWafuDicT!P-ɏ}MbR>&)iJXC!i}ܹݗP4i@wzfT&qr녀Iꂔئdԟk}sΗ3"8x&FD%w&&C(w8Gafe}ݓ̄ RBQLu$d4 WF(BF{t 0 OmqK:'{f#2i^K q'ZҸ>jWɥ??H)1C@} cps,o_ag_?pUY`Xwk+]/<;e@T]?ϴ)j4?=oa xxڻCsw#*̍eV®򟱁t}n[f-/l&]u|;DdzuփW~mc3mMw5\C)&޽Q1 ŗ">ڌ~*8P–)?+^4a;*7x"8kij _7`"@ě@tégla(>}.-R".6S^_Y4Pz?3]L+xm¬O;WʫCvSߟhĚe$C<9;6Oz%"طmr!;o'C^=s3__:Vַt]5)aXjӤ_]*ڏvO56ŏEug&VXO ~J{*2o>^{˃agW(;f>|HMq7_\vʾ=Y輸ܚ/v9?ˆx,lց7֯8s7/_͎ޭfDe2kP)ӯ"_0{SU+v{t (cz쉗GDY(+zxzHÖy}-6 2Vb#Oo6XnL>NO/X$L(e]V yeGӞ}(/^}i(quGϘ}g>;'T%bZuMgRc\UlVz!~e:AEtv2cϸú<3@ krNo^=텫)3NL4?M 뫯O1-~, v৷^"[UDVD6'>eJ/KT#bEνb{NTٴB,?GܵP7y `0O#"!n }ur.:d驣b,onBӔH!vclpTO4$j2Y{#`L~zq>_tKgTX)zbhkۿ(S @X+o?HaMMz"J4B(E}m__vpeC'r~=`-'k^r{N]^y)@8 j Z^PP# FIh%U6UeO4^Q ;zzQv әʋx"*ۨN TӜ~gCP$>fUmPr[+E |C}L \>GP!z~P|)ƨC",5h)Nnئmַn94ō [ o?C G{.ŦKK,W6(ckud]ɵ7x}B@+/&\fusUpʤ&w /i@oCVnE44n7CWNK<UzǓ8 z: 5Z}i g|xZ_I|A)R/~:=aNTqJt',dԆWKޞ^QٴN#4!~Qj§6D/QDJt\捒!. Zk|LoeƲSU):bŧp$Q8%DS+f&l*GBz<"MS@9>œ %铈X+2zʆe9< 1x~'guշ?vqBU;e{GVS*0$l5=$5Q~⍝jAEK|h uO78o-Fui/NTݡU >c)MFqUUVx;oxIh5$9Hem3P"3,&[orʉG/,z2Dm!@<4CT#p2)zOĢ4TtlQe^ B2N";DU+c"SEU:mXyc:(dg8)a"θ@J3F{x)(~NX@IW~JpQ"bH Ab.W+TぴjNiK&(W '*ݿйJNȉ\YJ2 "'k Wo}dXCWDZ r9$o-u%E-'+bh# 1iшg=F8+nZFz/-@Et "ܪNvrZDA ُJ)9ׇJZJTb"D7l-!/:D"T^..p/^Y^:P >n+wu&@.D4C5>]7|Wuw`^?ׯ~Rށx'>z DoaQl)D/eU(p@c~yv{0I=jCo2J|vШ#ztCo뇚;# W< ~NB|@BFmO~{ȭHh2UFEp5M CBdLc(JZ,Dy^8B"G,!|_5,f xO Blov9wpTLFKC_ot?Fvꌆxǫ[ZEuT߲N cpcJx:e QO)܀A#%et]=V%vE~p)/ %J*d\u["2`Hu2[dH#̣ζitC6,QBHC] ?!H6}{NՒ~oOxƪOiv&9 Dc,޲a/ ne9:SįjKJLn%ϭG,AGGT! >E[K`4!CNBEx@!#HE(5RDP(㔥qH &P-Q/*('Bx'^jQKI[^w|7'UA4+ 9jV?4QEZ? GQKtGCCoWQ)5@<&ZH ͯ&;^M@t{4Dm)' b@6AڐRje/_B# '-_5AJ~i 5_~./_/4!hSm 8xѠu}YJ)O5ڭ!ת{*J# +BEKp'8*݊-4&`bU|D&!݊r4ŻJn$BYĩCYfRrADhxC!'#牂wVS1^/@=k<_[zŦPH}ˈOG|r^@Xw(nRʕ.Fw Ѡ&3D_,p?oDv%F ؇A Mb޷G^p.Yh1՟V zK]ru2~ с~u͛~ɴy+Bl[ujhL@EGgHϢq\#AT_%@ F<ك/qBJYCR(RDD-p>QPLیJU/FA"AjH b%"*PYBA=IM!=DJO|Py(`kHWD!O%u-=VPߓ h^i B4Q#FEMu4am5>?ʌd+;n QWuʭh F7c>KEo36w~Ҁ^g8C3gI;w@>!~T $PĚ;glqˊg /v=DO) zWBn )^D.Ćz66y;*8z¿nR@I~WPwʿKu""zկE^9Q8k5 `' ^ Q.E\LGZwM!o!yP_8޽4 Qv'Q!`]kS߽+B(r ,GP*ߗq0!r M=p,q8 2krJ_FhjIq(Be#(!l@$4#&O|a1r9A/KGTE#(iȏ]yjwoillxe9_]zΡr<wܡ@b^\xg'/L+g᩻=;0?Y R[ӊI]@.φi /^UFsWl/a@My>ǿs{2nPJ}p7?) ̐cORŮzߨ.' zB1nj(06֒mn=bD-)p\ڻb[GZ ѝ?98i0 ov|1&T!=ic$3e | jcz2nP*}x#h@CLOx*f/j㧓w s@y[8:ӯ<'-Sў ~t5'`c$Fx: 8}P)f)M_oڏ^6"cesF#cW::":sϟPlʀJpA+ z[<5?goau?l] Qjrh0~5kwK?T[WUla(#!6S!nY0wwDDC%]Su<)R"=l~翳*v2)&c9sϝ\(JWPWZt%?wWC( 7bP SUTPB_4q-wۢ" Ć$|j BtE;ٿ/GD T}Gpsioi{+u'Ҿ' josGMj/eg.h|mRdzi¥xY}O0WVS|pcnO?<4dq1奜!%9lJG,Pz/G|Lj!5A48R`n5dpt斣r R>c M)CGgn9V1Or5=[J ǯϓ5em>|P"þ4qXsXAY6#nZ%w)QCftI8ޡDaf"D#;Gc27) (JlTU|wAA)82_!Ĝ:xp-G %MƉTZ*A`8Hf@j #fߓHc'qoP#[sf?˲V<S7n2J60F̤13L)z-A<NUܸ}/y; @}ViVtBz7&tQ3V" #BZ'ɳ65M\>tT:'!HJ:W|)2*.BE,Y0pi?t ^譥.Yy$2tq3 P;]bY-OJA5uP9h6;v 6:~`x|>WV'8KZѷ{.εI+>bx:miVh=:OU^>zI0F: mW_B@{*g"Z%_ȫb_9#Ʒrz)$wΗi[_*ȹRM*KdE[/g*.),3י6t6C^5kxGJmSéE0;n";̈́dY%z#%5o<l}$rǭ ȁywA'x݉Xv>Z?~hϖa᭫`4B=ok`g#4Dtk5m?젔p*ڏzc#m  gUИ8\uC=z|]]S#&:kV_Q`TmiU7V $w9{o - Dlpr_ +pJSM)/zO IDAT-w<63,CԁAK_[jP')XgA̐?B>ޗ:*|2"$~ԙ{bշ^ vZ;@eprӇIX-](J/]FάP!9#͝PTpυ_=AK;ܫ]}R% &~%}Z3@C٬=>?7=vlo3nj{agƏ3~6ֺcWN7n8@̩{[sM[Ӈ4R?߾s+/Nž:O#E}{!:נn/@BZvʭ8)Xua?XzNb: oUtf"ۧRޭAL6j֬$Z)%=԰˨PThL @YhHCQ< z\?J\xC$%aF2}* QXhs2FJȉEhSQK@T !߆\xHˑ SD$\ܴH}ym;P[+ nHg_z.6{D3!&]z90%lgӦ=q:ylqG3jA׃1+mRTfd LqZ֣I5l<ޙoNnN2kfV%'l;Vp7~Q)֑|~q,e{Z5y;[j{L}o 8/?řx*t=|gL Ld0H[O|_͚`{~mPN#ee~_iOo:f m#^4yr]H»g35,$h;GxnÖna Q:{B,Mfe; M-lip)Z|e|P`5 Jj/a*nܶGܓ$ګ!}aM " 70u+FSq#`JI hZ/.̓lqY:Snkeyvgr֣<|e[8 $rW{i#@`bHWb'9"MPB Ut FY @@{*$%#a?z֪J!C|Qm*tzam#Nhe]7V lœ'֗r]/:C̃=ܻNo疎_= v#ݬ&̑4Uo96/4kϝ.6iFlP=]Y``hٛpgxWgBrk3T[[f|P!erh޽LΒ"*gF/];O?n tz)4F`9<̚Voqe(q[P՜gDkܴKRB.tïo©S-b:"T;v.y}/%G#VVK- `C1 @!K'0k{Gaٺ/??kKm ϶ {nR`H7M?nBBQtMo~9fo}WSR4I`wqb W= ׅF4hÁ n#j8oXʹRP!ӏL[$  t5+CgZ t=Fkʶs>ej wbݠ.N{Qi5ŎF=D^X:'?J/}}؋='  H9"k]Y,` :wbGu;5RԪgzX~ tP'x}ŒVåW jDbѻ թ@FY&)fERko*TDmevE5o/ e`Jqo<6/J=KO :ʛL?7쿓W ?̙9 w _D|ϞO.1!OWp_Y.B7[ Q?Y9 vrAQ蔑~_f̥G-A̭3{i6GX(?Tvt:1ZE;|^fxsA=,o9UPus JpCo"n\Cƶg8~"##Hx;0gz6rvl=?D\n5%-GnU#mԻ竃R_FjtdxKy8shi:% [Νa׮\xዅ.l`RAqEh"i6ZDRhcWcSܺ޳M6-V4T0~2-sLΊ?jN˶?S1cɑR6}]}^اK>X[R-w(eE [ SgM 9yd Yj:SʭdEj ?>M6--TK%?Ĕ2dp͟16CUЄP(qnYByquC[}" =`.nZ=?bvQ" \M]*CZ>1Vԝt!Iu) @շ2'")ӥGx2 rOX4l기.퀔UVi1gfZGM<"gEg+5Ip3Ie %PJ9*-h1Cp(PCChB_-|(7ǍsDjfJ:8&# $^ڲLv-=ࡎaGTpKytBt>f!WAo"w< Ͼw~G'L|Gp#Wa !USsxw(`y[匂lEڡC{'ԧɟr9d/ϒlɯf4 o(33S_ iv7vi؊wmy@@?H+f/{g@cDŽ/8l`tzeƹ X^K2ԞyQ#vU7 sfW7 .;8ozx<2a0ݶZJ'G%<*]&h\@ %;B}8fl  -•Y;:xtrw:|!6g?0ʲr3<ȀxwLتWǞSjNS(iE,y}~s ;z2ߧ,:_ szuUg͞;1[YD!@u!9oKު邜G\u`@Σzӧr=rpWtǎ]A^a9*gL#  *m"U\+fSg!V* gTyVCM"Z//WI|t0nP5 sUʴ__@֡sz/ )aOwGSUup+8֖A;bi "J8.]Odux/:mSnm]X B5SxkR!kl^oJnUp}bCh yv燥X.6T{S?oJns}bBhJ'uU_EY(WivEStr*T}yDjԋLApmz.ZkKw~Iͨ 1*NTc%::0˯>ݜI5LUn:ڧGu~pE9*`4W_\;ޞ9YT^aC@9X1gL0Yʼn5.sV:uWrA]\ Q@鳋pC>=*t#ϋړDӕR-oͅ5.b׷3ƾezȰ~V+m~f~f!ߨe߹]'>*=I{Ѯs_=N:3ghg/_&0.}t|N/L(اְVqhEߐoT۲s1-.lLBR߰N@S [_IZ`YFjvCor2" "tW^Ίz0%I$ !q>$DjS[NTW- LiޔcvnߥYY?}%؅D)s>D٦,!:}꼷-$JUS@Pg9Dy],EP4% JAْ"AcP*Œ1eQUI" ?9$-S [qujD5g}"}VpG|;:eN1ak?̛΋%\3Z2e/CQCD$A.)xQ!K%N4<)JZ[jڣ{A!Ra ?_ƶ )tT(M 65E!UGRWUWZ NHD`rUbg6qrM]_ZQ}RRJWJkcD$']6W̝&)Iq,(: VU h#=b 4Q q 2I)kK?|0~xSzbRZ V/ ?}f %V^9|芍էyz ]:B/6(dUP !!,66' sR#!ޖ[9S6/L;AmPbwX&>7'4gJ j9Yɹ0 2Œ 1\T$r0:5`iӴ^Tkф -e2:P%Z]-,ei:]hurQt#(sp SmhS#Xuk [AHzp`tVF#Q,!WhfUP "a1`pp>> 4zojQne(as^/.E\չx8)0 H" "I ɫWW$y1 AKޜwgs>}gٞԩSSUiMM8~+H[e ؃d 1$̾mw]:8h'-K\lc^zPZfkVk߃~4Y"&/!#wKEĆoBR|=Gy@ߛY̩,h聠&w\9"iw"D" bI2e Ah1\" @@[XLM~KR߶wj֥i0^:TE.iBԴRzI$<.[ԃ"7  ;7A -q[dƣr%;O- b`lzPtr"4pPPdˇGu H|S특m޼QяƂGedyJ2G׻ϝ(nZ.(];$Kw}oOzqÑtOwv~T[ATrnϥIPwNjA㦀[IiF/gzVKjbynr&x,[D֡{W ЬU07"g>H1YT""4m#4^lڷ^u^P]`iA dqxhBJҊDCU?j©ZܲF#VVi34ۇM9rn9n Touf`et}ϮIԶ갮<6_qy<ۊ2JUuy5jkOhNUr%6@618aBXPըi3GEAFvq3yvа{6inqSͳ\pz"{[e0^Ä: g ( #-oNٜ(Lrzae`ǵtf5-2f4Րz]ǎl(vT3Ş]vP~}T=_LI?'mаq/;)vXli.ߘB|IվO<.;viU7&Uzr\[urѵJY #z}[VWPif+C=B㞣ŀ,sݙ1} DPuMzn-CǶs\t,r zfM۟4|qwZEB"Օz;sDz#_0cXr}狷j]rF KXTtg\̿w<*xz?֮p+UZJew`7NO6"&Dc>|F8E;n{|! ̾R垠 wF%ɿ}  >@wٞKc?48~Ȟ#Yǹ7Ks[}8*Epեn9\w )9 <,=q!k/}q :?yQ,jgVmICE.Ꭰo%qD{luBtg;'e{ޒ\5u;=.?|$C_ea(_ǀ+=j%25%{޾Z($׏?=T(4ybL\~"@Sf4xEDD[| w}Rk2]KsL=^`x\G =h :̰I2dA"_U8"qhbhIƗ.~3L )7~bqOTuo@oп&v"`] hj~ghCxDyڊ2>Y!0o?ѢC$Y@׏6B !xG-TS:V7-nѴ7vRX̏W@@1Ki'ˌ('ڲdɆ]D5_$TRX{Qv4w>r>NzL38u/>:DЬ*s}z,n%GO_?Ţǒ!šy.aC"hs56.﯁_PT yo G=ytuӋKiXF[¦ #JDo*jO4PCN+k_a! 51z?z_QMkJhԄjm&%r Z^$e웛_!n~2Խ!!}i2[L0vLF뭭wY?}v_VXt4{k3ɹnz:ZA6kGп ]Y.ބ$@r_%;t.?iՁ-Fƺα&5z_/^@%d _Whek+?=R"` ۽vwR1jr\TBCsw}XD?@&*H 42,ᾺRzؘ`r+EɊ4'UL$cD`IjIR~^v8]wp:->iVPDD$ Bhh5O8M$EٗglǫmdCCvٛ7hjb)j`: 0>Dt<Y-hJu"v"@g5`zj>â 4ARZ/tŏ>abN)`Ԭ>K & K6nARd1}7OnF~3|;' 2x*PJ-8͈cd ־`@_+!fDPؾDڼ5M:(f-|&5Чb\n@}-O䄹Hqfuety9wf1cGhO/JZ5!c(*Lh֋S9I|FVFh飑/%koVw?_AÀ0Ũv & z9*ARC 3T[>Fc#^M<.!|XFk,|Q`7`7K!r(Js90'|%h8_}k[78Nr6u.#mv>3!%]%K Bo\%FCl~RMeCSQ+J?:rpG+IΧ5I(xs,ER% 6!"1v(9^Qx5 q][4>[*m#Kc/|+SsW+Fi|RgZgV:|[JĞǏ&grkI3#3HD6 `BO8畡,j(5h8B֔2In>Gm TʿX)'Q/66ȗG7cyRk|4UM\bBjE}o/yC5%@} a`2\r!sE 6mM!EgfɺathI|#'\f&R I ʱ{;sO#4xAHU^3c׊MbT W^vWRKhD(%AsCmIEP5ȕJ*pC<1@(DǰNl6hbF@VȏV ^FwΡFnS8XL򙯣5 6Y0M9NӜh0agv'"~mLy-ƫMTq )WGq9 0?.6dGDZ`+26cfUu٢ _9=Du(KTPΥrB5lj"T6(qPԊj!gixqjdh aW2hEΎ36tf'^[ošUkn['C?CC-ich (o$Sj?_E"uiZިqpJS!^hn'a5/~V?MD>0զ\k ȠE]n_+z⢓p䶠F,^=W=ҫ;zĵ<=>>E*m h EX4C!2@k{[?߭O=~[)߷J2؟V r'޾uxNj zZNDMPǾDϖ6W?6~gT3 ˘il\.1/U?3m 6Ϝ9 .z<&{㴙sGl5-bBU΅?|}R@4vױAM~n8QMf[L?oӍ;{ή[㙱=ǤN̨hnKvx:`; F7KM|u/"`ݳ^zՉ|t=Gkw qAEBvu8lq[ج3<@2tnV<571쇛vi0?8^*s$Y@D"QE6^[;ҭm9onhPFYž漹5S7Ubbf.i&W+Cfx0tY(},Mbvk!S,@~W FfHb'WGlP*z k{ ,gfK r=t}G??f7.3a Cj\7)ꑙN[1ɰwL\<-NǑ{ji2\`Kʷ,sB0Sȟ<]-[!a#wjt5nx~?o[SjPK{_N1O|aeJn`2'`A8٨C*.'~fV˽+yN9ż2Ѧ[`G#jP'Հ1Wf{l#yO~I_Rgr#TDAkDǢiVM")W:wpc&rƽʮc9SJtҞҿ[s5@x7)|`Ƀ"x;jުdj*IKqH&K @b5OXTGڴO$#_~ E*,^̍&.&3J!:Th2Ȥ*ANN!}lUH?GCVFې^i2_O?GC!'Ҩ0'*dz15UG&];$@dc_6 'G:G\B {}8Gߤ=6,m\fG}z5ڑx>pS'{o/&bW_Z%(.Tqw|)k뮤T|p^VFtwYVJwjAPLPOOYp2bUimZ}ͣ>V7xޙm S*HyKcRxc٦9nt\^Rٲvzdͭ7|֑qE_@𽳿AzGvmn̻oI<7`yzύ LwiӠN$Uv_daǓKPS}[F%[[~˓tqgؙp4sW~f&]YȘUS$M=+zaZ^ҷg7ji}>nH~'N  Τ sދl=f{vD@R]w2WoクoFomg\z{%.p#-(kzzfj3ǻ/C; nA>?_L|l^Kado R- z>ҨYJu.Kb T&`J%Juzms%}{5ڑxڔW#XKOD D=<cI >1~[.@G}.8GoMa'KITVB5-XN2Rc6 *kՊ' <gWSJz?{{Kw>^y> _vnakJJO ʿ?>+wy'ڤ2Ɋ).ro>٧UPri~vE/Wwl\r+Ozq/Cks᷶ݰOVQqh⯎䉂NB[ HW^x}+otB@tGmq&wDh?ӗʾP>#;Nd 4NA? Ye8mZz]iMFݐ͞^1(]"}X]ҽO2#Gd q0Er' ( IDATZ#1#D:bs+ +RBb#yc,]YDTT t>i +{SGQ T[D>\ɕMMlWu9:&%z)yE^!aN[.tޕZMqϤ׆Fͩl*x/H!mOmoOƛ|](2\IM:9F6&TqoEHr#, /]/l8 yڔjKź-4R/WechCK+Z7P?xvuBqwUH~Bf1yh>}Uɵuzu)ռ1@GFmdA֥Q(D=TuTzOmzzydơ~^#8wr14jRʫozBsPzo_xWj\16]^T&pך1mT?v`Dwkg&u0McE{,SN\7T{wOmZJ;sԩ`lPs别:kW Բŗ++q|Nw`#st|>H}aA9YBTءs"t睮kӤpD@A)S5Plq` )L6[m\5}gM0wV' m{Yuum{%{P}z1L1ۥGu#/k.F HDd{`:~1c=7wOGϏ0vܸ-FyߗΘ6MyM|}`"B轣zo X+Zv*uYlY ?:1m`Zm5cR"~EDNU Hh[T7ֽl4OC0vCD+z@OmD[X3I-4 61q8?+?,D_M] F!5oz!#e1=U;,P,1/f) Ցݧ.tR6t*)eP}{>Ot<=2o]ꯖtͯ篻Ve&^% Dv}rorƣҩf@@P֟,]pbӚwg51mڠ]7(ǰV) _.vxO[^7];:ҪŚS3IV*紐N˹oJq5őjVֵ/߷UIe篧rV@HT͌9@eg7&=ߟDyH"nj/|iD90fCªH1]ܻP^q ?%% s%I.'3tLDZY;3W~5Av~8zuV6q UQgf#u&UDc#ۣju IV7._p307⡝S],zQv2rE_?&y˾l _8v+'Z=|w$'$*&f"֠:n{8B۶@/YU#Z&f_ 1yc\Pq<'9*ίQDׅwS7 XGFv1pki?v2  Vײ楸bZ4Kp-wuP'.]᝻SkW½;]|RG-b`-X4}&r2޹`Y>#m0Lʓ[UIz;Hߺ?ۣ~Gd kH//W﹐y=xob Xw͖3KI vkOC F_i׶7EgcXg`eX&FV)LتҜe1GyzoSǂjm냏k"W*mn}!@VGKٕ4pJ3 ׻)Jzt󟅰N΍2ӓb^f1c&=PuOז;5h%wEQ~sI'l 3\kB&w7uH/ מU'o^ &<$)Նnm1],=m OٮvXܧ띒~I*}@ٚ{{yӣ/?!"@/~>?=p^i|q^:倫j/syZPEWVRHKօ [ԖC*"d@7x`4]bBo`+EM#?852+-.i ,]Jw 8d[.1S/W C׬UKf:Oytb4eOUe٧UH(?4K~7D e֓WM |Rd{ځ{F[FjbW|sCąꜫb:6Jg%xҋ%]]ؠ#WHkP˝U9"\*Pbؓcnu9 d}1ret ګLDgCcq&ƍb%}9/6]CcQ%)g=s둗M~Ϧs̠ܨ_ 0mpVBX_W> ;Nr^94£~ 52uˏV?#?`GttzC=4),Vٖ"mZU@! uK+٠S[ק<<9C@@! 8P4Ш| 35?+:gt=EStv޳E~E*l3͜1uO!{ǂ>=YJ(0EPS*ϼV(D%ԑFh9PݥvwB@psg7aG@UY׋C[M˲rj›w Hh,xwr=(@¶-iv(u,:t;S)eE7R,+&Y#Y;/TTE81б%EHՔ2Rj䟪 18,P7xܖy.-Bb BEZrt=mRt5T#6}AB*ӦΘ>uƌ3|T"jp}]Y=[( Nz7N@XQȄiI\Z/i<@viS5idKymRCklG[03twغ~; W4g_yK[d8CXy=(H)r?k'Gc/oۧVTҬA;Y gb7!Lq^Qk%Zf"zrKۅs6$&=Rؤfu[MPjcWwq}6,gс]:: KTQRRBrf ͗O4o`3]CDH(7Q*l+#%4qo7`1DiN~y\MJNEC`dbF S9mdJ9i'˙ԦJqčU xzR"xG39ъ4æwR@]ʃJy-֍m2@aULc+;ʪ{=mw_ŁJ׎VeK ^? p$ojXy@ksqңOƁ=郆tiIbwHAui5n⑘yd{7GEbcFh]Q6vd3i479 H7wHaS62wpGzD8, 0!,A jԬ0=*?3]C*TSWF?jdqe^d&}ׯWyEzذsK~K7rOrQl=ll;EjWuȇziuyqYX특m޼QяƂA _?OvgDyS0 @IF?;CǴV@k(ЈUGW Zs CbvHwF ~=p+ ).c_X|ׇʥ9Eu$= w$߿ڥ̒+䬸vѪm`xcWNVܴڐ_чD{|q# ~1/t Yiq<%7~tdո~YIK/ٞG3GbR2 INo便ť!OT!ל( P֦=a7OHq=)|u9sIEbyG 7foU$ҬFLxpta*M=UJdj~Zy ?GuV |{OȱiH144|z'ϭ@wّqg=?aԜeum+lHPUKL8zPHsoϗ+u]}k~G*?̚G_yvW*JsZ^?*0C|Fv&҆DϽZeE% {kI_?p KMHaʬy)uD9d5]תiH@t}ť_ x}9<k]V G8=HD&{!u]m4nZ[+k'[Fb77 b)h~)|' nr d=wZhK<||x/UKEPE M)2eaƁ8>r)iOH~; *c8lB"Cg1&c/| s$? Q D$h%~bP6ͳ˧o!ȑ@W IDAT+Ii*?C"QxkE?U_5grMwx0"&cC6Z6-aÔ+,aP4uJ7(Kah%kw߲֖EC@=@{?6ӈG9QkZU0jHQ{9_BկZw£Ғ]kv'i F{W[hh5OZ4-qDD pIqɲA -4 ğ=6<5QUZD9nD5yY^հkXQc)>WƤ$mk=ⷞEڇ|q{5ێ&!wRP{v/7wzx{8@dt6?_P@%zdXuUzLqAkQG',*43֪渏3{ @/Z+&SqYR핸uO(*u c,bў_.Z{OEB_Jɼؑ*`45ֲ DQN 껤˖);΀9aĄ% 2^f+㦚27Xַ;PژF"1f9?<m>@NgiI6=M;R3\w'a2YYdNml' u&jN~@]oI8+vɏ~,BK-hRһ)&:R!~&kc'ˢ6F9ZiL['5 G j]A^CCDZod4#8R"DOhe[TGLm/.; 3],P N7\5ה-|3BE)įޟd5]4`}D220"sŐtUK9 H%+R5j Q$%ȡ͆hEҜd9rBDJG3Ed4vPZ@Q9gDd_}84p*I[dNU4,kZ ʌ_V UF3Eo-L#%W#wB?|.a{)Bm6XYo ןD5D^|kٷ4u3Qs,r Mo%Z3LgsxKn S$= }I 4tc> 1*߄Fz̙}"3;*'eVu7 οзm5,DknlPZ|hV}_4 \k#S @=VGG!kvAQC',7j1UĜsoLpRO,*9JM%F(Z$TP ˣ;d""n|Fý("zy)JeUY?h ni׼)U ^AmB|8zMhHM?>֩ohLԞbt*c:‘i;\G},`yC.jȐOk-TL 1(go;Q{7X4;P]e" Md6 ?E=! ŵLD:U^ndshZr_B Ӭ&I:*5/d;B~2(!_֤^~͙B^S1RxkQ㚪h ?-S}  MC[5_A4l@sؚ)n[)k˝hAWJ?)0pE4 yL^<1A@L^^R~Rz, G~BbL'U_ w&Y!3>P\5T맡b64as%1zḰ'ɥ!?zlj_CT#j=|{XwJc2߉THQ5GDpo& Y2jZMf>.Ǟ0bZ:AQkkmn݆>(r,S0Z)$m6SYhH&3iS}0et;*xC.&IVndZDyN-IAi'h?A6@/vF) [/×'Xae]O}YD1׺g!'@H%"ҏQwnvtWeԄ߾-o<o#YP=> `_3B)"mL Q: ?keQC  J%aي&& 0HV)f_xpycr-~5"Hj& (x($,qQE9zF$ʅTЀ `o*3"~s>o<-MMM3 v웴Ǹ;>LF8PķۈՖ?kmk4}.>3ufra!eALM('b-z?瀰7^ԓjIg~.[ zJyyNC31ַPBu?/J ufwy8˂kOcM`r l?ѳeUxeƕsH`2fؾ-# ?tA7e^w<3xLtA_.]uX.c^۷U$_߻us\{F>t1APᏍ+3-3A-ʹ&ĊSGj2Ag+;BC:b8c#O̜|Y}|ygCdс˪6GC"{Lױ|x۠ĎCXSow߆>ڞ=6;bt1b@}0YKhHp^O?D6^d`w/Q0s&sklTktIn7:{{<1N˞_tRy ' q8׿RVoKF^^WrW%mdz!A(IM!:mQ_G1>lC[ج3"Ն"jp`=6{7YSu5?)]]2lhPǒ{콅=͞5ӣ齧(tt!FY"t= !/|؜YJ.^|X1QEʩB 52KCoEսnv7=!z & JQ^AzXPT@P)JGADz=d71;Sw7~|xqrι{s'.^?/ލ~,njn@*Ѵ\*7m.V[7 Dkx8ZJLrB4E$P)&EEwaUݩd ,BYFcF>nv0a=>X[)fmMՠJRf&Ǐ?jXeomA}u&[}G;>Q8. zZ7pjϬO't3yKdH=l*},m¬攦/ۓi`Lƪ^{P{tڷ7"/ͳ#;1;BG^&Xľ01*yl/ 8j%3gjAӣ,څ]9qʏ?YDuNh/ -j߾ ]2L@Wޜ5~9g9wdj¬sK3δ1a}gaG_y>XuW[=\*R7( o<ZD_A ;:8^oO= Z$d,ݝaCBE?1S߾[;E.ĥP|}ٯWtwMS&痉is 1C_6ԁ_nj[;7YDQu@~oaGf̚1+[9\*j1ufcS{=7V8(:za 9M?9ueLbN毼͌O^:,"JVarOCR(:#>瓥InkRJ LMć$QamBj}!P t15gH玍 Qr~jW1@,Dk,ZQɭQ'AiM˂$ݻށ@LA /=p9F[~r`z?oPCW|MG>+1.ݣfCnlqn[[t fjunoujcjΓڬf!b+.Ϙ廖Ǚ>95ȃU>qA`>c:TZv__b9f?t`؃1I4Bz! G>5qX*t Mx$#B{ӧ\o`!ww]l Gwk?qtǷxhn0czʌ3{{ M煗Guo`p=<Ӧw+I-Z;Dˠ5 fnlY6lbK?FO;p/@SÁS>ӫ~V޳ۣ-%b UOdpCKprpL)A-z/=Oـ $w}pl%. k+wt@_V98eg|>`?u@v6<2DDO?-[WtM1ҋX(͹Aaob3* ?͹Sk7 ]_w>F4iHT{ڛcN|{U$js+"6=9IzZrr27r`zԠjZ|v|svՅR?tD{m=ꅔgH ;{E_WٗZ@^]eX9z9#0g?;_s.ԏ60>IE0wvNL7w` |logBԵh"#0g?P-]7ϧ3; hДWFlSkv%T;y0Svc˻ʱ!"L`0gW/qDH5!nE,"v]anKȷW|6+i h_yq%,ިOVT1»>7'DEn[LvX?F'/aSR(Gq8؍r?W+RR4CYG]N@B%D*Q iNQ.х)'#2 v6$1p^eHX?sW*ºvgB4#r\FͣCX.2qqbEǵ4@McM /E=9oٳ X1o.Cuhn1q|{748_T(fWc t9n9mZoq}t{_S_ƚ#iU]fѼ*28AߖLns%>l1aq~5U$e"7Ehu\$VY61{\ UKk?ܷK!^|x]I8_~@`ҝ;kRT_7-=bm|pL` -+rExN>줾J [C{ hDGtF!/ٱJC 0A'.pU ɬ (ۤ2u}뵬Sz o޷6@AlnYrW<ϒUī͞1/ݲݞ_)_4c?Uɑ_fwx+w}#t+Ə< ]zcҢĊƵlotjgW#~^D@*?[`P@Ө&/[M~ŵewi~/qFtSzkA+AA!nIlF#[U8d=k0gާo "V[1aK~̱~^7iĊoev*$]TѭȞgγ'-9Zlً/{qKNZ_6k//5]y]^?4 `@Uu?UZD:P <4^"Ռ+Xd)I!yֲ+BZjk D( MTL m5x E\j4NeTKI坘V/ ۚAk*䥥fϽ9+Y'|n|t ?G]OhՔ䲬 Ht o*d0Zo`21hkQUH/RSlP_HNϱ=EmBV4v&]t~ 7~z߭nց!@@cX率&~ۮF<={Fp|>TcoS> ʷ+ƮشM=r2=d\;֒dz5ٲih$D'*W<=1Y[J}p#6sA)=OAL."M}ڽ3l>(:iݚ| jD;?w%=MOڛxMsm753K IDAT/".' iKi)ӥ`?U^͆E}Bm% erTv%1Z7~;Ek$T(: {~as?-\8_E< u_2NXox1Ϩ>^kO}_n޺mG}}2u~No 8-J uL/R{|}P#Rex<yd2]"˦  ίȓk O+r$FAk nHj7tPxݗs6kِs"t fFcv~ V޾Yh /2ʧA#k}D/͟|՛w [ ~>.M>Shw.AqfQ9)i! ^խOJP6HT׾UoAT/ՙ>9mgRو+?.@\] H" .[&0sW]>OKqAA0O}bЪ}$ gܱ)ɹ?S2^wg׺괔CEoZ~V|ut]kŽ8w _4T8v vHK &" 0GbN;_ºQMSMl̗!(BrQ;͜w (m !$6X/BRQ[ (B/f%-+& Ga bФ1s@(@evTE. SsrYWZ"M5+ ,DթW_Y{q ^U G>|&~ToݙY^R$I;~2+|dK niB߭F8^3Eϫ`=,$,TzLw߃A8{oq7Loi qf;[$zF]O"8/>L(Öі{7PG$)-؜?Pލj읨kO ԸaUxQ1hBsZo,j̔>; GE6.D,>EՙR[yҝЁ|bV:I{ϲWvހ?՗T9\vqÛz pW쓛/K9vCԔRU|̢;]w,.JrÚյ*uK**9eP -5Evk-Ú _Krʠ~3VT9\~i㲋Ɩ=}Rlq`p=u; ͭ=[h|^c.!ա'AW<4?\3_-bfeS%{Qm#m&@jAZ1^rZJ*j*acܺi 'S/e]5wT]W;_[1ދ]ޫ1_ذ"wY͛2x=?KHmŹi'KrʠA/`ǧzy刺oԺ;û&gOH%:kPkP¿?t~׳@٩CS/ŗ_[yU\1p.roa8o*~AjEr~ .khm~A[ նs6{=hX|p4!6GWU?Cybq=:Op;:]s7R\V)E4Kji0~Z]5%q9[4w?g0*("+(*2v16.\mطNZ%Ȉβ,xцA)QUUJ2;&Q]3wۚ+!GF= D]p#?(B*bGIj5ˍaC8Aٹ5Ac89L%KXIins"c8nBuI$ӹk&Ũ(M>W(F)EqzސBcpp7-VA]`s.]\ 9W,꜀" ?t`9(* -}H6"U]i,ɧsOa_ϛp.\&r|lmr`@ß:\iK=0VdsUf7j,]/?ÞuxlқDS{YzUM{62{8ßu=qӨġCRa Fe? iY8J+]j0^O0> \Z|Z"}rX)xȻ-}2~|nI@:0?F᳗]<~踵iFf1/:hؓe' @8HD,BՁ‡Zz&#n8%%^Eb x5؋f:";4vV #G:AyTl"]XԞh34-GA@^[ŏ-4"U/Aq*QݮUye M4.k4ٖLƦC[ 執V];0/£XݵVyq9ǯ%m657,0)Y]dNKhF7Ս S^(ۮe}ً͚<-aC& k_/ #"r8^:6 414Qсze[h|Ẉf/|&LF6j[Ā.Ǥi ޶Efm=;}RSV[|gh&䩂' mW/aw5E1箦2$կ=ihG3' oW/mv_%FP}(vuB}-ʱkܓJ>it𺝞{{FF6b ^RBr2dvbO|*2sߪ/͔ӟ%qȢ׋^z{ɣaC&oϽ7"t$o l'w>_-75@UYYYYYv)ʷ!W}e83šbu5(~1ϿQGF52rb˗_9mF ]4sCUMUYYYv)ʷTuw՝LꞵףX#]l!~pѽ^Y)!] n?0/i0Q}D5ܻ_w){?{/+0{&RUh^KQ02[pW zV޺Dž+9óheݵ_6aO5:>2ҋ7CG?fu.凡cPQ i/gnؚRҹk0Aukl0Q}[5޸sk\L.Eh:g/v8qM:BCDZton$^-`#Wg/,z=;D "Z?^c6m57ka4W6 w['1ez4T+=4YnporGW<I4B.U.Gtm UhG+*Uq^}wK^.4#y#u39.pkS?"EW@ %Z OPZbwn{Lxflc/ur `eڐN\3XvغOp!0ieoLy{0d4"o.cWڙ{ǜތMwK}xex3gX I:W-XVpoN90\SQ%j\0m܂cukW; {/ֆwcu+dƗyup]k8=쭞R-=Po?D04{p?x˄2vZsÞۧa㖮 يn- ˍMn}eV%󟄏V)Բ3s7>*,e/vF2k׭FqfID>{/K{ Fn${ϟ >i{[yIR.BMڞOl<#uχLS}CatZ!I/rkƓO̪$Q׿={ϫքw"^3mǞjUxti 6gKeo/_zةT{?!j Yc"|*O=n}}⊎.m&YGyb}RB;/z`)Xr0_#׀F]zJYRNziu2W_/Ikb!z_'= 4OQRhW9׈>#;2G[|ԺRUlVy⎉-M[ LN'1{ D~鸢KR'yǒ|ǼE}cCל*4#œ_c @F̥xkUmb}ǞjUxtIUs" (Tg+\>ٶ"7=$W/>څ\_ZjBSȺ$'l]g%^͹ch0~; f~\@ޒpI<VjOR9NB۲=ҞFLU&0yh'YI{1t7#_w5|yQ~W)uF$/}Ώ/4( K2[E֒E%T)+0 CttqWrjDK@DLLgׅٺﮦUFv;)F6tCI'k64djҪ sW*fEk`@ مTSz(k(SUH F(qlϩ7Se8M{Q),&RN#腡=T\pxH]@ϓ@OZJRjt"B ꈽ5p?MdPb|Ƀr75,\._TcU2^̚GAm*zb!f_AQEIڻ#OO$˿h\ZR $b_@i(SRyKNqUk.*@eTꞆNEYNXNu֠ީQ+зI/sDzw*ڮDϊؕzUF2##a!Gn"om[]% hR~W71蕕a >|;+P#:k_ޑ-GJ ᣭx|\Nӏ$uΤ}>e֚/ȖIBʔ(F@!~PK`}ve7E\A/<+-5$Ip4 .|Kµ*uE2NI*a%Gĝqğ$VBu7Ȗ#ɥC퍮v'`FqH'et,ima.M&RbZ0 ATQ/s+RAo2C_&M.D2(2~-C{=*K@WFe(KIb1hqp=NH͐xc6P, ?,A/T)Q)ލ$Gq"dPfBn(tDV'޶0=\7V&4َw\PB/* Ja%*K"֤egK;Z)C@!N&V{DAǁqX*+Yj){Ts+ն LGRIfuykcwi@PuYUG1ǽy4LK<)4%AH 0A%ŷk$i\.)-/U>;Hna9I#[jiHN^k9A$eǬgȵD\00N%]\WhbbT"r1֝gɻ\7.ޅE /JEDȋQ$?AHS٩b$Jξi#n(T< RbItg" $U?==G>CZ6䆄HR{iv=U!`gK{7-.HRK Z jqe ܅Gg ] Jtn6rqn߈@صXO-+3M%%u)ofqBa]ae?i("[Q*wrUh(< {\(|˅dz|5݁є D&@Nq}=±3HL':InF/"S`&٫jsaDDpW8HIktq?8NF?yH7&g!kH7rׄJV)(Jb ; O*?rOR`j"jj-~[l %^9Ԣ\͸e o$ 0ZU.Ns]Zqj_}HץwppPwWq \MZ\ts5)6b)P)dt 5ʗEOU@5j0$mH`'YpnvgcUDln I Cnȵb@l,}Ԁ-NJ*.)i'(&ߤ% ;$ !Ć'@TCvD(6z*j{+^i;'ϡ9PMZs@PjU95A m';K=(!RawlKܹzJG0Kta>SQ:%8k~P4o H.T;gGeY- "`:$Y$05!qg?k@_wg[?#h$"\AirmN""U.#H.Ig?,˲`YO( #$ꀿ]rmp %DlOƘW`Z$QD$wRI-YYW3Dp#T\cT/w:>nl2/qi|]β>z+ N`CuB=5nc후2U׏~gr tċc{i9{s Ѕ?K|*nn>c>dLx :iCQnĸя Iy6dTs+ϋO1}'~MtI'Ϧnp2ִs1),:+_NjdcւR,B Pɫ^ETck5 {Ƕ}lM[ B:|i\|~XSq}U`WYOy{36T8!36`qҶxWWg{羅#y,>& vaֳ5ZDwG$\Tw{=szLxQ=&Howţȧ dn+CTmE>g/8iHcI;SMREȪ#u,ܟiGy$!1GH=I-D!!"r.Xꢢ2KҜ37hj uϨ:ȖT^OhJSL┈gy.!%xK$5bEu,q \D]It+bVHoU#AC/r-.`vqĤΜ9 gc>7{ ʛڹ[EYE)F.uFcM`Nݳe=EۛQ{ydx ѽǽ4s0a lޫ}.wfqɹFcO`Nӣ[Ծխ0rPb:5;uB6׸f,f\Z]E)&gx ̩VN3<pJϬK. lUd.ݝQjj˖߱G8T#x# w;XX_>rʥIl-I_;Ӧ'~w˿~Xݼsp8*0穏693X|4M=}^i]ByC)!˦hQ֭b<m.>{c=,MvgOWd3ܳhyDZ,S[ᶑ8v%w'm7a' 03ceʥl+U@ ECS̱J\L$SΠ&ʉdH|xJlFCQrns~;d]*$CBB l"|*Hl#cq? `AXQrnsՐ\27R! ,r|I`ĀBU!FpzA:FZ`ϡQM4\=wuQFy8<ߠbI(RCKeTc|+J %JqB!fӱekg8ǵg;#6\+%pOb:vcnm7ao:v#E: 0NW~t F> jM=JϹ$s|"VnnY~[t{s۰3E@x9pL </m)Ge |w;Ԯs|} <3owZ!>nƲ".&8HgͿy=㕑mBlv'.%hj8hgz{o.>g#,ؓmW/z{T)ܹWd^u͚5`np*sLJslvه9RVMq |]KK"zI|ۿ}Bdˋ`ی9md[?_kt M}.{OP<@474>g#-d02WylԽ￷n5Oxg>DHфwɷVcn8p+ƷGW`+VJ0Nډ 8eɷ|< }lŪ;OP8Gw HlM…,#t}OգeLQM[)!& 8XgͿq_yOjH@':¥#7/ܤ$=n.kW?TꌏI(-t ǖM|zh_Kou>Ft3odR&'"gas8Ev0u5#)"*j<S&.J⸖f:b¸~̵IO>*~۱b˷_ˉ ^lsL||q~){p~sӕq ^E \}˧45GҪL528iyoTepy`|[NZ09.}[.K||¢q4EdNgݼo mTᏭ lںYg4*?˿lE7W4/Xza1|Fb[֩Ng@~ 1C^{d+W1 C'mY!'޸_=9)쑗ΣJ">g#ICzksʧ^Iw.%G~cuO|ՉqifϘoY%ۋ\}_yiU»tQG*9*ԪАs+Əb`}̞8}uy9ǿm Y4W|~Gy -@NKּ96prkA\\VO=YÛk·=> oZth9s>)yCct͇-'-ʩ7~Nޫy/M¬YnAdI&ݙmmdaޫE L\[" yr9:mސ*6xs9nY}5fɭ}˷sl{;?3k{[BD}Teωd&/s%q־BcE:]^7i‚'sFҿ] aH!&9J qjEATHG^؃mEcٻk-!c!D\NP%=3EVuDezZ"Aj6@DkR3Z@+&E+@Ք;E|w+يe -)%rWચt-P+~y-M=r2"/,f?ym"#U!hO>G?Ջ'ۤU,3q`=rGkHqs>=?Ջ'۔'؁vDaH+S/>Y^pVyx'ۆP:~xCsq'ɾ,OU544ls3]zO igRs\8SA)'=톱۠ff),M$kݶջyE@ѱM{Xlּ[7JAhgglR=̷ɾs*q cAMM"{Թ<(֢ ٰOHM|C:ʫʯ$&\ }|xƸNQ&Wݫ*7E9 7,˽7h],<}uv,jƮRg, _K<⪐> ٸO9>j$ɋX9}oquHE7.j+oY] uժ]OxY~#^:PJT5 ~ (y~~Q^SMXtl+5VbmQĒi/nYl`9wwŃW&?fud;ah4D`l2ĄwrrJvmPS=W]zZ12ćo;rԺGf>Ⱦ""~ dPw󭄄㷳ucAN|FeiUluvL|@AE-aA͕H2 sNW5Nf5 ;&x/oHS7#,+)dl>ynf~{[szxh_n>y3#/CK!fn+% _N07|+1;]7v̤rH$MW-"NCO1 Q4%HD({#yjeɘW53IwufK)FGT魣D.чEy )xZΩj4fKJR^3" $Uܶ3v[79h !^x^4,j"4x9HR>LD~p {~Pg[=9r_˲*q0¯riS2_Ωtŗ羚tD(}ɹN} Ӑ%p GynWZc8d=BuSt7 (`TO, f?,ѷ\һwIwol~^*w Ey}p0,Hv V-r5AmT}Rx'[7[J sZygulצM coZ%*vת^[ƞ7&QfJyy}̓ӆV{L! >^ 5X<l{*tYneBžnAOݘ]eP.yJNY{1?=_ºZIפ?ԕtNʅS^Ϋ&>E˃;6It_:MHŭGRL-~n B!(z3gV^(q0}p0,8W B^Q[nf(қBf?,ѷ`n5j;z^$s}AYNu})iaɒD.ڟTErlUv1vjěBh_&ىVeGyl]}RR m?qҰMBx= nʔvq6y|+&iQ>72,,{.U-;rΛYWPRwP4Ț!Q.fihRx1ȁDXB֐<ym(B,lA&]Q:Ջ0V|ym݂ad%SਰEdaRrv*rjw_4EApT|NfuC1+ܰ˽GD 4.]Tuw M>l-ÚQj'${INA Q6(kjسO|}\qZ{v}[<7~g] I, }TA ژZ-AسOn.e q" ozG}[Y(.^ALHz꒖A$s_=X^\|҂J֝PInPb"3XsCV?e]̬;/z GreNV-acJ0/_vت/X,j^vDڕ8UsGuuxꗛNz IDAT ] {'iީipkLa=띓Ūb7vlB\.s†e\7n^[ |.nXzPR7"+ګlʏEƯBvTM|k @oT\w )ĝv$MW$yr3Н#uˬ7؁$lv|U`AyKH LiuYa…fت2ͭ^|3k~t1f*urQ\4I$uښC7w.Ija:LZu򮎂 0"[ j2QkFZEA4 =Q\A%R64 E$sܮ$%U(?gKi JH*XP|, QTD RCyg{۔ݝcwfgw^^.9S7:(>TT hR' W6f U (A@Eun!Nށ$=rˠntP\xa^Yڦ [20?*Ğ)EP]ߴZ @XoN _PqBC#V9u&}jwgI;NhnLHQycI✾^[}ȩ NƠ@(TZ__=417޹V?y9\TP_~}"w1J N~~]j0:0[Tk*%EUYJ74^pwʳrjB&R%92D&`767l2'_xH3f{v>n3/a+/@ T qi˅[FO[`h0rv\UV`B@+=#?v%K]T㬀S+.'W,rcPDD TG9]/ib2_**<(!ָ1Q9xH0tzhtxPE]A.YFʟBOd i_L2D2['ޝ?la]{ , i-^G 9UkhmrȆu`[lY }qLpGѭ|8 %R:~s7JsTRNZs@]M,ȴ8r]w+')2 S$8` c+%HHϪv΂풂w喒* 29FwxZD074cTe^+ n"bNeՒ{G/[vK0-@0YRJ*Cm8!qAJ:]Jo%*(w^O'w'!5F^$om-/;"&O7Ki2vye=KeIcETQ]%WCBE nQ?إR.bUٽKIcWDeWbi24:CtO?p k[\)M/"՞@?w;u%6aN;~Qq,8[6-MNy-E M1fW֠zIIIII~m_^R u09>, |o I0)/-O_ƃ3f;5ΌĤ䤤nۄcb;#<1aj׼Y^)ft3שpLj%_Dz~Rfquc JڞƎ8&Q[ڏR%ޣ:bax#B efۣڵ0%Je:K:mRg+oԴ\20F_Dz~RϦu4vP}? I˕Q'@淳п[{8r ʲDK}ɡ'bǯTGW-3 gcwfb[vz[S.z?l#]s 5u7Ǜ`Kyv@;CTnȱ[dSS.v/T( *q:;Wmo1sk~/_`LJYXSVNn9(U&S HPGm5. LE1hlv*F\J YNH-ҀByTk-jKʿƦA߂!=¯sPup$ZhkEZw% mnFsNZ7q[ k3pN;.5З:)|XIgz\Gtׇ{^ꊍ/HR`H ԑצo$Ld hIH]H-ŖԑͰtY[hNk ] :!JJ2j:kl,CP`Ҋ$pt!{Oqsbde9j5;D%n ݵ'#X] hسK͓s1FՕ TP*CR$F%Kq?T$o1YKyL&2E 7+$o3en@~"1kOԽJ1^Aç@@-.DwPWn'U?X=k4WzF UFS18W:]|BZ @Ȱ଱Ur,D|HSD _ ohΡ#'mֻӝiV̛M#} ~E"a%=ۻqyg  ыIhGZ% >Ԝ-l8dW) Ϫkd v$΢̷n‘#[^kxkÝPX$@u(M_d?)-Uų7F3bVj^b4T ΝTSb% vwwG{|؛_ʃ9*hx#*ts;|88Ř sg<ȻWֳOF32]@H~F+y9$w|8Kk-yES*j+JJe{\ Ikpdoj %&4h1NSI;b$Hb!E\DiE!jxlQ.q2V5+<:ԘjozkE>t5)rszAjW{Q^q۵zK-#nNXN9SFNm yVV;{ykFi4Y@cD}- MD PST-Ϗ *oߩTE Qwϯ`t'Pkv hmA5&<Ը.$fAQA)Е Ea<82Fi xeSc|Zֺ̳+S^T, '\\ ,&K*P@xOI<"At'`|y'fD̍bRHUɸ7=Cl9E+Os& |k_?0aO64&o/F>Z3Ot#uUu kw>^NJ6ryI{ ЗZXU(*4REǀ*0CSi.do_z.w2Go6\POX8(rz&sybcsR9!jGY>m^!(^ngkM"L'p/-ijn}bޑg52sGgF3h_@HФWYV .ָ*|F{xsFSSxCAHv*֝aQ1rr ,O2p5魄8!_:?G@@oBIJyPobq[.HtӿoI 0fTӤ~NH/Ɉр2.63oHݲ1u$ LһHM FڂLݠy-63Oy^:D0`D`4Lpw?< z ev DGm^RAt^%aAci%aи*ak3,cӕDT$rYO;ʳ\Mk2%[?K:[UZP%/S-Ə~޾K 3Elj!"OvK XH`պ%<ڞsК\2NL!z_:O/j1'#Wn^H}5 4T͚؍C/uܭ2ŏ~oMsq*^B~K޺YBѺe,Ȏ@(?wӪoε Wm-oߋ#j['ƓSw4wގl'A&x-&Q!szó`{'I߼#ycԠS'PM@}!PLB'@}2R%BhM3abO7t@,Lvnm2~ڄc?W+?AaMצFĠ.M >r|!I9@1Nl]r/K5i#텗voZH%l- >H~V-hNVQJ:0󄞊c1(mE@stՑӑ9yA'f j=7pEHiWGrޛVOhT8Ò&N+5NeՐ80!؇vd&Pw^B(dwc^^~q{CqI~vA̩V H댨@{eP\|U۩eAHW.Yr"87PX1sd(r;|}"aJ"@Mэm>-Fh^U92-?^yݙ8`3ro;a;lik|npgոV5`~oo5KHuv.qu!s3{ݹE~Ew;OoJзUi+&biPuxV {>1JWJ~v {hUTlJcesm9%_+p QY2n|ѥ[e҈ί:[Bdl!忟nv|}EܿpiW;&wͳ%`8@ 3ΎPV {\`-`ؼnv@@ $uZ0F6MD J'䂭oHF 5zy%]/\-$ Խp|+T`+54[TSdcb b P("owi<2Gg ̮NuKn_Wv.];nkoqt`"E3<,y<%weT:gw^"p fqPo=E_.WJ3f/h䔖&{EׯΙ0F /=*] y-'#>hi2ns ~wެY! &sG(z{.5~1/n*X}k죓^:ξ )nЋ^¢ u@ \lFAf{8rќ9S/ece|ߘ^틞zikߖvߕd&XKW^zėkB#T+B -&XK慮LxVd81mY4s׿:n6*4ʎAW?9w@пIʂ:t$ 04VTlBLPC2H)Hҋqisxq3##<\MlFd)1eVJӼc İ yhUD_ g 6~|A V"18Hqs?>}}PPm0<Ԛl '(1v$)auymsh ~pKDZݗ+/E6҄V57%x}DnGcBavGlib-<_,n6gbKVӫ8޺no'&zapnÆwciyrV<:'GAuus纞KV__q/U?~vPu@9QɃK8Iw?t)3/~ݼv \LݴJvՃ6eqFOo:/\,9m` iY?Ȧ7SY3͙+3 Re>o/wwOxQѫEiL3 /  xV}^ĐM3cWy<@n2;7W2J7޸'i`nT'9 #봛_**eGy?=s2}x*?Qϋ{ƃE]~oI:?_?o~.ait瀋.ge_csyt;{ًUO_ul%:ljp~?gμ7c{v1I#o2dpUi߮j0'57iQ 8phm}uRF^nf5_].} ;N}Q{%ZG`B,ܳ܋i狜h{ִi߻Y\r2u嬬+n8&ryVebK\ؘ>~ i݊/e8˦n(pՊ-7]*NwTthպZs2/EHC YPnSt =N$K ol5Q妱Z d><'$$kULTSF46ay&Ce[z_UqZ 7vLz3u{#Fe:j\vd UV?KHCvz~b$=E,c2cdcD;|"U:db b9__EBfD-\_!Jpڬ|bGqv)4 08Xg6vKhN{"e Uɽ jKGX=x-ezfh*bדZz:d;!T5H}׌H02W+@P0ٜf*ʪ yk w !"zhYkޕJF WI)&1Dia RxhR:srCKs5([}yT樲#δ`Q% c{l~_EPHd9IW)9seJ:k E_HiYE-լ;,+'i⿖R;&co:Dg^* (:(> *sN5%<>}7*u=\"GwRIu h75הcc>`*UUm?;2g!*C)-(,6:0mc͝7w/N9Uu޻t呉4揂S@vA#"#IkD5n޷tN/q]CyN wjW^^ڪ5mw*sjB`Kse p"hk8 }ǭevsxHnY|+"ĸ)ȆFy)Ω MNp 0G^f<;-)mT~~(3)y+=$ұ,BUanZԪMjLR[U_*o*ʌ`ۢQ`ѕ咶5GF*/j9~D(6x4uNOޮ"e\-4Dć4FCEQԲ}0 m}u!4 rdOz<-/y`K_=Ϊ3s=ee:sjA0\'66kbi8lPLrgԄ6Lpy̒Σq%+^pƴkjuaL'Hd&ȱ .` ?y *37k)&B\tW)-7n3%L^Dc2@戆Qfm fq̧&~(u@\M"4~pQذk#s%1,˽2'(MD/pVր9l4`lRd| A(i05 Zn4WH>L<rRZQ&$DP<@X6EQNdw4`Zd:`<)eyT,@QN&CC[(޹n)ˣcleWb`xd`i<5E=0,FLYط"}m{ahcDal׼Y^)3Fgo1aT?9999~]U핂K%喹,u 5Iqf ϟ 6aD{OVpt}'s>!RIi?Q:nִE營~;fa }{c ;8 Ξ :N1#):nkŹYLI땨3&lW7Ac50V]۝V|>Mbb;e=CY ׮^dxhl{T&@^)2uyȎQ `qcϽZhnD>"f3N2qX6&ڳ?F_Gwl(A20ԹBz`wzKLl;Xzcڲo z'@ ?"1ark4cĽծy6͜ѝ|s8׉Pc ިC&&7b}-k#;%"X,  8An=9xж Z8<:sk~g%[:KZRu{Kl3hj4筒+#&^#quc>?lA+M]<^zeܰY/OQP@E1v 0bNb0É"A-ǣ4[q6isV5G\#4 g[qFݗشgiOGv?Q$Ҕ^GĚr3_Dz~rf1I ;`iǍV5Gw_IuօW7,,πHY-"Lh;e`=GB%w6v4Ȅ{T]۝Vb>Mcb7Az.`XȶE)l4kд}f1߲;xMhUst*/WG|W퇌J;W?S$$$Tݱi:&%6&a0~`Oön~9copluY?I%gf8j|T3)cϚE).D݅.&ﮀfS`po;Ce#cB V.J=QF`I/,:y]v"?U ?̚=wogKתQC=}8n_`Tmx_N_#js`w^"v(k'SȜlуn7=`(I/^۽rvP'%s߰O=`ܳ?5*4M G<;qۣ8qF<;I~~yu~8獁ͬ?dq;`:?)!{.J=QF5-4䩱/bݹ[(=Z7~%r\2MZ;Ié:OOyDUWbd5! 48kNnD  {ޡk`Eş=߳-8 ,MJyhPSv~.~SA0XŢ>[R%Eέ]ɩc6둍9]!EQ9U^U'mZc!ʲHA6 Tj=>#k*ҩҊDUMK: 1((g]inl )s <%EkR"X:)ZW뤪*Bn %`@ǰI)mj7-¢|)>WSN1U<^{Iyk}Z:;9ƊJAox:~HJ䉍wiwNVhF%sY+=[A=[Gc\DR 0]#|TUɤz :9cd׎{[G洶NW+sms8з'yW 3E@$tAL/ ED Ns*& kA:%̩ODSxzp oJ:Ȉ: ^d"@cg wXd-jliClva?x@^>/~tR pQ*M9 wGf5`6U\QbUCu |ܨ%F zdcb<$(8Ky=z| È= AӇէ(ޛ:J7)=:'p8!6T0FP;PShvjCˑ֮Mۻ= -E\A~ʉrAk_!=5=Ou)[ cPC6鮥GΟ*P y!`CF]{zEx3[]݂Ify!SeGOVh}NA27yP ɇ.—U$>hȴBVy/B}7jwv^!ged}< XjC ~&ng*rW3 Uy<ލ%qz݅A\LٹբXX" e T݉۳Zzej~j\Wp7}{*sZ3 B@i0Znןi!B5)Gi>iD"^cvӔ!6nڲqYhF->Ѷ1ֽ?A (q*Ftje sk:%[K:]UZPŃQdž^=S/_2PU#肑.M5ۭ{<>/)үXZOj}%B=`5Ź6_o69a$4_򜆨AW^<%'-P'?r4 Gdtt֦~vk@ato,!h2kOR%ެ_K2#Oѯ]@CUι=_|4a [ݚShxۑӡS13|9a؛$8_9jNxp_r Wm-}xmѷ}h8r4Ǯ\Zr=y*o?dȮ!MlW9U<|ڧ#9\# RœUGRAU*H 3Gūc?HGkcDHto|֔_9|ʏ9i:<;srۣi|j/?3Iz55 /#9cx)ijXXfQ]O?I8\z_)DcA&*Dnk5(q+ׁ|QPcEy;2 VkP2a 8DJgc^ۑQyzلXkĜj>G_Ƙ/nw5$j;nT˛,_Q]-&#U>~?mq*/У7 ی-ݿRIG [Sa}h{4w{C VzAB'chl ##M횵 =㙹e֗M~&5 "ST|c~4Y^(N_ծ*-Am_y,D/Вz-&%ЖPH.=ݭtE+l7!CG]N= 1/,: [:|'NqƠC٥6@(9l#yPAu ;/fV aZز}i,rΪsú'#gd.֠b&r^w#1=p/e6h!6y v H_AK>^&V{ӁRz ߽TШy||#~􉁌H pW,Ug>m$.S5S?[Oep:]$rwlo:< {>1JU~()`GWD M`u0pjͩ4d:ʲn$Ft~pe*s*Ft%μiB.1?: GuoQ<޺ 5|?k9 ?!p24/~󷪛uz6_[%fp_'!x^ Gى姷9 F?QU[kɔNB)Ut4QPb\Q@l!H $$83f&pr>ZzֳoJZД4 G<78m)}Tsl7}ۙ[R0;L̠?wwZ`>D=_ws=zO,Re-q4ms.C}ѾќuݵU4иkrNݰ`NKּ\6)bj270C3k&tJ_"7A}ӡ<=oݵy@d|l\Lw`-CS+~[R ?`uȟ٦w#7<~ w2[@ȱ&eQzb5nn6{}=}7ͱ|hEѪl>u$|{Ulq>?tЁniq.Zo=1ngN+:(岝AHp&eé߽Hݿ' Cd2 u] 8?Bu\?M`b阌~*tMz9.D]Ӈ{nRF+{s}%._"~UYkE_\cٷ !FO?P'yLY6|vSXcN:W&f_>Zg 䊗fZAߝeG4+(vixi:$hU7mߎS.`b6/ʹ7y|᧯9xB0ӳ^Kݿ_]NGK\`MFF<-96㤺Hdy D{m͡v<&|Ά)fP8j)xuldǩ+W?0u}ݣYV}N]-DŽ>?u#GhgpD"SR(#u.4 7 0+\:YnJϞ&gz3ˊ~ڤK| K﹟~OMɹROFSMf7p=jذW8eH G4dkxiHΝWkD*rwlMɢU}=NT#4q}Z_z>9`ƔY ~(u Ru∅o>({{-1*ų|k7zbɬvJtϛƫ)S=ހt{v3sWȳ{0獋:oPI^ mf.)(bi`,cS̻V$8͵ ^~A,/%q仫׬P[=qWez߇H:[xj%d naᶻU Z54 e[Pg&!ABdln_f9\7[h+pKBB#+oܵĴJ !JA"!W'ضoY#Bqeug- IDATK{cWbM}\ ':-x ri?9gC>Cz~sǩDm>?8sŁ<A]oQ'[c/."6Y2}ڴ 9ΝifڀKfחojҧۇ"֜~aIUƞj˅R-u(iDm -S]`zvL ˦j ͲCSw{!*J HQK)IIִ]ڷV[n-+abzŏ]\N; \H5+ɾMW{pu&!ˆJ'N|; n8# Q :D#b9+f4l02d-D^6H^"*,TqLXĆ7se"_ 8QDO0hBF|zY(ZAvc2'z-~s'b4XWɟ/x]vؾr7XR :y#jvmɨsy*٧~+k2iѢ1I4:u;N|_h>7=q;ViUTQz9m%Ӷfj{muD߶:v5n=wǫ Ȁ ?].8e73Wy":39}ܴ L>hBZideE;,`1?pݕmbvL-QW (ύ֫w+vn9=}6Wwoܬ7SUGi 1HPj)iTJ߶NC$*$ !}m[%ŷor]z ;:5i>-5Ȏ%´w|Rp2}hL}׃*5M2@Y9_++ftȗWrD;iq.}D„ gՍ'G*6:?ϜWV:A0k{Ċ=z5\1@w\oq\x}<'Ww̧W]WU ' 1q:D J%D]جq5Ĉ0K$"}( e Qeb~o#(e)`\Bgߋ/Zlh)L^n(sxxPk10Nv?C)p%;b ;>XZ#՚DB/LI?!GS[})踃Jr_rWy@Atkh $nE !nwU:0:'Vs]hpWtЭ6f?_0Fϥ맪ܝN1(Q I"U՛d =׾_լ@b!+Oϵ 뷸;*>qC-\*qiڋ>@ el Vm5]]Rc _\kh=i+]n}gWD8}ÆT̎G&fmCRjM|?冞_ޭET+_}X5W5}֓rc?ܶmD(֧l Zc}r_]8f k>/7mNQSH.f2*c1A @m{Reqmv)rz_|ﺒ^T.k/ϭ*C"'=Nw]i~@h1-Ys&6|Sse; *{W֌0U}J(<>HN|$K"B&2Pm/ ¿Ћ߼q o8qOhg<$ۆ0\Xon[‰;wg}[`[D=\|*LǗs㷢|$S^|/;wӫoQd95A:eHl*NsW~.WTO]~:> Ufɑ.>/m{T_Ԩ}7SS\D\c@D@DxᠲMo}{#P JzV11vi]7,Yw.i =Nj΍&׵j[M5*ҒU>Ns m.)236 a? D ,g8͕|'cp *-n,#;|'c6^O5 Tֿ^^k 4hOktMY`P٦֟`Tdx)E?io}#vQBhP? ,*=ū;:MsC:8p2fcFL)z:ZF a*j.S#92o|#Yk%suy˦DZ 4i(j Lr;R E.65)\;:d(,^OQ PQX5Qy+x0)͋/eU >,Z]k7ڢg\чˍSǃ۟/FL^Qyj™Շ cN馃 5Yzޑm| 2QpP 3dn>2}lB/1f߿J&}7ʬt;,8v8̄cnl>2}\B|.uIG2{cSx}&vE;=srjśFa1Ot^=oU1=F5gy{ٗYw*aֈZo/h㳿I[K/o~y U%4EF \w<~/"#ͨn3QXL=H)/WaĐ$SCtmvr;!mH0ľp UHm>rtn6:enXS]k^CO>zKnӟ\SZ$@vWOݵԽ=;O"w'Wo9|ֲ|􁥻3=&<~V6?{bX.$_lΣݱ@d}/T4]>jȨIof{)V+m8:Rgua,s@fs4UwvET؉ Ln89aP_<{b$")vDsMPK%EGl3ạKHUu-*yڋNЅNaٮl2:.+bp.\1*QY}iZԐz7$KY0APbx9 0\+}]>t^zZ9MtOGaZohцK\'  bWIHi2IJyfu3ަE3g*g#[3zU{vVO6^3sVWuھC}7{Qcݥ>3{R[zF Iuן{VrwQ'%sM?= W: I{U~%Nƚ;׮[yu^ =qzleҿz=ߠZv}݇?b_ vSa43଼sjߟ*Sgc_vYo[ɪ\M} Dp51\Xsϵ8@:"oͮ~Y<|B@u*-%*u/g㈪ u `)#c&Rqr^v*mP^nT5g]YWWٟIo~5'nP' xh-'4M~>w/{K[z| @Y[mWVL2Ӕjpr^|~ﮚ h3Aw??fY !Zsw_|nٶ[-͒9qH}(W[sYG 4ZxH7$jh}E̊q͛nDI @Z={N䃑M3LY 8O`s\.{Ȇ- aNgAsq'W&78k'5тǜdTÙh1 t`~H%tQ-P ;}y}<"A-$MnDSRQr) >7%|$ .ooƥQ6oHuG(n:C7?D<( Ђ2ǯ(9n&"-tQd0gU"L4X\׺[TsMmmΊoo=\ >uKY@)0ZBY¶Ka3UԉN" 2)MdڔsEEC{og WIP$sq8$P2[$n]jbDcS.^b9 {ʙ*Q !b'>M8UI?As&l_Ղ ):':!]&r[!.d)E$c%F-W<H٥i͢lEk9Ax$սU9TL0X/x$p7Q:^еm?>҄W6Dw7 "93^&7Xjp}[1-|I (nRn$eSHC| x2+R/Q }bTlF+hZD6 1O!JyHFP^.,s%0pk-}\>`&A 2O%rW#J") ҠvA%ALiLj e7G~] }sN\8B$g.F9" ;'T;V?h1`#s ?Qdill^E&P[32n$&eӅts[ IDATOa?+M3Jʴ!ftcuA 2dT1aSK*rO*d(R$.ĿC$Uߠ\d%u\99/R 9H"HT@A!31 A,6*mADD>$! 7#9r7 fG^EY5U^G#$HYv{ܨe"LE_5"CDə-FP1An6Q D>]GGD%Qz(/D.B\M~P]ʥq|Baxia)o{.COh%踿]#/B6rĮi!PmCmHAK 6(5$lB2ZIDN4#{q "$Dr VQ!^R C$/ʮx3/NT[\Eߜ(Av %˓iAKzI\G$6Kq+?ޏĕ!$9R0G z{ o\erkA@fV[~1bʸ aMM^LNHJxOJ` oKM$nRew<QL#BEw\is T" ڥ0/.<|pWi(LŠvQxY!cǠ$RbT 7z+iJPN=Ύ Z>THҷUQ{AyC^9d\m@8/ePf0H" ~& Av`7rKpZ7 ?3 uGc_HG"•1'Uݬx RP& r=w>3v!HBR$|R>+Q#5b'^HMEVio>6A3SD#[uҪ*u6%-xEYDtݹFeqxX.& vd+؈YO:C2M_ ΐ_0 (xo$|7Gb[`め_DCң'J?F€̺ , $٥_-A WbS*'q hWB5p)]g=ϷU~e b(q$"l5H׃pT+Sp%yf7$+CW_mPS"6}b":iMe;O#+[4oִ[c %//|NQu:.<Ai[DXxqϻQ^O(q JO~Lk~M+(u PHr@%R(bOa@hdO+ڌ%*O6~:.QeP=L⡖_*Eq 6ۆ ;!e0/}@v*4n14(,_< \a[Ȝ P: JW0dWm,@ s Zyц~6G֙@ i%h ЧA$bx,lkuC`w<̊Ȕ 430#;7(uS{ԉ_sw;ΖbFW>{a93 Ԅ>cl>pL8qÑ-yjJF v|GZ ǼԦ[;'pη߫#SܙQTŎ^]*t:OV>_`_gH:֭p6塙/=ֿEYu8mKNԥE^sw;Ζ9*q~k޷Է[-io_Hvd/`+Q3Gj{x*qW?I$}-W P^BJ.[D>߇XrR6+PI쇡_GN$P RDP/DX"(@QR>dڟQ"tOl! )q T &p<tDII֏.h,F h Q$#0oe{J`y)h(-"JtS$2됉2a5X&8lͩ8F&Vtž} O ~gPr}wva ]i9X3N ,Hs ];i_ѝwꬹKvĞm{CRl] N(? Vj"-1T=:y|NO{y)ٮ|g0~Ũq+vyeE+W$Dr|bUFP q]}ns W!fqFem=VS| }gI*Q LqR$?#]Pɽyw\#*јQX A1G{M-;bJA T Q vJHi!6tP5 &6!.(kJcRvėu|-*>>qPt¶ºj!j7ظ%vL;#y$j7񉃢XAr9Un(1QBX|^/VFՃouCnKafg\{ouCN8݅vݜdf"i׿8 @޽$yuWvm淺oJZT" 7g[?VN; g==z'>8_޷W%0Ж?]#wۙSj}9gKⶸӟسM& 1Ti^.2-M}G;ä/?j/Xw-~YT Q2`hjo]ʓ̿ {72}ǿEJ>VZiwotVWS-Ǫ*??t pd뮁_w=[w3\{~)Ÿ~/9%اom…+ ԨG>#4 9G SM5l<'xۧ~}|?M` 1g/] g'ɰ矛ԧq8j z޾.ּ\ay蔇[F15׿?J\ꡈn1?=_ͽ*xց o?ktvۅv`Yn :_,y aX(z)2UɎ/;W뿾qhc : &nJBZ,0hm)~i#yd>0jKJs?8mON5~ȦJƙћ"m &QGV!a&R"[ KEt _> !=$l' XyU;Ɋt騂 B&AՑw(DG=BEm}Jw#e`" '-T>rODnD:ui!LŇSe-(' Tj))mIS U 1U:p <޳H 2 ,7:Vv*nG<22! ; ^hw-?QӉ>;K G8zΫtNWMN(„hns==z6lس(ud?Hr}fq: 3=-EM;|\!u=7 ஼qӪQ{U76ܒE;D33J> /|%iufMm'b=)O-)t?T#x>\pńųxs˷kĒYCA]egyol2eѬ0>{zfyvQ8o\ԙ/%y)s<\ d9ڦ7.c&=Ѣ}^+F[(\ IޗkV<-N`R4ު$j5NRCTJ\,Dû¥u MěnXzlݦkW.9JM@j7khg׫Md n$n[۪ct}V6n2Q]|WZjGQ xШ*,+ GАҦ=' e̼#Y'V-cFNv[6{Λilp}fs8g=1oY >=Cf}(N `= o7=3sqZ]ϧ5а?@yɝ;kKmU܈ +S8,u(ےM_OAE)IAC I =m"VǛDIOX@I2wډ:X:.ֿ^VEwupuDb\Vnݾeێf4kMFz#c6$ uǺZO̽<3fl_r>Ix ">@ݕUM[7}4'.0PVڢ.U0T3?nhͯeM&-ZHZe>7=q;Vi:i^4ymݕ~5{h[Sq;~\bqZofdV#:Ogs 2{}nZ>deW<+۶]m0}w|lδݒt(e#VAVquVYmPn}aq`uYe8/P'6 1(EwG hh7Uζ\Z¸>BεSgDnbBcIWǩUqfm\c5j?&(P~Zsfw^crsPP>*.!#B?Qt#[b -Fs姨*")g^Sa,<7qRVY {%.ʽw]҂Kk9K4C{>v݈R{'$&w\W˫~b%Sz/K|`&%M2@Y99;敕2󫊏.u$5Jٹ?(lӡ17o#BCR*U!"ʓ+K_Sz5W.SCAb"2^;о8PcCٓ%Oȅ%o!oS<02Qj;rX2*T%1\fv!DY0LPP+#z--h~2t\_FߔprD=դ egϫe)^/z@jHytOOQ!,P@i17_;Q|+jc5}YD?"]QL\-jOmgӠ\eV-0gq_o緐Goa/}!&2sXͯoRG⌳'OJ\)?qlĂ>r Dt{vݑ>)g=e_e_C ع];C5\dW]Y:!D'MjQu(L0a!B+k,E9IK7A0S{6R;֜G]TX(e] {;\B9Kg*.juбţFr˵AtDm\W_}b7?^t̕:^K6LDB[e{hQ{z= D+uÞ7ݱCHO$NaSt2ާ}Dzzk~iՃ61w\sOs݈<*f7U~,n94IEWT׉Wڎ*89đww_߾߾yc|G{ Uʻ6(knPP~{7e7\Q]'a^yV6J󿭺XNVgPSAXv:NȬ3]n)$:qUUpmv-2D}Z ܫ5 (Gw="DEߜ}-}Vuc=M)3ȓ/N/i8DwE;.D乬CW"oLCW̩A^Ä!A6 5 /[8\B܋Pt|_R@tPlAk_#ȣK}qINdd^H`2tkh$:f'{ioA{Z +.;[x}E=(qFF?isi# C[=dvk1B;n* B[OZ2ˍ^ͳ&ƕ'jjJjsb]ΚJ#({[a}rHJQZ|SKskUA֏.ڷ-'7lK%.M{Al IDAT ezIInhIK^rco6~<ac~y?fk/[~@۶,V7IGKoU~*gP"&X~$Я*X4ũ5?XXXye.vRLYBi ;R _жiK w^Nϻޓ|`B]WVo4K ߰%y._GM _@Զa׉',!#"hmd:R'@+xzDXa(djWȘnJ3legV?]m~Ѵ#DXUX}7i[{Zh^KDXO9"nv/}SrD^4Ua}I}6mYAP' |Jԩ6m @\F`&y[>]:WlJԩu; R!Jkp_N8\zݷ?3-2M:ǩ Ŧ&kS"5mڴj,(2Y+ 1]QS\TaXu?zٻd|VK0SNMޫZXB}T"GŽ ,i(j ʧzb…AJTYpp 3|e؄_]Mi^r1na9[{EBRއoMTՆnTtxy;ZO6tOܶe+a4SvlsxjJq.P6"~m~zOq(nn:BXT'j<"++Y+o:2[OSjiwxncLι9>BwT'z?ݕO8 66%9L'&' I8w?;Y$9 U>bS2jxPN^ՁoNl#?]p[*K==Kά:YP' ~}QNMmҔq)e޳P7}g旧 Vdhj ȠF%}(*瀳 M<]K( A"MKNrQ@$!֢,StRw94c&w3]plh۷})}/Ln3+/Tyh'=+͏|hC7T!3IPDuN||YcvE󮶺;nW aqbw@prjbZuvET؉ /d܅ 3ịKLUy-g:KD& Gi)jj=7qh.O2-2:#:ѸU~_N=A$*PJ%yύu(Uù@(qhG;aGuD- 9S<"a 9zN k/[ux7R\-+[(,!D c$~/D6#0"9$r? QUЀ~XVg3B \W{Y|^%۲_w枼8GF8$;׷00Ӈ\wo=cgwd\Ewv6Nlz /;|'\jW\-1]f?5YaأcY'޺gupE *|t鮾ʃ5]=^D,|76Ԉ#Zlqe W$]?Q h](~Mmh"QHhP!0ok L*11:D}|u6?3E8xSSeFZO˚T_]`# k9yiyt2$ Bt4#"ؙ$I+7R#M'eɶ!gKj-Y  s =ث`ZksB~Z1Td0joNܥ`z*BnXU`7Vz3o@绵+7(v.>WP7`ߣ:T8dTMmV77ѲEURf*VMQiY7(5h]LIH'TX :hSH`@E@2'IFqF4rϿSL(Hz=ԅ5`\aQ&WCzml<{L;AQ~@z, P =b4 >q>f$}EY(B\$-ֆ,3' p4s Yg@I7Eb@4 6 Z:.!dKy&/G 4;Q [u0ǭJAHU`޶FkzЋA}h om3k]%IPC5Ub@&" XpK%Ҩ|ۉ*AQTIN47 pXR1I薓$2'G~c$2G&cR3ܸhֱ zp2lpYތ՗MD kCKE23Ȉg]EWڟO˗EdF\_& n> 6 N.45d @&aߑtzD&X D !Kb Ќ ` ,bzXQ[̣d6i^71Pbߊ:<q(/h9=K6zz+@o|^X[~sMC_?S F?)mYe&vG ç/ *f*kSB\r:ɛ>a7+҂'!fK2: _F1 9f0̬Ul5]242)=Jb x+BSju,06oS,# ML O϶-N~#8:hhH4Poq[Ȕ¨~7{/ dVӷhjnnZ)7EPP0LPA_@x-mHv`T!/cP4[o:>[r@>߻ʿˆ(I #%#4(Ԅ^_VT!Trj|tカbSd* l9E|` n?-]jg}* WP )Eo^>%C:-\9Ӫ|d@H>a?O}mb/Z>A7}sEQo.ՍsofLVGGjײ~-k ˕."15gۼzjd%cW˺il͑C^[1~s7_q=qԛKF0g\eJ]&h9@2q7ΔW ~f{u6AP }0s+lZu+2!֐ؐN?$܂V_",Gxb{>(,{uZicݔ5׳v?]<gDq^IZWev=u {g$ A>]Q7:5Bec[Eo=`l/e^723o`ڒ= N?eLG0Zg> HD!պ-~ko=m9PyN>|C!7E!B@I_J\;l劌H{o!md譾ۖ-Gt4clkUS ukwV2EnsU]ڷxF)~/.L}t!]bP5HuM{g3t'r][o -xg<.OP6fqP mPJ5-㳆9v.;i'g=wynS@ekKo䰟X\ 諿E"=:E?ʏ=qSWlykAaSӟ.\9 %9opU~^ТKp-^ "0d~[ZJ&̞tIo<5_Ŗ% SfO\dwitu Ğc~Yy)kl1>1kc.Ig=y M sEVub֪FU0 aS3da~Og.F.(tlhOgxL^yl]R~q P خŞov!@ŕ=?QeizmmcvB\j+1&.>æ+凬_S&AəUP1]Bʝ|56GP?:~[8 ߑpɑS^]U9ݽ?2]TMN6ayo=w姻L? hpl?Qk[:oK5&)- }k ¿1D礐Ey?w6GdDTT* nop8Q~G%R>~, Wt@ߤFk_>ӗ[vk//gzۑ v>|b<ٷͪ7{]s7 {[6(qcNlG&ЭK ZN_% ޞÂmg8g4؞ +bF.=R,Z8oK 0;ⓛ.Mn2ޞ U}wݖyzs12tpّ=\m Vmpiլ^8h9A}_?k͊ ݌˜~I_bΩg,;RADHG: F*;Uѵrp qnEK{A+.lIaN3nƒ>,.1ەDD6CVIYH< k1g)cgy|4 2ލꦍK{9Ĕl @K`VTS/K!] m~IQL|'֥O-1{y}^ޘw9<̖zyWH.H HQ5w ;OOD&L:.E*)&;f !٠ӕ-˞PEۻO1خSe xnͦ/Rּ9Q6 ܚMSּ5^1MMŮ='v raPBk#%9:^t[ǚx6TtEW\GK1Ҧ7w_WwQ/4 t$v꧌Mtl\Gyn!%vW~pv s4l鼇'P}OxkFOU'p|0{ y/nxaӢٳggt CZM`M/} i-&̟&x5=:"\ӳg?Dj)o}eʃzwgza͏׻~қHP(zdnz~S 7̃mCQ0m>ҠUS5@@+[$jA#er䶉dBZ MRKD*8u"E0uC$- @yN@wK-J\.VDh&L^d FRP].)jSۭs`Ġ.ė8U@,ovU2י?\$!"po]~*.<}WzHM`5 ӥAmC#0 ѠI.lثW``^enݣވQ6 6)SV$nKJEƷ Ȳ< ‡-CyhhSkP2wo~iEɭetx( ߐy1@Ĺ~.+Jp 7u:1HMSǓ07ᅡX P]Xd U6tş8!;ux ϕ͟XK?! Mz/y]y+aet5 ꥞1;l|Y]/^*uIH1起Bc;9=}q2nSU<׵CkN2E`wUoϺ>?_"q+?ug+[ROfg_|!?.u5A QؘSͨkrиY]&u-ҡ^ j6P gյ3Nm:y[6VCs=s}`ÈԲ)$2* Q5Eb̕UzbCʉ豋V}3Ģ.j14?,"DBeaUtgWZЛ}.1r5OU^|^P>uCh:\?%e|6H͉!?o86| L!YEEdϼkOUSX!esĹFLEU9"Z]/'3 6G@fӝz&D A5s9Gn[~q@-!ˋKՁ˹Ƕ,y@Hm]ō??lYyW]ե>py~Hֲ_\ jz{wǙ篪,7;lŁ|һg7qfC9~ߐoPۛ;@kֽ^9Aziv1DtippˬoggAhաMͫ,nr*ȜM30Z$fx-QП $XʏjXhB_^jgsYeې%D᭱>jZ{xkuum7UQ.AJH+02f">g1==?)}k5%zZո+//p-"$:HZ(*e"gAZ05Dn^]3@av}?׷u_}[{3t*;$ێU xa7t@:a%r0۱*,sQM U/#E=r摓&jUImdIo\zP8*a*aUa6WM~4jl? (?TU.!ujNWlJ?P<& `e锕L1LOтf8d"&B1}gS3-{܈+Di5+k -"djZs_cY4)&x< Uj!]ߖK?**5ۮp׋wvqQe5F*x ^]%=޶o2o!=GkD[6*t!Ƕ:\ܫ^ uhP5e<.e<.ENş,7,.eAe8[߿o{srzH]bK}gk2mvNۻH_:7i "墣̈́׏^)s:.havWHLa#W4R>]y擱 .U#:ʅG[ ٛŷS^U~lc{si_ z:j\QThGߟ<7@P!PQT&.KK3gsѕ EnY.V>dQRSX"}(dTht>_Du+_?Sڶ_ڽnꏦ F[7tEx;e+{¿--~ALco'6rg<׏\x 3n  ݦ` U9 %媳)FdPQ DA1yÀ Iï10$k_QgePUŒbe95Mx#quHv9Ӷf;]"jیBuSLz,ڦ3k s184Pɴ͞g ٢[5 ):TV%[HTLLC.Wy{tf!E3'm4|zw:yM͟?E)Rc7,c#A(Uubp.mqu3+Tx濞HO9aMY̶W̯]5` '&fcf]/۾X_!%/ C TjmX5.5 ƚE76 E.@n6t:~U>^vuj*59[otK('Ms'l\N%[xlmA2dyHM2Zx?I{GrDbbd|콏O21&qAc5 ;ոq;m͡=僪sNDucRݨ K\uvlmG lwzbO߻Ǯ븽` IDAT&2bt`墪S+[?9.^}J7D\}VhM4n0:A.8w^XwwkzGsywP`~&+Ldbh3^`0T9IKmwf:6haФqWvͪ1{Zg4 L@D↷U 6b%#=tDРVB _ېKX-;_>v 8^3~o/W;Ahs5 ƿ$EBv7zJBK]Zau zͭU%'oJ3oZ\ ?^u|[i@Ml;~S : dh]Kx}_jE.aBMƖ%?:vm?<7 $>%2 jJJC TŃ_"|~>HtUSb-o|4³|㫋U0ЂŬ~@1+ S*nMyoO,.k8qG؜g?׾nڴBEūO{mg?@U3-(>ВՓ+JsO~`kXqG+v<쥃k}%[8vɺiS}k Whq4c $\YMו~/zƤo|d%ŢyDZ{㐠*ޏ^ߒVsȎ+绷ߋ1?ZM 5wo=cz}n˪Q5nܳ+\奙UoyM_׿X-:$B~`=h slQr|/yYNg A~>(:w]1W 4C ^x'Wd~vg*J?tW_rV|{HT/;Q} )ܽ\%1\ Q9}򭁞YWi @ֆ'|w ]y{g|n@H?M VrJ*ϭeYCcf,7%ح(Ӫ[kՅJՀ/?ɓy,3맏[<@vfٮv3^];(}鮾 Vp0ekӗ}: +7a1:`G"OƼȓ7/lB$KJC:B 6zz%EOr1 _Ѳ5@ )WIv~1Sӹ#)rgiל/JW0;е5.n\_ wSoG<ȅe@?B nVF!Pm}2Iis8-_G3i) Lc(co9{$L_P{NpLW-+Q(r,wab/Qpv4J1qwumՀY?M{I`V37 q h'y[b 'p lL>XlF$nF&,}*S tFgj#P( NߛBo?]j_bAOm\63oCCcK"w;>&,o`x1Aelh9~c[e x0xZ>'!eMB-$"sCs?ƾbهrGTŒ#K`h)O/VKQk9f,(OtYP䍮$)eyfHDf7{sFeYveo#OTenHd( %{Hj-&_A}5(M^@PuK ' mxej~邆vWILGt竨@u߫vknGjNPY_˕ԕF-~vԳ"BOK(fEB&Ϗ!mը9 ߘLUuL \߲T諯.Y(4ӧ1W69vM%[7ͨ"&Al>QIP&pGTu!KJOVBJ3['_^ }A7qu1d*Wi(C <[0hz2ke3(@iʇB.E6Lt@:4h>Au "%O{e~f3J-Q]k/ ,3[5ZH""%N nwd=Q$ $ITaߟ~9[Pr+?,N!$I| }RtpV3{ %ᆪ`. YQ:_]ĠzE0 ( DR\F֤$0DTT5oFD "(rcQ[wqvhv#U;>b@`Oǖ SM^b B`١Cj4Q#Sd;\B㉵XF`VMrkiD m?ᙙGBM?߭%Eq HLsoR,+F,pxTX@hqM"?gfX %vuh8hIĔE,|["+F|G0˖0T3D#^iC߿jeO3'b8^`0cd8u*ǑбE[E!25 jSF;"Iv(/dIe k{ ϡ#!0IBI#N[qd/yS]EH s~ɗ$߁9qE3ȳښϾŃI_QФL(D`ed%*6..z.՚/J%9)cꅋMB4rۑVy#,ՄheI EHE~OSu"GF&dϡQ[4 3sYP^F &{^~2qSXqMk2Y3fLž1`_OCdx>f&ʁyUjOV1r#bmeg\ok3v07Cb;k׈tNJ9 bdFE0UȉW9nHD7rDDS d}#25 fҶ47Ԑ 2!'|I)2utu=Qi6?<,2gl΃"Os9 'Ј r( t?z,?{M!݈>ղLBE2´#޿43{t"S564YTrnճę Ś%i_n,3NY^>Kgv0*'"֋lbvsa$q2ʹ''t\f $<L7&? @yD]/ZJpnhkt&I{ĘrTA=xK yhLx?2IGJBP!ŗ0b#ygr'N僊Qz'Ql(T0eY^^[ FႳ G(119 j l/Fv"/͏ d&Bp7!dmD1,A}ad4LF $?p05,iq&"S>l; ϳ!$bmI`S<0qu~kȺD}6y$=#7M&ݘSb XIZkO3TLㆹ$m6Y҈IuV5tw8f`m(%=Idhi':}ȗZ-$Zq DRyڝϨ6 LfL 24]41T= ≔7CXb}㡃c681+"}荺4F0)&}a Co6tN*d!!;dx%S3}QB %Iz eV(j '0,:פkLmByxF o:''{㼑g%ڍFۮsfaqC5O+D \-LcLE#Y^gHW `-X(uBҟ x'RQ삐%F˶5w̰5` qlI2]4_Mp=d b% 4ifVYZ@e重f2@:gW.44bflPtʲaEҩ*>~٬ ^J5-[Y+DwQ9o\K`Ni5+H XYBV[Q=lTekO .30ŴjV9|ҰCTO2.ծ"_ҪԗXX=<=d"7*i 1zN%7X麕Uxn(!j%S3E-]⡠h$K9W"acE4/GBthЬt_ySUdx̜6_c7o+O_?OoDD}Q&1#6X˘(Y4Sg~Xfz̲kppiGE T;^oM nf809MlteuiQ@[NM9 ؁|\RPţl&8Tm .ΫШl Jw.zw|Cq˧uu6AP/W~u0xEK]&ӫEb jy?!VLhyN֒Qr6̙ #y؃czkY?–ɅyzIQ퇏NbCr͗44JC^YФ =fEcцm4qZMi))nat/n`7S*j66CT׈*y{X)2 8$(z}Ae l@; ۣedegͤVwM4[8OWDeYvnEim7{I#^{gmv`aX(v_UO/8ZtUU1@B [܈Eo=`޶l'덺a&-1cm;4bu`ΘgdXD"O  I™2b*5%| _XoPcHq#/W4/ƶSKbJV]qMSsKL#bgFORؤۡYB1㇖WoکL(O;u: p~Jrџ=s6Hi|t Ҿ >?>ӊy.If>9K/sP?Cv~9vg 5\oL~KXKDPwmKo躌ߥ}ЅmK˗{ygo\mthxהd$w@!< [Wӄh**7Ī@re٭TSK$ s`%16HQMlRc{ЧfւT8aK2~E«Up%G{#rjj' yjfo,H;=̅d9\^ɸߥ}şm/' 榤ՐV'f s\>w%9iٳM{aw?MKV`lV3/rϟr# Qpm]ǵ-sirO_r OM8sL'>; ̊KT琍05S#w7٤  |O@A׼#;gXAD$N8#Iu@;Cd$DI l2K~Ⳍ{$!\nYv˲ViKc^'5(lo9n}H3 ށ2RXh)霒rY@pbϥ5}D.6"FȘ͝ZmӚC8" ##Bhk %Ca:aHo =(b,EsEϼP%RFG ,QFN갰$6!/h+!BPpv?8Aw?*nլJf\(vREG ѸJ_WqCѩO^'{LؼHf!Aᮟ2OhcknM-ʇg/W%yMr}pܵ{܎M>tZ֖NwkS@0H^9_.n=zAl\O4.g<=wlGW&Tvbs/gzM9SlL<EoV9g+o]69v᪻o(CW?]u37U-xz}5B.tN3!x~h˻&Mңi_7|r 񀇧03ܲӝ*՝d)Gߞ)]??]봽GFrfdӑ~7SOv] ?3Č𮶮 nTd8g;.з 6=DfOݾ~rTHB]%xAРI?.~~KMڑr3.{pd,)rǹkc@>S\ݲ72-ej6K2y4@?,ƾZ {.sQL^/ٻ-'MEj 6EHzV gnt`ߤ}~"yB\Ry+vxC?XwR1_}}ėC=RM 0>+MYG)zxB+*^uLqzM=]x K}>i!!!eݲ!nԠNs>Vլ7d IDATknPEz@E)ݽ?2]3sMGv;wWe4r 饗+r,fZ4iHk~QJj!L{G wљ@!S۳a8JN;[k얽6A"@D.$٢n7/}/E$1Y:]F.;RЖwM}R@r48u}cyƟ|r )jG\zQ'.OB\ E +)&РzU ew\|kY|)خ5هܥA@`Bq'gհͦQ NܯKxљ Z+75oQ~zeDfgVR`]RPfCjzM_/gA@e<]O ߳tPi, 7m:~zHr$v%:?i{h--V͛2qǴ @ï=yWW@.nzOgt CZN`/_s)i-&<`0Œ#}~G<ϭ9`چH@ߊL}'ݙ^yGD_ vL4aRTU=3;3sb#䜣HI䠂"Y@@QP@TD%QAHFP2KfsqBtgs ݧOשS筷ޚ,c9,/7A1ZO?ūmbyr+FΣFș![oAR  ~mP/;}g^TwrG tK- 9o~^ T<^뀜gmYeW3zC v6?;S7:uywvFVS05t~F u7x"߼Z. Pz)0V +^|R O;9bN~eo-7: I܆IըQй c'=[:O%ՐdfȸZDX"<Ȳx@M%|P?ج` /ԙ!ߋmkϭV.C1QqO_bd;ޠ}RgIME }_l[keR!N9]e";_  //_t!a$*$qK$B_k;@͓ڠ-XcI5a BLZ4i~wKkîK .2 J7d7~q徔ZLÕp6#;.8` N:0qCoհ^I*7o,;#b+K@Z\#:H(}aA1ۄz0SnxE9v9E%i-nWJ25<(9NnW! v6q~Ԡ;:y@ݻNZBRΰ'Xӕ r8>38'R(= FI(X *B(k{6[ʪEZ @e~(ۿb<$2 =#P"M5(DT>!Z ̋F~\Q95DOrI>1ۣ)ܓy2ŮZ'J+N2=0:҈O*y5T \9y{ f jl? fh.يZW&ˠv>f hL'^W<59.\w(ܺu|vҤ}/\dV}rm-dGʪu<&̈́ G>~gW8lL9b9)OFy9xՌ}YBW̖~8iƈYؒs߻IgH_hHM,Vۉl/TDStʻvɊBH;Y5թ&Ie/o5L Ul)-,*VFg5~Pz h3qÑOߨRG&ԹϙN~ Ԕ缑`ȁ=SEN'A!J'0gEaƿ̈́9#G>~1[rnTN=̣u)ݮvHپ(PֿY%P咊YEi%;8JcWC4*(=YQf1?J{^!V{U5f뭊`MamKKl`(|'#N=pKϗqf[mV8X+ z^V%)CR?(bcTq;N;i)2JX$Q +$ SҠ)Ͳ}s}tgsM[Y7^9sZE "p.] ~5}R2&wOZ#12L )K,ɪ~\oZ lE^% CE.߫..} : AʂUT"rn:#HƚKEPGU;e'䨠>cT!rPY~ݖ_5ڲ-d4!Wҕh9xr&\_Ҏ3Ϩ̇YxIGY VWG˗&^AɜkKM *F+YE̻_#Zzu &8E}ܰ;Rl1uVDRoFNHj bʠ*@s4ޣQh+tj>uet1/ޟ~pGM-E>6z tlNYPh P'r_ AGRjɯp"b;kn36 vgWr{9f~5DB'ש<{lFȈV@/o/W{CUq1 )%L1* Fd8͛;ےHR`o*)aH͵ s9‚N| b%OP9P=5W7}!N|jdž9z[s3 ` 2'P?ڌlh/Ȯ`~hrrQZ RyعYz Mx\MSaPN~GeՍWč P\h%""ʸWl,p=&E'9"KjXwoє8tۖ|g u%q 8oun]Ow//'VLDq ͟;zt1hJ6Nm\ª3)X{_~Ε:xQ"vi}]U`'Dz_vf9n~hopT:UݼZ`Zv%|#I|ͤX|75:09ȣXdy2hNC [M d&IJm{\S(PDr~TDi JxԬ[ ?R2?(zR R-)! (J(N;'r @R b`qQ]_7  QSVy9lJl˺tQo֟u܈&| JgB[Aʷ$vDq;c>][<59aMݣwQ*{\`J=(|%Ev\Ȅ&,v?!jϿX676&7^ߥUFz$ۍsk=3}de KL`@cplBbbTA݅/\u$'61111!65O!Y 322Z] 0"iH:o MLH 01$.~BtImaVVVfVVfVVoVffVV~Xsr Y]HɯؿsLnhqI-0]ykԨuޜdqQ!ŧ5#Þ{RQ!mPإ&NhcfK8ǒs(S6!A^HQk k4Hh5f`zE e^u4C\htۙ}x,ɸqO'ED41v|s}=q;C|n?3ž8uL\AFDd;a@ gWc$Q1C, 3Sf8ullAG?au#ڥCuBƐCb>G^`Fׄ#Pآ[v\FLPxz! Eٙb, HP#zy$7.~bBB\ApolbbbBBl Cy;\lIK8~Rd%RBwl mýcҭ P\`hq˜ ]jRp7{%*N\{%f5pfӯxoo.uJsS8N(IVb7ZDŽ74 z;(\ĚyߞT6 Ry6OCbDdlNȈ4."(~-|+ҊK7t:D`fX,vMX\[Nw'?ݢ~|=}F&qٶ8,1D ZvDpa?%5{IO5 Oh3S׻QdDÞ&Sj#pa?% "w5ÓjŰV/UܔP#MG0;q:pY4&C" P )ZK_;r" vFsHYRaJ5,mJ?;pŀZe+g 7׋kN͟ϟa%%BYhަxG]-Pya'[nTz[9tO>SE׶~sn+7MȻǡ-qJQk$囵f6{3seǵb@oot۴ic;Evͤ7XW+>ImXu0&<򱘌@a-wTvZ8. rrbF"9G>2x+^7:i%4b_\eo@$(O /"_iW +~~d/9CiJJ)[+3B{~N@|[+IZթ?~{Wt6TqEF4(" -+gY>-|`M$Jӷ{5W=vJ*Yn60޺hiۭ¿N2%5*mOI]N晵8kzDHp\(:Ui)+0Z@ʻжOI!;)MٰY^5ܯu?7f}?ohsW IDAT+5)c\72nu@b}ia ȸ{l;ngg{JY^|o?c+}|aEVޅED oZ炻5ȏc8itw\b9j۴NsU-g>}2eAiY:C£ĚDZ̪$Rj[:ݞ(%z!riz~HJ-J:,hsk"~H56:N] >S7EiNz@5Y5Q"m؈ZriSt# ӺTB(Һ7-"5 Ӧ R jb 'fÕ ;JS-W|Ai O:oH-WfbfY/Umݺb#2;(ujfAБP79QZ""W)!"J@8Ŏ* kG*̣ D*~p5 {E #*dߴ\҆疕nFE!ҥ6MTS{Mj#؄x]Hۢr=q]y~8Maw8<xP"r#I7˚L]7/b;)sK2'5: &~1u_BV4"#j#8zxǢ_h-Z6Y}V@wDSgH PJ{gU'yF]u皨Jj/U QJ]e5zOMďҷ+'Qf("=AdL3ߪ.g+ AiDe!e~[x^.r䘇yDp>d!S2.2ۓp\ ~b׊~KtxΡV>UK$PRo<MEbz'!:K#8R$&|gJќ_EvB,$=g֚'8Q{viB`~(hE z|T5=U,X¨ (hGzĠN8_Qj~#2 (hF@Ǝr=z]]&Bd^ŇbP<*O%u ݦ#'nG˗j9I aX4EAdA0H“Rq(I< 64(H=(rI{PY =N:T-ʜ M = m+*46iJLЃXCIJݡh#\E) @ȳ.aUwU\uPmcIʒ>4BCt9vCщj+(6B W 5)Q-|;0)$]Fg%( {r=JI)^'f9 bښ}` QUV1XB"D!AV #9BITG8a%X]G*N󺩈R!};e#ϔ*S2-GgY#A\%"Xl&r-"94trBڹR+{-8s#(ΈD. /B%6^j5u5 X-:qD@{) FAvlDi /*;!blS8J))tײ>_f ]ĮKq\NDBJ$HW=W"FKI&AF-Z"d #ɕhuD%ФH-Ż GAQl"ZI"Դg.xn={Ǯ?/zʧC ta?ٲfxεۡ{?j@7Y-YBppem6b\J$G$Qbϴ^Z;!&o?gډ!zԧ^=gޡ\fhN6eLq5ox-bΟ7VqϏiYT] j=|s4 fjn=)6p;bzNzŧlwfׅ<9icy=3p."1yJzCZOY+P{ п_x"흮v@ M `XY6h!7'O ²v~|MkU2}y>h-LUkfRFut}v>ϦqFFæޒeuk;먤bz}yT&^lWoT>rBϦ~z(UbTPUq.C,EPE2cv^ѯ}@8Q(?JЧޞ1s>r1kƬG+9̢*mٛXtfc_ojuKf&Dv[fXufc븾,UI(8luU9.qǏt}xd9us Z=@Lf{ɬ<ym 4w4%1%eQLQ䀢?~O>A|k;}Փ>l{˒{7_Cg_lK]"=;9.])T#2?o^5YiX\Nqty(: !4a$kliƝoI `+zEt9]Xaŧy3pbާxG=my y\Dh͈(~s0wHnN3Xx!0|4iH;'wou4'}e *?VCaǿ:sz6}Pŵ4Zͻ/))Oxi#Z2YV;IZbFNMV^dzc{--tdoתb|dU P!Q׸> o_ CL}꾽b|:s`7Ԕ؝<~t >7:DÆX:H֖CO+ЮGV@9At=G-i_2myUd?|Zm@nmQFƯp@^c~~ȩҞoQq m OUzUs@#z0\)s]p pl;oww=i6sW>-Y7~[ThjvUݿV/q׿\l̷Csy?V" >A=MKŬhпݳ= ky 3_"ؚq϶>5lF<:p=oFyO; hNkumj374h}{C:4uF{p%LGDs
Udr!_zuF8ϝ_9_`gG[w<8}ᙊh96|wDž5Cx[' g۷'++&9?L|ys簀āӦ>-/T 1ՋoO<؞u /?{ud16mA!욷?w|BfWo|@Q=C}j *qb~^RrKd78#ց67PphHrz^_EUqEx(3"o=O@DOLc$JlqՓlcDJ@D2gL~yU%Q\? %4HC2f, bͺt2SzFctU7.g  cnt;,Zy))رKz]:Bʥ<;5'ӤR z:6ٹksG ҡdMB,il@lEV7UZ[uÿazf-2ԓ}^|֭ph=(6hwU7#$ /Su͚Ϸԁ܌~-GoWU}Q"Ү SV9wOyX(Η!\.AF'ef9g; "Gٴoj$hfΚR$uT^뎦[\c5i~\xK'Xvha3 r^KvzcuYSyQz"?g|; cF$t'"I y P;s^F5 +x":BfX%od, zeW.3P(!RJ>a[1OԒzs^]G%fm@ 7/Hi=*>S!Э-AhQyOFܶc׶O&z7҅ XkMhhGׂV=?26txwr9&Ƥ(_%ETk]d/ֵk>X7oc/]sR?bۚs^ܻ,Ywh=NjEXC l6xX9hXN1szU)O[֜˧ QW!Iv&5 ?GSͩv%y`M?Sf?t-"1Pt|˾֚Ԕ[%qqgAݮ6vdR3XRgP~l&w[zAjIo)T“v+;]ե A!7 IDAT5ŵ}rh_\=d9Ÿ|!?'sd'V.psf=w]fKVq)BuNZtLV}M>\ovA h~Ii+W1E.Јd{qޔ'y)w_A}* !`߿9u׮Srsu{L-Mv?"cdQf:s» %,J%~'D@ nxTX~O-?a73rӣȞ"ڋ RrTzy$/"??(/#G+3@Soѯ%{q/sl{ìǗ~塩IpAߖ6ݰح{w0^~|%#Pyij9!RWY+5=(=b%*BydYSa`G˖!Qor!O7P/Jv@'FOB/Wj5%y{*kMOQB*Ue06[ge7w%(D&*q ֎P~:9Ӊ1OMyy_/[rn{w};<;q[>.*h8ܔQo^v5rPަ iNZ-X3<}Â5Km/!bs.V}rl͕&iɈ67dJkCܗ>(XozG~J#f^ wAd'Z f[_!;xH2༄)B;Z0Uv'#qd?)շ_aP">I'OڹAP%l͓{EvaAXx)φւEl,p7@j[F1WYaנPe%Dz"RvWB5\Nkg7.sw?oi +TU9Ļo `lڅ0R#V[mb9Dի\_X'8Q%Rvz-~h))s⟍B@z*)=)s{_% 6ZG|Y=Q0©6ujپM.mӼG \NZ; .s͊wF:٢PHϿ_Q8O24dY<*Dm˷1HP}sLRTAo&uЦen Gشo/ˤu5L;ע}mK_Z\Dq؉`t qt:s '_pſVso^s>eƢ bj#6PTfY3uORYW% HB-WoI.rAP F!BvwA ͐6Do$Gim~@Ot 2A QUb|mE>=-8$ߏ+thR5QL@ JOkj3-9KDidZ[ h0QpÁ^^1y][|%;E|CÂ:q%x7 J'(ac 4%7w]q=<09h7/KyaQջQi5D=Ė2/6AO㦡z9yրhnJ dW9lv N? jМ+Y6CP0i$4) 9~ɳwM J$T%VoX9ʸ[don04i]r?QB*4Zs(G2CHS}Qs2|Py,̀hn~z0 00zB3!Q: D Uvlb;,Y^YFfPE`Z]D,UDB* ETf-25Gܴw'UE`1AFL,N@Lx`wq N;qe>N12(Z6nܬsg{rlt{u-;{fwrs,4&"z]#2 '?8*4"ృ,47餈=Nhnt~eXsu&&$0 96Mz8[Ie^u4ClXTۙ><~ر}5^:Fޔ %32BO:&堉#rʰLaW-.>Ock:oky_s.eCy9T rBtyόi9h3uD9hg>Ǫ-邘&?*62s;Yݔ4{PƉs6qB5dxdMPWPi<},#lġcc[4<"ة 8Btߑ#tI8j-ĺJ&~HMVjYP&`ZWlЮ{sDžVUgL ח[ru:&40πھ4K|xV&I=q́LT٭u]&nv&?z# Awβځmߘ>CbDDlN_=|c°q#jZ5o@n8QwHmiYױe`LQ>^^(y6爞MI#;ƅk?bt;kq&Doߣou5+u얱aFuDg:ly&o1;(NT}͑""bu4eFF-M'у-AE4% $5UG>P[_ǏFOlYe,˥sg( Uh%يؙ@ 56u@u]lQZ?6l:k'SEnWVo\]wC[<#q.}šZ-ܯdzZ շHU >DEv^jefY>IW6:av#n>1ڈP37Onxc+{k{9ifP%Ç=,^͹f'̱g7',t|C6Zܖ^`XT>W͟ps(?D -IMX\x~֬zk{r(N6mk|:Xtz#@e{UUkkI%@E"4ʫ^A,^AQQ+6P^IAPDA`B蝠Zrr^kUfs}wdUfsg<iꞚD z:Oo8z#+W$&aCqo|?qQu}>\xN;⌟ )g mykӏ|?P%}^|hOw/7zr<Ds񑇞B28My#?qO>#sߝsaqN6n7_"E@^);p C܌hJ;:Hh-p/|$nJ4AXjuPrS0: 'ʭyݙ$MIl DBGICI}돤p\Ag)톷:|~a3O}1! 8JQ?L/|1-$H#Y6)]z`V"Nϐ!Qb796ákq`@2RNk?6 (\WwSүḺpF7ѝ E,5Al1_p]YΰAudknmR{EgU1Po="^ig  op`+ c_.9bWWo1%̘k9\M:`xť̎U" yiXT&; ~Yh&ؽ{u} [+dYj0W4,U.\%PP .W mOUc\` v˴w?,YwG 0#Ԕج>8`԰)α@ sޑˍ4Jce!vb&8MWr(,,,!y&e֒k 3 -.1d4oqMगBi_%Q4y/v˺X=QBE,T`he_p#)KO.>"5i.v3PÛ>,Ygu#ju (n fbN$Ѿ8Y,KNQXm*?5 ՘:; /b)y(̟4xĥDf<}񢇞믛7<5[ 1G.Aj 0\Ǣ} 2t\@ V@UysʑTIB 7BVUUǭ|9Oz`20)@tyChp K%|h8JLJ$-A5ˤ& \_^7ܠ{ qF^DEu*SY*Is?~o|FƟϻI#xvsgovS`OC!s*8-Ff7ccn(<r0@E[Ż#(w䶤d?iX\g6VV;7#Aa"!6L4yǿϻIjb(ThG9 r63;QXY]dUD _\FI>5l<3H6o'ZQA`y ܌a/)eaؓTf*Ѳ|H!?>. ~FND~/|3ȏ6@`0ŇzW;ri2l,"]pNY:t,׊5<+x Pm0c1PL"}v+uG")s9a>b2 /r3˴H(La^'Gn,A3~dĚغIG#H{3 >3Q#Sn~6-,$wuRv>Ў/~Qo'8CaVXX!n:?^ IDATbزZ0JQ` JSU&AUe <,`,8:]&V:Pۋ$^M,67Q2FEo>a\*iDT~4M GY $M=k{.!9t~ljӁ [Kb@hwXE̔fDT"($Ѿs2n5Fv:erG :0>/pg~~ ͎ڳj<~4135|MOk8N@uxLԁ p%BL+ʃsEOwu="̲CQZiP#v^s6/nRP$~],;f>|Gc[R5&1vu*+*)o6)Pv?)d`/e{ZCQQ{`(xM`HGxka:$V6n b/2ۊƇ*rer+vROaa5 G@HH5,Onbx,(g(wՂ AMq1j (_ ZNݤ2\Գ诅2,d{M濃߭ӡ 0E2~6)i=b؊'D%B ̖i>1FT3AAUJ&"mN27oJW!w%A+Zm|QL@VdcnxHiER7-XGpBz5lwZu WQ2", Z|sUI,[^OθTU>>.W`tRqs^^ofHL7 jp4XYwhk> yne2a6b=*ʽd]"ź'Wc0SC[FiP0M:b(}~æN#홸$eqe\íYdM҈r˥pؿ5:WDž]OF?}H m,S AJ94#"!cE HmH]D 3޺.B>͠)b+4TsgFLd#G (!+02N>nI]p5LYq(˥ӥ"2NJWphyCZg@u푫(hw)S$I')eJI?bE *!-6XK*s-[6ed^UoP.A?1!T̨-ni `e[; v$0'@jEYL4dq֠ep2CW ?\{iJ -T-kl:48 6vPC&„u*غtdu;-U}qAkTu)6J~PZ5tn tPN6dINn,zz? lbpvbܛU*a3k*J_UqJݍlۜ&n>aH`~T^a;!%#F)~{¢A7 ̯1N~ρË8"MY&cNSR̾(Duq ӆ$mx-^(qzZ폐ƕ0 Z먹kB8Aμ/s+FM*dT6xÔIi|A3d&Dx, 1;B1*N+eN :GE\K֐Kh3NC~H ?gk!.eP' >5$,w+,W4D*ҋ@eCpN@_K+1w 0PVTP $K$(.B'imMHp0, *PٟE[6TAFwF"s+!"Hl:02XpoKk #jAngjvH&}46Y]=TKcˉ c[@꼣^n.UCT(7,gf=?90p JU$V,.֦*APjWd½Ua7̳u8}N!HEԝC]DVt<!+1ZFJI͔|B4y@ a}әgݰAm4 ~u[2L =NեT,(eMHd07Pf :օYjm6iJ+"s` 4y6vo?x9Mfo"X#pP6XY@k:"H)4M{/ga4pXAe @XC)@HC]l6BW,S9-[习`Z9ZY\啯wh]BiR8To=WJH)"R Z]Ifw1,SN8OR)CjC4kBP*MY )潁8~F3sQVWDrIyEJEY}gf,vK.pcJ L~!'`U97pg }sW [ѐ`sE{MKf ʽeL^(&cZv$\GUg5,\Xׂ2,["/j< [9Dw  fR1JaHw97ߏ.. ;NSIxcӓA*[b!rRgNlVCQY ٝ:(:cp1 ˾$Hޒ0$\B+f?ő,L ̰`Iee_fTQa)xY*$7uy%ebNIE S-tO煿4m0ȑ<$pNv;i$)Q휂!RH i*T&E($3SJiF+E+6֬AÈ Al>렢12@졭[ְćBcF~VW~AzyjD|C(,W Oh+K\17\^B*G+?\L݉ +S'S Z=TBRڙ"LkZo4J ƑRv{Xv9Ѥ<#l!^ , G@#  yj֛@0"&(Qn*I$I4"VBD[%LfLaqf?Qca(<bI2qL&"IW<\wc()D̔$Il+hJ9%J""59-^Sur#kT6e@;3En r<sU7UɪN5 d4Ğc3@8Xfq5p @̾cby,NįT(uK hUt5 !yGǪ Pb wx Ey©R{\va;E'@fXjw  s͉# ! tU/FF]$wmU>Nl@R;Btƅ 5dB1xM>(>Jx=†֠@Ǽ GA>([-Ei½^ [i$4’_"|nw/ohF[ l']{RJ!RQSi$Y B)UPjl!,,Z< 3z)4eBBY`qñӣ~p~ir7˜Y^IMb8(dD"(6Cy <4abo\ B_%*4p)`N vxQQ֡$KaH8Bcྮ8HVfjԷCރCx:.ɉo48kQӝI{@4+X&$PSw.xyW̯pKlOgE Wyyv\.[&TWXh4 Y5-83v&lI|GՠSwu]^ %h!ld-q]AѶH# HEQ1s_;ׄs9l3$35MHb 0,gEDLJ*,u}F"쬵HTJis)I`ء|$IpMSKd5ӴL2HSb:4ʌ"3NN}e4eec(RdVs( =bI%vV sp_JzPaoeҠjHv;\Pgd۸\Q[[o!~Y u^7Kţ0uh̭Hs_Ȥ"M5QI?SfoɃ@H1RQ^?MuQrԝ1ms [Q$S6W=*(IO P,[-RJ)͚ ɉ ZC .wĿMTrd9"RSl2 &AUN >nF9d9&I *tx}+oyNIt78\+AV 2R.]q1v((EQJ'Ij`pm-# ][iW%9e6I膛dα OW_K![ d3BqHE(tI (NHEJI7 T4 "GiFQZɑT8~?IStRP@OEªS0wv h+xoa2A^?p ҘD;nP0oV~ 4 0e,x:`Uv 7QK8ֳbtP+84yd8#zX9:.Ф;KM*˜KZ|%'7 QKŒaU1 tHE_maB^}lrc*^}&WFp "F.ҨgnAaL;#'S{P8^L#$܃M1AeI+!omız}Mxs(ͨ)*˕B7r \ͳ{E@,֘/KEpuKe*ObՄS_T*K4h[̜$ʗEQ,ٖ;f/tA3.^ M: +Lݞ,iΰ+z{f}7LA=:OxdKu9dVà,c!q15YM>Coݲ%/3;}7'RjxJGL3w[C{;* ?Вyުtz;2hVcB%- FJ8G Bʽ z|AKaw6e+PV&{=l/ySN,oɠh>W鍈A7@%V-ceᅞXXD"nit+#Zw_vaKlpc` ^DXv. d`z,%-찾kBKf=a(FsXV/0RQZNIT&H!#G:O[v!4;&9orzjd+3tB&aJ)Ih2=# RJ?`J86>+B)Tdz/m.t3Mf^iAFN)?'[>1;gٿ4p"KCȍ—οA$w&?8Sެ- )~ԃSmR ] (q(B|XTצ-]@(oP|MUК7>1}ǁDE{6-##c##c#uHXa7pg(.o IDATղ؋[[[ڼLF:6Rz&¹ [:ppu7L S0Uڭ͙dsSgfc3:#HâG^֦m_ަ#A,ힲ2یTHꅤW~ :BZE´QyY^r_?* gG$ylڦd+*qi3iZW ¨C\ ^`fCc0p+ζM1 K=(X(M^w [Tv-N8 DP9CfAIvsM O&'bgڳe I26J]tJY)=yk"J5i/R.R.- {8'7J)3`Y j?EQꔊ4GǙ<&BVF2l$H OHy?7#\ UH#pcZ;Y}#\lx'tͩ۟S:mC[~?,\22rtt75 }Q]ЋcO_{g<26:S~tNcMMO'p;肓Oco8q5M_ ~rwym163v/n{jdlttZx FFG>zΪE<']ѱOۓ޷AD# \-v.^:Ѧ+J}~'$ʓ޿aԹW#c#˟eQoD\ٳ9c:k@-Xblt=[O0;ph6rlk=c.}_]9wL%&lW߿ttltSߵvTD9 Z m);G./C[v.Y>262[517ȋO^'Mώd2۟y}:>pUm&7o}m y7&<@柹'M'_}ۧI6\r<_r]m𡟜=uy?+7{VӕAF5[Sk+(!Xth~1Yt/ >xϏcrm+7{VQou?W//?W?5ǺO]dL&ۮOH_Q'& Oس_53]u~s{w\?>Ʈ誳>QYK;x΋/7W/7M;z:U/{_}Ymy,btb-޵ Vn40 "ꮷ ^p!U {|p/o\AnUV퇋(Y}aЫ {s,G_=2ڃSrЀU0eajwڝ(4]UƙӜ,< .xK&^l%Q*5\hĆAB鐘$5J 9RJwW*' ʤ AERϴ8('I9bF~)2SJDˇ$j\Vg7̲N*wJJA8fBoK .ξH_} gi[E#*w\~DZ(Vw(K oi[{ߊm?www~sxW}nӷo8sRgmV}{]xV3;n֣]Chg?vh^}wLǡ529[Swҟ6C''2=ꨛnw[v̗5GrҶ_>t.kD7niOb5UGsrLZ;nw_rR=s(N^?u1Mm&dkmE=3ugoG.CQhhvo?bVZoQ݊VjqY{[l[>CQhx79y3vύ*r)ՙ×i)jmno3)R*&䇻0(jOҎ"yiΖuZ,qCrRq5c㙓f[~cDS"o6DL..>'?vo۱"c߈l} ˻:Z);s[Sw?05-/xp<3[\q C[dK[3e/a}7nCESv9nwόy#5yJ4kwnolYTm|# a)=Uxײ #[9n!Lj[hTZm-Z().TR;n?ju nKo?ZwEEd^3[#o[aZ:Oz*#`XISL4iR0^u^k<҃Ļ-~[;E/5l;#>RFegjZVNjS:C3:`hX OUgat:hx=4ibGpPRSDQj:ݦ! ahH+뿶;nSMJ)T)RX۪VNޤZmjwߢF"=8uQaH+Ua ?#.)ty+'%`ꞔ\ަb]2ȋ/Mimvq'~yᣝo~mUtC.'nCDS֙Y|O,%O=8G_z5 #Q(>8Gw6v}[y˽'j ά"W2u{hgO*aԪ9]x;VD^t{q_}&b}̮XZ "l쨼/WC̒E7;qm16^qubԌťO>p] k}o[ƞ?{tiOtώs&=q)?_9S*e>BjuL4;ISoIkW*Eq!(܆8$G:&⪥ƒ(ۅ_vߞKޤǿe6;_6ioxu"EvmXMwG |g\QܘBܗc^oyv{o<7K'D4<}XHjU 21䝾ӣIO\q,}|jR Jn9vnw~>lڍc^>;޾[;˒Ź@T}??p~~1&1N6x.Ohzک_zW r1/_?^ÿY :ӧ^~qe#VG cje?~ߐ,ʢ5,B}t}KO yٛ5n?Nh)el0{Zp.4,5GdڔvՇL8 ȋ9*T)ǭ8zAd"iN(%*Vor.rY9g!{) H$S5#sޙ҄}MMQLE+Jkr)Ta9A.5L%Gdk*MSmCfU,/UPi,ZV[5=(2]U lؕf86J|Ҩ(5y&5tYJoɲ2LǮ)0~hy =I[l=nQ'nyg{HeFlnnfC<܌Hl8',=7eOw9hwMKfwe+p[;Li7Y}|gGyoSC:ĕbi?!PK8X|Ւn:ǏS4}G ']3w $JD36S})}aF[󨯓dYs-z*cю:g?v2q]}GV7n<+Ilĝ8G&H[<"&m&+_LЙ6핅|'a}{v{_/{Yߤm7 z{ Ijeeh-H/1iE!FdzNSSn!;N TVO(b*7e#$Tn"-BrfJ LWiѦ[)Rl Jʈ++敩DL0PgzĭVGJiZ˧JֻrQjlҵ%d"\;!qi\cnxXZOL%0|0J<$Jg>mls,s M8Fb!Saij07RJKIj^ pr.Q285tKW7x& T&d؇b0̎EHva1p- i$+@3(}HLXpUpXKf@GDǟ6ܽKh ^_NC7Yhꎟ!s:Cf{|.]t5+Ovnse#~ko ;nF?CAu_o>w,-Ob7~3K""L344{k"ǗUoI=9NȓO6O_ewOjt3>9z._iwsPvx]f㟭|^gqZ[2S A+3<Wv_=G>yvߺ}tYMǻoQC.O.^ImXL68[ϋBzf}W>~;vibe9?WzGaױ{ErGto(Ƴ韜?3ۛ{"{_0E3wc#Jn]@P{,`f!4;ʕ`U6`j"sYKYrUA IDAT]E)l*@C"; ӢIS$e(R~0n1ԭL (-̊KT._ܬ vɍh\xk jqn~{g4)TVʹح3Ef^ZP9(R-}EHӛ8jY㓿oV׏u_큯k~-`B#X32.O-[?q+* :B RdV7F,飲e_9ίYwr1W(GLnuߨ( mՒp>t`B|QT]gW(tyb\m'OjQEQ4iTr'%KE ˼,GQQYWjbZθ(-5Ԛb}Mb*ARQDQ61jwT:54Oju|.(8nqZ>l0VK6; ѐ.`hX axXM ORt(*S?(VKuԐԗPgH_0 mH?@PLbJ9݂}wA7> ߯%0Q^mz`Ry&j` P6yy#A.ZcĨ+{Ęy5n9l>` aD,,5TtbH^3&BXdN*շ׸%Be,f1 쭆-;›w;qMg(&S jm)23X.1g.:yƏ_p#l:`'9?ASoi\iFIz/&>\e-Y b߯!M09*T]Hѝ5>Q+1("~tB]L=@u`Ol~л'6$Ϗ])X,#@rP+U1|VqeY(Rr?I~ v&@ּp[#eYYkFLvVp 2.B3w.+T#BֽYQo?2yĒBɞg%*I26Ff*GKa4cݚLf1pNfg jFYM{~'zxw1n_YIဲLQy>ȫ ViuhODCA:.ӻvFWV$d\Q/Y\3*9CD}g-| ZƒvuGYҊ݂ ҫAI[٨($2`e# gѸFfnIxh 3Utݖ" .ҳua$I!GyH2qv\/܈Ȫ<rQ*j;xP (@4/BNE"ĂMFB㨿9֓'iՈլ /4s7mJO'6h`.p׸*I$IH[ PHDRzoaE(@̍aw͟ѿ "NRJ1;Z5 PRE&AX~?a+V2ӇlW7od5!$@٧ @a{n ȳ⢱.dX0ʸA-rf,dbyVS퐽# ")59D 䜍%ȥ/}Z~+GjA#3JkE8i7L*Q=rJVTN2x2l yxd%;ySF,l 9PJݒ_{ES>qj>6#ѓ'9-(J)}8n1s$NZwQʺ%q֝2 psr ?G(d4c)74SmKѢT~.pSEͬK*RqzL*I8Ijqrj =j݀ZxkT, ؁ASqd!V"h칻?*^:؅PhcnX7pd}ni6P6׆A, 1&Tr>gij,\)0;Z2s;SOB)m3^X)LI$I&(PMd2tf  =#,4Oܚ\)>C| %IZidjir%dDAJe2$9 Ҕ9emE x07 twII9rL(kiE*Rip0K3%:R.5\ 'ϚߪiRWɾfo[-y5DԘ +܅ZS ,O#/;z`l; W 9J9gBm5rdAB\(,IZUe?$B,‡9 H g RZ(QTU js+bp$޽M<C=}@!#`Xr"ePdz_5BM CA[l# ٞmaGޛ\J7)%ui-7%r&}f&8WJ4i{ iU yɺ=tdm1VZWp#ɥ* _"0\Y^@1g}-%*9F_Ĕk8ȇdNBŜ2T.x_pTtc$?WGnƂ?vPizf@(+JޘB1rW~0 v߂-DՁ\Lጯ 0bK&g2Pn K%HRĥ%`M3FjϢ>m.6zIDygcyHYW{RQQ;4UppBؙꐌUsOsȬ;vv0IjPg\pR?$zF>{;Y\JcIUbWmu9g~dVKnvfu1kܼ ;|@æP:`DpmVW h a/Bx7@E!gt˗b܍ 7cXQbnfF=Os'uBn0# ?u1J0 [x/Ҋ*rA "(45M-S_. ց&d6oi|6<ͣElyY zKiP SJL=G]+H5S׃z+0yb=h=M5w<+Cv6SR,(#󜛮T)R6 3ܝba$;x5FJC6׀cL q#hv;{qu&W?e=kc;c7\yv!smN\\:M5s_Iռ~!; {~#7^|E l`x{]\rW-KoS#^ o~fؖL_eujibމ[S_?< E3}덳޾{vZއ6w GK~~Y=wkCa w#;px=N/~wޤ]n{y𪥉> ?j4ciJwhǶŅ=Iaw_z+~p'l Vk_E~|e{eO)uc|6!b׌[mR}?䞳;Wgl.%-9Dk!Gp-!r؆]~zI8ycIc >#\fss֌ڒჟlNVpۙCޱ <~܎ aZR?w벞us>s{O)N?pg/>+&\t&A"F^j="E?Ղ{N%qx?*᪥uqI7M^^euBLLBuOh2)("J(9mUi"̣]-* JGqbD-Vб`[yCϬ*:էL A~}:WHsJ#Ri"p4/\E  لsPR n3#GQ 5bdMbUZ7q;V-bNKnz4HBf|baxl~xէaѵ嬷{:_{'~Oȯ|hV(^=_?/r{|o{GÝWח-zY@Zзӳ= $3+^=_^Nq'_]?pat>/s^zgy߆-þ?O\) (E#x9'ēwAt^}W\e)tX}dk7z ַOix :QU[Z̤) % ҋ " R*b/4 ( r R \;A =$Bz9g}{?p2]YYϳܕGUbjOdӏ`pxZ@Ze!$ƄQ R Bh!v>Eoh 4+[ b͈uDzs}]BG 7hQ Xc'V.Pưi8cru^@CEyַ F`(i!LtCu6k YdS׹˺5[e Ym N߶dUenX )7ߑ?Y.SATꠡEغ?'go5ӷif%?_yAoWmMS=tkt5ܸ4Sn=Ū$k%l@+u혤?mV(eot)K!kWS JLb8-/kZb~ݬSu>߫[VOVN]'s$61(kWenXzP.kiiM/"cA_mC|ɠJEI1m>ovmzɗ'kXU/uSiW씌?}ڒs`/eã/Iv7u~ƌ 46krL|D D}~sr-%8ܘpWcڦhƩU/AS,oݢf|ߞ%g?9Jn½y~-~}={ t3?ۄJ8 _~k-W ?}꒝q_lbXc9/Zg9f-{!KY:}YϨ(ͬV;[™yi[W Vj{k3]8ukzµ~]RSnY^5y&㠦V_J/.PsFӾ Yڠxv|7I۶*l6]|_7mzVHПlb<׮ϖ.x0o<uV_Ͻ2UTb㠦L@Jr~C_>M!ϛWĩ׾ vcNu{mՉz|o|stKKhK;]Q*f 1dA&.ux$$ݟ2G f]ў} vbr_ WiqSA0FNn1[Y]n0ej1$&[0(hpjeT 8&%IVMúƀ8'5]fV1sJCgb/܀ {9;# |׀m:ԅ!g%*pb"z4<[yЁo \nG;͛/̆GyqEFo5hSCv#BDu1V^\ƧwI;׹ @Љ@rRŝF IDATa{욲V ys"sq8D SDc+5i8:VȑJg1-{٨2i]G7zה_w>gF=!,:ƧTsGȢb|bubw0?4j!sMvR[ w4vKƌ~qޏN1,vlۢyS|j҃wNX ;ƙb l/=*ݪW׃ag ⬓NCŧwI;eP Ah d30t4fHjm |;"Ӏն uA!3-}5Mp7sN\]M%4D,{h 8@DO) S=DD,Rps⚆6g<Z'j 9".s3!eH~'H)DS" E|z ?'aMO롷yrB5%IyIƕIKS2b^V=Sb=iŇW6rإMKx6I̅q5;(#{S2,d1o yCOiIXYP.(c {x=UEC=[~8] զ}k-߸;0wϦ57>OkVghǘ%UZ^_|>k9 jrHJOyf#aժ OT6? 6`z_z^7YjU'X}Bޱ'OLOʂ ;{hQh 8c zN{ikAbI=o(dZП>;?;PN.̯ixg&J@F_ȹp^b"nZ웿q''_yy `}V~}扼{}v"%I7T HiՁ_ߢUV>.7WAgLJmO}?^s]Rj=ĨwODs2?gѝ/TE?&:i옉_sU׷(wb՚_Up^y׶(w|+ CQ05`<{erL̃吔^쎗 t'K珉}@TUUո.G>>4J#hE'%X>5y VmV_{k+P(c/b$Lf43gzzbjPFiQN)B7'srJTZ@;ƀǀL돀mQ5"C6H 'hH<> ņCD C>K(5gs0<$tC4Bd&Do([hNW(`3 0rm-&=:ڷ3"EP{ϞCs^E {UMJ uֿ=uS\Eo|j-z"LZ/=(qN3ZRRᵟ'j'weM.gh^8ڦ6դ=SG~V#RjUu1.4M^I߰UVf8&3mkgVN.&?"5PZT*XK /`ng$CjLb9ˮUq.^:^}'3 P~^m|fDXvsw i?0*3K;}V{8bnm/z`ok3 %pdޜ5}Vqis_xCSoʅA?8Ͼ\ഛc[8\Ht?ήM. & ֔C#sn`h?:>-;!7,P{J&}>3ƈi*Dn-T!R|$Θɬ)kFASd``0 C@!JL=!t*\uNc54Mgd6Df4$/rhYIuD3 `z)M A )Eī~CLgL"B^2HH&BMBnAy[ Y[:A>Hw6i'~\jh.3\"/o?L{.Yr[Yfr4@ތ ^Ge/nc=Y˾t&;_K~ ү:jK?KyU-_ۺOPg'Z4{ñ$'Dyo=bxrW6$aq*;cCҨv1ר+67(E=\&|Ȑ1^!ȧGrr1٪K䅜%yб13KORyrg10K ]@L;@/;˜v#gLpK~/Ռ=RfQO>tjۦiStw#ͭ[x*DZ @QsK>t:nC.;txM|wcL(my{)c#7LX O_ }oW}qqP]Zbe1iӮ:|hi;bԫ W^{Xe%>9)KJ ;ZݷA%wnW?$ pjsI>0\}$`-&Ti<_ѐD}YXմ]ܼ\}vd9ƴl//R1~/DI2IT%$'9? |){#k sG3~v9I>8[Hxf~ Bd8*)EUUTV9!2T8Upq"B(i&)ReS33 qiD &șROo<%\GȀ!BBC XH 7.-PEǛBd1+i!t!xp./_>|;(F <}02lj z|ͯqG_Wmύoݦm6m['G@}6>nĥ݆ռ`Ӵu66ctJzm[5#?&??LaJgj4Zdd55WGZƍj~Ȓ{q];w4IiF@= iz66ctrzmZ5#Kb_.:vr{;nTGR {OntM-dh݉{]=S=QcvI__e*}・wzVF3F_;:kH_9|s&l6k5^1v'%uf]<o:l)n2)noB!цO_FNF;AW|g([Ql$~E30a6mS߶n?ߝ;Ġiһ@KAJvsir-U_nۼEzˇTU4.B"F`bABEadm!ِ7#nADFo'격6&4&RCbSEKQwunDs4D꣉0 !*@LUj>d=gBLGr;\m%<o`%0ү'8}]blk P㆏Ӏ|tӦXk:+ңu1?i½3^+N|-y@f$+M{gzl񯐣D q_+N~my*q~~gS5*C:a\-Uq7|dDJ,`_WR#羵 ԰׬F=X9wң ϥy;qѺkvs=YZ &Xqr7dM=m=S0CXCc^x+y~}jYYy*۳y;8Ӻ⡇{+yzm*K#E|w̓yk06oδq*M{H>c_$E?9g|7\Fb"^1{4ے_ޛKf/ljλnAOu;E\.шnۇ}eՂXPy.˭.3"}~O_~/;{edK˟ߚĽ/|sK^LzB<[^!F/_sj?zͱ߽pmzLuoꣵI`ΦW*v!`?Kpϴo;5E*Ƨ6&V:2j*8'OArEຎo0=BW-o[lD'"}m*f>y*qvci#9r2[½:f>ӈεս 2:,DUc?|Z{%d/r:cL$4U:ݞIQYܧH`#781$yyɓ wO\J,ْX zAW\j$3 J:ÙFM㜓c9B,Fv$NDd)آd}t"nm|rSIYlXo4PALIWZ(!J(c"QUUYP\6iI"0o-o}qBy<)JL t,.؆%OZ4,C_D4K4țrWhi4}.BcHM #h/4m6 LCeXmlXu E+lIR2;@hEϫڸ][DYǷH?91 q]ճuRlt 4(Ǫ#Zni ypUwլkґuT.Oߌ#azmXgZD5S+5-B`=^첌7{q˄Cܐd# 1d6-m3p!߫mw 0B-9ye( d35YP|o5*Ƀox\ 4(訨(" CS]%Y(3F%Yf1yx$%"Y#G IDAT"]M:7DNDJDN\Kh"ӟ)R: 97([{M!!1xSĥ9g<4q:<*)&HW;7%ߗ1&2FFWw<a#M^]jh f$E B8oq8#I%"AHBOadGQ–#9ɲY ł|բohPnL'nʱɅ aUUtQYF:B:nGLC` !̱䳆rc"V@!LO(c!s9]lB _ v>pV9l,W5`2sPQrxIB)4i1( -uIRÁv[O5 !+ i&+24Mӧs hlBH]&NcC!yK FYڂHkW 9p{7/LDMv((C5NSۭ?`Ht)\YGFl4?z{:-q[h-e)T6PBTB*,rc<,9-R՚R~=OKca(rM m a[;(B 6(!#zT$) Q0her~Cv*zBCp]N8AE8 d.rU2KvQ# )"}*8L2߄4"FPPt8 ? CBNIDp),IiN{}F&缾^SU3'jxKc7q2.)e : a]p#jH r@?4]aDF ٞW9'XA }4$AMNsoF,rA)N3Db(ѐۂ)0O$=aj"lsBF IdR_Q". e?dD_}.'Ѷ_a8#M3^D`mG[gCfwEnK BH WÊNGYyroб{NJ86:aOvOѭDP1phraM,x"AVzGUxoi%H;XioW?y[ nH'Ei 4Y8;2Jg†!m؀H~"yhrJz(=e~#eua"p-zaw.ضQml%J{f-ѫ_X=%H2s5n6q!nSĉ!a s)'1X VO7B(OhѲZ-%MPׁ$ շau d M!& o<&3}&rݟNGDf<"cfb}_``P02& )L 1$jߍ׼ԃ Al*v.ygVΈ!!݅a8q r"EƘS?`[rlΡɗt1\ݣqܟ߬poB߬ݏsm$,?ͪ>u.i}c\9frƶ-O51msW>1 2ov=u.H,:q>C,9͚EvtqG?v@.iM52>?Xe&ةU#U;€Lq皔9y2b#:m$u=斫\݅A?Z٠ u0Hh,sC̨H#)-+?JҥlÎ\PǦpЎIX~bǪv v9N}?5s $kuƴ]5ivD\kf|Ǫ"ƏJ4uHT%GwYsA9)_c\ǑpI&J3??k܄u9ƏV̯X3D>NZ%oݓqOkc殚8 |bY|uXvhoT`Gg'3>?^S 7u͏/1.)QZElowˮ4rlϟ1?c•b}=R| 3a~9evt|Ne~%cmmo Gv Ͷs1g5c R8Y7;>m(6/|FWvZE_Y5TL3ɝ{tyCW'|,v|~)'`0^麋{ɄP?U:ys?0RH!diuE7gO5qK=^F W~'^9wGfDw}lkm p &^9wW)oߖr%MvYj?ǽ:k(Dt`U4%zMjʳ%Iӵ@U57Gi@C{^CDd .I_Ɉy[ XKV(ϦyuiZ<.|ZRT(\i @9q.iܸCzz 4=T``-@ ^MF/1R y";8p"bHR*WDils@Ɛ\uAȘb -]Teݣb˩"倻gM[]V7>=3v<܌y*SsM]3U5P$3!Zb,7cc^g_էw7qSM{v2]{O39&,iWm/fnyљtɥB?;S\  o~Y^%Hk5&gYWg[V>0YjlMy˶WCS23WI|D8pa"aT$^ݢO{SEZc[|-oĐ7gz)3? ړ?o:;R a~Ȉ2ͻSrg~W_Q)KucS+2> R."%6OȠ,󋪩Y[r :4,ľ51+~.#31. /Vl=U0IYלPba$V7NybH`{ kmx/gS){vjy ͻ䄧f~tbb)6Ss3> $ݧy>}-ߒ]lW̚צ.nɏOָ^ Mjթ`ĦAϢGX]ž[5Vnלb[^:;M,<ŒYqq]ufCJ2NϺ7j P 80cfl\ׇgݭPΚ=vxcɚ*AW\gN;XV 9j?;$֘|~/<m떇>b _5BVu 6OҾpSu:]֫y#΋@/앵'uv^SXIX׼5'^OC\\_5,'(_qfS7I&M?}y' P2o/W@6wg5 T;>OQ@ > M =B-)>χ#n5F0ٞN'IZۡH Fʼ#EW.X؜;sH]OTr? (3&n17YI 2h!Ǹ.MyUW *c&G(R(I:^ 4dɈs` [ I0g"^!`\P1B".82xm9)9Sߥuk.;_^O̲mC޼fpAܰ4ڧtG# {hHUi{@~}-™e[9tp9M]֬|g^={-k"BU>LZɾ͟qTMA.Ď,@*37~ Q|G\3%6IԔ覨Y%y9ň.k݊h]电-tR>|֍:M/d KꥷF,31_[4sx1?5c~UxZ ⇯՟ACh &h]~:Q'MJhUgNegIPWA^^-OƮ( ߲g>;R;SuմaUy禁[מb)[ܗ[̡/rFkPx/;Dfc;/uSʱ1oP8Ȑ42/FZLdidȿJ:bcn&c+iZ}}BtƳI&%HD$R&4^5 9-a5nN`MI$VH5Ym Q5 7Bfts%30h6Vd6^Q\ӻu3$d StmIǮ)_`eb_'ɝZ'2"uҴSj:dQazը2d7 W%w?vuٺurf-}w|N\9X(Qxyq@3k7̝?T'vWƘV=jTuL ca1FnWy[C/G+/ 靓N*4CuR 嗠+ ,~b\z亜Cd~/\ohia<926c[7J)hkbwOp*-,?*::1V___W[3HV2DI& r 2FWfh`źq&plBSe»3FA'#3Oa ƹ,[vR0lI|(`v"qikB܇1ѳh2nDԊL1d?f~P 9Tu#$1T1yEMO;Q Sj@dl)Q.9ԁ7u9Sfs޳͙X\b<Ԕ& |%W&Օ .9N:]ٟz#*6~{(s+]́Ib|(peA.mG_Gm˼4h׿Kߞ;W-3>aW^U$O^gi=?o>PNr tO$c)׿fʥ;?>ZkHatԆmh)[~'"0*H2"֣҇fd+~Hs;vr#+?]{UMs>~r>\/mg~Ke.Le\u+?# IDAT'?zcn}Ȱ+~D!-}*xu}%L6#Kh8;Zs/~gLj"ӓl&\MSdbyɳ:80ްK!PRzvÕ^iS?Hn.av_Pƥ4VK 9<+?5WX4s`S+$KԀvQ5k_6֬g]G+:ݸe- ]1{x={5;CnTwZ^_|I>$ t_;Yѷ\<].kf?tV^z{0VX8sU/X/V Y+ =ŏJG*׷(w|*rh\7吔ng :]mp\ʣ\D(jy@ׄ@0"bniQC"2GEEE1ƂA6X/8l,\Vk+CM8Іъ)+VBl&t|zwD!I*Bh1NVsTΘi@`tqxƬ`5-9I?̷0A868$N6%D0NR4l PqOØ?[k'&=M3,Ң"V>;Cj?{nW1h너M3{S3=/@jAڣk<_ E{<*].k |wƑF/yOxN2!2Go[<6gW9J JwHB {4'F:GLnyku#7nybQ.$7?yf/NXf^0y]wyNK7)ĺ彮rQ( :ZqH)+.sT0J}18T } ꎮ[ǺG&x0 }f//$\^ETTkNŴ:>]*;{ZP}!hx,Ӣ\s?*={5=R6>E.ك-Ădl%JDf5*DؼObZ_\菕ooS^u{-l [i]ߜ=_Qo7f-9PŽ3AQ 91w]RoE3_znmN~ݫ>y>-'I9?BڠL}lƻhw#&`zl<)" 8nxH@GD@ĉ10jqmDBD(e[ѯS|AUUAUSMX"E!K8Rd@([P/'CFIxmzo qiHuH39JWck-Xft'Z@e^GnPAbT>`P4AA'2E2XfpVtfőp@ƀ8rO_>ڜ 9*DDYDf3L~. gG&8%E&"rEj>s[HAf}1t[YX5⁲jM@i@ EpޫCbWg|r}N}A s1TW"3~_n''`eI] //q§lUp*;:/#A mOo|xςeNC)v1ٟ r4@^VuGW˭>9'Gt>HYK+2hEyL1<#kќGk%37e*xi:4β>' gfD{?ޟsЦIXUVʋe{L7my`&A/֑|J!SwW7ѻ-<2R f,N쑵hFs5Ҋ}1]AՀVW&^ Z h4VŻ)VBthz^SP_ҀyG؟s^V I1>Z .u<ƶ\7͍Ⱳs <_w{3}b羴;xj|iyO֞^^nƎpߪz5ÿ鑋ԯ˨vX}kXgGǽ?6'%)s~*|5@IB4NȞ!W<ٹj\fk3?;'cͽ7f~Wjak%bFU뵠zx]e-D'D1-ߧ8Q]]`04F 1Ea")|Iq ͒+"mv3g94C4Nʴ\rȔ:r2$4!csBnn4yez,6[_A.bсx!$2F'%f C_EAR_&(f!'7"S&(pu2sDTt#)4f!J=lHVb`Z!Ccڌ1+wsGA'wiW?<5vQvUUzs)!JH(HB*,(v 2hBBT @-1"&rɾ^G[[`h`0W!,Rb<|_-WYpy_c}㏜wDs#hŭN(0SKMVGϾ|٭7兼un=e#V^g # 0ڡwݓ}Z??}(Xxٲ9OX߻~y[p 6Ë\d_b=lzQ/RJ&@\JV=һdx( r_F{ptcM7e|_g/_[Ϙ{c{-ݫwoidUjZLLlmv s xje&KNZu9z@OʤDHdrDA9'Q! aURJn8$I5 Yȭ6!@bnʀ`!iDeU@OtGڶ2``ht&7O`Fn .C8kAt9XypS;"FLH `k9h-R "\HzJXW\K7Rp\&6T)/c!C&3BdS)kH"\Dy` e&"yWY"8" .x",xJ)b{3X$iϷ1RT_]]_IwDѥ6>^OByiܱ=m?n[>zʍ'lrfwi$u7f]ڹq]yϟsǞ,Ws9uNURIsESպ{ZwZœ, 'K"jGu2b冚=!STs_xzn8'Lqħ~sCoUg׾v޲LzyMmiikA`Sm9<[湰e25Ξ!aՓ[G'8~u[Tlf͹Mj?@*1bt˺gGVN1[”MCI£8"V*UIWRZI#@` 9w[EVC9G6#Gf}ǒuo9[yr]}qpNyŚ|I Τ6~λ[/ZEJ_qۜǪ}omU/ Zuxbaf?{wi9 OjfP_MDNgyU8y~qfxcO/Yt~{_E&5c݋}}Xn}Q] (Ó-Ƒ-&6$sݯ}vS?;߷}&m[Wn!`e/݄[ᦑ]t {M~a}lnGtgf<!_//p% ׯwMnkCNq)0}yܟt?~rם c/Gvrw1ǻ;s|?7^xi_]8hV֊ґr^6iύ|N*f1ҺmSBmǞ,5[ GnAg^xӂЖ1x4/ɟ;c k\9h[z6Z B" 2΅U &\HHsw4cQ"Aʫժt!E!&OeDIXLB2n 㔙jZ:䶃[a]SL {F5Dʤ> c8"S5-30d!QpE0eTrCJÄԯ @TMι:Sa b Y( N$-G!"Pj 2 HE1{h.ąLߧ `Q! OβLo$fJ~B@ bTT4YdLѨQ fF_A@{hi/rT(7Q?M ݰkMGYz:"`$ H2 F00 |22aIGn%R3^\|)*ff6p}RD M l]6 ˦x 8m?RM,19><:SI/h`fgG ^daȯ~r]A%b!ʅI=yS=RS8I]uIMD<1gQDd'(#&S38p#碚$AsMNCFhRd&7kI@RBzsa J%htiQYiK+,I?( uJӀ-d#B+֦3 E!u7{ ӺѨb>Lu$Vq=~ؿQ RκuCM@=x٪{ '1M03C9,1mz_qy &\n%ZNTC " &別՘tm}' ;sh {0#üaEo֗b_unj`}1yMc.c2vpyuZo099g'=ӆZ{a+o{Bׁ BqoOLׅ'͙ׄP #ةlsZ_y _|5mld8&"Ε2Pj03bdR)KPV+– f Rf >hEQIpAMbbKqR-z R}5Y] #YFuP:D #yʥlc a5١#yTC/PY!Ln&fbSsfb"Ec -N~byR\EgFQGQKY=0܂R-v(\}!;!@[$Q.Bas;ۼBFgXeW IDATQ7\(3Vq9HH-PP^Fx9 n 9<+2f[Wug~({d O3fn{~(M5kȉA+  LE4_ 㔁1yE8ļY9{ֽ-:>B^ K0\,=́u|1pVb@ޔ ̲FM /1hoQnB.'ZbZ.N)w"DQ$"# ,cP"WF$ ,R"&I"9*dlmusTQ:I[%IB cn#(rn `9F VMAށ)w:K?lT34g~nZCAtox3TE`/H m?XԜ٩Of mι1E7L$1A"z%G5Jc T*R鍉% S:DV~%SQZYGkJV8mTUݓMA-*BHy/| ^YiҲZ i@@)qY8HpoRKF& !uUj3Z3"=@3=ӰEp~2E 8j 6h: \d?܏mDq=T38f#v>J䍜`)P zfVMB06aV;)\1qo@փ9+ݵŀ6-1L;]:qnBn(Ƹ21gX\< L10\G OcPCdwf̫Y@$ y$yڑfCvĊ ;$QJ <{8֫J,a5aFQӉS.J {tV5C% [Oqqnk|_"!Y).q,Jq j%gÝ>(3XKI«UEq3֧KyrbgH! {w!wڍ5m)yN&WAJW48GU!At2[w-|GѰD,3Ez^}0k (& :hOZJXqde>X݂":V;:Ίdh(;iRX seT ΐI #eƆ8 RF)]*ŠCsХ y-"2dƄHIAB*igG[{(ίT~W(3,"J\JS᦭d9v/SշBEDʑb\QBRQ#2 21Hgi( 0襞]uԚhH&zM$eF=,mE,Z5}(V^W#-8uoę}!)BN; Lj@4Y(fv ~u>Po}y=VQP=qȦqez\:6 a9xb^3O>M$ 2OIn]3܀kWTo+z9M4^ͦXsrMkjFENƀ6'%ĤOGDE!_=ݜ(Oh?:V"`$#TkOzvY!BŠ c VIpisc괺/u{CoA$cRtEm1 B@Q2\SINR;!@&4Ҍ!֤xky7YJ:p( (J%2Yِv"kbSNSL'.4w1Bf17 B9AȉeF!!sP**md,RN*?h݅k%ƢttRO&%n(LKAu!)I֗A)r+`IENDB`glances-2.3/docs/images/screenshot.png000066400000000000000000005543001246314757600201000ustar00rootroot00000000000000PNG  IHDR>sBITOtEXtSoftwareShutterc IDATx]u\۠D$Nl, T@E5EQQEJAr?]]v͇.wfwfN H"$H"Ή Y@I$DIu FjMwk$Ľupj'Mz26|F3|.hH'KRc9 &5x^h^w5z6.P>(O 8w\ڮ> ɗrRlWסF$UKu>gB qaόc8P   Z/0Rt:Ap'wϱ3cYt,zϦn:!2+2]Ge8jXϒC4uà\nZ3gƌ3l!=Wy/5vjDzO9&Z/]/kSXŘ1 >V[5994vBAɋW (VXG>(4N.e,܂$^=M 7Օon+]9?2)8mq+5׬O0X?8#`*ƪXھH}F]Scy_`7r`^)GK| (V2IW\L:_Hd2AӰkL&ѥ^L&3 tԺaqL&~U&0ʹgoǑ|Jݥ} TŠF}c爏/)W1Iu~T$w$o8vN>/՚L#MRyhc߻SSH(篟9tP,T>(؏l}Pt1Q1Q1?Sҡ 8ES}xfU0I ::|~Y@Wu£'ޣui @襀GN@7d9VD1t*j g }esW-$>H/׭[v|{۬ OBEEUKWWKEQ|4F8qo_51(O5U_r?-\)6kY|D.t} nT,s xчjux=>tݱ'1zQ XAg;KLMtLcocBeȸlXb<麭d2bt'FvVܤ,Dݟ\M}}in >9$6k\Dh:XUیO:I8rÀK|W;1E[x~cOXp S0ԋ -i!Ҡ~#3ujpl,6n|. h*t]fEa^Z$Z7Ѧ@E|.q@IM!ӱ+e* )JKBf?ȾE&O{kPOnG?k4'@hwpdѳZYd _ ygDʍK .yECqω7L{&ZTJPnoJў!XF~8Hb?Kz7E)0#T*F)FN! c|Mg[R3nP%)1sB%eΎ,Q&d+l701|n TLAK_)orkuy̍oyPAq3GY4uE+B2?iڭiKPB @̰_rx4_oNuo]9)S48i(!l;q$V,!!Kc&ME`n w/ 0#tTr{nX?PSܢ\J?A7=A$ߚSX+@ˑжm#Ԑ]?~~ʏ6my韷 |]Tt-w05P ՏI/" o1fLYCKڙZ0P˦TR &0`K(I{iuܛz< ;7ޛ zjq;+ F^{4Tls6|G4[B$lc2{(J!z;:ojvth\ e|O6Sϥ*~Txl\@t獵0c2ygJ# O>#JjSo7N:elgo ͇kKlxYTT5]]%qmt4VM5DI5ՠf'4Wf~$SQ"&F}>{+ t9b%ˑk&]5clBTXSH'''$IIW4gCK)u$ˌabFt~3m_pMj/X&G橶he e}keK̨ϛXW1 f `C5N*rx)QJVCj (GzMcRJɐ[*q>m1}m(u˻4zӗ6[>Tqtϖ[/t`GU #[T4NZYX4 YqsoF "~ivDNc3y9iqN %]RoneieڀTt,Z4.NKOf$%Ůf:x9µzĎ 9cR'3cOf a!H +& 0cBSc#fW1 To2HԾBM-J7 aQtY׶tz:g UoorZ5mڣ1YQ>(ڏ4}Px .2Gۖ-tb7H'/jJW=-LvR:Q~=Ne˧volllѼǘy맵(^:n\h8sGt ,;p޴|8a O擹Z*ݜٽ͍,N۽oseN!x2UIM Oc&Wx^ |[QQW`æ]_IUkleBG9Po_*$Y}%[=y֞o O.Xq/ecTfl*1ތxco`u5(N Op Od}Iq>gAmϘ<`']fپ;r^qCҙv_̍5@u|4uݳ: =~:$*jn8̋7謚"'֖SY`%]Y}c(?N$ӛM='xrߣg&;MZ4:e\q–k6cۑL3~}gaJDH#)DТsao{`g-Y`lƨqK'!xod;!O~i䔰9 @b_Xr,g5'aZ1.:4e'30''.<7+R }']ZyuNNv^6HJD2pg͈_6o{ΓjWө{Gq&+;FPu^M\O-QL?69`K\u(xsFC%%beؿY> KQMuT-8;ҿݏʫzD?`TWrd,Kqb$ (ò9 i͏f^"L{I"H$^"DI$D$DI$Db0I$DI$Db0I$DI$LI$;"7dD$DI$D$DI$Db0I0Y$H"dI$0BZ2I$LRicXv"Dg fH"1`-i`Iݴc$*D$&/IL1I$ٯ\ލUR$Z?knB5)cL$H &J柱]FB\>&%+` Wu̦pI"$+ץXK9 WHUxD5:<8m%!Oj6&#`H"1(.a-8R̺8xṛb YC0 $Dbpl13VsH,C W}`Uv^Ӯ֛⺾=Vkq}sil'^"D?3Z8xQ1t^p)z W"XEP^I%1M.Qx07zSX%DTW#VFR9e;!e4 鯧{_4]( '4}gzS 4娌$~XU1V"GʺHa0h7{L&?ƌG2gē3(d&hw$L7@ơW:e$ hfQDΡ ̀YG/v+O~R3,p+77ccS_K_k +A>`z;:rvjItBx Gc>wnk>a.<!oQq[7 *ze;'mOhw?NۈQЀbʹBrȦ+N &۫(h&7?uRЮnu~Z<ųc0k%e록+9IJNgUݾ :QԘk,Yv(Bu3LPUK[ڱcʶ~ǢE*jJyQWvaTZqunNhh%g(1lN+q F ;-Hù=[ZZv̠q=_NytjiYmr)${<8qOf򧛇|RkLK$h>>-%!T!1| |>E`R)* b KK{pfAiZ7AO+ Ֆީ:P!tC;>xQE"C*UzK8M2WA 7ɻҾ YFCX*aEKG.@eX]X >{h@ޛYA~nkj5x$愕ca0b % @٠G<  tz Z{U/< z=Ziv  s{f?7†]YSU:vܹsΝz8ϯ}?\'?~yȿA,ݮ LkYŇ_RȗŃP?kB?|C 5ZRŸw?#؍ ڲxNzT@Cs-k>2ddpyQW]"r3tvތ.޿^XebWJ< @hBZY;C+.ٚߞz*!W򦜸ykۈ?'tc|zXC5(Yk1:>|KL+R|M8ҙh9' F]٩dgK50:šI O$pabh`m@uC-CufByQgUy{,@iؒ<|rM&]J0HlQ# Z~ǏLng@VDAMڪQ>qa;\^T*GXgƬWR(ֺlɈmROl<ڱ[Q,;NЍ/AG΄86w{:fyW=Vf>!y[:jyk䞱Ja;\䔹p$mB! ]enZzřL6][_HЖ?žР"y %]؁n8zSޑ}/ xw%땊^ȣD|PVjBDg 8%O?qBYSvo:]l8^4Ze?#\}ò@0 4 8Y%Y6gWF77"@q"(sEm<S̋;^Ϭ3''k ,̀SݛAΏ,y'h IDATh{r2W6kڞU;"xP;;B2Y k ˍ߅?||6A(TP񧓛 ۿ lO(ۏww98brrk)\)‒!K)} grXCknmNrr5 Nܥ/sҠhτBp3AN.Ӝ'tw@g/eئ};qطȎfy# _'U^**p2tڛЯVB85_>ǔx@B`y7*2aXH0Nw ;NYb1|!5ENNq_6-p|nrbMn'*\?5}?6iz}nf䃚J{/יC!?Sr]hC~Fa9e?x.!›Zw>E!~QFf *|P1Ҋʶzc$40ʋ7bQtF4"~mGl6^ yt$=2 s+٥C?nOOUF_4* g^{4Tl}E9-Yj9I9AO A,S~@LT,`lK~j+ىCq Mg,Nm>X. #oYzװώ1?Lh۹*7bS@]Հ)WyR gUJH JC8S T@Ǝ#[I_eЦV2de.|*-UZR@~WFF[zpWjj.י}^slZ?X;r F_Jڢx״s35)!{. `4nCij%:K%wv~U)׌rAw.""KOJaRQ zL;7h=AI I4bܻ@ɷϞ={k1}sQ~ﵾOv]v:{|HtΆ痤'''$e$&t ި.'%TJk ~p܌O-8/{4ӞSEڋ|>~(y{ԧg6JUrf|8 [h9@%c~ҥ5 aǜ]4how!Q,^dąfpVsWoY5)DN-ϧe%0Gܼ/-"NNI>*'5OH~kȬAYWN~j׿K7m1wv/]r'{ JX_gyF+_Vo,~}LIѫo+w/^4iO(H ޿b_XVꡦY٥)l=zdҴ_GaKZ b%]Y}c(?Nr-'} ٥>=uz %{{ۺ֪  R^?f_Lp4yʙވjyqok[rrA1VJ87G3"TLBeE2Vuubް>o92# Pt:Y9i_N>G s겙:@Ifح;t '/soǼn̞>,x ^j:l05 q[;^J{AQVfE2ۜJίr}iΜ3ΤJ2$!gz!Ϡū{S ׭qR0W^Ӂk֯Y9a2HmB*/|)BGTIBw6G5ln׮6%\QQЛNر1q! 8oX2L*[qPϝ'IRs+)g#T/^4&LJܼ'f`xΈVʜGJƪnۺpaV:D_PTԠ '[ѦKjGi2@O-9>lAb?旅]rHF~fifoeiݼokhQ;Ǻ>N _]m[=Jȉjb3QY8 z9W(jZjPU\wayEe1Vj3 ]fՄ*VV~L:cL=,䒡CO~9-!fOsٛjD /̆|hDvU]\Gb+ Fֺ12f}naNT޻KY[4Q 7ĭF#t&:~lMY27€pvY2WLQ#'1kO1сyZ-UBP(zjՑKEoѭ/&DZػ􌔸 *jtW]e J'5K,hVK8#R/O[ݚ~nxErţA,PCB8ӳY?~ewT[Pڏg V%!*z$~P>!a_c5sktX1_⧍!/Xh"fTv]قxpa(vn{ݺ )\ QhROxm,9(Yy%_[c4(gE' |4vLnO.^&_H@hiWFeiP Ҟbn?y`ϙIjrE=P5?0T| sK8s\N pLDO疾ԔyKUZjS;,2S'1`sߤzrxAqFJʠ٘imo)@|W 23yCqysŬ۩3*tju |afȅG)fPQ.ԊF@1f}>*}mz;`tY*Қފڑ\dwqQUX++0um3oy HEkeKƻo1s,Ur̫iY5kl,ՂA>j\ @k=&6k(&6(wZ}؝oq+M~+%x@Z她g*ZL$Rd`{EP "gtP0M{̃pGͅ:(fowidw?޷M+tCm2zr哻y`kI@S1 OkhS~exyt.3_!"PUiU݀Ac[iosjcLTPbjFCb^ٝJNxMk3%k6>rSsfcݴ)F3%*=kXV&*g#RYWEc,k/ `4i[ZZuŚ ]C]5j(**m/k˶ӯҸn =\=bΤ]rp~q,:58_b%d8jJ #%5zM[W>#J 1L DFMu9)"[E߸&.VS]1bi*ڒ V2P;^PrKo_'z_`ҽV/Mx%22rV]!paRD^n=,U4vQj=ƺNuhiikաJ^tzWэEd֐W0CA D'/kjKV779XËKjcg9r ]x mյ\* 42ǵ@\X3 f:O7H]tj}/OXrz7?ytRoD 7ߖ_>HtRnİU*R`*R32ՠ# V& iU O&92󥶢kK!x2UIM Oc&Y ¼4Ըw'CNEyq9u憆6>5ܞ3eԩ b(-1n$ewBWKKFԴ\lG9jG~ΑO#}s+K+ ޟ=9}ґmY4icɄR E뤉ZuӖ%|%s#*;6+F@A0lv36M6P!?xIbA P@*\Kt#-B  Cu>xa}NVPqItufze(JVnN`G;o&AuWWXt: FrQawn~k/<>|{gAuZ Kc Nz*ϝǜ׸e_%?;'=x!T!_,l6sM =~~:KsIcmbfE{rX1ʥԐG(e08/=6Y ٟo7Uq0|tطgnurE3+}azunyz|t"snz]na|e53촿=}]9x`Ib>}ޤ-=sMciy.pC/KO(*+;_H6*z$YoKeU0߮1 Y*zirrBUA_^T?t#tS_BSOēR !E(qF Mw%ɷBsTVBM:?I$To*;HĠ5^FbHFx"V<0F0zY$vRy8e"./$ l#%nPE6aE*5Wh+Z2TEwA2$wrCFpH8&$aVl-;YH >a/ə{]XzW"U(ӋF1TZzQj BHсcI*G-rJ_)/#J1I$\~F= 3%U7(\ju˿e0;Õv$ؽp+ce\jW *&d; Ҿz]4A1($R te͐DIy +.8*ҭ ع<ҮH%}Q@ IDAT aa)4e, r=_´0.>VrQ$R9PTHy; F"FRMsj#۬JħtUX1Tׄ˳m8D5Dp^L w!5CQjF_*z/ ,vz䕧a+\ o~aNd?t2Hzoa;%%%G'z}57ndz;wݍ򼼡KC+Ln%˘}?z[ܣ:w@3N {Pn4C6CV6*7$j SZ5741zӛD*5¼{A߇e#ї H1Y";`@^+rF~gܾ~n1ұECj|{ZZj WVyXE0 PbRkθjfΏ-cMVU[BJO`&>d1^c|HWxsCȕ Dtw0s|jz397 vs@g<mϦIVLHJe[[P0PT%ީ&J?CP4֢qEv8U %ʟ3 rKuPG?=,¯.}g(;̪ U)RTk=L:s=v.mg)?\FSɴH`AlD5OEUo'I0FP£O mSz8s 8=ܞf}ta_>TZ+[4>e122>^啄|PIZ`Xw r|zZ;DZ*cJ"+F(~2}Xh+ ⼘G(_e>Sq<O7ka%0>AfQt3Tt~bs2 T E\TD U)QTTo rȪH ,- ._FRҿԎrw8sҁ5u۳{3VMt˰T ݮ+Nmpˌ9>Z V|H釢ڵ*՘ND_?0UDH Jg} vȞfc͆]!h dž Z,!:ŌNq?sS8^ҚQbÐLt8mkԮI5fdD\Mqڪ5*qﺫ=6o_cIEE.b=# 8#Z}ӰLsQay|VƥJIpnMhl$ ĸ&Px<.G@CF\cln3-vc{|KryYHعwÚ6/#*.GsB"J.)BB.KމcaH|h5ę;52*㨩ϋV1]PsͥdeJ )XЏ*K ĆPl.ٱp ?[vg.@b3.m|#.ÈEˁnTǹQ{E*\?gT,lMepU񿎥-]T{A1W9&[дbnf`z%: \bA{i'M? 9OPy.=]8#:^C쓒%)4V֋{'6gmuN|sSU``5T̘볲fKScѳWXbA/$RRA1ޫN8} ^BEh>"'WЛ"T.JZ/TkꇪްgS eoXWO$9R0~vhg{֮LW׾Ϝ뾱{ߡKv]sd5#<.:%0 !rҬm[ ylxm:f]]jBy5-Kzc%d'[ta]{E}nz* JPޫTAAx(ҋR# HK/ RH;cwgܙMa3;sO?SfK\x.G0ΙLnЅ<"6P 3Al 27_Ī 6vن<С+˛s,1+[]Wҷ39b=gQXג!-]4B8BQ MTTjm۸^F--5ɟ }N|WS ւmd'//2J8d޿Tnt=k>hR,ڗ QɈ?q(#c֒Qعۉ[w5I77spM'B^ uDaL`X㳋:Qgu8=2h6دEfq:R%dв_[-ߍEtNɛU]nD`:jxڏSxЃ, O]t|u%&hn K󺀘fb7 4HSmcҪAi7GPC~]+;آh\aw::ཾmfa@j̖\`2zǦ:9G{f+߾ rv£T_Ҭ{5j6 ȶ!ml-%}׳ispi]ne fr~Sh/z9XiC ߮YԵ/`؁^v>ߞGs((YC a؇%?hij',"cQy$F}l\-쓱鄐~sm  jۿC9y"2E:N䂶{'cHqi_s[j+ &#"J{yW4酄!C^i6l>lX٣ύG_]oϬfslw$MzۡoAh^'O˝8uP:[B) 9Wc_G2ZkYY7?j< :Nt<7}٩6|̈-rе[&AVٕS?@}} i}ހ?4ތB2XXw#2_ٰi+ݹ<٘mѴ^͜K&(Bti~vXi$5W:?/:FݒO5-eHO1SԮ yeύd<%jgź;LxoU E.j,m}ޭ:J2#oӵDcJhMSBD6/}nMre*3LjUJSQ_QzA;kM]GWַ7ΐ}6-o̎\3܉#O'IW ?1%?o cK/1ƎLWW5ג:ˈKvħZf;?̗~Ggz׹%YG|||[ڀv7;:AQ!KǝdD%G!~̀+( /}ڋk( 1#"m`޿556+%# ~!j4)*@p (lXX?u(YT6"_B|ǝ{w{*ʋ%?3A"Hsx'Zpe8A^3: }qx|ZY/R "'VSa=HN@yG JR%fR^Mn{ QC( ,Gʣ\JA2{&oV&p2I@H4tt(: T.h S>Cgoz:Yyv,sAAv(q[pSMnSB"9B=IDA5[LA1%8i1R= ZN軓'^8~¦q 7]K‹ v)qP!S5۷V;ّ7IRn?d=#Ϙui.8wq APBjY%DnCZA`QeMiub%A;TH~ S:}bġ\~mXЕnq]+C笺JWK4ExirM~p2yϏd<~_Wy,UV#9f}ffv+ZEW$jӧ.Rɱ]4nĐ|J-{g*xvZQ-~0a4ߑU:B N5~{Ϸ6}խKr}ub  Ur֊f]8 %/غXh@CiK@ٯWYݝ#^z.>(tm5r`èFM6r9,UsXv:V^3n+#.G}1UM_-f,0~5{=_gKsh[O10;׿EM?>)Ү+?P[ /;.%9AԼ#&(DA]+w sZsEpu3e]u=m@Ǫ%tG[֤_c7^/ͳ}Zp:ؘviPBiYT "i~t hR_{S.N2hs|z͛)1|ڈ3Ʀ~(u"8Osv|lۍG[hb/]#?T݂ckގhTBvڳH~Q]8Q2A!9tn,.x:zY˵@5SJV{shk|}]" uv{|lÇ ~M,p%.p`^G`L~%!ѾȠX4C4c,cl?|Y TqƮ$}U*Tmܔk@S"hŷ :@Bt<]yuBF.3#0Ipn+]s,E6\XUkcfWL ziWRAi-/3a |xFW'y\3{tm@FuB4O3X;^Ph}I1l#^ *!H[sa)Z IDATvٌ<|ͱrd/->v匁Ɨh<`7҇_`o:̍ʭdfx64u6 iLf{TȄ5 ;﷢YC7w߿M/[AHˤ~u^ï]Wܱ)"_Xl1ƥ7Vs!A,,15%rXU/P\t2yHr%>#Ys6?52l?XX;8ΧS*`Ly~&|?ʢ!x]R,"ld}Qؙ|Dgz] |+w#>(:xz%\_uCt^]zo+Y7~Zz5.0S_D= ,L5X;Ivnwv5޺͓&+xt~eQgL p֑O6_ ־F)cKZ~,3}9C~8r37х3dSb7Փp] ݰkFe=|$ؔKoB\kۼy˳zͤ>\9}I:FC'}k=u~`Qҕz޵Xi.^Q5h73h<#V/-OI仑^5*2%ʯf^~?>˵+2i^:;Mv?5ǦMڶq U,귩C{j}|hq)˼RFԕfoqb(_0 ,+@x&>;:@rN$7+^rK/vDgni4- 5JRySuձ'ݸhhMoKn}'_4Ppi|fmWvnU-?:,턑U]9V#T٭gDW}* l$ncz2?nۺ'}>]^N/I/W[LI΍ȄQ)CUiQ:2+>L^LY:r>_<VԔ&h<];VŜ"#!="aޞywߎ$ ?tBM}IO|@/,P wq 0?JU|h5Q?c|u6:c73@wpn_$Kͪf~]BıyL%apF&im_eܻx7Q_Gk܉Ժڷ dL/\mG>Oi&>뷷.\W/ߪW3y҃|ߢMdq=ylo)Y R^O;v Į #9e/z;6KŻF:~Xvl\_'n_.I/ڠ",Ԗ>?RxnFPu۽gY7/YQXxW o~Xxk(ͳWic<5,y`B8{o vvB7Ww+_E4qD}ۄ7]RebYL q{1E>/揓VO߶.;v=1eF TdOZV-iA¤ )ܧvjhmydPF٠(f}ł攬0ق%XnH!97"n&)bC;^zq\🺶 5Zg-Ęi@@}]4}$"Sv2eUd<2γg{5mvcOzNWeמsCWJ/mG"VJ0?H0pYD[:C^UzΐϏ=#Joa_"tigdHuٖKIڼ"J=Uoa;*?qWf]KJSGtfaSPs-DN1-oQg̋z` ͥUzbQEDD!Ć@ef"pƿUj<϶_6_~]ʕU'6<7 Eg,˖:5V4Y֢mbc46 mtd$ԘӴ7LpqN`uZ!39Kpsp=gǒǘ?ZuAT; dX&6n5rIvK֠'k{UHgt7zѰg=FtAlSB/ׁ'Ωs:w%֑mGtc2ewDɬxaR|yan{XeN_aX5H.K//a26@_AW5Q)6+XUJeiH!oH<`d)XmKq6g/Jei P\cN͐g*=nw犳D$ۘGrRfWPו iҷ꤭\Q݊>|NM% $W^$u%u"Jh՛5 ʫ }ƙo= @];\,McU DLѯ]Ixf%k'w5H{)[jLMA%xR_=6 %m}c`Ʋ'o2@cuV34Q7F.›:,t1/#))5ߣGܢD^[>Z=L3 Z4|ȼW 5FMrbznCvzP>(gaR#ޱz UZrg,FX/7ĮxUoiB}Nz׺ge$;8:R@o36вF:bxʫWn%Y[oMp ʔ03;)z߸;c.A!}3NnGjLz\C ]#F V1r3Q<@[H>)Izj,T 8b1hIgHCW yGߪ3Y/%k}zh!%!#9e\5ͨB 1oe5mS0myS Ċ ?GluQ:rX^GN=/ _ <*wJ|1ʭyƪo޼O#ӌ-Z(/N_Xz!>:dGAiU tjvY ک{%C[4Ӯ^=g6{mRXϞ6,_^ω}ʷlj1gJJ8gJA:@C^> @ACѨףVcIXу۽_)7I:.iyU0L !-vs9h ԝ6mPXH`PpfL=31хtֹ^g QWW\ܵ'rINbwШ=eȈ6:UVeVh0-wu&:'B@a^J*-@}B*UTTSuiVj50m^7OEI]F+eEU]u< ¬q͖!o2zǦ:9G{f0k#+_$#d ?--o!_):~FHK;?`gVjgt#GcmPRޟIdںYstU9B 4  avu*8y#W,ttk:b?Q2eq"?-N{Mn[9{n+[.6g*wpJAt@nm$m]P7}گ禙foxyܽ3'n>U~҃s3̞ kh~jܴINnO2حh]jXue[4IR _h &Ɂ9_*)*5ѡۓ@r//ÏNH}Ȇxn֝3sWVdaԻjB۵~UW'|xk?JK I9!$Ԭ?zS"E:6tUM>eg\}#:w#.or *@ :TseMuv*M?/XjQO!ъ:Jv83#n-\Rm^_n+<NaWvxҨd~f3l֓5zs_aWo>si?c?\iR11ۦqji o5k#c)ݦ jc_G(Hyph >qq[3Q iQ6,MHʥ%r_{ #t^gs'//fnRzF^O}ZW6l쀡`Hwr5M*A:rُF+:Atx[b{7g ZHqgG>CEG(,/cB[#ɤ". ؜GNeb/QA}=f΄!X^V6Mÿ<$^PLi-*"4Fq7/hmҳ_fjEAS&A#ot~chb2@XH]c&*зeY._"" EXE'(q:6CcnZ&{T;ytDc"Ԕ@貲!IBUHدf_P=6+ka!Ps7D MiUaN[H$$dt8sH.$D"D5$Z_OIq`і/F|\ ,C+DT$ޕ-1AlU"*ym'!j=boqE.#=NoK #֑>(!@0Z5Ŗ.mdĿ̝B# 9S('REBTYVѳr Q&Wڌ*؊2ZKAAu7 |eҤ3U X*,V]l!"5d& bƳAY톒7FLuɉr(!|0YzTJUl!hqOET C 7X%^xi: P$*^2Vl؃DaE(!5d"&vRn:)xZ` ։`*0jMDMh e4-ۆP4er;[V =sU`R~\D팍y)r THwh'y2! ]Tb;BY5WA%y&P쩈cd9_aeA赲([ʻVBT%fhC&]}DA(VD]պ`:>9:MZŔpB_,YGI*M %.+RP2g!)&^Ҟ_Tʹ:"*F5ʌYHoBjІг{caD Dwb]\y,Rɉ^&QzG>%0p* sMbO(j|W1^* "DL<" x VH=E6ϘN]4&$Q–" cstpPQ.ڵcJ^2pH  ia>@?wzsXFi77hКr"վIsUcQ),*J0JY/QPD(^\Ti#)Z|zz+ѐm)ge(Ba2"đ6m-l#k@wa%|L6)XTZxrϊR{,xDB!kq6| Bd)7OXqj-PQR1NfRSP?ꉈMW@YPaE.1P0xiNYnS`pMʴF[DsRKD$iPD]ۅrd nKFA $wHw t4 ɶԯQd `sK^DH*Caz0jH*5lyMn"hTFC)")s[t£}"u6ijx IDATFT%m"[J_tZV,$rG*UQ&W5PԄd6) x^F|i骅 _[&ˀZ鷰FSBJ@N#B7i8vf&H( Qt;hb,T#;E9t]WRj5zWRcjA5O\Fw[2+4Hx@ SQ I+S3~<8BEz#5#y'6Gl 9^\}  Ae,*3(6k3[U%R#\ hv)b_,T#"2¤&0aO~CK $2? )]c2l{' )OV3[a>)BZPQĞNۡ+dwף*E#{GRfMM[yve*T'y*y ,‡(IJZQh~ҝGКE址R #b9'lje4@lt%J𙤥 A_8?TsL"3M{ e& l݀WHQE`&MmVQ"&VTZYW-w u\v'oh"jl1}@j]6)^A"rrb+k\5=hkJKYU&4(e =\ĵRƼ/7eeS @@Ana\`uʜV84Apnaw8,A'#,gjԭWX .K: O :gY.Ę>YZAǐ+hD{@{m>BZr.]WŚ$C3QBF7+HB;vZNR݃ @IXYwP[n 6ET "@cU֎E,hq:*JReYwF$؛'BJITU'PaD4DxE}PEu/je "T FM5 SL+~;OIIRxB7ЖUۖ0 K^B{z%m; ƐC#58{Ե[a"ˏ, 6eQ gC5l/MDTif/-Q@eԬX Mx>.1pDs6 I%* 'H6͌'c>!\WVFXJ޷S􁉍@"ջ²a"#cw!eQ y6Q01O‘hkHwWv"VƈY  k% yh Dzצ*u"-+@%⠽xGZD"!EMBP\D!lk_-X8iD*8XE \../ay;nI1r-9 CͨbO`Q{WnuSQQи;VI1! QR|iy=*8*40'ш%BBFQa}HNr#}XS*DTTDUI$6lF KѺFg!]DB8 Q݂Kv3(kbt AyԟgMP@I1&,[usMcy A0zPޟ( hI>֛Yֲ{EQfL){+ΧrB$hĂPKU`^^ !BQޱ%&HLhKvhf+-W1dх_4 j0C"s+NKB兠ZfwMa1pOLe&•ihް֖fD2$6m )Aµ"87y yf z߻^,ƃ:',|B%/4yK'_4#ø'I=E+h\:gI3xiTXA:%;F408 8dr"!{gu P㔔@Wv픔 ѥg)F"9nL%6%'9aHIIIٵ-c$]^9}sa϶?(EsL:a/o-{kʿX| V.xO~.ohMyZjn;g0cjK3-5Es ӝ]Z:5%-5`'wn9]_)io#l#цg)iG;x]ħ6+|?5_v+&4 tH*Ϳ\K4Y9T7tՍĕYNc[ewt+]zЂz:ԕn>yK/]ӗa:D_{~,XDȚPlʤ}g6s1,"})Nu fMGwTY zY WO_>m&&z 3d(-mT7~2\SC&osɋ~Y;i&osɋgY;y 둜k3[iђ{z"!f|f-?aV>w칝&5)3aN\Tم-em^.ŬE!,V|0! Ù"`Kz* F]xG,Jh4  m>&CRcM'9QO'QO>x(T9OD5^Ջ&B=KۚwG67q<>|͇Y锋f~x "fʽ9wD#G8?n1Z.49/bV|`cF Fr1#8[;s^#{Oŋ&\S1[d|!g:iZ_xϲL=sV v^8s)CO:/3VNmx; W'OۆsF9d!'xh}wxet~ɀ @]A&' eM9Y5F*J?)5+{"qG2)H(&: x?8i}WvT}K 鼊r*ۍ\r,8[E_ۿZ}~@rE_ej'|nGА,,ώ<_"V@l9{͟)<}u&pnŏa| X>:Z%C !|h\*TH|jh"?#ɑk_7,FA׳Q1KyuӲ k֬Yfo@zu녍#@|\zu6~D"g{YSR-oio̤˖>x.>ԣL'+oѨn=~a4t՘MF~3 kBp0dDx!k鐸7t=tZO?EȚ{.e&fq\?[4Wy=Ft(ߺyIHz1UtDjtf:[5YLn"sjLܦ#~}mlR|Pn˞HBjZ:wt,:V!Sow-vXkJ`̸q_݈+HU]ٖ=ZTЧDG>z$I\ϯ$d-eeY5, L;9s'o]y^zO-}%^e{_=sn!u8]t1ɘZ;m(riro/wtM*_ͭǾk<{i:l>wۇ\Q~L^gw~!@Rm7.Y <7lwl7߼{pզ q@Ưa3cU: q@n1x=|BM70uzbw wV ?!ز.3:V&uעo^#)s (a^\*N۶YUu#{~ً'.ox%]K'OOHSV2y CBB4 c'WHwK9ҤjuhB ye,k4 FIdV֫j8SP,UV܋,(Yv@Z[5G֌6-4nhؙ$?Աo Oϫ.?ms~gWg>H_0*&:'f =*yq۷1g|V|?_C<^"Z1ܣZ&e0[2H0  Kr ķzyW>}r #}bDfOO2աͰegWK@H<zzWoFfxרN@Xtc]4^mSj?4zP7?ћ6mzıdYڴ k6|kR{>;y~{5'SQ|wy8 sUZ0-+7I44kRzܙ'Ǐt ޼&`4>U!!Ĭsnn__Pg ~q`9-${ʁ>VuR>^N Y,s]4Wkv|q?`aZ}zc<#"]X`*kŚc:}hqc>o̹z摀G5˯8DjzP\I%L?I|ѝExGx ish1YdDVGky9g_9VXdR͝O^?{l(CH+ߒm)Q{ܺy)@.K2;9:]yzzvOY((@mnc>ə_ %1)FoIgZ:cSݕXq}t'4׍X?_e҂[scO^<:cw.E!oύwvĆطħP5MCm'Lam'&Ky.lm1҅V򃅈F18 wdxn^.1݌=@Yey_[2$ysƓĤ[QTExAgyi˿OӵaI"PR~X|ɳT,F|Aʳׯm5ZHJF .}PvʞޘsʩDˈ;ez->CI)4,/EUu1QLwOZZ(iWKgyx5o}qj39y }Mi;EsūY?P>歺?j8㩭r4΋>|yX<{ʠ›Pл6(Vsm$^W@jt~{a}sڮ:Wӛt~cTa+ x63ms߼I#5%Yk@obo3ݻuY_˩ح ;9!>)K/fh}Nr犡!Oy塣#ý17af5YK6B`ϒR[ymA1F>L0b3 fՁ0"DU&Y| 3FX쉳U~*΀Hrm7ł_Ϟ8Z1 /|Vm gMЭ3)y`|p!UG.=9ZHxW^U)ih;ds`Ѩ~6zhMVXY4 r'-xר^ DudSuxm]T6!F~DfmN9Ȭ0ZwN;|ěsÂTm̌8buڕ-& p|ҥè2ǼU8>1f>_ƸwfN$$29꼡]Ouv̤l @Ig'9%%Jf'fsyCZZ>>Od"X,هMNN[X.^k̚!*v3{*3I t 6ƚq?ܭoVf^w+i`̼n{s~ļ+un9߉HRFH=,x?V&]+uyת 2CNIѐQѿ:>Z}2yebY$A[OHUe dur=}|uD:<q?{-c.J%[:DQe1|t'Y$<-Bc0'&xTT-JTjMFAu3R"ޱf UZr0 s։iUKe]jY%"əba%U@~eEe\UfƼR΅ eC}qiP>,F9j0wp)%'ZrF&'jA}uE9/K\- Ch4& ,5 zAo0Y@35́hMB5 c _Z,͖rؒ?VƔgznۈ?c KC_z3Z[?#KaI/ zˌph7gR-sBV_Z hY~7{[?ߥ0{pES6+lH[-@7Q!!jV ܴ}]Ȅ㙝;c7omK7`֐&ϦCm$H9|p|B?<J[gNU~ncКxvMuuF?{<@)j383#q=bWOxz0V-yq^Vz^1r! Bc?دQpp^:xi>q \r7$rhR:[fT֣3ܪնFgӱ}ܼnk4cAר'^<ޗX|pm CҺQi7'q(Ye᥵^5k<0CT\joQQ6lg2ڽbU*83 ng8QZ=Gk DIbBB+ַBh O 0Mm_fm̝&s \n;86zp+6iW%-2Ѻbn'ua cF .A߱awjݻ}h GM=mX|z>t4*HJNācF~TtjFyplL}@BZ5ps9hO @%RH&EA 4nAj.*ayZ18*_L`0|7 K, +yZ- Vo-ʔ/eu}$h_肂+Qeظ,2uُӺW-iO.4qk#h5݋N~ަ_!g@c㣨ϙMoŎP.EQ@PQX@DE, %R@()wwv-!y߇Lfgܹnxs_߸xثTʛ/޶xA]p4!U.2|R.}ho l 퇽6$9BJ2՞ayu?]{?}uE9/?y̽R.}ZC4ak$GRᵳo5N?T ٵ}{yh @s=beW9Ķe{aYZ0K7Ly믁S.~dRVNq|WJ^K9ZQ>s/&?$v★ʔ2>]o͹ ~t犾Kz2ꔅˎ)om#{Bs$9s/&6^׽?Oߓ{[wڔ4--ޙ3M ro3<%DŽ(2A@h}S~=kO- ΦG{&e+xnd)7QgW]*,|FUl{I.+O&?f9@6m粶6Ó$r`ǹ>lʗWLz^3kxor>0{qS%&̈́DŽ,5~s/'[> d-̢nATg;lނ1Pgokg/2V}{xx}r$h'#㳦h$L6ÊW*K o$*(I$$it2)}Ҥq|r0<<ܰS=ԥ՜E]PmiE^ԗ[Og }D\W[UgJX$y( zYl}ŏV},okʰc>w٬NÛf}sr'Udh5 ;w\3q"5Pо :gGKXsORY/fed!r+)N\N ʜcV8lp<~8[qk@1!cP-=&7 9u@f $G- 6kި8 Æ26EȌc%E@4T*+<<~AoA0D $C@1-붳Im >~Px>Ep&ߨ%K$>nN!Y3dr-8p_9րf"ࣽo&f@g ŁsЉ_6vV6t1" S{=&Z̎Ϸ>yN8YZYn<$gΜ,/e9 ICT L(U?JEx+v>B6AJfDk5~D:jB0\}Jy][Pdk94='iD5,t!CP 5IX5G q>|t{ԢG&q`%+# [i+Z5ڵ7ɹc[l_&ZH4XTyRASB$ucVVd ¼pϣCUTR7 ,J,R̈́v]-r `koSKqU߼XMa`0 ͢TuLh*!DLJfyQA@4i (f:PE #i-Hf e)Ct4o7qZJokIu ȏaBc4&j:tNq>x^]IG |93Apjd=?[8# ,dk21Lt_/a2M( EDQdw]P  x`}Fr!OIia#HgKǨu%a^FIz=`7Y& Fg&AD(*g I2l)(X85La{%ZQr*Şu˷nu\Y+20Gcmi)˶ۼec;~{Z Fm l ,1\)]v˺-[z D!3Ju1X @ :`!LftG)reZ񀑁~5Ii$ITH#MATrli G_7~dɌLJ4 ؐd+ȟ֩qT^D+z^Aˡ僒}5$C @Y "-#yogܫ%K5I2D21~39SO|1 z&}Fъ2vgS=Bix"k{9J?eRMuƫJ ѪHP?%Ѡ)V6lk G lx͈~ܝ雗jCd>}zW?/y ,Vnݕcs^U0AnZ>L7|wmٺ}禕1ťlXj[-;7jv{E_L[HΎ/}LH.~JA+Yɴ,$53JI#ʛEցA!o;̗3fёr3 Wn\] dB-oЧ\3F7+5DٱE8A>i˶_Vѭpdx:St V yf.9&9co"aX,sjySmnMEF,ƍ6>ut"ЈW4F;Y9J&'E,HSܤ\%ne -,!-Wq ![<@Q#ezDHFɒ$nJK  pN^CoFz Ђ(D!:(|ʚs-#o<j}>4ҝ tT*3/θˣoƼmzg}>kcm'1zL>csy9w_z^ޯ+Dw7t%)卫~˯%"r6ѺALpw6bB,ףHRC Gʵ.sO9p^\x/.0G>S~ֳIn '|+}]շv@ꬷm`v`AOtugiLdMf`Lܷ$瘝f1Vo*wȇiV"*s;c@XȏS7kR?e@Q;z2ilpȼGZ$f)e7c؜@ Hb3rWDUR .d+I8 ណu>^5Oߨ`PE3sw?׏ֽϥQڼoN~U{rNطw:cdۡ3fy퇧)b:<󄷿-?9oo4 rwթ?#E6=fz֍5!:14zC'&SF̊cHbX! :qCk]KmZSrIN ?; 8kO_i24̶9sf8ӧcX^<\:8LCUe0뒱E 0Q~}t, xjrYJH`!`q8d8{>Fz5m_cp(^+2$']H*2!eR9A(I$Ap8hΪsE Ap8@􊪗H@t:YĖɘd-U[m1gT@PutQH¯şc 0oXBGhBζl )奔SEڛ Iʢ<(wKW$5eBR7SҾ<Nυ|e֨< X h%jz+$I*J]-V,=)DOE, *, IUeHt$8KF h$hKn8@Jj+ꮞEpfǗ|sҤVi4Ŭ=\g9ے]"#ʶLW+nrX5r l(" w,|J&jJPCB.MZ7:>8L: >"k^u2Eλ4t ?0;ep/@IRS݀6=\Q_D LDrd6-O=ὣ{n3fDѫfݪDǢxF,ihM$YrIIa'{TKHQLO.tv"^rŷLsT~xM(*7 }hT.Ojeoܸ{WC'#k. E)X~xOAD+9/ h:Wܺu1Zn k.I0jaj4|Mjv#FԸ/k]`yt氃h #TR ,ʹ!ubXapZojDvzIAN *̸ JDJ*܎DlA@YAff% IW:?,!`'h ftZEvດ ɸuQDVf]u'uIZŷ?ԕ#_~g)ڮi{6az}Xy Op;>W&<ԭuzzKo7Q>7G s-:;$9wjPNbIٸi$iv+]p7J ^F 6{ŷ47:dQû7Omqn+S-Y$(PMl a~MlŽ.s֌scsج^]r2 ̈,3!#d>h ($ !@|Yۗ)'5_L' iEֹUjR/ITWk~IA}U*sf\/5JZO$Iz=[j![5  gD}GJ]tTjXqaYBU\ D [W,$QR4($W^h3/7=_Sy멷^|᱅Kc"gS~/'oqOmgmEdcRSXl6zӇz EΕ-s>Bcg-.+O}rU ^ѯ`;s;5`b #9 <5"r_ /?=BɁo'[OByH_2|Ѥd"='?RKO͌SyyRƹ._S?jNU0GnaD lD-t3`J:R%|z &"MyTE2al:WlrɟZl@{ZAfCz1L>ɯ_t`F 3AidV[`s0xl 3wgַe9Tq@5%_.7&~C<nyu%!T5\dv$I0E;:w2EԫsD1P @_:읳n !V|$YeOŰP-d6l g 26 vmLC.MtxnKf-bDjـ#ΟL1Ӟ`)xn&2Gi:.*1)'mC6%ӊF6Y{v)}?ZŴ (hL~oKf^D&T ֏ɭ%R #9hEWB=l&S jdHP;R9`%-(0wނ@Q("rJc>hFNy:[ έLAK:ؕY d,v.4X=pӶ?LP [q0}~` Z*tjYټL`?sC;oδ3h Hc@xm>Z4lv:`85¼PH|hWf1x YM YVeՁ( r[%@`ƀ(8 Z܃2}ŝu]zLܱ;srxdX*Z? V\8|8bjS>;$ݢWX oF%m=?[@ޔFXۨ X$MؐOhuGb_lm~];i>\% U%߼rv:E1DF{|qo6zYM7˟܍Ž-|%"(Y63ˤ/ˡXHK]6,zotbQ 0&Ym\ke9S>oOow+C)WVo}w#R.ؾ~w7q9[X-1۔b4@~uȖƽϙo }[k=_RG|7m_m & $fu~Ydk ~!T} /Y_6sm7{ph Oe?8d"lk ^Gȸm6m^ѸR\(JLFF*߲6݉ gGQq$b.$ÅJ]zoYmέ϶j@`SboBS9!9mJr]VbpȖNxQӞq[ T˃v gz2n̤aNw5{\ j!,g0Ȱu*sƆ6na [%hZJs3*5 .\NBB~BһtՌϲ 7?:nlͩ!I. ;&=1sD_=pi ~tmUҲO:wM@TϽ;1sk{+*O|řtכ5:aR.}xGY12 s^lL i9}g]ѠU #y2'y6:Ӄώ6'ũ.@ٵ9RrϿ4rL=Tŗpi7@o7h-ln-:⻌7E1/1}Td͔f> 1=i64ƘbEn{je]2ãᐻTeGٙ},ľ_-}f,i1/»q 3?Q]zk}ދ]S= +G?y_poof[7 BŞ?{I@[ġȶ%_8 y-(T!Fm"p*UN"qĝg$XV]<#!8oֱ!/}r 'p)ǘIw hTU}r;ëv$I).vP_AH6)}T{7Vm9T7?z#w)ޕ]qY:wHy?' Eݶ]S99n96Ks)WŒ{#nՇw?.U8q,WFLzG^\<kP &gΰ5A%m㷰6uGo) "ѣUp1׮s%_rH(/>SM,ue8X~m (y蘗xf ]|$kPW9,.C GXlHmIhM6!N!,'7n!]eéګC*TNDW$xj[EؽWSĄHX(<<]#IL,#,4!=P~ @u3B 17|#ݮKUKyޭz~^޿ %'0{nLE^y檬w}GϡgE|y?ܘe-اRYa!}]ׯ~/Ry*;~] m]7Ofզ-?.@xA~]I K{&N)av47Kƚ-hkH!,%tygʨKDƽz>ַ K{&#šOaF(߮X[z ktR(3MٻJtٿBߞݳD_UyHW?p^6+y';{4ndoUu/$48$F7jw]꬟=&8)={觲?7R3pAF&8B#I3NF2$aC nN~_stA@!鞚а˞ t^FRX$sqъECߎhXJa6ZLo]B.ѵ7{oIj/}c k^=sS:Ӈ4}ɍN ;͒3cLC0Kx`J'/q#goykEp8~J\M`m‚5Ff\{%{y yU&{w/z{UxU,XfƝGg_3xE2,1A&1#lDXUDa͚&pZ.1osb: 76kڽnq"_:%fj"YIBtW=H"w}剗o4^Epenl8=4pb2Kix˦|- P{)\贯@ތ{9^'Øk~AFC۹}B NdT߶/PEo*4x^,-$twcUy k'nxlOI Md_䇥Mo?>_]FٟXޝV}]``[JH: Z5Sg~+V0镐К=?#r73]]Fًf=w. s\rd8z|964)M=S '>]-JNT\D=d+90rmHI\8dZDžUIiJQ;]RDoһ]оѕGk=[KamLFmRB+SQ[Nk~_ǘ+.*ܿ='6 87 ]$^pwWĥj! A(|.{r;#*g:Y=5;8]5ak&n]0&Q Th@P]&'WG][fN mKEt9mm׶BslWystbg0CçϬ'Gۉs_e!*$ZYhψ} t4AT}j&CP8>MC欿IP~ ;&Aw'= h\L3Qj 95 7Κ9ЪqH2@cD.i֪Aԡ/^>u#'>*k/K ?p~dkɥ$k2㗖~}ڴǭ |2磗~}ڸbEj)P 9c7IrIɚ*/K$53%IY~>y^8]ng?W NV7_>th1ϺbQ5: lpS-=u[D( ǭ{~,Զh*χ-Pu/'( +W>K^څ\pk[atc*x_IZoyBp7p^^Pv@&> JU5gKO!HQMC-k-,>LzJ\XxP^ED(:p&K=,DD!2R-y<% uqݗ9QuduyA7-=u{rTkOզ绵Kr=8?s <q35;b<3yС !&GZ{d#u}K?r okg</C$198JR!JoE`R;A?jYמ9 @ѵks+5@|Qay*OQ[RLr# <NaE;rn?r<#< T?ed3c`W_wu7=ޠ[Wg 걲utr 卾| dGO+펻|s:ɕv]m VUC$aEQx=G=)>^MG Pl.VLn7tKFVf5wwqPDQ^9:{viT7qWU8*X+ M;:E)V&׀ˤg$v#_h"8.K3,$j_z(WhhixjJ·4FѪw)Sǖ/]kC* -ygOdsgqmz'V$E="R+/f.|jĝM/g8#f~#w6S P$zJNd眮_ Ob+ jCD P,qn{cԻٕ'O"Rr[ϳ;%4fÔJ*%ڭxvय़O^EOBTsbotkJ"yю5{-{uȱs^x{IuDJqXվj2EsBd[¯% EI:DTS֭/t M'rJ͉ {Puē~Zy?׻Ab\! >ItA`gmY`a.VZe[GZ0){ŇW+Z?Okծv$f:$q)qpQ8/H@g҅I贷%öcG;>L)OqP,p$M""gI贇ɷ,ߋ+~tH :C%("8Bo{ ƑDᡭ:ı:@jے0ռ =!X<7) ϩ#d1m75-<{P Oy&ӈP⬛?{lOpEݷ| _wV]߹R AUjN ZvmZ?кf7_a>rrջ$werouz>@^ @hA鍒v}tr_ft\@-wHĥޚph٪W[ IDATn=@q=qvj͡~,x~E]22GG2Ճ1nw[π5 I]c 6Egz)/GhӦm-ù> fGtzsx)M8Ƹ=ZtSsS͖s::_VgU D LE5 /-:RuCJNYڃҺeHgюl bܰCZon)bUmtW}FP_%.no 2a"/zqT#[>QozAH"w;uxt6m۶n<1A  (\A/2]]Q}d>e ]+]7bTe^o ڴm֪mQ wΟh-~upg^6aaRі_\2v[:mq7?0n.y-.+yk\r}H ˪t&U9}>.>ʏ =K&.򭷖!ak @s1=aE^ wm|Qo KC]+ Ng<37H5KZ>Bvc7S"@sEMWP{'_ywr ~[++Nx$t'C,mZ/OX/eE )Wz^jf';|n/1E>,*Ӱ<)x..8:]%gg?&-u0g 6[a4|cxx93^eAH{%)ۨN%:^\[}<Miv Zl."] c͛"¯gHuӣ*~+xv龃b^ї^P /yѿf8#WziNfE_!V^kQET}Ѻy|Ÿ_:1 է.zէD{tŗkkzql'<>{!8|ÛJ2Ƶמ䒱#<=5䍏qQ sXpPeae#Lg쐿WPQyb>1_>t#47o /֜I^WΔDIq+e C|Z>Swp[3} r8ϲ<&=(*8)Mʕkvϝ}|ʇv0˝EkyX -KfD tv|~^GXRye/0c$ 6P$ ƽ8qEÅ}LxjQּp<[ֹ VÆ+Ђ/G:־PmzM DT#Bmc=('sg؂q0`N3@Aq\59oٯ>wlcS>@&st3YEqoJhZt[Ks,7) T&sǪcԞ!FzfW摎*jEcq:lcGkfYG\t:bbNH/zW! IDmAaƊ 5g htHhKOS1:L/Tz޷6Po술}P.ɟe_59:˽'iKQ7 0;he]mkcMUD#0,␡9ki"^F1L>& GTzml hHlC9dŀ3x|WʑETX;kv~9~ ք:o4~Zh\kvd=X iF\'㭬ˢQZL5 )q['h"ї!J6B{fyְf\=5+]b/!4 )_5Ȓ\`h uיr8vE&כb,:'20L%AeXj5 bf(V&/|+,1Qe1Zqq<1a\#ju6l7 x=j S5S|# ՙ(8Tp_ެ+xK~-eBUmsr鴱 cdx+wB@ @C !hni0JیPkI#ۘe a1+^(3֬zZf%c!~sҧKs$t%8d6Ar>[P eB@$e53JAauڲL"ZhO߀Gph'50@3;?\$m='- 4\P~Yfa>y }hEՅhֺ\G&!o !v#Zܤe?c-4&g2z 4ZC; Lv@OF`iQd6UM/i̩}lE#Ui쳨Eg0T0!,KAK'?rs`} і \߫h,\ V8>36DKzB-4yC( K1Ixø<2w>V ~I-e^tXџ6#8xn$W+j٠ɬ xLK;cȏ s|ͪ(uEIȈDUMՎ\zt`cΌ/] L"TWy. TrTwHXLH HY@0j!#_5h6]Vi̬Vf7ʜڐ%lZFn A8^э@dZ8~%._`TbiQKYA'3,K FK~@U&w!U]Ȍ%1ە|# '2g+:۲6F~1c"7>= r۪BDAݺk>,ڰol&B15G`^˯k(ճy!hMgF&yIr4<'Q5/y[aXml+3EűP!E7ĉ/ t}ѷוE_ZLd$E}v'=g̸!@+al\Y' Y_Yiaq ".f4,GdtՇa Dn0L)I|J2\ ܴ4'57-iV(GxsC=f":XjX@)@FMs7%%bj;6l_ܧrC-{Nrۆ-tg(͙;6~v|=юfQ;6n۱1sdž̭>k`$ }U:rń1߂v, l9biC4q1 c`i躆BJurOl" -{m;6lqmdAܢ6D6M33?'5HDF`4Cm&ko>P%EQ bk0hT,RJTF5AsȆVL# /UPMW6;_޲+ԲOgeL"~_~sxŐIcyh4Hx{Bfg%UK֡> *O\xף ;Y8y8աDE^c3GN2j|&wg]o6~̗$$k۷w(0F25duK60g*u0%L# m[j8t2 0Vn-t0VSFkެ \*GaM3сum^޵+zYdWI)GRsR4},ILyRsF715XrlO@(=0ܴuu1/-xZl7HZz<%jz11%+5575 ' (򻭞qV11=cAq| a#&IMMMޞEG,`شԔ >$g&ո0r>0$_+tnib=7:d%wdތ[em_:m"J<~(sJPqЁCY<^.=z$_*_h.-D6x ;^,ٵ'{[GrǥdVT8x`q7P,ٽ'F a.93܄:kòwpăw ~NXov!_PJalٿuo9̺\@z V}2 C0 #5 ][#$.\ / ӕL%$hZ|?FK8>g |"̓:_RʗaK'ճ$ \ئ#GCC>5olkV־wGhqԮJtR1C76VDG#r+:[7"!9rx]=6 '?!r{%3܎w%[r%x\CLJ jE ELM&y{_9 ˪;_Rϗ\=4'?!wr6Q+_9|UYΙpa}D}C[\ ye-. xIt~>1{}j+_GuOnpO˧LRMjͪfw[&4"Ť+߁,\~SF!yEVuW=ͪEqr˥|3gʔX25W,\5M<>W"b8.Aejx H0#A # x_٥P>G!3FP8.d /Dw2Cч *.L:CP0>VCKJ?v<=DJd;$q?[VaY; .,)#ىU4tB#fd$}OYpzWd_rČwKFHB3Q\) ފ<Ȝ_:iP@mt4FފQБ@W㏈_ UDy_stWyt<~!21 *d=* *!R0x2a!SVo۱aӊwL\W__VC;vU1 [6dJsԆ|"sT%+=R ]T▴?7%'F嶵@@& u6('{m-pX@ؘiņ@PH@gr&H!%)`Kpg]Wm69GSrS < lLIbCń|gh1c, PgrfBo/s%YGyz״KvZ6qg75/AOކŇ^>8YkӉSߌØt@$1N$ "diRk֐)*P"$2 *V?k긕*Ah}lJ^ǪAaWC(5d FC63Eɦ#_Ѷ%ENRL) \a۝@f 0\9tz kn++V.mC_^!4_eywDu 5:Sk!lT\h HBب5[og5qvP.B1£ꯪMvH⮲;BJS LL#\FX:j/3qgE0BE ߶}/9kLL8mz'V|Ht{U^J3|zĝM4s s\~8LYfueK==gQ[ W79{pA/ a1SjZ;J+͹&!t44 Uhm;_(; `/  2lxE V]hR|넻vpGHP{湲/eS{ :,@^"Z!ȅF|E٢y+CC[yFD#2#nr$Tx܅|ZZ:Ҳ7kָ%U k#$xήʵJ'M(-{fDh,{2u]Ѝ@=\øiQo8$e&671.$=drӵ8"_E*'Z^Ul.\ ?q举NY*j }?_8y_R\_':NLݚ{ʭ}x=3i Br@E@AQ)ҋ G@D@Qt#M)ҥJ PPJ@dz?LeB<;O}ﻬ. ^ϊ+j調4H9HTa⮣5 `ލǞW5ڵ[lL?w^SZm_06]a[ƣw}FF?ΙBWc<\;&:5N.0V5"V]v*: vyCϣ|;|Լi׭^y6unC@\-W֍ \Sw$_?I麓D9<@(R.0)`#LQII%FPrC%FN(֑7?Z>q U4fJJrjƒ}(#Ϛ3Id6,nڻ/ɷj3B%!JF-e7l̜DI!_r*KG_33-|mɅ2 ,]ceHs-B2^AsތD9^.U+R6$[wthMFkuf:3zn=M`^HV̬#NaQ+0p?W`ΛUDҵ?_>#w/J!^C ¢7$υ_c]^:iJ IDATٴr`-9Y,W fϺDQoU>m~^lk{pg$GOZ%9;BISMQJpfdf>]6^ "Ojq Rڥ۞x(Le ઽBa Un,B!bΤ^e)M#K/$ R$$K{Wgo97'm:\19܊(5xځfF g_+c=(4)b(r$:ȋI`otMqY >]݆ eDXȃ̤H`G nIIxstgWC# Jp/ z}Q) ۣA@ ԧFoDv/;]߂|89>."ZFWڊP_T-m&=|;[ x%[eH&^BX(H'u7ybqS {R~M/de `@<b` k_d-5qh}Y؊Kv;}BUf00n$.e >:l%2aqP ܬ)jhvDT<|F?C1C=|DW1۩0)``JfGX. [zkZ(u'wZKK ^ eB*nTPjbj:wXk]KEY5ED ,n&Q[H 4!atSW"IYH{=ɗe9?\/%A[+@%$EKwHG _ â!L^+Q݄>K1B]ȁBB-ʄ 9SE( gfYbK~X3M0eWm(*_>i9&OJO: M p; T姨 .I KFS:K8~I9̃@jjCs4 EA(ţd1资s%#P'41CNZ% JJ-D%~/kf)7::_@z4Fnxz$1鯅B6<%Lɽ . mVL/P^"ASXp"dJ$+ /<`/f2DBNI*,[bRҢab\[@Ȓnp:YEj 5;T]wYn(RRNTP,yMOZ\XU=5؅%se,)١r!; /6JDe9bƪm VHٮl8 \qkEpE(wK{O nb Nj8~@! t(;T!OƮ%SvH@@'҆ u >0v9k~vd****H=7*%LEkZv<1Tx9}]f*2L/D+25x(*Irb nRC1|~0ɲ>noC^v;!^2$zooEs+;Yω#_gB@~]៣{ϻ/ ||8M|`]Y {wށ +pN/㣕F'd]ˋp7q䉕U29=.C"KZ!f8_0uZTc80E즕 @^}R$r!ܝVP2L8F!5[0D9 cAqeF8D<\n%r ׁ ɰ'*KYKRCJb)G=M(r*^hC4@Vx F( -sᲥHLG)26#JB,=%s1&gmV9B%gС. 5|xd ;~s ߨ 0uZԮڸ yae~C7XWtsQ׆雫&bW|\&E?{VXxߛzGꕶ¦"%/ioڶr{v?+~x7ؚYF43okc=gu|^h5J-+1ZZʀ=חZ(1ì4s?NEI&i{!ݢ@TIU]Ucc{dD&U^o?"u7E˦.^TF1,/yrc9PZ3ݜ|z\bmjb+{r "Wa~zi01K <| 4nXG y.r8CǏ;D.CĘm#(+\w |ӻ@l$C"_dfe#/D"w.#2%Gޞw{4ƒ H"~T6!嵃E: :6G, H۳{w1| LjgʷÏNo9nǍqvvɅU{Y(zY`}=`E (|0a@`X@rmqd5QY=muo@#s5߿Օ?pweG1o?̰Ó̸t{ʾ6B۰_JW\(=b*r 2J!=i1"G/sWsES+*w*HyT0YX=`ڨ{z(nQy'Ʉ2 Gdr3=v>qjzՠ =5$UR%kH SF@S1IKeQ؞ (Jk" 3B*U# bׯQ>j=:2sśԈ7{kUdIV}v/C$! 5#Y>UO Ngۙ;A=&+~8NeSY7{R+Yy=6\ho?^\SҾ) gڽbδz?R)`b~IsJU\A`ɓw֎^:/9~ eJwK3v^1Wvch_kƒ_0"rWX<B rbv q$dpBA]GVwsdyTPsUyqd{R;;Ot)v?~\Θ =_\X@s|D!iOKXE-%^͟95}]W>㝛;)&#?l_ٻR߂ҬO3|6i[.rBBtFxF52b8^]c xUז 4d8YKbzB6<{H!YE)c^DMiy+q8͡zď;'8?v'Hn$5nX,fw 7/0%!D /T!@DOSP@D]yH4/ T|}lmɊ?wFkjfm#RUHcF ~Jamq9oS׫ZSSrlq|}6]Ym^2#8rk̘Fjk"!]a_K=Pi襓&2ɁPQH+qvya_ L%Z*Z+4.0I'pw5,h]⢙DW4wJUI1KLKFީn0T~gh'm.%([ǶO\XA{D`vx}bϠpy ReL.%q@ oOrXVYdli]RtLT ɺBADT(,[nI)I<,xe_4zQ/BҐNrJn?rU/J4G Lz-dr|P(WKDɛr!3wfu,ڀ)jtte߹lǕllM^BTd ^ !ZcvbT'«+LRR%׽7*b^6=CIO7V3 =m,lT?f-<6wUUű̵Iy0"(;-AjH+g-jxZP.X5B.,Pc ̻MIž=2"ڮEegb [h;#rg>t4p5\$,38,P(i׌@vZkLPjh PMQԋ<9EAJ\Nv=SyQiIA-6&=SyvUiژ)Yj-DJOJi\`A`GaBe!i 7i:([OdGw⟄mQK(2r,"}P&|!D3!IUdO[˟E 1O<ąZ*dBK&]5Y>Fר洐W~!ׁ. dGHAvEAX$Ǣ\d?1 v Ԁ.zmΉ me068=Ԡ9 4)20Ϭ'* w-/&dY3n(rM!|ޮͧWWv]rnאޞ_gwܾND,XHb..\9w)ܥ+5ot: Rc: "m9w)Ř~;c_$Z &m GЅFt䑝OZ蘟opsb_rҥ?-6# z0Iz%BĠ^wfAX3$MU_F H=`kk._1uڎ\ĕ WO۵n}d<]׷R}og5:! a "R| IDAT?ŠlV%FarnPH`|/=$W"Spj 8?YMͣ߿֡o&C?$mnVu &͎~HT+ߝT&dhNϜg,}4"bkZoj ^?%q*1m{ݑ3k ci?N/=Ϝ%W= a'UrYvcؿ#{-Y0̶mYq4n߾bG ,]A[l;Pů,EU >>&F -+yQsL҃#.zؽ,ѳ  l>҅l۾531Jqp.[?=&|WPv7# " l;+VHax`4Th4ҋ NJ^̹Ԍ%k)? ٖyL- 4=}G]jFKNS3m/$rນ[S}lYqG7̛f.؟]\="T~PLrAV=:I r2F4$%Fӷx. o쾧W2Ԗ琈saOjn8sQK9{sCڙ{n+,Na>h]ЧTNXc`!sigux/)ҺtQ{w [_wz^h?qaN` tK,$(`/MN)of#gb!LcsZKqyr]Y) 2/Q;kc[1'y܋W(>܇SM|=: lRB* A, 89 SӋ/[Qr<)\زo5cr?H2yv=rp]A?g|&܊9,gHB?]6ni_Z4>O>owε]rؼ̓oXخ׍h]b7O}9C8oy\5κ 58d6=oSD#D!=MR[k,^a-hE ATBp[Er'g= <{GOyD12g~޻=,>nԦ(0βE"p 63W`èyQC \w$8+HĦt:{ƵܰFJq,K˒KhkX ޤ\A\#3ɕ۹ajG Y mK_1]qvs7t`֙:oܑq5 P^AK(iK꩓\NUuz;yE{wy,Nԓ'#uzOy`gpkMO,}ʥW3x-s3VYWaRXd^zSϋ=vReQ9mD9X6hi伖>a:u(oIfG@|x Z@H NIm'I9GVa_ G/B=r_ע$U;Ǐr"X|#;qg`IKhjXpg+4 F<7KӚ뛳dȌ]9viZ}s z3i֨9hхj,$9o4Jϫm/}Ɣ/".7s>2oػA.-.ve* CR<-!UiTdw C`uOI$)pWᖿ0OR\ZOYw2V/H,NtG?eeCLIjOL/]p*~]Px5b~\A]чEzWܬ2uWH<|*?5/Nk&556}7IfAu9iACvЎμH @TiAzzju=3>te=rE'r$6ϮִFl@6Ō9 o{v]"Q1X*+yx=Z<ɛNLx/<(;%NgHw:|3^8jG6 $KdۃR:Z!.\2@ le{ׇ?x8HZNg>/^5ei|ٷ/ BP%3-.? hثSȶC%o9 \>}gWp3A〞>G1ĢI[$9e?i>Wb`;a_B>pw+-{2ޥGԆ PG`z,GR.DBJ(iߡ3vz>3\H+$Ї֬ϤPA'HuAL2SP].f%ת `O+JU[1ыf,Cx49dD\\tSfY3?\:#zPK"e7mPqy͹iU\%h(S)GMA-%ىe8K3Gb~Xk3 X.<'SfJmc`M]l5:0[-F,Y1582j]v&1td G7>VyV-Z=ωv͏#L`L)r\7]`ޔ/;6-{QU~";L9Iϑ6;O@3vKKT#.6S[?zoIeT޼DZ۵j٪?hl+,U%Fwc3}ZT- `Z"f[MV00B}}L2cOq۳gV^`_#P~tkae,4%-ICHFN58 Bk:І m>mOX >&Eb~!Dk%mގpS^'C_y3!׎3|!C7$=7›ʼKry$vP%I*")#f叀ndo֧I~M5)ap.-2Z?XTcϫG{|~lpl55l͌} ]ݖ̨De y~מ}ho4vR:1hs_tCagd3җ 2iɉI)3r-) ۹oZYt_l3XsمmJ1Dt!`CHs'RɪuG.(|S:{X| ;[sЄݛՎ(W+Zʊ}T@ٗwF; }|t9Е(J_Tmp_w&PfuAr5֫YGQ"QAң+ Eۓvr-vyyvD?v'8uj-|6½L KWׄ2!A>f4'ߕ\nmkhoЊqT B[! Z2sf;̿wnOA0 bܱYONLxmYMG/3J(筵Uԯ[SZ<㙥挓b&3<4~iGɃYHmFԮ[V!rzuT ҹiܶǸy z$YSۺ?ѭI͚1ΙBS6_V.asqCHԫSN0?=(k:%F'tAZdTBtWV@"j׫S'"%w h1mլ}Eu=OtY=;6=Z֯հMF@k&ƽݨroԞy*Wz oͷ}P^y]z䕊qt33r _<[ N0Jii ;r 9혅#+9{N±œW'qbƴ:vv)Su(¯Λ9p@}] d}uw9vLTBΔKl# =AMM =yٖ[f~Qt )q'X+v$7Dߴ:4OZi|>C9-:.`ȯ aYc9PꋟZyg[Ğuq OCzT?>BZ|K2[u#h˰qg8͎'j+p7]0O6,y).?s/ko7usR/[זqbuM/yb+h ɷm32%Ĕ e+ Cʔp S(EXc"H g$k2l!r(&*HA⮣Q@uSCO5k LC EDNgvRKhe+eGE$(b|[jIUfjP Fb*b1cDr2aA3bxu@D!cU&{AQ{$㫨) nܚ䪜bߔ2A3 PYd3zdXBBVSLGwx! 2Wv"ky1%BYA+m  54Iv)* ~֨B2ӝ'e=6?FEYei߳\@(81\ g]w4/,I܋/"SDF$/[ Ŋ{G68MRDrQni^ФG5z9L +W!>(/CzxQB:[|[J$.~X#ӒV/Jr#?ž &&TdP`&&J+Dj(]d=-Ul$ΰ9XQ˼׏EDʺSǩ&}^J$i!Q3Ȅ $W=L[ƍؽ6(| [5*obFΌXA[Ԭ{qIJ{S%DXPp刾>30^`UᇌZ@b &騋*eT Atl@FSVM, Ε;Ĵ3YwAljKYOQ֤ kza ;HUdTu98Eo'Ջg+Iۍ䞀PDbAVЙ›{砤Q=!TYxͫL DrӆnLT?Vy# TG.uU,M"qM:X%K/K[[팢Gs|$r]8jr/'gg?0"KPK H4FE8ad4i,Q5cHjI-\˨!48$_AFy_ 'HV+= nLP%B~D!/)FT,B* UOխz8ʛ #7Tlp;ǚA@qCm dYQ%7;B F a1ДE{JD'p@ J$ ZhbbPۺ,3I2.ij +Fh"KT)iu> )~%ޯIkyg@=[C?S%ҪED$fdhXl%,PHqӋ^M9?OA2J[<)h uGW779X[bPd4j)0wQ%;6!\4a*#w]ڽ՟foiPWaH$<`nr9;)y ~ >{JlZyId +kOrwdzK`roo;odi cQQעoM+ bEE_9^ŽL<<,JgNx!Eٞ>4&m Gց?Yr$3ܪ`FjeTǐY!2|*u8/[x )@XGMnEsɴBEznR@@ڼZ|'d_]zGge?.PG~ûk\_f]~,XmW|WfCU1(Z-bw(y_㰷 u{> T k==R%#WVJ-R-5çrxٲI]Ҋlz`"]''s#f:i\%^1sgNH&yG}Ѷ-n+dM#uOGQA Hsوm Sӧ5.9:ç}ժ(+ |lQ 蒒m!J +8M >H62X?2jA$~ϼzqhaS,&o°>]>^asLf Un5xj"BYC IDATJZF-{9D *m]yxUR|<7E<>U^mwk]O6҄S^s%dd݁ nZ{mON{z,v|-9 ".؞TB{*b0 bAE Ͱ@v[@c": Z“GYhm۷#gƙJE6n߾R)O|[[(8=ni (gfd;qoݨ?cwC*(̣=&+i_ߙSS<&ϖIuJr `ƜSo9zQW;WVv܋s;ڣG?-'j%컔VH~gڈNv{&Å_ b^8{z c㥫._{`Ե;W־v+._=c^A8w"pCnV>||׫a;flٝߚ \AEi9jKW/W#&Hü__vr#x"ɧ4eb[G[ê/%˼f̽:ỎKfgn/*6m9_bά;.G2aTxuŠ/DE_;{x7*P9Mf{?FE_ t}þkQwOI𑘀89\$! Yhw֔V_;<{G꼎}" pƲ6w{XxS 3F{}WoeZeچW>K 9x@R b w9\Bc̸/@o~R:\#[#` _\pϣ#,O/99s:O@@?nWҟGgegqh_B34kT^>e_̓?\xv믽cB}m!N{؏^S wMtQ-,|qAr<ܢyKͫ9fT` r!f紾>\O7%ۻ}~Krޘ2I @`n5l&A7/.Mk>gK8]>u}&{*T7(8u|ˁFq]AEa%ir+zqD2U£Kw>IM9x3"peZje>hݩ?W->SyQ%_'aꝓmҕXו%zԙ}s:v7 ^,Yg̴KI1]^9cxgBԏ]Ë2r!ۄ׺EP%tR1_9]8~zU0SF.r"f(_[%.Ƙ}[)֛Ks?ȧj+Nو 5yu'T]@#&Lva$1}R#]Yr$%P@ Pj7]u< hj9z`  s|Z.zWs8MNSAk(k _Ky_ۖg}?-FF9*Jںn%?L=yߗ[x {= ^zk.|xTS{}ۘO,Xs<.5])w}o<}K  0vYyԏ]r G9Q˖^_~~#2KrbRO]v>{ީ Md]ߺ }yw{`}s= !fK*`pa\+:%ލ?Jʥ;&^98OtN}I>uJS/~^5s((j8$v`ʆ;wu=}.\62بvlpNrWٞeju>CG_P{;'Iid|r-̪f'/H$L!)GAͥEK~棇ܢ!y_D2ާݛӣNɞs-7Ao.v̜'YZNeWj b>hJSȨV#D{? =lUx*z_y$ʶtODڜe@y@Wf q&FxΓC/5$q|~v|CBN %r3(yZWdcM"g܍n}ؗC?9c{? Y -D,^Nx"Kp{~z.5,_7]r@F %+!j_BԾ-}o~=]#O<<-K?Dh'gi?L9.%Xp}NZҦEW:Q=r`Rs9b[=x$Tb&%Og $@J96KU/p,5;M?1voa7k5BChM'>ACc¯O'eh_]LcשC2۔K(4~3f?cTPh|@%]PEyu޴^PC rSb0.!" yןn^֤^Pv|T)j`NU܂t3ͨsFX2n}W5yXjwhPv稈,v;y8Kw6 uA6?2h#ǡ#2r/~s=#""tZS!ud3ED~ϊiX8=rGY(y+,Y"ʻOVP&aEʽR#U녚>sfJvSI6'~y!hά U sW1Pj({#&]PEy@S䑔yƮl*x}99Vv(lh[bt799%9%TZeؽo ?jyr+Ѧ#5ϫ>uTV2 9Mݿ#Q}wӄדj˄8~[jGWJb(;zgW]A!rRUl۴з>:O^onڨqw̞zPl!*EMyhGEPBI+²J ?ip5Z<ҽL լ8a@#qJߕ\nmklʰJvO,BW/_Bcѿ\Pߪ񉺟;aGxe?,֝xb}OSFm>t{HXevݩk^_-nyv"4^Y{Z}_}Õ?=^OgιӍ m6t@tM9Wev/9ls<+UIUv"}w$-)5ԭWnr.F}&9h'u*r5թ[רSN2zw M}KΜ":DƋjŜ>?UW }[Fno \M^ᡡKifc\I*L?5ʧ;ԬPաc9em}_pWK$ d]9.\#QlH5[<MR5qƖV{6_vOS9=rM΅KF^k5G|^A(4ÛOp΃8kw;.ߗv#:ԉOA8n[M]%(+I\|5mg}=5w`1/L|XhɵOʅ ;rdKA"X|""PQQH1 GV4r'/[S̛٩'N>g~}d޴^uVȔ4pȌ90:h6!2_8؎h/2% [m4-l[Gsٷv͜!Ŭ 4)1"]I¾3 NhҘwfuhctSLJɻ"/Y}{lsa25  yH;%5D8 )RWe7߽xwgpwݵ8>x͙@O9r0]ɾC;5?ݹh;3l IEA@ " J%*A0!" L䰑%s\vݙqS 3~{^Y&зԩs*13ͅZt.h*=離zsU L=9m9t L.o*0dr(_8tf)O+FH~W()y;ʓ)єQ ^W4.o08ji$"ET/B^Y1jI4f?l'gu$Dev VVkija(z3ؽLOT)![FM̤^P*[nv~R5rO\Wlz&Xמ>a5~ۙ?+x8sC/CITE_U}Mv]¿ ҶV9O[ǘ\pg)+V!Zbr{?0K9Rh#Kz{@g oxR[MxN1 m==>D*cԗ> Œh}Dׅg?YEG4v6,$nTaX):k1deѕ{K@2Wf9YdS` (L. "C!!}mhe힮 Vi; TuLU|0pqI r5'n T¬!C̝iA-rU+Po"7CtB Dֶq"MqxloxjfaѲ%8 ּMaB[Y P$jBA#]U yzWG q9D@Girx{B<8GpwrsE1LsD-W;EŜDb!36s2YVCrTC|݋"67g9]?ɪd4]Q0|jmw&CcEr&Lu $%1dۢQ>ن{ ϓl-+_57kE;X؎Q9qJS\3ltkIDD],pZ#M.|{2nA^187vOYң( _t]6mV y^n>D?Gni0#2E `tHTlEU:j+}z0je{}l kӴQJJ ,BRݜ`C մ0jl-b@~Eq!Czt_)t8/]X;MnQ IW n}4ϔr䅁[F F?Χ*K^x(%gfUb0:8nJho`BrDp2Y=H핥:ž-v]66'٪Ặ1ZrIH@Fh(X|8WY$O&A=ͺGwhxӧle~7B{jLJTUՌkWn8d>EQYcyHUCP(qNB׬p2c 1hY 0@]zL{8o&N*Psc* }1 c>} )bDh[˯Ii?u)̈́D+̓T9@\r$✛k6M` $v3$n.U Ŗ+3M"HZD^O݅|p4i+פо\i,IV!hy`I KLq<;']5`@윴cWnpi ]\ȵ)ɤ1ij.!]\h0*! S!sEEvM)x֢fHVe\G !}Lja)]EuA"$yԤ`,$+6Q6W$/ƨ5y5ģΈy*a#w%ktmvuÊd0!{e .s;p&H[\7-w{ar]j裌wKI}/`լBCđѩ^z& tdrQa1m=بcRo!Cw:r:ͫ(DwxKx\۫MTUCȴlؤ‹9m^ 0_KNkݢbyO !UUY?nj7˜SE;mEasO}m Ч0Ea c q|S߬竷:v]|5'=!mMD1 'H:CuYͺwmY|˺(뱣B -I{\p-8m D#"-yK\Sm;]Ϗ\Cq=<}.X'Ɣ/]4a-U]AC*^M,s6Ars dnD0q_tю^kk<~{!߆_h[#Q7]cF!~3y$%P(2grέ^K-͹6&ڝ(>Olp&B&Rշ&j3_]u>~)ST/w; !ڳT|;D.6*T5 G/Ub\R3>cݾ KWa肅-7L[|ә|<0c\#[NMB0&Ka$oi F "ZmQ0AQ(nn,E4 $)p!@`Y71,N,̉@\LQ.?Fs fB 9Gpէ!Fhm7v lN.$6 Sc*;S 颢SŰj v=ۂt~LwStV* %"PƹY1Ir6}s➌/"Qג/5'Dn 3k G}PdU1U#ͳ gs-E ٕ0xĤǛt`Ț) _e0q}wrm/&Ddtp*#y*>\PK6 0Ѧ+\59zj"$9 y03G6O\?]ϚZ['Ċ7פEsϨ;Pd2<Ӏ k[Z@e0r ՗8څ#0qQ(9W(uMFyAUǠDqpq7ِLUuY >'?&ru"TNY):i6*0+WivQe-hohgL~h n@h4NX'Bj, y EI.U7"YCïSc1P/D "̃vF?ݰؼ%gU+~kJ?uL4rn*&}3^=?=tV-cֶc:ԍ: f+spI :/@N,Cmk7 ҳY־[""EB 7Us&Bd xx+aKb <'s0V]6]\~$dzɬWTde-sՠsUUq$خq#/ݰhߦ%sW [4査ac!#0Ǡ 7.c"oR3d]vQ"3k~.mBLUy80d Q,Wmq.ި[qLa}B`8q ׃0 CKUj,W!N쵤bstQV[zLn䍁.90a%t0,N;ܸ]a˹Qб{.)ҧ`nL!Xaz%"le3+&ĶU&Dj;)PboNU qW0"t^fuHW16iONxAiP=Gjy_[:}zSO|oڃ=3sP=]:1X #FC8%f@0XE c̒6kuʱLEj-0cC C00S,XEQ24;4 Kg=~رǎ;vԍ e_9yl\S'*udίKk-QRto ̽ ܪտKߺ;r,qHU_)3g<4btfU˖\Yz  Tz[թTHʍ꾳*WU5 W`"=Hא PZ?)8cr4W(_O }Cl }硢Kh*znE Qc|/c(HF4BND—P7khGF%qMؓ9'1.uHi͗K6{<>]nXՊaY65[U8ۙQ :d@TҢ\{C)J<8/ˍA7q9vJ,^ٓmZ.r6\ YAł,Ҿ^J>`֩t< 7~d;w59 (O~E.M7m_錰L'"g,˶?s>1o]#[VT\KӤꪥ[ iit#Xʘ8*͍]WFqׂ'~oBM\ùz=m\ 3s^~yƤ\h/9绷5gӣ)Ҹτvߝ?KRĈu^34] 8M6`+o^n]#K*S< zU )(ujs t2|q0H.h\ 'U?S{ 9V+f:IџHo1TƘ@n)TtF"8DE9\g9j"";=pNg˓Dpv f\v`FU6u,(Xt? Eyc?1M(%Di PkE@^J1GZeK+FXh4"'J$ޢiaM G$NzZ쩊 94Jӌ'y?mH|s&mDEjy\"`V=13(^qӍ{k:phOQ! 2|~?\ Lm>q7%Q4D9u5uqɱݜxOP_Csug1#M} 2Cİ- q*){q4Cnrr[wox'@(yNGH’Br0\F/\_ ޚ.{WX8BI-WhiK.:zz8 ךq( ' mfJ+1edyJ,Pz^Dz퇄(;DY-rY(n4d8q<$3O8 h|pٚ:#(u8p !nzej] \G{ tQW\ ! 2f0j Ϙ:XzTpoR\vșEm^ Dt%m& !N*@*~\&핺)"ڼjlM93&b{C\>1TUn~*;*w}#ˍDyնeUF.Xp^vf&'E Sd= qvn"a@izfmCfׂVg1CcHAA|Es=_ӧ܅xaj,=3Qde"L"[>ھ;P(iZ n%$p9QRuv aZ4NO ;a0yn%ʭK $ubG'0ʄ䐙h2QqC(]Bf0*qI+Fh| _+CǮXYCd:vĄ@/1q#Sx` rj$Iڙ9r,H RR ܉)[)oʙm ^pڹy{m&(a#lҝHBQLCdHyApt3[wW9keqX{ ad]":RhKۋ*Bg48Jj2fM!M I,z7Jْ`ի#fq+ےB1pY-~Ů2 f[Q&uL)1.Z3Iҗ.cz 9HJGd6_ [|I Iu$RFEG%~lPKhe ]gm?P_4WլCDa8rryIlE{톢ͫ&ďZq`w-aah!o?Y84I\vK ?KJڲ=i}+9{_v7%kN*٤)x%1uZB<ۇn؄ }O=.-۬\[b;A\֩ a}]>_i-G֋F1~+\&FQU<4%(=+zE=ưyL7mȺ>mR0 5$ qm{M;;*`f1EZZdը?婪PHhLI圫\սIռ5Ja#rB!Uծٳ~=`( Tr.y4c $ΫcMw ;zV2M [o4>1)u[R}+ _ k[\10s6,|u!6 [rn6Xű[oeegededp<DVVN+%Q\gɾukGUN@)XlWyc^;+̬w)"/>uCyA^ڥypԚ3+ 8b wX錔-ے?ےS%mtQ&Mr@A|4|25_m9M $cd-Wp,.D W "]Uё7",iTHGhA_59%arP( FlևLdH19Pcʔo(LͯX|nOwZu-tRQQӗNޖyw5+@)m+?G3y5;e]49 #a`֣֬0m"PجK=>d_[Ӷ'(<3 tde^=\bhRٶac5ߟ:8#dP+* jDLݱa1# 'Mw@!lԍQ75Q4гt6lG "x0mD+ēÄa;Ջk%ul膒l vWnp+SAIiH`a` )4B3ѐބR@G5dy;B7_ 9,<UҖyf9wJ=G#ۍݝu~Ň۱UL[&iZ:-\"@`py9N%yvcZ xi$A1@AҥV'Ӈ-mQ@{}*jy= vog;*߲cO<Hځ/}63NcDz%_ZiS 7%am :a̳7ӪP&tPGr\q-&|'WVZ*j>>r{6dUv@b,-Zŭ WjjUTGCN`O88_dњ?} #e¨*TEzl$<>񦿜5WD?u+%H:@htL6% }eGwv[Smwgt%} ɩ69cuăj{m|sz{s 7O߳o}_W JO~Y-y| |{,ܞ0}@ SlOIݺ(C@VYO-i: 2&Pq 9yKVo#}raPe+Fѭ'/mB6( :_ެyYl|՚!s5Ii;65S_oM&_?mʄ ߾m-ɛQ#NA٫%mٮy3}ۍk>mޚ;s^ӯol\mutʖi;~kSW {mڞhxR R)ii e)ۓ ,(r;N.^HBvm9'BUUqU$%oς +M=L,X7K7%m\0eI8q+I\Qśya-[?cejrֿv.@<{ )VТkc6w5|c҄ G<[>t(V/ӧrc)˧Mj5n߿o{v{nHݖ`ؕiXR[޷Ԓ}I6!MoDL =i4 SYe{¿?ݬ5 ?sÉTm*7D#&"w13"^Ԯ/Pm`l?s~.G ~N{+fG`zVG.n/Tw۵jʐҍ\40Km۾9t;W(E[׭_|_(x`Cj#[ykzy]&y཯?!tjkeŜԯ@_^~[*:y[nm*z73lVTe;scazcz遐8蚤v9*"իY [4UkN40뭗ڴ5tQ;e5to|GkK>ۡJ0o큓߯wW:<=:Ф"IчiY9'Z|3Oіk|v1in r)\۫n}s*^J>Y0Zo ’|ä#W~Ó3 Π/=u:Ǚd;wiʟT r|7j za~gt2c @DlӮ!;jWRwv:\ߤƪ `P%|M{Ûysf;S?mz׷;>l41=~@v+/<}jze}Z1htQ%yJ|me׹lY@)Шðy~Mcpḩ(>ǘ(OQݤw]Nu1H@9֬OTESeS!` }>MLr5Ĺ<472bN&>РՐSo>y/;mS"H _)j.^#]Ii6ue8 ;ތU js?x?z>XG:|EZ>f^kNGe3v= dUs*`D:Ϟfޝ:u)8F,=gO9<'h-9{;S _7֎ȢKd|grb~O ?`I:~qT/'Vͤ9T}O-ԏ%?pO%A{b!mQ2l6&nG$4B -I{Μ?u(u٬s 4οr)GN߱t]n^ k V8)_˂0FPi6'ߡE|I?sSbo_+g}xĩ$:zԾ5?MSAـ+WL1ɝEt69C+cWSxf_ \=/DĆ^)zi_{;a=}|*|:go֋68#\\٢y0zi'/~e>O5։ᅅcO8qzKj? lӢ|>n^:m3'Y\=CYsrcyT/@t`F|-Ndlj ) H^2)3w:{@ҟY_bϑ=kfv8p1ó'~4iѳg<뗋aȘ( ^X8vc׳n޲*bN޺( l^SǷ/ݮrO(P 7l :we Egh R0+yk%csŽ[ƅ%"bEX'z^hFgZUP(q VYi kto|Y6DWZkW *EQE65 ŭކ|Vo|9tiўcir" R`0*cC10|4d` <׻q_3pIZɱ/:jfz(() -e%+*QRVn꛿<ϖ_\bA[EߵSZ˺SPq-˳TsiAG?8 6O{3~󵗛=?tAon;h t|jq_j ]Oz}a [71^ oSKoF]#f^a<)eGں6E(~Ÿ"M~\zS_rIT>̎Q h+{yћ2hxwAecjCw|5^4 6Rc*<@QӚv3$ѣ +y2L"mva>Z2 @9z 'BuҲDqE̔[xVȗʹ<_)PX'`w`ӵHط\P<驻g~u ݙ~A@rQY d@<̈d'K2hX& 9}zӤ>(m!j_d9"ृ[WnQ{<^|.;ΫV9PFŸ"~\pOGXϭ=q2N<,oNA"'Ҥ C`L/K Uv൩od;ռ{o'.iY>:B ԴAcxڂUO]7|D6psA@`Sin (>D݅0PfŸ"M~ orhjeq׹);qB.Ƅ.!5a =n15!lӞ=VqK>׺]jI qKD#(^wS<<\`cg`ƥsg!="xOpPnAE$iksЯaWAy%. g݀]h6M ;P !iPщJ7ӾlyGȓoSs2%6ΗjA>\ˉmݪqAAU9?ku9@倌)TNɯsNDHD1m)tԡ`#Ί!]k:,)C{C\_1jHsCfD}}j|F$NCK|z6Ɋy@?* NI ϼ2t8u]@x͒ن{/O hQdl,='|8ukSvkY$"\WK!CH{ V! 1 v`Sr NJo.,!húD>HERۖ¼r};\^_'zvWo;rb z(%٩^z+aWGa$62qrM/t ,uw }Zۑ.:Xď"s$Ѓd^~OfZA#`U>v(9'd~1VTRhՒԜ\wDV,iHCYRD ,x7BtƱyrR sI̽OjR¢ B&JQNQYVȋDD{w"9]r"6]KwjɞLǔ$Ignnui̬8NwW+sV[1D-Vd>ۅB WՉlXyoHPÊ۸ {ŗä:v7{wLۯ~޲JTyz;@דf,ЈQ7RlZ: ׷V,еy)q-=Vʏy=Z|`wSdK2@3UfwYloz } ^9vr"GOdj\XL6;%Dڅb͞{ 3),HcrfӟhDE'Wi$Ւvkl zr9b6J~) J:B@.'ɽsMB*|=y⛍GZmzd잿*ureXꕄy[ >Ckrf^5)d] cՙuF?κ9k츩Ð\,ٹrx@P&흞ԽlUiU?}g="R=]1߱]+QЮC#Fr*=\HR?ђ>mٽE^3 dNLaz)-ቆklئǃ%ث;[SE_q"5?wۧēGjߢA53z`u5yŞ s=*LFFƘحtBW]`<ިl|׈H7R~\hL{j4}i>b +#{_4ˍͣA󜋇/{7,ţ5،|yKUVj-^J*w)e|[E8p{ʕ+e03]F~h{ UBY'^(hF*߯0b0'!I>-+WnʿeƋ%s2k{iqp2/9HZ|6D%t{+_|"3UU(hD1XՅU(d~xN,;v=PnLW]sW"Y6vB/4_LzF;O.4Ž"T=|R b<:iQΨ 7mznw2c@~G3.ԋq~օV UFBNt#m\C0?<~cRnt?4tcw|o?q_?(Ĺ?lE#r6b惟MN[!QA&~?rJY>b\K" ~c ?{N4:?ޥkCWS&d7jlr14υ0j^)+~p/te/r\Q2C23:_|yf]qou"ϐo7q_?(93vB񻄣yS{ /}Fy!$[Q!] D^9vy\ڭ.Pc|,7% Q3j+y;vU&9ae06 UU )ǔDDů藂̺'}j oO=BT{K.-w0lQi/e]{?9'vlʲK}SŒ$xaҏ/ov~Jˇڍ`-#9%ͿxУ[?Xw[L$ s?Θ~y}Py*CZf}%`ibaCN^GA𭷉_1V_CK7Q@%ç:.4q+aYY$ ODΔ!ŶVX\bM1\YnϹS1#`;[/nD;8< \(ջ$,·C{'͝ FE *Vyt'Pnq?0hFd:< iFj'$N6C1%}U8ƜHIK;氍uܤAu=gH: DMqYTOf#ѐU#NZI ! &4ύ T9G´a{YdQ&I 0@ a,CA$ǢsnZ Tj [h8焢Qahiӆ2OE[C.4Q9uJA|n>%Kϡlކ冑ݕc) lK Qm[-.ݲ09*OOҢѥm Ǝ*P$B wiѭn&r;!\r^n""ꘛ.D k'hObzKU;"Qs+2o v,&<9N;am89$HJ7)6dՉH/[Q;5[H(ZLBey/erl)+k^#<Аv}17R ,@wLPH=\P0'WAr0 wD(yAVDm}D;EtlҶ91,>ʴs50ӊm#%6r7 fH`4HK?Уo^L?vyZ2tLl݌\ `TWr.Mkì2ƟXfGtm% ;^Y΃Gfэb,h :S5هP h瀚43K}XA$rU۶L۶fPLvH,5 *-d^ G2L;n*=={~"S Eگ: ;szB,=$DsSu鹪g{W[ KD au啭~cze@DhѭwIvh1m7G/0|+gᆢ? P[h(<(,bad]⚒xt_-} vҸKhwEջlNޗ(W-H^Q)e1lS@zh$s{-˘  E8Mgz&'vGqd{ (3%DI61Pw4 m" t<:bkR* H;0g]"#kT'&D,[0 cQ~2fY!.Yyd+=5JN%,R^!~TY{Qds)M0PƒvDh%%I\NvC ᯣAEv .bgX0kEBy4/( .[hk%>DA9Yp yt$8UEpW;mz=̉Y&.\& n҄u+Q>ǖE^TRo ;SSBd ӁT!@vCz7QUrMVk|:&rK7lMN^?X]0PǂͿ)\oE55)e¾}ZۙB5K0kEw)ɐ] u -r" J_9Pĸf6"pCO0T5`0 xHoC q=5?2OOSc#2Pscڊ< 9P8qkX|u5iDV b&"f;'ofmgg Fҭ8 m9x 1{Fn _FhפFxy*et~>1o2gTlB1G|ZjdYAEzrwN]+y`tfc @ ]tyՈ;O3[lVJ:W/`ԭxm[=}غn_:mԽV上mЫUսKG+*{}{Pj̓}~׿3'|\h0+=-siFBVKX4\\<@X)c\g?֧}w+7emsUv1uF$R #d]Hԁxئפaqo ˄W!X h(NSz?S/E_dlJ?,Cd{ށ_M}+DWs;'q,`=5XiW.Xjkj>UӾkE*XUM^U)\?nɗ7_"`a9A*-DCH3 1 Gsdeہ}:Y,_k=˷>I ymom;<5ۋ8~`g4 !l ]?#P۱ë/eD-!! !k9j}5?]7򋫇;}4G9 b T+[k$]^kHF_Iiha6FAłwHC6O5O>z.|#ώݝ,7֞3էV&~Fty%/so9 Xƍ@Nnsm]VM7j•ïL?#p=InX9 `w=ik{d|'}ev$!؟XQqRh߳MzVozGwGWUto=ބTJBP.bE ( ,JQ"RDPiRA"-jH% !ɽgisZk}YY,{93۳CT97q_~d>AQc=uSf6/aGJ7{46) LA3W~&Qz>gxLp҅?EaU㕿`AO&Y6n;Yhv!yQ3ژKE3Fƪ}^yċԨϨ7 h2tx}lŃ?]u-3m~A!,& P 0FɎAkGLx*nS7`$ P/fpV!z`_/l0d7&ݣsàS'.:ÕȘԹA?+ٟ,ؙCvߟ6zv١;Ӯ&l6z2umήtKkRv: D ~hdDdVOD~󫊄z{7oN`g?3|L%. yO ȟ}|I ' ?&djuȚ?ZXu pe2a2Pw.S+;=yG8̽fMl-gZ´s%K,P!xhff=;cs '*(2 勅pv~ҫ}7$H,uxz`CVPJZ4[9LSƒ  <|y%>wxj9 Ŕ"HI<:lmMV IgR8޿>tsN8#=dXQ͍mgd$Vv}un<K0?)q~}ze]^Ю`!eMC~ᨱ?kk_&x L/H:]sjXADB"|Xuǜi;ݯOVK#ŰǦW ؝wؘe:-?>08bڡ-ܽpVf1=vnr<5RPGq-_6A|#խA3?rl=!@@Ӈ;]ݷ'RXR lhMf{\i^\QAXEU%ڷVp*歵=w8}&GOeWiֶ^@H۷3o,J䳹C*?m/Lе97x|~>´ݺ:\'j>1uw?๗?>HרU/Dkbʒm:7׬wԡMCeS@~`Ȑ7z|0}1ec[6z|179q .'0yd~]uх9/Fv6R!n(fyF-Jx<Pgu@rVټmZ؍j2}m#L\TWbRRxvb3|O˫٦yU BS*TfII$5 UZ=|eU"䉼޸_ި]=rjfZrUϗVW=%q׷v=&4ߎJvvNWiАύZCL^͜dH\h6F"G d.-4xCzo5/Hsf=UOo{1t- 00ChR72[7!Aщ# M$7Q:ݹv #h~jeiTCg7ιU꜐3\ œ""rQv UE{nP}{,\jU;>ic)iVZ'woIEҾjU+@&߻|KR1/^ f3~9aE~U4>K%s>X5gl9 n;}ޕ?'ժG$orԂd]F{-}h4"jPy"68Bv/MÙoft{jQN[4.Xng/"jdq%G% jjKvbS b,I8"g6 њeUxs|YIY@Nb]xUTpdgFjUj(J)+,*@&S^G **8 u%o@xm ,yAM) Fsڗ| (&ej|)3ܤ-q56&~`3s!'Y]/sI;VL޸c PZ1YBV5ꫭځ;Fݩ v!?DCDf;'7JJ,cNjIiYo_O QUB,eeiń\6"uKPΎZţ/Oˉ#/**AbJ@z#o \$P {,CʵCs&H23 s _}qFgLRs dNOqO^V):W1V$q2XJ 0;#J9)}hF;?WjUi{39UX9/QAULsl}=й[q ^_w]OB}g;?za)7|A,3u kƢϻLzS6٠U8;c<+6d5Eq1J߸Z8x-?~o8p~ss`|mâj㕜"ZAժFOyvwf QqAg1(a޴np^?O@ Er?ʗzZ 7{ ̗s%Bf9Itq Sɡ-Mlp&;w IDAT}ƭ=g|7X B"5P(*PA%N#'š n6up&ii 9qVVgwS~ d:!hiݠ\sH@_dq "; Ƶ?h$@5;!n$(.@ yt mtȴ^ :zHܯW3K/Vq\ N}>5L ;-(M"@YtД:B.NeU JaE~YO)3d :p-u}1taY~VFzU=B"nﰿ:k|1(e)qg)1 X=1%[}gSkY7ћ[="h B@dH٪UH'qjY7 lװsMڴdk[~#`/bE'$W]RQ>ߍ)^1OfL{=cď.TÔ#I-:Y OU[ w M?|6U͎d{*׹ylݱ^yx?s# 246Y6|(lPEI>W2x}s/]g=xd "8TMoّѼK^50+P{}ZqCߌ^w,WgN^ qp|j~H>se$}Xﰤt^W&=Hlj5`L)Ye.|Iѥ׬S7Kro[Go.XW;|5ZtdĮWi6l7ҾWǰWdYi+=[ǻo6K9w!(i&tqYp&4AqG@Af24).@`hZ$In`~Hs7'V#f/:^j3ho+]5I['9axWǽX,j}0f%?&z-yT1]gg&#a Z`;ǿ/U7"tk=Sd.nݐ2^8>g[/K]%HrtK!gP4GBd!6ruoO<]-ϊVi|)vO?]O7G.O2y0B)?(_(QHDtU+y).2%Sv}'"(*I>XRKz JVgl_Xmrv!m:Vh]#{הl?PKzOqGC[XeTҦl;{=oIN24q?횷?t|W~?{|~#qV$MO4N=B4IVݝAWo:37Mmtu& wVHR!YYL77=pEAޅ?f~Зnw~ǻPȷ?7uaP}y>.r4Nu^_Qux![Y6 ۲KL 'vG3>cǿzteF1Jެ[z0jl5Vy|ˤW`(XT|S]oJӐx[<=te T5ssJL^tjΫ|8fOAYnr922ez!LΗjcHhRkIJ7x2(~ϯG&zl ' y?KYv ;9Qo^#;c+NܽDdHMH`\ݏjM`-PJHm(_&3a(NgՄ)[$>mEw(IxT`YrDp&YItũD٨7"45䜕y5ɑw@X9bfdž.B8рCV1q|7ܬ ER&#ѵ hLY\:PΕ7#*?H I0Ϊxt^X_̡F /L 1+Dd{pL" oʝW 7с@K-Ғh5Z0eCuE(I5"CMVG$PdQB#Ŷe5U nm#M8d|dvk]K&QHT^CS񆊢JGg(*ci VB*Np$I*%^ 9Y'{ G Y M*b"Ru+}$Cnމyr%LW@SyE4IwMZS.QCH|;?;KBP%u6pЪt?qTvUgyXQgml;1%to!v+&o/gZm@iqJt `9kL T<]6rn81C+Il榒e8ΞCb|rSģtfU2vs-}ND U'-'6^ 0iE֭QFB$#̒/glz1 F\8=kZaDZl F?8+ѭ bPOS~@-fPCvIt2WerF&F+Z*hegK]O?ua*4 s 6: M[ %>=5M3vHLkGSSV(jϙ'wJ6{sZx1ɜ"c4JC1sQ4Ic %9~F{* b5 >u# x*W3[M(1UPr_T`O1S޾K-%BO18Z"G'RקuUE$z_.f 6 UͪV09VIgrt coq _eݥKYƷ粡n/DF#-| L)Bu֖S)Mh3i \E TqLO b.r~ -RDoqɤ"{vWZGh~j1sÀأۍdרZ#}L.Klf!gۈ F}#aIÙ%,2XCtoG\߰c*G2U>z'+]u!뱋f]shJ?7V=r*)vQ0q在?7%rNM%t$\i!ԛf_̉52Q蓢$Ɨz%]TR\$ѥL@QʖـL`li5B#2(UY\XWmt|ɨ. ? R3̎[BeV:θH葘C@.sb %I! 'TwC_nq\B8- ZUbS8GV-Y y_ck("yGmn.YMdSdE7$f}tDJ&r/c&F,6rcHhiu%0 z&c25#Q^ot29HX*2"iMɌ! 䵍Gnct~p3ߊ mO&wCf SǶY%=$;B@7[ӿFn9t)X_&o<_mfQȣm>aʡb%*d8T ЎYRD1 UxWx<ণ^\]J* W[QDI$eeN~Yo[Ć+T5NeW9~˲udX"i$@T@[O (NΘ mv8qAӟ$&yGBJxBeVf1d34xiM/Gy'OwQZOá*/Ey]OmwF)y{/⊌߷+%W2nd+xOoα6ӒM;j:67DnZbiN[OKn~89 X핻%vI˪U?vZRw hh%z0BY!>thl1w.U iekwE%}GWXiҴek<ņڸ-zQ6GozǑɱ|9+E&+7Sl&Җld]`dr^+1 DS/01q UOVW\*͞jk+4hµ}-FSNq`?ϯI>axcś[6W8VuTVmѵI0Q&N}Gz"0_~$9[ƭ|'n!Ή;]G勁w8wj ,u&+Gf9'Y&vZLi1W{* _fh2/7b2nwc!հauuM#TAmvu˹Qy9{)|,k̊oîA%eNsoȇj_V%#6fzo,?'7 ŁV-0WmT%Qu0@TQpc^(ߺ\ 9UNo_z15*پȽcުe =kdi24zG\sLM$oir"T+ulL"[ɗʭHU.r*ΰ8 %$s#>4'x掜SP~#`pw|ܼ1/ۏ>ۉ~Ǎim 6-lX"4Q8W6ؿylnH~!-l_W ?~ۘuXƚ8\I,-\֫1M(燆W?)(L% [Z7~ot?7r',x/9X$3 =5@EQisբ̽>۫\H"i\QHIPos,v@'G9(ʷs :EhFRP2Fj\5WQ)@T#2= z9$0n_ eLb:Z-2P#UO{Xn#z]Kܞ';to?ZGR#~ѱ{tO*Rw ǏŜؽvƠ{BߎDw%艈DԪ,|#6J-̱;/{":.~ e*)EWM=h/{OD%ڻy;C69wcN͖q wxW=gm?lo~#u=!/K9s|Pj[;->T\.6!&.!%bYçe\kpg .8Js?w9/8afW6D&};Ξ;fƼ=f~72ޠ|Ww8vpے7ﯦpyN}˶;sѐ,9m w>O?}b/ʲ\wOcvpS>s^EfW hƄ?q1ǎĬzN q^ PR]GW4 Ul.2\e%-˲ҒUSvSTmx2]%K9˚\3J8VtlUVEVZqyYU.cQc~sݴ-_Z!$__X{"b <5.'>:yov)s*x'Ј/mx쉨;xK[Sh "eAä(mӁ|CѤ&RE S=3kvFg zk33~""~*Ge.yʳt8BDD{h W~8I _:y=3|VD!m/̕c=ߦ=XApO͙9Jɭsz|`PV3ws•+ UA2ALߋ_1yc)ѵp"+ha'"Vo9,;M&ʢR*S/$_/8]Z h8ɈOCXA\~~T.EdktⳲ*oY4G8z}{MA9U,m>ŗzѾi>G\hrct*MUbK2u*QL@8*IVI aNJ5yBanHĘDŹZ+̣.ߒ\ e^rwK6ԋ}SCB^vqګu# G;g._9eWy%m" #și1Zhؾ=KrսvtzKuU>ic)^3xǠmҿykKnjfI~mqS|J,ΒW(6Ͱ_)Uf!\MpT.)К/DCgL=K\(}\j:C/9V/z|_LlܕZ*-<7g˩ΛS‘ILH %q#iErɵcsV 熆b AJ8KސR'{uf7摘@RXdP<,J 1$$%4J뽞8q5U_էR%_ mQbFd$EYpu;(7t-c]_}ҳkl~:}A5=]TtLvMJȍ(Rѥ5*S$&YDW{xw?V׼fŝVU;4O!J-Z"6-ŧ?Y"UVwֹ˅BِQ+ߟd) Z5{,{K$p E|e{}k7(]O+)JL& *L@i?QcOEMbY%P[Qӗwg͛x`b0z 'AW݋ƹKQ/UU&J7ʫH06͊{* 3$ 4 430np:}IByy1_ dJØ$MZ̏?q{$ &*8몃 r8SܥuwJFk+yП{Q/?`&ިaPNlJ /* ;BbUߤ$i~qSbP]?Xf/ V 4nw"_u%. 1bLT.d,kZud)cčJ!/;9 |YY[Hd)хl{ &g@HZA9'. WBӪ`ĄbIESh)Ib ^$I3n<~Hֶwn\` %aL5eƘJ,͆R||C00|25Zevsc2~/KeYeQ==OS:|H /2=29UhJ(Zܲ =Ok[X)Ɵ:x`|mÚւƸM3 kZ/] w*Aja\`+b^Dy5^WXO銀'%Oj2 sM`_| _.ҩ[gyP3n;zU-<uqf4[9emE;]k=60$! \U!5  م M+XqQhCrHZ'*`u#cr>/}250|l⌛?yg;hzW #(8>{@|{%jPcEg3Fhd~FTH1&qϮ@>z=3c Ͽ^!5B] nY*#RGoj%C\\R;Ig9R9,˜ ]ҿgDߥ H U-HNd8ؠnOv*3M]QV `0O #Xz$8iH %CRQfREV! N,toIjY?u[ցkI} FZAv jt 7-c0<VԈ:Z7MZBIÅpK2W'IE[]ax{"K6O͜\BN@2/ o׾4 ECa\U6hPZT7TEw]0=}'rjID˨0,KxSFE#0wbr޴⫷GXԺ{jnD@CגR| oF\Ɋ\>ޮCy DDrvzhGc`s^+gJ*~5$0É> ܐV԰Uv!G6J}t`B)-LUC)7Q6(UPGȐ~_V;8?C-۳|0G7)I6V5I05B0m-h&_Dtjߖ)OsKR\-yEԧq7K!2mM  4yO ޚ1?fF=ԻqܢFYÀhψ5l ,QCO;[ޝ_|9Onڹ~亝Kޜ0rc9*6߈Hhғ7n'6w& İSx5`'3{{c溡 ͍q~o y5fVl>(ȅ|iwlc?dW^]Q*wYO~§bؙLp(qӏ Ĺuى;Ӌ|n·}Lw]S6ةz5y=Z=/@T@D1 #l@%weh *<\Z f$_oTBPKj1Dd˲K{$&´$1 -sysd(+㺃o4G[4s9K9QȽ࿐9yd/= ni9 &4s+Ҝ<[-b 'kLJXA1bW-[k^ۨS3oeqFbrZu "U-f![AڪA I6cLMҮeawS:އ\pQRU=yW~nEcb+YBkKq:c!>}nتhlu| @j8x[ ^y_N#4*:xʺ ?4H@&j ]eҼтKbؗ{'1q {UIk Q  ]1TJ?j3֠mEAb  :AS@cVQ$#11xQh`U2I͎MM 6t8+#&,\( hՅ#`L_Bdoޓ$ E OoSj-U!p}&Kls&x%pcvOdJow, gp޹SZƓyLeHЫztuyiGjQ+T2.`{$${N),$m5ȤCt+MH\x.V hE pl;rj&Jh൐!p0 %L@EHa5?Ȼ6MN)@NBR]a3zj&ЪHLcF r+J>qt<05NJjNJEĀH9J 䑯X"蔹"LЉɩA_+76.#tW_]#JyL |Ut.W&WVsHv2 ps,'%T%B+x7b?ёmdE brl:zx݌m$XJcēyWPPa 7zvڢw,kqf&9"eY>] Fk`pŨL5V KFy $Uz~VA9,wq1F "Y܈J[&`( $nV!J EL(uʜUz{8qQXB38\4ӆэ-x{2#\B߻B$ezI?qN*rJ'Sl$Ԫ$1NrH(IgP+Heơ:])l XqCXNj]]Lt?=SiZzM9KwX B oimrǹhJb*}E4,PFKRf iL"9̪-O5tx;u ӛŊU  (Y;69|A4E(DGG-1k9{$;ޭF%GF ɯPǶ ׂ+ 25nZS@W5D*$Q4k޺D2NF4Gz6Zq0 >b麍sIc?G- ['+z{GJ1`ڿLuHp8t}ث ?glSrN:YL;#O7n~jf9:%D)z+| k0)'uk%a"Y 4a& ̐q0`\Ȍ<3="b#0i̩*^cR8uҒ\k3Bu\#̉˄L g4@a%M֭0㔒A5WL"ՒH.;ιCqڎ zo'wg[p"p3n;`6LkjX9Hm_Π]}04wGLn1ЍkXhN"-S2ԎwHvPP>9Syw n\hPFi42l"KvoU˶>@\jf ANܺ?\ˣz6yb );vU2CM;u{mIrSF*wu wTXre"9rg}٢ro_}/o|wy9ClW컖~6vaM"@ $z$~$BLg:UB=9z@&!#w}njÒջSf$ȕk*RZgKgLLR<DnvIJ?"Hi]3$84T Abv{_t*~:Pѥ}ױd8R]3\DZ\EN}/)_XPr z tO 7<*H3U-@q]yw\]/# ъa,A>ً;vT! Ng[j^'rg~?8%qkaEݰnN''nIZDX,m~䄣qӻ%JLNHJNPypڲ'A&#$Jif;Fc}ǓO:w܁pRs!c_N%$ٻvhuLN8s樉;NĽmFb78}h<'z3AeR.Tu{^zt܍1gLm=ue];S\',+K;NsOTVS?c\9VgN_C'N>]pE۾jǏڽ&H` m2 vs3H(H` áݟ>eo$wsN+({䆋tgFlCkq#Hn/[ysY@^2ECcOFQ90B=@c1G#K#nfxJ(:5\j=RwgW qDf4lkV-KBkEatf 26") o+橏5/f/[qTNQ>`P'{?]^{Ӽ!x`B/^y%y]&k}Zz]]jඓOnb+.;꣕Sچ:#Xx7~f^=;ZẘO+t__SO<Ҥ-Jx܌oܿψA\A'%wNgLrP%_p`Cbi2LR ?h]v_R)],uK&8:odė[c)iw/ش\j)!vĮ9r)xS:~RTw NZ$͛) R:ՅvwxL] E%a/ku{b$-#oka|L`x=\:rZƻgaW:T}{ߎk5zu`H˾Ȏ| Z(9|g{G­<8xQܙ7l oB@)<+|~K h 3pAB\HLU B+|ެyխD4n^+]gZ~]DPio*$&; ^FOyT3]װ[Dfه. nAQ`yENytk"duLaKkd@PVj*4=2yW-}Dx%0w@%8m?@Dh_^EB:9(0c;^eI/׺WҠX4W(ܚ@:`Ga5$k$|3 .\q|nB)s/EE~r}3M;2@A\B)IǓuvZUPpx2s ^jqjT jGGd&M 2n/θ*L@ݻyNq=M !\TsK;tjF#}r _PL@z˰I)` o]?O\rѹ׌+}IjƄve[IYuܙs64~ӓwfY'FnOϰ69vH pe[XM|g.)h͸n ۾4~ff'[|3yUR-շ>o"tB=29_{.!$6Ȟw <űOzݞ8}; \&jzpDI^xx- /Kn\qhqnM֯Pv"@\*؇y4H#VR$HRbթ#ઙSZɧA#AEuBMVu#DU.DJjN|k6/@p:W4:$D*ޢ-yU` Erp p܊t7PeN#]E@@ťW-F-eYQ z1ׯP%J%, @IE$)QK,IZ[ʜ;?/v7h,BfJ Vuѯ|h_ 6 +^[GQz?7קV-gVʟ F۟N= Fݟ7h'K]/E-&i N~01 ´K>s"_Btn̼1&:uC򣯚4Us`ڤO[k3ύ;n4|pԩc7 =Z]ٻj4w+}@zD̞r{\ퟏ٘bxԲew^d|X,Sֶ}A|s]͓>ٓK^ ێ=,T.^|쬸ˆ_Ui0qs?wqPws0LD$OΪ 3 %҆0\B%v"Z,X$0I) '!mP*6M&NDv1"HqNV !R b^4x!5+䳌3gQڌXc|H+{sOQpk6g>e.('Ȯ:3 @ZfEj۵b^SϕUQ~zOr|7z*To} I<w~dQQsI4 Sm%0J_|x*}+q~{[Ͳ'DkWf>K.JjdjC&+J%1IC@# Qtpg\#%̒QH f:If"WAUF&I'Bm%#x+šU'?*WFmȬDaL[O}AMjA3J[/1{G2"dx1&:~n 0橌21>Č \фӧ%*?LƗK!@/W4<ؿmu468d6:9p%g혊Be4ꯀ=宜Qk ㈁J R/e`H^Kw^T`\F 5%eݹźx+HNB30V-?lfDR'Wb#xlOzrFur  ǀ kǢE5 qAVM=|JJKo@hԽ.I@io'=iKyCtIk@:f&ӟf .6oܨ(I^4\@];زq[o9yGq8NIN8 ( R+WBQeD"ʼnd1I9P!#98͎QAvX&h&%AHT8f@&ԓI+S5xIVw6@[`d.5C}ZJg hf>NUezcݤɥTGu%m V9y -/h9SfC/G#؟48?'gf <LUvPE%*qk` e:~ +uB$mޥ1s%g4ǀ?ϤG^>{U J'9 ū􅅉[VRCV"( "DN&BE43FTA}3Qd(6l"XZ7Gm% IDATYIJNŎR3/Mԭ,Ĵ5O GOdAӝMKC62I󐙷 G!~ˆCF,Ңڟ$? UM=]q6f%AK`L$N5XwHK0ΦF\@JZ}q v%zjM194%Br4P;lإ !ѣx"%uW#/edN2dgq&PQ1uԸ&~dB۫):2֍.3ƒB`E@Q$"6h+3 X>r2>{ fmĔǭZ j쯷?}Tʏ#ťM}SٛOܛճ!7ѣBnMDDI`SM-{1VG[,d^˔ {OjMv:c OT:o)>ڕG PgvcIe8"K#W;"h3_+ չk-+S;=.sJ,ѯLeo7-?xٍ/q+]X6A/~{O?QݚhU 8x;:ei/ >a*P#2>fNZ^ D`r6,U}zuS.?A3Y:qD8A.gxڨƘ?"PpԘlmPQ%p￾JÎ4Vcɭ`s0IWXi ƪotK w?ug'ʛGj׭ uGW> o~ɜp?jiN%)N(L¥V7vXck.>js"v y-v\ovެ%?"M7ͷA6 +a?N\xgק\o7꧟߮ Lel%(„hA5ok`o=lZruL^J _[=Ҡ5Fq(eMM>S^zmל\PW>K +a~5gn=W(ǖqta\nₑTytT쌑]xK+83E5R(?]IvCH%\YUkK!;m!MOeBM"YLi`]/^wo\Txq޴20s?euQCW<+Z/$|a&ΞoqƁ*0EZJSO% M+]F_fuwRnj%ĀG&?PכښHl#bA²omϦ~y'F]ZR;A_MpS4%h>jRHhqSVf$bE 0`XN~P}PZ0Iʗq˱%{}W|VLnv)Sַ[}rJW^u-yr|vk5 3xQ}mMPoh(Ruds-089 % g~#c8@g8GB y\T93 o'"hv^Z~|ң!pг`èN?}WJi‘UM뵕Զy<ED 4Bl@5™PeiLz,JJ""k^ѱ A7 ,)oăh)d;(F@s8qX8Q(Kؽ9ϝg/cJV͟\Wn|&Yֻ_LYsd>ӗ9 PQLT}V-H0&cuiƀڝK kG7 ŷ$6%8iɒ37o^0!K@ xI\͛gէ XWIIHF%G:˯ƕ0Pk)<&5G@QvixUGxivDX4/Y|4r|;n3uH! H2d,ɓg79;EY\ػiޯsȩw<˲% Z[Ĭk,p9"~}sWxJe5HJj\,9=/9%"JKM({r' 4YHE*/UQQt?ܦԝI;F7 WR|nf nAmMݙsdg޼]FUulr1ez(n3@9#clw{h+wAF/Mɶ嵄G/k^nGsr̈g;5*9jo>~vtg]=dz/wkdr;sݨHFzΐ87I5?={1^Ft MP|3g큳N<6MUʠʓ}9G0wYw;)R.3FG9rΧ@T|]xШ(G΅kB Sɢ!vư>6 k#Oz0* Y"9pb ZY-Drݻ{7+% Yk[v{nȇ_yk>˟}XeNŰ1G?9V6"'Z;ʑsZx*& . g }U'5e$*nra hTmMR3`%gaf& b"a1ΚڰA=grlLZ%Cbē.n{/~EJaN!3Rsٕs3*V Vﯙ]RH,u 䪅S5'i2~oHTΆꘪڬN(0(,=v /;C!R0H/,O:h?yC MMHFt\>iG 5S %lZkfFך9.+n'p8e@ o%8qRQ+o -: D<$U O BQWf9tʗ0)=R0r#*][HTY"3 TJ2VޭzQCG<_G `ԭ_%yj]F ~4λ\ɥ͈jY-5o_,R@œËǬGi>RջK4z;cgPU9.֗4ҏ? 2o&b*X|e^#,h"忲^,ZY+kX,bIk_XTQOM3-neֱ fEtV4Be R/j.u_?5=*֪ck+֩I|i+/jd?dDI5n#k粸:biRgzXO7g}ϣ%y ݶYUy n*$&Xؤu9o_P[U $yZ[ND9EVW7R P]|Թ8/>;D Iu$A,o4lH Ng:`h,8;r>x)o[B(ɾvN,a/Mq/|2ViFuB8 PiF +wj-kU@@DGͦVPԾx^ZB}yI0J/[c (5ѐcvA4{҃t$S`axi"͍Adif >) ӌ "!mGo:~/-C }p?SW?/]xҙ]oeQ͟:*Xoe3Nϭ ~+\NR ] /^tއS_Hٓdw\#h&|Mm =e*g ~^ÍNաiOtZjs4/2R*[a2Z1 ށt5+Ho v~Dr՞#4sqlu W&h`m7U"zFKTաZ<=M'. L(\6;0~ƍcYqƵJ˝LxϽ5yǙ`tU..bM6n\? X~ƍc٠I&u?VC-:=q[DG5y܄GKJ.(:=ZDG51n|R$OݜkY\O`qD-yՠϥu۹du`eDɟEIUfԸmW 8czLz⮔1jZ(gkM7jO:Qx,pU;M>}3=TpjݒZ>z)s?7Ws)PT$My'~ ;Gъ՟2]5~{ͳGo}Ng[=AE>:Ԏ~ h ˱>Mjm24 K93>ck].Gl`A믻1g4ϝg c?7uͻB0uϒ'(H`i'=kucg 2/ᖴ_赩P!Vfj6$F(${ 3aJĬ+SU}Bg ]S9$yNŠm?9[;yd]ȭvC'c??m?Ba%ƞHdE,Zq`Ϙc3M;7}m_GKOtT}l-jW;: h4BJtb[ E9킶%{dn"p6V 56>uJ:6oa "C?n>^HT.H2Dg"IwR{*Ǧudw)31MݦG=/MQ2(f5HTo<|ghVW3ix&P!m1ҴB9+1U1+OJMZUnȨSI-kbֺX Y =:)H} noڒ;@)B2;Vd)߅hG:F հ&=S[iQ[<_Ūy ( qejmIى{Q7OCmĦE* ՘_|4[ ѯ021ľ#Fyf'FƳLLؽ : DɁ֙`P9=p5H㲦&uWIƦ.R>4JG{s1KkM!~|iVxqz1ORRʣ8T U.:uU7{^p/X=Rk]v] Cev(~2ʿXr&m*%@F\O/Q?x<<.[< Sk±&e{ -gjVX[_ :iIAFʌYNϋWS16Bqm )͎d$EE x)> @"p2wAch̔* IDATɔn > ^NȼOjʷ\l^<7.gf3j.)SPwsx{cD)iU$¢$"Lj@vI{< x%)Lqgb7=}gaP~Ivդ5bQ,̞ʬWPXzEQ7@SE0\LdרJRy o%Y xE/[S :fN7jCy(7:3R]`dt 7jLA/&dɗ iԧLdMN^me`â;ꗴ9O,X"/?D2Լ@wHfxސ_P53o)iD!wL֮ F+u]62ۓlgY"R'u?R6ɭJ.Y>,{2T >/  9R2gd#2BOC֣Tc{ȓIq cX,=(# `=:f:Yݥ'o?jd~Dd|yɁ9UGۅ|/AA06YiG!#r,#yZ*E{\3P8\F/M#AhO p_'C/W--g_V3&(o B!]sWQ-jS!}_/% Xoy dJ ML#`ľ|Q]tB(jiAyB@2hdcHRaHĴK$G.~<錌Ƭ 'S@/Mn<ۻN'\rjqPE 'O<7eI@%K;J:DO~G6kW+ϊ24H͉ƽPIFBNSa@o{EGa~?x&)#<԰DxTHg+Qu4 KJ DZMGTeU+~^*D?ߵ}Z|>^'m:x7Yd/Bu/퓿!'&,^5N5HBf `#P59ZtBU~<$z@c K{W `VfR d/ÌȔkܫM:Ƹzڡ,73d\ahkӡu^/)]:iVNg*k@%<8XMm-Ҳsdv?9d{qϬl\b*^^Ҷߧͧϼ=msy;x`W^'@>NZxd̗[v:VHy.~P^7Ikb2>vލz~0 Xۧ`݇C=OLX4ki!kҜ.Eg=kA˗lƧKBkzZ-xbU5FNz|_i?oTg.UcҍTZ RwEήӪ^8 2-rW+s+(Y(bFNBlxD@Tb:dcZ<^'x6os|bAn>p&!)9~M9}kWr±NHJN8G8'IVl_O$'MvJW4n/sㄮ5e˓{dҙ}kFZI:s" WW,{J?\]?3޾bX߿xna ;]X5 y*yڡ6c#1]3ߞ#WSP[&'J9}!꾨[e~IF?*9~]zn}WdX rvŮ5'}5@$ʊ͊%Ĥĸ ?dɤó;*)91)9>*X=ȁzLٸ')15Cm`iܪc'OsG]kڄkKRR|{C`PsƟNJ<׶sD?{mZC79ųU8NIb-^vhȳ@8y PE y=Co)mCihΓhߦECem{}C4x';ݦk rܚg~=Y}ed׿t'_r `J z7g5,\p+&K]!ϊmC*䍟ٻW!v5a>ۤK<\x^gRy@M^-H!s ^וx ezimj܌E:a5АlYX=-eΌ4ITqSVbl!Vp|[TBr^@ȶ~60QYDYE֊0-q\ņ@UДEG&$mpZدޘ}~v]gIҜ]gR/H A rAt{g PoW\q4W/@;xVeˏQ|~k̾_uXt6TJ˶7nlTϞ=G., i;iŔ_k>Z1]KUカ|z;Yrr{|WLn!߫?sP5ikO]}T'̈f"D*%(,MV<$K#JBIe G*`E9cN ~wny;#Z+ hje!t_Kt0E;%(iҟE/[*9|ogSvՀ#l}o?vƙ_>yqf혻g L+\zd_d]N-]w͔_,Lpt4wƒ[Ÿ~3~v;2|~%|4~$¦_ kq{y&]}?/z ]/;sF/K"k-,+-z߸\6R|91g΢;I |:Ůw֕,?4],.[iL"C^(JE٥aV{ui?+ȒGЁ7:7J-4aaU*t0!adoSt"5ƙ<]޷Y#J_SK|_.: T*'N0Q?'ͮəL֠:fu[`㔤'gku4C*ʾ{]>2@iϣDCC:y+峳_G;ej~(3F'=Q̙fX.jSWβZ5{y;>8#,&8*А=r֜dT6FƳ׋SU5" dL3lOU7'O7/c^nL0 ǼƘkt"oEA>H"'p W ӼSIw]bq",bt#'Z!(u*r xmXl9r-M2Bޥo׻|)m sJ Lw}ILc1, =Y%2 IѝUt/x b pIc^ѧ3|q$ݠe>dOfuÞtoZh䒍QS JnTpz\?{xjZ9Js*2G & )nD'c ,I1d/L[ZFs nRwֵepdLHqs܇;ky}UE}E WežK󻽺P7nr6"|l=?i.dz㧲f|#>;C2f@Px Ѯkdz|3{χS 5/"`5`PKƚ|Gt KF>dHw)  /t@0wõ)(Bg*t;n 4ʤƌ$>h7Й~-Cb"z!`iZI~ ժr0 .]HV{?)=ݼjD8<ݼjS^HO=Bտao.9W%k*$h xm'bϔs-xSU^a{7!0P3"33}*&kK/*pǃ ѶKdx/ Q>p߿rxûۜ_X\hNA)T^rI{.6t]e\2)%ޢYe l֢%'x"!C*}i9P%@qcT0o$_4*LPDQ9N8Eͺ0K@HfG,'{Gw8c9o_卆Zg 3Dz0Mu>)nsx/d25t12Z`>z`JS*-+- jze؎7*'>սo}zu|\6[6b;;3svO٣o}{ qT6IU~p)Lʍҭ"Rj9s|Uhm"v#>I!ZLZ񭪕;5A^-[/c:e0R~͘J\`6V3-` k6IU5*iP yj DT%^kJv]#ѯwM<=썶q&Zkc]:w/,V,pOkЮk'/L7L^rS廽խT cw~5fq?m F&J?WXcJ/^v1z@U(fSn@䄡Y:v*]u)eGv)uê{pܝc~ $Z= D8"(avbRrf11'^VZ1GW.(zCKGzbYV*gņ>y9~9qNr}Z|&[ {}ƹ-WK2oiӚU.=;zf_=k[^^kE=^{m F&8mR@&!td30uϧ}aCsv:|3֟,081\$v?qcqTV6)KHCі#˒X}`S.tq>XS>M [#wј1=.,Ѯ0n _,n'Rʇ_3|[̡jX;ɔ,z=4T̠T1`='") _!YM%հ$qt&vĢ28j8:&e'|}w_~m)I:V$]63>\ 2˳2 DjᏆɛ߿7N$g7?+~J9jɯ|~nY׸V,In7hٶw7=iw w8_|7'~8v#&$8HͶ-f5" 91y`.jdt¢ߕr ܾg$mp|H6RG Ѡzi~RYV]^wi켢@"e/hU޷`:WD/[ȞV+ W?bZ /o˸ʚȯS ,o*yTSTVZ9/ܞFF^KЩ/iwͷaFoaH?&nI-5L7).vexm֔)\W rRm,2V~9{֔gM\{|v}+nl$Z7vL~{ɜs *J}ɚ3w@3_5ޭ_v yLγᝫ{w,d+N[%3eջ/I-TEYZtq/MV9J ׿;3w,5Y;(M? bҖI9[XQ|yg?~_Ql4\T>4YNz^/Kfç 8\T&iɴv k2kf4 @D~bMEx.(#Ùl1Ǖ''%h\F,/eF ^#MM6lb6gnUnCm1ڕRpn[R'*bЮr0c;-c1K!ᢓ="n<.;L&M_./BJ| -rZ‘}kH X)Du2A2Dry[rijGn*, :FѲc56f֒Z-9'i"oL-D|MoQVF fCwa$yIf/9M u2ע d^ђt@8pZs 6GROA=9ԇv CY%#RH03YL>bL:@hAyw y7q OxpA!'e;i)f5) Q6,Df|43lIkZ*F!`c\NIG*#q'.b zXU OM31j!ሶC[xOzhJ@w$K.C !DbK3 z|KeΕayvG%699AKQTwE@@0g3"bKdL)cW YbtvxQX^"@yŽd8P1@6z&  Jk9YI,2iسI"ZHbB%^bv e8XD+<@ֈlJ% 93^(6X6Lra9z?11dѨGKr iwUzjŞ#jydN#,h[3w՞uCfRV}CGy^THh/W7tTB8_R;J`q0|b`@* b' 䉕$/ RiWU8"rEğ~=]6gDeROm`SY!;:yi{Vrⓥ1a{Q'$IHJ09 ͒CX 铉Yj0|Mp*)l`KHIel!wsJN8ad |$zjn^`fI]-b1q3,CM Z3`?b:^DOWJ_7; xrNѡ G*@43xBO@n,xăW ءPɡs o~DdY h9=#M_YZ[T|R[M?Ɔ3֜ ;گPj[MoVO5mnʑΓ-+>Vi:òAYuA3LjJ"h{f9|w{ogzZ+u"=4TDrvO:rHMKautdҥb'nqdwhޝ4 A[yBwE{ۼ6|5)pc|KĶN@3ֲ!Ѳwt PCLͧk*3*;?*e=պK8)ά",OFU/Pê9$;TMs֞k p?}Sw!ǡc >ʼ@{E{[6mpuNgm}9ۧ\twl@X͇Gi֒W3iW(C\ڟǂvJYBZIe]fdâg2Bgs`6Ͱy3{f/z_ǷԹA%rw I'cjz]pg;+e#]N-A@?Lf=z oC,n$J7BDĶ$?>}̆H>~fVږB. UH|WwqvGj5~DݱOjTgw8Prܪ94Q]u~mCxyc/|ֿxUz7?o˲Jc}wN}’mo]4P]ɫvJ޿7o93~;|P~]$ x'&pvҹg! 7]O}\֮tpp׵yQ׺/ݳBKK$S? och@RQx6u;6ۅsz֌%Ip7s< 0 6Ad}}y?6Jx^Y؜} vu_L}mW 7`J?K%ﳿ)ϱǏ?~ԥ< o?ڽfUt_UsUIؿqjj:v#I) ,QK4}#I7~=nj$$ٹzn1JmOIHLڶbVL 9,ݖ},+lNHIس\-7D5zz );W߬˨eHXx\ C`YgzݟYK:yj3ӧG0A) oů:zpsxՈD*)یq߱;a%XU}_x~l-y//ڃrDC)VZ.)z8oOTjcB)+9㢱WC~b'yC7߭=^xЁz|7!HcT}b⋋yA<+'{]-?/j;,~G1>3f=Yխin/&u (KTfmѬOЮ;u܊+f?_v˸>"35=6E8SlAt.ID!e@$C0ÕJA{ouhZU* &rx@[_@8؈je.dF굜gb"WD1\n sVI`IZ}06Rk^' &z,2n`ZDDM_VR$pzfeДnXdVzߺ_;wͧ[犈n^̓c[OMաMZs9rwhլS VKFޕ ݻwџEJNh^=||>6Fq@T/ywXOިFR2G>'U#S}\ߧ/^Bz?>v[ ǷAk,ԱKS&3Y#%=9pw5XNl'׏nʵh['*egEӣLpW\o{f}h%]VbxS}l-"zu=+/h9[s=֣ǴbNh 0ꮔO^x'RiFpBO_ֽ?7(KG(s_V[1C%.?tҰO>ƾz/|m)* zM>;WzYCUܝaqDEhߎ??~[{@)kOf-@]^~"oD|${ِ^UtqNCR lC_t03-?!~;v,O5j^Xa==;{Ձg7H-hhK;^@ߟ~=Klݲ E65Sxy_n{$҅q˾9ު]uyo6좼KqSٶ}o([@ے ce(Iʁl+_lZ|m/aNX|3oЗfiݿuMlEr2$EQ2%C 8a7–~y6-!XB`sDs7 #rQK>k9%\b@xCՂG <ޚkV*P ;轁ω[w{3w͍ϧ1g_&/`Hm}F>ۢ7U!d7S mL kԬ'@5~A-.~5v֦ĴK~͞0ogS6Ο{0Ѿ-xV?bޔ-Hxv5<5ӿ}>(ҡj{um.qyD4{K7$?v4$̊۵́U{(+ 61_;w}DlAF6Tqq]B{޼_3QnEA:HON 5wNŗv.=m{( $6ɫ [emO?c;s@QPAE(gҞj֎NSṸ_7BX~_jMND6{KtG%;˼"2ZGSv|Tۘf7H`.ڸOvшVWPQ@&CH^7O ֨Yt=~4s g7|ّ]G_o_}.(¡2 V$-h@۱ýbM?X)UFčC9*}_2sGQ [Re/]ğ+bw<(t -Z-@BTo'kU)kֈmc׽vV֊REq,^k\$_eO]U+;@ţW} =An(gІ[ɮSXv'*ɸ| I^bN0}Ƿm zvk?{SvqRqƩkPq:Cy~],nt],@KG xva 48¢l< IDAT\>,y鎹mC<2dM+d>tQm^ӳUK?v۱N|>D*+pnc@i;7( Jɉau U "F!z5^:WEj1irr D|<  nRg܄?`AfZU4OK̈h9DAjƂ-3?oGtbdd3tMo~SutNIn7&L7ʢ8d|LGQ";Tp- ׋^LW(x斱VTPDz:,r$F&V/:{w&"[ierZ]'ڥn\b-BѧW|GbTĉBSWVP w<'=5ەe=wh)IT'Eba'LCpNy~u꛹yuѺ{C\@~=6߻@RubQnT ;B1nR甊uZ7YA >icLlghFw@RccfdJG=0F)14wp(ݤ.@q,)w4.9O٣o}{|\6[ qٻ'ѷWs_VyeԃYh4Oz^=?3 ! gRnjuOKm_7h _#O׺Bѧ/ۙzHo&U(.^N^V+՚1yb zNTΙRg+ U" x*4:#d8 c' HR]̂R^Ŏ*1>JkDAxfJ ƻ GHZWHB.]|qM*Tr/ԈJ5ԴyNowRwSţ:6}|A&uc4:M*]L1[[?vY_lәEaV%z fmꑴVlqsKq) rU@]#1{Qcl[:HLұfL7̣|w{u9~BF5kֿ猼;B0ֽzKuVR kq?ݛר̺tM^U!V| x[.q &Rƍ)ňJ5nT mDSn'%GL 2Ap}wg'jۻsw [+?(ƐHd(wݷ ߛFMs/ o1BFY凵5wDz%8("MR&@ֺs9GG(?[Ӊ;qC+i:R۔+7nԨNy/FTnиI<]IOKOMKOMKOp o;s)OWR/e9ޏouwG_|nWnJ+oR 7nҸQJR5U @(=(<⇔j#f{Uu怆yGWmmƘZԬ1o-ر:9X>ܻcJ˄^Q/-{܏U<4t䃑1sd{ƌ6F*a %bb*(uêUܱA qfSaa lԶim:i@{\+CB@~`̫mX~,2aL#ŝ{еN:ԭX|i/?'=z)XA kwDfc?׫~ȉ1j֔ɣ\iqٙXnZ/mo8{Қ\;#18s5yuɒZyMO3uLPd6d3ؼBdQIb2"LQ\]H#H:i޿Ւ\ a29V;!եjuYV]^wiBYn¹Y [Gի g-/Ū %0H24x?yE> @~᩿ ʶZv6|g̳TaMF.YƭÅO[|G"Ӭ9k(_mLS;?}ew!a ]OneZRĮM"oћ~RE{sR?~|sG Sƍ~܅W͚2eJAN#2+.S9_ɿϞٙX|ݳ<*z3n%ߛvPQkW(;~{IR?D6"1\UUq7NيW̔$ִ@H_ 1uh(r/_7i ,<4KZ5zoa;LpQꏓ3w>>2`U_e3j;=2NZDq cKfOvPQKV7ϯ@alɘI[OHߵ!ԥ-c㞩O#҄ j⚏|t;~YS%mצʑpխ2uLygNueg%_€%> YI |3kmpbIBA7d ћkȤP dPŸsd4QJɔAŦSdw<3 u_=V"%"4DnjBh,#Kbnc\p\?opNNW%sho{'Hv \B qp#*iMrj.ّT;LGNb[x1O]HO%)lwaBs sPjSׯQû$?|[5&)",&<Q():W!):|4;sPuFB(9rql6~ILmR OKrdPRhÝ"%됫7]\ 9#sэ{N?96 .nܻ_6&2dŖ .*/HUhX$]EJt^Ov7no*9B-vW*fNV։SaV&bt`pP)nd>41, -5/VOrk/="2]W7a*C lWA] 9mf*sFl&Kɕ\)x^ l 1/r8e̽K G!FP$/S!?V;Km˔y0}3ƌ$_D_`9dHܡ֐Gmn.T>ɷ )h>+G 20jLwi2$ȦtEޮj礙C#X2թtlD=fיIL!+ƒTlO]I~Nmr]C 20So :)b(8>DY AcHhQB3o2:-O$!>;8㱤4ݡYy-L$Ko&oh:$*RdBׅ&;8޺2M!Pa H}dt|k{qΣGC['"ci"J1B`!˨(ZA09{)QQU3Њ$'X(͍bp5R@el=˿ rb4 DWLva-=.(#$k'q1RֱWiw?!N%Gv'K.s*Th݉;3DIWB0nl2oD򇝜V {0MFc!S>_ GI+u@s7C[oQ Ay@0Ȝl={tvWvd( ,({icdXmdLN,qHDp M2'Z(IqzLBt x(}h 2D_2rt]W+n|~x #_񔡳!5 Zk6=pPCS5| yk B VvkW&ݎVwGtHCZMlLv:BI(Qi;.Аw%r|Fdd%3&IL8]r(e~xHjd\_W.nzXUEIJ |[a"qX=hA,ĉ#]ALSRm%E= J 3%B(S(ZCPؼ EQuB\JKM=ue?4e__z09~Wu#W {tiY2'+;\{|J  bvf-?\zn 9H2+XB,Гs*yʒGdAAR"q}@nXGll"́mxTD: S9nƪ/rc&%Y?6)ۜ& sq)$ #B܃rɎ<-?FUE x[q-c$4{ΆLƨ!3_`2гNMILDu[Dwh3FW@Q>s'@ɖgu<2i-d8nKAV{WM{g c(:5xZ<|6Fnsݻ>o.wK[B,oF6<Ɉ=z hWanPNTfmQQ9ܝ/ uvpe7/:?SpzT5&ˎm٠{XZ 9wS0. Xgf/O+WI3]ރ}Y}g tu_"{IdgB2}d#'ia ! iDj#"V2XGG۩JlWX!|(+ 0ҖhfoEӅf8eV2hT<[KҪn4XpP(,ўaM.-=:@Ak損z5 :(oDaƑK5;02eHɪ !i; (dXZ~39JEV6hr3IJxu~,? l:ǿ>ź.n[JGk-]t8e{aτ.W\Nw5^8<2@V-..3״b1^ O}))..߀78^(:&:PU/q'u}VP+@ l2مФb%McN7 l F@h pˋC׮ca5~[6qrEcC4I!JaJOk'x|ud$QjeHr澷dHl )d+P dT剘$=\Bqܻdڐ̦XٱaHoo$R(ZYvr$@FNd 19Cv\|Ppc9SX+'- # KIf791EB*#e65I&<!XE)@P|yF Zg-{Fr6@u|;y8Ǧ_v_ȗLQUJJ\,lC{@Pt6fZE{ Qz<4PHjp=GVa'L`ng?u+Y>?cʔ2]кpcy'|7Ov1C_Y kQ\Mùڹ*4k}zwhT2h#@ }+ԫ=TVSF4l[ ੨ingdIJVF`mNL=OhQe5Ki7@ Tdnt>ȱ$`,S”aD{R~ie1PU4oUې#d7{lKiRQ$ZqIΈKBSMt:K6 Pzkrqms"`4\ #3/"[>%'`)f; \fǶѩ*'J1D,Y8PXf/g,8Tk4 BBsjHVeS(S \r+nr.R.BEo MDHUUR;Qt3$ ܻ*Y/urIw4g_O_ϊjխ];/Kd?$?3jk~LX~Vª充eWTbf9;t-\?r +v:g~>9ahec^uxRp9)L^;8aN7V?V6{/D5_ʿ*JmԴwᚫjɍb7H(EE S0B`ʰyaF 58L̒3LfѬH]A tGlh)Ceсz,I+WS:d<;邑qG{m4%e~~FXj>m˻ޭ$ZXcۼ+M b!V]K[#G,"\9bY9b()/_ȲȢubOU 4 Exkt,:¢;j:yޛ,F70tMoϮ4m,.vNP߳>k⚿egߧktEE?MYzϜ9߁me2;IkSp}MpoߜPñxELYKҊc&8hcUdҎPP~8jW`Ӑ'ۜ7JMbdrla MJ =:u!E'{d>FB<b|blkN,Rg쮒QYwy<଒hxEMVrLE&i@)#\h/@Vel>[:7.wTS@H=DNz uC"gVT%y+PZ6mZnםW>߯?y' Cςdyݟ͘PRH?( xLvU[>C8}$PβU4Y v˵|^mP &ImECA`IBYIhEUfk۲I!]d[%rb~$ǖ\81`\NjCI8]`eh('sYٹ,6xU쓸YR,Dq 3B` |q8GQ#LjeFL暫ag [L(Rb! `tBQJq MίVX" <$` ۉL&qwD!GZY]oP EdMv䐢C%Qr)"ca!XL)ɛjtVr8q$dLݭ'_Bgqu$?ymʹls>Hv.Qۀ8?D)A1<&LiбC{Kh=z7\d5P5!e@fk=%~\3ֵr~9ѝP2 Fx|L@}51le/0 ڨl⡆>&&)4i`S%,05Y" tH$ w' m[c wBt6klcŮB9 ƲaP{3I-r ](/t  BDB,ߘUeQ)aP#2JIL [WKڷRBƋ"!Jź!rxPbĢ|(@an)΄`D +`SBλD;`hM=FTLj2%?U; ZPxpLjΖAΦP"6p^`M;' XL2v̂:1P j{$'. S j0`.uJ_R7&`m7W#I\T #ˬQa33ҳ2=Ma! ZF-Y!1LaiK;eč"GmD ´'FKJ*2 @I6EN6#''tL#UKmУRKC1/nARR0MbPh@%yuex4S|}Q.g)#P"ԈvmH?~>W h Զ@U*A0 Gٻb˚SY߈a ߩqعTGgZ6;:1tC!M2 S?"HIdsl/q iu@S0~p"pּ ,b KfuEWsWhpO8l!AiS(šg6=hMFMkRbt^X{Y00,glHw!\mCvFZ5FG;;DD0bgy0$$ Az?!>oX)F|zpȶ $'NbA6c-gy%8$SAٷB^mk_3A_d6cZgzu=BT뷿ZgyuFXG-xm֫>WGrXJS+WH]pxUxC )B[=\Y1P0y-&9x.F+7oM3'=s͐X4:C+*\EG$GB{P1tM5 ˢאrϒEDċq&D** (Hjgsj Z6 hghu"4)+Pei,.*/~?RG7[|7^qZdĔkauOL^>+}V3.v-S~]:^_j9?oK?bpM]wUxhܗܟxp≏׉_F+iK~v|.o+S8Q-L_jGRBRσk*S,ٶ;1%}\ m6s0:ʝF/ڰ'%>1RBi ^QKe(}UU< >Z\|uqH`q3'A? (/Yc 9afpV` tAϦ$X;.|i8ਲ Bf%%kR CYLl)j6w4g]9wW底/֏g"ȜwI>zfalr9hU2OZ#~Myj,2fS1=#G t/UtQ'Y$ˋ9DZM9H;EAR+mUK> PKڊ=4e_dmt#T41j^`!ZP#?3W(7pW6 p~nތ}yy~2&쉌;H[gx6%O>2k^?ዟOoԋˮuӡ`="ٛ B7~ֈCGLݪv1M#u] ޺Cڊt\L {eI7'C#R~=f #(7pW6 W'sbn{撖DLruF(T8+ݫeL<&:i3'`Ӎ*/;G:|kTկ*\PLϕzeC^ DQ{/:uŒz7^3 Z\b|(%=2ᇒT"o(k&;XĆc! j!O6Ϥw2[Voj[ ڢb(YwbzC(e 0*2hnbs&hy̺:d.`e.%&zblv1vmx;;(v뿺!y[-Ñ&[=B]~}cuWT7v&n}avu}ηZF ptnT")nLHRnv<ۣ^WzE=gFom \.r+.j-]JJ1anbWx\jpWv1/1msh͠j^TrFؼ˭\rp??_\M~,WC"Fa&'KT|U)7T"th}WNem_wuGJw].?ˉ`~R\v^lʌU(q)."JDɯ s%ㄇbnx"[|FDɣDx]qU4aMu?a-=nm>BDܼ>=ʡ˥cxy+wFEѵ?%"7V3aa{6v}y|9{AX,!$, KERRZ[}.HXW+* @X"  ;&Yl<3_>dsyyse(ϑQb4s<Ӕvcj&0_WrSv~γz;h.&,,#Q]#&,K"}dԠn2J ]$Itɤ\$dLe`(+0'|LI |~O??~?HzaY1` F HyePTIlP/W@JHќS@uT5]/)F1G3H)!{GsNUAc j ^[ym^L)GK8|.h1=q(ͨLiuEo%6~P[3 hy`尷nٿ˙D2aJ۸4Eh*d1JByeݗZ +I1mkue!c9%(W&2m+;{@I{|ܠl_NQLoS#,wAMYNH-;%J4[Rh?K[+ww?^5!}GV,t}A8ާ/.VY]H= ԕo/ in>mV͸CLMq)3"i>}!}´Ǵv|̆[5ewUT $~~+__-Yp5e5〉Cf~ONܱ҅>DU+%w{-ٳ]]_ KdJbff;t<"ʟ)SN1j|izpưPKTrX6/w;__n< "*}g X'g6XBOv2eèa5]HLi1f{(X5/1&keƘ (דbcw^ͯ$KyuF|s%|M3%ƔVI1f;do"9ϘX̭ox,&1ɲq1 ev6/˒,MI"m$Qd2Q!i1k=AbpDt]coy>T2p{ODJ\zF>XY^N=H6IYU\7ɶ>& rz/5裵󱖲+DUdT"IIVt*9MzWtUѪK|~}~kG? w[AŇ%,,,t%eE9TOMnnƣʒ̧rןsף)JW^x/gû۟ack4iɩ!;o߶Z:h O$Bg׽{zc{x Yk8.OTj 헳 e|*^yL@TIDAT.UՅ-Gv u>_ .?z>ȵd yN3vXS6 x ԤτTV=cZm0^&t Ⲕص?!Of g0 :i>.c|2ҪCVKU8k'qbވW +m*l(v^s6л& ^9!@i1g/ Fy%'ZEA @݅c?\!Jt\zJۼIx3l(kGvi5khywmt(ʲqbX6I6R.FTF5)4 FBgcTab jPƄBP&1e!5ӴG y|ɚ8sޱؙyU*ꌓ^阌]taKϭ5dGל C+@[a!GشtlM77by\Z= +WZ+X~t8yl%/8Bkٯ <5IWPAD="tHN`pVOA=1< & xtu fN5|ÃS,;(3r blg=KXѥ'M[b(n.9ggЁ}[˕-}qP|}PWh+YOdI)f d$.|Q5 Z]#P{-o(}Y)M dZgp߹ l$\P/qpHVd 9ZIhz=!Mb̔͐NvZwzŐY{ڑqS a @]M:Zs!$>q/|l܍ah 04esN.RvB<\ezg73ղ ).%R?劀HC$ H8ք)\rtiЎ5{:OFD8vևw׾=k+bJ.ոwꮗ.w_քy2V{~EA _+/+ɤ"Az7C՗*O\Ǵ4zA }q~fƻD:j_潕j+}15K2OZZ@i2 GNhgzT(}l:/c^v6GRb }7W[C\nb~lu-sp.AGt߹7q$s 6Ԕ-#ДOjykԐd()) Oz/.oMxmcoC4a5?))gvItNf]ZKv;jP{ (Z Rn3™fdȥmaX%p0!EXGJO͉}aHigK`%ǥTk_U_S3(#eܐ:K׾5|pjhX \)8XgN~ `Ljs!>J_}+ M\RZ=nչ1;XԽgsԕˡOr6۶\πR|yU 0u _+/-.)*.)..)r՜++2jԿX;~hݻ336go8)$#56'~;_[o'NRgm5軚'69#c֯YfKNE[`[.F46Ƨ`mO/=?<{W̡=oj=ǘ-`l|iQY;f4Hطd_>V3|+v>tG>⣒,)cmYСG)Xu_f2tRݖkWΙ>H>r{ڼ;=SڱN@qWٕtClO̙޸,HsGg9[,+Ndm]fFeW{t;꠵ߗ!3}X?ӳ|p͛|ߖ Ss~|$ 4cl_KE%U\lwu 0;;]cqWY`}?8Rg7{ BjPZ<|¹s>4Tv=Ty<ǘ_~ W,=}]IR3?%ց#;VZ`Ƕa^\lߖO.Z6v;u}_]2,^zs#;|vVi@Pϧ-?g;,Xſ,Prl+Bk.= G޲eOщgև.dN;:#;WZ`•cZUv^4tv6Xȱfd=Aoxr _͜,\6K""HcK˰#l#dilHkMˣ$(M-]Sz&0Earl,v87o:MI;;W@_XW?} /?'#Aaހ,a{|M>9sڸotk$s4gK稧RLɒ#_]pn^Mgtbڛ,xs^zIߟw˲ic$gĽ_>܂"hWbܿ$_W@Dt)'+^X0Ӈ QcJ/*՞6I!7d)0V$?Q_7f? lOʏh$ɲܨs_VՖVĭ=ICR@Gc%fV$dMIQ3kdtKEEgL ! nMSOZ^|-sϸ/- 1%i3ou=gM+嬀#z)S,-"4P3z,Rlߩj"ڋ%{1e-l&q`}ߑfJ g{]]r"-LPi~ rMq#c$dYPbqxy_`k'0䁶K, [o4`f aqNefx68)=CoVc|vU$ eT|zKeF"pshZff#,k+YEHڃPQXdS\$X,`vW+oc *A8Nrd7)($ur;miݨI^ci{[DSN~&.vfr!ӱ1Yhx% /8F;ǶsYrSTܑaʙd[$a 2(5!'0%s&ƱgI8c!?+]JFKJE٨^tU/Kx,(tpr{d)2a!Ϙgh%<7gsx4PD͎H)#FkMY 6B@ ͚ m <#(>qtj]^I']4!ZڥkeJ,xDђ n;:: NVȡ[Umhɀ ]\$`6EBOÿ.g-Pr!Mܛ)YqHD. bzxlUG h g`/|UO~IvE4'xr6WlY2e-pj-;mLXn̳:ud xsZҋ TPDLhl!Y;AX$W<)]2mk ʆz97G΅f1u~1yX.k83z?#b.ؘ FF KRa,ŃӴa#銜G+T%^E S s/u5? uD^G>iEu#GyEFqJܖ)bodFSR#R9ջs:xM&MXP<8NѨ];_TvxCsNM5$*-=Dh9 Bx ?3 䓝sM "璗UgBpo8# g[4 Zlڍs (  (W58 m-KL 5V]C!@hϝЉ6gkߺa3l#=䲖PdrY%(^L.RuN)Bny2ӥy7On:K|IgCk-Bw!EаZ ŀF3eg!Zh-I#InA6Fi'A;ۨE! E!)Vz"[̹TxG$^xݖ1`pCBa9J5m{/*ColN=]WTl6C } Ɩw^lDJ"V;lnݩcH/]^vF44EɜL<>VA6mxU4GgCJQ(P@N [M `Al"e* 2oZb`tE,P ]t7Jh5QP; qN; V;5)Ed_0w+I7C^U.b[dIߡ02U c-﹩+j ;d&u^ uA: zXfiIh pKcéQ,"۵>m]EO9ȵ'qB!-0GeTKE-AV+0 Y7)K 'i@|m] FzmV$Sru?̺-.s̀Rh-68\ܕh [QMo'-(҈2>z .!== zؐ#g̉EkaD6ψua-{S`Am;@\'2u1[yV"Gwi-57B<1z;_p+FpdlZu&I\ZfjD#"{?<@x(1W F%rxv0n؟ 5h3X^BJY s32>u2:>f*'fZ4-a OŮG{ ۹̈l.{rϚdouwf }pa RIENDB`glances-2.3/docs/images/sensors.png000066400000000000000000000400771246314757600174200ustar00rootroot00000000000000PNG  IHDR>*sBITOtEXtSoftwareShutterc IDATx}wxޒ %@t _4ADJAQ@PP7 H tBzner{ãٳ̙4 D"y(<3/GG$x5>(_,"wTIy7=|4+e<_63@\5 P1:QL4I2I"& 0XO,8("YJ7H$'FS;XzAC~0O=L6ijQTZ1q,-%i59;F0eCr@P*X6}$!}Cp#qos=Li"}AɭAhJXpJ$k"&BUCDc$Q=#R 1w&bi *r}Kn/_.YJm\Y#򖊀$~;e0pd xR( `vziy劰#tjERM 9zSu"^P$0Ňr65+9j!m6fVf_)vxߐK6|{(>fY3On3ʴKlj0rH_[6~~xyC`ZK2Nl=QQKI I,1&y42&e}7Dcu>g/W PExo}⩳g\7畚fyrdi9k/^ m{o5ĤK<*"rq[=7.bن}ܽ_ԸgF?ZXZ%g?ڷ$^qpҐwdLf2IY GXrwMq/dyKH m9nyuĽ1m~X1}ccΪ匢1u\ ƌO͹j ߡbGƴAA?4ݧ檥1Ew\VM\!ZC[k1!/Yz`d×~v~eU.u)E_p"}13ΗWlV$8@:-^XA7#Rc2aET5$zزh@F$1?k1q_b='\;"&}Ι1ufW{ZR߱FkurSȕmߞ$+@PN ܚN罽k@-bUw:Y].8ú 7+:?B*I~Dɖ} #O+f*j)#ʇF3.{?Z'xQcScŸ'Ӝ✩&:UdlYNq@Ϯ5-vTu{zWy뺷u8NޣVp"SӋ3S Qn`†N\oY={=޶)NMt1_J@$W+H,=DbH, AaX:דbE"S|=K]F}'Ə\)2О $"(`BH3o'%%&%%&]m.wхU?߮2hD`==y8[mV+(ȣhVY80ˑ8v{k#|uSyZp@5K֨'Ak" _dHd KLUxKVJݗ!gvѻs=a|āP ((僓DzR%_ZREo7ÞmLG?ey(8?zGlfXVT.s]'-LOsu^c(Jf7_K0~2lq7Qi\nu5,R&rĪ: @*/Lf͓&1U6OQi7FH@x98/H;,C28h>@~aHxd?v$!Urzeȑ2L+D ,K(XGPW3+]e;O =]-#Q<b(i&Z.,oH5NmKJa~ZQ9G'WL4A$3MQ)tKOڴPؖ{+.&rވK 66O{(W nn)(,P"'Ič]%iG?^@X>b* i֯9 YY7m9ɶd[N asAl1:g ]~w޺M#68X]~'($N^J~9reqia}ϴ˴mFx/E O5E6Th˾$e/v[t8C72#+!kW;YvF@<̍BT at@dx9" qRMZ~xMB~),M7MMFskhA&8 Gdmfxɛa))!8HB{KDG<< ff0[ڒHRI4D-ǂB I˚c?J,s֤>$0}Zk@.ϲk(8 Mxr9 [ڥD{ 89ꌕW @`'")-!ˡ>nP q'Bd&@2!}#CՁ7o_A|qdk$H!WDR BUih5ZMӱ~ #ɏ V<68[d"a*fT &񥹻zx * GPEŒC0J33E{,\hIJw1c3:hL,{SE: F'e$Ru1bɜ+AUfM r" 5P |4GP]JUC1ݓ8M ̌k }Y=3A +E7FҙsiI7Q#xe8ҷĨbDu0?kt1-Q"Y0;wgI3qKezoN%)FEg =N7TCilUw@)DFC:3 d6|:rZI TD{꼻Kz xP2A%Ƿ7T! Lfq ?UupRQ]s1z]*\[]QANfMAMƅf@Zh. ZϨu??RؤbMf%m2KD:Ѩ`/J/c\K뾞樱sc |LbE_cՃd0 M|w:L<HPn> E;N8:BAM ~U `XXUQMBWMуM 'Z$a ٕ0G;m.֏q֪r,翭j>k:8*:H|I] ŵ6 J:Obϑ*Q(MOQ9## ŠAX) l.x Q%჎E7,[EGs{?)a9&RxQkW*$ 69;^Z?2 $څXyaOřUA(^[N/g26ՖH.~< B;8P2"ESaXὍtRʭAXF2 x© [vs>c-]*. T!#@KʺHHt(O@@RQf( Ɇ2ra [(_q s;Йwtw}woBCDs0\nY*=cn?"V>Vp%0J@Xhx7pg_<̴vW\-t']KsB)D,kHCDP ˳+T՞$`g 7}ӣ.JܱE`KOը|MjHsF5w]O-\< 9ׇq$ЧY>]CzU!ҏ$aX@D)QQxA&~[noB\I+(ۓXLYpSk `a&TdBZ$#O`N^LmNᢼS+4k[ruZuZT`~n¸3W5%vS> /ㅉau-Vbz X=rPG`ORG)C8TL|g Aei<{]qP}V~ZL;JtW?vkf Ģ'^;: ,ۓ7~{o1}0u_ n׶ghG {%:^ͪ1{e DAI1 QܴGh )]d.4T۝KR)q&UP=?a@=upM~v42js"S29S[eVr0TwF\._Ċ`% Ekk(U_Pi?,"1䫲j(>)._#s `P$NB1a]&WCtkIN4@SSrZ’v/]=,tx :|J " ekإdEB}b5N\YpmR[Rd!kcjzjcJEIAO=s\ܩsq[1IY,ȭ6+FԎA0µpɐm톺9&}Q\٘5W~ⱍ|Z  nӐ\ކ }Z*Ifщ[Ʋ]W2*W8U:G@-?fMM6eƀj{µ7δ 5uRVFbso" z"љ#^D9}/fvArfd!<LB3`{jE𓽞SN lr )+.xƅn޸+Ka>o׻^{R?}2W>QkiBP*P$.":jX=eW3)mBk=U='xji(@VUvJ]v,ƟDS4$U{F dSK"+3lc+;N- ``T#ZO\vW (>d.ZK|@F&B{ʾ-*m&'\r{ʽtݦlP{'S~&KϺE[zwxCW\ |U5ͤ}'ǖmٷmW+Hgټjr  }e"J2!R(('d- :4Y L^UFa Bpοs 61piuѮ@iG:س3l%!#kvfIꓽ[;MXc׭՟lsbw䂫7*w\TBkUp x["mmRIo5UiR@Ptbp 2R!N~!Cc4lzbh a楳Y.!&ݑ{EԞs+iY:z܋s鵾J%QI/$ vvl}} _FG%WW"vQޭms .IDAT2uulV]aiFPl _6-'-y=׮EVN8gZzq&Ujq9"?,'U#3^4胠P(piyPw=E5T l y2aET Ѭ ל7rrRUEqȻ3>vz]tex9kW5q7c{#Vϝ8ō^LM}SxRvXӧ0D<8$~Úr.0ʌ Ō"_=fB&4USl]Χ[궈4+6kw3ϥ<8)&X e!jX='0 5MQu.MMcG\9'-超wƗ ^j^7bT纷 -9]~XeWtkZ#J' Iwi^X练~q,N>Q>]+B2fN;%spt+exPMI͖ssBkLmMV֝7Ks+4M'a,_߉Fi­ 2_AjPu쮘vy \+FE"2 Av q GZڍfT`ƞw 'H~iOHX}Ț;N sS>r<8Ռ=_Mr䃼WƵ"x-OV7W |eoNUQ|n-ǧd\ -H H6?I#TĮ |$(H:J̄ hKn$H3U8MET*Hߎn.BQd2ןc4-P(`H%(Kyө)W~D A̍ 1T8 =!kTJF.rch7L"1$)2J`frrhTNnH,fp;)V:Y7m@>`,AI #r{{~[n\<-~<}t:e0/aϏ~;P>0{~~qUrb~k캻vs c>VΚ?mw<ঁk&W?ַgՋ.[y;/IXCj+/诪w39+^ςPg^XR^AR_v.Y6d%ҥ֔%wDQPNM @EHX2˃_iB} 0gފ=l׏6(vaptHy/,gĝ=@7sx5 ` סXgvDփ]w^ ch*S(%**Qc6}ިYᕂWh8.$22Оu7)6fiԷS |'sc:WÌms~8o/3Vo6-Rn_mK:T3*-}uuB ,`Ɖ'քF6TEr:leb^*̙nMl+2 )lP2m^' ˰jA&\[W̭kBgᵋ fr}!'< "̓~(rB&J7$G DD9zB&"j~8›5֥WxoGnG(X] -TjJ\ *vJF"K'o!%Q)ŝ 3!%Ȍ׎ .V~Z)`\CK^z!q5kRx@uzX xj:_J\l(_bi ov9,V ^+vrI5C7Ѡ-%SsWz"Un7xpӍ|u+oO$d Ŏ,_ZxI lb$IzYeʇDyL2Ƭu?ws&Nf]Na6#/Z) >ۯ_vOXj:փc s;j{>\;Qn.] jMܹ)a[~n!3Uv_IP[EQ&,2͎rBF(ŕ+H %9\@ <'1#NH@qF*ޘp֬k~os&|=c_AA㾈%?[@ ׌ [vqBjo}jE!)Ѧ4 TeDq'11w&P 1^mX*P߾-*&YO7%B$8ͧ4zMBKaƶ/8\`/lgx7{w2w˙RtF?tP-PFo(̆@P\bjY$^tH(\_xaU=bF֙;9hUr+hT8 @XT|Zep17u9 ť  }s7R}Ĺ5*jy5stX7QE`瀠>6_ lw%a*UQk8kHes~q/Q׆*D&P[T#rPǁ(Iwy}naR*8KJUK~@!H7ŒbdBBALziR%uIa毳F2lO;y#5 CS컳/\sZ)FkWk>O-E79kum-,֊'|Ú!֨_T-׾!OT#ZCǶXIdC-Qa`c}alyݪ '&)e3eh㭟'n^XV.|8Uga[+@Sv|K3@XhSf93U]ApAZcLw{"` +ay@FQ[Y}G AX3 䟿հ?˦z \Kq/2F([6jtI,ǃVpP&~?oĽ '9P\ /5V ]?)ܛp̊eC0RDq%.Red&lO+tZHTW%W ʪ+aYקmI1KN2R{*kU._jhFm~DFKsc JYsHF4"%NnA$E$"h}u>% =a+Jj߽2p^WB7 bOk80%}^i$d0WT?GFDE%AM@Ei֣("+I@:2Je1/w!&k7-*<^8kF֒|!*qMT-G(:%tB~"rU~|3TٓMǛ6 _#:A})(M#%#Y sFPvh^OYGRVL CR@0)Y q 4r3_+ ջ^8!]Fe FIyfZe%HUGRXj"*Cd-ez $wXE,Ƅ(ai0$cJjIv NB%0$GUi:}uxI7L1c9YjL!1qFYǨX@^xvP7"2I>\'3p|(ĂSC@9u9'v;|1mI^UEgDJY,q{&I (1( ?FMo/?ݝjH5CY~oP Cs;3ojђ H;2ӠwDS7\m>I\?uxowqZI62m=՚:H~⮨DLU&ܱ…:C|!*x,[u w)Ĥ_}1)K>~x?!@ƚ#?~={Ĺ_Dp`yk ;Np䯟\-|޹;{Wܺ1}Ҏa(UĄcb[=pW""0p` <¼ݷvX3-13tr3B_Mr|<Ez*CGҊ>Mڶ}m{-vr[4yِ2]HO~m^+!ON\6iԫטR`@-_ @.;/uF_;nWѱ,{O"XWaȜ<\xڃR҅T2gɽ*jT%G! .Pa_i=0IsOg j}]H\!e^ĭ5k5[/^evYδNO3KZuՆ@%?/w Ե+ ԲU21H#ze_R|cא~MHr@'8 J!nӿCիaOnz6WfLjWĜ=^aMɫ>cF~mZsD9عN < >24@`$ MZW1I˱C)l7yѫL!jA;Ҁg M`pFy 4!=n_2YzI 7+j]K ۯ׵ϋӞ~KT,+h{C'.VGt ?fK͒ *lPpAݫ-|ܤX*$hzeͽ Sӗ;3911I7n䍖?9`qOc9}cD%!-78 Xgd/0#[ݽ^nm;<)XPXEyvꉆ';aoKo]2u[n@()r)x*J>׵V_z Xz]wز8"*>U0x?E 3( 2\[89n'sXDϱ\AY``Eș ݪ?},Q=oH \7] Mv^)F!ԎkɎ u*ZNљ/?)&ckx`B Q*u+9^pzkI s1i5G7o\7SgݍϺ\̵bbB!8Qw1p9 upj4~`$8~RױSj'ۜݽ)EnpV\/XVΒrNn9;c3,M(Q^S_=I*mXD|~iP+cU4rD;w޲b ~lsnrQ%U_#DE.UǂL$PlN)6TUcbs^I;!;fol0zƩEQHHy ؊jѯίBJzz.J3V'i@%*M.-LQ)B@ndWm(H!2[g8#@B$D@:;p+D%2 kJ*Zpeb>h? bVPD2[4!e^1 88(ᢈ2^DB<"#(“+=P} A+-שYJ؛L8 ~͐k䐦!(ݥ8ǪC˕`_ is available on GitHub. Contents -------- .. toctree:: :maxdepth: 2 glances-doc Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` glances-2.3/docs/init_script000066400000000000000000000063251246314757600162210ustar00rootroot00000000000000#! /bin/sh ### BEGIN INIT INFO # Provides: glances # Required-Start: $remote_fs $local_fs $network # Required-Stop: $remote_fs $local_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Starts and daemonize Glances server # Description: Starts and daemonize Glances server ### END INIT INFO # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Glances server" NAME=glances USER=$NAME DAEMON="/usr/bin/$NAME" PIDFILE="/run/$NAME/$NAME.pid" CONF="/etc/glances/glances.conf" DAEMON_ARGS="-C $CONF -s" # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.2-14) to ensure that this file is present # and status_of_proc is working. . /lib/lsb/init-functions # Ensure /run/glances is there, cf. Debian policy 9.4.1 # http://www.debian.org/doc/debian-policy/ch-opersys.html#s-fhs-run if [ ! -d "$(dirname $PIDFILE)" ]; then mkdir "$(dirname $PIDFILE)" chown $USER:$USER "$(dirname $PIDFILE)" chmod 755 "$(dirname $PIDFILE)" fi # # Function that starts the daemon/service # do_start() { log_daemon_msg "Starting $DESC" "$NAME " # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started [ -e $PIDFILE ] && PID=$(cat "$PIDFILE") if ( [ -e $PIDFILE ] && ps -p $PID 1>&2 > /dev/null ) then log_action_end_msg 1 "already running, PID's $PID" exit 0 elif ( [ -w $PIDFILE ] ) then log_warning_msg "PID file found while ${NAME} is not running, removing file." rm $PIDFILE fi if [ "$RUN" != "true" ]; then log_action_msg "Not starting glances: disabled by /etc/default/$NAME". exit 0 fi start-stop-daemon --start --chuid $USER --pidfile=$PIDFILE --quiet -m -b --exec $DAEMON -- $DAEMON_ARGS || return 2 [ -e "$PIDFILE" ] && chown $USER $PIDFILE return 0 } # # Function that stops the daemon/service # do_stop() { log_daemon_msg "Stopping $DESC" "$NAME " if [ ! -w $PIDFILE ] then log_warning_msg "PID file not found" return 4 fi start-stop-daemon --stop --oknodo --chuid $USER --pidfile=$PID --user=$USER --pidfile="$PIDFILE" --retry=30 || return 1 /bin/rm -f $PIDFILE return 0 } case "$1" in start) do_start case "$?" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; stop) do_stop case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; esac ;; status) status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" ;; restart|force-reload) do_stop case "$?" in 0) log_end_msg 0 do_start case "$?" in 0) log_end_msg 0 ;; *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: invoke-rc.d $NAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esacglances-2.3/docs/style.css000066400000000000000000000026601246314757600156170ustar00rootroot00000000000000/* :Author: Alessio Sergi :Contact: al3hex at gmail dot com Stylesheet for use with Docutils. This file is the CSS for the Glances documentation. */ body { margin-top: 1em; margin-left: 1em; max-width: 80em; font-family: serif; font-size: 16px; } h1 { font-size: 20px; } h1.title { font-size: 22px; } h2, h3, p.topic-title { font-size: 18px; } .first { /* override p.topic-title margin styles */ margin-top: 0 ! important; } a { color: #0055df; text-decoration: none; } a:hover { color: #339999; text-decoration: underline; } a:visited { color: #800080; } a.toc-backref { text-decoration: none; color: black; } blockquote { padding-left: 1ex; border-left: 1px solid #008000; max-width: 30em; } p.topic-title { font-weight: bold; } pre { margin-left: 2em; margin-right: 2em; } .console, .literal-block { background-color: #eeeeee; border: 1px solid #cccccc; max-width: 60em; line-height: 19px; overflow: auto; padding: 6px 10px; border-radius: 3px 3px 3px 3px; } span.option, tt.docutils { white-space: nowrap; border: 1px dotted #008000; padding: 1px; background-color: #eeeeee; } .literal, .literal-block, .option, .var { font-family: monospace; font-size: 10pt; } dl.docutils { margin-left: 2em; } dl.docutils dd { margin-bottom: 0.5em; } ol.simple { margin-left: 0.5em; } table.docutils { margin-left: 2em; } td.option-group { padding-right: 1em; } glances-2.3/glances/000077500000000000000000000000001246314757600144255ustar00rootroot00000000000000glances-2.3/glances/README.txt000066400000000000000000000026201246314757600161230ustar00rootroot00000000000000You are in the main Glances's source folder. This page is **ONLY** for developpers purposes. If you are looking for the user manual, please follow this link: https://github.com/nicolargo/glances/blob/master/docs/glances-doc.rst === __init__.py Global module init __main__.py Entry point for Glances module core/ => Glances core folder glances_config.py Manage configuration file glances_globals.py Share variables uppon modules glances_limits.py Manage limits glances_logs.py Manage logs glances_main.py Main script to rule them up... glances_stats.py Inteface to grab stats glances_client.py Glances client glances_server.py Glances server glances_standalone.py Glances standalone (with curse interface) glances_stats.py The stats manager glances_timer.py Manage timer ... plugins/ => Glances data providers glances_plugins.py "Father class" for others plugins glances_cpu.py Manage CPU stats glances_load.py Manage LOAD stats glances_mem.py Manage MEM (both RAM and SWAP) stats ... outputs/ => Glances UI glances_curse.py The Curse interface glances_html.py The HTML interface ... exports/ => Glances export interfaces glances_csv.py The CSV export module ... glances-2.3/glances/__init__.py000066400000000000000000000134721246314757600165450ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Init the Glances software.""" __appname__ = 'glances' __version__ = '2.3' __author__ = 'Nicolas Hennion ' __license__ = 'LGPL' # Import system lib import gettext import locale import platform import signal import sys # Import psutil try: from psutil import __version__ as __psutil_version except ImportError: print('PSutil library not found. Glances cannot start.') sys.exit(1) # Import Glances libs # Note: others Glances libs will be imported optionally from glances.core.glances_globals import gettext_domain, locale_dir from glances.core.glances_logging import logger from glances.core.glances_main import GlancesMain # Get PSutil version psutil_min_version = (2, 0, 0) psutil_version = tuple([int(num) for num in __psutil_version.split('.')]) # First log with Glances and PSUtil version logger.info('Start Glances {0}'.format(__version__)) logger.info('{0} {1} and PSutil {2} detected'.format(platform.python_implementation(), platform.python_version(), __psutil_version)) # Check PSutil version if psutil_version < psutil_min_version: logger.critical('PSutil 2.0 or higher is needed. Glances cannot start.') sys.exit(1) def __signal_handler(signal, frame): """Callback for CTRL-C.""" end() def end(): """Stop Glances.""" if core.is_standalone(): # Stop the standalone (CLI) standalone.end() logger.info("Stop Glances (with CTRL-C)") elif core.is_client(): # Stop the client client.end() logger.info("Stop Glances client (with CTRL-C)") elif core.is_server(): # Stop the server server.end() logger.info("Stop Glances server (with CTRL-C)") elif core.is_webserver(): # Stop the Web server webserver.end() logger.info("Stop Glances web server(with CTRL-C)") # The end... sys.exit(0) def main(): """Main entry point for Glances. Select the mode (standalone, client or server) Run it... """ # Setup translations locale.setlocale(locale.LC_ALL, '') gettext.install(gettext_domain, locale_dir) # Share global var global core, standalone, client, server, webserver # Create the Glances main instance core = GlancesMain() # Catch the CTRL-C signal signal.signal(signal.SIGINT, __signal_handler) # Glances can be ran in standalone, client or server mode if core.is_standalone(): logger.info("Start standalone mode") # Import the Glances standalone module from glances.core.glances_standalone import GlancesStandalone # Init the standalone mode standalone = GlancesStandalone(config=core.get_config(), args=core.get_args()) # Start the standalone (CLI) loop standalone.serve_forever() elif core.is_client(): if core.is_client_browser(): logger.info("Start client mode (browser)") # Import the Glances client browser module from glances.core.glances_client_browser import GlancesClientBrowser # Init the client client = GlancesClientBrowser(config=core.get_config(), args=core.get_args()) else: logger.info("Start client mode") # Import the Glances client module from glances.core.glances_client import GlancesClient # Init the client client = GlancesClient(config=core.get_config(), args=core.get_args()) # Test if client and server are in the same major version if not client.login(): logger.critical("The server version is not compatible with the client") sys.exit(2) # Start the client loop client.serve_forever() # Shutdown the client client.end() elif core.is_server(): logger.info("Start server mode") # Import the Glances server module from glances.core.glances_server import GlancesServer args = core.get_args() server = GlancesServer(cached_time=core.cached_time, config=core.get_config(), args=args) print(_("Glances server is running on {0}:{1}").format(args.bind_address, args.port)) # Set the server login/password (if -P/--password tag) if args.password != "": server.add_user(args.username, args.password) # Start the server loop server.serve_forever() # Shutdown the server? server.server_close() elif core.is_webserver(): logger.info("Start web server mode") # Import the Glances web server module from glances.core.glances_webserver import GlancesWebServer # Init the web server mode webserver = GlancesWebServer(config=core.get_config(), args=core.get_args()) # Start the web server loop webserver.serve_forever() glances-2.3/glances/__main__.py000066400000000000000000000023431246314757600165210ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # # Glances - An eye on your system # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Allow user to run Glances as a module from a dir or zip file.""" # Execute with: # $ python glances/__main__.py (2.6) # $ python -m glances (2.7+) import sys if __package__ is None and not hasattr(sys, "frozen"): # It is a direct call to __main__.py import os.path path = os.path.realpath(os.path.abspath(__file__)) sys.path.append(os.path.dirname(os.path.dirname(path))) import glances if __name__ == '__main__': glances.main() glances-2.3/glances/core/000077500000000000000000000000001246314757600153555ustar00rootroot00000000000000glances-2.3/glances/core/__init__.py000066400000000000000000000000001246314757600174540ustar00rootroot00000000000000glances-2.3/glances/core/glances_actions.py000066400000000000000000000064061246314757600210710ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage on alert actions.""" # Import Glances lib from glances.core.glances_logging import logger # Import system lib from subprocess import Popen try: import pystache except ImportError: logger.warning("PyStache lib not installed (action script with mustache will not work)") pystache_tag = False else: pystache_tag = True class GlancesActions(object): """This class manage action if an alert is reached""" def __init__(self): """Init GlancesActions class""" # Dict with the criticity status # - key: stat_name # - value: criticity # Goal: avoid to execute the same command twice self.status = {} def get(self, stat_name): """Get the stat_name criticity""" try: return self.status[stat_name] except KeyError: return None def set(self, stat_name, criticity): """Set the stat_name to criticity""" self.status[stat_name] = criticity def run(self, stat_name, criticity, commands, mustache_dict=None): """Run the commands (in background) - stats_name: plugin_name (+ header) - criticity: criticity of the trigger - commands: a list of command line with optional {{mustache}} - mustache_dict: Plugin stats (can be use within {{mustache}}) Return True if the commands have been ran""" if self.get(stat_name) == criticity: # Action already executed => Exit return False logger.debug("Run action {0} for {1} ({2}) with stats {3}".format(commands, stat_name, criticity, mustache_dict)) # Ran all actions in background for cmd in commands: # Replace {{arg}} by the dict one (Thk to {Mustache}) if pystache_tag: cmd_full = pystache.render(cmd, mustache_dict) else: cmd_full = cmd # Execute the action logger.info("Action triggered for {0} ({1}): {2}".format(stat_name, criticity, cmd_full)) logger.debug("Stats value for the trigger: {0}".format(mustache_dict)) try: Popen(cmd_full, shell=True) except OSError as e: logger.error("Can't execute the action ({0})".format(e)) self.set(stat_name, criticity) return True glances-2.3/glances/core/glances_autodiscover.py000066400000000000000000000214621246314757600221370ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage autodiscover Glances server (thk to the ZeroConf protocol).""" # Import system libs import socket import sys try: import netifaces netifaces_tag = True except ImportError: netifaces_tag = False try: from zeroconf import ( __version__ as __zeroconf_version, ServiceBrowser, ServiceInfo, Zeroconf ) zeroconf_tag = True except ImportError: zeroconf_tag = False # Import Glances libs from glances.core.glances_globals import appname from glances.core.glances_logging import logger # Zeroconf 0.16 or higher is needed if zeroconf_tag: zeroconf_min_version = (0, 16, 0) zeroconf_version = tuple([int(num) for num in __zeroconf_version.split('.')]) logger.debug("Zeroconf version {0} detected.".format(__zeroconf_version)) if zeroconf_version < zeroconf_min_version: logger.critical("Please install zeroconf 0.16 or higher.") sys.exit(1) # Global var zeroconf_type = "_%s._tcp." % appname class AutoDiscovered(object): """Class to manage the auto discovered servers dict""" def __init__(self): # server_dict is a list of dict (JSON compliant) # [ {'key': 'zeroconf name', ip': '172.1.2.3', 'port': 61209, 'cpu': 3, 'mem': 34 ...} ... ] self._server_list = [] def get_servers_list(self): """Return the current server list (list of dict)""" return self._server_list def set_server(self, server_pos, key, value): """Set the key to the value for the server_pos (position in the list)""" self._server_list[server_pos][key] = value def add_server(self, name, ip, port): """Add a new server to the list""" new_server = {'key': name, # Zeroconf name with both hostname and port 'name': name.split(':')[0], # Short name 'ip': ip, # IP address seen by the client 'port': port, # TCP port 'username': 'glances', # Default username 'password': '', # Default password 'status': 'UNKNOWN', # Server status: 'UNKNOWN', 'OFFLINE', 'ONLINE', 'PROTECTED' 'type': 'DYNAMIC', # Server type: 'STATIC' or 'DYNAMIC' } self._server_list.append(new_server) logger.debug("Updated servers list (%s servers): %s" % (len(self._server_list), self._server_list)) def remove_server(self, name): """Remove a server from the dict""" for i in self._server_list: if i['key'] == name: try: self._server_list.remove(i) logger.debug("Remove server %s from the list" % name) logger.debug("Updated servers list (%s servers): %s" % ( len(self._server_list), self._server_list)) except ValueError: logger.error( "Cannot remove server %s from the list" % name) class GlancesAutoDiscoverListener(object): """Zeroconf listener for Glances server""" def __init__(self): # Create an instance of the servers list self.servers = AutoDiscovered() def get_servers_list(self): """Return the current server list (list of dict)""" return self.servers.get_servers_list() def set_server(self, server_pos, key, value): """Set the key to the value for the server_pos (position in the list)""" self.servers.set_server(server_pos, key, value) def add_service(self, zeroconf, srv_type, srv_name): """Method called when a new Zeroconf client is detected Return True if the zeroconf client is a Glances server Note: the return code will never be used """ if srv_type != zeroconf_type: return False logger.debug("Check new Zeroconf server: %s / %s" % (srv_type, srv_name)) info = zeroconf.get_service_info(srv_type, srv_name) if info: new_server_ip = socket.inet_ntoa(info.address) new_server_port = info.port # Add server to the global dict self.servers.add_server(srv_name, new_server_ip, new_server_port) logger.info("New Glances server detected (%s from %s:%s)" % (srv_name, new_server_ip, new_server_port)) else: logger.warning( "New Glances server detected, but Zeroconf info failed to be grabbed") return True def remove_service(self, zeroconf, srv_type, srv_name): # Remove the server from the list self.servers.remove_server(srv_name) logger.info( "Glances server %s removed from the autodetect list" % srv_name) class GlancesAutoDiscoverServer(object): """Implementation of the Zeroconf protocol (server side for the Glances client)""" def __init__(self, args=None): if zeroconf_tag: logger.info("Init autodiscover mode (Zeroconf protocol)") try: self.zeroconf = Zeroconf() except socket.error as e: logger.error("Cannot start Zeroconf (%s)" % e) self.zeroconf_enable_tag = False else: self.listener = GlancesAutoDiscoverListener() self.browser = ServiceBrowser( self.zeroconf, zeroconf_type, self.listener) self.zeroconf_enable_tag = True else: logger.error("Cannot start autodiscover mode (Zeroconf lib is not installed)") self.zeroconf_enable_tag = False def get_servers_list(self): """Return the current server list (dict of dict)""" if zeroconf_tag and self.zeroconf_enable_tag: return self.listener.get_servers_list() else: return [] def set_server(self, server_pos, key, value): """Set the key to the value for the server_pos (position in the list)""" if zeroconf_tag and self.zeroconf_enable_tag: self.listener.set_server(server_pos, key, value) def close(self): if zeroconf_tag and self.zeroconf_enable_tag: self.zeroconf.close() class GlancesAutoDiscoverClient(object): """Implementation of the zeroconf protocol (client side for the Glances server).""" def __init__(self, hostname, args=None): if zeroconf_tag: zeroconf_bind_address = args.bind_address try: self.zeroconf = Zeroconf() except socket.error as e: logger.error("Cannot start zeroconf: {0}".format(e)) if netifaces_tag: # -B @ overwrite the dynamic IPv4 choice if zeroconf_bind_address == '0.0.0.0': zeroconf_bind_address = self.find_active_ip_address() else: logger.error("Couldn't find the active IP address: netifaces library not found.") logger.info("Announce the Glances server on the LAN (using {0} IP address)".format(zeroconf_bind_address)) print("Announce the Glances server on the LAN (using {0} IP address)".format(zeroconf_bind_address)) self.info = ServiceInfo( zeroconf_type, '{0}:{1}.{2}'.format(hostname, args.port, zeroconf_type), address=socket.inet_aton(zeroconf_bind_address), port=args.port, weight=0, priority=0, properties={}, server=hostname) self.zeroconf.register_service(self.info) else: logger.error("Cannot announce Glances server on the network: zeroconf library not found.") def find_active_ip_address(self): """Try to find the active IP addresses.""" try: # Interface of the default gateway gateway_itf = netifaces.gateways()['default'][netifaces.AF_INET][1] # IP address for the interface return netifaces.ifaddresses(gateway_itf)[netifaces.AF_INET][0]['addr'] except Exception: return None def close(self): if zeroconf_tag: self.zeroconf.unregister_service(self.info) self.zeroconf.close() glances-2.3/glances/core/glances_client.py000066400000000000000000000175301246314757600207070ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage the Glances client.""" # Import system libs import json import socket import sys try: from xmlrpc.client import Transport, ServerProxy, ProtocolError, Fault except ImportError: # Python 2 from xmlrpclib import Transport, ServerProxy, ProtocolError, Fault try: import http.client as httplib except ImportError: # Python 2 import httplib # Import Glances libs from glances.core.glances_globals import version from glances.core.glances_logging import logger from glances.core.glances_stats import GlancesStatsClient from glances.outputs.glances_curses import GlancesCursesClient class GlancesClientTransport(Transport): """This class overwrite the default XML-RPC transport and manage timeout""" def set_timeout(self, timeout): self.timeout = timeout class GlancesClient(object): """This class creates and manages the TCP client.""" def __init__(self, config=None, args=None, timeout=7, return_to_browser=False): # Store the arg/config self.args = args self.config = config # Client mode: self.set_mode() # Return to browser or exit self.return_to_browser = return_to_browser # Build the URI if args.password != "": uri = 'http://{0}:{1}@{2}:{3}'.format(args.username, args.password, args.client, args.port) else: uri = 'http://{0}:{1}'.format(args.client, args.port) logger.debug("Try to connect to {0}".format(uri)) # Try to connect to the URI transport = GlancesClientTransport() # Configure the server timeout transport.set_timeout(timeout) try: self.client = ServerProxy(uri, transport=transport) except Exception as e: self.log_and_exit("Client couldn't create socket {0}: {1}".format(uri, e)) def log_and_exit(self, msg=''): """Log and (exit)""" if not self.return_to_browser: logger.critical(msg) sys.exit(2) else: logger.error(msg) def set_mode(self, mode='glances'): """Set the client mode. - 'glances' = Glances server (default) - 'snmp' = SNMP (fallback) """ self.mode = mode return self.mode def get_mode(self): """Get the client mode. - 'glances' = Glances server (default) - 'snmp' = SNMP (fallback) """ return self.mode def login(self): """Logon to the server.""" ret = True if not self.args.snmp_force: # First of all, trying to connect to a Glances server self.set_mode('glances') client_version = None try: client_version = self.client.init() except socket.error as err: # Fallback to SNMP logger.error("Connection to Glances server failed (%s)" % err) self.set_mode('snmp') fallbackmsg = _("Trying fallback to SNMP...") if not self.return_to_browser: print(fallbackmsg) else: logger.info(fallbackmsg) except ProtocolError as err: # Others errors if str(err).find(" 401 ") > 0: msg = "Connection to server failed (bad password)" else: msg = "Connection to server failed ({0})".format(err) self.log_and_exit(msg) return False if self.get_mode() == 'glances' and version.split('.')[0] == client_version.split('.')[0]: # Init stats self.stats = GlancesStatsClient(config=self.config, args=self.args) self.stats.set_plugins(json.loads(self.client.getAllPlugins())) logger.debug( "Client version: %s / Server version: %s" % (version, client_version)) elif self.get_mode() == 'glances': self.log_and_exit("Client and server not compatible: Client version: %s / Server version: %s" % (version, client_version)) return False else: self.set_mode('snmp') if self.get_mode() == 'snmp': logger.info("Trying to grab stats by SNMP...") # Fallback to SNMP if needed from glances.core.glances_stats import GlancesStatsClientSNMP # Init stats self.stats = GlancesStatsClientSNMP(config=self.config, args=self.args) if not self.stats.check_snmp(): self.log_and_exit("Connection to SNMP server failed") return False if ret: # Load limits from the configuration file # Each client can choose its owns limits self.stats.load_limits(self.config) # Init screen self.screen = GlancesCursesClient(args=self.args) # Return result return ret def update(self): """Update stats from Glances/SNMP server.""" if self.get_mode() == 'glances': return self.update_glances() elif self.get_mode() == 'snmp': return self.update_snmp() else: self.end() logger.critical("Unknown server mode: {0}".format(self.get_mode())) sys.exit(2) def update_glances(self): """Get stats from Glances server. Return the client/server connection status: - Connected: Connection OK - Disconnected: Connection NOK """ # Update the stats try: server_stats = json.loads(self.client.getAll()) server_stats['monitor'] = json.loads(self.client.getAllMonitored()) except socket.error: # Client cannot get server stats return "Disconnected" except Fault: # Client cannot get server stats (issue #375) return "Disconnected" else: # Put it in the internal dict self.stats.update(server_stats) return "Connected" def update_snmp(self): """Get stats from SNMP server. Return the client/server connection status: - SNMP: Connection with SNMP server OK - Disconnected: Connection NOK """ # Update the stats try: self.stats.update() except Exception: # Client cannot get SNMP server stats return "Disconnected" else: # Grab success return "SNMP" def serve_forever(self): """Main client loop.""" exitkey = False while True and not exitkey: # Update the stats cs_status = self.update() # Update the screen exitkey = self.screen.update(self.stats, cs_status=cs_status, return_to_browser=self.return_to_browser) # Export stats using export modules self.stats.export(self.stats) return self.get_mode() def end(self): """End of the client session.""" self.screen.end() glances-2.3/glances/core/glances_client_browser.py000066400000000000000000000245511246314757600224530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage the Glances client browser (list of Glances server).""" # Import system libs import json import socket try: from xmlrpc.client import ServerProxy, Fault, ProtocolError except ImportError: # Python 2 from xmlrpclib import ServerProxy, Fault, ProtocolError # Import Glances libs from glances.core.glances_autodiscover import GlancesAutoDiscoverServer from glances.core.glances_client import GlancesClient, GlancesClientTransport from glances.core.glances_logging import logger from glances.core.glances_staticlist import GlancesStaticServer from glances.outputs.glances_curses import GlancesCursesBrowser class GlancesClientBrowser(object): """This class creates and manages the TCP client browser (servers' list).""" def __init__(self, config=None, args=None): # Store the arg/config self.args = args self.config = config # Init the static server list (if defined) self.static_server = GlancesStaticServer(config=self.config) # Start the autodiscover mode (Zeroconf listener) if not self.args.disable_autodiscover: self.autodiscover_server = GlancesAutoDiscoverServer() else: self.autodiscover_server = None # Init screen self.screen = GlancesCursesBrowser(args=self.args) def get_servers_list(self): """ Return the current server list (list of dict) Merge of static + autodiscover servers list """ ret = [] if self.args.browser: ret = self.static_server.get_servers_list() if self.autodiscover_server is not None: ret = self.static_server.get_servers_list() + self.autodiscover_server.get_servers_list() return ret def serve_forever(self): """Main client loop.""" while True: # No need to update the server list # It's done by the GlancesAutoDiscoverListener class (glances_autodiscover.py) # Or define staticaly in the configuration file (module glances_staticlist.py) # For each server in the list, grab elementary stats (CPU, LOAD, MEM, OS...) # logger.debug(self.get_servers_list()) try: for v in self.get_servers_list(): # Do not retreive stats for statics server # Why ? Because for each offline servers, the timeout will be reached # So ? The curse interface freezes if (v['type'] == 'STATIC' and v['status'] in ['UNKNOWN', 'SNMP', 'OFFLINE']): continue # Select the connection mode (with or without password) if v['password'] != "": uri = 'http://{0}:{1}@{2}:{3}'.format(v['username'], v['password'], v['ip'], v['port']) else: uri = 'http://{0}:{1}'.format(v['ip'], v['port']) # Try to connect to the server t = GlancesClientTransport() t.set_timeout(3) # Get common stats try: s = ServerProxy(uri, transport=t) except Exception as e: logger.warning( "Client browser couldn't create socket {0}: {1}".format(uri, e)) else: # Mandatory stats try: # CPU% cpu_percent = 100 - json.loads(s.getCpu())['idle'] v['cpu_percent'] = '{0:.1f}'.format(cpu_percent) # MEM% v['mem_percent'] = json.loads(s.getMem())['percent'] # OS (Human Readable name) v['hr_name'] = json.loads(s.getSystem())['hr_name'] except (socket.error, Fault, KeyError) as e: logger.debug( "Error while grabbing stats form {0}: {1}".format(uri, e)) v['status'] = 'OFFLINE' except ProtocolError as e: if str(e).find(" 401 ") > 0: # Error 401 (Authentication failed) # Password is not the good one... v['password'] = None v['status'] = 'PROTECTED' else: v['status'] = 'OFFLINE' logger.debug( "Cannot grab stats from {0}: {1}".format(uri, e)) else: # Status v['status'] = 'ONLINE' # Optional stats (load is not available on Windows OS) try: # LOAD load_min5 = json.loads(s.getLoad())['min5'] v['load_min5'] = '{0:.2f}'.format(load_min5) except Exception as e: logger.warning( "Error while grabbing stats form {0}: {1}".format(uri, e)) # List can change size during iteration... except RuntimeError: logger.debug( "Server list dictionnary change inside the loop (wait next update)") # Update the screen (list or Glances client) if self.screen.get_active() is None: # Display the Glances browser self.screen.update(self.get_servers_list()) else: # Display the Glances client for the selected server logger.debug("Selected server: %s" % self.get_servers_list()[self.screen.get_active()]) # Connection can take time # Display a popup self.screen.display_popup(_("Connect to %s:%s" % (v['name'], v['port'])), duration=1) # A password is needed to access to the server's stats if self.get_servers_list()[self.screen.get_active()]['password'] is None: from hashlib import sha256 # Display a popup to enter password clear_password = self.screen.display_popup(_("Password needed for %s: " % v['name']), is_input=True) # Hash with SHA256 encoded_password = sha256(clear_password).hexdigest() # Store the password for the selected server self.set_in_selected('password', encoded_password) # Display the Glance client on the selected server logger.info("Connect Glances client to the %s server" % self.get_servers_list()[self.screen.get_active()]['key']) # Init the client args_server = self.args # Overwrite connection setting args_server.client = self.get_servers_list()[self.screen.get_active()]['ip'] args_server.port = self.get_servers_list()[self.screen.get_active()]['port'] args_server.username = self.get_servers_list()[self.screen.get_active()]['username'] args_server.password = self.get_servers_list()[self.screen.get_active()]['password'] client = GlancesClient(config=self.config, args=args_server, return_to_browser=True) # Test if client and server are in the same major version if not client.login(): self.screen.display_popup(_("Sorry, cannot connect to %s (see log file for additional information)" % v['name'])) # Set the ONLINE status for the selected server self.set_in_selected('status', 'OFFLINE') else: # Start the client loop # Return connection type: 'glances' or 'snmp' connection_type = client.serve_forever() try: logger.debug("Disconnect Glances client from the %s server" % self.get_servers_list()[self.screen.get_active()]['key']) except IndexError: # Server did not exist anymore pass else: # Set the ONLINE status for the selected server if connection_type == 'snmp': self.set_in_selected('status', 'SNMP') else: self.set_in_selected('status', 'ONLINE') # Return to the browser (no server selected) self.screen.set_active(None) def set_in_selected(self, key, value): """Set the (key, value) for the selected server in the list""" # Static list then dynamic one if self.screen.get_active() >= len(self.static_server.get_servers_list()): self.autodiscover_server.set_server(self.screen.get_active() - len(self.static_server.get_servers_list()), key, value) else: self.static_server.set_server(self.screen.get_active(), key, value) def end(self): """End of the client browser session.""" self.screen.end() glances-2.3/glances/core/glances_config.py000066400000000000000000000131311246314757600206670ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage the configuration file.""" # Import system libs import os import sys try: from configparser import RawConfigParser from configparser import NoOptionError except ImportError: # Python 2 from ConfigParser import RawConfigParser from ConfigParser import NoOptionError # Import Glances lib from glances.core.glances_globals import ( appname, is_bsd, is_linux, is_mac, is_py3, is_windows, sys_prefix, work_path ) from glances.core.glances_logging import logger class Config(object): """This class is used to access/read config file, if it exists. :param location: the custom path to search for config file :type location: str or None """ def __init__(self, location=None): self.location = location self.config_filename = 'glances.conf' self.parser = RawConfigParser() self._loaded_config_file = None self.load() def load(self): """Load a config file from the list of paths, if it exists.""" for config_file in self.get_config_paths(): if os.path.isfile(config_file) and os.path.getsize(config_file) > 0: try: if is_py3: self.parser.read(config_file, encoding='utf-8') else: self.parser.read(config_file) logger.info("Read configuration file '{0}'".format(config_file)) except UnicodeDecodeError as e: logger.error("Cannot decode configuration file '{0}': {1}".format(config_file, e)) sys.exit(1) # Save the loaded configuration file path (issue #374) self._loaded_config_file = config_file break def get_loaded_config_file(self): """Return the loaded configuration file""" return self._loaded_config_file def get_config_paths(self): r"""Get a list of config file paths. The list is built taking into account of the OS, priority and location. * running from source: /path/to/glances/conf * per-user install: ~/.local/etc/glances (Unix-like only) * Linux: ~/.config/glances, /etc/glances * BSD: ~/.config/glances, /usr/local/etc/glances * Mac: ~/Library/Application Support/glances, /usr/local/etc/glances * Windows: %APPDATA%\glances The config file will be searched in the following order of priority: * /path/to/file (via -C flag) * /path/to/glances/conf * user's local directory (per-user install settings) * user's home directory (per-user settings) * {/usr/local,}/etc directory (system-wide settings) """ paths = [] conf_path = os.path.realpath( os.path.join(work_path, '..', '..', 'conf')) if self.location is not None: paths.append(self.location) if os.path.exists(conf_path): paths.append(os.path.join(conf_path, self.config_filename)) if not is_windows: paths.append(os.path.join(os.path.expanduser('~/.local'), 'etc', appname, self.config_filename)) if is_linux or is_bsd: paths.append(os.path.join( os.environ.get('XDG_CONFIG_HOME') or os.path.expanduser( '~/.config'), appname, self.config_filename)) if hasattr(sys, 'real_prefix') or is_bsd: paths.append( os.path.join(sys.prefix, 'etc', appname, self.config_filename)) else: paths.append( os.path.join('/etc', appname, self.config_filename)) elif is_mac: paths.append(os.path.join( os.path.expanduser('~/Library/Application Support/'), appname, self.config_filename)) paths.append(os.path.join( sys_prefix, 'etc', appname, self.config_filename)) elif is_windows: paths.append(os.path.join( os.environ.get('APPDATA'), appname, self.config_filename)) return paths def items(self, section): """Return the items list of a section.""" return self.parser.items(section) def has_section(self, section): """Return info about the existence of a section.""" return self.parser.has_section(section) def get_option(self, section, option): """Get the float value of an option, if it exists.""" try: value = self.parser.getfloat(section, option) except NoOptionError: return else: return value def get_raw_option(self, section, option): """Get the raw value of an option, if it exists.""" try: value = self.parser.get(section, option) except NoOptionError: return else: return value glances-2.3/glances/core/glances_globals.py000066400000000000000000000041521246314757600210500ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Common objects shared by all Glances modules.""" import os import sys # Global information appname = 'glances' version = __import__('glances').__version__ psutil_version = __import__('glances').__psutil_version # PY3? is_py3 = sys.version_info >= (3, 3) # Operating system flag # Note: Somes libs depends of OS is_bsd = sys.platform.find('bsd') != -1 is_linux = sys.platform.startswith('linux') is_mac = sys.platform.startswith('darwin') is_windows = sys.platform.startswith('win') # Path definitions work_path = os.path.realpath(os.path.dirname(__file__)) appname_path = os.path.split(sys.argv[0])[0] sys_prefix = os.path.realpath(os.path.dirname(appname_path)) # Set the plugins path plugins_path = os.path.realpath(os.path.join(work_path, '..', 'plugins')) # Set the export module path exports_path = os.path.realpath(os.path.join(work_path, '..', 'exports')) sys_path = sys.path[:] sys.path.insert(1, plugins_path) sys.path.insert(1, exports_path) def get_locale_path(paths): for path in paths: if os.path.exists(path): return path # i18n gettext_domain = appname i18n_path = os.path.realpath(os.path.join(work_path, '..', '..', 'i18n')) user_i18n_path = os.path.join(os.path.expanduser('~/.local'), 'share', 'locale') sys_i18n_path = os.path.join(sys_prefix, 'share', 'locale') locale_dir = get_locale_path([i18n_path, user_i18n_path, sys_i18n_path]) glances-2.3/glances/core/glances_logging.py000066400000000000000000000061251246314757600210550ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Custom logging class""" import logging import logging.config import os import tempfile # Define the logging configuration LOGGING_CFG = { 'version': 1, 'disable_existing_loggers': False, 'root': { 'level': 'INFO', 'handlers': ['file', 'console'] }, 'formatters': { 'standard': { 'format': '%(asctime)s -- %(levelname)s -- %(message)s' }, 'short': { 'format': '%(levelname)s: %(message)s' } }, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', 'formatter': 'standard', # http://stackoverflow.com/questions/847850/cross-platform-way-of-getting-temp-directory-in-python 'filename': os.path.join(tempfile.gettempdir(), 'glances.log') }, 'console': { 'level': 'CRITICAL', 'class': 'logging.StreamHandler', 'formatter': 'short' } }, 'loggers': { 'debug': { 'handlers': ['file', 'console'], 'level': 'DEBUG', }, 'verbose': { 'handlers': ['file', 'console'], 'level': 'INFO' }, 'standard': { 'handlers': ['file'], 'level': 'INFO' } } } def tempfile_name(): """Return the tempfile name (full path)""" ret = os.path.join(tempfile.gettempdir(), 'glances.log') if os.access(ret, os.F_OK) and not os.access(ret, os.W_OK): print("Warning: can't write logs to file {} (permission denied)".format(ret)) ret = tempfile.mkstemp(prefix='glances', suffix='.tmp', text=True) print("Create a new log file: {}".format(ret[1])) return ret[1] return ret def glances_logger(): """Build and return the logger""" temp_path = tempfile_name() _logger = logging.getLogger() try: LOGGING_CFG['handlers']['file']['filename'] = temp_path logging.config.dictConfig(LOGGING_CFG) except AttributeError: # dictConfig is only available for Python 2.7 or higher # Minimal configuration for Python 2.6 logging.basicConfig(filename=temp_path, level=logging.DEBUG, format='%(asctime)s -- %(levelname)s -- %(message)s') return _logger logger = glances_logger() glances-2.3/glances/core/glances_logs.py000066400000000000000000000172251246314757600203760ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage logs.""" # Import system libs import time from datetime import datetime # Import Glances libs from glances.core.glances_processes import glances_processes class GlancesLogs(object): """This class manages logs inside the Glances software. Logs is a list of list (stored in the self.logs_list var) item_state = "OK|CAREFUL|WARNING|CRITICAL" item_type = "CPU*|LOAD|MEM|MON" item_value = value Item is defined by: ["begin", "end", "WARNING|CRITICAL", "CPU|LOAD|MEM", MAX, AVG, MIN, SUM, COUNT, [top3 process list], "Processes description"] """ def __init__(self): """Init the logs class.""" # Maximum size of the logs list self.logs_max = 10 # Init the logs list self.logs_list = [] def get(self): """Return the raw logs list.""" return self.logs_list def len(self): """Return the number of item in the logs list.""" return self.logs_list.__len__() def __itemexist__(self, item_type): """Return the item position, if it exists. An item exist in the list if: * end is < 0 * item_type is matching Return -1 if the item is not found. """ for i in range(self.len()): if self.logs_list[i][1] < 0 and self.logs_list[i][3] == item_type: return i return -1 def set_process_sort(self, item_type): """Define the process auto sort key from the alert type.""" # Process sort depending on alert type if item_type.startswith("MEM"): # Sort TOP process by memory_percent process_auto_by = 'memory_percent' elif item_type.startswith("CPU_IOWAIT"): # Sort TOP process by io_counters (only for Linux OS) process_auto_by = 'io_counters' else: # Default sort is... process_auto_by = 'cpu_percent' glances_processes.setautosortkey(process_auto_by) return process_auto_by def reset_process_sort(self): """Reset the process_auto_by variable.""" # Default sort is... process_auto_by = 'cpu_percent' glances_processes.setautosortkey(process_auto_by) glances_processes.setmanualsortkey(None) return process_auto_by def add(self, item_state, item_type, item_value, proc_list=[], proc_desc="", peak_time=3): """Add a new item to the logs list. If 'item' is a 'new one', add the new item at the beginning of the logs list. If 'item' is not a 'new one', update the existing item. If event < peak_time the the alert is not setoff """ # Add or update the log item_index = self.__itemexist__(item_type) if item_index < 0: # Item did not exist, add if WARNING or CRITICAL if item_state == "WARNING" or item_state == "CRITICAL": # Define the automatic process sort key self.set_process_sort(item_type) # Create the new log item # Time is stored in Epoch format # Epoch -> DMYHMS = datetime.fromtimestamp(epoch) item = [] # START DATE item.append(time.mktime(datetime.now().timetuple())) item.append(-1) # END DATE item.append(item_state) # STATE: WARNING|CRITICAL item.append(item_type) # TYPE: CPU, LOAD, MEM... item.append(item_value) # MAX item.append(item_value) # AVG item.append(item_value) # MIN item.append(item_value) # SUM item.append(1) # COUNT # Process list is sorted automaticaly # Overwrite the user choise # topprocess = sorted(proc_list, key=lambda process: process[process_auto_by], # reverse=True) # item.append(topprocess[0:3]) # TOP 3 PROCESS LIST item.append([]) # TOP 3 PROCESS LIST item.append(proc_desc) # MONITORED PROCESSES DESC # Add the item to the list self.logs_list.insert(0, item) if self.len() > self.logs_max: self.logs_list.pop() else: # Item exist, update if item_state == "OK" or item_state == "CAREFUL": # Reset the automatic process sort key self.reset_process_sort() endtime = time.mktime(datetime.now().timetuple()) if endtime - self.logs_list[item_index][0] > peak_time: # If event is > peak_time seconds self.logs_list[item_index][1] = endtime else: # If event <= peak_time seconds, ignore self.logs_list.remove(self.logs_list[item_index]) else: # Update the item # State if item_state == "CRITICAL": self.logs_list[item_index][2] = item_state # Value if item_value > self.logs_list[item_index][4]: # MAX self.logs_list[item_index][4] = item_value elif item_value < self.logs_list[item_index][6]: # MIN self.logs_list[item_index][6] = item_value # AVG self.logs_list[item_index][7] += item_value self.logs_list[item_index][8] += 1 self.logs_list[item_index][5] = (self.logs_list[item_index][7] / self.logs_list[item_index][8]) # TOP PROCESS LIST # # Process list is sorted automaticaly # # Overwrite the user choise # topprocess = sorted(proc_list, key=lambda process: process[process_auto_by], # reverse=True) # # TOP PROCESS LIST # self.logs_list[item_index][9] = topprocess[0:3] self.logs_list[item_index][9] = [] # MONITORED PROCESSES DESC self.logs_list[item_index][10] = proc_desc return self.len() def clean(self, critical=False): """Clean the logs list by deleting finished items. By default, only delete WARNING message If critical = True, also delete CRITICAL message """ # Create a new clean list clean_logs_list = [] while (self.len() > 0): item = self.logs_list.pop() if item[1] < 0 or (not critical and item[2].startswith("CRITICAL")): clean_logs_list.insert(0, item) # The list is now the clean one self.logs_list = clean_logs_list return self.len() glances_logs = GlancesLogs() glances-2.3/glances/core/glances_main.py000066400000000000000000000352321246314757600203540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Glances main class.""" # Import system libs import argparse import os import sys import tempfile # Import Glances libs from glances.core.glances_config import Config from glances.core.glances_globals import appname, is_windows, psutil_version, version from glances.core.glances_logging import logger class GlancesMain(object): """Main class to manage Glances instance.""" # Default stats' refresh time is 3 seconds refresh_time = 3 # Set the default cache lifetime to 1 second (only for server) # !!! Todo: configuration from the command line cached_time = 1 # By default, Glances is ran in standalone mode (no client/server) client_tag = False # Server TCP port number (default is 61209) server_port = 61209 # Web Server TCP port number (default is 61208) web_server_port = 61208 # Default username/password for client/server mode username = "glances" password = "" # Exemple of use example_of_use = "\ Examples of use:\n\ \n\ Monitor local machine (standalone mode):\n\ $ glances\n\ \n\ Monitor local machine with the Web interface (Web UI):\n\ $ glances -w\n\ Glances web server started on http://0.0.0.0:61208/\n\ \n\ Monitor local machine and export stats to a CSV file (standalone mode):\n\ $ glances --export-csv\n\ \n\ Monitor local machine and export stats to a InfluxDB server with 5s refresh time (standalone mode):\n\ $ glances -t 5 --export-influxdb\n\ \n\ Start a Glances server (server mode):\n\ $ glances -s\n\ \n\ Connect Glances to a Glances server (client mode):\n\ $ glances -c \n\ \n\ Connect Glances to a Glances server and export stats to a StatsD server (client mode):\n\ $ glances -c --export-statsd\n\ \n\ Start the client browser (browser mode):\n\ $ glances --browser\n\ " def __init__(self): """Manage the command line arguments.""" self.args = self.parse_args() def init_args(self): """Init all the command line arguments.""" _version = "Glances v" + version + " with psutil v" + psutil_version parser = argparse.ArgumentParser( prog=appname, conflict_handler='resolve', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=self.example_of_use) parser.add_argument( '-V', '--version', action='version', version=_version) parser.add_argument('-d', '--debug', action='store_true', default=False, dest='debug', help=_('Enable debug mode')) parser.add_argument('-C', '--config', dest='conf_file', help=_('path to the configuration file')) # Enable or disable option on startup parser.add_argument('--disable-network', action='store_true', default=False, dest='disable_network', help=_('disable network module')) parser.add_argument('--disable-diskio', action='store_true', default=False, dest='disable_diskio', help=_('disable disk I/O module')) parser.add_argument('--disable-fs', action='store_true', default=False, dest='disable_fs', help=_('disable filesystem module')) parser.add_argument('--disable-sensors', action='store_true', default=False, dest='disable_sensors', help=_('disable sensors module')) parser.add_argument('--disable-raid', action='store_true', default=False, dest='disable_raid', help=_('disable RAID module')) parser.add_argument('--disable-docker', action='store_true', default=False, dest='disable_docker', help=_('disable Docker module')) parser.add_argument('--disable-left-sidebar', action='store_true', default=False, dest='disable_left_sidebar', help=_('disable network, disk io, FS and sensors modules (need Py3Sensors lib)')) parser.add_argument('--disable-process', action='store_true', default=False, dest='disable_process', help=_('disable process module')) parser.add_argument('--disable-log', action='store_true', default=False, dest='disable_log', help=_('disable log module')) parser.add_argument('--disable-bold', action='store_false', default=True, dest='disable_bold', help=_('disable bold mode in the terminal')) parser.add_argument('--enable-process-extended', action='store_true', default=False, dest='enable_process_extended', help=_('enable extended stats on top process')) parser.add_argument('--enable-history', action='store_true', default=False, dest='enable_history', help=_('enable the history mode (need MatPlotLib lib)')) parser.add_argument('--path-history', default=tempfile.gettempdir(), dest='path_history', help=_('Set the export path for graph history')) # Export modules feature parser.add_argument('--export-csv', default=None, dest='export_csv', help=_('export stats to a CSV file')) parser.add_argument('--export-influxdb', action='store_true', default=False, dest='export_influxdb', help=_('export stats to an InfluxDB server (need InfluDB lib)')) parser.add_argument('--export-statsd', action='store_true', default=False, dest='export_statsd', help=_('export stats to a Statsd server (need StatsD lib)')) # Client/Server option parser.add_argument('-c', '--client', dest='client', help=_('connect to a Glances server by IPv4/IPv6 address or hostname')) parser.add_argument('-s', '--server', action='store_true', default=False, dest='server', help=_('run Glances in server mode')) parser.add_argument('--browser', action='store_true', default=False, dest='browser', help=_('start the client browser (list of servers)')) parser.add_argument('--disable-autodiscover', action='store_true', default=False, dest='disable_autodiscover', help=_('disable autodiscover feature')) parser.add_argument('-p', '--port', default=None, type=int, dest='port', help=_('define the client/server TCP port [default: {0}]').format(self.server_port)) parser.add_argument('-B', '--bind', default='0.0.0.0', dest='bind_address', help=_('bind server to the given IPv4/IPv6 address or hostname')) parser.add_argument('--password-badidea', dest='password_arg', help=_('define password from the command line')) parser.add_argument('--password', action='store_true', default=False, dest='password_prompt', help=_('define a client/server password from the prompt or file')) parser.add_argument('--snmp-community', default='public', dest='snmp_community', help=_('SNMP community')) parser.add_argument('--snmp-port', default=161, type=int, dest='snmp_port', help=_('SNMP port')) parser.add_argument('--snmp-version', default='2c', dest='snmp_version', help=_('SNMP version (1, 2c or 3)')) parser.add_argument('--snmp-user', default='private', dest='snmp_user', help=_('SNMP username (only for SNMPv3)')) parser.add_argument('--snmp-auth', default='password', dest='snmp_auth', help=_('SNMP authentication key (only for SNMPv3)')) parser.add_argument('--snmp-force', action='store_true', default=False, dest='snmp_force', help=_('force SNMP mode')) parser.add_argument('-t', '--time', default=self.refresh_time, type=float, dest='time', help=_('set refresh time in seconds [default: {0} sec]').format(self.refresh_time)) parser.add_argument('-w', '--webserver', action='store_true', default=False, dest='webserver', help=_('run Glances in web server mode (need Bootle lib)')) # Display options parser.add_argument('-f', '--process-filter', default=None, type=str, dest='process_filter', help=_('set the process filter pattern (regular expression)')) parser.add_argument('--process-short-name', action='store_true', default=False, dest='process_short_name', help=_('force short name for processes name')) if not is_windows: parser.add_argument('--hide-kernel-threads', action='store_true', default=False, dest='no_kernel_threads', help=_('hide kernel threads in process list')) parser.add_argument('--tree', action='store_true', default=False, dest='process_tree', help=_('display processes as a tree')) parser.add_argument('-b', '--byte', action='store_true', default=False, dest='byte', help=_('display network rate in byte per second')) parser.add_argument('-1', '--percpu', action='store_true', default=False, dest='percpu', help=_('start Glances in per CPU mode')) parser.add_argument('--fs-free-space', action='store_false', default=False, dest='fs_free_space', help=_('display FS free space instead of used')) parser.add_argument('--theme-white', action='store_true', default=False, dest='theme_white', help=_('optimize display for white background')) return parser def parse_args(self): """Parse command line arguments.""" args = self.init_args().parse_args() # Load the configuration file, if it exists self.config = Config(args.conf_file) # Debug mode if args.debug: from logging import DEBUG logger.setLevel(DEBUG) # Client/server Port if args.port is None: if args.webserver: args.port = self.web_server_port else: args.port = self.server_port # Autodiscover if args.disable_autodiscover: logger.info("Auto discover mode is disabled") # In web server mode, defaul refresh time: 5 sec if args.webserver: args.time = 5 args.process_short_name = True # Server or client login/password args.username = self.username if args.password_arg is not None: from hashlib import sha256 # Password is given as an argument # Hash with SHA256 # Only the SHA will be transmit on the network args.password = sha256(args.password_arg).hexdigest() elif args.password_prompt: # Interactive or file password if args.server: args.password = self.__get_password( description=_( "Define the password for the Glances server"), confirm=True) elif args.client: args.password = self.__get_password( description=_("Enter the Glances server password"), clear=True) else: # Default is no password args.password = self.password # By default help is hidden args.help_tag = False # Display Rx and Tx, not the sum for the network args.network_sum = False args.network_cumul = False # Control parameter and exit if it is not OK self.args = args # Filter is only available in standalone mode if args.process_filter is not None and not self.is_standalone(): logger.critical("Process filter is only available in standalone mode") sys.exit(2) # Check graph output path if args.enable_history and args.path_history is not None: if not os.access(args.path_history, os.W_OK): logger.critical("History output path {0} do not exist or is not writable".format(args.path_history)) sys.exit(2) logger.debug("History output path is set to {0}".format(args.path_history)) return args def __hash_password(self, plain_password): """Hash a plain password and return the hashed one.""" from glances.core.glances_password import GlancesPassword password = GlancesPassword() return password.hash_password(plain_password) def __get_password(self, description='', confirm=False, clear=False): """Read a password from the command line. - if confirm = True, with confirmation - if clear = True, plain (clear password) """ from glances.core.glances_password import GlancesPassword password = GlancesPassword() return password.get_password(description, confirm, clear) def is_standalone(self): """Return True if Glances is running in standalone mode.""" return not self.args.client and not self.args.browser and not self.args.server and not self.args.webserver def is_client(self): """Return True if Glances is running in client mode.""" return (self.args.client or self.args.browser) and not self.args.server def is_client_browser(self): """Return True if Glances is running in client browser mode.""" return self.args.browser and not self.args.server def is_server(self): """Return True if Glances is running in server mode.""" return not self.args.client and self.args.server def is_webserver(self): """Return True if Glances is running in Web server mode.""" return not self.args.client and self.args.webserver def get_config(self): """Return configuration file object.""" return self.config def get_args(self): """Return the arguments.""" return self.args glances-2.3/glances/core/glances_monitor_list.py000066400000000000000000000156071246314757600221560ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage the monitor list.""" # Import system lib import re import subprocess # Import Glances lib from glances.core.glances_logging import logger from glances.core.glances_processes import glances_processes class MonitorList(object): """This class describes the optional monitored processes list. The monitored list is a list of 'important' processes to monitor. The list (Python list) is composed of items (Python dict). An item is defined (dict keys): * description: Description of the processes (max 16 chars) * regex: regular expression of the processes to monitor * command: (optional) shell command for extended stat * countmin: (optional) minimal number of processes * countmax: (optional) maximum number of processes """ # Maximum number of items in the list __monitor_list_max_size = 10 # The list __monitor_list = [] def __init__(self, config): """Init the monitoring list from the configuration file.""" self.config = config if self.config is not None and self.config.has_section('monitor'): # Process monitoring list self.__set_monitor_list('monitor', 'list') else: self.__monitor_list = [] def __set_monitor_list(self, section, key): """Init the monitored processes list. The list is defined in the Glances configuration file. """ for l in range(1, self.__monitor_list_max_size + 1): value = {} key = "list_" + str(l) + "_" try: description = self.config.get_raw_option(section, key + "description") regex = self.config.get_raw_option(section, key + "regex") command = self.config.get_raw_option(section, key + "command") countmin = self.config.get_raw_option(section, key + "countmin") countmax = self.config.get_raw_option(section, key + "countmax") except Exception as e: logger.error("Cannot read monitored list: {0}".format(e)) pass else: if description is not None and regex is not None: # Build the new item value["description"] = description try: re.compile(regex) except Exception: continue else: value["regex"] = regex value["command"] = command value["countmin"] = countmin value["countmax"] = countmax value["count"] = None value["result"] = None # Add the item to the list self.__monitor_list.append(value) def __str__(self): return str(self.__monitor_list) def __repr__(self): return self.__monitor_list def __getitem__(self, item): return self.__monitor_list[item] def __len__(self): return len(self.__monitor_list) def __get__(self, item, key): """Meta function to return key value of item. Return None if not defined or item > len(list) """ if item < len(self.__monitor_list): try: return self.__monitor_list[item][key] except Exception: return None else: return None def update(self): """Update the command result attributed.""" # Only continue if monitor list is not empty if len(self.__monitor_list) == 0: return self.__monitor_list # Iter upon the monitored list for i in range(0, len(self.get())): # Search monitored processes by a regular expression processlist = glances_processes.getlist() monitoredlist = [p for p in processlist if re.search(self.regex(i), p['cmdline']) is not None] self.__monitor_list[i]['count'] = len(monitoredlist) if self.command(i) is None: # If there is no command specified in the conf file # then display CPU and MEM % self.__monitor_list[i]['result'] = 'CPU: {0:.1f}% | MEM: {1:.1f}%'.format( sum([p['cpu_percent'] for p in monitoredlist]), sum([p['memory_percent'] for p in monitoredlist])) continue else: # Execute the user command line try: self.__monitor_list[i]['result'] = subprocess.check_output(self.command(i), shell=True) except subprocess.CalledProcessError: self.__monitor_list[i]['result'] = _("Error: ") + self.command(i) except Exception: self.__monitor_list[i]['result'] = _("Cannot execute command") return self.__monitor_list def get(self): """Return the monitored list (list of dict).""" return self.__monitor_list def set(self, newlist): """Set the monitored list (list of dict).""" self.__monitor_list = newlist def getAll(self): # Deprecated: use get() return self.get() def setAll(self, newlist): # Deprecated: use set() self.set(newlist) def description(self, item): """Return the description of the item number (item).""" return self.__get__(item, "description") def regex(self, item): """Return the regular expression of the item number (item).""" return self.__get__(item, "regex") def command(self, item): """Return the stat command of the item number (item).""" return self.__get__(item, "command") def result(self, item): """Return the reult command of the item number (item).""" return self.__get__(item, "result") def countmin(self, item): """Return the minimum number of processes of the item number (item).""" return self.__get__(item, "countmin") def countmax(self, item): """Return the maximum number of processes of the item number (item).""" return self.__get__(item, "countmax") glances-2.3/glances/core/glances_password.py000066400000000000000000000136431246314757600212740ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage password.""" # Import system libs import getpass import hashlib import os import sys import uuid # Import Glances lib from glances.core.glances_globals import appname, is_bsd, is_linux, is_mac, is_windows from glances.core.glances_logging import logger # Trick: bind raw_input to input in Python 2 try: input = raw_input except NameError: pass class GlancesPassword(object): """This class contains all the methods relating to password.""" def __init__(self): self.password_path = self.get_password_path() self.password_filename = 'glances.pwd' self.password_filepath = os.path.join(self.password_path, self.password_filename) def get_password_path(self): r"""Get the path where the password file will be stored. * Linux and BSD: ~/.config/glances * OS X: ~/Library/glances * Windows: %APPDATA%\glances """ if is_linux or is_bsd: app_path = os.environ.get('XDG_CONFIG_HOME') or os.path.expanduser('~/.config') elif is_mac: app_path = os.path.join(os.environ.get('HOME'), 'Library') elif is_windows: app_path = os.environ.get('APPDATA') else: app_path = '.' # Append the Glances folder app_path = os.path.join(app_path, appname) return app_path def get_hash(self, salt, plain_password): """Return the hashed password, salt + SHA-256.""" return hashlib.sha256(salt.encode() + plain_password.encode()).hexdigest() def hash_password(self, plain_password): """Hash password with a salt based on UUID (universally unique identifier).""" salt = uuid.uuid4().hex encrypted_password = self.get_hash(salt, plain_password) return salt + '$' + encrypted_password def check_password(self, hashed_password, plain_password): """Encode the plain_password with the salt of the hashed_password. Return the comparison with the encrypted_password. """ salt, encrypted_password = hashed_password.split('$') re_encrypted_password = self.get_hash(salt, plain_password) return encrypted_password == re_encrypted_password def get_password(self, description='', confirm=False, clear=False): """Get the password from a Glances client or server. For Glances server, get the password (confirm=True, clear=False): 1) from the password file (if it exists) 2) from the CLI Optionally: save the password to a file (hashed with salt + SHA-256) For Glances client, get the password (confirm=False, clear=True): 1) from the CLI 2) the password is hashed with SHA-256 (only SHA string transit through the network) """ if os.path.exists(self.password_filepath) and not clear: # If the password file exist then use it logger.info("Read password from file {0}".format(self.password_filepath)) password = self.load_password() else: # Else enter the password from the command line if description != '': print(description) # password_plain is the plain SHA-256 password # password_hashed is the salt + SHA-256 password password_sha = hashlib.sha256(getpass.getpass(_("Password: ")).encode('utf-8')).hexdigest() password_hashed = self.hash_password(password_sha) if confirm: # password_confirm is the clear password (only used to compare) password_confirm = hashlib.sha256(getpass.getpass(_("Password (confirm): ")).encode('utf-8')).hexdigest() if not self.check_password(password_hashed, password_confirm): logger.critical("Sorry, passwords do not match. Exit.") sys.exit(1) # Return the plain or hashed password if clear: password = password_sha else: password = password_hashed # Save the hashed password to the password file if not clear: save_input = input(_("Do you want to save the password? [Yes/No]: ")) if len(save_input) > 0 and save_input[0].upper() == _('Y'): self.save_password(password_hashed) return password def save_password(self, hashed_password): """Save the hashed password to the Glances folder.""" # Check if the Glances folder already exists if not os.path.exists(self.password_path): # Create the Glances folder try: os.makedirs(self.password_path) except OSError as e: logger.error("Cannot create Glances directory: {0}".format(e)) return # Create/overwrite the password file with open(self.password_filepath, 'w') as file_pwd: file_pwd.write(hashed_password) def load_password(self): """Load the hashed password from the Glances folder.""" # Read the password file, if it exists with open(self.password_filepath, 'r') as file_pwd: hashed_password = file_pwd.read() return hashed_password glances-2.3/glances/core/glances_processes.py000066400000000000000000000716121246314757600214400ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # Import Python lib import collections import operator import os import re # Import psutil import psutil # Import Glances lib from glances.core.glances_globals import is_bsd, is_linux, is_mac, is_windows from glances.core.glances_logging import logger from glances.core.glances_timer import getTimeSinceLastUpdate, Timer def is_kernel_thread(proc): """ Return True if proc is a kernel thread, False instead. """ try: return os.getpgid(proc.pid) == 0 except OSError: # Python >= 3.3 raises ProcessLookupError, which inherits OSError # return False is process is dead return False class ProcessTreeNode(object): """ Represent a process tree. We avoid recursive algorithm to manipulate the tree because function calls are expensive with CPython. """ def __init__(self, process=None, stats=None, sort_key=None, root=False): self.process = process self.stats = stats self.children = [] self.children_sorted = False self.sort_key = sort_key self.reverse_sorting = (self.sort_key != "name") self.is_root = root def __str__(self): """ Return the tree as a string for debugging. """ lines = [] nodes_to_print = collections.deque([collections.deque([("#", self)])]) while nodes_to_print: indent_str, current_node = nodes_to_print[-1].pop() if not nodes_to_print[-1]: nodes_to_print.pop() if current_node.is_root: lines.append(indent_str) else: lines.append("%s[%s]" % (indent_str, current_node.process.name())) indent_str = " " * (len(lines[-1]) - 1) children_nodes_to_print = collections.deque() for child in current_node.children: if child is current_node.children[-1]: tree_char = "└─" else: tree_char = "├─" children_nodes_to_print.appendleft((indent_str + tree_char, child)) if children_nodes_to_print: nodes_to_print.append(children_nodes_to_print) return "\n".join(lines) def set_sorting(self, key, reverse): """ Set sorting key or func for user with __iter__ (affects the whole tree from this node). """ if (self.sort_key != key) or (self.reverse_sorting != reverse): nodes_to_flag_unsorted = collections.deque([self]) while nodes_to_flag_unsorted: current_node = nodes_to_flag_unsorted.pop() current_node.children_sorted = False current_node.sort_key = key current_node.reverse_sorting = reverse nodes_to_flag_unsorted.extend(current_node.children) def get_weight(self): """ Return "weight" of a process and all its children for sorting. """ if self.sort_key == "name": return self.stats[self.sort_key] # sum ressource usage for self and children total = 0 nodes_to_sum = collections.deque([self]) while nodes_to_sum: current_node = nodes_to_sum.pop() if isinstance(self.sort_key, collections.Callable): total += self.sort_key(current_node.stats) elif self.sort_key == "io_counters": stats = current_node.stats[self.sort_key] total += stats[0] - stats[2] + stats[1] - stats[3] elif self.sort_key == "cpu_times": total += sum(current_node.stats[self.sort_key]) else: total += current_node.stats[self.sort_key] nodes_to_sum.extend(current_node.children) return total def __len__(self): """Return the number of nodes in the tree.""" total = 0 nodes_to_sum = collections.deque([self]) while nodes_to_sum: current_node = nodes_to_sum.pop() if not current_node.is_root: total += 1 nodes_to_sum.extend(current_node.children) return total def __iter__(self): """ Iterator returning ProcessTreeNode in sorted order, recursively. """ if not self.is_root: yield self if not self.children_sorted: # optimization to avoid sorting twice (once when limiting the maximum processes to grab stats for, # and once before displaying) self.children.sort(key=self.__class__.get_weight, reverse=self.reverse_sorting) self.children_sorted = True for child in self.children: for n in iter(child): yield n def iter_children(self, exclude_incomplete_stats=True): """ Iterator returning ProcessTreeNode in sorted order (only children of this node, non recursive). If exclude_incomplete_stats is True, exclude processes not having full statistics. It can happen after a resort (change of sort key) because process stats are not grabbed immediately, but only at next full update. """ if not self.children_sorted: # optimization to avoid sorting twice (once when limiting the maximum processes to grab stats for, # and once before displaying) self.children.sort(key=self.__class__.get_weight, reverse=self.reverse_sorting) self.children_sorted = True for child in self.children: if (not exclude_incomplete_stats) or ("time_since_update" in child.stats): yield child def find_process(self, process): """ Search in tree for the ProcessTreeNode owning process, return it or None if not found. """ nodes_to_search = collections.deque([self]) while nodes_to_search: current_node = nodes_to_search.pop() if (not current_node.is_root) and (current_node.process.pid == process.pid): return current_node nodes_to_search.extend(current_node.children) @staticmethod def build_tree(process_dict, sort_key, hide_kernel_threads): """ Build a process tree using using parent/child relationships, and return the tree root node. """ tree_root = ProcessTreeNode(root=True) nodes_to_add_last = collections.deque() # first pass: add nodes whose parent are in the tree for process, stats in process_dict.items(): new_node = ProcessTreeNode(process, stats, sort_key) try: parent_process = process.parent() except psutil.NoSuchProcess: # parent is dead, consider no parent parent_process = None if parent_process is None: # no parent, add this node at the top level tree_root.children.append(new_node) else: parent_node = tree_root.find_process(parent_process) if parent_node is not None: # parent is already in the tree, add a new child parent_node.children.append(new_node) else: # parent is not in tree, add this node later nodes_to_add_last.append(new_node) # next pass(es): add nodes to their parents if it could not be done in previous pass while nodes_to_add_last: node_to_add = nodes_to_add_last.popleft() # pop from left and append to right to avoid infinite loop try: parent_process = node_to_add.process.parent() except psutil.NoSuchProcess: # parent is dead, consider no parent, add this node at the top level tree_root.children.append(node_to_add) else: if parent_process is None: # parent is None now, but was not at previous pass (can occur on Windows only) # consider no parent, add this node at the top level tree_root.children.append(node_to_add) else: parent_node = tree_root.find_process(parent_process) if parent_node is not None: # parent is already in the tree, add a new child parent_node.children.append(node_to_add) else: # parent is not in tree, add this node later nodes_to_add_last.append(node_to_add) return tree_root class GlancesProcesses(object): """Get processed stats using the psutil library.""" def __init__(self, cache_timeout=60): """Init the class to collect stats about processes.""" # Add internals caches because PSUtil do not cache all the stats # See: https://code.google.com/p/psutil/issues/detail?id=462 self.username_cache = {} self.cmdline_cache = {} # The internals caches will be cleaned each 'cache_timeout' seconds self.cache_timeout = cache_timeout self.cache_timer = Timer(self.cache_timeout) # Init the io dict # key = pid # value = [ read_bytes_old, write_bytes_old ] self.io_old = {} # Wether or not to enable process tree self._enable_tree = False self.process_tree = None # Init stats self.resetsort() self.processlist = [] self.processcount = { 'total': 0, 'running': 0, 'sleeping': 0, 'thread': 0} # Tag to enable/disable the processes stats (to reduce the Glances CPU consumption) # Default is to enable the processes stats self.disable_tag = False # Extended stats for top process is enable by default self.disable_extended_tag = False # Maximum number of processes showed in the UI interface # None if no limit self.max_processes = None # Process filter is a regular expression self.process_filter = None self.process_filter_re = None # Whether or not to hide kernel threads self.no_kernel_threads = False def enable(self): """Enable process stats.""" self.disable_tag = False self.update() def disable(self): """Disable process stats.""" self.disable_tag = True def enable_extended(self): """Enable extended process stats.""" self.disable_extended_tag = False self.update() def disable_extended(self): """Disable extended process stats.""" self.disable_extended_tag = True def set_max_processes(self, value): """Set the maximum number of processes showed in the UI interfaces""" self.max_processes = value return self.max_processes def get_max_processes(self): """Get the maximum number of processes showed in the UI interfaces""" return self.max_processes def set_process_filter(self, value): """Set the process filter""" logger.info("Set process filter to {0}".format(value)) self.process_filter = value if value is not None: try: self.process_filter_re = re.compile(value) logger.debug("Process filter regex compilation OK: {0}".format(self.get_process_filter())) except Exception: logger.error("Cannot compile process filter regex: {0}".format(value)) self.process_filter_re = None else: self.process_filter_re = None return self.process_filter def get_process_filter(self): """Get the process filter""" return self.process_filter def get_process_filter_re(self): """Get the process regular expression compiled""" return self.process_filter_re def is_filtered(self, value): """Return True if the value should be filtered""" if self.get_process_filter() is None: # No filter => Not filtered return False else: # logger.debug(self.get_process_filter() + " <> " + value + " => " + str(self.get_process_filter_re().match(value) is None)) return self.get_process_filter_re().match(value) is None def disable_kernel_threads(self): """ Ignore kernel threads in process list. """ self.no_kernel_threads = True def enable_tree(self): """ Enable process tree. """ self._enable_tree = True def is_tree_enabled(self): """ Return True if process tree is enabled, False instead. """ return self._enable_tree def __get_process_stats(self, proc, mandatory_stats=True, standard_stats=True, extended_stats=False): """ Get process stats of the proc processes (proc is returned psutil.process_iter()) mandatory_stats: need for the sorting/filter step => cpu_percent, memory_percent, io_counters, name, cmdline standard_stats: for all the displayed processes => username, status, memory_info, cpu_times extended_stats: only for top processes (see issue #403) => connections (UDP/TCP), memory_swap... """ # Process ID (always) procstat = proc.as_dict(attrs=['pid']) if mandatory_stats: procstat['mandatory_stats'] = True # Process CPU, MEM percent and name try: procstat.update( proc.as_dict(attrs=['cpu_percent', 'memory_percent', 'name', 'cpu_times'], ad_value='')) except psutil.NoSuchProcess: # Correct issue #414 return None if procstat['cpu_percent'] == '' or procstat['memory_percent'] == '': # Do not display process if we cannot get the basic # cpu_percent or memory_percent stats return None # Process command line (cached with internal cache) try: self.cmdline_cache[procstat['pid']] except KeyError: # Patch for issue #391 try: self.cmdline_cache[ procstat['pid']] = ' '.join(proc.cmdline()) except (AttributeError, UnicodeDecodeError, psutil.AccessDenied, psutil.NoSuchProcess): self.cmdline_cache[procstat['pid']] = "" procstat['cmdline'] = self.cmdline_cache[procstat['pid']] # Process IO # procstat['io_counters'] is a list: # [read_bytes, write_bytes, read_bytes_old, write_bytes_old, io_tag] # If io_tag = 0 > Access denied (display "?") # If io_tag = 1 > No access denied (display the IO rate) # Note Disk IO stat not available on Mac OS if not is_mac: try: # Get the process IO counters proc_io = proc.io_counters() io_new = [proc_io.read_bytes, proc_io.write_bytes] except (psutil.AccessDenied, psutil.NoSuchProcess): # Access denied to process IO (no root account) # NoSuchProcess (process die between first and second grab) # Put 0 in all values (for sort) and io_tag = 0 (for # display) procstat['io_counters'] = [0, 0] + [0, 0] io_tag = 0 else: # For IO rate computation # Append saved IO r/w bytes try: procstat['io_counters'] = io_new + \ self.io_old[procstat['pid']] except KeyError: procstat['io_counters'] = io_new + [0, 0] # then save the IO r/w bytes self.io_old[procstat['pid']] = io_new io_tag = 1 # Append the IO tag (for display) procstat['io_counters'] += [io_tag] if standard_stats: procstat['standard_stats'] = True # Process username (cached with internal cache) try: self.username_cache[procstat['pid']] except KeyError: try: self.username_cache[procstat['pid']] = proc.username() except psutil.NoSuchProcess: self.username_cache[procstat['pid']] = "?" except (KeyError, psutil.AccessDenied): try: self.username_cache[procstat['pid']] = proc.uids().real except (KeyError, AttributeError, psutil.AccessDenied): self.username_cache[procstat['pid']] = "?" procstat['username'] = self.username_cache[procstat['pid']] # Process status, nice, memory_info and cpu_times try: procstat.update( proc.as_dict(attrs=['status', 'nice', 'memory_info', 'cpu_times'])) except psutil.NoSuchProcess: pass else: procstat['status'] = str(procstat['status'])[:1].upper() if extended_stats and not self.disable_extended_tag: procstat['extended_stats'] = True # CPU affinity (Windows and Linux only) try: procstat.update(proc.as_dict(attrs=['cpu_affinity'])) except psutil.NoSuchProcess: pass except AttributeError: procstat['cpu_affinity'] = None # Memory extended try: procstat.update(proc.as_dict(attrs=['memory_info_ex'])) except psutil.NoSuchProcess: pass except AttributeError: procstat['memory_info_ex'] = None # Number of context switch try: procstat.update(proc.as_dict(attrs=['num_ctx_switches'])) except psutil.NoSuchProcess: pass except AttributeError: procstat['num_ctx_switches'] = None # Number of file descriptors (Unix only) try: procstat.update(proc.as_dict(attrs=['num_fds'])) except psutil.NoSuchProcess: pass except AttributeError: procstat['num_fds'] = None # Threads number try: procstat.update(proc.as_dict(attrs=['num_threads'])) except psutil.NoSuchProcess: pass except AttributeError: procstat['num_threads'] = None # Number of handles (Windows only) if is_windows: try: procstat.update(proc.as_dict(attrs=['num_handles'])) except psutil.NoSuchProcess: pass else: procstat['num_handles'] = None # SWAP memory (Only on Linux based OS) # http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/ if is_linux: try: procstat['memory_swap'] = sum( [v.swap for v in proc.memory_maps()]) except psutil.NoSuchProcess: pass except psutil.AccessDenied: procstat['memory_swap'] = None except Exception: # Add a dirty except to handle the PsUtil issue #413 procstat['memory_swap'] = None # Process network connections (TCP and UDP) try: procstat['tcp'] = len(proc.connections(kind="tcp")) procstat['udp'] = len(proc.connections(kind="udp")) except Exception: procstat['tcp'] = None procstat['udp'] = None # IO Nice # http://pythonhosted.org/psutil/#psutil.Process.ionice if is_linux or is_windows: try: procstat.update(proc.as_dict(attrs=['ionice'])) except psutil.NoSuchProcess: pass else: procstat['ionice'] = None # logger.debug(procstat) return procstat def update(self): """ Update the processes stats """ # Reset the stats self.processlist = [] self.processcount = { 'total': 0, 'running': 0, 'sleeping': 0, 'thread': 0} # Do not process if disable tag is set if self.disable_tag: return # Get the time since last update time_since_update = getTimeSinceLastUpdate('process_disk') # Build an internal dict with only mandatories stats (sort keys) processdict = {} for proc in psutil.process_iter(): # Ignore kernel threads if needed if (self.no_kernel_threads and (not is_windows) and is_kernel_thread(proc)): continue # If self.get_max_processes() is None: Only retreive mandatory stats # Else: retreive mandatory and standard stats s = self.__get_process_stats(proc, mandatory_stats=True, standard_stats=self.get_max_processes() is None) # Continue to the next process if it has to be filtered if s is None or (self.is_filtered(s['cmdline']) and self.is_filtered(s['name'])): continue # Ok add the process to the list processdict[proc] = s # ignore the 'idle' process on Windows and *BSD # ignore the 'kernel_task' process on OS X # waiting for upstream patch from psutil if (is_bsd and processdict[proc]['name'] == 'idle' or is_windows and processdict[proc]['name'] == 'System Idle Process' or is_mac and processdict[proc]['name'] == 'kernel_task'): continue # Update processcount (global statistics) try: self.processcount[str(proc.status())] += 1 except KeyError: # Key did not exist, create it try: self.processcount[str(proc.status())] = 1 except psutil.NoSuchProcess: pass except psutil.NoSuchProcess: pass else: self.processcount['total'] += 1 # Update thread number (global statistics) try: self.processcount['thread'] += proc.num_threads() except Exception: pass if self._enable_tree: self.process_tree = ProcessTreeNode.build_tree(processdict, self.getsortkey(), self.no_kernel_threads) for i, node in enumerate(self.process_tree): # Only retreive stats for visible processes (get_max_processes) if (self.get_max_processes() is not None) and (i >= self.get_max_processes()): break # add standard stats new_stats = self.__get_process_stats(node.process, mandatory_stats=False, standard_stats=True, extended_stats=False) if new_stats is not None: node.stats.update(new_stats) # Add a specific time_since_update stats for bitrate node.stats['time_since_update'] = time_since_update else: # Process optimization # Only retreive stats for visible processes (get_max_processes) if self.get_max_processes() is not None: # Sort the internal dict and cut the top N (Return a list of tuple) # tuple=key (proc), dict (returned by __get_process_stats) try: processiter = sorted( processdict.items(), key=lambda x: x[1][self.getsortkey()], reverse=True) except (KeyError, TypeError) as e: logger.error("Cannot sort process list by %s (%s)" % (self.getsortkey(), e)) logger.error("%s" % str(processdict.items()[0])) # Fallback to all process (issue #423) processloop = processdict.items() first = False else: processloop = processiter[0:self.get_max_processes()] first = True else: # Get all processes stats processloop = processdict.items() first = False for i in processloop: # Already existing mandatory stats procstat = i[1] if self.get_max_processes() is not None: # Update with standard stats # and extended stats but only for TOP (first) process s = self.__get_process_stats(i[0], mandatory_stats=False, standard_stats=True, extended_stats=first) if s is None: continue procstat.update(s) # Add a specific time_since_update stats for bitrate procstat['time_since_update'] = time_since_update # Update process list self.processlist.append(procstat) # Next... first = False # Clean internals caches if timeout is reached if self.cache_timer.finished(): self.username_cache = {} self.cmdline_cache = {} # Restart the timer self.cache_timer.reset() def getcount(self): """Get the number of processes.""" return self.processcount def getlist(self, sortedby=None): """Get the processlist.""" return self.processlist def gettree(self): """Get the process tree.""" return self.process_tree def getsortkey(self): """Get the current sort key""" if self.getmanualsortkey() is not None: return self.getmanualsortkey() else: return self.getautosortkey() def getmanualsortkey(self): """Get the current sort key for manual sort.""" return self.processmanualsort def getautosortkey(self): """Get the current sort key for automatic sort.""" return self.processautosort def setmanualsortkey(self, sortedby): """Set the current sort key for manual sort.""" self.processmanualsort = sortedby if self._enable_tree and (self.process_tree is not None): self.process_tree.set_sorting(sortedby, sortedby != "name") return self.processmanualsort def setautosortkey(self, sortedby): """Set the current sort key for automatic sort.""" self.processautosort = sortedby return self.processautosort def resetsort(self): """Set the default sort: Auto""" self.setmanualsortkey(None) self.setautosortkey('cpu_percent') def getsortlist(self, sortedby=None): """Get the sorted processlist.""" if sortedby is None: # No need to sort... return self.processlist sortedreverse = True if sortedby == 'name': sortedreverse = False if sortedby == 'io_counters': # Specific case for io_counters # Sum of io_r + io_w try: # Sort process by IO rate (sum IO read + IO write) self.processlist.sort(key=lambda process: process[sortedby][0] - process[sortedby][2] + process[sortedby][1] - process[sortedby][3], reverse=sortedreverse) except Exception: self.processlist.sort(key=operator.itemgetter('cpu_percent'), reverse=sortedreverse) else: # Others sorts self.processlist.sort(key=operator.itemgetter(sortedby), reverse=sortedreverse) return self.processlist glances_processes = GlancesProcesses() glances-2.3/glances/core/glances_server.py000066400000000000000000000205041246314757600207320ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage the Glances server.""" # Import system libs import json import socket import sys from base64 import b64decode try: from xmlrpc.server import SimpleXMLRPCRequestHandler from xmlrpc.server import SimpleXMLRPCServer except ImportError: # Python 2 from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler from SimpleXMLRPCServer import SimpleXMLRPCServer # Import Glances libs from glances.core.glances_autodiscover import GlancesAutoDiscoverClient from glances.core.glances_globals import version from glances.core.glances_logging import logger from glances.core.glances_stats import GlancesStatsServer from glances.core.glances_timer import Timer class GlancesXMLRPCHandler(SimpleXMLRPCRequestHandler): """Main XML-RPC handler.""" rpc_paths = ('/RPC2', ) def end_headers(self): # Hack to add a specific header # Thk to: https://gist.github.com/rca/4063325 self.send_my_headers() SimpleXMLRPCRequestHandler.end_headers(self) def send_my_headers(self): # Specific header is here (solved the issue #227) self.send_header("Access-Control-Allow-Origin", "*") def authenticate(self, headers): # auth = headers.get('Authorization') try: (basic, _, encoded) = headers.get('Authorization').partition(' ') except Exception: # Client did not ask for authentidaction # If server need it then exit return not self.server.isAuth else: # Client authentication (basic, _, encoded) = headers.get('Authorization').partition(' ') assert basic == 'Basic', 'Only basic authentication supported' # Encoded portion of the header is a string # Need to convert to bytestring encoded_byte_string = encoded.encode() # Decode base64 byte string to a decoded byte string decoded_bytes = b64decode(encoded_byte_string) # Convert from byte string to a regular string decoded_string = decoded_bytes.decode() # Get the username and password from the string (username, _, password) = decoded_string.partition(':') # Check that username and password match internal global dictionary return self.check_user(username, password) def check_user(self, username, password): # Check username and password in the dictionary if username in self.server.user_dict: from glances.core.glances_password import GlancesPassword pwd = GlancesPassword() return pwd.check_password(self.server.user_dict[username], password) else: return False def parse_request(self): if SimpleXMLRPCRequestHandler.parse_request(self): # Next we authenticate if self.authenticate(self.headers): return True else: # if authentication fails, tell the client self.send_error(401, 'Authentication failed') return False def log_message(self, format, *args): # No message displayed on the server side pass class GlancesXMLRPCServer(SimpleXMLRPCServer): """Init a SimpleXMLRPCServer instance (IPv6-ready).""" def __init__(self, bind_address, bind_port=61209, requestHandler=GlancesXMLRPCHandler): try: self.address_family = socket.getaddrinfo(bind_address, bind_port)[0][0] except socket.error as e: logger.error("Couldn't open socket: {0}".format(e)) sys.exit(1) SimpleXMLRPCServer.__init__(self, (bind_address, bind_port), requestHandler) class GlancesInstance(object): """All the methods of this class are published as XML-RPC methods.""" def __init__(self, cached_time=1, config=None): # Init stats self.stats = GlancesStatsServer(config) # Initial update self.stats.update() # cached_time is the minimum time interval between stats updates # i.e. XML/RPC calls will not retrieve updated info until the time # since last update is passed (will retrieve old cached info instead) self.timer = Timer(0) self.cached_time = cached_time def __update__(self): # Never update more than 1 time per cached_time if self.timer.finished(): self.stats.update() self.timer = Timer(self.cached_time) def init(self): # Return the Glances version return version def getAll(self): # Update and return all the stats self.__update__() return json.dumps(self.stats.getAll()) def getAllPlugins(self): # Return the plugins list return json.dumps(self.stats.getAllPlugins()) def getAllLimits(self): # Return all the plugins limits return json.dumps(self.stats.getAllLimitsAsDict()) def getAllViews(self): # Return all the plugins views return json.dumps(self.stats.getAllViewsAsDict()) def getAllMonitored(self): # Return the processes monitored list # return json.dumps(self.monitors.getAll()) return json.dumps(self.stats.getAll()['monitor']) def __getattr__(self, item): """Overwrite the getattr method in case of attribute is not found. The goal is to dynamically generate the API get'Stats'() methods. """ header = 'get' # Check if the attribute starts with 'get' if item.startswith(header): try: # Update the stat self.__update__() # Return the attribute return getattr(self.stats, item) except Exception: # The method is not found for the plugin raise AttributeError(item) else: # Default behavior raise AttributeError(item) class GlancesServer(object): """This class creates and manages the TCP server.""" def __init__(self, requestHandler=GlancesXMLRPCHandler, cached_time=1, config=None, args=None): # Args self.args = args # Init the XML RPC server try: self.server = GlancesXMLRPCServer(args.bind_address, args.port, requestHandler) except Exception as e: logger.critical("Cannot start Glances server: {0}".format(e)) sys.exit(2) # The users dict # username / password couple # By default, no auth is needed self.server.user_dict = {} self.server.isAuth = False # Register functions self.server.register_introspection_functions() self.server.register_instance(GlancesInstance(cached_time, config)) if not self.args.disable_autodiscover: # Note: The Zeroconf service name will be based on the hostname self.autodiscover_client = GlancesAutoDiscoverClient(socket.gethostname(), args) else: logger.info("Glances autodiscover announce is disabled") def add_user(self, username, password): """Add an user to the dictionary.""" self.server.user_dict[username] = password self.server.isAuth = True def serve_forever(self): """Call the main loop.""" self.server.serve_forever() def server_close(self): """Close the Glances server session.""" self.server.server_close() def end(self): """End of the Glances server session.""" if not self.args.disable_autodiscover: self.autodiscover_client.close() self.server_close() glances-2.3/glances/core/glances_snmp.py000066400000000000000000000114101246314757600203750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . import sys # Import Glances libs from glances.core.glances_logging import logger # Import mandatory PySNMP lib try: from pysnmp.entity.rfc3413.oneliner import cmdgen except ImportError: logger.critical("PySNMP library not found. To install it: pip install pysnmp") sys.exit(2) class GlancesSNMPClient(object): """SNMP client class (based on pysnmp library).""" def __init__(self, host='localhost', port=161, version='2c', community='public', user='private', auth=''): super(GlancesSNMPClient, self).__init__() self.cmdGen = cmdgen.CommandGenerator() self.version = version self.host = host self.port = port self.community = community self.user = user self.auth = auth def __buid_result(self, varBinds): """Build the results""" ret = {} for name, val in varBinds: if str(val) == '': ret[name.prettyPrint()] = '' else: ret[name.prettyPrint()] = val.prettyPrint() # In Python 3, prettyPrint() return 'b'linux'' instead of 'linux' if ret[name.prettyPrint()].startswith('b\''): ret[name.prettyPrint()] = ret[name.prettyPrint()][2:-1] return ret def __get_result__(self, errorIndication, errorStatus, errorIndex, varBinds): """Put results in table.""" ret = {} if not errorIndication or not errorStatus: ret = self.__buid_result(varBinds) return ret def get_by_oid(self, *oid): """SNMP simple request (list of OID). One request per OID list. * oid: oid list > Return a dict """ if self.version == '3': errorIndication, errorStatus, errorIndex, varBinds = self.cmdGen.getCmd( cmdgen.UsmUserData(self.user, self.auth), cmdgen.UdpTransportTarget((self.host, self.port)), *oid ) else: errorIndication, errorStatus, errorIndex, varBinds = self.cmdGen.getCmd( cmdgen.CommunityData(self.community), cmdgen.UdpTransportTarget((self.host, self.port)), *oid ) return self.__get_result__(errorIndication, errorStatus, errorIndex, varBinds) def __bulk_result__(self, errorIndication, errorStatus, errorIndex, varBindTable): ret = [] if not errorIndication or not errorStatus: for varBindTableRow in varBindTable: ret.append(self.__buid_result(varBindTableRow)) return ret def getbulk_by_oid(self, non_repeaters, max_repetitions, *oid): """SNMP getbulk request. In contrast to snmpwalk, this information will typically be gathered in a single transaction with the agent, rather than one transaction per variable found. * non_repeaters: This specifies the number of supplied variables that should not be iterated over. * max_repetitions: This specifies the maximum number of iterations over the repeating variables. * oid: oid list > Return a list of dicts """ if self.version.startswith('3'): errorIndication, errorStatus, errorIndex, varBinds = self.cmdGen.getCmd( cmdgen.UsmUserData(self.user, self.auth), cmdgen.UdpTransportTarget((self.host, self.port)), non_repeaters, max_repetitions, *oid ) if self.version.startswith('2'): errorIndication, errorStatus, errorIndex, varBindTable = self.cmdGen.bulkCmd( cmdgen.CommunityData(self.community), cmdgen.UdpTransportTarget((self.host, self.port)), non_repeaters, max_repetitions, *oid ) else: # Bulk request are not available with SNMP version 1 return [] return self.__bulk_result__(errorIndication, errorStatus, errorIndex, varBindTable) glances-2.3/glances/core/glances_standalone.py000066400000000000000000000055231246314757600215600ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage the Glances standalone session.""" # Import Glances libs from glances.core.glances_globals import is_windows from glances.core.glances_logging import logger from glances.core.glances_processes import glances_processes from glances.core.glances_stats import GlancesStats from glances.outputs.glances_curses import GlancesCursesStandalone class GlancesStandalone(object): """This class creates and manages the Glances standalone session.""" def __init__(self, config=None, args=None): # Init stats self.stats = GlancesStats(config=config, args=args) # Default number of processes to displayed is set to 50 glances_processes.set_max_processes(50) # If process extended stats is disabled by user if not args.enable_process_extended: logger.info("Extended stats for top process are disabled (default behavior)") glances_processes.disable_extended() else: logger.debug("Extended stats for top process are enabled") glances_processes.enable_extended() # Manage optionnal process filter if args.process_filter is not None: glances_processes.set_process_filter(args.process_filter) if (not is_windows) and args.no_kernel_threads: # Ignore kernel threads in process list glances_processes.disable_kernel_threads() if args.process_tree: # Enable process tree view glances_processes.enable_tree() # Initial system informations update self.stats.update() # Init screen self.screen = GlancesCursesStandalone(args=args) def serve_forever(self): """Main loop for the CLI.""" while True: # Update system informations self.stats.update() # Update the screen self.screen.update(self.stats) # Export stats using export modules self.stats.export(self.stats) def end(self): """End of the standalone CLI.""" self.screen.end() # Exit from export modules self.stats.end() glances-2.3/glances/core/glances_staticlist.py000066400000000000000000000073111246314757600216100ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage the Glances server static list """ # System lib from socket import gaierror, gethostbyname # Import Glances libs from glances.core.glances_logging import logger class GlancesStaticServer(object): """Manage the static servers list for the client browser""" _section = "serverlist" def __init__(self, config=None, args=None): # server_dict is a list of dict (JSON compliant) # [ {'key': 'zeroconf name', ip': '172.1.2.3', 'port': 61209, 'cpu': 3, 'mem': 34 ...} ... ] # Load the configuration file self._server_list = self.load(config) def load(self, config): """Load the server list from the configuration file""" server_list = [] if config is None: logger.warning("No configuration file available. Cannot load server list.") elif not config.has_section(self._section): logger.warning("No [%s] section in the configuration file. Cannot load server list." % self._section) else: logger.info("Start reading the [%s] section in the configuration file" % self._section) for i in range(1, 256): new_server = {} postfix = 'server_%s_' % str(i) # Read the server name (mandatory) for s in ['name', 'port', 'alias']: new_server[s] = config.get_raw_option(self._section, '%s%s' % (postfix, s)) if new_server['name'] is not None: # Manage optionnal information if new_server['port'] is None: new_server['port'] = 61209 new_server['username'] = 'glances' new_server['password'] = '' try: new_server['ip'] = gethostbyname(new_server['name']) except gaierror as e: logger.error("Cannot get IP address for server %s (%s)" % (new_server['name'], e)) continue new_server['key'] = new_server['name'] + ':' + new_server['port'] # Default status is 'UNKNOWN' new_server['status'] = 'UNKNOWN' # Server type is 'STATIC' new_server['type'] = 'STATIC' # Add the server to the list logger.debug("Add server %s to the static list" % new_server['name']) server_list.append(new_server) # Server list loaded logger.info("%s server(s) loaded from the configuration file" % len(server_list)) logger.debug("Static server list: %s" % server_list) return server_list def get_servers_list(self): """Return the current server list (dict of dict)""" return self._server_list def set_server(self, server_pos, key, value): """Set the key to the value for the server_pos (position in the list)""" self._server_list[server_pos][key] = value glances-2.3/glances/core/glances_stats.py000066400000000000000000000332071246314757600205660ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """The stats manager.""" import collections import os import re import sys import threading from glances.core.glances_globals import plugins_path, exports_path, sys_path from glances.core.glances_logging import logger # SNMP OID regexp pattern to short system name dict oid_to_short_system_name = {'.*Linux.*': 'linux', '.*Darwin.*': 'mac', '.*BSD.*': 'bsd', '.*Windows.*': 'windows', '.*Cisco.*': 'cisco', '.*VMware ESXi.*': 'esxi', '.*NetApp.*': 'netapp'} class GlancesStats(object): """This class stores, updates and gives stats.""" def __init__(self, config=None, args=None): # Set the argument instance self.args = args # Set the config instance self.config = config # Init the plugin list dict self._plugins = collections.defaultdict(dict) # Load the plugins self.load_plugins(args=args) # Init the export modules list dict self._exports = collections.defaultdict(dict) # Load the plugins self.load_exports(args=args) # Load the limits self.load_limits(config) def __getattr__(self, item): """Overwrite the getattr method in case of attribute is not found. The goal is to dynamically generate the following methods: - getPlugname(): return Plugname stat in JSON format """ # Check if the attribute starts with 'get' if item.startswith('get'): # Get the plugin name plugname = item[len('get'):].lower() # Get the plugin instance plugin = self._plugins[plugname] if hasattr(plugin, 'get_stats'): # The method get_stats exist, return it return getattr(plugin, 'get_stats') else: # The method get_stats is not found for the plugin raise AttributeError(item) else: # Default behavior raise AttributeError(item) def load_plugins(self, args=None): """Load all plugins in the 'plugins' folder.""" header = "glances_" for item in os.listdir(plugins_path): if (item.startswith(header) and item.endswith(".py") and item != (header + "plugin.py")): # Import the plugin plugin = __import__(os.path.basename(item)[:-3]) # Add the plugin to the dictionary # The key is the plugin name # for example, the file glances_xxx.py # generate self._plugins_list["xxx"] = ... plugin_name = os.path.basename(item)[len(header):-3].lower() if plugin_name == 'help': self._plugins[plugin_name] = plugin.Plugin(args=args, config=self.config) else: self._plugins[plugin_name] = plugin.Plugin(args=args) # Log plugins list logger.debug("Available plugins list: {0}".format(self.getAllPlugins())) def load_exports(self, args=None): """Load all exports module in the 'exports' folder.""" if args is None: return False header = "glances_" # Transform the arguments list into a dict # The aim is to chec if the export module should be loaded args_var = vars(locals()['args']) for item in os.listdir(exports_path): export_name = os.path.basename(item)[len(header):-3].lower() if (item.startswith(header) and item.endswith(".py") and item != (header + "export.py") and item != (header + "history.py") and args_var['export_' + export_name] is not None and args_var['export_' + export_name] is not False): # Import the export module export_module = __import__(os.path.basename(item)[:-3]) # Add the export to the dictionary # The key is the module name # for example, the file glances_xxx.py # generate self._exports_list["xxx"] = ... self._exports[export_name] = export_module.Export(args=args, config=self.config) # Log plugins list logger.debug("Available exports modules list: {0}".format(self.getAllExports())) return True def getAllPlugins(self): """Return the plugins list.""" return [p for p in self._plugins] def getAllExports(self): """Return the exports modules list.""" return [p for p in self._exports] def load_limits(self, config=None): """Load the stats limits.""" # For each plugins, call the init_limits method for p in self._plugins: # logger.debug("Load limits for %s" % p) self._plugins[p].load_limits(config) def update(self): """Wrapper method to update the stats.""" # For standalone and server modes # For each plugins, call the update method for p in self._plugins: # logger.debug("Update %s stats" % p) self._plugins[p].update() def export(self, input_stats={}): """Export all the stats. Each export module is ran in a dedicated thread.""" # threads = [] for e in self._exports: logger.debug("Export stats using the %s module" % e) thread = threading.Thread(target=self._exports[e].update, args=(input_stats,)) # threads.append(thread) thread.start() def getAll(self): """Return all the stats (list)""" return [self._plugins[p].get_raw() for p in self._plugins] def getAllAsDict(self): """Return all the stats (dict)""" # Python > 2.6 # {p: self._plugins[p].get_raw() for p in self._plugins} ret = {} for p in self._plugins: ret[p] = self._plugins[p].get_raw() return ret def getAllLimits(self): """Return the plugins limits list.""" return [self._plugins[p].get_limits() for p in self._plugins] def getAllLimitsAsDict(self): """Return all the stats limits (dict)""" ret = {} for p in self._plugins: ret[p] = self._plugins[p].get_limits() return ret def getAllViews(self): """Return the plugins views""" return [self._plugins[p].get_views() for p in self._plugins] def getAllViewsAsDict(self): """Return all the stats views (dict)""" ret = {} for p in self._plugins: ret[p] = self._plugins[p].get_views() return ret def get_plugin_list(self): """Return the plugin list.""" self._plugins def get_plugin(self, plugin_name): """Return the plugin name.""" if plugin_name in self._plugins: return self._plugins[plugin_name] else: return None def end(self): """End of the Glances stats""" # Close the export module for e in self._exports: self._exports[e].exit() class GlancesStatsServer(GlancesStats): """This class stores, updates and gives stats for the server.""" def __init__(self, config=None): # Init the stats GlancesStats.__init__(self, config) # Init the all_stats dict used by the server # all_stats is a dict of dicts filled by the server self.all_stats = collections.defaultdict(dict) def update(self, input_stats={}): """Update the stats.""" # Force update of all the stats GlancesStats.update(self) # Build all_stats variable (concatenation of all the stats) self.all_stats = self._set_stats(input_stats) def _set_stats(self, input_stats): """Set the stats to the input_stats one""" # Build the all_stats with the get_raw() method of the plugins ret = collections.defaultdict(dict) for p in self._plugins: ret[p] = self._plugins[p].get_raw() return ret def getAll(self): """Return the stats as a list""" return self.all_stats def getAllAsDict(self): """Return the stats as a dict""" # Python > 2.6 # return {p: self.all_stats[p] for p in self._plugins} ret = {} for p in self._plugins: ret[p] = self.all_stats[p] return ret class GlancesStatsClient(GlancesStats): """This class stores, updates and gives stats for the client.""" def __init__(self, config=None, args=None): """Init the GlancesStatsClient class.""" # Init the plugin list dict self._plugins = collections.defaultdict(dict) # Init the configuration self.config = config # Init the arguments self.args = args # Init the export modules list dict self._exports = collections.defaultdict(dict) # Load the plugins self.load_exports(args=args) def set_plugins(self, input_plugins): """Set the plugin list according to the Glances server.""" header = "glances_" for item in input_plugins: # Import the plugin plugin = __import__(header + item) # Add the plugin to the dictionary # The key is the plugin name # for example, the file glances_xxx.py # generate self._plugins_list["xxx"] = ... logger.debug("Server uses {0} plugin".format(item)) self._plugins[item] = plugin.Plugin() # Restoring system path sys.path = sys_path def update(self, input_stats): """Update all the stats.""" # For Glances client mode for p in input_stats: # Update plugin stats with items sent by the server self._plugins[p].set_stats(input_stats[p]) # Update the views for the updated stats self._plugins[p].update_views() class GlancesStatsClientSNMP(GlancesStats): """This class stores, updates and gives stats for the SNMP client.""" def __init__(self, config=None, args=None): # Init the plugin list dict self._plugins = collections.defaultdict(dict) # Init the configuration self.config = config # Init the arguments self.args = args # OS name is used because OID is differents between system self.os_name = None # Load plugins self.load_plugins(args=self.args) # Init the export modules list dict self._exports = collections.defaultdict(dict) # Load the plugins self.load_exports(args=args) def check_snmp(self): """Chek if SNMP is available on the server.""" # Import the SNMP client class from glances.core.glances_snmp import GlancesSNMPClient # Create an instance of the SNMP client clientsnmp = GlancesSNMPClient(host=self.args.client, port=self.args.snmp_port, version=self.args.snmp_version, community=self.args.snmp_community, user=self.args.snmp_user, auth=self.args.snmp_auth) # If we cannot grab the hostname, then exit... ret = clientsnmp.get_by_oid("1.3.6.1.2.1.1.5.0") != {} if ret: # Get the OS name (need to grab the good OID...) oid_os_name = clientsnmp.get_by_oid("1.3.6.1.2.1.1.1.0") try: self.system_name = self.get_system_name(oid_os_name['1.3.6.1.2.1.1.1.0']) logger.info("SNMP system name detected: {0}".format(self.system_name)) except KeyError: self.system_name = None logger.warning("Cannot detect SNMP system name") return ret def get_system_name(self, oid_system_name): """Get the short os name from the OS name OID string""" short_system_name = None if oid_system_name == '': return short_system_name # Find the short name in the oid_to_short_os_name dict try: iteritems = oid_to_short_system_name.iteritems() except AttributeError: # Correct issue #386 iteritems = oid_to_short_system_name.items() for r, v in iteritems: if re.search(r, oid_system_name): short_system_name = v break return short_system_name def update(self): """Update the stats using SNMP.""" # For each plugins, call the update method for p in self._plugins: # Set the input method to SNMP self._plugins[p].set_input('snmp', self.system_name) try: self._plugins[p].update() except Exception as e: logger.error("Update {0} failed: {1}".format(p, e)) glances-2.3/glances/core/glances_timer.py000066400000000000000000000032531246314757600205460ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """The timer manager.""" from time import time # Global list to manage the elapsed time last_update_times = {} def getTimeSinceLastUpdate(IOType): """Return the elapsed time since last update.""" global last_update_times # assert(IOType in ['net', 'disk', 'process_disk']) current_time = time() last_time = last_update_times.get(IOType) if not last_time: time_since_update = 1 else: time_since_update = current_time - last_time last_update_times[IOType] = current_time return time_since_update class Timer(object): """The timer class. A simple chronometer.""" def __init__(self, duration): self.duration = duration self.start() def start(self): self.target = time() + self.duration def reset(self): self.start() def set(self, duration): self.duration = duration def finished(self): return time() > self.target glances-2.3/glances/core/glances_webserver.py000066400000000000000000000033631246314757600214340ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Glances Web Interface (Bottle based).""" # Import Glances libs from glances.core.glances_globals import is_windows from glances.core.glances_processes import glances_processes from glances.core.glances_stats import GlancesStats from glances.outputs.glances_bottle import GlancesBottle class GlancesWebServer(object): """This class creates and manages the Glances Web server session.""" def __init__(self, config=None, args=None): # Init stats self.stats = GlancesStats(config) if (not is_windows) and args.no_kernel_threads: # Ignore kernel threads in process list glances_processes.disable_kernel_threads() # Initial system informations update self.stats.update() # Init the Bottle Web server self.web = GlancesBottle(args=args) def serve_forever(self): """Main loop for the Web server.""" self.web.start(self.stats) def end(self): """End of the Web server.""" self.web.end() glances-2.3/glances/exports/000077500000000000000000000000001246314757600161315ustar00rootroot00000000000000glances-2.3/glances/exports/__init__.py000066400000000000000000000000001246314757600202300ustar00rootroot00000000000000glances-2.3/glances/exports/glances_csv.py000066400000000000000000000066341246314757600210030ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """CSV interface class.""" # Import sys libs import csv import sys # Import Glances lib from glances.core.glances_globals import is_py3 from glances.core.glances_logging import logger from glances.exports.glances_export import GlancesExport class Export(GlancesExport): """This class manages the CSV export module.""" def __init__(self, config=None, args=None): """Init the CSV export IF.""" GlancesExport.__init__(self, config=config, args=args) # CSV file name self.csv_filename = args.export_csv # Set the CSV output file try: if is_py3: self.csv_file = open(self.csv_filename, 'w', newline='') else: self.csv_file = open(self.csv_filename, 'wb') self.writer = csv.writer(self.csv_file) except IOError as e: logger.critical("Cannot create the CSV file: {0}".format(e)) sys.exit(2) logger.info("Stats exported to CSV file: {0}".format(self.csv_filename)) self.export_enable = True self.first_line = True def exit(self): """Close the CSV file.""" logger.debug("Finalise export interface %s" % self.export_name) self.csv_file.close() def update(self, stats): """Update stats in the CSV output file.""" csv_header = [] csv_data = [] # Get the stats all_stats = stats.getAll() plugins = stats.getAllPlugins() # Loop over available plugin i = 0 for plugin in plugins: if plugin in self.plugins_to_export(): if type(all_stats[i]) is list: for item in all_stats[i]: # First line: header if self.first_line: fieldnames = item.keys() csv_header += map(lambda x: plugin+'_'+item[item['key']]+'_'+x, item) # Others lines: stats fieldvalues = item.values() csv_data += fieldvalues elif type(all_stats[i]) is dict: # First line: header if self.first_line: fieldnames = all_stats[i].keys() csv_header += map(lambda x: plugin+'_'+x, fieldnames) # Others lines: stats fieldvalues = all_stats[i].values() csv_data += fieldvalues i += 1 # Export to CSV if self.first_line: self.writer.writerow(csv_header) self.first_line = False self.writer.writerow(csv_data) self.csv_file.flush() glances-2.3/glances/exports/glances_export.py000066400000000000000000000055241246314757600215260ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """ I am your father... ...for all Glances exports IF. """ # Import system libs # None... # Import Glances lib from glances.core.glances_logging import logger class GlancesExport(object): """Main class for Glances' export IF.""" def __init__(self, config=None, args=None): """Init the export class.""" # Export name (= module name without glances_) self.export_name = self.__class__.__module__[len('glances_'):] logger.debug("Init export interface %s" % self.export_name) # Init the config & args self.config = config self.args = args # By default export is disable # Had to be set to True in the __init__ class of child self.export_enable = False def exit(self): """Close the export module.""" logger.debug("Finalise export interface %s" % self.export_name) def plugins_to_export(self): """Return the list of plugins to export""" return ['cpu', 'load', 'mem', 'memswap', 'network', 'diskio', 'fs', 'processcount'] def update(self, stats): """Update stats to a server. The method buil two list: names and values and call the export method to export the stats""" if not self.export_enable: return False # Get the stats all_stats = stats.getAll() plugins = stats.getAllPlugins() # Loop over available plugin i = 0 for plugin in plugins: if plugin in self.plugins_to_export(): if type(all_stats[i]) is list: for item in all_stats[i]: export_names = map( lambda x: item[item['key']] + '.' + x, item.keys()) export_values = item.values() self.export(plugin, export_names, export_values) elif type(all_stats[i]) is dict: export_names = all_stats[i].keys() export_values = all_stats[i].values() self.export(plugin, export_names, export_values) i += 1 return True glances-2.3/glances/exports/glances_history.py000066400000000000000000000153331246314757600217050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """History class.""" # Import system lib import os # Import Glances lib from glances.core.glances_logging import logger # Import specific lib try: from matplotlib import __version__ as matplotlib_version import matplotlib.pyplot as plt except ImportError: matplotlib_check = False logger.warning('Cannot load Matplotlib library. Please install it using "pip install matplotlib"') else: matplotlib_check = True logger.info('Load Matplotlib version %s' % matplotlib_version) class GlancesHistory(object): """This class define the object to manage stats history""" def __init__(self, output_folder): self.output_folder = output_folder def get_output_folder(self): """Return the output folder where the graph are generated""" return self.output_folder def graph_enabled(self): """Return True if Glances can generaate history graphs""" return matplotlib_check def reset(self, stats): """ Reset all the history """ if not self.graph_enabled(): return False for p in stats.getAllPlugins(): h = stats.get_plugin(p).get_stats_history() if h is not None: stats.get_plugin(p).reset_stats_history() return True def get_graph_color(self, item): """ Get the item's color """ try: ret = item['color'] except KeyError: return '#FFFFFF' else: return ret def get_graph_legend(self, item): """ Get the item's legend """ return item['name'] def get_graph_yunit(self, item, pre_label=''): """ Get the item's Y unit """ try: unit = " (%s)" % item['y_unit'] except KeyError: unit = '' if pre_label == '': label = '' else: label = pre_label.split('_')[0] return "%s%s" % (label, unit) def generate_graph(self, stats): """ Generate graphs from plugins history Return the number of output files generated by the function """ if not self.graph_enabled(): return 0 index_all = 0 for p in stats.getAllPlugins(): h = stats.get_plugin(p).get_stats_history() # Data if h is None: # History (h) not available for plugin (p) continue # Init graph plt.clf() index_graph = 0 handles = [] labels = [] for i in stats.get_plugin(p).get_items_history_list(): if i['name'] in h.keys(): # The key exist # Add the curves in the current chart logger.debug("Generate graph: %s %s" % (p, i['name'])) index_graph += 1 # Labels handles.append(plt.Rectangle((0, 0), 1, 1, fc=self.get_graph_color(i), ec=self.get_graph_color(i), linewidth=2)) labels.append(self.get_graph_legend(i)) # Legend plt.ylabel(self.get_graph_yunit(i, pre_label='')) # Curves plt.grid(True) plt.plot_date(h['date'], h[i['name']], fmt='', drawstyle='default', linestyle='-', color=self.get_graph_color(i), xdate=True, ydate=False) if index_graph == 1: # Title only on top of the first graph plt.title(p.capitalize()) else: # The key did not exist # Find if anothers key ends with the key # Ex: key='tx' => 'ethernet_tx' # Add one curve per chart stats_history_filtered = [key for key in h.keys() if key.endswith('_' + i['name'])] stats_history_filtered.sort() logger.debug("Generate graphs: %s %s" % (p, stats_history_filtered)) if len(stats_history_filtered) > 0: # Create 'n' graph # Each graph iter through the stats plt.clf() index_item = 0 for k in stats_history_filtered: index_item += 1 plt.subplot( len(stats_history_filtered), 1, index_item) plt.ylabel(self.get_graph_yunit(i, pre_label=k)) plt.grid(True) plt.plot_date(h['date'], h[k], fmt='', drawstyle='default', linestyle='-', color=self.get_graph_color(i), xdate=True, ydate=False) if index_item == 1: # Title only on top of the first graph plt.title(p.capitalize() + ' ' + i['name']) # Save the graph to output file fig = plt.gcf() fig.set_size_inches(20, 5 * index_item) plt.xlabel('Date') plt.savefig( os.path.join(self.output_folder, 'glances_%s_%s.png' % (p, i['name'])), dpi=72) index_all += 1 if index_graph > 0: # Save the graph to output file fig = plt.gcf() fig.set_size_inches(20, 10) plt.legend(handles, labels, loc=1, prop={'size': 9}) plt.xlabel('Date') plt.savefig( os.path.join(self.output_folder, 'glances_%s.png' % (p)), dpi=72) index_all += 1 plt.close() return index_all glances-2.3/glances/exports/glances_influxdb.py000066400000000000000000000076221246314757600220210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """InfluxDB interface class.""" # Import sys libs from influxdb import InfluxDBClient, client import sys # Import Glances lib from glances.core.glances_logging import logger from ConfigParser import NoSectionError, NoOptionError from glances.exports.glances_export import GlancesExport class Export(GlancesExport): """This class manages the InfluxDB export module.""" def __init__(self, config=None, args=None): """Init the InfluxDB export IF.""" GlancesExport.__init__(self, config=config, args=args) # Load the InfluxDB configuration file self.influxdb_host = None self.influxdb_port = None self.influxdb_user = None self.influxdb_password = None self.influxdb_db = None self.export_enable = self.load_conf() if not self.export_enable: sys.exit(2) # Init the InfluxDB client self.client = self.init() def load_conf(self, section="influxdb"): """Load the InfluxDb configuration in the Glances configuration file""" if self.config is None: return False try: self.influxdb_host = self.config.get_raw_option(section, "host") self.influxdb_port = self.config.get_raw_option(section, "port") self.influxdb_user = self.config.get_raw_option(section, "user") self.influxdb_password = self.config.get_raw_option(section, "password") self.influxdb_db = self.config.get_raw_option(section, "db") except NoSectionError: logger.critical("No InfluxDB configuration found") return False except NoOptionError as e: logger.critical("Error in the InfluxDB configuration (%s)" % e) return False else: logger.debug("Load InfluxDB from the Glances configuration file") return True def init(self): """Init the connection to the InfluxDB server""" if not self.export_enable: return None db = InfluxDBClient(self.influxdb_host, self.influxdb_port, self.influxdb_user, self.influxdb_password, self.influxdb_db) try: get_all_db = db.get_database_list()[0].values() except client.InfluxDBClientError as e: logger.critical("Can not connect to InfluxDB database '%s' (%s)" % (self.influxdb_db, e)) sys.exit(2) if self.influxdb_db in get_all_db: logger.info( "Stats will be exported to InfluxDB server: {0}".format(db._baseurl)) else: logger.critical("InfluxDB database '%s' did not exist. Please create it" % self.influxdb_db) sys.exit(2) return db def export(self, name, columns, points): """Write the points to the InfluxDB server""" data = [ { "name": name, "columns": columns, "points": [points] }] try: self.client.write_points(data) except Exception as e: logger.error("Can not export stats to InfluxDB (%s)" % e) glances-2.3/glances/exports/glances_statsd.py000066400000000000000000000065661246314757600215160ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Statsd interface class.""" # Import sys libs from statsd import StatsClient from numbers import Number import sys # Import Glances lib from glances.core.glances_logging import logger from ConfigParser import NoSectionError, NoOptionError from glances.exports.glances_export import GlancesExport class Export(GlancesExport): """This class manages the Statsd export module.""" def __init__(self, config=None, args=None): """Init the Statsd export IF.""" GlancesExport.__init__(self, config=config, args=args) # Load the InfluxDB configuration file self.host = None self.port = None self.prefix = None self.export_enable = self.load_conf() if not self.export_enable: sys.exit(2) # Default prefix for stats is 'glances' if self.prefix is None: self.prefix = 'glances' # Init the Statsd client self.client = StatsClient(self.host, int(self.port), prefix=self.prefix) def load_conf(self, section="statsd"): """Load the Statsd configuration in the Glances configuration file""" if self.config is None: return False try: self.host = self.config.get_raw_option(section, "host") self.port = self.config.get_raw_option(section, "port") except NoSectionError: logger.critical("No Statsd configuration found") return False except NoOptionError as e: logger.critical("Error in the Statsd configuration (%s)" % e) return False else: logger.debug("Load Statsd from the Glances configuration file") # Prefix is optional try: self.prefix = self.config.get_raw_option(section, "prefix") except NoOptionError as e: pass return True def init(self, prefix='glances'): """Init the connection to the Statsd server""" if not self.export_enable: return None return StatsClient(self.host, self.port, prefix=prefix) def export(self, name, columns, points): """Export the stats to the Statsd server""" for i in range(0, len(columns)): if not isinstance(points[i], Number): continue stat_name = '{0}.{1}'.format(name, columns[i]) stat_value = points[i] try: self.client.gauge(stat_name, stat_value) except Exception as e: logger.error("Can not export stats to Statsd (%s)" % e) glances-2.3/glances/outputs/000077500000000000000000000000001246314757600161505ustar00rootroot00000000000000glances-2.3/glances/outputs/__init__.py000066400000000000000000000000001246314757600202470ustar00rootroot00000000000000glances-2.3/glances/outputs/bottle/000077500000000000000000000000001246314757600174415ustar00rootroot00000000000000glances-2.3/glances/outputs/bottle/base.tpl000066400000000000000000000057311246314757600211020ustar00rootroot00000000000000 Glances
    % include('plugin_text', plugin_name="system", stats=stats['system'])
    % include('plugin_text', plugin_name="uptime", stats=stats['uptime'])
    % include('plugin_table', plugin_name="cpu", stats=stats['cpu'])
    % include('plugin_table', plugin_name="load", stats=stats['load'])
    % include('plugin_table', plugin_name="mem", stats=stats['mem'])
    % include('plugin_table', plugin_name="memswap", stats=stats['memswap'])
    % include('plugin_table', plugin_name="network", stats=stats['network']) % include('plugin_table', plugin_name="diskio", stats=stats['diskio']) % include('plugin_table', plugin_name="fs", stats=stats['fs']) % include('plugin_table', plugin_name="sensors", stats=stats['sensors'])
    % include('plugin_table', plugin_name="alert", stats=stats['alert']) % include('plugin_text', plugin_name="processcount", stats=stats['processcount']) % include('plugin_table', plugin_name="docker", stats=stats['docker'])
    % include('plugin_table', plugin_name="monitor", stats=stats['monitor'])
    % include('plugin_table', plugin_name="processlist", stats=stats['processlist'])
    glances-2.3/glances/outputs/bottle/plugin_table.tpl000066400000000000000000000012421246314757600226260ustar00rootroot00000000000000% if stats['msgdict'] != []:
    % for msg in stats['msgdict']: % if msg['msg'].startswith('\n'): % else: % if stats['display']: % end % end % end
    {{ msg['msg'] }}
    % endglances-2.3/glances/outputs/bottle/plugin_text.tpl000066400000000000000000000004661246314757600225320ustar00rootroot00000000000000% if stats['msgdict'] != []:
    % for msg in stats['msgdict']: % if stats['display']: {{ msg['msg'] }} % end % end
    % endglances-2.3/glances/outputs/glances_bars.py000066400000000000000000000037171246314757600211550ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Manage bars for Glances output.""" # Import system lib from math import modf # Global vars curses_bars = [" ", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█"] class Bar(object): """Manage bar (progression or status) import sys import time b = Bar(10) for p in range(0, 100): b.set_percent(p) print("\r%s" % b), time.sleep(0.1) sys.stdout.flush() """ def __init__(self, size): # Bar size self.__size = size # Bar current percent self.__percent = 0 def get_size(self): return self.__size def set_size(self, size): self.__size = size return self.__size def get_percent(self): return self.__percent def set_percent(self, percent): assert percent >= 0 assert percent <= 100 self.__percent = percent return self.__percent def __str__(self): """Return the bars""" frac, whole = modf(self.get_size() * self.get_percent() / 100.0) ret = curses_bars[8] * int(whole) if frac > 0: ret += curses_bars[int(frac * 8)] whole += 1 ret += '_' * int(self.get_size() - whole) return ret glances-2.3/glances/outputs/glances_bottle.py000066400000000000000000000307371246314757600215210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Web interface class.""" import json import os import sys # Import Glances libs from glances.core.glances_logging import logger # Import mandatory Bottle lib try: from bottle import Bottle, template, static_file, TEMPLATE_PATH, abort, response, request except ImportError: logger.critical('Bottle module not found. Glances cannot start in web server mode.') sys.exit(2) class GlancesBottle(object): """This class manages the Bottle Web server.""" def __init__(self, args=None): # Init args self.args = args # Init stats # Will be updated within Bottle route self.stats = None # Init Bottle self._app = Bottle() # Enable CORS (issue #479) self._app.install(EnableCors()) # Define routes self._route() # Update the template path (glances/outputs/bottle) TEMPLATE_PATH.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'bottle')) # Path where the statics files are stored self.STATIC_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'static') def _route(self): """Define route.""" self._app.route('/', method="GET", callback=self._index) self._app.route('/', method=["GET", "POST"], callback=self._index) self._app.route('/', method="GET", callback=self._css) self._app.route('/', method="GET", callback=self._js) self._app.route('/favicon.ico', method="GET", callback=self._favicon) # REST API self._app.route('/api/2/pluginslist', method="GET", callback=self._api_plugins) self._app.route('/api/2/all', method="GET", callback=self._api_all) self._app.route('/api/2/all/limits', method="GET", callback=self._api_all_limits) self._app.route('/api/2/all/views', method="GET", callback=self._api_all_views) self._app.route('/api/2/:plugin', method="GET", callback=self._api) self._app.route('/api/2/:plugin/limits', method="GET", callback=self._api_limits) self._app.route('/api/2/:plugin/views', method="GET", callback=self._api_views) self._app.route('/api/2/:plugin/:item', method="GET", callback=self._api_item) self._app.route('/api/2/:plugin/:item/:value', method="GET", callback=self._api_value) def start(self, stats): """Start the bottle.""" # Init stats self.stats = stats # Init plugin list self.plugins_list = self.stats.getAllPlugins() # Bind the Bottle TCP address/port bindmsg = _("Glances web server started on http://{0}:{1}/").format(self.args.bind_address, self.args.port) logger.info(bindmsg) print(bindmsg) self._app.run(host=self.args.bind_address, port=self.args.port, quiet=not self.args.debug) def end(self): """End the bottle.""" pass def _index(self, refresh_time=None): """Bottle callback for index.html (/) file.""" # Manage parameter if refresh_time is None: refresh_time = self.args.time # Update the stat self.stats.update() # Display return self.display(self.stats, refresh_time=refresh_time) def _css(self, filename): """Bottle callback for *.css files.""" # Return the static file return static_file(filename, root=os.path.join(self.STATIC_PATH, 'css')) def _js(self, filename): """Bottle callback for *.js files.""" # Return the static file return static_file(filename, root=os.path.join(self.STATIC_PATH, 'js')) def _favicon(self): """Bottle callback for favicon.""" # Return the static file return static_file('favicon.ico', root=self.STATIC_PATH) def _api_plugins(self): """ Glances API RESTFul implementation Return the plugin list or 404 error """ response.content_type = 'application/json' # Update the stat self.stats.update() try: plist = json.dumps(self.plugins_list) except Exception as e: abort(404, "Cannot get plugin list (%s)" % str(e)) return plist def _api_all(self): """ Glances API RESTFul implementation Return the JSON representation of all the plugins HTTP/200 if OK HTTP/400 if plugin is not found HTTP/404 if others error """ response.content_type = 'application/json' # Update the stat self.stats.update() try: # Get the JSON value of the stat value statval = json.dumps(self.stats.getAllAsDict()) except Exception as e: abort(404, "Cannot get stats (%s)" % str(e)) return statval def _api_all_limits(self): """ Glances API RESTFul implementation Return the JSON representation of all the plugins limits HTTP/200 if OK HTTP/400 if plugin is not found HTTP/404 if others error """ response.content_type = 'application/json' try: # Get the JSON value of the stat limits limits = json.dumps(self.stats.getAllLimitsAsDict()) except Exception as e: abort(404, "Cannot get limits (%s)" % (str(e))) return limits def _api_all_views(self): """ Glances API RESTFul implementation Return the JSON representation of all the plugins views HTTP/200 if OK HTTP/400 if plugin is not found HTTP/404 if others error """ response.content_type = 'application/json' try: # Get the JSON value of the stat view limits = json.dumps(self.stats.getAllViewsAsDict()) except Exception as e: abort(404, "Cannot get views (%s)" % (str(e))) return limits def _api(self, plugin): """ Glances API RESTFul implementation Return the JSON representation of a given plugin HTTP/200 if OK HTTP/400 if plugin is not found HTTP/404 if others error """ response.content_type = 'application/json' if plugin not in self.plugins_list: abort(400, "Unknown plugin %s (available plugins: %s)" % (plugin, self.plugins_list)) # Update the stat self.stats.update() try: # Get the JSON value of the stat ID statval = self.stats.get_plugin(plugin).get_stats() except Exception as e: abort(404, "Cannot get plugin %s (%s)" % (plugin, str(e))) return statval def _api_limits(self, plugin): """ Glances API RESTFul implementation Return the JSON limits of a given plugin HTTP/200 if OK HTTP/400 if plugin is not found HTTP/404 if others error """ response.content_type = 'application/json' if plugin not in self.plugins_list: abort(400, "Unknown plugin %s (available plugins: %s)" % (plugin, self.plugins_list)) # Update the stat # self.stats.update() try: # Get the JSON value of the stat limits ret = self.stats.get_plugin(plugin).get_limits() except Exception as e: abort(404, "Cannot get limits for plugin %s (%s)" % (plugin, str(e))) return ret def _api_views(self, plugin): """ Glances API RESTFul implementation Return the JSON views of a given plugin HTTP/200 if OK HTTP/400 if plugin is not found HTTP/404 if others error """ response.content_type = 'application/json' if plugin not in self.plugins_list: abort(400, "Unknown plugin %s (available plugins: %s)" % (plugin, self.plugins_list)) # Update the stat # self.stats.update() try: # Get the JSON value of the stat views ret = self.stats.get_plugin(plugin).get_views() except Exception as e: abort(404, "Cannot get views for plugin %s (%s)" % (plugin, str(e))) return ret def _api_item(self, plugin, item): """ Glances API RESTFul implementation Return the JSON represenation of the couple plugin/item HTTP/200 if OK HTTP/400 if plugin is not found HTTP/404 if others error """ response.content_type = 'application/json' if plugin not in self.plugins_list: abort(400, "Unknown plugin %s (available plugins: %s)" % (plugin, self.plugins_list)) # Update the stat self.stats.update() plist = self.stats.get_plugin(plugin).get_stats_item(item) if plist is None: abort(404, "Cannot get item %s in plugin %s" % (item, plugin)) else: return plist def _api_value(self, plugin, item, value): """ Glances API RESTFul implementation Return the process stats (dict) for the given item=value HTTP/200 if OK HTTP/400 if plugin is not found HTTP/404 if others error """ response.content_type = 'application/json' if plugin not in self.plugins_list: abort(400, "Unknown plugin %s (available plugins: %s)" % (plugin, self.plugins_list)) # Update the stat self.stats.update() pdict = self.stats.get_plugin(plugin).get_stats_value(item, value) if pdict is None: abort(404, "Cannot get item(%s)=value(%s) in plugin %s" % (item, value, plugin)) else: return pdict def display(self, stats, refresh_time=None): """Display stats on the web page. stats: Stats database to display """ stats = { 'system': self.stats.get_plugin('system').get_stats_display(args=self.args), 'uptime': self.stats.get_plugin('uptime').get_stats_display(args=self.args), 'cpu': self.stats.get_plugin('cpu').get_stats_display(args=self.args), 'load': self.stats.get_plugin('load').get_stats_display(args=self.args), 'mem': self.stats.get_plugin('mem').get_stats_display(args=self.args), 'memswap': self.stats.get_plugin('memswap').get_stats_display(args=self.args), 'network': self.stats.get_plugin('network').get_stats_display(args=self.args), 'diskio': self.stats.get_plugin('diskio').get_stats_display(args=self.args), 'fs': self.stats.get_plugin('fs').get_stats_display(args=self.args), 'raid': self.stats.get_plugin('raid').get_stats_display(args=self.args), 'sensors': self.stats.get_plugin('sensors').get_stats_display(args=self.args), 'alert': self.stats.get_plugin('alert').get_stats_display(args=self.args), 'processcount': self.stats.get_plugin('processcount').get_stats_display(args=self.args), 'monitor': self.stats.get_plugin('monitor').get_stats_display(args=self.args), 'processlist': self.stats.get_plugin('processlist').get_stats_display(args=self.args), 'docker': self.stats.get_plugin('docker').get_stats_display(args=self.args) } return template('base', refresh_time=refresh_time, stats=stats) class EnableCors(object): name = 'enable_cors' api = 2 def apply(self, fn, context): def _enable_cors(*args, **kwargs): # set CORS headers response.headers['Access-Control-Allow-Origin'] = '*' response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, OPTIONS' response.headers['Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token' if request.method != 'OPTIONS': # actual request; reply with the actual response return fn(*args, **kwargs) return _enable_cors glances-2.3/glances/outputs/glances_colorconsole.py000066400000000000000000000106711246314757600227240ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . import sys import threading import time import msvcrt from glances.core.glances_logging import logger try: import colorconsole import colorconsole.terminal except ImportError: logger.critical("Colorconsole module not found. Glances cannot start in standalone mode.") sys.exit(1) try: import queue except ImportError: # Python 2 import Queue as queue class ListenGetch(threading.Thread): def __init__(self, nom=''): threading.Thread.__init__(self) self.Terminated = False self.q = queue.Queue() def run(self): while not self.Terminated: char = msvcrt.getch() self.q.put(char) def stop(self): self.Terminated = True while not self.q.empty(): self.q.get() def get(self, default=None): try: return ord(self.q.get_nowait()) except Exception: return default class Screen(object): COLOR_DEFAULT_WIN = '0F' # 07'#'0F' COLOR_BK_DEFAULT = colorconsole.terminal.colors["BLACK"] COLOR_FG_DEFAULT = colorconsole.terminal.colors["WHITE"] def __init__(self, nc): self.nc = nc self.term = colorconsole.terminal.get_terminal() # os.system('color %s' % self.COLOR_DEFAULT_WIN) self.listen = ListenGetch() self.listen.start() self.term.clear() def subwin(self, x, y): return self def keypad(self, id): return None def nodelay(self, id): return None def getch(self): return self.listen.get(27) def erase(self): self.reset() return None def addnstr(self, y, x, msg, ln, typo=0): try: fgs, bks = self.nc.colors[typo] except Exception: fgs, bks = self.COLOR_FG_DEFAULT, self.COLOR_BK_DEFAULT self.term.set_color(fg=fgs, bk=bks) self.term.print_at(x, y, msg.ljust(ln)) self.term.set_color(fg=self.COLOR_FG_DEFAULT, bk=self.COLOR_BK_DEFAULT) def getmaxyx(self): x = (self.term._Terminal__get_console_info().srWindow.Right - self.term._Terminal__get_console_info().srWindow.Left + 1) y = (self.term._Terminal__get_console_info().srWindow.Bottom - self.term._Terminal__get_console_info().srWindow.Top + 1) return [y, x] def reset(self): self.term.clear() self.term.reset() return None def restore_buffered_mode(self): self.term.restore_buffered_mode() return None class WCurseLight(object): COLOR_WHITE = colorconsole.terminal.colors["WHITE"] COLOR_RED = colorconsole.terminal.colors["RED"] COLOR_GREEN = colorconsole.terminal.colors["GREEN"] COLOR_BLUE = colorconsole.terminal.colors["LBLUE"] COLOR_MAGENTA = colorconsole.terminal.colors["LPURPLE"] COLOR_BLACK = colorconsole.terminal.colors["BLACK"] A_UNDERLINE = 0 A_BOLD = 0 COLOR_PAIRS = 9 colors = {} def __init__(self): self.term = Screen(self) def initscr(self): return self.term def start_color(self): return None def use_default_colors(self): return None def noecho(self): return None def cbreak(self): return None def curs_set(self, y): return None def has_colors(self): return True def echo(self): return None def nocbreak(self): return None def endwin(self): self.term.reset() self.term.restore_buffered_mode() self.term.listen.stop() def napms(self, t): time.sleep(t / 1000 if t > 1000 else 1) def init_pair(self, id, fg, bk): self.colors[id] = [max(fg, 0), max(bk, 0)] def color_pair(self, id): return id glances-2.3/glances/outputs/glances_curses.py000066400000000000000000001231201246314757600215210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Curses interface class.""" # Import system lib import sys # Import Glances lib from glances.core.glances_globals import is_mac, is_windows from glances.core.glances_logging import logger from glances.core.glances_logs import glances_logs from glances.core.glances_processes import glances_processes from glances.core.glances_timer import Timer # Import curses lib for "normal" operating system and consolelog for Windows if not is_windows: try: import curses import curses.panel from curses.textpad import Textbox except ImportError: logger.critical("Curses module not found. Glances cannot start in standalone mode.") sys.exit(1) else: from glances.outputs.glances_colorconsole import WCurseLight curses = WCurseLight() class _GlancesCurses(object): """ This class manages the curses display (and key pressed). Note: It is a private class, use GlancesCursesClient or GlancesCursesBrowser """ def __init__(self, args=None): # Init args self.args = args # Init windows positions self.term_w = 80 self.term_h = 24 # Space between stats self.space_between_column = 3 self.space_between_line = 2 # Init the curses screen self.screen = curses.initscr() if not self.screen: logger.critical("Cannot init the curses library.\n") sys.exit(1) # Set curses options if hasattr(curses, 'start_color'): curses.start_color() if hasattr(curses, 'use_default_colors'): curses.use_default_colors() if hasattr(curses, 'noecho'): curses.noecho() if hasattr(curses, 'cbreak'): curses.cbreak() self.set_cursor(0) # Init colors self.hascolors = False if curses.has_colors() and curses.COLOR_PAIRS > 8: self.hascolors = True # FG color, BG color if args.theme_white: curses.init_pair(1, curses.COLOR_BLACK, -1) else: curses.init_pair(1, curses.COLOR_WHITE, -1) curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_RED) curses.init_pair(3, curses.COLOR_WHITE, curses.COLOR_GREEN) curses.init_pair(4, curses.COLOR_WHITE, curses.COLOR_BLUE) curses.init_pair(5, curses.COLOR_WHITE, curses.COLOR_MAGENTA) curses.init_pair(6, curses.COLOR_RED, -1) curses.init_pair(7, curses.COLOR_GREEN, -1) curses.init_pair(8, curses.COLOR_BLUE, -1) try: curses.init_pair(9, curses.COLOR_MAGENTA, -1) except Exception: if args.theme_white: curses.init_pair(9, curses.COLOR_BLACK, -1) else: curses.init_pair(9, curses.COLOR_WHITE, -1) try: curses.init_pair(10, curses.COLOR_CYAN, -1) except Exception: if args.theme_white: curses.init_pair(10, curses.COLOR_BLACK, -1) else: curses.init_pair(10, curses.COLOR_WHITE, -1) else: self.hascolors = False if args.disable_bold: A_BOLD = curses.A_BOLD else: A_BOLD = 0 self.title_color = A_BOLD self.title_underline_color = A_BOLD | curses.A_UNDERLINE self.help_color = A_BOLD if self.hascolors: # Colors text styles self.no_color = curses.color_pair(1) self.default_color = curses.color_pair(3) | A_BOLD self.nice_color = curses.color_pair(9) | A_BOLD self.ifCAREFUL_color = curses.color_pair(4) | A_BOLD self.ifWARNING_color = curses.color_pair(5) | A_BOLD self.ifCRITICAL_color = curses.color_pair(2) | A_BOLD self.default_color2 = curses.color_pair(7) | A_BOLD self.ifCAREFUL_color2 = curses.color_pair(8) | A_BOLD self.ifWARNING_color2 = curses.color_pair(9) | A_BOLD self.ifCRITICAL_color2 = curses.color_pair(6) | A_BOLD self.filter_color = curses.color_pair(10) | A_BOLD else: # B&W text styles self.no_color = curses.A_NORMAL self.default_color = curses.A_NORMAL self.nice_color = A_BOLD self.ifCAREFUL_color = curses.A_UNDERLINE self.ifWARNING_color = A_BOLD self.ifCRITICAL_color = curses.A_REVERSE self.default_color2 = curses.A_NORMAL self.ifCAREFUL_color2 = curses.A_UNDERLINE self.ifWARNING_color2 = A_BOLD self.ifCRITICAL_color2 = curses.A_REVERSE self.filter_color = A_BOLD # Define the colors list (hash table) for stats self.colors_list = { 'DEFAULT': self.no_color, 'UNDERLINE': curses.A_UNDERLINE, 'BOLD': A_BOLD, 'SORT': A_BOLD, 'OK': self.default_color2, 'FILTER': self.filter_color, 'TITLE': self.title_color, 'PROCESS': self.default_color2, 'STATUS': self.default_color2, 'NICE': self.nice_color, 'CAREFUL': self.ifCAREFUL_color2, 'WARNING': self.ifWARNING_color2, 'CRITICAL': self.ifCRITICAL_color2, 'OK_LOG': self.default_color, 'CAREFUL_LOG': self.ifCAREFUL_color, 'WARNING_LOG': self.ifWARNING_color, 'CRITICAL_LOG': self.ifCRITICAL_color } # Init main window self.term_window = self.screen.subwin(0, 0) # Init refresh time self.__refresh_time = args.time # Init process sort method self.args.process_sorted_by = 'auto' # Init edit filter tag self.edit_filter = False # Catch key pressed with non blocking mode self.term_window.keypad(1) self.term_window.nodelay(1) self.pressedkey = -1 # History tag self.reset_history_tag = False self.history_tag = False if args.enable_history: logger.info('Stats history enabled with output path %s' % args.path_history) from glances.exports.glances_history import GlancesHistory self.glances_history = GlancesHistory(args.path_history) if not self.glances_history.graph_enabled(): args.enable_history = False logger.error( 'Stats history disabled because MatPlotLib is not installed') def set_cursor(self, value): """Configure the curse cursor apparence 0: invisible 1: visible 2: very visible """ if hasattr(curses, 'curs_set'): try: curses.curs_set(value) except Exception: pass def get_key(self, window): # Catch ESC key AND numlock key (issue #163) keycode = [0, 0] keycode[0] = window.getch() keycode[1] = window.getch() if keycode != [-1, -1]: logger.debug("Keypressed (code: %s)" % keycode) if keycode[0] == 27 and keycode[1] != -1: # Do not escape on specials keys return -1 else: return keycode[0] def __catch_key(self, return_to_browser=False): # Catch the pressed key self.pressedkey = self.get_key(self.term_window) # Actions... if self.pressedkey == ord('\x1b') or self.pressedkey == ord('q'): # 'ESC'|'q' > Quit if return_to_browser: logger.info("Stop Glances client and return to the browser") else: self.end() logger.info("Stop Glances") sys.exit(0) elif self.pressedkey == 10: # 'ENTER' > Edit the process filter self.edit_filter = not self.edit_filter elif self.pressedkey == ord('1'): # '1' > Switch between CPU and PerCPU information self.args.percpu = not self.args.percpu elif self.pressedkey == ord('2'): # '2' > Enable/disable left sidebar self.args.disable_left_sidebar = not self.args.disable_left_sidebar elif self.pressedkey == ord('/'): # '/' > Switch between short/long name for processes self.args.process_short_name = not self.args.process_short_name elif self.pressedkey == ord('a'): # 'a' > Sort processes automatically self.args.process_sorted_by = 'auto' glances_processes.resetsort() elif self.pressedkey == ord('b'): # 'b' > Switch between bit/s and Byte/s for network IO # self.net_byteps_tag = not self.net_byteps_tag self.args.byte = not self.args.byte elif self.pressedkey == ord('c'): # 'c' > Sort processes by CPU usage self.args.process_sorted_by = 'cpu_percent' glances_processes.setmanualsortkey(self.args.process_sorted_by) elif self.pressedkey == ord('d'): # 'd' > Show/hide disk I/O stats self.args.disable_diskio = not self.args.disable_diskio elif self.pressedkey == ord('D'): # 'D' > Show/hide Docker stats self.args.disable_docker = not self.args.disable_docker elif self.pressedkey == ord('e'): # 'e' > Enable/Disable extended stats for top process self.args.enable_process_extended = not self.args.enable_process_extended if not self.args.enable_process_extended: glances_processes.disable_extended() else: glances_processes.enable_extended() elif self.pressedkey == ord('F'): # 'F' > Switch between FS available and free space self.args.fs_free_space = not self.args.fs_free_space elif self.pressedkey == ord('f'): # 'f' > Show/hide fs stats self.args.disable_fs = not self.args.disable_fs elif self.pressedkey == ord('g'): # 'g' > History self.history_tag = not self.history_tag elif self.pressedkey == ord('h'): # 'h' > Show/hide help self.args.help_tag = not self.args.help_tag elif self.pressedkey == ord('i'): # 'i' > Sort processes by IO rate (not available on OS X) self.args.process_sorted_by = 'io_counters' glances_processes.setmanualsortkey(self.args.process_sorted_by) elif self.pressedkey == ord('l'): # 'l' > Show/hide log messages self.args.disable_log = not self.args.disable_log elif self.pressedkey == ord('m'): # 'm' > Sort processes by MEM usage self.args.process_sorted_by = 'memory_percent' glances_processes.setmanualsortkey(self.args.process_sorted_by) elif self.pressedkey == ord('n'): # 'n' > Show/hide network stats self.args.disable_network = not self.args.disable_network elif self.pressedkey == ord('p'): # 'p' > Sort processes by name self.args.process_sorted_by = 'name' glances_processes.setmanualsortkey(self.args.process_sorted_by) elif self.pressedkey == ord('r'): # 'r' > Reset history self.reset_history_tag = not self.reset_history_tag elif self.pressedkey == ord('R'): # 'R' > Hide RAID plugins self.args.disable_raid = not self.args.disable_raid elif self.pressedkey == ord('s'): # 's' > Show/hide sensors stats (Linux-only) self.args.disable_sensors = not self.args.disable_sensors elif self.pressedkey == ord('t'): # 't' > Sort processes by TIME usage self.args.process_sorted_by = 'cpu_times' glances_processes.setmanualsortkey(self.args.process_sorted_by) elif self.pressedkey == ord('T'): # 'T' > View network traffic as sum Rx+Tx self.args.network_sum = not self.args.network_sum elif self.pressedkey == ord('u'): # 'u' > View cumulative network IO (instead of bitrate) self.args.network_cumul = not self.args.network_cumul elif self.pressedkey == ord('w'): # 'w' > Delete finished warning logs glances_logs.clean() elif self.pressedkey == ord('x'): # 'x' > Delete finished warning and critical logs glances_logs.clean(critical=True) elif self.pressedkey == ord('z'): # 'z' > Enable/Disable processes stats (count + list + monitor) # Enable/Disable display self.args.disable_process = not self.args.disable_process # Enable/Disable update if self.args.disable_process: glances_processes.disable() else: glances_processes.enable() # Return the key code return self.pressedkey def end(self): """Shutdown the curses window.""" if hasattr(curses, 'echo'): curses.echo() if hasattr(curses, 'nocbreak'): curses.nocbreak() if hasattr(curses, 'curs_set'): try: curses.curs_set(1) except Exception: pass curses.endwin() def init_line_column(self): """Init the line and column position for the curses inteface""" self.line = 0 self.column = 0 self.next_line = 0 self.next_column = 0 def init_line(self): """Init the line position for the curses inteface""" self.line = 0 self.next_line = 0 def init_column(self): """Init the column position for the curses inteface""" self.column = 0 self.next_column = 0 def new_line(self): """New line in the curses interface""" self.line = self.next_line def new_column(self): """New column in the curses interface""" self.column = self.next_column def display(self, stats, cs_status="None"): """Display stats on the screen. stats: Stats database to display cs_status: "None": standalone or server mode "Connected": Client is connected to a Glances server "SNMP": Client is connected to a SNMP server "Disconnected": Client is disconnected from the server Return: True if the stats have been displayed False if the help have been displayed """ # Init the internal line/column for Glances Curses self.init_line_column() # Get the screen size screen_x = self.screen.getmaxyx()[1] screen_y = self.screen.getmaxyx()[0] # No processes list in SNMP mode if cs_status == 'SNMP': # so... more space for others plugins plugin_max_width = 43 else: plugin_max_width = None # Update the stats messages ########################### # Update the client server status self.args.cs_status = cs_status stats_system = stats.get_plugin( 'system').get_stats_display(args=self.args) stats_uptime = stats.get_plugin('uptime').get_stats_display() if self.args.percpu: stats_percpu = stats.get_plugin('percpu').get_stats_display() else: stats_cpu = stats.get_plugin('cpu').get_stats_display() stats_load = stats.get_plugin('load').get_stats_display() stats_mem = stats.get_plugin('mem').get_stats_display() stats_memswap = stats.get_plugin('memswap').get_stats_display() stats_network = stats.get_plugin('network').get_stats_display( args=self.args, max_width=plugin_max_width) stats_diskio = stats.get_plugin( 'diskio').get_stats_display(args=self.args) stats_fs = stats.get_plugin('fs').get_stats_display( args=self.args, max_width=plugin_max_width) stats_raid = stats.get_plugin('raid').get_stats_display( args=self.args) stats_sensors = stats.get_plugin( 'sensors').get_stats_display(args=self.args) stats_now = stats.get_plugin('now').get_stats_display() stats_docker = stats.get_plugin('docker').get_stats_display( args=self.args) stats_processcount = stats.get_plugin( 'processcount').get_stats_display(args=self.args) stats_monitor = stats.get_plugin( 'monitor').get_stats_display(args=self.args) stats_alert = stats.get_plugin( 'alert').get_stats_display(args=self.args) # Adapt number of processes to the available space max_processes_displayed = screen_y - 11 - \ self.get_stats_display_height(stats_alert) - \ self.get_stats_display_height(stats_docker) if self.args.enable_process_extended and not self.args.process_tree: max_processes_displayed -= 4 if max_processes_displayed < 0: max_processes_displayed = 0 if glances_processes.get_max_processes() is None or \ glances_processes.get_max_processes() != max_processes_displayed: logger.debug("Set number of displayed processes to %s" % max_processes_displayed) glances_processes.set_max_processes(max_processes_displayed) stats_processlist = stats.get_plugin( 'processlist').get_stats_display(args=self.args) # Display the stats on the curses interface ########################################### # Help screen (on top of the other stats) if self.args.help_tag: # Display the stats... self.display_plugin( stats.get_plugin('help').get_stats_display(args=self.args)) # ... and exit return False # Display first line (system+uptime) self.new_line() l = self.get_stats_display_width( stats_system) + self.get_stats_display_width(stats_uptime) + self.space_between_column self.display_plugin(stats_system, display_optional=(screen_x >= l)) self.new_column() self.display_plugin(stats_uptime) # Display second line (CPU|PERCPU+LOAD+MEM+SWAP+) # CPU|PERCPU self.init_column() self.new_line() if self.args.percpu: l = self.get_stats_display_width(stats_percpu) else: l = self.get_stats_display_width(stats_cpu) l += self.get_stats_display_width(stats_load) + self.get_stats_display_width( stats_mem) + self.get_stats_display_width(stats_memswap) # Space between column space_number = int(stats_load['msgdict'] != [ ]) + int(stats_mem['msgdict'] != []) + int(stats_memswap['msgdict'] != []) if space_number == 0: space_number = 1 if screen_x > (space_number * self.space_between_column + l): self.space_between_column = int((screen_x - l) / space_number) # Display if self.args.percpu: self.display_plugin(stats_percpu) else: self.display_plugin(stats_cpu, display_optional=(screen_x >= 80)) self.new_column() self.display_plugin(stats_load) self.new_column() self.display_plugin(stats_mem, display_optional=( screen_x >= (space_number * self.space_between_column + l))) self.new_column() self.display_plugin(stats_memswap) # Space between column self.space_between_column = 3 # Backup line position self.saved_line = self.next_line # Display left sidebar (NETWORK+DISKIO+FS+SENSORS+Current time) self.init_column() if (not (self.args.disable_network and self.args.disable_diskio and self.args.disable_fs and self.args.disable_raid and self.args.disable_sensors)) \ and not self.args.disable_left_sidebar: self.new_line() self.display_plugin(stats_network) self.new_line() self.display_plugin(stats_diskio) self.new_line() self.display_plugin(stats_fs) self.new_line() self.display_plugin(stats_raid) self.new_line() self.display_plugin(stats_sensors) self.new_line() self.display_plugin(stats_now) # If space available... if screen_x > 52: # Restore line position self.next_line = self.saved_line # Display right sidebar # ((DOCKER)+PROCESS_COUNT+(MONITORED)+PROCESS_LIST+ALERT) self.new_column() self.new_line() self.display_plugin(stats_docker) self.new_line() self.display_plugin(stats_processcount) if glances_processes.get_process_filter() is None and cs_status == 'None': # Do not display stats monitor list if a filter exist self.new_line() self.display_plugin(stats_monitor) self.new_line() self.display_plugin(stats_processlist, display_optional=(screen_x > 102), display_additional=(not is_mac), max_y=(screen_y - self.get_stats_display_height(stats_alert) - 2)) self.new_line() self.display_plugin(stats_alert) # History option # Generate history graph if self.history_tag and self.args.enable_history: self.display_popup( _("Generate graphs history in %s\nPlease wait...") % self.glances_history.get_output_folder()) self.display_popup( _("Generate graphs history in %s\nDone: %s graphs generated") % (self.glances_history.get_output_folder(), self.glances_history.generate_graph(stats))) elif self.reset_history_tag and self.args.enable_history: self.display_popup(_("Reset history")) self.glances_history.reset(stats) elif (self.history_tag or self.reset_history_tag) and not self.args.enable_history: try: self.glances_history.graph_enabled() except Exception: self.display_popup( _("History disabled\nEnable it using --enable-history")) else: self.display_popup( _("History disabled\nPlease install MatPlotLib")) self.history_tag = False self.reset_history_tag = False # Display edit filter popup # Only in standalone mode (cs_status == 'None') if self.edit_filter and cs_status == 'None': new_filter = self.display_popup(_("Process filter pattern: "), is_input=True, input_value=glances_processes.get_process_filter()) glances_processes.set_process_filter(new_filter) elif self.edit_filter and cs_status != 'None': self.display_popup( _("Process filter only available in standalone mode")) self.edit_filter = False return True def display_popup(self, message, size_x=None, size_y=None, duration=3, is_input=False, input_size=30, input_value=None): """ If is_input is False: Display a centered popup with the given message during duration seconds If size_x and size_y: set the popup size else set it automatically Return True if the popup could be displayed If is_input is True: Display a centered popup with the given message and a input field If size_x and size_y: set the popup size else set it automatically Return the input string or None if the field is empty """ # Center the popup sentence_list = message.split('\n') if size_x is None: size_x = len(max(sentence_list, key=len)) + 4 # Add space for the input field if is_input: size_x += input_size if size_y is None: size_y = len(sentence_list) + 4 screen_x = self.screen.getmaxyx()[1] screen_y = self.screen.getmaxyx()[0] if size_x > screen_x or size_y > screen_y: # No size to display the popup => abord return False pos_x = int((screen_x - size_x) / 2) pos_y = int((screen_y - size_y) / 2) # Create the popup popup = curses.newwin(size_y, size_x, pos_y, pos_x) # Fill the popup popup.border() # Add the message y = 0 for m in message.split('\n'): popup.addnstr(2 + y, 2, m, len(m)) y += 1 if is_input and not is_windows: # Create a subwindow for the text field subpop = popup.derwin(1, input_size, 2, 2 + len(m)) subpop.attron(self.colors_list['FILTER']) # Init the field with the current value if input_value is not None: subpop.addnstr(0, 0, input_value, len(input_value)) # Display the popup popup.refresh() subpop.refresh() # Create the textbox inside the subwindows self.set_cursor(2) textbox = GlancesTextbox(subpop, insert_mode=False) textbox.edit() self.set_cursor(0) if textbox.gather() != '': logger.debug( "User enters the following process filter patern: %s" % textbox.gather()) return textbox.gather()[:-1] else: logger.debug("User clears the process filter patern") return None else: # Display the popup popup.refresh() curses.napms(duration * 1000) return True def display_plugin(self, plugin_stats, display_optional=True, display_additional=True, max_y=65535): """Display the plugin_stats on the screen. If display_optional=True display the optional stats If display_additional=True display additionnal stats max_y do not display line > max_y """ # Exit if: # - the plugin_stats message is empty # - the display tag = False if not plugin_stats['msgdict'] or not plugin_stats['display']: # Exit return 0 # Get the screen size screen_x = self.screen.getmaxyx()[1] screen_y = self.screen.getmaxyx()[0] # Set the upper/left position of the message if plugin_stats['align'] == 'right': # Right align (last column) display_x = screen_x - self.get_stats_display_width(plugin_stats) else: display_x = self.column if plugin_stats['align'] == 'bottom': # Bottom (last line) display_y = screen_y - self.get_stats_display_height(plugin_stats) else: display_y = self.line # Display x = display_x x_max = x y = display_y for m in plugin_stats['msgdict']: # New line if m['msg'].startswith('\n'): # Go to the next line y = y + 1 # Return to the first column x = display_x continue # Do not display outside the screen if x < 0: continue if not m['splittable'] and (x + len(m['msg']) > screen_x): continue if y < 0 or (y + 1 > screen_y) or (y > max_y): break # If display_optional = False do not display optional stats if not display_optional and m['optional']: continue # If display_additional = False do not display additional stats if not display_additional and m['additional']: continue # Is it possible to display the stat with the current screen size # !!! Crach if not try/except... Why ??? try: self.term_window.addnstr(y, x, m['msg'], # Do not disply outside the screen screen_x - x, self.colors_list[m['decoration']]) except Exception: pass else: # New column try: # Python 2: we need to decode to get real screen size because utf-8 special tree chars # occupy several bytes offset = len(m['msg'].decode("utf-8")) except AttributeError: # Python 3: strings are strings and bytes are bytes, all is # good offset = len(m['msg']) x = x + offset if x > x_max: x_max = x # Compute the next Glances column/line position self.next_column = max(self.next_column, x_max + self.space_between_column) self.next_line = max(self.next_line, y + self.space_between_line) def erase(self): """Erase the content of the screen.""" self.term_window.erase() def flush(self, stats, cs_status="None"): """Clear and update the screen. stats: Stats database to display cs_status: "None": standalone or server mode "Connected": Client is connected to the server "Disconnected": Client is disconnected from the server """ self.erase() self.display(stats, cs_status=cs_status) def update(self, stats, cs_status="None", return_to_browser=False): """Update the screen. Wait for __refresh_time sec / catch key every 100 ms. INPUT stats: Stats database to display cs_status: "None": standalone or server mode "Connected": Client is connected to the server "Disconnected": Client is disconnected from the server return_to_browser: True: Do not exist, return to the browser list False: Exit and return to the shell OUPUT True: Exit key has been pressed False: Others cases... """ # Flush display self.flush(stats, cs_status=cs_status) # Wait exitkey = False countdown = Timer(self.__refresh_time) while not countdown.finished() and not exitkey: # Getkey pressedkey = self.__catch_key(return_to_browser=return_to_browser) # Is it an exit key ? exitkey = (pressedkey == ord('\x1b') or pressedkey == ord('q')) if not exitkey and pressedkey > -1: # Redraw display self.flush(stats, cs_status=cs_status) # Wait 100ms... curses.napms(100) return exitkey def get_stats_display_width(self, curse_msg, without_option=False): """Return the width of the formatted curses message. The height is defined by the maximum line. """ try: if without_option: # Size without options c = len(max(''.join([(i['msg'] if not i['optional'] else "") for i in curse_msg['msgdict']]).split('\n'), key=len)) else: # Size with all options c = len(max(''.join([i['msg'] for i in curse_msg['msgdict']]).split('\n'), key=len)) except Exception: return 0 else: return c def get_stats_display_height(self, curse_msg): r"""Return the height of the formatted curses message. The height is defined by the number of '\n' (new line). """ try: c = [i['msg'] for i in curse_msg['msgdict']].count('\n') except Exception: return 0 else: return c + 1 class GlancesCursesStandalone(_GlancesCurses): """Class for the Glances' curse standalone""" pass class GlancesCursesClient(_GlancesCurses): """Class for the Glances' curse client""" pass class GlancesCursesBrowser(_GlancesCurses): """Class for the Glances' curse client browser""" def __init__(self, args=None): # Init the father class _GlancesCurses.__init__(self, args=args) _colors_list = { 'UNKNOWN': self.no_color, 'SNMP': self.default_color2, 'ONLINE': self.default_color2, 'OFFLINE': self.ifCRITICAL_color2, 'PROTECTED': self.ifWARNING_color2, } self.colors_list.update(_colors_list) # First time scan tag # Used to display a specific message when the browser is started self.first_scan = True # Init refresh time self.__refresh_time = args.time # Init the cursor position for the client browser self.cursor_init() # Active Glances server number self.set_active() def set_active(self, index=None): """Set the active server or None if no server selected""" self.active_server = index return self.active_server def get_active(self): """Return the active server (the one display in front) or None if it is the browser list""" return self.active_server def cursor_init(self): """Init the cursor position to the top of the list""" return self.cursor_set(0) def cursor_set(self, pos): """Set the cursor position and return it""" self.cursor_position = pos return self.cursor_position def cursor_get(self): """Return the cursor position""" return self.cursor_position def cursor_up(self, servers_list): """Set the cursor to position N-1 in the list""" if self.cursor_position > 0: self.cursor_position -= 1 else: self.cursor_position = len(servers_list) - 1 return self.cursor_position def cursor_down(self, servers_list): """Set the cursor to position N-1 in the list""" if self.cursor_position < len(servers_list) - 1: self.cursor_position += 1 else: self.cursor_position = 0 return self.cursor_position def __catch_key(self, servers_list): # Catch the browser pressed key self.pressedkey = self.get_key(self.term_window) # Actions... if self.pressedkey == ord('\x1b') or self.pressedkey == ord('q'): # 'ESC'|'q' > Quit self.end() logger.info("Stop Glances client browser") sys.exit(0) elif self.pressedkey == 10: # 'ENTER' > Run Glances on the selected server logger.debug("Server number %s selected" % (self.cursor_get() + 1)) self.set_active(self.cursor_get()) elif self.pressedkey == 259: # 'UP' > Up in the server list logger self.cursor_up(servers_list) elif self.pressedkey == 258: # 'DOWN' > Down in the server list self.cursor_down(servers_list) # Return the key code return self.pressedkey def update(self, servers_list): """Update the servers' list screen. Wait for __refresh_time sec / catch key every 100 ms. servers_list: Dict of dict with servers stats """ # Flush display self.flush(servers_list) # Wait exitkey = False countdown = Timer(self.__refresh_time) while not countdown.finished() and not exitkey: # Getkey pressedkey = self.__catch_key(servers_list) # Is it an exit or select server key ? exitkey = ( pressedkey == ord('\x1b') or pressedkey == ord('q') or pressedkey == 10) if not exitkey and pressedkey > -1: # Redraw display self.flush(servers_list) # Wait 100ms... curses.napms(100) return self.get_active() def flush(self, servers_list): """Update the servers' list screen. servers_list: List of dict with servers stats """ self.erase() self.display(servers_list) def display(self, servers_list): """Display the servers list Return: True if the stats have been displayed False if the stats have not been displayed (no server available) """ # Init the internal line/column for Glances Curses self.init_line_column() # Get the current screen size screen_x = self.screen.getmaxyx()[1] screen_y = self.screen.getmaxyx()[0] # Init position x = 0 y = 0 # Display top header if len(servers_list) == 0: if self.first_scan and not self.args.disable_autodiscover: msg = _("Glances is scanning your network (please wait)...") self.first_scan = False else: msg = _("No Glances servers available") elif len(servers_list) == 1: msg = _("One Glances server available") else: msg = _("%d Glances servers available" % len(servers_list)) if self.args.disable_autodiscover: msg += ' ' + _("(auto discover is disabled)") self.term_window.addnstr(y, x, msg, screen_x - x, self.colors_list['TITLE']) if len(servers_list) == 0: return False # Display the Glances server list #================================ # Table of table # Item description: [stats_id, column name, column size] column_def = [ ['name', _('Name'), 16], ['alias', None, None], ['load_min5', _('LOAD'), 6], ['cpu_percent', _('CPU%'), 5], ['mem_percent', _('MEM%'), 5], ['status', _('STATUS'), 8], ['ip', _('IP'), 15], # ['port', _('PORT'), 5], ['hr_name', _('OS'), 16], ] y = 2 # Display table header cpt = 0 xc = x + 2 for c in column_def: if xc < screen_x and y < screen_y and c[1] is not None: self.term_window.addnstr(y, xc, c[1], screen_x - x, self.colors_list['BOLD']) xc += c[2] + self.space_between_column cpt += 1 y += 1 # If a servers has been deleted from the list... # ... and if the cursor is in the latest position if self.cursor_get() > len(servers_list) - 1: # Set the cursor position to the latest item self.cursor_set(len(servers_list) - 1) # Display table line = 0 for v in servers_list: # Get server stats server_stat = {} for c in column_def: try: server_stat[c[0]] = v[c[0]] except KeyError as e: logger.debug( "Cannot grab stats {0} from server (KeyError: {1})".format(c[0], e)) server_stat[c[0]] = '?' # Display alias instead of name try: if c[0] == 'alias' and v[c[0]] is not None: server_stat['name'] = v[c[0]] except KeyError as e: pass # Display line for server stats cpt = 0 xc = x # Is the line selected ? if line == self.cursor_get(): # Display cursor self.term_window.addnstr(y, xc, ">", screen_x - xc, self.colors_list['BOLD']) # Display alias instead of name server_stat # Display the line xc += 2 for c in column_def: if xc < screen_x and y < screen_y and c[1] is not None: # Display server stats self.term_window.addnstr(y, xc, "%s" % server_stat[c[0]], c[2], self.colors_list[v['status']]) xc += c[2] + self.space_between_column cpt += 1 # Next line, next server... y += 1 line += 1 return True if not is_windows: class GlancesTextbox(Textbox): def __init__(*args, **kwargs): Textbox.__init__(*args, **kwargs) def do_command(self, ch): if ch == 10: # Enter return 0 if ch == 127: # Enter return 8 return Textbox.do_command(self, ch) glances-2.3/glances/outputs/static/000077500000000000000000000000001246314757600174375ustar00rootroot00000000000000glances-2.3/glances/outputs/static/css/000077500000000000000000000000001246314757600202275ustar00rootroot00000000000000glances-2.3/glances/outputs/static/css/bootstrap.min.css000066400000000000000000000365111246314757600235460ustar00rootroot00000000000000/*! * Bootstrap v3.3.1 (http://getbootstrap.com) * Copyright 2011-2014 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=ef7da19b0162dfe4a82a) * Config saved to config.json and https://gist.github.com/ef7da19b0162dfe4a82a *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}glances-2.3/glances/outputs/static/css/normalize.css000066400000000000000000000034411246314757600227430ustar00rootroot00000000000000article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}audio,canvas,video{display:inline-block;}audio:not([controls]){display:none;height:0;}[hidden]{display:none;}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;}body{margin:0;}a:focus{outline:thin dotted;}a:active,a:hover{outline:0;}h1{font-size:2em;margin:0.67em 0;}abbr[title]{border-bottom:1px dotted;}b,strong{font-weight:bold;}dfn{font-style:italic;}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;}mark{background:#ff0;color:#000;}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em;}pre{white-space:pre-wrap;}q{quotes:"\201C" "\201D" "\2018" "\2019";}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sup{top:-0.5em;}sub{bottom:-0.25em;}img{border:0;}svg:not(:root){overflow:hidden;}figure{margin:0;}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em;}legend{border:0;padding:0;}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;}button,input{line-height:normal;}button,select{text-transform:none;}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}button[disabled],html input[disabled]{cursor:default;}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}textarea{overflow:auto;vertical-align:top;}table{border-collapse:collapse;border-spacing:0;}glances-2.3/glances/outputs/static/css/style.css000066400000000000000000000030261246314757600221020ustar00rootroot00000000000000body { background: black; color: #BBB; font-family: "Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace; } .plugin { margin-bottom: 20px; } .plugin table { width: 100%; } .plugin table tr td:not(:first-child) { text-align: right; } .underline{ text-decoration: underline } .bold{ font-weight: bold; } .sort{ font-weight: bold; } .sort:after{ content: '\25BC' } .text-right { text-align: right; } /* Theme */ .title{ font-weight: bold; color: white; } .ok { color: green; } .filter { color: cyan; } .ok_log { background-color: green; color: white; } .careful { color: blueviolet; } .careful_log { background-color: blueviolet; color: white; } .warning { color: orange; } .warning_log { background-color: orange; color: white; } .critical { color: red; } .critical_log { background-color: red; color: white; } .nice { color: magenta; } .status { color: green; } .process { color: green; } /* Plugins */ #cpu table tr td:nth-child(3), #mem table tr td:nth-child(3), #monitor table tr td:nth-child(3) { text-align: left; padding-left: 20px; } #processlist table tr td { text-align: right; } #processlist table tr td, #docker table tr td { padding: 0px 5px 0px 5px; white-space: nowrap; } #processlist table tr td:nth-child(6), #processlist table tr td:nth-child(12) { text-align: left; } #docker table tr td:nth-child(2), #docker table tr td:nth-child(6) { text-align: left; }glances-2.3/glances/outputs/static/favicon.ico000066400000000000000000000102761246314757600215660ustar00rootroot00000000000000  ( @   !*  u/$( W\-!XO *  TKTX5# TK:x+31SK=s:7 ]\]KbG8-7qCVK269) ,N(392869+yX97)92$-77"-:6  $6768*4896*&).59877775, -:98888897%    ?glances-2.3/glances/outputs/static/js/000077500000000000000000000000001246314757600200535ustar00rootroot00000000000000glances-2.3/glances/outputs/static/js/modernizr.custom.js000077500000000000000000000206131246314757600237400ustar00rootroot00000000000000/* Modernizr 2.8.2 (Custom Build) | MIT & BSD * Build: http://modernizr.com/download/#-touch-shiv-cssclasses-teststyles-prefixes-load */ ;window.Modernizr=function(a,b,c){function w(a){j.cssText=a}function x(a,b){return w(m.join(a+";")+(b||""))}function y(a,b){return typeof a===b}function z(a,b){return!!~(""+a).indexOf(b)}function A(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:y(f,"function")?f.bind(d||b):f}return!1}var d="2.8.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n={},o={},p={},q=[],r=q.slice,s,t=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},u={}.hasOwnProperty,v;!y(u,"undefined")&&!y(u.call,"undefined")?v=function(a,b){return u.call(a,b)}:v=function(a,b){return b in a&&y(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=r.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(r.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(r.call(arguments)))};return e}),n.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:t(["@media (",m.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c};for(var B in n)v(n,B)&&(s=B.toLowerCase(),e[s]=n[B](),q.push((e[s]?"":"no-")+s));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)v(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},w(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e.testStyles=t,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+q.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Alert plugin.""" # Import system lib from datetime import datetime # Import Glances libs from glances.core.glances_logs import glances_logs from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Glances' alert plugin. Only for display. """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We want to display the stat in the curse interface self.display_curse = True # Set the message position self.set_align('bottom') # Init the stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = [] def update(self): """Nothing to do here. Just return the global glances_log.""" # Set the stats to the glances_logs self.stats = glances_logs.get() def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if display plugin enable... if args.disable_log: return ret # Build the string message # Header if not self.stats: msg = _("No warning or critical alert detected") ret.append(self.curse_add_line(msg, "TITLE")) else: # Header msg = _("Warning or critical alerts") ret.append(self.curse_add_line(msg, "TITLE")) logs_len = glances_logs.len() if logs_len > 1: msg = _(" (lasts {0} entries)").format(logs_len) else: msg = _(" (one entry)") ret.append(self.curse_add_line(msg, "TITLE")) # Loop over alerts for alert in self.stats: # New line ret.append(self.curse_new_line()) # Start msg = str(datetime.fromtimestamp(alert[0])) ret.append(self.curse_add_line(msg)) # Duration if alert[1] > 0: # If finished display duration msg = ' ({0})'.format(datetime.fromtimestamp(alert[1]) - datetime.fromtimestamp(alert[0])) else: msg = _(" (ongoing)") ret.append(self.curse_add_line(msg)) ret.append(self.curse_add_line(" - ")) # Infos if alert[1] > 0: # If finished do not display status msg = _("{0} on {1}").format(alert[2], alert[3]) ret.append(self.curse_add_line(msg)) else: msg = str(alert[3]) ret.append(self.curse_add_line(msg, decoration=alert[2])) # Min / Mean / Max if self.approx_equal(alert[6], alert[4], tolerance=0.1): msg = ' ({0:.1f})'.format(alert[5]) else: msg = _(" (Min:{0:.1f} Mean:{1:.1f} Max:{2:.1f})").format(alert[6], alert[5], alert[4]) ret.append(self.curse_add_line(msg)) # else: # msg = _(" Running...") # ret.append(self.curse_add_line(msg)) # !!! Debug only # msg = ' | {0}'.format(alert) # ret.append(self.curse_add_line(msg)) return ret def approx_equal(self, a, b, tolerance=0.0): """ Compare a with b using the tolerance (if numerical) """ if str(int(a)).isdigit() and str(int(b)).isdigit(): return abs(a - b) <= max(abs(a), abs(b)) * tolerance else: return a == b glances-2.3/glances/plugins/glances_batpercent.py000066400000000000000000000065611246314757600223130ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Battery plugin.""" # Import Glances libs from glances.core.glances_logging import logger from glances.plugins.glances_plugin import GlancesPlugin # Batinfo library (optional; Linux-only) try: import batinfo except ImportError: logger.debug("Batinfo library not found. Glances cannot grab battery info.") pass class Plugin(GlancesPlugin): """Glances' battery capacity plugin. stats is a list """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # Init the sensor class self.glancesgrabbat = GlancesGrabBat() # We do not want to display the stat in a dedicated area # The HDD temp is displayed within the sensors plugin self.display_curse = False # Init stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = [] @GlancesPlugin._log_result_decorator def update(self): """Update battery capacity stats using the input method.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats self.glancesgrabbat.update() self.stats = self.glancesgrabbat.get() elif self.get_input() == 'snmp': # Update stats using SNMP # Not avalaible pass return self.stats class GlancesGrabBat(object): """Get batteries stats using the batinfo library.""" def __init__(self): """Init batteries stats.""" try: self.bat = batinfo.batteries() self.initok = True self.bat_list = [] self.update() except Exception as e: self.initok = False logger.debug("Cannot init GlancesGrabBat class (%s)" % e) def update(self): """Update the stats.""" if self.initok: self.bat.update() self.bat_list = [{'label': _("Battery (%)"), 'value': self.getcapacitypercent()}] else: self.bat_list = [] def get(self): """Get the stats.""" return self.bat_list def getcapacitypercent(self): """Get batteries capacity percent.""" if not self.initok or not self.bat.stat: return [] # Init the bsum (sum of percent) # and Loop over batteries (yes a computer could have more than 1 battery) bsum = 0 for b in self.bat.stat: try: bsum = bsum + int(b.capacity) except ValueError: return [] # Return the global percent return int(bsum / len(self.bat.stat)) glances-2.3/glances/plugins/glances_core.py000066400000000000000000000046171246314757600211140ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """CPU core plugin.""" import psutil from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Glances' CPU core plugin. Get stats about CPU core number. stats is integer (number of core) """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We dot not want to display the stat in the curse interface # The core number is displayed by the load plugin self.display_curse = False # Init the stat self.reset() def reset(self): """Reset/init the stat using the input method.""" self.stats = {} def update(self): """Update core stats. Stats is a dict (with both physical and log cpu number) instead of a integer. """ # Reset the stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib # The PSUtil 2.0 include psutil.cpu_count() and psutil.cpu_count(logical=False) # Return a dict with: # - phys: physical cores only (hyper thread CPUs are excluded) # - log: logical CPUs in the system # Return None if undefine try: self.stats["phys"] = psutil.cpu_count(logical=False) self.stats["log"] = psutil.cpu_count() except NameError: self.reset() elif self.get_input() == 'snmp': # Update stats using SNMP # http://stackoverflow.com/questions/5662467/how-to-find-out-the-number-of-cpus-using-snmp pass return self.stats glances-2.3/glances/plugins/glances_cpu.py000066400000000000000000000244551246314757600207550ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """CPU plugin.""" import psutil from glances.plugins.glances_plugin import GlancesPlugin # from glances.core.glances_logging import logger # SNMP OID # percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0 # percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0 # percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0 snmp_oid = {'default': {'user': '1.3.6.1.4.1.2021.11.9.0', 'system': '1.3.6.1.4.1.2021.11.10.0', 'idle': '1.3.6.1.4.1.2021.11.11.0'}, 'windows': {'percent': '1.3.6.1.2.1.25.3.3.1.2'}, 'esxi': {'percent': '1.3.6.1.2.1.25.3.3.1.2'}, 'netapp': {'system': '1.3.6.1.4.1.789.1.2.1.3.0', 'idle': '1.3.6.1.4.1.789.1.2.1.5.0', 'nb_log_core': '1.3.6.1.4.1.789.1.2.1.6.0'}} # Define the history items list # - 'name' define the stat identifier # - 'color' define the graph color in #RGB format # - 'y_unit' define the Y label # All items in this list will be historised if the --enable-history tag is set items_history_list = [{'name': 'user', 'color': '#00FF00', 'y_unit': '%'}, {'name': 'system', 'color': '#FF0000', 'y_unit': '%'}] class Plugin(GlancesPlugin): """Glances CPU plugin. 'stats' is a dictionary that contains the system-wide CPU utilization as a percentage. """ def __init__(self, args=None): """Init the CPU plugin.""" GlancesPlugin.__init__( self, args=args, items_history_list=items_history_list) # We want to display the stat in the curse interface self.display_curse = True # Init stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = {} @GlancesPlugin._log_result_decorator def update(self): """Update CPU stats using the input method.""" # Reset stats self.reset() # Grab CPU stats using psutil's cpu_percent and cpu_times_percent # methods if self.get_input() == 'local': # Get all possible values for CPU stats: user, system, idle, # nice (UNIX), iowait (Linux), irq (Linux, FreeBSD), steal (Linux 2.6.11+) # The following stats are returned by the API but not displayed in the UI: # softirq (Linux), guest (Linux 2.6.24+), guest_nice (Linux 3.2.0+) self.stats['total'] = psutil.cpu_percent(interval=0.0) cpu_times_percent = psutil.cpu_times_percent(interval=0.0) for stat in ['user', 'system', 'idle', 'nice', 'iowait', 'irq', 'softirq', 'steal', 'guest', 'guest_nice']: if hasattr(cpu_times_percent, stat): self.stats[stat] = getattr(cpu_times_percent, stat) elif self.get_input() == 'snmp': # Update stats using SNMP if self.get_short_system_name() in ('windows', 'esxi'): # Windows or VMWare ESXi # You can find the CPU utilization of windows system by querying the oid # Give also the number of core (number of element in the table) try: cpu_stats = self.set_stats_snmp(snmp_oid=snmp_oid[self.get_short_system_name()], bulk=True) except KeyError: self.reset() # Iter through CPU and compute the idle CPU stats self.stats['nb_log_core'] = 0 self.stats['idle'] = 0 for c in cpu_stats: if c.startswith('percent'): self.stats['idle'] += float(cpu_stats['percent.3']) self.stats['nb_log_core'] += 1 if self.stats['nb_log_core'] > 0: self.stats['idle'] = self.stats[ 'idle'] / self.stats['nb_log_core'] self.stats['idle'] = 100 - self.stats['idle'] self.stats['total'] = 100 - self.stats['idle'] else: # Default behavor try: self.stats = self.set_stats_snmp( snmp_oid=snmp_oid[self.get_short_system_name()]) except KeyError: self.stats = self.set_stats_snmp( snmp_oid=snmp_oid['default']) if self.stats['idle'] == '': self.reset() return self.stats # Convert SNMP stats to float for key in list(self.stats.keys()): self.stats[key] = float(self.stats[key]) self.stats['total'] = 100 - self.stats['idle'] # Update the history list self.update_stats_history() # Update the view self.update_views() return self.stats def update_views(self): """Update stats views""" # Call the father's method GlancesPlugin.update_views(self) # Add specifics informations # Alert and log for key in ['user', 'system', 'iowait']: if key in self.stats: self.views[key]['decoration'] = self.get_alert_log(self.stats[key], header=key) self.views['total']['decoration'] = self.get_alert_log(self.stats['total'], header="system") # Alert only for key in ['steal']: if key in self.stats: self.views[key]['decoration'] = self.get_alert(self.stats[key], header=key) # Optional for key in ['nice', 'irq', 'iowait', 'steal']: if key in self.stats: self.views[key]['optional'] = True def msg_curse(self, args=None): """Return the list to display in the UI""" # Init the return message ret = [] # Only process if stats exist... if self.stats == {}: return ret # Build the string message # If user stat is not here, display only idle / total CPU usage (for # exemple on Windows OS) idle_tag = 'user' not in self.stats # Header msg = '{0:8}'.format(_("CPU")) ret.append(self.curse_add_line(msg, "TITLE")) # Total CPU usage msg = '{0:>5}%'.format(self.stats['total']) if idle_tag: ret.append(self.curse_add_line( msg, self.get_views(key='total', option='decoration'))) else: ret.append(self.curse_add_line(msg)) # Nice CPU if 'nice' in self.stats: msg = ' {0:8}'.format(_("nice:")) ret.append(self.curse_add_line(msg, optional=self.get_views(key='nice', option='optional'))) msg = '{0:>5}%'.format(self.stats['nice']) ret.append(self.curse_add_line(msg, optional=self.get_views(key='nice', option='optional'))) # New line ret.append(self.curse_new_line()) # User CPU if 'user' in self.stats: msg = '{0:8}'.format(_("user:")) ret.append(self.curse_add_line(msg)) msg = '{0:>5}%'.format(self.stats['user']) ret.append(self.curse_add_line( msg, self.get_views(key='user', option='decoration'))) elif 'idle' in self.stats: msg = '{0:8}'.format(_("idle:")) ret.append(self.curse_add_line(msg)) msg = '{0:>5}%'.format(self.stats['idle']) ret.append(self.curse_add_line(msg)) # IRQ CPU if 'irq' in self.stats: msg = ' {0:8}'.format(_("irq:")) ret.append(self.curse_add_line(msg, optional=self.get_views(key='irq', option='optional'))) msg = '{0:>5}%'.format(self.stats['irq']) ret.append(self.curse_add_line(msg, optional=self.get_views(key='irq', option='optional'))) # New line ret.append(self.curse_new_line()) # System CPU if 'system' in self.stats and not idle_tag: msg = '{0:8}'.format(_("system:")) ret.append(self.curse_add_line(msg)) msg = '{0:>5}%'.format(self.stats['system']) ret.append(self.curse_add_line( msg, self.get_views(key='system', option='decoration'))) else: msg = '{0:8}'.format(_("core:")) ret.append(self.curse_add_line(msg)) msg = '{0:>6}'.format(self.stats['nb_log_core']) ret.append(self.curse_add_line(msg)) # IOWait CPU if 'iowait' in self.stats: msg = ' {0:8}'.format(_("iowait:")) ret.append(self.curse_add_line(msg, optional=self.get_views(key='iowait', option='optional'))) msg = '{0:>5}%'.format(self.stats['iowait']) ret.append(self.curse_add_line( msg, self.get_views(key='iowait', option='decoration'), optional=self.get_views(key='iowait', option='optional'))) # New line ret.append(self.curse_new_line()) # Idle CPU if 'idle' in self.stats and not idle_tag: msg = '{0:8}'.format(_("idle:")) ret.append(self.curse_add_line(msg)) msg = '{0:>5}%'.format(self.stats['idle']) ret.append(self.curse_add_line(msg)) # Steal CPU usage if 'steal' in self.stats: msg = ' {0:8}'.format(_("steal:")) ret.append(self.curse_add_line(msg, optional=self.get_views(key='steal', option='optional'))) msg = '{0:>5}%'.format(self.stats['steal']) ret.append(self.curse_add_line( msg, self.get_views(key='steal', option='decoration'), optional=self.get_views(key='steal', option='optional'))) # Return the message with decoration return ret glances-2.3/glances/plugins/glances_diskio.py000066400000000000000000000167071246314757600214510ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Disk I/O plugin.""" import operator import psutil # Import Glances libs from glances.core.glances_timer import getTimeSinceLastUpdate from glances.plugins.glances_plugin import GlancesPlugin # Define the history items list # All items in this list will be historised if the --enable-history tag is set # 'color' define the graph color in #RGB format items_history_list = [{'name': 'read_bytes', 'color': '#00FF00', 'y_unit': 'B/s'}, {'name': 'write_bytes', 'color': '#FF0000', 'y_unit': 'B/s'}] class Plugin(GlancesPlugin): """Glances' disks I/O plugin. stats is a list """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__( self, args=args, items_history_list=items_history_list) # We want to display the stat in the curse interface self.display_curse = True # Init the stats self.reset() def get_key(self): """Return the key of the list""" return 'disk_name' def reset(self): """Reset/init the stats.""" self.stats = [] @GlancesPlugin._log_result_decorator def update(self): """Update disk I/O stats using the input method.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib # Grab the stat using the PsUtil disk_io_counters method # read_count: number of reads # write_count: number of writes # read_bytes: number of bytes read # write_bytes: number of bytes written # read_time: time spent reading from disk (in milliseconds) # write_time: time spent writing to disk (in milliseconds) try: diskiocounters = psutil.disk_io_counters(perdisk=True) except Exception: return self.stats # Previous disk IO stats are stored in the diskio_old variable if not hasattr(self, 'diskio_old'): # First call, we init the network_old var try: self.diskio_old = diskiocounters except (IOError, UnboundLocalError): pass else: # By storing time data we enable Rx/s and Tx/s calculations in the # XML/RPC API, which would otherwise be overly difficult work # for users of the API time_since_update = getTimeSinceLastUpdate('disk') diskio_new = diskiocounters for disk in diskio_new: try: # Try necessary to manage dynamic disk creation/del diskstat = {} diskstat['time_since_update'] = time_since_update diskstat['disk_name'] = disk diskstat['read_bytes'] = ( diskio_new[disk].read_bytes - self.diskio_old[disk].read_bytes) diskstat['write_bytes'] = ( diskio_new[disk].write_bytes - self.diskio_old[disk].write_bytes) except KeyError: continue else: diskstat['key'] = self.get_key() self.stats.append(diskstat) # Save stats to compute next bitrate self.diskio_old = diskio_new elif self.get_input() == 'snmp': # Update stats using SNMP # No standard way for the moment... pass # Update the history list self.update_stats_history('disk_name') # Update the view self.update_views() return self.stats def update_views(self): """Update stats views""" # Call the father's method GlancesPlugin.update_views(self) # Add specifics informations # Alert for i in self.stats: disk_real_name = i['disk_name'] self.views[i[self.get_key()]]['read_bytes']['decoration'] = self.get_alert(int(i['read_bytes'] // i['time_since_update']), header=disk_real_name + '_rx') self.views[i[self.get_key()]]['write_bytes']['decoration'] = self.get_alert(int(i['write_bytes'] // i['time_since_update']), header=disk_real_name + '_tx') def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_diskio: return ret # Build the string message # Header msg = '{0:9}'.format(_("DISK I/O")) ret.append(self.curse_add_line(msg, "TITLE")) msg = '{0:>7}'.format(_("R/s")) ret.append(self.curse_add_line(msg)) msg = '{0:>7}'.format(_("W/s")) ret.append(self.curse_add_line(msg)) # Disk list (sorted by name) for i in sorted(self.stats, key=operator.itemgetter(self.get_key())): # Do not display hidden interfaces if self.is_hide(i['disk_name']): continue # Is there an alias for the disk name ? disk_real_name = i['disk_name'] disk_name = self.has_alias(i['disk_name']) if disk_name is None: disk_name = disk_real_name # New line ret.append(self.curse_new_line()) if len(disk_name) > 9: # Cut disk name if it is too long disk_name = '_' + disk_name[-8:] msg = '{0:9}'.format(disk_name) ret.append(self.curse_add_line(msg)) txps = self.auto_unit( int(i['read_bytes'] // i['time_since_update'])) rxps = self.auto_unit( int(i['write_bytes'] // i['time_since_update'])) msg = '{0:>7}'.format(txps) ret.append(self.curse_add_line(msg, self.get_views(item=i[self.get_key()], key='read_bytes', option='decoration'))) msg = '{0:>7}'.format(rxps) ret.append(self.curse_add_line(msg, self.get_views(item=i[self.get_key()], key='write_bytes', option='decoration'))) return ret glances-2.3/glances/plugins/glances_docker.py000066400000000000000000000246411246314757600214320ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Docker plugin.""" # Import Glances libs from glances.core.glances_logging import logger from glances.plugins.glances_plugin import GlancesPlugin # Docker-py library (optional and Linux-only) # https://github.com/docker/docker-py try: import docker import requests except ImportError as e: logger.debug("Docker library not found (%s). Glances cannot grab Docker info." % e) docker_tag = False else: docker_tag = True import os import re import numbers class Plugin(GlancesPlugin): """Glances' Docker plugin. stats is a list """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # The plgin can be disable using: args.disable_docker self.args = args # We want to display the stat in the curse interface self.display_curse = True # Init the Docker API self.docker_client = False def connect(self, version=None): """Connect to the Docker server""" # Init connection to the Docker API try: if version is None: ret = docker.Client(base_url='unix://var/run/docker.sock') else: ret = docker.Client(base_url='unix://var/run/docker.sock', version=version) except NameError: # docker lib not found return None try: ret.version() except requests.exceptions.ConnectionError as e: # Connexion error (Docker not detected) # Let this message in debug mode logger.debug("Can't connect to the Docker server (%s)" % e) return None except docker.errors.APIError as e: if version is None: # API error (Version mismatch ?) logger.debug("Docker API error (%s)" % e) # Try the connection with the server version import re version = re.search('server\:\ (.*)\)\".*\)', str(e)) if version: logger.debug("Try connection with Docker API version %s" % version.group(1)) ret = self.connect(version=version.group(1)) else: logger.debug("Can not retreive Docker server version") ret = None else: # API error logger.error("Docker API error (%s)" % e) ret = None except Exception as e: # Others exceptions... # Connexion error (Docker not detected) logger.error("Can't connect to the Docker server (%s)" % e) ret = None # Log an info if Docker plugin is disabled if ret is None: logger.debug("Docker plugin is disable because an error has been detected") return ret def reset(self): """Reset/init the stats.""" self.stats = {} @GlancesPlugin._log_result_decorator def update(self): """Update Docker stats using the input method. """ # Reset stats self.reset() # Get the current Docker API client if not self.docker_client: # First time, try to connect to the server self.docker_client = self.connect() if self.docker_client is None: global docker_tag docker_tag = False # The Docker-py lib is mandatory if not docker_tag or (self.args is not None and self.args.disable_docker): return self.stats if self.get_input() == 'local': # Update stats # Exemple: { # "KernelVersion": "3.16.4-tinycore64", # "Arch": "amd64", # "ApiVersion": "1.15", # "Version": "1.3.0", # "GitCommit": "c78088f", # "Os": "linux", # "GoVersion": "go1.3.3" # } self.stats['version'] = self.docker_client.version() # Example: [{u'Status': u'Up 36 seconds', # u'Created': 1420378904, # u'Image': u'nginx:1', # u'Ports': [{u'Type': u'tcp', u'PrivatePort': 443}, # {u'IP': u'0.0.0.0', u'Type': u'tcp', u'PublicPort': 8080, u'PrivatePort': 80}], # u'Command': u"nginx -g 'daemon off;'", # u'Names': [u'/webstack_nginx_1'], # u'Id': u'b0da859e84eb4019cf1d965b15e9323006e510352c402d2f442ea632d61faaa5'}] self.stats['containers'] = self.docker_client.containers() # Get CPU and MEMORY stats for containers for c in self.stats['containers']: c['cpu'] = self.get_docker_cpu(c['Id']) c['memory'] = self.get_docker_memory(c['Id']) elif self.get_input() == 'snmp': # Update stats using SNMP # Not available pass return self.stats def get_docker_cpu(self, id): """Return the container CPU usage by reading /sys/fs/cgroup/... Input: id is the full container id Output: a dict {'total': 1.49, 'user': 0.65, 'system': 0.84}""" ret = {} # Read the stats try: with open('/sys/fs/cgroup/cpuacct/docker/' + id + '/cpuacct.stat', 'r') as f: for line in f: m = re.search(r"(system|user)\s+(\d+)", line) if m: ret[m.group(1)] = int(m.group(2)) except IOError as e: logger.error("Can not grab container CPU stat ({0})".format(e)) return ret # Get the user ticks ticks = self.get_user_ticks() if isinstance(ret["system"], numbers.Number) and isinstance(ret["user"], numbers.Number): ret["total"] = ret["system"] + ret["user"] for k in ret.keys(): ret[k] = float(ret[k]) / ticks # Return the stats return ret def get_docker_memory(self, id): """Return the container MEMORY usage by reading /sys/fs/cgroup/... Input: id is the full container id Output: a dict {'rss': 1015808, 'cache': 356352}""" ret = {} # Read the stats try: with open('/sys/fs/cgroup/memory/docker/' + id + '/memory.stat', 'r') as f: for line in f: m = re.search(r"(rss|cache)\s+(\d+)", line) if m: ret[m.group(1)] = int(m.group(2)) except IOError as e: logger.error("Can not grab container MEM stat ({0})".format(e)) return ret # Return the stats return ret def get_user_ticks(self): """return the user ticks by reading the environment variable""" return os.sysconf(os.sysconf_names['SC_CLK_TCK']) def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist (and non null) and display plugin enable... if self.stats == {} or args.disable_docker or len(self.stats['containers']) == 0: return ret # Build the string message # Title msg = '{0}'.format(_("CONTAINERS")) ret.append(self.curse_add_line(msg, "TITLE")) msg = ' {0}'.format(len(self.stats['containers'])) ret.append(self.curse_add_line(msg)) msg = ' ({0} {1})'.format(_("served by Docker"), self.stats['version']["Version"]) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) # Header ret.append(self.curse_new_line()) msg = '{0:>14}'.format(_("Id")) ret.append(self.curse_add_line(msg)) msg = ' {0:20}'.format(_("Name")) ret.append(self.curse_add_line(msg)) msg = '{0:>26}'.format(_("Status")) ret.append(self.curse_add_line(msg)) msg = '{0:>6}'.format(_("CPU%")) ret.append(self.curse_add_line(msg)) msg = '{0:>6}'.format(_("MEM")) ret.append(self.curse_add_line(msg)) msg = ' {0:8}'.format(_("Command")) ret.append(self.curse_add_line(msg)) # Data for container in self.stats['containers']: ret.append(self.curse_new_line()) # Id msg = '{0:>14}'.format(container['Id'][0:12]) ret.append(self.curse_add_line(msg)) # Name name = container['Names'][0] if len(name) > 20: name = '_' + name[:-19] else: name[0:20] msg = ' {0:20}'.format(name) ret.append(self.curse_add_line(msg)) # Status status = self.container_alert(container['Status']) msg = container['Status'].replace("minute", "min") msg = '{0:>26}'.format(msg[0:25]) ret.append(self.curse_add_line(msg, status)) # CPU try: msg = '{0:>6.1f}'.format(container['cpu']['total']) except KeyError: msg = '{0:>6}'.format('?') ret.append(self.curse_add_line(msg)) # MEM try: msg = '{0:>6}'.format(self.auto_unit(container['memory']['rss'])) except KeyError: msg = '{0:>6}'.format('?') ret.append(self.curse_add_line(msg)) # Command msg = ' {0}'.format(container['Command']) ret.append(self.curse_add_line(msg)) return ret def container_alert(self, status): """Analyse the container status""" if "Paused" in status: return 'CAREFUL' else: return 'OK' glances-2.3/glances/plugins/glances_fs.py000066400000000000000000000232461246314757600205730ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """File system plugin.""" import operator import psutil from glances.plugins.glances_plugin import GlancesPlugin from glances.core.glances_logging import logger # SNMP OID # The snmpd.conf needs to be edited. # Add the following to enable it on all disk # ... # includeAllDisks 10% # ... # The OIDs are as follows (for the first disk) # Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1 # Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1 # Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1 # Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1 # Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1 # Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1 # Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1 snmp_oid = {'default': {'mnt_point': '1.3.6.1.4.1.2021.9.1.2', 'device_name': '1.3.6.1.4.1.2021.9.1.3', 'size': '1.3.6.1.4.1.2021.9.1.6', 'used': '1.3.6.1.4.1.2021.9.1.8', 'percent': '1.3.6.1.4.1.2021.9.1.9'}, 'windows': {'mnt_point': '1.3.6.1.2.1.25.2.3.1.3', 'alloc_unit': '1.3.6.1.2.1.25.2.3.1.4', 'size': '1.3.6.1.2.1.25.2.3.1.5', 'used': '1.3.6.1.2.1.25.2.3.1.6'}, 'netapp': {'mnt_point': '1.3.6.1.4.1.789.1.5.4.1.2', 'device_name': '1.3.6.1.4.1.789.1.5.4.1.10', 'size': '1.3.6.1.4.1.789.1.5.4.1.3', 'used': '1.3.6.1.4.1.789.1.5.4.1.4', 'percent': '1.3.6.1.4.1.789.1.5.4.1.6'}} snmp_oid['esxi'] = snmp_oid['windows'] # Define the history items list # All items in this list will be historised if the --enable-history tag is set # 'color' define the graph color in #RGB format items_history_list = [{'name': 'percent', 'color': '#00FF00'}] class Plugin(GlancesPlugin): """Glances' file system plugin. stats is a list """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__( self, args=args, items_history_list=items_history_list) # We want to display the stat in the curse interface self.display_curse = True # Init the stats self.reset() def get_key(self): """Return the key of the list""" return 'mnt_point' def reset(self): """Reset/init the stats.""" self.stats = [] @GlancesPlugin._log_result_decorator def update(self): """Update the FS stats using the input method.""" # Reset the list self.reset() if self.get_input() == 'local': # Update stats using the standard system lib # Grab the stats using the PsUtil disk_partitions # If 'all'=False return physical devices only (e.g. hard disks, cd-rom drives, USB keys) # and ignore all others (e.g. memory partitions such as /dev/shm) try: fs_stat = psutil.disk_partitions(all=False) except UnicodeDecodeError: return self.stats # Loop over fs for fs in fs_stat: fs_current = {} fs_current['device_name'] = fs.device fs_current['fs_type'] = fs.fstype fs_current['mnt_point'] = fs.mountpoint # Grab the disk usage try: fs_usage = psutil.disk_usage(fs.mountpoint) except OSError: # Correct issue #346 # Disk is ejected during the command continue fs_current['size'] = fs_usage.total fs_current['used'] = fs_usage.used fs_current['free'] = fs_usage.total - fs_usage.used fs_current['percent'] = fs_usage.percent fs_current['key'] = self.get_key() self.stats.append(fs_current) elif self.get_input() == 'snmp': # Update stats using SNMP # SNMP bulk command to get all file system in one shot try: fs_stat = self.set_stats_snmp(snmp_oid=snmp_oid[self.get_short_system_name()], bulk=True) except KeyError: fs_stat = self.set_stats_snmp(snmp_oid=snmp_oid['default'], bulk=True) # Loop over fs if self.get_short_system_name() in ('windows', 'esxi'): # Windows or ESXi tips for fs in fs_stat: # Memory stats are grabed in the same OID table (ignore it) if fs == 'Virtual Memory' or fs == 'Physical Memory' or fs == 'Real Memory': continue fs_current = {} fs_current['device_name'] = '' fs_current['mnt_point'] = fs.partition(' ')[0] fs_current['size'] = int( fs_stat[fs]['size']) * int(fs_stat[fs]['alloc_unit']) fs_current['used'] = int( fs_stat[fs]['used']) * int(fs_stat[fs]['alloc_unit']) fs_current['percent'] = float( fs_current['used'] * 100 / fs_current['size']) fs_current['key'] = self.get_key() self.stats.append(fs_current) else: # Default behavor for fs in fs_stat: fs_current = {} fs_current['device_name'] = fs_stat[fs]['device_name'] fs_current['mnt_point'] = fs fs_current['size'] = int(fs_stat[fs]['size']) * 1024 fs_current['used'] = int(fs_stat[fs]['used']) * 1024 fs_current['percent'] = float(fs_stat[fs]['percent']) fs_current['key'] = self.get_key() self.stats.append(fs_current) # Update the history list self.update_stats_history('mnt_point') # Update the view self.update_views() return self.stats def update_views(self): """Update stats views""" # Call the father's method GlancesPlugin.update_views(self) # Add specifics informations # Alert for i in self.stats: self.views[i[self.get_key()]]['used']['decoration'] = self.get_alert(i['used'], max=i['size'], header=i['mnt_point']) def msg_curse(self, args=None, max_width=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_fs: return ret # Max size for the fsname name if max_width is not None and max_width >= 23: # Interface size name = max_width - space for interfaces bitrate fsname_max_width = max_width - 14 else: fsname_max_width = 9 # Build the string message # Header msg = '{0:{width}}'.format(_("FILE SYS"), width=fsname_max_width) ret.append(self.curse_add_line(msg, "TITLE")) if args.fs_free_space: msg = '{0:>7}'.format(_("Free")) else: msg = '{0:>7}'.format(_("Used")) ret.append(self.curse_add_line(msg)) msg = '{0:>7}'.format(_("Total")) ret.append(self.curse_add_line(msg)) # Disk list (sorted by name) for i in sorted(self.stats, key=operator.itemgetter(self.get_key())): # New line ret.append(self.curse_new_line()) if i['device_name'] == '' or i['device_name'] == 'none': mnt_point = i['mnt_point'][-fsname_max_width + 1:] elif len(i['mnt_point']) + len(i['device_name'].split('/')[-1]) <= fsname_max_width - 3: # If possible concatenate mode info... Glances touch inside :) mnt_point = i['mnt_point'] + \ ' (' + i['device_name'].split('/')[-1] + ')' elif len(i['mnt_point']) > fsname_max_width: # Cut mount point name if it is too long mnt_point = '_' + i['mnt_point'][-fsname_max_width + 1:] else: mnt_point = i['mnt_point'] msg = '{0:{width}}'.format(mnt_point, width=fsname_max_width) ret.append(self.curse_add_line(msg)) if args.fs_free_space: msg = '{0:>7}'.format(self.auto_unit(i['free'])) else: msg = '{0:>7}'.format(self.auto_unit(i['used'])) ret.append(self.curse_add_line(msg, self.get_views(item=i[self.get_key()], key='used', option='decoration'))) msg = '{0:>7}'.format(self.auto_unit(i['size'])) ret.append(self.curse_add_line(msg)) return ret glances-2.3/glances/plugins/glances_hddtemp.py000066400000000000000000000073531246314757600216110ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """HDD temperature plugin.""" # Import system libs import os import socket # Import Glances libs from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Glances' HDD temperature sensors plugin. stats is a list """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # Init the sensor class self.glancesgrabhddtemp = GlancesGrabHDDTemp() # We do not want to display the stat in a dedicated area # The HDD temp is displayed within the sensors plugin self.display_curse = False # Init stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = [] def update(self): """Update HDD stats using the input method.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib self.stats = self.glancesgrabhddtemp.get() else: # Update stats using SNMP # Not available for the moment pass return self.stats class GlancesGrabHDDTemp(object): """Get hddtemp stats using a socket connection.""" def __init__(self, host='127.0.0.1', port=7634): """Init hddtemp stats.""" self.host = host self.port = port self.cache = "" self.reset() def reset(self): """Reset/init the stats.""" self.hddtemp_list = [] def __update__(self): """Update the stats.""" # Reset the list self.reset() # Fetch the data data = self.fetch() # Exit if no data if data == "": return # Safety check to avoid malformed data # Considering the size of "|/dev/sda||0||" as the minimum if len(data) < 14: data = self.cache if len(self.cache) > 0 else self.fetch() self.cache = data try: fields = data.split(b'|') except TypeError: fields = "" devices = (len(fields) - 1) // 5 for item in range(devices): offset = item * 5 hddtemp_current = {} device = fields[offset + 1].decode('utf-8') device = os.path.basename(device) temperature = fields[offset + 3] hddtemp_current['label'] = device hddtemp_current['value'] = temperature.decode('utf-8') self.hddtemp_list.append(hddtemp_current) def fetch(self): """Fetch the data from hddtemp daemon.""" # Taking care of sudden deaths/stops of hddtemp daemon try: sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sck.connect((self.host, self.port)) data = sck.recv(4096) sck.close() except socket.error: data = "" return data def get(self): """Get HDDs list.""" self.__update__() return self.hddtemp_list glances-2.3/glances/plugins/glances_help.py000066400000000000000000000142331246314757600211070ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """ Help plugin. Just a stupid plugin to display the help screen. """ # Import Glances libs from glances.core.glances_globals import appname, psutil_version, version from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Glances' help plugin.""" def __init__(self, args=None, config=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # Set the config instance self.config = config # We want to display the stat in the curse interface self.display_curse = True def update(self): """No stats. It is just a plugin to display the help.""" pass def msg_curse(self, args=None): """Return the list to display in the curse interface.""" # Init the return message ret = [] # Build the string message # Header msg = '{0} {1}'.format(appname.title(), version) ret.append(self.curse_add_line(msg, "TITLE")) msg = _(" with PSutil {0}").format(psutil_version) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) # Configuration file path try: msg = '{0}: {1}'.format(_("Configuration file"), self.config.get_loaded_config_file()) except AttributeError: pass else: ret.append(self.curse_new_line()) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) # Keys msg_col = ' {0:1} {1:35}' msg_col2 = ' {0:1} {1:35}' ret.append(self.curse_new_line()) msg = msg_col.format("a", _("Sort processes automatically")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("b", _("Bytes or bits for network I/O")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("c", _("Sort processes by CPU%")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("l", _("Show/hide alert logs")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("m", _("Sort processes by MEM%")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("w", _("Delete warning alerts")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("p", _("Sort processes by name")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("x", _("Delete warning and critical alerts")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("i", _("Sort processes by I/O rate")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("1", _("Global CPU or per-CPU stats")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("t", _("Sort processes by CPU times")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("h", _("Show/hide this help screen")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("d", _("Show/hide disk I/O stats")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("T", _("View network I/O as combination")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("f", _("Show/hide filesystem stats")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("u", _("View cumulative network I/O")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("n", _("Show/hide network stats")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("F", _("Show filesystem free space")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("s", _("Show/hide sensors stats")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("g", _("Generate graphs for current history")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("2", _("Show/hide left sidebar")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("r", _("Reset history")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("z", _("Enable/disable processes stats")) ret.append(self.curse_add_line(msg)) msg = msg_col2.format("q", _("Quit (Esc and Ctrl-C also work)")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("e", _("Enable/disable top extended stats")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("/", _("Enable/disable short processes name")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("D", _("Enable/disable Docker stats")) ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) ret.append(self.curse_new_line()) msg = '{0}: {1}'.format("ENTER", _("Edit the process filter pattern")) ret.append(self.curse_add_line(msg)) # Return the message with decoration return ret glances-2.3/glances/plugins/glances_load.py000066400000000000000000000133171246314757600211000ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Load plugin.""" # Import system libs import os # Import Glances libs from glances.plugins.glances_core import Plugin as CorePlugin from glances.plugins.glances_plugin import GlancesPlugin # SNMP OID # 1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1 # 5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2 # 15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3 snmp_oid = {'min1': '1.3.6.1.4.1.2021.10.1.3.1', 'min5': '1.3.6.1.4.1.2021.10.1.3.2', 'min15': '1.3.6.1.4.1.2021.10.1.3.3'} # Define the history items list # All items in this list will be historised if the --enable-history tag is set # 'color' define the graph color in #RGB format items_history_list = [{'name': 'min1', 'color': '#0000FF'}, {'name': 'min5', 'color': '#0000AA'}, {'name': 'min15', 'color': '#000044'}] class Plugin(GlancesPlugin): """Glances' load plugin. stats is a dict """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__( self, args=args, items_history_list=items_history_list) # We want to display the stat in the curse interface self.display_curse = True # Init stats self.reset() # Call CorePlugin in order to display the core number try: self.nb_log_core = CorePlugin(args=self.args).update()["log"] except Exception: self.nb_log_core = 0 def reset(self): """Reset/init the stats.""" self.stats = {} @GlancesPlugin._log_result_decorator def update(self): """Update load stats.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib # Get the load using the os standard lib try: load = os.getloadavg() except (OSError, AttributeError): self.stats = {} else: self.stats = {'min1': load[0], 'min5': load[1], 'min15': load[2], 'cpucore': self.nb_log_core} elif self.get_input() == 'snmp': # Update stats using SNMP self.stats = self.set_stats_snmp(snmp_oid=snmp_oid) if self.stats['min1'] == '': self.reset() return self.stats # Python 3 return a dict like: # {'min1': "b'0.08'", 'min5': "b'0.12'", 'min15': "b'0.15'"} try: iteritems = self.stats.iteritems() except AttributeError: iteritems = self.stats.items() for k, v in iteritems: self.stats[k] = float(v) self.stats['cpucore'] = self.nb_log_core # Update the history list self.update_stats_history() # Update the view self.update_views() return self.stats def update_views(self): """Update stats views""" # Call the father's method GlancesPlugin.update_views(self) # Add specifics informations try: # Alert and log self.views['min15']['decoration'] = self.get_alert_log(self.stats['min15'], max=100 * self.stats['cpucore']) # Alert only self.views['min5']['decoration'] = self.get_alert(self.stats['min5'], max=100 * self.stats['cpucore']) except KeyError: # try/except mandatory for Windows compatibility (no load stats) pass def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist... if self.stats == {}: return ret # Build the string message # Header msg = '{0:8}'.format(_("LOAD")) ret.append(self.curse_add_line(msg, "TITLE")) # Core number if self.stats['cpucore'] > 0: msg = _("{0:d}-core").format(int(self.stats['cpucore']), '>1') ret.append(self.curse_add_line(msg)) # New line ret.append(self.curse_new_line()) # 1min load msg = '{0:8}'.format(_("1 min:")) ret.append(self.curse_add_line(msg)) msg = '{0:>6.2f}'.format(self.stats['min1']) ret.append(self.curse_add_line(msg)) # New line ret.append(self.curse_new_line()) # 5min load msg = '{0:8}'.format(_("5 min:")) ret.append(self.curse_add_line(msg)) msg = '{0:>6.2f}'.format(self.stats['min5']) ret.append(self.curse_add_line( msg, self.get_views(key='min5', option='decoration'))) # New line ret.append(self.curse_new_line()) # 15min load msg = '{0:8}'.format(_("15 min:")) ret.append(self.curse_add_line(msg)) msg = '{0:>6.2f}'.format(self.stats['min15']) ret.append(self.curse_add_line( msg, self.get_views(key='min15', option='decoration'))) return ret glances-2.3/glances/plugins/glances_mem.py000066400000000000000000000255721246314757600207450ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Virtual memory plugin.""" import psutil from glances.plugins.glances_plugin import GlancesPlugin # SNMP OID # Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0 # Total RAM used: .1.3.6.1.4.1.2021.4.6.0 # Total RAM Free: .1.3.6.1.4.1.2021.4.11.0 # Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0 # Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0 # Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0 # Note: For Windows, stats are in the FS table snmp_oid = {'default': {'total': '1.3.6.1.4.1.2021.4.5.0', 'free': '1.3.6.1.4.1.2021.4.11.0', 'shared': '1.3.6.1.4.1.2021.4.13.0', 'buffers': '1.3.6.1.4.1.2021.4.14.0', 'cached': '1.3.6.1.4.1.2021.4.15.0'}, 'windows': {'mnt_point': '1.3.6.1.2.1.25.2.3.1.3', 'alloc_unit': '1.3.6.1.2.1.25.2.3.1.4', 'size': '1.3.6.1.2.1.25.2.3.1.5', 'used': '1.3.6.1.2.1.25.2.3.1.6'}, 'esxi': {'mnt_point': '1.3.6.1.2.1.25.2.3.1.3', 'alloc_unit': '1.3.6.1.2.1.25.2.3.1.4', 'size': '1.3.6.1.2.1.25.2.3.1.5', 'used': '1.3.6.1.2.1.25.2.3.1.6'}} # Define the history items list # All items in this list will be historised if the --enable-history tag is set # 'color' define the graph color in #RGB format items_history_list = [{'name': 'percent', 'color': '#00FF00', 'y_unit': '%'}] class Plugin(GlancesPlugin): """Glances' memory plugin. stats is a dict """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args, items_history_list=items_history_list) # We want to display the stat in the curse interface self.display_curse = True # Init the stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = {} @GlancesPlugin._log_result_decorator def update(self): """Update RAM memory stats using the input method.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib # Grab MEM using the PSUtil virtual_memory method vm_stats = psutil.virtual_memory() # Get all the memory stats (copy/paste of the PsUtil documentation) # total: total physical memory available. # available: the actual amount of available memory that can be given instantly to processes that request more memory in bytes; this is calculated by summing different memory values depending on the platform (e.g. free + buffers + cached on Linux) and it is supposed to be used to monitor actual memory usage in a cross platform fashion. # percent: the percentage usage calculated as (total - available) / total * 100. # used: memory used, calculated differently depending on the platform and designed for informational purposes only. # free: memory not being used at all (zeroed) that is readily available; note that this doesn’t reflect the actual memory available (use ‘available’ instead). # Platform-specific fields: # active: (UNIX): memory currently in use or very recently used, and so it is in RAM. # inactive: (UNIX): memory that is marked as not used. # buffers: (Linux, BSD): cache for things like file system metadata. # cached: (Linux, BSD): cache for various things. # wired: (BSD, OSX): memory that is marked to always stay in RAM. It is never moved to disk. # shared: (BSD): memory that may be simultaneously accessed by multiple processes. self.reset() for mem in ['total', 'available', 'percent', 'used', 'free', 'active', 'inactive', 'buffers', 'cached', 'wired', 'shared']: if hasattr(vm_stats, mem): self.stats[mem] = getattr(vm_stats, mem) # Use the 'free'/htop calculation # free=available+buffer+cached self.stats['free'] = self.stats['available'] if hasattr(self.stats, 'buffers'): self.stats['free'] += self.stats['buffers'] if hasattr(self.stats, 'cached'): self.stats['free'] += self.stats['cached'] # used=total-free self.stats['used'] = self.stats['total'] - self.stats['free'] elif self.get_input() == 'snmp': # Update stats using SNMP if self.get_short_system_name() in ('windows', 'esxi'): # Mem stats for Windows|Vmware Esxi are stored in the FS table try: fs_stat = self.set_stats_snmp(snmp_oid=snmp_oid[self.get_short_system_name()], bulk=True) except KeyError: self.reset() else: for fs in fs_stat: # The Physical Memory (Windows) or Real Memory (VmWare) # gives statistics on RAM usage and availability. if fs in ('Physical Memory', 'Real Memory'): self.stats['total'] = int(fs_stat[fs]['size']) * int(fs_stat[fs]['alloc_unit']) self.stats['used'] = int(fs_stat[fs]['used']) * int(fs_stat[fs]['alloc_unit']) self.stats['percent'] = float(self.stats['used'] * 100 / self.stats['total']) self.stats['free'] = self.stats['total'] - self.stats['used'] break else: # Default behavor for others OS self.stats = self.set_stats_snmp(snmp_oid=snmp_oid['default']) if self.stats['total'] == '': self.reset() return self.stats for key in list(self.stats.keys()): if self.stats[key] != '': self.stats[key] = float(self.stats[key]) * 1024 # Use the 'free'/htop calculation self.stats['free'] = self.stats['free'] - self.stats['total'] + (self.stats['buffers'] + self.stats['cached']) # used=total-free self.stats['used'] = self.stats['total'] - self.stats['free'] # percent: the percentage usage calculated as (total - available) / total * 100. self.stats['percent'] = float((self.stats['total'] - self.stats['free']) / self.stats['total'] * 100) # Update the history list self.update_stats_history() # Update the view self.update_views() return self.stats def update_views(self): """Update stats views""" # Call the father's method GlancesPlugin.update_views(self) # Add specifics informations # Alert and log self.views['used']['decoration'] = self.get_alert_log(self.stats['used'], max=self.stats['total']) # Optional for key in ['active', 'inactive', 'buffers', 'cached']: if key in self.stats: self.views[key]['optional'] = True def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist... if self.stats == {}: return ret # Build the string message # Header msg = '{0:5} '.format(_("MEM")) ret.append(self.curse_add_line(msg, "TITLE")) # Percent memory usage msg = '{0:>7.1%}'.format(self.stats['percent'] / 100) ret.append(self.curse_add_line(msg)) # Active memory usage if 'active' in self.stats: msg = ' {0:9}'.format(_("active:")) ret.append(self.curse_add_line(msg, optional=self.get_views(key='active', option='optional'))) msg = '{0:>7}'.format(self.auto_unit(self.stats['active'])) ret.append(self.curse_add_line(msg, optional=self.get_views(key='active', option='optional'))) # New line ret.append(self.curse_new_line()) # Total memory usage msg = '{0:6}'.format(_("total:")) ret.append(self.curse_add_line(msg)) msg = '{0:>7}'.format(self.auto_unit(self.stats['total'])) ret.append(self.curse_add_line(msg)) # Inactive memory usage if 'inactive' in self.stats: msg = ' {0:9}'.format(_("inactive:")) ret.append(self.curse_add_line(msg, optional=self.get_views(key='inactive', option='optional'))) msg = '{0:>7}'.format(self.auto_unit(self.stats['inactive'])) ret.append(self.curse_add_line(msg, optional=self.get_views(key='inactive', option='optional'))) # New line ret.append(self.curse_new_line()) # Used memory usage msg = '{0:6}'.format(_("used:")) ret.append(self.curse_add_line(msg)) msg = '{0:>7}'.format(self.auto_unit(self.stats['used'])) ret.append(self.curse_add_line( msg, self.get_views(key='used', option='decoration'))) # Buffers memory usage if 'buffers' in self.stats: msg = ' {0:9}'.format(_("buffers:")) ret.append(self.curse_add_line(msg, optional=self.get_views(key='buffers', option='optional'))) msg = '{0:>7}'.format(self.auto_unit(self.stats['buffers'])) ret.append(self.curse_add_line(msg, optional=self.get_views(key='buffers', option='optional'))) # New line ret.append(self.curse_new_line()) # Free memory usage msg = '{0:6}'.format(_("free:")) ret.append(self.curse_add_line(msg)) msg = '{0:>7}'.format(self.auto_unit(self.stats['free'])) ret.append(self.curse_add_line(msg)) # Cached memory usage if 'cached' in self.stats: msg = ' {0:9}'.format(_("cached:")) ret.append(self.curse_add_line(msg, optional=self.get_views(key='cached', option='optional'))) msg = '{0:>7}'.format(self.auto_unit(self.stats['cached'])) ret.append(self.curse_add_line(msg, optional=self.get_views(key='cached', option='optional'))) return ret glances-2.3/glances/plugins/glances_memswap.py000066400000000000000000000160211246314757600216250ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Swap memory plugin.""" import psutil from glances.plugins.glances_plugin import GlancesPlugin # SNMP OID # Total Swap Size: .1.3.6.1.4.1.2021.4.3.0 # Available Swap Space: .1.3.6.1.4.1.2021.4.4.0 snmp_oid = {'default': {'total': '1.3.6.1.4.1.2021.4.3.0', 'free': '1.3.6.1.4.1.2021.4.4.0'}, 'windows': {'mnt_point': '1.3.6.1.2.1.25.2.3.1.3', 'alloc_unit': '1.3.6.1.2.1.25.2.3.1.4', 'size': '1.3.6.1.2.1.25.2.3.1.5', 'used': '1.3.6.1.2.1.25.2.3.1.6'}} # Define the history items list # All items in this list will be historised if the --enable-history tag is set # 'color' define the graph color in #RGB format items_history_list = [{'name': 'percent', 'color': '#00FF00', 'y_unit': '%'}] class Plugin(GlancesPlugin): """Glances' swap memory plugin. stats is a dict """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__( self, args=args, items_history_list=items_history_list) # We want to display the stat in the curse interface self.display_curse = True # Init the stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = {} @GlancesPlugin._log_result_decorator def update(self): """Update swap memory stats using the input method.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib # Grab SWAP using the PSUtil swap_memory method sm_stats = psutil.swap_memory() # Get all the swap stats (copy/paste of the PsUtil documentation) # total: total swap memory in bytes # used: used swap memory in bytes # free: free swap memory in bytes # percent: the percentage usage # sin: the number of bytes the system has swapped in from disk (cumulative) # sout: the number of bytes the system has swapped out from disk # (cumulative) for swap in ['total', 'used', 'free', 'percent', 'sin', 'sout']: if hasattr(sm_stats, swap): self.stats[swap] = getattr(sm_stats, swap) elif self.get_input() == 'snmp': # Update stats using SNMP if self.get_short_system_name() == 'windows': # Mem stats for Windows OS are stored in the FS table try: fs_stat = self.set_stats_snmp(snmp_oid=snmp_oid[self.get_short_system_name()], bulk=True) except KeyError: self.reset() else: for fs in fs_stat: # The virtual memory concept is used by the operating system to extend (virtually) the physical # memory and thus to run more programs by swapping # unused memory zone (page) to a disk file. if fs == 'Virtual Memory': self.stats['total'] = int( fs_stat[fs]['size']) * int(fs_stat[fs]['alloc_unit']) self.stats['used'] = int( fs_stat[fs]['used']) * int(fs_stat[fs]['alloc_unit']) self.stats['percent'] = float( self.stats['used'] * 100 / self.stats['total']) self.stats['free'] = self.stats[ 'total'] - self.stats['used'] break else: self.stats = self.set_stats_snmp(snmp_oid=snmp_oid['default']) if self.stats['total'] == '': self.reset() return self.stats for key in list(self.stats.keys()): if self.stats[key] != '': self.stats[key] = float(self.stats[key]) * 1024 # used=total-free self.stats['used'] = self.stats['total'] - self.stats['free'] # percent: the percentage usage calculated as (total - # available) / total * 100. self.stats['percent'] = float( (self.stats['total'] - self.stats['free']) / self.stats['total'] * 100) # Update the history list self.update_stats_history() # Update the view self.update_views() return self.stats def update_views(self): """Update stats views""" # Call the father's method GlancesPlugin.update_views(self) # Add specifics informations # Alert and log self.views['used']['decoration'] = self.get_alert_log(self.stats['used'], max=self.stats['total']) def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist... if self.stats == {}: return ret # Build the string message # Header msg = '{0:7} '.format(_("SWAP")) ret.append(self.curse_add_line(msg, "TITLE")) # Percent memory usage msg = '{0:>6.1%}'.format(self.stats['percent'] / 100) ret.append(self.curse_add_line(msg)) # New line ret.append(self.curse_new_line()) # Total memory usage msg = '{0:8}'.format(_("total:")) ret.append(self.curse_add_line(msg)) msg = '{0:>6}'.format(self.auto_unit(self.stats['total'])) ret.append(self.curse_add_line(msg)) # New line ret.append(self.curse_new_line()) # Used memory usage msg = '{0:8}'.format(_("used:")) ret.append(self.curse_add_line(msg)) msg = '{0:>6}'.format(self.auto_unit(self.stats['used'])) ret.append(self.curse_add_line( msg, self.get_views(key='used', option='decoration'))) # New line ret.append(self.curse_new_line()) # Free memory usage msg = '{0:8}'.format(_("free:")) ret.append(self.curse_add_line(msg)) msg = '{0:>6}'.format(self.auto_unit(self.stats['free'])) ret.append(self.curse_add_line(msg)) return ret glances-2.3/glances/plugins/glances_monitor.py000066400000000000000000000102451246314757600216450ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Monitor plugin.""" # Import Glances lib from glances.core.glances_logging import logger from glances.core.glances_monitor_list import MonitorList as glancesMonitorList from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Glances' monitor plugin.""" def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We want to display the stat in the curse interface self.display_curse = True # Init stats self.glances_monitors = None self.stats = [] def load_limits(self, config): """Load the monitored list from the conf file.""" logger.debug("Monitor plugin configuration detected in the configuration file") self.glances_monitors = glancesMonitorList(config) def update(self): """Update the monitored list.""" if self.get_input() == 'local': # Monitor list only available in a full Glances environment # Check if the glances_monitor instance is init if self.glances_monitors is None: return self.stats # Update the monitored list (result of command) self.glances_monitors.update() # Put it on the stats var self.stats = self.glances_monitors.get() else: pass return self.stats def get_alert(self, nbprocess=0, countmin=None, countmax=None, header="", log=False): """Return the alert status relative to the process number.""" if nbprocess is None: return 'OK' if countmin is None: countmin = nbprocess if countmax is None: countmax = nbprocess if nbprocess > 0: if int(countmin) <= int(nbprocess) <= int(countmax): return 'OK' else: return 'WARNING' else: if int(countmin) == 0: return 'OK' else: return 'CRITICAL' def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_process: return ret # Build the string message for m in self.stats: msg = '{0:<16} '.format(m['description']) ret.append(self.curse_add_line( msg, self.get_alert(m['count'], m['countmin'], m['countmax']))) msg = '{0:<3} '.format(m['count'] if m['count'] > 1 else '') ret.append(self.curse_add_line(msg)) msg = '{0:13} '.format(_("RUNNING") if m['count'] >= 1 else _("NOT RUNNING")) ret.append(self.curse_add_line(msg)) # Decode to UTF8 (only for Python 3) try: msg = m['result'].decode('utf-8') if m['count'] >= 1 else '' except (UnicodeError, AttributeError): try: msg = m['result'] if m['count'] >= 1 else '' except UnicodeError: msg = m['result'].encode('utf-8') if m['count'] >= 1 else '' ret.append(self.curse_add_line(msg, optional=True, splittable=True)) ret.append(self.curse_new_line()) # Delete the last empty line try: ret.pop() except IndexError: pass return ret glances-2.3/glances/plugins/glances_network.py000066400000000000000000000316461246314757600216570ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Network plugin.""" import base64 import operator import psutil from glances.core.glances_timer import getTimeSinceLastUpdate from glances.plugins.glances_plugin import GlancesPlugin # SNMP OID # http://www.net-snmp.org/docs/mibs/interfaces.html # Dict key = interface_name snmp_oid = {'default': {'interface_name': '1.3.6.1.2.1.2.2.1.2', 'cumulative_rx': '1.3.6.1.2.1.2.2.1.10', 'cumulative_tx': '1.3.6.1.2.1.2.2.1.16'}} # Define the history items list # All items in this list will be historised if the --enable-history tag is set # 'color' define the graph color in #RGB format items_history_list = [{'name': 'rx', 'color': '#00FF00', 'y_unit': 'bit/s'}, {'name': 'tx', 'color': '#FF0000', 'y_unit': 'bit/s'}] class Plugin(GlancesPlugin): """Glances' network Plugin. stats is a list """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args, items_history_list=items_history_list) # We want to display the stat in the curse interface self.display_curse = True # Init the stats self.reset() def get_key(self): """Return the key of the list""" return 'interface_name' def reset(self): """Reset/init the stats.""" self.stats = [] @GlancesPlugin._log_result_decorator def update(self): """Update network stats using the input method. Stats is a list of dict (one dict per interface) """ # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib # Grab network interface stat using the PsUtil net_io_counter method try: netiocounters = psutil.net_io_counters(pernic=True) except UnicodeDecodeError: return self.stats # Previous network interface stats are stored in the network_old variable if not hasattr(self, 'network_old'): # First call, we init the network_old var try: self.network_old = netiocounters except (IOError, UnboundLocalError): pass else: # By storing time data we enable Rx/s and Tx/s calculations in the # XML/RPC API, which would otherwise be overly difficult work # for users of the API time_since_update = getTimeSinceLastUpdate('net') # Loop over interfaces network_new = netiocounters for net in network_new: try: # Try necessary to manage dynamic network interface netstat = {} netstat['interface_name'] = net netstat['time_since_update'] = time_since_update netstat['cumulative_rx'] = network_new[net].bytes_recv netstat['rx'] = (network_new[net].bytes_recv - self.network_old[net].bytes_recv) netstat['cumulative_tx'] = network_new[net].bytes_sent netstat['tx'] = (network_new[net].bytes_sent - self.network_old[net].bytes_sent) netstat['cumulative_cx'] = (netstat['cumulative_rx'] + netstat['cumulative_tx']) netstat['cx'] = netstat['rx'] + netstat['tx'] except KeyError: continue else: netstat['key'] = self.get_key() self.stats.append(netstat) # Save stats to compute next bitrate self.network_old = network_new elif self.get_input() == 'snmp': # Update stats using SNMP # SNMP bulk command to get all network interface in one shot try: netiocounters = self.set_stats_snmp(snmp_oid=snmp_oid[self.get_short_system_name()], bulk=True) except KeyError: netiocounters = self.set_stats_snmp(snmp_oid=snmp_oid['default'], bulk=True) # Previous network interface stats are stored in the network_old variable if not hasattr(self, 'network_old'): # First call, we init the network_old var try: self.network_old = netiocounters except (IOError, UnboundLocalError): pass else: # See description in the 'local' block time_since_update = getTimeSinceLastUpdate('net') # Loop over interfaces network_new = netiocounters for net in network_new: try: # Try necessary to manage dynamic network interface netstat = {} # Windows: a tips is needed to convert HEX to TXT # http://blogs.technet.com/b/networking/archive/2009/12/18/how-to-query-the-list-of-network-interfaces-using-snmp-via-the-ifdescr-counter.aspx if self.get_short_system_name() == 'windows': try: netstat['interface_name'] = str(base64.b16decode(net[2:-2].upper())) except TypeError: netstat['interface_name'] = net else: netstat['interface_name'] = net netstat['time_since_update'] = time_since_update netstat['cumulative_rx'] = float(network_new[net]['cumulative_rx']) netstat['rx'] = (float(network_new[net]['cumulative_rx']) - float(self.network_old[net]['cumulative_rx'])) netstat['cumulative_tx'] = float(network_new[net]['cumulative_tx']) netstat['tx'] = (float(network_new[net]['cumulative_tx']) - float(self.network_old[net]['cumulative_tx'])) netstat['cumulative_cx'] = (netstat['cumulative_rx'] + netstat['cumulative_tx']) netstat['cx'] = netstat['rx'] + netstat['tx'] except KeyError: continue else: netstat['key'] = self.get_key() self.stats.append(netstat) # Save stats to compute next bitrate self.network_old = network_new # Update the history list self.update_stats_history(self.get_key()) # Update the view self.update_views() return self.stats def update_views(self): """Update stats views""" # Call the father's method GlancesPlugin.update_views(self) # Add specifics informations # Alert for i in self.stats: ifrealname = i['interface_name'].split(':')[0] self.views[i[self.get_key()]]['rx']['decoration'] = self.get_alert(int(i['rx'] // i['time_since_update'] * 8), header=ifrealname + '_rx') self.views[i[self.get_key()]]['tx']['decoration'] = self.get_alert(int(i['tx'] // i['time_since_update'] * 8), header=ifrealname + '_tx') def msg_curse(self, args=None, max_width=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_network: return ret # Max size for the interface name if max_width is not None and max_width >= 23: # Interface size name = max_width - space for interfaces bitrate ifname_max_width = max_width - 14 else: ifname_max_width = 9 # Build the string message # Header msg = '{0:{width}}'.format(_("NETWORK"), width=ifname_max_width) ret.append(self.curse_add_line(msg, "TITLE")) if args.network_cumul: # Cumulative stats if args.network_sum: # Sum stats msg = '{0:>14}'.format(_("Rx+Tx")) ret.append(self.curse_add_line(msg)) else: # Rx/Tx stats msg = '{0:>7}'.format(_("Rx")) ret.append(self.curse_add_line(msg)) msg = '{0:>7}'.format(_("Tx")) ret.append(self.curse_add_line(msg)) else: # Bitrate stats if args.network_sum: # Sum stats msg = '{0:>14}'.format(_("Rx+Tx/s")) ret.append(self.curse_add_line(msg)) else: msg = '{0:>7}'.format(_("Rx/s")) ret.append(self.curse_add_line(msg)) msg = '{0:>7}'.format(_("Tx/s")) ret.append(self.curse_add_line(msg)) # Interface list (sorted by name) for i in sorted(self.stats, key=operator.itemgetter(self.get_key())): # Do not display hidden interfaces if self.is_hide(i['interface_name']): continue # Format stats # Is there an alias for the interface name ? ifrealname = i['interface_name'].split(':')[0] ifname = self.has_alias(i['interface_name']) if ifname is None: ifname = ifrealname if len(ifname) > ifname_max_width: # Cut interface name if it is too long ifname = '_' + ifname[-ifname_max_width + 1:] if args.byte: # Bytes per second (for dummy) if args.network_cumul: rx = self.auto_unit(int(i['cumulative_rx'])) tx = self.auto_unit(int(i['cumulative_tx'])) sx = self.auto_unit(int(i['cumulative_tx']) + int(i['cumulative_tx'])) else: rx = self.auto_unit(int(i['rx'] // i['time_since_update'])) tx = self.auto_unit(int(i['tx'] // i['time_since_update'])) sx = self.auto_unit(int(i['rx'] // i['time_since_update']) + int(i['tx'] // i['time_since_update'])) else: # Bits per second (for real network administrator | Default) if args.network_cumul: rx = self.auto_unit(int(i['cumulative_rx'] * 8)) + "b" tx = self.auto_unit(int(i['cumulative_tx'] * 8)) + "b" sx = self.auto_unit(int(i['cumulative_rx'] * 8) + int(i['cumulative_tx'] * 8)) + "b" else: rx = self.auto_unit(int(i['rx'] // i['time_since_update'] * 8)) + "b" tx = self.auto_unit(int(i['tx'] // i['time_since_update'] * 8)) + "b" sx = self.auto_unit(int(i['rx'] // i['time_since_update'] * 8) + int(i['tx'] // i['time_since_update'] * 8)) + "b" # New line ret.append(self.curse_new_line()) msg = '{0:{width}}'.format(ifname, width=ifname_max_width) ret.append(self.curse_add_line(msg)) if args.network_sum: msg = '{0:>14}'.format(sx) ret.append(self.curse_add_line(msg)) else: msg = '{0:>7}'.format(rx) ret.append(self.curse_add_line( msg, self.get_views(item=i[self.get_key()], key='rx', option='decoration'))) msg = '{0:>7}'.format(tx) ret.append(self.curse_add_line( msg, self.get_views(item=i[self.get_key()], key='tx', option='decoration'))) return ret glances-2.3/glances/plugins/glances_now.py000066400000000000000000000035111246314757600207570ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # Import system libs from datetime import datetime # Import Glances libs from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Plugin to get the current date/time. stats is (string) """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We want to display the stat in the curse interface self.display_curse = True # Set the message position self.set_align('bottom') def update(self): """Update current date/time.""" # Had to convert it to string because datetime is not JSON serializable self.stats = datetime.now().strftime(_("%Y-%m-%d %H:%M:%S")) return self.stats def msg_curse(self, args=None): """Return the string to display in the curse interface.""" # Init the return message ret = [] # Build the string message # 23 is the padding for the process list msg = '{0:23}'.format(self.stats) ret.append(self.curse_add_line(msg)) return ret glances-2.3/glances/plugins/glances_percpu.py000066400000000000000000000111621246314757600214530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Per-CPU plugin.""" import psutil from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Glances per-CPU plugin. 'stats' is a list of dictionaries that contain the utilization percentages for each CPU. """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We want to display the stat in the curse interface self.display_curse = True # Init stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = [] def update(self): """Update per-CPU stats using the input method.""" # Reset stats self.reset() # Grab per-CPU stats using psutil's cpu_percent(percpu=True) and # cpu_times_percent(percpu=True) methods if self.get_input() == 'local': percpu_percent = psutil.cpu_percent(interval=0.0, percpu=True) percpu_times_percent = psutil.cpu_times_percent(interval=0.0, percpu=True) for cputimes in percpu_times_percent: for cpupercent in percpu_percent: cpu = {'total': cpupercent, 'user': cputimes.user, 'system': cputimes.system, 'idle': cputimes.idle} # The following stats are for API purposes only if hasattr(cputimes, 'nice'): cpu['nice'] = cputimes.nice if hasattr(cputimes, 'iowait'): cpu['iowait'] = cputimes.iowait if hasattr(cputimes, 'irq'): cpu['irq'] = cputimes.irq if hasattr(cputimes, 'softirq'): cpu['softirq'] = cputimes.softirq if hasattr(cputimes, 'steal'): cpu['steal'] = cputimes.steal if hasattr(cputimes, 'guest'): cpu['guest'] = cputimes.guest if hasattr(cputimes, 'guest_nice'): cpu['guest_nice'] = cputimes.guest_nice self.stats.append(cpu) else: # Update stats using SNMP pass return self.stats def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # No per CPU stat ? Exit... if not self.stats: msg = _("PER CPU not available") ret.append(self.curse_add_line(msg, "TITLE")) return ret # Build the string message # Header msg = '{0:8}'.format(_("PER CPU")) ret.append(self.curse_add_line(msg, "TITLE")) # Total per-CPU usage for cpu in self.stats: msg = '{0:>6}%'.format(cpu['total']) ret.append(self.curse_add_line(msg)) # User per-CPU ret.append(self.curse_new_line()) msg = '{0:8}'.format(_("user:")) ret.append(self.curse_add_line(msg)) for cpu in self.stats: msg = '{0:>6}%'.format(cpu['user']) ret.append(self.curse_add_line(msg, self.get_alert(cpu['user'], header="user"))) # System per-CPU ret.append(self.curse_new_line()) msg = '{0:8}'.format(_("system:")) ret.append(self.curse_add_line(msg)) for cpu in self.stats: msg = '{0:>6}%'.format(cpu['system']) ret.append(self.curse_add_line(msg, self.get_alert(cpu['system'], header="system"))) # Idle per-CPU ret.append(self.curse_new_line()) msg = '{0:8}'.format(_("idle:")) ret.append(self.curse_add_line(msg)) for cpu in self.stats: msg = '{0:>6}%'.format(cpu['idle']) ret.append(self.curse_add_line(msg)) # Return the message with decoration return ret glances-2.3/glances/plugins/glances_plugin.py000066400000000000000000000574111246314757600214620ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """ I am your father... ...for all Glances plugins. """ # Import system libs import json from datetime import datetime from operator import itemgetter # Import Glances lib from glances.core.glances_globals import is_py3 from glances.core.glances_logging import logger from glances.core.glances_logs import glances_logs from glances.core.glances_actions import GlancesActions class GlancesPlugin(object): """Main class for Glances' plugin.""" def __init__(self, args=None, items_history_list=None): """Init the plugin of plugins class.""" # Plugin name (= module name without glances_) self.plugin_name = self.__class__.__module__[len('glances_'):] # logger.debug("Init plugin %s" % self.plugin_name) # Init the args self.args = args # Init the default alignement (for curses) self.set_align('left') # Init the input method self.input_method = 'local' self.short_system_name = None # Init the stats list self.stats = None # Init the history list self.items_history_list = items_history_list self.stats_history = self.init_stats_history() # Init the limits dictionnary self.limits = dict() # Init the actions self.actions = GlancesActions() # Init the views self.views = dict() def __repr__(self): """Return the raw stats.""" return self.stats def __str__(self): """Return the human-readable stats.""" return str(self.stats) def get_key(self): """Return the key of the list""" return None def add_item_history(self, key, value): """Add an new item (key, value) to the current history""" try: self.stats_history[key].append(value) except KeyError: self.stats_history[key] = [value] def init_stats_history(self): """Init the stats history (dict of list)""" ret = None if self.args is not None and self.args.enable_history and self.get_items_history_list() is not None: init_list = [i['name'] for i in self.get_items_history_list()] logger.debug("Stats history activated for plugin {0} (items: {0})".format( self.plugin_name, init_list)) ret = {} return ret def reset_stats_history(self): """Reset the stats history (dict of list)""" if self.args is not None and self.args.enable_history and self.get_items_history_list() is not None: reset_list = [i['name'] for i in self.get_items_history_list()] logger.debug("Reset history for plugin {0} (items: {0})".format( self.plugin_name, reset_list)) self.stats_history = {} return self.stats_history def update_stats_history(self, item_name=''): """Update stats history""" if self.stats != [] and self.args is not None and self.args.enable_history and self.get_items_history_list() is not None: self.add_item_history('date', datetime.now()) for i in self.get_items_history_list(): if type(self.stats) is list: # Stats is a list of data # Iter throught it (for exemple, iter throught network # interface) for l in self.stats: self.add_item_history( l[item_name] + '_' + i['name'], l[i['name']]) else: # Stats is not a list # Add the item to the history directly self.add_item_history(i['name'], self.stats[i['name']]) return self.stats_history def get_stats_history(self): """Return the stats history""" return self.stats_history def get_items_history_list(self): """Return the items history list""" return self.items_history_list def set_input(self, input_method, short_system_name=None): """Set the input method. * local: system local grab (psutil or direct access) * snmp: Client server mode via SNMP * glances: Client server mode via Glances API For SNMP, short_system_name is detected short OS name """ self.input_method = input_method self.short_system_name = short_system_name return self.input_method def get_input(self): """Get the input method.""" return self.input_method def get_short_system_name(self): """Get the short detected OS name""" return self.short_system_name def set_stats(self, input_stats): """Set the stats to input_stats.""" self.stats = input_stats return self.stats def set_stats_snmp(self, bulk=False, snmp_oid={}): """Update stats using SNMP. If bulk=True, use a bulk request instead of a get request. """ from glances.core.glances_snmp import GlancesSNMPClient # Init the SNMP request clientsnmp = GlancesSNMPClient(host=self.args.client, port=self.args.snmp_port, version=self.args.snmp_version, community=self.args.snmp_community) # Process the SNMP request ret = {} if bulk: # Bulk request snmpresult = clientsnmp.getbulk_by_oid(0, 10, *snmp_oid.values()) if len(snmp_oid) == 1: # Bulk command for only one OID # Note: key is the item indexed but the OID result for item in snmpresult: if item.keys()[0].startswith(snmp_oid.values()[0]): ret[snmp_oid.keys()[0] + item.keys() [0].split(snmp_oid.values()[0])[1]] = item.values()[0] else: # Build the internal dict with the SNMP result # Note: key is the first item in the snmp_oid index = 1 for item in snmpresult: item_stats = {} item_key = None for key in list(snmp_oid.keys()): oid = snmp_oid[key] + '.' + str(index) if oid in item: if item_key is None: item_key = item[oid] else: item_stats[key] = item[oid] if item_stats != {}: ret[item_key] = item_stats index += 1 else: # Simple get request snmpresult = clientsnmp.get_by_oid(*snmp_oid.values()) # Build the internal dict with the SNMP result for key in list(snmp_oid.keys()): ret[key] = snmpresult[snmp_oid[key]] return ret def get_raw(self): """Return the stats object.""" return self.stats def get_stats(self): """Return the stats object in JSON format""" return json.dumps(self.stats) def get_stats_item(self, item): """ Return the stats object for a specific item (in JSON format) Stats should be a list of dict (processlist, network...) """ if type(self.stats) is not list: if type(self.stats) is dict: try: return json.dumps({item: self.stats[item]}) except KeyError as e: logger.error("Cannot get item {0} ({1})".format(item, e)) else: return None else: try: # Source: # http://stackoverflow.com/questions/4573875/python-get-index-of-dictionary-item-in-list return json.dumps({item: map(itemgetter(item), self.stats)}) except (KeyError, ValueError) as e: logger.error("Cannot get item {0} ({1})".format(item, e)) return None def get_stats_value(self, item, value): """ Return the stats object for a specific item=value (in JSON format) Stats should be a list of dict (processlist, network...) """ if type(self.stats) is not list: return None else: if value.isdigit(): value = int(value) try: return json.dumps({value: [i for i in self.stats if i[item] == value]}) except (KeyError, ValueError) as e: logger.error( "Cannot get item({0})=value({1}) ({2})".format(item, value, e)) return None def update_views(self): """Default builder fo the stats views The V of MVC A dict of dict with the needed information to display the stats. Example for the stat xxx: 'xxx': {'decoration': 'DEFAULT', 'optional': False, 'additional': False, 'splittable': False} """ ret = {} if type(self.get_raw()) is list and self.get_raw() is not None and self.get_key() is not None: # Stats are stored in a list of dict (ex: NETWORK, FS...) for i in self.get_raw(): ret[i[self.get_key()]] = {} for key in i.keys(): value = {'decoration': 'DEFAULT', 'optional': False, 'additional': False, 'splittable': False} ret[i[self.get_key()]][key] = value elif type(self.get_raw()) is dict and self.get_raw() is not None: # Stats are stored in a dict (ex: CPU, LOAD...) for key in self.get_raw().keys(): value = {'decoration': 'DEFAULT', 'optional': False, 'additional': False, 'splittable': False} ret[key] = value self.views = ret return self.views def set_views(self, input_views): """Set the views to input_views.""" self.views = input_views return self.views def get_views(self, item=None, key=None, option=None): """Return the views object. If key is None, return all the view for the current plugin else if option is None return the view for the specific key (all option) else return the view fo the specific key/option Specify item if the stats are stored in a dict of dict (ex: NETWORK, FS...)""" if item is None: item_views = self.views else: item_views = self.views[item] if key is None: return item_views else: if option is None: return item_views[key] else: return item_views[key][option] def load_limits(self, config): """Load the limits from the configuration file.""" if (hasattr(config, 'has_section') and config.has_section(self.plugin_name)): for s, v in config.items(self.plugin_name): # Read limits try: self.limits[ self.plugin_name + '_' + s] = config.get_option(self.plugin_name, s) except ValueError: self.limits[ self.plugin_name + '_' + s] = config.get_raw_option(self.plugin_name, s).split(",") logger.debug("Load limit: {0} = {1}".format(self.plugin_name + '_' + s, self.limits[self.plugin_name + '_' + s])) def set_limits(self, input_limits): """Set the limits to input_limits.""" self.limits = input_limits return self.limits def get_limits(self): """Return the limits object.""" return self.limits def get_alert(self, current=0, min=0, max=100, header="", log=False): """Return the alert status relative to a current value. Use this function for minor stats. If current < CAREFUL of max then alert = OK If current > CAREFUL of max then alert = CAREFUL If current > WARNING of max then alert = WARNING If current > CRITICAL of max then alert = CRITICAL If defined 'header' is added between the plugin name and the status. Only useful for stats with several alert status. If log=True than add log if necessary elif log=False than do not log elig log=None than apply the config given in the conf file """ # Compute the % try: value = (current * 100) / max except ZeroDivisionError: return 'DEFAULT' except TypeError: return 'DEFAULT' # Build the stat_name = plugin_name + header if header == "": stat_name = self.plugin_name else: stat_name = self.plugin_name + '_' + header # Manage limits ret = 'OK' try: if value > self.__get_limit('critical', stat_name=stat_name): ret = 'CRITICAL' elif value > self.__get_limit('warning', stat_name=stat_name): ret = 'WARNING' elif value > self.__get_limit('careful', stat_name=stat_name): ret = 'CAREFUL' elif current < min: ret = 'CAREFUL' except KeyError: return 'DEFAULT' # Manage log log_str = "" if self.__get_limit_log(stat_name=stat_name, default_action=log): # Add _LOG to the return string # So stats will be highlited with a specific color log_str = "_LOG" # Add the log to the list glances_logs.add(ret, stat_name.upper(), value, []) # Manage action # Here is a command line for the current trigger ? try: command = self.__get_limit_action(ret.lower(), stat_name=stat_name) except KeyError: # Reset the trigger self.actions.set(stat_name, ret.lower()) else: # A command line is available for the current alert, run it # Build the {{mustache}} dictionnary if type(self.stats) is list: # If the stats are stored in a list of dict (fs plugin for exemple) # Return the dict for the current header mustache_dict = {} for item in self.stats: if item[self.get_key()] == header: mustache_dict = item break else: # Use the stats dict mustache_dict = self.stats # Run the action self.actions.run( stat_name, ret.lower(), command, mustache_dict=mustache_dict) # Default is ok return ret + log_str def get_alert_log(self, current=0, min=0, max=100, header=""): """Get the alert log.""" return self.get_alert(current, min, max, header, log=True) def __get_limit(self, criticity, stat_name=""): """Return the limit value for the alert""" # Get the limit for stat + header # Exemple: network_wlan0_rx_careful try: limit = self.limits[stat_name + '_' + criticity] except KeyError: # Try fallback to plugin default limit # Exemple: network_careful limit = self.limits[self.plugin_name + '_' + criticity] # Return the limit return limit def __get_limit_action(self, criticity, stat_name=""): """Return the action for the alert""" # Get the action for stat + header # Exemple: network_wlan0_rx_careful_action try: ret = self.limits[stat_name + '_' + criticity + '_action'] except KeyError: # Try fallback to plugin default limit # Exemple: network_careful_action ret = self.limits[self.plugin_name + '_' + criticity + '_action'] # Return the action list return ret def __get_limit_log(self, stat_name, default_action=False): """Return the log tag for the alert""" # Get the log tag for stat + header # Exemple: network_wlan0_rx_log try: log_tag = self.limits[stat_name + '_log'] except KeyError: # Try fallback to plugin default log # Exemple: network_log try: log_tag = self.limits[self.plugin_name + '_log'] except KeyError: # By defaukt, log are disabled return default_action # Return the action list return log_tag[0].lower() == 'true' def get_conf_value(self, value, header="", plugin_name=None): """Return the configuration (header_) value for the current plugin (or the one given by the plugin_name var)""" if plugin_name is None: plugin_name = self.plugin_name if header == "": try: return self.limits[plugin_name + '_' + value] except KeyError: return [] else: try: return self.limits[plugin_name + '_' + header + '_' + value] except KeyError: return [] def is_hide(self, value, header=""): """Return True if the value is in the hide configuration list.""" return value in self.get_conf_value('hide', header=header) def has_alias(self, header): """Return the alias name for the relative header or None if nonexist""" try: return self.limits[self.plugin_name + '_' + header + '_' + 'alias'][0] except (KeyError, IndexError): return None def msg_curse(self, args=None, max_width=None): """Return default string to display in the curse interface.""" return [self.curse_add_line(str(self.stats))] def get_stats_display(self, args=None, max_width=None): """Return a dict with all the information needed to display the stat. key | description ---------------------------- display | Display the stat (True or False) msgdict | Message to display (list of dict [{ 'msg': msg, 'decoration': decoration } ... ]) align | Message position """ display_curse = False if hasattr(self, 'display_curse'): display_curse = self.display_curse if hasattr(self, 'align'): align_curse = self.align if max_width is not None: ret = {'display': display_curse, 'msgdict': self.msg_curse(args, max_width=max_width), 'align': align_curse} else: ret = {'display': display_curse, 'msgdict': self.msg_curse(args), 'align': align_curse} return ret def curse_add_line(self, msg, decoration="DEFAULT", optional=False, additional=False, splittable=False): """Return a dict with Where: msg: string decoration: DEFAULT: no decoration UNDERLINE: underline BOLD: bold TITLE: for stat title PROCESS: for process name STATUS: for process status NICE: for process niceness OK: Value is OK and non logged OK_LOG: Value is OK and logged CAREFUL: Value is CAREFUL and non logged CAREFUL_LOG: Value is CAREFUL and logged WARNING: Value is WARINING and non logged WARNING_LOG: Value is WARINING and logged CRITICAL: Value is CRITICAL and non logged CRITICAL_LOG: Value is CRITICAL and logged optional: True if the stat is optional (display only if space is available) additional: True if the stat is additional (display only if space is available after optional) spittable: Line can be splitted to fit on the screen (default is not) """ return {'msg': msg, 'decoration': decoration, 'optional': optional, 'additional': additional, 'splittable': splittable} def curse_new_line(self): """Go to a new line.""" return self.curse_add_line('\n') def set_align(self, align='left'): """Set the Curse align""" if align in ('left', 'right', 'bottom'): self.align = align else: self.align = 'left' def get_align(self): """Get the Curse align""" return self.align def auto_unit(self, number, low_precision=False): """Make a nice human-readable string out of number. Number of decimal places increases as quantity approaches 1. examples: CASE: 613421788 RESULT: 585M low_precision: 585M CASE: 5307033647 RESULT: 4.94G low_precision: 4.9G CASE: 44968414685 RESULT: 41.9G low_precision: 41.9G CASE: 838471403472 RESULT: 781G low_precision: 781G CASE: 9683209690677 RESULT: 8.81T low_precision: 8.8T CASE: 1073741824 RESULT: 1024M low_precision: 1024M CASE: 1181116006 RESULT: 1.10G low_precision: 1.1G 'low_precision=True' returns less decimal places potentially sacrificing precision for more readability. """ symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y') prefix = { 'Y': 1208925819614629174706176, 'Z': 1180591620717411303424, 'E': 1152921504606846976, 'P': 1125899906842624, 'T': 1099511627776, 'G': 1073741824, 'M': 1048576, 'K': 1024 } for symbol in reversed(symbols): value = float(number) / prefix[symbol] if value > 1: decimal_precision = 0 if value < 10: decimal_precision = 2 elif value < 100: decimal_precision = 1 if low_precision: if symbol in 'MK': decimal_precision = 0 else: decimal_precision = min(1, decimal_precision) elif symbol in 'K': decimal_precision = 0 return '{0:.{decimal}f}{symbol}'.format( value, decimal=decimal_precision, symbol=symbol) return '{0!s}'.format(number) def _log_result_decorator(fct): """Log (DEBUG) the result of the function fct""" def wrapper(*args, **kw): ret = fct(*args, **kw) if is_py3: logger.debug("%s %s %s return %s" % (args[0].__class__.__name__, args[ 0].__class__.__module__[len('glances_'):], fct.__name__, ret)) else: logger.debug("%s %s %s return %s" % (args[0].__class__.__name__, args[ 0].__class__.__module__[len('glances_'):], fct.func_name, ret)) return ret return wrapper # Mandatory to call the decorator in childs' classes _log_result_decorator = staticmethod(_log_result_decorator) glances-2.3/glances/plugins/glances_processcount.py000066400000000000000000000107401246314757600227050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Process count plugin.""" # Import Glances libs from glances.core.glances_processes import glances_processes from glances.plugins.glances_plugin import GlancesPlugin # Note: history items list is not compliant with process count # if a filter is applyed, the graph will show the filtered processes count class Plugin(GlancesPlugin): """Glances' processes plugin. stats is a list """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We want to display the stat in the curse interface self.display_curse = True # Note: 'glances_processes' is already init in the glances_processes.py script def reset(self): """Reset/init the stats.""" self.stats = {} def update(self): """Update processes stats using the input method.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib # Here, update is call for processcount AND processlist glances_processes.update() # Return the processes count self.stats = glances_processes.getcount() elif self.get_input() == 'snmp': # Update stats using SNMP # !!! TODO pass return self.stats def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if args.disable_process: msg = _("PROCESSES DISABLED (press 'z' to display)") ret.append(self.curse_add_line(msg)) return ret if self.stats == {}: return ret # Display the filter (if it exists) if glances_processes.get_process_filter() is not None: msg = _("Processes filter:") ret.append(self.curse_add_line(msg, "TITLE")) msg = _(" {0} ").format(glances_processes.get_process_filter()) ret.append(self.curse_add_line(msg, "FILTER")) msg = _("(press ENTER to edit)") ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) # Build the string message # Header msg = _("TASKS ") ret.append(self.curse_add_line(msg, "TITLE")) # Compute processes other = self.stats['total'] msg = str(self.stats['total']) ret.append(self.curse_add_line(msg)) if 'thread' in self.stats: msg = _(" ({0} thr),").format(self.stats['thread']) ret.append(self.curse_add_line(msg)) if 'running' in self.stats: other -= self.stats['running'] msg = _(" {0} run,").format(self.stats['running']) ret.append(self.curse_add_line(msg)) if 'sleeping' in self.stats: other -= self.stats['sleeping'] msg = _(" {0} slp,").format(self.stats['sleeping']) ret.append(self.curse_add_line(msg)) msg = _(" {0} oth ").format(other) ret.append(self.curse_add_line(msg)) # Display sort information if glances_processes.getmanualsortkey() is None: msg = _("sorted automatically") ret.append(self.curse_add_line(msg)) msg = _(" by {0}").format(glances_processes.getautosortkey()) ret.append(self.curse_add_line(msg)) else: msg = _("sorted by {0}").format(glances_processes.getmanualsortkey()) ret.append(self.curse_add_line(msg)) ret[-1]["msg"] += ", %s view" % ("tree" if glances_processes.is_tree_enabled() else "flat") # Return the message with decoration return ret glances-2.3/glances/plugins/glances_processlist.py000066400000000000000000000456631246314757600225440ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Process list plugin.""" # Import sys libs import operator import os from datetime import timedelta # Import Glances libs from glances.core.glances_globals import is_windows from glances.core.glances_processes import glances_processes from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Glances' processes plugin. stats is a list """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We want to display the stat in the curse interface self.display_curse = True # Note: 'glances_processes' is already init in the glances_processes.py script def get_key(self): """Return the key of the list""" return 'pid' def reset(self): """Reset/init the stats.""" self.stats = [] def update(self): """Update processes stats using the input method.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib # Note: Update is done in the processcount plugin # Just return the processes list if glances_processes.is_tree_enabled(): self.stats = glances_processes.gettree() else: self.stats = glances_processes.getlist() elif self.get_input() == 'snmp': # No SNMP grab for processes pass return self.stats def get_process_tree_curses_data(self, node, args, first_level=True, max_node_count=None): """ Get curses data to display for a process tree. """ ret = [] node_count = 0 if (not node.is_root) and ((max_node_count is None) or (max_node_count > 0)): node_data = self.get_process_curses_data(node.stats, False, args) node_count += 1 ret.extend(node_data) for child in node.iter_children(): # stop if we have enough nodes to display if (max_node_count is not None) and (node_count >= max_node_count): break if max_node_count is None: children_max_node_count = None else: children_max_node_count = max_node_count - node_count child_data = self.get_process_tree_curses_data(child, args, first_level=node.is_root, max_node_count=children_max_node_count) if max_node_count is None: node_count += len(child) else: node_count += min(children_max_node_count, len(child)) if not node.is_root: child_data = self.add_tree_decoration(child_data, child is node.children[-1], first_level) ret.extend(child_data) return ret def add_tree_decoration(self, child_data, is_last_child, first_level): """ Add tree curses decoration and indentation to a subtree. """ # find process command indices in messages pos = [] for i, m in enumerate(child_data): if (m["msg"] == "\n") and (m is not child_data[-1]): # new line pos + 12 # TODO find a way to get rid of hardcoded 12 value pos.append(i + 12) # add new curses items for tree decoration new_child_data = [] new_pos = [] for i, m in enumerate(child_data): if i in pos: new_pos.append(len(new_child_data)) new_child_data.append(self.curse_add_line("")) new_child_data.append(m) child_data = new_child_data pos = new_pos # draw node prefix if is_last_child: prefix = "└─" else: prefix = "├─" child_data[pos[0]]["msg"] = prefix # add indentation for i in pos: spacing = 2 if first_level: spacing = 1 elif is_last_child and (i is not pos[0]): # compensate indentation for missing '│' char spacing = 3 child_data[i]["msg"] = "%s%s" % (" " * spacing, child_data[i]["msg"]) if not is_last_child: # add '│' tree decoration for i in pos[1:]: old_str = child_data[i]["msg"] if first_level: child_data[i]["msg"] = " │" + old_str[2:] else: child_data[i]["msg"] = old_str[:2] + "│" + old_str[3:] return child_data def get_process_curses_data(self, p, first, args): """ Get curses data to display for a process. """ ret = [] ret.append(self.curse_new_line()) # CPU if 'cpu_percent' in p and p['cpu_percent'] is not None and p['cpu_percent'] != '': msg = '{0:>6.1f}'.format(p['cpu_percent']) ret.append(self.curse_add_line(msg, self.get_alert(p['cpu_percent'], header="cpu"))) else: msg = '{0:>6}'.format('?') ret.append(self.curse_add_line(msg)) # MEM if 'memory_percent' in p and p['memory_percent'] is not None and p['memory_percent'] != '': msg = '{0:>6.1f}'.format(p['memory_percent']) ret.append(self.curse_add_line(msg, self.get_alert(p['memory_percent'], header="mem"))) else: msg = '{0:>6}'.format('?') ret.append(self.curse_add_line(msg)) # VMS/RSS if 'memory_info' in p and p['memory_info'] is not None and p['memory_info'] != '': # VMS msg = '{0:>6}'.format(self.auto_unit(p['memory_info'][1], low_precision=False)) ret.append(self.curse_add_line(msg, optional=True)) # RSS msg = '{0:>6}'.format(self.auto_unit(p['memory_info'][0], low_precision=False)) ret.append(self.curse_add_line(msg, optional=True)) else: msg = '{0:>6}'.format('?') ret.append(self.curse_add_line(msg)) ret.append(self.curse_add_line(msg)) # PID msg = '{0:>6}'.format(p['pid']) ret.append(self.curse_add_line(msg)) # USER if 'username' in p: # docker internal users are displayed as ints only, therefore str() msg = ' {0:9}'.format(str(p['username'])[:9]) ret.append(self.curse_add_line(msg)) else: msg = ' {0:9}'.format('?') ret.append(self.curse_add_line(msg)) # NICE if 'nice' in p: nice = p['nice'] if nice is None: nice = '?' msg = '{0:>5}'.format(nice) if isinstance(nice, int) and ((is_windows and nice != 32) or (not is_windows and nice != 0)): ret.append(self.curse_add_line(msg, decoration='NICE')) else: ret.append(self.curse_add_line(msg)) else: msg = '{0:>5}'.format('?') ret.append(self.curse_add_line(msg)) # STATUS if 'status' in p: status = p['status'] msg = '{0:>2}'.format(status) if status == 'R': ret.append(self.curse_add_line(msg, decoration='STATUS')) else: ret.append(self.curse_add_line(msg)) else: msg = '{0:>2}'.format('?') ret.append(self.curse_add_line(msg)) # TIME+ if self.tag_proc_time: try: dtime = timedelta(seconds=sum(p['cpu_times'])) except Exception: # Catched on some Amazon EC2 server # See https://github.com/nicolargo/glances/issues/87 self.tag_proc_time = False else: msg = '{0}:{1}.{2}'.format(str(dtime.seconds // 60 % 60), str(dtime.seconds % 60).zfill(2), str(dtime.microseconds)[:2].zfill(2)) else: msg = ' ' msg = '{0:>9}'.format(msg) ret.append(self.curse_add_line(msg, optional=True)) # IO read/write if 'io_counters' in p: # IO read io_rs = int((p['io_counters'][0] - p['io_counters'][2]) / p['time_since_update']) if io_rs == 0: msg = '{0:>6}'.format("0") else: msg = '{0:>6}'.format(self.auto_unit(io_rs, low_precision=True)) ret.append(self.curse_add_line(msg, optional=True, additional=True)) # IO write io_ws = int((p['io_counters'][1] - p['io_counters'][3]) / p['time_since_update']) if io_ws == 0: msg = '{0:>6}'.format("0") else: msg = '{0:>6}'.format(self.auto_unit(io_ws, low_precision=True)) ret.append(self.curse_add_line(msg, optional=True, additional=True)) else: msg = '{0:>6}'.format("?") ret.append(self.curse_add_line(msg, optional=True, additional=True)) ret.append(self.curse_add_line(msg, optional=True, additional=True)) # Command line # If no command line for the process is available, fallback to # the bare process name instead cmdline = p['cmdline'] if cmdline == "" or args.process_short_name: msg = ' {0}'.format(p['name']) ret.append(self.curse_add_line(msg, splittable=True)) else: try: cmd = cmdline.split()[0] argument = ' '.join(cmdline.split()[1:]) path, basename = os.path.split(cmd) if os.path.isdir(path): msg = ' {0}'.format(path) + os.sep ret.append(self.curse_add_line(msg, splittable=True)) ret.append(self.curse_add_line(basename, decoration='PROCESS', splittable=True)) else: msg = ' {0}'.format(basename) ret.append(self.curse_add_line(msg, decoration='PROCESS', splittable=True)) msg = " {0}".format(argument) ret.append(self.curse_add_line(msg, splittable=True)) except UnicodeEncodeError: ret.append(self.curse_add_line("", splittable=True)) # Add extended stats but only for the top processes # !!! CPU consumption ??? # TODO: extended stats into the web interface if first and 'extended_stats' in p: # Left padding xpad = ' ' * 13 # First line is CPU affinity if 'cpu_affinity' in p and p['cpu_affinity'] is not None: ret.append(self.curse_new_line()) msg = xpad + _('CPU affinity: ') + str(len(p['cpu_affinity'])) + _(' cores') ret.append(self.curse_add_line(msg, splittable=True)) # Second line is memory info if 'memory_info_ex' in p and p['memory_info_ex'] is not None: ret.append(self.curse_new_line()) msg = xpad + _('Memory info: ') for k, v in p['memory_info_ex']._asdict().items(): # Ignore rss and vms (already displayed) if k not in ['rss', 'vms'] and v is not None: msg += k + ' ' + self.auto_unit(v, low_precision=False) + ' ' if 'memory_swap' in p and p['memory_swap'] is not None: msg += _('swap ') + self.auto_unit(p['memory_swap'], low_precision=False) ret.append(self.curse_add_line(msg, splittable=True)) # Third line is for open files/network sessions msg = '' if 'num_threads' in p and p['num_threads'] is not None: msg += _('threads ') + str(p['num_threads']) + ' ' if 'num_fds' in p and p['num_fds'] is not None: msg += _('files ') + str(p['num_fds']) + ' ' if 'num_handles' in p and p['num_handles'] is not None: msg += _('handles ') + str(p['num_handles']) + ' ' if 'tcp' in p and p['tcp'] is not None: msg += _('TCP ') + str(p['tcp']) + ' ' if 'udp' in p and p['udp'] is not None: msg += _('UDP ') + str(p['udp']) + ' ' if msg != '': ret.append(self.curse_new_line()) msg = xpad + _('Open: ') + msg ret.append(self.curse_add_line(msg, splittable=True)) # Fouth line is IO nice level (only Linux and Windows OS) if 'ionice' in p and p['ionice'] is not None: ret.append(self.curse_new_line()) msg = xpad + _('IO nice: ') k = _('Class is ') v = p['ionice'].ioclass # Linux: The scheduling class. 0 for none, 1 for real time, 2 for best-effort, 3 for idle. # Windows: On Windows only ioclass is used and it can be set to 2 (normal), 1 (low) or 0 (very low). if is_windows: if v == 0: msg += k + 'Very Low' elif v == 1: msg += k + 'Low' elif v == 2: msg += _('No specific I/O priority') else: msg += k + str(v) else: if v == 0: msg += _('No specific I/O priority') elif v == 1: msg += k + 'Real Time' elif v == 2: msg += k + 'Best Effort' elif v == 3: msg += k + 'IDLE' else: msg += k + str(v) # value is a number which goes from 0 to 7. # The higher the value, the lower the I/O priority of the process. if hasattr(p['ionice'], 'value') and p['ionice'].value != 0: msg += _(' (value %s/7)') % str(p['ionice'].value) ret.append(self.curse_add_line(msg, splittable=True)) return ret def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_process: return ret # Compute the sort key process_sort_key = glances_processes.getsortkey() sort_style = 'SORT' # Header msg = '{0:>6}'.format(_("CPU%")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_percent' else 'DEFAULT')) msg = '{0:>6}'.format(_("MEM%")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'memory_percent' else 'DEFAULT')) msg = '{0:>6}'.format(_("VIRT")) ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format(_("RES")) ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format(_("PID")) ret.append(self.curse_add_line(msg)) msg = ' {0:10}'.format(_("USER")) ret.append(self.curse_add_line(msg)) msg = '{0:>4}'.format(_("NI")) ret.append(self.curse_add_line(msg)) msg = '{0:>2}'.format(_("S")) ret.append(self.curse_add_line(msg)) msg = '{0:>9}'.format(_("TIME+")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_times' else 'DEFAULT', optional=True)) msg = '{0:>6}'.format(_("IOR/s")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = '{0:>6}'.format(_("IOW/s")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = ' {0:8}'.format(_("Command")) ret.append(self.curse_add_line(msg)) # Trying to display proc time self.tag_proc_time = True if glances_processes.is_tree_enabled(): ret.extend(self.get_process_tree_curses_data(self.sortstats(process_sort_key), args, first_level=True, max_node_count=glances_processes.get_max_processes())) else: # Loop over processes (sorted by the sort key previously compute) first = True for p in self.sortstats(process_sort_key): ret.extend(self.get_process_curses_data(p, first, args)) # End of extended stats first = False # Return the message with decoration return ret def sortstats(self, sortedby=None): """Return the stats sorted by sortedby variable.""" if sortedby is None: # No need to sort... return self.stats sortedreverse = True if sortedby == 'name': sortedreverse = False tree = glances_processes.is_tree_enabled() if sortedby == 'io_counters' and not tree: # Specific case for io_counters # Sum of io_r + io_w try: # Sort process by IO rate (sum IO read + IO write) self.stats.sort(key=lambda process: process[sortedby][0] - process[sortedby][2] + process[sortedby][1] - process[sortedby][3], reverse=sortedreverse) except Exception: self.stats.sort(key=operator.itemgetter('cpu_percent'), reverse=sortedreverse) else: # Others sorts if tree: self.stats.set_sorting(sortedby, sortedreverse) else: try: self.stats.sort(key=operator.itemgetter(sortedby), reverse=sortedreverse) except (KeyError, TypeError): self.stats.sort(key=operator.itemgetter('name'), reverse=False) return self.stats glances-2.3/glances/plugins/glances_psutilversion.py000066400000000000000000000031721246314757600231050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . from psutil import __version__ as __psutil_version from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Get the psutil version for client/server purposes. stats is a tuple """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) self.reset() def reset(self): """Reset/init the stats.""" self.stats = None def update(self): """Update the stats.""" # Reset stats self.reset() # Return PsUtil version as a tuple if self.get_input() == 'local': # PsUtil version only available in local try: self.stats = tuple([int(num) for num in __psutil_version.split('.')]) except NameError: pass else: pass return self.stats glances-2.3/glances/plugins/glances_raid.py000066400000000000000000000131561246314757600211010ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """RAID plugin.""" # Import Glances libs from glances.core.glances_logging import logger from glances.plugins.glances_plugin import GlancesPlugin # pymdstat only available on GNU/Linux OS try: from pymdstat import MdStat except ImportError: logger.debug("pymdstat library not found. Glances cannot grab RAID info.") pass class Plugin(GlancesPlugin): """Glances' RAID plugin. stats is a dict (see pymdstat documentation) """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We want to display the stat in the curse interface self.display_curse = True # Init the stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = {} @GlancesPlugin._log_result_decorator def update(self): """Update RAID stats using the input method.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the PyMDstat lib (https://github.com/nicolargo/pymdstat) try: mds = MdStat() self.stats = mds.get_stats()['arrays'] except Exception as e: logger.debug("Can not grab RAID stats (%s)" % e) return self.stats elif self.get_input() == 'snmp': # Update stats using SNMP # No standard way for the moment... pass # Update the view self.update_views() return self.stats def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_raid: return ret # Build the string message # Header msg = '{0:11}'.format(_('RAID disks')) ret.append(self.curse_add_line(msg, "TITLE")) msg = '{0:>6}'.format(_("Used")) ret.append(self.curse_add_line(msg)) msg = '{0:>6}'.format(_("Avail")) ret.append(self.curse_add_line(msg)) # Data arrays = self.stats.keys() arrays.sort() for array in arrays: # New line ret.append(self.curse_new_line()) # Display the current status status = self.raid_alert(self.stats[array]['status'], self.stats[array]['used'], self.stats[array]['available']) # Data: RAID type name | disk used | disk available array_type = self.stats[array]['type'].upper() if self.stats[array]['type'] is not None else _('UNKNOWN') msg = '{0:<5}{1:>6}'.format(array_type, array) ret.append(self.curse_add_line(msg)) if self.stats[array]['status'] == 'active': msg = '{0:>6}'.format(self.stats[array]['used']) ret.append(self.curse_add_line(msg, status)) msg = '{0:>6}'.format(self.stats[array]['available']) ret.append(self.curse_add_line(msg, status)) elif self.stats[array]['status'] == 'inactive': ret.append(self.curse_new_line()) msg = '└─ Status {}'.format(self.stats[array]['status']) ret.append(self.curse_add_line(msg, status)) components = self.stats[array]['components'].keys() components.sort() for i, component in enumerate(components): if i == len(components) - 1: tree_char = '└─' else: tree_char = '├─' ret.append(self.curse_new_line()) msg = ' {0} disk {1}: '.format(tree_char, self.stats[array]['components'][component]) ret.append(self.curse_add_line(msg)) msg = '{0}'.format(component) ret.append(self.curse_add_line(msg)) if self.stats[array]['used'] < self.stats[array]['available']: # Display current array configuration ret.append(self.curse_new_line()) msg = '└─ Degraded mode' ret.append(self.curse_add_line(msg, status)) if len(self.stats[array]['config']) < 17: ret.append(self.curse_new_line()) msg = ' └─ {0}'.format(self.stats[array]['config'].replace('_', 'A')) ret.append(self.curse_add_line(msg)) return ret def raid_alert(self, status, used, available): """ [available/used] means that ideally the array would have _available_ devices however, _used_ devices are in use. Obviously when used >= available then things are good. """ if status == 'inactive': return 'CRITICAL' if used < available: return 'WARNING' return 'OK' glances-2.3/glances/plugins/glances_sensors.py000066400000000000000000000165041246314757600216560ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Sensors plugin.""" # Sensors library (optional; Linux-only) # Py3Sensors: https://bitbucket.org/gleb_zhulik/py3sensors try: import sensors except ImportError: pass # Import Glances lib from glances.core.glances_globals import is_py3 from glances.core.glances_logging import logger from glances.plugins.glances_batpercent import Plugin as BatPercentPlugin from glances.plugins.glances_hddtemp import Plugin as HddTempPlugin from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): """Glances' sensors plugin. The stats list includes both sensors and hard disks stats, if any. The sensors are already grouped by chip type and then sorted by name. The hard disks are already sorted by name. """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # Init the sensor class self.glancesgrabsensors = GlancesGrabSensors() # Instance for the HDDTemp Plugin in order to display the hard disks # temperatures self.hddtemp_plugin = HddTempPlugin(args=args) # Instance for the BatPercent in order to display the batteries # capacities self.batpercent_plugin = BatPercentPlugin(args=args) # We want to display the stat in the curse interface self.display_curse = True # Init the stats self.reset() def get_key(self): """Return the key of the list""" return 'label' def reset(self): """Reset/init the stats.""" self.stats = [] @GlancesPlugin._log_result_decorator def update(self): """Update sensors stats using the input method.""" # Reset the stats self.reset() if self.get_input() == 'local': # Update stats using the dedicated lib try: self.stats = self.__set_type(self.glancesgrabsensors.get(), 'temperature_core') except Exception as e: logger.error("Cannot grab sensors temperatures (%s)" % e) # Update HDDtemp stats try: hddtemp = self.__set_type(self.hddtemp_plugin.update(), 'temperature_hdd') except Exception as e: logger.error("Cannot grab HDD temperature (%s)" % e) else: # Append HDD temperature self.stats.extend(hddtemp) # Update batteries stats try: batpercent = self.__set_type(self.batpercent_plugin.update(), 'battery') except Exception as e: logger.error("Cannot grab battery percent (%s)" % e) else: # Append Batteries % self.stats.extend(batpercent) elif self.get_input() == 'snmp': # Update stats using SNMP # No standard: # http://www.net-snmp.org/wiki/index.php/Net-SNMP_and_lm-sensors_on_Ubuntu_10.04 pass # Update the view self.update_views() return self.stats def __set_type(self, stats, sensor_type): """Set the plugin type. 3 types of stats is possible in the sensors plugin: - Core temperature - HDD temperature - Battery capacity """ for i in stats: i.update({'type': sensor_type}) return stats def update_views(self): """Update stats views""" # Call the father's method GlancesPlugin.update_views(self) # Add specifics informations # Alert for i in self.stats: if i['value'] == []: continue if i['type'] == 'battery': self.views[i[self.get_key()]]['value']['decoration'] = self.get_alert(100 - i['value'], header=i['type']) else: self.views[i[self.get_key()]]['value']['decoration'] = self.get_alert(i['value'], header=i['type']) def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_sensors: return ret # Build the string message # Header msg = '{0:18}'.format(_("SENSORS")) ret.append(self.curse_add_line(msg, "TITLE")) if is_py3: msg = '{0:>5}'.format(_("°C")) else: msg = '{0:>6}'.format(_("°C")) ret.append(self.curse_add_line(msg)) for i in self.stats: if i['value'] is not None and i['value'] != []: # New line ret.append(self.curse_new_line()) # Alias for the lable name ? label = self.has_alias(i['label'].lower()) if label is None: label = i['label'] label = label[:18] msg = '{0:18}'.format(label) ret.append(self.curse_add_line(msg)) msg = '{0:>5}'.format(i['value']) ret.append(self.curse_add_line( msg, self.get_views(item=i[self.get_key()], key='value', option='decoration'))) return ret class GlancesGrabSensors(object): """Get sensors stats using the py3sensors library.""" def __init__(self): """Init sensors stats.""" try: sensors.init() except Exception: self.initok = False else: self.initok = True # Init the stats self.reset() def reset(self): """Reset/init the stats.""" self.sensors_list = [] def __update__(self): """Update the stats.""" # Reset the list self.reset() # grab only temperature stats if self.initok: for chip in sensors.iter_detected_chips(): for feature in chip: sensors_current = {} if feature.name.startswith(b'temp'): sensors_current['label'] = feature.label sensors_current['value'] = int(feature.get_value()) self.sensors_list.append(sensors_current) return self.sensors_list def get(self): """Get sensors list.""" self.__update__() return self.sensors_list def quit(self): """End of connection.""" if self.initok: sensors.cleanup() glances-2.3/glances/plugins/glances_system.py000066400000000000000000000176021246314757600215060ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """System plugin.""" # Import system libs import os import platform import re # Import Glances libs from glances.plugins.glances_plugin import GlancesPlugin # SNMP OID snmp_oid = {'default': {'hostname': '1.3.6.1.2.1.1.5.0', 'system_name': '1.3.6.1.2.1.1.1.0'}, 'netapp': {'hostname': '1.3.6.1.2.1.1.5.0', 'system_name': '1.3.6.1.2.1.1.1.0', 'platform': '1.3.6.1.4.1.789.1.1.5.0'}} # SNMP to human read # Dict (key: OS short name) of dict (reg exp OID to human) # Windows: # http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v=vs.85%29.aspx snmp_to_human = {'windows': {'Windows Version 6.3': 'Windows 8.1 or Server 2012R2', 'Windows Version 6.2': 'Windows 8 or Server 2012', 'Windows Version 6.1': 'Windows 7 or Server 2008R2', 'Windows Version 6.0': 'Windows Vista or Server 2008', 'Windows Version 5.2': 'Windows XP 64bits or 2003 server', 'Windows Version 5.1': 'Windows XP', 'Windows Version 5.0': 'Windows 2000'}} class Plugin(GlancesPlugin): """Glances' host/system plugin. stats is a dict """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We want to display the stat in the curse interface self.display_curse = True # Init the stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = {} def _linux_os_release(self): """This function tries to determine the name of a Linux distribution. It checks for the /etc/os-release file. It takes the name from the 'NAME' field and the version from 'VERSION_ID'. An empty string is returned if the above values cannot be determined. """ pretty_name = '' ashtray = {} keys = ['NAME', 'VERSION_ID'] try: with open(os.path.join('/etc', 'os-release')) as f: for line in f: for key in keys: if line.startswith(key): ashtray[key] = line.strip().split('=')[1][1:-1] except (OSError, IOError): return pretty_name if ashtray: if 'NAME' in ashtray: pretty_name = ashtray['NAME'] if 'VERSION_ID' in ashtray: pretty_name += ' {0}'.format(ashtray['VERSION_ID']) return pretty_name def update(self): """Update the host/system info using the input method. Return the stats (dict) """ # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib self.stats['os_name'] = platform.system() self.stats['hostname'] = platform.node() self.stats['platform'] = platform.architecture()[0] if self.stats['os_name'] == "Linux": linux_distro = platform.linux_distribution() if linux_distro[0] == '': self.stats['linux_distro'] = self._linux_os_release() else: self.stats['linux_distro'] = ' '.join(linux_distro[:2]) self.stats['os_version'] = platform.release() elif self.stats['os_name'] == "FreeBSD": self.stats['os_version'] = platform.release() elif self.stats['os_name'] == "Darwin": self.stats['os_version'] = platform.mac_ver()[0] elif self.stats['os_name'] == "Windows": os_version = platform.win32_ver() self.stats['os_version'] = ' '.join(os_version[::2]) # if the python version is 32 bit perhaps the windows operating # system is 64bit if self.stats['platform'] == '32bit': if 'PROCESSOR_ARCHITEW6432' in os.environ: self.stats['platform'] = '64bit' else: self.stats['os_version'] = "" # Add human readable name if self.stats['os_name'] == "Linux": self.stats['hr_name'] = self.stats['linux_distro'] else: self.stats['hr_name'] = '{0} {1}'.format( self.stats['os_name'], self.stats['os_version']) self.stats['hr_name'] += ' ({0})'.format(self.stats['platform']) elif self.get_input() == 'snmp': # Update stats using SNMP try: self.stats = self.set_stats_snmp( snmp_oid=snmp_oid[self.get_short_system_name()]) except KeyError: self.stats = self.set_stats_snmp(snmp_oid=snmp_oid['default']) # Default behavor: display all the information self.stats['os_name'] = self.stats['system_name'] # Windows OS tips if self.get_short_system_name() == 'windows': try: iteritems = snmp_to_human['windows'].iteritems() except AttributeError: iteritems = snmp_to_human['windows'].items() for r, v in iteritems: if re.search(r, self.stats['system_name']): self.stats['os_name'] = v break # Add human readable name self.stats['hr_name'] = self.stats['os_name'] return self.stats def msg_curse(self, args=None): """Return the string to display in the curse interface.""" # Init the return message ret = [] # Build the string message if args.client: # Client mode if args.cs_status.lower() == "connected": msg = _("Connected to ") ret.append(self.curse_add_line(msg, 'OK')) elif args.cs_status.lower() == "snmp": msg = _("SNMP from ") ret.append(self.curse_add_line(msg, 'OK')) elif args.cs_status.lower() == "disconnected": msg = _("Disconnected from ") ret.append(self.curse_add_line(msg, 'CRITICAL')) # Hostname is mandatory msg = self.stats['hostname'] ret.append(self.curse_add_line(msg, "TITLE")) # System info if self.stats['os_name'] == "Linux" and self.stats['linux_distro']: msg = ' ({0} {1} / {2} {3})'.format(self.stats['linux_distro'], self.stats['platform'], self.stats['os_name'], self.stats['os_version']) else: try: msg = ' ({0} {1} {2})'.format(self.stats['os_name'], self.stats['os_version'], self.stats['platform']) except Exception: msg = ' ({0})'.format(self.stats['os_name']) ret.append(self.curse_add_line(msg, optional=True)) # Return the message with decoration return ret glances-2.3/glances/plugins/glances_uptime.py000066400000000000000000000052001246314757600214540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # This file is part of Glances. # # Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Uptime plugin.""" # Import system libs from datetime import datetime, timedelta # Import psutil import psutil # Import Glances libs from glances.plugins.glances_plugin import GlancesPlugin # SNMP OID snmp_oid = {'_uptime': '1.3.6.1.2.1.1.3.0'} class Plugin(GlancesPlugin): """Glances' uptime plugin. stats is date (string) """ def __init__(self, args=None): """Init the plugin.""" GlancesPlugin.__init__(self, args=args) # We want to display the stat in the curse interface self.display_curse = True # Set the message position self.set_align('right') # Init the stats self.reset() def reset(self): """Reset/init the stats.""" self.stats = {} def update(self): """Update uptime stat using the input method.""" # Reset stats self.reset() if self.get_input() == 'local': # Update stats using the standard system lib uptime = datetime.now() - \ datetime.fromtimestamp(psutil.boot_time()) # Convert uptime to string (because datetime is not JSONifi) self.stats = str(uptime).split('.')[0] elif self.get_input() == 'snmp': # Update stats using SNMP uptime = self.set_stats_snmp(snmp_oid=snmp_oid)['_uptime'] try: # In hundredths of seconds self.stats = str(timedelta(seconds=int(uptime) / 100)) except Exception: pass # Return the result return self.stats def msg_curse(self, args=None): """Return the string to display in the curse interface.""" # Init the return message ret = [] # Add the line with decoration ret.append(self.curse_add_line(_("Uptime: {0}").format(self.stats))) # Return the message with decoration return ret glances-2.3/i18n-gen.sh000077500000000000000000000063741246314757600147100ustar00rootroot00000000000000#!/bin/bash #Calculates the direcory of the script in case it is run from another directory ROOT="${0%%i18n-gen.sh}" function usage() { cat < language_code Available subcommands: init creates a new folder for a new language update updates an existing language file with new Strings from the sources gen generates the parsed language file update and gen also accept the wildcard language_code ALL Suggested Workflows (with XX as language_code): New Language 1. $0 init XX 2. translation of ${ROOT}i18n/XX/LC_MESSAGES/glances.po 3. $0 gen XX Update Language 1. $0 update XX 2. update translations of ${ROOT}i18n/XX/LC_MESSAGES/glances.po 3. $0 gen XX EOT exit } function gen_pot() { xgettext --language=Python --keyword=_ --output=${ROOT}i18n/glances.pot `find ${ROOT}glances/ -name "*.py"` } if [ $# != 2 ]; then usage fi OPERATION="$1" shift case "$OPERATION" in init) # If there is already a language file for specified language there is no need to generate a new one # doing so would result in a loss of all already translated strings for that language if [ -f "${ROOT}i18n/$1/LC_MESSAGES/glances.po" ]; then echo "Error:" echo "Language file for language $1 already exists" echo "Please run \"$0 help\" for more information" exit 1 fi # Actual generation mkdir -p ${ROOT}i18n/$1/LC_MESSAGES/ gen_pot msginit --locale="$1" --input=${ROOT}i18n/glances.pot --output=${ROOT}i18n/$1/LC_MESSAGES/glances.po exit 0 ;; update) # When the language code is ALL fetch all language codes and save them # else test if the specified language code really exists if [ "$1" = "ALL" ]; then LANG_LIST="$(ls -d ${ROOT}i18n/*/ | awk -F / '{print $(NF-1)}')" else if [ ! -f "${ROOT}i18n/$1/LC_MESSAGES/glances.po" ]; then echo "Error:" echo "Language file for language $1 doesn't exists" echo "Please run \"$0 help\" for more information" exit 1 fi LANG_LIST="$1" fi # regenerate the pot file so that it conatins the new strings and then update the language files accordingly gen_pot for i in $LANG_LIST; do msgmerge --update --no-fuzzy-matching --backup=off ${ROOT}i18n/$i/LC_MESSAGES/glances.po ${ROOT}i18n/glances.pot echo "Language file for language $i updated" done exit 0 ;; gen) # When the language code is ALL fetch all language codes and save them # else test if the specified language code really exists if [ "$1" = "ALL" ]; then LANG_LIST="$(ls -d ${ROOT}i18n/*/ | awk -F / '{print $(NF-1)}')" else if [ ! -f "${ROOT}i18n/$1/LC_MESSAGES/glances.po" ]; then echo "Error:" echo "Language file for language $1 doesn't exists" echo "Please run \"$0 help\" for more information" exit 1 fi LANG_LIST="$1" fi # compile the language files for i in $LANG_LIST; do msgfmt ${ROOT}i18n/$i/LC_MESSAGES/glances.po --output-file ${ROOT}i18n/$i/LC_MESSAGES/glances.mo echo "Compiled language file for language $i generated" done exit 0 ;; *) # if anything other is entered as first argument print the usage overview # so, the message to run "i18n-gen.sh help" is a LIE but who cares since the cake was a lie in the first place! usage ;; esac glances-2.3/i18n/000077500000000000000000000000001246314757600135705ustar00rootroot00000000000000glances-2.3/i18n/de/000077500000000000000000000000001246314757600141605ustar00rootroot00000000000000glances-2.3/i18n/de/LC_MESSAGES/000077500000000000000000000000001246314757600157455ustar00rootroot00000000000000glances-2.3/i18n/de/LC_MESSAGES/glances.mo000066400000000000000000000242311246314757600177200ustar00rootroot00000000000000  ; "E Ch ( , , I/ y  0  <79t9!"D(_     "'0G[ ky*  ! #BfBn'-%%-%S%y12HM*l.0+#< Zg '  %- BMTg| 9Ql& +DIe7   "$&(*, ALNPVXZ\^vC$RJw'.,UF:3ODoC#E;!   .07?!Fhq u   *)"Tw#0@ ?C : 2 2 2$!2W!@!>!D ""O";r"K">"/9#i#2#### #$$*:$e$ j$x$ }$$$ $$$$+$%!%#*%%N%!t%%"%%%' &4&S& p&&&&&-&''8'?']'{''H'''''' '((( ( ((('()(+(-(/(1(3(H(W(Y([(c(e(g(i(k(((+rUy0sxd|hg-G>JMP<`tZBL]()z ,;%[}b3p{.@O !5q8uwva^4~cFA$X7NoT\Y:*jWQ1'9 Cme HD?RIEf _n&kilK 62V#"S=/ --password Define a client/server password from the prompt -1 Start Glances in per CPU mode -B @IP|HOST Bind server to the given IPv4/IPv6 address or hostname -C FILE Path to the configuration file -P PASSWORD Define a client/server password -b Display network rate in Byte per second -c @IP|HOST Connect to a Glances server by IPv4/IPv6 address or hostname -d Disable disk I/O module -e Enable sensors module -f FILE Set the HTML output folder or CSV file -h Display the help and exit -m Disable mount module -n Disable network module -o OUTPUT Define additional output (available: HTML or CSV) -p PORT Define the client/server TCP port (default: %d) -r Disable process list -s Run Glances in server mode -t SECONDS Set refresh time in seconds (default: %d sec) -v Display the version and exit -y Enable hddtemp module -z Do not use the bold color attribute Options: (lasts (one entry) entries) with PsUtil %Y-%m-%d %H:%M:%S11 min:15 min:5 min:Bytes or bits for network I/OCAREFULCPUCPU process %CPU%CRITICALCannot execute commandCannot grab data...Compute data...Connected to Couldn't create socket: %sCouldn't open socket: %sDefine the password for the Glances serverDelete warning and critical logsDelete warning logsDisconnected from Enter the Glances server passwordError decoding config file '%s': %sError: Error: CSV export (-o csv) need output file definition (-f )Error: Cannot init the curses library. Error: Cannot use both -P and --password flagError: Cannot use both -c and -C flagError: Cannot use both -c and -o flagError: Cannot use both -s and -c flagError: Cannot use both -s and -o flagError: Connection to server failed. Bad password.Error: Connection to server failed. Unknown error.Error: HTML export (-o html) need output folder definition (-f )Error: Invalid port number: %sError: Need CSV library to export into CSVError: Need Jinja2 library to export into HTMLError: Refresh time should be a positive integerError: The server version is not compatibleError: Unknown output %sError: creating client socketFilesystem %Glances server is running onGlances version Glances {0}Glances {0} with PsUtil {1}Global CPU or per-CPU statsLimits are set based on the server onesLoadMEM process %NAMENOT RUNNINGNetworkPassword (confirm): Password: PerCPUPress 'h' for helpProcesses (disabled)Quit (Esc and Ctrl-C also work)RUNNINGSensorsShow/hide disk I/O statsShow/hide file system statsShow/hide hddtemp statsShow/hide logsShow/hide network statsShow/hide processes listShow/hide sensors statsShow/hide this help screenSort processes automaticallySort processes by CPU%Sort processes by I/O rateSort processes by MEM%Sort processes by nameTIME+Temp °CTry 'glances -h' for more information.Uptime: {0}Usage: glances [options]UsedView cumulative network I/OView network I/O as combinationWARNINGWARNING|CRITICAL logs[Warning] Passwords did not match, please try again... aactive:bbuffers:ccached:dffree:hhddtemp erroriinactive:lmnpqssorted automaticallysorted by tuused:wxyz{0} ({1} {2} / {3} {4}){0} ({1} {2} {3})°CProject-Id-Version: GLANCES 1.7.6 Report-Msgid-Bugs-To: POT-Creation-Date: 2014-03-27 18:39+0100 PO-Revision-Date: 2014-03-27 19:07+0100 Last-Translator: David Tiersch Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 1.6.4 --password Setze ein Client-/Server-Passwort auf der Kommandozeile -1 Starte Glances im Pro-CPU-Modus -B @IP|HOST Binde Server an die gegebene IPv4/IPv6 Adresse oder Hostnamen -C FILE Pfad zur Konfigurations-Datei -P PASSWORD Setze ein Client-/Server-Passwort -b Zeige Netzwerk-Rate in Byte pro Sekunde -c @IP|HOST Verbinde zu einem Glances Server mit by IPv4/IPv6 Adresse oder Hostnamen -d Deaktiviere Disk I/O-Modul -e Aktiviere Sensor-Modul -f FILE Setze den HTML-Ausgabe-Ordner oder die CSV-Datei -h Zeige die Hilfe und beende -m Deaktivere Mount-Modul -n Deaktiviere Netzwerk-Modul -o OUTPUT Bestimme zusätzliche Ausgabe (verfügbar: HTML oder CSV) -p PORT Definiere den TCP-Port des Clients/Servers (Standard: %d) -r Deaktiviere Prozess-Liste -s Starte Glances im Server-Modus -t SECONDS Setze Aktualisierungs-Zeit in Sekunden (Standard: %d sek) -v Zeige die Version und beende -y Aktiviere hddtemp-Modul -z Setze Farben nicht in fett Optionen: (letzte (ein Eintrag) Einträge) mit PsUtil %d.%m.%Y %H:%M:%S11 min:15 min:5 min:Bytes oder Bits für Netzwerk I/OVORSICHTCPUCPU Prozess %CPU%KRITISCHKann Kommando nicht ausführenKann Daten nicht lesen...Berechne Daten...Verbunden zu Konnte Socket nicht erzeugen: %sKann Socket nicht öffnen: %sSetze das Passwort für den Glances ServerLösche warning- und critical-LogsLösche warning-LogsVerbindung getrennt zu Gib das Glances Server-Passwort einFehler beim Dekodieren der Konfig-Datei '%s': %sFehler: Fehler: CSV-Export (-o csv) benötigt Ausgabe-Datei (-f )Fehler: Die curses-Bibliothek kann nicht initialisiert werden. Fehler: Kann nicht gleichzeitig -P und --password benutzenFehler: Kann nicht gleichzeitig -c und -C benutzenFehler: Kann nicht gleichzeitig -c und -o benutzenFehler: Kann nicht gleichzeitig -s und -c benutzenFehler: Kann nicht gleichzeitig -s und -o benutzenFehler: Verbindung zum Server gescheitert. Ungültiges Passwort.Fehler: Verbindung zum Server gescheitert. Unbekannter Fehler.Fehler: HTML-Export (-o html) benötigt Ausgabe-Ordner (-f )Fehler: Ungültige Port-Nummer: %sFehler: Benötige CSV-Bibliothek um nach CSV zu exportierenFehler: Benötige die Bibliothek Jinja2 um nach HTML exportieren zu könnenFehler: Aktualisierungszeit muss eine positive ganze Zahl seinFehler: Die Server-Version ist nicht kompatibelFehler: Unbekannte Ausgabe %sFehler: Client-Socket konnte nicht erstellt werdenDateisystem %Glances-Server läuft aufGlances Version Glances {0}Glances {0} mit PsUtil {1}Globale oder Pro-CPU-StatistikDie Grenzen basieren auf denen des ServersLastMEM Prozess %NAMENICHT LAUFENDNetzwerkPasswort (bestätigen): Passwort: Pro CPUDrück 'h' für HilfeProzesse (deaktiviert)Beenden (Esc und Strg-C funktionieren auch)LAUFENDSensorenZeige/Verstecke Disk I/O-StatistikZeige/Verstecke Dateisystem-StatistikZeige/Verstecke hddtemp-StatistikZeige/Verstecke LogsZeige/Verstecke Netzwerk-StatistikZeige/Verstecke Prozess-ListeZeige/Verstecke Sensor-StatisikZeige/Verstecke diesen Hilfe-BildschirmProzesse automatisch sortierenProzesse nach CPU% sortierenProzesse nach I/O-Rate sortierenProzesse nach MEM% sortierenProzesse nach Name sortierenZEIT+Temp °CVersuch 'glances -h' für mehr Informationen.Betriebszeit: {0}Benutzung: glances [optionen]BelegtZeige kumulative Netzwerk I/OZeige Netzwerk I/O kombiniertWARNUNGWARNUNG|KRITISCH Logs[Warnung] Passwörter stimmen nicht überein, bitte erneut versuchen... aaktiv:bBuffer:cgecached:dffrei:hhddtemp-Fehleriinaktiv:lmnpqsautomatisch sortiertsortiert nach tubelegt:wxyz{0} ({1} {2} / {3} {4}){0} ({1} {2} {3})°Cglances-2.3/i18n/de/LC_MESSAGES/glances.po000066400000000000000000000531451246314757600177310ustar00rootroot00000000000000# German translations for GLANCES package. # Copyright (C) 2014 THE GLANCES'S COPYRIGHT HOLDER # This file is distributed under the same license as the GLANCES package. # David Tiersch , 2014. # msgid "" msgstr "" "Project-Id-Version: GLANCES 2.0_RC4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-12-13 22:14+0100\n" "PO-Revision-Date: 2014-06-03 16:33+0100\n" "Last-Translator: David Tiersch \n" "Language-Team: German\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" "X-Poedit-Basepath: ~/dev/glances\n" #: glances/__init__.py:166 #, python-brace-format msgid "Glances server is running on {0}:{1}" msgstr "Glances-Server läuft auf {0}:{1}" #: glances/plugins/glances_diskio.py:132 msgid "DISK I/O" msgstr "DISK I/O" #: glances/plugins/glances_diskio.py:134 msgid "R/s" msgstr "R/s" #: glances/plugins/glances_diskio.py:136 msgid "W/s" msgstr "W/s" #: glances/plugins/glances_memswap.py:146 msgid "SWAP" msgstr "SWAP" #: glances/plugins/glances_memswap.py:154 glances/plugins/glances_mem.py:185 msgid "total:" msgstr "gesamt:" #: glances/plugins/glances_memswap.py:161 glances/plugins/glances_mem.py:198 msgid "used:" msgstr "benutzt:" #: glances/plugins/glances_memswap.py:169 glances/plugins/glances_mem.py:212 msgid "free:" msgstr "frei:" #: glances/plugins/glances_batpercent.py:96 msgid "Battery (%)" msgstr "Batterie (%)" #: glances/plugins/glances_percpu.py:94 msgid "PER CPU not available" msgstr "PRO-CPU nicht möglich" #: glances/plugins/glances_percpu.py:100 msgid "PER CPU" msgstr "PRO CPU" #: glances/plugins/glances_percpu.py:110 glances/plugins/glances_cpu.py:159 msgid "user:" msgstr "Benutzer:" #: glances/plugins/glances_percpu.py:118 glances/plugins/glances_cpu.py:178 msgid "system:" msgstr "System:" #: glances/plugins/glances_percpu.py:126 glances/plugins/glances_cpu.py:164 #: glances/plugins/glances_cpu.py:197 msgid "idle:" msgstr "Inaktiv:" #: glances/plugins/glances_processcount.py:76 msgid "PROCESSES DISABLED (press 'z' to display)" msgstr "PROZESS DEAKTIVIERT (drücke 'z' zum anzeigen)" #: glances/plugins/glances_processcount.py:85 msgid "Processes filter:" msgstr "" #: glances/plugins/glances_processcount.py:87 #, python-brace-format msgid " {0} " msgstr "" #: glances/plugins/glances_processcount.py:89 msgid "(press ENTER to edit)" msgstr "" #: glances/plugins/glances_processcount.py:95 msgid "TASKS " msgstr "PROZESSE " #: glances/plugins/glances_processcount.py:103 #, python-brace-format msgid " ({0} thr)," msgstr " ({0} thr)," #: glances/plugins/glances_processcount.py:108 #, python-brace-format msgid " {0} run," msgstr " {0} run," #: glances/plugins/glances_processcount.py:113 #, python-brace-format msgid " {0} slp," msgstr " {0} slp," #: glances/plugins/glances_processcount.py:116 #, python-brace-format msgid " {0} oth " msgstr " {0} oth " #: glances/plugins/glances_processcount.py:121 msgid "sorted automatically" msgstr "automatisch sortiert" #: glances/plugins/glances_processcount.py:123 #, python-brace-format msgid " by {0}" msgstr " nach {0}" #: glances/plugins/glances_processcount.py:126 #, python-brace-format msgid "sorted by {0}" msgstr "sortiert nach {0}" #: glances/plugins/glances_fs.py:175 msgid "FILE SYS" msgstr "DATEISYSTEM" #: glances/plugins/glances_fs.py:178 msgid "Free" msgstr "" #: glances/plugins/glances_fs.py:180 msgid "Used" msgstr "Belegt" #: glances/plugins/glances_fs.py:182 msgid "Total" msgstr "Gesamt" #: glances/plugins/glances_uptime.py:89 #, python-brace-format msgid "Uptime: {0}" msgstr "Betriebszeit: {0}" #: glances/plugins/glances_sensors.py:133 msgid "SENSORS" msgstr "SENSOREN" #: glances/plugins/glances_sensors.py:136 #: glances/plugins/glances_sensors.py:138 msgid "°C" msgstr "°C" #: glances/plugins/glances_now.py:47 msgid "%Y-%m-%d %H:%M:%S" msgstr "%d.%m.%Y %H:%M:%S" #: glances/plugins/glances_processlist.py:288 msgid "CPU affinity: " msgstr "" #: glances/plugins/glances_processlist.py:288 msgid " cores" msgstr "" #: glances/plugins/glances_processlist.py:293 msgid "Memory info: " msgstr "" #: glances/plugins/glances_processlist.py:299 msgid "swap " msgstr "" #: glances/plugins/glances_processlist.py:304 msgid "threads " msgstr "" #: glances/plugins/glances_processlist.py:306 msgid "files " msgstr "" #: glances/plugins/glances_processlist.py:308 msgid "handles " msgstr "" #: glances/plugins/glances_processlist.py:310 msgid "TCP " msgstr "" #: glances/plugins/glances_processlist.py:312 msgid "UDP " msgstr "" #: glances/plugins/glances_processlist.py:315 msgid "Open: " msgstr "" #: glances/plugins/glances_processlist.py:320 msgid "IO nice: " msgstr "" #: glances/plugins/glances_processlist.py:321 msgid "Class is " msgstr "" #: glances/plugins/glances_processlist.py:331 #: glances/plugins/glances_processlist.py:336 msgid "No specific I/O priority" msgstr "" #: glances/plugins/glances_processlist.py:348 #, python-format msgid " (value %s/7)" msgstr "" #: glances/plugins/glances_processlist.py:367 #: glances/outputs/glances_curses.py:1012 msgid "CPU%" msgstr "CPU %" #: glances/plugins/glances_processlist.py:369 #: glances/outputs/glances_curses.py:1013 msgid "MEM%" msgstr "RAM%" #: glances/plugins/glances_processlist.py:371 msgid "VIRT" msgstr "VIRT" #: glances/plugins/glances_processlist.py:373 msgid "RES" msgstr "RES" #: glances/plugins/glances_processlist.py:375 msgid "PID" msgstr "PID" #: glances/plugins/glances_processlist.py:377 msgid "USER" msgstr "BENUTZER" #: glances/plugins/glances_processlist.py:379 msgid "NI" msgstr "NI" #: glances/plugins/glances_processlist.py:381 msgid "S" msgstr "S" #: glances/plugins/glances_processlist.py:383 msgid "TIME+" msgstr "ZEIT+" #: glances/plugins/glances_processlist.py:385 msgid "IOR/s" msgstr "IOR/s" #: glances/plugins/glances_processlist.py:387 msgid "IOW/s" msgstr "IOW/s" #: glances/plugins/glances_processlist.py:389 msgid "Command" msgstr "Befehl" #: glances/plugins/glances_monitor.py:101 msgid "RUNNING" msgstr "LAUFEND" #: glances/plugins/glances_monitor.py:101 msgid "NOT RUNNING" msgstr "NICHT LAUFEND" #: glances/plugins/glances_network.py:201 msgid "NETWORK" msgstr "NETZWERK" #: glances/plugins/glances_network.py:207 msgid "Rx+Tx" msgstr "Rx+Tx" #: glances/plugins/glances_network.py:211 msgid "Rx" msgstr "Rx" #: glances/plugins/glances_network.py:213 msgid "Tx" msgstr "Tx" #: glances/plugins/glances_network.py:219 msgid "Rx+Tx/s" msgstr "Rx+Tx/s" #: glances/plugins/glances_network.py:222 msgid "Rx/s" msgstr "Rx/s" #: glances/plugins/glances_network.py:224 msgid "Tx/s" msgstr "Tx/s" #: glances/plugins/glances_alert.py:71 msgid "No warning or critical alert detected" msgstr "Keine (kritische) Warnung entdeckt" #: glances/plugins/glances_alert.py:75 msgid "Warning or critical alerts" msgstr "(Kritische) Warnungen" #: glances/plugins/glances_alert.py:79 #, python-brace-format msgid " (lasts {0} entries)" msgstr " (letzte {0} Einträge)" #: glances/plugins/glances_alert.py:81 msgid " (one entry)" msgstr " (ein Eintrag)" #: glances/plugins/glances_alert.py:95 msgid " (ongoing)" msgstr "(laufend)" #: glances/plugins/glances_alert.py:101 #, python-brace-format msgid "{0} on {1}" msgstr "{0} auf {1}" #: glances/plugins/glances_alert.py:110 #, python-brace-format msgid " (Min:{0:.1f} Mean:{1:.1f} Max:{2:.1f})" msgstr " (Min:{0:.1f} Mittel:{1:.1f} Max:{2:.1f})" #: glances/plugins/glances_system.py:158 msgid "Connected to " msgstr "Verbunden mit " #: glances/plugins/glances_system.py:161 msgid "SNMP from " msgstr "SNMP von " #: glances/plugins/glances_system.py:164 msgid "Disconnected from " msgstr "Getrennt von " #: glances/plugins/glances_mem.py:171 msgid "MEM" msgstr "RAM" #: glances/plugins/glances_mem.py:178 msgid "active:" msgstr "aktiv:" #: glances/plugins/glances_mem.py:191 msgid "inactive:" msgstr "inaktiv:" #: glances/plugins/glances_mem.py:205 msgid "buffers:" msgstr "Puffer:" #: glances/plugins/glances_mem.py:218 msgid "cached:" msgstr "cached:" #: glances/plugins/glances_help.py:58 #, python-brace-format msgid " with PSutil {0}" msgstr "" #: glances/plugins/glances_help.py:64 msgid "Configuration file" msgstr "" #: glances/plugins/glances_help.py:77 msgid "Sort processes automatically" msgstr "Prozesse automatisch sortieren" #: glances/plugins/glances_help.py:79 msgid "Bytes or bits for network I/O" msgstr "Bytes oder Bits für Netzwerk I/O" #: glances/plugins/glances_help.py:82 msgid "Sort processes by CPU%" msgstr "Prozesse nach CPU% sortieren" #: glances/plugins/glances_help.py:84 msgid "Show/hide alert logs" msgstr "" #: glances/plugins/glances_help.py:87 msgid "Sort processes by MEM%" msgstr "Prozesse nach RAM% sortieren" #: glances/plugins/glances_help.py:89 msgid "Delete warning alerts" msgstr "Warnungen entfernen" #: glances/plugins/glances_help.py:92 msgid "Sort processes by name" msgstr "Prozesse nach Name sortieren" #: glances/plugins/glances_help.py:94 msgid "Delete warning and critical alerts" msgstr "(Kritische) Warnungen entfernen" #: glances/plugins/glances_help.py:97 msgid "Sort processes by I/O rate" msgstr "Prozesse nach I/O-Geschwindigkeit sortieren" #: glances/plugins/glances_help.py:99 msgid "Global CPU or per-CPU stats" msgstr "Globale oder pro-CPU-Daten" #: glances/plugins/glances_help.py:102 msgid "Sort processes by CPU times" msgstr "" #: glances/plugins/glances_help.py:104 msgid "Show/hide this help screen" msgstr "Diese Hilfe zeigen/verstecken" #: glances/plugins/glances_help.py:107 msgid "Show/hide disk I/O stats" msgstr "I/O-Daten zeigen/verstecken" #: glances/plugins/glances_help.py:109 msgid "View network I/O as combination" msgstr "Netzwerk-I/O kombiniert zeigen" #: glances/plugins/glances_help.py:112 msgid "Show/hide filesystem stats" msgstr "" #: glances/plugins/glances_help.py:114 msgid "View cumulative network I/O" msgstr "kumulative Netzwerk-I/O zeigen" #: glances/plugins/glances_help.py:117 msgid "Show/hide network stats" msgstr "Netzwerk-Daten zeigen/verstecken" #: glances/plugins/glances_help.py:119 msgid "Show filesystem free space" msgstr "" #: glances/plugins/glances_help.py:122 msgid "Show/hide sensors stats" msgstr "Sensor-Daten zeigen/verstecken" #: glances/plugins/glances_help.py:124 msgid "Generate graphs for current history" msgstr "" #: glances/plugins/glances_help.py:127 msgid "Show/hide left sidebar" msgstr "" #: glances/plugins/glances_help.py:129 glances/outputs/glances_curses.py:550 msgid "Reset history" msgstr "" #: glances/plugins/glances_help.py:132 msgid "Enable/disable processes stats" msgstr "Prozess-Daten aktivieren/deaktivieren" #: glances/plugins/glances_help.py:134 msgid "Quit (Esc and Ctrl-C also work)" msgstr "Beenden (auch Esc und Strg+C)" #: glances/plugins/glances_help.py:137 msgid "Enable/disable top extended stats" msgstr "" #: glances/plugins/glances_help.py:140 msgid "Enable/disable short processes name" msgstr "" #: glances/plugins/glances_help.py:145 msgid "Edit the process filter pattern" msgstr "" #: glances/plugins/glances_load.py:127 glances/outputs/glances_curses.py:1011 msgid "LOAD" msgstr "LAST" #: glances/plugins/glances_load.py:131 #, python-brace-format msgid "{0:d}-core" msgstr "" #: glances/plugins/glances_load.py:136 msgid "1 min:" msgstr "1 Min:" #: glances/plugins/glances_load.py:143 msgid "5 min:" msgstr "5 Min:" #: glances/plugins/glances_load.py:151 msgid "15 min:" msgstr "15 Min:" #: glances/plugins/glances_cpu.py:141 msgid "CPU" msgstr "CPU" #: glances/plugins/glances_cpu.py:151 msgid "nice:" msgstr "nice:" #: glances/plugins/glances_cpu.py:170 msgid "irq:" msgstr "IRQ:" #: glances/plugins/glances_cpu.py:183 msgid "core:" msgstr "" #: glances/plugins/glances_cpu.py:189 msgid "iowait:" msgstr "IOWait:" #: glances/plugins/glances_cpu.py:203 msgid "steal:" msgstr "Steal:" #: glances/outputs/glances_curses.py:546 #, python-format msgid "" "Generate graphs history in %s\n" "Please wait..." msgstr "" #: glances/outputs/glances_curses.py:548 #, python-format msgid "" "Generate graphs history in %s\n" "Done: %s graphs generated" msgstr "" #: glances/outputs/glances_curses.py:557 msgid "" "History disabled\n" "Enable it using --enable-history" msgstr "" #: glances/outputs/glances_curses.py:560 msgid "" "History disabled\n" "Please install MatPlotLib" msgstr "" #: glances/outputs/glances_curses.py:567 msgid "Process filter pattern: " msgstr "" #: glances/outputs/glances_curses.py:573 msgid "Process filter only available in standalone mode" msgstr "" #: glances/outputs/glances_curses.py:984 msgid "Glances is scanning your network (please wait)..." msgstr "" #: glances/outputs/glances_curses.py:987 msgid "No Glances servers available" msgstr "" #: glances/outputs/glances_curses.py:989 msgid "One Glances server available" msgstr "" #: glances/outputs/glances_curses.py:991 #, python-format msgid "%d Glances servers available" msgstr "" #: glances/outputs/glances_curses.py:994 msgid "(auto discover is disabled)" msgstr "" #: glances/outputs/glances_curses.py:1009 msgid "Name" msgstr "" #: glances/outputs/glances_curses.py:1014 msgid "STATUS" msgstr "" #: glances/outputs/glances_curses.py:1015 msgid "IP" msgstr "" #: glances/outputs/glances_curses.py:1017 msgid "OS" msgstr "" #: glances/outputs/glances_bottle.py:34 msgid "Install it using pip: # pip install bottle" msgstr "" #: glances/outputs/glances_bottle.py:104 #, python-brace-format msgid "Glances web server started on http://{0}:{1}/" msgstr "" #: glances/core/glances_password.py:119 msgid "Password: " msgstr "Passwort:" #: glances/core/glances_password.py:123 msgid "Password (confirm): " msgstr "Passwort (wiederholen):" #: glances/core/glances_password.py:137 msgid "Do you want to save the password? [Yes/No]: " msgstr "Willst du das Passwort speichern? [Ja/Nein]" #: glances/core/glances_password.py:138 msgid "Y" msgstr "J" #: glances/core/glances_monitor_list.py:146 msgid "Error: " msgstr "Fehler: " #: glances/core/glances_monitor_list.py:148 msgid "Cannot execute command" msgstr "Kann Befehl nicht ausführen" #: glances/core/glances_client_browser.py:158 #, python-format msgid "Connect to %s:%s" msgstr "" #: glances/core/glances_client_browser.py:164 #, python-format msgid "Password needed for %s: " msgstr "" #: glances/core/glances_client_browser.py:187 #, python-format msgid "Sorry, cannot connect to %s (see log file for additional information)" msgstr "" #: glances/core/glances_client.py:116 msgid "Trying fallback to SNMP..." msgstr "" #: glances/core/glances_main.py:65 msgid "Enable debug mode" msgstr "" #: glances/core/glances_main.py:67 msgid "path to the configuration file" msgstr "Pfad zur Konfigurationsdatei" #: glances/core/glances_main.py:70 msgid "disable network module" msgstr "Netzwerk-Modul deaktivieren" #: glances/core/glances_main.py:72 msgid "disable disk I/O module" msgstr "Disk-I/O-Modul deaktivieren" #: glances/core/glances_main.py:74 msgid "disable filesystem module" msgstr "Dateisystem-Modul deaktivieren" #: glances/core/glances_main.py:76 msgid "disable sensors module" msgstr "Sensor-Modul deaktivieren" #: glances/core/glances_main.py:78 msgid "disable network, disk io, FS and sensors modules" msgstr "" #: glances/core/glances_main.py:80 msgid "disable process module" msgstr "Prozess-Modul deaktivieren" #: glances/core/glances_main.py:82 msgid "disable log module" msgstr "Log-Modul deaktivieren" #: glances/core/glances_main.py:84 msgid "disable bold mode in the terminal" msgstr "Fett-Modus im Terminal deaktivieren" #: glances/core/glances_main.py:86 msgid "enable extended stats on top process" msgstr "" #: glances/core/glances_main.py:88 msgid "enable the history mode" msgstr "" #: glances/core/glances_main.py:90 msgid "Set the export path for graph history" msgstr "" #: glances/core/glances_main.py:93 msgid "export stats to a CSV file" msgstr "Exportiere Daten zu CSV-Datei" #: glances/core/glances_main.py:96 msgid "connect to a Glances server by IPv4/IPv6 address or hostname" msgstr "Zu einem Glances-Server mit IPv4/IPv6-Adresse oder Hostnamen verbinden" #: glances/core/glances_main.py:98 msgid "run Glances in server mode" msgstr "Glances im Server-Modus ausführen" #: glances/core/glances_main.py:100 msgid "start the client browser (list of servers)" msgstr "" #: glances/core/glances_main.py:102 msgid "disable autodiscover feature" msgstr "" #: glances/core/glances_main.py:104 #, python-brace-format msgid "define the client/server TCP port [default: {0}]" msgstr "Client-/Server-TCP-Port festlegen [default: {0}]" #: glances/core/glances_main.py:106 msgid "bind server to the given IPv4/IPv6 address or hostname" msgstr "Server auf gegebene IPv4/IPv6-Adresse oder Hostnamen festlegen" #: glances/core/glances_main.py:108 msgid "define password from the command line" msgstr "Passwort auf Kommandozeile bestimmen" #: glances/core/glances_main.py:110 msgid "define a client/server password from the prompt or file" msgstr "Client-/Server-Passwort über Prompt oder Datei festlegen" #: glances/core/glances_main.py:112 msgid "SNMP community" msgstr "SNMP-Community" #: glances/core/glances_main.py:114 msgid "SNMP port" msgstr "SNMP-Port" #: glances/core/glances_main.py:116 msgid "SNMP version (1, 2c or 3)" msgstr "SNMP-Version (1, 2c oder 3)" #: glances/core/glances_main.py:118 msgid "SNMP username (only for SNMPv3)" msgstr "SNMP-Benutzername (nur für SNMPv3)" #: glances/core/glances_main.py:120 msgid "SNMP authentication key (only for SNMPv3)" msgstr "SNMP-Authentifizierungs-Schlüssel (nur für SNMPv3)" #: glances/core/glances_main.py:122 msgid "force SNMP mode" msgstr "" #: glances/core/glances_main.py:124 #, python-brace-format msgid "set refresh time in seconds [default: {0} sec]" msgstr "Aktualisierungszeit in Sekunden [default: {0} Sek]" #: glances/core/glances_main.py:126 msgid "run Glances in web server mode" msgstr "Glances im Webserver-Modus starten" #: glances/core/glances_main.py:129 msgid "set the process filter pattern (regular expression)" msgstr "" #: glances/core/glances_main.py:131 msgid "force short name for processes name" msgstr "" #: glances/core/glances_main.py:134 msgid "hide kernel threads in process list" msgstr "" #: glances/core/glances_main.py:136 msgid "display processes as a tree" msgstr "" #: glances/core/glances_main.py:138 msgid "display network rate in byte per second" msgstr "Netzwerkgeschwindigkeit anzeigen in Byte/Sekunde" #: glances/core/glances_main.py:140 msgid "start Glances in per CPU mode" msgstr "Glances im pro-CPU-Modus starten" #: glances/core/glances_main.py:142 msgid "display FS free space instead of used" msgstr "" #: glances/core/glances_main.py:144 msgid "optimize display for white background" msgstr "" #: glances/core/glances_main.py:188 msgid "Define the password for the Glances server" msgstr "Passwort für Glances-Server festlegen" #: glances/core/glances_main.py:192 msgid "Enter the Glances server password" msgstr "Passwort für Glances-Server eingeben" #~ msgid "Error: The server version is not compatible with the client" #~ msgstr "Fehler: Die Server-Version ist mit dem Client nicht kompatibel" #~ msgid "Error: Update {0} failed: {1}" #~ msgstr "Fehler: Aktualisierung {0} ist fehlgeschlagen: {1}" #~ msgid "Error: Couldn't create socket {0}: {1}" #~ msgstr "Fehler: Konnte Socket {0} nicht erzeugen: {1}" #~ msgid "Error: Connection to server failed: Bad password" #~ msgstr "Fehler: Verbindung zum Server fehlgeschlagen: Falsches Passwort" #~ msgid "Error: Connection to server failed: {0}" #~ msgstr "Fehler: Verbindung zum Server fehlgeschlagen: {0}" #~ msgid "" #~ "Info: Connection to Glances server failed. Trying fallback to SNMP..." #~ msgstr "" #~ "Info: Verbindung zum Glances-Server fehlgeschlagen. Versuche Fallback zu " #~ "SNMP..." #~ msgid "Error: Connection to SNMP server failed" #~ msgstr "Fehler: Verbindung zum SNMP-Server fehlgeschlagen" #~ msgid "Error: Unknown server mode: {0}" #~ msgstr "Fehler: Unbekannter Servers-Modus: {0}" #~ msgid "Error: Cannot decode configuration file '{0}': {1}" #~ msgstr "Fehler: Kann Konfigurationsdatei '{0}' nicht lesen: {1}" #~ msgid "Error: Cannot read monitored list: {0}" #~ msgstr "Fehler: Kann Überwachungs-Liste nicht lesen: {0}" #~ msgid "Info: Read password from file: {0}" #~ msgstr "Info: Passwort gelesen aus Datei {0}" #~ msgid "Error: Sorry, but passwords did not match..." #~ msgstr "Fehler: Passwörter stimmen nicht überein..." #~ msgid "Warning: Cannot create Glances directory: {0}" #~ msgstr "Warnung: Kann Glances-Ordner nicht erzeugen: {0}" #~ msgid "Error: Couldn't open socket: {0}" #~ msgstr "Fehler: Kann Socket nicht öffnen: {0}" #~ msgid "Error: Cannot start Glances server: {0}" #~ msgstr "Fehler: Kann Glances-Server nicht starten: {0}" #~ msgid "Error: Cannot init the curses library.\n" #~ msgstr "Fehler: Kann curses-Bibliothek nicht initialisieren.\n" #~ msgid "Error: Cannot create the CSV file: {0}" #~ msgstr "Fehler: Kann CSV-Datei nicht erzeugen: {0}" #~ msgid "Stats dumped to CSV file: {0}" #~ msgstr "Daten nach CSV-Datei gespeichert: {0}" #~ msgid " with psutil {0}" #~ msgstr " mit psutil {0}" #~ msgid "a" #~ msgstr "a" #~ msgid "b" #~ msgstr "b" #~ msgid "c" #~ msgstr "c" #~ msgid "l" #~ msgstr "l" #~ msgid "Show/hide logs (alerts)" #~ msgstr "Logs (Warnungen) zeigen/verstecken" #~ msgid "m" #~ msgstr "m" #~ msgid "w" #~ msgstr "w" #~ msgid "p" #~ msgstr "p" #~ msgid "x" #~ msgstr "x" #~ msgid "i" #~ msgstr "i" #~ msgid "1" #~ msgstr "1" #~ msgid "d" #~ msgstr "d" #~ msgid "h" #~ msgstr "h" #~ msgid "f" #~ msgstr "f" #~ msgid "Show/hide file system stats" #~ msgstr "Zeige/Verstecke Dateisystem-Daten" #~ msgid "t" #~ msgstr "t" #~ msgid "n" #~ msgstr "n" #~ msgid "u" #~ msgstr "u" #~ msgid "s" #~ msgstr "s" #~ msgid "z" #~ msgstr "z" #~ msgid "q" #~ msgstr "q" #~ msgid "{0}-core" #~ msgstr "{0}-Kern" glances-2.3/i18n/glances.pot000066400000000000000000000406511246314757600157360ustar00rootroot00000000000000# 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: 2014-12-13 22:14+0100\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" #: glances/__init__.py:166 #, python-brace-format msgid "Glances server is running on {0}:{1}" msgstr "" #: glances/plugins/glances_diskio.py:132 msgid "DISK I/O" msgstr "" #: glances/plugins/glances_diskio.py:134 msgid "R/s" msgstr "" #: glances/plugins/glances_diskio.py:136 msgid "W/s" msgstr "" #: glances/plugins/glances_memswap.py:146 msgid "SWAP" msgstr "" #: glances/plugins/glances_memswap.py:154 glances/plugins/glances_mem.py:185 msgid "total:" msgstr "" #: glances/plugins/glances_memswap.py:161 glances/plugins/glances_mem.py:198 msgid "used:" msgstr "" #: glances/plugins/glances_memswap.py:169 glances/plugins/glances_mem.py:212 msgid "free:" msgstr "" #: glances/plugins/glances_batpercent.py:96 msgid "Battery (%)" msgstr "" #: glances/plugins/glances_percpu.py:94 msgid "PER CPU not available" msgstr "" #: glances/plugins/glances_percpu.py:100 msgid "PER CPU" msgstr "" #: glances/plugins/glances_percpu.py:110 glances/plugins/glances_cpu.py:159 msgid "user:" msgstr "" #: glances/plugins/glances_percpu.py:118 glances/plugins/glances_cpu.py:178 msgid "system:" msgstr "" #: glances/plugins/glances_percpu.py:126 glances/plugins/glances_cpu.py:164 #: glances/plugins/glances_cpu.py:197 msgid "idle:" msgstr "" #: glances/plugins/glances_processcount.py:76 msgid "PROCESSES DISABLED (press 'z' to display)" msgstr "" #: glances/plugins/glances_processcount.py:85 msgid "Processes filter:" msgstr "" #: glances/plugins/glances_processcount.py:87 #, python-brace-format msgid " {0} " msgstr "" #: glances/plugins/glances_processcount.py:89 msgid "(press ENTER to edit)" msgstr "" #: glances/plugins/glances_processcount.py:95 msgid "TASKS " msgstr "" #: glances/plugins/glances_processcount.py:103 #, python-brace-format msgid " ({0} thr)," msgstr "" #: glances/plugins/glances_processcount.py:108 #, python-brace-format msgid " {0} run," msgstr "" #: glances/plugins/glances_processcount.py:113 #, python-brace-format msgid " {0} slp," msgstr "" #: glances/plugins/glances_processcount.py:116 #, python-brace-format msgid " {0} oth " msgstr "" #: glances/plugins/glances_processcount.py:121 msgid "sorted automatically" msgstr "" #: glances/plugins/glances_processcount.py:123 #, python-brace-format msgid " by {0}" msgstr "" #: glances/plugins/glances_processcount.py:126 #, python-brace-format msgid "sorted by {0}" msgstr "" #: glances/plugins/glances_fs.py:175 msgid "FILE SYS" msgstr "" #: glances/plugins/glances_fs.py:178 msgid "Free" msgstr "" #: glances/plugins/glances_fs.py:180 msgid "Used" msgstr "" #: glances/plugins/glances_fs.py:182 msgid "Total" msgstr "" #: glances/plugins/glances_uptime.py:89 #, python-brace-format msgid "Uptime: {0}" msgstr "" #: glances/plugins/glances_sensors.py:133 msgid "SENSORS" msgstr "" #: glances/plugins/glances_sensors.py:136 #: glances/plugins/glances_sensors.py:138 msgid "°C" msgstr "" #: glances/plugins/glances_now.py:47 msgid "%Y-%m-%d %H:%M:%S" msgstr "" #: glances/plugins/glances_processlist.py:288 msgid "CPU affinity: " msgstr "" #: glances/plugins/glances_processlist.py:288 msgid " cores" msgstr "" #: glances/plugins/glances_processlist.py:293 msgid "Memory info: " msgstr "" #: glances/plugins/glances_processlist.py:299 msgid "swap " msgstr "" #: glances/plugins/glances_processlist.py:304 msgid "threads " msgstr "" #: glances/plugins/glances_processlist.py:306 msgid "files " msgstr "" #: glances/plugins/glances_processlist.py:308 msgid "handles " msgstr "" #: glances/plugins/glances_processlist.py:310 msgid "TCP " msgstr "" #: glances/plugins/glances_processlist.py:312 msgid "UDP " msgstr "" #: glances/plugins/glances_processlist.py:315 msgid "Open: " msgstr "" #: glances/plugins/glances_processlist.py:320 msgid "IO nice: " msgstr "" #: glances/plugins/glances_processlist.py:321 msgid "Class is " msgstr "" #: glances/plugins/glances_processlist.py:331 #: glances/plugins/glances_processlist.py:336 msgid "No specific I/O priority" msgstr "" #: glances/plugins/glances_processlist.py:348 #, python-format msgid " (value %s/7)" msgstr "" #: glances/plugins/glances_processlist.py:367 #: glances/outputs/glances_curses.py:1012 msgid "CPU%" msgstr "" #: glances/plugins/glances_processlist.py:369 #: glances/outputs/glances_curses.py:1013 msgid "MEM%" msgstr "" #: glances/plugins/glances_processlist.py:371 msgid "VIRT" msgstr "" #: glances/plugins/glances_processlist.py:373 msgid "RES" msgstr "" #: glances/plugins/glances_processlist.py:375 msgid "PID" msgstr "" #: glances/plugins/glances_processlist.py:377 msgid "USER" msgstr "" #: glances/plugins/glances_processlist.py:379 msgid "NI" msgstr "" #: glances/plugins/glances_processlist.py:381 msgid "S" msgstr "" #: glances/plugins/glances_processlist.py:383 msgid "TIME+" msgstr "" #: glances/plugins/glances_processlist.py:385 msgid "IOR/s" msgstr "" #: glances/plugins/glances_processlist.py:387 msgid "IOW/s" msgstr "" #: glances/plugins/glances_processlist.py:389 msgid "Command" msgstr "" #: glances/plugins/glances_monitor.py:101 msgid "RUNNING" msgstr "" #: glances/plugins/glances_monitor.py:101 msgid "NOT RUNNING" msgstr "" #: glances/plugins/glances_network.py:201 msgid "NETWORK" msgstr "" #: glances/plugins/glances_network.py:207 msgid "Rx+Tx" msgstr "" #: glances/plugins/glances_network.py:211 msgid "Rx" msgstr "" #: glances/plugins/glances_network.py:213 msgid "Tx" msgstr "" #: glances/plugins/glances_network.py:219 msgid "Rx+Tx/s" msgstr "" #: glances/plugins/glances_network.py:222 msgid "Rx/s" msgstr "" #: glances/plugins/glances_network.py:224 msgid "Tx/s" msgstr "" #: glances/plugins/glances_alert.py:71 msgid "No warning or critical alert detected" msgstr "" #: glances/plugins/glances_alert.py:75 msgid "Warning or critical alerts" msgstr "" #: glances/plugins/glances_alert.py:79 #, python-brace-format msgid " (lasts {0} entries)" msgstr "" #: glances/plugins/glances_alert.py:81 msgid " (one entry)" msgstr "" #: glances/plugins/glances_alert.py:95 msgid " (ongoing)" msgstr "" #: glances/plugins/glances_alert.py:101 #, python-brace-format msgid "{0} on {1}" msgstr "" #: glances/plugins/glances_alert.py:110 #, python-brace-format msgid " (Min:{0:.1f} Mean:{1:.1f} Max:{2:.1f})" msgstr "" #: glances/plugins/glances_system.py:158 msgid "Connected to " msgstr "" #: glances/plugins/glances_system.py:161 msgid "SNMP from " msgstr "" #: glances/plugins/glances_system.py:164 msgid "Disconnected from " msgstr "" #: glances/plugins/glances_mem.py:171 msgid "MEM" msgstr "" #: glances/plugins/glances_mem.py:178 msgid "active:" msgstr "" #: glances/plugins/glances_mem.py:191 msgid "inactive:" msgstr "" #: glances/plugins/glances_mem.py:205 msgid "buffers:" msgstr "" #: glances/plugins/glances_mem.py:218 msgid "cached:" msgstr "" #: glances/plugins/glances_help.py:58 #, python-brace-format msgid " with PSutil {0}" msgstr "" #: glances/plugins/glances_help.py:64 msgid "Configuration file" msgstr "" #: glances/plugins/glances_help.py:77 msgid "Sort processes automatically" msgstr "" #: glances/plugins/glances_help.py:79 msgid "Bytes or bits for network I/O" msgstr "" #: glances/plugins/glances_help.py:82 msgid "Sort processes by CPU%" msgstr "" #: glances/plugins/glances_help.py:84 msgid "Show/hide alert logs" msgstr "" #: glances/plugins/glances_help.py:87 msgid "Sort processes by MEM%" msgstr "" #: glances/plugins/glances_help.py:89 msgid "Delete warning alerts" msgstr "" #: glances/plugins/glances_help.py:92 msgid "Sort processes by name" msgstr "" #: glances/plugins/glances_help.py:94 msgid "Delete warning and critical alerts" msgstr "" #: glances/plugins/glances_help.py:97 msgid "Sort processes by I/O rate" msgstr "" #: glances/plugins/glances_help.py:99 msgid "Global CPU or per-CPU stats" msgstr "" #: glances/plugins/glances_help.py:102 msgid "Sort processes by CPU times" msgstr "" #: glances/plugins/glances_help.py:104 msgid "Show/hide this help screen" msgstr "" #: glances/plugins/glances_help.py:107 msgid "Show/hide disk I/O stats" msgstr "" #: glances/plugins/glances_help.py:109 msgid "View network I/O as combination" msgstr "" #: glances/plugins/glances_help.py:112 msgid "Show/hide filesystem stats" msgstr "" #: glances/plugins/glances_help.py:114 msgid "View cumulative network I/O" msgstr "" #: glances/plugins/glances_help.py:117 msgid "Show/hide network stats" msgstr "" #: glances/plugins/glances_help.py:119 msgid "Show filesystem free space" msgstr "" #: glances/plugins/glances_help.py:122 msgid "Show/hide sensors stats" msgstr "" #: glances/plugins/glances_help.py:124 msgid "Generate graphs for current history" msgstr "" #: glances/plugins/glances_help.py:127 msgid "Show/hide left sidebar" msgstr "" #: glances/plugins/glances_help.py:129 glances/outputs/glances_curses.py:550 msgid "Reset history" msgstr "" #: glances/plugins/glances_help.py:132 msgid "Enable/disable processes stats" msgstr "" #: glances/plugins/glances_help.py:134 msgid "Quit (Esc and Ctrl-C also work)" msgstr "" #: glances/plugins/glances_help.py:137 msgid "Enable/disable top extended stats" msgstr "" #: glances/plugins/glances_help.py:140 msgid "Enable/disable short processes name" msgstr "" #: glances/plugins/glances_help.py:145 msgid "Edit the process filter pattern" msgstr "" #: glances/plugins/glances_load.py:127 glances/outputs/glances_curses.py:1011 msgid "LOAD" msgstr "" #: glances/plugins/glances_load.py:131 #, python-brace-format msgid "{0:d}-core" msgstr "" #: glances/plugins/glances_load.py:136 msgid "1 min:" msgstr "" #: glances/plugins/glances_load.py:143 msgid "5 min:" msgstr "" #: glances/plugins/glances_load.py:151 msgid "15 min:" msgstr "" #: glances/plugins/glances_cpu.py:141 msgid "CPU" msgstr "" #: glances/plugins/glances_cpu.py:151 msgid "nice:" msgstr "" #: glances/plugins/glances_cpu.py:170 msgid "irq:" msgstr "" #: glances/plugins/glances_cpu.py:183 msgid "core:" msgstr "" #: glances/plugins/glances_cpu.py:189 msgid "iowait:" msgstr "" #: glances/plugins/glances_cpu.py:203 msgid "steal:" msgstr "" #: glances/outputs/glances_curses.py:546 #, python-format msgid "" "Generate graphs history in %s\n" "Please wait..." msgstr "" #: glances/outputs/glances_curses.py:548 #, python-format msgid "" "Generate graphs history in %s\n" "Done: %s graphs generated" msgstr "" #: glances/outputs/glances_curses.py:557 msgid "" "History disabled\n" "Enable it using --enable-history" msgstr "" #: glances/outputs/glances_curses.py:560 msgid "" "History disabled\n" "Please install MatPlotLib" msgstr "" #: glances/outputs/glances_curses.py:567 msgid "Process filter pattern: " msgstr "" #: glances/outputs/glances_curses.py:573 msgid "Process filter only available in standalone mode" msgstr "" #: glances/outputs/glances_curses.py:984 msgid "Glances is scanning your network (please wait)..." msgstr "" #: glances/outputs/glances_curses.py:987 msgid "No Glances servers available" msgstr "" #: glances/outputs/glances_curses.py:989 msgid "One Glances server available" msgstr "" #: glances/outputs/glances_curses.py:991 #, python-format msgid "%d Glances servers available" msgstr "" #: glances/outputs/glances_curses.py:994 msgid "(auto discover is disabled)" msgstr "" #: glances/outputs/glances_curses.py:1009 msgid "Name" msgstr "" #: glances/outputs/glances_curses.py:1014 msgid "STATUS" msgstr "" #: glances/outputs/glances_curses.py:1015 msgid "IP" msgstr "" #: glances/outputs/glances_curses.py:1017 msgid "OS" msgstr "" #: glances/outputs/glances_bottle.py:34 msgid "Install it using pip: # pip install bottle" msgstr "" #: glances/outputs/glances_bottle.py:104 #, python-brace-format msgid "Glances web server started on http://{0}:{1}/" msgstr "" #: glances/core/glances_password.py:119 msgid "Password: " msgstr "" #: glances/core/glances_password.py:123 msgid "Password (confirm): " msgstr "" #: glances/core/glances_password.py:137 msgid "Do you want to save the password? [Yes/No]: " msgstr "" #: glances/core/glances_password.py:138 msgid "Y" msgstr "" #: glances/core/glances_monitor_list.py:146 msgid "Error: " msgstr "" #: glances/core/glances_monitor_list.py:148 msgid "Cannot execute command" msgstr "" #: glances/core/glances_client_browser.py:158 #, python-format msgid "Connect to %s:%s" msgstr "" #: glances/core/glances_client_browser.py:164 #, python-format msgid "Password needed for %s: " msgstr "" #: glances/core/glances_client_browser.py:187 #, python-format msgid "Sorry, cannot connect to %s (see log file for additional information)" msgstr "" #: glances/core/glances_client.py:116 msgid "Trying fallback to SNMP..." msgstr "" #: glances/core/glances_main.py:65 msgid "Enable debug mode" msgstr "" #: glances/core/glances_main.py:67 msgid "path to the configuration file" msgstr "" #: glances/core/glances_main.py:70 msgid "disable network module" msgstr "" #: glances/core/glances_main.py:72 msgid "disable disk I/O module" msgstr "" #: glances/core/glances_main.py:74 msgid "disable filesystem module" msgstr "" #: glances/core/glances_main.py:76 msgid "disable sensors module" msgstr "" #: glances/core/glances_main.py:78 msgid "disable network, disk io, FS and sensors modules" msgstr "" #: glances/core/glances_main.py:80 msgid "disable process module" msgstr "" #: glances/core/glances_main.py:82 msgid "disable log module" msgstr "" #: glances/core/glances_main.py:84 msgid "disable bold mode in the terminal" msgstr "" #: glances/core/glances_main.py:86 msgid "enable extended stats on top process" msgstr "" #: glances/core/glances_main.py:88 msgid "enable the history mode" msgstr "" #: glances/core/glances_main.py:90 msgid "Set the export path for graph history" msgstr "" #: glances/core/glances_main.py:93 msgid "export stats to a CSV file" msgstr "" #: glances/core/glances_main.py:96 msgid "connect to a Glances server by IPv4/IPv6 address or hostname" msgstr "" #: glances/core/glances_main.py:98 msgid "run Glances in server mode" msgstr "" #: glances/core/glances_main.py:100 msgid "start the client browser (list of servers)" msgstr "" #: glances/core/glances_main.py:102 msgid "disable autodiscover feature" msgstr "" #: glances/core/glances_main.py:104 #, python-brace-format msgid "define the client/server TCP port [default: {0}]" msgstr "" #: glances/core/glances_main.py:106 msgid "bind server to the given IPv4/IPv6 address or hostname" msgstr "" #: glances/core/glances_main.py:108 msgid "define password from the command line" msgstr "" #: glances/core/glances_main.py:110 msgid "define a client/server password from the prompt or file" msgstr "" #: glances/core/glances_main.py:112 msgid "SNMP community" msgstr "" #: glances/core/glances_main.py:114 msgid "SNMP port" msgstr "" #: glances/core/glances_main.py:116 msgid "SNMP version (1, 2c or 3)" msgstr "" #: glances/core/glances_main.py:118 msgid "SNMP username (only for SNMPv3)" msgstr "" #: glances/core/glances_main.py:120 msgid "SNMP authentication key (only for SNMPv3)" msgstr "" #: glances/core/glances_main.py:122 msgid "force SNMP mode" msgstr "" #: glances/core/glances_main.py:124 #, python-brace-format msgid "set refresh time in seconds [default: {0} sec]" msgstr "" #: glances/core/glances_main.py:126 msgid "run Glances in web server mode" msgstr "" #: glances/core/glances_main.py:129 msgid "set the process filter pattern (regular expression)" msgstr "" #: glances/core/glances_main.py:131 msgid "force short name for processes name" msgstr "" #: glances/core/glances_main.py:134 msgid "hide kernel threads in process list" msgstr "" #: glances/core/glances_main.py:136 msgid "display processes as a tree" msgstr "" #: glances/core/glances_main.py:138 msgid "display network rate in byte per second" msgstr "" #: glances/core/glances_main.py:140 msgid "start Glances in per CPU mode" msgstr "" #: glances/core/glances_main.py:142 msgid "display FS free space instead of used" msgstr "" #: glances/core/glances_main.py:144 msgid "optimize display for white background" msgstr "" #: glances/core/glances_main.py:188 msgid "Define the password for the Glances server" msgstr "" #: glances/core/glances_main.py:192 msgid "Enter the Glances server password" msgstr "" glances-2.3/man/000077500000000000000000000000001246314757600135645ustar00rootroot00000000000000glances-2.3/man/glances.1000066400000000000000000000112301246314757600152570ustar00rootroot00000000000000.TH glances 1 "January, 2015" "version 2.3" "USER COMMANDS" .SH NAME glances \- A cross-platform curses-based system monitoring tool .SH SYNOPSIS .B glances .RI [ OPTIONS ] .SH DESCRIPTION Glances is a free (LGPL) cross-platform curses-based system monitoring tool which aims to present a maximum of information in a minimum of space, ideally to fit in a classical 80x24 terminal or higher to have additionnal information. It can adapt dynamically the displayed information depending on the terminal size. .PP Glances can also work in client/server mode. Remote monitoring could be done via terminal or web interface. .PP This tool is written in Python and uses the psutil library to fetch the statistical values from key elements, like CPU, load average, memory, network, disks, file systems, processes and so on. .SH COMMAND-LINE OPTIONS The command-line options are the following: .TP .B \-h, \-\-help show this help message and exit .TP .B \-V, \-\-version show program's version number and exit .TP .B \-d, \-\-debug Enable debug mode (log file is /tmp/glances.log) .TP .B \-C CONF_FILE, \-\-config CONF_FILE path to the configuration file .TP .B \-b, \-\-byte display network rate in byte per second [default: bit per second] .TP .B \-\-disable-bold disable bold mode in the terminal .TP .B \-\-disable-diskio disable disk I/O module .TP .B \-\-disable-fs disable file system module .TP .B \-\-disable-network disable network module .TP .B \-\-disable-sensors disable sensors module .TP .B \-\-disable-left-sidebar disable network, disk IO, FS and sensors modules .TP .B \-\-disable-process disable process module .TP .B \-\-disable-log disable log module .TP .B \-\-enable-process-extended enable extended stats on top process .TP .B \-\-enable-history enable the history mode .TP B \-\-path-history PATH_HISTORY set the export path for graph history .TP .B \-\-export-csv CSV_FILE export stats to a CSV file .TP .B \-\-export-influxdb export stats to an InfluxDB server .TP .B \-\-export-statsd export stats to a Statsd server .TP .B \-s, \-\-server run Glances in server mode .TP .B \-\-browser start the client browser (display list of servers) .TP .B \-\-disable-autodiscover disable autodiscover feature .TP .B \-c CLIENT, \-\-client CLIENT connect to a Glances server by IPv4/IPv6 address or hostname .TP .B \-p PORT, \-\-port PORT define the client/server TCP port [default: 61209] .TP .B \-\-password define a client/server password from the prompt or file .TP .B \-B BIND_ADDRESS, \-\-bind BIND_ADDRESS bind server to the given IPv4/IPv6 address or hostname .TP .B \-\-snmp-community SNMP_COMMUNITY SNMP community .TP .B \-\-snmp-port SNMP_PORT SNMP port .TP .B \-\-snmp-version SNMP_VERSION SNMP version (1, 2c or 3) .TP .B \-\-snmp-user SNMP_USER SNMP username (only for SNMPv3) .TP .B \-\-snmp-auth SNMP_AUTH SNMP authentication key (only for SNMPv3) .TP .B \-\-snmp-force Force the SNMP mode (do not try Glances server) .TP .B \-t TIME, \-\-time TIME set refresh time in seconds [default: 3 sec] .TP .B \-w, \-\-webserver run Glances in Web server mode .TP .B \-1, \-\-percpu start Glances in per CPU mode .TP .B \-1, \-\-process-short-name Force short name for processes name .TP .B \-1, \-\-fs-free-space Display FS free space instead of used .TP .B \-1, \-\-theme-white Optimize display for white background .SH INTERACTIVE COMMANDS You can use the following keys while in Glances: .TP .B ENTER Set the process filter pattern (as a regular expression) .TP .B a Sort process list automatically .TP .B b Switch between bit/s or Byte/s for network I/O .TP .B c Sort processes by CPU usage .TP .B d Show/hide disk I/O stats .TP .B e Enable/disable top extended stats .TP .B f Show/hide file system stats .B g Generate graphs for current history .TP .B h Show/hide the help screen .TP .B i Sort processes by I/O rate .TP .B l Show/hide log messages .TP .B m Sort processes by MEM usage .TP .B n Show/hide network stats .TP .B p Sort processes by name .TP .B q Quit .TP .B r Reset history .TP .B s Show/hide sensors stats .TP .B T Sort process by CPU times (TIME+) .TP .B t View network I/O as combination .TP .B u View cumulative network I/O .TP .B w Delete finished warning log messages .TP .B x Delete finished warning and critical log messages .TP .B z Show/hide processes stats .TP .B z Show/hide processes list (for low CPU consumption) .TP .B 1 Switch between global CPU and per-CPU stats .SH EXAMPLES .TP Refresh information every 5 seconds: .B glances \-t 5 .PP .SH EXIT STATUS Glances returns a zero exit status if it succeeds to print/grab information. .PP It returns 2 if it fails to parse its options (missing arguments, invalid value, etc). .SH AUTHOR Glances is written by Nicolas Hennion aka Nicolargo (contact@nicolargo.com) glances-2.3/pylint.cfg000066400000000000000000000166761246314757600150310ustar00rootroot00000000000000[MASTER] # Specify a configuration file. #rcfile= # Python code to execute, usually for sys.path manipulation such as # pygtk.require(). #init-hook= # Profiled execution. profile=no # Add files or directories to the blacklist. They should be base names, not # paths. ignore=CVS # Pickle collected data for later comparisons. persistent=yes # List of plugins (as comma separated values of python modules names) to load, # usually to register additional checkers. load-plugins= [MESSAGES CONTROL] # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time. #enable= # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where # it should appear only once). disable=C,no-name-in-module [REPORTS] # Set the output format. Available formats are text, parseable, colorized, msvs # (visual studio) and html. You can also give a reporter class, eg # mypackage.mymodule.MyReporterClass. output-format=text # Include message's id in output include-ids=no # Include symbolic ids of messages in output symbols=no # Put messages in a separate file for each module / package specified on the # command line instead of printing them on stdout. Reports (if any) will be # written in a file name "pylint_global.[txt|html]". files-output=no # Tells whether to display a full report or only the messages reports=yes # Python expression which should return a note less than 10 (10 is the highest # note). You have access to the variables errors warning, statement which # respectively contain the number of errors / warnings messages and the total # number of statements analyzed. This is used by the global evaluation report # (RP0004). evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) # Add a comment according to your evaluation note. This is used by the global # evaluation report (RP0004). comment=no [VARIABLES] # Tells whether we should check for unused import in __init__ files. init-import=no # A regular expression matching the beginning of the name of dummy variables # (i.e. not used). dummy-variables-rgx=_|dummy # List of additional names supposed to be defined in builtins. Remember that # you should avoid to define new builtins when possible. additional-builtins=_ [TYPECHECK] # Tells whether missing members accessed in mixin class should be ignored. A # mixin class is detected if its name ends with "mixin" (case insensitive). ignore-mixin-members=yes # List of classes names for which member attributes should not be checked # (useful for classes with attributes dynamically set). ignored-classes=SQLObject # When zope mode is activated, add a predefined set of Zope acquired attributes # to generated-members. zope=no # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E0201 when accessed. Python regular # expressions are accepted. generated-members=REQUEST,acl_users,aq_parent [FORMAT] # Maximum number of characters on a single line. max-line-length=80 # Maximum number of lines in a module max-module-lines=1000 # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 # tab). indent-string=' ' [MISCELLANEOUS] # List of note tags to take in consideration, separated by a comma. notes=FIXME,XXX,TODO [BASIC] # Required attributes for module, separated by a comma required-attributes= # List of builtins function names that should not be used, separated by a comma bad-functions=map,filter,apply,input # Regular expression which should only match correct module names module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ # Regular expression which should only match correct module level names const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ # Regular expression which should only match correct class names class-rgx=[A-Z_][a-zA-Z0-9]+$ # Regular expression which should only match correct function names function-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct method names method-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct instance attribute names attr-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct argument names argument-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct variable names variable-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct list comprehension / # generator expression variable names inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ # Good variable names which should always be accepted, separated by a comma good-names=i,j,k,ex,Run,_ # Bad variable names which should always be refused, separated by a comma bad-names=foo,bar,baz,toto,tutu,tata # Regular expression which should only match functions or classes name which do # not require a docstring no-docstring-rgx=__.*__ [SIMILARITIES] # Minimum lines number of a similarity. min-similarity-lines=4 # Ignore comments when computing similarities. ignore-comments=yes # Ignore docstrings when computing similarities. ignore-docstrings=yes # Ignore imports when computing similarities. ignore-imports=no [IMPORTS] # Deprecated modules which should not be used, separated by a comma deprecated-modules=regsub,string,TERMIOS,Bastion,rexec # Create a graph of every (i.e. internal and external) dependencies in the # given file (report RP0402 must not be disabled) import-graph= # Create a graph of external dependencies in the given file (report RP0402 must # not be disabled) ext-import-graph= # Create a graph of internal dependencies in the given file (report RP0402 must # not be disabled) int-import-graph= [CLASSES] # List of interface methods to ignore, separated by a comma. This is used for # instance to not check methods defines in Zope's Interface base class. ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods=__init__,__new__,setUp # List of valid names for the first argument in a class method. valid-classmethod-first-arg=cls # List of valid names for the first argument in a metaclass class method. valid-metaclass-classmethod-first-arg=mcs [DESIGN] # Maximum number of arguments for function / method max-args=5 # Argument names that match this expression will be ignored. Default to name # with leading underscore ignored-argument-names=_.* # Maximum number of locals for function / method body max-locals=15 # Maximum number of return / yield for function / method body max-returns=6 # Maximum number of branch for function / method body max-branchs=12 # Maximum number of statements in function / method body max-statements=50 # Maximum number of parents for a class (see R0901). max-parents=7 # Maximum number of attributes for a class (see R0902). max-attributes=7 # Minimum number of public methods for a class (see R0903). min-public-methods=2 # Maximum number of public methods for a class (see R0904). max-public-methods=20 [EXCEPTIONS] # Exceptions that will emit a warning when being caught. Defaults to # "Exception" overgeneral-exceptions=Exception glances-2.3/requirements.txt000066400000000000000000000000161246314757600162720ustar00rootroot00000000000000psutil==2.2.0 glances-2.3/setup.py000077500000000000000000000064241246314757600145340ustar00rootroot00000000000000#!/usr/bin/env python import glob import os import sys from setuptools import setup is_chroot = os.stat('/').st_ino != 2 def get_data_files(): data_files = [ ('share/doc/glances', ['AUTHORS', 'COPYING', 'NEWS', 'README.rst', 'conf/glances.conf', 'docs/glances-doc.html']), ('share/doc/glances/images', glob.glob('docs/images/*.png')), ('share/man/man1', ['man/glances.1']) ] if hasattr(sys, 'real_prefix'): # virtualenv conf_path = os.path.join(sys.prefix, 'etc', 'glances') elif os.name == 'posix' and (os.getuid() == 0 or is_chroot): # Unix-like + root privileges/chroot environment if 'bsd' in sys.platform: conf_path = os.path.join(sys.prefix, 'etc', 'glances') elif 'linux' in sys.platform: conf_path = os.path.join('/etc', 'glances') elif 'darwin' in sys.platform: conf_path = os.path.join('/usr/local', 'etc', 'glances') elif 'win32' in sys.platform: # windows conf_path = os.path.join(os.environ.get('APPDATA'), 'glances') else: # Unix-like + per-user install conf_path = os.path.join('etc', 'glances') data_files.append((conf_path, ['conf/glances.conf'])) for mo in glob.glob('i18n/*/LC_MESSAGES/*.mo'): data_files.append( (os.path.dirname(mo).replace('i18n/', 'share/locale/'), [mo])) return data_files def get_requires(): requires = ['psutil>=2.0.0'] if sys.platform.startswith('win'): requires += ['colorconsole'] if sys.version_info < (2, 7): requires += ['argparse'] return requires setup( name='Glances', version='2.3', description="A cross-platform curses-based monitoring tool", long_description=open('README.rst').read(), author='Nicolas Hennion', author_email='nicolas@nicolargo.com', url='https://github.com/nicolargo/glances', # download_url='https://s3.amazonaws.com/glances/glances-2.3.tar.gz', license="LGPL", keywords="cli curses monitoring system", install_requires=get_requires(), extras_require={ 'WEB': ['bottle'], 'SENSORS': ['py3sensors'], 'BATINFO': ['batinfo'], 'SNMP': ['pysnmp'], 'CHART': ['matplotlib'], 'BROWSER': ['zeroconf>=0.16', 'netifaces'], 'RAID': ['pymdstat'], 'DOCKER': ['docker-py'], 'EXPORT': ['influxdb', 'statsd'], 'ACTION': ['pystache'] }, packages=['glances'], include_package_data=True, data_files=get_data_files(), test_suite="unitest.py", entry_points={"console_scripts": ["glances=glances:main"]}, classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Console :: Curses', 'Intended Audience :: Developers', 'Intended Audience :: End Users/Desktop', 'Intended Audience :: System Administrators', 'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)', 'Operating System :: OS Independent', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4' ] ) glances-2.3/sonar-project.properties000066400000000000000000000011211246314757600177100ustar00rootroot00000000000000# Required metadata sonar.projectKey=glances sonar.projectName=Glances sonar.projectVersion=2.3_beta # Path to the parent source code directory. # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. # Since SonarQube 4.2, this property is optional if sonar.modules is set. # If not set, SonarQube starts looking for source code from the directory containing # the sonar-project.properties file. sonar.sources=glances # Language sonar.language=py # Encoding of the source code sonar.sourceEncoding=UTF-8 # Additional parameters #sonar.my.property=valueglances-2.3/tox.ini000066400000000000000000000006261246314757600143300ustar00rootroot00000000000000# Tox (http://tox.testrun.org/) is a tool for running tests # Install: # pip install tox # Run: # tox [tox] envlist = py27, py34 [testenv] deps = flake8 requests psutil bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz commands = python unitest.py python unitest-restful.py python unitest-xmlrpc.py #flake8 --exclude=build,.tox,.git glances-2.3/uninstall.sh000077500000000000000000000006151246314757600153630ustar00rootroot00000000000000#!/bin/sh if [ $(id -u) -ne 0 ]; then echo -e "* ERROR: User $(whoami) is not root, and does not have sudo privileges" exit 1 fi if [ ! -f "setup.py" ]; then echo -e "* ERROR: Setup file doesn't exist" exit 1 fi python setup.py install --record install.record for i in $(cat install.record); do rm $i done echo -e "\n\n* SUCCESS: Uninstall complete." rm install.record glances-2.3/unitest-restful.py000077500000000000000000000153541246314757600165530ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # # Glances - An eye on your system # # Copyright (C) 2014 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Glances unitary tests suite for the RESTFul API.""" import gettext import locale import sys import time import unittest import shlex import subprocess import requests import json import types from glances.core.glances_globals import ( appname, is_linux, version ) SERVER_PORT = 61234 URL = "http://localhost:%s/api/2" % SERVER_PORT pid = None # Global variables # ================= # Unitary test is only available from a GNU/Linus machine if not is_linux: print( 'ERROR: RESTFul API unitaries tests should be ran on GNU/Linux operating system') sys.exit(2) else: print('Unitary tests for {0} {1}'.format(appname, version)) # Import local settings from glances.core.glances_globals import gettext_domain, locale_dir locale.setlocale(locale.LC_ALL, '') gettext.install(gettext_domain, locale_dir) # Init Glances core from glances.core.glances_main import GlancesMain core = GlancesMain() if not core.is_standalone(): print('ERROR: Glances core should be ran in standalone mode') sys.exit(1) # Init Glances stats from glances.core.glances_stats import GlancesStats stats = GlancesStats() # Unitest class # ============== class TestGlances(unittest.TestCase): """Test Glances class.""" def setUp(self): """The function is called *every time* before test_*.""" print('\n' + '=' * 78) def test_000_start_server(self): """Start the Glances Web Server""" print('INFO: [TEST_000] Start the Glances Web Server') global pid cmdline = "/usr/bin/python -m glances -w -p %s" % SERVER_PORT print("Run the Glances Web Server on port %s" % SERVER_PORT) args = shlex.split(cmdline) pid = subprocess.Popen(args) print("Please wait...") time.sleep(1) self.assertTrue(pid is not None) def test_001_all(self): """All""" method = "all" print('INFO: [TEST_001] Get all stats') print("HTTP RESTFul request: %s/%s" % (URL, method)) req = requests.get("%s/%s" % (URL, method)) self.assertTrue(req.ok) def test_002_pluginslist(self): """Plugins list""" method = "pluginslist" print('INFO: [TEST_002] Plugins list') print("HTTP RESTFul request: %s/%s" % (URL, method)) req = requests.get("%s/%s" % (URL, method)) self.assertTrue(req.ok) self.assertIsInstance(req.json(), types.ListType) self.assertIn('cpu', req.json()) def test_003_plugins(self): """Plugins""" method = "pluginslist" print('INFO: [TEST_003] Plugins') plist = requests.get("%s/%s" % (URL, method)) for p in plist.json(): print("HTTP RESTFul request: %s/%s" % (URL, p)) req = requests.get("%s/%s" % (URL, p)) self.assertTrue(req.ok) if p in ('uptime', 'now'): self.assertIsInstance(req.json(), types.UnicodeType) elif p in ('fs', 'monitor', 'percpu', 'sensors', 'alert', 'processlist', 'diskio', 'hddtemp', 'batpercent', 'network'): self.assertIsInstance(req.json(), types.ListType) elif p in ('psutilversion', 'help'): pass else: self.assertIsInstance(req.json(), types.DictType) def test_004_items(self): """Items""" method = "cpu" print('INFO: [TEST_004] Items for the CPU method') ilist = requests.get("%s/%s" % (URL, method)) for i in ilist.json(): print("HTTP RESTFul request: %s/%s/%s" % (URL, method, i)) req = requests.get("%s/%s/%s" % (URL, method, i)) self.assertTrue(req.ok) self.assertIsInstance(req.json(), types.DictType) self.assertIsInstance(req.json()[i], types.FloatType) def test_005_values(self): """Valuess""" method = "processlist" print('INFO: [TEST_005] Item=Value for the PROCESSLIST method') print("%s/%s/pid/0" % (URL, method)) req = requests.get("%s/%s/pid/0" % (URL, method)) self.assertTrue(req.ok) self.assertIsInstance(req.json(), types.DictType) def test_006_all_limits(self): """All""" method = "all/limits" print('INFO: [TEST_006] Get all limits') print("HTTP RESTFul request: %s/%s" % (URL, method)) req = requests.get("%s/%s" % (URL, method)) self.assertTrue(req.ok) self.assertIsInstance(req.json(), types.DictType) def test_007_all_views(self): """All""" method = "all/views" print('INFO: [TEST_007] Get all views') print("HTTP RESTFul request: %s/%s" % (URL, method)) req = requests.get("%s/%s" % (URL, method)) self.assertTrue(req.ok) self.assertIsInstance(req.json(), types.DictType) def test_008_plugins_limits(self): """Plugins limits""" method = "pluginslist" print('INFO: [TEST_008] Plugins limits') plist = requests.get("%s/%s" % (URL, method)) for p in plist.json(): print("HTTP RESTFul request: %s/%s/limits" % (URL, p)) req = requests.get("%s/%s/limits" % (URL, p)) self.assertTrue(req.ok) self.assertIsInstance(req.json(), types.DictType) def test_009_plugins_views(self): """Plugins views""" method = "pluginslist" print('INFO: [TEST_009] Plugins views') plist = requests.get("%s/%s" % (URL, method)) for p in plist.json(): print("HTTP RESTFul request: %s/%s/views" % (URL, p)) req = requests.get("%s/%s/views" % (URL, p)) self.assertTrue(req.ok) self.assertIsInstance(req.json(), types.DictType) def test_999_stop_server(self): """Stop the Glances Web Server""" print('INFO: [TEST_999] Stop the Glances Web Server') print("Stop the Glances Web Server") pid.terminate() print("Please wait...") time.sleep(1) self.assertTrue(True) if __name__ == '__main__': unittest.main() glances-2.3/unitest-xmlrpc.py000077500000000000000000000146631246314757600163760ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # # Glances - An eye on your system # # Copyright (C) 2014 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Glances unitary tests suite for the XML/RPC API.""" import gettext import locale import sys import time import unittest import shlex import subprocess import json import types try: from xmlrpc.client import ServerProxy except ImportError: # Python 2 from xmlrpclib import ServerProxy from glances.core.glances_globals import ( appname, is_linux, version ) SERVER_PORT = 61234 URL = "http://localhost:%s" % SERVER_PORT pid = None # Global variables # ================= # Unitary test is only available from a GNU/Linus machine if not is_linux: print( 'ERROR: XML/RPC API unitaries tests should be ran on GNU/Linux operating system') sys.exit(2) else: print('Unitary tests for {0} {1}'.format(appname, version)) # Import local settings from glances.core.glances_globals import gettext_domain, locale_dir locale.setlocale(locale.LC_ALL, '') gettext.install(gettext_domain, locale_dir) # Init Glances core from glances.core.glances_main import GlancesMain core = GlancesMain() if not core.is_standalone(): print('ERROR: Glances core should be ran in standalone mode') sys.exit(1) # Init Glances stats from glances.core.glances_stats import GlancesStats stats = GlancesStats() # Init the XML/RCP client client = ServerProxy(URL) # Unitest class # ============== class TestGlances(unittest.TestCase): """Test Glances class.""" def setUp(self): """The function is called *every time* before test_*.""" print('\n' + '=' * 78) def test_000_start_server(self): """Start the Glances Web Server""" print('INFO: [TEST_000] Start the Glances Web Server') global pid cmdline = "/usr/bin/python -m glances -s -p %s" % SERVER_PORT print("Run the Glances Server on port %s" % SERVER_PORT) args = shlex.split(cmdline) pid = subprocess.Popen(args) print("Please wait...") time.sleep(1) self.assertTrue(pid is not None) def test_001_all(self): """All""" method = "getAll()" print('INFO: [TEST_001] Connection test') print("XML/RPC request: %s" % method) req = json.loads(client.getAll()) self.assertIsInstance(req, types.DictType) def test_002_pluginslist(self): """Plugins list""" method = "getAllPlugins()" print('INFO: [TEST_002] Get plugins list') print("XML/RPC request: %s" % method) req = json.loads(client.getAllPlugins()) self.assertIsInstance(req, types.ListType) def test_003_system(self): """System""" method = "getSystem()" print('INFO: [TEST_003] Method: %s' % method) req = json.loads(client.getSystem()) self.assertIsInstance(req, types.DictType) def test_004_cpu(self): """CPU""" method = "getCpu(), getPerCpu(), getLoad() and getCore()" print('INFO: [TEST_004] Method: %s' % method) req = json.loads(client.getCpu()) self.assertIsInstance(req, types.DictType) req = json.loads(client.getPerCpu()) self.assertIsInstance(req, types.ListType) req = json.loads(client.getLoad()) self.assertIsInstance(req, types.DictType) req = json.loads(client.getCore()) self.assertIsInstance(req, types.DictType) def test_005_mem(self): """MEM""" method = "getMem() and getMemSwap()" print('INFO: [TEST_005] Method: %s' % method) req = json.loads(client.getMem()) self.assertIsInstance(req, types.DictType) req = json.loads(client.getMemSwap()) self.assertIsInstance(req, types.DictType) def test_006_net(self): """NETWORK""" method = "getNetwork()" print('INFO: [TEST_006] Method: %s' % method) req = json.loads(client.getNetwork()) self.assertIsInstance(req, types.ListType) def test_007_disk(self): """DISK""" method = "getFs() and getDiskIO()" print('INFO: [TEST_007] Method: %s' % method) req = json.loads(client.getFs()) self.assertIsInstance(req, types.ListType) req = json.loads(client.getDiskIO()) self.assertIsInstance(req, types.ListType) def test_008_sensors(self): """SENSORS""" method = "getSensors()" print('INFO: [TEST_008] Method: %s' % method) req = json.loads(client.getSensors()) self.assertIsInstance(req, types.ListType) def test_009_process(self): """PROCESS""" method = "getProcessCount() and getProcessList()" print('INFO: [TEST_009] Method: %s' % method) req = json.loads(client.getProcessCount()) self.assertIsInstance(req, types.DictType) req = json.loads(client.getProcessList()) self.assertIsInstance(req, types.ListType) def test_010_all_limits(self): """All limits""" method = "getAllLimits()" print('INFO: [TEST_010] Method: %s' % method) req = json.loads(client.getAllLimits()) self.assertIsInstance(req, types.DictType) self.assertIsInstance(req['cpu'], types.DictType) def test_011_all_views(self): """All views""" method = "getAllViews()" print('INFO: [TEST_011] Method: %s' % method) req = json.loads(client.getAllViews()) self.assertIsInstance(req, types.DictType) self.assertIsInstance(req['cpu'], types.DictType) def test_999_stop_server(self): """Stop the Glances Web Server""" print('INFO: [TEST_999] Stop the Glances Server') print("Stop the Glances Server") pid.terminate() print("Please wait...") time.sleep(1) self.assertTrue(True) if __name__ == '__main__': unittest.main() glances-2.3/unitest.py000077500000000000000000000164611246314757600150710ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # # Glances - An eye on your system # # Copyright (C) 2014 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Glances is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . """Glances unitary tests suite.""" import gettext import locale import sys import time import unittest from glances.core.glances_globals import ( appname, is_linux, version ) # Global variables # ================= # Unitary test is only available from a GNU/Linus machine if not is_linux: print('ERROR: Unitaries tests should be ran on GNU/Linux operating system') sys.exit(2) else: print('Unitary tests for {0} {1}'.format(appname, version)) # Import local settings from glances.core.glances_globals import gettext_domain, locale_dir locale.setlocale(locale.LC_ALL, '') gettext.install(gettext_domain, locale_dir) # Init Glances core from glances.core.glances_main import GlancesMain core = GlancesMain() if not core.is_standalone(): print('ERROR: Glances core should be ran in standalone mode') sys.exit(1) # Init Glances stats from glances.core.glances_stats import GlancesStats stats = GlancesStats() # Unitest class # ============== class TestGlances(unittest.TestCase): """Test Glances class.""" def setUp(self): """The function is called *every time* before test_*.""" print('\n' + '=' * 78) def test_000_update(self): """Update stats (mandatory step for all the stats). The update is made twice (for rate computation). """ print('INFO: [TEST_000] Test the stats update function') try: stats.update() except: print('ERROR: Stats update failed') self.assertTrue(False) time.sleep(1) try: stats.update() except: print('ERROR: Stats update failed') self.assertTrue(False) self.assertTrue(True) def test_001_plugins(self): """Check mandatory plugins.""" plugins_to_check = ['system', 'cpu', 'load', 'mem', 'memswap', 'network', 'diskio', 'fs'] print('INFO: [TEST_001] Check the mandatory plugins list: %s' % ', '.join(plugins_to_check)) plugins_list = stats.getAllPlugins() for plugin in plugins_to_check: self.assertTrue(plugin in plugins_list) def test_002_cpu(self): """Check SYSTEM plugin.""" stats_to_check = ['hostname', 'os_name'] print('INFO: [TEST_002] Check SYSTEM stats: %s' % ', '.join(stats_to_check)) stats_grab = stats.get_plugin('system').get_raw() for stat in stats_to_check: # Check that the key exist self.assertTrue(stat in stats_grab, msg='Cannot find key: %s' % stat) print('INFO: SYSTEM stats: %s' % stats_grab) def test_003_cpu(self): """Check CPU plugin.""" stats_to_check = ['system', 'user', 'idle'] print('INFO: [TEST_003] Check mandatory CPU stats: %s' % ', '.join(stats_to_check)) stats_grab = stats.get_plugin('cpu').get_raw() for stat in stats_to_check: # Check that the key exist self.assertTrue(stat in stats_grab, msg='Cannot find key: %s' % stat) # Check that % is > 0 and < 100 self.assertGreaterEqual(stats_grab[stat], 0) self.assertLessEqual(stats_grab[stat], 100) print('INFO: CPU stats: %s' % stats_grab) def test_004_load(self): """Check LOAD plugin.""" stats_to_check = ['cpucore', 'min1', 'min5', 'min15'] print('INFO: [TEST_004] Check LOAD stats: %s' % ', '.join(stats_to_check)) stats_grab = stats.get_plugin('load').get_raw() for stat in stats_to_check: # Check that the key exist self.assertTrue(stat in stats_grab, msg='Cannot find key: %s' % stat) # Check that % is > 0 self.assertGreaterEqual(stats_grab[stat], 0) print('INFO: LOAD stats: %s' % stats_grab) def test_005_mem(self): """Check MEM plugin.""" stats_to_check = ['available', 'used', 'free', 'total'] print('INFO: [TEST_005] Check MEM stats: %s' % ', '.join(stats_to_check)) stats_grab = stats.get_plugin('mem').get_raw() for stat in stats_to_check: # Check that the key exist self.assertTrue(stat in stats_grab, msg='Cannot find key: %s' % stat) # Check that % is > 0 self.assertGreaterEqual(stats_grab[stat], 0) print('INFO: MEM stats: %s' % stats_grab) def test_006_swap(self): """Check MEMSWAP plugin.""" stats_to_check = ['used', 'free', 'total'] print('INFO: [TEST_006] Check SWAP stats: %s' % ', '.join(stats_to_check)) stats_grab = stats.get_plugin('memswap').get_raw() for stat in stats_to_check: # Check that the key exist self.assertTrue(stat in stats_grab, msg='Cannot find key: %s' % stat) # Check that % is > 0 self.assertGreaterEqual(stats_grab[stat], 0) print('INFO: SWAP stats: %s' % stats_grab) def test_007_network(self): """Check NETWORK plugin.""" print('INFO: [TEST_007] Check NETWORK stats') stats_grab = stats.get_plugin('network').get_raw() self.assertTrue(type(stats_grab) is list, msg='Network stats is not a list') print('INFO: NETWORK stats: %s' % stats_grab) def test_008_diskio(self): """Check DISKIO plugin.""" print('INFO: [TEST_008] Check DiskIO stats') stats_grab = stats.get_plugin('diskio').get_raw() self.assertTrue(type(stats_grab) is list, msg='DiskIO stats is not a list') print('INFO: diskio stats: %s' % stats_grab) def test_009_fs(self): """Check File System plugin.""" # stats_to_check = [ ] print('INFO: [TEST_009] Check FS stats') stats_grab = stats.get_plugin('fs').get_raw() self.assertTrue(type(stats_grab) is list, msg='FileSystem stats is not a list') print('INFO: FS stats: %s' % stats_grab) def test_010_processes(self): """Check Process plugin.""" # stats_to_check = [ ] print('INFO: [TEST_010] Check PROCESS stats') stats_grab = stats.get_plugin('processcount').get_raw() # total = stats_grab['total'] self.assertTrue(type(stats_grab) is dict, msg='Process count stats is not a dict') print('INFO: PROCESS count stats: %s' % stats_grab) stats_grab = stats.get_plugin('processlist').get_raw() self.assertTrue(type(stats_grab) is list, msg='Process count stats is not a list') print('INFO: PROCESS list stats: %s items in the list' % len(stats_grab)) # Check if number of processes in the list equal counter # self.assertEqual(total, len(stats_grab)) if __name__ == '__main__': unittest.main()