plainbox-provider-checkbox-0.25/manage.py0000775000175000017500000000054112646171221021675 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 from plainbox.provider_manager import setup from plainbox.provider_manager import N_ setup( name='plainbox-provider-checkbox', namespace='2013.com.canonical.certification', version="0.25", description=N_("Checkbox provider"), gettext_domain='plainbox-provider-checkbox', strict=False, deprecated=False, ) plainbox-provider-checkbox-0.25/units/0000775000175000017500000000000012646152434021237 5ustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/units/hwsubmit.pxu0000664000175000017500000000116112646152433023635 0ustar sylvainsylvain00000000000000id: hwsubmit _name: All HW Submit Tests unit: test plan include: cdimage cpuinfo device dmi dpkg gconf lsb meminfo module package uname usb info/buildstamp cpuinfo_attachment dmesg_attachment dmi_attachment dmidecode_attachment kernel_cmdline_attachment recovery_info_attachment dell_bto_xml_attachment lsmod_attachment dkms_info_attachment lspci_attachment lspci_standard_config_attachment modinfo_attachment modprobe_attachment modules_attachment sysfs_attachment sysctl_attachment udev_attachment plainbox-provider-checkbox-0.25/units/autotesting.pxu0000664000175000017500000000723112646152433024345 0ustar sylvainsylvain00000000000000id: autotesting _name: Automated Tests unit: test plan description: This test plan is used for automated testing of the test cases themselves. The resources jobs are needed for a valid submission, so they are included explicitly, even if they are usually run implicitly by jobs requiring them. include: IEEE_80211 cpuinfo dpkg lsb package uname acpi_sleep_attachment codecs_attachment cpuinfo_attachment dmesg_attachment dmi_attachment dmidecode_attachment efi_attachment lspci_attachment lspci_standard_config_attachment meminfo_attachment modinfo_attachment modprobe_attachment modules_attachment sysctl_attachment sysfs_attachment udev_attachment recovery_info_attachment dell_bto_xml_attachment lsmod_attachment dkms_info_attachment audio/alsa_record_playback_automated bluetooth/detect-output camera/detect camera/multiple-resolution-images cpu/scaling_test cpu/scaling_test-log-attach cpu/offlining_test cpu/topology disk/read_performance disk/read_performance_.* graphics/xorg-version graphics/1_compiz_check_.* graphics/xorg-failsafe graphics/xorg-process graphics/1_screenshot_.* 1_screenshot_.*.jpg graphics/1_screenshot_fullscreen_video_.* 1_screenshot_fullscreen_video_.*.jpg install/apt-get-gets-updates mediacard/sd-preinserted memory/info memory/check miscellanea/submission-resources miscellanea/fwts_test miscellanea/fwts_results.log ethernet/detect networking/http networking/gateway_ping power-management/tickless_idle power-management/rtc power-management/fwts_wakealarm power-management/fwts_wakealarm-log-attach usb/detect usb/storage-preinserted wireless/wireless_scanning wireless/wireless_connection_wpa_bg wireless/wireless_connection_open_bg wireless/wireless_connection_wpa_n wireless/wireless_connection_open_n wireless/wireless_connection_wpa_ac wireless/wireless_connection_open_ac wireless/monitor_wireless_connection_udp suspend/audio_before_suspend suspend/bluetooth_obex_send_before_suspend suspend/bluetooth_obex_browse_before_suspend suspend/bluetooth_obex_get_before_suspend suspend/cpu_before_suspend suspend/network_before_suspend suspend/memory_before_suspend suspend/suspend_advanced_auto suspend/suspend-single-log-check suspend/audio_after_suspend_auto suspend/network_resume_time_auto suspend/wifi_resume_time_auto suspend/usb_storage_preinserted_after_suspend suspend/record_playback_after_suspend_auto suspend/bluetooth_obex_send_after_suspend_auto suspend/bluetooth_obex_browse_after_suspend_auto suspend/bluetooth_obex_get_after_suspend_auto suspend/cpu_after_suspend_auto suspend/memory_after_suspend_auto suspend/wireless_connection_after_suspend_wpa_bg_auto suspend/wireless_connection_after_suspend_open_bg_auto suspend/wireless_connection_after_suspend_wpa_n_auto suspend/wireless_connection_after_suspend_open_n_auto suspend/wireless_connection_after_suspend_wpa_ac_auto suspend/wireless_connection_after_suspend_open_ac_auto suspend/gpu_lockup_after_suspend suspend/screenshot_after_suspend screenshot_after_suspend.jpg bootstrap_include: disk/read_performance graphics/generator_compiz_check graphics/generator_screenshot graphics/generator_screenshot.jpg graphics/generator_screenshot_fullscreen_video graphics/generator_screenshot_fullscreen_video.jpg graphics/generator_screenshot_fullscreen_video graphics/generator_screenshot_fullscreen_video.jpg plainbox-provider-checkbox-0.25/units/dock.pxu0000664000175000017500000011224612646152433022722 0ustar sylvainsylvain00000000000000id: dock/docking plugin: manual estimated_duration: 30.00 _summary: Docking test _purpose: This test will check the device can be used after docking. _steps: 1. Dock the device to the docking unit. _verification: Is the device working as expected after being docked? id: dock/monitor-displayport depends: dock/docking estimated_duration: 120.0 _summary: DisplayPort test on the dock plugin: manual _purpose: This test will check the DisplayPort(s) on the dock. _steps: Skip this test if the dock does not have a DisplayPort. 1. Connect a display (if not already connected) to the DisplayPort on the dock 2. Repeat step 1 for each additional DisplayPorts, if any _verification: Was the desktop displayed correctly on both screens? id: dock/monitor-dvi depends: dock/docking estimated_duration: 120.0 _summary: DVI port test on the dock plugin: manual _purpose: This test will check the DVI port(s) on the dock. _steps: Skip this test if the dock does not have a DVI port. 1. Connect a display (if not already connected) to the DVI port on the dock 2. Repeat step 1 for each additional DVI port, if any _verification: Was the desktop displayed correctly on both screens? id: dock/monitor-hdmi depends: dock/docking estimated_duration: 120.0 _summary: HDMI port test on the dock plugin: manual _purpose: This test will check the HDMI port(s) on the dock. _steps: Skip this test if the dock does not have a HDMI port. 1. Connect a display (if not already connected) to the HDMI port on the dock 2. Repeat step 1 for each additional HDMI port, if any _verification: Was the desktop displayed correctly on both screens? id: dock/monitor-vga depends: dock/docking estimated_duration: 120.0 _summary: VGA port test on the dock plugin: manual _purpose: This test will check the VGA port(s) on the dock. _steps: Skip this test if the dock does not have a VGA port. 1. Connect a display (if not already connected) to the VGA port on the dock 2. Repeat step 1 for each additional VGA port, if any _verification: Was the desktop displayed correctly on both screens? id: dock/monitor-multi-head depends: dock/docking estimated_duration: 120.0 _summary: Multiple monitors test while docked plugin: manual _purpose: This test verifies that multi-monitor output works using the dock. You will need at least two external monitors to perform this test. _steps: Skip this test if your video card or the dock do not support multiple monitors. 1. If your dock provides more than one monitor outputs, connect two monitors 2. Open the "Displays" tool (open the dash and search for "Displays") 3. Configure your output to provide one desktop across all the monitors 4. Open any application and drag its window from one monitor to the next. _verification: Was the stretched desktop displayed correctly across all the screens? id: dock/keys-video-out depends: dock/docking estimated_duration: 120.0 _summary: Video Out hotkey test plugin: manual _purpose: Validate that the External Video hotkey is working as expected _steps: 1. Plug in an external monitor 2. Press the display hotkey to change the monitors configuration _verification: Check that the video signal can be mirrored, extended, displayed on external or onboard only. ### Audio Tests ### plugin: shell id: dock/audio-list-devices estimated_duration: 1.0 _summary: List audio devices depends: dock/docking requires: device.category == 'AUDIO' package.name == 'alsa-base' command: cat /proc/asound/cards _description: Test to detect audio devices id: dock/audio-playback-hdmi depends: dock/docking requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' _summary: HDMI audio test plugin: user-interact-verify estimated_duration: 30.0 command: audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --verbose --device=hdmi --volume=50 gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _purpose: Dock HDMI audio interface verification _steps: 1. Plug an external HDMI device with sound to the dock (use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test) 2. Go to the Sound settings and make sure the correct Output is selected 3. Click the Test button _verification: Did you hear the sound from the HDMI device? id: dock/audio-playback-displayport depends: dock/docking requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' _summary: DisplayPort audio test plugin: user-interact-verify estimated_duration: 30.0 command: audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --verbose --device=hdmi --volume=50 gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _purpose: Dock DisplayPort audio interface verification _steps: 1. Plug an external DisplayPort device with sound to the dock (use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test) 2. Go to the Sound settings and make sure the correct Output is selected 3. Click the Test button _verification: Did you hear the sound from the DisplayPort device? id: dock/audio-playback-headphones plugin: user-interact-verify estimated_duration: 30.0 _summary: Headphones output test depends: dock/audio-list-devices requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 gst_pipeline_test -t 2 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _purpose: This test will check that headphones connector works correctly. (Skip this test if there is no headphone connector on the dock) _steps: 1. Connect a pair of headphones to the dock 2. Click the Test button to play a sound to your audio device _verification: Did you hear a sound through the headphones and did the sound play without any distortion, clicks or other strange noises from your headphones? plugin: user-interact-verify id: dock/audio-alsa-record-playback-external estimated_duration: 30.0 _summary: External microphone plugged to the dock to record sound test depends: dock/audio-playback-headphones requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'pulseaudio-utils' package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 alsa_record_playback EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _purpose: This test will check that recording sound using an external microphone works correctly (Skip this test if the dock does not have a microphone connector) _steps: 1. Connect a microphone to the dock's microphone port 2. Click "Test", then speak into the external microphone 3. After a few seconds, your speech will be played back to you _verification: Did you hear your speech played back? plugin: shell id: dock/audio-alsa-info-collect estimated_duration: 2.0 _summary: Collect audio-related system information depends: dock/docking command: alsa_info --no-dialog --no-upload --output ${PLAINBOX_SESSION_SHARE}/alsa_info.log _description: Collect audio-related system information. This data can be used to simulate this computer's audio subsystem and perform more detailed tests under a controlled environment. plugin: attachment id: dock/audio-alsa-info-attachment depends: dock/audio-alsa-info-collect estimated_duration: 1.0 _summary: Attach audio hardware data log to results command: [ -e ${PLAINBOX_SESSION_SHARE}/alsa_info.log ] && cat ${PLAINBOX_SESSION_SHARE}/alsa_info.log _description: Attaches the audio hardware data collection log to the results. plugin: manual id: dock/audio-external-lineout depends: dock/docking estimated_duration: 30.0 _summary: Line-out connection test _purpose: Check that external line-out connection works correctly (Skip this test if dock does not have a line out connector) _steps: 1. Insert cable to speakers (with built-in amplifiers) on the dock's line-out port 2. Open system sound preferences, 'Output' tab, select 'Line-out' on the connector list. Click the Test button 3. On the system sound preferences, select 'Internal Audio' on the device list and click 'Test Speakers' to check left and right channel _verification: 1. Do you hear a sound in the speakers? The internal speakers should *not* be muted automatically 2. Do you hear the sound coming out on the corresponding channel? plugin: user-interact-verify id: dock/audio-external-linein depends: dock/docking estimated_duration: 120.0 _summary: Line-in connection test requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'pulseaudio-utils' package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 alsa_record_playback EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _purpose: Check that external line-in connection works correctly (Skip this test if the dock does not have a line in connector) _steps: 1. Use a cable to connect the dock's line-in port to an external line-out source. 2. Open system sound preferences, 'Input' tab, select 'Line-in' on the connector list. Click the Test button 3. After a few seconds, your recording will be played back to you. _verification: Did you hear your recording? id: dock/audio-speaker-headphone-plug-detection plugin: user-interact depends: dock/docking estimated_duration: 60.0 _summary: Headphones recognized when plugged to the dock test requires: device.category == 'AUDIO' package.name == 'pulseaudio-utils' command: pulse-active-port-change sinks _purpose: Check that system detects speakers or headphones being plugged in (Skip this test if the dock does not have headphones connector) _steps: 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack 2. Locate the speaker / headphone jack on the dock under test 3. Run the test (you have 30 seconds from now on) 4. Plug headphones or speakers into the appropriate jack 5. Unplug the device for subsequent tests. _verification: Verification is automatic, no action is required. The test times out after 30 seconds (and fails in that case). id: dock/audio-microphone-plug-detection plugin: user-interact depends: dock/docking estimated_duration: 60.0 _summary: Microphone recognized when plugged to the dock test requires: device.category == 'AUDIO' package.name == 'pulseaudio-utils' command: pulse-active-port-change sources _purpose: Check that system detects a microphone being plugged in (Skip this test if the dock does not have a microphone connector) _steps: 1. Prepare a microphone with a standard 3.5mm jack 2. Locate the microphone jack on the dock under test. Keep in mind that it may be shared with the headphone jack. 3. Run the test (you have 30 seconds from now on) 4. Plug the microphone into the appropriate jack 5. Unplug the device for subsequent tests. _verification: Verification is automatic, no action is required. The test times out after 30 seconds (and fails in that case). ### Networking Tests ### id: dock/networking-gateway-ping plugin: user-interact-verify depends: dock/docking ethernet/detect command: gateway_ping_test estimated_duration: 10.00 _summary: Ping test using dock's Ethernet connectivity _purpose: Tests whether the system has a working Internet connection. _steps: 1. Make sure the dock is connected to network using an Ethernet cable 2. Make sure the laptop itself is not connected to any Ethernet cable 3. Launch the test _verification: Was the test able to ping the network using the Ethernet connection? id: dock/networking-ntp plugin: user-interact-verify depends: dock/docking requires: package.name == 'ntpdate' user: root command: network_ntp_test estimated_duration: 10.00 _summary: NTP sync test using dock's Ethernet connectivity _purpose: Test to see if we can sync local clock to an NTP server _steps: 1. Make sure the dock is connected to network using an Ethernet cable 2. Make sure the laptop itself is not connected to any Ethernet cable 3. Launch the test _verification: Was the test able to synchronize system time using the Ethernet connection? ### USB Tests ### plugin: user-interact-verify id: dock/usb-HID estimated_duration: 20.0 _summary: USB HID device test command: keyboard_test _purpose: This test will check that you can use a USB HID device _steps: 1. Enable either a USB mouse or keyboard 2. For mice, perform actions such as moving the pointer, right and left button clicks and double clicks 3. For keyboards, click the Test button to lauch a small tool. Type some text and close the tool. _verification: Did the device work as expected? plugin: user-interact id: dock/usb-insert estimated_duration: 10.0 _summary: USB drive insertion test command: removable_storage_watcher insert usb _purpose: This test will check that the system correctly detects the insertion of a USB storage device plugged on the dock _steps: 1. Click "Test" and insert a USB storage device, preferably a HDD, in one of the dock's port. Although a USB pen drive may be used it might cause performance related tests to fail. (Note: this test will time-out after 20 seconds.) 2. Do not unplug the device after the test. _verification: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact id: dock/usb3-insert estimated_duration: 10.0 _summary: USB3 drive insertion test command: removable_storage_watcher -m 500000000 insert usb _purpose: This test will check that the system correctly detects the insertion of a USB 3.0 storage device _steps: 1. Click "Test" and insert a USB 3.0 storage device, preferably a HDD, in one of the dock's USB 3.0 port. Although a USB 3.0 pen drive may be used it might cause performance related tests to fail. (Note: this test will time-out after 20 seconds.) 2. Do not unplug the device after the test. _verification: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact id: dock/usb-remove depends: dock/usb-insert estimated_duration: 10.0 _summary: USB drive removal test command: removable_storage_watcher remove usb _purpose: This test will check that the system correctly detects the removal of a USB storage device _steps: 1. Click "Test" and remove the USB device from the dock. (Note: this test will time-out after 20 seconds.) _verification: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact id: dock/usb3-remove depends: dock/usb3-insert estimated_duration: 10.0 _summary: USB3 drive removal test command: removable_storage_watcher -m 500000000 remove usb _purpose: This test will check that the system correctly detects the removal of a USB 3.0 storage device _steps: 1. Click "Test" and remove the USB 3.0 device from the dock. (Note: this test will time-out after 20 seconds.) _verification: The verification of this test is automated. Do not change the automatically selected result. plugin: shell id: dock/usb-storage-automated depends: dock/usb-insert user: root estimated_duration: 45.0 _summary: USB drive storage test command: removable_storage_test -s 268400000 usb _description: This test is automated and executes after the dock/usb_insert test is run. plugin: shell id: dock/usb3-storage-automated depends: dock/usb3-insert user: root estimated_duration: 45.0 _summary: USB3 drive storage test command: removable_storage_test -s 268400000 -m 500000000 usb --driver xhci_hcd _description: This test is automated and executes after the dock/usb3_insert test is run. ### ACPI ### id: dock/battery-charging _summary: Battery charging when docked test plugin: shell depends: dock/docking estimated_duration: 1.0 command: if [ "`upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep "state" | awk '{print $2}'`" = "discharging" ] ; then exit 1 ; fi _description: This test will make sure the laptop is being charged while connected to the dock. plugin: shell id: dock/network-before-suspend depends: ethernet/detect estimated_duration: 1.2 _summary: Network status before suspend _description: Record the current network before suspending. command: set -o pipefail; gateway_ping_test | tee $PLAINBOX_SESSION_SHARE/network_before_suspend.txt plugin: shell id: dock/audio-before-suspend estimated_duration: 1.0 _summary: Audio status before suspend requires: device.category == 'AUDIO' package.name == 'alsa-base' _description: Record mixer settings before suspending. command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/audio_settings_before_suspend id: dock/suspend-dock-resume plugin: manual estimated_duration: 120.00 _summary: Suspend the device, dock it and resume it _purpose: This test will check the device can be suspended, docked and resumed properly _steps: 1. If the laptop is currently docked, undock it now 2. Suspend the laptop (e.g. by closing its lid) 3. Dock the laptop 4. Resume the laptop (e.g. by pressing the Power button on the dock) _verification: Is the device working as expected after being docked and resumed? id: dock/networking-gateway-ping-after-suspend plugin: shell depends: dock/suspend-dock-resume ethernet/detect command: gateway_ping_test estimated_duration: 2.00 _summary: Network gateway ping after suspend _description: Tests whether the system has a working Internet connection. plugin: user-interact id: dock/usb-insert-after-suspend depends: dock/suspend-dock-resume estimated_duration: 10.0 _summary: USB drive insertion after resuming command: removable_storage_watcher insert usb _purpose: This test will check that the system correctly detects the insertion of a USB storage device plugged on the dock after suspend _steps: 1. Click "Test" and insert a USB storage device, preferably a HDD, in one of the dock's port. Although a USB pen drive may be used it might cause performance related tests to fail. (Note: this test will time-out after 20 seconds.) 2. Do not unplug the device after the test. _verification: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact id: dock/usb3-insert-after-suspend depends: dock/suspend-dock-resume estimated_duration: 10.0 _summary: USB3 drive insertion after resuming command: removable_storage_watcher -m 500000000 insert usb _purpose: This test will check that the system correctly detects the insertion of a USB 3.0 storage device after suspend _steps: 1. Click "Test" and insert a USB 3.0 storage device, preferably a HDD, in one of the dock's USB 3.0 port. Although a USB 3.0 pen drive may be used it might cause performance related tests to fail. (Note: this test will time-out after 20 seconds.) 2. Do not unplug the device after the test. _verification: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact id: dock/usb-remove-after-suspend depends: dock/usb-insert-after-suspend estimated_duration: 10.0 _summary: USB drive removal after resuming command: removable_storage_watcher remove usb _purpose: This test will check that the system correctly detects the removal of a USB storage device after suspend _steps: 1. Click "Test" and remove the USB device from the dock. (Note: this test will time-out after 20 seconds.) _verification: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact id: dock/usb3-remove-after-suspend depends: dock/usb3-insert-after-suspend estimated_duration: 10.0 _summary: USB3 drive removal after resuming command: removable_storage_watcher -m 500000000 remove usb _purpose: This test will check that the system correctly detects the removal of a USB 3.0 storage device after suspend _steps: 1. Click "Test" and remove the USB 3.0 device from the dock. (Note: this test will time-out after 20 seconds.) _verification: The verification of this test is automated. Do not change the automatically selected result. plugin: shell id: dock/usb-storage-automated-after-suspend depends: dock/usb-insert-after-suspend user: root estimated_duration: 45.0 _summary: USB drive storage test after resuming command: removable_storage_test -s 268400000 usb _description: This test is automated and executes after the dock/usb-insert test is run. plugin: shell id: dock/usb3-storage-automated-after-suspend depends: dock/usb3-insert-after-suspend user: root estimated_duration: 45.0 _summary: USB3 drive storage test after resuming command: removable_storage_test -s 268400000 -m 500000000 usb --driver xhci_hcd _description: This test is automated and executes after the dock/usb3-insert test is run. plugin: user-interact-verify id: dock/usb-HID-after-suspend depends: dock/suspend-dock-resume estimated_duration: 20.0 _summary: USB HID device test after resuming command: keyboard_test _purpose: This test will check that you can use a USB HID device _steps: 1. Enable either a USB mouse or keyboard 2. For mice, perform actions such as moving the pointer, right and left button clicks and double clicks 3. For keyboards, click the Test button to lauch a small tool. Type some text and close the tool. _verification: Did the device work as expected? id: dock/monitor-displayport-after-suspend depends: dock/suspend-dock-resume estimated_duration: 120.0 _summary: DisplayPort test on the dock after resuming plugin: manual _purpose: This test will check the DisplayPort(s) on the dock after resuming. _steps: Skip this test if the dock does not have a DisplayPort. 1. Connect a display (if not already connected) to the DisplayPort on the dock 2. Repeat step 1 for each additional DisplayPorts, if any _verification: Was the desktop displayed correctly on both screens? id: dock/monitor-dvi-after-suspend depends: dock/suspend-dock-resume estimated_duration: 120.0 _summary: DVI port test on the dock after resuming plugin: manual _purpose: This test will check the DVI port(s) on the dock after resuming. _steps: Skip this test if the dock does not have a DVI port. 1. Connect a display (if not already connected) to the DVI port on the dock 2. Repeat step 1 for each additional DVI port, if any _verification: Was the desktop displayed correctly on both screens? id: dock/monitor-hdmi-after-suspend depends: dock/suspend-dock-resume estimated_duration: 120.0 _summary: HDMI port test on the dock after resuming plugin: manual _purpose: This test will check the HDMI port(s) on the dock after resuming. _steps: Skip this test if the dock does not have a HDMI port. 1. Connect a display (if not already connected) to the HDMI port on the dock 2. Repeat step 1 for each additional HDMI port, if any _verification: Was the desktop displayed correctly on both screens? id: dock/monitor-vga-after-suspend depends: dock/suspend-dock-resume estimated_duration: 120.0 _summary: VGA port test on the dock after resuming plugin: manual _purpose: This test will check the VGA port(s) on the dock after resuming. _steps: Skip this test if the dock does not have a VGA port. 1. Connect a display (if not already connected) to the VGA port on the dock 2. Repeat step 1 for each additional VGA port, if any _verification: Was the desktop displayed correctly on both screens? id: dock/suspend-undock-resume plugin: manual estimated_duration: 120.00 _summary: Suspend the device, undock it and resume it _purpose: This test will check the device can be suspended, undocked and resumed properly _steps: 1. If the laptop is currently undocked, dock it now 2. Suspend the laptop (e.g. by closing its lid) 3. Undock the laptop 4. Resume the laptop (e.g. by pressing its Power button) _verification: Is the device working as expected after being undocked and resumed? plugin: shell id: dock/wireless-connection-after-suspend-wpa-bg depends: dock/suspend-undock-resume estimated_duration: 20.0 _summary: Wireless connection after suspend (WPA BG) requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: WPA_BG_SSID WPA_BG_PSK command: trap "nmcli con delete id $WPA_BG_SSID" EXIT if create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; then INTERFACE=`nmcli dev status | awk '/802-11-wireless/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11b/g protocols after the system has been suspended. plugin: shell id: dock/wireless-connection-after-suspend-open-bg depends: dock/suspend-undock-resume estimated_duration: 1.2 _summary: Wireless connection after suspend (Open BG) requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: OPEN_BG_SSID command: trap "nmcli con delete id $OPEN_BG_SSID" EXIT if create_connection wifi $OPEN_BG_SSID; then INTERFACE=`nmcli dev status | awk '/802-11-wireless/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11b/g protocols after the system has been suspended. plugin: shell id: dock/wireless-connection-after-suspend-wpa-n depends: dock/suspend-undock-resume estimated_duration: 1.2 _summary: Wireless connection after suspend (WPA N) requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: WPA_N_SSID WPA_N_PSK command: trap "nmcli con delete id $WPA_N_SSID" EXIT if create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; then INTERFACE=`nmcli dev status | awk '/802-11-wireless/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11n protocol after the system has been suspended. plugin: shell id: dock/wireless-connection-after-suspend-open-n depends: dock/suspend-undock-resume estimated_duration: 1.2 _summary: Wireless connection after suspend (Open N) requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: OPEN_N_SSID command: trap "nmcli con delete id $OPEN_N_SSID" EXIT if create_connection wifi $OPEN_N_SSID; then INTERFACE=`nmcli dev status | awk '/802-11-wireless/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11n protocol after the system has been suspended. plugin: shell id: dock/wireless-connection-after-suspend-wpa-ac depends: dock/suspend-undock-resume estimated_duration: 1.2 _summary: Wireless connection after suspend (WPA AC) requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' IEEE_80211.ac == 'supported' user: root environ: WPA_AC_SSID WPA_AC_PSK command: trap "nmcli con delete id $WPA_AC_SSID" EXIT if create_connection wifi $WPA_AC_SSID --security=wpa --key=$WPA_AC_PSK; then INTERFACE=`nmcli dev status | awk '/802-11-wireless/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11ac protocol after the system has been suspended. plugin: shell id: dock/wireless-connection-after-suspend-open-ac depends: dock/suspend-undock-resume estimated_duration: 1.2 _summary: Wireless connection after suspend (Open AC) requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' IEEE_80211.ac == 'supported' user: root environ: OPEN_AC_SSID command: trap "nmcli con delete id $OPEN_AC_SSID" EXIT if create_connection wifi $OPEN_AC_SSID; then INTERFACE=`nmcli dev status | awk '/802-11-wireless/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11ac protocol after the system has been suspended. plugin: shell id: dock/audio-after-suspend estimated_duration: 1.0 _summary: Audio after resuming test requires: device.category == 'AUDIO' package.name == 'alsa-base' depends: dock/suspend-undock-resume dock/audio-before-suspend _description: Verify that mixer settings after suspend are the same as before suspend. command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/audio_settings_after_suspend diff $PLAINBOX_SESSION_SHARE/audio_settings_before_suspend $PLAINBOX_SESSION_SHARE/audio_settings_after_suspend plugin: shell id: dock/record-playback-after-suspend estimated_duration: 10.0 _summary: Record playback after resuming depends: dock/suspend-undock-resume requires: package.name == 'python3-gi' package.name == 'gir1.2-gstreamer-1.0' package.name == 'libgstreamer1.0-0' package.name == 'gstreamer1.0-plugins-good' package.name == 'gstreamer1.0-pulseaudio' package.name == 'alsa-base' device.category == 'AUDIO' command: audio_test _description: This will check to make sure that your audio device works properly after a suspend and resume. This may work fine with speakers and onboard microphone, however, it works best if used with a cable connecting the audio-out jack to the audio-in jack. plugin: manual id: dock/expresscard-verification estimated_duration: 10.0 _summary: ExpressCard slot verification depends: dock/docking _purpose: This will verify that an ExpressCard slot on the dock can detect inserted devices. _steps: Skip this test if you do not have an ExpressCard slot on the dock. 1. Plug an ExpressCard device into the ExpressCard slot _verification: Was the device correctly detected? plugin: user-interact id: dock/firewire-insert estimated_duration: 20.0 _summary: FireWire HDD insertion test depends: dock/docking command: removable_storage_watcher insert firewire _purpose: This test will check the system can detect the insertion of a FireWire HDD on the dock _steps: (Skip this test id there is no FireWire connector on the dock) 1. Click 'Test' to begin the test. This test will timeout and fail if the insertion has not been detected within 20 seconds. 2. Plug a FireWire HDD into an available FireWire port. _verification: The verification of this test is automated. Do not change the automatically selected result plugin: shell id: dock/firewire-storage-test estimated_duration: 45.0 _summary: FireWire HDD storage test depends: dock/docking dock/firewire-insert user: root command: removable_storage_test -s 268400000 firewire _description: This is an automated test which performs read/write operations on an attached FireWire HDD plugin: user-interact id: dock/firewire-remove estimated_duration: 20.0 _summary: FireWire HDD removal test depends: dock/firewire-insert command: removable_storage_watcher remove firewire _purpose: This test will check the system can detect the removal of a FireWire HDD _steps: 1. Click 'Test' to begin the test. This test will timeout and fail if the removal has not been detected within 20 seconds. 2. Remove the previously attached FireWire HDD from the FireWire port on the dock. _verification: The verification of this test is automated. Do not change the automatically selected result plugin: user-interact id: dock/esata-insert estimated_duration: 20.0 _summary: eSATA HDD insertion test depends: dock/docking command: removable_storage_watcher insert ata_serial_esata _purpose: This test will check the system can detect the insertion of an eSATA HDD on the dock _steps: (Skip this test if there are no eSATA connectors on the dock) 1. Click 'Test' to begin the test. This test will timeout and fail if the insertion has not been detected within 20 seconds. 2. Plug an eSATA HDD into an available eSATA port on the dock. _verification: The verification of this test is automated. Do not change the automatically selected result plugin: shell id: dock/esata-storage-test estimated_duration: 20.0 _summary: eSATA HDD storage test user: root depends: dock/esata-insert command: removable_storage_test -s 268400000 ata_serial_esata _description: This is an automated test which performs read/write operations on an attached eSATA HDD plugin: user-interact id: dock/esata-remove estimated_duration: 20.0 _summary: eSATA HDD removal test depends: dock/esata-insert command: removable_storage_watcher remove ata_serial_esata _purpose: This test will check the system can detect the removal of an eSATA HDD from the dock _steps: 1. Click 'Test' to begin the test. This test will timeout and fail if the removal has not been detected within 20 seconds. 2. Remove the previously attached eSATA HDD from the eSATA port on the dock. _verification: The verification of this test is automated. Do not change the automatically selected result plugin: manual id: dock/optical-read depends: dock/docking estimated_duration: 180.0 _summary: Optical media (CD) read test _purpose: This test will check the dock's ability to read CD media _steps: (Skip this test if the dock does not have an optical reader) 1. Insert appropriate non-blank media into your optical drive(s). Movie and Audio Disks may not work. Self-created data disks have the greatest chance of working. 2. Try to copy a few files from the optical media to the computer. _verification: Are the files properly copied to the computer? plugin: manual id: dock/optical-write depends: dock/optical-read estimated_duration: 300.0 _summary: Optical media (CD-RW, DVD-RW) writing test _purpose: This test will check the dock's ability to write CD/DVD media. Depending on what the dock's optical drive support, you will need a blank CD-R, CD-RW, DVD-R and/or DVD-RW. _steps: 1. Insert a blank CD-R into the dock's drive 2. Open Brasero Disc Burner and write some files on the CD-R 3. Repeat steps 1-2 for other compatible media (CD-RW, DVD-R, DVD-RW) _verification: Are all kinds of discs properly written? plugin: user-interact id: dock/thunderbolt-insert estimated_duration: 40.0 depends: dock/docking command: removable_storage_watcher insert --timeout 40 scsi _summary: Thunderbolt storage insertion detection _purpose: This test will check if the connection of a Thunderbolt HDD to the dock could be detected _steps: 1. Click 'Test' to begin the test. This test will timeout and fail if the insertion has not been detected within 40 seconds. 2. Plug a Thunderbolt HDD into an available Thunderbolt port on the dock; if it's not mounted automatically, please click the HDD icon to mount it. _verification: The verification of this test is automated. Do not change the automatically selected result plugin: shell id: dock/thunderbolt-storage-test estimated_duration: 45.0 user: root depends: dock/thunderbolt-insert command: removable_storage_test -s 268400000 scsi _summary: Thunderbolt storage test _description: This is an automated test which performs read/write operations on an attached Thunderbolt HDD plugin: user-interact id: dock/thunderbolt-remove estimated_duration: 20.0 depends: dock/thunderbolt-insert command: removable_storage_watcher remove scsi _summary: Thunderbolt storage removal detection _purpose: This test will check the system can detect the removal of a Thunderbolt HDD _steps: 1. Click 'Test' to begin the test. This test will timeout and fail if the removal has not been detected within 20 seconds. 2. Remove the previously attached Thunderbolt HDD from the Thunderbolt port. _verification: The verification of this test is automated. Do not change the automatically selected result plainbox-provider-checkbox-0.25/units/smoke.pxu0000664000175000017500000000120012646152433023103 0ustar sylvainsylvain00000000000000id: smoke _name: All Smoke Tests unit: test plan description: This is an example test plan to start from. To use, copy this file and add the jobs you want to run to the copy. Delete these comments. DO NOT delete the first 9 jobs in tis file. They are resource gathering jobs and are necessary to do any testing at all. include: cpuinfo cdimage dmi dpkg efi environment gconf lsb meminfo module package device uname smoke/true smoke/false smoke/dependency/good smoke/dependency/bad smoke/requirement/good smoke/requirement/bad smoke/manual plainbox-provider-checkbox-0.25/units/default.pxu0000664000175000017500000000570412646152433023426 0ustar sylvainsylvain00000000000000id: default _name: Default Tests unit: test plan include: optical_drive miscellanea/submission-resources miscellanea/is_laptop codecs_attachment cpuinfo_attachment dmesg_attachment dmi_attachment dmidecode_attachment lshw_attachment efi_attachment lsmod_attachment lspci_attachment modprobe_attachment modules_attachment sysfs_attachment sysctl_attachment udev_attachment audio/list_devices audio/playback_headphones audio/playback_auto audio/alsa_record_playback_external audio/alsa_record_playback_internal audio/alsa_record_playback_usb audio/playback_auto benchmarks/disk/hdparm-read_.* benchmarks/disk/hdparm-cache-read_.* bluetooth/detect-output camera/detect camera/still camera/display cpu/offlining_test cpu/topology cpu/clocktest disk/detect firewire/insert firewire/storage-test firewire/remove graphics/1_compiz_check.* graphics/1_resolution.* graphics/1_minimum_resolution.* graphics/1_driver_version.* graphics/VESA_drivers_not_in_use input/keyboard input/mouse keys/super keys/battery-info keys/brightness keys/media-control keys/mute keys/volume keys/wireless mediacard/mmc-insert mediacard/mmc-storage mediacard/mmc-remove mediacard/sd-insert mediacard/sd-storage mediacard/sd-remove mediacard/sdhc-insert mediacard/sdhc-storage mediacard/sdhc-remove mediacard/cf-insert mediacard/cf-storage mediacard/cf-remove memory/info monitor/hdmi monitor/vga monitor/powersaving ethernet/detect wireless/wireless_connection optical/detect optical/read_.* expresscard/verification power-management/rtc suspend/audio_before_suspend suspend/memory_before_suspend suspend/network_before_suspend suspend/resolution_before_suspend suspend/suspend_advanced suspend/wireless_before_suspend keys/sleep suspend/mmc-insert-after-suspend suspend/mmc-storage-after-suspend suspend/mmc-remove-after-suspend suspend/sd-insert-after-suspend suspend/sd-storage-after-suspend suspend/sd-remove-after-suspend suspend/sdhc-insert-after-suspend suspend/sdhc-storage-after-suspend suspend/sdhc-remove-after-suspend mediacard/cf-insert-after-suspend mediacard/cf-storage-after-suspend mediacard/cf-remove-after-suspend suspend/audio_after_suspend suspend/bluetooth_detect_after_suspend suspend/memory_after_suspend suspend/network_after_suspend suspend/resolution_after_suspend suspend/wireless_after_suspend usb/detect usb/insert usb/storage-automated usb/remove bootstrap_include: benchmarks/disk/hdparm-read benchmarks/disk/hdparm-cache-read optical/read graphics/generator_compiz_check graphics/generator_resolution graphics/generator_minimum_resolution graphics/generator_driver_version plainbox-provider-checkbox-0.25/jobs/0000775000175000017500000000000012646152434021032 5ustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/jobs/mobilebroadband.txt.in0000664000175000017500000001162012646152433025303 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::mobilebroadband id: mobilebroadband/gsm_connection estimated_duration: 20.0 requires: package.name == 'network-manager' package.name == 'modemmanager' mobilebroadband.gsm == 'supported' user: root environ: GSM_CONN_NAME GSM_APN GSM_USERNAME GSM_PASSWORD command: if [ -n "${GSM_APN}" ]; then trap "nmcli con delete id $GSM_CONN_NAME" EXIT create_connection mobilebroadband gsm \ `[ -n "${GSM_APN}" ] && echo "--apn=$GSM_APN"` \ `[ -n "${GSM_CONN_NAME}" ] && echo "--name=$GSM_CONN_NAME"` \ `[ -n "${GSM_USERNAME}" ] && echo "--username=$GSM_USERNAME"` \ `[ -n "${GSM_PASSWORD}" ] && echo "--password=$GSM_PASSWORD"` || exit 1 fi INTERFACE=`(nmcli -t -f GENERAL -m tabular dev list 2>/dev/null || nmcli -t -f GENERAL -m tabular dev show) |grep gsm |cut -d ":" -f 13` echo "connected GSM interface seems to be $INTERFACE" [ -z $INTERFACE ] && exit 1 curl http://start.ubuntu.com/connectivity-check.html --interface $INTERFACE EXIT_CODE=$? if [ -n "${GSM_APN}" ] && [ "`nmcli dev status | awk '/gsm/ {print $3}'`" == "connected" ]; then nmcli con down id `[ ${GSM_CONN_NAME} ] && echo "$GSM_CONN_NAME" || echo "MobileBB"` fi exit $EXIT_CODE _description: Creates a mobile broadband connection for a GSM based modem and checks the connection to ensure it's working. plugin: shell category_id: 2013.com.canonical.plainbox::mobilebroadband id: mobilebroadband/cdma_connection estimated_duration: 20.0 requires: package.name == 'network-manager' package.name == 'modemmanager' mobilebroadband.cdma == 'supported' user: root environ: CDMA_CONN_NAME CDMA_USERNAME CDMA_PASSWORD command: if [ -n "${CDMA_USERNAME}" ]; then trap "nmcli con delete id $CDMA_CONN_NAME" EXIT create_connection mobilebroadband cdma \ `[ -n "${CDMA_CONN_NAME}" ] && echo "--name=$CDMA_CONN_NAME"` \ `[ -n "${CDMA_USERNAME}" ] && echo "--username=$CDMA_USERNAME"` \ `[ -n "${CDMA_PASSWORD}" ] && echo "--password=$CDMA_PASSWORD"` || exit 1 fi INTERFACE=`(nmcli -t -f GENERAL -m tabular dev list 2>/dev/null || nmcli -t -f GENERAL -m tabular dev show) |grep cdma |cut -d ":" -f 13` echo "connected CDMA interface seems to be $INTERFACE" [ -z $INTERFACE ] && exit 1 curl http://start.ubuntu.com/connectivity-check.html --interface $INTERFACE EXIT_CODE=$? if [ -n "${CDMA_USERNAME}" ] && [ "`nmcli dev status | awk '/cdma/ {print $3}'`" == "connected" ]; then nmcli con down id `[ ${CDMA_CONN_NAME} ] && echo "$CDMA_CONN_NAME" || echo "MobileBB"` fi exit $EXIT_CODE _description: Creates a mobile broadband connection for a CDMA based modem and checks the connection to ensure it's working. unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mobilebroadband id: mobilebroadband/maximum_bandwidth_gsm_device{__index__}_{interface} depends: mobilebroadband/gsm_connection estimated_duration: 330.0 requires: device.path == '{path}' package.name == 'zenity' package.name == 'iperf' environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS user: root command: network test -i {interface} -t iperf 2>&1 | cat - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'mobile broadband max bw {interface}' _purpose: User verification of whether the observed transfer throughput is acceptable for the type and maximum speed of device {__index__} ({interface}). _steps: 1. Click "Test". 2. Read the network test summary and confirm that the throughput is acceptable. 3. If needed, click "Test" again to repeat the transfer test. _verification: Was the reported throughput acceptable for the type and maximum speed of this interface? unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mobilebroadband id: mobilebroadband/maximum_bandwidth_cdma_device{__index__}_{interface} depends: mobilebroadband/cdma_connection estimated_duration: 330.0 requires: device.path == '{path}' package.name == 'zenity' package.name == 'iperf' environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS user: root command: network test -i {interface} -t iperf 2>&1 | cat - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'mobile broadband max bw {interface}' _purpose: User verification of whether the observed transfer throughput is acceptable for the type and maximum speed of device {__index__} ({interface}). _steps: 1. Click "Test". 2. Read the network test summary and confirm that the throughput is acceptable. 3. If needed, click "Test" again to repeat the transfer test. _verification: Was the reported throughput acceptable for the type and maximum speed of this interface? plainbox-provider-checkbox-0.25/jobs/user_apps.txt.in0000664000175000017500000004171712646152433024212 0ustar sylvainsylvain00000000000000plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/update_manager_finds_updates depends: ethernet/detect user: root requires: package.name == 'update-manager' _description: PURPOSE: This test will check that the update manager can find updates. STEPS: 1. Click Test to launch update-manager. 2. Follow the prompts and if updates are found, install them. 3. When Update Manager has finished, please close the app by clicking the Close button in the lower right corner. VERIFICATION: Did Update manager find and install updates (Pass if no updates are found, but Fail if updates are found but not installed) command: update-manager --check-dist-upgrades plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/nautilus_folder_create requires: package.name == 'nautilus' command: nautilus _description: PURPOSE: This test will check that the file browser can create a new folder. STEPS: 1. Click Test to open the File Browser. 2. On the menu bar, click File -> Create Folder. 3. In the name box for the new folder, enter the name Test Folder and hit Enter. 4. Close the File browser. VERIFICATION: Do you now have a new folder called Test Folder? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/nautilus_folder_copy depends: software/nautilus_folder_create command: nautilus _description: PURPOSE: This test will check that the file browser can copy a folder STEPS: 1. Click Test to open the File Browser. 2. Right click on the folder called Test Folder and click on Copy. 3. Right Click on any white area in the window and click on Paste. 4. Right click on the folder called Test Folder(copy) and click Rename. 5. Enter the name Test Data in the name box and hit Enter. 6. Close the File browser. VERIFICATION: Do you now have a folder called Test Data? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/nautilus_folder_move depends: software/nautilus_folder_copy command: nautilus _description: PURPOSE: This test will verify that the file browser can move a folder. STEPS: 1. Click Test to open the File Browser. 2. Click and drag the folder called Test Data onto the icon called Test Folder. 3. Release the button. 4. Double click the folder called Test Folder to open it up. 5. Close the File Browser. VERIFICATION: Was the folder called Test Data successfully moved into the folder called Test Folder? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/nautilus_file_create depends: software/nautilus_folder_create command: nautilus $HOME/"Test Folder" _description: PURPOSE: This test will check that the file browser can create a new file. STEPS: 1. Click Select Test to open the File Browser. 2. Right click in the white space and click Create Document -> Empty Document. 3. Enter the name Test File 1 in the name box and hit Enter. 4. Close the File browser. VERIFICATION: Do you now have a file called Test File 1? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/nautilus_file_copy depends: software/nautilus_file_create command: nautilus $HOME/"Test Folder" _description: PURPOSE: This test will check that the file browser can copy a file. STEPS: 1. Click Test to open the File Browser. 2. Right click on the file called Test File 1 and click Copy. 3. Right click in the white space and click Paste. 4. Right click on the file called Test File 1(copy) and click Rename. 5. Enter the name Test File 2 in the name box and hit Enter. 6. Close the File Browser. VERIFICATION: Do you now have a file called Test File 2? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/nautilus_file_move depends: software/nautilus_file_copy command: nautilus $HOME/"Test Folder" _description: PURPOSE: This test will check that the file browser can move a file. STEPS: 1. Click Test to open the File Browser. 2. Click and drag the file called Test File 2 onto the icon for the folder called Test Data. 3. Release the button. 4. Double click the icon for Test Data to open that folder up. 5. Close the File Browser. VERIFICATION: Was the file Test File 2 successfully moved into the Test Data folder? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/nautilus_file_delete depends: software/nautilus_file_create command: nautilus $HOME/"Test Folder" _description: PURPOSE: This test will check that the file browser can delete a file. STEPS: 1. Click Test to open the File Browser. 2. Right click on the file called Test File 1 and click on Move To Trash. 3. Verify that Test File 1 has been removed. 4. Close the File Browser. VERIFICATION: Is Test File 1 now gone? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/nautilus_folder_delete depends: software/nautilus_folder_create command: nautilus _description: PURPOSE: This test will check that the file browser can delete a folder. STEPS: 1. Click Test to open the File Browser. 2. Right click on the folder called Test Folder and click on Move To Trash. 3. Verify that the folder was deleted. 4. Close the file browser. VERIFICATION: Has Test Folder been successfully deleted? plugin: local _summary: Common Document Types Test id: software/view_office_document requires: package.name == "ubuntu-desktop" _description: Common Document Types Test command: cat <<'EOF' | run_templates -s "find $PLAINBOX_PROVIDER_DATA/documents -type f" id: `basename $0`_test plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps description: PURPOSE: This test will check that common office document types can be opened in the default application. STEPS: 1. Click Test to open the file '$0' with its default viewer. 2. After the viewer opens, check out the file that was opened. 3. Close the application (LibreOffice, Doc Viewer, etc.) VERIFICATION: Did the application open the document properly? (e.g was it displayed and did it function properly?) command: xdg-open $0 EOF plugin: local _summary: Common Document Types Test id: software/audio_file_play requires: package.name == "ubuntu-desktop" _description: Common Document Types Test command: cat <<'EOF' | run_templates -s "find $PLAINBOX_PROVIDER_DATA/audio -type f" id: `basename $0`_test plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps description: PURPOSE: This test will check that common audio files can be opened in the default player. STEPS: 1. Click Test to open the audio file '$0' with its default player. 2. After the player opens listen to the sound. 3. Close the application. VERIFICATION: Did the application play the audio file properly? (no skips, crackles, etc) command: xdg-open $0 EOF plugin: local _summary: Common Document Types Test id: software/video_file_play requires: package.name == "ubuntu-desktop" _description: Common Document Types Test command: cat <<'EOF' | run_templates -s "find $PLAINBOX_PROVIDER_DATA/video -type f" id: `basename $0`_test plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps description: PURPOSE: This test will check that common video files can be played in the default player. STEPS: 1. Click Test to play the video '$0' with its default player. 2. Watch the video. 3. Close the application. VERIFICATION: Did the application play '$0' proplerly (no video or audio issues with playback?) command: xdg-open $0 EOF plugin: local _summary: Common Document Types Test id: software/view_image_file requires: package.name == "ubuntu-desktop" _description: Common Document Types Test command: cat <<'EOF' | run_templates -s "find $PLAINBOX_PROVIDER_DATA/images -type f" id: `basename $0`_test plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps description: PURPOSE: This test will check that common image formats can be opened in the default viewer. STEPS: 1. Click Test to attempt to open the image '$0' with its default viewer. 2. Check out the file that was opened. 3. Close the application. VERIFICATION: Did the image display properly? command: xdg-open $0 EOF plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/firefox requires: package.name == 'firefox' command: firefox $PLAINBOX_PROVIDER_DATA/websites/testindex.html _description: PURPOSE: This test will check that Firefox can render a basic web page. STEPS: 1. Select Test to launch Firefox and view the test web page. VERIFICATION: Did the Ubuntu Test page load correctly? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/firefox-flash depends: software/firefox requires: package.name == 'firefox' command: firefox $PLAINBOX_PROVIDER_DATA/websites/flashtest.html _description: PURPOSE: This test will check that Firefox can run flash applications. Note: this may require installing additional software to successfully complete. STEPS: 1. Select Test to launch Firefox and view a sample Flash test. VERIFICATION: Did you see the text? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/firefox-flash-video depends: software/firefox-flash requires: package.name == 'firefox' command: firefox $PLAINBOX_PROVIDER_DATA/websites/flashvideo.html _description: PURPOSE: This test will check that Firefox can play a Flash video. Note: this may require installing additional software to successfully complete. STEPS: 1. Select Test to launch Firefox and view a short flash video. VERIFICATION: Did the video play correctly? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/firefox-totem depends: software/firefox requires: package.name == 'firefox' package.name == 'gstreamer0.10-ffmpeg' command: firefox $PLAINBOX_PROVIDER_DATA/video/Quicktime_Video.mov _description: PURPOSE: This test will check that Firefox can play a Quicktime (.mov) video file. Note: this may require installing additional software to successfully complete. STEPS: 1. Select Test to launch Firefox with a sample video. VERIFICATION: Did the video play using a plugin? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/empathy-facebook_chat requires: package.name == "empathy" command: empathy _description: PURPOSE: This test will check that Empathy messaging client works. STEPS: 1. Select Test to launch Empathy. 2. Configure it to connect to the Facebook Chat service. 3. Once you have completed the test, please quit Empathy to continue here. VERIFICATION: Were you able to connect correctly and send/receive messages? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/empathy-google_talk requires: package.name == "empathy" command: empathy _description: PURPOSE: This test will check that Empathy messaging client works. STEPS: 1. Select Test to launch Empathy. 2. Configure it to connect to the Google Talk (gtalk) service. 3. Once you have completed the test, please quit Empathy to continue here. VERIFICATION: Were you able to connect correctly and send/receive messages? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/empathy-jabber requires: package.name == "empathy" command: empathy _description: PURPOSE: This test will check that Empathy messaging client works. STEPS: 1. Select Test to launch Empathy. 2. Configure it to connect to the Jabber service. 3. Once you have completed the test, please quit Empathy to continue here. VERIFICATION: Were you able to connect correctly and send/receive messages? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/empathy-aim requires: package.name == "empathy" command: empathy _description: PURPOSE: This test will check that Empathy messaging client works. STEPS: 1. Select Test to launch Empathy. 2. Configure it to connect to the AOL Instant Messaging (AIM) service. 3. Once you have completed the test, please quit Empathy to continue here. VERIFICATION: Were you able to connect correctly and send/receive messages? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/empathy-msn requires: package.name == "empathy" command: empathy _description: PURPOSE: This test will check that Empathy messaging client works. STEPS: 1. Select Test to launch Empathy. 2. Configure it to connect to the Microsoft Network (MSN) service. 3. Once you have completed the test, please quit Empathy to continue here. VERIFICATION: Were you able to connect correctly and send/receive messages? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/evolution-pop3 requires: package.name == "evolution" command: evolution _description: PURPOSE: This test will check that Evolution works. STEPS: 1. Commence the test to launch Evolution. 2. Configure it to connect to a POP3 account. VERIFICATION: Were you able to receive and read e-mail correctly? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/evolution-imap requires: package.name == "evolution" command: evolution _description: PURPOSE: This test will check that Evolution works. STEPS: 1. Commence the test to launch Evolution. 2. Configure it to connect to a IMAP account. VERIFICATION: Were you able to receive and read e-mail correctly? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/evolution-smtp requires: package.name == "evolution" command: evolution _description: PURPOSE: This test will check that Evolution works. STEPS: 1. Commence the test to launch Evolution. 2. Configure it to connect to a SMTP account. VERIFICATION: Were you able to send e-mail without errors? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/gcalctool requires: package.name == "gcalctool" command: gcalctool _description: PURPOSE: This test checks that gcalctool (Calculator) works. STEPS: Commence the test to open the calculator. VERIFICATION: Did it launch correctly? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/gcalctool-functions depends: software/gcalctool requires: package.name == "gcalctool" command: gcalctool _description: PURPOSE: This test checks that gcalctool (Calculator) works. STEPS: Commence the test to open the calculator and perform: 1. Simple math functions (+,-,/,*) 2. Nested math functions ((,)) 3. Fractional math 4. Decimal math VERIFICATION: Did the functions perform as expected? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/gcalctool-memory depends: software/gcalctool requires: package.name == "gcalctool" command: gcalctool _description: PURPOSE: This test checks that gcalctool (Calculator) works. STEPS: Commence the test to open the calculator and perform: 1. Memory set 2. Memory reset 3. Memory last clear 4. Memory clear VERIFICATION: Did the functions perform as expected? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/gcalctool-clipboard depends: software/gcalctool requires: package.name == "gcalctool" command: gcalctool _description: PURPOSE: This test checks that gcalctool (Calculator) works. STEPS: Commence the test to open the calculator and perform: 1. Cut 2. Copy 3. Paste VERIFICATION: Did the functions perform as expected? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/gedit requires: package.name == "gedit" command: gedit _description: PURPOSE: This test checks that gedit works. STEPS: 1. Commence the test to open gedit. 2. Enter some text and save the file (make a note of the file name you use), then close gedit. VERIFICATION: Did this perform as expected? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/gedit-read depends: software/gedit requires: package.name == "gedit" command: gedit _description: PURPOSE: This test checks that gedit works. STEPS: 1. Commence the test to open gedit, and re-open the file you created previously. 2. Edit then save the file, then close gedit. VERIFICATION: Did this perform as expected? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::user_apps id: software/gnome-terminal requires: package.name == "gnome-terminal" command: gnome-terminal _description: PURPOSE: This test will check that Gnome Terminal works. STEPS: 1. Commence the test to open Terminal. 2. Type 'ls' and press enter. You should see a list of files and folder in your home directory. 3. Close the terminal window. VERIFICATION: Did this perform as expected? plainbox-provider-checkbox-0.25/jobs/graphics.txt.in0000664000175000017500000005667612646152433024023 0ustar sylvainsylvain00000000000000id: graphics/generator_driver_version requires: device.category == 'VIDEO' _description: Driver version tests _summary: Driver version tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_driver_version_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` command: graphics_driver estimated_duration: 0.500 _description: Parses Xorg.0.Log and discovers the running X driver and version for the $product graphics card _summary: Test X driver/version for $product EOF plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/xorg-version requires: package.name == "x11-utils" command: xdpyinfo | grep "^X.Org version" | cut -d ':' -f 2 | tr -d ' ' estimated_duration: 0.018 _description: Test to output the Xorg version _summary: Test Xorg version id: graphics/generator_resolution-change requires: device.category == 'VIDEO' _description: Resolution change tests _summary: Resolution change tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: manual category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_resolution-change_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: graphics/xorg-version _summary: Test changing resolution for $product _description: PURPOSE: This test will verify that the GUI is usable after manually changing resolution on the $product graphics card. STEPS: 1. Select the $product graphics card (a reboot may be necessary) 2. Open the Displays application 3. Select a new resolution from the dropdown list 4. Click on Apply 5. Select the original resolution from the dropdown list 6. Click on Apply VERIFICATION: Did the resolution on the $product graphics card change as expected? EOF plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/xorg-process requires: package.name == 'xorg' package.name == 'procps' command: pgrep -f '/usr/bin/X' >/dev/null estimated_duration: 0.100 _description: Test that the X process is running. _summary: Test that the X process is running. plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/xorg-failsafe requires: package.name == 'xorg' command: ! test -e /var/log/Xorg.failsafe.log estimated_duration: 0.030 _description: Test that the X is not running in failsafe mode. _summary: Test that X is not in failsafe mode. id: graphics/generator_resolution requires: device.category == 'VIDEO' _description: Default resolution tests _summary: Default resolution tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_resolution_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: device.category == 'VIDEO' package.name == 'zenity' command: resolution_test | zenity --text-info estimated_duration: 10.00 _summary: Test default resolution for $product _description: PURPOSE: This test will verify the default display resolution on the $product graphics card. STEPS: 1. Click "Test". 2. Confirm that the resolution shown in the text window is acceptable for your display. VERIFICATION: Is the resolution shown acceptable for your display on $product graphics card? EOF id: graphics/generator_screen_resolution requires: device.category == 'VIDEO' _description: Default resolution tests _summary: Default resolution tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_screen_resolution_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: device.category == 'VIDEO' package.name == 'qmlscene' command: qmlscene -qt5 --transparent --fullscreen $PLAINBOX_PROVIDER_DATA/resolution_test.qml estimated_duration: 10.0 _summary: Test default resolution for $product _description: PURPOSE: This test will verify the default display resolution on the $product graphics card STEPS: 1. Click on Test to display the screen resolution overlay for 5 seconds. VERIFICATION: Is this acceptable for your display on the $product graphics card? EOF id: graphics/generator_minimum_resolution requires: device.category == 'VIDEO' _description: Minimum resolution tests _summary: Minimum resolution tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_minimum_resolution_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: device.category == 'VIDEO' command: resolution_test --horizontal 800 --vertical 600 estimated_duration: 0.331 _summary: Test that $product meets minimum resolution requirement _description: Ensure the current resolution meets or exceeds the recommended minimum resolution (800x600) on the $product graphics card. See here for details: https://help.ubuntu.com/community/Installation/SystemRequirements EOF id: graphics/generator_maximum_resolution requires: device.category == 'VIDEO' _description: Maximum resolution tests _summary: Maximum resolution tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: graphics/`echo ${index}`_maximum_resolution_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics requires: device.category == 'VIDEO' package.name == 'zenity' command: maxi="\$(xrandr -q |grep -A 1 "connected\( primary\)* [0-9]" |tail -1 |awk '{print \$1}')" now="\$(python3 -c 'from gi.repository import Gdk; screen=Gdk.Screen.get_default(); geo = screen.get_monitor_geometry(screen.get_primary_monitor()); print(geo.width, "x", geo.height, sep="")')" test "\$maxi" != "\$now" && notify="\nPlease switch to the maximum resolution \nfor every graphic tests" zenity --info --text "Maximum resolution: \$maxi\nCurrent resolution: \$now \$notify" estimated_duration: 10.0 _summary: Test maximum supported resolution for $product _description: PURPOSE: This test will verify the maximum supported resolution on the $product graphics card. STEPS: 1. Select the $product graphics card (a reboot may be necessary) 2. Consult the system's specifications and locate the screen's maximum supported resolution. 3. Click on Test to display the maximum resolution that can be used by Ubuntu on the current display. VERIFICATION: Is this the maximum resolution for the display connected to the $product graphics card? EOF id: graphics/generator_modes requires: device.category == 'VIDEO' _description: Mode tests _summary: Mode tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: graphics/`echo ${index}`_modes_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` plugin: shell category_id: 2013.com.canonical.plainbox::graphics command: graphics_modes_info estimated_duration: 0.250 _description: Collect info on graphics modes (screen resolution and refresh rate) for $product _summary: Test graphic modes info for $product EOF id: graphics/generator_color_depth requires: device.category == 'VIDEO' _description: Color depth tests _summary: Color depth tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: graphics/`echo ${index}`_color_depth_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` plugin: shell category_id: 2013.com.canonical.plainbox::graphics command: color_depth_info estimated_duration: 0.150 _description: Collect info on color depth and pixel format for $product _summary: Test color depth info for $product EOF id: graphics/generator_fresh_rate requires: device.category == 'VIDEO' _description: Refresh rate tests _summary: Refresh rate tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: graphics/`echo ${index}`_fresh_rate_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` plugin: shell category_id: 2013.com.canonical.plainbox::graphics command: fresh_rate_info _description: Collect info on fresh rate for $product. _summary: Test refresh rate for $product EOF id: graphics/generator_graphic_memory requires: device.category == 'VIDEO' _description: Graphic memory tests _summary: Graphic memory tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: graphics/`echo ${index}`_graphic_memory_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` plugin: shell category_id: 2013.com.canonical.plainbox::graphics command: graphic_memory_info _description: Collect info on graphic memory for $product. _summary: Test graphic memory info for $product. EOF id: graphics/generator_video requires: device.category == 'VIDEO' _description: Display video test _summary: Display video test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: graphics/`echo ${index}`_video_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics requires: package.name == 'xorg' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' command: gst_pipeline_test -t 2 'videotestsrc ! videoconvert ! autovideosink' || gst_pipeline_test -t 2 'videotestsrc ! ffmpegcolorspace ! autovideosink' _summary: Test that video can be displayed with ${product} _description: PURPOSE: This test will test the default display with a sample video STEPS: 1. Click "Test" to display a video test. VERIFICATION: Do you see color bars and static? EOF plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/VESA_drivers_not_in_use command: cat /var/log/Xorg.0.log | perl -e '$a=0;while(<>){$a++ if /Loading.*vesa_drv\.so/;$a-- if /Unloading.*vesa/&&$a}exit 1 if $a' estimated_duration: 0.011 _description: Check that VESA drivers are not in use _summary: Test that VESA drivers are not in use id: graphics/generator_cycle_resolution requires: device.category == 'VIDEO' _description: Resolution cycling tests _summary: Resolution cycling tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_cycle_resolution_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'xorg' depends: graphics/VESA_drivers_not_in_use command: xrandr_cycle --screenshot-dir $PLAINBOX_SESSION_SHARE estimated_duration: 250.000 _summary: Test resolution cycling for $product _description: PURPOSE: This test cycles through the detected video modes for the $product graphics card STEPS: 1. Click "Test" to start cycling through the video modes VERIFICATION: Did the screen appear to be working for each mode? EOF id: graphics/generator_rotation requires: device.category == 'VIDEO' _description: Rotation tests _summary: Rotation tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_rotation_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: graphics/xorg-version command: rotation_test_using_dbus estimated_duration: 20.000 _summary: Test rotation for $product _description: PURPOSE: This test will test display rotation on the $product graphics card STEPS: 1. Click "Test" to test display rotation. The display will be rotated every 4 seconds. 2. Check if all rotations (normal right inverted left) took place without permanent screen corruption VERIFICATION: Did the display rotation take place without without permanent screen corruption? EOF id: graphics/generator_compiz_check requires: device.category == 'VIDEO' _description: Compiz support tests _summary: Compiz support tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_compiz_check_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'nux-tools' command: ! /usr/lib/nux/unity_support_test -c -p 2>&1 | ansi_parser | grep -e ":\(\s\+\)no$" -ie "error" estimated_duration: 0.130 _description: Check that $product hardware is able to run compiz _summary: Test Compiz support for $product EOF id: graphics/generator_unity_support requires: device.category == 'VIDEO' _description: Unity support tests _summary: Unity support tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_unity_support_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'nux-tools' command: ! /usr/lib/nux/unity_support_test -p 2>&1 | ansi_parser | grep -e ":\(\s\+\)no$" -ie "error" estimated_duration: 0.131 _description: Check that $product hardware is able to run Unity 3D _summary: Test Unity 3D support for $product EOF id: graphics/generator_glxgears requires: device.category == 'VIDEO' _description: glxgears tests _summary: glxgears tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_glxgears_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'mesa-utils' command: glxgears; true _summary: Test that glxgears works for $product _description: PURPOSE: This test tests the basic 3D capabilities of your $product video card STEPS: 1. Click "Test" to execute an OpenGL demo. Press ESC at any time to close. 2. Verify that the animation is not jerky or slow. VERIFICATION: 1. Did the 3d animation appear? 2. Was the animation free from slowness/jerkiness? EOF id: graphics/generator_3d_window_open_close requires: device.category == 'VIDEO' _description: 3D window open/close tests _summary: 3D window open/close tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_3d_window_open_close_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'mesa-utils' command: window_test -t open-close -i 10 estimated_duration: 60.525 _description: Open and close a 3D window multiple times on the $product video card _summary: Test 3D window open/close for $product EOF id: graphics/generator_3d_window_suspend_resume requires: device.category == 'VIDEO' _description: 3D window with suspend/resume tests _summary: 3D window with suspend/resume tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_3d_window_suspend_resume_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'mesa-utils' command: window_test -t suspend-resume -i 10 estimated_duration: 121.00 _description: Open, suspend resume and close a 3D window multiple times on the $product video card _summary: Test a 3D window with suspend/resume for $product EOF id: graphics/generator_multi_3d_windows_open_close requires: device.category == 'VIDEO' _description: Multiple 3D window open/close _summary: Multiple 3D window open/close tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_multi_3d_windows_open_close_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'mesa-utils' command: window_test -t open-close-multi -i 10 -w 4 estimated_duration: 60.000 _description: Open and close 4 3D windows multiple times on the $product video card _summary: Test Multi 3D window open/close for $product EOF id: graphics/generator_3d_window_move requires: device.category == 'VIDEO' _description: 3D window movement _summary: 3D window movement tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_3d_window_move_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'mesa-utils' package.name == 'wmctrl' command: window_test -t move estimated_duration: 50.000 _description: Move a 3D window around the screen on the $product video card _summary: Test 3D window movement for $product EOF id: graphics/generator_screenshot requires: device.category == 'VIDEO' _description: screenshot tests _summary: screenshot tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_screenshot_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'fswebcam' command: set -o pipefail; camera_test still --device=/dev/external_webcam -f ${PLAINBOX_SESSION_SHARE}/screenshot_${index}.jpg -q 2>&1 | ansi_parser _summary: Test grabbing a screenshot for $product _description: PURPOSE: Take a screengrab of the current screen (logged on Unity desktop) as produced by the $product graphics card STEPS: 1. Take picture using USB webcam VERIFICATION: Review attachment manually later EOF id: graphics/generator_screenshot.jpg requires: device.category == 'VIDEO' _description: screenshot attachment tests _summary: screenshot attachment tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: attachment category_id: 2013.com.canonical.plainbox::graphics id: `echo ${index}`_screenshot_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'`.jpg depends: graphics/`echo ${index}`_screenshot_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` command: base64 ${PLAINBOX_SESSION_SHARE}/screenshot_${index}.jpg _description: Attaches the screenshot captured in graphics/screenshot for the $product graphics card. _summary: Attach results of screenshot test for $product EOF id: graphics/generator_screenshot_fullscreen_video requires: device.category == 'VIDEO' _description: full screen video screenshot tests _summary: full screen video screenshot tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_screenshot_fullscreen_video_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'fswebcam' command: [ -f ${PLAINBOX_PROVIDER_DATA}/video/Ogg_Theora_Video.ogv ] || { echo "Video file not found"; exit 1; } gsettings set org.gnome.totem repeat true totem --fullscreen ${PLAINBOX_PROVIDER_DATA}/video/Ogg_Theora_Video.ogv 2>/dev/null & set -o pipefail sleep 15 && camera_test still --device=/dev/external_webcam -f ${PLAINBOX_SESSION_SHARE}/screenshot_fullscreen_video_${index}.jpg -q 2>&1 | ansi_parser sleep 5 && totem --quit 2>/dev/null gsettings set org.gnome.totem repeat false _summary: Test FSV screenshot for $product _description: PURPOSE: Take a screengrab of the current screen during fullscreen video playback using the $product graphics card STEPS: 1. Start a fullscreen video playback 2. Take picture using USB webcam after a few seconds VERIFICATION: Review attachment manually later EOF id: graphics/generator_switch_card requires: device.category == 'VIDEO' _description: GPU switch prompt tests _summary: GPU switch prompt tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: manual category_id: 2013.com.canonical.plainbox::graphics id: graphics/`echo ${index}`_switch_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` _summary: Test GPU switching for $product _description: PURPOSE: Manually switch to the $product card. STEPS: 1. If your system is already running with the $product card, then please mark this test as "passed" and proceed. 2. Using the appropriate tool (either NVidia settings or AMD Control Center), switch your system to use the $product graphics card. This will require restarting your session. 3. Once the session restarts, please restart this testing program and select "continue" when prompted for a resume action. 4. Don't answer the verification question until the system has restarted with the $product card enabled. VERIFICATION: Is the system using the $product card now? EOF id: graphics/generator_screenshot_fullscreen_video.jpg requires: device.category == 'VIDEO' _description: full screen video attachment tests _summary: full screen video attachment tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: attachment category_id: 2013.com.canonical.plainbox::graphics id: `echo ${index}`_screenshot_fullscreen_video_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'`.jpg depends: graphics/`echo ${index}`_screenshot_fullscreen_video_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` command: base64 ${PLAINBOX_SESSION_SHARE}/screenshot_fullscreen_video_${index}.jpg _summary: Attach results of FSV screenshot test for $product _description: Attaches the screenshot captured in graphics/screenshot_fullscreen_video for the $product graphics card EOF plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/screen-capture-internal _summary: Obtains a simple screen capture estimated_duration: 1.0 requires: package.name == 'gnome-screenshot' command: gnome-screenshot --file ${PLAINBOX_SESSION_SHARE}/screen-capture.png _description: Obtains a simple screen capture using gnome-screenshot if present plugin: attachment category_id: 2013.com.canonical.plainbox::graphics id: screen-capture-internal.png _summary: Attaches a simple screen capture estimated_duration: 1.0 depends: graphics/screen-capture-internal command: [ -f ${PLAINBOX_SESSION_SHARE}/screen-capture.png ] && base64 ${PLAINBOX_SESSION_SHARE}/screen-capture.png _description: Attaches the simple screen capture file unit: job id: graphics_card_resource plugin: resource category_id: 2013.com.canonical.plainbox::graphics command: graphics_card_resource unit: template template-unit: job template-resource: graphics_card_resource plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: "graphics/{index}_screen-capture-internal_{product}" _summary: Obtains a simple screen capture of {product} estimated_duration: 1.0 requires: package.name == 'gnome-screenshot' command: gnome-screenshot --file $PLAINBOX_SESSION_SHARE/screen-capture-{index}.png _description: Obtains a simple screen capture of {product} using gnome-screenshot if present unit: template template-unit: job template-resource: graphics_card_resource plugin: attachment category_id: 2013.com.canonical.plainbox::graphics id: graphics/{index}_screen-capture-internal_{product}.png depends: "graphics/{index}_screen-capture-internal_{product}" _summary: Attaches a simple screen capture of {product} estimated_duration: 1.0 command: [ -f $PLAINBOX_SESSION_SHARE/screen-capture-{index}.png ] && base64 $PLAINBOX_SESSION_SHARE/screen-capture-{index}.png _description: Attaches the simple screen capture file of {product} plainbox-provider-checkbox-0.25/jobs/networking.txt.in0000664000175000017500000000560312646152433024372 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::networking id: networking/gateway_ping depends: ethernet/detect command: gateway_ping_test estimated_duration: 2.000 _description: Tests whether the system has a working Internet connection. unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::networking id: networking/info_device{__index__}_{interface} _summary: Network Information of device {__index__} ({interface}) estimated_duration: 1.0 requires: device.path == '{path}' command: network_info {interface} | zenity --text-info --title="{interface}" _description: PURPOSE: This test will check the network device {__index__} ({interface}) STEPS: 1. Click "Test" to verify the information for this network device VERIFICATION: Is this correct? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::networking id: networking/modem_connection command: network_check _description: PURPOSE: This test will check that a DSL modem can be configured and connected. STEPS: 1. Connect the telephone line to the computer 2. Click on the Network icon on the top panel. 3. Select "Edit Connections" 4. Select the "DSL" tab 5. Click on "Add" button 6. Configure the connection parameters properly 7. Click "Test" to verify that it's possible to establish an HTTP connection VERIFICATION: Did a notification show and was the connection correctly established? plugin: shell category_id: 2013.com.canonical.plainbox::networking id: networking/ping command: gateway_ping_test $CHECKBOX_SERVER _description: Automated test case to verify availability of some system on the network using ICMP ECHO packets. plugin: shell category_id: 2013.com.canonical.plainbox::networking id: networking/http command: wget -SO /dev/null http://$TRANSFER_SERVER _description: Automated test case to make sure that it's possible to download files through HTTP plugin: shell category_id: 2013.com.canonical.plainbox::networking id: networking/ntp requires: package.name == 'ntpdate' user: root command: network_ntp_test _description: Test to see if we can sync local clock to an NTP server plugin: shell category_id: 2013.com.canonical.plainbox::networking id: networking/ssh requires: package.name == 'openssh-client' command: if [ $CHECKBOX_SERVER ]; then ssh -q -o 'StrictHostKeyChecking=no' -o "UserKnownHostsFile=/tmp/ssh_test_$$" -l ubuntu $CHECKBOX_SERVER "uname -a" && rm /tmp/ssh_test_$$; fi _description: Verify that an installation of checkbox-server on the network can be reached over SSH. plugin: shell category_id: 2013.com.canonical.plainbox::networking id: networking/printer requires: package.name == 'cups-client' command: network_printer_test -s $CHECKBOX_SERVER _description: Try to enable a remote printer on the network and print a test page. plainbox-provider-checkbox-0.25/jobs/benchmarks.txt.in0000664000175000017500000003001112646152433024307 0ustar sylvainsylvain00000000000000plugin: local _summary: Benchmark for each disk id: benchmarks/disk/hdparm-read requires: device.category == 'DISK' estimated_duration: 1.0 _description: Raw read timing benchmark of each disk using hdparm. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=DISK"' plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/disk/hdparm-read_`ls /sys$path/block` estimated_duration: 15.0 requires: device.path == "$path" user: root command: hdparm -t /dev/`ls /sys$path/block | sed 's|!|/|'` | sed -e :a -e '$!N;s/\n/ /;ta' | sed 's/.*= *//' description: This test runs hdparm timing of device reads as a benchmark for $path EOF plugin: local _summary: Benchmark for each disk id: benchmarks/disk/hdparm-cache-read estimated_duration: 1.0 requires: device.category == 'DISK' _description: Cached read timing benchmark of each disk using hdparm. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=DISK"' plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/disk/hdparm-cache-read_`ls /sys$path/block` estimated_duration: 10.0 requires: device.path == "$path" user: root command: hdparm -T /dev/`ls /sys$path/block | sed 's|!|/|'` | sed -e :a -e '$!N;s/\n/ /;ta' | sed 's/.*= *//' description: This test runs hdparm timing of cache reads as a benchmark for $path EOF plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/gtkperf depends: graphics/xorg-version requires: package.name == 'gtkperf' command: python3 -c 'import re,sys,subprocess; (s, o) = subprocess.getstatusoutput("gtkperf -a"); [sys.exit(1) for i in [s] if s]; m = re.search("Total time:\s+(.*)\n", o); [print(i.group(1)+" Seconds") for i in [m] if m]' estimated_duration: 30.000 _description: Run gtkperf to make sure that GTK based test cases work plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/render-bench requires: package.name == 'render-bench' command: /usr/bin/time -f "%e Seconds" render_bench 2>&1 >/dev/null estimated_duration: 52.000 _description: Run Render-Bench XRender/Imlib2 benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/qgears2-Xrender-gearsfancy requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="qgears2.render-backend=1; qgears2.test-mode=0" pts_run qgears2 estimated_duration: 180.000 _description: Run Qgears2 XRender Extension gearsfancy benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/qgears2-Xrender-compo requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="qgears2.render-backend=1; qgears2.test-mode=2" pts_run qgears2 estimated_duration: 31.500 _description: Run Qgears2 XRender Extension image scaling benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/qgears2-gl-gearsfancy requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="qgears2.render-backend=2; qgears2.test-mode=0" pts_run qgears2 estimated_duration: 52.000 _description: Run Qgears2 OpenGL gearsfancy benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/qgears2-gl-compo requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="qgears2.render-backend=2; qgears2.test-mode=2" pts_run qgears2 estimated_duration: 23.000 _description: Run Qgears2 OpenGL image scaling benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/glmark2-es2 requires: package.name == 'glmark2-es2' 'arm' in cpuinfo.type command: glmark2-es2 2>&1 | sed -e :a -e '$!N;s/\n/ /;ta' | sed -E 's/.*(Score:\s+[0-9]+).*/\1/' _description: Run GLmark2-ES2 benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/glmark2 requires: package.name == 'glmark2' cpuinfo.platform in ("i386", "x86_64") command: glmark2 2>&1 | sed -e :a -e '$!N;s/\n/ /;ta' | sed -E 's/.*(Score:\s+[0-9]+).*/\1/' estimated_duration: 306.000 _description: Run GLmark2 benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/unigine-sanctuary requires: package.name == 'phoronix-test-suite' command: pts_run unigine-sanctuary _description: Run Unigine Santuary benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/unigine-tropics requires: package.name == 'phoronix-test-suite' command: pts_run unigine-tropics _description: Run Unigine Tropics benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/unigine-heaven requires: package.name == 'phoronix-test-suite' command: pts_run unigine-heaven _description: Run Unigine Heaven benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/lightsmark requires: package.name == 'phoronix-test-suite' command: pts_run lightsmark _description: Run Lightsmark benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/memory/cachebench-read estimated_duration: 160.0 requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="cachebench.test=0" pts_run cachebench _description: Run Cachebench Read benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/memory/cachebench-write estimated_duration: 130.0 requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="cachebench.test=1" pts_run cachebench _description: Run Cachebench Write benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/memory/cachebench-read-modify-write estimated_duration: 140.0 requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="cachebench.test=2" pts_run cachebench _description: Run Cachebench Read / Modify / Write benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/memory/stream-copy estimated_duration: 6.0 requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="stream.run-type=0" pts_run stream _description: Run Stream Copy benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/memory/stream-scale estimated_duration: 6.0 requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="stream.run-type=1" pts_run stream _description: Run Stream Scale benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/memory/stream-add estimated_duration: 5.0 requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="stream.run-type=2" pts_run stream _description: Run Stream Add benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/memory/stream-triad estimated_duration: 4.0 requires: package.name == 'phoronix-test-suite' command: PRESET_OPTIONS="stream.run-type=3" pts_run stream _description: Run Stream Triad benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/network/network-loopback requires: package.name == 'phoronix-test-suite' command: pts_run network-loopback estimated_duration: 85.0 _description: Run Network Loopback benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/network/wifi_time_to_reconnect requires: device.category == 'WIRELESS' command: wifi_time2reconnect _description: Check the time needed to reconnect to a WIFI access point plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/processor/encode-mp3 estimated_duration: 140.0 requires: package.name == 'phoronix-test-suite' command: pts_run encode-mp3 _description: Run Encode MP3 benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/processor/x264 estimated_duration: 400.0 requires: package.name == 'phoronix-test-suite' command: pts_run x264 _description: Run x264 H.264/AVC encoder benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/processor/gnupg requires: package.name == 'phoronix-test-suite' command: pts_run gnupg _description: Run GnuPG benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/processor/compress-pbzip2 estimated_duration: 90.0 requires: package.name == 'phoronix-test-suite' command: pts_run compress-pbzip2 _description: Run Compress PBZIP2 benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/processor/compress-7zip estimated_duration: 1400 requires: package.name == 'phoronix-test-suite' command: pts_run compress-7zip _description: Run Compress 7ZIP benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/processor/n-queens estimated_duration: 330.0 requires: package.name == 'phoronix-test-suite' command: pts_run n-queens _description: Run N-Queens benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/processor/himeno estimated_duration: 75.0 requires: package.name == 'phoronix-test-suite' command: pts_run himeno _description: Run Himeno benchmark plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/system/cpu_on_idle estimated_duration: 10.0 requires: package.name == 'sysstat' command: iostat -x -m 1 10 | python3 -c 'import sys, re; lines="".join(sys.stdin.readlines()); l=[float(n) for n in (re.findall("idle\n.*?(\S+)\n", lines))]; print(sum(l)/len(l),"%")' _description: CPU utilization on an idle system. plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/system/disk_on_idle estimated_duration: 10.0 requires: package.name == 'sysstat' command: iostat -x -m 1 10 | python3 -c 'import sys, re; lines="".join(sys.stdin.readlines()); l=[float(n) for n in (re.findall("util\n.*?(\S+)\n", lines))]; print(sum(l)/len(l),"%")' _description: Disk utilization on an idle system. plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/gputest_furmark_fullscreen_1920x1080 requires: package.name == 'gputest' cpuinfo.platform == 'x86_64' command: gputest_benchmark fur --width 1920 --height 1080 -f estimated_duration: 75.000 _description: Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Fullscreen 1920x1080 no antialiasing plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/gputest_furmark_windowed_1024x640 requires: package.name == 'gputest' cpuinfo.platform == 'x86_64' command: gputest_benchmark fur estimated_duration: 75.000 _description: Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Windowed 1024x640 no antialiasing plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/gputest_gimark_fullscreen_1920x1080 requires: package.name == 'gputest' cpuinfo.platform == 'x86_64' command: gputest_benchmark gi --width 1920 --height 1080 -f estimated_duration: 75.00 _description: Run GiMark, a geometry instancing test (OpenGL 3.3) Fullscreen 1920x1080 no antialiasing plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/gputest_gimark_windowed_1024x640 requires: package.name == 'gputest' cpuinfo.platform == 'x86_64' command: gputest_benchmark gi estimated_duration: 75.500 _description: Run GiMark, a geometry instancing test (OpenGL 3.3) Windowed 1024x640 no antialiasing plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/gputest_tessmark_fullscreen_1920x1080 requires: package.name == 'gputest' cpuinfo.platform == 'x86_64' command: gputest_benchmark tess --width 1920 --height 1080 -f estimated_duration: 75.000 _description: Run a tessellation test based on TessMark (OpenGL 4.0) Fullscreen 1920x1080 no antialiasing plugin: shell category_id: 2013.com.canonical.plainbox::benchmarks id: benchmarks/graphics/gputest_tessmark_windowed_1024x640 requires: package.name == 'gputest' cpuinfo.platform == 'x86_64' command: gputest_benchmark tess _description: Run a tessellation test based on TessMark (OpenGL 4.0) Windowed 1024x640 no antialiasing plainbox-provider-checkbox-0.25/jobs/wireless.txt.in0000664000175000017500000006101312646152433024035 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_scanning requires: package.name == 'network-manager' device.category == 'WIRELESS' command: rfkill unblock wlan wifi if rfkill list wlan wifi | grep -q 'Hard blocked: yes'; then echo "Hard block is applied to WiFi device. Please remove and retest." exit 1 fi wireless_networks=`(nmcli -f SSID dev wifi list 2>/dev/null || nmcli -f SSID dev wifi)` if [ `echo "$wireless_networks" | wc -l` -gt 1 ]; then echo "Wireless networks discovered: " echo "$wireless_networks" exit 0 fi echo "No wireless networks discovered." exit 1 estimated_duration: 0.645 _description: Wireless scanning test. It scans and reports on discovered APs. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/info_automated requires: package.name == 'network-manager' device.category == 'WIRELESS' command: udev_resource | filter_templates -w "category=WIRELESS" | awk "/interface: / { print \$2 }" | xargs -n 1 network_info estimated_duration: 1.2 _description: This is an automated test to gather some info on the current state of your wireless devices. If no devices are found, the test will exit with an error. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection command: network_check estimated_duration: 120.0 requires: device.category == 'WIRELESS' _description: PURPOSE: This test will check your wireless connection. STEPS: 1. Click on the Network icon in the panel. 2. Select a network below the 'Wireless networks' section. 3. Click "Test" to verify that it's possible to establish an HTTP connection. VERIFICATION: Did a notification show and was the connection correctly established? plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_wpa_bg requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: WPA_BG_SSID WPA_BG_PSK command: trap "nmcli con delete id $WPA_BG_SSID" EXIT if create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 30.0 _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11b/g protocols. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_open_bg requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: OPEN_BG_SSID command: trap "nmcli con delete id $OPEN_BG_SSID" EXIT if create_connection wifi $OPEN_BG_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 30.0 _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11b/g protocols. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_wpa_n requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: WPA_N_SSID WPA_N_PSK command: trap "nmcli con delete id $WPA_N_SSID" EXIT if create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 30.0 _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11n protocol. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_open_n requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: OPEN_N_SSID command: trap "nmcli con delete id $OPEN_N_SSID" EXIT if create_connection wifi $OPEN_N_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 30.0 _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11n protocol. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_wpa_ac requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' IEEE_80211.ac == 'supported' user: root environ: WPA_AC_SSID WPA_AC_PSK command: trap "nmcli con delete id $WPA_AC_SSID" EXIT if create_connection wifi $WPA_AC_SSID --security=wpa --key=$WPA_AC_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 30.0 _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11ac protocol. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_open_ac requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' IEEE_80211.ac == 'supported' user: root environ: OPEN_AC_SSID command: trap "nmcli con delete id $OPEN_AC_SSID" EXIT if create_connection wifi $OPEN_AC_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 30.0 _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11ac protocol. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_wpa_bg_manual requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' user: root environ: ROUTER_SSID ROUTER_PSK command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 120.0 _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11b/g protocols. STEPS: 1. Open your router's configuration tool 2. Change the settings to only accept connections on the B and G wireless bands 3. Make sure the SSID is set to the contents of the ROUTER_SSID environment variable 4. Change the security settings to use WPA2 and ensure the PSK matches what is set in the ROUTER_PSK environment variable 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_open_bg_manual requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' user: root environ: ROUTER_SSID command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 120.0 _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using no security and the 802.11b/g protocols. STEPS: 1. Open your router's configuration tool 2. Change the settings to only accept connections on the B and G wireless bands 3. Make sure the SSID is set to the contents of the ROUTER_SSID environment variable 4. Change the security settings to use no security 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_wpa_n_manual requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' IEEE_80211.band_5GHz == 'supported' user: root environ: ROUTER_SSID ROUTER_PSK command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 120.0 _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11n protocols. STEPS: 1. Open your router's configuration tool 2. Change the settings to only accept connections on the N wireless band 3. Make sure the SSID is set to the contents of the ROUTER_SSID environment variable 4. Change the security settings to use WPA2 and ensure the PSK matches what is set in the ROUTER_PSK environment variable 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_open_n_manual requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' IEEE_80211.band_5GHz == 'supported' user: root environ: ROUTER_SSID command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 120.0 _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using no security and the 802.11n protocol. STEPS: 1. Open your router's configuration tool 2. Change the settings to only accept connections on the N wireless band 3. Make sure the SSID is set to the contents of the ROUTER_SSID environment variable 4. Change the security settings to use no security 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_wpa_ac_manual requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' IEEE_80211.ac == 'supported' user: root environ: ROUTER_SSID ROUTER_PSK command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 120.0 _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11ac protocol. STEPS: 1. Open your router's configuration tool 2. Change the settings to only accept connections with the 802.11ac protocol. 3. Make sure the SSID is set to the contents of the ROUTER_SSID environment variable 4. Change the security settings to use WPA2 and ensure the PSK matches what is set in the ROUTER_PSK environment variable 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_open_ac_manual requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' IEEE_80211.ac == 'supported' user: root environ: ROUTER_SSID command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 120.0 _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using no security and the 802.11ac protocol. STEPS: 1. Open your router's configuration tool 2. Change the settings to only accept connections with the 802.11ac protocol. 3. Make sure the SSID is set to the contents of the ROUTER_SSID environment variable 4. Change the security settings to use no security 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/monitor_wireless_connection requires: package.name == 'iperf' device.category == 'WIRELESS' user: root environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF command: trap "nmcli con delete id $WPA_BG_SSID" EXIT if create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link iperf -c $SERVER_IPERF -t 300 -i 30 STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 330.0 _description: Tests the performance of a system's wireless connection through the iperf tool. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/monitor_wireless_connection_udp requires: package.name == 'iperf' device.category == 'WIRELESS' user: root environ: WPA_BG_SSID WPA_BG_PSK SERVER_IPERF command: trap "nmcli con delete id $WPA_BG_SSID" EXIT if create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link iperf -c $SERVER_IPERF -t 300 -i 30 -u -b 100m -p 5050 STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 330.0 _description: Tests the performance of a system's wireless connection through the iperf tool, using UDP packets. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_open_a requires: device.category == 'WIRELESS' IEEE_80211.band_5GHz == 'supported' user: root environ: OPEN_A_SSID command: trap "nmcli con delete id $OPEN_A_SSID" EXIT if create_connection wifi $OPEN_A_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 30.0 _description: Test that the system's wireless hardware can connect to a router using the 802.11a protocol. This requires that you have a router pre-configured to only respond to requests on the 802.11a protocol. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_open_b requires: device.category == 'WIRELESS' user: root environ: OPEN_B_SSID command: trap "nmcli con delete id $OPEN_B_SSID" EXIT if create_connection wifi $OPEN_B_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 30.0 _description: Test that the system's wireless hardware can connect to a router using the 802.11b protocol. This requires that you have a router pre-configured to only respond to requests on the 802.11b protocol. unit: template template-unit: job template-resource: device template-filter: device.category == 'WIRELESS' plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/stress_performance_device{__index__}_{interface} estimated_duration: 330.0 requires: device.path == '{path}' package.name == 'iperf' environ: TEST_TARGET_IPERF user: root command: network test -i {interface} -t stress _description: This test executes iperf to generate a load on the network device {__index__} ({interface}) and then performs a ping test to watch for dropped packets and very large latency periods. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_connection_open_g requires: device.category == 'WIRELESS' user: root environ: OPEN_G_SSID command: trap "nmcli con delete id $OPEN_G_SSID" EXIT if create_connection wifi $OPEN_G_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi estimated_duration: 30.0 _description: Test that the system's wireless hardware can connect to a router using the 802.11g protocol. This requires that you have a router pre-configured to only respond to requests on the 802.11g protocol. plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_extension requires: device.category == 'WIRELESS' command: wireless_ext estimated_duration: 1.2 _description: Test that the MAC80211 modules are loaded and wireless extensions are working. unit: template template-unit: job template-resource: device template-filter: device.category == 'WIRELESS' plugin: shell category_id: 2013.com.canonical.plainbox::wireless id: wireless/iwconfig_check_device{__index__}_{interface} estimated_duration: 1.2 requires: device.path == '{path}' command: iwconfig {interface} _description: This test executes iwconfig requests against wireless device {__index__} ({interface}). plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::wireless id: wireless/wireless_rfkill command: rfkill list | zenity --text-info --title rfkill-Info estimated_duration: 120.0 requires: device.category == 'WIRELESS' _description: PURPOSE: This test will check whether or not your driver responds to rfkill commands. STEPS: 1. Use the hardware switch on the side of your device to switch off wireless. 2. If you do not have a hardware switch disable wireless from the network manager icon in the panel 3. Click "Test" to verify that the hard or soft blocks are in place. VERIFICATION: Did the hard or soft blocks show on in the dialog? unit: template template-unit: job template-resource: device template-filter: device.category == 'WIRELESS' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::wireless id: wireless/maximum_bandwidth_device{__index__}_{interface} estimated_duration: 120.0 requires: device.path == '{path}' package.name == 'zenity' package.name == 'iperf' environ: TEST_TARGET_IPERF user: root command: network test -i {interface} -t iperf 2>&1 | cat - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'mobile broadband max bw {interface}' _purpose: User verification of whether the observed transfer throughput is acceptable for the type and maximum speed of wireless device {__index__} ({interface}). _steps: 1. Click "Test". 2. Read the network test summary and confirm that the throughput is acceptable. 3. If needed, click "Test" again to repeat the transfer test. _verification: Was the reported throughput acceptable for the type and maximum speed of this interface? plainbox-provider-checkbox-0.25/jobs/camera.txt.in0000664000175000017500000000347012646152433023433 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::camera id: camera/detect estimated_duration: 1.2 requires: device.category == 'CAPTURE' command: camera_test detect _description: This Automated test attempts to detect a camera. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::camera id: camera/display estimated_duration: 120.0 depends: camera/detect requires: device.category == 'CAPTURE' command: camera_test display _description: PURPOSE: This test will check that the built-in camera works STEPS: 1. Click on Test to display a video capture from the camera for ten seconds. VERIFICATION: Did you see the video capture? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::camera id: camera/still estimated_duration: 120.0 depends: camera/detect requires: package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'eog' package.name == 'fswebcam' or package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' device.category == 'CAPTURE' command: camera_test still _description: PURPOSE: This test will check that the built-in camera works STEPS: 1. Click on Test to display a still image from the camera for ten seconds. VERIFICATION: Did you see the image? plugin: shell category_id: 2013.com.canonical.plainbox::camera id: camera/multiple-resolution-images estimated_duration: 1.2 depends: camera/detect requires: package.name == 'fswebcam' or package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' device.category == 'CAPTURE' command: camera_test resolutions _description: Takes multiple pictures based on the resolutions supported by the camera and validates their size and that they are of a valid format. plainbox-provider-checkbox-0.25/jobs/smoke.txt.in0000664000175000017500000000213712646152433023320 0ustar sylvainsylvain00000000000000plugin: shell id: smoke/true command: true _description: Check success result from shell test case plugin: shell id: smoke/false command: false _description: Check failed result from shell test case plugin: shell id: smoke/dependency/good depends: smoke/true command: true _description: Check job is executed when dependency succeeds plugin: shell id: smoke/dependency/bad depends: smoke/false command: true _description: Check job result is set to uninitiated when dependency fails plugin: shell id: smoke/requirement/good requires: package.name == "checkbox" command: true _description: Check job is executed when requirements are met plugin: shell id: smoke/requirement/bad requires: package.name == "unknown-package" command: true _description: Check job result is set to "not required on this system" when requirements are not met plugin: manual id: smoke/manual _description: PURPOSE: This test checks that the manual plugin works fine STEPS: 1. Add a comment 2. Set the result as passed VERIFICATION: Check that in the report the result is passed and the comment is displayed plainbox-provider-checkbox-0.25/jobs/codecs.txt.in0000664000175000017500000000216512646152433023443 0ustar sylvainsylvain00000000000000plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::codecs id: codecs/ogg-vorbis requires: package.name == 'gstreamer0.10-plugins-base' or package.name == 'gstreamer1.0-plugins-base' package.name == 'totem' package.name == 'ubuntu-sounds' command: totem /usr/share/sounds/ubuntu/stereo/system-ready.ogg _description: PURPOSE: This test will verify your system's ability to play Ogg Vorbis audio files. STEPS: 1. Click Test to play an Ogg Vorbis file (.ogg) 2. Please close the player to proceed. VERIFICATION: Did the sample play correctly? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::codecs id: codecs/wav requires: package.name == 'gstreamer0.10-plugins-good' or package.name == 'gstreamer1.0-plugins-good' package.name == 'totem' package.name == 'alsa-utils' command: totem /usr/share/sounds/alsa/Noise.wav _description: PURPOSE: This test will verify your system's ability to play Wave Audio files. STEPS: 1. Select Test to play a Wave Audio format file (.wav) 2. Please close the player to proceed. VERIFICATION: Did the sample play correctly? plainbox-provider-checkbox-0.25/jobs/thunderbolt.pxu0000664000175000017500000000616312646152433024127 0ustar sylvainsylvain00000000000000unit: manifest entry id: has_thunderbolt _name: Thunderbolt Support value-type: bool plugin: user-interact category_id: 2013.com.canonical.plainbox::disk id: thunderbolt/insert imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_thunderbolt == 'True' estimated_duration: 20.0 command: removable_storage_watcher insert --timeout 40 scsi _summary: Storage insert detection on Thunderbolt _description: PURPOSE: This test will check if the insertion of a Thunderbolt HDD could be detected STEPS: 1. Click 'Test' to begin the test. This test will timeout and fail if the insertion has not been detected within 40 seconds. 2. Plug a Thunderbolt HDD into an available Thunderbolt port, if it's not mounted automatically, please click the HDD icon to mount it. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result plugin: shell category_id: 2013.com.canonical.plainbox::disk id: thunderbolt/storage-test user: root imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_thunderbolt == 'True' depends: thunderbolt/insert estimated_duration: 45.0 command: removable_storage_test -s 268400000 scsi _summary: Storage test on Thunderbolt _description: This is an automated test which performs read/write operations on an attached Thunderbolt HDD plugin: user-interact category_id: 2013.com.canonical.plainbox::disk id: thunderbolt/remove imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_thunderbolt == 'True' depends: thunderbolt/insert estimated_duration: 10.0 command: removable_storage_watcher remove scsi _summary: Storage removal detection on Thunderbolt _description: PURPOSE: This test will check the system can detect the removal of a Thunderbolt HDD STEPS: 1. Click 'Test' to begin the test. This test will timeout and fail if the removal has not been detected within 20 seconds. 2. Remove the previously attached Thunderbolt HDD from the Thunderbolt port. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::disk id: thunderbolt/daisy-chain imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_thunderbolt == 'True' estimated_duration: 45.0 command: removable_storage_test -s 268400000 scsi _summary: Daisy-chain testing for Thunderbolt storage and display device _description: PURPOSE: This test will check if your system can support daisy-chaining of a storage and a monitor over Thunderbolt port STEPS: 1. Connect your Thunderbolt monitor to your systems 2. Connect and mount your Thunderbolt HDD to another Thunderbolt port of the monitor (you can do this with HDD first as well) 3. Click 'Test' to perform the storage test on the Thunderbolt HDD VERIFICATION: 1. The verification for storage is automated, please select the result combine with the result for the display. 2. Was the desktop displayed correctly on the Thunderbolt-connected screen? plainbox-provider-checkbox-0.25/jobs/monitor.txt.in0000664000175000017500000001727612646152433023703 0ustar sylvainsylvain00000000000000id: monitor/generator_vga _description: VGA port test _summary: VGA port test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_vga_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: display.vga == 'supported' or display.dp == 'supported' plugin: manual category_id: 2013.com.canonical.plainbox::monitor _description: PURPOSE: This test will check your VGA port. STEPS: Skip this test if your system does not have a VGA port. 1. Connect a display (if not already connected) to the VGA port on your system VERIFICATION: Was the desktop displayed correctly on both screens? EOF id: monitor/generator_dvi _description: DVI port test _summary: DVI port test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_dvi_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: display.dvi == 'supported' plugin: manual category_id: 2013.com.canonical.plainbox::monitor _description: PURPOSE: This test will check your DVI port. STEPS: Skip this test if your system does not have a DVI port. 1. Connect a display (if not already connected) to the DVI port on your system VERIFICATION: Was the desktop displayed correctly on both screens? EOF id: monitor/generator_displayport _description: DisplayPort test _summary: DisplayPort test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_displayport_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: display.dp == 'supported' plugin: manual category_id: 2013.com.canonical.plainbox::monitor _description: PURPOSE: This test will check your DisplayPort port. STEPS: Skip this test if your system does not have a DisplayPort port. 1. Connect a display (if not already connected) to the DisplayPort port on your system VERIFICATION: Was the desktop displayed correctly on both screens? EOF id: monitor/generator_hdmi _description: HDMI port test _summary: HDMI port test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_hdmi_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: display.hdmi == 'supported' plugin: manual category_id: 2013.com.canonical.plainbox::monitor _description: PURPOSE: This test will check your HDMI port. STEPS: Skip this test if your system does not have a HDMI port. 1. Connect a display (if not already connected) to the HDMI port on your system VERIFICATION: Was the desktop displayed correctly on both screens? EOF id: monitor/generator_svideo _description: S-VIDEO port test _summary: S-VIDEO port test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_svideo_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: display.svideo == 'supported' plugin: manual category_id: 2013.com.canonical.plainbox::monitor _description: PURPOSE: This test will check your S-VIDEO port. STEPS: Skip this test if your system does not have a S-VIDEO port. 1. Connect a display (if not already connected) to the S-VIDEO port on your system VERIFICATION: Was the desktop displayed correctly on both screens? EOF id: monitor/generator_rca _description: RCA port test _summary: RCA port test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_rca_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: display.rca == 'supported' plugin: manual category_id: 2013.com.canonical.plainbox::monitor _description: PURPOSE: This test will check your RCA port. STEPS: Skip this test if your system does not have a RCA port. 1. Connect a display (if not already connected) to the RCA port on your system VERIFICATION: Was the desktop displayed correctly on both screens? EOF id: monitor/generator_multi-head _description: Multi-monitor test _summary: Multi-monitor test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_multi-head_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: dmi.product in ['Desktop','Low Profile Desktop','Tower','Mini Tower'] plugin: manual category_id: 2013.com.canonical.plainbox::monitor _description: PURPOSE: This test verifies that multi-monitor output works on your desktop system. This is NOT the same test as the external monitor tests you would run on your laptop. You will need two monitors to perform this test. STEPS: Skip this test if your video card does not support multiple monitors. 1. If your second monitor is not already connected, connect it now 2. Open the "Displays" tool (open the dash and search for "Displays") 3. Configure your output to provide one desktop across both monitors 4. Open any application and drag it from one monitor to the next. VERIFICATION: Was the stretched desktop displayed correctly across both screens? EOF id: monitor/generator_powersaving _description: Monitor power-saving test _summary: Monitor power-saving test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_powersaving_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::monitor command: xset dpms force off _description: PURPOSE: This test will check your monitor power saving capabilities STEPS: 1. Click "Test" to try the power saving capabilities of your monitor 2. Press any key or move the mouse to recover VERIFICATION: Did the monitor go blank and turn on again? EOF id: monitor/generator_dim_brightness _description: Screen dimming test _summary: Screen dimming test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_dim_brightness_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: dmi.product in ['Notebook','Laptop','Portable','All In One','All-In-One','AIO'] plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::monitor user: root command: brightness_test _description: PURPOSE: This test will test changes to screen brightness STEPS: 1. Click "Test" to try to dim the screen. 2. Check if the screen was dimmed approximately to half of the maximum brightness. 3. The screen will go back to the original brightness in 2 seconds. VERIFICATION: Was your screen dimmed approximately to half of the maximum brightness? EOF id: monitor/generator_thunderbolt _description: Thunderbolt monitor test _summary: Thunderbolt monitor test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: monitor/`echo ${index}`_thunderbolt_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_thunderbolt == 'True' estimated_duration: 15.0 plugin: manual category_id: 2013.com.canonical.plainbox::monitor _summary: Display connected via Thunderbolt for $product _description: PURPOSE: This test will check your Thunderbolt port as a monitor interconnect for $product. STEPS: 1. Connect a display (if not already connected) to the Thunderbolt port on your system 2. Switch display modes between in your Display Settings, check if it can be set to mirrored, extended, displayed on external or onboard only VERIFICATION: Was the desktop displayed correctly with $product on the Thunderbolt-connected screen in every mode? EOF plainbox-provider-checkbox-0.25/jobs/cpu.txt.in0000664000175000017500000000615312646152433022773 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::cpu id: cpu/scaling_test estimated_duration: 150.0 requires: package.name == 'fwts' user: root environ: PLAINBOX_SESSION_SHARE command: fwts_test -t cpufreq -l ${PLAINBOX_SESSION_SHARE}/scaling_test.log _description: Test the CPU scaling capabilities using Firmware Test Suite (fwts cpufreq). plugin: attachment category_id: 2013.com.canonical.plainbox::cpu id: cpu/scaling_test-log-attach estimated_duration: 1.0 depends: cpu/scaling_test command: [[ -e ${PLAINBOX_SESSION_SHARE}/scaling_test.log ]] && cat ${PLAINBOX_SESSION_SHARE}/scaling_test.log _description: Attaches the log generated by cpu/scaling_test to the results submission. plugin: shell category_id: 2013.com.canonical.plainbox::cpu id: cpu/maxfreq_test estimated_duration: 0.6 requires: package.name == 'fwts' user: root command: fwts_test -t maxfreq -l $PLAINBOX_SESSION_SHARE/maxfreq_test.log _description: Test that the CPU can run at its max frequency using Firmware Test Suite (fwts cpufreq). plugin: attachment category_id: 2013.com.canonical.plainbox::cpu id: cpu/maxfreq_test-log-attach estimated_duration: 1.0 depends: cpu/maxfreq_test command: [ -e $PLAINBOX_SESSION_SHARE/maxfreq_test.log ] && cat $PLAINBOX_SESSION_SHARE/maxfreq_test.log _description: Attaches the log generated by cpu/maxfreq_test to the results submission. plugin: shell category_id: 2013.com.canonical.plainbox::cpu id: cpu/clocktest estimated_duration: 60.0 command: clocktest _description: Tests the CPU for clock jitter. plugin: shell category_id: 2013.com.canonical.plainbox::cpu id: cpu/offlining_test estimated_duration: 1.0 user: root command: cpu_offlining _description: Test offlining of each CPU core in a multicore system. plugin: shell category_id: 2013.com.canonical.plainbox::cpu id: cpu/topology estimated_duration: 1.0 requires: int(cpuinfo.count) > 1 and (cpuinfo.platform == 'i386' or cpuinfo.platform == 'x86_64') command: cpu_topology _description: This test checks cpu topology for accuracy between proc and sysfs. plugin: shell category_id: 2013.com.canonical.plainbox::cpu id: cpu/frequency_governors estimated_duration: 22.0 user: root command: nice -n -20 frequency_governors_test --debug _description: This test checks that CPU frequency governors are obeyed when set. plugin: shell category_id: 2013.com.canonical.plainbox::cpu id: cpu/arm_vfp_support estimated_duration: 1.0 requires: 'arm' in cpuinfo.type command: grep VFP /var/log/syslog _description: Validate that the Vector Floating Point Unit is running on ARM device plugin:shell id: cpu/cstates estimated_duration: 10.0 requires: package.name == 'fwts' user: root _description: Run Firmware Test Suite (fwts) cstates tests. environ: PLAINBOX_SESSION_SHARE command: fwts_test -l $PLAINBOX_SESSION_SHARE/fwts_cstates_results.log -t cstates plugin: attachment category_id: 2013.com.canonical.plainbox::cpu estimated_duration: 0.5 id: cpu/cstates_results.log command: [ -e ${PLAINBOX_SESSION_SHARE}/fwts_cstates_results.log ] && cat ${PLAINBOX_SESSION_SHARE}/fwts_cstates_results.log _description: Attaches the FWTS desktop diagnosis results log to the submission plainbox-provider-checkbox-0.25/jobs/server-services.txt.in0000664000175000017500000000237412646152433025334 0ustar sylvainsylvain00000000000000plugin: shell id: services/open_ssh_test requires: package.name == 'ssh' command: pgrep sshd >/dev/null || (echo 'FAIL: sshd is not running.' 2>&1 && false) _description: Verifies that sshd is running. plugin: shell id: services/print_server_test requires: package.name == 'cups' command: pgrep cupsd >/dev/null || (echo 'FAIL: cupsd is not running.' 2>&1 && false) _description: Verifies that Print/CUPs server is running. plugin: shell id: services/dns_server_test requires: package.name == 'bind9' package.name == 'dnsutils' user: root command: dns_server_test _description: Verifies that DNS server is running and working. plugin: shell id: services/samba_test requires: package.name == 'samba' package.name == 'winbind' user: root command: samba_test _description: Verifies that Samba server is running. plugin: shell id: services/lamp_test requires: package.name == 'apache2' package.name == 'php5-mysql' package.name == 'libapache2-mod-php5' package.name == 'mysql-server' user: root command: lamp_test _description: Verifies that the LAMP stack is running (Apache, MySQL and PHP). plugin: shell id: services/tomcat_test requires: package.name == 'tomcat6' user: root command: tomcat_test _description: Verifies that Tomcat server is running and working. plainbox-provider-checkbox-0.25/jobs/install.txt.in0000664000175000017500000000051212646152433023643 0ustar sylvainsylvain00000000000000plugin: shell id: install/apt-get-gets-updates requires: package.name == 'apt' user: root command: apt-get -d -y --force-yes dist-upgrade _description: Tests to see that apt can access repositories and get updates (does not install updates). This is done to confirm that you could recover from an incomplete or broken update. plainbox-provider-checkbox-0.25/jobs/graphics-legacy.txt.in0000664000175000017500000002271512646152433025250 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/driver_version command: graphics_driver estimated_duration: 0.500 _description: Parses Xorg.0.Log and discovers the running X driver and version _summary: Test X driver/version plugin: manual category_id: 2013.com.canonical.plainbox::graphics id: graphics/resolution-change depends: graphics/xorg-version _summary: Test changing resolution _description: PURPOSE: This test will verify that the GUI is usable after manually changing resolution STEPS: 1. Open the Displays application 2. Select a new resolution from the dropdown list 3. Click on Apply 4. Select the original resolution from the dropdown list 5. Click on Apply VERIFICATION: Did the resolution change as expected? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/resolution requires: device.category == 'VIDEO' flags: deprecated command: resolution_test estimated_duration: 0.750 _summary: Test default resolution (for old checkbox) _description: PURPOSE: This test will verify the default display resolution STEPS: 1. This display is using the following resolution: INFO: $output VERIFICATION: Is this acceptable for your display? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/screen-resolution requires: device.category == 'VIDEO' package.name == 'qmlscene' command: qmlscene -qt5 --transparent --fullscreen $PLAINBOX_PROVIDER_DATA/resolution_test.qml estimated_duration: 10.0 _summary: Test default resolution _description: PURPOSE: This test will verify the default display resolution STEPS: 1. Click on Test to display the screen resolution overlay for 5 seconds. VERIFICATION: Is this acceptable for your display? plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/minimum_resolution requires: device.category == 'VIDEO' command: resolution_test --horizontal 800 --vertical 600 estimated_duration: 0.331 _summary: Test that system meets minimum resolution requirement _description: Ensure the current resolution meets or exceeds the recommended minimum resolution (800x600). See here for details: . https://help.ubuntu.com/community/Installation/SystemRequirements plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/maximum_resolution requires: device.category == 'VIDEO' package.name == 'zenity' command: zenity --info --text "Maximum resolution: $(xrandr -q |grep -A 1 "connected\( primary\)* [0-9]" |tail -1 |awk '{print $1}')" estimated_duration: 10 _summary: Test maximum supported resolution _description: PURPOSE: This test will verify the display is operating at its maximum supported resolution STEPS: 1. Consult the system's specifications and locate the screen's maximum supported resolution. 2. Click on Test to display the maximum resolution that can be used by Ubuntu on the current display. VERIFICATION: Is this the display's maximum resolution? id: graphics/modes plugin: shell category_id: 2013.com.canonical.plainbox::graphics command: graphics_modes_info estimated_duration: 0.250 _description: Collect info on graphics modes (screen resolution and refresh rate) _summary: Collect info on graphics modes id: graphics/color_depth plugin: shell category_id: 2013.com.canonical.plainbox::graphics command: color_depth_info estimated_duration: 0.150 _description: Collect info on color depth and pixel format. _summary: Collect info on color depth and pixel format. id: graphics/fresh_rate plugin: shell category_id: 2013.com.canonical.plainbox::graphics command: fresh_rate_info _description: Collect info on fresh rate. _summary: Collect info on fresh rate. id: graphics/graphic_memory plugin: shell category_id: 2013.com.canonical.plainbox::graphics command: graphic_memory_info _description: Collect info on graphic memory. _summary: Collect info on graphic memory. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/cycle_resolution requires: package.name == 'xorg' depends: graphics/VESA_drivers_not_in_use command: xrandr_cycle --screenshot-dir $PLAINBOX_SESSION_SHARE estimated_duration: 250.000 _summary: Test resolution cycling _description: PURPOSE: This test cycles through the detected video modes STEPS: 1. Click "Test" to start cycling through the video modes VERIFICATION: Did the screen appear to be working for each mode? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/rotation depends: graphics/xorg-version command: rotation_test estimated_duration: 20.000 _summary: Test rotation _description: PURPOSE: This test will test display rotation STEPS: 1. Click "Test" to test display rotation. The display will be rotated every 4 seconds. 2. Check if all rotations (normal right inverted left) took place without permanent screen corruption VERIFICATION: Did the display rotation take place without without permanent screen corruption? plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/compiz_check requires: package.name == 'nux-tools' command: ! /usr/lib/nux/unity_support_test -c -p 2>&1 | ansi_parser | grep -e ":\(\s\+\)no$" -ie "error" estimated_duration: 0.130 _summary: Test Compiz support _description: Check that hardware is able to run compiz plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/unity-support requires: package.name == 'nux-tools' command: ! /usr/lib/nux/unity_support_test -p 2>&1 | ansi_parser | grep -e ":\(\s\+\)no$" -ie "error" estimated_duration: 0.131 _description: Check that hardware is able to run Unity 3D _summary: Test Unity 3D support plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::graphics id: graphics/glxgears requires: package.name == 'mesa-utils' command: glxgears; true _summary: Test that glxgears works _description: PURPOSE: This test tests the basic 3D capabilities of your video card STEPS: 1. Click "Test" to execute an OpenGL demo. Press ESC at any time to close. 2. Verify that the animation is not jerky or slow. VERIFICATION: 1. Did the 3d animation appear? 2. Was the animation free from slowness/jerkiness? plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/3d_window_open_close requires: package.name == 'mesa-utils' command: window_test -t open-close -i 10 estimated_duration: 60.525 _summary: Test 3D window open/close _description: Open and close a 3D window multiple times plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/3d_window_suspend_resume requires: package.name == 'mesa-utils' command: window_test -t suspend-resume -i 10 estimated_duration: 121.00 _description: Open, suspend resume and close a 3D window multiple times _summary: Test a 3D window with suspend/resume plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/multi_3d_windows_open_close requires: package.name == 'mesa-utils' command: window_test -t open-close-multi -i 10 -w 4 estimated_duration: 60.000 _description: Open and close 4 3D windows multiple times _summary: Test Multi 3D window open/close plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/3d_window_move requires: package.name == 'mesa-utils' command: window_test -t move estimated_duration: 50.000 _description: Move a 3D window around the screen _summary: Test 3D window movement plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/screenshot requires: package.name == 'fswebcam' command: set -o pipefail; camera_test still --device=/dev/external_webcam -f ${PLAINBOX_SESSION_SHARE}/screenshot.jpg -q 2>&1 | ansi_parser _summary: Test grabbing a screenshot _description: PURPOSE: Take a screengrab of the current screen (logged on Unity desktop) STEPS: 1. Take picture using USB webcam VERIFICATION: Review attachment manually later plugin: attachment category_id: 2013.com.canonical.plainbox::graphics id: screenshot.jpg depends: graphics/screenshot command: base64 ${PLAINBOX_SESSION_SHARE}/screenshot.jpg _description: Attaches the screenshot captured in graphics/screenshot. _summary: Attach results of screenshot test plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: graphics/screenshot_fullscreen_video requires: package.name == 'fswebcam' command: [ -f ${PLAINBOX_PROVIDER_DATA}/video/Ogg_Theora_Video.ogv ] || { echo "Video file not found"; exit 1; } gsettings set org.gnome.totem repeat true totem --fullscreen ${PLAINBOX_PROVIDER_DATA}/video/Ogg_Theora_Video.ogv 2>/dev/null & set -o pipefail sleep 15 && camera_test still --device=/dev/external_webcam -f ${PLAINBOX_SESSION_SHARE}/screenshot_fullscreen_video.jpg -q 2>&1 | ansi_parser sleep 5 && totem --quit 2>/dev/null gsettings set org.gnome.totem repeat false _summary: Test FSV screenshot _description: PURPOSE: Take a screengrab of the current screen during fullscreen video playback STEPS: 1. Start a fullscreen video playback 2. Take picture using USB webcam after a few seconds VERIFICATION: Review attachment manually later plugin: attachment category_id: 2013.com.canonical.plainbox::graphics id: screenshot_fullscreen_video.jpg depends: graphics/screenshot_fullscreen_video command: base64 ${PLAINBOX_SESSION_SHARE}/screenshot_fullscreen_video.jpg _description: Attaches the screenshot captured in graphics/screenshot_fullscreen_video. _summary: Attach results of FSV screenshot test plainbox-provider-checkbox-0.25/jobs/local.txt.in0000664000175000017500000001561012646152433023274 0ustar sylvainsylvain00000000000000id: __audio__ plugin: local _description: Audio tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/audio.txt?(.in) id: __benchmarks__ plugin: local _description: Benchmarks tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/benchmarks.txt?(.in) id: __bluetooth__ plugin: local _description: Bluetooth tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/bluetooth.txt?(.in) id: __camera__ plugin: local _description: Camera tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/camera.txt?(.in) id: __codecs__ plugin: local _description: Codec tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/codecs.txt?(.in) id: __cpu__ plugin: local _description: CPU tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/cpu.txt?(.in) id: __daemons__ plugin: local _description: System Daemon tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/daemons.txt?(.in) id: __disk__ plugin: local _description: Disk tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/disk.txt?(.in) id: __dock__ plugin: local _description: Docking tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_UNITS/dock.pxu id: __ethernet__ plugin: local _description: Ethernet Device tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/ethernet.txt?(.in) id: __esata__ plugin: local _description: eSATA disk tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/esata.txt?(.in) id: __fingerprint__ plugin: local _description: Fingerprint reader tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/fingerprint.txt?(.in) id: __firewire__ plugin: local _description: Firewire disk tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/firewire.txt?(.in) id: __firmware__ plugin: local _description: Firmware tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/firmware.txt?(.in) id: __floppy__ plugin: local _description: Floppy disk tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/floppy.txt?(.in) id: __graphics__ plugin: local _description: Graphics tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/graphics.txt?(.in) $PLAINBOX_PROVIDER_DATA/../jobs/graphics-legacy.txt?(.in) id: __hibernate__ plugin: local _description: Hibernation tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/hibernate.txt?(.in) id: __info__ plugin: local _description: Informational tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/info.txt?(.in) id: __input__ plugin: local _description: Input Devices tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/input.txt?(.in) id: __install__ plugin: local _description: Software Installation tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/install.txt?(.in) id: __keys__ plugin: local _description: Hotkey tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/keys.txt?(.in) id: __led__ plugin: local _description: LED tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/led.txt?(.in) id: __mediacard__ plugin: local _description: Media Card tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/mediacard.txt?(.in) id: __memory__ plugin: local _description: Memory tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/memory.txt?(.in) id: __rendercheck__ plugin: local _description: Rendercheck tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/rendercheck.txt?(.in) id: __mir__ plugin: local _description: MIR tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/mir.txt?(.in) id: __miscellanea__ plugin: local _description: Miscellaneous tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/miscellanea.txt?(.in) id: __monitor__ plugin: local _description: Monitor tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/monitor.txt?(.in) id: __networking__ plugin: local _description: Non-device specific networking tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/networking.txt?(.in) id: __optical__ plugin: local _description: Optical Drive tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/optical.txt?(.in) id: __panel_clock__ plugin: local _description: Panel Clock Verification tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/panel_clock_test.txt?(.in) id: __panel_reboot__ plugin: local _description: Panel Reboot Verification tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/panel_reboot.txt?(.in) id: __expresscard__ plugin: local _description: ExpressCard tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/expresscard.txt?(.in) id: __peripheral__ plugin: local _description: Peripheral tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/peripheral.txt?(.in) id: __power-management__ plugin: local _description: Power Management tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/power-management.txt?(.in) id: __server-services__ plugin: local _description: Server Services checks command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/server-services.txt?(.in) id: __suspend__ plugin: local _description: Suspend tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/suspend.txt?(.in) id: __thunderbolt__ plugin: local _description: Thunderbolt tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/thunderbolt.pxu id: __touchpad__ plugin: local _description: Touchpad tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/touchpad.txt?(.in) id: __touchscreen__ plugin: local _description: Touchscreen tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/touchscreen.txt?(.in) id: __usb__ plugin: local _description: USB tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/usb.txt?(.in) id: __user_apps__ plugin: local _description: User Applications command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/user_apps.txt?(.in) id: __virtualization__ plugin: local _description: Virtualization tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/virtualization.txt?(.in) id: __wireless__ plugin: local _description: Wireless networking tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/wireless.txt?(.in) id: __mobilebroadband__ plugin: local _description: Mobile broadband tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/mobilebroadband.txt?(.in) id: __stress__ plugin: local _description: Stress tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/stress.txt?(.in) id: __smoke__ plugin: local _description: Smoke tests command: shopt -s extglob cat $PLAINBOX_PROVIDER_DATA/../jobs/smoke.txt?(.in) plainbox-provider-checkbox-0.25/jobs/ethernet.txt.in0000664000175000017500000001153712646152433024024 0ustar sylvainsylvain00000000000000unit: packaging meta-data os-id: debian Depends: module-init-tools plugin: shell category_id: 2013.com.canonical.plainbox::ethernet id: ethernet/detect requires: device.category == 'NETWORK' or device.category == 'WIRELESS' package.name == 'module-init-tools' package.name == 'pciutils' command: network_device_info estimated_duration: 1.2 _description: Test to detect and return information about available network controllers on the system under test. plugin: shell category_id: 2013.com.canonical.plainbox::ethernet id: ethernet/info_automated requires: executable.name == 'ip' device.category == 'NETWORK' command: udev_resource | filter_templates -w "category=NETWORK" | awk "/interface: / { print \$2 }" | xargs -n 1 network_info estimated_duration: 30.0 _description: Gathers some info on the current state of your network devices. If no devices are found, the test will exit with an error. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::ethernet id: ethernet/wired_connection command: network_check estimated_duration: 1.2 _description: PURPOSE: This test will check your wired connection STEPS: 1. Click on the Network icon in the top panel 2. Select a network below the "Wired network" section 3. Click "Test" to verify that it's possible to establish a HTTP connection VERIFICATION: Did a notification show and was the connection correctly established? unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: shell category_id: 2013.com.canonical.plainbox::ethernet id: ethernet/multi_nic_device{__index__}_{interface} _summary: Multi-NIC Iperf testing for NIC {interface} estimated_duration: 7400.0 requires: device.path == '{path}' package.name == 'iperf' package.name == 'ethtool' package.name == 'nmap' user: root environ: TEST_TARGET_IPERF command: network test -i {interface} -t iperf --fail-threshold 80 --datasize 200 --num_runs 4 _description: This test uses iperf to ensure network devices pass data at an acceptable minimum percentage of advertized speed. unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: shell category_id: 2013.com.canonical.plainbox::ethernet id: ethernet/multi_iperf3_nic_device{__index__}_{interface} _summary: Multi-NIC Iperf3 testing for NIC {interface} estimated_duration: 7400.0 requires: device.path == '{path}' package.name == 'iperf3' package.name == 'ethtool' package.name == 'nmap' user: root environ: TEST_TARGET_IPERF command: network test -i {interface} -t iperf --iperf3 --fail-threshold 80 --cpu-load-fail-threshold 90 --datasize 200 --num_runs 4 _description: This test uses iperf3 to ensure network devices pass data at an acceptable minimum percentage of advertized speed. unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: shell category_id: 2013.com.canonical.plainbox::ethernet id: ethernet/ethertool_check_device{__index__}_{interface} _summary: ethtool check for NIC {interface} estimated_duration: 330.0 requires: device.path == '{path}' package.name == 'ethtool' command: ethtool {interface} _description: This test executes ethtool requests against ethernet device {__index__} ({interface}). unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::ethernet id: ethernet/maximum_bandwidth_device{__index__}_{interface} _summary: Maximum bandwidth test of device {__index__} ({interface}) estimated_duration: 330.0 requires: device.path == '{path}' package.name == 'zenity' package.name == 'iperf' user: root environ: TEST_TARGET_IPERF command: network test -i {interface} -t iperf 2>&1 | cat - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'ethernet max bw {interface}' _purpose: User verification of whether the observed transfer throughput is acceptable for the type and maximum speed of each ethernet interface. _steps: 1. Click "Test". 2. Read the network test summary and confirm that the throughput is acceptable. 3. If needed, click "Test" again to repeat the transfer test. _verification: Was the reported throughput acceptable for the type and maximum speed of this interface? unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: shell category_id: 2013.com.canonical.plainbox::ethernet id: ethernet/stress_performance_device{__index__}_{interface} _summary: Stress and performance test of ethernet device {__index__} ({interface}) estimated_duration: 330.0 requires: device.path == '{path}' package.name == 'ethtool' command: network test -i {interface} -t stress _description: Automated test that tests performance of ethernet device {__index__} ({interface}). plainbox-provider-checkbox-0.25/jobs/keys.txt.in0000664000175000017500000002101212646152433023146 0ustar sylvainsylvain00000000000000plugin: user-interact category_id: 2013.com.canonical.plainbox::keys id: keys/lock-screen estimated_duration: 30.0 requires: device.category == 'KEYBOARD' command: lock_screen_watcher _description: PURPOSE: This test will test the screen lock key STEPS: 1. Commence the test. If there is no such key, please skip this test. 2. Press the lock screen button on the keyboard in 30 seconds. 3. If the screen is locked, move the mouse or press any key to activate the prompt. 4. Input the password to unlock the screen. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: manual category_id: 2013.com.canonical.plainbox::keys id: keys/brightness estimated_duration: 30.0 requires: dmi.product in ['Notebook','Laptop','Portable','All In One','All-In-One','AIO'] _description: PURPOSE: This test will test the brightness key STEPS: 1. Press the brightness buttons on the keyboard VERIFICATION: Did the brightness change following to your key presses? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::keys id: keys/volume estimated_duration: 30.0 requires: device.category == 'KEYBOARD' user: root command: key_test -s '0xe02e,0xe0ae:Volume Down' '0xe030,0xe0b0:Volume Up' _description: PURPOSE: This test will test the volume keys of your keyboard STEPS: Skip this test if your computer has no volume keys. 1. Click test to open a window on which to test the volume keys. 2. If all the keys work, the test will be marked as passed. VERIFICATION: Do the keys work as expected? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::keys id: keys/mute estimated_duration: 30.0 requires: device.category == 'KEYBOARD' user: root command: key_test -s '0xe020,0xe0a0:Mute' _description: PURPOSE: This test will test the mute key of your keyboard STEPS: 1. Click test to open a window on which to test the mute key. 2. If the key works, the test will pass and the window will close. VERIFICATION: Does the mute key work as expected? plugin: manual category_id: 2013.com.canonical.plainbox::keys id: keys/sleep estimated_duration: 90.0 requires: device.category == 'KEYBOARD' _description: PURPOSE: This test will test the sleep key STEPS: 1. Press the sleep key on the keyboard 2. Wake your system up by pressing the power button VERIFICATION: Did the system go to sleep after pressing the sleep key? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::keys id: keys/battery-info estimated_duration: 30.0 requires: dmi.product in ['Notebook','Laptop','Portable'] user: root command: key_test -s '0xe071,0xef1:Battery Info' _description: PURPOSE: This test will test the battery information key STEPS: Skip this test if you do not have a Battery Button. 1. Click Test to begin 2. Press the Battery Info button (or combo like Fn+F3) 3: Close the Power Statistics tool if it opens VERIFICATION: Did the Battery Info key work as expected? plugin: manual category_id: 2013.com.canonical.plainbox::keys id: keys/wireless estimated_duration: 90.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: This test will test the wireless key STEPS: 1. Press the wireless key on the keyboard 2. Check that the wifi LED turns off or changes color 3. Check that wireless is disabled 4. Press the same key again 5. Check that the wifi LED turns on or changes color 6. Check that wireless is enabled VERIFICATION: Did the wireless turn off on the first press and on again on the second? (NOTE: the LED functionality will be reviewed in a following test. Please only consider the functionality of the wifi itself here.) plugin: user-interact category_id: 2013.com.canonical.plainbox::keys id: keys/media-control estimated_duration: 30.0 requires: device.category == 'KEYBOARD' user: root command: key_test -s 0xe010,0xe090:Previous 0xe024,0xe0a4:Stop 0xe019,0xe099:Next 0xe022,0xe0a2:Play _description: PURPOSE: This test will test the media keys of your keyboard STEPS: Skip this test if your computer has no media keys. 1. Click test to open a window on which to test the media keys. 2. If all the keys work, the test will be marked as passed. VERIFICATION: Do the keys work as expected? plugin: user-interact category_id: 2013.com.canonical.plainbox::keys id: keys/super estimated_duration: 30.0 requires: device.category == 'KEYBOARD' user: root command: key_test -s '0xe05b,0xe0db:Left Super Key' _description: PURPOSE: This test will test the super key of your keyboard STEPS: 1. Click test to open a window on which to test the super key. 2. If the key works, the test will pass and the window will close. VERIFICATION: Does the super key work as expected? plugin: manual category_id: 2013.com.canonical.plainbox::keys id: keys/video-out estimated_duration: 120.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: Validate that the External Video hot key is working as expected STEPS: 1. Plug in an external monitor 2. Press the display hot key to change the monitors configuration VERIFICATION: Check that the video signal can be mirrored, extended, displayed on external or onboard only. plugin: manual category_id: 2013.com.canonical.plainbox::keys id: keys/touchpad estimated_duration: 30.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: Verify touchpad hotkey toggles touchpad functionality on and off STEPS: 1. Verify the touchpad is functional 2. Tap the touchpad toggle hotkey 3. Tap the touchpad toggle hotkey again VERIFICATION: Verify the touchpad has been disabled and re-enabled. plugin: manual category_id: 2013.com.canonical.plainbox::keys id: keys/keyboard-backlight estimated_duration: 30.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: Verify that the keyboard backlight toggle key works properly STEPS: 1. Tap the keyboard backlight key 2. Confirm that the keyboard backlight was toggled to the opposite state 3. Tap the keyboard backlight key again 4. Confirm that the keyboard backlight was toggled to the opposite state VERIFICATION: Did the keyboard backlight state change on each press? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::keys id: keys/microphone-mute estimated_duration: 60.0 requires: device.category == 'AUDIO' device.category == 'KEYBOARD' package.name == 'alsa-base' package.name == 'pulseaudio-utils' package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 alsa_record_playback EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will test the mute key for your microphone STEPS: 1. Click "Test" then speak: "Imagination is more important than knowledge" (or anything else) into your microphone. 2. While you are speaking, please press the mute key for the microphone to mute it and press it again to unmute. 3. After a few seconds, your speech will be played back to you. If the key works, your speech should be interrupted for a few seconds. VERIFICATION: Does the microphone mute key work as expected? plugin: manual category_id: 2013.com.canonical.plainbox::keys id: keys/hibernate estimated_duration: 120.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: This test will test the hibernate key STEPS: 1. Press the hibernate key on the keyboard 2. Check that the system hibernated correctly 3. Wake your system after hibernating by pressing the power button VERIFICATION: Did the system go to hibernate after pressing the hibernate key? plugin: manual category_id: 2013.com.canonical.plainbox::keys id: keys/keyboard-overhead-light estimated_duration: 30.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: This test will test the keyboard overhead light key or switch STEPS: 1. Press the keyboard overhead light key or swtich on the light 2. Check the the keyboard overhead light turn on correctly 3. Press the key or switch again to toggle off the light VERIFICATION: Did the keyboard overhead light key or switch turns on and off the light? plainbox-provider-checkbox-0.25/jobs/info.txt.in0000664000175000017500000003066712646152433023146 0ustar sylvainsylvain00000000000000# The dkms_info script requires python3-debian package unit: packaging meta-data os-id: debian Depends: python3-debian # The dkms_info script requires python3-guacamole package unit: packaging meta-data os-id: debian Depends: python3-guacamole (>= 0.9) id: codecs_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info requires: device.driver == 'snd_hda_intel' command: cat /proc/asound/card*/codec#* estimated_duration: 0.023 _description: Attaches a report of installed codecs for Intel HDA id: cpuinfo_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: cat /proc/cpuinfo estimated_duration: 0.006 _description: Attaches a report of CPU information _summary: Attach a copy of /proc/cpuinfo id: dmesg_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: cat /var/log/dmesg | ansi_parser estimated_duration: 0.640 _description: Attaches a copy of /var/log/dmesg to the test results _summary: Attach a copy of /var/log/dmesg id: dmi_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: [ -d /sys/class/dmi/id/ ] && (grep -r . /sys/class/dmi/id/ 2>/dev/null || true) || false estimated_duration: 0.044 _description: Attaches info on DMI _summary: Attach a copy of /sys/class/dmi/id/* id: dmidecode_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info requires: package.name == 'dmidecode' user: root command: dmidecode | iconv -t 'utf-8' -c estimated_duration: 0.030 _description: Attaches dmidecode output _summary: Attach a copy of of the output of dmidecode id: lshw_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info requires: package.name == 'lshw' user: root command: lshw | iconv -t 'utf-8' -c _description: Attaches lshw output id: efi_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info user: root command: [ -d /sys/firmware/efi ] && grep -m 1 -o --color=never 'EFI v.*' /var/log/kern.log* || true estimated_duration: 0.5 _description: Attaches the firmware version id: lspci_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: lspci -vvnn | iconv -t 'utf-8' -c estimated_duration: 0.042 _description: Attaches very verbose lspci output. _summary: Attach a list of PCI devices id: lspci_network_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: lspci -vvnnQ | iconv -t 'utf-8' -c estimated_duration: 1.322 _description: Attaches very verbose lspci output (with central database Query). id: lspci_standard_config_attachment _summary: Attach PCI configuration space hex dump plugin: attachment category_id: 2013.com.canonical.plainbox::info command: lspci -x estimated_duration: 0.1 _description: Attaches a hex dump of the standard part of the PCI configuration space for all PCI devices. id: lsusb_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info requires: package.name == 'usbutils' user: root command: lsusb -vv | iconv -t 'utf-8' -c estimated_duration: 0.700 _description: Attaches a list of detected USB devices. id: meminfo_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: cat /proc/meminfo estimated_duration: 0.043 _description: Attaches info on system memory as seen in /proc/meminfo. id: modprobe_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: find /etc/modprobe.* -name \*.conf | xargs cat estimated_duration: 0.015 _description: Attaches the contents of the various modprobe conf files. _summary: Attach the contents of modprobe configuration files id: modinfo_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info _summary: Attach modinfo information command: for mod in $(lsmod | cut -f 1 -d " ") do printf "%-16s%s\n" "name:" "$mod" modinfo $mod echo done estimated_duration: 1.5 _description: Attaches modinfo information for all currently loaded modules id: modules_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: cat /etc/modules estimated_duration: 0.004 _description: Attaches the contents of the /etc/modules file. _summary: Attach the contents of /etc/modules id: sysctl_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: find /etc/sysctl.* -name \*.conf | xargs cat estimated_duration: 0.014 _description: Attaches the contents of various sysctl config files. _summary: Attach sysctl configuration files. id: sysfs_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info _description: Attaches a report of sysfs attributes. command: for i in `udevadm info --export-db | sed -n 's/^P: //p'`; do echo "P: $i" udevadm info --attribute-walk --path=/sys$i 2>/dev/null | sed -n 's/ ATTR{\(.*\)}=="\(.*\)"/A: \1=\2/p' echo done estimated_duration: 6.344 _summary: Attach detailed sysfs property output from udev id: udev_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: udevadm info --export-db | xml_sanitize estimated_duration: 1.465 _description: Attaches a dump of the udev database showing system hardware information. _summary: Attach hardware database (udev) id: udev_resource_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: udev_resource estimated_duration: 0.432 _description: Attaches the output of udev_resource, for debugging purposes id: gcov_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info requires: package.name == 'lcov' user: root command: gcov_tarball _description: Attaches a tarball of gcov data if present. id: lsmod_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: lsmod_info estimated_duration: 0.5 _description: Attaches a list of the currently running kernel modules. _summary: Attach a list of currently running kernel modules id: dkms_info_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: dkms_info --format json _description: Attaches json dumps of installed dkms package information. _summary: Attaches json dumps of installed dkms package information. plugin: attachment category_id: 2013.com.canonical.plainbox::info id: acpi_sleep_attachment command: [ -e /proc/acpi/sleep ] && cat /proc/acpi/sleep || echo "No /proc/acpi/sleep found" estimated_duration: 0.5 _description: Attaches the contents of /proc/acpi/sleep if it exists. plugin: shell category_id: 2013.com.canonical.plainbox::info id: info/bootchart _description: Bootchart information. requires: package.name == 'bootchart' or package.name == 'pybootchartgui' user: root command: process_wait -u root bootchart collector ureadahead; \ [ `ls /var/log/bootchart/*.tgz 2>/dev/null | wc -l` -lt 2 ] && reboot && sleep 100 plugin: local _summary: SATA/IDE device information. id: info/hdparm estimated_duration: 1.0 _description: Attaches SATA/IDE device information reported by hdparm. requires: package.name == 'hdparm' device.category == 'DISK' command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=DISK"' plugin: attachment category_id: 2013.com.canonical.plainbox::info id: info/hdparm_`ls /sys$path/block`.txt estimated_duration: 1.0 requires: device.path == "$path" block_device.`ls /sys$path/block`_state != 'removable' user: root command: hdparm -I /dev/`ls /sys$path/block` EOF plugin: attachment category_id: 2013.com.canonical.plainbox::info id: bootchart.png depends: info/bootchart requires: package.name == 'pybootchartgui' _description: Attaches the bootchart png file for bootchart runs command: file=`ls /var/log/bootchart/*.png 2>/dev/null | tail -1`; \ [ -e "$file" ] && cat "$file" plugin: attachment category_id: 2013.com.canonical.plainbox::info id: bootchart.tgz depends: info/bootchart _description: Attaches the bootchart log for bootchart test runs. command: file=`ls /var/log/bootchart/*.tgz 2>/dev/null | tail -1`; \ [ -e "$file" ] && cat "$file" plugin: attachment category_id: 2013.com.canonical.plainbox::info id: installer_bootchart.tgz command: [ -f /var/log/installer/bootchart.tgz ] && base64 /var/log/installer/bootchart.tgz _description: installs the installer bootchart tarball if it exists. plugin: attachment category_id: 2013.com.canonical.plainbox::info id: installer_debug.gz user: root command: [ -f /var/log/installer/debug ] && gzip -9 -c /var/log/installer/debug | base64 estimated_duration: 0.1 _description: Attaches the installer debug log if it exists. plugin: attachment category_id: 2013.com.canonical.plainbox::info id: info/touchpad_driver requires: device.category == 'TOUCHPAD' command: touchpad_driver_info estimated_duration: 0.384 _description: Returns the name, driver name and driver version of any touchpad discovered on the system. plugin: attachment category_id: 2013.com.canonical.plainbox::info id: info/audio_device_driver requires: package.name == 'pulseaudio-utils' package.name == 'module-init-tools' device.category == 'AUDIO' command: audio_driver_info estimated_duration: 0.177 _description: Lists the device driver and version for all audio devices. plugin: attachment category_id: 2013.com.canonical.plainbox::info id: info/network_devices requires: device.category == 'NETWORK' or device.category == 'WIRELESS' package.name == 'module-init-tools' package.name == 'pciutils' command: network_device_info estimated_duration: 0.550 _description: Provides information about network devices plugin: attachment category_id: 2013.com.canonical.plainbox::info id: info/mobile_broadband_info command: broadband_info estimated_duration: 0.5 _description: Provides information about wwan/mobile broadband devices plugin: attachment category_id: 2013.com.canonical.plainbox::info id: info/xrandr command: xrandr -q --verbose _description: Provides information about displays attached to the system plugin: attachment category_id: 2013.com.canonical.plainbox::info id: info/disk_partitions estimated_duration: 1.0 user: root command: parted -l -s _description: Attaches information about disk partitions plugin: attachment category_id: 2013.com.canonical.plainbox::info id: info/buildstamp estimated_duration: 0.1 _description: Attaches the buildstamp identifier for the preinstalled OS _summary: Attach /etc/buildstamp command: [ -s /etc/buildstamp ] && cat /etc/buildstamp plugin: shell category_id: 2013.com.canonical.plainbox::info id: info/detect_recovery requires: package.name == 'dell-recovery' or package.name == 'ubuntu-recovery' user: root estimated_duration: 0.2 _summary: Check existence of recovery partition _description: Check existence of recovery partition command: recovery_info plugin: shell category_id: 2013.com.canonical.plainbox::info id: info/detect_dell_recovery depends: info/detect_recovery requires: package.name == 'dell-recovery' user: root estimated_duration: 0.2 _summary: Check the recovery type is dell or not _description: Check the recovery type is dell or not command: recovery_info checktype DELL plugin: attachment category_id: 2013.com.canonical.plainbox::info id: recovery_info_attachment depends: info/detect_recovery requires: package.name == 'dell-recovery' or package.name == 'ubuntu-recovery' user: root estimated_duration: 0.2 _summary: Attach the recovery partition versions _description: Attach the recovery partition version image_version is the preinstalled OS image version bto_version is only for dell_recovery Example: image_version: somerville-trusty-amd64-20140620-0 bto_version: A00_dell-bto-trusty-houston-15-A11-iso-20141203-0.iso command: recovery_info version plugin: attachment category_id: 2013.com.canonical.plainbox::info id: dell_bto_xml_attachment depends: info/detect_dell_recovery requires: package.name == 'dell-recovery' user: root estimated_duration: 0.5 _summary: Attach the bto.xml in Dell recovery partition _description: bto.xml is basically a Fish manifest The information include: - fish packages - dell recovery stage 2 boot log command: recovery_info file bto.xml plugin: attachment category_id: 2013.com.canonical.plainbox::info id: info/kvm_output estimated_duration: 0.1 _description: Attaches the debug log from the virtualization/kvm_check_vm test to the results submission. command: [ -f $PLAINBOX_SESSION_SHARE/virt_debug ] && cat $PLAINBOX_SESSION_SHARE/virt_debug id: kernel_cmdline_attachment plugin: attachment category_id: 2013.com.canonical.plainbox::info command: cat /proc/cmdline estimated_duration: 0.005 _description: Attaches the kernel command line used to boot _summary: Attach a copy of /proc/cmdline plainbox-provider-checkbox-0.25/jobs/expresscard.txt.in0000664000175000017500000000057712646152433024533 0ustar sylvainsylvain00000000000000plugin: manual category_id: 2013.com.canonical.plainbox::expresscard id: expresscard/verification _description: PURPOSE: This will verify that an ExpressCard slot can detect inserted devices. STEPS: Skip this test if you do not have an ExpressCard slot. 1. Plug an ExpressCard device into the ExpressCard slot VERIFICATION: Was the device correctly detected? plainbox-provider-checkbox-0.25/jobs/disk.txt.in0000664000175000017500000001227512646152433023140 0ustar sylvainsylvain00000000000000# This is for bin/disk_info unit: packaging meta-data os-id: debian Depends: lshw plugin: shell category_id: 2013.com.canonical.plainbox::disk id: disk/detect estimated_duration: 0.25 user: root command: disk_info _description: Displays information about each disk detected on the system under test. unit: template template-unit: job template-imports: from 2013.com.canonical.certification import device template-resource: device template-filter: device.category == 'DISK' and device.name != '' plugin: shell category_id: 2013.com.canonical.plainbox::disk id: staging/disk/stats_{name} requires: block_device.{name}_state != 'removable' user: root command: disk_stats_test {name} _summary: Disk statistics for /dev/{name} _description: This test checks disk stats, generates some activity and rechecks stats to verify they've changed. It also verifies that disks appear in the various files they're supposed to. . This test will inspect the following disk: . product name: {product} sysfs path: {path} device node path: /dev/{name} plugin: local _summary: Check stats changes for each disk flags: deprecated id: disk/stats requires: device.category == 'DISK' _description: This test generates some disk activity and checks the stats to ensure drive activity is being recorded properly. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=DISK"' plugin: shell category_id: 2013.com.canonical.plainbox::disk id: disk/stats_`ls /sys$path/block` flags: deprecated requires: device.path == "$path" block_device.`ls /sys$path/block`_state != 'removable' user: root command: disk_stats_test `ls /sys$path/block | sed 's|!|/|'` description: This test checks disk stats, generates some activity and rechecks stats to verify they've changed. It also verifies that disks appear in the various files they're supposed to. EOF plugin: local _summary: SMART test id: disk/smart estimated_duration: 0.30 requires: package.name == 'smartmontools' device.category == 'DISK' _description: This tests the SMART capabilities of disks detected on the system. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=DISK"' plugin: shell category_id: 2013.com.canonical.plainbox::disk id: disk/smart_`ls /sys$path/block` requires: device.path == "$path" block_device.`ls /sys$path/block`_state != 'removable' block_device.`ls /sys$path/block`_smart == 'True' description: This tests the SMART capabilities for $product (Note that this test will not work against hardware RAID) user: root command: disk_smart -b /dev/`ls /sys$path/block | sed 's|!|/|'` -s 130 -t 530 EOF plugin: local _summary: Verify system storage performs at or above baseline performance id: disk/read_performance estimated_duration: 0.30 requires: device.category == 'DISK' _description: Verify system storage performs at or above a baseline speed. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=DISK"' plugin: shell category_id: 2013.com.canonical.plainbox::disk id: disk/read_performance_`ls /sys$path/block` estimated_duration: 65.0 requires: device.path == "$path" block_device.`ls /sys$path/block`_state != 'removable' description: Disk performance test for $product user: root command: disk_read_performance_test `ls /sys$path/block | sed 's|!|/|'` EOF plugin: local _summary: Verify that storage devices, such as Fibre Channel and RAID, perform under stress. id: disk/storage_devices estimated_duration: 1.0 requires: device.category == 'DISK' _description: Verify that storage devices, such as Fibre Channel and RAID, perform under stress without data loss or corruption. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=DISK"' plugin: shell category_id: 2013.com.canonical.plainbox::disk id: disk/storage_device_`ls /sys$path/block` estimated_duration: 375.0 user: root requires: device.path == "$path" block_device.`ls /sys$path/block`_state != 'removable' description: Disk I/O stress test for $product command: storage_test `ls /sys$path/block | sed 's|!|/|'` EOF plugin: shell category_id: 2013.com.canonical.plainbox::disk id: disk/spindown estimated_duration: 875.0 requires: device.category == 'DISK' package.name == 'smartmontools' user: root command: spindown _description: Some new hard drives include a feature that parks the drive heads after a short period of inactivity. This is a power-saving feature, but it can have a bad interaction with the operating system that results in the drive constantly parked then activated. This produces excess wear on the drive, potentially leading to early failures. plugin: user-interact category_id: 2013.com.canonical.plainbox::disk id: disk/hdd-parking estimated_duration: 60.0 requires: device.category == 'DISK' package.name == 'hdapsd' depends: input/accelerometer user: root command: hdd_parking _description: PURPOSE: This test checks that a systems drive protection mechanism works properly. STEPS: 1. Click on Test 2. Move the system under test around, ensuring it is raised and lowered at some point. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plainbox-provider-checkbox-0.25/jobs/peripheral.txt.in0000664000175000017500000000313312646152433024332 0ustar sylvainsylvain00000000000000plugin: manual category_id: 2013.com.canonical.plainbox::peripheral id: peripheral/printer _description: PURPOSE: This test will verify that a network printer is usable STEPS: 1. Make sure that a printer is available in your network 2. Click on the Gear icon in the upper right corner and then click on Printers 3. If the printer isn't already listed, click on Add 4. The printer should be detected and proper configuration values should be displayed 5. Print a test page VERIFICATION: Were you able to print a test page to the network printer? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::peripheral id: peripheral/external-usb-modem command: network_check _description: PURPOSE: This test will verify that a USB DSL or Mobile Broadband modem works STEPS: 1. Connect the USB cable to the computer 2. Right click on the Network icon in the panel 3. Select 'Edit Connections' 4. Select the 'DSL' (for ADSL modem) or 'Mobile Broadband' (for 3G modem) tab 5. Click on 'Add' button 6. Configure the connection parameters properly 7. Notify OSD should confirm that the connection has been established 8. Select Test to verify that it's possible to establish an HTTP connection VERIFICATION: Was the connection correctly established? plugin: shell category_id: 2013.com.canonical.plainbox::peripheral id: peripheral/external-usb-modem-http depends: peripheral/external-usb-modem command: wget -SO /dev/null http://$TRANSFER_SERVER _description: Automated test case to make sure that it's possible to download files through HTTP plainbox-provider-checkbox-0.25/jobs/power-management.txt.in0000664000175000017500000002172612646152433025455 0ustar sylvainsylvain00000000000000plugin: manual category_id: 2013.com.canonical.plainbox::power-management id: power-management/shutdown-boot estimated_duration: 300.0 _description: PURPOSE: This test will check your system shutdown/booting cycle. STEPS: 1. Shutdown your machine. 2. Boot your machine. 3. Repeat steps 1 and 2 at least 5 times. VERIFICATION: Did the system shutdown and rebooted correctly? plugin: shell category_id: 2013.com.canonical.plainbox::power-management id: power-management/fwts_wakealarm environ: PLAINBOX_SESSION_SHARE estimated_duration: 25.0 user: root _description: Test ACPI Wakealarm (fwts wakealarm) requires: package.name == 'fwts' command: fwts_test -f aborted -t wakealarm -l $PLAINBOX_SESSION_SHARE/fwts-wakealarm.log plugin: attachment category_id: 2013.com.canonical.plainbox::power-management id: power-management/fwts_wakealarm-log-attach depends: power-management/fwts_wakealarm estimated_duration: 2.0 _description: Attach log from fwts wakealarm test requires: package.name == 'fwts' command: [ -e ${PLAINBOX_SESSION_SHARE}/fwts-wakealarm.log ] && cat ${PLAINBOX_SESSION_SHARE}/fwts-wakealarm.log plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::power-management id: power-management/poweroff estimated_duration: 120.0 depends: power-management/fwts_wakealarm user: root environ: PLAINBOX_SESSION_SHARE requires: package.name == 'upstart' package.name == 'fwts' command: pm_test poweroff --log-level=debug --log-dir=$PLAINBOX_SESSION_SHARE flags: noreturn _description: PURPOSE: This test will check the system's ability to power-off and boot. STEPS: 1. Select "Test" to begin. 2. The machine will shut down. 3. Power the machine back on. 4. After rebooting, wait for the test prompts to inform you that the test is complete. 5. Once the test has completed, restart checkbox and select 'Re-run' when prompted. VERIFICATION: If the machine successfully shuts down and boots, select 'Yes', otherwise, select 'No'. plugin: attachment category_id: 2013.com.canonical.plainbox::power-management id: power-management/poweroff-log-attach estimated_duration: 1.0 command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/*poweroff.1.log | base64 _description: This will attach any logs from the power-management/poweroff test to the results. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::power-management id: power-management/reboot estimated_duration: 120.0 user: root environ: PLAINBOX_SESSION_SHARE requires: package.name == 'upstart' package.name == 'fwts' command: pm_test reboot --log-level=debug --log-dir=$PLAINBOX_SESSION_SHARE flags: noreturn _description: PURPOSE: This test will check the system's ability to reboot cleanly. STEPS: 1. Select "Test" to begin. 2. The machine will reboot. 3. After rebooting, wait for the test prompts to inform you that the test is complete. 4. Once the test has completed, restart checkbox and select Re-Run when prompted. VERIFICATION: If the machine successfully reboots, select Yes then select Next. plugin: attachment category_id: 2013.com.canonical.plainbox::power-management id: power-management/reboot-log-attach estimated_duration: 1.0 command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/*reboot.1.log | base64 _description: This will attach any logs from the power-management/reboot test to the results. plugin: manual category_id: 2013.com.canonical.plainbox::power-management id: power-management/lid estimated_duration: 120.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: This test will check your lid sensors. STEPS: 1. Close your laptop lid. VERIFICATION: Does closing your laptop lid cause your system to suspend? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::power-management id: power-management/lid_close estimated_duration: 60.0 requires: device.product == 'Lid Switch' command: for i in `seq 20`; do state=`cat /proc/acpi/button/lid/*/state | awk '{print $2}'` [ "$state" = "closed" ] && exit 0 || sleep 0.5 done exit 1 _description: PURPOSE: This test will check your lid sensors STEPS: 1. Click "Test". 2. Close and open the lid. VERIFICATION: Did the screen turn off while the lid was closed? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::power-management id: power-management/lid_open estimated_duration: 60.0 requires: device.product == 'Lid Switch' command: for i in `seq 20`; do state=`cat /proc/acpi/button/lid/*/state | awk '{print $2}'` [ "$state" = "open" ] && exit 0 || sleep 0.5 done exit 1 _description: PURPOSE: This test will check your lid sensors. STEPS: 1. Click "Test". 2. Close the lid. 3. Wait 5 seconds with the lid closed. 4. Open the lid. VERIFICATION: Did the system resume when the lid was opened? plugin: shell category_id: 2013.com.canonical.plainbox::power-management id: power-management/rtc requires: rtc.state == 'supported' package.name == 'util-linux' cpuinfo.other != 'emulated by qemu' user: root command: hwclock -r estimated_duration: 0.02 _description: Verify that the Real-time clock (RTC) device functions properly, if present. plugin: shell category_id: 2013.com.canonical.plainbox::power-management id: power-management/tickless_idle estimated_duration: 1.0 requires: cpuinfo.platform in ('i386', 'x86_64', 'ppc64el', 'pSeries') _description: Check to see if CONFIG_NO_HZ is set in the kernel (this is just a simple regression check) command: zgrep 'CONFIG_NO_HZ=y' /boot/config-`uname -r` >/dev/null 2>&1 || ( echo "WARNING: Tickless Idle is NOT set" >&2 && exit 1 ) plugin: manual category_id: 2013.com.canonical.plainbox::power-management id: power-management/unplug_ac estimated_duration: 30.0 _description: PURPOSE: This test will ensure that the AC is unplugged for the battery drain tests to run. STEPS: 1. Unplug laptop from AC. VERIFICATION: Was the laptop unplugged from AC? plugin: shell category_id: 2013.com.canonical.plainbox::power-management id: power-management/battery_drain_idle estimated_duration: 90.0 requires: package.name == 'upower' depends: power-management/unplug_ac _description: Checks the battery drain during idle. Reports time and capacity until empty. command: battery_test -t 90 --idle plugin: shell category_id: 2013.com.canonical.plainbox::power-management id: power-management/battery_drain_movie estimated_duration: 90.0 requires: package.name == 'upower' depends: power-management/unplug_ac _description: Checks the battery drain while watching a movie. Reports time and capacity until empty. Requires MOVIE_VAR to be set. command: battery_test -t 90 --movie $MOVIE_VAR plugin: shell category_id: 2013.com.canonical.plainbox::power-management id: power-management/battery_drain_sleep estimated_duration: 140.0 user: root requires: package.name == 'upower' package.name == 'fwts' depends: power-management/unplug_ac _description: Checks the battery drain during suspend. Reports time and capacity until empty. command: battery_test -t 120 --sleep plugin: manual category_id: 2013.com.canonical.plainbox::power-management id: power-management/plug_ac estimated_duration: 30.0 depends: power-management/battery_drain_idle power-management/battery_drain_movie power-management/battery_drain_sleep _description: PURPOSE: This test will ensure that the AC is plugged back in after the battery. tests STEPS: 1. Plug laptop into AC. VERIFICATION: Was the laptop plugged into AC? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::power-management id: power-management/reboot_manual estimated_duration: 120.0 user:root command: shutdown -r now _description: PURPOSE: This test will verify that your system can successfully reboot. STEPS: 1. Select 'Test' to initiate a system reboot. 2. When the grub boot menu is displayed, boot into Ubuntu (Or allow the system to automatically boot on its own). 3. Once the system has restarted, log in and restart checkbox-certification-server. 4. Select 'Re-Run' to return to this test. 5. Select 'Yes' to indicate the test has passed if the system rebooted successfully, otherwise, select 'No' to indicate there was a problem. VERIFICATION: Did the system reboot correctly? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::power-management id: power-management/shutdown_manual estimated_duration: 120.0 user: root command: shutdown -h now _description: PURPOSE: This test will check your system shutdown/booting cycle STEPS: 1. Select 'Test' to initiate a system shutdown. 2. Power the system back on. 3. From the grub menu, boot into the Xen Hypervisor. 4. When the system has restarted, log in and restart checkbox-certification-server. 5. Select 'Re-Run' to return to this test. 6. Select 'Yes' to indicate the test has passed if the machine shut down successfully otherwise, Select 'No' to indicate there was a problem. VERIFICATION: Did the system shutdown and boot correctly? plainbox-provider-checkbox-0.25/jobs/virtualization.txt.in0000664000175000017500000000224012646152433025261 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::virtualization id: virtualization/kvm_check_vm user: root environ: KVM_TIMEOUT KVM_IMAGE http_proxy https_proxy estimated_duration: 300.0 requires: package.name == 'qemu-system' package.name == 'qemu-utils' virtualization.kvm == 'supported' command: virtualization kvm --debug --log-file=$PLAINBOX_SESSION_SHARE/virt_debug _description: Verifies that a KVM guest can be created and booted using an Ubuntu Server cloud image. _summary: Verify KVM VM boots plugin: shell category_id: 2013.com.canonical.plainbox::virtualization id: virtualization/xen_ok requires: package.name == 'libvirt-bin' user: root estimated_duration: 1.0 command: virsh -c xen:/// domstate Domain-0 _description: Test to verify that the Xen Hypervisor is running. _summary: Verify Xen is running plugin: shell category_id: 2013.com.canonical.plainbox::virtualization id: virtualization/xen_check_vm depends: virtualization/xen_ok user: root estimated_duration: 300.0 command: xen_test /images/xentest.img /images/xentest.xml _description: Test to check that a Xen domU image can boot and run on Xen on Ubuntu _summary: Verify Xen domU can boot plainbox-provider-checkbox-0.25/jobs/floppy.txt.in0000664000175000017500000000074212646152433023513 0ustar sylvainsylvain00000000000000plugin: local _summary: Floppy test id: floppy/check requires: device.driver == 'floppy' _description: Floppy test command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "driver=floppy"' plugin: shell category_id: 2013.com.canonical.plainbox::floppy id: floppy/check_`ls /sys$path/driver/*/*/*/block` requires: device.path == "$path" description: Floppy test for $product user: root command: floppy_test /dev/`ls /sys$path/driver/*/*/*/block` EOF plainbox-provider-checkbox-0.25/jobs/miscellanea.txt.in0000664000175000017500000002277112646152433024465 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/submission-resources depends: cpuinfo dmi dpkg lsb package requirements uname dmi_attachment sysfs_attachment udev_attachment estimated_duration: 1.0 command: true _description: A meta-job that verifies the data necessary for a complete result submission are present. Failure indicates that the results are incomplete and may be rejected. plugin: manual category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/tester-info _description: PURPOSE: Keep tester related information in the report STEPS: 1. Tester Information 2. Please enter the following information in the comments field: a. Name b. Email Address c. Reason for this test run VERIFICATION: Nothing to verify for this test plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/chvt requires: package.name == 'kbd' user: root command: cycle_vts _description: PURPOSE: This test will check that the system can switch to a virtual terminal and back to X STEPS: 1. Click "Test" to switch to another virtual terminal and then back to X VERIFICATION: Did your screen change temporarily to a text console and then switch back to your current session? plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/fwts_test estimated_duration: 1.2 requires: package.name == 'fwts' user: root _description: Run Firmware Test Suite (fwts) automated tests. environ: PLAINBOX_SESSION_SHARE command: fwts_test -l $PLAINBOX_SESSION_SHARE/fwts_results.log plugin: attachment category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/fwts_results.log command: [[ -e ${PLAINBOX_SESSION_SHARE}/fwts_results.log ]] && cat ${PLAINBOX_SESSION_SHARE}/fwts_results.log _description: Attaches the miscellanes/fwts_test results log to the submission. plugin: attachment category_id: 2013.com.canonical.plainbox::miscellanea estimated_duration: 0.5 id: miscellanea/fwts_results_hwe.log.gz command: [ -f $PLAINBOX_SESSION_SHARE/fwts_results_hwe.log ] && gzip -c $PLAINBOX_SESSION_SHARE/fwts_results_hwe.log | base64 _description: Attaches the FWTS results log to the submission (to HWE) _summary: Attach FWTS log to submission (to HWE) plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/ipmi_test requires: package.name == 'ipmitool' user: root command: ipmi_test _description: This will run some basic commands in-band against a BMC, verifying that IPMI works. Use of MAAS to deploy the system implicitly tests out-of-band BMC control. plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea estimated_duration: 0.5 id: miscellanea/boot_mode requires: cpuinfo.platform in ("i386", "x86_64", "aarch64") _summary: EFI-mode boot test _description: Test to verify that the system booted in EFI mode rather than Legacy/BIOS mode. command: if [ -d "/sys/firmware/efi" ] ; then echo "System booted in EFI mode" else echo "System did NOT boot in EFI mode" exit 1 fi plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/bmc_info requires: package.name == 'ipmitool' estimated_duration: 0.5 user: root command: bmc_info _description: This will gather some info about the BMC itself for diagnostic purposes. This will not works on non-IPMI systems like AMT and blade/sled type systems. _summary: Gather BMC Identification info plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/cpus_are_not_samples requires: package.name == 'dmidecode' estimated_duration: 0.5 user: root command: dmitest cpu-check _description: Sanity check of CPU information; fails if CPU is an engineering sample _summary: CPU sanity check plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/dmitest_server requires: package.name == 'dmidecode' estimated_duration: 0.5 user: root command: dmitest --test_versions --test_serials server _description: Sanity check of DMI system identification data (for servers) _summary: DMI ID sanity check (servers) plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/dmitest_client requires: package.name == 'dmidecode' estimated_duration: 0.5 user: root command: dmitest --test_versions --test_serials desktop _description: Sanity check of DMI system identification data (for desktops & laptops) _summary: DMI ID sanity check (desktops/laptops) plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/is_laptop user: root _description: Determine if we need to run tests specific to portable computers that may not apply to desktops. command: check_is_laptop plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/apport-directory requires: package.name == 'apport' command: if [ -d /var/crash ]; then if [ $(find /var/crash -type f | grep -v .lock | wc -l) -eq 0 ]; then echo "/var/crash is empty"; else echo `ls /var/crash`; false; fi; else echo "/var/crash does not exist"; fi _description: Test that the /var/crash directory doesn't contain anything. Lists the files contained within if it does, or echoes the status of the directory (doesn't exist/is empty) plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/sources-list command: sources_test $SOURCES_LIST "$REPOSITORIES" _description: Checks that a specified sources list file contains the requested repositories unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: manual category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/pxe_boot_device{__index__}_{interface} _summary: PXE verification test of device {__index__} ({interface}) estimated_duration: 30.0 _purpose: This test will verify that you have attempted to PXE boot this machine from the network device {__index__} ({interface}). _steps: 1. Prior to running this test, you should have attempted to boot this system via PXE on every Network Port available. _verification: 1. Select Yes if you successfully used PXE boot this system using the NIC {interface} 2. Select No if you did not attempt to PXE boot this system using the NIC {interface} 3. Select No if you attempted to PXE boot via {interface} and it failed for some reason. unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: manual category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/remote_shared_ipmi_device{__index__}_{interface} _summary: Remote Shared IPMI verification test for device {__index__} ({interface}) estimated_duration: 30.0 _purpose: This test will verify that you have attempted IPMI control of this machine from the network device {__index__} ({interface}). _steps: 1. Prior to running this test, you should have configured and used IPMI to power this machine off and on using every Network Port available. _verification: 1. Select Yes if you successfully used IPMI to remotely power this system off and on using the NIC {interface} 2. Select No if you did not attempt to use IPMI to remotely power this sytem off and on via the NIC {interface} 3. Select No if you attempted to use IPMI to remotely power off/on this system via {interface} and it failed for some reason. plugin: manual category_id: 2013.com.canonical.plainbox::miscellanea id: miscellanea/remote_dedicated_ipmi _description: PURPOSE: Some systems do not share IPMI over all NICs but instead have a dedicated management port directly connected to the BMC. This test verifies that you have used that port for remote IPMI connections and actions. STEPS: 1. Prior to running the test, you should have configured and used the Dedicated Management Port to remotely power off/on this sytem. VERIFICATION: Skip this test if this system ONLY uses shared management/ethernet ports OR if this system does not have a BMC (Management Console) 1. Select Yes if you successfully used IPMI to remotely power this system off and on using the dedicated management port. 2. Select No if you attempted to use the dedicated management port to remotely power this system off/on and it failed for some reason. plugin:shell id: miscellanea/oops estimated_duration: 10.0 requires: package.name == 'fwts' user: root _description: Run Firmware Test Suite (fwts) oops tests. environ: PLAINBOX_SESSION_SHARE command: fwts_test -l $PLAINBOX_SESSION_SHARE/fwts_oops_results.log -t oops plugin: attachment category_id: 2013.com.canonical.plainbox::miscellanea estimated_duration: 0.5 id: miscellanea/oops_results.log command: [ -e ${PLAINBOX_SESSION_SHARE}/fwts_oops_results.log ] && cat ${PLAINBOX_SESSION_SHARE}/fwts_oops_results.log _description: Attaches the FWTS oops results log to the submission plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea estimated_duration: 0.1 id: miscellanea/get_maas_version command: if [ -s /etc/installed-by-maas ]; then cat /etc/installed-by-maas else echo "MAAS VERSION NOT FOUND" >&2 false fi _description: If system was installed via MAAS from a cert server, the MAAS version used should be contained in /etc/installed-by-maas _summary: Gets the version of MAAS used to deploy the SUT plugin: shell category_id: 2013.com.canonical.plainbox::miscellanea estimated_duration: 30.0 id: miscellanea/get_make_and_model user: root command: get_make_and_model _description: Retrieve the computer's make and model for easier access than digging through the dmidecode output. _summary: Retrieve the computer's make and model plainbox-provider-checkbox-0.25/jobs/fingerprint.txt.in0000664000175000017500000000261412646152433024531 0ustar sylvainsylvain00000000000000plugin: manual category_id: 2013.com.canonical.plainbox::fingerprint id: fingerprint/login _description: PURPOSE: This test will verify that a fingerprint reader will work properly for logging into your system. This test case assumes that there's a testing account from which test cases are run and a personal account that the tester uses to verify the fingerprint reader STEPS: 1. Click on the User indicator on the left side of the panel (your user name). 2. Select "Switch User Account" 3. On the LightDM screen select your username. 4. Use the fingerprint reader to login. 5. Click on the user switcher applet. 6. Select the testing account to continue running tests. VERIFICATION: Did the authentication procedure work correctly? plugin: manual category_id: 2013.com.canonical.plainbox::fingerprint id: fingerprint/unlock _description: PURPOSE: This test will verify that a fingerprint reader can be used to unlock a locked system. STEPS: 1. Click on the Session indicator (Cog icon on the Left side of the panel) . 2. Select 'Lock screen'. 3. Press any key or move the mouse. 4. A window should appear that provides the ability to unlock either typing your password or using fingerprint authentication. 5. Use the fingerprint reader to unlock. 6. Your screen should be unlocked. VERIFICATION: Did the authentication procedure work correctly? plainbox-provider-checkbox-0.25/jobs/optical.txt.in0000664000175000017500000002233712646152433023641 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::optical id: optical/detect requires: device.category == 'CDROM' estimated_duration: 1.2 _description: Detects optical drives (CD/DVD) attached to the system. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=CDROM"' | sed '/^$/d' $vendor $product EOF plugin: local _summary: Optical read test. id: optical/read estimated_duration: 1.0 requires: device.category == 'CDROM' _description: Optical read test. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=CDROM"' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::optical id: optical/read_`ls /sys$path/block` requires: device.path == "$path" estimated_duration: 120.0 user: root command: optical_read_test /dev/`ls /sys$path/block` description: PURPOSE: This test will check your $product device's ability to read CD media STEPS: 1. Insert appropriate non-blank media into your optical drive(s). Movie and Audio Disks may not work. Self-created data disks have the greatest chance of working. 2. If a file browser window opens, you can safely close or ignore that window. 3. Click "Test" to begin the test. VERIFICATION: This test should automatically select "Yes" if it passes, "No" if it fails. EOF plugin: local _summary: Automated optical read test. id: optical/read-automated estimated_duration: 1.0 requires: device.category == 'CDROM' _description: Automated test to read a data CD/DVD and ensure the optical drive works properly. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=CDROM"' plugin: shell category_id: 2013.com.canonical.plainbox::optical id: optical/read-automated_`ls /sys$path/block` estimated_duration: 120.0 requires: device.path == "$path" user: root command: optical_read_test /dev/`ls /sys$path/block` description: This is an automated version of optical/read. It assumes you have already inserted a data CD into your optical drive prior to running Checkbox. EOF plugin: local _summary: CD write test. id: optical/cdrom-write estimated_duration: 1.0 requires: device.category == 'CDROM' _description: CD write test. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=CDROM"' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::optical id: optical/cdrom-write_`ls /sys$path/block` estimated_duration: 120.0 requires: device.path == "$path" optical_drive_`ls /sys$path/block`.cd_write == 'supported' user: root command: set -o pipefail; optical_write_test /dev/`ls /sys$path/block` cd | ansi_parser description: PURPOSE: This test will check your system's $product CD writing capabilities. This test requires a blank CD-R or CD+R. STEPS: Skip this test if you do not have a blank CD disk. 1. Insert a blank CD-R or CD+R into your drive 2. Click "Test" to begin. 3. When the CD tray ejects the media after burning, close it (DO NOT remove the disk, it is needed for the second portion of the test). Note, you must close the drive within 5 minutes or the test will time out. VERIFICATION: This test should automatically select "Yes" if it passes, "No" if it fails. EOF plugin: local _summary: Automated CD write test id: optical/cdrom-write-automated estimated_duration: 1.0 requires: device.category == 'CDROM' _description: Automated CD write test command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=CDROM"' plugin: shell category_id: 2013.com.canonical.plainbox::optical id: optical/cdrom-write-automated_`ls /sys$path/block` estimated_duration: 120.0 requires: device.path == "$path" optical_drive_`ls /sys$path/block`.cd_write == 'supported' user: root command: set -o pipefail; optical_write_test /dev/`ls /sys$path/block` cd | ansi_parser description: This is an automated version of optical/cdrom-write. It assumes you have already inserted a data CD into your optical drive prior to running Checkbox. EOF plugin: manual category_id: 2013.com.canonical.plainbox::optical id: optical/cdrom-audio-playback depends: optical/read estimated_duration: 120.0 _description: PURPOSE: This test will check your CD audio playback capabilities STEPS: 1. Insert an audio CD in your optical drive 2. When prompted, launch the Music Player 3. Locate the CD in the display of the Music Player 4. Select the CD in the Music Player 5. Click the Play button to listen to the music on the CD 6. Stop playing after some time 7. Right click on the CD icon and select "Eject Disc" 8. The CD should be ejected 9. Close the Music Player VERIFICATION: Did all the steps work? plugin: local _summary: DVD write test. id: optical/dvd-write estimated_duration: 1.0 requires: device.category == 'CDROM' _description: DVD write test. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=CDROM"' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::optical id: optical/dvd-write_`ls /sys$path/block` requires: device.path == "$path" optical_drive_`ls /sys$path/block`.dvd_write == 'supported' estimated_duration: 120.0 user: root command: set -o pipefail; optical_write_test /dev/`ls /sys$path/block` dvd | ansi_parser description: PURPOSE: This test will check your system's $product writing capabilities. This test requires a blank DVD-R or DVD+R. STEPS: Skip this test if you do not have a blank DVD disk. 1. Enter a blank DVD-R or DVD+R into your drive 2. Click "Test" to begin. 3. When the CD tray ejects the media after burning, close it (DO NOT remove the disk, it is needed for the second portion of the test). Note, you must close the drive within 5 minutes or the test will time out. VERIFICATION: This test should automatically select "Yes" if it passes, "No" if it fails. EOF plugin: local _summary: Automated DVD write test. id: optical/dvd-write-automated estimated_duration: 1.0 requires: device.category == 'CDROM' _description: Automated DVD write test. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=CDROM"' plugin: shell category_id: 2013.com.canonical.plainbox::optical id: optical/dvd-write-automated_`ls /sys$path/block` estimated_duration: 120.0 requires: device.path == "$path" optical_drive_`ls /sys$path/block`.dvd_write == 'supported' user: root command: set -o pipefail; optical_write_test /dev/`ls /sys$path/block` dvd | ansi_parser description: This is an automated version of optical/dvd-write. It assumes you have already inserted a data DVD into your optical drive prior to running Checkbox. EOF plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::optical id: optical/dvd_playback command: totem /media/cdrom estimated_duration: 120.0 requires: device.category == 'CDROM' package.name == 'totem' _description: PURPOSE: This test will check your DVD playback capabilities STEPS: 1. Insert a DVD that contains any movie in your optical drive 2. Click "Test" to play the DVD in Totem VERIFICATION: Did the file play? plugin: local _summary: Automated Blu-Ray read test. id: optical/bluray-read estimated_duration: 1.0 requires: device.category == 'CDROM' _description: Automated Blu-Ray read test. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=CDROM"' plugin: user-interact category_id: 2013.com.canonical.plainbox::optical id: optical/bluray-read_`ls /sys$path/block` estimated_duration: 120.0 requires: device.path == "$path" optical_drive_`ls /sys$path/block`.bd_read == "supported" user: root command: optical_read_test /dev/`ls /sys$path/block` description: PURPOSE: This test will check your $product device's ability to read Blu-Ray (BD) media STEPS: 1. Insert appropriate non-blank media into your Blu-Ray drive. Movie and Audio Disks may not work. Self-created data disks have the greatest chance of working. 2. If a file browser window opens, you can safely close or ignore that window. 3. Click "Test" to begin the test. VERIFICATION: This test should automatically select "Yes" if it passes, "No" if it fails. EOF plugin: local _summary: Automated Blu-Ray write test. id: optical/bluray-write estimated_duration: 1.0 requires: device.category == 'CDROM' _description: Automated Blu-Ray write test. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=CDROM"' plugin: user-interact category_id: 2013.com.canonical.plainbox::optical id: optical/bluray-write_`ls /sys$path/block` requires: device.path == "$path" optical_drive_`ls /sys$path/block`.bd_write == "supported" package.name == "growisofs" user: root command: set -o pipefail; optical_write_test /dev/`ls /sys$path/block` bd | ansi_parser estimated_duration: 120.00 description: PURPOSE: This test will check your $product device's ability to write Blu-Ray (BD) media STEPS: Skip this test if you do not have a blank BD-R disc 1. Insert appropriate writable media into your Blu-Ray drive. 2. Click "Test" to begin the test. VERIFICATION: This test should automatically select "Yes" if it passes, "No" if it fails. EOF plainbox-provider-checkbox-0.25/jobs/led.txt.in0000664000175000017500000001660112646152433022747 0ustar sylvainsylvain00000000000000plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/power estimated_duration: 15.0 _description: PURPOSE: Power LED verification STEPS: 1. Power LED should be on while device is switched on VERIFICATION: Does the power LED light as expected? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/power-blink-suspend estimated_duration: 30.0 depends: suspend/suspend_advanced _description: PURPOSE: Power LED verification STEPS: 1. The Power LED should blink or change color while the system is suspended VERIFICATION: Did the Power LED blink or change color while the system was suspended for the previous suspend test? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/suspend estimated_duration: 30.0 depends: suspend/suspend_advanced _description: PURPOSE: Suspend LED verification. STEPS: Skip this test if your system does not have a dedicated Suspend LED. 1. The Suspend LED should blink or change color while the system is suspended VERIFICATION Did the Suspend LED blink or change color while the system was suspended? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/battery-charging estimated_duration: 120.0 _description: PURPOSE: Validate that the battery light shows charging status STEPS: 1. Let system run on battery for a while 2. Plug in AC plug VERIFICATION: Did the battery indicator LED turn orange? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/battery-charged estimated_duration: 240.0 _description: PURPOSE: Validate that the battery LED properly displays charged status STEPS: 1. Let system run on battery for a short time 2. Plug in AC 3. Let system run on AC VERIFICATION: Does the orange battery LED shut off when system is fully charged? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/battery-low estimated_duration: 30.0 _description: PURPOSE: Validate that the battery LED indicated low power STEPS: 1. Let system run on battery for several hours 2. Monitor battery LED carefully VERIFICATION: Does the LED light orange when battery is low? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::led id: led/hdd estimated_duration: 30.0 command: led_hdd_test _description: PURPOSE: HDD LED verification STEPS: 1. Select "Test" to write and read a temporary file for a few seconds 2. HDD LED should light when writing to/reading from HDD VERIFICATION: Did the HDD LED light? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::led id: led/numeric-keypad estimated_duration: 30.0 command: keyboard_test _description: PURPOSE: Numeric keypad LED verification STEPS: 1. Press "Block Num" key to toggle numeric keypad LED 2. Click on the "Test" button to open a window to verify your typing 3. Type using the numeric keypad both when the LED is on and off VERIFICATION: 1. Numeric keypad LED status should toggle everytime the "Block Num" key is pressed 2. Numbers should only be entered in the keyboard verification window when the LED is on plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/caps-lock estimated_duration: 30.0 _description: PURPOSE: Block cap keys LED verification STEPS: 1. Press "Block Cap Keys" to activate/deactivate cap keys blocking 2. Cap Keys LED should be switched on/off every time the key is pressed VERIFICATION: Did the Cap Keys LED light as expected? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/wlan depends: keys/wireless estimated_duration: 60.0 _description: PURPOSE: WLAN LED verification STEPS: 1. During the keys/wireless test you should have observed the wireless LED while turning wireless back on. 2. WLAN LED should light or change color when wireless is turned on VERIFICATION: Did the WLAN LED turn on or change color as expected? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/wlan-disabled estimated_duration: 30.0 depends: keys/wireless _description: PURPOSE: Validate that WLAN LED shuts off when disabled STEPS: 1. During the keys/wireless test you should have observed the WLAN LED while performing that test after turning wireless off. 2. WLAN LED should turn off or change color when wireless is turned off VERIFICATION: Did the WLAN LED turn off or change color as expected? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/bluetooth estimated_duration: 60.0 depends: bluetooth/detect-output _description: PURPOSE: Validate that the Bluetooth LED turns on and off when BT is enabled/disabled STEPS: 1. Switch bluetooth off from a hardware switch (if present) 2. Switch bluetooth back on 3. Switch bluetooth off from the panel applet 4. Switch bluetooth back on VERIFICATION: Did the bluetooth LED turn off and on twice? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::led id: led/camera estimated_duration: 20.0 depends: camera/detect command: camera_test led _description: PURPOSE: Camera LED verification STEPS: 1. Select Test to activate camera 2. Camera LED should light for a few seconds VERIFICATION: Did the camera LED light? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/touchpad estimated_duration: 30.0 _description: PURPOSE: Touchpad LED verification STEPS: 1. Click on the touchpad button or press key combination to enable/disable touchpad button 2. Slide your finger on the touchpad VERIFICATION: 1. Touchpad LED status should toggle everytime the button is clicked or the key combination is pressed 2. When the LED is on, the mouse pointer should move on touchpad usage 3. When the LED is off, the mouse pointer should not move on touchpad usage plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/wireless estimated_duration: 120.0 _description: PURPOSE: Wireless (WLAN + Bluetooth) LED verification STEPS: 1. Make sure WLAN connection is established and Bluetooth is enabled. 2. WLAN/Bluetooth LED should light 3. Switch WLAN and Bluetooth off from a hardware switch (if present) 4. Switch them back on 5. Switch WLAN and Bluetooth off from the panel applet 6. Switch them back on VERIFICATION: Did the WLAN/Bluetooth LED light as expected? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/mute depends: keys/mute estimated_duration: 30.0 _description: PURPOSE: Audio Mute LED verification. STEPS: Skip this test if your system does not have a special Audio Mute LED. 1. Press the Mute key twice and observe the Audio LED to determine if it either turned off and on or changed colors. VERIFICATION: Did the Audio LED turn on and off or change color as expected? plugin: manual category_id: 2013.com.canonical.plainbox::led id: led/microphone-mute estimated_duration: 30.0 depends: keys/microphone-mute _description: PURPOSE: Microphone Mute LED verification. STEPS: Skip this test if your system does not have a special Microphone Mute LED. 1. Press the Microphone Mute key twice and observe the Microphone LED to determine if it either turned off and on or changed colors. VERIFICATION: Did the Microphone Mute LED turn on and off or change color as expected? plainbox-provider-checkbox-0.25/jobs/firmware.txt.in0000664000175000017500000000644612646152433024025 0ustar sylvainsylvain00000000000000plugin: local _summary: Automated tests for firmware using Firmware Test Suite. id: firmware/generator_fwts estimated_duration: 0.5 requires: package.name == 'fwts' _description: Automated tests for firmware using Firmware Test Suite. command: cat << 'EOF' | run_templates -s 'fwts_test --list' estimated_duration: 1.2 plugin: shell category_id: 2013.com.canonical.plainbox::firmware id: firmware/fwts_$1 requires: package.name == 'fwts' user: root command: fwts_test -t $1 -l $PLAINBOX_SESSION_SHARE/fwts_$1.log _description: Run $1 test from Firmware Test Suite. _summary: Run $1 test from Firmware Test Suite. EOF plugin: local _summary: Automated tests for firmware using Firmware Test Suite. id: firmware/generator_fwts_logs estimated_duration: 0.5 requires: package.name == 'fwts' _description: Automated tests for firmware using Firmware Test Suite. command: cat << 'EOF' | run_templates -s 'fwts_test --list' estimated_duration: 1.2 plugin: attachment category_id: 2013.com.canonical.plainbox::firmware id: firmware/fwts_$1.log requires: package.name == 'fwts' user: root command: [[ -e ${PLAINBOX_SESSION_SHARE}/fwts_$1.log ]] && cat ${PLAINBOX_SESSION_SHARE}/fwts_$1.log _description: Attach log for FWTS $1 test. _summary: Attach log for FWTS $1 test. EOF plugin:shell id: firmware/fwts_desktop_diagnosis estimated_duration: 10.0 requires: package.name == 'fwts' user: root _description: Run Firmware Test Suite (fwts) QA-concerned desktop-specific diagnosis tests. _summary: Run FWTS QA-concerned desktop-specific diagnosis tests. environ: PLAINBOX_SESSION_SHARE command: fwts_test --qa -l $PLAINBOX_SESSION_SHARE/fwts_desktop_diagnosis_results.log plugin:shell id: firmware/fwts_desktop_diagnosis_hwe estimated_duration: 5.0 requires: package.name == 'fwts' user: root _description: Run Firmware Test Suite (fwts) HWE-concerned desktop-specific diagnosis tests. _summary: Run FWTS HWE-concerned desktop-specific diagnosis tests. environ: PLAINBOX_SESSION_SHARE command: fwts_test --hwe -l $PLAINBOX_SESSION_SHARE/fwts_desktop_diagnosis_results_hwe.log plugin: attachment category_id: 2013.com.canonical.plainbox::firmware estimated_duration: 0.5 id: firmware/fwts_desktop_diagnosis_results.log.gz command: [ -f $PLAINBOX_SESSION_SHARE/fwts_desktop_diagnosis_results.log ] && gzip -c $PLAINBOX_SESSION_SHARE/fwts_desktop_diagnosis_results.log | base64 _description: Attaches the FWTS desktop diagnosis results log to the submission _summary: Attach FWTS desktop diagnosis log to submission plugin: attachment category_id: 2013.com.canonical.plainbox::firmware estimated_duration: 0.5 id: firmware/fwts_desktop_diagnosis_results_hwe.log.gz command: [ -f $PLAINBOX_SESSION_SHARE/fwts_desktop_diagnosis_results_hwe.log ] && gzip -c $PLAINBOX_SESSION_SHARE/fwts_desktop_diagnosis_results_hwe.log | base64 _description: Attaches the FWTS desktop diagnosis results log to the submission (to HWE) _summary: Attach FWTS desktop diagnosis log to submission (to HWE) plugin: shell category_id: 2013.com.canonical.plainbox::firmware id: firmware/no_ACPI_REV_interface _summary: No _REV interface in ACPI [DS]SDT tables user: root estimated_duration: 0.5 command: ! sudo grep -r "_REV" /sys/firmware/acpi/tables/* | grep [DS]SDT _description: This Automated test checks misuse of the _REV interface in ACPI DSDT and SSDT tables plainbox-provider-checkbox-0.25/jobs/firewire.txt.in0000664000175000017500000000306412646152433024016 0ustar sylvainsylvain00000000000000plugin: user-interact category_id: 2013.com.canonical.plainbox::firewire id: firewire/insert require: device.category == 'FIREWIRE' command: removable_storage_watcher insert firewire _description: PURPOSE: This test will check the system can detect the insertion of a FireWire HDD STEPS: 1. Click 'Test' to begin the test. This test will timeout and fail if the insertion has not been detected within 20 seconds. 2. Plug a FireWire HDD into an available FireWire port. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result plugin: shell category_id: 2013.com.canonical.plainbox::firewire id: firewire/storage-test user: root require: device.category == 'FIREWIRE' depends: firewire/insert command: removable_storage_test -s 268400000 firewire _description: This is an automated test which performs read/write operations on an attached FireWire HDD plugin: user-interact category_id: 2013.com.canonical.plainbox::firewire id: firewire/remove depends: firewire/insert require: device.category == 'FIREWIRE' command: removable_storage_watcher remove firewire _description: PURPOSE: This test will check the system can detect the removal of a FireWire HDD STEPS: 1. Click 'Test' to begin the test. This test will timeout and fail if the removal has not been detected within 20 seconds. 2. Remove the previously attached FireWire HDD from the FireWire port. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result plainbox-provider-checkbox-0.25/jobs/touchscreen.txt.in0000664000175000017500000001335512646152433024530 0ustar sylvainsylvain00000000000000unit: manifest entry id: has_touchscreen _name: Touchscreen value-type: bool plugin: shell category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/nontouch-automated requires: xinput.device_class == 'XITouchClass' and xinput.touch_mode != 'direct' command: true estimated_duration: 1.2 _description: Determine whether the screen is detected as a non-touch device automatically. plugin: shell category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/multitouch-automated requires: xinput.device_class == 'XITouchClass' and xinput.touch_mode == 'direct' command: true estimated_duration: 1.2 _description: Determine whether the screen is detected as a multitouch device automatically. plugin: manual category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/multitouch-manual depends: touchscreen/nontouch-automated estimated_duration: 120.0 _description: PURPOSE: Touchscreen capability manual detection. STEPS: 1. Look at the specifications for your system. VERIFICATION: Your screen was detected as a non touch screen. Select PASS if this is correct. plugin: manual category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/tap-detect imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_touchscreen == 'True' estimated_duration: 120.0 _description: PURPOSE: Check touchscreen tap recognition STEPS: 1. Tap an object on the screen with finger. The cursor should jump to location tapped and object should highlight VERIFICATION: Does tap recognition work? plugin: manual category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/drag-n-drop imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_touchscreen == 'True' estimated_duration: 120.0 _description: PURPOSE: Check touchscreen drag & drop STEPS: 1. Tap and hold an object on the desktop 2. Drag and drop the object in a different location VERIFICATION: Does drag and drop work? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/multitouch-zoom _summary: Check touchscreen pinch gesture for zoom imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_touchscreen == 'True' command: qmlscene -qt5 $PLAINBOX_PROVIDER_DATA/touch_zoom_test.qml 2>&1 |grep -o PASS estimated_duration: 120.0 _description: PURPOSE: Check touchscreen pinch gesture for zoom STEPS: 1. Commence the test 2. Using 2 fingers, resize the blue square until it turns green, then release it. VERIFICATION: Did the blue square change size following the gesture? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/multitouch-rotate _summary: Check touchscreen pinch gesture for rotate imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_touchscreen == 'True' command: qmlscene -qt5 $PLAINBOX_PROVIDER_DATA/touch_rotate_test.qml 2>&1 |grep -o PASS estimated_duration: 120.0 _description: PURPOSE: Check touchscreen pinch gesture for rotate STEPS: 1. Commence the test 2. Using 2 fingers, rotate the blue square until it turns green, then release it. VERIFICATION: Did the blue square rotate following the gesture? plugin: manual category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/multitouch-window-move imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_touchscreen == 'True' estimated_duration: 120.0 _description: PURPOSE: Validate that 3-touch drag is operating as expected STEPS: 1. Open a windows and bring it to the foreground 2. 3-touch the window and drag VERIFICATION: Did the window move along with the drag? plugin: manual category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/multitouch-dash imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_touchscreen == 'True' estimated_duration: 120.0 _description: PURPOSE: Validate that 4-touch tap is operating as expected STEPS: 1. 4-touch tap anywhere on the touchscreen VERIFICATION: Did the tap open the Dash? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/3-touch-tap imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_touchscreen == 'True' estimated_duration: 15.0 _description: PURPOSE: Validate that 3-touch tap is operating as expected STEPS: 1. Commence the test 2. Tap the screen within the test area with 3 fingers simultaneously. 3. Once 3 fingers are on the screen you should see the indicator they are recognized. VERIFICATION: Did you see the green circles around the three fingers? command: manage_compiz_plugin unityshell disable qmlscene -qt5 $PLAINBOX_PROVIDER_DATA/touch_tap_test.qml --touchpoints=3 2>&1 | grep -o PASS EXIT=$? sleep 5 manage_compiz_plugin unityshell enable exit $EXIT plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::touchscreen id: touchscreen/4-touch-tap imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_touchscreen == 'True' estimated_duration: 15.0 _description: PURPOSE: Validate that 4-touch tap is operating as expected STEPS: 1. Commence the test 2. Tap the screen within the test area with 4 fingers simultaneously. 3. Once 4 fingers are on the screen you should see the indicator they are recognized. VERIFICATION: Did you see the green circles around the four fingers? command: manage_compiz_plugin unityshell disable qmlscene -qt5 $PLAINBOX_PROVIDER_DATA/touch_tap_test.qml --touchpoints=4 2>&1 | grep -o PASS EXIT=$? sleep 5 manage_compiz_plugin unityshell enable exit $EXIT plainbox-provider-checkbox-0.25/jobs/panel_clock_test.txt.in0000664000175000017500000000206612646152433025514 0ustar sylvainsylvain00000000000000id: panel_clock/verify plugin: manual requires: package.name == 'gnome-system-tools' _description: PURPOSE: This test will verify that the desktop clock displays the correct date and time STEPS: 1. Check the clock in the upper right corner of your desktop. VERIFICATION: Is the clock displaying the correct date and time for your timezone? id: panel_clock/test plugin: user-interact-verify depends: panel_clock/verify requires: package.name == 'gnome-system-tools' user: root command: date -s "`date -d '1 hour'`" _description: PURPOSE: This test will verify that the desktop clock synchronizes with the system clock. STEPS: 1. Commence the test and verify the clock moves ahead by 1 hour. Note: It may take a minute or so for the clock to refresh 2. Right click on the clock, then click on "Time & Date Settings..." 3. Ensure that your clock application is set to manual. 4. Change the time 1 hour back 5. Close the window and reboot VERIFICATION: Is your system clock displaying the correct date and time for your timezone? plainbox-provider-checkbox-0.25/jobs/memory.txt.in0000664000175000017500000000127612646152433023515 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::memory id: memory/info estimated_duration: 5.0 user: root command: memory_compare _description: This test checks the amount of memory which is reporting in meminfo against the size of the memory modules detected by DMI. plugin: shell category_id: 2013.com.canonical.plainbox::memory id: memory/check estimated_duration: 1000.0 user: root requires: uname.name == 'Linux' command: memory_test _description: Test to perform some basic stress and exercise of system memory. This test also includes an over-commit function to force swapping to disk, thus SUTs should have suitably large swap files for the amount of RAM they have installed. plainbox-provider-checkbox-0.25/jobs/mediacard.txt.in0000664000175000017500000004652512646152433024124 0ustar sylvainsylvain00000000000000plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/mmc-insert estimated_duration: 30.0 command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a Multimedia Card (MMC) media STEPS: 1. Click "Test" and then insert an MMC card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/mmc-storage estimated_duration: 30.0 depends: mediacard/mmc-insert user: root command: removable_storage_test -s 67120000 --memorycard sdio usb scsi --auto-reduce-size _description: This test is automated and executes after the mediacard/mmc-insert test is run. It tests reading and writing to the MMC card. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/mmc-remove estimated_duration: 30.0 depends: mediacard/mmc-insert command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of the MMC card from the systems card reader. STEPS: 1. Click "Test" and then remove the MMC card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sd-insert estimated_duration: 30.0 command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of an UNLOCKED Secure Digital (SD) media card STEPS: 1. Click "Test" and then insert an UNLOCKED SD card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sd-storage estimated_duration: 30.0 depends: mediacard/sd-insert user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/sd-insert test is run. It tests reading and writing to the SD card. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sd-remove estimated_duration: 30.0 depends: mediacard/sd-insert command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of an SD card from the systems card reader. STEPS: 1. Click "Test" and then remove the SD card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sd-preinserted estimated_duration: 30.0 user: root requires: device.category == 'CARDREADER' command: removable_storage_test -s 268400000 --memorycard -l sdio usb scsi && removable_storage_test --memorycard sdio usb scsi _description: This is a fully automated version of mediacard/sd-automated and assumes that the system under test has a memory card device plugged in prior to checkbox execution. It is intended for SRU automated testing. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sdhc-insert estimated_duration: 30.0 command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a UNLOCKED Secure Digital High-Capacity (SDHC) media card STEPS: 1. Click "Test" and then insert an UNLOCKED SDHC card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sdhc-storage estimated_duration: 30.0 depends: mediacard/sdhc-insert user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/sdhc-insert test is run. It tests reading and writing to the SDHC card. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sdhc-remove estimated_duration: 30.0 depends: mediacard/sdhc-insert command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of an SDHC card from the systems card reader. STEPS: 1. Click "Test" and then remove the SDHC card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/cf-insert estimated_duration: 30.0 command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a Compact Flash (CF) media card STEPS: 1. Click "Test" and then insert a CF card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/cf-storage estimated_duration: 30.0 depends: mediacard/cf-insert user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/cf-insert test is run. It tests reading and writing to the CF card. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/cf-remove depends: mediacard/cf-storage estimated_duration: 30.0 command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a CF card from the systems card reader. STEPS: 1. Click "Test" and then remove the CF card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sdxc-insert estimated_duration: 30.0 command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a Secure Digital Extended Capacity (SDXC) media card STEPS: 1. Click "Test" and then insert an UNLOCKED SDXC card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sdxc-storage estimated_duration: 30.0 depends: mediacard/sdxc-insert user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/sdxc-insert test is run. It tests reading and writing to the SDXC card. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sdxc-remove estimated_duration: 30.0 depends: mediacard/sdxc-insert command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a SDXC card from the systems card reader. STEPS: 1. Click "Test" and then remove the SDXC card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/ms-insert estimated_duration: 30.0 command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a Memory Stick (MS) media card STEPS: 1. Click "Test" and then insert a MS card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/ms-storage estimated_duration: 30.0 depends: mediacard/ms-insert user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/ms-insert test is run. It tests reading and writing to the MS card. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/ms-remove estimated_duration: 30.0 depends: mediacard/ms-insert command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a MS card from the systems card reader. STEPS: 1. Click "Test" and then remove the MS card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/msp-insert estimated_duration: 30.0 command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a Memory Stick Pro (MSP) media card STEPS: 1. Click "Test" and then insert a MSP card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/msp-storage estimated_duration: 30.0 depends: mediacard/msp-insert user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/msp-insert test is run. It tests reading and writing to the MSP card. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/msp-remove estimated_duration: 30.0 depends: mediacard/msp-insert command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a MSP card from the systems card reader. STEPS: 1. Click "Test" and remove the MSP card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/xd-insert estimated_duration: 30.0 command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a Extreme Digital (xD) media card STEPS: 1. Click "Test" and then insert a xD card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/xd-storage estimated_duration: 30.0 depends: mediacard/xd-insert user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/xd-insert test is run. It tests reading and writing to the xD card. plugin: user-interact category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/xd-remove estimated_duration: 30.0 depends: mediacard/xd-insert command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a xD card from the systems card reader. STEPS: 1. Click "Test" and then remove the xD card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sd-performance-manual depends: mediacard/sd-insert estimated_duration: 120.0 user: root command: removable_storage_test -s 268400000 --memorycard sdio usb | cat <(echo "Working...") - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'SD Card Performance' _description: PURPOSE: This test will check your Media Card data transfer performance. STEPS: 1. Insert SD card into the reader slot on this computer. 2. Commence the test. VERIFICATION: Did the results of the test match the expected performance of the inserted device? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sdhc-performance-manual depends: mediacard/sdhc-insert estimated_duration: 120.0 user: root command: removable_storage_test -s 268400000 --memorycard sdio usb | cat <(echo "Working...") - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'SDHC Card Performance' _description: PURPOSE: This test will check your Media Card data transfer performance. STEPS: 1. Insert SDHC card into the reader slot on this computer. 2. Commence the test. VERIFICATION: Did the results of the test match the expected performance of the inserted device? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/mmc-performance-manual depends: mediacard/mmc-insert estimated_duration: 120.0 user: root command: removable_storage_test -s 268400000 --memorycard sdio usb | cat <(echo "Working...") - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'MMC Card Performance' _description: PURPOSE: This test will check your Media Card data transfer performance. STEPS: 1. Insert MMC card into the reader slot on this computer. 2. Commence the test. VERIFICATION: Did the results of the test match the expected performance of the inserted device? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/cf-performance-manual depends: mediacard/cf-insert estimated_duration: 120.0 user: root command: removable_storage_test -s 268400000 --memorycard sdio usb | cat <(echo "Working...") - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'CF Card Performance' _description: PURPOSE: This test will check your Media Card data transfer performance. STEPS: 1. Insert CF card into the reader slot on this computer. 2. Commence the test. VERIFICATION: Did the results of the test match the expected performance of the inserted device? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/sdxc-performance-manual depends: mediacard/sdxc-insert estimated_duration: 120.0 user: root command: removable_storage_test -s 268400000 --memorycard sdio usb | cat <(echo "Working...") - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'SDXC Card Performance' _description: PURPOSE: This test will check your Media Card data transfer performance. STEPS: 1. Insert SDXC card into the reader slot on this computer. 2. Commence the test. VERIFICATION: Did the results of the test match the expected performance of the inserted device? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/ms-performance-manual depends: mediacard/ms-insert estimated_duration: 120.0 user: root command: removable_storage_test -s 268400000 --memorycard sdio usb | cat <(echo "Working...") - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'MS Card Performance' _description: PURPOSE: This test will check your Media Card data transfer performance. STEPS: 1. Insert MS card into the reader slot on this computer. 2. Commence the test. VERIFICATION: Did the results of the test match the expected performance of the inserted device? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/msp-performance-manual depends: mediacard/msp-insert estimated_duration: 120.0 user: root command: removable_storage_test -s 268400000 --memorycard sdio usb | cat <(echo "Working...") - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'MSP Card Performance' _description: PURPOSE: This test will check your Media Card data transfer performance. STEPS: 1. Insert MSP card into the reader slot on this computer. 2. Commence the test. VERIFICATION: Did the results of the test match the expected performance of the inserted device? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::mediacard id: mediacard/xd-performance-manual depends: mediacard/xd-insert estimated_duration: 120.0 user: root command: removable_storage_test -s 268400000 --memorycard sdio usb | cat <(echo "Working...") - <(echo; echo "Verify the result and click OK to decide on the outcome") | zenity --text-info --title 'xD Card Performance' _description: PURPOSE: This test will check your Media Card data transfer performance. STEPS: 1. Insert xD card into the reader slot on this computer. 2. Commence the test. VERIFICATION: Did the results of the test match the expected performance of the inserted device? plainbox-provider-checkbox-0.25/jobs/rendercheck.txt.in0000664000175000017500000000157612646152433024465 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::graphics id: rendercheck/tests requires: package.name == 'x11-apps' command: ( rendercheck_test -b repeat -b gradients -d -o $PLAINBOX_SESSION_SHARE/rendercheck-results && echo "Rendercheck tests completed successfully" ) || ( echo "Error running rendercheck. Please see the log $PLAINBOX_SESSION_SHARE/rendercheck-results for details" >&2 && false ) _description: Runs all of the rendercheck test suites. This test can take a few minutes. plugin: attachment category_id: 2013.com.canonical.plainbox::graphics id: rendercheck/tarball depends: rendercheck/tests command: [ -e $PLAINBOX_SESSION_SHARE/rendercheck-results ] && tar cvfz $PLAINBOX_SESSION_SHARE/rendercheck-results.tar.gz $PLAINBOX_SESSION_SHARE/rendercheck-results && cat $PLAINBOX_SESSION_SHARE/rendercheck-results.tar.gz _description: Attach log from rendercheck tests plainbox-provider-checkbox-0.25/jobs/daemons.txt.in0000664000175000017500000000517112646152433023631 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/atd requires: package.name == 'at' command: pgrep -f '/usr/sbin/atd' >/dev/null _description: Test if the atd daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/cron requires: package.name == 'cron' command: pgrep -f '/usr/sbin/cron' >/dev/null _description: Test if the cron daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/cupsd requires: package.name == 'cupsys' command: pgrep -f '/usr/sbin/cupsd' >/dev/null _description: Test if the cupsd daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/getty requires: package.name == 'util-linux' command: pgrep -f '/sbin/getty' >/dev/null _description: Test if the getty daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/init requires: package.name == 'upstart' command: pgrep -f '/sbin/init' >/dev/null _description: Test if the init daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/klogd requires: package.name == 'klogd' command: pgrep -f '/sbin/klogd' >/dev/null _description: Test if the klogd daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/nmbd requires: package.name == 'samba' command: pgrep -f '/usr/sbin/nmbd' >/dev/null _description: Test if the nmbd daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/smbd requires: package.name == 'samba' command: pgrep -f '/usr/sbin/smbd' >/dev/null _description: Test if the smbd daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/syslogd requires: package.name == 'syslogd' command: pgrep -f '/sbin/syslogd' >/dev/null _description: Test if the syslogd daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/udevd requires: package.name == 'udevd' command: pgrep -f '/sbin/udevd' >/dev/null _description: Test if the udevd daemon is running when the package is installed. plugin: shell category_id: 2013.com.canonical.plainbox::daemons id: daemons/winbindd requires: package.name == 'winbind' command: pgrep -f '/usr/sbin/winbindd' >/dev/null _description: Test if the winbindd daemon is running when the package is installed. plainbox-provider-checkbox-0.25/jobs/panel_reboot.txt.in0000664000175000017500000000073412646152433024654 0ustar sylvainsylvain00000000000000plugin: manual id: panel_reboot_test _description: PURPOSE: This test will verify that you can reboot your system from the desktop menu STEPS: 1. Click the Gear icon in the upper right corner of the desktop and click on "Shut Down" 2. Click the "Restart" button on the left side of the Shut Down dialog 3. After logging back in, restart System Testing and it should resume here VERIFICATION: Did your system restart and bring up the GUI login cleanly? plainbox-provider-checkbox-0.25/jobs/mir.txt.in0000664000175000017500000000201512646152433022764 0ustar sylvainsylvain00000000000000plugin: local _summary: MIR Integration tests id: mir/integration requires: package.name == 'mir-test-tools' _description: MIR Integration tests command: cat << 'EOF' | run_templates -s "mir_integration_tests --gtest_list_tests | sed -n '/\.$/s/\.$//p'" estimated_duration: 0.5 plugin: shell category_id: 2013.com.canonical.plainbox::mir id: mir/integration/$1 requires: package.name == 'mir-test-tools' command: mir_integration_tests --gtest_filter=$1* _description: Run $1 test from MIR Integration tests. EOF plugin: local _summary: MIR Acceptance tests id: mir/acceptance requires: package.name == 'mir-test-tools' _description: MIR Acceptance tests command: cat << 'EOF' | run_templates -s "mir_acceptance_tests --gtest_list_tests | sed -n '/\.$/s/\.$//p'" estimated_duration: 0.5 plugin: shell category_id: 2013.com.canonical.plainbox::mir id: mir/acceptance/$1 requires: package.name == 'mir-test-tools' command: mir_acceptance_tests --gtest_filter=$1* _description: Run $1 test from MIR Acceptance tests. EOF plainbox-provider-checkbox-0.25/jobs/stress.txt.in0000664000175000017500000003761512646152433023536 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/cpu_stress_test estimated_duration: 7200.0 requires: package.name == 'stress' user: root command: num_vm=$(awk '/MemTotal/ {x=$2/262144; print ((x == int(x)) ? x : int(x) +1)}' /proc/meminfo); vm_bytes=$(($(awk '/MemTotal/ {print int($2/1024)}' /proc/meminfo)/$num_vm/4))M; stress --cpu `cpuinfo_resource | awk '/count:/ {print $2}'` --vm $num_vm --vm-bytes $vm_bytes --timeout 7200s _description: Simulate high system load using the 'stress' tool to exercise the CPU for several hours. The test is considered passed if the system does not freeze or abend. plugin: shell category_id: 2013.com.canonical.plainbox::stress id: power-management/hibernate_30_cycles estimated_duration: 5400.00 depends: power-management/hibernate_advanced requires: sleep.disk == 'supported' rtc.state == 'supported' environ: PLAINBOX_SESSION_SHARE user: root command: if type -P fwts >/dev/null; then echo "Calling fwts" fwts_test -l $PLAINBOX_SESSION_SHARE/hibernate_30_cycles -f none -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120 --s4-multiple=30 else echo "Calling sleep_test" set -o pipefail; sleep_test -s disk -i 30 -w 120 | tee $PLAINBOX_SESSION_SHARE/hibernate_30_cycles.log fi _description: PURPOSE: This is an automated stress test that will force the system to hibernate/resume for 30 cycles plugin: shell category_id: 2013.com.canonical.plainbox::stress id: power-management/hibernate-30-cycles-log-check estimated_duration: 1.0 command: [ -e $PLAINBOX_SESSION_SHARE/hibernate_30_cycles.log ] && sleep_test_log_check -v s4 $PLAINBOX_SESSION_SHARE/hibernate_30_cycles.log _description: Automated check of the 30 cycle hibernate log for errors detected by fwts. plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: power-management/hibernate-30-cycle-log-attach estimated_duration: 1.0 command: [ -e $PLAINBOX_SESSION_SHARE/hibernate_30_cycles.log ] && cat $PLAINBOX_SESSION_SHARE/hibernate_30_cycles.log _description: Attaches the log from the 30 cycle Hibernate/Resume test if it exists plugin: shell category_id: 2013.com.canonical.plainbox::stress id: power-management/suspend_30_cycles_with_reboots estimated_duration: 5400.0 depends: power-management/rtc suspend/suspend_advanced user: root command: pm_test reboot --fwts --log-level=debug --log-dir=$PLAINBOX_SESSION_SHARE --suspends-before-reboot=30 -r 3 _description: This is an automated stress test that will run a sequence of '30 suspend/resume cycles and one reboot' 3 times. plugin: shell category_id: 2013.com.canonical.plainbox::stress id: power-management/suspend_30_cycles estimated_duration: 2400.0 depends: power-management/rtc suspend/suspend_advanced environ: PLAINBOX_SESSION_SHARE user: root command: if type -P fwts >/dev/null; then echo "Calling fwts" set -o pipefail; fwts_test -l $PLAINBOX_SESSION_SHARE/suspend_30_cycles -f none -s s3 --s3-device-check --s3-device-check-delay=45 --s3-sleep-delay=30 --s3-multiple=30 | tee $PLAINBOX_SESSION_SHARE/suspend_30_cycles_times.log else echo "Calling sleep_test" set -o pipefail; sleep_test -p -s mem -i 30 | tee $PLAINBOX_SESSION_SHARE/suspend_30_cycles.log fi _description: PURPOSE: This is an automated stress test that will force the system to suspend/resume for 30 cycles. plugin: shell category_id: 2013.com.canonical.plainbox::stress id: power-management/suspend-30-cycles-log-check depends: power-management/suspend_30_cycles estimated_duration: 1.0 command: [ -e $PLAINBOX_SESSION_SHARE/suspend_30_cycles.log ] && sleep_test_log_check -v s3 $PLAINBOX_SESSION_SHARE/suspend_30_cycles.log _description: Automated check of the 30 cycle suspend log for errors detected by fwts. plugin: shell category_id: 2013.com.canonical.plainbox::stress id: power-management/suspend-30-cycles-log-check-with-reboots depends: power-management/suspend_30_cycles_with_reboots estimated_duration: 1.0 command: [ -e $PLAINBOX_SESSION_SHARE/pm_test.reboot.3.log ] && sleep_test_log_check -v s3 $PLAINBOX_SESSION_SHARE/pm_test.reboot.3.log _description: Automated check of the '30 cycle suspend and 1 reboot times 3' logs for errors detected by fwts. plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: power-management/suspend-30-cycle-log-attach estimated_duration: 1.0 depends: power-management/suspend_30_cycles command: [ -e $PLAINBOX_SESSION_SHARE/suspend_30_cycles.log ] && cat $PLAINBOX_SESSION_SHARE/suspend_30_cycles.log _description: Attaches the log from the 30 cycle Suspend/Resume test if it exists plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: power-management/suspend-30-cycle-log-attach-with-reboots estimated_duration: 1.0 depends: power-management/suspend_30_cycles_with_reboots command: [ -e $PLAINBOX_SESSION_SHARE/pm_test.reboot.3.log ] && cat $PLAINBOX_SESSION_SHARE/pm_test.reboot.3.log _description: Attaches the log from the '30 cycle Suspend/Resume and one reboot times 3' test if it exists plugin: shell category_id: 2013.com.canonical.plainbox::stress id: power-management/suspend-30-cycles-time-check estimated_duration: 1.0 depends: power-management/suspend_30_cycles command: [ -e $PLAINBOX_SESSION_SHARE/suspend_30_cycles_times.log ] && sleep_time_check $PLAINBOX_SESSION_SHARE/suspend_30_cycles_times.log _description: Checks the sleep times to ensure that a machine suspends and resumes within a given threshold plugin: shell category_id: 2013.com.canonical.plainbox::stress id: power-management/suspend-30-cycles-time-check-with-reboots estimated_duration: 1.0 depends: power-management/suspend_30_cycles_with_reboots command: [ -e $PLAINBOX_SESSION_SHARE/pm_test.reboot.3.log ] && sleep_time_check $PLAINBOX_SESSION_SHARE/pm_test.reboot.3.log _description: Checks the sleep times to ensure that a machine suspends and resumes within a given threshold plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/hibernate_250_cycles estimated_duration: 43400.0 depends: power-management/rtc environ: PLAINBOX_SESSION_SHARE user: root command: if type -P fwts >/dev/null; then echo "Calling fwts" fwts_test -l $PLAINBOX_SESSION_SHARE/hibernate_250_cycles -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120 --s4-multiple=250 else echo "Calling sleep_test" set -o pipefail; sleep_test -s disk -i 250 -w 120 | tee $PLAINBOX_SESSION_SHARE/hibernate_250_cycles.log fi _description: PURPOSE: This is an automated stress test that will force the system to hibernate/resume for 250 cycles plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/hibernate-250-cycle-log-attach estimated_duration: 1.0 command: [ -e $PLAINBOX_SESSION_SHARE/hibernate_250_cycles.log ] && cat $PLAINBOX_SESSION_SHARE/hibernate_250_cycles.log _description: Attaches the log from the 250 cycle Hibernate/Resume test if it exists plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/suspend_250_cycles estimated_duration: 18750.0 depends: power-management/rtc environ: PLAINBOX_SESSION_SHARE user: root command: if type -P fwts >/dev/null; then echo "Calling fwts" set -o pipefail; fwts_test -l $PLAINBOX_SESSION_SHARE/suspend_250_cycles -s s3 --s3-device-check --s3-device-check-delay=45 --s3-sleep-delay=30 --s3-multiple=250 | tee $PLAINBOX_SESSION_SHARE/suspend_250_cycles_times.log else echo "Calling sleep_test" set -o pipefail; sleep_test -p -s mem -i 250 | tee $PLAINBOX_SESSION_SHARE/suspend_250_cycles.log fi _description: PURPOSE: This is an automated stress test that will force the system to suspend/resume for 250 cycles. plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/suspend-250-cycle-log-attach estimated_duration: 1.0 command: [ -e $PLAINBOX_SESSION_SHARE/suspend_250_cycles.log ] && cat $PLAINBOX_SESSION_SHARE/suspend_250_cycles.log _description: Attaches the log from the 250 cycle Suspend/Resume test if it exists plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/suspend-250-cycles-time-check estimated_duration: 1.0 command: [ -e $PLAINBOX_SESSION_SHARE/suspend_250_cycles_times.log ] && sleep_time_check $PLAINBOX_SESSION_SHARE/suspend_250_cycles_times.log _description: Checks the sleep times to ensure that a machine suspends and resumes within a given threshold plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/reboot estimated_duration: 4500.0 requires: package.name == 'upstart' package.name == 'fwts' command: pm_test -r 100 --silent --log-level=notset reboot --log-dir=$PLAINBOX_SESSION_SHARE flags: noreturn user: root environ: PLAINBOX_SESSION_SHARE _description: Stress reboot system (100 cycles) plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/reboot_log estimated_duration: 1.0 depends: stress/reboot command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/*reboot.100.log | base64 plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/reboot_30 requires: package.name == 'upstart' package.name == 'fwts' command: pm_test -r 30 --silent --log-level=notset reboot --log-dir=$PLAINBOX_SESSION_SHARE flags: noreturn estimated_duration: 2700 user: root environ: PLAINBOX_SESSION_SHARE _description: Stress reboot system (30 cycles) plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/reboot_30_log depends: stress/reboot_30 command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/*reboot.30.log | base64 plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/poweroff estimated_duration: 4500.0 requires: package.name == 'upstart' package.name == 'fwts' command: pm_test -r 100 --silent --log-level=notset poweroff --log-dir=$PLAINBOX_SESSION_SHARE flags: noreturn user: root environ: PLAINBOX_SESSION_SHARE _description: Stress poweroff system (100 cycles) plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/poweroff_log estimated_duration: 1.0 depends: stress/poweroff command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/*poweroff.100.log | base64 plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/poweroff_30 requires: package.name == 'upstart' package.name == 'fwts' command: pm_test -r 30 --silent --log-level=notset poweroff --log-dir=$PLAINBOX_SESSION_SHARE flags: noreturn estimated_duration: 3600 user: root environ: PLAINBOX_SESSION_SHARE _description: Stress poweroff system (30 cycles) plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/poweroff_30_log depends: stress/poweroff_30 command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/*poweroff.30.log | base64 plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/reboot_30_check estimated_duration: 1.0 depends: stress/reboot_30 command: pm_log_check --log-level=notset $PLAINBOX_SESSION_SHARE/pm_test.reboot.30.log $PLAINBOX_SESSION_SHARE/pm_log_check_reboot.30.log _description: Check logs for the stress reboot (30 cycles) test case plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/reboot_30_check_log estimated_duration: 1.0 depends: stress/reboot_30_check command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/pm_log_check_reboot.30.log | base64 plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/poweroff_30_check estimated_duration: 1.0 depends: stress/poweroff_30 command: pm_log_check --log-level=notset $PLAINBOX_SESSION_SHARE/pm_test.poweroff.30.log $PLAINBOX_SESSION_SHARE/pm_log_check_poweroff.30.log _description: Check logs for the stress poweroff (30 cycles) test case plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/poweroff_30_check_log estimated_duration: 1.0 depends: stress/poweroff_30_check command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/pm_log_check_poweroff.30.log | base64 plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/reboot_check estimated_duration: 1.0 depends: stress/reboot command: pm_log_check --log-level=notset $PLAINBOX_SESSION_SHARE/pm_test.reboot.100.log $PLAINBOX_SESSION_SHARE/pm_log_check_reboot.100.log _description: Check logs for the stress reboot (100 cycles) test case plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/reboot_check_log estimated_duration: 1.0 depends: stress/reboot_check command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/pm_log_check_reboot.100.log | base64 plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/poweroff_check estimated_duration: 1.0 depends: stress/poweroff command: pm_log_check --log-level=notset $PLAINBOX_SESSION_SHARE/pm_test.poweroff.100.log $PLAINBOX_SESSION_SHARE/pm_log_check_poweroff.100.log _description: Check logs for the stress poweroff (100 cycles) test case plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/poweroff_check_log estimated_duration: 1.0 depends: stress/poweroff_check command: set -o pipefail tar cvz $PLAINBOX_SESSION_SHARE/pm_log_check_poweroff.100.log | base64 plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/graphics estimated_duration: 600.0 requires: package.name == 'x11-apps' user: root environ: PLAINBOX_SESSION_SHARE command: graphics_stress_test --iterations 20 -b repeat -d -o $PLAINBOX_SESSION_SHARE/graphics-stress-results && echo "Graphics Stress Test completed successfully" || echo "Graphics Stress Test completed, but there are errors. Please see the log $PLAINBOX_SESSION_SHARE/graphics-stress-results for details" && false _description: Run the graphics stress test. This test can take a few minutes. plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/graphics-tarball estimated_duration: 1.0 requires: package.name == 'x11-apps' command: [ -f $PLAINBOX_SESSION_SHARE/graphics-stress-results ] && tar cvz $PLAINBOX_SESSION_SHARE/graphics-stress-results | base64 _description: Attaches the graphics stress results to the submission. plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/usb estimated_duration: 710.0 user: root command: removable_storage_test -s 10240000 -c 100 -i 3 usb _description: Runs a test that transfers 100 10MB files 3 times to usb. plugin: user-interact category_id: 2013.com.canonical.plainbox::stress id: stress/sdhc user: root _summary: Stress test for SDHC card estimated_duration: 780.0 command: removable_storage_test -s 10240000 -c 100 -i 3 sdio scsi usb --memorycard _description: PURPOSE: This test will transfers 100 10MB files 3 times to a SDHC card, to check that the systems media card reader can transfer large amounts of data. STEPS: 1. Insert a SDHC card into the reader and then Click "Test". If a file browser opens up, you can safely close it. 2. Do not remove the device during this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::stress id: stress/network_restart estimated_duration: 1500.0 user: root environ: PLAINBOX_SESSION_SHARE command: network_restart -t 100 -o $PLAINBOX_SESSION_SHARE _description: Ping ubuntu.com and restart network interfaces 100 times plugin: attachment category_id: 2013.com.canonical.plainbox::stress id: stress/network_restart_log estimated_duration: 1.0 depends: stress/network_restart command: file=$PLAINBOX_SESSION_SHARE/network_restart.log; if [ -e "$file" ]; then iconv -t 'ascii' -c "$file"; fi plugin: manual category_id: 2013.com.canonical.plainbox::stress id: stress/wireless_hotkey estimated_duration: 60.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: To make sure that stressing the wifi hotkey does not cause applets to disappear from the panel or the system to lock up STEPS: 1. Log in to desktop 2. Press wifi hotkey at a rate of 1 press per second and slowly increase the speed of the tap, until you are tapping as fast as possible VERIFICATION: Verify the system is not frozen and the wifi and bluetooth applets are still visible and functional plainbox-provider-checkbox-0.25/jobs/bluetooth.txt.in0000664000175000017500000001327212646152433024211 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::bluetooth id: bluetooth/detect-output estimated_duration: 1.2 requires: package.name == 'bluez' device.category == 'BLUETOOTH' command: if rfkill list bluetooth | grep -q 'Hard blocked: yes'; then echo "rfkill shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes'; then echo "rfkill shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi output=$(hcitool dev | tail -n+2 | awk '{print $2}' | tee $PLAINBOX_SESSION_SHARE/bluetooth_address) echo "$output" if [ -z "$output" ]; then "BT hardware not available" exit 1 fi _description: Automated test to store bluetooth device information in checkbox report plugin: manual category_id: 2013.com.canonical.plainbox::bluetooth id: bluetooth/browse-files depends: bluetooth/detect-output estimated_duration: 120.0 _description: PURPOSE: This test will check that bluetooth connection works correctly STEPS: 1. Enable bluetooth on any mobile device (PDA, smartphone, etc.) 2. Click on the bluetooth icon in the menu bar 3. Select 'Setup new device' 4. Look for the device in the list and select it 5. In the device write the PIN code automatically chosen by the wizard 6. The device should pair with the computer 7. Right-click on the bluetooth icon and select browse files 8. Authorize the computer to browse the files in the device if needed 9. You should be able to browse the files VERIFICATION: Did all the steps work? plugin: manual category_id: 2013.com.canonical.plainbox::bluetooth id: bluetooth/file-transfer depends: bluetooth/browse-files bluetooth/detect-output estimated_duration: 120.0 _description: PURPOSE: This test will check that you can transfer information through a bluetooth connection STEPS: 1. Make sure that you're able to browse the files in your mobile device 2. Copy a file from the computer to the mobile device 3. Copy a file from the mobile device to the computer VERIFICATION: Were all files copied correctly? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::bluetooth id: bluetooth/audio-a2dp depends: bluetooth/detect-output estimated_duration: 120.0 command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings idx=`pactl list cards short | awk '/bluez/{print $1}'` bt_sink=`pactl list sinks short | awk '/bluez/{print $2}'` pactl set-card-profile $idx a2dp pactl set-default-sink $bt_sink gst_pipeline_test -t 2 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will check the High Fidelity Playback (A2DP) capability of your Bluetooth device, to see if you can hear audio from it. STEPS: 1. Enable and pair the bluetooth headset 2. Click "Test" to play a brief tone on your Bluetooth device, if it failed to set the Mode to A2DP, please select the device and change it manually in the "Sound Settings" VERIFICATION: Did you hear the tone? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::bluetooth id: bluetooth/audio depends: bluetooth/detect-output estimated_duration: 120.0 command: audio_bluetooth_loopback_test _description: PURPOSE: This test will check the Telephony Duplex capability of your bluetooth device, to see if you can record and hear audio from it simultaneously. STEPS: 1. Enable the bluetooth headset 2. Click on the bluetooth icon in the menu bar 3. Select "Setup new device" 4. Look for the device in the list and pair it 5. Click the sound icon 6. Click "Sound Settings" 7. Select device and ensure Mode is set to "Telephony Duplex (HSP/HFP)" 8. Click "Test" to record and play for five seconds in the bluetooth device VERIFICATION: Did you hear the sound you recorded in the bluetooth with a slight intended delay? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::bluetooth id: bluetooth/HID depends: bluetooth/detect-output estimated_duration: 120.0 command: keyboard_test _description: PURPOSE: This test will check that you can use a BlueTooth HID device STEPS: 1. Enable either a BT mouse or keyboard 2. Click on the bluetooth icon in the menu bar 3. Select 'Setup new device' 4. Look for the device in the list and select it 5. For mice, perform actions such as moving the pointer, right and left button clicks and double clicks 6. For keyboards, commence the test to launch a small tool. Enter some text into the tool and close it. VERIFICATION: Did the device work as expected? plugin: shell category_id: 2013.com.canonical.plainbox::bluetooth id: bluetooth/file_transfer_stress estimated_duration: 300.0 requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in plainbox.conf" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi bluetooth_transfer_stress $BTDEVADDR _description: This is an automated Bluetooth file transfer test. It sends a large file to the device specified by the BTDEVADDR environment variable, then retrieves it again using Bluetooth and verifies the checksum to ensure the transfer didn't corrupt the file. plainbox-provider-checkbox-0.25/jobs/input.txt.in0000664000175000017500000000650512646152433023344 0ustar sylvainsylvain00000000000000plugin: local _summary: Pointing device tests. id: input/pointing estimated_duration: 30.0 requires: device.category == 'MOUSE' or device.category == 'TOUCHPAD' or device.category == 'TOUCHSCREEN' _description: Pointing device tests. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=MOUSE" -w "category=TOUCHPAD" -w "category=TOUCHSCREEN"' plugin: manual category_id: 2013.com.canonical.plainbox::input id: input/pointing_`echo "${product}_${category}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'`_`basename $path` requires: device.path == "$path" description: PURPOSE: This will test your $product device STEPS: 1. Move the cursor with your $product. VERIFICATION: Did the cursor move? EOF plugin: manual category_id: 2013.com.canonical.plainbox::input id: input/mouse estimated_duration: 30.0 _description: PURPOSE: This test will test your pointing device STEPS: 1. Move the cursor using the pointing device or touch the screen. 2. Perform some single/double/right click operations. VERIFICATION: Did the pointing device work as expected? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::input id: input/keyboard estimated_duration: 30.0 command: keyboard_test requires: device.category == 'KEYBOARD' _description: PURPOSE: This test will test your keyboard STEPS: 1. Click on Test 2. On the open text area, use your keyboard to type something VERIFICATION: Is your keyboard working properly? plugin: manual category_id: 2013.com.canonical.plainbox::input id: input/accelerometer_verify estimated_duration: 30.0 _description: PURPOSE: Manual detection of accelerometer. STEPS: 1. Look at the specifications for your system. VERIFICATION: Is this system supposed to have an accelerometer? plugin: user-interact category_id: 2013.com.canonical.plainbox::input id: input/accelerometer estimated_duration: 60.0 user: root depends: input/accelerometer_verify command: accelerometer_test -m _description: PURPOSE: This test will test your accelerometer to see if it is detected and operational as a joystick device. STEPS: 1. Click on Test 2. Tilt your hardware in the directions onscreen until the axis threshold is met. VERIFICATION: Is your accelerometer properly detected? Can you use the device? plugin: local id: input/clicking estimated_duration: 1.0 requires: device.category == 'MOUSE' or device.category == 'TOUCHPAD' _summary: Create click tests for pointing devices. _description: Click tests for pointing devices. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=MOUSE" -w "category=TOUCHPAD"' plugin: manual category_id: 2013.com.canonical.plainbox::input estimated_duration: 30.0 id: input/clicking_`echo "${product}_${category}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'`_`basename $path` requires: device.path == "$path" _summary: Check button functionality for $product _description: PURPOSE: This will test the buttons of your $product device STEPS: 1. Click the left button with your $product. 2. Click the right button with your $product. 3. Click the middle button with your $product (if available). 4. Double-click the left button with your $product. VERIFICATION: Did these buttons work as expected? EOF plainbox-provider-checkbox-0.25/jobs/suspend.txt.in0000664000175000017500000033465512646152433023700 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/network_before_suspend depends: ethernet/detect estimated_duration: 1.2 _description: Record the current network before suspending. command: set -o pipefail; gateway_ping_test | tee $PLAINBOX_SESSION_SHARE/network_before_suspend.txt plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/resolution_before_suspend estimated_duration: 1.2 _description: Record the current resolution before suspending. command: xrandr -q |grep '*'| awk '{print $1}' > $PLAINBOX_SESSION_SHARE/resolution_before_suspend.txt plugin: local id: suspend/generator_resolution_before_suspend _description: Record the current resolution before suspending. _summary: Record the current resolution before suspending. command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_resolution_before_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: graphics/`echo ${index}`_switch_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` estimated_duration: 1.2 _description: Record the current resolution before suspending. command: xrandr -q |grep '*'| awk '{print $1}' > $PLAINBOX_SESSION_SHARE/`echo ${index}`_resolution_before_suspend.txt EOF plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/audio_before_suspend estimated_duration: 1.0 requires: device.category == 'AUDIO' package.name == 'alsa-base' _description: Record mixer settings before suspending. command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/audio_settings_before_suspend plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/cpu_before_suspend estimated_duration: 1.2 _description: Verify that all the CPUs are online before suspending command: cpuinfo_resource > $PLAINBOX_SESSION_SHARE/cpuinfo_before_suspend plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/memory_before_suspend estimated_duration: 1.2 _description: Dumps memory info to a file for comparison after suspend test has been run command: meminfo_resource > $PLAINBOX_SESSION_SHARE/meminfo_before_suspend plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_before_suspend depends: wireless/wireless_connection requires: device.category == 'WIRELESS' command: nmcli -t -f UUID con status > $PLAINBOX_SESSION_SHARE/connections && connect_wireless && gateway_ping_test --interface=`(nmcli dev list 2>/dev/null || nmcli dev show) | grep -B 1 -e 'wireless' -e 'wifi' | grep GENERAL.DEVICE | awk '{print $2}'` && for con in `cat $PLAINBOX_SESSION_SHARE/connections`; do nmcli con up uuid "$con"; done estimated_duration: 20.0 _description: This test disconnects all connections and then connects to the wireless interface. It then checks the connection to confirm it's working as expected. unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/iperf_before_suspend_ether_auto_device{__index__}_{interface} depends: ethernet/detect estimated_duration: 20.0 requires: device.path == '{path}' package.name == 'iperf' user: root environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS command: network -i {interface} -t iperf _description: This test executes iperf connection performance/stability against device {__index__} ({interface}) before suspend. unit: template template-unit: job template-resource: device template-filter: device.category == 'WIRELESS' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/iperf_before_suspend_wifi_auto_device{__index__}_{interface} depends: wireless/wireless_connection estimated_duration: 20.0 requires: device.path == '{path}' package.name == 'iperf' user: root environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS command: network -i {interface} -t iperf _description: This test executes iperf connection performance/stability against device {__index__} ({interface}) before suspend. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/iperf_before_suspend_mobilebroadband_gsm_auto depends: mobilebroadband/gsm_connection estimated_duration: 20.0 user: root environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS command: INTERFACE=`(nmcli -t -f GENERAL -m tabular dev list 2>/dev/null || nmcli -t -f GENERAL -m tabular dev show) |grep gsm |cut -d ":" -f 13` [ -z $INTERFACE ] && exit 1 network test -i $INTERFACE -t iperf _description: This test executes iperf connection performance/stability against the broadband device found on the system before suspend. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/iperf_before_suspend_mobilebroadband_cdma_auto depends: mobilebroadband/cdma_connection estimated_duration: 20.0 user: root environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS command: INTERFACE=`(nmcli -t -f GENERAL -m tabular dev list 2>/dev/null || nmcli -t -f GENERAL -m tabular dev show) |grep cdma |cut -d ":" -f 13` [ -z $INTERFACE ] && exit 1 network test -i $INTERFACE -t iperf _description: This test executes iperf connection performance/stability against the broadband device found on the system before suspend. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_obex_send_before_suspend estimated_duration: 10.0 requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi set -o pipefail; bluetooth_test $PLAINBOX_PROVIDER_DATA/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR send 2>&1 | ansi_parser _description: This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_obex_browse_before_suspend estimated_duration: 10.0 requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi set -o pipefail; bluetooth_test $PLAINBOX_PROVIDER_DATA/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR browse 2>&1 | ansi_parser _description: This is an automated Bluetooth test. It emulates browsing on a remote device specified by the BTDEVADDR environment variable. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_obex_get_before_suspend estimated_duration: 20.0 requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi set -o pipefail; bluetooth_test $PLAINBOX_PROVIDER_DATA/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR get 2>&1 | ansi_parser _description: This is an automated Bluetooth test. It receives the given file from a remote host specified by the BTDEVADDR environment variable plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/suspend_advanced requires: sleep.mem == 'supported' rtc.state == 'supported' user: root environ: PLAINBOX_SESSION_SHARE command: if type -P fwts >/dev/null; then echo "Calling fwts" set -o pipefail; fwts_test -f none -l $PLAINBOX_SESSION_SHARE/suspend_single -s s3 --s3-sleep-delay=30 --s3-device-check --s3-device-check-delay=45 | tee $PLAINBOX_SESSION_SHARE/suspend_single_times.log else echo "Calling sleep_test" set -o pipefail; sleep_test -p | tee $PLAINBOX_SESSION_SHARE/2_suspend_single_times.log fi estimated_duration: 90.0 _description: PURPOSE: This test will check suspend and resume STEPS: 1. Click "Test" and your system will suspend for about 30 - 60 seconds 2. Observe the Power LED to see if it blinks or changes color during suspend 3. If your system does not wake itself up after 60 seconds, please press the power button momentarily to wake the system manually 4. If your system fails to wake at all and must be rebooted, restart System Testing after reboot and mark this test as Failed VERIFICATION: Did your system suspend and resume correctly? (NOTE: Please only consider whether the system successfully suspended and resumed. Power/Suspend LED verification will occur after this test is completed.) id: suspend/generator_suspend_after_switch_to_card requires: device.category == 'VIDEO' _description: Suspend after graphics card switch tests _summary: Suspend after graphics card switch tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: sleep.mem == 'supported' rtc.state == 'supported' depends: graphics/`echo ${index}`_switch_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` user: root environ: PLAINBOX_SESSION_SHARE command: if type -P fwts >/dev/null; then echo "Calling fwts" set -o pipefail; fwts_test -f none -l $PLAINBOX_SESSION_SHARE/`echo ${index}`_suspend_single -s s3 --s3-sleep-delay=30 --s3-device-check --s3-device-check-delay=45 | tee $PLAINBOX_SESSION_SHARE/`echo ${index}`_suspend_single_times.log else echo "Calling sleep_test" set -o pipefail; sleep_test -p | tee $PLAINBOX_SESSION_SHARE/`echo ${index}`_suspend_single_times.log fi estimated_duration: 90.0 _summary: Test suspend/resume after switching to $product _description: PURPOSE: This test will check suspend and resume after switching to $product graphics card. STEPS: 1. Ensure you have switched to $product graphics card. 2. Click "Test" and your system will suspend for about 30 - 60 seconds 3. Observe the Power LED to see if it blinks or changes color during suspend 4. If your system does not wake itself up after 60 seconds, please press the power button momentarily to wake the system manually 5. If your system fails to wake at all and must be rebooted, restart System Testing after reboot and mark this test as Failed VERIFICATION: Did your system suspend and resume correctly after switching to $product graphics card? (NOTE: Please only consider whether the system successfully suspended and resumed. Power/Suspend LED verification will occur after this test is completed.) EOF plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/suspend_advanced_auto requires: sleep.mem == 'supported' rtc.state == 'supported' _description: This is the automated version of suspend/suspend_advanced. user: root environ: PLAINBOX_SESSION_SHARE command: set -o pipefail; fwts_test -f none -l $PLAINBOX_SESSION_SHARE/suspend_single -s s3 --s3-sleep-delay=30 --s3-device-check --s3-device-check-delay=45 | tee $PLAINBOX_SESSION_SHARE/suspend_single_times.log estimated_duration: 90.000 id: suspend/generator_hybrid_sleep _description: Hybrid sleep test _summary: Hybrid sleep test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_hybrid_sleep_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` user: root command: set -o pipefail; fwts_test -f none -l $PLAINBOX_SESSION_SHARE/`echo ${index}`_hybrid_sleep_single -s s3 --s3-hybrid --s3-sleep-delay=30 --s3-device-check --s3-device-check-delay=45 --pm-method=pm-utils | tee $PLAINBOX_SESSION_SHARE/`echo ${index}`_hybrid_sleep_single_times.log estimated_duration: 90.0 _description: PURPOSE: This test will check hybrid sleep and resume STEPS: 1. Click "Test" and your system will go into hybrid sleep mode for about 30 - 60 seconds 2. Observe the Power LED to see if it blinks or changes color during suspend 3. If your system does not wake itself up after 60 seconds, please press the power button momentarily to wake the system manually 4. If your system fails to wake at all and must be rebooted, restart System Testing after reboot and mark this test as Failed VERIFICATION: Did your system enter hybrid sleep and then resume correctly? EOF plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/suspend-single-log-check estimated_duration: 1.2 command: [ -e $PLAINBOX_SESSION_SHARE/suspend_single.log ] && sleep_test_log_check -v s3 $PLAINBOX_SESSION_SHARE/suspend_single.log _description: Automated check of the suspend log to look for errors reported by fwts plugin: attachment category_id: 2013.com.canonical.plainbox::suspend id: suspend/suspend-single-log-attach command: [ -e $PLAINBOX_SESSION_SHARE/suspend_single.log ] && cat $PLAINBOX_SESSION_SHARE/suspend_single.log _description: Attaches the log from the single suspend/resume test to the results id: suspend/generator_suspend-single-log-attach _description: Suspend log attach _summary: Suspend log attach plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: attachment category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_suspend-single-log-attach_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` command: [ -e $PLAINBOX_SESSION_SHARE/`echo ${index}`_suspend_single.log ] && cat $PLAINBOX_SESSION_SHARE/`echo ${index}`_suspend_single.log _description: Attaches the log from the single suspend/resume test to the results EOF id: suspend/generator_hybrid-sleep-single-log-check _description: Hybrid sleep log check test _summary: Hybrid sleep log check test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_hybrid-sleep-single-log-check depends: suspend/`echo ${index}`_hybrid_sleep_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` estimated_duration: 1.2 command: [ -e $PLAINBOX_SESSION_SHARE/`echo ${index}`_hybrid_sleep_single.log ] && sleep_test_log_check -v s3 $PLAINBOX_SESSION_SHARE/`echo ${index}`_hybrid_sleep_single.log _description: Automated check of the hybrid sleep log to look for errors reported by fwts EOF id: suspend/generator_hybrid-sleep-single-log-attach _description: Hybrid sleep log attach _summary: Hybrid sleep log attach plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: attachment category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_hybrid-sleep-single-log-attach_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: suspend/`echo ${index}`_hybrid_sleep_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` command: [ -e $PLAINBOX_SESSION_SHARE/`echo ${index}`_hybrid_sleep_single.log ] && cat $PLAINBOX_SESSION_SHARE/`echo ${index}`_hybrid_sleep_single.log _description: Attaches the log from the single hybrid sleep/resume test to the results EOF plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/suspend-time-check estimated_duration: 1.2 command: [ -e $PLAINBOX_SESSION_SHARE/suspend_single_times.log ] && sleep_time_check $PLAINBOX_SESSION_SHARE/suspend_single_times.log _description: Checks the sleep times to ensure that a machine suspends and resumes within a given threshold id: suspend/generator_suspend-time-check _description: Suspend time check test _summary: Suspend time check test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_suspend-time-check_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` estimated_duration: 1.2 command: [ -e $PLAINBOX_SESSION_SHARE/`echo ${index}`_suspend_single_times.log ] && sleep_time_check $PLAINBOX_SESSION_SHARE/`echo ${index}`_suspend_single_times.log _description: Checks the sleep times to ensure that a machine suspends and resumes within a given threshold EOF plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: power-management/usb_wakeup_keyboard user: root depends: suspend/suspend_advanced estimated_duration: 120.0 command: pm-suspend _description: PURPOSE: Wake up by USB keyboard STEPS: 1. Enable "Wake by USB KB/Mouse" item in BIOS 2. Press "Test" to enter suspend (S3) mode 3. Press any key of USB keyboard to wake system up VERIFICATION: Did the system wake up from suspend mode when you pressed a keyboard key? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: power-management/usb_wakeup_mouse user: root depends: suspend/suspend_advanced estimated_duration: 120.0 command: pm-suspend _description: PURPOSE: Wake up by USB mouse STEPS: 1. Enable "Wake by USB KB/Mouse" item in BIOS 2. Press "Test" to enter suspend (S3) mode 3. Press any button of USB mouse to wake system up VERIFICATION: Did the system wake up from suspend mode when you pressed the mouse button? plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/network_after_suspend estimated_duration: 20.0 depends: suspend/suspend_advanced suspend/network_before_suspend _description: Test the network after resuming. command: network_wait; gateway_ping_test | diff $PLAINBOX_SESSION_SHARE/network_before_suspend.txt - plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/resolution_after_suspend depends: suspend/suspend_advanced suspend/resolution_before_suspend estimated_duration: 1.2 _description: Test to see that we have the same resolution after resuming as before. command: xrandr -q |grep '*'| awk '{print $1}' | diff $PLAINBOX_SESSION_SHARE/resolution_before_suspend.txt - plugin: local id: suspend/generator_resolution_after_suspend _description: Resolution consistency check after suspend with the valuse we got before suspend. _summary: Resolution consistency check after suspend with the valuse we got before suspend. command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_resolution_after_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` estimated_duration: 1.2 depends: suspend/`echo ${index}`_resolution_before_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` _description: Test to see that we have the same resolution after resuming as before. command: xrandr -q |grep '*'| awk '{print $1}' | diff $PLAINBOX_SESSION_SHARE/`echo ${index}`_resolution_before_suspend.txt - EOF plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/audio_after_suspend estimated_duration: 1.0 requires: device.category == 'AUDIO' package.name == 'alsa-base' depends: suspend/suspend_advanced suspend/audio_before_suspend _description: Verify that mixer settings after suspend are the same as before suspend. command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/audio_settings_after_suspend diff $PLAINBOX_SESSION_SHARE/audio_settings_before_suspend $PLAINBOX_SESSION_SHARE/audio_settings_after_suspend plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/audio_after_suspend_auto estimated_duration: 1.2 requires: device.category == 'AUDIO' package.name == 'alsa-base' depends: suspend/suspend_advanced_auto suspend/audio_before_suspend _description: Verify that mixer settings after suspend are the same as before suspend. command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/audio_settings_after_suspend diff $PLAINBOX_SESSION_SHARE/audio_settings_before_suspend $PLAINBOX_SESSION_SHARE/audio_settings_after_suspend plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/speaker-headphone-plug-detection-after-suspend depends: suspend/suspend_advanced estimated_duration: 60.0 requires: device.category == 'AUDIO' package.name == 'pulseaudio-utils' command: pulse-active-port-change sinks _description: PURPOSE: Check that system detects speakers or headphones being plugged in after suspend STEPS: 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack 2. Locate the speaker / headphone jack on the device under test 3. Run the test (you have 30 seconds from now on) 4. Plug headphones or speakers into the appropriate jack 5. Unplug the device for subsequent tests. VERIFICATION: Verification is automatic, no action is required. The test times out after 30 seconds (and fails in that case). plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/microphone-plug-detection-after-suspend depends: suspend/suspend_advanced estimated_duration: 60.0 requires: device.category == 'AUDIO' package.name == 'pulseaudio-utils' command: pulse-active-port-change sources _description: PURPOSE: Check that system detects a microphone being plugged in after suspend STEPS: 1. Prepare a microphone with a standard 3.5mm jack 2. Locate the microphone jack on the device under test. Keep in mind that it may be shared with the headphone jack. 3. Run the test (you have 30 seconds from now on) 4. Plug the microphone into the appropriate jack 5. Unplug the device for subsequent tests. VERIFICATION: Verification is automatic, no action is required. The test times out after 30 seconds (and fails in that case). plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/playback_headphones-after-suspend estimated_duration: 20.0 depends: audio/list_devices suspend/suspend_advanced requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 gst_pipeline_test -t 2 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will check that headphones connector works correctly after suspend STEPS: 1. Connect a pair of headphones to your audio device 2. Commence the test to play a sound to your audio device VERIFICATION: Did you hear a sound through the headphones and did the sound play without any distortion, clicks or other strange noises from your headphones? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/alsa_record_playback_external-after-suspend estimated_duration: 20.0 depends: suspend/playback_headphones-after-suspend suspend/suspend_advanced requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'pulseaudio-utils' package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 alsa_record_playback EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will check that recording sound using an external microphone works correctly after suspend STEPS: 1. Connect a microphone to your microphone port 2. Click "Test", then speak into the external microphone 3. After a few seconds, your speech will be played back to you VERIFICATION: Did you hear your speech played back? plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/cpu_after_suspend estimated_duration: 1.2 depends: suspend/suspend_advanced suspend/cpu_before_suspend _description: Verify that all CPUs are online after resuming. command: cpuinfo_resource | diff $PLAINBOX_SESSION_SHARE/cpuinfo_before_suspend - plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/cpu_after_suspend_auto estimated_duration: 1.2 depends: suspend/suspend_advanced_auto suspend/cpu_before_suspend _description: Verify that all CPUs are online after resuming. command: cpuinfo_resource | diff $PLAINBOX_SESSION_SHARE/cpuinfo_before_suspend - plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/memory_after_suspend estimated_duration: 1.2 depends: suspend/suspend_advanced suspend/memory_before_suspend _description: Verify that all memory is available after resuming from suspend. command: meminfo_resource | diff $PLAINBOX_SESSION_SHARE/meminfo_before_suspend - plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/memory_after_suspend_auto estimated_duration: 1.2 depends: suspend/suspend_advanced_auto suspend/memory_before_suspend _description: Verify that all memory is available after resuming from suspend. command: meminfo_resource | diff $PLAINBOX_SESSION_SHARE/meminfo_before_suspend - plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/display_after_suspend estimated_duration: 120.0 depends: suspend/suspend_advanced _description: PURPOSE: This test will check that the display is correct after suspend and resume STEPS: 1. Check that your display does not show up visual artifacts after resuming. VERIFICATION: Does the display work normally after resuming from suspend? id: suspend/generator_display_after_suspend requires: device.category == 'VIDEO' _description: Display after suspend tests _summary: Display after suspend tests plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_display_after_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` _summary: Test display function after suspend for $product _description: PURPOSE: This test will check that the display is correct after suspend and resume on the $product graphics card. STEPS: 1. Check that your display does not show up visual artifacts after resuming. VERIFICATION: Does the display work normally after resuming from suspend using the $product graphics card? EOF plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_after_suspend depends: suspend/suspend_advanced suspend/wireless_before_suspend requires: device.category == 'WIRELESS' command: connect_wireless && gateway_ping_test --interface=`(nmcli dev list 2>/dev/null || nmcli dev show) | grep -B 1 -e wireless -e wifi | grep GENERAL.DEVICE | awk '{print $2}'` && for con in `cat $PLAINBOX_SESSION_SHARE/connections`; do nmcli con up uuid "$con"; done estimated_duration: 20.0 _description: This test checks that the wireless interface is working after suspending the system. It disconnects all interfaces and then connects to the wireless interface and checks that the connection is working as expected. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_wpa_bg depends: suspend/suspend_advanced estimated_duration: 20.0 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: WPA_BG_SSID WPA_BG_PSK command: trap "nmcli con delete id $WPA_BG_SSID" EXIT if create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11b/g protocols after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_open_bg depends: suspend/suspend_advanced estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: OPEN_BG_SSID command: trap "nmcli con delete id $OPEN_BG_SSID" EXIT if create_connection wifi $OPEN_BG_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11b/g protocols after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_wpa_n depends: suspend/suspend_advanced estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: WPA_N_SSID WPA_N_PSK command: trap "nmcli con delete id $WPA_N_SSID" EXIT if create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11n protocol after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_open_n depends: suspend/suspend_advanced estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: OPEN_N_SSID command: trap "nmcli con delete id $OPEN_N_SSID" EXIT if create_connection wifi $OPEN_N_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11n protocol after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_wpa_ac depends: suspend/suspend_advanced estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' IEEE_80211.ac == 'supported' user: root environ: WPA_AC_SSID WPA_AC_PSK command: trap "nmcli con delete id $WPA_AC_SSID" EXIT if create_connection wifi $WPA_AC_SSID --security=wpa --key=$WPA_AC_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11ac protocol after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_open_ac depends: suspend/suspend_advanced estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' IEEE_80211.ac == 'supported' user: root environ: OPEN_AC_SSID command: trap "nmcli con delete id $OPEN_AC_SSID" EXIT if create_connection wifi $OPEN_AC_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11ac protocol after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_wpa_bg_auto depends: suspend/suspend_advanced_auto estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: WPA_BG_SSID WPA_BG_PSK command: trap "nmcli con delete id $WPA_BG_SSID" EXIT if create_connection wifi $WPA_BG_SSID --security=wpa --key=$WPA_BG_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11b/g protocols after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_open_bg_auto depends: suspend/suspend_advanced_auto estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: OPEN_BG_SSID command: trap "nmcli con delete id $OPEN_BG_SSID" EXIT if create_connection wifi $OPEN_BG_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11b/g protocols after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_wpa_n_auto depends: suspend/suspend_advanced_auto estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: WPA_N_SSID WPA_N_PSK command: trap "nmcli con delete id $WPA_N_SSID" EXIT if create_connection wifi $WPA_N_SSID --security=wpa --key=$WPA_N_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11n protocol after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_open_n_auto depends: suspend/suspend_advanced_auto estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' user: root environ: OPEN_N_SSID command: trap "nmcli con delete id $OPEN_N_SSID" EXIT if create_connection wifi $OPEN_N_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11n protocol after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_wpa_ac_auto depends: suspend/suspend_advanced_auto estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' IEEE_80211.ac == 'supported' user: root environ: WPA_AC_SSID WPA_AC_PSK command: trap "nmcli con delete id $WPA_AC_SSID" EXIT if create_connection wifi $WPA_AC_SSID --security=wpa --key=$WPA_AC_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11ac protocol after the system has been suspended. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_open_ac_auto depends: suspend/suspend_advanced_auto estimated_duration: 1.2 requires: device.category == 'WIRELESS' environment.ROUTERS == 'multiple' IEEE_80211.ac == 'supported' user: root environ: OPEN_AC_SSID command: trap "nmcli con delete id $OPEN_AC_SSID" EXIT if create_connection wifi $OPEN_AC_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: Tests that the systems wireless hardware can connect to a router using no security and the 802.11ac protocol after the system has been suspended. unit: template template-unit: job template-resource: device template-filter: device.category == 'NETWORK' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/iperf_after_suspend_ether_auto_device{__index__}_{interface} depends: suspend/suspend_advanced estimated_duration: 30.0 requires: device.path == '{path}' package.name == 'iperf' user: root environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS command: network -i {interface} -t iperf _description: This test executes iperf connection performance/stability against device {__index__} ({interface}) after suspend. unit: template template-unit: job template-resource: device template-filter: device.category == 'WIRELESS' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/iperf_after_suspend_wifi_auto_device{__index__}_{interface} depends: suspend/suspend_advanced estimated_duration: 30.0 requires: device.path == '{path}' package.name == 'iperf' user: root environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS command: network -i {interface} -t iperf _description: This test executes iperf connection performance/stability against device {__index__} ({interface}) after suspend. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/iperf_after_suspend_mobilebroadband_gsm_auto depends: suspend/suspend_advanced_auto estimated_duration: 20.0 user: root environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS command: INTERFACE=`(nmcli -t -f GENERAL -m tabular dev list 2>/dev/null || nmcli -t -f GENERAL -m tabular dev show) |grep gsm |cut -d ":" -f 13` [ -z $INTERFACE ] && exit 1 network test -i $INTERFACE -t iperf _description: This test executes iperf connection performance/stability against the broadband device found on the system after suspend. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/iperf_after_suspend_mobilebroadband_cdma_auto depends: suspend/suspend_advanced_auto estimated_duration: 20.0 user: root environ: TEST_TARGET_FTP TEST_TARGET_IPERF TEST_USER TEST_PASS command: INTERFACE=`(nmcli -t -f GENERAL -m tabular dev list 2>/dev/null || nmcli -t -f GENERAL -m tabular dev show) |grep cdma |cut -d ":" -f 13` [ -z $INTERFACE ] && exit 1 network test -i $INTERFACE -t iperf _description: This test executes iperf connection performance/stability against the broadband device found on the system after suspend. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_wpa_bg_manual depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' user: root environ: ROUTER_SSID ROUTER_PSK command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11b/g protocols. STEPS: 1. Open your routers configuration tool 2. Change the settings to only accept connections on the B and G wireless bands 3. Make sure the SSID is set to ROUTER_SSID 4. Change the security settings to use WPA2 and ensure the PSK matches that set in ROUTER_PSK 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_open_bg_manual depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' user: root environ: ROUTER_SSID command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using no security and the 802.11b/g protocols. STEPS: 1. Open your routers configuration tool 2. Change the settings to only accept connections on the B and G wireless bands 3. Make sure the SSID is set to ROUTER_SSID 4. Change the security settings to use no security 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_wpa_n_manual depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' user: root environ: ROUTER_SSID ROUTER_PSK command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11n protocols. STEPS: 1. Open your routers configuration tool 2. Change the settings to only accept connections on the N wireless band 3. Make sure the SSID is set to ROUTER_SSID 4. Change the security settings to use WPA2 and ensure the PSK matches that set in ROUTER_PSK 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_open_n_manual depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' user: root environ: ROUTER_SSID command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using no security and the 802.11n protocol. STEPS: 1. Open your routers configuration tool 2. Change the settings to only accept connections on the N wireless band 3. Make sure the SSID is set to ROUTER_SSID 4. Change the security settings to use no security 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_wpa_ac_manual depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' user: root environ: ROUTER_SSID ROUTER_PSK command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID --security=wpa --key=$ROUTER_PSK; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using WPA security and the 802.11ac protocol. STEPS: 1. Open your routers configuration tool 2. Change the settings to only accept connections on the 802.11ac protocol. 3. Make sure the SSID is set to ROUTER_SSID 4. Change the security settings to use WPA2 and ensure the PSK matches that set in ROUTER_PSK 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/wireless_connection_after_suspend_open_ac_manual depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'WIRELESS' environment.ROUTERS == 'single' user: root environ: ROUTER_SSID command: trap "nmcli con delete id $ROUTER_SSID" EXIT if create_connection wifi $ROUTER_SSID; then connect_wireless # lp:1471663 INTERFACE=`nmcli dev status | awk '/802-11-wireless|wifi/ {print $1}'` iw dev $INTERFACE link gateway_ping_test --interface=$INTERFACE STATUS=$? # We reconnect the Ethernet connection if any (lp:1471663) WIRED=$(nmcli -f UUID,TYPE c | grep -oP ".*(?=\s+.*ethernet)") if [[ ! -z $WIRED ]]; then nmcli c up uuid $WIRED fi exit $STATUS else exit 1 fi _description: PURPOSE: Tests that the systems wireless hardware can connect to a router using no security and the 802.11ac protocol. STEPS: 1. Open your routers configuration tool 2. Change the settings to only accept connections on the 802.11ac protocol. 3. Make sure the SSID is set to ROUTER_SSID 4. Change the security settings to use no security 5. Commence the test to create a connection to the router and test the connection VERIFICATION: Verification is automated, do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_detect_after_suspend depends: suspend/suspend_advanced bluetooth/detect-output estimated_duration: 1.2 requires: package.name == 'bluez' device.category == 'BLUETOOTH' command: if rfkill list bluetooth | grep -q 'Hard blocked: yes'; then echo "rfkill shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes'; then echo "rfkill shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi output=$(hcitool dev | tail -n+2 | awk '{print $2}') echo $output | diff $PLAINBOX_SESSION_SHARE/bluetooth_address - if [ -z "$output" ]; then echo "BT hardware not available" exit 1 fi _description: This test grabs the hardware address of the bluetooth adapter after suspend and compares it to the address grabbed before suspend. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_obex_send_after_suspend depends: suspend/suspend_advanced estimated_duration: 10.0 requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi set -o pipefail; bluetooth_test $PLAINBOX_PROVIDER_DATA/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR send 2>&1 | ansi_parser _description: This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_obex_send_after_suspend_auto depends: suspend/suspend_advanced_auto estimated_duration: 10.0 requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi set -o pipefail; bluetooth_test $PLAINBOX_PROVIDER_DATA/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR send 2>&1 | ansi_parser _description: This is an automated Bluetooth file transfer test. It sends an image to the device specified by the BTDEVADDR environment variable. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_obex_browse_after_suspend depends: suspend/suspend_advanced estimated_duration: 10.0 requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi set -o pipefail; bluetooth_test $PLAINBOX_PROVIDER_DATA/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR browse 2>&1 | ansi_parser _description: This is an automated Bluetooth test. It emulates browsing on a remote device specified by the BTDEVADDR environment variable. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_obex_browse_after_suspend_auto depends: suspend/suspend_advanced_auto estimated_duration: 20.0 requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi set -o pipefail; bluetooth_test $PLAINBOX_PROVIDER_DATA/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR browse 2>&1 | ansi_parser _description: This is an automated Bluetooth test. It emulates browsing on a remote device specified by the BTDEVADDR environment variable. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_obex_get_after_suspend estimated_duration: 20.0 depends: suspend/suspend_advanced requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi set -o pipefail; bluetooth_test $PLAINBOX_PROVIDER_DATA/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR get 2>&1 | ansi_parser _description: This is an automated Bluetooth test. It receives the given file from a remote host specified by the BTDEVADDR environment variable plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/bluetooth_obex_get_after_suspend_auto depends: suspend/suspend_advanced_auto estimated_duration: 20.0 requires: package.name == 'bluez' package.name == 'obexftp' device.category == 'BLUETOOTH' command: if [ -z "$BTDEVADDR" ] then echo "btdevaddr option not set to device address of Bluetooth target in checkbox.ini" exit 1 fi if rfkill list bluetooth | grep -q 'Hard blocked: yes' then echo "rfkill list shows BT is hard blocked" fi if rfkill list bluetooth | grep -q 'Soft blocked: yes' then echo "rfkill list shows BT is soft blocked, removing before testing" rfkill unblock bluetooth sleep 3 fi set -o pipefail; bluetooth_test $PLAINBOX_PROVIDER_DATA/images/JPEG_Color_Image_Ubuntu.jpg $BTDEVADDR get 2>&1 | ansi_parser _description: This is an automated Bluetooth test. It receives the given file from a remote host specified by the BTDEVADDR environment variable plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/cycle_resolutions_after_suspend estimated_duration: 120.0 requires: package.name == 'xorg' depends: suspend/suspend_advanced command: xrandr_cycle --keyword=after_suspend --screenshot-dir $PLAINBOX_SESSION_SHARE _description: PURPOSE: This test will cycle through the detected display modes STEPS: 1. Click "Test" and the display will cycle trough the display modes VERIFICATION: Did your display look fine in the detected mode? plugin: local id: suspend/generator_cycle_resolutions_after_suspend requires: device.category == 'VIDEO' _description: Cycle resolution after suspend tests _summary: Cycle resolution after suspend tests command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_cycle_resolutions_after_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'xorg' depends: suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` estimated_duration: 120.0 command: xrandr_cycle --keyword=`echo ${index}`_after_suspend --screenshot-dir $PLAINBOX_SESSION_SHARE _description: PURPOSE: This test will cycle through the detected display modes STEPS: 1. Click "Test" and the display will cycle trough the display modes VERIFICATION: Did your display look fine in the detected mode? EOF plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/cycle_resolutions_after_suspend_auto estimated_duration: 1.2 requires: package.name == 'xorg' depends: suspend/suspend_advanced_auto _description: This test will check to make sure supported video modes work after a suspend and resume. This is done automatically by taking screenshots and uploading them as an attachment. command: xrandr_cycle --keyword=after_suspend --screenshot-dir $PLAINBOX_SESSION_SHARE plugin: attachment category_id: 2013.com.canonical.plainbox::suspend id: suspend/xrandr_screens_after_suspend.tar.gz depends: suspend/cycle_resolutions_after_suspend command: [ -f $PLAINBOX_SESSION_SHARE/xrandr_screens_after_suspend.tgz ] && base64 $PLAINBOX_SESSION_SHARE/xrandr_screens_after_suspend.tgz _description: This attaches screenshots from the suspend/cycle_resolutions_after_suspend test to the results submission. plugin: local id: suspend/generator_xrandr_screens_after_suspend.tar.gz _description: Attach screenshots from the suspend/cycle_resolution_after_suspend test to the results submission. _summary: Attach screenshots from the suspend/cycle_resolution_after_suspend test to the results submission. command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: attachment category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_xrandr_screens_after_suspend.tar.gz depends: suspend/`echo ${index}`_cycle_resolutions_after_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` command: [ -f $PLAINBOX_SESSION_SHARE/`echo ${index}`_xrandr_screens_after_suspend.tgz ] && base64 $PLAINBOX_SESSION_SHARE/`echo ${index}`_xrandr_screens_after_suspend.tgz _description: This attaches screenshots from the suspend/cycle_resolutions_after_suspend test to the results submission. EOF plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/record_playback_after_suspend estimated_duration: 10.0 depends: suspend/suspend_advanced requires: package.name == 'python3-gi' package.name == 'gir1.2-gstreamer-1.0' package.name == 'libgstreamer1.0-0' package.name == 'gstreamer1.0-plugins-good' package.name == 'gstreamer1.0-pulseaudio' package.name == 'alsa-base' device.category == 'AUDIO' command: audio_test _description: This will check to make sure that your audio device works properly after a suspend and resume. This may work fine with speakers and onboard microphone, however, it works best if used with a cable connecting the audio-out jack to the audio-in jack. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/record_playback_after_suspend_auto estimated_duration: 10.0 depends: suspend/suspend_advanced_auto requires: package.name == 'python3-gi' package.name == 'gir1.2-gstreamer-1.0' package.name == 'libgstreamer1.0-0' package.name == 'gstreamer1.0-plugins-good' package.name == 'gstreamer1.0-pulseaudio' package.name == 'alsa-base' device.category == 'AUDIO' command: audio_test _description: This will check to make sure that your audio device works properly after a suspend and resume. This may work fine with speakers and onboard microphone, however, it works best if used with a cable connecting the audio-out jack to the audio-in jack. plugin: attachment category_id: 2013.com.canonical.plainbox::suspend id: suspend/suspend-auto-single-log-attach command: [ -e $PLAINBOX_SESSION_SHARE/suspend_auto_single_log ] && cat $PLAINBOX_SESSION_SHARE/suspend_auto_single_log _description: Attaches the log from the single suspend/resume test to the results plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/screenshot_after_suspend estimated_duration: 10.0 depends: suspend/suspend_advanced_auto requires: package.name == 'fswebcam' command: set -o pipefail; camera_test still --device=/dev/external_webcam -f ${PLAINBOX_SESSION_SHARE}/screenshot_after_suspend.jpg -q 2>&1 | ansi_parser _description: PURPOSE: Take a screengrab of the current screen after suspend (logged on Unity desktop) STEPS: 1. Take picture using USB webcam VERIFICATION: Review attachment manually later plugin: attachment category_id: 2013.com.canonical.plainbox::suspend id: screenshot_after_suspend.jpg depends: suspend/screenshot_after_suspend command: base64 ${PLAINBOX_SESSION_SHARE}/screenshot_after_suspend.jpg _description: Attaches the screenshot captured in graphics/screenshot. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/gpu_lockup_after_suspend estimated_duration: 10.0 requires: package.name == 'wmctrl' package.name == 'mesa-utils' package.name == 'firefox' depends: suspend/suspend_advanced_auto command: gpu_test _description: PURPOSE: Do some challenging operations then check for lockup on the GPU STEPS: 1. Create 2 glxgears windows and move them quickly 2. Switch workspaces with wmctrl 3. Launch an HTML5 video playback in firefox VERIFICATION: After a 60s workload, check kern.log for reported GPU errors plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wifi_resume_time depends: suspend/suspend_advanced requires: device.category == 'WIRELESS' command: network_reconnect_resume_test -t 90 -d wifi estimated_duration: 0.530 _description: Checks the length of time it takes to reconnect an existing wifi connection after a suspend/resume cycle. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/wifi_resume_time_auto estimated_duration: 1.2 depends: suspend/suspend_advanced_auto requires: device.category == 'WIRELESS' command: network_reconnect_resume_test -t 90 -d wifi _description: Checks the length of time it takes to reconnect an existing wifi connection after a suspend/resume cycle. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/network_resume_time depends: suspend/suspend_advanced estimated_duration: 1.2 requires: device.category == 'NETWORK' command: network_reconnect_resume_test -t 10 -d wired _description: Checks the length of time it takes to reconnect an existing wired connection after a suspend/resume cycle. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/network_resume_time_auto depends: suspend/suspend_advanced_auto estimated_duration: 1.2 requires: device.category == 'NETWORK' command: network_reconnect_resume_test -t 10 -d wired _description: Checks the length of time it takes to reconnect an existing wired connection after a suspend/resume cycle. plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/power depends: suspend/suspend_advanced estimated_duration: 120.0 _description: PURPOSE: Validate that the power LED operated the same after resuming from suspend STEPS: 1. Power LED should be on while device is switched on VERIFICATION: Does the power LED remain on after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/battery-charging estimated_duration: 120.0 depends: suspend/suspend_advanced _description: PURPOSE: Validate that the battery light shows charging status after resuming from suspend STEPS: 1. Let system run on battery for a while 2. Plug in AC plug VERIFICATION: Did the battery indicator LED still turn orange after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/battery-charged depends: suspend/suspend_advanced estimated_duration: 120.0 _description: PURPOSE: Validate that the battery LED properly displays charged status after resuming from suspend STEPS: 1. Let system run on battery for a short time 2. Plug in AC 3. Let system run on AC VERIFICATION: Does the orange battery LED still shut off when system is fully charged after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/battery-low depends: suspend/suspend_advanced estimated_duration: 120.0 _description: PURPOSE: Validate that the battery LED indicated low power after resuming from suspend STEPS: 1. Let system run on battery for several hours 2. Monitor battery LED carefully VERIFICATION: Does the LED light orange when battery is low after resuming from suspend? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/hdd depends: suspend/suspend_advanced estimated_duration: 120.0 command: led_hdd_test _description: PURPOSE: Validate that the HDD LED still operates as expected after resuming from suspend STEPS: 1. Select "Test" to write and read a temporary file for a few seconds 2. HDD LED should blink when writing to/reading from HDD VERIFICATION: Did the HDD LED still blink with HDD activity after resuming from suspend? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/numeric-keypad estimated_duration: 120.0 depends: suspend/suspend_advanced command: keyboard_test _description: PURPOSE: Validate that the numeric keypad LED operates the same before and after resuming from suspend STEPS: 1. Press "Block Num" key to toggle numeric keypad LED 2. Click on the "Test" button to open a window to verify your typing 3. Type using the numeric keypad both when the LED is on and off VERIFICATION: 1. Numeric keypad LED status should toggle everytime the "Block Num" key is pressed 2. Numbers should only be entered in the keyboard verification window when the LED is on plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/caps-lock depends: suspend/suspend_advanced estimated_duration: 120.0 _description: PURPOSE: Validate that the Caps Lock key operates the same before and after resuming from suspend STEPS: 1. Press "Block Cap Keys" to activate/deactivate cap keys blocking 2. Cap Keys LED should be switched on/off every time the key is pressed VERIFICATION: Did the Cap Keys LED light as expected after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/wlan depends: suspend/suspend_advanced estimated_duration: 120.0 _description: PURPOSE: WLAN LED verification after resuming from suspend STEPS: 1. Make sure WLAN connection is established 2. WLAN LED should light VERIFICATION: Did the WLAN LED light as expected after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/wlan-disabled depends: suspend/suspend_advanced estimated_duration: 120.0 _description: PURPOSE: Validate that WLAN LED shuts off when disabled after resuming from suspend STEPS: 1. Connect to AP 2. Use Physical switch to disable WLAN 3. Re-enable 4. Use Network-Manager to disable WLAN VERIFICATION: Did the LED turn off then WLAN is disabled after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/bluetooth depends: suspend/suspend_advanced estimated_duration: 120.0 _description: PURPOSE: Validate that the Bluetooth LED turns on and off when BT is enabled/disabled after resuming from suspend STEPS: 1. Switch bluetooth off from a hardware switch (if present) 2. Switch bluetooth back on 3. Switch bluetooth off from the panel applet 4. Switch bluetooth back on VERIFICATION: Did the bluetooth LED turn off and on twice after resuming from suspend? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/camera estimated_duration: 120.0 depends: camera/detect suspend/suspend_advanced command: camera_test led _description: PURPOSE: Validate that the camera LED still works as expected after resuming from suspend STEPS: 1. Select Test to activate camera 2. Camera LED should light for a few seconds VERIFICATION: Did the camera LED still turn on and off after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/touchpad depends: suspend/suspend_advanced estimated_duration: 120.0 _description: PURPOSE: Touchpad LED verification after resuming from suspend STEPS: 1. Click on the touchpad button or press key combination to enable/disable touchpad button 2. Slide your finger on the touchpad VERIFICATION: 1. Touchpad LED status should toggle everytime the button is clicked or the key combination is pressed 2. When the LED is on, the mouse pointer should move on touchpad usage 3. When the LED is off, the mouse pointer should not move on touchpad usage plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/led_after_suspend/wireless depends: suspend/suspend_advanced estimated_duration: 120.0 _description: PURPOSE: Validate Wireless (WLAN + Bluetooth) LED operated the same after resuming from suspend STEPS: 1. Make sure WLAN connection is established and Bluetooth is enabled. 2. WLAN/Bluetooth LED should light 3. Switch WLAN and Bluetooth off from a hardware switch (if present) 4. Switch them back on 5. Switch WLAN and Bluetooth off from the panel applet 6. Switch them back on VERIFICATION: Did the WLAN/Bluetooth LED light as expected after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/brightness depends: suspend/suspend_advanced estimated_duration: 120.0 requires: dmi.product in ['Notebook','Laptop','Portable','All In One','All-In-One','AIO'] _description: PURPOSE: This test will test the brightness key after resuming from suspend STEPS: 1. Press the brightness buttons on the keyboard VERIFICATION: Did the brightness change following to your key presses after resuming from suspend? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/volume depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'KEYBOARD' user: root command: key_test -s '0xe02e,0xe0ae:Volume Up' '0xe030,0xe0b0:Volume Down' _description: PURPOSE: This test will test the volume keys of your keyboard after resuming from suspend STEPS: Skip this test if your computer has no volume keys. 1. Click test to open a window on which to test the volume keys. 2. If all the keys work, the test will be marked as passed. VERIFICATION: Did the volume change following to your key presses? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/mute depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'KEYBOARD' user: root command: key_test -s '0xe020,0xe0a0:Mute' _description: PURPOSE: This test will test the mute key of your keyboard after resuming from suspend STEPS: 1. Click test to open a window on which to test the mute key. 2. If the key works, the test will pass and the window will close. VERIFICATION: Did the volume mute following your key presses? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/sleep depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'KEYBOARD' _description: PURPOSE: This test will test the sleep key after resuming from suspend STEPS: 1. Press the sleep key on the keyboard 2. Wake your system up by pressing the power button VERIFICATION: Did the system go to sleep after pressing the sleep key after resuming from suspend? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/battery-info depends: suspend/suspend_advanced estimated_duration: 120.0 requires: dmi.product in ['Notebook','Laptop','Portable'] user: root command: key_test -s '0xe071,0xef1:Battery Info' _description: PURPOSE: This test will test the battery information key after resuming from suspend STEPS: Skip this test if you do not have a Battery Button. 1. Click Test to begin 2. Press the Battery Info button (or combo like Fn+F3) 3: Close the Power Statistics tool if it opens VERIFICATION: Did the Battery Info key work as expected after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/wireless depends: suspend/suspend_advanced estimated_duration: 120.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: This test will test the wireless key after resuming from suspend STEPS: 1. Press the wireless key on the keyboard 2. Press the same key again VERIFICATION: Did the wireless go off on the first press and on again on the second after resuming from suspend? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/media-control estimated_duration: 120.0 depends: suspend/suspend_advanced requires: device.category == 'KEYBOARD' user: root command: key_test -s 0xe010,0xe090:Previous 0xe024,0xe0a4:Stop 0xe019,0xe099:Next 0xe022,0xe0a2:Play _description: PURPOSE: This test will test the media keys of your keyboard after resuming from suspend STEPS: Skip this test if your computer has no media keys. 1. Click test to open a window on which to test the media keys. 2. If all the keys work, the test will be marked as passed. VERIFICATION: Do the keys work as expected after resuming from suspend? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/super depends: suspend/suspend_advanced estimated_duration: 120.0 requires: device.category == 'KEYBOARD' user: root command: key_test -s '0xe05b,0xe0db:Left Super Key' _description: PURPOSE: This test will test the super key of your keyboard after resuming from suspend STEPS: 1. Click test to open a window on which to test the super key. 2. If the key works, the test will pass and the window will close. VERIFICATION: Does the super key work as expected after resuming from suspend? plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/video-out depends: suspend/suspend_advanced estimated_duration: 120.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: Validate that the External Video hot key is working as expected after resuming from suspend STEPS: 1. Plug in an external monitor 2. Press the display hot key to change the monitors configuration VERIFICATION: Check that the video signal can be mirrored, extended, displayed on external or onboard only, after resuming from suspend. plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/keys_after_suspend/touchpad depends: suspend/suspend_advanced estimated_duration: 120.0 requires: dmi.product in ['Notebook','Laptop','Portable'] _description: PURPOSE: Verify touchpad hotkey toggles touchpad functionality on and off after resuming from suspend STEPS: 1. Verify the touchpad is functional 2. Tap the touchpad toggle hotkey 3. Tap the touchpad toggle hotkey again VERIFICATION: Verify the touchpad has been disabled and re-enabled. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb_insert_after_suspend estimated_duration: 30.0 depends: suspend/suspend_advanced command: removable_storage_watcher insert usb _description: PURPOSE: This test will check that the system correctly detects the insertion of a USB storage device after suspend and resume. STEPS: 1. Click "Test" and insert a USB storage device (pen-drive/HDD). (Note: this test will time-out after 20 seconds.) 2. Do not unplug the device after the test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb3_insert_after_suspend estimated_duration: 30.0 requires: usb.usb3 == 'supported' depends: suspend/suspend_advanced command: removable_storage_watcher -m 500000000 insert usb _description: PURPOSE: This test will check that the system correctly detects the insertion of a USB 3.0 storage device after suspend and resume. STEPS: 1. Click "Test" and insert a USB 3.0 storage device (pen-drive/HDD) in a USB 3.0 port. (Note: this test will time-out after 20 seconds.) 2. Do not unplug the device after the test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb_remove_after_suspend estimated_duration: 30.0 depends: suspend/usb_insert_after_suspend command: removable_storage_watcher remove usb _description: PURPOSE: This test will check that the system correctly detects the removal of a USB storage device after suspend. STEPS: 1. Click "Test" and remove the USB device. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb3_remove_after_suspend estimated_duration: 30.0 depends: suspend/usb3_insert_after_suspend requires: usb.usb3 == 'supported' command: removable_storage_watcher -m 500000000 remove usb _description: PURPOSE: This test will check that the system correctly detects the removal of a USB 3.0 storage device after suspend STEPS: 1. Click "Test" and remove the USB 3.0 device. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb_storage_automated_after_suspend estimated_duration: 1.2 depends: suspend/usb_insert_after_suspend user: root command: removable_storage_test -s 268400000 usb _description: This test is automated and executes after the suspend/usb_insert_after_suspend test is run. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb3_storage_automated_after_suspend estimated_duration: 1.2 requires: usb.usb3 == 'supported' depends: suspend/usb3_insert_after_suspend user: root command: removable_storage_test -s 268400000 -m 500000000 usb --driver xhci_hcd _description: This test is automated and executes after the suspend/usb3_insert_after_suspend test is run. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb_storage_preinserted_after_suspend estimated_duration: 1.2 user: root depends: suspend/suspend_advanced_auto command: removable_storage_test -l usb && removable_storage_test -s 268400000 usb _description: This is an automated version of usb/storage-automated and assumes that the server has usb storage devices plugged in prior to checkbox execution. It is intended for servers and SRU automated testing. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb3_storage_preinserted_after_suspend estimated_duration: 1.2 user: root requires: usb.usb3 == 'supported' depends: suspend/suspend_advanced_auto command: removable_storage_test -l usb && removable_storage_test -s 268400000 -m 500000000 usb --driver xhci_hcd _description: This is an automated version of usb3/storage-automated and assumes that the server has usb 3.0 storage devices plugged in prior to checkbox execution. It is intended for servers and SRU automated testing. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb_performance_after_suspend depends: suspend/usb_insert_after_suspend user: root estimated_duration: 45.00 command: removable_storage_test -s 268400000 -p 15 usb _description: This test will check that your USB 2.0 port transfers data at a minimum expected speed. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/usb3_superspeed_performance_after_suspend requires: usb.usb3 == 'supported' depends: suspend/usb3_insert_after_suspend user: root estimated_duration: 45.00 command: removable_storage_test -s 268400000 -m 500000000 usb --driver xhci_hcd _description: This test will check that your USB 3.0 port could be recognized as SuperSpeed USB device using xhci_hcd driver and transfers data correctly. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/mmc-insert-after-suspend estimated_duration: 30.0 depends: suspend/suspend_advanced command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of an MMC card after the system has been suspended STEPS: 1. Click "Test" and insert an MMC card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/mmc-storage-after-suspend depends: suspend/mmc-insert-after-suspend estimated_duration: 10.0 user: root command: removable_storage_test -s 67120000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/mmc-insert-after-suspend test is run. It tests reading and writing to the MMC card after the system has been suspended. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/mmc-remove-after-suspend depends: suspend/mmc-insert-after-suspend estimated_duration: 30.0 command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of an MMC card from the systems card reader after the system has been suspended. STEPS: 1. Click "Test" and remove the MMC card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/sd-insert-after-suspend estimated_duration: 30.0 depends: suspend/suspend_advanced command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of an UNLOCKED SD card after the system has been suspended STEPS: 1. Click "Test" and insert an UNLOCKED SD card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/sd-storage-after-suspend estimated_duration: 10.0 depends: suspend/sd-insert-after-suspend user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/sd-insert-after-suspend test is run. It tests reading and writing to the SD card after the system has been suspended. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/sd-remove-after-suspend estimated_duration: 30.0 depends: suspend/sd-insert-after-suspend command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of an SD card from the systems card reader after the system has been suspended. STEPS: 1. Click "Test" and remove the SD card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/sdhc-insert-after-suspend estimated_duration: 30.0 depends: suspend/suspend_advanced command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of an UNLOCKED SDHC media card after the system has been suspended STEPS: 1. Click "Test" and insert an UNLOCKED SDHC card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/sdhc-storage-after-suspend estimated_duration: 10.0 depends: suspend/sdhc-insert-after-suspend user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/sdhc-insert-after-suspend test is run. It tests reading and writing to the SDHC card after the system has been suspended. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: suspend/sdhc-remove-after-suspend estimated_duration: 30.0 depends: suspend/sdhc-insert-after-suspend command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of an SDHC card from the systems card reader after the system has been suspended. STEPS: 1. Click "Test" and remove the SDHC card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/cf-insert-after-suspend estimated_duration: 30.0 depends: suspend/suspend_advanced command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a CF card after the system has been suspended STEPS: 1. Click "Test" and insert a CF card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: mediacard/cf-storage-after-suspend estimated_duration: 10.0 depends: mediacard/cf-insert-after-suspend user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/cf-insert-after-suspend test is run. It tests reading and writing to the CF card after the system has been suspended. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/cf-remove-after-suspend estimated_duration: 30.0 depends: mediacard/cf-insert-after-suspend command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a CF card from the systems card reader after the system has been suspended. STEPS: 1. Click "Test" and remove the CF card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/sdxc-insert-after-suspend estimated_duration: 30.0 depends: suspend/suspend_advanced command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a SDXC card after the system has been suspended STEPS: 1. Click "Test" and insert a SDXC card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: mediacard/sdxc-storage-after-suspend estimated_duration: 10.0 depends: mediacard/sdxc-insert-after-suspend user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/sdxc-insert-after-suspend test is run. It tests reading and writing to the SDXC card after the system has been suspended. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/sdxc-remove-after-suspend depends: mediacard/sdxc-insert-after-suspend estimated_duration: 30.0 command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a SDXC card from the systems card reader after the system has been suspended. STEPS: 1. Click "Test" and remove the SDXC card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/ms-insert-after-suspend estimated_duration: 30.0 depends: suspend/suspend_advanced command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a MS card after the system has been suspended STEPS: 1. Click "Test" and insert a MS card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: mediacard/ms-storage-after-suspend estimated_duration: 10.0 depends: mediacard/ms-insert-after-suspend user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/ms-insert-after-suspend test is run. It tests reading and writing to the MS card after the system has been suspended. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/ms-remove-after-suspend estimated_duration: 30.0 depends: mediacard/ms-insert-after-suspend command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a MS card from the systems card reader after the system has been suspended. STEPS: 1. Click "Test" and remove the MS card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/msp-insert-after-suspend estimated_duration: 30.0 depends: suspend/suspend_advanced command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a MSP card after the system has been suspended STEPS: 1. Click "Test" and insert a MSP card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: mediacard/msp-storage-after-suspend estimated_duration: 10.0 depends: mediacard/msp-insert-after-suspend user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/msp-insert-after-suspend test is run. It tests reading and writing to the MSP card after the system has been suspended. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/msp-remove-after-suspend estimated_duration: 30.0 depends: mediacard/msp-insert-after-suspend command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a MSP card from the systems card reader after the system has been suspended. STEPS: 1. Click "Test" and remove the MSP card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/xd-insert-after-suspend estimated_duration: 30.0 depends: suspend/suspend_advanced command: removable_storage_watcher --memorycard insert sdio usb scsi _description: PURPOSE: This test will check that the systems media card reader can detect the insertion of a xD card after the system has been suspended STEPS: 1. Click "Test" and insert a xD card into the reader. If a file browser opens up, you can safely close it. (Note: this test will time-out after 20 seconds.) 2. Do not remove the device after this test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: mediacard/xd-storage-after-suspend estimated_duration: 10.0 depends: mediacard/xd-insert-after-suspend user: root command: removable_storage_test -s 268400000 --memorycard sdio usb scsi _description: This test is automated and executes after the mediacard/xd-insert-after-suspend test is run. It tests reading and writing to the xD card after the system has been suspended. plugin: user-interact category_id: 2013.com.canonical.plainbox::suspend id: mediacard/xd-remove-after-suspend estimated_duration: 30.0 depends: mediacard/xd-insert-after-suspend command: removable_storage_watcher --memorycard remove sdio usb scsi _description: PURPOSE: This test will check that the system correctly detects the removal of a xD card from the systems card reader after the system has been suspended. STEPS: 1. Click "Test" and remove the xD card from the reader. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: touchpad/touchpad_after_suspend depends: suspend/suspend_advanced_auto requires: dmi.product in ['Notebook','Laptop','Portable'] xinput.device_class == 'XITouchClass' and xinput.touch_mode != 'dependent' command: true estimated_duration: 1.2 _description: Determine if the touchpad is still functioning after suspend/resume. plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: touchscreen/touchscreen_after_suspend imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_touchscreen == 'True' depends: suspend/suspend_advanced_auto estimated_duration: 30.0 _description: PURPOSE: Check touchscreen tap recognition STEPS: 1. Tap an object on the screen with finger. The cursor should jump to location tapped and object should highlight VERIFICATION: Does tap recognition work? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: camera/display_after_suspend estimated_duration: 120.0 depends: suspend/suspend_advanced requires: device.category == 'CAPTURE' command: camera_test display _description: PURPOSE: This test will check that the built-in camera works after suspend STEPS: 1. Click on Test to display a video capture from the camera for ten seconds. VERIFICATION: Did you see the video capture? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: camera/still_after_suspend estimated_duration: 120.0 depends: camera/display_after_suspend requires: package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'eog' package.name == 'fswebcam' or package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' device.category == 'CAPTURE' command: camera_test still _description: PURPOSE: This test will check that the built-in camera works after suspend STEPS: 1. Click on Test to display a still image from the camera for ten seconds. VERIFICATION: Did you see the image? plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: camera/multiple_resolution_after_suspend estimated_duration: 1.2 depends: camera/still_after_suspend requires: package.name == 'fswebcam' or package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' device.category == 'CAPTURE' command: camera_test resolutions _description: Takes multiple pictures based on the resolutions supported by the camera and validates their size and that they are of a valid format after suspend plugin: local _summary: Pointing device tests after suspend. id: suspend/pointing-after-suspend requires: device.category == 'MOUSE' or device.category == 'TOUCHPAD' or device.category == 'TOUCHSCREEN' _description: Pointing device tests after suspend. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=MOUSE" -w "category=TOUCHPAD" -w "category=TOUCHSCREEN"' plugin: manual category_id: 2013.com.canonical.plainbox::suspend id: suspend/pointing-after-suspend_`echo "${product}_${category}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'`_`basename $path` depends: suspend/suspend_advanced requires: device.path == "$path" description: PURPOSE: This will test your $product device after suspend. STEPS: 1. Move the cursor with your $product. VERIFICATION: Did the cursor move? EOF plugin: local _summary: Create click tests for pointing devices after suspend. id: suspend/clicking-after-suspend estimated_duration: 1.0 requires: device.category == 'MOUSE' or device.category == 'TOUCHPAD' _description: Click tests for pointing devices after suspend. command: cat <<'EOF' | run_templates -t -s 'udev_resource | filter_templates -w "category=MOUSE" -w "category=TOUCHPAD"' plugin: manual category_id: 2013.com.canonical.plainbox::suspend estimated_duration: 30.0 id: suspend/clicking-after-suspend_`echo "${product}_${category}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'`_`basename $path` depends: suspend/suspend_advanced requires: device.path == "$path" _summary: Check post suspend button functionality for $product _description: PURPOSE: This will test the buttons of your $product device after suspend STEPS: 1. Click the left button with your $product. 2. Click the right button with your $product. 3. Click the middle button with your $product (if available). 4. Double-click the left button with your $product. VERIFICATION: Did these buttons work as expected? EOF id: suspend/generator_compiz_check_after_suspend requires: device.category == 'VIDEO' _description: Compiz support tests after suspend _summary: Compiz support tests after suspend plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_compiz_check_after_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'nux-tools' command: ! /usr/lib/nux/unity_support_test -c -p 2>&1 | ansi_parser | grep -e ":\(\s\+\)no$" -ie "error" estimated_duration: 0.130 _description: Check that $product hardware is able to run compiz after suspend _summary: Test Compiz support for $product after suspend EOF plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/compiz_check_after_suspend depends: suspend/suspend_advanced requires: package.name == 'nux-tools' command: ! /usr/lib/nux/unity_support_test -c -p 2>&1 | ansi_parser | grep -e ":\(\s\+\)no$" -ie "error" estimated_duration: 0.130 _description: Check that the hardware is able to run compiz after suspend _summary: Test Compiz support after suspend id: suspend/generator_glxgears_after_suspend requires: device.category == 'VIDEO' _description: glxgears tests after suspend _summary: glxgears tests after suspend plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_glxgears_after_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: package.name == 'mesa-utils' command: glxgears; true _summary: Test that glxgears works for $product after suspend _description: PURPOSE: This test tests the basic 3D capabilities of your $product video card after suspend STEPS: 1. Click "Test" to execute an OpenGL demo. Press ESC at any time to close. 2. Verify that the animation is not jerky or slow. VERIFICATION: 1. Did the 3d animation appear? 2. Was the animation free from slowness/jerkiness? EOF plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend id: suspend/glxgears_after_suspend depends: suspend/suspend_advanced requires: package.name == 'mesa-utils' device.category == 'VIDEO' command: glxgears; true _summary: Test that glxgears works after suspend _description: PURPOSE: This test tests the basic 3D capabilities of your $product video card after suspend STEPS: 1. Click "Test" to execute an OpenGL demo. Press ESC at any time to close. 2. Verify that the animation is not jerky or slow. VERIFICATION: 1. Did the 3d animation appear? 2. Was the animation free from slowness/jerkiness? id: suspend/generator_video_after_suspend requires: device.category == 'VIDEO' _description: Display video test after suspend _summary: Display video test after suspend plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: suspend/`echo ${index}`_video_after_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend requires: package.name == 'xorg' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' command: gst_pipeline_test -t 2 'videotestsrc ! videoconvert ! autovideosink' || gst_pipeline_test -t 2 'videotestsrc ! ffmpegcolorspace ! autovideosink' _summary: Test that video can be displayed after suspend with ${product} _description: PURPOSE: This test will test the default display after suspend with a sample video STEPS: 1. Click "Test" to display a video test. VERIFICATION: Do you see color bars and static? EOF id: suspend/video_after_suspend plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::suspend depends: suspend/suspend_advanced requires: device.category == 'VIDEO' package.name == 'xorg' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' command: gst_pipeline_test -t 2 'videotestsrc ! videoconvert ! autovideosink' || gst_pipeline_test -t 2 'videotestsrc ! ffmpegcolorspace ! autovideosink' _summary: Test that video can be displayed after suspend _description: PURPOSE: This test will test the default display after suspend with a sample video STEPS: 1. Click "Test" to display a video test. VERIFICATION: Do you see color bars and static? id: suspend/generator_driver_version_after_suspend requires: device.category == 'VIDEO' _description: Driver version tests after suspend _summary: Driver version tests after suspend plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: shell category_id: 2013.com.canonical.plainbox::suspend id: suspend/`echo ${index}`_driver_version_after_suspend_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: suspend/`echo ${index}`_suspend_after_switch_to_card_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` command: graphics_driver estimated_duration: 0.500 _description: Parses Xorg.0.Log and discovers the running X driver and version after suspend for the $product graphics card _summary: Test X driver/version after suspend for $product EOF id: suspend/driver_version_after_suspend requires: device.category == 'VIDEO' depends: suspend/suspend_advanced plugin: shell category_id: 2013.com.canonical.plainbox::suspend command: graphics_driver estimated_duration: 0.500 _description: Parses Xorg.0.Log and discovers the running X driver and version after suspend _summary: Test X driver/version after suspend id: suspend/oops_after_suspend depends: suspend/suspend_advanced plugin:shell estimated_duration: 10.0 requires: package.name == 'fwts' user: root _description: Run Firmware Test Suite (fwts) oops tests after suspend. environ: PLAINBOX_SESSION_SHARE command: fwts_test -l $PLAINBOX_SESSION_SHARE/fwts_oops_results_after_s3.log -t oops id: suspend/oops_results_after_suspend.log plugin: attachment category_id: 2013.com.canonical.plainbox::suspend estimated_duration: 0.5 command: [ -e ${PLAINBOX_SESSION_SHARE}/fwts_oops_results_after_s3.log ] && cat ${PLAINBOX_SESSION_SHARE}/fwts_oops_results_after_s3.log _description: Attaches the FWTS oops results log to the submission after suspend plainbox-provider-checkbox-0.25/jobs/hibernate.txt.in0000664000175000017500000000754112646152433024147 0ustar sylvainsylvain00000000000000plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::hibernate id: power-management/hibernate_advanced requires: sleep.disk == 'supported' rtc.state == 'supported' environ: PLAINBOX_SESSION_SHARE user: root command: if type -P fwts >/dev/null; then echo "Calling fwts" fwts_test -l $PLAINBOX_SESSION_SHARE/hibernate-single -f none -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120 else echo "Calling sleep_test" sleep_test -s disk -w 120 fi estimated_duration: 300.00 _description: PURPOSE: This test will check to make sure your system can successfully hibernate (if supported) STEPS: 1. Click on Test 2. The system will hibernate and should wake itself within 5 minutes 3. If your system does not wake itself after 5 minutes, please press the power button to wake the system manually 4. If the system fails to resume from hibernate, please restart System Testing and mark this test as Failed VERIFICATION: Did the system successfully hibernate and did it work properly after waking up? id: power-management/generator_hibernate_advanced requires: sleep.disk == 'supported' rtc.state == 'supported' _description: Hibernate test _summary: Hibernate test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::hibernate id: power-management/`echo ${index}`_hibernate_advanced_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` user: root environ: PLAINBOX_SESSION_SHARE estimated_duration: 300.00 command: if type -P fwts >/dev/null; then echo "Calling fwts" fwts_test -l $PLAINBOX_SESSION_SHARE/`echo ${index}`_hibernate-single -f none -s s4 --s4-device-check --s4-device-check-delay=45 --s4-sleep-delay=120 else echo "Calling sleep_test" sleep_test -s disk -w 120 fi _description: PURPOSE: This test will check to make sure your system can successfully hibernate (if supported) STEPS: 1. Click on Test 2. The system will hibernate and should wake itself within 5 minutes 3. If your system does not wake itself after 5 minutes, please press the power button to wake the system manually 4. If the system fails to resume from hibernate, please restart System Testing and mark this test as Failed VERIFICATION: Did the system successfully hibernate and did it work properly after waking up? EOF plugin: shell category_id: 2013.com.canonical.plainbox::hibernate id: power-management/hibernate-single-log-check command: [ -e $PLAINBOX_SESSION_SHARE/hibernate-single.log ] && sleep_test_log_check -v s4 $PLAINBOX_SESSION_SHARE/hibernate-single.log _description: Automated check of the hibernate log for errors discovered by fwts plugin: attachment category_id: 2013.com.canonical.plainbox::hibernate id: power-management/hibernate-single-log-attach depends: power-management/hibernate_advanced command: [ -e $PLAINBOX_SESSION_SHARE/hibernate-single.log ] && cat $PLAINBOX_SESSION_SHARE/hibernate-single.log estimated_duration: 0.5 _description: attaches log from single hibernate/resume test to results id: power-management/generator_hibernate-single-log-attach _description: Hibernate log attach _summary: Hibernate log attach plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' plugin: attachment category_id: 2013.com.canonical.plainbox::hibernate id: power-management/`echo ${index}`_hibernate-single-log-attach_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` depends: power-management/`echo ${index}`_hibernate_advanced_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` estimated_duration: 0.5 command: [ -e $PLAINBOX_SESSION_SHARE/`echo ${index}`_hibernate-single.log ] && cat $PLAINBOX_SESSION_SHARE/`echo ${index}`_hibernate-single.log _description: attaches log from single hibernate/resume test to results EOF plainbox-provider-checkbox-0.25/jobs/esata.txt.in0000664000175000017500000000265512646152433023304 0ustar sylvainsylvain00000000000000plugin: user-interact category_id: 2013.com.canonical.plainbox::esata id: esata/insert command: removable_storage_watcher insert ata_serial_esata _description: PURPOSE: This test will check the system can detect the insertion of an eSATA HDD STEPS: 1. Click 'Test' to begin the test. This test will timeout and fail if the insertion has not been detected within 20 seconds. 2. Plug an eSATA HDD into an available eSATA port. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result plugin: shell category_id: 2013.com.canonical.plainbox::esata id: esata/storage-test user: root depends: esata/insert command: removable_storage_test -s 268400000 ata_serial_esata _description: This is an automated test which performs read/write operations on an attached eSATA HDD plugin: user-interact category_id: 2013.com.canonical.plainbox::esata id: esata/remove depends: esata/insert command: removable_storage_watcher remove ata_serial_esata _description: PURPOSE: This test will check the system can detect the removal of an eSATA HDD STEPS: 1. Click 'Test' to begin the test. This test will timeout and fail if the removal has not been detected within 20 seconds. 2. Remove the previously attached eSATA HDD from the eSATA port. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result plainbox-provider-checkbox-0.25/jobs/usb.txt.in0000664000175000017500000001577312646152433023005 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::usb id: usb/detect estimated_duration: 1.0 command: set -o pipefail; lsusb 2>/dev/null | sed 's/.*\(ID .*\)/\1/' | head -n 4 || echo "No USB devices were detected" >&2 _description: Detects and shows USB devices attached to this system. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::usb id: usb/disk_detect depends: usb/detect estimated_duration: 1.0 command: removable_storage_test -l usb _description: PURPOSE: This test will check that your system detects USB storage devices. STEPS: 1. Plug in one or more USB keys or hard drives. 2. Click on "Test". VERIFICATION: Were the drives detected? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::usb id: usb/HID depends: usb/detect estimated_duration: 1.0 command: keyboard_test _description: PURPOSE: This test will check that you can use a USB HID device STEPS: 1. Enable either a USB mouse or keyboard 2. For mice, perform actions such as moving the pointer, right and left button clicks and double clicks 3. For keyboards, commence the test to launch a small tool. Type some text and close the tool. VERIFICATION: Did the device work as expected? plugin: user-interact category_id: 2013.com.canonical.plainbox::usb id: usb/insert depends: usb/detect estimated_duration: 10.0 command: removable_storage_watcher insert usb _description: PURPOSE: This test will check that the system correctly detects the insertion of a USB storage device STEPS: 1. Click "Test" and insert a USB storage device (Note: this test will time-out after 20 seconds.) 2. Do not unplug the device after the test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::usb id: usb3/insert requires: usb.usb3 == 'supported' estimated_duration: 10.0 command: removable_storage_watcher -m 500000000 insert usb _description: PURPOSE: This test will check that the system correctly detects the insertion of a USB 3.0 storage device STEPS: 1. Click "Test" and insert a USB 3.0 storage device in a USB 3.0 port. (Note: this test will time-out after 20 seconds.) 2. Do not unplug the device after the test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::usb id: usb/remove depends: usb/insert estimated_duration: 10.0 command: removable_storage_watcher remove usb _description: PURPOSE: This test will check that the system correctly detects the removal of a USB storage device STEPS: 1. Click "Test" and remove the USB device. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact category_id: 2013.com.canonical.plainbox::usb id: usb3/remove depends: usb3/insert requires: usb.usb3 == 'supported' estimated_duration: 10.0 command: removable_storage_watcher -m 500000000 remove usb _description: PURPOSE: This test will check that the system correctly detects the removal of a USB 3.0 storage device STEPS: 1. Click "Test" and remove the USB 3.0 device. (Note: this test will time-out after 20 seconds.) VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::usb id: usb/storage-transfer depends: usb/insert user: root estimated_duration: 45.0 command: removable_storage_test -s 268400000 usb _description: PURPOSE: This test will check your USB connection. STEPS: 1. Plug a USB HDD or thumbdrive into the computer. 2. An icon should appear on the Launcher. 3. Click "Test" to begin the test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::usb id: usb3/storage-transfer requires: usb.usb3 == 'supported' depends: usb3/insert user: root estimated_duration: 45.0 command: removable_storage_test -s 268400000 -m 500000000 usb _description: PURPOSE: This test will check your USB 3.0 connection. STEPS: 1. Plug a USB 3.0 HDD or thumbdrive into a USB 3.0 port in the computer. 2. An icon should appear on the Launcher. 3. Click "Test" to begin the test. VERIFICATION: The verification of this test is automated. Do not change the automatically selected result. plugin: shell category_id: 2013.com.canonical.plainbox::usb id: usb/storage-automated depends: usb/insert user: root estimated_duration: 45.0 command: removable_storage_test -s 268400000 usb _description: This test is automated and executes after the usb/insert test is run. plugin: shell category_id: 2013.com.canonical.plainbox::usb id: usb3/storage-automated requires: usb.usb3 == 'supported' depends: usb3/insert user: root estimated_duration: 45.0 command: removable_storage_test -s 268400000 -m 500000000 usb --driver xhci_hcd _description: This test is automated and executes after the usb3/insert test is run. plugin: shell category_id: 2013.com.canonical.plainbox::usb id: usb/storage-preinserted user: root estimated_duration: 45.0 command: removable_storage_test -l usb && removable_storage_test -s 268400000 usb _description: Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on randomly created data. It requires that a USB stick is plugged into an available USB port before running the certification suite. plugin: shell category_id: 2013.com.canonical.plainbox::usb id: usb3/storage-preinserted user: root requires: usb.usb3 == 'supported' estimated_duration: 45.0 command: removable_storage_test -l usb && removable_storage_test -s 268400000 -m 500000000 usb --driver xhci_hcd _description: Tests USB 3.0 ports on a system by doing write/read/compare tests on randomly created data. It requires that a USB stick is plugged into an available USB port before running the certification suite. Additionally, it will only work with USB sticks and ports rated for USB 3.0 speeds or faster. plugin: manual category_id: 2013.com.canonical.plainbox::usb id: usb/panels _description: PURPOSE: This test will check your USB connection. STEPS: 1. Connect a USB storage device to an external USB slot on this computer. 2. An icon should appear on the Launcher. 3. Confirm that the icon appears. 4. Eject the device. 5. Repeat with each external USB slot. VERIFICATION: Do all USB slots work with the device? plugin: shell category_id: 2013.com.canonical.plainbox::usb id: usb/performance depends: usb/insert user: root estimated_duration: 45.00 command: removable_storage_test -s 268400000 -p 15 usb _description: This test will check that your USB 2.0 port transfers data at a minimum expected speed. plainbox-provider-checkbox-0.25/jobs/touchpad.txt.in0000664000175000017500000001764612646152433024024 0ustar sylvainsylvain00000000000000plugin: manual category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/basic requires: dmi.product in ['Notebook','Laptop','Portable'] estimated_duration: 120.0 _description: PURPOSE: Touchpad manual verification STEPS: 1. Make sure that touchpad is enabled. 2. Move cursor using the touchpad. VERIFICATION: Did the cursor move? plugin: user-interact category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/horizontal requires: dmi.product in ['Notebook','Laptop','Portable'] 'Button Horiz Wheel Left' in xinput.button_labels and 'Button Horiz Wheel Right' in xinput.button_labels command: touchpad_test right left --edge-scroll estimated_duration: 120.0 _description: PURPOSE: Touchpad horizontal scroll verification STEPS: 1. Select "Test" when ready and place your cursor within the borders of the displayed test window. 2. Verify that you can move the horizontal slider by moving your finger right and left in the lower part of the touchpad. VERIFICATION: Could you scroll right and left? plugin: user-interact category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/vertical requires: dmi.product in ['Notebook','Laptop','Portable'] 'Button Wheel Up' in xinput.button_labels and 'Button Wheel Down' in xinput.button_labels command: touchpad_test up down --edge-scroll estimated_duration: 120.0 _description: PURPOSE: Touchpad vertical scroll verification STEPS: 1. Select "Test" when ready and place your cursor within the borders of the displayed test window. 2. Verify that you can move the vertical slider by moving your finger up and down in the right part of the touchpad. VERIFICATION: Could you scroll up and down? plugin: shell category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/singletouch-automated requires: dmi.product in ['Notebook','Laptop','Portable'] xinput.device_class == 'XITouchClass' and xinput.touch_mode != 'dependent' command: true estimated_duration: 1.2 _description: Determine whether the touchpad is detected as a singletouch device automatically. plugin: shell category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/multitouch-automated estimated_duration: 1.2 requires: dmi.product in ['Notebook','Laptop','Portable'] xinput.device_class == 'XITouchClass' and xinput.touch_mode == 'dependent' command: true _description: Determine whether the touchpad is detected as a multitouch device automatically. plugin: manual category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/multitouch-manual requires: dmi.product in ['Notebook','Laptop','Portable'] depends: touchpad/singletouch-automated estimated_duration: 120.0 _description: PURPOSE: Touchpad manual detection of multitouch. STEPS: 1. Look at the specifications for your system. VERIFICATION: Is the touchpad supposed to be multitouch? plugin: manual category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/singletouch-corner requires: dmi.product in ['Notebook','Laptop','Portable'] estimated_duration: 120.0 _description: PURPOSE: Determine that the hot corner feature is working as expected STEPS: 1. Launch a browser. 2. Go to a website, and hover the cursor over a link. 3. Tap the upper right corner on the touchpad. VERIFICATION: Did the tap trigger a new tab to be opened? plugin: manual category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/singletouch-selection requires: dmi.product in ['Notebook','Laptop','Portable'] estimated_duration: 120.0 _description: PURPOSE: Determine that the selection window function is working as expected. STEPS: 1. Open a file folder 2. Double tap and drag the cursor across several file. VERIFICATION: Did a selection window open and were several files selected? plugin: manual category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/multitouch-rightclick requires: dmi.product in ['Notebook','Laptop','Portable'] depends: touchpad/multitouch-automated estimated_duration: 120.0 _description: PURPOSE: Determine that the right click function is working as expected. STEPS: 1. Open a file folder 2. Hover cursor over file in folder 3. 2-touch tap. VERIFICATION: Did the right click pop up menu appear? plugin: user-interact category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/multitouch-horizontal requires: dmi.product in ['Notebook','Laptop','Portable'] command: touchpad_test right left estimated_duration: 120.0 _description: PURPOSE: Touchpad 2-touch horizontal scroll verification STEPS: 1. Select "Test" when ready and place your cursor within the borders of the displayed test window. 2. Verify that you can move the horizontal slider by moving 2 fingers right and left along the touchpad. VERIFICATION: Could you scroll right and left? plugin: user-interact category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/multitouch-vertical requires: dmi.product in ['Notebook','Laptop','Portable'] command: touchpad_test up down estimated_duration: 120.0 _description: PURPOSE: Touchpad 2-touch vertical scroll verification STEPS: 1. Select "Test" when ready and place your cursor within the borders of the displayed test window. 2. Verify that you can move the vertical slider by moving 2 fingers up and down along the touchpad. VERIFICATION: Could you scroll up and down? plugin: manual category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/drag-and-drop requires: dmi.product in ['Notebook','Laptop','Portable'] estimated_duration: 120.0 _description: PURPOSE: Determine that the drag and drop function is working as expected. STEPS: 1. Browse to the examples folder in the current user's home directory 2. Double tap and hold to select the "Ubuntu_Free_Culture_Showcase" folder 2. Drag the selected folder to the desktop and remove finger from touchpad. VERIFICATION: Did a selected folder move to the desktop? plugin: manual category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/multitouch-zoom requires: dmi.product in ['Notebook','Laptop','Portable'] depends: touchpad/multitouch-automated estimated_duration: 120.0 _summary: Check touchpad pinch-to-zoom gesture _description: PURPOSE: Check touchpad pinch gesture for zoom STEPS: 1. Open gallery-app with an image 2. Place two fingers on the touchpad and pinch them together 3. Place two fingers on the touchpad and move them apart VERIFICATION: Does the image zoom in and out? plugin: manual category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/multitouch-dash requires: dmi.product in ['Notebook','Laptop','Portable'] depends: touchpad/multitouch-automated estimated_duration: 120.0 _summary: Check 4-finger tap gesture _description: PURPOSE: Validate that 4-touch tap is operating as expected STEPS: 1. 4-touch tap (tap with 4 fingers) anywhere on the touchpad VERIFICATION: Did the tap open the Dash? plugin: shell category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/detected-as-mouse requires: dmi.product in ['Notebook','Laptop','Portable'] estimated_duration: 1.2 command: info=`touchpad_driver_info` if [ $? -eq 0 ]; then echo -e "touchpad detected with:\n$info" else echo "$info" exit 1 fi _description: This test will check if your touchpad was detected as a mouse. plugin: user-interact category_id: 2013.com.canonical.plainbox::touchpad id: touchpad/continuous-move requires: dmi.product in ['Notebook','Laptop','Portable'] estimated_duration: 12 command: qmlscene -qt5 --fullscreen $PLAINBOX_PROVIDER_DATA/touch_continuous_move_test.qml 2>&1 | grep -o PASS _description: PURPOSE: Touchpad continuous move verification STEPS: 1. Select "Test" when ready and continuously move your cursor within the borders of the displayed test window. You'll need to keep moving your finger on the touchpad for 10 seconds. VERIFICATION: Did the mouse cursor move without interruption? plainbox-provider-checkbox-0.25/jobs/audio.txt.in0000664000175000017500000005073512646152433023312 0ustar sylvainsylvain00000000000000plugin: shell category_id: 2013.com.canonical.plainbox::audio id: audio/list_devices estimated_duration: 1.0 requires: device.category == 'AUDIO' package.name == 'alsa-base' command: cat /proc/asound/cards _description: Test to detect audio devices plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/playback_auto estimated_duration: 5.0 depends: audio/list_devices requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 gst_pipeline_test -t 2 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will check that internal speakers work correctly STEPS: 1. Make sure that no external speakers or headphones are connected When testing a desktop, you can skip this test if there is no internal speaker, we will test the external output later 2. Commence the test to play a brief tone on your audio device VERIFICATION: Did you hear a tone? id: audio/generator_playback_hdmi requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' _description: HDMI audio test _summary: HDMI audio test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: audio/`echo ${index}`_playback_hdmi_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: display.hdmi == 'supported' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio estimated_duration: 30.0 command: audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --verbose --device=hdmi --volume=50 gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: HDMI audio interface verification STEPS: 1. Plug an external HDMI device with sound (Use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test) 2. Commence the test VERIFICATION: Did you hear the sound from the HDMI device? EOF id: audio/generator_playback_displayport requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' _description: DisplayPort audio test _summary: DisplayPort audio test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: audio/`echo ${index}`_playback_displayport_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` requires: display.dp == 'supported' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio estimated_duration: 30.0 command: audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --verbose --device=hdmi --volume=50 gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: DisplayPort audio interface verification STEPS: 1. Plug an external DisplayPort device with sound (Use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test) 2. Commence the test VERIFICATION: Did you hear the sound from the DisplayPort device? EOF id: audio/generator_playback_thunderbolt requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' _description: Thunderbolt audio test _summary: Thunderbolt audio test plugin: local command: cat <<'EOF' | run_templates -t -s 'graphics_card_resource' id: audio/`echo ${index}`_playback_thunderbolt_`echo "${product}" | sed 's/ /_/g;s/[^_a-zA-Z0-9-]//g'` imports: from 2013.com.canonical.plainbox import manifest requires: manifest.has_thunderbolt == 'True' plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio estimated_duration: 5.0 command: audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --verbose --device=hdmi --volume=50 gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: Thunderbolt audio interface verification STEPS: 1. Plug an external Thunderbolt device with sound (Use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test) 2. Commence the test VERIFICATION: Did you hear the sound from the Thunderbolt device? EOF plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/playback_headphones estimated_duration: 20.0 depends: audio/list_devices requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 gst_pipeline_test -t 2 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will check that headphones connector works correctly STEPS: 1. Connect a pair of headphones to your audio device 2. Commence the test to play a sound to your audio device VERIFICATION: Did you hear a sound through the headphones and did the sound play without any distortion, clicks or other strange noises from your headphones? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/alsa_record_playback_internal estimated_duration: 20.0 depends: audio/playback_auto requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'pulseaudio-utils' package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 alsa_record_playback EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will check that recording sound using the onboard microphone works correctly STEPS: 1. Disconnect any external microphones that you have plugged in 2. Click "Test", then speak into your internal microphone 3. After a few seconds, your speech will be played back to you. VERIFICATION: Did you hear your speech played back? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/alsa_record_playback_external estimated_duration: 20.0 depends: audio/playback_headphones requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'pulseaudio-utils' package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 alsa_record_playback EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will check that recording sound using an external microphone works correctly STEPS: 1. Connect a microphone to your microphone port 2. Click "Test", then speak into the external microphone 3. After a few seconds, your speech will be played back to you VERIFICATION: Did you hear your speech played back? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/alsa_record_playback_usb estimated_duration: 120.0 requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'pulseaudio-utils' package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=usb --volume=50 alsa_record_playback EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will check that a USB audio device works correctly STEPS: 1. Connect a USB audio device to your system 2. Click "Test", then speak into the microphone 3. After a few seconds, your speech will be played back to you VERIFICATION: Did you hear your speech played back through the USB headphones? plugin: shell category_id: 2013.com.canonical.plainbox::audio id: audio/alsa_record_playback_automated estimated_duration: 10.0 requires: package.name == 'python3-gi' package.name == 'gir1.2-gstreamer-1.0' package.name == 'libgstreamer1.0-0' package.name == 'gstreamer1.0-plugins-good' package.name == 'gstreamer1.0-pulseaudio' package.name == 'alsa-base' device.category == 'AUDIO' command: audio_test _description: Play back a sound on the default output and listen for it on the default input. plugin: shell category_id: 2013.com.canonical.plainbox::audio id: audio/alsa_info_collect estimated_duration: 2.0 command: alsa_info --no-dialog --no-upload --output ${PLAINBOX_SESSION_SHARE}/alsa_info.log _description: Collect audio-related system information. This data can be used to simulate this computer's audio subsystem and perform more detailed tests under a controlled environment. plugin: attachment category_id: 2013.com.canonical.plainbox::audio id: audio/alsa_info_attachment depends: audio/alsa_info_collect estimated_duration: 1.0 command: [ -e ${PLAINBOX_SESSION_SHARE}/alsa_info.log ] && cat ${PLAINBOX_SESSION_SHARE}/alsa_info.log _description: Attaches the audio hardware data collection log to the results. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/channels estimated_duration: 20.0 command: speaker-test -c 2 -l 1 -t wav _description: PURPOSE: Check that the various audio channels are working properly STEPS: 1. Commence the test VERIFICATION: You should clearly hear a voice from the different audio channels plugin: shell category_id: 2013.com.canonical.plainbox::audio id: audio/check_volume estimated_duration: 1.0 requires: package.name == 'pulseaudio-utils' device.category == 'AUDIO' command: volume_test --minvol 1 --maxvol 100 _description: This test will verify that the volume levels are at an acceptable level on your local system. The test will validate that the volume is greater than or equal to minvol and less than or equal to maxvol for all sources (inputs) and sinks (outputs) recognized by PulseAudio. It will also validate that the active source and sink are not muted. You should not manually adjust the volume or mute before running this test. plugin: manual category_id: 2013.com.canonical.plainbox::audio id: audio/external-lineout estimated_duration: 30.0 _description: PURPOSE: Check that external line out connection works correctly STEPS: 1. Insert cable to speakers (with built-in amplifiers) on the line out port 2. Open system sound preferences, 'Output' tab, select 'Line-out' on the connector list. Commence the test 3. On the system sound preferences, select 'Internal Audio' on the device list and click 'Test Speakers' to check left and right channel VERIFICATION: 1. Do you hear a sound in the speakers? The internal speakers should *not* be muted automatically 2. Do you hear the sound coming out on the corresponding channel? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/external-linein estimated_duration: 120.0 requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'pulseaudio-utils' package.name == 'gstreamer1.0-plugins-good' or package.name == 'gstreamer0.10-plugins-good' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 alsa_record_playback EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: Check that external line in connection works correctly STEPS: 1. Use a cable to connect the line in port to an external line out source. 2. Open system sound preferences, 'Input' tab, select 'Line-in' on the connector list. Commence the test 3. After a few seconds, your recording will be played back to you. VERIFICATION: Did you hear your recording? plugin: user-interact category_id: 2013.com.canonical.plainbox::audio id: audio/speaker-headphone-plug-detection estimated_duration: 60.0 requires: device.category == 'AUDIO' package.name == 'pulseaudio-utils' command: pulse-active-port-change sinks _description: PURPOSE: Check that system detects speakers or headphones being plugged in STEPS: 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack 2. Locate the speaker / headphone jack on the device under test 3. Run the test (you have 30 seconds from now on) 4. Plug headphones or speakers into the appropriate jack 5. Unplug the device for subsequent tests. VERIFICATION: Verification is automatic, no action is required. The test times out after 30 seconds (and fails in that case). plugin: user-interact category_id: 2013.com.canonical.plainbox::audio id: audio/microphone-plug-detection estimated_duration: 60.0 requires: device.category == 'AUDIO' package.name == 'pulseaudio-utils' command: pulse-active-port-change sources _description: PURPOSE: Check that system detects a microphone being plugged in STEPS: 1. Prepare a microphone with a standard 3.5mm jack 2. Locate the microphone jack on the device under test. Keep in mind that it may be shared with the headphone jack. 3. Run the test (you have 30 seconds from now on) 4. Plug the microphone into the appropriate jack 5. Unplug the device for subsequent tests. VERIFICATION: Verification is automatic, no action is required. The test times out after 30 seconds (and fails in that case). plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/balance_internal_speaker estimated_duration: 20.0 depends: audio/playback_auto requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 gst_pipeline_test -t 10 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: Check that balance control works correctly on internal speakers STEPS: 1. Check that moving the balance slider from left to right works smoothly 2. Commence the test to play an audio tone for 10 seconds. 3. Move the balance slider from left to right and back. 4. Check that actual speaker audio balance follows your setting. VERIFICATION: Does the slider move smoothly, as well as being followed by the setting by the actual audio output? plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/balance_headphones depends: audio/playback_headphones estimated_duration: 30.0 requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 gst_pipeline_test -t 10 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: Check that balance control works correctly on external headphone STEPS: 1. Check that moving the balance slider from left to right works smoothly 2. Commence the test to play an audio tone for 10 seconds. 3. Move the balance slider from left to right and back. 4. Check that actual headphone audio balance follows your setting. VERIFICATION: Does the slider move smoothly, as well as being followed by the setting by the actual audio output? plugin: shell category_id: 2013.com.canonical.plainbox::audio id: audio/list_devices_after_suspend_30_cycles estimated_duration: 1.0 depends: power-management/suspend_30_cycles requires: device.category == 'AUDIO' package.name == 'alsa-base' command: cat /proc/asound/cards _description: Test to detect audio devices after suspending 30 times. plugin: user-interact-verify category_id: 2013.com.canonical.plainbox::audio id: audio/playback_auto_after_suspend_30_cycles estimated_duration: 5.0 depends: audio/list_devices power-management/suspend_30_cycles requires: device.category == 'AUDIO' package.name == 'alsa-base' package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0' package.name == 'pulseaudio-utils' command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings audio_settings set --device=pci --volume=50 gst_pipeline_test -t 2 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink' EXIT_CODE=$? audio_settings restore --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings exit $EXIT_CODE _description: PURPOSE: This test will check that internal speakers work correctly after suspending 30 times. STEPS: 1. Make sure that no external speakers or headphones are connected When testing a desktop, you can skip this test if there is no internal speaker, we will test the external output later 2. Commence the test to play a brief tone on your audio device VERIFICATION: Did you hear a tone? plugin: shell category_id: 2013.com.canonical.plainbox::audio id: audio/alsa_record_playback_automated_after_suspend_30_cycles estimated_duration: 10.0 depends: power-management/suspend_30_cycles requires: package.name == 'python3-gi' package.name == 'gir1.2-gstreamer-1.0' package.name == 'libgstreamer1.0-0' package.name == 'gstreamer1.0-plugins-good' package.name == 'gstreamer1.0-pulseaudio' package.name == 'alsa-base' device.category == 'AUDIO' command: audio_test _description: Play back a sound on the default output and listen for it on the default input, after suspending 30 times. plugin: shell category_id: 2013.com.canonical.plainbox::audio id: audio/check_volume_after_suspend_30_cycles estimated_duration: 1.0 depends: power-management/suspend_30_cycles requires: package.name == 'pulseaudio-utils' device.category == 'AUDIO' command: volume_test --minvol 1 --maxvol 100 _description: This test will verify that the volume levels are at an acceptable level on your local system. The test will validate that the volume is greater than or equal to minvol and less than or equal to maxvol for all sources (inputs) and sinks (outputs) recognized by PulseAudio. It will also validate that the active source and sink are not muted. You should not manually adjust the volume or mute before running this test. plugin: shell category_id: 2013.com.canonical.plainbox::audio id: audio/audio_after_suspend_30_cycles estimated_duration: 1.0 depends: power-management/suspend_30_cycles requires: device.category == 'AUDIO' package.name == 'alsa-base' _description: Record mixer settings after suspending 30 times. command: audio_settings store --file=$PLAINBOX_SESSION_SHARE/audio_settings_after_suspend_30_cycles diff $PLAINBOX_SESSION_SHARE/audio_settings_before_suspend $PLAINBOX_SESSION_SHARE/audio_settings_after_suspend_30_cycles plainbox-provider-checkbox-0.25/COPYING0000664000175000017500000010451312646152433021133 0ustar sylvainsylvain00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . plainbox-provider-checkbox-0.25/bin/0000775000175000017500000000000012646152434020645 5ustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/bin/dns_server_test0000775000175000017500000000256312646152433024011 0ustar sylvainsylvain00000000000000#!/bin/bash # # Verify dns server setup # Packages and ports can be verified offline but external connections # require a network connection. The script will check for this. # # Verify process is running. Expected output 'pgrep named' is a $pid check=`pgrep named` if [ -z "$check" ]; then echo "FAIL: DNS bind is not running." exit 1 fi # Check ports result1=`host www.ubuntu.com localhost | grep "#53"` result2=`host -T -6 www.ubuntu.com ip6-localhost | grep "#53"` if [ -z "$result1" ]; then echo "FAIL: DNS is not using port 53." exit 1 elif [ -z "$result2" ]; then echo "FAIL: DNS is not using port 53 on IPv6." exit 1 fi # Check if udp is established udpCheck=`netstat -auvpn | egrep '(:53)' |egrep 'udp'` if [ -z "$udpCheck" ]; then echo "FAIL: DNS udp setup is not established." exit 1 fi # Check if external dns queries work but first verify the network # is up and running check=`ping -c 2 www.ubuntu.com |grep "2 received"` if [ -n "$check" ]; then failure="2(SERVFAIL)" result1=`host www.ubuntu.com localhost | grep "SERVFAIL" |awk '{print $5}'` result2=`host -T -6 www.ubuntu.com ip6-localhost | grep "SERVFAIL" |awk '{print $5}'` if [ "$result1" = $failure ]; then echo "FAIL: DNS external connection fails." exit 1 elif [ "$result2" = $failure ]; then echo "FAIL: DNS external connection via IPv6 fails." exit 1 fi fi exit 0 plainbox-provider-checkbox-0.25/bin/disk_read_performance_test0000775000175000017500000000474112646152433026145 0ustar sylvainsylvain00000000000000#!/bin/bash # # Verify that disk storage performs at or above baseline performance # #Default to a lower bound of 15 MB/s DEFAULT_BUF_READ=15 for disk in $@; do echo "Beginning $0 test for $disk" echo "---------------------------------------------------" disk_type=`udevadm info --name /dev/$disk --query property | grep "ID_BUS" | awk '{gsub(/ID_BUS=/," ")}{printf $1}'` dev_path=`udevadm info --name /dev/$disk --query property | grep "DEVPATH" | awk '{gsub(/DEVPATH=/," ")}{printf $1}'` echo "INFO: $disk type is $disk_type" case $disk_type in "usb" ) #Custom metrics are guesstimates for now... MIN_BUF_READ=7 # Increase MIN_BUF_READ if a USB3 device is plugged in a USB3 hub port if [[ $dev_path =~ ((.*usb[0-9]+).*\/)[0-9]-[0-9\.:\-]+\/.* ]]; then device_version=`cat '/sys/'${BASH_REMATCH[1]}'/version'` hub_port_version=`cat '/sys/'${BASH_REMATCH[2]}'/version'` if [ $(echo "$device_version >= 3.00"|bc -l) -eq 1 -a $(echo "$hub_port_version >= 3.00"|bc -l) -eq 1 ]; then MIN_BUF_READ=80 fi fi ;; "ide" ) MIN_BUF_READ=40;; * ) MIN_BUF_READ=$DEFAULT_BUF_READ;; esac echo "INFO: $disk_type: Using $MIN_BUF_READ MB/sec as the minimum throughput speed" max_speed=0 echo "" echo "Beginning hdparm timing runs" echo "---------------------------------------------------" for iteration in `seq 1 10`; do speed=`hdparm -t /dev/$disk 2>/dev/null | grep "Timing buffered disk reads" | awk -F"=" '{print $2}' | awk '{print $1}'` echo "INFO: Iteration $iteration: Detected speed is $speed MB/sec" if [ -z "$speed" ]; then echo "WARNING: Device $disk is too small! Aborting test." exit 0 fi speed=${speed/.*} if [ $speed -gt $max_speed ]; then max_speed=$speed fi done echo "INFO: Maximum detected speed is $max_speed MB/sec" echo "---------------------------------------------------" echo "" result=0 if [ $max_speed -gt $MIN_BUF_READ ]; then echo "PASS: $disk Max Speed of $max_speed MB/sec is faster than Minimum Buffer Read Speed of $MIN_BUF_READ MB/sec" else echo "FAIL: $disk Max Speed of $max_speed MB/sec is slower than Minimum Buffer Read Speed of $MIN_BUF_READ MB/sec" result=1 fi done if [ $result -gt 0 ]; then echo "WARNING: One or more disks failed testing!" exit 1 else echo "All devices passed testing!" exit 0 fi plainbox-provider-checkbox-0.25/bin/camera_test0000775000175000017500000005166412646152433023075 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # # This file is part of Checkbox. # # Copyright 2008-2012 Canonical Ltd. # # The v4l2 ioctl code comes from the Python bindings for the v4l2 # userspace api (http://pypi.python.org/pypi/v4l2): # Copyright (C) 1999-2009 the contributors # # The JPEG metadata parser is a part of bfg-pages: # http://code.google.com/p/bfg-pages/source/browse/trunk/pages/getimageinfo.py # Copyright (C) Tim Hoffman # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . # import argparse import ctypes import errno import fcntl import imghdr import logging import os import re import struct import sys import time from gi.repository import GObject from glob import glob from subprocess import check_call, CalledProcessError, STDOUT from tempfile import NamedTemporaryFile _IOC_NRBITS = 8 _IOC_TYPEBITS = 8 _IOC_SIZEBITS = 14 _IOC_NRSHIFT = 0 _IOC_TYPESHIFT = _IOC_NRSHIFT + _IOC_NRBITS _IOC_SIZESHIFT = _IOC_TYPESHIFT + _IOC_TYPEBITS _IOC_DIRSHIFT = _IOC_SIZESHIFT + _IOC_SIZEBITS _IOC_WRITE = 1 _IOC_READ = 2 def _IOC(dir_, type_, nr, size): return ( ctypes.c_int32(dir_ << _IOC_DIRSHIFT).value | ctypes.c_int32(ord(type_) << _IOC_TYPESHIFT).value | ctypes.c_int32(nr << _IOC_NRSHIFT).value | ctypes.c_int32(size << _IOC_SIZESHIFT).value) def _IOC_TYPECHECK(t): return ctypes.sizeof(t) def _IOR(type_, nr, size): return _IOC(_IOC_READ, type_, nr, ctypes.sizeof(size)) def _IOWR(type_, nr, size): return _IOC(_IOC_READ | _IOC_WRITE, type_, nr, _IOC_TYPECHECK(size)) class v4l2_capability(ctypes.Structure): """ Driver capabilities """ _fields_ = [ ('driver', ctypes.c_char * 16), ('card', ctypes.c_char * 32), ('bus_info', ctypes.c_char * 32), ('version', ctypes.c_uint32), ('capabilities', ctypes.c_uint32), ('reserved', ctypes.c_uint32 * 4), ] # Values for 'capabilities' field V4L2_CAP_VIDEO_CAPTURE = 0x00000001 V4L2_CAP_VIDEO_OVERLAY = 0x00000004 V4L2_CAP_READWRITE = 0x01000000 V4L2_CAP_STREAMING = 0x04000000 v4l2_frmsizetypes = ctypes.c_uint ( V4L2_FRMSIZE_TYPE_DISCRETE, V4L2_FRMSIZE_TYPE_CONTINUOUS, V4L2_FRMSIZE_TYPE_STEPWISE, ) = range(1, 4) class v4l2_frmsize_discrete(ctypes.Structure): _fields_ = [ ('width', ctypes.c_uint32), ('height', ctypes.c_uint32), ] class v4l2_frmsize_stepwise(ctypes.Structure): _fields_ = [ ('min_width', ctypes.c_uint32), ('min_height', ctypes.c_uint32), ('step_width', ctypes.c_uint32), ('min_height', ctypes.c_uint32), ('max_height', ctypes.c_uint32), ('step_height', ctypes.c_uint32), ] class v4l2_frmsizeenum(ctypes.Structure): class _u(ctypes.Union): _fields_ = [ ('discrete', v4l2_frmsize_discrete), ('stepwise', v4l2_frmsize_stepwise), ] _fields_ = [ ('index', ctypes.c_uint32), ('pixel_format', ctypes.c_uint32), ('type', ctypes.c_uint32), ('_u', _u), ('reserved', ctypes.c_uint32 * 2) ] _anonymous_ = ('_u',) class v4l2_fmtdesc(ctypes.Structure): _fields_ = [ ('index', ctypes.c_uint32), ('type', ctypes.c_int), ('flags', ctypes.c_uint32), ('description', ctypes.c_char * 32), ('pixelformat', ctypes.c_uint32), ('reserved', ctypes.c_uint32 * 4), ] V4L2_FMT_FLAG_COMPRESSED = 0x0001 V4L2_FMT_FLAG_EMULATED = 0x0002 # ioctl code for video devices VIDIOC_QUERYCAP = _IOR('V', 0, v4l2_capability) VIDIOC_ENUM_FRAMESIZES = _IOWR('V', 74, v4l2_frmsizeenum) VIDIOC_ENUM_FMT = _IOWR('V', 2, v4l2_fmtdesc) class CameraTest: """ A simple class that displays a test image via GStreamer. """ def __init__(self, args, gst_plugin=None, gst_video_type=None): self.args = args self._mainloop = GObject.MainLoop() self._width = 640 self._height = 480 self._gst_plugin = gst_plugin self._gst_video_type = gst_video_type def detect(self): """ Display information regarding webcam hardware """ cap_status = dev_status = 1 for i in range(10): cp = v4l2_capability() device = '/dev/video%d' % i try: with open(device, 'r') as vd: fcntl.ioctl(vd, VIDIOC_QUERYCAP, cp) except IOError: continue dev_status = 0 print("%s: OK" % device) print(" name : %s" % cp.card.decode('UTF-8')) print(" driver : %s" % cp.driver.decode('UTF-8')) print(" version: %s.%s.%s" % (cp.version >> 16, (cp.version >> 8) & 0xff, cp.version & 0xff)) print(" flags : 0x%x [" % cp.capabilities, ' CAPTURE' if cp.capabilities & V4L2_CAP_VIDEO_CAPTURE else '', ' OVERLAY' if cp.capabilities & V4L2_CAP_VIDEO_OVERLAY else '', ' READWRITE' if cp.capabilities & V4L2_CAP_READWRITE else '', ' STREAMING' if cp.capabilities & V4L2_CAP_STREAMING else '', ' ]', sep="") resolutions = self._get_supported_resolutions(device) print(' ', self._supported_resolutions_to_string(resolutions).replace( "\n", " "), sep="") if cp.capabilities & V4L2_CAP_VIDEO_CAPTURE: cap_status = 0 return dev_status | cap_status def led(self): """ Activate camera (switch on led), but don't display any output """ pipespec = ("v4l2src device=%(device)s " "! %(type)s " "! %(plugin)s " "! testsink" % {'device': self.args.device, 'type': self._gst_video_type, 'plugin': self._gst_plugin}) logging.debug("LED test with pipeline %s", pipespec) self._pipeline = Gst.parse_launch(pipespec) self._pipeline.set_state(Gst.State.PLAYING) time.sleep(3) self._pipeline.set_state(Gst.State.NULL) def display(self): """ Displays the preview window """ pipespec = ("v4l2src device=%(device)s " "! %(type)s,width=%(width)d,height=%(height)d " "! %(plugin)s " "! autovideosink" % {'device': self.args.device, 'type': self._gst_video_type, 'width': self._width, 'height': self._height, 'plugin': self._gst_plugin}) logging.debug("display test with pipeline %s", pipespec) self._pipeline = Gst.parse_launch(pipespec) self._pipeline.set_state(Gst.State.PLAYING) time.sleep(10) self._pipeline.set_state(Gst.State.NULL) def still(self): """ Captures an image to a file """ if self.args.filename: self._still_helper(self.args.filename, self._width, self._height, self.args.quiet) else: with NamedTemporaryFile(prefix='camera_test_', suffix='.jpg') as f: self._still_helper(f.name, self._width, self._height, self.args.quiet) def _still_helper(self, filename, width, height, quiet, pixelformat=None): """ Captures an image to a given filename. width and height specify the image size and quiet controls whether the image is displayed to the user (quiet = True means do not display image). """ command = ["fswebcam", "-D 1", "-S 50", "--no-banner", "-d", self.args.device, "-r", "%dx%d" % (width, height), filename] use_gstreamer = False if pixelformat: if 'MJPG' == pixelformat: # special tweak for fswebcam pixelformat = 'MJPEG' command.extend(["-p", pixelformat]) try: check_call(command, stdout=open(os.devnull, 'w'), stderr=STDOUT) except (CalledProcessError, OSError): use_gstreamer = True if use_gstreamer: pipespec = ("v4l2src device=%(device)s " "! %(type)s,width=%(width)d,height=%(height)d " "! %(plugin)s " "! jpegenc " "! filesink location=%(filename)s" % {'device': self.args.device, 'type': self._gst_video_type, 'width': width, 'height': height, 'plugin': self._gst_plugin, 'filename': filename}) logging.debug("still test with gstreamer and " "pipeline %s", pipespec) self._pipeline = Gst.parse_launch(pipespec) self._pipeline.set_state(Gst.State.PLAYING) time.sleep(3) self._pipeline.set_state(Gst.State.NULL) if not quiet: try: check_call(["timeout", "-k", "11", "10", "eog", filename]) except CalledProcessError: pass def _supported_resolutions_to_string(self, supported_resolutions): """ Return a printable string representing a list of supported resolutions """ ret = "" for resolution in supported_resolutions: ret += "Format: %s (%s)\n" % (resolution['pixelformat'], resolution['description']) ret += "Resolutions: " for res in resolution['resolutions']: ret += "%sx%s," % (res[0], res[1]) # truncate the extra comma with :-1 ret = ret[:-1] + "\n" return ret def resolutions(self): """ After querying the webcam for supported formats and resolutions, take multiple images using the first format returned by the driver, and see if they are valid """ resolutions = self._get_supported_resolutions(self.args.device) # print supported formats and resolutions for the logs print(self._supported_resolutions_to_string(resolutions)) # pick the first format, which seems to be what the driver wants for a # default. This also matches the logic that fswebcam uses to select # a default format. resolution = resolutions[0] if resolution: print("Taking multiple images using the %s format" % resolution['pixelformat']) for res in resolution['resolutions']: w = res[0] h = res[1] f = NamedTemporaryFile(prefix='camera_test_%s%sx%s' % (resolution['pixelformat'], w, h), suffix='.jpg', delete=False) print("Taking a picture at %sx%s" % (w, h)) self._still_helper(f.name, w, h, True, pixelformat=resolution['pixelformat']) if self._validate_image(f.name, w, h): print("Validated image %s" % f.name) os.remove(f.name) else: print("Failed to validate image %s" % f.name, file=sys.stderr) os.remove(f.name) return 1 return 0 def _get_pixel_formats(self, device, maxformats=5): """ Query the camera to see what pixel formats it supports. A list of dicts is returned consisting of format and description. The caller should check whether this camera supports VIDEO_CAPTURE before calling this function. """ supported_formats = [] fmt = v4l2_fmtdesc() fmt.index = 0 fmt.type = V4L2_CAP_VIDEO_CAPTURE try: while fmt.index < maxformats: with open(device, 'r') as vd: if fcntl.ioctl(vd, VIDIOC_ENUM_FMT, fmt) == 0: pixelformat = {} # save the int type for re-use later pixelformat['pixelformat_int'] = fmt.pixelformat pixelformat['pixelformat'] = "%s%s%s%s" % \ (chr(fmt.pixelformat & 0xFF), chr((fmt.pixelformat >> 8) & 0xFF), chr((fmt.pixelformat >> 16) & 0xFF), chr((fmt.pixelformat >> 24) & 0xFF)) pixelformat['description'] = fmt.description.decode() supported_formats.append(pixelformat) fmt.index = fmt.index + 1 except IOError as e: # EINVAL is the ioctl's way of telling us that there are no # more formats, so we ignore it if e.errno != errno.EINVAL: print("Unable to determine Pixel Formats, this may be a " "driver issue.") return supported_formats return supported_formats def _get_supported_resolutions(self, device): """ Query the camera for supported resolutions for a given pixel_format. Data is returned in a list of dictionaries with supported pixel formats as the following example shows: resolution['pixelformat'] = "YUYV" resolution['description'] = "(YUV 4:2:2 (YUYV))" resolution['resolutions'] = [[width, height], [640, 480], [1280, 720] ] If we are unable to gather any information from the driver, then we return YUYV and 640x480 which seems to be a safe default. Per the v4l2 spec the ioctl used here is experimental but seems to be well supported. """ supported_formats = self._get_pixel_formats(device) if not supported_formats: resolution = {} resolution['description'] = "YUYV" resolution['pixelformat'] = "YUYV" resolution['resolutions'] = [[640, 480]] supported_formats.append(resolution) return supported_formats for supported_format in supported_formats: resolutions = [] framesize = v4l2_frmsizeenum() framesize.index = 0 framesize.pixel_format = supported_format['pixelformat_int'] with open(device, 'r') as vd: try: while fcntl.ioctl(vd, VIDIOC_ENUM_FRAMESIZES, framesize) == 0: if framesize.type == V4L2_FRMSIZE_TYPE_DISCRETE: resolutions.append([framesize.discrete.width, framesize.discrete.height]) # for continuous and stepwise, let's just use min and # max they use the same structure and only return # one result elif (framesize.type in (V4L2_FRMSIZE_TYPE_CONTINUOUS, V4L2_FRMSIZE_TYPE_STEPWISE)): resolutions.append([framesize.stepwise.min_width, framesize.stepwise.min_height] ) resolutions.append([framesize.stepwise.max_width, framesize.stepwise.max_height] ) break framesize.index = framesize.index + 1 except IOError as e: # EINVAL is the ioctl's way of telling us that there are no # more formats, so we ignore it if e.errno != errno.EINVAL: print("Unable to determine supported framesizes " "(resolutions), this may be a driver issue.") supported_format['resolutions'] = resolutions return supported_formats def _validate_image(self, filename, width, height): """ Given a filename, ensure that the image is the width and height specified and is a valid image file. """ if imghdr.what(filename) != 'jpeg': return False outw = outh = 0 with open(filename, mode='rb') as jpeg: jpeg.seek(2) b = jpeg.read(1) try: while (b and ord(b) != 0xDA): while (ord(b) != 0xFF): b = jpeg.read(1) while (ord(b) == 0xFF): b = jpeg.read(1) if (ord(b) >= 0xC0 and ord(b) <= 0xC3): jpeg.seek(3, 1) h, w = struct.unpack(">HH", jpeg.read(4)) break b = jpeg.read(1) outw, outh = int(w), int(h) except (struct.error, ValueError): pass if outw != width: print("Image width does not match, was %s should be %s" % (outw, width), file=sys.stderr) return False if outh != height: print("Image width does not match, was %s should be %s" % (outh, height), file=sys.stderr) return False return True return True def parse_arguments(argv): """ Parse command line arguments """ parser = argparse.ArgumentParser(description="Run a camera-related test") subparsers = parser.add_subparsers(dest='test', title='test', description='Available camera tests') parser.add_argument('--debug', dest='log_level', action="store_const", const=logging.DEBUG, default=logging.INFO, help="Show debugging messages") def add_device_parameter(parser): group = parser.add_mutually_exclusive_group() group.add_argument("-d", "--device", default="/dev/video0", help="Device for the webcam to use") group.add_argument("--highest-device", action="store_true", help=("Use the /dev/videoN " "where N is the highest value available")) group.add_argument("--lowest-device", action="store_true", help=("Use the /dev/videoN " "where N is the lowest value available")) subparsers.add_parser('detect') led_parser = subparsers.add_parser('led') add_device_parameter(led_parser) display_parser = subparsers.add_parser('display') add_device_parameter(display_parser) still_parser = subparsers.add_parser('still') add_device_parameter(still_parser) still_parser.add_argument("-f", "--filename", help="Filename to store the picture") still_parser.add_argument("-q", "--quiet", action="store_true", help=("Don't display picture, " "just write the picture to a file")) resolutions_parser = subparsers.add_parser('resolutions') add_device_parameter(resolutions_parser) args = parser.parse_args(argv) def get_video_devices(): devices = sorted(glob('/dev/video[0-9]'), key=lambda d: re.search(r'\d', d).group(0)) assert len(devices) > 0, "No video devices found" return devices if hasattr(args, 'highest_device') and args.highest_device: args.device = get_video_devices()[-1] elif hasattr(args, 'lowest_device') and args.lowest_device: args.device = get_video_devices()[0] return args if __name__ == "__main__": args = parse_arguments(sys.argv[1:]) if not args.test: args.test = 'detect' logging.basicConfig(level=args.log_level) # Import Gst only for the test cases that will need it if args.test in ['display', 'still', 'led', 'resolutions']: from gi.repository import Gst if Gst.version()[0] > 0: gst_plugin = 'videoconvert' gst_video_type = 'video/x-raw' else: gst_plugin = 'ffmpegcolorspace' gst_video_type = 'video/x-raw-yuv' Gst.init(None) camera = CameraTest(args, gst_plugin, gst_video_type) else: camera = CameraTest(args) sys.exit(getattr(camera, args.test)()) plainbox-provider-checkbox-0.25/bin/create_connection0000775000175000017500000002227612646152433024265 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import sys import os import time from subprocess import check_call, check_output, CalledProcessError try: from subprocess import DEVNULL # >= python3.3 except ImportError: import os DEVNULL = open(os.devnull, 'wb') from uuid import uuid4 from argparse import ArgumentParser CONNECTIONS_PATH = '/etc/NetworkManager/system-connections/' def wifi_connection_section(ssid, uuid): if not uuid: uuid = uuid4() connection = """ [connection] id=%s uuid=%s type=802-11-wireless """ % (ssid, uuid) wireless = """ [802-11-wireless] ssid=%s mode=infrastructure""" % (ssid) return connection + wireless def wifi_security_section(security, key): # Add security field to 802-11-wireless section wireless_security = """ security=802-11-wireless-security [802-11-wireless-security] """ if security.lower() == 'wpa': wireless_security += """ key-mgmt=wpa-psk auth-alg=open psk=%s """ % key elif security.lower() == 'wep': wireless_security += """ key-mgmt=none wep-key=%s """ % key return wireless_security def wifi_ip_sections(): ip = """ [ipv4] method=auto [ipv6] method=auto """ return ip def mobilebroadband_connection_section(name, uuid, connection_type): if not uuid: uuid = uuid4() connection_section = """ [connection] id={name} uuid={uuid} type={type} autoconnect=false """.format(name=name, uuid=uuid, type=connection_type) return connection_section def mobilebroadband_type_section(connection_type, apn, username, password, pin): number = ('*99#' if connection_type == 'gsm' else '#777') type_section = """ [{type}] number={number} """.format(type=connection_type, number=number) if apn: type_section += "\napn={apn}".format(apn=apn) if username: type_section += "\nusername={username}".format(username=username) if password: type_section += "\npassword={password}".format(password=password) if pin: type_section += "\npin={pin}".format(pin=pin) return type_section def mobilebroadband_ppp_section(): return """ [ppp] lcp-echo-interval=4 lcp-echo-failure=30 """ def mobilebroadband_ip_section(): return """ [ipv4] method=auto """ def mobilebroadband_serial_section(): return """ [serial] baud=115200 """ def block_until_created(connection, retries, interval): while retries > 0: try: nmcli_con_list = check_output(['nmcli', 'con', 'list'], stderr=DEVNULL, universal_newlines=True) except CalledProcessError: check_call(['nmcli', 'con', 'reload']) nmcli_con_list = check_output(['nmcli', 'con', 'show'], stderr=DEVNULL, universal_newlines=True) if connection in nmcli_con_list: print("Connection %s registered" % connection) break time.sleep(interval) retries = retries - 1 if retries <= 0: print("Failed to register %s." % connection, file=sys.stderr) sys.exit(1) else: try: nmcli_con_up = check_call(['nmcli', 'con', 'up', 'id', connection]) print("Connection %s activated." % connection) except CalledProcessError as error: print("Failed to activate %s." % connection, file=sys.stderr) sys.exit(error.returncode) def write_connection_file(name, connection_info): try: connection_file = open(CONNECTIONS_PATH + name, 'w') connection_file.write(connection_info) os.fchmod(connection_file.fileno(), 0o600) connection_file.close() except IOError: print("Can't write to " + CONNECTIONS_PATH + name + ". Is this command being run as root?", file=sys.stderr) sys.exit(1) def create_wifi_connection(args): wifi_connection = wifi_connection_section(args.ssid, args.uuid) if args.security: # Set security options if not args.key: print("You need to specify a key using --key " "if using wireless security.", file=sys.stderr) sys.exit(1) wifi_connection += wifi_security_section(args.security, args.key) elif args.key: print("You specified an encryption key " "but did not give a security type " "using --security.", file=sys.stderr) sys.exit(1) try: check_call(['rfkill', 'unblock', 'wlan', 'wifi']) except CalledProcessError: print("Could not unblock wireless " "devices with rfkill.", file=sys.stderr) # Don't fail the script if unblock didn't work though wifi_connection += wifi_ip_sections() # NetworkManager replaces forward-slashes in SSIDs with asterisks name = args.ssid.replace('/', '*') write_connection_file(name, wifi_connection) return name def create_mobilebroadband_connection(args): name = args.name mobilebroadband_connection = mobilebroadband_connection_section(name, args.uuid, args.type) mobilebroadband_connection += mobilebroadband_type_section(args.type, args.apn, args.username, args.password, args.pin) if args.type == 'cdma': mobilebroadband_connection += mobilebroadband_ppp_section() mobilebroadband_connection += mobilebroadband_ip_section() mobilebroadband_connection += mobilebroadband_serial_section() write_connection_file(name, mobilebroadband_connection) return name def main(): parser = ArgumentParser() subparsers = parser.add_subparsers(help="sub command help") wifi_parser = subparsers.add_parser('wifi', help='Create a Wifi connection.') wifi_parser.add_argument('ssid', help="The SSID to connect to.") wifi_parser.add_argument('-S', '--security', choices=['wpa', 'wep'], help=("The type of security to be used by the " "connection. No security will be used if " "nothing is specified.")) wifi_parser.add_argument('-K', '--key', help="The encryption key required by the router.") wifi_parser.set_defaults(func=create_wifi_connection) mobilebroadband_parser = subparsers.add_parser('mobilebroadband', help="Create a " "mobile " "broadband " "connection.") mobilebroadband_parser.add_argument('type', choices=['gsm', 'cdma'], help="The type of connection.") mobilebroadband_parser.add_argument('-n', '--name', default='MobileBB', help="The name of the connection.") mobilebroadband_parser.add_argument('-a', '--apn', help="The APN to connect to.") mobilebroadband_parser.add_argument('-u', '--username', help="The username required by the " "mobile broadband access point.") mobilebroadband_parser.add_argument('-p', '--password', help="The password required by the " "mobile broadband access point.") mobilebroadband_parser.add_argument('-P', '--pin', help="The PIN of the SIM " "card, if set.") mobilebroadband_parser.set_defaults(func=create_mobilebroadband_connection) parser.add_argument('-U', '--uuid', help="""The uuid to assign to the connection for use by NetworkManager. One will be generated if not specified here.""") parser.add_argument('-R', '--retries', help="""The number of times to attempt bringing up the connection until it is confirmed as active.""", default=5) parser.add_argument('-I', '--interval', help=("The time to wait between attempts to detect " "the registration of the connection."), default=2) args = parser.parse_args() # Call function to create the appropriate connection type connection_name = args.func(args) # Make sure we don't exit until the connection is fully created block_until_created(connection_name, args.retries, args.interval) if __name__ == "__main__": main() plainbox-provider-checkbox-0.25/bin/audio_driver_info0000775000175000017500000000653712646152433024274 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 import sys import re from argparse import ArgumentParser from subprocess import check_output, STDOUT, CalledProcessError from checkbox_support.parsers.modinfo import ModinfoParser TYPES = ("source", "sink") entries_regex = re.compile("index.*?(?=device.icon_name)", re.DOTALL) driver_regex = re.compile("(?<=driver_name = )\"(.*)\"") name_regex = re.compile("(?<=name:).*") class PacmdAudioDevice(): """ Class representing an audio device with information gathered from pacmd """ def __init__(self, name, driver): self._name = name self._driver = driver self._modinfo = self._modinfo_parser(driver) self._driver_version = self._find_driver_ver() def __str__(self): retstr = "Device: %s\n" % self._name if self._driver: retstr += "Driver: %s (%s)" % (self._driver, self._driver_version) else: retstr += "Driver: Unknown" return retstr def _modinfo_parser(self, driver): cmd = ['/sbin/modinfo', driver] try: stream = check_output(cmd, stderr=STDOUT, universal_newlines=True) except CalledProcessError as err: print("Error running %s:" % cmd, file=sys.stderr) print(err.output, file=sys.stderr) return None if not stream: print("Error: modinfo returned nothing", file=sys.stderr) return None else: parser = ModinfoParser(stream) modinfo = parser.get_all() return modinfo def _find_driver_ver(self): # try the version field first, then vermagic second, some audio # drivers don't report version if the driver is in-tree if self._modinfo['version']: return self._modinfo['version'] else: # vermagic will look like this (below) and we only care about the # first part: # "3.2.0-29-generic SMP mod_unload modversions" return self._modinfo['vermagic'].split()[0] def list_device_info(): """ Lists information on audio devices including device driver and version """ retval = 0 for vtype in TYPES: try: pacmd_entries = check_output(["pacmd", "list-%ss" % vtype], universal_newlines=True) except Exception as e: print("Error when running pacmd list-%ss: %s" % (vtype, e), file=sys.stderr) return 1 entries = entries_regex.findall(pacmd_entries) for entry in entries: name_match = name_regex.search(entry) if name_match: name = name_match.group().strip() else: print("Unable to determine device bus information from the" " pacmd list-%ss output\npacmd output was: %s" % (vtype, pacmd_entries), file=sys.stderr) return 1 driver_name = driver_regex.findall(entry) if driver_name: driver = driver_name[0] else: driver = None print("%s\n" % PacmdAudioDevice(name, driver)) return retval def main(): parser = ArgumentParser("List audio device and driver information") args = parser.parse_args() return list_device_info() if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/cking_suite0000775000175000017500000000547512646152433023111 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import sys import posixpath import subprocess from optparse import OptionParser DEFAULT_DIRECTORY = "/tmp/checkbox.cking-scripts" DEFAULT_LOCATION = "git://kernel.ubuntu.com/cking/scripts" COMMAND_TEMPLATE = "cd %(scripts)s; ./%(script)s" def print_line(key, value): if type(value) is list: print("%s:" % key) for v in value: print(" %s" % v) else: print("%s: %s" % (key, value)) def print_element(element): for key, value in element.items(): print_line(key, value) print() def clone_cking_scripts(location, directory): if posixpath.exists(directory): return dirname = posixpath.dirname(directory) if not posixpath.exists(dirname): os.makedirs(dirname) process = subprocess.Popen(["git", "clone", location, directory], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = process.communicate() if process.wait(): raise Exception("Failed to clone cking scripts from %s" % location) def run_cking_scripts(scripts, location, directory, dry_run): if not dry_run: clone_cking_scripts(location, directory) for script in scripts: path = posixpath.join(directory, script) # Initialize test structure test = {} test["plugin"] = "shell" test["name"] = posixpath.splitext(posixpath.basename(path))[0] test["command"] = COMMAND_TEMPLATE % { "scripts": posixpath.dirname(path), "script": posixpath.basename(path)} # Get description from first line of the README file readme_path = posixpath.join(posixpath.dirname(path), "README") if os.path.exists(readme_path): file = open(readme_path) test["description"] = file.readline().strip() file.close else: test["description"] = "No description found" yield test def main(args): usage = "Usage: %prog [OPTIONS] [SCRIPTS]" parser = OptionParser(usage=usage) parser.add_option("--dry-run", default=False, action="store_true", help="Dry run to avoid branching from the given location.") parser.add_option("-d", "--directory", default=DEFAULT_DIRECTORY, help="Directory where to branch qa-regression-testing") parser.add_option("-l", "--location", default=DEFAULT_LOCATION, help="Location from where to branch qa-regression-testing") (options, scripts) = parser.parse_args(args) if not scripts: parser.error("Must specify a script") tests = run_cking_scripts(scripts, options.location, options.directory, options.dry_run) if not tests: return 1 for test in tests: print_element(test) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/sleep_time_check0000775000175000017500000000503512646152433024060 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import sys import argparse from statistics import mean def main(): parser = argparse.ArgumentParser() parser.add_argument('filename', action='store', help='The output file from sleep tests to parse') parser.add_argument('--s', dest='sleep_threshold', action='store', type=float, default=10.00, help=('The max time a system should have taken to ' 'enter a sleep state. (Default: %(default)s)' )) parser.add_argument('--r', action='store', dest='resume_threshold', type=float, default=5.00, help=('The max time a system should have taken to ' 'resume from a sleep state. (Default: ' '%(default)s)')) args = parser.parse_args() try: with open(args.filename) as file: lines = file.readlines() except IOError as e: print(e) return False sleep_time = None sleep_times = [] resume_time = None resume_times = [] # find our times for line in lines: if "Average time to sleep" in line: sleep_time = float(line.split(':')[1].strip()) sleep_times.append(sleep_time) elif "Average time to resume" in line: resume_time = float(line.split(':')[1].strip()) resume_times.append(resume_time) if (sleep_time is None or resume_time is None) or \ (len(sleep_times) != len(resume_times)): print("ERROR: One or more times was not reported correctly") return False print("Average time to enter sleep state: %.4f seconds" % mean(sleep_times)) print("Average time to resume from sleep state: %.4f seconds" % mean(resume_times)) failed = False if sleep_time > args.sleep_threshold: print("System failed to suspend in less than %s seconds" % args.sleep_threshold) failed = True if resume_time > args.resume_threshold: print("System failed to resume in less than %s seconds" % args.resume_threshold) failed = True if sleep_time <= 0.00 or resume_time <= 0.00: print("ERROR: One or more times was not reported correctly") failed = True return failed if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/touchpad_driver_info0000775000175000017500000000434212646152433024772 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import sys from io import StringIO from subprocess import Popen, PIPE, check_output, STDOUT, CalledProcessError from checkbox_support.parsers.udevadm import UdevadmParser from checkbox_support.parsers.modinfo import ModinfoParser # Command to retrieve udev information. COMMAND = 'udevadm info --export-db' class TouchResult: attributes = {} def addDevice(self, device): if getattr(device, 'category') == 'TOUCHPAD': self.attributes['driver'] = getattr(device, 'driver') self.attributes['product'] = getattr(device, 'product') class TouchpadDriver(): def __init__(self, driver): self._driver = driver self.driver_version = self._find_driver_version() def _find_driver_version(self): cmd = ['/sbin/modinfo', self._driver] try: stream = check_output(cmd, stderr=STDOUT, universal_newlines=True) except CalledProcessError as err: print("Error communicating with modinfo.") print(err.output) return None if not stream: print("Error: modinfo returned nothing.") else: parser = ModinfoParser(stream) version = parser.get_field('version') if not version: version = parser.get_field('vermagic').split()[0] return version def get_touch_attributes(): output, err = Popen(COMMAND, stdout=PIPE, shell=True).communicate() if err: print("Error running $s" % ' '.join(COMMAND)) print(err) return None udev = UdevadmParser(StringIO(output.decode("unicode-escape"))) result = TouchResult() udev.run(result) return result.attributes def main(): attributes = get_touch_attributes() if attributes: modinfo = TouchpadDriver(attributes['driver']) attributes['version'] = modinfo.driver_version print("%s: %s\n%s: %s\n%s: %s\n" % ('Device', attributes['product'], 'Driver', attributes['driver'], 'Driver Version', attributes['version'])) else: print("No Touchpad Detected") return 1 return 0 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/virtualization0000775000175000017500000003700012646152433023656 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 """ Script to test virtualization functionality Copyright (C) 2013, 2014 Canonical Ltd. Authors Jeff Marcom Daniel Manrique This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from argparse import ArgumentParser import configparser from glob import glob import os import re import logging import lsb_release import shlex import signal from subprocess import ( Popen, PIPE, CalledProcessError, check_output, call ) import sys import tempfile import tarfile import time import urllib.request DEFAULT_TIMEOUT = 500 class XENTest(object): pass # The "TAR" type is a tarball that contains both # a disk image and a kernel binary. This is useful # on architectures that don't (yet) have a bootloader # in the disk image that we can chain to, and instead # we need to have qemu load boot files externally CLOUD_IMAGE_TYPE_TAR = 1 CLOUD_IMAGE_TYPE_DISK = 2 QEMU_DISK_TYPE_SD = 1 QEMU_DISK_TYPE_VIRTIO = 2 QEMU_DISK_TYPE_VIRTIO_BLK = 3 QEMU_ARCH_CONFIG = { 'arm64': { 'cloudimg_type': CLOUD_IMAGE_TYPE_TAR, 'cloudimg_arch': 'arm64', 'qemu_bin': 'qemu-system-aarch64', 'qemu_disk_type': QEMU_DISK_TYPE_VIRTIO_BLK, 'qemu_extra_args': [ '-cpu', 'host', '-enable-kvm', ], }, 'armhf': { 'cloudimg_type': CLOUD_IMAGE_TYPE_TAR, 'cloudimg_arch': 'armhf', 'qemu_bin': 'qemu-system-arm', 'qemu_disk_type': QEMU_DISK_TYPE_VIRTIO_BLK, 'qemu_extra_args': [ '-machine', 'virt', '-cpu', 'host', '-enable-kvm', '-serial', 'stdio', ], }, 'amd64': { 'cloudimg_type': CLOUD_IMAGE_TYPE_DISK, 'cloudimg_arch': 'i386', 'qemu_bin': 'qemu-system-x86_64', 'qemu_disk_type': QEMU_DISK_TYPE_VIRTIO, 'qemu_extra_args': [ '-machine', 'accel=kvm:tcg', ], }, 'i386': { 'cloudimg_type': CLOUD_IMAGE_TYPE_DISK, 'cloudimg_arch': 'i386', 'qemu_bin': 'qemu-system-x86_64', 'qemu_disk_type': QEMU_DISK_TYPE_VIRTIO, 'qemu_extra_args': [ '-machine', 'accel=kvm:tcg', ], }, 'ppc64el': { 'cloudimg_type': CLOUD_IMAGE_TYPE_DISK, 'cloudimg_arch': 'ppc64el', 'qemu_bin': 'qemu-system-ppc64', 'qemu_disk_type': QEMU_DISK_TYPE_VIRTIO, 'qemu_extra_args': [ '-machine', 'pseries', ], }, } class QemuRunner(object): def __init__(self, arch): self.arch = arch self.config = QEMU_ARCH_CONFIG[arch] self.drive_id = 0 # Parameters common to all architectures self.params = [ self.config['qemu_bin'], "-m", "256", "-display", "none", "-nographic", "-net", "nic", "-net", "user,net=10.0.0.0/8,host=10.0.0.1,hostfwd=tcp::2222-:22", ] # If arch is arm64, add the machine type for gicv3, or default to old # type if self.arch == 'arm64': if glob("/sys/firmware/devicetree/base/interrupt-controller@*/compatible"): self.config['qemu_extra_args'].extend( ['-machine', 'virt,gic_version=3']) else: self.config['qemu_extra_args'].extend(['-machine', 'virt']) # Add any architecture-specific parameters if 'qemu_extra_args' in self.config: self.params = self.params + self.config['qemu_extra_args'] self.append = [] if self.config['cloudimg_type'] == CLOUD_IMAGE_TYPE_TAR: self.append = self.append + [ 'console=ttyAMA0', 'earlyprintk=serial', 'ro', 'rootfstype=ext4', 'root=LABEL=cloudimg-rootfs', 'rootdelay=10', ] def add_boot_files(self, kernel=None, initrd=None, dtb=None): if kernel: self.params = self.params + ['-kernel', kernel] if initrd: self.params = self.params + ['-initrd', initrd] if dtb: self.params = self.params + ['-dtb', dtb] def add_drive(self, cloudimg): drive = ["-drive"] if self.config['qemu_disk_type'] == QEMU_DISK_TYPE_SD: drive = drive + ["file=%s,if=sd,cache=writeback" % (cloudimg)] elif self.config['qemu_disk_type'] == QEMU_DISK_TYPE_VIRTIO: drive = drive + ["file=%s,if=virtio" % (cloudimg)] elif self.config['qemu_disk_type'] == QEMU_DISK_TYPE_VIRTIO_BLK: drive = drive + ["file=%s,if=none,id=disk.%d" % (cloudimg, self.drive_id)] drive = drive + ["-device", "virtio-blk-device,drive=disk.%d" % (self.drive_id)] self.params = self.params + drive self.drive_id = self.drive_id + 1 def get_params(self): params = self.params if self.append: params = params + ['-append', '"%s"' % (" ".join(self.append))] return params class KVMTest(object): def __init__(self, image=None, timeout=500, debug_file=None): self.image = image self.timeout = timeout self.debug_file = debug_file self.arch = check_output(['dpkg', '--print-architecture'], universal_newlines=True).strip() self.qemu_config = QEMU_ARCH_CONFIG[self.arch] def download_image(self): """ Downloads Cloud image for same release as host machine """ # Check Ubuntu release info. Example {quantal, precise} release = lsb_release.get_lsb_information()["CODENAME"] # Construct URL cloud_url = "http://cloud-images.ubuntu.com" if self.qemu_config['cloudimg_type'] == CLOUD_IMAGE_TYPE_TAR: cloud_iso = "%s-server-cloudimg-%s.tar.gz" % ( release, self.qemu_config['cloudimg_arch']) elif self.qemu_config['cloudimg_type'] == CLOUD_IMAGE_TYPE_DISK: cloud_iso = "%s-server-cloudimg-%s-disk1.img" % ( release, self.qemu_config['cloudimg_arch']) else: logging.error("Unknown cloud image type") return False image_url = "/".join(( cloud_url, release, "current", cloud_iso)) logging.debug("Downloading {}, from {}".format(cloud_iso, cloud_url)) # Attempt download try: resp = urllib.request.urlretrieve(image_url, cloud_iso) except (IOError, OSError, urllib.error.HTTPError, urllib.error.URLError) as exception: logging.error("Failed download of image from %s: %s", image_url, exception) return False # Unpack img file from tar if self.qemu_config['cloudimg_type'] == CLOUD_IMAGE_TYPE_TAR: cloud_iso_tgz = tarfile.open(cloud_iso) cloud_iso = cloud_iso.replace('tar.gz', 'img') cloud_iso_tgz.extract(cloud_iso) if not os.path.isfile(cloud_iso): return False return cloud_iso def boot_image(self, data_disk): """ Attempts to boot the newly created qcow image using the config data defined in config.iso """ logging.debug("Attempting boot for:{}".format(data_disk)) qemu = QemuRunner(self.arch) # Assume that a tar type image is not self-bootable, so # therefore requires explicit bootfiles (otherwise, why # not just use the disk format directly? if self.qemu_config['cloudimg_type'] == CLOUD_IMAGE_TYPE_TAR: for dir in ['/boot', '/']: kernel = os.path.join(dir, 'vmlinuz') initrd = os.path.join(dir, 'initrd.img') if os.path.isfile(kernel): qemu.add_boot_files(kernel=kernel, initrd=initrd) break qemu.add_drive(data_disk) # Should we attach the cloud config disk if os.path.isfile("seed.iso"): logging.debug("Attaching Cloud config disk") qemu.add_drive("seed.iso") params = qemu.get_params() logging.debug("Using params:{}".format(" ".join(params))) logging.info("Storing VM console output in {}".format( os.path.realpath(self.debug_file))) # Open VM STDERR/STDOUT log file for writing try: file = open(self.debug_file, 'w') except IOError: logging.error("Failed creating file:{}".format(self.debug_file)) return False # Start Virtual machine self.process = Popen( params, stdin=PIPE, stderr=file, stdout=file, universal_newlines=True, shell=False) def create_cloud_disk(self): """ Generate Cloud meta data and creates an iso object to be mounted as virtual device to instance during boot. """ user_data = """\ #cloud-config runcmd: - [ sh, -c, echo "========= CERTIFICATION TEST =========" ] power_state: mode: halt message: Bye timeout: 480 final_message: CERTIFICATION BOOT COMPLETE """ meta_data = """\ { echo instance-id: iid-local01; echo local-hostname, certification; } """ for file in ['user-data', 'meta-data']: logging.debug("Creating cloud %s", file) with open(file, "wt") as data_file: os.fchmod(data_file.fileno(), 0o777) data_file.write(vars()[file.replace("-", "_")]) # Create Data ISO hosting user & meta cloud config data try: iso_build = check_output( ['genisoimage', '-output', 'seed.iso', '-volid', 'cidata', '-joliet', '-rock', 'user-data', 'meta-data'], universal_newlines=True) except CalledProcessError as exception: logging.exception("Cloud data disk creation failed") def start(self): logging.debug('Starting KVM Test') status = 1 # Create temp directory: date = time.strftime("%b_%d_%Y_") with tempfile.TemporaryDirectory("_kvm_test", date) as temp_dir: os.chmod(temp_dir, 0o744) os.chdir(temp_dir) if not self.image: logging.debug('No image specified, downloading one now.') # Download cloud image self.image = self.download_image() if self.image and os.path.isfile(self.image): if "cloud" in self.image: # Will assume we need to supply cloud meta data # for instance boot to be successful self.create_cloud_disk() # Boot Virtual Machine instance = self.boot_image(self.image) time.sleep(self.timeout) # If running in console, reset console window to regain # control from VM Serial I/0 if sys.stdout.isatty(): call('reset') # Check to be sure VM boot was successful with open(self.debug_file, 'r') as debug_file: file_contents = debug_file.read() if "CERTIFICATION BOOT COMPLETE" in file_contents: if "END SSH HOST KEY KEYS" in file_contents: print("Booted successfully", file=sys.stderr) else: print("Booted successfully (Previously " "initalized VM)", file=sys.stderr) status = 0 else: print("E: KVM instance failed to boot", file=sys.stderr) print("Console output".center(72, "="), file=sys.stderr) with open(self.debug_file, 'r') as console_log: print(console_log.read(), file=sys.stderr) print("E: KVM instance failed to boot", file=sys.stderr) self.process.terminate() elif not self.image: print("Could not find downloaded image") else: print("Could not find: {}".format(self.image), file=sys.stderr) return status def test_kvm(args): print("Executing KVM Test", file=sys.stderr) DEFAULT_CFG = "/etc/checkbox.d/virtualization.cfg" image = "" timeout = "" # Configuration data can come from three sources. # Lowest priority is the config file. config_file = DEFAULT_CFG config = configparser.SafeConfigParser() try: config.readfp(open(config_file)) except IOError: logging.warn("No config file found") else: try: timeout = config.getfloat("KVM", "timeout") except ValueError: logging.warning('Invalid or Empty timeout in config file. ' 'Falling back to default') except configparser.NoSectionError as e: logging.exception(e) try: image = config.get("KVM", "image") except configparser.NoSectionError: logging.exception('Invalid or Empty image in config file.') # Next in priority are environment variables. if 'KVM_TIMEOUT' in os.environ: try: timeout = float(os.environ['KVM_TIMEOUT']) except ValueError as err: logging.warning("TIMEOUT env variable: %s" % err) timeout = DEFAULT_TIMEOUT if 'KVM_IMAGE' in os.environ: image = os.environ['KVM_IMAGE'] # Finally, highest-priority are command line arguments. if args.timeout: timeout = args.timeout elif not timeout: timeout = DEFAULT_TIMEOUT if args.image: image = args.image kvm_test = KVMTest(image, timeout, args.log_file) result = kvm_test.start() sys.exit(result) def main(): parser = ArgumentParser(description="Virtualization Test") subparsers = parser.add_subparsers() # Main cli options kvm_test_parser = subparsers.add_parser( 'kvm', help=("Run kvm virtualization test")) # Sub test options kvm_test_parser.add_argument( '-i', '--image', type=str, default=None) kvm_test_parser.add_argument( '-t', '--timeout', type=int) kvm_test_parser.add_argument( '-l', '--log-file', default='virt_debug', help="Location for debugging output log. Defaults to %(default)s.") kvm_test_parser.add_argument('--debug', dest='log_level', action="store_const", const=logging.DEBUG, default=logging.INFO) kvm_test_parser.set_defaults(func=test_kvm) args = parser.parse_args() try: logging.basicConfig(level=args.log_level) except AttributeError: pass # avoids exception when trying to run without specifying 'kvm' # to check if not len(sys.argv) > 1 if len(vars(args)) == 0: parser.print_help() return False args.func(args) if __name__ == "__main__": main() plainbox-provider-checkbox-0.25/bin/cycle_vts0000775000175000017500000000077112646152433022572 0ustar sylvainsylvain00000000000000#!/bin/bash set -o errexit # NB: This script must be run with root privileges in order to have any effect! CURRENT_VT=`/bin/fgconsole` if [ "$CURRENT_VT" == "" ] then echo "Unable to determine current virtual terminal." >&2 exit 1 fi if [ "$CURRENT_VT" -ne "1" ] then chvt 1 else chvt 2 fi sleep 2 chvt "$CURRENT_VT" sleep 2 # make sure we switched back END_VT=`/bin/fgconsole` if [ "$END_VT" -ne "$CURRENT_VT" ] then echo "didn't get back to the original VT" >&2 exit 1 fi plainbox-provider-checkbox-0.25/bin/network_ntp_test0000775000175000017500000001610512646152433024206 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 ''' Program to test that ntpdate will sync the clock with an internet time server. Copyright (C) 2010 Canonical Ltd. Author: Jeff Lane This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . The purpose of this script is to test to see whether the test system can connect to an internet time server and sync the local clock. It will also check to see if ntpd is running locally, and if so, stop it for the duration of the test and restart it after the test is finished. By default, we're hitting ntp.ubuntu.com, however you can use any valid NTP server by passing the URL to the program via --server ''' import sys import os import logging import signal import time from datetime import datetime, timedelta from subprocess import Popen, PIPE from argparse import ArgumentParser def SilentCall(*popenargs): ''' Modified version of subprocess.call() to supress output from the command that is executed. Wait for command to complete, then return the returncode attribute. ''' null_fh = open('/dev/null', 'wb', 0) try: return (Popen(*popenargs, shell=True, stdout=null_fh, stderr=null_fh) .wait()) finally: null_fh.close() def CheckNTPD(): ''' This checks to see if nptd is running or not, if so it returns a tuple (status,pid,command) where status is either on or off. ''' ps_list = (Popen('ps axo pid,comm', shell=True, stdout=PIPE) .communicate()[0].splitlines()) for item in ps_list: fields = item.split() if fields[1] == 'ntpd': logging.debug('Found %s with PID %s' % (fields[1], fields[0])) break if fields[1] == 'ntpd': return ('on', fields[0], fields[1]) else: return ('off', '0', '0') def StartStopNTPD(state, pid=0): ''' This is used to either start or stop ntpd if its running. ''' if state == 'off': logging.info('Stopping ntpd process PID: %s' % pid) os.kill(int(pid), signal.SIGHUP) elif state == 'on': logging.info('Starting ntp process') SilentCall('/etc/init.d/ntp start') ntpd_status = CheckNTPD() if status == 0: logging.debug('ntpd restarted with PID: %s' % ntpd_status[1]) else: logging.error('ntpd restart failed for some reason') else: logging.error('%s is an unknown state, unable to start/stop ntpd' % state) def SyncTime(server): ''' This is used to sync time to the specified ntp server. We use -b here as that syncs time faster than the slewed method that ntpdate uses by default, meaning we'll see something meaningful faster. ''' cmd = 'ntpdate -b ' + server logging.debug('using %s' % server) sync = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE) result = sync.communicate() if sync.returncode == 0: logging.info('Successful NTP update from %s' % server) logging.debug(result[0].strip().decode()) return True else: logging.error('Failed to sync with %s' % server) logging.error(result[1].strip().decode()) return False def TimeCheck(): ''' Returns current time in a time.localtime() struct ''' return time.localtime() def SkewTime(): ''' Optional function. We can skew time by 1 hour if we'd like to see real sync changes being enforced ''' TIME_SKEW = 1 logging.info('Time Skewing has been selected. Setting clock ahead 1 hour') # Let's get our current time skewed = datetime.now() + timedelta(hours=TIME_SKEW) logging.info('Current time is: %s' % time.asctime()) # Now create new time string in the form MMDDhhmmYYYY for the date program date_time_string = skewed.strftime('%m%d%H%M%Y') logging.debug('New date string is: %s' % date_time_string) logging.debug('Setting new system time/date') # This call is necessary for testing, otherwise TimeSkew() does nothing. SilentCall('/bin/date %s' % date_time_string) logging.info('Pre-sync time is: %s' % time.asctime()) def main(): description = 'Tests the ability to skew and sync the clock with an NTP server' parser = ArgumentParser(description=description) parser.add_argument('--server', action='store', default='ntp.ubuntu.com', help='The NTP server to sync from. The default server \ is %(default)s') parser.add_argument('--skew-time', action='store_true', default=False, help='Setting this will change system time ahead by 1 \ hour to make the results of ntp syncing more dramatic \ and noticeable.') parser.add_argument('-d', '--debug', action='store_true', default=False, help='Verbose output for debugging purposes') args = parser.parse_args() if os.geteuid() != 0: parser.error("You must run this script as root") # Set up logging format = '%(asctime)s %(levelname)-8s %(message)s' date_format = '%Y-%m-%d %H:%M:%S' handler = logging.StreamHandler() handler.setFormatter(logging.Formatter(format, date_format)) logger = logging.getLogger() logger.setLevel(logging.INFO) if args.debug: logger.setLevel(logging.DEBUG) logger.addHandler(handler) # Make sure NTP is installed if not os.access('/usr/sbin/ntpdate', os.F_OK): logging.error('NTP is not installed!') return 1 # Check for and stop the ntp daemon ntpd_status = CheckNTPD() logging.debug('Pre-sync ntpd status: %s %s %s' % (ntpd_status[0], ntpd_status[1], ntpd_status[2])) if ntpd_status[0] == 'on': logging.debug('Since ntpd is currently running, stopping it now') StartStopNTPD('off', ntpd_status[1]) if args.skew_time: logging.debug('Setting system time ahead one hour') SkewTime() else: logging.info('Pre-sync time is: %s' % time.asctime(TimeCheck())) sync = SyncTime(args.server) logging.info('Current system time is: %s' % time.asctime(TimeCheck())) # Restart ntp daemon if ntpd_status[0] == 'on': logging.debug('Since ntpd was previously running, starting it again') StartStopNTPD('on') if sync is True: return 0 else: return 1 if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/color_depth_info0000775000175000017500000000370512646152433024114 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # color_depth_info # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Authors: Alberto Milone # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . """ The get_color_depth got information from Xorg.*.log """ import os import re import sys from glob import glob def get_color_depth(log_dir='/var/log/'): '''Return color depth and pixmap format''' # find the most recent X.org log depth = 8 pixmap_format = 8 log = None max_time = 0 for log in glob(os.path.join(log_dir, 'Xorg.*.log')): mtime = os.stat(log).st_mtime if mtime > max_time: max_time = mtime current_log = log if current_log is None: depth = 0 pixmap_format = 0 return (depth, pixmap_format) with open(current_log, 'rb') as stream: for match in re.finditer('Depth (\d+) pixmap format is (\d+) bpp', str(stream.read())): depth = int(match.group(1)) pixmap_format = int(match.group(2)) return (depth, pixmap_format) def main(): '''main function''' depth, pixmap_format = get_color_depth() print('Color Depth: {0}\nPixmap Format: {1} bpp'.format(depth, pixmap_format)) if depth == 8: return 1 return 0 if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/lsmod_info0000775000175000017500000000231712646152433022726 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import sys from checkbox_support.parsers.modinfo import ModinfoParser from subprocess import Popen, PIPE, check_output, CalledProcessError def main(): process = Popen('lsmod', stdout=PIPE, stderr=PIPE, universal_newlines=True) data = process.stdout.readlines() # Delete the first item because it's headers from lsmod output data.pop(0) module_list = [module.split()[0].strip() for module in data] cmd = '/sbin/modinfo' for module in sorted(module_list): version = '' stream = b'' try: stream = check_output([cmd, module], stderr=PIPE, universal_newlines=False) except CalledProcessError as e: if e.returncode != 1: raise e else: version = 'Unavailable' stream = stream.decode('utf-8') parser = ModinfoParser(stream) if not version: version = parser.get_field('version') if not version: version = parser.get_field('vermagic').split()[0] print('%s: %s' % (module, version)) return 0 if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/alsa_record_playback0000775000175000017500000000036412646152433024721 0ustar sylvainsylvain00000000000000#!/bin/sh OUTPUT=`mktemp -d` gst_pipeline_test -t 5 "autoaudiosrc ! audioconvert ! level name=recordlevel interval=10000000 ! audioconvert ! wavenc ! filesink location=$OUTPUT/test.wav" aplay $OUTPUT/test.wav rm $OUTPUT/test.wav rmdir $OUTPUT plainbox-provider-checkbox-0.25/bin/optical_write_test0000775000175000017500000000774012646152433024506 0ustar sylvainsylvain00000000000000#!/bin/bash TEMP_DIR='/tmp/optical-test' ISO_NAME='optical-test.iso' SAMPLE_FILE_PATH='/usr/share/example-content/' SAMPLE_FILE='Ubuntu_Free_Culture_Showcase' MD5SUM_FILE='optical_test.md5' START_DIR=$PWD create_working_dirs(){ # First, create the temp dir and cd there echo "Creating Temp directory and moving there ..." mkdir -p $TEMP_DIR || return 1 cd $TEMP_DIR echo "Now working in $PWD ..." } get_sample_data(){ # Get our sample files echo "Getting sample files from $SAMPLE_FILE_PATH ..." cp -a $SAMPLE_FILE_PATH/$SAMPLE_FILE $TEMP_DIR return $? } generate_md5(){ # Generate the md5sum echo "Generating md5sums of sample files ..." CUR_DIR=$PWD cd $SAMPLE_FILE md5sum * > $TEMP_DIR/$MD5SUM_FILE # Check the sums for paranoia sake check_md5 $TEMP_DIR/$MD5SUM_FILE rt=$? cd $CUR_DIR return $rt } check_md5(){ echo "Checking md5sums ..." md5sum -c $1 return $? } generate_iso(){ # Generate ISO image echo "Creating ISO Image ..." genisoimage -input-charset UTF-8 -r -J -o $ISO_NAME $SAMPLE_FILE return $? } burn_iso(){ # Burn the ISO with the appropriate tool echo "Sleeping 10 seconds in case drive is not yet ready ..." sleep 10 echo "Beginning image burn ..." if [ "$OPTICAL_TYPE" == 'cd' ] then wodim -eject dev=$OPTICAL_DRIVE $ISO_NAME elif [ "$OPTICAL_TYPE" == 'dvd' ] || [ "$OPTICAL_TYPE" == 'bd' ] then growisofs -dvd-compat -Z $OPTICAL_DRIVE=$ISO_NAME else echo "Invalid type specified '$OPTICAL_TYPE'" exit 1 fi rt=$? return $rt } check_disk(){ TIMEOUT=300 SLEEP_COUNT=0 INTERVAL=3 # Give the tester up to 5 minutes to reload the newly created CD/DVD echo "Waiting up to 5 minutes for drive to be mounted ..." while true; do sleep $INTERVAL SLEEP_COUNT=`expr $SLEEP_COUNT + $INTERVAL` mount $OPTICAL_DRIVE 2>&1 |egrep -q "already mounted" rt=$? if [ $rt -eq 0 ]; then echo "Drive appears to be mounted now" break fi # If they exceed the timeout limit, make a best effort to load the tray # in the next steps if [ $SLEEP_COUNT -ge $TIMEOUT ]; then echo "WARNING: TIMEOUT Exceeded and no mount detected!" break fi done echo "Deleting original data files ..." rm -rf $SAMPLE_FILE if [ -n "$(mount | grep $OPTICAL_DRIVE)" ]; then MOUNT_PT=$(mount | grep $OPTICAL_DRIVE | awk '{print $3}') echo "Disk is mounted to $MOUNT_PT" else echo "Attempting best effort to mount $OPTICAL_DRIVE on my own" MOUNT_PT=$TEMP_DIR/mnt echo "Creating temp mount point: $MOUNT_PT ..." mkdir $MOUNT_PT echo "Mounting disk to mount point ..." mount $OPTICAL_DRIVE $MOUNT_PT rt=$? if [ $rt -ne 0 ]; then echo "ERROR: Unable to re-mount $OPTICAL_DRIVE!" >&2 return 1 fi fi echo "Copying files from ISO ..." cp $MOUNT_PT/* $TEMP_DIR check_md5 $MD5SUM_FILE return $? } cleanup(){ echo "Moving back to original location" cd $START_DIR echo "Now residing in $PWD" echo "Cleaning up ..." umount "$MOUNT_PT" rm -fr $TEMP_DIR echo "Ejecting spent media ..." eject $OPTICAL_DRIVE } failed(){ echo $1 echo "Attempting to clean up ..." cleanup exit 1 } if [ -e $1 ]; then OPTICAL_DRIVE=$(readlink -f $1) else OPTICAL_DRIVE='/dev/sr0' fi if [ -n "$2" ]; then OPTICAL_TYPE=$2 else OPTICAL_TYPE='cd' fi create_working_dirs || failed "Failed to create working directories" get_sample_data || failed "Failed to copy sample data" generate_md5 || failed "Failed to generate initial md5" generate_iso || failed "Failed to create ISO image" burn_iso || failed "Failed to burn ISO image" check_disk || failed "Failed to verify files on optical disk" cleanup || failed "Failed to clean up" exit 0 plainbox-provider-checkbox-0.25/bin/frequency_governors_test0000775000175000017500000006420112646152433025741 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import decimal import os import re import sys import time import argparse import logging from subprocess import check_output, check_call, CalledProcessError, PIPE class CPUScalingTest(object): def __init__(self): self.speedUpTolerance = 10.0 # percent self.retryLimit = 5 self.retryTolerance = 5.0 # percent self.sysCPUDirectory = "/sys/devices/system/cpu" self.cpufreqDirectory = os.path.join(self.sysCPUDirectory, "cpu0", "cpufreq") self.idaFlag = "ida" self.idaSpeedupFactor = 8.0 # percent self.selectorExe = "cpufreq-selector" self.ifSelectorExe = None def getCPUFreqDirectories(self): logging.debug("Getting CPU Frequency Directories") if not os.path.exists(self.sysCPUDirectory): logging.error("No file %s" % self.sysCPUDirectory) return None # look for cpu subdirectories pattern = re.compile("cpu(?P[0-9]+)") self.cpufreqDirectories = list() for subdirectory in os.listdir(self.sysCPUDirectory): match = pattern.search(subdirectory) if match and match.group("cpuNumber"): cpufreqDirectory = os.path.join(self.sysCPUDirectory, subdirectory, "cpufreq") if not os.path.exists(cpufreqDirectory): logging.error("CPU %s has no cpufreq directory %s" % (match.group("cpuNumber"), cpufreqDirectory)) return None # otherwise self.cpufreqDirectories.append(cpufreqDirectory) if len(self.cpufreqDirectories) is 0: return None # otherwise logging.debug("Located the following CPU Freq Directories:") for line in self.cpufreqDirectories: logging.debug(" %s" % line) return self.cpufreqDirectories def checkParameters(self, file): logging.debug("Checking Parameters for %s" % file) current = None for cpufreqDirectory in self.cpufreqDirectories: parameters = self.getParameters(cpufreqDirectory, file) if not parameters: logging.error("Error: could not determine cpu parameters from %s" % os.path.join(cpufreqDirectory, file)) return None if not current: current = parameters elif not current == parameters: return None return current def getParameters(self, cpufreqDirectory, file): logging.debug("Getting Parameters for %s" % file) path = os.path.join(cpufreqDirectory, file) file = open(path) while 1: line = file.readline() if not line: break if len(line.strip()) > 0: return line.strip().split() return None def setParameter(self, setFile, readFile, value, skip=False, automatch=False): def findParameter(targetFile): logging.debug("Finding parameters for %s" % targetFile) for root, _, files in os.walk(self.sysCPUDirectory): for f in files: rf = os.path.join(root, f) if targetFile in rf: return rf return None logging.debug("Setting %s to %s" % (setFile,value)) path = None if not skip: if automatch: path = findParameter(setFile) else: path = os.path.join(self.cpufreqDirectory, setFile) try: check_call("echo \"%s\" > %s" % (value, path), shell=True) except CalledProcessError as exception: logging.exception("Command failed:") logging.exception(exception) return False # verify it has changed if automatch: path = findParameter(readFile) else: path = os.path.join(self.cpufreqDirectory, readFile) parameterFile = open(path) line = parameterFile.readline() if not line or line.strip() != str(value): logging.error("Error: could not verify that %s was set to %s" % (path, value)) if line: logging.error("Actual Value: %s" % line) else: logging.error("parameter file was empty") return False return True def checkSelectorExecutable(self): logging.debug("Determining if %s is executable" % self.selectorExe) def is_exe(fpath): return os.path.exists(fpath) and os.access(fpath, os.X_OK) if self.ifSelectorExe is None: # cpufreq-selector default path exe = os.path.join("/usr/bin/", self.selectorExe) if is_exe(exe): self.ifSelectorExe = True return True for path in os.environ["PATH"].split(os.pathsep): exe = os.path.join(path, self.selectorExe) if is_exe(exe): self.ifSelectorExe = True return True self.ifSelectorExe = False return False def setParameterWithSelector(self, switch, setFile, readFile, value): logging.debug("Setting %s with %s to %s" % (setFile, switch, value)) # Try the command for all CPUs skip = True if self.checkSelectorExecutable(): try: check_call("cpufreq-selector -%s %s" % (switch, value), shell=True) except CalledProcessError as exception: logging.exception("Note: command failed: %s" % exception.cmd) skip = False else: skip = False return self.setParameter(setFile, readFile, value, skip) def setFrequency(self, frequency): logging.debug("Setting Frequency to %s" % frequency) return self.setParameterWithSelector("f", "scaling_setspeed", "scaling_cur_freq", frequency) def setGovernor(self, governor): logging.debug("Setting Governor to %s" % governor) return self.setParameterWithSelector("g", "scaling_governor", "scaling_governor", governor) def getParameter(self, parameter): value = None logging.debug("Getting %s" % parameter) parameterFilePath = os.path.join(self.cpufreqDirectory, parameter) try: parameterFile = open(parameterFilePath) line = parameterFile.readline() if not line: logging.error("Error: failed to get %s for %s" % (parameter, self.cpufreqDirectory)) return None value = line.strip() return value except IOError as exception: logging.exception("Error: could not open %s" % parameterFilePath) logging.exception(exception) return None def getParameterList(self, parameter): logging.debug("Getting parameter list") values = list() for cpufreqDirectory in self.cpufreqDirectories: path = os.path.join(cpufreqDirectory, parameter) parameterFile = open(path) line = parameterFile.readline() if not line: logging.error("Error: failed to get %s for %s" % (parameter, cpufreqDirectory)) return None values.append(line.strip()) logging.debug("Found parameters:") for line in values: logging.debug(" %s" % line) return values def runLoadTest(self): logging.info("Running CPU load test...") try: output = check_output("taskset -pc 0 %s" % os.getpid(), shell=True) for line in output.decode().splitlines(): logging.info(line) except CalledProcessError as exception: logging.exception("Could not set task affinity") logging.exception(exception) return None runTime = None tries = 0 while tries < self.retryLimit: sys.stdout.flush() (start_utime, start_stime, start_cutime, start_cstime, start_elapsed_time) = os.times() self.pi() (stop_utime, stop_stime, stop_cutime, stop_cstime, stop_elapsed_time) = os.times() if not runTime: runTime = stop_elapsed_time - start_elapsed_time else: thisTime = stop_elapsed_time - start_elapsed_time if ((abs(thisTime - runTime) / runTime) * 100 < self.retryTolerance): return runTime else: runTime = thisTime tries += 1 logging.error("Could not repeat load test times within %.1f%%" % self.retryTolerance) return None def pi(self): decimal.getcontext().prec = 500 s = decimal.Decimal(1) h = decimal.Decimal(3).sqrt() / 2 n = 6 for i in range(170): s2 = ((1 - h) ** 2 + s ** 2 / 4) s = s2.sqrt() h = (1 - s2 / 4).sqrt() n = 2 * n return True def verifyMinimumFrequency(self, waitTime=5): logging.debug("Verifying minimum frequency") logging.info("Waiting %d seconds..." % waitTime) time.sleep(waitTime) logging.info("Done.") minimumFrequency = self.getParameter("scaling_min_freq") currentFrequency = self.getParameter("scaling_cur_freq") if (not minimumFrequency or not currentFrequency or (minimumFrequency != currentFrequency)): return False # otherwise return True def getSystemCapabilities(self): logging.info("System Capabilites:") logging.info("-------------------------------------------------") # Do the CPUs support scaling? if not self.getCPUFreqDirectories(): return False if len(self.cpufreqDirectories) > 1: logging.info("System has %u cpus" % len(self.cpufreqDirectories)) # Ensure all CPUs support the same frequencies freqFileName = "scaling_available_frequencies" self.frequencies = self.checkParameters(freqFileName) if not self.frequencies: return False logging.info("Supported CPU Frequencies: ") for freq in self.frequencies: f = int(freq) / 1000 logging.info(" %u MHz" % f) # Check governors to verify all CPUs support the same control methods governorFileName = "scaling_available_governors" self.governors = self.checkParameters(governorFileName) if not self.governors: return False logging.info("Supported Governors: ") for governor in self.governors: logging.info(" %s" % governor) self.originalGovernors = self.getParameterList("scaling_governor") if self.originalGovernors: logging.info("Current governors:") i = 0 for g in self.originalGovernors: logging.info(" cpu%u: %s" % (i, g)) i += 1 else: logging.error("Error: could not determine current governor settings") return False self.getCPUFlags() return True def getCPUFlags(self): logging.debug("Getting CPU flags") self.cpuFlags = None try: cpuinfo_file = open('/proc/cpuinfo', 'r') cpuinfo = cpuinfo_file.read().split("\n") cpuinfo_file.close() for line in cpuinfo: if line.startswith('flags'): pre, post = line.split(':') self.cpuFlags = post.strip().split() break logging.debug("Found the following CPU Flags:") for line in self.cpuFlags: logging.debug(" %s" % line) except: logging.warning("Could not read CPU flags") def runUserSpaceTests(self): logging.info("Userspace Governor Test:") logging.info("-------------------------------------------------") self.minimumFrequencyTestTime = None self.maximumFrequencyTestTime = None success = True differenceSpeedUp = None governor = "userspace" if governor not in self.governors: logging.warning("Note: %s governor not supported" % governor) else: # Set the governor to "userspace" and verify logging.info("Setting governor to %s" % governor) if not self.setGovernor(governor): success = False # Set the the CPU speed to it's lowest value frequency = self.frequencies[-1] logging.info("Setting CPU frequency to %u MHz" % (int(frequency) / 1000)) if not self.setFrequency(frequency): success = False # Verify the speed is set to the lowest value minimumFrequency = self.getParameter("scaling_min_freq") currentFrequency = self.getParameter("scaling_cur_freq") if (not minimumFrequency or not currentFrequency or (minimumFrequency != currentFrequency)): logging.error("Could not verify that cpu frequency is set to the minimum value of %s" % minimumFrequency) success = False # Run Load Test self.minimumFrequencyTestTime = self.runLoadTest() if not self.minimumFrequencyTestTime: logging.error("Could not retrieve the minimum frequency test's execution time.") success = False else: logging.info("Minimum frequency load test time: %.2f" % self.minimumFrequencyTestTime) # Set the CPU speed to it's highest value as above. frequency = self.frequencies[0] logging.info("Setting CPU frequency to %u MHz" % (int(frequency) / 1000)) if not self.setFrequency(frequency): success = False maximumFrequency = self.getParameter("scaling_max_freq") currentFrequency = self.getParameter("scaling_cur_freq") if (not maximumFrequency or not currentFrequency or (maximumFrequency != currentFrequency)): logging.error("Could not verify that cpu frequency is set to the maximum value of %s" % maximumFrequency) success = False # Repeat workload test self.maximumFrequencyTestTime = self.runLoadTest() if not self.maximumFrequencyTestTime: logging.error("Could not retrieve the maximum frequency test's execution time.") success = False else: logging.info("Maximum frequency load test time: %.2f" % self.maximumFrequencyTestTime) # Verify MHz increase is comparable to time % decrease predictedSpeedup = (float(maximumFrequency) / float(minimumFrequency)) # If "ida" turbo thing, increase the expectation by 8% if self.cpuFlags and self.idaFlag in self.cpuFlags: logging.info("Found %s flag, increasing expected speedup by %.1f%%" % (self.idaFlag, self.idaSpeedupFactor)) predictedSpeedup = \ (predictedSpeedup * (1.0 / (1.0 - (self.idaSpeedupFactor / 100.0)))) if self.minimumFrequencyTestTime and self.maximumFrequencyTestTime: measuredSpeedup = (self.minimumFrequencyTestTime / self.maximumFrequencyTestTime) logging.info("CPU Frequency Speed Up: %.2f" % predictedSpeedup) logging.info("Measured Speed Up: %.2f" % measuredSpeedup) differenceSpeedUp = (((measuredSpeedup - predictedSpeedup) / predictedSpeedup) * 100) logging.info("Percentage Difference %.1f%%" % differenceSpeedUp) if differenceSpeedUp > self.speedUpTolerance: logging.error("Measured speedup vs expected speedup is %.1f%% and is not within %.1f%% margin." % (differenceSpeedUp, self.speedUpTolerance)) success = False elif differenceSpeedUp < 0: logging.info(""" Measured speed up %.2f exceeded expected speedup %.2f """ % (measuredSpeedup, predictedSpeedup)) else: logging.error("Not enough timing data to calculate speed differences.") return success def runOnDemandTests(self): logging.info("On Demand Governor Test:") logging.info("-------------------------------------------------") differenceOnDemandVsMaximum = None onDemandTestTime = None governor = "ondemand" success = True if governor not in self.governors: logging.warning("%s governor not supported" % governor) else: # Set the governor to "ondemand" logging.info("Setting governor to %s" % governor) if not self.setGovernor(governor): success = False # Wait a fixed period of time, then verify current speed # is the slowest in as before if not self.verifyMinimumFrequency(): logging.error("Could not verify that cpu frequency has settled to the minimum value") success = False # Repeat workload test onDemandTestTime = self.runLoadTest() if not onDemandTestTime: logging.warning("No On Demand load test time available.") success = False else: logging.info("On Demand load test time: %.2f" % onDemandTestTime) if onDemandTestTime and self.maximumFrequencyTestTime: # Compare the timing to the max results from earlier, # again time should be within self.speedUpTolerance differenceOnDemandVsMaximum = \ (abs(onDemandTestTime - self.maximumFrequencyTestTime) / self.maximumFrequencyTestTime) * 100 logging.info("Percentage Difference vs. maximum frequency: %.1f%%" % differenceOnDemandVsMaximum) if differenceOnDemandVsMaximum > self.speedUpTolerance: logging.error("On demand performance vs maximum of %.1f%% is not within %.1f%% margin" % (differenceOnDemandVsMaximum, self.speedUpTolerance)) success = False else: logging.error("Not enough timing data to calculate speed differences.") # Verify the current speed has returned to the lowest speed again if not self.verifyMinimumFrequency(): logging.error("Could not verify that cpu frequency has settled to the minimum value") success = False return success def runPerformanceTests(self): logging.info("Performance Governor Test:") logging.info("-------------------------------------------------") differencePerformanceVsMaximum = None governor = "performance" success = True if governor not in self.governors: logging.warning("%s governor not supported" % governor) else: # Set the governor to "performance" logging.info("Setting governor to %s" % governor) if not self.setGovernor(governor): success = False # Verify the current speed is the same as scaling_max_freq maximumFrequency = self.getParameter("scaling_max_freq") currentFrequency = self.getParameter("scaling_cur_freq") if (not maximumFrequency or not currentFrequency or (maximumFrequency != currentFrequency)): logging.error("Current cpu frequency of %s is not set to the maximum value of %s" % (currentFrequency, maximumFrequency)) success = False # Repeat work load test performanceTestTime = self.runLoadTest() if not performanceTestTime: logging.error("No Performance load test time available.") success = False else: logging.info("Performance load test time: %.2f" % performanceTestTime) if performanceTestTime and self.maximumFrequencyTestTime: # Compare the timing to the max results differencePerformanceVsMaximum = \ (abs(performanceTestTime - self.maximumFrequencyTestTime) / self.maximumFrequencyTestTime) * 100 logging.info("Percentage Difference vs. maximum frequency: %.1f%%" % differencePerformanceVsMaximum) if differencePerformanceVsMaximum > self.speedUpTolerance: logging.error("Performance setting vs maximum of %.1f%% is not within %.1f%% margin" % (differencePerformanceVsMaximum, self.speedUpTolerance)) success = False else: logging.error("Not enough timing data to calculate speed differences.") return success def runConservativeTests(self): logging.info("Conservative Governor Test:") logging.info("-------------------------------------------------") differenceConservativeVsMinimum = None governor = "conservative" success = True if governor not in self.governors: logging.warning("%s governor not supported" % governor) else: # Set the governor to "conservative" logging.info("Setting governor to %s" % governor) if not self.setGovernor(governor): success = False # Set the frequency step to 20, # so that it jumps to minimum frequency path = os.path.join("conservative", "freq_step") if not self.setParameter(path, path, 20, automatch=True): success = False # Wait a fixed period of time, # then verify current speed is the slowest in as before if not self.verifyMinimumFrequency(10): logging.error("Could not verify that cpu frequency has settled to the minimum value") success = False # Set the frequency step to 0, # so that it doesn't gradually increase if not self.setParameter(path, path, 0, automatch=True): success = False # Repeat work load test conservativeTestTime = self.runLoadTest() if not conservativeTestTime: logging.error("No Conservative load test time available.") success = False else: logging.info("Conservative load test time: %.2f" % conservativeTestTime) if conservativeTestTime and self.minimumFrequencyTestTime: # Compare the timing to the max results differenceConservativeVsMinimum = \ (abs(conservativeTestTime - self.minimumFrequencyTestTime) / self.minimumFrequencyTestTime) * 100 logging.info("Percentage Difference vs. minimum frequency: %.1f%%" % differenceConservativeVsMinimum) if differenceConservativeVsMinimum > self.speedUpTolerance: logging.error("Performance setting vs minimum of %.1f%% is not within %.1f%% margin" % (differenceConservativeVsMinimum, self.speedUpTolerance)) success = False else: logging.error("Not enough timing data to calculate speed differences.") return success def restoreGovernors(self): logging.info("Restoring original governor to %s" % (self.originalGovernors[0])) self.setGovernor(self.originalGovernors[0]) def main(): parser = argparse.ArgumentParser() parser.add_argument("-q", "--quiet", action="store_true", help="Suppress output.") parser.add_argument("-c", "--capabilities", action="store_true", help="Only output CPU capabilities.") parser.add_argument("-d", "--debug", action="store_true", help="Turn on debug level output for extra info during test run.") args = parser.parse_args() # Set up the logging system (unless we don't want ANY logging) if not args.quiet or args.debug: logger = logging.getLogger() logger.setLevel(logging.DEBUG) format = '%(asctime)s %(levelname)-8s %(message)s' date_format = '%Y-%m-%d %H:%M:%S' # If we DO want console output if not args.quiet: console_handler = logging.StreamHandler() #logging.StreamHandler() console_handler.setFormatter(logging.Formatter(format,date_format)) console_handler.setLevel(logging.INFO) logger.addHandler(console_handler) # If we ALSO want to create a file for future reference if args.debug: console_handler.setLevel(logging.DEBUG) test = CPUScalingTest() if not os.path.exists(test.cpufreqDirectory): logging.info("CPU Frequency Scaling not supported") return 0 if not test.getSystemCapabilities(): logging.error("Failed to get system capabilities") return 1 returnValues = [] if not args.capabilities: logging.info("Beginning Frequency Governors Testing") returnValues.append(test.runUserSpaceTests()) returnValues.append(test.runOnDemandTests()) returnValues.append(test.runPerformanceTests()) returnValues.append(test.runConservativeTests()) test.restoreGovernors() return 1 if False in returnValues else 0 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/resolution_test0000775000175000017500000000245712646152433024044 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import sys from argparse import ArgumentParser from gi.repository import Gdk def check_resolution(): screen = Gdk.Screen.get_default() n = screen.get_n_monitors() for i in range(n): geom = screen.get_monitor_geometry(i) print('Monitor %d:' % (i + 1)) print(' %d x %d' % (geom.width, geom.height)) def compare_resolution(min_h, min_v): # Evaluate just the primary display screen = Gdk.Screen.get_default() geom = screen.get_monitor_geometry(screen.get_primary_monitor()) print("Minimum acceptable display resolution: %d x %d" % (min_h, min_v)) print("Detected display resolution: %d x %d" % (geom.width, geom.height)) return geom.width >= min_h and geom.height >= min_v def main(): parser = ArgumentParser() parser.add_argument("--horizontal", type=int, default=0, help="Minimum acceptable horizontal resolution.") parser.add_argument("--vertical", type=int, default=0, help="Minimum acceptable vertical resolution.") args = parser.parse_args() if (args.horizontal > 0) and (args.vertical > 0): return not compare_resolution(args.horizontal, args.vertical) else: check_resolution() return 0 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/ansi_parser0000775000175000017500000001077212646152433023107 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 import sys from optparse import OptionParser def parse_buffer(input): output = [""] row = -1 col = 0 escape = "" saved = [0, 0] for ch in input: if ord(ch) == 27 or len(escape) > 0: # On ESC if chr(27) in [escape, ch]: escape = "" if ch == "c": output = [""] row = -1 col = 0 saved = [0, 0] elif ch == "D": row += 1 if row == 0: row = -1 output.append("") elif ch == "M": row -= 1 if row < -len(output): output = [""] + output elif ch == "7": saved = [row + len(output), col] elif ch == "8": [row, col] = saved row -= len(output) elif ord(ch) in [27, 91]: escape = ch continue # Just after hitting the extended ESC marker elif escape == "[": escape = "" if ch in "0123456789;": escape += ch continue elif ch in "Hf": opts = escape.split(";") + ["", ""] row = -len(output) + max(0, int("0" + opts[0]) - 1) col = max(0, int("0" + opts[1]) - 1) elif ch in "s": saved = [row + len(output), col] elif ch in "u": [row, col] = saved row -= len(output) elif ch in "K": if escape == "1": output[row] = " " * (col + 1) + output[row][col + 1:] elif escape == "2": output[row] = "" else: output[row] = output[row][:col] elif ch in "J": if len(escape) == 0: output = output[:row] + [""] else: for i in range(row + len(output) + 1): output[i] = "" elif ch in "A": row -= max(1, int("0" + escape.split(";")[0])) if row <= len(output): row = -len(output) elif ch in "B": row += max(1, int("0" + escape.split(";")[0])) while row >= 0: output.append("") row -= 1 elif ch in "C": col += max(1, int("0" + escape.split(";")[0])) elif ch in "D": col = max(0, col - max(1, int("0" + escape.split(";")[0]))) escape = "" continue # Control char if ch in "\r\n\f\t\b": if ch == "\r": col = 0 if ch in "\n\f": row += 1 if row == 0: row = -1 output.append("") col = 0 if ch == "\t": col = (col + 8) & ~7 if ch == "\b": col = max(0, col - 1) continue # Keep to ascii if ord(ch) not in range(32, 127): ch = "?" if len(output[row]) < col: output[row] += " " * (col - len(output[row])) output[row] = output[row][:col] + ch + output[row][col + 1:] col += 1 return "\n".join(output) def parse_file(file): output = file.read() return parse_buffer(output) def parse_filename(filename): file = open(filename) try: output = parse_file(file) finally: file.close() return output def main(args): usage = "Usage: %prog [OPTIONS] [FILE...]" parser = OptionParser(usage=usage) parser.add_option("-o", "--output", metavar="FILE", help="File where to output the result.") (options, args) = parser.parse_args(args) # Write to stdout if not options.output or options.output == "-": output = sys.stdout # Or from given option else: output = open(options.output, "w") # Read from sdin if not args or (len(args) == 1 and args[0] == "-"): output.write(parse_file(sys.stdin)) # Or from filenames given as arguments else: for arg in args: output.write(parse_filename(arg)) if options.output and options.output != "-": output.close() return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/network0000775000175000017500000005466712646152433022305 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 """ Copyright (C) 2012-2015 Canonical Ltd. Authors Jeff Marcom Daniel Manrique Jeff Lane This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from argparse import ( ArgumentParser, RawTextHelpFormatter ) import fcntl import logging import os import re import shlex import socket import struct import subprocess import tempfile from subprocess import ( CalledProcessError, check_call, check_output, STDOUT ) import sys import time class IPerfPerformanceTest(object): """Measures performance of interface using iperf client and target. Calculated speed is measured against theorectical throughput of selected interface""" def __init__( self, interface, target, fail_threshold, cpu_load_fail_threshold, iperf3, protocol="tcp", data_size="1"): self.iface = Interface(interface) self.target = target self.protocol = protocol self.fail_threshold = fail_threshold self.cpu_load_fail_threshold = cpu_load_fail_threshold self.iperf3 = iperf3 self.data_size = data_size def run(self): # if max_speed is 0, assume it's wifi and move on if self.iface.max_speed == 0: logging.warning("No max speed detected, assuming Wireless device " "and continuing with test.") # Otherwise, no sense in running if we're not running at full speed. elif self.iface.max_speed > self.iface.link_speed: logging.error("Detected link speed (%s) is lower than " "detected max speed (%s)" % (self.iface.link_speed, self.iface.max_speed)) logging.error("Check your device configuration and try again") return 1 # Because we can vary the data size, we need to vary the timeout as # well. It takes an estimated 15 minutes to send 1GB over 10Mb/s. # 802.11b is 11 Mb/s. So we'll assume 1.2x15 minutes or 18 minutes # or 1080 seconds per Gigabit. This will allow for a long period of # time without timeout to catch devices that slow down, and also not # prematurely end iperf on low-bandwidth devices. self.timeout = 1080*int(self.data_size) if (self.iperf3): cmd = "timeout {} iperf3 -c {} -n {}G -i 1 -f m -V".format( self.timeout, self.target, self.data_size) else: cmd = "timeout {} iperf -c {} -n {}G -i 1 -f m".format( self.timeout, self.target, self.data_size) logging.debug(cmd) logging.info("Starting iperf against {}, this could take a while...". format(self.target)) try: iperf_return = check_output( shlex.split(cmd), universal_newlines=True) except CalledProcessError as iperf_exception: if iperf_exception.returncode != 124: # timeout command will return 124 if iperf timed out, so any # other return value means something did fail logging.error("Failed executing iperf: %s", iperf_exception.output) return iperf_exception.returncode else: # this is normal so we "except" this exception and we # "pass through" whatever output iperf did manage to produce. # When confronted with SIGTERM iperf should stop and output # a partial (but usable) result. logging.info("iperf timed out - this should be OK") iperf_return = iperf_exception.output logging.debug(iperf_return) # "CPU Utilization" line present only in iperf3 output cpu = re.findall(r"CPU Utilization.*local/sender\s([\w\.]+)", iperf_return) # iperf3 provides "sender" and "receiver" summaries; remove them iperf_return = re.sub(r".*(sender|receiver)", "", iperf_return) speeds = list(map(float, re.findall(r"([\w\.]+)\sMbits/sec", iperf_return))) invalid_speed = False if speeds: throughput = sum(speeds)/len(speeds) try: percent = throughput / int(self.iface.max_speed) * 100 except (ZeroDivisionError, TypeError): # Catches a condition where the interface functions fine but # ethtool fails to properly report max speed. In this case # it's up to the reviewer to pass or fail. percent = 0 invalid_speed = True logging.info("Min Transfer speed: {} Mb/s".format(min(speeds))) logging.info("Max Transfer speed: {} Mb/s".format(max(speeds))) logging.info("Avg Transfer speed: {} Mb/s".format(throughput)) if invalid_speed: # If we have no link_speed (e.g. wireless interfaces don't # report this), then we shouldn't penalize them because # the transfer may have been reasonable. So in this case, # we'll exit with a pass-warning. logging.info("Unable to obtain maximum speed.") logging.info("Considering the test as passed.") return 0 # Below is guaranteed to not throw an exception because we'll # have exited above if it did. logging.info("{:03.2f}% of theoretical max {} Mb/s". format(percent, int(self.iface.max_speed))) if cpu: logging.info("") logging.info("CPU utilization: {}%".format(cpu[0])) cpu_load = float(cpu[0]) else: cpu_load = 0.0 if percent < self.fail_threshold or \ cpu_load > self.cpu_load_fail_threshold: logging.warn("Poor network performance detected against {}". format(self.target)) if percent < self.fail_threshold: logging.warn(" Transfer speed: {} Mb/s". format(throughput)) logging.warn(" {:03.2f}% of theoretical max {} Mb/s\n". format(percent, int(self.iface.max_speed))) if cpu_load > self.cpu_load_fail_threshold: logging.warn(" CPU load: {}%".format(cpu_load)) logging.warn(" CPU load is above {}% maximum\n". format(self.cpu_load_fail_threshold)) return 30 logging.debug("Passed benchmark against {}".format(self.target)) else: logging.error("Failed iperf benchmark against {}". format(self.target)) return 1 class StressPerformanceTest: def __init__(self, interface, target, iperf3): self.interface = interface self.target = target self.iperf3 = iperf3 def run(self): if self.iperf3: iperf_cmd = 'timeout 320 iperf3 -c {} -t 300'.format(self.target) else: iperf_cmd = 'timeout 320 iperf -c {} -t 300'.format(self.target) print("Running iperf...") iperf = subprocess.Popen(shlex.split(iperf_cmd)) ping_cmd = 'ping -I {} {}'.format(self.interface, self.target) ping = subprocess.Popen(shlex.split(ping_cmd), stdout=subprocess.PIPE) iperf.communicate() ping.terminate() (out, err) = ping.communicate() if iperf.returncode != 0: return iperf.returncode print("Running ping test...") result = 0 time_re = re.compile('(?<=time=)[0-9]*') for line in out.decode().split('\n'): time = time_re.search(line) if time and int(time.group()) > 2000: print(line) print("ICMP packet was delayed by > 2000 ms.") result = 1 if 'unreachable' in line.lower(): print(line) result = 1 return result class Interface(socket.socket): """ Simple class that provides network interface information. """ def __init__(self, interface): super(Interface, self).__init__( socket.AF_INET, socket.IPPROTO_ICMP) self.interface = interface self.dev_path = os.path.join("/sys/class/net", self.interface) def _read_data(self, type): try: return open(os.path.join(self.dev_path, type)).read().strip() except OSError: logging.info("%s: Attribute not found", type) @property def ipaddress(self): freq = struct.pack('256s', self.interface[:15].encode()) try: nic_data = fcntl.ioctl(self.fileno(), 0x8915, freq) except IOError: logging.error("No IP address for %s", self.interface) return 1 return socket.inet_ntoa(nic_data[20:24]) @property def netmask(self): freq = struct.pack('256s', self.interface.encode()) try: mask_data = fcntl.ioctl(self.fileno(), 0x891b, freq) except IOError: logging.error("No netmask for %s", self.interface) return 1 return socket.inet_ntoa(mask_data[20:24]) @property def link_speed(self): return int(self._read_data("speed")) @property def max_speed(self): # Parse ethtool data for max speed since /sys/class/net/DEV/speed only # reports link speed. # Search for things that look like 100baseSX, # 40000baseNX, 10000baseT try: ethinfo = check_output(['ethtool', self.interface], universal_newlines=True, stderr=STDOUT).split(' ') except FileNotFoundError: logging.warning('ethtool not found! Unable to get max speed') ethinfo = None except CalledProcessError as e: logging.error('ethtool returned an error!') logging.error(e.output) ethinfo = None finally: expression = '(\\d+)(base)([A-Z]+)' regex = re.compile(expression) speeds = [0] if ethinfo: for i in ethinfo: hit = regex.search(i) if hit: speeds.append(int(hit.group(1))) return max(speeds) @property def macaddress(self): return self._read_data("address") @property def duplex_mode(self): return self._read_data("duplex") @property def status(self): return self._read_data("operstate") @property def device_name(self): return self._read_data("device/label") def get_test_parameters(args, environ): # Decide the actual values for test parameters, which can come # from one of two possible sources: command-line # arguments, or environment variables. # - If command-line args were given, they take precedence # - Next come environment variables, if set. params = {"test_target_iperf": None} # See if we have environment variables for key in params.keys(): params[key] = os.environ.get(key.upper(), "") # Finally, see if we have the command-line arguments that are the ultimate # override. if args.target: params["test_target_iperf"] = args.target return params def can_ping(the_interface, test_target): working_interface = False num_loops = 0 while (not working_interface) and (num_loops < 48): working_interface = True try: with open(os.devnull, 'wb') as DEVNULL: check_call(["ping", "-I", the_interface, "-c", "1", test_target], stdout=DEVNULL, stderr=DEVNULL) except CalledProcessError as excp: working_interface = False if num_loops == 0: logging.warning("Ping failure on {} ({})". format(the_interface, excp)) if not working_interface: time.sleep(5) num_loops += 1 return working_interface def run_test(args, test_target): # Ensure that interface is fully up by waiting until it can # ping the test server if not can_ping(args.interface, test_target): logging.error("Can't ping test server {} on {}".format(test_target, args.interface)) return 1 # Execute requested networking test if args.test_type.lower() == "iperf": error_number = 0 iperf_benchmark = IPerfPerformanceTest(args.interface, test_target, args.fail_threshold, args.cpu_load_fail_threshold, args.iperf3) if args.datasize: iperf_benchmark.data_size = args.datasize run_num = 0 while not error_number and run_num < args.num_runs: error_number = iperf_benchmark.run() run_num += 1 logging.info(" Finished run number %s ".center(60, "-"), run_num) elif args.test_type.lower() == "stress": stress_benchmark = StressPerformanceTest(args.interface, test_target, args.iperf3) error_number = stress_benchmark.run() else: logging.error("Unknown test type {}".format(args.test_type)) return 10 return error_number def interface_test(args): if not ("test_type" in vars(args)): return # Get the actual test data from one of two possible sources test_parameters = get_test_parameters(args, os.environ) if (args.test_type.lower() == "iperf" or args.test_type.lower() == "stress"): test_targets = test_parameters["test_target_iperf"] # Validate that we got reasonable values if not test_targets or "example.com" in test_targets: # Default values found in config file logging.error("Target server has not been supplied.") logging.info("Configuration settings can be configured 3 different ways:") logging.info("1- If calling the script directly, pass the --target option") logging.info("2- Define the TEST_TARGET_IPERF environment variable") logging.info("3- (If running the test via checkbox/plainbox, define the ") logging.info("target in /etc/xdg/canonical-certification.conf)") logging.info("Please run this script with -h to see more details on how to configure") sys.exit(1) # Testing begins here! # # Make sure that the interface is indeed connected try: check_call(["ip", "link", "set", "dev", args.interface, "up"]) except CalledProcessError as interface_failure: logging.error("Failed to use %s:%s", args.interface, interface_failure) return 1 # Back up routing table, since network down/up process # tends to trash it.... temp = tempfile.TemporaryFile() try: check_call(["ip", "route", "save", "table", "all"], stdout=temp) except CalledProcessError as route_error: logging.warning("Unable to save routing table: %s", route_error) error_number = 0 # Stop all other interfaces extra_interfaces = \ [iface for iface in os.listdir("/sys/class/net") if iface != "lo" and iface != args.interface] for iface in extra_interfaces: logging.debug("Shutting down interface:%s", iface) try: check_call(["ip", "link", "set", "dev", iface, "down"]) except CalledProcessError as interface_failure: logging.error("Failed to shut down %s:%s", iface, interface_failure) error_number = 3 if error_number == 0: test_targets_list = test_targets.split(",") test_targets_list.reverse() # Keep testing until a success or we run out of targets while test_targets_list: test_target = test_targets_list.pop().strip() error_number = run_test(args, test_target) if not error_number: break for iface in extra_interfaces: logging.debug("Restoring interface:%s", iface) try: check_call(["ip", "link", "set", "dev", iface, "up"]) except CalledProcessError as interface_failure: logging.error("Failed to restore %s:%s", iface, interface_failure) error_number = 3 # Restore routing table to original state temp.seek(0) try: # Harmless "RTNETLINK answers: File exists" messages on stderr with open(os.devnull, 'wb') as DEVNULL: check_call(["ip", "route", "restore"], stdin=temp, stderr=DEVNULL) except CalledProcessError as restore_failure: logging.warning("Unable to restore routing table: %s", restore_failure) temp.close() return error_number def interface_info(args): info_set = "" if "all" in vars(args): info_set = args.all for key, value in vars(args).items(): if value is True or info_set is True: key = key.replace("-", "_") try: print( key + ":", getattr(Interface(args.interface), key), file=sys.stderr) except AttributeError: pass def main(): intro_message = """ Network module This script provides benchmarking and information for a specified network interface. Example NIC information usage: network info -i eth0 --max-speed For running iperf test: network test -i eth0 -t iperf --target 192.168.0.1 NOTE: The iperf test requires an iperf server running on the same network segment that the test machine is running on. Configuration ============= Configuration can be supplied in three different ways, with the following priorities: 1- Command-line parameters (see above). 2- Environment variables (example will follow). 3- If run via checkbox/plainbox, /etc/xdg/checkbox-certification.conf can have the below-mentioned environment variables defined in the [environment] section. An example file is provided and can be simply modified with the correct values. Environment variables ===================== The variables are: TEST_TARGET_IPERF example config file =================== [environment] TEST_TARGET_IPERF = iperf-server.example.com **NOTE** """ parser = ArgumentParser( description=intro_message, formatter_class=RawTextHelpFormatter) subparsers = parser.add_subparsers() # Main cli options test_parser = subparsers.add_parser( 'test', help=("Run network performance test")) info_parser = subparsers.add_parser( 'info', help=("Gather network info")) # Sub test options test_parser.add_argument( '-i', '--interface', type=str, required=True) test_parser.add_argument( '-t', '--test_type', type=str, choices=("iperf", "stress"), default="iperf", help=("[iperf *Default*]")) test_parser.add_argument( '-3', '--iperf3', default=False, action="store_true") test_parser.add_argument('--target', type=str) test_parser.add_argument( '--datasize', type=str, default="1", help=("Amount of data to send. For iperf tests this will direct " "iperf to send DATASIZE GB of data to the target.")) test_parser.add_argument( '--config', type=str, default="/etc/checkbox.d/network.cfg", help="Supply config file for target/host network parameters") test_parser.add_argument( '--fail-threshold', type=int, default=40, help=("IPERF Test ONLY. Set the failure threshold (Percent of maximum " "theoretical bandwidth) as a number like 80. (Default is " "%(default)s)")) test_parser.add_argument( '--cpu-load-fail-threshold', type=int, default=100, help=("(IPERF Test ONLY and meaningful ONLY with --iperf3. Set the " "failure threshold (above which the CPU load must not rise) as " "a number like 80. (Default is %(default)s)")) test_parser.add_argument( '--num_runs', type=int, default=1, help=("Number of times to run the test. (Default is %(default)s)")) test_parser.add_argument( '--debug', default=False, action="store_true", help="Turn on verbose output") # Sub info options info_parser.add_argument( '-i', '--interface', type=str, required=True) info_parser.add_argument( '--all', default=False, action="store_true") info_parser.add_argument( '--duplex-mode', default=False, action="store_true") info_parser.add_argument( '--link-speed', default=False, action="store_true") info_parser.add_argument( '--max-speed', default=False, action="store_true") info_parser.add_argument( '--ipaddress', default=False, action="store_true") info_parser.add_argument( '--netmask', default=False, action="store_true") info_parser.add_argument( '--device-name', default=False, action="store_true") info_parser.add_argument( '--macaddress', default=False, action="store_true") info_parser.add_argument( '--status', default=False, action="store_true", help=("displays connection status")) info_parser.add_argument( '--debug', default=False, action="store_true", help="Turn on verbose output") test_parser.set_defaults(func=interface_test) info_parser.set_defaults(func=interface_info) args = parser.parse_args() if args.cpu_load_fail_threshold != 100 and not args.iperf3: parser.error('--cpu-load-fail-threshold can only be set with --iperf3.') if args.debug: logging.basicConfig(level=logging.DEBUG) else: logging.basicConfig(level=logging.INFO) if 'func' not in args: parser.print_help() else: return args.func(args) if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/connect_wireless0000775000175000017500000000362612646152433024147 0ustar sylvainsylvain00000000000000#!/bin/bash # Check nmcli version NMCLI_GTE_0_9_10=0 nmcli general 2>&1 >/dev/null if [ $? -eq 0 ]; then NMCLI_GTE_0_9_10=1 fi # Any active connections? conn='' if [ $NMCLI_GTE_0_9_10 -eq 0 ]; then active_connection=$(nmcli -f SSID,ACTIVE dev wifi list | grep yes) if [ $? -eq 0 ]; then ap=$(echo $active_connection | awk -F\' '{print $2}') conn=$(nmcli -t -f UUID,TYPE,NAME con list | grep wireless | grep -e "$ap$" | head -n 1 | awk -F\: '{print $1}') else conn=$(nmcli -t -f UUID,TYPE con list | grep wireless | head -n 1 | awk -F\: '{print $1}') fi else active_connection=$(nmcli -f SSID,ACTIVE dev wifi | grep yes) if [ $? -eq 0 ]; then ap=$(echo $active_connection | awk '{print $1}') conn=$(nmcli -t -f UUID,TYPE,NAME con show | grep wireless | grep -e "$ap$" | head -n 1 | awk -F\: '{print $1}') else conn=$(nmcli -t -f UUID,TYPE con show | grep wireless | head -n 1 | awk -F\: '{print $1}') fi fi #Strip trailing/leading whitespace conn=$(echo $conn |sed 's/^[ \t]*//;s/[ \t]*$//') # Find out if wireless is enabled if [ $NMCLI_GTE_0_9_10 -eq 0 ]; then nmcli nm wifi | grep -q 'enabled' else nmcli radio wifi | grep -q 'enabled' fi if [ $? -ne 0 ] then # Find out why rfkill list wifi | grep 'Hard blocked' | grep -q yes if [ $? -eq 0 ] then blkmessage='Your wireless may be hardware blocked. You may need to use your wireless key/switch to re-enable it.' echo $blkmessage fi fi # Check if there's a connection already (wireless or otherwise) nmcli dev status | grep -q '\' if [ $? -eq 0 ] then # Disconnect, pause for a short time for iface in `(nmcli -f GENERAL dev list 2>/dev/null || nmcli -f GENERAL dev show) | grep 'GENERAL.DEVICE' | awk '{print $2}'` do nmcli dev disconnect iface $iface done sleep 2 fi nmcli con up uuid "$conn" plainbox-provider-checkbox-0.25/bin/graphics_modes_info0000775000175000017500000000514312646152433024577 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # graphics_modes_info # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Authors: Alberto Milone # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . from __future__ import print_function from __future__ import unicode_literals import sys from checkbox_support.contrib import xrandr def print_modes_info(screen): """Print some information about the detected screen and its outputs""" xrandr._check_required_version((1, 0)) print("Screen %s: minimum %s x %s, current %s x %s, maximum %s x %s" %\ (screen._screen, screen._width_min, screen._height_min, screen._width, screen._height, screen._width_max, screen._height_max)) print(" %smm x %smm" % (screen._width_mm, screen._height_mm)) print("Outputs:") for o in list(screen.outputs.keys()): output = screen.outputs[o] print(" %s" % o, end=' ') if output.is_connected(): print("(%smm x %smm)" % (output.get_physical_width(), output.get_physical_height())) modes = output.get_available_modes() print(" Modes:") for m in range(len(modes)): mode = modes[m] refresh = mode.dotClock / (mode.hTotal * mode.vTotal) print(" [%s] %s x %s @ %s Hz" % (m, mode.width, mode.height, refresh), end=' ') if mode.id == output._mode: print("(current)", end=' ') if m == output.get_preferred_mode(): print("(preferred)", end=' ') print("") else: print("(not connected)") def main(): screen = xrandr.get_current_screen() try: print_modes_info(screen) except(xrandr.UnsupportedRRError): print('Error: RandR version lower than 1.0', file=sys.stderr) if __name__ == '__main__': main() plainbox-provider-checkbox-0.25/bin/keyboard_test0000775000175000017500000000362612646152433023440 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import sys from gettext import gettext as _ import gettext def cli_prompt(): import termios limit = 50 separator = ord("\n") fileno = sys.stdin.fileno() saved_attributes = termios.tcgetattr(fileno) attributes = termios.tcgetattr(fileno) attributes[3] = attributes[3] & ~(termios.ICANON) attributes[6][termios.VMIN] = 1 attributes[6][termios.VTIME] = 0 termios.tcsetattr(fileno, termios.TCSANOW, attributes) sys.stdout.write(_("Enter text:\n")) input = "" try: while len(input) < limit: ch = str(sys.stdin.read(1)) if ord(ch) == separator: break input += ch finally: termios.tcsetattr(fileno, termios.TCSANOW, saved_attributes) def gtk_prompt(): from gi.repository import Gtk, Gdk # create a new window window = Gtk.Window() window.set_type_hint(Gdk.WindowType.TOPLEVEL) window.set_size_request(200, 100) window.set_resizable(False) window.set_title(_("Type Text")) window.connect("delete_event", lambda w, e: Gtk.main_quit()) vbox = Gtk.VBox() vbox.set_homogeneous(False) vbox.set_spacing(0) window.add(vbox) vbox.show() entry = Gtk.Entry() entry.set_max_length(50) vbox.pack_start(entry, True, True, 0) entry.show() hbox = Gtk.HBox() hbox.set_homogeneous(False) hbox.set_spacing(0) vbox.add(hbox) hbox.show() button = Gtk.Button(stock=Gtk.STOCK_CLOSE) button.connect("clicked", lambda w: Gtk.main_quit()) vbox.pack_start(button, False, False, 0) button.set_can_default(True) button.grab_default() button.show() window.show() Gtk.main() def main(args): gettext.textdomain("checkbox") if "DISPLAY" in os.environ: gtk_prompt() else: cli_prompt() return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/rendercheck_test0000775000175000017500000002202412646152433024106 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # rendercheck_test # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Authors: Alberto Milone # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . from subprocess import Popen, PIPE from argparse import ArgumentParser import logging import os import re import tempfile import errno class RenderCheck(object): """A simple class to run the rendercheck suites""" def __init__(self, temp_dir=None): self._temp_dir = temp_dir def _print_test_info(self, suites='all', iteration=1, show_errors=False): '''Print the output of the test suite''' main_command = 'rendercheck' passed = 0 total = 0 if self._temp_dir: # Use the specified path temp_file = tempfile.NamedTemporaryFile(dir=self._temp_dir, delete=False) else: # Use /tmp temp_file = tempfile.NamedTemporaryFile(delete=False) if suites == all: full_command = [main_command, '-f', 'a8r8g8b8'] else: full_command = [main_command, '-t', suites, '-f', 'a8r8g8b8'] try: # Let's dump the output into file as it can be very large # and we don't want to store it in memory process = Popen(full_command, stdout=temp_file, universal_newlines=True) except OSError as exc: if exc.errno == errno.ENOENT: logging.error('Error: please make sure that rendercheck ' 'is installed.') exit(1) else: raise exit_code = process.wait() temp_file.close() # Read values from the file errors = re.compile('.*test error.*') results = re.compile('(.+) tests passed of (.+) total.*') first_error = True with open(temp_file.name) as temp_handle: for line in temp_handle: match_output = results.match(line) match_errors = errors.match(line) if match_output: passed = int(match_output.group(1).strip()) total = int(match_output.group(2).strip()) logging.info('Results:') logging.info(' %d tests passed out of %d.' % (passed, total)) if show_errors and match_errors: error = match_errors.group(0).strip() if first_error: logging.debug('Rendercheck %s suite errors ' 'from iteration %d:' % (suites, iteration)) first_error = False logging.debug(' %s' % error) # Remove the file os.unlink(temp_file.name) return (exit_code, passed, total) def run_test(self, suites=[], iterations=1, show_errors=False): exit_status = 0 for suite in suites: for it in range(iterations): logging.info('Iteration %d of Rendercheck %s suite...' % (it + 1, suite)) (status, passed, total) = \ self._print_test_info(suites=suite, iteration=it + 1, show_errors=show_errors) if status != 0: # Make sure to catch a non-zero exit status logging.info('Iteration %d of Rendercheck %s suite ' 'exited with status %d.' % (it + 1, suite, status)) exit_status = status it += 1 # exit with 1 if passed < total if passed < total: if exit_status == 0: exit_status = 1 return exit_status def get_suites_list(self): '''Return a list of the available test suites''' try: process = Popen(['rendercheck', '--help'], stdout=PIPE, stderr=PIPE, universal_newlines=True) except OSError as exc: if exc.errno == errno.ENOENT: logging.error('Error: please make sure that rendercheck ' 'is installed.') exit(1) else: raise proc = process.communicate()[1].split('\n') found = False tests_pattern = re.compile('.*Available tests: *(.+).*') temp_line = '' tests = [] for line in proc: if found: temp_line += line match = tests_pattern.match(line) if match: first_line = match.group(1).strip().lower() found = True temp_line += first_line for elem in temp_line.split(','): test = elem.strip() if elem: tests.append(test) return tests def main(): usage = 'Usage: %prog [OPTIONS]' all_tests = RenderCheck().get_suites_list() parser = ArgumentParser(usage) parser.add_argument('-i', '--iterations', type=int, default=1, help='The number of times to run the test. \ Default is 1') parser.add_argument('-t', '--test', default='all', help='The name of the test suit to run. \ Available tests: \ %s. \ Default is all' % (', '.join(all_tests))) parser.add_argument('-b', '--blacklist', action='append', help='The name of a test which should not be run.') parser.add_argument('-d', '--debug', action='store_true', help='Choose this to add verbose output \ for debug purposes') parser.add_argument('-o', '--output', default='', help='The path to the log which will be dumped. \ Default is stdout') parser.add_argument('-tp', '--temp', default='', help='The path where to store temporary files. \ Default is /tmp') args = parser.parse_args() # Set up logging to console format = '%(message)s' console_handler = logging.StreamHandler() console_handler.setFormatter(logging.Formatter(format)) # Set up the overall logger logger = logging.getLogger() # This is necessary to ensure debug messages are passed through the logger # to the handler logger.setLevel(logging.DEBUG) # This is what happens when -d and/or -o are passed: # -o -> stdout (info) - log (info) # -d -> only stdout (info and debug) - no log # -d -o -> stdout (info) - log (info and debug) # Write to a log if args.output: # Write INFO to stdout console_handler.setLevel(logging.INFO) logger.addHandler(console_handler) # Specify a log file logfile = args.output logfile_handler = logging.FileHandler(logfile) if args.debug: # Write INFO and DEBUG to a log logfile_handler.setLevel(logging.DEBUG) else: # Write INFO to a log logfile_handler.setLevel(logging.INFO) logfile_handler.setFormatter(logging.Formatter(format)) logger.addHandler(logfile_handler) log_path = os.path.abspath(logfile) logging.info("The log can be found at %s" % log_path) # Write only to stdout else: if args.debug: # Write INFO and DEBUG to stdout console_handler.setLevel(logging.DEBUG) logger.addHandler(console_handler) else: # Write INFO to stdout console_handler.setLevel(logging.INFO) logger.addHandler(console_handler) exit_status = 0 if args.test == 'all': tests = all_tests else: tests = args.test.split(',') for test in args.blacklist: if test in tests: tests.remove(test) rendercheck = RenderCheck(args.temp) exit_status = rendercheck.run_test(tests, args.iterations, args.debug) exit(exit_status) if __name__ == '__main__': main() plainbox-provider-checkbox-0.25/bin/manage_compiz_plugin0000775000175000017500000000422012646152433024757 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # This file is part of Checkbox. # # Copyright 2014-2015 Canonical Ltd. # Written by: # Daniel Manrique # Sylvain Pineau # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . """ manage_compiz_plugin ==================== This script allows enabling or disabling compiz plugins using gsettings. Changes take effect on the fly. """ from gettext import gettext as _ import argparse import gettext import os import sys import subprocess import time PATH="org.compiz.core:/org/compiz/profiles/unity/plugins/core/" KEY="active-plugins" gettext.textdomain("2013.com.canonical.certification.checkbox") gettext.bindtextdomain("2013.com.canonical.certification.checkbox", os.getenv("CHECKBOX_PROVIDER_LOCALE_DIR", None)) plugins = eval(subprocess.check_output(["gsettings", "get", PATH, KEY])) parser = argparse.ArgumentParser(description=_("enable/disable compiz plugins"), epilog=_("Available plugins: {}").format(plugins)) parser.add_argument("plugin", type=str, help=_('Name of plugin to control')) parser.add_argument("action", type=str, choices=['enable', 'disable'], help=_("What to do with the plugin")) args = parser.parse_args() if args.action == 'enable': if args.plugin in plugins: raise SystemExit(_("Plugin {} already enabled").format(args.plugin)) plugins.append(args.plugin) else: if args.plugin not in plugins: raise SystemExit(_("Plugin {} doesn't exist").format(args.plugin)) plugins.remove(args.plugin) subprocess.call(["gsettings", "set", PATH, KEY, str(plugins)]) time.sleep(3) plainbox-provider-checkbox-0.25/bin/gpu_test0000775000175000017500000001602512646152433022430 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # Copyright 2013 Canonical Ltd. # Written by: # Sylvain Pineau # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ Script checking gpu lockups. Several threads are started to exercise the GPU in ways that can cause gpu lockups. Inspired by the workload directory of the xdiagnose package. """ import os import re import subprocess import sys import time from gi.repository import Gio from math import cos, sin from threading import Thread class GlxThread(Thread): """ Start a thread running glxgears """ def run(self): try: self.process = subprocess.Popen( ["glxgears","-geometry", "400x400"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) self.process.communicate() except (subprocess.CalledProcessError, FileNotFoundError) as er: print("WARNING: Unable to start glxgears (%s)" % er) def terminate(self): if not hasattr(self, 'id'): print("WARNING: Attempted to terminate non-existing window.") if hasattr(self, 'process'): self.process.terminate() class RotateGlxThread(Thread): """ Start a thread performing glxgears windows rotations """ def __init__(self, id, offset): Thread.__init__(self) self.id = id self.offset = offset self.cancel = False def run(self): while(1): for j in range(60): x = int(200 * self.offset + 100 * sin(j * 0.2)) y = int(200 * self.offset + 100 * cos(j * 0.2)) coords = "%s,%s" % (x, y) subprocess.call( 'wmctrl -i -r %s -e 0,%s,-1,-1' % (self.id, coords), shell=True ) time.sleep(0.002 * self.offset) if self.cancel: return class ChangeWorkspace(Thread): """ Start a thread performing fast workspace switches """ def __init__(self, hsize, vsize, xsize, ysize): Thread.__init__(self) self.hsize = hsize self.vsize = vsize self.xsize = xsize self.ysize = ysize self.cancel = False def run(self): while(1): for i in range(self.hsize): for j in range(self.vsize): subprocess.call( 'wmctrl -o %s,%s' % (self.xsize * j, self.ysize * i), shell=True) time.sleep(0.5) if self.cancel: # Switch back to workspace #1 subprocess.call('wmctrl -o 0,0', shell=True) return class Html5VideoThread(Thread): """ Start a thread performing playback of an HTML5 video in firefox """ @property def html5_path(self): if os.getenv('PLAINBOX_PROVIDER_DATA'): return os.path.join( os.getenv('PLAINBOX_PROVIDER_DATA'), 'websites/html5_video.html') def run(self): if self.html5_path and os.path.isfile(self.html5_path): subprocess.call( 'firefox %s' % self.html5_path, stdout=open(os.devnull, 'w'), stderr=subprocess.STDOUT, shell=True) else: print("WARNING: unable to start html5 video playback.") print("WARNING: test results may be invalid.") def terminate(self): if self.html5_path and os.path.isfile(self.html5_path): subprocess.call("pkill firefox", shell=True) def check_gpu(log=None): if not log: log = subprocess.check_output(['dmesg'], universal_newlines=True) if re.findall(r'gpu\s+hung', log, flags=re.I): print("GPU hung Detected") return 1 def main(): if check_gpu(): return 1 GlxWindows = [] GlxRotate = [] subprocess.call("pkill 'glxgears|firefox'", shell=True) Html5Video = Html5VideoThread() Html5Video.start() source = Gio.SettingsSchemaSource.get_default() for i in range(2): GlxWindows.append(GlxThread()) GlxWindows[i].start() time.sleep(5) try: windows = subprocess.check_output( 'wmctrl -l | grep glxgears', shell=True) except subprocess.CalledProcessError as er: print("WARNING: Got an exception %s" % er) windows = "" for app in sorted(windows.splitlines(), reverse=True): if not b'glxgears' in app: continue GlxWindows[i].id = str( re.match(b'^(0x\w+)', app).group(0), 'utf-8') break if hasattr(GlxWindows[i], "id"): rotator = RotateGlxThread(GlxWindows[i].id, i + 1) GlxRotate.append(rotator) rotator.start() else: print("WARNING: Window {} not found, not rotating it.".format(i)) hsize = vsize = 2 hsize_ori = vsize_ori = None if source.lookup("org.compiz.core", True): settings = Gio.Settings( "org.compiz.core", "/org/compiz/profiles/unity/plugins/core/" ) hsize_ori = settings.get_int("hsize") vsize_ori = settings.get_int("vsize") settings.set_int("hsize", hsize) settings.set_int("vsize", vsize) time.sleep(5) else: hsize = int(subprocess.check_output( 'gconftool --get /apps/compiz-1/general/screen0/options/hsize', shell=True)) vsize = int(subprocess.check_output( 'gconftool --get /apps/compiz-1/general/screen0/options/vsize', shell=True)) (x_res, y_res) = re.search( b'DG:\s+(\d+)x(\d+)', subprocess.check_output('wmctrl -d', shell=True)).groups() DesktopSwitch = ChangeWorkspace( hsize, vsize, int(x_res) // hsize, int(y_res) // vsize) DesktopSwitch.start() time.sleep(35) for i in range(len(GlxRotate)): GlxRotate[i].cancel = True for i in range(len(GlxWindows)): GlxWindows[i].terminate() DesktopSwitch.cancel = True time.sleep(10) Html5Video.terminate() if check_gpu() or not Html5Video.html5_path: return 1 if source.lookup("org.compiz.core", True): settings = Gio.Settings( "org.compiz.core", "/org/compiz/profiles/unity/plugins/core/") settings.set_int("hsize", hsize_ori) settings.set_int("vsize", vsize_ori) Gio.Settings.sync() if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/sleep_test0000775000175000017500000003555212646152433022753 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 ''' Program to automate system entering and resuming from sleep states Copyright (C) 2010-2014 Canonical Ltd. Author: Jeff Lane Daniel Manrique This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ''' import logging import os import re import sys import syslog from optparse import OptionParser, OptionGroup from subprocess import call class ListDictHandler(logging.StreamHandler): ''' Extends logging.StreamHandler to handle list, tuple and dict objects internally, rather than through external code, mainly used for debugging purposes. ''' def emit(self, record): if isinstance(record.msg, (list, tuple,)): for msg in record.msg: logger = logging.getLogger(record.name) new_record = logger.makeRecord(record.name, record.levelno, record.pathname, record.lineno, msg, record.args, record.exc_info, record.funcName) logging.StreamHandler.emit(self, new_record) elif isinstance(record.msg, dict): for key, val in record.msg.items(): logger = logging.getLogger(record.name) new_msg = '%s: %s' % (key, val) new_record = logger.makeRecord(record.name, record.levelno, record.pathname, record.lineno, new_msg, record.args, record.exc_info, record.funcName) logging.StreamHandler.emit(self, new_record) else: logging.StreamHandler.emit(self, record) class SuspendTest(): ''' Creates an object to handle the actions necessary for suspend/resume testing. ''' def __init__(self): self.wake_time = 0 self.current_time = 0 self.last_time = 0 def CanWeSleep(self, mode): ''' Test to see if S3 state is available to us. /proc/acpi/* is old and will be deprecated, using /sys/power to maintain usefulness for future kernels. ''' states_fh = open('/sys/power/state', 'rb', 0) try: states = states_fh.read().decode('ascii').split() finally: states_fh.close() logging.debug('The following sleep states were found:') logging.debug(states) if mode in states: return True else: return False def GetCurrentTime(self): time_fh = open('/sys/class/rtc/rtc0/since_epoch', 'rb', 0) try: time = int(time_fh.read().decode('ascii')) finally: time_fh.close() return time def SetWakeTime(self, time): ''' Get the current epoch time from /sys/class/rtc/rtc0/since_epoch then add time and write our new wake_alarm time to /sys/class/rtc/rtc0/wakealarm. The math could probably be done better but this method avoids having to worry about whether or not we're using UTC or local time for both the hardware and system clocks. ''' self.last_time = self.GetCurrentTime() logging.debug('Current epoch time: %s' % self.last_time) wakealarm_fh = open('/sys/class/rtc/rtc0/wakealarm', 'wb', 0) try: wakealarm_fh.write('0\n'.encode('ascii')) wakealarm_fh.flush() wakealarm_fh.write('+{}\n'.format(time).encode('ascii')) wakealarm_fh.flush() finally: wakealarm_fh.close() logging.debug('Wake alarm in %s seconds' % time) def DoSuspend(self, mode): ''' Suspend the system and hope it wakes up. Previously tried writing new state to /sys/power/state but that seems to put the system into an uncrecoverable S3 state. So far, pm-suspend seems to be the most reliable way to go. ''' # Set up our start and finish markers self.time_stamp = self.GetCurrentTime() self.start_marker = 'CHECKBOX SLEEP TEST START %s' % self.time_stamp self.end_marker = 'CHECKBOX SLEEP TEST STOP %s' % self.time_stamp self.MarkLog(self.start_marker) if mode == 'mem': status = call('/usr/sbin/pm-suspend') elif mode == 'disk': status = call('/usr/sbin/pm-hibernate') else: logging.debug('Unknown sleep state passed: %s' % mode) status == 1 if status == 0: logging.debug('Successful suspend') else: logging.debug('Error while running pm-suspend') self.MarkLog(self.end_marker) def GetResults(self, mode, perf): ''' This will parse /var/log/messages for our start and end markers. Then it'll find a few key phrases that are part of the sleep and resume process, grab their timestamps, Bob's your Uncle and return a three-tuple consisting of: (PASS/FAIL,Sleep elapsed time, Resume elapsed time) ''' # figure out our elapsed time logfile = '/var/log/syslog' log_fh = open(logfile, 'r') line = '' run_complete = 'Fail' sleep_start_time = 0.0 sleep_end_time = 0.0 resume_start_time = 0.0 resume_end_time = 0.0 while self.start_marker not in line: line = log_fh.readline() if self.start_marker in line: logging.debug("Found Start Marker") loglist = log_fh.readlines() if perf: for idx in range(0, len(loglist)): if 'PM: Syncing filesystems' in loglist[idx]: sleep_start_time = re.split('[\[\]]', loglist[idx])[1].strip() logging.debug('Sleep started at %s' % sleep_start_time) if 'ACPI: Low-level resume complete' in loglist[idx]: sleep_end_time = re.split('[\[\]]', loglist[idx - 1])[1].strip() logging.debug('Sleep ended at %s' % sleep_end_time) resume_start_time = re.split('[\[\]]', loglist[idx])[1].strip() logging.debug('Resume started at %s' % resume_start_time) idx += 1 if 'Restarting tasks' in loglist[idx]: resume_end_time = re.split('[\[\]]', loglist[idx])[1].strip() logging.debug('Resume ended at %s' % resume_end_time) if self.end_marker in loglist[idx]: logging.debug('End Marker found, run appears to ' 'have completed') run_complete = 'Pass' break sleep_elapsed = float(sleep_end_time) - float(sleep_start_time) resume_elapsed = float(resume_end_time) - float(resume_start_time) logging.debug('Sleep elapsed: %.4f seconds' % sleep_elapsed) logging.debug('Resume elapsed: %.4f seconds' % resume_elapsed) else: if self.end_marker in loglist: logging.debug('End Marker found, ' 'run appears to have completed') run_complete = 'Pass' sleep_elapsed = None resume_elapsed = None return (run_complete, sleep_elapsed, resume_elapsed) def MarkLog(self, marker): ''' Write a stamped marker to syslogd (will appear in /var/log/messages). This is used to calculate the elapsed time for each iteration. ''' syslog.syslog(syslog.LOG_INFO, '---' + marker + '---') def CheckAlarm(self, mode): ''' A better method for checking if system woke via rtc alarm IRQ. If the system woke via IRQ, then alarm_IRQ will be 'no' and wakealarm will be an empty file. Otherwise, alarm_IRQ should still say yes and wakealarm should still have a number in it (the original alarm time), indicating the system did not wake by alarm IRQ, but by some other means. ''' rtc = {} rtc_fh = open('/proc/driver/rtc', 'rb', 0) alarm_fh = open('/sys/class/rtc/rtc0/wakealarm', 'rb', 0) try: rtc_data = rtc_fh.read().decode('ascii').splitlines() for item in rtc_data: rtc_entry = item.partition(':') rtc[rtc_entry[0].strip()] = rtc_entry[2].strip() finally: rtc_fh.close() try: alarm = int(alarm_fh.read().decode('ascii')) except ValueError: alarm = None finally: alarm_fh.close() logging.debug('Current RTC entries') logging.debug(rtc) logging.debug('Current wakealarm %s' % alarm) # see if there's something in wakealarm or alarm_IRQ # Return True indicating the alarm is still set # Return False indicating the alarm is NOT set. # This is currently held up by a bug in PM scripts that # does not reset alarm_IRQ when waking from hibernate. # https://bugs.launchpad.net/ubuntu/+source/linux/+bug/571977 if mode == 'mem': if (alarm is not None) or (rtc['alarm_IRQ'] == 'yes'): logging.debug('alarm is %s' % alarm) logging.debug('rtc says alarm_IRQ: %s' % rtc['alarm_IRQ']) return True else: logging.debug('alarm was cleared') return False else: # This needs to be changed after we get a way around the # hibernate bug. For now, pretend that the alarm is unset for # hibernate tests. logging.debug('mode is %s so we\'re skipping success check' % mode) return False def main(): usage = 'Usage: %prog [OPTIONS]' parser = OptionParser(usage) group = OptionGroup(parser, 'This will not work for hibernat testing due' ' to a kernel timestamp bug when doing an S4 ' '(hibernate/resume) sleep cycle') group.add_option('-p', '--perf', action='store_true', default=False, help='Add some output that tells you how long it ' 'takes to enter a sleep state and how long it ' 'takes to resume.') parser.add_option('-i', '--iterations', action='store', type='int', metavar='NUM', default=1, help='The number of times to run the suspend/resume ' 'loop. Default is %default') parser.add_option('-w', '--wake-in', action='store', type='int', metavar='NUM', default=60, dest='wake_time', help='Sets wake up time (in seconds) in the future ' 'from now. Default is %default.') parser.add_option('-s', '--sleep-state', action='store', default='mem', metavar='MODE', dest='mode', help='Sets the sleep state to test. Passing mem will ' 'set the sleep state to Suspend-To-Ram or S3. Passing ' 'disk will set the sleep state to Suspend-To-Disk or S4 ' '(hibernate). Default sleep state is %default') parser.add_option('-d', '--debug', action='store_true', default=False, help='Choose this to add verbose output for debug \ purposes') parser.add_option_group(group) (options, args) = parser.parse_args() options_dict = vars(options) if not (os.geteuid() == 0): parser.error("Must be run as root.") return 1 # Set up logging handler format = '%(message)s' handler = ListDictHandler(sys.stdout) handler.setFormatter(logging.Formatter(format)) handler.setLevel(logging.INFO) # Set up the logger logger = logging.getLogger() logger.setLevel(logging.DEBUG) if options.debug: handler.setLevel(logging.DEBUG) logger.addHandler(handler) logging.debug('Running with these options') logging.debug(options_dict) suspender = SuspendTest() run_result = {} run_count = 0 fail_count = 0 # Chcek fo the S3 state availability if not suspender.CanWeSleep(options.mode): logging.error('%s sleep state not supported' % options.mode) return 1 else: logging.debug('%s sleep state supported, continuing test' % options.mode) # We run the following for the number of iterations requested for iteration in range(0, options.iterations): # Set new alarm time and suspend. suspender.SetWakeTime(options.wake_time) suspender.DoSuspend(options.mode) run_count += 1 run_result[run_count] = suspender.GetResults(options.mode, options.perf) if suspender.CheckAlarm(options.mode): logging.debug('The alarm is still set') if options.perf: sleep_total = 0.0 resume_total = 0.0 logging.info('=' * 20 + ' Test Results ' + '=' * 20) logging.info(run_result) for k in run_result.keys(): sleep_total += run_result[k][1] resume_total += run_result[k][2] sleep_avg = sleep_total / run_count resume_avg = resume_total / run_count logging.info('Average time to sleep: %.4f' % sleep_avg) logging.info('Average time to resume: %.4f' % resume_avg) for run in run_result.keys(): if 'Fail' in run_result[run]: fail_count += 1 if fail_count > 0: logging.error('%s sleep/resume test cycles failed' % fail_count) logging.error(run_result) return 1 else: logging.info('Successfully completed %s sleep iterations' % options.iterations) return 0 if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/samba_test0000775000175000017500000000122712646152433022716 0ustar sylvainsylvain00000000000000#!/bin/bash # # Confirm Samba service is running # Requires: samba winbind # #Verify Samba processes are running smbd=`pgrep smbd` if [ -z "$smbd" ]; then echo "FAIL: smbd is not running." exit 1 fi nmbd=`pgrep nmbd` if [ -z "$nmbd" ]; then echo "FAIL: nmbd is not running." exit 1 fi winbindd=`pgrep winbindd` if [ -z "$winbindd" ]; then echo "FAIL: winbindd is not running." exit 1 fi sid=`net getlocalsid | grep "S-1-5"` #req. root if [ -z "$sid" ]; then echo "FAIL: Default samba workgroup is not set." exit 1 fi users=`net usersidlist | grep "UBUNTU"` if [ -z "$sid" ]; then echo "FAIL: samba userId is not set." exit 1 fi exit 0 plainbox-provider-checkbox-0.25/bin/disk_smart0000775000175000017500000002652412646152433022743 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 """ Script to automate disk SMART testing. Copyright (C) 2010-2016 Canonical Ltd. Authors Jeff Lane Brendan Donegan Rod Smith This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . The purpose of this script is to simply interact with an onboard hard disk and check for SMART capability and then do a little bit of interaction to make sure we can at least do some limited interaction with the hard disk's SMART functions. We assume that SMART is available. The test will fail if this is not the case. The block_device_resource script includes a test of SMART availability. Checkbox tests for SMART availability as part of the disk/smart provider definition, which uses block_device_resource as part of its requires: test. This script runs the SMART short self test. It returns 0 if it's all good, and 1 if it fails. NOTE: This may not work correctly on systems where the onboard storage is controlled by a hardware RAID controller, on external RAID systems, SAN, and USB/eSATA/eSAS attached storage devices. Such systems should be filtered out by the SMART availability test in block_device_resource. Changelog: v1.4: Fix script failure on disks with no pre-existing SMART tests v1.3: Fix detection of SMART availability & activate SMART if available but deactivated. Also use smartctl return value rather than string- matching to determine if a test has failed; this should be more robust, as output strings vary between disks. v1.2: Handle multiple output formats for "smartctl -l" v1.1: Put delay before first attempt to acces log, rather than after v1.0: added debugger class and code to allow for verbose debug output if needed v0.4: corrected some minor things added option parsing to allow for many disks, or disks other than "/dev/sda" V0.3: Removed the arbitrary wait time and implemented a polling method to shorten the test time. Added in Pass/Fail criteria for the final outcome. Added in documentation. V0.2: added minor debug routine V0.1: Fixed some minor bugs and added the SmartEnabled() function V0: First draft """ import os import sys import time import logging import shlex from subprocess import Popen, PIPE, check_call, check_output from subprocess import CalledProcessError from argparse import ArgumentParser class ListHandler(logging.StreamHandler): def emit(self, record): if isinstance(record.msg, (list, tuple)): for msg in record.msg: if type(msg) is bytes: msg = msg.decode() logger = logging.getLogger(record.name) new_record = logger.makeRecord(record.name, record.levelno, record.pathname, record.lineno, msg, record.args, record.exc_info, record.funcName) logging.StreamHandler.emit(self, new_record) else: logging.StreamHandler.emit(self, record) def enable_smart(disk): """Log data and, if necessary, enable SMART on the specified disk. See also smart_support() in block_device_resource script. :param disk: disk device filename (e.g., /dev/sda) :returns: True if enabling smart was successful, False otherwise """ # Check with smartctl to record basic SMART data on the disk command = 'smartctl -i %s' % disk diskinfo_bytes = (Popen(command, stdout=PIPE, shell=True) .communicate()[0]) diskinfo = (diskinfo_bytes.decode(encoding='utf-8', errors='ignore') .splitlines()) logging.debug('SMART Info for disk %s', disk) logging.debug(diskinfo) if len(diskinfo) > 2 and not any("SMART support is" in s and "Enabled" in s for s in diskinfo): logging.debug('SMART disabled; attempting to enable it.') command = 'smartctl -s on %s' % disk try: check_call(shlex.split(command)) return True except CalledProcessError: return False return True def run_smart_test(disk, type='short'): ctl_command = 'smartctl -t %s %s' % (type, disk) logging.debug('Beginning test with %s', ctl_command) smart_proc = Popen(ctl_command, stderr=PIPE, stdout=PIPE, universal_newlines=True, shell=True) ctl_output, ctl_error = smart_proc.communicate() logging.debug(ctl_error + ctl_output) return smart_proc.returncode def get_smart_entries(disk, type='selftest'): entries = [] try: stdout = check_output(['smartctl', '-l', type, disk], universal_newlines=True) returncode = 0 except CalledProcessError as err: stdout = err.output returncode = err.returncode # Skip intro lines stdout_lines = iter(stdout.splitlines()) for line in stdout_lines: if (line.startswith('SMART') or line.startswith('No self-tests have been logged')): break # Get lengths from header try: line = next(stdout_lines) except StopIteration: logging.info('No entries found in log') if not line.startswith('Num'): entries.append('No entries found in log yet') return entries, returncode columns = ['number', 'description', 'status', 'remaining', 'lifetime', 'lba'] lengths = [line.index(i) for i in line.split()] lengths[columns.index('remaining')] += len('Remaining') - len('100%') lengths.append(len(line)) # Get remaining lines entries = [] for line in stdout_lines: if line.startswith('#'): entry = {} for i, column in enumerate(columns): entry[column] = line[lengths[i]:lengths[i + 1]].strip() # Convert some columns to integers entry['number'] = int(entry['number'][1:]) entries.append(entry) return entries, returncode # Returns True if an "in-progress" message is found in the smartctl # output, False if such a message is not found. In the former case, # the in-progress message entries are logged. def in_progress(current_entries): statuses = [entry for entry in current_entries if isinstance(entry, dict) and 'status' in entry and (entry['status'] == 'Self-test routine in progress' or "Self test in progress" in entry['status'])] if statuses: for entry in statuses: logging.debug('%s %s %s %s' % (entry['number'], entry['description'], entry['status'], entry['remaining'])) return True else: return False # Wait for SMART test to complete; return status and return code. # Note that different disks return different types of values. # Some return no status reports while a test is ongoing; others # show a status line at the START of the list of tests, and # others show a status line at the END of the list of tests # (and then move it to the top once the tests are done). def poll_for_status(args, disk, previous_entries): # Priming read... this is here in case our test is finished or fails # immediate after it beginsAccording to. logging.debug('Polling selftest.log for status') keep_going = True while keep_going: # Poll every sleep seconds until test is complete$ time.sleep(args.sleep) current_entries, returncode = get_smart_entries(disk) if current_entries != previous_entries: if not in_progress(current_entries): keep_going = False if args.timeout is not None: if args.timeout <= 0: logging.debug('Polling timed out') return 'Polling timed out', 1 else: args.timeout -= args.sleep if isinstance(current_entries[0], str): return current_entries[0], returncode else: return current_entries[0]['status'], returncode def main(): description = 'Tests that SMART capabilities on disks that support SMART function.' parser = ArgumentParser(description=description) parser.add_argument('-b', '--block-dev', metavar='DISK', default='/dev/sda', help=('the DISK to run this test against ' '[default: %(default)s]')) parser.add_argument('-d', '--debug', action='store_true', default=False, help='prints some debug info') parser.add_argument('-s', '--sleep', type=int, default=5, help=('number of seconds to sleep between checks ' '[default: %(default)s].')) parser.add_argument('-t', '--timeout', type=int, help='number of seconds to timeout from sleeping.') args = parser.parse_args() # Set logging format = '%(levelname)-8s %(message)s' handler = ListHandler() handler.setFormatter(logging.Formatter(format)) logger = logging.getLogger() logger.addHandler(handler) if args.debug: logger.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) # Make sure we're root, because smartctl doesn't work otherwise. if not os.geteuid() == 0: parser.error("You must be root to run this program") disk = args.block_dev if not enable_smart(disk): logging.warning('SMART could not be enabled on %s' % disk) return 1 # Initiate a self test and start polling until the test is done previous_entries, returncode = get_smart_entries(disk) logging.info("Starting SMART self-test on %s", disk) if run_smart_test(disk) != 0: logging.error("Error reported during smartctl test") return 1 if len(previous_entries) > 20: # Abort the previous instance # so that polling can identify the difference run_smart_test(disk) previous_entries, returncode = get_smart_entries(disk) status, returncode = poll_for_status(args, disk, previous_entries) if returncode != 0: log, returncode = get_smart_entries(disk) logging.error("FAIL: SMART Self-Test appears to have failed for some reason. " "Run 'sudo smartctl -l selftest %s' to see the SMART log", disk) logging.debug("Last smartctl return code: %d", returncode) logging.debug("Last smartctl run status: %s", status) return 1 else: logging.info("PASS: SMART Self-Test completed without error") return 0 if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/graphic_memory_info0000775000175000017500000000450712646152433024620 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # graphic_memory_info # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Authors: Shawn Wang # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . """ The graphic_memory_info got information from lspci """ import re import sys import subprocess # 00:01.0 VGA compatible controller: \ # Advanced Micro Devices [AMD] nee ATI Wrestler [Radeon HD 6320] \ # (prog-if 00 [VGA controller]) def vgamem_paser(data=None): '''Parsing type vga and find memory information''' device = None vgamems = list() for line in data.split('\n'): for match in re.finditer('(\d\d:\d\d\.\d) VGA(.+): (.+)', line): device = match.group(1) name = match.group(3) if device is None: continue #Memory at e0000000 (32-bit, prefetchable) [size=256M] for match in re.finditer('Memory(.+) prefetchable\) \[size=(\d+)M\]', line): vgamem_size = match.group(2) vgamem = {'device': device, 'name': name, 'vgamem_size': vgamem_size} vgamems.append(vgamem) return vgamems def main(): '''main function lspci -v -s 00:01.0 | grep ' prefetchable' ''' try: data = subprocess.check_output(['lspci', '-v'], universal_newlines=True) except subprocess.CalledProcessError as exc: return exc.returncode vgamems = vgamem_paser(data) for vgamem in vgamems: output_str = "Device({0})\t Name: {1}\tVGA Memory Size: {2}M" print(output_str.format(vgamem['device'], vgamem['name'], vgamem['vgamem_size'])) if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/removable_storage_test0000775000175000017500000010204112646152433025327 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import argparse import collections import dbus import hashlib import logging import os import subprocess import sys import tempfile import time from gi.repository import GUdev from checkbox_support.dbus import connect_to_system_bus from checkbox_support.dbus.udisks2 import UDISKS2_BLOCK_INTERFACE from checkbox_support.dbus.udisks2 import UDISKS2_DRIVE_INTERFACE from checkbox_support.dbus.udisks2 import UDISKS2_FILESYSTEM_INTERFACE from checkbox_support.dbus.udisks2 import UDisks2Model, UDisks2Observer from checkbox_support.dbus.udisks2 import is_udisks2_supported from checkbox_support.dbus.udisks2 import lookup_udev_device from checkbox_support.dbus.udisks2 import map_udisks1_connection_bus from checkbox_support.heuristics.udisks2 import is_memory_card from checkbox_support.helpers.human_readable_bytes import HumanReadableBytes from checkbox_support.parsers.udevadm import CARD_READER_RE from checkbox_support.parsers.udevadm import GENERIC_RE from checkbox_support.parsers.udevadm import FLASH_RE from checkbox_support.udev import get_interconnect_speed from checkbox_support.udev import get_udev_block_devices from checkbox_support.udev import get_udev_xhci_devices class ActionTimer(): '''Class to implement a simple timer''' def __enter__(self): self.start = time.time() return self def __exit__(self, *args): self.stop = time.time() self.interval = self.stop - self.start class RandomData(): '''Class to create data files''' def __init__(self, size): self.tfile = tempfile.NamedTemporaryFile(delete=False) self.path = '' self.name = '' self.path, self.name = os.path.split(self.tfile.name) self._write_test_data_file(size) def _generate_test_data(self): seed = "104872948765827105728492766217823438120" phrase = ''' Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. ''' words = phrase.replace('\n', '').split() word_deque = collections.deque(words) seed_deque = collections.deque(seed) while True: yield ' '.join(list(word_deque)) word_deque.rotate(int(seed_deque[0])) seed_deque.rotate(1) def _write_test_data_file(self, size): data = self._generate_test_data() while os.path.getsize(self.tfile.name) < size: self.tfile.write(next(data).encode('UTF-8')) return self def md5_hash_file(path): md5 = hashlib.md5() try: with open(path, 'rb') as stream: while True: data = stream.read(8192) if not data: break md5.update(data) except IOError as exc: logging.error("unable to checksum %s: %s", path, exc) return None else: return md5.hexdigest() class DiskTest(): ''' Class to contain various methods for testing removable disks ''' def __init__(self, device, memorycard): self.rem_disks = {} # mounted before the script running self.rem_disks_nm = {} # not mounted before the script running self.rem_disks_memory_cards = {} self.rem_disks_memory_cards_nm = {} self.rem_disks_speed = {} # LP: #1313581, TODO: extend to be rem_disks_driver self.rem_disks_xhci = {} self.data = '' self.device = device self.memorycard = memorycard self._probe_disks() def read_file(self, source): with open(source, 'rb') as infile: try: self.data = infile.read() except IOError as exc: logging.error("Unable to read data from %s: %s", source, exc) return False else: return True def write_file(self, data, dest): try: outfile = open(dest, 'wb', 0) except OSError as exc: logging.error("Unable to open %s for writing.", dest) logging.error(" %s", exc) return False with outfile: try: outfile.write(self.data) except IOError as exc: logging.error("Unable to write data to %s: %s", dest, exc) return False else: outfile.flush() os.fsync(outfile.fileno()) return True def clean_up(self, target): try: os.unlink(target) except OSError as exc: logging.error("Unable to remove tempfile %s", target) logging.error(" %s", exc) def _probe_disks(self): """ Internal method used to probe for available disks Indirectly sets: self.rem_disks{,_nm,_memory_cards,_memory_cards_nm,_speed} """ bus, loop = connect_to_system_bus() if is_udisks2_supported(bus): self._probe_disks_udisks2(bus) else: self._probe_disks_udisks1(bus) def _probe_disks_udisks2(self, bus): """ Internal method used to probe / discover available disks using udisks2 dbus interface using the provided dbus bus (presumably the system bus) """ # We'll need udisks2 and udev to get the data we need udisks2_observer = UDisks2Observer() udisks2_model = UDisks2Model(udisks2_observer) udisks2_observer.connect_to_bus(bus) udev_client = GUdev.Client() # Get a collection of all udev devices corresponding to block devices udev_devices = get_udev_block_devices(udev_client) # Get a collection of all udisks2 objects udisks2_objects = udisks2_model.managed_objects # Let's get a helper to simplify the loop below def iter_filesystems_on_block_devices(): """ Generate a collection of UDisks2 object paths that have both the filesystem and block device interfaces """ for udisks2_object_path, interfaces in udisks2_objects.items(): if (UDISKS2_FILESYSTEM_INTERFACE in interfaces and UDISKS2_BLOCK_INTERFACE in interfaces): yield udisks2_object_path # We need to know about all IO candidates, # let's iterate over all the block devices reported by udisks2 for udisks2_object_path in iter_filesystems_on_block_devices(): # Get interfaces implemented by this object udisks2_object = udisks2_objects[udisks2_object_path] # Find the path of the udisks2 object that represents the drive # this object is a part of drive_object_path = ( udisks2_object[UDISKS2_BLOCK_INTERFACE]['Drive']) # Lookup the drive object, if any. This can fail when try: drive_object = udisks2_objects[drive_object_path] except KeyError: logging.error( "Unable to locate drive associated with %s", udisks2_object_path) continue else: drive_props = drive_object[UDISKS2_DRIVE_INTERFACE] # Get the connection bus property from the drive interface of the # drive object. This is required to filter out the devices we don't # want to look at now. connection_bus = drive_props["ConnectionBus"] desired_connection_buses = set([ map_udisks1_connection_bus(device) for device in self.device]) # Skip devices that are attached to undesired connection buses if connection_bus not in desired_connection_buses: continue # Lookup the udev object that corresponds to this object try: udev_device = lookup_udev_device(udisks2_object, udev_devices) except LookupError: logging.error( "Unable to locate udev object that corresponds to: %s", udisks2_object_path) continue # Get the block device pathname, # to avoid the confusion, this is something like /dev/sdbX dev_file = udev_device.get_device_file() # Get the list of mount points of this block device mount_points = ( udisks2_object[UDISKS2_FILESYSTEM_INTERFACE]['MountPoints']) # Get the speed of the interconnect that is associated with the # block device we're looking at. This is purely informational but # it is a part of the required API interconnect_speed = get_interconnect_speed(udev_device) if interconnect_speed: self.rem_disks_speed[dev_file] = ( interconnect_speed * 10 ** 6) else: self.rem_disks_speed[dev_file] = None # We need to skip-non memory cards if we look for memory cards and # vice-versa so let's inspect the drive and use heuristics to # detect memory cards (a memory card reader actually) now. if self.memorycard != is_memory_card(drive_props['Vendor'], drive_props['Model'], drive_props['Media']): continue # The if/else test below simply distributes the mount_point to the # appropriate variable, to keep the API requirements. It is # confusing as _memory_cards is variable is somewhat dummy. if mount_points: # XXX: Arbitrarily pick the first of the mount points mount_point = mount_points[0] self.rem_disks_memory_cards[dev_file] = mount_point self.rem_disks[dev_file] = mount_point else: self.rem_disks_memory_cards_nm[dev_file] = None self.rem_disks_nm[dev_file] = None def _probe_disks_udisks1(self, bus): """ Internal method used to probe / discover available disks using udisks1 dbus interface using the provided dbus bus (presumably the system bus) """ ud_manager_obj = bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks") ud_manager = dbus.Interface(ud_manager_obj, 'org.freedesktop.UDisks') for dev in ud_manager.EnumerateDevices(): device_obj = bus.get_object("org.freedesktop.UDisks", dev) device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE) udisks = 'org.freedesktop.UDisks.Device' if not device_props.Get(udisks, "DeviceIsDrive"): dev_bus = device_props.Get(udisks, "DriveConnectionInterface") if dev_bus in self.device: parent_model = parent_vendor = '' if device_props.Get(udisks, "DeviceIsPartition"): parent_obj = bus.get_object( "org.freedesktop.UDisks", device_props.Get(udisks, "PartitionSlave")) parent_props = dbus.Interface( parent_obj, dbus.PROPERTIES_IFACE) parent_model = parent_props.Get(udisks, "DriveModel") parent_vendor = parent_props.Get(udisks, "DriveVendor") parent_media = parent_props.Get(udisks, "DriveMedia") if self.memorycard: if (dev_bus != 'sdio' and not FLASH_RE.search(parent_media) and not CARD_READER_RE.search(parent_model) and not GENERIC_RE.search(parent_vendor)): continue else: if (FLASH_RE.search(parent_media) or CARD_READER_RE.search(parent_model) or GENERIC_RE.search(parent_vendor)): continue dev_file = str(device_props.Get(udisks, "DeviceFile")) dev_speed = str(device_props.Get(udisks, "DriveConnectionSpeed")) self.rem_disks_speed[dev_file] = dev_speed if len(device_props.Get(udisks, "DeviceMountPaths")) > 0: devPath = str(device_props.Get(udisks, "DeviceMountPaths")[0]) self.rem_disks[dev_file] = devPath self.rem_disks_memory_cards[dev_file] = devPath else: self.rem_disks_nm[dev_file] = None self.rem_disks_memory_cards_nm[dev_file] = None def get_disks_xhci(self): """ Compare 1. the pci slot name of the devices using xhci 2. the pci slot name of the disks, which is usb3 disks in this case so far, to make sure the usb3 disk does be on the controller using xhci """ # LP: #1378724 udev_client = GUdev.Client() # Get a collection of all udev devices corresponding to block devices udev_devices = get_udev_block_devices(udev_client) # Get a collection of all udev devices corresponding to xhci devices udev_devices_xhci = get_udev_xhci_devices(udev_client) for udev_device_xhci in udev_devices_xhci: pci_slot_name = udev_device_xhci.get_property('PCI_SLOT_NAME') for udev_device in udev_devices: devpath = udev_device.get_property('DEVPATH') if (self._compare_pci_slot_from_devpath(devpath, pci_slot_name)): self.rem_disks_xhci[ udev_device.get_property('DEVNAME')] = 'xhci' return self.rem_disks_xhci def mount(self): passed_mount = {} for key in self.rem_disks_nm: temp_dir = tempfile.mkdtemp() if self._mount(key, temp_dir) != 0: logging.error("can't mount %s", key) else: passed_mount[key] = temp_dir if len(self.rem_disks_nm) == len(passed_mount): self.rem_disks_nm = passed_mount return 0 else: count = len(self.rem_disks_nm) - len(passed_mount) self.rem_disks_nm = passed_mount return count def _mount(self, dev_file, mount_point): return subprocess.call(['mount', dev_file, mount_point]) def umount(self): errors = 0 for disk in self.rem_disks_nm: if not self.rem_disks_nm[disk]: continue if self._umount(disk) != 0: errors += 1 logging.error("can't umount %s on %s", disk, self.rem_disks_nm[disk]) return errors def _umount(self, mount_point): # '-l': lazy umount, dealing problem of unable to umount the device. return subprocess.call(['umount', '-l', mount_point]) def clean_tmp_dir(self): for disk in self.rem_disks_nm: if not self.rem_disks_nm[disk]: continue if not os.path.ismount(self.rem_disks_nm[disk]): os.rmdir(self.rem_disks_nm[disk]) def _compare_pci_slot_from_devpath(self, devpath, pci_slot_name): # LP: #1334991 # a smarter parser to get and validate a pci slot name from DEVPATH # then compare this pci slot name to the other dl = devpath.split('/') s = set([x for x in dl if dl.count(x) > 1]) if ((pci_slot_name in dl) and (dl.index(pci_slot_name) < dl.index('block')) and (not(pci_slot_name in s))): # 1. there is such pci_slot_name # 2. sysfs topology looks like # DEVPATH = ....../pci_slot_name/....../block/...... # 3. pci_slot_name should be unique in DEVPATH return True else: return False def main(): parser = argparse.ArgumentParser() parser.add_argument('device', choices=['usb', 'firewire', 'sdio', 'scsi', 'ata_serial_esata'], nargs='+', help=("The type of removable media " "(usb, firewire, sdio, scsi or ata_serial_esata)" "to test.")) parser.add_argument('-l', '--list', action='store_true', default=False, help="List the removable devices and mounting status") parser.add_argument('-m', '--min-speed', action='store', default=0, type=int, help="Minimum speed a device must support to be " "considered eligible for being tested (bits/s)") parser.add_argument('-p', '--pass-speed', action='store', default=0, type=int, help="Minimum average throughput from all eligible" "devices for the test to pass (MB/s)") parser.add_argument('-i', '--iterations', action='store', default='1', type=int, help=("The number of test cycles to run. One cycle is" "comprised of generating --count data files of " "--size bytes and writing them to each device.")) parser.add_argument('-c', '--count', action='store', default='1', type=int, help='The number of random data files to generate') parser.add_argument('-s', '--size', action='store', type=HumanReadableBytes, default='1MiB', help=("The size of the test data file to use. " "You may use SI or IEC suffixes like: 'K', 'M'," "'G', 'T', 'Ki', 'Mi', 'Gi', 'Ti', etc. Default" " is %(default)s")) parser.add_argument('--auto-reduce-size', action='store_true', default=False, help=("Automatically reduce size to fit in the target" "filesystem. Reducing until fits in 1MiB")) parser.add_argument('-n', '--skip-not-mount', action='store_true', default=False, help=("skip the removable devices " "which haven't been mounted before the test.")) parser.add_argument('--memorycard', action="store_true", help=("Memory cards devices on bus other than sdio " "require this parameter to identify " "them as such")) parser.add_argument('--driver', choices=['xhci_hcd'], help=("Detect the driver of the host controller." "Only xhci_hcd for usb3 is supported so far.")) args = parser.parse_args() test = DiskTest(args.device, args.memorycard) errors = 0 # If we do have removable drives attached and mounted if len(test.rem_disks) > 0 or len(test.rem_disks_nm) > 0: if args.list: # Simply output a list of drives detected print('-' * 20) print("Removable devices currently mounted:") if args.memorycard: if len(test.rem_disks_memory_cards) > 0: for disk, mnt_point in test.rem_disks_memory_cards.items(): print("%s : %s" % (disk, mnt_point)) else: print("None") print("Removable devices currently not mounted:") if len(test.rem_disks_memory_cards_nm) > 0: for disk in test.rem_disks_memory_cards_nm: print(disk) else: print("None") else: if len(test.rem_disks) > 0: for disk, mnt_point in test.rem_disks.items(): print("%s : %s" % (disk, mnt_point)) else: print("None") print("Removable devices currently not mounted:") if len(test.rem_disks_nm) > 0: for disk in test.rem_disks_nm: print(disk) else: print("None") print('-' * 20) return 0 else: # Create a file, copy to disk and compare hashes if args.skip_not_mount: disks_all = test.rem_disks else: # mount those haven't be mounted yet. errors_mount = test.mount() if errors_mount > 0: print("There're total %d device(s) failed at mounting." % errors_mount) errors += errors_mount disks_all = dict(list(test.rem_disks.items()) + list(test.rem_disks_nm.items())) if len(disks_all) > 0: print("Found the following mounted %s partitions:" % ', '.join(args.device)) for disk, mount_point in disks_all.items(): supported_speed = test.rem_disks_speed[disk] print(" %s : %s : %s bits/s" % (disk, mount_point, supported_speed), end="") if (args.min_speed and int(args.min_speed) > int(supported_speed)): print(" (Will not test it, speed is below %s bits/s)" % args.min_speed, end="") print("") print('-' * 20) disks_eligible = {disk: disks_all[disk] for disk in disks_all if not args.min_speed or int(test.rem_disks_speed[disk]) >= int(args.min_speed)} if len(disks_eligible) == 0: logging.error( "No %s disks with speed higher than %s bits/s", args.device, args.min_speed) return 1 write_sizes = [] test_files = {} disks_freespace = {} for disk, path in disks_eligible.items(): stat = os.statvfs(path) disks_freespace[disk] = stat.f_bfree * stat.f_bsize smallest_freespace = min(disks_freespace.values()) desired_size = args.size if desired_size > smallest_freespace: if args.auto_reduce_size: min_space = HumanReadableBytes("1MiB") if smallest_freespace < min_space: raise IOError("Not enough space. {} is required" .format(min_space)) new_size = HumanReadableBytes(int(0.8 * smallest_freespace)) logging.warning("Automatically reducing test data size" ". {} requested. Reducing to {}." .format(desired_size, new_size)) desired_size = new_size else: raise IOError("Not enough space. {} is required" .format(desired_size)) # Generate our data file(s) for count in range(args.count): test_files[count] = RandomData(desired_size) write_sizes.append(os.path.getsize( test_files[count].tfile.name)) total_write_size = sum(write_sizes) try: for disk, mount_point in disks_eligible.items(): print("%s (Total Data Size / iteration: %0.4f MB):" % (disk, (total_write_size / 1024 / 1024))) iteration_write_size = ( total_write_size * args.iterations) / 1024 / 1024 iteration_write_times = [] for iteration in range(args.iterations): target_file_list = [] write_times = [] for file_index in range(args.count): parent_file = test_files[file_index].tfile.name parent_hash = md5_hash_file(parent_file) target_filename = ( test_files[file_index].name + '.%s' % iteration) target_path = mount_point target_file = os.path.join(target_path, target_filename) target_file_list.append(target_file) test.read_file(parent_file) with ActionTimer() as timer: if not test.write_file(test.data, target_file): logging.error( "Failed to copy %s to %s", parent_file, target_file) errors += 1 continue write_times.append(timer.interval) child_hash = md5_hash_file(target_file) if parent_hash != child_hash: logging.warning( "[Iteration %s] Parent and Child" " copy hashes mismatch on %s!", iteration, target_file) logging.warning( "\tParent hash: %s", parent_hash) logging.warning( "\tChild hash: %s", child_hash) errors += 1 for file in target_file_list: test.clean_up(file) total_write_time = sum(write_times) # avg_write_time = total_write_time / args.count try: avg_write_speed = (( total_write_size / total_write_time) / 1024 / 1024) except ZeroDivisionError: avg_write_speed = 0.00 finally: iteration_write_times.append(total_write_time) print("\t[Iteration %s] Average Speed: %0.4f" % (iteration, avg_write_speed)) for iteration in range(args.iterations): iteration_write_time = sum(iteration_write_times) print("\tSummary:") print("\t\tTotal Data Attempted: %0.4f MB" % iteration_write_size) print("\t\tTotal Time to write: %0.4f secs" % iteration_write_time) print("\t\tAverage Write Time: %0.4f secs" % (iteration_write_time / args.iterations)) try: avg_write_speed = (iteration_write_size / iteration_write_time) except ZeroDivisionError: avg_write_speed = 0.00 finally: print("\t\tAverage Write Speed: %0.4f MB/s" % avg_write_speed) finally: for key in range(args.count): test.clean_up(test_files[key].tfile.name) if (len(test.rem_disks_nm) > 0): if test.umount() != 0: errors += 1 test.clean_tmp_dir() if errors > 0: logging.warning( "Completed %s test iterations, but there were" " errors", args.count) return 1 else: # LP: 1313581 # Try to figure out whether the disk # is SuperSpeed USB and using xhci_hcd driver. if (args.driver == 'xhci_hcd'): # The speed reported by udisks is sometimes # less than 5G bits/s, for example, # it may be 705032705 bits/s # So using # 500000000 # = 500 M bits/s # > 480 M bits/s ( USB 2.0 spec.) # to make sure that it is higher USB version than 2.0 # # int() for int(test.rem_disks_speed[disk]) # is necessary # because the speed value of # the dictionary rem_disks_speed is # 1. str or int from _probe_disks_udisks2 # 2. int from _probe_disks_udisks1. # This is really a mess. : ( print("\t\t--------------------------------") if(500000000 < int(test.rem_disks_speed[disk])): print("\t\tDevice Detected: SuperSpeed USB") # Unlike rem_disks_speed, # which must has the connect speed # for each disk devices, # disk devices may not use xhci as # controller drivers. # This will raise KeyError for no # associated disk device was found. xhci_disks = test.get_disks_xhci() # pep8 style suggest to limit the try clause # to the absolute minimum amount of code necessary try: disk_xhci_flag = xhci_disks[disk] except KeyError: print("\t\tDisk does not use xhci_hci.") return 1 else: if('xhci' == disk_xhci_flag): print("\t\tDriver Detected: xhci_hcd") else: print("\t\tDisk does not use xhci_hci.") logging.debug("disk_xhci_flag is not xhci") return 1 else: # Give it a hint for the detection failure. # LP: #1362902 print(("\t\tNo SuperSpeed USB using xhci_hcd " "was detected correctly.")) print(("\t\tHint: please use dmesg to check " "the system status again.")) return 1 # Pass is not assured if (not args.pass_speed or avg_write_speed >= args.pass_speed): return 0 else: print("FAIL: Average speed was lower than desired " "pass speed of %s MB/s" % args.pass_speed) return 1 else: logging.error("No device being mounted successfully " "for testing, aborting") return 1 else: # If we don't have removable drives attached and mounted logging.error("No removable drives were detected, aborting") return 1 if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/network_check0000775000175000017500000000350412646152433023422 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 """ Check that it's possible to establish a http connection against ubuntu.com """ from subprocess import call from argparse import ArgumentParser import http.client import urllib.request, urllib.error, urllib.parse import sys def check_url(url): """ Open URL and return True if no exceptions were raised """ try: urllib.request.urlopen(url) except (urllib.error.URLError, http.client.InvalidURL): return False return True def main(): """ Check HTTP and connection """ parser = ArgumentParser() parser.add_argument('-u', '--url', action='store', default='http://cdimage.ubuntu.com', help='The target URL to try. Default is %(default)s') parser.add_argument('-a', '--auto', action='store_true', default=False, help='Runs in Automated mode, with no visible output') args = parser.parse_args() url = {"http": args.url} results = {} for protocol, value in url.items(): results[protocol] = check_url(value) bool2str = {True: 'Success', False: 'Failed'} message = ("HTTP connection: %(http)s\n" % dict([(protocol, bool2str[value]) for protocol, value in results.items()])) command = ["zenity", "--title=Network", "--text=%s" % message] if all(results.values()): command.append("--info") else: command.append("--error") if not args.auto: try: call(command) except OSError: print("Zenity missing; unable to report test result:\n %s" % message) if any(results.values()): return 0 else: return 1 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/brightness_test0000775000175000017500000001305412646152433024004 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # brightness_test # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Authors: Alberto Milone # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . import sys import os import time from sys import stdout, stderr from glob import glob class Brightness(object): def __init__(self, path='/sys/class/backlight'): self.sysfs_path = path self._interfaces = self._get_interfaces_from_path() def read_value(self, path): '''Read the value from a file''' # See if the source is a file or a file object # and act accordingly file = path if file == None: lines_list = [] else: # It's a file if not hasattr(file, 'write'): myfile = open(file, 'r') lines_list = myfile.readlines() myfile.close() # It's a file object else: lines_list = file.readlines() return int(''.join(lines_list).strip()) def write_value(self, value, path, test=None): '''Write a value to a file''' value = '%d' % value # It's a file if not hasattr(path, 'write'): if test: path = open(path, 'a') else: path = open(path, 'w') path.write(value) path.close() # It's a file object else: path.write(value) def get_max_brightness(self, path): full_path = os.path.join(path, 'max_brightness') return self.read_value(full_path) def get_actual_brightness(self, path): full_path = os.path.join(path, 'actual_brightness') return self.read_value(full_path) def get_last_set_brightness(self, path): full_path = os.path.join(path, 'brightness') return self.read_value(full_path) def _get_interfaces_from_path(self): '''check all the files in a directory looking for quirks''' interfaces = [] if os.path.isdir(self.sysfs_path): for d in glob(os.path.join(self.sysfs_path, '*')): if os.path.isdir(d): interfaces.append(d) return interfaces def get_best_interface(self): '''Get the best acpi interface''' # Follow the heuristic in https://www.kernel.org/doc/Documentation/ #ABI/stable/sysfs-class-backlight if len(self._interfaces) == 0: return None else: interfaces = {} for interface in self._interfaces: try: with open(interface + '/type') as type_file: iface_type = type_file.read().strip() except IOError: continue interfaces[iface_type] = interface if interfaces.get('firmware'): return interfaces.get('firmware') elif interfaces.get('platform'): return interfaces.get('platform') elif interfaces.get('raw'): return interfaces.get('raw') else: fallback_type = sorted(interfaces.keys())[0] print("WARNING: no interface of type firmware/platform/raw " "found. Using {} of type {}".format( interfaces[fallback_type], fallback_type)) return interfaces[fallback_type] def was_brightness_applied(self, interface): '''See if the selected brightness was applied Note: this doesn't guarantee that screen brightness changed. ''' if (abs(self.get_actual_brightness(interface) - self.get_last_set_brightness(interface)) > 1): return False else: return True def main(): brightness = Brightness() # Make sure that we have root privileges if os.geteuid() != 0: print('Error: please run this program as root', file=sys.stderr) exit(1) interface = brightness.get_best_interface() # If no backlight interface can be found if not interface: exit(1) # Get the current brightness which we can restore later current_brightness = brightness.get_actual_brightness(interface) # Get the maximum value for brightness max_brightness = brightness.get_max_brightness(interface) # Set the brightness to half the max value brightness.write_value(max_brightness / 2, os.path.join(interface, 'brightness')) # Check that "actual_brightness" reports the same value we # set "brightness" to exit_status = not brightness.was_brightness_applied(interface) # Wait a little bit before going back to the original value time.sleep(2) # Set the brightness back to its original value brightness.write_value(current_brightness, os.path.join(interface, 'brightness')) exit(exit_status) if __name__ == '__main__': main() plainbox-provider-checkbox-0.25/bin/fresh_rate_info0000775000175000017500000000417512646152433023736 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # fresh_rate_info # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Authors: Shawn Wang # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . """ The fresh_rate_info got information from xrandr """ import re import sys import subprocess def xrandr_paser(data=None): '''return an array(xrandrs)''' resolution = None xrandrs = list() for line in str(data).split('\n'): for match in re.finditer('(.+) connected (\d+x\d+)\+', line): connector = match.group(1) resolution = match.group(2) break if resolution is None: continue for match in re.finditer('{0}\s+(.+)\*'.format(resolution), line): refresh_rate = match.group(1) xrandr = {'connector': connector, 'resolution': resolution, 'refresh_rate': refresh_rate} xrandrs.append(xrandr) return xrandrs def main(): '''main function''' try: data = subprocess.check_output(['xrandr', '--current'], universal_newlines=True) except subprocess.CalledProcessError as exc: return exc.returncode xrandrs = xrandr_paser(data) for xrandr in xrandrs: output_str = "Connector({0}):\t Resolution: {1} \t RefreshRate: {2}" print(output_str.format(xrandr['connector'], xrandr['resolution'], xrandr['refresh_rate'])) if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/dkms_info0000775000175000017500000004445512646152433022557 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # encoding: utf-8 # Copyright 2015 Canonical Ltd. # Written by: # Shawn Wang # Zygmunt Krynicki # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ dkms_info provides device package information. supported package types: - dkms (Dynamic Kernel Module Support): provides kernel modules - non-dkms: packages that with modaliases header and don't exist in dkms list - hardware modalias: might be unused dkms or config package - oemalias: It is like non-dkms(w/o modalias) supported output format: - onelines: one line per packages with matched modaliases information - dumps: json output (fully information) """ import fnmatch import functools import email.parser import io import json import logging import os import subprocess import sys import unittest from guacamole import Command try: from unittest import mock except ImportError: from plainbox.vendor import mock _logger = logging.getLogger(None) @functools.lru_cache() def get_system_module_list(): """ Use lsmod to list current kernel modules. :returns: A list of module names that are loaded into the current kernel. """ _logger.info("Looking at inserted kernel modules") modules = [] with io.open("/proc/modules", 'rt', encoding='UTF-8') as stream: for line in stream.readlines(): modules.append(line.split()[0].strip()) return modules @functools.lru_cache() def get_system_modaliases(): r""" List machine modaliases. :returns: dict of hardware modaliases. key: modalias_type value: list of modalias_string """ _logger.info("Looking for modalias files in /sys/devices") result = {} name = "modalias" for root, dirs, files in os.walk("/sys/devices/"): if name in files: with io.open(os.path.join(root, name), 'rt', encoding='UTF-8') as stream: data = stream.read().strip() (modalias_type, modalias_string) = data.split(":", 1) if modalias_type not in result: result[modalias_type] = [] if modalias_string not in result[modalias_type]: result[modalias_type].append(modalias_string) return result def get_installed_dkms_modules(): """ Query dkms_status from /var/lib/dkms/. An installed dkms module has the below directory. /var/lib/dkms/// :returns: list of (, ) """ _dkmses = [] _logger.info("Querying dkms database") path = "/var/lib/dkms/" for root, dirs, files in os.walk(path): if os.uname().release in dirs: dkms = root[len(path):].split("/") if len(dkms) != 2: continue _dkmses.append(dkms) return _dkmses @functools.lru_cache() def match_patterns(patterns): """ Check modalias patterns matched with modalias, or type is oemalias. oemalias is a special pattern_type for oem. :param patterns: list of modalias pattern from debian package. :returns: list of modalias pattern matched with hardware modalias """ _logger.info("Looking for modalias objects matching") matched = [] if not patterns: return matched hw_modaliases = get_system_modaliases() for pattern in patterns: pattern_array = pattern.split(":", 1) if len(pattern_array) < 2: _logger.info("skip pattern {}, can't find type".format(pattern)) continue (pattern_type, pattern_string) = pattern_array if pattern_type == "oemalias": matched.append(pattern) if pattern_type not in hw_modaliases: continue for item in hw_modaliases[pattern_type]: if fnmatch.fnmatch(item, pattern_string): matched.append(pattern) return matched class SystemInfoTests(unittest.TestCase): """Tests for System Information Parsing and Collection.""" _proc_modules = """\ xt_REDIRECT 16384 3 - Live 0x0000000000000000 nf_nat_redirect 16384 1 xt_REDIRECT, Live 0x0000000000000000 xt_hl 16384 3 - Live 0x0000000000000000 hid_generic 16384 0 - Live 0x0000000000000000 usbhid 53248 0 - Live 0x0000000000000000 hid 110592 2 hid_generic,usbhid, Live 0x0000000000000000 overlay 45056 1 - Live 0x0000000000000000 """ _modalias = """\ usb:v1D6Bp0003d0319dc09dsc00dp03ic09isc00ip00in00 """ def setUp(self): """Common setup code.""" get_system_module_list.cache_clear() get_system_modaliases.cache_clear() @mock.patch('io.open', mock.mock_open(read_data=_proc_modules)) def test_get_module_list__calls_and_parses_lsmod(self): """Ensure that get_module_list() parses lsmod output.""" # NOTE: Return value was loaded from my system running kernel 4.0. # The first few and last rows to be precise. modules = get_system_module_list() self.assertEqual(modules, [ 'xt_REDIRECT', 'nf_nat_redirect', 'xt_hl', 'hid_generic', 'usbhid', 'hid', 'overlay']) @mock.patch('io.open', mock.mock_open(read_data=_proc_modules)) def test_get_module_list_is_cached(self): """Ensure that get_module_list() cache works.""" modules1 = get_system_module_list() modules2 = get_system_module_list() self.assertIn('xt_REDIRECT', modules1) self.assertIn('overlay', modules2) self.assertEqual(modules1, modules2) @mock.patch('os.walk') @mock.patch('io.open', mock.mock_open(read_data=_modalias)) def test_get_system_modalias(self, mock_os_walk): """test_get_system_modalias.""" mock_os_walk.return_value = [ ("/sys/devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0/modalias", ["driver", "subsystem"], ["modalias", "uevent"]), ] """fetch hw_modaliases from machine and check modalis types.""" modaliases = get_system_modaliases() self.assertEqual(len(modaliases), 1) self.assertIn("usb", modaliases) @mock.patch('os.uname') @mock.patch('os.walk') def test_get_installed_dkms_modules(self, mock_os_walk, mock_os_uname): """test_get_installed_dkms_modules.""" mock_os_walk.return_value = [ ("/var/lib/dkms/hello/0.1", ["3.19.0-15-generic", "build", "source"], []), ] o = mock.Mock() o.release = "3.19.0-15-generic" mock_os_uname.return_value = o self.assertEqual([['hello', '0.1']], get_installed_dkms_modules()) @mock.patch('__main__.get_system_modaliases') def test_match_patterns(self, mock_get_system_modaliases): """Test of match_patterns.""" mock_get_system_modaliases.return_value = { "pci": ["v0000168Cd00000036sv0000103Csd0000217Fbc02sc80i00", "v00008086d00008C26sv0000103Csd000022D9bc0Csc03i20"], "usb": ["v8087p8000d0005dc09dsc00dp01ic09isc00ip00in00", "v1D6Bp0002d0319dc09dsc00dp00ic09isc00ip00in00"], } pkg_modalieses = ["pci:v00008086d00008C26sv*sd*bc*sc*i*", "usb:v07B4p010Ad0102dc*dsc*dp*ic*isc*ip*in*", "oemalias:test"] matched_modalieses = match_patterns(tuple(pkg_modalieses)) # match_patterns self.assertIn("pci:v00008086d00008C26sv*sd*bc*sc*i*", matched_modalieses) self.assertIn("oemalias:test", matched_modalieses) self.assertNotIn("usb:v07B4p010Ad0102dc*dsc*dp*ic*isc*ip*in*", matched_modalieses) class DkmsPackage(object): """ Handle DKMS type device package, DKMS is a kernel module framework. It generate modules for installed kernel or different kernel versions. The dkms modules will be copied to /lib/modulesa/`uname -r`/updates/dkms/. Those modules might be load by modaliases information. """ def __init__(self, name, version): """ init of DkmsPackage, define all the attribute. :param name: DKMS module name :param version: DKMS module version """ self.dkms_name = name self.dkms_ver = version self.pkg_name = self._query_package() self.kernel_ver = os.uname().release self.arch = os.uname().machine self.mods = self._list_modules() self.install_mods = self._list_install_modules() self.pkg = None def _query_package(self): """ Query debian package of dkms. Use dpkg -S to check dkms src path of debian package. :return: string of package name or None """ path = "/usr/src/{}-{}/dkms.conf".format(self.dkms_name, self.dkms_ver) _logger.info("Looking for packages that provide: %s", path) dpkg_info_root = "/var/lib/dpkg/info" for fn in os.listdir(dpkg_info_root): if not fn.endswith(".list"): continue with io.open(os.path.join(dpkg_info_root, fn), 'rt', encoding='UTF-8') as stream: if path in stream.read(): return fn[:-len(".list")] return None def _list_modules(self): """ List all the kernel modules that provide by the dkms package. Module name (.ko) with "-" will be replace to "_" when module loaded. :param path: The directory to look at. :return: List of kernel modules """ path = "/var/lib/dkms/{}/{}/{}/{}/module".format( self.dkms_name, self.dkms_ver, self.kernel_ver, self.arch) _logger.info("Looking for kernel modules in %s", path) result = [] for module_file in os.listdir(path): (module, extension) = os.path.splitext(module_file) if extension == ".ko": result.append(module.replace("-", "_")) return result def _list_install_modules(self): """ Return a dict of install_modules. key is installed module name value is tuple of matched patterns :return: Dict of installed dkms modules """ install_mods = {} for m in self.mods: if m not in get_system_module_list(): continue _logger.info("Inspecting module %s", m) output = subprocess.check_output(["modinfo", m], universal_newlines=True) aliases = [] for line in output.splitlines(): if not line.startswith("alias:"): continue key, value = line.split(':', 1) aliases.append(value.strip()) install_mods[m] = match_patterns(tuple(aliases)) return install_mods def _headers_to_dist(pkg_str): """ Convert rft822 headers string to dict. :param headers: deb822 headers object :return: dict, the key is lowercase of deb822 headers key """ header = email.parser.Parser().parsestr(pkg_str) target = {} for key in header.keys(): target[key.lower()] = header[key] return target class DebianPackageHandler(object): """Use rtf822(email) to handle the package information from file_object.""" def __init__(self, extra_pkgs=[], file_object=None): """ DebianPackageHandler. :param file_object: default file open from /var/lib/dpkg/status, where stored system package information """ if file_object is None: file_object = io.open('/var/lib/dpkg/status', 'rt', encoding='UTF-8') self._file_object = file_object self.extra_pkgs = extra_pkgs self.pkgs = self._get_device_pkgs() def _gen_all_pkg_strs(self): """ Get package information in /var/lib/dpkg/status. :returns: A generator of debian package. """ _logger.info("Loading information about all packages") for pkg_str in self._file_object.read().split('\n\n'): yield pkg_str def _get_device_pkgs(self): """ Only device packages have debian package header 'Modaliases'. This method get packages with the key ``modaliases``. Use the method instead of get_all_pkgs for performance issues. :returns: A list of dict , the dict is converted from debian package header. """ _logger.info("Looking for packages providing modaliases") _modalias_pkgs = {} target_str = "" result = {} for pkg_str in self._gen_all_pkg_strs(): for pkg in self.extra_pkgs: if pkg.pkg_name is None: continue pstr = "Package: {}".format(pkg.pkg_name) if pstr in pkg_str: _logger.info("Gathering information of package, {}".format( pkg.pkg_name)) pkg.pkg = _headers_to_dist(pkg_str) break else: if "Modaliases:" in pkg_str: pkg = _headers_to_dist(pkg_str) (modalias_header, pattern_str) = \ pkg['modaliases'].strip(")").split("(") patterns = pattern_str.split(', ') patterns.sort() pkg['match_patterns'] = match_patterns(tuple(patterns)) with io.open("/var/lib/dpkg/info/{}.list".format(pkg['package']), 'rt', encoding='UTF-8') as stream: if "/dkms.conf" in stream.read(): pkg['unused_dkms'] = True result[pkg['package']] = pkg return result def to_json(self): return json.dumps({ "dkms": self.extra_pkgs, "non-dkms": self.pkgs }, default=lambda o: o.__dict__, sort_keys=True, indent=4) def to_outline(self): result = "" for pkg in self.extra_pkgs: if pkg.pkg is None: continue result = "{}\n{}_{}: {}".format( result, pkg.pkg_name, pkg.pkg["version"], pkg.install_mods) for pkg_name, pkg in self.pkgs.items(): extra_str = "" if "unused_dkms" in pkg: extra_str = "- " result = "{}\n{}{}_{}: {}".format( result, extra_str, pkg_name, pkg["version"], pkg['match_patterns']) return result class DebianPackageHandlerTest(unittest.TestCase): """Test of DebianPackageHandler.""" _var_lib_dpkg_status = """\ Package: foo Status: install ok installed Modaliases: hwe(pci:v000099DDd00000036sv*sd*bc*sc*i*) Package: foo1 Status: install ok installed Modaliases: hwe(pci:v0000AADDd00000036sv*sd*bc*sc*i*) Package: foo2 Status: install ok installed Package: foo3 Status: install ok installed Package: bar Status: install ok installed """ @mock.patch('io.open', mock.mock_open(read_data=_var_lib_dpkg_status)) @mock.patch('__main__.get_system_modaliases') def test_get_pkgs(self, mock_get_system_modaliases): """Test of test_get_pkgs.""" mock_get_system_modaliases.return_value = { "pci": ["v0000168Cd00000036sv0000103Csd0000217Fbc02sc80i00", "v00008086d00008C26sv0000103Csd000022D9bc0Csc03i20"], "usb": ["v8087p8000d0005dc09dsc00dp01ic09isc00ip00in00", "v1D6Bp0002d0319dc09dsc00dp00ic09isc00ip00in00"], } self.pkg_handler = DebianPackageHandler( file_object=io.StringIO(self._var_lib_dpkg_status)) self.assertEqual(len(self.pkg_handler.pkgs), 2) class DeviceInfo(Command): """ Implementation of the dkms-info command. dkms_info provides device package information. @EPILOG@ supported package types: - dkms (Dynamic Kernel Module Support): provides kernel modules - non-dkms: packages that with modaliases header and don't exist in dkms list - hardware modalias: might be unused dkms or config package - oemalias: It is like non-dkms(w/o modalias) supported output formats: - onelines: one line per packages with matched modaliases information - dumps: json output (fully information) """ def register_arguments(self, parser): """Register command line arguments for dkms-info.""" parser.add_argument( '--format', default="onelines", choices=["summary", "json"], help=("Choose output format type: " "summary (one line per packages) " "or json (json format, fully information)")) parser.add_argument( '--output', default=None, help=("Output filename to store the output date")) def invoked(self, ctx): """Invoke dkms-info.""" logging.basicConfig( level=logging.INFO, format='[%(relativeCreated)06dms] %(message)s') _logger.info("Started") dkms_pkgs = [] for (dkms_name, dkms_ver) in get_installed_dkms_modules(): dkms_pkg = DkmsPackage(dkms_name, dkms_ver) dkms_pkgs.append(dkms_pkg) output = sys.stdout if ctx.args.output is not None: output = open(ctx.args.output, 'wt', encoding='UTF-8') pkg_handler = DebianPackageHandler(extra_pkgs=dkms_pkgs) if ctx.args.format == "summary": output.write(pkg_handler.to_outline()) else: output.write(pkg_handler.to_json()) _logger.info("Data collected") if __name__ == '__main__': if '--test' in sys.argv: sys.argv.remove('--test') unittest.main() else: DeviceInfo().main() plainbox-provider-checkbox-0.25/bin/get_make_and_model0000775000175000017500000000141212646152433024346 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os.path import shlex from subprocess import check_output def print_data(key, value): print("{}: {}".format(key, value)) def main(): keys = {'Manufacturer': 'vendor', 'Model': 'product', 'Version': 'version'} cmd = "lshw -C system" out = check_output(shlex.split(cmd), universal_newlines = True) output = out.split('\n') data = {} for key in keys: for line in output: if keys[key] in line: data[key] = line.split(':')[1].strip() break else: data[key] = "NOT FOUND" for key in data: print_data(key, data[key]) if __name__ == "__main__": raise SystemExit(main()) plainbox-provider-checkbox-0.25/bin/dmitest0000775000175000017500000002456512646152433022257 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # # This file is part of Checkbox. # # Copyright 2014 Canonical Ltd. # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . # # Test for sane dmidecode output, particularly with respect to # various manufacturer information fields. Also, verify that the # system reports a chassis type that suits its class (server or # desktop/laptop) # # By: Rod Smith """Script to test dmidecode output for sanity. :param --dmifile: Input filename; optional. If specified, file is used instead of dmidecode output. :param --test_versions: Include chassis, system, and base boad version numbers among tests. :param --test_serials: Include system and base board serial numbers among tests. :param cpu_check: Don't perform usual tests, except for CPU test. :param desktop: SUT is a desktop or laptop :param server: SUT is a server """ import re import subprocess import sys from argparse import ArgumentParser def find_in_section(stream, section, label, strings, find_empty): """Search for a set of strings on a line in the output. :param stream: input text stream (dmidecode output) :param section: section label in which to search (e.g., "Chassis Information") :param label: label of line on which to search (e.g., "Type:") :param strings: set of strings for which to search (e.g., ["server", "blade"]) :param find_empty: if True, matches empty label field (as if '""' were passed as a strings value) :returns found: True if one or more of strings was found on "label" line in "section" section, or if "label" line is empty AND find_empty is True; False otherwise """ start_looking = False found = False empty = True for line in stream: if line == section: start_looking = True if start_looking and re.search(label, line): print("\n" + section) print(line.strip()) empty = len(line.strip()) == len(label) if empty and find_empty: found = True for s in strings: if re.search(s, line, flags=re.IGNORECASE): found = True break start_looking = False return found def standard_tests(args, stream): """ Perform the standard set of tests. :param args: Arguments passed to script :param stream: Input stream containing dmidecode output :returns retval: Number of problems found """ retval = 0 """ NOTE: System type is encoded in both the "Chassis Information" and "Base Board Type" sections. The former is more reliable, so we do a whitelist test on it -- the type MUST be specified correctly. The "Base Board Type" section is less reliable, so rather than flag large numbers of systems for having "Unknown", "Other", or something similar here, we just flag it when it's at odds with the type passed on the command line. Also, the "Base Board Type" may specify a desktop or tower system on servers shipped in those form factors, so we don't flag that combination as an error. """ if args.test_type == 'server': if not find_in_section(stream, 'Chassis Information', 'Type:', ['server', 'rack mount', 'blade', 'expansion chassis', 'multi-system', 'tower'], False): print("*** Incorrect or unknown server chassis type!") retval += 1 if find_in_section(stream, 'Base Board Information', 'Type:', ['portable', 'notebook', 'space-saving', 'all in one'], False): print("*** Incorrect server base board type!") retval += 1 else: if not find_in_section(stream, 'Chassis Information', 'Type:', ['notebook', 'portable', 'laptop', 'desktop', 'lunch box', 'space-saving', 'tower', 'all in one', 'hand held'], False): print("*** Incorrect or unknown desktop chassis type!") retval += 1 if find_in_section(stream, 'Base Board Information', 'Type:', ['rack mount', 'server', 'multi-system', 'interconnect board'], False): print("*** Incorrect desktop base board type!") retval += 1 if find_in_section(stream, 'Chassis Information', 'Manufacturer:', ['empty', 'chassis manufacture', 'null', 'insyde', 'to be filled by o\.e\.m\.', 'no enclosure', '\.\.\.\.\.'], True): print("*** Invalid chassis manufacturer!") retval += 1 if find_in_section(stream, 'System Information', 'Manufacturer:', ['system manufacture', 'insyde', 'standard', 'to be filled by o\.e\.m\.', 'no enclosure'], True): print("*** Invalid system manufacturer!") retval += 1 if find_in_section(stream, 'Base Board Information', 'Manufacturer:', ['to be filled by o\.e\.m\.'], True): print("*** Invalid base board manufacturer!") retval += 1 if find_in_section(stream, 'System Information', 'Product Name:', ['system product name', 'to be filled by o\.e\.m\.'], False): print("*** Invalid system product name!") retval += 1 if find_in_section(stream, 'Base Board Information', 'Product Name:', ['base board product name', 'to be filled by o\.e\.m\.'], False): print("*** Invalid base board product name!") retval += 1 return retval def version_tests(args, stream): """ Perform the version tests. :param args: Arguments passed to script :param stream: Input stream containing dmidecode output :returns retval: Number of problems found """ retval = 0 if find_in_section(stream, 'Chassis Information', 'Version:', ['to be filled by o\.e\.m\.', 'empty'], False): print("*** Invalid chassis version!") retval += 1 if find_in_section(stream, 'System Information', 'Version:', ['to be filled by o\.e\.m\.', '\(none\)', 'null', 'system version', 'not applicable', '\.\.\.\.\.'], False): print("*** Invalid system information version!") retval += 1 if find_in_section(stream, 'Base Board Information', 'Version:', ['base board version', 'empty', 'to be filled by o\.e\.m\.'], False): print("*** Invalid base board version!") retval += 1 return retval def serial_tests(args, stream): """ Perform the serial number tests. :param args: Arguments passed to script :param stream: Input stream containing dmidecode output :returns retval: Number of problems found """ retval = 0 if find_in_section(stream, 'System Information', 'Serial Number:', ['to be filled by o\.e\.m\.', 'system serial number', '\.\.\.\.\.'], False): print("*** Invalid system information serial number!") retval += 1 if find_in_section(stream, 'Base Board Information', 'Serial Number:', ['n/a', 'base board serial number', 'to be filled by o\.e\.m\.', 'empty', '\.\.\.'], False): print("*** Invalid base board serial number!") retval += 1 return retval def main(): """Main function.""" parser = ArgumentParser("dmitest") parser.add_argument('test_type', help="Test type ('server', 'desktop' or 'cpu-check').", choices=['server', 'desktop', 'cpu-check']) parser.add_argument('--dmifile', help="File to use in lieu of dmidecode.") parser.add_argument('--test_versions', action="store_true", help="Set to check version information") parser.add_argument('--test_serials', action="store_true", help="Set to check serial number information") args = parser.parse_args() # Command to retrieve DMI information COMMAND = "dmidecode" try: if args.dmifile: print("Reading " + args.dmifile + " as DMI data") stream = subprocess.check_output(['cat', args.dmifile], universal_newlines=True).splitlines() else: stream = subprocess.check_output(COMMAND, universal_newlines=True).splitlines() except subprocess.CalledProcessError as err: print("Error running {}: {}".format(COMMAND, err)) return 1 retval = 0 if args.test_type == 'server' or args.test_type == 'desktop': retval += standard_tests(args, stream) if args.test_versions: retval += version_tests(args, stream) if args.test_serials: retval += serial_tests(args, stream) if find_in_section(stream, 'Processor Information', 'Version:', ['sample'], False): print("*** Invalid processor information!") retval += 1 # In review of dmidecode data on 10/23/2014, no conspicuous problems # found in BIOS Information section's Vendor, Version, or Release Date # fields. Therefore, no tests based on these fields have been written. if retval > 0: if retval == 1: print("\nFailed 1 test (see above)") else: print("\nFailed {0} tests (see above)".format(retval)) else: print("\nPassed all tests") return retval if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/xrandr_cycle0000775000175000017500000001627012646152433023255 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import argparse import errno import os import re import shutil import subprocess import sys import tarfile import time parser = argparse.ArgumentParser() parser.add_argument('--keyword', default='', help=('A keyword to distinguish the screenshots ' 'taken in this run of the script')) parser.add_argument('--screenshot-dir', default=os.environ['HOME'], help=('Specify a directory to store screenshots in. ' 'Default is %(default)s')) args = parser.parse_args() device_context = '' # track what device's modes we are looking at modes = [] # keep track of all the devices and modes discovered current_modes = [] # remember the user's current settings for cleanup later failures = 0 # count the number of failed modesets failure_messages = [] # remember which modes failed success_messages = [] # remember which modes succeeded # Run xrandr and ask it what devices and modes are supported xrandrinfo = subprocess.Popen('xrandr -q', shell=True, stdout=subprocess.PIPE) output = xrandrinfo.communicate()[0].decode().split('\n') # The results from xrandr are given in terms of the available display devices. # One device can have zero or more associated modes. Unfortunately xrandr # indicates this through indentation and is kinda wordy, so we have to keep # track of the context we see mode names in as we parse the results. for line in output: # I haven't seen any blank lines in xrandr's output in my tests, but meh if line == '': break # luckily the various data from xrandr are separated by whitespace... foo = line.split() # Check to see if the second word in the line indicates a new context # -- if so, keep track of the context of the device we're seeing if len(foo) >= 2: # throw out any weirdly formatted lines if foo[1] == 'disconnected': # we have a new context, but it should be ignored device_context = '' if foo[1] == 'connected': # we have a new context that we want to test device_context = foo[0] elif device_context != '': # we've previously seen a 'connected' dev # mode names seem to always be of the format [horiz]x[vert] # (there can be non-mode information inside of a device context!) if foo[0].find('x') != -1: modes.append((device_context, foo[0])) # we also want to remember what the current mode is, which xrandr # marks with a '*' character, so we can set things back the way # we found them at the end: if foo[1].find('*') != -1: current_modes.append((device_context, foo[0])) # Now we have a list of the modes we need to test. So let's do just that. profile_path = os.environ['HOME'] + '/.shutter/profiles/' screenshot_path = os.path.join(args.screenshot_dir, 'xrandr_screens') # Where to find the shutter.xml template? Two possible locations. shutter_xml_template = None if 'PLAINBOX_PROVIDER_DATA' in os.environ: shutter_xml_template = os.path.join(os.environ['PLAINBOX_PROVIDER_DATA'], "settings", "shutter.xml") else: shutter_xml_template = os.path.join(os.path.split(os.path.dirname( os.path.realpath(__file__)))[0], "data", "settings", "shutter.xml") if args.keyword: screenshot_path = screenshot_path + '_' + args.keyword regex = re.compile(r'filename="[^"\r\n]*"') # Keep the shutter profile in place before starting # Any errors creating the directories or copying the template is fatal, # since things won't work if we fail. try: os.makedirs(profile_path, exist_ok=True) os.makedirs(screenshot_path, exist_ok=True) except OSError as excp: raise SystemExit("ERROR: Unable to create " "required directories: {}".format(excp)) try: shutil.copy(shutter_xml_template, profile_path) except (IOError, OSError) as excp: print("ERROR: Unable to copy {} to {}: {}".format(shutter_xml_template, profile_path, excp)) if excp.errno == errno.ENOENT: print("Try setting PLAINBOX_PROVIDER_DATA to the the data path of a") print("provider shipping the 'shutter.xml' template file, usually ") print("found under /usr/share.") raise SystemExit() try: old_profile = open(profile_path + 'shutter.xml', 'r') content = old_profile.read() new_profile = open(profile_path + 'shutter.xml', 'w') # Replace the folder name with the desired one new_profile.write(re.sub(r'folder="[^"\r\n]*"', 'folder="%s"' % screenshot_path, content)) new_profile.close() old_profile.close() except: raise SystemExit("ERROR: While updating folder name " "in shutter profile: {}".format(sys.exc_info())) for mode in modes: cmd = 'xrandr --output ' + mode[0] + ' --mode ' + mode[1] retval = subprocess.call(cmd, shell=True) if retval != 0: failures = failures + 1 message = 'Failed to set mode ' + mode[1] + ' for output ' + mode[0] failure_messages.append(message) else: # Update shutter profile to save the image as the right name mode_string = mode[0] + '_' + mode[1] try: old_profile = open(profile_path + 'shutter.xml', 'r') content = old_profile.read() new_profile = open(profile_path + 'shutter.xml', 'w') new_profile.write(regex.sub('filename="%s"' % mode_string, content)) new_profile.close() old_profile.close() shuttercmd = ['shutter', '--profile=shutter', '--full', '-e'] retval = subprocess.call(shuttercmd, shell=False) if retval != 0: print("""Could not capture screenshot - you may need to install the package 'shutter'.""") except: print("""Could not configure screenshot tool - you may need to install the package 'shutter', or check that {}/{} exists and is writable.""".format( profile_path, 'shutter.xml')) message = 'Set mode ' + mode[1] + ' for output ' + mode[0] success_messages.append(message) time.sleep(3) # let the hardware recover a bit # Put things back the way we found them for mode in current_modes: cmd = 'xrandr --output ' + mode[0] + ' --mode ' + mode[1] subprocess.call(cmd, shell=True) # Tar up the screenshots for uploading try: with tarfile.open(screenshot_path + '.tgz', 'w:gz') as screen_tar: for screen in os.listdir(screenshot_path): screen_tar.add(screenshot_path + '/' + screen, screen) except: pass # Output some fun facts and knock off for the day for message in failure_messages: print(message, file=sys.stderr) for message in success_messages: print(message) if failures != 0: exit(1) else: exit(0) plainbox-provider-checkbox-0.25/bin/rotation_test_using_dbus0000775000175000017500000000277212646152433025722 0ustar sylvainsylvain00000000000000#!/bin/sh # # rotation_test_using_dbus # # This script is used to trigger a main screen rotation directly from DBUS to # simulate the way screen rotation is done when using System Settings screen. # Indeed, when using xrandr command or Python lib, we sometimes have weird # behaviours, specifically when used with NVidia cards with proprietary drivers. # # This file is part of Checkbox. # # Copyright 2015 Canonical Ltd. # # Authors: Pierre Equoy # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . rotate() { dbus-send --session --print-reply --dest=org.gnome.SettingsDaemon /org/gnome/SettingsDaemon/XRANDR org.gnome.SettingsDaemon.XRANDR_2.RotateTo int32:$1 int64:0 > /dev/null 2>&1 } # Rotate the screen in-between the following modes and the normal mode: # 2 - left # 4 - inverted # 8 - right # 1 - normal for i in 2 1 4 1 8 1 do rotate $i sleep 4 done # Rotate one more time to "normal" so next time we logout/login, # the screen will be set in normal mode. rotate 1 plainbox-provider-checkbox-0.25/bin/audio_settings0000775000175000017500000000021312646152433023607 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 import sys from checkbox_support.scripts.audio_settings import main if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/cpu_topology0000775000175000017500000000662012646152433023321 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 ''' cpu_topology Written by Jeffrey Lane ''' import sys import os class proc_cpuinfo(): ''' Class to get and handle information from /proc/cpuinfo Creates a dictionary of data gleaned from that file. ''' def __init__(self): self.cpuinfo = {} cpu_fh = open('/proc/cpuinfo', 'r') try: temp = cpu_fh.readlines() finally: cpu_fh.close() for i in temp: if i.startswith('processor'): key = 'cpu' + (i.split(':')[1].strip()) self.cpuinfo[key] = {'core_id':'', 'physical_package_id':''} elif i.startswith('core id'): self.cpuinfo[key].update({'core_id': i.split(':')[1].strip()}) elif i.startswith('physical id'): self.cpuinfo[key].update({'physical_package_id': i.split(':')[1].strip()}) else: continue class sysfs_cpu(): ''' Class to get and handle information from sysfs as relates to CPU topology Creates an informational class to present information on various CPUs ''' def __init__(self, proc): self.syscpu = {} self.path = '/sys/devices/system/cpu/' + proc + '/topology' items = ['core_id', 'physical_package_id'] for i in items: try: syscpu_fh = open(os.path.join(self.path, i), 'r') except OSError as e: print("ERROR: %s" % e) sys.exit(1) else: self.syscpu[i] = syscpu_fh.readline().strip() syscpu_fh.close() def compare(proc_cpu, sys_cpu): cpu_map = {} ''' If there is only 1 CPU the test don't look for core_id and physical_package_id because those information are absent in /proc/cpuinfo on singlecore system ''' for key in proc_cpu.keys(): if 'cpu1' not in proc_cpu: cpu_map[key] = True else: for subkey in proc_cpu[key].keys(): if proc_cpu[key][subkey] == sys_cpu[key][subkey]: cpu_map[key] = True else: cpu_map[key] = False return cpu_map def main(): cpuinfo = proc_cpuinfo() sys_cpu = {} keys = cpuinfo.cpuinfo.keys() for k in keys: sys_cpu[k] = sysfs_cpu(k).syscpu cpu_map = compare(cpuinfo.cpuinfo, sys_cpu) if False in cpu_map.values() or len(cpu_map) < 1: print("FAIL: CPU Topology is incorrect", file=sys.stderr) print("-" * 52, file=sys.stderr) print("{0}{1}".format("/proc/cpuinfo".center(30), "sysfs".center(25)), file=sys.stderr) print("{0}{1}{2}{3}{1}{2}".format( "CPU".center(6), "Physical ID".center(13), "Core ID".center(9), "|".center(3)), file=sys.stderr) for key in sorted(sys_cpu.keys()): print("{0}{1}{2}{3}{4}{5}".format( key.center(6), cpuinfo.cpuinfo[key]['physical_package_id'].center(13), cpuinfo.cpuinfo[key]['core_id'].center(9), "|".center(3), sys_cpu[key]['physical_package_id'].center(13), sys_cpu[key]['core_id'].center(9)), file=sys.stderr) return 1 else: return 0 if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/rotation_test0000775000175000017500000000421512646152433023472 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # rotation_test # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Authors: Alberto Milone # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . import time import sys from checkbox_support.contrib import xrandr def rotate_screen(rotation): # Refresh the screen. Required by NVIDIA screen = xrandr.get_current_screen() screen.set_rotation(rotation) return screen.apply_config() def main(): screen = xrandr.get_current_screen() rotations = {'normal': xrandr.RR_ROTATE_0, 'right': xrandr.RR_ROTATE_90, 'inverted': xrandr.RR_ROTATE_180, 'left': xrandr.RR_ROTATE_270} rots_statuses = {} for rot in rotations: try: status = rotate_screen(rotations[rot]) except (xrandr.RRError, xrandr.UnsupportedRRError) as exc: status = 1 error = exc else: error = 'N/A' # Collect the status and the error message rots_statuses[rot] = (status, error) time.sleep(4) # Try to set the screen back to normal try: rotate_screen(xrandr.RR_ROTATE_0) except(xrandr.RRError, xrandr.UnsupportedRRError) as error: print(error) result = 0 for elem in rots_statuses: status = rots_statuses.get(elem)[0] error = rots_statuses.get(elem)[1] if status != 0: print('Error: rotation "%s" failed with status %d: %s.' % (elem, status, error), file=sys.stderr) result = 1 return result if __name__ == '__main__': exit(main()) plainbox-provider-checkbox-0.25/bin/battery_test0000775000175000017500000001437412646152433023314 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import time import re import subprocess import sys import argparse from gi.repository import Gio class Battery(): def __init__(self, data): lines = data.split("\n") for line in lines: if line.find("state:") != -1: self._state = line.split(':')[1].strip() elif line.find("energy:") != -1: self._energy, self._energy_units = self._get_capacity(line) elif line.find("energy-full:") != -1: self._energy_full, self._energy_full_units =\ self._get_capacity(line) elif line.find("energy-full-design:") != -1: self._energy_full_design, self._energy_full_design_units =\ self._get_capacity(line) def _get_capacity(self, line): """ Given a line of input that represents a battery capacity (energy) value, return a tuple of (value, units). Value is returned as a float. """ capacity = line.split(':')[1].strip() values = capacity.split() return (float(values[0]), values[1]) def __str__(self): ret = "-----------------------------------------\n" ret += "State: %s\n" % self._state ret += "Energy: %s %s\n" % (self._energy, self._energy_units) ret += "Energy Full: %s %s\n" % (self._energy_full, self._energy_full_units) ret += "Energy Full-Design: %s %s\n" % (self._energy_full_design, self._energy_full_design_units) return ret def find_battery(): batinfo = subprocess.Popen('upower -d', stdout=subprocess.PIPE, shell=True, universal_newlines=True) if not batinfo: return None else: out, err = batinfo.communicate() if out: device_regex = re.compile("Device: (.*battery_.*)") batteries = device_regex.findall(out) if len(batteries) == 0: return None elif len(batteries) > 1: print("Warning: This system has more than 1 battery, only the" "first battery will be measured") return batteries[0] else: return None def get_battery_state(): battery_name = find_battery() if battery_name is None: return None batinfo = subprocess.Popen('upower -i %s' % battery_name, stdout=subprocess.PIPE, shell=True, universal_newlines=True) if not batinfo: return None else: out, err = batinfo.communicate() if out: return Battery(out) else: return None def validate_battery_info(battery): if battery is None: print ("Error obtaining battery info") return False if battery._state != "discharging": print ("Error: battery is not discharging, test will not be valid") return False return True def battery_life(before, after, time): capacity_difference = before._energy - after._energy print("Battery drained by %f %s" % (capacity_difference, before._energy_units)) if capacity_difference == 0: print("Battery capacity did not change, unable to determine remaining" " time", file=sys.stderr) return 1 drain_per_second = capacity_difference / time print("Battery drained %f %s per second" % (drain_per_second, before._energy_units)) # the battery at it's max design capacity (when it was brand new) design_life_minutes = round( ((before._energy_full_design / drain_per_second) / 60), 2) print("Battery Life with full battery at design capacity (when new): %.2f" "minutes" % (design_life_minutes)) # the battery at it's current max capacity current_full_life_minutes = round( ((before._energy_full / drain_per_second) / 60), 2) print("Battery Life with a full battery at current capacity: %.2f minutes" % (current_full_life_minutes)) # the battery at it's current capacity current_life_minutes = round( ((before._energy / drain_per_second) / 60), 2) print("Battery Life with at current battery capacity: %.2f minutes" % (current_life_minutes)) return 0 def main(): parser = argparse.ArgumentParser( description="""Determine battery drain and battery life by running the specified action. Battery life is shown for: current capacity, capacity when battery is full, and capacity when battery is full and was brand new (design capacity)""") parser.add_argument('-i', '--idle', help="Run the test while system is" " idling", action='store_true') parser.add_argument('-s3', '--sleep', help="Run the test while system" " is suspended", action='store_true') parser.add_argument('-t', '--time', help="Specify the allotted time in seconds to run", type=int, required=True) parser.add_argument('-m', '--movie', help="Run the test while playing the file MOVIE") args = parser.parse_args() test_time = args.time battery_before = get_battery_state() if not validate_battery_info(battery_before): return 1 print(battery_before) if args.idle: time.sleep(test_time) elif args.movie: totem_settings = Gio.Settings.new("org.gnome.totem") totem_settings.set_boolean("repeat", True) a = subprocess.Popen(['totem', '--fullscreen', args.movie]) time.sleep(test_time) a.kill() totem_settings = Gio.Settings.new("org.gnome.totem") totem_settings.set_boolean("repeat", False) elif args.sleep: subprocess.call(['fwts', 's3', '--s3-sleep-delay=' + str(test_time)]) battery_after = get_battery_state() if not validate_battery_info(battery_after): return 1 print(battery_after) return(battery_life(battery_before, battery_after, test_time)) if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/bluetooth_transfer_stress0000775000175000017500000000360112646152433026106 0ustar sylvainsylvain00000000000000#!/bin/bash # # Copyright (C) 2014 Canonical # # Authors: # Daniel Manrique # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # BTDEVADDR="$1" if [ -z "$BTDEVADDR" ]; then echo "Please give Bluetooth device address as first parameter" exit 1 fi ORIGIN=$(mktemp --tmpdir bluetooth-stress.XXXXXX) DESTINATION=$(mktemp --tmpdir bluetooth-stress.XXXXXX) REMOTE=$RANDOM SIZEKB=10240 echo "Creating ${SIZEKB}KB file to test transfer" dd if=/dev/urandom of=$ORIGIN count=$SIZEKB bs=1024 ORIGIN_SUM=$(sha256sum $ORIGIN | cut -f 1 -d ' ') set -o pipefail echo "Sending file using Bluetooth" time obexftp -v -b $BTDEVADDR -o $REMOTE --put $ORIGIN 2>&1 | ansi_parser sleep 5 echo "Receiving file using Bluetooth" time obexftp -v -b $BTDEVADDR -o $DESTINATION --get $REMOTE 2>&1 | ansi_parser # Now checksum destination and compare DESTINATION_SUM=$(sha256sum $DESTINATION | cut -f 1 -d ' ') # Clean up before reporting rm $ORIGIN $DESTINATION if [ "$ORIGIN_SUM" = "$DESTINATION_SUM" ]; then echo "Checksums match, file transfer succeeded" exit 0 else echo "Checksums don't match, file was corrupted during transfers." echo "Original checksum: $ORIGIN_SUM" echo "Checksum of received file: $DESTINATION_SUM" exit 1 fi plainbox-provider-checkbox-0.25/bin/cpu_offlining0000775000175000017500000000247612646152433023425 0ustar sylvainsylvain00000000000000#!/bin/bash echo "Beginning CPU Offlining Test" 1>&2 result=0 cpu_count=0 # Turn CPU cores off for cpu_num in `ls /sys/devices/system/cpu | grep -o cpu[0-9]*`; do if [ -f /sys/devices/system/cpu/$cpu_num/online ]; then if [ "$cpu_num" != "cpu0" ]; then ((cpu_count++)) echo "Offlining $cpu_num" 1>&2 echo 0 > /sys/devices/system/cpu/$cpu_num/online grep -w -i -q $cpu_num /proc/interrupts if [ $? -eq 0 ]; then echo "ERROR: Failed to offline $cpu_num" 1>&2 result=1 fi fi fi done # Back on again for cpu_num in `ls /sys/devices/system/cpu | grep -o cpu[0-9]*`; do if [ -f /sys/devices/system/cpu/$cpu_num/online ]; then if [ "$cpu_num" != "cpu0" ]; then echo "Onlining $cpu_num" 1>&2 echo 1 > /sys/devices/system/cpu/$cpu_num/online grep -w -i -q $cpu_num /proc/interrupts if [ $? -eq 1 ]; then echo "ERROR: Failed to online $cpu_num" 1>&2 result=1 fi fi fi done if [ $result -eq 0 ]; then echo "Successfully turned $cpu_count cores off and back on" else echo "Error with offlining one or more cores. CPU offline may not work if this is an ARM system." 1>&2 fi exit $result plainbox-provider-checkbox-0.25/bin/memory_info0000775000175000017500000000130412646152433023113 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import re import sys def get_meminfo(): meminfo = {} for line in open("/proc/meminfo").readlines(): match = re.match(r"(.*):\s+(.*)", line) if match: key = match.group(1) value = match.group(2) meminfo[key] = value return meminfo def main(args): meminfo = get_meminfo() amount, units = meminfo["MemTotal"].split() amount = float(amount) next_units = {'kB': 'MB', 'MB': 'GB'} while amount > 1024: amount = amount / 1024 units = next_units[units] print("%.1f %s" % (amount, units)) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/audio_bluetooth_loopback_test0000775000175000017500000000416112646152433026673 0ustar sylvainsylvain00000000000000#!/bin/bash # # This file is part of Checkbox. # # Copyright 2014 Canonical Ltd. # # Authors: Daniel Manrique # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . # # This simple script finds a bluetooth source and sink, and records from the # source for 6 seconds, playing the recording back into the sink. It helps a # human validate that record/playback is working, human can speak into # microphone and just ensure the speech can be heard instantly in the headset. [ -x "`which pactl`" ] || exit 1 [ -x "`which pacat`" ] || exit 1 SINK=$(pactl list | sed -n '/monitor/d;s/Name: \(bluez_sink\.\)/\1/p') SOURCE=$(pactl list | sed -n '/monitor/d;s/Name: \(bluez_source\.\)/\1/p') if [ -n "$SINK" ] && [ -n "$SOURCE" ]; then PLAYBACK_LOG=$(mktemp --tmpdir audio_bluetooth_loopback.XXXXX) RECORD_LOG=$(mktemp --tmpdir audio_bluetooth_loopback.XXXXX) trap "rm $PLAYBACK_LOG $RECORD_LOG" EXIT # ensure we exit with failure if parec fails, and not with pacat # --playback's error code set -o pipefail # Use a short latency parameter so time between speech and hearing it is # short, makes for a nicer interactive experience LATENCY="--latency-msec=50" # time out after 6 seconds, forcibly kill after 8 seconds if pacat didn't # respond echo "Recording and playing back, please speak into bluetooth microphone" timeout -k 8 6 pacat $LATENCY --record -v -d $SOURCE 2>$RECORD_LOG | \ pacat $LATENCY --playback -v -d $SINK 2>$PLAYBACK_LOG echo "RECORD LOG" cat $RECORD_LOG echo "" echo "PLAYBACK LOG" cat $PLAYBACK_LOG else echo "No bluetooth audio device found" exit 1 fi plainbox-provider-checkbox-0.25/bin/tomcat_test0000775000175000017500000000104212646152433023115 0ustar sylvainsylvain00000000000000#!/bin/bash # # Confirm Tomcat server is running and working properly # Requires: tomcat6 # # Check tomcat is running run1=`netstat -ltnp | grep '8080' | grep 'java'` if [ -z "$run1" ]; then echo "FAIL: Tomcat is not running." exit 1 fi # Check if Tomcat is working; requires network connection so check it check=`ping -c 2 www.ubuntu.com |grep "2 received"` if [ -n "$check" ]; then work1=`w3m http://127.0.0.1:8080 | grep "works"` if [ -z "$work1" ]; then echo "FAIL: Tomcat is not working properly." exit 1 fi fi exit 0 plainbox-provider-checkbox-0.25/bin/run_templates0000775000175000017500000000673312646152433023465 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import re import sys import uuid from optparse import OptionParser from subprocess import Popen, PIPE from checkbox_support.lib.template import Template DEFAULT_INPUT = "-" DEFAULT_OUTPUT = "-" COMMAND_TEMPLATE = """cat <<%(separator)s %(input)s %(separator)s""" class Runner(object): def __init__(self, input, output): self.input = input self.output = output def get_args(self, record): return [] def get_env(self, record): env = dict(os.environ) env["NF"] = str(len(record)) return env def process(self, args, shell=False): process = Popen( args, shell=shell, stdout=PIPE, universal_newlines=True) records = self.process_output(process.stdout) for nr, record in enumerate(records): args = self.get_args(record) env = self.get_env(record) env["NR"] = str(nr) command_string = COMMAND_TEMPLATE % { "input": self.input, "separator": uuid.uuid4()} command = ["sh", "-c", command_string] + args process = Popen(command, env=env, stdout=self.output, universal_newlines=True) process.communicate() def process_output(self, output): raise NotImplementedError class LineRunner(Runner): field_separator = r"\s+" record_separator = r"(?:\r?\n)" def get_args(self, record): args = [record] args.extend(re.split(self.field_separator, record)) return args def process_output(self, file): # Strip trailing separator data = re.sub(r"%s$" % self.record_separator, "", file.read()) return re.split(self.record_separator, data) class TemplateRunner(Runner): def get_env(self, record): env = super(TemplateRunner, self).get_env(record) env.update(record) return env def process_output(self, output): template = Template() return template.load_file(output) def main(args): usage = "Usage: %prog [OPTIONS] [COMMAND]" parser = OptionParser(usage=usage) parser.add_option("-i", "--input", metavar="FILE", default=DEFAULT_INPUT, help="Input from the given file name, - for stdin") parser.add_option("-o", "--output", metavar="FILE", default=DEFAULT_OUTPUT, help="Output to the given file name, - for stdout") parser.add_option("-s", "--shell", action="store_true", help="Run the command as a shell script") parser.add_option("-t", "--template", action="store_true", help="Interpret the command output as a template") (options, args) = parser.parse_args(args) # Default args to echo command if not args: args = ["echo"] # Read input if options.input == "-": input = sys.stdin.read() else: input_file = open(options.input, "r") try: input = input_file.read() finally: input_file.close() # Open output if options.output == "-": output_file = sys.stdout else: output_file = open(options.output, "w") # Determine runner class if options.template: runner_class = TemplateRunner else: runner_class = LineRunner runner = runner_class(input, output_file) runner.process(args, options.shell) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/pm_log_check0000775000175000017500000002050412646152433023205 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import sys import re import difflib import logging from argparse import ArgumentParser # Script return codes SUCCESS = 0 NOT_MATCH = 1 NOT_FINISHED = 2 NOT_FOUND = 3 def main(): args = parse_args() if not os.path.isfile(args.input_log_filename): sys.stderr.write('Log file {0!r} not found\n' .format(args.input_log_filename)) sys.exit(NOT_FOUND) LoggingConfiguration.set(args.log_level, args.output_log_filename) parser = Parser(args.input_log_filename) results = parser.parse() if not compare_results(results): sys.exit(NOT_MATCH) sys.exit(SUCCESS) class Parser(object): """ Reboot test log file parser """ is_logging_line = (re.compile('^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}') .search) is_getting_info_line = (re.compile('Gathering hardware information...$') .search) is_executing_line = (re.compile("Executing: '(?P.*)'...$") .search) is_output_line = re.compile('Output:$').search is_field_line = (re.compile('^- (?Preturncode|stdout|stderr):$') .match) is_test_complete_line = re.compile('test complete$').search def __init__(self, filename): self.filename = filename def parse(self): """ Parse log file and return results """ with open(self.filename) as f: results = self._parse_file(LineIterator(f)) return results def _parse_file(self, iterator): """ Parse all lines in iterator and return results """ results = [] result = {} for line in iterator: if self.is_getting_info_line(line): if result: # Add last result to list of results results.append(result) # Initialize for a new iteration results result = {} match = self.is_executing_line(line) if match: command = match.group('command') command_output = self._parse_command_output(iterator) if command_output is not None: result[command] = command_output else: if result: # Add last result to list of results results.append(result) if not self.is_test_complete_line(line): sys.stderr.write("Test didn't finish properly according to logs\n") sys.exit(NOT_FINISHED) return results def _parse_command_output(self, iterator): """ Parse one command output """ command_output = None # Skip all lines until command output is found for line in iterator: if self.is_output_line(line): command_output = {} break if (self.is_executing_line(line) or self.is_getting_info_line(line)): # Skip commands with no output iterator.unnext(line) return None # Parse command output message for line in iterator: match = self.is_field_line(line) if match: field = match.group('field') value = self._parse_command_output_field(iterator) command_output[field] = value # Exit when all command output fields # have been gathered else: iterator.unnext(line) break return command_output def _parse_command_output_field(self, iterator): """ Parse one command output field """ # Accummulate as many lines as needed # for the field value value = [] for line in iterator: if (self.is_logging_line(line) or self.is_field_line(line)): iterator.unnext(line) break value.append(line) value = ''.join(value) return value class LineIterator: """ Iterator wrapper to make it possible to push back lines that shouldn't have been consumed """ def __init__(self, iterator): self.iterator = iterator self.buffer = [] def __iter__(self): return self def __next__(self): if self.buffer: return self.buffer.pop() return next(self.iterator) def unnext(self, line): self.buffer.append(line) class LoggingConfiguration(object): @classmethod def set(cls, log_level, log_filename): """ Configure a rotating file logger """ logger = logging.getLogger() logger.setLevel(logging.DEBUG) # Log to sys.stderr using log level passed through command line if log_level != logging.NOTSET: log_handler = logging.StreamHandler() formatter = logging.Formatter('%(levelname)-8s %(message)s') log_handler.setFormatter(formatter) log_handler.setLevel(log_level) logger.addHandler(log_handler) # Log to rotating file using DEBUG log level log_handler = logging.FileHandler(log_filename, mode='w') formatter = logging.Formatter('%(asctime)s %(levelname)-8s ' '%(message)s') log_handler.setFormatter(formatter) log_handler.setLevel(logging.DEBUG) logger.addHandler(log_handler) def compare_results(results): """ Compare results using first one as a baseline """ baseline = results[0] success = True for index, result in enumerate(results[1:]): for command in baseline.keys(): baseline_output = baseline[command] result_output = result[command] error_messages = [] fields = (set(baseline_output.keys()) | set(result_output.keys())) for field in fields: baseline_field = baseline_output.get(field, '') result_field = result_output.get(field, '') if baseline_field != result_field: differ = difflib.Differ() message = ["** {field!r} field doesn't match:" .format(field=field)] comparison = differ.compare(baseline_field.splitlines(), result_field.splitlines()) message.extend(list(comparison)) error_messages.append('\n'.join(message)) if not error_messages: logging.debug('[Iteration {0}] {1}...\t[OK]' .format(index + 1, command)) else: success = False if command.startswith('fwts'): logging.error('[Iteration {0}] {1}...\t[FAIL]' .format(index + 1, command)) else: logging.error('[Iteration {0}] {1}...\t[FAIL]\n' .format(index + 1, command)) for message in error_messages: logging.error(message) return success def parse_args(): """ Parse command-line arguments """ parser = ArgumentParser(description=('Check power management ' 'test case results')) parser.add_argument('input_log_filename', metavar='log_filename', help=('Path to the input log file ' 'on which to perform the check')) parser.add_argument('output_log_filename', metavar='log_filename', help=('Path to the output log file ' 'for the results of the check')) log_levels = ['notset', 'debug', 'info', 'warning', 'error', 'critical'] parser.add_argument('--log-level', dest='log_level', default='info', choices=log_levels, help=('Log level. ' 'One of {0} or {1} (%(default)s by default)' .format(', '.join(log_levels[:-1]), log_levels[-1]))) args = parser.parse_args() args.log_level = getattr(logging, args.log_level.upper()) return args if __name__ == '__main__': main() plainbox-provider-checkbox-0.25/bin/network_wait0000775000175000017500000000070312646152433023307 0ustar sylvainsylvain00000000000000#!/bin/bash x=1 while true; do state=$(/usr/bin/nmcli -t -f STATE nm 2>/dev/null) if [[ $? != 0 ]]; then state=$(/usr/bin/nmcli -t -f STATE general 2>/dev/null) rc=$? if [[ $rc != 0 ]]; then exit $rc fi fi if [ "$state" = "connected" ]; then echo $state exit 0 fi x=$(($x + 1)) if [ $x -gt 12 ]; then echo $state exit 1 fi sleep 5 done plainbox-provider-checkbox-0.25/bin/xml_sanitize0000775000175000017500000000257612646152433023312 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 import errno import io import sys from argparse import ArgumentParser, FileType VALID_XML_CHARS = frozenset([0x9, 0xA, 0xD] + list(range(0x20, 0xD7FF)) + list(range(0xE000, 0xFFFD)) + list(range(0x10000, 0x10FFFF))) def is_valid_xml_char(ch): # Is this character valid in XML? # http://www.w3.org/TR/xml/#charsets return ord(ch) in VALID_XML_CHARS def main(): parser = ArgumentParser("Receives as input some text and outputs " "the same text without characters which are " "not valid in the XML specification.") parser.add_argument('input_file', type=FileType('r'), nargs='?', help='The name of the file to sanitize.') args = parser.parse_args() if args.input_file: text = ''.join([c for c in args.input_file.read() if is_valid_xml_char(c)]) else: with io.TextIOWrapper( sys.stdin.buffer, encoding='UTF-8', errors="ignore") as stdin: text = ''.join([c for c in stdin.read() if is_valid_xml_char(c)]) print(text) if __name__ == "__main__": try: sys.exit(main()) except Exception as err: if err.errno != errno.EPIPE: raise(err) plainbox-provider-checkbox-0.25/bin/storage_test0000775000175000017500000000567312646152433023310 0ustar sylvainsylvain00000000000000#!/bin/bash # take the path of the storage device and test is it a block device. function run_bonnie() { echo "Running bonnie++ on $1..." mount_point=$(df -h | grep -m 1 $1 | awk '{print $6}') echo "Putting scratch disk at $mount_point" mkdir -p "$mount_point/tmp/scratchdir" # When running on disks with small drives (SSD/flash) we need to do # some tweaking. Bonnie uses 2x RAM by default to write data. If that's # more than available disk space, the test will fail inappropriately. free_space=$(df -m | grep -m 1 $1 | awk '{print $4}') echo " Disk $1 has ${free_space}MB available" memory=$(free -m |grep Mem|awk '{print $2}') echo " System has ${memory}MB RAM" disk_needed=$((memory * 2)) echo " We need ${disk_needed}MB of disk space for testing" if [[ "$disk_needed" -ge "$free_space" ]]; then echo " Insufficient disk space available for defaults." echo " reducing memory footprint to be 1/2 of free disk space." # we need to pass an amount that's 1/2 the amount of available disk # space to bonnie++ so she doesn't overwrite and fail. disk_needed=$(($free_space/2)) bonnie++ -d $mount_point/tmp/scratchdir -u root -r $disk_needed else echo " Free disk space is sufficient to continue testing." bonnie++ -d $mount_point/tmp/scratchdir -u root fi } disk=/dev/$1 if [ -b $disk ] then echo "$disk is a block device" #Add a check for warnings WARN=$(parted -s ${disk} print | grep "^Warning.*${disk}.*[Rr]ead-only" 2>&1) if [[ $? == 0 ]] then echo "Warning found in parted output:" echo $WARN echo "Aborting Test" exit 1 fi # Regex changed to better handle when $disk appears more than once # in parted output (such as in warning messages or not caught in the # check above) size=`parted -l -s |grep "Disk.*${disk}" |awk '{print $3}'` if [ -n "$size" ] then echo "$disk reports a size of $size." # Have to account for the end of the size descriptor size_range=${size:(-2)} if mount | grep -q $disk then echo "$disk is mounted, proceeding." else echo "$disk is not mounted. It must be mounted before testing." exit 1 fi if [ $size_range == "KB" ] then echo "$disk size reported in KB, seems to be too small for testing." exit 1 elif [ $size_range == "MB" ] then size_int=${size::${#size}-2} if [ $size_int -gt 10 ] then run_bonnie $disk else echo "$disk is too small to be used for testing." exit 1 fi else run_bonnie $disk fi else echo "$disk doesn't report a size." exit 1 fi else echo "$disk is not listed as a block device." exit 1 fi plainbox-provider-checkbox-0.25/bin/optical_detect0000775000175000017500000000115012646152433023552 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import re import sys def main(args): line_pattern = r"\s*(\d+)\s+dev='([^']+)'" \ "\s+([wr-]{6})\s:\s'([^']+)'\s'([^']+)'" line_regex = re.compile(line_pattern) count = 0 command = "wodim --devices" for line in os.popen(command).readlines(): match = re.match(line_regex, line) if match: count += 1 print(match.group(4), match.group(5)) if not count: print("No optical devices detected.", file=sys.stderr) return 1 return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/gcov_tarball0000775000175000017500000000023012646152433023224 0ustar sylvainsylvain00000000000000#!/bin/sh set -o errexit cd /usr/share tar -xzf gcov.tar.gz cd /tmp lcov -q -c -o gcov.info genhtml -q -o gcov gcov.info 2>/dev/null tar -czf - gcov plainbox-provider-checkbox-0.25/bin/bluetooth_test0000775000175000017500000001257412646152433023647 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 from subprocess import CalledProcessError, check_output, STDOUT from tempfile import TemporaryDirectory import argparse import logging import os import re import sys import time OBEX_RESPONSE_CODE = { 0x10: "Continue", 0x20: "OK, Success", 0x21: "Created", 0x22: "Accepted", 0x23: "Non-Authoritative Information", 0x24: "No Content", 0x25: "Reset Content", 0x26: "Partial Content", 0x30: "Multiple Choices", 0x31: "Moved Permanently", 0x32: "Moved temporarily", 0x33: "See Other", 0x34: "Not modified", 0x35: "Use Proxy", 0x40: "Bad Request - server couldn't understand request", 0x41: "Unauthorized", 0x42: "Payment required", 0x43: "Forbidden - operation is understood but refused", 0x44: "Not Found", 0x45: "Method not allowed", 0x46: "Not Acceptable", 0x47: "Proxy Authentication required", 0x48: "Request Time Out", 0x49: "Conflict", 0x4A: "Gone", 0x4B: "Length Required", 0x4C: "Precondition failed", 0x4D: "Requested entity too large", 0x4E: "Request URL too large", 0x4F: "Unsupported media type", 0x50: "Internal Server Error", 0x51: "Not Implemented", 0x52: "Bad Gateway", 0x53: "Service Unavailable", 0x54: "Gateway Timeout", 0x55: "HTTP version not supported", 0x60: "Database Full", 0x61: "Database Locked" } class ObexFTPTest: def __init__(self, path, btaddr): self._file = path self._filename = os.path.basename(path) self._filesize = os.path.getsize(path) self._btaddr = btaddr def _error_helper(self, pattern, **extra): # obexftp 0.23 version returns 255 on success, see: # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=549623 if 'exception' in extra: exception = extra.get('exception') if re.search(pattern, exception.output): logging.info("PASS") return 0 else: logging.error(exception.output.strip()) if exception.returncode in OBEX_RESPONSE_CODE: logging.error(OBEX_RESPONSE_CODE.get(exception.returncode)) return exception.returncode elif 'output' in extra: output = extra.get('output') if re.search(pattern, output): logging.info("PASS") return 0 else: logging.error(output) return 1 def _run_command(self, command, expected_pattern, cwd=None): try: output = check_output(command, stderr=STDOUT, universal_newlines=True, cwd=cwd) return self._error_helper(expected_pattern, output=output) except OSError as e: logging.error(e) logging.error("Binary not found, " "maybe obexftp is not installed") except CalledProcessError as e: return self._error_helper(expected_pattern, exception=e) finally: # Let the Bluetooth stack enough time to close the connection # before doing another test time.sleep(5) def send(self): logging.info("[ Send test ]".center(80, '=')) logging.info("Using {} as a test file".format(self._filename)) logging.info("Sending {} to {}".format(self._file, self._btaddr)) return self._run_command(["obexput", "-b", self._btaddr, self._file], "Sending.*?done") def browse(self): logging.info("[ Browse test ]".center(80, '=')) logging.info("Checking {} for {}".format(self._btaddr, self._file)) logging.info("Will check for a filesize of {}".format(self._filesize)) return self._run_command(["obexftp", "-b", self._btaddr, "-l"], '{}.*?size="{}"'.format(self._filename, self._filesize)) def remove(self): logging.info("[ Remove test ]".center(80, '=')) logging.info("Removing {} from {}".format(self._filename, self._btaddr)) return self._run_command( ["obexrm", "-b", self._btaddr, self._filename], "Sending.*?done") def get(self): with TemporaryDirectory() as tmpdirname: logging.info("[ Get test ]".center(80, '=')) logging.info("Getting file {} from {}".format(self._filename, self._btaddr)) # Dont trust "get" returncode, it's always 0... return self._run_command( ["obexget", "-b", self._btaddr, self._filename], "Receiving.*?done", cwd=tmpdirname) def main(): description = "Bluetooth tests using ObexFTP" parser = argparse.ArgumentParser(description=description) parser.add_argument('file', type=argparse.FileType('rb')) parser.add_argument('btaddr', help='bluetooth mac address') parser.add_argument('action', choices=['send', 'browse', 'remove', 'get']) args = parser.parse_args() args.file.close() # Configure logging as requested logging.basicConfig( level=logging.INFO, stream=sys.stdout, format='%(levelname)s: %(message)s') return getattr(ObexFTPTest(args.file.name, args.btaddr), args.action)() if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/memory_compare0000775000175000017500000001030612646152433023610 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # This file is part of Checkbox. # # Copyright 2014 Canonical Ltd. # # Authors: # Brendan Donegan # Jeff Lane # Sylvain Pineau # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . import os import sys import re from math import log, copysign from subprocess import check_output, PIPE from checkbox_support.helpers.human_readable_bytes import HumanReadableBytes from checkbox_support.parsers.lshwjson import LshwJsonParser from checkbox_support.parsers.meminfo import MeminfoParser class LshwJsonResult: memory_reported = 0 banks_reported = 0 # jlane LP:1525009 # Discovered the case can change, my x86 systems used "System Memory" # Failing ARM system used "System memory" desc_regex = re.compile('System Memory', re.IGNORECASE) def addHardware(self, hardware): if self.desc_regex.match(str(hardware.get('description',0))): self.memory_reported += int(hardware.get('size', 0)) elif 'bank' in hardware['id']: self.banks_reported += int(hardware.get('size', 0)) def get_installed_memory_size(): lshw = LshwJsonParser(check_output(['lshw', '-json'], universal_newlines=True, stderr=PIPE)) result = LshwJsonResult() lshw.run(result) if result.memory_reported: return result.memory_reported else: return result.banks_reported class MeminfoResult: memtotal = 0 def setMemory(self, memory): self.memtotal = memory['total'] def get_visible_memory_size(): parser = MeminfoParser(open('/proc/meminfo')) result = MeminfoResult() parser.run(result) return result.memtotal def get_threshold(installed_memory): GB = 1024**3 if installed_memory <= 2 * GB: return 25 elif installed_memory <= 6 * GB: return 20 else: return 10 def main(): if os.geteuid() != 0: print("This script must be run as root.", file=sys.stderr) return 1 installed_memory = HumanReadableBytes(get_installed_memory_size()) visible_memory = HumanReadableBytes(get_visible_memory_size()) threshold = get_threshold(installed_memory) difference = HumanReadableBytes(installed_memory - visible_memory) try: percentage = difference / installed_memory * 100 except ZeroDivisionError: print("Results:") print("\t/proc/meminfo reports:\t{}".format(visible_memory), file=sys.stderr) print("\tlshw reports:\t{}".format(installed_memory), file=sys.stderr) print("\nFAIL: Either lshw or /proc/meminfo returned a memory size " "of 0 kB", file=sys.stderr) return 1 if percentage <= threshold: print("Results:") print("\t/proc/meminfo reports:\t{}".format(visible_memory)) print("\tlshw reports:\t{}".format(installed_memory)) print("\nPASS: Meminfo reports %s less than lshw, a " "difference of %.2f%%. This is less than the " "%d%% variance allowed." % (difference, percentage, threshold)) return 0 else: print("Results:", file=sys.stderr) print("\t/proc/meminfo reports:\t{}".format(visible_memory), file=sys.stderr) print("\tlshw reports:\t{}".format(installed_memory), file=sys.stderr) print("\nFAIL: Meminfo reports %d less than lshw, " "a difference of %.2f%%. Only a variance of %d%% in " "reported memory is allowed." % (difference, percentage, threshold), file=sys.stderr) return 1 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/volume_test0000775000175000017500000001213312646152433023140 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 import sys import re from argparse import ArgumentParser from subprocess import check_output TYPES = ("source", "sink") active_entries_regex = re.compile("\* index.*?(?=properties)", re.DOTALL) entries_regex = re.compile("index.*?(?=properties)", re.DOTALL) index_regex = re.compile("(?<=index: )[0-9]*") muted_regex = re.compile("(?<=muted: ).*") volume_regex = re.compile("(?<=volume: 0: )\s*[0-9]*") name_regex = re.compile("(?<=name:).*") def check_muted(): """ Checks that the active source/sink are not muted. This does not test inactive sources/sinks. """ retval = 0 for vtype in TYPES: try: pacmd_entries = check_output(["pacmd", "list-%ss" % vtype], universal_newlines=True) except Exception as e: print("Error when running pacmd list-%ss: %s" % (vtype, e), file=sys.stderr) return 1 active_entry_match = active_entries_regex.search(pacmd_entries) if active_entry_match: active_entry = active_entry_match.group() else: print("Unable to find a %s active_entry in the pacmd list-%ss"\ " output\npacmd output was: %s" % (vtype, vtype, pacmd_entries), file=sys.stderr) return 1 name_match = name_regex.search(active_entry) if name_match: name = name_match.group() else: print("Unable to determine device bus information from the"\ " pacmd list-%ss output\npacmd output was: %s" % (vtype, pacmd_entries), file=sys.stderr) return 1 muted_match = muted_regex.search(active_entry) if muted_match: muted = muted_match.group().strip() if muted.lower() == "yes": print("FAIL: Audio is muted on %s %s" % (name, vtype)) retval = 1 else: print("PASS: Audio is not muted on %s %s" % (name, vtype)) else: print("Unable to find mute information in the pacmd list-%ss"\ " output for device %s\npacmd output was: %s" % (vtype, name, pacmd_entries), file=sys.stderr) return 1 return retval def check_volume(minvol, maxvol): """ Checks that the volume for all sources/sinks is between min and max. Volume must be < min and > max to pass. """ retval = 0 for vtype in TYPES: try: pacmd_entries = check_output(["pacmd", "list-%ss" % vtype], universal_newlines=True) except Exception as e: print("Error when running pacmd list-%ss: %s" % (vtype, e), file=sys.stderr) return 1 entries = entries_regex.findall(pacmd_entries) for entry in entries: name_match = name_regex.search(entry) if name_match: name = name_match.group() else: print("Unable to determine device bus information from the"\ " pacmd list-%ss output\npacmd output was: %s" % (vtype, pacmd_entries), file=sys.stderr) return 1 volume_match = volume_regex.search(entry) if volume_match: volume = int(volume_match.group().strip()) if volume > maxvol: print ("FAIL: Volume of %d is greater than"\ " maximum of %d for %s %s" % (volume, maxvol, name, vtype)) retval = 1 elif volume < minvol: print ("FAIL: Volume of %d is less than"\ " minimum of %d for %s %s" % (volume, minvol, name, vtype)) retval = 1 else: print ("PASS: Volume is %d for %s %s" % (volume, name, vtype)) else: print("Unable to find volume information in the pacmd"\ " list-%ss output for device %s.\npacmd output "\ "was: %s" % (vtype, name, pacmd_entries), file=sys.stderr) return 1 return retval def main(): parser = ArgumentParser("Check the audio volume") parser.add_argument("-n", "--minvol", type=int, required=True, help="""The minimum volume for a check_volume call. Volume must be greater than this number to be considered a pass.""") parser.add_argument("-x", "--maxvol", type=int, required=True, help="""The maximum volume for a check_volume call. Volume must be less than this number to be considered a pass.""") args = parser.parse_args() check_muted_retval = check_muted() check_volume_retval = check_volume(args.minvol, args.maxvol) return check_muted_retval or check_volume_retval if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/check_is_laptop0000775000175000017500000000077412646152433023731 0ustar sylvainsylvain00000000000000#!/bin/bash # Establish the system type based on DMI info TYPE=$(dmidecode -t 3 | awk '/Type:/ { print $2 }') echo "Type: " $TYPE BATTERY="NO" for device in `find /sys -name "type"` do if [ "$(cat $device)" == "Battery" ]; then BATTERY="YES" fi done echo "Battery: " $BATTERY case $TYPE in Notebook|Laptop|Portable) exit 0 ;; *) # Give the system a second chance based on the battery info if [ $BATTERY == "YES" ]; then exit 0 else exit 1 fi ;; esac plainbox-provider-checkbox-0.25/bin/max_diskspace_used0000775000175000017500000000156012646152433024427 0ustar sylvainsylvain00000000000000#!/bin/bash # Verify default partitioning has used the entire local hard disk. # Please remove any non-local attached storage prior to running this # test. for disk in $@; do echo "Checking maximum disk space available on : $disk" psize=`parted -l | grep $disk | awk '{print $3}'` if [ -n "$psize" ] then echo "Disk space available : $psize" fsizes=`df -B ${psize:(-2)} | grep $disk | awk '{print $2}'` if [ -n "$fsizes" ] then echo "Disk space used : $fsizes" fsize=0 for i in $fsizes; do i=`echo $i | grep -oe '[0-9\.]*'` fsize=$(($fsize + $i)) done psize=`echo $psize | grep -oe '[0-9\.]*'` pct_difference=`awk "BEGIN{print(($psize - $fsize) / $fsize)}"` echo "Difference ( > 0.15 fails ) : $pct_difference" awk "BEGIN{exit($pct_difference > 0.15)}" || exit 1 fi fi done plainbox-provider-checkbox-0.25/bin/graphics_stress_test0000775000175000017500000003674412646152433025052 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # graphics_stress_test # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Authors: Alberto Milone # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . import errno import logging import os import re import sys import tempfile import time from argparse import ArgumentParser from subprocess import call, Popen, PIPE from checkbox_support.contrib import xrandr class VtWrapper(object): """docstring for VtWrapper""" def __init__(self): self.x_vt = self._get_x_vt() def _get_x_vt(self): '''Get the vt where X lives''' vt = 0 proc = Popen(['ps', 'aux'], stdout=PIPE, universal_newlines=True) proc_output = proc.communicate()[0].split('\n') proc_line = re.compile('.*tty(\d+).+/usr/bin/X.*') for line in proc_output: match = proc_line.match(line) if match: vt = match.group(1).strip().lower() return int(vt) def set_vt(self, vt): retcode = call(['chvt', '%d' % vt]) return retcode class SuspendWrapper(object): def __init__(self): pass def can_we_sleep(self, mode): ''' Test to see if S3 state is available to us. /proc/acpi/* is old and will be deprecated, using /sys/power to maintine usefulness for future kernels. ''' states_fh = open('/sys/power/state', 'r') try: states = states_fh.read().split() finally: states_fh.close() if mode in states: return True else: return False def get_current_time(self): cur_time = 0 time_fh = open('/sys/class/rtc/rtc0/since_epoch', 'r') try: cur_time = int(time_fh.read()) finally: time_fh.close() return cur_time def set_wake_time(self, time): ''' Get the current epoch time from /sys/class/rtc/rtc0/since_epoch then add time and write our new wake_alarm time to /sys/class/rtc/rtc0/wakealarm. The math could probably be done better but this method avoids having to worry about whether or not we're using UTC or local time for both the hardware and system clocks. ''' cur_time = self.get_current_time() logging.debug('Current epoch time: %s' % cur_time) wakealarm_fh = open('/sys/class/rtc/rtc0/wakealarm', 'w') try: wakealarm_fh.write('0\n') wakealarm_fh.flush() wakealarm_fh.write('+%s\n' % time) wakealarm_fh.flush() finally: wakealarm_fh.close() logging.debug('Wake alarm in %s seconds' % time) def do_suspend(self, mode): ''' Suspend the system and hope it wakes up. Previously tried writing new state to /sys/power/state but that seems to put the system into an uncrecoverable S3 state. So far, pm-suspend seems to be the most reliable way to go. ''' if mode == 'mem': status = call('/usr/sbin/pm-suspend') elif mode == 'disk': status = call('/usr/sbin/pm-hibernate') else: logging.debug('Unknown sleep state passed') status == 1 return status class RotationWrapper(object): def __init__(self): self._rotations = {'normal': xrandr.RR_ROTATE_0, 'right': xrandr.RR_ROTATE_90, 'inverted': xrandr.RR_ROTATE_180, 'left': xrandr.RR_ROTATE_270} def _rotate_screen(self, rotation): # Refresh the screen. Required by NVIDIA screen = xrandr.get_current_screen() screen.set_rotation(rotation) return screen.apply_config() def do_rotation_cycle(self): '''Cycle through all possible rotations''' rots_statuses = {} for rot in self._rotations: try: status = self._rotate_screen(self._rotations[rot]) except(xrandr.RRError, xrandr.UnsupportedRRError) as err: status = 1 error = err else: error = 'N/A' # Collect the status and the error message rots_statuses[rot] = (status, error) time.sleep(4) # Try to set the screen back to normal try: self._rotate_screen(xrandr.RR_ROTATE_0) except(xrandr.RRError, xrandr.UnsupportedRRError) as error: print(error) result = 0 for elem in rots_statuses: status = rots_statuses.get(elem)[0] error = rots_statuses.get(elem)[1] if status != 0: logging.error('Error: rotation "%s" failed with status %d: %s.' % (elem, status, error)) result = 1 return result class RenderCheckWrapper(object): """A simple class to run the rendercheck suites""" def __init__(self, temp_dir=None): self._temp_dir = temp_dir def _print_test_info(self, suites='all', iteration=1, show_errors=False): '''Print the output of the test suite''' main_command = 'rendercheck' passed = 0 total = 0 if self._temp_dir: # Use the specified path temp_file = tempfile.NamedTemporaryFile(dir=self._temp_dir, delete=False) else: # Use /tmp temp_file = tempfile.NamedTemporaryFile(delete=False) if suites == all: full_command = [main_command, '-f', 'a8r8g8b8'] else: full_command = [main_command, '-t', suites, '-f', 'a8r8g8b8'] try: # Let's dump the output into file as it can be very large # and we don't want to store it in memory process = Popen(full_command, stdout=temp_file, universal_newlines=True) except OSError as exc: if exc.errno == errno.ENOENT: logging.error('Error: please make sure that rendercheck ' 'is installed.') exit(1) else: raise exit_code = process.wait() temp_file.close() # Read values from the file errors = re.compile('.*test error.*') results = re.compile('(.+) tests passed of (.+) total.*') first_error = True with open(temp_file.name) as temp_handle: for line in temp_handle: match_output = results.match(line) match_errors = errors.match(line) if match_output: passed = int(match_output.group(1).strip()) total = int(match_output.group(2).strip()) logging.info('Results:') logging.info(' %d tests passed out of %d.' % (passed, total)) if show_errors and match_errors: error = match_errors.group(0).strip() if first_error: logging.debug('Rendercheck %s suite errors ' 'from iteration %d:' % (suites, iteration)) first_error = False logging.debug(' %s' % error) # Remove the file os.unlink(temp_file.name) return (exit_code, passed, total) def run_test(self, suites=[], iterations=1, show_errors=False): exit_status = 0 for suite in suites: for it in range(iterations): logging.info('Iteration %d of Rendercheck %s suite...' % (it + 1, suite)) (status, passed, total) = \ self._print_test_info(suites=suite, iteration=it + 1, show_errors=show_errors) if status != 0: # Make sure to catch a non-zero exit status logging.info('Iteration %d of Rendercheck %s suite ' 'exited with status %d.' % (it + 1, suite, status)) exit_status = status it += 1 # exit with 1 if passed < total if passed < total: if exit_status == 0: exit_status = 1 return exit_status def get_suites_list(self): '''Return a list of the available test suites''' try: process = Popen(['rendercheck', '--help'], stdout=PIPE, stderr=PIPE, universal_newlines=True) except OSError as exc: if exc.errno == errno.ENOENT: logging.error('Error: please make sure that rendercheck ' 'is installed.') exit(1) else: raise proc = process.communicate()[1].split('\n') found = False tests_pattern = re.compile('.*Available tests: *(.+).*') temp_line = '' tests = [] for line in proc: if found: temp_line += line match = tests_pattern.match(line) if match: first_line = match.group(1).strip().lower() found = True temp_line += first_line for elem in temp_line.split(','): test = elem.strip() if elem: tests.append(test) return tests def main(): # Make sure that we have root privileges if os.geteuid() != 0: print('Error: please run this program as root', file=sys.stderr) exit(1) usage = 'Usage: %prog [OPTIONS]' parser = ArgumentParser(usage) parser.add_argument('-i', '--iterations', type=int, default=10, help='The number of times to run the test. \ Default is 10') parser.add_argument('-d', '--debug', action='store_true', help='Choose this to add verbose output \ for debug purposes') parser.add_argument('-b', '--blacklist', nargs='+', help='Name(s) of rendercheck test(s) to blacklist.') parser.add_argument('-o', '--output', default='', help='The path to the log which will be dumped. \ Default is stdout') parser.add_argument('-tp', '--temp', default='', help='The path where to store temporary files. \ Default is /tmp') args = parser.parse_args() # Set up logging to console format = '%(message)s' console_handler = logging.StreamHandler() console_handler.setFormatter(logging.Formatter(format)) # Set up the overall logger logger = logging.getLogger() # This is necessary to ensure debug messages are passed through the logger # to the handler logger.setLevel(logging.DEBUG) # This is what happens when -d and/or -o are passed: # -o -> stdout (info) - log (info) # -d -> only stdout (info and debug) - no log # -d -o -> stdout (info) - log (info and debug) # Write to a log if args.output: # Write INFO to stdout console_handler.setLevel(logging.INFO) logger.addHandler(console_handler) # Specify a log file logfile = args.output logfile_handler = logging.FileHandler(logfile) if args.debug: # Write INFO and DEBUG to a log logfile_handler.setLevel(logging.DEBUG) else: # Write INFO to a log logfile_handler.setLevel(logging.INFO) logfile_handler.setFormatter(logging.Formatter(format)) logger.addHandler(logfile_handler) log_path = os.path.abspath(logfile) # Write only to stdout else: if args.debug: # Write INFO and DEBUG to stdout console_handler.setLevel(logging.DEBUG) logger.addHandler(console_handler) else: # Write INFO to stdout console_handler.setLevel(logging.INFO) logger.addHandler(console_handler) status = 0 rendercheck = RenderCheckWrapper(args.temp) tests = rendercheck.get_suites_list() for test in args.blacklist: if test in tests: tests.remove(test) # Switch between the tty where X lives and tty10 vt_wrap = VtWrapper() target_vt = 10 if vt_wrap.x_vt != target_vt: logging.info('== Vt switch test ==') for it in range(args.iterations): logging.info('Iteration %d...', it) retcode = vt_wrap.set_vt(target_vt) if retcode != 0: logging.error('Error: switching to tty%d failed with code %d ' 'on iteration %d' % (target_vt, retcode, it)) status = 1 else: logging.info('Switching to tty%d: passed' % (target_vt)) time.sleep(2) retcode = vt_wrap.set_vt(vt_wrap.x_vt) if retcode != 0: logging.error('Error: switching to tty%d failed with code %d ' 'on iteration %d' % (vt_wrap.x_vt, retcode, it)) else: logging.info('Switching to tty%d: passed' % (vt_wrap.x_vt)) status = 1 else: logging.error('Error: please run X on a tty other than 10') # Call sleep x times logging.info('== Sleep test ==') sleep_test = SuspendWrapper() sleep_mode = 'mem' # See if we can sleep if sleep_test.can_we_sleep(sleep_mode): for it in range(args.iterations): # Run the test logging.info('Iteration %d...', it + 1) # Set wake time sleep_test.set_wake_time(20) # Suspend to RAM if sleep_test.do_suspend(sleep_mode) == 0: logging.info('Passed') else: logging.error('Failed') status = 1 else: # Skip the test logging.info('Skipped (the system does not seem to support S3') # Rotate the screen x times # The app already rotates the screen 5 times logging.info('== Rotation test ==') rotation_test = RotationWrapper() for it in range(args.iterations): logging.info('Iteration %d...', it + 1) if rotation_test.do_rotation_cycle() == 0: logging.info('Passed') else: logging.error('Failed') status = 1 # Call rendercheck x times logging.info('== Rendercheck test ==') if rendercheck.run_test(tests, args.iterations, args.debug) == 0: logging.info('Passed') else: logging.error('Failed') status = 1 return status if __name__ == '__main__': exit(main()) plainbox-provider-checkbox-0.25/bin/ipmi_test0000775000175000017500000000250712646152433022573 0ustar sylvainsylvain00000000000000#!/bin/bash # Now make sure the modules are loaded for module in ipmi_si ipmi_devintf ipmi_msghandler; do if lsmod |grep -q $module; then echo "$module already loaded" else echo "Loading $module..." modprobe $module result=$? # If the IPMI drivers don't load, it could be the system has no BMC, or # the IPMI driver is bad. We should error and Fail here. if [ $result -eq 1 ]; then echo "ERROR: Unable to load module $module" >&2 echo "Aborting IPMI test run." >&2 exit 1 else echo "Successfully loaded module $module" fi fi done # Now get our info from ipmitool to make sure communication works # First lest check chassis status echo "Checking for chassis status" ipmitool chassis status && echo "Successfully got chassis status" && chassis=0 || chassis=1 echo "Checking to see if we can get sensor data" ipmitool sdr list full && echo "Successfully got sensor data" && sensor=0 || sensor=1 echo "Checking to see if we can get info on the BMC" ipmitool bmc info && echo "Successfully got BMC information" && bmc=0 || bmc=1 # if everything passes, exit 0 [ $chassis -eq 0 ] && [ $sensor -eq 0 ] && [ $bmc -eq 0 ] && exit 0 || echo "FAILURE: chassis: $chassis sensor: $sensor bmc: $bmc" # otherwise exit 1 exit 1 plainbox-provider-checkbox-0.25/bin/network_restart0000775000175000017500000002454112646152433024035 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 """ Reboot networking, wait for a while and check if it's possible to send some pings """ import sys import os import time import threading import logging import logging.handlers from subprocess import check_output, check_call, CalledProcessError, STDOUT from argparse import ArgumentParser try: from gi.repository import Gtk, GObject, GLib GLib.threads_init() GObject.threads_init() gtk_found = True except (ImportError, RuntimeError): gtk_found = False class PingError(Exception): def __init__(self, address, reason): self.address = address self.reason = reason def main(): args = parse_args() # Verify that script is run as root if os.getuid(): sys.stderr.write( 'This script needs superuser permissions to run correctly\n') return 1 configure_logging(args.log_level, args.output) # Select interface based on graphich capabilities available if 'DISPLAY' in os.environ and gtk_found: factory = GtkApplication else: factory = CliApplication app = factory(args.address, args.times) return app.run() class Application: """ Network restart application """ def __init__(self, address, times): self.address = address self.times = times self.return_code = 0 def run(self): """ Restart networking as many times as requested and use ping to verify """ networking = Networking(self.address) logging.info('Initial connectivity check') success = ping(self.address) if not success: raise PingError(self.address, 'Some interface is down') for i in range(self.times): if self.return_code: break if self.progress_cb: fraction = float(i) / self.times self.progress_cb(fraction) logging.info('Iteration {0}/{1}...'.format(i + 1, self.times)) networking.restart() else: if self.progress_cb: self.progress_cb(1.0) logging.info('Test successful') return self.return_code class CliApplication(Application): progress_cb = None class GtkApplication(Application): def __init__(self, address, times): Application.__init__(self, address, times) dialog = Gtk.Dialog(title='Network restart', buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)) dialog.set_default_size(300, 100) alignment = Gtk.Alignment() alignment.set(0.5, 0.5, 1.0, 0.1) alignment.set_padding(10, 10, 10, 10) progress_bar = Gtk.ProgressBar() progress_bar.set_show_text(True) alignment.add(progress_bar) content_area = dialog.get_content_area() content_area.pack_start(alignment, expand=True, fill=True, padding=0) dialog.connect('response', self.response_cb) dialog.show_all() # Add new logger handler to write info logs to progress bar logger = logging.getLogger() stream = ProgressBarWriter(progress_bar) formatter = logging.Formatter('%(message)s') log_handler = logging.StreamHandler(stream) log_handler.setLevel(logging.INFO) log_handler.setFormatter(formatter) logger.addHandler(log_handler) self.return_code = 0 self.dialog = dialog self.progress_bar = progress_bar self.progress_log_handler = log_handler def response_cb(self, dialog, response_id): """ Cancel test case execution when cancel or close button are closed """ self.return_code = response_id logging.info('Test cancelled') Gtk.main_quit() def progress_cb(self, fraction): """ Update progress bar """ GLib.idle_add(self.progress_bar.set_fraction, fraction) def thread_target(self): """ Run test case in a separate thread """ try: Application.run(self) except PingError as exception: logging.error('Failed to ping {0!r}\n{1}' .format(exception.address, exception.reason)) self.return_code = -1 except CalledProcessError: self.return_code = -1 finally: Gtk.main_quit() def run(self): """ Launch test case and gtk mainloop """ thread = threading.Thread(target=self.thread_target) thread.daemon = True thread.start() Gtk.main() return self.return_code class ProgressBarWriter: """ Write logs to a progress bar """ def __init__(self, progressbar): self.progressbar = progressbar def write(self, message): if message == '\n': return GLib.idle_add(self.progressbar.set_text, message) def ping(address): """ Send ping to a given address """ logging.info('Pinging {0!r}...'.format(address)) try: check_call('ping -c 1 -w 5 {0}'.format(address), stdout=open(os.devnull, 'w'), stderr=STDOUT, shell=True) except CalledProcessError: return False return True class Networking: """ Networking abstraction to start/stop all interfaces """ def __init__(self, address): self.address = address self.interfaces = self._get_interfaces() def _get_interfaces(self): """ Get all network interfaces """ output = check_output(['/sbin/ifconfig', '-s', '-a']) lines = output.splitlines()[1:] interfaces = ([interface for interface in [line.split()[0] for line in lines] if interface != 'lo']) return interfaces def restart(self): """ Restart networking """ self._stop() self._start() def _start(self): """ Start networking """ logging.info('Bringing all interfaces up...') for interface in self.interfaces: try: check_output(['/sbin/ifconfig', interface, 'up']) except CalledProcessError: logging.error('Unable to bring up interface {0!r}' .format(interface)) raise logging.info('Starting network manager...') try: check_output(['/sbin/start', 'network-manager']) except CalledProcessError: logging.error('Unable to start network manager') raise # Verify that network interface is up for timeout in [2, 4, 8, 16, 32, 64]: logging.debug('Waiting ({0} seconds)...'.format(timeout)) time.sleep(timeout) success = ping(self.address) if success: break else: raise PingError(self.address, 'Some interface is still down') def _stop(self): """ Stop network manager """ logging.info('Stopping network manager...') try: check_output(['/sbin/stop', 'network-manager']) except CalledProcessError: logging.error('Unable to stop network manager') raise logging.info('Bringing all interfaces down...') for interface in self.interfaces: try: check_output(['/sbin/ifconfig', interface, 'down']) except CalledProcessError: logging.error('Unable to bring down interface {0!r}' .format(interface)) raise # Verify that network interface is down for timeout in [2, 4, 8]: logging.debug('Waiting ({0} seconds)...'.format(timeout)) time.sleep(timeout) success = ping(self.address) if not success: break else: raise PingError(self.address, 'Some interface is still up') def parse_args(): """ Parse command line options """ parser = ArgumentParser('Reboot networking interface ' 'and verify that is up again afterwards') parser.add_argument('-a', '--address', default='ubuntu.com', help=('Address to ping to verify that network connection is up ' "('%(default)s' by default)")) parser.add_argument('-o', '--output', default='/var/log', help='The path to the log directory. \ Default is /var/log') parser.add_argument('-t', '--times', type=int, default=1, help=('Number of times that the network interface has to be restarted ' '(%(default)s by default)')) log_levels = ['notset', 'debug', 'info', 'warning', 'error', 'critical'] parser.add_argument('--log-level', dest='log_level_str', default='notset', choices=log_levels, help=('Log level. ' 'One of {0} or {1} (%(default)s by default)' .format(', '.join(log_levels[:-1]), log_levels[-1]))) args = parser.parse_args() args.log_level = getattr(logging, args.log_level_str.upper()) return args def configure_logging(log_level, output): """ Configure logging """ logger = logging.getLogger() logger.setLevel(logging.DEBUG) # Log to sys.stderr using log level passed through command line if log_level != logging.NOTSET: log_handler = logging.StreamHandler() formatter = logging.Formatter('%(levelname)-8s %(message)s') log_handler.setFormatter(formatter) log_handler.setLevel(log_level) logger.addHandler(log_handler) # Log to rotating file using DEBUG log level log_filename = os.path.join(output, '{0}.log'.format(os.path.basename(__file__))) rollover = os.path.exists(log_filename) log_handler = logging.handlers.RotatingFileHandler(log_filename, mode='a+', backupCount=3) formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s') log_handler.setFormatter(formatter) log_handler.setLevel(logging.DEBUG) logger.addHandler(log_handler) if rollover: log_handler.doRollover() if __name__ == '__main__': try: sys.exit(main()) except PingError as exception: logging.error('Failed to ping {0!r}\n{1}' .format(exception.address, exception.reason)) sys.exit(1) plainbox-provider-checkbox-0.25/bin/graphics_driver0000775000175000017500000003206412646152433023752 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # ======================================================================== # # based on xlogparse # # DESCRIPTION # # Parses Xlog.*.log format files and allows looking up data from it # # AUTHOR # Bryce W. Harrington # # COPYRIGHT # Copyright (C) 2010-2012 Bryce W. Harrington # All Rights Reserved. # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # ======================================================================== import re import sys import os from subprocess import Popen, PIPE, check_output, CalledProcessError class XorgLog(object): def __init__(self, logfile=None): self.modules = [] self.errors = [] self.warnings = [] self.info = [] self.notimpl = [] self.notices = [] self.cards = [] self.displays = {} self.xserver_version = None self.boot_time = None self.boot_logfile = None self.kernel_version = None self.video_driver = None self.xorg_conf_path = None self.logfile = logfile if logfile: self.parse(logfile) def parse(self, filename): self.displays = {} display = {} display_name = "Unknown" in_file = open(filename, errors='ignore') gathering_module = False found_ddx = False module = None for line in in_file.readlines(): # Errors and Warnings m = re.search(r'\(WW\) (.*)$', line) if m: self.warnings.append(m.group(1)) continue m = re.search(r'\(EE\) (.*)$', line) if m: self.errors.append(m.group(1)) continue # General details m = re.search(r'Current Operating System: (.*)$', line) if m: uname = m.group(1) self.kernel_version = uname.split()[2] continue m = re.search(r'Kernel command line: (.*)$', line) if m: self.kernel_command_line = m.group(1) continue m = re.search(r'Build Date: (.*)$', line) if m: self.kernel_command_line = m.group(1) continue m = re.search(r'Log file: "(.*)", Time: (.*)$', line) if m: self.boot_logfile = m.group(1) self.boot_time = m.group(2) m = re.search(r'xorg-server ([^ ]+) .*$', line) if m: self.xserver_version = m.group(1) continue m = re.search(r'Using a default monitor configuration.', line) if m and self.xorg_conf_path is None: self.xorg_conf_path = 'default' continue m = re.search(r'Using config file: "(.*)"', line) if m: self.xorg_conf_path = m.group(1) continue # Driver related information m = re.search(r'\(..\)', line) if m: if gathering_module and module is not None: self.modules.append(module) gathering_module = False module = None m = re.search( '\(II\) Loading.*modules\/drivers\/(.+)_drv\.so', line) if m: found_ddx = True continue m = re.search(r'\(II\) Module (\w+):', line) if m: module = { 'name': m.group(1), 'vendor': None, 'version': None, 'class': None, 'abi_name': None, 'abi_version': None, 'ddx': found_ddx, } found_ddx = False gathering_module = True if gathering_module: m = re.search(r'vendor="(.*:?)"', line) if m: module['vendor'] = m.group(1) m = re.search(r'module version = (.*)', line) if m: module['version'] = m.group(1) if module['name'] == 'nvidia': try: version = check_output( "nvidia-settings -v", shell=True, universal_newlines=True) m = re.search(r'.*version\s+([0-9\.]+).*', version) if m: module['version'] = m.group(1) except CalledProcessError: pass m = re.search(r'class: (.*)', line) if m: module['class'] = m.group(1) m = re.search(r'ABI class:\s+(.*:?), version\s+(.*:?)', line) if m: if m.group(1)[:5] == "X.Org": module['abi_name'] = m.group(1)[6:] else: module['abi_name'] = m.group(1) module['abi_version'] = m.group(2) continue # EDID and Modelines # We use this part to determine which driver is in use # For Intel / RADEON m = re.search(r'\(II\) (.*)\(\d+\): EDID for output (.*)', line) if m: self.displays[display_name] = display self.video_driver = m.group(1) display_name = m.group(2) display = {'Output': display_name} continue m = re.search( r'\(II\) (.*)\(\d+\): Assigned Display Device: (.*)$', line) if m: self.displays[display_name] = display self.video_driver = m.group(1) display_name = m.group(2) display = {'Output': display_name} continue # For NVIDIA m = re.search(r'\(II\) (.*)\(\d+\): Setting mode "(.*?):', line) if not m: m = re.search(r'\(II\) (.*)\(\d+\): Setting mode "(NULL)"', line) if m: self.displays[display_name] = display self.video_driver = m.group(1) display_name = m.group(2) display = {'Output': display_name} continue # For 4th Intel after 3.11 m = re.search( r'\(II\) (.*)\(\d+\): switch to mode .* using (.*),', line) if m: self.displays[display_name] = display self.video_driver = 'intel' # 'intel' is what we expect to see display_name = m.group(2) display = {'Output': display_name} continue m = re.search( r'Manufacturer: (.*) *Model: (.*) *Serial#: (.*)', line) if m: display['display manufacturer'] = m.group(1) display['display model'] = m.group(2) display['display serial no.'] = m.group(3) m = re.search(r'EDID Version: (.*)', line) if m: display['display edid version'] = m.group(1) m = re.search(r'EDID vendor \"(.*)\", prod id (.*)', line) if m: display['vendor'] = m.group(1) display['product id'] = m.group(2) m = re.search( r'Max Image Size \[(.*)\]: *horiz.: (.*) *vert.: (.*)', line) if m: display['size max horizontal'] = "%s %s" % ( m.group(2), m.group(1)) display['size max vertical'] = "%s %s" % ( m.group(3), m.group(1)) m = re.search(r'Image Size: *(.*) x (.*) (.*)', line) if m: display['size horizontal'] = "%s %s" % (m.group(1), m.group(3)) display['size vertical'] = "%s %s" % (m.group(2), m.group(3)) m = re.search(r'(.*) is preferred mode', line) if m: display['mode preferred'] = m.group(1) m = re.search(r'Modeline \"(\d+)x(\d+)\"x([0-9\.]+) *(.*)$', line) if m: key = "mode %sx%s@%s" % (m.group(1), m.group(2), m.group(3)) display[key] = m.group(4) continue if display_name not in self.displays.keys(): self.displays[display_name] = display in_file.close() def errors_filtered(self): excludes = set([ 'error, (NI) not implemented, (??) unknown.', 'Failed to load module "fglrx" (module does not exist, 0)', 'Failed to load module "nv" (module does not exist, 0)', ]) return [err for err in self.errors if err not in excludes] def warnings_filtered(self): excludes = set([ 'warning, (EE) error, (NI) not implemented, (??) unknown.', 'The directory "/usr/share/fonts/X11/cyrillic" does not exist.', 'The directory "/usr/share/fonts/X11/100dpi/" does not exist.', 'The directory "/usr/share/fonts/X11/75dpi/" does not exist.', 'The directory "/usr/share/fonts/X11/100dpi" does not exist.', 'The directory "/usr/share/fonts/X11/75dpi" does not exist.', 'Warning, couldn\'t open module nv', 'Warning, couldn\'t open module fglrx', 'Falling back to old probe method for vesa', 'Falling back to old probe method for fbdev', ]) return [err for err in self.warnings if err not in excludes] def get_driver_info(xlog): '''Return the running driver and version''' print('-' * 13, 'VIDEO DRIVER INFORMATION', '-' * 13) if xlog.video_driver: for module in xlog.modules: if module['name'] == xlog.video_driver.lower(): print("Video Driver: %s" % module['name']) print("Driver Version: %s" % module['version']) print('\n') return 0 else: print("ERROR: No video driver loaded! Possibly in failsafe mode!", file=sys.stderr) return 1 def is_laptop(): return os.path.isdir('/proc/acpi/button/lid') def hybrid_graphics_check(xlog): '''Check for Hybrid Graphics''' card_id1 = re.compile('.*0300: *(.+):(.+) \(.+\)') card_id2 = re.compile('.*03..: *(.+):(.+)') cards_dict = {'8086': 'Intel', '10de': 'NVIDIA', '1002': 'AMD'} cards = [] drivers = [] formatted_cards = [] output = Popen(['lspci', '-n'], stdout=PIPE, universal_newlines=True) card_list = output.communicate()[0].split('\n') # List of discovered cards for line in card_list: m1 = card_id1.match(line) m2 = card_id2.match(line) if m1: id1 = m1.group(1).strip().lower() id2 = m1.group(2).strip().lower() id = id1 + ':' + id2 cards.append(id) elif m2: id1 = m2.group(1).strip().lower() id2 = m2.group(2).strip().lower() id = id1 + ':' + id2 cards.append(id) print('-' * 13, 'HYBRID GRAPHICS CHECK', '-' * 16) for card in cards: formatted_name = cards_dict.get(card.split(':')[0], 'Unknown') formatted_cards.append(formatted_name) print('Graphics Chipset: %s (%s)' % (formatted_name, card)) for module in xlog.modules: if module['ddx'] and module['name'] not in drivers: drivers.append(module['name']) print('Loaded DDX Drivers: %s' % ', '.join(drivers)) has_hybrid_graphics = (len(cards) > 1 and is_laptop() and (cards_dict.get('8086') in formatted_cards or cards_dict.get('1002') in formatted_cards)) print('Hybrid Graphics: %s' % (has_hybrid_graphics and 'yes' or 'no')) return 0 def main(): xlog = XorgLog("/var/log/Xorg.0.log") results = [] results.append(get_driver_info(xlog)) results.append(hybrid_graphics_check(xlog)) return 1 if 1 in results else 0 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/touchpad_test0000775000175000017500000001372312646152433023446 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import sys import gettext from gettext import gettext as _ from gi.repository import Gio, Gtk, Gdk from optparse import OptionParser EXIT_WITH_FAILURE = 1 EXIT_WITH_SUCCESS = 0 EXIT_TIMEOUT = 30 class Direction(object): def __init__(self, name): self.name = name self.tested = False self.value = getattr(Gdk.ScrollDirection, name.upper()) class GtkScroller(object): touchpad_key = "org.gnome.settings-daemon.peripherals.touchpad" exit_code = EXIT_WITH_FAILURE def __init__(self, directions, edge_scroll=False): self.directions = directions self.edge_scroll = edge_scroll # Initialize GTK constants self.ICON_SIZE = Gtk.IconSize.BUTTON self.ICON_TESTED = Gtk.STOCK_YES self.ICON_UNTESTED = Gtk.STOCK_INDEX self.ICON_NOT_REQUIRED = Gtk.STOCK_REMOVE self.button_factory = Gtk.Button self.hbox_factory = Gtk.HBox self.image_factory = Gtk.Image self.label_factory = Gtk.Label self.vbox_factory = Gtk.VBox # Create GTK window. window = Gtk.Window() window.set_type_hint(Gdk.WindowType.TOPLEVEL) window.add_events( Gdk.EventMask.SCROLL_MASK | Gdk.EventMask.SMOOTH_SCROLL_MASK) window.set_size_request(200, 100) window.set_resizable(False) window.set_title(_("Type Text")) window.connect("delete-event", lambda w, e: self.quit()) window.connect("scroll-event", self.on_scroll) window.show() # Add common widgets to the window. vbox = self._add_vbox(window) self.label = self._add_label(vbox) button_hbox = self._add_hbox(vbox) validation_hbox = self._add_hbox(vbox) self.status = self._add_label(vbox) self.exit_button = self._add_button(vbox, Gtk.STOCK_CLOSE) self.exit_button.connect("clicked", lambda w: self.quit()) # Add widgets for each direction. self.icons = {} for direction in self.directions: self._add_label(button_hbox, direction.name) self.icons[direction] = self._add_image( validation_hbox, Gtk.STOCK_INDEX) self.show_text( _("Please move the mouse cursor to this window.") + "\n" + _("Then scroll in each direction on your touchpad.")) def _add_button(self, context, stock): button = self.button_factory(stock=stock) context.add(button) button.show() return button def _add_hbox(self, context, spacing=4): hbox = self.hbox_factory() context.add(hbox) hbox.set_spacing(4) hbox.show() return hbox def _add_image(self, context, stock): image = self.image_factory(stock=stock, icon_size=self.ICON_SIZE) context.add(image) image.show() return image def _add_label(self, context, text=None): label = self.label_factory() context.add(label) label.set_size_request(0, 0) label.set_line_wrap(True) if text: label.set_text(text) label.show() return label def _add_vbox(self, context): vbox = self.vbox_factory() vbox.set_homogeneous(False) vbox.set_spacing(8) context.add(vbox) vbox.show() return vbox def run(self): # Save touchpad settings. touchpad_settings = Gio.Settings.new(self.touchpad_key) self.saved_horiz_scroll_enabled = touchpad_settings.get_boolean( "horiz-scroll-enabled") self.saved_scroll_method = touchpad_settings.get_string( "scroll-method") # Set touchpad settings. touchpad_settings.set_boolean("horiz-scroll-enabled", True) if self.edge_scroll: touchpad_settings.set_string("scroll-method", "edge-scrolling") Gtk.main() def quit(self): # Reset touchpad settings. touchpad_settings = Gio.Settings.new(self.touchpad_key) touchpad_settings.set_boolean( "horiz-scroll-enabled", self.saved_horiz_scroll_enabled) touchpad_settings.set_string( "scroll-method", self.saved_scroll_method) Gtk.main_quit() def show_text(self, text, widget=None): if widget is None: widget = self.label widget.set_text(text) def found_direction(self, direction): direction.tested = True self.icons[direction].set_from_stock( self.ICON_TESTED, size=self.ICON_SIZE) self.check_directions() def check_directions(self): if all([direction.tested for direction in self.directions]): self.show_text( _("All required directions have been tested!"), self.status) self.exit_code = EXIT_WITH_SUCCESS self.exit_button.grab_focus() def on_scroll(self, window, event): for direction in self.directions: if direction.value == event.direction: self.found_direction(direction) break return True def main(args): gettext.textdomain("checkbox") usage = """Usage: %prog DIRECTION... [--edge-scroll]""" parser = OptionParser(usage=usage) parser.add_option("--edge-scroll", action="store_true", default=False, help="Force touchpad to use edge scrolling only") (options, args) = parser.parse_args(args) if not args: parser.error("Must specify directions to test.") directions = [] for arg in args: try: direction = Direction(arg) except AttributeError: parser.error("Unsupported direction: %s" % arg) directions.append(direction) scroller = GtkScroller(directions, edge_scroll=options.edge_scroll) try: scroller.run() except KeyboardInterrupt: scroller.show_text(_("Test interrupted"), self.status) scroller.quit() return scroller.exit_code if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/network_reconnect_resume_test0000775000175000017500000000647412646152433026755 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # Copyright (C) 2012 Canonical, Ltd. import re import subprocess import argparse import sys def get_time_difference(device): """ Returns the difference in seconds between the last resume from suspend (S3) and the time it took to reconnect to Wifi. If there is a problem finding the information, None is returned. """ resume_time = get_resume_time() if resume_time is None: print("Unable to obtain wakeup/resume time from dmesg." "Please be sure the system has been suspended", file=sys.stderr) return None if device == "wifi": reconnect_times = list(get_wifi_reconnect_times()) elif device == "wired": reconnect_times = list(get_wired_reconnect_times()) if not reconnect_times: print("Unable to obtain %s connection time after a S3. Please be sure" " that the system has been suspended" % device, file=sys.stderr) return None # since some wifi & wired tests can disconnect and reconnect us multiple # times after a suspend, we need to find the reconnect that occurs # immediately after the resume from S3 for reconnect_time in reconnect_times: if reconnect_time >= resume_time: return round((reconnect_time - resume_time), 2) return None def get_wifi_reconnect_times(): """ Returns a list of all the timestamps for wifi reconnects. """ data = subprocess.check_output(['dmesg'], universal_newlines=True) syntax = re.compile("\[(.*)\] wlan.* associated") results = re.findall(syntax, data) return map(float, results) def get_wired_reconnect_times(): """ Returns a list of all the timestamps for wired reconnects. """ data = subprocess.check_output(['dmesg'], universal_newlines=True) syntax = re.compile("\[(.*)\].*eth.* Link is [uU]p") results = re.findall(syntax, data) return map(float, results) def get_resume_time(): """ Returns the last (most recent) timestamp for an ACPI resume from sleep (S3) If no resume is found, None is returned. """ data = subprocess.check_output(['dmesg'], universal_newlines=True) syntax = re.compile("\[(.*)\].ACPI: Waking up from system sleep state S3") results = re.findall(syntax, data) if not results: return None else: return float(results[-1]) def main(): parser = argparse.ArgumentParser() parser.add_argument('-t', '--timeout', type=int, help="Specified max time allowed for Wifi/Wired to" " reconnect in seconds", required=True) parser.add_argument('-d', '--device', help="Specify the device to test either, eth or wlan", required=True, choices=['wifi', 'wired']) args = parser.parse_args() timedif = get_time_difference(args.device) if not timedif: return 0 print("Your %s resumed in %s seconds after the last suspend" % ( args.device, timedif)) if timedif > args.timeout: print("FAIL: the network failed to reconnect within the allotted time") return 1 else: print("PASS: the network connected within the allotted time") return 0 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/gateway_ping_test0000775000175000017500000002562012646152433024314 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # This file is part of Checkbox. # # Copyright 2007-2014 Canonical Ltd. # Written by: # Brendan Donegan # Daniel Manrique # David Murphy # Javier Collado # Jeff Lane # Marc Tardif # Mathieu Trudel-Lapierre # Zygmunt Krynicki # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . from gettext import gettext as _ import argparse import errno import gettext import logging import os import re import socket import struct import subprocess import sys import time class Route: """ Gets routing information from the system. """ def _num_to_dotted_quad(self, number): """ Convert long int to dotted quad string """ return socket.inet_ntoa(struct.pack("\w+)\s+00000000\s+" "(?P[\w]+)\s+") w = h.search(route) if w: if w.group("def_gateway"): return self._num_to_dotted_quad( int(w.group("def_gateway"), 16)) else: logging.error( _("Could not find def gateway info in /proc")) return None else: logging.error(_("Could not find def gateway info in /proc")) return None def _get_default_gateway_from_bin_route(self): """ Get default gateway from /sbin/route -n Called by get_default_gateway and is only used if could not get that from /proc """ logging.debug( _("Reading default gateway information from route binary")) routebin = subprocess.getstatusoutput( "export LANGUAGE=C; " "/usr/bin/env route -n") if routebin[0] == 0: h = re.compile("\n0.0.0.0\s+(?P[\w.]+)\s+") w = h.search(routebin[1]) if w: def_gateway = w.group("def_gateway") if def_gateway: return def_gateway logging.error(_("Could not find default gateway by running route")) return None def get_hostname(self): return socket.gethostname() def get_default_gateway(self): t1 = self._get_default_gateway_from_proc() if not t1: t1 = self._get_default_gateway_from_bin_route() return t1 def get_host_to_ping(interface=None, verbose=False, default=None): # Get list of all IPs from all my interfaces, interface_list = subprocess.check_output(["ip", "-o", 'addr', 'show']) reg = re.compile('\d: (?P\w+) +inet (?P
[\d\.]+)/' '(?P[\d]+) brd (?P[\d\.]+)') # Will magically exclude lo because it lacks brd field interfaces = reg.findall(interface_list.decode()) # ping -b the network on each one (one ping only) # exclude the ones not specified in iface for iface in interfaces: if not interface or iface[0] == interface: # Use check_output even if I'll discard the output # looks cleaner than using .call and redirecting stdout to null try: subprocess.check_output(["ping", "-q", "-c", "1", "-b", iface[3]], stderr=subprocess.STDOUT) except subprocess.CalledProcessError: pass # If default host given, ping it as well, # to try to get it into the arp table. # Needed in case it's not responding to broadcasts. if default: try: subprocess.check_output(["ping", "-q", "-c", "1", default], stderr=subprocess.STDOUT) except subprocess.CalledProcessError: pass ARP_POPULATE_TRIES = 10 num_tries = 0 while num_tries < ARP_POPULATE_TRIES: # Get output from arp -a -n to get known IPs known_ips = subprocess.check_output(["arp", "-a", "-n"]) reg = re.compile('\? \((?P[\d.]+)\) at (?P[a-f0-9\:]+) ' '\[ether\] on (?P[\w\d]+)') # Filter (if needed) IPs not on the specified interface pingable_ips = [pingable[0] for pingable in reg.findall( known_ips.decode()) if not interface or pingable[2] == interface] # If the default given ip is among the remaining ones, # ping that. if default and default in pingable_ips: if verbose: print(_( "Desired ip address {0} is reachable, using it" ).format(default)) return default # If not, choose another IP. address_to_ping = pingable_ips[0] if len(pingable_ips) else None if verbose: print(_( "Desired ip address {0} is not reachable from {1}," " using {2} instead" ).format(default, interface, address_to_ping)) if address_to_ping: return address_to_ping time.sleep(2) num_tries += 1 # Wait time expired return None def ping(host, interface, count, deadline, verbose=False): command = ["ping", str(host), "-c", str(count), "-w", str(deadline)] if interface: command.append("-I{}".format(interface)) reg = re.compile( r"(\d+) packets transmitted, (\d+) received, (\d+)% packet loss") ping_summary = {'transmitted': 0, 'received': 0, 'pct_loss': 0} try: output = subprocess.check_output(command, universal_newlines=True) except OSError as exc: if exc.errno == errno.ENOENT: # No ping command present; # default exception message is informative enough. print(exc) else: raise except subprocess.CalledProcessError as excp: # Ping returned fail exit code print(_("ERROR: ping result: {0}").format(excp)) else: if verbose: print(output) received = re.findall(reg, output) if received: ping_summary = received[0] ping_summary = { 'transmitted': int(ping_summary[0]), 'received': int(ping_summary[1]), 'pct_loss': int(ping_summary[2])} return ping_summary def main(args): gettext.textdomain("2013.com.canonical.certification.checkbox") gettext.bindtextdomain("2013.com.canonical.certification.checkbox", os.getenv("CHECKBOX_PROVIDER_LOCALE_DIR", None)) default_count = 2 default_delay = 4 route = Route() parser = argparse.ArgumentParser() parser.add_argument( "host", nargs='?', default=route.get_default_gateway(), help=_("host to ping")) parser.add_argument( "-c", "--count", default=default_count, type=int, help=_("number of packets to send")) parser.add_argument( "-d", "--deadline", default=default_delay, type=int, help=_("timeout in seconds")) parser.add_argument( "-t", "--threshold", default=0, type=int, help=_("allowed packet loss percentage (default: %(default)s)")) parser.add_argument( "-v", "--verbose", action='store_true', help=_("be verbose")) parser.add_argument( "-I", "--interface", help=_("use specified interface to send packets")) args = parser.parse_args() # Ensure count and deadline make sense. Adjust them if not. if args.deadline != default_delay and args.count != default_count: # Ensure they're both consistent, and exit with a warning if not, # rather than modifying what the user explicitly set. if args.deadline <= args.count: # FIXME: this cannot ever be translated correctly print(_( "ERROR: not enough time for {0} pings in {1} seconds" ).format(args.count, args.deadline)) return 1 elif args.deadline != default_delay: # Adjust count according to delay. args.count = args.deadline - 1 if args.count < 1: args.count = 1 if args.verbose: # FIXME: this cannot ever be translated correctly print(_( "Adjusting ping count to {0} to fit in {1}-second deadline" ).format(args.count, args.deadline)) else: # Adjust delay according to count args.deadline = args.count + 1 if args.verbose: # FIXME: this cannot ever be translated correctly print(_( "Adjusting deadline to {0} seconds to fit {1} pings" ).format(args.deadline, args.count)) # If given host is not pingable, override with something pingable. host = get_host_to_ping( interface=args.interface, verbose=args.verbose, default=args.host) if args.verbose: print(_("Checking connectivity to {0}").format(host)) ping_summary = None if host: ping_summary = ping(host, args.interface, args.count, args.deadline, args.verbose) if ping_summary is None or ping_summary['received'] == 0: print(_("No Internet connection")) return 1 elif ping_summary['transmitted'] != ping_summary['received']: print(_("Connection established, but lost {0}% of packets").format( ping_summary['pct_loss'])) if ping_summary['pct_loss'] > args.threshold: print(_( "FAIL: {0}% packet loss is higher than {1}% threshold" ).format(ping_summary['pct_loss'], args.threshold)) return 1 else: print(_( "PASS: {0}% packet loss is within {1}% threshold" ).format(ping_summary['pct_loss'], args.threshold)) return 0 else: print(_("Internet connection fully established")) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/removable_storage_watcher0000775000175000017500000012723512646152433026021 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import argparse import collections import copy import dbus import logging import sys from gi.repository import GObject, GUdev from checkbox_support.dbus import connect_to_system_bus from checkbox_support.dbus.udisks2 import UDisks2Model, UDisks2Observer from checkbox_support.dbus.udisks2 import is_udisks2_supported from checkbox_support.dbus.udisks2 import lookup_udev_device from checkbox_support.dbus.udisks2 import map_udisks1_connection_bus from checkbox_support.heuristics.udisks2 import is_memory_card from checkbox_support.parsers.udevadm import CARD_READER_RE, GENERIC_RE, FLASH_RE from checkbox_support.udev import get_interconnect_speed, get_udev_block_devices # Record representing properties of a UDisks1 Drive object needed by the # UDisks1 version of the watcher implementation UDisks1DriveProperties = collections.namedtuple( 'UDisks1DriveProperties', 'file bus speed model vendor media') # Delta record that encapsulates difference: # delta_dir -- directon of the difference, either DELTA_DIR_PLUS or # DELTA_DIR_MINUS # value -- the actual value being removed or added, either InterfaceDelta or # PropertyDelta instance, see below DeltaRecord = collections.namedtuple("DeltaRecord", "delta_dir value") # Delta value for representing interface changes InterfaceDelta = collections.namedtuple( "InterfaceDelta", "delta_type object_path iface_name") # Delta value for representing property changes PropertyDelta = collections.namedtuple( "PropertyDelta", "delta_type object_path iface_name prop_name prop_value") # Tokens that encode additions and removals DELTA_DIR_PLUS = '+' DELTA_DIR_MINUS = '-' # Tokens that encode interface and property deltas DELTA_TYPE_IFACE = 'i' DELTA_TYPE_PROP = 'p' def format_bytes(size): """ Format size to be easily read by humans The result is disk-size compatible (using multiples of 10 rather than 2) string like "4.5GB" """ for index, prefix in enumerate(" KMGTPEZY", 0): factor = 10 ** (index * 3) if size // factor <= 1000: break return "{}{}B".format(size // factor, prefix.strip()) class UDisks1StorageDeviceListener: def __init__(self, system_bus, loop, action, devices, minimum_speed, memorycard): self._action = action self._devices = devices self._minimum_speed = minimum_speed self._memorycard = memorycard self._bus = system_bus self._loop = loop self._error = False self._change_cache = [] def check(self, timeout): udisks = 'org.freedesktop.UDisks' if self._action == 'insert': signal = 'DeviceAdded' logging.debug("Adding signal listener for %s.%s", udisks, signal) self._bus.add_signal_receiver(self.add_detected, signal_name=signal, dbus_interface=udisks) elif self._action == 'remove': signal = 'DeviceRemoved' logging.debug("Adding signal listener for %s.%s", udisks, signal) self._bus.add_signal_receiver(self.remove_detected, signal_name=signal, dbus_interface=udisks) self._starting_devices = self.get_existing_devices() logging.debug("Starting with the following devices: %r", self._starting_devices) def timeout_callback(): print("%s seconds have expired " "waiting for the device to be inserted." % timeout) self._error = True self._loop.quit() logging.debug("Adding timeout listener, timeout=%r", timeout) GObject.timeout_add_seconds(timeout, timeout_callback) logging.debug("Starting event loop...") self._loop.run() return self._error def verify_device_change(self, changed_devices, message=""): logging.debug("Verifying device change: %s", changed_devices) # Filter the applicable bus types, as provided on the command line # (values of self._devices can be 'usb', 'firewire', etc) desired_bus_devices = [ device for device in changed_devices if device.bus in self._devices] logging.debug("Desired bus devices: %s", desired_bus_devices) for dev in desired_bus_devices: if self._memorycard: if (dev.bus != 'sdio' and not FLASH_RE.search(dev.media) and not CARD_READER_RE.search(dev.model) and not GENERIC_RE.search(dev.vendor)): logging.debug("The device does not seem to be a memory" " card (bus: %r, model: %r), skipping", dev.bus, dev.model) return print(message % {'bus': 'memory card', 'file': dev.file}) else: if (FLASH_RE.search(dev.media) or CARD_READER_RE.search(dev.model) or GENERIC_RE.search(dev.vendor)): logging.debug("The device seems to be a memory" " card (bus: %r (model: %r), skipping", dev.bus, dev.model) return print(message % {'bus': dev.bus, 'file': dev.file}) if self._minimum_speed: if dev.speed >= self._minimum_speed: print("with speed of %(speed)s bits/s " "higher than %(min_speed)s bits/s" % {'speed': dev.speed, 'min_speed': self._minimum_speed}) else: print("ERROR: speed of %(speed)s bits/s lower " "than %(min_speed)s bits/s" % {'speed': dev.speed, 'min_speed': self._minimum_speed}) self._error = True logging.debug("Device matches requirements, exiting event loop") self._loop.quit() def job_change_detected(self, devices, job_in_progress, job_id, job_num_tasks, job_cur_task_id, job_cur_task_percentage): logging.debug("UDisks1 reports a job change has been detected:" " devices: %s, job_in_progress: %s, job_id: %s," " job_num_tasks: %s, job_cur_task_id: %s," " job_cur_task_percentage: %s", devices, job_in_progress, job_id, job_num_tasks, job_cur_task_id, job_cur_task_percentage) if job_id == "FilesystemMount": if devices in self._change_cache: logging.debug("Ignoring filesystem mount," " the device is present in change cache") return logging.debug("Adding devices to change cache: %r", devices) self._change_cache.append(devices) logging.debug("Starting devices were: %s", self._starting_devices) current_devices = self.get_existing_devices() logging.debug("Current devices are: %s", current_devices) inserted_devices = list(set(current_devices) - set(self._starting_devices)) logging.debug("Computed inserted devices: %s", inserted_devices) if self._memorycard: message = "Expected memory card device %(file)s inserted" else: message = "Expected %(bus)s device %(file)s inserted" self.verify_device_change(inserted_devices, message=message) def add_detected(self, added_path): logging.debug("UDisks1 reports device has been added: %s", added_path) logging.debug("Resetting change_cache to []") self._change_cache = [] signal_name = 'DeviceJobChanged' dbus_interface = 'org.freedesktop.UDisks' logging.debug("Adding signal listener for %s.%s", dbus_interface, signal_name) self._bus.add_signal_receiver(self.job_change_detected, signal_name=signal_name, dbus_interface=dbus_interface) def remove_detected(self, removed_path): logging.debug("UDisks1 reports device has been removed: %s", removed_path) logging.debug("Starting devices were: %s", self._starting_devices) current_devices = self.get_existing_devices() logging.debug("Current devices are: %s", current_devices) removed_devices = list(set(self._starting_devices) - set(current_devices)) logging.debug("Computed removed devices: %s", removed_devices) self.verify_device_change(removed_devices, message="Removable %(bus)s device %(file)s has been removed") def get_existing_devices(self): logging.debug("Getting existing devices from UDisks1") ud_manager_obj = self._bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks") ud_manager = dbus.Interface(ud_manager_obj, 'org.freedesktop.UDisks') existing_devices = [] for dev in ud_manager.EnumerateDevices(): try: device_obj = self._bus.get_object("org.freedesktop.UDisks", dev) device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE) udisks = 'org.freedesktop.UDisks.Device' _device_file = device_props.Get(udisks, "DeviceFile") _bus = device_props.Get(udisks, "DriveConnectionInterface") _speed = device_props.Get(udisks, "DriveConnectionSpeed") _parent_model = '' _parent_media = '' _parent_vendor = '' if device_props.Get(udisks, "DeviceIsPartition"): parent_obj = self._bus.get_object( "org.freedesktop.UDisks", device_props.Get(udisks, "PartitionSlave")) parent_props = dbus.Interface( parent_obj, dbus.PROPERTIES_IFACE) _parent_model = parent_props.Get(udisks, "DriveModel") _parent_vendor = parent_props.Get(udisks, "DriveVendor") _parent_media = parent_props.Get(udisks, "DriveMedia") if not device_props.Get(udisks, "DeviceIsDrive"): device = UDisks1DriveProperties( file=str(_device_file), bus=str(_bus), speed=int(_speed), model=str(_parent_model), vendor=str(_parent_vendor), media=str(_parent_media)) existing_devices.append(device) except dbus.DBusException: pass return existing_devices def udisks2_objects_delta(old, new): """ Compute the delta between two snapshots of udisks2 objects The objects are encoded as {s:{s:{s:v}}} where the first dictionary maps from DBus object path to a dictionary that maps from interface name to a dictionary that finally maps from property name to property value. The result is a generator of DeltaRecord objects that encodes the changes: * the 'delta_dir' is either DELTA_DIR_PLUS or DELTA_DIR_MINUS * the 'value' is a tuple that differs for interfaces and properties. Interfaces use the format (DELTA_TYPE_IFACE, object_path, iface_name) while properties use the format (DELTA_TYPE_PROP, object_path, iface_name, prop_name, prop_value) Interfaces are never "changed", they are only added or removed. Properties can be changed and this is encoded as removal followed by an addition where both differ only by the 'delta_dir' and the last element of the 'value' tuple. """ # Traverse all objects, old or new all_object_paths = set() all_object_paths |= old.keys() all_object_paths |= new.keys() for object_path in sorted(all_object_paths): old_object = old.get(object_path, {}) new_object = new.get(object_path, {}) # Traverse all interfaces of each object, old or new all_iface_names = set() all_iface_names |= old_object.keys() all_iface_names |= new_object.keys() for iface_name in sorted(all_iface_names): if iface_name not in old_object and iface_name in new_object: # Report each ADDED interface assert iface_name in new_object delta_value = InterfaceDelta( DELTA_TYPE_IFACE, object_path, iface_name) yield DeltaRecord(DELTA_DIR_PLUS, delta_value) # Report all properties ADDED on that interface for prop_name, prop_value in new_object[iface_name].items(): delta_value = PropertyDelta(DELTA_TYPE_PROP, object_path, iface_name, prop_name, prop_value) yield DeltaRecord(DELTA_DIR_PLUS, delta_value) elif iface_name not in new_object and iface_name in old_object: # Report each REMOVED interface assert iface_name in old_object delta_value = InterfaceDelta( DELTA_TYPE_IFACE, object_path, iface_name) yield DeltaRecord(DELTA_DIR_MINUS, delta_value) # Report all properties REMOVED on that interface for prop_name, prop_value in old_object[iface_name].items(): delta_value = PropertyDelta(DELTA_TYPE_PROP, object_path, iface_name, prop_name, prop_value) yield DeltaRecord(DELTA_DIR_MINUS, delta_value) else: # Analyze properties of each interface that existed both in old # and new object trees. assert iface_name in new_object assert iface_name in old_object old_props = old_object[iface_name] new_props = new_object[iface_name] all_prop_names = set() all_prop_names |= old_props.keys() all_prop_names |= new_props.keys() # Traverse all properties, old or new for prop_name in sorted(all_prop_names): if prop_name not in old_props and prop_name in new_props: # Report each ADDED property delta_value = PropertyDelta( DELTA_TYPE_PROP, object_path, iface_name, prop_name, new_props[prop_name]) yield DeltaRecord(DELTA_DIR_PLUS, delta_value) elif prop_name not in new_props and prop_name in old_props: # Report each REMOVED property delta_value = PropertyDelta( DELTA_TYPE_PROP, object_path, iface_name, prop_name, old_props[prop_name]) yield DeltaRecord(DELTA_DIR_MINUS, delta_value) else: old_value = old_props[prop_name] new_value = new_props[prop_name] if old_value != new_value: # Report each changed property yield DeltaRecord(DELTA_DIR_MINUS, PropertyDelta( DELTA_TYPE_PROP, object_path, iface_name, prop_name, old_value)) yield DeltaRecord(DELTA_DIR_PLUS, PropertyDelta( DELTA_TYPE_PROP, object_path, iface_name, prop_name, new_value)) class UDisks2StorageDeviceListener: """ Implementation of the storage device listener concept for UDisks2 backend. Loosely modeled on the UDisks-based implementation above. Implementation details ^^^^^^^^^^^^^^^^^^^^^^ The class, once configured reacts to asynchronous events from the event loop. Those are either DBus signals or GLib timeout. The timeout, if reached, terminates the test and fails with an appropriate end-user message. The user is expected to manipulate storage devices while the test is running. DBus signals (that correspond to UDisks2 DBus signals) cause callbacks into this code. Each time a signal is reported "delta" is computed and verified to determine if there was a successful match. The delta contains a list or DeltaRecord objects that encode difference (either addition or removal) and the value of the difference (interface name or interface property value). This delta is computed by udisks2_objects_delta(). The delta is then passed to _validate_delta() which has a chance to end the test but also prints diagnostic messages in verbose mode. This is very useful for understanding what the test actually sees occurring. Insertion/removal detection strategy ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Compared to initial state, the following changes objects need to be detected * At least one UDisks2 object with the following _all_ interfaces: * UDisks2.Partition (because we want a partitioned device) * UDisks2.Block (because we want that device to have a block device that users can format) - having IdUsage == 'filesystem' (because it should not be a piece of raid or lvm) - having Size > 0 (because it should not be and empty removable storage reader) * UDisks2.Filesystem (because we want to ensure that a filesystem gets mounted) - having MountPoints != [] - as a special exception this rule is REMOVED from eSATA and SATA devices as they are not automatically mounted anymore. This object must be traceable to an UDisks.Drive object: (because we need the medium to be inserted somewhere) - having ConnectionBus in (desired_connection_buses) - as a special exception this rule is weakened for eSATA because for such devices the ConnectionBus property is empty. """ # Name of the DBus interface exposed UDisks2 for various drives UDISKS2_DRIVE_INTERFACE = "org.freedesktop.UDisks2.Drive" # Name of the DBus property provided by the "Drive" interface above UDISKS2_DRIVE_PROPERTY_CONNECTION_BUS = "ConnectionBus" def __init__(self, system_bus, loop, action, devices, minimum_speed, memorycard): # Store the desired minimum speed of the device in Mbit/s. The argument # is passed as the number of bits per second so let's fix that. self._desired_minimum_speed = minimum_speed / 10 ** 6 # Compute the allowed UDisks2.Drive.ConnectionBus value based on the # legacy arguments passed from the command line. self._desired_connection_buses = set([ map_udisks1_connection_bus(device) for device in devices]) # Check if we are explicitly looking for memory cards self._desired_memory_card = memorycard # Store the desired "delta" direction depending on # whether we test for insertion or removal if action == "insert": self._desired_delta_dir = DELTA_DIR_PLUS elif action == "remove": self._desired_delta_dir = DELTA_DIR_MINUS else: raise ValueError("Unsupported action: {}".format(action)) # Store DBus bus object as we need to pass it to UDisks2 observer self._bus = system_bus # Store event loop object self._loop = loop # Setup UDisks2Observer class to track changes published by UDisks2 self._udisks2_observer = UDisks2Observer() # Set the initial value of reference_objects. # The actual value is only set once in check() self._reference_objects = None # As above, just initializing in init for sake of consistency self._is_reference = None # Setup UDisks2Model to know what the current state is. This is needed # when remove events are reported as they don't carry enough state for # the program to work correctly. Since UDisks2Model only applies the # changes _after_ processing the signals from UDisks2Observer we can # reliably check all of the properties of the removed object / device. self._udisks2_model = UDisks2Model(self._udisks2_observer) # Whenever anything changes call our local change handler # This handler always computes the full delta (versus the # reference state) and decides if we have a match or not self._udisks2_model.on_change.connect(self._on_change) # We may need an udev context for checking the speed of USB devices self._udev_client = GUdev.Client() # A snapshot of udev devices, set in check() self._reference_udev_devices = None # Assume the test passes, this is changed when timeout expires or when # an incorrect device gets inserted. self._error = False def _dump_reference_udisks_objects(self): logging.debug("Reference UDisks2 objects:") for udisks2_object in self._reference_objects: logging.debug(" - %s", udisks2_object) def _dump_reference_udev_devices(self): logging.debug("Reference udev devices:") for udev_device in self._reference_udev_devices: interconnect_speed = get_interconnect_speed(udev_device) if interconnect_speed: logging.debug(" - %s (USB %dMBit/s)", udev_device.get_device_file(), interconnect_speed) else: logging.debug(" - %s", udev_device.get_device_file()) def check(self, timeout): """ Run the configured test and return the result The result is False if the test has failed. The timeout, when non-zero, will make the test fail after the specified seconds have elapsed without conclusive result. """ # Setup a timeout if requested if timeout > 0: GObject.timeout_add_seconds(timeout, self._on_timeout_expired) # Connect the observer to the bus. This will start giving us events # (actually when the loop starts later below) self._udisks2_observer.connect_to_bus(self._bus) # Get the reference snapshot of available devices self._reference_objects = copy.deepcopy(self._current_objects) self._dump_reference_udisks_objects() # Mark the current _reference_objects as ... reference, this is sadly # needed by _summarize_changes() as it sees the snapshot _after_ a # change has occurred and cannot determine if the slope of the 'edge' # of the change. It is purely needed for UI in verbose mode self._is_reference = True # A collection of objects that we gladly ignore because we already # reported on them being somehow inappropriate self._ignored_objects = set() # Get the reference snapshot of available udev devices self._reference_udev_devices = get_udev_block_devices( self._udev_client) self._dump_reference_udev_devices() # Start the loop and wait. The loop will exit either when: # 1) A proper device has been detected (either insertion or removal) # 2) A timeout (optional) has expired self._loop.run() # Return the outcome of the test return self._error def _on_timeout_expired(self): """ Internal function called when the timer expires. Basically it's just here to tell the user the test failed or that the user was unable to alter the device during the allowed time. """ print("You have failed to perform the required manipulation in time") # Fail the test when the timeout was reached self._error = True # Stop the loop now self._loop.quit() def _on_change(self): """ Internal method called by UDisks2Model whenever a change had occurred """ # Compute the changes that had occurred since the reference point delta_records = list(self._get_delta_records()) # Display a summary of changes when we are done self._summarize_changes(delta_records) # If the changes are what we wanted stop the loop matching_devices = self._get_matching_devices(delta_records) if matching_devices: print("Expected device manipulation complete: {}".format( ', '.join(matching_devices))) # And call it a day self._loop.quit() def _get_matching_devices(self, delta_records): """ Internal method called that checks if the delta records match the type of device manipulation we were expecting. Only called from _on_change() Returns a set of paths of block devices that matched """ # Results results = set() # Group changes by DBus object path grouped_records = collections.defaultdict(list) for record in delta_records: grouped_records[record.value.object_path].append(record) # Create another snapshot od udev devices so that we don't do it over # and over in the loop below (besides, if we did that then results # could differ each time). current_udev_devices = get_udev_block_devices(self._udev_client) # Iterate over all UDisks2 objects and their delta records for object_path, records_for_object in grouped_records.items(): # Skip objects we already ignored and complained about before if object_path in self._ignored_objects: continue needs = set(('block-fs', 'partition', 'non-empty', 'mounted')) # As a special exception when the ConnectionBus is allowed to be # empty, as is the case with eSATA devices, do not require the # filesystem to be mounted as gvfs may choose not to mount it # automatically. found = set() drive_object_path = None object_block_device = None for record in records_for_object: # Skip changes opposite to the ones we need if record.delta_dir != self._desired_delta_dir: continue # For devices with empty "ConnectionBus" property, don't # require the device to be mounted if (record.value.iface_name == "org.freedesktop.UDisks2.Drive" and record.value.delta_type == DELTA_TYPE_PROP and record.value.prop_name == "ConnectionBus" and record.value.prop_value == ""): needs.remove('mounted') # Detect block devices designated for filesystems if (record.value.iface_name == "org.freedesktop.UDisks2.Block" and record.value.delta_type == DELTA_TYPE_PROP and record.value.prop_name == "IdUsage" and record.value.prop_value == "filesystem"): found.add('block-fs') # Memorize the block device path elif (record.value.iface_name == "org.freedesktop.UDisks2.Block" and record.value.delta_type == DELTA_TYPE_PROP and record.value.prop_name == "PreferredDevice"): object_block_device = record.value.prop_value # Ensure the device is a partition elif (record.value.iface_name == "org.freedesktop.UDisks2.Partition" and record.value.delta_type == DELTA_TYPE_IFACE): found.add('partition') # Ensure the device is not empty elif (record.value.iface_name == "org.freedesktop.UDisks2.Block" and record.value.delta_type == DELTA_TYPE_PROP and record.value.prop_name == "Size" and record.value.prop_value > 0): found.add('non-empty') # Ensure the filesystem is mounted elif (record.value.iface_name == "org.freedesktop.UDisks2.Filesystem" and record.value.delta_type == DELTA_TYPE_PROP and record.value.prop_name == "MountPoints" and record.value.prop_value != []): found.add('mounted') # Finally memorize the drive the block device belongs to elif (record.value.iface_name == "org.freedesktop.UDisks2.Block" and record.value.delta_type == DELTA_TYPE_PROP and record.value.prop_name == "Drive"): drive_object_path = record.value.prop_value logging.debug("Finished analyzing %s, found: %s, needs: %s" " drive_object_path: %s", object_path, found, needs, drive_object_path) if needs != found or drive_object_path is None: continue # We've found our candidate, let's look at the drive it belongs # to. We need to do this as some properties are associated with # the drive, not the filesystem/block device and the drive may # not have been inserted at all. try: drive_object = self._current_objects[drive_object_path] except KeyError: # The drive may be removed along with the device, let's check # if we originally saw it try: drive_object = self._reference_objects[drive_object_path] except KeyError: logging.error( "A block device belongs to a drive we could not find") logging.error("missing drive: %r", drive_object_path) continue try: drive_props = drive_object["org.freedesktop.UDisks2.Drive"] except KeyError: logging.error( "A block device belongs to an object that is not a Drive") logging.error("strange object: %r", drive_object_path) continue # Ensure the drive is on the appropriate bus connection_bus = drive_props["ConnectionBus"] if connection_bus not in self._desired_connection_buses: logging.warning("The object %r belongs to drive %r that" " is attached to the bus %r but but we are" " looking for one of %r so it cannot match", object_block_device, drive_object_path, connection_bus, ", ".join(self._desired_connection_buses)) # Ignore this object so that we don't spam the user twice self._ignored_objects.add(object_path) continue # Ensure it is a media card reader if this was explicitly requested drive_is_reader = is_memory_card( drive_props['Vendor'], drive_props['Model'], drive_props['Media']) if self._desired_memory_card and not drive_is_reader: logging.warning( "The object %s belongs to drive %s that does not seem to" " be a media reader", object_block_device, drive_object_path) # Ignore this object so that we don't spam the user twice self._ignored_objects.add(object_path) continue # Ensure the desired minimum speed is enforced if self._desired_minimum_speed: # We need to discover the speed of the UDisks2 object that is # about to be matched. Sadly UDisks2 no longer supports this # property so we need to poke deeper and resort to udev. # # The UDisks2 object that we are interested in implements a # number of interfaces, most notably # org.freedesktop.UDisks2.Block, that has the Device property # holding the unix filesystem path (like /dev/sdb1). We already # hold a reference to that as 'object_block_device' # # We take this as a start and attempt to locate the udev Device # (don't confuse with UDisks2.Device, they are _not_ the same) # that is associated with that path. if self._desired_delta_dir == DELTA_DIR_PLUS: # If we are looking for additions then look at _current_ # collection of udev devices udev_devices = current_udev_devices udisks2_object = self._current_objects[object_path] else: # If we are looking for removals then look at referece # collection of udev devices udev_devices = self._reference_udev_devices udisks2_object = self._reference_objects[object_path] try: # Try to locate the corresponding udev device among the # collection we've selected. Use the drive object as the # key -- this looks for the drive, not partition objects! udev_device = lookup_udev_device(udisks2_object, udev_devices) except LookupError: logging.error("Unable to map UDisks2 object %s to udev", object_block_device) # Ignore this object so that we don't spam the user twice self._ignored_objects.add(object_path) continue interconnect_speed = get_interconnect_speed(udev_device) # Now that we know the speed of the interconnect we can try to # validate it against our desired speed. if interconnect_speed is None: logging.warning("Unable to determine interconnect speed of" " device %s", object_block_device) # Ignore this object so that we don't spam the user twice self._ignored_objects.add(object_path) continue elif interconnect_speed < self._desired_minimum_speed: logging.warning( "Device %s is connected via an interconnect that has" " the speed of %dMbit/s but the required speed was" " %dMbit/s", object_block_device, interconnect_speed, self._desired_minimum_speed) # Ignore this object so that we don't spam the user twice self._ignored_objects.add(object_path) continue else: logging.info("Device %s is connected via an USB" " interconnect with the speed of %dMbit/s", object_block_device, interconnect_speed) # Yay, success results.add(object_block_device) return results @property def _current_objects(self): return self._udisks2_model.managed_objects def _get_delta_records(self): """ Internal method used to compute the delta between reference devices and current devices. The result is a generator of DeltaRecord objects. """ assert self._reference_objects is not None, "Only usable after check()" old = self._reference_objects new = self._current_objects return udisks2_objects_delta(old, new) def _summarize_changes(self, delta_records): """ Internal method used to summarize changes (compared to reference state) called whenever _on_change() gets called. Only visible in verbose mode """ # Filter out anything but interface changes flat_records = [record for record in delta_records if record.value.delta_type == DELTA_TYPE_IFACE] # Group changes by DBus object path grouped_records = collections.defaultdict(list) for record in flat_records: grouped_records[record.value.object_path].append(record) # Bail out quickly when nothing got changed if not flat_records: if not self._is_reference: logging.info("You have returned to the reference state") self._is_reference = True return else: self._is_reference = False # Iterate over grouped delta records for all objects logging.info("Compared to the reference state you have:") for object_path in sorted(grouped_records.keys()): records_for_object = sorted( grouped_records[object_path], key=lambda record: record.value.iface_name) # Skip any job objects as they just add noise if any((record.value.iface_name == "org.freedesktop.UDisks2.Job" for record in records_for_object)): continue logging.info("For object %s", object_path) for record in records_for_object: # Ignore property changes for now if record.value.delta_type != DELTA_TYPE_IFACE: continue # Get the name of the interface that was affected iface_name = record.value.iface_name # Get the properties for that interface (for removals get the # reference values, for additions get the current values) if record.delta_dir == DELTA_DIR_PLUS: props = self._current_objects[object_path][iface_name] action = "inserted" else: props = self._reference_objects[object_path][iface_name] action = "removed" # Display some human-readable information associated with each # interface change if iface_name == "org.freedesktop.UDisks2.Drive": logging.info("\t * %s a drive", action) logging.info("\t vendor and name: %r %r", props['Vendor'], props['Model']) logging.info("\t bus: %s", props['ConnectionBus']) logging.info("\t size: %s", format_bytes(props['Size'])) logging.info("\t is media card: %s", is_memory_card( props['Vendor'], props['Model'], props['Media'])) logging.info("\t current media: %s", props['Media'] or "???" if props['MediaAvailable'] else "N/A") elif iface_name == "org.freedesktop.UDisks2.Block": logging.info("\t * %s block device", action) logging.info("\t from drive: %s", props['Drive']) logging.info("\t having device: %s", props['Device']) logging.info("\t having usage, type and version:" " %s %s %s", props['IdUsage'], props['IdType'], props['IdVersion']) logging.info("\t having label: %s", props['IdLabel']) elif iface_name == "org.freedesktop.UDisks2.PartitionTable": logging.info("\t * %s partition table", action) logging.info("\t having type: %r", props['Type']) elif iface_name == "org.freedesktop.UDisks2.Partition": logging.info("\t * %s partition", action) logging.info("\t from partition table: %s", props['Table']) logging.info("\t having size: %s", format_bytes(props['Size'])) logging.info("\t having name: %r", props['Name']) elif iface_name == "org.freedesktop.UDisks2.Filesystem": logging.info("\t * %s file system", action) logging.info("\t having mount points: %r", props['MountPoints']) def main(): description = "Wait for the specified device to be inserted or removed." parser = argparse.ArgumentParser(description=description) parser.add_argument('action', choices=['insert', 'remove']) parser.add_argument('device', choices=['usb', 'sdio', 'firewire', 'scsi', 'ata_serial_esata'], nargs="+") memorycard_help = ("Memory cards devices on bus other than sdio require " "this parameter to identify them as such") parser.add_argument('--memorycard', action="store_true", help=memorycard_help) parser.add_argument('--timeout', type=int, default=20) min_speed_help = ("Will only accept a device if its connection speed " "attribute is higher than this value " "(in bits/s)") parser.add_argument('--minimum_speed', '-m', help=min_speed_help, type=int, default=0) parser.add_argument('--verbose', action='store_const', const=logging.INFO, dest='logging_level', help="Enable verbose output") parser.add_argument('--debug', action='store_const', const=logging.DEBUG, dest='logging_level', help="Enable debugging") parser.set_defaults(logging_level=logging.WARNING) args = parser.parse_args() # Configure logging as requested # XXX: This may be incorrect as logging.basicConfig() fails after any other # call to logging.log(). The proper solution is to setup a verbose logging # configuration and I didn't want to do it now. logging.basicConfig( level=args.logging_level, format='[%(asctime)s] %(levelname)s:%(name)s:%(message)s') # Connect to the system bus, we also get the event # loop as we need it to start listening for signals. system_bus, loop = connect_to_system_bus() # Check if system bus has the UDisks2 object if is_udisks2_supported(system_bus): # Construct the listener with all of the arguments provided on the # command line and the explicit system_bus, loop objects. logging.debug("Using UDisks2 interface") listener = UDisks2StorageDeviceListener( system_bus, loop, args.action, args.device, args.minimum_speed, args.memorycard) else: # Construct the listener with all of the arguments provided on the # command line and the explicit system_bus, loop objects. logging.debug("Using UDisks1 interface") listener = UDisks1StorageDeviceListener( system_bus, loop, args.action, args.device, args.minimum_speed, args.memorycard) # Run the actual listener and wait till it either times out of discovers # the appropriate media changes try: return listener.check(args.timeout) except KeyboardInterrupt: return 1 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/disk_info0000775000175000017500000000463712646152433022551 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # # This file is part of Checkbox. # # Copyright (C) 2010-2013 by Cloud Computing Center for Mobile Applications # Industrial Technology Research Institute # # Authors: # Nelson Chu # Jeff Lane # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . """ disk_info Uses lshw to gather information about disks seen by the OS. Outputs logical name, vendor, description, size and product data """ import sys import xml.etree.ElementTree as ET from subprocess import check_output def get_item(disk, attribute): try: return disk.find(attribute).text except AttributeError: return "Unknown" def main(): hwinfo_xml = check_output(['lshw', '-c', 'disk', '-xml']) root = ET.fromstring(hwinfo_xml) # Parse lshw XML for gathering disk information. disk_list = root.findall(".//node[@class='disk']") if not disk_list: print("No disk information discovered.") return 10 for disk in disk_list: if disk.get('id') == 'disk': print("Name: {}".format(get_item(disk, 'logicalname'))) print("\t{k:15}\t{v}".format(k="Description:", v=get_item(disk, 'description'))) print("\t{k:15}\t{v}".format(k="Vendor:", v=get_item(disk, 'vendor'))) print("\t{k:15}\t{v}".format(k="Product:", v=get_item(disk, 'product'))) try: disk_size = ("%dGB" % ( int(disk.find('size').text) / (1000**3))) except TypeError: disk_size = "No Reported Size" except AttributeError: disk_size = "No Reported Size" print("\t{k:15}\t{v}".format(k="Size:", v=disk_size)) return 0 if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/floppy_test0000775000175000017500000000772112646152433023151 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import sys import filecmp import subprocess import posixpath DEFAULT_DIR = "/tmp/checkbox.floppy" DEFAULT_DEVICE_DIR = "floppy_device" DEFAULT_IMAGE_DIR = "floppy_image" DEFAULT_IMAGE = "floppy.img" class FloppyTest(object): def __init__(self, device): self.device = device self.device_dir = os.path.join(DEFAULT_DIR, DEFAULT_DEVICE_DIR) self.image_dir = os.path.join(DEFAULT_DIR, DEFAULT_IMAGE_DIR) self.image = os.path.join(DEFAULT_DIR, DEFAULT_IMAGE) self.interactive = True for dir in (self.device_dir, self.image_dir): if not posixpath.exists(dir): os.makedirs(dir) def run(self): floppyDevice = self.device if floppyDevice: print(" Testing on floppy drive %s " % floppyDevice) else: print(" Error ! No floppy drive found !") return 1 # remove temp files if they exist os.system("umount /media/floppy 2>/dev/null") if (os.path.exists(self.device_dir) or os.path.exists(self.image_dir) or os.path.exists(self.image)): os.system("umount %s %s 2>/dev/null" % (self.device_dir, self.image_dir)) os.system("rm -rf %s %s %s 2>/dev/null" % (self.device_dir, self.image_dir, self.image)) # Create the test images os.mkdir(self.device_dir) os.mkdir(self.image_dir) os.system("dd if=/dev/zero of=%s bs=1k count=1440" % self.image) os.system("mkdosfs %s" % self.image) os.system("mount -o loop %s %s" % (self.image, self.image_dir)) os.system("cp -a /etc/*.conf %s 2> /dev/null" % self.image_dir) os.system("umount %s" % self.image_dir) # start testing (noFloppyDisk, junkOutput1) = \ subprocess.getstatusoutput("dd bs=1c if=%s count=0 2>/dev/null" % floppyDevice) if noFloppyDisk != 0: print("Error ! No floppy disc or bad media in %s !" % floppyDevice) return 1 else: # writing files print(" Writing data to floppy disc ... ") (ddStatus, ddOutput) = \ subprocess.getstatusoutput("dd if=%s of=%s bs=1k count=1440" % (self.image, floppyDevice)) if ddStatus == 0: print(" Write data to floppy disc done ! ") else: print(" Error ! Write data to floppy disc error ! ") print(" Please check if your floppy disc is write-protected !") return 1 # comparing files os.system("mount %s %s" % (floppyDevice, self.device_dir)) os.system("mount -o loop %s %s" % (self.image, self.image_dir)) print(" Comparing files ... ") fileList = os.listdir(self.image_dir) returnValue = 0 for textFile in fileList: file1 = os.path.join(self.device_dir, textFile) file2 = os.path.join(self.image_dir, textFile) if filecmp.cmp(file1, file2): print(" comparing file %s" % textFile) else: print(" -- Error ! File %s comparison failed ! -- " % textFile) returnValue = 1 print(" File comparison done ! ") # remove temp files os.system("umount /media/floppy 2>/dev/null") os.system("umount %s %s " % (self.image_dir, self.device_dir)) os.system("rm -rf %s %s %s" % (self.device_dir, self.image_dir, self.image)) print("Done !") return returnValue def main(args): return_values = [] for device in args: test = FloppyTest(device) return_values.append(test.run()) return 1 in return_values if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/pulse-active-port-change0000775000175000017500000001302612646152433025402 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # This file is part of Checkbox. # # Copyright 2014 Canonical Ltd. # Written by: # Zygmunt Krynicki # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . """ pulse-active-port-change ======================== This script checks if the active port on either sinks (speakers or headphones) or sources (microphones, webcams) is changed after an appropriate device is plugged into the DUT. The script is fully automatic and either times out after 30 seconds or returns as soon as the change is detected. The script monitors pulse audio events with `pactl subscribe`. Any changes to sinks (or sources, depending on the mode) are treated as a possible match. A match is verified by running `pactl list sinks` (or `pactl list sources`) and constructing a set of tuples (sink-source-name, sink-source-active-port, sink-source-availability). Any change to the computed set, as compared to the initially computed set, is considered a match. Due to the algorithm used, it will also detect things like USB headsets, HDMI monitors/speakers, webcams, etc. The script depends on: python3-checkbox-support Which depends on: python3-pyparsing """ import argparse import os import pty import signal import subprocess from checkbox_support.parsers.pactl import parse_pactl_output class AudioPlugDetection: def __init__(self, timeout, mode): # store parameters self.timeout = timeout self.mode = mode # get the un-localized environment env = dict(os.environb) env[b'LANG'] = b'' env[b'LANGUAGE'] = b'' env[b'LC_ALL'] = b'C.UTF-8' self.unlocalized_env = env # set SIGALRM handler signal.signal(signal.SIGALRM, self.on_timeout) def get_sound_config(self): text = subprocess.check_output( ["pactl", "list", self.mode], # either 'sources' or 'sinks' env=self.unlocalized_env, universal_newlines=True) doc = parse_pactl_output(text) cfg = set() for record in doc.record_list: active_port = None # We go through the attribute list once to try to find an active port for attr in record.attribute_list: if attr.name == "Active Port": active_port = attr.value # If there is one, we retrieve its availability flag if active_port: for attr in record.attribute_list: if attr.name == "Ports": for port in attr.value: if port.name == active_port: port_availability = port.availability cfg.add((record.name, active_port, port_availability)) return cfg def on_timeout(self, signum, frame): print("Time is up") raise SystemExit(1) @classmethod def main(cls): parser = argparse.ArgumentParser( description=__doc__.split(" ")[0], epilog=__doc__.split(" ")[1], formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument( 'mode', choices=['sinks', 'sources'], help='Monitor either sinks or sources') parser.add_argument( '-t', '--timeout', type=int, default=30, help='Timeout after which the script fails') ns = parser.parse_args() return cls(ns.timeout, ns.mode).run() def run(self): found = False if self.mode == 'sinks': look_for = "Event 'change' on sink #" look_for2 = "Event 'change' on server #" elif self.mode == 'sources': look_for = "Event 'change' on source #" look_for2 = "Event 'change' on server #" else: assert False # Get the initial / baseline configuration initial_cfg = self.get_sound_config() print("Starting with config: {}".format(initial_cfg)) print("You have {} seconds to plug something".format(self.timeout)) # Start the timer signal.alarm(self.timeout) # run subscribe in a pty as it doesn't fflush() after every event pid, master_fd = pty.fork() if pid == 0: os.execlpe("pactl", "pactl", "subscribe", self.unlocalized_env) else: child_stream = os.fdopen(master_fd, "rt", encoding='UTF-8') try: for line in child_stream: if line.startswith(look_for) or line.startswith(look_for2): new_cfg = self.get_sound_config() print("Now using config: {}".format(new_cfg)) if new_cfg != initial_cfg: print("It seems to work!") found = True break except KeyboardInterrupt: pass finally: os.kill(pid, signal.SIGTERM) os.close(master_fd) return 0 if found else 1 if __name__ == "__main__": raise SystemExit(AudioPlugDetection.main()) plainbox-provider-checkbox-0.25/bin/hdd_parking0000775000175000017500000000445412646152433023053 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # hdd_parking # # This file is part of Checkbox. # # Copyright 2014 Canonical Ltd. # # Authors: Brendan Donegan # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . """ This script verifies that a systems HDD protection capabilities are triggered when appropriate. There are many implementations of HDD protection from different OEMs, each implemented in a different way, so this script can only support implementations which are known to work and are testable. Currently the list of supported implementations is: - HDAPS (Lenovo) """ import sys import time from argparse import ArgumentParser from subprocess import Popen, PIPE TIMEOUT = 15.0 def hdaps_test(run_time): try: hdapsd = Popen(['/usr/sbin/hdapsd'], stdout=PIPE, stderr=PIPE, universal_newlines=True) except OSError as err: print("Unable to start hdapsd: {}".format(err)) return 1 time.sleep(float(run_time)) hdapsd.terminate() # Look for parking message in hdapsd output. stdout = hdapsd.communicate()[0] print(stdout) for line in stdout.split('\n'): if line.endswith('parking'): return 0 return 1 def main(): # First establish the driver used parser = ArgumentParser("Tests a systems HDD protection capabilities. " "Requires the system to be moved by the tester.") parser.add_argument('-t', '--timeout', default=TIMEOUT, help='The time allowed before the test fails.') print('Starting HDD protection test - move the system around on ' 'all axis. No particular force should be required.') return hdaps_test(parser.parse_args().timeout) if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/key_test0000775000175000017500000003070412646152433022425 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . import os import sys import fcntl import gettext import struct import termios from gettext import gettext as _ from gi.repository import GObject from optparse import OptionParser EXIT_WITH_FAILURE = 1 EXIT_WITH_SUCCESS = 0 EXIT_TIMEOUT = 30 # Keyboard options from /usr/include/linux/kd.h K_RAW = 0x00 K_XLATE = 0x01 K_MEDIUMRAW = 0x02 K_UNICODE = 0x03 K_OFF = 0x04 KDGKBMODE = 0x4B44 KDSKBMODE = 0x4B45 def ioctl_p_int(fd, request, value=0): s = struct.pack("i", value) s2 = fcntl.ioctl(fd, request, s) (ret,) = struct.unpack("i", s2) # This always returns a tuple. return ret class Key: def __init__(self, codes, name=None): self.codes = codes self.name = name self.tested = False self.required = True @property def status(self): if not self.required: return _("Not required") if not self.tested: return _("Untested") return _("Tested") class Reporter(object): exit_code = EXIT_WITH_FAILURE def __init__(self, main_loop, keys, scancodes=False): self.main_loop = main_loop self.keys = keys self.scancodes = scancodes self.fileno = os.open("/dev/console", os.O_RDONLY) GObject.io_add_watch(self.fileno, GObject.IO_IN, self.on_key) # Set terminal attributes self.saved_attributes = termios.tcgetattr(self.fileno) attributes = termios.tcgetattr(self.fileno) attributes[3] &= ~(termios.ICANON | termios.ECHO) attributes[6][termios.VMIN] = 1 attributes[6][termios.VTIME] = 0 termios.tcsetattr(self.fileno, termios.TCSANOW, attributes) # Set keyboard mode self.saved_mode = ioctl_p_int(self.fileno, KDGKBMODE) mode = K_RAW if scancodes else K_MEDIUMRAW fcntl.ioctl(self.fileno, KDSKBMODE, mode) def _parse_codes(self, raw_bytes): """Parse the given string of bytes to scancodes or keycodes.""" if self.scancodes: return self._parse_scancodes(raw_bytes) else: return self._parse_keycodes(raw_bytes) def _parse_scancodes(self, raw_bytes): """Parse the bytes in raw_bytes into a scancode.""" index = 0 length = len(raw_bytes) while index < length: if (index + 1 < length and raw_bytes[index] == 0xE0): code = ((raw_bytes[index] << 8) | raw_bytes[index + 1]) index += 2 else: code = raw_bytes[0] index += 1 yield code def _parse_keycodes(self, raw_bytes): """Parse the bytes in raw_bytes into a keycode.""" index = 0 length = len(raw_bytes) while index < length: if (index + 2 < length and (raw_bytes[index] & 0x7f) == 0 and (raw_bytes[index + 1] & 0x80) != 0 and (raw_bytes[index + 2] & 0x80) != 0): code = (((raw_bytes[index + 1] & 0x7f) << 7) | (raw_bytes[2] & 0x7f)) index += 3 else: code = (raw_bytes[0] & 0x7f) index += 1 yield code @property def required_keys_tested(self): """Returns True if all keys marked as required have been tested""" return all([key.tested for key in self.keys if key.required]) def show_text(self, string): pass def quit(self, exit_code=EXIT_WITH_FAILURE): self.exit_code = exit_code termios.tcsetattr(self.fileno, termios.TCSANOW, self.saved_attributes) fcntl.ioctl(self.fileno, KDSKBMODE, self.saved_mode) # FIXME: Having a reference to the mainloop is suboptimal. self.main_loop.quit() def found_key(self, key): key.tested = True def toggle_key(self, key): key.required = not key.required key.tested = False def on_key(self, source, cb_condition): raw_bytes = os.read(source, 18) for code in self._parse_codes(raw_bytes): if code == 1: # Check for ESC key pressed self.show_text(_("Test cancelled")) self.quit() elif code > 1 and code < 10: # Check for number to skip self.toggle_key(self.keys[code - 2]) else: # Check for other key pressed for key in self.keys: if code in key.codes: self.found_key(key) break return True class CLIReporter(Reporter): def __init__(self, *args, **kwargs): super(CLIReporter, self).__init__(*args, **kwargs) self.show_text(_("Please press each key on your keyboard.")) self.show_text(_("I will exit automatically once all keys " "have been pressed.")) self.show_text(_("If your keyboard lacks one or more keys, " "press its number to skip testing that key.")) self.show_text(_("You can also close me by pressing ESC or Ctrl+C.")) self.show_keys() def show_text(self, string): sys.stdout.write(string + "\n") sys.stdout.flush() def show_keys(self): self.show_text("---") for index, key in enumerate(self.keys): self.show_text( "%(number)d - %(key)s - %(status)s" % {"number": index + 1, "key": key.name, "status": key.status}) def found_key(self, key): super(CLIReporter, self).found_key(key) self.show_text( _("%(key_name)s key has been pressed" % {'key_name': key.name})) self.show_keys() if self.required_keys_tested: self.show_text(_("All required keys have been tested!")) self.quit(EXIT_WITH_SUCCESS) def toggle_key(self, key): super(CLIReporter, self).toggle_key(key) self.show_keys() class GtkReporter(Reporter): def __init__(self, *args, **kwargs): super(GtkReporter, self).__init__(*args, **kwargs) from gi.repository import Gdk, Gtk # Initialize GTK constants self.ICON_SIZE = Gtk.IconSize.BUTTON self.ICON_TESTED = Gtk.STOCK_YES self.ICON_UNTESTED = Gtk.STOCK_INDEX self.ICON_NOT_REQUIRED = Gtk.STOCK_REMOVE self.button_factory = Gtk.Button self.hbox_factory = Gtk.HBox self.image_factory = Gtk.Image self.label_factory = Gtk.Label self.vbox_factory = Gtk.VBox # Create GTK window. window = Gtk.Window() window.set_type_hint(Gdk.WindowType.TOPLEVEL) window.set_size_request(100, 100) window.set_resizable(False) window.set_title(_("Key test")) window.connect("delete_event", lambda w, e: self.quit()) window.connect( "key-release-event", lambda w, k: k.keyval == Gdk.KEY_Escape and self.quit()) window.show() # Add common widgets to the window. vbox = self._add_vbox(window) self.label = self._add_label(vbox) button_hbox = self._add_hbox(vbox) validation_hbox = self._add_hbox(vbox) skip_hbox = self._add_hbox(vbox) exit_button = self._add_button(vbox, _("_Exit"), True) exit_button.connect("clicked", lambda w: self.quit()) # Add widgets for each key. self.icons = {} for key in self.keys: stock = getattr(Gtk, "STOCK_MEDIA_%s" % key.name.upper(), None) if stock: self._add_image(button_hbox, stock) else: self._add_label(button_hbox, key.name) self.icons[key] = self._add_image(validation_hbox, Gtk.STOCK_INDEX) button = self._add_button(skip_hbox, _("Skip")) button.connect("clicked", self.on_skip, key) self.show_text(_("Please press each key on your keyboard.")) self.show_text(_("If a key is not present in your keyboard, " "press the 'Skip' button below it to remove it " "from the test.")) def _add_button(self, context, label, use_underline=False): button = self.button_factory(label=label, use_underline=use_underline) context.add(button) button.show() return button def _add_hbox(self, context, spacing=4): hbox = self.hbox_factory() context.add(hbox) hbox.set_spacing(4) hbox.show() return hbox def _add_image(self, context, stock): image = self.image_factory(stock=stock, icon_size=self.ICON_SIZE) context.add(image) image.show() return image def _add_label(self, context, text=None): label = self.label_factory() context.add(label) label.set_size_request(0, 0) label.set_line_wrap(True) if text: label.set_text(text) label.show() return label def _add_vbox(self, context): vbox = self.vbox_factory() vbox.set_homogeneous(False) vbox.set_spacing(8) context.add(vbox) vbox.show() return vbox def show_text(self, string): self.label.set_text(self.label.get_text() + "\n" + string) def check_keys(self): if self.required_keys_tested: self.show_text(_("All required keys have been tested!")) self.quit(EXIT_WITH_SUCCESS) def found_key(self, key): super(GtkReporter, self).found_key(key) self.icons[key].set_from_stock(self.ICON_TESTED, size=self.ICON_SIZE) self.check_keys() def on_skip(self, sender, key): self.toggle_key(key) if key.required: stock_icon = self.ICON_UNTESTED else: stock_icon = self.ICON_NOT_REQUIRED self.icons[key].set_from_stock(stock_icon, self.ICON_SIZE) self.check_keys() def main(args): gettext.textdomain("checkbox") usage = """\ Usage: %prog [OPTIONS] CODE... Syntax for codes: 57435 - Decimal code without name 0160133:Super - Octal code with name 0xe05b,0xe0db:Super - Multiple hex codes with name Hint to find codes: The showkey command can show keycodes and scancodes. """ parser = OptionParser(usage=usage) parser.add_option("-i", "--interface", default="auto", help="Interface to use: cli, gtk or auto") parser.add_option("-s", "--scancodes", default=False, action="store_true", help="Test for scancodes instead of keycodes.") (options, args) = parser.parse_args(args) # Get reporter factory from options or environment. if options.interface == "auto": if "DISPLAY" in os.environ: reporter_factory = GtkReporter else: reporter_factory = CLIReporter elif options.interface == "cli": reporter_factory = CLIReporter elif options.interface == "gtk": reporter_factory = GtkReporter else: parser.error("Unsupported interface: %s" % options.interface) if not args: parser.error("Must specify codes to test.") # Get keys from command line arguments. keys = [] for codes_name in args: if ":" in codes_name: codes, name = codes_name.split(":", 1) else: codes, name = codes_name, codes_name # Guess the proper base from the string. codes = [int(code, 0) for code in codes.split(",")] key = Key(codes, name) keys.append(key) main_loop = GObject.MainLoop() try: reporter = reporter_factory(main_loop, keys, options.scancodes) except: parser.error("Failed to initialize interface: %s" % options.interface) try: main_loop.run() except KeyboardInterrupt: reporter.show_text(_("Test interrupted")) reporter.quit() return reporter.exit_code if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/pts_run0000775000175000017500000000171512646152433022270 0ustar sylvainsylvain00000000000000#!/bin/bash # Exit on any error set -o errexit # Accept Terms & Conditions, disable anonymous reporting echo -e "Y\nn\nn" | phoronix-test-suite > /dev/null # Disable batch result saving and all test options selection echo -e "n\nn" | phoronix-test-suite batch-setup > /dev/null # Don't show the browser after each test. # The implementation is a bit hacky but works. phoronix-test-suite user-config-set DefaultBrowser=/bin/true # Run each test only one time export FORCE_TIMES_TO_RUN=1 # Run only the following resolution export OVERRIDE_VIDEO_MODES=800x600 set +o errexit rv=0 output=$(phoronix-test-suite batch-benchmark $@ 2>&1) #The output does NOT report success. It may contain, if it fails: # The test did not produce a result # The test failed to run properly # Failed to Fetch if (echo "$output" | grep -q -i "Failed to fetch" ); then rv=1 fi if ( echo "$output" | grep -q -i 'This test failed to run properly'); then rv=1 fi echo "$output" exit $rv plainbox-provider-checkbox-0.25/bin/window_test0000775000175000017500000002433712646152433023151 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # window_test # # This file is part of Checkbox. # # Copyright 2012 Canonical Ltd. # # Authors: Alberto Milone # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . import threading import time import os import sys from signal import SIGTSTP, SIGCONT, SIGTERM from subprocess import check_call, check_output, Popen, PIPE from argparse import ArgumentParser class AppThread(threading.Thread): def __init__(self, app_name): self._appname = app_name self.stdout = None self.stderr = None self.pid = None threading.Thread.__init__(self) def run(self): proc = Popen(self._appname, stdout=PIPE, stderr=PIPE) self.pid = proc.pid print(' Starting "%s", PID: %d' % (self._appname, self.pid)) self.stdout, self.stderr = proc.communicate() def open_close_process(app, timeout): '''Open and close a process after a timeout''' status = 0 # Start the process in a separate thread app_thread = AppThread(app) app_thread.start() # Wait until we have a pid while app_thread.pid is None: continue pid = app_thread.pid # Wait a bit and kill the process time.sleep(timeout) print(' Killing "%s", PID: %d' % (app, pid)) os.kill(pid, SIGTERM) if app_thread.stderr: print('Errors:\n%s' % app_thread.stderr, file=sys.stderr) status = 1 time.sleep(timeout) return status def open_close_multi_process(app, timeout, apps_num): '''Open and close multiple processes after a timeout''' status = 0 threads = [] for thread in range(apps_num): app_thread = AppThread(app) app_thread.start() threads.append(app_thread) for thread in threads: # Wait until we have a pid while thread.pid is None: continue # Wait a bit and kill the process time.sleep(timeout) for thread in threads: print(' Killing "%s", PID: %d' % (app, thread.pid)) os.kill(thread.pid, SIGTERM) if thread.stderr: print('Errors:\n%s' % thread.stderr, file=sys.stderr) status = 1 time.sleep(timeout) return status def open_suspend_close_process(app, timeout): '''Open, suspend and close a process after a timeout''' status = 0 # Start the process in a separate thread app_thread = AppThread(app) app_thread.start() # Wait until we have a pid while app_thread.pid is None: continue pid = app_thread.pid # Wait a bit and suspend the process time.sleep(timeout) print(' Suspending "%s", PID: %d' % (app, pid)) os.kill(pid, SIGTSTP) # Wait a bit and resume the process time.sleep(timeout) print(' Resuming "%s", PID: %d' % (app, pid)) os.kill(pid, SIGCONT) # Wait a bit and kill the process time.sleep(timeout) print(' Killing "%s", PID: %d' % (app, pid)) os.kill(pid, SIGTERM) if app_thread.stderr: print('Errors:\n%s' % app_thread.stderr, file=sys.stderr) status = 1 time.sleep(timeout) return status def move_window(app, timeout): status = 0 # Start the process in a separate thread app_thread = AppThread(app) app_thread.start() while app_thread.pid is None: continue pid = app_thread.pid time.sleep(3) window_list = check_output(['wmctrl', '-l'], universal_newlines=True) window_id = '' for line in window_list.split('\n'): if app in line: window_id = line.split()[0] if window_id: # Get the screen information from GDK from gi.repository import Gdk screen = Gdk.Screen.get_default() geom = screen.get_monitor_geometry(screen.get_primary_monitor()) # Find out the window information from xwininfo win_x = '' win_y = '' win_width = '' win_height = '' for line in check_output(['xwininfo', '-name', app], universal_newlines=True).split('\n'): if 'Absolute upper-left X' in line: win_x = line.split(': ')[-1].strip() elif 'Absolute upper-left Y' in line: win_y = line.split(': ')[-1].strip() elif 'Width' in line: win_width = line.split(': ')[-1].strip() elif 'Height' in line: win_height = line.split(': ')[-1].strip() move_line = ["0", win_x, win_y, win_width, win_height] directions = {'RIGHT': geom.width, 'DOWN': geom.height, 'LEFT': win_x, 'UP': win_y, 'STOP': None} current = 'RIGHT' while current != 'STOP': if current == 'RIGHT': # Check if top right corner of window reached top right point if int(move_line[1]) + int(win_width) != directions[current]: new_x = int(move_line[1]) + 1 move_line[1] = str(new_x) else: current = 'DOWN' elif current == 'DOWN': if int(move_line[2]) + int(win_height) != directions[current]: new_y = int(move_line[2]) + 1 move_line[2] = str(new_y) else: current = 'LEFT' elif current == 'LEFT': if int(move_line[1]) != int(directions[current]): new_x = int(move_line[1]) - 1 move_line[1] = str(new_x) else: current = 'UP' elif current == 'UP': if int(move_line[2]) != int(directions[current]): new_y = int(move_line[2]) - 1 move_line[2] = str(new_y) else: current = 'STOP' check_call(['wmctrl', '-i', '-r', window_id, '-e', ','.join(move_line)]) os.kill(pid, SIGTERM) else: print("Could not get window handle for %s" % app, file=sys.stderr) status = 1 return status def print_open_close(iterations, timeout, *args): status = 0 print('Opening and closing a 3D window') for it in range(iterations): print('Iteration %d of %d:' % (it + 1, iterations)) exit_status = open_close_process('glxgears', timeout) if exit_status != 0: status = 1 print('') return status def print_suspend_resume(iterations, timeout, *args): status = 0 print('Opening, suspending, resuming and closing a 3D window') for it in range(iterations): print('Iteration %d of %d:' % (it + 1, iterations)) exit_status = open_suspend_close_process('glxgears', timeout) if exit_status != 0: status = 1 print('') return status def print_open_close_multi(iterations, timeout, windows_number): status = 0 print('Opening and closing %d 3D windows at the same time' % windows_number) for it in range(iterations): print('Iteration %d of %d:' % (it + 1, iterations)) exit_status = open_close_multi_process('glxgears', timeout, windows_number) if exit_status != 0: status = 1 print('') return status def print_move_window(iterations, timeout, *args): status = 0 print('Moving a 3D window across the screen') for it in range(iterations): print('Iteration %d of %d:' % (it + 1, iterations)) exit_status = move_window('glxgears', timeout) print('') return status def main(): tests = {'open-close': print_open_close, 'suspend-resume': print_suspend_resume, 'open-close-multi': print_open_close_multi, 'move': print_move_window} parser = ArgumentParser(description='Script that performs window operation') parser.add_argument('-t', '--test', default='all', help='The name of the test to run. \ Available tests: \ %s, all. \ Default is all' % (', '.join(tests))) parser.add_argument('-i', '--iterations', type=int, default=1, help='The number of times to run the test. \ Default is 1') parser.add_argument('-a', '--application', default='glxgears', help='The 3D application to launch. \ Default is "glxgears"') parser.add_argument('-to', '--timeout', type=int, default=3, help='The time in seconds between each test. \ Default is 3') parser.add_argument('-w', '--windows-number', type=int, default=4, help='The number of windows to open.') args = parser.parse_args() status = 0 test = tests.get(args.test) if test: status = test(args.iterations, args.timeout, args.windows_number) else: if args.test == 'all': for test in tests: exit_status = tests[test](args.iterations, args.timeout, args.windows_number) if exit_status != 0: status = exit_status else: parser.error('-t or --test can only be used with one ' 'of the following tests: ' '%s, all' % (', '.join(tests))) return status if __name__ == '__main__': exit(main()) plainbox-provider-checkbox-0.25/bin/wireless_ext0000775000175000017500000000035112646152433023306 0ustar sylvainsylvain00000000000000#!/bin/sh if lsmod | grep -q "80211" then echo "Driver is using MAC80211" if iwconfig 2>&1 | grep -q "IEEE 802.11" then echo "Driver has loaded wireless extension" exit 0 else echo "No wireless module loaded" exit 1 fi fi plainbox-provider-checkbox-0.25/bin/memory_test0000775000175000017500000002073412646152433023147 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import sys import re from argparse import ArgumentParser from subprocess import Popen, PIPE class MemoryTest(): def __init__(self): self.free_memory = 0 self.system_memory = 0 self.swap_memory = 0 self.process_memory = 0 self.is_process_limited = False @property def threaded_memtest_script(self): directory = os.path.dirname(os.path.abspath(__file__)) return os.path.join(directory, "threaded_memtest") def _get_memory(self): mem_info = open("/proc/meminfo", "r") try: while True: line = mem_info.readline() if line: tokens = line.split() if len(tokens) == 3: if "MemTotal:" == tokens[0].strip(): self.system_memory = \ int(tokens[1].strip()) // 1024 elif tokens[0].strip() in ["MemFree:", "Cached:", "Buffers:"]: self.free_memory += \ int(tokens[1].strip()) // 1024 elif "SwapTotal:" == tokens[0].strip(): self.swap_memory = \ int(tokens[1].strip()) // 1024 else: break except Exception as e: print("ERROR: Unable to get data from /proc/meminfo", file=sys.stderr) print(e, file=sys.stderr) finally: mem_info.close() def _command(self, command, shell=True): proc = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE) return proc def _command_out(self, command, shell=True): proc = self._command(command, shell) return proc.communicate()[0].strip() def get_limits(self): self._get_memory() print("System Memory: %u MB" % self.system_memory) print("Free Memory: %u MB" % self.free_memory) print("Swap Memory: %u MB" % self.swap_memory) if self.system_memory == 0: print("ERROR: could not determine system RAM", file=sys.stderr) return False # Process Memory self.process_memory = self.free_memory try: arch = self._command_out("arch").decode() if (re.match(r"(i[0-9]86|s390|arm.*)", arch) and self.free_memory > 1024): self.is_process_limited = True self.process_memory = 1024 # MB, due to 32-bit address space print("%s arch, Limiting Process Memory: %u" % ( arch, self.process_memory)) # others? what about PAE kernel? except Exception as e: print("ERROR: could not determine system architecture via arch", file=sys.stderr) print(e, file=sys.stderr) return False return True def run(self): PASSED = 0 FAILED = 1 limits = self.get_limits() if not limits: return FAILED # if process memory is limited, run multiple processes if self.is_process_limited: print("Running Multiple Process Memory Test") if not self.run_multiple_process_test(): return FAILED else: print("Running Single Process Memory Test") if not self.run_single_process_test(): return FAILED # otherwised, passed return PASSED def run_single_process_test(self): if not self.run_threaded_memory_test(): return False return True def run_multiple_process_test(self): processes = self.free_memory // self.process_memory # if not swap-less, add a process to hit swap if not self.swap_memory == 0: processes += 1 # check to make sure there's enough swap required_memory = self.process_memory * processes if required_memory > self.system_memory + self.swap_memory: print("ERROR: this test requires a minimum of %u KB of swap " "memory (%u configured)" % ( required_memory - self.system_memory, self.swap_memory), file=sys.stderr) print("Testing memory with %u processes" % processes) print("Running threaded memory test:") run_time = 60 # sec. if not self.run_processes(processes, "%s -qv -m%um -t%u" % ( self.threaded_memtest_script, self.process_memory, run_time)): print("Multi-process, threaded memory Test FAILED", file=sys.stderr) return False return True def run_threaded_memory_test(self): # single-process threaded test print("Starting Threaded Memory Test") # run for Free Memory plus the lessor of 5% or 1GB memory = (self.free_memory * 5) / 100 if memory > 1024: # MB memory = 1024 # MB memory = memory + self.free_memory print("Running for %d MB total memory" % memory) # run a test that will swap if not self.swap_memory == 0: # is there enough swap memory for the test? if memory > self.system_memory + self.swap_memory: print("ERROR: this test requires a minimum of %u KB of swap " "memory (%u configured)" % (memory - self.system_memory, self.swap_memory), file=sys.stderr) return False # otherwise run_time = 60 # sec. print("Running for more than free memory at %u MB for %u sec." % ( memory, run_time)) command = "%s -qv -m%um -t%u" % ( self.threaded_memtest_script, memory, run_time) print("Command is: %s" % command) process = self._command(command) process.communicate() if process.returncode != 0: print("%s returned code %s" % (self.threaded_memtest_script, process.returncode), file=sys.stderr) print("More Than Free Memory Test failed", file=sys.stderr) return False print("More than free memory test complete.") # run again for 15 minutes print("Running for free memory") process = self._command("%s -qv" % self.threaded_memtest_script) process.communicate() if process.returncode != 0: print("Free Memory Test failed", file=sys.stderr) else: print("Free Memory Test succeeded") sys.stdout.flush() return (process.returncode == 0) def run_processes(self, number, command): passed = True pipe = [] for i in range(number): pipe.append(self._command(command)) print("Started: process %u pid %u: %s" % (i, pipe[i].pid, command)) sys.stdout.flush() waiting = True while waiting: waiting = False for i in range(number): if pipe[i]: line = pipe[i].communicate()[0] if line and len(line) > 1: print("process %u pid %u: %s" % (i, pipe[i].pid, line)) sys.stdout.flush() if pipe[i].poll() == -1: waiting = True else: return_value = pipe[i].poll() if return_value != 0: print("ERROR: process %u pid %u retuned %u" % (i, pipe[i].pid, return_value), file=sys.stderr) passed = False print("process %u pid %u returned success" % (i, pipe[i].pid)) pipe[i] = None sys.stdout.flush() return passed def main(args): parser = ArgumentParser() parser.add_argument("-q", "--quiet", action="store_true", help="Suppress output.") args = parser.parse_args(args) if args.quiet: sys.stdout = open(os.devnull, 'a') sys.stderr = open(os.devnull, 'a') test = MemoryTest() return test.run() if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/gst_pipeline_test0000775000175000017500000000437312646152433024322 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 from argparse import ArgumentParser import logging import re import os import sys import time from gi.repository import Gst from gi.repository import GLib from subprocess import check_output def check_state(device): """Checks whether the sink is available for the given device. """ sink_info = check_output(['pacmd', 'list-sinks'], universal_newlines=True) data = sink_info.split("\n") try: device_name = re.findall(".*name:\s.*%s.*" % device, sink_info)[0].lstrip() sink = re.findall(".*name:\s<(.*%s.*)>" % device, sink_info)[0].lstrip() status = data[data.index("\t" + device_name) + 3] except (IndexError, ValueError): logging.error("Failed to find status for device: %s" % device) return False os.environ['PULSE_SINK'] = sink logging.info("[ Pulse sink ]".center(80, '=')) logging.info("Device: %s %s" % (device_name.strip(), status.strip())) return status def main(): parser = ArgumentParser(description='Simple GStreamer pipeline player') parser.add_argument('PIPELINE', help='Quoted GStreamer pipeline to launch') parser.add_argument('-t', '--timeout', type=int, required=True, help='Timeout for running the pipeline') parser.add_argument('-d', '--device', type=str, help="Device to check for status") args = parser.parse_args() logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.INFO, stream=sys.stdout) exit_code = 0 if args.device: if not check_state(args.device): exit_code = 1 Gst.init(None) try: print("Attempting to initialize Gstreamer pipeline: {}".format( args.PIPELINE)) element = Gst.parse_launch(args.PIPELINE) except GLib.GError as error: print("Specified pipeline couldn't be processed.") print("Error when processing pipeline: {}".format(error)) #Exit harmlessly return(2) print("Pipeline initialized, now starting playback.") element.set_state(Gst.State.PLAYING) if args.timeout: time.sleep(args.timeout) element.set_state(Gst.State.NULL) return exit_code if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/process_wait0000775000175000017500000000352412646152433023300 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import sys import time from optparse import OptionParser from subprocess import Popen, PIPE COMMAND_FORMAT = "pgrep -f %(options)s %(process)s" def process_pids(process, *options): options_string = " ".join(options) command = COMMAND_FORMAT % {"options": options_string, "process": process} # Exclude this process and the pgrep process subprocess = Popen( command, stdout=PIPE, shell=True, universal_newlines=True) exclude_pids = [os.getpid(), os.getppid(), subprocess.pid] pids_string = subprocess.communicate()[0] pids = [int(pid) for pid in pids_string.split()] result = set(pids).difference(exclude_pids) return list(result) def process_count(*args): return len(process_pids(*args)) def main(args): default_sleep = 1 usage = "Usage: %prog PROCESS [PROCESS...]" parser = OptionParser(usage=usage) parser.add_option("-s", "--sleep", type="int", default=default_sleep, help="Number of seconds to sleep between checks.") parser.add_option("-t", "--timeout", type="int", help="Number of seconds to timeout from sleeping.") parser.add_option("-u", "--uid", help="Effective user name or id of the running processes") (options, processes) = parser.parse_args(args) process_args = [] if options.uid is not None: process_args.extend(["-u", options.uid]) while True: for process in processes: if process_count(process, *process_args): break else: break if options.timeout is not None: if options.timeout <= 0: return 1 else: options.timeout -= options.sleep time.sleep(options.sleep) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/network_printer_test0000775000175000017500000000207212646152433025066 0ustar sylvainsylvain00000000000000#!/bin/bash usage() { cat < ] [ -s ] -p -- specify a printer to use, by name -s -- specify a network server to use Note: this script expects printers over the IPP protocol only. EOU } while [ $# -gt 0 ] do case "$1" in -p) if echo ${2} | grep -q -c '^-'; then usage exit 1 fi printer=${2} shift ;; -s) if echo ${2} | grep -q -c '^-'; then usage exit 1 fi server=${2} shift ;; --usage) usage exit 1 ;; esac shift done if [ -z $server ]; then echo "Nothing to do with no server defined. (See $0 --usage)" exit 0 fi printer=${printer:-PDF} lpadmin -E -v ipp://${server}/printers/${printer} cupsenable ${printer} cupsaccept ${printer} lsb_release -a | lp -t "lsb_release" -d ${printer} plainbox-provider-checkbox-0.25/bin/spindown0000775000175000017500000000522412646152433022436 0ustar sylvainsylvain00000000000000#!/bin/bash # # Copyright (C) 2012 Canonical # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # get_load_cycle() { smartctl -A /dev/sda | grep Load_Cycle_Count | awk '{print $10}' } get_time_secs() { date "+%s" } if [ $EUID -ne 0 ]; then echo "Need to run as root e.g. use sudo" exit 1 fi hdparm -B 127 /dev/sda TEST_FILE=test MAX_TIMEOUT=60 MAX_ITERATIONS=10 dirty_disk() { rm -f ${TEST_FILE} touch ${TEST_FILE} truncate -s 4K ${TEST_FILE} } drop_caches() { sync (echo 1 | sudo tee /proc/sys/vm/drop_caches) > /dev/null (echo 2 | sudo tee /proc/sys/vm/drop_caches) > /dev/null (echo 3 | sudo tee /proc/sys/vm/drop_caches) > /dev/null } find_load_cycle_threshold() { lc1=0 lc2=0 count=0 TIMEOUT=1 echo Attempting to find Spin Down timeout for this HDD while [ $lc1 -eq $lc2 -a $TIMEOUT -lt $MAX_TIMEOUT ] do lc1=$(get_load_cycle) count=$((count + 1)) dirty_disk drop_caches sleep $TIMEOUT lc2=$(get_load_cycle) n=$((lc2 - lc1)) echo Checking with timeout: $TIMEOUT seconds, Load Cycles: $n if [ $TIMEOUT -lt 15 ]; then TIMEOUT=$((TIMEOUT + 1)) else TIMEOUT=$((TIMEOUT + $TIMEOUT/5)) fi done } exercise_load_cycle() { echo "Attempting to exercise load cycle on HDD" i=0 t1=$(get_time_secs) n1=$(get_load_cycle) # bump timeout by 1 second just to make sure # we can always catch the load cycle window TIMEOUT=$((TIMEOUT + 1)) while [ $i -lt $MAX_ITERATIONS ] do i=$((i + 1)) echo "Load Cycle $i of $MAX_ITERATIONS" dirty_disk drop_caches sleep $TIMEOUT done i=0 t2=$(get_time_secs) n2=$(get_load_cycle) t=$((t2 - t1)) n=$((n2 - n1)) echo "Managed to force $n Load Cycles in $t seconds." life=$((1000000 * $t / $n)) days=$((life / (3600 * 24))) echo "At this rate, the HDD will fail after $days days." } find_load_cycle_threshold if [ $TIMEOUT -lt $MAX_TIMEOUT ]; then echo "HDD seems to be spinning down aggressively." exercise_load_cycle exit 1 else echo "Gave up looking for Load Cycle timeout threshold, HDD looks sane." exit 0 fi plainbox-provider-checkbox-0.25/bin/alsa_info0000775000175000017500000006621112646152433022533 0ustar sylvainsylvain00000000000000#!/bin/bash SCRIPT_VERSION=0.4.61 CHANGELOG="http://www.alsa-project.org/alsa-info.sh.changelog" ################################################################################# #Copyright (C) 2007 Free Software Foundation. #This program is free software; you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation; either version 2 of the License, or #(at your option) any later version. #This program is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. #You should have received a copy of the GNU General Public License #along with this program; if not, write to the Free Software #Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ################################################################################## #The script was written for 2 main reasons: # 1. Remove the need for the devs/helpers to ask several questions before we can easily help the user. # 2. Allow newer/inexperienced ALSA users to give us all the info we need to help them. #Set the locale (this may or may not be a good idea.. let me know) export LC_ALL=C #Change the PATH variable, so we can run lspci (needed for some distros) PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin BGTITLE="ALSA-Info v $SCRIPT_VERSION" PASTEBINKEY="C9cRIO8m/9y8Cs0nVs0FraRx7U0pHsuc" #Define some simple functions pbcheck(){ [[ $UPLOAD = "no" ]] && return if [[ -z $PASTEBIN ]]; then [[ $(ping -c1 www.alsa-project.org) ]] || KEEP_FILES="yes" UPLOAD="no" PBERROR="yes" else [[ $(ping -c1 www.pastebin.ca) ]] || KEEP_FILES="yes" UPLOAD="no" PBERROR="yes" fi } update() { SHFILE=`mktemp -t alsa-info.XXXXXXXXXX` || exit 1 wget -O $SHFILE "http://www.alsa-project.org/alsa-info.sh" >/dev/null 2>&1 REMOTE_VERSION=`grep SCRIPT_VERSION $SHFILE |head -n1 |sed 's/.*=//'` if [ "$REMOTE_VERSION" != "$SCRIPT_VERSION" ]; then if [[ -n $DIALOG ]] then OVERWRITE= if [ -w $0 ]; then dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to install it?\nNOTICE: The original file $0 will be overwritten!" 0 0 DIALOG_EXIT_CODE=$? if [[ $DIALOG_EXIT_CODE = 0 ]]; then OVERWRITE=yes fi fi if [ -z "$OVERWRITE" ]; then dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to download it?" 0 0 DIALOG_EXIT_CODE=$? fi if [[ $DIALOG_EXIT_CODE = 0 ]] then echo "Newer version detected: $REMOTE_VERSION" echo "To view the ChangeLog, please visit $CHANGELOG" if [ "$OVERWRITE" = "yes" ]; then cp $SHFILE $0 echo "ALSA-Info script has been updated to v $REMOTE_VERSION" echo "Please re-run the script" rm $SHFILE 2>/dev/null else echo "ALSA-Info script has been downloaded as $SHFILE." echo "Please re-run the script from new location." fi exit else rm $SHFILE 2>/dev/null fi else echo "Newer version detected: $REMOTE_VERSION" echo "To view the ChangeLog, please visit $CHANGELOG" if [ -w $0 ]; then echo "The original file $0 will be overwritten!" echo -n "If you do not like to proceed, press Ctrl-C now.." ; read inp cp $SHFILE $0 echo "ALSA-Info script has been updated. Please re-run it." rm $SHFILE 2>/dev/null else echo "ALSA-Info script has been downloaded $SHFILE." echo "Please, re-run it from new location." fi exit fi else rm $SHFILE 2>/dev/null fi } cleanup() { if [ -n "$TEMPDIR" -a "$KEEP_FILES" != "yes" ]; then rm -rf "$TEMPDIR" 2>/dev/null fi test -n "$KEEP_OUTPUT" || rm -f "$NFILE" } withaplay() { echo "!!Aplay/Arecord output" >> $FILE echo "!!--------------------" >> $FILE echo "" >> $FILE echo "APLAY" >> $FILE echo "" >> $FILE aplay -l >> $FILE 2>&1 echo "" >> $FILE echo "ARECORD" >> $FILE echo "" >> $FILE arecord -l >> $FILE 2>&1 echo "" >> $FILE } withlsmod() { echo "!!All Loaded Modules" >> $FILE echo "!!------------------" >> $FILE echo "" >> $FILE lsmod |awk {'print $1'} >> $FILE echo "" >> $FILE echo "" >> $FILE } withamixer() { echo "!!Amixer output" >> $FILE echo "!!-------------" >> $FILE echo "" >> $FILE for i in `grep "]: " /proc/asound/cards | awk -F ' ' '{ print $1} '` ; do CARD_NAME=`grep "^ *$i " $TEMPDIR/alsacards.tmp|awk {'print $2'}` echo "!!-------Mixer controls for card $i $CARD_NAME]" >> $FILE echo "" >>$FILE amixer -c$i info>> $FILE 2>&1 amixer -c$i>> $FILE 2>&1 echo "" >> $FILE done echo "" >> $FILE } withalsactl() { echo "!!Alsactl output" >> $FILE echo "!!--------------" >> $FILE echo "" >> $FILE exe="" if [ -x /usr/sbin/alsactl ]; then exe="/usr/sbin/alsactl" fi if [ -x /usr/local/sbin/alsactl ]; then exe="/usr/local/sbin/alsactl" fi if [ -z "$exe" ]; then exe=`whereis alsactl | cut -d ' ' -f 2` fi $exe -f $TEMPDIR/alsactl.tmp store echo "--startcollapse--" >> $FILE cat $TEMPDIR/alsactl.tmp >> $FILE echo "--endcollapse--" >> $FILE echo "" >> $FILE echo "" >> $FILE } withdevices() { echo "!!ALSA Device nodes" >> $FILE echo "!!-----------------" >> $FILE echo "" >> $FILE ls -la /dev/snd/* >> $FILE echo "" >> $FILE echo "" >> $FILE } withconfigs() { if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]] || [[ -e $HOME/.asoundrc.asoundconf ]] then echo "!!ALSA configuration files" >> $FILE echo "!!------------------------" >> $FILE echo "" >> $FILE #Check for ~/.asoundrc if [[ -e $HOME/.asoundrc ]] then echo "!!User specific config file (~/.asoundrc)" >> $FILE echo "" >> $FILE cat $HOME/.asoundrc >> $FILE echo "" >> $FILE echo "" >> $FILE fi #Check for .asoundrc.asoundconf (seems to be Ubuntu specific) if [[ -e $HOME/.asoundrc.asoundconf ]] then echo "!!asoundconf-generated config file" >> $FILE echo "" >> $FILE cat $HOME/.asoundrc.asoundconf >> $FILE echo "" >> $FILE echo "" >> $FILE fi #Check for /etc/asound.conf if [[ -e /etc/asound.conf ]] then echo "!!System wide config file (/etc/asound.conf)" >> $FILE echo "" >> $FILE cat /etc/asound.conf >> $FILE echo "" >> $FILE echo "" >> $FILE fi fi } withsysfs() { local i f local printed="" for i in /sys/class/sound/*; do case "$i" in */hwC?D?) if [ -f $i/init_pin_configs ]; then if [ -z "$printed" ]; then echo "!!Sysfs Files" >> $FILE echo "!!-----------" >> $FILE echo "" >> $FILE fi for f in init_pin_configs driver_pin_configs user_pin_configs init_verbs; do echo "$i/$f:" >> $FILE cat $i/$f >> $FILE echo >> $FILE done printed=yes fi ;; esac done if [ -n "$printed" ]; then echo "" >> $FILE fi } withdmesg() { echo "!!ALSA/HDA dmesg" >> $FILE echo "!!--------------" >> $FILE echo "" >> $FILE dmesg | grep -C1 -E 'ALSA|HDA|HDMI|sound|hda.codec|hda.intel' >> $FILE echo "" >> $FILE echo "" >> $FILE } withall() { withdevices withconfigs withaplay withamixer withalsactl withlsmod withsysfs withdmesg } get_alsa_library_version() { ALSA_LIB_VERSION=`grep VERSION_STR /usr/include/alsa/version.h 2>/dev/null|awk {'print $3'}|sed 's/"//g'` if [ -z "$ALSA_LIB_VERSION" ]; then if [ -f /etc/lsb-release ]; then . /etc/lsb-release case "$DISTRIB_ID" in Ubuntu) if which dpkg > /dev/null ; then ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -` fi if [ "$ALSA_LIB_VERSION" = "" ]; then ALSA_LIB_VERSION="" fi return ;; *) return ;; esac elif [ -f /etc/debian_version ]; then if which dpkg > /dev/null ; then ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -` fi if [ "$ALSA_LIB_VERSION" = "" ]; then ALSA_LIB_VERSION="" fi return fi fi } #Run checks to make sure the programs we need are installed. LSPCI=$(which lspci 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); TPUT=$(which tput 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); DIALOG=$(which dialog 2>/dev/null | sed 's|^[^/]*||' 2>/dev/null); #Check to see if sysfs is enabled in the kernel. We'll need this later on SYSFS=$(mount |grep sysfs|awk {'print $3'}); #Check modprobe config files for sound related options SNDOPTIONS=$(modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p') KEEP_OUTPUT= NFILE="" PASTEBIN="" WWWSERVICE="www.alsa-project.org" WELCOME="yes" PROCEED="yes" UPLOAD="ask" REPEAT="" while [ -z "$REPEAT" ]; do REPEAT="no" case "$1" in --update|--help|--about) WELCOME="no" PROCEED="no" ;; --upload) UPLOAD="yes" WELCOME="no" ;; --no-upload) UPLOAD="no" WELCOME="no" ;; --pastebin) PASTEBIN="yes" WWWSERVICE="pastebin" ;; --no-dialog) DIALOG="" REPEAT="" shift ;; --stdout) DIALOG="" UPLOAD="no" WELCOME="no" TOSTDOUT="yes" ;; esac done #Script header output. if [ "$WELCOME" = "yes" ]; then greeting_message="\ This script visits the following commands/files to collect diagnostic information about your ALSA installation and sound related hardware. dmesg lspci lsmod aplay amixer alsactl /proc/asound/ /sys/class/sound/ ~/.asoundrc (etc.) See '$0 --help' for command line options. " if [[ -n "$DIALOG" ]]; then dialog --backtitle "$BGTITLE" \ --title "ALSA-Info script v $SCRIPT_VERSION" \ --msgbox "$greeting_message" 20 80 else echo "ALSA Information Script v $SCRIPT_VERSION" echo "--------------------------------" echo "$greeting_message" fi # dialog fi # WELCOME #Set the output file TEMPDIR=`mktemp -t -d alsa-info.XXXXXXXXXX` || exit 1 FILE="$TEMPDIR/alsa-info.txt" if [ -z "$NFILE" ]; then NFILE=`mktemp -t alsa-info.txt.XXXXXXXXXX` || exit 1 fi trap cleanup 0 if [ "$PROCEED" = "yes" ]; then if [[ -z "$LSPCI" ]] then echo "This script requires lspci. Please install it, and re-run this script." exit 0 fi #Fetch the info and store in temp files/variables DISTRO=`grep -ihs "buntu\|SUSE\|Fedora\|PCLinuxOS\|MEPIS\|Mandriva\|Debian\|Damn\|Sabayon\|Slackware\|KNOPPIX\|Gentoo\|Zenwalk\|Mint\|Kubuntu\|FreeBSD\|Puppy\|Freespire\|Vector\|Dreamlinux\|CentOS\|Arch\|Xandros\|Elive\|SLAX\|Red\|BSD\|KANOTIX\|Nexenta\|Foresight\|GeeXboX\|Frugalware\|64\|SystemRescue\|Novell\|Solaris\|BackTrack\|KateOS\|Pardus" /etc/{issue,*release,*version}` KERNEL_VERSION=`uname -r` KERNEL_PROCESSOR=`uname -p` KERNEL_MACHINE=`uname -m` KERNEL_OS=`uname -o` [[ `uname -v |grep SMP` ]] && KERNEL_SMP="Yes" || KERNEL_SMP="No" ALSA_DRIVER_VERSION=`cat /proc/asound/version |head -n1|awk {'print $7'} |sed 's/\.$//'` get_alsa_library_version ALSA_UTILS_VERSION=`amixer -v |awk {'print $3'}` VENDOR_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $3}'|awk {'print substr($0, 2);}' >$TEMPDIR/vendor_id.tmp` DEVICE_ID=`lspci -vn |grep 040[1-3] | awk -F':' '{print $4}'|awk {'print $1'} >$TEMPDIR/device_id.tmp` LAST_CARD=$((`grep "]: " /proc/asound/cards | wc -l` - 1 )) ESDINST=$(which esd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) PAINST=$(which pulseaudio 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) ARTSINST=$(which artsd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) JACKINST=$(which jackd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) ROARINST=$(which roard 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) DMIDECODE=$(which dmidecode 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) #Check for DMI data if [ -d /sys/class/dmi/id ]; then # No root privileges are required when using sysfs method DMI_SYSTEM_MANUFACTURER=$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) DMI_SYSTEM_PRODUCT_NAME=$(cat /sys/class/dmi/id/product_name 2>/dev/null) DMI_SYSTEM_PRODUCT_VERSION=$(cat /sys/class/dmi/id/product_version 2>/dev/null) DMI_SYSTEM_FIRMWARE_VERSION=$(cat /sys/class/dmi/id/bios_version 2>/dev/null) elif [ -x $DMIDECODE ]; then DMI_SYSTEM_MANUFACTURER=$($DMIDECODE -s system-manufacturer 2>/dev/null) DMI_SYSTEM_PRODUCT_NAME=$($DMIDECODE -s system-product-name 2>/dev/null) DMI_SYSTEM_PRODUCT_VERSION=$($DMIDECODE -s system-version 2>/dev/null) DMI_SYSTEM_FIRMWARE_VERSION=$($DMIDECODE -s bios-version 2>/dev/null) fi cat /proc/asound/modules 2>/dev/null|awk {'print $2'}>$TEMPDIR/alsamodules.tmp cat /proc/asound/cards >$TEMPDIR/alsacards.tmp lspci |grep -i "multi\|audio">$TEMPDIR/lspci.tmp #Check for HDA-Intel cards codec#* cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null #Check for AC97 cards codec cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null #Check for USB mixer setup cat /proc/asound/card*/usbmixer > $TEMPDIR/alsa-usbmixer.tmp 2> /dev/null #Fetch the info, and put it in $FILE in a nice readable format. if [[ -z $PASTEBIN ]]; then echo "upload=true&script=true&cardinfo=" > $FILE else echo "name=$USER&type=33&description=/tmp/alsa-info.txt&expiry=&s=Submit+Post&content=" > $FILE fi echo "!!################################" >> $FILE echo "!!ALSA Information Script v $SCRIPT_VERSION" >> $FILE echo "!!################################" >> $FILE echo "" >> $FILE echo "!!Script ran on: `LANG=C TZ=UTC date`" >> $FILE echo "" >> $FILE echo "" >> $FILE echo "!!Linux Distribution" >> $FILE echo "!!------------------" >> $FILE echo "" >> $FILE echo $DISTRO >> $FILE echo "" >> $FILE echo "" >> $FILE echo "!!DMI Information" >> $FILE echo "!!---------------" >> $FILE echo "" >> $FILE echo "Manufacturer: $DMI_SYSTEM_MANUFACTURER" >> $FILE echo "Product Name: $DMI_SYSTEM_PRODUCT_NAME" >> $FILE echo "Product Version: $DMI_SYSTEM_PRODUCT_VERSION" >> $FILE echo "Firmware Version: $DMI_SYSTEM_FIRMWARE_VERSION" >> $FILE echo "" >> $FILE echo "" >> $FILE echo "!!Kernel Information" >> $FILE echo "!!------------------" >> $FILE echo "" >> $FILE echo "Kernel release: $KERNEL_VERSION" >> $FILE echo "Operating System: $KERNEL_OS" >> $FILE echo "Architecture: $KERNEL_MACHINE" >> $FILE echo "Processor: $KERNEL_PROCESSOR" >> $FILE echo "SMP Enabled: $KERNEL_SMP" >> $FILE echo "" >> $FILE echo "" >> $FILE echo "!!ALSA Version" >> $FILE echo "!!------------" >> $FILE echo "" >> $FILE echo "Driver version: $ALSA_DRIVER_VERSION" >> $FILE echo "Library version: $ALSA_LIB_VERSION" >> $FILE echo "Utilities version: $ALSA_UTILS_VERSION" >> $FILE echo "" >> $FILE echo "" >> $FILE echo "!!Loaded ALSA modules" >> $FILE echo "!!-------------------" >> $FILE echo "" >> $FILE cat $TEMPDIR/alsamodules.tmp >> $FILE echo "" >> $FILE echo "" >> $FILE echo "!!Sound Servers on this system" >> $FILE echo "!!----------------------------" >> $FILE echo "" >> $FILE if [[ -n $PAINST ]];then [[ `pgrep '^(.*/)?pulseaudio$'` ]] && PARUNNING="Yes" || PARUNNING="No" echo "Pulseaudio:" >> $FILE echo " Installed - Yes ($PAINST)" >> $FILE echo " Running - $PARUNNING" >> $FILE echo "" >> $FILE fi if [[ -n $ESDINST ]];then [[ `pgrep '^(.*/)?esd$'` ]] && ESDRUNNING="Yes" || ESDRUNNING="No" echo "ESound Daemon:" >> $FILE echo " Installed - Yes ($ESDINST)" >> $FILE echo " Running - $ESDRUNNING" >> $FILE echo "" >> $FILE fi if [[ -n $ARTSINST ]];then [[ `pgrep '^(.*/)?artsd$'` ]] && ARTSRUNNING="Yes" || ARTSRUNNING="No" echo "aRts:" >> $FILE echo " Installed - Yes ($ARTSINST)" >> $FILE echo " Running - $ARTSRUNNING" >> $FILE echo "" >> $FILE fi if [[ -n $JACKINST ]];then [[ `pgrep '^(.*/)?jackd$'` ]] && JACKRUNNING="Yes" || JACKRUNNING="No" echo "Jack:" >> $FILE echo " Installed - Yes ($JACKINST)" >> $FILE echo " Running - $JACKRUNNING" >> $FILE echo "" >> $FILE fi if [[ -n $ROARINST ]];then [[ `pgrep '^(.*/)?roard$'` ]] && ROARRUNNING="Yes" || ROARRUNNING="No" echo "RoarAudio:" >> $FILE echo " Installed - Yes ($ROARINST)" >> $FILE echo " Running - $ROARRUNNING" >> $FILE echo "" >> $FILE fi if [[ -z "$PAINST" && -z "$ESDINST" && -z "$ARTSINST" && -z "$JACKINST" && -z "$ROARINST" ]];then echo "No sound servers found." >> $FILE echo "" >> $FILE fi echo "" >> $FILE echo "!!Soundcards recognised by ALSA" >> $FILE echo "!!-----------------------------" >> $FILE echo "" >> $FILE cat $TEMPDIR/alsacards.tmp >> $FILE echo "" >> $FILE echo "" >> $FILE echo "!!PCI Soundcards installed in the system" >> $FILE echo "!!--------------------------------------" >> $FILE echo "" >> $FILE cat $TEMPDIR/lspci.tmp >> $FILE echo "" >> $FILE echo "" >> $FILE echo "!!Advanced information - PCI Vendor/Device/Subsystem ID's" >> $FILE echo "!!-------------------------------------------------------" >> $FILE echo "" >> $FILE lspci -vvn |grep -A1 040[1-3] >> $FILE echo "" >> $FILE echo "" >> $FILE if [ "$SNDOPTIONS" ] then echo "!!Modprobe options (Sound related)" >> $FILE echo "!!--------------------------------" >> $FILE echo "" >> $FILE modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p' >> $FILE echo "" >> $FILE echo "" >> $FILE fi if [ -d "$SYSFS" ] then echo "!!Loaded sound module options" >> $FILE echo "!!---------------------------" >> $FILE echo "" >> $FILE for mod in `cat /proc/asound/modules|awk {'print $2'}`;do echo "!!Module: $mod" >> $FILE for params in `echo $SYSFS/module/$mod/parameters/*`; do echo -ne "\t"; echo "$params : `cat $params`" | sed 's:.*/::'; done >> $FILE echo "" >> $FILE done echo "" >> $FILE fi if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ] then echo "!!HDA-Intel Codec information" >> $FILE echo "!!---------------------------" >> $FILE echo "--startcollapse--" >> $FILE echo "" >> $FILE cat $TEMPDIR/alsa-hda-intel.tmp >> $FILE echo "--endcollapse--" >> $FILE echo "" >> $FILE echo "" >> $FILE fi if [ -s "$TEMPDIR/alsa-ac97.tmp" ] then echo "!!AC97 Codec information" >> $FILE echo "!!----------------------" >> $FILE echo "--startcollapse--" >> $FILE echo "" >> $FILE cat $TEMPDIR/alsa-ac97.tmp >> $FILE echo "" >> $FILE cat $TEMPDIR/alsa-ac97-regs.tmp >> $FILE echo "--endcollapse--" >> $FILE echo "" >> $FILE echo "" >> $FILE fi if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ] then echo "!!USB Mixer information" >> $FILE echo "!!---------------------" >> $FILE echo "--startcollapse--" >> $FILE echo "" >> $FILE cat $TEMPDIR/alsa-usbmixer.tmp >> $FILE echo "--endcollapse--" >> $FILE echo "" >> $FILE echo "" >> $FILE fi #If no command line options are specified, then run as though --with-all was specified if [[ -z "$1" ]] then update withall pbcheck fi fi # proceed #loop through command line arguments, until none are left. if [[ -n "$1" ]] then until [ -z "$1" ] do case "$1" in --pastebin) update withall pbcheck ;; --update) update exit ;; --upload) UPLOAD="yes" withall ;; --no-upload) UPLOAD="no" withall ;; --output) shift NFILE="$1" KEEP_OUTPUT="yes" ;; --debug) echo "Debugging enabled. $FILE and $TEMPDIR will not be deleted" KEEP_FILES="yes" echo "" withall ;; --with-all) withall ;; --with-aplay) withaplay ;; --with-amixer) withamixer ;; --with-alsactl) withalsactl ;; --with-devices) withdevices ;; --with-dmesg) withdmesg ;; --with-configs) if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]] then echo "!!ALSA configuration files" >> $FILE echo "!!------------------------" >> $FILE echo "" >> $FILE #Check for ~/.asoundrc if [[ -e $HOME/.asoundrc ]] then echo "!!User specific config file ($HOME/.asoundrc)" >> $FILE echo "" >> $FILE cat $HOME/.asoundrc >> $FILE echo "" >> $FILE echo "" >> $FILE fi #Check for /etc/asound.conf if [[ -e /etc/asound.conf ]] then echo "!!System wide config file (/etc/asound.conf)" >> $FILE echo "" >> $FILE cat /etc/asound.conf >> $FILE echo "" >> $FILE echo "" >> $FILE fi fi ;; --stdout) UPLOAD="no" withall cat $FILE rm $FILE ;; --about) echo "Written/Tested by the following users of #alsa on irc.freenode.net:" echo "" echo " wishie - Script author and developer / Testing" echo " crimsun - Various script ideas / Testing" echo " gnubien - Various script ideas / Testing" echo " GrueMaster - HDA Intel specific items / Testing" echo " olegfink - Script update function" echo " TheMuso - display to stdout functionality" exit 0 ;; *) echo "alsa-info.sh version $SCRIPT_VERSION" echo "" echo "Available options:" echo " --with-aplay (includes the output of aplay -l)" echo " --with-amixer (includes the output of amixer)" echo " --with-alsactl (includes the output of alsactl)" echo " --with-configs (includes the output of ~/.asoundrc and" echo " /etc/asound.conf if they exist)" echo " --with-devices (shows the device nodes in /dev/snd/)" echo " --with-dmesg (shows the ALSA/HDA kernel messages)" echo "" echo " --output FILE (specify the file to output for no-upload mode)" echo " --update (check server for script updates)" echo " --upload (upload contents to remote server)" echo " --no-upload (do not upload contents to remote server)" echo " --pastebin (use http://pastebin.ca) as remote server" echo " instead www.alsa-project.org" echo " --stdout (print alsa information to standard output" echo " instead of a file)" echo " --about (show some information about the script)" echo " --debug (will run the script as normal, but will not" echo " delete $FILE)" exit 0 ;; esac shift 1 done fi if [ "$PROCEED" = "no" ]; then exit 1 fi if [ "$UPLOAD" = "ask" ]; then if [[ -n "$DIALOG" ]]; then dialog --backtitle "$BGTITLE" --title "Information collected" --yes-label " UPLOAD / SHARE " --no-label " SAVE LOCALLY " --defaultno --yesno "\n\nAutomatically upload ALSA information to $WWWSERVICE?" 10 80 DIALOG_EXIT_CODE=$? if [ $DIALOG_EXIT_CODE != 0 ]; then UPLOAD="no" else UPLOAD="yes" fi else echo -n "Automatically upload ALSA information to $WWWSERVICE? [y/N] : " read -e CONFIRM if [ "$CONFIRM" != "y" ]; then UPLOAD="no" else UPLOAD="yes" fi fi fi if [ "$UPLOAD" = "no" ]; then if [ -z "$TOSTDOUT" ]; then mv -f $FILE $NFILE || exit 1 KEEP_OUTPUT="yes" fi if [[ -n $DIALOG ]] then if [[ -n $PBERROR ]]; then dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "An error occurred while contacting the $WWWSERVICE.\n Your information was NOT automatically uploaded.\n\nYour ALSA information is in $NFILE" 10 100 else dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "\n\nYour ALSA information is in $NFILE" 10 60 fi else echo if [[ -n $PBERROR ]]; then echo "An error occurred while contacting the $WWWSERVICE." echo "Your information was NOT automatically uploaded." echo "" echo "Your ALSA information is in $NFILE" echo "" else if [ -z "$TOSTDOUT" ]; then echo "" echo "Your ALSA information is in $NFILE" echo "" fi fi fi exit fi # UPLOAD #Test that wget is installed, and supports --post-file. Upload $FILE if it does, and prompt user to upload file if it doesnt. if WGET=$(which wget 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); [[ -n "${WGET}" ]] && [[ -x "${WGET}" ]] && [[ `wget --help |grep post-file` ]] then if [[ -n $DIALOG ]] then if [[ -z $PASTEBIN ]]; then wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://www.alsa-project.org/cardinfo-db/" &>$TEMPDIR/wget.tmp || echo "Upload failed; exit" { for i in 10 20 30 40 50 60 70 80 90; do echo $i sleep 0.2 done echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.alsa-project.org ..." 6 70 0 else wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah" &>$TEMPDIR/wget.tmp || echo "Upload failed; exit" { for i in 10 20 30 40 50 60 70 80 90; do echo $i sleep 0.2 done echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.pastebin.ca ..." 6 70 0 fi dialog --backtitle "$BGTITLE" --title "Information uploaded" --yesno "Would you like to see the uploaded information?" 5 100 DIALOG_EXIT_CODE=$? if [ $DIALOG_EXIT_CODE = 0 ]; then grep -v "alsa-info.txt" $FILE >$TEMPDIR/uploaded.txt dialog --backtitle "$BGTITLE" --textbox $TEMPDIR/uploaded.txt 0 0 fi clear # no dialog else if [[ -z $PASTEBIN ]]; then echo -n "Uploading information to www.alsa-project.org ... " wget -O - --tries=5 --timeout=60 --post-file=$FILE http://www.alsa-project.org/cardinfo-db/ &>$TEMPDIR/wget.tmp & else echo -n "Uploading information to www.pastebin.ca ... " wget -O - --tries=5 --timeout=60 --post-file=$FILE http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY &>$TEMPDIR/wget.tmp & fi #Progess spinner for wget transfer. i=1 sp="/-\|" echo -n ' ' while pgrep wget &>/dev/null do echo -en "\b${sp:i++%${#sp}:1}" done echo -e "\b Done!" echo "" fi #dialog #See if tput is available, and use it if it is. if [[ -n "$TPUT" ]] then if [[ -z $PASTEBIN ]]; then FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2 ; tput sgr0` else FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p';tput sgr0` fi else if [[ -z $PASTEBIN ]]; then FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2` else FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp |sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p'` fi fi #Output the URL of the uploaded file. echo "Your ALSA information is located at $FINAL_URL" echo "Please inform the person helping you." echo "" #We couldnt find a suitable wget, so tell the user to upload manually. else mv -f $FILE $NFILE || exit 1 KEEP_OUTPUT="yes" if [[ -z $DIALOG ]] then if [[ -z $PASTEBIN ]]; then echo "" echo "Could not automatically upload output to http://www.alsa-project.org" echo "Possible reasons are:" echo " 1. Couldnt find 'wget' in your PATH" echo " 2. Your version of wget is less than 1.8.2" echo "" echo "Please manually upload $NFILE to http://www.alsa-project.org/cardinfo-db/ and submit your post." echo "" else echo "" echo "Could not automatically upload output to http://www.pastebin.ca" echo "Possible reasons are:" echo " 1. Couldnt find 'wget' in your PATH" echo " 2. Your version of wget is less than 1.8.2" echo "" echo "Please manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post." echo "" fi else if [[ -z $PASTEBIN ]]; then dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.alsa-project.org.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.alsa-project,org/cardinfo-db/ and submit your post." 25 100 else dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.pastebin.ca.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post." 25 100 fi fi fi plainbox-provider-checkbox-0.25/bin/optical_read_test0000775000175000017500000000746412646152433024272 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import sys import posixpath import filecmp import shutil from argparse import ArgumentParser from subprocess import Popen, PIPE DEFAULT_DIR = '/tmp/checkbox.optical' DEFAULT_DEVICE_DIR = 'device' DEFAULT_IMAGE_DIR = 'image' CDROM_ID = '/lib/udev/cdrom_id' def _command(command, shell=True): proc = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE ) return proc def _command_out(command, shell=True): proc = _command(command, shell) return proc.communicate()[0].strip() def compare_tree(source, target): for dirpath, dirnames, filenames in os.walk(source): #if both tree are empty return false if dirpath == source and dirnames == [] and filenames == []: return False for name in filenames: file1 = os.path.join(dirpath, name) file2 = file1.replace(source, target, 1) if os.path.isfile(file1) and not os.path.islink(file1): if filecmp.cmp(file1, file2): continue else: return False else: continue return True def read_test(device): passed = False device_dir = os.path.join(DEFAULT_DIR, DEFAULT_DEVICE_DIR) image_dir = os.path.join(DEFAULT_DIR, DEFAULT_IMAGE_DIR) for dir in (device_dir, image_dir): if posixpath.exists(dir): shutil.rmtree(dir) os.makedirs(device_dir) try: _command("umount %s" % device).communicate() mount = _command("mount -o ro %s %s" % (device, device_dir)) mount.communicate() if mount.returncode != 0: print("Unable to mount %s to %s" % (device, device_dir), file=sys.stderr) return False file_copy = _command("cp -dpR %s %s" % (device_dir, image_dir)) file_copy.communicate() if file_copy.returncode != 0: print("Failed to copy files from %s to %s" % (device_dir, image_dir), file=sys.stderr) return False if compare_tree(device_dir, image_dir): passed = True except: print("File Comparison failed while testing %s" % device, file=sys.stderr) passed = False finally: _command("umount %s" % device_dir).communicate(3) for dir in (device_dir, image_dir): if posixpath.exists(dir): shutil.rmtree(dir) if passed: print("File Comparison passed (%s)" % device) return passed def get_capabilities(device): cmd = "%s %s" % (CDROM_ID, device) capabilities = _command_out(cmd) return capabilities def main(): tests = [] return_values = [] parser = ArgumentParser() parser.add_argument("device", nargs='+', help=('Specify an optical device or list of devices ' 'such as /dev/cdrom')) args = parser.parse_args() if os.geteuid() != 0: parser.error("ERROR: Must be root to run this script.") for device in args.device: capabilities = get_capabilities(device) if not capabilities: print("Unable to get capabilities of %s" % device, file=sys.stderr) return 1 for capability in capabilities.decode().split('\n'): if capability[:3] == 'ID_': cap = capability[3:-2] if cap == 'CDROM' or cap == 'CDROM_DVD': tests.append('read') for test in set(tests): print("Testing %s on %s ... " % (test, device), file=sys.stdout) tester = "%s_test" % test return_values.append(globals()[tester](device)) return False in return_values if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/fwts_test0000775000175000017500000004732212646152433022624 0ustar sylvainsylvain00000000000000#! /usr/bin/python3 import sys import re from time import time from argparse import ArgumentParser, RawTextHelpFormatter, REMAINDER from subprocess import Popen, PIPE from syslog import * from distutils.spawn import find_executable import os # These tests require user interaction and need either special handling # or skipping altogether (right now, we skip them but they're kept here # in case we figure out a way to present the interaction to the user). INTERACTIVE_TESTS = ['ac_adapter', 'battery', 'hotkey', 'power_button', 'brightness', 'lid'] # These are performed on QA certification runs QA_TESTS = ['acpitests', 'acpidump', 'acpitables', 'apicinstance', 'aspm', 'bios32', 'dmicheck', 'ebda', 'mpcheck', 'msr', 'nx', 'version'] # These are advanced tests that shouldn't affect certification status NON_CERT_TESTS = ['bios_info', 'cmosdump', 'cpufreq', 'crs', 'crsdump', 'csm', 'ebdadump', 'fan', 'gpedump', 'hda_audio', 'maxfreq', 'maxreadreq', 'memmapdump', 'microcode', 'mpdump', 'os2gap', 'osilinux', 'pciirq', 'plddump', 'pnp', 'prsdump', 'romdump', 'securebootcert', 'syntaxcheck', 'uefidump', 'uefirtmisc', 'uefirttime', 'uefirtvariable', 'uefivarinfo', 'wakealarm' ] # The following tests will record logs in a separate file for the HWE team HWE_TESTS = ['mtrr', 'virt', 'apicedge', 'klog', 'oops', 'uefibootpath'] CERT_TESTS = sorted(QA_TESTS + HWE_TESTS) TESTS = sorted(QA_TESTS + NON_CERT_TESTS + HWE_TESTS) def get_sleep_times(start_marker, end_marker, sleep_time, resume_time): logfile = '/var/log/syslog' log_fh = open(logfile, 'r') line = '' run = 'FAIL' sleep_start_time = 0.0 sleep_end_time = 0.0 resume_start_time = 0.0 resume_end_time = 0.0 while start_marker not in line: try: line = log_fh.readline() except UnicodeDecodeError: continue if start_marker in line: loglist = log_fh.readlines() for idx in range(0, len(loglist)): if 'PM: Syncing filesystems' in loglist[idx]: sleep_start_time = re.split('[\[\]]', loglist[idx])[1].strip() if 'ACPI: Low-level resume complete' in loglist[idx]: sleep_end_time = re.split('[\[\]]', loglist[idx - 1])[1].strip() resume_start_time = re.split('[\[\]]', loglist[idx])[1].strip() idx += 1 if 'Restarting tasks' in loglist[idx]: resume_end_time = re.split('[\[\]]', loglist[idx])[1].strip() if end_marker in loglist[idx]: run = 'PASS' break sleep_elapsed = float(sleep_end_time) - float(sleep_start_time) resume_elapsed = float(resume_end_time) - float(resume_start_time) return (run, sleep_elapsed, resume_elapsed) def average_times(runs): sleep_total = 0.0 resume_total = 0.0 run_count = 0 for run in runs.keys(): run_count += 1 sleep_total += runs[run][1] resume_total += runs[run][2] sleep_avg = sleep_total / run_count resume_avg = resume_total / run_count print('Average time to sleep: %0.5f' % sleep_avg) print('Average time to resume: %0.5f' % resume_avg) def fix_sleep_args(args): new_args = [] for arg in args: if "=" in arg: new_args.extend(arg.split('=')) else: new_args.append(arg) return new_args def detect_progress_indicator(): # Return a command suitable for piping progress information to its # stdin (invoked via Popen), in list format. # Return zenity if installed and DISPLAY (--auto-close) # return dialog if installed and no DISPLAY (width height) display = os.environ.get('DISPLAY') if display and find_executable('zenity'): return ["zenity", "--progress", "--text", "Progress", "--auto-close"] if not display and find_executable('dialog'): return ["dialog", "--gauge", "Progress", "20", "70"] # Return None if no progress indicator is to be used return None def main(): description_text = 'Tests the system BIOS using the Firmware Test Suite' epilog_text = ('To perform sleep testing, you will need at least some of ' 'the following options: \n' 's3 or s4: tells fwts which type of sleep to perform.\n' '--s3-delay-delta\n' '--s3-device-check\n' '--s3-device-check-delay\n' '--s3-hybrid-sleep\n' '--s3-max-delay\n' '--s3-min-delay\n' '--s3-multiple\n' '--s3-quirks\n' '--s3-sleep-delay\n' '--s3power-sleep-delay\n\n' 'Example: fwts_test --sleep s3 --s3-min-delay 30 ' '--s3-multiple 10 --s3-device-check\n\n' 'For further help with sleep options:\n' 'fwts_test --fwts-help') parser = ArgumentParser(description=description_text, epilog=epilog_text, formatter_class=RawTextHelpFormatter) parser.add_argument('-l', '--log', default='/tmp/fwts_results.log', help=('Specify the location and name ' 'of the log file.\n' '[Default: %(default)s]')) parser.add_argument('-f', '--fail-level', default='high', choices=['critical', 'high', 'medium', 'low', 'none', 'aborted'], help=('Specify the FWTS failure level that will ' 'trigger this script to return a failing exit ' 'code. For example, if you chose "critical" as ' 'the fail-level, this wrapper will NOT return ' 'a failing exit code unless FWTS reports a ' 'test as FAILED_CRITICAL. You will still be ' 'notified of all FWTS test failures. ' '[Default level: %(default)s]')) sleep_args = parser.add_argument_group('Sleep Options', ('The following arguments are to ' 'only be used with the ' '--sleep test option')) sleep_args.add_argument('--sleep-time', dest='sleep_time', action='store', help=('The max time in seconds that a system ' 'should take\nto completely enter sleep. ' 'Anything more than this\ntime will cause ' 'that test iteration to fail.\n' '[Default: 10s]')) sleep_args.add_argument('--resume-time', dest='resume_time', action='store', help=('Same as --sleep-time, except this applies ' 'to the\ntime it takes a system to fully ' 'wake from sleep.\n[Default: 3s]')) group = parser.add_mutually_exclusive_group() group.add_argument('-t', '--test', action='append', help='Name of the test to run.') group.add_argument('-a', '--all', action='store_true', help='Run ALL FWTS automated tests (assumes -w and -c)') group.add_argument('-s', '--sleep', nargs=REMAINDER, action='store', help=('Perform sleep test(s) using the additional\n' 'arguments provided after --sleep. Remaining\n' 'items on the command line will be passed \n' 'through to fwts for performing sleep tests. \n' 'For info on these extra fwts options, please \n' 'see the epilog below and \n' 'the --fwts-help option.')) group.add_argument('--hwe', action='store_true', help='Run HWE concerned tests in fwts') group.add_argument('--qa', action='store_true', help='Run QA concerned tests in fwts') group.add_argument('--fwts-help', dest='fwts_help', action='store_true', help='Display the help info for fwts itself (lengthy)') group.add_argument('--list', action='store_true', help='List all tests in fwts.') group.add_argument('--list-cert', action='store_true', help='List all certification tests in fwts.') group.add_argument('--list-advanced', action='store_true', help='List all advanced tests in fwts.') group.add_argument('--list-hwe', action='store_true', help='List all HWE concerned tests in fwts') group.add_argument('--list-qa', action='store_true', help='List all QA concerned tests in fwts') args = parser.parse_args() tests = [] results = {} critical_fails = [] high_fails = [] medium_fails = [] low_fails = [] passed = [] aborted = [] # Set correct fail level if args.fail_level is not 'none': args.fail_level = 'FAILED_%s' % args.fail_level.upper() # Get our failure priority and create the priority values fail_levels = {'FAILED_CRITICAL': 4, 'FAILED_HIGH': 3, 'FAILED_MEDIUM': 2, 'FAILED_LOW': 1, 'FAILED_NONE': 0, 'FAILED_ABORTED': -1} fail_priority = fail_levels[args.fail_level] # Enforce only using sleep opts with --sleep if args.sleep_time or args.resume_time and not args.sleep: parser.error('--sleep-time and --resume-time only apply to the ' '--sleep testing option.') if args.fwts_help: Popen('fwts -h', shell=True).communicate()[0] return 0 elif args.list: print('\n'.join(TESTS)) return 0 elif args.list_cert: print('\n'.join(CERT_TESTS)) return 0 elif args.list_advanced: print('\n'.join(NON_CERT_TESTS)) return 0 elif args.list_hwe: print('\n'.join(HWE_TESTS)) return 0 elif args.list_qa: print('\n'.join(QA_TESTS)) return 0 elif args.test: tests.extend(args.test) elif args.all: tests.extend(TESTS) elif args.hwe: tests.extend(HWE_TESTS) elif args.qa: tests.extend(QA_TESTS) elif args.sleep: args.sleep = fix_sleep_args(args.sleep) iterations = 1 # if multiple iterations are requested, we need to intercept # that argument and keep it from being presented to fwts since # we're handling the iterations directly. s3 = '--s3-multiple' s4 = '--s4-multiple' if s3 in args.sleep: iterations = int(args.sleep.pop(args.sleep.index(s3) + 1)) args.sleep.remove(s3) if s4 in args.sleep: iterations = int(args.sleep.pop(args.sleep.index(s4) + 1)) args.sleep.remove(s4) # if we've passed our custom sleep arguments for resume or sleep # time, we need to intercept those as well. resume_time_arg = '--resume-time' sleep_time_arg = '--sleep-time' if resume_time_arg in args.sleep: args.resume_time = int(args.sleep.pop( args.sleep.index(resume_time_arg) + 1)) args.sleep.remove(resume_time_arg) if sleep_time_arg in args.sleep: args.sleep_time = int(args.sleep.pop( args.sleep.index(sleep_time_arg) + 1)) args.sleep.remove(sleep_time_arg) # if we still haven't set a sleep or resume time, use defauts. if not args.sleep_time: args.sleep_time = 10 if not args.resume_time: args.resume_time = 3 tests.extend(args.sleep) else: tests.extend(CERT_TESTS) # run the tests we want if args.sleep: iteration_results = {} print('=' * 20 + ' Test Results ' + '=' * 20) progress_indicator = None if detect_progress_indicator(): progress_indicator = Popen(detect_progress_indicator(), stdin=PIPE) for iteration in range(0, iterations): timestamp = int(time()) start_marker = 'CHECKBOX SLEEP TEST START %s' % timestamp end_marker = 'CHECKBOX SLEEP TEST STOP %s' % timestamp syslog(LOG_INFO, '---' + start_marker + '---' + str(time())) command = ('fwts -q --stdout-summary -r %s %s' % (args.log, ' '.join(tests))) results['sleep'] = (Popen(command, stdout=PIPE, shell=True) .communicate()[0].strip()).decode() syslog(LOG_INFO, '---' + end_marker + '---' + str(time())) if 's4' not in args.sleep: sleep_times = get_sleep_times(start_marker, end_marker, args.sleep_time, args.resume_time) iteration_results[iteration] = sleep_times progress_tuple = (iteration, iteration_results[iteration][0], iteration_results[iteration][1], iteration_results[iteration][2]) progress_string = (' - Cycle %s: Status: %s ' 'Sleep Elapsed: %0.5f ' 'Resume Elapsed: ' ' %0.5f' % progress_tuple) progress_pct = "{}".format(int(100 * iteration / iterations)) if "zenity" in detect_progress_indicator(): progress_indicator.stdin.write("# {}\n".format( progress_string).encode('utf-8')) progress_indicator.stdin.write("{}\n".format( progress_pct).encode('utf-8')) progress_indicator.stdin.flush() elif "dialog" in detect_progress_indicator(): progress_indicator.stdin.write("XXX\n".encode('utf-8')) progress_indicator.stdin.write( progress_pct.encode('utf-8')) progress_indicator.stdin.write( "\nTest progress\n".encode('utf-8')) progress_indicator.stdin.write( progress_string.encode('utf-8')) progress_indicator.stdin.write( "\nXXX\n".encode('utf-8')) progress_indicator.stdin.flush() else: print(progress_string) progress_indicator.terminate() if 's4' not in args.sleep: average_times(iteration_results) for run in iteration_results.keys(): if 'FAIL' in iteration_results[run]: results['sleep'] = 'FAILED_CRITICAL' else: for test in tests: # ACPI tests can now be run with --acpitests (fwts >= 15.07.00) log = args.log # Split the log file for HWE (only if -t is not used) if test == 'acpitests': test = '--acpitests' command = ('fwts -q --stdout-summary -r %s %s' % (log, test)) results[test] = (Popen(command, stdout=PIPE, shell=True) .communicate()[0].strip()).decode() # parse the summaries for test in results.keys(): if results[test] == 'FAILED_CRITICAL': critical_fails.append(test) elif results[test] == 'FAILED_HIGH': high_fails.append(test) elif results[test] == 'FAILED_MEDIUM': medium_fails.append(test) elif results[test] == 'FAILED_LOW': low_fails.append(test) elif results[test] == 'PASSED': passed.append(test) elif results[test] == 'ABORTED': aborted.append(test) else: continue if critical_fails: print("Critical Failures: %d" % len(critical_fails)) print("WARNING: The following test cases were reported as critical\n" "level failures by fwts. Please review the log at\n" "%s for more information." % args.log) for test in critical_fails: print(" - " + test) if high_fails: print("High Failures: %d" % len(high_fails)) print("WARNING: The following test cases were reported as high\n" "level failures by fwts. Please review the log at\n" "%s for more information." % args.log) for test in high_fails: print(" - " + test) if medium_fails: print("Medium Failures: %d" % len(medium_fails)) print("WARNING: The following test cases were reported as medium\n" "level failures by fwts. Please review the log at\n" "%s for more information." % args.log) for test in medium_fails: print(" - " + test) if low_fails: print("Low Failures: %d" % len(low_fails)) print("WARNING: The following test cases were reported as low\n" "level failures by fwts. Please review the log at\n" "%s for more information." % args.log) for test in low_fails: print(" - " + test) if passed: print("Passed: %d" % len(passed)) for test in passed: print(" - " + test) if aborted: print("Aborted Tests: %d" % len(aborted)) print("WARNING: The following test cases were aborted by fwts\n" "Please review the log at %s for more information." % args.log) for test in aborted: print(" - " + test) if args.fail_level is not 'none': if fail_priority == fail_levels['FAILED_CRITICAL']: if critical_fails: return 1 if fail_priority == fail_levels['FAILED_HIGH']: if critical_fails or high_fails: return 1 if fail_priority == fail_levels['FAILED_MEDIUM']: if critical_fails or high_fails or medium_fails: return 1 if fail_priority == fail_levels['FAILED_LOW']: if critical_fails or high_fails or medium_fails or low_fails: return 1 if fail_priority == fail_levels['FAILED_ABORTED']: if aborted or critical_fails or high_fails: return 1 return 0 if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/mm-test0000775000175000017500000003647112646152433022173 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details: # # Copyright (C) 2008 Novell, Inc. # Copyright (C) 2009 Red Hat, Inc. # import sys, dbus, time, os, string, subprocess, socket DBUS_INTERFACE_PROPERTIES='org.freedesktop.DBus.Properties' MM_DBUS_SERVICE='org.freedesktop.ModemManager' MM_DBUS_PATH='/org/freedesktop/ModemManager' MM_DBUS_INTERFACE='org.freedesktop.ModemManager' MM_DBUS_INTERFACE_MODEM='org.freedesktop.ModemManager.Modem' MM_DBUS_INTERFACE_MODEM_CDMA='org.freedesktop.ModemManager.Modem.Cdma' MM_DBUS_INTERFACE_MODEM_GSM_CARD='org.freedesktop.ModemManager.Modem.Gsm.Card' MM_DBUS_INTERFACE_MODEM_GSM_NETWORK='org.freedesktop.ModemManager.Modem.Gsm.Network' MM_DBUS_INTERFACE_MODEM_SIMPLE='org.freedesktop.ModemManager.Modem.Simple' def get_cdma_band_class(band_class): if band_class == 1: return "800MHz" elif band_class == 2: return "1900MHz" else: return "Unknown" def get_reg_state(state): if state == 1: return "registered (roaming unknown)" elif state == 2: return "registered on home network" elif state == 3: return "registered on roaming network" else: return "unknown" def cdma_inspect(proxy, dump_private): cdma = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_CDMA) esn = "" if dump_private: try: esn = cdma.GetEsn() except dbus.exceptions.DBusException: esn = "" print("") print("ESN: %s" % esn) try: (cdma_1x_state, evdo_state) = cdma.GetRegistrationState() print("1x State: %s" % get_reg_state (cdma_1x_state)) print("EVDO State: %s" % get_reg_state (evdo_state)) except dbus.exceptions.DBusException as e: print("Error reading registration state: %s" % e) try: quality = cdma.GetSignalQuality() print("Signal quality: %d" % quality) except dbus.exceptions.DBusException as e: print("Error reading signal quality: %s" % e) try: info = cdma.GetServingSystem() print("Class: %s" % get_cdma_band_class(info[0])) print("Band: %s" % info[1]) print("SID: %d" % info[2]) except dbus.exceptions.DBusException as e: print("Error reading serving system: %s" % e) def cdma_connect(proxy, user, password): # Modem.Simple interface simple = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_SIMPLE) try: simple.Connect({'number':"#777"}, timeout=92) print("\nConnected!") return True except Exception as e: print("Error connecting: %s" % e) return False def get_gsm_network_mode(modem): mode = modem.GetNetworkMode() if mode == 0x0: mode = "Unknown" elif mode == 0x1: mode = "Any" elif mode == 0x2: mode = "GPRS" elif mode == 0x4: mode = "EDGE" elif mode == 0x8: mode = "UMTS" elif mode == 0x10: mode = "HSDPA" elif mode == 0x20: mode = "2G Preferred" elif mode == 0x40: mode = "3G Preferred" elif mode == 0x80: mode = "2G Only" elif mode == 0x100: mode = "3G Only" elif mode == 0x200: mode = "HSUPA" elif mode == 0x400: mode = "HSPA" else: mode = "(Unknown)" print("Mode: %s" % mode) def get_gsm_band(modem): band = modem.GetBand() if band == 0x0: band = "Unknown" elif band == 0x1: band = "Any" elif band == 0x2: band = "EGSM (900 MHz)" elif band == 0x4: band = "DCS (1800 MHz)" elif band == 0x8: band = "PCS (1900 MHz)" elif band == 0x10: band = "G850 (850 MHz)" elif band == 0x20: band = "U2100 (WCSMA 2100 MHZ, Class I)" elif band == 0x40: band = "U1700 (WCDMA 3GPP UMTS1800 MHz, Class III)" elif band == 0x80: band = "17IV (WCDMA 3GPP AWS 1700/2100 MHz, Class IV)" elif band == 0x100: band = "U800 (WCDMA 3GPP UMTS800 MHz, Class VI)" elif band == 0x200: band = "U850 (WCDMA 3GPP UMT850 MHz, Class V)" elif band == 0x400: band = "U900 (WCDMA 3GPP UMTS900 MHz, Class VIII)" elif band == 0x800: band = "U17IX (WCDMA 3GPP UMTS MHz, Class IX)" else: band = "(invalid)" print("Band: %s" % band) def gsm_inspect(proxy, dump_private, do_scan): # Gsm.Card interface card = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_GSM_CARD) imei = "" imsi = "" if dump_private: try: imei = card.GetImei() except dbus.exceptions.DBusException: imei = "" try: imsi = card.GetImsi() except dbus.exceptions.DBusException: imsi = "" print("IMEI: %s" % imei) print("IMSI: %s" % imsi) # Gsm.Network interface net = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_GSM_NETWORK) try: quality = net.GetSignalQuality() print("Signal quality: %d" % quality) except dbus.exceptions.DBusException as e: print("Error reading signal quality: %s" % e) if not do_scan: return print("Scanning...") try: results = net.Scan(timeout=120) except dbus.exceptions.DBusException as e: print("Error scanning: %s" % e) results = {} for r in results: status = r['status'] if status == "1": status = "available" elif status == "2": status = "current" elif status == "3": status = "forbidden" else: status = "(Unknown)" access_tech = "" try: access_tech_num = r['access-tech'] if access_tech_num == "0": access_tech = "(GSM)" elif access_tech_num == "1": access_tech = "(Compact GSM)" elif access_tech_num == "2": access_tech = "(UMTS)" elif access_tech_num == "3": access_tech = "(EDGE)" elif access_tech_num == "4": access_tech = "(HSDPA)" elif access_tech_num == "5": access_tech = "(HSUPA)" elif access_tech_num == "6": access_tech = "(HSPA)" except KeyError: pass if 'operator-long' in r and len(r['operator-long']): print("%s: %s %s" % (r['operator-long'], status, access_tech)) elif 'operator-short' in r and len(r['operator-short']): print("%s: %s %s" % (r['operator-short'], status, access_tech)) else: print("%s: %s %s" % (r['operator-num'], status, access_tech)) def gsm_connect(proxy, apn, user, password): # Modem.Simple interface simple = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM_SIMPLE) try: opts = {'number':"*99#"} if apn is not None: opts['apn'] = apn if user is not None: opts['username'] = user if password is not None: opts['password'] = password simple.Connect(opts, timeout=120) print("\nConnected!") return True except Exception as e: print("Error connecting: %s" % e) return False def pppd_find(): paths = ["/usr/local/sbin/pppd", "/usr/sbin/pppd", "/sbin/pppd"] for p in paths: if os.path.exists(p): return p return None def ppp_start(device, user, password, tmpfile): path = pppd_find() if not path: return None args = [path] args += ["nodetach"] args += ["lock"] args += ["nodefaultroute"] args += ["debug"] if user: args += ["user"] args += [user] args += ["noipdefault"] args += ["115200"] args += ["noauth"] args += ["crtscts"] args += ["modem"] args += ["usepeerdns"] args += ["ipparam"] ipparam = "" if user: ipparam += user ipparam += "+" if password: ipparam += password ipparam += "+" ipparam += tmpfile args += [ipparam] args += ["plugin"] args += ["mm-test-pppd-plugin.so"] args += [device] return subprocess.Popen(args, close_fds=True, cwd="/", env={}) def ppp_wait(p, tmpfile): i = 0 while p.poll() == None and i < 30: time.sleep(1) if os.path.exists(tmpfile): f = open(tmpfile, 'r') stuff = f.read(500) idx = string.find(stuff, "DONE") f.close() if idx >= 0: return True i += 1 return False def ppp_stop(p): import signal p.send_signal(signal.SIGTERM) p.wait() def ntop_helper(ip): ip = socket.ntohl(ip) n1 = ip >> 24 & 0xFF n2 = ip >> 16 & 0xFF n3 = ip >> 8 & 0xFF n4 = ip & 0xFF a = "%c%c%c%c" % (n1, n2, n3, n4) return socket.inet_ntop(socket.AF_INET, a) def static_start(iface, modem): (addr_num, dns1_num, dns2_num, dns3_num) = modem.GetIP4Config() addr = ntop_helper(addr_num) dns1 = ntop_helper(dns1_num) dns2 = ntop_helper(dns2_num) configure_iface(iface, addr, 0, dns1, dns2) def down_iface(iface): ip = ["ip", "addr", "flush", "dev", iface] print(" ".join(ip)) subprocess.call(ip) ip = ["ip", "link", "set", iface, "down"] print(" ".join(ip)) subprocess.call(ip) def configure_iface(iface, addr, gw, dns1, dns2): print("\n\n******************************") print("iface: %s" % iface) print("addr: %s" % addr) print("gw: %s" % gw) print("dns1: %s" % dns1) print("dns2: %s" % dns2) ifconfig = ["ifconfig", iface, "%s/32" % addr] if gw != 0: ifconfig += ["pointopoint", gw] print(" ".join(ifconfig)) print("\n******************************\n") subprocess.call(ifconfig) def file_configure_iface(tmpfile): addr = None gw = None iface = None dns1 = None dns2 = None f = open(tmpfile, 'r') lines = f.readlines() for l in lines: if l.startswith("addr"): addr = l[len("addr"):].strip() if l.startswith("gateway"): gw = l[len("gateway"):].strip() if l.startswith("iface"): iface = l[len("iface"):].strip() if l.startswith("dns1"): dns1 = l[len("dns1"):].strip() if l.startswith("dns2"): dns2 = l[len("dns2"):].strip() f.close() configure_iface(iface, addr, gw, dns1, dns2) return iface def try_ping(iface): cmd = ["ping", "-I", iface, "-c", "4", "-i", "3", "-w", "20", "4.2.2.1"] print(" ".join(cmd)) retcode = subprocess.call(cmd) if retcode != 0: print("PING: failed") else: print("PING: success") dump_private = False connect = False apn = None user = None password = None do_ip = False do_scan = True x = 1 while x < len(sys.argv): if sys.argv[x] == "--private": dump_private = True elif sys.argv[x] == "--connect": connect = True elif (sys.argv[x] == "--user" or sys.argv[x] == "--username"): x += 1 user = sys.argv[x] elif sys.argv[x] == "--apn": x += 1 apn = sys.argv[x] elif sys.argv[x] == "--password": x += 1 password = sys.argv[x] elif sys.argv[x] == "--ip": do_ip = True if os.geteuid() != 0: print("You probably want to be root to use --ip") sys.exit(1) elif sys.argv[x] == "--no-scan": do_scan = False x += 1 bus = dbus.SystemBus() # Get available modems: try: manager_proxy = bus.get_object('org.freedesktop.ModemManager', '/org/freedesktop/ModemManager') manager_iface = dbus.Interface(manager_proxy, dbus_interface='org.freedesktop.ModemManager') modems = manager_iface.EnumerateDevices() except dbus.exceptions.DBusException as excp: if (excp.get_dbus_name() == "org.freedesktop.DBus.Error.ServiceUnknown"): print("ERROR: mm-test doesn't work on ModemManager 1.0 and newer: {}".format( excp.get_dbus_message())) else: print("ERROR: {}".format(excp.get_dbus_message())) sys.exit(1) if not modems: print("No modems found") sys.exit(1) for m in modems: connect_success = False data_device = None proxy = bus.get_object(MM_DBUS_SERVICE, m) # Properties props_iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties') type = props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'Type') if type == 1: print("GSM modem") elif type == 2: print("CDMA modem") else: print("Invalid modem type: %d" % type) print("Driver: '%s'" % (props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'Driver'))) print("Modem device: '%s'" % (props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'MasterDevice'))) data_device = props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'Device') print("Data device: '%s'" % data_device) # Modem interface modem = dbus.Interface(proxy, dbus_interface=MM_DBUS_INTERFACE_MODEM) try: modem.Enable(True) except dbus.exceptions.DBusException as e: print("Error enabling modem: %s" % e) sys.exit(1) info = modem.GetInfo() print("Vendor: %s" % info[0]) print("Model: %s" % info[1]) print("Version: %s" % info[2]) if type == 1: gsm_inspect(proxy, dump_private, do_scan) if connect == True: connect_success = gsm_connect(proxy, apn, user, password) elif type == 2: cdma_inspect(proxy, dump_private) if connect == True: connect_success = cdma_connect(proxy, user, password) print() if connect_success and do_ip: tmpfile = "/tmp/mm-test-%d.tmp" % os.getpid() success = False try: ip_method = props_iface.Get(MM_DBUS_INTERFACE_MODEM, 'IpMethod') if ip_method == 0: # ppp p = ppp_start(data_device, user, password, tmpfile) if ppp_wait(p, tmpfile): data_device = file_configure_iface(tmpfile) success = True elif ip_method == 1: # static static_start(data_device, modem) success = True elif ip_method == 2: # dhcp pass except Exception as e: print("Error setting up IP: %s" % e) if success: try_ping(data_device) print("Waiting for 30s...") time.sleep(30) print("Disconnecting...") try: if ip_method == 0: ppp_stop(p) try: os.remove(tmpfile) except: pass elif ip_method == 1: # static down_iface(data_device) elif ip_method == 2: # dhcp down_iface(data_device) modem.Disconnect() except Exception as e: print("Error tearing down IP: %s" % e) time.sleep(5) modem.Enable(False) plainbox-provider-checkbox-0.25/bin/bluetooth_scan0000775000175000017500000000026112646152433023602 0ustar sylvainsylvain00000000000000#!/bin/bash hciconfig hci0 reset name=`zenity --title="Bluetooth Send" --entry --text="Bluetooth Send"` address=`hcitool scan | grep "$name" | awk '{print $1}'` echo $address plainbox-provider-checkbox-0.25/bin/bmc_info0000775000175000017500000000405412646152433022351 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import sys import shlex from subprocess import check_output, CalledProcessError def main(): # First, we need to get output cmd = "ipmitool mc info" try: result = check_output(shlex.split(cmd), universal_newlines=True) except FileNotFoundError: print("ipmitool was not found! Please install it and try again.", file=sys.stderr) return 1 except CalledProcessError as e: print("Problem running %s. Error was %s" % (cmd,e),file=sys.stderr) return 1 result = result.split('\n') # We need some bits that are formatted oddly so we need to do some parsing data = {} for line in result: if ':' in line: key = line.split(':')[0].strip() value = line.split(':')[1].strip() data[key] = value last = (key, [value]) else: # since the last line we matched had a ':', it's key is likely the # key for the next few lines that don't have a ':' # This should keep adding items to our last key's list until we hit # another line with a :, and we start the cycle over again. last[1].append(line.strip()) data[last[0]] = last[1] # Now print out what we care about: we_care_about = ['Manufacturer Name', 'Manufacturer ID', 'Product Name', 'Product ID', 'Firmware Revision', 'IPMI Version', 'Additional Device Support'] for field in we_care_about: if type(data[field]) is list: # Sometimes the first item in the list is ''. This will remove it data[field].remove('') print(field.ljust(30),':',data[field].pop(0)) for item in data[field]: print(' '.ljust(32),item) else: print(field.ljust(30),":",data[field]) #print("{}:\t{}".format(field, data[field])) return 0 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/audio_test0000775000175000017500000006074012646152433022741 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 from __future__ import division, print_function import argparse import collections import json import logging import math import re import subprocess import sys import time try: import gi gi.require_version('Gst','1.0') from gi.repository import GObject from gi.repository import Gst from gi.repository import GLib Gst.init(None) # This has to be done very early so it can find elements except ImportError: print("Can't import module: %s. it may not be available for this" "version of Python, which is: " % sys.exc_info()[1], file=sys.stderr) print((sys.version), file=sys.stderr) sys.exit(127) #Frequency bands for FFT BINS = 256 #How often to take a sample and do FFT on it. FFT_INTERVAL = 100000000 # In nanoseconds, so this is every 1/10th second #Sampling frequency. The effective maximum frequency we can analyze is #half of this (see Nyquist's theorem) SAMPLING_FREQUENCY = 44100 #The default test frequency is in the middle of the band that contains 5000Hz #This frequency was determined experimentally to be high enough but more #reliable than others we tried. DEFAULT_TEST_FREQUENCY = 5035 #only sample a signal when peak level is in this range (in dB attenuation, #0 means no attenuation (and horrible clipping). REC_LEVEL_RANGE = (-2.0, -12.0) #For our test signal to be considered present, it has to be this much higher #than the base level (minimum magnitude). This is in dB. MAGNITUDE_THRESHOLD = 2.5 #Volume for the sample tone (in %) PLAY_VOLUME = 70 class PIDController(object): """ A Proportional-Integrative-Derivative controller (PID) controls a process's output to try to maintain a desired output value (known as 'setpoint', by continually adjusting the process's input. It does so by calculating the "error" (difference between output and setpoint) and attempting to minimize it manipulating the input. The desired change to the input is calculated based on error and three constants (Kp, Ki and Kd). These values can be interpreted in terms of time: P depends on the present error, I on the accumulation of past errors, and D is a prediction of future errors, based on current rate of change. The weighted sum of these three actions is used to adjust the process via a control element. In practice, Kp, Ki and Kd are process-dependent and usually have to be tweaked by hand, but once reasonable constants are arrived at, they can apply to a particular process without further modification. """ def __init__(self, Kp, Ki, Kd, setpoint=0): """ Creates a PID controller with given constants and setpoint. Arguments: Kp, Ki, Kd: PID constants, see class description. setpoint: desired output value; calls to input_change with a process output reading will return a desired change to the input to attempt matching output to this value. """ self.setpoint = setpoint self.Kp = Kp self.Ki = Ki self.Kd = Kd self._integral = 0 self._previous_error = 0 self._change_limit = 0 def input_change(self, process_feedback, dt): """ Calculates desired input value change. Based on process feedback and time interval (dt). """ error = self.setpoint - process_feedback self._integral = self._integral + (error * dt) derivative = (error - self._previous_error) / dt self._previous_error = error input_change = (self.Kp * error) + \ (self.Ki * self._integral) + \ (self.Kd * derivative) if self._change_limit and abs(input_change) > abs(self._change_limit): sign = input_change / abs(input_change) input_change = sign * self._change_limit return input_change def set_change_limit(self, limit): """Ensures that input value changes are lower than limit. Setting limit of zero disables this. """ self._change_limit = limit class PAVolumeController(object): pa_types = {'input': 'source', 'output': 'sink'} def __init__(self, type, method=None, logger=None): """Initializes the volume controller. Arguments: type: either input or output method: a method that will run a command and return pulseaudio information in the described format, as a single string with line breaks (to be processed with str.splitlines()) """ self.type = type self._volume = None self.identifier = None self.method = method if not isinstance(method, collections.Callable): self.method = self._pactl_output self.logger = logger def set_volume(self, volume): if not 0 <= volume <= 100: return False if not self.identifier: return False command = ['pactl', 'set-%s-volume' % (self.pa_types[self.type]), str(self.identifier[0]), str(int(volume)) + "%"] if False == self.method(command): return False self._volume = volume return True def get_volume(self): if not self.identifier: return None return self._volume def mute(self, mute): mute = str(int(mute)) if not self.identifier: return False command = ['pactl', 'set-%s-mute' % (self.pa_types[self.type]), str(self.identifier[0]), mute] if False == self.method(command): return False return True def get_identifier(self): if self.type: self.identifier = self._get_identifier_for(self.type) if self.identifier and self.logger: message = "Using PulseAudio identifier %s (%s) for %s" %\ (self.identifier + (self.type,)) self.logger.info(message) return self.identifier def _get_identifier_for(self, type): """Gets default PulseAudio identifier for given type. Arguments: type: either input or output Returns: A tuple: (pa_id, pa_description) """ if type not in self.pa_types: return None command = ['pactl', 'list', self.pa_types[type] + "s", 'short'] #Expect lines of this form (field separator is tab): #\t\t\t\t #What we need to return is the ID for the first element on this list #that does not contain auto_null or monitor. pa_info = self.method(command) valid_elements = None if pa_info: reject_regex = '.*(monitor|auto_null).*' valid_elements = [element for element in pa_info.splitlines() if not re.match(reject_regex, element)] if not valid_elements: if self.logger: self.logger.error("No valid PulseAudio elements" " for %s" % (self.type)) return None #We only need the pulseaudio numeric ID and long name for each element valid_elements = [(int(e.split()[0]), e.split()[1]) for e in valid_elements] return valid_elements[0] def _pactl_output(self, command): #This method mainly calls pactl (hence the name). Since pactl may #return a failure if the audio layer is not yet initialized, we will #try running a few times in case of failure. All our invocations of #pactl should be "idempotent" so repeating them should not have #any bad effects. for attempt in range(0, 3): try: return subprocess.check_output(command, universal_newlines=True) except (subprocess.CalledProcessError): time.sleep(5) return False class FileDumper(object): def write_to_file(self, filename, data): try: with open(filename, "w") as f: for i in data: print(i, file=f) return_value = True except (TypeError, IOError): return_value = False return return_value class SpectrumAnalyzer(object): def __init__(self, points, sampling_frequency=44100, wanted_samples=50): self.spectrum = [0] * points self.number_of_samples = 0 self.wanted_samples = wanted_samples self.sampling_frequency = sampling_frequency #Frequencies should contain *real* frequency which is half of #the sampling frequency self.frequencies = [((sampling_frequency / 2.0) / points) * i for i in range(points)] def _average(self): return sum(self.spectrum) / len(self.spectrum) def sample(self, sample): if len(sample) != len(self.spectrum): return self.spectrum = [((old * self.number_of_samples) + new) / (self.number_of_samples + 1) for old, new in zip(self.spectrum, sample)] self.number_of_samples += 1 def frequencies_with_peak_magnitude(self, threshold=1.0): #First establish the base level per_magnitude_bins = collections.defaultdict(int) for magnitude in self.spectrum: per_magnitude_bins[magnitude] += 1 base_level = max(per_magnitude_bins, key=lambda x: per_magnitude_bins[x]) #Now return all values that are higher (more positive) #than base_level + threshold peaks = [] for i in range(1, len(self.spectrum) - 1): first_index = i - 1 last_index = i + 1 if self.spectrum[first_index] < self.spectrum[i] and \ self.spectrum[last_index] < self.spectrum[i] and \ self.spectrum[i] > base_level + threshold: peaks.append(i) return peaks def frequency_band_for(self, frequency): """Convenience function to tell me which band a frequency is contained in """ #Note that actual frequencies are half of what the sampling #frequency would tell us. If SF is 44100 then maximum actual #frequency is 22050, and if I have 10 frequency bins each will #contain only 2205 Hz, not 4410 Hz. max_frequency = self.sampling_frequency / 2 if frequency > max_frequency or frequency < 0: return None band = float(frequency) / (max_frequency / len(self.spectrum)) return int(math.ceil(band)) - 1 def frequencies_for_band(self, band): """Convenience function to tell me the delimiting frequencies for a band """ if band >= len(self.spectrum) or band < 0: return None lower = self.frequencies[band] upper = lower + ((self.sampling_frequency / 2.0) / len(self.spectrum)) return (lower, upper) def sampling_complete(self): return self.number_of_samples >= self.wanted_samples class GStreamerMessageHandler(object): def __init__(self, rec_level_range, logger, volumecontroller, pidcontroller, spectrum_analyzer): """Initializes the message handler. It knows how to handle spectrum and level gstreamer messages. Arguments: rec_level_range: tuple with acceptable recording level ranges logger: logging object with debug, info, error methods. volumecontroller: an instance of VolumeController to use to adjust RECORDING level pidcontroller: a PID controller instance which helps control volume spectrum_analyzer: instance of SpectrumAnalyzer to collect data from spectrum messages """ self.current_level = sys.maxsize self.logger = logger self.pid_controller = pidcontroller self.rec_level_range = rec_level_range self.spectrum_analyzer = spectrum_analyzer self.volume_controller = volumecontroller def set_quit_method(self, method): """ Method that will be called when sampling is complete.""" self._quit_method = method def bus_message_handler(self, bus, message): if message.type == Gst.MessageType.ELEMENT: message_name = message.get_structure().get_name() if message_name == 'spectrum': #TODO: Due to an upstream bug, a structure's get_value method #doesn't work if the value in question is an array (as is the #case with the magnitudes). #https://bugzilla.gnome.org/show_bug.cgi?id=693168 #We have to resort to parsing the string representation of the #structure. It's an ugly hack but it works. #Ideally we'd be able to say this to get fft_magnitudes: #message.get_structure.get_value('magnitude'). #If an upstream fix ever makes it into gstreamer, #remember to remove this hack and the parse_spectrum #method struct_string = message.get_structure().to_string() structure = parse_spectrum_message_structure(struct_string) fft_magnitudes = structure['magnitude'] self.spectrum_method(self.spectrum_analyzer, fft_magnitudes) if message_name == 'level': #peak_value is our process feedback #It's returned as an array, so I need the first (and only) #element peak_value = message.get_structure().get_value('peak')[0] self.level_method(peak_value, self.pid_controller, self.volume_controller) #Adjust recording level def level_method(self, level, pid_controller, volume_controller): #If volume controller doesn't return a valid volume, #we can't control it :( current_volume = volume_controller.get_volume() if current_volume is None: self.logger.error("Unable to control recording volume." "Test results may be wrong") return self.current_level = level change = pid_controller.input_change(level, 0.10) if self.logger: self.logger.debug("Peak level: %(peak_level).2f, " "volume: %(volume)d%%, Volume change: %(change)f%%" % {'peak_level': level, 'change': change, 'volume': current_volume}) volume_controller.set_volume(current_volume + change) #Only sample if level is within the threshold def spectrum_method(self, analyzer, spectrum): if self.rec_level_range[1] <= self.current_level \ or self.current_level <= self.rec_level_range[0]: self.logger.debug("Sampling, recorded %d samples" % analyzer.number_of_samples) analyzer.sample(spectrum) if analyzer.sampling_complete() and self._quit_method: self.logger.info("Sampling complete, ending process") self._quit_method() class GstAudioObject(object): def __init__(self): self.class_name = self.__class__.__name__ def _set_state(self, state, description): self.pipeline.set_state(state) message = "%s: %s" % (self.class_name, description) if self.logger: self.logger.info(message) def start(self): self._set_state(Gst.State.PLAYING, "Starting") def stop(self): self._set_state(Gst.State.NULL, "Stopping") class Player(GstAudioObject): def __init__(self, frequency=DEFAULT_TEST_FREQUENCY, logger=None): super(Player, self).__init__() self.pipeline_description = ("audiotestsrc wave=sine freq=%s " "! audioconvert " "! audioresample " "! autoaudiosink" % int(frequency)) self.logger = logger if self.logger: self.logger.debug(self.pipeline_description) self.pipeline = Gst.parse_launch(self.pipeline_description) class Recorder(GstAudioObject): def __init__(self, output_file, bins=BINS, sampling_frequency=SAMPLING_FREQUENCY, fft_interval=FFT_INTERVAL, logger=None): super(Recorder, self).__init__() pipeline_description = ('''autoaudiosrc ! queue ! level message=true ! audioconvert ! audio/x-raw, channels=1, rate=(int)%(rate)s ! audioresample ! spectrum interval=%(fft_interval)s bands = %(bands)s ! wavenc ! filesink location=%(file)s''' % {'bands': bins, 'rate': sampling_frequency, 'fft_interval': fft_interval, 'file': output_file}) self.logger = logger if self.logger: self.logger.debug(pipeline_description) self.pipeline = Gst.parse_launch(pipeline_description) def register_message_handler(self, handler_method): if self.logger: message = "Registering message handler: %s" % handler_method self.logger.debug(message) self.bus = self.pipeline.get_bus() self.bus.add_signal_watch() self.bus.connect('message', handler_method) def parse_spectrum_message_structure(struct_string): #First let's jsonize this #This is the message name, which we don't need text = struct_string.replace("spectrum, ", "") #name/value separator in json is : and not = text = text.replace("=",": ") #Mutate the {} array notation from the structure to #[] notation for json. text = text.replace("{","[") text = text.replace("}","]") #Remove a few stray semicolons that aren't needed text = text.replace(";","") #Remove the data type fields, as json doesn't need them text = re.sub(r"\(.+?\)", "", text) #double-quote the identifiers text = re.sub(r"([\w-]+):", r'"\1":', text) #Wrap the whole thing in brackets text = ("{"+text+"}") #Try to parse and return something sensible here, even if #the data was unparsable. try: return json.loads(text) except ValueError: return None def process_arguments(): description = """ Plays a single frequency through the default output, then records on the default input device. Analyzes the recorded signal to test for presence of the played frequency, if present it exits with success. """ parser = argparse.ArgumentParser(description=description) parser.add_argument("-t", "--time", dest='test_duration', action='store', default=30, type=int, help="""Maximum test duration, default %(default)s seconds. It may exit sooner if it determines it has enough data.""") parser.add_argument("-a", "--audio", action='store', default="/dev/null", type=str, help="File to save recorded audio in .wav format") parser.add_argument("-q", "--quiet", action='store_true', default=False, help="Be quiet, no output unless there's an error.") parser.add_argument("-d", "--debug", action='store_true', default=False, help="Debugging output") parser.add_argument("-f", "--frequency", action='store', default=DEFAULT_TEST_FREQUENCY, type=int, help="Frequency for test signal, default %(default)s Hz") parser.add_argument("-u", "--spectrum", action='store', type=str, help="""File to save spectrum information for plotting (one frequency/magnitude pair per line)""") return parser.parse_args() # def main(): #Get arguments. args = process_arguments() #Setup logging level = logging.INFO if args.debug: level = logging.DEBUG if args.quiet: level = logging.ERROR logging.basicConfig(level=level) try: #Launches recording pipeline. I need to hook up into the gst #messages. recorder = Recorder(output_file=args.audio, logger=logging) #Just launches the playing pipeline player = Player(frequency=args.frequency, logger=logging) except GObject.GError as excp: logging.critical("Unable to initialize GStreamer pipelines: %s", excp) sys.exit(127) #This just receives a process feedback and tells me how much to change to #achieve the setpoint pidctrl = PIDController(Kp=0.7, Ki=.01, Kd=0.01, setpoint=REC_LEVEL_RANGE[0]) pidctrl.set_change_limit(5) #This gathers spectrum data. analyzer = SpectrumAnalyzer(points=BINS, sampling_frequency=SAMPLING_FREQUENCY) #Volume controllers actually set volumes for their device types. #we should at least issue a warning recorder.volumecontroller = PAVolumeController(type='input', logger=logging) if not recorder.volumecontroller.get_identifier(): logging.warning("Unable to get input volume control identifier. " "Test results will probably be invalid") recorder.volumecontroller.set_volume(0) recorder.volumecontroller.mute(False) player.volumecontroller = PAVolumeController(type='output', logger=logging) if not player.volumecontroller.get_identifier(): logging.warning("Unable to get output volume control identifier. " "Test results will probably be invalid") player.volumecontroller.set_volume(PLAY_VOLUME) player.volumecontroller.mute(False) #This handles the messages from gstreamer and orchestrates #the passed volume controllers, pid controller and spectrum analyzer #accordingly. gmh = GStreamerMessageHandler(rec_level_range=REC_LEVEL_RANGE, logger=logging, volumecontroller=recorder.volumecontroller, pidcontroller=pidctrl, spectrum_analyzer=analyzer) #I need to tell the recorder which method will handle messages. recorder.register_message_handler(gmh.bus_message_handler) #Create the loop and add a few triggers # GObject.threads_init() #Not needed? loop = GLib.MainLoop() GLib.timeout_add_seconds(0, player.start) GLib.timeout_add_seconds(0, recorder.start) GLib.timeout_add_seconds(args.test_duration, loop.quit) # Tell the gmh which method to call when enough samples are collected gmh.set_quit_method(loop.quit) loop.run() #When the loop ends, set things back to reasonable states player.stop() recorder.stop() player.volumecontroller.set_volume(50) recorder.volumecontroller.set_volume(10) #See if data gathering was successful. test_band = analyzer.frequency_band_for(args.frequency) candidate_bands = analyzer.frequencies_with_peak_magnitude(MAGNITUDE_THRESHOLD) for band in candidate_bands: logging.debug("Band (%.2f,%.2f) contains a magnitude peak" % analyzer.frequencies_for_band(band)) if test_band in candidate_bands: freqs_for_band = analyzer.frequencies_for_band(test_band) logging.info("PASS: Test frequency of %s in band (%.2f, %.2f) " "which contains a magnitude peak" % ((args.frequency,) + freqs_for_band)) return_value = 0 else: logging.info("FAIL: Test frequency of %s is not in one of the " "bands with magnitude peaks" % args.frequency) return_value = 1 #Is the microphone broken? if len(set(analyzer.spectrum)) <= 1: logging.info("WARNING: Microphone seems broken, didn't even " "record ambient noise") if args.spectrum: logging.info("Saving spectrum data for plotting as %s" % args.spectrum) if not FileDumper().write_to_file(args.spectrum, ["%s,%s" % t for t in zip(analyzer.frequencies, analyzer.spectrum)]): logging.error("Couldn't save spectrum data for plotting", file=sys.stderr) return return_value if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/filter_templates0000775000175000017500000000666412646152433024151 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import re import sys import posixpath from optparse import OptionParser from checkbox_support.lib.path import path_expand_recursive from checkbox_support.lib.template import Template class FilterError(Exception): pass def compile_filters(filters): patterns = {} for filter in filters: if "=" not in filter: raise FilterError("Missing assignment in filter: %s" % filter) name, value = filter.split("=", 1) try: pattern = re.compile(r"^%s$" % value) except re.error: raise FilterError("Invalid regular expression in filter: %s" % value) patterns.setdefault(name, []) patterns[name].append(pattern) return patterns def match_patterns(patterns_table, element): matches = [] for key, patterns in patterns_table.items(): if key not in element: matches.append(False) else: value = element[key] for pattern in patterns: matches.append(True if pattern.match(value) else False) return matches def match_elements(elements, attributes=[], whitelist=[], blacklist=[]): whitelist_patterns = compile_filters(whitelist) blacklist_patterns = compile_filters(blacklist) # Apply attributes for element in elements: for attribute in attributes: name, value = attribute.split("=", 1) element[name] = value # Apply whitelist and blacklist matches = [] for element in elements: if whitelist_patterns \ and True not in match_patterns(whitelist_patterns, element): continue if blacklist_patterns \ and True in match_patterns(blacklist_patterns, element): continue matches.append(element) return matches def parse_file(file, *args, **kwargs): template = Template() matches = match_elements(template.load_file(file), *args, **kwargs) template.dump_file(matches, sys.stdout) def parse_path(path, *args, **kwargs): for filename in path_expand_recursive(path): print("# %s" % filename) name = posixpath.basename(filename) if name.startswith(".") or name.endswith("~"): continue file = open(filename, "r") parse_file(file, *args, **kwargs) def parse_paths(paths, *args, **kwargs): for path in paths: parse_path(path, *args, **kwargs) def main(args): usage = "Usage: %prog [OPTIONS] [FILE...]" parser = OptionParser(usage=usage) parser.add_option("-a", "--attribute", action="append", type="string", default=[], help="Set additional attributes by name and value.") parser.add_option("-b", "--blacklist", action="append", type="string", default=[], help="Blacklist of elements by name and value.") parser.add_option("-w", "--whitelist", action="append", type="string", default=[], help="Whitelist of elements by name and value.") (options, args) = parser.parse_args(args) if args: parse_func = parse_paths else: parse_func = parse_file args = sys.stdin try: parse_func(args, options.attribute, options.whitelist, options.blacklist) except FilterError as error: parser.error(error.args[0]) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/sources_test0000775000175000017500000000123712646152433023317 0ustar sylvainsylvain00000000000000#!/bin/bash result=0 sources_list=$1 repositories=$2 if [ -z "$sources_list" ]; then echo "Must provide sources list location, e.g. /etc/apt/sources.list" exit 1 fi if [ -z "$repositories" ]; then echo "Must provide list of repositories to check for, e.g. 'deb http://gb.archive.ubuntu.com/ubuntu/ precise multiverse, deb http://gb.archive.ubuntu.com/ubuntu/ precise-updates multiverse'" exit 1 fi IFS=$',' for repository in $repositories; do if grep -q "$repository" "$sources_list"; then echo "$repository found in $sources_list" else echo "$repository not found in $sources_list" result=1 fi done exit $result plainbox-provider-checkbox-0.25/bin/wifi_time2reconnect0000775000175000017500000000325012646152433024531 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import re import sys import time import subprocess from datetime import datetime try: from subprocess import DEVNULL # >= python3.3 except ImportError: import os DEVNULL = open(os.devnull, 'wb') IFACE = None TIMEOUT = 30 def main(): """ Check the time needed to reconnect an active WIFI connection """ devices = subprocess.getoutput('nmcli dev') match = re.search('(\w+)\s+(802-11-wireless|wifi)\s+connected', devices) if match: IFACE = match.group(1) else: print("No active wifi connection detected", file=sys.stderr) return 1 try: dev_status = subprocess.check_output( ['nmcli', '-t', '-f', 'devices,uuid', 'con', 'status'], stderr=DEVNULL, universal_newlines=True) except subprocess.CalledProcessError: dev_status = subprocess.check_output( ['nmcli', '-t', '-f', 'device,uuid', 'con', 'show'], stderr=DEVNULL, universal_newlines=True) match = re.search(IFACE+':(.*)', dev_status) uuid = None if match: uuid = match.group(1) else: return 1 subprocess.call( 'nmcli dev disconnect iface %s' %IFACE, stdout=open(os.devnull, 'w'), stderr=subprocess.STDOUT, shell=True) time.sleep(2) start = datetime.now() subprocess.call( 'nmcli con up uuid %s --timeout %s' %(uuid, TIMEOUT), stdout=open(os.devnull, 'w'), stderr=subprocess.STDOUT, shell=True) delta = datetime.now() - start print('%.2f Seconds' %delta.total_seconds()) return 0 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/network_info0000775000175000017500000000341612646152433023302 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import sys import subprocess import socket import fcntl import struct SYS_PATH = '/sys/class/net' def _read_file(file): source = open(file, 'r') content = source.read() source.close() return content def get_connected(interface): STATUS = ('No', 'Yes') carrier_file = os.path.join(SYS_PATH, interface, 'carrier') carrier = 0 try: carrier = int(_read_file(carrier_file)) except IOError: pass return STATUS[carrier] def get_ip_address(interface): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', interface[:15].encode()) )[20:24]) def get_ipv6_address(interface): cmd = ['/sbin/ip', '-6', 'addr', 'show', 'dev', interface] proc = subprocess.check_output(cmd, universal_newlines=True) ipaddr = proc.split()[8].strip() return ipaddr def get_mac_address(interface): address_file = os.path.join(SYS_PATH, interface, 'address') address = '' try: address = _read_file(address_file) except IOError: pass return address def main(args): for interface in args: connected = get_connected(interface) print("Interface: %s" % interface) print("Connected: %s" % connected) try: print("IPv4: %s" % get_ip_address(interface)) except IOError: print("IPv4: n/a") try: print("IPv6: %s" % get_ipv6_address(interface)) except IOError: print("IPv6: n/a") except: print("IPv6: n/a") print("MAC: %s\n" % get_mac_address(interface)) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/network_device_info0000775000175000017500000002126312646152433024621 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # # Parts of this are based on the example python code that ships with # NetworkManager # http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/python # # Copyright (C) 2012 Canonical, Ltd. from subprocess import check_output, CalledProcessError, STDOUT import sys import dbus from checkbox_support.parsers.modinfo import ModinfoParser from checkbox_support.parsers.udevadm import UdevadmParser # This example lists basic information about network interfaces known to NM devtypes = {1: "Ethernet", 2: "WiFi", 5: "Bluetooth", 6: "OLPC", 7: "WiMAX", 8: "Modem"} states = {0: "Unknown", 10: "Unmanaged", 20: "Unavailable", 30: "Disconnected", 40: "Prepare", 50: "Config", 60: "Need Auth", 70: "IP Config", 80: "IP Check", 90: "Secondaries", 100: "Activated", 110: "Deactivating", 120: "Failed"} attributes = ("category", "interface", "product", "vendor", "driver", "path") udev_devices = [] nm_devices = [] class UdevResult: def addDevice(self, device): if device.interface: udev_devices.append(device) class NetworkingDevice(): def __init__(self, devtype, props, dev_proxy, bus): self._devtype = devtype try: self._interface = props['Interface'] except KeyError: self._interface = "Unknown" try: self._ip = self._int_to_ip(props['Ip4Address']) except KeyError: self._ip = "Unknown" try: self._driver = props['Driver'] except KeyError: self._driver = "Unknown" self._driver_ver = "Unknown" if self._driver != "Unknown": self._modinfo = self._modinfo_parser(props['Driver']) if self._modinfo: self._driver_ver = self._find_driver_ver() else: self._driver_ver = "Unknown" try: self._firmware_missing = props['FirmwareMissing'] except KeyError: self._firmware_missing = False try: self._state = states[props['State']] except KeyError: self._state = "Unknown" def __str__(self): ret = "Category: %s\n" % self._devtype ret += "Interface: %s\n" % self._interface ret += "IP: %s\n" % self._ip ret += "Driver: %s (ver: %s)\n" % (self._driver, self._driver_ver) if self._firmware_missing: ret += "Warning: Required Firmware Missing for device\n" ret += "State: %s\n" % self._state return ret def getstate(self): return self._state def gettype(self): return self._devtype def _bitrate_to_mbps(self, bitrate): try: intbr = int(bitrate) return str(intbr / 1000) except Exception: return "NaN" def _modinfo_parser(self, driver): cmd = ['/sbin/modinfo', driver] try: stream = check_output(cmd, stderr=STDOUT, universal_newlines=True) except CalledProcessError as err: print("Error running %s:" % ' '.join(cmd), file=sys.stderr) print(err.output, file=sys.stderr) return None if not stream: print("Error: modinfo returned nothing", file=sys.stderr) return None else: parser = ModinfoParser(stream) modinfo = parser.get_all() return modinfo def _find_driver_ver(self): # try the version field first, then vermagic second, some audio # drivers don't report version if the driver is in-tree if self._modinfo['version'] and self._modinfo['version'] != 'in-tree:': return self._modinfo['version'] else: # vermagic will look like this (below) and we only care about the # first part: # "3.2.0-29-generic SMP mod_unload modversions" return self._modinfo['vermagic'].split()[0] def _int_to_ip(self, int_ip): ip = [0, 0, 0, 0] ip[0] = int_ip & 0xff ip[1] = (int_ip >> 8) & 0xff ip[2] = (int_ip >> 16) & 0xff ip[3] = (int_ip >> 24) & 0xff return "%d.%d.%d.%d" % (ip[0], ip[1], ip[2], ip[3]) def get_nm_devices(): devices = [] bus = dbus.SystemBus() # Get a proxy for the base NetworkManager object proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager") manager = dbus.Interface(proxy, "org.freedesktop.NetworkManager") # Get all devices known to NM and print their properties nm_devices = manager.GetDevices() for d in nm_devices: dev_proxy = bus.get_object("org.freedesktop.NetworkManager", d) prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties") props = prop_iface.GetAll("org.freedesktop.NetworkManager.Device") try: devtype = devtypes[props['DeviceType']] except KeyError: devtype = "Unknown" # only return WiFi, Ethernet and Modem devices if devtype in ("WiFi", "Ethernet", "Modem"): devices.append(NetworkingDevice(devtype, props, dev_proxy, bus)) return devices def match_counts(nm_devices, udev_devices, devtype): """ Ensures that the count of devices matching devtype is the same for the two passed in lists, devices from Network Manager and devices from lspci. """ # now check that the count (by type) matches nm_type_devices = [dev for dev in nm_devices if dev.gettype() in devtype] udevtype = 'WIRELESS' if devtype == 'WiFi' else 'NETWORK' udev_type_devices = [ udev for udev in udev_devices if udev.category == udevtype] if len(nm_type_devices) != len(udev_type_devices): print("ERROR: devices missing - udev showed %d %s devices, but " "NetworkManager saw %d devices in %s" % (len(udev_type_devices), udevtype, len(nm_type_devices), devtype), file=sys.stderr) return False else: return True def main(args): try: output = check_output(['udevadm', 'info', '--export-db']) except CalledProcessError as err: raise SystemExit(err) try: output = output.decode("UTF-8", errors='ignore') except UnicodeDecodeError as err: raise SystemExit("udevadm output is not valid UTF-8") udev = UdevadmParser(output) result = UdevResult() udev.run(result) if udev_devices: print("[ Devices found by udev ]".center(80, '-')) for device in udev_devices: for attribute in attributes: value = getattr(device, attribute) if value is not None: if attribute == 'driver': props = {} props['Driver'] = value network_dev = NetworkingDevice(None, props, None, None) print("%s: %s (ver: %s)" % (attribute.capitalize(), value, network_dev._driver_ver)) else: print("%s: %s" % (attribute.capitalize(), value)) print() try: nm_devices = get_nm_devices() except dbus.exceptions.DBusException as e: # server's don't have network manager installed print("Warning: Exception while talking to Network Manager over dbus." " Skipping the remainder of this test. If this is a server, this" " is expected.", file=sys.stderr) print("The Error Generated was:\n %s" % e, file=sys.stderr) return 0 print("[ Devices found by Network Manager ]".center(80, '-')) for nm_dev in nm_devices: print(nm_dev) if not match_counts(nm_devices, udev_devices, "WiFi"): return 1 elif not match_counts(nm_devices, udev_devices, ("Ethernet", "Modem")): return 1 else: return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) plainbox-provider-checkbox-0.25/bin/led_hdd_test0000775000175000017500000000056312646152433023220 0ustar sylvainsylvain00000000000000#!/bin/bash TIMEOUT=3 TEMPFILE=`mktemp` trap "rm $TEMPFILE" EXIT for i in $(seq $TIMEOUT); do #launch background writer dd if=/dev/urandom of=$TEMPFILE bs=1024 oflag=direct & WRITE_PID=$! echo "Writing..." sleep 1 kill $WRITE_PID sync echo "Reading..." dd if=$TEMPFILE of=/dev/null bs=1024 iflag=direct done echo "OK, now exiting" plainbox-provider-checkbox-0.25/bin/lock_screen_watcher0000775000175000017500000000774612646152433024614 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import argparse import sys import subprocess import lsb_release from gi.repository import GObject from checkbox_support.dbus import connect_to_system_bus import threading import time GObject.threads_init() class SceenSaverStatusHelper(threading.Thread): def __init__(self, loop): super(SceenSaverStatusHelper, self).__init__() self._loop = loop self.quit = False def query(self): if (lsb_release.get_distro_information()["ID"] == "Ubuntu"): if (lsb_release.get_distro_information()["CODENAME"] == "trusty"): # trusty uses login screen as screen saver process_ps = subprocess.Popen(["ps", "aux"], stdout=subprocess.PIPE) process_grep = subprocess.Popen(["grep", "/usr/lib/unity/unity-panel-service --lockscreen-mode"], stdin=process_ps.stdout, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) process_ps.stdout.close() stdout = process_grep.communicate()[0] if (len(stdout.decode().split("\n")) == 3): print("the screensaver is active") self._loop.quit() p = subprocess.Popen(["gnome-screensaver-command", "-q"], stdout=subprocess.PIPE) stdout, stderr = p.communicate() # parse the stdout string from the command "gnome-screensaver-command -q" # the result should be "active" or "inactive" if "active" == stdout.decode().split(" ")[-1].rstrip() : print("the screensaver is active") self._loop.quit() def run(self): while not self.quit: GObject.idle_add(self.query) time.sleep(1) class HotkeyFunctionListener: def __init__(self, system_bus, loop): self._bus = system_bus self._loop = loop # Assume the test passes, this is changed when timeout expires self._error = False def _on_timeout_expired(self): """ Internal function called when the timer expires. Basically it's just here to tell the user the test failed or that the user was unable to pressed the hot key during the allowed time. """ print("You have failed to perform the required manipulation in time") # Fail the test when the timeout was reached self._error = True # Stop the loop now self._loop.quit() def check(self, timeout): """ Run the configured test and return the result The result is False if the test has failed. The timeout, when non-zero, will make the test fail after the specified seconds have elapsed without conclusive result. """ # Setup a timeout if requested if timeout > 0: GObject.timeout_add_seconds(timeout, self._on_timeout_expired) # helper to listen the functionality is triggered or not query_thread = SceenSaverStatusHelper(self._loop) query_thread.start() self._loop.run() query_thread.quit = True # Return the outcome of the test return self._error def main(): description = "Wait for the specified hotkey to be pressed." parser = argparse.ArgumentParser(description=description) parser.add_argument('--timeout', type=int, default=30) args = parser.parse_args() # Connect to the system bus, we also get the event # loop as we need it to start listening for signals. system_bus, loop = connect_to_system_bus() listener = HotkeyFunctionListener(system_bus, loop) # Run the actual listener and wait till it either times out or discovers # the specific hot key pressed. try: return listener.check(args.timeout) except KeyboardInterrupt: return 1 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/gputest_benchmark0000775000175000017500000000150312646152433024276 0ustar sylvainsylvain00000000000000#!/usr/bin/python3 # This file is part of Checkbox. # # Copyright 2013 Canonical Ltd. # Written by: # Sylvain Pineau # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . import sys from checkbox_support.scripts.gputest_benchmark import main if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/network_bandwidth_test0000775000175000017500000005101612646152433025351 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import os import re import sys import random import logging import subprocess from datetime import datetime, timedelta from time import sleep from logging import StreamHandler, FileHandler, Formatter from optparse import OptionParser from checkbox_support.lib.conversion import string_to_type class CommandException(Exception): pass class CommandOutput(object): def __init__(self, **attributes): self._attributes = attributes def __getattr__(self, name): if name in self._attributes: return self._attributes.get(name) return None class Command(object): # Name of the command to run name = None # Number of command line arguments argument_count = 0 # Option processing option_strings = {} option_defaults = {} # Ouput processing output_factory = CommandOutput output_patterns = {} # Convenient output patterns non_space = r"[^ ]+" def __init__(self, *arguments, **options): if len(arguments) != self.argument_count: raise TypeError("Invalid number of arguments: %d" % len(arguments)) self._arguments = arguments self._options = self.option_defaults.copy() for name, string in options.items(): if name not in self.option_strings: raise TypeError("Unknown option: %s" % name) self._options[name] = string def get_command(self): command = [self.name] for name, string in self._options.items(): # Match option from string if isinstance(string, bool): option = self.option_strings[name] else: option = self.option_strings[name] % string command.append(option) command.extend(self._arguments) return " ".join(command) def parse_lines(self, lines): attributes = {} for line in lines: # Match patterns from lines for name, pattern in self.output_patterns.items(): match = re.search(pattern, line) if match: attributes[name] = string_to_type(match.group(1)) return self.output_factory(**attributes) def parse_output(self, output): lines = output.split("\n") # Strip leading and trailing spaces lines = [l.strip() for l in lines] # Skip blank lines lines = [l for l in lines if l] return self.parse_lines(lines) def run(self): command = self.get_command() logging.debug("Running command: %s" % command) process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) error = process.stderr.read() if error: raise CommandException(error.decode("utf-8")) output = process.stdout.read() return self.parse_output(output.decode("utf-8")) class NetworkConfigOutput(CommandOutput): @property def speed(self): if self.name == "lo": return 10000 try: wireless = WirelessConfig(self.name).run() speed = wireless.bit_rate except CommandException: wired = WiredConfig(self.name).run() speed = wired.speed return speed / 1024 / 1024 class NetworkConfig(Command): name = "ifconfig" argument_count = 1 ipv4 = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" ipv6 = r"[\w:]+/\d+" mac_address = r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w" output_factory = NetworkConfigOutput output_patterns = { "name": r"(%s).*Link encap" % Command.non_space, "broadcast": r"Bcast:(%s)" % ipv4, "collisions": "collisions:(\d+)", "hwaddr": r"HWaddr (%s)" % mac_address, "inet_addr": r"inet addr:(%s)" % ipv4, "link_encap": r"Link encap:(%s)" % Command.non_space, "netmask": r"Mask:(%s)" % ipv4, "metric": r"Metric:(\d+)", "mtu": r"MTU:(\d+)", "rx_bytes": "RX bytes:(\d+)", "rx_dropped": "RX packets:.* dropped:(\d+)", "rx_errors": "RX packets:.* errors:(\d+)", "rx_frame": "RX packets:.* frame:(\d+)", "rx_overruns": "RX packets:.* overruns:(\d+)", "rx_packets": "RX packets:(\d+)", "tx_bytes": "TX bytes:(\d+)", "tx_carrier": "TX packets:.* carrier:(\d+)", "tx_dropped": "TX packets:.* dropped:(\d+)", "tx_errors": "TX packets:.* errors:(\d+)", "tx_overruns": "TX packets:.* overruns:(\d+)", "tx_packets": "TX packets:(\d+)", "txqueuelen": "txqueuelen:(\d+)"} class NetworkConfigs(Command): name = "ifconfig -a" def parse_output(self, output): outputs = [] for paragraph in output.split("\n\n"): if not paragraph: continue lines = paragraph.split("\n") name = re.split(r"\s+", lines[0])[0] config = NetworkConfig(name).parse_lines(lines) outputs.append(config) return outputs class WiredConfig(Command): name = "ethtool" argument_count = 1 output_patterns = { "advertised_auto_negotiation": r"Advertised auto-negotiation:\s+(.*)", "advertised_link_modes": r"Advertised link modes:\s+(.*)", "auto_negotiation": r"Auto-negotiation:\s+(.*)", "current_message_level": r"Current message level:\s+(.*)", "duplex": r"Duplex:\s+(.*)", "link_detected": r"Link detected:\s+(.*)", "phyad": r"PHYAD:\s+(.*)", "port": r"Port:\s+(.*)", "speed": r"Speed:\s+(.*)/s", "supported_auto_negotiation": r"Supports auto-negotiation:\s+(.*)", "supported_link_modes": r"Supported link modes:\s+(.*)", "supported_ports": r"Supported ports:\s+(.*)", "supports_wake_on": r"Supports Wake-on:\s+(.*)", "transceiver": r"Transceiver:\s+(.*)", "wake_on": r"Wake-on:\s+(.*)"} def parse_lines(self, lines): new_lines = [] # Skip header line for line in lines[1:]: if not re.search(r": ", line): new_lines[-1] += " " + line else: new_lines.append(line) return super(WiredConfig, self).parse_lines(new_lines) class WirelessConfig(Command): name = "iwconfig" argument_count = 1 fraction = r"\d+(/\d+)?" numeric = r"[\d\.]+" numeric_with_unit = r"%s( %s)?" % (numeric, Command.non_space) output_patterns = { "access_point": r"Access Point: (.*)", "bit_rate": r"Bit Rate[=:](%s)/s" % numeric_with_unit, "channel": r"Channel=(%s)" % Command.non_space, "essid": r"ESSID:\"?([^\"]+)\"?", "fragment_thr": r"Fragment thr:(\w+)", "frequency": r"Frequency:(%s)" % numeric_with_unit, "invalid_misc": r"Invalid misc:(\d+)", "link_quality": r"Link Quality[=:](%s)" % fraction, "missed_beacon": r"Missed beacon:(\d+)", "mode": r"Mode:(%s)" % Command.non_space, "noise_level": r"Noise level[=:](%s)" % numeric_with_unit, "power_management": r"Power Management:(.*)", "retry_limit": r"Retry limit:(\w+)", "rts_thr": r"RTS thr:(\w+)", "rx_invalid_crypt": r"Rx invalid crypt:(\d+)", "rx_invalid_frag": r"Rx invalid frag:(\d+)", "rx_invalid_nwid": r"Rx invalid nwid:(\d+)", "sensitivity": r"Sensitivity=(%s)" % fraction, "signal_level": r"Signal level[=:](%s)" % numeric_with_unit, "tx_excessive_retries": r"Tx excessive retries:(\d+)", "tx_power": r"Tx-Power=(%s)" % numeric_with_unit} class Ping(Command): name = "ping" argument_count = 1 option_strings = { "count": "-c %d", "flood": "-f", "interface": "-I %s", "quiet": "-q", "size": "-s %d", "ttl": "-t %d"} option_defaults = { "count": 1, "quiet": True} ms = r"\d+\.\d+" rtt = (ms, ms, ms, ms) output_patterns = { "packet_loss": r"(\d+)% packet loss,", "packets_received": r"(\d+) received,", "packets_transmitted": r"(\d+) packets transmitted,", "rtt_avg": r"rtt min/avg/max/mdev = %s/(%s)/%s/%s ms" % rtt, "rtt_max": r"rtt min/avg/max/mdev = %s/%s/(%s)/%s ms" % rtt, "rtt_mdev": r"rtt min/avg/max/mdev = %s/%s/%s/(%s) ms" % rtt, "rtt_min": r"rtt min/avg/max/mdev = (%s)/%s/%s/%s ms" % rtt, "time": r"time (\d+)ms"} def parse_lines(self, lines): # Skip ping lines return super(Ping, self).parse_lines(lines[-2:]) class PingLarge(Ping): # Some wired environments can handle the maximum ping packet # size, (65507+28)=65535 bytes. With a count of 191 packets, 65535 # bytes/packet, 8 bits/byte, the sum payload is 100137480 bits ~ # 100Mb. This is preferred and will be tried first. packet_size = 65507 packet_count = 191 option_defaults = { "count": packet_count, "flood": True, "quiet": True, "size": packet_size, "ttl": 1} class PingSmall(PingLarge): # If the large packet test was too lossy, we fall back to a packet # equal to the default MTU size of 1500, (1472+28)=1500 bytes. # With a count of 8334 packets, 1500 bytes/packet, 8 bits/byte, the # sum payload is 100008000 bits ~ 100Mb. packet_size = 1472 packet_count = 8334 option_defaults = PingLarge.option_defaults.copy() option_defaults.update({ "count": packet_count, "size": packet_size}) class PingHost(Command): output_patterns = { "host": r"(?:Host|Nmap scan report for) (%s)" % NetworkConfig.ipv4, "mac_address": r"MAC Address: (%s)" % NetworkConfig.mac_address} class PingScan(Command): name = "nmap -n -sP" argument_count = 1 def parse_lines(self, lines): hosts = [] host_lines = [] # Skip header lines for line in lines[1:]: host_lines.append(line) if line.startswith("MAC Address"): host = PingHost().parse_lines(host_lines) hosts.append(host) host_lines = [] return hosts class Ip(object): def __init__(self, address): self.address = address self.binary = self._address_to_binary(address) def __str__(self): return self.address def _address_to_binary(self, address): binary = 0 for position, part in enumerate(address.split(".")): if position >= 4: raise ValueError("Address contains more than four parts.") try: if not part: part = 0 else: part = int(part) if not 0 <= part < 256: raise ValueError except ValueError: raise ValueError("Address part out of range.") binary <<= 8 binary += part return binary def count_1_bits(self): ret = 0 num = self.binary while num > 0: num = num >> 1 ret += 1 return ret def count_0_bits(self): num = int(self.binary) if num < 0: raise ValueError("Only positive Numbers please: %s" % (num)) ret = 0 while num > 0: if num & 1 == 1: break num = num >> 1 ret += 1 return ret class IpRange(object): def __init__(self, address, netmask): self.address = Ip(address) self.netmask = Ip(netmask) self.prefix = self._netmask_to_prefix(self.netmask) def __str__(self): return "%s/%s" % (self.address, self.prefix) def _check_netmask(self, masklen): num = int(self.netmask.binary) bits = masklen # remove zero bits at the end while (num & 1) == 0: num = num >> 1 bits -= 1 if bits == 0: break # now check if the rest consists only of ones while bits > 0: if (num & 1) == 0: raise ValueError("Netmask %s can't be expressed as an prefix." % (hex(self.netmask.binary))) num = num >> 1 bits -= 1 def _netmask_to_prefix(self, netmask): netlen = netmask.count_0_bits() masklen = netmask.count_1_bits() self._check_netmask(masklen) return masklen - netlen def contains(self, address): address = Ip(address) if self.address.binary & self.netmask.binary \ == address.binary & self.netmask.binary: return True return False def scan(self, max=None): scan = PingScan(str(self)).run() targets = [s.host for s in scan] random.shuffle(targets) if max is not None: targets = targets[:max] return targets class NetworkManagerException(Exception): pass class NetworkManager(object): NM_SERVICE = "org.freedesktop.NetworkManager" NM_PATH = "/org/freedesktop/NetworkManager" NM_INTERFACE = NM_SERVICE NM_PATH_DEVICES = "/org/freedesktop/NetworkManager/Devices" NM_INTERFACE_DEVICES = "org.freedesktop.NetworkManager.Devices" NMI_SERVICE = "org.freedesktop.NetworkManagerInfo" NMI_PATH = "/org/freedesktop/NetworkManagerInfo" NMI_INTERFACE = NMI_SERVICE HAL_SERVICE = "org.freedesktop.Hal" HAL_PATH = "/org/freedesktop/Hal/Manager" HAL_INTERFACE = "org.freedesktop.Hal.Manager" HAL_INTERFACE_DEVICE = "org.freedesktop.Hal.Device" #http://projects.gnome.org/NetworkManager/developers/ #NetworkManager D-Bus API Specifications, look for the #NM_STATE enumeration to see which statuses indicate connection #established and put them in this list. "3" works for NM 0.7 #and 0.8, while "60" and "70" work for NM 0.9. STATES_CONNECTED = [3, 60, 70] def __init__(self): try: import dbus except ImportError: raise NetworkManagerException("Python module not found: dbus") try: self._bus = dbus.SystemBus() self.nm_object = self._bus.get_object(self.NM_SERVICE, self.NM_PATH) self.nm_service = dbus.Interface(self.nm_object, self.NM_INTERFACE) except dbus.exceptions.DBusException: raise NetworkManagerException("Failed to connect to dbus service") def is_connected(self): state = self.nm_service.state() return state in self.STATES_CONNECTED class Application(object): def __init__(self, targets, interfaces, scan): self.targets = targets self.interfaces = interfaces self.scan = scan def test_interface(self, interface, targets): logging.info("Testing %s at %s-Mbps", interface.name, interface.speed) for target in targets: ping = PingLarge(target, interface=interface.name) result = ping.run() if result.packet_loss: ping = PingSmall(target, interface=interface.name) result = ping.run() if result.packet_loss: logging.warning("SKIP: Non-zero packet loss (%s%%) " "for [%s] [%s]->[%s]", result.packet_loss, interface.name, interface.inet_addr, target) continue mbps = (8 * (ping.packet_size + 28) * ping.packet_count / result.time / 1000) percent = (100 * 8 * (ping.packet_size + 28) * ping.packet_count / result.time / 1000 / interface.speed) if percent >= 10: logging.info("PASS: Effective rate: %3.4f Mbps, " "%3.2f%% of theoretical max (%5.2f Mbps)", mbps, percent, interface.speed) return True else: logging.warning("Unacceptable network effective rate found for [%s]" % interface.name) logging.warning("Effective rate %3.4f Mbps, %3.2f%% of theoretical max (%5.2f Mbps)" % (mbps, percent, interface.speed)) return False def run(self): logging.debug("Acquiring network Interfaces") if self.interfaces: interfaces = [NetworkConfig(i).run() for i in self.interfaces] else: interfaces = NetworkConfigs().run() interfaces = [i for i in interfaces if i.inet_addr] for interface in interfaces: if not interface.inet_addr: logging.debug("No network address for [%s]", interface.name) continue targets = [] ip_range = IpRange(interface.inet_addr, interface.netmask) if self.targets: for target in self.targets: if ip_range.contains(target): targets.append(target) elif interface.name != "lo": targets = ip_range.scan(self.scan) logging.info("The following targets were found for %s:" % interface.name) for target in targets: logging.info("\t%s" % target) if not targets: logging.debug("No targets found for [%s]", interface.name) continue if not self.test_interface(interface, targets): return False return True class ApplicationManager(object): application_factory = Application default_log_level = "critical" default_scan = 1 default_timeout = 60 def get_parser(self, args): usage = "Usage: %prog [TARGETS]" parser = OptionParser(usage=usage) parser.add_option("-i", "--interface", dest="interfaces", action="append", type="string", default=[], help="Interface to test.") parser.add_option("-s", "--scan", default=self.default_scan, type="int", help="Number of targets to scan when not provided.") parser.add_option("-t", "--timeout", default=self.default_timeout, type="int", help="Time to wait for network manager to connect.") parser.add_option("-l", "--log", metavar="FILE", help="The file to write the log to.") parser.add_option("--log-level", default=self.default_log_level, help=("One of debug, info, warning, " "error or critical.")) return parser def check_uid(self): return os.getuid() == 0 def check_network(self, timeout): try: nm = NetworkManager() except NetworkManagerException: return True start = datetime.now() while True: if nm.is_connected(): return True if datetime.now() - start > timedelta(seconds=timeout): return False sleep(5) def create_application(self, args=sys.argv[1:]): parser = self.get_parser(args) (options, args) = parser.parse_args(args) log_level = logging.getLevelName(options.log_level.upper()) log_handlers = [] if options.log: log_filename = options.log log_handlers.append(FileHandler(log_filename)) else: log_handlers.append(StreamHandler()) # Logging setup format = ("%(asctime)s %(levelname)-8s %(message)s") date_format = '%Y-%m-%d %H:%M:%S' if log_handlers: for handler in log_handlers: handler.setFormatter(Formatter(format, date_format)) logging.getLogger().addHandler(handler) if log_level: logging.getLogger().setLevel(log_level) elif not logging.getLogger().handlers: logging.disable(logging.CRITICAL) if not self.check_uid(): parser.error("Must be run as root.") if not self.check_network(options.timeout): parser.error("Network devices must be configured and connected to a LAN segment before testing") targets = args return self.application_factory(targets, options.interfaces, options.scan) def main(): application_manager = ApplicationManager() application = application_manager.create_application() if not application.run(): return 1 return 0 if __name__ == "__main__": sys.exit(main()) plainbox-provider-checkbox-0.25/bin/pm_test0000775000175000017500000010107412646152433022250 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 import logging import logging.handlers import os import pwd import re import shutil import subprocess import sys import signal from argparse import ArgumentParser, SUPPRESS from calendar import timegm from datetime import datetime, timedelta from gi.repository import Gtk, GObject from time import time, localtime def main(): """ Run power management operation as many times as needed """ args, extra_args = MyArgumentParser().parse() # Verify that script is run as root if os.getuid(): sys.stderr.write('This script needs superuser ' 'permissions to run correctly\n') sys.exit(1) #Obtain name of the invoking user. uid = os.getenv('SUDO_UID') or os.getenv('PKEXEC_UID') if not uid: sys.stderr.write('Unable to determine invoking user\n') sys.exit(1) username = pwd.getpwuid(int(uid)).pw_name LoggingConfiguration.set(args.log_level, args.log_filename, args.append) logging.debug('Invoking username: %s', username) logging.debug('Arguments: {0!r}'.format(args)) logging.debug('Extra Arguments: {0!r}'.format(extra_args)) try: operation = PowerManagementOperation(args, extra_args, user=username) operation.setup() operation.run() except (TestCancelled, TestFailed) as exception: if isinstance(exception, TestFailed): logging.error(exception.args[0]) message = exception.MESSAGE.format(args.pm_operation.capitalize()) if args.silent: logging.info(message) else: title = '{0} test'.format(args.pm_operation.capitalize()) MessageDialog(title, message, Gtk.MessageType.ERROR).run() operation.teardown() return exception.RETURN_CODE return 0 class PowerManagementOperation(object): SLEEP_TIME = 5 def __init__(self, args, extra_args, user=None): self.args = args self.extra_args = extra_args self.user = user def setup(self): """ Enable configuration file """ # Enable autologin and sudo on first cycle if self.args.total == self.args.repetitions: AutoLoginConfigurator(user=self.user).enable() SudoersConfigurator(user=self.user).enable() # Schedule this script to be automatically executed # on startup to continue testing autostart_file = AutoStartFile(self.args, user=self.user) autostart_file.write() def run(self): """ Run a power management iteration """ logging.info('{0} operations remaining: {1}' .format(self.args.pm_operation, self.args.repetitions)) if self.args.pm_timestamp: pm_timestamp = datetime.fromtimestamp(self.args.pm_timestamp) now = datetime.now() pm_time = now - pm_timestamp logging.info('{0} time: {1}' .format(self.args.pm_operation.capitalize(), pm_time)) if self.args.repetitions > 0: self.run_suspend_cycles(self.args.suspends_before_reboot, self.args.fwts) self.run_pm_command() else: self.summary() def run_pm_command(self): """ Run power managment command and check result if needed """ # Display information to user # and make it possible to cancel the test CountdownDialog(self.args.pm_operation, self.args.pm_delay, self.args.hardware_delay, self.args.total - self.args.repetitions, self.args.total).run() # A small sleep time is added to reboot and poweroff # so that script has time to return a value # (useful when running it as an automated test) command_str = ('sleep {0}; {1}' .format(self.SLEEP_TIME, self.args.pm_operation)) if self.extra_args: command_str += ' {0}'.format(' '.join(self.extra_args)) if self.args.pm_operation != 'reboot': WakeUpAlarm.set(seconds=self.args.wakeup) logging.info('Executing new {0!r} operation...' .format(self.args.pm_operation)) logging.debug('Executing: {0!r}...'.format(command_str)) # The PM operation is performed asynchronously so let's just wait # indefinitely until it happens and someone comes along to kill us. # This addresses LP: #1413134 subprocess.check_call(command_str, shell=True) signal.pause() def run_suspend_cycles(self, cycles_count, fwts): """Run suspend and resume cycles.""" if cycles_count < 1: return if fwts: script_name = 'fwts_test' command_tpl = '{} -s s3 --s3-sleep-delay=30 --s3-multiple={}' else: script_name = 'sleep_test' command_tpl = '{} -s mem -p -i {} -w 10' script_path = os.path.join( os.path.dirname(os.path.realpath(__file__)), script_name) command_str = command_tpl.format(script_path, cycles_count) logging.info('Running suspend/resume cycles') logging.debug('Executing: {0!r}...'.format(command_str)) # We call sleep_test script and log its output as it contains # average times we need to compute global average times later. logging.info(subprocess.check_output(command_str, universal_newlines=True, shell=True)) def summary(self): """ Gather hardware information for the last time, log execution time and exit """ # Just gather hardware information one more time and exit CountdownDialog(self.args.pm_operation, self.args.pm_delay, self.args.hardware_delay, self.args.total - self.args.repetitions, self.args.total).run() self.teardown() # Log some time information start = datetime.fromtimestamp(self.args.start) end = datetime.now() if self.args.pm_operation == 'reboot': sleep_time = timedelta(seconds=self.SLEEP_TIME) else: sleep_time = timedelta(seconds=self.args.wakeup) wait_time = timedelta(seconds=(self.args.pm_delay + (self.args.hardware_delay) * self.args.total)) average = (end - start - wait_time) / self.args.total - sleep_time time_message = ('Total elapsed time: {total}\n' 'Average recovery time: {average}' .format(total=end - start, average=average)) logging.info(time_message) message = ('{0} test complete' .format(self.args.pm_operation.capitalize())) if self.args.silent: logging.info(message) else: title = '{0} test'.format(self.args.pm_operation.capitalize()) MessageDialog(title, message).run() def teardown(self): """ Restore configuration """ # Don't execute this script again on next reboot autostart_file = AutoStartFile(self.args, user=self.user) autostart_file.remove() # Restore previous configuration SudoersConfigurator().disable() AutoLoginConfigurator().disable() class TestCancelled(Exception): RETURN_CODE = 1 MESSAGE = '{0} test cancelled by user' class TestFailed(Exception): RETURN_CODE = 2 MESSAGE = '{0} test failed' class WakeUpAlarm(object): ALARM_FILENAME = '/sys/class/rtc/rtc0/wakealarm' RTC_FILENAME = '/proc/driver/rtc' @classmethod def set(cls, minutes=0, seconds=0): """ Calculate wakeup time and write it to BIOS """ now = int(time()) timeout = minutes * 60 + seconds wakeup_time_utc = now + timeout wakeup_time_local = timegm(localtime()) + timeout subprocess.check_call('echo 0 > %s' % cls.ALARM_FILENAME, shell=True) subprocess.check_call('echo %d > %s' % (wakeup_time_utc, cls.ALARM_FILENAME), shell=True) with open(cls.ALARM_FILENAME) as alarm_file: wakeup_time_stored_str = alarm_file.read() if not re.match('\d+', wakeup_time_stored_str): subprocess.check_call('echo "+%d" > %s' % (timeout, cls.ALARM_FILENAME), shell=True) with open(cls.ALARM_FILENAME) as alarm_file2: wakeup_time_stored_str = alarm_file2.read() if not re.match('\d+', wakeup_time_stored_str): logging.error('Invalid wakeup time format: {0!r}' .format(wakeup_time_stored_str)) sys.exit(1) wakeup_time_stored = int(wakeup_time_stored_str) try: logging.debug('Wakeup timestamp: {0} ({1})' .format(wakeup_time_stored, datetime.fromtimestamp( wakeup_time_stored).strftime('%c'))) except ValueError as e: logging.error(e) sys.exit(1) if ((abs(wakeup_time_utc - wakeup_time_stored) > 1) and (abs(wakeup_time_local - wakeup_time_stored) > 1)): logging.error('Wakeup time not stored correctly') sys.exit(1) with open(cls.RTC_FILENAME) as rtc_file: separator_regex = re.compile('\s+:\s+') rtc_data = dict([separator_regex.split(line.rstrip()) for line in rtc_file]) logging.debug('RTC data:\n{0}' .format('\n'.join(['- {0}: {1}'.format(*pair) for pair in rtc_data.items()]))) # Verify wakeup time has been set properly # by looking into the alarm_IRQ and alrm_date field if rtc_data['alarm_IRQ'] != 'yes': logging.error('alarm_IRQ not set properly: {0}' .format(rtc_data['alarm_IRQ'])) sys.exit(1) if '*' in rtc_data['alrm_date']: logging.error('alrm_date not set properly: {0}' .format(rtc_data['alrm_date'])) sys.exit(1) class Command(object): """ Simple subprocess.Popen wrapper to run shell commands and log their output """ def __init__(self, command_str, verbose=True): self.command_str = command_str self.verbose = verbose self.process = None self.stdout = None self.stderr = None self.time = None def run(self): """ Execute shell command and return output and status """ logging.debug('Executing: {0!r}...'.format(self.command_str)) self.process = subprocess.Popen(self.command_str, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) start = datetime.now() result = self.process.communicate() end = datetime.now() self.time = end - start if self.verbose: stdout, stderr = result message = ['Output:\n' '- returncode:\n{0}'.format(self.process.returncode)] if stdout: if type(stdout) is bytes: stdout = stdout.decode('utf-8') message.append('- stdout:\n{0}'.format(stdout)) if stderr: if type(stderr) is bytes: stderr = stderr.decode('utf-8') message.append('- stderr:\n{0}'.format(stderr)) logging.debug('\n'.join(message)) self.stdout = stdout self.stderr = stderr return self class CountdownDialog(Gtk.Dialog): """ Dialog that shows the amount of progress in the reboot test and lets the user cancel it if needed """ def __init__(self, pm_operation, pm_delay, hardware_delay, iterations, iterations_count): self.pm_operation = pm_operation title = '{0} test'.format(pm_operation.capitalize()) buttons = (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,) super(CountdownDialog, self).__init__(title=title, buttons=buttons) self.set_default_response(Gtk.ResponseType.CANCEL) self.set_resizable(False) self.set_position(Gtk.WindowPosition.CENTER) progress_bar = Gtk.ProgressBar() progress_bar.set_fraction(iterations / float(iterations_count)) progress_bar.set_text('{0}/{1}' .format(iterations, iterations_count)) progress_bar.set_show_text(True) self.vbox.pack_start(progress_bar, True, True, 0) operation_event = {'template': ('Next {0} in {{time}} seconds...' .format(self.pm_operation)), 'timeout': pm_delay} hardware_info_event = \ {'template': 'Gathering hardware information in {time} seconds...', 'timeout': hardware_delay, 'callback': self.on_hardware_info_timeout_cb} if iterations == 0: # In first iteration, gather hardware information directly # and perform pm-operation self.on_hardware_info_timeout_cb() self.events = [operation_event] elif iterations < iterations_count: # In last iteration, wait before gathering hardware information # and perform pm-operation self.events = [operation_event, hardware_info_event] else: # In last iteration, wait before gathering hardware information # and finish the test self.events = [hardware_info_event] self.label = Gtk.Label() self.vbox.pack_start(self.label, True, True, 0) self.show_all() def run(self): """ Set label text and run dialog """ self.schedule_next_event() response = super(CountdownDialog, self).run() self.destroy() if response != Gtk.ResponseType.ACCEPT: raise TestCancelled() def schedule_next_event(self): """ Schedule next timed event """ if self.events: self.event = self.events.pop() self.timeout_counter = self.event.get('timeout', 0) self.label.set_text(self.event['template'] .format(time=self.timeout_counter)) GObject.timeout_add_seconds(1, self.on_timeout_cb) else: # Return Accept response # if there are no other events scheduled self.response(Gtk.ResponseType.ACCEPT) def on_timeout_cb(self): """ Set label properly and use callback method if needed """ if self.timeout_counter > 0: self.label.set_text(self.event['template'] .format(time=self.timeout_counter)) self.timeout_counter -= 1 return True # Call calback if defined callback = self.event.get('callback') if callback: callback() # Schedule next event if needed self.schedule_next_event() return False def on_hardware_info_timeout_cb(self): """ Gather hardware information and print it to logs """ logging.info('Gathering hardware information...') logging.debug('Networking:\n' '{network}\n' '{ethernet}\n' '{ifconfig}\n' '{iwconfig}' .format(network=(Command('lspci | grep Network') .run().stdout), ethernet=(Command('lspci | grep Ethernet') .run().stdout), ifconfig=(Command("ifconfig -a | grep -A1 '^\w'") .run().stdout), iwconfig=(Command("iwconfig | grep -A1 '^\w'") .run().stdout))) logging.debug('Bluetooth Device:\n' '{hciconfig}' .format(hciconfig=(Command("hciconfig -a " "| grep -A2 '^\w'") .run().stdout))) logging.debug('Video Card:\n' '{lspci}' .format(lspci=Command('lspci | grep VGA').run().stdout)) logging.debug('Touchpad and Keyboard:\n' '{xinput}' .format(xinput=Command( 'xinput list --name-only | sort').run().stdout)) logging.debug('Pulse Audio Sink:\n' '{pactl_sink}' .format(pactl_sink=(Command('pactl list | grep Sink') .run().stdout))) logging.debug('Pulse Audio Source:\n' '{pactl_source}' .format(pactl_source=(Command('pactl list | grep Source') .run().stdout))) # Check kernel logs using firmware test suite command = Command('fwts -r stdout klog oops').run() if command.process.returncode != 0: # Don't abort the test loop, # errors can be retrieved by pm_log_check logging.error('Problem found in logs by fwts') class MessageDialog(object): """ Simple wrapper aroung Gtk.MessageDialog """ def __init__(self, title, message, type=Gtk.MessageType.INFO): self.title = title self.message = message self.type = type def run(self): dialog = Gtk.MessageDialog(buttons=Gtk.ButtonsType.OK, message_format=self.message, type=self.type) logging.info(self.message) dialog.set_title(self.title) dialog.run() dialog.destroy() class AutoLoginConfigurator(object): """ Enable/disable autologin configuration to make sure that reboot test will work properly """ CONFIG_FILENAME = '/etc/lightdm/lightdm.conf' TEMPLATE = """ [SeatDefaults] greeter-session=unity-greeter user-session=ubuntu autologin-user={username} autologin-user-timeout=0 """ def __init__(self, user=None): self.user = user def enable(self): """ Make sure user will autologin in next reboot """ logging.debug('Enabling autologin for this user...') if os.path.exists(self.CONFIG_FILENAME): for backup_filename in self.generate_backup_filename(): if not os.path.exists(backup_filename): shutil.copyfile(self.CONFIG_FILENAME, backup_filename) shutil.copystat(self.CONFIG_FILENAME, backup_filename) break with open(self.CONFIG_FILENAME, 'w') as f: f.write(self.TEMPLATE.format(username=self.user)) def disable(self): """ Remove latest configuration file and use the same configuration that was in place before running the test """ logging.debug('Restoring autologin configuration...') backup_filename = None for filename in self.generate_backup_filename(): if not os.path.exists(filename): break backup_filename = filename if backup_filename: shutil.copy(backup_filename, self.CONFIG_FILENAME) os.remove(backup_filename) else: os.remove(self.CONFIG_FILENAME) def generate_backup_filename(self): backup_filename = self.CONFIG_FILENAME + '.bak' yield backup_filename index = 0 while True: index += 1 backup_filename = (self.CONFIG_FILENAME + '.bak.{0}'.format(index)) yield backup_filename class SudoersConfigurator(object): """ Enable/disable reboot test to be executed as root to make sure that reboot test works properly """ MARK = '# Automatically added by pm.py' SUDOERS = '/etc/sudoers' def __init__(self, user=None): self.user = user def enable(self): """ Make sure that user will be allowed to execute reboot test as root """ logging.debug('Enabling user to execute test as root...') command = ("sed -i -e '$a{mark}\\n" "{user} ALL=NOPASSWD: /usr/bin/python3' " "{filename}".format(mark=self.MARK, user=self.user, script=os.path.realpath(__file__), filename=self.SUDOERS)) Command(command, verbose=False).run() def disable(self): """ Revert sudoers configuration changes """ logging.debug('Restoring sudoers configuration...') command = (("sed -i -e '/{mark}/,+1d' " "{filename}") .format(mark=self.MARK, filename=self.SUDOERS)) Command(command, verbose=False).run() class AutoStartFile(object): """ Generate autostart file contents and write it to proper location """ TEMPLATE = """ [Desktop Entry] Name={pm_operation} test Comment=Verify {pm_operation} works properly Exec=sudo /usr/bin/python3 {script} -r {repetitions} -w {wakeup} --hardware-delay {hardware_delay} --pm-delay {pm_delay} --min-pm-time {min_pm_time} --max-pm-time {max_pm_time} --append --total {total} --start {start} --pm-timestamp {pm_timestamp} {silent} --log-level={log_level} --log-dir={log_dir} --suspends-before-reboot={suspend_cycles} {fwts} {pm_operation} Type=Application X-GNOME-Autostart-enabled=true Hidden=false """ def __init__(self, args, user=None): self.args = args self.user = user # Generate desktop filename # based on environment variables username = self.user default_config_directory = os.path.expanduser('~{0}/.config' .format(username)) config_directory = os.getenv('XDG_CONFIG_HOME', default_config_directory) autostart_directory = os.path.join(config_directory, 'autostart') if not os.path.exists(autostart_directory): os.makedirs(autostart_directory) user_id = os.getenv('PKEXEC_UID') or os.getenv('SUDO_UID') group_id = os.getenv('PKEXEC_UID') or os.getenv('SUDO_GID') if user_id: os.chown(config_directory, int(user_id), int(group_id)) os.chown(autostart_directory, int(user_id), int(group_id)) basename = '{0}.desktop'.format(os.path.basename(__file__)) self.desktop_filename = os.path.join(autostart_directory, basename) def write(self): """ Write autostart file to execute the script on startup """ logging.debug('Writing desktop file ({0!r})...' .format(self.desktop_filename)) contents = (self.TEMPLATE .format(script=os.path.realpath(__file__), repetitions=self.args.repetitions - 1, wakeup=self.args.wakeup, hardware_delay=self.args.hardware_delay, pm_delay=self.args.pm_delay, min_pm_time=self.args.min_pm_time, max_pm_time=self.args.max_pm_time, total=self.args.total, start=self.args.start, pm_timestamp=int(time()), silent='--silent' if self.args.silent else '', log_level=self.args.log_level_str, log_dir=self.args.log_dir, fwts='--fwts' if self.args.fwts else '', suspend_cycles=self.args.suspends_before_reboot, pm_operation=self.args.pm_operation)) logging.debug(contents) with open(self.desktop_filename, 'w') as f: f.write(contents) def remove(self): """ Remove autostart file to avoid executing the script on startup """ if os.path.exists(self.desktop_filename): logging.debug('Removing desktop file ({0!r})...' .format(self.desktop_filename)) os.remove(self.desktop_filename) class LoggingConfiguration(object): @classmethod def set(cls, log_level, log_filename, append): """ Configure a rotating file logger """ logger = logging.getLogger() logger.setLevel(logging.DEBUG) # Log to sys.stderr using log level passed through command line if log_level != logging.NOTSET: log_handler = logging.StreamHandler() formatter = logging.Formatter('%(levelname)-8s %(message)s') log_handler.setFormatter(formatter) log_handler.setLevel(log_level) logger.addHandler(log_handler) # Log to rotating file using DEBUG log level log_handler = logging.handlers.RotatingFileHandler(log_filename, mode='a+', backupCount=3) formatter = logging.Formatter('%(asctime)s %(levelname)-8s ' '%(message)s') log_handler.setFormatter(formatter) log_handler.setLevel(logging.DEBUG) logger.addHandler(log_handler) if not append: # Create a new log file on every new # (i.e. not scheduled) invocation log_handler.doRollover() class MyArgumentParser(object): """ Command-line argument parser """ def __init__(self): """ Create parser object """ pm_operations = ('poweroff', 'reboot') description = 'Run power management operation as many times as needed' epilog = ('Unknown arguments will be passed ' 'to the underlying command: poweroff or reboot.') parser = ArgumentParser(description=description, epilog=epilog) parser.add_argument('-r', '--repetitions', type=int, default=1, help=('Number of times that the power management ' 'operation has to be repeated ' '(%(default)s by default)')) parser.add_argument('-w', '--wakeup', type=int, default=60, help=('Timeout in seconds for the wakeup alarm ' '(%(default)s by default). ' "Note: wakeup alarm won't be scheduled " 'for reboot.')) parser.add_argument('--min-pm-time', dest='min_pm_time', type=int, default=0, help=('Minimum time in seconds that ' 'it should take the power management ' 'operation each cycle (0 for reboot and ' 'wakeup time minus two seconds ' 'for the other power management operations ' 'by default)')) parser.add_argument('--max-pm-time', dest='max_pm_time', type=int, default=300, help=('Maximum time in seconds ' 'that it should take ' 'the power management operation each cycle ' '(%(default)s by default)')) parser.add_argument('--pm-delay', dest='pm_delay', type=int, default=5, help=('Delay in seconds ' 'after hardware information ' 'has been gathered and before executing ' 'the power management operation ' '(%(default)s by default)')) parser.add_argument('--hardware-delay', dest='hardware_delay', type=int, default=30, help=('Delay in seconds before gathering hardware ' 'information (%(default)s by default)')) parser.add_argument('--silent', action='store_true', help=("Don't display any dialog " 'when test is complete ' 'to let the script be used ' 'in automated tests')) log_levels = ['notset', 'debug', 'info', 'warning', 'error', 'critical'] parser.add_argument('--log-level', dest='log_level_str', default='info', choices=log_levels, help=('Log level. ' 'One of {0} or {1} (%(default)s by default)' .format(', '.join(log_levels[:-1]), log_levels[-1]))) parser.add_argument('--log-dir', dest='log_dir', default='/var/log', help=('Path to the directory to store log files')) parser.add_argument('pm_operation', choices=pm_operations, help=('Power management operation to be performed ' '(one of {0} or {1!r})' .format(', '.join(map(repr, pm_operations[:-1])), pm_operations[-1]))) # Test timestamps parser.add_argument('--start', type=int, default=0, help=SUPPRESS) parser.add_argument('--pm-timestamp', dest='pm_timestamp', type=int, default=0, help=SUPPRESS) # Append to log on subsequent startups parser.add_argument('--append', action='store_true', default=False, help=SUPPRESS) # Total number of iterations initially passed through the command line parser.add_argument('--total', type=int, default=0, help=SUPPRESS) # suspend cycles before reboot parser.add_argument('--suspends-before-reboot', type=int, default=0, help=('How many cycles of suspend/resume to run' 'before each reboot or poweroff')) # use fwts for suspend tests parser.add_argument('--fwts', action='store_true', help=('Use fwts ' 'when doing the suspend tests')) self.parser = parser def parse(self): """ Parse command-line arguments """ args, extra_args = self.parser.parse_known_args() args.log_level = getattr(logging, args.log_level_str.upper()) # Total number of repetitions # is the number of repetitions passed through the command line # the first time the script is executed if not args.total: args.total = args.repetitions # Test start time automatically set on first iteration if not args.start: args.start = int(time()) # Wakeup time set to 0 for 'reboot' # since wakeup alarm won't be scheduled if args.pm_operation == 'reboot': args.wakeup = 0 args.min_pm_time = 0 # Minimum time for each power management operation # is set to the wakeup time if not args.min_pm_time: min_pm_time = args.wakeup - 2 if min_pm_time < 0: min_pm_time = 0 args.min_pm_time = min_pm_time # Log filename shows clearly the type of test (pm_operation) # and the times it was repeated (repetitions) args.log_filename = os.path.join(args.log_dir, ('{0}.{1}.{2}.log' .format(os.path.basename(__file__), args.pm_operation, args.total))) return args, extra_args if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/xen_test0000775000175000017500000000414112646152433022423 0ustar sylvainsylvain00000000000000#!/bin/bash ## Xen Testing ## Script to make and fire off some pre-made VMs to test the hypervisor ## under a bit of simulated load ## ## USAGE: xentest.sh /path/to/ORIGINAL_IMAGE /path/to/ORIGINAL_CONFIG ## ## this is a kludge and a dirty, dirty hack and shoud die an ignomious ## death soon. A more elegant solution would be to modify the script ## /usr/share/checkbox/scripts/virtualization and add the missing Xen ## functionality. But this will do as a first pass. ORIGINAL_VM=$1 ORIGINAL_VM_TEMPLATE=$2 VIRSH_CMD='virsh -c xen:///' CLONE_CMD='virt-clone' VM_NAME_BASE='xentest-vm' # First, figure out how many CPUs we have: #CPU_CORES=`xm dmesg | grep -c "(XEN) Processor #"` CPU_CORES=1 # Verify our image and config file are present if [ ! -e $ORIGINAL_VM ]; then echo "Xen VM Image not found!" >&2 exit 1 fi if [ ! -e $ORIGINAL_VM_TEMPLATE ]; then echo "Xen VM Config File not found!" >&2 exit 1 fi #Clone those suckers enough that we have 2 VMs per core and LAUNCH! VM_TOTAL=$((CPU_CORES*2)) #Set up an assoticative array (this would translate much better into #a simple python list later on, hint hint) declare -A VM_NAMES echo "Starting $VM_TOTAL VM clones" >&2 for vm in `seq 1 $VM_TOTAL`; do VM_NAME="$VM_NAME_BASE$vm" VM_NAMES[$vm]=$VM_NAME echo "Cloning vm $vm" >&2 $CLONE_CMD --original-xml=$ORIGINAL_VM_TEMPLATE -n $VM_NAME -f /vms/$VM_NAME.img --force >&2 echo "Starting vm $vm" >&2 $VIRSH_CMD start $VM_NAME done #Lets wait a few minutes to let them do some work echo "Sleeping for 5 miunutes to let VMs boot and start working" >&2 sleep 5m echo "" >&2 #Now verify the VMs are still running fail=false echo "Checking domU state..." >&2 for vm in `seq 1 $VM_TOTAL`; do state=`$VIRSH_CMD domstate ${VM_NAMES[$vm]}` echo "${VM_NAMES[$vm]}: $state" >&2 if [ "$state" != "running" ]; then fail=true echo "VM $vm is not in running state!" >&2 fi done if $fail; then echo "One or more guests is not in the running state after 5 minutes." >&2 echo "Test Fails" >&2 exit 1 else echo "All guests seem to be running correctly" fi exit 0 plainbox-provider-checkbox-0.25/bin/udisks2_monitor0000775000175000017500000001432112646152433023726 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # Copyright 2012 Canonical Ltd. # Written by: # Zygmunt Krynicki # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ Script that observes changes to various devices, as published by UDisks2. Note: this script has no UDisks (one) equivalent. """ import errno import logging import sys from checkbox_support.dbus import connect_to_system_bus, drop_dbus_type from checkbox_support.dbus.udisks2 import UDisks2Observer from dbus.exceptions import DBusException def _print_interfaces_and_properties(interfaces_and_properties): """ Print a collection of interfaces and properties exported by some object The argument is the value of the dictionary _values_, as returned from GetManagedObjects() for example. See this for details: http://dbus.freedesktop.org/doc/dbus-specification.html# standard-interfaces-objectmanager """ for interface_name, properties in interfaces_and_properties.items(): print(" - Interface {}".format(interface_name)) for prop_name, prop_value in properties.items(): prop_value = drop_dbus_type(prop_value) print(" * Property {}: {}".format(prop_name, prop_value)) def main(): # Connect to the system bus, we also get the event # loop as we need it to start listening for signals. system_bus, loop = connect_to_system_bus() # Create an instance of the observer that we'll need for the model observer = UDisks2Observer() # Define all our callbacks in advance, there are three callbacks that we # need, for interface insertion/removal (which roughly corresponds to # objects/devices coming and going) and one extra signal that is only fired # once, when we get the initial list of objects. # Let's print everything we know about initially for the users to see def print_initial_objects(managed_objects): print("UDisks2 knows about the following objects:") for object_path, interfaces_and_properties in managed_objects.items(): print(" * {}".format(object_path)) _print_interfaces_and_properties(interfaces_and_properties) sys.stdout.flush() observer.on_initial_objects.connect(print_initial_objects) # Setup a callback for the InterfacesAdded signal. This way we will get # notified of any interface changes in this collection. In practice this # means that all objects that are added/removed will be advertised through # this mechanism def print_interfaces_added(object_path, interfaces_and_properties): print("The object:") print(" {}".format(object_path)) print("has gained the following interfaces and properties:") _print_interfaces_and_properties(interfaces_and_properties) sys.stdout.flush() observer.on_interfaces_added.connect(print_interfaces_added) # Setup a callback on PropertiesChanged signal. This way we will get # notified on any changes to the values of properties exported by various # objects on the bus. def print_properties_changed(object_path, interface_name, changed_properties, invalidated_properties): print("The object") print(" {}".format(object_path)) print("has changed the following properties") print(" - Interface {}".format(interface_name)) for prop_name, prop_value in changed_properties.items(): prop_value = drop_dbus_type(prop_value) print(" * Property {}: {}".format(prop_name, prop_value)) for prop_name in invalidated_properties: print(" * Property {} (invalidated)".format(prop_name)) observer.on_properties_changed.connect(print_properties_changed) # Again, a similar callback for interfaces that go away. It's not spelled # out explicitly but it seems that objects with no interfaces left are # simply gone. We'll treat them as such def print_interfaces_removed(object_path, interfaces): print("The object:") print(" {}".format(object_path)) print("has lost the following interfaces:") for interface in interfaces: print(" * {}".format(interface)) sys.stdout.flush() observer.on_interfaces_removed.connect(print_interfaces_removed) # Now that all signal handlers are set, connect the observer to the system # bus try: logging.debug("Connecting UDisks2 observer to DBus") observer.connect_to_bus(system_bus) except DBusException as exc: # Manage the missing service error if needed to give sensible error # message on precise where UDisks2 is not available if exc.get_dbus_name() == "org.freedesktop.DBus.Error.ServiceUnknown": print("You need to have udisks2 installed to run this program") print("It is only applicable to Ubuntu 12.10, or later") raise SystemExit(1) else: raise # main_shield() will catch this one # Now start the event loop and just display any device changes print("=" * 80) print("Waiting for device changes (press ctlr+c to exit)") print("=" * 80) logging.debug("Entering event loop") sys.stdout.flush() # Explicitly flush to allow tee users to see things try: loop.run() except KeyboardInterrupt: loop.quit() print("Exiting") def main_shield(): """ Helper for real main that manages exceptions we don't recover from """ try: main() except DBusException as exc: logging.exception("Caught fatal DBus exception, aborting") except IOError as exc: # Ignore pipe errors as they are harmless if exc.errno != errno.EPIPE: raise if __name__ == "__main__": main_shield() plainbox-provider-checkbox-0.25/bin/lamp_test0000775000175000017500000000126312646152433022564 0ustar sylvainsylvain00000000000000#!/bin/bash # # Test LAMP by checking Apache, MySQL, and PHP # Requires: apache2, php5-mysql, libapache2-mod-php5, mysql-server # # Check Apache is running; requires network connection so verify that check=`ping -c 2 www.ubuntu.com |grep "2 received"` if [ -n "$check" ]; then run1=`w3m http://127.0.0.1/ | grep "404"` if [ -n "$run1" ]; then echo "FAIL: apache is not running." exit 1 fi fi # Check if MySQL server is running run2=`netstat -tap | grep mysql` if [ -z "$run2" ]; then echo "FAIL: mysql is not running." exit 1 fi # Check PHP run3=`php -r 'phpinfo();' | grep 'PHP License'` if [ -z "$run3" ]; then echo "FAIL: php is not running." exit 1 fi exit 0 plainbox-provider-checkbox-0.25/bin/sleep_test_log_check0000775000175000017500000001735012646152433024745 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # This file is part of Checkbox. # # Copyright 2014 Canonical Ltd. # # Authors # Jeff Lane # Daniel Manrique # # Checkbox is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # Checkbox is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Checkbox. If not, see . ''' This script is used to parse the log generated by fwts and check it for certain errors detected during testing. It expects that this is a log file created by fwts at runtime using the -l option. It's written now specifically for checking ater the fwts s3 and s4 tests but can be adapted to look for other tests, or all tests. ''' import sys import collections import re from argparse import ArgumentParser import logging # Definitions of when a level starts, how a failure looks, # and when a level ends. start_level_re = r'^(?P.+) failures: (?PNONE|\d+)$' start_level_re = re.compile(start_level_re) failure_re = re.compile(r'^ (?P(s3|s4)): (?P
.+)$') end_level_re = re.compile(r"$^") def parse_summary(summary, results): """ Parses an entire "Test Failure Summary" section, which contains a short summary of failures observed per level. Returns nothing, but adds the results to the passed results dictionary. :param summary: A list of lines comprised in this summary section :param results: The results dictionary into which to put the end result. Should be a dict with keys for each level, the values are dicts with keys for each test (s3, s4) which in turn contain a list of all the failures observed for that level and test. """ current_level = None current_acum = [] for logline in summary: level_matches = start_level_re.search(logline) if level_matches: logging.debug("Found a level: %s", level_matches.group('level')) current_level = level_matches.group('level') elif end_level_re.search(logline) and current_level: if current_level: logging.debug("Current level (%s) has %s", current_level, current_acum) # By passing results[current_level] a key in results will be # created for every level we see, regardless of whether it # reports failures or not. This is OK because we can later # check results' keys to ensure we saw at least one level; if # results has no keys, it could mean a malformed fwts log file. parse_level(current_acum, results[current_level]) else: logging.debug("Discarding junk") current_acum = [] current_level = None else: current_acum.append(logline) def parse_level(level_lines, level_results): """ Parses the level's lines, appending the failures to the level's results. level_results is a dictionary with a key per test type (s3, s4, and so on). Returns nothing, but adds the results to the passed results dictionary for this level. :param level_lines: A list of lines comprised in this level's list of failures. : param level_results: A dictionary containing this level's results. Should be a dict with keys for each test, to which the failures for the level will be appended. """ for failureline in level_lines: failure_matches = failure_re.search(failureline) if failure_matches: test = failure_matches.group('test') details = failure_matches.group('details') logging.debug("fail %s was %s", test, details) level_results[test].append(details) def main(): parser = ArgumentParser() parser.add_argument('-d', '--debug', action='store_const', const=logging.DEBUG, default=logging.INFO, help="Show debugging information.") parser.add_argument('-v', '--verbose', action='store_true', default=False, help="Display each error discovered. May provide \ very long output. Also, this option will only \ provide a list of UNIQUE errors encountered in \ the log file. It will not display duplicates. \ Default is [%(default)s]") parser.add_argument('test', action='store', choices=['s3', 's4'], help='The test to check (s3 or s4)') parser.add_argument('logfile', action='store', help='The log file to parse') args = parser.parse_args() logging.basicConfig(level=args.debug) #Create a generator and get our lines log = (line.rstrip() for line in open(args.logfile, 'rt', encoding="UTF-8")) # End result will be a dictionary with a key per level, value is another # dictionary with a key per test (s3, s4, ...) and a list of all failures # for each test. Duplicates are possible, because we should also indicate # the number of instances for each failure. results = collections.defaultdict(lambda: collections.defaultdict(list)) sum_acum = [] summaries_found = 0 # Start parsing the fwts log. Gather each "Test Failure Summary" section # and when it's complete, pass it to the parse_summary function to extract # levels and tests. for logline in log: if "Test Failure Summary" in logline: parse_summary(sum_acum, results) summaries_found += 1 sum_acum = [] else: sum_acum.append(logline) # We reached the end, so add the last accumulated summary if sum_acum: parse_summary(sum_acum, results) # Report what I found for level in sorted(results.keys()): if results[level]: # Yes, we can have an empty level. We may have # seen the levelheader but had it report no # failures. print("{} failures:".format(level)) for test in results[level].keys(): print(" {}: {} failures".format(test, len(results[level][test]))) if args.verbose: print('='*40) counts = collections.Counter(results[level][test]) for failure in counts: print(" {} (x {})".format(failure, counts[failure])) # Decide on the outcome based on the collected information if not summaries_found: logging.error("No fwts test summaries found, " "possible malformed fwts log file") return_code = 2 elif not results.keys(): # If it has no keys, means we didn't see any # FWTS levels logging.error("None of the summaries contained failure levels, " "possible malformed fwts log file") return_code = 2 elif any(results.values()): # If any of the results' levels has errors return_code = 1 else: print("No errors detected") return_code = 0 return return_code if __name__ == '__main__': sys.exit(main()) plainbox-provider-checkbox-0.25/bin/broadband_info0000775000175000017500000000023012646152433023514 0ustar sylvainsylvain00000000000000#!/bin/bash for i in $(mmcli --simple-status -L | \ awk '/freedesktop\/ModemManager1\/Modem/ {print $1;}'); do mmcli -m $i done plainbox-provider-checkbox-0.25/bin/recovery_info0000775000175000017500000003066012646152433023450 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 # Copyright 2015 Canonical Ltd. # Written by: # Shawn Wang # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """Show the recovery partition information for the preinstalled OS.""" import os import re import subprocess import sys import tempfile import unittest import xml.dom.minidom as minidom from guacamole import Command try: from unittest import mock except ImportError: from plainbox.vendor import mock RECOVERY_PACKAGES = ["dell-recovery", "ubuntu-recovery"] def get_recovery_package(): """ Test with RECOVERY_PACKAGES. to check recovery application is installed or not :return: string of package_version or None """ for pkg in RECOVERY_PACKAGES: output = subprocess.check_output(["apt-cache", "policy", pkg], universal_newlines=True) for line in output.split("\n"): if line.startswith(" Installed:"): ver = line.split(": ")[1] return "{}_{}".format(pkg, ver.strip()) return None RECOVERY_LABELS = {"HP_TOOLS": "HP", "PQSERVICE": "UBUNTU", "BACKUP": "TEST", "INSTALL": "DELL", "OS": "DELL", "RECOVERY": "DELL"} _escape_pattern = re.compile(r'\\x([0-9a-fA-F][0-9a-fA-F])') def lsblk_unescape(label): """Un-escape text escaping done by lsblk(8).""" return _escape_pattern.sub( lambda match: chr(int(match.group(1), 16)), label) def get_recovery_partition(): """ Get the type and location of the recovery partition. :return: (recovery_type, recovery_partition) or None Use lsblk(8) to inspect available block devices looking for a partition with FAT or NTFS and a well-known label. """ cmd = ['lsblk', '-o', 'TYPE,FSTYPE,NAME,LABEL', '--raw'] for line in subprocess.check_output(cmd).splitlines()[1:]: type, fstype, name, label = line.split(b' ', 3) # Skip everything but partitions if type != b'part': continue # Skip everything but FAT and NTFS if fstype != b'vfat' and fstype != b'ntfs': continue label = lsblk_unescape(label.decode('utf-8')) recovery_type = RECOVERY_LABELS.get(label) # Skip unknown labels if recovery_type is None: continue recovery_partition = '/dev/{}'.format(name.decode('utf-8')) return (recovery_type, recovery_partition) class FunctionTests(unittest.TestCase): """Tests for several functions.""" @mock.patch('subprocess.check_output') def test_get_recovery_package(self, mock_subprocess_check_output): """Smoke test for get_recovery_package().""" mock_subprocess_check_output.return_value = """\ dell-recovery: Installed: 1.11 Candidate: 1.11 Version table: 1.11 500 https://archive/cesg-mirror/ test/public amd64 Packages """ self.assertEqual(get_recovery_package(), "dell-recovery_1.11") @mock.patch('subprocess.check_output') def test_get_recovery_partition(self, mock_subprocess_check_output): """Smoke test for get_recovery_partition().""" mock_subprocess_check_output.return_value = ( b'TYPE FSTYPE NAME LABEL\n' b'disk linux_raid_member sda fx:2x250GB\n' b'raid1 bcache md127 \n' b'disk ext4 bcache0 Ultra\n' b'disk linux_raid_member sdb fx:2x250GB\n' b'raid1 bcache md127 \n' b'disk ext4 bcache0 Ultra\n' b'disk sdc \n' b'part btrfs sdc1 vol1\n' b'disk sdd \n' b'part ntfs sdd1 Windows\x208.1\n' b'part sdd2 \n' b'part ext4 sdd5 Utopic\n' b'part swap sdd6 \n' b'disk bcache sde \n' b'disk ext4 bcache0 Ultra\n' b'disk sdf \n' b'part ntfs sda3 RECOVERY\n') self.assertEqual(get_recovery_partition(), ("DELL", "/dev/sda3")) def test_lsblk_unescape(self): """Smoke tests for lsblk_unescape().""" self.assertEqual(lsblk_unescape('Windows\\x208.1'), 'Windows 8.1') self.assertEqual(lsblk_unescape('Windows XP'), 'Windows XP') class MountedPartition(object): """ Mount Manager to mount partition on tempdir. e.g. with MountedPartition("/dev/sda1") as tmp: print("This is the mount point: {}".format(tmp)) do_stuff() """ def __init__(self, part): """ Prepare the mntdir point. :param part: string of the partition device file, like /dev/sda2 """ self.part = part self.mntdir = tempfile.mkdtemp() def __enter__(self): """ __enter__ method for python's with statement. Mount the partition device to the mntdir. """ cmd = ["mount", self.part, self.mntdir] subprocess.check_output(cmd, universal_newlines=True) return self.mntdir def __exit__(self, type, value, traceback): """ __exit__ method for python's with statement. Unmount and remove the mntdir. """ subprocess.check_output(["umount", self.mntdir], universal_newlines=True) os.rmdir(self.mntdir) class MountedPartitionTests(unittest.TestCase): """Unittest of MountedPartition.""" @mock.patch('subprocess.check_output') def test_with_of_MountedPartition(self, mock_subprocess_check_output): """Test mount point.""" test_dir = "" with MountedPartition("/dev/test") as tmp: test_dir = tmp self.assertTrue(os.path.exists(test_dir)) mock_subprocess_check_output.assert_has_calls( [mock.call(['mount', '/dev/test', test_dir], universal_newlines=True)]) self.assertFalse(os.path.exists(test_dir)) mock_subprocess_check_output.assert_has_calls( [mock.call(['umount', test_dir], universal_newlines=True)]) class RecoveryVersion(Command): """ print the version of recovery image. @EPILOG@ This commands prints information such as: image_version: xxx bto_version: REV_xxx.iso (dell only) """ def invoked(self, ctx): """ Guacamole method called when the command is invoked. /etc/buildstamp is a image information file, it created by the oem image builder. oilpalm Fri, 20 Jun 2014 04:02:07 +0000 somerville-trusty-amd64-20140620-0 If /etc/buildstamp exist, print out the second line (image iso name). For Dell-recovery partition, /etc/buildstamp shows base image info. If recovery_partition/bto.xml, print out the bto_version (read from xml file). """ if os.path.isfile("/etc/buildstamp"): with open('/etc/buildstamp', 'rt', encoding='UTF-8') as stream: data = stream.readlines() print("image_version: {}".format(data[1].strip())) with MountedPartition(ctx.recovery_partition) as mntdir: fname = "{}/bto.xml".format(mntdir) if os.path.isfile(fname): o = minidom.parse("{}/bto.xml".format(mntdir)) bto_version = o.getElementsByTagName("iso")[0].firstChild.data print("bto_version: {}".format(bto_version)) class RecoveryFile(Command): """ display a single file from the recovery partition This command can be used to ``cat`` any file from the recovery partition """ def register_arguments(self, parser): """ Guacamole method used by the argparse ingredient. :param parser: Argument parser (from :mod:`argparse`) specific to this command. """ parser.add_argument('file', help='name of the file to display') def invoked(self, ctx): """ Guacamole method used by the command ingredient. :param ctx: The guacamole context object. Context provides access to all features of guacamole. The argparse ingredient adds the ``args`` attribute to it. That attribute contains the result of parsing command line arguments. :returns: The return code of the command. Guacamole translates ``None`` to a successful exit status (return code zero). """ with MountedPartition(ctx.recovery_partition) as mnt: return subprocess.call([ 'cat', '--', os.path.join(mnt, ctx.args.file)]) class RecoveryCheckType(Command): """ test if the recovery partition is of the given type. This command can be used for scripted tests, to see if the recovery partition on the current system is of a concrete type or not (e.g. DELL-specific) @EPILOG@ The exit code is 0 if the recovery partition type matches and 1 otherwise. """ def register_arguments(self, parser): """ Guacamole method used by the argparse ingredient. :param parser: Argument parser (from :mod:`argparse`) specific to this command. """ parser.add_argument( 'type', help="expected type of the recovery partition") def invoked(self, ctx): """ Guacamole method used by the command ingredient. :param ctx: The guacamole context object. Context provides access to all features of guacamole. The argparse ingredient adds the ``args`` attribute to it. That attribute contains the result of parsing command line arguments. :returns: The return code of the command. Guacamole translates ``None`` to a successful exit status (return code zero). """ if ctx.recovery_type != ctx.args.type: return 1 class RecoveryInfo(Command): """ Inspect the recovery partition. This command can be used to inspect the recovery partition. It has several sub-commands that do various tasks. If the system has no recovery partition, the command exits with the error code 1. """ sub_commands = ( ('version', RecoveryVersion), ('file', RecoveryFile), ('checktype', RecoveryCheckType), ) def invoked(self, ctx): """ Guacamole method used by the command ingredient. :param ctx: The guacamole context object. Context provides access to all features of guacamole. The argparse ingredient adds the ``args`` attribute to it. That attribute contains the result of parsing command line arguments. :returns: The return code of the command. Guacamole translates ``None`` to a successful exit status (return code zero). """ partition = get_recovery_partition() if partition is None: print("Recovery partition not found", file=sys.stderr) return 1 (recovery_type, recovery_partition) = partition ctx.recovery_partition = recovery_partition ctx.recovery_type = recovery_type class RecoveryInfoTests(unittest.TestCase): """Tests for RecoveryInfo.""" @mock.patch('__main__.get_recovery_package') @mock.patch('__main__.get_recovery_partition') def test_smoke(self, mock_get_recovery_partition, mock_get_recovery_package): """Smoke tests for running recovery_info.""" mock_get_recovery_partition.return_value = ("DELL", "/dev/sda3") mock_get_recovery_package.return_value = "dell-recovery_1.11" self.assertEqual(RecoveryInfo().main(argv=[], exit=False), 0) self.assertEqual( RecoveryInfo().main(argv=["checktype", "HP"], exit=False), 1) self.assertEqual( RecoveryInfo().main(argv=["checktype", "DELL"], exit=False), 0) if __name__ == '__main__': if '--test' in sys.argv: sys.argv.remove('--test') unittest.main() else: RecoveryInfo().main() plainbox-provider-checkbox-0.25/bin/disk_stats_test0000775000175000017500000000365712646152433024014 0ustar sylvainsylvain00000000000000#!/bin/bash #Simple script to gather some data about a disk to verify it's seen by the OS #and is properly represented. Defaults to sda if not passed a disk at run time DISK="sda" check_return_code() { if [ "${1}" -ne "0" ]; then echo "ERROR: retval ${1} : ${2}" >&2 exit ${1} fi } if [[ "$1" != '' ]]; then DISK="$1" fi #Get some baseline stats for use later echo "Getting baseline stats" PROC_STAT_BEGIN=`grep -m 1 $DISK /proc/diskstats` SYS_STAT_BEGIN=`cat /sys/block/$DISK/stat` #Generate some disk activity using hdparm -t echo "Generating some disk activity" hdparm -t "/dev/$DISK" 2&> /dev/null #Sleep 5 to let the stats files catch up sleep 5 #Check /proc/partitions, exit with fail if disk isn't found echo "Checking /proc/partitions" grep -q $DISK /proc/partitions check_return_code $? "Disk $DISK not found in /proc/partitions" #Next, check /proc/diskstats echo "Checking /proc/diskstats" grep -q -m 1 $DISK /proc/diskstats check_return_code $? "Disk $DISK not found in /proc/diskstats" #Verify the disk shows up in /sys/block/ echo "Checking /sys/block" ls /sys/block | grep -q $DISK check_return_code $? "Disk $DISK not found in /sys/block" #Verify there are stats in /sys/block/$DISK/stat echo "Checking /sys/block/$DISK/stat" [[ -s "/sys/block/$DISK/stat" ]] check_return_code $? "stat is either empty or nonexistant in /sys/block/$DISK/" #Sleep 5 to let the stats files catch up sleep 5 #Make sure the stats have changed: echo "Getting ending stats" PROC_STAT_END=`grep -m 1 $DISK /proc/diskstats` SYS_STAT_END=`cat /sys/block/$DISK/stat` echo "Checking /proc/diskstats for changes" [[ "$PROC_STAT_BEGIN" != "$PROC_STAT_END" ]] check_return_code $? "Stats in /proc/diskstats did not change" echo "Checking /sys/block/$DISK/stat for changes" [[ "$SYS_STAT_BEGIN" != "$SYS_STAT_END" ]] check_return_code $? "Stats in /sys/block/$DISK/stat did not change" echo "PASS: Finished testing stats for $DISK" exit 0 plainbox-provider-checkbox-0.25/bin/accelerometer_test0000775000175000017500000002745512646152433024460 0ustar sylvainsylvain00000000000000#!/usr/bin/env python3 ''' script to test accerometer functionality Copyright (C) 2012 Canonical Ltd. Authors Jeff Marcom This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . The purpose of this script is to simply interact with an onboard accelerometer, and check to be sure that the x, y, z axis respond to physical movement of hardware. ''' from argparse import ArgumentParser from gi.repository import Gdk, GLib, Gtk import logging import os import re import sys import threading import time from subprocess import Popen, PIPE, check_output, STDOUT, CalledProcessError from checkbox_support.parsers.modinfo import ModinfoParser handler = logging.StreamHandler() logger = logging.getLogger() logger.addHandler(handler) logger.setLevel(logging.DEBUG) class AccelerometerUI(Gtk.Window): """Builds UI Framework for axis threshold tests using Gtk""" def __init__(self): Gtk.Window.__init__(self, title="Accelerometer Test") self.set_default_size(450, 100) self.set_type_hint(Gdk.WindowType.TOPLEVEL) self.enabled = False # Create UI Grid w_table = Gtk.Grid() self.add(w_table) # Create axis buttons self.up_icon = Gtk.Image(stock=Gtk.STOCK_GO_UP) self.up_icon.set_padding(10, 30) self.down_icon = Gtk.Image(stock=Gtk.STOCK_GO_DOWN) self.down_icon.set_padding(10, 30) self.left_icon = Gtk.Image(stock=Gtk.STOCK_GO_BACK) self.right_icon = Gtk.Image(stock=Gtk.STOCK_GO_FORWARD) # Set debug self.debug_label = Gtk.Label("Debug") # Set Grid layout for UI message = "Please tilt your hardware in the positions shown below:" w_table.attach(Gtk.Label(message), 0, 0, 4, 1) w_table.attach(self.up_icon, 2, 2, 1, 1) w_table.attach_next_to(self.debug_label, self.up_icon, Gtk.PositionType.BOTTOM, 1, 1) w_table.attach_next_to(self.down_icon, self.debug_label, Gtk.PositionType.BOTTOM, 1, 1) w_table.attach_next_to(self.left_icon, self.debug_label, Gtk.PositionType.LEFT, 1, 1) w_table.attach_next_to(self.right_icon, self.debug_label, Gtk.PositionType.RIGHT, 1, 1) def update_axis_icon(self, direction): """Change desired directional icon to checkmark""" exec('self.%s_icon.set_from_stock' % (direction) \ + '(Gtk.STOCK_YES, size=Gtk.IconSize.BUTTON)') def update_debug_label(self, text): """Update axis information in center of UI""" self.debug_label.set_text(text) def destroy(self): Gtk.main_quit() def enable(self): self.enabled = True self.connect("delete-event", Gtk.main_quit) self.show_all() # Enable GLib/Gdk threading so the UI won't lock main GLib.threads_init() Gdk.threads_init() Gdk.threads_enter() Gtk.main() Gdk.threads_leave() class PermissionException(RuntimeError): def __init__(self, error): message = "Please re-run with root permissions: %s" % error.strip() super(PermissionException, self).__init__(message) class AxisData(threading.Thread): """Acquire information from kernel regarding the state of the accelerometer axis positions. Gathered data will be compared to a preset threshold reading. The default threshold (either - or + ) for any direction is 600. Return values for thread are SUCCESS:0 FAILURE:1. FAILURE is likely to exists when thread is unable to obtain a valid reading from the hardware.""" def __init__(self, device_path, ui_control=None): threading.Thread.__init__(self) self.ui = ui_control self.device_path = device_path.strip("/") self.tilt_threshold = 600 self.x_test_pool = ["up", "down"] self.y_test_pool = ["left", "right"] if self.ui == None: self.ui.enabled = False def grab_current_readings(self): """Search device path and return axis tuple""" time.sleep(0.5) # Sleep to accomodate slower processors data_file = os.path.join("/sys", self.device_path, "device", "position") # Try and retrieve positional data from kernel try: position_tuple = open(data_file) except (OSError, IOError): logging.error("Failed to open: %s" % data_file) return False # Split data for x, y, z as it's easier to manage threshold tests. axis_set = position_tuple.read().strip("\n()") return axis_set.split(",") def parse_reading(self, value, mapping): """Check for positive or negative threshold match""" if abs(value) >= abs(self.tilt_threshold): # And return test pool array position based on integer if value < 0: return 2 return 1 def direction_poll(self, x_axis, y_axis): """Poll for threshold being met per x, and y axis""" direction_map = {"X": x_axis, "Y": y_axis} for mapping, data in direction_map.items(): reading = self.parse_reading(int(data), mapping) if type(reading) == int: return reading, mapping # Return nothing if threshold is not met return False, None def run(self): rem_tests = self.y_test_pool + self.x_test_pool while len(rem_tests) > 0: axis_data_bundle = self.grab_current_readings() if type(axis_data_bundle) != list: logging.error("Failed to grab appropriate readings") return 1 # Parse for current positional values # Hdaps will only report X, and Y positional data x_data = int(axis_data_bundle[0]) y_data = int(axis_data_bundle[1]) if len(axis_data_bundle) > 2: z_data = int(axis_data_bundle[2]) else: z_data = 0 debug_info = "X: %s Y: %s Z: %s" % (x_data, y_data, z_data) if self.ui.enabled: # Update positional values in UI self.ui.update_debug_label(debug_info) position, axis = self.direction_poll(x_data, y_data) if position: # Check axis set and delete test from pool if axis == "X": pool = self.x_test_pool else: pool = self.y_test_pool if len(pool) >= position: direction = pool[position - 1] if direction in rem_tests: # Remove direction from test pool del rem_tests[rem_tests.index(direction)] self.ui.update_axis_icon(direction) else: # Accept readings as successful test result logging.debug("Latest Readings: %s" % debug_info) break if self.ui.enabled: self.ui.destroy() return 0 def insert_supported_module(oem_module): """Try and insert supported module to see if we get any init errors""" try: stream = check_output(['modinfo', oem_module], stderr=STDOUT, universal_newlines=True) except CalledProcessError as err: print("Error accessing modinfo for %s: " % oem_module, file=sys.stderr) print(err.output, file=sys.stderr) return err.returncode parser = ModinfoParser(stream) module = os.path.basename(parser.get_field('filename')) insmod_output = Popen(['insmod %s' % module], stderr=PIPE, shell=True, universal_newlines=True) error = insmod_output.stderr.read() if "Permission denied" in error: raise PermissionException(error) return insmod_output.returncode def check_module_status(): """Looks to see if it can determine the hardware manufacturer and report corresponding accelerometer driver status""" oem_driver_pool = {"hewlett-packard": "hp_accel", "toshiba": "hp_accel", "ibm": "hdaps", "lenovo": "hdaps"} oem_module = None dmi_info = Popen(['dmidecode'], stdout=PIPE, stderr=PIPE, universal_newlines=True) output, error = dmi_info.communicate() if "Permission denied" in error: raise PermissionException(error) vendor_data = re.findall("Vendor:\s.*", output) try: manufacturer = vendor_data[0].split(":")[1].strip() except IndexError as exception: logging.error("Failed to find Manufacturing data") return logging.debug(manufacturer) # Now we look to see if there was any info during boot # time that would help in debugging this failure for vendor, module in oem_driver_pool.items(): if manufacturer.lower() == vendor: oem_module = oem_driver_pool.get(vendor) break # We've found our desired module to probe. if oem_module != None: if insert_supported_module(oem_module) != None: logging.error("Failed module insertion") # Check dmesg status for supported module driver_status = Popen(['dmesg'], stdout=PIPE, universal_newlines=True) module_regex = oem_module + ".*" kernel_notes = re.findall(module_regex, driver_status.stdout.read()) # Report ALL findings, it's useful to note it the driver failed init # more than once of actually passed despite a reading failure logging.debug("\n".join((kernel_notes))) else: logging.error("No supported module") def check_for_accelerometer(): """Checks device list for existence of accelerometer and returns name, manufacturer, and system path info.""" found = False device_info = open("/proc/bus/input/devices").readlines() for line in device_info: if "accelerometer" in line.lower(): target = device_info.index(line) name = device_info[target].split("=")[1] path = device_info[target + 2].split("=")[1] found = True break if found: logger.debug("Name: %s\nPath: %s" % (name, path)) return path.strip() else: # Return False as it's expected logger.error("Accelerometer hardware not found") return False def main(): parser = ArgumentParser(description="Tests accelerometer functionality") parser.add_argument('-m', '--manual', default=False, action='store_true', help="For manual test with visual notification") parser.add_argument('-a', '--automated', default=True, action='store_true', help="For automated test using defined parameters") args = parser.parse_args() sys_path = check_for_accelerometer() if not sys_path: try: check_module_status() except PermissionException as error: print(error, file=sys.stderr) sys.exit(1) ui = AccelerometerUI() grab_data = AxisData(sys_path, ui) grab_data.setDaemon(True) grab_data.start() if args.manual: ui.enable() else: # Sleep for enough time to retrieve a reading. # Reading is not instant. time.sleep(5) if __name__ == '__main__': main(); plainbox-provider-checkbox-0.25/src/0000775000175000017500000000000012646152434020664 5ustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/src/clocktest.c0000664000175000017500000000615712646152433023033 0ustar sylvainsylvain00000000000000/* clocktest.c - check for clock jitter on SMP machines */ #include #include #include #include #include #define __USE_GNU 1 #include #define NSEC_PER_SEC 1000000000 #define MAX_JITTER (double)0.2 #define ITERATIONS 10000 #define NSEC(ts) (ts.tv_sec*NSEC_PER_SEC + ts.tv_nsec) #ifdef OLD_SCHED_SETAFFINITY #define setaffinity(mask) sched_setaffinity(0,&mask) #else #define setaffinity(mask) sched_setaffinity(0,sizeof(mask),&mask) #endif int test_clock_jitter(){ cpu_set_t cpumask; struct timespec *time; unsigned long nsec; unsigned slow_cpu, fast_cpu; double jitter; double largest_jitter = 0.0; unsigned cpu, num_cpus, iter; int failures = 0; num_cpus = sysconf(_SC_NPROCESSORS_CONF); if (num_cpus == 1) { printf("Single CPU detected. No clock jitter testing necessary.\n"); return 0; } printf ("Testing for clock jitter on %u cpus\n", num_cpus); time=malloc(num_cpus * sizeof(struct timespec)); for (iter=0; iter NSEC(time[fast_cpu])) { fast_cpu = cpu; } } jitter = ((double)(NSEC(time[fast_cpu]) - NSEC(time[slow_cpu])) / (double)NSEC_PER_SEC); #ifdef DEBUG printf("DEBUG: max jitter for pass %u was %f (cpu %u,%u)\n", iter,jitter,slow_cpu,fast_cpu); #endif if (jitter > MAX_JITTER || jitter < -MAX_JITTER){ printf ("ERROR, jitter = %f\n",jitter); printf ("iter = %u, cpus = %u,%u\n",iter,slow_cpu,fast_cpu); failures++; } if (jitter > largest_jitter) largest_jitter = jitter; } if (failures == 0) printf ("PASSED, largest jitter seen was %lf\n",largest_jitter); else printf ("FAILED, %u iterations failed\n",failures); return (failures > 0); } int test_clock_direction() { time_t starttime = 0; time_t stoptime = 0; int sleeptime = 60; int delta = 0; time(&starttime); sleep(sleeptime); time(&stoptime); delta = (int)stoptime - (int)starttime - sleeptime; printf("clock direction test: start time %d, stop time %d, sleeptime %u, delta %u\n", (int)starttime, (int)stoptime, sleeptime, delta); if (delta != 0) { printf("FAILED\n"); return 1; } /* otherwise */ printf("PASSED\n"); return 0; } int main() { int failures = test_clock_jitter(); if (failures == 0) { failures = test_clock_direction(); } return failures; } plainbox-provider-checkbox-0.25/src/threaded_memtest.c0000664000175000017500000003461612646152433024357 0ustar sylvainsylvain00000000000000/* $Id: threaded_memtest.c,v 1.7 2008/02/12 01:17:07 gnichols Exp $ * * A scalable, threaded memory exerciser/tester. * * Author: Will Woods * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Notes: * This program uses sched_setaffinity(), which is Linux-specific. This could * probably be ported to other systems with a fairly simple #ifdef / #define * of setaffinity(), below. You might also have to find a replacement for * sysconf(), which (while a POSIX function) is not available on some other * systems (e.g. OSX). */ #include #include #include #include #include #ifdef __linux__ #include #include #include #include #define __USE_GNU 1 #include #include #ifdef OLD_SCHED_SETAFFINITY #define setaffinity(mask) sched_setaffinity(0,&mask) #else #define setaffinity(mask) sched_setaffinity(0,sizeof(mask),&mask) #endif #define VERSION "$Revision: 1.7 $" /* CVS version info */ #define DEFAULT_THREADS 2 #define DEFAULT_RUNTIME 60*15 #define DEFAULT_MEMPCT 0.95 #define BARLEN 40 /* configurable values used by the threads */ int verbose = 0; int quiet = 0; int parallel = 0; unsigned num_threads, default_threads = DEFAULT_THREADS; unsigned runtime, default_runtime = DEFAULT_RUNTIME; unsigned long memsize, default_memsize; /* system info */ unsigned num_cpus; unsigned long total_ram; /* statistic gathering */ struct timeval start={0,0}, finish={0,0}, duration={0,0}; unsigned long *loop_counters = NULL; /* pointers for threads and their memory regions */ pthread_t *threads; char **mmap_regions = NULL; /* Thread mutexes and conditions */ unsigned created_threads = 0; pthread_mutex_t ct_mutex = PTHREAD_MUTEX_INITIALIZER; unsigned live_threads = 0; pthread_mutex_t lt_mutex = PTHREAD_MUTEX_INITIALIZER; unsigned mmap_done = 0; pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t init_cond = PTHREAD_COND_INITIALIZER; pthread_mutex_t mmap_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t mmap_cond = PTHREAD_COND_INITIALIZER; pthread_mutex_t test_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t test_start = PTHREAD_COND_INITIALIZER; pthread_mutex_t finish_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t finish_cond = PTHREAD_COND_INITIALIZER; unsigned done = 0; unsigned running_threads = 0; /* short name of the program */ char *basename = NULL; /* set the affinity for the current task to the given CPU */ int on_cpu(unsigned cpu){ cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(cpu,&mask); if (setaffinity(mask) < 0){ perror("sched_setaffinity"); return -1; } return 0; } /* Parse a memsize string like '34m' or '128k' into a long int */ long unsigned parse_memsize(const char *str) { long unsigned size; char okchars[] = "GgMmKk%"; char unit; size=atoi(str); /* ignores trailing non-digit chars */ unit=str[strlen(str)-1]; if (index(okchars,unit)) { switch (unit) { case 'G': case 'g':size *= 1024; case 'M': case 'm':size *= 1024; case 'K': case 'k':size *= 1024; break; case '%':size = (size/100.0)*total_ram; break; } } return size; } char memsize_str[22]; /* a 64-bit int is 20 digits long */ /* print a nice human-readable string for a large number of bytes */ char *human_memsize(long unsigned size) { char unit=' '; if (size > 10240) { unit='K'; size /= 1024; } if (size > 10240) { unit='M'; size /= 1024; } if (size > 10240) { unit='G'; size /= 1024; } snprintf(memsize_str,22,"%ld%c",size,unit); return memsize_str; } /* A cute little progress bar */ void progressbar(char *label, unsigned cur, unsigned total) { unsigned pos; char bar[BARLEN+1],spinner[]="-\\|/"; pos=(BARLEN*cur)/total; memset(bar,'.',BARLEN); memset(bar,'#',pos); bar[BARLEN]='\0'; if ((pos < BARLEN) && (total >= BARLEN*2)) bar[pos]=spinner[cur%4]; printf("\r%18s [%s] %u/%u",label,bar,cur,total); fflush(stdout); } /* This is the function that the threads run */ void *mem_twiddler(void *arg) { unsigned long thread_id, pages, pagesize, i, p; volatile long garbage; long *lp; int t,offset; char *my_region; unsigned long mapsize = *(unsigned long *)arg; /* Make sure each thread gets a unique ID */ pthread_mutex_lock(&ct_mutex); thread_id=created_threads++; pthread_mutex_unlock(&ct_mutex); if (parallel) { /* let main() go as soon as the thread is created */ mmap_done=1; pthread_cond_signal(&mmap_cond); } on_cpu(thread_id % num_cpus); pagesize=getpagesize(); pages=mapsize/pagesize; /* Map a chunk of memory */ if (verbose) printf("thread %ld: mapping %s RAM\n", thread_id,human_memsize(mapsize)); my_region=mmap(NULL,mapsize,PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE,-1,0); if (my_region == MAP_FAILED) { perror("mmap"); exit(1); } mmap_regions[thread_id] = my_region; /* Dirty each page of the mem region to fault them into existence */ for (i=0;i default_threads) default_threads = num_cpus*2; /* Get memory info */ if (sysinfo(&info) != 0) { perror("sysinfo"); return -1; } free_mem=(info.freeram+info.bufferram)*info.mem_unit; total_ram=info.totalram*info.mem_unit; /* default to using most of free_mem */ default_memsize = free_mem * DEFAULT_MEMPCT; /* Set configurable values to reasonable defaults */ runtime = default_runtime; num_threads = default_threads; memsize = default_memsize; /* parse options */ while ((i = getopt(argc,argv,"hvqpt:n:m:")) != -1) { switch (i) { case 'h': usage(); return 0; case 'v': verbose=1; break; case 'q': quiet=1; break; case 'p': parallel=1; break; case 't': runtime=atoi(optarg); if (!runtime) { printf("%s: error: bad runtime \"%s\"\n",basename,optarg); return 1; } break; case 'n': num_threads=atoi(optarg); if (!num_threads) { printf("%s: error: bad thread count \"%s\"\n",basename,optarg); return 1; } break; case 'm': memsize=parse_memsize(optarg); if (!memsize) { printf("%s: error: bad memory size \"%s\"\n",basename,optarg); return 1; } break; } } /* calculate mapsize now that memsize/num_threads is set */ mapsize = memsize/num_threads; /* sanity checks */ if (num_threads < num_cpus) printf("Warning: num_threads < num_cpus. This isn't usually a good idea.\n"); if (memsize > free_mem) printf("Warning: memsize > free_mem. You will probably hit swap.\n"); /* A little information */ if (verbose) { printf("Detected %u processors.\n",num_cpus); printf("RAM: %.1f%% free (%s/", 100.0*(double)free_mem/(double)total_ram, human_memsize(free_mem)); printf("%s)\n",human_memsize(total_ram)); } printf("Testing %s RAM for %u seconds using %u threads:\n", human_memsize(memsize),runtime,num_threads); /* Allocate room for thread info */ threads=(pthread_t *)malloc(num_threads*sizeof(pthread_t)); mmap_regions=(char **)malloc(num_threads*sizeof(char *)); loop_counters=(unsigned long *)malloc(num_threads*sizeof(unsigned long *)); /* Create all our threads! */ while (created_threads < num_threads) { pthread_mutex_lock(&mmap_mutex); mmap_done=0; if (pthread_create(&threads[created_threads],NULL, mem_twiddler,(void*)&mapsize) != 0) { perror("pthread_create"); exit(1); } /* Wait for it to finish initializing */ while (!mmap_done) { pthread_cond_wait(&mmap_cond,&mmap_mutex); } pthread_mutex_unlock(&mmap_mutex); if (!verbose && !quiet) progressbar("Starting threads",created_threads,num_threads); } if (parallel) { /* Wait for the signal that everyone is finished initializing */ pthread_mutex_lock(&init_mutex); while (live_threads < num_threads) { pthread_cond_wait(&init_cond,&init_mutex); } pthread_mutex_unlock(&init_mutex); } /* Let the testing begin! */ if (!verbose && !quiet) printf("\n"); gettimeofday(&start,NULL); pthread_cond_broadcast(&test_start); /* catch ^C signal */ mysig.sa_handler=int_handler; sigemptyset(&mysig.sa_mask); mysig.sa_flags=0; sigaction(SIGINT,&mysig,NULL); /* Wait for the allotted time */ i=0; while (!done && (i * Maciej Kisielewski * * Checkbox is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3, * as published by the Free Software Foundation. * * Checkbox is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Checkbox. If not, see . */ import QtQuick 2.0 import QtQuick.Window 2.0 Rectangle { border.color: "lime" border.width: 15 color: "transparent" Text { anchors.centerIn: parent text: Screen.width + " x " + Screen.height font.bold: true font.pointSize: 80 color: "lime" smooth: true } Timer { interval: 5000 running: true onTriggered: Qt.quit() } } plainbox-provider-checkbox-0.25/data/websites/0000775000175000017500000000000012646152434022633 5ustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/data/websites/Flash_Video.flv0000664000175000017500000115174312646152433025542 0ustar sylvainsylvain00000000000000FLV Ÿ onMetaDataduration@Z¬1'width@†€height@‚ videodatarate@hj framerate@=øSâUk' videocodecid@filesizeAOŒ ª E.„h ¦ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@CÿþbÿöcÀ`½Á…@ÓB±È `0^àƒ i¡_ÜýþýF@`9€l ÜP`„ 4+0€À6ì (0BšýÿýúŒ€ÀrØ °0 ÁhVP`9€k ØP`„ 4/üûýA€ä¬/`aA‚4Ь ÀrÖ °0 ÁhXÿú2ƒÈ X0^Àƒ i¡Y€ã¬/`aA‚4а0_ÿôfŒ°`½Á…@ÓB³Æ X0^Àƒ„ i¡`¡ èÎ 0 `Á{ ¦…gŒ°`½…@ÓBÂB@ÿÑœ0`Á‚ö!M Ð 0 `Á{ ¦…„…ÿ£H0@À5ƒì (0@š  `Á‚ö M ÿF€`8€k ØPp€ 4+@0@À5ƒì (8@šýú@ÀqÔ °0 áhf `8€j ØPp€ 44DGûõ€â¨/`aAÂ4ÐÍ@ÀqÔ °0 áhhˆˆê5Ä P0^Àƒ„i¡š€â¨/`aAÂ4ÐÑ/Ôjˆ `½…ÓC5Ä P0^Àƒ„i¡¢"`_¨Ö 0 @Á{ ¦†k„ `½…ÓCDÅÀ¿Q´`‚õ M Ú 0 @Ázƒ ¦†‹‹~£h0 À5ê (8@š´`‚õ M þýFÐ`8A€j ÔPp€ 43h0 À5ê (8@š./ýú ÀpƒÔ ¨0 áhfÐ`8A€j ÔPp€ 44\\ õA€á¨/PaAÂ4ÐÍ ÀpƒÔ ¨0 áhh¸¸ê6ƒ P0^ Âƒ„i¡›A€á¨/PaAÂ4ÐÑqp/´m„ `½A…ÓC6ƒ P0^ Âƒ„i¡¢âà_(Ú 0 @Ázƒ ¦†m„ `½A…ÓCEÅÀ¾Ñ´`‚õ M Ú 0 @Ázƒ ¦†‹‹ÿ~£h0 À5ê (8@š´`‚õ M þýFÐ`8A€j ÔPp€ 43h0 À5ê (8@š..ú ÀpƒÔ ¨0 áhfÀ`8A€j ÔPp€ 44\\ õÁ€á¨/`aAÂ4ÐÍ`ÀpƒÔ °0 áhh˜˜ê5ƒ P0^Àƒ„i¡šÁ€á¨/`aAÂ4ÐÑ10/Ôk„ `½…ÓC5ƒ P0^Àƒ„i¡¢bß¨Ö 0 @Á{ ¦†jˆ `½…ÓCDÄ¿Q¨ `‚ö M Ô 0 @Á{ ¦†ˆˆÿ~£P0@À5ì (8@š¤ `Á‚ö M þýF€`8€k ØPp€ 4+@0@À5ƒì (8@šýúÀqÖ °0 áhV€`8€k ØPp€ 4,4/ûõÁ€ã¬/`aAÂ4ЬàÀqƒÖ °0 áhXHO÷ê3ƒÆ X0^Àƒ„ i¡YÁ€ã¬/`aAÂ4а/ÔfŒ°`½…@ÓB³Æ X0^àƒ i¡`  _¨Ê 0 `Á{ ¦…e°`½…@ÓBÀÀÿ¿Q”@`Á‚ö!M Ê  0 `Á{ ¦…ÿ~£ 0€À6ì (0BšŒ@`‚ö!M ÿþýF0`9€l ØP`„ 4+0€À6ì (0BšýÿýúŒ`ÀrØ °0 ÁhV `9€l ÜP`„ 4+û÷ûõ€å°/paA‚4Ь ÀrƒÚ ¸0 ÁhW×Ï÷ê0ƒÊ h0^àƒ i¡XA€å´/paA‚4ЯoïÓÿÿÿ~œü ûôà`  ¿ßçÿÿ8(H(oÿø¡ÂÃC@ÿÎþp°°Ðð?󇇈ˆÿœ<>BCýòqñòï“ÿ|œ||„‡ûäãã¤$?ß'þù8ØØøÿ÷ÉÆÆÇÇÿ¾N2.67ýòqqq±¿ï³‹‹Œ‹ÿ~œ\L\_ûôâbbâÿß§þý8ˆˆ˜Ÿ÷éÄDDÄÿ¿N"#ýúpÐÐÐßïÓ††††ÿ~œ,$47ûôá ¡¡?ß§ þý8ø(/÷é¿¿ÀÀÿÿÍýýýÿÿþHG÷Á?¿Î ýþppßï󅆆ˆÿÿœ>BCýúrïÓÿ~œ„„„‡ûìä$$$?ßg!!!!þù9 ÷ÉÈHHH¾N>>BCýòqñòï“ÿ}œll|ûìãccãÿß§þý8¸¸È¿÷éÅÅÅÅÿ¿N.*./ýúq11q_ïÓ‰‰‰‰ÿ~œDDLOûôá¡¢"?ß§ þý8hhxo÷éÃBCB¿N  ýúpPPP_ïÓ‚ÿ›ûûûÿûúW÷Á?¾õÿ󃄄…ÿœ,44?ÿüáâ""?ÿçÿÿ8˜˜˜¯ÿùÄÄÅEÿÎ&**+ÿþqqq‘Ÿÿó‹‹ŒŒÿ~œ\\dgûôã#c#ß§þý8øøøÿ÷éÇÇÇÇÿ¿N>BB?ýúrïÓ‘‘ÿ~œ„„Œûôä$$dß§!!##þý9 ÷éÈHHÈÿ¾ÎBBFGýòr2ï“ÿ|œ„„„‡ûää$$$?ß§!þý8øøøÿ÷éÇÆÇÇ¿N6.:3ýúqqq‘ŸïÓ‹‹ŒŒÿ~œ\T\_ûôâbb¢¿ß§þý8ˆˆ˜Ÿ÷éÄDDÄ¿NýúpÐпïÓ„‚…„ÿ~œûôà ` ¿ß¦þÿÿÿþý_ðÎüá_¿ç ÿÿ8xˆxÿùÄDDDÿÎ"&"'ÿþq1qQ_ÿó‹‹‹‹ÿÿœ\ddgÿüãcccÿçþý8ØØèï÷鯯ÇG¿N:>:?ýúqñññÿïÓÿ~œ„„„‡ûôä$$$?ß§%%##þý9))÷éÉIII¿NJJJKýörRRR_ï³’’’’ÿ}œ”””—ûää¤d¤ß'!!!!þù9 ÷ÉÈHHÈÿ¾ÎBBBCýöqññòïÓÿ~œ|l|wûôãcc£ß§þý8¸¸ÈÏ÷éÅÅÅÅÿ¿N.../ýúq111?ïÓ‰ˆ‰‰ÿ~œ<4D?ûôá¡¡á¿ß§ þý8H8XO÷éÁAAÁ¿Nýú¯àÐ>C?ƒ@ù ýÿ8xhxgïùÃÄCÄ?ÿÎ"&"'ÿþqQqQÿó‹‹‹‹ÿÿœ\d\gÿüãcccÿçÿÿ8øøøÿ÷éÇÇÇÇÿ¿N>>>?ýúqòòïÓÿ~œ„„„‡ûôä$$$?ß§!!!!þý9 ÷éÈHHH¿NJJJKýúrRRR_ï“’’’’ÿ|œ”””—ûì䤤¤¿ß§%%%%þý9)))/÷ÉÉIII¾NJJJKýòr22ï“ÿ}œ„||ûôããããÿß§þý8ØØØß÷鯯FÆ¿N.../ýúqqqqïÓŠ‰Š‰ÿ~œLLLOûôâb"b?ß§  þÿ8hhhoÿùÃBÃBÿÿÎÿþp000?ÿõòüÈgïùÃÃCÃ?Î"!ÿþq1?ÿ󊋊‹ÿÿœ\\\_ÿüâã"ã?ÿçÿÿ8ØèØïÿùÇÇÇÇÿ¿N>>>?ýúqñññÿïÓÿ~œ„„„‡ûôä$¤$¿ß§%%%%þý9)))/÷éÉIII¿NJJJKýúrRRR_ïÓ’’’’ÿ|œ”””—ûä䤤¤¿ßg%%%%þý9)))/÷éÉIII¾NJJJKýòrRRR_ï“’’’’ÿ|œŒ„Œ‡ûìä$$$?ß§!!þý8øøøÿ÷éÇÇGÇ¿N6667ýúq±±±¿ïÓ‹‹‹‹ÿ~œ\\\_ûôâ¢b¢ß§þý8ˆhˆo÷ùÃCCCÿÎÿþpŸÿó‚‚‚‚ÿÿ¯ø4 Ð>BÁN"""#ýþq11?ï󉋊‹ÿÿœT\\_ÿüââââÿÿçÿÿ8ØØØßÿùÆÇFÇÿÎ>BBCÿþrÿóÿ~œ„„„‡ûôä$d$¿ß§%%%%þý9)))/÷éÉIII¿NJJJKýúrRRROÏÓ“”””~~œ¤¤¤£ûôå%%%?ß§''))þý99)I/÷éÉIII¿NJJJKýúrRRR_ï³’’’’ÿ|œ”””—ûääd$d?ßg!!!!þý9 ÷éÈGÈGÿ¿N>>>?ýúqñÑñÿïÓÿ~œ\\\_ûôââââÿß§þý8¨˜¨Ÿ÷éÄÄDÄ¿N""ýúpапïó„„„„ÿÿœÿý`@.áàçþÿ8˜˜˜Ÿ÷ùÅEÅEÿÿÎ.227ÿþq‘‘±¿ÿóŒŒÿÿœltlwÿüã£ããÿÿç!!!!ÿÿ9 ÿùÈHHH¿NBFBKýúr2RR_ïÓ’’’’ÿ~œ”””—ûô䤤¤¿ß§%%%%þý9)))'çéÊJJJ??NRRRQýúr’’’ŸïÓ””””ÿ~œ¤¤¤§ûôää¥$ÿß§%%%%þý9)))/÷éÉIII¾NJJJKýòr22R_ﳑ‘’’ÿ~œŒ„”‡ûôä#ä$?ß§!!þý8øøøÿ÷éÇGGÇÿ¿N2267ýúq‘qqïÓ‹‹‹‹ÿ~œTLTOûôâb"b?ß§þý8hXho÷éÂÂCBÿÿÎÿþ°!œ4 áÿàçþÿ8˜¨¨·÷ùÅEÅÅ¿ÿÎ.2.1ÿþq±±±¯ÿóŽÿœtt|{ÿüããããßÿç!!! þÿ9 )'÷ùÈÈÉI?¿NFJJKýúrRRR_ïÓ’’’”ÿ~œœœ¤£ûôääå%ß§'')(þý999IG÷éÊJËK?¿NVVZ[ýúr’’²ŸïÓ”•”–ÿ~œ¬¤´¯ûôå%%%?ß§''))þý999IO÷éÉÉÊJ¾ÎJJNKýörRRR_ï³’’’’ÿ~œ”Œ”—ûôäd$¤ßg!!!þû8øù ÷éÇÇÇÇÿ¿N6667ýúq‘‘±¿ïÓŒ‹Œ‹ÿ~œTT\_ûôâbbâ_ß§þý8xxˆw÷éÃBÃBÿÿÎÿþ°/‡„|?üâbb"ßçüÿ8¸¸¸×ïùÅÆFÆ¿Î6665ûþq±Ñ±Ïßó~ÿœ||„ƒ÷üä$$dŸŸ§#%%$üý9) ÷é$d¤ÏÉ¿NJJJKýúrR’RŸïÓ””””~œ¤¤¤£óôå%%%Ÿ§)))(þý9YiIO÷éËKJË¿NVRVSýúr’Ò’ßïÓ–”––ÿ~œ¤¤´·ûôå%%¥ß§))))þý9IIIO÷éÉIJJ¿NJJRSýúrRR’_ïÓ’’’’ÿ}œ”„”ûää$$d?ß'!!!!þû8øù ÷鯯ÇÇÿ¿N66:7ýúq‘q‘ïÓ‹‹‹‹ÿ~œ\L\Kûôâb"b_Ÿ§üý8hXh_ÿùÂBBBÿ‘B>#þôâ"bbÿÿçüÿ8ÈØØ×ïùÆÆÇG¿Î66>=ûþq±Ññïßóÿœ„„„ƒÿüäd¤$ß§%%%$þý,”Œ‹À0 À|I ÿß|€4r‘ €(ƒ@¶ ˜0*4x@¿ÖPü”б+åÊì|Ÿûüä¥$åß§)))(þý9IIIG÷éÊJJJ?¿NRRV[ýúr’’ÒßïÓ•–––ÿ~œ¬¤´·ûôå%¥e¿ß§----þý9iiio÷éËJËK?¿NRRVYýúr’’ÒÏïÓ””””~œ¤¤¤£ûôå$¥%ß§%%)$þúK%'%$¨ý\wûÑãÈ(¯PyH 4§ÒÐÉ(¼¥JÑØ×É! ö ñ"Ó’/ïóœ|||{ûôãccc_ß§þý8¸¸È¿÷éÅÄÅÄ¿¿N&&&%ýþq0ñ0ïïó†…††ÿœ$$,7ûüâ""bÿçÿÿ8ÈØÈ×ïùÆÆÆÆ¿Î:>6=ûþqñññïßóÿœ„„„‡ÿüä$$$?ÿç!!##þý9))÷ï"yñ )|j¦Üd È41/¼LøÑz >©âȚ0 PðK|£80 €Àü×J?ÿÎRRRQùúr’’’ÏÓ””””ÿ~œ¤¤¬¯ûô奥¥¿ß§----þý9iiio÷éËKKK¿NZZZ[ýúrÒÒÒßïÓ––––~œ´´´³óô奥¥ŸŸ§---,üý9YIYWçéÊJJJ??NRRRQùúr’R’OÏåäšÁ€‡£÷I0ƒ@ Ü ËŽ2\02Ç 3úþ ú(¸èÿ?Œ >=—¿Î>B>AûþqñòÏÓŽ~~œlllkûôã"ã"ÿß§þÿ8˜˜¨ŸÿùÄÃÄÃÿ¿ÎýúpÐÐÐßïÒDÄÅ:'ÿþqqqqÿóŒŒ~ÿœllls÷üãc£cŸŸç üÿ8ùùÿùÈHHH?¿ÎBBBCýþrRRR_ïÓ‘‘~ñÊ¡þ2dˆßî2d‚÷Þ(á7ŠB«80 `Àü e€cæ¾Uÿþr’’²ÏÓ”””•~œ¤¬¤§ûô奥¥¿ß§---+þû9iiy÷éËKJË¿NZZVUýúrÒÒÒ¿ïÓ––——ÿ~œ´´´³ûô奥¥ŸŸg--+*þû9iiigçéËKJË??NVRVQùúr’’’ÏÓ”’”’~~¼“0àÐþH°@ ä ÉÅL‰™eÂF`ŸŸÐA€c†A— ƒÆ $—ïùÈHGÈ?ÎBBBAùúqñññïïÓŽŒ~œd\d[ûôââââŸß§ÿ,L|É­2 l/×?¿vá(Rõf0…寕 J•„%Có/þOþùq¹VÀ`Bÿ„ò4Óóÿð4?Æ€À ƒèõM¸Ð`bþøXP2øŒñOÿ~_˜Húµ|t p0ãõ`Ñ—ƒ¨¾ëÇü‚R h€¿ÿû˜0#ògJ ¸þ%DàTMÿÿáÇàÀË›“À) À—˜XÌ•ØïÿýI•/¨ûÿÿœ´´´·ûÿ•Ž…€1X–Ó£„Kç‰NA€;ÞU?]þùÛà0øj ƒ^%SBãÅ@ÑAÚ j¯—_žÿ’VZ8Iò‚úég÷ùËJËË¿?+—‰^$ÓR*¦þ%qè0`ÀªU%±‡½÷¸ƒ0_†¡D@V>mà x¹¬qÀ0  ÀzªÿãŸßÉ&%£Â¡á{å_?Ý9iiig×ÍËËCñ‚P@øýëÀ ÕþWÀ¾y J鈀`"ÇôDy±p0ãï)€À PDwûÿ‰,~³ã¨ûþmÅÀH TDq°– Àûæ?ÿó)(²A€ÁÐá ÇÏ~ÿ’RRZ”~ÿw)\>øü)9©ƒ0 |çë¿Þúã¾À`ĺÃÓ€‰…øn àh † Þ5úô¢†DDœ#ïþt @‘ñÿ©ç `%iâ×Þù± `!ÇÀaßð=ïàÀ +>%X¬|Û†€ˆQÇàÀ6ƒ%ïˆÎ3%%—?a,P•½õø2<0øHV_M8(_fžFXï|Hò»xÌ §¾ü~ããÐÙ0@ÀªVªã €<¸ëŸÿâŒ|\T[÷ù,\d\0ùPWúüçÿ‚ĶœÜ þCGÀÀ ƒï*—îu™Ž„{ëÕ?—‰ Õ6èƒÀ`€ò‹c¡ꇀþïùÄCÄC¿Îûþ±àÐEGƒ@ ÿÿ8¸¸¸¿ÿùÆFÆF¿Î6665ûÿÆ3¸Ì°`b¼EÌJã0`ÁŠñûá2alHJ¶ï÷çÕxð`~†‘ë À/ƒô4œ„|„ƒó÷‘0~ ø00î‘0| ø01~˜” þ–A€\ƲKÀ.ãY#/Ïþ>Cúh Ø41ðÓP`Á¡ˆ|*&á7 ¿>QA",GÃã?ÿû>h HûM”€p•™ÿÿ„&.¯Óçe÷áÁ_ÿþ– X0¼ªüèòñõ.¶†ñ80àÀû*Jáð„ *¢/÷»Šx00ßHñQà‚ :´ÿ¬80@ÀüüŽZ`~~G,üÿ9YyYgçåÅGþ®@kÀQÑ@€ ߀«‡ÂòH0ÿ{íÅo‘ h00ß"<@0`Àü|†XÌ@0`Àûý+åÁ¢~|ÿrå$¨ÿòC2ÍÓËÀ ƒµRºçç¾tP`€Q'þá‰éî8[ÑG°2ñ, æEEÿDÌ|¨ÏûþÄÄ’À`‡ß25âõ@ÿÿÅ5Ì(%ËO >ÿÿ§ð`À;âB·É Ö tV\¬¿ F *‡›÷ûˆõM¸Ø•~¢T"’jLPdûß\q90ø™³E@À4³¯$7Ãúr õêDÄÄÞ%Á;ÿНbJ¡ñ²Ø `OÿÅ áqqÓ%`À4‰PÒ°0 ÀÀ5²=þð À9Ýý(¾ öG}Xô3†@Àüøùø2*P ‡€ÈL˜à`aƒ!8ÀÏŒ `À†n À6ƒõHÅÇàÀ†n€À6ƒô÷ÿùÆEÆE¿—‹{8E½ƒ LjŸ\ÔpHÄBc‚P00ªˆ„¡úõ00Ô‰ìAúxèƒ ¾0?Owüâ!â!ßç ýþV8£#ƒ(×çÐÎqq±‘¯ÐSœllloÿÿ¸Ð°`c!p´ÐÀ`c 4p_ï†Ä„̉˜eßð/ë À/ô4zè0  Àý $þÿ9))çï' @ 0Q) ƒ@ 0Pþý1!!!(+ƒ¶ØÖIXÆÆ²F_ |„‡ôÔÀhb$`4?¦ ÀCþû±!#â.=ÿËA€l`"®=è ƒà?Wº®ƒÀ?ªOK›ò¡VO %yyuÐ •=(÷çîˆ °0 Ð~:ûÅ Êý„¿tÉñô{ûåÅ €kʈÇB00Ê’9ý踘ðƒ ­#ÄÇ€<eiÿúÃâ ÇÈå¡Á€rãärÏÏÓ•–––~|\H0 Àýø Áp༠h0?~°\8€×€¤@½õ8 àƒ^ ˜àƒ?Ž ýßå¢A•i_,è  åZWÌ=?9ñPôâ2`‡ÑP•â'°`K‡¢[†D¯ ¼è'¾=bnWõ¦ÊÁ€mÁ@>ÒHAu`A€jQ±Pg¬ú¶Ã8Ñ%X÷ÿKF2Çü$ÄàhŸ˜€ «òÅ!œ¡ÉMQù„ïÚ jŠ#ƒ6Ǫ°˜LÄêÆDµQXù_«.{¨¸x$¼J4ö0`K°¼ûó R’ZzLÄ£åsî#B^N¦ ñÿ‘ò‹ ÀCýòäLLPÈ™˜'?†vI_ýE‚y:`0 ¤_àiGê陾B=ùùò&a0?!”˜@ä2ÿ{àdÔŒÐ`aƒ! `A† „`œôñ,W»ƒÚ ×ÈÆ`aC7€`Aù¤o°3‹‹‹‹~oð „ä2‹vDËýïN*4>2.2‚| Ö> ÀÃR'Ð éãà‚ 3߀4 ÍùÐHâ!â!ßÿ8hhhgÿò±¡”ds£ŸC2q‘±±¯ÐNœlllkûü㣣£ÿÿürÉ\j à01pŠ=d®6p¨EþølLHȓČÿÁ>«€À.ƒô4‘Zt±¤“ûüä¤d¤_Ÿ¼œ4‚ 00ÁD”† haŸß¦$$$%¥p`¹F²JàÀ,7d‰Ÿ |Œ‡øÜÀhaä`4?ÇÀç÷ì JlM£â‚o«00 ÀýWJ³ƒÆ ÀÖYþòÒ®––'~~ò^~úw/õ!ÄR~a+A€'Éþùq1J#bB”F ÿÿìæ /°I|£›€céò¯Ïçˆ8eI\:†T‘ÑÀ쨌xHRG?¼¼¸˜ðƒ ­#ÄÇ€<eiÿò°àÀ9ñò9hp`øù³óó§+-+,üø¸`Aûðp༠ à`~ü\8$¯H0 ßS‰Ž€x00ãðhà…€<rðhà¿Ýþx ä½+åLFx0?%é_,aéø2{€0`Àý8Q‡88 Ó…DGA=ð3X©³°`Aˆ ñ“À`A‰ ¡+*¹ ¼°¶YíþYiIis/ïÝtKÈÄA£0@Àþ+ !#êÄŒ.º ð™…°`Dx@üA%“$”“3&ö÷ÛÊ+ƒBnQ\˜“‰™‰øLÈ4OÐOáS€_|‚€4 ²Ð3~}|y˜0ãÄqæ`À8ÿ½ð2j@ÀÃB#à 8d%=|`I3zºƒóHÆD`a~Dö x0?öqq‘‘¯Ïí À½QÎ@À öè½8¨Ép00Èø 8Jð3Y0\)øôK¤d À8H¿Â0?#~tâ!â!ß?ç ÿþV9Ñ‘®Œ~§gý8ØØØ×ÿùÆÇFÆÿÿøõ’¸ÜÐ`bai20à¢÷ÓbbL¸O‰žÿÿ®ÒØ0  ÀþiŠ`0 Ãå0ü‰'ÿü䤤äŸß¼‘„ `¡…ÿèã `‡Öœþýq!3âbx{þ¬°Á ‘2ø0 eêUá`þȲã `h4 òoE…X(¿F&$ñ!O÷ý3Ã0K?,ª à•MË–ZZZTÓû÷’ór'q˜00ŸAƒ%„â1ð@.!*BG÷ë‰ Qä"C"J±àø3ÿÓ€0 ¿Ñ&ºUøõcЂË~ðàÀƒì©+‡‚00¾Hè€@à“â2 `ª‘(2ÿz.&:àÀÃ+Hñ1‘.)}#à_ßXp`Aøù»Ð0 ‚PðI¯–~!Ê:Z^Tóûéÿ tïÀUÂ@à(ç `D¯—áÉpäaüœH€x$‘”ÛõWÈ¿Ýþj,ÁùV•òѯÒY‡¾?¹î ÀõÅG8< à§¡‚‚{ÛÞ+ã'€À0ƒC(ãÐ`A¡‰ÿ  Ã6²ËËK_,ô÷çNZ^Z]ýõëàÀø¬€Mˆ@¾ /Tš ï¯X™…°`Dx@'M.ƒº#Â÷ANNNRQíõ<¢°0&åA !{ÉÄŒ‰Dü(dHÌ ðgUhdTA ]‘ÿœ„Œ„‹ûû¸ø0ä21 $\VOÏ}s¡ð@„‰€W¢P ¾ÓÐgÆ`a~Dô x0?4Œ`K‘:ƒÙëºFÿ,dldcŸßÍÇ8ƒ* Ó¢Î40>´öâ£Àh2€iÂ/¡Ÿ#ƒø† Ý#/©Z)ð…÷UÒ7èIÄCÄC¿Îÿþq‘‘Q¯ßóŽ~ÿœlllkÿüãcccÿïº è–c£_Á!ƒ?wûö„õ¢``„²éÓoÿäÀÀ8€p0%ÏzÐ@¢Q}8$`˜I@¸Il÷ü¡”|.¯BV ê£çÅÀÀ ª ¿ß»€0àÀÕjý®è%¤$!1PøÀ‰Ï÷î&dd!«PB†M€i0¸|oþÎàÀ4ÀøüŽSâ8Ò4K/êèg)ÿ‰G±ƒ>ñXJAƒ%‚€I„ïÕaÂd`À‰0~>ñ¯ûÿ,´ C.¤P‚H0¿.Ó‚x|° ƒ&\?1ÿÿåE*_/0Œ ò£æ‚@0ª‹˜wû÷Kd5ºái0à±r¯C‚GŸß¶$b hý@B±{üõ> (0JT¥2ýÿHáÿÔþùC2²¯ÏþKß+q¸0BXôJt³Ù€=ùãð/–0':á…Cñï£Äà_úX0 Àû±Ñ¥âGË¿N «yX4?Æ¢H0Åô×ûÿ’ˆ¡ð@V_O":F‚@0ª•ÿ~é€À ƒ]®<.\>ð4‚ºvÿbhÀ2 *ÕÃBZ±çµí€À4èý\”ãÿÿ•ÿÔýòôÔ¸e,÷Çõ·ƒ< Û…< x0€Àý8Y‡A=éâŽ=„‘Bd`Á† ¨O›k,+–•Ë<†oΜ´´´£ûã×€"eàÒ “.F#« aÐa›ëÖ'M.ƒºᑆ`A¡ýÿtR„Ò’’o·”]ƒàоÊ9.$îy6&&x`ºU8Pì ðgÐÁ€dú¾<Y^8%‰PK€Ð¿—ƒ4]úÿÿÆA÷É£iuq±p0Î@`À ª0ÿþZL3—(ƒæÔJ¹×ç8X½H”BL€À æ¿=^2©X(}+ _< 7#Ô ‚±Â"åê¼®ÿðjÂÕSQXóø0j‹Ìƒ6\ÿÿ¾€;ễ, höž+€@/ï @¿<:â\*ûûúP0 BNCÑ3§\A€n ¡Vø—>ÀÎ""ÿþpÐÐÐßÿòEFÄ\c÷üãcc"ß¿çÿÿ8ØØØßÿøãc‰ccŸßûP0 À8|}ü´àèü%ùѾª 4 Z±ò~ñÏïüMâ‡K‚0 ƒáü63á-U2ÿÿ‘1U0œYL'ЉáµaQq“°‚ J¥[›ûÿ  ‚\$*§Ý€mËâI}šqÄ0`Õ‰: ô‘·ÿùÊJII?ÀÇ%)7@&JEýû¯, pÏ}ã"@“á/Úèÿ~ª» €0 t»'Ã7÷ý‰ž(@À7‹á±€Cõiïïú<(,¤”`{!—÷þ&x[êÁ ƒ%Á€pPȆoïöC°ß*õž|p–_D¿ß¾$ „?‰7*üÿ9iyigçúJÃRBA}+?+-þùÒ€¶_yUx¿•ÏÇF‰Z±+êcÔÁ€¨¬3ÿЙá2Qð0#åpá¨?õ‰ûýûBg„¶‹Ñ-WŒÿ¿q'‹ý_•uåBX0å@Ñ?+ƒä FË<ÿ¿Ù0`&U^|šµ/ý¯ĺ?ùÙg÷ùËKËÊ¿?­¼À`~œ,ßÁ€A@?„dÁ|?UÀ½ñâ¯@|bµa W¡µÀ`Á€r=ñ÷ÿ®B–ËKK¾W¾‘ÊÊSÒ¯ï§Þ¸ ެ€Q‡7ƒ4A@_ýdðè”%ø½T;\úó‰°ö0`Áüy–ê‹•^¹Ð †jéçøÒIJIºQñôŽR, +"øùI7÷£ç:L¯ÑÂSñï À‚į›:`U~t3}<&xmPA.V ð¶éŸ÷þ&xV†Bª}yü1ò¡Ïïæ—A€côœƒ˜0 ¡‰jÿ¤ñî~~qˆ²ïïÀÍP`¦OWÇ„!/ãàÏýñü]Wâ³¢g”€ ¥…a™0” ˆù[.ÿȘ˜À÷Úx²˜Oþÿ¡#ƒtKUáÅa òåQ·@¿ñø“á÷Ž©ƒØ x÷}¼ 0 W¾œ7ÕßÓ¿ÿñD÷ÿµðñÏ󈇈‡ÿÿœ4447ÿýb |‹†ò-ûþq‘q‘oßóŒŒÿœllloÿüã£ã£ßÿç ýÿH’á,¼¹ª÷2à`‡ê›|„ƒ÷ý 0 ¡›7Á€e¹)'ïû;Á€k//eñªËÕ«3$rMûþ)#Ò2Rßó’’’’~ÿœ”””“óôrR}1'*üýˆbàA/2÷ð0 ÅðÌœ¶9ùþŒ@Àr|¨¼Ut̼³÷þ!°`ËÇì¾LwLÊÊŸ~ŠPô¤¼«óô奥¥ŸŸ§---,üý´§¯üÓåfŸ© \ ˆýS/r.¤ ËË?¿Q¤BòwBð`Gÿ31/þýh¢ðÕ²ùaÝmòçåßß«.òÇ域£——?/,üýIVºç°€ j±+‡æ%ÿ߬î%ƒÒ^¬ÌбÿËúùc’ÿïÓ–—––ÿ~œ´´´·ûõ$¼¯êºçp„ Pü»‡åe_Ÿ¨úÁ€nÇæd¶ÿ¯”“~~¬•|¤£¤Ÿß§)''#þýIWÆ*ËÕ4ù)÷ê<€mÕi€À2—“ÉHÿ¿Q¯àÀ3þeü~ ý[/ÿ~Š?ÿ¿7þýH÷FŒÿ~¤dR? ys/‹‹ÿ~£J ` üe–ƒÎ_LÆF¿QÁX0 £úf á ~­ºø¨÷ø¢qñ11ÿ󉉈ˆÿÿœD<&ñ?ðsЋЋÿœdldkóüãccc_¿ç! ýÿ9  'ïùÉIII?ÎJJJIûþrRRROßó’’’’ÿœ”””—ÿüäå$埧)))(üý9IiIgçéËKKK??NZZZYùúrÒÒÒÏÏÓ––––~~œ´´´³ûô奥¥¿ß§----þý9iyi÷éËËËË¿¿N^^^]ùúròòòïÏÓ————~~œ¼¼¼»óôååååßß§----þý9YIYO÷éÊJJJ¿NRJRKýúrRRR_ïÓ’‘’‘ÿ~œ„„„ûôããããÿß§þý8èØØß÷éÆEÆEÿ¿N*&*'ýúq111?ïÓ‰ˆ‰ˆÿ~œD67ÿþqññ±¿ÿóÿÿœ|||ÿüä$#ãÿÿç!!!!þÿ9)) ÷ùÉIHÉ¿ÎJJJKýþrRRR_ïó’”’’ÿœ¤¤”—ûüå%$¤¿ß§))%'þý9IIIO÷éÊJIÉ¿NRRNSýúr’’’ŸïÓ””””ÿ~œ¤¤¤§ûôå%%%?ß§))))þý9II)/÷éÊJII¿NNJJKýúrRR2ïÓ‘ÿ~œ„„„ûôä#ããÿß§þý8øøØß÷鯯ů¿N..&'ýúq111?ïÓˆˆˆˆÿ~œDDD7ûôâ!¡¡¿ß§ þý8H8H?÷éÁAAA¿Îýþ±nˆˆ=ÿÿ8˜˜˜ŸÿùÅEÅEÿÿÎ2623ÿþq±±‘ŸÿóŒŒÿÿœltdoÿüãã㣿ÿçÿÿ9 øÿÿùÈHHHÿÎFJFKÿþrRRR_ÿó’’’’ÿÿœ”””—ÿü䤤¤¿ßç%%%%þý9)))/÷éÊJIÉÿ¿NJJJKýúrr’RïÓ””““ÿ~œ¤¤œŸûôå%$äÿß§))''þý9II9?÷éÉIII¿NJJJKýúrRR2?ïÓ‘‘ÿ~œ„„„‡ûôä#ä#ÿß§þý8øèèß÷鯯FF¿N.../ýúq111?ïÓ‰‰ˆˆÿ~œDDDGûôáá¡á¿ß§ þý8hHXO÷éÂAÁÁÿ¿N ÿþp0?ÿÿÿù†‰hx°`¢…yÓ}5< P0Q@¼„i¾¿ÿóÖ ø0 @ÁE ò¦úk| `¢…yÓ}ÿæ*-¬ ð`‚Šä MôÚ ø0 @ÁEƒ ò¦úÿÿÌ\[h0àÀ5 +È@›é´ ð`‚‹ä Mõÿÿ˜¸¶Ð`'Á€j ,W€ 7Óh0àÀ5 +È@›ëÿÿ1qm ÀOƒÔ X0¯!o¦Ð`'Á€j ,W€ 7×ÿþbãA€Ÿ¨(°a^B4ßM ÀOƒÔ X0¯!o¯ÿüÆÆ·@ H0Q`¼„i¾›€ ¤(°a^B4ß_ÿùn€`¢Á…yÓ}7@ H0Q`¼„i¾¿ÿóÞ 0 ÁEƒ ò¦úp€`¢Á…yÓ}ÿæBAÀ `A‚‹ä Môà 0 ÁEƒ ò¦úÿÿÌŒ“€0 À4ƒ +È@›éÈ `‚‹ä Mõÿÿ™)' `(A€h ,W€ 7Ó0 À4 +È@›ëÿÿ2RN@ÀPƒÐ X0¯!o§ `(A€h ,W€ 7×ÿþd¤œ€¡ (°a^B4ßN@ÀPƒÐ X0¯!o¯ÿüÉI9B @0Q`¼„i¾œ€¡ (°a^B4ß_ïù’’r„€`¢Á…yÓ}9B @0Q`¼„i¾¿ß³%$ä 0 ÁEƒ ò¦úr„€`¢Á…yÓ}¿fJIÈ `‚‹ä Môä 0 ÁEƒ ò¦úÿ~Ì”“0 À4 +È@›éÈ `‚‹ä Mõþý™)' `(A€h ,W€ 7Ó0 À4 +È@›ëýû2RN@ÀPƒÐ X0¯!o§ `(A€h ,W€ 7×ûöd¤œ€¡ (°a^B4ßN@ÀPƒÐ X0¯!o¯÷ìÉI9B @0Q`¼„i¾œ€¡ (°a^B4ß_ïÙ’’r„€`¢Á…yÓ}9B @0Q`¼„i¾¿ß³%$ä 0 ÁEƒ ò¦úr„€`¢Á…yÓ}¿fJIÈ `‚‹ä Môä 0 ÁEƒ ò¦úÿ~Ì”“0 À4 +È@›éÈ `‚‹ä Mõþý™`(€i ,W€ 7Ó€0À4ƒ +È@›ëýû2ÀPÒ X0¯!o§`(€i ,W€ 7×ûöd#Ü€ ¤(°a^B4ßNÀPÒ X0¯!o¯÷ìÇǸ@ H0Q`¼„i¾œ€ ¤(°a^B4ß_ïÙp€`¢Á…yÓ}7@ H0Q`¼„i¾¿ß³Ü 0 ÁEƒ ò¦úm| `¢Á…yÓ}¿f.-´ ð`‚‹ä MôÚ ø0 @ÁEƒ ò¦úÿ~Ì\[h0àÀ5 +È@›é° ð`‚‹ä Mõþý˜˜–°`'Á€j (W€ 7ÓX0àÀ5 +È@›ëýû1 @ÀOÔ P0¯!o¦ `'€j (W€ 7×ûöb"€ž¨( a^B4ßM@ÀOÔ P0¯!o¯÷ìÃÃ4ƒ< P0Q@¼„i¾šA€ž¬( a^B4ß_ïÙ†„ix°`¢…yÓ}3ƒ: X0Q@½ i¾ÿß³ Î è0 `ÁE ô¦ûft°`¢…z@Ó}ÿ¿f ˜ Ð`Á‚Šè!MöÊ è0 `ÁE ô¦ûÿÌ (0€À5ƒ +ÐB›í À`‚Šè!M÷ÿÿ—÷ö@`'€l (W „ 7Û 0€À6 +ÐB›ïÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿþE9 ,!"„h 1?ÿÿÿÿþ2†ÇêVM€x4À?¦³¬çN³4ÎÑ8W€Xç ‚° g ½lþ’†Vw½ïg{ÙÞöw¼s½ç;ÞáÎ÷ë™Þöw½ïooé-ló8V¤Â°¬ô^}.i¢sÉ~8éæs§usǕ͞Œ¸ „0Ï^ Ð;€Pë:Cóõs§Úγ:9αÎtê·3;µ€U¼îÎtè§:tû9Ó¬çN³:9Î>Îtë9Ó©3¸óÖs§YÎg:u|ñëYÖs§RgOg:tS:}œéÖs§WΞk:…=I*€Œðüû[¿ÿý¬õœ2 «çϱžk ›Ã%sǾÞz¶xuž>¶z``ת”ÿ ksßÿÿúùãµóǶ³Ëg½W/?г§¼u>ÎtëyÞÞuœéÝ|ñê¹ãÃóé3§3:Ôä5|X ‡ÿû[‡;ƒ#ÿS  Åçÿ¯ëÏØÏmg¿þÆzÞt^p+gŽW‰C3åæiÒ/¥&&&”!œ€ÔH TB( 4^~¶wÿ[:Æ{ ¬¥©â¡èøj¬3 ›ýPíUÐhߎ_QÒ0ΰõÜ#3÷ï<Ò¯ø\CéAƒ@?ºxè£<}|ñá¶tûÕsDZšQÇú~<¼¼ÎÜp*eÿðqÌM†Aš>¿ï{éà§ \^hH&./ƒ@ }X4@cv‹(üÄ ÐÁ ²‡Â2°(ù„J‹½Ç€@£:á7”ùñûƒ9IIYO÷æ }lÅï­éȼålà¼í|ñìBÄ‘ð40zïùX4 §ÂŸ`Š_A¢ÀhŸ¨4@˜mâ=P’ƒ(¨•H†ÂH00ž" `a`0pp`^ 0ýãóÕóÇ›ÏB‹<üpœk=†±jEÅ€T_ûèkø¸ÇÅÿÿÃ8ÈÈÈÇïð¦Ð4b_ ðŽ8\;¼>|2´åüúÕÙÇg÷æ «é§x|ˆóXˆýô¸¸Èx~$+ƒã6BTÑ9sZ Óã;VÚ°Ü/<%µåDÓ5[•AOŠØ#.=WÜ>‚à V 04`LOÆDmƒÀÌQ—‰ÉÃßÿðÊF„Ÿ«63Ï ‰(÷ÿ4è—á Ñx!“ö¦Ò¹òQÝyz R m?¾]Äá}à3hÈeådþRm~øý/ã‡þø4¢v¾x{hYãÃ6Žÿ¨TdèƒÒàaC2÷3JKž_GAûÀоžóÆí+Ýwÿˆ>dQ†`#è4ªÔAú”µ=)Òñ÷äUߥ*¾œP„%J¾¢J¹!){Æim®±Pf_°”K…àÐC)?*ð0 ª“G9÷¦kÃýÄ w ‘:ü7¦Ð((`?ª´è) Ä‘ò¹K©8ŒÚ·AûªTXÃ÷ã†aLÒ¢"çs(ø8` þtò§¼)µ*sìP’+Wƒç Á¯ ­Úp~ aLÕ¿PO”ÚØÏô'¼FÑpÿÀhKÁé–¼Kž<Bð ⢢¢ŸßE÷áNqØ#QØ#@|ð2$ è“„„PËýûïͪ ìH! 'ª”2&“IB7ÃN+õY[ÇBHˆ¬?Ê1>7LùóáOGàiRGÂq,~•${@àöb¨F]â‡ùY‘÷› ’òà`a {‚W &6wæû†Õ1TáÄÔå è–:8$Dßï©dÑ~M¡(“‡ùƒRíP ¼ÒΕt¯ý›9*þþ'ð`a‹ƒý ä0Á„T”3ðd3`bœ”éèÀSÃë°ê›/ïER `~Q‹’+•€WÀ()° WDrä ÓA 7ƒÐ`þ©iÿ‚•RPi Ä‘ø0O€ÁýуÀ,)Õz¡óoø‡¼ð6H€‡RùÓ À)ÎÁƒý|Ãã¿ül)Þ|5cñÊ"yåÅÅóê•ÍkñàÐ×ÚƒÃÿa§1ÿ<(ÛëoÏÕðjãè‡ •AúAÔFJ—Ž|zMð &zn>›6zôD4öâ°Ì)Ùw¸4ùÓÎÃá—¾®–†`‰iÓÛ„àÐ>AJft3áÇýé¸f^GU{øeZ“‚7ûçÉgð*/.’ö¼|ü³¡ j®ä4©X40DsA¡{‚›Àzx¹_0'ÓêèŽF!’ž<èäß í`à=ÿ§€nV^(?ƒµƒ€÷ Àö«¯~€üV O+ «ÿÀÑ?““@öìuðÌùòqûžÄ¡j"HøGDð À)\ñèW&«8¬½Â]{Æùóåá–3`-g—xÍ)>]áòh`ÀŠ$"8HN§ ÿ†c3‰^è •A Pô¡’  ‘©I°Ô Äfþ „²ê ä ð3Ç eÓ…ÿ ïããu>|øS€K耯V%´%$ ô'ãÀÐò^àÈüL?ÉÒRˆÄgààh01þH.ÿ Þ‡ÔphÆm>ó]Ãj)·3ªRp2_Û€ÒOC´ñçŒë{H€ïÓ§ªî<ì»Ü„%ú¥+—E†ËÁ§~?k“Õ½Cj”¯Ä.¹nCÁMº¨І|¾«<¦A‚¯›~CüÐ0`a¼”3PÑHýâcÿø40ƒX€Âˆ ¡WUcðh~ËÄh~À.PÕOD ‚Ÿð`Ÿ ’ƒMGóø0B߈¾J 4C`Á>ùFÐ~+xQj¨0ÏÀ}UhGÐÈû€ø `h0,á —‹å¡¸0`çAƒü˶½ƒD ¨v\ALÅEžÎÀ¬—â:°"1†wÀÀÃGúܹÿTœÅÃÞÐ:•ÐØ!¼)¤­X(•æïþeâH6°aÊ€)3cå ¾}FF÷^è]hõ04 ANþ©T_»F%áŸõ®‘ø¿ ÐÁ\è¹ZÉÃ%+Á<¬ï¸:H # XzÐÌ2â@4O…Ãqˆ0â84€AM9¬ƒEüœ ¾Àh`üàh!Bš^´ôŠÄb!(3‡|2xYûG¾û\âVÓ½áXgï2Œ_÷œ2 8ÿÀh1¿ïD÷ëÂñùA†ø ÛA€Aº gÀ«Å00ß íÀÀ ƒÙðhÿŸ‡Æà…åÿ‡ð*ãÎþ‘U@ÀþPhà•ƒ@ 0?AS@¡p”¨%êãNDü àfŸ\uZ¡s•Ï«xR‚@dD¿ OƒäÅà  ü¼ÁùöàeáM¯ƒE%hïΦ@;̓@ ` ’³?ÿï\!à4 Ðø– 4Ã¥&˜è)| @ Ð0Ažƒìâá!±,?—Ÿ©óçÀzp8@‚ ˜4OÉ à=00†MïÁ”%w € ¿:I—°ÉM;Éßá›Øø`hÂ’€&û©p40€ä$zñ\X`¡á GÈÔIÆžžTÈÑ ãÁN`xuþ÷k=7ë2ʘ_¢?€«„±, Pi¼ â° ÐgÀËâ(8)±‚†â¿x8SåÀÐ>Aø0>ð@Bõf@,ðSHz *¤¡™=x>TCU>  d18 x  Ð òñ$µbX0?ì1ËJ†RÒÏÏOºK’‹‚’ Ø0Ÿ’ä¢á,K ì?¿Œ «zH¯Ð4­(4•PíU‰Ã §ÞÐh@Ôp½Ê€É4|Að0@ ÓƒCö¨‹•ƒCø\dh0AÀÑþ…6À,¸¾ŽÔƒG­X40£áûQ 4„Åãóc/ è¸âþ"‚ SŸñÃáM0@/å¸ý×ü¾ ‚a?¿—ˆðH€ï FpñpŠ”@`~ 4€j•ƒLü!mµOƒô} 5ŽX ôp•L+ø40@ÀD°iÀñ?{‘0š¡„¼ ã¡ hŸÌ…x7¥ˆ}áÃî<: ç€ (°h!=Mü| ÷À(/° pö·‹À z ß‚ÎD÷å`Àýƒ@öÏ(ä_è;W¯|¥Þñ¸\ ⯃D"—Î;ç+ø4?ADÅ‚{¤GÁ¢ýV &ð8zåq§U`ÐÁV> `¿0¦ÀpúrŸòª=<<.Ãâè<Í ¨dñ.xôì_^1‚ƒæÍä • @Ñãcc"ß c…ÏÆfjàŽ©,Ëò‡Ð 8/àC£ ÈðÌ}¦ø | ,|‘É´•°a Æ òt–[£I¿3i@0?gÇÁ'´â[ýüU Þ¨HƒÊ=<ñž$à;2ðœÏ $Éjàà= Âõíiò$Ž ö>)˜xáøý^—L%?ª5νåþhÆD0ʆ]éà ê.œ´‘WšpðïýÊ3"Ptà4_ßøf­ÁMЬ™ÿÿD;`_æ«™À§Ï/>! êA¢| à £A`À7ƒàú«€`cáè(}*piŸ—>p2 mýñ(4ÀBYÄ`iž§˜xüxÖ !€³ÁFÌJUFý¼/ Uàh {ŽžX~CS+¼œý‘•IEÂZ°`Ÿƒüxëœ#VßÿõÇhC)N¢žŽž\ùë<=# i—Í×Ç¢Yá.t·“9|³ª¢~ðC‡ïÐăD 7£ýÄá£p€Àà4`B0bÞƒ4^ ø4ð#û€'ýö†žûÑÁ‡““Ÿ 4bPClHíPý± ?¯¹R¾‰@Ñÿ 7Øx( Þ€ÀüI† 0NÀÒB]àh”ë†Gõ°ËàÐ\>p4_Ã|¼|ª ‚ pq8—<{C1{Æx0@Ð9Ð 6asz,ó÷øŸxf~3ôáyplÄ6Á÷ŒñåSñ×Nù[ÕTín˜6#:Uã " éæ'EÀuÂUÛcP„}¿¦UJø”<ú°Î…‰™®÷ËÔ~BÓÂ8¢¯tKòÅÿ£X%ßJîHX0> à‚XÿY4O(îjÇÃ1š,ºó)òï~+3§À$gJÚp0öøKáþl±åðÄxÿ{L‰t3££OñÕãÿ½Á‘ð§ŸkØuLQÓáÁÿ«jŒ€S†ik—ÊÚŸ,³½^  ¯Í¢Q­‚5¤ãɧK¾#Óã4 h)áä÷Îuâ4¾¢ÉEœ:%ûó¤¥ÿ/§¦»»Ž‡ÿ¤Þ%òƒ":T%)/å£5bÛ4ñ~p÷ƒ1kè—Ï{öÊxIU› « ¢QvÞl}€fÅ–bsŠÕ³æ~ãÁNJ„¾—¾*ŠZ0ª¶ÑñÅCñ?ëA†‘ô)°0¯â="Ð4ÿ²Cá$ƒA÷ûÅ_pWÕ}€há$ˆ Qˆá·)  p0¯àÀÂ*è2V"¹X0@ÞèOÑÊ‹ÀØBôKÁ¢ pHÿՈꀠ4º 07o¤¿§à4a]W ÉhA6AU°†ª‚Ч?ákßç8qålŽðþA1£'‘:iƒ@ö^Iñxè‰7éÀ /ÁÑ€9u¬pSê® DU"ªb–¹ž£%¼ñ8Î_ 8|zgßí¿rŒ€Z°&™ =Qz4š;ªºoÀz’4Ë”´lºeWà â`È~ ,Î;ÀÐ=¨ùá›cýämÿ$ò‘´øSe‚;V%V®(œé­í’ †b[‰Ä¹ãÔ3ŒÌ þoïQA¡~¿3'p1^/xøxÎÕ_ h÷ÈæÁŸª¿ÓÅÙí¿†ÏŒÛ/7óÞú|$Š@¡ÃÃ4Îd˜dá™<;ÈîÌÐh@¿½‡š~¤j³X&T”ëz|VLऔ|Ž †fÇê¾cÿU“N@ `üƹ3qÐ|^Ð4@C¢ ¦þ¤áš ìœáž%ÏOb®6å*öF Î ä$Ö ë&ò8ÒgÛ—Þ#lwÝ`–îõÂQ ¥¸£ÆN&ÝÓù„ù܆v¨‘5 Ü—ë*xŒGÂQ'¶+P<¯5G„V•üü`—Ý<„Af9®ÃŒƒA ?âuCåFnƒBÓWæÜó…ÀÓtôåÊ9×Aû[˜WZ"Ò¾mÞ‡°ÈèS@l!¶%úëãBPýW¨!F°Ø@MùwÖx–=†)çÀYûXG® i~ðÁìÀÌKú¿ã¤Ø÷4¦WŸ®ÖŸû“7õSHj¯¤xþ—Ó¨‡ÏøÍÿË›×ÊÉŸÕG¾á*sÁ˜Œ¿Uå#²OÏ‚á4ÀZ;߀MpŠ×•Þ=‡?÷«ž= e¾QwÞPh¼úØ4PÈ7‘ØC#"yûý1çyÑŸ¯W:m§¦Ò¥68w?œã’šWpÅ<:„ì§„{ŽSɉ8¹“çͤu*ÔµÒõ²’(DšW¤Ãà:LõgN*Wcg§ÿêmX4 @Ð!ÑÓú¾Ï þu)÷êZe9¾ÅƧHåJ5z_Ü\fМó<%¼8húuÚ|˜ &¾ò«`4/Óù¸|æÀɵu_ᘦš×¬îTïò³xý{kåPâ©Ç^¿‡Tõì·yŒgÇÌÀ d)ªŠ²23½¤)³ÐÊÄGR¸î5§z^›Cõ'é°Ê¹"Éä£Z§¼š^”÷¦ò¾ÖzËC hü\`Ð>T€ ãcã£ßÿÚÜÇŠñyþ/?õóÇ…çõsǶ3ˆž=Ÿ«ž=‡Qn‰‹€ 3ÿÿT\\_ûû€‡üþõ@DñàÎ>B>AûÿÅç×ÏŸ ç\×À,ø¼ÿø¼ý|ñílõ\ñí|ñåóǺ¹ãÊçF`‚%@C1(ŠýY¥óçÇçÕ83~ÿ[V÷€Åç®ëà|^ü^~¾x÷W/Ÿ?ÿÿÿ×ϱ¾®x÷×ÏÕÏW}ô,ø¥Ã7¿ÔÀ(˜Ïµ€Sxÿ·žc=ÕÏØÏ7žÚÏ+ž=ˆ`Y `Ð=„hiá,DŸsëašø¿Ã9)) ÷ö71ŸÿúÙîÆy¼ö¶y¬ó[þ®xò¹ãØk ÄD 4ÿÿô,ûÃ8¨¸¨¿ÿõð }lþ¶ 'ûyÿÚÏvóݬóYï_ßÿÿ·ž·º®xê,ðÔò›Þ¦ñ¯BÏc6Öxiš4|iœ6ÿÿÿÿÿÿÀ7 ½…"„h 1?ÿÿÿÿþ?•¬hÎ47ß»ÿÿÿíok3ŸÀËÿÿÿÿÿÇþ1©¸˜À+ÿÿÿÿüàh€Çàgsƒ8xhxÿÿÿÿÿÿñÞàh¡Gîÿÿÿÿÿãl3Š ÿÿÿÿÿÆL2 Þ ÿÿÿÿÿ¶ Ã?ÿÿÿÿþˆ2 œK¤yËŒ|xgÿÿÿÿÿÿÿD`€˜ '‹6ÿÿÿÿÿþ¢ƒEx^ÿ†qñÑñßÿï?ÿÿÿÿ ô2R ð½Xgö೿ÿÿÿþèd͈@‚øðËà'¯ £½mÝl–îÿÿÿá}àÑ~…ÀÀs…`ª{º»œÖî5ÕkÕ»àŸðh_jh  7—›J’³gËôÿÿÅïa“›J«Û‹ûÅà]âæ¸÷¼*$ áÚ?‹ßúß¼œ^¦à ¿¿»åÀ'Cîüj\]|p3Gd—ôááø4`LIƒ ÌJ“‡ á”éWÁ¡€«¿ø4 NIJ¼vC’‰+?¡ýüøþ†h° >?zº° Î1†uj|»#¡öX@Š×& ÿùÅÄã|2õ6z‰`Öÿä“Ôâe.Ãêü«qÖÏW-1Õ|~póOJæøáø¯UàŠ€$ü'MUÿ¬Œ‹•ûL}PéÌ“"ŒœIÒ£¥Þ€#œrt«k½—9J¯tˆ~§¼Ê ò³â:ôùßiùüÃêƒ'Á z·U_#x‰ÊlÌ{ÄZ³ç°œÓÅ´p¯l5úåðèó׸”g`ïW«'. Z…i§C8ãî]ÀQáû†+Ê $n/Yà®ç^À†$$$%þþäIs”6] "Ì?®N‡â9á({A¡‚÷ôÂ¥ÙNüõnðf­€$浂˜g-/+,üü–^ù,­…" a™âUDêÿ ƒ1®<”–´ç¥‹Þ_Ç£Phi°hxdáðeó Ð'N†Vœ¡’ö¯ðù}°l¹êày&óÇSMX4?¦G‡<¬ÄZçK‰J^1Q4:àhx ‡ØBÖ! (†pÜ…ôÿÁ¢}$r,×}¥Ù‹ÜŒÿ3ð`ŸA ý& °%< ‡XøD©±!*lKÿü3à(Te…ÆÏŒ ãÎŽ2`ʉßÍp•=þ#¦ü3þ€L&{Æx4 Šº^  h?iƒDa«Ñˆý¯*Ì$³Åí½Yõ?@õA  •ú`UE:ÉIú³ ™§W…íÀÑAɇ[èd×O!tú–HÀ)S„yqàU×üûŬðaj4ÇL8sdyêá—œÆö±@¤Ô7㇘4`ÐBVÃ<}ž_ú£ „eÞh)˜jİh_O"|MLƒ³ÿÿïG€]2 E‘øb«ãeÀÐ>†MÚ· t|ÿ¡q° ï€e‘ Ý0¯Ã h¦àµƒ(È'Ožõ*¿¡SŸü>pʓޫ€¢  iþ éxµ‰…Y%0&ü¬¿CÂph¿A£~˜Ý¯¿EᘚÀ.› öP4ªÏ…èóÅÐ4_Ëb±®$sVmä4ϼC°ÏºÇP‰g¯Œ_Ê«á@4â„þÔp4Bòó SÑf^yÙFê­° ¯ Ýsô’€Q¶åDª_LAšV=H|à4‰¸Bû ƒdù_ާ•W¢ Bð4/ހпZNώ€03µÙ ì ÔøçÃ%rðV¤”e È| ö>c7ËåÆj´øú@ Š@øš0 VtzuŠ!gV ôÞ–Õºõ@L‡öÈ)u€Ðª…ï† ðújª«pBøè4þ<1ê¡÷†T3S÷éå^º`Mªð4?ÀWå`Ðþ@hŸ´Èc:Ê@\€Ñ> èÉIOÐh€„*WMž$x[ÝàÌ2äHþ†BŠ>&Ø”ÿVx½É¤¨z@пAðpÔܧÙÄÂʨò:ñú†GU± 4OŠ ýÊtoã{ >âñé/Ã5ZW3 ¼U`)4`•ÍÂÒp(4>Ÿ[¡Ó¡zy~ª}ÕLzzµS:}ž'§G´v ž€‘( ä¦¾JQÏïáÉ_Tõeá•…ú†Iº£þ•jì:™|àÌ÷Þ3Ã!ç£Ã%`|uf:ì€Ðÿ?(ºß(4?Ã"J9§ÇjOªŸ>1†J~l»Ô“Ph_`fþHÓª*êa±8| d¬2 -P4 §ƒAú §N‹”ïÕœçÞKR®•t«ûè“^ Åy$v#¢ó€÷—ø{ú ô„mÀ > "%'“úiÁ¼H /ôøf›gMß:hñ'ê¼î¶Ý8#Ã8øQSÕƒAuÂ+JÏi®¡’éOvãðh¡7‡éZÅu߯:õ×תNÓíjžÝªpä ç8õ1»´Ç©uÿicÍXq’XaÀÐ>%ÿ_#ŸÚDe0ìw¦½Ñ@†l’ø4¡ÂH2¸Ðh?»åå域¡°ËÝü<­ïJÕ<ö7E?#üyÈy8ehÇ$ªKÐÍìŸ,¹]&J¢GµÇ¡æ·,“šP­. @¤&]¡{AŠ£É`¶ë¡~“‚ÇŽðÀq‘qQoßî–BFBAïîÿ\“½à»Á ÁÄ¡“ßÿü^îçÿÑá˜díÛqþæ ÿÿsÿã2úÃ^€ÐÁa§†q‘q‘ÿî$¸kœà¿ÿÿÿîÿøü/åÃC ÉÁK¾/wÿÿû‚ßü Ðÿ>ÆGFÆÿÿ°Z,ÿÿÿû‚‚ÿâð p1`78ÿÿÿÿÿñoA |]ÏŸÃ$ttaèßÿö0 ­º¦ðÏÿÿõ·ø¼xgÿþÞzÛ¿ÿÿÿý¼2ÚÜÆîÇÇÇÇÿÿÿÿÿÿúå¢)2àoWx±½­Ëhî ”Â ©L*ÿÿÿ±…_ö1¯ÿÿÿÿÿà È §"„ h 1?ÿÿÿÿþÁm6x#83é·¸¿ÿÿÿcÿ…xLð40EàÑ}ÿ}Äÿÿÿÿÿ… @#ïC?½Á_ÿÿÿÿÿ Шaφnÿÿÿÿÿü)™ƒö—ðÄ—è4?ßÿÿÿÿþdãðhU—ƒCú|~ðh…Ðgÿÿÿÿÿ‹ðh¾^løüÇ›‹ÿÿÿÿÿßåàÐþ«/‡ôýÅÿÿÿÿÿÆV_—ƒCú*ËÁ¡ý>)€Î{ˆ¿ÿÿÿÿø @<èS@ ô/üsÿÿÿÿÿü ÁvÄ4¿5ÿ %Œ3ÿÿÿÿÿÀø ha«àÁ y‡|e%C/—ÿÿÿÿÿX0haá x‡t” [ÿëÿÿÿÿÿ¬ 4ðêkâ C(å—þ²«Uã©«ÿ\%—¨`Ø4k§'ßàÿÿëI^i¡Œ·]é±ÊÕ0ëÅÿü11>;ü2ÿ€_‰·žîãxH«íj„¡ •9@µ‡üÿƈTŽÞ)‘}V‚‡„çIJýþ/±x‹À/üC ª˜ü aòñõ8ð 4Wò(=ÿ4êÁƒ h¿„ir· (UƒCü/?ÿ /î42ðø 8^b÷P·8 1ññç£Ï¿¿ž ä$#äÿüfšrøˆ 'íb‰q i?”X˜4OÂ^2&¯‡à_ƒ5È8–?‡ø~%ÖYÀÎ%%%(þýø¼ÿÇô2 u*V>ÎS„|)À3æ1§tÖ4ïCz#†b<|f*‰øJ‰÷ Ï›„^ÅÅÅÅ¿¿1¹Çð¦ @ÐÁ€Z¡ 8ÇÀÐ @Ð Õ†bøàÎ:::9ûüa¤\^óÄÉ2ûcª“ƒá. R,ë€,xÁ(ÐÉàã4ƒ%T3=ê\tUý† O‘üQ@$uÆ^2¡ü<ôI»i×ÊD *ª ÷‰()S/ Õƒ@óÁ›á©,' ¼ð¥*£*‰H1î–@f|_à …0J%`40o0; ƒAç(½Ñš ôa(d%ÿÿÒ{Íù(d¬ 0 H.úu[nÔ!zŒHAð0O€Âƒ@|ã4Ó‰P¡-Ã[x‘ú/Iá€SµTG‰^Nªˆñ+ÇæBœ>+ˆƒWÄAª°ÍDèg¼ŽàdóïO ¨d%Aú äóª.PÁÂ6ÔÔôQíB%U`y\óÃ7Hg˜“â_O ÕÓ§†lßúd’°uËËêç"ñû^ …8þJÄ¿×ÐËåâ;ëÜ#’·Aù\ ë„ô eúÐdëÞ‡e§T›W#$ÀÐ=ž 9þ8]OO€ZG°Î†I®üú¿.ïCM%N<Í £4˜)ª¯›ñw¨H¤Â¿ þ÷ÀíHf­ÃàÍGC(¨tïæƒBŽ fxÔÔÍðfnOó C+:nûØ¥mSœ¡ \KWß;î/VÀQç¼g.ð4¤ÀÐB†`2FEÆ‹~åøk`]ZƒEü#šƒWÆ@jƒDtFÇÐ8 $  Ö¢Wƒ/¸ZƒAù4hB† /NÆ¡‚Œ~|æ|f–0”2WA¡†—üxD?.†5¦Å©±Oÿñ™Bý¸ V„2ñÀÁÁªÐÌœxÝ †h´'Ñ-Y@4À^`ĵ`Ã@i`£ãcw¼~ø3 p8¡,D§!x Ô¤AØmÂY®”ìø?šAô¤µ_œ<š™WA¡‚¾8…;t,8qØø¼DgOª/W`óŠh¥«:NyT à0¥™{ß~ˆFp1­ºZÊÁ¡ƒ§ÂºÕˆÁ‘z°5+•™iü`ŠxЄ ߆# À $@ÀÞƒûT1`á 8H0‚áóàÐÁ8$`¾¤œøúG`40wÌaJ€ k…€¦}/)Á…€yÑð45Nþ #¼Ph?p %b fS~ѤR Åüþ»â f¯Y¸|£Êx*—~~€Y0Ï/Ž…øÀËî 9~÷1þ.Ég™3„àd¨f#–ŠªŒUÀ¿í¾±*A ÄTžaÀ2` È–åvvyA¼4¡ É.?ÿ²ð5›=×…4çèŒGåf‹¾"AûCW©0¨ ­€Í@º4vÞ+VJ#@ÿp»t÷ã#ÿ˜' .÷…X QíƒPh€¿eïÏ GV?Ãï¢~ Ð>4à„#7W¨n"·[!/p‹å‡ø_1‚ - yP40g‚A‡û#ư@$¶ HCœ€0KhuT2˜ÊâUå¾ Ú h+4ŒlðÅ †h/Â#Ä’ða€ ÂD?V 0–2…,hê A¢þT­ª”3‡Á€ˆøéZP j`hj$•ƒCú"ÃÞ…ÀO¨^%>ŽEû> ã„ñü~ÑËÛ Ö Àñ7ŽƒÑA`áJ\$ñÐ`“`áŠ]þ\ eñ3 r/\‡ß†¼Ÿ U`ÀÂ! l,Kû)ûþ«W_õGøo@hÿ•°…;æ9PüGª²ÿƒDü (fbóŽÒðh€Ùü2€¦Ð–%P6ârð€ ÔeàÓ¿HR0l‡‚ðJyTà4€vµò"`9•””eòo{Ýô !šg‹§UЭÂWû Õ?ù€i‚¬ßAJò@`¡C F2òÿ´JÕˆåȆ:fÛñ° qãÿ ÂŽV ¬;ÿoÅÁ€r¸àQîÀÀ(A€l/¯ÀÁø£ `Aì/ùôJ‡ö â8dóêÕˆÁ—Ë€ÐgðÈ#»ƒYí¬}@¼Æ:` hø øbþç±ð0?!S@;Rëb©¡¤XŒx õì ‚€Ð,ÿð`ª`GàUä À.(^ ¶°`|‡àÑþ¾@^l_¢~… ûÜ € ø‰"OÁ¡|lltkóüsŒf‹œ@ /ð”‡=ÓšN_:C4tv|ÖÃ@п4‚ýµIãÿøö—) >ï‘©†!`0/%àÑÿ~4{×Çœ»½ãx.=UN‚’«x€h@†DlGÎ9B­‡ÔñÁŒLMâB_ïâ4ªùE>ðA&«œ ‹ÄcLÂÝa1“*¬˜¥ô„‚ñ$ùà¿È…Š%¡œ€ÐÁÛ¾0 ØS@d *ËÀ¨z Âp/JSÍ G­x?àh?‘Ó@äH/ ¤YÿÓ³ž€Ñ>¼%\®+ƒCù(ª*u[¿ì8ô$BŠzõâ|Ò9À ¦ Á V òd —þ¢¡%iaÑìJÜ2Ašø|®ç_µƒ0:!ƒàÀ‡—H0&¨°`D« Á8Lü,W¾:ÙŒ„¯Âñ/ðÞµôÚúöUñᘯý»çQ+ê Ã0¢IY)Å0¬—>Œ`00ãäŽ0*>T JUŽÓðƒç>‰tᘀBæ/óÂX—¡º¨ü3…p3 ãÀ'åæÀgüçö÷F*æœ2¡T¯pÏ£ùÍ\ÿ€*î­ºãšm„0Cà4Û¡–¿ ¾ ì® y¡þR@.€Xfç&ĬDyêL¬DÞ*€vÆaúÈÍïß)84c! _½—ôİh!'Ýí'€_À$àf—§ÝLjJ #îþžznàÎ@ {. àŒÉqzº 嚯û§ÿÐ ¢lŒÅ'Ô‘[‰B½yÞwÞx[ÓáF›i)ïàõ9è¦Û± f]ø¤ðQ$\ÌHîœÞ¹†Á ý´;5ãÔÂmÙòs”ƒñLuŒ8ò/Òȹ߈øS{- ‹ôÓäÔ™R£*àd #‰3 Ð¾½5:ç¨x‹xoêß•à)£¡“ð§€Iá룄ÌÁ¡ü¹ÅW{Àb|||ƒû¿Ûw²§+¹èj%C$}ÛNkd nOdžfzƒBô':®¡fÓP “ǃ3é;A¡~<ý>DýwC'MA¡8ç¶mêÈ3rêgÙS“ÎHçN9¤Ž´Ì2eÞ³½í9§k€Ö hc!€sº äcègþ.U`]ïVW¿ÿÿÇ»Çïîü{¼{¿ñûð"€h4?Ñp n/þL3~ÿ ã¤#¤¿ÿÿÿÿÿÀ‹ zqPÁèŸø0h0Î6::=ûÿowÿÿÿÿàE†Óñ0Àÿþ kø¸§ÅÿÿÃ8ØøØçÿú»œ¾@ÿÿÿÿø‡ ⟩ñÿÿ€^ñ¼ß[pg!!!"ýþÞ_ÿÿÿÿŒÈ§Á y¢÷— ÐÁ à¯{Ã8ÈØÈÏÿø ãä#ãßãÿÃ9 ùÿÿÿÿÿÿá´XCøÀh¢?ÿØï­†A’::4ôwÿû¿ÿÿÿÿ4˜ˆ± ÔGûøfÞ åmÁœttloÿÿ†r?ïÿÿÿÿü Q@ÐDÄyQèŠÿ÷ðhGêÃ$ à>àÎ6667ÿýÀÇÿÿÿÿüf¤Þ}0Ph“Ô&ƒ Ø0­àÀ ƒMâÖ&ƒ Ø0­àÀ ƒMãþüQO‹k€H lVð`¦ñl€H pVð`Á¦ñÿÿo¦÷u°© Î)½ÿÿÿÿÿÿÿÿÿÿÀ! È"„h 1?ÿÿÿÿþK„ª=pøZ0AW¿ÿ[¶7ÿÿÿÿ¡ƒ~?%C þï÷öð ÿÚÃ?ÿÿÿðø*ƒBþè1(_ðËýûÿÿÿÿÿÆ0 *¡ð40j /{¿ÿÿÿÿÿpcãPoƒƒûèfŒ îwÿÿÿÿÿ P0p|hÿ p– à  §ÏÚßýmßÿÿÿð%CBC@ ÿ÷ÐhÿðÎ6>:Cýù€ißþ?wÿÿÀõP4Š ƒ@ò?—ÿÿÿÿÿT;¡¡Ý ÷÷ÐhÀ‡ÿþïÿÿÿÿþhgþðï¡›ÿÿÿÿÿÿ…( ÑAC$ÂHf?òàfð2àºÿÿÿÿÿ xdA |ÍÜMåÿÿÿÿÿ šº ïƒ0† àü~ àü3€Ëÿá–FJJOþüÆÿÿÿÿáN÷àÐþªxôà ×—«‡ð~öà`3cñªo9è“;G°˜ºa?Gÿÿâ\3BGˆ‰¹Ê7Ï…ù‚ú{ã/µ»Àê#q0€À9›‰?þ@†_Åï¼^ñUÃ5`Ð<äÀÎô3xÏôñÒõrAàh_ž¼‚ûUCÁ—â÷ðª‘wýHÁ |&<"g e„ê€(E¡÷Õ(5Ðç©9 [€Õïx.ö-Þçuð5„Ðh¢¡ x‰ÿ  C&ÃÀ/ÖÀ,^ø½ñ÷+ þJÃ0 6àÈÕ¹ˆ!ÿü),ñ{€,Ï%Új˜>Ašp&\­‚Ó‡Ã' A»¿±ÐÀ ÌKá yŠ€_ Æ$Ë„¿ƒBc•ã¿ “L¸¸»àÐA„&ŽÕ?18'Œ‚*ÿOTDL3ƒõX›xŽ•AûàËǽãÕÀa‰,D$&"èÊãÃ7=:.>$ž0(Sà#L¿<õà:xS&)6h‹•Ÿါ†qȵD ù¬00T?€Ði˜ä/€Q6`´¼K2D·<|gÀ?¯ª(PPá"Z±.ýT‡Ã'«Ðh@†F%,3Gà’ª ~ŠX–ƒ0 ¦TpÌÓ°h@¯Ÿ<n I+£§ƒAû {“âÿúúØdzIueÊÇ<*ÏøÅàÐD¼[À0^”âà*è·p` íú?š}T è2 Ÿ§€0¸87 c Àƒ\ „©¨[ó¯ Ð=€ñð`ä À À º€`|‹Áƒýxø0 ÀÉÁƒƒ£ð`ñƒú÷áñ¨,°¥ï‰‡Vø˜È±oŒŠ|[÷ùðÎ.6.5ýýP€\2¡œàh~KGÀÐÿ†cÃA¨•6$%M‰ÿÿŒ¨adz² VÄd(^/@øª°3x½áF€JmX–^«Â8’”3€P‹iΡÿ|†KÌ_P6DŠ üGp–k„ØúGÀÿ¥LzhJðùß2×M4¯©½£²y§ œóÉ$ù<\¤ˆ»‘л÷&‹ †cûãО+Roàa+¿öÃ/Z°h ÂŠ@ð ¾h3?OxôˆÄÝ$°àå¥e¥_Ÿ¢~ wÿ €![$•ƒ@ ÷8ž€¤/{à0@€Ð=E=†žƒäè*~1—1 H0> ?¿ŒeÌ=ƒ /ø•Õ@¤?WÝÉÇß§kèdÕúh¾;Yóžñ]X¡—Ž“Zð L@ ÿæ×9áMœ†GåþçÉ ƒ/€hÇ…9‰j¾x¿A¡|VJëhƒ-3¦„Sj̼xÓÀ )FñáÐ< èßá’ßÁJð®¢]úU°Ìvì §Ù1àÐ}ØÛ¼?Œi€¯1”¤ÀûÇ…8ï!ô§ÿðh`㏠ã"ã"ß> ãó€Þ-Øð`z‹€«¢Ý€2š QpðÅùÏa°<\ˆ@,á hX†.IÂ!GÀÁ>Gøü?éB íDK¦ƒâ?¯"o€À À º¯©ø0¯|Tj âøè¢@&&)ÑOpâ¢ââߟɀ‡þþõ^pͪ©¸\_ngç‰j” ^ù8ý È*@«¡;¨d3º"À`á#€§.2øü3ˆÉy[_!*vú´—xÅiEÏÛœÕQ~_( à–C8xßÀ«Âœ;çÕ—xÀ ‰cà<JÐf<è4ªÄ_±ÐÓ†/ý4ÿÓZUòÒ¯Ïî l+óêçÇãÿN‚œù{σA&0x`@¦ÁËÿnÿ_¦€0¸ISü#ù— @* p*¬ Gýõ`ÑÆ ËÄpÉU5DBà*…8#Vn†Jãn¤àÑAbz.Š ,@h€ø0` : PBô^4 Ÿ”<.ƒ¸ „ à¼h0`b‡ÀQßê̽«4âD`À.Ð`E€r\$F Ø02ÀÀ9 .ð øŒ… 0 v ” p\!—Ùç©m+ÕΞò° #ð Â’Z¥g¥~¦=öÈ,¼ÈJÞÿõ8Ëaù ÑþË>@ðþ¨ÐK>R_qÒÒÏï} ‚š¨‘ KÈ g«.†ƒ|á’°h€Ã0¦Àè‰,þƒB è@R 2*ëó¢âŽ hÏ}W¡zµO½_¯| #ð‚ÜÿCAJÀPùI@h‚ºp8 ̈S°ÍQ’ó ¢~ùp4?ÀóÓÆ=A£ýÿÄzDЫTÐeGæ)p´Ì)0¥· å65L/âëÐh‹@,áà`aKˆ„¾jJ ð?ÇáøA£þÈÁ€VT¼ > ø ¨ü ¼˜ƒ,^ º `}GàÁþ½ñQ¨: ð¿ÎžX¥]tTp@† )ü2ÿùÀ!ÅÅÅÆ¿?ÇC8èèèÿÿñœ,öSá JÀí%˜@›…>ÓÄDê®»ÿü3M.ŽüA.†AXÿW몜ÉI’‰.i×çäÈj«$BG®—WûÕãè\¢êz0Q €ÃšA¿‰_‘øð!P`A”³ÀÐnIä#³§¼®˜Ä¡+=~^~âz(ÉÉà4OÁM…‰éŸ þØ«ÃJzéqÃ>Ctøþ¦›ñtPU\:’ê ñ *Cûöð–Øp § B?ØiG‡¿<Çê°à`É8 ñZ£v<~¨áÆÄ¨ÿi§ŒN^=ÿWyÁM yz@H©Wÿi%°óÇᘎaœiL$yp“cž1˪yà§%ð%dÿT d3 ¤!úŽýáNÏzžqs$ªpðWc$d´3Žóš?Á@/¹\lH*ïþƒBo4V›UòcåÕÊ]÷‹`h¹ÁB Ì7Ò÷á°£3x4P_2„ 4þ$ÐQ@i‹«d¡‘ Ì1çxÉ?¸2…üpdáðŸÂWçü}Ÿü7ÐÌG ¯Æ*HS,Xfò`§oªØH>ýújÓB¶•=T0:J†TÀSœ ž]øuP40Ozx4 _< ËÎ ûKá?€ÿŸðh@èèÍp‹—†aý:aO|xf èfˆÒ˧«ý‡€"9>€EPJÁé*f€$ðéîJdp}C!§,høH¸Ñð40qoï Ð=îAÚ¯ ãä-[<ýþʃ@ôôÂ4ºžðCdš×פ (Ùšj¾î99))7ççSU`Ð~—¼èÑ3Ÿ¨+sÙ5`þí6Ãndчöéð H‘{„•'žÛ«}coLÙq Ÿ‘ž2’Æ™ý~ÊÊt‡‘?ˆ@,2zpÆ™/SjÀ(|ä…€ˆ¾z¬ Ü”hK¹E#£’RqõÊœ¡“€)*†Yó°2LL}àËÑçÞÉéñש78Áñ¨ÇÆ@ ÷÷ÐhU ç,2ÇÈGÈ=ûÿÿÿÿÿø ââââß {ÿ\\\_ûûœ qñññïßáœ|„„ƒ÷ÿÿÿÿÿøS ð  Ñ@A |V{P2å÷¿ÿÿÿÿü a€>cã!B4?ÑOÀþ kø¸·ÅÿÿÝ}¦wÿÿÿÿø¡@>àÅ>úÅÿÿƒ@ ŠàÌqÑñ²îÿp3m'­¸3’’’’~ÿwÿÿÿÿàN¨¨è`h¡ßÿþ±Aœ\PgþþÆö >8ØøÈ÷øÿ÷ö·ÎJJBAüÞÿÿÿÿð#C@õøPh!¿àA *.!ñ/ïï†(ÇÆFFÿ¸u·r2ÿûŸÿÿÿÿ,(4ÐÕñð!b‰|LDCÿøœÞ÷4!›`föàeí@˃9ÿÿÿÿÿÿÿ†Hxx…Tü?ÿøÜ ߎµ§ ðdÀhÖ—Xùø÷ÿÿá’BB<ô‡ÿÿÿÿÿÿx 0”](d%8v ¨3Y (p4•w@ ÿÿÿÿÿÿÿÿÿÿàŠ zê"„h 1¿ÿÿÿÿþ”ç“ÿÿÿÿÿød~~sÿûûÓ§ÿÿÿÿÿŒ¥'} €+ÿÿã÷ÿþ=€XeÛßÿÿÿÿþ8`†/ÿÿÿÿÿ ,M÷a§ø2Ã8xxˆÿÿö·ÿÿÿÿŒ|† 4@UÞwÿÿÿÿÿòb`h¿£úÿ†q±±±¿ÿÿÿÿÿþ2àÐAŸ€h¿ƒ8xxx‡ÿñý{ÿÿÿÿþ?xýøœ@€s„Ø`£Üý­ÿÿÿÿøg ÿþâ*ñ ÿ¾€[‚Ÿ¸¶÷ÿÿÿÿÜÉ“œà6‰ ¡Ÿèwêçç†q11Q/ïÿvÿøk(ùYGÊ?¿<q݃ÿýL2 «a“·~C¡â"7ñû¿ÿïï»_õ79L2uàaÃZÃ&÷qqqqOïËá“Ýá\@eA«LosOÿ[óØýçû„7wÛ¯¼^ÿãüëÖáåÔ2ƒ÷û»ïbšPmÂ]xûüM†`Ð~«n‡íþóýÙx¼3þ/xÛ¤øn½ÏƒCü«í»ûøžÏ€HfÞæ7ðÎBB>=ÿÿ†I óÒïÊà ãëêƒ/;þ%¥¥ÏË¿? ßükƒ@ög©h¸Ü>V,BBBEùùÞæ•þ?6+° >ð2çl Þ5­ûÎ_ƒCªüñáÂcÐÈüh™0½…rs¾q=Ó¤éÕ2’—†z^ñ³‹©ÃªY÷ÔÏPÍç* Øç®»Nþ g÷üDè€&6l“MϺ†nuungX¸gªsà ʆL6äj¯ç°Ñ S¡{Ûαüò¼È·'“Æiž„ Y«ñ Þ é×á]²ñù¿üØföÚ}ÂÀ°Ä’¯z§5d‹³.> *ÔäØQ9ùèA¦U«j1ž^ÇÐâàhŸ†¹xgðÏMUwõËï{_§`Ð>Bü ñÆÏ'/Á)CÏ«gÁÃÏ«ùþ ÆðFÉßxÑå°É8jï¿á—Þ­ø3ðfÚ®ö³šË×"Þï™M#пZç$U iê'O8p¶€QàMàÈPî'x·P`&ƒä\•Ñn`Àƒâ©+Ÿƒ7Å@Ðÿ ¥«`@-2¬~Á¿C„ž$&%ÿþœòpdá¬C7 Ï“žá4[zKƒïWð4/ÑèVç4¼^ !è¬ D®†¢‚¾…%>=Ëà gÄiª|p4§ž‰À$÷ƒ1B5Þ »Þ5§øû…ïIÿÎñ:«(!¶y9#uî —pËîW𰉉 ‰B4çð¥M]œp4 Cðh€¿{…µ9Ÿþ ÇA€s.J/3 Ð0>JˆßŸ·Ðà0ÀÅ$pà0ÀÄ—$p›á ›ƒGüö$ˆàçA V à0 7A½+ÆÁ€q0¼ =ô `|ËÈßUÿeÍî<[0p/%t[x0°5I\üô>‡õØ@òP`V‘ð@ ʲ2``è0!êÀ º ƒö¬òƒx½ð"ƒ@ù äL =;½ ؽXfH­à‰ ¼HOæ`ÆðùÁ“ã8md >Ö¤¿@ g¬˜Gᵟ<L`À#ƒçô¯•d?¥|«ßC(%]ãÂ0?Š£þ-”å@ÑÁH„ `ú*Vñ,´!éªäq²øªxSµ`ÐQô‰É> *™øõõðe 0¨3<©ê =VÀ$B¼s‰ƒ1<7ÏÆH^d\|PÈ… ð dñäËÝ%`Ñ$„눋ƒ%úÁåà >MÉ ÀC’nKä7ðÍä| 0f´£Âœ‡‚Ò*6wêUSüðh?BºgÍX§ÀaØÿSQÀaGF=ú÷çUŸƒ:â@¶§— ëÒÁ/wƒ!âÿ¾XP Ї¸ˆ xp2X‡§  Ä®þ0'ºmHgeãÆq†N8ç‡2RR'£Ì¿? à ?|¼ 7¡çÎ%¥FC(ô‘žyä’žq 2é¡~Ç10"ÓÎôÀŒRRiÄÇÆñ*U0øˆœÃÐ ¦a2·àÎG?CÎDÓë¥ÇàÐÒu Ï5€Kp¹ t1ð4Oª¢~X„ò+/€ÐÁ†eàÑÀÖYÒÒÁ”»óßa°£Ï°ðhÏS@’‰Ã hš‡«0hÁ |dgÉ£—L¼DwÞ³7\/4NsÀh`½ '¯NËŸçCÎoãÕ€Pe¯¦÷çO¥‹ÕÎáÁ{àN%ñAœS¢ŸÿAœd\\[ûû{ÛÞÕüD1½@þG†A”‡§‘áŸÔ¹à9¢GŸæ~<žÇMÌCàп9ŒEQ×¼bC}ux4­¬2ƒ@{Ï‚ t•42‘ú}¦Ã6Qœ¯W>æ0 ]†/wÉŠ½÷]8=ÝòGŸ$*X2•–t»}}†ÆðÁ˜42N'ù È÷—Wµ½8úF‹ƒ?:NŽ ƒ$NOÓ°ê[ù—Ç)œV#_cÏÇÚj¼Q¼ÆhÂàh_¢ß%CþþðÎ.221ùü3ÿ« pÈ ÐA¼3{}?[8Ân¶Û’R³gý^C'š¢iÏ>=£ñvô´¸%3î¤Ã#ÇÄüs©a`Ð>§ÓôÐùXލ+qȤ.àÈâ8ñKóáÍ; «}ÓÕïr»k¤àÉÖœ‡Çœ.WWiÿt–ph@˜Î /®>êï,p” Th” Sÿø€+áœtttwÿý£omkÙ9{Ïîö›0êË€[ÙS®jºº·¿sN¢¥>ñ{ÅïJ—ÏWS÷Ö GÛSëoªïrëøóèxföpÍÌÐdzçŒpþü4z8|ÿÿwÿÿÀ‹\ \aq¨·÷Ðh8g! ýÿÿÿÿÿü3††††ÿÿ¨Å@ÐÁEÅû”[Ÿ«Ÿ@,^ðÎ6665ùÿ ä$$$¿þ?wÿÿÿ÷< ‘qqUÑ`þþÇÇGÇ?ÿ® Ì3o~ÉIIÉ?ÿðÎRVRUùü3””””~~^ÿÿÿþç…"†œáøƒAû ã#"âßÿÄÀ½î ” {ÿv ÿÿÿï ŠÉÞæZ+Ã$ddcã?ÿÕ€aïmC?îÿÿÿýÊì4C‡ú-ð…àÐÿDÀ€Wÿ»»ÿÿÿîW.XBóq Ð>DÀ¹Îá¾¶ïÝÿÿÿowp놰 Ð>C†pßð+o¸ ÚÞÇÇÇÇÿÿ†qñññÿÿÿÿÿÿÿX^°¿ÿÿÿÿÿÿÿÿÿÿü … è "„h 2?ÿÿÿÿþ7á¯xÑÿÿÿÿÿÿ°a¯†ÿÿÿþà þ=ègÿÿÿü3‰‰‰‰ÿ~÷/øôëÿÃ8¨¸¸¿÷ïÿÿÿþ>ôØüýmìoÿÿÿÿÿ@‹ôÜ3‡‡‡‡ÿÿoÿÿÿÿøá7üÏþ¶ÿÿÿÿø½ÿÿÿÿÿþ8hhhgçÐÏÿÿÿÿÿÀkÃB\3ëÿÿÿÿÿû€þ¨0 †ƒòï¯ÿÿÿÿÿï¿ÀÖáàGæâþàÎ&&"%ýÿÿÿÿÿÿ¬–n" K7úýÍïÿ­†koÿÿÿÿ°0 ÿ‰(ûž§œrñhdÿÿþ³^®RžÿÿêÙèà½<¾õoÿÿëY:Y<øgÿ‹€2ÿ­ÃáIn  >JÔÞûÃ7ÿÎÕ° p½ëÀËÃ?ýu<{ލðd‘ª½ëÄeõZ‡§RŸ8ðÍ,ŽøñÁ-82s»t¦Ô:zí4Ãë¨èû£‘4çÇ‹ßoz*'}<¼žú»Ã4Ã_c°Ó× þ}CŸsåk§¦_ Ï:¦áf÷¦á˜ftüUPûÑ9ò9'x}ϤÃ0ÌòJxfý±0gÿÿ¤ÏÇ@îϹya_Î «Ò³0ðY3è[•ž_8avï<r²Ò²ÏîE0ÉÁ“rx» Ã9iyYgçὟ—«O®^xÙé÷¬¡“8Êãé”mŸpó®מæC(ç°ê¶¯P§‰  ú‡oZÃ6Qg’zÖåÛÓzm|3®Çž>,mÑ{ÓèÿDîsˆpßVsÿ=Wó€*7ŸÁ¢ðóÀs¸å#§|çÔþêm¡9â (¡—GM$TóÁžàŸ€,óÖÞ¿^~…o´Ó* ð4 bZ®xf%IçÏ$§¿ïy”}Á‘øŸ×d‹S“ªaÄÒšRg«”„†`xµoÃ8ˆ˜˜Ÿÿñ{¢÷c •8•ÌׂA›êÐdèÆÆªU¯PÉ ŸrO<º`øQCp=îÃ£Š¾½é×¾m˸•­úðTgĻϢϼøžáð + À-äÝ^#±— c þ óÀÅ&I)'(øoæm@i=XÏÇÄ]çë °h¿žB¼9ljDÐÇFE†QQ”SÿÿÅîÚˆ•ç›fì%.àÉÊY9:üÖ‘3P§©+a׆)WKKK??·=íæ…GέÑIõÇÝ[ãÚ›Õ£îÀÏ– †`e[Ã2s¢àTû>Ü'V üËÀg'+'(ûóoÉ.½Á”GÒGðÍ~›ñ'¹Ö›TúâuÙ¾½/[ÄÙø-ÙŸ]†±ÊEGCÿÿТ>¾Ûw"§ƒBóÍÔ3{K“†O çk7Ç"IWß¡—€ OGá¥9ÀVœáÖ爗÷ãϽJ´ä=5¹.ãÁ“¦¼8G¡Áfáp0|IyYgK?>Ãl@\†•‚Á˜fæ—ƒ&>Š¡ýt=N9 gþò1UG§¾=ÎLçã€-?ÿŸx¢žáyì±Ê¡‚‹Ž.† )ýýþ‘Þó«›s”LéÕ ãB+Nwœø³¹%{×7^õÔèÑ79ÉSs±×ÇMœ{¨“ñ˨gãíµ÷ºC  Íè¿°ø~×µ½ºU ±a“ïhÛ>~sjßÏÇŠðÌ(%iïa·#s§Ž±Wñ¸{+â@Zç<^ý¡ÜËNsšt·i–Îùì‡@п*<ûŸ½6ÓmWãÞî›->ŸmOiv=î±{Ù§Ÿdç\Ù\û Þ‹sœÍ|ý>ÚÃÞÀ¤áœlllkûøgýÿÿÿøýÃ÷|^ÿÿ  õ÷¿ÿÿÿÿþ(5êßÿÿÿÿÿì0þÉIII?ÿÿÿÿøW=~›ðe,^ïÅîÿÿÿÿÖMÿÿÿÿÿþÕÿÿÿÿþ¦ÿÿÿÿÿðÎÿÿÿÿÿÿÿcupiãÎÆÿÿÿÿÿÿÿÿÿÿÿàó T,"„h 2¿ÿÿÿÿÿÿÿÿÿÿñûÿÿÿÿÿüz ÿÿÿÿÿüpPPPïÿÿÿÿÿð1A: üóãÿÿÿÿÿü.¯¤ßÿÿÿÿþ(µõÿÿÿÿÿþ'« Õ†ÿÿÿÿÿ€Öá @.ñÿëßÿÿÿÿÿ×?þnÓpÎ"""#ýÿÿÿÿÿÿF÷àÐÿ_ƒCüïÿÿÿÿþÂBBBÿ‹‡ÿÿÿÿø_s…ïÿÿÿþÆÿÿÿЙ>¹äòÿÿÖ딪q]ǹÿñha—þŠññòvÞ/ÿýV•†UÖØ€+ÿ xþÆn–gÏGµy,žÿ¿†r²’²¿ïßvÿÕkæ>ç×@L3 ᜄ„„ƒó÷ø«xe†qÑѱÏßëTnNnG+1B“3z¬«ëÖfy¶JŒ²‰ÎfN8íU£€Ð¿7 bGèr:ärs1¾À°û#ì"sÉŠ{㪃 3‚wúÒz’8ö2‘‘Ø}Ê5Lr×dpû´/®ŽÁ€ÓÏq«'ÖM^_貫 °Î»78T#Â2ð`Áˆñz¡˜. Gˆ ^õá3»±½†Î+¹Ï$ãóÏGžU°h ‰—ƒWŸ å¥å¥ŸŸ—ÁŸƒ5[Ðh`—Ï€KR2„›Œ¹ÚSŒ$uŠ2:äqçîâ|ãžÝø2]3ÑÌ1€H©Ž¸óyö `ð¼õpSàÉP8!œlllkûýV¿Læ+ÿ¥¿Ul3 ãï¢#… |z¡˜ƒ. Gˆ¤ðŒÄp`b'ÿ™{Tƒ7’;¶9ït›Ií6}ä–qç£Õg¦¥4¾÷†ròÓÏÏëîr¬zj2ê=™à±O$ºÚ¨ Ÿ€ «!›õÁJ¥F•S`vìJØfŸw^(f~«?¾¾÷ŒM}ï²kêßNÝ>è aÞ¼Uÿzð2í0«çå4¿__j¤ê \ñ¿^~IoÏ=ç«üÀÜÒòpd®ð͉¹ˆ½Úm·Þ€Ôx†òGŽ€`00ÞHá_ï|ð‹‰ ÀÃo`À8P`^~F2$ƒò'Ð`AøùèebÜŒóÚ„“a¬yq¨¨õF¢ßÿ뫘ܪ àÈåy=ô™åPÌ3^?˜:0¡Gø s´¼O;Z¡æ³ÍØf¼l5¦‰¸¼×€G¾lâ½wO7öà42jC=àÔõiÎ1!118EFŸÞ»J¨4?ÐËÚЯ†C¸Å\yôPóéýrÒ<Ì ~=OÚÜÇÇÇG¿­.}ö™8RÉçÜÓç›.z®DÚ@ÑA>í>*d}íÆLûõó/LÑÓ®:ì•§Ãuàb=Ë@þÄsSûÀg)))(ø¾¼›hƒ4jç9¦gÅlé;†ÎuÈhvß_Ph¿‡îÜ çßh®YÜÂg1ûßs¡“{•ñ†tÓÖÞîÖq½ÖääTó®Ú–E_yÓ7i”póîâuù³ÏdÍôõ•îì27Çï†]ö³/¹Þ»9§³Ÿ{ýÎâ¶ç]÷wkiÜÚ½êí´+Û;Ü5÷$Ñiñîÿwÿÿÿÿÿð®W«}yïÿÿÿÿÿÿ¿üÜs[¿ÿÿÿÿûp~ÆÇFF¿ÿ†qÑѱÏÿÿÿÿÿÿÿÿðÎVVZ[ýûÿÿÿ©á§†qQQQ/ïÿÿÿÿÿý°ÀXøgÿÿᜄ„„‡ÿÿÿÿÿÿá’"%Ðÿð+níîÿÃ9III?÷ïÿÿÿ_Žÿÿÿÿÿqÿÿÿÿÿÿÿÿÿÿÿà_ †N"„ h 2¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüiž~›ÿÿÿÿÿñÁÏÿÿÿÿÿøÝ@ ñÿÿÿÿÿÿŠа°ÏÏ~ÿÿÿÿÿñ`¥ÿã÷ÿÿÿö/ÿ»ÿÿÿÿ¹ÿÿÿÿýdßÿÿÿÿÿìoÿÿÿþ/x½ÿýßÿÿÿøýÃ÷ÿÿÿÿúG`7OÿÖmÿý· ×ÉÕ¿ÿÿWs¢†Õ>»ÿv¿õh2Ž8˜‘17Àÿ½~½ÿÿõ·+€*¼ ½YÿþÖzÆ|[¾ço~£V>“¯<±Ü=[rÎ}ˆ”»uTïzÎmºrÍBîx©·=™=ɸf÷Ÿy%ÌÓÇ”§¾¶}yå)ïÜøgýþôãˆœ 3ÿY³í«†ZÓn¦É×í7ðÎùîóܯ€Ðÿ`4?˼&ñ—i†ž²¹ö·¯0 >Ò^0&sϘˆ˜œ ¿èÚÞô+>6Ö‹Ô³ÕõmÎIž£àhÿ†Ä `aðÌõïGøÈdá«A—ƒ2qvèŸÝ÷.åoMÊ,9IIIG°Íù⌞¯{§ ­Yð5!4pÈH„‡¡(_ï{V#¼‹‰`À†o À7P`^~F0%ƒ ò' `ÁøùèeÞð¡Ô0ãÄxuóày ƒò'ð‚ ßÈÈA€s 3ÿ`ÀýüùÐf{˜ÿý7tÚá•·Õ§2ê: Ï™µÇ7o^gðÐÉ{Ó YáM<ã㘠<ö BøØîôã ÀXdåXTõO»‰Ð‹úDüå`gÿiÕõ›ù8³ H7nTdýh´ÀWˆ28òqÓ⓯˜}Ç€Ô\|#B!!O…Teöˆï5çž'ÿ­ÃÍîo=±á«{ìUs´Õ¹é» Çï¬Ó«ÀÉø`n&| 41ˆ À/@þè?˜’ÎZZZQõÏ^ü ÷Œ©0| ÅA€_‡ìM€ðhÝú¨NPm„<:»¹ë;Ø™Åð†Zw,ÙѲ›xýïxþÓ^Öö÷loo¦®Ówµ½½ô÷<3Cj=ðÅ.éIYWçÑ£ž8÷iÑ•r7{žý·>)f|éåUÞ>úÙû{ÿíïþû÷kr_Û$÷vŠvÇÇGGÿ¿5Oÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿêîs€3ÿÿÿÿýdŸ­ºÞïÿÿÿÿî–Öïÿÿÿÿû¿ÿÿÿÿÿøgÿÿÿÿÿÿþï­»ÿÿÿÿÿÚÜÆïÿÿÿÿÿÿÿÿÿÿ€‘ mo"„$h 2¿ÿÿÿÿÿÿÿÿÿÿñû¿ÿÿÿÿÿÿÿþ¦çÿÿÿÿûÀÇÿö÷ÿÿÿÿý½ßÿÿÿÿÿÇêÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿü3ÿ~ÿtÃ8xxˆg÷ÿÿÿÿÿÿÿÿÿÿáœtt|û÷ø¬¯ÿÿÿ[wðÎ:>>?ýûýŽ™ÿÿÿïÆïþÛtÏþ®}ËgÿÿýÊ7L¿ýÖ÷ÿ謘øebOÿÿÕjºÃ5ðÍYðÎ"""#ýú:Þÿþî}{ÿÿñ«t2øe]N_!¯˜&ÿ â""!ßß¾ŠÞçŽ[ Ï“±¾µüÃNî–Ã7ÿO:»z–}ö2{VzÆû»¿nÞÓO´á’ÎefÏŽï]»‡Ÿ{Dç÷}ƒ†}¹83ÿc¯«n%w_¢ ×àÑ+ø2”Zoa¥`Ð[é¸ÍºàÎÆÜòE_M/×Ó4ð =>hò¸g\¾ðÍí¶ƒ5Ǩiz2³nÕS®S<}ét㜫(eÃ÷ Z{Ï!ÓÞšž?†ÏïÖÏWÉ[uôFu iÂ=À~9ÍoChÜ3­†lgÆt{ï¾mÇÏ«é¢f3ôÚ{ßðÍé£àÑA Ü2rh—O_Ù Ì»Ž1ž ÷ŸÈ+óGÅäâ^qêøgúhV®{¸Þƒ:÷*€]yðÆÆÆÆ¿|çä4O¹œñæ{ãuû¥ÕÉpÄ„„D Ì·¿¯ÑÔÀS£þq÷9g×þúøÏ&Ž˜ãÔoì;ã$ÉÕ ÕFÏ¥·§!®_¯øgñ € Ê¢1Є *¢(  ÝQàBQûÞÀÜLl!ƒ ^ àCX|  i£iÎ~°DH¼<35®Àh`´¬ì4î÷æ€,øüóÀÜŸÏ ÐžŽ'C™óѼÜìmÊg7&?×Þú)žÈ}Ï3{Þ¸æn8÷ŒV†/e÷4Ù*ý Ô›§?+5 z­“M<7ã&×Ýi¿™¯Vþ gàGŸÀ i§“Æ­|Å0úíx'éMÇQyï^P2áæh÷Þîµ¹ŠsÃÿ[ šÜ¢tûÛdyžñߦÏ5ž´ÛÖuç[£©á“¨\ á§InaÜêéÓ`$ï͆zm¨!{{á]ŸÉÿ~˜>¬o}YL: í—×Ä÷èiÏi³–³ŠÌ÷O/@{ú¸èþP®{ÛfŽ´Óµ³ÎìgVeÓÍÛõ·\è8ìëÞÚ§· ž’Þ¬ÁÛyñ¼œâeoÿP Ñî8êÎLÝþ‹+o»µAžÞïÚS­ ÃÍïö«îe¹ ž¾ÒmÎþîØÑßw ããä#ÿßž7W±ºïÿÿÿÿþàfÅÅEÅ?¿¸L3ˆˆˆ‡ÿÿÿþàcÿÿÿp3 ââ¢â¿ß¿ÿÿÿÿ÷?ÿÿÿÿÿ¹ÿÿÿÿÿÿáœ$'û÷ÿÿÿÿÿ³¹ßØßÿÿÿÿ±»þÇÇÈHÿÿÿÿÿÃ8hhh_÷æ÷nÿÿÿÿÿÿþÎ÷ÿÿÿÿÿÿÿÿÿÿÀx "„(h 2¿ÿÿÿÿþÀ-¡Ÿÿÿÿÿ¸Øw~¸(çÏÿÿÿÿÿûÿÿÿÿÿ…°`½Îÿÿÿÿ±»ÿˆ¯÷8;ÿÿÿÿ ââ¢â¿ß”Üïíî…ÐÇBš{ßÿÿÿÿxÂãp2Žÿÿÿÿÿñ9A ƒž5çÿÿÿÿúàØ¨× ÿÿÿÿÿñ¸6T žà¯ÿÿÿÿÿÁgãÿÿÿÿýàÿ,HeQÿïÿÿýàÿèVýÞÉIII?¿ÿÿÿÇ`bz¿áœ||„ƒ÷ÿ´MË”ðdéÿÿï!OøødõŠïüqQQ1OŸÿþ«jþ÷¶“—EÃ_Vcÿÿ“˜©Úa_ÿ€Éø—ÀÏÿýmÔP¯<»HðÈ2wõ·EîÿU}ó~ù±{×Ã:Oÿ…Ê?}`¯r¹l¤óì—Î{Ngƒ:àÍã­ ÞʹÎU•õTå{)†gÝ;)Cá’B¸ûÛWVSÖÅrÅ<öª^6ô7yõ¿gŸ9W+pاÞJêœ<áAC'Ý$2Ãî2~X@h"¡A |Š}øýúyóé’¸•õßÎUãQ«ù­5új˜uM'u¦\šn_ ä)x³’±½Õ­ê¨fúëPoç+ÇDZNˆ·C#õÇ„ªxó×FúõY8êÓŸ}öÕΫï ÐŽç¨Þ¾fÜt\Þ7ãJ-ï|l®{âþ÷¼3À‹?7?7ÿqq‘Qo¯áœdldkûýH7sŸ_×¢Ö©ñ­¾D<4M_ø!ýmY%ùÊ€ 2ü„e`À â(™{( ˜¥† áCLçþaç˜Þ8ãÞÖôm¸ó×MÞ¹$÷ƒ8õóÇ©§g ¬ðšÓ‘bð0 Ñ“>„¯§†Öqï¯DóGd tYT˜e ׯ<2iÃ_ƼOÇ%E8fº“‹Þ€k‰ß$øaKÍÅB›‹ ƒ8ȸȷ×ðÎ2625ýþ1nº’Þ¿èj:3$µHÿZ#}#ä5óÎL'/ë$wíÒŒEŽw Ðÿ5#âˆ'C7Æ.8ÿƒ ÍÛa ãyÊRéò— p3{j~A^ÆÍHT/&G7 ŸU˜e ÇëÉÞ2¬ø‰+H²otk  ý§ÇÀëÅ“‘³¾¼3}~@IúçÞ àE†¸¸` Š1Å29ì0Ï]n@i‡n 䤤$__†dõ§Ç0r˜}yý[odúHB~t­ë×ïOU8qö§öÜÞ9’¯˜&¦ÉÞ¤ZonzPñrx¼X…N<м ñ?Œâ+a›ì4L‰: ÖDê²sŸÀOéªÁ÷Õƒä¸úÙÆœê‰†o ⢢¢ÿÿÃ8¸¸ÈÇï÷_l¦]᜔œœ›÷ÿq[ì3”–•”~~í츟rï´s›¤îí_µdá›þgƒ/;ÿWsƒ9IIIGçïÿÿÿÚß áÀLU×O ƒ.ÇÇÇÇ¿ÿÿÿ‹Þ/x½ÿü3††††ÿÿ†±nŠŒtWÿÿÿÿÿÿÿÀ¤ñêÿ±¿ÿÿÿÿð ¢þü÷ŽÇGGG?ÿÿÿÿÿÿŠÄÏ=ÀGÿÿÿÿÿ‹Ã7±»ÿÿÿÿ·º'Zü3?Ã8ØèØßÿö÷Ã9 ÿÿÿÿÿÿ®?ºÿÿÿÿÿûή÷±¿ÿÿÿµ¹½ßÿÿÿÿÿÿà ²"„,h 3?ÿÿÿÿÿÿÿÿÿÿö9ÿÿÿÿÿÿ_¯Óÿÿÿÿþ'À'ïÿÿÿÿÿ†¯aœðgÿÿÿÿÿÿþÂAÂB¿1» _þn üàÿà^ÿÿÿÿÿµ¹ºv¿€\#øÂ@Àÿÿÿÿÿ¸OýY¸gð †ÿwÿÿÿÿÿÁoÃ?üÙí]Îÿÿÿÿÿ3„‚ á?àœíÿÿÿÿð"À†p°Aœ/ü¿ÿÿÿýÀ þÁpЇÿÿÿÿÿðÎ6:67ýûøb…|DgÖÜû• ¯{–ÁC7(ò½Âe{E&pÛ•Åq]0ÎVVVYùùbøòü>÷i¤À-!:xÛÜ“%8æ Þä–+…“?® ÐA€@ýÚv±é±¼þ›Y^ÖàÎFJFEùý ;ÉçÀŠê `0>êÈäÝ€kÝY›÷û‡únûï‹ß¤{E‡¾¼É #÷«¯H“‘:MotÖw¹^Ü“ì6ëÓêLññùá{Çï‹Ï?Á=C0Î.625úàf>íPƒЄ #¡ÇÀÀýª®@ÀÂOﯯžrRRROÏâ8N  “ž>ˆŠV©ˆ­j‘@À®D¸PNÆNøýè[Þ;§¹é»zø¬Púûœ<çÇ;E05ÉS‘> >û$x«nž*`3‘‘’’~}|^JðAW}0ð?'ÛÝzR`ûíâ‹( §"ŽbÏŽáí6÷·Åï}íñÞ篓['}c¹¼R×"x0â~™dᘳž}‰Wµ¸3•”•”}~}äݹÍ<ß{sMU011!!8G?‹"û°ÉøÇÏ÷éÛ[8ø«sÛ£ïoMçŸ}½ÍoksšÜûŸc>øÞ|ý¦Æ¸¤R÷ßâ£Ï‹;˜³ÂíêÌý>ÇO¾Æ|UNzɹÓ}üP'ÞÆFFFÿÜ ës÷V·µ¾ûYÇß}û¤?{ï¾ü~ñ‡Š\÷À‰.ùHnVYùôÊ9Òg½­ÎWØÞ³bžÅ=¥së:ÅSÂ÷¿‰ú·ýݽÎ'÷ßïo¾þûû«‡[ŠÑ~}½û•½íã—‰àVjÀ-ï*÷ÿÿÿÿÿãp[~n†nÃ8ØèØçïÿÿÿÿÿøk ø¨gÅÁÿÿÿÿÿøk ø˜wÄÿÀÿÿÿÿÿøb‡|DDD ž®çqòßÿÿÿÿÿ†pŸïÁ’&&(2‰ÿÿk~Îç7»ÿÿÿÿøœOC¾Æö7ÿÿÿÿøgþüĆQˆÿÿq|3ŽŽÿÿoÿÿÿÿÜ \Ÿxÿÿÿÿý|ñçÿÿÿÿÿÿÿÿÿÿÿÀ E*Ó„0h ¦ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@CÿþbÿödÀ`½Á…@ÓB°ƒÈ `0^àƒ i¡ÜûÿÿF0`9€l ÜP`„ 4+0€À6ì (0BšýÿÿþŒ€ÀrØ °0 ÁhVP`9€k ØP`„ 4/üûýA€ä¬/`aA‚4Ь ÀrÖ °0 ÁhXú2ƒÈ X0^Àƒ i¡Y€ã¬/`aA‚4а0_ÿôfŒ°`½Á…@ÓB³Æ X0^Àƒ„ i¡`¡ èÎ 0 `Á{ ¦…gŒ°`½…@ÓBÂB@ÿѤ0`Á‚ö!M Ð 0 `Á{ ¦…†‡£H0@À5ƒì (0@š  `Á‚ö M ýF€`8€k ØPp€ 4+@0@À5ƒì (8@šÿþ@ÀqÔ °0 áhf `8€j ØPp€ 44DGÿý€â¨/`aAÂ4ÐÍ@ÀqÔ °0 áhhˆˆê5Ä P0^Àƒ„i¡š€â¨/`aAÂ4ÐÑ/Ôjˆ `½…ÓC5Ä P0^Àƒ„i¡¢"`_¨Ö 0 @Á{ ¦†k„ `½…ÓCDÅÀ¿Q´`‚õ M Ú 0 @Ázƒ ¦†‹‹~£h0 À5ê (8@š´`‚õ M þýFÐ`8A€j ÔPp€ 43h0 À5ê (8@š./ýú ÀpƒÔ ¨0 áhfÐ`8A€j ÔPp€ 44\\ õA€á¨/PaAÂ4ÐÍ ÀpƒÔ ¨0 áhh¸¸ê6ƒ P0^ Âƒ„i¡›A€á¨/PaAÂ4ÐÑqp/´m„ `½A…ÓC6ƒ P0^ Âƒ„i¡¢âà_hÚ 0 @Ázƒ ¦†m„ `½A…ÓCEÅÀ¾Ñ´`‚õ M Ú 0 @Ázƒ ¦†‹‹ÿ}£h0 À5ê (8@š´`‚õ M þûFÐ`8A€j ÔPp€ 43h0 À5ê (8@š..ú ÀpƒÔ ¨0 áhfÀ`8A€j ÔPp€ 44\\ õ€á¨/`aAÂ4ÐÍ€ÀpƒÔ °0 áhh¸¸ê5ƒ P0^Àƒ„i¡šÁ€á¨/`aAÂ4ÐÑ1P/Ôk„ `½…ÓC5ƒ P0^Àƒ„i¡¢bß¨Ö 0 @Á{ ¦†jˆ `½…ÓCDÄ¿Q¨ `‚ö M Ô 0 @Á{ ¦†ˆˆÿ~£P0@À5ì (8@š¤ `Á‚ö M þýF€`8€k ØPp€ 4+@0@À5ƒì (8@šýúÀqÖ °0 áhV€`8€k ØPp€ 4,4/ûõA€ã¬/`aAÂ4ЭÀqƒÖ °0 áhXho÷ê3ƒÆ X0^Àƒ„ i¡YÁ€ã¬/`aAÂ4а/ÔgŒ°`½…@ÓB³ƒÆ X0^Àƒ„ i¡a! _¨Ì 0 `Á{ ¦…e°`½…@ÓBÁÀÿ¿Q”@`Á‚ö!M Ê  0 `Á{ ¦…ÿ~£ 0€À6ì (0BšŒ@`‚ö!M ÿþýF0`9€l ØP`„ 4+0€À6ì (0BšýÿýúŒ`ÀrØ °0 ÁhV `9€l ÜP`„ 4+û÷ûõ€å°/paA‚4Ь ÀrƒÚ ¸0 ÁhW÷ï÷ú0ƒÊ h0^àƒ i¡XA€å´/paA‚4Яoïúÿ§è ü ßÿà`ÿçþÿ8(/ÿùÁAÁBÿÅ~þp°°ÐÐ?ó†…†‡~œ<>¾ÿ¿x |eþÿøÀÀÁA¿Î ýþppp°ßÿ󃄆†ÿÿœ,<4?ÿüááâ"?ÿçÿÿ8ˆˆ˜ŸÿùÄDDÄÿ¿N&*./ýúqQQqïóŠ‹‹‹ÿœTd\oûôã##cß§þý8ÈÈØß÷鯯ÇÇÿ¿N::>?ýúqÑÑñÿïÓŽŽÿ|œtt|ûäã£ããÿßgþû8èØøï÷ÙÆÆGǾÎ:667ýöq‘‘±¿ï³‹‹ÿ}œ\\\_ûìâ¢bâÿß§þý8˜˜¸Ÿ÷éÄÄDÄÿ¿N""#ýúpðñïÓ††ˆˆÿ~œ4447ûôáaa¡¿ß§  þý8(H?÷éÁAAÁÿ¿N þýúoïð0?ïó~~ÿ´ eøPÊÿþpPPpÿ󃄅†ÿÿœ,4<7ÿüá¡¡â?ÿç ÿÿ8ˆˆˆÿùÄDDÅÿÎ&&&'ÿþqQ1qïÓ‹‹‹‹ÿ~œ\\\oûüââã£ÿçþý8ØØøÿ÷鯯ÇÇÿ¿N66>?ýúqñññÿïÓÿ~œ||„‡ûôããä$?ß'!!þù8øù ÷ÉÇÇÈH¿N>>BCýúqñññÿïÓŽŽÿ~œll|ûôã£ccß§þý8¸¸Èß÷éÅÅFÅÿ¿N*&./ýúqQ1q_ïÓ‰ˆ‹Šÿ~œDDLOûôâ"""?ß§ þý8hhho÷éÂÂCC¿NýúpPŸïÓ‚‚„‚ÿ~œ ûôßßßßÿß« BB†PŸÿ󃃃…ÿÿœ,4$7ûüáá¡¢?ÿçÿÿ8ˆˆˆŸÿùÄDÄÄÿÿÎ&*./ÿþq11qÿó‹‹‹‹ÿ~œ\\\oûôâãccß§þÿ8Øøøÿ÷éÇÇÇÇÿ¿N>>>CýúqñòïÓÿ~œ„„„‡ûìä$$$¿ßg!!%%þû9 ÷ÙÈHHH¾NBBBCýúrïÓÿ~œ||„‡ûôããä$?ßgþý8ØØøÿ÷éÆFÇFÿ¿N6.27ýúqqq±ïÓ‹Š‹‹ÿ~œ\T\Wûôâbbâÿß§þý8ˆˆˆŸ÷éÃCDD¿NýúpÐÐßïÓ„ƒ†„ÿ~œ$$ûôà`` ßæþÿþÿXPÊ2ƒÿÿœ$$7ÿüáa¡¡ÿÿçÿÿ8ˆˆˆÿùÄÄÄÅÿÎ&&.+ÿþqqqqÿó‹‹ŒŒÿÿœ\\dgûôã#c#ß§þý8èèèÿ÷éÇÇÇÇÿ¿N>>>?ýúqòÿïÓÿ~œ„„Œûìä$$dßg#%#%þû9)))/÷ÙÈÈHÈÿ¾ÎBBFGýör2?ïÓ‘ÿ~œ„„„‡ûôä$$dß§!!!!þý8øøù÷éÇÇÇÇÿ¾N>6>;ýòq±±Ñßï³‹ŽŒÿ~œ\\dgûôââ¢âÿß§þý8˜˜¨¯÷éÄDEEÿ¿N""&#ýúpðÐðÿïÓ††‡†ÿ~œ4$4/ûôá ¡a?ß§þý8ÿÿ÷ïB>2„ûüá¡¡¡Ÿÿç ÿÿ8xxxÿùÄDÄDÿÿÎ&.*+ÿþqqqqÿ󋌌Œÿÿœ\\dgÿüãccc¿ßçþý8Øøèÿ÷éÇÇÇÇÿ¿N>>>?ýúqòòïÓÿ~œ„„„‡ûôä$$dß§%%##þý9)))/÷éÉIII¾ÎJJJKýörRRR_ï³’’’’ÿ}œ”Œ”ûìä$$dß§%%##þý9 ÷ÙÈHHH¾Î>>>Cýöqñññÿï“ÿ}œ|l„oûôãc#cß§þý8¸¸¸¿÷éÅÅÅÅÿ¿N.../ýúqQQ_ïÓˆˆˆ‰ÿ~œD4D7ûôá¡a¡ß§  þý8HHX?÷éÀÀÀÀÿ¿x—C>!ÐÏÿ~œ,4,3ûôáâ!âÿçÿÿ8¨¸¨¿ÿùÅÅÅÅÿÿÎ.2.3ÿþqq‘qŸÿóÿÿœtltoûüããããÿÿçþý8ùù÷éÈHHH¿NBFBGýúrRRR_ïÓ’’’’ÿ~œ”””—ûô䤤¤¿ß§%%%%þý9)))/÷éÉIII¿NJJJKýörRRR_ï“’’’’ÿ}œ”””—ûô䤤¤¿ß§%%%%þý9 ÷éÈHHH¿NB>>?ýúqñññÿïÓÿ~œ|l|oûôãc#c?ß§þý8¸¸¸¿÷éÆEÅÅ¿N&&&'ýúq11ïÓˆ†ˆ†ÿœ4447ûôá¡a¡ß§  þý8÷êÃ:ЯïÓ‰‡‰ˆ~œDDDCÿüâbb"ÿçÿÿ8¸¸¸¿ÿùÅÆEÆÿÎ6667ÿþq±Ñ±ßÿóÿœ|||ÿüããããÿß§!!þý9 ) /÷éÉIII¿NJJJKýúrRRR_ïÓ’’’’ÿ~œ”””—ûô䤤¤¿ß§%%%%þý9)))/÷éÉIII¾ÎJJJKýòrRRR_ï³’’’’ÿ~œ”””—ûô䤤¤¿ß§%%%%þý9 ÷éÈHHH¿NB>B?ýúqñññÿïÓŽŽÿ~œ|t|wûôãcccß§þý8¸¸¸¿÷éÅDÅDÿ¿N&"&'ýúq11ï󈆇†ÿœ4,4/ûüá!!!?ß§þýX‡Bĺÿþpñÿ󈈈ˆÿœDLLSÿüâ¢âbÿÿçÿÿ8ØÈØÏÿùÆÆÆÆÿÿÎ>>>CÿþqñòïÓÿ~œ„„„ƒûôä$$$Ÿ§!#!$þý9)))/÷éÉIII¿NJJJIùúrRRROïÓ’’’’~œœ¤¤£ûôå%%%ß§))))þý999IO÷éÉÉÊJ¿NRJRKýúrRRR_ïÓ’’’’ÿ}œ”””—ûô䤤¤¿ß§#%#%þý9 ÷éÈHHH¿NB>BCýúqñòÿïÓŽÿ~œllloûôã##cß§þý8¸¸¸¿÷éÅDÅDÿ¿N&"&#ýúqñÿïÓ†…†…ÿœ4447ûôá!!!?ß«èx‡CÿÿÎ""&!ÿþq111?ï󊋊‹ÿœ\\dcÿüã#"ãÿçÿÿ8ØèèïÿùÇGÇÇÿÿÎ>BBCýúrïÓ‘’~~œ„Œ”“óôäd¤¤Ÿß§%%%%þý9)))/÷éÉÉJI¿?NJJJIùúrRr’ŸïÓ””””ÿ~œ¤¤¤£ûôå%%%?ß§))))þý9IIIO÷éÊIÊIÿ¿NNNRSýúrrr’ŸïÓ’’’’ÿ~œ”””—ûô䤤¤¿ß§##%%þý9)/÷éÈÈIH¿NB>B?ýúqñññÿïÓŽŽÿ~œtt|ûôã#ccß§þý8¨¨¨¿÷éÄÄEÄÿ¿N""'ýúpðÑßïÓ†…†…ÿ~œ$$$'ûôâ!âb_ÿçÿÿ8˜¸¨·÷ùÅEÅÅ¿ÿÎ.2.1ÿþq‘±±ÏÿóŽÿœ|t|{ÿüããäd_ÿç!!! þÿ9 )'÷ùÈÉÉI?¿NJJJKýúrRRROïÓ’’’“~œœœ¤›ûôåe%%ß§'')(þý9IYIG÷éÊJÊJ?¿NVVV[ýúr’’²ßïÓ”•––ÿ~œ¬¤´¯ûôå%%%?ß§++))þý9YIIO÷éÉÉÉI¾ÎJJRSýörRRROï³’’’’~œ”œ”“ûôää$¤ÿßg!%!þû8øù ÷éÇÇÇÇÿ¿N:>>?ýúq±Ñ±¿ïÓŒ‹Œÿ~œTdd_ûôâ¢bâ_ß§þý8˜xˆ÷éÃBÃBÿÿÎÿþq1Ñ/ÿ󉉉‰~ÿœT\T[ûüâââã?ÿçÿÿ8ØèØïÿùÇÇGGÿÎ>>>Cÿþr22ÿó‘~~œŒ””“óô䤤¤Ÿß§#%%'þý9))I'÷éÉJIJ??NRRRQùúr’’’ÏÓ””””~~œ¤¤¤£ûôå%%%?ß§+-+)þý9YiYo÷éËKKJÿ¿NZRRSýúr’’’¿ïÓ””–•ÿ~œ¤¤´·ûô䤥%?ß§')))þý9))IGçéÉIJI??NJJJIýúrR2R/ïÓ’’‘~œ„„”ûìãä$$?ß§þý8ØÙÿ÷鯯ÇF¿N2.2/ýúqq1q_ïÓ‰‰Š‰ÿ~œDBBAÿþrÿó‘~œ”””“ûò¹)«áœ¼=ürx0@À ©.ŸVç÷¾øÐP+mòÐA›|Q*úÀh ÚA€oF‰Vã _ä“’’|“ûôä¥$åß§)))(þý9IIIG÷éÊJJJ?¿NRRV[ýúr’’ÒßïÓ•”––~œ¬´´³ûôå¥eeŸß§))-,þý9IYig÷éËJËK?¿NZZVYýúr’’ÒÏïÓ””””~œ¤¤¤£ûôå$¥%ß§%%)(üü^JLì“ 0 ÀP†ÿ¾žñcÏ“H(®?T ʬ† <A€“Öø2ÿ~’JJ(IQò¼|ƒûüä$$$ßçþý8èøø÷÷éÇFÆÆ¿¿N2.2/ýúqqqqïÓ‹‰‹‰ÿœL>>9ýöqѱ±ïÓŒŒ~œl\l[ûôââbâß§þÿ8ˆxˆw÷éÃCCC?¿VȘ`h"_¿çüÿ8ÈØÈ×ÿüF:1ñÑ~ÿñ³ÊN6`0¿íôåCÒÿBR ^.ñ§ÿþ«ð`øiäA€V$dñx0 €«åÖá÷úÉGHD„8 ¾ºAýþrïþEï€ ‚±,Ä8*äyh0ââèsýÿ­7pÓ°ƒ$¬JéáK!âÐ`À:|HýÃ?òIÉʼn>P_a,ŸûÿyTŒ*A“Ð0 ÀüB1…@ÀÂWûæž@ œ¿¿!0®~ïð`¿‰?å6Ùà`Kéè ”éáx]æÿÙ€œ¶áø0ðÀš‡ ýR¯¶ïÿýC—‚ü|bX´ ƒ\?†šA€q\mó¿ÿë"rVIZª]qòŸÿó––––òJ¼¦œo@À «/šy¼€ Ê·„¥CïH{ý÷´Á€W=§£D±+âWÎŒ+˜y\@@…ÛøïÿòIYi“2ßï´t¼¡÷³Ë*õWüs BX¼~aÔ€„ hÇÄ¡#ÅÒ|ù®Ú%ƒ4^¨ìh–$+.­±ßð*$#6Ó‘ï À @†?sëßÖô$^?0Ö¬BùíÇ”`*TªV%*³A¹ûQâR²êv90€`g•OÈOf~¹ýþq±±±¯ß÷ŒˆôRr9Ì „  ~~;¸” yyy†âð`Ëý „ T\ªø”\_0ôóÒÂ+õ÷¸ P µÐïŽÿœDÐŒX¸FsÿýÅÁo‘ h00ß"ÿ¬ ƒóò90çär?ÿó‘‘ÿ~ð@Àƒè¨ ¸lHÄP@Àƒè\\6$ â/÷뉄0`aÕ¤x˜àCYÿý`À4¥i_' Àý+!“ÿï À óâ1‚à`a|Dô  0?>#.ÄP/„bbgÅ?ߟ±A3C_U4A€hy§Àÿñ3â‡| )v›'@À8— fÿá ‰bW‹æm§ˆÿÿö`A€¾ßÇIƒCD ˜‘’êr€ ûÿÿç-/-/þÿ×€#‡ðPÊØ0`Ðþ ÿ}¸ª0 Ћ  /ÿùYWËJS2ßï¬´¯ûÙV@`¡ücˆÁHÀÎ∠À/ƒ ñD`Á†¤Oÿø•'—1)0ççýÌ9ƒ& ìµÑ`>1ü„¥ÀÀ€t‹¡ÈÄ"` %zsîÄÄÞ8^$—6òÀ`;„‚÷ü‹ ‘ªÈHù‘__ÿø/xÒ€lS–ùÂ"¿ô/õ~ñ£ñõ.¶>Q·/ƒÎ z‹õqÒm=ùùoÀÀ üx?‡ÇDÊ«ØM>VƒÎ\£vÀ:$ýïîQLµƒ5¡{jh·ÐÍù(§€Ó„Dü#8J ÏÜ´˜ Hg¬Éh0 ÀĆq*Ì¿?Ö,Äliˆ×ïûÇ,?!øåp`Í¿¿1‰‰¸LN ËûÖz (|C/= >!—¾œDÞ#.ÿÿq!ð äBcÀ 2´ÿ¬ƒò¬ŽB AùVG!þÿ9ù Çÿ x0>ŠˆÆD `aŠˆÆD `aQØ0€Àüù(°`| /ˆ¿ßK‰ Z£Ö’ ðHùÿûË-Ò }ò»åAœr±-Z³0àÀ9[ñ'ärÿîÄ¢Ÿ“¿`0EãåpvùIbWçíƒ °ITá`‚ì1W?¿ñRE0`B‹&ã@`‡ÃЄ­ÿÿþTÌÃ䋸^ùg¾ÿÕl h…Á !~¸š0 Љ ƒÀ +ü åe¥eŸßç---/þöUˆ0hØÁ€#‡ôN ñéÅÁ€]‘ !ƒ¼ 5"wûT[-/*çǾ†Mš€—ÇŒI‘ÉÀÀ‡GÄ`O½½8™(0@…OV| Ø û lâàÀ6—«´èÐ`>ú ô±¹WÇóbP —ªøŽôð`Á€kSùï¾Z$(†OÏ“QU_S‰“ƒ^=£Å O½½e€À7¼¬H/"û ÿ GÀ>h•ðhà¡À6(U‘¿:\¼’šéWJ=ýïþ,|^®+÷L–'A £ÕµDeàÀ ƒâ(»‰‹—ˆÄbÊÀÑûýœ€j/ø07Úf8z¬Ø `}¾C"ÿÿp÷äò22/ÿþ<Ã80€ÐþHftÏ÷Ò¢ž¡§„gÀ¿½eàÀ4ƒH¢Uˆ¤fÀ4ò(¯ˆ¤oΜlllkãóxÕ `  fò梆D„̉A;üì‚ |A:0 @iñsˆ‡ˆˆÿœDDDGÿýa€."3‡~œd\\[ìã#c#_ßïf:2›ÿÿïÀ ƒíâ1qóDÀ ïÅÇÂ1ü ÄÇ€<o‘ x00ÊÈ¿àk Àü+#‘…Ì…dr?ÿó‘‘’’|\0ÀÀú*#„TE p0>ŠˆÆD `aUA=ûbC‚H00¥ñ3Ä¢‚A„/Ÿÿýa4¥dr  Ò²9Xþø  0?># â'Ð`ùñÈ” (eþýq2@`‡ù¡0 ÀÄÿõ‹ð`~•‘ÊE€x0??#•ŽZR–•}~;Ð0P|•ÃÂ4"|T_%pÑp40Oïϸ©H0 Ó@8Å €p$àÏ$ƒôÊ>4!ƒôËüÛïûª¶ ±U°`ŠÀ¾ÜMhaE€`†úœ´´´³ûû¥––––¦¿ÞʰƒF è“0`ÐÿÁ¾=8š 0  ÀÃR!$P`A† ÿwùYbyybyWÇàȪ 0Њ¡B (¬ ÐgVµ Íp£`0 ÀûRøÌKËK>?”’õªa©<’¦âW?¾SS0`*â!C@`Á‰ …`Œ½†gè0 ¿"‚À‘Ž ÀÂüŠð`~7ø#)e %%)¹'÷¿xå@mQh0pG*ñQX0@ÀÃxŠîâbÅàÀÂ5ñý¼jh0îK|×ø¼†L‚‚B†D þ•EŠŽŸ’ Œø§È'N""ÿþpÐÐÐßÿåaƒ8ˆgÄ¿Á:qqqQoïóŽ~ÿœtdt{ÿÿxL€È\|#?ƒõZ *á°øôºRGÿû‰x00ÊÈ„ÆñIwâîÿ¬ 0`Àü|ŽIÔ¡( ¤²_ÿè䤤d_¿ø0`ÁõñД /ˆ€”„9IE½åÁ—ûÿ& ÀÃÐ,ñ6Ü@ ‚µä_ÿõ†Ð`~•‘ÊÅ£ÿ‘Êÿ÷ð`î? TUDQõÄdÀÑè•â/÷ãb„`À9ƒbo/ò‘ðgÿþúÅ|åY£ð0 eÀxIù¯ûü²’’²¤Ïïy]UøApÉt+ƒ:+®sûßßqBÀ`þ ,Hô1þ Ã/ÿóRbX0?U(¾VP¿ªÈeÞþþí-ƒB ð£(0åø^á:Ó¿ß.*‚ 40¢¦ À4‰@|HÿþeeeñA}„²ÇŸß·--MKGKfÙôi|8 ð’p0âEø¡¨×§Fvƒ @(¢ ñxè÷û¿ÝËJº`İdú÷ÐÈÒ0àÀ  > (£ žÞlQ´`}†¢¯o„a«ü ™ËKKK>¿•’TÛ¥dË›sûØdÔ̰`ba¡0 ÀÅ8R ËØf±Á$O¤Aà ¸f8Á…úJTø0`ÁøñùÐJ¤ß'(O)M>½ûÇø¨Œ¬`a•GµD À  P/·A†ù˜¸– /È Ÿôô h0?!œ‹Ø0 œÃ9#oÿó’‘“’ñæÁ€‡òBim^@÷þûQ8hHQP40BPOï5 Ÿ‘FÓ%ÀÀ5*¿)OÇJþ}ýßç«ÆFšŒ~7” ù¨ŸM§A€”*?ùJ($&'8~ éR€a¦"VÁ€c©/=úcþqñÿï󆆆†Šñ11?ðs‹‹Š‹ÿœdtdk÷üq‘îŽ~ÿÄawÔ+5`I—:E˜`A ñU{ÿü‚bcïÂõSîÿÿç À5#þS!×ñø +.Ó‚ŸƒÙ&/._ø©UûÛ€hÈÕßGÿÿÅ'¯••”ÿÄŠª£ò’›4$GÑÒ¬`À ²ÿ~„&(ÙÁbë ý®ÿé€À4ƒ&=ßÇF„%j¸xX½T/àf`?TJVÿßü„¢ÿÓNÀƒ'Kÿ5Æ…ÀÀ ‰^¦‡‹€9Pø×ûíH@8 B.p˜‘ñO÷þ)¸u€ ‡ªï”ƒÞþ‡×§aÁ€sAB?¯ÿÿœ¬´´·ÿùÿÁ€Àð—â1à€^=z’J*ú…qè À å爵¯ÿ{Ó›/TÕ_ ’‰~ìÀÀ7'@ÿÿ(ÕbBµLÜ  ’¤¾¸À°ò¡õ‡ãBx/´•ýßî%¢— ¥åÜü÷ÐȲ0ÀÀ¸MÇ€Àƒ ˆX%öóŠÖHœ€aÚ¥x°ˆ¹Ê ½#¦ç--1,üü^ZL¹¸G-%á2~|¦¦@À  . Gˆ… ̽†k`ÀÂý º0`~¥xøƒ ¬ŠAù/#{teX|¬»¥Ÿ_O!p 2VèR.Lt!‚‹Ê«ÿߌBW5SÅO‰A?v`€:ûc¢à•I‰`U@öv £ÿÿþ$&Žª«‹A€”.‘§'Ü ¤Qhdÿÿ¹ð` Ç 2‹V\<ùè²ï?þý¡°õ#ï !,0EGÅ4ä÷Ë¡zªæp`Á€¾/¿Žpèü *›ðÿ~†‚Rº`ÑX0åßaÆeÀÀ *ñ÷õ¶ƒ Ëì×`”‹£‡GÁ¸¸Ð™¨¿\Hd!üx\ñ#`Á*õñÿø#ºÞ?‰4Žô*¿UÐÎïÏΜDÄ|®Cü9ê¨4Oßïù5DäJÁ€r*†ÿßö(LÁ€sT%*§Ð‚0 ʼ#=ìA€oV$ƒDýÿW€`€qø’®ÃòòÆå¿ßã—•t¼³ûïB~ƒB ' ¯2 Œ.ÏðA.³Oÿ¾,Y€ÍÌP`~C2à ÁPû× €’ É}{û¿ç1-1.þünZKÀl2“t¤n~|†Ýƒ. Gˆ„ÒÁ€Ï<<¯ ¹FŸƒÃ¯›ÇÀ4‘Dh0?*ÈÏ€m¾xJ/òª ôhÿêi;ó LÖP2’”t“óõäÞA€ð`!ËÝ)&ýû’‚¨~\á8i°`¾]’†eÁáò¹Á?äHDwÁ WÙpÀñ?ûÿ:<³Àzé0å%ÞeÈÀ7ث޲?ýþÐ  ßÀ«ä8ÂÿU×Ç¿¿aôàø”_5å € ’¡-TéÙ°`A€rø•aß÷î/ˆ¹€iUù¼„¸GÊÙwûþDD† UeÂô~ªÿÿØ ›È¾ ûÀÑ?€x0 >aÿïü¨ `Õ•Xç@`À>‰?>îàƒñ.›‰?ÿK¢bbŸçþý8hhho÷é"bbÄÿÿÎ..21ÿþq‘±‘ÏßóŽŽŽŽ~ÿœ|„|ƒÿüä#ãä¿é ¨ ü×Þì¨Ñ/Æd$_¿èà HüÝX0 £õq·ÈH¿Ö)Xü¿í¾NK_"ýÿ999)7ïùÊJJJ?ÎNRRMùú9I9úbRUùúê€4K.j½ÒÔ%ƒEý)*üÿG@`:°2÷õ`À7 jÄWÊʿŬ½_Û|¼´«óü奥eŸŸ§---,üý9iiio÷ìJž’õÿš|¼¹ß÷êCªÄ~©—»x‘ü3-/þýGŸƒÐ%Ö_ ^ –¬'éi_÷êIUû/—=-1þý9iyyo÷éËËËË¿¿bL¹_Ë®¹óÀÀ5ý0ü¼©Ç÷øqBX0EàÐ=KKʽýþròòòÏïÑËJ¾ZUýûcà†¬¹§¼Ø?Q€+,ÿ÷è¢D°†^^Ûåå¤ÿß§+))*þý9II9/÷êIšˆ.eêŒÉÉ¿QÝP0 Ãÿoœ~»äd¿ß¨ð¬Ñ/æbKÄŸÌÈÇÿ¿NFBBCýúqѱѿïÖŠòµpÓÑp0cõFcÆÿ¿Q¶Ô?Œ½¶ƒÔ?û/Œÿ~£Ú°AüE|?ÕÚn6+ýú‘0ô;â¢ÿçÿÿ8ˆxˆ÷éÃCCC¿V5ÑQ¡”Oÿüã"ââßßçýÿ8èèøçÿùÇÈGÇ¿ÿÎ>B>Aûþr2/ßó‘‘‘~ÿœ”””“÷ü䤤¤Ÿ¿ç')'*ýÿ9IIYWçéÊJJJ??NRVRQùþr’Ò²¯Ïó––––~œ´´´³óô奥¥ŸŸ§----þý9iiig÷éËKKK¿NZ^Z_ýúròòòÿïÓ————ÿ~œ¼¼¼»ûôååååßßg///.þÿ9iiio÷éËKKK¿NZZZWýúr²’²ïÓ””””ÿ~œ¤”¬—ûô䤤¤¿ßg%#%#þû9 ÷ÙÇÇÇÇÿ¿NB>>?ýúqѱѿïÓŒ‹‹‹ÿ~œ\L\Kûôâb¢bŸßçþÿ8ˆˆˆ÷éÃCBÂÿ¿V<H¨àh"ßÿçþÿ8ÈØÈß÷ùÆÇFÇÿÎ>B>Aûþrßó‘‘~ÿœ„Œ„‹÷ü䤤¤Ÿ¿ç%%%$ýÿ9II9GïùÊJJJ??NRRRQùúr’Ò’ÏÏÓ––––~~œ´´´³óô奥¥ŸŸ§---,üý9iiig÷éËËËËÿ¿N^^^_ýúròòòÿïÓ————ÿ~œ¼¼¼¿ûôååååÿß§////þý9yyy÷éËKKK??NZZZYùúr²²²ÏïÓ––––ÿ~œ´¤´£óôå$å$ŸŸ§%%%$þý9))÷éÈHHH¿N>>>?ýúqññÑÿïÓŒ‹Œ‹ÿ~œ\\\_ûôââbâß§þý8ˆxˆ÷ùÃCCCÿÎÿþ±¡”dheÿÿ8¸¸¸·ÿùÆFÆFÿ¿Î6:6;ÿþqÒÒßó~ÿœŒŒ„‹÷ü䤤¤Ÿ¿ç%%%$ýÿ9IIIGÿùÊJJJ?ÎRRRQùþr’’’ÏÓ””””~~œ¤¬¤«óô奥¥ŸŸ§---,üý9iiigçéËKKK?¿NZZZ[ýúrÒÒÒßïÓ–—–—ÿ~œ¼¼¼¿ûôååååÿß§////þý9yyy÷éËËËËÿ¿N^^^]ùúrÒÒÒÏÏÓ•–•–ÿ~œ´¤¬§ûôå$¥$Ÿß§%%%$üý9))çéÈHHGÿ¿N>>>?ýúqñññÿïÓŽÿ~œd\d_ûôâ¢â¢ÿß§þý8˜ˆ˜÷éÄCÄCÿ¿N""ýþpŸÿú‹t\[¢žÿÿ8ÈÈØ×ÿùÆÆÆÆ¿ÿÎ2:25ÿþqÑñ±ïÿó~ÿœŒ„„ƒ÷üä$d$¿ç%%%$ýÿ9))9'ÿùÉIII?ÿÎNRNQýúr’’’Ÿïó”•”•ÿœ¤¬¤¯ûôåe¥¥ß§---,þý9iiig÷éËKKK¿NZZZ[ýúrÒÒÒßïÓ––––ÿ~œ´¼´¿ûôåå¥åŸß§---.þý9yyyw÷éËKKK?¿NZZZ[ýúrÒÒÒßïÓ•”•”ÿ~œ¤¤¤§ûôå$¤ä¿ß§%%%%þý9))÷éÈHHH¿N>>>?ýúq±±±¿ïÓŒŒŒ‹ÿ~œ\\\_ûôâ¢b¢ß§þý8ˆˆˆ÷éÄCÄCÿ¿NýþpŸï󊉈ˆ~ÿœddL[ÿüã#"ã_ÿçÿÿ8èøè÷ÿùÇÈHH?ÎBBBAûþr/ßó’’’’~ÿœ”””“ÿü䤤¤Ÿ¿ç%'%$þý999)O÷éÊJJJ¿ÎRVRSýúr²²’ŸïÓ••””ÿ~œ¬¬´·ûô奥¥¿ß§++/-þý9YiYo÷éËKKK¿NZZZ[ýúròÒÒßïÓ––––ÿ~œ¼¼´·ûô奥¥¿ß§----þý9iYIO÷éÊÊJJ¿NRNRKýúrrRR_ïÓ’‘’‘ÿ~œŒŒ„‡ûôä#ä#ÿß§þý8ØØØß÷éÆEÆEÿ¿N.**/ýúqQ1Q?ïÓ‰ˆ‰ˆÿ~œDDDOûôááâ!¿ß§ þý8HHHO÷éÄÄÃD¿Î**.1ýþqq‘qÿóŒŒÿÿœltlsÿüãããcßÿç!!! ÿÿ9  ïùÉIHH?ÎFJJIýþrRRROïó’“’’œ”œ”“ûüå%$¤ßß§))%(þý9IIIG÷éÊJJJ¿NVVRSýúr²²’ŸïÓ––•–ÿ~œ¼´´·ûôåee¥¿ß§+---þý9iiio÷éËKKK¿NZZZ[ýúrÒÒÒßïÓ••””ÿ~œ¬¤¤§ûôå%$ä¿ß§'%%%þý9)))÷éÉHHH¿NBBB?ýúrññÿïÓŽÿ~œll\_ûôã"ã"ÿß§þý8˜˜˜÷éÄDDD¿N"""ýúqÐпïÓ…„……ÿ~œ$$ûüÑ0œC÷üâââbŸÿçÿÿ8ÈÈÈÏÿùÆÇFFÿÿÎ:>:?ÿþrÑÿÿó~ÿœ„„„ƒ÷ü䤤dÿç%%%%ÿÿ9)))/÷éÉIII¿NJNJKýúrR’RŸïÓ””””ÿ~œ¤¤¤§ûôå%%%?ß§))))þý9YiIO÷éËKJJ¿NZZR[ýúrÒ²ÒŸïÓ––””ÿ~œ´´¤§ûô奥%?ß§-+))þý9IIIO÷éÊJIÉÿ¿NNJJKýúrRR2?ïÓ’ÿ~œ„„„‡ûôä#ããÿß§þý8ØØØß÷éÅÅÆF¿N..*+ýúqQ11ïÓ‰ˆˆˆÿ~œDDD?ûôâ!á¡¿ß§ þý8HXHOÿùÁAAAÿÚâqÿ󊉊ŠÿœT\TWÿüã#"âÿÿçÿÿ8ØøèïÿùÇÇÇGÿÿÎ>BBAÿþròÿó‘ÿœ””Œ‡ûü䤤dßç%%#%þÿ9)))/÷ùÉJII¿ÎRRJOýþr’’rïÓ””’“ÿ~œ¤¤¤§ûôå%%%?ß§))')þý9IiIO÷éËJJJ¿NRRRSýúr’’’ŸïÓ””””ÿ~œ¤¤¤§ûôå%$¤¿ß§'%%%þý9))÷éÈÈHH¿NBBB?ýúrññÿïÓÿ~œ||loûôãc#cß§þý8¨˜˜Ÿ÷éÄDDD¿N"""ýúqÐÐßïÓ†…†…ÿ~œ4$,'ûôá!!!?ßçþÿX0 ‡„ â?ÿçÿÿ8¨˜˜ŸÿùÅÅÅEÿÎ.6*3ÿþq±Ñ±ßÿóŽŽÿÿœ|||ÿüããããÿÿç!!!ÿÿ9 ÿùÈÈHÈÿÎBJBKÿþrRRR_ïó’’’’ÿ~œ”””—ûô䤤¤¿ß§%%%%þý9II9?÷éÊJIÉÿ¿NRRJOýúr’’rïÓ””““ÿ~œ¤¤œŸûôå%$äÿß§))''þû9II9?÷ÙÉIII¿NJJFGýúr22ï³ÿ}œ„|„ûìããããÿß§þý8ØÈÈÏ÷鯯ÆEÿ¿N&&&'ýúq11ïÓˆˆˆˆÿ~œ<4<7ûôá¡¡¡ß§ þý8H88?÷éÂBAA¿ÎÿÿýûPˆgt°`¢…yÓ}4ƒ< X0Q@¼„i¾¿ÿóÒ ð0 `ÁE ò¦új| `¢…yÓ}ÿæ&%¨ ð`‚Šä MôÖ ø0 @ÁEƒ ò¦úÿÿÌLK`0àÀ5 +È@›é¬ ð`‚‹ä Mõÿÿ˜˜¶°`'Á€j ,W€ 7Óh0àÀ5 +È@›ëÿÿ1q­ ÀOƒÔ X0¯!o¦Ð`'Á€j ,W€ 7×ÿþcc€Ÿ¨(°a^B4ßM ÀOƒÔ X0¯!o¯ÿüÆÇ7@ H0Q`¼„i¾›€ ¤(°a^B4ß_ÿùŽŽn€`¢Á…yÓ}7ƒ@ H0Q`¼„i¾¿ÿóÞ 0 ÁEƒ ò¦úo€`¢Á…yÓ}ÿæBA¼ `A‚‹ä MôÞ 0 ÁEƒ ò¦úÿÿÌŒƒ€0 À4ƒ +È@›éÀ `‚‹ä¦úÿÿÌ„ƒ€0À4ƒ +È@›éÀ `‚‹ä¦úÿÿÌ„ƒ€0À4ƒ +È@›éÀ `‚‹ä¦úÿÿÌ„“€0À4ƒ +È@›éÈ `‚‹ä Mõþý™)' `(A€h ,W€ 7Ó0 À4 +È@›ëýÿ2RN@ÀPƒÐ X0¯!o§ `(A€h ,W€ 7×ûöd¤œ€¡ (°a^B4ßN@ÀPƒÐ X0¯!o¯÷ìÉI9B @0Q`¼„i¾œ€¡ (°a^B4ß_ïÙ’’r„€`¢Á…yÓ}9B @0Q`¼„i¾¿ß³%$ä 0 ÁEƒ ò¦úr„€`¢Á…yÓ}¿fJQÈ `‚‹ä Môæ 0 ÁEƒ ò¦úÿ~̤“˜0 À4 +È@›éÈ `‚‹ä Mõþý™)' `(A€h ,W€ 7Ó0 À4 +È@›ëýû2RN@ÀPƒÐ X0¯!o§ `(A€h ,W€ 7×ûöd¤œ€¡ (°a^B4ßN@ÀPƒÐ X0¯!o¯÷ìÉI9B @0Q`¼„i¾œ€¡ (°a^B4ß_ïÙ’’r„€`¢Á…yÓ}9B @0Q`¼„i¾¿ß³'$â 0 ÁEƒ ò¦úq€`¢Á…yÓ}¿fBAÀ `A‚‹ä Môà 0 ÁEƒ ò¦úÿ~ÌŒ{€0À4ƒ +È@›éÀ `A‚‹ä Mõþý˜ø÷`(€i ,W€ 7Ó€0À4ƒ +È@›ëýû1ñÎÀPÒ X0¯!o¦à`(€i ,W€ 7×ûöcc€ ¤(°a^B4ßM ÀOƒÔ X0¯!o¯÷ìÆÆ7> P0Q`¼„i¾›A€Ÿ¨(°a^B4ß_ïÙ‹‹m| `¢Á…yÓ}6> P0Q`¼„i¾¿ß³Ö ø0 @ÁE ò¦úk| `¢…yÓ}¿f"!¨ à`‚Šä MôÔ ð0 @ÁE ò¦úÿ~Ì<3P0ÀÀ5 +È@›é¤ à`‚Šä Mõþý˜hf`'€j (W€ 7ÓH0ÀÀ5ƒ +È@›ëýû0Ð ÀOÖ P0¯!o¦p`'A€k (W „ 7ßûöa ™Á€¬( a^‚4ßlÀÀNƒÖ P0¯Ao¿÷ìÁA3: X0Q@½ i¾ÙA€¬( a^‚4ßïùep°`¢…z@Ó}²8 `0Q@½ i¾ÿßòþþÈ à0 €ÁE ô¦ûdpÀ`¢…z@Ó}ÿ¿L@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿÀE5 ‘õ"„4h 3¿ÿÿÿÿþ7 ?ÿÿÿÿÿãúÿÿ ⢢âà_¿ÿÿÿëÿÿÿÿÿüy:ÿÿÿÿÿÿ×ÿÿÿÿÿøòƒEýÿÿÿÿÿãÃIÿÿÿÿÿü3††††ÿ~ÿÿÿÿÿðÎýø3‡‡‡ˆÿÿÿÿÿÿâÀÅÿÿÿÿÿþ!! ßùÿÿÿÿÿÿëÿyxÿÿÿÿÿ†q11?ïÝ}Xüÿü3’’’’~ÿÿÿþ'þwæÎÿë6ö3ŽÿÿûÛ»{ÿ÷æÞïý Ï=ªñïÿýÁ;V¶Ó‚¼+ƉÉâÝÞÇÇÇÇ?¿üu¼øú>»ž=ÿÿp7t€f&(&%ïõÜœŸÿžÜ(Ù·½¶Î.“ÉÅï6æ)„&éàÍОomÙå[yÖ~³zômÓÏ?s%›zíüã÷m »”mïYOGÝ74û홯"Phß‘RÄ/&™ñà~|w7Ó+m½É¾Ù'´xyñ“?^uì$ðÌLHLJýÛG¼ë˜„9ñîæÕÃXξ¸x¤âwÓDDZùíÝ<™çÞ³Ÿo?: ɹ¸u'Ÿv—&÷×É,Ìû°q¼ñ·à4?ÏWŠ Dbe|qÓ5‡=5G’£'?èm ¢g¤£ÿ>u»u¹y!7yä+Ã/˜†ò  À ƒCù"Ø ˜4?oÏbÖC!HÀ%Îqç BpøÃ0‰‰ A¹ø-¹1ãØõ²<3ðÛðÛé0Öô-†ø¼øg---0üú7ÞÖó,«æ%Ÿ.ôþá» ¦}˜wÃ"Ò>ì—…<™gžÉIÊÊ¿¾‰`j; Ÿv„ù9=1 äZÁ€‡òE¤@h`^€ÔRóN„ð4OÏÏå€À8Ð`Aƒ8Ÿ¶—à 0göÃ7ÀÊ ñê À ŽS€Yùï.˜ˆ”¿ ÌGœ=†H˜˜ÇD¿Áq­WŸz­Ÿ2¼ ?MÆ*ãÞ´;˜†ûÒ!µ8žÉÉ釦¡A½ÈÚ>~9Ü qÊ@РŹRìsóÓ€f$$"!çåÌ0d}Á|oÞsøêÉžä™lÌY¶úçݶ‘“4ÍíÙ÷Ý0Èåk2ÖôÛsŸA¡DçÍ=²œ|~|¨ À C&† ¸40b°oA˜n(Ð @4?Bm@À4ƒCõÿ3ãySÇÀñ’ñïà‚ Ðf6?OÐ`~ƒ7×BŸÂC0ιô,ÿÎ1qËÓœ¦x©œ{vڳ‰9úú ÉPdàc´“Ö6ö:û{ÐÓ:ë·sn+´,Ó÷mÛr¡™<ûØg///.þúÛ{¦Ý~›{£à}»&Y²w Dö÷¬›Ý·w›fÞúø}Óãr € Ÿ¸/{l=íŸwî“aÑÖC_@%Í{B'¶&ç]öZyû‘>ÙNöÅsm>ÇGGÇ¿9&’{mqøÛu3Ü'ÿÿÿ¿ÿð £üúg¸/ÿÿÿÿÿ âã"âŸ_ÿÿÿÿü2DEC>-÷ÿÿÿÿÿÿ×þú±»ÿÿÿÿÿ¯üèfÅEDD¿¿ÿÿÿÿÿöú†q111Oÿÿÿÿÿÿý¬ðgÿÿÿÿÿÿÿÖÞð)ÿÿÿÿÃ8˜˜˜¯÷ïÿÿÿÿÿÿÿÿÿÿÿøœ {"„8h 3¿ÿÿÿÿþëÿÿÿÿÿãÔ÷ÿÿÿÿÿÿÿÿÿÿüw“Gÿÿÿÿû—ÿÿÿÿÿÇäßÿÿÿÿÿÿÿÿÿÿõü4{ÿÿÿÿÿ×Ïÿÿÿÿÿð"ĺ%ÐÏïÁŸÿÿÿÿÿ""ýø3ÿÿÿÿÿ÷ÿÿÿÿÿpÿÿÿÿÿ²SÎÿÿÿþ¶{ÿÅ«ÿñ‡ Žyü3””””~~ÿÿ¼šÜ+²zïý|œŸÿBÞõ·1»ÿÿ[|^ÿý}ïëgûÕìn”yóï4ŠðΟe'W[TíÛzo~ê†-q×w{}êÊGݵNz½$£°ý<õ÷]cÝ×L“L[Sé¹çž¦GîYÜÆëz¾xó[±r>¯¦£Ã9YyYwç÷¦ë$ûYšÙæpf"&"%þ²¹Š Þw¼}¿úûë•ã݈}&$xµŸm^¶õ©Ý½ît­nêñçßwÜòÛßwzÿýŒ÷w¼ñõ³íÚ\óë†ÉXlûz›ÜÖì^O¹àËDíi¿W{ÿýpJ}ý¹Š;}&y )Ï{xîšö}Ë2$tÞÞñtçˆ\nÅçüm¼ö?{Ýï½í„kÿ°›Ö· ß{Zž³Tøºsãéý…{í´¼»ëßEäÿœ¤¤¤«óßu0Íêo§–£ƒ÷±GÖ?Î=ZݶW÷K©¾=¤Ýî«']­Î®˜º~¶íîêöé,rÍgš§¨ÙÓ®WUêžwþÒ¹·wºÜ_¶ç½ÖçiÜ뻤§{“Øw>ÿÉ¿ÿÿÿÿü~ÿÿÿÿÿÇyãÿÿÿÿÿþè ¸'ÿÿÿÿÿÿÿÿÿÿÿÿxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø† ‹7"„/ ÅïµÂa{ÄÒ<}õÁ¡~8¶äó§\åóçÞÞ¯¯gÜ>Ï ³Âúáåx¼ø¹žc?ɱWû[Çî¹yçâ÷¯ž®´ÉïŒ-ï{ï*¸­Ñû…{ÉзŸ¸Už'|zoIŸ<}Œðãy8ð¶|-Qãï÷¸ðúxüõŽ>´Ö2kÀ &w8^ì~úùñH½íç¬nO'¯yñÖJ|w7ÞÞö3è]=+|¢ñ{â󸹓¿0 äÇÖœsváÿá§qÅ’žãóÖ·[ÎíïÚÜ´OWvC£ŠyëÄòŒtãï|WGßcÃoÛ£ÌSد¸3–•–•~}#ìowƒEü&ଞ8ÜNÏi¼qN&w½è¢sÎü6|M—Þ¡o>óÛ¾Þæ¤ö‘=ª†[á÷ÚÉÝUÉnNCÜ}Ó^žñvöª™vØ‘ÕÝÐû|0–G‰ðåmâ­Äâúõ²P¾z™Õˆ˜ódédÇÜø‹¼üsØÏ5Ξz[zÔ}J{±îö÷ÚÜøë¯{«ï»MÛÞJ¶pçßtÝmÄô-ïk{ì¦÷¿y5'cy=Ï Ò>ò{G<ˆñóŽšÖáVyãlûÛW¹·4)ϼ}žÆû‰‰½öónw~ôêã¿ÛÜû[Üл|~÷O}£¿i#­œ2lÑÝÒi7;_ÿÿü^ü~ÿÿý³Þ¾÷ÿÿÿÿÿäñ{ÿÿÿñ{ÿÿýÿÿÿÿ÷ÿ[wp3cÿÿÿÿÿÿÿÿÿþ?t,dîw÷ŸÿÿÿÿþÞïÿÿÿÿ¡S­»ÿÿÿÿÿÚÜÞë[¿ÿÿþÎçÿÿÿÿÿü– ®Y"„@h 3?ÿÿÿÿþ?ûÿÿÿÿÿüw¾†ÿÿÿÿþ=~ÿÿÿÿÿÿ—è4?ßÿÿÿÿþÞÿÿÿÿÿÇŠÿÿÿÿÿÃ8HHHW÷ïÿÿÿÿÿp[ðÎ.../ÿÿÿÿÿÿñ`¶¿ÿÿÿÿÿÄàƒC:÷ÿÿÿÿÿðÎ ýøo«²ð —ÿÿÿÿÿ‰õjÍýY³ßÿÿÿÿþ'ÿ‡ú¼÷ÿÿÿÿþÃBÃCÿÅŒ ;ÿYª}GL†_ÿþ«Gf9ëý½ñ^Lx½â÷úˆ`åZ&%n sÿÿEgI±xó¢‚þÄÄDÄ¿cÖ;kvÆøg%%%$üþ$¤¤qòoïÔxd9#‡­2³×ƒ’¿ÿÿHÑ3é0´Ï ðμ›ÿ®ê4»¾ô0}å¡QǬÓÕ›Þè—iÏhh2vìpÊÔ±¾…]8å©î¯jçž5ö9ìÓî{´ß!3""B0/íСSŸfŒœa¢}œóÙ“‹WnW¯>ó_¯ é¶yçžó^DðÊ)©6óîÖ+ŠõGÜÍÑWÜ+ƒ@øíÛšj>?{´¡*yï´¯C!¯Y\ÃnorÏðÍÜtÞ}+GÜ~¬,èdا—xøü1C¾*&'ÿÿwW¿mô3}޾œ<óy Ö|ß¾më-'bÞí.“á¦(ûľï«?0ëîr®|E»ÛLóÍš>å¨ê蹚iç¶’Ó³]kþaÕÝõP'¦càxÿM¯+ß® ].‹ÿÌ’PÎ;ßEgß^òRn{šÞ¿^Ò4’½ª®^Þð6ftª@&æP`¡û{ãU¹LJcx U_LW§JÃ×ý÷iz ƒ!+A”up´ëÒ4{æ ¢{}}1 ½sÞz*€9;Âö÷‹ÏÀØä€hab Ò ,Càeìn àÉÝ /<™àÊDuìnJŸ©§D™ç“³WæÞ… >/Ä“ž·í¸œ¬_q×B[r;€Ñ?a;ÇV÷W‚®r¿é Î¬©™YGçÓ+ûÎ'ªÁOQ:Ì>¿÷×Ç0ÄúmôØG“q±±±¯¯íL­Øg®ÀÄÛº¶DFêÌÌŸi ɹCÍáVäïm6æZ€{.½ï{FÍï Ñ«þ&xݧüÁ:®çkîÃAV䤵Äñ´&›{°éóO†q˶rŸa¬{i¶ÛØwµ½Ì[ÛY aœttl{ÿøcŽ~Y"u’§•ÞqÝ„Ï^™n‘ÓÎmcGZiûèFa›”§›`X}FéÂÜO{ÄC5ﻉê:9é|7¯'q^B[~zô÷¯½í£>•§†oZ©çIÕÜpIÇþÈ“Ž²w9þànÓŸk‡®ËKKË¿8{Ah_œ$[YÇKhçÜ»ŽÙþ}Ã=ÆÞš÷*“õ·ÿÿÿÿîÅÆÅÆ¿¿ÿÿÿÿÿõÁiÿ†xgÿÿ÷€ÿÿÿÿ®ªÀ/àÿÿÿÿÿíàÿÿÿÿ†rññÿïßñüwÿÿÿÿÿÿÿÿÿÿü1B¾þÿÿÿÿÿÃ$<¿ÿÿÿÿÿúáaŸÃ?ÿÿÿþð1þ'þVn¿ÿÿÿÿÿÆàÿ€_Ã3ßÿÿÿÿþ¹þjÕ›ÝC8ȸ¸¿ÿÿÿÿÿÿñ¿i³äßÿÿÿÿþ?=ÿÿÿÿÿâ÷ÿÿÿÿø]C#ßÿÿÿÿþ+ë;Øw¼_ÿðÎJJNIùùßü^þ3áᢠ]ÿÿ³g¨fè›ißÿúÏŸŽÚñ“ßøg ã#c#ÿÝC8èèè×÷ö:{àNú„cÂP00”(öáÑ(@Êì3»ÿ 奥¥ŸŸ¿ñ®9ñî{ÿ ‘Q1¡”LÿHÑòbWuâqñ{‘YeÞö'6}íçšéç;»›ŠšqöîÛ´‰ÞyèNpû˜Ýíos»†r²r’ÏÌ4waÞí;±G/6·±O×Y EFºJ$>÷ÝÝöäåÖñ÷Id'ÄôKIãÞžttNNõsñïµN»±¹½ì3:Þ}Ü3ÿY\Ò½Ò£rcîœldlcëß•at2}—>M®>TkÊߤ˜¬—L»LnŽ©õï5ã'Ój¹óï´ö½<ûMùí1¼C™)+ÉÓïÆy=yëM’+ÂrXž3®>µþ¹µ{¤Âú=ÃÇÜ®à3‚wû½®>ð9˜@hc˜€‡õýíÑð»‹!§Hgüÿ©Š-mïOÇÙ÷’ô»×zT¼øãÎì[ƒ9iiiW×äŒÏ{Pºç‰yPdK#ð3>üg9ç×WŸ}g>Ã'Š˜_°Éèåe¥å_ŸL®Ûëe§ÇUn¾¼bbb‚pNÿaÝxÞ0L ÀÃ> ¼ ¼œ0`aƒ8‚ñ=€Ph£×€‡ûýéÐ<ÔÐhaa©³``A¡…†¦ßgî¯ ã#b£¿ñ gÞLìm¢ûïNÒ:/´ÛÓJq÷»ì$29J¾y㎆ó^Xf¹\ùöÒ?zU…{î8óBC3ëB']ÑÌÀ ÷º!,yÄçŹçë0×;K6z*œ2~+Ž˜=…uxgÿÿ´ÙçÝØW¶í<}ªs¤ÊO}õ™:´Ü²gs•Í«íS뫃%pÍ÷l P€ÂgÀÀ á3/*Íâ¿iï À8ƒõò1o´÷À`ú ßf­x29o ÝÇ©;ÍÑ%¨|ë¡SO<'tsð¹_kÜ {îî÷2ѤèóÎî·»»}ÓÿGN<õpÍ÷¥›r&|Ó®Ûn~ÖyvÜyõ­ß…Àö¾¿îîëí4uµwÛhë{»Gvåwî“»—þ'§þ|3Ž~ÿÿÿÿÿÿ×ýY¿€_ÿÿÿÿÿŽà>ïÿÿÿÿÿñÞÈHHH¿ÿÿÿÿÿøg!!! ýÿÿÿÿÿýÃ}ÀÇÿÿÿÿød‡‡‰†¡ÿÿÿÿÿÿÿü5ŠTj"*‡ÿÿÿÿÿÿÿöøîÆÆÆFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿภ?›"„Hh 3?ÿÿÿÿþÞñ{¿ÿÿÿÿú>¾½ÿÿÿÿÿþß_ÿÿÿÿÿâ.}Äç¿ÿÿÿÿÿÿÿÿÿÿâ÷ÿÿÿÿÿøýÛ[¿ÿÿÿÿâÊÿøgþýÿÿÿÿŠÔñíÀçÿÿÿÿþ'ÏS.ÿÿÿÿÿñY^ïÿÿÿÿÿÇ}ÿÿÿÿÿ á!!`ÿÿÆ™ç¸^ïoÿÿÿÿÚÞ¡)¸hhøýä¼G\Å?ÅïÿûÄòx¿ðÎ"#ÿÿÛß»½´çÛ·ÿÿï&£x£ñ3ÿ¿ýâï-f€%lÛË­Ü{PþÇqÿâóâòe÷83‘‘‘ÿ~ÿ‹ßÚ‘•ðÍìa©=çÞK[ÖiëSÛÞ´¸õ¤y™=ÛRŽy;ÞNÉ„NyVªöëïkrÒ{ÉO>ܱTÝä–Ns™§?[~áã,ô_IÏ¿ˆ YН“’±Ÿ·½Ï¼£óüd™êdœý½Ï'ßl§·=é鄌VÞÆµŸ½[ÞÄÉž-­üBÏŠÉßÂû‰­ç×Ͼû ×5DqÖóízkŸ[uèU“=”ÍŸvÚÞÞ~õcs{š›Åîz­½ŒðüŸô¸¯LŠÇ¹3t*ï{‰šÏ·¹íú³yø£sÄù+Ü/=ŠwŸ>ÖJÎxø®b—5dñöz·¼Q¼™‰;“â­çÇäüyIúñ ɬKH£éïÐøŸZ'=¢„Ïnžñ -æ)…³ÌIãóÌDyåï'G£¬œòùç½WÉI]µàBóÍÔ}ä?sÅŠ•Ï·º8“ÞÆåse'×µœ~Ô>ûyÇß¡Hù‡ßos{›ßdçÅç¾µb<‡ÓÅt÷­Oj­¹½ËgÚß·“÷Ú¹¨uÝö7>ûï¾Â[<ý­íçØÍ¾/{öäöäí¹!IôÍfžô¶u]ïo<í²ÛÞûÅyÇÿß}ÿr¸ï÷ܯ¿¹\»Y—÷ÚÞçÞŸlïkwo}­ëï~ÉHÈÈ¿±7ÿþ?wÿìdÿÿÿÿÿÿÿÿÿÿÿúÛýßÿÿÿÿ㺻ÿÿÿÿþ¶þÖïÿÿÿÿëo áá¡¡¿ÿÿ¸^ïÿÿÿÿ ‘N‡ÿÿ[umÌnou½ÿÿÿÿ·»ö2mÀÇÿÿÿÿÿµ¹ÀGÿÿÿÿÿÿÿÿÿÿðJ á½"„Lh 3?ÿÿÿÿÿ¿ÿÿÿÿÿŠ ïŽÞœ ^¿ÿÿÿÿ…ÿ:;½ÿÿÿÿ…Ü2ŽÿÿÿÿÿñjÿÿÿÿøZ+Ü{ÿÿÿÿÿÄÛüC8xˆxÿÿÿÿÿÿü^ì^þÆFFFÿÿÿÿÿüYC,^ÿÿÿÿÿøg ÿ â"¢¢ŸßÿÿÿÿÿðÖÐÑ5 ÿ â¢ââßßÿÿÿÿÿðÖ 2†ŠTjÿÿÿÿÿÿÿ­¹pEž5åF–Ýÿÿÿÿÿ×—@>.4Öïú¹×ÿûVõ¯§Çç¿ðÖ4¸(˜ÕF¢ßøgýÿû¹©G6Üwÿþ>¨°~JÎóÿøc¼j&7Ƣߩ¿{ ä$¤$_ß÷¸ßs°ÒÙä}y÷C9IIIW÷ïÿñÖx÷ÿB¿‡û¡Ý §ÅîÓÅDÓ¡‚fœÀ¢«ÞÆîï±¹­ðÎZVZYýõ¦»N›¿ìÙç·†Mï,óÏ?{K¹Ç¸Ù]ÿƒCýׯ|Yï°•Ï®3ï ädddŸŸ‘uî{Ò÷iš¬Úp,}Çá›õ³ñù7 öç’5’Æž>úÇ}Ûa'­c;Eo×¹ÌO/ñëúl3Œ‹Œ~ÿ¸Šà ¢Ç†â"ªÄgˆŠý§ÿÀ¯¼3 äd¤¤__ÓSðÁü4í/v™¯O>è÷W° ?cZ¾áž{Å< ÖÏ Ü/xü•®½ >}«Þ¢òoþ*+߆qѱѯÿèõ,Ls¶¿_ðÎC†ì×ëω[¯¯>´žb¾úô.Y™3ÂÇH}¬“o'k>¶{þ>vóøüÿƒO¯ºÆÆÇF¿ÿ³˜†«¶çUiõî»–bÑcžõjdÍU†ìSšë·ºÛýà§{÷¼ Ä„„„¡/óÉ–ººLEO-N»»Œd§…ÓÅ«í¦÷6ûïnd©ûžOãÚ¦pÎ:>:9ÿýàeàMuÓ`MOÇ<öÛ~shŸnžÚ7×Bqõw½yé²uòruºçï«#ïy®Œñæ’¯S룤Ûÿÿÿÿÿý~¾üؽÿÿÿÿÿý€ÚÿýdgCsÃÿÿëg#sg?ñ¸Gwkpgýÿõ©è§óï{¡ÿîCwa ïÿÆà¶¿á™0gÿÿ­¹àý㌲{Þ}V€K óï t>ËKKË?¿ŒHns‰†a×ÿàE… â!_îÂå•ïtk¦÷º±oy²SïTOà÷#qk•ÎBÞuËtk¡¼óŠ/{£i½ÈÜŽ‰9_OCÍ£8шû£Y4$a™õɺ°CtÛMÍ”öÄDÄÄÀÀ‹Ý 㣣£Ÿ¿Û‡°\Ü)î´tHHö¤)o†ä÷†bbbbð*&}Ì4ö·­tŠ'v žðÎ,|°ÓïhmGžm“–W¾îìhU\}ÕÕÜAî>ñT/çÞ."t›ަ®S˜˜˜”+ŸG¡žÝ{ÓÌO¾™|n²°Gç¹e<Þxkg=¬ ·q›ÒÒ]ËFà5_d ¼Qx6ñH/{çãìóÉí8µÎûÞµø'æNxò¶ãì1ä<¡ŸpÑ«UçÉš£âué³ÎíQá{Ò <óѱ\sÀf$$&#çñäSØX>qîð2³GÅ ÷Ç-¸3<«“/g dòZ°¦Ú0ǘc<¬‰Þò{Ç焽|{ã´Ã7ª@¹ÏÓäÞ=‰ãÙ €ÎRRRMõïïi—,Ñ3  =`hd€‡÷ýíÖž¼zx4é€À šÿ{Ì3TP`¡‚ˆH¨ÔCã ù Ga¦7C8øøø÷ÿô$2cÏlY×2Kv¡™ö¨û_›J™1í4Öõóäõ÷Koy1×+GãÝ ÎÅúU¯rš½ P?Ã3ä÷’óÆèÕ÷Üx}¼B“ƒ }DŒyÎèáSŸ~—“Ô†qÑÑÑïß÷cv4„Ïž8èÝÍœ¼Ýæóm·°×ÍP‘Ÿ<敇±nn€ aðÍ<èøH  ÅA€jäj(â X0?/~3[vÜ™ú¤ dy÷¶æö˜sÎÆ.7FöìÊÔqÑã~GŸ ã£ã£Ÿ¿Ã8øèØçÿ÷ßXmËïºwW¶÷¹¥çÝîahH¨g½>¢7¹ÞèÝÕæÄáðÎNVNMõõÕµ{ÕПt]7O±ǴÜ3~ÿ 㣣cŸ¿ß¹&E9tó{fþ-7;÷+YÖÎ÷]ÕßuwÜVŽqßus¹üv§´Û€¯ÿÿÿÿÿûÃ8èèèççðÎ6665ýÿÿÿÿÿÿ ¨fðÎ6625ýÿÿÿÿÿÿ‰ÁŸÿÿÿÿÿ·Ÿáœltlsÿÿÿÿÿÿúê|ÿp/ÿÿÿÿÿyïÿÿÿÿÿl#_ÿÿÿÿÿí•ÿÿÿÿÿþÓ¿ÿÿÿÿÿÿÿÿÿÿþá Z!"„Xh 3¿ÿÿÿÿþ¿_ðÏÿÿÿÿÿ×þðÏÿÿÿÿÿÆý}yïÿÿÿÿþð\wמÿÿÿÿÿð¾ãßÿÿÿÿþ,þwÿÿÿÿÿ‹üïÿÿÿÿÿ/ÿÿÿÿÿâa^ÿÿÿÿøg ÿÿÿÿÿÿÿáœ<:=ûÿñÉÿæÞ}í5+ÿ÷Që†Å qÄÿúàzyßúè 4OÐËïü3––•–~ÿõÓqõiïaÿÖÝÀ‡þúþ¨†zŸdC Î8‚ìœB2ì%é¨ÞÓ0ɰÇ㫈Á¡~‡œGXény½¡œG¹£`1¹ÐÃ9IYIGçáäoBwŸ}æâ1äÞÀîC¸AÈxY~8ȸ¸·÷×ñ¼"'z¬gÔšt(Ý)DB9X#r®M6‘áò}Î__¬“dž¬Ã0ÍÁµéÎyrÒòÒ¯¯î!¾¶q÷+¡˜ÉuÏ>÷îí«Õƒxó€f&&&'çç4yV ‰‡™8P&êgþ;@ç†âD€‚ :²!2@`Á†ùü ‰Â½ ÜM\»ÆÔ)}ŠrÅp´ÞÛ½ÛZä6Ôn^'9[{ÅŠú<2 ž5ªÿ¾<.ÌœøÎGS΢ÀºdçÚΤSäÁ“³Ο®jÎ Ï IìgÝ@ ¦ ¼Š€0æ¿Þƒ ‰‰‰‰Á»ýÈ*(ðÍð5V¨èup`¡þ‡|wû±@E៸3 ÄÈÁudBd€ :²/øâO…òjÌ#'Ý=‚¿r·œ`ïð"ÆqpïŠÿpgþÿÜÿÿÿÿ†±Šˆ|Wÿøgüÿ᜜”œ“÷ÿÿÿÿÿáœLLLLøgþÿ¸ ÿÿÿÿÿ†H¸¨ÇD¿ÿáœt|t{ÿûÿÿÿÿú`”óàdþà[ÿÿÿÿþ¸"žÃXgÿþàSÿÿÿÿþ¸žŽ†qq±qÿÿÿÿÿÿøgþþà ââââÿÿÿÿÿÿÿ÷Î*../ÿÿþÈHHHÿÿÿÿÿÜ \ ÿÿÿÿÿÿÿÿÿÿÀe 4¥B"„\h 4¿ÿÿÿÿþ<&ñ¦÷½@Þ÷,~ñ¶÷Œ{Þ÷-ð©½îxз½ìo¸k½ï÷½ïï{Åî·½îá˜f†oï{Þô[Þñ {Þä[Þô[Þô[Þñ‹{Þñž¼3 Þ¦÷‰7½ÂMïp£{„ÛÜ/p½Ìo €ðÐ`¾Á….š ˜  ìP2ài àààŸÞõ·±¾¦÷©½êoxh¼ ƒö (p4ÐkÀÀyx0_`—Mòóø4Þ÷¸nÀ¨ø¼3~ÿ‚} ÿàŸà ŸC8(((HÐÎ ð3ƒƒƒƒ{ áaaa`^Ã8XXhhG°Î ð3…†…„ƒ| á¢!aáÃDAøx¨7 Å~*è3‡ˆ‡ˆ‚z â¢b"!Ã8˜˜¨¨G°Î""**è3‡‡‡‡z â"b" Þƒ8˜˜¨¨G Î&& è3‡ˆ‡‰‚z âbb¢ žƒ8˜ˆ¨˜ Î è3ˆˆˆˆ„{ ááâ"!Ã8xxˆˆG°Îì3†…††„{ áaaaaÃ8XHXXG°Î ì3ƒƒƒƒ‚{ àààààžÃ88888°Î  ì3ÿ‚‚{ ßß _àžÃ7××çè'°Íõñùö ì3{{||‚{ Þ^^ž žÀ„}y{{çûëƒ7×çÇÏ÷ÐÍýýþô3ÿ‚ƒ‚} ÿà`¿àŸC8OøH'ÐÎ ô3ƒ„…†| á¡a¡`Ÿ8XX88'°Î" ð3††ˆˆ‚| á¡¢! Ÿ8x¨x˜'°Î*&*2 ìs½ï âbbâàžÃ8¨¨¸¸'°Î**.2 ì3ˆ‰ŒŒ‚{ âb¢â Þƒ8¨¨¨¨G Î*&*. è3‰‰Œ‰‚z âb¢b žƒ8¸¨È¸'°Î&".* ì3ˆˆŠŠ‚{ âb"¢ žÅÀ‹‚Ô½Ï ááâ" ÞÃ8hXˆh'°Î ì3†…†…‚{ á áa`žÃ8H8XX'°Î ì3‚‚ƒƒ‚{ à`à `žÃ8øø'°Íùûýþ ì3}‚{ ß__Ÿ žÇ@^ð žÞøúýþüáÈ@ yçÃ7øÿÿ÷ÀÎ  ô3‚„ˆ‚} àa" àŸC8HH(8'ÐÎ ô3†…ˆˆ‚| á!"!àžÃ8xxXX'°Î""* ð3ˆ‡‹‹‚| â"b¢ Ÿ8˜¸ˆ˜'°Î62&.ì3‹‹ÿ{ ââãc?Þƒ8¸¸¨¨'°Î2226 ì3‹ŠŒ‹‚{ ⢣# Þƒ8¨ÈÈØ'Î2*66 è3‰‹‹‚z âââ¢àžÃ8¸¨ÈÈ'°Î**22 ì3ŠŠ‹Š‚{y†qQQ0oaœDDDDØgöÃCDDA=†pÐÑðOaœ,,44Øg öÂAÂÂÁ=†ppppOaœ Øgÿöÿ¿Á@Á=†oïßïðOa›óóûôØfúøø÷ö7×ç÷Øçp000_ÿü ûàg úÂDBBÀ¾†q°°O¡œ4<èg úÄDÃCÁ>†qQpOaœ,,LLØgöÅÅÄEA=†qQQpOaœDD\TØgöÆÆÅÅÿ½†q±‘±¿ïAœTTddÐgôÆFFÆÁ=†q‘‘±°OAœdlllÈgôÆÅÆÆA=qQQ‘OaœddTTØgôÅEFFA=qQQ‘pOAœTLd\ØgöÄDDÄA=†q0OaœD<\LØg öÃCCCA=†p°°ÐÐOaœ$$$Øg öÁÁAÁÁ=†pP0P0OaŸûÿûüØfþüþÿö¾=¿?A=ö÷÷øçpPP0?ïÁœûàg þúÂBB¾†pаO¡œ†qqq0OaœTTLTØeˆ‡Š‹?ôÄEEEA=qQqQOAœdTddØgöÅEEÆA=†q±±±°OaœllttÐgôÆÆÇGÁ=q±±QÐOAœllttÈgòÆÆÆÆÁ=q±‘ñÐOaœTT\\ÐgðÆÆÆÆÁ<q±‘±°O!œd\ddÐgôÅDEÄÁ=†q11POc÷†p°°ðÐOaœ44<<Øg öÂÂCBÁ=†pp°Oaœ$Øgö¿¿Á@Á=†oïßïðOa›óóóôØb~| ü èfÿÿþüÀÂAB¾p°°Ÿï¡œ,$,7ûèg úÂCÃCÀ¾†q1Q0/œ\TTT àgøÄÅEE@¾q‘±qOAœdTd\ÐgôÆÆÆÆÁ=†q±±±°OaœllllØgöÇÇÇGA=q±±‘°O€weÅÇÙ@qõCßÔ¸ ‘ÑðÅó üyðøgôÆÆÇFÁ=q±Ñ±ÐOAœ„|||ÐgôÆÆÆÇA<q±±±°OœllllÈgôÆFFFA=q‘Q‘pOaœT\TTØgöÄDDÄÁ=†qOaœDDDDØg  öÂÂÂÂA=†p°OaœØgöÀÿÀÿÁ=†oÏÏïÐOa´  _ïø'ÐÎ ô3ƒƒƒƒ| àààá _C8HˆH÷ÐÎ""#ýô3ˆ†ˆ‡ÿ} áaáaÿßC8¨¨˜Ÿ÷ÐÎ***+ýø3ŠŠŠŠÿ~ ⢢¢ _8¸Ø¸Ø'°Î6666 è3‚z ãc£c žƒ8øøøø'°Î>>>> ìXÈÈè˜èÓàwè>· M÷€!êQ Àz‚¢àB°âAô3ítÀÞ$ƒ@ yPK€Ð@þlû¢|ð!ÈGÈGÿ½¸3‚y ããcã`žC8ÈØÈß÷€Î>>>?ýà3ÿz 㣣£¿Þƒ8ØØØØ' Î2222 ì3ŒŒŒŒ{ ã###?ÞÃ8ȸȸ°Î**** ì3ŠŠŠŠ‚{ â"""?ÞÃ8ˆˆˆ÷°Îì3„„„„‚{ àààààžÃ8(((('°Îþþ ì3ÿÿÿÿ‚{ ÿ߿ߠžÃ8×ßøÐÎ ô3„†„†} á¡áâ _C8xhxo÷ÐÎ#ýô3‰‰ˆ‰ÿ} â¢b¢ßC8xxx÷ÐÎ***+ýô3ŒŒÿ~ ââ¢â¿ß8¸Ø¸Ø'°Î6>6> è3‚z ãc£c žƒ8øøøø'°Î>>>> 쌞װ— G"ž>þ¹ñÑx’¼äTTVŸ:døÑQQQX¦Þ£aö¡$D')ƒ@ôÈùuOXÀŽ…/7òoN ãäcä`žGï ããããÿÞ8øøøÿ÷€Î>>>?ýä3ÿz ã£c£`žƒ8ØØØØ'°Î6666ì3ŒŒÿ{ ã"£" ^Ã8˜˜˜˜'°Î**** ì3ŠŠŠŠÿ{ âb"b?ÞÃ8xXx_÷°Îýì3ƒ…ƒ…ÿ{ á ¡`¿ÞÃ8øø'°Ïÿÿÿþ ì3ÿ~ÿ~‚{@ †p°°°°O¡œ$$ûèb…|T3ûèýáœLŒ¸>V}µSåþà2¡#£'——Ç0¾j8JªÏ7 Ð=<Á z‘´ûÃ8¯@1G›Ž’Ž~´ûÐg#!ôÈÉHÉA=ÞÇÇÇÇÿ½qñññðOœ||||ÀgðÇFÇÆÁ<q±±±°/!œllloûØgöÆEFEÀ½†q1110/aœTTTTØgöÃÃÄDA=†pðÐððOaœ4,<,Øg öÁAÁÁÁ=†ppPppOaœüüØgÿ úÂBAÁÁ>†8XSð°ï$$,#ûèg  þúÄECƾ†(³ñ1±_LLDGûègþúÅEFÆÿ¿qQQQ_ïÁœdt\kûègþüÇFGÆÀ¾q±Ñ±ÐOaœ||||ÐgôÇGGÇÀ½qÒ1ñÿï€{À”¬òB¯ë£´ó‘p–qçÏ…¡¨¬¼êÏÿËÏÇo   3“Ž}ý>ù¤HGÈÂ<r220OAœŒŒŒŒÐg####þôÈHHÈÿ½qñññðOœ||||ÀgðÇFGFA<q‘Ñ‘ð/!œtl|oûØgþöÆÆFÆÿ½†qqQ±/aœLLLLØgöÄDDÄA=†qÐð°Oaœ4,,4Øg öÂAÂÂA=†ppPppOaœü Ødÿƒ|¸ˆ'ÐÎ  ô3…‡„†| pðçâ# _C8hx¸÷ÐÎ*ýô3‹‰‡Š} â¢cc _C8˜¨¨¨ÐÎ22*)ýð3ŒŒŽ| ã#c£ÞÃ8ØèØ×÷°Î:66;ýð3Ž| 㣣c`_8øøèø Î>BFFè3‘‘x $Ÿ"HÈÿ½qÑòRP/Aœ„„”” Àg!#%%þòÈÈÉI@½r22R0/AœŒŒŒŒÐg####ôÈHIIA<†qñññðO!œ|„„” Ðg#ôÆÇGÆÀ½qÑѱ°OAœllllÐgôÆÆFÆA=q11Q0OaœTTTTØgöÃÃCÄA=†pаðOœ,,$$àg øÁÁAÁA>p0?ÿðO«ðg è('ÐÎ" ô3††‡†} â"áa _C8¨xhŸ÷ÐÎ&ýô3‡Š‡ˆÿ} ã#"c?ßC8¸¸ØØÐÎ**./ýì3Ž‹Œÿ{ ã£c£ÿÞƒ8ØØøß÷ Î6:65ýì3‘ÿ~ ãc¤dß8èù÷°ÎFFFGýès½á˜g####þðÉIIIA<†rRRRPOAœ”””” Ðg%%%%þôÉHÉIÿ½r22rPOaœŒŒ„„Øg%%%%ôÇÇÇÇÁ=rR0/AœŒ|„‡ûØg!ôÆÆÆÆÁ=q±±±°OAœllllÐgôÄÄÆEÀ½†qQQ10OaœLpÐOÁœ$$$$èg úÿÿÿÿÁ>†(wAB¾†pÐðp°/¡œ<4DT èg úÃEDD¾†qQ‘dTlSûègúÇFÅÅÀ¾†qqqÑßïœddloûàgþöÇÆÆÇ½†q±±ñÿïaœlŒ|{ûàg%#! þøÈÈÉHÀ½€ÎFF>>ûÈg))#$þìdddc#ýäI))ÑïÇžƒ9))(' ÎJJJKýè3’’’’z 䤤¤ ^ƒ99)98 ÎBBNJèr2R/nœ||Œ| Þ@æBF9Cà•@ þçãàw ž€„zˆ:`uŒ  sNy‚À9q ÐÁ|º¹ð @$q±±ÑÏçŸ8ØØØÈ' Î66.. è3ŒŒŒ{ âbb¢`^Ã8˜¨¨¨'°Î&"& è3ˆ‡‡‡‚{ áá!á Ÿ8HXHH'ÀÎ ô3ÿÿ‚‚} `_ø¯÷ÐÎ"ýô1D>.#ýô3‹ŠˆŠÿ} â¡â¢¿ßC8xȨ¿÷ÐÎ66.3ýô3ŽŒŽ} ‘Qq§ã?ßC8ùØ×÷àÎ66:9ýô3ŽŽÿ} ã£ã£¿ßC8øøé÷°Î>>F?ýè3z ä¤cã¿ßË=_z@îJ=ȸe_*Ž{ŽŠ Ð>Ãr h×A€‡rrqö¸R Ð~î"IpH½¸ †ropW@úŸ äd¤¤ žƒ9)))'÷ ÎJJJJ è3’’’’y ääääÿÞ99)9/÷€!d$$¢ýãðoF€ù0T +Š h•Õ*<î«Çá¾`hÌ\ 2”.rBS(ò:^ýà1%JKK_žtÐ ii§Ó"x iJJË£Ò‘˜he/ç…0ÿ(¼Jï˜Vñ%[¼àÎ6262 è3ŠŠŒŒ‚z ãcbâßÞƒ8¨˜¸·÷°Î&*&"è3‰‡ˆ‡‚z ááááàžƒ8xHxH' Î è3„„„„‚} à    Ÿƒ¸hgÄ€T ÿßC8¨¸˜§÷ÐÎýô3‡Š‡Šÿ} âãbc_ßC8بè·÷ÐÎ*&2)ýô3Œ‹} ã㣣ŸßC8¨¨ÈÇ÷àÎ6>:9ýô3ÿ} ããcã¿ßC8é(é÷°ÎJ>B9ýèqññÒ0/GÀîB@ì•lT 3ç¡ø/†`m¨J¡šñp•£ï@É1¾T…x’àd’˜”Á<é‡!=éÆþirtð¼ƒ@ñ%þ%Ó²Måïƒ.4ÉIIIA=rRRROïAœ””””Ðg%%%%òÉÉÉÉ@¼ '''ïÿ{>Ñ>T}œ¸VBâãÉŽÞ ¢þéù©UÇ0«žÿ/í§€ÌIs04*kãÝh4€ÐBìP•^èÓð>íÐÈš@jŽq)‘P4i>òR†@v–™~y:ÓÍðhÙhÇx2Vá,¸Ø¿Óñ® ßàdÆÆÆÆÁ=q±‘±OAœ\TTWûÐgöÅCÄÃÀ½pððððOAœ<<<<Ðg  ôÂBBBA=pppO¡œðk è(Ä?¾†pÐðÐÿLTDSûègþúÃÄÃÂÿ¾†q±ñ1¿ï¡œ|dtgûègþúÆÇFFÿ¾†qññÑÿtlloûègþúÇÇÇÇÿ¾†qñ±ñ¯ï€G|lLñ÷ß÷òpëò¡ñ÷"àhÕýãÏ‘Qøzð8^.€)Aä´à iT¨ôÀfi©©É¬ç#À†šššš»2ð#¦(šKXéÅÙ`È bKÍÉGüÜ“²³o® 䤤¤¿Þƒ9)))/÷ ÎJJJKýè3’’’’y,”””ƒ žöð>7Þ>Ò>.<Ü%@¡‡Õ:/ï…å±úµOyUëÙJøØ¡ÿóñòQî¥ï~<ÈGÆÇÂ=8Ø÷ÇÇÁ=Ä7¾y˜¸¨ø™O?º îfø4‘VŸŠ¿?ø~ 83}w ãccc`žƒ8ØÈØÈ' Î.*.* è3ŠŠŠŠ‚z âaâaàžƒ8xxxx' Î è3‡„‡„‚z á á à^ƒ8((('ÐÎ ô0àƒ8Èhg¿¾†pðñÿ<< ä 4€{8”^}1ï Ð¦mõ?!õG€†œššš½4ð$&9  ½5Ì!½zT€ÎNJJIÙY·×rRRROïAœ”””—ûÐg%%%%þô9)))÷w"Yð‚Pe&Ø$T 袲§'=95œ¹Ó_x©ðh`¢ËÁ¡þTVj4¼Ö0 € ä$d$Ÿ^ìàÎB>B>ä3‚z ããcã`ž€‡òx3‚y ãccc`žƒ8ØÈØÈ' Î**** è3ŠŠŠŠ‚z ⢢¢ žƒ8˜x˜x' Î è3‡„‡„‚z á!a!`^ƒ8XHXHÐÎ ô3‰„‰ƒ áááa¿ßÃ8ˆ˜ˆ¯÷ÐÎ&"&ýô3‰Œˆÿ} ã!ãbÿßC8x˜¸¯÷ÐÎ22*3ýô3ÿ} ã#£cßC8ØØØß÷ÐÎ>FBKýô3ÿ} 㤣¤¿ß@i«àûG~>þ(«OÇHG¾<ÇÊGÇÁ<Ó¸4IÎäó-àÐH+xf–””’½6À×ÀÐ "OÁ¡~.€=Yx4?À‚¬Ñpd8é))'×½rRRR_ïAœ”””—ûÐg%%%%þôd¤$¤þòÁ03òàh¾ãõó‡A€~¤½ÿ.6%¼D¤ôǧ­CS€p¥óP¥þ…ù1¤I€„3Ž €É!‡£Þ~çÈðÎB>>>ä3ÿz ãã£ãà^C8øèøè'Î6666 è3ŒŒ‚z ââ⢠žƒ8ÈÈØØ' Î**** è3ŠŠŠŠ‚z âaâaàžƒ8xxxx' Î è3„…„…z á`á`àßC8ÿø7ÐÖô$gýþÂÃBÃÀ¿qP°ÿdT\kûègþúÅEÃÄÿ¾†qÑqÑßLTdgûðgþúÆÇGÇÿ¾†q±±Ñ¿ï¡œ|„tûèg!!!%þúÇÇÈÆÿ¾†qÒ1²?œŒ”“ûàe‘Ž’ñ¸'6b^áõ*Ãàh`”[ “°å91EéÁ’ôàSŸ€uÀhU¾ @Ì@-PÎRJFIùï!œ”””—ûÐg%%%%þôÉIII½9(÷IH¿½ïbU…ùH2„Ph_•'¯‹°¦iÉÁš‚Ì5:4õ¦¦­>j<vƒ@ N*_pƒ@ ÍC(¸’BJ1Et“×áç×Ièóñ¿ïAœt|lt ÐgôÆÆÆÆÁ=q±‘±OAœTTTTÐgôÅEEEA=q10ðOAœD<<<ÐgôÃÂCÂA=p/Aœ$ègÿÿÿÿúÁ¾ÐOïÁœ4DLT èg þúÄÆCÿ¾†q‘1‘¿ï¡œLLl_ûègþúÇÇFÆÿ¿qQQѿltTWûègþúÇGGFÿ¾†qò1ÑÿŒl|ûèg!þúÉIGȾ܌0úBý ÷±"t x)x$÷(¹9•Pe/÷†Uäå ejd)@` /S¥Î|T#8IVõ äd¤¤¿Þƒ9)))( ÎJJJKýè3’’’’ÿz ä¥$£à^B˜ˆ¼| ð€m„ðØ0êÁ¡…Eá§==BPdðÍWiɪ 4`A¦'aôäÕ¹ˆð8]V>sÙx4©ªßô{%T~:XG(=άX_øó¨H€Î6:65ü3| ã£ccaƒ8ØØØØ' Î6266 è3‹ŠŒ‚z ⢢⠞ƒ8¨¨¨¨' Î&& è3‡‡‡‡‚z ááááàžƒ8xHxH' Îè3ƒ‚‚ƒ| ÿÿÿÿàŸ0 Àç†q0¯ï¡œD<F>=ýô3’‘‘ÿ}â•uë%Ðä‘©9çÞ?­à3POPP^ñÉ 7Od4⋸Czݧ¥$>)3òR’O î½õÁœ”””” Ðg%%%%ôÉIII@¼†rRRRPO!œ”””” Èg%%%%þô9)ÓÀq\?®^T?‰Ÿ®wœ- €åAA¸|%“ªŸg€#C ¨(&(/iùp¨(((+ž™…Oº ~mEüK‡ù„3‹€qq±q_{ØgöÆÆÆÆA=q±‘qpOAœ\TTTÐgôÄÃÄCÁ=pððððOAœ<,<,Ðg ôÂBBAÁ=pppPPOaœ ØiègÄÁÿ¾†H¨¸wÄÿ¾†Xxx˜£ÿLdT_ûègþú"!ãÃÿ¾†X¸è˜Ãß|llgûègþúÆÆÆF¾†qññ±ßtltwûègþüÇÇÇH¾†qñò1ÿ|Œtûè;'(4„É=íÀÐHXf ¢  ·8ªS_â]:±óPåôæ@ ‹ ÎJJJIõä3’’‘‘z 䤤d žƒ9)))' !ÉIIHA= 䤤äà^ƒ9)))÷ ÎJFFAýè3zäzçbàh¢ÌIÇીéSß•!(Å7* äÃ0¨('§«ºdÔ_Äh”ÇA—Ý Ø€.,@£þoÁœllldàgôÅEEEA=qQQQPOAœ<<<<ÐgôÃÃÃÃA=pð°°OAœ$$$$Ðg  ôÁ@Á@Á=†ÿÿÿðOa¬+á ƒ8÷ÐÎ!ýô3‰Œ‰Š} ââb¢ŸßC8˜ˆ˜_÷ÐÎ2*"3ýô3‰‰Œÿ} â£"ã?ßC8øèèß÷ÐÎ**./ýô3ŒŒÿ} ã£ã£ÿ߃8øØøï÷àÎ:J6Cýô3’Ž‘Žÿ} ãb]ÿ¿ªð•Ç(«øÒ“as¤@,j )ësneáýÇFüÛ8A|ƒ4‘`ÉIIH¿=rññð/Aœ„”ŒŒØÉHÃø¹îôgÈèð;†T¨û× \T]î¡ð€¯.ÇI´ f¤ÞheÉHÉHÿ½qñòïAœ„„„ƒûÐgôÂSTj%Qµ‚ãO `3ONPO[ñ©€6[þr%íá 3cVø•NœlllkøfúÆÅÆÅÁ>qQQQPOAœTTTTÐgôÃÃÄDA=pððððOAœ4$4$Ðg ôÂBBBA=pppOAœ  Øgÿÿÿÿö4o âb¢b¿ßC8ˆxˆw÷ÐÎ&6&3ýô3ŒˆŒ‰ÿ} â"â"à_C8ÈÈÈÈÐÎ6263ýô3Š‹ŠŠÿ} ããããÿßC8ØØèß÷ÐÎ2>2?ýô3‘‘ÿ~ ããcã߃8ØøØï÷à7yàþè@ ‘ME.šR_Tj\3TRSSZ—VÀhäA wfî2 äd$d ßæJJ*xû² hŸd?  måGÜ| :÷‡ÑÊ.h¿€Xµàh(dž}N½Þ=0|5[’¢«”–åÀö!&‘2²?‡"UìjáÉFÀg####ÿ\ö9÷=€ÎFFBB½ð ²2Ò Á¹ôø?¼uKÆ™ÇÁ’{º§FX§®«…‹O> jÏ®iÉ8 aKþ1±îŒuV÷Çq‘‘‘/aœd\d\ ØgöÅEEE½†q1110OaœLLLLØgôÃBCBA=pOAœ$$ØgöÁ@Á@Á=oïïïðOA¬; `ŸþúÃÃÃC¿¾†q111OLDL?ûègþúÆÅGE@¾†q1Q10/¡œT\T_ûègþúÅEEE?¾†qÑñÑÿtltoûègþüÇÇÇÇÿ¿qÑQñ_ïÀ|„6Æ%C‘^6¸\iùЀ5åF¦5%©€=ˆ¿Çáƒ@¢õÚL Ã)`|dT÷Ÿ@ µJgœ DH0ªBº¥§š‹Á |cŠGáð=z—žiðÿ_ òóðÃàh˜è4‘€ÐA‘UUSÆ•X½OË(<Õ•\ª®³0 ß4î%†Jlꮾ@€d‘„VR¿sàg###"þöR'ädÏDÀÊóëÀîAì| +¹p4ÊžñçPõàz¬ ”¯Ï)ÚyÌ~ ã$ñé bqƒ@ùáðÍú8q±‘±Ÿçß8ÈÈÈȰÎ2.2.ì3ŠŠŠŠ{ ⢢¢¿ÞÃ8ˆˆˆˆ'°Î ì3…„…„‚z á!!! žƒ8H8H8' Î ì3…„…„‚{ à ` `žƒ7÷÷÷ø' Ò3ˆt3ÿøg ÿþÃÄCÄ@¿q1Q1/¡œTT\GûègþúÅÅFE¿¾†qQ‘Q||loûègþúÆÆÆF?¾†qÒò/ïÁœ|l|gûðgþþÇÇGÈ¿ð¥ÆÕ¼j¸Ú¬4òCX ÔÔÔÔÖüé ©©)©®>h *JªnQ´ò̼pªybüóÁ {~/í’ØéÀlä?ê*üüù/—¾8’g¢•S±ò/Ç߀Õpºë•„  VkŸašªªª¢Ì¸ª¨ª*.ž˜†5j½|UEKç2Ð ŒƒôˆψÏ\Î]9´H€ ß¼>{7 V‡•µÍ¯êÞ8­õqÌjËݬ½íŽ…àÐ=ÅÚ~65Ïà ÆFÆÆ¿y ãccc`^ƒ8ȸب' Î*.** è3ŠŠŠŠ‚z ⢢¢`žƒ8ˆxxx' Î è3††‡‡‚z áa!¡ žƒ8H8H8' Î ì3…„…„‚{ àààà žÃ?ÿø'°Ò Є„ÿ â!ááßÿÃ8x˜ˆ˜ÐÎ"*"ýô3‰‰‡Š} âbb¢ŸC8¨¸ˆ·÷ÐÎ2*63ýô3‰‰Š‹ÿ} âã"ãßC8ÈÈÈÏ÷ÐÎ6>21ýø3‘ÿ~ 㣤cßÃ8éÙÿð>ºWñ¨ÉDZžð¨Ü(f*ªŠ”O,ø3”<*jkVžiø4K¿ äÏëç›ËÁ z‚ø4Qú}–ƒ@ù(¯üüœ|{çÃ8àÎ>B>Bø3’ÿ~ˆ…_<Çàh$#< ãשèO¸•!Õ6Õ@Ð=­\Óà ¡ª)­)rõµ¨­ÒÀ*jŒ@Ð~2PhÖG®•©­K…éîƒ@øÁUº8ÙšÜú¬¸Ë_ Ýðh!àd(µ/ŒŽ~¡›ùàÎ6::>è3ÿz ãcccÞƒ8بب' Î**** è3ЉЉ‚z âbaáàžƒ8xxxx' Î è3†‡…‡‚z á¡!¡ žƒ8HHHX' Î ì3„‚‚‚{ à à`žÃ8øø'°Ú ðî|?ûðg þþÃÄÃCÀ¾†qñ??üûéàÎ6>>>ä3{ ä$$$?ß„‘éÿ÷À4‘×ÃÂ÷ÇÇ¿Ÿ|< }ðõ[ããß%üðE_2€þx(ãñ²ïçß8ØèØØGÀÎ6::> à3ŽŽŒy ã£c#?Þƒ8ØÈȨ Î2*** è3ŠŠŠ‰‚z â¢bb žƒ8ˆˆ¨¨' Î"""" è3…„……‚z áa¡! žƒ8hHH(' Î  è3…‚…‚‚{ à`ßàžÃ7ÿ÷÷ø' Îýýþ è1À¾ýô3…„††} á¡á¡ _C8xˆh÷ÐÎ"'ýô3‡‹‰ˆÿ} ãbâã_ßC8¨¸È·÷ÐÎ22"!ýô3ŠŠŒ} ã#bâ ŸC8ÈÈØø'ÀÎ22:6 ì3ŒŽ‚| ããcc`Ÿƒ8ØØØØ'ÀÎ:::: ì3ŽŽ‚{ ã£ãc`žƒ8øøèø' Î>B:: è3Ž‚{ ä#ä#àžƒ8øøøø' Î>B>: è3ŽŽ‚} ä#㣠Ÿ8ØØØØ' Î:>66 è3ŒŒŒ‚z ã###`žÃ8Ȩب'°Î**** ì3Š‰ŠŠ‚{ âb¢b`žÃ8¨˜xˆ'°Î"" ì3……†‡‚{ áa!a žƒ8H(H(' Î   è3„ƒ‚{ ÿßÿßàžÃ7÷÷÷ø' Íýýýþ è3„„‚†ÿ} á¡á¡ßC8hhXo÷ÐÎô3ˆŠ‡ˆÿ} â`â!ÿßC8h¸ˆŸ÷ÐÎ6.&'ýô3‡ˆ‹‹} ãcbâàŸC8¨¨ÈÈ'ÐÎ6>.. ð3ŒŽ‚| ãcc¢àŸ8ØØ¸È'ÐÎ6666 ô3ŽŒ‚{ ädcc`žÃ8ØØØØ'°Î>>66 ì3ŽŽŽŽ‚{ ãä#£ žÃ9øèø' Î>>>: è3Ž‚z 㣣£ ŸC8èèÈÈ'ÐÎ6666 è3‚z ãc#c žƒ8ÈØÈ¸'°Î2*2* ì3ŠŠŠ‰‚z â¢bb`žÃ8˜ˆxx'°Î ì3……†…‚{ á¡á¡ žÃ8XHX(' Î è3‚ƒ‚‚‚z àà`ŸàžÃ?ÿ÷÷ø'°Íýþþ ì3~~‚{ à¡ ¡ ŸC8XHHH'ÐÎ ô3‡‡†‡‚} áá¡¡ ŸC8x¨hˆ'ÐÎ.&&" ô3‡‰‰ˆ‚} ãc"â ŸC8¨¨¨¨'ÐÎ26.2 ô3‹ŠŒŒ‚} âãâã`ŸC8ø¨ÈÈ'ÐÎ*22. ø3ŒŒ‚| ã### žÃ8ÈÈÈÈ'°Î6666 ô3‚~ ãc£c`Ÿ8èèØè'°Î:>:: è3Ž‚z ãc£c`žƒ8èØØØ' Î2222 è3‚z ãcc# žƒ8ØØÈÈ' Î2.2* ì3‹Š‹‰‚{ â¢bb žƒ8˜ˆˆx' Î è3‡‡††‚z áá¡¡ žÃ8hhHH'°Î  è3‚‚‚‚‚z à   `žƒ8'øø' Íÿýýþ è3ÿÿÿƒ| ߟŸßàß{Ã7½áÌ#80 00¯£ài¿YÁ€Ð`¡…}MûúÂB3ƒ  ÁC ú>›õœ  WÑð4ß°O¡Ì$;@0 00¯£ài¿Z€`¡…}Mûúôƒ  ÁC ú>›õ  A WÁð4ß°O¡Ì,3@0‚ 00¯ƒài¿Z€`¡…|MûúÃÄ5  ÁC ú>›õ¨ A WÑð4ß°O¡ÌTKX0 ‚ 00¯£ài¿Z€‘`¡…}MûúÃôƒ" ÁC ú>›õ¤ A WÑð4ß°O¡ÌTSX0 ‚ 00¯£ài¿[€‘`¡…}MûúÅE6" ÁC ø>›õ° A WÁð4ß°O¡Ì\k`0 ‚ 00¯ƒài¿[€’`¡…|MûúÆE6" ÁC ø>›õ¬ A WÁð4ß°O¡ÌTkX0 ‚ 00¯ƒài¿[A€‘`¡…|MûúÆÅ¶ƒ$ ÁC ø>›õ° A WÁð4ß°O¡ÌT[`0 ‚ 00¯ƒài¿[€‘`¡…|MûúÆF7" ÁC ø>›õ´ A WÁð4ß°OÌdcp0 ‚ 00¯ƒài¿[€‘`¡…|MûøÆÆ·" ÁC ø>›õ¸ A WÁð4ß°OÁÌlkp0 ‚ 00¯ƒài¿[€‘`¡…|MûüÆF7" ÁC ø>›õ¸ A WÁð4ß°OÌdsp0 ‚ 00¯ƒài¿[€‘Ì(`a_ÀÓ~Á>1Ñ­ÀÀHƒæ 00¯ƒài¿[€‘`¡…|MûöÆÆ·" ÁC ø>›õ¸ A WÁð4ß°OaÌlcp0 ‚ 00¯ƒài¿[€‘`¡…|MûöÆF7" ÁC ø>›õ´ A WÁð4ß°OAÌdcp0 ‚ 00¯ƒài¿[€‘`¡…|MûôÆÆ·" ÁC ø>›õ¸ A WÁð4ß°OaÌTS`0 ‚ 00¯ƒài¿ZÁ€‘`¡…|MûöÅE5ƒ" ÁC ø>›õ¬ A WÁð4ß°OaÌTSX0 ‚ 00¯ƒài¿[€‘`¡…|MûøžðÍïO Ã7½<3{Þ3Ã0Íá›Æxf†a›ÆL3{ÞžðÍïï{Þñž÷½ï`¿ÙA€Ð`¡A…}.›õŒð  WÒài¿ žÃ—÷ö@`#À4(Pa_K¦ýc@A‚…ô¸oØ'°åýýŒ  WÒài¿XÁ€Ð`¡A…}.›ö ì9~~c<A‚…ô¸oÖ0`#À4(Pa_K¦ý‚|»ÿÿÿÿÿà4° ;Dd„`h & !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿô`ÀA‚ú| 4è0 Ð0 cài Þ^àŸ¨À x ƒô ( øh6`;Á/ aAÀÓA½¾A?Q„ðA èPAð4Ðl`Àw‚0_@‚¦ƒ}‚}£0à‚ Ð0 ƒài Ø€ï`¾…MÿÿûF `;Á/ aAÀÓA±ƒÞ Á} >šýþ öŒ€Àw‚0_@‚¦ƒc¼A‚ú| 4ûìíÁ€ï`¾…MÎ p0`Á} >š þ öŒÀÀwæ Ð0 ƒài ØÁ€î`¾…M ùF@`;/ aAÀÓA²Ü Á} >š òŒÀÀwæ Ð0 ƒài Ù€îÌ/ aAÀÓAÁÁÁ¾Q˜à`Á‚ú| 400ÀÀ9ƒô ( øh888'Ê4Ü ˜0_@‚¦ƒi´0`¾…M ùF€`;€s èPAð4ÐlàÀwæ Ð0 ƒài áa ß(Î p0`Á} >š  à`Á‚ú| 4$,íA€îÌ/ aAÀÓA´Ü ˜0_@‚¦ƒ†‡ƒ}£P0 À9ƒô ( øhF`;A€s èPAð4ÐqOth´0`¾A…MÐ h0`Á|ƒ %M÷F`;A€s äPA(h6`;A€s äPA(h8hx7º4ƒÚ ˜0_ ‚¦ƒj´0`¾A…¦ƒ‡ˆƒ{£P0 À9ƒò ( ” 4@0 À9ƒò ( ” 4DDÝA€íÌ/aA i Ú€íÌ/aA i â" ÞèÖ h0`Á|ƒ %MÐ h0`Á|ƒ %M ÷F`;A€s äPA(h6 `;A€s äPA(h8hˆ7º5ƒÚ ˜0_ ‚ @ÓA´Ú ˜0_ ‚ @ÓAÄCA=ѤÐ`Á‚ùJš  Ð`Á‚ùJš î Àvƒæ È0 ‚P4Ðm Àvƒæ È0 ‚P4ÐpÐðoth¸0`¾…MÐ p0`Á} >š î Àwä Ð0 ƒài¡A€îÈ/ aAÀÓBCÃA½Ñ¤à`‚ú| 4#H0 À9ƒô ( øhHhh7º4ƒÜ 0_@‚¦„i´0`¾…M ÷F`;A€s èPAð4ÐlàÀwæ Ð0 ƒài á¡`ÞèÎ p0`Á} >š œà`Á‚ú| 4$,ÝÁ€îÌ/ aAÀÓA³ƒÜ ˜0_@‚¦ƒ……‚{£80ÀÀ9ƒô ( øh6p`;€s èPAð4Ðpotf¸0`¾…MÌ p0`Á} >š îŒÀÀwæ Ð0 ƒài Ù€îÌ/ aAÀÓAÁÁÁ=Ñ”ð`Á‚ú| 4(0ÀÀ9ƒô ( øh8'º2ƒÜ ˜0_@‚¦ƒe¸0`¾…M÷F@`;€s èPAð4Ðl`Àwæ Ð0 ƒài ÿßàžèÆ p0`Á} >š ŒðA èPAð4ÐoïÐOtb¼A‚ú| 40à‚ Ð0 ƒài ßŸ`Ÿ( x ƒô ( øh6`;Á/ aAÀÓA¾>A>Q„ðA èPAð4ÐlÀw‚0_@‚¦ƒ|{‚|¢ø0‚ Ø0 ƒài ×Á€ð`¾Á….š åæ ò‹àÀx0_`—M¾ € ƒö (p4ÐoOPO•x{ûÓÿàŸføøþÿû7Ç×çØ'Ù¿@¿ÀÁ>Î öp/ðPPo³ÿƒƒ|œ  Üáaaa`Þç ÷8HHXH7ÉÂÃBÃA¾Nîpаño“…‡ˆ‡ƒ|œA=Íííéê îG×ï÷>A>Íÿýõþ öÿðP0/³ÿ‚ÿ‚}Ÿüÿüìàa?á`Ÿg û8(XHÉÃBÂBA>N îp°ððO“…‡ˆˆ‚{œN îq1QPOsˆˆ‰Š‚zœDDLDÔâ"¢" žç÷8Ȩ¸¸¹ÄÅEÅÿ½Î...2êqqqQPOsŠŠŒ‚{œTTd\Ü⢣# Þ§ó8˜¨¸¸'©ÅÅÅÅÁ=N..*. îq11‘OsŠŠŒŒ‚{œTTLTÜâ"b¢ žç÷8ˆˆˆˆ'¹ÄCÄDA=Î" îpÐÐÐÐOs……††‚{œ,,44Üá áa`žç ÷888'¹ÀÿÁAA=Ïýþ  îoïßïðOs~}~‚{›ÛãëìÝ^C?÷§Á@¾Ïýþ ýöoÿð?ÿÿ}œ$$, ìàá!¡`Ÿc‚„|ìâ"!a Ÿgû8hhˆˆ'¹ÃCCCA=Î** îq1qqpOsЉ‹‹‚{œDT\TÜââ⢠^çþ÷8¸¸ØØ'©ÅEFFA=N2666 êq‘‘±°OsŒŒ‹‚zœd\\\Ìâââã ž§õ8¨¨ÈÈ'©ÆFEEÁ=Î2266 êqQQ‘pOSŠŠ‹‹‚zœTLd\Üâ""¢`žç÷8ˆxˆ˜'¹ÃCDCÁ=Î îpÐÐñOs……††‚{œ$$$Üààá àžç÷8(('¹ÿ¿À¿Á=Íýùýþ îoÏïðOuÿsìd÷ý8((8éÁAÂC¾Nþ ýòppÐpŸï³†††‰‚}œ<,L<ìá!a¡ Ÿg  û8˜˜ˆ˜'¹ÄDEÅÁ=Î" òq1QPO“Š‹‹Œ‚{œdTddÜ⢢㠞ç÷8ØØèè'¹ÅÅÆÇA=N6666 êq±±‘ÐOS‹ŒŒ‚zœ\\ddÌâãcc`žgó8¸Èèè'©ÅEÆFA=N6626 êqqq±°OS‹ŒŒ‹‚zœd\ddÔââ£"àž§÷8ˆ˜˜¨'¹ÄDEEA=Î îqððOs††‡‡‚{œ,$4,Üá áa žç ÷888('¹À¿Á@Á=Íýûýþ îoÏÏÏÐOr?¿>†pP/Óÿÿÿÿÿ~œ4'ûäáaa¢?ßg  þû8HhH(ÙÄDÃE@¾N&".*òpÐÐðð/“‡‡††|œLTTT äâ¢c# Ÿ'ù8¸Ø¸Ø'¹ÆÆÆÆÁ=Î6266 îqq‘‘OsŽŽ{œ||t„ Ôãcc£`^ÆÅ_=èJW®«¡}P÷å.DŽŽ‰W1òÇžçó8ØØèØ'‰ÆÇFÇA>> êq‘‘±°OSŽ‚zœllllÔã"ãc žgõ8ÈÈÈÈ'©ÆEFEÁ=Î*.** îqqQqPOsˆˆ‰‰‚{œDDDDÜá¡¡áàžç  ÷8XXXH'¹ÂABAA=Î îppPP0Osÿÿ‚{›óóûôÝ_€.õðPO³„„‡‡‚}’  Ð0/“ƒ‡‚„}œ>>*Cÿï§ß ça(H¯n„ƒ)>2z”R°h%ªO9·!¡4yÒêOºu#ì|Š˜’«]_ì ÛUºSä|ûÄãã£ã`žgó8øøøÿ÷©ÇÇÇÇÿ½N6667ýâqÑÑÑßï‚xœddddÄã### ^gþ÷8ȨȨ¹ÅEEEA=Î*&*& îq/sˆˆˆˆ{œ<4<4Üáa!a žç÷8(((('¹ÀÀÀÀÁ=Ïÿÿÿþ îïßïÐOusü Ÿà_g ÿû8XHhhÙÂBBÂ@¾ÎýöqQñ_ﳉ‰‹Šÿ}œ<4D/ûìâ£aâ¿ßgþû8¸¸¸¿÷ÉÅÅEE¾N*>.> îqñ±ñ°O“Œ‹‚|œ\t\tÜããããàžçôøuJ”½ˆ| D)wð3MC'ÀÊ [Ø‘ä<ŠˆŠÏçN†sEEEE_Ÿp‹‡ÜøÊ*˜—‡˜ß*\ôHÙ¢þ>AäÞgó8øøøø'‰ÇÇÇÇÿ½N>>>?ýêqñññÿïÿxœl|l|Äã£c£`ž'ó8¸È¸Ï÷¹ÆEFE@½Î&&&& îqQQQPOsˆˆˆˆÿ{œLDLGûÜááaá`žç ÷8hHhX'¹ÂABÁ½Î îÿÿÿðOsÿ~ÿ~‚{«ÿÎA>\,ìà    Ÿg þû8˜ˆh—÷ÙÃÃDÃÿ¾ÎýöqqpñﳊˆŠ‹ÿ}œòqñÑñÐOsŽŽŽ‚zœttllÔä#ä$ ž‹Ç2óЂRµœ fÈŠ†¤\?Räf²çÌ}Ì©èê%åð2_|ìsÓ~­A×!,—¡ø’~Bnøg\!GÚ~>J9öÓîó‘Ž‚xœ„|Œ|ÄããããÿÞ§þõ8øøøø'‰ÇÇÇÇÁÎ"" öppP°¯ï³ƒ†„„}œDD4[ûìQ'á¢âßg  þû8˜¨ˆŸ÷ÙÆÆFƾÎ&&./ýòqQQ1_ï“ŒŽ‹}œldtoûäã##bà_'÷8øøøø'©ÇÇÇÇÁ=N>>>>蜄„|ûÓÞð‡øy&]ty¦òá$'¿>&†OU/€D–?¯‰j_§Ü ü…€ÎBB:=÷ôûätä$#ä`Ýç!###ñ9 '‰ÈHHÈÿ½NBBFCýêqñññðO‚xœtltlÄ㣣càž'ó8ØÈØ¿÷¹ÆÅÅÅÀ½Î.*.* îq1Q10os‰‰‰‰‚{œLLLDÜâ""" žç  ÷8hXXH'¹ÂAÂBÁ=Î îpp0ppOsÿÿ‚{¤ düøOø'Ø¡OC@ÁÁ>Î"òp°‘/³†Š„†ÿ}œT\>>>â9ò20/“‘‘zœ„„„„ Ìä$d$¿Þg##%!õ9 ©ÈÈÈÈÁ<ÎFBFF ærO3‚yœ|t|| Ì㣣£`^§õ8èØøØ'©ÆEÆÆA=N.*.. êq1QqpOS‰‰Š‰‚{œDDTTÜâb"aàžç ÷8hXxh'©ÂÂÃCA=N êppPpPO“ÿÿ‚|¯øg þ ä<ìá ¡¡ Ÿb„|D,$ ìâ"ᢠ_gþû8xxho÷ÙÆGÄÅÿ¾Î6*2;ýöqqp/³Œ‰‰ÿ{œtlt‡ûÜã"ãbÿß'þù8øè¸ÿ÷ÉÇÆÇÇÿ¾N6:BCýòrñòïs‘‘‘‘ÿ|œ||„„ Ôädd$Þ§#!%%ó9 )('©ÈIII@½NJFJKýêrR?ïS‘‘‚xœŒŒ„„Ää$$¤ ž'ñ9ù ©ÇFÈG½Î6:>>êqñ±ñ°OSŒŒ‚zœ\\\\Ôââââàž§÷8¨¨˜˜'¹ÄÃÄÄA=Î""" îpðÑðOS††††‚zœ4$4$Ôàà   Ÿ'ÿÿÿÿûoópï† ¿ÿßg û8hHˆˆÙÂCÃB@¾Î&2+ýöqQ1‘¿ï³‡ˆŠ‰}œdtLd ìã£c¤ _gþù8ÈØ¨¿÷ÉÆÇFȾN6.F;ýòqqññ¿ïs‘|œ„„„„ äãä$#à_'##þù9 9'÷¢Y Õÿ|>‰%%#‘~<õ9))9('©ÉIII½NJJJJêrR2RP/S’‘yœ„„„„ É9))(¸ùÇÇÈIA»™š÷ÿ Uÿï€îB7Ùàh—€ˆsÔT~€[âT>$òÐ0î_ Ð»A ã¨ãÑÍ¿€& ãêçph! Á ýGþyîqqq±/S‹‹‹‹‚zœdddd Üâbb¢`^ç÷8ˆˆ˜x'©ÄCÃÃÁ=Î êpаÐOS‚„„‚|Ÿÿü î¡ ó±ÿﳃ†‚ƒÿ}œDL,Gûìâ!¢b¿ßg  þû8¨¸x¯÷ÙÆÅÇGÿ¾Î&&.)ýöqqÑ1Ÿï³‘|œd\tsûìâãc#?ßg!þû8øÙÿ÷ÉÆÇÇÇÿ¾ztä$$¤ ž cãä"|ª¾øûäCøº†mê WðúOQÐô3hà\ JÌ$ôÖÏ@ %A |{A.PzAíàÈS®Jáè"îºrRRRPOS’’’’ÿzœ””œ”Ô䤤¤ ^g'#'%þõ9 (¢Y))¹ãð/Ÿ%׿ ÜÀЩûÇž<Q*À-£ ¡"9>z911—ÅΖ½‰0òRRbúˆé£óKKMLažl”yUXú=$úJùéŸ=ÓàüJ=°%àE|ÛqxeSŒŽŒzœTTddÔââââà^§÷8˜¨˜˜©ÄÃÄCÁ=N êpðÐðÐOS†„†„‚zœ$$$$äà    Ÿ*þ äL; þûAøX˜˜ÙÂCBÂ?¾Î&*+ýöqPñQoﳇ‰Šˆ}œ\tL[ûìããc¤ßgþû8¸ø˜·÷ÉÇÇÇH?¾Î>6>;ýöq±±Ñßï³ÿ}œ„|Œ| äãããã _ÈIDùU{Yp4¾‡àèf÷òá*†kEÂD ”}è%o€ÐÉP f˜–˜˜Á:hùtäó ŠÒÜÉæ¯¡ƒBý% $Ðh_¥ {ÿTjrRR’P/S’”’“zœ¤”¤”Ô䤤¤ ^g'''%ôK''#©QøÓïˆ.U@-”|$`‡À—N:x¢þ¬ûÓ°ò¥/Ža/O@—ëÚGÀɲõC&@`>!¯rƒî9ëðIrŒü|b—¿ªÞä Ü]€‘51t¸~}1¥WÏËPÉÚZuùäãMBX4lòþ šº„0hãbÛ|[¢°Î2œ|t|l Ôââââàž§þõ8¨˜¨˜¹ÄÄÄÄÀ½N&& êpððððOS‡†‡†‚zœ4$4$Ôá! ààŸ'ùX€ ƒˆ  ßßg þû8¨h¨§÷ÙÂCB¾Î&:+ýöq‘‘±ÿﳉ‰Œ‰ÿ}œ\tLcûìãã£ãÿßgþû8¸è¨¿÷ÙÈGÇH¾Î>6>7ýôœtŒlwûéâY8è™ãïïÆŸ½„ªöÑð4 ÑÎñQø¯€[…uBWœ›‡“T´Ï“§I¦¦§&®MžšjbjjÜÑtÅU|óÓW‚ÀÉvX2k^ ô¤•7(ì?‡ùü2œœ”œ—ûÔ䤤¤¿Þ§%%%%þõ9)))/÷¹d¤¤¤!ß÷ÇÇzkØÄ¡+Ü$ T ;ª ¢Õ¼é®\KñÊ㟽{$±Cý^¾6FAнÿñÓ‚zœ|l„t Óˆx_C&!(K'‰Ÿ®{”ôÜÙ¬II¢­?iø×Ph?`àdÎ6666½ìôãccc`^§õ8¸¨¸¨'©ÅEEEA=N&&&& êq0ñ0ðOS‡‡‡‡‚zœ44<4Ôá¡a¡`^§ ù88888'ßó‡ÿÁ |ˆsûìp‡à¿ßg þû8ȘÈ×÷ÉÃÃED¾Î&2#ýöq±‘²ﳉ‰Œ‰}œd|Lgûìä$$$?ßgþû8ÙÈß÷ÙÈÇÈGÿ¾Ë ÿ÷·Â—*ƒõ„¸HŽs€)Gö9Ü2ŠûÞ¢iR«Ži/g¡~%ÐͰÔx4k/Ýø‡Éɺü¸8 #V ¼ú{°4iÍŠ•ŸVriê “ÆÖïNx/]“¦rrRRNåàÐÿ>ºrRRROïS’’’’ÿzœ”””—ûÑ9)))÷‡;“ÿkä!¶P„>ºÆ%%QC”ÙU:_N½X¼(µ`Ðÿ+—ƒC¬æ@ ޤr222¯zœ„|„| Ôããããàž§þó8ùøøG„qñ±ñ°'žgõ8ØÈØÈ'©ÅEEEA=N**** êqQQOS‰‡‰‡‚zœ<<<<Ôáá¡á ž§ õ8((((ÉÁÁÁÁÁ>Åø˜hO÷ùÅÄDDÿ¿ÎýöpÑÑﳋ‹Žÿ}œL5]…õYÈ¢ç#’’“’}{Ô䤤¤¿Þ§%%%%þõ9)))/÷©ÉIII@¼¾$}5êÅÐãð@‡TaÇ írrrrèN8R/† 1éÎ! Fn‘TöI =ö½ºrññðoSzœ|t|l Ìãã£c ž§þõ8¸¸¸¸©ÅÅÅEA=N.... òqQQQPO“Š‰ŠŠ‚zœLÎ ÷Q—ü.„?þý8X¨8xéÅÅEEÿ¾Î*ýöqÐñﳎ‹ÿ}œTTdWûìâã"b¿ß'!!!þû8ÈÉÏ÷ÙÆGEF¾Î>>:?ýöqñÒÿï³ÿ}œŒŒ|ûìããä¤_ß dcä"•‚}{V 3ÇÓ–K¦Ií#çK+699=9]Ó­—‚ÀÊE“í NH4ß $å$¥%?Þg%%'%þõ9)))/÷©ÉIII½NJFJFéÓ°OTêŒ:î $p4hÓÓÔ*q=Oþ×&¦¬¾q§ºyĬ|‚ŸýÞ^ ;_À*-P¢HGÆ×Ïx¾<÷8øøø÷÷©ÇÇGÇ@½N::>: êq±±±°OSŒŒŒ‚zœTTTTÔââ⢠Ÿ'ù8˜ˆ˜˜'©ÄCÄÃÁ=N êpðÐðÐO“†„††|œ$ìà ¿ÿà_mq.ƒùØ÷éÂBCÃÀ¾Î*ýöH¨¸—Æ¿¾Î&*#ýöqQ_ﳌŒÿ}œTL|_ûäâã¢"ÿßg#!þû8ÈÈøÏ÷ÙÆÇEF¾ÎB>B?ýöqÑññÿï³ÿ}œ””ŒŸûÓxø"hg èÎtÞÄ¢ Š‚ƒøÔÅ6Jžž¢£A¡‚W˜Žlðÿ×Ⱥ~ ô“h4Pj9)I('©ÉIII@½NJJJKýêrRRR_ïS’’’’yq]qêå×C)'„ ã矬2dPPP‡T<ùÃSNOPP]›šz‚‚‚äã†bT{Ùx”yASê£Øþ¨üg |sÖ^ DBµUο ¿àg9øøø'©ÇFÇÆÁ=N6666 êq±‘±°OS‹‹‹‹‚zœTT\TÔâ¢b¢`ž§õ8˜xxx'©ÃÃÃÃÁ=N êpа/Sƒ‚„ƒƒ|ŸÿÿÿüÞ¡ƒ(HPÊ ïï³ˆŠ‡Š}œD<\Wûìáââ!ÿßgþû8¸ˆÈ¯÷ÙÅFDÄÿ¾Î6>6?ýöqQѿﳉŠÿ}œ”„|ûìã£d#ßg!û8øøé÷ÙÇÇÇǾÎBJ6;ýéÜ£PC’x òø‘N|ó¡Á |F ¢  À\jmºŠÑx40J âMÀ [|¯µŒVnBDÌ“ ýïá”ãä¤d žg%%#%õ9)))(©ÉIII½NJFJJèŽJ;ß=%%ü÷µ‰@Ð=©iøÉóÎÀÐ=:* ã>LŠ ³ð3N_ŸtÈMAAAAn`šzzz‚¼áö4åÂñ*j ëÔ2•›¨òàa@*3ðëixBª§ÑÇÆÆFÀ½êq±±±°/S‹‹zœ\\\\Ôâ⢢ ž§õ8ˆx˜x'©ÃÃÃÃÁ=N" êpÐÐOS„ƒ„ƒ‚zœ$ÜÿÿàààžíøXÿðh"Ÿßg þû8¸Øx¿÷ÙÅÄFÆ?¾Î."ýöHØè§Æÿ¾Î2&>7ýöqQ‘1?ï³ÿ}œdT|wûìâ㢣?ßg!#þû8ØÉÏ÷ÙÇHFÈÿ¾Î>BFAýöròïoˆU43TU>‰å€ÐEƒ@øA=AAqÓÓÛ<3Px4êøȪ‡ÙÉIHȽýﮜŒ„Œ” Ôä$¤¤`ž§%%#%þõ9)))(©ÉIII¼£’’’‚{ÔqñΑ‘ƒ{pø\?®]T??!åuÏž áèdåAA¬|$“©Ç³ªòZ¹‚‚‚‚ÞŸœš‚r‚‚ÌË…/õÐ…æÔÿÇàÐÿ/\X4¨âãc#Õ¹êq±‘±/s‹‹‹‹zœ\\\\Ô⢢¢ ž§õ8˜xˆx'©ÃÃÃÃÁ=N"" êpÐOS„„„ƒ‚zœÜààà``žëNÅBºýöpðÑ1_ï³…‡†…ÿ}œL\2:1øÞ§õ8¸¸È¸©ÅEEEA=N**** êq110OSˆ‡ˆ‡‚zœ<3Æã¡¨ ÷ÿûÚ­¦J*pÒƒ`4²àMAAA=Vi͘„›”‰–°§$˜Á |ˆ€Œ„”‹ûÞ'#%##õ9) ·2rê yø4¯ž  kÝÈC—PÍà¸uââè9À †—PEãàlÚ@û—ýŽ‚œä$d$Þ§!!ôNBBBB èüä$#ãàž%\ Ô >‡ùSÆž‹Ÿ ã4Õõo›2Ù|Iþ:*›s!œk ýð`Ž6.6.æÞ§õ8¨¨¨¨©ÅEEEA=N***& êpðñOS‡‡‡‡‚zœ<4<4Ôá¡¡¡ ž§ õ8H8H8'©Á@Á@Á=Ïÿÿÿþ î¯à q?ﳆ†‡†ÿ}œDT4;ûìã"b£?ßg þû8¨Øx¨ÙÆDÆÆÀ¾Î&.*#ýöq±ñQ¿ï³ŠŽÿ}œTl\oûìä$#ä?ßgþù8¸ø¹÷Èä#Ý!!þøÞ5Ô!:=¤ 9úƒ/4ˆ¤¢¤õ&P ™šŠ‚Š‚¬»VÐh¤A vhº§%%#%ðæFJ3Þ—"àhßd>ÿ@-´2¢ãíÊ \ƒèå‡@ @-¢ÔTyj†JЬ^TzMIø•¤<¨¦¦·0é˜ Àh@¤×„¸ ͱƒCS‘‘‘‘~|œŒŒŒŒ Ú9 #Ïeããß!鯃{>ÙôH •!¦Að);—*;­îÔåà³içÁ-Yõ•8GùÌPªî¾.21Ü¿çß#§÷8ȸȸ¹ÅEEE@½Î***+ýîq1110Os‰‰‰‰‚{œ<<<<Ôáá¡á ž§ õ8h8h8'¹ÁÁAÁA=Î   êp0000OU†t,0e þû8x˜ˆ—÷ÙÄÄDÄ?¾Î"."ýöq±QQ¿ï³ˆˆ‹ˆ}œd|LT ìã"cc?ßgþû8é¸÷÷ÙÆÅÇÆÿ¾Î.>./ýör21ò?ÿ|¼t‹ãcŸþøø÷0 ãk#àh`ž•„/4AEEE{Î™šš’šš¬ÃØ„Ÿ‰ª«•-Ñó— Ýà |Z½õP‘^» œ¨¡ÍàÐBÅÐhȨ}«!åcLåàÐ<´¨=!½kãø5x½Hg¬¾†o¡ƒBüÒ¤ô]¦jªªj¬J¨Íaéª)*©,θSü„ KUPa—k—Ÿ "$”|R¿cäKÜøŽFFFB Ïl²ÑѳÕð.z{ã°û˜”>2ì>Œ©útò£ñ5ïRÃÊ6ÈåJ¬ó ü~öI"DÛWA,¸ÈÝ?à¬3ÿó§÷8ÈÈÈȹÆEÆEÀ½Î****îqQ1Q?ïsˆˆˆˆ‚{œ<¸å_ƒªÃOÀÐÿD@ù555É©¨©(¨¬M1ª*VVY|Ëž¤}e_Ï0«Ç?«O±ßÇH(>ÑØ~%¾2üülƒŸÀ.Þ<ÞF}qòRM=ìü Ú¬*ë•„€hÁ ’¹ªª*ª¬M3SPSRY=-᤼J?ñ)ê*×Îdùqøàh?Ÿžº| ò¤5î=p}ýsÚ£qÍYUQQ{Ï—<åE=]IæubIå߆rÀõOþNcðh¿Õ‰uñôëGÁ |‹€Ð1FÕuòRRO_ ߣ§!!!õ9 ÷×Å߆Eçä!¼_\õêzá“•EfÅ@Ð<®÷4øä(dåQMhzå‘èd¸Ý,TT—ødÇGî]ºLx÷jËJ\åðha¾?{ £ ƒlÍñ-ϪķÇë㛾 ä< ˜£×ÇÇG¿_Ÿ|=8øØèØ™ÆÆÇFÿ½N6267ýêq‘q±pOSŒŠŠŠ‚zœTLTTÔâbbb`ž§õ8xˆhh'©ÃCÂÃÁ=N êpÐÐPOS„„‚‚‚{œ$ Üà à`žçÿÿ÷; à à_¢…= ÿ8˜x˜˜ÙÂCÃBÿ¾Î*2/ýöqñq/²ÄFCC¿ýöq±qqßﳈ‡‹‰ÿ}œt|Tl ìãbããà_gù9èØøÉÆFÇFÀ¾N>>66ìŽ9ð|%€D|ûùç±@†æÏƒ@ñ1‡Ýá}t4m Uß§ãdéyø Gþ}êr1ñð/s’{œ„„„„Ôä$d#à^šHëáá{ä#ßϾži o‡¥ï{ƒ÷üE_¯|ƒõõt|ll÷©ÇÈGÇÂ<#ŽŽŽ‚sÔãc£cà^§õ8ØÈÈØ'©ÆEFÅA=N***& êqQQqPOSˆˆˆˆ‚zœDDDDÔá¡¡a`ž§ õ8hhhH'©ÂÁÂAA=N îp00P0Osÿ‚zœûûüÔ_áœ4/ûìàá!! _g  û8¨xȯ÷ÙÂÅCBÿ¾Î..+ýöqñ±p/³‰Œ‡ˆ}œlTdt ìâ"¢¢`_gû8èÈè¸'ÉÅFÅFÁ=ÎB:6> òq±±ñpO“ŽŒŽ‚|œtd|tÜã¤#c žç!!ù8øøøø'ÉÈIGGA=NBBBB îrññÐOS‚zœ|„|tÔä#㣠ž§õ8èøØØ'©ÇFÆÆÁ=N6>22 êq±‘‘pOsŒŒŒ‹‚{œlT\TÜâ¢b¢ žç÷8ˆˆˆx'¹ÄDCCA=Î îpÐаÐOS†„…‚‚zœ$Ôà  à`žçÿ÷8÷÷ø'©¿¿¿¿Á=VÐP®ÿÿ}œ4</ûìáaaá¿ßg  û8˜x˜¯÷ÙÂÃþÎ*.+ýöpðÑQﳉŒ†ˆ}œlTl|ìâ"£" Ÿgù8ȸØÈ'ÉÅÇEÆA>N>6:6 öqq‘±O³ŽŒ‚{œt\tlÜãcâãàžç!!÷8èèèè'¹ÈÈGHA=Î>6>6 êqññÑÐOSŽ‚zœttttÔ㣣ãàž§õ8ØØØØ'©ÆÆFFA=N2... îqqQ‘POsŠŠŠ‰‚zœTLLLÜâbb" žç ÷8XXhX'¹ÃCÂÂÁ=Î êp°PPOS‚ƒ‚‚‚zœ  Üÿÿààžæþþÿÿ÷7÷÷çè'¹  à_ û8(H(H'ÙÄCÂÃÁ>Î öpñ0ðÐO³Š‡ˆŠ‚}œ4<4$ìâââ# Ÿgû8¨èx¨'ÙÆÅÅÆÁ>Î&*2. öqÑÑq°O³‹ŠŒ‰‚}œdd\\äãcc# Ÿ'÷8øøù'¹ÆÆÇÆÁ>Î>B>B òqÑÑñ°O“ŽŽ‚{œ„lttÔãcc£`ž§õ8èØØØ'©ÇÇÆÆÁ=N6666 êq±±‘OSŒ‹ŒŒ‚zœ\\dTÜââ¢â`žçõ8˜ˆˆx'©ÃÃÃÃÁ=N êpðÐÐÐOs„„„„‚{œ$$Ôá    ž§õ8(ø'©Àÿÿ¿Á=Mÿýÿþ êoÏÏïðoYƒ„h€À æ 00¯ƒài¿A€’Ì(`a_ÀÓ~@¿f¤ `Á‚†ð| 7ëH0@À9ƒ +àøoØìÁÂ3$ ˜0PÀ¾¦ýeH0`¡…|Mùû˜xv€`$€s WÁð4ß­@ÀIƒæ 80¯ƒài¿`_s Ô ˜0`ÁCƒ ø>›õ  `Á‚‡ð| 7ì îa¢Z€’Ì(pa_ÀÓ~´$ ˜0Pྦý}ÌL3`0`À9ƒ +àøoÖ°`$Á€s WÁð4ß/¹†ˆhL0`¡Á…|MúÎ 0`ÁCƒ ø>›ö÷1qM`ÀIƒä 00¯ƒài¿[A€“È(pa_ÀÓ~À¾æ!¬ 0`‚‡ð| 7ë@0`À9ƒ +àøoØÜÄÆ´$ ˜0PྦýlL `¡Á…|¦ý}ÌdK`0`À9 +à” 7ë`0`À9 +à” 7ì îb"šA€“Ì(pa_ i¿€“Ì(`a_ i¿`_sÖ ˜0@ÁCƒ ø%MúÚ  0@ÁCƒ ø%Mûû˜¸¦Ð`$Á€r WÁ(oÖ°`$Á€r WÁ(oØÜÆF¶ƒ& 0Pྠ@Ó~6ƒ& 0Pྠ@Ó~@¾æ21¸ @`‚‡ðJ›ñ´ 0`‚‡ðJ›öó1‘í`ÀIƒæ 80¯‚P4ß­ÀÀJä 80¯‚P4ß/™pP `¡Á…|¦üpP `¡Á…|¦ü}Ìlkp0€À9 +à” 7ã`0€À9 +à” 7ä îc£Û€”È(pa_ i¿€”È(pa_ i¿ _3Þ  0@ÁCƒ ø%MøÜ  0@ÁCƒ ø%Mùù˜èöà`%€r WÁ(oÆð`%€r WÁ(oÈ'¼ÇÆ7ƒ( 0Pྠ@Ó~7( 0Pྠ@Ó~A=æ.1´ @`‚‡ðJ›ñ¸ @`‚‡ðJ›ò ï1‘ÀÀJä 80¯‚P4ß ÀIƒä 80¯‚P4ß°OYŒŒmP `¡Á…|¦ümP `¡Á…|¦ü‚zÌlkp0€À9 +à” 7ãp0€À9 +à” 7äÞb⛀“È(pa_ i¿Á€“È(pa_ i¿ žóÖ ˜0@ÁCƒ ø%MøÖ ˜0@ÁCƒ ø%Mù÷˜¨†°`$Á€r WÁð4ß­@ÀIƒæ 80¯‚P4ßOyˆˆjL `¡Á…|MúÖ ˜0`ÁCƒ ø>›ö ï1 `ÀIƒæ 80¯ƒài¿Z€“È(pa_ÀÓ~Á=æ"¨ 0`Á‚†ð| 7ëP0`À9ƒ +àøoØ'¼ÃC4ƒ& ˜0PྦýhH0`¡…|Mû÷˜hf`$Á€s WÁð4ß­ ÀIæ 00¯ƒài¿`žó Î 0`ÁC ø>›õœ `Á‚†ð| 7ìÞ`ဒÌ(`a_ÀÓ~³ƒ$ ˜0PÀ¾¦ý‚{Ì00@À9ƒ +àøoÖ``$€s WÁð4ß°Oy‚‚fH0`¡…|MúÊ 0`ÁC ø>›ö ï0P, ÀIæ 00¯ƒài¿YA€‘`¡…|Mû÷˜öP`$(`a_ÀÓ~²" ÁC ø>›ö ï/ïì`ÀIæ 00¯ƒài¿XÁ€’Ì(`a_ÀÓ~Á=åùùŒ A WÁð4߬`ÀH‚0PÀ¾¦ý‚{Ëëë0 ‚ 00¯ƒài¿XA€‘`¡…|Mû÷1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ;O }…"„dh 4¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸eÿÿÿÿÿíïÿÿÿÿÿÿÿÿÿÿÿÿÿÿøgõ÷Ã8hhxx'¿ÿ½þö÷ÿáœLDLDØg öÃCCÃÁ=ÿÿÿ÷w_ÿÿÿÿÿÿÃ8ظظ' Î....çÿÿÿþöé¹C8øù '¯øg÷ÿÞ»­Òÿ÷·_þÅÆEÅÁ=†qqqqp/xg÷ÿÿÿÝÿÿÿÿÿü3‘‚zÿü3„„„„‚zÝÿÿÿýÓtÝÝáœ$$$$Öí{§ï÷Mݼ÷ýã{½ÿ†pO_ÿû¦ý§{φr22_ï;´éÝ'[¦âÿ á!!a ž¾à÷ûÛjî?'ýÚAÏ wn®xgõÿ÷/pUþ6§vÝÿâ÷<…äÿ†qqqqpO_÷¯îO½âóÑy7Åäâóÿøýÿýëÿâóâ÷ü^áyû·ü~ñûÿÿ½ÿïÿÿÿ÷kþ?? ä$¤¤ÿÞ~éEïº\3‹‹‹‹ÿzÿÿÿñyáy8g%'#%þôÞïºK+ÿÿÞÿ†rR2OCòqùñyáy?û’º?p¼Ÿÿݯt÷‚ŸÅïÅäõ•Ïw¿º?p¼÷ÿºÿþö/°Ð½ÛØ™_®o§ÿºÿºÿÿÓ]ZÿÝÞßÿÿÿÿ÷K‹·‹mîeÿÿÿþ,b Ý1{ñûû¦-N½8aÿ†pÐÐÐÐO_ÿt¾ín¯ðÆFÆÇ@Ÿzÿ†pððÐÐO_ÿ¸=×­¸3ŒŒ‹‚}ÿÿþðDÃBÂÂÁ=ÿþâ;ßÿÿü3„„……‚{ÿÿÿÿáœ\\dd×ÿÿÿÿÿÿÿÿÿÿÿÿþˆ ,¦"„hh 5?ÿÿÿÿÿÿÿÿ©¹ßÿû‡ÿÿÿÿÿûŸÿÿÿÿÿÿÿÿÿÿÿÿü3ŒŒ‹{Ã8ØØÈÈ'¯ÿÿÿýàl3‹‹‹Œ‚{ÿÿÿÿÿÿþöåÿðÎ.*.* ì3ˆˆ‰‰‚{ÿÿtÿü}¹ïÿÿÿÝ~ë÷½íŒçÿÿÿü3Œ‹Œ‹}ÿw4÷ÿÿÿ»ÿñùáÆú÷p3‘‘’§_ÿÿx»Áž¿þñÿÿÝx3ÛÛî¿ÿÿÿÿrOoïÿÿÿs»½ºÿÃ8hhhX Î òûËï_÷›¸¶ÞïýÛ~/ÿÜ‹†q‘1‘oï¿ÿro'a¾ç{vœ.íÞcÜçÿrq‘1qoï¯v èàÎOÝ ÛÛ·ÿtǤáå~?8/|3‚z ãccc`ž¿îÓÕíéíîðk°g`ÁœŒ”„—ûå‡{´.ݼþö>ÿ†q±±±°O_Ã8HHHHË•÷—†q±ñÒï®@—Üž÷xþ??ÿÿÜ¿ÿÿãóÿÿýÐ3Áºž :NŽ SÞÿÇúw·:ðÎ22./ýëÿ{t ¼ÛvÝ·/ÅçŶ{÷WféïnßÿܯººxžŸ}÷ënûÇýäå{OÝÿ÷“šzÞ'ßy>󵻋³Ð¾óÃ÷C9)))'¯îÝïÿîwßx3ï¾û†¾û°S¼bóÖã?ݱm¹¼›ÖÝv¿þòpN´%ï~þà}Üx¼øf¦¤¦¤­3»»IÃóãâ=ÝÅÛÅO¯ÿý²Ï<ÚÜð9¼ <œÆÇFÆÿ¾¸/¹ûÛ¦°ÍÃæyÛ¾÷Ý Zßÿ݃wçà‰ïÿ‹h3s/Ûݱû‚Úo{œÅÿýÈï7ßxCÁ»ÕϹÇ{wsÝ·Å“8í8ãÝÿÿ÷@IÒ¼9ß}÷§`§ÝÝ·ºN›¦äÿáœLLDD×û°Yàiééá÷„<{“»ÿÿü2BB¾ýöûö7^ç ãcbã`Ÿ^?ûŸÃ8èøèè¯ÿ÷ç§áœ,<$$íÀÞÅÅGFA>¼ënÿðÎ6666 òÆÆÆFA=ÿÿÖÝÿÿÿÿÿÿÿÿÿþ7 äÈ"„lh 5?ÿÿÿÿÿÿÿÿÿÿ÷ᜠçÿÿÿÿÿ á!`á`Ÿÿÿÿÿºÿÿÿÿþëÿÿÿÿÿî×ÿÿÿÿÿÿÿûßÿÿÿÿÿÛ¡vÿÿÿøg ûÿýíÈï?ÿÿî¿ÿ÷Ýoÿÿÿÿû nŸGÿÿÞ/ÿÿÿÿþÛ¿û±\8?ÿÿÿþïÝn÷kþñÿÝ7mí×ÿÝ­à‰éØrÎÛÖì)á_ÞcÊáw_þã!r:ôêíÿû´ðYÉ>ôû¦ôä¿vݱ{ÇÉßâ·Í9›“s6’{¡ÿ÷¯ßºÞ£íï‹§ïð¿½æ.oFqYÎGÿýâzû‚©à×`ׇh~áA7†bÝê¶÷ßøó½ÌAuùƒÂøïÿöâ<ðÏx"v õx-¼}÷Çw#Š[Éï÷N-³Âóœ3zÿ÷„8J}äôèxžžŸ}ÿvÅ¡ž¼'âî™Gâíîÿû[Ÿy>ðDð‡ÞÞûïµov:2<÷wl\gÿí6æÛwÿï¾ûïß}÷ß}÷††r1Ò2t||oûàXdóïšzrzzÿL»6ìÿÇïjÞåÂíÓîoÿûï¾ûï¼Þo¾ûï†q±ÑñŸï¡œŒ”|‹ûíÍEÛÿº|3OPOPX›vÿþò¼}äå}÷ß}÷g#!!þúðJç‹1Åm½ÐÍ=A==fiÛÿû(öûï¾ûï¾ûï'“îïW5ݱâ÷nÈÈÈÈÀ½bäN¨'(¨,ͽÿý÷Þá7ÞÁÞá7·„9Ã8ÈèÈß÷ÛÂÛƒc÷<Åš<- h@œwAÛc<>ÜÿÿÚÞýàq÷“ "ç}à“‚ ›ï¼'v7ÐŒžñjü{náq Éátosÿÿ¹^ >ÅEDÆ@¾¼!÷ßxC‚wÜ»¿v=ÀxŸ{ ˜Ü÷¯ç†æ¿ÿ¹ß}÷¾ó}÷ܾû›»¤,¾í?ÂûÜöí¸îC8øøøøŸÿîAž >á;„ß}äû÷ß âãc£`_Ï!ïsœ3’{ûîPÎ:>>?ýïÿÿc<ÄDCÄ@¾¾åxC> ¾ç}÷܃8ÈØØØ'Èg÷ÿ†qÑñÑßï_ÿî@È!ûën}÷ß}÷ßp˜gûpC ãc#£`žðÎ:B>> ïÿÿûïÞŸs¸]‚Œ Mînûáœtdltë‚`–àfànÆÇGGA>8 †qñÒÐOpÎ>::: ëÿÿì!?­/Z]C@îz=Îs{PMÁpMÂA6Á+´-ïp7ww}ÁÿÿÿÿÿÿÿÿÀï áé"„ph 5?ÿÿÿÿÿÿÿÿÿÿû×xcwï°Î*&**ïÿÿÿõ·ÿÿ†qððOÿ÷‚^ð<ðDðJÂÂÂBÁ=¼<ÿÿÿÿ¼Þ zz}ðÎ.2.6 ï âã"âà^ÿÿÿþì;]÷ßx¾çáœddldßÿÿÿÞ=÷ßy>çáœllll ßÿÿÿtƒ8HH8X'×§€§Þ >ò¼0gþù[vÆÇFGA>wxü÷ÿÿ÷`Yííäûï¹ÞO'ŠÛÿŶÿÿü3„„„…‚{÷ÞûÍÊûÈ3‹‹‹‹ÿ}yÿñçÿÿûï7ß}÷Ã8xˆh÷ÛÀ×þîqqñ²–ŸzvÈHGÇÁ=ðÎ**&& ïýáƒ8?øçß}÷Þ}àyà‚ÈGÇȾ}ïÿÿþäaœ, ëîFó}÷“ïO¼ :ßÿøgõÿï'†}÷ß}÷ÞO¹Ü!;¼pÎJJBGýéïÿuÿý÷ß}÷ß}÷ß}÷Þ-çÿx[¶çÿþûïûï¾ûï¾ÈGÈHÿ¾ß ä¤ddÞîâgsîïpÎJJJJë äddd`^œÌ}9Úh¯ ¶çŶñs>ÆFFÆ@½ï'ßy9ßxCï'ßx}ûCNYß»o¸]Ñ=ßÿþó}÷ß}÷ß`½÷›Ã9(ùO÷¥=»xôÞ.ܦ§&§.N½‹‘ï§oÿ÷“ï¾ûï¾û¼ 4`yÍ“<äëAXëÇÿÿÿhï}áŸ}÷ß}÷ß}ûÁ›~Ôé€ÎJJNJçÚlÿÿÿ}÷ß}÷ܯ¾ó}ðÎFF>Gýöì6ƒ¸['†TôäÔÓ óLYðÎJJNJëøfšžœœµ7ÿþÄÞûï¾ûï¾ûï¾ð0öúÌßox·'ÿÿÿ¾ò}÷ß}÷ß}÷ßpðÎNFFF騼ÿÿÿ†pааO^ò~ûï¾ûï¼ß}÷‚NAƧ''¨,ÎîÞÞðÆEÆE¿So_þå}÷ßy>ûï¾ûï¿xÅîL/=‹mîøøwÿýÊý÷¼ï¾çß}Îæ+•Û´Ë4ð¾÷}c¸[g˜d÷Ÿ†pððððOî„ødŒŒˆ|[ûíá/ÞO¾ð0û÷´¤gÜû{ÐÛsʼn½Í=‘IERR`õ?.ðÍIMMQfiÛØ3s•Úrÿï'†xx(þó}ðÎ&22)ýõ÷÷Š©©)©¬L©çœÐâÜü3RRQRWššš¢¢ÌÁñíºÝ¹Óü3ˆˆˆˆ‚z âbb"`ž¿ï¾àµ÷çï'ß âbââ_ß!œd|lûÛ¶*‚’‚åÀÊiÛŠ§»vÛÞé¶®aNºÿÿÝï¾öûïŸ~ð0ûÀ³{–Þû¦í†qÑÒÐOaœ|Œtt ÞãcÎöÚÿÿv·ß á¡¢!ÿß_}ðÎ>::>õà³Âßxi'†qÒÑÐOaœŒ|„ŒÜ3‘‘‘‚| 㣣£ Ÿ>ð3ÿÿÛß}áŸ}÷ÜŸ}÷û[¯†q‘‘±OžÅEÅEÁ=þÂAÂÂA=~ÁAÁA¾†p°ÐÐð/¡œ,$,$ ëï­½ûìn}÷ýÀÌ3Ž‚} ãc#c`Ÿ<3ŒŒ‚zÿÿûÖÝR^õ`…îo}ÀèÜ ›{÷÷ÜÿÿÿÿÿÿÿÿÿÀì L "„th 5¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ppp/Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹w¯ÿÿÿÿû§ÿÿÞÿÿÿÿÿ÷1§‹·ÿÿÿºnÁ¼ðÎ>>6> óÝ¿ÿÿÿ¹Ý?†q±‘±Ð/¿ÎnÿÿÿýÚÿþö,~ÿÿû¥Ýƒÿþ÷ÿÿÿztî_ÿÿÿÿÿÜGÿÿÃ9)))ÎJJJJës»‹mîgÿþè¼þîç{øg%%%%õ¿‹·ÿÿ÷Ý¿ÝÅ©ïýÓ²ÛÞ.Žáœtlll ×þóÿû9?þí{ßÿºÿþéÅç«YñûýÛÈ÷ÿþñºÿú͹ÆB÷Ã4ÔÄÄÅ™×ÿðÎ6262ëÿtÿÿ…ì˜÷ÿÿýàÿÿÝ«µü^þ-_ 㣣#ßÞ¿ýÓÿÿÞ¿ãóŸÿݯï}Óûß÷±é½ÙÿÿºÖÝÿã÷þÉIIHÿ½|{oÿÿv¿áœ\dLWûïøg%%%%ù äddd ^ö2oY·ÿÿvÃ8Șˆ¿÷Û‚%»[‹îõ·áœ„„„‡ûˈnÿ¼WÃ8ˆˆˆˆ'¯ÿÿñ{ž¬+ڳη¿ÿÿz÷@ßᜄ||‡ûßï'o»nмã¿ÿ÷ƒ:ÿ½ûÕÛq¡ûÃ9) (®èí+ÝÝÿÿޘݺ_xWë+þîãÅçC8øèèè¸gþõáœLLLL×þí<_øg%þûÿÿÿÃ8(HH8'¯¹.÷ÿ†qq‘±Oÿÿ†ppppO_ÿþÆÿpÿÿú÷ÝmnÿÜû[ÿÿÿÿÿÿÿÿøW ?,"„xh 5¿ÿÿÿÿþÆÿ­»ÿÿÿýmïŸÿÿÿÿü1?9åñî ó÷ŠÆ÷‹ÿÿÿÿx43ÿ|­»ÿÃ8˜¨¨˜¯ÿÿÿ àà ¡ žÿ¼ÿÿÿ÷„oð/Ïð/¿Ýïÿÿÿÿp+ ßàà`ß8g  ùx%ÿݯÿÿ÷ì3‚‚ƒ}þÄÅÄÄÀ¾ÿÿÿÞ ÿÁ?Àÿ¿<_ÿÿÿÿûž¯>ÃÄDľ ã¤#£àž¿ÿÿûyç†}÷ÎÆýmÿìnÿÿÿ}÷Ã8¨¨˜¸ׂÝäàŽð÷oÿÿþò}÷Þ~ñ9¯†qÑñÑÿïÿÿþûÿÞ¿ÿÿÿûï»ýàßö·û¿ÿ¾þñoÿÿû½ïÿï¼§§§…nÿpÿü~ÿÿ}ðÎýñ÷ßï þ=³ÿÞ¯ÿü~÷ßy8{î1wƒr2ï½Þ/'ÿøgõÿ÷ï¾ûïW…=?þÞÿÿÿûÁ·†ýëï_ÿvÿÿx0g þû¼àßÿÿÿÿÞ ð5½ÆÆÇÇÁ=ÿÿîPÎ õÌ<Ÿ}÷ßxKïáœT\\_ûÞð-†qÑÑò/MoûÀ×ÿþÜ x,ûœ3„„ÿ}}÷Ü߸†qÑq±ÐOŸYÞí4„ÿÿÿîwßs¹“Éäûï¾ð â¢ã"àžÜðÎ:::: î:sÑû¶íÿÿþð‡Þko}÷ÞO¼ƒ8x¸˜Ÿ÷Ç€‡·Ã8ÈèÈï÷¾æÝßÿÿü3‚‚{¸kÍ÷‚oØÞÞçßy9}÷‚LnñôèýßÿÿÇ™9æûÂy<3ï¾ûï¼p†q²±Ð/xcŽ?!!þ÷ÿáœldll×ÿ¸kï'„>ûï¹ß â¢âb¿ÞÞ ã#c£ßÜÉHHHÿ¾aœŒŒ„” ×þÈGÇÇÀ½qÑñòïÿ¾óy>ûï¼%ÊóxCîpÎ6:>:ð3ŽŽ{ äd$$ ^Ã9 ÷¿ÿÇ»ÿýÎóy¾óx&ûï¾ûÌ3ŒŒŒÿ}p:ðˆg#%!#þôÈÈÉH@¾Ý“ÿî½ßÿß}æûÍ÷ß}÷ßpϾÈÈIH¿½ßÞü^÷IÚÿý÷›ÍÈÞo¾ûþøgþúðφXé ãïmï¼3JMKK\œÅïÿâ­Îÿ÷ß}÷ÜÉáŸ}÷††qq±±ŸïŽ „7¹µ{¨öœ,½ãÿÿÿ¹ï¾ûÍϾûîa÷¦ÂÜó°P3MMMNZ Y;Ïo=ÿÿr}÷ÞnWܯ¾ð—Ç@9àp3Žÿ}x^Æ{ÿ½ÿ}÷ß}÷ß}÷ß}éäò´ÓÝG´ÿ»|[¼[œÿüy‡<äo¾û•÷ß}÷Þo¾ónƒ0©((¨¯xÔÊ»Ïþã°îÿÿß}æû•÷g!þúûï¾å}÷ ‹›®×ðÇ%#)é)(·;¾¶ÿîwß}æû„ß}÷ß}÷Ü&?}£?þÈÈÈHA=x ã£c£žõÿï¾ûï¾û•÷“æÈÆHH¾>û2áù8f¢¢¢¤·9ö71¿ÿÿÛ ÇÜï¾á7ÞMn}÷ÞO¾ûÂÀÄ¢a9A9ˆºš{þåuz‹lÿ¿ÿý÷Þo¾áï¾ýõ¦æ7>ø£tx ÔÔTÔ×Uš Ô”Tf‚í9ëo½;?Å®;ÿûã­Ïy>ûï%·>û÷­À«áU§¼ó˜ßº°&ç“·»Ž{Ç´v?ÿõ·9ZÜûáœt\loûëï'ß}ÁðjÍ>:Üñt÷5Üw%l›Ýÿîa';‡¬s÷„>ûîW‹zTûy߸ïN×ÿÿr†pððŸï¡œLLDWûë8å·>øgúûï¾çpG±nyÛßÿÿÿ†HXh7B¿7ŽpäÅÄÄE@¾¹ß}àmÏ7±'>à^à>à_Þ9(øù'¿ÿÿû‚fÄCÃÄ@¾pÐð°Ÿï¡œ\L ïxxáœtltt×ÿÿµ†LnkrÛ­ÀË•—½¨u½è[[s®öw;ö÷koÿÿÿÿÿÿÿüà n"„€h 5¿ÿÿÿÿþ°½ÀÄ4cÌ ƒø ( i ˜€ô Á~ ¨h'÷ø'ÎÆê÷îZÛÿÿÿÿÃ#ÛËËß ŸC7·Çר×\3ÿÿ‚‚} ÿÿààŸC?ÿÿ÷ø'ÐÎ   ð3„ƒ„„‚{†pppppOaœ,4,4æÂÃÃCÁ½†pððððoœLDLLØgöðOÿÿÿ†'§¾¾¿A>Ã7Çß÷øÈgúì p0pPpO¡œ,$ àg øÆàÎñàÃ8ˆ˜˜˜'¼3Š‰ŠŠ‚{ðÎ*.*. è3‹Š‹Š‚zÿ á¡¡¡ žÿü1¹õùîð3ÿ‚~ÿÿ~ à `á?ß›üüûëÞNÀPg øÃÄCD@½†qð/og€3‰‰ˆŠ‚{ ⢢âàžÃ8˜˜¨¨'¿ ãcbâàžÃ8ÈÈÈÈ7 Î.... ëÿÿ÷ ¾¿¿?A>†oðOÿð/œ$$, èg úðp20Î&õàÂÃÂÂÀ½†pñ0Ñ0OaœTLT\ Øg÷ âã"¢àžáœT\\\ßÿÃ8¨¨¸ˆ'¿ÿÃëà à_8(8Ç€C€Ð s'ßpypðñ1/aœûRsg3‡Š††ÿ} ãc"ã?ßC8¨˜¸¿÷ÐÎ***+ýñàðpÃ8¸Ø¸ß÷ÀÎ>::;ýîÆÆÆÆÁ=;[šs†q±±±°/0Î6666 çáœDDLLßýÈ|3‰…‰‰}s¾ós@Î*'ýô3ŒŒŠ‹ÿ| ã"ãc?ß8˜˜¸¨×€ gøÆFFƽ†q‘±‘¿ï{ÉÏÿÿÿ}æòs¾øg þúÆFEF¾†qQQ±Ÿï¡œLLD?ûã„€#ï†qqÑq¿ï˜gõ½xg#!%#õÿÿï¾ðáœ,$ ëÂ^Ì8hˆhxÐÎ6:2:ð3‹‹| âb¢¢ß†qѱñßïG,3| 㣤cà^Ã8øøøè¯ÿÿþ¦NðÎ ýùà!Ìžn Ü›À@gøÆÇEǽ†q‘qÑÿïaœT\\_ûã‚`à•À ã£ã£ÿß9ù/÷¿ÿÿÿtϾûîWÃ8èè¨ß÷ÐÎ22:7ýô3‹‹‹ÿ| ãcã#¿ßŸpJÞïv/ᜌŒ„ŒÍ'<ž_þð‡“ÉÊûï†q111l|d‡ûèg#þøÆFFÆ?¾¼< †q±Ñ±¿ïŒo ä¤$d?Þƒ9 ÷ªÊø¨ÉÏÿÃ4´¤´µÉç;šÿîDûÂ_p›ï†q±qñ¯ï¯ÀÎ>B.5ýð3Ž}p0†qñÒt„„‹ûæê,çnbÃ9)))/÷¯ÝpÏbž,›áœlldgû×ýÈ3ï¹\¯¹ÜÂ3‰ŠŠÿ}x<ƒ8ØØèß÷×§§+Ù\¿y÷;Ÿ ââââÿÞ°Î**** ë÷ß}Âo¼%÷Ã8é¨ß÷ÐÎ>2B?ýõäÇÉFG¾†rò2ïŽ`³¸['Âí=×›þó}Î/?ðÎ6262è3‹Œ‹Œÿzÿ¾ûîWÞÊð€Î&*6/ýõÌ 8H s‹ˆ,î•á7Å‘“û˜…‘=Øœÿ÷›ï'ß}÷„<qq‘ñŸï¯'Ã8Øèèï÷× ÈÈÉHÿ¾»Áœ”””ûÛžæ/¹´owvžXgþõÿãȾûï7‚o¾ðï ÆÆÇFÿ¾¼8øéï÷ÛÀc›tŸ}Ù}Øœ8áš‚‚z‚ÔÓ²s ÇÇGÆ?žxÿû†¾ûáœtTlsûègþúá<‚^÷GÜ&û

æNÓš÷nóøgõýÈÃ8Xhxo÷çgþúåh®y< 3ŽŽŽÿ}x9`g!!þúòp3x4W8ÁK™]¥“sµxPýû»²{{ðÎ&&&& ëýàAðÎ"&!ýõÌ>û•à›Á Î:6:9ýõàðX3‘ÿ|¼Ð©))(®øÔÐf¤¤¨¦³4ã'h[O}È4PiÏqûµÿýÎò}äð—ßr0Î2.>;ýõà!÷Üaœdtlgûضž§¨((­MûÉã ÕUUV&¬IË$÷¯Ã8˜˜¨¨'¯ûÉÈŸr¼%÷܉ȟy¾ûÉÁPø Ô”Õ•¡©«»¬3‘‘‘‘xy:OO¹Ú;œ¡œdtloûÏÿ÷›Â_y¾û?y9Ü'›ïl$õŠàÎ>J:5ùì3‘{ ä$d$ ^·WÝ¿øgôÄCÃÃA=pÎ ëÜáœ,/ûë•ðÎ&ýô3Œ‹‰Œÿ}y>ÆÅGFÀ¾¾ûï0ÎB6B?ýñÁP ÈHGÇÿ¾qÑ‘ñÐOaœtŒlt Øg!øÇGGG¾qòò?ïœt|„oûÚÛ¿þÃCÃÃÁ=ðÎ  ëØ0(x3ˆˆ†‰}xK â⢣?ß\€1Èß}÷܇ÀÀg!þöÆÆÇǽ†qòÒ0/aœtt|wûØg#þ÷Ã8èèèè'¨gõ†q±Ñ±°/_†pðððÐOënÞóp›ïï0Î&.&.ô3ŽŒ‹}x~ì qññÒOpÎ>>:> ð3ŽŽŽ‚| ã¤#£àžÿÿÿ±Ç\ ô8sÑÀ‹œä-ïYÝks›ß[{¿ÿ[wÿÿÿÿÿÿÿà  Z"„„h 6¿ÿÿÿÿþàcÿÿÿÿÿî C7çç×øØfúüþýû àà `àŸaŸü $ØgöÃCCCA=Ã8HHHH'°Î ï áa¡áàžÃ8xˆxx7¿Ã8ˆxˆˆ' Î"""" ëÿÿÃ#ëÓÛß ŸaŸü÷ü ä3ÿ‚} ÿà àŸaœ,$,$ àg øÂÂÂB@½Ã8hXxˆÈg ÷ÿÃ8˜¨¨¨'¿ áá¡áàžÃ8hXxh¿ÿ¸†oÏÿð0OpÏþþ ýô3„‚‚…ÿ}x¼Ã8xxˆxÀÎì3††„„{p%Ã8ˆ¨˜˜'¿†qQQqpO?ÿÿî.€ ñ¼¯áx†pÐа°/œDL>BB ëvÝ?ÿÿÃ8('¸jþø_÷Ãÿ¿pp0ðŸïœ4ûàg úûï¾ûÀ ÆGEGÿ¾q‘‘Ñßïaœ\dd_ûàgþøó ã#£ã _8øèèè½Ø¿ÿÿá’  Ïÿïœ4<,?ûðg þúÂBÃB@¾¾ûáœLT4Gûëï†qQqQ_ïaœltdûàg!!þøÅÇGFÿ¾^PÎ:>>?ýì3‘ÿ|ÿÿÿá’ ðÏ$,$ûðg þúäWß}ÊÅÆÄDÿ¾†qñ±Ñÿïœd\|oûàgþøÇGFGÿ¾qñ²1ßïo/ݯýmî×ÿ†('ÄAÿ¼®Wß}÷†qqQѿ\lTSûàg! þúÆÆGÇÿ¾†q‘ÑÑß„|l‡ûàg#þøÇGÇÇÿ½n÷?÷=Ú¹§5ÿÞWß|3ˆŒ†Š}}÷ ã£ã#ßßC8عç÷ÀÎ26.-ýô3ÿ} ããd#ßC8Øèèç÷ÝÝÞ¦%¥%-N¹ŸîwWNW½¿ÿß á`ááß_}÷Ã8èøÈï÷× PÎ2:*+ýô3‘ÿ} ããdcÿßC8ÈøÈÏ÷ÐÎB>>Gýô3Ž‘ÿ}»o†i‰‰©‹³×;M?îmÚv·Ië ãccc?Þ¿î@ ⢢bÿß_}÷ܯ†q±rßL\dWûèg!!þúä!œdttwûàg%'þôãNïCÍ>óÇtÝ1e¯ÿÿr+ï¾û÷g#þúÇÆHGÿ¾†qq±±Ÿï¡œ„”lûèg!#!þúÆÈÇFÿ½»NGq»ÿ~æNk†qñññÿï_þç}÷+ï¾ó âbã"ÿßC9 Ù÷ÐÎB6F?ýô3ŒŽÿ} ãä$$?ßC9ù)÷ÐÎBF:;ý÷sÜßÜðÍ9955niÍ;_ÿß}÷ß}Îç ã¢ããÿßC8¨ÈÈŸ÷ÐÎ>B.?ýô3Ž‘ÿ} ãcãc¿ßC9é÷Ègþøæ÷ÞxSʨ'&§,M<¯ÿÃ_÷ÃÀ†qïï¾ûï¾å ãdb£ÿßC8èÉÿ÷ÐÎ2::3ýõÈC9éèÐÎ6B:;ýð3‘Žÿ{ ããäd?ÞÞûÌ~ÿ¸{î5¹“šÿûÀ ûîwß}ðÎ&*.'ýô3Ž‹Žÿ}r+Ì3‘Žÿ} ä#¤cÿßaœŒ„|‡ûÓ/}ÿÃ9)÷—“nbÿûï¾á¯¾áÃ8èÉÿ÷× }ðÎ6667ýð3‘‘ÿ}x¼±7_DýÃÜ;¹±{ÿýmϾûï¾ûþûáœtl„wûàgþøûï+˜v…´èg!þõ¸}Æÿþá¯'ß}÷ß}÷;”3Žÿ| ã£$#¿ß8Èøèß÷ç _r‹;î5s+˜osºn×ÿß á!!¡?߯¹ßs¾ûÁ'ß ã#£cß/W pÍ=IAIbiÚsºnÓÕÆž-Æ7kÿ÷ r—ß}÷ÞAœTd\_ûëÁwÞÈFÇÆÿ¾q‘Ñqïoµ'€ÍEMEMnšîMÍ ;Ã5EE55™»8=Ã?ÿûï†qQñ_ï'ß}ðÎ2*:3ýõæûÂ^W#r¸À 5E%%ï˜rû‡'vî?ÿþÙ^ÄDDD¿9+îw„>ûÍá¾û•÷`iÎën÷ÿÿÿr¯¾ûï¾øgúð—ß|3ŠŒŒÿ|rPÎ22>7ýòÇÆÈFÀ¾†q±ñ±ð/Î>>>7ýð3ÿ{ ä#äcÿÞøgôÇFÇG½ÿßx&ûï¾ûï7“î.WøgþøÅÆÆÆÿ¾†qò±ßtl|t ßÿÿþûÉ÷ß}÷ßpJà†ûï}È\0†q±±ÑÐOpÎ66:6 òÇÇGGA=ÿÿÿ`ÀaÿÐŒëpsP¾Øp wµ¿ÿÿÿÿÿÿÿÿü e ÷±"„ˆh 8?ÿÿÿÿÿëoÿÿÿÿÿ†oÏp/°Ïÿþ ö¿ÀÀÿÁ>Ã8H8XX'¾ÃBÃÄA=ðÎ&*& ï âbbbà^¿ÿÿðÍéùõúö¾¿?¾À¾C88((HÐÎ ÷ á¡¡a _?ðÎ.2./ýçÿÿþ¿¾ÿ¾@¿ðOßðOç€ç€ˆg  øÃÃÄD@½†pÐÐðð/øgóÿÿýŒøfúúþÿøðI÷Ü&ûÀ´3‡‡††{ÿÿÿÿï Ïþñ÷Ã8XhH_÷ÐÎýõàÏxpÎ.&./ýîÄÅÄÅÁ=áœ\\lgûßü3‹‹ŒŒÿzÿÿ†(?@¾A=¼p°ŸïŽ&ó|3ˆˆ†‡|xxC8¨È˜¿÷φqqq‘Ÿï‹†qq‘±°/_†qQQQP/þð¿ÿÿÿÀ¾¸H }÷„8Mûáœll\oûãÀ3ˆ‹ŠŠ‚{ýËsÿÿÿ ßá Ÿÿß^}ðÎ"&#ýõÂo†qqqqﯟ†qqq±ïœ3{s'es»\3ÿzÿÿÃ8ø(§“?}äûïÃ8¨¸È¸×` ÷fì®_ÿÿî`!÷ß}÷ß}÷Þ =¼qñ±ñßï~ãN®ÿÿî gß}÷ßs¾ûÃ?ÿÿÃ8ØÈØØ¯ü3ƒƒƒƒzß ÿà à¿ßŸ}÷Ã8بØß÷×0Îo¾ÿÿÿÿýà!Óï¾û‡¾ð‡ß 㣣ã _=äòÿq\dòq“…¯þäO¾ûï¾ûï¾ûÀ@gþùîWÝÿ¼œïݧ$/þûï¾ûÂ_}÷ß}÷€Òsðÿº¹Åïs¿ÿ÷ß}Îûï¾òrÞAœlttwûëÀCÉéÎè¿Þ®[îWkÿß}÷ß}÷߸]àò|y§¹\îÊí»_¹‹áœlllkû×ÿs¾ûï¾ûÀëî;°JÈÈÈÉÿ¾¼=¿Ýûšq¯ÿ÷ܯ¾ûï¾û‚w;Á'ÇÃ8èèøï÷ÝïûŸv'ÿþá÷ß}÷›ï¾ý÷÷2s÷;±npwÿûÉ÷Þn}È%Á8gþúûï¾ûÀpg%%#%þ÷Þ?¸ï'¹ÿþûï¾ûï¸{ï¾ÇÆÉG¾¾ûÓÀÃÇxÿÜ.ãB÷]…ýÈ3ï¾ûïŸ}ÂIäð@û÷sWkÿîwßy¸E÷ß â¢â¢ß_x}÷ß äcäd ^÷‡î1;N1C9÷¯zÿûáœ4447ûóÉÂ/¸-}ÌŸ}á.Wß»[±]‰Ów}²¿îMåÿ÷0ÄÃÃÄÿ¿_}÷›ï†r’2ï® ßÃ5‰§dêû»÷h\OÞžž¿ÿx x }äûÉ÷ßxCï¾ÇÇHFÿ½†q±ñ‘ßïoïoÞ[Äòv_ÿþûï7ßxKï¾ûï¾ð^NwdôçÜîÉ÷Ü®ï_ü3„„„„‚z÷;ï¼ß¸kï¹\¯¾øg%!úñ;ºýÎá7ÿÿûï¾ûï¾ò|3Žÿ} âã#c?ß_}âxƒ8¸øÈÏ÷ÐÎB>:B÷ÿÿÿ¹ß}÷ß}÷›C‡r¾çÿÃ8ȨȨ¯ÿ÷Ã88X(8ÐÎ"ñ÷Þn}ðÎ:6.;ýõÃÜ®a.Wßÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ rÓ"„Œh 8¿ÿÿÿÿÿÿÿÿÿÿþ¾¿¿?A>Ã8((H'Øgÿ÷Ã8HXXX'¿ âb"b`^ÞÄDDD@½ÿÿá›ëÓãÔ ä3ÿÿÿ‚|†oïÐ?ð/¡Ÿü èg  þû à á! _?ÿÿÿá›ëëëìÞ¾÷†oÏßÿÿï›÷ûûô àg ÿþúÂ@Á¾†p000/¡œ, ûì3…†‰‰| á!!¡`^ÿÿÿÿû‚Î þ è3ÿ‚‚ÿ| ßà ``_C88H8ÐÎô3ƒƒ‡„} á!¡! _pÎ ïÿÿÿÿ ÿÞß¿à_7ï÷÷èÀÎ ð3ƒ‚……ÿ| à` à¿ßC88h?÷ÐÎ"ýô3†…‰‡} áaa¡`_C8ˆ˜xx¸gþöÄEDDÿ½Ã8¸¨È¿÷¿ÿÿÿÜC?ÿø((àÍþÿÿýð3„‡„ÿ} ááaaÿßC8X8xXÐÎð3ŠŠˆ‰| â!ââ _8hhhhÀÎ"*"óøgþõz4îÇGGG@½ÿ÷èg  úÂAÂÂ@¾p0Pp0/¡œ$L?ûègþúÃÂÄC¾†pÑÑ\\TWûëÀ ÄDEžC8ÈÈÈÏ÷°Î.../ýó†q‘‘±°/[Ó‡<3xÿ ⢢¢`^¸g ÷ý xgÿÿÿþúÂCABÿ¾pðÐðð/¡œ$$ñ?ïÁœ$<7ûèg  þøÅFCƾ†q0ñ‘_DDD?ûègþúÆÆGÇ¿¾†q1QQ?l|Tcûàg"þúûþé8Îî/÷w÷bÿá’Ð_ïœL\4Oûèg þøÂCÃBÿ¾†qQñOdLlcûègþúÆÇÅG?¾†qÑ’ïd\lSûàg!þúûáœ|”t‹ûì3Žÿ{¹§-Ì¿½>û²wwÿá’ ðð/Áœ,$ûèg þøÅÄFEÿ¾†pðñß\|:;ýô3ÿ{q–ç¾,§ýÆ®dæ¸gþõÿá¯ûá _þþÂÂDC¾pñp±dL\cûèg þúÄÆÃE¾†q±qÑÿLTdGûàgþúÇÆÈH¾†q‘±ñŸï¯(g#!þúÆÇGÇÿ¾C9))/÷ÀÎBFBBñÏsýÍ &záî?ÿðÎ"ýð3ŠŠˆŠÿ} áa"aÿ߀ gþúÄCÅE¾†qqÑ1Ÿï¡œ|dlwûàgþúÇGEF¾†rÒ2_ï¯+À ð¼áœ””|ûåáî¹§†ÞN4ãÿü2CÁA¾ùô3„‡„…~ â£"#?߀@gþúÇFÆG¾†q1±?d|žþæ!yþóy»ÿü2CBA¾ýô3†ˆ‡†ÿ~ âââcßC8xx¨Ÿ÷ÐÎ&6/ýô3ˆŒ} áâbb`_C8ɘï÷ÐÎ2*>3ýô3‹Š‹} ä"ã£ÿßC8¨ÈèÏ÷ÐÎ6B2;ýòÆGFÅÿ¾9÷œdý⹓™o_ÿአñ0°ßïÁœD4DGûðg  þøÅÆDÆÿ¾†pð±pßLl,OûègþúÃEDCÿ¾†qòqß\L|cûègþúÈGGÇ?¾q‘Ñ‘ïœt„dûØg!þúãXf¦¦¬¨«5Ý‹y<ž¿ÿáœ4$,$ ðg  þüÄÃÅÄÿ¾†pÑ0ð¿ï¡œddLoûèg þúÅGÃDÀ¾†qÑQñß7ýïøgõÿÿ áaaâ _^œLDÀ½Ñ„q,àªð±„q,àªð±ñòòŒ À{‰`§W…ŒÀ{‰`§W…pO”_àK8*¼,_àK8*¼,yy‚|¢ð0X)ÁUábð0X)ÁUácÃÄäÞ^ Ÿføøþÿû7×ç×èÙ¿@¿@Á>Îþ öïðp0O³ÿ‚‚‚|œÜá!!¡`žç ÷8HXXX'ÉÃCBÂÁ=Î îp°±ð/s…ˆ‡ˆ|œLDDLÜâ""b`^ç÷8ˆˆˆˆ©ÄÄÄDÀ½N"&&& êq/Sˆˆˆ‰zœDLLLÔâb"b ž§õ8xˆˆ˜'©ÄDDD@½ÎîpÐðÑOs†…ˆ‡‚{œ,,4$Üáaaa`žç ÷8H8XH'¹ÁÁAÁÁ=Î îÿð00Osÿ‚{Ÿÿü üÜÿߟßàžæüúüý÷7ÇÇçÈ'¹½½¾=Á=Íéééê îoO¯ï/“ÿ‚‚}›ûô ü äß¿ÿßà_g ÿû8X88hÙÁÁCB¾Î òp°°/“‡‡ˆˆ{œ$,, äáa¡a _'ù8˜x˜ˆ'¹ÃÄDDÁ=Î&"&& îq110Os‰‰‹‹‚{œDDTOûÌâbbbÞgõ8˜¨¸¸©ÄÄÅE@½N&*&* êq11qPOSˆˆ‰‰‚{œLLLTÜâ""¢ žç÷8xx˜ˆ'¹ÃÃÄDA=Î"îp°ÐÐÐOs……††‚{œ4,4,Üá áa žç÷8(8'¹ÀÀÁ@Á=Îþ îïð?ðOs~~ÿ~‚{›ëëûìÜß^ߟ`žæôôö÷÷#óããß _&úþÿÿþù8(?ø(ÉÀÿÂAÿ¾Íþýöp0°0P/³†……‡ÿ}œ,,D?ûìáaaa`_' ÷8ˆˆx˜¹ÃÃDD@½Î&"& îq11Os‰‰ˆŠ‚{œLLTTÜâ¢b¢ žçõ8¨˜¸¿÷™ÄÄÅEÿ½N*... æqqqqp/3ŠŠ‹‹‚yœLT\\Ì⢢âàžgõ8¨¨¸¸'¹ÅEDÄÁ=Î"&**îq111/s‡‰ˆˆ{œD¿¿A=Ííñíî î'§ÿ¾Á¾Nþ òoÏïïßï“‚„ÿ„}œ$$,4 ìá ¡¡ _g  û8ˆxXhÙÃÃDÄÀ¾Nîq0ÐÿïsŠ‹‡‰{œTD\T Üâb"¢`^çþ÷8¨¸¨¸¹ÄÅFF½Î...2êqQQ‘ŸïS‹‹Œÿzœddll Ôã##bàžgó8¸¸ÈÈ'™ÅÅÆFA=N**.* êq‘qQp/S‰‰‹‹zœ\T\\ Ôâ¢bâà^§÷8˜ˆ˜˜¹ÄDDÄÁ=Î"" îpðÑðOs††‡ˆ‚{œ4444Üá á¡ žç ÷8(8H8'¹Á?ÁÁ=Íýþþ îïïïðOs~‚{›ãÛëìÜà_àŸ _'þù8(HHÉÀÀÁÀÿ¾NýöpÐаÿﳆ…‰†ÿ}œ$,,4 ìâbaáà_g÷8xxˆ÷¹ÃDDD½Î.**/ýîqQ1qïs‰ŠŒ‹ÿ{œTd\gûÜãc## ^çþ÷8ØØØÈ©ÆÆÆÆ½N6667ýêq±qqŸïsŒŒŒzœldllÌâã#c ž§õ8È¸ÈØ™ÅÅÆF½N...3ýêqq‘‘p/S‹Š‹Š‚zœTTTTÔâ¢bb žç÷8ˆx˜˜'¹ÄDDDA=Î îpÐÐÐÐOs…„†…{œ$,Üà ` `žçÿ÷7÷ÿ÷ø'¹¿¿?¿Á=Íùùùú îG÷çÇÁÿ¾ÍþùþòpÐp¿ï“†„†‡ÿ}œ$4/ûìá!á! _gù8xh˜˜ÉÃCÃÃÀ¾N"&"&òqQ‘‘°/“Љ‹‹|œL\TWûäâãb£Þç÷8¸ÈÈÈ¹ÆÆÆFÿ½Î>>::êq±Ñ±ßïSŽŒy7!øY¯SÜ zX+F/—øä[ÁèÇFÆÆ¿=Î66:6êq±±±Ð/SŽŽŽŽzœllll Ìãccc ^§þõ8ȸÈÈ™ÅÆFF@½N.&.*êqQQQP/sŠˆŠ‰‚zœLLDLÔâ""b`ž§õ8hhxx'¹ÃÃCÂÀ½Î  îpPPpP/sƒƒ{œüü Üßÿßßà^æüüþý÷Óá_ `Ÿ§ û888(ÉÂDAÂÀ¾Î"'ýöpð±0¿ï³„……†ÿ}œL\Lgûìââ£c?ßgþù8¨¸¨¯÷ÉÆFÅÆ@¾N2&2'ýîq1‘1¿ïsŒŽÿzœ|ttwûÔãc£cÞçþõ8èèèï÷×qÐ^ñ÷¯*>¥ï{=,K>¤dTF¸éz÷Ïy/ñäU¢ÿc|‹‘ÇÇFƼ=öq±Ñ±ßï3yœ|||ûÄãc£cÞ'ó8èèèï÷™ÆEÆEÿ¼Î2223ýâq‘‘‘/3ŒŠŒŠÿ{œTTTL Ôâ¢b¢`žgó8ˆˆˆˆ©ÃÃCÃÀ½Î îp°°Os„ƒ„ƒÿ{œûÜà ` Þçÿÿÿÿ÷?÷ï÷è'¸ œýÿû8_øO÷éÂÂÃCÿ¾N  öpqP¿ï³Šˆˆ‹ÿ}œD<\Gûìá¢!¡¿ßgþû8ÈÈÈÏ÷ÙÅDÅDÿ¾N&.&/ýòq±±±¿ïs‹‹ÿ{œ\l\oûÔãc£cÞç÷8èØèØ’ñÏ…Ðül u=þöö©‘È©’ŸEl ¥Ÿ4TDDUÉøÑRŠŒÁ6Õм2e†qÎ!œ e8øøøÿ÷™ÇGÇÇÀ¼Î>>>?ýâqñññÿïyœt|t| ÄãcccÞgþñ8ȸȸ™ÅÄÅÄÿ½Î&&&&îq1110O3ˆˆ‰‰yœDDDGûÔâ!â"?Þç  ÷8XhXh¹ÂÁBÁ@½Î  ýîpPPP_ïsÿÿÿ{Ÿû÷ûô ÜpOφ}œ  ôá! `ÿß' þû8xX˜o÷ÙÃDBÂÿ¾Î.."+ýöqQ1q?ﳈˆˆˆÿ}œD\7ýîqÑѱ¿ïsŽŽÿzœ„|„‡ûÔ㣣ãÿÞ1ƒ4hOSÊ>§Ý£ãÃ9QQR’+×磱+¶õ`Ð>EéöŠø¸ä(»OÈHH<½îqñòð/Syœ||„| Ôããããà^§ñ8øøøÿ÷‰ÇGÇGÀ¼Î:2>7ýâq‘q±p/3‹‹‹‹zœ\T\T Üâbbb`^ç÷8˜˜ˆ˜©ÃÄCÄ@½ÎýîpÐÐðÿïs†„†…ÿ{œ$,$ Üà  à ^çÿÿþ÷7÷÷ÿÿ÷¹ÿÂA@ÿ¿N"#ýúpp0°ï“„ˆƒ…}œLDB>Cýêqñññÿïÿxœtt|t Ìããc£Þ'ó8¸È¸È'©ÅÅÅÅÀ½Î.*.*îqQQQP/s‰‰Š‰{œLDLOûÜááâ"?Þç þ÷8hXh_÷¹ÂAÂAA=Î îpP0P?ïsÿÿ{ŠÏÐOÿïÓ…†ƒÿ~œ<<:>BîqѲð/sŽzœ|||ûÔãä$dŸÞ§#!õ9'÷™ÈÈÉI½NFBJBêr2/3‘‘yœ|„ŒŒ Ìããäd`^g!!þó8øèøØ™ÇFÆÇÀ½N62>7ýêq‘‘±pOS‹‹‹Œzœ\T\\ Ôâââb`^§÷8˜˜ˆˆ¹ÄDDCÀ½ÎîpаÐÐ/S…„†„ÿzœ$ Ôà `à¿ÞæÿÿÿÿþùW×ÂÀ¾úppPð¿ïÓ…‡„„ÿ}œLD<\ ìá`ââ?ßg  þû8¸È˜¿÷ÙÆDÆF¾Î**+ýòqÑñQ¿ïsŽŽÿ{œ\\\Wûäãcâ£ß'þù8Øøøÿ÷ÉÇÇÈG½Î>B:GýîqñòR?ïSzœŒ”ŒûÔäd$¤ ^g#%%!þõ9)) (™ÉHÉI½NFBJGýêr220/S‘‘’‘ÿzœ„ŒŒûÄããä$?Þ'!ó8èèøï÷©ÇÇFÇÿ½N6.6-ýòqq‘qŸïs‹‹ŒzœLL\\Ôâbbâà^ç÷8˜x˜ˆ'¹ÄCDDA=Î"ýêpапïS„‚„„ÿzœûäààŸÿßd„„…tûôá¢a¢_ß§ þù8HhHXÙÅÆDƾÎ*:/ýöqQïï³ŒŽ‰ÿ}œdd|wûìâcbâÿß'!þù8ØÈøÿ÷ÉÆÆÇEÿ¾N6>.?ýîrñò/“{œtŒt„ Ô䤤$Þ§#!#%þõ,””t@?¾¹‘’ÿ‚BÃÏ'ŸÏÎJBJKýêrRRP/S’’’’yœ”””” Ôä$d¤`^§%%##ó9 )('™ÈHÈG@¼ÈHFÿÀ ~>î>#Ïàh9äô¾xø!ãÓ(uˆp u¡ñJ˜æ* #DJ$\[õ¨ÇcÏóŒŒzœ\\\\ Ôâã"b`^ç÷8˜ˆ¨Ÿ÷¹ÄDDÃÿ½N"îpаа/S„ƒ†„zœ äàŸà` _d…ƒƒ|7ûôàá`àÿßgþù8˜h¸Ÿ÷ÙÂÄÃÂÿ¾Î26"7ýöqQQ±Ÿï³‰Š‰‰}œ||dgûìãcd$ß'þû8ùØï÷ÙÇÆÇȾÎ6:B;ýòqÑñÑßï“‘ÿzœ„„Œ{ûÄä$$#_^ÝÉCÀÉ×ÀÐ,@Éæ:†mü "´ó“Zàe,}Âiçáù´È2óluÑ¡”å$¤dŸ'%%%&úõ9))9/÷©ÉIII¼ÎNJJKýêr2ï3’’’‘zw!ÿïvTJP2x= ^‘ÀÐ(JNiŽ“šbZZZüÌÒRÒÒ—¦¦˜’˜˜µ6á;îwÿ%·—½‰ñÁ’8ظ¸·‡½N.*.3ýêq11qoïSЋЉ{œLDLL Ôâaâ!ÿÞ§þõ8xhx_÷©ÃBCB½N  ýòpPPP_ï‘@†qpßïÓ‡…Šˆÿ}œ,D,+ûäâ¢â"¿ßgþû8x¨˜w÷ÙÆFÄF?¾Î6.:5ýöq1QQOﳋŒ|œ„t„‹ûìãc££ßg!þû9ù ÷ÙÇFÈǾN>N>?ýðÌŒ„t‡Ü| #ä{h/*>¿à TòS„tiôi鉉l'¦¦˜˜˜˜µ8õš‹ùµ¥f¤ÄÅS‘’’’ÿ{œ”””“ûÔ䤤¤¿Þ§%##%þõ9÷™ÈÈGÇ@½6<⨜Rƒ³¢«Î¥Ÿ^­i翃@øÕ m³5ñиÓñî5ðgš<AøÝ {‘v˜3Ε'ϤÂÏžbð¸@Î2¹•%1%kÿ<Â~Póeï€\=|ßÕ_ 8¸¸È·ç©ÅÆFEÿ½N.**+ýêqQ1QP/s‰‰‰‰zœLSÑÒ/ïi üÿÏÅÆ¼Ÿœl\lkëìãc#c?Þgþõ8¸¨¸¯÷©ÅEEE½N***+ýêq0ñ0ÿïS‡‡‡‡ÿzœ4,ñ/󃄄„ÿ}œ<\4Gûäââ"¢ßß'  þû8˜Ø˜Ï÷ÙÆÆFÆÿ¾Î&"2%ýöq‘ñŸï³Œÿ}œ\\\_ûìãd#$?ßg#%!þù8¸èè÷÷¢ñî%Á”{Iq§Ø›QP>Åðh ©}{lYæŒß¸:ÇH8€L8‹>È $‹@4®àù¦§&§.Lʘœ˜¤õ©¶¿åæä¢U›’m àƒ)ÉIIIA=NJJJIñêrRRR_ïS’’’‘z–BFNT;úÕ¨¸2LSrc_+÷·Nb/4œÄ^iiòŽG!!! ê¾ÎB>B?ýêqñññÿïS~zœ|l|lÔãccc_Þ§þõ8¸È¸Ï÷©ÅEEE@½N***+ýêq1?ïSˆ‡ˆ‡ÿzœ<<>>Cýöq±±Ñ¿ï³ŽŽÿ}œŒt”‡ûäqЧäcŸßg'"üý9)/÷cr %Æ£¬¨×ü@fÍ5559qÓO.œ°¬Òs8ýêòîbŽ|”„“°füéÉIII½NJJJMýêrRRR_ïS’‘’’ÿy/$à>t{84¯Ð/fœžœžÈL<9m\8žž¯2çQ‘rVQ盃?÷N:B>CýârññïïSŽŽ~zœllloûÔãc#cÞ§þõ8¸¸È¸©ÄÄÄÄÀ½N&*&*æq11ïS‰‡‰‡ÿzœ<<{ìÙ§¦§§²:]óOQPPYœp¥\åð OPzýt™÷Qg£Ù¾P”2pˆHôqÑò1ï§žgï8ØØØß÷©ÆÆFF@½N22..êqqqQP/S‰‰ŠŠyœTTTLÌâbbbÞ§þõ8xxx÷©ÃÃCþNýòpPPp_ﳂÿ‚‚}Šñ0Q?ïÓ„„‡‡ÿ}œ,L7ûôã¢â£ßgþû8˜Øˆ÷ÙÇÇFÇÿ¾Î"*2'ýòq±Ñ1_ﳎÿ}œddt_ûìãä##ÿßg!#!þû8Èøøß÷ÉÇÈFÈÿ¾NF>JEõòqòð/Í[ÇÎPb.4¤ÞI†sNNPPYl©MEüÚê³QìaœPdŽJJFIñïS’’’’ÿzœ””œ—ûÔä¤$¤¿Þ§!!%%þôG#ª’‘~ÿ{UW'8—Zƒl|•tÔT§fžœ ž±6Fž¯C$ôõ©sî> $]‡“ØþLÔ2‹dŽŒ…¾=í]ÿ8ÈèÈè‰ÆFFÆ?½Î2../ýêqqqqïSŠŠ‰ŠzœTLDOûÔâ"b!ÿÞ§þõ8xxxo÷©Ã½NýêppPP?ïs‚ÿÿÿ{¬; ¡Ýÿþý8˜˜x§÷éÃÃEDÿ¿N*ýöq±Ñ‘Ïﳈ†‹‰ÿ}œT|DOûìãâãc¿ßgþû8ù¨ß÷ÙÈGHÇÿ¾Î226/ýöqòrﳑŽÿ|œlŒtûÜä¤#äžï! Ê@—CüüþÕYQ¥D÷(´Rïš‚‚‚’¼ÛVhä |’i¸pÊr2R2ï3’’‘”ÿzœ””¤” Ô䤤¤¿Þ§%#%#ó9))/÷¢9å@!õyÊ’ƒ¿ |W”ûL ä@"j )ëSSONPPVœšzzrrÔ³…Ëãð_ “š‹ÜÉ]Ž262-åïsŒ‹‹ÿ|œ\\\_ûÔâââbÞ§õ8ˆˆ˜÷©ÄÃÄÃÿ½NýêpðÐÐßïS†„†ƒÿzœ$ Ôàà`à¿Þçÿÿþ÷$ 4 âßg  þý8˜˜h¯÷ÙÄCÅÅ?¾Î".ýöq±‘QÿﳊˆŽŠÿ}œLlà¨Ü`g\È¢ ¦}EˆeOM=9A=^dºjê³IÊÿ4­*æq‘QqŽ!Ÿû§õ8¸¸¸¸©ÄÅEE@½N****êq10ÿïSˆ‡‡‡ÿzœ<<=ýîrRR2?ïS‘‘‘zœŒ„|‡ûäãâãä?ß;* ÕÆ4nΊz5%×K—O]Vi9ʼn'3‹Ž‹w ÿÝ8ØÈÈÈ©ÅÅÅEÿ½N***+ýêqQQQ_ïS‰‡ˆˆÿzœ4<B.?ýòqñ±ñßÿ|œ„||” ëWÐhGÎNo £ƒ9¨)(),ηRríMø~myò!’9 €ÍêrRR0/3‘”’ÿ{7#z Lþ§Ïóîäãd>Ý@)Š*<æ'Ü7ø •¹IôÆÓÑQèä$d$^õ9 '©ÈHHH¾NBBB=ýð¼{4±î@Ðÿÿ½’ŠŠƒ¦]¨¹—½oôô8fÀø°ÉddT[ëÞ§þ÷8˜¨˜¯÷©ÅEÅE½N**&+ýêq111/S‡‡‡‡zœ<4<4 Ôá¡!¡?Þ§ þõ8H8H?÷©Á@Á@À½Ïÿÿÿþî('ÄÁľÎ#ýúpñPÐïﳋ‰ŠŒÿ}œ•ZJJ§ÔÏJÍUUMMr`º›¡{”ÙKÜ·&äIøçȺos‘‚xœ||„ûÔãä#ä ^ÝÆ²9ýS•úèjöTå%•ašë¥O1;« âãbœ~øéÅÅÅF¼Î2*2+ýêq1Q1P/sŠŠŠ‰ÿ{œLLLLÔâ""" ^§ þõ8xhxo÷©ÃBÃBÿ½Nýîpppïs‚‚z›ûûûüÔQ…†ƒÿ~œLLDOûôáá¢b_ßgþû8Ș¨Ï÷ÙÃÃÄÄ@¾Î2:&.öq‘q±Ÿï³‰Œ‰‰ÿ}œ|||{ûìãb£bÿßg!þû9é ÷ÉÅÇÆÆ¾NJF:Kýð¼|£rEÆßÿÞÍQU=I˜¥_5%555Y‚5~> ¢³-ÙüG˜ "±åvPŒ>ƒ`€¦¬¿@-ôƒÖ-<ê¬ß~qïj?y«Yu>¤è *“<§ä+¦¦¦¦¦µ3šÃÔÕ¥ÝA+ñéU~? ó8g 8ØøÙçÒXøù(Øï÷ãîã ¼=x–`dòÇØl‡”•~mQÒÛ1|3…¯ˆ´üs]|#§üó8ØÈÈÈ™ÆEÆEÀ¼Î****îq1?ïsˆˆˆˆ‚zœ<<<<Ôá¡¡¡¿Þ§ þõ8XHXO÷©ÂAÂÁÀ½Î  îpP0P0OS‚zœ, ?ûôáb!a?ß§ þù8ˆh¸÷ÙÃECCÿ¾Î2**7ýöpñ1Qﳌ‰‹ÿ}œd\lgûìâââb_ßg þû8¨¸È·÷ÉÇGEǾN>2B?ýòqQñ‘¿ï…ä Žw€òìÓ”TSØ)gÍQYEQZbjj jjóNÔV¹~yóà¸~@óFúq5ò2Ž? àNJ>F9ùñÄsÖÔ¨3x ¡Ã4jŠjê«.–šššš¢´Ó£ñõUU³ÒgÚ8Aô "¢›(FŸPî #,¥5sí íQbÓÌ”ÿê³ì§#4pøÅ>*5ΆpqÓŽŒŽ}{œldloûÔã##bà^çõ8¨¨¨¨©ÄÄÄÄÁ=N&&"& êpÐðððOS††††zœ444, Ôá¡!a ^§ ÷8(8(('¹Á@ÁÁA=Îþ îppÐа/ÓŠ‡Š‰ÿ~œ,<<7ûìâã!â¿ßg þû8hÈh÷ÙÆÄÆFÀ¾Î""2ýöq±±q¿ï³‹‰‹}œ\tL_ûìã£cdß'þù8é¹÷ÉÇÆÈFÿ¾—Œ{¨Ø‡?¿½‘Q=ƒÁš£7Ÿ'\åAMTû5µúùCÏY>ßð ÿ  ö  ‰„(zÈÉH<~œ„Œ|‡ûÜädd¤ _#‘‡õ=%!üöŸjçã#ß 4ŽP3‰®r¨¨Ù |bƒõ”e@!Ê¢£04Ž Ð~/€L;TY—ðh?aÀ%c€!£M·úq²   y 0üt|{á÷¹ÇFÇFÿ¼Î6667ýêq±‘±p/SŒ‹‹‹ÿzœ\\TWûÔâ⢢ ^§õ8ˆˆxx'©ÃCCCA=N êpааOS…„„„‚zœ$$$Üà    žç÷?ÿ÷÷ø'¹ÂÂÁÃÀ¿N&ýöqñQ?ï“…‡†…ÿ}œ\dDoûìâaââ?ßg þû8ø¨èÿ÷ÙÄEÅľÎ>:.6öqq‘Ñï³ŒŽŠŒ|œtdtt äâãbâ`_'!û8èÉï÷ÆÓçžÁ üŽŽ{ÿ<… ì\„{ÉÿùÇGÆÆ¿½NBB>Bòrñð/“‘|œ”|„‡ûÔã¤c¤Þ£‘?# ü÷8Èøø÷ÇÉÈGGÇ?¼Î>6>:ÞqÑññð/ÿzœlldoûÔãbã# ^§õ8¨¨¨¨©ÄÄÄÄÀ½N&&"& êqðÐÐOS†††…‚zœ44,, Ôá¡!!?Þ§ õ8H((('¹Á@Á@Á=Î êoïïïðOSƒ‡„ƒ~œ4,DGûìá¢aáÿßgþû8HxhO÷ÙÅEÃÆ¾Î&"*"öqqÑ0/³ŽŠŽ}œD\\D ì㣣$ßgþû8Èè¸ï÷ÙÈFHG¾N.:.3ýòrÒ?ï“ŽŽŒÿ}œ|„d| ìãcd$ _'þù8øøé÷ÉÇÇÇǽÎBB6?ýîq±Ññ¿ïSŽzœ|||t Ôãã㣿ާþõ8øøØß÷©ÇÆÆÆ½N222/ýîq‘qqŸïs‹ŠŠŠ‚{œTTTTÔâb¢b`žgó8hxxx'¹ÃBÃBÁ=ÎêpïSƒƒƒ‚zœ Üà ```žçþþÿõ7÷÷÷ø'©ÂAÀ¿N""öpðÑÿ‰……}œT4LWûìá"a¡ßgþû8ˆX¨÷ÙÅÆÃÅÀ¾Î6.>3ýöq1ÐñﳌŒŽÿ|œD\lgûäãc¢ã`_'þû8Èø¸Ï÷ÉÇFGÇÿ¾Î.:67ýörò0/sŽ{œt„lûÜã£d#ÿÞç!÷9Øøÿ÷©ÆÇGG½NB>:;ýêq±±ÑßïSzœtldd Ôãc#"à^§÷8¸¸¨¸¹ÅEEDÁ=N*&&" îq11OSˆˆ‡‡‚yœ<4<4Üá¡¡a`žç õ8XH88©ÁÁAÁA=N  îÿð?ðOsÿ‚{›ûûóôÜàa a?ßg û8XˆHhùÃÃDÃÿ¾Î&ýöq0ñQﳄ‰†‡ÿ}œ\TD\ ìâ""¡à_gþû8¸ˆè¿÷ÙÅÆDDÀ¾Î:6:6öqQQQ/³Ž‹Žÿ|œTLlWûäã#â£`^ç÷8Èø¸Ï÷ÉÇÇÇȾN:6:7ýòrñÿïs‚|œ|tt|Ôãã£ã ž§õ8øøèè'©ÆÆÆÆA=N2.22 êq‘qqPOs‹‹ŠŠ‚{œ\TLTÜâ¢b¢ ž§õ8xˆxˆ'©ÃÃÃCA=N îp°°Os„„„ƒ‚{œÔà   `ž§ÿõ8ÿ÷ø'©¿ÿ¿ÿÀ½Mùùùúë0 ÀD‰ ¦Z i¿™A€‰AL µ@Ó¿f ¡$À«T 7óH0BH)V¨oèìÂB3%‚˜j¦þe$K0*ÕMýý˜x†€`"„S­P4ßÍ@ÀE ¦Z i¿ _³ Ô P’ `Uª›ù ‘$À«T 7ô îaâYA€‰ÁL µ@Ó4$‚˜j¦þ}ÌT;`0BH)V¨oæÀ`"„S­P4ßÐ/¹†Šh(I0*ÕMüÒ P’ `Uª›ú÷1qM@ÀE ¦Z i¿›A€ŠAL µ@Ó@¾æ%¬¡$À«T 7ó@0BH)V¨oèÜÆG5$‚˜j¦þo(I0*ÕMýû˜¨và`"„S­P4ßÍ@ÀE ¦Z i¿ _sÔ P’ `Uª›ù°¡$À«T 7ô îc"[Á€ŠAL µ@Ó6ƒ$‚˜j¦þ}ÌTcH0BH)V¨oæ°`"„S­P4ßÐ/¹Œl(I0*ÕMüØ P’ `Uª›ú÷11`ÀE ¦Z i¿›€ŠAL µ@Ó@¾f>=¼¡$À«T 7óx0BH)V¨oèÌÅŶ$‚˜j¦þl(I0*ÕMýù˜ÈöÐ`"„S­P4ßÍàÀE ¦Z i¿ _sÞ P’ `Uª›ù¸¡$À«T 7ô îc£Û€ŠAL µ@Ó7ƒ$‚˜j¦þ|Ì|cx0BH)V¨oæÀ`"„S­P4ßÐ/™‹Žm(I0*ÕMüÜ P’ `Uª›úï1ñ®ÀE ¦Z i¿›€ŠAL µ@Ó@½æ.1´¡$À«T 7ó`0BH)V¨oè¼ÆF7$‚˜j¦þm(I0*ÕMý÷˜È¶Ð`"„S­P4ßÍ€ÀE ¦Z i¿ ^óÚ P’ `Uª›ù¸¡$À«T 7ô Þbâ›A€ŠAL µ@Ó5ƒ$‚˜j¦þ{ÌTCX0BH)V¨oæ `"„S­P4ßÐ/yˆˆj(I0*ÕMüÔ P’ `Uª›úï1í@ÀE ¦Z i¿šA€ŠAL µ@Ó@½æ"¨¡$À«T 7óH0BH)V¨oè¼ÃC4ƒ$‚˜j¦þh(I0*ÕMý÷˜hf`"„S­P4ßÍ ÀE ¦Z i¿ ^ó Î H’ `Uª›ùœ¡$À«T 7ô Þ`à™€‰AL µ@Ó2ƒ$‚˜j¦þ{Ì00"H)V¨oæ``"DS­P4ßÐ/y‚e$K0*ü-e$K0*ü-{Ì (0"X)Wák 0"X)Wál Þ`_ÙA€‰ÁL ¿ Y€‰ÁL ¿ `^òþþÆ H’ `UøZÆ H– `Uø[÷—çæ0`"D°S¯ÂÖ0`"D°S¯Âؼ¿>±%‚˜~°ƒ%‚˜~À½Ì@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿÀ4È  "„”h :?ÿÿÿÿÿÿÿÿÿÿðÍíõùò ô3ÿ}ÿ}áœ$ 'ûï á¡¡a žøg÷Ã8˜˜¸¨¿ÿÿÿ ß_ßà_C8'ø(ÀÎ ô3ƒ} ßààà_C8XX8o÷ÐÎ"òÂÃBB@½†pðñ0/Ÿ†qqqqpOÿÿÿ ß_ßß _8(OøO÷ÐÎýô3„…„} àá¡!?ßC8ˆxHo÷ÐÎ&&ð3„…‡†{†qQpñ0/†qqq±¿ï!œ\\loû×ÿÿü3ÿ}ÿ|†p00пïŸü  èg úÃCAÃ@¾†pð±Ð/¡œ$,,4 ègøÅDÅE@½†pÐÑï ãc##?Þáœlldgû×ÿÿþ¿¿¿A@½†oÐ/ïÿïœ$4$ àg þøÁABÁÿ¾Ã8ˆxh÷ÐÎ&&ô3†‡‡‡} âbb"`^Ã8¸¸¸Ï÷°Î&".+ýîÅÆÅFÿ½ðÎ>>6;ýëÿÿÿ†o°¯ðÿᜠ$$ àgþøÂCÁ¾†qÐÑ?4$L, èg øÄÅÄÅÀ¾qQQ±p/Î*.**ð3Œ‹|áœ|ttt ߺN5ÿÿýàððx<g€#À ðq±‘‘ŸïÎ&.&.ð3ŒŒÿ{ ã##"ÿÞÃ8¸ØÈÏ÷¯q7IÙ8ÇÿðÎëý÷ÞŸ}÷ÞÃ8ˆxˆ÷×€ gþù âã"ã?ÞÃ8èøøÿ÷°Î:6>7ýë ããä$ ^^'î;’ÿü3†‡‡†ÿ{þøg üûï¾ûï¾ðxC8Èè¸ØϸÝârþÇFGF@¼†q‘‘‘¿ïÿ¼8Hgø?÷çß}÷ß}÷ßx<Øg!þõ¸vä¿ÿÿÞ'ß}÷ß}÷ß}ü3Ž‘{ÿÿÃ8¸¸¸¸¯ûï¾ûï7ßr¾ûï¿Ã9))÷¯ÿøgþôÄÄÄÄÀ½¾ûï¾ûï¾ûï¾ü3’‘{ ããä$ ^ƒ9 ÷«¤ñ»±;ŒN…†q11qï_Ã?ÿøø×ß}÷ß}÷ß}÷ßxn1:¹“²þôû–¤$¤¤®N;ÅÅÅÅ¿½ ÿÿÿÿÿ߯'ß}÷ß}÷ß}ðÎF>FGýòâne½þé;'Ý݉÷#ÿï¾å}÷ß}æûï¿t]'C4´´Äũ׬3’’’’ÿzÝŠäq·¯†q1ï_¾ð—ÞûîWßxKï¼%àø±“ݱfg.»NGÿÿ¾ûï¾ûï¾ó}ûÀCšq ÎFFBAýåÚþíÜÛµÿþó}÷ß}ÊûþûïOO†rRr/ï—¿îÔ3MONNZœv ÿû?y¾å}÷›ï¾þÈÈÈÈ¿½nß݉ÍnÄãN…ÿ÷„>ûï¾ûÍ÷Þ÷ßx\Äí^ÿsOv.ÄÄÅÅÿ½ß}÷ßy¾ûï¾ûï½<nï݉Ɯ-ݯÿ¾ûï¾ûï¾ûï¾ûïÿ¼]ÇpÊíøgþõþûï¾ûï¾ûÍ÷ß}û¶§('¨,ÎÅç·b}ßÝî—ÿܯ¾ûï¾ðBò}÷ß}ûÕØP ääääž^øé:OAš’’’š¼Û±{±>ëÿðÎýù÷ß}÷ß}÷Ü&ûï»0©(¨§²SbtNiÝÞã»Wb}ÈÞ_ü3‚‚‚‚{Ü }÷ß}÷ß}÷ß}Ú¸'q§iÚºãºnÓŸÿû„_}÷ß}÷ß}÷ß}Ýà É>åÞ'iäûŒ7Kÿý÷ß}÷ß}÷ß}÷ßx tßýØ¿ÿÿ}÷ß}÷ß âc¢bß_}ðÎ:*>7ýñà(3‘Žÿ{†qòò0/žÈÇÈȽÿþð0ðM÷ßy¾ûÈ3Œ‰Œÿ}}÷›ÉÂoœl\|oûÛ <  ãccc`^¿ÿ÷ß}áÞ ¼ß}÷“Í÷7›îo ÇFGF¾<ÿÿÿÿÿÿÿÿÿÿÿÿÿð ¨7"„˜h ;?ÿÿÿÿÿÿÿÿÿÿÿ†ð0?ï¼3‚‚……‚{áœ,4<4 ß â""" ^áœT\T\ ×ðÎïÿÿ ÿà_à_a›ÿÿÿü ì3„„ƒ…}†pPPpp/Î""ì3„„††|ÿÿÿÿðÏþ þ òÀÿÁÀÿ¾†p000/°Î"ýô3„…†…|Ã8xhˆˆ¿ÿÿÿþ¿?ÿ¿ÿ¾C8HHXxÐÎô3‚†ƒƒ}Ã8HXxh¿ÿÿÿþÿ¾¿¾@½áœ ü$ûç á!aa _pÎ"#ýì3†‰ˆˆÿ{ÿÿÿÿÃ7ÿÿ÷øÈg þúÁÁÄC¾†pðp°/¡œDDûï¾ûï¾ûÀ¸gþøì;ï¼ÿ¼NÄãÜîÿþð‡ßpJûï¾å}÷ß}é÷ï¿î2÷W+¿ÿ†Hˆ'Áÿ¿¾ûï¾ûï¾û»ÏÜiÚ÷}çÿ÷ß}÷ß}÷ß}÷ÞC8ÙØè·î7÷qûï¿ÿ÷„>ûï¾ûï¾ûï¾ûšyÞ' Ww»»'Šç}ÿÿï¾ûï¾ûï¾ûï¾ûû´äîžW;îÓïÿÿ¾ûï¾å}÷ß}÷ßp÷`Ïnýé÷-ѹÿî/¾ûï¾ûï¾ûï¿yÿÿþûï¾ûï¾ûï¾ûÀ3Ž‹ÿ{ü3ŽŽŽÿzÿÿþûï¾ûï¾ûï¾ûáœtdt‡ûÜ3‘{ÿÿÿ÷ß}÷ß}÷ß}÷ßx ÿÿÿÿÿÿÿÿÿÿÿÿÿÿü³ ÏX"„œh Kýó÷oÿ¹ÝÿþÂÃÃB¾8¾ûï¾à^àgû½Úÿÿÿ÷wß}÷ßýßtݯîîÿÿß}÷ß}÷þï¼»×÷ÿÿß}÷ß|3Žÿ}p3ûßwÿv¿ÿ÷ß}÷ß}÷»÷Içÿÿ†pp°°ﯾûï¾ûî¿ÿÿÿþûï¾ûï¿ÿÿÿÿûï¾ûïÿÿÿÿÿ}÷ß}÷ÿÿÿÿÿß~àoÿÿÿÿÿÿÿÿÿþÚ fy"„ h ;¿ÿÿÿÿÿÿÿÿÿÿÿ†pppp¿ï¼3††ˆˆÿ{Ã8x˜x˜'°Î&&*ïÿÿÿü3|||ÿ}ÿ áâ!â`_?ÿÿÿü3}ÿ~|†pPÿï¿ÿÿÿÿÿðÎ"&**ïÿÿÿÿðÎýóðÎ.*.3ýïÿÿÿÿðÎ#ý÷†q1qp/Ÿþõÿÿÿ áa!áÿß0Î*&&3ý÷†qq1±ŸïŸýÎñÿ áa!a žÿáœ<åtÞ'·]Òÿï¾ûï¾ðpÎ6.>5ýô3‰ŠŠŠ}†rÒ/\lloûï¼…ï܃þñ=¿u“¯þå}÷ß}ðÎ2:&1ýô3‘ÿ} ââ£bÿßC8ÙÈï÷Øg!þûrr¾ÿÿûï7ß}ÀåðÎ&&2%ýô3Šÿ} äc¤$?ßC8¸¸Ø¿÷Þûþå÷IÒºÿÿ¸Eæûï¾øg!þúÄÅFE¾†q²q¿ï¡œ|||‡ûègþûᜤ””“ûã–åܯ_ÿûï¾ûîPÎ"6#ýô3‹ˆŒÿ| ããcäßC8¸¨Ø¿÷ÐÎ:>*7ýõàÆÇGF¾û¯ýíÿÿý÷ß}÷Ã8øØØÿ÷ÐÎ*":'ýð3Œˆ‹ÿ} ä#£äßC8¨¨ø¿÷×€OÜ•Ëû¯ÿþûï¾ûáœLlDOûègþúÅDÇÆ¾†qrQŸï¡œŒ„„—ûëÀ%àð ãcãã¿Þî+÷/î×½ºÿûï¾ûï†qq1ñ_Ll;ýô3‡ŒŠ‹} ãã£dß_}÷î[ÄöÿÞŸs¹ÿÞ·ß|3ŽŒ‹Ž} âb#"?ßC8Øø˜Ï÷ÐÎ6.>9ýô3‹‹‰ÿ}}÷ß¼Ÿq7ýäûîwÿÿïpÎ."&/ýñ÷ß áã!¢ßC8èÈèï÷ÐÎ"**'ýô3ŽŽŠ} ãbc¢ÿß\¾û÷ß ã££cÞ¿ÿÿýàûáœ\d<_ûègúÅGCÄ@¾†q±Q‘Ð/¡œD\\D ègþúÅÄÆEÿ¾<ß}à ÆÇGFÿ½þÆÇHFÿ½ÿÿ}÷Ã8Xxh_÷ÐÎ26"3ýô3‰…‹‡ÿ} â#!"`_C8Ø©ß÷ÐÎ"2"ýô3ŽŽŒÿ|}÷ß ã£#ãÿÞᜄ„|Œ ßÿÿÿ¾ûáœTûî@%È8gþöå¾ÿ ãä#ä?Þ¿øg!#!ñÿýÀh&ûÀíæûï¼;ï¾ó~ÇGÈGÿ½÷iɹ{‰ûï¾ûï¾ûï¾ûᜌ„Œûæêò‹&ÿ†rR2R_ïO¤,ÓÞ÷/ÿpÃ88XXO÷çß}÷ß}÷ß}à ÉIHÉ@½<Ÿ~äÿ}ÈÞONWßÿî˘wß}÷¾ûï¾ûëv9Ê/{ˆ÷/ܯ¼»ÿþûî ß}÷ß}÷ß}÷ »nÓ’Ý/tŸ}ÿÿõóï}ðÎ6*23ýõ÷ß}÷ß}÷Ã8ùé÷ÀÎNBJEùô3‘‘ÿ|Ý/÷/ðÎ....ëýŒðgþúà°}÷ß}÷ß}÷ûÂ.@ÿuï?†q‘q‘/_÷W›Â_}÷ß}÷ß~ÈÇÈȾo x¿v>ëÿøb‚|L,7ûûÂ_}÷ß}÷ß|3’’ÿ}î®·¯Ý}Õ×ÿÞ¯¾ûï¾ûï¾ûÀ%à ðº;Ýý×ÿÞ÷ß}÷ß}÷ß}÷Þn…uu÷%î·!:ðÎ***+ýëý÷ß}÷ß}Îûï¾ûïnf¤ ¤¤±4í€ÎJNFIéï7IéÊõûÿÿc>áß}÷ß}÷ß~ýÖëtœîår÷+ïÿýË}÷ß}÷ß}÷ߺÃ4õy€ÍQ]IQf]į¿ºÜ¯¾ÿÿï·ß}÷Üï¹ß}÷ßx\P¨)©)°:`3RRTSWš¼Šä¾ûÿÿï¾ûï¾ûï¾ûï¿r¹]_î· ÿÿ÷ß}÷ß}÷ß}÷ß âããcÞÿÿÿþðûï¾û„ß}÷ß}÷ðÎF>>>ì3ŒŽ|ðÎ>B:?ýëÿÿïo }÷;ï¾ûï¾ûï¼Þ¿ÿÿþûï¾ûï¾ûï¾ûï¾ü3Ž’ÿ| ãcc£ß?ÿÿÿûpwÿÿÿÿÿÿÿÿÿðL  ÿ"„°h ;¿ÿÿÿÿÿÿÿÿÿÿü3ÿ‚|ü3‡‡…†{áœDLB2CýòÆÆÇF@¾ÿÿÿáœd\Twûëï†qñѱïï¿ýåýÒû×ÿû÷€ÎB>:=ý÷ï7^ñ~òzïPÎ:666ëÿo?ï÷÷€~ðÿÿ½}åÿÿ}Ï÷Ã98ù/÷·Gzuººut¿ ââââÿÞ¿÷°Î ýûáœ<\TGûïx x/î[Ó‹î¿ÿøgûÞ÷>ûøg%#%$þùxk¯û—ÿýÐt ½¾ð?÷7þäw#ÿÿÿºwßýéü3‘‘‘ÿ{Ý Í99=9bm×÷_¯rÿþûÿ¾ûÁ<3’“’{tÿÿºÿû‰ÿß}þñiÊ Éêó_ý×ÿûÀÿý÷ßï ÷¯î_ÿïÿ÷ß~ÆÇÆFÿ¾\»ÕËðÎFFFCýêôõÿðÎ íØxÿ}÷ÿ¹_r-Ò÷¯ÿÿ÷ß}ànëÝ~©))©+Mn¯/ÿÿ†pñÐ/»°6ûïO÷¯û¯ÿÿ àááa?ß=à=éêûï¼ðÎFB>Gýïáœ||t| ×ÿÿ†pPPûï¾ûï¼ü3‘‘‘ÿ{ÿÿÿþý÷ï¿Ã8èÈèØ¿ÿÿÿýØz}÷ßxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ O "„´h ;¿ÿÿÿÿÿÿÿÿÿÿøgþýÿþûøg ÷Ã8xˆhˆ'¾ÅDÄÄÀ½ÿÿÿþÀÁ?Á@¾C7÷ø?øØg  þûÃ8ˆˆˆ˜Èg  ùÿÿÿÿü3†ˆ…ˆÿ}ÿÿÿÿü3‚„~ƒ|†ð0_ð/°Îô3„‚‡„}†q10Ðð/Î"#ýïÿÿÿÿ ÿߟà_aœ,< $ àg  þøððÄÄDE¾ðÎ***/ýï ãc"ã¿ß?ÿÿÿ¸€[À]оûÀHgøÄÄFEÀ¾÷‰Éÿÿ¼C8HHx÷Çß ââ¢"¿ß^^C8ÈȘ¿÷ßûŠèÿÿï/¾ûïÞ ¼¯<3ŠŠŒŒÿ|ÿÝ/ÿÿï¾û•÷ß}ïÿtœËÿÿûÀ»ï¾ûï¾ûï<3Žÿ|þëÿÿþôûï¾ûÁ'Çß{xøg!!!!÷ÿÿÿ÷ß}ûïß}ëÃ8èèèï÷¿ÿÿÿt ¾ûï¿ áâ"¡ÿß^_}þÈÈII½÷bt_ï'dé]ÿûÁ7ß}÷Þo¾ûï!œ||„ûçtO¾òýäåsºïÿ}÷ß~ðûï¾û÷€›Éýàßr¹ß~ôôåÿìo}÷ß~ûï¾þâ¼O¿¹~é<œ¿ÿï¾ûï¿}÷;ï¼Ü“ïMû¯ºN÷ÿÿß}÷ß}÷ß}÷ßx†qñññïï·[Å÷ï¿ÿþûï¾ûï¾ûï¾ûÇÞýÒîÿÿß}÷ß}÷›ï¿~ÇHGFÿ¾nÒÿÿÿ¾ûî}÷ß}ü3Œÿ}î®¡šŠ‚Š‚¼Øµÿÿý÷ß}÷ß}÷ÞÞaœ\ttoûæ?x Ô”—3rÿ÷+¯ÿ¾ý÷ß}÷ß{~ÈÆÈG¾†q²Ñßï·#ºýÒñé?ÿûï¾ûî}÷ß}ðÎ.6:7ýó ã£ã£¿ß+—yKýñÕ×tžŸ~êåïB÷ÿþð6ûï¾ûáœttTûëï¾àbð÷PÍMQEMZnôûýÖòz½×ÿ÷&ûï¾ûáœñà ÈGGÇÿ½Þ¿ÿðÎ&&&& ëþûï¾ûî{ï†qÑ‘ÑÿïœTTdWûèg!þøðÃ8ØØÈȰÎBB>Bóÿÿÿ¾ûï¾ûï¾øgþøÇEÆÆ¾q1‘10/PÎ.*6+ýóÿÿÿûï¾ç}÷Ã8h˜ˆ÷×PÎ*:*ô3ŒŽ‡‹} ãb££ _C8ˆ¸˜Ÿ÷Èg÷ ã"ã£?ß?ÿÿÿý½ÿÿÿÿÿÿÿÿÿÿÀZ B"„¸h ;¿ÿÿÿÿÿÿÿÿÿÿü3}~~}|ᜠ ûæÁÁÂÂÀ½†p°ŸïŸÿÿÿü3ÿ‚~‚|†oßð?ð/¡œ /ü èg  û à` `à_!œ<÷ýëðÎFFFGýëÿþð—ß}÷ß}÷Þ°Î:6>?ýóÿÿÿýá/¾ûÂ_}÷ß ãã¤$ÞÞþÈÈGÈÿ½ÿðÎFFFGýãzðÎ..*.ëý÷¾ûï¾ûï¾øgþù ä#ãä _=éËþâî×ÿ¾ûï¼%á/¾ý÷þâºW/÷+ýÕËÿ¼ß|3ŠŒ‡‹ÿ}}÷ß}÷ß ãdc$?ßaœtl„kûåÊþéýÄß}û««ÿýÁ+ï¼%÷ß}÷ß}à¹n]Òûî×ÿý÷ß}÷;ï¾ûï†rR2_ïœ||„wûåÒºÝ'Gî“£ÿÿß}÷ßy>ûï¾ûÀ$3‘Ž‘ÿ|î[«þê,ïÿÿÞo¾ûï¾ûï¾ûï˜gþùx5ÿ¹!{ÿÿ÷Þo¾ûï¾ûï¾ûû«Â®G÷+¯ºÿýÎûï}÷ß}÷Ã8ÈÈè¿÷×áœlt„gûÝÉ9'ßÿî_ÿ¾ûï¾å}÷ß ãdbc?ßC9é)÷×€KÀXg%!$þøÇGHG¿½»ßýïurÿûï¾ûï¾å}Á(gþúðà•îÈÇÉH½9ñgw½{’º¿ÿï¾ûï¼ß|3ŠŠŒÿ}pH^ûÀà¹Óî®®KÝo?ÿ¾ûï¾ûï¸%}÷ß~éî%uºÝ?t_ÿûï¾ûï¾ûáœ||t{ûë˜wß~åÃ555‰˜½þé=9]_ÿ÷ß}÷ß}÷® _}÷Ã8¸èد÷Îåuy}éû—ÿûï¾ûï¾ûï¾ûáœ|„dûå˺û¥zº_ÿûï¾ûï¾ûï¾ûÀKÀò†q±ñ±¿ï_ ädd¤ ^¿ÿþð—ß}÷ß|3ˆŠŠˆ}xwß}ÿÿÿÿï¾ûï¾ûï¾ûï¿ äd#ä?ß?ÿÿÿxCîwß}÷ß}÷ßx ðÎ66:;ýóÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨ …c"„¼h ;¿ÿÿÿÿÿÿÿÿÿÿøfôôüÿþûÿÿÿÿÿÿÿÿÿü3…„……‚{ÿÿÿÿÿÿøfõù þýÿÿÿÿÿðÎýóðÎ**"&öÄDDĽÿÿÿÿᜠóôûçÿÿÿÿÿÿÿÿÿÿýàoÿÿÿþÅÅÅÅÁ<ÿï°Î ýõàOÿÿÿÿÿ ßá ¡?ßÞ_ÿÿºÿÿÿ¼ ¾ÿÿÿÿÿÿøgþûÿÿþòÿÿ†q±‘Ÿï¿ÿÿ÷dÿÿÿü3‘‘ÿ}†qÒ1±ÿïŸÿÿÿÿ†q1QQ/_ÿ¼ž¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿíçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{ÿÿ âb"âÿßÿ†j***+3Xg''%(þ÷Þ¿ÿÿÿÿ÷§ÿ¿ÿÿÿÿþéo_ÿÿÿÿ¸…ÿÿÿÿº_ðÍUQUUZsÿÿÿÿº_÷/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃ8¸ÈØ¿÷¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü 2€„„Àh ¦ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿô`ä~K<,] x,ð±åîþŒÀ|ÀÉg…‹àÀ|ÀÉg…OP/´aä~K<,dä~K<,}~£0#ð2Yác 0#ð2Yágü õ€ù’Ï €ù’Ï ?ßà_hÄ Èü –xXÆ Èü –xXüÿûFP`>Gàd³ÂÆ``>Gàd³ÂÈHÚ3ƒò?%ž3ò?%žBÁÀ¾Q‘ø,ð±‘ø,ð²òŒÀÀ|ÀÉg…ŒÀÀ|ÀÉg…pp/”gä~K<,iä~K<,„†}£80#ð2Yác00#ð2Yád44 íÁ€ù’Ï Á€ù’Ï !¡ _hÎ Èü –xXÒ Èü –xY ùF€`>Gàd³ÂÆ`>Gàd³ÂÈh˜º5ƒð?%ž4ƒð?%žDÄ@½Ñ¤ø,ð±¤ø,ð²"î À|ÀÉg… À|ÀÉg…ðð/tjà~K<,kà~K<,‰‰{£P0ð2YácP0ð2YádLDÝA€ø’Ï Á€ø’Ï "b ^èÒ Àü –xXÔ Àü –xY÷F `>àd³Âư`>àd³ÂȈˆº5ƒð?%ž5ð?%žDD@½Ñ¨ø,ð±¤ø,ð²"î@À|ÀÉg…@À|ÀÉg…‘ð/tjà~K<,jà~K<,‰ˆ{£@0#ð2Yác@0#ð2Yád<< Ý€ù’Ï €ù’Ï !¡ ^èÒ Èü –xXÒ Èü –xY ÷Fp`>Gàd³ÂÆp`>Gàd³ÂÈXHÊ3ƒò?%ž3ƒò?%žBÂÀ½Ñœ‘ø,𱜑ø,ð²îÀ|ÀÉg…ŒÀÀ|ÀÉg…°p/tfä~K<,fä~K<,ƒƒ{£00#ð2Yác00#ð2Yád ÝA€ù’Ï A€ù’Ï ``^èÈ Èü –xXÊ Èü –xY÷F@`>Gàd³ÂÆP`>Gàd³ÂÏøº2ƒò?%ž1ƒò?%ž¿À½Ñˆ‘ø,𱌑ø,ð±ùþîŒ`À|ÀÉg…Œ À|ÀÉg…ïÐ/taä~K<,`ä~K<,|{|£0#ð2Yábø0#ð2YácÛÜ åÁ€ù’Ï Á€ù’Ï ž _&òüõÿÿ7·§÷ÿ÷Ù¾¿?>À¿Mþ þýöpPP0p/³‚ÿƒ}›ü ûäààà à^ç ÷888XX¹ÂBÂB¾N"îq±Q0Os††‰†{œ4D4< Ôâ"b"`žç÷8ˆˆ¨˜¹ÄÄÄÄÀ½N&*..êqQ1QPOSˆ‰ŠŠzœDLLL Ôâbbb`ž§õ8ˆˆ˜ˆ¹ÄÄÄDÁ=Î&&îpÑðð/s‡‡‡‡‚{œ<4D<Üá¡b! ^ç ÷8XHXX¹ÂAÂÂA=Î îpppppOs‚‚‚‚{œ Üÿÿà``žçþÿÿ÷7ç÷çè'¹¿>¿?A=Íñññò îoooOPOs{~{}œ ÷ü äÿß   _&ýÿÿû7øOø(ÙÃAÂC@¾ÎýöpPp/“††„„|œ<>>ÿ¾Mñùùÿýöp0OðP/“‚…„ÿ}Ÿÿü$ûìà¡`à _g þû8hXX÷ÙÂBBÃ@¾NîpñÑ/sˆ‡‹‹{œ>::âqññÑÐ/SŽyœllll Ìã#ccÞgó8ØÈÈÈ™ÆÅFÅ@½N****êqQQQ_ïS‰‰ŠŠÿzœDDDGûÔâ"!áÿÞ§ þ÷8xhhX¹ÂÂÂÂ@½ÎîppppP/s‚‚{œü ÜߟŸß ^â}|#ô ôààáa _§þù88X((ÙÄÃÂÄÿ¾Î*ýöpðпﳊŒ‡Šÿ}œ\T\_ûìâ""âÿß'þù8¸Ø¸ÈÉÆEFE½Î*.*/ýòqqñqßŽÿ{œtltwûÜãccc?Þ¥Ž†ô?úÚ*C장ŸR#¤tuz4t4463ÓeÐÚ Ã$T·°KG¢GÇ«‡¤Þÿ8øèøç÷™ÆÇFÇ@½N>>>?ýêqÑÑñßïSŽŽyœ||twûÌãcccÞgþõ8ÈÈÈÈ™ÆEFEÿ½Î*.*.êqQQQP/3‰‰‰‰‚yœDDDD Ôâ""" ^ç  þ÷8XhXo÷¹ÂÁÂÁÿ½Î  ýîpP0P_ïsÿÿÿÿ{Ÿû÷ûÿûÜPn}ƒ}~œ$4 ûôâ!á¢?ß'  û88hX?÷ÙÄECDÿ¾Î..'ýöpðñ0ÿﳊ‡Šÿ}œldloûìâb"¢ÿß'þù8¸ØÈß÷¹ÆÆÆÆÿ¾N6667ýòq±Ñ‘ßïsŽ{œ|||wûÍâÞ€*.)ÐORŒ®©è­Á”«æ†ˆŒŠ½;*"2*ùåÙ¦¬Åî{øg âø7NB>B=ýærññÿï3ÿzœ|||ûÔãã㣠^gõ8èèèÿ÷™ÇFÇÆÿ¼Î2626æq±q±ïs‹ŠŠŠ{œ\\\\ Ìâ¢bb ^gþõ8ˆxˆ÷¹ÃCÃCÀ½Îîpа/sƒ„ƒƒÿ{œ$$ûÜÿÿàà^çÿÿ÷W÷Á¾¾ýúð0Ÿï³„‡ƒ„ÿ|œ>B>êqñññð/Syœ|||ûÌã£ã£ ^gþõ8ØØØØ™ÆÆÆÆÀ½N6*6*îq1Q1P/sŠŠ‹‹{œLDLL Ôâaâ" ^çþ÷8xXxo÷¹ÃCCC½Î îpPPpP/s‚‚ÿ{›ûûÿÿûÜŸðpnÿ~œ,447ûôàà¡ ßßg þû8ˆ˜h‡÷ÙÄBÅDÿ¾Î"#ýöq1Q_ﳌŒÿ}œLT\_ûäâ¢âbß'û8ÈÈøß÷ÉÆGFÆÿ¾N::6?ýîqñ±ñÿïsŽŽÿzœ||tûÔä$$d`_#‡óä¤?ß’3NCWÇÉ=Ÿÿœ|Œ„‹ëääd$¤?Þg!#!þñ9 ‰ÈHHÈÿ½NBBBGýêr22?ïÿyœtt|t Ìããã£ÿÞ§ó8ÈÈÈÏ÷©ÆÅÆÅÀ½Î.*..îqQQQP/sŠŠ‹‹{œDDLOûÜâ!â"?Þç þ÷8hXho÷¹ÃAÃB½Îîpp0ïsÿÿÿ{œ3ü'ÿûôàá` ÿß§ þù8h8¨xÙÂÃBþÎ..)ýöqq1‘ﳈ‰‹ˆ}œddDOûä㣣ãÿß'þù8È踿÷¹ÆÆÆGÿ¾N66>7ýòq‘ñ±Ð/“ŽŽ{œ„ŒŒ„ Üãä#ä?Þ§!###þù9)(©ÈGÈÈA=NFJFGýòr22_ïs‘‘’zœŒŒ„Œ Ìäddd`^g####ó9 ™ÈHHÈÿ¼Î>>BAýîqÑÑñÿïSŽŽÿyœtl|wûÔã##c?Þçþõ8¸¸¨¨©ÅEEÅÀ½N&&&*îqð/s‡‡‡‡{œ4B.CýòrÒ¿ï“ÿ{œŒ„|‡ûÜãäd¤¿Þ§!!!!õ9) ?÷©ÈÈÉHÿ¼ÎFBJKýêrRRP/3’’’ÿzœŒŒ”ûÔäddd`^'##%#þñ9 ÷©ÈÈÈÈÿ½NB>>B âqññ±¿ïdã£ã#_Î:::=ùîq±‘±/ŒŒzœTT\_ûÔâââ¢à^§þ÷8ˆx˜÷¹ÃÄDD½Î""ýêpап„†„ÿ|œ$ûäàÿà`¿ßg  þý8ˆˆx—÷éÃBDCÿ¾NöqQñﳊŒŒÿ}œ4DLKûìã#bb¿ßg!þû8˜˜ÈÏ÷ÉÅÇEÅÿ¾N>B6?ýòqÑqñ¿ï“‹Žÿ{œŒ„l| ää#ä$?Þç!þ÷99 'ç™ÈÈÉHÿ½¹ƒ“\§£Ð'ÝGž‘`‚üÝ"ü䤤¤ŸÞ'%%%$þõ9)))(™ÉIII@½NBBJJærRR2?ï3‘’{œ„ŒŒcûøøÃÎð— dîzûgØM ÐB&žJn=}¢ø4‹ÀÐA¥%3”>ÑœGjII­G¤º‰=ÃC(:烜d\d[ëÔââã#?Þ§þõ8¸¸¸¸¹ÄÄDÄÿ½Î"""ýêqððð/s†…†…|œ4,$ äà á à_'û$4ûáÿß§ þý8ˆ˜X÷ÉÄÃEEÿ¾ÎýöqQñﳊŽÿ}œLLdSûìâ㢣?ßg! þù8ȨØÇ÷ÙÆGEÆÿ¾ÎBBBCýöqÑÒÿï“ÿ|œ„„|‡ûÜäcää`^‰cãc|OÏÇÛDÇ5À Y’kyèÓìJ'’“SXLv˜ü¬Úƒâ~mòœ””Œ“ë¼ä¤¤¤ßÞ§%%'%þõ9)))/÷™ÈÉII½NBBBCýêY (?: ù´º ë$®R’˜A ýW–Y¥¥'%/ÌÍ)%-1j}ÚS@4Š•ÿÿ{ã8èÈÈÇÇ©ÆÆFÆ@½N...-ýêqqQQP/sЉ‰‰zœLB>3ýñÜ„4 ¼J±Ï†¯bdð&&%³˜?4ÄÄÄÅÉɦ§''­NµVù¨ö ’_|s§%%'$úï99))/÷©ÉIIɽNJFJKýêr222ï2ÈÇÉBǾ¦ó–`d¹!ä÷é{7À-«áœ{Diæ(Sñ±ÑîÇßÏ1ÆÆ~>øyï€-R>=÷Á›Ü|-s´• õp søfÎ~8ó·Ã8øèç*ø'N:665ýêq±±‘¯SŒŠ‹‹zœTLTT Üâbbb`^§þõ8xxx÷©ÃÃCþNýòpPpï“‚‚‚‚ÿ|œ4,ûôáâ`á¿ß§þû8hH˜o÷ÙÄÆÃEÿ¾Î622;ýöq11‘?ï³‰Ž…‹}œ|ltwûìââãcßgþû8ù ÷ÙÇÆGFÿ¾Î6B6CýòY xûüh˜æ_RÔ ’ÛÏFŸÊzj¥{…¶‰7)ɯ Ð~­zŸf™CÓMMKL[œšrzbzÔÃVÀh$ÞÀ.M¥ð.œŒ””›óÔä¤ädÿÞ§%%%%þõ9)))/÷©ÉIII@½0¤Njƒ%‡D¼ºzfšÀkÒ®B„ ä£äœƒ7ùÈÈHÈÿ½NB>B?ýæqñòÿïQBLt|kûìãcccß'þó8¸¸¸¿÷©ÆFFF½N***+ýêq1Q1ïSЉ‰‰ÿzœD66?ýöqQ‘/ﳉŒˆŒÿ}œ|||ûìã##£¿ßg!þû9)ù÷ÉÇÆÇÆ¾¾^5Q¨×YóM”O¶Ð „¡œƒø£ÌPÔ3‘w>ÿ^EœHö0há4ÔäÔåÉ˦§½9[æ–fÂüÜ”cäœ8NNJJJêrRRROï3’’’’ÿzœ”„”ûÕäbÝ"ò©ÏïìK~rzrs6?ýêqñÑñ¿ï“Žÿ{œldlgûÔâââã?Þ§õ8¨˜¨Ÿ÷©ÄÄÄÄÿ½N&&"'ýêpÐðÐßïS‡†‡†ÿ|œ4$4$ äá!! à_'þû$,L; ¿ß§þý8HHˆo÷ÉÃEÂþÎ2.&7ýöq0ѱﳊ‡‰ÿ}œ|tdwûì⢣bÿßgþû9øù÷ÙÆÆGFÿ¾Î6B27ýör1òï“ÿ|œt„|‹ûìä¤$¤¿ÝMÈ­ª5å(iê,3šrzzzÜátö OoñnEÈäd¤¤Þ÷9)))/÷©ÉIÉIÿ½NNJJKýêrRRRï%äÚ f€ûýìÓ“““˜)§‘§*½9ArmΟÇ­PʆLï†tãä#äžç!!þõ8øèøç÷¹ÇFÇG½N:2>3ýêq‘‘qŸïS‹‹Œ‹zœ\\\\ Ô⢢â ^gþõ8ˆˆˆŸ÷©ÃÃÄÃÿ½Nýêpаа/sƒƒ„„ÿ|œ  ìÐ0„ÿ~œ$D ûôâb¡¢ßß' þû8xØx—÷ÙÇFEÆÿ¾Î*>/ýöqQ±_ÿ}œd\|oûìã¤ccßg###þû8ØÈèß÷ÙÇIFÈÿ¾NJFFGýòr2Rï“’zkI¯Ð(8º<3šrzrzÔóuÀhá~m‰ò’99)9'·½ÎJJNKýêrRRR_ïS’’’’ÿzœ”Œ”ûÁyFàh$Ÿ>ýìÔ”“ØÃ)—Í9599fn4åÊäõ¹V×Ã(Õ&€SUtYôHøøzG¼ž}œ„t|d ¼ãcccÞ§õ8Èȸ¸©ÅÅÆEÀ½N**&*æqQQQ?ï3‰‰‰‰ÿzœDDD?ûÔâ!ááÿÞ§  þõ8hXh_÷©ÂBA¾N  ö'÷ÄAÃÿ¿N&*'ýúpÑPð¿ï“ŒŒ‡Œ}œL4dOûìáãaâßgþû8¸˜øï÷ÉÅÇEƾÎFB:Cýöq‘r¿ï³Œ‹Œÿ}œŒt|‡ûì㣤#ÿß'%#þù9) 9'÷ÉÇÇHFÀ¿µi€It”Û)gÍ=9A=Zu²ÏÍG=ŒÈæ`Î,2œŒœ„‹óÔ䤤¤¿Þ§%''%þõ99))/÷©ÉHÉHÿ¼Ç!éø×L~zŒ,{ƒ7HøãÓNNNM[™šjrzz´ìÓ““Ó–fÚ+×9P NP`=$}ÌlkgÃ(ªæÚèXùÆÆÆÆ?B.7ýöròÿ{œt||sûÑy`ÊEôH'¡)CIééÌÁ”¼ÓÔTUUæZ·@ùør-!œ+§###!þó9))?÷©ÉIIÉÀ½NJJJKýêrR22P/3‘’‘ÿzŽJSÒïî™|iñ§Ûün§ã"((+ŸOa™šzr‚‚ÌÔÓ“SÓ–¦K¨8+rrÿÍ/È9tdlc»ß'þó8ØÈÈ¿÷©ÅÅÅÅÿ½N.***êq1PÿïSˆ‰‡‰ÿzœ<<¢½+555©¢ê ¨Àõy'"HGF>=Ä3zœ„„„„#¼äd$$ ž%Šsûãhxå™4ø2RuŽŽ{´õ¿ÓË'ß~õãò¡m?ë^ý8ȸȿ÷™ÆEÆEÿ½N2*2*âqQQQ?ï3‹ˆŠˆÿzœ<<<< Ôâ!ááÿÞ§  þõ8hXh_÷©ÂBBB½ÎýîpP0P0/s‚{œ$4ûôâ"¡!ÿß§ þû8h˜ho÷ÙÅÅDƾÎ".*öpñÐÑP/³‰Œÿ}œLLLOûìãcâ£_ßgþû8Èø¸¿÷ÙÈÇÇÇÿ¾N2627ýòq±ñ²ï—©  ÿF¤¤ ¢ÌKÍMMMMVjj*ÊŠKS-!xÕWÏIŸ2¦¨¿C7Ú°Èh×C8šøÙªžjì "£Ð*5†QÏšªšªšÔÌÔÕÕæn*Ã(å‡*L5Ñ1ùŽ‘†=yÝýLŒŒ0=@ {<þÚ*9«Á“ •ÏEŸÚ¢Ýzõ ÿþ±Ç!>|3ŒŽu¯|œllloûÌãc#£ ^gó8ȨȨ™ÅDÅDÿ¼Î&""#ýêpðððÿïS‡ˆ†ˆÿzœ<4<7ûÔáa!a?Þ§  ÷88(8(¹ÁAA@À¾N òpPð1ïÓ„„…„~œ<\,Oûäâ¡¢âßg  þû8ب¨ß÷ÙÄDÅD¾Î2>&/ýöq±QÑßﳉŒ‹‹}œ|„d{ûìã¢ä#_ß'þù8èøøÿ÷ÉÇÇGÆÿ¾Žw€5íQ·Ø'£RPTPa ¦¦¢¦ ¦«1*ª’¢ý ֥ݪ5ü3y }üaä(zù Z÷ÙÇÇÈH¼8Šrô|‹ê ÍáЯF¬¨¶¨¾éY©©©)«ÌÍUQUU^f‹–À!MQ‚YRÉåU£íTØNH6X>Ó@. †qí'â!B×ÆÆÆ»ŸœltlûÌã¢ã¢ÿÞ§õ8¸¸¸¨©ÅEEE@½N*"*êq/S‡‡‡‡zœ4444 Ôá¡a¡`^§ õ8H8X(¹ÁÁAA@½Î  îp?ð00Os„†…ƒÿ~œ<4BGýö8Ø Ê:/ÿýÒ»”Ý`fÎ ëgŸyÚŠ¹÷h?`èfÂ1‡’7PÎ&¾69´`‘ÈÈGÈ=Ÿzœ„Œ„‡ûÌäd¤d¿Þ§%%ôÒ m3Žyƒ<épú´Qø` i˜ÓÏX>º~bϵLQæ Ð~¼Aû$Þ1'¡ÆÇÈ<~œ|„tûÔãc£ã`ž§þõ8èÈØ¸©ÅÅÅÅÿ½N.*2+ýêq1110/SЉ‰‰‚zœLDLLÔáá¢" ž§ õ8hXhX'©ÂÂBBA=N îpPPP0Os‚‚‚{ŸÿûûüÜP0/„ÿ~œD+ûìâ¢""?ßg  þû8¸Èˆ¿÷ÉÅCFE¾Î"&#ýöqq‘q¿ï³ŠŠŒŠÿ}œltToûìã"ããÿßgù8øèÈøÉÆÅÇÅÀ¾N6B.>öqÑ‘ÑßïsŒŒ‹|}œ„|l‹ûäãccãà_'!!!þù9 ÷¹ÈHÇÇÿ½ÎJ>BAýîqñòðOsÿzœ„||| Ìã㣣 Þ§õ8èèØØ'©ÇÆÆÆÀ½N226/ýêq‘‘q/S‹‹‹‰zœ\TLL Ôâ¢b¢`^§õ8ˆ˜ˆx'©ÃÄCCA=Nêp°°°¿ïS„ƒ„‚‚zœÜà ` `žçÿõ7÷÷÷ø'©ÿÂAÂÿ¿N&ýúp±°Ÿï³ˆ‡‡‰ÿ}œ,$<'ûìâ£!âßgû8ˆ¸xxÙÇÆEÆ@¾Î*2*&öqññQßﳋ‹Œÿ|œdtL_ûìã¢ã#ÿß'þù8ù¸ß÷ÉÆEÇǽÎ6B66îqññÒ0/“Žÿ|œt„t‡ûää$$#ÿÞçþ÷9ùÿ÷©ÇGÇÇÀ½N>>B>òq±±±ßŽzœldloûÔãccc¿Þ§þ÷8¸¸ÈÏ÷¹ÅÅFEA=Î*&&& êq111O3ˆˆˆˆ‚yœ<<<<Üá¡aa`žç õ8HHXO÷©ÂABAÀ½N  îpP000Osÿ‚z›ûûûüÔá  àÿßç  ý8hHx÷ÙÃDBB@¾Î&"+ýöp°ðПﳊŒ…Šÿ}œT;ýì3ŒŒŒÿzÜiÚÿÿþÁ>ÿ¿À¾†pPð0/Áœ?ýëÿ ããä#ÿÞ¿ÿÞœ $$#ûóï¾ûï†q1‘_|||‡ûàgþøÆGFFÿ¾>ûïÃ8øøéç›¶í»nÛÕÒÿï}÷ß â#!¢¿ßC8èØØ÷÷ÐÎ2.:3ýô3‹Ž‰‹| ä$#cßßC8èÈøï÷×ßxÝ•Íÿq§oîßÿ}÷ß}ðÎ*&2!ýô3‰Ž‡‹} ä#ããßßC8¨¨è×÷ÀÎ.6.5ýô3ÿ}}ýÝßq¯¸îW·evÜ×ÿ ßø¿÷àÎ "ýù÷ß|3Œÿ} â¢#b_ßC8ˆÈˆÏ÷ÐÎ>B>Cýô3ŒŒŽÿ} ãd"ãß_~ãN&éC4äÄÄÅ©Ç5÷ÝÇÑîÿÿ†Hhˆgÿ¿qQ_ïϾûáœLl4Oûèg!þúÅÅÇFÿ¾†qq±1¿ï¡œŒ||‡ûègþúûîÍÙ;;ÿs7“ßÿü3††„ÿ~ á" `¿ßŸ}÷Ã8¨ˆè¯÷ÐÎ*:&+ýô3‘Žÿ} ã"ä#ßC8èøÈß÷ÐÎJB>Gýõ÷Þ`ÎBBBAýíÍÞoû­Îïÿþ ŸþüÄBÄÄ¿>øgþúÄGDDÿ¾†qñ±Qß\T„oûàgþúÈÇÇHÿ¾†q±r¿ï¡œd„\oûëï¿»WOî×t¿ÿ†(w@¿ÿ¾q0q?ïϾÆÆÄǾ†qpñ±DdL?ûègþøÅÅÈG¾†qqÑQ_Œ„tûèg!þúûïº5à÷1|3’‘““ÿ{zî“×ÿÞ'ß áâ"!_ßC8Øè¨ï÷ÐÎ2*>3ýô3ˆŒ‰‹ÿ} ä#£cÿßC8ÈØøï÷ÐÎ.:.+ýô3‘ÿ}}÷îÂÝf  žž¯4íÿq¾æÝÿý÷ß|3Œ‡Œ‹ÿ} áâ¢!¿ßC8Èè˜ß÷ÐÎ.*:/ýô3ŠŠ‹ÿ} ãä#£ÿßC8ȨØß÷ÐÎ2:./ýõ÷ߺww¯÷iÞîïÿï¾ûáœTlDWûègþúÄECľ†q±ÑQŸï¡œtd|wûègþúÈHGGÿ¾†q‘qÑﯾøg!#þøí݆û·îoÿøgþþûï†pÐÑ1TtDWûègþúÄÄÄľ†qÑñQßl\„oûègþúÇÇGHÿ¾>ûáœttŒûë·ç€g''#&ð÷­Ú}ëÜ÷oÿïGß|3‹‰ŠŒÿ} áᢢ _C8ˆèh¨ÐÎ6&:3ýô3‰Š‰‰ÿ} ã£â£ßC8øÈøß÷ÐÎ6>*/ýõ÷ßsL=vîÛûšv½Ðÿÿp‹ï¾ÃFCCÿ¾†q‘qQ°/¡œDLTL ègþúÇEGÇÿ¾†q1‘qo|„dwûèg!þúûáœldlgûãßvžÜŸwyÝÞÿÃ8hhho÷¯ß}÷Ã8˜x¸Ÿ÷ÐÎ.ýô3Œ‹ÿ} âb#"¿ßC8ÈØ˜¯÷ÐÎ62>=ýô3Š‹‹Š} ã㣣Ÿß}àÝå»û¶åyÿ}÷ß âã""ÿßC8¨X¸Ÿ÷ÐÎ"&#ýô3ŒŒŒÿ} âb£"ßC8Øèˆ·÷ÐÎ2.:;ýô3ŒŠ‹|}÷§;¶ås/ÞÝÿÿ÷ß}ðÎýð3‹Œ‡‰ÿ} âaââ¿ßC8ˆÈx÷ÐÎ:.67ýô3ˆ‹‹‰ÿ} 㣢ãßC8¸ÈøØÇß|3‘ŒŽÿ{ ãb$#Ÿ_ÿÿý÷ß|3‹…ˆŠÿ} á!áá?ßC8¨Èh¸ÐÎ*"2.ô3‰Œ‡ˆ} ã¢ãc`_C8˜¨¨Ÿ÷ÐÎ:6.;ýñ÷ÞAœ\ttoûàg!þ÷†qñÑòïŸÿÿ÷¾ûáœ4L$/ûèg þúÂÄÃþ†qqÑLûï†p°Ððÿﯿ âc"¢ _»W¿ü3‹‹‹‹z ââââà^ÿ†pp/}à1à³ï¾ûï¾ûÀT3Љ‹ÿ|Ã8ØèØÏ÷®ãnËÿÿýæûï¿}÷ï€pgþøð<q‘Ññð/xg!!!õÿÿü3‚ÿ{¾ûï7ß}÷ß}÷ßÿÿÿ÷ß}÷ß}ûï¾ÅÇÅÆÿ¾>ÿÝ¿ýÝÇzáœTLTL Ï÷‚O¾ûï¾ûï¾ûïû¿ðÎJJJOýã‹Îîÿýà›Á ï7ß}÷ß~ûû·†ii‰‰‹S¿Ý§~íÿûÉ÷ß}÷ß}÷ß}û»“v÷»_ÿûï¾ó}÷ß}÷ß}÷iÉÿÿÿý÷ß}÷ß}÷ß}÷þíqÝ¿ÿ÷ß}÷ß|3Ž‘ÿ|}÷ß}þí]ÿ¼¿ÿß}÷ܯ¾ðϾûᅥr2ROïNÕßÿ»_ÿ}÷Þo¾ûï¾ýü3““|wÝ¿þí»ÿûï¾ûï¾ûï¾ûïÏ×½ßÿÝÿý÷ß~ó}÷ß}÷Þß»Þ÷vîÿ¾ûï¾ý÷ß}÷ß»ïn;´ïîÕÛÿûï¾ûï¾ûï¾ûïÜî÷}Ïû»Û¦÷ÿ÷Þ >ûï¾ûÁwï¾ÿ ÔT”TUæ½ÚÞ¯nÉÈßáœLLLT Ïþûï¾ûï¿ß}û¿ï_wÿÿ}÷ß}÷ßx†qññ²ï·áœltlgûï†qÑÑÑÏÏ~é=ÿ÷ß}÷ß}÷›À£À£ûÀFÆFÇF¿¾ÿÿ÷ß}÷ß}÷ß}ûÀü3‘{ âãc# _?ÿÿûï¾ûïß¾ýÿ ã##c ^ÿÿÿûðÎýô3Šˆ‡Šÿ} áaâa¿ßaœT4\L ègúÆEEF¾†q1Pßᅥqq±q/pÎ22:3ýóøg÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÀ Cè"„Ìh =?ÿÿÿÿÿÿÿÿÿÿøføøÿÿþú¾¿?>À¿C8?ø(8ÐÏýþô3ÿƒÿ‚ÿ|†p°°ÐÐ/pÎð3†‰…ˆ{ â!¢â žÃ8hh˜h¼3Šˆ‹Š{†q1110/_ÿÿü3~†oïð/ð/°ÎöÁAÁA@¾p°Ð°/œDDDL Ü3…ˆ†…|ÿÿÿÿÃ7×÷çÿ÷Ü3„ÿ} àa a _C8hXX_÷ÐÎýô3„…„„|ÿÃ8¸¸¸¿÷¯ÿÿþ¿ÿÿ¿¾pÎ÷†pññïÿÿÿûÀ3‚„‚ÿ}x^8xˆh÷ÞÄÃEÄÀ½áœd\\_ûÞÇGGFÿ½áœdddd ×ÿÿþ濆pÐÐ/¯øgþõÝÿÿÿ¹ß à`  ¿ß/ ûÀ@gþû†q‘‘±/Î.../ýïÝ»¶îòÿÿý÷Þ¾û&q‘‘‘ŸïN;ÖïÿÿûáŸü ûûï¾ûï¿ ã###ß0ÎF:::ó†qñòïWwÿÿÿx{}÷ï†qq‘Q_ï¯Øgûáœlltwû×ÿÿ âbbb`^ÿß}÷ß}÷ß ã##£?ß? äd$#à^ÿÿÿýà“ï¾ûïÞ!œL\T_ûàgþùÿÿÿþûï¾ûï¾ûÿÃ9'çÍûµÿß}÷ß}÷ßx<=îíþíݧ­Í÷ß}÷ß}÷ß¼=¿û˜¿{Þ'{ßÿ}÷†}÷ß}÷ß}÷Ý·«šÿ»PÎ>>>?ýëÿûÁgß}÷ß}÷ß|3‘‘ÿ|x;Üï‹Ï9Ý¿w}Ýßÿý÷ß}÷ß}÷ßxg“øg%%'$þöíwݯÿ÷›ï¾ûï¾ûᅥr1²1ÿïÎJFFEýñÛ¼?Üî{Žòÿþûï¾ûï¾ûï¾ÈGÈȾþñþã}Úv¿þûï¾ûï¾ûï†qQq±ï¯ÀÎ>6NCýóvÝîÿ¸×»Nÿy¾ûáœGýõÞíÿîÿÿß~ûï¾ûïß}ýÏv·wã¹ÿÿûï¾ûï¾ûï¾ûï†rR?ïŽÿrn}ÆÝ®ïÿûï¾ûï¾ûï¼!÷ïg?q§»÷¯ÿý÷ß}÷ß}ðÎ2&:-ýõ÷áœ|tdûãÀ!Çqÿv¿ÿþûï¾ûï¾ûÂ|3Œ|xC8Øèèß÷ÀÎ>6.=ý÷ÿÿÿß}÷ß}ûï¾ûïÿÿÿÿ}ý÷Ã8ȨˆÏ÷×ß|3ŽŽÿ||3Ž‹Ž|Ã8èØøÿ÷Èg!!÷ÿÿÿû÷†qñQ±p/¿†rÑñÿïŸÿÿÿÿÿÿÿÿÿÿÿÿÿüN | "„Ðh =¿ÿÿÿÿÿÿÿÿÿÿÿøg ÷ÿ ⢢âà^¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÎ"÷ÿÿÿÿÿÃ8HXhhßÿÿÿÿÿ âb#b _8hxˆhÏþêòÿÿÿÿÿÿÿÿÿÿþòÿÿÿÿÿû×ÿÿÿÿÿ¼¿ÿÿþð5áœLLTOûçÿÿÿÿÿÿÿÿÿÿÿþâÿï'§“Ëÿÿÿï_ýéÿÿÿÿÞ¿ý÷ݯÿÿÿr½»ýØ¿ÿÿ÷;¥ÿÿÿÿÿÃ8Øéß÷Ïÿ»_ÿÿþÆGGG¾ÿÿqÞOÿÿÿÃ9 '÷ÏÿÜÿÿÿÿûÄè_ÿÿÿû¿ýÚz»ÿÿÿÿ»û×îîÿÿÿÿû¥v¿ÿÿÿÿÜ®kÿÿÿÿþ¨©((«Ìþôío_ÿÿÿÿ»[Ó¥ÿÿÿÿzþé>ëÿÿáœLDDOûïÿᜄ|Œƒëçÿÿÿÿøg!!þùᜄt„„ çÿÿÿÿÿ â£b¢¿Þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð‡  +"„Ôh =?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû×ÿÿÿÿÿuzÿÿÿÿÿÝ+ÉÚÿÿÿÿÿ÷bÿÿÿÿÿî'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþõÿÿÿþåzÿt¿ÿÿÿÜ_ýëÿÿÿýÒs_ÿÿÿÿûËÿÿÿÿÿºÜ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzÿÿÿÿþõÿÿÿÿÿÿÿÿÿÿîÕéëû¯ÿÿÿýå}ëzºOW¯ÿÜ_ÿý×ýÒÿÿÿÿzzt½Çÿÿÿÿÿÿÿÿÿÿ†rïŸÿÿÿÿÿÿÿÿþÄDBÄ@¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø ½M"„Øh >.9ý÷ÿÿÿÿ÷¼3…‰†…}ÿû§ÿÿÿÜ¿ÿ ä¤d$¿ß?ÿÿÿx#ÿ᜜„|ûïr¹n¿ÿÿ÷¿ÿïÿÿÿûÀÿáœlt|wûæé¹û§ÿøgþýÿûïï'IÒr/u½ÿÿýÈ}äû§û•Òzÿÿÿ ä$#äß½>û—Ý'2tݯÿÿü3‘Ž‘ÿ|Ýaš¢šªªÄÓŠôýëÝo ÿÿþÅEÅD?¾ÿt¿zyÿøg þûáœldToûï†qÑñ²/žÉÈGȾÿÿþÄÄCžÿáœd\l_ûçÿÿÿÿðÎ:62:öÆHDÇÿ¾ÿÿÿÿþÅDCžþÇGEÆÀ¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÈ ín"„Üh ;?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞøgõÿÿÿÿÿyÿÿÿÿÿû§ÿÿÿÿÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿîŸÿÿÿïÿÿÿïûÛ÷˜gúõÿÿÿî÷›»¶ûÿÿü3Ž}Ã9)ù÷ÏÿýýÓtÿÿÿýÝî§''',Íÿÿÿÿÿk=Àf”–––Âé¿ÿÿÿÿþéÿïÿÿÿᜤ¤œ£óßÿ‹MîŸÿïÿÿÿû¦Üÿÿü3‡ˆ‡†ÿ}ÿ†rRRR_ïýËî¿ÿÿÿÿ_sÿÿÿ†rQñòï¿ÿý×ÿÿðÎB>6?ý÷ ä£cä?ß?îÿÿØÏÿÿ÷¿ø½ÿÿþÇÄÆÇÀ¾ÿðÍMUMM^o÷[‘ïÿ¸o ãbâc¿ßxgþûøõ~ósío÷oÿÿðÎ22&7ý÷Ã9èÉ÷ߺÝ·oÿÿáœ,$D/ûïÃ8Èø˜Ï÷ÞÅÅÇÅÀ¾qÒ‘ð/Ÿÿÿÿÿÿ†qqqÑ¿ï˜g!ùÿÿÿøgþû áácbß|3ЉŒŠÿ|øg!!!þ÷ÿÿÿÿü3‰‰‹ˆ}øg!þøÆFGF¾ÿÿÿÿÿÿÿÿÿÿÿÿÿðø &Ú"„àh ;?ÿÿÿÿþžï ƒ$÷82 ‘îs”Üä[œä÷82 “Üç9=Îs“Üç9=Îs”Üä÷9ÎOsœä÷9ÎOsœä[œä÷9ÎOsœå79MÎSs“Üç9ç9MÎSs”Üå79=Îs“Üç9MÎOsœä÷9ÎG¹Î[r›œ¦ç)¹Ênr›œ¦ç/¹Õ79ÐÎ""&&ø3ˆˆ‰‰ÿ~ âbâ¢à_ƒ8¸¸¸¿÷ÐÎ.2.3ýô3Œ} ãcccß8ØØØè°Î::>>ì3ŽŽ{ ããããà_8øøøø°Î>>>B ì3{ ä$d$ ^ƒ9)(°ÎFFJJì3‘‘’’{ ä¤dd ^ƒ9)( ÎFFJJè3‘’’’z ä¤d¤ ^ƒ9)(' ÎFBJJ è3‘’{ ädd¤ žÃ9°ÎFFFJì3‘‘‘‘‚{ ä#ä#àžÃ8øèøø°Î:6>:ì3Œ{ ã##c žÃ8¸¨¸¸'°Î&&.* ì3ŠŠ‹Œ‚{ âbb¢ žÃ8ˆˆ˜ˆ'°Î" ì3……††‚{ áa!¡ žÃ8H(XH'°Íýþ ì3‰‰‰‰} âbbâÿßC8¨¸¸¿÷ÐÎ...6ô3Œ} ãccc _C8èØøï÷ÐÎ6:6:ð3| ããããà^Ã8øù ÀÎ>>BBð3‚| ä$$$ ^Ã9 ) /÷°ÎJJJKýì3’’’’{ 䤤¤¿ß9))( ÎJJJJè3’’’”z ää¥% _9))I( ÎJJJR è3“’”“‚z ädd¤ žƒ9)))('°ÎJFJJ ì3’’’’‚{ äddd žÃ9 '°ÎB>B>ì3Ž{ ã£cã ^Ã8ØØØØ'°Î2.66 ì3‹‹‹‹‚{ ã"ââàžÃ8¨˜¨˜'°Î"& ì3‡‡‡†‚{ á¡¡¡ žÃ8hXhX'°Î ì3‚‚‚‚{ âbbbß8¨¸¨¿÷ÀÎ....ô3‹‹ÿ} ãcccßC8ØèØèÐÎ>:>?ýô3Žÿ} ããããà_8øù °Î>BBBì3{ ä$$$ žÃ9 °ÎBJJKýì3’’’’{ 䤤¤¿ÞÃ9)))(°ÎJJNSýè3’’””ÿz äå$ä¿ÞÃ9II)(ÀÎRJNSýì3’“”’‚y ä䤤 žC9)))(' ÎJJJJ ì3’’’’‚{ 䤤¤ ^Ã9 )(°ÎBBFBì3{ ããä#àžÃ8øèøè'°Î6666 ì3‚{ ââââàžÃ8¸¸¸¸'°Î*&*& ì3‰‡ŠŠ‚{ áá¢aàžÃ8hhxh'°Î ì3„„††‚{ àà   žÃ8˜˜¨¿÷ÀÎ*...ð3‹‹‹‹ÿ| âãbã`_C8ØØØèÐÎ6::>ô3} ããããà_C8øøøøÀÎBBBBì3ÿ{ ä$$$ ^Ã9 °ÎBFFJì3’’’’ÿ{ 䤤¤¿ÞÃ9))9?÷°ÎJJNNì3“”””ÿz å%$äÿÞ–ÞÄFÄ?¾†rR’Rïaœ¤”¤¤ Èg%%''ôÉIIʽrRR’/Aœ”””” Ðg%%%%ôÉIII@½r22Oaœ„„„| Øg!!þöÇÇGFÿ½†q±±±ŸïaœllloûØgþöÅÅÅÅÿ½†qQ1qp/aœTLTLØgöÃÃDCA=†pÐÐÐÐOaœ4,44Øg öÅÅÅÅÀ¾qqqqïœ\\\d àgþøÇGÆÇÿ¾†qñññÿ|||ûèg!úÇÇÇÈ@¾†r/aœ„„ŒûØg!!##þöÈÉHɽ†rRRR_””—ûØg%'%'þöÊJJJ@½†r’’’ŸïAœ¤¤¤¤ Ðg''+)þôÖöæðÎFNNSýð3””••ÿ{ å%$äÿÞƒ9IIIO÷ ÎRRRSýä3’’’’ÿz 䤤¤¿Þƒ9)))( ÎFBJFè3‘ÿz ä#ä#ÿÞÃ8èØøÿ÷°Î66:;ýì3ŽŽŒÿ{ ââââÿÞÃ8¸¸¸¿÷°Î..**ì3‹ŠŠ‰‚{ â¢"b žÃ8ˆxˆˆ'°Î ì3†…†…‚{ á!!! žÃ8¸¸¸¿÷ÀÎ.../ýð3ŒŒÿ| ãcccßC8èøØÿ÷ÐÎ>>>>ô3| ä$$$ _9 ÀÎBBBFð3’’’’| 䤤¤ _9)))/÷ÀÎJJJKýð3’’’’{ ä¤ä¤à^Ã9IIIO÷°ÎRRRSýè3””””z å$¤c ^Ô€·Ÿ äe#dß_C9III'÷Õ·†qqp0o„œT—ûÐg))))þôÉIII¼†rRRR_ï!œ”””” Èg%%%%òÉHIH½r/Aœ„|„ûÐgþôÆÆFÆÿ½qqq‘ŸïAœ\\\_ûØgöÅDÅE@½†q1Q/aœDDDD Øg öÃBÃC@½†p°/aœ\\\_ûðgüÆFÆFÿ¾†q±±±°/¡œt|lûègþúÇÇÇÇÿ¾†r„„„‡ûèg#%#%þøÉIII¾rRRRP/œ”””—ûØg%%%%þöÉIÉIÿ¾r’’’Ÿïaœ¤¤¤§ûØg))))þôÊÉÊÉÿ½ª0Óá•ÉáµÝîðÁœLœd£Ûàg!þüÂB¾Ã=A³½áœd””“óàg)))(üøÉÉÉÉÿ¼†rRRR_ï!œ”””—ûÈg%%%%þôÉHÉHÀ¼†r1ò1ÿïaœ|||| ÐgòÆÆÆÆÁ<†q±±±/Aœdddd ØgþöÅÅÅÅÿ½†qqqïaœD4D7ûØg  þöÃCCC@½†pÐÐÐßïaœ\\\\ ðgþüÆÆÆÆÿ¾†q±±±°/¡œt|lûèg!þúÈHHH¾†r„„„‡ûèg#%#%þúÉIII¾rRRR_””—ûØg%'%'þøÊJJJ¾r’’’Ÿïaœ¤¤¤¤ Øg----þôÊJJJ½†9÷H¾Ano®ÐNÐÁœt¤Œ£Ûàgùüøþ¹¿¸9ºÃŽ0ÍÁœ¤œ¤›óàg'''&üøÉÊIʼ†rrRrP/Aœ”””—ûÈg%%%%þòÉHIH@¼†rïaœ„|„| ØgòÇÇÇÇÀ¼†q‘‘‘ŸïAœdddgûØgöÅÅÅÅÀ½†qqq/aœDÁ†7xw»BºÂr2QQ/#­î Þ›â!C7ˆ§¸§ˆ@ÎJRJWýì3““””ÿz å%%eÞC9I9IO÷ÎNJNJä3’’’’ÿz ä¤$¤ ^C9  ÎB>B>ä3{ ããããà^Ã8ØØØØ Î6666ì3ŒŒŒ‹ÿ{ ââââÿÞÃ8¸˜¸¯÷°Î&"&&ì3‡‡‡‡{ áá¡áÿÞÃ8hhho÷°Î.../ýø3‹Œ‹‹ÿ} ã#c#_ßC8ØøØ÷÷ÐÎ>>>Aýô3ÿ} ä$$$?ßC9 ÷ÐÎJJJKýô3’’’’ÿ| 䤤¤¿ß9)))(ÐÎJJJKýð3’“’”ÿ| äå%%?ÞÃ9IYI_÷ ÎZZZ[ýè3––––ÿ{ åe%dßßC;œa`Ã7çG÷(ÍýíùÕâ 3‰uu† â`aaÝà‡xfàÎRVVWýì3””””ÿz å%%%?Þ9II9O÷ÎNJNJä3’’’’ÿz ä¤d¤ ^C9 )÷ ÎFBBCýè3z ããããà^Ã8ØØØØ°Î6667ýì3Œ‹Œ‹ÿ{ ââââÿÞÃ8¸˜¸Ÿ÷°Î&&&'ýì3‡†ˆ‡{ á¡¡¡¿ÞÃ8hhho÷°Î...-ýø3‹ŒŒÿ~ ã#ccßC8ØøØøÐÎ>B>Cýô3} ä$$$ßC9 ÐÎFFBCýð3’’‘’ÿ| 䤤¤¿ß9)))/÷ÀÎJJJKýð3’”’”ÿ| å%%% _9IYIX°ÎZZZZì3–•––ÿ{ å¥%¥¿ßÃ1^÷µ†lá›ÛÞÊKJÊ¿=†r²²ÒßïAœ¬¬´´ Ðg+)))òÊJJJ¼†rrRr_ïAœ”””“ûÐg%'%%þôÉÈIHÿ½rï!œ„„„‡ûÐgôÆÆÆÆÀ½q±±±°/!œd\d\ ÐgöÅEEÅ@½q111?ïœLDLD Øg þöÃCCC¾qqqqïÁœdldoûðgþúÆÇÇÇÀ¾†qòñÿ„„|ûèg!!!!þúÈHHHÿ¾†rR_””—ûØg%%%%þöÉIII¾rRRR_¤Œ§ûàg)+)+þøÊJÊJÿ½†rÒÒÒßïaœ´´´·ûÐg----øÊÊËK¾r²²²¯ïaœ¬´¬«óàg--+,þøËJÊ˽†r²²òßïaœ´´´´ Ðg----þôÊJJJ½r’’’Ÿï!œœ”œ—ûÐg%%%%þôÉIII½rR2R?ïAœ„„„‡ûÐg!!!!þôÇÇÇÇÿ½q±±±°/AœlltoûÈgþôÅÅÅÅÿ½†qqQqïaœLLTWûàg þøÄCÄCÿ¾pÐÐÐß\\\_ûðgþüÇGÆÆÿ¾qññÑð/¡œ|||ûègþúÈHHH?¾†r2””Œûèg%%%%þøÉIIɾrRRR_””—ûàg%'%'þöÊJÊJ@¾r’²’Ÿïaœ´´¬¯ûØg---,þöËKKK¾rÒÒòï¬´³ëÐg++-,þôÊËKK?½†rÒÒÒ°/œ´´¬´ Ðg----ôËKKK½r’’’ïAœ¤¤¤§ûÐg'%'%þôÉIII½rRRR_ïAœ”„”‡ûÐg!!!!þôÈGÈH½qñññÿïAœll|ûÐgòÆEÆÆ½qqqQïka˜uz¬ó‰èøg øÃCCC@¾†qqqqïÁœdl\gûðgþøÇGÇGÿ¾†qñññÿ|„„‡ûèg!!!!þúÈHHH?¾Ã9))'÷ÀÎNJJIýô3’’’’ÿ} 䤤¤¿ßC9)9)?÷ÀÎRRRSýð3””””ÿ{ å%%% _9iiio÷ÀÎZZZ[ýð3––––ÿ| 奥¥¿Þƒ9iiio÷ ÎZZZWýì3–•–•ÿ| åeeeÞÃ9iiio÷ ÎZZZ[ýè3””””ÿz å%%%?Þƒ99)I?÷ ÎJJNKýè3’’’’ÿz ä¤$¤?Þƒ9 ÷ ÎB>>Cýè3ÿz ãã㣿ރ8ØØèØÎ6262è3ЋЋÿz á âï÷ÀíEyì'ÙÏÿÀ¯†o á¡¡áÿß8hhho÷ÀÎ.../ýø3‹‹ŒŒÿ~ ã#c#Ÿß8ØøØï÷ÀÎ>B:=ýð3} ä$d$ßC9  ÷ÐÎJJFIýöÉIHÈ¿¾rRRR_””—ûàg%'%'þöÊJIÉ¿½r’’rïAœ¤¬¬§ûàg--+-þøËKJË?¾rÒÒÒÏ´´·ûÐg----þôËJËJÿ½r²²²¿ïœ¬¬¬¯ûØg----þôËKKJÿ½†r’’’ŸïAœ¤¤¤§ûÐg))')þôÊIIɽrRR2_ïAœ”„ŒûÐg!þôÇÇÇÇÿ½qñññÿïAœldtoûÐgòÆÆFF@½qqq‘ïMog{áœDDD?ûàg þøÅÅÅÅÿ¿q‘±‘Ÿï¡œltd[ûðgþý ä#dd?ßC9øÿ÷ÛÀ3’Žÿ|[xg!!þúÆðÎRVBMýð3’“”’ÿ|xC9)(hO÷àæNV ô1ï÷ÐÎV^6Qùð3––––~| 奥¥Ÿß9iiio÷ÀÎZ^VKýñmêoz˜f°@«Ã9II9Gç°ÎRJNIýì3’’’‘ÿ{©½áœ„ŒlkûâÛÔÞ©†a›fÆÆEƾq‘±q¿ï^ÃÃÃÃ@¾!nxgþüÅÄÅÄÿ¿XWØ×Áºžp<«’yþ2>D³ýПïáœ|„tûèg ÷þúôyÌó rYçø`éÜô*Ýs»ßàƒ8Ègçß÷ðÊüðúüýü2:7¾oÿ‚;_W=ÿ!£Ûk ¿àC9ˆgÿ÷ðÎ ýÿÿýü9{u>úþ0›Û7Ç­ÿÀ‡O'¢–Ï:×?ArrñrÏ¡œ¬´¬³ûâÛÃ8Èg·7÷ÐÎêýü3ÿ}…„ ÞßÝÿàCw7ÓÌìgŸàC$d›½t[óðg%#'%ù á^=®Gÿ‡·žw<”yr»þ3ƒ…u}~ àŸŸŸßÃ7wG×ßÿðÈÚÌæ}—þ8g<ï\¦µ]Æaœd\d_ûÔ;zo<æåw¾³žl<ˆyaÿð«ïûá»Û;žY]þúÅÅÅÅÿ¿qqqqoïÊêÝ\¨8Õp2;~‰—@.t3‚{üg üúâß]þú¥ç4¸ýÏñOF{#ÎÞ¾÷È ÍÞî%ûþÖðöèôÇ@¹h2ÿƒ«š¨×>ĆGw÷Á¾?·¾A¹¦>AñßïÁEùçƒ@ a«ëäŸ÷ÊJJJ¾+½á››Ÿüûãxgh€×…€ ž>ñ(7ÃàÐrR‘òoïpáñË!”#0eþüž%†gîF{üXjÜ÷¦ÇÀ¾À·¾á]ø«†HÌ¡’'ü { ßž¨÷g¾Ãáó•Ã'ÖËýô7=Qz‹ßâWþÿ¼3†„††ÿ| ßšÝæèÐÎ...-ýø3‹ŒŒÿ~pR±†H ‘ûüPzàgõ ÍùïðpÎF.F1ýô ¹92tr0dÿðó糆hp ß"ᜌŒ”“óàg#%#%þúB¹2‰l ¿àƒÏ’ ¹<3|‹ ]_öùÇýP+yð¢w¹êžˆÁ2yàÌ2ᜬ¬¬«óèg))++þúû!çãƒtv°Í¤3z‰ ãd£$Ÿ_9)9/÷ Þ%¸2‰n ¿ßƒÑ˜ôw*†o‘ËåïVðÎFBBCýè3z‡¸¹%ÎŽMwüzKÜ^÷Íö&ÅÅEE½ð-!”Heþú£©½!Uïñ+ÿÞÃÃCþ+†a˜gþüÆFÆFÿ¿q±ßïÁí’™Ã$?Ç­oÏY ÿÞÿÆÆÇG¿>À›£’C'G#†_ðÏI{ f’»o‘0ÎFJJIùòÅ6†QMá—üz•4G+o‘kêÞ­ðÎRRRSýí`™ð¦>¸3óÃ0®+* žÊJJJ½†r’’²ŸïU7†aœœ|,'ûègÿþú ¤|xõ<©ÿ> ´h/i ÞãX‡ÉD¾Qåô3’‘”’~xáÛC(—5¹ýô8Gr¸f’®¾Æ¯~|{Ëàg!#þôÈGÈÇÿ½CÝš9¹42ÿƒH{ˆf’÷Íö&ÅDÅÅÿ½ð-!”Heþø£ª½Uïñ+ÿ}xg  þö®ýÁœ\\\_ûðgþýg ÊäǬ†oïX ß^ÿ ÇGÇG¿?qñqñ¯ïîŽH œÂ¤†náš@fì¾ÄC9)))'çÐÎFJJEýð7Šo ¢›Ã/øôG*hŽT ß"×Õ¿ï†r’’’ŸïA¼¤;¤áÝþôV€Éœ2E}‰xPƒÜòç<3“””•ÿz[ ØG–ÓÌ' `ƒ7g–÷ç¨Íþ5ñü3…„ÿ| `° ñãÏ ç¼8A{Hf„ξE†H©H§É¾>rrRr/Ïa¼SheÞA>i Áš3–7èÐÕýò/yÿ ä$$$ žÃ9ùÿ÷¨{›“æä§Á‡¤½Ä3J{‹ßbaœ\\\WûÐoÒA4†_2«ÑUÿ¿_^ÃÃCC½«†a˜gþúÆFÆF?¿+×+pjºãÅ0ÈÙþ =`3}z¨fü÷øhgþøèä ÉÕÉA“ü z;ÝŽ÷7¾ÄC9)))'çÀÎFJFMýì7Šo ¢[C/øôG*hNR ß"×Õ½[Ã9)97÷ÀÎRRROýè1ÊCºJýì5f Y$ø° Ï@øoæèvPËþ8O<²ô5ǽņ¯o†|“Óàg')'&úõrÈdøå`Ëþ7Ch ÐYÃ7ØÀÖ)òqo“}| ääd¤Ÿžƒx¦ÀÊ%¨2‚ o€âñÁœ„„|{ûØg!þõnnJsƒ’]ÿðô§¸½)î/}‰ âc"bߟ8¸¸¸Ï÷ÀÞ ¤2g  _ƒtUG¢)=þ%~¿ï áááá¿ÞÕÃ0ζðνåËþ:P Œ×ãÏÝÿž¼=)í¯‡[t=ÍÈÁ“[C/øôG¸gÏi ß"ØÞÉIHÈ¿=CxfÊŒ2ÿÿ>rXfrä0Íò05y|{ƒâß ƒ9)99?÷ ÎRNNOýð7‘‚tsÓ¿ßCUàÈõT28~Œ€üy1ÀÍS¡Ä3˜Ã(–ÿ?ýø;B[ Ó#ÕC7ØÀÖ òNuÑOoŒdTûèpìäàÉÍb?þ7>d Ñ—7è¥÷†aœœœ”ƒûÀR€°|2ø÷†è !™ÒPfõ 'gƒ0È3Ž~{ ããc£ßÞÚœ†æ;þáè¯lyóØ^ûÆønúÀ;«†_ÿá¹òxfnŽ÷è ÕÕð­O| áá¡aÞÕÞðÍ¡½‘¯þ3uvs|ÿ Þ_`â_ßÇ#êñðoßáeíOq>ðÿÞðÇøè‡÷÷Ðö'$Ÿt>Úþ=ûÛ%Ìûì8b||[äKëî¼/9ùÈÿûøz1ôšöãíçßbV§À¼ƒ|¸aŽ!ÑÑ/Ÿï¡ëèçÝO¸Ÿ~‡ ”kÜžæ}íê½í@ ‡³Ç®ƒ>ìþ0˜]«œ¹¿Áo°OoÏÏÁŸÿü$?ûàc}pІ[>Ã^ø}äûü fû üþÐ '‡.^só‘ÿø £ bŸ®€áhÞ©ÇÃ8èèèï÷°Î:6:7ýð3†y‰ÿ|brQ÷SíÇÿàÃÓO°½Àû±÷Ø`ÄôøWøgçØnà´ç‡ÿïáéGÔ·Ÿo>ÿ™Þöèúùÿ á¡a ^ÙÓï†qQqqoïÐÎ":Cýô3ŒŒŽ}†pðò2?ï­ï†rïžÈÉÉJ?½†r’’’Ÿïœ„d¤Ÿûài~0ü¬¯ûàg)&þúÇÉIɽ†rR2RïAœ„\œŸûàg ''þþÃÄÉÉ¿¾†qÒ2rŸïXg#''þôÉHII½q‘R2?ïB°!ÑÐÎ:>:?ýè3záœ>>?ýô3ÿ} ä$$$ßC9 ÷ÐÎBBBAýîÉHÉI½rRrR_ïAœœ””—ûÐg%%%%þôÉIII½rRRR_ïAœ¤¤œ§ûÐg))))þôÊJJJ½r’’’ŸïAœ¤¤¤§ûÐg)')'þôÉIÉI½rRRR_ïAœ”””—ûÐg%%%%þôÉIII½r22ïAœ„„„‡ûÐg!!ôÇGGG@½qÑÑÑÐ/Aœdddd ÐgôÅÆFEÀ½qqqqp/AœTLTT ÐgôÄDDD@½†qñð/aœ<4<4 Øg öÅEDÄÿ¿†qqqqoïÁœdd\_ûàgþúÆÇFÆÿ¾†qÑñ±ÿ|||ûègþúÇÇÇÇÿ¾†qñññïï°ÎBBBAýè3‘‘’ÿz 䤤¤¿Þƒ9)))/÷°ÎJJJKýè3’’’’ÿz 䤤¤¿Þƒ9)))/÷ ÎJNJKýè3““’’ÿz†rrrR_ïAœœœ”—ûÐg'%%%þôÉIII½rRRR_ïAœ”””—ûÐg%%%%þôÈÈÈÈ@½r2ïAœ„„„„ Ðg!!þôÇFÇG½q±Ñ±°/AœllllÐgôÆEÆEÁ=qqqQPOAœTTTLÐgôÄDDDA=†qðOaœ<<4,Øg öÄÄÄÄÿ¿qqqqïÁœ\\\_ûègþúÆFÆFÿ¾q±Ñ±¿ï°Î::6;ýô3ÿ} ããããÿßC9 øÿ÷Øg!#!!ôÈÈÈH@½r2R0/œ”””—ûØg%%%%þôÉIII½rRRR_ïAœ”””—ûÐg%%%%þöÉHÉI½†rRRRP/Aœ”””—ûÐg%%%%þôÉIII½rRRR_ïAœ”””“ûÐg%%%%þôÈÈHÈ@½rïAœ„|„t ÐgôÇGGFÀ½q±±±°/AœllllÐgôÆEÆEÁ=qQQQ0/AœLLLGûÐgôÄDCÃÁ=†qððÐOaœ4,4,Ðg ôÄÄÄÄ¿¿qqq1?ïÁœ\\T_ûègþúÆFÅÅÿ¾†q±±qll\d ègúÇGÆÆÀ¾†qññ±°/¡œ|||ûèg!þôÈHGÇÿ½†ròïaœ„Œ„‡ûàg%%!!þøÉIHH½Ã9))( ÎJJJKýè3’’’’ÿz 䤤¤¿ÞÃ9)))/÷ ÎJFJGýè3’’‘z 䤤¤ ^ƒ9)))/÷°ÎJJBBè3’’ÿz äd$$?Þƒ9 ù÷°ÎB:>;ýì3ŽŽŽŒ‚{ 㣣# žƒ8ØØØÈ'Î66.. ä3‹‹‹‹‚{ ââ⢠žÃ8¨˜¨˜ Î&"&#ýè3ˆ‡ˆˆz áááá žÃ8xhXX'°Î è3‚‚‚z âbb"?߃8¨˜˜Ÿ÷àÎ*.*+ýô3Œ‹‹‹} ââââÿßC8¸¸¸¿÷ÐÎ.2.3ýô3ÿ}†q±±±¿ï¡œ||loûègþöÇÇÇÇÿ½qòñð/aœ„„|‡ûàg!!!!þöÈHHH½aœ””„„ ÞÉIHH½Ã9  ÷ ÎJJBCýì3’’‘‘ÿ{ ä$$$ ^Ã9 øø ÎBB>>ì3Ž{ ã㣣`^Ã8èØØÈ' Î2222 è3Œ‹‚z ââââàžƒ8¸¸¸¸' Î&&&& ì3‰‰‰‰‚z âb"b ^ƒ8ˆxˆh' Î ì3…„†…‚{ á!! àžÃ8ÿø'°Î""ýø3‰‰ˆ‰~ âbbbßC8¨¸¨¯÷ÐÎ..*/ýô3‹‹‹‹ÿ} âã"ã?ßC8ØØÈÈÐÎ6622ô3ÿ} ãcccßaœ||tt ègöÇÇÇÇÿ½rñÿïAœ„„|| Øg!!÷ ä$#ãÿÞƒ9 øÿ÷¬3‚z ä$#ä žÃ9 ' ÎBB>> è3‚{ ããããàžƒ8øèøè'°Î:::6 ì3Ž‚z ãccc žƒ8ØÈÈÈ' Î.... è3‹‹‹‹‚z ââ⢠žƒ8˜˜˜˜'°Î"""" ì3‡‡‡‡‚z áá¡á žƒ8hhhh' Î è3„ƒ‚zû[›Ýÿÿÿÿÿÿÿÿÿÿà&å œ±"„äh è!Änëop¡¸Sp`fýí÷wßvÜcp›ƒ·"pæã'v ¼;±8XKŒ{°w?q rn“¤ðw›˜wIì3‹‹‹‹~zpRíºOÜ(áœlltkûë÷Ã8øù ÷ÇIäíîîî5»¼ž{µÝ'žôöëÞO¿}Î媵ÕÛ“p×ß ãä#äÞÝ_wßw}à³×x^æû´û—q_}ûï¹mk·7ßs¹Ýß}÷}Îóz¸=ÛwݾûïÅEÆF?>_r¿Uk«·ÜîW8g!þöûî]÷w]ÝÝîí¹“ÿ¾å}÷Ü6ûïÕZêçžß}÷î›»žÉIÉHÿ½>êíï¾ä+î›ÛÀ}îí_y<÷wÞo7ß~¯÷=½÷ÞO73tÝ7]ÕææîWm͸Þþ齺W·w÷W›ï¹_y¾ÂÃÂýݷ"÷ËþáOþôõ¼/¹„}ÿÿÿÿÿÿÿÿÿÃ9IIIO÷¯ÿÿÿÿ ä$$$?ßÿÿÿÿÿÿÿÿÿÿÿÃ9))ŸÿÿÿÿÿÿÿðÎ...* ïÿÿÿᜄ„|„ ßÿÿÿÿÿÿÿÿÿÿÿÿÿø§ 4Ò"„èh =?ÿÿÿÿÿ³¾œMºzãžö[§©ï³¼3e¿žùæpÌ3û;Ã6œ ÛßÚÞÞý­íïöw½ïíog éÆúsÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷w¿ÿÿÿÿþã^ÿÿÿÿÿðÎVVVWýííûÀûÀÛÀ ÿÿÿÃ9)))/÷ßýÂo¾ûÓÓ—ÿÿÿÿ÷Üîwßr'Ã9YYY_÷Ïÿÿÿÿ¾û•Îû‡ÿÿÿÿÿs¾å}Îÿÿÿÿÿ÷ßy<ßÿÿÿÿÿyÿÿÿÿÿÿþðMà¯ÿÿÿÿþà×NpKÿÃ9)))'÷Ïÿÿÿ¾ûáœå}÷+îpRìnmÕÕVk«»÷ï'›û÷.ã»n7¿ÖSÎÖûïï¾å}÷;ᄄmuws}û÷᜔”Œ“ûã￸ÊÊÊÊ?½¼-áoîäN[￾ûï¾ûîZ Ú﻾û•÷ß}÷÷;«ûŒw§›¤þûî]÷Ü÷ß}ú ÚêíÀMæû÷ß}Êþç}û±»Nßr¹o¼}÷WWß|3†‡†ˆ}|ª k«¯ï¾ûᜄ|„{ûÓ÷÷;ýÎí¿½wCy¸m÷ß ädd$ž¯¼!îð—„9\#h ×"Î=îÆûîÆó}æòsÃ9(é(Ç÷§"xg›…Ã9999/÷ÇwAÞÆÜ®0îÆíÝ^o¸†äO'÷+Æí¾ûˆnfûîÞ7·Ã8ȸÈß÷Ç?}ý÷Þ}åÿ߆qQÒR?ïAœ„Œ„ûÖûû÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†rRR2?ïAœ””ŒûÏÿÿÿÿÿ†rïÿÿÿÿÿÿÿÿÿÿÿÿÿð? æó"„ìh >?ÿÿÿÿÿ´´âHXè3ãÞ”¡c Ïzà§ÚÞªw§ àðÞôÛWާƒ7¸ ö°Í4Î\sÃ4Ø\ϓŋø3zVéêyíïÒoþ9ëôãö·¦Ý<÷½½û[ÓNžþ9ášwüu<½½úiÓ×÷¦Â^½ì·OÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþðÿÿÿÿþèïÿÿÿÿÿÞx&ÊÊÉÉÿ¾ÿÿÿÿq‚¯ooÿÿÿÿÿÜïÜmØ;ÇÿÿÿÿýÂo÷ÿÿÿÿþáï¼x=Øÿÿÿÿÿ¹ßy9ÿÿÿÿÿ÷ßÿÿÿÿÿÿÿûÂÿÿÿÿ÷¸0Üÿÿÿÿÿººnßáœ||toûç†r2R2/”””—ûåãûÃþðïð#ýã{øgþøÄÄDD@¾]ƒC8ØÈØÏ÷àÎ62.'ýõÂÁ܃ܼÂFã¼͸Æìn0w‚¯¼Þ=ÇxÞ߸PÜ#º¡îpY¸(÷àÃpa†qñï® d9ðÎ6665ýõÁÉÚ}÷ÞÞœw;»´í8Óï+·÷·ä÷"q7÷6öáNí;O¾âº÷ßrÜï¾ýÎåy9÷;¾õ†r²r²ŸïW]Ûwrîww°Î222/ýêû•ûƒ{ï¿s¾þûï†r’’roÏww;¿¼o§ßr¿¾ûáœd\d_ûËŠûï»­¿¾ûᜌ”Œ‹ûÛ÷÷ß»¿p{¶ñîJâßv»ï¹n¯¹Ã8xxˆ‡÷·Ü¬oÜï¿s¾þûï÷ß»ºo÷]Ñ< ÷ßr¾ûï¾åwn >à^å}û￸M÷÷}÷Þo¿pwuÝÜ® ß}ç}÷Ã8˜ˆXwç·W`5°qn;ï¾ãoo¾òp}÷ßp½÷Ý·½ÛîÞýÄ÷ÞO¾å}äýànÿß¿¾ÿýãxÿ÷‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüñ /Þ„ðh & !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿôi x,‚Æ€P—’È,††}£H(KÀÉd1‚…X,‚ȈˆÜ)Aÿ×,qä/{óyøÞR#Ç×À%L`_8áò P•P }å€Ð~ŸRúNÈ.‡à_è¯Gê×,s@(KÀÉdADÀ¾Ñ°%àd² AB^K ².2òÀ¡/%XÚ ð2Y‘±°/”i x,‚ŰCV¹dFÄ@¾t?WÀ |>Ø~÷‘€I¯€JÐÀ¾r . ¼-@ûdP?IÖ Zã“ð°/”i x,‚ÆàP—’È,Ž}£€(KÀÉd8„¼ –xY!!÷GP—’È,n x,ð²BB¡VK ±Pþ¹c£! ^úy4¯Û&ó”€I@²€K(À¾rðh?PûÛ%äü åë–Ac(U’È,…Ž}£`(KÀÉd8‚„¼ –xY#!÷GP—’È,i x,‚Éè¾§ÿ\±ÇC×ÀŸp?÷cº^õš?V¹cœOÀÀ¾Ñ¨%àd² B^K ²2BòŽ¡/%Xà ð2Y‘ñð/xg x,‚Äè_õƧà^ùÈõè´¾“¸Ÿv?÷EÐCV¹cšAB^K ² .ò€¡/%XØ ð2Y‘±p/tl x,‚ÆpP—’È,ŒŠ{¸!«\±È¾“À¼{æ€Ð~•ƒAúÖ}`_9XUob–Ãð/–Pÿ\±Ì€¡/%Xô~ö@¡/%XÊ ð2Yа/˜]5k–Abhú厂z?ûÏG¯/ƒõ¼û!øÞX% Ð~¯Ÿb?ûÍ ýDô¨û™øê*×/‚µË ±ò úŒ`†^K ±ˆËÀÉd@ÀÀ¾Q„Ë×,‚ÆCV¹d?½À¾N""&&òpñ11_‡Š‰|Ž ìüLOûíÏ¿ŸŠŒÿ}œDd\ ôâââã?ßg÷8ØÈØØ¹ÆGFÆÀ½Î2"62ò8X3ñÑð/qBŸ‰Žÿ{œd|„„ Üããä$`_'!!!!÷9 ¹ÈÈII@½Î6.FBò‘áÏÈHÀ½Î.>FJîr2RRP/“‘’’zœŒ|”„Ôãb¤$`^§#!÷9 ÷¹ÈHHÈÀ½Î>2>>îqq‘ñÿïsŽÿ{œ|d|l Üã"ãc ^ç÷8H8ȸ'¹ÁÂDÄÀ½Î&&'ýîq1_ïsˆ‡‰ˆ{œ$ D,Üßÿá¡ _g þý8HHH?÷éÁAA@À½Ïýýýþ îq1110/³‰Š‰Šÿ|œTTT\ ìâ¢ââà_gû8¸¸ØèÉÆFÆÇ¾N::6>òqÑÑñð/“ŽŽ{œtt|„ äããä$ ^ç!!!÷9 ¹ÈHÈI½ÎFFJKýîr22RP/s’’’’ÿ{œŒŒ”—ûÔä¤ää ^§''%%õ99))(¹ÉIII½NJFJOýêr2RRP/S“’’’ÿzœŒŒ”—ûÜädd¤ ^ç#!þ÷8øù ÷¹ÇÈHH½Î>:B>îqÑ‘ñÐ/sŒŒŒ{œld\_ûÜã"ââÿÞçþ÷8˜˜˜Ÿ÷¹ÄDÄÄÿ½Î""& îpðððÐ/s‡…††}œ,4, äà ¡! ^çÿÿ÷8˜˜˜¯÷ÉÄÄÅEÿ¾N*...òq‘qqﳋ‹ÿ}œltlt ìãccãÿßgþû8øøøøÉÇÇÈH@½Î>BBBîr/sÿ{œ„Œ„Œ Üäd¤$¿Þç%%%%÷9)))/÷¹ÉIIÉÀ½ÎJJNSýêrrRR_ïS’’’’ÿ{œ”””” Ô䤤ä¿Þ§%'%%þ÷99)9(¹ÉIII½NJJJKýîrRRRP/s‘’’{œ„ŒŒŒ Üãä$$ ^ç!!!þ÷8øéÿ÷¹ÆÆGǽÎ..67ýîqqqqïs‹‹‹‹ÿ{œLLLOûÜâ¢b¢Þç÷8xx˜x'¹ÃÃCÃA>N îpÐÐOsƒ‚ƒ‚‚{œLTTOûäâ¢ââà_'þù8¸¸ÈØÙÅÆÆÆÀ¾Î6:::öqñññð/³}œ|||| ää$$$ ^ç!!!!þ÷9 ¹ÈHHHÀ½ÎBFFBîrR_ïs’’’’ÿ{œ””œŸûÜ䤤äà^ç')))þõ9))9O÷©ÉIJI¾NJJFIýòrRR’Ÿïs’’””zœ””œœ Ô䤤ä¿Þ§%%%%õ9)))(©ÉIII@½NFBJJêr2ïs{œ„|„ûÜã㣣¿Þçþ÷8¸¸Øß÷¹ÅÅÅÅÿ½Î&&./ýîqQ11P/sЉ‰‰ÿ{œL>>Bör0/s‘‘ÿ{œ„„ŒûÜäd$d¿Þç!!%%þ÷9 ))/÷¹ÉIÉIÿ½ÎJJJJîr’’’ŸïS””””zœ¬¬¬¯ûÔä㤢_ßgÿüý9HéG÷ÉÊJJÊÿ½ÎNNROýêrRR’ïS’’’’ÿzœ”””—ûÔ䤤¤¿Þ§%%%%õ9 )©ÈHHȽNB>B?ýîqÑÑñÿïsŽŽÿ{œtltoûÜââââÿÞçþ÷8¨˜¨¨¹ÄÅEDÿ½Î&"&#ýîqñïs††‡‡ÿ{œ4,4/ûÜá!!!?Þçþù8¸¸¸¿÷ÉÆEÆF¾N2627ýöq±±±¿ï³}œltt| ää$$$ _'!!!!ù9  ÉÈÈHÈÀ¾NFJJJòrRRR_ï“’’’’ÿ|œ”””” Üä¤ää ^ç%%''þ÷9IIIO÷©ÊJJÊÀ½NVVVWýîrQ±ïÏ“†‹|~œŒ¤¤«ûÜåeeeÞ§))))þõ9IIYO÷¹ÉIIÉÿ½NJJNOýærRRR_ï3’’’’yœ”„”„ Ìä$$$?Þ§!!!!õ9éÿ÷©ÇFÇG½N6667ýêqqq‘ŸïS‹‹‹‹ÿ{œTTTL Üâ¢b¢ ^ç÷8ˆxˆˆ¹ÃCÃÃ@½Îîp°°/s‰‰‰‰ÿ~œ\\\\ ôã#c#ßgû8èèØï÷ÙÆÇÆÇÿ¾Î>>>?ýör2?ï³ÿ}œŒ„Œ‡ûä䤤¤¿ß'%%%%ù9)))/÷¹ÉIII½ÎJNJOýêrRrRïs””””ÿ{œ¤¤¤§ûÔåe%e?ß')''þù9(èGçÇùÇÈÃȼ¾ÎRRRMýòrRÏÏÓŒ}œ|¤Lûäå%%%ß'''''þó99)9/÷™ÉIII¼ÎJBJCýêr20/3‘‘ÿ{œ|||| Ôãã£ã ^gþó8ØØØÈ©ÆFFF@½Î*&*'ýîq111?ïsŠˆ‰ˆÿ{œD>N æ æppQÒ_ó‹“’•ÿ|œ¬¬¬¯ûääå$å?Þg'%'%õ9)))/÷™ÉHIH¼ÎBBBBærïs{œ|||| Ìãc£c`^gþõ8ÈÈÈÏ÷¹ÅÅÅÅÀ½Î.&.&îq11/sˆˆˆˆÿ{œ<<>>>îq±±±°/s‹‹‹‹ÿ{œd\d_ûÜââbâÞçþ÷8˜˜˜Ÿ÷¹ÃÃÄCÀ½ÎýîpÐÐÐßïs‹‹‹‹~œddd_ûôãcc#ß'û8øøØÿ÷ÙÈHHH?¾ÎBBBAýör/³‘‘ÿ|œ””Œ—ûä䤤¤¿ß'%%%%þù9)))/÷ÉÉIÉJ¾NNRRRòr’²’°/s””””{œ´¬´·ûÜ奥¥ŸÞã{t‡ÿûì.nÇßÝá&úéøí 7Hg×x)ÄABD<ÁÎ>>Uáþr²²ÒÏïs••––zœ¬¬¤§ûÔå%%%?Þ§'''%þõ9)))'÷©ÉHIH½NFFBGýêrï3ÿzœ|||| Ôãccc`^§ó8ȸȸ©ÅÄÅÄÀ½Î&&&*êq111?ﳈˆˆˆ{œ<447ûÜá¡¡¡¿ß'þý8ȸÈß÷éÆFÇFÿ¾Î:6:>öq±ññÿï³ÿ}œ„„„‡ûìä$$$ßg!!!!þù9)))/÷¹ÉIII½ÎJJJKýòrRRR_ï“’”’’ÿ|œ¤¬”§ûäå%e%Þç))))þ÷9iiIO÷©ËKKK?¾NR6Z[ýöqQÒÒϯӑ—–|ÿœDT¬«ëôã¤eeŸ§)+/,øû9iiio÷©ËKKK½NRRRSýêr’’’Ÿï3“’“’ÿzœ”””—ûÔä¤$¤?Þ§!#!#þõ9 ÷©ÈHHH½N>>>?ýêq±±±°/S‹‹Œÿyœd\d_ûÔââbâÿÞçþ÷8˜˜¨Ÿ÷ÉÄÄDD¾NýòpÐÐÐßﳋ‹‹‹ÿ~œdldkûôã£ccß'û8øøøÿ÷ÙÇÇÇȾÎBBBAýör2ﳑ‘ÿ}œ”””—ûä䤤ä¿ß'%%%%þù9)))/÷ÉÉÉÉIÿ½ÎJNJRòr’²’Ÿïs””••ÿ{œ¤¤´³ûÜ奥%Þç--+.þ÷9iYio÷©ËKËK@½N^ZZ[ýîrÒÒÒßïs—–––ÿzœ´´´´ Ô奥¥¿Þ§)))(þõ9II9?÷©ÉÉIɽNJJJKýêrRRïS‘‘ÿzœ„„„‡ûÔä#ä$?Þ§þõ8ØØØß÷©ÆÆÆÆÀ¼Î2.23ýêqqqqïs‹‰ˆ…|œLD4GûôâaâaÿÞç  ù8hhhhÙÅÅÅÅÿ¿N26.3ýúq±±‘¿ï“ŽŽÿ}œ|||ûìãä$$?ßg!!!!þû9 ÷ÙÈHÈÈÿ¾ÎFJFIýòrrRROï³’’’’ÿ{œ”””Ÿûää¤ääÿß'%)%)þù9IIIO÷¹ÊJJJ@½NZZV[ýêr’’²ßïS––––ÿzœ´´´·ûÜ奥¥¿ß'---+þ÷9iYi_÷ÉÊËJÊÿ¾NZZZ[ýêrÒÒÒ¿ïS””””ÿzœ””¤§ûÔää¤äÿÞ§%%'%þõ9) )÷©ÈHÈHÿ½NBBBCýêrñòïSÿzœlltwûÔãccc`^g÷8¨H§ï÷½¼9er¡ï÷ù!šßÿÿ8ˆxxo÷ÉÃCCBÿ¾NýòqqqqïÓ‹‹ŒŒÿ~œdldsûìãc㣿ß'!þù9 ÷ÉÈHÈH?¾ÎBFBAýòr2ï³|œ””Œ“ûä䤤¤¿ß'%%%%þù9)9)?÷ÉÉJIÊ?¾NRRRSýîr’²’ŸïS””•”ÿzœ´´¬³ûÜ奥¥ŸÞç----þ÷9iiio÷ÉËJËK¾NVVZ[ýòr²²Ò¿ïs––––ÿzœ¤¤¤§ûÔå%%%?Þ§))))þõ99)9?÷©ÉIIɽNJBFGýêr22ïSÿzœ|||ûÔããããÿÞ§þõ8¸¸ÈÈ©ÅÆFF@½Î%ö.ýó ÎX>öêýþ&ÇÁ>Bÿ¿ÎýöpÐððßï“„„„„ÿ|œ\\\_ûôã"ã#?ßgþû8ØØØß÷éÆÇÇGÿ¿NBBB?ýúqòòï³~œ„„„ƒûìä$$$?ß'%%%%þù9)))÷ÙÉIII¿NJJJKýòrR’RŸï“””””ÿ|œ¤¤¤ŸûÜåe$äÿß'-/--þû9iiio÷éËKKK?¾NZZZ[ýòrÒòÒßï“–––•ÿ|œ´¬¬§ûäå%$åÞç))))þ÷9IIIO÷ÉÊJJʽÎRJNKýîrRRR_ïS’‘ÿzœŒ|„{ûÔãããã¿Þçþù8ØØÈÏ÷¹ÆÆÆÆÿ¾N6263ýòq‘q‘ï“‹‰ŒŒÿ|œ<4L?ûìá¡â"?ß§ý8xhhhÙÀ¼>4¿N&2'ýúq‘‘qŸïÓ‹‹ÿ~œl\Kóûöb¢\8ÿœTkÔSûìãä£äß§!þý˜È·“ÍǟߤŒy®Šÿ|œ”tDûì⡞ßñzósAïø"ä\OA¿ÎRRBGýörqñpﳋ†}xÿÄ!èCÎmG¿ÿó Øyô÷ûôåe£%?ßç+-+,þù9iiiO÷ÉÊÊÇÄ?¾NB2 ÿýöqï¯ïÔ‡=yåÏÿÿ1RMçŸÿÎRZ*Iýòr’Rr_ï““‘‘‰ÿ}–:!õ¸÷ûôÑÇžÿß§ þý8ˆG×÷ê?ž}<äÛþÿ ð÷û+)ï÷ù"cAÿ¾Î2../ýòqq‘q?ïs‹‡ƒwÿ|ÌûAæ3ßï’@Ã8¾ýúpÐÐпﳅ~r}í±Êg”\p{þ®ï‰u|K÷üâ¢â¢ßßçþýxF÷D;;ÿþÊnF<¦?ÃÕ’ºp3ƒ~„œtttkûåáôï÷Û*G$Q Ÿâ4Ë\ú˜ö×¾ÃMññîõú7×Ãñq¯ïÐݱÅ<ÇÿÀíQ–¹UÈÕÏÐõ=Ç\èû 7÷×Èw×ù¿¿ÇH¿áìûQøø3ÿïð•×ë™<ô¯ø]>×H2WC½òr²²’ïs””ÿ|’ ÑåÍïÓwÿ{ÿœ$”£ûüàÞ$¢ß¬ÈæÎ.P‚ÓÅtrítßag%%!$úó9Y§÷ÎØäÇ99(2ÿÿéÕÍo>zãßbføöêüù7·ØhÏ÷Èß^ÅÄÿ¾Ê΢ú·ÿ…Zç'¡®}Ïðó†Š~~œdDlCûÕßšÝàï÷Û&¹òc?á*ÆøÏýúpðð¯ïq¿6: ×ýò©®2YqÔ 5]_êø—ÿùÅÆEÅ¿Î2:29ýöq°Ñ±ÿõb Žš#Çèž°Á½h3ƒ{ô,ã£ãcßÞç þùØC#g3G‹è›kÒC7g¾DN:6AñörR22Oïs‰’ÿ}ìá‘ó›Ü€>Ãôg¶=3p{ì<ád"¤Ÿ_§)+)+þù9XùI?÷®îä§?9D2ÿƒé¡›ëÒî÷ȉÉÊÉK?>NRBVMýò8h#ññïï“‹”’•~}œ¬¬´³óìå$e$ÿß{û•C(,†Oð]%îïE{ˆfû 8ù(éGÇ™ÈÈHÈ?½÷×+_îZ ¿ÿîv°óÕç¾EÕññp¯{ÿœ||„‡ûÌã£cã¿ÞoÚè—G¾ôw%†ia’+ߢjêø—Ä¿¿N..*/ýê8—ÇE>ÿ¾Õh2@] ájÂÀ°pO㇆†‡~{œ3ì;ïûåXÃ$É®‰q|Cô â¢â¢ßŸ§þû8؈Øg÷ý4GA‘럢:ÐgõÎ ïг~|œtL|_ûçi Ô¹þ'©†oïZ àÞ÷ 9 ×ÉÉIHÉ?½ÎF:JAýóº¹2vr@dý ÑÃ7§¥oOz†œ|¤|£óäå%e%?Þg)')'þòx7+†PnW ¿à_ÑÞèôg¹=ò*r²ï“•”•”ÿ|œ¬¬¤›ûÔå¥d£ŸÞç-)þý9I(˜÷ÞþåpÉÑÉÁ—üA{pf~öÐÍò&q’q²os‘‘‘‘zÿîZ ¿Ü¶ÿô7µhk ß"§!"øû9 ÷÷¹ÈGGÇÿ¼Þ-áÑnîÿ{éá’#Ô$G¿ÃÕÁñ.‰}œT\TOûÌ⟢ß*¼ ®†H_ðµa àXßý 8xhxW÷¹Ã>Ã>ÿ½U„2@` ÿá*âø—Ä¿@Î..*-ýöq‘±‘¿ïÓ‡ŽŠ~í!‘óšC#Ç?Ci`3ƒW ÿÞý 8Øèøç÷ÉÇÅÇÅÿ¾v ÈùÍA‘ëŸáúÐgõ`Î ï0“‘~{œŒ”Œûää¤$cÿß;«’'w$†_ð½$3zzHfô÷ˆiÇÉÈI¿½ÎRRJQýêr’r’ïGƒr¸eåpËþ ýîOF{“ß"g!)(üù9III÷ÌÉDÂr=û8'ö×_÷ù¿¿ÂÿÎþ"#ýôîNM Ÿ°Á¿Ÿ½´3A{hf÷8Ù8É'ÇÉÈÈIH?½÷.P.Z  _ú#ÚÃ4Wµ½ö*q21R/¯“ÿ|œ||„wûÕãÝêï÷®ž!½02D ß¡ªàø—ľ@Î&&*/ýâq/Ñoÿï•] —$øZ²p,¡œô,ááa¡ßÞçý ûþ÷VÈù€2>ÿƒ«‹âZß ý8¨¸¸Ç÷ÙÆFFÆÿ¾Ëç÷û38ñËÁ‘ÃüOV ÿÞª¿½þqñѱÏïsŠ‹}íA‘ë›#÷?Äu`ÎêáœÞ¡§!! ú÷9 ÷©ÈGÈGÿ¾ww%N®K ¿áºHfôôÍÝïÓ“’~|œ”œ¤§ûÔå$䤿Þå`Ê ÊÁ“üú3Üžˆ÷0Íî*qò‘òoÏw“…tƒë¿ßtѬ¢äçÿÂÕ¥ÿîïÿ„œt”¤£ûôääåd¿ß|–ƒ'ç*†_ð}í¡š Û7Ø©ÅÉÅɾ>ÎNBJAýïÁ9h2ÿrÈeÿÑÖô7µ½ö&qR1r¯³‘ÿ{œ„t|ûÕâ]èèΖ"iNE ß¡êâø–÷Ä>AÎ*2&/ýêñoΊ|wûíVÃ$Èÿþ¬œ gý 8hxxgç¹Ã¾Ã¾ÿ½Õ€2>`qü &˜ŸŸ\î÷èiÅFCD¿¿N..*ýö8—G?·ÿÿé@24YqËŸ¢úfþô ÍáïÑŽŒŽ~–>*>ßïݨ2=s(dtçøž¨¿½<3|{äDä$#¤_§!!!"þó9èøÏ÷ÎèäÉÅÈ—üGE Ý^~¸=æ"rq²Oϳ”“““ÿ{œœŒ”wû×ÿr˜dôäàÉú¡=Ä3={@fõ8Ù8™çÛÆ»:=éßïÉÁšpd’÷øš¾>MÍñ¯Ð“””“”~}œ”l|Gû÷xrxdæä÷ÁàùíA™û(fù8¹8iÇéÉÈÉG?¼÷÷+ONO  a: Ú^zö7¾ÅIøçßùÈÇÇȼÎ>::3ýêñn„lwûÿGr f‚ã׿EU½ðí/ƒ~„œL\L_ûåâž] æï÷ê«G‰á‘¿ü5X8°Ííúpð°ÐÏÏs†}†ÿÿzì.½NFBBAýêq°qoŸïÇÎk>Â/ðüíìOa–Ãï0ñB¾F=ùörRRr_ïs‘‡ƒÿzÃs‘ÜèÌ}þg+!›µ{‡‰õñ¯qoÏó…’ÿ|Ó,zd öÓïð¶]{±æcí°qA†uz}œ'ûüûíÞY#á¿Ï¿ÀôÃëïn>à}òoñÐqϯ³…Ž…yÃs’\êÐþ gëd–³ïÐñ=>)ò%õþqÒòï3ŠŽŠÿzÃÛ—œúÚýû 8ùì‡ØÏ¿ÄYuïol>úý8h˜8g÷ØßÚüÝûÒt}ŒûÿÂYIîj>èÿ 8(gèGç©ÃBCB½áÅÊqïÇà`èø}ÜüDGüO»ˆ‹ÿÿ›äd[ûüáâ£#ß§ þý8HXè÷÷ùÅFÇÇ¿¾Î*:=ýö'àOÇǾÒüøù÷ÙÄGHH¾NBBBCýòqÑ??~JCýúgáÈÈ¿Î*BJMýörRRR_ïS‹’’ÿz¤9øcò²Ÿï”†? ~RSýöqÒrï“’““’ÿ{œ„L”Ÿûå OÿŸ‘’ÿŠü”—ûìâcd¤¿ß'!'#þù8˜™IO÷¹ÆÈHȽNB2BCýêpðÒ2?ïqC…{œTt„‡ûÔä#ä#ÿÞ§!õ8xØß÷ª@Ÿ‚?þû88hÈ¿÷ÙÄÄÅÅÿ½Îþ&#ýîoïñÿï“ÿÿˆ…ÿ}œ,,7ûäáaaa`_'ý ù8˜˜˜Ÿ÷éÅÆEÅÿ¿N2.2-ýöqq±‘¿ï³ŽŽÿ~œ|||| ôããããßßgþû8øù ÷ÉÈHHH?½ÎBBBCýîr22ï“‘ÿ|œ„Œ„‹ûÜ䤤äÿÞ§%%%$þõ99))/÷©ÉÉII½NJJJKýòr’’’Ÿï“””””ÿzœ¤¤¤§ûÔå%%%?Þ§))))þõ9I9I?÷©ÉIII¾NNNJKýòrrrR_ïS’’’’ÿzœ”Œ”—ûÔäd$d?Þ§!!!!þó9 ™ÈHHH@¼Î>:>:êq±±±¿ïS‹‹‹‹ÿ|œd\d_ûÜâ¢b¢ß'þù8˜˜˜Ÿ÷ÉÄCDÃÀ½ÎîpðÐðÐ/“…………‚|œLLLOûôââââÿß§þù8ÈØÈß÷ÙÇGFÆÿ¾N:>6?ýòqñññÿï“ÿ}œ|||ûää$$$Þç!!! þ÷9 ÷¹ÈÈHȽNBFBKýêrRrR_ïS“’’’ÿzœ”””—ûÔää䤿ާ%%%%þõ9II9O÷©ÊIÉɽNNRJSýêr’r’_ïS““’’ÿzœœœ”ŸûÔ䤤¤¿Þ§%%%%þõ9)))/÷©ÉIII½NJFFCýêr2ïSÿzœ„|„„ Ôä#¤# ^§õ8Èȸ¸©ÅÅÅÅÀ½N....êqQ1Q0/S‰‰‰ˆzœLDLD Ôâ!¢! ^ç ÷8xhxh¹ÂÂÂÂÁ=Î**&'ýþqqqqoïÓŒŒ‹‹ÿ|œdl\oûìãc£cßgþû8øøøÿ÷ÙÇÇÇÇÿ¾Î>>>?ýòqñññïï“ÿ|œ„„„ƒûÔäddd?Þ§!%!%þõ9)))/÷¹ÉIII½NJJJKýêrRRR_ïS““’’ÿzœ”œ”—ûÔää䤿ާ'''#þõ999)/÷©ÉÉÉI½NNNJKýêrrRR_ïS’’’’ÿzœ”””—ûÔ䤤$?Þ§###!õ9 ÷©ÈHHH@½NB:B;ýêqñÑÑßïSzœ\\\_ûÔââââÿÞ§þõ8˜˜˜¯÷©ÄÄDÄÿ½N&"&#ýêqñðOs†††‡‚{œ<<4,Üá!!! žçþý8¸¸˜Ÿ÷éÅÅÅEÿ¾Î26.3ýöq‘±‘Ÿï“Ž‹ÿ}œttloûì㣣c¿ßgþù8øøøÿ÷¹ÈHGÇÿ½ÎBBBBêr2/S‘‘zœŒ”„Œ Ô䤤¤¿Þç%%%%þõ9)))/÷©ÉIII½NJJJKýêrRRR_ï3’‘’’ÿyœ”””” Ô䤤¤?Þ§%%!!þõ9)) ÷©ÉIHH½NJJBAýêrïSzœ„„„‡ûÔä#ä# ^§õ8èèèØ©ÆÆÆÆÀ½N...3ýêq‘‘qp/S‰‰‰‰zœLTLL Ôâbbb?Þ§õ8ˆxxx'¹ÃCÃÃA=Î òpppO“‰‰‰‰~œTLLWûôâ¢â¢ßgþû8Èȸ¿÷ÙÅÆÅÆ¾Î6626öq±Ñ±°/³Ž|œ||ll ÜãããcÞç!þõ9 øÿ÷¹ÈHGȽÎBFBGýêrRR2?ïs’’‘‘ÿyœ””ŒŒ Ì䤤d ^§%%!!þõ9)) ÷©ÉIHH¼ÎJJBCýêrR2ïS‘‘zœ„„„„ Ôä$$$?Þg!!##õ9 ÷©ÈÈHH½NBB>CýîqñÑñßïsŽŽŽŽ‚{œtttl Ôãc"âÿÞgþó8¸¸¸¸¹ÄÄÅDÁ=Î&&"&êq1ÿïSˆ‡†‡zœ<<<4Üáá¡a žç ù8(('ÉÄÄÄD¿N*&*+ýúqQ1Q_ﳊ‹‹‹}œ\\\_ûìââââÿßgþû8ØØÈÏ÷ÙÆÆÆF@¾N6667ýîqѱ±¿ïsŽŽŽÿ{œ||tûÔãä#ãà^ç!!!þ÷9 ÷¹ÈHHH½NBBBCýêr2/s{œ„„ŒûÔä$$dÞg!!#!þó9 ÷©ÈHÈHÿ½NBBBCýær2ï3yœŒ„|„ Ôä$#ãà^§÷8øèèè¹ÇGGGA=N:2:2êqqq‘ïS‹‹‹‹ÿzœ\\TT Ôâbbb žçõ8xhxh©ÃCÃCA=N îp°°Ð°Os„„ƒ‚‚{œ ûôÜâ"!áÿß§ý8¨˜˜¯÷ÙÅEÅE¾Î..*/ýöqqqqﳋŒ‹Œÿ}œ\\dd ìââââà_gþû8ØØØß÷ÙÆÆÆÇ@¾Î6>::öqññÑð/“ÿ|œ„„„‡ûÜä$$$ ^ç!!!!÷9 ÷©ÈHHH½NBBBCýêrïs{œ„„„„Ôä$$$ žç!!!!õ9 '©ÈHGÇÁ=NB>>> êqñÑñÐOsŽŽŽŽ‚{œtlllÔãccc`ž§õ8¸¸¸¸'©ÅÅÅÅÁ=N&&** êqQ110Os‰ˆˆˆ‚{œD<<<Ôáá¡á ž§ õ8hHXH'©ÁA@ÿÁ½Mùñùî ë0ÐÍ  /°ZÐ ð0[¿ïÙ‡ˆjx-‚Ö P‚Ø-~ÌDKP( ÀÁlµ‚€¼ Ál îbbZÁ@^ `µ¬à`¶ `_sÖ ð0[­€ /°[û˜˜¶°P‚Ø-mx-‚ØÜÅŶ‚€¼ Ák`( ÀÁlÀ¾æ.-°à`¶ [@^ `¶÷1qm€ /°ZÚ ð0[°/¹Œ‹lx-‚ÖÐP‚Ø-}Ìlkp( ÀÁl·€¼ ø[û˜èÖàP‚ß [@^ |-}Ìlkp( ÀÁl·€¼ Ál îcc[@^ |-nx-ð¶ó1±í  /¾¸€¼ ø[û˜ø÷P‚ß \@^ |-{Ì|{€( ÀÁo…® /¾À½æ>=¼à`·Â×P‚ß `^óà ð0[ák€( ÀÁo…°/ypx-ðµÀà`·ÂØÌÇǸ€¼ øZà ð0[ál ÞcãÜ@^ |-px-ð¶ï1ñî /¾¸€¼ ø[÷˜ø÷P‚ß \@^ |-{Ì|{p( ÀÁo…® /¾À½æBAÀà`·Â×P‚ß `^³à ð0[ák€( ÀÁo…°/Ypx-ðµÀà`·ÂØÌÆÆ·€¼ øZÜ ð0[ál Þc£›@^ |-nx-ð¶ï1ÑÍÀ /¾·€¼ Ál ÞcbÛ@^ `µ´à`¶ `^óØ ð0[­€ /°[÷˜¸¶ÀP‚Ø-mx-‚ؼÅŶ‚€¼ Ákh( ÀÁlÀ½f&%¬à`¶ ZÁ@^ `¶ë11-` /°ZÖ ð0[°/y‰‰kx-‚Ö°P‚Ø-{Ì<;P( ÀÁl´‚€¼ Ál Þa¡ÚA@^ `µ¤à`¶ `^ó Ò ð0[­  /°[÷˜h6€P‚Ø-gx-‚ؼÁA3€¼ Ák(( ÀÁlÀ½åýõ‹ÀÁl°‚x-‚Ø'¼¾<¯°0[«€„¬ ÁlÜÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿü/é 6"„ôh =¿ÿÿÿÿÿ¸®Â^ ´Á >à/ܻ݂®ÛþàÖ‚ͼi‚®pÒ ºž Òƒ]:Në^Ìw¡~w¸5`<ÞàÀ»Lp½À•°D炬£{ƒþûÓ_¼;«³v?xÞÁ÷á}à¯tÝ·OutžnÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûÁ_ÿÿÿÿÿvÿÿü3‹‹‹‹ÿ~ÿÿî0Wqƒ¼à¯ÿÿÿÿî ·mÂÛ°wIéÿÿÿÿÿÜÛ£}ÿÿÿÿÿûîw›îÛÿÿÿÿÿ}÷Ü÷ÿÿÿÿïÞÿÿÿÿÿÿÿÿÿÿÿÿÿÜCqÿÿÿÿÿutÿÿÿÿÿÿÝ>ðFð·nànà]Þð·cv¯^ñ»}íãxÞnÇÝ…ºÁÞ;¡º ÞÞ7 {¤ê¸#Ÿû÷Ó‚éÁ{Šâ¸cpvöôáÉÃÜmíêãn7¸îO¼NÞîëÝ Èœ»Šäœ·Ä׿ïÞ'mÒ}÷ݧÁîî6á=ØÜ{§ÝݯîdêâÝ'ß¾úà÷ýøgþúçw¸M÷“½÷ß}÷~ðw·wÿ¾û÷ݧNåw\ýÿ~àfûû÷ß}ý÷߸ÍÚw»»ÿ}÷îï'{ŠúàŸïû÷ßu}÷ß~û￾ûîîÛŸ}×ý÷ï¾ýÕÕpT_{÷ß}÷ß}ûï¾ü3“““’ÿzxKï¾èŸÝÞ÷kÝ'ßß~ûîœÞo¾í¾ûï¼ï¾í=\áŸ}÷ÜßqÖéݽíÛ{¸›¦é¸¯¼Ýû®ÿÿÿ﹓™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüŠ ÈW"„øh =¿ÿÿÿÿÿ¶®p°pÆ0:tlbù¸s@-¹ÀßlîÁVàÍ ¹ÀßpjÜ÷‚nÁn{‚=Nuq‚·!……ª£ÓÆú½¦ úŸp½Á ‡^ðM¤ úŸc{ë€æðFðUÁÜíosÜ$Üî>ðwÜi÷÷WM÷Ø^ðMá;Á¶ðOx;ï¼¼½¾í»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþðGÿÿÿÿÿî0wÿÿÿÿÿÃ9iiiO÷ǃºw‚oÿÿÿÿþã½¾ûï_ÿÿÿÿÜï¿s¹ÿÿÿÿ¹ß}÷ßÿÿÿÿþç}÷ßÿÿÿÿý÷ßy¿ÿÿÿÿÿÿÿÿÿÿÿÿÿq¹?ÿÿÿÿýÁ›¤á¿ÿÿÿÿýÿïÞ´ûÁÜ7ƒ¼ãv;ÁÞñ¼}à«ÁÞð· ääää?Þž7‡¼;ÂÞð}ã{q;…7Ǩ0fíÀêpTœ‚·w¼˜ƒ=Í8Û8{ÛÕÛw¼¼W§ÞÝ=íæó{{}÷[†n®ÄÜQ¸' Ã78'}éÝÝÊû÷ ï'3p÷îiÝÏv7¿ßt ܯ¹o¾ýõsçÆøf¹÷ßr¾ûï¹_ÜÜïᜤ´¬£ûåánÛ¿uï¾å¾ûáœDLLCûãêçãÆøf¹ý÷ß}÷ßßtž·ß~ã7cþêàÝ÷Ü·ßr†q11/ïo«ÇÇŽàaîs¹ß}÷ßÝÞž÷ß}÷Ýû¿}Ánûî[îWï«ÇÇŽ<{Ÿ ã#"ãß}÷ß}÷᜔”Œ‹ûÓ»Éý÷ß}÷÷~êû®ûî[•÷ï´_=,7œ÷>ûï¾ûï¾ýÁ÷·÷Þoß»½ºï òr¾æO¹ß}Îò¾òy_ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÓ Oy"„üh >?ÿÿÿÿÿ­½ÆÏ€S $Õs€óp7º¸(ƒ¹1Ñ‘÷àÐÏC2Àh_†EÿßÛ \à}·¾à¥Á‚ÃBƒ¥ Ð¿ À¿†"“£c?ïì5O8+¡ žCnþ»XPÍ¢‡XWÖ/pD&:.-þÈPOŽª“°¯p=m÷ƒÇINŒ À¿"C£c0/îÛÿ»q‚îW7}Ð;‡ÞÜmàûŠè%à›‡Ü÷@› Ox!xÜÝÅv » væÞÝ7‚®?îïý÷Þ_}ßÿïûïÿÿÿÿÿÃ8ȸȿ÷¯ÿÿÿÿÿÿÿÿ÷3•”’’ÿ{ å%%%?ß?ÿÿÿÿ÷w`ÿÿÿÿÿýÇx+¼¼ ÿÿÿÿþã»Ý;°Uäÿü3ÿzÿÿÿûï½¾òþÇÇÇÇÿ½ÿÿû…ß}÷ßÿÿÿÿþîã }äûÿÿÿÿÿïo ûÿÿÿÿÿÿÿÿ ââ¢â¿ÞÿÿÿÿÿýÁ‚Þÿÿÿÿÿ÷¤áÿÿÿÿÃ8øøøï÷¾í¿ÜûÁÞ ä$¤dŸßð»ÁÞðûÂ^ðýáoðïñ¼ ï x;ÁÞÞáoûáœLL,OûåmëÏpTn áœldt_ûë‚éÁÓ…îÜ%>û„Ü÷…½¹§?}Îûï¹C9YI9G竆N‰îåpa86à×+‘8AÜa¹‚;ÌÓÿêþí»½÷Ü$Ÿ¸ÛŒÜ8ŸÝ½÷÷Ý=Ѹ®»oOÜîWî CsŇž¯=þ1|ñç÷ßsß}弞wÿx[÷]÷Ü»îî·Ü¯Ü†ç«ï=a{ôJùèç÷ß~ûïîwiýÝÞÊÊÊÊ¿¾8ÛÛï7MýÊûû«ïßr¿pZ¨-_ŽŽ}Êý÷ܻ￾û»»­ý˹ß}÷ß}÷ï«Çǯ çG<îîWß¾ûû÷÷Ýu}žçrï¾ûï¹_¹ÇÀË˜ÜæûÉ÷;À˕؜ÞènÛ™ÜéºnÞìow6óº¼3Ã9w›Í÷ÞO'+ï¼ÞW}ç»oÿýÛr+ß÷ÿ â!â!à_?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€Z š"…h ??ÿÿÿÿÿ¸=ÆÒ9µ]'pz˜õZåŽMR­q¨žlØÕÀÛ_ ßm\à£NjºN]ÕÆ=ãÍ€{„-0·8ÛΚqªé:®®0w%#UÒxvp&œÝÜmÇ»°7O:Ü*à‰¤Ý'UÒw& Õ‡A¡§œàŠàJœÕtWIÎC˱û¤îpGqþãæÀè*áÂÝtÁÁÜÁW[¶ýÕÂæà€Â‚•à«Áw Þ ¼tî#ràá. ‚÷Á&äè-ØÜßy¼ýÒwÞo'W}Ót»×xKÓÏ}äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûŒÿÿÿÿÿ÷;ƒ‚aœ¬¬´¯ûßÿÿÿÿøg-+-)þøðUÚ}à›ÁÞÿÿÿÿýÃß}Îö÷ÿÿ†pÐÐÐßïŸÿýÇs¾ÿÿÿÿÿýÇxCÉûŒÿÿÿÿÿ}áß}Ýßÿÿÿÿÿÿÿÿÿÿÿÿ÷ƒ†qQQ1Oïÿÿÿ ååå¥ÿÞ¿ýÄêâÿÿÿÿÿî›×t?x&ð|3‘‘‘‘ÿ|x=àï x÷ƒ¼-ã÷áoñ÷žðw‡xxgþù}þÐ@ÜÀ&ça{‚éÁrpU†r22ïŽ …¸98#á*àãqÝ‚¯NîÞàíÂSï½=ïŠöûƒ Ѽ'}÷× ºæ5ëÎ.sŸp›»µvžÞO¼O¸ÍÂÉåq‰ÃÃßxßÞ]Ós.äœ}÷ßr®a•8¹Ïï¾ë}÷ï¹ßww~ÿv>êïß}÷ÛîUà#ÎóŸÜï¿}÷ï¹ßsº¿p¶ì-áÞÝû»ýØwßp=¾å\€#ÎŽ}÷{ï¿ ä¤ä¤¿ÞÜß}÷·÷ÜÛ¾åwﺺßr¸%¾å_ ƒ'÷ß~ûïï¾þç}÷ß~àvÿýÕÖûÁ-ʱ™öÂ'8[p>7§“ï7ßy9Üßs¾ü3••”‘zxw›˜w;ï¾ÿº}×t;É÷(gþøû\xgÿþí>ýá¾ð×ß}÷߆r²2²¿ïWß}ÿ{{ÿÿÿÿÿÿ†qѱ±¿ï_ÿᜌŒŒûçÿÿÿ 㣣£¿Þ¿ÿÿÿÿøgþõþÃCCC@¾ÿÿÿü3‹‹‹‹zÿÿÿÿÿðÎ....ëðÎóÿ ããããÿß?ÿÿÿÿþÇÇÇÇÿ¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿðš 7¼"…h ?¿ÿÿÿÿÿ¸{ºÁW'»ÇÀ(EÀ{sœ·n Ûm̓^œýÕÆ €˜4°N¥À{„!“‚6Ø<ÝÅp¦œüB««Œ&MWWYC'8;hov·WKlçzbŸ®0W«\`nxø _Û.p«`Šå€³r``üB«¤îñåÁ s–Î8¾ã¹ØK wÝ7Únp\v » vÜ{«Æð—A.Æïx;°UǺ\êäá «‡¸®Á7@î —îÿvÜw›ÍçÝ'ßy÷#}÷÷§G½?Ý]·ktŸzÿÿÿÿÿÿÿÿü3”•””ÿzÿÿÿÿÿÿÿÿÿÿÿ¼?ÿÿÿÿÿ¼ å¥e¥_ÞÿþÆEÆEÿ½ÿÿîïà¯ÿÿÿÿýÇw»ÿÿÿÿýÏ»x?ÿ†qѱѿï_ÿÿû‚;«¦öá/ÿÿÿÿý÷[›ÿÿÿÿÿïÿÿÿÿÿÿÿÞðŸÿÿ†ròòÒßï_ÿÿp §aœLTDKûæÃCCC¾ÿÿÿÿtßïÆFEÅ¿¿ÿþÉÊÊË?¾<ãýãy¼Þogþ÷ûƒ PÍÎb78*÷nn;ƒÜ¸;¸9¸Y»ÞÞœ,~ì{Æñ{•Ã\p«…7w ºNVÀÜû¶êòsººO¼în;…½ÎïûÛÕÅvÞ÷ß}÷W§Ý_}hC—ÎuÃ8ù ÿ÷Ç3r¹ß}ý÷ßÝÝÜýã{ï¾ÿ}÷ï¾û﫹Ãx9Ïp“s¹o¾þûïï¾ÿý÷ûï¿}÷ß}]Îlî ããã£ÿß^o¾ûïï¾þû»÷oûï÷ß âãb£Ÿ/¾ÄÄÄÄ?>>ú»œ7Ã(yîww ¼ÞO¾ûïîwßßw}ßý÷ûï†qQ‘1¯ÏŽs'+ï¾áÀkÉæû÷†y>ûî]÷ßp½÷÷~êíï'Ü[…\÷›•÷߸›ˆŸy_}ûï/~û÷ÿÿÿï~ÿÿ†r’’’Ÿï_Ã9IIIO÷ÏÿþÅÅÅÅÿ¿ÿÿÿðÎ2223ýëáœDDDD ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÇÇÇÇÿ¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàB ÌÝ"…h ?¿ÿÿÿÿÿ¸]°¶åG>å0ȘpÉÁÛ‚ºÃo¢ú Á!yà pVડfßTað FsA8G8+h9Âîþê嶸3NÃ(BHÀõØç¸5‚Õ›œœüÆ €˜À2 —p…ß»» qÁÝ…¼Ãî›°·ƒ¸w.á÷s lÁÞâ݇w¼x'¸›ŒvîMØ[ƒ„¸pwctÞá.ƒ¸ÿ}ÂÂÝ7;ýÓvß¼nï¹ß½>Þû˜.é<ñ¹]·[ïº7·¿÷ßûïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþðw?ÿÿÿÿþæœ'ÿÿÿÿÿß~ðUàŸÿÿÿÿ÷ao'ß{sÿÿÿÿÿ¼ßsÿÿÿÿÿÜaoo7ÜÁ7ÿÿÿÿûÓï¾ÿÿÿÿÿûï¾óÿÿÿÿÿÿÿÿÿÿᜤ¤¤§û×ÿÿÖÞâÿÿÿÿÿtúÛÿðÎNJFCýòðw„¼ûÍáÿýãÞ7ûŠâç¸+¸+pTnnp{ƒ·}äçqÜanw ¸x'xÞ?y¿¹'+Âî&áFâÁ›•d70sc½Õû»»»«ÍÇp›îîîç}÷n>ìûï¹n†ôëtÝÝ‚!ÙÜ÷;ïß}ðÎFBFEùñ÷ß}÷Üïß}ÿÿ¾û÷ß~ûï¹ß}÷Ã9 ÷Çß}ðÎJFNEýí÷÷ß~ãÞºï¾ý÷ß}÷ÝGžÆ÷>ûï†r22/ï¾ýÛïîWWß}Çÿß}ûï¿}÷ßtÝoo¼3ï¾û÷ßv·;ï¾ûÿÝwܯßxCûî0ÄBEÃÿ¿>ûƒ·Wßy¾òy>ûï';…ß}Øœîwßû­Ó߸÷ßq]\® ¾û?}ûï¾þïïÞÿýÿ¼ÿÿÿÿÿÿ ããããÿß?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€× Âþ"… h ??ÿÿÿÿÿ¸'p{ƒ´[¹p7sœÐÁ8à÷ ¸Ú-ÇÃ%ÀÝÁ“ƒ¶Û›ÞíV.\ ÜNqÂîw;[9¸®UDÆ®XÓŽ­a×B\û¤ð„2sæ“s‹÷U‚/p°wƒ¹¸÷gq„¸`—s-ÂAÜ(%Äñ½ßv7e[{°w`ï¼ÝÁ;„ƒºnMãxKˆ;±ÿvnÛ¤êðØÝÜîÍßws¾û÷„¸‡¼ÈœnåyºOßp‹¶öÿûïý÷—ßÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†r’’’¿ïoÿÿÿÿÿᜬ¤´«ûãÿÿÿÿÿÜïxÿÿÿÿ÷7;Íÿÿÿÿÿ÷;Îçÿÿÿÿý÷Þo¹ÿÿÿÿÿß~çÿÿÿÿý÷ßÿÿÿÿÿÿÿïÿÿÿÿþà×pÏÿÿÿÿÿ»o÷ÿ¼ÿÿýà›ÁpÎJJN;ýï÷Þ{…V&æP·8;pW¸;pU¸+p7p–à¨Þöà÷ n;Æí»n?q½Ùîðé¼wî-ÅuhÎGøgþøí:º¾ööá7·§Ww wwÜjã÷7þ蜖äÝn¯­¹ƒ¹÷}÷ß¾årÃ9)))7÷§;—s»»ýÆÝÿÜ¡œdddcóÝ÷ï¾®çq0‘0Ÿïïnûï¿}Îþç}÷÷îîÿÝ_ ãcc#_žï¿}Õ­Áœ\$L#ûû³}ÎýÎé9¨g%%%$þöçsï¾ýÇvNÝ÷ÿ¾ýÅ}ûï¾à¸>þûï¾û»ûï ß}ÝÕÝý÷ÿÝwß¾ûï¾çpNûÉ÷ß}äç¸=÷+…ï¾ûï¾á{ïÿq'§ {¤û5Ã'_y<žwï'ß~òyw•ûï¿ÿýáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÍ  "…h ??ÿÿÿÿÿ¸MÁîqØ70 ÜÐ9¹Á[…ÜmÅ` Üà­ÁÛ…Õ<:ú¯r€Ž9 {ÚÜã»þêÁ^áPÙ˜«\±Í@†­rÇ;ž~~pEp«…5AœF0rwŒ"1„?°®tÜ7 á¡¡¡ _/¸¯¹„» wwuu¸ÁÜ(v7mÞì-ÌûnÛaÿº qtãé·´ Þàánp›…¶Çz™×8+p±°zÁw¸ÚÎuG;°sŒn;Çþ„™Ã¬nup×ÁªnsI½¡œ_º´¯jnfç;nÛ»•á݇fç;nÛ»èÆÝ·wV÷¸ÕÛÜW&äo x[’tna/èÿ¾år7ß}ýÊóZnv7WFçtæ;“x[rºnÓNzósoNw¿÷ÞO'ûï'ý÷ßî‡Þß}÷ÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿᜤ´¬«ûçÿÿÿÿÿ¹ƒÿÿÿÿÿðÎZZVYýéÆÿÿÿÿÿÜÂÞœwƒ¼Ýÿÿÿÿû‡º¾áÿÿÿÿÿ÷;ŸqÿÃ8ÈØèï÷¯ÿÿþûû·ÿÿÿÿÿ{vü3––––ÿzÿÿÿÿÿðÎZZZ[ýëÿÞ†qïŸÿÿþËKKK½÷MņqïŸÿÿÿÿ÷Ü1ÿýçþðOÿûƒ\*¿C=Âÿÿ¼pGpF÷wn®p{„·¸=Â[ƒ·{Žàýçÿ¸½Å¹7+»îãuupOqÝÜ÷W“:OÜÄîýÇv=͹¿îIÖéº'[ï“îï¿}÷ß}Ýý÷Ü·ßïo^ÉIII?=÷-÷ß¾û÷;ïß}û￾ûžûïÞ>ûÿܯî¯Ýß¾ûïß}÷ßws¾ü3•”–•{}ûŽã[ïÿwu¸¯ºÝ_~ûï¾ûï¾ûîûï¿s¼Ÿ»»ï¿ºº÷ÝnïÕ÷†p°Æ÷ÞO¸Nòy>ûÉäà÷ÞO'>O¾äN5y<îdòÝ'Dûï'w$á… Q':ÅÅÆEÿ¿ý÷ßß}÷“ÄôÈÉÊIÿ½rR2rŸïo¾ÈHÉHÿ½o¿¼Ÿ â¢bb¿ÞðÎ"÷ÿÿÿÿÿÿÿÿøg))))þôÊJJJ½ 㣣ãÞ¿ÿÿÿÿÿÿÿÿÿÿáœllll ×ÿÿÿÿÿ†q±±±°/Xgõÿÿÿÿÿ ãccc`^¿ÿÿÿÿÃ8øøøø¬3Žz ãccc`^¿ÿÿÿÿÿÿÿÿÿÿÿøú ¢ „"…h ??ÿÿÿÿÿܸMP{αpVáw ¸{Žá{A7¬6÷wv‘»Îºç»úÊ÷+†¹X{ŠÆu®p«ƒnh6pAáœ444< å÷„¹øX[Û}ʴϼ%Æ7ÎäîÂÞæã¹ýÖåuux[ —aÝ\®Â]„´÷›ü3†‡†‡|ßy¼ÞÞ7cÞo7›ï» tÝ]§Cwx;ÁÞî#m‚ï¹] í÷›•Ì%÷ÜÍçþås¾ûûï¾òÞÜ﻽ÞÞN{Íç¼o¾ý÷ÞOøgþù÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃ8ˆ˜ˆ÷ïÿÿsv?ÿÿÃ8˜˜˜Ÿ÷ïÿÿvÝ¿ÿÿÿÿýàï¾ð—„¼/ÿÿÿÿý÷Üî÷ÿÿÿÿÿ}÷ÿÿÿÿÿÝï¹ßÿÿÿÿÿ¼o¾ÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ ¸fáÿÿÿÿýÊûû¥ÿ÷ƒÿÿÿýÁ®pmÁ]Ânp{‡¸]Á¸îÅ»»¸ÿî®+§pJáIÅx;ƒ\*â†pÑpqO¯®}ýÕÝßw}÷ݦó¸îî4æîïÿº­½×vo¿tn®[î›ÕÎûûï¹_w}ûîw­÷ÿío}ÊýÊûï¾årß}ýÎûÝÝý÷w}Õß÷]­ïï¹\·;ûï¿}÷}Îð‡ßuwÜï¿»ºï]×}ý÷ß¾û÷ßpÖ7¾ûûÉ÷ßuxm÷“û»¿ýÊþåxCÊòy?y<Ÿ [Ø÷÷ø+ï'SÓ?s'Üh3“‘|y>éwdã½<ž+ÓÖòyo'ß}÷ß}÷ÞMï¾ôÿv¿xŸwßÿ}þÿÿÿÿÿÿ ââââÿÞ¾ÄÄÄÄÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­ 1q ¥… h & !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿôg x,‚ÆpP—’È,„„~£@(KÀÉd4‚„¼ –Ad4< õAB^K ± %àd² !¡ _(Ð ð2YŒà¡/%Y ùÔ¡zµÆ1íA‘HeûqC_þ“‰ž€\ ý˜¨ü½rÈ,l x,‚ǧÄÀ¾Ñ¨%àd² AB^K ²& ÷¦ø½]d±ÃŽ^¡çA>ñw¢ý_ã#—«€_ÿþB^K ±%àd² !`ÝùS¿+ûÅT(fïW¨ü½ZåŽ! ØÀ-þ`¡/%XÜ ð2Y‘1¿ï˜m x,‚Æ?/%Žx  ßjaï׈›P¤ ÷*ý®^£õk–8ìÞßþû† P—’È,QñzµËÒ¼Ôzøè™÷¹ÇEHGÿ½vo<¯Ï„r߃8½‹ž1˜áÿ÷ÊA  ¾Ã&<,4WC8îG^·÷ª|3|¯ÿ}Šñò2/ï^ ÉåEOzرˆ%Ú>ïEâêP3.œ åˆOAñ¯÷íž>L~ûcG? ÐhfÇC?÷èš«ÿß¡?ßg þù88(HHÉÁ@ÁÁ@¾NòpÑ0ñ/“ˆˆˆ‰|œLLT\ äâ¢"£?ß(÷»8¨?÷Î},È×síÀþùË ý6ƒõ¸\À&öÊÜ(g~2öpñ‘ñÿÿ|œtL„ûæàf§.2 ÿûç=ƒôÜ×€ wŸ÷Þz ê·Ãð§ÿߢr¡œDd‡ûìä$¤¤¿Þ§!!%%þõt!ù)/÷¬7@ÍV\d)ÿ÷®Š ê 4¯çÿÏÿ½Ù@֪Œÿ{Šü|”ŸûÔå$¤¤Þ£Œr‘Žÿzê Ð~³|3†?ýîqïs’’ÿzŽ%ªr?ïVYƒõÒ¾üWûÜãcãäß'!þõC´||WûÞ%<Ø_óÿï]<Õ  ?ýú'jøX˜¯÷ÙÅÃÅÅÿ½Qðû8Ľu` Oƒõüûñÿ÷»)AúÀ/Çàà_"s? ÷8hhhxÉÃBÃC@¾NòpppPp/“‡‡‡‡ÿ|œDLDOûäâbb¢ÿß'þù8¨¸ÈÏ÷ÉÅÄÆÆÿ¾N&&67ýòqQ±ÑßŽÿ{œ|||‡ûäããä$ß'!!!!þ÷8øù ÷¹ÈHHH½ÎFJBKýîrRRR_ïs’’’“ÿzœ””œŸûÔ䤥%?Þ§%'))þõ9 I?÷©ÉÉÉʽNJJRSýærRR’_ïs’“’’ÿzœ„””—ûÜä$$¤¿Þç%%%%þõ9)))/÷©ÉÉII½NFFFCýîrÒïSŽÿzœld|wûÔãc#ã¿Þ§þõ8¸¸¸¿÷©ÆEÅÅÿ½N.**+ýêq1Q0/Sˆ†ˆˆ{œ4:B?ýêqñññßïSÿzœ\\lgûÔââââÿÞ§þ÷8¨˜¨¯÷ÉÄÄDÄÿ¾N"&ýòpÐÐðß…†…ÿ|œ$$$'ûäâbbbßgþû8¨¸¸Ï÷ÉÆEÆF¾N.627ýòqÑѱßÿ|œ|||ûää$$$?ß'!!!!þù9 ÷ÉÈÈHÈÿ½ÎBBFGýêrR2_ïs’’’’ÿzœ”””—ûÔä¤ääÿÞ§%%%%þõ9IIIO÷©ÊJJJ½NRRRSýêr’’’¿ï“•”””ÿ|œ¤¤¤§ûÜåe%e?Þç))))þõ9))9?÷©ÉIIÉÿ½NJJJKýêrRRR_ïS‘’‘’ÿzœ”„”‡ûÔä$$$?Þ§!!þõ8øøøÿ÷©ÆÆÆÆÿ½N66:;ýêqqqqïS‹‹‹Œÿ{œ\T\Wûäâbb¢ß'þù8ˆh˜÷ÉÃBÃBÿ¾Nýòq1ïÓŠ‹Š‹ÿ~œd\d_ûäã#c#ß'þù8ØèØï÷ÉÇÇÇÇÿ¾NBBBCýòrï“ÿ|œŒ„Œûääd¤d¿ß'%%%%þù9)))/÷ÉÉIII¾NJNJOýîrRRR_ïS’’’’ÿzœ¤¬¤¯ûÜå%%%?Þ§)))(þõ9Y98o÷éÈHÿÆÿ¿ÎNNRWýòr’’’Ÿï“””””ÿzœ¤¤¬¤ Ôåe%%?Þ§%%%%þõ9)))/÷©ÈÉHɽNJBJCýêr2?ïS‘‘ÿzœ|||ûÔããããÿÞ§þõ8ȸȿ÷©ÆEÆEÿ½N**.+ýêqQ1Q?ïs‰ˆ‰ˆÿ|œDB>?ýòròï“‘ÿ|œ””„ûä䤤¤¿ß'%%%%þù9)))/÷ÉÉÉII¾NJNJOýòr’’’Ÿï“””””ÿ|œ¤¤¤¯ûÔ奥¥Þ§---,þõ9iyyg÷¹ÉÃJÉ¿¾Äô~NQæ ‘gÞÏËI=@Äò~FMóþqrR²ÏÓ–•––~œ´´´·ûÜ奥¥Þ§+)++þõ9I9IO÷©ÉÉIɽNJJJKýêrR2R?ïS‘ÿzœŒ„„‡ûÔããããÿÞ§þõ8ØØØß÷©ÆEÆEÿ½N.../ýêqqQ‘ïsЉЉ|œDDDGûäáâ"b?ß' þù8¸¸¸¿÷éÅÅÅÅÿ¿N2627ýòqÑñÑÿï“|œ|||{óäãä$$ß'!#!!þù9 ÷ÉÉIHÈÿ¾NJJFKýòrRRR_ï“’’’’ÿ|œœœœ—ûäå%$¥?ß'))))þù9IYI_÷ÉËKJ˾NZZZ[ýêrÒÒòßïS––––ÿ{œ´¼´·ûä奥¥ßß'/-1,þù9iiig÷ÉËKKK¾NZZVWýòrÒ²Ò¿ïS””••ÿzœ¤¤¤§ûÔää¤ä¿Þ§%%%%þõ9))÷©ÈHÈÈÿ½NFBBCýêqñññÿïSÿzœllloûÔã"ã¢ÿÞ§þ÷8Ȩ¸¯÷¹ÅEEE?¾N&""'ýòq†……ÿ|œ\\\_ûôââââÿß§þù8èøèÿ÷ÉÇÇÇÇ¿¾N>B>Aùòrï“ÿ|œ””Œûää$$$?ß'%%#%þù9)))/÷ÉÉIII¾NJJJKýòrR’Rï“””””ÿ|œ¤¬¤¯ûäå%%%?ß'----þ÷9iiio÷¹ËKKK¾NZZZ[ýòrÒÒÒÏï“––––|œ´´´³ûä奥å¿ß'++-+þù9iyi_÷©ÊÊJʽNRRRSýêr’R’_ïS’’’’ÿzœ”””—ûÔädddÞ§!!!þõ8øøøÿ÷©ÇÇÇǽN6667ýêñoǡك/÷Ý:žK<Üÿ¿Î*&"'ýúqQ1Q/ïsˆˆˆˆÿ|œD>>?ýîqÑÑÑßïsŽŽÿ{Ž!¶>.ýúËäÿóðßÿ󉉉‰ÿ~œLDLGûäâ""`¿ß' û þý8hhho÷™ÄÄÄÄ¿¿N*2*3ýúq‘±‘¿ï³ŽŽ|œt|tsûäããä#ßß'! þû8øøø÷÷ÉÈÈHȾNFJJKýîrï“ÿ|œŒ”Œ—ûÜä¤d£ÿß'#'"þù9IY)'÷ÉÊÊÊJ¾NVZJOýòr²²ÿï“••”ÿ|œ´´´·ûÔå¥å¥ŸÞ§-///þõ9iIi_÷©ÊËIHÿ½ÎVVB?ýòrÒÑòﳕ•––ÿzœ¤¬¤§ûÔää¤ä¿Þ§''#þõ9)é÷¹ÈÈHƽÎBBýîHùƒÑ?ï³ÿ|œ|t|wûÜã£c£Þçþ÷8¨¸Xo÷ÉÅÄÅžN&&&#ýóp·ž\µþý—×¾?þpÐпïÓ‰‰‰‰ÿÿœTLCóûþá 5Ç)Cü D¯W½ú qÑñÑÏÿ|–:"ÉßïÞ ô åh(Cô4‘rïŽ~ÿœ”„ŒgûÖâáO<¹b_ð:~=£C'g¿BÎ>2 õþGžO=»Ÿ³¡çPl>±ÿÿ¨SÑë42{®ÿœœ„\ûìq0'ŸŸßöòæyðûyÿ÷þèç—¯]ÿ $Œ»Õt‹óô奥e_ß'---þù$œKÑçG÷éaß Ï¿¾åéâ ûù÷ÿþðzó[—OÁÉ,á]üý9YIIGç¹d£d?ÝþõàO;žZŽH=ÿ'üc5sïüáßžžßewq{z>þýf£Ígš£Ó¿ÿôøz%R¹æ»þ q±±‘¿ï“Œ‰Œ…ÿ|Ü ±ç&Ç@¾öÓÏ/@<пÃN&.")õêXwØwW¾Ù{Î:<¢?ÃY,3n<„ö蘜Ï;2·?ÁIþø‡ÿùÅÁFDÿÿöPÈÙÎÎ? Ÿ¡z8føôpÍñïÑŽŒ}œ|ltûåâ^#ãáÜüÿdÈÝë`vÿWÎAÀ3Ž~œ„d„ƒûßzr0eå ÿ‚Á»Ù+ŒÔC7è© ^ßû8èù)'÷«Æ9ùòP®ÿ„Œ¯÷)Gñt<ò¸ÿ½úpÑòÏÓ‘””{îþz[¢œ¶Áõ_ºèo{ ß¡'--+,üû´#¥£_ß!5:>üKûìã%%%¿ßg+%+,þûˆ(õ°Ê=¤2ÂusóÐ7èiÉJHJ?>Ç#é8ï÷-ùæÍa‘Ë¿á4¨¹(oOÿ…œdl‡ûôä#ädßoÏçÇ<;ýûg˪܎&ñCÆ¿¾3ýúq‘1‘ï˜}r§ŸÀ¿\é 3%Ð3Šÿœ\\\_û÷r0@¹ Ÿàúføô Íè3~Šœltl{ûÜãã£ãßßg!þûf :0Æ?DÕ¸ã›.5þ rROïeâØƒ(ÆP ƒ}ÎZ@,å¨ßbç%"ø÷9))9'ç©ÉFÉG½U˜ŽZ#—øš´\ƒ@ǾAÎRVRQñêr’’’ï7k ¤Ã/÷þxa´3<0ؽEÎFVFQñòrÒÒ²oƒ<èyÿþq0ޝÿ󄃂ÿƒ»êøeÐÁÜáˆΘÃ7Ø™ÆÉFJ=¾ÎNFJGýçN!‘û˜d|aþ «űqŸðnœŒŒ”ûÔä¤d¤¿Þ¯!é½u C ÓÀ)3ˆ«¸gôø×¿ùÆEÆÆ¿½^ˆ2ˆc ¿ß.zÔž5oÑSˆ‰ˆ‰}|œT4T< ÑV Èí¬2;ÿ„}W8%ÀÎ öpÐÐÐÏÏUt â8§øÅÅÅÅ¿¾ÿ÷$€T’À)ú †o!šfì¿DÎ6>2=ýîqñÑñïï’ÇÅHC¹ùö¬a‘ÂÐdjýV° Žj¸çèIÉIHÈ¿½Þ1˜£™À+þ ç-@rÐo±s“’|{œ”””‹óÜä£dcÿÞªÒ´GOÑUh¸ö` |„œ¤¤¤£ãÔå%%e_Þo ØH5Oïø=0Øž¶[Ìdä%$¥/'ÿÖ¿áv9mèm›ü%ëâÏÇJ¿¿ÎBNRWýöò”‹peþÿƒÈi3J9ýëŽV ¡@'ÿÿžR{°»€KäM^~=õò9HùI÷Í.ÀÍJû¨¿BÙ²¹ðó÷‡ø)¿¿¾Á¿Gô~69ýÿ¬Çªýÿçß@%ú'×ÇÃÉ>?Ç øèèG÷κäSï§Þ@'þ©×º=èü÷èIÅÇÇH¿>NF>F?ýòðl·}?þýÒO£x—p ÿ„« ßßO¾Î* .ùó·9F=øûÉøîŒ+5ïÞO¾ÄÄêøWøg×ÉÄÄDE¾FüÅÿÿÿÓ®½Ðû±ÿø9¹ÿ¾AÿÿÎ"+ýúqQq‘ïÓŒŒ|œdLdsûí!ŸŽ~ŠüLlƒûôã#££Ÿß§!þû8èé÷ÙÇÈHȾN>:BGýòqÑÒ2/ﳎ‘|œ„„„‡ûää$$$_ß'##%#þû9)/÷ÉÊJÊJ¾NRRVSýîrrR’Ÿïs’’””ÿ{œ”¤¤§ûÜå%%%?Þ§)))þ÷8èÙIO÷¹ÆÉIʽNRRRSýêr22’Ÿïs’’““ÿzœ”””—ûÔäd$ä¿Þç!%!þ÷9 ÷©ÈÈHȽN>:>?ýîq‘‘ñßŽÿzœd\d_ûÜââã"ÿß'þû8˜˜¨Ÿ÷¹ÄÄÄÄÿ½Î&&#ýîp°±ð/“†‡††}œLTTWûìââââÿß§þù8ÈèÈ×÷ÉÇGÇG¿>N>>>9ýúqÑñÒïÓÿ|œ„„„ûää$$$ß'!##!þù9 ÷ÉÈIHI?¾NJJJIýîrRRR_ï“’’’’ÿ|œœ””Ÿûää¤ä¤¿Þç''''þù9IIIO÷¹ÊJJJ½NRRRSýêr’’’Ÿïs••””ÿ{œ¤¬¤¯ûÔå%%%?Þç))))þ÷999IO÷©ÉIII½NJJJKýêrrR2_ïS’‘’‘ÿzœŒ„Œ‡ûÔãä#ä?Þ§!þõ8ØèØï÷©ÇGFÆÿ½N2.2/ýîqq‘QïsЉ‹‰ÿ|œTTTWûÜâ¢"¢ ^ç÷8xxˆxÉÃÃÃC@¾N&&&'ýúqqqqﳋŒ‹‹ÿ|œdldoûäãc£cß'þù8øøøÿ÷ÉÇÇÇȾNBBFGýòr222?ï“‘ÿ|œ„„„‡ûÜä$$$?Þ§!%!%þõ9)))/÷©ÉIII½NJJJKýêrRRR_ïS””””ÿzœœœ”—ûÔå%$å?Þ§))))þõ9I9I/÷©ÉÉÉI½NNRJOýêrr’’ïS““’’ÿzœœœ”—ûÔ䤤¤¿Þ§#%#%þõ9)))/÷©ÈÈHÈÿ½NBBFCýêr22ïSŽÿzœtt|ûÔãccc?Þ§þõ8¸¨¸¿÷©ÅEEŽN*&*#ýêq110/Sˆˆˆˆ{œ<<44 Üá¡¡¡ ^çþý8¸¸¸¿÷éÅÅÅÅÿ¾N2627ýòq±Ñ±¿ï“Žÿ|œ||lwûäããããÿß'!!þù9 øÿ÷ÉÈHGÇÿ¾N>BBCýêrïS’‘ÿzœ””„—ûÔ䤤¤¿Þ§%%%%þõ9)))/÷©ÉIÉI½NJNJKýêrrrR_ïS“”’’ÿzœ¤œœ—ûÔää䤿ާ''%%þõ9I9)/÷©ÉÉÉI½NNNJKýêr22R_ïS“’’’ÿzœ”””‡ûÔäd$$Þ§!!#þõ9øøÿ÷©ÇÇGG½N>::7ýêq‘‘qïS‹ŠŒ‹ÿzœ\TTOûÔâ⢢¿Þ§þõ8¨˜¨˜©ÄÄDCÀ½NîpÐÐÐÐ/S‰‰‰‰ÿ~œT\LOûôâââ¢ÿß'þù8Øè¸ß÷ÉÇGFÆÿ¾N:::;ýòqñÑñÿŽÿ|œ|||ûää#ããÿß'!!þõ9 ÷©ÈHHH½NFFFGýêrRRïS’’ÿzœ”””—ûÔ䤤¤¿Þ§%%%%þõ9)))/÷©ÉIII½NNJJKýêrRrRïS“’’’ÿzœœ””—ûÔäd¤¤¿Þ§##%%þõ99)/÷©ÉIHɽNJBJGýêr1ÿïSzœtt|t Ôã£cã ^§õ8¸¸¸¸©ÅÅÅÅÀ½N***&êqQQQ0/S‰‰ˆˆzœLDDD Ôâ!â!à^§ ù8hhXXÉÄDCÃÿ¿N&&&'ýúqQqQï“‹‹‹‹ÿ|œ\l\oûäãcccß'þù8øøèï÷ÉÇGGG¾N>>>?ýòqñññÿï“ÿzœ„„|ûÔä$#ä?Þ§!#!!þõ9 ÷©ÈHHH½NJJJKýêrRRR_ïS’’ÿzœ””„—ûÔ䤤¤¿Þ§%%%%þõ9)))÷©ÉIHH½NJJJKýêrRRR_ïS’’‘‘ÿzœŒ”ŒûÔäd¤$Þ§###!þõ9ùÿ÷©ÇÇÇÇÀ½N>:>:êqñÑÑÐ/Szœ\\\\ Ôââââà^§õ8¨ˆ˜¨©ÄÄDÄ@½N"""êqððÐ/S††††|œ44,, äá¡¡¡¿ß§þý8¨¸˜¯÷ÉÅÅÅÅÿ¾N.6./ýòq±‘qŸï“ŒŒÿ|œltdoûä㣣cß'þù8øøøÿ÷ÉÇÇÇÇÿ½Î>>B?ýêqòñÿïSÿzœ„„„‡ûÔä$$$?Þ§%%##þõ9))÷©ÈHHH½NBJBCýêrRRïS’’ÿzœ”„„‡ûÔä$$$?Þ§%%!!þõ9)) ÷©ÉIHH½NBBBCýêr22ïS‘‘ÿzœ|||ûÔãããã ^§õ8ØØØØ©ÆÆÆF@½N....êqqqqP/SŠŠŠ‰zœLDDD Ôâ""" ^§õ8hhhh©ÃCCBÁ=Î òpÐÐðÿïÓˆ‰‡‡ÿ~œDLDOûäâ¢â¢ÿß'þù8¸È¨Ï÷ÉÅÆEƾN.223ýòq±±‘Ÿï“Žÿ|œt|twûäããã£ÿß'þù8øøøï÷¹ÇÈGGÿ½NBB>?ýîrò/Szœ„„„‡ûÔäd$$?Þ§!!!!þõ9 ÷©ÈHHGÀ½NBB>Bêr2/Szœ„„„„ Ôä$$$ ^§!#!!õ9øø©ÈGÇÇÀ½N>>>:êqñÑÑÐ/SŽŽŽzœllld Ôâã## ^§õ8¨¸¨¨©ÅDDÄÀ½N""&&êqñð/Sˆ†‡†|œ4444 äá¡¡a _'ù˜hfP‚Ø-ix-‚ß÷ìÃC4‚€¼ ÁkH( ÀÁlÿ¿f%¤à`¶ ZÁ@^ `·ý÷11-` /°ZÖ ð0[¿ï™‰‹lx-‚ÖÀP‚Ø-ÿ|Ì\c`( ÀÁl¶€¼ ÁoûæbâÛA@^ `µ´à`¶ ß3Ú ð0[­  /°[þù˜¸¶ÐP‚Ø-mx-‚ß÷ÌÅÆ6‚€¼ Ákh( ÀÁlÿ¾f65¸à`¶ [@^ `·ýó1±­À /°ZÜ ð0[¿ï™Žnx-‚ÖàP‚Ø-ÿ|Ìl{p( ÀÁl·€¼ ÁoûæcãÛ@^ `µ¼à`¶ ÞóÞ ð0[­à /°[þ÷˜ø÷P‚Ø-px-‚ؼÇǸ€¼ Ák€( ÀÁlÀ½æBA¼à`¶ [Á@^ `·ýï2î /°Zà ð0[¿ïypx-‚×P‚Ø-ÿ{Ì|{€( ÀÁl¸€¼ ÁoûÞcãÜ@^ `µÀà`¶ `^óà ð0[® /°[÷˜ø÷P‚Ø-px-‚ؼÇǸ€¼ Ák€( ÀÁlÀ½æ>=Àà`¶ \@^ `¶ï1ñî /°Zà ð0[°/yŽox-‚ÖàP‚Ø-{Ìtkp( ÀÁl·€¼ Ál Þcc[@^ `µ¸à`¶ `^óÜ ð0[­À /°[÷˜ØÖàP‚Ø-nx-‚Ø¼ÆÆ7€¼ Ákh( ÀÁlÀ½æ.-´à`¶ [@^ `¶ï1qm  /°ZÚ ð0[°/y‹‹lx-‚ÖÀP‚Ø-{ÌTS`( ÀÁlµ‚€¼ Ál ÞbbÁ@^ `µ¬à`¶ `^óÔ ð0[­@ /°[÷˜xf P‚Ø-ix-‚ؼÃB´‚€¼ Ák@( ÀÁlÀ¾f à`¶ Z@^ `¶ó0°là /°ZÌ ð0[°/™‚ex-‚Ö0B/X¶ `_& !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿà1|  Ç"…$h >¿ÿÿÿÿÿî ܸ>à÷¸=Âî¸]ÂîqÜw{Žìnîîû««««‰8·Ã\6â¸k…»é; v ¼-ÝÝÕæð—@»Æîëv7 wcv7;ïï¾êû«°—‚î‚]7„ºÝ» v¿¼Ü®›Û¶ÁÞû•áÜ®w6ó» vÝ7ßq§·ƒï x+r¸ÁÞßs¾ûÓï»ÿ¼ßw}á;É÷Üû¹]_~ìÒvï7ÜÝÛy>å}÷ßÿ¿÷ßßÿÿ¿ÿÿßÿÿÿÿÿÿÿÿÿÿÿÿ¸=àÿÿÿÿÿþíÿÿÿÿÿ÷vÿÿÿÿþîîîãÿÿÿÿÿÜw6îáMãÿÿÿÿÿwrº {ÿÿÿÿÿ¾è-Úÿÿÿÿÿÿÿÿÿÿÿÿý›…?ÿÿÿÿþé»ÿÃ9)))/÷ÀÎJJJKýóÿÿïxÿºƒ,3‹ŒŒˆ~}pvà¯pvàíÁÝÆ7oÛƒ·‰àîÛ»½nÛ·»wWW'tN®'¸Sp§p«¶ótÜ8>ìŸÝ·mÒ¹“´áeq§ 7ÜmÆîwÜŠé:[ï[«Û‹vÝC8¨¸¨§ç·+ÍÈ«„Õ† ￾û÷wÝî;¤þíºOû™÷ßÞ]oN®¯¹ÜµÁZ·ý÷Ý÷ß~û«½÷ßÝß~îí9/}ý÷Ýo¾ûîw-pO÷ý÷ßp_}÷îï¿}Ýý÷ß{zy÷Õ÷÷Þo¾ûîw-pT_}}Îò~ûï¾û÷ݧ÷ß}ÝéßÜïº[ï» ¾ôûï¼® Ý_qÜî{ÉÌß}Ú~û¤æ·IÚ}÷Ý'«¥tŸt“É÷iÚ~òs¼ÞO/ÿýàÏÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø› b è"…(h >¿ÿÿÿÿÿîp´á;…Ü;p÷qÜwÇqÜîî>îïî®®+Šâ¹n+…\+p«†¸Wû»Ã¼%Øwcxßy» x݇vã}á.ÁÞØ;»ßº»»¾îð]á.®Â^ð—‡}ÿï7ßy¾çy¿v7›îÕ÷ÝßxÝ·‚½íí÷‚o¼œ¯¾ûï7Åÿ}Êó}ýÆ÷+‘¹ï¹ßr¹ï» qî†ð½÷ß}äûï¸[ÿß}ÿ}÷ýäÿï¿ß¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃ9iiy_÷·¾ðÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý›†?ÿÿÿÿþôÿÿÿÿÿÿ÷ ¸-±¾à÷n¸=Âî5p›wzq÷»¿½Ý;‰ºº{…'¸UÄœ3¸5Ýõ„79€ç »»ºÝÝ\÷dîã¸îî®w¹¿î·WWWƒ]]_ººß}û„ﺿ}÷{ï¿}Ý×wwû«÷ß}÷ﺆq‘q‘oϾün{Ýw}ûï»ß}øg'%'%þôîþîþíw[ïºï¾ý÷PÎ2.2-ýñ÷ßÁï{®îïß}Ý÷ß~ÉIII½>þîÿt®¯ß}×}÷ﺺ¾ûñ¸:{Üîûï+îÄîûï¿p÷Þ[ÓîÕÚz½=^O¿¼Ÿ~ås¾ûïÛd÷“>O»¹ÉОO+É÷Ü{´é;W§Þœî·“É弞O'܉ûï'“Á'—}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿm Ž "…,h >¿ÿÿÿÿÿîp›„îp¶áwp»…Üî;Žã¹Ýîîî÷W[•Êår¹\[…\MÃnp«…¹Þo;³vÝÝtðîÍÙ»7W›°]ØwAoon¯¿w}÷—WMãx.ðMáo¯÷ܯ7›™¼ß¾åt7;Í÷+•ÌÜÈs;ÞêûïžÞó}äû¦æßÿ¾ós¿¾û»‘¹ï»niÌ·mÉ» x=á/ ¾ò}Êûï¾òÿ}æó¾ûýÛzzï￾ûË}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÿÿÿÿÝ‚®cÿÿÿÃ8ÈÈÈÏ÷Ïÿ÷aŸ¼'ÿÿÿÿþås¾ð—‚¿ÿÿÿÿÜï¾åxœ¿ÿÿÿÿß}äûŸÿÿÿÿþó}÷ÿÿÿÿÿÿÿÿÿÿÿÿÿ¸cp¡ÿÿÿÿÿ÷+‹Ã8ˆxh÷ßÿÿÿÿýÁ® pmà׸=ÁûŽá)Á[ŽáwnwqÜwnçx¾ë¹\WzpkŠá· ¸UÂ/»ºº¸3sNwDêþã¾û«¢q_½:»ÝÜÿrN•æí½n¯¾êû»ï7›„(ð»Ÿ}Ýý÷ß}÷÷wo}Ýß½<ß¾ûûï¾ûî÷ß~ÁÏ9Ý_}÷ßw}×}ÝÞí9§§§Ü¾ûûï¾ûïß}û yÝ÷ßÞO¾êûû»¾û«»•ÒÞŸ}÷ßß}÷ßu¹\î m¹çßy9Þ+îDç}÷–êíwwÝî„çxg«°gÞ[ï¹ÞO7ß}äøg  þöòy^O¸*Ÿ}ÒvûÉû;NÓ^N“²xžß~òr¾ûûÉ÷“îw2~ûËï¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà™ © +"…0h >¿ÿÿÿÿÿîp»„îáwqÜwîçws¹ýÖå¹\WÅq\6áW n¸EÁ® þîð—×Þð——fì%ѸÍá/ûÀËÀÍÛx>êêû﻾ê庺º7;ûÿ÷ß}÷;O7›™9“ë{°w ïo¹·W·ßyº»º¼Ý¼-÷#xw›Í÷ÿ¾òr¹Ü¯¾ûï7ßsÝ…»o¹^W…¼>ðïr¸ÃºNwÞo'2y¿ÿ¾äO¿¼ÞO7ûï¾ýÆÞ÷›ûï¿}÷ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÎRRVWýïÿÿÿÿÿîÂÿÿÿÿÿûÍðÎVRVMù÷ÿÿÿÿÿyÝ¿ÿÿÿÿÿºÿÿÿÿ÷W›¢ÿÿÿÿÿî››ÿÿÿÿÿÿÿÿÿÿÿÿÿp¦á_†q111ïÿÿÿÿþ⻼¿ÿÿÿÿü3ŒŒŠŒÿz¸3pnð«…Ü8?p¶á{‡¸{p»Æîÿî-Êân'q\MÃnp«…]]ßÇìóœwWW}Ùº¾ûîï¼Üƒ;»ÜÛ×î÷mêêò}÷w·[ïÞ»ÀÉPdû￾ûﻺ[»ïÝîþé:¾û«ûïß}ÖûáœDûïîwi÷ܯ=÷W{ï¿þûûï¾êûﺿ¯¸2~û—tÞŸ}ÝýÝ×}÷î×￾ý÷ß¾þ¹ã¼çîw÷;ïÝÝ÷w÷ß}Ýßv»»ûïß}÷ß^ ùÑÏÞO'»¹^O»½:îîî¾îòtÝÿt·“µy>ýäòqnÓ?u~ûÉâv߸=÷“<ïÞï[¡? ä$¤dÞ®w«Éäý÷“‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ} „ m"…8h ??ÿÿÿÿÿ÷ ¸]Çp»…Ü=Çs¸}·zÛîîÿu¸®+‹q\W Ü*áW p«„\"âÿ½¾êàöϺ¾øgþôã¸îýàžêû«»»«««î[«««ÁwÞ¿¾º¼Þð]á/ }æìï {}ãx[Æòso }í÷ßw»o7 —„¾ðï7;ï' ÿr¹_}÷ï7§Ý7A7··ßtnÛü%à›ïóº•÷ßy¾ûïÿîfûï¿}Îûî·ß}÷=ÓzÞo;ï¾ýäûïÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx?ÿÿÿÿÿxÞ;Ãÿÿÿÿÿ¸'{}÷Ý?ÿÿÿÿ÷ï¹ÿÿÿÿ÷÷ÿÿÿÿÿî›Ûïÿÿÿÿÿ÷ÿÿÿÿÿÿÿû„7 ÿÿÿÿÿÜ!½¿ÿÿÿÿýãý® Ü{ƒ·÷¸[qÜ Ý›ŽópsqáÞÜfëî Ý£¸›ŠâwpÍ›…7 º¾åpDÖÞãNîiÞÇÇHG¿¿:»n¯½»o¼]¿Ý7=Ñ:ÝÝßy:o½Ý·Ý_}Úwk{…ß»»áœŒt„oûÛï¾ôýÂo»îîÿ}ðÎNRNQõé÷ß¾û÷·ß}÷ö s½÷÷s¾ûïîïï¿û­÷ß¾û÷§ß}÷÷Ýo¾á7ß}÷ßs¿»¿ºî“«ï¾þû÷Ý_¾þîôûï¾ûÍäû￾þì¿zvŸ}Ò~áW“ï¾ò}÷ßpm¶^<û÷ß}÷“ï¹\iÁï¼®÷b÷§Šò}÷“‘_y9_y>ò¾ûÿÿ 䤤¤Ÿß?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ  "…ð÷·ßs¿r¾ôçu¼;÷Þ ¼¾ós7ß}÷&íûï¼»É÷ý÷ÿywÞ]åÿÿÿÿÿü3‹‹‹‹ÿ|ÿÿÿÿÿøgþùÿÿÿx'øg))))þõᜌ„ŒûÔ3ÿzþÃCCC¾ÿþð¸g//-*þøËËJË?¾†r22R_ïPÎ>>>?ýëÿÿÿïåxw„ÿÿÿÿÿß¹\¿øg####þõÿÿÿû¶öûîÿ ädddÞ¾ÅÅÆEÿ¾ÿÿ½¼ßÿÿÿÿÿß}ÿÿÿÿÿÿÿðÎFFFGýëpaÿÿÿÿÿ÷¥ ââââÿÞÿÿÿ å¥e¥ß 奥eÞÃ9iYi_÷¿ÞÝ{‚ƒp-ܸ>ðîÜ{ŒÜgy¹·ÆnÞìÝ¿¼n#xMÄn÷7g!! ü÷pcpaÜ´ðîà“q8ÝÂo¹nîî᜜„”‹ëã™=>ýïuuÞwÜIÈoº7+ƒûî ]]]_}÷Š´ ½ÃÝ_}ÈŸ¾û÷ß÷W_tN[ï7w;ïß}÷Ý'µ¼3Š‚‰„ÿ~}÷ÝÝ÷Ý+»ÿî¾èŸ}÷Üß}ûï¾ûß}÷Ý÷MÙ_ÝýÊåqnïßs¸%¾û÷ß½=q0ÑO¯›ï'ß}ÊôèÎôûï»Wß}÷Ý?~åy<ß}äûîW¡œ<47ûå½Ï¾ûï'4ûŒÌ»´íwkï'ß}ØS­÷ܯ'ß}÷ßpKÿøg%%%%þùÿ†r²²Ò¿ïÿÿÿÿÿÿÿêïû¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ^ ‹ Ñ"…Dh ?¿ÿÿÿÿÿ÷npÂîÜ=Âîˆ6yïiM·¹Îãîö‡s…¶BÁÍÀh_à4/ÇV½Â¬ƒ7üㆠiá+1Õ£ hßœ5Ã\+p‹…\#ÿ}÷ﺾêé=8{¶ìo¿wûA7¸ÍÆÜïnE}÷î÷/ýÎû÷;Í÷›‘Ü8.æÞð—„Üfðw‚=žûïºÇÇHGÿ½¾û¨gþöìÌÜ¿÷Þð]à»Â\Ã¹Üæó}äçr¾ìÛy¿ï¾û‘¼-àÆ\‚]‚ncxÞÿþû•÷Þw›•÷Üï¾óvnWßx#x'q]ƒ¼» wtN›ï¾åÿÞO¾þû￾òr¿}ýÚ~ûîÉûÉäÿÿÿÿÿÿþÃCCC¾ÿÃ9IIIO÷¯þÊJJJ½þÃCCC¾ÿýÇx+ÿü3ŽŽÿzÿÿÿ÷ƒÿÿ ã£c£Þ¿ÿÿðÎ^Z^YýíàïN`ïqøg!#þõÿÿÿ÷ß½?ÿÿÿÿýÎûÍ÷ÿÿ ãcccÞ¿ÿÿ÷›ï¼ÿÿÿÿÿï¾ÿÿÿÿÿÿÿþàÀïÿÿðÎbbbcýó†sïAœÄ¼Ä¿û×ü3’‘’‘ÿ{ ädddÞ®8GÿÿþËËKKÿ¾xg////þõðÎRRROýêÉIIIÿ½†rrRR_ïpÎFFFGýêòÜ*àÁ}ãÞácpqÃ9×ç× Œï qánÆì;°ïx[°·…ï x; ·…î†ð·Àð;ˆ-¶÷wÐwÜàÀî ÆÜn ·ÒvN÷ÝÜwdîîáÛ´í<·§§§+‰ÜDäßtŸr¸kŠæ+îFòª >¼3‰‡‰‰}vŸ}÷÷w?¾ûû·¿~ë{}Ë}÷ïnNûûƒ€{‚¤å}÷÷ß}÷ß¾ûÿy¿ºß}÷ï¹o¾ÅDÅE?>aœLLD;óëÓï¾þç}÷ß~ûïýýÕûïï¾å¾é_~ÄCÄÄÿ¾C8¨ˆ¨7÷÷›÷ÞWc}÷ß}÷ßy?s÷ç{u}÷÷ßr¾ôå ãbâãÞŸ}ÁNá&òxk÷ni÷mé÷IÙ?}ýÛß~â¼ï¿¾ûï¼Ü¯¾ò|3ˆ‡‰‰ÿ|ÿÿÿÿÿÿÿÿÿÿÿÚ=ÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü–  ó"…Hh ?¿ÿÿÿÿÿûƒÜ'p›‡¸]ÃÞÜt„+©ëŽæÜw=Ý`½<¸MÏx#vÕº¹Á¨@ˆ/ÀпBüá@îT6ê/q\W ¸k…\ÿp#}÷ßwwwtÞ7bvÞݓ»] æààÂÕÓtwu}÷Ýßÿ†q‘1q0/nÁï¾ûî÷Üw;´êýÝ÷}÷ßtêû÷„¼ßy¿ÿ¼x.ð]á/ }÷;ïñ¹Þà›Áw Fã7}Ë}÷+Áw“Íäû°UáÞÿý÷ßs¼ß¾ûï7Þo¾ûKàû•à«Áï }÷ß}÷3ÿß}÷–ûï¿}÷ܯÜïîÛÕ÷ß}÷ßÿïÿÿÿÿÿÿÿÿÿÿÿÿÿ†r²²rOïŸÿÿÿÿþìÿÿÿÿÿ¸Â]o x?ÿÿÿÿûîw›ÛßÿÿÿÿûÊçsÿÿÿÿÿßy]…ÿÿÿÿÿß}÷ÿÿÿÿÿÿÿï x?ÿÿü3••••ÿzÿþÇÇÇÇÿ½[ Opßÿÿÿÿøgþõ¸‡Þ>ðî=ÁÍÁÇxw 777wãv>ñÞoÇxÝèÜCpcÜ0Ü#p`·tàÃr…܃·wißtoWuq^o¸Ó›q·IÛÞ7›Ûœ·:wWw˜g!üöà×›÷ß}íÃ;¶õs¹÷ܯ¾û÷iäì®dîç½o7{Ûïßt'wÜïßpp ¾ýÊçÜîwß}û»ïß}ûÆñ¾ë¾û÷ܯ¾û÷ßÞï»ß}÷;ï¿}÷ï¾êí½½î·ß~êûîWß¾ÿ¼ß¾òp»»ï¾ûïß}Ë}û˺7ï¾å»¾ûï¼ï ûÁÃ8˜ˆˆ÷Èg ÿþó}Îûîfç}Êçt÷2}÷›÷Þn7î·WßrÜMæûïÃ8¨È¸Ï÷·ÞnÃ8ˆxx÷ëÿÿÿÿÿü3ˆ‰‰‰ÿ~ÿÿÿÿÿÖOÿÿÿÿÿ÷ÿÿÿÿÿáœ44Ã8¸È¸Ï÷·Þo xKÌ!÷ß}Ý÷#¼%á/77ï¾ûï¼%á/ð—·mì3‰ˆ‰ˆ~{ÿÜ®Wß}÷•Êûþû³}Êó{¼wuy¾ûï¾ûï¹î_ÿ}äòr¿v7“†¿¹ßy?s\ƒ\Wß¾çrÞO¾èÿ¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿv?ÿÿÿÿþà­ã½ÿÿÿÿÿÝ›»³ÿÿÿÿÿßÞÝÿÿÿÿÜÁÞÞ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþáW nÿÿÿÿÿýÁ® ïn·ÁW¼ÜxÜoqÜÿ½îð½Â›†¹\w-Á¯n4á&૸=ÚÜ%>áws¸îïn®=ÚsáIÄî&ôå}Úu}ñ¨7ÏuП»¹wß}é÷ﻺ÷ºÝ\žêêîêûÕ÷÷ ÷îw÷Ý_}Õûîïîÿ¹o¿¾îêû««îî»°7}÷ßs¸+»ºO¾û÷ÝßÝÝÝû«÷ßÝ\ï¾ûﻺðÎ&**)ÿý÷ß}÷ß}÷+îï+ï¹îï»ÿ}ýÊç}÷§;«Éÿy;O†q‘‘±ßﯼžW“îwDûîw“È3’•”•|wt¿u¼ž[Éäûï¹_y>àßÿÿÿÿþðoÿÿÿÿþà× ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøgþùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ 2‡ 6…Ph ¦ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿôe2ð2YŒ ¡/%YýF`C/%XÐ ð2Y°/Ôh x,‚ÆP—’È,…†}£@(KÀÉd5„¼ –Adò/—‚t„ žªt ¡Ø A>Õ(È„°h"__÷¸©Ð®E¨'¼ ¸v¼Tõ[àŸ¬ð ]ƒõî¾-ùûªÀ 0ðg}uSà_¶,p­ÃÎ$ à_ªøøÆðÎ6ë±ëž ã]C(­†BÅ@2ÿ÷Û"}퀮pßÿñ:€L$doûýá* ^.*`b…ÀþýW`Î%Ø3‰~~¼Cã¢_óS° ;¡XWÞroO8··¾ÿÎ"úp°°ð¿ï“…„†„ÿ|œ$,$ äà `à`_' û8hxxxÙÄDDDÀ¾N&&&*òq1QQP/sЉ‹Š{¼S@D³€Wû×pëÇ\8ÿ÷ú³€\S(Å@¾Î2&:&ó®@.åàhþùÉÃ7pÌœ3w ßßo² $Zà@½ñg†c.% ÿßêäÈ:€\ûýä!!躡€P¢P4‚Ð/ÜðÈGœ\#ÿß¼C Šr(4/W<±CÀ }¬3ä!ß!þ÷y'HA:ê§`(vBp/½,ȇ¥ƒ@ù÷÷ß〠‚q°A=\Q@ÁE h?ߢ‹|„d‹óíäÀ*Iä2ÿ{åAóÊÀ(qð/Õh¸Ö` }¼{¸eî@¼Ø¬…žVBð/•Vò)`È¿÷éÇFÇǾ^ ¡’Á w¸¡pŠ\ õ]ƒ8—€Î-ùþñî‹ÿwûÍO(Tð…`ßyн¼ðÞžÿÿ8xxx‡çéÃÂÄC¾Nòp/“‚‚ƒ‚|œ44<< ôâ"!â _§ù8˜¨˜¨ÉÅEÅÅÿ¾N.*.3ýòñMâ_ï|uÃ! †_ÿVP ŠW/tT ì±ñ1°î|²ð4‚îR€Wýó“ná™h¾ï—‹_¨Æp ÿ|ãŽ& ÈC"ÿ¿ÕÔäÀ.;ýöò.ŽyŽÿyª@4‚¦Êœ'û΀.é@Ð>E?ýÿÅ9HÇ(ƒ@ óqS  .¸ê¾Eëîÿ{¼Œ¤¼ï÷º€P©r§ ¾Y,ȧ©ƒ@ùþùàœnPn9¨›Š©ƒ@ø,¨ çûô‘²1‘}}¼‹Àe ò½r° yh¾ö¬ÀÎqÏï×w ¤ƒ/÷š–P¹x À¾U\ȵ0 ˆÿ~œ„t\gûÝá’À*)\¿Þ6*^cn% ÿߪîÅ´}Ðï¯÷‹tC—þõSÀ .ó… ß¹è½½4àžÿÿ8xˆˆ‡çéÃÃÃÃÀ¾NòpÐÐ/“ƒƒ……|œ<<ðï:-óÅ•dÿï˜9ød´ Àñç÷û/ƒAƒ"ÃïÛ$xñô†p/ÕeVøwÇÄ¿¿Î""&%ýöpðñ†ˆ†ÿ|œ4447ûäáaaaß' þý8ˆ˜˜Ÿ÷éÅDÅE¾N*2./ýòqqqq‹ÿ|œllloûæ cÔüÆBŸÿ|åp3>á5 h?ßv28}TÕàh?߬_C5ÿ†n”3‰ÿ~œ4|„‡ûä䣤ä?ß0ý¥àÎ:ÿûï'˜é÷ cƒ÷ýóŽ$–h?[hgþùd€[Õ|øÿ÷¹ÈIIIÿ½ÎFBROýïñéÞ¹cÿï\¢c§Ü€%¤×÷îB%€Ð~µƒAúð?ïöRøÿ×Å“ÿ}œœœœ§ûÞ"\¢¨3’ƒÿzå@È­î€ _þ÷8ù))?÷Èäá]'!þõÒfÔ3~—  ÿz‰Ô3‘‰’ÿzœ„„Œ—ûÖ cÕ<ÈBŸÿ{åàÐ~’K°¶€Oûï*•†nþýî(7ÆFÇÿ½cþ=f\t9ÿ÷®n é8¼mŸ÷îL&”Û@%Øÿûý(½WÁDÿ¾Î*&*/ýòq11?‰‰ˆÿ|œD4D7ûäá¡¡¡ß' þù8ˆˆx÷ÙÄÄÄžÎ*.*/ýòq‘q‘Ÿï“‹‹ŒŒÿ|œ\ddoûä㣣£¿ß'þù8Șèÿ÷ÉÅFHGÿ½Î:BBGýîrRR2?ïs’’’’ÿ{œ”ŒŒ—ûää#¤¤¿Þç%%þ÷9I÷¹ÉIIÉÿ½ÎRRRSýêr’R’ŸïS‘’”“ÿzœ”¤œ§ûÜåe%¥Þ§))+)þ÷9Y9Y_÷¹ÈIJ˽ÎVRVSýîr’’rïS””““ÿzœ””œ—ûÜäd¤¤¿Þ§%!%%þõ9 )÷©ÈHÈGÿ½N>B>CýêqñòÿïSŽŒÿ{œ\\tgûÜââââÿÞçþù8¸˜¸¯÷ÉÄÄÅÄÿ¾N"&ýòpаÐß†††ÿ|œLDDGûôâ¢bbß§þù8ȸȿ÷ÉÅÆÅÆÿ¾N6:6;ýòq±Ñ±ßï“ÿ|œ„„„‡ûää$$$?ß'#%##þù9)/÷ÉÉIII¾NJJJKýòrRRR_ï“’“’“ÿ{œ”””—ûÔå%%%?Þ§)+)+þ÷9IIIO÷©ÊJÊK?¼ÎVZZ[ýêrÒÒÒßïS••–•ÿzœ¬´´·ûÜå¥e¥Þ§))+)õ9YIIO÷©ÊJJJ½NRRRSýêrrRr_ïS’’’’ÿzœ”Œ”ûÔäd$d?Þ§#!!!þõ8øøøÿ÷©ÇÇÇÇÿ½N66:7ýêq‘‘‘ïS‹Œ‹‹ÿzœdd\_ûÜââ¢â¿ß'þù8xxx÷ÉÂÃBþN&&&'ýúq1Q1?ïÓŠ‹Š‹ÿ|œd\d_ûäâãbãß'þù8øøøÿ÷ÉÈHHH¾NBBBCýòrï“‘’‘’ÿ|œŒ”Œ—ûä䤤¤¿ß'%%%%þù9)9)?÷ÉÉIÉIÿ½ÎJNJOýêr’’’ŸïS••••ÿ{œ¬¬¬¯ûÜåå¥eŸÞ§----þõ9iiig÷©ÊËKJÿ½ÎVZVUýîr²²²¿ïS””””ÿzœ´´´·ûÔå%%%?Þ§))))þõ9IIIO÷©ÊHÊHÿ½NJFJGýêrR2R?ïSÿzœ„„„‡ûÔä$$$?Þ§þõ8èØèß÷©ÆEÆEÿ½N.*.+ýêqQ1Q?‰Š‰ÿ|œ<?ýêqѱѿïsŒŒÿ|œl\l_ûäââââ¿ß'þù8xxx÷ÉÃCCC¾N&&&'ýúqQQqïÓ‹‹‹‹ÿ|œ\d\oûäãc£c¿ß'þù8ùù÷ÉÈHHH¾NBBBGýòr22R_ï“‘’’’ÿ|œ”””—ûää¤ä¤ÿß''''%þù9)99?÷ÉÊIÊJ¾NRVRWýòr²²Òßï“•–•–ÿ{œ´´´·ûÔ奥¥¿Þ§-)-%þý8É))gÿùËJËJ??K-/#yýörÒÑÒ¿ï“–—––{œ´´´³ûÔå%%%?Þç'+))þõ99)9/÷©ÉIII½NJJJKýêr22RïS‘‘ÿzœŒ„Œ‡ûÔãä#ãÿÞ§þõ8èØØß÷¹ÆÆFEÿ¾N.../ýòqQ1q_‰Šˆÿ|œDB>Cýòrï“|œ„„Œ‹ûää¤ä¤¿ß'%%#%þù9)))/÷ÉÉIÉIÿ¾NNRJOýòr’rrï“””””ÿ|œ¤¬¤¯ûäå¥å¥ÿß'----þ÷9iiio÷¹ËKKK?½NZZZYýörÒÒÒïï“––—–zœ´´´³ûÜ奥å¿Þç++-+þ÷9iii_÷©ÊÊJʽNRRRSýêr’R’ïS’’“’ÿzœ”””—ûÔädd¤Þ§!!!þõ9 ÷©ÈHGGÿ½N:6"/ýîq±±±¿ïSŽŒÿzœl\l_ûÜ⢢¢ŸÞçþù8ˆˆ˜÷ÉÃCCC¾N&&&'ýúqqqqïÓŒ}œttlsûìãã£ãßßg! üû9ù÷÷ÙÇÇÇÇ¿>NFFFEùîrRRROÏ“‘’‘’~|œœ”œ—ûää¤ä¤ÿß''''&þù9I9I7÷ÉÊJJJ?½ÎVRVSýîr²²²¿ïs•–•–ÿ|œ¬¬¬¯ûä奥¥¿Þ§----þõ9i‰i÷©ÌLLL½Nb^b_ýêròòÒßïs••••ÿ{œ´´´·ûÜåe%%?Þ§+')'þõ9I)9/÷¹ÉIII½NJJJKýêrR2R?ïS’‘’‘ÿ{œ„„„ûÕãÿã£]ƒ/÷¾ÆÕÉGÚC?÷éÅÆEG¾N6667ýîq±‘±ïs‹ŠŒŠÿ|œLLLGûìááááÿß' þ÷8˜¨˜§÷éÅÆEÆ¿N2625ýöq±Ñ±Ïï³ŽŽŽ|œ||„{ûäããä$ßg!"üù8ùùçÉÉIHÉ?>NJJJIùòrRRR_ï“’’’’ÿ{œœ¤œ§ûäå%%%ß')))*þù9IIIO÷¹ÊÊÊÊÿ½ÎVVVWýòr²²Ò¿ï“––––ÿzœ´¼´³ûÔå¥ååÿÞ§-/-/þõ9yiy÷©ÊÊËJÿ½ÎVVVWýêr²²Ò¿ïS”•””ÿzœ¤¤¤§ûÔå$¥$¿Þ§%%%%þõ9))÷©ÈÈÈÈÿ½NFFFGýêqòñÿïS„‘ÿ{£Éø3ññÿïóŒŽÿ}œd\lgûÔ‘PÎoÿ{œæNMüó ?ÿÉ#']þÿ,¬œ#Éç÷ìÇG¸k<þý$”›µ £ß§+-)þ÷997÷ør¤›Ú¿É),óC)÷ùËËKJÿ¾NZZ^WýîYyhèSÏï³’z}œl{ãÿþdå]OCžÿ}œ´œœ£óäå%e$žó%!y¼?ߤ’w®‹ÿÿœŒtCïûå"ODukÿÿÌD{!ç?¿NJF";ýòrñïïrÈGûG½f.%˜ë¿à§þ÷,\T;”wû×jŽYz qýsü>Ÿ_Ï\äy÷þHxW“ÏÏÏù…ƒjrÈ¿æý`þýG#îgá¢á0Õ èvÿ?þ 42}yë·?BN.6&5ýþñmÎ}só÷GŽMû‘$0 ~‰¬ä Ÿúÿ9 çÈâ üûÓC$/¹mS΃7è:¾rOaœ“ô qïÎ’Š~}²¨dƒ\Ãçš?BÕ¿î}X Þ¡#|?(üý‡ãíòPÎ~~ÚSܧç£×ÄÉ ú×]ÿÿü!ù W÷üŸg•ˆwÿþÓ~åÉGîÿ…’FZ-òßïÓ—‘–ÿ{Óœsc‰÷ê÷÷è OÅI˾Ò$üùiG÷ë.¹~¹ÃÏE‚¬Cåþé7çÙËGJÉ?¾vÐÈùÏnB Ÿá4´½#n¯ÿ‰›ô\—ÿüp¿çää?ÿôÇŽþä€Ëþ M¿tbwÝ ÿøIÇÇGÇÿ½_ýp2p ¿ßnrÄgŒ@ÿ 8¨È˜¿÷Ë÷GÅÀ»ýïžGaš`d”¿ÅY˜ûi÷÷¿@Íâ%ýÿQèᔞÿsVPÌé|3ÿŠœDLLKûýâŸÝï÷þŽ$Zx †o±‚|oûã_¿ç üùÓ€) 3R¤Íú6°O|ƒûüäd$$Ÿ'!!üùÙ€(îšj£Êiú"¯Aœ‹Èg üÿ9 '÷½8FŽ!‘¹‡èz®+|KXÈ¿BÎNJJMýör‘ò’/ï•f£fÐ :‹«0gÞro°s–•––|œ”„¬—ûïd£ÿšl£êiþ"°Aœ³ðg,ùÿ9iiig÷©ÇJKÊ¿¿NZZRQýòrÒÒÒŸïü2A†Ÿ#çÂÕˆäW@.=ö r’’²¯Ï~É ä  ƒ:Pgõ@ ‹{ü#§!%'$þù9 )÷ÜE¹h¢×À)þŸ†o¯? ÞÃ7؉ÇÇÇÇ¿=Þ9Ü2x ¿ß¹û˜€-Ì€ÿ8˜¸¸×÷ÙÅBFÁÿ½ôÐ J Ó€)0ßâ+ø˜Ä¿Î&&&%ýò8w§DAÿ¾ô°É,3cóÏMÿÄN&&&'ÿþñ0މƒsÿÿO¤ÍD7èšÿ¾6ñ¯¿óŒ‡‰~|ê@€©€QðfýXȾ=ýúr2ïϳŽ~|í@{M5Qõ4ýWÎ=Ü3~|œŒŒ”ƒóßr ŽŒ9GFájÜrMÀ"ý 99997çÉÊHÉH?=Õ´ŽÜ(íþ®@*ârOS––––zœ¤”¤—û×k£ó ‘ý5ÿWÐÎYô3–zÿœ´´´£ûæe¤áãœÀ!ÿþ8؃Îïï󅃂…ÿ|íî;s¨d~ïøj®€\‚èǾBÎRVRUýìðÎJ¨‡%€SüΨqOV¸·¿AºrrR2oïs’‘’’ÿz¼ZðF/Wûÿ?{àf€¾oó~{¼{Àeð¾tiÐa¦@ ˆœ\d\cóõã Ýï÷®œ&ZX&[ü5`_ø§çéÅDÅE?>N""#ýûîF  Wüÿø)ÄÄÄDÿ¿Ëèþ¢G †oñU‚|l ã¿çü÷ÔÀ(ø3Y£°Íö2¯áœsÐgûÿ9øù÷ÉÈGÉD¿>öp :¦–8ÝïÑuw ä]ƒ9çùÉHII?=ÙÈ2:0ä?BU¸äZÀ.AúrRrrOÏ“’‘’{,àGfÀ(íþ%å\€.IÈäß 9iYig÷©ÊHÉȽv° ?¦™À(øÃü=_C9gÀÎYïþòÐΔv ¿ßp·%·Ÿ4€_ü4PUòR¯ïó“•––ÿ|ÿá’dø;þ« ¶r³”””•~zðîL¨g%OЇV¸·«\cß¡9)) '÷©ÉÉII?½^-t¢–@+ýÿŸ†o™ûÞÃ7ÈyÇÇÇH?=^9à2Žw ¿ß:™,ýÌ`ÿ8¨èˆÇ÷ëÆÁ:.ßï=,2M´° G ßákø—çÅ?¿Î"*"#ýêq1ï‘úºòq1Q1?ÿ÷ŠtK»¿ÿú`dx¢F~‰«ãâÚ¾è‡ø)ÆFEÆ¿¾i”Þ¼ôˆ÷è3ýÑȯq¡“üd#ÿÏA~Ž5áÏŽïïúN ZcÏœýWÎAx3…~‚œ”|„Sóõ›ƒ#w1FOÑZ.Adáß¡9I))'÷ÉÉÈÈD¿>•j£•ÈÍþ9æšÀ.IháÞ÷ éÊÊÊJ¿¾K+!%ï÷Ë1€QÙ…`ÈÍþ&®¡œ‹ gý y'0ÊNÏßû;i´ß=9ïÑ9’•y®‰<üý9Høx/÷Ì6†GŽyQóßá4´qÊ!œß¡'+%'üõà\Œ98ð2‡êœ;ÑC7W¿DNRJ:Eùòr2R1ßïž!Êa“Ó’ÿÿƒ·¼fì›ôLãdb#_ŸïâA/†_ðW;\³tàÏþ*Hh··ÄÿÎ22ýã©QëØ¼óÓÿð•rû¡ÖC7øYÃÄAľN&""#ýòpаÐß‰‰‰ÿŽ ½ÑPßÿôZ•`h?a¡Ÿa(Ï_øh—ø)ÅÆFÆ??GíüÿÖ€%\ü9øSï°Ydo„?}þo±q²/ßô†h˜øÇ×ø›¨g ûÿ8¿ùççÚ5_ƒö:1ÿþ&p ~Œ~~œ|¤ŒƒûÜã¿ä#ŸŸ(Ô}ŒØèÿø5L#ã£ß?ç'))(þùû¥$ßhÔ,`Ð~ÈI?ÿѸüä$_Ÿ§+%)(üùGèö€ •ËC¬iø³ïßó{ƒ“ÿ~Ž5æ>FEýþÀù'ø)ÈDIÈ?=ÑØûHÇÈ?ÿѤ_ÈH?@Î:JFIýârQr1ÿµ€Llwûå@%Èüdsóôáâãcߟ#o?þ÷F€ m˜˜¯ø)½ÄDF@¿N2223ýæŸçÛÀ&*'ýþ&ÃïQ?ï󅈉‡ÿ~œL:>;ýêqѱѿïSŒÿ{œddd_ûÜââ¢â¿Þ§þ÷8¸˜¸Ÿ÷¹ÄÄDĽN"öï0ÐN§›@¿Î"#ýöq11?ïÓŠ‹Š‹|œd\d[ûìã#c#ß'þù8èèèç÷ÉÈHHH¾NBBBGýòr/ï“‘‘‘’ÿ|œ”””“ûää¤$dß'#%!$þ÷9)))/÷©ÉIII½ÎNJJOýîrRrR_ïs““““ÿzœ¤¤¤§ûÜå%%%?Þ§))))þõ9IIIO÷¹ÊJJJ½ÎRVRWýêr’’’Ÿïs””””ÿ{œ”””—ûÔ䤤¤¿Þ§%%%%þõ99)/÷©ÉHÉHÿ¼ÎFBFCýâqòòïÿzœltlwûÔ㣣cÞ§þ÷8¸È¨¿÷©ÅEÅÅÿ½N.**+ýêqQ1Q0/sˆ‡ˆ‡{¼;s¡œ£à_ôœy=[À& q1?ïÓŠŠŠ‰ÿ}œTdT_ûäã"ã"ÿß'þù8ÈèØï÷ÉÆÇFǾN>>>?ýòrñÿï“‘‘ÿ|œ„„Œ‡ûää$$$?Þç!!!!þù9  ÷©ÈÉHI½NJJJKýêrRRR_ïS’’’’ÿzœœœ”—ûÔää䤿ާ))')þõ9IIIO÷©ÊIÉʽNNNRKýêrrrRïS““’“ÿzœœœ”—ûÔää䤿ާ%%%%þõ9)/÷©ÉHÉH½NFBFGýêr2ïS‘‘ÿzœ|t|wûÔãcc#?Þ§þõ8¸¸¸¿÷©ÅÅEÅÿ½N.*.+ýêqQ1Q_ïS‰‰Š‰zœDDDD Üáá¢!à_g û8ˆˆx÷éÄÅDDÿ¿N*.&'ýòqqqQï“‹Œ‹‹ÿ|œlt\oûä㣣c¿ß'þù8øøøÿ÷ÉÈHGÇÿ¾NBB>?ýòqòï“ÿ|œ„Œ„ûÔäd¤$¿Þ§%%%%þõ9)))/÷©ÉIII½NJNJKýêrRrR_ïS““’’ÿzœœœ”—ûÔääää¿Þ§''%%þõ999)/÷©ÉIÉI½NNNJKýêrrrR_ïS‘‘’’ÿzœœ””—ûÔä¤d¤?Þ§#!!#þõ9 ÿ÷©ÈGÇÇÿ½N>::;ýêq±±Ñ¿ïSŒŒ‹‹ÿzœ\Td_ûÔâ⢢ÿÞ§þõ8¨˜¨Ÿ÷©ÅDÅDÀ½N&""êpðñð/s‡†††|œ<<>>>êqñÑñÐ/SŽzœll\\ Ôââââà^§õ8¨¸¸˜©ÅEDÅ@½N*"*"êqð/Sˆ‡‡†zœ4444 äá¡¡a`_' þý8ˆxx÷éÄDCÄÿ¾Î&*"'ýöq1q1_ï“‹ŒŠ‹ÿ|œ\ddgûäãc##?ß'þù8èØØï÷ÉÇÇÇG¾N>>>;ýòqñññÿï“ÿ{œ„„|‡ûÔä$$$?Þ§!!!!þõ8øùÿ÷©ÈHHHÿ½NFBBCýêrïSÿzœ„„„‡ûÔä$$$?Þ§!#!!þõ9 ÷©ÈHHH½NBBBCýêrïS‘‘ÿyœ„|„ûÌãããã¿Þ§õ8øèèè©ÆÆÆÆÀ½N..22êqqqqp/S‹‹ŠŠzœ\TTL Ôâb¢" ^§õ8ˆxxx©ÃCCC@½N îp°°O“††††ÿ~œ<<4?ûôáâ!áÿß'þù8ˆ˜xŸ÷ÉÄÅÄžN.2./ýòqq‘Q_ï“‹‹‹Œÿ|œtldoûäã£ccß'þù8èøèï÷ÉÇÇÇG½Î>B:;ýòrÑÿïszœ„„|| Ôä$#ãÿÞ§#!þõ9 ù÷©ÈHHH½NBBB>êrò/Szœ„„„„ Ôä$$$ ^§!!õ9øèè©ÇÇÇÇÀ½NB>>:êqñ±ÑÐ/SŽŽzœtldl Ôãcc# ^§õ8¸¸¸¸©ÅDÄÄÀ½N*"&&êq1/Sˆ‡ˆ‡zœ4<<4 Ôá¡¡¡ ^§ ù88888ÌÂB4€¼ Ák@( ÀÁlÿ¿æ à`¶ ZA@^ `·ýû0ðí  /°ZÒ ð0[¿ï¹‡ˆix-‚Ö P‚Ø-ÿ|Ì=¼à`¶ [Á@^ `¶ï1ñΠ/°ZÞ ð0[°/ynx-‚ÖàP‚Ø-{Ìlkp( ÀÁl·€¼ Ál Þc£[@^ `µ¸à`¶ `^óÜ ð0[­À /°[÷˜ØÖàP‚Ø-nx-‚ؼÆÅ·€¼ Ákp( ÀÁlÀ½æ.1´à`¶ [A@^ `¶ï1qm  /°ZØ ð0[°/y‰‰kx-‚Ö°P‚Ø-{ÌLKX( ÀÁlµ‚€¼ Ál Þb"Á@^ `µ¬à`¶ `^óÖ ð0[­` /°[÷˜ˆf P‚Ø-jx-‚ؼÃÃ5€¼ ÁkH( ÀÁlÀ½æ¤à`¶ Z¼ Ál Þaaš@^ `µ ‹ÀÁlÀ½æœ‹ÀÁl³x-‚ØÌÁA2‚zŰZÌEëÁl äÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿü2’ ã W"…Th ?¿ÿÿÿÿÿû‚öœ{@­ÍŽç ¸KI:¨vNq°5s…nΨëÜvGpep{‚¶€|2l \à¥Õ’ T ô;fï\PËç[ †N qY Ã'87ÿ¾û‡†qq‘±/N;»«¶áan ƒ»Çsººº¾á›„ ÈÂAÜÁWMãqv݃¹\¿ÿß}û½¸ÛŒ-Ø!uw}ÎûýØß}÷ߺ¾ûï¿ÿܯº0Î6666ñØK»ï¾ûÃ>êû¦ã7ïÝ_}Ò{¾ð—‚ï wÿ¾ålMîûÂ]›ÍÎåy¿rna.AÜîÞå¾ûï¾è÷Þoºyÿû›xwß~ûÉ÷ß»é8ï7Þèè-÷ï»O¾û™¹§ÿÿvß¾ÿ¾ïûýÒwßÿÿÿÿÿÿÿÿÿÿÿÿÿÿû±ÿÿÿÿÿþð¿ÿÿÿÿû±»Æ÷ÿÿÿÿÿvÝ] ïÿÿÿÿþç}÷?ÿÿÿÿýÎíÿÿÿÿÿÿÿÿᜌŒŒ‹óçÿÿÿ¸PÜ)ÿÿÿÿÿ÷mïq¼ ÷Žñ^>ãÞìÝݾènÛß{{t÷mãtÞ7ß~áMÄàÎé¸0î Ün ·NœppÎÜ.áwÜní;N7y;nÕÛy:¼]\¯;Šóqû¥xÞÞÞNtîî®güúû÷wWîÉç¹ßÝÝþýÈw“¥zrÝ_rÝ' ðÎ.2&)ýýÝ÷wß¾û÷w÷ÝwW~ôé¿}ý÷[î·ßváœTTTSûû»¨güüîý÷ß»¿»»ï»»}÷¿}Êû÷÷¸'zv®ïO¾ò}Õ÷÷§½íØÝ¤êæžÞ;ï¾û>~îû¤ûÉÚy<Ÿ}ᓽÁîIûštOÜîIÎòu»O[ï¾ûïßyÿÿÿÿ÷IØ¿ÿÿÿÿûƒZ†wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøî  x"…Xh ?¿ÿÿÿÿÿûƒÑÿ´óô2_qÊÀ¼â1}-'ÀËçœw9ÊF\ #óƒ$ ñúå)Ç ¬zTjº¸ÃÓWxöˆ.«j㞇—8åÁ øý|<„§O8"«¹éLýÒƒBIª€Hø®08¸)u…Sö¹)U´œãÜ⦠wW*®0‡Ž87ÿ¸UÆÜ-Ü.îû»…‚®ÁWwnIÙ;÷an ¹® ‚¯\@î w#tðUÊîçr»¿ü3‡†††|?¾îûî“î¯'i÷û¦öéºÓ´û•Ò}Ý÷ß}ÿþçwvx&ûï }÷ß}ØÞ ¿¾ûï¾ûï¼¼ ¼Þð—ÿûï y¾ûÁ7ß}äóy¾û°w·Þn¯ß}÷ÞO'ÞûÍæósÿûîDûïßr¼ß~í½9_}Ø;Áßy¼®Wßy<Ÿ}÷ÿÿs¾ò}÷÷iÒ}ûÛÝ÷÷ß~ûï/ÿÿðÎJJJKýëÿÿÿÿÿÿðÎRRRSýëÿÿÿÿûÂxg))))þùÿÿÿÿÃ9999O÷Ïx+xÿÿÿÿÿîÆ÷x[°ÿÿÿÿû¶ööÿÿÿÿÿýã}ÿÿÿÿÿû ï¹›ÿÿÿÿÿÿÿÿÿÿÿÿÿp£pÃÿÿÿÿÿ￸Ÿ¼o7kv7…oµs…·o·{y÷›ÛÛÏ{xïnCܯÜ!¸›ˆÖC{ƒ7ø:p–àíÂÉÂø;¸]Æn¹·Ý7Üw“»Ûý÷w·$â¸kˆÜ•Ã7"p×Ü®W§÷W¤²»vÝ»Ó÷Þ•÷÷wgþû»«»ûïßsÝ'÷Ö‡?ºNÕÝß}ûïï¿»ý÷￾ýÊå½:¸6û‚0¾ïu}ûïï¿»ýÝûïï¿}Îû«»ûÀžêò¼Ÿp{ï¾ûëoß~ã¾í{Ó÷ßß}÷+ï¾óx ¸¾ûï¾ûïï'ûýéÙþûïß}÷ßÖßÿÿÿÿþä&Ÿÿÿÿ†rRRR_ïÿî j'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ ! š"…\h ?¿ÿÿÿÿÿý`§”×>à@%×8îE®’Ç.:ŒØÁfà{pN ßEçœW ¢÷SÓîpmÀýáÿžóÔëžàŠàô0G=O,›ƒ×‡ª×,s(V¹c’@!T?ߘSг×î\\r¶q ¹C¾yÀGÿ¸îÁÁWw+˜#u}àÀÈ#q‚7 UÝÂÁ[•°×\cp8 ºÜÜ0;‚UØ*ðFä\ÁwÜÅq\ ßÿîîÛ•÷Ý_}ÚtžO¾û¯{tß}Æ7ÞO¼Ÿt'Ý\î_þû÷ßs¾ðMû÷ßvïº }÷ßs¾ûï¾ûî›»—ÿßy¼x.ðï¾ûï¹ßxw#s^Þ ß}÷ß}÷ßt7‚ïx*ð—ÿý÷ܯ¼;ï'›îW›îDûÓÉ÷›ï¾ûîw;ï7“ï¾ÿÿîwß~ûï¾ý÷ß~ûÉ÷ÞOÞO¹o¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷`ÿÿÿÿÿþìÿÿÿÿÿ»vÞð¿ÿÿÿÿû¶ûÓßÿÿÿÿý÷“ïÿÿÿÿÿß}ÿÿÿÿÿÿÿü3Žÿzÿÿÿÿÿîá?ÿÿÿÿýéýÀó÷ƒ¼}á}á÷‡¼%ãyÞñ¼÷áo x÷ãxÞo xÜîÜ)¼oüx;‚iÁSpTw7;‡¸HÜ$Ü&ámÃ§éÆœföôçÞÞŸurÜ““¸k†NWon$ôûƒ‚ Î ‚‰¹=ÝÝÕÕÝÞûïß}Ïv7]ÛsßÞÝo¼·ß½:ÝÜ‹v5`îvç}÷ßß~ûûÚÝß»nÞëuuß~û÷W÷ÕÜ}÷ß~ÈHÇÈ?>>ûîw÷ië}û§ºº¾êë¾å¾å}÷÷ܬo¹›÷ßp{ï'ßr7÷ݽ÷W{Ýí÷ݧ»…]ß}÷;ï¾ðpÎ"*"'ýòðÞw“ï¾ò{s¾æO'“îwz»ýû««ïß}Êûï¿Õ@Z¸öÿÿÿÿÿû‚UC îÿÿÿÿÿî+L!ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà, : »"…`h ?¿ÿÿÿÿÿýÀ>à[pNàqÜèÜáÕGÃÛ ZåŽl5k–:ô ï÷×[ølÜj×,‚ÆðCV¹c OBA½¸6À ½ÀFà ZåXÚj×,t$ è'Ç7Nâ1‡ÏG\‡´õk–AcX!«\² =žÿ~pR +<}ÀÖá7ßÿ¸H;‡_xKÁWWw‚7AWƒ¼Ø*ìÝ7ƒ¸tà #v ¸X&àÁn%àÈØ*ðw@›Ân ºÜÿûÓï¾îîû¤ós·÷Wao7ÜïOo»»º¾ýÕ÷ÿý÷ß}÷ßwýɹîWß}÷ß}÷Üï¿ÿï¾ûÍ÷Ü›°··‚71º¼-àîÂÞ ¾ûï¹Ý§ß}÷;ï7+Íæÿÿ¾åy¾óxÞ÷“Û°—éæûï¾í¾û»ï¾äO'ßs¾ÿÿï¸b}ûï½9§{îw+–êó¾äwß}æûÉÌžOÿÿÿÿÿÿÿÿÿÿÿÿÿÿþðŸÿÿÿÿÿxNËKK˾ÿÿÿÿ»ûÆð—ÿÿÿÿÿß½¿ÿÿÿÿÿwt7›ÿÿÿÿÿ÷í÷ÿÿÿÿÿÿÿÿÿÿÿÿþáàÁÿ¯½ÿÿÿÿý÷"­½È×Þ÷›Çx;ü{Æð{ÆðïÍã äå¥%^Þãx÷íæñï=ãx}á߸U†èwŽðw·Û„•Ává=÷WœÓî½¹§ýÊåq\MÃ7 mSÜ3…7¾ó}ÕÓtœà¢pQ†pp°ÐÏÏ«ˆýõ÷ÞO¼O¸^ç}÷Üï¾îã[·½ß}Ú½?uvß}÷ß}û¶øðJõúúû‡»¾ûî·;ï¾þîÿÝ»Í÷ßwuº»¾ûï¾í9w+ð_ûþû…Ýß}÷ï¾ûïï¿ûÛï¾û»­ÕÎûï¾ûî]Á+Àšè Wýáœ\\\cóóÊûï¾ós¾ûï¸]÷žãþó}÷W[îWß}ûîWƒî€›`ûžûî1>ûïºNïºnÛ»ÿ¹_}Å}÷ß}÷ß}ûÀÆÐ"oÿÿÿÿÿÖÞàŠ«'_ÿÿÿÿû‚ ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðE ò Ü"…dh ?¿ÿÿÿÿÿÿØÜîã¹ÃFÀCV¹c› Z厊Šÿ}á£p!«\² Á Z压Œƒ{ÃFÐCV¹c›Á Z厌‚yá£x!«\±ÍÀ†­rÇFÆA>n ØX+ãìkœ\ ÷¸ þÿÿÀÀÀ¿pPpp°/ßppww ¸pUqcžû UØ#t ºÜÂÝ‚®îW T3ŽŽŽˆ‚{q® UØ#pPnw`«*à¸*Ünp`UÁ@· ¹®@ÿ†p00pp/¿ºo¾å}Îû¶é;Nwîî·W‚®Û™9ï7·MÛtݧ·Ý‰ÿÃ888HHïß}÷ßu}íéÌß÷WW§áÜîwß}÷ß}Êåü3„„……ÿ~ý÷Üà›Á7`›Ágß}ýàï»o¿rŸ}÷ß}÷+Îÿÿß}¼ûÉäûÉ÷ß}Åv ¹íáÝ·ß¹\¯¾òs¹ßy¹Íÿÿ¾ûï¾ûï¾û÷mÈŸy¾û÷„¼¯¾òy>ûïÿþÆÆFǾ9ß¾ÿ¾þûðÎJFJKýë¾þûÿÿÿÿÿÿÿÃ8˜˜˜Ÿ÷Ï ãc££¿ß?᜔œ”—ûç¼ÿÿøgþýÿÿï ÿÿþÄDÄÄÿ¿ÿ÷…½Þ8g))))þõÿÿþÆÆÆÆÿ¾þöûÛ’ÿÿÿÃ8ØØèï÷Ïÿï¹_ÿÿøgþý ã###ß¿ÿïýÓÿÿÿÿøg))))þùß¼/ÿÿëïVÿ ããããßžÿÿðÎRRRSýïû…\ aœt|Tûßõòð̼3ÿÿÿÿÝ^Â?×ËÃ2ðÍáÿþñïo7¾ñ¼o>ð÷Cxïî pcpQïÁÒƒ‚ŠÃ7W¸ÂÜmÂnpq¸I¸>ácp±¸{Œn6ì-Í¸ÆæÞo½ïonIËq ÄW·N}æá}ѾöàÃpPœ×þ¹[î;ÝÕÌÝn“´ôí½9ï¾á?{¾ûaÜï'Üï¾ûï†q‘QqïŽÆöÄCÃÃ??. Õ†jÃ;î®ï¹_½¹·ßt»ïþöûﻺ¿}ÝÕÎûï¾å¾òx\« Õ†wßuu}ûîdûî“·t'º{ï¾û÷ßw}÷ß}Ë}æâk‚µaŸß âã#"ßÝÝß}÷ßvß}ÐÃ9I9)ç§w—º¿¾û•÷ï¾û•÷ßy>ûï¬lop›÷ï¹›Çy>ðÏnwß{{½îw“ï¾û•÷ÞWß}ûï«ÇÿÿÿÿÿëtóÉ­ßÿÿ†rRRR_ïÿý÷Ã8Hˆxxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøgþùÿÿÿÿü3„„„„ÿ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüý ` þ"…hh ?¿ÿÿÿÿÿÿ÷;ÿý®c;ÿøg ùï.îàà®í BLðBì¸%q‚®Àû†ºn GtÞÝðÎ66B6éÈsn Bá@…Ä ¸0#pKpP¸ ÿ†pÐðÐÐ/÷·‚nW›Â_s'ww!Þët7‰ÑºnW r7M÷WDû»•÷iËÿ÷ß}÷ß}÷ßux}÷ÞO¼Ÿ}ÈŸ}÷ß}÷ÿþç}÷ݧß~íovï»O¾ûîWß}÷ßy¹ßÿîwßwvœïû»ÛÁÆðï7+Íæû÷Üï¹›ï¾ûÁw„¹ßÿý÷ܯ¹_}÷I÷ß}Êò}÷O¹ßr¾ûîA?ÿßs¹^{ï'÷Üï'ï'žWÞO/ÿÿþÿÿÿü3†‡†‡ÿ~øgþùÿÿÿÿÿÿøg%%%'þù÷@ÿÿÿøgþùÿþðw»Á0ÎVVNYùïÿÿøgþøÆÆÆÆÿ¾ÿrnW+ÿÿÿÿÿûï¹ÿü3‡ˆ‡‡ÿ~ÿÿ÷Ao¾Àkÿÿü3†‡††ÿ~ÿÿ÷C}äÿÿÿ¸8_ÿÿÿþâ¸0_û÷ÿÿÿÿî-Ò ãã£ã¿ÞðÎ2.23ýó×½ïð~ñïx;Â^à÷áÞx;Æðïð{ÁÞÜ0K†¸UÁ@áœ\\LSóõà«Àí€T ½Àêp^íÜ,-ÂÍÃŽáÁÜcqÝ…¸}÷Þßr¾âÞßp× Ü"áCpÃp‹‚p„áAwØ žâ¼;•Á î \ pAW>û‡»¶é=nÂ]'6åq­ýáo}Êûäîôû÷IÕ÷;áœtttcóÓîpÎ2..1ñõ÷ß„;vŸ}÷î;Ó«ï½¾ûï¾ûî[ï¾û¤é¾øgüùy>ÂÂ@Â?>¸?}÷ݧîîÓï¾ýßÝo¾ûï¾û–ûï½>ûï¸,pHÜ7{ïÜï¼;Í÷;ï-Ïî†é>û•Ú}÷„<ï¹_}Ò}÷Þ[êñêžà¸Ü¾óy¾ûï¾ûÉ÷Ý»±¸Ç¼nÓîw•Ó¹^o¾å}÷ßxCîw–ûRwÿÿÿÿþé>ðKÿÿðÎRRRSýïÿÿ¸,žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàk O "…lh ?¿ÿÿÿÿÿÿö‚þ:ÚPïÿ÷«nÿÿáœL\Td Øg þþÄÅDÅÀ¾C8ÈȨo÷°Î62*.íÎæð>ÇFÄÆÿ½Þ ¼¸EÂoaœldlwûÜ3‹‰yx 㣣# Ÿn 6èºá’.+üôGûèe‹‹Œ=ôàÀp`Fàkᜠçûƒ· .0UÂn\Á šxÞoßs»nNðBðBðMÈÜ®@…÷Dôû†.WÜìwrÿý÷ß ãc#cÞŸ}÷;‡¹ß~ï¾òy<Ÿ}äûÉ÷ß}÷Ü¿ÿ}÷;÷;ïß}û§ïß~ç}÷;ï¾û—ÿ?}Êûï¾û÷Mà»°UÆÞu¾ýÊûÉ÷“Í÷#sÿþûï¾ò¼Ÿ}û˜.í¹7íÐ; M÷Ý'Wßy>òs¹_ÿþûîW÷;ï¹nÛ‘>å»Êñ:ßs¾ûîwßÿÿÿßÿÿÿÿÿÿÿÿÿÿÿ÷ƒÿÿÿÿÿû Mà43—••”~}ÿÿÿÿÿ¼÷Þ ÿÿÿÿÿÞßxg/ÿÿÿÿý÷“ïÿÿÿÿÿß}ÿÿÿ¸8?ÿÿÿÿqÿ°  á¢a⟟ÿÿÿîâXgþùñ¸/='þñ÷„¼?x&ðC÷á÷wî+ƒñ¼xÜ,!Îàán „¸L3އ~}p°— ¸H[……¸îãáÂÜn0· }äóÜ@ïr¸‡q¸aÝ\!¸3¾å¸a»n 7“‚Æà–» ¼;W›ÎìOݧDûï¾ûÛg;ýûÓ÷m×vNÃßrÞß}Îû–¿(?s¹îwï¾ûï¾ûïîûÆýÕ÷·Då¾ýÊûîW>å~7?ƒ%A“Ÿ¾ý÷ᜄ”„‹óë÷ß~ûû½Ð;Óî†ýíéûïß}÷Ü®÷ßho˜J ÉPdçßs¾ûï7nwß}÷ï¿p{¾û÷Cu}÷-÷ß}äû︘gþ÷}£s¾ûÍ÷ßr¾ûîw“É÷ÞO¿y¹÷ß»¹ÍÛq_r73}÷߸“‹¬Wµ»ÿÿÿÿÿc8ûÀÇÿÿÿÿýÁæûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàZ g @"…ph ?¿ÿÿÿÿÿþÆïT£ˆÂª·ëŒ02ûÿÿqRÇGÚœlïÿÿ†q11Q_ï—>áì6ðÎ262;ýó†qѱѰOXgñÃ8Øèøè'È%÷@L3‹ŒŒÿ{ ⢢â ^8˜¸˜¨«‡¸ÿ ⢢⠞œ`…Æ_q‚7@é̺onW‚o/ïÜ ˆ»x&ðBânÁ7‡}æá…„Î226-ýéÁ# ááâ"_ß?þà÷Wîb}÷···÷ܯ¾åy97ܯ7ßtOo½;NPÎ"&*)ýóÿáœdTl_ûÛï¾ûï¾ûÉýûï¾ûîDûï¹o¾û•ðÎ***-ýóÿáœ\Ld_ûÓï7ß~ç}Ìžo{y¾ûîWß}÷ßr¾ûáœtttcûÛï¸-ÿý÷Þo¼ßy>å}Êå}÷ÞOºWß¾òy>ò}÷Ÿÿ÷“ï¹_}÷ݧ»•÷“–ö÷}ûï'“É÷“™?ÿþûþí÷ßý÷ÿÿÿÿÿÿÿÿÿÿÞ ÿÿÿÿÿû ÿÿÿÿþðw$ðwAÿÿÿÿ÷îMÓÿÿÿÿÿ»¼÷ÿÿÿÿÿï }÷ÿÿýàÿÿðÎZZZ[ýóÿ¸=àÿãp\&:9Îÿÿÿÿ¬ ÷뺠ÊNÿᜌ””“û×ÿÿ¼oõ¸(7‡ ââbbÿßpÎýõÎóžn0— Ü,;ŒwÜan0îq‡vÝ» sx[°·…ïè;…r¸ƒ¸`·&á ‚—+ø@[Û±¹7Ü pP,3ˆ†‡ˆ~}¯ùÑϺNàã¸ÛnïÝ·wjôôôór†n#¾ûo7ßr¾ûî·mÉ8×ã¼çî„û•÷÷ß}÷÷a_xÞß}÷ß~ûžû÷Ü·ÞO5w†kþts–ç}÷ßß}÷ß¹ÿzr¾å}÷ß¾ý÷￾øØuëŸÎŽ}÷ÞnWÞwï¾û÷6ﱺèn›ï¼Ÿ}÷îw#}äûï¾à‹s¹U2ssôs÷ß}÷›ÓÓÉ÷ß~óx÷éÛy<Ÿ}ääO'ܯ7ßr¾ûîW÷l1>¾ñûýÿÿÿÿû‚†íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþr R b"…th ?¿ÿÿÿÿÿÿ÷uvÇ?ÿ÷@—ÀÉ_Üà‹ÿÿÿ¸X*áÀÛ¿ü3yîÒ3Ž^àßÿûƒ·ûÀ»Âß}Ì»aœ|||‡ûÛÀ›Œ¸5Áïoaœt||„ ÓÀÛÀÛÀÍÐx&è¼ º®îÜÿþÅÅÆEÀ½¸.œ;„Üï¾êã¼3ûÝé÷§§+÷·“«•ãº×ÿ÷Þûï¾ûï'ß}ûžûï¼Ü‰÷ÞW;•÷;—ÿû•äûï¹ß}÷;ï¼¾û÷O}÷+ï¹_¾ÿÿ÷3y>ûÉ÷ß}÷ÞO¹_}ýÕ÷ß}Êòy¾ûÿÿÜîw“ïÞO¾û<Éû BðGx#}÷;ï¾ûï¹ÿßy?¾ûïß}÷ïoWmûï¿y>ÿÿÿÿßÿÿÿÿÿÃ9iYiW×Ïÿÿÿÿÿtÿÿÿÿû˜#zxx'ÿÿÿÿÿ}÷Þÿÿÿÿ÷;ï¿ÿÿÿÿÿy<Ÿrÿÿøgüÿÿÿÿ ååååÿÞÿÿö0UÎ ƒÿÿÿÿÜ(pÀŸû°g¿ÿ†r’’rï˜g----þùÿ†r’’²Ÿï_z|3ŽŽŽ{q¸7í°MÏ®Á7†qÑÑÑÏϯn ä$d#ŸŸ ¸ÁÃ9))綈Î8X*ãx;Â\,%àï pJËKKÊÿ¾<x.ðUàÐ;ˆp`w; T3‘‘’‘z¹\®“ïÜÁÜ ¶õÝÎvNÉÇp‘Ü»ƒÜiǺoNÓ÷;弟xœ®¯NÓ¶û«&á®wÞo¹]··»[ØÜýÍ9Ý^Ÿ~ûï¹ß¹Ü¯ûïûï¾ð÷-÷+îA/ßy¼ß~ÆFFÆ?¾¹ßs¿¾ûï¿s¹áœ¬¬¬¯ûÛÝàîMäþû®å}÷Ü®wßÜ u·>ýÁsxK•÷ᜄŒŒsóë•Êûïßr-Þôò}÷„ÝÜ]÷ß}á/¾þá6‚—† œänw3y¾ûî „¹“É÷ܯ¾ûÍÆÞ ºûï¾û÷…º pÛÉäòy9Ìœ‹}ÊûÍý÷÷ßÿÿÿÿxgþÿÿÿÿÿ¸0wÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€] Ñ ƒ"…xh ?¿ÿÿÿÿÿÿû€wÿøhÖj×,sXV¹c á ßÿÿû„‚7 n?ÿî Fá¿ÿÿx8gù ã###?ÞÞ]·M̆qѱ±ÿïxg÷¼ïw‚aœ„|„„ ÐgôäÝ·×ׂ0Î..&3ýîðFð7ðÎ óÃ8hxxˆÏpp>á Žá …÷ÝÝ70MØ*á ›‡.0>çs'`«ÆåtÝ7m÷ÞN$äÜ0!¸fá¿áœ444/ûðg þøÃDCľq11?ïíé÷ß}÷2}Ìß}à‰÷Ýßwt·Üï¾ûîWßðÎ ýó†q?ïžç}÷ܯ¾å}÷ܯîv7<®“î[÷+ï¼ßÿ†q1ïŸs¹„¹ÞO'"xg“ÍÈÜîwÝ÷wÛ‚Ní•ï¾ò}Îç}÷—†pапï˜g þýý÷ÞNW=æûÉäûï'+Éæìx+x#s¾í>û?Ã8hXxo÷ÀÎýð3ƒƒƒƒÿ|†pðððÿïß ãcc£¿ß}Îå~û•Ìœ¯¹ß}û›{½¼®îWîWßþÂBBB¾|3ŒŒÿ|ÿï¿¿ÿÿÿÿÿÿÿÿáœ4<,7û÷ÿÿ݃ÿÿÿÿÿ†r’’’ïxg/+/)þúætÿÿÿÿÿs }÷#ÿÿÿÿÿ¾ûÉÿÿÿÿÿûï¾óÿÿÿÿÿ¾ûøg++++þ÷ÿÿ°¸#ÿÿÿý‚Ü0?áœ4447ûän4ç=ÿÿÿÿx{~àÀáœdddcóçÇžøgÿþìn ‡†qñÑѯ®=àîÇvx;Œ=Æán0ûÂÞãpE¼nM÷…º ÞAœtlT{ûã†änáA.‚Ü&¶ñûßp\-Ý¥{‚áÜmÛp}Â[…·¸tá#wus¸î¯Ý‚¯oº¼w&ûïnÁ¯¼;îWÞN›îZ¿Ý÷Îç¾ûîwß}Öû÷IûÉ÷îw}íØ÷Þ{»»ï¾çs ý÷í^<ï}÷ßsß~û÷;ïß}Ø;￾þîîå}÷ß~ûîF쇘žþûï¾ó¾ý÷ï¾ý÷‚nÄí]]o7Ã9)9'ç«î›Û¤ûï¹_¹ÍõÛšHç3pG ã"¢áß^O'ß}÷“ï¼ÜÎûÉ÷Þo¾í¼o±¼o'î+³wy=>ûïîw›û‚}÷÷ûïïýíêÉIII½ÿ}ÿÿÿÿÿý æÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÜ 1 ¥"…|h ?¿ÿÿÿÿÿÿÿÿÿÝþÂÃCC@¾pÐÐÐÿïŸÃ8ȸÈh— ¿ÿ¸€Û…÷_ÿøg  ÷þáÂ^áÁðÎ>>>>çîÞx' ⢢¢Þž ÿÿ¸Hp°GppMá/¾öãïn;ÁÁŽðBðFðFì¸ ˆ» väo pƒpƒp€?p`>àÀoÿû;7ܯ¾û•÷·¾ööôäÝßr¼Ÿr¾ûïºn¿ÿß}Êûﱽ̞O¾çwß¼žO¾ûï¾ûï¾ÿÿ÷ß}÷ß}÷ß}ÅvÞßr¾ûîWß}÷ß}Êûÿÿß}ÎûÉ÷ß}åvÝ'ßy¾ûï¾ó}äòy<žO'—ÿûï¾ý÷+ïÜî“ïß~ðϾòvÜï¾ûÿ áááá¿ß?ýÿÿÿÿÿÿÿÿÿÿÿÿÿ¼ÿÿÿÿÿ÷‚·‚¿ÿÿÿÿ÷ƒ½¾åÿÿÿÿÿßr¿ÿÿÿÿÿxK•÷ÿÿÿÿÿï¾ÿÿÿÞÜ ÿÿÿÿp«ƒ†qñññÿqï—aƒ¸*ÿÿÿýÅvÂ7áœD4<7ÿû¶í¸*ñï ÞÞxxÞñ¼ová{Æðï Þàï x[ }áßy¹x[ÍáÜn ÃÃÃÃÿÿ¾ä÷MÁÂÜNpÂIÃî;›s¸vçu}÷‚onWÜ5Ãân8dáI¡œŒ”t“óã„r¹_zpZà•÷í+Ã8hxx÷÷;Êí?}÷ß~æÜÃ>ûïß}÷ßsº†r’’²¯¯Ž¯¾ûÂr¾ûîWßy9ºÛƒ8x˜ˆ÷×;÷+÷ß¾ûï¿ï¾û•Ó åeee_žß}÷ß}÷Ã8èèè××—ß~ûï¸*ƒ8˜˜x÷÷;ï¾ûï¼ï7“îW=Ýßû÷+ïÜï¼Üï†qѱ‘ÏÏnW„?}æèaœ4$#óðg ÷ÿç}÷“ï¾óy¹Ü<·ÙïÍÐÝ Û}äûÉ÷Þo¹\®WßvÝ_½¹=÷ÿyïÿßÿ}ÿÿÿÿÿûƒ Äœ7ÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø< 3é Æ…€h ¦ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿôd2ð2YŒ€†^K ³ÿþúŒ †^K ±”ËÀÉdÀÀ¿Q˜ËÀÉd3x,‚È(8Ú3‚x,‚ÆpC/%Y ùF€C/%XÒ ð2YÐ/”h x,‚ÆP—’È,‡‡ÿ|£@(KÀÉd4‚„¼ –Ad<< åAB^K ±¨%àd² !â _hÔ ð2Y`¡/%YûF P—’È,k x,‚ȘˆÊ5‚„¼ –AcX(KÀÉdDÅ@¾Q¬%àd² ÁB^K ²**/%XØ ð2Y‘qïtl x,‚ÆÀP—’È,‹Œ{£`(KÀÉd6‚„¼ –Ad\d ÝB^K ±´%àd² #"à_(Ø ð2Y€¡/%YþõFàP—’È,n x,‚ÈÈØº7„¼ –Ach(KÀÉdFÆÁ=Q´%àd² B^K ²62îÀ¡/%XÜ ð2Y‘±Ð/Tm x,‚ÆÐP—’È,Œz£p(KÀÉd7„¼ –AddtÕB^K ±´%àd² #c ^¨Ü ð2Y ¡/%YõFÐP—’È,m x,‚Èèß÷º6‚„¼ –Acp(KÀÉdFÆÀ¾Q°%àd² AB^K ²..ê ¡/%XØ ð2Y‘qp/Tl x,‚ÆÐP—’È,Š‹{£`(KÀÉd6„¼ –Ad\\ ÝB^K ±°%àd² "âÿÞèØ ð2Y`¡/%Yþ÷F P—’È,j x,‚ȨŸ÷ª5‚„¼ –AcP(KÀÉdDÄ@½Ñ¨%àd²  ¼ –AdD< ÝA ¼ –AcH(KÀÉdCÃ@¾Q¤ËÀÉd4‚„¼ –Ad4< åÁ ½rÈ,h2õË ²òŒà†^¹d4zåY þùFpC/\² A ½rÈ,„ƒ}£(!—®YŒ †^¹dA@À¾Q”Ë×,‚ÆPC/\²  `_hÈeë–Ac !—®YŸÿð/´d2õË ±Ë×,‚Ç÷øÉÿÀÀÀÀ¿N úppp/“„……†|œ,444 äá¡¡¡ÿß'ù8ˆˆˆ˜ÙÄDEE¾N""&&îqQqqp/s‹‹‹‹ÿzœT\\gûÜââ¢ã ^¥‹Š‡ÿ=õ8ÈØ¸è©ÆÆÇG½Î:::>îqÑÑñð/SŽŽŽ‚zœtttwûÌ㣣£ ^gõ8èèøÿ÷©ÇGGGÁ=N:6>:îq‘±ÑÐ/sŽzœlddd Ô±‘qЇ ^³â ít Üââââàž§þó8¸¨È¨™ÄÄDÄÀ½Î""&&êqñ10/“††††|œ4447ûäá¡a¡¿ß' ù8H(H?÷ÉÀÀÁA¾N  òoïÿïð/“ƒƒ}œ$$ ìàáaa _'  ù8hxhx¹ÃÄCÄÀ½Î&&&+ýòq111_‰‹‹ÿ}œLTT\ äââã"ÿÞçþ÷8¸ÈØß÷¹ÆFÆÅ@½Ù•SÁ ƒN€V ö­*Ý  äd ì㣣ãÿÞçþ÷8øøøï÷¹ÇÇÇÈ@½Î:>BCýêqñò/SŽÿzœ|||| Ôããããà^§õ8èèøÿ÷©ÇGGÇÀ½N66::êñŒŠ¸ $ æ d˜^áC°h _dˆŒ‡|l Üãbãbà^§õ8¨˜¸¿÷©ÅEEÅÿ½N""&&òpðñ/“‡‡ˆ‰{œ<4D?ûÜáa!¡¿ß' þù88(HHÉÁAAA@¾Nþ òpppPP/Ó„„……~œ,444 äá¡áâ _' þù8x˜˜Ÿ÷ÉÅDÄÄÿ¾N&**.òqqqqï’ÅÅÞÿ}œT\?žÿÿÌ|sØAÿ|œ|„lûäãä$$ ^³!!ç°z’BF"ºCýêr1ÿïY‘…Žx÷©#ãâŸ!þõ8øøÙ©cä# @½f>=ì @½NB>.>êqñññï[\€ÒI ƒ/÷ËŠ@ø$^­ßïÚ†|kH4n ÷8ظ¸¨¬ÅE»C @½N..&/ýêq‘QßïY‰‰o“@½Î&&"&òq11ïSˆ‡ˆˆÿ{œ<G?½î;þ:)Êjƒ(®¯à 4‚ iÃGà_y`4fÀÐA‘Hñÿ÷¬+Ph놑ՆP/[ ¡ß¾sOCGüd`ù(˜ Áøî>´2,ƒôóàþýÜ@-ø2xûÞÀ+ýãšø22ødF¾ î¯!œ[ƾ^)Ð2m¯÷®_àÈéXd:â`Î ò°/‰y âŸßgþ÷8˜ˆ˜÷ÉÄCDÿ¾Nýòpп„„„ÿ|œûäáaa¡ß§  þý8ˆ˜ˆ÷ÉÄDDDÿ¾N"&&+ýòqQqqï“‹‹‹‹ÿ|œ\\dgûäãaãb?ß*† (ª(4¢¿ïÕSî1H¸Ï÷ûǺ>ßïU5€\àAx곃@ùÌ äwûíS P€KýöÄ¿z÷À,øȯÿü8ƒAú›à ‚ÿ~°ÓЏÅSƿߪó÷G³@ùþùU0hETÁ ÿyª04‘¨ÀÐ>F¿¿NJ:JAýæ©@Њ%ƒ@ )÷UPh#Õ |~}ïJœKç4@2è'®?i埀YÁ{âþýG@h?W ÉE½X“ÔøûÑKž1þ÷VÅn[òCý÷§ÔËŸ ¼ $ÍÅM,XðÏ÷ë=ÐÎüKä_ŸïòH½Sû·# ‡ÞGãCÏ‚}«Æ9€\gûåã[€*9¸¿Þ¸ã‰C1×pOµx âÞC8··éÅÄÅžÎ&&*+ýòq1ïsˆ‡ˆ‡ÿ|œ4447ûäá á¡?ß'þù8hhX_÷ÙÃÃÃÃÿ¾Î""#ýòq1Q1‹‹‹ÿ|œ\\d_ûäâã##?ß'þù8؈Ø÷º¢@&Š (¯ûíT {ŒPî5ýþñðΆwûÝNA 9€cýú¬ Ð>G³@ùþýU hDÕ ÿ}ª 4‘ˆ€Ð>Fÿ¿ÎB.>/ýú¨Ð @-þýUÀhã×Á |Žÿ}ª¨4¢Š ÐнÕÈÔ@h#?ß§%!'%þóTÀhEÁ |ª 4qêÀÐ=È?>U”AfPh ^ê€ äb4‘Ÿïó“Ž“Žÿ{ª€4¢ê`Ћÿ½Õ\Éph$ßo À $‹4O7;ðXðÏ÷ÚÅ>B)òÏ×{©°Ëýß‘CÁ™d:ø'ʹ\kÇ¿^9´£[+ýë8œ3q8À¾Õä3Œ{ âß§þù8¸˜¸¯÷ÉÄÄEDÿ½Î""ýòpап…†…ÿ|œûäáaaaß§þý8˜˜˜Ÿ÷ÉÅEÅEÿ¾N.2.3ýòqqqqï“‹Œ‹Œÿ|œllloûäãbãc?ß4œ (£2§Ž»ý÷H€Ð>D‘ýË´¿ß·þçh Óü_ïÜĆ6âµoÿ~«`4‘ûuTòo?ýóœºã•ʯ÷ÝÈ>G4ƒA‰à ÿ~Áz§ 'ûîä"#™ „Nð¾èñS†c‰þÿ÷ꯃ@ù$ñ÷ɾY”AW2ƒ@+þõTh# |Žÿÿœœ„¤‡ûÕU U€_ýòªàÐ>H«@ù!þûy@h$@*㋸Ü ȂºóPR ² 'ûô(è'9ÐÊýòÅà2õàÌ_ý÷Kåî‰*¡’€ýûq jœ£ (—ûõÆŒÁ |R/ûäPo‹‰‹ÿ{œddd_ûÔââââÿÞ§þ÷8˜x˜÷ÉÃBÃþNýòpppp†‡‡ÿ~œDLE8|3Žÿ{Ãïžà ~ÿ|Ðéñ¥èi Ð~¾ìhtúH4‹ôÿ߬ðÍî½î¾7ýöq±±±ß‹‹ÿzœd\d_ûÔââ¢â¿Þ§þù8xxxo÷ÉÃÂÃBÿ¾NýòpÐÐÐßïÓˆ‰ˆ‰ÿ~œTTT_ûôââââÿß§þù8ÈØÈß÷ÉÆÇFǾN666;ýòqññòï“ÿ|Ž*ü„ûå?Ïß’“ÿ|œŒ”œ—ûä䤤¤¿ß'%#%%þù„Aù)/÷ÊB€LYù)?÷¹ÉJÊJÿ½ÎRVRSýêrr’²¿ïQÉF•—ÿz¤Yù#òÒ¿ïS•––•ÿzœ´´´·ûÜå$e¥_Þ§'+--þõ9iiio÷¹ÉHJJ½ÎNRRSýîr²’rŸïS’”’ÿzœll”—ûÔäd¤¤Þ§%%#þõ8è¹ ÷¹ÆGHÇÿ½N>:>?ýêqѱѿïSŒÿ{œd\d_ûäââbâß'þù8˜ˆ¨÷ÉÃBÃBÿ¾NýòpðñÿïÓˆˆ‰‰ÿ~œL\T_ûôâââ¢ÿß§þù8ØØèß÷ÉÆÇFÇÿ¾N:>:?ýòr?ï“ÿ|œŒ””—ûä䤤¤¿ß'%'%'þù9999O÷ÉÉÉÊIÿ¾NNNJOýòr’’’ŸïS””””ÿzœ¤¬¬·ûÜ奥¥¿Þ§++-+þõ9YYio÷¹ËJÊÊÿ½ÎZZVWýêrÒÒÒ¯ïs–••–ÿzœ¬¬´·ûÜ奥¥ŸÞ§-+--þ÷9I9Y_÷©ÉÉIɽNJJJKýêrRRR_ïS‘‘’’ÿzœŒ„ŒûÔäd$d?Þ§!þõ8èøøÿ÷©ÇFÆÆÿ½Î622/ýòqqQq‰‹Šÿ|œLDTGûäâ!â!ÿß' þù8ˆxˆ÷éÄÄÄÅ¿N***/ýúqQqQïÓ‹‹ÿ|œltlwûäãc£ãÿß'þù9  ÷ÉÈÈÈH¾NJJJKýòrRRR_ï“’“’’ÿ|œ”œ”—ûää䤥?ß'%'))þù9IIIW÷ÉÊÊJJ?¾NRVRUýîrÒÒ²ÏïS–––—ÿ{œ´¼¬¯ûäååää_ß'+--,þ÷9iYio÷¹ÊËKK½NVVZ[ýêr²²²¿ïS•–””ÿzœ¤¤¤§ûÔää¤å?Þ§%%)%þõ9)))÷©ÈÉII½NFFJGýêr22?ïSÿzœtttwûÔã£c£Þçþù8ȸ¸Ï÷ÉÅÅEžN&"&'ýòqñÿ†††ÿ|œD6?ýòqñÑñÿÿ|œ„„„ûää$$$?ß'%%%%þù9)))/÷ÉÉIII¾NJJJKýòrRrRŸï“””””ÿ|œ¤¬¤§ûäåe%%?ß'))-,þ÷9iiYg÷©ËKKK½ÎVR^[ýòßî„|Aø×çÉËKJÊ¿>NZZVYùòrÒÓßïS––––ÿzœ¬¬´·ûÔåe%%?Þ§)))'þõ99II/÷©ÊIII½NJJJGýêrR2R_ïS’‘‘ÿzœŒŒ|‡ûÔãä#ãÿÞ§þõ8èØèß÷¹ÆEÆEÿ¾N2..3ýòqqQ‘?‰‰ˆÿ|œD<Ò4ôaèÇéÊÊÊK?½ÎZZZ[ýîrÒÒÒ¿ïS•”•–ÿzœ¤œ¤§ûÔää¥%?Þ§%%'%þõ9))÷©ÉIII½NFFJGýêqñòïSÿzœ|||wûÔã£c£Þçþ÷8ÈÈØÏ÷ÉÆEFE?¾N&"*#ýòpðððÿ†††ÿ|œLLDC÷üâ¢ââß¿çüý8ÈÈÈÇçéÆÇFÇ¿¾N>>:=ùòqÑññÏï“|œ„|„‡ûä䤤d_Ÿ'%%#$üù9)))/÷ÉÉÉIIÿ¾NJRNMýòr’’’Ÿï“””””ÿ|œ¤¬¤¯ûä奥e¿ß'----þõ9yiio÷©ËËKKÿ½^EÕÒNî~‚«Ðg+Ë»ÁÖ=ÎÑÎmy’6EÞºMÞ r²ÒÒÏÏ“––••~{œ´¬´¯ûÔ奥eÞ§))))þõ9I99O÷©ÉÉIɽNJFJKýêrR22?ïS‘‘’‘ÿzœ||Œ‡ûÔããä$?Þ§þõ8èØèï÷¹ÆÆÆÆÿ½Î6.6/ýòq‘QqOˆŠ‰ÿ|œDNJJJKýòrR’RŸï“”””“ÿ|œ¤¤¤§ûäå%%%ß'))))þù9iiio÷ÉËKKK½ÎZZZ[ýîrÒòÒÿï’H¹F¹ö (ÇÈÿ»¼AB“ˆÿ®Œyÿ„Ù÷ãò3––—–~{œ¬¬´³óÜ奥¥Þ§+-++þõ9IIIO÷©ÊIJIÿ½NJJNKýêrRRR_ïS‘“’’ÿzœ””ŒûÔäd$$?Þ§!!!!þõ9øèï÷©ÇFÇFÿ½Î:267ýòq±q±ïsŠŠŠŠ{œTLLOûäâaâaÿß' þù8xxˆ‡ÿùÄDÄÄ¿ÿÎ*..-ýúq±‘‘ﳌ}œttlsóìãä$$ßg#!# üù9))'ç¹ÉIII?>NFJFIùòrrRr_ï“’”’”ÿ|œ¤œœŸûäå%%$ßß')+)*þ÷9YIYO÷¹ÊÊÊÊÿ½ÎVZV[ýêr²²²¿ïs––––~~¤kžÊI¿Ò$ü |¼‹ÛüÞ"$å^Ÿç+1.öý9iyio÷¹ÊÊÊÊÿ½ÎZZZ[ýîr²’²ŸïS•“”“ÿzœœ”œ—ûÜ䤤¤¿Þ§%%%%þõ9))÷©ÈHHH½ÎB>FCýòrññÿïsŽÿzœtlloûÜãcccÞçþù8¸˜È¯÷ÉÄÄÄľNýòpÐÐÐßïsˆŠ‡†ÿÌDCÁæ@h ߿䉊t®Šœll\cûìãc£cŸß'þù8øù÷÷ÙÇÈGÈ¿>NFBFAùòrRRROÏ“’’’’~|œ”””—ûää¥$¥?Þç))))þù9IIIG÷ÉÊJJJ¿¾NVRRSýîr²²²¿ïs••••ÿzœ¬¬´¯ûÔ奥¥Ÿžç-/-,þù9iyywçÉÌKËK¿>N^^^]ùîròòÒÿïS••–•ÿzœ¬¬´¯ûÔå%e%?Þ§))))þõ9IIIO÷©ÊIJI½NJFJGýêr222?ïs“‘ˆÿ|’B=ô"¿ßgþõ8èèøï÷©ÇFÇFÿ½Î22.3ýîq‘qqï“ŒŠŒŠÿ|œLDLGûäâ"""?ß'þù8ˆhˆ‡÷í4†FÏ®<ñ§ø:±\[Å¿AN.6.5ûþq±ÑÑïÏÓ~}œ|||{ûôä$$$Ÿ§### üý9)'÷ÉÉIII¾NFJJKýòrRR2Oï“’’’’ÿ|œœœœŸûÜå%$åß'++))þõ9IIIO÷™ÊJJJ¾NZVV[ýòrÒÒÒÿïs—–—–ÿ{œ´¼´¿ûÜåå¥åßß'//--þ÷9yiio÷ÉËJËK¾NVZZYýòr’’²ï““”””ÿ|œœ”œ—ûää䤤ß'%%%%þù9))÷»Çº†R0gÿß:QÇÍÈaÞþÿ8øøøÿ÷ÉÇFÇG½Î:2/ýîq‘‘±ŸïsŒŒŒŒÿ|œ\T\OûÜâb"b_ß'þû8hhho÷éÄDDD¿nQ¨ €Wü-WÀ.-tã §ÿÿ8Øøh§çùÈGÆÇ¿>Î>>>=ùúròÏÏÓ~}œ”ŒŒ“ûìä¤d¤ß'#'#!þù9)))/÷ÉÉHÉI¾NJNFBòrrr‘ÿï™””Œ={ýörrrR¿ï³”•”“ÿ|̬´qèÃßï’JËÆž•|œ¬´¼¼ äå¥åå¿ß'1/1$þù,´´lQï÷¹%e£Hÿ¾N^VVWýòr²²’ï“”““|œ¤œd“ûä²rQÐçŸß3%)zóûäädc$?ß'## þõ9 (ß÷™ÈGCƾÎ>>>?ýîñÐŽŒfðeÿWÑ+t$üâã!âߥ‹‚=þÿ$TWùè'÷ùÄDDDÿ¿Î" ýû0ÐÏGž?¿N"""#ýû.CTj ¿áj¶p)Àèý§SÍÏg᾿í•t ¯ùïïÚu¡”j=sõsô$ããã£_^ÿüsH4oŽ@ Ÿ`ªßC(Ôà Ž~œ””Œ“ûå㟣¤cà_»,¦»ãÉ’`¿ÁÎ6J6MýòñÎ2ˆW§÷Ý1ÐÊð3m®ƒ– éö,ûûì®,21ÿïÝž†QÕȰë/Ã/øYc_ÝàÏ¿¿JôÝ}ý÷¯o¡“—ƒ4ƒoÿòIK¾}ÒïòËJÊÅ»ýó‡ž4½W¿¾MõêJIýïnlç£Ï²ªûþŸk¥T+¡ßÿ9YIi?÷®û¶ ë|kÿþ­ÿt2¯Üôÿ#û´Iø÷çÙ[–ã¼÷÷½1ÐÊ!ÛZ·?ÁÎBJBIùûÎjŽŠgóÿß:ˆ4oA™±‡` †œ|l|[û×v C/øô  ÿ‚ÒfЖ­ï‡ß¡$mÿ?üý‡&ÇB,ª{ûÿL®syèfòÿÂN""*#ýþpðQÿï½€2L<Ö/WÿÿÎ"&&#ýúðˆÀ_ð¶B ÞÞ q/Ð³ŠŒ~Ž3ü2…~çÓ¡€R¸4ÑSŽŒŽ~z/œQj`Ð>Ã>© ˜ ä[ô$ädd$_ß§###þýÖA Kµàh-ú"HÙ(ÇÉ?>^A°¤œ€)ùôæ†þóšiè3~ˆtã䤤ŸŸ§))$þùÔËž€°ƒ@€ÿÄÕÜ3•…|›óüå%%¥ŸŸŒF¹(¤ ~„yUðh$UA |~tådå¥_Þâ‡?!-,þù9iYYW÷«Ê¾RŸá—ü>0ög°ÓÿÃNRRNWýïÆ¹$£˜Oð–J¸g¬€\ƒü$䤤¤Ÿßc‘‹t”sû×N¥@ T¤À ~ˆœt„dƒãõä(÷ Ëýçžs³Ã¡›ôDã#c£ßÞKç@ ž $ ê¦q Àù 8¸¸¸·çØâ^#âáŸß: :­ˊž÷?ÂÉ úøÿùb!bÝþû[ËÛ ¿àgþýˆG$T*`4ŸðµS¸¥@ ‰~…œTl\kûôãacaߟº"£JàÐ>"€R¸4Ñ3‹ŒŽ~y/¦ $Z¨4°¯é`Ð>F=(âžÿ 9 ÷ÙÈHÈÈ¿uÐh-x‘Õšˆ¬[ä£"úûy ’t§÷ÃSOa™Õ4ø¿DºrrrrOÏ“”““’ÿ|ì€Ð!†l Ð!†ñ5†|œ3å¿ç--)*üø^API0h žu@h$ª äƒß Ý9yyYg÷¼ÊH>Àɨ÷ûþ"ÏCy‚?þû¸çDŸz ¿ÿù¼4âg0Óˆ¿ÃNNVRSýïÆ90¢Ü˜_ð•Z¹° ~„œ”œ”“óääãä£ÿÞº˜&Z &[ü<ã#ã#ß_¯öH>_ï\ððfxaÐ3}†œ||t{ûÖâ” ‰rxÀÕXâ”À.%öqq‘qÏ“‹‹‹‹{÷ž~neSßà´É÷C$}ϯÿ…’ÁýÍïïñ<¾ ÿþq111ï׆M¨tÐ ÿ…ª Ĩ€\Sô4ã#c#Ÿ%‡Œˆsó÷E¥ph@)LÇè©ÆFÅÇ?=—‹W€1tŸ ßÑ€.è5÷ØiÈHIH¿Ë!!!ï÷þ°HÀŒ"[üEbß%ù7ßûȺ€T“˜?>êš} Îé§àÍþ1Ó“’’’~zœ”ŒŒûçf€Ù A ÿâ« ù87É¿?ÎNRVQù輂4‘Ê@Ð??¼²¨4‘ïTò9úוƒó¤ÜÀ)ýÿ¤Èq³ï;¦ C?øiÉIËËÿ¾ÞV2’x ¿ßùÜ4âg&-òr²’’¯ï~1É€äÐ ƒªØǬ€\{ä$䤤¤Ÿžç%#óÔÀ)0Ô@),ßâ'üûy°ÊAä2ÿ~ç¦C3ÓA›ì,ã£ã£ßß1äà ‰O§ÿý)\JpÃ=þqqqQoÏ“‹‹Œ‹ÿzŽ!ÓÏ‹„ÿ|ç­¹ŸîTTôçøxM®Ïb{ûô á!!aŸgþýà\ŽNnQŸøN„Á½>†n¯„œ\\L[óåâÿÝâçïþ~"€Z€4ª@ýXgǺ¾-ÿþ8÷?>B%ýÿœÃ¬*Ã&¯j`ý 9èÆßøpÇœž!ÿÀõ¿g”ÓüzÀ4¯Ðõÿ®‘w¯Ž~¼{B§D2Ç¿>lѹ[”Á ýj¯~‰œ”ŒT£ûÔ²QROî}êàÐ=zjÀÐ~ÿÃÕãî“r¯}~œœœ¬ƒóÉᜈOŽ[ƒõýýçD á>å°h?]Þý èå_C(ù÷Þ€a£á“„ ×ÀÂEzAÁëÿþñ‚‰?þýÐÂmÐ3k¡›ô,ãä£$?ÞürdóÀ ëüK¸Šæ h?_žù9 97ç»ÈAGH;ÇÀ½ô@É3_ƒõŒ×øšÿ×G¼×Æ¿ÀÞ-ŸÎƒlœ ÌØU¹|Ö  ~‡œ?þ?ýÿž½Çîfƒõ´ûüá"ÿâߟçþ÷8¸˜¨Ÿ÷~ß瞘v •OÀÁÕ·ï…~|+ü á¡¡¡ŸŸgÿÿ8HH¨¯øÂCEE?¿N.**-ùöqqq¯ïÑÃÃŸŽŽœTt|{ûôãä#ãߟcŒ„?!üûH3ñ䤟ßg!!"üý„aù'÷ÙÈÈÈʾNF2NKýò8¸Ãò2_ï“‘’’‘ÿ{œ|l”ŸûÜ㣤äÿß'%''þ÷9YIY?÷¨ä#ÊJÿ½Å~FROýòr²Òr¿ïQÈÅ–•ÿ{¤IøÃò’¿ïs‘“””ÿ|œŒŒ¤§ûäå%$äÿÞ§#!')þ÷8øù9/÷¹ÉIHI½ÎJ:JGýêq±òRïSÿzœtd„wûÔ⢣£¿Þçþ÷8èØèß÷©ÆFFÆÿ½Î2..+ýêqqQq?ïrÅDD@»ýç îj{3ëÿàg þù8hxho÷ÉÃÄDDÿÎ&&&'ÿþqQqQoïÓŒŒŒ‹~œdldkûôãc#c_ß§þý8èøè÷çÉÈHHH?>NBB>=ýúr222OÏÓ’’’’|œ””Œ“ûä䤤¤ŸÞç%%%%þù9)))/÷¹ÉÉIIÿ½ÎJJJKýîrRrrïS””””ÿ{œœ¤œ§ûÜå%%%?ß'))))þ÷9IIIO÷¹ÊJJJÿ½NRRRSýîr’’’Ÿïs’’’’ÿzœ”””—ûÔ䤤¤¿Þ§%%#%þõ9))÷™ÈÈHȽNFBFCýæqñññÿïSŽÿzœttloûÔãc#c?Þçþõ8ȸȿ÷«Å¿ÇE8_ï½ 'd¡œ $MÕñPÐ/³ˆ‡ˆˆ|œ<<44 äááâ"?ß§þÿ8˜¨¨¿÷éÅÅÅÅÿ¿N.2.7ýòq±±±¿ï“Žÿ|œt||wûäããããÿß'!!!#þù9 ÷ÉÈHHH¾NBJBKýòrRrRïs‘’’’ÿzœ”””—ûÔ䤤¤¿Þ§%%%%þõ999)/÷©ÉÉÉI½NNNNSýêrr’’ŸïS”““”ÿzœœœ¤—ûÔäää¤ÿÞ§''%'þõ999)/÷©ÉÉÉI½NJJJKýêr2R2_ïS’‘’’ÿzœŒ„ŒûÔä$$d?Þ§!þõ8èèøï÷©ÆÆÆF½N6663ýêq‘±±¿ïSŒŒ‹‹ÿzœ\T\WûÔâ¡b¢¿Þ¢‚? û8x˜ˆˆ¹ÄCÄCÀ½Îîpðð°¿ïÓˆˆˆ‰ÿ~œTTLOûôâ¢â¢ÿß§þù8ÈØ¸ß÷ÉÆGFǾN>:>;ýòqñññÿï“ÿ|œ„„|ûäãä$$?ß'!#!!þù9 ÷©ÈÈÈH½NJJBGýêrRRR_ïS’’’’ÿzœ”œ”—ûÔä¤ä¤¿Þ§''%%þõ999)/÷©ÉÉÉɽNNNJKýêrrrR_ïS’“’’ÿzœœœ”—ûÔää䤿ާ##%%þõ9))/÷©ÈÈÈȽNFBBGýêr1ÿïSŽÿzœtttoûÔãcc#?Þ§þõ8ØÈÈ¿÷©ÅÆEÅÿ½N.*.+ýêqQ1Q?ïSЉЉzœLDDD Ôâ!â!à^ç ù8XXx÷éÃÄCÄ¿N&&"'ýöqQQ1?ﳋŒ‰‹ÿ|œ\dTgûäã#bã?ß'þù8èèèï÷ÉÇÇÇÇÿ¾N>>>?ýòrñÿï“ÿ|œ„„„‡ûÔädd$Þ§!#!!þõ9)) ÷©ÉIII½NJJJKýêrRRR_ïS’’’’ÿzœ”””—ûÔä䤤¿Þ§%'%'þõ99))/÷©ÉÉII½NFJJKýêr22R_ïS“’‘’ÿzœŒ”Œ—ûÔäd$dÞg!!!þõ9øù©ÇGGÇ@½N:666êq±‘±/S‹‹zœ\\\\ Ôâã"¢à^§õ8¨˜˜˜©ÄÄDÄÀ½Î""""êqðÐÐ/“††……|œ44CýêrïS‘ÿzœ„„„‡ûÔ䤤$?Þ§%%!!þõ9)) ÷©ÉIHH½NJJBCýêrRRïS’’ÿzœ””„ûÔ䤤$?Þ§%%##þõ9))÷©ÈÉHÈÿ½NFJBCýêr22ïSÿyœ|„|t Ôãã£ã ^§õ8ØÈ¸¸©ÅÅÅÅÀ½N....êqQqq0/SŠŠ‰ŠzœTDTD Ôâ""" _' ù8hhhhÉÃCBÂÀ¾NýúpððÐÿïÓ‡ˆ‡ˆÿ}œDLDGûìâbâb¿ß'þù8¸¸¨¯÷ÉÅÆFF¾N6623ýòqññ±¿ï“ŽŽÿ|œ||toûäããã£ÿß'!!þ÷9 øÿ÷©ÈHGÇÿ½NBB>?ýêqñññÿïSÿzœ|„|ûÔä$#ä?Þ§!!!!þõ9 ÷©ÈHHH½NBFBCýêrñÿïSÿzœ„„|ûÔä$$$?Þ§!þó9øøÿ÷™ÇÇÇǽN>:::êqñÑÑÐ/SŒ‹zœ\\dd Ôââ⢠^§õ8¸¨¨˜©ÄÅDD@½N&""êqðð/“ˆ‡††|œ44,$Üáa`ààŸ' þý8hxh÷éÃÄCÃÿ¿N&"#ýúq111ï“‰Šˆ‰ÿ|œ\TTWûäâ⢢¿ß'þù8èØÈÏ÷ÉÇFÆF¾N6663ýòq±ñ±ßŽÿ|œ|„twûäã㣣¿Þçõ8èèèè©ÈHGG½N>::;ýêqÑÑÑÿïSÿzœ„„|| Ôä$#ä ^§!!õ9 øø©ÈHGÇÀ½NBB::êqññÑÐ/SŽŽzœ||tt Ôããcc`^§õ8èØÈÈ©ÅÅÆEÀ½N..**êqqqQP/SЉ‰‰zœTDLL Ôâ""aà^§õ8hxxhÉÃCCBÀ¾Nòppp00/™„„hx-‚Ö€P‚Ø-ÿÌ43@( ÀÁl´‚€¼ ÁoûöaáÚA@^ `µ¤à`¶ ß³Ò ð0[­@ /°[þý˜ˆ† P‚Ø-jx-‚ß÷ÜÄDµ€¼ ÁkP( ÀÁlÿ¾f&%¬à`¶ ZÁ@^ `·ýó11 ` /°ZÔ ð0[¿ï™‰‰kx-‚Ö°P‚Ø-ÿ|Ì\Sh( ÀÁl¶‚€¼ Áoûæc"ÛA@^ `µ´à`¶ ß3Ú ð0[­€ /°[þù˜¸ÖÀP‚Ø-nx-‚ß÷ÌÆÆ7€¼ Ákh( ÀÁlÿ¾f61´à`¶ [@^ `·ý÷1‘À /°ZÜ ð0[¿ïynx-‚ÖàP‚Ø-{Ìlcp( ÀÁl·€¼ Ál Þcc›Á@^ `µ¼à`¶ ÞóÜ ð0[­À /°[þ÷˜ØÖàP‚Ø-nx-‚ß÷¼ÇG7‚€¼ Ák€( ÀÁlÿ½æ:=Àà`¶ \@^ `¶ï1ñî /°Zà ð0[°/ypx-‚ÖðP‚Ø-{Ì|sx( ÀÁl·‚€¼ Ál Þcc›@^ `µ¼à`¶ `^óÜ ð0[­À /°[õ˜ØÖàP‚Ø-mx-‚ؼÆF¶‚€¼ Ákh( ÀÁlÀ½æ65´à`¶ [@^ `¶ï1±mÀ /°ZÚ ð0[°/y‹‹mx-‚ÖÐP‚Ø-{Ì\Sh( ÀÁl¶€¼ Ál Þbâ[A@^ `µ¬à`¶ `^óÖ ð0[­` /°[÷˜˜–°P‚Ø-kx-‚ؼÄD5‚€¼ ÁkX( ÀÁlÀ½æ&!¬à`¶ ZÁ@^ `¶ï1Í@ /°ZÔ ð0[°/y‡†jx-‚ÖP‚Ø-{Ì4+H( ÀÁl³‚x-‚ØÌÂÂ3‚€¼ Ák0!‚Ø-|Ì(!‚Ø-e"ð0[°/™ÿÿd"õ‹`µ‹Ö-‚ØɈÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿø3ô Á ç"…„h ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÃ8È¸ÈØ¯ÿÞ ¼ÿÿÿ÷ \,ÿýÒrnÿÿûÀÎðNû¤ðWx&ðNðL3‘z†qñññð/O;¡¾ä Þ ïÿÿáœdddgûヂ® ¸Kp›¶é<Üw*öãN;Û´ì¼v]¯7§Ý§&â¸`w¸UÂÿðÎ226;ýñééÎû¤ôöé9»ÉûïN›ÛÛz}÷iéíÓzvœ¿ÿÃ8èèèï÷×iÕÎûÓï†rÒ2?ïŽy¾é^ÞŸv¯oNÛ«’w}éÚ}Ëÿü3ŽŽŽŽÿ|z}äûÛ™¾ûÉØîÍ÷Þ <»«îWwwWßrÿÿ¾ûï¹'“ï¼ß}æûÓ«Áw@­à«ÄðϾûï¾ÿÿþûïîwÜ»ïºÜÓï¾ýÎý÷;†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ݃ÿÿÿÿÿ÷anÕØÿÿÿÿû»î¯ÿÿÿÿÿß}÷kÿÿÿÿþûî¿ÿÿ âbbb_ÿÜ-ÁQÿÿÿÿ¼/ÿq§ÿÿÿî!¸gÿ¾ÿÃ9çßï¼;Ã÷ã÷…¼'î&áNðï ÞûÍÆ7n Žàãpwpvá#pq¸XÜ,onÄí»ãNÉÝÇv7:ºwCu¸†âÄ7 ;wmÊá ÂÁ«>ûÕÛy;»nÞôôí<œ9\mÚ»¿s?}á®ÓÎí¹+¤ý÷ßw~û÷ ¾îûûï¾òßrß~ãn†ñ÷[ï¾é:wDþóxwß¾ýÁ{«»ï ¸=÷ßs¿}÷Ý~ë}Òºoßt·ß}÷+îÆèŸ}Ìn¯¼žnÆÝ·ß»n›ÉÙ»¤÷tÞîîWm÷ßtÝžûïï¿ßï/û‘ÿÞ÷Þ_ðÎBBBEùóÿÿÿýÂÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÌ € "…ˆh ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ?ÿÿÿp°Fá`ÿî@Ð.ÆEÆÅÿ½ÿÿ÷Mͼ{Á=àŸî“«ˆ¼ÿÿÜppNá`«Óï'0w ¾çq‚o¹ÞðBðMà› UÒ}÷&á†á†ÆÆÆÆ@½8P*áW ÿÿvN÷mÍ9ß}÷ß~æÝ‚ŽÄåwtßy>ûï½¹ íÿÿ÷ßqß}÷jòs¾ýÝ÷ƒ>åy>ûï¾ûîWßÿÿ}æûï¹'3s7IÕÚzx&ð]ß¾ûï¹ß}÷“Éÿÿ÷ßr¾ûÍ÷“´í:¾ûî6ðw‚;É÷ÞNDòy>ûÿÿû÷ß¾û÷ß}ûÛï»oß}÷ß}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ƒÿÿÿÿÿ÷…½¼ ¼ÿÿÿÿÿs¹§ÿÿÿÿÿî;ï¿ÿÿÿÿÿtûïÿÿýàî ÿÿÿýãÿÜOÿÿÿÿpÃq÷;î ÿýç¼ýæñÿ»oW 7ãïÎû°î ÁÛ‚÷‚ã¸=ÁÆá-Æáfá7q··ÜÏq·ßxîɺ‰¸ŽâN$êûÍÁ®œÜ ² ŽC8ˆˆ¨—ççÞÝ·wdôû½ééÕíÓ¸î5vÜn÷ºWKvÝ;î÷Þ¯“}÷îM÷ßvŸ}÷-÷Ý\Û÷mÚ»oWou¹\·Ü¯¾ûï¿}äç}ûï¿w}÷ß}æû•Îý÷ï¾öû·ß~û±>û÷ßÜ®w÷ÞO¾åvß}Ìßy>åv'5}Û}÷Ÿ½Þo7ÞOoºO¾ò}Àöå}ýûïÞŸxgß¿ÿýÿ÷ûÍÿûÿÿÿÿî y?ÿÿÿÿÿÞ_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€‹ Ç *"…Œh ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþð>ð?ÿ÷‚® ÿÿÿû‡Ÿÿî¼ÿÿÿ¼¼Ü,¼ß}àààÐ#»ÞÃ8èøøè—‚oaœ||\oûÓÁ7›î ˆp`NàÀÁÿý÷Ÿ{r'iÎçs¼“Ýäóy9\¯7y<\¯¾í9ÿý÷ß}éÒ}÷îïw@£ QÝ÷Þßy>ûï¾åÿ†pÐÐÐßïßß}÷ݧ;ï¾íÖ`îݺ¾ûï¾øg#%%#þöûï¾äÿ÷“îwßy¼Ÿ}äì-áÞ ½»»o¾û•÷“ï';ÉääÿûÈŸ~ûÉ÷ÞïÝ·ß}÷“ï¾ó}ÿÿÿyûÿÿÿÿÿÿÿÿÿÿþìÿÿÿÿýánc¼/ÿÿÿÿþöûÓÿÿÿÿÿ÷ßy¼ÿÿÿÿÿ>Oÿÿü3ЋЋ~~x?ÿÿ¿ÿ†r22Rï?ýÁ[‚¡nÿÿÿýÁ‚Üÿîﻆq±Ñ±ÏÏÿýãþð¿¼;ÂwmÉÜaœTdTgûöðw}á܃âp‘¸8w ÜaÜ,;˜ÜcxÜÛ˜w[Æñ¼ïÛ î!ÜCr‚Äá®wßzr7ƒ¸(Ü7•Á!ª 7;}íéÙ½=:OÝßv§ï'½ÐïwMêöå½½ß}÷iêìß¹·ƒC8¨¸¨·÷çß¾ý÷[ï¾é=ßÞo¼ß¾å¾ûï¾ûÛ­æór¿ß~ûᜄ||só㙿}û»Õ÷ûÆûï¿}Ër¾ÈHÈH?<¾ûîïß}ÊåÃ8˜¸¨÷ç‡v0Î:661õùÎó}÷ßy>í»naÜïºWé÷ß}÷ÞO܉÷›™<Ÿy>ýæûû‚÷§ï¾ý÷ïß~í¹ß¿ï¿}ý÷—ÿÿÿÿþà³zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÒ ½ K"…h ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ã£c# ^ÿþðUà'ÿÿÿÜ`«˜+ÿ÷Ã?ÿÿðÎ66*/ýîÆFFÆ@½†q±±qßïoOÃ8øøøÿ÷«Á0ÎF>:CýæðMàŽðMà­ÆnÓ•Áw‚¯w@áœTTûÓïÃ9I)I/÷—€ûï¾å}÷ß}÷ßÿÿ¹Üï'“÷“Éäòy¼%í÷ß}÷Üîfûï¾ûïÿÿï¾ç}÷ß}÷+ï¹_t'“ï'ßvžO¹Éåÿÿï¿ß¿½º¿¾ÿÿÿÿðÎZ^^YýïÿÿÿÿÿÞ ÿÿÿÿÿûÁï ÿÿÿÿÿ» {}ÿÿÿÿÿþû‘ÿÿÿÿÞ7·ßÿÿÿÿÿ½ÿü3‘‘‘‘ÿzÿÃ8¨¨¨§ï÷C¸*?ÿÿÿÜ(nÃ8ØÈØß÷¿÷Mâÿþñ¼ÿîÍûƒ÷œ3ŠŠ‹‹}á.7  g¸Y¸HîÜfìnÝ·Üc½>ë¼nCrÄÜMíÄ7 oo¹^o¸0Ü7…\\fõ ó ÿÿ¾ôöí>ûïÜî÷iÍÜÛ›»~ôý÷NâNÇtÞŸ~êêá®;‘¸%ß~û»ï¿soÝÝooÝûÛïß~êêêîûï¿y¼ß âc"ã?ߟ~ç~ó~ç}Ý÷ï¿ww÷û÷;­ÝÊû•ûî„êÿ}÷ßz}Îû?u}÷Ißwºî+«¢uº¹_roO¼ŸÝß ⢢¢¿ßžO¾û½÷“÷ÿ÷¿ÿû•÷þÿÿÿÿþà¢wy¿ÿÿÿÿÿ¼ƒ8¨¨¨˜ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÈ ¦ m"…”h ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷Ü,ÿû w+ÿÿÿîwDácÞ áœ„Œ„ûÎÈÈIIA<¼Ã9ù ÷ Î>>F>éÒ|3Žÿy ãccc`^ž â⢢ÿÞ¿ÿ÷î ¸8*ààïo ux[°w§3s»ÞðUÐ;Â\@îfóy¸`]ÄÜ3¸P*á@¯ÿýÝÛv_r¾û´ûÛ›»ÞÞŸuu}÷wWßvœ¿ÿ÷Ý7wßs¹„>æo¾ç»ßv >÷}û÷ßrÿÿÝ]<‰æó}÷ßvðw»»•íÕÛtO¼ßy9_ÿÿßs¹\÷ÜîWÞNméÚy¼%ÝÝåu}Ówy>ÿÿÿ¼žoßy?¾û÷žð}÷«ï¿ÿÿÿûÿÿÿÿÿÿxÿÿÿÿÿvïÿÿÿÿýØ;ÃÝÿÿÿÿÿÜmÐîOÿÿÿÿþçyÅEDŽÿÿp—Ü$ÿÝ¿ÿáœû÷†pñ?ïžà¨K†qÑÑÑ/NûÉæáa7 pà÷=à»°w`ï }æìÐKÁÝݺÿáœ<<å¾û•ûî“–ûÍ÷"¾í¼î4äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ ÿÿÿÿÿîtnv?ÿÿÿÿ†r’’rŸï÷îÿÿÿÿÿ÷Þnî?ÿÿ†pðððïïßÿþóÿÃ8øøøÿ÷¯þàÁÿÿÿþ÷ÿï¾à¯ÿÿÿïþûîî ÜÜÜÜÜ%Ü-¸;q·MÁïnÜ{½»¼»£{Ý;¦äÝ]7#¸›‰ðÎ.*.-ýýÝ÷ݛý»w§;»ÓÓÛ«Û¶í»ÜjæÜ÷?÷“÷+ÇtÝ>àÝ÷ß}Êý÷wß~û÷Ýï;ïÝÜÿ¾ýí÷߸M÷îWi÷ï»O¾ý÷Jûî;‡¼ßw»¿ûï?÷Wi÷ÝݧÞNwWÜï¿}Ò}Îûï¹Ý_¾ë÷WVÛï'ý÷ß ãcccŸß}÷Þo¾ò|3‘’’‘ÿzï¿y{“ÿî“×ÿÿÿÿþâN›ÿÿÿÿÿÿáœ<<47û÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþã j °"…œh ?¿ÿÿÿÿÿÿÿÿÿÿþÁÁAÁÀ¾ÿÿÿÿøg ù†pÐðÐÿïŸÿÿÿÿü3†‡††ÿ|ÿ¸Âþðw?ÿÿÿ¸îÝ¿ÿrN_ÿáœ$$/û÷û°w=Æé>ì%Ævð{Â]‚;ÂÞðwßr¸ÜA. UÕÂÜÿÿî4îîîûïOº»½_}í÷$å}Êû»««î®ÿÿûï¾ûï¾û3¿ºw}÷ÞN{ï¾öïÿ á¡¡a¿ß¿ß}÷M÷ßy; {x[Á÷M÷ß}÷ß}÷†ÿÿy<Ÿu}÷“î‚Ý^éíÛx=÷“ï¹_}÷Þoÿÿ÷+•ûï¹Ýï¾ç¼-ɾûï¹ÞO¹Ü¯ÿÿÿÿÿÿÿÿÿûÇÿÿÿÿÿïÿÿÿÿÿ÷ŽðÿÿÿÿÿýØÞÿÿÿÿÿ÷MíËÿÿÿÿÿ½¾ÿþÈÈÈÈÿ½÷nÜÿÿÿî+…ÿ†qQQQOÏï'ÿÿÿýÕçpfàÏþá7Þn7p»Œnî6ã¸MÝÁÿî†ñÝÄn!º¼ÞO»on7n ;‚ÍÁCp}÷wÝ'§÷·Ý^o¼ž¿{rWÝܯ¾ûîÓï½?ï¿}÷ßß}÷ýßÝ'Nû–ûï¾ûïßy¾å á¡ááßÞý÷îwwßÝ„>û¾ïw÷Mûïß}Îîûï†qѱ±ïw›•ÿ¾ûﺾòp·}ÕÝÖîÿï'ï'ß}÷ÞŸtòpÊøgüù÷“÷–òÞ®ËÿþÇGÇÇÿ½ßßÿÿÿÿÿpdûÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàu r Ñ"… h ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃ8øÐÎ  óÿÿÿÿÿÿþÅÇFEÿ½ýÌàÿÿÿþã¸X;…‚¿þê÷ÿÿþÆFFE½¸Âïv·w„†r22ïOq„݃» ädd$?Þžð—íÕéàî‚Þr ââââÿß?ÿ÷ Ü>á7ßr'¸{­ÛvÞniÎåvoºO»nWßp¯ÿþôýÊûï¾ûï¾û<®“ï+Õ÷ßrÿÿï¾û÷ß}÷Üï¾ûî„ì6êëtßr¾ÿÿþû>O¼˜Þûï¹Ü¯¾û÷WÌ-áßy9“Ÿÿÿ¾û•ÊýÊòy>çs¼Ÿy<=ã½½:»O¾ÿÿÿÿÿÿÿÿÿÿ†ròÒÒ¯ïŸÿÿÿÿþæÿÿÿÿÿûƒÞà]áÿÿÿÿÿï¼ÜÉåÿÿÿÿÿs¿qÿÿÿÿÿy¿ÿÿþà¨Ü?ÿÿÿ¸ŸÿÝÝÃ8ÈØÈÇçßÿÿÿqwáœ4òy>û¤ûÉ÷ÞNwÞNw“ÉÝêæžWdé^O'‰êîâ[î_Þ oîî‰÷–ò÷ßÞ+×Þ¿¼ž_ÿÿÿÿû…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ} w ò"…¤h ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáœllll ÏÿÿÿîÛÿ÷A.@ÿÿÿðÎ662;ýòÆÇGG½¼;ŽãÃÞ ¼=á/¼-áw@÷@ïxNðŸÿþàãp°— ámæûÍÂMÃÜî7s¼Ÿ{{}Òvœ“•Äœ0ÜWºÿÿîÓï»?yº»½?}äôööé>òztÝ]\¿ÿûï¾åvŸ}÷I÷M÷ß÷&æ÷Ýݧ‚o.¿ÿûï¹^o7ßztÞO¾ûϺw›É÷Ý^ >ÿÿÿs¾æOß}ûî“»îÂÞðï¹_}÷ßÿÿþÿÿÿÿÿÿÿÿÿÿÿÿ÷cqÿÿÿÿÿ»_ÿÿÿÿÃ9iiio÷ÏsÿÿÿÿýÝÍ»ÿÿÿÿþíÿÿÿ¸+pWÿÿÿî+‰†r2ROïøgÿÿwt_ÿÿþêëp«††q±±±¿ï÷;î7î¸=Á÷fáw ¸{ƒÝÜmÁ÷ }Ï÷Õ÷;•÷Ü3p‹ƒnpo¾ç}÷wwWîû«ï»¿qÝn{µÝnîwÝ;ï¹^Oßßu¸{ï¹ß»¾çw¾ë}ÿûﺻß~ò}÷þá7[ï¾åy^ÞÜwÃ9IY9W×Çwﻸî×Ü·ßuu¼Ÿ¾òypñ1QÏŸ}Ús¾ò}÷“Œ‰Ñ:'dòyû½ØC«ï­¹÷ܯ¹ÝÝßáœDLDOûÐg þ÷ü3‡ˆ‡ˆÿ| âb¢"¿ß8gþù}÷ß}÷ܯ¾þïºn·ÜîWMÕ÷ü3††‡†ÿz á¡¡¡ÿß0Î ýòÃCBÿC8ˆ˜ˆŸ÷ïßxK÷ÞO¾ó}÷‡vñ÷Wßy;º'2y>ÆFFF½ à   ¿ß!œ,4,7ûðgþýý÷܉̟}ÈœÉÏs¸®îÓÂÞâ¼.ûï¾ûžÆFFF½q±‘±Ÿï\3ˆ‡ˆ†ÿ| á¡¡¡ÿß!œûçÿ¿ï÷ÿÿ ãc#£¿Þ¾ÃÃÃþC8888O÷Ïÿÿÿÿü3‡…‡†ÿ|ÿÿ᜔”œ›ûàg))'&þõÿÿÿ á!!!?ß?ÿ᜔”œŸûàg''')þõÝ»ÏÿÃ8ØØØÏ÷¯ÿ†q‘‘±¯Ïœlttsûçü3””””ÿ| å%%%?ÞýÛ{ÿÿáœ$$$'ûçü3~|ÿî÷·ÿÿøg þ÷ÿÿûÂßÿ ããããÿÞ¿†pÐÐÐßïœ$$$'ûçpvàæÇ_ÿÿÿÜ5¿ðÎý÷¸ÛšpWÿÿÿßsÜ*ÆÇFFÿ½ÿáœldlcóûÛ«ƒÜp{„îp»…Ü.ñ¸[qî4ãþå¸k–û•÷Ü5„ Î*.&)ýíÁ® po¸'uy:¹›»¢~û»»ÛÉÕÕûýÊûï¼ßr¾û«Šôôû»¯ßw~êêû÷WÃ9)÷§Wß}÷ßwûïß}÷ßw~ò}Êÿßs¹îï¾ð×;¤ûï¾îýÿßÝ]ß}÷Ü6ò}ÿÞnDû«ï¹ÞO'·§Ý§ßzsÜiÍ»N÷§$òrï'“´ò}÷÷ßþò¾ðÛï᜜„”ŸûãËÿÿ 㣣£¿Þ·•áO/ÿÿÿÿýÁ®WÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüË -5"…¬h ?¿ÿÿÿÿÿÿÿÿÿÿÿðÎýóÿðÎ**27ýëÿÿÿáœ44ñáœ$,47ûØg  þôÁÁBAÀ¾p00p0/ŸÃ8hhx÷Ì3‰ˆ‰Šÿ|ýØ;Œ/ðÎ>>>>ëî‚ÞþÃÃCC¾xfþÿÿÿþùü3ˆ‰ˆ‰ÿ}þãn×ᜌ„Œû×Ü›—ðÎ&"&'ýì3ˆ‡ˆ‡ÿ{ðÎýóøgþøÄÅEE¾÷ámù“ï¸Ã»Žã ws s x[ú x[Óï'AÜ‚Ü5Ä7_ÿÿ ãcc£ßÉÛ}Ò}÷wmíÒ}éíÝÙ=>ûîw§A]'_ÿþÇGGG¾;¾ôðϾûîï¾ûÛÂ=Êû«Ó»÷ÿÿû‡¾ó}ÝäûÉäð‡ß}÷…1½ÖûÉæû•áÞoÿÿûÍÛ}÷ßtß}Ñ9¤í:7nñ½¹Ü‰ÎûÚÿÿý÷û¿ýçÿÿÿÿÿÿÿÿÿÿsÿÿÿÿÿ»;Œÿÿÿÿÿîw6é¿ÿÿÿÿÿ}íÿÿÿÿÿÿq¿ÿÿðÎ...)ùõÁ;‚¿ÿÿþ⸿ÿpNêëÿÿÿÝ]nÿîw{‚;‚;…Ü%\.ádà÷]§ Üwk½<®“Šõ¼žO'IÁ‰Â…np¤á»»¼œDûÚ»'+îîwm÷wdìî}ërܯ»o¾îûÓÐgüøêòî¯ß}÷[Û»OWß}÷ÞLIý×}÷›ï¾ÇFÆÇ>½ÜCu}ÿÝ_}÷ßv®ÓÊû÷ß}÷ߺ[ï½;oºn n¯¿øgüúæNÄûÃ<3Û¢}äí¾ò}÷†y>èO¾òxSÃ==9y<œ“¤ûîÓmÈœ¿†q‘‘qÏÎÊûûï'ß¼¯¿ºß~ý÷ðÎFFFGýï÷ Ëÿÿÿÿÿp¡:Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø8 3KV…°h ¦ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿô`5`d²  X,‚ǧ¸ê0‚°2YŒ †¬ –Acãì õ ¼ –Ac !—’È,~}£!—’È,c2ð2YŸïð/”c2ð2YŒ †^K ±þòŒÀ†^K ±”ËÀÉd@Àÿ¾Q˜ËÀÉd3x,‚È((Ê3x,‚Æ`C/%YûF`C/%XÌeàd² àà_hÎ ð2YŒà†^K ²ö¡/%XÐ ð2Y°°/´i x,‚ÆP—’È,†‡|£H(KÀÉd4„¼ –Ad<7ûíAB^K ± %àd² !¡ _(Ð ð2Y ¡/%Y ÷F P—’È,j x,‚ȘˆÊ5„¼ –AcP(KÀÉdDD½Q¨%àd² B^K ²"&/%XÖ ð2Y‘QPOtk x,‚ưP—’È,‰‰‚{£X(KÀÉd5‚„¼ –AdTL ÝÁB^K ±¬%àd² "¢`^¨Ö ð2Y`¡/%Y÷F°P—’È,j x,‚Ș˜ª5„¼ –AcX(KÀÉdDÄÀ½Q¬%àd² B^K ²&'ýî@¡/%XÔ ð2Y‘/Tj x,‚Æ P—’È,‡ˆz£P(KÀÉd4‚„¼ –Ad?ýêq±±ñð/SŽŽzœtl|t Äã##ã ^gñ8¸¸È؉ÅÅÆÆÀ½N.262êqq1±p/3ŠŠŒ‹yœLD\WûÔâ""bÞ§þõ8hh˜˜¹ÂÂÃÃ@½Nýîp°ÐŸïs„‚„„ÿ|œ$ äà``à`_&þÿù7ç×÷øÉÿ¿ÀÀÿ¿N ýúpPPp¿ï“ƒ„……ÿ|œ$$47ûäá!¡¡ÿß'þù8xxˆ÷ÉÄÄÄÄÿ¾N&&*+ýîqqqqïs‹ŒŒŒÿ{œ\\dd äâã##Þçþõ8ØØØ˜©#c_@"#ýîqñÑñÿïSÿyœ||„‡ûÔãä$$ ^§!!þó8øùÿ÷™ÇÇÇÇÀ½N>>B>æqòñÿï3ŽyœtttûÌã#c£ ^3ý!öÐh à^§÷8ظØß÷©ÅÆFƽN.*./ýêq1qïS‰‰ŠŠÿzœLLLL Üáá¢b`^ç þõ8XHho÷ÉÂBCC?¾Nýòpp0pï“‚‚ÿÿ|›ûÿÿÿûäà   ¿ß§þý8(XH_÷ÉÃCBþN#ýòpñˆ‰‰ÿ|œDLDOûìâ¢b¢ÿß'þ÷8¸¸¸ß÷ÉÆFÆÆÿ¾N226:òq±±±¿ïsŽÿz¼k¢§G4ÿzÁp4l…ðð¢ˆ4_ï“ÿ|œ„„„‡ûÔä$$¤?Þ§!!#!þõ9 ÷™ÈHHȽNBBBCýêqñòÿïSŽ‘ÿzœ„|Œ„ Ìãããä?Þ§!óeqó‡ðâP4£/up¸Öph#`Ÿ'÷8ظèÏ÷©ÅÅÆEÿ½N.*63ýêq111?ïS‰‰Š‰ÿ{œLDLOûÜááâ!ÿÞç þù8Xhˆo÷¹ÃBCBÿ¾N ýòp00p?ï“ÿÿÿ|œ ûôàá á?ß§ þù8hxx÷ÉÃÄDD¾N&&&#ýòq1_ï“‰ŠŠŠÿ}œ\\\gûìã"âã?ß'þù,d\JÜTýîHÈÆª=þù8ØèØ¿÷¼ÇG-x—¾_ï—Œe.7Î\oýîâ© Ð= +ñ÷÷ÜÅE¥AŽ 'ûæd$˜èE×½NBFN?ýë1ñ¬Ê¼}.ƒ@ þ÷$”Œ-tûÔ²Q²LÅÞ?þõ¨£Ñè´H?ÃßïsŽÿyÌ|{Œ¥h! ^³Œ "µ€òHø÷šH@½æ>"ÈÞ¨'ª£ƒ@.? =ÄÏ÷ýÈ7* £\~\ï÷­x2§~p/š>2Þ êb  Á‡À)ëððÒq{ _1 ø3‘?ùQ³âHÅÏÿ}äT3+ƒõp½ÿàþý†…oyTn-éQ¿÷¾@ãPh\`^kýþH˜ØgÆ¿½wß!ñ§Ï!ñ¨'ž`p/¸GÀ¿N.2.1ýîqQqq_ïsЉЉÿ{œDDDGûäâ!¡áÿß'þù8hXxo÷ÉÂÁÂÁÿ¾Nýòp°°°¿ÿ󆆅†ÿÿœ<<@¾V9ò¯|ªˆ4£ ÐŒ¿U¤¹hä߯ ö¨ÜƒÚ£ï\~1/4? —šÿ¬Cã¢_þóß|lƒÆŸ|lÆ ž¹j³P,/5øÙÆFFF?½Î2.2/ýêqq1Q?ïs‰ˆˆˆÿ|œGýòª@ÐŒ/ž3ù¦PhãÒËÃ'0h à_7 ú>ߊwûç#ñ¢ð ;.xÓÿß5 øÕo€Sx4ï–v¢ÉP ÿ¾ÔÐÈuøgþû8ÈÈÈÏ÷©ÅÆFEÿ½N.../ýîq11Q?‡ˆ‰ÿ|œD:?ýòqññòï‘dz* ãã?߸ìyæoYäóýÿ–ƒA?X éÕóýöÃÿ§š•üûGÀ.7ýör‘ÒQÿïÚR. Æ"#Ö< çûç$‚`9ƒðÜÏ÷ÍŒ!†j_ò üÿûäQo“””ÿ|Ä'žl¨3“ŸûÞÆ‰!J@øv çûç <=iä0h>Ùh4ŸïÕY/¹×ʾb!Å µà ÿz±¨4‘Ï_V¬ü“óär‘“zå€Ð@ø¹à dú³ð/‘G¾JJSýóžy_ƒ9?_ûæÆ‡Ï%Àh üÿ|±ñ{¢^Ïð Žÿ|Ãb Ì§Áœs¬¿÷ÍŒS€Ð>#ƒAùþù±ƒ_€ZÕñö†ï‘<þŸŽÿ{œtt|ûÔãc#c?Þ§þ÷8¸¨È¿÷ÉÄÄEÄÿ¾N"&ýòpÐÐÐÿ…†…ÿ|œûäá¡¡¡¿ÿçÿÿ8x˜ˆ—çéÅEÅE¿?N...-ùúqq‘q¯ï³Žÿ|œlltwûäãã£ãÿß'!!!þù9  ÷ÉÈÉHɾG~JKýò§âÉI¾NFFJOýòrRrR_ï““’’ÿ|¤Yø³òR_ïs‘“•”{œ¬¬¬«ûÔådåeÞ£‘?+/þõ9 Iyg÷¹ÊIËK½NVJZ[ýêrr’Òßïs“—––ÿzœŒœ¤§ûÔå%%%?Þ§+%))þõ8øÙ9/÷©ÇÈÉI½NFFJGýêr²R?ïsŽÿ{œ„|ŒûÔãããã¿Þçþ÷8ȸȿ÷¹ÅÅÅÅÿ¾N*".'ýòq0ñ1‡‰ˆÿ|œ444/ûäàààá?ß'  ÿÿ8x˜ˆŸÿùÄÄÅE¿?N&.*1ùúqq‘‘ÏÓ‹~~œltlsûì㣤#ÿß'!#þù9 ÷ÉÈHHɾNFJJKýòrRRR_ï“’’’’ÿ|œ”œŒ§ûää¤å$ÿß'%%))þõ9))IO÷©ÊJJJ?½ÎRRVYýêr²ÒÒßïs––•–ÿzœ¼¼´»ûÔ奥å¿Þç----þõ9iiio÷©ËKKK½NVVZ[ýêr²’ÒßïS”””“ÿzœœ”¤§ûÔ䤥$¿Þ§%%%#þõ9))÷©ÈHHȽNFFFGýêqñÑñÿÿ|œd\loûÜââã"ÿß'þù8˜ˆ˜÷ÉÃÃCÃÿ¾NýòpŸï“††‡†ÿÿœÎBZN]õþYiXèsÏÏÓ––’•ÿ|œ´´¬¯ûäå%e¥Þ§+)+)þõ99IIO÷©ÊIIÉÿ½NNJNKýêrR2R_ïS’‘‘‘ÿzœŒŒ”ûÔä$$d?Þ§!þõ8ØØØÏ÷©ÆFÆG½Î6.6/ýîqQ1‘?ˆ‰‰|œLDDGûäá¡¡á¿ß' þù8ˆ˜ˆ—ïùÄÄÄÅ?Î*.*-ùúq‘‘‘ÏÓ‹Œ~}œlltkóô㣣㟟gþù9 ÷ÉÈHHH¿¾NJJFIùòrRRROï“’’’’ÿ|œ”””Ÿûää¥$å?ß')))(þù9IIIO÷ÉÊJJJ¾NZZZ[ýîrÒÒÒßïS–—–—ÿ{œ´Œ´·ûçy ƒ7àÉü3|ÿ¼´[¥Ã'˜(P‘Üë¤àg'-/,þù9YYig÷¹ËKKJÿ½NRNRSýêr’’’ïS”””“ÿzœ¤”œ—ûÔ䤤¤¿Þ§#%%%þõ9))÷©ÈÈHH½NFBBCýêq±ÑÑ¿ïSŒÿ{œd\l_ûäââbâ¿Þçþ÷8˜ˆˆ÷ÉÃBÃBÿ¾Nýòq1ÿ󉉉‰ÿœT\T[ûüãc##ß§úû8èèØ×çÙÇÇGǾ¾ÎB>B=ùòqòòÏs~|œŒ”Œ“óäää¤äŸß'%%%%þù9)997÷ÉÊJJJ?¾NRVRUýîr²’²Ÿïs••••ÿ{œ¬´¬·ûÔåeeeÞç----þù9yiy?÷®òè͹ϯ|ƒÌœ{¹èŠçx>áÂ:ï3–—––|{œ¬¬¬¯ûÜ奥¥¿Þç+)+)þõ9Y9I?÷©ÉÉIɽÎJJJKýêrRRR_ïS’‘’‘ÿzœ„„„‡ûÜä#ãä?Þç!þ÷8øøøï÷ÉÇFÆÆÿ½Î6.6/ýîq‘‘‘ï“‹‰‹Šÿ|œLNJJJIùòrRRROï“’’’’ÿ|œ”¤”§ûäå%%%ß')))*þù9YIIO÷¹ÊÊÊÊÿ½ÎVVVWýêr²²Ò¿ïS–—––|œ¼„¼·ûÝÄŸ——}¤ | ùyG·ùÆÊËÌ=¿Î^^Z]ñòr²²Ò¿ïs••–•ÿzœ¤¬¤§ûÔå%%%?Þ§)%)%þõ9)))/÷©ÉHÉHÿ½NFFFGýîr222?ïS‘‘‘‘ÿzœ„|„ûÜãã£ã¿ß'þ÷8ØÈ¸Ï÷¹ÆEÅÅÿ¾N.&.'ýòq11†††ÿ|œ$$$'ûäâ"""ÿçýÿ8¨¸¨·çéÅÅÅÅ¿>Ë Çç?ëüôRñÈ¿BN:::9õöqÑññïÏ“~}œŒŒŒ“óä䤤¤ŸŸ'#%%$üù9))'÷ÉÉIÉJ?¾NRNNOýîr’’rï“••””ÿ|œ¤¤¤§ûäåeee¿ß'-++-þù9iii÷¹ËKË˽ÎZ^Z_ýòsòòÿïs——––ÿ{œ¼´´·ûÜ奥¥¿Þ§++-,þõ9IIYG÷¹ÉÊJJ½ÎRJNKýêrrRR?ïS’‘’’ÿ{–N>)Á“ûÜ‘ò?tûôä$$$Þçþõ8èèèß÷©ÆÆÆÆÿ½Î2.6.îqqQQ_ïs‰‰ˆ‰ÿ{œDDL;ûäá¡¡¡ßg þû8ˆˆˆ‡ïùÄÅED¿ÿÎ*.*1ùþqqqqoÏ׋tóãƒ'èpaü3:ˆ ô3~†œlttsóìä#ããߟ'##! üû9'÷ÙÉHÈÉ?>NJJNIùòrRRROÏ“’’’’|œ”¤”Ÿûäääå$ÿß'))''÷99II_÷ÉÊJJJ¾NV^V[ýòròòÒßï“—––—|œ´´´·ûÜå¥å¥ŸÞ§//-/þõ9yiio÷©ËJÊ˽NVVVQýêr’’’¿ïS”““’{œ””œ—ûÔå$¤äÞ§##%#þõ{d¹I÷Èž«äd#ÿßç#!!!þù˜Èç¨èÿ¾N6:>?ýöq±‘ñ¿ï“Œ‹Œÿ|œ\L\_ûÜâb"bß'þù8hXho÷ÉÂBBÂÿ¾N"""!ùþq1QQoÏ󊌋Œ~œ\ddkóýãC(×àÉûÿDøœƒDî¿CÉôy½÷ÿP§¢ZµÊ™ýÿ$|ƒ·üz=ùúY)(è7?>æF9rS/üyûþrRrOϲÉHÈÂ9ù÷1ñëQQöøóüädädÞó'ïç'ƒAÿ$”“Ýwÿûÿ‹= yèûy÷÷ýEž“VÃîÿ Ÿàd•”Œ<úþÿãB€CáöØ÷÷íF“TÈ÷ÿÃÏÐ3•••–ÿ|–ZNEØß/yæûûç†=yìû·÷é%%¾KÿË)''ï÷¯z$òœ ˜Õ¹þ 9“ßï¿ïßüóð>góÿßõzEB†OÕÏð3’‘‘ÿ{Ü|çÉ*Oð5…=Ò ä‡ÿýä?㢙C/÷Þ¡'O¸ÈÂÓÿᢅ=ØÿþÿàO=C§ž†èú¾€DB¨ÿÁN*2*!ýöð¯'¡)ýûN ©÷¾½ýöpÐÐÐßï“……††ÿ|œDLLC÷üâ¢â¢ßŸçüÿ8ÈȸÇçëÆÀº6 ϯüÞc Í¡¦Ð ~†‰üü\|s÷ýãšU>>2è–k¡taìß ãˆt”{óïMTôðhA Oñör1ÒOÏÓ’‹’‘~ê¥ÏMñœT²óOÐÓ‘“’~{ïÞyÄ5ãÿ~…²ðg}˜Éè)ÉHÊJ>¾ö¥OA®~ Œ?ÂÙÁñg݃97è)ÊÉJJ¿>uõOUVçp Dù§èI$¥#,þÿHw9€L¬£ûüäd奟ßo&ä©òá—üIü9óóß7ÿ”s¥$ŸÞz€$€ZÐ4ŠÐ>ÄEù O÷ùÊFÉÈÿ¾uOY/s04‰@ÿ 9èÿ÷ÛÄ$€Trx?Áeò9Éø^=ø2Ž‚ ¿ßyч€ÌüÃàgÿ8¨øÈß÷«Å-ª ãC(þ–poBsŠ·?CN&&")ûþC[ ÜáÿÿÍ|<4Gûüá¡¢"?ß' þù8˜˜˜—ÿùÅEÅE¿¿Î.2.-ùþq‘‘q¯Ïׂtl+Ÿÿùì4ôgðÓÈ¿CN:6:9ùúò®…sëÿ;€ÐÁ<YÌ4ð¬Ûô4ä¤$#ߟºè4©àÐ>0@  ãô㤣äŸß§'#' üûÙÁ KVi TµfŸag!%$üöx§ xÔ[¼iúå]A |“ròMúÓ”“””~xGÁ:ñðA”teþùÏÌ=†h?øYÆÆÆÇÿ½N2.>6묪zj·<ùè3®ÿƒ’-É[¡_ èêç§·C?¿Î&*'ýöqððïïs††††ÿ|œLLLOÿüâ¢ââÿÿçüý8¸ÈÈÇçëÆÂº2Ïÿüþx³ØiÌß¡§üûxèWGA9ûÿœÀh`•›9†-ör2/ψT hA AViúHé(—È¿@Ë#!ççþ¾ "Qy¤À H·èiÇIGI>½øÇ!xÔc|iú®@Ð>I¸@ù&ý99II7÷sÆG ÑAGF¢Wüå€.UûýÓ”””•z;È SNàÐ S_ðï¬Så"C9o÷îæ©É—Že€%Y¯ø8¡ëåd%_àï.üI¹OÏÜðÄ(ftb 3‡œœœœ{ûç\€\Űh |ÿƒœŒœŒŸûüäädä¿Þ{4‰€Ð>/@’ðÒGHÇ>Kýúñ©À–_ïõcò9|Èßø;ÇÁQðnyç°Ó¸f} 6«wü$ãããc¿ß§þ÷x…2çÆâÏEŸ?#û×>>€Cˆ4®@Ð~¿@×üóÃèÇ?Àá³Áš+ã^À%ú¯áœ”Qùç¾ïç:ûØ4¯°U]Vè÷  Œ~œ¤|¤ƒó¹Û•8Üü¾Aúý ú²€\øÇ>ÿÎN>RAýë±Qáø ƒ÷þ®_t”!ù÷Ü>ùéš~V໇Ã(Py—óïð0¡ÏÄŸ’~}éqíà1'ß¡o#é8Óÿï}<2K à€&ࢄ|œdŸûôr0Ž’Šÿyéà‹÷ÂL¿ÂUè3ˆ?!þûÞÜüßê¦ÁA€LWüãâcä?Þzσ5 Î$ûøÿÁÍê&3ýúqѱ‘¿ïrÆÃGB;ý÷§úœjû׌A½þq11qOÏÓ‰ˆ‰‰{œDDDGûäá¡¡¡¿ßgÿÿ8¨¨¨¯ÿùÅEÅÅ¿¿N22.1ùúq±±‘ÏÓŽŽ~œtt|{óìããããߟ'!!! þù9 ÷ÉÉIHÉ?>NJJJIýörRRR_ï“’’’’ÿ|œ”””—ûä䤤¤Ÿß'%%%%þ÷9II9O÷©ÊÊIÉÿ½ÎRNNOýîr’’’¿ïs”””“ÿ{œœ¤œ§ûÜå%%$ÿÞç))')þ÷99I9O÷©ÊJIÉÿ½ÎRRROýêrRRrïs’’’’ÿ{œ”Œ”ûÔ䤤¤Þ§####þ÷9 ÷¹ÈHHH½ÎBBB?ýêqñññßïsŽŽŽÿ{–:25ö;ýûqo1Í`ÐA±šÿÿ«kâaþý8¸˜¸¯÷ÉÄÄDľN""ýöpÐðÐßˆˆˆÿÿœTTT_ÿüâ¢â¢ßß§þý8ØØØ×ç鯯ÆÇ??N:::9ýöqòÒÏ“‘~|œ„„Œ‹ûääd¤dŸŸ'%%%$þù9))'÷ÉÉIII?¾NJJJKýòrRRR_ïs“’’“ÿ{œ”””—ûÜ䤤äÿÞç')')þ÷99I9O÷©ÊJJJ½ÎRRRSýîr’’’Ÿïs”””“ÿzœ¤¤¤§ûÜå%%%?Þç%%%%þõ9)))/÷©ÉIII½NJJFKýêrR2R?ïS‘‘ÿzœŒ|ŒûÜãä#ä?Þ§þõ8èøøÿ÷©ÇFÇG½ÇÑçÆÄÿ¿Qb†oñŸÿ󌋊Šÿ~œ\\\L äâ¢"b _'ù8xxhhÉÄÄÄDÿÎ&&&'ýþqQQQoïÓ‹‹~œldlgûôãc£c¿ß§þû8øøøÿ÷ÉÇÇÇÇÿ¾NBBBGýòr2R2_ï“’’’’ÿ|œ”””—ûää¤ä¤ÿÞç#%%%þù9)))/÷¹ÉIII½NJJJKýêrrrR_ïS““’’ÿzœœœœ—ûÔääää¿Þ§'''%þõ999)/÷©ÉÉÉIÿ½NNNJOýêrrrR_ïS““’’ÿzœ”””—ûÔäd¤d¿Þ§%#%%þõ9÷©ÈGÈÇÿ½N>>>;ýêqñññßïSÿzœ|||wûÔãcccÞ§þõ8¸È¸Ï÷¹ÆEÆE½Î.**&òq11/sˆ‡‡‡{œ<4,4 äááâ"?ÿçÿÿ8¨¸¨¿÷éÆFFEÿ¿N22*/ýúq‘±q¿ïÓŽŽŽÿ}œt||wûä㣣ãÿß'!!þù9 ) ÷ÉÈÉHɾNJFFCýòr2R_ï“‘‘’’ÿ|œ”””ûÜ䤤¤¿Þ§%%%%þõ9)9)/÷©ÉIÉI½NNNJKýêrrrR_ïS“““’ÿzœœœ”—ûÔää䤿ާ%'%%þõ999)/÷©ÉÉÉI½NFFJKýêrRR2_ïS‘‘‘ÿzœŒ„„ûÔä#ãä?Þ§þõ8èèèÿ÷©ÈGÇG½N::67ýêq±‘Ñ¿ïSŒŒ‹‹ÿzœ\\\WûÔâââ¢ÿÞ§ù8˜ˆˆˆÉÃÃÃC@½Îòqðÿÿ󈈉ˆÿÿœT\L_ûôâââ¢ÿßgþû8¸È¨Ï÷ÉÆFÆÆÿ¾N::67ýòqÑÑÑßï“ÿ|œ„Œ|ûää$¤$?ß'!!!!þù9 ÷¹ÈÈÈHÿ½NJFBCýêrRRïS’’’’ÿzœ””„‡ûÔ䤤¤¿Þ§%%%%þõ9)))/÷©ÉÉII½NJNJOýêrrRR_ïS“’’’ÿzœŒ””—ûÔädd¤¿Þ§'%#%þõ9)÷©ÈÈHÈÿ¼ÎBBB?ýêrñò/SŽŽŽzœt||t Ôãã£c`^§õ8ØØØØ©ÅÆFEÀ½N.*2.êqQqq0/S‹‰‰ˆ{œDDDD äáá¡á _' ù8ˆˆxÿùÄÄDDÿÎ&*&'ýúqQqQïÓ‹‹Š‹ÿ|œ\dTgûäãc#cß'þù8èèØß÷ÉÇGGG¾NBB>?ýòqñññÿï“ÿ|œ„„„‡ûÔä$$$?Þ§!!#!þõ9 ÷©ÉIHH½NBBBCýêrRRïS’’ÿzœ””„‡ûÔ䤤$?Þ§%%!!þõ9)) ÷©ÉIHH½NJJFGýêrRR2?ïS‘’‘‘ÿzœŒ„„‡ûÄädd$?Þ'!!þó8ùøø©ÇÇGÇ@½N>6:6êq±‘±°/S‹‹zœll\\ Ôã"ââ`^§õ8¸˜¨ˆ©ÄDDCÀ¾N"òpÐÐа/“„„ƒƒ|œ44,/ÿüááááÿÿçþý8¨¸˜¯÷ÙÅEÅE¾N.2.3ýòq±±‘ŒŒÿ|œlldoûäãããcß'þù8øøèÿ÷ÉÇÇÇÇÿ¾NBB>?ýîrñÿïSÿzœ„„|ûÔããããÿÞ§!!þõ9øÿ÷©ÈHGȽNBBBCýêrïSÿzœ„Œ„‡ûÔä$#ä?Þ§!!!!þõ9 ÷©ÈHHH½NB>>?ýærññÿï3Žÿyœ|ttt Ôã㣣`^§õ8ØØÈÈ©ÅÅÅE@½N..**êqqQQ0/S‰ŠˆˆzœLDD< Ôâ!ááà_'  ù8hXXH¹ÁÁÁÁA>NÿþpððÐÿÿ󈈇ˆÿ~œLTDOûôâbâbß'þù8¸¨¸¿÷ÉÅÆEEÿ¾N6623ýòq±±‘Ÿï“ŒŒŒÿ|œl|lwûäãã㣿ß'þù8ùèï÷ÉÇÇGG½Î::::êqÑÑÑÐ/SŽŽŽŽÿzœ|„tûÔã㣣¿Þ§!þõ9 èø©ÈHGÇÀ½NBBB>êrñð/Szœ„„tt Ôãã㣠^§ñ8øøèè‰ÇÆÇFÀ¼Î6:22êqѱ‘/S‹‹Œ‹zœ\\TT Ôââ⢠^§õ8¨ˆ˜ˆ©ÄDDCÀ½N"êpÐððÐ/“†…†„|œ$$ äààà  _3ÊEà`¶ Y¼ Áoûþaaš@^ `µ¤à`¶ ßóÒ ð0[­  /°[þý˜x†P‚Ø-jx-‚ß÷ìÄD5€¼ ÁkX( ÀÁlÿ¾æ")¨à`¶ ZÁ@^ `·ýó1qm  /°ZÚ ð0[¿ï™‹Šmx-‚ÖÐP‚Ø-ÿ|Ì\[h( ÀÁl¶‚€¼ Áoûæbâ›A@^ `µ´à`¶ ß3Ú ð0[­  /°[þù˜ÈÖÐP‚Ø-mx-‚ß÷ÌÆÆ¶‚€¼ Ákh( ÀÁlÿ¾f65´à`¶ [@^ `·ýó1±ÍÀ /°ZÞ ð0[¿ï¹Žox-‚ÖàP‚Ø-ÿ{Ìlkp( ÀÁl·€¼ Ál Þcc@^ `µ¸à`¶ `^óÞ ð0[­à /°[þ÷˜ÈÖàP‚Ø-nx-‚ß÷¼ÆÆ·€¼ Ákp( ÀÁlÿ½æ21¸à`¶ [@^ `·ýï1±íÀ /°ZÞ ð0[°/yŽpx-‚ÖðP‚Ø-{Ì|s€( ÀÁl·‚€¼ Ál Þcc›Á@^ `µ¼à`¶ `^óÜ ð0[­À /°[÷˜ØÖàP‚Ø-nx-‚Ø¬ÆÆ·€¼ Ákh( ÀÁlÀ½æ25´à`¶ [A@^ `¶ç1±­  /°ZÜ ð0[°/9‹nx-‚ÖÐP‚Ø-yÌ\[h( ÀÁl¶‚€¼ Ál Þbâ›A@^ `µ°à`¶ `^óÚ ð0[­` /°[÷˜˜–°P‚Ø-kx-‚ؼÄĵ‚€¼ ÁkX( ÀÁlÀ½æ"!¨à`¶ ZA@^ `¶ï0ÐÍ  /°ZÒ ð0[°/y††ix-‚Ö€P‚Ø-{Ì,3@( ÀÁl´‚€¼ Ál Þa¡ZA@^ `µœ‹ÀÁlÀ¾fœà`¶ Y¼ Ál æ` ™A¼ Ák(!‚Ø-|Ïÿû !¬[¬€„^±lÀ¾L@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿÀ3V :x"…´h ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî0ÿþè?ÿÿÿîßÿÝ ÉÿÿÿÜcp±Üc}÷Ó»ØÝŽìn†ð·WÝ¡ºÄ7ÿÿýÆ›…·“ï¸tîòv7iÛxgmÊçu}÷Ý7IÊðÏÿÿûîg#!þòó}÷ÜcvO¾é<žW§†tžN›ïº¾ëÿÿîîîwßy>òt7“ÛÍ绾ò}äûî®Û²ÿÿ÷“îWb}Òsn“ÛÓ¤äo7c{¼ï¾û¶êän_ÿÿÜ+þõï{ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿÿÿþ÷v᜼¼¼¼ ßÿÿÿÿûµÿÿÿ¸*'EÿÿÿÜIÄ¿ÿvÝÿÿûî•Â…ÿîwÝ' „‰Ân' ¸Û…‰Âî'pq9‰Ä Ø®ÄèN„èN“œâ'¯ºO¾èN8R¸Rpeû÷w6í==>㺠é==\dá÷1^î{™»n®ïÞ÷ß½¿r7÷;§w}÷ß}÷ß~ót®îï«Û«É×rÝ_}ûÉ÷"v_ÜmÞîû?}÷ß»½^žonÕêä+¤èWß}ýПûÃ<3Éâuy>ò}äûï'iÑ<¯ xŸtžÐUÒvÉäûî n¯ÿÿᜤ¤¤§ûàg)))(þøÊJJJ½ÿÿý„òyÿÿÿÿî“ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøE  ™"…¸h ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿ¼ÿÿÿÿqÜmÇÿÜ®CrÿÿÿÜ;…ÂÍÚus7»›¼o;ÍÑï¼ÜFâ;ˆÜ)ÿÿû«áœŒ„ŒûÛÍ÷W÷mÙn†æ7Míí÷§Né½ÿÿðÎBBBCýñ÷ï¾û«»Ûþöôòy>ûÓ÷ßÿÿ÷ß}÷ÞŸsNÉíÛ¼/}æäO¾ûîÛïÿÿûï'ßy=ºº72z{»N··§ß¼ŸsO¿ÿÿ÷“ï÷'ÿÞ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzÿÿÿÿÿÿÿÿÿÿÿ݉âÿÿÿÿÿïoÿÿÿ¸]ÂDáÿÿýÄ' ÿýÝäëÿÿÿ»'+…\2ÿ÷ݧ“…†p°×Æp÷œbv'ž'a§ó}÷Ýݧb¾æo'ß}÷+ï»ÿÃ8HHHOÿÿýÎûï¼ÞÞO¾ûï}П}äûÍážOºÿÿû÷Ý^Ÿ}÷ß}Õã{t7‰ûï¾çvžßÿÿý÷÷ßß~÷¼ï¿{wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvÿÿÿÿÿÿuÿÿÿÿÿÞN×ÿÿþá)Âÿÿû‰ÿ¾ïÿÿÿ¸ep¤áBÿûï'œ,Np²pµpâq‰ÆN1=;±?ýíÁÃÞ7ÞÞÞ;ÇqÞ;Íçy½»änC¸‡ÿÿ÷ ¹ ÆN“ï»O¾óxÞÞïºn¯½:nIÊêêáÿü3ŽŽŽŽÿ|¹Ý¦ûï¾í{«Ý'ß}Òu}÷ßrÿÿû»Ûï¾ûî†íÞ=ØŸ}÷ÞžO¾ûÉÿÿÿ»ºNÓÉäé>í=º»w·ß}÷Ýß}ÊûÿÿÿýÉ÷½ûþü3‘’‘ÿ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ N¿ÿÿ÷ '?ÿݧGÿ÷®ñ}âÝî' û×ûîÉÍ8Zp”áÄãÆN2s'2q‰Ù=^W“îBºNIâp«‰:NwW§DàÂp„ÅEÆÆ??82pdà§û»Åt'·§nêûïßwy=¹]'·‰÷Iûîîï¾ôöìN¿ï¿}÷ß¾ûïþñ9_}÷ï¾û¦û¦ý÷܉ÿ÷†~ûÃ>òy<Ÿy<·b­{Ûï'“É÷íIÏ'+»ïN÷Ú“ßÿ¼3Â/'ß}÷ßy?v'-÷ß}äûï¹_}÷“Åp ­äÿÿÿÿÿþàÁž_ÿÿÿÿý÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ žý"…Äh ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû§ÿÿÿÿÿÿÿÿÿ»ºN÷t¾åuutÝ]?ÿÿ»»¾û÷¯þÿ}÷/ÿÿß}û·ÿî–é=:¿ÿÿ÷§§«Ó´õ½=o+Êôêôîûÿÿÿÿï^õïNÿÿÿÿÿÿÿÿÿÿÿÿÿÿþì®…ÿÿÿÿÿ¼OOÿÿÿÿý÷ÿÿÿÿÿ÷‰÷—ÿÿûŽí;_ÿÿû¥ÿþôóÿÞ-â÷¯zÝÒÞ-åþîûÓ²y;OWiéÚz}Úz}Ú½==] äôõ¹ 蜅r+g/ÿvÞo=Ùï+³ßîžé]C9)×·Wî!=>ÿûÞîòwwÿzy<[¯ºÝ·Gßÿ½=^'Ýݧ4ôôôñ^'Šòz}í÷‰ât+¡:Ó¢½:-Ä'ÿîIÖäNÕÒrÞŸ~ô÷}äûï½½=ݧiÝû˜gî“ÿÿÿÿÿûŠîéÿÿðÎRRRSýïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð© ]"…Èh ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{x_þêëÿÿÿÿÿß{ÞîÿÿýïÜ®ÞëuºÝ;«–é¾êâÿÿû«®êçr÷Wߺ½=½?uuwwÿÿýÒ½:ÕéÓ½]_}÷ß~û÷Oÿÿý÷2ݧ–ôêôûï¾û¤õzv/ÿÿïO?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþëq/ÿÿÿÿýÒ¹ÿÿÿÿÿÿÿÿºÿÿÿÝÿîÿþõÿ½}×ÿû¥ÿ÷i×Ýn»««§utÿº^ëuºWWÝ_î·_ýÕ×u÷_Ýn»«ïï¾ý׸„éî—º[¥î½Ò½?u÷Jé:W_ÿÿt®Õïzýëÿt¿ÿÿÿÿ÷W¯ÿÿÿÿÿÿÿÿÿÿðÎ>>>?ýëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿh S@"…Ìh ?¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃ8øøèÿ÷½ÕÓ{Ü+yÞÞ÷WOÿÿÿuº¾û÷Mîê÷ut_Ý]ÿÿ÷ß~öûËu~ûýýÕËÿÿuÝ7Mïu÷·Mî÷ÿÿû¦ö÷yºnÛ}Ó½Ý]7WWwWWwÿÿÿ¿ÜýÎýïÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþéÿÿÿÿÿû¯ÿÿÿÿÿÿÿÿÿÿÿÿuÿÿuÿÿÿýËÿþöê÷ººÝ;ÛÛÛß{º{§÷WKÿÿu÷[¢ýÒºÿuÝ'_ÿºî¿ÿû¯ÝnÆ÷ÿûÛ«·îŸÝ]n×tÝ]^÷O{ÿûßýï{ýîæÜßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð^ ¯a"…Ðh >¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrn_ýÈÚW9ÿÿýîîöó¼þ÷{}Öó½ÿÿýÕÕÕÓ}íÒtÞݦéºn®®+n‰ÕÒtÿÿþêû«ï¾öûï'“¤ûï½¾û÷Þ'ÿÿþû¢vÝo'‡}Óto¾êû»««ï7W°Î6::Aýïÿÿî¯WÝ\û¶ï}û¶é]ÿÿ½÷¿þ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÓÿÿÿÿÿ÷MÊéÿÿÿÿÿﺽÿÿÿÿÿÿÿÿþéºÿÿ÷W_ÿ÷“ÿÿÿþëzÿ÷ÞÝ·MÕÓtî›Û§vÜ®ÖëurººwW-ÖëutýÑ9“«ï-Ñ<ŸßÝ_ßz}ûïÜ·MÖä÷_uu¼ß}Öêë½ßuºßݧÿ÷WNé¾ûÛ¦ôöþöóºn›«ÝÓ}îêÿr÷_þó ãä$dŸÜÛ›»n·Fæoº¹½Íÿî¿ÿÿÿÿý×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀº Ÿƒ"…Ôh >?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿyÿû§ÿÿÿÞw·MÐ?¼ïoaœŒ„Œ‡ûã¦ûß{ ã##"ÿß?ÿþó¾í¼›¦é½ºn®•ɽº»on®›ÍÕ×ÿÿ÷[¢º¾ûÉäòî“þèžWW/ÿÿºÝ?¼îžëÝoo7»ßÿÿï7·»ÍæéÜ®f÷yºn›Ûï7M÷w_ÿÿï¾÷¾þ÷½ïwÝo¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûßÿÿÿÿÿxÿÿÿû£yÿÿÿîŸÿûî…ÿ÷Ÿÿº{—ÿî®ÍíæêèÞw›¦èÝÍæûîѽ¼Ý^ÞÜF齺Ý^ÞÝ^î¿÷_ºÝ¿º÷Þ?Ý]+«¯ýÖêëÿî®÷Ý{¯Ýo7¿ÿÞ7Mæöéï Þïwßt¾÷›·NêëÿºÝæýííÑ^oÞow›ï¿{xÞw›ïowºÿÿÿÿþëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ª B¤"…Øh >?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿuuÿÝ7_ÿÿÿÝÃ9))/÷Ÿt÷×ÿÿ«ïn·[«¡Ý]=íÒ}ÖëuÿÿûïïýÕ÷ßÝ_}Õ÷î¿ÿÿ¼-Õ÷·ƒº{§½Ý_~õº½¿ÿÿþ÷Ý]—tû®ëÝÿÿÿýÓûßÿÿÿÿÿÿÿÿÿû‹ÿÿÿÿÿ÷Oÿÿÿÿÿu¼ÿÿÿÿÿû«§ÿÿÿÿÿÿÿÿý×ÿÿÿÿÿºÿÿÿÿÿýÖêóÿÿuºû§ý×ÿÝ]~ëºþëÝÿÿî·W_uû®ëºººÝÿºî¿ÿûßÃ9 ¹'÷ßÿÿÿýëÿÿÿÿÿÿÿÿÿÿÿÃ9IIIO÷¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøM ‚Å"…Üh =¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿuÿî®—ÿÿÿîWÝ/ýëqwKÿÿî›­Õêé^n·Jåzt®“¤ôôêÿÿÿû«ï¾û«Ûï¾ûí¦÷§›Íþëÿÿû« ×ÞÞž]^Ÿ}÷ß¼žo½:W¯ÿÿî·WWßvž÷§§§Þž÷Wî“—ÿÿýý÷>õÜÕ»Ÿÿÿÿÿÿÿÿÿÿþéÿÿÿÿÿû§ÿÿÿÿÿÿÿÿÿÿþêéÿÿÿÿÿýÓÿÿÿÿÿÿû•×ÿýÒuÿÞÿÿî¿ÿ¿î®·WM×û–¶û¯uî“–én¿î®·Jû÷ßtÝn“®é]]-ÕÕÖÿºAœD\dcó÷ûïÝ_Ý]oﺹ^®¯î¯ÿÿï{ÿtßzººß}ÚÞÞÝo¾êët½Á¿ÿ÷'ýÍ~õï\3Žÿ{usÿÿÿÿÿÝ]] ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 4ëç…àh ¦ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿô_ x,‚ÅðP—’Ï ž`_èÀ ð2Yác(KÀÉg…Op/Ôa x,ð±„%àd³ÂÇÇØê1„¼ –xXÆ ð2Yácóü õÁB?%ž2„~K<,ÿ~£(Gàd³ÂÆ@PÀÉg…ð?ï´dä~K<,fä~K<,‚‚}£00#ð2Yác(0%àd³ÂÈ((Ú3ò?%ž3ò?%žAÁÀ¾Ñœ‘ø,𱜑ø,ð²öŒàÀ|ÀÉg…ŒàÀ|ÀÉg…/´iä~K<,iä~K<,…‡|£H0#ð2Yác@0#ð2Yád<7ûíA€ù’Ï €ù’Ï !¡à_(Ò Èü –xXÒ Èü –xY ùF `>Gàd³ÂÆ `>Gàd³ÂȘˆÊ5ò?%ž5ò?%žDD½Q¨‘ø,𱨑ø,ð²&&î`À|ÀÉg…`À|ÀÉg…‘1POtkä~K<,kä~K<,‰‰{£X0#ð2YácX0#ð2YádTL ÝÁ€ù’Ï Á€ù’Ï "¢`^¨Ö Èü –xXÖ Èü –xY÷F°`>Gàd³Âư`>Gàd³ÂȘ¨º5ƒò?%ž5ƒò?%žDÄÀ½Ñ¬‘ø,𱨑ø,ð²&'ýî`À|ÀÉg…`À|ÀÉg…‘0/tjä~K<,jä~K<,‡ˆ{£P0#ð2YácH0#ð2YádGàd³ÂÆ€`>Gàd³ÂÈho÷º4ò?%ž4ò?%žCC¾Q ‘ø,ð± ‘ø,ð²öÀ|ÀÉg…ŒàÀ|ÀÉg…/´gä~K<,gä~K<,„„}£00#ð2YŒÀÀ|ÀÉdAÁÀ¾Q˜’ð2YŒ À|ÀÉdAÁ@¾Q”%àd² AB?%YùFPPÀÉd2„¼ –Ad ûíAB^K ±%àd² _à_hÈ ð2YŒ@¡/%XþÿùF P—’È,b x,‚Ç÷ØÚ0‚„¼ –Ac(KÀÉd>½À¾Ñ€%àd² B^K ±éêòoOO/Ó{||~~›ëû÷ü ôßßÿßà_¦ÿÿÿû8(?÷ÉÀÁAAÀ¾Nöpp¿ï“†…†‡}œ,,4< ìá¡ááÿß'þ÷8xˆˆˆÉÃÄÄÅ@¾N&*&*îq111?ïsŠŠ‹‹{œT\\\ Ôââã# ž§ó8¸¸ÈÈ™ÅÅÆEÀ½N.*./ýêqQQqpOSŠŠ‹‹{œTT\\ Ü⢢âà^§õ8ˆˆ¨˜©ÄDDÄÀ½Î" êpðÑÿ‡‡†|œ4,44 äáa!¡ _' ù888HHÉÁABAÿ¾N òp?ðP0/“ÿÿÿ|›ûóûÿûäߟ_ß _&ôôö÷ù7ÇÇרù¿?¿¿À¿Íÿÿýþúoÿïð0/Óÿ‚‚‚|œ$ äàá!!ß'  þù8XXx÷ÙÃCÃÃÀ¾N"#ýòpñ1?ïsˆˆŠ‰ÿ{œLLLT Üâb¢âà^ç÷8˜¨¸Ï÷¹ÅÅÆFA=Î.226 æq‘‘±°/3ŒŒÿzœddll Ôã"ãcÞ§÷8¸ÈØØ©ÆFFÆÀ¼Î..67ýæqqq±°/3ŠŠŒŒzœTL\d Ôâ¢b¢à^§ó8˜ˆ¸˜©ÄCÄÄ@½N"òpÐÑ/“……††{œ$,,, Üá áaÞç þ÷8(H/÷ÉÀ¿ÁA¾OýÿÿþòoϯïÐ/“}}|›ëëûüüßÿà``çÿÿý?ø(((éÀÁAB¾Î ýòp°Ðß‡†‡|œ<?ýêq±±ñÿïSzœtt|t Ôã£cã ^§ó8ÈÈØØ©ÅÆFÆÀ½N..66êqqq±/S‹‹‹yœTTd\ Ìâb"â¿Þ§þ÷8ˆˆ˜÷¹ÃCDD@½Î""òp°Ðÿïs„…††ÿ{œ$4'ûäàà¡ à_'ù7÷ÿøÙ¿?¿¿À¾Ïýýýÿÿþp0?ð_ÿ󂃂‚ÿ~œ'ûôà¡!!¿ßg þù8xxho÷ÉÃÃÄD¾N"&&'ýòq11Q_ïs‰‰‹‹ÿ{œTd\_ûÜââã# _'þ÷8ÈÈØï÷¹ÆFÇG¾N66:?ýòqÑÑòï“ÿzœ||„‡ûÔãä$$ ^§!!þõ8øùÿ÷©ÇÇÇÈ@½N>>B>îqñÑñÿï3Žyœtt|ûÌãccã`^§õ8ÈØèï÷©ÆÆGÆÿ½N.263ýêqqQqïS‰‰‹‹ÿ{œLLTWûÜâb"b`^ç÷8xhˆ÷ÉÂÃCþNýòppПƒƒÿ|œ ûìßßÿÿÿß&þÿÿÿÿÿ8/ÿùÁAAAÿ¿N ýúp°Ðßï³…††‡ÿ~œ4<GýîrïSÿzœ„„„‡ûÔäd$$Þç!!#!þõ9 ÷ÉÈÈHÈÿ½ÎB>BCýêr2/3ÿz¼l ‡ä‡Îyì ÐB?þÃŒ@Ð=ÿ½Î::>;ýòqñ±ñÿïSŒŒÿzœ\\dgûÔââãc?ß'þù8˜˜¨Ÿ÷¹ÄÄDÄÿ½Î"""#ýòpðÑÿï“…†ˆ†ÿ{œ4,47ûäá`á`ÿß'þù8÷ÉÀÀÀÀÿ¿Î ÿþppp¿ïÓ…†…†ÿ~œ<44?ûôá¡áâ?ß§þý8˜¨¨¯÷ÙÅÅÅÆ¾Î2..3ýòq‘ѱ¿ï“ŽŽŽÿ|’6> ôgûäã£ããÿßeއ=þùxøPÊ:2ÿ|åeÆ‹ Í+/4þû¨›°ì)ï÷É$$#H½NBBBCýï2g¡€#ýêr21ò_ïrÉIÈBžÿ{’NF $ß'%#%#þ÷,|„d:‡À½I!#Žÿzœ„„ŒûÞäA ƒŽRP/w]èU@~¾f>Aà8“Ïï’ÇÇE¾GûÜ‘ñеѿïSŽŽ‰ÿyÌdc°4pÖÿ|œ\\d_ûäââââÿß'þ÷8˜˜˜÷ÉÄÄDDÿ¾N""ýîpÐÐðß…†…ÿ|œ$,ûäà`` ¿ß'ÿÿ8HXH_ÿùÃCÂÃÿÿÎÿþpÑñï󇉉‰ÿ~œLTLWûìâb¢¢¿ß'þù8ÈØØÏ÷ÉÇGÇGÿ¾^;ÿÎŽw.7þýÐáqÆbõG‡|i§÷éÇÇGÈÿ¿wU^>tŽ1ƒ@ 0cýû¹—øô@dÄ ÔKŸß,X\hvÃ奯„ _ù¨4…àyÄt30ƒóý÷¡|W_ª<9)òõ~?þ÷$„‹â¸zCýó¬¼|çåÇ ù¯÷ÊÁrOEæä¿ßo–> £ „£_ïœø½Qȧ”+5 MÀ¾nMïÞ?çP/ÀЗç47@¾ó0<å/ƒ@ a |7ÿ¨_øôbXü£Lÿ¾tÁðd;!æuEç|^~òâCuÂeÿV{ýÿ‘Ê?rh4O þýû¾ª6[åPó±q±ÀÊòªcðÊ1¨ß÷ËÇ·—fÿzÁBƒŒ÷ +ƒ@õû8ØØØ×÷鯯FF¾N.../ýîqQ1Q_ïs‰ˆ‰ˆÿ|œLDL?ûäááááÿß'  þù8X8X?÷éÀÀÀÀÿ¿N ÿþp°Ð°Ïÿ󇇇‡ÿÿœnOý÷ª—XÉ·Âãd5þ÷U-ÑèÐ=Gÿ¾t€h‡>i a¿šÿ|«Ñy¹¢ór?ïž5Æ¢Q¨× F¿ß92³Pÿ6N¬ÔGÍÀ¾wRãcá“P4Âæ _lŽ? á%€©(ì?ÀÌØ»çäÓA ÿ}äªÍB|ØçÍ=+7ùxæQ(Ü“H”nòâêàÐ= ­ƒ@õþý8Éù÷Þî\lt2w.6<¾U¨Ä h£?ß/ Ê>7"È>7õq…ph…Õ z‚~œlltsûôãc#cß'þù8ȸ¸¿÷ÉÅÄED¾N&""#ýòqÑß†‡†ÿ|œ4,4'ûôà   ¿ß§ ÿÿ8hhXgÿùÃÄCD¿Î"&"%ûþq1Q1/ïÓŠ‹‰‹ÿ~œ\d\oûìãccc?ß§þý8øèèÿ÷ÉÇÇÈGÿ¾^=ì¸Üƒú£ïœoÆ z Thà~ï÷Ù#äb«£?ß´Ð%Z8dÇûõ— zŠs(–øï÷îd>4N¬Ò”òšÿ~¬GÍÈ<+‡d?ß»ú£d^4Î\ C_ïÕ?ê9DK|—û÷I€sæ•§‹˜ÿ~«¹y¹6!øe#þýän%‚óŠK¡ÈÞR¬ÔWÍ™—Ó‘Oÿ|³`”l`Ã`”l_ýö¬€Ð=J1ƒ@õ+þýy% h¤”Á ÿzã”Óáy±Êið¼ßûÝäšÄ£rmÃãoï›\èd –ï÷ìÈGÄ=þýÞUñ¨%FÊUSŸïÚ@î<¸½Ï  _·Ê>7y4|@¿li`¡“ #÷ÿ¿N:>>?ýúqñññÿŒŽÿ|œ\\\_ûäââb¢ß'þù8ˆx˜÷ÉÃÂÃBÿ¾NýòppPP_ï“……†…ÿÿœ4<<3ÿüâ"""¿çýÿ8˜¨¨Ç÷ùÅÅÆEÿ¿N22.7ýúq±±‘¿ïÓŽŽŽÿ~œ|||‡ûäããä$?ß#†ä#ÿßyùpf4mëßáÝwûï*÷~ž- À^ çûüNåÿ×ÊHÊÿ¿aພ#Uóò-  |ÿ~åñôph!L 4„*]þýÎ< Ù¢¡ë”ƒ@÷ûUøg%iù_÷ÎÚ>6.aà¹æcÓŸïµaêYľŸ•ÿ~¼š 4Ò¬Ãïžÿxã¿4ø^lçêÎB+7þ÷›úªvRSýó”*yü}•P4†Ï÷Þv "¢° )îN/¿÷ÜFV\|<§¿ß¸Ñ²êJþìÈÈîj  æ.îCø4ï¶4Vp{×ÕŸÿ~œ||„ƒûôã£ãä?ß'þù8ØÈÈß÷¹ÅÅFEÿ¾N.&*'ýòq0ñ1†ˆ‡ÿ|œ4,4/ûäá ààÿß' ÿÿ8xxx‡ÿùÄDÄÄ¿Î&**%ûþqQq1oÏÓ‹‹‹}œ\llsûìãcc£ÿß§þý9 ÷ÙÈHHH¾ÎF>FKýò9hÉI¾QÎ@øÚ Ü”ŸûìOôãä¤ÿßg)'))þû”aùI?÷Ê=@ tƒòNKýò/ðh?de%ß')-+,þù999io÷ÚCKè4²Òßï´‚ƒö@ü´»ûäå%¥å¿Þ㓇™io÷ÉÉJËK¾G-~Z[ýî(p “––ÿ{œœ¤¤§ûärPÀ))þûH Œ?')þù9Y)I/÷Èãá€&JKýò ~JKýòr22R?ï“‘‘ÿ}œ|„ŒûÜã£cãÿÞçþ÷8ȸȿ÷ÉÅEEÄÿ¾N&"&#ýòqñ††…ÿ}œ$$,'ûìá¡á¡Ÿ¿çýÿ8ˆ˜˜—ïùÄÄÅE¿Î&.21ùúqq±q¯ÏÓŽŽ}œt||ûôããä#ÿß§!!!!þý9 /÷éÈÉII¾NJJJKýòrRRR_ï“’“‘”ÿ|œœ¤¤Ÿûäå$å%?ß'%'))þù9IIIG÷¹ÊËJË?¾NVZZ[ýòrÒÒÒßï“•—–—|œ´´´·ûä奥¥¿ß'----þù9iiio÷ÉÊÊËK¾NVRVSýòr’’’Ÿïs“”””ÿ|œ¤”¤—ûä䤤¤¿ß'%#%%þù9) /÷ÉÈÈHɾNFF>?ýòqñññÿÿ{œ\\d_ûäââbâ¿ß'þù8xhx÷ÉÃBÃCÿ¿NýúpÐÐðÏÿ󇉈‰ÿœLLLK÷üâ¢ââß¿çüÿ8¸ØÈÇçéÆÇFÇ?>Î:>>?ýúròïÓ‘‘ÿ}œŒ””—ûì䤤¤¿ß''%%%þù9))9?÷ÉÉIÉÉÿ¾NRNNSýòr’’’ï“”””•|œ¬¤¤£ûä奥e_ß'----þû9iiio÷Éeåea#Ÿß$•–’|·ûì奥åÿßg----þù9iiio÷¹ËKJÊÿ¾NVRV[ýòr²²’Ÿïs•””“ÿ{œ¤”œŸûä䤥$¿ß'%#%%þù9)÷¹ÈÉHH½Î>>BCýîqñññÿïsŽŽÿ{œl\d_ûÜââb¢¿ß'þù8xx˜÷ÉÃÃCÿNýúpððÐÏß󈉉‰~ÿœLLT[÷üâââ¢ß¿çúý8ÈÈØ×çéÆGGG?¾Î>>>=ýúròïÓ‘‘~|œ””Œ“óä䤤¤¿ß''%%'þù9))9'÷ÉÉJIJ¾NRNRSýòr’r’Ÿï“””””ÿ|œœœ¤¯ûäåe¥¥¿ß'---/þû9iiyo÷íËF=\üý9Iy‰7çüËËD‰®~~œ¼´¬³ûä奥eß'-+-+þù9iiYo÷ÉÊÊJJ½ÎRRNSýòrr’r_ïs”“’’ÿ|œ”ŒŒûäädd¤ß'!!##þù8øù ÷ÉÇÇÇǾN:66;ýîq±q±ŸïsŠ‹Œ‹ÿ|œ\L\Kûäâb"b?ß'  þý8HHHO÷éÃCCC?Î&&&)ûþqQqQoß󌌌Œ~ÿœ\ldkóôãccc_Ÿ§üý9 ÷éÈHHH?¿NBBBEýòrRR2OÏ“’’’’|œ”œ”—ûääää¤ÿß'%)')þù9IIIG÷ÉÊJJJ¾NRRRSýòrÒÒÒßï“––––ÿ|œ´¼´¿ûìåä¥å¿ß»¨dú½PÁ›Ü å`Ý*ì<ÁBˆŒ>÷](õÿ9ii™o÷ÉÊÊËK½ÎZZZWýòr²²²ßï“”””“ÿ|œ¤¤¤Ÿûäå$¤ä¿Þç%%%%þ÷9))/÷¹ÉIHÈÿ¾NFJJKýòr2Žÿ|œllloûäã#ccß'þ÷8¨¨¨§÷¹ÄÄED¾N""ýöp°¿ïÓ††††ÿœLLLKÿüâ¢â¢ßßçÿÿ8¸È¸ÇßùÆÆÆÆ¿Î6::9õþròïÏÓ~}œ„„„ƒóôäd¤dŸŸ§'%'$þù9)))'çÉÉIÉÉ¿¾NRRRQýòr’²’¯ïs•••–ÿ{œ¬¬¬¯ûÜåe¥e¿ß'++++þù9iiio÷ÉeäåãÝþÿgXj-í¦?Þ ±z6=Î$óÜnyœ¼¼¼·ûäååååßÞç----þ÷9YIYO÷ÉÊÉÊIÿ¾NRRNSýîr’R’_ï“’’’’ÿ|œ”Œ”ûä䤤¤¿Þç%%%%þ÷9 ÷ÉÇÇÈG¾N:667ýîq±±±¿ïsŒŒŒ‹ÿ|œ\L\Wûäâb"b?ß'þù8Xhho÷ÉÃÄCÄ?ÿÎ&&&%ûþqQqQoÿ󌋋‹œ\d\cïüãc£c_çüÿ8ùø÷çéÈHHÈ??NFJFIùúrRRROÏÓ’’’’|œ”””“ûää¥$¥ß')))(þù9IIIW÷ÉÊÊJJ¾NVVVWýîr²²²¿ï“••–•ÿ|œ´¼´³ûìæ%%åÿÿé~<ü´«ÿý"Å—™zœŒ¼Ì»óüååå¥ÿß'-/-,þù9YYi_÷ÉÊJÊJ¾NRRRSýòr’’’Ÿï“”’”’ÿ|œ”Œ”ûäädddß'#%#%þ÷9)/÷ÉÈGÈGÿ½Î>:>;ýòqѱѿïsŒŒŒÿ{œl\l_ûäââ¢âß'þù8ˆxˆ÷ÉÃCCC¾N"""!óþq111/ŸóЋЋ~œ\d\[ëüã#"ãŸüAç`h ß$ ~‚«åñèåðhãŸ`§ üý9 çÙÈÈÈÉ??NJJJIùúrRRROÏ“’“’”|œ¤œ¤£óäå$ääÿßg))'(þû9YYIO÷éÊJJJ¿NVVV[ýòrÒ²²ßï“–––—ÿ}œ´¼¼·ûôååå¥ÿß§-//.üù9yyio÷ÉËËKK½ÎZZZ[ýòr²²ÒÏï“””•”|œ¤¤¤§ûìå$¤ä¿ß§''%'þ÷,”|”C¿ß{ð4quÊ?†oïÓ‘’ÿ|œ””„ƒûÔäcäd?Þçþ÷8èØØß÷ÙÆEÆEÀ¿N..*/ýöqQ1Q?ﳉˆ‰ˆ}œD¿Î...-÷þqq‘qß÷‰R€)XWè*®@õ¶ Ôsô㣣㟟g#% üý9'÷ÙÉHÉI?>ÎJJJIùörR’RoÏ“”“““~|œ¤¬”§ûäåe%$ÿß')'%+ý9YYI?÷éËKJJÿ¾NZVVWýòrÓ’_ï³——•–~œ¼´¬·ûìå¥å¥Ÿß'--'%þù9yiIo÷ÉËKKK½ÎVVVQýòr²²Rï““““}’RN4ô—ûô䤤ä¿Þç%%%þû ÆÈÈ?¿NBFBCýóqðg üæ/ßðSŽÿœt|dOûüãc"£?ß§þý,l\\1ï÷éÄÅBÄÿ¿N""&#ýúqñÿïÓ††††ÿ~œDDD;óüâb¢¢_Ÿçýÿ8¸ÈÈ·ïùÅÆÆF>¿^-\XÕÀh_ ª¸ ÔBy{ßa»éç~?/¯ý¸HKãÍ> ÔãÐrHÉDWH??î1ì8HôÐhŸë|zEh¹ïùÉHIH¿>xƒÎÀÐA¾G¢*4ýX;I·ƒ@÷*ÿÿ¹ÈQ.S§çú»ßŒM/sÛô‚<êzüY÷÷ÎÚ ñçAš_ý®Üœ9絿ëß¿ûáæóÑçâ fþûÛèF½YU>Ö¬2ƒœÄ´¬Çûþå!†M¯}³ùçÑgäŸß;™çªPð3Q÷\ÿ$œ«Ò¸zQùþòNÑQøöB翾öº¨ôYäÃŽÔçüŸ;ß?þùÚ¡æŠPñéÊŽÿ¿V&ºI ¼2‘ÿ¼‹ü ¤_|ÿ÷Þ¾ $áãøiàÏø9ÈÅÈÆ¿>õRç!«résÓ Þÿ ÜO<ž˜sïðX~rìñøÆ¥AŸüZª?¼þš ÿà§üùxfOCñMž{ûõ—>è7·|3ˆÿœDDLCûôâ"""?ß' þù8xˆ˜‡ïùÄÄÄÄ¿?Î*.*-ûþqq‘q¯ßó‹}~¼jè4Ѭ@Ð?AYÈjõhãŸa§!üýˆ˜mÝtZ9q§èZº@ù"Ô Ü“ô yhdWÁ }‚}V {SîAú rrrROÏ·M€E<|iú­@Ð=É6@÷(ýyFheÁ ~±â³PzQy©ØyÊIÉÊ?>xÇøÔs‘Õ~„«4’- Ð=É¿AÎRbVUý÷¸—KViì¸Ú7Á¡‚~†¬{åc_,ÿÿI#ñçå¥_ße–—””<þû¹uphb)œý U€¹Ehäß œ^Iä¸Ü£Ùq·ÿ÷óÚjïDø40Q¯ÿ…œœ”œ§ûåäÙ “k€ýþ©àÐ>F¦@ùÿ y(§IE9ý÷¢*4ì â*£Oæßá§###"üùÙÁ Rí˜Uù§èYÆÈGH>ÀÇ èØß÷þë®j/sYsÒ•Íwü4‘‘°Ï‹}}ÌC›ëž^þÿ8ˆˆ¸¯ÿùÄÄÅD¾N"""#ýòpÐÐÐß‰ˆˆÿœLLLKûüâ£"¢ßçýÿ8ØØØç×ëÇ1@ È +ôTA {Pî=úqñò¯w‹H.5\iú «P4rMÐ=È?A8¼Šø4Ò @п@¾ª€Ð=Ç©@÷ÿ9)) 7çâò)ããR)ÀпB>­`Ð=Ê4@÷$ý yFÀhdÛ ªPüÔ‚Ay©ø‰ÊJJJ?=Þ=!Q©’ãOÐunîM¸¹7èIÊKJË?¾÷ h¾ Ð4ˆÊÁ¡‚‡¬såc_(þÿ¹?øMÅÁ’¿Î?ÿÕðóüE|£ûáˆ3ê£çÉ®@ ÿò« Ð=Ê,ƒ@÷&ÿëʽ•y.6ÿÑ> kÑ>j:›ÿ†œ¤¤”§ûåäÚÁ “k€ýüªay¨ä±ù©øW^F)ÒQŽ}èÊ¡‚y/6ލÓÉy·ø‰ÈHÈH¿¾ö`hT {h€4ÇøiÇÈGH?¿Î::B?ý÷®H÷]Ê\¿Âi¬½Ñ ªá÷cÏÐpa^îø·øÅEÅE?¿Î*&*!ýòqððï†††ÿ|œBBAùïqˆ¥Æ ã•}ƒÓ@4r*¥îŒ{ôä |UO?ô‚óQ¯BÝs_À)ú#2²PÀyúÁùÇÊ=T. ß¡´Ê Üš 4‘~ƒ¼“`4‘ì Ð??ôróQï?ù¨/¹úr’’roïž=ÈÊ@ùÇÞ4ý V°hå–Á |~‡œ´¬”‹ûïv€ àÐÁ3—8òšÿ†¬kåŸ~é7÷þ¨ *ø4mÅÁšwÁ¡~~ƒÌ´«õ ¢?>bAÊ`ÐÀ²* ÿát® Ü’’³±ÿ¼³°4‘ì ÿÐ~j(3>´ãÈgÿ 9I9IG÷ÍÉ2ƒ@ årãŸïçH/5ô_½÷î„uäâ"ì?=ôotðöXyˆߡ䎊|ûïj€Y§ÅOHS®ÿƒ¬Cã[8÷ÙÇÇÇÇÿ¾G çÈF?¿ô_]rÀfº #{ÿá¢|\\Wûô⢢â¿ß'þ÷8ˆxˆ÷ÉÃCCB¿¾N"""!ûþqQqQoß󌌋‹œdldkóüã##c_Ÿé æè¬ôdcì ü‚|tsôããä$Ÿ(ýØ 䌋ô A ý‡|„‹óôä$¤d__¨ÿ>y Éè7€Ký|Œ›ûüqð^ùé)'÷øž¨ÇÉÊ??Çò 윓óõ ü…¯”‘œœ”œ‹óí!¼Aû%$üûØ4±Ò²Ï³•–”~{£ø½ƒAù)*ÿ(ÊKJ¿¿Ç&ý.^UùþŽàÐ~ÀŸ–•~¤aøÃòòŸïÑ?Aû#+)þýŒ ÉÉ¿¾Ñü؃òrïó’“‘“ÿ|Ž6 d¤¿Þ©þ ìIù9'÷øä"ÉH¿¼RØ@ “‘~œtŒtûäq°À# þù(ÇÇÇÿ¾Î>>>?ýòXèÙøï÷Ú3Oß{tOü ã"ã"ÿß'þù8˜˜˜—÷ÉÄCÄCÿ¾Nýöq/ß󉊉Š~ÿœT\\[ÿüã###¿çüý8èèè÷çùÇÇÇG¿?NBB>Aùúr2ïÓ‘|œ””Œ—ûä䤤¤¿ß'%%%%þù9)99O÷ÉÉÉÊJ?¾NRNRMýòrrrRï“’’“’ÿ|œ¬¤œŸûäå%$äÿß'++++þ÷9iiio÷ÉËKKK¾NZZZ[ýòrÒ²²¿ï“•••”ÿ|œ¬¤¬¯ûÜå%%$ÿÞ§''''þ÷9)))/÷©ÉÉIÈÿ½NJJJGýêrRR2?ïS’‘’ÿzœ„Œ„ûÔäd$$Þ§!#!þ÷xøhè÷ï?ýó´AÄi„׺ÿÿÅ_þÿ8ØÈØÏ÷ÉÅÄÅÄÿ¾N"""'ýòqÿﳆ‡††ÿ|œLDDC÷ü⢢âß¿çÿÿ8ÈÈÈ×ÿùÆÇFÇ??N6>69ùúrññïïÓŽ~~œ„|„ƒóìä$$$_ß'#%#%þù9)))'÷ÉÉIHÉ?¾NJJJIýòrRRR_ï“’’’’ÿ{œœ””ŸûÜ䤤¤¿Þç%%''þù9999O÷¹ÊÊIʽÎRRRSýîr’’’Ÿïs””””ÿ{œ¤¤¤Ÿûäå%%%?Þç))))þ÷9IIIO÷©ÉIII½NJJJKýêrRR2_ïS’‘’‘ÿzœŒ„Œ‡ûÔäd$d?Þç#!##þõ8ùøÿ÷©ÇÇÇÇÿ½Î:6:;ýîq±±Ñ¿ïÓŽÿ{œd\l_ûÔââââà_'ù8ˆxˆxÉÃÂÃC@¾N&&"#ÿþq111?ïóŠŠŠ‹ÿœ\d\[ÿüã#c#?ß§þý8ØèØç÷ÙÇÇÇÇÿ¾N>>>?ýòr?ï“‘’‘’ÿ|œ”””—ûä䤤¤¿ß'%'%'þ÷9))/÷ÉÉIII½ÎJJJKýòrRRR_ï“““’’ÿ{œœœ”—ûÜääää¿Þ§''')þõ9999/÷©ÉÉÉI½NNNJOýêrrrRïS““’’ÿzœœœ”—ûÔ䤤¤¿Þ§%%%%þõ9))/÷©ÈÈÈÈÿ½NFBFCýêqòñÿïSÿzœ|||ûÔ㣣ã¿ß'þù8ØØØß÷ÉÆÆÆÆ½Î2.23ýîqqQ‘0/“‰‰Šˆ{œD<<< äáá¡á _' ÿÿ8˜ˆ˜ŸÿùÅEÅEÿÿÎ222/ÿþq‘‘q¿ïÓŒÿ~œttlwûìã£ãc¿ß'þù9 øÿ÷ÉÈIHHÿ¾NFJFKýòrR22_ï“‘’’’ÿ|œŒŒ”—ûä䤤¤Þç%%%%þù9)))/÷ÉÉIÉI¾NJNJKýòrrrR_ïS““’’ÿzœœœœ—ûÔää䤿ާ''%%þõ9)9)/÷©ÉÉÉI½NNNJKýêr22R_ïS’’‘’ÿzœŒŒŒ—ûÔäd$¤¿Þ§!!%!þõ9 ÷©ÈGÈGÿ½NB>:;ýêqÑÑñÿï“ŽŽŽÿ|œttloûäãc#b¿ß'þù8¸¨¨¸ÉÄÄED@¾N""îpðÐÐÐ/“‡‡‡‡ÿÿœDD:>:êqñññÐ/SŽŽzœllll äãcbâà_'÷8¸¨¨¨ÉÅÄÅD@¾N"""òqðÐð/“†††…|œ44$$ äá¡¡aÿçÿÿ8˜¨xÿùÅEÄDÿ¿Î*.*+ýþqq‘QŸï³ŒŒÿ}œltdoûäãcc#ß'þù8èèØï÷ÉÇÇÇG¾N>>>?ýòrñÿïsÿ|œ„„|ûää$#ãÿß'þù9 øÿ÷©ÈÈHGÿ½NBB>CýêrïSÿzœ„„„‡ûÔä$d$?Þ§!!!þõ9 ÷©ÈHHH½NBBBCýêrññÿïSÿzœ|||wûÔãã㣠^§õ8øøèØ©ÆÆÆF@½N6622òqqqQP/“‹ŠŠ‰|œLTDD Üâb"!à^ç ù8hxhXÉÃBÂÂ@¾Î ýòppÿ󆇅…ÿÿœ<4,/ÿüáâ!¢?ÿçþÿ8˜¨˜¯÷éÅÆEÅÿ¾Î.22/ýòq±±‘Ÿï“ŒŒÿ|œdldgûäãccc¿ß'þù8øøèï÷ÉÇÈGG¾N>>:;ýòqÑÑÑÐ/“ŽŽŽŽ|œtttwûäã㣣¿ß'þõ8ùèï÷©ÈHGGÀ½NBB>>êrñð/Szœ„„|| Ôä$#£ ^§õ8øøèè©ÇÇÇG@½N>6:6æq±Ñ‘/SŽŒŒzœldd\ Ôââ⢠^§ù8¨˜˜˜ÉÅDDÄ@¾N"""òqððð/“†…‡†|œ4,,$ äá! àà_§ý˜(&PP‚ß Y€‡‚ß ßóÊ ð0[ák00ãð0[áoûþ`áYÁ€‡‚ß Z€‡‚ß ÿó Ð 8ü øZÒ 8ü ø[ÿÿ˜hv`!Çà`·ÂÖ`!Çà`·Âß÷ìÄDµ?¾µƒ?¾ÿ¿f&)¬qø-ðµ°qø-ð·ýû1qM ÀCÀÁo…­ ÀCÀÁo…¿ï¹‹‹m~ |-m~ |-ÿ}Ì\Sh0ãð0[ákh0ãð0[áoûîbâÛA€‡‚ß [€‡‚ß ßsÚ 8ü øZÚ 8ü ø[þù˜ØÖÐ`!Çà`·ÂÖÐ`!Çà`·Âß÷ÌÆÆ¶ƒ?¾·?¾ÿ¾f65¸qø-ðµ¸qø-ð·ý÷1Ñ­àÀCÀÁo…­ÀÀCÀÁo…¿ï™n~ |-n~ |-|Ìlsp0ãð0[ákp0ãð0[ál æcc›Á€‡‚ß [Á€‡‚ß ß3Ü 8ü øZÜ 8ü ø[þù˜ØÖà`!Çà`·ÂÖà`!Çà`·Âß÷¼ÆF7?¾·?¾ÿ½æ6=¸qø-ðµ¼qø-ð¶ï1ñÎÀCÀÁo…­àÀCÀÁo…°/yŽo~ |-n~ |-{Ìlsx0ãð0[ákx0ãð0[ál Þcc€‡‚ß [€‡‚ß `^óÜ 8ü øZÜ 8ü ø[õ˜ØÖà`!Çà`·ÂÖÐ`!Çà`·ÂؼÆF¶ƒ?¾¶ƒ?¾À½æ65´qø-ðµ¸qø-ð¶ï1±mÀÀCÀÁo…­ ÀCÀÁo…°/y‹‹m~ |-m~ |-{Ì\Sh0ãð0[ák`0ãð0[ál Þbâ›A€‡‚ß ZÁ€‡‚ß `^óÖ 8ü øZÖ 8ü ø[÷˜˜– `!Çà`·ÂÖ°`!Çà`·ÂؼÄD5?¾´ƒ?¾À¾f¤qø-ðµ¤qø-ð¶ó0ÐÍ ÀCÀÁo…­ÀCÀÁo…°/™…†h~ |-i~ |-|Ì4+H0ãð0[ák80ãð0[ál æaaÁ€‡‚ß Y@?¾À¾f ”ð0[ák((à`·ÂØìÁÁ3€~ |-eü Ál ôÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿü4ö ‘"…äh =¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿt¿ûÄéÿÿþí]-Ò½:WIêþõt/ÿÿÞ¯-ééѼ÷WÝ]›¤ôû«´óv/ÿÿþéoÝnÁ§]Ñ÷_ÿÿ÷W§]ÓÝ'Þ®ŽêõÝ·IÒÿÿýÒw}ÕÛtOº¹·iÕêéïn“´äŸ}ÿÿÿÞŸv[št[»­ëy^ž®“šÿÿÿÿÿÿÿÿÿýÒÿÿÿÿÿ÷níÿÿÿÿî®—ÿÿÿÿÿ»»ÿÿÿÿû×ÿÿÿt/ÿÿýëÿÿÿÿÿÝ«Öõÿ÷Kt·Jôôé:NÓ´é^'Kzv'Jé>èÞNÉÕÑ]'¯ÿþòÜrýëwº÷3vîÿþõ÷]ÊìNÅýßî„æÞ_ûß½;¾÷û×t··Žé=ºoW§nïÿÝ'jí;]äí:NÕÄ+ÕÑ] Ð¥ztW•åÜOÿÿÿÿÿ½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðœ $)"…èh =¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ+×ÿÿÿ{÷w}ÒûÓ§t®Ÿÿÿÿ½]÷]éïºÝÿÿÿýêõÝ/÷KÿÿýÞí]êõÞ·Jîêçwÿÿÿû×zt¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿþõwþõt½ëu÷KûËÿÿýÒÞ»®ëÿÿÿ÷_Ý=ÖëºÝÿï[Ó±===n•éîõt®î•ët®—Ý/ýéûÖôõz½{Öòï[×ÿÿÿÿÿÿuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà/ GK"…ìh =?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwÿîÛ·ÿÿÿû»îÓ×ýéÿÿÿýÛww~õw»nÛ¶í]÷îîÿÿÿï¾ûï½¾ûÞûïwkÝÿÿÿßzzzxSÛïWi÷§Šïwwzv·ÿÿîÍïzvßû»ÕÿÿÿÿÞ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷iåÿÿÿÿÿÝŸÿÿÿzÿÿwv“µzv®ÓÓ´îôôôí;ï_þõÿï¿vîÏßÝžïÿþ÷ÿß~ïwwîîÿÝ/_ûÐüõÚ~õwÝî×»Nÿÿÿ÷Iêäž]äôõ¼·IéËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüR <l"…ðh =?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþã»_þõÿÿÿþíÿÿ½ÿÿýÝêí;W=ééÞî÷½]·{¶ìÿÿþï¼ßîÍ÷ß~íÞ ÿÿû»µ»nÝÝÙw;ï»ûÓ·x?ÿÿÝî￾öôîûÛ§www»Ý·W¿ÿÿÿr}Éû“ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»_ÿÿÿÿþí=ÿÿÿÿÿÿÿÿÿÿÿÿÿýßÿÿÿÿÿÝÿ÷¯ÿïÿ÷kv½ß÷¯Ýîû¿÷oÿÝîþï»îûÞïvÿÿÿ»û½ßwÝû½ßw»ÿÿÝýßv½ßwîþíÝ¿½ÿÿÿ{ÿÿî¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàG ˜Ž"…ôh <¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿY·»_û»¿ÿÿÿÞœwwÿ÷·ýßÿÿîîîï¾é\îÓ»»»»»½Û»»nîÕßÿÿ}Ý÷Þß}÷ÞŸ{v7ß¾ûïÿÿý÷ßw}ÒuzzxÝÞݾý÷Þœ›Æûïÿÿï¾ûûm½íÛ¹§ß{{{~ínïÿÿþãßÿîEû“ÿÿÿÿÿÿÿÿÿþãÿÿÿÿÿÿÿÿÿÿÿ»»N?ÿÿÿÿýÆßwÿÿÿÿÿ¿ÿÿÿ¹Üÿÿÿû¿ÿûïÿÿï_÷ÿÝ^ë;îî}ÝÝÚ»N{ÕÞôí;»[Äí;¹]÷oÿ¾ì®Ó»«½ÝÝ÷ïoWcîÍí÷ñìÏ;¿wÞ_ýÝûï¾ïz}ñùëïÝÝÜîï'ß~îû»÷}âwÿßu¾îûÝ÷f³¼{ž½½¹_}Ó½=¾ý÷û·Ýÿÿ~㻾ÿ÷'ýÉxÝ¿ÿÿÿÿýÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ𣠎¯"…øh =?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwÿîÛ·ÿÿÿÿÞï÷½>îìÞ¿ÿÿ»»»»ÝÜû»»·s»nï»{»»ßÿÿ÷ÝÝ÷»ÄûûÛï½¼ïß}ÏÿÿîïN›û»¶è;ÝÝíåw}÷»µ{zÿÿû¾÷swiäûÛ«¦í½½îïo{¿ÿÿ÷¿wßÿrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿs»ÿÿÿÿÿÿÿÿÿsÿÿÿî;¿ÿû»¿ÿÿÿ»»ÿýÝíîîîïs»»»»»nÛ¶ïw¹Þ';»…§;»›w¾îîïs¹ÿÝß¹ïîï¾ýØÞW;»’»»7W﻾ý÷{ÉÚ}ÿ÷ß»¾û½Ù>û÷wﺻÞÞO¿}Öï}ûï7ÿ￸ï½ßwzw}÷·îï½»ÞŸßÿÝÜ{ÿû“ÜŸÿîßÿÿÿÿþí¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ™ CÐ"…üh =?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{wÿÿÿÿÿîïû½Ûÿÿÿ»»nîÛÛÉíۻݧmíÝÛÝ·§ÿÿ÷û»ïWjîûÿ~îïÿÿÿ¼oNý½½¾öóy]î÷iÞíÞÿÿ÷wmÕûîÓµz»W{¶îéÝßs½ÿÿÿ¿½¿ÜvÜŸ½ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿÿÿÿÿ÷ÿÿÿÿÿwwÝݽÝÝÛvÿwÿÿÿß}÷}÷—wÿÝ÷ÿ÷÷wßï¿ÝûÛßÿÿýÚvïnïNûÛßw»ÿÿ»_þ÷½ÿû·þ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüN {ò"†h =?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþã»ÿ÷wÿÿÿ½»¾íîß½ö÷Ù»ÿÿ»ï÷{·w{u»ÝÛmï¹·‰ïÿÿîïÝ÷w»¾îìœë+žÛï¾ÿÿÿß}íéÏÝîûï»Ýïo'·¶©ÿÿÿßwy[ßyÝ·;»ÛÛÛÏswÜ®ßÿÿûýïýî÷»ÿÿÿÿÿÿÿÿÿÿsÿÿÿÿÿûpÿÿÿÿÿý­ÿÿÿÿÿÿ»ÿÿÿÿÿÿÿÿÿwÿÿÿÝ¿ÿû¿ÿÿþíÝÝÿÿÝ÷úÛÝÿö}k{Û·Ýÿû»½½÷|{g½§w»¶ïýäò»ÿ÷{¾»½øüõÝÝÚ»¾û÷wwÞóì6ÿÿõ·ÝÝíï»cóÕ•÷o{}ï}Ýîí»îÛ¿ÿ÷mîí½»ݾíÝ=Û÷Ðÿÿÿÿÿû¶ã/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü† "†h =¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwwÿÝÝ¿ÿÿþð¿vþñûßÝ¿ÿÿ¹ÖÞænîï»{¶í»»»»îÛ¶îï­½ßÿÿÜû»¦í»o'“¶òsò}í÷wwßÿÿ÷wÞÞï»nW‰ç}îï}÷»Û ÷¿ÿÿîÎöów¼Ý7•í´žíû·w¶ïÿÿÝ·÷o½¿½û·¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîßÿÿÿÿÿvÞ_ÿÿÿÿÿwÿÿÿÿÿÝ¿ÿÿþîïÿÿÿ­¿ÿý÷ÿÿÿýÏÿûîÏs»»î÷w·w?ZÞíÝÝ·mÛ»Ýý†ßvØßþûý÷îï¾Þû°ïîû»÷•Ý…{Žÿÿûî÷ww÷ßwÝ_ÝÝÝîïîïû½ëÿ½;ÞÞÝݾí»{˜÷ÖWÝ·aëo½½ÿk{¿ÿݾã½û·vÞûþíîÞ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü˜ $4"†h =?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwwÿÞ?ÿÿÿÞ;ïÿ½Ýµ·»ÿÿû½ÞýÝÚwzw½ºûÞïÿÿýÝÿwï7o½ÿÿÿï½Þ¹«»±»O v®îö·íï¼nÿÿÿvž¿Ý·¾ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷oÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿïãÿÿ»î{¾ïýÞïÿÿÿ÷ƒ<wÿûÇÿÿÿw÷vþïþïÿÿþï÷{»·û¿Þ~ñíoïÿî×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/ ÎV"† h <¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿsnoÿs¹¿ÿÿÿïO=Û¼y½Ý7mÛxÿÿÿîw;÷ß»¾çws¼nÓ»»ïnÉ͹·w6çÿÿû«ï¾û{ßw}÷ßv§§W·Ý^ÞÞŸÿÿï¾ûï¾êû¦éºo'WßtO¾ûï¾ûÿÿÿ}÷ß}Û}÷wi÷ß}÷›ï¾ûî›ÿÿÿß~ò}ϾçÞwK}÷ÝÿÿÿÿÿÿÿÿÿpÿÿÿÿÿÿsnÿÿÿÿÿÞŸq¿ÿÿÿÿý÷ßÿÿÿÿÿßÿÿÿs¹ÿÿÿîíÿÿ¾ÿÿÿþíÝ·ÿ¾Æ÷mÝÎîç¹·;Žçp÷w6í»»¹Ý·6îîçvÖlíÌßvß{vÝ»»·þûÎìßuw¾ûïÝÞ+»ûÛ»î·w{Êí¼®Û»Žïþêï}Õ÷ï¾êý÷ï¾çwtÝ_w¾Þû½Ýû¢y¿ÿ}m÷wwÛw¾ûîî÷ÛÏß}÷›µw~öýÛwxwgºnËþîã¾ç}÷ß}÷ÜïßݽÛß»/ÿÿÿÿýÆßsÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÙ 5ëw†h ¦ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿóÿÿ˜€€€‡ÿüÄ?ÿæ !ÿÿ1ÿùˆÿÌ@@@Cÿþbÿô_ä~K<,_ä~K<,zzÿÿ£0#ð2Yác0#ð2YácÛßÿýA€ù’Ï €ù’Ï `_¨Ä Èü –xXÆ Èü –xXüÿýF0`>Gàd³ÂÆ0`>Gàd³ÂÇ÷øÚ1ƒò?%ž2ƒò?%ž?ÀÀ¾Ñ”‘ø,𱔑ø,ð² öŒÀÀ|ÀÉg…ŒÀÀ|ÀÉg…PP/”fä~K<,fä~K<,ƒƒ|£00#ð2Yác80#ð2Yád$$ åÁ€ù’Ï A€ù’Ï !a _(Ð Èü –xXÐ Èü –xY ùF€`>Gàd³ÂÆ€`>Gàd³ÂÈhhÊ4ò?%ž4ò?%žCC@¾Q ‘ø,ð±¨ø,ð²"ò@À|ÀÉg…@À|ÀÉg…‘/”jà~K<,jà~K<,ˆˆ|£X0ð2YácX0ð2YádLL åÁ€ø’Ï Á€ø’Ï "b`^èÖ Àü –xXÖ Àü –xY÷F°`>àd³Âư`>àd³ÂȘ˜º5ƒð?%ž6ð?%žDÅ@½Ñ¬ø,ð±¬ø,ð²*&î`À|ÀÉg…`À|ÀÉg…‘10/tkà~K<,kà~K<,‰‰{£X0ð2YácX0ð2YádLL ÝÁ€ø’Ï Á€ø’Ï "b`^èÔ Àü –xXÔ Àü –xY÷F`>àd³ÂÆ`>àd³ÂȈˆº4ƒð?%ž5ð?%žDD@½Ñ¤ø,ð± ‘ø,ð²îÀ|ÀÉg…À|ÀÉg…ÐÐ/”hä~K<,hä~K<,††{£@0#ð2Yác@0#ð2Yád44 å€ù’Ï Á€ù’Ï !a _(Î Èü –xXÎ Èü –xY ùF``>Gàd³ÂÆ``>Gàd³ÂÈ((Ê3ò?%ž3ò?%žAA@¾Q”‘ø,𱔑ø,ð² òŒ À|ÀÉg…Œ À|ÀÉg…00/”dä~K<,cä~K<,|£0#ð2Yác0#ð2Yácûô åÁ€ù’Ï €ù’Ï Ÿ _( Èü –xX Èü –xXö÷ùEð`>Gàd³ÂÅð`>Gàd³Âǧ¨ɽ==½ÿÿÍñññ÷ÿþo¯ÏÏð/Óÿ~Ÿÿü ìÿà`` _gù88HHHÉÂBBB@¾Nòp°ÐÐÐ/“†‡‡ˆ|œ<>êq±±ñð/Szœd\|| Ôââ㣠^§õ8ȸèØ©ÅÅÆÆÀ½N.&6.êq11qpOS‰‰‹ŠzœDDLL äáá¢b`_' ù8hhhhÉÂÂCþNýòppPП„‚ÿ|œüûäßßà`ß&úúþÿþù7÷øÿùÿÿÀÀÿÿÎ ýúpPPßïÓƒ„……ÿ}œ$447ûìá¡¡¡ÿßg þù8ˆˆ˜Ÿ÷ÉÄÄÅÅÿ¾N&&./ýòqQqqï“‹‹‹Œÿ|œ\\loûäâãcc¿ß'þù8èèèï÷ÉÇÇÇGÿ¾N>>>CýêqñòïS‘zœ|„„„ Ôããä$ ^§!!þõ8øù ÷©ÇÇÈH½N>>BBêqÑÒ/SŽzœtltt Ôãcd#¿Þçõ8¸¸ØÏ÷©ÅÅEÅÿ½N&&./ýîq11Q_ˆ‰‰ÿ|œ44DGûäáá¢"?ß'  þù8hHh_÷ÉÂACB¾N ýòp00P?ï“ÿÿÿ|œ ÿÿÿüà ``¿ÿç  þý8XhH_÷éÃÃCC¿NýúpÐðñïÓˆˆ‰Šÿ|œLLT_ûäââââÿß'þù8¸¸ÈÏ÷ÉÆFÆFÿ¾N66:;ýòq±ñÑß‘ÿ|Üd"‡¹¡òð=¾IØ?ñèÿ÷ÉÈHHHÿ½NBBBCýêr220/S‘‘‘zœ„„Œ„ Ôä$$$Þç!!#!þõ9 ÷©ÈHHH½NBBBBêXèézï0¸ûåTxÀ»ÇGþ9õ$||Kãßß'÷8ØÈèß÷©ÅÅÆÆ½N.../ýòqqqqïs‰‰ŠŠÿ|œLLLOûäâb"bß' þù8hhxo÷ÉÃBCBÿ¾NýòpPPp?ïÓÿ~œ ÿüà   ÿÿç þÿ8XhXo÷éÃCCCÿ¿N"#ýúq11?ïÓŠŠŠŠÿ|œ\\\_ûäâââã?ß'þù8ØØØß÷ÉÆÇFDÿ¾N6>>?ýòqñññ¿ï“ŽŒÿ|«4⌂A±O÷Í,@ñ ® Ìaï÷É$$cH½ÎBBBCýêY ø£ßïS’Ž’{œ”„Œ„ Ô’2'£¿Þç!#!#þõ9(ÿ÷©$dbÏGÿ½ÎBBJFêòþ7ÿèvë“-š$.4V^kýóQ¾|Yï÷Écããâ@½Éz;ýîqёѿïYŒŒ„={ýòqqqqŸï“‹‹ŒŒÿ|œLLTWûäâbbbß'þù8ˆhˆ÷ÉÃBÃþNýòpPPpïÓ‚‚ÿ~œÿüàá á?ÿç ÿÿ8hhhoÿùÃÄCÄ¿Î"&"'ýúq111?ïÓ‹ŒŒŠÿ}œ\\\gûìãcccß'þù9èøï÷ÞÔ\¨úEJ€Zšÿ¬/áéù¸ß÷íÇ.—Œq˜”#;ýû¨+c£^F?5óïÕe€M”qO÷ì«T'pa" h?߹們X4£à9aÿ÷êÇa鑸H¿¿xOMyï‡ÇÀÐÿ :õG¤QÁ xÿ¼ƒ±wɳ‰à^9°!CÎÿcÅL.ƒ@óþÿ,Œ|‹`ùQø¾ÝáñôX 1½Ž ?ýÏ †P ÐƒAú4nûO¿TzDÁYqÿõqCÿß;©t>_ œì]óư¸»‹ ž¯å@yÈ…åÐñ€!¹0¼~}ý÷ÙQ*? dàJ5þóΕ—CДàïÍ?«7þýxØxn: ÆÿÞ¹ñqs‘GàL\h¸~kýòHˆÈZn3ýòq±±±¿ï“‹‹‹‹ÿ|œTLTOûäâbbbß'  þù8hxh÷ÉÃBÃBÿ¾NýöpPPP_ïÓ„„„„ÿÿœ,4,7ÿüá¡¡¡¿ÿçÿÿ8ˆ˜˜Ÿ÷ùÄÄÅDÿ¿N&*&+ýúqq‘qŸï³ÿ}œllloûäããããÿß'þûT hÁ ÿ~«€ü܃€ü܇û÷Œq”j.1¿r%`ÐÁCd*Á¡‚… ÿߪÐ$h ‰ÿ¿XÔ~¯÷KÞ¨ ÄûöU@øL«úèôa!ÿïÜ ¾…ü:/M;Í¿¿wÁð4?ÃN}Cü4@½Õ‰0h$?ßï$Ô%’jÀ¼Ü]luÀh?ß÷€$C‘Ž.C÷ÆÿqÌÅàÐ>—ƒCMÀ¿aøÕ(É'‘ñ¸î.m€IpÛ“ xÿ|¼ƒÿ©Ù8Ÿÿ{äåÆŠKÍ+šÿ´ ãÅÓrP/·Œ9 F‰F¿ÞxïÍ>+6=óOŠÍÀ¿^BÆä!B>Aýòqñò?ï½,qc BCÅL¿UÄ~nE”KtŸûÿކÍD£Q6X>ißÿüŒ¼Ô:³dãóPÿ7þÿ¦±(Ø£°øØÌ5ûU@h#Ñ—H¾îI@ˆ¹ž A—ûîÅD³c¿4þ^oýû¾¡þsùq² ÿ~Ò42&¢\×EXuýúòM‚Q¹%Á(2ÿzØÂà4Æ„šuýÿÇ8¸| c‹GÀÐÁ½òÑø40Q´ÙpüÔkÿßï&ú\nQü¸ßûß ’Á x ’ x~¼”WÉÆCoï\¨¸ÑXüÑ`øÑYy¯÷ÚÆSrQ?7ý‰ ¤ćÀ¾ñßš|/65M6üwýúòPªÇ;—xì ÷%Th´~hx27éÈÚÂSqñTÜoûôããããÿß'þù8ȸȿ÷ÉÅÅEžN&"&#ýòqñÿ…†…ÿ|œ,$$'ûôàà à¿ß§ ýÿ8hhhgïùÃÄCÄ?Î"&"%ûþq1Q1OïóŠ‹‹‹ÿ~œ\d\cûôãcccŸß§þý8øøø÷÷ÉÇÈGÈ?¾N>FBAý÷#ïãÇ}uѪƒàhÿ߬b­P¯ƒA ??1þýÒÕ@ 3‡†µÆŠÁ |ÿÿª–¬ä‹òµgäÿß±î<°»úé6‚âóÐ/œ…\>±A (ñyñ£/1P4£PàÉóe`Ð>@¿Xè~ÇSo ÕŸ•ÿ}Ät6z> å_•+=þýÆ)Ô…`ЪìuK¿ßz¤€Wk‹>®;ýîÄjî9ø¾ëÙKÇçäßßül6Z>5ãÑ÷νò±ø40QÔÙÐÿç#Ÿþÿy7áñ¹8UFÿß8èd– Á_¿,‰aŸûìr0ܤ§ûß>¾pnuT¬ñ— ||èôTê 0ò—ÿðô ÷‚WãÍcïžx/§ä!Èî5.¸³ê®@öM»ýû¤ƒA gâãê\MUºû‹Ó‹âXf ¬¸[Oÿ¿N>:BCýúqñññÿŽÿ|œddd_ûäââââÿß'þù8˜ˆ˜÷ÉÃÃCCÿ¾NýúpPpP_ïÓ††††ÿœ4<_%$þûFÊ%¾üü”Ÿûôä¥%%?ß'#%))þùGȬóX(_''þûFàP¾üü¤§ûôä¥%%?ßg+-+-þûH©óÎÐ~ùio÷Ú9àêºùY_÷ÉÊJËK¾Ç+åg¥¥¿Þâƒú³òrÒßï³”’••ÿ{£à4‘—ç奿ß'')))þùœ4²’Ÿï”x7¾P ”’ÿ}œ|Œœ—ûärñ[䤿ßhìo¾JKýö(ãòR/ï“|œ||„‡ûä㣣ãÿß'þù8ȸȿ÷ÉÅÄÅÄÿ¾N&&#ýòpðñÿ†††ÿ}œ,ûìá¡¡¡Ÿ¿çýÿ8˜˜˜§ïùÄÅÅE¿Î...5ùþqq±±ŸïÓŽŽÿ~œlt|ûôããããÿßg!!!!þù9 )/÷ÉÈÈII?¾NBJJIýòrRRROï“’”’”ÿ|œ¤¤¤§ûäå%%%?ß'%%))þù99IIO÷ÉÊÊKK¾NVZZ[ýòr²ÒÒßï“–—–—ÿ|œ¼´¼¿ûä奥åÿß'--//þù9YYio÷ÉËKKK¾NRRZ[ýòr²²’Ÿï“”’””ÿ|œœ”¤—ûä䤤¤¿ß'%%%%þù9))/÷ÉÈHHH¾NBBBCýòqñññÿŽÿ|œd\d_ûäââbâß'þù8ˆxˆ÷ÉÃCCBÿ¾ÎýúpÐÐðïß󈈈‰~ÿœLTTK÷üâ¢â¢ß¿çüÿ8ØØØ×÷éÆÇFÇ?¿N>>>?ýúqñòï³|œ”””“ûä䤤¤Ÿß'%%%$þù9)))7÷ÉÉJJJ¾NRRRSýòr’’’Ÿï“””””ÿ|œ¤¤¤§ûä奥¥¿ß'--//þù9iiy÷Ée¥¥£#¿ß$–—†®–~}œ¼¼¼¿ûìåå¥å¿ß'----þù9iiio÷ÉËËJ˾NRRVSýòr’’’Ÿï“”’”“ÿ|œ””œŸûä䤤¤¿ß'%%%#þù9 ÷ÉÈHHH¾N>>>?ýòqѱñ¿ï“Œ‹Œ‹ÿ|œ\L\Wûäâb"¢ß'þù8hXh_÷ÙÂBBB¿Nûþq111/ß󊉊‹~ÿœT\\[÷üã#bã_Ÿçüý8ØèØç÷éÇÇÇÇ¿?NBBBAùörϳ’’’’~}œ”””“óä䤤¤ŸŸ'%)%$þù9II)O÷ÉÊJJJ¾NRRRSýòr’’’Ÿï“””••ÿ|œ´´¬·ûäååååÿß'//-/þùyxèùH ~~Š&†rÒrÏp9—–=Ïó——“–ÿ|œ´´´·ûä奥¥¿ß'))--þù9YIYO÷ÉÊJJJ¾NRJROýòrRrr_ï“’’’’ÿ|œ”Œ”—ûää$$dß'!!!!þù8øøøÿ÷ÉÇÆÇFÿ¾N2.23ýòqq1‘?‰‰‰ÿ|œLÎJJJIùörRRROÏ“’’’’|œ”””“ûää¥$¥?ß'))))þù9IIY_÷ÉÊJJÊÿ¾NZZZ[ýòrÒÒÒßï“————ÿ|œ¼¼´¿ûç…sYˆ×9|ÓÜ ä#|éX` |„ÿôä0·þ<ó9)yi÷ÉËKKK?¾NZZZ[ýòrÒÒ²¿ï“•”””ÿ|œ¤¤¤§ûäå$¥$¿ß'%%%%þù9)))/÷ÉÉIII¾NBBBCýòrï“ÿ|œtltoûäãbãbÿß'þù8˜˜¨Ÿ÷ÉÄÄDľNýöp°¿ï³‡‰‡‰~ÿœLLLK÷üâ¢â¢ß¿çýÿ8ÈØ¸××ùÆÆÆÆ¾¿N6:69õúqñññïÏÓ~~œ„„„ƒóô䤤¤ŸŸ§%%%$þù9)))/÷ÉÉJIJ¾NRRRQýòr’²’¯ï“””””ÿ|œ´´´·ûä奥¥¿ß'----þù9yyy÷ÙÌKKË¿x@ }· v Þàó'$÷ÿ÷;Âwoo  C×¼BÎZ^Z]ñòròòòïï“––––ÿ|œ´´´·ûäå%%%?ß'))))þù9I)I/÷ÉÉIII¾NJJJKýòrRRR_ï“ÿ|œ„„„‡ûäããããÿß'þù8ØÈÈÏ÷ÉÆEÆE¿¾N.&.%ýòq111/‡ˆ‡}œ4443ûìâ"""¿çýÿ8¨¸¨·ïùÅÆÅÆ¿Î6665ùþq±Ñ±¯ïÓŽŽŽ~~œ|||{óôä$$$Ÿ§!!# üý9)))'çéÉIII?¾NJJJKýòrR’RŸï“””””|œ¤¤¤£ûäå%%%ß'----þù9iiio÷ÉËKKK¾N^^^_ýöròòòïïÔ††¡œÄ³ëí"£àÀ&Z]ò(ãòÒòïo³—–—–||œ´´´·ûä奥¥Ÿß'+)))þù9IIIO÷ÉÊIJI¾NJJJKýòrRRR_ï“’’’’ÿ|œ”””—ûä䤤¤¿ß'!!!!þù8øøøÿ÷ÉÇFÇFÿ¾N6.6/ýòqqqqoï“‹Š‹Š|œLLLKûäâ!â!ßßg þû8ˆˆˆ‡ßùÄÄÄľ¿Î*.*-÷þqq±q¯¿óŒŽ}¼cüñø¦bç¿?wh!"cA¡‚„Vmúqñññïϳ~}œ”””“óô䤤¤ŸŸ§%%%$üù9999'çÉÉÊIJ?¾NRRRSýòr’’’Ÿï“””””ÿ|œ¤¤¤§ûä奥¥¿ßg----þý9yyy÷éÌLKË¿¿N^^^_ýöròòòÿï“————|œ¼´¼·ûä奥¥Ÿß'----þù9IIIO÷ÉÊJJJ¾NRNRSýörrR’_ï“’“’ÿ|ñ1Ñ'–Çǘ‡ç¿ÿç%!! þý9 ÷™ÈHHH¾Î>>>?ýúqѱѿŒŒ‹ÿ}œ\\\_ûäââbâ_ß§þû8xxx÷ÙÃCCC¾Î""÷þq1Q1O¯óЋЋ}œ\l\kïüãcc£ïü¨Üoÿ¿?ó€h€ ¾là 'õfßa§üý9 çÙÈÉHÈ?>ÎJFFMùúr2RRÏ“’“’~|œ”¤œ›ûäå%$¥?ß'))))þù99IY_÷ÙÊJJJÿ¾ÎVV^WýúrÒÒ’ŸïÓ—–•–ÿ~œ¼Ä´·ûôåå奟ßg///.þù9‰yyg÷ÉËKIÊÿ¾ÎZVNWýòrÒ²²ßï“•••“ÿ|œœœ”—ûääåd$?ßg)''%þù9)9)÷ÚAÏžƒ¿?þÿ9÷÷»ÇÄf÷Ž?¾É#Çÿ¿N>:>3ýúq±±±¿ï“ŠŒ‹ÿ}œdd\GûìââbaŸß§þý8xhh_÷ÙÃCBB¾Î"!÷þq1Q1/¿óЋЋ}ÿœ\d\[ïüãc##_ïÿãqÐ~6üÿÍ¢~VlÞCÛøuúÁu‡jø` ~í`ÐA¹Ðh ¤úϹú HèöÒð ‘~‚¼Œ$ £› žüÿÝ€óãqMB+6û 9)))'çÍǾÀ ŠrÙusóöžhH¡—š{ô%äâàe$è©ïïçt‚2¸àÃá×èCø‰Žz‡ØÀ {í£Ç:üHi¹þ2q­jËŽ½šƒïð2vPècñÀþùÚA „„ÿ5*´Ïû\ÿ$¬¼ƒæÿ÷/扇Ÿß{ø>c þÉŸ}îøç h ãO°—SïïÕ°ôºøü¤ß ï)(ò¨Ûûçm€ÐAýÇ0ÓJ¸uþÂG=¯>þýÛ¤s 4‘@º\ÿú„¾=$ ^E½úòQQÒ0±ÿï}Â@ëÿJ.zÈ4_ð“‘’Ž{;Z ÈáAÇA™­ ÐÂ?·P w‚ Ãá›Ø4¯ÐWƒj÷Ĺª ßàzÈ4®Ÿq»nróþqqq‘ï—‰oô?ð_ïöZ‚áëVrýþq0ñ1ïÓ†…††ÿ|œ$$47ûäâ"""çûÿ8¨¸¨·ßùÅÅÆF¾ÿÎ2269õþñÐÐÜt3ŸŸ¹¢ h`™‹Þuàh`žËÍ¿DN:B>Aûþò ÂS㜇Æß M"ÍFŸ+† .›~…qxø5Fäa3ÿþ8·@ÊÅýú'¿¾&&%ÿþq1Q?†ˆ‡ÿ|œ4447ûäâ"!â_çûÿ8¨¸¨·ßùÆFÆF¾ÿÎ6:69õþñÐþ7 ¿?s¯Cö^lïÀÐÁ=›~‡œ„„t{óí䇯ã܇Æß¿Îz¬(ºlõX40QtÛô+‹ÈÂøÜ”/¿??›ƒDþ¬ÙĆ ü¼ÛìLä¤ä¤ßžï&ô>7&ê\mùÿ +† 9çªÁ¡‚Ž{ìEå#|nN.ÿ羆 ð~l÷ÀÐÁ<Í¿CÎRRRQù켫h4Ò Ð?Á¼ª(üÔ’@üÔƒôC§+-+(þñä\†\ ƒ‘K¡‚‚«°–naØ~nQþ r‘SÇâ=§OHçø;=ƒAúqÝXg$ÿÿwöåTì«ØøGs÷ùÏ> _ÍžÐh`£>múהކå#!·÷Ά¨'ù´EFžæßá§')''þõy8eFä¡ÿ}ç€Ñ«6vb Y·øYÈGÈG¿¼õÀh–A z[€\¯ø™ÈHGÈ¿¾ Q³ê  £gt/øwÖ3…ù¸×ïùÇÇGÇÿ¾Þ1D|Æ»*¸øý-Ã(” ;sçáßøk<†O›ƒN‡ÿ~œdLTWûüâ¢bb_ß'þù8hhho÷ÉÄDDD?Î&&"%ûþqQqQoßóŒŒ~ÿœl|lsóýã¢]ûç??sÏCî^lÓÆ™ËÃ'è‰ÇHFH?ÞA¼|n=ˆ|çè#ž|(¯›7¦žU†OÐÎŽF*~}ç~ Ð7ܸ>´•p_¢ó%$õU> |åÑóžÏ8O~ÿçjÁ¡‚yãa“Ú¸uöòQ~7$ø©Ïð\÷ÀÐÁ;ÍšxÓ@ýϰ󔔓~~7&Ô 4qåÁóŸàžt!ù¨ç«ë¡>çØwNVVRQýóǹ¸(8áQ§øcNcórË£÷G=þ ÝØ|lõX40Pª©äyýsü6£¾nQÅXEž~ܳq¸cβžÿç_† +æÐ%×=+‡àï+ É=ªwüDTiÐ~lïØy„½ßðÓ”’’ÿ|¼—ùq¹Òç¾óƒEæÍ4ãA{¿â%“†Žÿ~êàÐ+ƒ@ô’\q$¼ïüT’’ÿ|<œƒDäE_9ÿý=+7´­ÐOÿœt|lûìä"c£¿ß:pùé¿ ›‡ÔêJºsþ®ÀøÏÿùÅÄÅÄÿ¾N&&&'ýòqñÿ†††ÿ|œDDDC÷üâbb¢Ÿ¿çýÿ8ÈØÈ×ïùÆÆÆÇ?Çý>z:9ùþŒàÐ}¹Õgã㟡"‰|„|s÷üqN0¼ô|ƒ÷ý û{¿?! ý8é çºFéæø Ü”“óýÁ üu %"ýH ?#&üûGPh?!@&NMú8÷ùóÒ’oÏ”u7½OÈI¿?ÅùI)7çšEÇ»ƒAù+*üûGPh>á/ÏÊJ??ÎRRRYýîSçžûå$ßߨô ìkå%Ÿ£•„Šë¤äŸßhè ãÀËÊ¿ÿÅ_#-'þûG¸ äE§å¥?ÿボ¬§ûí ü}ƒöNWþ qòRRoïñȃAû'%þùG >ø'äd¿ÿ㎈‘‘ÿ}£Ø4¯€Ð~ÈGÿ¾E~FF?ýö9IóÒÿï‘>Aûþÿ8øøøÿ÷Écãc£þõÜ h/{\ã Þÿ8ȸȿ÷ÙÅÄÅÄÿ¾N&&&'ýòqñÿ†††ÿ|œDDDC÷üâbbb_¿çýÿ8ÈØÈ×ïùÇGGG??Î6>6=ùúqñññïÏÓ~~œ„„„ƒóìä$$$Ÿ'%%%$üù9)))'÷ÉÉIII?¾NJJJMýòrR’RŸï“”“”“ÿ|œ¤¤¤§ûääå$äÿß'))')þù9IIIO÷ÉÊËJ˾NZZZ[ýòrÒ’ÒŸï“””””ÿ|œ¤¬¤¯ûäå%%%?ß'))))þù9IIIO÷©ÉIII½NJJJKýêrRRR_ïS’’’’ÿzœ”„”‡ûÔä$$$Þ§!!!!þõ9 ÷©ÇÇÈGÿ¾K ï÷Îé e…Ç•â·3üÏÿøœ>ø¸ˆ¿÷ùÅÅÅÅÿ¾N.&.'ýòq111?‡ˆ‡ÿ|œ4447ûäâ"""¿çýÿ8¨¸¨·ïùÆFÆF¿Î6665ùþq±Ñ±ÏÏÓ~~œ|||{óôä$$$Ÿg!!! üù9)'çÉÉIII?¾NJJJIýòrRRROï“’’’’ÿ|œœ””—ûä䤤¤¿ß'%%%%þù9)))/÷ÉÊJJJ¾NRRRSýòr’’’Ÿï“””””ÿ|œ¤¤¤§ûäå%%%?ß'))))þù9)))/÷ÉÊJJJ½NJJJKýêrRRR_ïS’’’’ÿzœ”„”‡ûÔä$$$?Þ§#!!!þõ9 ÷©ÈHHH½N>>>?ýîq±±±ßï“‹Žÿ~œl\l_ûÜââââÿÞ§þù8˜˜˜Ÿ÷ÉÄCÄCÿ¾NýòpððÐÏÿ󉊉‰ÿœT\T[ÿüââââßÿçþÿ8ØØØ×÷éÆÇFÇ?¿N>>>=ýúrïÓ|œ”””“ûä䤤¤Ÿß'%%%%þù9)))'÷ÉÉIII?¾NJJJIýòrRRR_ï“’’’’ÿ|œ”””—ûää¤ä¤¿ß'%%%%þù999)/÷ÉÉÉII½ÎJJJKýêrRRR_ïS’’’’ÿzœ”””—ûÔ䤤¤¿Þ§%%%%þõ9)))/÷©ÉIII½NJBJCýêrïSÿzœ„„„‡ûÔããããÿÞ§þù8ØØØß÷ÉÇFÇFÿ¾N6.6/ýîqqqqï“‹Š‹‰ÿ|œLLLOûäâ!â!ÿß' þù8xxhgïùÄDÄD¿Î*.*-ûþqqqqoß󋌋Œ~œlllkóôãccc_ß§þý8øøøÿ÷éÈHHH?¾NBFBAýòr2R2_ï“’’’’ÿ|œ”””“ûä䤤¤Ÿß'%%%$þù9)))/÷ÉÉIII¾NJJJKýòrRRR_ï“’’’’ÿ|œ”œ”—ûää䤤¿Þ§%%%%þõ9)))/÷©ÉIII½NJJJKýêrRRR_ïS’’’’ÿzœ”””—ûÔ䤤¤¿Þ§%#%!þõ9 ÷©ÈHHH½NBBBCýêqñññÿïSÿ|œtttwûäã#c"ÿß'þù8¸¸¸Ÿ÷ÉÅÄÄľN&&&#ýòqðÐß†††ÿ|œ4447ÿüáâaâ?ÿçÿÿ8¨¸˜¿ÿùÆFÆF¿Î66.7ýúq±±±¿ïÓŽŽÿ|œ|||ûäãä#ãÿß'!!!!þù9) ÷ÉÈÈÈH¾NFJBGýòrRR2Oï“’’’’ÿ|œ”””—ûä䤤¤¿ß'%%%%þ÷9)) ÷¹ÉIHH½NJJBKýêrRRR_ïS’’’’ÿzœ”””—ûÔ䤤¤¿Þ§%%%%þõ9)))/÷©ÉIII½NJJFCýêrRRïS‘‘ÿzœŒ„„ûÔä$#ãÿÞ§!õ8øøØØ©ÇGFÆÀ¾N66..òq‘‘‘ï“‹‹‹‰ÿ|œ\LLOûäâbbb _'ù8xhho÷ÉÃCBB¾NÿþpñÐßÿ󉉈‰ÿÿœL\LOÿüã#"¢ÿßçþý8ØØØß÷éÆÇFÆÿ¾N:>67ýòqññÑßï“ÿ|œ„„|ûää$#ä?ß'!#!!þù9 ÷ÉÉIHH¾NJJBCýòrRRï“’’ÿzœ„„„‡ûÔä$$$?Þ§!%!!þõ9)) ÷©ÉIHH½NJJBCýêrRRïS’’ÿzœ””„‡ûÔ䤤$?Þ§#!!!þõ9 ÷¹ÈHHGÿ½NB>>?ýêqñññÿïSŽzœllll Ôãcbâà_'ù8¸¸¸Ÿ÷ÉÅÄÄÄÿ¾N&""ýòqÐð/“ˆ‡‡†|œ44$'ûäá! àÿß' ÿÿ8xhhoÿùÃÄÃCÿÿÎ&&'ÿþq1q1?ï󋌉‹ÿ~œll\_ûôãcbã?ß'þù8èèØß÷ÉÇÇÆÆÿ¾N>>67ýòqòÑÿï“ÿ|œ„„|ûää$#ãÿß'!!þù9 øÿ÷ÉÈHGÇÿ½NBB>?ýêrñÿïSÿzœ„„|‡ûÔä$$$?Þ§!!!!þõ9 ÷©ÈHGÇÿ½NBB>?ýêrñÿïSÿzœ„„|wûÜä#ã£Þ§þõ8øèØß÷©ÆÇFF@½N662.êqqqQP/“Œ‹Š‰|œTTLL äâbbb?ß' þù8hxhhÉÃCBÂ@¾N ýòpPPP_ï“„„ƒƒÿÿœ44$/ÿüá¡¡!ÿç ÿÿ8ˆ˜x÷ùÄÅÄDÿ¿N..*+ýúqq‘qŸï“ŒŒÿ|œlldgûäãcc#?ß'þù8ØøØï÷ÉÇÇÇG¾N>>::òqññÑÐ/“ŽŽÿ|œ||twûäãã㣠_'ù8øøèè©ÇÇÇG@½N>B::êrñð/Szœ„||| Üãã㣠^çõ8èèèè©ÇÇÇG@½N>662êq±±‘/SŒŒzœlddd Ôâââ¢à_'ù8˜˜˜˜ÉÅDÄÄÀ¾N&&""òq1ðð/“ˆ†‡†|œ4,4, äáa!a _'û8((((ÜÁA3?¾³?¾ÿÿæ ˜qø-ðµ˜qø-ð·ÿÿ0pŒÀÀCÀÁo…¬àÀCÀÁo…¿ÿù…†h~ |-i~ |-ÿÿÌ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹ÿÿÿÿÿÿºn¯o ÿÿÿ½ººo{«–éÞîÛ¶ö³O{uu{utÝÿþêþêöö÷uuutïº'·Wÿÿÿ»÷÷ÞÞo+«÷•ÓÞÿÿû¦ë¼Ýw·ïoß{}í÷Ý7ÿÿÿ½½ºw·Ý=ÓsWcy¼žîmÝÌ»·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿº;ßÿÿÿÿþéºoÿÿÿÿÿ÷Wÿÿÿÿÿ½¿ÿÿÿºÿÿûÏÿÿÿÿÿÞïÿººw+•ÕÖêéºonFéÞÞïw›–Âo¼Þ;û¦öé½Ü›§þûÝÛ{{½î›ÝÓtNÕ÷·ï¿uî‰æñÿï¿yn½Õ×ußÞ÷_uºï¿ÿ¿ºº¾ìÞn¯ooW ·ãÔþé¾óu{ºnÖéºßtÿþê÷zº¿tî››¹7··=ÑÞÿsÿÿÿÿÿÿÿÿÿÿÿ½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ¦ ?"†(h >?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{ÿ÷¿ÿÿÿÿÿïÿÿÿ»ï{Þë½Þ÷¿ÿÿÿ»½þöþ÷{ÿÿÿÿ÷ƒ÷~êð¾ëÿÿû¶èÞ÷·½íîð¿÷CÿÿÿûšÿÝ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¿ÿÿö·ï÷_Ýÿÿÿ÷Ÿÿÿÿÿÿÿÿÿÿøü÷wïÿÿÿ½ÿºýï½ÿÿÿÿÿÿ÷¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ ìa"†,h =?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÓÿÿÿÿÿû¯ý×½ÿÿÿÿþëÿÿÿÿÿÿÞo/ÿÿÿþéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿuÿÿÿÿÿþåÿÿÿØÎÝ?½Ýÿÿÿÿÿû¯ÿÿ·žÿ÷NëÿÿÿÿÿuÝo?ÿÿÿÿÿÜ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà÷ O‚"†0h <¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿt¿ýÒÿÿÿþëÿÿÿÿþÆû¥ut·_r­¿ï_ÿÿúåqûîÖëÞ_uuÿÿÿºÚëî“£ÖWÖßÝÿÿÿÚÞôýÕ÷þëÿÿÿþåÛÎÿÿÿÿÿÿÿÿÿÿÿÿxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿuÿÿÿÿÿíïÿÿÿîOÿÿÿÿÿÝ[Wÿÿÿÿÿÿºî·&ëY^²oqXß÷OÝÿÿºî¯¿Ýnºûßu_{úÛö÷ÿû û««û«ïîºÊþëu_{ﮯk~ó{ÿÝ6õ³×V}÷í«î½ÕmïnºûßýÖöÝ?ÿ{û¯îŸÿÝ6úîŸÿÿÿÿþêÿÿÿÿÿÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZ q£"†4h <¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿõÿÿÿÿÝßÿݶÝÿÿÿýÚwwz}÷ÝÚw»N÷Dòz¹Ý§iÛY§»ÿÿÿ½>ó~û¡Ý·fôµ½÷m÷uw¿ÿÿ÷{»NyÎïa^ûÚÙíÝÝÕõT3}ûﻆqÑѱ¿ïŸÿþôío¿wiÞï»onëgîÓ»»ÿÿÿ÷iÚÝû¿þïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþõÿÿÿÿÿÿÿÿýŠÿÿÿÿÿ±¿ÿÿÿÿÿö3¿z±¾ôîôïÖßÿaß÷ÿÛßÝÚßx¿wÝ»µí;õ›~óÿ¶ïþîÿýÝîïÝÝígîûÓ×ÿmßÝÞ[ û¿ÝïMnwï°¯vÿ[ÿzö³¿½û¿¹÷Ÿÿÿÿÿÿ»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà| BÅ"†8h <¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿs»ÿîÿÿÿöÕÌgøg%%%%÷ûÁÿÿÿÿÝþî¶~ïþ÷ÿÿû»»»îîþîîôÿÿÿÿûþí» wßÚÏ;Ûßÿÿþíïß»îþîïÿÿû×»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿÿÿÿÿûÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿ»ÿÿo=zww÷ëoÝîþîåÿÿÝîìg·~ïݾÆ÷~ïv?ÿ÷}Ý÷õ·]÷}Ý÷{»jþîÚž»ûÉéÚÿ»ï^îÿww°®»}ánþíÝ·}÷Ÿÿÿþïÿ¹ýÂÿÿÿÿþïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀMplainbox-provider-checkbox-0.25/data/websites/SWF_Test.swf0000664000175000017500000000046712646152433025020 0ustar sylvainsylvain00000000000000CWSœxÚDQ±nÂ0}qRlPE%)K¦n,ýƒ R$¤ˆ°G.uSÔÐD‰ºu+c¶î|F?¥BÏRo8ß{òݽgïÑ›£Àw0cgŠ~‰Ci2ô)S•dY"7o2WÍÝZ5çáÀ\H1°L–å“, _Õe©±©•Ôj­öz¾UÅ34U¨êR—ú£RØÉí;dU!JS¥“º¬æ…Ì´ áhôÍp²À -uF#B{ þKëù'£dèÿ$7ú…k»¼U`ްeëA\ Ä_Ô Ø[p‚ðãµ±ëŽÁvø-mBtÃ1ãöÜxgžÃ]CöïLÜ*!MY¬£t–-¢Ç%ôë¶é^ǺµãÌîàâ‹w“³úÜUú üÿÿ˜#J€plainbox-provider-checkbox-0.25/data/websites/SWF_Test.as0000664000175000017500000000044012646152433024613 0ustar sylvainsylvain00000000000000// Run: mtasc -swf SWF_Test.swf -main -header 640:480:20 SWF_Test.as class Test { static var app : Test; function Test() { _root.createTextField("tf",0,0,0,640,480); _root.tf.text = "Test"; } static function main(mc) { app = new Test(); } } plainbox-provider-checkbox-0.25/data/websites/PNG_Color_Image_Ubuntu.png0000777000175000017500000000000012646152433036175 2../images/PNG_Color_Image_Ubuntu.pngustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/data/websites/flashvideo.html0000664000175000017500000000011712646152433025643 0ustar sylvainsylvain00000000000000

plainbox-provider-checkbox-0.25/data/websites/testindex.html0000664000175000017500000000012212646152433025522 0ustar sylvainsylvain00000000000000
plainbox-provider-checkbox-0.25/data/websites/flashtest.html0000664000175000017500000000014612646152433025516 0ustar sylvainsylvain00000000000000
plainbox-provider-checkbox-0.25/data/websites/html5_video.html0000664000175000017500000000052012646152433025734 0ustar sylvainsylvain00000000000000 HTML5 Video Test
This video will play in a loop and reload every 5 seconds
plainbox-provider-checkbox-0.25/data/settings/0000775000175000017500000000000012646152434022646 5ustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/data/settings/shutter.xml0000664000175000017500000001657112646152433025077 0ustar sylvainsylvain00000000000000 plainbox-provider-checkbox-0.25/data/images/0000775000175000017500000000000012646152434022253 5ustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/data/images/JPEG_Color_Image_Ubuntu.jpg0000664000175000017500000006225212646152433027312 0ustar sylvainsylvain00000000000000ÿØÿàJFIFddÿÛCÿÛCÿÀ‡XÿÄ ÿÄa     !91qx¶·"AQav±²³#2478rsw‘µ¸ð36BYt¡$RX—˜ÑÓ×(Cb‚’Õñ%&')GuÁÒáÿÄ  ÿÄ;!1"A#2Qa3Bbqð‘¡4DRÁs±ÑÿÚ ?¿Å €P @( Kø‹ç›ãKšÕÞ£1¢pŠd'§Ì¡“,Â\l”5ÉhÚïåâBb5(™ô…¶K­H«&'( @åßz,¬½Òkã7—~²¦®ãXþEHØsc¼xR•P0 K*ÆÜ^Cr‰Ì%?…‚€;`>G mfêãPÜN´ l穼û–’y¬Ý:¨«,ƒ—/»¦(¢¶T¶TˆCKN¨Í¢F'a“EÈ c—Ûàl¾_ýã|á =¨ €P @( €P @( €P @( €P @( €P @( €P @(  ÈÉŶœÕ÷‘.˜[6з™ô¼üûä£ã™"@7)EUuܨpäEŠ¢ë¨b¤Šj(b”q—{ŲÅo©º]ëâ·[é®’i\Œc>™^êç/f5¨®zá×*¢½;¦¯ÚºóC§ôÕ¢{ÝæâôdÔñ¬’Hïªá;5­Nï{Õ±ÆÔWÈæµR»¡ãŸ6åä­¥9¤|b}kråLw’Nå+ÛfÄŠ“&ž×tÕ•QU*žÝ‚LJzçÕSä–‡@Û[ Ê{úÖr{ÿš\£ZßüVusœ‹Þal¿i½ÐE=ßwïo©ªz5ÿ¶JŒŠ4TýÝUÁ¯‘ø\9”cX©Ú¢L«[ Y+XZ¤Ë®Öu3ÖP›Mu8Ŷºä-è ¡„ÝJý²£6`yÈEC?¬""5o[‹®µ Üû¾«®©Gex6wÃes۱G„úrk•?2ném”Úm qiͼµ[ÜÄD꺒:š‡a?ªjÒyù®*׵߲&>ìýÁáììÏ…õ]P»öVGÂ…³­ê|#ÂyÅ>·Ûróró{m·í®©îêúOu"ȉŽ]Gç–sŸ?®>¦ÄKm½#H}„w.øçåÇ\x\xíá0}ÿëUÒ ãüý”aÒntŒX§—L…Ë¡åÙmû¡G°€©¤˜ˆa€v0vÛ6ãë½=#iÕµÔèÌa¨|Ъ'ðôgêGŽØÃZŸ×Æ5ΨÙ¢ÖQÈÍG·Všé%EEš:Héj]åÍ©¤lrLåÏr'Œ*. šÒï $ÝFÚš¯³ZªÉC¤Ør¶:`£g Æ™ÝÓbu§+”æQh¥tÈ_k¦Æ=I ê’d’* }mkâ\7âlV¹¾~jŠEUENýÝNäV¢/Ü»ºwv=R¾›¾ÏÞßìG?á9Í~³).j±Ë…ãcWæ©gf–$±/Ë3&Z—Î?¹¡®ûFãdœ„-Áù ×í”ÑIÂUˆp:j¢ dLé,šjÄ,Áµ]m׺k¥¦¶+…¾±ˆè¦…èö9¿£“êžÕDs\Š×"9 Ô¿éëÞ•¼WØ5ª{%æÙ"Ç=5Lk±½?6»Ë\˜sÕVHÅG±Îb£——ÖHÊ@( €P @(ÅãMÝ)ÄkÌï;ú-@bƒ@H >ó~~yZpõ±kÐ{Ä?„žjÚ€P @( €P @( €P @( €P @( D´G`÷Æ€üúÔÇq)¹öñõ`*mîì @‡jôß÷í- €P @( €P @(Âr6@´qUtdkòi¥¿hYÐÏggåÞdš0d˜âBó8tu4D€*.²é¢˜ç(2ów·Øm•׋­Ki-ÖèŸ,Ò;ÃXÄÊöòç/ákS»œ¨ÔEUC9¦´åçWß­:gOP¾åz½ÎÊzxYåòH¸L¯†±©—È÷|±±®{•ÕR“šæ×6EÖvDs! æBÞĶü‚ÁñÀ,$iÑ1Q.+‰Uå/G-Îc,¹„ÄhU«@"d1Õ¬ÍÒݾå]ß,Ï}Ÿ£zû*,á¬otI¦DUGÔ½?—)/ðˆªëÛØ€Ó[¦b¦§Ž+ޱ¹Fߊ\øò|¯\9ÔÔÎr#¢¡‰ÉˆãDE™S­7'*5½òöº>ýjÒ@öú&ÿCo%#ÍÜ”‹“ããš®ýúæPÀB,Ú&uÜæ€”¢ŽÛ×ÜQK<†Ý<Ï\##j½ëôL5¨ª«žØÁüg¨§¥‚Jš©™MMeÒJæÇQ+ÉïVµ0ÕQqß×GNZ†c"83„x7bøq}ì ¨ŸÂÀÂr‚€#;Ûvï]…tf°HÖo²—.Š'.^ƧŽ1œç¥Œ"wÉÓsöÕföɸv?r¯áÓøµ>YÇ=|ç=±çôÉ'Ü*¸zã}P¯“/ÌòÞàqmãÉèû6;´}%k9‘¸ÜF^MåÌé±R|ƒÍfš-QQ¹•\Ês•3ï‡Ú6¹uî몛3è­²™”{àsæVu^éÜÞ2µ¬kšŒ®g'«•ê­ÃV'ú»õ%©ö¡šWOíì”Ñ\õ5<•Ò\Ÿ5mŽ•²ôbe+ÎI+Ú÷I+Û"24ccDz«ÛýÎ,;q&–-;2ᔀµîK½;ã²e¦¤.ìæ^ÁÌNÃL[ÏåTQÒ ”moË&íºëªBœÈ·VS(Jý;ù³Ú{BÛíZ—Lu)(«*R’ji%|ÈÙ’Ç$/~dDVÃ"H×=ÍEâ¬Â+‘qþ½Jëܼj ®úW+µ²‰n4ÕñA;Ÿ*!§ž ¨áFÂç5õ0¾Y­ê6^JŒS¦š×~@Ñ~@IdU¹°õÍ Ü2<:J"c•%n«U%MÉw·C˜Û” œ‚iø+­þ²²ãj÷Rï¶×v¹®unœ­z{Ê<öTÏyéÑWÔ1ë´ä_ÈXR2 ’1¹œ¨0w„œõtýSµ»qQFÈRªUH,e*ªc±6ãr/{s{†áoóZ¦r{Ú%rôªbðåFç ¨k~h¦DEäˆÇrcœÕÒÛá²Wzô­U¢ïK>¢¦Ëk¹£ÜQO…éµdDWÉG#°Úšg/bõ#FÊÆ¼¸–~ÅÖ.µ´«;k´39ˆ,¥a1»qÌñŠ˜ |ãÈ´î çdª…p›Õ™ ÌRátM¹rŠê»¯s4] jÊŠKí#j(¥TO’WGÕ¤™ª¿…Ír·>>UsW(ª…(íÖ¬Ô»Öû´Í} ÃI\d£¹Ó¢¯ÞAËMq¤‘©Ôk˜Ù©Ý9¶7·»Z¥^3wñä{ôLÝûNX¾nb˜‚ƒÖK³´yÚNW (]‡´9{{jª$ŽHe’›Âh\¬zwL9ª­ra|aÈ¿©èJžxªa†¦õ ¨cdÙEåÑÅíÙr×"åìF²S¼Cª\ [.t„Éö«iA"†L·îí›…¹Lb2ìâAö†À5Üvî÷&ž×:NìÇ+K_NÙ;ªf)žL‹)Ó‘Ê©ã²dÖ»×¥âÖ{K¸ZnV$ޝ´Ö>TEVÔÓDµTÎnQpäžÛÉ;¢9Ý—(…ü*ÙO:â€P @( €P‹Æ›ºSˆ×™ÞwôZ€Å€}æü>üò´áëb× 6ö/‹þñþq¨" ¢;ÃÙòÐbÿœ¤(£â0@h?¿ïú( €P @( €P @( ÃÝ/e㘿çô‡ûè1}Ãùä =¨þå €õ?ØæùB€Åã|¿9›ë袨–oöÂŽKç–€Ú+7t?5üyôoè h €P @( €P @7ß˵ø:æðuùwæêUÛoV}¶pwÚ¾$ÏcÎ× }ÇŽ¤y윛Ÿ÷C?Ý8ŒMJá¡Ìæn€ž^µM8", K/dFà2€ X°| Œ€Ÿrx08“˜B¥4g›­tßÚUjZ~!»êögO¬œú½—îù~÷=¸såÛ'£Ï[û¶·\&‡G.¢u–¯áÉO…‘fZUé%61÷¼}·ë/Móq/•z)ÇÜk_ Û¡ŒMjÈžåViF_RCg1Q;ó8h0£'í­ {rnµj÷7ZVÏXëªÂ¶5‚EeV{mÓ^jõ_“¥ÓÏžØð¸Áç®ÆÝIö–ØË jWU¥\^Õ I=ç½IS¤‘#~ûÜ$Èž>~^~¤*\¥½?ˆÞì )l©¨°}áA/ü “; kü8n¯øÎpT:Ál"¨Õ^—ô¿qÇWÕÞÛ©”“á‰toµåËæÇÃø~.ý?$ëµ-ý}YݘV¾/|±ðX>:º}ßéô¾L­ë«Ç‡ËÕÿr­" ";º?-A2Û|åSéÛûŠû›xü_ž‡Là³öŒ#¸¬©¥¼*|A7¤FxÄÖzf±ÛeVY){õ;tdäF;ÙÕ![‹QÝ!kÔ˜H Å¿o70âÛhwéúL¿NÔéæXÝLžÕ+ÙZµ}£øuV$VxýßÂGÁ<•A¾5^™»ZåºÎƒYϪ’µ~ ûD–´·-OJ>¯·J‡¤ÞsÖæˆî¿Wé‚·ù_ÙßáS&…Ð!sW¯ÕZ¥1-€Ÿ –OÙŸ©ÂDIì—„øî ú°Äjjuñëâ×t½÷¼©ëtR¯ZN§EUz\óÓNøf;ä³Íðï²ZWáãá? ¡ö¾ï Wí½¬]r©Ùj:|VeO2ríùq(`v31ÇŠeöR;À_æ|3Ã[ø']·oSáX›nÝ€kKÔ÷4ýûÞ£8ç8WrN(¿§,gëŒá ÍCÙV%NVŸ¥'4oâáÁyñîø¢ã=³ƒê÷/M¯ À\sðEОళrÑ%p|ý<™—,s÷ б“.<0Æ@ÂPl 5r'™#ùHtßrË$—ñ}ÙÁÖ*šb!¨ ᜤÜqÐn>Ûß 4².#]Öm©u©Xžå¶ 'Î̪Šåhi¨†RflU„¥1t$0}ƒ}¨S@(êsr€Û¿øÎRïþ4}M³!ÀÜ  9ÀCÌÊÅ•ÀçÙä…rÇÈ9fU…2ãÃf1P †€þ7òà²ö}Y¿í?ÿ.h mÃ\Ö¥³r¸4=ÁoÂÍ¡TŠØÒÑ_™¹U€¨R (`æåß`ßjЋƛºSˆ×™ÞwôZ€Å€ïG ;†Òâ3¡[¦êœ‡¶m›oV¸và¸n &pÐPP±96Ü})/1-"²hFÆ6f‚Ê®ºÇ"i&‘Žs@h uáÒûÐNœÜÍÙUµ®­fäFý \Pঠ•dS9rÌzò‚)ºêϼ4:Œ]"Ì&q(„ν/^,ÙAäq”¶Ó´3…ÀZãìXÂìšfˆÅ­påG“ í^cs ’A¹CÚí¸‘éq®”x/œëã%$°•2 #¬Ì1Ïd€@¢ñ8Éå0î< n뉶 >õ‹úUœhñÛÓ9œÔe—Z˜ä1¢rŽÅnX¤íêE{Þ·‘#na#P; ãÜ h›¦£eOMDZ:÷ÓK‹›å›³q˜´ó þ郌:€‚C!pb›©d‘Œ)Åe\++ à…'+h§0 ]MZ©ÓưñtFfÓ6]²s&8™I ŠË˜F@¬W…¸cÈò׸Q¯Ž‘nÕâ<ÁÖ"˜@ì  wq\×, ÍçfDãÆyUþ!W&…‡!p¯j´›þr퇌U2³­£‚£y(ð¼­ÔëLÀPPNP)½ü¸,‡ýŸVoû@OÿËš½ü3zWW§ pàM!ÉèÎÙÆ¬s4ôì3‹Ý†d—¹@–и.‚¸JÕ”ÔÄç„*"Q]>PsÎ<¼¢ÐH<Å)¶Ûr€íïní@{P @GMqHðãоiÖN=g”ßâ¨@BǸWµšLå­‹â´ãhçgf'pÀr·8œZ‚~Ô&)¼=8†!ü_Vo`ˆ}ð3ßþ1Í!\*zTWŸíz`ÊèîÚűùˆrP8¾ãó ½Òî ê_¹9!J Ֆм%k-6fÝÁ:²È ÁÌ)ò “Ð ¤šì⥸²0êã";ǶeÏu'd[ FZ7]ë-pÝkEHͧ  hÄ;_®¸§ë «&鑏Ы²€¬†qé®h¦ÕpéŽÒ¾¢sÍŽªD•¿%¬L1o<åç1Q³ë¢EF¦ \G²[a@7$2ÏM[\7núaÓ^0ME[:»]ä<¥(Š`A)AQ,ä#C0ó{Vå÷‡~Ñ :/yô³8Í]%pHŒÍŠìÖ!ˆ’vfÇåðNe8º—cysó€$b‡Xu•cöò‰@ø„‡I»ë÷GrMpͰ)ÊBƒXì1§$§ÈBD„qˆ?1„ÆP{L;ÀRÜé?ñ¸€zWn5˜½È™TIAcraM?:fpHLK‹™¨ Ÿœ9À¬¼¢^Þ`$KtÎ8„X’lÓϸsOyòÝÚû"x˜{ƒ^k6)ÊÌÒfß•G†O˜J*C™ ÁKm„¶ß ^’w."ÒÖþ3-Ç)¦BΘŒØâ Þò9Ó.}öƹ)šå‰½Ü…nÍpŠ˜tmÁ£l`,¿oÂ!ûûÃ@y ©þÄ7Ê/x{àx…ùÌß_E@DšgêÔ"›oÈrŸmöß”Àm·÷é^7DÖµöÓc+#y<ÍsPNnDàJ¹ *¬:63’FPXR*êL±Ä v£ùpYû>¬ßö€Ÿÿ—4ùpYû>¬ßö€Ÿÿ—4ùpYû>¬ßö€Ÿÿ—4¥ø#qWšâã¦{÷?Îa¸Ì&êÍÌrøµ;j.ñwz ýËZÚ¸Ë0y'¬L‚§5Àd…HÀ Îm€ šü»{ÿI¾!-[ãCÚÔÔV“£ôYkd83!º²^osD;êáI´TL²!²’=A<‰ËÕ•e20ˆŽÀtÕ>›þC:„'ñ}YÞÜå/f '·öÆìßoÛï…uîú­®i×UòvkL}!œqÓ+áÝšÆak¥¾³©IhÓG·˜rɺÒcà¡‘LÃ×r‰}®âth ;¼Ð{×OKÂùÑæ±u)¥¶:$µo†x0^xÁ­àï6LÁ¹¹µ%$ºðèX® ªÀ—8¢U”sró›´h¨‡N!ˆ‡ÿ/«7Çþ3ÿò怺ÿÝW½×.Š´í«)+1®<}œloW6[)•®¶òªÌÌE &œ2lyùbÀýaL~¼%ön wDÝ…öÛÝß´»û`ÛÝìÞ¸UÂwð1•DNëôþ¥µab=Lglxå Ko(ÝéÇÄ1Jx)iUçíåæçD`å£Ã›Äa)¶Û´*¥µõ•Ú{Zê«;ÙÅ´uõÄÆb’Eš,~)Ý;g?\ãцÏjxµ–Öíö¦ŠN£®Vš%‘s•Jˆbm=J.²¥D2ö\ª"¦O­•r{«f:ÉyïI+*%Ãg1¶LµÕ<þÌn«5ÃdÆÛpüÍ<(“ê¹9 bvØûýòJm’]êf¶S«\ÊY*&}*+W(‹ž±ñú*qÆ;‘š;JEu©¾Á¦è)oµ{%¯†Žž:ç#ÛÅËî›MÏ ªŽçË–\ª™/‚²:Ö†“íéÓ°Ž{gå\vêѽít ‚Hþq­·zÚJ¶D Tj÷ÃD¡·*]B‰ûA!†ÐtµÚ͹Ž©ad¶ëõÓÕ@ÔDlNtk M:µ3ÂòkSèÞNÊŠPfàéÝM±ÛÃs·¥D°^t•Í•”oW+¦³%Ub=È‹"K½{òQ®ù‘È”âÖ6‘2Ž2¼…‡x7Yõ­&¼‹Ük}±÷µ¬ÕÊI¤ç˜§ip5IÓ4dšc"áB1;uÑ9«›q¶öñ·7ù­7:jÕþ ¨¨ˆìÿ Ñ£šÙã^íz£“,s\]žÈï6›ÞÍ#O¨l²6 ½#"ŽéA•êPU½ªªÌ*'*YU},É”|h­w#{Sª¸víÙïûÝ»vüвgòÿ;/ý~¦âäŸçùþÿÛõÇptc£<•¬ŒkÛÒØú:A¡òNHÊÓ‚‚Z5zruoî×-D˜±LÇPX®mS:•±¶Ûmï[{†ßE á´@ö­moº§‹9sZõN.©{r‘Dܪ*£ßň®4¦øïŽ–Ù-+Uv»TÅU©*bzZí|“¯WP©Å{yÇGðê‰Þjµ«Jù\Ö— Ô>W±´S¥k†ëdƒ˜\cc°´1µºS$˜=œo¿`Û PPÁá* ¤YŠ€ˆ7fºÆØ‰œÅ±_µížƒ«¯‰§¥±Ò²žŽØ|¨Î•$,EÇ%W#Uß^ s—²*¥*í®¿ï¦îÛ­5I[_ªëä­ºU**¬tï™jn5R9?#ôj®3+ãb|ÎD(víÛ¹¯$®gOä9~ùÉÄç3‡¯WQÓµ…EL~g *mÌ"omÚ;ÕUË+æ’I¥w)&r½Êªªªç*«—¿~ꪽû÷îz§‚*h ¦§gNžš6G{'1¨Æ·ˆ‰†µ©„O§nÇbt{œeÝRà<~‚ 8Fo(Z®%Bœ@ô.{…ULBR°ÐÏ'ö¦\¾è…w º²É¨uÞ”´±ªæÕW@²~]^“ÍžËÛ§“?ET5¦öjˆônÒDôšÆDª©Þ¢¦5¤¦DETä½iØäDî¨Õò™Å òGÝ ûøåt~½VÊyØ8³·ZÿyoôéÐÐao¹,üœXž‰ÃÐM €üÕûüb?JJ܉ý>½¾7\߯d(@osŠ>åØßâèämÏèÅãMÝ)ÄkÌï;ú-@bƒ@vû;=ðÐ>:ØDÆÝÄÃÙ¹ú(Q`ö€†á¸{á½ÈžÚ\sIÈ[7 Ò•#šAä$›VE"âR¢qv»R¦9Ž@(‰¶0œ»îå À7 Ça|@<Þþ©¯ºbäÿ›Oð óB€÷ €¯çJ¹#XÞ\ë÷P›Æ>Qùh üèº÷çè‡Ë¨ÏÙ?:PýÐ ˜]6aÐ.”À°u€Û‡l-”<~øvТP@wØví÷7Ûqp7!·½ù„ß÷†€ñûûÿúÐ@7ÿÔå ;¼!°ÿú"ºÈ(EPT誙ʢj&aLäQ3ÓP‡(€å8”À %܀Ч£Ò »ò}ÉfpÙÖíäúè»ä’K9Úë‘;ÉëÌsc ‘枪*L΃uØ–pc9v-MñWÏu@¾H@@@{@CÝñPhSýˆþo”( ^8ð÷Àñ ó™¾¾Š*€‰ ÎÃð~ÿ}Ø~Òï ÁúCýôaø?H¾€Ó³¡u·ñog=„þ—w_ˆ@úaŽÜø?Mp£x‡È?%ŒH¾Gˆ'åöOÑ‹Z€‡Æÿl!øä¾yh š:?ýÎ\?<ßâ='ºè Š €ðoùä 1TãwÞëÄ[ÎÓ0zL怋BøÃÊ-³GGß¹¯‡ïä!§¥÷m1Ãâß‚¸_§|/dR³Ürô²ù•ÁiêÂÔŽ:Ñ2­#1æU騩ã傤±îg‚]ù8fub•PyJšíw3ƒ a?ª $U–ý}A ¾ž¡±ÑÜ0‹–ÈÌ¥,Îüšöf;Ã\Ø‘ªZw =Û‚{uçgîõ)m#å¹ZꈒE'HÏ ¯ŽDJ¶7»ê;Fˆµá{• +Î{’ =~Þš*½7Y›«Ã ÞOZ)|ØÄp »fí.Få¼-®pI­È‹2•5‘?+yè‘Ì’‰7p–ÞÚmÚ¹í¥ÊV:7\4åÅÍ÷T¨¸{\½Í2¯ÊÙšß•ÍwÉ;QåEkØ×ê+Ó¥‹}lÉì²ë{$oK} ±ìv]ìëQ¨¯}+äîÉJié#G5òG$ÒèöKqÔ~lÔîX-™tÛP \aœ €ï5 fämû¨¡!r_w ŽùuÀ$%x™AÈ$²e:îÐ"Û5G–JíÜÖ]àÖ:›[_½µu ]mµZj)_ &ùª¦¥r½9ήL?‹‘dj?îÛˆ1½4º£Ó^ØèM«Ñή´Ýn26ù¨5 TAMÇ+-5Â6ƽ:DbªÃÍŽTl2,y™ùîðpÆÐpLØi¢ÂÞ.¹D÷8Ç‚¿ýŸê‡Àú®ßæúޝþÅlïØŽÕ{Ÿuö.“«Ë?÷3ã÷}n–;xáÇô47ú¬õ”?ý¨ÜVŸ â“©þu¦ëòþ~¯?§/¡Æf¯|¥9“.]+èŽÚĘ’ØÂ,-òel¥sZ&’³¬û‚í`Œä>Ç˜ÎØw•Åt…¾ª+¹tÕ£tŸ¤¨.íüu;åMò¯Bí¥¾ÁA¦[Ä+¦§WÁM-CX¨èè X›4ý$Ó=ò26#‘y¯|µ ‡IÐi[^íïÅÒó¬nºòJ•³Ú)+*ÚÚj9OQr¹ÝjÙRêZE¨GSRÇRÍ#ã{øôšB—GZvùñZºÈv~HÄÄs(ÂΚÇ£» /3 «‡ŠÞV‹©gæit­C•Š¥|í¯‚´tFâ’Æt FQíÉ£u‰Ú²ïMxÓèéM%;©#J•EU÷0+åTÑ'Ý»ªøÕ‘ÅÊüίE·‹¹·W3ntÝn˜Öd2VÁs¬eÆ¡hQÍk†µÓ£é:æ¡‹O «+átœØ‘+am¶÷ÄDßß—ÿåF.Ý×çþÉç„OÓÏüÿUüËð1ÒÓÅdï XÝqÆF=r냤 S½páT¾®î–†0ƒdÒA¼R ˜‹iÿ©!1½.hI]5Ã_WÃÆ&5ôTš©ÉÊ©îªü­DHïU™2œS5™ë÷v m%“gíI%DŽçwV9Ö¢ü>‘øÏÌõs«$báѵ)³øÜ‰”~Hû¡_®×¯êivqfnµþòßéÓ 7 Âßr Yù8±=‡ >›@(ù«ö!øÄ~””¹ú}{|n¹¿^ÈP6€Þç}˱¿Ä+;ÑÈڟЋƛºSˆ×™ÞwôZ€Å€çXÃ^ù—#X˜—@9º²L»íÛǶ™ªÕ»¹û²ë•k Ýwˤ‚ 8“xÙ"eH‚§1ÎR€ˆ ï ¾†Þ,´c`2Wlï'^ ¤ÊEM;â Wvþ:€TJ“…"¯lœ€RøtQItb Å3¦¡öI‘bn>è#EšUˆc§-`¬H““E9;?Û ®WE@çQ%o,—›rS¨q^¾p sÇ ;V¤drÉX2U—é(ѹÒ96ØHd̘”ÅÛ³a ¨ÀÖ'®zã…—g›4©ŒšÝrˆº²¶3·ã±~YŒ|äÉ%P½lÖU˜xE!ŠœºrMM°•Fç)Œm|nz?Ù¿„ÅÀÛ%Ú“2™¿Gw„Úpö®]´ܶü+`åøˆÐê#ænØàÂi©Š—2f!z!W¢€˜N|N.®zäÇùiY)àËõìf7ÔªÔEdf±d¼’EZãnÄÃʵËmH*œÔi‹Ê©üÔx*š.€Ù~ n"冉¸`$™LÁÎÆ°˜†—Žp“¸ùH©Fˆ¿’`é ²pÉ "¡DJtÖ)Š"õh üt¥;Œ5­ýçM¿µ†  2 '£sßU¡7¿ªkî€Ø¹?æÓüüР=è +ùÒ…îHÖ7—úýÆÔAfñ”~Z:.½ùú!òê3öOΔ¿t€¦MŸïÒ—žRÙB€Í€´ÏDïGºdÖN¹3›ª,-cç RÈÓëöضïø÷2°‘—j{ÛèÌ„jOREê刜“Dä‹£ÊìÂ)sÒâÂÐÞ‹q`"ÓHÚe° €¤$ZÍÀزÛp@È%Nê*ÕIUW n°Ç1ù’)„ÜÅ ;Æ×¶âÚ"Â2ß„Žbܨ3cÑ¢1ŒsíÛ‰€œÆ€n&ññì³¥=1çˆÇpù¯OG,Ç=It—m‘q]x”zôÊ‘ÕMYØ5Ôlà š\«$r*C$Cå9 =¸ÍtNpµÝnÝ@pĵÜc<½j³s?/¦4edeqîRŒbÐËI1Æ'›t»«ÿÑ:Œ£ü%h‰%@$Œ{…S\@Îaë7q®Ý0~ÕÃìœ.Ñã7h*ÙÓWM•:[9n¹ vîY5¡ R˜‡!Š`…ýkN鸬{¢Ü¼í‡öõÕiNÄ\¶Ìü[ƒ4”ƒ¸`dËBLFº'¶lý¬›F«¢¡{H¢lîZÓcÄ@ziÕA|—!ãö2LsA!PŠÊÖƒ…í–É-ؚrЦ0±’jqo@HUê±Íò…‹Çø!~s7×ÑEP*€—D¦Š©€€ø„åø6 5‚àç†Æfá}¡¼Ÿ”ôE¦ëó!^Úw±® ºò¹ñ”,­ÃrN>#Ó<•˜‘pA;çÊœ¼ÇPãÌ#Ùâ@’ßâQá3ýžºQÿTVïü*üJ<&³×J?êŠÝÿ…@?‰G„ÏözéGýQ[¿ð¨äiëKZvÒu£%ai³ cÜ%fLO/tJ[8âÜglÃ?¸]3iâaÓ&@V@ì˜3HÊh‘± â(P{7ˆ|ƒòPÈô€{äx‚~_dýµ¨|oöÂŽKç–€Ù££ÿÜåÃóÍþ#Ò{®€˜ª@(ñ~JN7}î¼E¼í3¤Îh´/Œ<¡òÐ4t}ûšø~þBz_vÐ@p¼‰`ZYNɹñÝõÎã´/g°7 +∠ú9ò|Š/¶nà‡(ŠÄ¨ŠÈ¦²F*„)ƒw´Ûï¶Êë=Ö•µ–ëŒnŠhßáÌra{§trvV¹0æ¹æª*"™­7¨¯:JýiÔº~¹öËÍ’vTSOáÑËå«j¦Zö9¯cœÇ"µÊ‹JuèO!è¿ ,ÑÚO®\Gq½plw‘Sl µrÔ2‰[B‰”Ix¶DÄ)Èc7é—ÂÚ €VI ÎÝ=¬»íµÝcz>·OV=Þα¼\Üç¡:ãÔ±;*/iï#òæ²ö=?ú‚Ó{ã§4/ŽÕ¬­qµ.vÅz#ÚäDEª¤EÂËE+²­zeôï^ŒØÄo“¢·Àî‡fûû»þzÕJ˜\;a|dÿCGNcÝ$ùƒ— ^·1NƒÖK¬Íâ óèºlr¨‘€Ý %0hWÔrI Ù,/t2ƹk˜ª×"§…G5QQSé…?œÐÃQਅ•HŠŽŽFµìr*aQÌr+U;.Qr¯£5 1þÄŽ}ÍãÉÕû9s!ûÕósõ~õGÕrsöíɶý»o]íž°ét>ÕÜú Û‡Ä+8c9Ǿ<÷ñä音-µ÷>óöu`÷h¹êüÙÔÎ1ž§µçœvÏ,ãêIÏ Þ!˜óKKä‹ 9ŒòV¾CŸ¼X_ìY>¹]Å\hG# Êåf€¨ñÔs–ˆ·Y7i‚§Ad*äê”*„ÝÛ»öm ëÍ«TõYCw•• «c3™21#{gjr‘Ì{Q’"9Xär90äTŠ>®½6j]Ûn˜ÔZ´ò]tÝ4”R[¤’:VMLéVhßJ÷q…’Ä÷9…ü#Õc¹±Èïíñ^â'ŠõSlØøk –RnÒ¶®òß— ï-ò)Æ0Ó00Ñ6ì|Håf ´Ÿ”UË¥SLŠ(tSD†Îqý;ù¼wAkÓšgU¾†£ÝÍU$n‰$‘±K l…¯D{š–G=êEwµ;*˜ÿHšµnÑÝoÚã^:* ÍÖ‹áô´LÉÖ*y'†¦iªd‰V&ÊçÓBÈ¢cœ¬jHéíDéÖ„4uŸ·I$$m¼7nH¡ü!ä^¤É"š)˜ª­kZ‹,˜§'x8Hy@ J=3‹§|»"ŠÚïj¶ªï¹7fµú=9Fô÷•˜í¬*¢£ê^±…lH½I1òµû³Ô¨=9±úrW¾HîšÚå¾mäŠç*ömecZ¨±QFîëË‹ê(s™׬;ÔÆvmµ`Xð¬íëJцcoÃ0O«lÂ2=Eº%ßÛ*¨ìcª¡ÄTYUNª†2‡0—Ú­t6[u¦ÛJÚ;}º6à mDDdlN(Ÿª¯—*÷s•\쪩E‚ÿwÕ7»¦¢¿WIs¼^g’¢¦y/’Y—9~ˆž­nÆ#XÔFµ0iÉt+ïã•ÑúõýdL9Ř}º×û˧N€Þƒ }È1gäâÄôN€úm æ¯Ø‡ãúRPäOéõíñºæý{!@pÚ{œQ÷.Æÿ¬ïG#h@F/néN#^gyßÐ9j¿ü(À‰¿ÀÐeiÀ=ð¯kï@mî_þþpÐÔ€PÔ6Åš¢Ây7OÙ®ÙkwâìµhKY—œ 3ˆ©DyAÛ†4|Û7dlö=Ú` 3|Á»¤ UR €—këH—~„5ƒŸ´¡z8^FO ä[r2yv†eõWh8¥ì{Á46M9[BBè‚b¦«µ›«:€Sr˜ ïh{‚Ø >ø€ùh pú-šÆu«>زå™R[ érãÓUЫµºÇî ­±“ø½ùÊ¢ÇPíƒ\¶ôx.qúó›iÞß͈3 +ñÒ”î0Ö·÷6þÖ6€È:€œ~Ï}V†><Þþ©¯ºbäÿ›Oð óB€÷ €¯çJ¹#XÞ\ë÷P›Æ>Qùh üèº÷çè‡Ë¨ÏÙ?:PýÐ ˜=6¼J^x ýKe 4Zå .ð­Où™Êz÷Ù”€PÀ >ïéx@}Áñy( zRš-„Ò'|“=cÃ¥ ޵IkÂj>5šB:2èº^ÉAeF @›½vB€˜—ÈR¤/›¤PM"€\jK>…^muvh§S¸)óâ.l=¨(Û©õÆYvÊde“L‚ʈÜV<©û &\ „@º-ê±Íò…‹Çø!~s7×ÑEP,ßí„?—Ï-´Wnè.~køïèŸÐÑ@( <Ä>Aù( dz@=ò7ûaÇ%óË@lÑÑÿîráùæÿé=×@LU ƒx‡È?%Ч¾÷^"Þv™ƒÒg4ZÆPùh š:>ýÍ|?! =/»h  ¿qõ“”mI›!ÚЗ¡p4;)‹~à`ŒŒkä ÚQQ‹õµÈ}Ž’¤ªŠ„*ˆœŠ ˵¢Û| ©µÝ¨c¸ÛêÛÆHfb=ŽO§eð¨½ÚäÚì9ªŠˆf´ö£¾é;Å ÓWiì—›sÑðÔÓHè¥Éù9«Ý®O•ìr9j«^×5U îê|ªr7V“ï+Ç8QWEÅ9ú­\12ŠJÆ×¾Ê‚…rÐ:Ó‚IJ¤US" S?\L‘]z[²Í_ nMt.˽…kÜ×7+ø`ªDr9©Ÿ•µ G5 3³ÚÊö›×õ# ¦´ï ’HêcF±oÈÚöȈ‹óÕ[òÕcû"½ôoV½ÎUJxñÞrNuUˆÜ8FþÀFÜ⤳;UýÇo„±;Ž×#Ö& í¸¸)ö½ ¾õ¶ú÷O=í»i*êvGæVÀù¡óŒ¤Ðucý.<¢ƒKï~Ðë8£~œÜkMl’øõqÒÕgÂÒÕ¬úe#VçÔëø[×¹ð/©Û‡Ã:ïžÀLxO_ÍÉÔõ>ÍÖóvrí¾ý›o]GÙÖu:IG2ÉœqéIË?–8ç?ØØ©s¶,]‰Ót8òçî!ãÇÏ.\ñÇóŸaq¦Œ5]—\7JÂÓþQ•nàÅLHZïm{t…E.;¬¬YJ¹ŠUΦÁíS0ˆöû&ÛkÝBö6Ó¤«§cÕ1#àtÿUš~”XO®ªŸ’®u¾¨ß=žÑ±HýE¸öšI#EÌÕ2®¥p™ÂRÒuçÊøEXѹòäLªLÖ–ø:‘÷V¬/¦jÝTœ†)ÇÖT¯yDÍn{ôÉ"d›‰ÈPQ¤@êA~ˆ€”ÒKBú\“©~¿¹5cEG{ '¹ywÏêðÕFå>fÀÔs‘zÕÊ,ݯ_Ðôjm=dzK*9Ÿ¹Æ‰Ã?ÇInG=®vU²U¿ rw¦eKXö-Ÿmh[&¶¡­JÝdœ|-¿ÅèÈö©ö‰lCsª¡¹•YC™UŽu c ¿µÚíöZkeªŠ;}Q‘C ‘±©ù5>ª¿3œ¹s•U\ªåU+^ý½ê‹½uûPÝ'¼Þ.OY'©¨‘ÒË#×êç¹Up‰òµ‰†1¨ŒcZÔDNYY`w’>èWßÇ+£õëú‹0ûu¯÷–ÿN½ûbÏÉʼnèœ=ôÚ@(Í_±Æ#ô¤ 0=ÈŸÓëÛãuÍúöB€á´÷8£î]þ!YÞŽFÐþ€Œ^4ÝÒœF¼Îó¿ rÔ(4€p£ï7á÷ç•§[½·±|CøGùæ =¨ h}5=?GØzÛÓ.¡b˜&Í,ýeí9åÒLÀ2—n ºQf´‹…6åQrÙ¹ÉhÚb§Mû( aйèDæGÌrž¹p§Lñ×%Š3Ì©Àè?³.IÛXè"ojcâ8Vìc$€@À@åCú¿)Nã kyÓoíaƒh ƒ¨ ÇèÜ÷ÕhcãÍïêšû 6.Où´ÿ¿4(z@( þt¡{’5åÁþ¿qµY¼cå–€ŸÎ‹¯~~ˆ|ºŒý“ó¥¯Ý )ƒÓgûÁ´¥ç€ßÔ¶P 3E .YТï Ôÿ™œ§¯|1@i™@( (Ó~ÆÍJ}åÔˆPz±3æ6|¡SöÇjÔqíß’êòîb‘WrH»ì^µQ퀴èz7Y›g}zؼçêç±»:¾¬æK¬´/kÒ ÇzÞT”^¤//Vc(ßœ€–ÇEzÔÿb?›å Ž<=ðÝkýå¿Ó§@oA…¾ä³òqbz'@}6€P óWìCñˆý)( r'ôúöøÝs~½ 8m½Î(û—cˆVw£‘´? #7t§¯3¼ï赊  (ûÍø}ùåiÃÖů@mì_þþy¨j@(FޛͬÅÞžt%z©{# ™rí°Å12þsØP3ŠE€Û/´Y ‹°‰‡À!È g3@[#¡¿<æ3ŠÍÛEW·&’²ëg¦b'R"îÅò¨À»‰ õÐ'(î>ã¸P˜PøéJwk[ûΛk @d@N?F羫CoT×ݱrͧøù¡@{Ð @Wó¥ Ü‘¬o.õû¨ ‚Íã(ü´þt]{óôCåÔgìŸ( ~èL›?Þ ¥/<þ¥²…š-rÎ…xV§üÌå={áŠLÊ@(GÞ›£6ÆÒö‰dL‰Eëm@äfH8ÜÜ鵯LUx‰C}¹TR9Žá¿ù8l!¸îq4Úú¿}þ³¼Ú­OZQ´‘´©þÄ7Ê/x{àx…ùÌß_E@D³¶ür_<´Ñ\ » ¸yù¯ã¿¢@KE €ðoùä 1‘é÷Èñü¾Éú1kPøßí„?—Ï-³GGÿ¹Ë‡ç›üG¤÷]1T€P â ü”*œnûÝx‹yÚfIœÐh_yCå 6hèû÷5ðýü„4ô¾í &>€P @( €Päº÷ñÊèýzþ€â¨dUMRm̑ʡw Ù3˸oÚÅ è â4Û&âkOx2aØ"¥pî-’r È) ØVëµÌs ëV7( Œ PÜvÞ€û] æ¯Ø‡ãúRPäOéõíñºæý{!@pÚ{œQ÷.Æÿ¬ïG#h@F/néN#^gyßÐ9j@8Q÷›ðûóÊÓ‡­‹^€Ûؾ!ü#üóPÔ€P 7«­ƒM=hFÉPéû)9™2õÒÜ‚ ‚¾kØvü3Ã0&ÇOÂoc €J<¡°óˆ€ÍPÉèoÛÎåx«Ý³)&°´¶4——]:X…LÉó7n1‰l’âcnB˜zÁ(”DÉì;ЗÐùéIMÀÃZÀP8Óy„ a.«°qŒ"€"> Ü{( ƒh ÅèÝœ„ãS¡a9È@5÷{¢s”€cŸß`BL!Ìq6À¢#°Ð'üÚ€_š½ :P½ÉÆòàÿ_¸Ú€È,Þ1òË@OçE׿?D>]F~ÉùÒ€×î€PÁé³ýàÚRóÀoê[(P¢Ð,èQw…jÌÎS×¾ 4Ì €P†é¹}êZ,ó‹¾½W€Î€»_B7ï¿Öw›U§ëJ6€Ò6€õ?ØæùB€Åã|¿9›ë袨–oöÂŽKç–€Ú+7t?5üwôOè h €P â ÐÈô€{äx‚~_dýµ¨{@vY÷•LA€Ù[£ÎøÒ\ôìé‘# »ŒäLDÅBäÖ1%Dw›rœáâ@;(  €ðoùä 1TãwÞëÄ[ÎÓ0zL怋BøÃÊ-³GGß¹¯‡ïä!§¥÷m1ô€P @( €ÂCW–‚¸ûUºš°×E6ËÙZƒÍ6’ÍÒnF‰ ­·’îxc¢›TÌb¶L¦e±S(ˆ Q¯IoιŒ!Cß2„1 ¤Á@m÷ÂÃ&Çæúȱ¦£qé[™c ¹ì„5 mÊûµT²0®ŠrÿTÄÝèüÐ @~jýˆ~1¥%îDþŸ^ß®oײ  7¹Årìoñ Îôr6€çôbñ¦î”â5æwý– 1A $…y¿¿<­8zØµè ½‹âÂ?Ï5í@(ñxè Å:fºœÊšÿÃ:t„|gl4»„k‰Óãò&n•kvÌ3'V¡½¿Ô%½ §0ÅQCKí@D yPÆèEa9™\zŠ]$T%™‹0œC£$~W274ôÍýq ‚§:,­X¸¡±ˆHïØ n†T-ôˆ­'—§Í}İæØbH‹¸àRâ,¬LdÞ’B ¡€¡èDCÛD &Ó†Ç8{Æ0~N¸.ä¨ÜGÅg@wÜÃg©üc äÀ˜•7ŒÀYnŒn·Ú€ ..â!Ê&Ü£°Ð\"TÈPn@êù¼[Š~ÐG`ñv”hÒ€P ¿(^äcyp¯Üm@doùGå 'ó¢ëߟ¢.£?düé@k÷@( `ôÙþðm)yà7õ-”( Ñh –t(»Âµ?æg)ëß PfP @( Ctܾõ-yÅß^«‹@g@]¯¡÷ßë;ͪÓõ¥@i@zŸìGó|¡@bñLJ¾ˆ_œÍõþ Åo@D³¶ür_<´Ð\]¶yÁ÷‡¢íV"È—MC1P›‰AÔzÒ¬^ "!öi»AdÍÿi1ØF€— @(è¦ýYöìCl>ðì;–€Ço¤Ÿi9´8Ôk…Ù‘šS×¥‰x2êÛ•²nZÜø‡=3¢¢<çQñ™E;ULsˆˆÐ^Qå0<` !ù‡z[¾ŠfIo81à8¢ZfŽ¿s_ßÈCOKîÚcè €P @(¯Hƒ¯§î0zÓ· ”|Eó’f«s¨Øu™-ø«éW JÙ?':™¶ö蛘yù€… (€‡`€€‡”( FºZׇÎ|;¦ô­90Cd½ _òñl✹!޽ÙJEõçdÌ¢UëA­Ö½õp!:¶¨ÅÇææt@ -»@(ù«ö!øÄ~””¹ú}{|n¹¿^ÈP6€Þç}˱¿Ä+;ÑÈڟЋƛºSˆ×™ÞwôZ€Å€}æü>üò´áëb× 6ö/ˆÿ<Ôµ M5õ®/ÃÃKy7T™ÊLí‹)Dàm´]¢Þw#_r¬¡ŽmTÕ)…Ìü¬šdHr4j›©@FlÜ(P1HÔæ¡ò6¬u˜5#–¤R“Èy¢þ¸oû¡VÀ¡X4{:ôë¡’¦1›AÇǃ6 Rg‚bc y„…9Œ#°X}â‡i‡owÚïÙîÐtl´HÿD\*pœ×19;>º’Ô¶Hl³pEó'ù5”I,¨g`pëpËBYI.‰Äz§‡v R †(=”Z5™…ÒÔn’µ-oá?Ã ÊØÕ¶)„Ïnû&j;bœ60û"å¦ÁÙ¸ˆl 4SQRrÒPÒÍWc+ùÜ\£'%äpÒJ9ÂŒ¤.MÄJªo\†ß·rý´úm‹Žfиàn«uò±“öÔÌTüнs ˆYÒ‘ORç±”.á¶éôâ\>µufk¯FºyÕMŽñ²ìræ7‚šŸAR¨¥µ~±nÙÐwÛ¿†Dßó¬NaA™WOtVLƹ4€PüéB÷$k˃ý~ãj ³xÇÊ?-?^üýùuû'çJ_º@S¦Ï÷ƒiKÏ¿©l¡@f‹@\³¡EÞ©ÿ39O^øb€Ó2€P @R¦å÷©h³Î.úõ\Z8 í}ß¾ÿYÞmVŸ­(ÚHÚóT¼É(Pñ™3€yD¢ù÷ 1áé)cù{Æ‹Z힢·».ë"Fì³ ßÙR€¸«( 莼[€ Œ`  ¨¢%1L2ˆy@w ZþŠ>{ŒÌüðÍ®”’O. >_Ù[ \­A^g Öê[![:&72hÊ¿­ÞCmÈc¦©H;å H €P{7ýÿÓ@eóÓ+ÀïqïLišˆ’£ ¨=;ZÊ‹Ã#Ê’—f&™–²fÚÜ¿^\–òörÇÜD@’ vû€C¨ êt)õ§pê‡A7TªM^ªÆjCµp䈖Ff 1•—b$ îîPöëKA$’í¶ÜŠÆw(m ƒx‡È?%Ч¾÷^"Þv™ƒÒg4ZÆPùh š:>ýÍ|?! =/»h  €P @( ºgü?äî‹Sñ°a—vlxИ= &‰˜ÚS3/'1%âôé¢F­®™K–Êç*†0ÜÐés&’ g›ÚïN!™ç†^§m Lài‹IÄ&´ ñbMÀÚYKÊ.ÝK‚ĺRl<é³qàÍÖhñ/òˆÙMŸ·æ:"š€ja >‘7 ýwÚÐNoµô혴@³ØOP7=ƒ90$@ŽÚ÷”ÚÍ òqªb´]‹²;\œtsUÌfÉ8‘3pÓÌJÂKFLE½Lg%ý¤‹ILU³Æk5Ó)ƒ˜†÷¨yx¨†ª=•“ŽŒfˆVw õ³&ɇ*Dr©H@B†â˜àÚ R²g âoÜäÝdi~Çö11tí¥Å±“)R¤ÜéPF.S=v¨Åöˆ·Pý»òí@aí|d”LŠMÊrÝ”`Šb˜7)€Áï”@C´7Ðø?Müùix¨÷rÓrqÐñlQËÙ)WÍ£˜3l‘Dê¸tõâ¤Mº ˜ç1Jˆ€PY¯.‘Ç = ÁͶS7AêC,1ETâñœ¦!²¢ò}_Ö›\—´kÃ[ök".bÉÝH*ñ*…N=Âäh¼Vx½jƒ‹>dkæ‡èZÆÎVI¾ÀÖ«÷ªØ¸Ò-ùÀ»2®3Ý—ÓÆÉ·,œë¤“]ТT Â=4$Rþÿ›Ç@XS£«ÂJw‰~²à.«þÙ|¶’4å7|ç—ŠQ7Œ»eM'eáfN={7 É5eˆ—k[}“ÓFîÇ™P5ßA›¢š¤š)$B¦šII" R&’e&R€@ P €(Ö€õ0nlÚö€ Góþj î’© ñ3ÊòPPÆe…5BúSP؉ãvàŒkU.ùEWÉ–R˜h¹…È+Ê‚m‰¸£7söª4~¨ pãé}pœ¼%q>T„žÊº4Éw 'nË6Ê&¼q]Þå±ï2F2BEr6~w,3Jfe[%$V œ é³Æãá@io¥*\>µ¯5§mVáûÍüºMĶ<…×fäø÷+5néF¸ÎòYŒÓGixIPJÍDz˜±öÞ€ª™€!€v9x@{|TºoûÈh/ï;ÒÒ´˜ò( ¹îHh¼©$Õ8¸–z‰9 uÐ7`¬P„Á¸}é/ë³E—· ]Pa{'V:v½²Õäãµ¶1½“˜,{Òô™q ™l;‚Q&ðœËÕÐê!#d](gD…E’‚'ß§+ñ”~Z:.½ùú!òê3öOΔ¿t€¦MŸïÒ—žRÙB€Í€¹gB‹¼+Sþfrž½ðŦe €¤7MËïRÑgœ]õ긴pÚú¿}þ³¼Ú­?ZQ´‘´ßÝ 3\é¥éJJÇÕÖœõsàm,éˆ×Å—,šIF­².•]Ë2?\¤5]í…wB•¢fu‚Ó~rnDL•T†ú=|iIÂgPwD&Yޏ´ŸŸý€ËŒ­Öå’¸l ŽÏµ2ŵcf ͼ¬‹Iˆô”"ÏcŠÍÊáô{&˪œõ™¥=\Úìo5jfˆGì’/Ô-ë +3Ýo±%ÁkøQ%mw¡ÙÎÚI“G)ˆìtƒpÜɬé³t޲îAÈ'QU•M4ÈB”LcC˜¥€ˆˆŽÀ#â #—U\]8qhÆBS=jç ÀI°"ÿûlÝŒ2.KváJ±Z4ÇV ²ÝqÊtÀ†]²˜Müè€+ágÆOMœZÜj!M<[—åµ€.ËRaÉ BE\Wtá,æôimÄI<HE¤ f"“—èEŸ:è¶9….´`úW–Ö7E²åƒæo+èÆ~O2ŵ@ÉÉby¤ã3\CTùDÆ*qðw À»œå°…æ(C(ˆn°øÃÄ!î|PeÓÆ 2¶–3n4Ô.ºÞÙ9W]Q÷}™q²)’LDéªÕó%€R”…vÁglä,nù‹÷ )‘Xà j%Ã¥!¡gÙöµ¥©KÆÙÑæ¤Áqw¿’e‹ ‡.Ù„Ðn›‰Ü{”¤„¬"¢œ¸:‡,lúì^13pq ’dz¸S³¯ë!µ¹, ÊÔ½í×¥³ž´.8kšÙ Rœ§k)õtäÊ ö7 ’8xÕªgYË–íÑH‡UU—]$RM4Ê'PçQC€… ˜D@q­Ù Z:@ÄäplŸª}9ãÏ"†Y;Û7c;erõh¨°­eît•UQMBCrˆ¦Ê~.™ÄËüNuÕ“ñ…Ù}ãÛëS9Nä³ïeé$­û’Jâr³ hyÀ õ‚É5I¹_lAˆEñ‡”>ZfŽ¿s_ßÈCOKîÚcè €P @(ó Õ†ñ¾¡q6DÂ~ÕŽ½±–T´fì{Þו ™¬½½p3Q“öåT‚ 2xRœª¶r‰ˆ»G-ÑtÝD×E3” ¸Îp`Ï\&³´„T¤|åý¦ ænElžÛƪx™XÅV]ÓK þrÕBÜÊÑìC‘ÓSõHÊ$Üe"Àíκ À…qñ€øÃÜí÷»h aÛ~ÏÃÚfû»µÈ¡¯ ®ÝET .{Š Κ‹£7'ŠçH Tβl]¦ ¥PàQ0€hÐç—¹n+b8žš™]4Ö–•$ªh”âr¤E^¸8•09ŒnP Ì#¶ôñ@D;;?9J?â!@x ÷8£î_Ž>!YÞŽFÐþ€Œ^4ݼ%xmÛÿC¼ï赊Ԁ÷*‡!€Ä0Áâ1Áù˵õLéší¦Çgnåì£ÕAHÊ6†È7|Ss™È0™L‡ R¢!íH¥Øjø×nPÉ7éNøÈWÅäFÂ_%×vÜPå@ÌȬ >¶Ü»mÖ›üáÜ & ·ìß}ƒ°7Ûmöwov€DDqdz·°q&ÛþŠkxEð8Õ‡܇½© #ŠtÇ. òN¥î˜7'µcf¡ !n㦠¨€ä«üɈŒš*VlŒr+,õ’FHYÍh¿è Nö6™táj}Kã»%²ÊÃňúæ¼.i­[Šù½¦JŠc;wI;HŠ:p$M$È’,٢كV­‘µÔ€ûÞ?r€‰ž1Ü*±Ÿ]&La+•ã;?,Ùîž^Ú~ʪ¶2ç°²) _˜* ™W–ËB$Âqª`cŠ=Cöä3èæF(þê»Iy÷DùÂóÓΤqÜÞ7ɶKÃ"ú*U„ÄbŠ(XÛ¦Ô™L¾tYï‘LUc$Ðê7]1Ûr,EL·ÐÜæÜ˜w ¶7õƒnÀØÞ>Ïs·Ü 9ƒ<‰G¶A“ âðbͪ`“VŒîy¶Í›¤Q*H ‹â‘ÀDv€n;mÅݾzýuœ¾vé㇠¨ºëºp³•–YcŠŠªª«ÆQS("cÂ"aÄDhóˆöv~b”?Ä€ñ@OïE׿?D>]F~Éù΀×î€PÁé³ýàÚRóÀoê[(P¢Ð,èQw…jÌÎS×¾ 4Ì €P†é¹}ê:,ó‹¾½W€Î€»_B7ï¿Ö›U§ëJ6€Ò6€P}Åû†ý¡ÅDy'M“ã /äÅ û_2mLá #0Zí^µ ìÉ}u($᥅09Ëp¹Y4”Yˆ cMžp>YÓ>]¿°^p²&±îQÆ—ëfïµg[‘Ò,”0dØS‘‰rߪrÅêQ«æŽRtÕUQT‡>C@©£×Œ\¢õ“§ Þ7P«7vÑe[9EdÎ &ªN1Nš ¡J `À@´ä2WÝï4Ðì&/ªUЇ"‡g%pÌ>hu2g;wONC¢#Ê"]ÀGp 8°Ý»†ûî!Ø"ãÜ}Р-…ÐóÔâ¸w‰üÖ“"Ϊp…Ýg·f©Á4VÈ8ÑD²mœìÇ1€:âÛñYš$Ó©p¥öÛ© ‡hnï€ÐæzͬƒGL_6nñ“Öë4xÍÚ)¹hí«„ÌŠíœ¶X¢EÛ¨‘ÎCÀ%9%0 •ÇH‡€-û  ¥wê›L¶SûCÙ }Ôã†6ãGr.4Ë=4èβ®–©&s´Åç|±ÉnÌEé !ä”IÒLÖ«QØ@CÅã÷„@Cß „È4K¾Â ¶áøÃzûP×%Ãn¨ªÐ³0k.N©eaåŨª\À~­C±p˜¨Ÿ9J<£¸n;oÚ¦Zñ»§ÒE Û¦ã™E¹ÔQ¥§%$RDê¡Ñ#ÇgÎb a(ˆG` 8àCÞýð|¡@x÷Æ€òPÃàýÿÀh š:?Íœ?~ÓÒû¶€˜ú@( €P @(›eÌ=‹3Þ<º16hÇÖ†QÆ·¤j‘7M‘}@GÜ–ÜÓ%r‘äd’' ¬š EPXœ‹¶Y".ÝT–!P)•®î†& ȳR×Öƒ3ÜŽ}(ðÎG æ&R93UÁûZÚ·¼P…ÃjÅÚ7|…Äq2‚r‚D" p³E[‹ö\´Å8§*EEÁ\y1ó4—I@e“d-ÅÑ8¤$0Ź¶çØ„Ìp`âO(úWNk%àí^¶þ° ýJä'×6ÊçMM€ÁÚC˜½½ƒ@sË/€§œ‚Ý£Ë[K`ý“×㓵³vœX¢WP‰­Ö¦ï0b¦A8 „©phʺ¸ã¢qÆ'!5EãŒ_†¬6Ë‘÷–{²\!Y$ÖåU+³g0”ªln@Ü£Êc I^èJêFiÃç½ia|vÙBGÑø¾À¼ò”»p6ÿ[*×+ëe¡Õܦ Ê¡‹Ú¸e1ø¡«Ã/‹gùŸ!jCQr…D„{-yBâë!ÊÀΫxŒs„ËBˆó{C\K€€n"cmXˆ¦0qQ±ˆøë–dTŽä›Fäe…>R¬˜î~Poj#°ìõq¿ ~ mï±Øûž}ç†$é £„¢¿ÊÖnwI¥ÖNd¶¤íA3›››”6ØLØ( vÓïD[ŠÖa4cûùž À6ÓÎs»–¾r´}å$ÑÃs,PÎd®•ìŠ/R(ˆl&À ?h'¢¡-9>‰¾µ]x\šÏ¿˜‹GiZóq¡0T{ÄÈU Ø‘2ndoR‘Ȩ_ý­.1î)zØrq -hÙömBY–-±oY–…µŒM¹jÚÑÖí·Ø9[ÆBÁÄ6E¬TzeØŠ 2‡ˆ´# €P £šãáÇ£¾#éq«,5‘ÆÊZ—bB´F°Ý®Ö¼²/؃%!'8Ë6*§bìR Ž·«ÁÒ ã´¬Í²nÑB»’ÏZoA¸&ñTSDâ òÛ…våWœÁÕn ì}ˆ w·ô>ø¶^«FžëCNXª9à¤w.î¬Æk…ÃD*Gë…lI‚¡·)\oºFñ”L a„<³¡Iæ¢5çÈ©¬€¸€Â8}䨬1ÊHÝ×ýÎËÁ)y4*á¹ÄE-Š`,/ÃÇ£só‡c±5ŠË›2&xÇ)Üaiä<­‘ÓvXunëBvƸ”kgÙ0°Î ½·sM· 5ÇùšÉÃO1&O¸oÉ KÖÝŸ¸šÌ5™´‚ÜJ=’+íÜ`ëLeH%ƒ´;@«¿ò$u'þ8ýXdoü€žÎܲ·<ÛrŽ@Ô.8̱ùgÃcøø›*Òºm×±#.æ×’/WžrtÜ52( @Dßœà#±KÚ¤h "{‰·=qTµš7Ô’ò*Û±kFX™û®Òßʶ›cÁÛÅ9YšÍ/+P(¯±3 ¶Lë*£!fáS/@RS} ½zã¹iWzdÌOQ–jNÝc{†MþÈed@*ˆ¤DâáLì}ÔM‰ È&A% Y€§LTäP¼tÆ‹4ÅᘷxÏ6éæE«¥Š­õC,Ä'VSöªŠcð…þ|{ÀŠvPxf–v™}ÕgFßÙVq¹ ˆõ`â.Š¢<ÇØ|,;Sñl;Ð:z ±œ2’Ïz‰Ônx~ÐÉh‹wê; Y’@AÝTÞÇEÇÎL¦™„ ð{¢mÌc L@-w§<â­(a m§|#æ×Å8žÛBÔ² ^MKÜN£atíéQq7<ñÃÉ5…ÛçG2®QC £¹¶í´€P @( €ÿÙplainbox-provider-checkbox-0.25/data/images/PNG_Color_Image_Ubuntu.png0000664000175000017500000002737112646152433027220 0ustar sylvainsylvain00000000000000‰PNG  IHDRX‡Ê‘'bKGDÿÿÿ ½§“ pHYsHHFÉk> vpAgX‡R(6-ýIDATxÚíwxåµÿ?3[Ô%Ë’Ü»0®6`° &8•–@HH¸!¿Ð’›7Ü„tR.7¤ßÜBHBBpé$¦Ø \0¶Üq•ÕËjW»óûãÌZkyUvf¶ê|žgiÛìÌìû¾ó}Ï9ï9J.STÙ[ 0 ˜oo!à³ÀŽl¤¢(Š¢xEÊÚþOUã€Z`.0˜bo¥@˜ XÀ èv¯[íÀà О¸óúÇÓrF¶/¤r”`,0ÁÞÆÓ‘F3Weôýf[‹€ÍÙ>pEQEñ‚qUÌN's€r’k—øsV¿çã›±õ*ð¢ýw#"ÄÒ"²T`e:à-ˆL´Ÿ‡­àŸXŠ¢(JÓÏZe"F…óˆ šø<þÚ^` °øð8pˆqæ…àR•=–¿C¬U~ŸW¥(Š¢ä- âÊÔÞÌ@Ü‚™ ±lý¸ØDÁ½È23tÊñÑ8WŠ¢(Š’·$ˆ«éÀLJ›w`¦ÄÀ(àLà¿{k€IýŽÑ*°²‡Åñ¾bEQE)hláR\Ü܆X°²ip‹€ï?Þ ¹Yj=QEQ%íØbÅ@â¬n.GVæEÀÛÀoÛVÔ6Bê.Cµ`)Š¢(Š’Vlqå–wב{â*‘IH*¤;‘•ŒFªÖ,XŠ¢(Š¢¤ [˜#.ÁŸçâýÊÀÔ°,°bòw`‚À;€_ ‹Êü©ˆ,XŠ¢(Š¢¤[”Ÿ¾‰ÄZeËÂá3 ÿ¸©˜eCÆÓÀ)HlÖûßpE–Æ`)Š¢(Šâ9¶)E\mŸCª“d VÅ ßDåÀ_7 ƒXgÏ?BÇÓ÷k; ٫¦·"‹ÓîiXQ*&K–¢(Š¢(žb‹« ð)².®_€ª ¯¡ê’ðU×óRñœÅÍ:•¦;¾J´é Ь)ˆÎþذ¢6<˜ÈR¡¢(Š¢(ža‹«âR»ž,‹++ÚKñÜÓ©xûUlj+£¨„òeR¶ôÝàÒî4ø:›5¨»P–¢(Š¢(^b ¥à¾Œ´3{Xþ ¥‹Î#0~êÀ,¢bùe˜%åÃÙéTûÜö&XŠ¢(Š¢x‚mÑ9¸)y㖱Ģ`šÁ"Ì’rÌÒŠc·’rŒ@ b1ÌâRÛr5xu@ÿØ)>?ÃÌ~2ð5 v +–Æ`)Š¢(Q„ÔeëÍö(¹-4ÊÏ åg¼Á²°¢½E%øGÅ_7‘`ýIÆO#0±£¸´/Ý‚a`…: ïÚBdßBWmÜ'Âl(bÑTl9p#𕆵Ýýã±T`)Š¢( ¥KÆqˆkgR÷¹lœ’˜À{‹ñ0Ï•QRFɬS)^p6ÅóΤhæBÌ’2Û •Ü*Uzúù`Yt½´’ƒ_û‘ƒ»±z#þÀ€ßÞ¹+f(KWA¤@õ H?9XŠ¢(#ÃÞL$éã4`.0˜ŒêìÇuH\€¨ÀR†À¶^€K®s··,‹àĨýÄí&LOáƒÁés L™E×êÇ)_ön‚Óç%}w¬«ö¿ÿXwGªG8¸x©aEížD+– ,EQ”ÂÅj€9ˆ˜šnÿ TUˆåªt} ÷¢Œd2µ)˜ìŽX ÿø©˜å£ˆìÜLoóA"ûv¤(°õ*ßu5M?û"Íw—ê+o$0y¦k`mi¤íá_Óµæqq%ö`Åy p!ðÓÄüX*°EQ —b$FäcÈxïCÇ}%=œ€,×í«hÎbF_õŸ˜å•þþ§éyýeÚ¾“¢OÁWYÚÎLåg¿‹Þ};h{ðW„wn¢â­Wœ6Ãç'rx/Ï>HèÕç±Â!'â ÄUx5ð°;þ¤v4EQ”ÂÅ@DVY¶D)h|ˆÀ˜àvG¥‹—3ú÷œ>€ÊWrdï6B¯ö2DXŠ¢(…˰֛+ŠSl÷à,ภl/]¼œÑý*ÁÉ'}®ìÜKèü×?èZýíOü‰âËŒ›"/Z1¬hÔ^!Ø·ŠÃÄðù$MƒYVIÕ;¯¦ô”sïzÈ]Xác§`—ÒzÿϽü øŸBI¬zOÊÚýõ5ªÀREQÅ1p ’áܱÅóϤ暯˜tÂ1/ù*ªuñu„·®'´a Ï=DÅòˉ6$´a ¡kˆØE¬½YÞ_3íxŠçAñÜÓñ×NÀ,¯:º¿ÀÄzë!òbGc±Ìò*›Ù½åa–"³ ￵`)Š¢(ŠâœZ`’3ÍþqS¨þÀlj«8E³Q±ü2ZþúSÚ¹‹Ð+ÏÑóúZbí-X1Û‚eçÁм± “Χï쨦dá2ÊßüŠç/Á,MÈÒnš ¹ÖKæ/¡úýŸ¥ñn>*ÖP¬î:4“»¢(Š¢()c»OEV¦:ÂQyѵŸ¼lÀ÷˜%eÍ=³´‚ÈÛèZó8Ñ–F¬h¯+ÃÓ” ãhbÒhËa:Vþ…Ãßý8Mw}“ÈþƒˆAÙÙï¢â¼ËÜ^–¹À¼†µZ*GQEQG˜Àbœ·Çb”œ¼Œòs.–˜©¤X„6®¡åO?Âêé÷]*+ý “hk#mýŠÃ·‚Ðk/ üÖ@ÊwüÅs/ó{rêÓpãhTEQeD3X©k ˬ¨¦â­À_=f€÷ÄmXMão¢gó?±z#ÎŽÒ0!ÖKè•çhüñƒŠ¬ÀÄzÊßü^Œ¢’¾ò;©DŠ@W©ÀREQÅ cN>hÅ¢Ï?“â“– h‘êÙ¾‘#?¿…ðŽ ؃ÄÞºž¦;¿AäÀîÞfPrê¹°@⻜q20F–¢(Š¢()aÇ_MBª¤†ea–”S< ¾QµIßmk¢íÁ_ѳu½·Î6Ó ´áÚø±Î¶¤oñ›BñIga‹p˜édP«KQEQ”TñS2÷•VÌ^ég¯ö³,ü5ã)YpÖ±è^ûOßëÔM7D#t<ùgB[Ö&Ý¿aú(Y¸ _UÓï/æ«ÀREQ%UŠÊ=‹‚áÃ7j þº øFűbQ|Õµ&Õ'ÿXG+íû=Vw‡ÓÒ5ƒc˜D[éxâOÄB]ÉOîÄSð׎w“ª÷̓¥(Š¢(JªÂ=˜<“Ò%ï xÖ)E%X‘0á]¯Ñùô}„w¿NǦbÅ•cShEöm§çõ—Ó»Ï0è^·Šè‘˜I„žYRFpêlz¶®sjÅš¢KQEQ”T1Ê^ ΘOÍG¿FÉ‚³íüTBÙYo§dá2ŽüìZþòc‚ÓæP|R‚«0£ëÅ'´,yI¬½™Ð¦5&Î8ÞRfø'LÇðù®^œ¢.BEQEQR%ÌHö‚,¦ê’(Y¸ìq§xÎbF½ïSDÛšèxæ~b]íG_³bQ±E{Ó~Vo˜Ð¦&wC&E3æƒÏ±ªT-XŠ¢(Š¢¤Š”÷¬eœ6‡ÒS– úáâY§R²àlº×?K´¥³´âèç{î– x3Í6 XŒðŽMt¿´2éËá%0ßÙµ©U¥(Š¢(Š’'&ÏÄ(*ôƒfY%‰õt¿´’XwG¿½Æp]>l ƒž­ë8ðå÷ìtd?Q–¢(Š¢(Þ‘BP¸Ôìg%Ê€¶:Ša€Ï‘Ì‹:Ï– ,EQEQœÔ¼Ó{`V8eÆÀëî$²‰õ}îÁ8~ÿ@»öË¢xÞ™Ôýûm`öKçeAçsÒ|÷mX‘°“½ïT¥(Š¢(JªÄ€V`Ô1Ï=[×ÓõâT,߀.¶ÐÆ5„Ö¯¢ü¼Ëð%Ö"4Më oßDÚMY>Á©³ L>1éËI3^ÃÃZu¡¢(Š¢(©ö${ÁŠôÐüûïÒñÌýI]lÝëVÑü»ïà«CÙ9a–”}Í0LŠêOÂð96)aøƒÍ>-¹KÓ²ˆìßáf5cX-XJ"ý§™ô„+Š¢(ùChèÅÞý;9ò‹/zõJN=ßè±Äڎнn]k'ÖÝA͵·R<{ѱ4MŠœ,ÂêNoª³¼’â9‹’[Ù¬‘7°¢Ž >ïP5ò"ÉáJì­©%5ÆÞEUØ…ÌTzìÇ@Ð1ü¯T”´S„´íxJèR q|+¶_Œ(и>z8¶ÍëdCQŽ%ìðUà ڸ¶GCÇSÅ𰢽ĺ:°Â!JN^JÙ™+0üã>œ|"ŧœK׳¦5UCÙYïÄ_3>ékÑŽ6)4íuz ûT`>>¤âùt )Î9˜Œ³·xDa2 VüÆr8ìö ÀVûñDt)J:ñµÈD ™(T5 ÏÕÚïTÐ×~ã¯Fðš€ÃÀAä&²Ç~mÒþ/-ÊC%R žàµAßa˜‹ëhMxÎÀ0M¢Í‡ ïÝFQýIÇ}Ì,¯¢âü÷zõ9bmÍÞ×#´bøë&Q~î%E%Ißnx…hËa7±öëüÀRIw?Ø¥³/ð«È ”‹Àd`u2/Ù>ç=Xœ ÌN@„–Óé@\Œ%÷lADÖû:=¼Lîß|Š€7Ÿ5«Æ«ˆàÌEÊÓì¿NÚ}xÆþ›iâÃYIsv7˜€´ë Àh$¸¶ÊÃï }%½ˆ°Ú‰L(^žCn0¡,\§L²Xó±Ã-м‚Œ9©~v0g}Á¤oŒËEL`!ÒGœ`!íù5Ÿ"×&ÂPcéqehLzï¥{íʤ  ä¤³([víÞå´àglaøƒ”/¿œàŒù¾§ë¥•D›9­‡Ø lñ_æ9<Ô#ÀMÀcÞ½§ÀçE8ë\]ÀG›M>PÌ.ÎC¬V£Óø}£€Åöv)°XüX…XrѵRüç7çCH»ÿ{¶OdÆ·"¿¿š€s‘þnŠí­˜‰´ß“Kkb*Ã[!å?0ÍÞÎ.C,Z€ÿAnþé¯ï‘y®."#ëæ“b çÓÀº?ëÞü‡‹ïþð,ûPø€·9ü|ø9ðT?XÿX# +j÷Ûxb’à ê¢{Ý3”Ÿ{)þº‰Ç½Å,«¤ê¢kˆìØH÷†’ç©JqÊŸr\‰YR–ô]áÝ[­_…Õvú½Û€f?0™:!H²Tù¹Åä†ã„.dðÏUâ¦ûÉÀÀû‹ÕhŽ?É%ˆ ²x+2þX‰Ìüs ÒæÞ´ýäv» 3Z§ý:——Šþ8±ªÆút$n*G•­›ùp)N´· €À=Àˆû¼¨"û·•¡cè’a ®b§}!~þ¹ŠLBœž_ŒþiRãbÍOM`†é#´a ÝëVQqÞeI㜂“gR}ÕÍÄ~úŸôlßà^dYP4g15¾…À¸)Éßí¥kÍßÜ~ßzà¹Àδ|ðÍ»9Æ åëw„…ܨ–WçyQ5åöq¬»€‡€¶l˜…ûv‘ëäj»Ÿü7p }7®\SCQœŽ¸eßü ±jå[hA.ã¦=»m˹Þßã±²Nïánί—ª Ù0°B]t<ùgJN^Š̤¤o+Y°”š¾Eóïn#´ágîBËŸÒÓÞBõ•7œ1wÀ·Föl¥ã™û$¸Ý™{0¬Zr冬¤ÎxàÛÈ «Üå¾ÒE±f†Äpüø¹?`)é£8“Ü·|;Áœ…¸8ÏC\KÚÞ•B¦qâ)2MB×Ðñô}T]|]Ò…% –»¤ƒðÎM}Aï–eKÊt¥eËN_uåËßGåÛ¯"0~Ú€‡cõtÓöЄwlr*®@bÚ^©¬1kA‹Š{* Q®Š«Dj€"–¬!® eäRè‚£ ±*ÿi÷ÚÞ•‚¤þ±F€Õ¤w+¢í_Ò½nÕ€Ö©X¨“Іˆu¶ã7•Ò3.À7z,Fq&V´«7"›my2ŠËðBùùW0ö‹wRýWX«¤ã©¿BÌqî+ Y³rÇ¥¤Œ f?DÜCßA‚â¥P™| Œÿ!ƒ$eT”<¦ YöfœÄ¦½‡÷Òü›o᫪¡hæÉǽ%´éŸ´?~7†iRuñuTœ½‡÷Ú°šðÎÍRûЊ†iâ?à´¹Ï?“À¸©Á¢!#´q5-÷ÜN¬½ÅMî­Vàqì•Å*°”LS|1'3Eɪ‘§¥Àmh\–R˜üYmê,#aÒ³uÍ¿ý65×ÝJ`ÂŒ£/E[i½ï‰µ6Q²è-”õvÌÒr‚Sgœ:;å¯ ïÞBÏëëˆÙ€YV…,¦í¡;ˆìÝæ6±é6D`*°”ì`"ÁÀã€Ï/fû€%”³ÿÿ2ãW”‚ÀN×Ѐ¤kš‹È]/=‰õ“Ï3úª›)š¹ ƒŽ§ï'´þ9̪Ê—_Ž¿ÖÙ‚Éh{3íÿ+ï%²±Î6Iz(Âkovw’7ð/ÀAÛuªKɰ q¡| ÎÕ›Šâ–2àß‘\Y·#Iš¥Pˆ¿Aò!Ns¾—ÝkWr¸å£¯úfY%íßÕÓEé’”.>ßQV÷XG+-¸¶GK`üTª.½’…oÂ(*¥çõut­~”îuÏ`…ºÜdß‚ä€Û£(óð¿Hè‡;SPÃÿà3ø*FÞ½_ÝD*ßö!|£RÞ—í¥ý©¿Òöð¯)Yôj®ù:º‰`Š¡­hú\Ê—½‹Öï åßÇêît"²ºÓ/®XW*ÙÆ@rf}wÉ%¨nFÊ›(JA`»ÄÂÀ½ÈªBwѦ„wn†X ³´_õXG»Š6¤ýÑßœ2‹ÑWþ±SŽŠ«øw™e•T]øQÊÎ~籯 Ÿ'‘\Ѹ{T`D"ˆÚîDnA:Ä ÛËH0n;’Í>µ/þgu1úȆí­i¿ñ¶>ÐoçÝH[O·«zð Äm¨ |OF[ðØÂ¢ø’áÝ=†!« îæð÷?IÓß ´q5±Î6¬pN!Iwµ,ˆE±Â=ô4l ²g+¥‹—˜2pÂy³¤œŠå—X>gv?ö'Š+PáH¡© ¸S›€=H ›Ç×O3‘$¡£šp‹‘zŽ3+SEŽÑDV¡lAk!ÖtS¼#t )dÿÝ´ó]ˆXÚ…´£¤nà@…JdUë($µÂ Èj¨:¤Ô–“¢àƒáÞ¬6ú¹{Ø\Ïla r½ˆ¼"œ¯ÄõxdızºéÙô/Â[×ÓþØoñÕŒ#XEõ ðUט0Ã'–'«·—ȾíD›ÑÓð*¡k0üüã¦}Ï@§ÍÁI!1~’ßño$éÇ*° —^¤úü‹À³Hñå½ô•AΠþRcí1¤£Ô#…nÏA2VOõø˜«Â¥kç²}•œä²Rg2[~ É"ÝJ_»N܆ËFdD½×þ[‰¸ñ–ÙÛYx›0´Iº»ŠÜÏw7}c@60ßwg¶/„28öŠÂ.dñÒ<ä~áÛ’eE{‰¶!Úz„ðÎÍt<ù0ÀÀè‹›²,,,±bÙ–,³¬jxéRŸê< ü ˆô·^ ¬B$„ ÚO Ö*Çiimâõª¶ØÛïr'.ÂÛb¨³O"7OoÌÌJ!±•¾”^“(Êš‘:š+‰Hɧ+‘É…W…°—ÛÛݸï£éd-p¶BÉÒ6Ü‚ˆ¹.wy, B Kº5ÄûcÝD› ¹ëðž×±z# Ózõ п?™¸Á*$:§WßGªœ§càîDÄÛg€CÜŽ^ºôÞ¼mŸÊñd¾]¼Ü |ø/¼ËÈDJêäzÜ¡öCÅ Ï#yßf÷0 ¬Þ0]/>Aä†ßeEÂtûD‡´Iì¾< IJ^ºó7€ß"âf{#®æ›k‘ø·Ì®¾–ÅóR”þô?·ÿÿ"RÀ eHUƒ'(ü"ØÊÂvö¿¶Ÿú:à,ׂÄb´?ñ'¢­”ž±‚À¤zŒ@ÞÆýt¯]Içskk*Ö>à ˆ!cPq*°ò™CÀ—€?Ý>qZ€oÛÇõMܑϑ¸/EÉ"À/‘œVŸÇ]º²âjÙ$)ŠçØ"+‚¸ØA&Ìn'%ΉEéZý8ÝkŸÂW3#$Ú|˜hÛ Ó7”¸Ú |±Êõ%®@]„ùL ²Ò.ÄUœväÆóC¼)2¸m§JîуXŽÿû4 ã€Ó³}BŠ’l!·d} Ϧ‰ Ó»'‘Ý[ˆu´`øüƒ‰+ x [¶¸½qå;¹øûu?@ª«» | é!%×8ˆˆ,·A¼ÕÀh2M¥@±Iø3ðq$oTöòš†¤mÚjÕ…¤n¹‰¹¶¸‚ܼA+ùÏdµÕföu2¬(¹Èßgp?e³€ÚlŸŒ¢¤‹„À÷UÀ5ÀmÈ‘\e'îrbu³RW KIëW¡Û•…eÀ ¼ œW¯ #nña­í„IÀ”lŸŒ¢¤“úÇãBkô~âfgûØèF¬Vþ8”pÜ)¡KI'÷"«£Ürš²AÉ]^Dúºa<’ÐTQ [¬„·Û•Àç€ x»ë”$åÑõˆ…íI Ç‰°Š£KI'MÀÿ ùn ,Á» ÚŠâ%Hý57Ô3Ð8,e„ \?.D¬Z«Ú¢™âb¸©úû9GV«D4Mƒ’nÖ"÷Rû0‘†ÿ[Ü»bÅk"ÈŠÞ¤`´ ÄEXLn­ V”´‘ `b +j··"Å“ÏC<K‘‰‡×“ë(RÇt%"èžÅ® êVT%¢KI7ÈŠ‘·á.7ÖÄ’¥KÉEö ‹:–¸ØÇ XÊ$.lVÔîEDÖ}ˆ¸š‡Ô¾] LE&!~Dt å…‹Ú[/â’|q>oÿ¿ »¿y)¬â¨ÀRÒM ™lNs±Ÿ*¤ƒ5¸Ø‡¢¤‹fdÀv#°&à.i©¢ä=vrR7á:{»(G&ÙõHŽÄz¤ŽçT ¨ßnBÈ ÅCößÍHÿlBR u÷ÿÎt Kɯ!®ÂSp÷WŒÜ¼îÊöÉ(JÚqŸ‰}rQ”M¢à±ÅV—½^Eî#F– +a‹ öéB–’ âV¬÷â!EéG±®vâÜ 5÷%¦¥ @åEÝN]E¨dŠ"æY7Ô é”ÜåÐêâó~Ô‚¥(ƒ ,%SìÞp¹ÑÀÌlŸˆ¢ @#î'SÑqYQ íÈJ¦èE²»G]ì£q*J.ÒŒ; h,E)T`)™"†º»)ÆdûDeÚq—FÄ@\à«(€ ,%SXÈ*+7,¥ì•Ù>EIBî`ŒFÇeE)´#+™d'’ŸÄ •èJ+%7éB¬Xn°²}Š¢xƒ ,%“ô`—#pA2ËWEQ”œE–’I¸_IX…”Q”\$“EjEÉaT`)™$p¹J´œˆ’»D&Š¢ŒpT`)™$†Ä©(J¡Cã¨EA–’Y"¸Á*GƒÜEQ”G–’I¢¸·`U iEQ”G–’h¶kEQ%§Q¥(Š¢(Šâ1*°EQEQ<Æ ¥+fEQEQp+°üèŠ.%óh –¢(™BÇÅnVRý]Q†ƒ ”¸ÜG'RTWQ%TÁl„’h –’I‚À—ûhCË‘(Š’9*q?1TF *°”Lb"‰BÝ`¡qŠ¢(JŽ£KÉ$A`’Ë}4í.÷á6¦BEž¢Œ´¯+Žp+° $Ð]Q†C÷.ÂVÜ ,·5ƒh6yE)øQc„âèvñy/n˜ÊÈ¡ïrG€—ûˆo¸ø| 0ƻˢ(JšðÂÚ\TeûD”üö»ø¼¬$Ôe¬Êp8÷«qZpoÁ²€Ÿ÷ypŠ¢¤Ÿ(°Ãå>ŠÑþ®8ÀDfón¨DD–¢ † ,B¬žN‰!–'·£Áݤ µÜ*J>àv2rÓ|Jʘ@Øå>*ÐxehLàTÄúã”n`ÇÃ}.­J4þPQò·–:ô§8ÀvâÎG=¨Éö‰(9ÏxÄEèf°k<8–^`ŸË}ŒF]edï«èZ€FŸ¯Feû$”üÃDVe¹¡QøŠ2çã\î£ x̓c‰â¾ÝEÝ•‘A¾ÇØvãÎb@Æ®|¿J†1q·š D\i<Š2`)îVâXÀ.`·ÇÁ}àk2¹P”B§w®ýlÓŽäÏsà $öRQ† Fê»9¥˜B~w@%½œ,t¹0°oÜ1¤Ý»aZ‡SŒ&¿WѵáÎE°÷U(”†‰˜N¸ÜÏ<4Oˆ’8˜ïr?ÀS“…´ù¨‹}”sÉïRøô‡\ünçm¸ŸP-@c.•1‘@·î’…¨»DIÎxàݸ7¯7›<<®&Ü·ûyhð«’ÛÄpŸ7nù¦ ÷‹Zj‘ •Æa)Ã&ä¾Ëå~êYhãSŽÅ·/u¹ X‰7ù¯â´{]îã Üg¦W”tÓ…»|‡cÉoeû]^?ð&4FI¸‹ÐíÒ÷"`¨Ëàã¸ODÛ <‚ûœm‰4㮊ˆ¸Z„ºJnÓŒ»Ut'ÿ! [qç&ôoA“j+)`ÒWJÀ­ù<ò¿*Þ>‚ûàv€çñ&=C"íÀfą⸉ÇR”\¥ w5g«/E>{(Ü ,€éÀ²lŸˆ’?Ä+„oǽ›p pa¶OHÉÎ>ŠûàØb½r¨ÛŸ° )í†%ÀÉ›¢xÉAܯ¢;we®²ÍvÜW¨ÞC~ü+$.°¶á>à·i|ÕÙ>)%ëœÜŒ7i ^Aâ¯Ò‘MzîÝQˆT÷¸’«A39ÅÎEŠç+a`îâ° àLà´lŸŒ’ÄV â‚q³l`1â2ÉgS²âŽñÀ-¸lÿŽ¡t°qº!›¡®%W9€y»áDdÕl>³÷5HëË‘¼Š2(fÂÿ+qï£\ ÌÉö‰)Ya,p+pǶ-§4÷àmp{"=ÀZܯNœ\ƒ–ÎQr“dŬ+ð(àýä÷äùyܯöïÞœç×Bɉ7Á5¸w—€Ä¤Ü€&eiŒ¾ |ob¢À_ñ6÷U2žÆ}|— ¼ø°Gç®(^Ó€;ëXŽû„ÁÙ¤øîà ÆÿÌÌö )¹M¢Àjz]îÓ|ø4º¤u¤0ø2ÃõJ`¬~ƒ»U~Ãa#ð"îÝàÀhÚ%÷؈ûç' –Ú|-Ó <ŒäÀsË™ÀW‘…Š’”DîÅýjëÕgÏ¡¾êB&\ܸ½ ‚íB›Ûüláø²ZÑ-€¯#V¼|^q¥ëpŸÍÜĽ—ÌO"|¸;°€W<8Ó¾·"ÂSQŽ£ƒ}¸ß£}WŸ~DþG*ÇâG‚^¿Ü…d4÷*Áþøé·^Å¿ïYÄEî“Û/“2püŠ2:€â~!SðeàmÈ8nÊ‘:€7gy°¿F$ôÀ‹¸N"²î°¯‡®$VŽ¡¿ÀêBnnÍí¿øðkàZ$Q[&‰‘žåý¹€…{w®æŸþ Ü„Ä#xÉFàûxŸ÷j0‘6êU)žäÚü€ë2x.v¡ä6ð8îÒÄ™ ü¸žôÕ ­GÒþ|që}IáÖrCâ._ôè8}H ;€/§zpŒ©ÐKf&¢Š’Í@V#7Ïk<ú)'r²Šã àIà%¤³{!€Œ~ÿF9n­¸àRà)` _aá½ 4AôLà{;oV öçðmd¦IbH›\…¸<½ î>=ùž@RNlÅ;áŸØîMÄE9 ¹i>:% Y1»‹Ý2é«K»‘6ÞŽ³voÇÀéˆ`‰3‰ñ^§"cÑA—ǾÍ>æ¹xW¬}<ðE$MÑJD̾@_þ1·ý½ÿ=®‰ÿšMþgÙ/X’ ¬$&å<ä‡óŠ"diëR$•Ãà_H§ßìD̶; ûxMûï$°x*"6¦ oÒQ+¡U¨å{jdžš\7›‘ŒÅ HÞ›ƒ;Ãée`Aâõ-B,S§ «B!×u\Ï'ü1ßgƒ7Awrm½¢ ©pp>2ãß¼lo¯#–ºÿ.ñön ¢­± OFÚ÷ ¤ÝCÚ|¹ýXc•þ4Âr“¿ DÛ‘Éùj$9ð¶®ø6o¿3~7Ç'Ü t "dÜ ,˾#+#½Â@®íIˆõm7°‰Û„»N¤¯$¸üö¹HÚ—:û:M°Ï½Ê‘±¥Ú~]ÉAò¡?‹˜<¿‚÷ËÎôuª³‘ ãÒ›<%ÉÔxÉ7TFŸ0ìýÅ;ìHZ½e 7ÔJúV²¬@®eü†Ý‹ÜÀãùÍØ“]_?r}G#A›EöVLz¬U‰Ä€ßßÅ›`s§ÇðÈÄâƒi8çRÄ¢:x+}í>‚Ü0“üw)EÄT€¾öoÿ>ûqº¥0ˆ'î½oãÇÙÛéˆç#Œôã]$ïÏ5öûýHû cÍPV˜)H˜ÉzÜ[„‘P„“I ‚½n_0Ò×›Éo² •e&>Á‹÷q3á/‚ý• 1Àê~…ÌL. }æG¿c¨E‚§gįgbñáþƒÇ@S¶LÌ1àQฯ è–6à‡HE‚¹iüžøM%Ž&(U2Å&ÄzóI¼Ÿú9Ö¥7Áãý›ˆ`y™ ¸åˆ!áÆ4\‹Äc.¦o…u š?kÄ0˜>ˆ,9OW™%;lÙ †ä^û,îkazÅËHÂT/rå(J®ÑŽX‹_Ëö8äMx—_±ø1/¥(ž3”©q5’LÍ‹ÜXŠ’H±\} ÒÏ,à/ÀÝÙ>EIëxC¯VÍf’ÙH(ƒWìC&Tk³}bJá1”ÀŠ!AÇßÁ]5vEI¤ hÿ²ª)×èA–¡ÿšìÅ„)Jºˆÿ <”íq@)â&ô2ïÞóHn¯|µê)9Êp‚åBÀO‘Œµ-Ù>`%ïÙ| ÐÜ®J'‡ù¤¯Ø´¢d‹fdL_íI‘ ²²Ù˰ ›7¡"Kñá®Fè~|Ì&€T ‡(’ßêãHÒÀl´‡ýˆ‹üG¸+”«(¹È«HÅ|&°ô¬ü{‰]Gá&¨V2H*Ë=»ÿAn¯fûÀ•¼âb½¸üŠm:ˆL,¾„¤Q”BÁB’bÞL~éã‘ò9é¸"i,D-׊KRͧу_,õ-ôY}:WØesõ^¦hE¬ëó{.Æ[ ‡6ÄŠõÿ‰^,ÏeFBÛT„^$ÿÛ5H6ö| ILš,ÄÒþ1à6 R¥}=8IXf!uœ®><‡7õ­r‘&Ògmé&?ÜdNèD„Èg1žoV«dô"˹¯A,Z)\7B¼€22°X¬k‘´‡Ýí.­ÄT*»Òü={‘DÛ×#ãWg¶OÎ<`…>cvz~Ù¾.¯#îÂ'kí¹Èª½lADÀ*$oÞ*Ò/°@î !%ÝV “ÅE9rMR%~ëAîk¯ØçµùÝ•4àU‡"Ù¨/DÄÖlûq.Š„.$Ù^;"· ¹HÃë@„B&-.eö6)ݰ©g5©)WÁ±ÙÙs‰&¤Žß À‘›ôH™‘ÒïGàx]À\¤i×­HɤHHÐ.{K·ûó|àœ%‹4%õ瑼Æ].pðœM4-$Îõ d?=H ðvdx*R›4“„ØÍHÆõ‡‘z‡mdÇrlØ×d bL8¯sq\!}½‹_GîoÃA+rë"wûQAàõŒ)^ïLdö3) 0‘cK(d I+qqÅÅ;ë$;ýVûÿû½¹ÒÐ D˜›÷L{;¹Žñº_5dg&C,S;‘²Ï!µ+ß`à‚ŅމüoÎA&ñvp±_'ô"©x›oD~¯mÈo¶éQä·ÌôÍj:p©ÃëbÚçò»,÷pY,Ãy镯@.¸h dr· Æó‘ßoé™<7!côĺ² ±´t“;ã3HÙ›yÈ=î dlžDzV6ErÝ‘UÏ‘¾¾±òm¢ïúYän¿)HÒm’…¸À¦" p&Ò9Ç"q¬‹cè@”…ÌÈ»Ø#öãf¤áí³Ÿ?@þûÑ«›öÄB8¹†“‘ªêc!;‰gÐC]o«ßÿ»é§Ûí¿ H'Þ‹vØdŒCÚý¤íϰÿƒÓƒ³vo!íú}í¾ ù}Z‘ C+}¾÷Ûÿëj(Å &"bâd1Ïãcùp'ÑQ¤íFAƒ½íDÆ•íäO–ù"`Òϧ#a“é\ãq>É걯Oé燑ûÞ!d ˆíçö"ý_É2í󯲷rÄúïÚµrKqÂHc³ì¿¤Sv“ÿÕ©P„X K·KÐ~ì³OFf\q!4ù ú #é°Ùó~¤ã¶"´¹¹ꂆta â· ù=â¿ȪœEj 4]®ñöo÷aä÷ ‘}·’2rˆ;ñv{F#ãy —ˆ=ôµÝD7V¡¬H/µ¯I%}÷8Ÿýxßs DDí¦Ïzµ¯KéÛ]ôõ÷\³ê)IøÿÎýLÈ¿ç%tEXtdate:create2011-08-02T17:53:47-04:00š·¸%tEXtdate:modify2011-06-02T09:47:23-04:00ù¦ztEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚plainbox-provider-checkbox-0.25/data/images/logo_Ubuntu_stacked_black.png0000664000175000017500000005557312646152433030133 0ustar sylvainsylvain00000000000000‰PNG  IHDR@„Ü&¢~gAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿ‡Ì¿ pHYs × ×B(›xZtIDATxÚíÝ{ˆUUÿÇñ³ÏÜoŽ·ÍK“þ4­lJË꩞é®EùhÔ“d‘R2EEaQ…Q‘aH!ID!’„DD""""""""‚ˆÈ0 2 ÃüÔ±rΜ³ö^—½¾ûò~ýõðtÎ^k÷r}æìËÚ…A ¤;H'`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€îä¶Ï_~ê[¯›2®µ¥¾¾ºº\¡ºº®¾¹uìä™óî{¢ë“ŸŽHwD€ ì]ÿÒCs&4UAUã¸ëî]¹nW¯ôþ ȹs[W?-=é;Öö…tIȤ×ùåRoøˆSÝÒnéÂÑ H«ž'k¤çú˜T?tRº¸@Òélg²Öiw+è8&]` ‚4êY˜¯*+.8!]d ‚ôé]šõø¸!g¥ ¨ H›¾¥Òï7÷!\NG¢ H—®,ÞyUIÕÂé‚• H•µÒsºgµ¯J—¨ˆAŠü>Vz>Ðð¹tÙ ¤Æ‰ÙÒs¹±¿K—(‹AZ¬ÊíWå ¸! ID€ ÖÕKÏ⢊Ëym!’‡AüÑ&=ƒ‹kþQú ¥$_ïÃÙY±Ý\pËé G€ ñ¾ÌÓ“*U¯H ` wbºô¼ c÷Hà ’íå,/º«/XØ/}D€¿ H²Ýy|rP­y«ôAþB€ ¹úrñ|¤`Á9é !@X[›¥çꄪ]/}h€K$Õ~~T´ Wú胒jo«ô$hµLÈ=Éómôäœ Å·¥òŽAÒô/ž™ScvôÁB¾ H˜=£¤§å©ýAúp!×$˧\=׬’>`È3IÒß!=#§ÎtžK‡ rŒ¥¯ô5í•>lÈ-ɱ…»¯L?’>pÈ+‰ÑÅÚ%†:¥rŠABôΖž†SlÒiéÇ\"@ Z¤'áT«û]ú"$Âæjé)8åŠKBä‚$xËÖ•>ˆÈ °Hzò̈́ټ.ž ×;]zê͈«ÎHJä i'ÇHO¼™Ñp@ú`"_Û]'=ífHõVéÉ\!@ ë»*éI7SnÆ‚GD½ÃíWŽ-—>¤È’V’ÎÝ+}P‘=$=ÙfÒLnç…'äÜ.=ÕfÔµ$ü @ †—GÅeÒyéc‹| @ d`¦ô4›ac»¥/rŒþk¥'YQAóÌ»žywÍš5o­x|v‹û[ Æœ•>ÀÈ"z'IOá‚êïZ_rŽië¢qŽC¤ù„ô!F Ð=NzSu׎²%9¹¤Þi; ‡¥2²€³¹]þªñ¥ÞÊeùÒiYêJfdÿΕžÇ…Ô¼2 ®Ì†Ñ[«?&} ‘u¼ëÉéïà¾Þðâ¬(ºk°î¨ô¡FÆ ð­w‚ôL.£îÇHå9Ôæ®ÉÆ“ÒÙF€À³þ©Ò3¹Œ)= 4p¯»F›NKnd¿®‘žÉeÜ£Q£÷ÜÝÒÛÚ#}À‘eüš-=“ËxV«HÜ%Èø×]C¼ºUz&—Ñ¥Y¦­î.¥·õIsdŸî–žÉe<ª]¨õî~ƒLem^Ä…GK¤gr7”êwÍÏ•>ìÈ,þ¬žÉe´-®~‹»tJxdo¾Èçûk‹Uë¼Ã¥±ž—>ôÈ(¾üêðë4YiX¯ŸÝåm°Núà#›xr°Zz&—1Ú¸bïX+þ"}ø‘Iüèi–žÉ…l3.Ù)‡?ÙªYš1 @àÅÀDé‰\ȵE{Òa?šyÉ-Ü#@àÅ|é‰\Ê‹¢õV9ìÈÄ‹že ða‰ô<.eŠUÙîuÙ•ùÒƒÙC€Àƒ¤çq1_XÕí„ÓŸÿ#= 9â·3§7ð 5–ç&»ìL°Az kÄîtô<.æ.ËÒ½ì´7Å=ÒCC€ v“¤§q9›,KwÖíÃûç¤Ç²…AÜIÏârŠÖ áŽvÛ¡ÙÒƒÙB€ fŸJÏâ‚&ZWoã-“ÈñÚ“Û èËà¾ç¸GÁ·ÒYB€ Vç¥'qIoZ×ïO×]ª:$=$!b5SzµÓ¾€Î—Àoå·p†Aœþ+=…Ë굯`­óNÝ&=(b´%Ÿ¯úKà „­î»õô°@f ˆÏ÷>§JµƒŽsß­â>é¬ @Ÿ|_)jÔ°-†~fa^¸A€ 6«¥'pi.~Äòÿ"題 @—ýy~ä’*UŒáV¡ü =8 b20Zzþ¶e«ÇN»¹³sÉÒ•]o­¹äí—ÞÛõSÇ4TEº; è Œñ¼ ¸ö¬ôð@& ˆÉ£Ò`ªØ8åΕëwœVïÞ‘M¯/¼~LÈ+OG+•JL÷!Ì‘Èñø1…wð£ç¿ðÍ1­Ý<õõ²Z+ž«ûɺŒq•ñ-é‚, @‹î”ÝÁ4Î~þ㛓¼»`t¹™Þ~–Þ×Hd‚XÜ(‚Öo8o½Çý›_" ¬·úFl{=†{yaAÖJ‡Bd ·|Øíl·{¿œ3|’¶Þ¢ëåܯðŒäA6 ˆÁéjé\ˆ$˜ø’Þpg‡5`ÿB©¦÷~·Ðè@v ˆÁ\éhˆ2N}³'†]oÖȧ–[;gÆ Œ d ÷6J‡C¨`üŠSñìûðå[®·ÜÚ˱Váeï#C€À¹óuÒù¢î‘£±íüsÃZª¶¼RËsè+ÆWäç:¥B)˜þuœ;_rßíûVÛs-®õ:.=\û-É6=íàép¥úaíÙ]gøWÜåøÐß°@ pl E:$*›¸1þý¿{x“¿[lêTìËQÖ°&l pìI锨$¸}¿ý/9‡5ÑbSwÄ_”[< d·ö$ôV0Ï×ÚÃÏa6oè¸õð¿õTd·by’½Æ“Þ*ðàð–G߈åå…ŽÖÏ:"Ç8õ¾tRT²Ù[ N–ü{Äp;küf©·Â {¸Ô›ØExÇù+BÉB’ÁoF[é®ñS˜¢ëÕ\#\Z,•}ì­»JZn0ºÕiНÂÜè­0ÈNðkÐk{½•aZIÓW\g¸Ë_e~ñ8B-šc?›ÅÇßòåÛJ›¾C{¯{,ŒÇ³{Èîl‘Î¥â o…ñÛ57°ÊkeÞõ;LÜ#jwz+Ä™ªÒ¶ïÑúþû~¦©µ#ò‰3ïH'Dˆ`Ÿ·RŒ<5GãÌS¾+ó¨ÀhA på¼§ûN#)û'|»¿bŒÑø¨Ã¿Úçÿu\AԾà pe‘ÿ˜¨¤øÆÂ²ÿÿÞŠqxÄI¬BõG‘¾¹½Y `×I ¤G¼¬Ü͘ýƒ½e_j5Ú_9¾,Ó|{ø œú—Ȭ%f³h0ò‹#7‹L|e‹.®>õiÙÿöŽ¿zl’¾Jº¥¹Â)¿ºùß TxtÅŸ¹BuA: °Ó/û&ôðüÜ^nÂöü4á0=ëîÜ4líöª ÷~ò×2Áÿ­gpB®.HvÞï"äÇààmå¾ù‚táz¶}´æ®®®·þdÏb="]¤ ;¢O8̈ô;âl¹ëèÕÝQ¾*âÉ’Vû{g#Ò•$'» '»×Ê}ù^éÒU4pdQ_—Þ}¤+’o²m‰ü#¢Ü¢êÁÁðïýùã‡+Ο1½½mÈ´ëÿõø ŸìŒûôÞ±‚Umyç%l|ˆ°îXänþZ®›3_8µnÉÜ uw®zÔÿ=òAŒo¦:ÓX³ÅßðAÚ °ñ¨Ü™…yH/¤C£E&¶oí:ý“ç_ó}‡È/½jÁwÆ#=˜9(1­n²íö,Ï.®°®ôƒ"•¶Ljä3‹%fµÚË^÷y¼벫m¯„ôû=ïvÙ\é†4 @`ÆÅòƒÚ¾¶ìô¾Q®þƲ׿IœÄª–`HF ÌiÊ—ÐFñУ -û-r'Ö÷ÒC )@€ÀˆÄÛ*ŠÇ­ºÜ?_b¾dòY«žŸ—xñ£á‚1ÈFÆ Li¯Xõø˜ÈI·Ëj~¶êû×]®•bH&N œ–mÕã?ê&á×Zõ~š@—‘dH>&^ö?Ÿ¿Ùtø+¡ËÿtÿE›îèþ½Òƒ ÉG€ÀÄTÿóÙ-6ý}Uì廎&ä¥þûÛ,=È| ôùÿƒ¸hó8…ß5°*¹Îâéî>ë臥‡/üÏfÿµèîþ»[Ö$‹w¾ç¿»ÏK3$·xŸÌêMß"uA‡ÿ¹·‚‰/í½·“¤‡ÿw4½gÞÙ;¼w¶²É毙Úè½³E'ïÄB– зÛû\fq ¯ÌZ„•L3¿rµ÷Î~)=ÐtôùÈã¾>齯j3d»÷¾Þ!=ÐtôMñ=“1îê ÞgÝ0æËÜzšy‚¶ï7ñ®7íêÛ¾{Á#¦;ó»÷®ºx'/²Œ¶Í¾ç±±¦=ý:ÏŽ´ÒtwÚ}÷tµôPC жÈ÷’¾ÅwGI6$]?xžÄj o|}Ì÷l«áÃÚû~§ÉkÒƒ ÉF€@×#ž'±'̺ù]"/ ÿ¥Ël§ÞòÜM.‚@‰®6¿sX±Ç¨—Ç«=ϵz‚_öjÀó¢¼õÒƒ ÉF€@—çK Ìzé9æ´5˜­«øÏÝäI¨ Ðô›ç)l¯Q/ŸñÜK}wí—ïw ›ÞÀ€| @ é9¿3X›Q'w'úÈF{6Ûo'o—nH4šfùÁ>0éãÀ(¿4RÓm²k?ûí¤ù*dÈš¼N`ÕF÷ð.ó;ËšgTÿF¯},Z¼†ÙG€@ÏY¿“ìm&}üÓÿ+Ûü`²sKüöq›ô€C’ гÞïüõ?“>NòÛGc&Þ÷{yçYé‡$#@ Çïc„F§à?ðÚEOšìÞ5^»xô€C’ Ðãw©ç zØ_﵋6Š&Y|ⵋ¼T ôx“ öi¯¬“5±ü.fôK8$-=^ç׫ zx<%WЇüf°‡×yí¡Ùš+ÈZ¾õ:y™œÁšïµ‡¶¦ì¡ßsX«¤‡Œ–§|Î]Á)ýþ™‚gЯ´Iû½¾hñé!‡#@ eŽÏ¹kœAçùì ã öq†Ï¿9@€@‹×7<ƒp$e?@ …ïõwòCŸý«–rH0Z¼^¡>¢ß¿´ý)&êïd¯×”<-=æ\tñ9s5è÷ïXê~€ ;ôwó*ŸýûFzÐ!¹èXçsæ2Xë~Ÿýsd¦þn.õÙ¿åÒƒÉE€@Ç>g® ÚÝëóz’#ÁaíýÜí³7K:$7zœ¸ŠúÏ@¯ö9±:ó€þqðùjt“ûÄtŒó8qMÖïÞhÝs§Z?)çzì^­ô Cr Ðáó/ßZí·¡o÷Ø;—ôߺøŽÇÞ±*"@ ¡ßëMNÕºË0uøìCúï}?î³{»¥‡‹†?üN¬ÁZ­Þ¥òú%‡´„ÏE‘?‘vH,>r4%U¹ñɾúyû¶ kþ;wlåy?øL§wŸzœTÝZª}$fzìÑk¯ 4<é`: &?½½d³,ŸZáÜX°Y£w×zœTÝÒkÓ ½›'=ìX4Ø/•Þúü™²[î^5¶ìç«¢Ÿ€ïIáSèÙ©{$vzìÜÕÒÉE€@ÃTË©h’jåÀŸÊn½îxÔνêqNum¡ö¡ðx½‡·Ú¢FYMD£¶…l~û˜2ßjzéSªs-Ú‡ÂãrXUÒÉE€@CÅ4TŒòzÁ®2Xß­o~_îšöÂ÷{ì\Ÿô¸CR ˆnÀâ*CëþHM*s)dc¤onô8£º§ýê“×uÿ…ôÀCR ˆîÓ(èÒhåÍ¿sþ/Êך<Ψîi_g°ù5¨ëe釤"@݆P°F«™u#æÆ¿tÌß|‹ŸuF³¿¾=.=ðT¢{Îlþ >ÕlçëÒþwýͧɘ¤=>‹nðf/ä‚è0›^ÓnèýÒM¬ ýÊmþæÓXh¿}¡¿¾ÍxH*Ñ™½…ÂäÈ3%Û¨½?Úß| í‹ oú믔B¢3z}’QSí%[y)äó~šÃÍ ýä¯kMÒIE€ º1“Om¤{pGè©×›Ã6û›Ncò†n…üu­Fzà!©D×h0ù˜>Cð]Év~TüiÓiLnÕ­¿Õ°ŠÒIE€ :ƒ•Lf7VòzÁvõ§oô6›ÆeœnZüõm@zä!¡D§¿ÚTñ¨qc§†ÿ…¨Wå«Ýµ¤Ñ>O4Í_ßNJ<$‚èô/TwZ´öèðM=¥ü°Í2 Ñ£YŸ›ýum—ðÀCR ˆ¬[{â)š]AÒ3ü'Èh·]Kž£沇“Û5ä‚ÈökO<·Xµwϰmªó([üM¦±Ñ]qj…¿®}.=ôP"ûU{âÙaÕÞá[­øhšßFø—‡4˳Æ_×Þ–zH(‘i/Æ;ʲÁqö¦º¡ëQÝ®%ÐõšÕùÑ_×XŽå ˆl½î¼ó´eƒ«†m­^ñÉùþ&ÓØ´iVç€}“Qi¿î 9A€ ²tçÝÕ9J¾¹îÊŸl÷7™Æ¦qؽ`÷öíÛ·m¼à£5kÖ¬îêêzqétvvÞÑÑÑa¶2™‘%ÒC E€ 2Ýåûj­[l¶½¯+pœfשú‚bptGFн<ƒ¼ @Y—æ´su‹ó†mï™ÊlÐì´Ü-=ôP"{VsÚYnÝâð›«æWþ ¿u¡rI{.ä‚Èt,Ü`Ýâð%Ë Ãë/² vÏó »Dö¤æ´sºÅsö×RùƒÉ»l)7I=$‚È–èÍ:.¯¾rƒŠ‹òÒ3lÆÝ(=ôP"{\oÖ©vÐdÝ•¬œHç¥gØŒ›#=ôP"{DoÖ©·oq°ùÊ ?vRz†Í¸YÒC E€ 2Íå_›49ì%º•äô ›q3¤‡ŠAd õfFûG_¹ÁÊrDz†Í¸ÿ“zH(‘i®Xhÿ zÉ[Ø+_9-=Ãfœý#¡È&‘-Ö›uœ_D¯ªø±>é6㸈ŽòD¶ToÖ ì[þ„¹âª¼ô ›qÜÆ‹òDö”洳ߺÅSö§x©-ƪCzè!¡D¶LsÚù̺ÅMö7µòYÊ$V󤇊AdÏiN;K­[\9l{ÿªüÁjÍ®AËmÒC E€ ²—5§ÉÖ-þß°íuUþ`“ô›mÿ–zH(‘½£9íTY·X;l{[*ð*é)Ö í‚1­­­Íõ$êíR‹¤‡ŠAdŸêÎ;¿[6¸øÛWù“ÿ§ÛµR,6|üèÑ£{·oßþÛÅ÷Û~²fÍš·ºººž÷×µ'¥‡ŠAd_ëÎ;÷[68üÁ“&Å'ïð7™Æfjäº Ùí¯k+„G’ŠAd›uçÛgч¿¨VõZ<ÍGTi~äº Ùè¯k¯ <$‚ȶkO<ßZµ÷Ëð}¢øèÛþ&ÓØ,Ñ,Ï»þºöžôÐCB ˆLÍÛiVí]7l[Á9ÅG÷7™Ææ]Íò<ã¯k_J=$‚Èzõgž_-šÛ3ü¤)ªÏö'âf%;hÖç^]Û*=ôP¢ÓŸ¥mÖŸ;|S¯(?\«Ýµ¤ ú5ës£¿¾í“yH(ÑUéO=æ»îWÅsÊO·ù›Mc¢ýÇ«ýõ­[zä!¡Dgðgþ(ãÆÆ ßЭêOÏ÷7›ÆäjÝ5Ú·‘‹u•‘I¢k6˜|L!x£d;{ÔÑÛl—ût+äoÉ¢n×¢g0ùÛŒšÚYr½eRÈçwy›M㢻vñ1]sñnId‚èÚMfŸÆó-õµ”lemØ7R¿ û)Ím²o2ªÍ®!7Dgv¡a¦AK%w`Ɔ~#íË)jÿ•¯»6²…‰ÒIE€ ºGÌæŸi7´°tá7sÝço>E»nîõ׷뤒ŠAt« ' ÝE:V”n ˜Ïýͧ±x^÷`Ló×·»¤’ŠAtÚë¹ÿå!­fž(ýzðgø—ºSþ,ºö³zõþúÆjAt[§ yÑ[¹kÄ·GùÚj ´/ôz Ì7¤’ŠAt'Íç «ŽFlãĤß)} /Ð$„ö[Zj¤‡‹†–SQ±óLÅmw/*»ØïÔÈþ®ó7¥:§½b˜Ï ´J;$ wYOFÅë¿+»åÍ7•_+¾9úJâý«Í'EÔ[ þö“ÇÎ]#=ìX4<ëb>ª™Ùu`ØV½:»ÒÅ•ºc½ëð8©ºu•ö‘Xê±w·K;$ ë]ÍIÅ–ÿ~üù®‹;gŽR,ƒX«õxÝ'U·^Õ>SíÌtE~d ‡üΫ­š+Ôz|8Û©¢þ‚ÅÕ»÷•ô°Cb Ðáu½Ýü¼ßgïÒ_¯x¿Ïî–uH,:|þßÚ£Û»Ã)]ëíãÐå±w¼Ð Ð1ÑãÄ5F¿{í»çŽÁûš<.Å[htH.:Ì^)e&8£Ý½ï;ÈMX¨Œ¯üþÐï`Ê®‚õwñ”×ç%ï•rH0Z¶{^ Îa¹Y1Ø›› öð%¯=ü@zÈ!Áhðú×o³IÓô,H ý"A¿Ë°Tèiñ:{œÃÜേv3Ø?¿g°ª¤’Œžë½N°‹Lºè÷/tµú븾赋㤒Œ¿ÏzÝCº'5‹ò®3Ù=¯OæK8$=ÛüN±ßšôñN¿}4Öf²søíã›ÒIF€@ß«è…&}ìMÇ« ‹‡LvnßNÜfŒü @ i´×ù+8mÒÇïýN²†VšìZ_•×>VK7$M·úe—uò&¿4r•Ñž}à·“WK7$MoùÁ ^×wÁéä/‰,‚uÁÕ~{itrƒ¦ƒž'ÚÍF½üÜs/õ½`´_{=÷ò+éá†D#@ Ëó÷SÍzy¯ç™VW»ÙnÝì·—AôhC¢ ÐÕîyªÝgÔËqž»©§Æèæ¿o¹`”ô`C² Ðõœç¹öv³nî+zî§Ž`ƒÙN=ṟwH6$]»=ObÅn³~¾ï¹Ÿ:–šíÒ@­ç~~*=Øl´ù¾Ã鿆ý¼Ïs?£3¼2øžç~r j´Mó<Õö§¤£Q5þ¦löÜQ“åô‘'´-ó=á>kØÑó~׌ªÆôk|÷ôV顆„#@ m¿ïy¬º×°§G’ø~ÛâvÓÂûþRøBz¨!áèó})·ð¢iOJÞ­XÁç¦;³Î{WMƒyA€@ß ¾g2ã« ƒ÷nWË>ÚwWÍVëBŽ Ð÷®÷Yw•q_?OX‚,7Þ“¯¼÷u±ô@CÒ ÐwÆû¤\k~2ÅÚ©˜¼ý2ïW@ ¿K4$þïn²øcøUï­ì>óÝxÍ{gy 0°Ðûd1ïí§‰9‹õ„ùNôø_ ~Žô0Câ 0°ÝÿÜ{“Ew¿IȽX+,öáÿÝ]#=ÌxLx¿‘·ì²èî†D$ÈÓ{pÌÿç¤G‰¹þ§_Ã÷‚ ùÑï›ÄËÎÇïÚìÀõþ;íÿô ’`HfΉ<›7ζۭž;Üb¿ át‰BöI0¤Cí"óšéÛm/{Ýooƒ¥¶??ß©3÷`! †>™ØŠV×v=¯HØlõðà“"'° OJ/¤Cý2«ƒXÄú—ÏžŸ³ÿù!õC/8*=¼ LIÜÑtÁóïôù Èœã.Šü‚L‘mo˜FN 0åÿ«CÖ÷xœ¿NNßí¤Æ? =ûh³ðPn[‡f÷££ŒºRßñ•‹g·[)WZÛ×— ?Ø+7ͽ§ÓÏ}å®GÏù¹3ïwèý©ž¶ÒàzL¸ÏÅÞžX¨•JH#6Þ›æ Á×ýœ\n^ôtüƒû&ÕFè@õ„»?ˆkɨÍrù¡ûÛyF€ÀF¿ØB…BñçÈÝü¬Ü÷;Uß8óÍ‹w_ÓR~½ÈbCÛMO£}_Ã.™…*/ Žy;ÈVî–›é UQ×›ê-·èJU¤å:Žm[ûêKwyôùw¾úÕt%•èŽFù—i±ï²ƒ•£‚çZ µG¢urQ¹/¯”.]Egånà½À݃ôÈ>vfHNv‘~ (r îoœr¤gŒdI[¥wiB€ÀÎ6ÉÙ®Ð|:B§•ûæZÙ²uÿôöc·t\tÿòw¸òrþy©b†¼)[¤ K£Eç»–ðkÙ_”ûÞ¹‚ýðöÖÒGø«ÆÝñÖKÿµ¯M´ž5‰ýa†$"@`é Ñ ¯0*,AúʾSãw¡jí¼¿¥âU£¦‡þìŸ"[·…ê‚t"@`i@ò–¡ ZϪû÷x¹/]/RªÓO5…ìLƒèõB¡çÍÉȶ–ËÎy…ÖSªÞ*·àc1®Uv\'yÇZ4 „ÆRŠ­ó‚O½]Ò¨º›·½Ü7NÔü6I¸JQ °¶È~æ²S»¯bß6”û|õ9ß%:|t"™#:Ž>¬{-È_ª6WèZÙgÐ «=¨oQòO^]õÑ~`{ ¤'¾BñÇò={¢Ü‡›=—ç³Uâý›"=6ìÿ RÞ.×±#e;¦³Œ¯ϤäçG¡°Sz !m8Ð)=õ]p{™~µ—ûàT¯¥9†‹çC¦K#¤NËÿ)fœ/íÖ·å>üá³2ûl^”ëW°Kz!u¸ðôìwQãá*ÿ úm>ëò½ô-ÎfI"¤º1QV?¬SO—ûLñ„DzlNÂ/³ˆ‚}öû‹¼!@àÄcÒóßÐ$¸ìŠ.+;{ÿÇcQ~©œµÿýæÚÍÛ·oÿý‹—ͪ/È“YÝéF€À‰s‚ï¶½Òµÿ¼g°ì³{µ½þj²£Âϲⴕ–|ôäÛíÂ?V‚CÒC)D€À¥²óßßêw\îÐ÷eÿóÛV;©ewùLmYÙSöã}ï—¬[‡ôB pã|B~‚‚U—ú3Pö½°­þ Ò]ö¼ÔUß+¾ò¿ëÅ ‹Ž¤G–IÍ}#L½xüÙ²ÿé{ëÝŒlz™æG‡µ¿kZAÆ|É¡ƒÔ"@àÈù¡¹o¤ê/O”½¤p¿r¬Ùzðt„ïm)#?@`„+k$f¾ n+{=Øë­ÛFžŒjÝé›gg Ôë1©Aƒt#@àŒðÛôÂÝn¿•y†q^_Ô/¿èýJH]ä¾W"@àÌ6é€QuÚ[))m;x]ãÛ_ù¾¥÷#ïcÙ@€À9Ò¡å„ûKCŸh}ÿ7¿öó=PÜ9–è•;êû½brIÓÁZÍ lóYÉàw¿ÃÙA€À¡ÅÒ!¡ò¡·2|^Úô»Ú›Øâñ:È\ŸC™B€À¡¾:ûé,.Wù+Céÿk°½¦xÒ_e1\úH:&*Ûê­¥‹¨L3ÚŠ·—t=á­0ÈN‰®ç¤2Ó_ ¦ o¹ÊlùV?…ñxi™C€À©í }xñ¨¿”4ý…ávþðSÊuÞ ƒì!@àÖ-ÒQQ^ÝwÞ*0oxËf'°.zÀGa&z« 2ˆ[çj¥³¢‚æ7¼``ø3/úëó°,V‘E°`c_I'EEµÏž÷¿ÿ6ËÜ®Œ¿&Ï{È&®Í”ŠÊj–ž}÷çkÑj™Ûø‚ð :¬ pí¤ßu8ô37Å»÷Ã_¬uÕÆžˆ»øÈ"ν#jõ‹Ç¸ó?oÌ.®NÆ|#ÖB¿™C€À½IÒ"˜úyl? 7|½åÖÚc­C€À÷%zQÅKªfÇ”!ÃßI{‡åÖ>޵›ý d ‚$çýè ÁÔ7Ϲßõá×½m×OéóÖ­"cYB€ £¥Ó!šâŒ×ÌÖ©èذíWYoo\|;_Û#36!âð[BW4)£éŽ/]½Ðµÿû‡‡/`Õf½ÉEñíøg²CY@€ ÏK炎`Ââïz-w¸oÓ¢ #.ý¹ÖŽ¿ñ±®Ï¶ª¼s‡~þà©[§4‡Íî=öe¬g»¤‡2A\H½b]k[ÛµÓo츣ó’;çNŸ4¶¹6ꯂ¢ƒ*ŽŠØ–ž)ÒƒÙ@€ .½MÒó¿4û»xÛâèXÍ)éÁl @›é¹—75ŠxuûZzh #Ä'U÷òÆ ÖA ãør§ôÀ@V ˆQÚîåuÌÅ)¬ñî»Å¼p…AŒŽ¥ñ^^w%lqÞ«âéaÌ @§mù¾ âàý‡î#ø#éAì @«W¥çpQ?[ׯßyß#=$!âuƒô$.Éþq½]®»Ô6 ="!âÕëþ$~zÌ·._—ãÕž”È1;P%=Ëc]½¹n;l“Èq[/=Ë ºm‹çøiþ¥²…A쑞Çå¼cYº}n»3Gz( cÄošô<.f–eå–:íM‹í[³€áÄïT­ôD.¥ØcW¹Vû.\Ñ™ÝÒYC€Àƒ½¹½¾Âªn?»ìJ°Iz sø°)¯O¤·Z•mŽË®Ø^F @àÅ;Ò3¹”/-ŠvÂeì.•È ~¸½œÍ5»Éa?®—È"ž\/=• 1_»pà XÂ1 @àIÿé©\FmiŦºëD£ƒuør¶Qz.—q‹a½V¹ëBõ!éƒl"@àÍ¡œ¾^ê£j,:ë@°UúÐ#£øóC>oæ­>bP«ÞÑî:ð®ôGV ðh}>¤éœ~©.ÿòªôaGf ði]>¤]û-N¹küY郎ì"@àÕùLišwÑ>ì®é§¥92Œ_¯IÏå2æhýyÔ]ˤ8²Œg/IÏå2&œ‰\¡¾wÍÞ%}¸‘i|{Fz.—Q¿+b}ŽŽq×è<éƒl#@àà ÄiD»ñ¡Ã§eæJjdÿ^"N•1¿‡–æ¨Ë·7Îоù ÐB€@ÀÍÒS¹”Ž*ërö~wŸ û¤3²Ž„{¥gr)Å›ÿ¨X”“8}qã,~ nD,–žÉå\õÒérùúZ·ÈÜ@~ vd<'= ®Z´¾ûŠZ üþÜT×oï”>ÀÈB^”žÆ…ÕŽ™qWggç7\ÓÃÓùÒ‡¹@€@Ê›ù\ÕÄ‹ÅÒù@€@Ì»$HLž“>´È r>'Abñ¢ôE^ ôËÇ0$xSú°"7Hú–q-àýƒð†¨} ÒnÆÔü&}H‘#d'=åfJÓa銌ÈI°§^zúM½ª¤"ò‡A"qø"ð\ªß)}‘C’a Sz NµŽ^éˆ<"@ŸðTº©ày郇|"@»x*ÝLõwÒ‡9E€ 9ºÛ¥§âTÍÓçB€ I–JOÆ)ÔÉÓƒB€ QÖñDˆž`µô!CŽ H–]ÒSrªÔðô H˜–ÆŠ®ƒÅ!‰Aâ|S#=/§DÕÒ‡ 9G€ yβÂ{ãJ(ä‚$z•‡ ÃË¥@€ ‘°6–ZýVéC H¨…¼$D¡£Gú’k=×Ò+)¾!}p€‹$ÖùN~„”ÕqFúЗ H°ßFIÏÕ Tÿ­ôa.#@d˹k¸ ó¼ôAþB€ ÙöO‘ž²eÔïÒø‚¤{‹õÿR\ÎÊ»H‰wºCzâNˆ)¤0 ‚ø¬^zîN€êW¤P‚A tåý)]R 2)׿f¬ô¬ïLëê~ér¤ß×Ù¸ž>îSéBzdÁñ¥µÒÓ¿¥ªÎ}ÒEt ȈµmÒ`¡m ç®B2cç‚t^P/ÞÀ’%H'Y²qzÚ ¦ðã©E€ [Ž-i–Î õì—.`ŽAæ^Ú$ ÑÒcá.éRVdÑ·ÔHÇCˆªÙ_HW °D€ £v,LîïÚ[¤Ë8@€ »~º«Q:*ʨŸ÷µta7dÚ™ÕÓ“tooqz×aé’Î Ⱥ¾/oOÆ‘úŽÎIp‰A}ùÚjÙŸ“Ÿ; ]À5yqpu‡ÌeõúÙ]¬s…L"@'_ëhñù¬zÐ8ç…=Ò; Ä…AÞôý°ôšzáQ;yÑW\ó@¦ È¥sŸœÙ×o‘ ¾ý±/OKï";ù5°ãÍÎÉõ.c$¨xç+¿öIïà‚ÜÛûù²ù“‹VÉQ¬oëxâ£,¬‹\!@€!çv|öìݳ¯n­‹%ÅÚ–‰³næÃ_º¥;H @€Žÿþõ»+½½ã†éímm­­­õ5\ø_Ú®™>§ã¶…Ͻ½þ×솈œ#@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@ðéHý¹fáô¦`”t7¤ ’w§×.Ý.!@h @ò«{ãòޱÅÂ<êÛÒµ`lua€$_¶¯^ÐV[¨€ É—€$_Î ùB€p†É€3H¾ œ!@ò…à ’/g|!@8C€ä À$_Î ùB€p†É€3H¾ œ!@ò…à ’/g|!@8C€ä À$_Î ùB€p†É€3H¾ œ!@ò…à ’/g|!@8C€ä À$_D·óí{ß‘îÉôoéZÐV{qHÜ)Ý$’/Ô¶¯îœRü=$¨ ùB€ ’?×,œÞ” *H¾ éôÚ¥³GD‚pH¾ (±qRbH P!@ò…A‰eÊ!A€@…É%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@ò…A æ|!@P‚9$_” @`ŽÉ%˜#@òÅ*@öo|ý‘›¦OmÓÚP__ßÚzÕ´ëo_øú'¤w*Nîûe㇯uu½¸téÒ…Cî]úâ»_l>wÓÌ ùb ¼~Û¸ê Ò׊M×>ôÞQé]K›c?öâ¢ùÓÆ6ÔVªƒT7O¹cņãqõƒ9$_ôd`Ó]­ÅBu3_8(½{ipþ—·ž9º:ˆRÓ+UO¼ï“³1ô‡9$_4äÄ+íU:“\Ãü/¤w1¹Î÷ÌœÑÕºÁq¥ yþgýŽ{E€ÀbEý'£¯†j¢oG'@ο1Á`Ž«¾u›Û¿«ln¦¯†fYmûèÇO«7¨fÅYn3d™}—*kQ4|µò›_¹ÛÃIʆ\Ö2(ŸåÈLw€|7'Ò‰«ršWõ:Üõ”ȹËg7iŸ¯R+ÎÞän· ˜£|V”#3ÅÒ½¬ÁjÞ¨ºç˜³]Oq€ì}õ¦ÇÙñ—Ö÷]í6s”ÏŠrd¦6@vÌ5þññ·`þaG»žÎ9»îÁ6­ËGÚêV¹¹ÜD€Àå³¢™) Õÿ°# æ»y@$}òç³3í~ÀEÔð‰‹Ý&@`ŽòYQŽÌTȦqîfâ£çìzúd©»†¿Ã~· ˜£|V”#3…rhºÛù£öKû]'@‚õØî6s”ÏŠrd¦/@Šî¯øÎ9c»ëˆRõg–»M€Àå³¢þ§í«!g‡êõ–»N€„¸³Ïj· ˜£|V”#“2ûœÕ® ašØì6s”ÏŠrd —5í³Ùu$TõO»M€Àå³¢þgí«¡¤H¡ø±Å® á‚Ìw›9ÊgE92 ¿ËÍw‰Rà—Œw›9ÊgE92 +t?6M€Dò†én 0Gù¬(G&r¥©¦ Ѽf¸ÛÌQ>+Ê‘I€ 3Ùpr$šÀðæ(ŸåÈ$@†k3[ä‰(øÅh· ˜£|V”#“)q­Ñu$ªZ£Õ+ ˜£|V”#“)u£É® ‘M0Ùmæ(ŸåÈ$@FxØ`× è–ì6s”ÏŠrd #½¥¿ëHtÁvýÝ&@`ŽòYQŽLd¤`³ö® šõ/3 0Gù¬(Gfæ$¨m7qúœŽŽÙÓ'Žk­3Zû½ö¤î®ç)@ŠÕ—TÆëê?­½ÛÌQ>+Ê‘™¡ Zo~ê“Ý¥ÝølÉuÚïnmÓÝõlHPÓ4¾}ÞCϾ³qû¡ž+7Ò½cݪ…sGë&Iñˆîn 0Gù¬(GfF¤8é‘MŠ7Nœ|{F•ÖötÿFÎh€T·Î¸ÿ•ïÃýúüL­úÎÖÝmæ(Ÿõá«¡$˜úAøëŠÖNÓøCY÷Boæ¤fÂí/ÿªõPå¦Ûê¢×÷gÍÝVȼ£VTI€då³¢™éq«ÎFÜî‰#oµIoM“¬H§QçÖŽZÞ‰š[VÈîê[ŠÉÊgE92S Ź;tzxæÎÈ¿B×Úudȶk"–w«Þv ˜£|V”#3ÕRûÄÝ>îšqÛÖ ¿|]©¼“õ¶J€Àå³¢™)ÚUFKç®xª^ë, ò·ó "•w·ÖF ˜£|V”#3µRû‚áÊëƒgÛ#ÍpWÜ WXåRS‡Ö& ˜£|V”#3¥R\nüòÀ ^‹t%¤Vã&$äJ?G¸§·Ø­³Eæ(ŸåÈLg€LÚk×ÓÍ5á3\¡ðDô  Ãü!A^ÔÙ s”ÏŠrd¦1@Š«­»z0Ê¥ÞbôKôÈp?…ÿÆ£³=æ(ŸåÈLa€4þá ¯'šCg¸Bá¡È›#@J¼^ÝC›#@`ŽòYQŽÌôHýy'=Ù>Å£>¢H€Œp}hu—hl9ÊgE92Ó £õöxmèWXucH©žÐËL£5¶F€Àå³¢™ù Ááw›V‡¯±5„áÓÐêj¼9ÊgE=Eúj(y2¸!tŠ‹|«2Òİâ¾}[ÌQ>+Ê‘™ç¼;lŠ+4EÜ2Òž°;±4ÊB€Àå³¢™¹þð7M}mKH3Bj«1$˜£|V”#3×2¸¥fz´  eüVÜ=‘7E€Àå³¢™ùÁ›Âæ¸ ÚÄH9ãBŠý"s”ÏŠrdæ<@ÎT‡Ìq…å‘¶C€”óqHmçGÞs”ÏŠrdæ<@W„ÌqŸV @ÊéY+új&ÌQ>+Ê‘™÷};È(›!@Êš­.m1ò†˜£|V”#3ï2¸²bq”­ e­ ©mäE• ˜£|V”#3÷Ò¶äFK”­ e…Ãz3ꆘ£|V”#3÷2øßBˆ£6B€”7M]Ú»¢n‡9ÊgE92 óaKb­Œ°¤¼tŽüÞyæ(ŸåÈ$@ç¨'¹Â”Û @ÊûM]Úú¨Û!@`ŽòYQŽLdðGõ$W(ö‡oƒ©@ýó.ˆºæ(ŸåÈ$@Ãîäý>|HmêÒF¹¾ts”ÏŠrd ƒƒ©'¹Â£á› @*èT—6âZ•,P>+Ê‘I€ îVOr… á› @*X­.mWÄÍ 0Gù¬(G&rAÈËm‹¡[ @*¹Šµæ(ŸåÈ$@.˜¥žå ¿…n© W]Ù7C€Àå³¢™Èoªg¹Âó¡[ @*Qÿºq+ÌQ>+Ê‘I€\p:äå«×‡n©D}VÔW 0Gù¬(G&rQ“²ÅËa •Ìu2*˜£|V”#“¹(dÙñ ô*:RÉBe;Qt'@`ŽòYQŽLä¢g jÿ ÛRI—º²žò¿ˆ9ÊgE92 ‹~RÏr…wÂ6@€Tò…º²G¢m…9ÊgE92 ‹úB®¢?¶¤’ÿ©+ûk´­ 0Gù¬(G&rIÈUôö°ï •ô¨+»>ÚV˜£|V”#“¹äÚ‚]›HEêwFÛs”ÏŠrd —Ü«l2¼JHEÕʆގ¶æ(Ÿ»©ÑUCÉ— j}!ß'@*ªW6ôZ´ 0Gù¬(G&rɦ‚Úîï 5+Zm#ÌQ>+Ê‘I€\r¬ öeÈ÷ ŠÆ)z6ÚF˜£|V”#“¢~õjáÕ¯ MV6ôT´ 0Gù¬(G&2$äµ¶KC¾N€T4SÙÐãÑ6B€Àå³¢™ÈVe›¡SR‘z5Å…Ñ6B€Àå³¢™Èõ¿ßЙ™©hž²¡û£m„9ÊgE92 !ê-…É!_'@*Z lè¾h!@`ŽòYQŽLdˆzš }sRÑ¿”  — ñ¡|V”#“ò¨²ÍÐWJ u*"@.#@âCù¬(G&2$ä !_'@*zPÙrÊgE92 !« V½'@*zDÙrÊgE92 !¯+Û -RÑbeCÈeH|(Ÿ«™ÑYC w”mªB¾N€TôeCÈeH|(ŸåÈ$@†|¤l³P ù:R ÊgE92 !k•m æHøP>+Ê‘I€ ùJÙ&bމ„‰å³¢™ÈÏ”m æHøP>+Ê‘I€ y_Ù&ÑÍ ‘ ñ¡|V”#“r/bŒ‰„‰å³¢™È•mòˆ¹,Èzw  ñ¡|V”#3ìOkg %<@žQ¶Y¨ ùºz^¿Ö]? 2Äd­»†øP>+Ê‘vuØYC õ4Wh ùºz^Ÿæ®ŸHbò±»†øP>+Ê‘I€ yHÙfatÈ×ÕózØÛD4 eˆÈûî"@âCù¬(Gfà«¡„ÈMÊ6 m!_WÏëÝõ“)C,@Þr×ÊgE92 !“•mÚC¾®ž×¯r×O¤ ±yÍ]CH|(Ÿ•‚¯¡©l'á2J]¥¹!_WÏëcÝõ“)C,@ºÜ5D€Ä‡òYQOžJx€Ô¨«ô`È×?T~;ì Š¤Œdª²áçÝ5D€Ä‡òY ”C󸻆”í$<@ÔE*¼òuõZŒa÷pi @ʈ1@®U6¼Ø]CH|(Ÿ•¢rhþÏ]CÊv’ § jŸ†|ƒ«}C€”c€ÌR6|·»†øP>+êÙä®!W“¨@€l)¨m ùþ÷Êo;¼Wš)#ƹAÙpØ¥1 H|(Ÿ•*åÐüÈ]CÊv’ + jgB¾ÿ³úëî:J€”c€Ü¢l8ìæ< H|(Ÿõõá—Ý5¤l'ÙÒ¡l2|Á—íêïŸvÖQ¤Œd²á î"@âCù¬Ô*‡æîR¶“ì£l²Ðöý=êïïrÖQ¤Œä»qÊg¥Þ×T¡l'Ù¢>Í~ªâ úûß;ë(RFŒò€²á:w  ñ¡|VZ\Í9a”í$:@ŽÔî Û@·úûo:ëiND½Xòîz[ê eÃïŽ @âCù¬LTM‡OI+ÛIt€|XP õs$9ëiNd…r#óÝõ¶TÈ‹ÆN8kˆ‰å³2S94þ W¶“è¹Y=Mö„n¡Zù}w·{æ4@º”ép×ÛR_¨Æfg  ñ¡|VnWM‡«)*ÛIt€¨/E9SѨ܀»åxs ¯)7rƒ»Þ–úU=2Ü-ÇK€Ä‡òYY¬þ7àn-e3ICê ZÃ71N¹wk™ä4@ÞVnä:w½-u\=2Ü­eB€Ä‡òYQÿü/üè¬!e3I—ÕŠrŠäåܽ88§òr#3Üõ¶Ô€zdÜì¬!$>”Ïʧê+5¤l&É¢^1/Ò‰Š›Õ[8쪫9 O”™ê®·#¨oðvw Êgå'õÜÖá¬!e3 §@¢Lÿª·àìåÙ9 õµl‡wŽ ¾<æî§%Êgå„znã¬!e3 5êj#lc•z‹\õ5§òr#Íîz;ÂXõ=êª$>”ÏŽz9^wC)›Ip€¨_T(L° õr¼…i®úšÓù]¹‘( oJ½oáWí ñ¡|všÕÿ¸jGÙJräXÈˤ"½ùú´zõ®:›ÓQ/àðpÍîvÕÊgG}‡Pá}Wí([In€¨W«(‚SQ¶¢¾Žô8êlN¤O]]‡ïe.õ¡zp8ûiI€Ä‡òÙéTÿpv+¢²•äHÈ´ˆK®ªWsv=§²TŒ³Ñ#íRWgWÑ øP>;¯ªÿ 4¸jGÙJbäÛBˆhsÜtõF\-×”×Q/³Á]wK „œàüÍQ;H|(ŸÍ!3¤«;I”$6@ÚBªSØi3÷«7Ò䨷y õÝ´]îº;BúÀ.qÔ ÊgçlÈ ¹ÚQ;ÊF’ !ïŒ|ýûÍ8z)a^d”r+÷»ëî!`LrÔ Êg)ä¨9ŽšQ6’ÔQ/v}ŠÛ²™wÜt7¯rµr+3Ýuw„+ˆÅ~7Í ñ¡|–f„üèsÓŒ²‘„È…0Û#nI}–¾0ÅMó ·(·ân±Ê‘> ºi†‰å³´,ä߀£y•m$3@šBJýµ×ê âÍÀ¡ò KÔÅuô'P9gBˆ£y øP>K[Cþ 8ZŒNÙF2DýªÔ‹žº©‡]mH)¯òŽº¸[Ýõw„—Ågœ´B€Ä‡òY »ÑÑ_ÇÊ6 ‡Ô«¼hMëC¶äfͱ¼ÈuqÝ-)=Òÿ…Øœ´B€Ä‡òÙj ù7ðŒ“V”M$2@&ÂD¿<Û¶©].zœ×9¥®m»»þŽðtÈqí¤$>”ÏÖ­!ÿjÜJ¢l"‰65´Î4„lÊÉÍny AÝ-«>RØ àÂ&­ ñ¡|¶Âî$)¼ä¢e ïÂVQ,Ækln~ȶ‚}úœÛ ‰çŸÝux„°×Å\å¢$>”ÏVoØTYïb9:e É Sµ…P:«u¶±[t:·Ò®®­³UqËYŒ´PØâ $>”ÏÚØ°.žsS6¸éVÍeÂzÂR:8dßëÜÈcêÚÖ¹ëð+†Éd ñ¡|Ö‡ý¨v°Ô†²¤È@{XI º‹¼ŒÛœƒ‡ s kCjûµ»—::NÖØ7B€Ä‡òY;úoà:ûF”ÛOX€ô…<÷w‰æ«RW„nðuë~ç6@N„”v†»0:ì¸V´nƒ‰å³öÒ Â)7Ÿ¬é’…ô6z,tƒö¿ór a—²]œ4Û…‹æZ·A€Ä‡òÙ{4|r;hÛ†ró‰ þöÐr4V1ùK蕦ÂDÛ›ò ãBJ{£».—:>V^·mƒ‰å³w<ü–ÕzÛ?•[OR€œ‰ôûCÿþþ×·iû§j~$dUܨïm1rUèq Ö[6A€Ä‡ò9aΜ`ù8¡rã -5áµ(˜œUï ]¥PXl×÷üÈça•ms×çRo†×âN»&øP>Þ0e¶Û-jªÜvräðc/Ú¾!ÂvŸ³ê|~¤;ô°ý×]§Kœð—A]‚ ñ¡|.Ô…ÿ(Œ:aÓ‚úßWôíÄ =aŒÿÅä§Âî(î°é~~$tA·Bßš¼÷D8®Å/mZ @âCù\x*ÊäÖds%]¹å„È»!ï}úÛh£ËÝ¡/X¿è†^‹þ+·œéy(´°UQ_þ5܉ó¡9åWk y×Þ0H|(Ÿ Ý~†_ø3êyó”ND€ì ¿Oê¯ÉÀì„ÄW‘6^o¾ü^Žd[xa«ÿ08díÁÇ៚éÀÎ2„‰ås"ìG—1>—«ÜläÔ‘2ô’G Ûˆ°>ÊEg ·Ÿã {³ÓEEÍÌþÙyñ†Š›Ã?øG´ gUo𖉉åsâ\Ô³7S¶™5 Ü¨x€ìŸm¸d’i‘Ãß±~y¦[pÌhûyG)ìã·®›:4$¢¼R=ÊýÕw™=êC€Ä‡ò¹þ@í_Ú1Ù¾r“Âòó<ø(T6.rø#—ï9j°ù<ˆz\ü¥á‹h[;²ðŸÕ˜‡|_äñÓø¦ÉÍŒH|(Ÿ½Ö/ÿûŸáƒ»u6}pÝÓíêµ&œH¡zò£õ.Cÿq_„³WZk^ä_£·Œ[¡ó.áþÿ½¿h¼zËv€D=?8æõÐ|ßÒ±WVòõßýÀg©ó3äì÷/Íy݉»Ã‘G”Ï‘5Ñÿ \Ð4ïýa[<°¡ëëÆÕEøëÌ]€\4¶?ø^¤+¦'ßרµÛ uTEk¾]è¸2Z¡|}(ôO Rk°o7 u?ó2ørL•Û©õSÑ^àž»Ã‘G”Ï¥…2ÿR uº©q¿éõVKÙÁ ñT.âÒ5Û…ÎNº;yDùœŠ¶.œkiF7¿?.8eñ|÷r »,îeR˜±ùÏDŽ+3 ÊçÔ¹Ð+Ä!2ùœ»"Ëü©šƒÑ#’ ê½ÛK$Ž+3 ÊçÖ¹ˆKB8•ü¹Éò¾Ãý&q·BdpF,¥Ûµù¸nSrw8òˆò9vB{q{Ià-ÇEþNà7H.äŒÉê¡¢ïñ]þ+3 ÊçÚ™ÑÞÿ $<@ ^Eb›ÿß ¹ÁýqVc‘gýçá­¹;yDùœ;éÝ«.%;@Úu–żÞoúÌG€ ~Ã…ô 'zû+|Wf@+”Ͻós<ÿHr€T­‰§Èûš=ïHNdpS ¢ó.÷⹬2w‡#(_Þôû ÁÒºj½©¾~÷$/2¸Öýà¯ÓþÏWÝŽ<¢|±ØÖ`?°£Kl€Ô~g‘ßðz)=72¸Õùu­ö»gû<®Ì€V(_<ÎßìñŸ@B$¸ãl¼EÞ?ÚãÞä'@w:ÿó'Â{m¯ôžÏ? ÜŽ<¢|qùÁß/ñDHÐq$z·L­öw7VŽd°ÇõŠ ohvàt‡·ãÊ h…òŦ÷A_WB’ òRäÃ×øÚ¡<Èààû.“9¸v‡vÖy[°ÆÝáÈ#Ê£Cs=DHÍÔ%[¢w©wMG,ÏŠ•¸z«·"ÿ8ÎÃþ4Îyq_ô.e @O\çªv5w-£Ùÿœñ{/£+޽ë#w‡#Xí™g„-óß<¬ß©Ã]3býó.˜ó›×"¯5BŠãï[«y-' 28ø‹¥‹íëŒ;pþ‰Xö©›¾lÛ€»c‘SHÌŽÞÏÁšÉ×kÞ­Ü>&žl«ÿOªý|m,û4ÌZ¡ò%+28øq‹]ýŠíïž·ê@ÿ«Mq×BqÌØ¿ƒˆýkÜ>š^» k‹EvücïêcÝÆ[M§ûeK"éîr»rí”ÎÕ{M;“•ü¥Ã8™«f¯u±‚æ¯ œÞ'4Í^º–ìp‡ña÷"Ë¿å.«¿à•ínv÷o[qC³›¿ßknúRò”À·óܼ“µnÊýkZõä…j•%îvy…²¡'\4qä1“{z‹Ó×8ùç¢îW¦8ŸAËìÿnìvW|\D€xrèÙkl. VšþèçšwÓG×ÿóó×Û¥HqÜ~n»RÚ¶ð*›_T5co|f“×dĶZuÆF0ªó[§«÷ž_s‹Í¹¬ aÒoì”.c6 íéê¥9MU-í¯üóyCö}²ô†±)W×þŸÍŽg s›ŸšÑ [äš1×=úÞïÎþfΞ3ŸÞ=6Ê©¤ê±7¿{&ž.œþøÞ6ÝÁY¬Ÿ8Ùv?'¡D€x6°ëã¥s'4*ÿ5ÕuMfßóÌ{›Æþ¹Ÿ?zîë'·Ô†ÏÂAí„[–mðnzÎÿòÖC3ÇÖ©~Åêú–É7>´â³m§¥»›G?[Ò1±¡ìÈ ª›'ÝøÔ†ØoŸ8þÍ wNi©Q Í ª¦alûm‹ßøj·Ý|DA€éÛ»uýû]Kÿ¶ªë‚7?ݸý`bNÓž=ðëÆ_}æ‘»;¦OŸ>¹­íªÖ!£'ͼõáåk~JþµÈî?¬}kÅß5~êb»Þûâ‡GùµaîÈÖ_®y»kÅа}kÍ'[c;·ZÉÑß/ŒÌeØç.×WÖ|óóžäÉŒ!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€`„!@F€‘ÿ¸Ñ¹Å‹ss%tEXtdate:create2014-01-09T12:41:12+01:00m€x%tEXtdate:modify2014-01-09T12:41:12+01:00ÝÀ¦IEND®B`‚plainbox-provider-checkbox-0.25/data/video/0000775000175000017500000000000012646152434022114 5ustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/data/video/Ogg_Theora_Video.ogv0000664000175000017500000162554612646152433026017 0ustar sylvainsylvain00000000000000OggSBVX‹#Ù*€theora-$Ð@u0éÀÀOggSBVX¿/é :ÿÿÿÿÿÿÿÿÿÿ?theora+Xiph.Org libtheora 1.1 20090822 (Thusnelda)‚theora¾Í(÷¹Íkµ©IJsœæ1ŒR”¤!1Œb„!@ôád.UI´võp´˜k•¢©@–H¡ÐGÓ™¸Öd0K%R‘,”F"ƒ‘ÀÐd1‹b0”F!ƒ¡ÀÈ`, „‚ ðh0û™Ö•UTÒÑ‘PO ÍÌŒ‹KKJ ÈÈLJ‡‡†FFFE‚AAAAAA@!°¡‚ƒ3ÐÀÀá1££ÃpàÑ‚ƒ”S€áaÓ5uá!bS¤FÖtÑ‚3t‡Ãåvw—†T…Åö'Fv1!‚ö6661!Q¤&6661£†66662ô&66666666666666666666666666666666666661AÂAƒAƒAƒƒƒƒƒâü·Ð 3¾Bàꉽ¹f"ÝGà?r‰"^àØÉ}j©fWbìBä`öަKç0ÚÕ†ÆU)^}»‡äÄ4Ì®ÅØ‚È£ÃU¨62^?9w1+£Ú<“„ûª¤ ÅsTûª¤WcAÊiAíuÜàek1·ÎÅx^ yÛþŽÓhó©"cuk3)¨5ß –£û@½ xØæ]‘ w(=£Î¹M¶»Ø+‚•F_Å¢Ö9Ü"ͯ÷´†bÊЧ%r({·IzªJ„yœ'JÖlÅ®ÀÒ@äñCݺïÿ²cylƒÙàZuÇ+1‡ÀeG#F¢idÚÿêRÜìŽ,>“‚idÚ<ðõt +-1äÊÿêRÜ„Ö^vj"ÿì|¾„ÜÂv}-°V¸K&ºb€ó'wª¤@kõî^§KµçY°‰j…•†Ÿâ#¿8UIJèβbQ¯ÂÊÅääÒí#ÎÜ9ˆC¸÷6ô¶¢”W8bõ¬¢ÊÇ’/í»›j>ÌFaПý2[ E(Â,¬Ýyö¤ó?mB"\Øt-2{§Ì|H纊©V/”>÷ÀmDÿëÓ<#H2áŠnmé¼0õ¬Ô@u ¾]P§­Ï9;DzJ¢i#üÓ# ó çW`CùÓ¸¶Åsè54´8rŒ&•íy®Fæ \Ã{IÊìcpíûƒ¸3Ú%“ΪS™“è°Ü›{,‘5†öó•â³0rê=2\ÇÅT­a}{ òn5íNaV¹€ð•±DÞÉ…¬ßðª‘Kâ7þNã4 înÀ5&6£Ùd‰§E¬œÂc}BªF\g þ7Âb†Úû.Ø®Ò Ëç <‹„)#w…¡ûžV±Äã—Q!¹¸f (m¯³K•ÿ \N1fÑ2BivÖã›Îýð}jÊÁD8¸Ë¨*R´Òí&´spÎàZ~zŽ.¬+<ÂvæXð)(ÓK¬šB¿£ƒÜ¼Zaß#똳ò÷7¨,®¥;„÷‚fÚˤ™Bà¿ßBŒðíoÇ&1ª“‘&L1òw±Z:ù ¹ÄeÛY´—;×~²±U$+^Ϲ‡Ñ~²³¢ù;r0Ä6ÖlåQ”Bª[€Í£mrÆ[¾„ÃÂö &üEb´-{:>D)p=µdÓ:0¿» ЫZžâ4]%Mÿ܃‡šîžó’&ÔC:Å”ªÈ¹¡Ó°šY=óì-ˆ|áæ[Ÿ£×™Å•®4tˆK´žÑMFpZ-_óÛΊ [M¯¾ap#‹¾r¬²¥,Yº„>e…*ÝC¹ ë,´¼ S6ÖM#Ï“ÇhžÑ8}u*ŽY‰S6ÖOcx;D£?°ám…p71†qçü©¨Z†qÙí1¤Íµ–L_Ybï pEãr×r‚¢2j™¦rÐÇÝEYbžÉ{‹FèV‹Ô šfm®,&Ÿ´ ì)¨EñÔœÉ}º7œ ©_Âs yZÑßèhƒmR&—Hòô²²ï7îyÂ߀‹(n€åxH&•¶ºgݱ ²²w½T)|1$j•¤ÙåD-Ü:ô?0þ+°OÊÕÝ ¨oR˜µÑp[ÓïD%ä†fÚ¥i6LpÿÔê#YXÞ¥(xú/`ÅÛTÍ3—ÿ`§]AoÕ¼X‹±å*œ¥`6ÔÊf™ãr{D(¹€zùGë+#wÖãÊ”‹~‘ϤVVF É™4Ͷ¸ÝÿQÓ¥£Äg!tÅæ ±4Ͷ´[슠)wb´¤ÿüBâ&þ G°šQÔì8?Ëá½Æ,ù¬°"$%m6±÷åëjR\eß&•¶ºIš*/ø?u놠ܶÅd<Î*¤#$%4™¶¹Ñ{–8ùð;eözãq=Ö+€ßú~`SPµw€fi3meË‘÷aZ½}¸Üèbd˜Ó6ÚÊ£—£åMDŸVXOÛÛ‹x?ЏžOœÄª’'¿ÚYXï¨Ü¶¬šg‹ —ËwƒqúuÀÓ6Ú˜PËæ’4'²ý U"'–Ö°ï® JBäëþ÷*¤²²!9ðÛU /\e‹Lý™å±ƒ¯x¥SëA@j•¤Òg<ßrîØ2ˆOåŠ÷ÔèG‰ùW`/Žï–¨0$´˜Û\òÆ&ï]þ)¨wó«`‘ÅÊÊÏ7!~^‘ƒ¶²“4Ï+‰èà,¬‹¨TÔ¾\^LÓ9FÚㄎVÑæïGó÷ÀFå#éýUHßÈJ;ˆâÅarUãLÛja3,· Þ/Akÿ»ãÂÊÁ*á–-36Õ3 磔#…U%(ÍÝõ#‹ Ü’…Ó0¿ñ¶¦X´Ïå gðöŠ©@F,¬q¿d®DÊ'6ÕÿÃ,Zf]k úô‰äˆZ¦ †ç?“˜ šfm¬¹cÝ…{…¢¿ç½_§$Ú™LÓ9Xá}Õ)€xçáDVîXãÕgqÂ)¨‡ÒÞ| #P”4Ͷ¦2Æû·ûâÅdÿ:ˆ#Ë™›j™…÷Kú¹YZš„>@n‰"‹^¸uØôä¡iüÁ–-36Õs çït¼qa·I~BŠA¼dÄ@883ȶu÷&|k£ý¹Qߥ•¼•U#xÉ!ˆ€p: pg‘lëîLø×Gûr£¿K+y*ªFñ’CàtàÏ"Ù×Ü™ñ®öåG~–VòUTŠ©8OÔ‰x&i™¶²å#!ñebÞ_z.ìŽ÷±ÃR—®_Ð,®ÍÂä† FS4ÌÛYoŸƒ¿‘tóóå*–V¨‹Öð 8$/J4Ͷ¤Ì±ÂîÑ­è,¬åkéü#p“¶þ!:?JLËæ™¶Öê"SQIä@úz;qÏ¡]‘À7ŸŒ±i™3 ͵º^¤†¡ '«+¥R¼ù2û§Z5ÑþÆ83Ê^]¸QÔdQ’¢ëX^L¢s¾Ÿýb°m«ž ±ižþùªJ©@F,¬q¿d®DÊ'6ÕÿÃ,Zf]k úô‰ä€OggSÿÿÿÿÿÿÿÿBVXp¸©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0ËüL~'þ¥vWßZ0lûÚí¦ö_¨ûé÷Ý}ú}î×¾Î{_q¦ûûŸxèk¿¿½}ÂÃïß¼}ÇÞí‡ÜlS¡÷Œ>ún󯼿}ÕÞßxïï7¾Ï¼ß¼}ãu´ؾç»î7ïõìTб»§¨ZåêCïè`ñ4•Fô9*íÐ}û«ÞÛâ2í!&na¦Bª“nÍYÌ7¹y”ó³‹NVæX‘jXªL2M›’ßG¿ÞR²ÓL%ެšÌa{«z6âJ¶Io¬µ‹×fu.lç®{ìÑïͼšu-äÛcÇ(Ÿµ{¸«®eÂ$œÉ°Ž’¢9•-7 ÎþõОƺ£Â"Øê²E`Ó;Œi¶¶.Ó¤Ü «Þá¡Ïw€ºè}ï½Y" 3·ÍîûŽ‹¦è÷ð$û÷NõX^Ͼêè}ãïBö}ï¼}ÂÀûÇÜSÞø¾ó â}û¯¸Û_~ýçÞ÷¸n}ã{a}ÞýöÐ}à>ñ÷›£×·Þ­G}°ûÕ·VÃT·Þ´¸Õ¨ûÁƒu÷Ý]>û÷…ûðatï·}¾ñ÷1~ýZÇ—o¸­ûÏ¿TûÇÞa÷½¯½¯½¯½¯¿ñD>ñ÷¼}ãïx¼}ãïxûÀ}ãïxûÇÞïñµ÷€ûÇÞï÷€ûÀ}ãïx¼Þ>ñ÷¼}ãïxûÇÞ>ñ÷¼}à>ñ÷¼}ãïxûÀ}ãïxûÇÞï÷¼}ãïx¼°ûÚ”}à>ðxûÇÞï÷¼÷¼}ãïxûÇÞ>ñ÷€ûÇÞïxûÇÞ>ð8ü/r¾÷“Ù÷ PU4¯•5îùùîú^Û¦½Kî¯q²Ž]¹húªvûß{ïkFFv4Tt—Z:ští(x"F»vôG‹ÁíuäDz+§³ät•Œ áØˆíQè×LIÊWƒªKïu‚´WÂÍù÷Á¼¼éð>õJyº;WmyÔׯì@:y0ðí­­5Šw©fàWjà<Œj»íʼ$Ãïk®Õ÷¾ñ«~÷ß^¯5kFU#]ƒ XFïˆZª×À;z¾8ÏŠò’T@Üü/^¯¨{>·@€Ðµ÷ŽÀhЀí®Çm­”à)°@ “+N*f å8 ètP é1E €E “tQ8u;¨Pw˜€º‰À¸æq@êbj'`ÉÙÀôħ'ÀéÉÀôħ'ÀéÉÀôħ'ÀéÉÀôħ'ÀéÉÀôħ'ÀéÉÀôħ'ÀéÉÀôħ'ÀéÉÀôħ'ÀéÉÀôÄ/(=€Ô(=Ì@îò€ÐéB€ÔÄ”(;€ï(:Ì@Òò€ ÑDàÎb2(8€Ô(7Ì@½B€x¹EàdÄ^4€T^3Ì@šõà(–KÀIˆ1IxÅzü²* L2=G¯ÿøÿþÏãÿëÇñÿÿÿÿû’ÿõü~Iÿ®dtÖÿÿ0³?æ#ÿÿ¨$Xþ ûWˆ„ÖäŸÿÿóÿÿþMÐþ>ñÿÿ’Gþ±ÿŠÆ\~¹Œûóǯð?˜üÀùƒÇ0ëbëÿù:µ!ù.éЊ1_ÿ\ÁŠÛŸâN^bº?£5 Ç®gWð*Šð¨ñý?ûÿþ;ÿØñÿÿÿOÿdzú¼G$ÿÌnÔE@;§ùŠÿŸóÿæ"ÿÄÄsþ}Ò˜óÿ˜ïÉœ—ü a˜11Œô‚OéAÑHGŠæ+#Ö;9ð(@(GÚŒ0~xæ ×GØ›ê0``Áƒ˜˜‹ê#HÍ‘Áþ»<ù/­ÒŸÿÿ¼$þ¿á隊‰™_Wä¾if¾*ÔÖlw’b/ŸNÆÍŒÍ²sþ0NºfEšc3ÅL?dÇ?ûóL÷¯šðxüÿLwü2@“n/'M œ4hXnšà"Ã2@d–€ öñ€•K@'@ÎËLÍ ©¢›‰±››&\™Ì3ôË;销@‰‘ViŸ&`½“¥ €ªD`)àÜÑ“§fM!Ì4%pð °¨`{Ó(€À óq3€˜.´€¦Üò@Í Ó6À E¦e€€4iÝ`Õ¼öbØP`´‰€TÀ#å´X›6,#µˆF§™bkÀ …¾z@ Ìö8MÜÎ 0êÒ·€@ à`~Ó PÀ >ô·í€' x ¾f ™@H@'0$Ý,É8f6W©•€];èa»}¸šK%ÌÊ€œ¦v-Û›€ à…™c4Øšé”w¥¯×™²fàx 9@ 6™¬lv0(™1c€¦Zp0ZhfÀ™€NÓ9Ì2P0$a›ð0^OŒ-ðµ‰ÀQ#PÈšÖXæOI€¦ ÌЀ—@K&`DÜ[fÜÀ™i™îl@B@"˜H{Ê™XR™)¼Â GDÄ* ¼}ï_ù‰ÿC9ôÏ &¿ø ¸Û?/6ó $ö€Ày‘  ÙË_„nóm,É &PÜç€è nÛlïæÎgKhNd‰¢",V«U­ø ÀÚix€ˆ¯O¬ Ÿb È`´Î&K€&Ñdþ£ê€ø Üõ4 °²Û35²f+k€À:Ó5P4×M ꌑG»Ã-2Mlèd¢µ€$ ÖD†#NO_µÌ´G¬¥@Rf›i•i™„ ³p˜T,Èž¶œ@N`'6Û€NJ… ê$à¼àÀÀ ´ˆèGSí¶ðp T§l·“°<— Ç&€íV¨5ív¤ùµ·­¶å¥iÙ‹höY€K¦Ñ8²ZýÁ¼nÛn•㻀¡PSÍBž¦’Ò?Äpð7…Ð=¾hfPQ"t_6€œZÛp ¸*3<ÉÀe³* ¨¼`Á‰ÙÓ¨ùQ „©÷5¸?ÿäšÀm6£`h ¹Lö|¥Lg'@ à ¤í£zÿÆÀ`Tn`0)Ÿ~ÙV«]©`XV M¥¸Þp9e@ ÍI™oßž}3f›¨™etÕJÕ²d0¤ÌË Ø35S ! ÈšlÀPsIi™ d`„ˆ) §Û7ðÑ)0‹oÀ 0Ý÷}Ö0Fćë™T¥€R®î‘Hß~ÅC·%çxT ó‹ 26@M]¨ÿl›I˜&øHÊ'–m€@àPˆט` ê}`%€–ÖY•f€BC™ÄG€  å€ 0€&åiå6l·O€‰ÀM3@M9­ÀHËNP²Z  ·Í¬Ô€›¹š€EÖHîÖ@“C8{;ÏÏÊ@O@èð¨l@¶–¢sWÀ»O@'–©p¸ ÕÕ¡Q`½æ0bI LCMT)x¼Ï[ÿÿÿÿÁÑü@ôIëõ‚ejÖàdÉ“5,@©º›ù“&aþÿôìxŒ* sûLÊÉ©@ ó,ÌÉ:oÀó7údª€ Ä眥må2Êîc2NMP@c5ÖÉ÷9f¦¼“oén¦°,¦([@é„ïÁ‰å LÓwkeDÓÌ‘´ß S4L’k¶Û–µezÿíÔc›u‹hš9’µMÀP×3TÉ ›}¾d¼Š¼ÚòÇ6€dзøµêXÀ@)—–øšàXú¾¿oõ€~d™¾½6ƒõÁ´ÀÔÌ×À€©©öùùš@JI5(^ÞÙÆÀk,èfd|̶€·¦O'K<aZN¡`<ȳ$€ H“3Ì„]š`ÌÛz›9 lë\Ù2–U€Ù¢¨šy‘fЙ3\É °˜m)Ö¦úæ­$Ž|šÎ¦ôÕÿÿÿúkô°—ÿýn#Š¿?ô*é䟓G¯ë|Ï N®2<Í %Eržë ÌÊ@€Y‘À Éé›-àà ’4zäþböŠÿ½GÄϦ*=y„4Äç¡â$ÚŸÇ%ÿò\øTÎK=he™@Tš)Å %ð•ùÀÈ*hÀ i¾&è?ÑðEbT…¿ý±`îèB‚OAQH1΃Óž„¨êèvvW¨ÿÿúw¯õùãÿÿàð$ÿsÿ_íPÏ«óö}½z’_;¢_àL•ø;ü#þL#„LP@ª TEtüp€Š1àæ ðwúßÉ5|w®s²‚"|ÔG˜“ÎLÒgs„B7Þ¼õ¸(¯HF¤䯫±`æ G>yŠD úœ‘ú W0`Ç£ô>ÌD$_øÉ¯úü_ôÇü‰·…ÿÏýŠûWLê<ÂQ¸8ÿÀA7˜‡¤_þL#„“ÌW|[à$ó r|b¶ÄADñÕñ&::º=dmér@ ¢NQÁF£ç0cá\Áƒ˜>ÆÔ`Â70p ¢G½ …B¢#ð{w¯ÿüÿúÕÿÿÿø?ŸðüÏø?ÿÿúa(àþNõ‘ñ'ó ³þ}¦0QZ`Á.E`b‡¨$CqàÁßsÅÍ%„H QX‘õƒÂ û¡BOAƒ˜Æ`“¨ÿí‚á]?ÿúSA]1É2x?Ÿ&+G?ÇU%)­àñýG8 áG ÿó„qBü›ÐºI8Et×úþ¾ÔáŸÿÂŽp£âP£ˆ(☀£ˆ(â%Ú…_þHó(õö¡W¯« ½tlè8V;B#ÐQ‚«ý_??ù¨*¼L@W®*B+ #×£0aÂÁw Æ;ã(*¿ÿEx?wÁ^3Óïø¿¤ÿÿ§ô”ñtþŸþ`° “X+ TƒïAF `¡PC’³…V@Ug$¤Q„z0`úHÇ û îcí¶§ÛV5öÍu39˜N`1Å}Oƺ• &3€™@L§2©R}§”€™Nf3Ñ<§G¥*@M'4€šNjR¦zS<l8 °Øpb•'ô¦xÜpx ¼à&õ*I©7œÞo8 ÂyN?Ÿ¾q8 Èèp¢›ü*@N‡:tR§¥H Ðà'@¡ÀNŠT’)Rt8 Ðèp¢•$ŠT€t:è¥I"• 'C€N‡:)Rx©å 'C€œÀN'8©¾à©Rq8 ÄâpŠ•'1Ô©8Þo8 ½Juõ &ó€›@M‡6)R ©6Öi8 ¥MòE*@M'4€™ÎfS}µõ &S€™@L§2©SâžYà!ÀL@&#€˜”©Çu*@LG0—Î^S}ö×\W…è# pHððàx<\Œ¢â¼²ñŽ{̈(˜r‚eð>U‚DRù×.P÷/ î\ø@çG(¦g\¹¢:¼ Ü råý‚J sfE@N¤gŽ##—:¢> …Bš~ã8fsœB¡Ü—ÌÚºæ2‘§ÏrÙ•ãÿâ™ç <ÌDö+êïîÌ·>sˆwòÔË’tð9ýËžCšpuÇt~\éÎàÃú9s£ÇJq¥0êí`ŒÕrÝË’Ót‰~i×]Mî~w¹ÃÎŽ>¸§Ó}äKšgæXú|,Ó¯é¬Óf\™(‘Q€9ïᣗ&þt`ðúf^h?«‚Œ‡÷ƒ ÀòŒÿI%ÂS¾ŒËÎåWG Ž^äW‚g£D ÄD+ÂÞ:èßÐøâ'Šúxè?@á„ãü ;úµÇú}îŠð<—…4™‚¢Q€(€@@ g÷(D=ZœJˆx௮€cG½ˆ\ŠÖò‰ÏüqDH¯îç÷MîG9º6QKšvg7brüÉ<ýÀyƒ¹§92ЙQ2> œ²#-Á£‰™—.ûù~C1NT ¦5k7Í:Ÿ—“ÜXÆ®Ì4?ÞÓ|læfU@ÄI°Í4Íóý‚3,úeì¢piO^˜0§84.¦ÇrçHq#‰ÿyÇäÜ0s¥1ºi¬i:ç‡áóNNÚlå”É`ü¹³láãdxÃÞã\*µ:Ü9îãz’I<y±˜pŠn0ks±ž€|â)†uË¢±8‘Ç5Í0™x‡ŠÀ+P€B¸™Ê¡œaí4Ðú?ÑFýAÎÄh ¦½ŠÓÐå^™4rç}]únG.]råßFʲ÷;›ÜÑ2õfp8xwfAá9ßD—ÃÎToA*ð!%˜ïz,::åʱ‡À¯ãˆã7ýêÄQ@¯Ùxƒ“Ö½ z‘ÑЗ£¡/GB^Ž„ô%èèJîHèrGA::ôt%èèKÑЗ£¡/GB^Ž„½ z:ôt%èèKÑЗ£¡/GB^Ž„½ z"ÑЗ¢ z:Ј§B^Ž„±Ð—¢! zÑЈ„ t G¡/E øã‡+Üt®è"wA=î»ÞÚ'½Ç½ºé^÷]ÐW·Ý{jöå·¶"öÔZ–õ½ÅîŠX@¢/h–êGññÒŠÖõRCÖôOkÞã½ï½®•Ý+»ÞÚ{oh±{–¥ˆµÞݶ԰ˆKmê‹Ü öÓ «z{ÛäH"Km¯{A{Þ‡½÷K¥t±Þü^ô^ì%´omEîÅîÂ-J7½Tsó󔉕һÞÝÝÝïyïqÞ÷ÝïN‡w{Üw½£Åêº7¶þ’>þ¾a""+»Þã»»º ÝÑÁ¾Ÿ‹RÛ˜û@¼"ÄC¥!²08Rw½GüfªO¹"xÁ`QÈ:\›Ù¡ME¦[Ûšþ{Þñ1¡,^„竱°è²õJT>ð— Ä|ePó@»éÈ£÷䆰éE{û ž•D^é ÕB‰´  ‚`(&‘@!®…A©ÁýÏ݇KÁ„ $ËzõœŠŒ•'óºXÍ*3à*Ôéä ? °Ý‡¯B¡£ˆë]$AEbžæ AÛæ3ªNÊgULJ‡U">V¯pÂcu¨BPïhUÆ€\/ÿj² #ŽˆŸ6¨y`TsµT–¨ãýQ–m*äD“µª”)É¡%@Ù—ü¨éSUŠ–1:J ¨v×­CZ†˜wPÖ¡TV©<ºÚ©­R² F: ”ªa(âÅÆù·íX,Ò¤‚É`X=˜T80©5PÌZ ¹A]}TàˆÈP/1\¨§!—ûz.ää«âðê üWEåD9U@;ÅeEPº¥&2÷àâWt:X{/I*'ÄX¡!BI¥WèTÌð©¹SR¦¢IJö¬¤(BP¼,† nHŠV®©á© ¡ÕBª|t€BR„•  .-¥ T¢©^Õ+ªoˆ*Aq/‚ƒê%P l#>ÛÐZ©1R0""ªë6Ô™ T(1ÌHAÞwés*ˆ“,T¨P2ZEåÀâ ŸÏ @€ GqÞ{¼*:9s¼ï<†$(G¢„¥ ’Rº¥y$%Jê•Ü—:O_Y (fPÇê”4ÃU6ªm»¢¦¥M®è*Ö1¨cˆ… *:â""ìU5;ªlTÖ©‘ˆ˜€Ó¨Ï3Ísm+šê 6¨P™Âq …Õ ºZÃ* ÝA-–(PGéçZ×Ç…Ey•Pz Õ@g~b÷“f¯/'wJ°’»Þâ„…ãEŠܹæÇqTÖÒTЩ…S Õ,BÄ ”.²µP²¡aȉS£õªtTè©Ï®8áB*„e p¡%‘@+­ÑШ}Rúz7ÐØ®Qþ†(.Pk#4¨–&TS“T€ñ}Q ¨2L•Š™FAZw‡zS½P2U@ÊÕ¥ˆˆ7pƺn&>­ÏsØïr;OD†çéúå 0T(2ãIP÷Û5("–MŸµC™ñP.„ty<Ç빚¡X©]Q^iQ2 gŸJƒ•Ô‚… êÇÓŠ\Ã!eRìt*P96_Új†j™ÆbíÇñ”c¨Pƒ|ß|š¡µC™/ü‚¡µC®ñP$ =@*€| éæGÉì{Ÿ'±ò}w¹ååÅžôD‡JîéV;’BF÷¬90jŠ– ¡÷ª¥v¨=Ä:WA׌÷̪BæïxÄiÔ éAÒƒÍ:ÔÊSË Ê¥J(|"£ì„FÐBWD>TèT’ F÷Ì5¸ÖWJ'L¨tâ½²âãì lÊ+ÑBámUéF/QzÆšL+ÒèCÓVVç'mê!S°êbWK4A¬€P} ¡BÚ…ñ‚££5J ”mt?þÚ*Îà7¹L:‚­*€Îöe„b/Mª0¥zŒJÞ…CXɸŠËÞ„8R•ˆ'C¥w²Ä®îè{Ü{/lºÔZ‡J²¨YJxúá ïÞˆqTf©2ô÷ºèwJèXébô¶"÷!‹¨]P~ƒ ÊÉ uŠ“ÖJ©TùK¼±d^…^–EèR…/<í't®Ht®ë÷´{yÞËЗE—§Bä;»¡bRCÞ¡ë "/pV^¢/K"/Qz„EîE‰a²È@¬„»ªûþ~zÞõ ]Ò»¥t;º[»¥t¶,C»Ø‡J±Ò»¥t®èˆ± opP¶/mX)V¥ˆE–"" Qö‘÷÷ö‘‡C»Þó»»»½î;»Þ㻹éÊ÷\¯qÞ÷¢õ¹ Fô7¨@ÞäBQFÔ<܆õb+¬½÷YzZ²ËÜXî•Ðïzt=îºËÛQ‹Ûp”Pµ /P(–Þ¡ˆBËÒÁ…ˆ„¢)V¥ : /PïcºWKc»»¥{÷W¸él±ïN‡J÷§²÷a-‘{°6^Ù‹"÷!½È²Ä®…Ž‚rCÙ{–=éa!Ý;¬t,B×C¡b B"±*ÔBX²÷V¢¬K "Ä« bõ ˆÂ,BÕ¨ejËÜèKÐ÷¹ÑЗ£¢÷¡ŽŽ‹Ü~‡è{Üèè.‚½ÎŽŽŽ‹Ü~„t^çGB::/s£¡¹ÑÑÑÑ{¹ÑÑÑÑ{Ž‹ÜèèGGEîtt#¢/s£¢#¢÷::¢÷::::/s a{¨‹ÜèèE)Ñ{ƒÐˆKÑÑ{œI‡9Î2ç9ÌÏ9$É&,Òd–hsJB\ Ipék•[Iï¸æM÷méþÛm«tr¿m¨m$ꪗI|$Vûb³4ùIÄëæŒ`˜$Å ™ Y¥š/ØoI!G€íñf…¤Nd³”ó›ôçÇœÌð„“ŒªXq s1‰& hLd—ŽÏ#$9KE–‹*näR™}) œ’ÑR¥I$s«9“O¢8P—1_»m÷)Þâç‚©fU¼ÌûÞG4ê­¶Û}ô–u;;k.}Âj{ÜÐ$ ’¥URÂgS¢^´“ ³  Y9ÃsIú[o¾Û.îÅÛÓ‡i2R“î½ uÏŒ ¥šIi(ÄçÍp²C2çŒRbcJIU*ªVT¬©] –,*XT°©aRÂ¥…KT²©mRÚ¥µKj—P©uRò/ª`B¦L*˜U0ªaT©…S ¦L*˜U0ªaT©…S ¦L*˜U0ªaT©…S ¦L*˜U0ªaT©…S ¦KèT¾©}Rú¥ä*]Tº©uRê-ª[B¥¥K –,*XT¬©YRª**TT¨©Q ”•)%T ©= “U&¡Rb¤´*KT’©%£{Ct;Þóº+½ïºWt®÷¼ï{Î*~¤Ñz‹Ü{ÓÞÚt¯z{ßt=í‡t®‡C¸¼&°ð÷¶ö˽ï=퇽:Wt=î=é7UÕÕí`p÷¶ª½WW´+ÜÇ(-uÊÔà[cÄ%èƒeB R¨KPŠö(£"´†:€…¡!AŠÒk-P>J p¨óPW{‚ _ˆ³ˆ{bø,`¥P8¡ ” °ž#{”6Ô(:J pÈ Åî:ÇJïzÀãŒSŠZd(áA:‚NeD¿Ê†Úß@¨ Pnb @ÿŠ|J€(òz>£Ënaj:”b”¨ÃU¹•@¹õFj”&;¶LRžï•TÖz €fû¨$ÆAHB:tý]F¦b(ލOwÔ0=W§wêêêƒ'g˜ôŽ¡gRWOggSÿÿÿÿÿÿÿÿBVXûtŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ${øcô»bUÂÓ+Ž[8~U ª7þúTs;t¦gUwžÃ{ŸÍ@Ö¨Æ(/PÏ”* þTpå:ÇæÇWU:„“9<:MØÇUçóÛóýQ’£º"* Tq›QѵP)ìØŠ*Tm¼ÿÜ0ˆåPAäO}*3úTú.çJ¤ ºó̪.T¨9Q¶Pó½ ¤ƒâ¥vª8³Ê¡×GTGWRtÄógÕç㫪œJ†uBÙŠ¢#‰P|þÈÁî•Ýo÷D:¡“¡P>qPWòÉÐ)b(ˆK F÷¡)kU@gzžø “÷QÞwˆ„fEˆ½èAfó öN¨ý¤5ÊŸP–!{v"éÆ÷ÄEŠH)a(Þ¢÷⢄D^èÞä@ RÅîÝõ@õEÕïB"÷,^äD"» a F.¡–"õ¹êêê꽬ïË´B){‚”E, P7½ˆ„ "!7WPˆ½B(„B!ïQzݽD^øÞôEïEîÄEÕÔ""¹¨ˆJ(£t4C(( P(ˆ½D".¢#J#D b(ˆBU *T%(JJ¡1BZ„Å ŠT&(OPœ… (¨PJ¡MB’…5 hPª¡QBª…U ªT+(UB…… êT,¨YP²¡eBÊ…• *T,¨YP²¡eBÊ…• *T,¨YP²¡eBÊ…• *Ô+¨WP®¡]Bº*¨VPª¡U Ô*¨SP¦… JÔ((PP ¡ABr„äª&¨LP˜¡)Bb„¥ HP¡)B2„t(EPмx´³Z'KJÆ$²8O V:µ02â©dsŸ˜Á Ìça aŽŠLQÇ pÁ’aŽx ££ãÙÑ ia(в9Ë€,Y¬A·0Âê*Ô0Ãq§YŽaŽ:CŽ%+•,%FəŊeˆÇ©H°KD²,ª3L3^5Q‰!QB¢¥EjŠÕª,TX¨±Qb¢ÅEŠ‹*-T\¨¹Qr¢õF Œª1Td¨ÍQš£5FjŒÕª3Tf¨ÍQš£5FjŒÕª3Tf¨ÍQš£5FjŒÕª3Tf¨ÍQš£5FjŒÕª3Tf¨ÍQŠ£F*ŒUª0T`¨ÁQ‚¢õEÊ‹U*,TX¨±QZ¢µEJŠ•**TR¨¡QB¢eDʉU*$TF¨Q ¢×µ²ËÚD[ù<²7ýÀäÿ -‘ÒŸý6þK—xJf2ÏË£5ÍéßøG%¿vf35BkÝ,¹œ¦[3 ¾¡ïÎJ#ÿ%—Ê VöÇZ®rÖµËë ë^Æs‚ó]?ºZßÐl÷›Šé߀û$¤]6UtóøÄ«`†M¸4b$%õ-ÞúÙxßhuPa9BäOjÒñ¦Ÿºá|»_Èvá=KÿÍõ–»ƒ[aÁlégXºü~”SËÝ6Ûm‰c§§¤|½YgL=…Ñ1ei&ßLÞ_M[„¾Ëoav"P®xèHÜÜ%âH€k÷Û\ å׳ ¸³­7ãºuÖ"¯ ­½Ð ùe–Ätß –Mê:ÑjÈEËzôÒj-{j¼C¡®Þ’rH Y ¬è$[v°¯­¶®%¶ŠV t¬£}ˆ°^Ërî‘[m‘ˆ„£Ž+/7M«RŒRe©zZ± YÑÐ(ÇJÁ±8ô–t¬¶n-Ѳ2sâb1šâUËdÙñ‘g%zÛbë m°zD`V§YmÓŽŽ´™h:%)ˆË2¬}Ù\Dy‹%¾‘§¡hI7:h×RK¿nßZeÈ[·w«˜x¢ýYËc§¦ÑÒÛ-a uý£#÷ÀÂǽÉwdý½ä·|[bËSYbkYoLlºrùtXYŒ Ïbáµü¿ÚˆÿÈéôè½tyÿºä¿¹=^Pè³æjº\¯öÂýeÒcþ·¯ž‰pú÷ç¡m)¸Âç¾zzQýŸÃxE™/Ï §Cäï]Œ¿Î¬²û½×½¾± w.(±paÐï¶ôå{z¬›¢¥ïA²ü-ѾËÛɯk{l²ö±TTB¨…Q ¢%Djˆ•ª#TH¨Q*¢EDʉ•*&TP¨¡QB¢…EJŠU**TT¨©QR¢¥EŠŠÕ*,TX¨±Qb¢ÅEŠ‹*,TX¨±Qb¢ÅEŠ‹*,TX¨±Qb¢ÅEŠ‹ª+TV¨­QZ¢µEJŠ•**TP¨©QB¢…DêŠ*&TL¨™Q"¢EDj‰ª#TB¨Q ¢D ˆUª T<¨{Çýžø OóÆärÛ-°sº¶Ô-ñ@™";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;u¥È~Á'K‚öI{Ñ!'-2È— Åëb?¶Ú·ÃÛ‚±ssP\'ßú0²¥/ÏÚêõ²X³ÿ¥Û$¾ë5 ÅŠF+)>_ ¥s ?#ÙÿöY_\Ú:>r&À`3Ÿ5Ñõ’Ää15G6G ‚`D°YLŽàÿdŠÆ~Ïõ«Ê2ŸžßþÌ—NvžúiïƒÿÁ4pý›þøýÈeK£û¾ ð²g0ÿ8U™¼S,[”oç “=sÞ>L¦/ɺùƒŸ¼dù¶Ù“׋úf ÛÜåë€ý\òïºä=¿ÿs¹O)1Ác‚#[bM¡€ø„†³•°Ñ-UÇeþÃ/¬ÚØ@×ýÁŒû€QÑæ…ÐÁp¥Ø:¶‚²P|JSpîâï ‰ò¾ç#XY t:=üGË Àùb0Ÿù/ßÁ$PX>"_ßOO¼Öï­¿/?ß¶ïRDÁøÔGãŒôŸûßÔâþ¬¹Ðø¤ Y‰bïœÉ$Wc2n8¯ Hm)£’—œÃ> “öÿÂær |ý0Ÿ–RpOÿ„ß–g¯Ö(s¢³ÃëGî=#.O§î¸ ’mš]{ÃÎd°ÌïÏÊZK£•ü’ê sîòÚ­Dˆ‰zAÚ, =µ†ÙÜ\Ž.cˆTŸDI ñÄëÁX†¨'p"ྑGÈ›…£q¤øB^µffšg«.¼Yžäý:6½4š_^8W/bHW¯¾Ò[sH¯Pž‘ë¤lȼ|ñ#—S‡qÂmÇK*êŸA Ùyzøê"ž]»Qy¶ñ®ñ ëî­ YEÄ&Æê;ˆ³BÍåÿ.ƒÙdZ(~y'_Èøåo‰¤“ƒþÍ+|#ïzÅ™w~B’8HJvà8Gª±åxt:üΠ‡Ÿr…œù‘Š1m‰‡ìßÎr’k¸Ò¶ LLllllmMMM ß¿‚8aµjÓ —ªjzûÔ¶íE½Z(ãÞ@ÏYÌDf¢!Q¹½ýæíEÖ‚ Ž„Ë¾1ŒLÎÝâ°˜NYØ¥[ %Ë—/Þ¿râ´lÚ³ƒKÎ=ÚWM;¹Û"Å—÷¬Úyw™wy•LaS¤=2ò)´ã™ôÄ ;ÎiÅS"õ”o·¤‘ÚOu‘‰‰‘‰‰‰‰¥©©ªýû÷ítÃjÕ¶.•´µj*õFõmÍ-[­Kv¬Ú“årƒˆC„®¯Ö4«&“[rQ/Ñ„,Ï#™_è—Ä>'Ë ÅëvØ3vîN{·UÛ·nßL3&4Ü»våÛ—.m×7¡Ò:Ìë‡x¼üiÜÆ3øÑÊ)g>H8ÀãóZ(¸"ĬYñ¼•:n°H”GæQóɰî©"ÏœÄAÓä¹{rš\–…"A3ѽ/ˆ‹Ž™Óïß§Yâ}±ÑäyÉÿãã~>Pøï&é<ÈÄ1VŸoD.ÿÃÀ9_²y‡µ+ïÒM}Ýã“ñG,q¥ëw|mc¥¢³fñ¡Û-'ÃŒXÎ0 4aG³ ÔgrÅ‚OggS@BVXX\²éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç*Ë> Ò©AP¨Wn,¨ZŒò¨ ¢ìü曑êq‘ž9‡]çA¦É’_²qˆÝÃúù®›OÁ[Ù,X¶KmäsÓÿЭVš­;´²å˺°©bÜd* ie¬øµ|}à#AÆ?%œ±bÅ‹,~‹,©!BÅ‹,X±jK*X±bÊŽX"²Å•ø°T*-EŽ„KYråK¯êáÕiªÓÛ˜3ÑbÅ‹ 8,X±h,o„U1z-ç,,å‹ñm² —.]Vœx¹ueªè±bÁP©m½$\„?NøÐÊI±ŸA¾"Å‹,Z ±bÅ‹bÅ‹®%¨³–,å£÷Å‘há+]û·|Ï!Ýh«CÎ\+”‚G‰—…Bíe‹,Ä>X¶K–,„DX±bÅ‹qT„VX±bņX´1e &œ~Ö|ÿЬ…B¥‹ ¬¶Þè¼JfÍæÛO(E~Ùâ:©0óó *W$rX²²c¡ ‡2N™¦ÇvmŠ„¿Õ?»“€é¢+áÊÌ6tùö}ô½Õä¬Dæ]õ¹ëfˆ?“õÜùê{sVQKd³QÇü]Q ý^y\W£ÑOb~ÏžØS”W òßù5:H·]B<ó3›}á9”Ÿ®Ø{XS5™+±Üå ŽþSºõÊî’yE'v§VcÈýU”UÅ“Ù?ßNU[íVL·¡V–ÊÜ"°§BÑŠVñ}A ¢üðåJþ÷+µuì-V”ÈD)°²¯yÚ¯‰R°T©]•Z[;@¤g¶<™G뛢Œß`I¿ÊìívôÊñÍ«è~2v|ù¤Ø«W8íåLñíÖ™×cn œ;1m£….Z“½ç6!á ZkØ®“x˜>,d¢hÄ›aÎý¹ž°žpqÛ‹K¹„.«ý‹¯ö_°tô}¥#t‚%RH)´Ë´²\1` Ÿ.ˆ<Ärz>“ˆ»ÀÄcqÿ_ÄɰoÈÞ=Ƹ•ÊgÌi™õdÎ=ѱPò1 1M`ØVÍê>$Æw[ìÈ5ã8ù#Ù2<Vühƪ·éÇB&!Ö µsf°·sfÿ'‡šãµP!ƒ°¤C&„5¨SOñš|N.ü¹PèCÆþ_¿1Bÿž}"ÙåÅ÷N5Õaêxè\ où°1ÌgøÄÁáÌøßùËû‹þ2þü81½“Œ'˜“z&<|æ|ýñáç0æx‰uÍlÐ….ð1*ÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«'eVJ¬•Y*²UdªÉÙU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²Ud‰VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’%Y*²UdªÉU’' „ÀxL&„Ä ˜à@¸Ð!:Á ¨^šå"ä »«Áˆšx@ƨ¥bŸŽ¼ñÿq„÷@€¬@¬&…ÃücÆF?8ÂkuÒ¤,ŒHÜBZ•a9Qqp¬v.*ÆŒê!ö›Å½8†±¸ùycuÄ d–þâ¹;‚‰üç\/!~ C½±áBÉz&G5T(wñÂF' A¡8RQç‡uв^‹„‚P\ºÜàqéh d@:'ëqàQŽ™ù„ñ"Ï!¬hq‰CéøÀ€‰¨‘â±÷ƒ ù{u‡ð|vÝ'/B8¢Ö‘`‹ˆÿŒD`Àøn±ì åéÄ_ -LKñ~BråË—.]npŠ…€sÄøøäãâ$ ÅË—.²Å‹:Âçuò’îx»¯Œ/(x¡ó¼R¸¿ãJ`±ÜË‚ü‡‘ñç”Q`^ ·‡5ºŸ¼GÝøù椌;­K¾?˜Š6gÿ¯‹§]wþ¯n"ee«xX±hwxˆrÎ"ÐîXe²îX´渊J„ •**©R¥J•9Ÿxñ°·ÚdÞ)›z‡Þu(åeJ…7K*¿»‚xþpâ/”m*·À1üŸ'q n±qô/'ÆÕáÓ?¢=!H*·¬áˆEW÷—È_MÇf7ÿ ™î]EQG£¦šWÕû÷íúÝ»(;·O“äÆZ{sŸÆ ~úèÝ÷üçòcœÝñeˆEǽåÆ!{@§fÅzüÝA —EQEÒI&[h¿~ßBÕ»·;EíOÚ^Žþw͇$¿9Jx¿å<ß¼Z}c †½Ùò(@w”œÎeä %ëšü¼¾ŽDôðÇÉñŠÊûãíßpŒùó½úx¦sÐKáí’_OƒêzÁò|>¸f>9 ú擘u$;Ÿ7žwm±u<α; Ï=g`‘èæóÏ=+„Ðòë§Q[ðìe;|Dú…òÞÈzí¼‰Áî…=¿C·¡Ÿ }Mz¿àráìš´/B•y;{£„¨ ù+ìM:8i Gœê‡H–¯0@ôeä_»³±ö­`„ÂÁKÈpS„ø¾ æˆn¤íDÉÏdÑfzUé.®&ÏÕô…ÎFw‰ôuùœˆÈ_X¸îðwÜx ~Fp*ÕëSUBU X__lÄmÜ6îÛìZÛ`jÖP-aƒÁ7u¨î=ÆßŒÜú&£õƒ₨j…@MÞ-¦,jbVSkvó:Âîçpïp;BUº ½ÂR'IÂRR%)2BeåhIœ>$¤¤á'Jy®ËÁ'¡åcrƒ§]×NfRAÓ‰ 8p„É)8u%$t‚.IÒwNRAÔ¤<¹t– ;ìf€ ÀÀÞï >ö»š¯¼÷»}íÞ>ö¾ð{ÝØû݃ï5Ûï>á÷µ£±÷€üvûßxíx xûÀh y nÀ0 F¿Ö?aø½ZÙl~Î‡Âøß;Öu<\ƒ°€ìvh­ÛF€ÖµÛ±Û·¸ÑäðWÊú(#ðI^OGàð}i?—ÕK3hyo‰]ˆµa!n#ȉ¼£KæÏ”©&T¥´ œj[¼ªO(5¶ë.´ihA7Õq« rÑ¥¶¤Ù¯6Õ¹rë]žñ²çuegÊÄ]–Ì5ÏW )\þPɶ­”¸iV-ž´Æ ˸ˆ ¶ù–­[©VP)Vi«®Zí㘅ͯ+Ýrá䬂ñæ/+£!uÍf,`EDQWp—¶ZU÷h )îµ6$©zbStF¤xòË9NW—³Õw¬ûfÏŠTÉm¿ö'n„Ê>”C6°Ûé‡2sD`Vœ¯K^pŽZé‘®+‚@;àˆUm­ê×Z¬ôŒUb¤©R0a8…”6Ò’f gç(Ía AAD¨)QAM»11ƒ·ØQÚù);v QI‹]±vÜpÄz}JFŔ©³9pîìRЙç,¦Ø@€iQ6ɱv¬܈'ÜÖˆ7À.ï2:¸‚€Üó5”î•ñ¼â¼¢€àê(W êÀ+ÊOä×XdµØ@–ëµL•ÜAY!Ê E·þÊ gØQÞËiUòÐjbVσݮ(ó 3Uò²T‹|œv.É3Ùr°Ü{ìDÚT²úá1?å«h…v(†¢ ![öÝHµrm¥_ÙˆÁ¢|R6®‰™´´•òÝ«ƒs[¥WORgχÜEj¬ëuÀIØÈjå"Ö|Ï]¶µ·ý¿ÿ¡9@¸í ‹n•„%m„«2•«–¶ @]T-Jº¤\ž¨Ä2á ŠíC¹kÓÚsi† ˆ•Vy±_'\ªâØ•˜…I7¤k™ÙÀÔjù’¸Q³P³¦k/YEgÄÓ”­q5{™ëTµ–“hŠ«Wœ…NËü:[ëOAJU%¥j¹w„‘4RžÖXù[ËãJÁá Õr”á$¢ómjW®¶]oŠÅ[•×-nýRmrn¥e®½Å}nsglýíÁ*!X-¹]ËuÜìZ¤L„\íÕ»%ª³«ØË…1+åø-PŸ5§{xù‰K˜¹&gµp„¯ÛÊÅÉ+ƒÇµ‰Û¼.!Z×`o6Ôv¢˜Œ)YëßÚ”µíg؄˭—4 ³¶#kþê©«Û°«kž¤—캫ÕæÜÎ͈-eÜÚÖj)^²Šbï5à§K²A¥–à*Ý|!- µpÑ?Îûøl÷ËÎü ÌAð!Üq1½[¹v "暉Ötë~A¯)ÌÛöW˜4¸N²†+h§ÁÚ§%Úó£Iëk9ªýSæ1שÉȶ:ÁË×S­ÔræEB+ÏÏ™ñ-AR–sŸ0edÎJíTöÔ\œº¯UœõÓÔ’Ww­7Š–Ë÷Qó–8*'÷ÌýFùyMÉM²eaeiŒ¶±ÿ)_²²¬£®¼ÛÆ]5]|c_T¥üöWš]•¥²(!/4 ïjšÅŽ˜+7‡««€h)SP' D=Kê‚"qLAijª¦A€C4´¢+ÍM¾L¤jjE'ŒLEÞX‹«««ªÕÕÕÕjø<ÂiB’ID¾mŒSIf‚I$BÉ‹9IÖMÖ ò ™Ùޱº>&µŽ¬n®¼mÖj4ºÂ0» 0ÂËnµu’êêëwWLíaˆH]F‡5ò~nfôb*·ôû7˜ß'Àüð¾k6h§úÛ0çÍQój­CYó[ÙXј"~ŸÞR†3¥pß?o™:Oï)þƒÀÃù’"C$[%ýúÐÁûô‰ù³Ò<Èn¼Î¾ìýýù“ñ‰b饲5ûï雽Ùõzé`€œùæÞ|²Ì;ÛšŒ•¾¨«ù¯5÷ìÔE®LýŸßjjž·þÑtũ߀ŸÞ~‚¦~ø ©¸ý#Á[5Êæ³Ôø*â÷æx·Âß"¾Ëçõå·ÕÄÀÞ÷´Ÿ\q+½årÞ÷§pþy·q_¹ænþgžj±Üqi›ZÖ…ï|q/}ƒê¿qÅ YÜq$Qpî9ç—ñÇxùñNtDŸ5N〚ҫ½÷—ÎQƒ$ÍéüÉá¤U¨îŠín8· :Ùoj±Çqn™§—ÕKè:eÎÙÓÄjŸ½T¹Î—z­ßU×™: /gE‡Ft™Ý'·Çy³cÝ^ë¯çÒmß~}ÝÝ™ÚnåÝÎ;¿¾çÆôOwdäüÜØäœüòú¾ãœJ7wkãÌí÷ó¬Óoÿû³ ûì}Yº»ûçÐNOwdäú'™ôûÛø®Kúè2°èð·Ü†{Aë# nmkؽ”imnÞQèKÑÝÊå9åéf‰‰‰³‡‡·p,&&í\¤øg//-dÜÄݬ˜›DÄÜ5ððôr7///7m'¾nÚMêMêŽî¾¾¼€w/R§]4JçY17/^¢Súë?4ßÿüÜÌïï4ßÿüÜÌÿüÈõw’­»²K»µ¡I$¶ëÉÒH$’Kx.Ù;¨)€pÉïŸ > ñq>9ñôòž®ÓÍîlÙ øß%øçàñ³#¢xíÀ5âñ𠘯Œð~1 ¿“äÉ \>D5'Äö‡ÝÒ)GCoÀðp'¥êdž¤Œg·ž;Gá9Sã9>I:IÛ3½âþ„kÙäÓ_&?: œXÙðqŠy&à†“NÈR@F§”œM —}n…Ð.);T·GÎõŸêBg’a|ºXAâ!9ç˜r ¢½TÀÊw+~w„Œ¡Dá˜Õ"b%Fƒïho©õ¤Áç;ì!‡<ñаñiyñ:çœðˆì8âðÎ}=$Ggj |p$üÏɇÂ{[öJºtµ;~Ïoâ}NÄùŸàÀúOg5!FÒ¬y5, Ïv{´)åߘvH^)ò<št|üŸ÷‰ä`t ¨ —JiB¢¼„ȾDë·„ Å4å¢h¡4ŠÜ¿ úŒ÷>Ocœ‹÷,˜Àž\À»–uà±rçþÕ»Ò\Ûv¼ÛtZÉ&AmMÛlÜT.m‘³6q˜SvûvÆ[DÖÖ¹¦f>oõ¶A:vÆŒµ³[MÁ™€AL@€Š"eŒÌA)"D‚H”‚D€@$¤€E$@H¸($) Š@hÖïyuØ>ò_{@{·ã¥ø ¿ÕÞâøÀuäü˜›ÿÿfmr¾•Ê5×@#+ï/–€£—È#]©7»Zü\jP²Å›eÍ^Á\]LºøíŸ1—xÄsRA±s-«›n^•µáH\înnù³fÕö- «”Z¹[·[I±Ÿjìé³­6u*MYê£yt&EÅs&‘úD}ËšàWŒìØVZ—CÁt×]¸ìP5 >Iím«JýS­µØB½½¦lìÄmÊC²²™²¾ªÇÍýÄ+Á ‹–´Ç.ž½ŠÎÛ̺…ËÍÇ[m«³½#§å«°wé›n6ëâÝ„+•÷ì´y*½[pW–•×n°£÷øyr욀N…°£myÅÍ‚¹v±êûmiÑÚPXçfT‹Üû‰÷¬DºFWªÉŒ›­wW!@Ïn-p3¶®¼ç¿€3^^|®£FË„;v Ò:¤¬ùsv»³eä­"”›r…€+3®RU+öí’“¶\«IÎfgÔ…Â[fÅJ^dŠP¼Ï²¾+›‰øÜkÌùD €ËjP1 $RÚåµê'Á€G¥.gcްºp6¾]å-{æË™r§íù»e÷J~Ý?Y$EëÄ’¤ŸoÄ|ÜÀWN‘º-tg!y8M¤ôOggSEBVX; ,ÿÿµÿÿÿÿÿÿÿÿÿûÿÿÿÿFÈw­ˆ˜™…™kØÆ_§ÃttcÌÌ×4w''~:þ6ŸçdÚ5‹Îy¢K„ÉJo$Éœ½‹ôâÂÉñÛ.ñk:_³ú–±Câ·è®¸ÚXPG··¶)§Ê©p)Ç£Õ¬rOœ+†Ÿ>æf¤¨ ²q„qN?Š_‹;N:šŸzî±Ç¬á5uw¬èí©ÆÈB«ìÁ õeÕÔ&[IÎÀµƒTöp‡{«¦vLÓ;»¹Á•ÒÃ&B»¼ájèéŒ0ΕŒû³Ù@k m±ZyQ£ã À—YK”(ÌÏà°ñ@»ÿ¾8¶¾}ðþ¿ÿq¾ÿÉŸwªi1·ô$o6B.ý$×Í U¥¤isÆÈÃŒ¹oã~a™ýÛ%rŽM#3ÂîUTëªw¦8¯ß?|®Ö§g>3šÚKVþ,“Õ¢í>¤øú\0yê3©Õ@¶Öæ×˜Éï}×꡽IªO§¼YÉ“nþ¼øá:Ö³ínÀ!ø†?×xš«SõhLÞUïµî3ËR #©FÔW õöOÈÿJ @5[-·ßÛpÉïSÞŸø³áχRxÎʾ¯³HNæÏŽ|sã|‘ò=\<^.âô¨¯‹Åâñh/,¯‹Åø!RCñZÐð}äNSPã%ù¹…ŽJ,ã@Á0儆üw_Gžpó Dø£äø égOÊõ>7¥‹Ù^¨x·¯a‡H¿‰68û p}åÓ¢õèuåå¢|Îå eåÖ|©yÌ# G GÑú)(M9<:½r2Â2Êç=Â'מ÷–\3Oàý’ ½&óÍùqטby¼ây½qÕð=^yç¥1š>x?ÙX·ßŸ®y>À)å r9IØžO©Ø‘ñ}ù‰DÒ™.|㉃2³ÔDGˆvSÓ‡!õTÕ¹åPIV®Äϸ>Dñ89 ؾ¨xŒù?<œ ñ€Uø0„œˆUY°)”IÄ–@–AÊ Œ&,±(‚샄À’ˆ€p °$%@ £!ÿ€1Œ4}ãG`>ðx¼}å×»ïvûÁ_x·[>ñ÷€Ð{¾ñ£ÜhûÁ¯¼}ãï}¼{ŽÇÞï÷‚€;»x÷ø#?7à?b;£@`÷60œ¾WÊ÷Ÿ€ £"z½•í>¥'à,õTàÐ*ÝsÕOo, åÊ ¹†¹·—U%+”•n*Õ¹vÏl åRøî»£FmrÜFÕ‰¼«• T{¹vý[X õ·•]<0Žu‚z¥ñõÕBÇÅH¤o]BgºÝNÞ"þ»¸™Yj.Q ùžë®Õ•Ûxì“Vt›3iyžŽM-yuïNSâ-À-®•ÖÚšEïÚõ’{W_7¢ ÆÙ‚wVÄ %@+ës=-¤ÕÙ¶V%¿Ò#sSjä2yÝɬ[‰MmËzÙ•ñ+ËòŠ~h÷_`[gÔ —Å{ÚÛ>¿ø(µ†k¿6z¡5¿ò·9€âÎ]rÜ©³¿D5nqŠý­kÛ‰™Ð¥¶ì!­zJíæÂ¸ŒSýÿg6Weà€‡ý„.Å!@ã!e pØ*ý¿ÿë‚ñ•îlÍ¿ö½F 6·e¿ÿåJæ •ÄØi¯Ùvæ[?òÛp=¹­ÌÛá¾S¯·ZW½+’¸]œ%εÑ×\<ŠÜ»Þ(…Ý­Þë¼ý¿…À(w€`-;ÜøÏ«d›qóÀm“#fJ§ /3ÒçcYIôP˜,VÍ|²‚åÛÞvw¹°~×µÖìíuÜ@BÚFp sà?~ÛœÕH»Â—ŽF[m`6»gÝÁü9µ^^ð·l n[_ —¡[»À\Ï.¶ÎT®‚jÀ. ¾ËsZJؼ~;Ýv0wjé…ºWRKuĽ͙»Î=ÏU‰·-Q !s·+±›¢ˆe»Ûÿ.¯8 áU¾hÞ„()ÿ°.»f˶ãéN´iþ}O†kÁˆË­³PŽ«eßÙ óÿ?–Ys1ýšø쿯ëõ;íªnç1óÀdr`ÏŸ<ò>R¿Mñ”ô~g–HË//Ëòù?—ƒ~xŽÿÏ!ùÎ!§ïãýœg'% ò=ƒÂ|Å$ÁröO0Jù¿—á]¤™V;óøË3²­9(ÅcŸålM¶L™óïìäù®?>\Ë#,Œº¯óãû)Ú0Ú2{ã*±¬±¢ü³@¬ìë1ÛÖòŽyi}êÔÒ Í"…ä~\ûÜúµŠëp®„•aìŠRdrÇ¥ÁÀ«ºZÉRfq/«Ëæ}þ¿äX/!÷Eå÷agÙœúÇŒŽQƒ+l} T6Ûñ¦° l”DÒÖ4%Da ¸a Ž 5ÈHH.ó–ó·?°ÆÓ€w5#:ß™´å‚_³îºyØ#Å®²µjMg42F&#G+P“©g´DçuAõR˜S¯¿k)ŒÕ÷÷ëgºü‹‘cŠª)ù+ìü\‡¾³ÂžïxrH™}°nòcm;K¥ó[T(Ÿ”÷¥ú]ª­¿U¿ÒT3e¥NÛK™P¥U3³…Tª)ÓS.tæMª0Û7Ñö§j}=ïµË>×}® \µ­ÄÖ+j˜'"œyÉŠL6¹š\£<¼„0ö4åg_oi 4®õ[ÔãŽ~|;»ÛJ35½šQëi31yyþOk˜cBblÆGxíéc‡Ü@˜k:4ºËqaÏå$´ ZI%¸è "O¨@oo"ññ Sð&òòÖ?&zÓžWŸ¿N}úþ˜œ“éám‡-Ô5¶¥¶Ä¿\pÉï~-ø7àß‚ü]<§¼­˜ðk·âK;‘&=§Æù%žÏ‘¯f¾§‹Çå’<^/‹ÅãâìâÖ¼_üTüF–‡j'¶ð"JCLN úÂèµ[ÙÉ zN>x>xà9ØvµŒïxGïGw¹ó=½Eø«ÛóO”äò“­éDæ3§®|3…}=w’Sѧ*èð|,EðäjÊ‘gÃ'_ $>g;ÞÄ<~Mìòê£=ƒß^ÎsgÏžhDØôaÀsÏQ3³£‹ò#4yœ= …~µaÃáNqYóå$6ò!Íç›ÉõãSÅç>ž}Nyêú×â3Cž}== òøÈ3à˜ðtóàùz€nV³ÙñRt7°òuzSɦgay5ø NØèsá…F“iÈH U~$d8(p{|^•¨bT¦DáòÂþÀ_;Ýg¡ž¯¨J%;9‰”ލU91Xˆv/™ËTN‘L4”<Ñ蚸 tCê!=Ç9Ùð>Êßöµï{jÕU½êÕª¾J©½V¯{[|E±¿}[nX÷¶ ÀîûŸsî¸}q÷ÁÔ;îýƒ·†w`ó—wîc€0ð÷;ƒãîû€À~ü~ÂF>ç¼ýûô~ 㟆÷í9Àîö=í½íïD÷­Y´/âH!Š€Ä3B þKH‚Qÿ(¢ˆ ¨þš4ha ìèv}˼}í}à>öƒïxì}ã±£ïvûǸûÇcº}à>õ°0¿zƒïcÜ}ãÜ}ãZ¼Þ×Þﯽ hhК âoÀrþO'‰¸àGà‰9D„€èØÑÛ@hq£Fƒ]ŽÚÑØ#‡Üüì~Ã\=€ƒðYÂjV«u"R5-}—.R­£M®W+†ø@B@÷°ÙÕöRAö•o›ÍæoòºÒ =UëÞˆm“»ÍªËs·nµð÷«—uȶ“Šže"³Ú³ægÍ€‰\…´B]ÛVÐ6Þ3½m™Y¶bd›Yޏ¬êšà[UÙÊõ×.zšþuÕYf­Êεî˜uG™žëM¸·ÂæÎø„`“^ð»¸×ó>ªüÝú=ÍO]ŒÎÝp¯UÚ'[åíÄÙ®b]Æ%Vªí*³Ö'K®RÊ×oø««•²ºÕÏn¬ºÙÏ:á7_+?¤Ld§c6.]|×(BõüÄ Í[Ö·ÁììTT+\!ÒDlýËmÂï|ÅÕòµ˜#gì Zê;“B´"&ýL…ʬÚîb+×lÔpÖêÛ‹u»éj…—¶´-ð ÚÑMÿ¡nÿÌë–ù—yk³ÛvºÜ‰ÀOggSGBVXßÅrÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿLÿÿä¨Í`¼ªƒ»™E1ñíß“JQi÷–Àq ¹nýËÆ[í7qÜÉïÊqá©0"·¸‰)n]p ˨Vâ$¡l›líB}km°:¿Â¯mæC`Øÿµ×+Þ(M™íV«IB½%6̵ÊK^⾥ͮ¹ÊNM[¨W™‰@Zà04 …]Å®¹x[‚ ­Úð/¹D¶•H¸6ø[ž«û-‚ Ü]¶Ê˵w1?)nuªëvÓLR3VxB¹_¶×غ®®µÀjüV&ý–ùr¶ÊRd¨JÌàMWgZZÕ.]Ò1hìµµ‰¥&¤z®Úºà.ÚêBï #’«t®çî£GP006a”-”µID;Ñ {æ.a ÌUÕoB»ú/T1ß“µG3ÎY2%D¯Û:üøÿØŒŸ“; Ü>c?Éßl‚'å–Sð4ü2ÈùŸ,÷/€âŸåø|³ËÕ?çzÎqäÈû¿¦˜ÖðÏa½œþC$üµo hSeP¯ê*€¸ƒÂëcí²Œ¡øüåhY‹ˆ÷ÌÇ·l¹‘ñÃwîD£Ä/×/ìÒ ¦R óÃþÎŒ$è¿!÷ßtµ,›y{ã$ã¶Û34¾¥™w¿u2´D­ü/ÀŒ§¡~Kåruˆ%úx“¢ ‚VIúJâí,~à¾ó¸Ú5iž #á‘:ÝJ×ì„NESw–ìSÅ ÎÁòƒæ¹"pËÕ«Ÿ¥TÒZ¡<Ã~Óˆòz#Œ=!„ýe3¶“å*7}üg&ã}ÄO%a"íÙ)·¡<_;ûSK¿s;|„§ô…;õ /—U)/Égè>ŸO­¦ƒÝ¶ÊÖ±å‚ûSåäFkä¶1Œ£›ÏÏ©ícÉÝÓ——‘?8¿—I‰'$²ç\æ›h èÍííí=ßÉѦ¿·i&<†œð8Úr Œ­¤»4wÇÇÇĽ}zxÇuž¾¾¾Ý=}}f<||||qããã|——“Iƒ»ÔîõèË׿‰ÜwcÅåÔy@}ðþüú¾Üºck„ÃÖg[m¶Ý¶IäžîÛl™û"\ KEÐpÉîù3Ñ—âÔõ¿ VÏZö|É܈›²'½‚cØ|O‘øo‘<Œ_O;?Á~x|Þø|Ð÷Jò‹ï½|=ðùÚ£—uWÎS»UÁ§t6]Ö…Rù.÷#ô»;WkG}»®Üv89ô5U\óUÙ\‚!—VÈbÕ«®Ò{¶»nPDé*cJû²°²5Ñ®ãx÷€ï‹ø‚‰HI @Cù! "A $I’ D?È!üE4¸ vîø ¯¼ûÆÏË‹Æ~oÀ2Aø ¸yÚР ®þDòWà‚á8¼V’ÜM¼¬ÎëBÄby/™¼´’í/@¾2¿™/5°6|(ëX(*Öåκñ™²=áq2Õ·Ê÷PŠÙ\Ú¬ò+•ñHì díºXÆuvºí­[—MZûP7Jív«¯Â…Û«âb±5µÌ“¶¡qXˆµ\Ù2*7»uêæÚµµî®ÐïëšÄDófvyVæ!w8RW­[6w[©+ñ¯^×gÉVÙ?Ô§g.gfµ[3Ëv+½¹s׺ÖÁV²“Ùõb»Q¯И‰\–]{Öµ~…_m­lÙ\º‚Rl\ÿR·S]‰4Ÿ4ºšD¸‰fR]³¹a5– €xÿVJ^úk^×–ß”Q{±%­ÝDs†®ZFÐ<ÝJ†€Õ‰€Êb5Zé=º’£øe½µßWëwt@©Wke¡6Mµ×‹Üë(ÓE}ËâjÏY€ óÞ= «9.¥,¹ÃæeÿQÝ5!%ì¬ÿÛ™×Ô<Ù¥˜‰þTœ¨ÍbQBVt‡ÊÉ•+–ºp…P“v mÜü¹7å¼}H¹›l }±|¸~®Ìe•µ¬›ê–ÿàR´ã½æ$¼®Û:ifÍ4LèOæSc°èÓ%+IsJ­‰Û›1Õ¦1Rr”ÅË—l¹ž\«J ƒ`¶]àÉN  5ZÚðƒZ»(…j_/™H4`„(¥° oÔ¾~¶€ÏV리;Þ½ƒa?«dFe@û 6ßkJÙ™`ê¹ùÿ¹¾keÌën¹ŒŽ«ò'ù‘×S¶ Ýý¿& Ô~å ¶Y|ã5?÷övø&øasoù3Àä|²Ï3*ß1D£Ê>`æçSòâ7ÿ³öAàƒç€â‡ñC}ÉŒrû9V{È\ŒöLç1D0ã Ö<ù?)‡c äšaZâY1¯Z#%§¨ýDS“Ž©ÿ K–¤Æ“b,êî4´¬íN¨®Y>üùUvnòLœ’M5[0øbùýóææ<×J??rÌcžŸÄ~ÆO7-ßL·‰¶’òMN:‘9¿ånú9äsJ©ÉøäR\ àøråÚsÄs¶mwO§á‡ps©¯³O©÷U’rÊË–MeÖC3vgX8%“%Q¬ ß{¾â¥.º©Ó.áZv¶{Û±ÙÙ¹Àägìï¼™™qªcƸW~þ3±;-ß’ª4ç½õw—[LÒv«-ßFPüJšR‘á<埤©éº\é£våvÛmNM,ékÞîß#o`g…S.©ÛRì>~'ND¢zIÒxø²g3ƒýîÓJx?hóô–ëµ]asõ6ˆ‰‰a¶×dÌ­¦Tñ%¬%yȧ]/“VRøHÀ+Io±Ñ~H¼¬, Ñ¨¼ò²=½çg›li,•‘yAøšJýûîU’¤1Ç.­`U¸]ak$™Lby4­ª¦¸g:dÆGeYŒ0ºf§’.± ’f‚$ÚÎË5`»»³ ÍÒ.¬¡Yâ¬Ö)†@íaXㆉ¡aŽwV] S9m‡WX]`mÂêܵ9ÎwXeù;–BY»o7ÄŠ$zÏ'Zõ*×°× øŒÍdð˜÷`ø°÷§‹‡¨Çà;r§o1^/‹†±k¦À j¥Jºk”áÀh‡‡Ñâ%¿f›˜[B@^ãêCá;ŸCNO¸ø>7©í…4mƒ0²ú žÅÃL€ êC&¡òFÁ§Êð£ }Eù†w¡ /Š<8pT°.ëjª§¿\ÝÍÑÚª®ÎÕUT»]Ý\©Î&W2×w:º{× Ó\Û[v(Å>AÆR;„÷!¸U7UÝ´C.뻵UXcŒk‡]ÛÿGZºØkZÁ˰۹ÛeWß }ãÎA¹_ðé$OggSIBVX "¿ç°ÿÿÿÿÿ ÿÿÿÿÿÿÿÿNÿÿÿÂ$H@ ””RH(xHHüްƒ‰@ R "@$(ÉE$a @ÿ&´îšï´ü_€¼Ç”üÚM~¯ÀY÷>gà-8ô¾ ¶+݈¬Ä»7v{ªë”'»_2¶jïãyWjí¶SæZK®lcAn­³ÍõêâeÞ*¼9M^¶®ÙÙêöí]«îssW%ٳ竸ågo-§&|Ša°‚)ÌÍ›5l^bZò¼¾RdwÕkÚØ©&O™Ý7sem¼ÃJEº” ‹HÏÍ·*\;•KizÉ:&»rÐ ^ŽO<°™vîɹIËVçͲjCi‹X€'T˜¯`ÂYJ^«¥JàÝhZÜìüªûšÜ¥¢€k—s(êÜÙ³WMÉ»wsç¤`µO\~s7-Þøû=µu×ýÁm_{zå²›]eQDwøKW]Ÿ>ÍB¯C¿®®´š°[™@vÙJ™t¢þÏBÁA™“|Ú‚ vÍ@®ÕA ûn×Ú«eÓSO—cÄúæ«sSñ]¥úìgææ =³.Õ¶²í2BÜ»ðU‚©%ï-Ñ•é‰WVÕÊìÎŽà³ÊÎÔšþ#¶tù«×{™wZµ«W5îÎG ¯[Z /æ˜Ï-ú]ƒÏ»”šæ¯~ŒÌÚÒ=»6¸»½!iQ>œ§v%;-]ÍœÉYå&õŠ”1BÌø—jöïëÜ[uíª%f×T˜7 ‹HÛ¯B‹«ˆ )IHH^QË–ø’p—\¯ã&åuÞj¹jµSyuÚ#ócö³÷žmù1_|Wúùþsà3Ïçóèûƒ|./ØÙй”&5gÌÝt% ð}Sß‹?Ì£›XN²ú“©û¨óË{~c £–sÇžûŸå¯²ÕsóžØÈã¿R•vQœ£+“VØÎ_ÕÍ"V—Ìß$üLkŸ¥WũŔCÛ*’¦WÉzJRÀƒw5S\î±'—6µÑãZß5Úè§·Nž%Rž~”ÓÌüÄérï-ÞL³':¥v«&CZ¬1¤$§Í¯­Jœžÿl7u;jȘ9èÇmª0pŽëwzØÐ™O}>”Æ*ÑÜݱt¸QaIÔ‘ªOy©s¥Zïî¥Éí¶Úü‚Ó»JóRÒ_/'{<¼ù>Œ×¸VîNxú 1rð-ýrR@pÉï>;¯LÇ¥×£æ¨ò˜òc·“—£äY;šÇ„ÙñO‘ò>Gà.;vx¼NVx>Æ<]ž/1^/qø#ÀüGaÈœ¤!ö;ˆXS·ÙùxÏ:æ)ؽo{ä'P~iyŸ+Óóo·´Åë{zðS'ªÌ|š~h~ÎŽ™•ø§Ã†a§G%dÕÓ½‡›Ç\ó¯#ŒÌÂðÍÃ_˜¼zèI2x îx縂vò8ë‘p”ØðbLcÓPÓätlÄä(•ÂÄç¦|ù„ =ŒëCͤéôûçxÚLøLz×=_±·B®˜uÏ›—ïÊ›F'—ò{á¿8nõÏA¼Ïˆ3Ÿ#¾$F&‰¯³˜]8y0-z‹Àˆ¹ì(&¡äø#KÑN‚RÝ ooÅÑ~óxa؃ì펀ìPŽX&špôŠU(”\­ŽÞv*ü SÃè]Š•Â ˆÁ)À¾ˆ~|ìDZȟƒBm÷ßm¶÷·Ûï¶Ößc|“îã¹ws«±Óï½W!5@ITE swmHT¤»ø}#§]¸éÝ[ëµ¶™²m›m¼È_njß ‚wã—úëgßfÛktJêEÝ;‡ß~+ý'[MÐîî¥ ;EÖÈŽta|>û}ï|²éÒ.œ!̧ áå)HIéÔ„!!Ó„JIÊ_è‘ „DŽñö TÀI8q))):FD‡ 8” ÒH”ƒœ¸r‚I9ûR!ÿv€À ¼}ãïžÃï¾ðGÞ à>ö¾õÞéøÿþ ªüܺx(ŽeG›ð0‘&¿§à18“›\ -}W-@0†ÊV+®wV¶öÀm°k™+îe­j×·Uo2ëmÎ¥u¯ZçR¾¾ebÌ1+ÜswË54ô볬‰mZ¯_[o9ݳÕÇ#kÎìÆm´çxéÒ_9±IMv×Ý£|ù¹“%â° ³¯6Ù›v‘Bb4un·3íÓ.®k¶Éªc©ÚØ6s®v]wh´¦j(N¬ëz¤Í™ñ¼—ÝÌWf™ßdWy®V1Û5{Ø s6*ÐÒx÷[JÕjiouv¯êæ†+æÕC—Í×Õžë®Tí•„+ÚÇP0YC}øS/í¹³±Cå[@Iîý™”)@Ö‰Uõmiî#¸æ{‰J• ûçê3X•ö»–ƒ‰hAVpu¶ç^W ÛEãV%HWV­ÉnݵÝ×1-×7Óºˆj÷¢êM›66Ú©ÎüîÍp‡™êí˜@,sŠ-Ú‡‹¶í(‚âÒ„ ªoJOê÷V%pJ’{K~W»â]­{I¶µœ ײ¬­/µü ®jìj¾òìP·l‹fc15©'pi…W`;­&×>¨ÑÛÚA ©Ù4±p6c¡m¦µE±ÛÆ&þV”ZÌWæ&eÙJë³ís.,S’q’µÞÒ­¤bØõlF¸´mÂZáZìûj·Ìº©Ë-ÂË]oÂ^ë’æ„ź“uÖùoŽÊ ®jÉ9–ë€Ö¥r ^þOù~‚R¹ üËÔ=«<ù?ÎÇ€ÉL‘ˆFU²ÎL¸ù1̺Â~fDs/ÔÃúù2fz”oA“æn„þÏœ—‹’ƒÿ0F_„êç°A¥}Ï’b2ç_3Àç+ðð¿<¯=|eˆzïï¹-ŸÞÄ÷Œè±},ÿgguS©‡áRGÎ-Yaâ×Ý!)Ï(Hå+‡\å|Uøl‘â§þZ$«3·_„Ù™á¤N¸à†~0?µôégÅÊaHü\Ñœ­O”ZÒK‚<ÂÒ-ýUï ³ó÷K[q‰]¹Bw3U¼Š~²iïJïi hèúè—“ó$‘4p_²úÖ;î‰iíâîìdøýÄÜ{÷Kg:†þ÷Tù¢§-ÚÏà”r™ÊHñ&t"ìÕ£(¥;¼ÍÞM½)Ïe3ÊÛÓ«Ý2¤ì™6Ùá,É΋÷}LÎUž6ýC½â<–»±ÝnñÌ‚«yÊ·;;pú­÷YzŸ#»Þ„«ºGOcÍç(éº+“§¬›Õù¥iný¶œ¹d©S‹¨í¶’Î~Osí ²pØ¿w;ÙÜ; '»÷9éÉ\zIXl îë÷˜~H&†\¢tÿËä¹~Çæù3À¸­~£“4ÆÛ°óùe{œðîBÖò,©[HvžvqTY$N‹öÀ¤qE$‘.º,vXoNªÊÆ-<«¤ ‰ãbVVÍû/ Élw)á‘Çd`$\^’ÛEM8&7^3ï|Ú£iUDà¬fsÃG•µ<+¬F5Ž9rº|I qÔüË‚Xe+K íV8äà 5hË6ÝYƒHÛ«0J°,{º³peŽ8êëeÔo7C‰LåeÊ-Ç0Í rÎ)Ž8a„°Åk #HXF³WWGñ¨ ‘Þ§PG+ðÅ(¿ bÃEÖ1– ¬Ëõ`‘†a†u€É#Ii~8¦M'XhòpÁÁE[“p\—ã `³VâÍ b€/:ÿöÿÿaÖÜÌž(Ï÷ÂË.±3\‚³¿³‚ ;óîuMt–$p~4`5ù›à¾@&<à„äè$Ïå§(sœ‚‚¹ú>öDèÆÆ5L(þñšþ$L¦}×1€Î±Îc1•I!ø¯œ2$åÔ»®ê4¢Éªÿ|ZžT”îsX‰™}NΙ˜í}s§´ú§:œÍÎßÑNog3$;Ò:}owÀ°H’H=›Ø«ÛÈž~|’îï9í±;Þ–MUÕ?!!ͬõõõ~³ÔçøúcÔÿ‡zLçpÉìŸW¬øïàŠšØ{(ø•ââró5ÜÙñÏò>Gà]}S‘%W/­¯r®#‰Ga8x¿?‡gF˜ó(ÙÓô,ÿ!,0ù@öxžÏœìú¾žÖz$ôòS܈3Nb”u@ Ù10àá ÈEì4G:i…}4SÄö'N '€kã9fQ¶5ò … iÈ•c¡Ù‚ç AïŸg©ò&óÏÅàÛo›Zè1õJcÜŠÎú8e÷)ˆiØ1 Ç'hœý`p%>g ÷£.#ÒÎQøçðs©Lw®9ôv< bb¹Š^ѧi>gØÎÂ'&ž4ø¡ìô| 8¡Úˆ4”„(NŒ9NO”A†¾ç¤0ð@CÀêë³îc÷y»?Ž?7Áð§éžKJP*2“XÓ8àùS£æà§10PÁp¯Àû¸yWËâQ>& ÃÉär€<³6Íîhö܇{‡Ã·mÓ›»îí¶Îïo{cÌófvÛ†9{¢¶¯¶jKÚ]ݵáðG™ž¤Þ“·³ÞïmÛÞÛ9j÷:õÞ¶^4g'fÇk·»¹ïvî÷Û…<ûï¾$ŠA€!$‰(‚‚A ŠHàR@$‚@€¡ >ñ÷ª«ð§Þïkï«ï…}ãïϽAî>ñ£ï÷¼Þî¥p? ðÀ{»víó"_À¹\HûÝ?§–ÙÂky–Ym%Ì· YZ>-?_¸,ºì¯m\vÚrÎ:ÔhµÁUv{{9„Õœ³˜…r¾lº¶°Y+”QÖ«‚ U-#‡«…ªU­Í¶îËè+-¬d¤.ÕIh Í_.ÛŒJ¥¹ŸgÞV¨ï<½µÛR¯íu ½zQ£­8]lõÈψÎÍŠç¶»ð<ÀÚ å¡YÆÁî> ÞÕrÕëŠp¶0ÂOËÛv|«Ç¬ÊWñü{9u ììï_k›3ßîŠß¥nñ‚ 8-®Ë]-p ~gZ®ÜÊÃ5úõ.?ÐîŠmû‹H¹^Û[3•&d‹€}OggSKBVX Ï'ºèÿÿÿQÿÿÿÿÿÿÊÿÿÿÿÿÿ²ó[l¬!«†Ãái;™Ó¢Ÿ««VÌø»fÖ»Ú–åÖU#•Ê!ÍÅIÖmo&ãµ]Ÿ&©½ÅgÏ]®ª_ñǶ&ÛWÑ WõÛ?”«µµÀpuÞ- ”ëV“¤)KIZ‘š²ºçÛ1+$⟮¯_œ€?*Ü×o ËŠM«1|bÛRXb[ÆÌÎZEÔ•^ë˜d›»+D+Æ ás ÿùŽwðVg'ô’Oç– BŠÕ«O­ŸA–yWœ™úñ1ŒÈÎÁ{ÿ\Äû:9[•ç#$y>\‹åÍoÿ‘çÉÉSáqùŸÉ1ý™îFYð>vñFrƒ|þHÜÏ?—†¹äþË«5Þ:úµYóH~¡4¯Ü­Æ‘:|§±”2 a³¾Å«¼*íÄàNÔ÷«ž\‚Ùµý3€[<jÜ-óápÈÌò©Ñ}k¹ÎÉY_Uð÷ÈÛ·ÞjÕ4(Öú53Cf³¾FM,øF%¢ßtµ»ÄÌË^”µ,*i±BDµ»ª¡FUçº#×¥[UÂwÝÎö²EЬ÷~«…~ãݧ¬~üžd–rÖø:±ªœ+$¤Æ–õÞKµ*BÖV’˜ºe¶Ü5Ns€’XŸ’ù"¨<~ç3Kœü¹± 0ªïéV,¹ôæì‹DÐýª80ÊtªrH$éÛ Qä–åÝt"BKw{`êËH¥¶à˱‰yF‰ù,_ý[êLv¶¢° ÈEžª# 0•°R:´ß1Ç^¤‹lVOUcn&ÒDºYÝU’À°³Ã ,0³Ä–°Á[ž7XçŽ°Ç »¥`³V™ÃϘ=)ò=¾ß™Ýø^Öx:Hà¿,i¦á‡ÈCžpØ/ƒ%$C¢ xLJ ¯8a‹EÏ.„ö‚¬]åÅÚ€ây%G%<ÄaÒS7”žg¡§‹Ô¢™Ó<]M µp‡G¾^ðCApa’ 9/`'4qèçÛÌêyµ€i çÍèóiDO3ªŸ¬ ¼:…„öxKoç†fÕ(ßù_¡"}ÎLšW‡Nv|/™ìö~_&žÎÏŠL<ù|½švÃန S ŽÉQxiȾJêž^«)ñ=>à¯À@øñ>ÐJ!<©À¿¥AÙÓOË T;f’,2'£Ñò;aäøž@¨¹¿<ÏxùU+ï0Õ«Vj­ºæUz«.Z8Öíc£ŽÄnò›VÞÕånÐzr9—]q‹P=ïfÛx÷‡³V¡»C5U³±Ýb¸t×7FÊU,`X€‘‡þR Ȉ ü@ˆ䂉Cù$D$r(ˆD ˆ!$  ûôоò`ƒïvŠûÇäCøBÀvÝèÇààNy¼o3®TÖå°0Ä ÒŠ‘nr–ç½OMtÜj¹üeÞ3ºD-·ƒJ»mk“2ޮΞR“9^æð ÙÌ·s?OnâågfÜ^øZõÙêd·ÆÕëïëX¼Î­™_fr«gb×{µO0þ?×ÊÙ™«íµy(æ%r³êÚì¹5œ¤»NW+Òaˆ·Ê uVÕoâ^½(-–† õפ.­ªT–®\©[Ër¸$·ú¶ÕÊiZà"½Å·ì»j®;6ÎáPšþO] v„i[\4 ‹. >ÕõbÑ2„À»gl¹ê»ÜÀòºÔmš½­µÀ`ö¨ÝÝÜ Òmh ií`3>Äc›­­{œ5/•®Åbl×P«˜$v­!Ó¦¹5¥¤vÝsƒ™kk­—ÔªNš2»êûÍ€Z#oúä—bë[=ͳ÷ÇÙë+WK]Jì·¯—“w<êä[YÜÊMçh®îFÛ.©5®ÔA×»Ìw{Q½¡¾m\ÙÓÀqnÊZ+—õ#^;<æR¦ äÐø²¸´i¼u«UÕüÄ åj5ÚåÐ+g¾\ùpÐ쟆y…ããŸÊ¼ê|sŸlt,ÔežYOÏ"'çóYqø½ç÷Ï>Yqù9GÄøÏ<ÿ¬Áx/þYVêSùg•õñæ¯ùé<¿ÆT åHûq$‰·éûq”‰#îd}Í¡Ãí!•Jû¥Ò¹‚{ŒÓ‰·ç{¬mîoÁ§~ôí‰ß…ó“S…IµÑD…Ü×V{õªX?3ý)nedà ýêw|Ë®ðÓ¤SÅÙûºJÖL˜`ee­~{V¨SÒZéNuQ9iM-ªÊnòdË•îÉ@ŠëWS`Ã3"Ë«`Õ‚è`´qÖ ÚWV¢Å¬¶(ÄŒxcb·5u™ºG%кգ åQšžk&LñÎêèaFÖ N' 5—Yu`íÕÔ±Ç.\¬ùœÒN"EË].2ÀZ«ÌšP”m=Ø¡5>6à ™5B8…m×ÉÏo· ÛÿG#$uÂÊ‚Uh±qœaÑóôa Ø.ôˆ((HH(È@»ŸÁ_a?|,yÛG9ŸïÝHAF¼€kö1‚*’u –Šç-³VM=4Ýóµ‰rS³“ç‡êïCŸ[ìœß}¥ÎtôÛ_>>¦VnÚ]35TiÌ_NLì”úa#jt«ë#“ “yÞ™< y{‚iÙµ‡˜{«w¶Uu¾Ö[$“¡Áp8OðÖãÎy…ä|íVºçxd'_òõõöööÇ————!zß_Pïë&¼ñÏ Ó°pÉïOîg¹ŸÇ™ÛÀc‡(>&½Ÿ" Ý„Áv>Aèˆ=xB±æ²¼^.â g92F:c]<´ú 1;cúÔøµðjoO»­Ç)x9Ú.tͶCµÜðÆ¾Ž ‡©¥pùN„ˆ›ÇÈÓæjÞ'Èìgc³€j¼‹ cO#4—è 2X”’Xs•0Ÿ<3ɦBM/mR„AJˆ*ªÊÏo€Öö|C=_‰ÎùLMèJ:h8™Â$\¦Âu{BTx/"vŽˆutÛÆw@7”<Ðø¼èr/‡÷ß}Ýïw}ÝÝÞûîîîïNîïžû»½ï¾îîçq;oÍröý¸ï{ïµ€ª`”PÍ&©ÞÔI–7F½ë/ߨ¿޲¤†¶8 ÃêiôaïyÁûðŸ¿_H!µùTRRZªåfo¦e=ÖËæ`­QYežñš¿e°{Áã{ÏyÏž{ï€÷‡Hîá"áƒ" ”À’ dÁ‰,XI Yid“M-,‰dQ ˜’ɉMK& âH`I äÀ¦LB(†, dÀ†, !‹&êbÀ¢J!‚P !„KK Cüh@hèv`+K£±¹ï¾ï¼Þ>ñ}ù÷ËJ¥ŠûŸkð!YÍò/àr¯ÀqÛÁ j ´vÕz¿çà‰;t“ðut²2röê»gu…ÝŸ·•*®R®\¯Uªï)! WR®×5²µ–¸jòÒÀñŒÞX©*¿™ kæ³M¼ÎÛ-Ý€ƒ¿œZË;2²n•bj»;:f«ÚjÙí{V®]Š 'kå®ìÀo+²L]nË—;\ÉZû·Âî¾jø¡¢]l GŽàž’­]Ú­®¯­òˆZà²í[òäÁx$t·—ɇ­j/ s•9X Zõ÷m˜ŠRi'ŽìÉKÁ]î{ë©<&mÅÕrêE®×8†H@¢$Øœÿ͸µ–öpC"]sˆjÝ[0k_ËÇ¢z]Ô×3¥HPŠ—K©)µµ J¥ùL0‘p£«¶×uskhPúÂt˜ —jVOeÎÕr”©h@Jµ(|é]µEÀ8²À͵يþ908&í¢µË­Õ”ðÕ\0.f·´!i<«ñëeÚÕÔSåØA¸ ‹Ö¹ù­g¯‘ƒ–ç=!m×µn)™·V‘<éÔA¥jÁ+üº‚±Á¼V×Pëu­Ý¯0ÉE³Dç{¦2笩5–¸Àv€¤Í—ªínÎ\B¹y^Ywjþw žC6¬¹¨€†u3¿6·0ÉZã2æ%Íe×ÝÁ`’–éÐ.¢ Rc`‡^K#n»Í¯‰’RâIp[lÊ÷š»×#WÊÄ«—+®M&nô)ovmŽLÍÚû;'+µ<ù±+•%f<ºJ‰Ÿ•À¡1³Òâ%X˜¶Roæ­•×¹Ça ü Ày Q ¼¨;]pn­I#€Ae-ZÃ;\¹(‡æf˶«`t¹V¶J±¯ UË»>h)ÆÛÆ9üD©ÄÄy‰\QÌú˜Þµ$È•ÁA·þsáÔuã”bhcn_äVèòƒ%IÈ_ŠpGDÖ3ÉJûqpæêd¶/ý{ÉeûÿÙŒ¬þ3Úþaùzñ‰Qøx¤Œç8–1¸AÏè>J¸£pý?$ƒ<÷ü ©ß›Äõò¯_ý©$|§ÆÇá5§.?¼æ;‘øzóÜa˜1§ì¢w° êYû–þý˜ÃrcÙÅ‹µ·€x ÍÀð˜±û÷îsð$CõæOggSMBVX C°qûÿÿÿÿÿÿÿÿÿÿÿÿÿ\ÿÿÿùÍØQ™•ÁGŒ9¬‹Ô…†Ñ‰ÑÖ%bXpd»Ÿ™4˜s¤w±ÑÕâNéïšB]—d±ÊµvMØ»ªÍ9Ë8O80lh±q.\5aÑ»×GÍ🠬T¥©ôƒû¶Úx­÷z»Ê&Sër·S£–\ákÕ‰{s›Vþåï¬D¸ÑvØe¤K¥û½÷fí¦$!4&dK´éõ2ì1Ó\¹*Ù³s(Ë•T‡ò›©šö¥3™í†øo„ø[ ¸d9NMc-¶vÀŠ4reËŽL—lr¡Ná]È=»JHRæÕ»g¿O!ÅÍ¢ØeÍò¬ý4ñB† ž‘X~»·U©å¿y¥ÄÛo2ýDD ¡«Q.õ²É¢iïn´N§º»<üüS®×Ì’×^¶$½$7ŒnÞsNxî²gÙZ¥Zü1¯¼ª2•~—˳èý·u^ÿec<æZM™cðÓlíb›Ö2Wá±ÃQO•65äy9ø€¶ô$Hæê"£ ǶíØwpýšI`vé;@Û¥øK¤½ýRïÛ¦üãpd‡×iZ¶­¯=ƒ÷ùc²ÒÆ3²ÄâŠAªóP+ u¤^°/x»VAvb sÀo°Á‡§ÎÊ`®®±/p6´7MmÀL"S3U¬u+p€¥ÅhÂèë ‘â2g.·X‘?6:ÀatÅÕ)6éI•¯Xãt,K Ön–há’ÑaÍk.¬8XIñ5–êé†:É8HÃÄÉñ%8x’ŒðWKXán^5Á˜â±Ä`†8¦hZ®±8]Zm²ëâ‰ZÁcR9lº³&Mud׉,0³.R2ã‹5fŸiJV«NÆE¬®®˜ØÌéch°M¶rØÃ8ÙZžFX`Ëö pÖ[É“©40Ýa†°Ã •ƒ4Êt»_`z¾ûÀªÿ¡;ûìo ÏÆWÃ)xÂ0ìh’¨Ãœ¹Ï÷ßÝça1? ™`¼HÁw½×9d4ÍÊVrhwŒ~óFIù™x ™Á\Á3*Ÿ'Æ)ú¿>I=•vO+M› ÷ÀZÉÁúOaFwrw¦ÍŠ{žwo¾ÅI„—;öï+é2wzΫvõì9ÓSZªnÝïúí¶ÙÛ9ï{«¥ïã´¹fr(Voz%Óª¬_ìSéX{\µ®ªaËEˆHT\¤•36­š¼’tçç8á¹ü½äéKȼµPe­Ó¼ïòòèq8óó¯oon±­Þ¼¾ ×š—Öl܇ËE´·²SÒ^‡ãããâwÞ4îñGqÝëê>&øzÇqzÂõ#»¹ÜGqÜw`î;½}o_S¸îò^ÁâwÇsêÖ}(?Bfc]Ý›œÓ]™ÜÓYŒg2têÑvîÙ7tI%¹™îîÝݹ’I-ÝÌòë` ñ@pÉïžN ì™ðgßDy¼\£ìžÏ‘ÏT¨ô•îËí#Æqrü^/ ñx‘’<^/‹ÅÊø¼D²¼^/àüC/Àøœƒìë¹<Q‰‚×àá ù±ø#àù½¼ñˆ|¡:ÏsÆûzYÔùNŸœê|žÕî…<磎x»äîSÍíàà Þrtt9ö‹O¥$=4ûòôšôyR<‘Åcêhœ¾zéá‡Ö~•=ñ#‡ÀåùóͽDz)Ð9S²óÁË;åø´4ótÒƒ{ž9ðy玄èlgXÞŸ‰^yÞÉyÄå3ž»½uÀo?7yçŸOZC>§Åéûòu%•t¡èí7‰÷q÷È|üýD‡ó;€?Kùy{ð/Às³æv3ƒ3ÙÖú|3€hºr5"}ŽÀä5¦¤Hæ†W€¼"°©‰ˆix’– ›èÀø…ìùQàgb}FÃRû D`÷ÆáåÔCÃÒï0g¤!0x‚ Ò(CÄæ<^ftY÷·´‰ñ< ˜*þ÷½¼Û{o{mí·¶÷¿omïmí¶ÞåÇNâ‹ÐöÛ{n=Ç+§]Ü.w]'uÝm³èù÷×|!Š)})àV@)m¾øûí¾_}K®'IJ>îåÝéÇpŽç8àÈu\®ßš:Û&Ë`m†ÁÃ0€@%@dCXÂ`Å,aÂ*&…DИÑ4 …@¡P(0 @‚ÊL!ÅDßì˜1`Ĥ` L}à4h¼hûÔxûÇcïx >ñ÷¼l÷k±ù7Wá&úŸ„lø@Ò€4µ 4/-~÷ä~焈Á!ø.cö}ÿ¢>" ñÄ#Ÿñû›üøÊé5´|É[´al6Šx$Qj1y hg̺ŸºçÄ{Ÿì!uâÎgñþx~#Þ>[Eæë. 3=¿Y ™ÏýøD¡F?= Ai‚E\Ï‹òÂ0JêH@yÇ:>щŒ¯Zl÷ôþ~ÿÞD*èOìÄþóÃ{›}‘'ã'ç¤à8k"~ÚÒØù߯×ú“ð W‘| W>vÄä|DçŽü9ä$€¤~|N? qþÅy¤¿s*ó*¿ûFçÃò¶pnå?¶Ž¹·\Šl¦yúÇÉúþuÌñP­Pš*Ì?Ï›ùþþ@`>]@ô€ëñLädd|{ú0^ÿëgã÷ï<\0çäs¿<À?rýu!dV¤!C(2 »HÄÓó ?ïȳ.V~¿dÄ÷ñé!·æuþA™^!p+ªHt?ˆüPY—‚Lÿ“â<ÄsF£;øŸŠ€T±HÿIå–oêÿׯ¼´ä'íPÜò¶‚†RlD-ñ'ý—]ˆ±ªÎ!ûߟ$L£wóÿ*×ñçÿó½ltüŽOãû sh­X ú6ñ3NGÿ‡‡2)ŽyGOám¼þFJl:óÜ@{ú”y‡÷ÇÈÏ7äçm?Ì`»ÂW"gyYÂ3Ýz?¥ ™òmšìsíÏ/ãp<øáGÁ׿G~Ì|uÿØOù ùðý¹Eˆ7Àƒñù›ûœDwäRGô£ö¯ïÊAÆ¢ÙvugkåþÿY%âÿ*(rS13 ÍàØÿ` ¸ƒ¡|Ÿ‡1æ±ðú³xø"WÆaíß!|à’ÿóÍ|¼f†‘…É…ÌÁ¡ty8§•Ägë|«/9leŸ<ùtbFró>iùñ96Ë4 p¼ˆ_¢~åPødm"Ïà2ó^½s‰ùÌÇ.3~åþ}g÷É~ŒÊÖ˜à£å‘…žjºè2àªïó€Ë>™eó2­–yóÊó“ò¨eâŒëÂßgžG~NCó<²ÉþXÈÅÑ’Œiñ„°âaÝtsNÕŸ¸mÒ¤M2_Š#éùùé"Æ¥hë.¿ Ù˼¤-‹ še€wÎ熫U†®ØH§¾«\ËDR  jŽru[Ȧ²•OK {¤dáe2 ±ùReXc»÷¤1Ò¥2²K¯.ò,­px÷+.Vó&G†‘—ÁwkÿLä2±&©úË—.²­EV®îÃK¹fýô÷êS”°™ªbãšÕ*§¤Âîï.t§‰hÓÞú!]Îf®ÊM›iªË—#Þ \«V}rà¶ÏÝîŠÔ¿Y\“Nš!¥æMòg7zåM:^¸?®ýóR*E,˜Ï²’µUÙøHå¸ß;¸Ã"É.Û7Öt”»ö²¦ } nîèL•“&¨ôó<%d¦?%‡28‡k¢ÃØÂÉB„¼=4htµiø¸AÀ{=™Ûi,¿]¤ *ü…g"‘Ü`ÊVrFZ`ý÷a¿¿{ؼ8¬wÞ‘*’£Ô¯3†å¹I*z8¿n»a³­ÖÛ”Ël ¢P=&lˆOúóÜ¿[î‚­ÂY*)häm« Ÿï:$êÄœ6Á%lðfµ?Š´Lf­¦ÊÃ6 ,ÀÑZÄž 5âi–8aŽ"ï]àcH ¡3'¸¬YÀauuŽ ¡ºeeÖåX ™á«q&Ìp²dg€ÇqŒÖ°Ã 0D³L𺳠«««¬ðà qà .ÆguuÓ  8ë&Mc°u[e5^:¯¦ç!1†šcÌÎo?9†ssÍ™™hî¶Î[¹˜’Iå¶ŒË7wFfd’D²Ï:rzéLNàpÉïÔ…ÄaT¬[Ë$9*/Rcä@•$šÙäÄ©oUDdéò51¬â“•„{ bc;#µR÷ß­Kyx¼QÌN/8–,²¢kðòuƒ“Å_Š=žÏ™óyç—êòû¿#¹îŒè©I؉õU~Ðrvw‰ñÖ›ö(3ÀÏN ƒ¯Óm ýÝSäñÙô(â>`ƒÉÁèòq>Ï´<ŸáÆgÎüyéò«Ç»ñóó¢y!O\ÎyÞwžÀøÞ¡9Ÿæúã›G:¤ê ðHœ/¢vdsÀ§CŸÛ§Î/Ìûü”‚s짃Éìõ<’öÎ WôziÏ”íâS×:÷gS†<”òKð~B{ÑÜOU>¼e:#TÈ^´°·O•B€LK‰È廨ÎyãŸGÅê“C|ïIÈZkLq¦ƒaåúí^ßoUøÀ(b™eoh™³R?³²˜rty}½,¯1cö8hŸcˆšB Aà燮Å,÷~¢üó?ÝçïuÑSÍüŒôÔg9>·ÍøŠŽóÏ7ÝÛo§^ÇžŸŸ;oÊršÄùÅgÌu8‚¥ c.'I±hOêÄM:Bºëõ~³ÉÁíðVƒõ>0•2*.óÙ,<UÑÇüþ\~‡ÙCRÄýO7Íõ0úŒý=<óHíNÞ§IïŒÇb¢v—9µ“ ¬ìàœ•äÓ°|$¼ ›(×€iQé^-‚mT8hWËðríd/ÌsÍîG³åÚ|©‡î"}ÝŒï„ àŒ#Vp ö:øaìò™Á )á ™HAETóº'OÖ!Ú©2örSÑZí×À­Oø|÷߀=áð|ûÀ¼øàûç½ðvwÏy÷ã»ß|:ç¾÷ìðÙóß=à]~îë»ök«~ïÛmîïÛêw~Ýê¯{öíú}Ûöêý¶Ûmߪžð5ÝEuOggSNBVX R½#ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_ÿµ[µ×]uUWu~ö«ÞíÝoº®¯ª©êõ¯{Åv¯—mªüÝÝ_·ºªŸ~ÕÞýný¿ß·þî¿n»·~Ý¿_UQï.ùûí½]ûwçèúW¿mí‹WÕZ¶Í,Û{À»´m¨ƒÞððÀ¼ððï>ø’ˆJ Iš/ƒR&ž V(+ Y¬{”ˆ±X¬W(DتI\lU+…ØX5V+Êìp0†ÀÆä…•“d±±X¬+•¡Ul Ø,V ƒ\ÊÀ…ŠÁ`ƒdØ,V …FÅ`±X.6 ¿î,,„ …‚ÀÆ %®–7 ‚Ãp¸X¬ .$˜VÕ©®cU› 0`0BÁa¨\,+¤›ŠÖ=ŠÁáp±X*+@Ô †ÅP P0h€t4¦€PMãïÏpk½Ö€ý‰d<¯àç>·Ë2Ÿ€ ‘ÄúžÎgàÀïk·SGà5[ô?9åŸKÚ~ €ì 44¤—š‘N¨WˆûdG«–9kž«Þ|“Ó‡5#‰3ƒ$g ,Â;d–«^Óâx,ðyÜ»9dõkáxßFÔBJÎVx8ž2$²T—µZ’±­1­1®u˲¦º­m D”¾h·>]±’Ð*á®Ë¡:M–¶º©`SðŽºÕ˱95g\4Ö®OÊIëÊm|´i¼}-Ê—ú!´‘:¹o›Ì6¾kœkråÐl]ªe!*Um¬©àu¥2“X îÃG½{¸ZåÑêEIË‹ˆäɹv¸ŒÀmv»fI`€Š”;85é;“ʈb1]ݯ‘×i9Kæ„óUmåT©8é'µqG¼ËÀê{j휵Ӭà%ËBjûmH]vbÊÅ,1J&zít1#sÞË"ÛuÐKÊ¢S,œ³QjfãÛ‡ÊÄ ±]ˆYCÞö«lFÒÒ¤¹«¾À[/…ä3íÜW+”€O2@s$Û]Y‹J‘HÕÂ1”¶”‰ŽM-IV’¶•†{i5ÃÒk¥:y7·Rý‰e&ñ„q ÷]«jÕÓ|ÉR…O[tRßTyÿô›õmµEÎdu„¼îؤj¯JÏD2ÖÄ/2JÒÉ®m¨G V×»î`´…}˜@…O8}¡ý%~K?5؈š–k‹*ñ Ÿ„?Øwà2@ÔvªEòëq­r»Ùc¹k½H´ ›g¢ÃÍŸ­vêò,‹µÞþu-"".þ¡!…¹À£5ýOdW8ݶ•„%/%TXQÀún=¼ÿü@1 oûÿ" ëzϸÿÿ¶ßð§X¢˜Ajƒ],T¦›4¡éZÙ"ÔŠõ¶RÒRâ‘6°D»¥KºQO® áð êÚ–åØ@‰‘èaYTž£¿¾ÒŠBˆ6.+åN¹¶inüfÕ¶tÚ‘Ê“=#°€…{ÊÚÝ΀„‘G–·[13l\Ĭ“G€ˆu»@}Bjäó·UÅ«¶ó@@BÊ·y©w ’#½jýN¥[.–’oªPG—>¿ë³+RPY‚ë•&r’\¦é5rm]޳݊!R¤‚—¹uqâ½jB°)¤—œ…©'‹Àöf#r“€ÿ\‘.ggOµß)‡ûk™¶ urí]å³ùÅ=#+Bˆn§æñÊJ_Ìi˜»>ÅK-Vj´Ì’–ùˆ ëˆD¡’lí‘e–®Û]i H|ÇvPåj»Æ²•×UÃ[å<¹×.µw™KT‹†"†ÛP›Ëå}¼«WyrÛ”ûÐ2šU¾cZºï.ó)ÓK@¾*~o-R@» '|Ã|ЊG-\ m]^9öZ©Q¦\4ªmu˼ˆ—y|dÅ †ºùª—ÄÆ)%Ð.ѦÕhÓxŸ‚¶ˆP‹­ñü¤Zls} e¹jŸ.óyv«²å“MžÑBo39¿ýÇ@Ƀ~Ï7ˆ wåA±ŸÇý7?d¿Äù ÿö}e¨iLËsL§Ó¦FN{Æ7Μâ%ãEÇéÇôžß°i¥0Ïœc1ÍlƇp8§‡‰p<×1äï³øG pwåÖëË‚~ü!fäC” AìwøôG|˜ãÏŽþþ׿’Ñg¿žÝ¿Ž=’|}³cJ2Øz‰‰>0ØŸI›¨#kÒÌë‰ê¬ü"ßÖð¼WEvâб¹/šC›wÁ‡PÇ…eÝ —i}øÙë¨{ʹNDëì¿ïé´\®zØ£ôã%Rq•N~ý p[p¥ô©±:Ÿï×âv9QúúÇþöHl‡­U?öþèa+WqhoížBE+Òüfµ8Ž2–ÒìGâ¾û2æžLW¶¦Í«]󃄱æ¹Ìù­¶lÚ6‰ßxŸ#È»¦}ñŸ5äyG‘½xɵTDO ³î¸Ëž(Ä`=F£°Ò{ö.ÂI@('¾·0¬—¤ÆŸ|ïJŽ ¡w$zߛΠª¶È>fzlr(¬»jÒ•¾­…çdvP0‘Týíuﵦ¦-u ±ß¡è$”-*; gH$h¶×^H=™¤NKÀ,î±Å•ðà ZŸT÷ËÑתUAî8û|Ú™î¦h˧DüâÕ©Jx¶ u?kmv_òA¯OŽ3•"ØIÚZ˜%ú›ÌÊ\|Õ#+ñ"Ä*SÂø^Ofe߈ªkÕ¬2§LåºX±²ÌpÃ!ºêN[0Ç,ì¬/#•ÙŸÅÞ³I,¤æE|ÓûéBN.3ŠC©"égÃeÒÇ2d¬˜ã‰¬…]]cŽ0‡k0Ë*M qºÄÙöÃŒ&8cubU¼åRŠ5„ç‚ɓޫõU´z®èãÐVi]YYá–êë-ÐÃ.˜ZÖ :BÅuuf7vÝB„ÁZn¬6àʬVÝMÕÕSÍ 5ƒ[«0Ç®®µu–ÞÎ[.±»Îë–]ZEÖyrå—AR¡Tê²È §ª˜]d·Xa†:ÆÄË0²êÄ ÷I>]TAn}ú°\œ‚¡†P†_ˆÆé~„] ¸¡;Ø((!ÙäMÇÔ&ËH‚€Ñ}—Ž3_—´aÂÐøI¢ms_]i߸º …‰²ØI_Ž\îgè]`µù‘[P.LP»ïãðœ?A²Õ„éLíoîN LüÒ‘øä](Q®‰+_q¢rþàý ãûi%óèœ9ù?S,¥%SL¬nàíOV"¡56Ø2s2ÏÞMZgç¢"tç‡ÎÎô꙳Åt³¯|Þ¦eŒ­9gS»ëcéù¶ï¥ïß·ûùÒŸGUT}?{Ñ÷5Cjý2é÷¼û¶wÈüÌÌï¹~õ2è(—;g6lÙ¶ÁU’·}¹¹Uoïß¿ÔúªnÞ)»Ns« aðÖ·ÄíŽø%U^ýî÷Ñ™ê1„Ó­s×oN™™vÛmë×§9Ιªª™m¹7|©umµkaìö/×­¦NÐ{þ½ÁÓI•nÿ®:ÔÕLÐV/ä6(<ÈO}ãIqÎh<^æ»Ã»1€wýš@Û «3¹¶»ë}½½¤æz`ùyGÕ™]ßÉo·Få'ŸŸëNsIÝýýýëû{;Òd÷öèñŒ1™™›»ÀŽïíí$úûò3&–É=§¶«ÊG_uqÃ@òòwóöóó{lŒÆóº®úž$F½*LÆ,Œg•ÌÚZNád÷÷¶v¤ŠÐ??:òrw2jNsSq˜1[yÈÒÏ `Õžš«už¾¾¬w4¾=ýQÝëu^¸ööÝýzøúöš¿_Z^¾¸õ×úøëýµð׳ÐìwÅáÝu ¯tek#ÕXí/SÝkÚk=5GÕw‚xu fü‰5/·H„!KŒÐ$¦Û6F»3¹;šæ¼—ì–Ø.Ú™™i~tëe™“3¨€pÉïžC/«3à‡Ã‹QËX÷v× ¯$êÈy¢=‘ò>G£–¹tóvðž úrÅ}¨éØá<Þ"`Äp;~$qø‚­ypíù¼Ðã $<ŸæAf8=t…j›Ï"zã ;!Eëz¾÷ž}¬éú=>©:Îùä€óÔ‘%i†ÃN^GÜ<¾ˆ#Å´èÁ:!ôç±DÃä}‘®†„Oœ$èúRŸU*”ìxä²O\øSÑÖ{‰ÎiÁç¿8üϧ‡“}3Ä} VÝH'>oƒ”Ê=÷»À_¸4¼‡Wœï®tÏ“OggSOBVX ĄƄÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÀú)ßG¢¾’Sûè䡾ßwÎ&'cSÈøØpwzCòi'h‚kÓÛàöÇè'øŒSx¡„"! Àb#³Â¾g"X D Ü ` p¯8[aÃð?`sà'ÀùNÄþgÍùI  [‘`‰tp€{4ÁJô *$î ±£1zH0*áÀ@Õpˆ‘Ø¿3·ÙÃìà‹ìò¿m÷Ûm¶ß}¶÷ßo¾Û{ßm¶Þ÷Û¶ûqăöåÝo{}·îî„®»·u~ëÛ¹T<Áû®˜7·¾~_´é)µRûï#§@=㟪—«aM€"Á¾ª*? w@qùàJA«À:üïSFëÂÌî÷À=áï9à} øÚün’ðDD¡#0…üA¬$ðþ^lzHˆ‚ !@ q ‡`:ì}è¸4ûÀ}à>ðýê>ñ÷çÜ>ñڽŸx¾ß }ãGÞï>á£ï÷p½÷€º( !]¼n†´rQø¾—»ð yOWà ù€CCéc¶µ÷µ¯¼hì}íbCQ¯Á“ð Fê{¿çà øœZ›ËÆo7®Ëm <Ú¹²‘qa4‹–®\O@â“gReªšÊMõ&µep¢ÄßË®wV®#äã\[ˆÀy™ìÃöæ¶ã¾v!wfž®Óx\¬Ä{«B²e×ˬÑ]Û'ˆÙ®¥%ríw/VÖ{nDJF´3gæf·›T`-œ¤g¹¹{Hn>rÜŽ§Ý‚e ^ê;Z¹­ºi‰/q¯5Õ«‚tÀ¯)=Xue%Äg, ëËZŽ_ý]DöÍ—U8Kz[˜¯Û­#aùݰ)25¯7mvËozéb’³–Õ¯Öè»(ƒ8ÉgIsˆ\åvÕ=™®ý~[YÙw^ê¦.Õ¯mí&-µi7¼f¯ôÍn¤gL€´@@BÝ„3Tª³¥. X[‡—F@>¼8 äå]jõ±¿•Ö³ÑEw`(†ÉíÝÌ϶à†[¯7ýÝIËuâi,ŽÚêä-m¶R‘¶×]†lÞ÷|Û-kû`›·=kk³Ý˜-Û®¡0¢,)*ëÌVßîºÜµQ>)rÛ¢Ìí®gܵKŸ}+à@¨x?-Ý _ü×ý ¸=Yînë¨ FÄÅ ãÛwuµÂd²jÖÍ:æw¯@|ZåïAƒÏ³ìÙmr‚\œ$‘%•L¼ævÔ ¶Ø ‚Úê·â\VE{Õé6¬·ÊØ:KÆŒ® júåʹeK"{'¸Ö­Úà5WÖ»=k›Ê¯[bWfd Õ}XC9hUvœuÇÌÚçŠÐ²×"æ3-Ëã݆lJÚ!Kª‘žì0?ægVJ×Npd©¶Œ“ ¼*]Õ~„¼š"s“K³]Ó…Úmsˆ\õ»ÊB¬µXžS¾¾UÚøªÙxQú³åÊ!nÞì µs &ÎèÿêŸÞKþ&–m´Ä†CYüm=›iú ¼xĘ’è† É†4¹ÐÁçìÍæ4ÒòAš4v- ÕÂ÷wÛýS彟 ìLÇßÒdY??'iߎI†¯¿Ý¼37ïåx}%ÈyàðлßÊGÖhQøèå°gæOOÓ9´ñ¿ß“'“#~„|É“º3Ó/üI!îžÝ- ŒŸ0È£â@HI(â&Äé±M÷Ïq“°Ø'ëÈI2R¶6Ò wpφ ù<@f%úæþIù&t÷óvŽ&c±þc'K8¨¯ –-õïzRťȅ;z͈ûÖU®t­8Ñ]Êy6ªÕÎg_x>ç*#À}9^¿dȨëïV×àB_‡Ï]ÔóŸ- q· 8>Oî¼Ûñsâã°5?±”¨/—8›ž{¬÷%!ÁÄBªàªìª[î®ö¥²»pSô³£ÝM"—ÎþïßÅL‰¡û)B{"°}%?›UNGò['‚N©þ÷R±ë!”Ò²4Éw9A!*ÀØžª¥ò©k*&^í'etÎW)õ·¤Õ ýî8ñÀOPÚg+÷Š×±v†Î ~ÍÝØy—wiSEÕ"fvs »Ç7ÌÓÓ²U9núè<úçUL¤ ·~hdÑ}>šä™t̽ï 3%¬åÔ¢ãmùèwêâÔãHÖݦ —§j·%]ºrÓõY2Jpï6Û)»?f¬×éB¾¡ŠÉ©£óÝ󗳉6êVn\ú¾Ub0ÙPˬ¹G+ ɬ‹m12ô–ô–ïý¢¤ç9¬£s-]·ïKçÒ¿gÞ *¸Ký°N;p\È|ý÷çÜ-æIÍSä•“¯»2ç\~'š:ÅQAk’ /^áÃè.É_? Ý*ýûêÚÏÛ¢u°x¢S©­?=±æ›klÞõK–y$œD¡m“Ñ óÚ6Ü\¾W7ÅmeŠåL4j×çV[îŠW,Q˜Õ…æ‰:DXá²B/4.ìiø°Øƒ²7™4ç$׿rNðmµÜ$ˆ5p¥g­…æ¯0÷ÝT´I}‚IjóA[[àKî‚÷¼³Ç#L[iõ´à.®èÆu‚ºsù?¦M ­ÓÔч,šºlÂCÁI†:@¸ÌÝ]Ê•€°]ctQ-2w§Ft‰¢!tÇ}NÜø' jl!‚pÇXdºº wºÜpÇÄcŽÎxa”JX1WXÙ†±p¶ë.®ŽWVa€§ÎŽ!ˆZ&_¸,5”lí¬N²ãtµf8°›'40Â2Y0à ¹n°³…Ö±Çawe¸eÇ5Ž8ãeÒ—Ñ©Á T%гN][uŽ8ãun6k #ibÔ;[‰Ò[QË668k.ÉvÉÇ.˜à0Á ¡uubäç¿é q¶½¥Žx,ró”÷óñ æ, Úpà 4ŒïmÒ0JteâUÒº9îrçÅžKÖgIŽ;¨ßþÏóúúòûüß_|>݃ÿÿŸ™‚¼²þò¼Àò [l?û£mšßëú=ß}ö?}ðûï¶ûíƒY×ÿûü/+ËÿÇúã"âc¼ó\:<ý:~|°þ¶Û@s:aÕß¶kí²æÛ(âήóäG“à ¨Fu oØ@$–M¦0P–Ú2Â~ýŽ9å0³ ?1æ¸ÂßÉ0çp )$‡ùgßßt‰?m²õkçIµÄçÈ 8>hþ›Gt˜Ø+uZž¯Å‡yËX%m@gÎij KVâÍ­c3óƈcÙbäµv$¥Ì‹ƒóìÉL:êÚ¤ðë,é¡×%.0DðS¾¯Ÿ¤ãÏ“þ"`ó3Ÿ§92õJy~RãJ“·¯^·;°àݞΞ蹃žöïöݼLO¡¶ÑÜÖÎÛeÚ³ELí´»ì¹ßŸ«Sé ï÷Ñ7­™:QJKÞ_S;NÛvB¯Lh±w×Õo½?7îÝ¿Ú/rå®Jµžûåk%_ZùÊ}ÛóžÂY0è'tÅ:N¾Zƒ’‡%o|Í=Ÿ%Ìmêî fkÛk½;ÎñÃ4n<”l;Æ´l“Y5®óßÝ¡„ôï;ïŸw¼G.iΜd;Îó¼ïä  sÀ²âô}c6§ãžEuhUPÇÎÞ½zsÒ¸ìTj]C—©ÏO^Þ¾>¾¾¤wɦBñ^>=ýn¯ÆÕôï‘< qÛÝýSÎÁ=;ð 4Öfhi¦š7 ôÊI%¶¥·ÅÖNgù€pÉîù3áIð>Añ$G”ù›gÅ|¥¶Y¯ à…ô½ß Oò=IŒËâ$rÀò¼|XàLW‹<_Œ¢¿òSêpiór'A”;8¾Œ{zCæv>™Ú?Ãì^ß‚ï°9£Ú›Õ>xT‹pÉÓКÂIÑ](‰¨ŠHW¦ç J½1@ääòbXxòÞÂRtC'@à®%ÁÚ»,òà'Àì¢x:<_Ž+dVP'%añÌMidO0‘„Dƈ˨#&ˆg1©ž#Иx½Q©„k‰åÛù[Ò^yêyDæó8ÔôÒóè/GàpiM>çgvCœ¤§Õø|F{!K¿'Â}‰ÙèúÞ±ÈÓiz`D  h›Zi¨{£àx„Y¢iÀ©Ë´xœ ð|o§Ñ¤ömgÀ {,fè×·ÈÓØœ9ô SIuáà$8|Ÿ==s‘Ÿ3|_Ÿ>ÏÀ行ìæ^®éÇUØÔR®ÅW[næ<)/»¬ØYªpi1ü»‡Dríþò<Åd”:… áá™ÔcžekoIufïN;ΥΙœLH×Üg`÷˲¬¹PËEp°Ç.±ýYGÉ­V¨- ts»^½=Ô|MÉ5¶ÛP4ýÃ÷ Ïs´Oþ¤ÂQIª‰œF+N§±ÏU®~`—>gk%™ªÜ‡aûRôMdÓ¦LÔ½s¹ò¦~þïÕÓT³¤¤®®~é¬ù:áâ8ð`f£'¥`(°™uz›¼’909¤oRIÇtLÂCr†äÆ ‰!F‘Ýktq~Ie[õ”7‰$"–· ’PPR2nݼÕÍaŽ‘­~å|'½Ö6Yv¶æ¬ºÕXOäà B8&é1É«({’µdöh)) sËu†™,ʰc…Ôk£ 1fNó"ÒZ–ñ%”`)–ÝÝcuuãŽ7Xç,ðY#«¬˜«¬CS—B.æ%cˆÆêë:œ5€Ç*ÇÖ– 1™dfÜÝV‘T£;«¡u«¯ê2Ÿ ë;# ’!ˆ¢,ìú‹XÚA.Æf0›3œìû`ªÌÆ+ƒæy˜3)WgÆ]OggSRBVX§?ÖÆTÿÿÿÿÿÿ+ÿÿÿÿÿÿÿÿmÿÿEiçUY½ÝPŽ“1ÿϲó©/ßwÌÍ.=ô¥ŽÖw—L¹Ôû=ö¹©ÛX¼¹ Ë«#$Ô³ð'œ|0Çw¯O__S’sÛÚ½ä~wI,N™HNì pÉì|sãŸ$öWÈTyJó |SÝè;âw5ø?ÇÉ>7à­ÅâÌW‹Åø²ç‹Çµcì~ ¹ø•´Nôy>'ä»ÌôÃâõÇ7Èo[ît—©òz~s´¾o1žo[ÔéÁŸT6× ˜ÓÈ÷Áó~]‡?Íô¿c[åNgwà‡ˆ2‰4‰40X*bQ„Þ.z1ýK ?‚iÉ̲ ¥rþ_˜Nê{>/€aìøñ<žÔð` ÁØ›:Ô΀l]®ôw¾ÎÕý¬‘†„\òS ö“Åo؇»»»»»»¾Ù$”/ÒÎî­˜šƒ 35Ðf6lÒØñÙIÇ6Ê8à8îˆÀwªmÝtÆ&‡á ÝÊ>€àóJ"´?…¢À.ž‡ÊAÊ9IÊ% á ’p„©@„#(‡(ÌJD áà”@ûÈ}ãïrƒï}‼@×Ü>ñ÷€ûÇÞ>ñ£ï4ÞïØ 4}ãïÀ5øNF¸4h÷›_€ƒÅøŽ?¦`ˆœþ[‹ì?7—â;“®þ‹ù[2GøèGP»BCølf¼(²èòƒ$ãõ o?ïͬúÒy±f²è_ŽDáϳª§LÌ„}iÅ&°OäuÉ?GÛ¡k#ÌRHŸ3…Çè]ùbr7û?!øý¿¹þV¢'gõX3ßiq——ó9‘(s2ÎÞ œ“ øˆ?Ì~ 0"kL¡B eŸÄýçÉ¥ƒÌ-°Doù˜AßÃüëc¡8ò~ÿÖO­ß‘Íߓϗ–vPýÊ× ŽlOÇáÈ`À@YÙi(•¶ª¤Á=&8Á@YT`”&*Hà$V¿ÁP›8‘(ë„•GU]…söŠIFÿ§êŒ&°‹ù£_M;a”þÏ™“âR>¯¨Lég3¼©£TtfC˘S^0,Ý)ï|+[’ß_õÚ옗‘^rJ(÷œóŠY«tËÎvpÉîù'Â>!ìÙôœ+‰X÷|Ž©/VvÁñÈøQèÇÈù#ÅâÖ‡*åd):x¼^/Hñ9W‹ÅâüðÄesŽ{>‡Oø—Ok¦'¤<ðN#Ò½½žNô“Üæ3¤}Þ§Éî|žàõÔå |ÀÏ‹ð•3 %˜®üÇáà„ u=vA¸â†‡Æ<hrNˆØ­ä]˜Âö+ ôsRš§<òtNx|^(ç#>aìŒï’û>6‘ E- b=¾Ü>GERœHdõBLSžxO`.¯®N¯®1<⺞â\O9ç© )ÚÀ[çóÏÂþgßèÏ™“ŽÇvÿO„3ƒ•Ïo;'ÖÍåRió|?s÷懇ˆè¢V NBv{žJÂ?qŠßôt·â"yç£Ãèñ;;|I$<Ÿ7Ûíð¨r øCNR`‹åÁ!”„pdx‹Ùâ&ƒO¹òôaà`SòvC´êô/ƒ÷{¾îîÝÇ}÷ÇÜý·ÝE ŽÅµû’PªsµÍ³0Mw[¾óï´\Ðw®ØÙfs¸'çLÛO´¯sì;† Z­«t– †Ù 0év]„b-“EbBùÇîÝŒ4]n}ðûǽï`?è¦PI/ðæj¥$Š$‚BAHþ °„àZPH âGò@””D‚H¥D‡\) æ ZûÀ}à>á÷€ûÁ½îûʾá÷ŒzŠûÇÜ ~>á@Þ ïx §Þ×Ü>ñ÷»}à7BÁªíøÞZÝ»v½£@tÖ“Åø5ÜŽßÌóƒSÈHµÈÌõ'¤»gR„wñ†—Ï˂ͩ³ºq[sømÍq®ÔÙjÕÙ´ÃR^ùueÏÜÑåÍ™É\Ö‹"Z'S²Ú¦ÎlÓ–µ\íš•óòÜF´êµ| ýíI=Œ·–åÆ&g]š¶&¬åµslšL­ÊîÙ¶ÌÜÚ×rlõµ¹]ݶvjé8_1q6zy†&|oŠmkæe+Ô‹•îÕ²ÇZÝÎ-gRÈ›¥ºÕÍR—ýÀÌï›ÊT¶ºêžÐ•Øjø>IËh"åx"jöÒt»0¶“lBn&- ½|MzÕ<Ùì§»8áãÓÀ¢ÅØs7U±H×`.{’{Þf»-YY”6 r<û»¶ô·ø}[ßdàg.¾0@«—|?l̤ú.a¸ƒ(€"йð_M…ß/ CŒÄ õ¾=­áe^i­¶~2EÀç¶I³Ø àU©sõð†„Mh P®ÏÄž¹vV|lŒ¶»Û¨Jô½ëjªë²OôIžZ•îH©C$ÄzJÅ@Óe%ÂÝJºíTŒë’u`/5ã>v×Í^©RjwÙ_Ͱ ‘ˆœ `ÛwÀ±oêÁ®Q ¹g#ïf»®Ö­ÀMN= Uv–Qų‹w‘^â&÷µz×-×÷æukœ@©Û¸Wé(†`+sg¹‰jÕÖäóþ kI|zZŠ”•‹ž•Ò®òâ¤îÚ“Ëž „$ pƒ‡ˆ²/5ÝÐ+„[»úâÀÏGŸÿsâñi: ;ãž…½4“EE=é¢D÷"°ÞÖ,"¯¢;ñ Ùþ±{Yaå^TÓøºèíÏCžƒïñu=quÀTáäáÏÎ…È'¯Ä)üþ•Cý6ÿÍgYÖOûg%¦©†ïx:o§˜ÓL?x¹ù}aôp‚9CéÕ¶¡ÒîΰÀ¤»ˆ™³š8c—!žg8cT¸1ûš̰Ê0ævcñhبt-}Çêü1‘Qâ¡Wr2Ÿ–¦V!Ûv²íŽÒùSˆ5'è<ý—ë—3{¶:ßVNº%èp~8félâˆö›‚ó„×5@ü÷)Ô‹†ûïFLƒÍeœ­eô(É™aG™OÍQ»É(*E%«¼¢×ª|¥ª§¹ÃfÛ½ÚvÏByv¨Š~\»?Xuû¬\Ъͧ[·ÈMVïßjõèÖS”ϵí‡;/ÌŒ-ü­Àþ,2¦x,¬¹w°ßSÄ'µ)å*{«ÁUtማ6Úp+<²pCٞĽNï™$ËAL*„ì˜ÝƒÚ™¤?1N`Rp™/Ømå¿¶ÃÎ¥‡êÖËB…GRVxïOFz’ÞÜ'‚y2Çöí·@ý–Ûj~YÚ.ʇæCt<¿z{zKSKWoÎW"”ØèöÞd¬,¨àµ²ADöX!·*©_w£ì¶7¶Æ7BóKÖjH°¥Ž/³=ΊŸˆÅ!Ž7C£Â,%fí´E¦ZY)%# )ÇqÇ;-•¥¸ãâIgŽV8d“¬u6‘,¸Ž,!¨›¬.°–WZ¤Äàx ue·C$ãŽsФ”ëE“†²åºÇ—X±ºX…ÕÕÕÕ¥B p ™Ï.§;qHÒauYå?>œ1gu“'pÙa€Ã BQGqÕвêÍZ1LL#æGF„E*%> TU ¥8Ùe€ý”ûž7WH£ÝcãÿùËú5ò4à€añFS¥"‰ékIZuËí ×ú¿wTÇ'GÁ„ÏÁ ޹Ürä@A@(NYn­Xg ;(Ò¬µ„àvqŸWrý_#J6ïáÎÁ% »¥ ]¦7¦™!(„ŠûYAâ²…¿j¿gGò.„ùûŸ>±$ÅÌáTNœ§7‚°&£G?4M 5ó‹Áæ©R€÷ï}Ÿ°]µ>„Ëß;½û¿k# x8\ýUT¹—,³4ÉÉ'½ê~ ÷Aõrî«/€õûSqî*öÕL=¾Xsžlݽ§f÷Ö»õnFišÞŽôW“¥úM_ìœü77Û¿©Ý©õÕ{{onBñ¾:‡—“Ó pÉï><õ\õlø_&I ‘>Bvì‘ìùγ¸'Á‘ïcɓճãcë½²o‹Åº<^.Uâñxø¼NUâñx¿é'â»áMLÑ:`ÔøúÃ⟠Tøu ty<rœ Ûís©ï}NàövÀàéy4Ðî™Õ¾"_tTäx¹#:4à7‹®”G°!νÎyaOÃÄè“í%í{¥9i…=qÁg­Âp9Ï8{èõD§™éá–+JôP<¼ &1¡íÜÞùè(í‹3žo–sŸ¼à¡œND "g4@32ñÏ^ž“<ó¢Ô4L¯C HºŸa°ðû¿‹ð>SƒØš|W>º7‘œžbi÷2†óáýRÈÛíò=?y4§gbÙ"vûcç:GD@’ß`ð‰  u, R¿1 îyà3³¤cÈ… 0éøOÚÞÀg7¡SÉèNÆv/ÎøŸ‚ž =˜¢pcè‚À㽄 Ø)ÉÔ\:<Ó£ Ôh8U8 ‡È í'bø@ÕöÖÕ¶Õ~ö¶ÛkkVÛ~«Ö’uÇ_¶ÚÝî/=ÿÞê¯< ¹ÎõÎñyÈyN¯·;€~ûƒ‡ºøopqîûç¾ppqà/GÝ÷æÞ9¾8Cw:×7S€w·«ÞàwOggSTBVXRÁónÿÿÿÿÿÿåÿÿÿÿÿSÿÿÿÿìF¶ªÛ°ïÃ÷æ„ \ŠEå"’ùBJ„kà@ú¨-4‡Ñ QXPH¡þ?Ƶ e4hè}àï÷€ûÊ>æ½ÇÚNßx¼Þ(€>÷o¼v>ñ÷„ûÀ}àph>ðp¼ höxg`B€¦þ nž¯Àæ€Ü}à=Áî  ×3Íø#ð¡ŒlüŸð•Í'€×̺ÐZ4ÃLšH!R.¹:ZºÝ­, ð-Ýפ®B/ŽeÑ÷V˱züœ˜¯_.f˳ØÙå‘ËU²¶R®;W×7n\¸.»bíZª,¯j’•ë­! ê$¬ÙÂ6¶b®)Ùû»nE .vn˜™Ç¾×'iRé? }9‹±(Kð.¼¹X¯uÍÇÌDÉUZöÜm+³ÚëMƒÝ¬Ws-Ìÿð×6µïaeÕrñÄe6®P¯v*î™(·îm)™t šæ¶åps"ˆ\¸Aò°UÃçÁøãÁ».vÛ-{Zëø«‰¼}‚¡#ÎTù­}ãÀ(_èlₚ¥<®¶«”×wìâÂòÜŸë©Þ&KVæýk×D=ׂ€x @(§åÀÒö›Í›.rVÚÚ !¶»ÍwVâíŒé¢·-9.zÖæ}h%áðu{ú…ÑMuT7 z· +ÝWlf\޽?9k=Ù®ëð*nëW[©(¼~Î9@zY{þ5»ø‰õsóv¾7æÛåƒf7<Ð5Î?—P ®%VÜ+®ÀZàYp!ºñê-w5mqeP+ݵ ­»ÿ[U•µ[®ºâã½Ýtª³¾«k¤Ìêœã>½Ü²‰“$¸Ë”,Ú×»Z ­ ’+K8†¥|R^+³lE*åbNku]æ»ø[j¹[ÄÿÿêõÔ2×\‡ÒÂøÔ>àêO_+.¹÷½Ožm–jxuÀ°¢øE†þ¾[¹!ÏóÉåxaH¶âëÃúHù¯Ã:À(Q/ÎÁÔþuÍ×è…8ˆÛ½ËúyÚÈûQŠ;lÏÖËÿ·›Îuã#Š3®e•{!tpñ“r³ø¬þóËÅ–/ò„.¾*ë)?•iËõú‰È´é»bå¯Rj6n"÷ HÚÏövÛ?‹Ò]\¨ÃöÆ'ÓcÉü±ý+ïçèåæ6aÑÍ$Ç -á9¬¨‚´N#Îk"›°Ÿ¬µ©"‘ôä{Á)úåteÄêfC ­c_Vn™vtrÓÒ•Ý%ëm‡áŽC—¸EÓR^„ ×_4ŒÔµc”J÷o[¿¿xö¶ùT „ú»ÉZ»·uwª{-gm‘e‚8¥¡jÞ³8ä< zÔš;½¥,ߺNÝíuDÌêfžý¶|Ò×Üò0C V‘LgI]Ðy»åÞÈo—&buÊÖÝ=T+Ms´‘}yÑ=»£®fñ55“&¦r'ýÌ·ÑïsÂIõŒ™Üç»åSù#¹­>k…W4d~øXüg†½ÍRî¦ÖšýÊ6NJãÖ]{î¾S.-c[>µB9pª#lšT&d²°óåe=Y·eׇûnÂŽž´­‹ð4qyÊQ²b•©.—Í)²ÄòO§‡”ŸuÈ‘#i¼ÖÅBÉ¿Âó[%ø)v-…®-YtH¶éÝ]b€V¢Æ0.;XZ”w€ÄZ,ÔÛ&ÝY"y†’­™X -Á¦'@HØqÇH¡’ Ü1ÄÂYÌ0ÀYuuåb´²á¬nîÆáƒŽ8ݲ€C 8²øâÍaƒ\' ZV]gÞ8éF—@ÝYuuÐÇí¶Z¹Áa‚ÉÝYut®ñÇ7©(ºpº:,²dœË¬.°=Ã<Ž0Áa‚0{¸±œqÄ]egKçf3–XÆk—XIÁM[¨b§q8ãu‹5ã Èl[»)÷Ëô|ß}õr4‚PVç”v2üeŸP‚²©gbgØ(,È]+8K¥:    ¡|BÛ 0‚9ÂuL¡Åó],9wâ6eoÞæ˜Ax;cXÊ9¥ôêz?V¾©*R“SÔÍÏ›ƒ9'÷5.s¥ÕJ0 ìš¦{:w¹À~¦[ï»Ë {åΗNÒâ6wÉvûïï}ßTÅÒç=ûï'Xͧ~Úu'zaÆ4÷ÙM‹ù!ŸÝ9{²oHêQ…z4wÔ2Êîô˜œÓYš¯s]ýýõ ¥ä4Ö4Þ–ÓMÔšk›S3b{ÉÍ7¸r3Ýkk½E%ƃ=½µ~žžqÜwz¯__Nþ^WÖ_xöðõ;ŽïS»×Ôî;ºyyyy¯¯¯‰{{_ã×Öúò)ïOM|wwtæ»»5—l„û¤¶ÉÔ:r\pÉíòÏñß‘òbN’ñQñHÙâ:x¬Í²vÙò1ø>G‹…~i¾®N,x¼^íx¸`rÕ^¯•ø)OÄ©T@Dì'Ôðr}NJÑÈ‚½¿)Þ<ôüÞç´zŸ7µ,ë| ÏÄéäç €véÖô|cÍy’ ÒéÁñ=˜k¡·°}¡æ÷'»ð|,yçËÚP¨™õqð‡Ä¡Ñð>§ƒæ{Í4@DáZÓ€ByÀ±(_ €½SM=œ,‡¸œ‰È;Cà'˜!Éò;0øO™àè W¡ƒ=HWÉ_믆 ®š½@AÆÄÃÁú<Ÿ¾ûî÷wwß}ßv4€¥'}í±˜hÖm ’¤ŒÓl‚gNí¸(Ò9642 µ¶šˆ}±•@‘©¡¼WßJGªÀˆœ¸tŒ—İ éÊq ¯ „—d’.#!ć.V‚ýãÜ'Üïx¼Þ ûÚÀ h @ ¨Q@  ( €€ )@Z€4(øH@¿à ú‡/Àû;Â/4‚û¡qo²‘pçëþ(Ÿ×³’¿•V4ëçÐx>çHî©&,Ó>æ,^m±“=¾ÛŸ¿‹-’¾:ç·çt1õ¤ ¸¿#¬«çŽ¿èSͧmç­Õ¥¨ÍGÛ,ŽFòeˆF/ÁngóqeíÞÍŸs§Í›nˆ'wçŒÉƒ£¨12~LLe3ããpÀþÛWyÈÝw÷ÿÈ4‡QCõ:ýsà~O~d,ÍÆÑ0>Ïß™ÈQù޾Cözûø¼hA‰æ9‹,?>+ˆüû@™è‰s£&ØÀ¿ËŸùóâæêq»ÑØ~.¼o³,@¿•ðc¿ÏS˜€íùÚ5—³Š"}¹G8(ŸXÇR¦yö]»’8§¿¢bÜÉêw$øƒÂH3ÕœSЩ$´Âü]L€}ÖÒ~C>HÚ6ý‡Aâÿ5€þ9ñ6y\/›`š][?Ê çi?oÌG]uùð|þYƒ:õþØïçç9±#Úg“A%=uüÐ?ü§˜©ýã ÷ùFû˜ƒú%QkGE4oþQÈ£”áé+ N©$?ëÓšrŽc‡¤=±Â¹ÈÇåÿ?”Œþ•ãT½}}¬ (Fðµë_‹J!ý>ÊuíQšwµZ(Úß}íõƈµ½=}Ò-Á›í"ÌÁbµ•+÷ïÕøØ×õêëNéLéè_nqEúV?àj0+¤ã¼æ°³éf…‡·¶í#«SÃ_ŠI¡ç'¯=­ŸÒ,}#pOÿƒéÞ¸ÛÔÑÿé]KQ^ÙldäX7z¸R>—B€Gùý=Õ^ÓD‚•:{Å»ì,n^…Û¯«û±–+‚$‘'Nõ ¨ coÝÞ{m |·Øn·£¶ÁûNåw.Ók½ÿ¾û?íohÔ…ßögìÑ·öËÙ+¶U÷}”£k‡=·•o¾%þÛZ¾äß_¹¶rvÕ‚ÔJIBËI·&—g¬óƒ>fŒr>A^žE‹FØy\œ+í[“)öM©šøm«¶ ÍÈ8\²z¿Gáeà !¹q[vørlpÉïž3ˆ|7âχ=ù,Q'Èðr“ð‡ÄuvbÌmøÉðϯY=Ÿ€íŽ9Wž3Áâñk^.V:xœ«Åâñ~ /ÄeÙÙö<C“à€aÂ:ouXó§¤SOISШb*Wç‰R} 0ÃÓÙðŸ:>/²¼Ï€¾íMÒx(”11 ñ׊A9€P ú”€é4J+Œ _Cu‡Ð” rÜhWRWççO‚5,:kOE‰3‘u @V¸Òwx{~G–œS*¨½)…¥9ƒÚjò—Æ5ìJ@Ú@‰ÛËNƒf|_µš–“am^m8h¢ò ù{¾H‡X=l, >ª™ÇX6§§­÷Ä žN¼²½aξt80‡äìü©Vwƒ 7¡>®¦tö¯muðSTð@›> h‰ñ¿‡à,>F†³æ¦†ô†¡‰ê,?B?p4›èO¢=ðA¥åì/b§‡“‘:|$ù ‚ýO 67Ñó4ÔRƒÌ IذÁ×ðáʇO†´fŸpÛãá;‘ÉRúª¾õF¡UKõQ7ç/ˆö8ööûÞn˰ÆÀs½Ê¯=½ùwmìöýœÛÎðænÌWªÙ¿~^ß·îǶÌãnìñ½ÁîìûæÝ¦áØÍ÷/=w¯Ç·vÍŸ|¼ñ÷ÀcïP€2?ÇzA H(%$h…Eè>變Ö(Œ’€"R èÆ€ ` ¸ìËïϹ ûÀkAØûÀ}èкûÛF¼Þñü að²tûŸ€ ÑÈ4 ¯w¸à&å^ÏÀ¡Âl‹V¯[6ü¨r¹xµî[À½!|Ì´hK­j÷o æa‰ªEÿü+rœû¼»)u¶Ñ–ÜE¥%¤.d™RͱèLJµÅ²'{˜.]W\Í·†j¶±Uwlc튻-Mˆå.kRVíÙ»žÕbT«ì¸çÆÝ#6̯Wg]Ž\§Û[³;JtÒ¯ûõºß+A D;`1+v¿ð ÏæRKm° >î^S^VÁ5ï^íjE­s•új»ùÀ ××½lÏþïþÓ÷—õÊbW -¼¯ûšˆ~Ismrë®ל´Ëû÷íÝæV\…ð}<åÝ¢CÜÝM"º¾Ë9^fÎÄ×p,»Öï†]ßÀ`-×·T>ëÍkÕ«F›Æ%¶[Ú4/? –CH¤º²’í›eÎWmYÈÍÞºWZκæf×m¢r ­«ºt¹ö»[Îz¹RZÀ¯.Œs›1r×T?3,å-ÚÞQNIšà«¦BÍ^Êj¤ç9UŽG|åbZÅêÑ£?–¦žÚOggSVBVX J¡Sÿÿúÿÿÿÿÿÿÿ¸ÿÿÿÿÿÿï6 5ò¨ ÍÛjF—]s’¾:öa†ÝÅ×ôÀöòxû!Ö8MèßGfLLN¥ÑZ,Zg'SÝ_žP¸©äO)W£èz)è𯷹ì^ÀƒÚ"xzHŸ#” ‚²›„·JÐQˆ§´)9ëÃ;öv4?bðtpÓK³ªXü»àøœùlø«:é‡G"ç àöv{ç =p˼ò‚ýGŽÆõé„|sÙó¾^¢œàM%èL<ÞÆèN¹dÇ)Ÿ1Ôì:¼è_â\2³>—ŸÉ/<ì˜!BóÈo§®|¦rGæ ÃÁÐϘ^ooˆç%š{>'Ù¤à{ ~|N"r—î³Ñ¨|€ç{ ùž„ó:dHŽÆ#}„³ƒ¢ bÂqêxB<.¥ Oèäð|OaC“æòhœŒîü ÉTòCÛì†<²€é :Àê{4§Fðz<¦’SÅèù>D†|ŽÏ‘è—ÕUUûõUUUë絛U{©ô»÷½]ÕuÅ×nvëŽìå;¶í†g¶ÌÛDûÕçvØîAØÀ3ÍŸ]h ]›ÃÛ1ÝÙÎÇ cì¬5Ç:9aX`ÛxvN-¿z{êôJü˜QJ ¢Bb$† “ü D‚!£„‚$J A ’’@Ð/`î¾õÞïxÑ÷µ÷«GÞZûÂÜ×ÜgÞ4~1ÿ‚+à~/0(»]´kDrü\0WOÀ{( j·ÆA$ÛBªut [[»:—Íï •«©M«ÝåªêR\f¹ÊêLùšÚå×Ë´J}HÕ–³å»å„Tñ4£yi®r­{šåͳ][â®Û¦—3k—÷[U¤¼W¦­Êû<Ö}u̶½¿ÀÝ[mÏ/V#bøÙk–U×.·.+õ–›JÌ}U¶ØÙm@Åzu¹Ÿ]T2;b»ç Ÿ[¯.à\ŪGç(äKizO÷Wbx«ÐomH‹TšÞ÷œe’!Xr·º­×gšjF{š­u×&¯ËŸ¶ˆ7;Ö{ÿ¾Ý¿ÊZã®ÃKVìö.DÕjÞ½µïð¤löÞp¯I\®Ð2±©8Y†µîEyvÏßß¶.e~mú€÷÷›Í¨ƒ9R =ºqÖ„MËCÍT›mÀA¡ÚÚ'»Vm¸OVR© I ‘ I]þâ¾…MÓÙ•*¸·w¼tÜ ¢á¡e+g +6¹ܲŽåtîmu}RØ DˆõÅ5]|qé0ƒ³·Rµ+²ÝªÛµmÿ5·Ç\Êþ]VøWò«ù”B„úùK_.Æ>ö°Ñ jÊŸ%=R†91$œëÿÈÀ=øç닸AÿT˘ÊôD­@´¼Œ…Bš&Œp¦žºÓL£³þ÷"'ˆ•Ǧ”A&üDһЩ§œÏÑÁL/;ó_™°t¯ÆîàMÕY`ÖòÂX› d#ÿnàMCsy?ϲԵùÀ3Ïu9%¼²#V×6Dw#F‡zÖæÈ›=M¶Ù9çÄöpêp Àó×-Ž›¬³aÓ³!ào$Õá2dG÷{RpߎŸN]°2óx©‡'FònjÑWýN•휊k"Šêj™"™|¦ÉÕmçØÎÂãù”#¡!;&òÊdS&ö”!™&L™2åS ښ˗"“”U\ªäÚº*å F¯3þH›f%=]ÅØLŠwÿ´n>0Î&绌eÙ ös‘_JP)“ˆ]ã1m‘²Ž`Þÿ'º£½˜:éô\7LËÎ÷•”yÕʦ¿yj»vxôo ÀR¤ ʉ“ a›×²g§Ò2løoòÎr\;O8˨útÖS¿««þ\º{- ÷’d­ zÖî@äŽ,°A[sO»ºY rßw”“ÐÜEŠIs¾šˆìvÀÜЪsp±õ<'tœÿµu:õ^á…ó(}¡ï+âpeuí|ñ8ê=#Ÿ9>xžþºñtº]s(º¦ZÓú-t¹íŪzxözµSÏüêE7þåK¯;Mâê³Ï)ä].½öïž.‚ëƒÇ<ãË¥·ªúº]yωê,^OÏæ‚´VSÀ î ëÏÂ9¹ç€ŸêÚ’EÏE}C﫯Ñ3CZ)§÷zßù«ôòï¹§÷ŸE}]Wß}qÛ-þß_oþ¯/º÷–¶¦ý•åwfîå:¦bS8Ÿ5šµ¿n7öe_›ÍJVåsY«Îù¦­sMOóLõ%žÃ³ŒÑg ·YLÕ)yŽqÏ^ÆXrõ°ä؛룒ßׯº®_óG€3›U2매©4ì™NöC)‘E2×yUÚº¿¬¹råg¼w7F}kZÐÉÐk6Oäiæ²›¾ËˆKRÓ•: µ¢Q. IÔn0ŠF„ÊJË«”' I!Êq#ˆ/aœ ¹….ºDÖ@ÈÖ´ÿiÿÛv ÖpÉîO‡>ñ_€¾¢DGi>G“¶1³_ IÕÔGc'³êƒâ|‘øO$•ËÂLÈñx¼^/·Åâ+±âñ~¦~"m}ßs¿YOƒë~ʨuÏ“ËDVyHó_¸ƒñ<§ A„8YÓðÎÕø<ÒrýÏ€ÚŸ Ò½Áíé/ZT¼œ<£pÙÙâðrýŒLù`ÖÏ"*`³Ù‚ôÞ·{ôB9öpy5Ú+§ÉYÌ2GLØôt—–œw%‰Î„” ç{ò7“–Æ;<¿™Œ­Lc ;)N Dú„Vcã$y‹©æÔÔ¾¦^ÍŒÏ ”xÏ=o׋Çz+×>B‡MiØ|+åtò@å3Z~€ûsÙêù½0úœ‰äxèò›Æö'fO'”¸t}Þ’Êt€xU8ˆ”9Š¥ ƒ¡¡žNÃÀà›Ñ\v”Ãbƒˆv|Žß`h{œ Dàåì@ìgÄè7±Èp–6zMÈQí^xaØ-Gˆ)>ÅF¡ÀFvˆ&R¥M AŸsç Ñìð3„‘[m½¶ÜÛ7m¶^Û3Þm¶îè¤ëë½pm¶Ç‚:t `À}àt9^ß1×ê(ŸKÚä©*+ÓÑûÀÏ¿¿~/wc¨pçH¨â1ûÞ=í›%Üs¸N"û»šžü.;¾û¾?a÷Þ}óï¾#øTÊ3,aUA#èÅ„ý¬ €±‚‰,bÃbhfbXÄý–ÐÌIj¾Œ3" ÷†€@îî>ðWÞ×Þ ûÀ}à>òèûÇÞ4}ë ÷Š(‡`=Ý´{ÀûÚûÕ£ïï7=Ì>òxÕ}í}ÀïÐvG¸#ð)Ÿsð.~  ÐkGcïh×nÁÛ@`üœ?)îù߃ðULÏÉF,&4†øÿñýë¿ÑÈ Û‡OëÎ)ÇÌtP:" !úý¤ÇB­'Ç2Î&u¦ó+쇘†2²!®ÿ¿‹,5‡ÄòO<øð~¶?óö~ýóü÷ÆÓ–`£hÞ_“BÎF5”OñµŸ™Ä‰Ýþ)d³øäîG>ÓöL3¾£:ÒͲ<‚{ÿŸä^*¤–gsú /Ù˜Gè&ðfYÚVdÌ žx? ùÖÎSúÀ•nåÄî?ÿ“8*›ð"|ùH>rüž9’$~t~Uëç^(®(Ÿä~Ïù™þLý·)û¿»ûäü…Çò @ýœ¸C“úÖ¿7õndNS_óäD‡ËéÉÒå.ÃüŸþ£fieG1ðçÒ¿]ùŒ¶}¡ý$¤„OüËÖ¤„ùLOŠ]MÏÀ‚{ÃѾìy\ùövÉÄ?x²Èäƒ,V÷Âuó0Ä››Ã3äL¿~RþÚÞº-ןߑ—S½ íÚ>d9‹ó1ñ1ÍŸêdG‰Ãåä¤ãÅb_›¬áþÁëP¤€±¼`öroȀ蓯<¯]\?QÉ#­eó÷Hb'Åáä`f ²=¥Ö7]²cänï9ùå‘ÎjŸmçeäÏ1glMØô8õ¨-òú¼íØúÀãú{¦<ì/;ç‘Îv7öofYd‡§þY¦#gjQׂHžbT}«…zèýN+ãÍåzá^yAÐ}ã‡aØÁ,ûçù“ŸxÇ>%~DK@[e–yï\B3¼Ç;N(“êd(%'Ë. ¼sAu¹>+çrYðŒˆ(ùÏ4ðÃ}ßæþIÝ“,ÚÍÆßõ0Kû<ÚÌó>¹ùñÍs9q[ñxÜ[fŸ) àšßÑÎD üÁŠô“|ñ'Ïuò“úõ‹0ÿ<õÚë¦7ã~5ÉùÐóy^&YÍÅFYÐ2ÃzBÖCµÊƹ¿_ÆspÚ¤³äèø]öÔM‰‚å‘è|Nµsij9P0›ðÁ-CcËôG`´J‡ñë)W[Jž¦NOggSXBVXÓY ˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿS|ó‘Ä£y=Èüïƒü(&«5áçx›ÿˆïöÕ×?,úSáÑw–œªª•Ê4*èìZܙ؎uËÆ¾MŽz ËÇiWóÏ=ö'œÓÒÓ„¢ƒ.3siòy<éé‰Sg{ÿS$%4í’ð1[Šdôt@ªªöíÀævXΉuÞøÝÝmme‹’Ìfè 0diÌì¤Ö^TR¡wa4]BÝæâÎõjy&¹ß=9^< š)“øG*lÞï²NN‚§@Ü0ê>óï~ø\èÑ„ó·ªQîïuz´ª Å·¦¡³ v›<Ø´?°xµfÃ2fæ÷-Z›P1ãnZÊÛzå”ûýürÍv[^|wëÏ]UJoÅÆæP¯N®å*‹Ä‡­ñ~^ªÁJé"Ï~’ÚÝ) ˆIRz=V(oIfn“¤–Ôñ*ÆÖÂ݇Gr^Qûw’68­mŽË?_<”6¤´ºD>Üô{øøºŒÕíEÔ].—I­‘½d$TO!Ì+ѽŠÖÅ)@Ç@j—ýöï¿û9Ъô“¡ù1tº]R¾yç•á9õ5]PÊPr¨º$×´óâSÿjºäЕЯ£gªô¦Ö«¾1óÙC4|]z7¼°¯?øº>mwï¾ñÇž. ]狯WMâéu±¦w¼x™¦÷ß<õcóŸSÏ+y ð¨šÍ`VŠò¢W`BSŠÒ ¾ryñ<ò礡žûJ¤õ9ØNyWhàn*` Ôòµ'ùç><ßþÐ;¹ºBjÑÿ .§´öz=†%Gÿÿþ¿_ÿßÿo̼µõ‡ß|?¼¿þòÿöóúòßêÿì~ûoåeœãÃõJÜíp‹õŒ!q qVþrpÏš¯ÕêÙß5×35^|ù~|”@‰çÏßëoŸoOoÿä‰m5ù"D‰33ù"D‰}©{ÄD˃¯ª¹ pÉî>,=óá¿“É5SÁâ1]¢8IÕØGn#ä|’>Ç?‹‰|^'*ñx¼QÌñeωĬpáàXøŠ¿ˆºÐów…-|2|Z‰`\µ§¾{2Îx1‚9¯7êið<¥!kÒ7›ÇsÔÑ÷;W³é9Ÿ¼Ðò3¥z$î™ÐÑ ºœ%L˜1§À™ô:‹¯Žº=j|Ï‘÷pì$ïèrÂ?ˆŽò.3 K_¦-4N¨¦sÎöò^“>‹ÑðÁäôyS‡ !ÄÖVoƒf N ¨œè³çÇX–^`+Õúó½­£¿ I×›ÏIt7ƒíœú4t‰ÊP¬z;…|®œ0ÎCbôR1ò|@"o‚= OG’œ¤ìâôäèoÌøØ Â”ìÇGšˆ¡˜„§Wà '4ìØžO‰Þuz½%`¬Â*y¤Þö|Àø‹¢“²OgÔöhoŽpØAËíðˆáNÝ$o€ „¢D^B ¡ ÀY „ÔM ƒmD8…ýˆøAŸÃ/1 _½ím¶÷½¼mïm¶÷½û÷¶Û~Ûoyæ÷¾Ûozõ*T§×´~¿m¶¸?ÒâÿD\¹}ˇÅ¾øuPƒ÷æØ&¾8ûºEÊ‚€y÷q~Ûï¸o¾ú„ªåzù¨ºDà“áû>Ðçr9¤ZJîgÀýù²w~1ß}÷ïÛs~ý·ßmƒ÷íôê4jhbÔÔ µF¦,ш {ÍQ™¡‹D1ƒr0*Å4h‚nšA›†… ˆbZ CDAcbx1e FÝõ€`€°€Ä´CA†¨Õb AcZ , Ñ ÌaT͈Àq B©ªq€ 4€@+@  ûÀ}À>á£ï÷€ûÀx÷Àü½ÏÀ!âÇà>à8;½OÂhœO ØZ>ö¦Aø ¾W›ð ¾2±øTNy^ܹYËÒ2êEo5¾eÞgv ÝvËVß2µ‚X}k;®ÄÉæ·½m—6Þð­¿;=£|4mt íÜ™-˪i&Jævˆ® "2¶R¿-¯inäÓñµM8Ýx¢!­"-£l¹é‚C½wº”›’*D]‰m—ËÏú®¹J—ûu`‰k±0ñÍÜg«­Ë›P«½´%,¨g¯q*›ZYI¶–þhÈÎÛ+fvÙ›¿„jRPéÚÝ­[¸õi÷Ó‰â+¿/Ž\Ëxñí›;ªjÎUr;•j£{§*gÜ^6Öשù–ÿ\¶ì ùÃ!Bo6fÂ…1r·ê÷fPºo( Šm«õoõj]µ\ÞÝâ;›Un˜MI•¥„»R…ÆWp;jµºÊ.ü¹îvú^oæÎíXSjR6ýC{¨T‚ºÜý®-À®]­qï< Ø‘ç)/›7åªT¸‹VÍ«m]©ºo+Ð/pK°WÿÃ3¢ PÃÖþ¯{°O³(!†ÿØCm{ðè wÚ< õ&eÕË’L“ŠF®Á?YH;fµpä­¶¬M“¢™»H×þåèE×6†{6]™¶ïv°*Ò;•Ù‰¶cNs©Sþì f„–ô.×»\mjÝÍkòµE˜«³ùW›mÅepp‚²àÀg ж·¤½å'+"|BîÎ6å¤r•¥¿‰¸¦«±­Ð?³¸E6µŸ¬Ò‹V¶‰eK&H¡*E[\¤.Ù—y·—kU7¤7.>£ÉÜWÔ—°+¶ÙQøÎÕY+ͱÍ^ãîW..’à/*ucÁ \ ªd,Håå® ñ’)%¶(â.]G–±2³á­Ù®Ì×ʺ­åR[™²‘• !k+:êДâƮ罌sÁÿ9] §˜??3 ú#À·“þdvŸ®ÐÇgQó’)Ååyšù‹Î¢'3ùÔ9úœ ‘Œ„ü‹ütg9ß/È\ËŸ.1¾ò¿:óù­”‹ªÿç=–×9^yÓð=$'ÒI$P¼ÁþdJ)'Ì„c…Šx²_ž‹û<g(Û¿†F<.~"j™¯ù5Ï¡#<ïËÙйyÌxÿh!0„sc|e’Ë [.u¾ â:Î6«¡ê~ïC"›::ê¸*p¥Ie™²¨å.Z_µ>ÿé ~<Ê©qå¡ ªÆ£KE[žÙ¥p×]ÅCAÁ4–² `MdÜfRœ˜ýB¬Š“zÚµ!w2åS.]Îc7@>¶¦x%–!‹‘fËEFÍÁd—•£CÔ¦5¯œh mdèn=ýŒ´|ީɗ*½9PÁ¹j甦RûÖÌÞÿ]òðºiœ« <ÞI¥vUV›Š‰–{¥"…õ¨&ÕÊOc ´Tmä(yÿƒÖE7½iv»Mhrk7±Â…Eö˰šÑ*å~8qv§*ˆÉ»N ÆšQÑSÞp¦ÔEBºYk$à}×Ý}ÖÉFÖ€jØWØBÙÓ«Ê©÷J}ÇÜ)¹i6ƒýÎC&_þußǧã–*?KDô¬6Õþû¥¾ûܶ÷æ?š:;üO0ñyˆ$ó±(Îý°µŽ’0½AÖï%ITïl7û{²àþ)b–É¥«%›É ÂêÛq¹O&V]uµ’µªË¨óÉåÃÔnzTØ;ÛØ²# “•tº÷õhR‡ ›þåoF¾R6åfÿ¢ðùù&{8ã}È|óÙÛúUËW[)Ë>ëšÙ].½€™Á•¥Ss4º].—K4£.—SÚÅŠR†W4MÑOSu<ði*ÌVZG4¹Ç=Y¿ÞÀ3†®sNu´%<1®hG½ËS÷j££õ Ïš™ÌÓWú³ÒéAÂö´ºðz;u8ÕEûV-g5P¸×;: vv=c×ú:Yüª|ò› ]Q|¦÷dß}jQÀصfË[ݬæöu»kNÎnƒh !Ð7úzTÊJnèÐ;TïC]~•é†UCRUW*…EUÑ «­€®]ELŠ›éˬª*]*ªŠTÅe*•:ϫ٦ôUÒ¢døttlNŸ˜'²³C££ ì-÷nß¼¹ßb­k9̈Þ.heÖ´Š’ùmŸ“ýhb]c¢þ–¹¥âü ‚÷®µ¤‹÷ïßóÖ®µK©öt0Ïwº“µvt:Í„¨á:¬qøè7S}ˤœË ß¡%_Qs*à17Q,2E œzØ ½‘ÛÙì à‚BŠ)B'Ø'³Ùì¸nQOˆ® å}Ϲç~sïŸ8\@ \ªNN®iûý¾Þ´ýþß|ðÿý¶ÿ%¶ÛRK1Œa¨Öÿý :Ø pÉïò~oÀåòHLjég #ÑˈáNŸ€0`¢Ã¬8ÜMjG?:LYà:IÄ“âò?%çžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžogÀÓâ~Ž_™ÉéûŒôü;?gwDøüÌžJÓät|?ÇÁðǾyéô9ÔóÏO¡ÎhõÏ<óÏ<óÏ<óÏ<ò9Ï<óÏ<óÏ;[/›æù¾o›æù¾o™4"ÁM˜“䦈qzž‡5‚’ÖrÌåo*t"ri¨|èÆ}ùºýL‡ìY£i93‘9Çãyb¼YW´‰Âg*ð;Ú½«ÀÁí^g›æù»%ë6‰o›æù¾fù¼¯лçÀú´ðtyî{9+ˆ}Uí^Õí^Õí^Õí^Õí^ÕäSÿj®Õ[[mµÛm}­UZªàOggSÿÿÿÿÿÿÿÿBVX«ø}Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz®ëUUu«÷vö¯wª¶¹ú?ðÞ=ݾñ÷µî€ìâûÇstûÇÞ>ñ÷zv}úÖ»kïÐhì€$SF4·Þ;îûö4ûÀZ  ÷†)¬ÐeK _ óx£Ü'`v¢ýá€Ð7h¢×àþûß{·W}¾ö½æé´’ÎÕ+°ûÇx(šÝCC@½Ûï{µ«÷†}ågÞ}ó°«¢) €÷yØÞĸûÇÞK¢ÂZïïtÔPéŸxûÇÞï 4k½@ ï¯uK Z½I¼.…@¼}ãÜ})îŸxûÇs#dí÷ƒG¼V¾öƒÜm4н¸>ñ{kUA¿x÷Hm÷&‘>ö¢@c_z´Ø4Š£T€  @`°¨×mk@ªÖ´hÑUA@Q¶ê]Õh€ÐhÐF¨@v5A£°]€ € ˆ© ­PP}à ®À´AA£F€ j‚€ h4Uv  ª5@€ í@àG¸4vÐhF€Ð¸Ñ Àh  (ÐhûÚ4@Q÷‚¨>ð((+@F´h@ ã8γ¬ë:γ¬ë:ίÛwË;Ï-çðE“™ç+>,‡à?}W:øg'àgñ£;“áf™øg!ËÑ7®¿{?yø ?¼å·«Ìç9gYÍë8½gYÁ›œÎ³Œë:γ«øµ¶ùoy圂ej¼'H¸Ï?éø x8Ç–>§à üæ}økàdŽ?¥Ao&ÂGÁÔo_‚gÁgÖüRòü³Éø¿•γ¬ë:γ¬ë:γ¬á}îÇáF>÷ÞûÇÞûÇÞûß{ï}ï½÷¾÷¸ûß{ïx÷vûß{÷ }/ÅUHðWRbP•h”%5V•„ªs¶Š†ÖÖ–QBSQ H¦½D«V&¬ÖKD*Ñ(J:% V‰BSQ(J§«m´J« BU¢@•h”%„¦:%Z%CeiÑ*­’ÑBAÛZŠæ8mLJ©Á"È+²ßLÌ‘îˆ TrZuUVµ%†¶œ8Ž Å·>H…f˜ù£.7‡9d²JÃOгŒ¹–JÍD¡ÎæKŽ”Ø¦\ÎVh9Ý䘖 ô¬U²zÈÁòqg©d£ç'’x§#Ya·“ųɋا‰¼±d6Ø\_F*vAbëY {œÄÆÇ<’IìöCke9aß$¢Çâ­E“:Í}’ö_S(õ’JÐ_iËNãÒûk ½“Ë2HÁjëC‡Î.9#ud“ÀÌS+!K¤á¿…8oÅ>׿ /ØT3Â|rÀÌ2úŸ°¡Ç ~Íon #|øAµ]™†Þgõà¡#¦¯ƒõy„~Û0sÿ €²¯~O™°ïåú¨€[° 0°÷ °˜«,%tû0Ù&¸šsÉ}Ïg°ÖÑÝx¾EòIMšYì5¾Ãc“žµžvy%öFÙiؤŠmäg"ºFüº“z%ªd  e¥D—›.ŽÉAqZ¼%OBj½²†LøHÆq"T]@5’ÅâóžÃвP¯²ÙÏ@÷r+A¡.®xãSΟÓ9úþ­W¾†ñçâø~wÊåËÊFˆ(:‡¤;ß8*|öá‰xϳ)ìFGB oÇ Á¿ "àOÓ\þÌÂÇúF8kÍâ ççÈx¨êaþßky11û1äUòú½ž{=‘|ÅDìÅŠS˜‡ÌG/³Ø·Ù|¾C ¿pÀ;ôݱ¯9'˜éÆG¼ôª„×EÇq Ùâð5Be1 ÅDÔ#œ˜º\ʼnd#5NNOŠJ¼V Îc„XZÅšrØ_ýøüÚD`÷Q3ðGƈҿ|ù¶?Ÿñü¿Ö~L–džz}âĤFüÆP‚T`=y’>ýo_/e¢?~_ëÎÐ)?kÏœp˜J_4:x(G¢§)₎ÁÑíözOÙì‹â%`ùyä5cUõ{=ƒýžÆ^Ïg³/aÈ>I1sZÇy¾èË7ÉδqPjPéBð“½ÚÐ…Š| ¹÷„ê»+ UTŽ(%O äV;séÓœ |ÄBƒìˆäo/²°©Í#Òë‚îØ^fœpÀÎáÎxG„oÏ€ÁÓ 6D}8 Ñ÷ý`äLÜó‹¿§ÐN½kµÑÔAÒ,ZOÎé„›p5Á0'öÀçì:Ã'x}ÀÝð `Ì,À/©ð†W,x¹Úñø~¸N#`:á‹ì.iÁ…°¥ë[d°ëö{=ž{1yŠÃ‹}k‰½–úd@êöböbÅì6ô¬žÉŒúyy:Þn&hRž¤ù3”¹B\F%u!¸—B"°Àƒä¼ÇÅeb›©Xd#݇ "vÙy!ª'‚P©ÎCö$Åx)0ÚñLQW—ܰå°ÕÅ9 ý-³ þÜ¿&pŸ§ùý¿ñòׯÀ(Ã.3,Z )É#y'—Øw³ä±Á.¸Ü2tÁæŸQò:á þîGË_ðÝû„3¹AÝñ÷ÿ_˜D3}?ðD%ÀŸÛíÓiL«‰VCfˆUN#˜¡·{yÎrI1C‹ôIGû1{<Åê‡%Åç³Ñzb™^Ø——-¤ i1­9QÅDé|!¾nňJÐÞe9ælCáK*P gŠgA"yÈqW)Ÿg³ˆ4ö#ä9Ï"gÏqrT_95è¯>z )Ãö’LÄ(h£­|ž¹}Žx­1yèi'³Ì^Ë©' ìöÑG+ÙßBÑÜWÑbqC²H¨žN·³Ó½ˆ˜‡¦â‘Õ9ÉaÇÉ1Kì§!ð$w¬¤Ø*x‰­Ø½ç2!Uºª pV9W0Èa¯f<¹/;'¸\QR•Èw>/lB1ªñ•V,V9‰ZÃYŠ1¬kVòIêö[!Šo@&Z0ÛôÂ]ø #an ~_—7>î+ ¾aÛ3ÀΩÌòî 2EVIf)éfž/¡XÔtßEÄsÅxÖ%Z>C¾¶Ål¬²+‡FòÛ$²Jpzɉ¢´•[ÌTP©OØ´è© Å‹Ì^Y‹¬—Û2Y:Ž,SSO¦6u3XIÁðòXrJMQŠ^…N²wÑ4E9;åæ(§ìW)$g€4âôrÚ,9'£ñgí…™¤ˆ€Á x]·óƒ–Ë7á‹éV …¿.‘»ýû÷ˆ…ß³é¤bœî(~ÞùŽxÇÁèQÝhøpñ5‹åòŽ–ô¯žÅ¾5SƒåôDOBGóÈx±tñ{1b´ñO!Ð-žtì业±â˜‡TjxŽÔñj©yDñ)ÄrJ}’XªxÓÙO8¾QBV\5\mY±§+EÉM’+’+O=e^-qEã眞O߯EõEç¦e'-1)d6…àgØóöýkn·Â‡Œ%¿É¡ê¾Fj`žŒrûb¢”(û'“’‚”tS§Å‹ŠŠßK_F!GŽC«Ë=•º>ôW<’x%z䘱bòYO5;<’N°ù&)m‚T¸½”ïTØçŒ¤ç´ñ÷°úÒÆð?t«Ë$\rö¢¦0¡U–8+® *n!M|Ï&C4rc½™d±k,dø‚ 6[9dD’rC\qŸD;ß)Þ˜$Çl^AöÜTå ä“Äú¯| Äh9Æ Hí‹+Jqg)Æâù%hÂA²%ß191Õ1'bôåà,§(”+Á+ÄÜ; ¨”*E¾‘GiÑ(W“˜±Iÿ÷øÞãúˆN¬¹½Y3DK½ãÄ?/ w.E 4súðúwO±/ÐQ¿ï&>þ>;€W9sÌyb×Dï¨KUFU®¼ðºa!bÊVƒ–e•7§ØK[ùq#‘«ÔZµšîæ…#¸àX>ýBñ®1ˆ¹$¨MõíN®Úre›uö×clT&S)Ƙ‹ 9×2lZJP5RbR3UUžµ ÐBfùu7L™¢CD ‰x£€¯à[ª³›ë¬­uRн„bàÛI®"†IÒI,§\U%L®™N[®M[Z©LfSZ-Sú¶G¢>戉Wù¾ûUÌ©ªŽº ˜p®0’´›H¤p§]—Ö6úÉ¢A0Þâö¦ÓÕ²Qdí´…„Û…p5–æ¦ÊAO`ha{Óq]EþðVëš0Vy×6G’:A<êDí¤ÍkAÇ|_Xžˆ¨‹4³—¹DOß§9íOÔ«…N§ðm«FÚÍ;®e!7}ZUÖ>”@?÷xLˆ $B+4ì86AÀo 4{š„Ý`—ª¹!ŠêËêN¥(A'2Ôݾ“¹ÃÉ%üû†žÍQáFïóé”ÉMžQ®phþóeîO®AÁ~ü—×§Ò¿@ ïIÉǼ8ðÑ᣾Uà^9ÐÞ€@<“Aßžåĸ©ÙEôÒM—Æÿ¦ñàùüWhX“ä±$o@I;‘÷~„'r(7ònQ;’MÊ'r‚w'¦à’w£èÔ¥×÷ýòªÐßV{”=¾ ýþ­ îÅ7_6@!3Џ«}[? ³¶@À lÁ…DVž`­þScæ_¿™ÃØ\ñtop.\0º +Kò‹ ÷ÃTPÀ>§ZšÜC=Ø»ÿtRäyƒ»UØQ÷Ñ_+÷ÿ¹?V"ðŒ´u—Z†‡¹¨qoAnè<Ì–ó!Lb.T{bwÞëîÞàºàÄ >¶‹®l˜{¸ýéwÈb¶oô¨+ßÉ»ß×q¿Š6Ê3ò¦ìÛ,€J+½Ø5ýØ“x«+—§y°ôúR”»«®»ûÓç¯%Ú [Ó “/½Í]Ð-ã¸õšÎð®^Nq¿÷£xrAËáÚ/AwÊYAÏž§sÿ‚Ñamèkrü7ú÷Msz{›ÌqS:‡»Fýþ¬+¼5|C ¹ÃÙdÃþÿíì7Ì÷¬að)œÀ¿™ÝÚ›û?˜OpÎí û€a}¿û\¸+pK;È»üÐJ7”¿x·èÞÃ+†ŒðÁk¡£Žw¦÷ƒ¥Ü–ëE’Ò4õ×·œ°ö¨Xjóã¡Ô¸†ü^ÅÂEÍíÜ%¶ô.ÔfôP’‚\ogyñ?…µçÞzþ|u/nÖîsêö/êGƒ(`f#x†‹•àÆÜc8–c-Vïþ¬ô†&™j¶7§Š°bcöCåÚ<—›º„ÚŽT2 Å}ªÄ }òì!‰ÿø¤SÌ?ÿêÜnåu½â,aî\¸&Ï M— ]{{ë¼Ü#½1ì7­nþzÓÕ–ðßx9Y­î?®ÿxº7Š5LÆïÕäq¸°n {Ǽ ÄhÅк¸K{:×n<î†1K£zv".ûËŸ)½k¸"¬î.áèßHi¹ƒ´?Å×ß.íŠþôŠý¾îw‹¾7óß7x YÜÒ¼‹Áœî\ n/!¾.\1ýOÖ½uÅíp”Dn?pß§ü. ¼Ž ðo4/2M0ôÝÛ+¨½kÖûÒ½½w¸FþÑua¸«EØìoZÝÐxïžFÚŽìð?ßÁ-îØF†AþHgüÍú’Ž®“F+ÿدiµ ÿ%]ö¯þÔ @Ü8}ÃWóp*ó˜YÞ}ÁD–½{güiÜ<¸W«ö\8½ñûçÃFt"ó®ðZÞ-åÜ—bvò†}snƵì󽹇éÞ‡ë¯×ƒ=J·}¥ì7½.ýX¼Fø1ŠË¥È´ ¯í÷]ªÃßÅÐ ùË˧)§¹;»ç>Iˆ»»Føó˜ÿú u½ÁkżW©—år$7ÚÖÞ½Á+€pràÜ#Ü]ÅÃ…× žôoc|³µ–0Ù;€wïðï;C¸£‹Â›j.ïbõ¯et× _wy°( ÕÀóÿ÷ðÕ®úòùhÆ{«U½½Ÿb_-\E#Ý¿þ›†wúÄ]ŒÍ½Úžßûâ ÿ°Í¦÷a©ÿá¸ò½àñ¼EŽ2/jÑx+ À¼GßÇñŸ]^¸½õÎ÷«p’áyœoÆà^RÇØ-/iy÷¤.íÆWW¥×;ÔÆªØv¶]iè,¯ ¬Ùx‹_–¬s½ÎMÎ÷Wr7ŸØFø1Aްïúxÿ®ãaV¸bCdÖ¬óŸ•û“)nÿHýý‰òŠú0§ïæ?wÉ ?®ùg‚ ÉØ ÃZhõåJW‚âá”ùÜ'aæbí.G¬oðVà˜he¶…âûøYɃù ¯Òú5·]M±÷³pvÃ0&•«°ÜR‚»ýÐeíy=G")Zì7÷ÝèNîaûŠ{±AÚ”zSo.ô£~ãî3ó9é·ïÿM鿃*Sî¿ûýÅÑcÿwãq¸¥Ð.X` ÿ»ç ]òi­ùjÒƒÿßêÎNï¿Ö·jÃI'Ø]ú³ý*ùoÜn ½¿ÌEÚ7Ï7/ò·¸{H/u{ïNö­¸MÌ~þ߉˜~|“†&䃺MÐ4,n c2† Hº(?Äc/S£yûýÿ`ÿqrý¼Ä7ïÿæ#ÿo1ï ó/N¬¼È¼Å“,*bÚ‚á‡]Ü)œ®Þ®î÷}¼0û‘cå†>e ! ´ÿzݧïþÞgC©>ûý5Z)½+]ÿ|ûR–¨£ûÿÜkX¼~à¯ÜTÁïV—/$´EA˜Š]'û E7¡€Ü •Ü57E.áÛæÃúR—~ïÒïŠSÀ¯™ÿÖ·E(ßFÌ?ÿ0»#ýƒ¾õ0‹—ÿ¸1ö Ûî@2€\wÀÄn7ƒ€d R›‹³øÇ¾E7ðÞaJoV§ÜŠ{;11­w}ý£aM@ÐÔÜ“"ƒú7%«rHCÓr»ùbg|Ré7|Ä\¡¹!¨Ô0艡€bD14¦ô0ëõ»Z·þâí}«PÕ0­Ë­É®õŒ¯Œ—q/¸žsáxrq„‰èè|!w<‘á)¡- nØVÕSjm¾ŽñÆsrWzWª×®+Ûfßy çÝŽÇ -JZ´ØöÙº‰ö0 ÒξuN­lµŽP¿7ºßîsÊäÅÆЧ¹þaª+ß6n§ÏœŸEų[rüÜÜáu,/ïÉä JÈèú"N÷k{Љð£SätìFHcNhx—¾vîoìy“Ò²DdÇ>Bä,x#áLIÂW¥ê Ÿ9¸oG嚣Dù³ý‰g Q£Ð+p,m¸Ï~ÀöÚÕé¢?<‚uó£_Fz_ªÔ@ɹ÷óröÇ´®-äÆp“žÅù¸lòZzqµŠÎ‘rq·»å ‰”ñ;ZªËïÝ»ïæ`óð?ðeá¾oÐ싚‰¶jÎ×çÏc)ÇOª+Ö_íÃÃY ˆ“é^_ÍYo*óUZÜÓ–/½Á¯zŸä‰ÕôHŒÿîG˜þï ˜†â?wüûÿAº›wÛE×}Æ:|6÷ŒîÌ:lûgqãŸ/‰Ív§þÆD6¶!´4?¦YJùR8qlhØyxq¸`õ[œ.¯}î.£ªÞíîÑw{ËÆ\ðæq»˜9Ÿ˜(yˆyܱì—Q?2ý’ýüÌoˆÿÞ/9bW ¯à>¢ÆóxÆ{‹€÷À¼`ˆO’»èñXÇXÈÛþË¥ï;W.ÏïÍ‘ "\ÎôóC72Ä ž.¿Pí÷CEÑOýáÿ÷l°óíÜ]È]Yæ÷½‹„Ë»«‹Ü_=Â%ÍÂ;„"P¸øõ:ß„¥Ã§ês½eØõåéÞîýàNÅ»(´¼íE½å¬.ÜŒþ1ßð¸x—›y–m•À£Ø²ý+Éâ°¼Î7•×ܯ æa½ºûl]–ù³|okž nn ðý¿;{„—¥z¿<µ· nÒKÅêj]D../¯o]†»^ÕéÜ$&oÊá/k»ß¸BºÂ»3¥ê=›Øñ÷·Û‹›÷$|3°Ü~þÎÈÿº.º’¹ãqðÂãg âïþþϼ2 C«x kÂõái\¼Ž¯ò=ä\¼ €z?VÌut€À]e}¡¼»÷FàÄ\j³Z\!]6­Â"®.ùJö5e­zóçzv·r´‹ŽCmý»07bíß÷û£zÞµï¯W›†û£pÀÌ0»ìàÎ.H0øoû¿tÄ]cqt “ì>xýÁˆ‹¢äC °.†ƒျˆ¹àצ®‘ÃT¬âÖ­GÕqÃK¶ôÑ¿-lêhi4ú“LO”’L¦^ÛÛT{¬Þü¾Âf^+/Ëï§œ«: Mg:“üêqµ,¦³ž¤ýu9Þ¬s™lØs:©& ïB¬žS_sî¹…dõuPƒÍàäCp/†¾ ¤zqð×Y»k§uOggSYBVX.p—Ãÿÿÿÿÿÿÿ¥ÿÿÿÿÿÿÿÿÿ˜—û=½ïæóÌ@½šS²daå÷Œ°I)Îy›Ìß'&Fs+›ófœóÅž²nRKÉŠqï× 6sÓ6Y¨ H½âlSË$Ý$î<æÛ{ç—Ó‹N ¬AÃVM½·.µDÊÅ&ÕÀ68&íñ·3/|QÂᇠV´N@}:Á¯£j<ºu¯!üËîmIFTñQ“ˆˆ€"DÆ"1Œ@ˆˆˆˆ€"""DDDDDb@.BždUÄZÖ·ü‡ø ›sÞgq±;•JÜxH@)S!)ý%¾$ØÿŸæu@€–*r@ %Н]H¡û=±üE÷×VãŽz·5ï¬YÞrû©q‰TjMkrÉ ¡%x(éQ‰ùÑMžzXñ,Ó©”æ„× MÊ&¬WŠÁ$•ì ÿßÿäÿV€¬®I>ŸqñW")rU#Â)ZÑ…II&?h0)Á ÎÕsQB‰ú %¥Ê&µ¸Ú—4€“à®þ<}ýÊ£ïIÓ# ÙN¹vLE›ä¦=…I­Ê$ª+s´04¥Æ€Áî©(!¨)R*€’qD*ÖZ Bº0Ñï·º1VuŒ¸û–€Ÿ­É  QþÚMßù@ô uÝ_rZÜf¹AJSªe ¿ßÂ¥UUB…üŸ¹ER…[µ¸÷ÿzüÆ##«z ùVQPI$’Þo?|ã"Bˆ?å×S·©=X¢kLË¬Ž€öü·Œ 9>eJ±T¸Ò—öYl÷÷²ŸRJ”Ìëȧsè¦ÿ‰cþË?úhpÝaíö¯ô.h(\zââ«ÿÃIüßðÏÓËæ7{扠üE…jƒhÀõX‚® Ïó÷P\@KúU)qd`ÌÖö€@dÛÒÀ *°(h0`Ö‰P0.IûÈ^´aÁ££½`ý¨1K!ùàÉÖ¿¼ÖÅ}À>B~aÊÞ³Z×è·­ ÜAÔP×åý¡°(ìy17¸ Ö÷ór $’½x=$à1:;Þ +ù¨7³¼#_™ VáÐ0Àu½C¿›Ö×­DhkZÜYÍwí­èìoxu¨aߘÞk[Þn2?<þÉ;ÂFÀÑó½ë[Ô\:‡tI7uþû›»›CDåœ[g>ì–µ½ët8â4{îrÖãÇ£lÈXò(Ùã9777ùŒæXë¾vˬq'±ø•xØSÎÙÛ¯¦ò神<øŒËŒ¦;Ìc£©xïžyÙ-X×â±n»æW>¥ú\§Í‡;túþ|gYg¾.N;·–·|åfyõ‚xõ¯;¶w<óãòì¬hñãݼÞMÀsä_rz×u¤ùþ·|xYÜ"Û ‘6ñìNY £žºû%ÛóY1¸o§ïÆç;GÜ7ëéF–¯<ð%ÓkKWXijé÷¦Öu×~ƾ:¶ÂfãFtæ÷ÐÐÍIÂ|’±äʃ—W?æþS•Ar ðO™1dF}+çl__\½]n6hës³{áÿ° ŠþY]¯Ï¿RrŸÀEócmøˆ¾ïïÜ5YØ6ÙF3µ_3íøÛ­Å¬è~!¶À‹æûí:ûs‘澌˜7÷ß¶‡<íÆ}§ÔÏ:ntåÇ®¥ÑccÛ³,êé? ùWŸ2篲v~ÌõÆÙñ•½Ó©isç¥üWk›x¿;4¹çMôðÜtÊ×z·Í¶6iIoŒ¶ÊSeÜW3çd.©ˆ3·_šÓŒóúx ÖŸmúóÈŸ®õñ%ÌÇÙµ³Ÿo¨n½Ì¼ÉU9ÚE•«ml×1lâO<öþ½±y<÷…êëxᦽ^®xáîG†¦@¾¿˜Îcl»--==]n}æQ9Œ‹8·\÷·å}_¾»íó¾z FârÛ.ë1æOï¾6}Çï=éKõ¿»+ÿß<-ºæ(Ó'øöß^¿ªí|ëièó¤N’•Þ:e5eoûûèïÌÌO‘ᨃ 1EdЇ4(ÎMyDÁBfDA¢²´üŸ <€‚ Q‰14rf2ù]¤­#Žìp~]®Ò/sÄŽ|ó&~ï©$»‡™9É—<ÿç+Gÿ·¸“o¸’’\p?ìm÷ÓGxÛIþß‚I)96ßejÕßfÄs;{Ö’ó <}ÕjÔÇd±ÉSïþ^'ŸäpÏ>K·>ðG%þãey÷.Ò^úOxÝ4#$ƒxÛ®ÒóÆØäx)%÷ÇwƒÁë±—(pá¶ßvûŸá¼äzîî×¶Û¦“Ïó  |áñÛ>¿Á/…Þ]´çD„oŽ)£Ÿs'­ËÂÒo¼„xÙà Ó÷ÞysîâîVÁ²œe¯$¸%÷RDâïXƒWÊ·.;!åÊÅ„üÉ5IRñ&—'ÃXÛø°L1?CþÎÄÜ%áëƒíåÙ°Âåõ‰÷|¼•ÅG+ÓE†Å»DÞ,žûìíÿúþ/CÞKÍúÖ`qÆJ”!¦¹ I%rxíZI¶ÓÄÛ}’RÆÕ®òµiZ‚M$äÞcBÒWÝÌÄÃmµi+I+Mçw0ffZJÕ¥G6Ût¨àpÉïðŒy4¿µx¹Q²Î\Ð÷KƒÆQGŒégÃ$òd¯ÀìˆüoÀ³¾:ç ±vï2RÎ<"G.8ÒǃÂr“Œë5‘µ–±Š+åpûŸèr€vW®y¤æ3”®|Õ‡Yç:}‰èøÐäø-æ¯t9àʉ^Oà¡è¬yíê`9Ì1ñ‰ñ#ˆ'aèdꙋSÉàø@§ =Ѐ ÂPÐhžhÖ@u"û@éIɓʄ}§Äù‰ÉèJñd6péû2–ZXCËæõXfšûb #ô>Oܧ™ò§ÁÕ¡Þ|„öüÔÏtö9¶ ¤ƒë~.‚‰¨õ g&rA©1ù^T{ñ“ƒ‡„;›ÁÑ/’”h?aC8xb@õxÇÎÂ-<9àÃî •‚,ìàBt|Œ§ÁÀqÁB´ó2†¸žAô{n?“„ôçL›¹×7Ù4y4íäø(‹ÑÃÙº1¯rx9C çÏ6÷ã|žf’V‘¼ïBu|NŠö§'Ô*¹Z‡Æ+#ša\#’œ fr´Ra8f:Úšè ì%èÕ§NžHU‚æüŽÎˆÅ˜GÑ„¯=ßõ©Èõºrê§[1åOBq<»N:;C•ËöGìÅêß$¿;^m¼âr*kí·çQGÍ^zB0ÖH"ppv1¾@‰Od¢8 SD¡æö¤HøÈôå'ÈïP°,#Œ8x=e4 %¨ø{:³¹ìJÃ@ú3‰ó5FADÃHÉ ªNç5„ã8GCJÊjäB©¥~C¥C˜G³©ù¼óÍN–þyçCžzKÈäTäs§ÒÔL=Ÿ¥ºò×–¼µå¯-}`w gêgaEQ΂è/¥ôt`:ów·ºøg>Nù|¸|)€²¦À|ƒÔ{=м!<Vè§' ÞyéÈ ˜$ЧwOú+·Ûñ*Ìxh¦f•ð*rz)Ûõ>s‘<˜×Ùð9k—æï©íó8<È»x~YÉlK}Wà¾VªýŸWà''££Á;>ñO“`o/ÀæЂ'')Ã)Øj_a¤Àb¾>Ž#¼õáò4 8?™æ (£åEúžÑ ÇDúŠœŠœŠ”ÄúÕUÁUUJ•m*›m¶mU\¨ÕUR¯* ÕofÛjVÙN®Vª­uš¶ÕUU[Uj«jÖí°5µÝ·»;:vsν㴪ªµUoÚ¶»ØfÜmºÜ÷v¶ïu½à*©m·s×—€Ï!\ìVÖmÞ¬ï{ÕUÀÌ€ ®è½*ÉÁ¶òÖÕUZ®6À¶±ç{·Ýå·ºßmÇÚªÚªª­Ù€€Ö1·w7y³¶ó;ÎÕ«Z¶­nà`À­Îíœ*ç.í»Î÷­mªÚÜ-›»:hË êí;ªÖËí †ÍšZÕ¢ JDm¡–‹øa4¢|;›ÆÓ5˜Ø™P”š1'8èmmj‹6ÖÚZÖm»( Q=ç¡-;Í‘¬¶)¬†ÈÐVÀQ–T«UkjkmMb–ªP¨(êªRïJª¤ßò (ñŠEJ$‘à B ¢jàýÿ ¤ˆŽ‰Dq@%åðI^e#ݽ à" )" @p"‰Ic$„‰D£Ä)%/¿à~ %ôBDŸ.>à€Áî=ÇD€Ð;Fýß|Ú°€`¹¹¾àß½_zÜ€(=Ç`ŒÝ]öûö€Ïl3ïxÐhmÞ{ëû…Îè·s ;(xÕ `Ü è4hÒû7Z 6šÚ>ñ¸â€¸°Þó ù«.zªõx–N¦µ¢9F)$vózà•µ54|2*¹u:œ$¬e—™-Šõì}àí÷–ƒ@}îÞít÷}à]€ÑØ µ9èü°üóã'¹B¬á'+1ÂgO)ôÉ>—Ó=çɇà'ÆŽ•Ó™‘I>¹&0çåfœCµÁètLÀhR¸F¯€w¸~³S>–$¹•jéhÌ ‹PqlœÙ:£xb)1z²Š‹ÔÐ× [DÍ=;²¹'•.IKrç$\)ÙYRI‰Û,À(Ó¥‚‡áÚñ“ÀÂù±«.Äð ‹Û½ˆÃÔç×óö±]u·©ôªŠŸ^Æû³ùí’‡¾ÓPÈÿWJóD_q‚Îå ¡FÓg¼uö"'BÞ"íÜÊåÍ÷ ë¢áZ~®A7bÖ»ÃÙàv¨ØP;°E’.vɘá«ÀÿìÍaR§\T¹õej>³ºDkm~ÀÖ‰ø<ÿ+Ó«‡ þjjkW­"—’í×ëKbÒé~—Ô$}æŸf)ËîªáN;òÂ}‚¡qqd»§¯LÀíQÐ<˜Ž Õ˜N“ŒÍ¾A€Ü…ȹ1Ü­(ømÜY!ºïŒ] n^ÙÆ5mœk]|§! \ÀÇ @2ÃÂçÈÏPƒ¡A 'oco'Ɖ´ ìÆáqk™©±7 ß謹ûTÿë×Ý+lÁÔ¢ÂZ‡€ÿ펙É*—õÆ&p‰²¼IX*F£Hz‡q}‡–v¥C3¾ºG YÏS_Tÿ4³•Éú$¯ÄLªËl㉴P`Y‹æÛ0û×Qa~ Ž4°½Y B·B¡ÒFŒ=ú•m˜f6q"¬†`OÕ8Bù¶ë‹ž–¯Û=vß[ö¢”7ÊÝ&[hBò¹[Çm(Ak! #…ÍÑS9s81æ.±°ì¯?ØÓðO¯õÅðÒyæb:z÷á.Í¡§!Zi›nBÈl3eÇ›6lú¢”ººÂx¥Í »ÈŠô.^åö†ö‡±AÙÇÛ䣸Ó:Y'kúùŸ³¶h¸¥ObuNO>ìÃV1ƒEEdXÆfÇ” ÙŠy#õÊÑ„qßWȆ`fwßÍh±î·´"%ÁÑhb.™Ä`êßýjÓOggSZBVX™)2)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ_v~ÇœáJ¡Ýá:¶Î7¶Î(¶Î5ÿÀý¶ašårC[3‹o«lµ°*&w´0+»m˜U³„9+b´Dx õüxŸÿûí¬#³ÿèìa³<5˜è4dwü¿ñ#úì'b<òná6,Ìt˜‰ê'w´=^mœy¬d„ñ0@ÓSööQÆúж‚Y›lãØÌãmœSZ>›¦*Û0ãÿZ0EtH½[fÑÆÀnÉvËzÀ"X½äJNÕ†¯Ç›‡ý5h¾Ó¬ñš§oú:–‹ìtó=¿Bþ“¨Ú½LÓºáØ7(ƒ†N~¬…êÄ„ }×Z_V™È½DÇ\Ûf"ièâ>Œa 8'™`AN«ñ«lØÌô¦[f¤ºí£Y°ëa}‚Z^@bv"cE’ …Ǯ͑íòqOBœwúŸ¢·©¨gÛTÿõùt~¶e|$Yóî¨õ&uk‹rOHÄ[g"ü´ h.éBŸÙmÙ[Öû×Y]|5¡m'ÛX‘@Útþ« O#oID@«DÅ#;*º¶aÃnãa‡mÒ›ºHú—áó(ÑŽÿÄØ„óøøhŒœ'÷šú<ØŸº- 圞iÓ(ÑßN£o_k?YWƒéN"® «To§O„2¨¥@Z„¿æÄë?hÖtW¨‘ýaV†Þû£uYóÂü®Û8ÌDϧŽër÷#3T³dµ|Ô›‹Î#h,¸¹°}è?:“Ë=ËMNEÛ”å,oúpÔOú‹#ôU´Ý«øûý_lË”$õQìWS!(ÔfÅa67Cõ™¥˜5aÛ¡MDÏ…LzY–¶æB*é|v{vÌ€x_tMdéa[ÔähÿéÆGbÇâ‹'³^¹T…+zÁ6Eëä„Sªù†b£ÆDŠ=jÔõؽ[«oOñ"Œ'\Æ%Ð ¡`i˜õ®ÍБpG¥í×µ}_Öb;5fEÎ’pÔÙÓQ6eøò½µ}Õç²;fÿüÈ®Ï1ÿQzíèÈP¹¤)ü&=xó:ê¦m ÿ¸(@„µu-Ñ h껲[†0ÄýQ]-å±i ^°Yš¾É>eÚ]¬$ý2qW-ÃÏ õ*£ƒ¶W9ájë¼^H«ÞPÏN0EûjÚ3ëFßý]³E~¯H¿ÿF¯h>Œýõ|pÔ"Û6zÒÁ£{fx‰©õ³6ô>¡üF¯X|ÐFV§éÅYú#[tÿýaÎLÝ–¾Š¼ÖŒº5tJœ¢7ÚY¿®;wŠ*®Ï¾Iifzšþ¼­5Îî,Õæ0³áfšö‡½ S SxV‹<ÉçWd"Çf…BÙÂvÛ;§ùž¶N·r¦d[fOgõ:wÛ"‰ý<œÉ/ï«í?zõôÆŸë"õ’ùrôXÚu'›‚ãýªÂ D'ˆý+ý÷¬Š´xTVÍ ’É笞'‰æÕÃvÏÒÖĵLWú%Ž«ɺ•m›Ö9¡YE@A7@ òƒìÀ…:øh’åŒÉ‡q€¶ÌР±¯TÄ^ç¯>FÛ0rFÙ7ËФ@ºMd,à'‹î”9„‹âgm§Øõ 7MÔµØV’ˆ•-8¹5$f%5}Ç;4ÍExýà ÿܸptu5àûk|umá5Ÿîɪaä; %sIªËmòÍZ½ö'i­«yBV± ·á˜Ý4úÃè}/ Åo1ô«WdÐ`ˆlõ™ê[&¡,,=‚ßö¨Ô¥þ¨!™€¦Åû3ô@‚i½<±(KUD|<ºhö „gYéV5vvh R¥`šH ý›)·Æ»_s½ů]îk çܧ웇Ì&¡%ž=~k¬~™ß©ž¤ðá¢|Ž ¸0ψ‹8rM½LâîDãDGTK¶WfÏëè][õÝòä«^ 'í(¯MÚ¶:Y}][ª•»`Rm ][e`³Ö»:¢`k'ª`jm¾ÊôåVÕªCV®ÉÛªõ–è^iÛ²£Š²îXE q¥a\G3m^ŒÖT³Mf/àfgdÊë¥( áQoýp?R9”?|#çuðÊ_OÍ|"‡ 9ñ‡¹¶¢Wí~é•óOI%Apñ A!2k.O¥?Gkìº{_’¾0ï'\ââˆÕV§Ær£ob[ãµs“ÚÍý£¼ÔéÆuqµ£õN.}!;ÒØÎùö¦w—ÜïòGÒ‘’¹.x§¬m:ü>#ÈÊG3mGÕ=$Æž¤V—6FÍw?Ý~¦Iê2ª1H(RT–g4öáÀþÝ?uæ]Q ËSù³v;ÑWo.ìïñ[û‹Ô¥8D‚R¬&pÞv;}ø‘‰úT»}ðõ÷’>~åFÔ›ùS¼þ˜ýÚsè"yIoÝ)×Þ!÷¤¯¬{øçÁÞ‰pŸ‡Kçîê˜ýUN­öÝ/AO¨…¥K4¦Š%zMþ÷÷têwÝŽû»w…°»˜åjRŒÛ×ݶ۵©šuU)ùä.jxŒŽ!S®Ž N]êçÔk¿¥£yR9¶þëßf û–ïöØ>½D×âÏðuTÒüh‡æµ2ïkÌKÓb=o©Œª“Ý\]¡òx.=Ó¾…߈Î}ýÎur0‘ßÜ\ï{_9ô$¹Ä~ß«çîR@“óT»A²Aõ¹ªoìKÜŠŠdŽÞOŸßÞß¶>Ñ­›o.ShE”z O>dWîl•Ló¡ÁWìø¿v1®|’9)qgó´s­s™ÊapÜ£'}¨}£·$Wà¾Ï=v*ïzÕVŠ«·M^¢µNwÄj„Ë¥‚Œö·Õ{Š™ à}$‡ÝtÐôk]øÂf¥‚cÞñRgD»CºëŸ±+íWÉŸ¸|mÆßg׳&í’ú®g-þ¾kÏåÒ>˹úáKäÄ·øUÕm¿ç‰ÍjB.U é$>&Iêê|§Ô tÞ•VÉÚ³\„`ŸOu%ãrmIpXªÊÚÛ0!Ô‚ÒËšUŒ²‘Ü}Póí<ëovÈÁ³ýì,ª’ŒdleSÄú-þúØQøè!uI…[7X-RùtäC»`åz˜³ÀMµS*”%Y2IM §í|öÞ¿nþž ¸‹ð¶/vÛ»užß¹½ ‡¿ÕZ±»­¨Û{jfnd.bfŠH˜Ú»õ"BÇíâé·O]ê)zÝÔéJjž:ž¹» ¶'KTÁ!i;G5dLa)*Jz»¶øT·sˆ[n·°ÛX&21†ðžÁqØT#jxvŇ6ªÛw éŒê^ƒæ¥N¶ÚJTõ%NªéRV’J FNbf˜* Bº¤¤¾ªzµ'›Ü}Ey(|6Z¾ˆ½+7 ¡egÙòörü%OfFý=4ª;.¼ãkˆ1Iâ%¾(DîÂÍý¤Põn 0GvéÃÜ%劆«¬KO)Y8$Œ©ÇXäv„•1Jy¤'ŒÝG7Ï­ó+rmÍÜ\ˆŠL©¶»Äµ9È”’\ñ@¾9ûâ¯O ݪÇê>(Ygè ³9!¤ó¢dU`ýdg]™ÙËyÏóëôÛ^?¶ ŧ~€ú÷*‘6ž¯›>Pú¿;º0P@¥¦ç]´|ýÄá!;ø®~çÎw½ñ@£ä'È/ß8Ê{Þ}çkU?g÷m„‡Y¯»sgmrÍ5`ïÈAûXÍ‘‡|P,î¿}³–YúÎu”þ×ß¹ÜVkǽ`ãhØ×ï¬)~ïÀµ÷÷ßÃî  ,[Ï÷[Šèô§ö¶– „üRRyù„¿y¯Ü„×uóÅ„~RQ”Ú³Km{¡¹/ú=κ)B ü.NCïï¢æú~ýp,ñì&ÅŸÎøûï{ãÿÁÊT©ÔÊJX$»£ÆH”mçy¶"•¿¾kµ®žêyûŸ»Éï,Ï'?V|[~¡òÎ÷¨Ø ±Ç9ÑaãÅÁÏçâ»|ê–e‰êVóõ©kë=?w‡©tÆ?Oxáççu ÏËI,Ö¿sŸ¾¨Þ˜E¦Sû9êaú5ÜT×Î]¦²§º.Ÿú”G8ƒuõ<¡K÷Û>Vt•'PûúgáÛmÒ3]÷5ß³q¿Úï9<ü«ÚzXýõÙ¯‹.ù;ß‚§ ÷µ>sÇ`ô™ –¾ªß?[üýÛ„p¸-aûOŸ[쾟~GRc ûÑR‘în©>·=ßiÍè%Sãì|uЧgü"˜?´˜L¤§P„¬ÔkRÚ/^¥2ÝÒøGéï£!M ÷¾üÞw*£j;O¹´©qS°8ã­Þ·¦ið½9LÆU,+®§ïªaY¢+U!Nx`óŽu¬ýÈÄB9†îköñOÚ“£ g¼m ›˜8K9¢¥F$ÕHFs’0v“ ÍM-MjŒg"‘Σoµ¬Òöù°“­¼‘'LÃßÐödïÈïgGÇò§‰ÀÖfïÄû&a 1œó4×e¿VNœ2 ÏðÖÍw­Á–wôðhcLØhÜ€cέoJsÀÌFpOggS\BVXÆà”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÿpÉíwIfó68ešc„’tH”ÔTJ&î¶u$ToŒ‰Æ2È6ˆ$»l<í1ÂàÅØÄF+ðœî';¼s¼ï.åž7ªIˆ7ž¯9Üætü[œÞ÷ÓôŸ“ØËäö|D‰«ì=ΧÈò/sêpùÝCÉèsÉñ;ùÞ¾®ÏœËïy åîó‚½?7ãž…7˜g… '··³É(ÓÓ‘9/OáñkŽÏ >çÊ}B‚‡²ó—§·«ÛÔé^åLóhß”êu€vpt$àt>/pº(&>J &'ÌO‰.áç‰;Šß€ž£Ôìò|ᆟꪧ/ùOo>ᨇÒ$¨Ïµåø”»Ãñ<Š”rs°”ÓèíM²X^GÜì­>F‰§ù¥;8=ßÁáäòkàìú»ØlðQ.aóõr>(;Íåü”⨰œÍX+÷[åg c†¨uô‡ÌœhÀñ.”¥&†½ŒÑ+ö8}laõ1å¯/¶'³ŠôéîN|‹ÃW= f‚|^Û “Ñ@Ny8FÏ/Ù¤i1ž[ð†œÐà€ÀnÚ×ÞÇcïx @Þ4kÐ@hSÉõ#¬éø«‡oÀUø>× €5 @) ¿4ËøOy‚DG“Õ!çìÀM€:n5•sÛ1æ4Фøù°Í³>|xêo qLñažÑw÷á¬9,B6¿Ù;?ŸÇÃ'ëhË/xˆG0c,²ë†8y£´åÔF97ºoÉû±ðóù1»óÙ–¼Ø1ægNVÿðQòòŸ»Cžt4ç1ž^cÚtü]Ï’)÷ùÇÆyÎKÌDφ?Óòq¿,0sÿ¬6/ÿ€x²ËüŽ (ø8¾ÂŽ¿ÊrÀ£ö3Ûÿöÿ¶9×¼øíEþ7ðÅý‹úû´ylÓ¢Õl‘àˆ8¦ÿ=m´íC°Í ¤»ú#ÈoH)Gñ m÷ˆØÞwŽg÷f&9¿Q°˜Ÿ÷þ…%¹.¹ÿ1½œú’mã¯óû?YØÊvgsco~ç–w?›K+˜Û4ßãFpYe–Ye–Ye–p#ÇÄL#ø÷›Ln#õ+nbqdóÌÄ}Ôΰào?gïÜcvTíŽáz'^LFp@€iï²/î°ŽAQ‰='’‘ê—Æf:›è®LÉ\¹^˜z¼‹ž‡t³™…¿a$ç0¾“íó„•Òn“бôäÏSÇÞר{%œ‹±1…‚“«y„åe=«¥ŠÊ:^Ž3=3ÕãZ§%´Í9×}ôßß­|ÅpÐ\á_8¥Ôs'#•Öù9–]”±=ÁýÉÌÏY£ƒ­YÙÓ§¾ÍÙŠ­¬­PQ‰îð{úy¥‰¢ŸZ·]ýÎ~úJï® àϾ<ò’ÁçŸBÅ"<ÆXŸeær½Ï˜‹YSokRÇ‹rÎ ‚­Å„”¼'Ÿ|~#›çr•`1º,RI$’J0ù—œÄ—©‘Âï·ëÛØ­›Q£Jµ3X¸QªÎ©–ð.pÉïñ7ÉS>|$ðDëÖîTHžWÁÇ‹t®"ìÅ!̨‹xq&W ‘M‹µsÎùç;Þ8 ÙâàG“W:ÌBâpg/Œæj>gOƒð2~ÏÀhô€yΰy,è§[ë>o›Ïq1àÅ2„>"hpÙ(‰Ü¬bab²ï±8?w9>˾ öôH±o—uǧ‡µxÞ^Ä‹õxÝRX>6$JÌăxd7—‚÷óD&–æx<ÚvÅ~ó'Ó£+‰¦¼Ûžyó„bíæçšÕ·Ññ¤åä t¡E¢ 6‰ Ãä´w¤ø½è´ àx:>qðu!ÓЂŸPµÁ«Æãà­>$Â:φ€ÃøÿŒ¦·§¾zåœ,NÎø<œ¿Ê€øÊØìꃜq‡ÇŠrÖ¸w¢åä7oñ<_“OžÞ@ï='f4g´5E[éz¥ >‡f½^s98»y¶¨K{NŽO@x:|å&¯’‰á†[ '³ÛéD˜8“q{SðiÁÉ^ÀäúN•Òƒåǧ’Xðvy8ž”éâ|u OÆžY_ÏÅùŸsg¤ä"ݵäÊ¡EOmw•@øŸ'âýÞ_Ȇgˬ8:¢ C˜ºpvr{°µ~OÕµj¸"¦°TáY ÓÌAHyêô >GÀÞ{+'“Ëæ|O©öcZÃôôCé‘Âù¥øîvüÏ´åØsi•1B£ô3”&))ue€vÞM8-œ¥J 2x„d!CÒååò“É(tø3I@ú Ùö)IaàéPƒpæß ¨b<2€ì ÓêžÃTíÀøµ"àËÌÀ"*þ%Îp; ö}DÐè°„>OààO"sx|ˆò/^8@ÜÕTvÙ´G*a©0H ˜5µHgvíºN½ÛµuØ9 •³!)ÜÕ-Ú¯ý^ê©JªªªH:¼»Õm;ÎU%T­ª¥#+juUÒª©R¡uL:ªƒu²R½ERwrPAçU)T£³»8ÝnîåÑÕU)P:®îiFÒªª€¨-QxÊQšŽíRà)À€ÅK†Ž|r7ž´‘)(#0™–>‚ „™2›±EÊô‘%#|ÃcŒ°`N3‚J)”©êh7ƒ!Q7‚‡°×ÞP¼=àhìhûÇÜ=Àv>ñ÷¼}ãÔ}ãïx¼ß;€÷zƒº{¼®†»¯Á°v; Ñ£ï£@hì} 4hü‚þ†Ïw€ù_³ç~î§*ü€kàà4€€ Šù'àw?ÔyCÉø>Ï…ð3,ƒv&Y9žà ±Ï☌ùúìÛ±¾¼YÔÞw7]Œ·˜'(çÄÊ4­H–dõ´•™cùÛv"~Ê|õ xÈX{Á±ßºâ;FO{Ææa0gm½€¥G¶Û2²gÁoxþ`òLcÁæÎ‰?_ióœs‚ê>²²]yè¼ÿÂ?Ä¡0/«CqýCVrÖ{\l¶·Ç òY­²±GˆOÈÚ$ ¿]±ß¤¯ºx\÷ãä¾Ryýot|§‹áùÞØ”49±ñÚÿm‘íóÐîbw˜ˆ¯×Ú´4Úþ –žiÁý·‹z/?S&<´ŸÂ1ñæ6)çŸÌùù’¥lÊ6óÏ¿ŒÍçYGŒ¶Þ_Þx¾ö#üÏSÍ7Ú(@¾~sÏAÔä~Û<ñÏ›óô¢mŽÅS›5è:80{ÞmÏìƒ-æ'‹tmyñÈA’À.¹úþòøø)™ñ•´Áâ-‰•ÖÛ´ñm¹¨ü·É£ØÏQÂNu®y')1 <æd·/> 9í\%Ãùù¤2Dß²MöS|ˆ·Îyò#wA}¶ÃùuÖYoú²ÈÿÇö"3Å èÄâåžÍÛë(øƒó F'lèx^Ô_ÿÀYòð<;Nž&|2ÛÓ–z#í¼29}ÿÛ7ýµˆF̈Áe4­¤’ËzS™Ë+Ê!¾žG§}&?ÿdoâdwa w‰Âtý|:cîI1u¬Úg²FN¹ù×ÌDôg›Þ$‡mÚ/Ñ„ù÷:]úýÿovtÕaÝÿ`K¸Œô|Æ-@$ÏS²sËe°MÊkYO>ÖÒ=§|"ý¾ù=;Có NП8&ŒPí-ð&v@˜gŸÛògöýìBt ™0Q!2bk…Ÿ¦û¨Ê" ×Thtù]¾a"rwÌ&ÐÎ]†7ï¥ÛÿQ¨ G´“ XÙußo×Ö‰…ë!A‡ú™¸ *&òõ ”÷õÌRä_¤ŠX]KO6|BRR=ÓÐÃLÉe}D3’õ}Ù¹r}PŠõ©¦6j}p2f_ívÈ„ÓÄB¢K _BDÂS‡µØƒÂDšDæUý÷åZÄ_+½v5b²|U²0-·3¾ŠP§ÈTE¦.Y] ÇÔŒêÀú˜±äãSØ‘ÓÓÐÛ`û÷‹?ìçVsÍ,áJ/~ýr‚£›°X_áíé>³ƒËõØtE¶S/8’6ízÈçHOJED˜ôJê#}-•*Z*##سœ¬l=p=JŽˆ¶h\/E'ò…c<ÇDMz³Öð¼$LLØ¡cÏ46kÚDôÛ'¦éW®½e ¢1y=?Õ¥ô<™Ñûe~’ª)@>/¢¢ˆÑ ²Ö”NÀ+] "f^ãIÇ^ô €IAªÃœã•H˜HœCœÍds‘¥WI²Éùò4HÑ È„º8 xPvlª€± Ã:N€N¬!l‡=CEK¬¾_»Øô:‡:ÖL9Ø‚á§q¯ 1œò êQBt¬l|çYEòÙK.™ (Ÿ·ù"ôüžlI¸E‚!yÏ[Š×‰è}‹KßdÄ^JM>Ï~Wk!¬²\ý•ýÕûnQ|PyÛï­ÿZÇîZÈœâ>ÊϦ ªªå¾VÊ:wÎwÜéR-ÖçäUùlnn'?¡!Ëa¾þ†2£×óJÖ¤>Ú}CAÖ¥·þ]~lGпÿûÖ8¼B?h8ñR}h’C¬ˆ}ÛÀÌO©c>–Ý ÀÊÏÊn”Trj:bqDô¥È/D´"Äó®š;v´uÛj¾S«hbET;}bhvc£Öž¹›¦H §¢NâSÉ §ãDÁv¾ävtŒÁ—C“h‹¸-AKä`pÉïñK+¤Ë¤=ž×̧Ÿ—ÃÂQÀ’Ò‹DOn”À~paÌCä|O³äè§GŠ` Hp Hàˆ‚…N=Ÿ#Âùò¦gSu,öø||ÁÔðM;3`=U z{=|À™0ÓË×=‡Á6“šq~R}vr¿“·‘:>Ùå, œEÌ~‡g~…äéö OggS]BVX¤üp}ÿÿÿÿÿÿÿÿÿÿëÿÿÿÿÿÿ= F½8ÒÉó6û£%œ'49¨fžÌ”D &¾Ä‡r~2‡äØß)FCD/)KI¯Ë™˜‚að47QÓo<Ø^Å’Øk‡“XJä÷±2) ZQiuéÄ[¯ê´bÞ#ÁÌ'oàø6±8~Sá žƒâ"^Nyð|ÞP³·àðø\p`zú‰ùSâzÎÊÄ:S3±În ÃŒ ñ;:>ç"§Äøz<ì÷0Täù ð>¤ÑJœç ô^O(å8kéù&a ù?¡íã ¼r/sÅä'@}t¥Ã¦‹öYXW²žfÊ /|Î}Þ9L{ב‰‡•OL¡@PY–žŽFJxoiv(v'úõ¿dÎ@›ùÐJy;7E9Q:—à÷v0;€=„H˜°£Lê‰7Þ÷†@Pͱ™·±ZÒÚ3ÎöÅ UL»³³6Û´ Ø4?Êç6°…†=±»ºÃ`¢ÀÀ5Ê€H•²SM­¡²€TF ½%TÛ0& ¡3a©¬ÇO(TÔ”ËÁÔà@wwshÞZçÖ& N0µ%HHÊ@ÔJ½!!^¸w‡•"€(Ìq¢`ȪR >·:Q 1Ö7H¢`Z Š¥•` Šc„²È’Š"$©R¾ðÀPgÞ>ñ÷€)4 xûÇÞ^Ç´è)ÜûÇÞ>ðxÑÞ€Ð>ð>õÚ>ð¼}ãGp=ǸûÀÔ<ÇÞ>ðx xûÄ÷€ûÀ}ãï÷¼}Ãï÷p¾ù÷€ìt0}à>ðÚhìt4(¦{«èvN^/±ø;s*߆|¯ÃÉØÀhïxZ@vÁ  î T? é¹$GÐñ~³ðb’{æR”}¼â>´ž-öÜàç3é‚3>ÄßËyÄ`yëå?\LÓùÈ[|gç/ÇôÚ#˜“£®YÓó)äûN¸#€¦ÿý«–BÌYgÀ-×”{7Û=ƒàᕨ<ïÿȺê:8:‰&cnÆøÛwT¯2Ïþ݃d}e¬£ÌDmµ±—؉ælÒ ¿š@kGK¤|Ãí,ÐgŸ=™ûɶy‘¾Å–ÄX?ðxĨŸÅ¼üÿNरŽuà‰AÑ Á9.6ô€­Ì/ç1´í¾òn·ÜèM3Dù0™ Hb%ùßÝŒösžäb#Îÿk"EƒfMæ&6÷ñ£‡û2sÎú9Áyë‹›†y’ƒˆ%§ÌA×ü룘J:¦?Ʋ•ð#Ø£JjYB"O¶ÏȈ`þ`@Ä-­®Bü |c÷ñ,¨@rM·ðƲ[uþ>#ñˆÙ £à ñ;_ÌH¸¿$ÄŒ×Rƒåèÿ¢Înl}Îqr_’CêrßøóÉùäþ•þŸé'Ú ý0ˉ!G¿ôI‚É0ëóßÚ ̿ݨ¯D‡âœ~ ÏÜÉ„_Ï>D¯‰¼gÙ¶Öȧqw'͈ÏÊ;¶$™3ùÑ$å1=’\F܉Ûÿ&ó¼‘ì´ü3‹¹„‹Ìîe—û±áü1Eˆß}±×ß¾úËψ•òOéê6£A ód²™ÿ#Z13ó†3¶&IŽ@}¹!?6(à:<}ãc9Qç¿ÿ·Èq]ÃúP"hxßoŽ-·kÿb#3QQ©•Œ©ÒÆ1Ô®‚¡IM‰˜˜œ ‚$©ëõCÛ(ÎT{ƒã¬žUÌ!~JKÔ¤-…–o¨X@6%LRÔ•iÆD$ûô/@žN E‰¾ºäQ#Ñ4’$„õÉ…Ý1Ô ÅMDSì~¶¯­÷ßa< µ¾‘2bi@õÂL0…x=ð¿9Œ‹mAS$Ä •V@ `.Rf¤‘3¶QÉWß›´æ%FñFÂÅ—ó¨XD=ö¿´¾ž,u(­d.Å©GL RÔòÓÊ {`=çhÿGFí®'ÝÄ‘cd³|X‚FÛÖÆÁ=EÉðIç¾/‘Ëw¡0óV˜dIFÚ2€ºd÷³¤ÇS˜?çÿ‘—ìLó¾”\ÌéO,V gT¿P8y¨-[BA’/…¿Ý꿹c£/QÈ(XÄ’z}‡Êø‹«õ[uúŸ§ÖP±Î'Rq˜ê0ªf£’€r+O”­2ʆ ÆרòQqDe¾Ÿ?,ík· µ´ÌEŒ‘:öƒSú« ªœÿ]/¿6°‰² žE–ÄúK×øÔLÁ¥FÅæåËMñ¹v‰£eý¾[îÔ‘;½æ–ﱊRøb^­DÙ,U„©ÚP/üØÕ÷¬]?È;(‘Yϱ "Á=bØ ™…¤ÜçÒ0D=N‰H)Ù‘¶Ù‘LZKÓ2Ù$Âd͕¨ï#*¤1¡ò% ªh«>Å=géñ¥¯Oß+ö«Òq] ë4Ž+”|Ç&VVÇúXöXYÔNL­—M±öûãm2V¬°¹©ï+«èù™¸YõÊxø.–&¾~Hή›¿´þµýÃk&ù6ïÓÎ ü4•ùíyASi]¾}3½/™ñ·ßâÆ¾›Þ³sÙBH<•«ó«=¨?Õ–þ™dò‹2³h¬Xêßl~«Êòûäž÷7‘\àÇþ$}¶×“~tßëö52øÿy~“™å5ÝZÚ» þbVà|„É$¬åAÉ#™ù–õ±g®Ó¢Ê&Èp<ó¯höôŸXp‰·>ØAZ|ª†óÅñåƒÜ–@±)§^bÔ£œ"°´=IL)r¢L”J0y)&§% :<©g¡‹ɨgñ¢WªŒ&bŒúJ`šB©çâdNN­àŒ={IE=îký_É“(ɱÆÉýW,_ƒÖFåŠ1k`ô‘K²Ä&]~6¹6ÿïÍZ®çuÀNP|¼ãúEÂÅÎØ¢Êq¤®þ(•É FpÉïàæ&<Ë/¸„ÒDcE^¦øp¢s­ya¶zwÃŽ¹™ç3<´–9¼5ÏŒb,G/Þ³18ª’¬áå#ÎqÅMÅ&&à$«t‡¶²·'9¼çœÌÞ/Å? ‡7G Þt9ÐëŽG9¡Úg;à3È>Þ_™ó9àwì@·Áàà‡è¦ƒª-m‹.(X ¡‰ üOR›S>Gàå¤:+@Ø€°;;K^OHmpñ ÕîGäC9<ts žÞHyx g/>órë·‚MšA#䆊‰Sâö?SàLÝӧܧoDz¸˜{[ÍJtÎëöb‚üᘉ0×£ÓìÊ+ø„9ðr|Jpˆ3ß¿7¸Ïä‡`SÈaõiìö‡›ê>ØmåøŸF§ÔøžU:CêN}ügÃS®XSGgÐÜxƒÐH­‡“ì|r¯³W»ëOÉàÁ,‚JR•é]:8žÜôy=šrrÛ¸ªÀH±øLìÏp)ÌðC÷CÇomuùžÞÝR âE~%¸"PPêCÈ©ç±"žÊðv AAàòJ.µðéëÈ£Á‚{:i.–r5…k&Äíèy%„cÀ1@“…ðwqré,Ëäì±6W«ÊNÑøˆNFyƒù õ}' x¤~Ž{4$‰âœ†¢-|™Âr{{"ÀÇà6ʼn¤Z÷9}á„òþü„(ŽJ¢á‡Ìö/ƒÄ0ið@8{<¶üÏ–jŠñ£ß¯¿DÑ÷ÓEÓ¸xÜÙ¸xûÇÞí ØûÇÞï÷€(ïã±£@hÑ£ïñ÷0àï¼| G`?xrú4ÞCtûÇá¢; >ðÉ÷€ûÀÞ4ˆCÈ ; ÜhÑî4c@hÚ°÷ØÑØ ´k@àGÞ:;€Àƒà@áøK8~ Ï`p­k@p€Ð Ðh4Àf|OÀ*z%Pù'à„ñzλ= b"bcQ4|er™Œ"€Ž…ð ·F/›¡ÈÜ•ÔÇŸ˜ï1YÿÂ&sÄyXc|Lâ¡LN'Á©ÿ Q0•”ÃÌOâáÔ ó,Eô̇: uOÜ—óúŽ ø(|c@…ú„sáž›°|p#®O!ý.zË“AÈž¢(¢šLÓM~çŸâf0’šo1½Æœ„©}USyRG±¤ñYÎXaNDføš(Ç/>0zÀŠBžVÆz_À)ýO0BŽ¿•Ñc“Š•ò|u9㬱Kä…ø‡– ™ÁŽ0Dn¸uØ6bŸöÆÄ#¿¬§$©4/ÎM8ÿ‡äòŸªÃá¹ðÓðõ—ôœÞ²á™@SÅfJ)â:èb.8wüG@1װǽ…Î.ã‹Ø?ø(ùŠ}sü9ÿ™äyàz9^…£¿pòt|ú×úpñéÄ>h8by\gðü]ÃA`£±Ê_ôf±cÍ€!¾ã……Äuå !uOÑ3Ï‘_ö$¶x’~:3‚˜¤óÅ g¸.¿`cØ·_hlfï1ÌÔfBRÁÆDyÅÐ¥Bž4|ÂêlqÅÜèìöã%Ç·Ðçƒ<)æ'Gÿ÷$Alaã:Ñø«oaÎ×p>t?ÿ‡:]äïú„AžW^"{•5šqœËO&h Í`_ˆ··@ºžð3H¢Ýƒ¡“°yç~¸)ïúÿ‹ØFxPpÍÿ9ú\~Žq œççØýÏÀ] {:Ô/¢:ü„yýüsŽuü ×aãœqÄ8ºù„p„=g¢9½>ˆÎw¹aB„¡@3?ÃŒºáךHfüƒœDÂ% Úʱ•sÕh€°‰°°TbÏ£­¦O\ËE‘õ²–<¤­Œà¦S)æTJBj0%![›¸_tFHÈG2b´B|àø1ú”R]/QÕºˆÚ%!ºÙzÁö·±YE‹ʘYÄ}} Ÿh‘í„×óWS‘«=zàüTtE<­*±+AÅ$cJJ¼öO¤·%o½LøŒmWJ´˜èšI)ÓîUý¬ÿÄ@ªŒ"YrS=÷RÚuv,.˜• +÷•a°±}Xøg‹(Oä` õÑm¦{`)曯_I­…Ø&âV26T÷“ºð†3"Û_‡¹Ü«Z"HˆÕ“U¡ÌfæGà’H¤ …kbW€*U^§ø·°öI‡^ÃÚv…$_Å|r‰ÒUè>© N£Ú€"‚®ö¨ÔÀ­G€,ß8í{ 9FÉ2›`ô®BËÀ¼ÖùÍ.èSÎý ¾/ëUº^Õ™¤öN¡BéV<ÖúžÔqž„Rø ¬ä…åºcØâ™‚QÔeM=i°™"cP#‘¾ë\Ÿ”Õ«vX£àÍò$„“ß:TºÞ”Ò˜ŠÍ¹‘ÆÊ¯á>Ï»×øGJ˜¬ò³øÿy&å~AÍåmÿñGIuÚXü>ûŸkGÈ­[/îÝ…}dû³ÿ¾ïzI&òýç5Rä“>ÏîQ¬DÓC,,h¯lÃ*0ö'À6´Òê/²´ˆ0½˜/©½ìjQ³gÕžQR‘î0Éëg>µ,c <šž~s™ÃÕ,REü±n“O»Ûþ¬ Að2äõq€pÉïà¥_EIâ±ö§´ƒÚ!ã0ÍxáâŠ_»ÌŽsEgÅšãÇž>î®+\ÝpŽŽ:Ú»S‹\E’UpÙ‰#q9‰Š©*Îp¼ŸCð¦[ñª=(ß“ÙN¡yLç{<´é€x=‹šgÐÎxtPù:¶ŸÎDª'ä6É5ê²¶‡GÍ[7‚mååìûHy{B$N…ü”e0 ]X8[Ž£âÜå=9‹f¿¶ßÞ~OU7¡—´z{a× "8wu…ãº4j÷9Lé&FœVÛhóÆÏ¡'6¥|«oÜå#À…¤³·Ü¢ v>OƒðüòþNÞ­~;YðtN9€'SB§©kÙÿ~Ru§y7È<žŽQt7ž'}†¸ìÆ¿žS—O¡Å連ÁîEé‡"åö3'Ýê|…ååå!5íæüDùšvz!ú>/££æáý<‘ž5€i9×ĉ €3Håž§d§NÄ‹íù'w)#A º{4ôrHú½ñ býNDùâ{+H|« ƒ|ODz:“³µœK!'i>§R7 ‰†G o·É_¡„jMékp ŠhptY<™,;z í yÎŽSß:Ï@ý”ä_§"§"§‘9<. Œ d%Kâ(R¥ m•×u[ºRÉ«7çgtól’˜Em«Ìï.ÝjÆâ€Àêq3+‚LìÝÔÌ 2nvEI@ˆ œç@€bQè$¨´$0¤,áB(¤á@Ûm„ I’!A‚R($B$‰$Q%"H"JxÖ¾æ>ñ ô¶û߀„é÷¾×àü2F?t|&FÓåó¿D¿ƒ†g \[u‰ü+E 8½ò_÷êP!Ø_ÌmàÛ„"ó¡ÊŽsñO;û#x^ ¹'ßÈÛ5×Ü€øêlŽ£Á·S=Ä‹¡F Ôï哟/ö_©c®nºòÄ"2>3ÿ‹‡íIAµ>d¹&gñ1;ÿqÎ;-ùì|ÁsŸý Üþf$ßüÿØ(Ù™˜Û øÛð0 òu¾:$èÞ|›ü¢ÔÎY¿³ŸìDDÅÞÇ>cÒáh]sÇÀŸ<Û}ÿ[ÿh£•´úl¹×à¶_߃Âö‹øò^<×Ù?9I$~ ¥‡d@­­ÉAàŸB$‹áù(_‹¢E×]rñp÷ù9ÔYæ3²Í¾ÔQ+í8eƒcøG3ÞÞˆóó°¼(Rxç1Óóx¤ÎÒÆýŸ´11t2žrþžÙNt!lGÇÇðBÛfwò…7|÷çùg•  vâ€ÏçÅו¼·æýÉ>þ€žÊßÐEó—ù¯Ð~ eùÿNoŸ³r°#‚òwçï ÎeåpèYF$tsZFÚȺð?¤ ç:ûuì_ZZz\“—êT)þQ—?Ûõ 'y:€QÅ´¶ÇéÎ.(6"c-Œ|q  ÿ‘ƒlo1ÎÅûàf`…ü¹Û¿™`#mÉò36˜‡òþÍøý"`äßåÏ1'‰÷œÇàv¤Ï’2ÈüîL¬DrþwæQ9#¢'õèøŸàÛ«}‡™÷,ǘRÂü×›0xB8.ºëÏiø¶S;ß=sÄb`ßãhê6ë®ŸÓøZ~‰ó–þbc­³‚ Pˆçûy'%¼órÊóžg±ÇÉDТNãù<Ïoøê'xñŽü7xf~Ù~|ëxÀ™–y}`¡H·Á޹æ|寸î} ]§$¿ß»êB)˜]}§ï¾ÆøëtÎ?7$öZD}£zç„bùüü£o W óõ«„–·ç—ñ™0‰ñyþOî!yiÌ϶#6ç¸[o̸y]ô Œó9ò3n~@9ùdegó”mÛm¶Ûm¶Ûií¶Ûm·ÿÝz££bøw°!pþ®ž¨î…”` û>taïñ‰œæ0XÆ"Ú8zô¾lGU«ÖJB"cÚ"Ë8ö Z¾öX{3?YPV¡"tû¢&Ê=¹ôÛ{:Ùà½"*šS·ö}©¨öë‹ór¾+^ÄÈ¿šùáj4ûåŒØã[•H©{çawVBÞ¦zO!D‚ûê'©×Ðü ÒÈèazXì s¬·u”ÝäwÿìN>¸§Ø%iU´oOYD‰y $¬—B¨i›#Ø£ÛÚˆgBåÉ9­s¬ª%D×7-mçòX°|¤üÛ+k×O‚Iä}¸ß‚>Ùr; lmo´”Ñî<ÜLO±Mˆö”CàÕ®ônwÚE’ƒwÝHŸeKøbÁl±Rié÷¥½%é^³ÒLbË ©ˆŠ[¡Ó%N¢>°™Þq)"‰F2±±˜J$¯þAú%MÊ?ò‘iDÑ*feO9µžWk‡¹›£ÒO[îWåt7ç²-Äy]Oýkû £ö£î˜ÃõVYʳV-Eš²Dy^bh´Àf²kBÑÁXÓêÙý•‘8üΦ&£ñÎÙ?ÿ‡õ}½5­ÿüRºÖ kùgt“ÝõŠ_Çá¡C0ûó“1hþšÔÖ»cy»N(ëÖÒ•I´¡íœAaÆ#Êll|ÎÈŽ¨ŠR öÃ21åyQMÓSR¯m–óÔ‘Ñ%8)À©ÀìcEë $’I$’I$µsµZaê ´ö’¿ÃÖW3÷RÏå…×ßã_FÖ’Öé÷:U¯º[“ùŽ¡K¿Ô3eŪìÜ92\ pÉïÕxãcðM³Âaέœ÷.2N$í1Ïx;á1WÇËËÇ–ør§Ryuéá­4éâå71I‰…IÊ: pôH˜›ŠLZV YÃðŸñ¿,ü _„úÀòW¡|‹êò|Aôü΃P3 wÉÁO”ð}^†€4 FÐ=3yS—ÛÙ" ¡åú¬òvüNùFˆìäö±uEá„›‘H¡¯Èø´OG‡Öž :”ùå=ó~+°]ò|ÍI<–d7xyq—ìb ìøyxA-Ñp•w‰^žú”ø~'Îbjü:¼¿C=ŸÀžNO– Âø@S¤=Ÿ!à¡ò &Ü1¢^^ç7æeòMKÓ3ƒt26øiäù ÷Á¤?³ƒƒŽAAù@On|°PûÁ¶å`§Øðn…€‰ÁìZ ­mTоŽsÙÆR9yBùb=<ÊBð<2BÖâDÇU'©òs‘­÷0â_+ÔŒÁ€k |GBvÌñ¾'ÀÕ9?U5*| OÁ"C2M=‚‰ñ4ö~ˆÏ³€{ggoÛpú.§'äú<ŸƒƒÅù¼0z9}`|bˆ:ù¢!«B$€tøúW·³ãht{<,Ìäáo'À»ÕUUW(ªªªu¥Ñ‹VªR«¶ÌmOggS`BVXƹLèÿÿÿÿLÿÿÿÿÿÿÿÿÿÿÿÿ° ”΋»lfºF2ÈjàfeÐà–ð«¹À ·€U° À)¸˜0ÀÊÀ` BÕJ¢E_ ð•f´…á ÑVÆì}øh>ñØûÇÞ×Þ>‘î>ñ£ïî>áî;xìhÀ¼~8Ãî4}ã°4p Ð4€ì{ ;€ì}Ÿ…XÐhÐP'ƒÙøÈ^$Wà™ÙÑ$/XV6Äú<#¿§”/ŠÅVS¤šNð§,Ñœ’LcæaÉRJ?_ç›Aúš‚8‚•›œóŠÄUEþW™qÏ×<~þz ΃¢Âþ*AúпE¾Fnqñæ˜ÂšÂ?zÿ"WàóÐ8ØE»ò—ër†9Ð0ErÔ>gïÄ>~ƒ±3É]á &ó>üœrEÿP…˜|ïí°å§•Ðxr}¹_;Μ¸°2ïã+>q‘™Æ9s‚OûYÿÉOÈ …¹²ËŸŸ/øy"|ÇÄ+LÐYÈ•ëfYæç…™ådH¿ø‚ܳž¦3,—Ï“?ˆëþ2™{ugÚ¬=m1JW·ISkz•‘"ÓØ‰HJ†úÁ:þ|\M„c¹õAƒØ"YÈ1ÒOW´Á‰›-FÙÇ$©Æ½ñϦ¢™ž£Í(•'¬ÒÔ˜{–Æç1lc©aê§Ö&I·Ùn"é_Ôeý©*<‰l<[LÈø3Ù¾(ŒAEaéöm¢áÂy£EBê\±y5• \°:XÏ}×ĘÑ΀—ÑR`F¶Ëà‘ø)‚YÉÑÆ÷ÝN–¢æcá´ÌL§á&¬"%GAG X¢¹vx$?›ËLɼ‘'Às¼BI!÷i*>͇õåybÝI¢>ìÿF9TyÑ$Ç€33ªÐÐÞXÌg Ôrèôû ÿ]zö=(}ÓË „nõ‰+’ìÄr`pÉïà•Ús/ ïËV jk‚¸FÓæF€dß&‚Dû›ù:‘'ËBN>?çâŸÉÿòø:çDÝ1ò{@©O«ILêÌÿfJ,AN¼ß&Û‘ìå¥)Q¤Dêy?'FÄ]/ŸÊ˜Z0ˆMø5G1Î"0©4žNŸ˜Ÿäøy{ääû8QÂÀÃ-c¯/Â×±9>ð|N¬"}s^`|™æžÏÁ€p`ìw7(¸í QëzÁëzçª<ªóÌø)Ò)íø äTäObé C³äàñÙàh$n‡óÀT)4t¬CƒÛßÁ§Å@Y‚Oƒö"Qr@èÙ%) }ÎV^OéOŠ1>êz+ðê@DìÇ"pv}òø>Fœƒô>âaèDøŸzä§¹æû<óÑØTì €½—‡˜À&‰¤Ç>X¶O±Mt0òcÙg'ê|ö†>|<žN Äò}ÊsfpãÛÃÌ´Tƒ€,x”©1ŒR‡°@x˜Í¬mÉu6‰XDh^Õ˜ Œ6ñ@3²[—jÚ€˜¡;°Éz 0îá¤l*‚‚•Keë<Úë˜À§i¨“ŒÜÀÈ(Þ7afížÒ…X¬AÆ€T6€EEÌ…(`I@ÜÀ6úö´Þ4{çÞ>ñø)€ûÅϼ}à>ðx¾n}ãïXúǘÐx¼}ã±ñ€Æ¡§Þ>ðŸx 4h xûÇ Ðxóãï÷¸q Gß4Þ>áî>ðxûÇÈ<Àhp£G»¶ò1ØìÞ>ñ÷€À€¾ƒ@}à°Ïq£Ühìc±î4v>ðØì€ OàÊÀ!õ¾GàüvÐ5­hÑØÖ€ ÎüÓc¯¼¶‡Úü 'n†«¬ÿ$›ÆèØÚ,ö±|×"`ØürlKûuäÌÎ-1<üOÎ(?ÆÚÒvÿ“ñÌL.¾²äm첦ˆÒŒ°ÎÙOó;|³ÿ0G™~ÿÐ Í~‰^Y'‘¾Èð¾ÐœQÙAìÏ3k>G>ÁÛʅЖFyï¶Ù}þs!âf'¯=fþƒ'ôû<'ü•>ÐP›?Ö–|Îyç°ÈëÄäbÚ“Ç` ¬>Üó`¿”e󲯿x1%ŠO6øÊ6ÜÊÜ”#ôèäõÍÙÛŸ£·™3'/÷?¾á2ü~D¯çs‚œ­ƒîN¦£ÿQùÄqn} 9×ëo1=LDà°â‰Ó//Z€¸ˆ9ÁœóÎ#ŸÙ˜ÞrðÇkø|¼Ï¬sà¿áùìdÙ|L–Ý’Þ?¿¸ä'Ïo'pBŸ|þuþ8p†І¡ÏLûÁ|~¸Ž9Î`F«©ë3ùkð"ð•›ú)ÿè'lØŸn«ö'ÌsYqùÍû øüïâË8¹ÿ'íôëÆÎ›dÁ1ŽÒ%@…-8Ò;g/ëÏ8`#¨–vF?—Û ùgdLÁEŠÇ…çŸÂÎ uÄISŒµ—˜Úì|eã© `Ëÿdƒð=á‰Oá|p·1ìFrOÏñÚx^8Œekû©eù¶ó÷²u‘?í1÷,Øå.>:޼ð³ÿ_îŽüÍwãó㜅 G L.…µ¹›Ÿ©ü.ÖaÇÇè üÏÀº3^yïç0BôøÚ¶”Â˯üA‘>¹yyXcË-hº‚fÛ>edVc®n-×R¹gÛ<ú•`xÇV~Bñˆ5–Y‚±qpŸŽ| ˜ç¼>>?ígr– H _ø9° €Yô)-ÖŸGÍùe¾ß‘uõBL”ù\YÜûŸyGËÙŸ9¿ˆÁÅ¥‘ÿR‚ø_í{ü´øž4áð(:×™Fàx:´ó|KøÈñûŪ4#.¿žu>Ðësyç.àêòp.|­iñ‚óùF’øÇû?ç¨Qòßf9ÿ…ÔÃóÐ1e–ù¶3ùÙ×™R¿’>zËÝ‹=Bÿ+xuþ>> {Ëÿhcã¶uç´êQÚ ó²æ>yzA?õ ~Æ]¤m;„(•0uðyDÂüG^8ÌJœÿø”4ø0Xס§Çs¨ÅŸ¯ïà lLDˆŒðM›ü·Û+&¼u˜¿íF5úfsÐÓ¶øç_üuþ]uó_ßïjÚtf'¯Ú~OÇàog‰þÌ…äÖáÛtujÿàڌŒöØ#’¿a Z?cô`?À GÇÇø/ø1¼m1Œ¡‚z0qyDàöÆ&~"ù'ǘÄÏ€éí¬J~Ñó¶ê|$—Áý–>fb ƒûò9¼wæ]ãØ€ë>=9Ø*ÜÚ}—Œþéï±UÙõ9äyù ôª±ëð¾ØôQŽž ƒô§ªtî”8ù 'íñÀä Ô¢“%ƒö#ÁGÑ$Ú¯x<³KM7ØPëæò);±ÌŒ„móäþÁ‚¾a}ô'ÿÍø‘jyŸoY§þ=‘eÔMƒf&Ø”z­8ÝFÃáeÔ€ñdU¨Øã<‰˜!ôµvÊ5Jš„`òò­ ¦?Ÿ[ôºUž-=*TĨՂ8"hÁ‚У0§4=fiLýu%KG4 KQ²4Ö/UVˆ‡›Bè„ÃÞÍÁ-Ó "sICçð¨] Ka)a;½Gå­ú¬c%õôkkÔ,N BR£QÚihÁFO&°µ::W"0¦vØÔZãÙQ¦#} FÖ/BìN–K¢UŸ‚“)rvG”¾µ¾)hœ”ZÖßyxV U‚=1ÒþèðV²Yÿ~Ž?ß–À€b ¤ß=öCo앞q•I{ñ·$º£ž½Ê„ƒÄ ‚…– …tëù³íœ*"lèõä/ÌÛsY]|I†2/§^óqä›9º­ÊF).³Òø_EL §â£ÔN••õ‘¨‚ n"ß±„Éèˆ)uF1Ñ»ìŸÕ(?N¾˜ò_Û0ÅéÊHõðe‡Ï…µº"4z"¦LÝ.„¹ ƒj„þųÄTÆ0ˆ³ÒGIçncõõ¶éˆI÷E°g€4|—ô]7zœ E.B9hé!C9C¨ê-‰&:-ͧ:Æyð&sí¸ æWGô¨ÐßâºäGÅ/¥ïÖÆßòðQ¨+' H3‘é1…ŒN&¢O1Ç€$LÕÜÖ/j öO¶“RÇþ]ö¥d¹” »íË5–±ìd›ºk".¥ße²ÅöËï)Â*é²éû¦ò&þlÆ|W[ ÔõbšÒò›r–ïX_Ûï»,[›ÖøÞM}—£™Õ½n_vUÆ£Ò_¦Ù/°¿z~m"çsõOggSaBVX4^ßwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿcÈ6ZÛ¶ ]oém‘»Jä"O8°øò§¥.u¤ˆçPMÒ\Úð,èó;¡eåN3QÚÎF©êc P²öiˆ´x¾¼¡´¤»ÛØÔ„ôÖFqÌÛÀ<úûxGƒË¾â»t¥bŽ6K+¯/]WJ¢’5dßÓÑÀùò¯€pÉïè†MôñòðÉ¥GQž}–rœëC­pxãW¬¥Ž˜®:L›ã!ÉãåÄ¥C̾qÍBÇ»Á9‹ àã$GB"n't'Ä©šDÔtãgsÃy›œgÆõy«ÏÆoÏî~‹Wž:çžyçžyçšNyçž§À‡“À=¡íö†|éìøÏƒÀáˆ"tIô;žo³ÙØSàBp6 "DA%òáÉ`{xÑ£àì-Ï“&Ž{hÆžÎ'Èù^og± |_wÉöz”úÆ&¥;Mè6Ylº,û>þG³² §}Íäà{ùaêaèO׃â{,æÎËåàëO ¸r|Ç)zæOjÃîPP|$öê˜ Æá¦‡=ÏÈÏ\ƒÃÐʤæ‚>£W $¹>àyOØû1Fd§oÈPoÌÃ<ø¾L#â!.ƒ¢øŸ–{5úžºŸ1žH}o‘ Š_7ÈöiŒiE%ݥωÌ;Ÿ ©Ò¹X:i4M> ôû|H×mÉXQÓNÏFvR<‡ÂwC²„ôC ŸS»ÐÞCyÐä7°½Ðå3˜Êßü}òý_äû©ð88)ó}„Þ*æ‡G°·€ƒÒPƒ_©ÙäÃÁOÁ“æ4,··Q" ¯€í«áÛÒæªŠ¿<¿¨à¥=˜tNN‡´às£B‚7À‹pÈ×¾~‡(N¨Ó4Î@µïÔDÎ õaî]ŒUPUغ÷¹Ê@ìÙä(aËÌ/‘ëg?2è}M<Àåèã< ý½½îÃpÜp9çZ†¸ÒîÁÓ—¹yÀºî§WQU jÚ•T+p¨„j"²ç'ض8Ëf»‡%mU]×%UÝUUµÕµ†Û±€éFý.Á*© ”°½œÍÒÛ78¬€¤Xnvl&p!b R*J¹¹42. Q²T©ScœÙƒ²G¦P( ]O7€ÌUëØ ’¤Rš0à!Á‹VéWpÊŠ†FÕUT•<;ê($*‚ªK*ªªÀUUU¥W ©„JDª¯ªˆ QUBQ'ERªˆ}÷Ûß<>ÆqÊzáD€ƒ®1ÿœTD—AJI×ç§x/*eÝ—S2¹Ç™Ú~ÆõçNzxÝK™“£ço]s[¥+¬ù •{ÞfRòÌÇêN›üwÿç@ûãç %#ÝÑ÷#ü¼cïi—°;ЇÞïŽÀ`¶»Ózï±×}»¼l §c@ƒÜŽÀh¾ñî=é÷€¼}à4­W`ß¼w÷}ãïx5¹÷‡Ñ÷ϼÞè|ì{ŽÀ}íÞ>ð ÷Õv4ûÆôO¼}ãïøoÝ÷¼{è8÷Ï¿±­ûÇàžØpFŒkðA÷;Í4Q÷€{}ç¯Þ }à¡×¾¯Þ4}ãî‡O›@ææ÷h žã±ƒ°£­Ð(—Þ4h4ÖqGa4}ùØ@£GÞ;KNiÉ|€ƒð ¿€ÉÈö癜ðî'¡u<tüÞï­ÛðxgQà»dD£GÞÞï½ÛXï½÷€ûÞã@kïvì¾ð¾ñîq ï½Àx;{±®ßx;vì¶à"ü³§‹„’¢ÔÌråÓðD~èú¨‘’|ÿ✲XK±Ï3óFM€ûßùþ6w›çÖé±äìži¿é;U‹Xqò¶/÷]o|ŽN¤Ò'lüs»ãT8m‡1˜7çžb¡·4æÕЅ𣹿ôŒçüY:(Siøwõ=”æS”øòóT¨»<¸& }‡C~÷üüHDÄïy߀þ4p<ŸwÆÎ߃¹‰p£©Íô«”“g.GužËV²Õ*T(R aibîcÃ,7CmìÄïÙ³¹ö˜Åò5k±ŒûJll¢J¬·qçŸ d`Úa–²?kn¹b.›WüÆ&?¿a’çìíßY}Û$àSo¹ìOŸ1³¿ùøÏu­ÆKOqžnpñ÷ªo–©ùÍç;ê—cß1%öa‹Œ–Oå(›ý†¼Ò9ðØóžèðÝÆÎg'?Y˜Ê‰ƒOãH ý’´ÃœìÒ\f$¤^0ñ5‘]<Ÿ¾q‚™âVÙØ‰ÃI¦M2#9ó™œ(üßÊAÇ8Ïp~ä‡2³ãŽæ|ò)…ùÇ]eµÆ²pˢ쯛±¾wÁ¡jÄX&'ÅfHÓÓ/¨·=loeù±’Y™Örá{±±ó6½Ûs•Ö[Þæ!°§µÎ`;ŠEãœÃ—10ÆT)äÄ‹‡qÅ'PäŸÀ5ÌÎ6g;Ô(s øT;ŒlC‰çxïß:Íþ‘pÅé×rƒ8šAé/þZ£ðÃg€(üñH>)ÓÒ;ƒk-Αc Üg ´Å®qŸ8³uÖo¿ï}3Hˆ—cË3`ßù#YŸÅ.fv|%ÈÓJdò<‡†ÌøÁèn3é ˆ¥N9 'Á< !çùûóóŽqž î,Rkûàúçü· ù`y‡¢v?û?ß0¢gOßÇy¾b'ïß°}à§›Þ唿²“s– ƒŸßüüÄügÒÃi?´¦•f'¸3cù1H¼Y G?ÿÓ¾ƒ;Y€¤\'ùa´ç3âûÈ"w Ä_-¹d®Øº,³Þ¿8‹¥ÇpbÝ}®{{39ÃyùôßãM0̳,î%ëb6aŽr÷Ÿü¨•šEãÓÓû3‰¤\Eù¦9§5Å#¾=6‘y ü¤^=çàsçŠ AOŸH¸o²õöuÉŽGÙë•ÂÅ*üQþÀ¢cĦ%nÆK Ÿ\ÉQ7͆¶.,­Ö¹vÏ9P5Á+C•°Év};·ß†Nò/²r7rl¹qÏã‘’:‡0y¤A´Í’%AªÉdÆç#˜1ÆÞ`œÃVkWpÙe¬KðåFùýPS£3Nq™·M™?üÿӟNÅí›xdg©œeGÓýÿéÝlc0(Ë3·Ì2Æ}#î7ÿÓO¤ÆsyÛû㿾qùÇ#óÿ䟲£Ó²áI‡ú טå,÷ؾTÁa…Œ¹"&$Rn)òR.²öɹ‡Óÿnbéˆßí¹¸|mòÌÁñïžlêÙÑ“iÿï:ˆ7ì›ê<ýû3ÜqÇäD9S'?¥BŸH‘y‚47Äõ§ÙÒÕŸÃâ(\R¦”sè}0s¨R~¡@(ö!1 X¼…ð¸†6°dý®&|DfýýüٰغIˈyúxþóaÖo .æø°ùŽ: 2G1œ4ßÎ~o–Þ]B¶nq™ÀN¸LSüÆ÷å—cßy"ˆfÄXµ¬°w9œ†&Êœ¹Æ¸ì‡åÄg&ýË2}ÇÞzOÒ§7¾x8Ææ^>^ç󷙆‚nç0 !lÝaµŸ,ß´ïô7óRM‹j›,Ë<éñ²ã.ÎTÙÙàØ×i¡?f1œÎ.û0æNþðqßN˜?yH¼’óÌA™NÄçs£w¤\Iw6Êc‡ßBò½Ò½EÒÙs…f&÷†î1†Šyžoðì÷õdë ó±¶¿|ðún&aIˆÃm13£œÇd‘É#ãÎŽàAô‚HåÆËÉPl CïBo8˜&¦ç³Äõ&ƒ\³ÏlŒGò°±Í7ï_8s…9ûâͶ9‡:uq0 0fqyXçäÄ{ûÍÏpð‰#GÌaÐØÞq5BðÅæà•3{>žxóý»æ47-Æ_ÍýN¸9s§÷yÞ‰ËÍîšÏOc&T¨É(:!çØÙ¥NÓ{ç¨PlÈ8ÞãgTýñ¤¸’%FG;Öú}#ïîËŒyç7>Šgë±s¨“Y‰ÐBû›ÝÁ=[²>„uí?;ÍYƵ›#ûÛa¹OÍ·ن\²ô½”–ÝkÊÑ/ÌÁ>¼²a¢ÍZ~éÍ>®éæÏ2üèØç„~Zlý;oB˜>á¿)úêWÛö„h¤Bûæ—¦a£©a°’#¨Q¿¾"Wó°žio'}C†_s«}IÐëì·ÔNü‡z<ŠV–§„Zº~ÁÎ@ 8IÉóæ5ÑùBɇì·ÿiù?“R5Êâþ³±²!ý‰cõÐDÔZÊŽI÷º.2¿A9Zjæfs¯ÔDŽ­O@ÁµÑÁÏ ½¶93kÈiìïÚ馫×ýʇ¾”Á|Õ‰è´Q3È-Xô0çk>çåñ˜Æ&IÑ©˜„`‘ Ú×ÖÂAºD„TÎQ•1c" E,¤Ø­hìZ¶[[ã' „ªh’T¢‰$D¼«²’Œ. òP-$¥e’&ÊêˆE|=^ôË)W¡$VH­t ¤”N•3•K¦ã‘>ë z$$ªÔ”(5I$‰ÔU•Þ™ƒ§½ôºb¬ó¨¨Ác)Ë«ø"ËÚBÙôºJAõ6ºù³!ú”ÌjaD%NV«OÁi ´I/IN$É…P ÷­„¬Kß` ¤P(”JP¨à§u´H‡› ¤T¥+— ˆŒŒMNúœ•ðˆœSú,‡¨zJDQ¸¢c QCÕʾôÓÄŠ€B„ %/@ñëc‘F2GÖRJ>©å[xÍ*‘ͨÔt+í?F­ÝeuZÊ®«Aµ£ lGTG|áEn‰x¿V¤®´¢A¯Xö‘š/$ÞïM‘[}RªcVBH<ˆB//x¾V/W,’Wc9¤õ£±Ó̪¹qáÝ\¾}'ÿîV°ƒÐ­$êÞ¤‰˜š é|òH!dU’‚¡$¼+ t’O/‰|Üõ@„.¿~éDÄØÉQ¶IB»½ŸŒÚb_êBJ(‚,ùW ’÷Ì t±Jâ@âµ'”bMYSÈ<–éäíÐKV'SÖ’Ã{?×oM=÷o¨R¡]þæRIÎp»ûð*/2Š(¶ ¡¨ÔÅI‰…^ØA˜²Þ¡ro‹âŸt#‰1y{ÍŒz«˜<Æ(BYi@GQÒy‘j¨‘'e’ò¡#^‘5t‰|G¬0¤òIW­'™¨x}±õѧÔéYgµŠ„¢$ˆ戴ENJЩc’/0—tQ¥Wn‡¬âÏè°|!ý–­Ð¬-~÷5œàÒ% …ÌNÒIŽóäÄw®ó‰Zˆ :•|ón‚_*4‰Œ “QÏÎЛ8Ѳ4¢®@DœO8Mœ·:ˆ tÝ>Òc(=ôiú‘vè+Ô<šQŒj=b:"‰ÔÍ¢ ê#)ŽFqi•£õ´ùö¤s~ઔÄ(¢ŠãíÂu1ò2%£0Ÿ¹È‚i:ÍOggSbBVXþ ßÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýæz€4'øX­¶·BÒ%‘#ë¿ÂF 悟”ÏYÒ„¹}äÌc¸…J½¢~‘i_Ú X¤Ñå’_l_0–4nêÌO&Ôz•Hµ$<’’z$¤i¬R%EêÈ Cù´‹|¦Òʬ“ìI6²º‰(ýÖXXŠ¿«1ah²=/Jê$’ ’JV²µ¬±"ت$úH"Q7Oâá°Ü•m7ö[wBWvijLOIüFí¹?ÉZJŸ•Õ6ÂáÀ§ŠøX7'ã°'úøùbV¤¬JÑ~j×Ö»q"©–4H_c¸·åg× ³ZP¸m…Š%à«$lR‡¤’I^_V æ.²-‡ä}Õõ#kYßpV­dŸV]_¯—YÑ{Ü´’»|òA@š%%K5y$˜’¿º"×JF’ÒH¨ÙQæv$¢Vvz<‹˜M›ù>bID¾ÆåĈF1²Ø#åZEÞ’²)<‚RE¬JTJ!~ßÑ$ A"QEhØÚÖ² •«"ÔX•¥« g÷és䲯]¦8½2 J<S#S©äW€KóÓ=l^†cMõl ÎQ¾dvO§€ym³)¹ùž=¸ž¸™ðQàeˆ{C=#À/zø”¬ºÙÉÄóÇÒBí9Øé#Ù_ÿ*zQ"ÏÓâ¬U<¢z‰¢Ó…Ó¥‚æd…;Ò"çûô`pÉïðùx×^ ßDVù á'‡:ÓÊ·Ë\xqs¸âZÊ㦜uB;áÁ":C:(é,TÜN*qSŠ»ÇDqI-J›‰ÅN*qR YÂg7–uzosz¼q×YÖöaÔ[ìø† :=´b {›Ÿ]ÞO œ¾v€xl€yÄo—™Ð)à±3ÁQI‹<yaGÛõ<:yÙð<†ºW›CÝ¿0áñ§gG‘³ÂÎ{m¾9õÚ½3èhœƒÈNœ%züëÙLçHk=ž[šèb½­KV´GiتS“à‡ ¨(éö;<Óù7£ä|OjYšŸlVxû=A¥Ò'‚Žôr0m3ƒ >iì‚CZ³ Î:žoÀè…|‡èìð-|+ÜUáNO0]Ÿs‡|½„ÒŸL¸hd§‡Ê•*8;žÍ¼Žr!9 äö“Ætˆ~Pòö|ö{>oÖ@Ñð°œéÉtóI×:Ólöþh ÅCÀ§ÀHp³æ2&›(pß‘î”ðzörð!;y>Cå¾çmž_gÈ­1ý3OG(tièö{>!“IÈóÔœèÁ·i!¡RÈm¼óÓ[äIOD€u<¦{ãYἬæ&ñ¦žO4<Ì0'ƒÁƒâ™ŸGÑÆ,éü°ý"4÷2îwp@àÔJQH‡„%*$á.í>Ýê,ÒŠ$6p¤%Wu¾×cMmèØ÷w;pÉJ€ma‘›³îîîîîÀØlØ­¶µ`ÝÝ€8wwwm0Ú`,€îîìUìËÑÌÑ0U€Á¢˜Â`M”멱˜ì-LrT5ØJàb80[ã†x@àNã»òNçwN]×(pH[Úõ0øܪîÃVðT¢ò¸µÿö|\~u—º‘YA)U©”è}Ü“”%Se#åˆ CR _šD—2<3 X}Ö)óYuýV/å‰\êEdÿJåÑþE‘­Ò”‰þBC£ý(#*Aþ•¨}àÖ¼i   ½SÐ}cë;£¶€ €Ð`óŽÀ}ãï³@·>±õ¼¾ñ}ú»«î=Æq÷€½¯¼(ú¾¡æ=ÃW°kGÞ>ð£Ü¼hÑ÷€ûÀ{€<š}cÜ`ûǸ÷§¨÷8ì¸ >ð¼}ãï£ï÷¼}àï4}ã±­}ãïx€€öX>ñ 4}ãÜvï 4`SF¾Þ;z4€ûš4ŠìÀ}àPð`v ò¼'à}_ƒ|øß2?GŸ‚+ðop€€4h÷ ûÁØï€>ðv4`Ðhà5Ø4 ’¾7àä×”ø$ñŒÀC‡Îü:dÇÌK1š@mŸóú⃖0A$ÂÞáƒï‰Ÿú× A‚åuç¯ÿœíG 1ýóx¶hœL31;(±t-"Ë îêaŠ^¥LOµ `ûBÎøöJ²rÇÚ9¾{#ó<Â?1bý{õuZ‡]pGèÁ×_<~ÒQÏ‚ú‘¤ ‹¡|†óñ"Q tƒm<…’2¼B1íâçÿ…ÿÛ{'ÎüöÙñÉŒ Cï‰>ô!só9ËÏû óþ:…Ñó ÿ%s‹íy“>M¡ÔßLï×Ëß&gósîe‘—Í|¬´Ÿ—c£!°¶öçe™ugùñ¡ó‡ä¢#\Tu–¦£7úžróØEéq¦ð÷i©¬ºŸè¦Q×뀶ŽÎÇÛxÞ᱌¡mm‘þÛúDFsåo14_ú±©NÓ©«K Y‰ÙZ3MuY‘í1pæY´°‚Ó¯|ù#“üË0Q9Æ‘À)~GÇÝ™‘°¸~þP.? ÏÉÍ߸7á¾Ùï¾Ç…á·ÚŽ‘DLOø0}¹—ÿé eãLjØòðÃ;êÑòñ©©ÙÚ5G¦v¡AŠ#Þû@ñx´Ï/fyåñÐG5“úrÊÓÆKÚ‹Fœ< ±APó§1Άxɾ8Ì Ïœý÷6.¶è\Ï3ç–îK9àìs¡Dì¤eáàÕôæŒOôu!ë|÷1ñð§õøsŸ©\Ú>L±«ds® óã­·E†\GŸŽwà³Þ57š=0EüAŸ&gØßh¤!‡.=üB#~1žÑ1ï›ìkñaý›@syGÄê2uiæ>ô]N­Þ÷Õ(:^5%ïUždYPˆ˜ç]{È <¯‘=ž1 þ[™Î¢ÏÅ6åøƒî±¾9'ˆ:¾Ñ¾ÐtóßÏà‡ú–va×Û®s«T“ËáxOÞø€ø9xï„6ýu1Ž€à|yýãßÐ(÷†)%$u}#¸I—(ìN7>´çèå”ÇOÓó‡c<Ù>3_Êëô9ž@¸‚:üGDOBÿ_eúþËmÔ.¿]MýDƒúÔ‡j Äy\/;øß1m¿öJ:Š\ƒ/äG‰‹} œ8ŸœÄùëÏûŠWBž¾9—ð NÏÁÿkóØ _¹f<zë´.d>,-ð.¾$&#Äi”ug°¾p" ¢þJ7>sÉ™ÜñßõébO7ž¸D£wÇVÆEä#íùÿÁ¿s•¡ïâu&Ÿd€–ó$/¹˜ ø0w•…(e¸ÉуçìûuÔ†?ÓÔlöÌ©ëð'uÚtc‹ßµ 1ïÇêÏ"ë,]Ì¿ãµ0`^þNÑþVo÷õ'A×bãÏ{ôø"P)ý·¼@ ýmúûGhuø¥bñr4 ëô#8ƒ¶:! áþ›mg'o¸¡ùÖþvØ^ø€Øç¿qoÁý­Ð!þ\À¥yÇ8!@Ž)jA8°ë†:" œ1@Œ ßä„~~ ¡nñ¾¨bVæè-? N=ö{r@ŒKYG8#ûýîø¡Ô´8‰9ÐÐ1ذ h#œ¿ßÛ‚„I Î?¿ˆÁÿSZašºžÀ#mÿþc› ÿyy” øñƒ~nl H4"7çíÊnÄN:ÙŒ¿Ÿò³¡Hx>ÆalsòE ÜB'à&ñqtâuùÏ+>ûßýo,2·ÔfmàŸZÄÌO\9gÈ‘†g<–òÁm¤Y?!ýœï¶ùsfÿ:á÷QIBs’DBó!ÇæKü†ÛêXßåÏ–{ECÆÙD1¼ò6ÝJÎÄnÆN„DOZÃ;mÊÅ<ƒ™g*bÈ{g¡qu¶ Œm´ÿ‚Eá 6|Q¹ú:æxOÿ'r>÷ÏÊ,è'3™ü×ò§,ùòó¾Þg†ÄDådnƨÊçQÏ<üð./ñØ8¼ÂƒÌLü z?ŸFὌQ†Õó2ãð"UˆÜˆIø(uÓ>Ø]pÇŸ|õÈÚ6ðíÎwcu=®‹ûM±þ÷"Xª„LÎOEQÕÛ1rŒ=¦CÜ¥btµvI²U58¨"4¥F ©MùAirÈdàºç!úõ:=†þì䱄Š>Å%kS'^©zÑIZÐN‘ÆJ¤I¥ë$¥ù¼¯¯<Å=TbU¦’‚u^Ú”§^o¿õ»tÀg­Ðû䞦J_Âèöô|gO!°$V%ZùÉprÉ&Aô’mIª>YI\=‚3œªäfºiÌæØ‡ÕýÕ¨J„‘ô¶ûúÊ•Š7÷õ˜A÷ zrÜ—ëEÂe!’óXÙE’“‚¶õVUi*Fˆ'«â/œÊ)•ѵ{>PXÜø'˜ÞÖÝðzœ— ÷§%ùÈœÁf¢ØD,ç#‚ÖzI& FQÖMXD]Ò¨£|%@rÈÙØGdFáeVÒs¢®Á¾Ë¨šX«´z—T×2–Ѝä§+_¸$ák@53•Ê7ó”ÇQåfDw®ÃÁkµÀ²äÉ‘:Ž¨ï»¥O  4Ô%Ó m<ÜaûQ«èÔNoð1DGIÔ.QC|­Dòh?½ð_Âr^8( ¬ê1T`BÉç+Rì€zTTòg¶(ËèôpDâS'E‰äØ‚‘¨Z·CÐBJ ÓñOøÄca6xPpwa!úˆÂǡ蔢y”gASIñ„ša" %Eu).‰’lc“¸£ ­(Ô*H&¾?z ÊA*A¤z’ŠQ,b ]«“I”‘4‘b&Ö²Vk¹ç3ð·5*ã¶»Ý`lÆ›Yð²Ñ@Óšíõ1Y©÷ýHs4”Z¿?Óýåb¾G‘|ûyWR%$H}Y ˆ¼¤æyG‘$ÃNPWdå\}ò¶6Iuƒÿ·Ü¾±´”ÁeâÒ*ÏOggSdBVX»‹2ÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÿG%fõ—ú¼ŸÙ+ü Æ ´Íº]å‡ï²ÆÏÛóx/éF­‚ Aå$®©"× HÓ÷¥p¥W‘Sœüub°¸t‘²°)g<Ŋ䚇ÿóÈó(ƒºç팲<4`aJJ£ÕsÒûºö–ø–yP¢[xH^Þ¾¨öz¯2qdjeâgo·'kZÜ„òž§’žïNJÒLø[AõítÚrr¯ýl}nÕýœØÏL{c’}Í-<]7î1 L|®ôn‡—ÓÞö"©ëH?ªÈ!¡HyçeÞ”Xý¸ÀpÉïêxF¸Á‡ "VyGp˜Ø15ÁÁo‡.;6qÕ²qÍdIÐA½7ÃUx 'ÔÑöõèòüÊÙ¢ o¥q“—ê{N.œ‰áñ>†ôp|]y¼ƒ£×$ h]½!ÙØéùqæòNr¾{&¢ŸWiìû¼Žtjç—~…”0ò*|^½ý„^APVš›µ;4^eÃà}ÉOG-o5 à©Ãoôè=ù=¶_*3©"”rÑõO™Ñìô!B,àž/®ð7öt&‡ÈöC³ØÀÖƒšÇ<ê09> E=ü_m-2s)ˆ‡OÔò-ÑôñؼVgn`‘Ó@‰†hUB‡ ypíí@p‚§î÷<Œúž!ñƒ‰ó>—Ùð nøöóJ/÷fæœ0…Ô ABŠ !'µÙÔè°’Q6eL²,ÐóÃwuYä6 ¶õ ¨1€»Ì5ãc`ÀµU`Nfqc„BŠØM‡`qŽR6L¢°°83®á˜¶ZvÓe› ã½ç±¶IŠ1½6€t.œx1=ààà ¢„ í˜x<òÝwwwnãœm,ÝÝÝ»œ8Ž™¼sŽîîîîîîîîîçww{ŽîîÀã¸=B„@&øø<óÏÀF1ÖÙóø×9I:ëúúH å$e9uÖu) —S?'çãøï&± „|ÿ¿‡2%$|W|`Œn%u§yTÊ^sœ¤êBšë™O/)8ó?áB™I<»¼÷®ò‡ü™Iôjï5ÖèõÌ©]üÀ}ãï>Ñ÷¼hÀv4cïà>ñïàwO¼}ãÜÞ>ñÜïļ}ö¾ñ÷‚» yóã± >ö½©÷¨`¼î ûÁ_xûÇÞ4{¼}ãï}>ñ£@z ûóBhûÀÞ>ñôq÷€_q÷€ûÆéï€Æ€ Þ{€úÀh  ;|í>­÷€ì}þÍŸxÑ€@ ~£ïxûFýâ;.€ Þ;‡à,éø?÷ϧnŸ€Ë_[ð<Œ €À}íh4vÑ£@Ðc@¥ì€>ðÞ4}àv$üûòN_4÷˜÷fMâæpü'/ÁÁóæxÍž ³Û>e¾Ô@Ûj&üÌûu–RgÜêf;0–þ§¼xž!§\ÈëˆÅ ÒÆ6ßh,æmïÀÁí10Œ´ÛÌêOg©!´ô†ñÀ,Ê,±zÖr§‘æÙœäb &v£Axså>'ž è9 €‹æQYY×\:#|uç#e ùÅk+Ûüɾß'Ú6&ÀÞ<Á,ÌäNjE¿æ 1ç~`‚6ð0ÉgûœmÑþ&q¶üÝ”£¼Fò¶˜åA‰ÁüÌÿÌ£ð—Äž‰<ò9ö…v%Ôó…ÿëK%œFs>ã¯ã;GäÁxÙNÔ..Dˆü±Bñ;Ï¿ã­ö‰Ù˜áÉ¿Ÿyò€_Ø_Èį•…çáxŸÂÝÃüNÑ‚øæ\ò¡|óë¢-q¯Gn‘f„õ<œÙ ŽÉ‘!?À‰ÿˆÎB2?À§Áó%yéùæ Ë,Oæ9ÐæΣz=AvÏ-§Îè ŒˆøàMh_úöÀ7Ûå!>ßå*Äo±ùɆ»x3ä´dƒ£õÂgh#XBF<® ÌÈêgâ>èFÙòO'ê|à˜”uΤ:õÇþYڎǃiñ¹ú6_þ¼¡ÌDï9íÆöÏ_÷NÅþl_ Dú\gæ"IÇ_1N]°Ü‡åœà󈃩ø‰óýs1J>Ùo‚YÌ#y ñ’ ‹µ ýÏj•j²Ûç°/*ó¿æÇåù/Ï—%—"ðõ9O•Ÿò³ÙE†ô°êWPlÎÌnÎ|GV½Ÿ;õ–Yû¶~Ã0Êbc$ùFv¡Jøóÿž Í·œçb6/»ÆS1¿ööÁåø_æ'ø?¬ÿ“ãóàÝNs9ü²ë}•¤ÁgV®{ËÉü'åü @(¿»h­Ütg’ŸY"ˆk¨ü£ø»3ºÛdOkZbÑ™-ñfÔEË ÿ/,dˆ\Õj܇‚%ž˜~IÃõiÑžQ1(üËqm=ýOÅ¡÷bø%~åOçûF󬂿#oò‚úlö‡BdLÿV)ÄÛd[f ¬¶Îs‘ÅäB‡˜›óõ ¹Í£3í7DØü<¨»o³üE–«9çÎþaúþ‰a -ÿ²ûlQйgæ{îÏ^Cˆ?ÿ;¶¡˜ÁžñA_£ã›ÛðÇ…(^¿†?OÛMôÇß{ ñ>T^ I3dE Wäf$³ìy¶ø,–ò3ímÌÿùø´_¡|v‡R…ÆÝþs(äÄø ò¶mçq¯[L1›ì4ÃÄAF]›Äí›ÎÓÝâgSy?ôh±B9e|w[=ù5/ ^cÞ^| ù·Ø4èâí¿ø€Êü>sm…”ìÆô"a<ß¶ø ìbfƒÌ=YãxçLjO½ïjþ  ó&´#cÂ:ø7ÿ’.„Jøó×ú‘Äà^-Ä|㣿n·±FâÌYžzâû­–É×ì…¾ø¤ݨo¶ûI²˜ƒf53Õ£÷O{Íô vci¢jËí¨ËB6~}öùÁ@0Ì´h²Ì¼ùZ¯>7 ¶ÛÊóyÈ\ËçøSšïCj&Ït{ï;ñoÀ´Qgøt!¡Cs càý <û £þcŸ–¯ÅúñÉóÐDÇ7ÛÁ;Ûþ¼Á·‹9xMâ&;IoÛ|§9ÿñÈËo+óy_Û–Snëã‘(V? q@þVü½¥ñ3 ŒniX2!g'æ{<ï1'_jÖÜ­<õê’þÀ#ùûG^cÏbßoåÿ´ìnsÚ~!D¨Ý¤IëÇ¿ü~ ºèÁ8‰Q·S>-Œ}·Ÿñ‘;„Oð” ÍoùðÄq{88Ï/œ–#+÷‚'08¹åOñ¦mm1‘+gÛößoå~ŒdèDžÑ’™@?!|°(À<øÛeðZ:7Ùý?1ygi맪dðìA?èªA}¦©˜VŽÔ‰À™ ‘}9nk>äe9*þå<¾ð»:&¢bË+dªsLY€tóý±|ÈŽYLÇkÈJ“æ`¡V|iKĤz¬OCÕÊRJœŸ}©°@Ñf'¬ªŒ“ûu]’Æ}(×­!üÔM²…=¥vÉœâ=~:8W}l°C YDTò²™+¶3TƒÎ’ •ê3Š:ŒÖMBz¤çpòD8›—cS20+Kø*fʬ·œÊ¶R8X\_—ˆ(ã9É¥ÖVM`Æ r WpˆµÂUn.UÈ9!v;M*„6É(Et¨T¢pD”©oærOígò?Rèâ݃PMØZÿá/Æ^vVÍÿä°=BB‘•Û^¡ ˆ8"ßúô&¨ûùA”n/Â:šOk¶E(P¦½© ƒÊ|cè'‘ŒÞ´“Øý?ú2,NˆŒ˯U&­_ ê4dzÆ¢)Z³P”Ò=+RSihó)hO¤QÂ+Õ7ٸ̥iŸZKiÂia¨8¨“’©Ôj-É¡íQWø*¶žÖCTé‚"5õ™pL "¦Òˆ“)TRÂ=h—‰ÁôBå‹Ü”ºÒ‚V¡(Â=cBÔ V‘Z!úùú+¶Ò÷%âêÒ„J€‰8@$žmA!ñå"z½jMBWë©Ê.[’œ•lø0eø$„>p$ô=çÊšIeQ‹úc%æç«\…ʺM z¥¤õIO¿’^ˆ‹CíV<ª}Ž’õµ?–%9ïîÊݯhºS¯aw¢j`GdŽjùòÈÅa9ÇIÈõJ˜1 r0¦yezuLý‰êе×íEþ€p1”ÊDøx¸²F OóS1Tu1è˜uí¥µc9!9©ÒòpŒdc½ñ’SP&ŠŠZúm—1qY•~Q¹d’fN~‡ü¹+[±è¯å¤¬l³1?¢m¹›[¹v$ÞÇ¿#Õí£”øž•tÙ\‹ôׇÙYŒVÕ¯¹EðÝ[õ÷}‘xz«–-¹ÜŸgËP¿¾ÖGIé“3W¬‚±²Õ«ÌjäÿB:cì°°'D„®jË;&²ì\ò“Q ,^mKO†± &–¬ˆ%²éÉdB°I%dIè$°&•°µ_ZÇ“4ZQ)‰3Hé1³?¤rŒ§æÑ0”xVrq<Ó<THˆìõ^©½ì`ZmO''ÀDW™æO7×lâc¥%à=±y'ÀûsñxO€CL³Àªˆšû¬©AxkaË]Oõ¾‡«H#Èy¸÷‚±}¨”Rù§òŠÀ¼•‹ÑÆÁô–¿ð51Û…pÉïì^'GŸz¬ïÅ:á©Âx‡u‘Áá¾;6¹ô:áS¥1N¬É9˜áâR<ý]gDâ§c ’po„Ôâ§1Ôâ®Õ©¤IˆÞçNçS›Ìæõ¼ÆñÇÎ3™_Ãð^yçžyç˜^yçžyçžt:ãž:£ðy¾Ï£Ù×’#¢/`y*4‰$RòzkŒ>Jy:§ÙéXX°8–‰Vèièüš¯]šû|NN·‹NS‚§Àäðd“ßD|»ðÃNÐÔÐ}?ƒ”<ù>G®|¦¶XpÞ„àÃÐ2û8ôiÉò³ìû7è³buõ}ž$h}NèôQøvOggSÿÿÿÿÿÿÿÿBVXZÜ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúí¯o,ò^mbIóL½*s˜"KÈ©ÛË£OBYïfð'³Ð®ú(Œ«ˆNx¦'ã(üìÌ>±<ÄoR wàx;8l÷¼Ÿäü·nó»ÉÉÆª¹¹Ê|µ'“ƒèöcy¤*Ëaî¼ß‹ÛÉÆúsàx> k ËD¶—8joÔù }žŽ_‘Æ [BÃÙÁèúàöp3ƒƒÉÙä·°>§,¿B&ƒÁG{dR ƒNÏŒùŸæóÏ:óÍó¡Ì‡x är7¢ äO‰òâRúÛëUâ2ÏÑ>p 8< ù*õ̓٥ö5èߣ©ðÉȧf„`V³šEðöNggjpp÷“ÉbŸ#¬O™’ÊiL=¥ŠÏG'³ÙÃ@ÇÈ@Í¢™ó=‘òp!4|ø¡y}óìZ óGÏ4í>eg‡4PãC8Lê`„û‘¥Â';ñÄ´³Ð…âvA>àù=©æ|iäø È•~ïý]­­VÖ­[[ÚÝ5š**¶ÕnÚU[Z½ª«mª½Uw*®ªT‹n’mÜ<ê«k^Ù•U­UUS£²ª­­m‹º;º¨ëu[Z…UTé}Kªª¶…¹Žëºê§uÞݪ©j§ÝÕµUQTÙRÒ«»WUw]UUÔª¥PQ:ª¥Vª ©R•H'(êÖî¥ÖµBU*¢ª”ïtµµ¶ÛT’¨‹ºÔêÝU‹®ê@AwuÕµ·]u@JJ Õ]D…(v®ýû’$®¨Ž€"DRb@! ;µz¶µª«Û8‡øþ`}õ÷ÿ…ö?ñüóó§SöOþÿW½9rRRé÷k¤JRG©I×ÞŸ÷(¥3)ÒRû©Fµ/;ÿëãu%Lþ·IïNAÝ2¥Ý& æJÒO5×| ë]uJ¾/©å%7xq `}à>ð°xÝïÑ÷Ì£°‚ çÞ n»”n{èÓ@އ`wÚ´iõ¼Þ7­xì)÷ç úÆõß[C4oÞ>ðívëXÐp€}ã@{çÞ}鯆£ïx¹¥|ßxûöýàh£Gaó€xûçcï÷ê]Ýø!  P½÷¾ñØÐ½ß{ïk§ÞÐh½¯½÷€ªPhûßxûÁ÷è&´÷½Ú÷v£Z4@;k {»jW¸T€hí­{½À}à®À¢€Ðš |Í~oÀGÆù'Üõ¾ÏïÞl™ÒÜœÈüÕñ>×ügà:ð|/„rO `¯½î>ö»hûÚ÷ÞûÇÞûÇÞûß ú§à$› ü _[×=Ñ‚NïàfÉËð ~œášøgõ67¸ÙÎ ó‰ó3ÿ¥;1ðRÈq‘Ÿ¤}ÿ¼‰ü‚9#ãi’g&¹üÞoùä²q˜sö'¸–¤¹ãèOBì.;ŸÅ×Éf¶Îc„)sAŽË­}s¿ïqŒZn”ÎäyáÌO AGÜA=¾n4–Æÿ¹ûõCÇŸ³‹,ÆÆ‡ûv‚ïî~i¡çùˆÒ^ ñöcŸMŒé?cyôT?®n/êwã¹làôø5Žg~ÉÎáÏŸÍt¶[óÀ#{êŸÏœ®—m¼Ø³ÈS‰S'—8ØŸÔã;>zN¾ëþü1{ïçcqŒ-6%ÍÙljÜþhãaýÞÿª`7ý'¹óΙ–»Ã|ýû1ó²?ï6²oéöïòÌ÷ážÍ‰›é“Œ±kWTá|öLæb5•©+æYÜžGùn#&øð r¢pA¦÷ó$ÓθpàþÂíÆÜ\óç6lsõ©‹2ÕœÍì¬c–K˜øSHó÷c1;߬×8$Sþ\§ý(Ÿ¦àûÌí32ôÔn pD„îiܧDNjÙ}ß|ÌLm2TíNrÇ;œü˜|‡»+g1˜Pk…æÚŠaæqòßàØ¥M™†( /vð˜1N’<Ý[Uo8‹b÷¢/pF÷ÌX•®nTSßW3óìŒ0vZ!lâ왹ff"1̶œ ÇÌ ŸÀަ¡C˜òr¡ÆáDwéwî'iŽxžL´‹„ÿh~Õ´öó5K¹†åµ œ¹·fÆ,@½«9eˆ¶Ý1‘M(ÙÄÅ»™'ßäç_[‰•z™©Û¨§ÍóƒË˜Æ&™øÌÝδ9û ‡3£wöOÃVÍ"ñõ"ò3i´ÈžSéŽ:¡ˆ9Ã:mŠEä]ÏdÁ¤Ö7l|ëˆûé û© ¾ÅuöÖ¥¯Z¢Ä¿æ,¯±¿ìÉ¿• Ô¯0ß±®:‡*ÇÿRLÉ{qŸåÆúfþáÈç¨4Þå÷û¤ÿ\¹>ÅÔÏŸyøqûÿüî#.Cö’9I¼ÿ=ÏRåñÜdñçÉUÛ¿½¾5ºtՅЋ֒ë¬^ák#/µ•ï¹fJ÷6ü­>ÿÎåG{ –Übçm\Ã0´ÞÜß‹½µêE糟pg8¨ñpÒÿˆ÷>Á1þCI¤RÂÃøp¢i/šEä.óp)?9¦šh`žúwпÎõ1Ü‘ŸÈòF@øòàs{€ÓS L6®e? ,Ã+¯†TYºöÄç—©YmÌß𶠲˛’Åë{åuÙs’ø¾×f*±06NÌ-v3}ñË£ ‡ñŒ0¿2FÍûy¹YæñÇûô4yÔ)ûôAÐàÁæHî3È`Ü-¹$¾n¯‰g’¹Žm7F,˰Z…¬ [Æs‹SìØ¿#sŠŸRËÆä]y9Ϻ£~!¿Æ>g™º[±Çë5˜…£Mù[$î3òïÃó°Ì¸0(Ü ¼û†Ö§5jûšZª[+¶c.ƒ+kñýˆù™°Æc¹2¦ðX¾ñrÂÖs1s©fÆrns‡ÎLÌ - ÜÎpÌF2@ü3ã&ÿÎ÷6<:iä¤uîœÜûŸú“eø>Ÿ·[ð ïïT2œ¨™¨Ç~1f}×¾o_ÜßœázwõXÙ_õïÅóŒËsû,GîZOe×Ns}ˆeÐá£,w:ãoÖýùó*7ï¦æ^>L†Ç×IÅ;¾O¾4>†u}®Z³‰cžÎ4•í(as™ºfmጺk'cðÅ”(˹lXܶ31w½DxY‘¬¿pÌ3ì’DÈN1âíã>wÙ4þwÌFÆãý7=ñÜoAþý®¯ÜLL™Xf2Ìæ[âígÓþ~5ã%½™“ñŒ}Ÿ†R¨¹K†, û6…ónÇ §|äþeá¸ûÍ<¾uF®&ÌÖMjqëWÊ¡M·gŸÍg¼›öf1öF¸P¤Û®/.áÎAD4ýÎ`ù6ïãcL¨?ˆ =ßøoÿY1.MüÞAñ²¸2øþŸ i'âW˜B ýÃþ83;~Æ÷ćüü—ŸêDlý4(L_¼ HÞT)c¡x˜ Ýõe?¶ä.ûîljËù<èO¥À$j3¾ßª,/ÏöÙùöˆÈ‘n4ÿó¡RÀ"Y}n\«Ç}÷:ûýB‰˜ÉøOÊ}ÙY=‚Þþ½ù‰. ÷ˆåžO+ñBßh<™r6üÁп…áuº?{“$ãß E$Kƒ2|1¿%3×ë¶Ûþ¿‘NË}ðcn…Ó+sÌgÁô ýŸßnQõ†ËÏæœïáöÏ=ôÃ#0Ê&‘~Žúl¿Áº£+¡m\ŒºçÄñéXYùÄÃ;±ÆQ¾üä-ÔÇöŽWWÙò§zf/˜5O•7ûè¹,C+¯þõ}­\$¡jàX›bQ„‘ÁV6µ …Ðæ'×êÄQ……Õ”+ªå$á"&^Rײ¾§àG¨ö5aE¢¦—¦kIïöÊžgëòô‚š6S5()¸Í¡.´¥ae$é(Â"T˜¤U’V)U¬l$—Ž ©[O¥j€y—=œÖõ‰!÷I)-<¢EŽ­(P¶nADZ&=•‘ö('çëë;@È]&ˆµñýŠsÅõ×ÚfÌJJúR"ØŒ(˜¶Ï½öõ‰™ˆõ>ÈI[¶Æ/œ…æÿõƒÂþ“oD%J16?XA‰(ÊÞ%"‰ ÀBBD¨1±M\³Ïö·­°Z¾¸ûYâéc1ö™þ׳‡ÕÔX!| dÄaÁ÷>é7ÊÖ›`E©WùØA+J0Jéµù”NE(Œ¯býeLûB.ZsD|„‚¶6XY1~¦ÈçcV˜Ž‹ïjs¹ì! µ2­%ýZ¡ID%ÌB´—É‹%1|¾^ªÔp)Ax!"dØ+"“Èœø¶?,FÓÃìú[äæ|üä½9/ÎhADJà$¤‹Èy„ªÆ(—‹£Ö$pÂJé©BeïšœU‰~Ÿj%QzRñ:~ûº¬ñwô÷©~¯…ÝÖFŒ?õcHˆÅ\ºä¹ÙÉyO…ßjFTõÙ]¥« ¦jãèÜ«"t¨êÖDÔ~òdŽû\7"ˆZ³íVQ1Þä¼ú«Éʱ%/O!êÞ %sÕë5‡­ÒtÙ@¿ºe!h ȤL`¨”t’!ï'¢_R2ó‹âq18GU„c:±øO´RÓÊZrÂrT{˜Ø)%ô—¼d"W¢Aòù…ODÕ} ÚŽ’bB ؃$¨…¨ŽÔÌT ÄÌjNgÞwîJŽJ±êHPM¡̼ H/ ¤—”¡ ð_i*4’@’Hˆ¢LAH¤Bè$@Q0$ˆ 2‹àûäç/)^dB°˜|™ ($’¢.$‰%Ì5 @Z@¢ðU’Tó£¢t³2,ªà1¾£®ZIÈ«¤™|’B€²JSÉ(<§ÉD,TEº" ™'J ÝÕÈÒä£Ù솂ORBéNGvùåRJÑæH„ ˜}ÐB>°¢ô‚ À’T(Ò0¢TT.Å„tZí_¹p" ¢½!"^bsZP Bè{äΖûÊ=QKK_Ãïž ža%t¢Ž‰‚”I€§šxY(ˆ’Luz“ÊDv¾j*q–c<õó"‘3Ê’ù±1& ™|û\OP¨Óîýe%¼o¼$?ÁÈI¨BAš6}Ô“–Ö6,…‹~ñ3E‘艈ÄÊý cUÜ­ÊGlÓ މÉ&¢Àà°G" Áh…‰üõž„J'R”d„ úc²[‹Ò˜!Õ $Ë,×A€$DÕŸ‹íq'š6²}ØJÃúBÖ:H‘àV«Y#‚( ‚Hšà˜oU°!¸’’$'¢“Å•%ÉûÕü',>ùY¾É1jEú2,U~ZôQ¸Vˆ²ï~7-dRz²D"¨¥!æ’ì,b?~™LVkJf˜s ¼¥rÿOggSeBVX(þÝÿÿ=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿW0WXJÎ̓¦%b°†¤­‚F’è²%é-VEh„¬ÂÉ Þú³ìøÜ6¹dûX*yI÷ÙhÝÆúÆŽ%”XÒF¿@”™ |ÊlêÝ{²¾«…•ÔŽ‘¾¸RÍ[í<Ò@”Ákf–wn>à{è¤ "È«—×è>ž×…ožn9²!*$´ðJGI=[ÌeÅš·÷lË=êÊÆ’µ‹Õ!êŸk",¬I$Õ´BH‚’y4Dzòz ¨”H ¥k=%dEÄ IЂG©$>²6²¢ôIH°³ÊVä^¬¹y&“lšÖ~I$ªJÈJ%t$I ¡"×Oüéiè_"¬ OX’zVXI¤BT[H*IBBÈÒ] h„´‰$ R! $j%OôŠkOÒº>‚M“Y‚·[ÑJ›”WÊ#°+¨÷£ÓiXZÄš²ŽN<_·­ÃG•ŽABg¬Ï™œwµœó åZØÏÊïS=óÈN¢<Š×¬û7ÀÄJP<¢¼=Y*96ô1-É™6uŒøI[«Ô„Vh7ÀG(Î}d½ŒúûO€†JÙʉL¨‘-ÁB\§·%1ÈíØçz‡¢lŸ¦]¥=N]È´zݵÝ_Ù6×Êî“'؈‰ÑV1—´-‰°WñʽÎÛëëä»Ò/%ñL/µÛ Íúºýe8ZÖs½tZés¹Ñ ﵕְ>‰Dœ®$®iÍdh¤þC¡©ºïÝÑÄ.@÷‚—Nöíàì9o†8áù@ÈpÉïñQÇrtzp[Ö¹éÇGŸ'Œœ$W;Ì„¸x*T÷ãÜñ{r>$ºyH”®nòD‰ÖuN²<©S57…´©Ñ8©¸³†/7Ýð:s:𓇣!>)ø?çx랸çžyçžyçžyçžyò7âcz¡Ú_6ù>'²_"rPHØð€é§‚’ôt_Z|RSµ*,aÅ@qá÷y"”!zM>†Ÿ‡Øx*”¯³Ñè¨ q åN@ði0‚ =2šòà>ÐOÁDן‰åOEˆžp<퇰ðå ¼š3£ò„8)ÓUµíì¤ù‹Ëõg jè§©ÃY<=žè¡ôrÐèúÐÒõ80¯ EäŒðçSäuüg•~¯7 žÏ‹­ä ÃO^ÓÒ^ÂЈä mìíÀ#P×…iÁ‚éôq '"pxzÆDÃÛŒ˜ž•]iPÝÎHcþpûP™Å’^v3e™=Pƒ‹±-Ô¿Ë{ ÒŸw0uD7 1ÇÀBâò…ÓàüAÄxQ4Q4›9Óä8¾P¼Û·«ÃõžG)e{àù°Ñ@638¤(df¥<©ñ4 8—‡ð«À¡ƒ}ÈžEìÃ'+Qkð/gGGÁ×ÛàÖ¿s‡ÀN)ßG§‡æ*RÊ"锜ß;ùs(Ÿpuú˜V¸÷¼Á¸äòy ¤ï?K: Ÿaü<óàö}O`Ô5¯-}¼µâGÁÇ}&$ñ´>c¨|›:æ'GÞXx“@ùŠt¡ÓÞ‘0Nb!9 „ ÁAO Ágg À…:ç<Ì1 닇“&†„<ØôS³ê8ôpùR©ÈŸ ¨0]RŠœŠœ‰ :#èøš{Ñóš)S«ŽfŸšvy;ÄðqPúŒš1<âHœ”ðÈ|Ô90a(rÆÊD" `y9]ã¤æ€{Ï<=÷¾í‚3%4DO¡äð'"÷ý€àà{•eÜà‚'8ÝÇp*»œäîwqw#j•UNã§AUUdQED­•í²òØë·måQ*Lª$ªXU·(³m•¸«ks[ „*§]ÝgI²Ûª»Sê¥SÙT¥J¨ªª–øY(KsWVΨª¤2’ª*•TUKj;•fªaª§²D¢*UUX¶Û…ºÛe*Ulˆ^æûšõ3Ç6Ý›o¶Â-«¹ÌBêê”nÌySXûêÛ*"X©aDQ$ª¨* ¡¨*ŠR¤NöÛ{-IH@ XUPªªT¶¶ÛJ¥Jª²ËޫЍ"„v¯‚P*¬‚D…Ty%@©)J¥UU"P)*PxhÀ?‡øà3()¾k  T¼”—wÐ’ŠA!Ï®QÆžº\¢y£¹î )™wGªOŸÛ¯•s©“Jšq¡‰\ó(Öz©”&\ƒ™t¥u¡üÊ’Q—·ŒH¤ž‘$"SßZH"z‡7Vâ K¤JEÃ¥üißN'¬J—]KèõG½Vî€Kª@$L´W]Ôž¬_H:®¤¤n>ñ÷€@xûÀ3ïÐ;4€PçÞ>q >ñ÷‡`Ðß»ëbýžíÜ ûǰ÷Ð;ëMh ÷†÷€ÚAtûÆ€5÷ŽÀ}ãBçT@ïì(Üv>ð÷»Ö€  j´ cGÞì{A @«ªj´4€€ A£°Ôkå MP`h@Ñ 4€½€¥ePP ; Gc°((PÐ@xì€ì€ h°@à4ªÑ  @¡ p;­»@A Ðh;hB ÒŒ €4vР;; ‚´øh( !€¯µ'+qVíÒQ“¹Ä$óIIêêfp8¤#É®b|S™ê‚Í™9|³`¸`Üà`×ÀËå#åV<•IàÇ­¥ðx>÷¢<ʶ´vÆ8IKgšÍ‰ `íî=ÀxûÇ»G¸ûßxSGëyôþ™îúü?ÿTì–pØßƒ”*s,wü'àžôkÅðI<¡óÈœùì—NÅ •&$ùfòHŸ!ñô69ê3ÿy}È{žãáâïüòz#ïžñÙ7éßâÇ!—…HÏ=B7Zò<êÈãóù‡>ŸÉ¾G$N}ðÊYã3ÃÅT/…0oqƒd“òç9oùR£Ÿq}Màw ÆÿÛ§œðƒ‡üûþýû:}ÿ`wï„üý€|l<Ó¸öA—ûìû»•¦~Ž'Ìë‰ßƒÏr.±SÏóˆÃ|€Ë•>ðóÈýɽýÏ—886¡MMóüàÒ’m1»þ¸ œgÎl9Ž£o#MúoÞÈœ©páÆbëšÆŽci‡‰6þ<ì·;:sGZüÁ;çÆÐûÕ ¶3b¾ë k›7¶VQc ²Wq{lE…!y†[¹ÎiŽgHhµþÄ­¤j‡Î3%«Ò4û`ÊÍ›¦þµÃûÊ‘²?ÝŸ9…¬a‹Ç2L[ô‹Ækßs%l,½…C¶ÃXâ!œ¦ÉÉʈ•øÎÌýøŸäPB‰3¤m0Äÿæ•dq•ƒ.0çý3s†Ì ¤\*Ñ•»8îô1ŠwŠu2<ß9‚.–ùϰ³9'>Ž6XÚ‰d_bë×øšf±²Ñôé1“ÿgŽ2ÚTã}ˆ¾ß?=O^Äþ‡.4¡­Å‘°ÆÉ3?7z}ÔæÚi¤æ g¹ÍÞ‘pê•8–fqa¸ÃX4mÓwA@ ‡™Qä) Ö÷i²ÜOµÿq'†Å•9þÄCƒëSöw¼Ãå>îz˜$ýGÓ`7ÿ÷ñCÜ 2à€SÊUnÍc_ˆÌHãI¿ûJî¢b"£;Þ8ÞÛ³$]ÇZ3Lq*·øÎL3–\c{poqNgh`Å%åFóH9óÈ¿ý÷âè#¸ 9Þf³†úYI8ŠE㉞Ïÿ1Ÿ˜pD; –Á>·OæødÝM›w\ØZB,_Œ´#H‹ÙšÈº§¹ŒæòmÍ›%¨iãØÅ¬Ýe|U1­´C†¤6ï§Ø¨´fEœd周³lëb´º.eùÑo±·¯{HF.0M9‘H¼s}ÓÜAz‡MsÖvý!»埩ôÃ4‹ÈoÙ‡>I)-ð¦i2Tc2çg}"á«¿L¸>ü8ýØq¶ßÍù¸ˆ˜7­vßxwÙO=ëTFFZŸahͬÙZ‰ÙÙß66Â˯ñýF¶v{Û~ÊÇÕŒ™Í×YpÙ;F–¸?k>%çÃaAÙ,—$ù“sH¼…¸qÛæi®R.Ǥc‘IoŽæWß9¤âbþ|KäK;w.Dî) QÛ}1;/õã5»> zcjgómR¬/ÐT]¸Ä¨+snþŸ<Æ|nxé²7²Ó›.n°Ñ»÷ã!{#Ø/Ã%³bÍš™”Ƙ¾ìã!Œ³ÇÌÇž¾ £=ùp~Ù<—)TÄ7Ò lGœý¥…%OóñȘšEÃï¹øV¾këü>>’qÏØþG‘„…ÒÏãYd¸çÚÍ™¦Kùôy£ãyÝðO .…¿popã¡ã°æ$Q&#ÈÏ0£æu”’›î¾‘y 9Ÿ3ÜÝ‚s§‰s—^S¼³,Ë…B`†7—f˜Ì7¸ôŒæ)PËŸô:0C‡Ì8’îç ô‹…?‡)Ý ¥˜S¦Œ $Ô¾zçü祜Z'ÏQn‚+G‹yß…ðsæý‚Â…$o4ž|Æ4¤i1,;‰ùƒâç0k~|/—zž¶T\¨m!6œF)‘ñíO¤4È™çÏ€sç{¤\9Öcï/§¸Æ§ÈÆá•±Y>ë pLšZPò|oüizÅÆs|LyÞÕ /¾`Gó|ÄiÆ{ϧó¿~šÄ‹_~‘¥ñîmÏÿ5¤ïÿ8ÚÆ÷ýï‡ov]&íïq™9³‰eùdÍä>ÿy/ÆæBÝááýåTüÏ4P„ß· t“äÍÑ÷¿Œ€Æ-»òïÇûÇŠ29ˆPa¦:‰ºÝËØË-pĠ߇ÚvöÛv6McΧ]ùŒ¸Ÿó¦ÄÅGœ·#!e™ ·<£ÿ™Ø÷_‹KŒåÐÆà|yyÚ½¿=×1øÆiiñw/±ç}“fÆHfV¾‘yB~' )‡ÌN9æHÜwµv#ýà¾åÓ}nËÚ/´Çˆñönóû±ã"ƒT8sß§žx£|Yæt|t ÷w8þf8y˜ç dm*c¨ß*ò¤ž.\W"4ä67KæÉYQ0^”áeÕi9¯É¢fÍ%’6D+‹ÌX, ²$<…¢IX’E (Vˆ"ÔúHÇæe}ß”…Ý„\ÿDàû Ñ™Û3j!Z¾ƒš«°‰O_‡—¢ ¤"DX”  òLZ "÷ÜH!R$QyJ(¼„”ˆAúöIâ…™0¦á·îw(ÕÀ~V±h‚o¯¯…ó‚¥e«§Qíj+VÏqì,=fÁHFéõ² ’d¢`…ŒA‚ð’Â"‰&R’Œa9A]{Íò‡¼Ò„PL»&HBÌ>„ÿ§ú²ÔæŸPLnô·ä,´õuë­çA«(0º§¤’q820(Ø’®b= ”÷sB‹ëˆYïÔŸ¯“/Šg´%gÉOÿëlŒßQY´‹A$™Œl–2,(’º ª(]>Ø[G¤ç'_Ïúx4õè–¡> ð›¤Á¹*WMó–W÷UÅerÈN¡(§˜Á³ÔðŠI€”‡¤IP°™6´cФúQÖ¹GµMŒ_SÔ`z+<•œ% 1tÈJ¢/> žµUý¡=@?6 *Ê';.BÚ¸"üLÎQ Q|ÈVà¿­`Mˆ&­‡·íE‡‹9w Þ¡]£ínkÕm$8˜Ž»´}Œe§ƒÎÚá ÆÏämÚr3’å YQÌâñ¨ øW {Ìa¢$‘IÑ>§Ñ ±:ˆîõ¨Ž…1¸jÅ”‹X¹ôm‰§¸9<6î‘•¿{ÍÊø6$ãÕïÍôݹ£²z]Ý©¹ëÎuÓKçB–Û?“¿¤+&¸¥`j]T–îÂ[+4]†óÃ6ZQAF?*CÌûOÇNS“‡šï(Õ‘ vÙçÙ\D¢Ïò<<è!RîwúW'º(ÆJË.&9K×l³€®µù/Ýç @êºù\ÁÊÏjÑÄyŪY× ’ÎO~"y.Í9©§¼©ç+l©e$œVèJâ*ºPê6•Õ—ŒPý¤zš&\{CtŽêI+µÌ}Î¥ß?Vð˜Àä`¹júAÛÎtý\ÒL+j5“¿?Ù:Q—O#uÚ:zî²}'µYáb-dR£¦ ,­«“Éß9ì6µ« §WͰ6«"BI]]¸Pµƒ.½â×ÕV "’ÂÖ±2ž÷›–/E1éé0%wìž­gß °ƒ|¡õ‡³ð·™3iPúbOEY"¨•k f% J +bpT•¢ÏÁRÑ+'’šÿ1†èõ·Ì£ŒX$´{Y<¿š˜µËí¨‚A Q±W¶(šX›š'DêØ¥K4z¬ ŒðáðŠ<‰ãjV8Û3XâEÄ_ª^ŽÚ%ăE¡]•¼DX,î­]!ÂÅpq;ÜÐ*½×±“Œæ±À8«fÆè"N–¬&¹êMMi)µ„¤¥ŒÙ\GFŽ8*= }•©< F¤æÂÄGHÙŠ6ØEqJ±%'–agzze YRRÇ–y¶óïJÏóöÕ– •»exB’=þ³à Û)¦þÞÑör­Â«¦Ë’ŸXo€>˜2ú’f>{}Ÿ¨(ŒB_O=åúßöcÊiðXí/Z‰˜ð~“^dVL†yL•´¬ ˜ðNv©ºgDÜlaæTêq\ªO|Hˆ¤j $Èš4’JX’žyGkN–½O€AˆŸ2Cr }_cíëÌDIí^’l®Žê\A¦@rÎÚw[& ÝØ!kör#`í¶ýÒ)‡PUd“\_a¦ ‹ï#Y ++2´S01‚çÎX˽í‡L!-、;œ³çËBà$óª2D-sºuN²ø©T‘9LU¬¤²_|mlfìßTzÁ«ªnL'#è:¿0‚ÞW±QrÊëãÚe_š¿yžÿTñý‰/ýZÔº‘¸ kU±\ªÁ}.äÖù®±êéç§ò‘Lx{Îñ;v2¦_dçÞF¦Ì1ºm5uÎ ×Mõ1"žõn•gàÈ/Pç}×ËWKôò×<¼}g)–Zºq=wÈ\Zµ˜Š”Sú`FÉ.§ Â°xµºwEatw{a[#nvª2]+ܨÉ)£8‹d™1¥ “¨¨ÉQE+¾\¶WGTÝøÔ€Òïî@È‚ô“¸}Ø5`'< '&VÑÖú­£R„ñ1<–HæäMÈ+apÉïëX9ÄJçÅ;ÖËRNk®ùÇUãÎN,ㆯ<<8å8âqÏD-Nðwˆ‡}…/•88ÀœqÇÑ!≭>( `P9s) z~Ó²œ§£àzͧ*S×}+ðìÇ—±<ù:€È¶…Ý“ÏgNr'Çž„ùìè { Ñ@8B¿3ÏÞºˆ!ñ °XfCèÅçŸ ¯¥éÝ©üy)Ùó>àötyòx ¶óù·—Â<7#@ømä{{LzS ½šoGw€pOdn0‚`±®1íA8?<ùžLw½‚¾Œ˜e9,ŠÀ:3£ÃËõ!óCDð1~WDâ Æ °\ߣΕöñß“÷A|³ƒËM‹´“ =”| ÓàË•=>¸>·³ÁÍ©‰¥&+¾~oÈÎeÁ¹ ùäOƒÉÃÁÑñÑ< H/n¥5;ò­) '®¹8<=OS½æ‡tœóÞò;>È_‘ÈPøw|ì3<ìO‰à\¯À—‡»?$? ‡D‚òy1=•} L C˜F²^ÃSO•딢R>OžNÉÄú½Ïy}Ÿa4×Éø5û¶œo¾sÃõ^O1<‰¶ò$>¤NÈžkØ)Dßöqó%Èœˆ’t(tù¡ó0©ðñ>'Ë“¨¯h“Áñ<ï³öÐð"`ïxã‚D$IëgŠ*“‘I’½OKÀm’Še*Š;ÕÝÍãÁéY  mŒ ÔD¨ÆuYz]ÞèçH„ý¶Û€{»¶î ­ŽàöÛs6Á¶nÝé{7v¹IJfm¶Ü08ñnæŒáÙ¥l3p\–€ÀF§»¥wŠ îA@$JvΑ»ØçrîÀk9|ãÙÈ6åïlņà`(L-6à¹ÀÌpjgÞ÷,pÅ÷ïÕéD/ãŒîHÏXúöU‰R\MiI]á%XB•&±({{/4‡Síô¼ÒH€S‰>`0yïH%)/:>Ô— šæ‘2”„~ÔMu™>ëýZ‘þ$£þ¥äÿÿ0>ñ÷ŽÆƒ@ì€;xÐÓïŽÀ`Ðîï ûÇcÜ{´@}ã@õÝG¸ûÇÞÜ}à=ÀoÝ÷¼Þß>ðû}㿸ïxÀoÚzpã±  O¼bŒ†š>ð€ ïxpà>ð4}ãïp4cÜß½Û@ƒï;4v>ñï×Þ×`4v=ÇÞí¯¼Ð4 x5Ø  °à=ÀhР{ °4hÀ q÷€NÀ hÐxì sˇ³ÒYªÇõš8IøM±âðz´y¿7Oa²¾D~ó~Â?ö¼çà í ;€5 ï´}à½÷€4}àí£@ÑØ øÀ1ø$‹3´ây? ÇàŒ¼F5·¡ó6,?žºÏ.§©ÇÖ†ûå§÷È¢7'£ïÚÑ7ÂOggSgBVX سKÿÿÿÿÿÿÿÿÿÿNÿÿÿÿÿÿˆ ÷vhPÔ÷ %š2ó‰óÈÅmGAAíת³\]~NêLln¿Ào;x‚$Š™4ãHže'›ÆØ…9í>.(ÐÔ†^(÷æÙÊ'ºÓ¥>ä›b2ùeí…0E¢ÚżK2{b9öèŸÙœåˆžcãr-¥ƒ¥^'WjׇAEãvvÝo²ùe:˜Ç]AþÇÎ<Ùa*|ÏPÃxcøf…‘”`S㮹²~ý²ùämK‰{ÿ|†$%gÉÿöæÌíö?˜–zóÌRfh?ùï&wç'æG’ÈóÙöT°¶W[õàñ¼m©Þu÷ÞƒÀòQ£ª|ÜÝÑ™½=M‰z~QÜS×çG_'C³mÓ«j jíºžjjï'i Ÿ/â8t^cç©B'WmŸœöNç™ýj2éD]µoHþ`8õÂA“s¿¯ÎEZÂ'Ÿ­4„ÅÙt:eãLÐzÔtjCÝš´Xy ñ–®ÇÆóÌLZ|écßÔO9'PÄ/¡ð!v€»^„7/ó>ýü¿¶–i&¨ë¥Æ]‚ ÐO³tÏT6Á;B„nÿ‘Kco¹#>IJ&VNûámÓΙÒ4s8`‰ßa º#£$/þx<‹µûuü®40! vÅြøX0_®×áÏŠA¶U—~)˜ÄÁä¸Yш¥ÈDÏÿ?•Ôõï NˆÌ‰Ùš™t|Úˆ¿ AƒÀ"ðâ€Ðç¦ 8†¡ÔÛ‰_lwã;1%?äÇ(Ü(~ÇÛʬ•`‰˜÷£ð–~8WËÁbG=Ÿ¶…ˆà.£nØ1ð ÷þvßÀH·…¿ADËüûp“oÿßùQKŸüÄúXˆP¸wîÿ¢>ÐOÿ%;o·]ö'v!3ZŠL~¹Îb`>sóó´OÿƇGôÐ×Þ¦»nŽ|uÏ*_œåÆ^ÿå/ɆOÀñ6©Z‘Cô+?G=œ<‡\ßz\‹¾OãÛçr9+›žúX÷VvWíëvºð<Çqi÷—ûú…ÀŽ5ø/8ŽÐiø¾?ü@ÔA×í¥G#Hÿ WF_Åúà€ÚHŒ|wZŸ(ÈÌn!¤^4²ÄƒA ÞsD—Ùï~`C[EЊbÎÐåÿµ÷ðF]†a‹›}öñ¶vDûú’Äqstï³.}óïéÙ㘛Æÿ>SžšÇÇ0vüCOÑL{Æ¿>œØdE \ÿöyŒ¼îÌí<½ãßããdG_ˆƒ&çhê?ç¦>=*#qs´<Ó¾Êc´³Ûµ§³,­™Žëð£ß1ûH<͇]¿:âöžñF8„SV"•×øYd¾Ë0=1Ó¡Aˆâøç[ @·9%áÔ^!|uìiã£ëKâp^0/ÖÜiñÑ~ßiÿÄÏ[Nåñ¶ß†Ýp¹ÆÜ› œöSþM:èÇÕ4)½ß,Òó=pÝr*ùr« »ñKDªÐ˜ÆÔæ·¼LùÛX¾P7Wù^aÿÝ;F ¨­X˜ ‡¶Mî&ë"F ÍqMâ6Bк»ÅЭu覲0øg„p¿}MŒôR Ñ3t®û½B“U +²›”iâ>µMjþ6_ªÜÊ:=å¿®;]Ilòï'rT¹® ß–ŸÏù¢lý`»øi; êÄ¥µ:ˆ¥&v%fRøyD¢ÂàëÓ}°¸ß–£±ëée©À“aÇ\êçpø•%ÝlGR Œ jt´èÑã/Ÿ—À¥l šYj–B„”~ŸÅijÁ-eïåE-WT'2nÑÌÛЖ yÎŒ…”þÔÝ·™®êB4~,pãÌޏV.¦4ŠËÆ/—ÈüOxr.ëˆ%Îø Ap”‘Ñ"Ï‚‹õrè»%=A°²V»Ô’Atòõ ºýG]Š( lƒÎ“šû­ç¢ÃԤ­f½ÿkºŒcb‰(„©AG£ï–¶%tÚù1¶P¹ýúz$X¼½%gݾµõ®ÝWØ9ªÄ›Wï¦ p²ºöþn[tÔ‚4®"Bµ®“«õdII÷2KëÊ4»lÞÌ$³X·yE’H¸>¢ ”¿x¸,ºN˜ö+–¿xz3M²£Õ&سîIªÁ¤¥Ùõ"f&Ë0Ê`®°ú¨ï¯µEy$ZHº²ÄdZcJG…[¾Ê(îÿX[¥+ä÷¤Ì›k(ñìdcbŒ&•¨ƒ+ÆØNha •2#äžëa± U®]D‹OwÝø™äüœsâhœ Ì&?GNÂ~\¢kÉàÃÀY7\o=dZh¡‚øž‘º~OE<ø:‡yø§äÑôzW©ÙðP>!Þ߯ y0Á<öà’|Hx™[Ê|O_#›>€xžÏ´~O“ †:ø>äÄÈ )×—ÂÀ äí=˜tiÞõ@øé×êá ä§eÌ>g¢ÞH.‘!ì§§_o'ŸÞŠÔ3Ð× –ôvöpsÈœž;4ì²3ɇâ÷λôOOØ×Å>%~BQ"žLtzQƒÑÂ=_'Wê}Jqã¡¥({0uHyy=ŸsÊ—ØžŽE5=›ÃåðpŸÉnMyé,<¶¡ËÒ1å7Oç“|äØDÕŠÝ;?o¢éò{VWp1äì‚'¶Ý}N÷˜žQê½äÏ„ÏS㜴ü: yë{äªìö! ݼŒèßg$Tø‘•j&”~B'¾òNEƒßØÄ;<‹äðG³ä$OWt̾ÎÁèö+å§€I“G&Wy¥7†€R'<ûŒi†›Óà™yÏc?3°5 ~)[AÝð?IÆTEZ¥E€1#Ç¥0U ^CQ*©rÝ8;Ï<{E @‡üþ»i±–Ѐ÷½ûÞûÞÀ<=³Ȭ›j ìÀ0 Y¼Ðaá€ÂP`;06‡80ÑE(H;[cAƒ •´¡Gœ6 E¤ÛPF­˜XÖÛbÛSLè2Ѐx5ZÃÞ`€Ágð€ 2½å<ï¯q§—9ÎÀnCìfâö¸«~ÁÑWî›@ò­Ri ¨uF-s!$‡˜Ý‚ßãÔx„ÊB” 2‡Ü”‰zT‘乆ëâó*Jò݈n¦—­æTÓZ=ÈS2/ƒå)i™I'—”<‘!*f•$”¥ækÉIÇ.”Aî­ë™š\÷J_Ã˸¼}ãG¸ Óï~}ãï €ûÇcéxÁ£ï (sïî>ñ÷„ûÇß÷hûƼ}ãGÚ>ð÷¬{€¼}ã°xûÀhоh¼¼hûÀhÑ ;kïx÷cGcÜÞ;÷€ì}à; 4`ûÀÞìÜv@÷r€{€ûÀ€ìh@6{@v@hûÀhÑ£°ïpìyà4ˆFqè4€ £@ À}àhÐØïåø½Çà<íõ¿{ö¿'à¨4h*€@kï  k@Р@hð~ /À¶¿¢þ/À­Üì)ôüå2°Î¨ôc?G<žx˜&$„AÔ–"Ÿ2uG€:’Š#å BÃõµãá¦îá§@#£ÿঀœb±çÒW‘ñ Ê0tï–¬/x³Éj´d_ÑûÈA‡ÍÉ¡O#ÍÉ&'‘ :*¨Uœa¼8qæc£®ñ€NXc?FþüS'^•Îæ(1ç0„rq,z#‚ 9úâ3ÂŽIÿ£Òi Ãâ¦(ôÀE[“º‡üÿÖ[„Ÿáž±Q<(…0Q>¡Œ­©ÎcЀrnü‘J#/ž9ÌæiðqÄÁ!¥"D“ë¹<è§Ó=wÌw?ÿ“I½þ2 ó(^ÇçÍ#™ƒÏò¢qÄXP)§Lü|hÆÐOЂܧÖS8â.a ˆ$?OggShBVX!’0`àÿÿÿÿÿÿÿÿGÿÿÿÿÿÿÿÿyOXõ¢1 åY3L?Z2j੦4]%À÷I}1y¨©*ò¤SSF®ˆ'9ñ êqÁf(üùçô] ºˆë¢qùðbŸófX~ãæ&—Î,Êyzå¡þ ® §\óÆu€Q>‰Y„oÖ¤S<¬õÁNýe^šiЧßý硽Š7+¼JŸ上f<ŸŽ{wè,8ƒTæqëÿI†«çón=v=‚Âÿˆs¡~§ðæ8ÈÀ#=f\D˜W¦j^ž¼¢jê"èA#ú=OëÈñÅãõßuæ%V¸ôJˆ¦xðÎ~SÂæzGê²Cc]g`~lÃ`?ëžÂýç{½ÁYúÀ¬øàÀA¸t…£ÚçÈCì·Ù$mfñ³˜ÍŸÂ­ŽþÝ.æ¾yüsõ“ú Ü”o<œ¿ñ/ãÊÛŠÞN[†fP"WÚ7ˆùÉüåìLDǟűgm“¼ò?7û@AžN ù¾Ü _¯?ùÍOñìNÔµ†ÑÏóZŒ±“×Á¹8!¯¾w&=¾KãtnyÉ|¸.uÖÙpÚ'³èùæ åm¸ü¢Ä13¶qþ°FÜþ?'’G‡þË(œÈðl¿PÇßžlSàAøDË$. Øš=¦È›f,£ïÿöJÆbbs&RAå('©Z'I¢Cy*1õ‹_¹ìô'˜´ò¥™ŒmrAb{äÔI5…)銴”QÁuÉB×lgP«õ¢!.Äz4iYÊ[¡Q ¶Ç~pJ—#`œêØ-/ô½p´bª&Tƒ×øDÔ.™XšõÚÁð£hÞ¡áW½XMŠÔ›¶±Pn(*“,A¤pr ·îAqȲJºI¢QK(Æ^¦IM]Hˆ fŽŒF’µ°*×ÛjÒ^÷ßZ0H¾ÈÄ\°/Å\rŶfg5žÉe÷£«hõ<ÄA×Ç/ç[ÔRl×>V‘wwBÒ`ŽŸOD½t“Òƒò~jŽ®ZéQ†èF+Õž•ýº l-Ü÷Ÿ²œÞVp#Ær\”Mý¨Ä_¾ŽÔЏ•é1>¯J$z/Vjï€$‰ìˆ ½ÊµËñc>¸Éµ‰Ö×ÕÖ#k¸ºtz’L€V§À¤ 3gßZraå ­®Y[ì!i÷ðýÝI”L+}•Šg€)íŠQ"þA´[HHDënÉé\”tž¤¹#~ðK-¥QR‚éXŸO3$ÄQä¶¢­ÏÃsR Ù,fWdKÄNq„õN§Œ‹!Cñxyî" õ@+¸å|egÕ×n¿Qìñ˜‰Œ½h÷Ö*)3 ˜Š’ IÒE½ œB9$¿Þá"Þ’>Ûá~±âEÒñ Èãl%úP•=Î|z\[´­v‹ònr|Jô_Ë‚ 2`)íHƒ"ÒS°H"yò)bõ`VGðΧ¢-k”ó¯@`èVeI5²D4Œö=c£Ðˆ!iég<»é%‰¹p6Èók.P¯FH/7Á·4¬{Û9«àÓ_0ªal‹*íúý’)X"H4JMÎ鸊!/¾ù©¥Xþã?þX|~|r1¥ryíñûíX¦‡Üz_…ßvÖzf˜ö>ÖX]X\>«£é÷,OK„J)–ˆlþ?¼‰¯óºÄõûÖ {J²ÅßµbûÕŸÝd"écj`TOrEŒÁ_}ö64ÆÒZüÿ÷Ëü‘b7<[Yþ•7µé 0ñúœžBÙDûG€)˜íõ1Éʃ£Ñéë=²yû7F3½šh<‚cg¯ÌÎDêÅG#åJð­õO\ËjaG€?J‘HIe,§ÓMó<Ƶ¬gW©å`\›§]ï˜XzòÈž…¨7P'1•‰"úy‹óȤU‚bµ>Ú{È%r’\ÊÇ¢I' ¦pÉïí%˜qFø­Dñ(¾bòÔçÐã†áâ·ÍgŒ#Ž-ò“ÉàÝ8)Špòa¥í×ä{îQàã?fžOçÉÑÙŠ Á è~ºsÁK®æWõì§Ýì 4®”ÓÊ èàs ˜ºº2O¶öaøŠqçå:4,ÃV‰šÁ™Î'Øz;¯V’‘ì0@ ø¹P"a±ô}@¾ÏgÀ­94@@äìì€'²¯#ØŸ‘àä‚iÑÕZBů•„ÍŒ>'g룕0Ãý#â /ƒäöû¡“ÐLz^thÊ{(Ø,A¸!ëJS©éÐy8ìOÙNEè•hYªKÀø Ú›ÀŸ‘éó锵úöaáçYèø!úãÍä,z‚Žñ=Ôè :>(v€ ˆ ˆB P¶»¹}p^÷N5ÂxÆ´‰D$´R ŠH“¼ñ‚’ˆÁH Nõ L”€ÖyÒJ$­iŠHHÖ a-c9(Œa @ûÇÞ=æçÞ>ñ÷à}ã°ãï( Í€ìcöxìÞ4}à>òô4¸¼h }ãGÞ4}ãï ÷€÷>ñôq ï=Æ€ûÆî4hûÂ{¼hÐh>á÷ûÇÞ4hР;xqØûÀhûÆ„ûÇÞ;4}ã±î4h÷ {´hê†ϼ€Ð÷ŽÀ€Ð4{€ @ }§ÜùŸ‚ðy~ 4hÐh h; @  h(Áþ€ëð\ž}•ŸÆ`øDQŒÑGQ‚ŠËz€‰þŸ(!w¬# tˆðœg$ÿŒÖx¹ƒô‚…y5+3ú"ãì~qÄhBžs³û>¬O<¾ˆ¦q Œ4þVEH#Á8ÑúóW £ÇÏ€Oñngóˆ~ør¬ý t[ó¯nðÇÄLš3_ ±Ëv»Žûaz3Èpü3˜ŸNAÑJó‘?0‰æóû}úÃâõ•&üeòIX¹æ ÄøEa¢b|ÿðôf¤] ‚Úî//ÏŸ;#÷ù³!à1Î8ÌJëõ„ÿ¦koÿ>=d±À>äN‰Íü㢬ÓÈÃù¯£•@OßßýJÞ9\•‡¬ŒÙ¿ÝùÏÁqpâ þDüt‹ùÐ[´/nýJ*àœÈA  ÑÑë(Õa>÷š&0ë¨!GY§‚ôõ(c®.‡Ø‘z9š‹0"Uˆ^ p¢Žø)ưšÀ˜—¬ŽfBýÄ gú3 XrŠ· ˆÀå.†rßÄŽwíw™…Ä?=+™éÏ›1M‡è°v†íp]w,8…û\_þõÁÂö'Gø.~¢²“£ûwìõÐ rx€§5˜_Ìç€õïÄgÏÜJä$Ú,AÆ!ÁþoIÜ]ÀG?yX £‹0º?æyïÇú=aùc¯ý4aïGý~ ÿÊ ~_ð`?lÀðrÝñt?OggSiBVX"hÏf´ÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ\=z{Aë,ÓG±aÑû›Àº @º=¿°…ÎÁÿ\_5 $…¤ÇEîÐçˆÂŒÆÇî@ý7ÿµ ØÞwöXf!x_Ìø3!ˆþlÈYYòÛ(û1ª`0OcUá›Ç硸.ûæV¬Çå1ŸTüमFAöóγö(û¡—Y~DŸ7Ücngø‰a– _k"T-Øâ:ç-#n{VÚËoü[(Öí×/•1<Ÿ ZYm¾¶ݬ/çß ÿûÀLmÎú„þW <Àûz”èŸ~§ú˜œ¿Û#÷æóÅ2¿ˆFÀ.Fòº>ÞN~! ¢'/õê‘Q5"p2Šœà¶ Yåe»ù7\¤RÄçŒg>ÙeÛ êQÙp¹¯Ï |ë@Æ :lJíU¿×Kl4pŽ_|Ÿõ´òº,RÁTý¤ÿU Jð€f!º³öꎤz(l©£ìnSõ»ácÞ¿ö(*=”Â|þéŒ1V¯:µË–'ñé´*³ýMÙ;]Á-õXF/y‹m«u,m™\Ã-´¿÷ü®ßXœ¶¿ÒÁ"”>¢ÖH‡…ìr·§7ùß¼¾þât§ f¾X¿~Etž¸H›éÆ-h·ôv7²Ôƒ2“ö¶ÈG<ýä+ Fq‰¨öIÍ[ X“S¨ŽiM ±j©c¹øYMMŒž¨äã©YµÙÐ Ú¦;æº z KŠ~ä_?xïQ3Û=qŸó–évœ#ÀɵŠÔs˵Èì®ô{L=2è ôšõ’›iR¬ ß2”HUljp[;ýmÉ,Õ‰¤ ¤=D@±ì‰£2Ü =`––ŽÛ´IŽã *4§3$¥ƒÒ8™ØORœˆ¸V8¨„_Íü– ,Mb9¤ŠUå3ÌÑè²ÉådþÅ}~Ÿ¾Y|‘ÑUbÏ™ å•'Øšü¶?Ÿµæ1µ÷ÿýÓ¾ÿ’ùý×—ÿ1«ÚL@°ò¯.Aíýkt­Ñ ±K;RÍ÷U’ä~ø”» ’g#hó^G±II³ñ–u4”¦¿!$pöñ%Z±^¦1ö‰<œyPª3×å`Êy^±ç<¦”óð‘¤&"sn å=b"¢ ¢£ÚÅÒ‰D‘å_”­O±+/{ßWn½©vyä»â7YݤŠ@®_‡1.()°pÉïîc¯¬^ŒHòM?øbxY§†¼#uÇf^!'‘O:ñHJj²3²*ù¥g”|I¼ñÎóµbV8cÛbíRÕÚ»W1‚µ½^o|xqÝãyç‰Æñ·¸œ¿Eç®:ã˜^ayçžyç®9Dy¾wÅ7—â‡`ÂoìOf¨¡ŠüH™¸¾¦¢ƒÒCà}‘ìAÖ´ðhiÛbCèi¯G"w#…,øÑÈÎNÛ…=y âuš_Iâ ÒæøK4øü§§6s4ïàV¾v ‚Ã\i±z'£Á‡„¢ iÉ3޾¿D/“ C(¾Z*)èÝ!£w_JYòCÔäû<½éà°žm¿>Ž`½(Ž˜üI=y«€¼Î{\TôIMO˜Í>cÑДҟ’b#1 >‡ooÄáìö'[Àr@(žL<¯/Ù–éäôqàÄ)@ø=¬¯ÉÄhtwa’ôñú½Ÿ$-¢CªSÂHCÓÕth“á“£‡£öiäùà”öR”³ê‰]bËTÁ4­uåðöp#C°ÏwŒ–-½ ?Kð+à“µ:"«Ø^÷¤|žˆ'·ó¾ß„úœ`wB€qÅ™<¢`Ó€³¬;ÉP018òU%“E HnßOÐG==qñ<×}à/·£>&Ÿó³§OHo<Ï7Ï3B¢Ô´o“ž¸èÔ8Jê§){„¸F Ô szI÷ ’L» ˜pqÃÛO#§ÑÿW“££Ùý¾|ûK{ÀB„”¨‚€ @‘@ @ =¶9à ‘=í$`튈@ð¯6#–ï¨Ð÷9²I@Þ'œÙ{µãÒòØ 5Š­¼¶Ô²5oOH8íÁ“,Û0‡¬ðb¥7œ`om€ Z)^ð®÷Xb=°àËÀ¨` =xOFÁaž¨õz5 j‚%ݘa@ ñC¼Ä‚€Pß;¾`àâñœq…Ç"?B ”“­ó'xãã­ëšÒDõï|Þ*HË£½oÖ[ß7¼$¦L…¾¯9ÿ åJN]ÂAo?á$e<¤†³æ¹ÝÝ’ã:L¤ΑãRBq¬cü¼~0@ &ýãïxÑØûÀhÀ ±÷¼¸ÐxÆ€Q£@hûÇÖ>ðxûǸ÷ƒÌhì}ýv>ñ£ïxì}áŽóðKXúÇznžåîÞ>ñèÜ}àÖ€ûÅš<ÇcÜŽÀ}£ïx¼3ïƒ@úÇÖ>ñ÷€ï>ðxp ° h÷¼3°h>ð ÇÞ>ñ÷€¼}ã°×`=@h¼€À£@/c@üŸ ðpåø? ‡à5ÐÐ( ·`5 í®À  hÖ€;Ðh;h §àúõìü(ÕÒŒíù+|ýÞ7&MîÁ*~^?™Ï,¿ø`äeÈ0!g*'ü cž18<˜Žuç¯<¯AüÆÿ¼ûK'&"WßÏ'þfPëù'ç<12@¿æP/ „Jð§ ²c’'Ï<ÆÌåfe ¹Ðæq{ú'¯1?ããn¸ÿÁˆÄ®àå7å|u²“¯Åûå©ú>ÜŽxA¡·è)ýâ :ç⸄~ƒýáðG¦vý >HkÐM™Ã,ÐÔd1‘yо+…ÿ¯`ÊÿÅ;ôtäù_Ì{Â/ý 4:÷‡_ñüڼǟ!úÍøÁІ¿‚ñéûaÐm¾t¸êGȈ7ÎC,¾'ÿ<Ê– (RXãï­3oÙÿ—²º·1)P>ÀóóÉïã35øÌ_\Eý_Øý/|ŸÙs„¿¯ÿö¼Çž/ø¿ös=¬ˆ3ûo}öšêý³¢Ž[ÀÆÿ?³æ7ØÿŸoãžè?Üüg9ÿfvבּ(ž!І£÷pƒ|ÄåÀb ‰ÈÀy„gÔÀ„(@£oÐnquaœ©€ç–ÑÔÞÏ—–§•ÿô;£< Ü+R e™™ÍnNým(?±æ,Þr“2u¿_©2ƒåäŸþGZký¿žÄPÝŠ9ô.Í–X[(ðüùóÚFFÑ<°ç¼ÙÂÎ-ä7-ËõÉÁ|‘Ž¢ƒ ­§L1Ð¥Úy xŒn}²ñ¹”KŽ(ï¶Ûoý,AÝù¶ërYÛ<Ã|¤å7)qî²iá6 :™ÿ}ˆÛœëì.`ÿùæ't!ùÍâ|Ø~LãùSsùGÛïû™ŽI’ÞOä_·:0OÀRÃø²Ôx¶‡ìRãÝe¾òÆóëâ6òshSçYO··Ùâ3ùdŽCŒ×Ç_°¥óŽFk?•ˆÇ©a¥?~ùñ1°Gì¨>jç˜ùÙ9|ÏÃÑ{æ~ûDþ¬à¨2 ÆÛì7Ò>ÈŸ?ÁÄ?#‚2#þƒlqtï[†ä¢Ú'ß×'œâ çwü³$ýØSæ?ࣘêÈ<õ+í×çóò~öâƒÏ\Bˆ˜Ô[ïóËe¹’/´¿ oöšÕƒçýùDûýïÀËâneñúàií 4(° —¡gö¡G¯Š ¦-ò!}ægõ¹ò—ôÑ]L©Àº3Ȉœ@²&ȱsꚤÉ;à3¶éד¯ ׿Îrm“õžBùÁ–:äÏÇ“r3¥È¥eQ± gï÷¶×ƒþ}¹‚H&Yc}§"6Ÿ´¿ ¾r…1þÞ:Ú1:Ò&?&-ÏnzXòÿ©˜Å‚çB:ÿúO]áuœ ™‚ó‹Ù;±âܦËløü÷‹–ÁÎŽÓ…à׊ςØà@b%z$1ü­§í$yíŽBøâ>R"Ï­ÌâÌD_Â`絩óÏâ/”MùóP@8ÿ<­r’·Î~VùÓOœBgLþ£È$NÂh^Ššj/ZßïñõªL¹oët“àˆ9O%_±¥øÿÊýÁàŸ8¼ŽD¿/g®ýÿ~~`áôþsÄ韾VÙ…ZtV˜B¢œÄゃ73™–ŒNN!üù£é¼æGCðˆN˜ !D/åt*…¢xVß5i™Æû1™¶'8"ÿÿ“V¨Tp´>eѵªa#0ü ˜»g¹ÑÆD,¨ B\Ý‘9zôB=Ñà#½úƒÕ F‰Áxeaí3‚Ár›àóà {^¨]KÙ'Á3õã>“ù¶1‡® ã`Q“©Ð'ºáì'$¹8PpJ§Ðï~7¯Î‰$_6ÑagÌÚ= OWô–WÇåßúÄÃ2µ±TyV‰"'¡!eŒeòúÚíËëAPD%­ô‚6X­1æûK”µ¡W0!Á$ÕŽs$ôUcè-t"I9)8¥[«=åél©åϰ+Ôqn¢×¨ƒ…æwr¬§fZÓ†(âSãQœd•³†¨§ÏaÀÀ~Ûɇ¨«l6»SðûdnÑ}Z-„¯¿Ò?)íGP^P6R^WE­Ó4Q§ÆV=c2„ZM!rþ‹åû(±äVþÿZ+5F–/í&*10 ¬m'±ô‘`&mÿ·¬õ>1%2bìûô½I8G³à«cÆŸ¯VDEF%Y•%kÖ N½©åòp2Ra¨Œà±20|&ú}V/ÎN Tƃ‘‰ŠˆÔ଼$QPQF: ìŒf20t{cFú¿€”H:+Ð(Oy ºÑÚr@›´MNO„R^©ìí}æ&ßãSàítúÎ2’Â#©˜[Pfu#P¹ªž¸„ºŒóÔèYDS0=F?°/Úí>gæP¥%…•=YélX7’y±­%-fOad#à 쨛>A E—Ü@b‘R¾$ô­à½X’‚&b·ß7ªŠFR<‡ùBØÀ_rjáÔGbzaX«sLI'’Ô_ߟÍ$¨î$KXêÆ A•ÿúo•q˜$WJ£ïÅeõ‹î1*µÜ×[Ñ ”ôÇDY6®ié¨âß…‹,³},qúÅ*šžqJW;l…×åd^'²OggSkBVX#{pù0šÿÿÿÿÿÿÿÿzÿÿÿÿÿÿÿêiæN—;eÉ~V:³Ú…ÒU%Ño0ÓB"wYF­Ð^¥ì5µ}M¦#öÁŸ‘è"ÏI¿ÿÒ%ÿaï}§½,lwÇ|bÜCl_"9ÖA'¡G•¼ B"*k9vCÖ,g€6ž]±“¤|/Í嚟uæXÏ€M’ŸöÂT#¢÷Ý8%ÙóÒ7,ú¹•ÄJVè¶ž€bÖëpÉïÒ\HQ*ûb•áÌGŽù¯s,x²2Îç“8ñ›#²-Ysg2ó'”†øyxÁáNbqÇ8©R¬áŽç1 «˜œUÚ³…œ<_€äü1ú>Ç/À3‘<‹â|ç™×>o`{=¾Žñ;+ò9Gƒƒä|Šaî}°´€iÔL8škÉ¢>Å0èöõ-ˆœ¼§‡ÉD ~(pnÝøƒñ8(rQy wœDæ;ápziÉÁŽ„':á.ŸÀU6f=/¦Ýµ³ð¼'ÀììÇFª‡À¡Œ&󢌱é=£ÉÂJõWš⭜ØÍ4êr£Ðyãg·£tM?nžIiªˆ%:"ã Rt¡ç²¨šzúÏ…ög:y0¸t$>X S|‰qŒÐá'›~•B„éDËhœÞ8>ö‘åsþöÃÖ?ÉDwH:}OìPßæRY=-ÔO‹ííöa‡·ON@ |!Çn¢ƒÓ•à•ûŸ“z€ë´R €UD8y ¢n¼eäO»òùtHU/ |4¬¡á—*s:´ðè‡Örrmˆòè:Óµ>ˆVOe+¤ò…;ÈiÉìBbº qž@êø,¡ÔÁòS÷=ä§`{0ôy$'–:€ˆp§ƒêΨDì¢$ãv¿R²4èìFɇ,«Àœ¦ˆqCJ~€äÐ=>Bs tHy4ìùžˆì p›¡Á÷2 šœ€Í+¿|ì”?R+Ì&ä$ìÓš¾Aü½Àé7N˜WJþo€ÏÄúªÕ"ªªª•!*ªªUUVTª÷®•WUn“©Üén3ªPV±¸V\YÝ-T•8´Åªíp†sƒ»®É7ªôåEcœn³®f½ÇJ+Õ¬=¯ËcÀUŠÀ]ÊÌž²îÕ¥€´3°MаupB)9¹È ß²˜ ø¸¦ˆ¤¡’> TUU0‚‚"d’rB'pD¤Ñ^ ˆY’$"±P1"–{à°N#  â‚’(!‘AÁ$âxûǸûóGÞÜ}í}ãï÷¼}ãïkGÞ?3¯ÀÑêü)\€ÖƒA üž¯Â/ÌI÷LLÇömþJ£i¤S&÷Ò0~d¾ås©âýÖÛoXÉ´Lf£ì‰ê9ÐÓ]¯`K+¨¿3,¯8nÇ·õç›V㟠ͺÊμ„î(RŸ¦²”÷õÃ(Ì·Ý•ÌLZ#Ĉ]ssâE°.¼?çø·Î[Š~y|ïûn?&qRLr<ÀOœ¡üý•/œ·¶ÙËà7‰:’#çÏ Ÿãð‰³uÉe·iüí™ȘÛÿÎäNóÍá/ž ë~ à2ëÞ~AÂ"'Ϥ1úߣw:Ë­;3éëÌIï€ÿÆ'õ(ü;úrÈËüºüû"[›ûämø„w Š\Z¿P¤Bþy'‘*vvm¼Á%uÑ™×!{ÿg–Yægñþ K ýáXˆ ‰ç~îñ±oÏɃÈ" ýåjNèÃúsûr7ø?àJ…ø"OÌD.Ó3+ÃßÚ%ž§øù?¶ó>—1´I²…ý§<Âè?ÙA/È“ ñ÷Ú&9íù÷bf#ÿWÿÊ'>#Zºè0Jö ߘuçßúíÄeño‹"}¼þtåBl ÿ·/gñƒ¿6Îw·ó®!N?û/g^‚ŒâûB󶉸ÝN|‚|.#ÎÛ®·Dõ×lsàPÇâÍÄlmo÷:ÚïÉ,ÈûqŸˆÄû~L˜ûœÆ÷õÑ‚'+-ùNXßú@þSæäø1·èø…ÑúÞ׃®«{å°ð·•Ë Í×ýMäÍ—ûB÷Ì©/¿3³3û<þ[œ!Ç×{uò°âçEûû·eB˜Äï ÷m§G¸}DxãöBrv‡~æ'ÎJrè»ÏÃÙFäÓ÷ú2cFGÙ;¡ý§^GGv‘í¿¤™7 ”)èMükï´Ü<Äû·¤f½·îlC!³„¦å²é‰ˆy©º4»ñ#O[°œ¥&püDì:ÉgiäÃŒ™* ”§Ü˜kÙ„Ÿx‘ɉ‰Äøîü@øxí¼yÝnÔÞÅþQ°ï6BÆŠJÙ°‚q‰Àò?nuieô‡ú¼#QR& zÊEjB4f9kiòµhdU;Æ¿@ªOÙtûU­!Yhî«ûú0ûR¿RØQ§íµ·‹G ”Qú§Ñ{êüÛ3H_ö¾ÙITNI<‹–Á?Hú p™œn`¯Í.B:‰øDžH$n“`·‚CÖ'GÖ?Q,Tä»-©ŒÈšOS‘ßO™-P>d½i+ûA‡þæW1ˆèBDFqÚ§J.ßàóÑ2 cG®özèÒc ;·Ï´s6x&V–fÔøQÖÄÜß9½ñp=_ó+3‚QÎ,¥ýËQ'¸± Š2NÝÌiílÁØ$š?ØÔZHÌ –‹ÕÍ¡ëELVßLÇIùÍ}$Uç²bcmX”7 ﮥ°J¶[#ã´ô¨Ò‚“'Òb*øéahÅg¥‰³4žÁÄcÓÐóYŒ\ÅÐÂÕ¶Ëò£b¦µ+¥.–~±X3to/¯+È6òíùtY”ôl³aÙ˜<±Yé<‹ió_Ïï²Gí+õûkîòUþûÿ¶/[ÓXÆÒ= õyý³ƒ)M3¹o“Lfk (å êg^‚Pò²öŽMœ”7¦p–aå.Oʨž˜Q»'~~c—0cv'ɼ>«¸ÉbÉæf­WL£}g¾ëËÞû—Ñ’{ÊêybWØž÷9(‚Mç“ö'ÎK¦n¾pÉïì]'ÚõkÂ5ÏÃÀìˆÏ uÉÃ<òq\b6·™¼§Aj89H­ñKçŽ+˜»‰µ8«¬áŽ/œŠ›‰ÅC*qWjÃpÆ÷N÷¼êwzãŒÞyÞ7xÞ7½ã‡à ¼óÏ8<ÂóÏ<óÏ<óƒ×ñß­óyLí_”9ÈràÈh˜ÂÄYX'Hñ±ç³Og8S–‘"ž ˆd®½ôvüÊ>'F :΃@ωßg³Ú€ogãàù‹½0öBE0Ž:N±=NO¹"œ~ú=ÏAñ¡Ù§ƒ;)æ¾N*:4xÓáX¾;0m9~&tuët#îrS°ôörx|žXÄ>ÇÎʇ ýÅÀXš|V¿rô0Ä+É(`è‡ÐB+ù9Á ˜ô'—‘ã“ÓÒFŠ‹¥¼éƒ`cÔèðv¶NÞ—bÈ{ÎNþgW‘?'ÈC·Ùû;)_#>Æò¿,ãàP8ìéêãƒËï¤\”÷G8 ï}ïo½€ ©Ð?æN¿Žñ!átQsõwðú=ëØsä2„Qu0K”>ªþˆdD2PXB£™¬Tb³²ŒL˜¢>„”È}TF1yP˜/¨D).¾‰dIú]ÐY¥í‹ùà>ñî4{pè>ü÷Ÿxóm{€ˆ ¦çÚ=Æ€úÇÞ:Gt ¾ñØìv=À}à: ÷€ïNÇc@vãXûÇß>ñî>ñè<ǘúÆ£ß>ðxЀöúÀ}ãïŽÆ4v4v>ý:!ÛÜ÷ŽÇ¸Ñ÷¿>ð¼cÜv>ðxûÀ}ãï =úÝ}à=ÇÞ4{ŽÀ{ hÀî>¡æ }àܼh>ð;xÑ÷;ØûÀv;à=À€Ðv÷£ëî4)î±£FGBy? §/7á\õÛZ± ;îРZ°×Þ4°´`F€<Ÿ+ð0|Ï9Œ‡Üü%ž.L̼ǃŸ±¸n]iÈLØÌbËžAŸüÖ‘²‹±(ù[›³?Ñ"üP¤PÓ¯²è1ΨjK,PzݯçÇø•Ô|uü|åøQ±äÞl;ú}³¾^2†Gæ¹5rÕ‰?Ù—žþùÆû @\ñoöÛžh¾VR)P¸ƒuS?¯Ôþ‚> 1*Àëóÿ´NYt/?$:G¤êg}·~ÆØÝݤydDðçèò¿½ø Áó~GRí¼ô-#©¾¤ÿÏÛr ö‰‚Ù…jÖÿh“žceBÈÌÊÑDƒü£/Än~©P!xR¼G¼ü^W@pëŠzèßžQi§íÕÛH™[[ár1ÉëlsÆüDZ(ÃðDûü#óàÁ=¸…!¶b.uÐØÄ­ï8I?q–_Ÿvez¸¢YŠ›QÙ-p3õÇ3$&"#&fgäI¼Äilóïúb(j¬á,ãíeleI `1“@i»NÐ@Ô¦ø¢š„ä/"/9Ø‹ÿYÍ“¹ƒ[2óŸ2Á”3¾¬oF'i’YÚ?¢ÇdäLÌÅÈÛmÏì]<./ÿ1¶ûYÛºûEpè³ؘ]m|RÁµ?Ó<‰žÜ„móËœØûEÝâaµùæeÌ£"$\]¥½Ñù+ÙòÌü?÷õ#—ÒíõbÄäìoö £47úS¶öz, jM 3,í˜'¨“ŸH]üN°È}ÃûæÃµíò³¼h^óè³.Äíºè¿Û™µçOggSlBVX$ا5±ÿÿÿÿÿÿÿ¼ÿÿÿÿÿÿÿÿÿçÆÀ_×¼h/޾F-Û~xšÔ$Î{N|pC9Y«¹7ÉÐãl¥?³:#¦ÁFY˜Ë/ÉãIó t_ÈYü=7– wûÆ„#uÐ×ãöóDÒÄzd1ïgmºŸRÉH \wõ|å½’g”þ¾uç—:øŸÍûîŒs £®Œð/Žqü¦{`@ØÀ}…§Ccœo“I_£³$}ÙÖ[Яcí$çoß±Kþóù Ž?›û×°Êÿ,üªózœe ýùìÌèB§ÀÜ“ðRˆðs¯È[GÀ§htpj`¾†¬õ¸lÄ[›`ÌoæXÞÍáÿ´Áâ3#Ö<Ê8f{crã)ŠA?aŸ¶ónÒ£pGŸ6±'÷œ]‰øqüþfN œÇèG0,º edŠ9̲0rw´ñ:§Ôìå–©@ˆæRQþ‡¡3G¾§,Þg½MåûÇü0pÜäãz £{çìÉ`Y÷¡¿-<ñÁùx(œYý›DpS»¼â¡º?Ô£ŠËtèǼG“Î#üf!\Ê6Õ55EÑjż¢~ÛöÏ1Äy//çPޤ™Äuן?©_.Ep-_X à0+L Idõý7ø8-Á6îô. Ftcºƒp€‰G¼Ž…¶éü¸\àŒO‰/…ŠJAç‚zóÁäëÙ¾«]‹©çñJ€ëâwŸþ$ã©Dêb9á˜Û Ë¯”Ÿi‘¾¦ìo,Ïè1ý¯ì¿[¿“G^/Œâ&g–ò%zÕüj!piöÏw€Ç{aŸ20qÞ`Q}™œp>:æ€Á€ëï´mÑÏþÛ˜ÚL§íæÎNΜ³ Þ|¬—°Dó®ð/±iM]·>%°¸~e—BêEñ?\À Q Ts¢!°ŽŒ t÷\€1§hÁŽ(ÍâŸ9ŽéÕcx›o!KêAS¸€C^ oE¹e<þ™æ‘1åJç…0§Ä-‘ ±r“ëBTŒ`êhÎëûQ×Çÿ×çG÷Š}üÛ¢Tbûào(ÿ®¹y—ãócí·®¼>®¶c9Šç7õËs´ÞÈ\³;'å¼£Á ûÕ‘óÆA~ÐüìcÄç¿G:°ö6û‡!}çy#k?¿Á ñJÌÚ ÑÁüx~>Û{êyuæp óÌBî.ÌuÈ™ûQÿ®ƒóùáÔǃÆß†6ÜãmØç@¬óxÇR ¿²…ÍŸp[Qõ? ÿŒXÄ{Z"‘TfGü ÁXJí1…µÂ¢EÓ|VtF $X«ç¨2ø•%t«ce§Èœ&)N½f—dLårO7=N@ä¨N×ÐeFQkô<ª…Eu½àÔLÄN& Dj#®Ö+PSF*úy(~¦,¹3ßqÈœ´ F É,g±"Åœö@ºnn`©ˆ//{&$þ™h™õ‹'‘"Äzˆ„, DÆ2 Z9Ü\” ò'¹`Yp û=9¬ô´Sϲ³U½aéU¥ðò.F·Øn°X[ ˜Œ$¯©Ñ=¯µ[SÂLL˜J"‹ò%U¦{ï®[ÖKïÜèŬL¶,®µ°õ—ÝŸ[ZÖ´9ïìz½ˆß>±È®‡¬ýŽsÑhÎVDE}V¾â ýKõèqˆ7Ç€"NÒÒæÄ^†ï4ú›ðª¿ùú,c’ŽV'©+YLYXÎíÞl\·¥ßÓžÛE+U–åé%rJÙÄ÷®‡2ˆ$I-E\¸_/Óz*qEé5hWÿ‘Ñ…—--zÅÓÞû\Àëc`Ì N-èõµÈÈÑÔjÃÕ?(î_c=Oµ_[¤˜Í’Z";árk%•Ë¢>CïÞËŸ{iï®]S&)i[××¢ù™õ‚ªéœç'™ån=¥ ‡«©?g¿QÈÇG¬.ÈŽj3B?JÆ£õ‚”Ñ5";â#Dt~ðö8IÔÌXJèY³ ƒÜJyŸà幸­0„Ä‹zM·)‡c¼$ý’ ée¡m³ö;ôµÎ"ŒáÒŽ6…±í3´U´¬ýž Î lQäÏlmƒç’|R@©dú_WM¬ÔŠÂáG;,Êù#ƒË'Òû§—»åX¤Wa&®½<ÙdBXÁ{ÑåSÓÚìYZÏOX.½÷#së7¤ h½¤µòoü­=PÚÀÁ‡°Z›Öõ”þùlJ¥QÑI‡™zÕò_[ï±8PeÂR&ÏRÇ=øK½(¥)IE¸¿#¤ºµ>ÂãÔ}õ}«$´ºSQ A%eqaeÚÝ-,¬‘7RµÞ%'À%Øûæ7ô–düÌÛÓò¯þi¢»Ög¤¥KÀ"²cÀ®èI»ã·Ú1bÃØ2RlbÓO|$R*ÏÊfOd¥ÑÉ10r‰W”RA˜ûi‹&Tçå3Sò\¤ø…Ï©ƒ>¡‹™€%¹«%I.a3–2£˜˜ŸŠÂOZ(]»ÚSX#vÅ.NØlO€!E(WT†ÀpÉïîž5«áçàG~ o·áá\')Ž“ˆ“¾uã¥ÍM0EN dqábE:L,ð€tΜ8MÅÚœTâ®Õœ1ÃÔjn'7Š»Rð³‚tÎïSÁávwyÞ'7‡qœqxÎ'àä¼ó Ï<óÏ<óÏ<ñÚÎÅëC“ÒuSÛàøž7Ã׳Dô&#vô‚•‰ü=$8nUy)ÙÌlQŽ€Åy4ùOb} <ˆž'¾ˆ,SÙå3}pCžAø·i²æúW¨öëO³OÉŒ åy0ðn%““>$8®DÉLL9Ãà7¦7à…ƒ!ž 3°0§~Dàî3G·«:`îå’'Ìó‡àJ|E©é6Ö>¾0 Íåà ÓÙ×±?yØgÈ !·!Ñ~œœ$O"rO'c>CÍ}Šì‡¹„`}5~'ÑàGÙ—èÐN1 ÙC>Bs§£âD»i7‘ghy>g½òCO†yŠò§/¶`å ë©êp}Ÿ\‰ñz}žù(*Qó«\äx<Ÿ¾;:N DT¶ß"…{˜üPeäÓÉžÏ'%5ÓÀ˜f¶ªƒÎÀ^ÈvêÏg‹ëžpzÏ(yIÏ=ïM9¾ïmyHžÞ^ÈüŽ`¥š³Éé9v7  9¨{>Â| ÑÕãÜòT¢yCž C;Ùú Ÿ;@{¿€’8;>‰ä­ŸS¤A8$çžbo?Bs2.«ˆnœ gÔy8ÓË*E&ô`À9ÍåÍ!aÕçÓÔ@û¤ÑŽ&‡?SÆ8¡¡øäO©ìäý€ èö"¤*‚P=ž¤ð^@ ²ƒÃk )z3oz@ì6.²0Ù´€fž"½³P€ÞCÍH¼ =Žm@c„ I®²¡ˆÁ ÀB‚M«i6là`‚Y˜ ͶºÇž,ppÙ€$€"÷½^’½ãÉxõî:wÜ_;ï»»Ýíðaà± qªQ$"™0ͶD@(†LG±Mt$HÂ’G±L )€î^Å@bBö>Ð ”Ä…%A€~ dQø„Ê ‡‘D£åüÞ>ñÐ (v°`úÀ{ @ ó;€÷ãçÀ+t Â(ŽÇ¸ûÇc@h¼}à>õ€¼v>ñ÷¼Þï÷¨v>ð?Ñ >qØûÀÞPì{ûÇ`4p }£–¾ñ ïØÐÞ}åûÇ`ïxÑî=ÇÞ:xì¨øÀ`; 4hûÇÞ± ±ñ°€  >ñ£FØ Ü4y€ÑØ+@€Ðï4{€Ð4€}àÜ{;0w@ÐÐ4wÙØ £@k@£[ì·ð,{?à?ÒÂD=€Ø4h À` €Ðv ‡à?dzà‡àZüßWdcXf¢3ù ~zËAGƈ“[# ArcæQÊÊ :”DónçÆ7iÞèÈ$·yê_¯>o2MOhDâ2.ºœlprÒb8#ô8ŽqR×>83‹þßs®ÇkûÁÿïÑíÐáDv/F~fÏ™ÝSO] Ás°wãOq ŽlDXÄŒ-Úÿ`65Øï×M+ªºu4Ç|°>3æ4yS3ñãÎ ®¸¡ú™êNø‚#%iÐy] ƒÿÀê~*Ëð؈q€°àŽÈã@ãgî8Á¶-ß¡È^@õ`qú%â"°š@ŒÆ…g?3çÂ?ƒ ÇéÐTŸAãÁó‰šLsá á'F(;ÿŠ˜‰å%0§¹Çöÿ â;=ó£b‚ÝB¦zŽÀ~!ú4añœtÔÃL-7·“„üøS¢oã61æ"õ$¶™¡ñ ÇFŠÊ—⢲¯¢Ù9 ¼õÏ'¢`ÂqÑ⸠êEÑúŸÃKâ¹Îl80seìmóPŒË¯Ÿ3ñøŽ!ƒSéE«&ûŽ?¡Fjø7øA†™ ÇÆaR²4IYçÿiÂ$&bŒ"cŸz ø\™–ÿ¨ùƒàë‘ñ2–esÿ‘øºþó¶ÐBþñGwã2P“¯>Äsíùó ÇÄ)hú˜ Ø%§Ù ¢U2u´D‹X6 <ÆÖ}Žžú3Òô-Ê*Œ#”a )ð—ðºN òD[•]“Ï%ênª‰¨©Kë#ðRp*"Aµ±ÔCûžž}¬ÅÔÛZ•»,RµÆVÅÔ8Qÿ'ÈpÉïê©,;_“59ó^#ðcÇ¿ß6æ8uðj r~iìô|€ô½:é”Q#M-ØüON'r%ù{8pœ{8ôv§'È bŸdö|tt‡a¢vxv½J6hÓäx!PäüʃÛê>'Ar³³Äw#OÑÂÐäôÑÕNß'“³ÖN®àœ  š†Ø{O‘o£'s¡ÑCÛèxÀ<CÃ1ÎTù’z0§‡ƒÙ§ÈDíkÀÏŸ•±É\DüFrÅM<’¢SàtR‰¢“àÇær'£ÁÉŒ9¥}š3 •³™Ajáë³âiÖ|Mp©Ùó<¿#à |!® {$ÑÔì|šªœ_‰ÑÑßG³ÐšÒ˜zu†ä„}ºQ,áðWîÛÈ¿ G ~>NN\…9978pQÒ%ž‘”ù¼ƒO'Ä ;¼óÒ^¸óy"ôyD9kÍO‰ü<¡ì§ÌóèQæò'î$ pvüø¶ž$ø)Á |ZÕÒ‡G`„< П9Ø ììùK…>ÈWÁôi§èÌìª{8(=Ê_± ðaE•0ò}Ê<ó¦ðýÍ=ž¹ù‚ì@‰ìÈß*'4Ú"Ñ3Ãä÷àŠð{µ E7«É€xEð …0 €1nÞ½ˆäPX ÞÞ ¯@u4±!E(ÎÙnÃZr÷‡° ÷»“+lzìÎê&ål ‘hÜÛÞÒ6ê¯=†@„Ûz²dcXO»Í€€P ¦]`Êb†áè`D$ ž³kÀ>< ¶°D€<»3à<" xá>ùàI¸5Â…Ì3 ÀœA®»1£Ë„qˆH‘‰³5AD'#\‘’q5Mr$¶a›‰‡ÓCT/¡Šz$†xMÇQ¤Ì@HœE2q$…ˆâHˆñ}à?ð÷†}ã°†c°ÚûÇÞ=ÇÒ<ǸgcA€=†Œ}ãïËŸx÷€¼}à?x£ïØì{ãïØûÅÓ±÷ŽÀ}ãÌc±÷€i÷¼ÞÌ{€œ}ã°xú†ŽÇÞ?xÑ @hûà}ã±Ø ±÷½ U ÷¼h¼)­{ŽÆŠ=Àv=ÀÞ;=ÆŽÆ€ì`Üh¼hÐÀ€Ð Ø÷Ðz€ÆÀgð~ÏÀ9ø%µ­ 4…pî°€5  hƒ@ø€ÛðrñŸƒ{¹ÇgôÓ1„[”AèÍéRaŒIÿž#ˆóÎ|Å qž…$!L¿qF x¥à~L^}p{½™ç8‹§Š½øMeœ?Ä ˆ—¥qpQëèÛ ]⎢<•0« |Tõ¥ ÓX€!AÏÏ¢¦ÒŒ9Ê:™³QL.§Ú h9Eç\s‹¸ˆ mÐÇ9íÃÀ/ÜpEœq|TÉJ‘ÜüGDuû?ôñEfŽ ”|HŸ'¡MzLP•ŒQä•Y@¥qG•ÇŒgÄÖq„¤Œ!~gާM—§ù«´R¨Ì3‚×`°ßóAH† uûýƒÏQ=wê‹yqt[ó¹ççLjŠj(¯¡Š¤ñwþ?ÀõÉ(¬+‚šH¬³r~½‰:4õæ¾ æ%J…æœ}<ÙõÜhìKÅ$qÿã÷â“Û®¹Án ÀŽü]Î3Öðw£”ùP£D@Oÿ<Q1"ßüÇ® Ç Ëæà€bîãú Ÿ†$9Bq{cˆ¡€µ$¡ÿþÇ\äŒ°Ž»={Ÿú[~Iù ²™G0Ò_Fê˜Ïç”±â…ærOý|Àø¬0WfEõÀG¢ÀÀsÐý좌Ñ?ˆ_ôt)ïìzZüdQ…4sõ/>|ÑM(ëúÎÉËO®Þ™® þ$“øŸç’ÀÿïpÐAÂÿVÓ¡½yÆb²(ƒÛÍ¿AbÝaÌÝ¡•§Ž ]!ø.{"\ øRt"+Ê _ÇáŒÌŸAë Ô!Ï0Ñ0|q©”zÂ0Dh¡sœˆ’…Ñ=|üsŽ?›w £¸…û‚èêsfèR ð,?=  s9ùÀ!vGü~„Z: Ò´xúi'ó9YLùÇÐcåâr)ê\Xâá‹‚˜îiÏ2ˆ´“×\s¡@ãŸÓÊ×@¦ÁÅ ®Ç¢ŽB$óׂÓÑáûx'z”?·b "iš"¿ïÁ¢Cÿö à3Ü~X±åŽô€¾Gh!|$‚<ÁÀâyaü?Tõ„ç„qúïâÛ›…ì–‚Ž@[û±p‡êÀŽÿ£DàN™^P‰X¼‹¿xÑãÊìN'dØìˆ½ î/×B8ç:ã€ãê& Àþ\êgÌÞÔäÂê$Yºã‚¢ŽüëÎ5™£Äƒ‹°7Ü6'ö–¥sÚu@.„.æÐ_ã‡èy…ù/£Cõ߈:ž³"䈄x0ÀXCCñÁÁêæLmÿ‘àÌ#‡ÿ¸[3ð¸³~uÞ1C×”S÷?ñŸ?pèÆc1ߣÛÏ^<±8ÿേÍ?'sÊ8»ò_}Ýømâ|úÿ „B\]zõà%>÷!˜nn_ Î>%ß,GT.F;û+ ³o¶ó¶â7ä+gapJ„y†Ÿž-´„>šº„\ :Õ¿Ìm¾ÙÃùˆœ‘ƒßrB7¡iìešüGÁ´å·µpí¾¼žÏÓØ”%++G0–+­`×£f–+$¤Ÿ«¨¤GíiȦÒËÿ¾ÉtýõFØ*ö_dO€">–|c3lˆÉ‰“ÊŽØð0Rï%RLCs3PGuεàÔ_–Z®SÞµd‰WÚsE=6ȇ›·l¬O'n˜E7†OggSoBVX&)6ôÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿpÉïêœ:ÔñO.ã’9"­œG<1LjVpá8BM+vp¼]É8ÅšDM^YÍ©ˆ•É.ø•âásй‰Å]«8c‡ŠÝ˜œUМUÚ°Åœ<\wÇS¬îó8¼ng!gbô˜}‚)ú98=¿F‰o/oˆ,Ä)¯ƒð‡ßß8DùND©Bà#î¿g³Ñ‡¼ò/†ý6Ò¸:ù9«ÍèèåñÑèë´ëœ{4W:Sº‡³×³Ùð; ·X#Ñã…>o p©õèañtÆÁZ<¾õ×'Àõ§“àaàŒBšœø>Ä×Ûá\àøßè´¤(Þ8>/•}ôkù5áq3³ŽXà~…O¹ò1óìÓƒƒÉÙá¡à”ˆ Ÿwæ|„§4ø—Éٙɠäz¢> ~ÏÞQ°yIÚ@æùLêøÁäsà&ÄøçdtÙË ðM Ú0n?œaì=ˆNʰ™0%@ãc;«­™ÀÀÚa€ m÷ )ÀÁðî?ÇòÚÏ—P\Õÿ*Š N RÝÉpèê?XªæŽ„Jº*0Šܾ‚J.7 ¡¸£Õ D’Pà€d^T¤nR+¨ÂH¸ÜPE);„”@ݸ¼hû‡¸¿wÞ>ñî;xÀsëó£tÒéØ;;ÀÆ 4Ð4|à>qõ¼Þ>ð£Ø>ðϼhÐïŸxûÚûÀhõ;¼0ïÞ…4 xûǸÍï =ǸŒ}c°ú}ãì>ñØì{à}à>ðÀ@vÜ}ãïx쾃Ü}ãïéØûÆaØûǸ—;@{€ûǸìhÇ5=À{ ï€Ü}êûǸѠh¼{ ;€ °÷à€÷(hüOkõ¾W£—«·à,¯ ñOÂÓGÞ@¸4}í Z÷ÀÞ±Ø@­€5 Úh4Э(Øü óðGÌø‡àüŸ¼õÌßóÌž<`·k}Â6ÍýÔ.¼änK,sõü‹<·Ú ‰€] y£‘ŽlZu+ðןH%Ÿ¤,g„Иb¾<îNóÔû?ùgŸYœ¸Fk°§uÂþì!ƒý™+³?q 8¾?"wÀ¾ó–sÌ L™ž¤ò¶LÌüyD>–Õž‚DG„FŸš»±GzAë}µVΨÜÞq ÷#åÃøÖA11ãœP~¸t'LƒÿaÐ/ÃôD–DôÁÀ3½¦ÂûÀ Ä`ÛÛ,çÔyVÚ@Ȥ_$/ùäi)Ÿ÷ÚNïü²3œ­Ú?“sYk)–>Æ7@þ-‰òÌ¢`÷1·Þ?™ އ/ú?ðÜ¿éçS»P(F¡F]fK«<îþ˜·+2]LO–gäZD<ïB7!:Ý›jó®ÇD¡ЈÉ|7ØQöç1ù‚vPÙ†v!ù,ÄåçêQƒizÙŠ\g¸y‰q–ó,\ûûÐÇ™ng1H ä~wçËiŸý¥ƒ–þHÐ>¶¾Ÿ]•dÜj6è¿2‰\åƒAõÃ+?Ç É0 Yü¹žy丿G‰0!ŽNz¶Ïùîg&È6lÿäO¾ûÏ6ÿœòsågUüÐ<ž™™Í.@RGS½o~Ê–~÷S¾™:‚í;A etcÏÁޤ/ CàA~HÿíãìÓä½â×.®LõCbÎDEý§_ñH#ý ³ÖþfÃxÛL¼ÃòŒ‘3ñ¼íÔ¿1ŽFžVAˆY|4÷˜œˆø~{xxø™‡á•ý"Ëþtú÷?ê_ôEˆ¡ýžl•çnð>'Ì´õ¸¸¡O“Îß´í=áhB5 ²//ë.üluÚsÌ<êeG|l·Ÿ¹°¿½)\…à÷€·äJõàó¾bé޶çÇQx“ƒï=øþ´8q Ä+ Ã0.¾8Ž­Fmúð4Ùä•áù‚P¼nFÞܾÿ(~Dv<ý­ülÌãâ6~`E‡ëñþüËîxÚ3˜9ç›®Ÿ=ƒ¯Ž`¤ƒó>P‚QÎs¯?ûqÉóoμÊÍhgÎ|B÷–…üÔgmËɼF! EËüºó‡å»‰…ï?6fOu0düÁxFÑ3ÿU êW#7ðƒœž¼f´ä­ö×Ây¯–HǼx½àuÅýË€Ôâ>:ù}”i‰a…ð"^ÿè^ƒ›Î 2Bsö^BèÆºWAZA|®`'©'™ÑÐ!sÚâ™/ÿŠÈ"ÌŒº•1—â9Ž»@_àsÞ7ø8Øj9È/Å×G~ˆ¼‰@…ï/?¼ „|ò3Ó”;ÏŒÿ33ËÞ'­O8ßÒ ¢òHiïí‰ñ§Œ²£lN­±¼©•ãS}ñíù)ø¼12Q‚Vÿ˜§­&&ÈFJbþ¾׫:é•1¹^Ô1ɦ?›Ï Ê>6ÜOòõovãˆOï’…ï²Ï–Yߘ c®†Ÿ´)1iåDÆØøøÙ¯¼ Ú| ÎËDqN"pcx”3ÉBÿÏØ¼›kט 1ŸÇà'“Waë®YÂñuÉn.(p›ý¢T¦eÀI¬—Ù OÁ xû.ôÅÿÿøy#þ/ÚÜó£”_Ô®s®÷ýŠô”‰Žû*1e¤ùÍþÐAæÇ_?Î]F9ú#=¢|‡ÜÖR‡çüÿnBˆÌ•* û­É!Oøëÿ­;˜ëüÌì…lÛd¾Qr#ÏGê|(ÇøfqÔdj.tͤý½›/`G9$‘Ý÷øÛ+dðäûF¯÷¹ÿduöÞ„XÄeFysÀ'îBÿÈDÀ‰9ìýJሠÎ)ÿ‚üòèž/Åù¥…¢.3u(¬¬pKÒ3™î‰ƒ•žUû¢˜Ñ=vƒRO kÙ©zážÓõrÂz ÓÌ>QÑ6+œ±»|÷<’¦ÏKJžORF/Y§Ý:2ðŠÃõ‰¢=ŠÔ›ˆyÄ„‰Ì¨ƒ%sqÓ`¤Á&£('¶4”r PLiè(ênŧ¦ B Ljßëm¤Äµ @/ÅŒ˜ŸTÜ'‘r+—.ß9®¼„KâbeLehQ1‡¥ZŒ£”að-u!t¢¢/’Ú&\æç¤_Uovüzƒ6d#£½ˆþúŽj"kÚa/^‡÷ÏY ª0“$œ’žäa›³¢#hµÈÁök"(ï/¸qPnð]È.…4°=ê"Ôud1«jA¹}vü˜[LÌ;¢—K`Y,atc 2È=æê‡·Ç c:´%ìÊ;•=R¨ÌÝ&¬ K9Ž¨ê…Ÿ´½éDuÎ^³c™í\ŒÕË>iE-Nù™Õ»b \´`A̹|¹2{á`Ië~Þ‹HŽÓR¡/FUüd¬m•øQ™êJo­_‡?%9Êæn~¤á¼Ù‹÷£‰ ìMý$#­¤š[Uàû tŽŽY²ŒÂ_Q—œm¼ïñô"fÊ`­ÞWKã ÈZ é’‰ÑJ?^¢ åÞmneŸÙùmq´ó¬‚z“{VJŸ`õ§‡Ú"­p„ŽdÑê³ô•‚©%X]yVJžŠ·˜~$ Mug‹‰Yim¥J߈ëçágž¢y“¯É8¯èµ`IX[‚\ù<Â7l³ýmVël}_Xœìo¤õÚÈ%ÙÞ=$*A]%icäÐB¤t»˜CìMŠI? üÃe¯†Í =•÷ÔçùŸ!KÀ+LvÇ€ €&Ù“zr1œs+±´»YQà ãÀZ<›zšW6­mF§X© Í¿ý Låt§¨´ö¾’H˜ƒË¢n¼ ó§ß¾ˆ]ÑÕ—eQ¯V ÓQ£ßY™àpÉïçgˆuçÔxÇg‡ Ž|YÉg'Xàñ­ mu’3º­­4$8ÄNúO/I!¾GÆ‘92®Ôâ®Õœ,áâ´©¸œT‹SŠ»VpÇé×[×^ïœçzãæ/ÇqÏÇà üמyëzçžyçžy¤æ“˜^j÷Tèù7ÉÑÛä"[ÊW£ƒÛì^Ó“àðº“a€ &éá9òSLy: dæ Ù³®ú•åùœ ~O§tœœúŽ=‰§‡ŠNàä( C„©ª­Jü ‡'gà‡´äù˜v>Ok–ˆSVº~]>^}é!ñÌÔãxÎ8 Q> @òöÂø7‹yÇ:+§…¥=‘CT!ʧ”Óʡо¼<žCìy:8¨lÃUå;|/z´=P ‰ô=xFš'o#,Lpš~Hv214ûÑÒ1‡“è#§ÜÁ>df/°øÊ~˜„éÍ€ÊpHÞ¦ôùO¹ÀOÆð˜ø>px| óR=Dù)ÀÁNyæið}‰ÁÑØ…-Ô ãxäøç\rP9ç Èä"v‡{ØoŒä/ÜùAày~¥ ´.‰+Þ ÈA8“ãMjrñ#+Ù¡ "#’ÎFô'!Ï'¡Cž»˜'ÂÊj'ú¡SÉìåø­<œÏ« “ÃñÎPæç{H‰Â$:ú“õ0çC³½9/ub‡oIœÎ±?™Júëáˆr yÄøˆ˜7î8P*’„nÍÄŒ% "¤€R*UPTxb¤å H±BsǺë6¢  ;‘ô(¬Û5jwsÁÜôîpŽàIºTÏݽÎ'NuÇÀ„ áÝqóº€àØ W-Ý9Ô\à8¶ÀhHNQÉ»›Î\ÎwpჩH´3Ž‘T5Kcº$êÄ+ÛTºÂú¡S ²Ú†{¸ àl a·Ã9Ð Ûv`ëÛ @wT2¹¾}ð6 Ø0HOggSpBVX'g‹aßÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÐ[>m³fÌ|Ù±[d³cAÀø+øqÝÜ ‚Bî=Ø¿¨æ%‘ B’—qîÝÄ~š1{11ƒé‰D¨»7v¦ˆ,Q‘Ñ£óA%"@òÍcÈ¡Y­„`B!ƒ!åWñD)þâò¨Ÿ¡äCÙ‘KËWáPO—ðxûÆ€i÷¼Þ4{¼Þ=GÖ>±Ø÷ã@€ûÇÞ;ÏqØûÃ7A¿paØûÆ€Ýv7O¼}ãï÷€÷Ð>ñ£]¾ð>ñ÷ŽÆq÷÷¼v>áæ<Æè=À`¼{ŽÇÞ>0q³ï@ ܸÞ=§ß§È<ǘpƒðLãï|ì{¤kïÐ 5î=ÆqÞhÙ£±îïØi 4hìh ãGtÑ£ï£±ï€Øfà4€l#Fµ l ÛDxìv>ñ‡Èü¤}¬‘ñ¾gà$üŸ€ë°Ð€Ð{€>ñî `1îÐh Ð `Ý À4€í÷‚€@áø ¿Kõ=Ÿ=øf£ð%~ 0ÉnDâ>Þb5–s¾Ö™|Ï~[ð'r'<ÏÏmúì‹oóÈ’3!#¢ZÙà…ýŠw“2&Û:‰ÖXçSÿàŒ~žÕþY"oO^bt“/Í_’óäàŽuk› ó²w,Œ¼j„páþ6„`ìJ†¾Ïož òܺ2·#ÊŸhë~tF"yæ'Ì#ôe—Ä®sv7œA6r,Ïͺû_÷’?:%N?h¯°¼tO‘ø•Ëçà 2ͧ˜þæ9<ßR(tB6Ì„sˆSFp.¥qDü~O7"WAÓ¯ƒ#¿<‹ÿ(ÀŽ¿âøy‰üà@»†'p—ð)ÜÄÏî-øÿøƒÊ–hoæYÏ=ß‘–ÆÄÌ­½¿yeŒçÿ‘¤>Äýö~ÆêßìƇœmæÒ<Ç#Ï(Ü[Nù‘äöß΀žÞÂ'üe•î…ЄdY-ŒÎ©ögçyŠ'ÕÙE0ÄPP‡ƒBóþÆÿì¨?=.:ÞB/Û-·Ÿl úÊ× ù˜¼–Ì?¾²ÜÏÚ#–oŸ¯iÒŽºûåööë(Æß#¢N ~ÐR¸ÎÛnŸ–B1úƒ"ÌòÄò ÿnwä{æcOÂ2ñ¹«ðÒz3xR¾^ËKøþÃo” mÎ?dT¸¸"\Ïóäêf<À¼ÿüÄ¿ŸÇ/Œ ^Gñ–kÉX?-¹äŸX¼1Îvý|²ÍN<¯|Jè…ÑÉýuÅ>BÌ–GÏpö³2ƒÉ]¨uæ á[ˆæÐLïß›8Ë­ÿð aÁ-Ñöãùñͺû±Ž#¯j8??ÁŽÐ_3þŒsízñ‰˜–róéa‹¤Ä1˜h.Ðkþ7…!¹âœç¿'îËý.@žüŒ—P¦hínÙŠ¼Ùxçÿ¯ößmóU–XüãCÙ(üÌ̾7‚ø,8ˆ·(VNYbÉ,šw®ñK Ø–~ìˆ_?l”Ÿ#îK0ÉH<ç(°ðeé&Feâþo0·D±¿Œ¨n¡¨ìK3Æn2tFÐ<Ñ.Œ ¡Ç?A‰G-ë´þpu*JIŽÓ¯ì•Þ_Ú‹müüÌ[gÄmÌâg»yg›ìDÂ?7²òýÑÏK‘'6<E ]D)aÜ|—?ro¶û!lÐOƒ¢qÊc“× (¼BHÜGœ¼ŒEôxuÔluÄs?€Bød†>ʼ&c©ø 2\Ë$vŸ0!‹ûûïÂøþæÍ:ŒrWœudoÈý™üžycë,íÙí€\ë´/óÁAÁmÙnóZcsÌM¸yBø²Íök²~ÞZ‚ùyŸÍ囑.郱&œ05¡ÿ ödBð-Jd燩"v•ùŒè5›e£óós˃/и¤ÝAÿ¿m5}ÖîÔ3•¶ÛìúŽNâêzëˆ[( uÈ›X‰ÇG4øø„m;Äl¶ÛÃB&ÇG•0n„D£mð ,ÉmAÏOì¼mϯä–vÝ%Iù ·\‰BNš(N{Q<!§èÍ–ŒP[1´X4çtD §ÇN»Ä ¯ýˆ‘{?®¢wzîè£c6M³—ÿ0ÿå—AA‰,^ì'ãù¶ËõωVß×_©YÊ3É<Îÿ´èø1+mκð)¾~²6S½†û1Š=OÁ¾©F„¨Ï+à ˆÛ}¹ Þ¹üç#d_ç‹®pG’Ø9e˜›ˆ<¼®¼úÝÆG$ȉBûÇ?ûÿ[ˆùç5÷sžÆ]ù½¦KðäÈ›cÛëc£îûÊùFlgâÞúÑüN{‰œm¸ƒŸ÷Ôæ‡ìGŸ¹¾§·Ü]÷OÃãàžA1ÉÞH •ÍÅ]m¼ˆÙx[}T"¢{H–E @úoY?‰‰¿Àˆ•&ÁønnŽ`‹ Ÿ„ýŒã,ŸÄƺ¤]|y·ygàŽn)ÙKîIý¼Üùû>¶ÝZO‰ð :Þv#›ò¼<ïìqíõ˜ùI þцø3 `œ)’›V ¡{ Tç!¬“àL!3,ÿS"Ö8Dž³""&B¹"(ÏNÆ¢#Tym¬ù•Ñh3’À£Úº¡\ÔJƒ¼Ôô{ië4N1ÔCÂí8Åå:›nBa…ÝZç.–°Ž”RF0޲\½²VÚ/«–3½öø?©ü‚í²@Ëïɘ•œÓ4¬ý‚X\/%¦'õÂÒI™@Ôàr3k—‘ê–oyˆIðJkàßA©`µæ-O@çm’©d»±=O¿KDÝxyÑEkóW×(ê"™È­hÔK"åX[¾-JÖXý6R²Óõ%F–Ë^¸GC‘+#oiöƒHç ž@õIÇÖ‰¨åqÍr ¶18>DFvöþCäm[9ìLs0qˆé6Ô{ã¦VL™Q•LÅ(2E¬G¬>§'“ËKÄ#ÓdXqG¶ÆžôO+)S蜕< r/Œ7€°I%æçªÄ_È8.› âb.õ-<Õ°<ŒdoSêû‘ÒŽÃOy£V‹ÞixU“•~bþýôf•>$$á ):yOi&3ž‡Du¬ ÷R,ˆžwkj';'£a1bN3#wÄ!¹Ÿ–ÏQñ„Š$•ù eÀJ|QÍBöDN‘•…²F|5·(XƒØ~‘›Jܧ¿½èA6©¥EDt”} èêjçF—6TlR6DܹšKÀ\èKæ`\LÒ$£QZ¸‘éf v‘ý I$¼Ø#I"ªÍ©üõ%È.Õ‹C4Á)ëÀìÒÏÍ~ßõbAcÁ«‰ ¬>¬×Ý74ú°·ß?æM}yHiä.¾î.dþA„é.Bþë{×UŽ˜LêaWy°¶'_t‰ÄàznÜ:y£™~®yBÄ zV¿!`´Ž­ØE“Ëñ]iXÖÖ#úïó3iEüßš-ÿþÖ.I[D¢Ž‰Š©³þg€30Þ¥—ªæ·ŠkgŸds§“QÉ2| àTw^'¥)Ž¿^jm®"ð ŽÈÆe¼£¬ïÉ”¨Â³â"Úõ89éÞù$÷—Óìžül•­kdr9ÛO¼?O •àzQBãpÉî„dw8Ì•âYžœ'ƒ‹­˜f²bfO<˜@îfIÍÌá˜Lnž ÙHëVÚÍÒGÁ×Y‹µ8«±âó•³q8«˜›‹µg 8jÀÍøW* ·*'*7Ìõ Ðßo"yßσ`”þà2eÞeY©fì Κ}äZÿ@úC‡ðxq„x‚`­5î xŠÂöŒ~~çs—³³¶36<ß'3vµ×¥’^‰XrÊì ?`=ŸİZ)ÔO µ& jùW´e õög§ÇÅ^DæúA5BýqöwŒ{ #´ïä|_O³yù±7øäùhJKƒ÷{1è aˇz^ô¬aš(Ô}]‚ ¾3’™WN9”>GgžÙ@~ ÐÛæøÎpN(ÓO¬W…QO²‚Tµ¾Û$:P'Á59€­R¸ônñ(ð&õÄê‡ÐÞà“¨'YÅ=èvÃëWÉŽcçuaÙ¼%%‰SϪ vJHü&·Ä u yòü_ÏM†:ô¦h8âÌžÎÎÈYjÜ"ü@úüùó¸ÑöÚn Ñ¥<Ÿ>|_ÙЕúOdl.¶ëc ¦¿à$P>*y0Nƒ::;6Äœ=Ÿb ñžß;|Î'bxCúŸ²ƒ£òp'Àí'sœ„€:|íàaÜ0‰°V"ŸàŽðB %)ŒDè`Þ„îyGQ=ž··Áèˆ{SâGO@ýžxNÏÁÈçÑR€ò[ êÖN’ú&ðw\ (%¥ ÃT‹Ô9 ²…@¡C¾täég<û:}ƒì­:9[€Àà{ô3Å(H­€6o0PªFvíy¹ÛÊh+]¹w0à2•íXNêKƒwpàÄ‰Ý EN Íu"E¸vµN)œ]Õðnbæè“`*ñ°³½ÛpT`˜ÝÕlQJtxp€ {åƒÀcm¶Û()A"àR EB¢Á$P©"A p¨„Š5„‘„‹¼}ãï43ôbôo‘Á?÷à:ü!\ ¿ƒHÇá=™qøüöû#å;c}äQ¿ýn&?<ù™¸DsNüùóÇ‘Ãr6þS2ÐÀNÿôuÿç¼ |v6×Û€.¹¶$"Q9-£Æ Z»!É#3n Øë‘ñú?¸ˆœG\®~º—]tOAÑúG$åçAψSÉŸÍŸ¬æ ø­v}¿Ë’¿ô°ë)óº„,åý@¥ûðÞT^A}Ð(Äüñ–LÕ<ù)^GE£ð:~™‚9_œòFH:çÖEAÁ~'äøÎ'¨þÜD¿ç~Dàè1ȼ'ÍûæüÉûcˆÙø1ã×Gç È\À…$)ð!r&8žüBÛ™â% øÛ5×Ç;3 Kƒ"•ó˜Ì@?°s™[iŸÆB à?¸/ó·‘1<‡¿enÇ3:7P^ ’އù^%ù¿žµì‡ð¹ãnp$ïé‰Ýo<ógæ™™üóõö<Ùþ½÷Ú6»c´“ýAì󠌟¿÷ñ³N! þ¾ü¨OggSqBVX(Ê*ÜÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÏöþ£ï™òAÉR‹ÈB³Ÿe¡Ž‰ÇAÐ/ç+o×÷ül¡u¤|Å œŸ“þüÇEâ-·ÿÎ6¼’wONÆtõ…ªv™#“¹n•Pº•·;䀅'yÅÈS©?˜°³îÂç+x.ýŸ}ƒû>Û—'zÆ^|²yýù0úî'Î(ÙGžxÌû’3ð[òËœž¿™ÜfâÛ"@Æûx9¾Ì(Äî¦ùùÚ¥øyÜg.`^{èÌgÌŽþÄO0t#ý· 2üƒä?…üG¾?Ê Iì`gI«h¤-ËȰ1J*¡g‚눙Àò¦ó)h"žqAå#`£^·9“þÈè­÷VIñ9=Ïâ.Yüëf2ò•£èß# e'ªÚ˜“Љœ6؈±Zœàö¯­‡ßU°ŠaÒÄóŒbü?Wô¼ X N¤˜õÂu¹?áþõjƒL=û'áôXŽÂM•DuÚÒßiS”åa´/btjXs²ŒÍFFòtídhÇBŠ*2sö_Z5!ë¦ïm¹g.âåîשˆÁ->zîCɦbùø+dvR¥R;}íp;[}Ä+‚îˆxFV¬Â·‰ã[ŸŒ’„þ¢(Ã"G¤ÿó+ÙuÝ æVv$‡K[ˆ±O?‹#ßt‘mâJƒ Lü[D£²ÿâ6²Æ !KãxÙíOÆ W3g"J(½Ñö)Ra²Ü’Û?M_éö|òo«*oå%›bÖ`Â/-,ÛÓæ¹+6²-F¡Œb£v™‰Ü%‰¨_}ó%#OøþÍíÁ‰¿RIÔ|Úæã’U ‚”aå3 ]ÍžˆQÌBZ}2YÑ0Ô½væ$Å¢VÕ0È–må7À"têǼ½ïÒ¿&tñ>ž‡ÙSú §VzEö³y±3mñ¹f3À*£ÕJ–°,:4÷~·€pÉïä²_!™ÛÆpôx K=Äkêx=ß—Jðy»xµ]«ç˜øÞïY¾I§;ˆœÅâ,›*–ð·Sq8YÀCè8ÀÌF£É ÊŠ¯¹ø ¾•Hr‡ÊwñÌ'Tž}Nšw‘ž_‘ÝòöÀÀ€ŽŒÕÃÉÑÛÁ§GIu$†½oÀ…Þ49I”((8aTB×x!ÃB[ì„yVû NÔ‡(’¨P{}£ìëœäðû0ú BvhŒJ){¿2 õ{;=§E¤V‹Ð!¤‘Î !ÁÒ’ðv&H+GÈ Î pôs\À 8£z¦ºBÛÉ“Ä.L)Á$Qø_™ÓŸ#“ÙïØ¥Ð'<ä9 ÷=¤õNSÔà‡rüµàù ª}ÝcMÒSâp&  ô"Ç’PˆqBsÒ‡aïg}ÑÄú=ŸY:7´^_,s+àåsÌø6žYÞ zUK|ºk¯f1™x:4²cNÑÖ„ŽÎDàNw£DÏo“9¼ Á׃٧ƒ£ã)ʾŒ884À9, Æ™&SÅ{róÍòlŒ;œ?ÃoQ->GB|^„´F8KŒµÆƒÁú ÊP_뎇Î뼪J™‡²¤–*âÅIÑȸ"ty=gD„ɽüf¾ŠAzÅâæyìãV(kÍOƒàT×»îóW—H"ôÜ|! tÐÀ·„2¥ª­š)%F„¬Ú4ð…yuõÅ‚(:1”É¡TµÉUN¸1N”Àº‚ø9:8ƒË§ƒ8>iGÚ€æbqP ™©F½‰DÄKA”-_ ~"x#õB ÑÑò9˜Vœ´á!‘Qìt9 œ¨žŸ'¤?©<ì÷#ù{ƒÜøe?G‡™Ø]Zy5è‚9yCL(|+ñâpp#ÑÁéËù)¸PÌZb½˜u8ˆ<“ø€x8~ñ pü>F8}Ècèµ^×Zyžß™J{2lÐ<Í|¼ã6…Õ6}#ÃèÒ”'gu >M ÃÙ4íz_Oĉì\ß%LŽ,ø¦&ôËÐqE9$‰Œ{™b&v{fG.aO}Ÿ»…©üa !M‘+{ÕUuU¶µ­mj«j¬«j»ÆB¯)UWïg¤Ǽ!EUU*”¨^õ«Îïò‘]Þo}z½Ö”¥•Ô)Uî¢íëÝpwQW®éR½Ëi%IP‡Wª÷Z‹MµI*­€Hêݸ©õö»*‘äªÄeN„½ÕO;çm*•tUEAQ;Î÷[ºƒ{zÜÍUU*%l‡"ŽjÖ§hµîÕ^w¹BºK´"éQCÝWx-îÛÜ÷dšP€8 Ѝy‚¡T" ¥w»"¡J'¨€{¹VÁqR’ @(Gºð^ 0 ƒU5A°!€Œ‘D^ꪪ¯Uz¯Pc*R K&€@5¤‘%P$}þèBRÉ’’VüO ¤"D! hB%XÎ D„€Æ Fõ ¯¾´Þ>ñ÷çߟx÷^õo`‹÷•  ÐqZ­v€`¤ÐÁ ÐA¨Ѻ €£@ª ƨ(á @ÑMÀ€Ð…¸ NÝ´ Ö´*0¥Pš €`€hì4Ð*€(à>ðP`  (£¹ )µ@ì´@{0hÑ€´¡ºïÕ}àl°î=Ài@@]hÐk¦  6€†… @V€ Qhïq€w` hÀV…ì€0ÐèGƒ¦¤ ²B :*dð™$“ i$Œ®±2œµÕóp<æøy¹™$á êkÚ'3Áàõ{I±èñ‰¢JäAŽðy&z¾ÔÏf’¦¦DáÛ_°ëퟀO²~ï…×Yáø9À)Î|–!ôÕØŽߦČ#'Þ>q®)‡“`q>\8̾>Îý —y̓ƒÜŽ|?L) ßN‰þl$lç¹ Øœ>HÞÿ¾CH¾ë¼gìïëÿ¼Nˆ»Ì(†Y΂ØÜâv~ûx{_ÏþÏ e«èÁmg'pDÆH»ÌC›±e¹sc Mµû6+5ø±NÅ«©Ž17Ó%þ˜àÕ©îÚ±ýoÜ›ÖÜ:ìî]É9ô’ÏÏœAÃGk7'ó¾Bo M·$˜Ïs¸ÿœÓÜÆ²[m‚þ.`¶ >/—‘Œ{ŸÞ¢2ld‰§ÿH¼_ž¹¶3J³Býi‡rܸǘ¦ðÅ9ÄüM"ñ³šu2lïô°ü§9¿s‰ÃÌ©Ëçgi‰í¦Fq|Þ±cÌéûqv“Ãb‡,q6moÙæ5g>3?ýæKVVof_Ž;€qù‰?¤^3wëùÄøŒÌ¹ˆí¹AL¦uõlfÖA™#Žx¨C‘Æ}ˆ˜¤\9ÚEÂ>8òËÙz—?Pãç`qÎm"án7¿ñ7¾qç˜æ/ûþŸalŠésÛ£ÿ4é,lUƒAÍ_Ys3±‡uÏØ¶µ0¤ƒeÄH¼r£8|ÿðNãÂŽ?>zñÀ$&4o[ 9ÌâpØ="ñÑâY8!½ÁóÉ¡Nâ7Mdéá´‹„¸ÎöŸ~ÎÃâ}3¤+=D؆ç ëè¾lâ¢-a“¥å–CnrƆVxó—÷q/8‡æ½°¢%ÁÏ¿?ºkq/˜'c>!Ì7|‹È[ÀÿLE0Õúٯ˖wÖìk‰þc¦nY­JçY±S‹Ìó,°¸¿ß¼9ðʈtók\\o‰YoÍ…½lb<ȃï©ËɰÍù–e€yñÊJ|Xw‹g )´)N;‰ôïé&[£ ô‹‡;äŠEÃ÷âiÊ?Ë wÂ쨇/‰€Ð4¾ì[±0sn¹Ï &VÍŸ²é±ùýü‚Ä€Êtæ$À¤pã×À<î üî5G"§bé™ýCqœN1×óà“þÏtˆ‡›üï¡=$ÿH¿>š½”±Üð6Lۈœ®²÷í†6݉Ag&'9…çÛÚÏvÿ JwÜÜßvgç ÉåÁ$ÃÜn˜Æ)êþdóH¸‘§˜œgân¾å*1†â–{ò§¾ÎI¿”ÌLÌlCïÒöÊgž<¨Ÿ¦§–ÊÇ6{j1Ÿ?Ô¨¼2)!Cÿ[ ^ñ‹0ß·Í¡F8:FŒ_>bH•ÆNƒÿ¬Ößãnh©Ç™çsé§å×ÿÿ˼œbI§M;ȤY|eßÏé‘sŒË'¸•?4‹‡´ã£q”´p¦)ÐÊæ¬Î™Éfö]˜¨]|Á¸©Æ¨™ÞææÌφυâ$Z Z*ObÍò;1ç7“ܘ±§Ÿ¿q¾Ã…=÷f`Ýk_w‰ˆŸ£DûÍq¶çÍ8rä‚'b3g7þ·çR§TsdØkm1‡sˆ‹¼âMÌ9d/z†ãþbgÎ÷à‡¼ÀßðåK‰‚‘ýåÙ÷rÓÓtÜï„ ±­3ïÑõ»÷ïÜ›&‰Šæªò¢Äç cìßZìËŒ™¨‹³Ž[“ÎI¿~õzo½ÿx»)ÐÇ8úk_Í„ n÷/qÿÖã+(þ˜‹É²Kù7 =#¾#f‘q?ˆ›L3²ì¸Ùxá:÷èOZ£›uzÞœ³…Sœº y¿zÜÞØ•›ÈŒG{cÆÆg£¸|¨s Çä,Ó&5ÊñŸœy×8ßÔÜ¡ÌÒ·kÞFWÞþù ­¶°×7¹uh1¿ »Âê9¶_ŒkÎý‹ÉŽç–||c2ÇÞoÛ&M«¿¼Öè¡C[Ýný¬¡g®¾3ÉI-xÿç~b|oŒßÙàÅÛwùù͞Ɠ´ª&†ìäûÞ¾‰ç÷ì¯3+ó*7Ïýî?ù;1³~ø;¦ó¿Æó{á  „ÜøI"É.¨TŠdavÐ0qùã5ªçHB¹6w«ñ{s“/3gŒ9}Ëѧ!O„×]I½K•\íµe)5‹@P%1]¡®´.œìjÝȺ±mœçÁ‚nóöš^bjªžr쨕¼ï ­(“x¨sü…zã… Ø€Ž`àqñf¾FkT€TÍê|¼!5¡vUz4ÞgHÖŒ¢ÌzÒ]€MÎÆjMOUÌùžÏ¢V#oVÏÒÞjhB„åOÔ䓷3ö…ýÂôãˆ&ž=H£PXbœÄü L 4¡•c¯Ìk+ƒƒ³P+Õ×Ók¸à¤âi4ñ)¶‰jK)‹t/±‰9cø­%zЮ1îXÚ «öMûàIHOyŠ4ùµL%Ú ¡`aLšyƒ…®YÁf°2´°²þÌ•¨Òfu¨ƒR`Iˆ'HzèÒÔgbmcH‹µ“õp]röÏÑÈ“„H0b+GkðY¡pìåÏƒÜæÚSëiR« ¨y$Òê=DÈ&k×]o¤Ì¹áëQn„³WC—sDH1£QQttB­”g|ô¡`IÄ“DXÀF”Gª¨­(ÆÕ”+TF&¢yÉ2¢iz>ÓÎ~áVt]Þ ¸•¿¶íì5òfÒI´©C9záÅH¿t=QUÔ™mF½ÌÅÓ¹î ‘ìõU'³Ò}D†Õ¤$>J÷¿.f–ru>J¡(Ú›ö/n$Úx\Lñÿ>Ú=D/¿*l+÷Î%Ù¢Îjy”UK>%^1YÑO”Xó¥" ¿9\L(ÒÍ“gMqUuq~ø{IZé6¯ˆê—:A ´dO ?“HåH§šC×Héá™6‘ñe*HáÔÅȕ鱟ÅÏDŸh)/{º¸)ýî¾>Õ™I|zT;ÎéqX»£ñ¾öÁó\4°#˜’wyÔË㫈äŒÛ¥Òó«#GêVGçÒCõûU÷¤£ñÒö9•…סrŠ „I«]³lŸOÊ"l/íœé=í:D”p$ª·Åc­9z£o׿å"ø„’Ÿ+Ì?àú¸Jx%‰6Lm•Ïð}ý¬d­\b³Ö˜RüØ…OOTUÑDŠ’H?!÷Å7ø­ëz@µÍEâµ×æE#kˆÒ¹`¬MµdN_°³_#ëZ×íà)ü”ž‰}¬/¤j|«¿þòÀŸ‹~*–W×byWA'dl•"•/î¾Âârñ,*i6êyýÏcudqEä«X›#rÄâiä¡~ç¾,»W0zµ¡Q5~‘L/O!)QA ˆBÄœÔ ›EΦc7à› ˆ%$I ,¢ç²³CÉ·AcèªX[Ò+„  U`ˆD®Ô¸]\(§¤Œ[Ó½“*èÛÆ1[g·zá4 ¬Hªm=%tÄïšÇKŽòä°qáâèï8fÂ^«S^ŠÂÛJÅ0ã¹uз‚ÙÊÜá)ó` „òˆsÄ×½™T£Å¤·‘ZÀÛÇá‹*ÎE³iÈz(0L­3…˜H˜žrÕL°Š=K½nè,F#‰wŠŠ·T‡Ý#ÌÖ– \G]ÌÒ§ƒ¤£À]^@zé9)çÙkWÍÃÊ" (æÎd/&f ÍSÌ3ÀZK–ã”ÃÉ?ÊÇ̖ǔ̯e3ê>a>c&Ðö£&bÍX'™‰ð-ÉDTRÔX”²Ñ5æ#¯ið¬T´ÞJ`øÔǬ÷Äú•—£yhæ¹Ó§v•YØÎ5Ëž–îêä÷½×].£6ÛõY÷˜Yo1 ä}Íܧ­Ñ:\àPPH˜ÍR ô¦›–<<µ%ØÁv6–=æv‹lϳ¼ï)‡uñ+l+5Î<ñ@ŠmààT™:Ò‹N”!AR`{]’—­ŠŸU T>'ØŸ[>&TJ—ùEï¼’l"a ^O‚­gŸ^AAO>¯^™å’têNäÓÀÿ^Ô÷}òeÌërãµKæ·ž—§Û£+œrê%~zâÈBé+ œ¿¼odºÊSiH£rú®¢t¬¯Þò’ÏÔ9ÜêȾ/Ñsª°'BM?E”ÒJ+Yº1L:$¿»~ztªq·\&’Œ{Üz©•‹eƒÆÀJKŠb£)ôS›ª‚Œ7OôÁÆ|P@âE1GoTî!(­9ÀÎÙlär½Õç<ÓæZ®vü­•§†4ë~¸ˆ¹xê€pÉïðxQ3Ÿ4ç×ÃË”ŽW­i•Ês7œxs™DäÇ ±âòÒ×”†DòI#— ½å]©Å]«#¡ÌåjDÜN*qSŠ»Vp™¥Ñ¼^g‰Õæñ¼Þ\Î9æíã%ßµø#.‡0¼óÏ<óÏ<óÏ<óÏ<¡íês#ÍOÐîg²ŸB˜&ˆ=Í=ˆæ'È€ô T§0Ð~‡zv{NX¬UrÀO³éÑ} Ãò:ìOm‘}å$‡Í×MÀ–KÑðsy9=òè”øXþë—„òæ¸|SÈŸ!bÏ©ÇÀ亅K烃ã†Ä û‚;ø¬4¬[‚{Ç/9yª^ˆ(ÐúÙ´`r·šøoÀŽ¥<‘)G†òt{‹Ùžùì œo*á_ª–~¼åWЈ}À•ðh{x!¨x¦Ÿ‡`kî€Ç·åÑ %`CH´ì@ÃîéÝ;9a[Ùu(˜ñ?üÏ|‰‡”Ô‚ŽXCÙèéú°ADíÃÌåëOoo‚WÛ@9áKÖ’¾ 6­ÓÒC±jààÀy@5x OPj™>GÕ‡ƒ~£©õ;‡iE/ƒ“e(cEÉYaÅ¡ó4tìòu4Ӈ˜¾IH4ä ΢LíYÈ;y 뎸çžó ÞyëŽ÷±ð—ä|íéÓôs„ôñçhj3æòÃmôxøañ¤S³àUŽPÁ—ƒ•‚1pø€™ ,€F§×Z@à÷z}Ég“è|L>f:û>Î…‡E< “̨¦\„wyÂg\ž† ¼=‰é"‹ÓBPè³·¤ºCÈ^ÏC”Cž€`|87Ãñ?³Å‡·îrrG^D,+¿vã667ŒÀª€£MŠl `ô[0Ø66mW£À'´T˜„›&ÌçzìöÖ¹Œ,ŸUUU\‰0ƒ³yaÜîq%:ªªäJ; K”{·pzvŽÄ¸,çhÊ«¸ÈÑv ’zj¨àwuÎÆÐíjRØà‡nâuKäæäŠp·;vÖçîÊîÀ 0‚å@0gpHDKî—ÀD¢ )vìáT(¨¸TðҜݩP’.@¯ˆ (¾"ðB]÷>ù÷Þo›0\:Çÿ"Bûˆ‚ Ix¸7ïû”J?hÍh$ßêãþ‚'í —( É‹§2¤¸_è"êT„¯óþ Â'ü¤¤¯úå#ÿÔ>ÀûǸÆÜÝ ÷¼}à(Ñ£Bhc°>öƒïùî0@ ¯&>0£GÞ_¼¼vz|ßxf€÷x¼ßÓÛï×cã ÷¼†hûÀ{€ ã@'Þð>1 4ŽÆ€Ñ÷¼cÜz ;£@'c±÷÷¼{ 4hÇÞ;{Zé÷ŽÆ€ q  ¼‡¸iÐ;}à4a§¸Ð ïxÆéØÐx 4‡f £GÜ=ØÚì=»éº€Ð£¼ûÆ€Ð4}à4ŽÅ€Ð  n€èŽÇ¸h>ð4}àØ`£‘¡òœ9µ÷Ìx<šækÉ'_>&¸•ÓàG/7àøƒèžo‰ø ¹pïî T{G`>÷o½Ø5­€@€Ð{€@€÷xpk@€ ` ø?à‰©=€r¿Yø‹$eþË´ Ù?'=ç‡ Ÿ,Îß<Ñqu1+Êè¾&Wü¢^AÌò8ˆþTb®(ýx¿SU’usÚ#wNÑÆæ ø ÞÙb•`s?2ög–ónb Åý¤ðG9ñ½ uã¯ä7þŽÓ'ËÏëˆiI[È"~ä[3Ѐ³'ÌŸö´œå¶sñ`ŽXü¼0(û@cÂ|¾ßÌ<Ô£¤ÃÅ Š&ó! /·áyŽ´œqq÷šA·glg³û}Z\x'ÿ۸س…ÿ-t)¥ˆâóÔuâw_™ÒãÙä3·Ú¿ÛĪXYåø£lz@â´ÛLqa°÷Äðƒô!@cã´/ø|½ö¡­€4:;f³æhzAZ2ógÛš;?¿‹sž€^w·j\‚RäalƒÑÏâgüzXnÉÌӗ属hµ©ie†G\GþðDZ^ðÁÏ€G;S¯ƒQ‚÷噿*X†#£ Wß|ŠÅжß=¤~ÇËwô| úŽ?ŠÕÏ7œˆ¥Çü·yñÅ¿Óü­×œ|“<ÙjߪÏ0ü6‰^™©üˆÀ`…œãüL{x."ó¿ãŽºÇ/í~¿u׊ gŸ}¦`ˆßh$èÛÏê)qÌO‘ñÿ¥‰^2ÙžNbùQYn{9cøêvÇÈØQgËl­ñ.õ¦³TÆàNó”x²ß²ö~8,þ`…ãõ+«,âý@cÞYñ¸ƒ¡±ˆè]§â•×¼¾56Ìc÷¡š,£ngñ83~ŸÁ©ñ–Ü“û/ûÙfR—ú\‘Öaì,›`°4É÷Òµñ,úAH<™G CúVêo ãÎ?Çí>‘ŠËÿ0BýsÓ24ÿçÁÛCA¡tÄà¿ó!åÏ’›’ñþØñ<™"i‰¿ˆü±Bw2ÎGæ8/ÿÃOggSsBVX*'.Úÿÿÿÿÿÿÿÿ9ÿÿÿÿÿÿÿÿŽ×‹…áA·>ª›e{ú‰çGĶ róõçlóæS>&"dÙÒ’éP)ÙèÆNÕàžo;Í`QnÌyò4#e-?Á<ûÃÄj"þŸŒö9’ïZš D¯Šbr‰QEŒFÌ¢™èhò…ÎÂ:â‘ùß›í¼Ù‘YlO¹jñåHÃ1ñ¨™D¡;qò†Cù;_‘§gqû÷Ûh1gœ{5b„˪é^ðùxöyûžN¬€›þz›1ÄOöÚËŒ{Ì_=—Qáö„uæñ Éèð(Ya¾áåM‘ñ´/9lA‰3ÿÙeûí³Ö«­>C23© §óÁ‰ñÃÉÛÚ| Ž£¡ž_!Ôsá÷óÚ{À‰‚ð_¡tG¦z<.»O㘠B9O|$øËüy£°üˆ×†¡@øý¤cò'~wó ¼þÓÛ-:þ󯫷ò¼ÎšÖ\ÅxÈ@Ò1¶Ç\F 笽úHÕ†8~0Î$ëœìÎæË=¼õÃñÐÐÇŸy{³œÁ§WxŸŸÛ½±ãhœo"èƒeÖÇá¹ÌGÚ&óÎÁÃã¡B0¹Ï‡÷AsS2Ñ¿£>7cä’ÏéctJÖº#wÖ?3,$Ó "’V©÷ļL™ Þx–ômû?Ñ{ŽÍoÞ;ðÉ—–½í"·ßq¡ÿýñ; M³?HßÎÉg?-•³ÈÌJ4ýtRIȦÙ*˜Ž;Ñs]nÆäÌÀCxÿ¯– üÄ!܈ÌDßb3ÑÙ¼‚%iû#yï‘ÏÄë´Ê_Ù÷¯Íe4¦G‰ägˆnÌÉ‚&xy¤p—þÝ<01­GX‡ûe…¾%í:èѺ=Â$ŠqÊ„5¤qßýçËí’8Ó@~°´§ð—ÿÌfïèÏ6w†I–KCð6|~?[Æâ4ADt‰ãnÌí¿»Ÿÿ[ž¢FêäA+Ñ:Ž¥¤{/žmvþÙ£ÈêpQë©tß-<˜ÿXJzH´JÍ.¢Dæ±S‘³ï¬ç/I I¥„Ì(#“Î®à‚žÛj1”±’žñë÷·÷*Þ¨_®ˆì<›ž9Û¥ ÷Á#Õ("_k"Ñt~O¬dñaìJ4𤄟8"#8O€ˆ(Ŧ®•¨Î Éqµ&}’†ã0û/R±„¡h«—ÎJoD“4òIUÄ —¼$•Ë‚êH§;ïôгÅË–ÂCÌHJÒ-« ‹ôô.Ý/ŸÔ9œÖþKÍ\¹»ÊÒyˆ`%~ô$N·Ëæãcß¶ð娨aD"KÂFsÚ×nóvf)ܳ@‘v×0‹‘$öÆf7ÆÈ¬" ›²V¬ªG°²ú Å ZR/Š…ê„j0Û!¿>‹îŸCßlŽQœb©w>ä&=Ï|vÜ›–_GRVCÕTí;lw•Ê}òì]qÙ gìƒÞ.{~û®drãìfE œQõš56‘j‚Rb3$B=SÉ«_I8<—›ïXÅ V(\Cu9ál-‡ÏŠŠAuJîžcõk\|‹@±þéLb®ÓÃΞªÐ©ZË‚©–Ñ+¢d¾!12ŽHzçiƒÂ˜m oƒßKÖ6£ƒj^¡u!|åGïPz­¨‚=TžMå„ö*dá~GµËà‰ê^Û¦'±ó&byYG؋Π˜Ó`ŽŸ*$¼…$âþ£t¹J/!tF—$_HÕ‘BÃ궉 ¢Ài\d¾îP‰ƒóB¨HêtIȓ͚8«‹V™J =eÈ\Å]vO€@Bê‰T^ŠŠQŒ%‰Â2öy‘í>¤_Qk£=¨ö—õ[QÈÅGUüú]d(e<ê*CúN*)õÈžüX“Hp}ûߌnø®îצÕw•eáÕPÚ§)EeyóÁË¢kOÎGCƒ­„š ˜Nü:_™š#‹jq…Dúv ÷_¾Íyžgnø{G-ë³Êô96yUÝ!åu7̉ð^©u#„aA\û{K=R]|ã$5.oˆÓ,9Ï€'K „ÎH®~CœçS+#'¿ ,œÎYB †;ó8Fp‚ÞÆ${ð®³G)np¿R|…ÇÉùU±”äP<¬ÏJøÃîiáÍ+÷êÉø4›D›œ…ž.³JÔÙDÓö§øÇt¨Óžïñ™¨ß§+u*ƒññÔÕNxÆú¨pÉïé‚Lá,ïÆR{xb‹Ùàðäë&KΨÎ8wÉ“Âú7y±œzË•ÔE*"ž³àÉsSy‰SމÌðž…n.Ôâ§1y%á9ÏgYÍâó¼fÞ%nìÍÎwðn^zãžyçšNyçžh{g€Þyè¯gªû5ùœœj,¢‹áƒÑ/0¶'e'7„>¨ B°Î¹‡Õ랦mƒ‘tö÷Û§\öôÀøÀ€\EûNÚð! ÏS±=È¥ø&>K‡y9&:ÏF<ôq(ƒÈ·ªŠj7˜² ê¼“Ô ³äöx}gøn´oÁíøGåcÕ•<‰O‡%4E4::0HŠì$^€‡DÆ3¯E RY„½F ¥]1÷tzÅëâ¥ëʹèO°:aÜn¤Åå¤=…¸žÄùâ{3“äiTX&¤ŠS£û0Oµü7É>f(•¥Åè^x¡ÍÕ4Ž‹¯É-<Ÿ Ï<ÂóÏ<óÏ;ÚØgAžŸ"v{iú)éNUOgÉNÏD¡Éê€_[¡Å@AèpGåC’^À ¬< ì¸cA&‹Úºúôt@!èìNÄòSè}M<Ÿ"óÓÊ^F6Õ ŠõŠBY­Ÿr ‘;F•À_öe qZx6‡${>§±æt1… Ž‹,9;£ìÁ9äc¤ˆž&……wýïpí†ÀÞØÅi¶e¦Q©[LǼOÍâ¶[-³E[aã›Ûf 1U¢s CV=îóƒ;Þ[ *ª®:ÊEÏ=±Û¹Ù»Ž ‡pf¸†Å îsc½³dw 2R j²q³£g^Ü2£€+Át•  ÇØØÝT‹¸‘IRGN7•8Ã9Ùew`©TFÒ‚÷«vFåX9q¬Ú(¤¨X%.J©…«)UJ%ÎR•J«»k™€”Ùƒ#ƒ¸J¨¸jÔª¹Ê6繤Y#»5³†ffe*š‹,8Œ36EzH Gß}Àxx<ã¬oø ‰C­{¤Rp€%HGëéoã¤("7ŸtAâ‘KÍQ=§½"A@—9ç%‡8ù’?é„»õïÖ)¼?d„y×ýüçïì¼}ã¡¡Ó@ûÇxÙ­h4РPìì{€ì¸¸£Z÷.€ wÞ74vï;B{•£7ÒÞ>ðxq÷Ó¼Ñè=ôûÆ€û§Þ>ðŒÐ×Þ4}îßxûÇy÷¼yrüßxû‡ß ÷xûÀ4jýÀhWÞ6}ý5G°h÷­}௼h°hÍ 5ÚŸx€>ñßc#@ûÃ@Ð÷ŽÆµ÷ç¸ûúÑ£@»{»vѯ¼;€ ¼hÕ#GÞ4¸÷4}à7>ÐxÑî@` ÐØûÆŽÀv ðª?Å~2GœüXü_ÅÃÊŸTÀ»ï{}཭½Û±­Ð{»vÐ}ãA÷¸hûÔk·Þ4»Þ; ð~Àø)çOó$F'!‡Ó ó›ÆHqüœ‚aü—=GùÓ»ûÀè9½ÄfzˆûÍ%ÿšÈ¿ÛênóØ± xåÁßþÌ~âdzj©u.+M¥D<þà÷fV‰wœ¦´µòË–qÎ-4nþLô¸ðoÒ3äÐî*);ÿuA§Üy4Ÿ§ÈZÅkÿ;ÍþéŠ=;d|[%øÎ/ñ.~\µf8üúu7,Î!ÇÞ }žä‰ûönó7xÆ5¾'|gCécHžÄI¦øù7÷cy¼Óyòþ}€|CHwì†.¬Y™­ºÇ°Ç9½üZ²TAíb©´è˜óó >cejeî}ýÎ20ÐP¥$µì*)ü0û¾/ÅE¬êHs¨pæ 8žféÓúu3¹ó†¼$»|ÓËqH¼S¿dû“é¿8?ÿÒ.NÀÏÆnJZÍB`Ê×\ÚÜ_ŸQu›—rºìͶ]Q×÷áCüoÓ|H£È“eDY^É{OÝ6?þÊ‚â\-•Q`Èwõ »4ãã>ÿÿ¿Æ¸óöoá¾19ƒnÙ̆)§>v;‰Þ8jÛÿ¿Ò3šAéþä“ÌN¤§y½Î„Lïÿ‘<ŠMFw×SÆ\SIøèÆ&ù¸Äýò )Ñ…ðÙû6V´ÆßcK!y¿~ŸÀæ^Ë㺠û0/&Ô/ìäÄù:Bý§i†¶æ„}ÆÅØqÎJþMïï)‘uCŽl<ï8â_H¸c¦œ5ÇÍÓšC“àø~üÄ‘üÓÃ…*)C—óÕ{W|(‚~xñGSL?úklöï ál‡s£©SéT}±?÷¸râ}38qÓ&&>ý’?ÚÉ–zêؽ—ÜÇ?–“ ?lj‹¼T3žao?ïOggStBVX+á¯ælÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿçä‡óù&›c¶å1;æœÃÊ…§ÿ›ýì\—Mö­œü8üídJ‡¸ðCHüØ–4ÚEØ;é Þ§Ë2AžyðLi]ZkgÔK,5­ÞA}ŒÞâ1•½ÖŸösüí¯ŒÏôüá§ÌUÍæðmËÏÃ?ß €ÓL“¥Øˆ™ÁeGߘ"¥FŽJbŸ¼Ÿã왉º9N‰ûÎúü‰½‘ÇiNüíö"üw©"M6pë…ýü‰äC• Ìäƒ|ss{",FTm1CmXY«³ÌoÂ÷~l ³ ÓnáϤOpN‡Ø6tú£‰4çß¿ÕK·¨þJØß©”]ïútÓÔ'7 Ûˆ§g-[Øqjrø•ºìó+¯aky*1fìc8KYÃ\d QÈó³aÏÃVŽA¤÷„lojëDi1?˜=3’ úæ|}5›˜§ ?¦ËÍ<¨¦0ÿ‡ŒMï7ˆœÈ@¼8w¨ÇSJ a7¯öO.ý•æóÿÆŸa'‡gîXÌw·<ä|u<4v û£RMw1ñçfÓü¹¾=S²?.4þ_—˜”ËÉð™Þ¦¨ó1Þ>÷áwâï„!´í>ßa‹`qnóÅÑ?.÷‰ÜË… Ò"qáÿ=™Ëyß§E÷¿É2u©,- kˆîÄ_´Ã¨Ã…@¤£È\&æT}LÏÞæ~Ì: æžv~ɧß÷¨QÞj‡:oÒ4Þƒ¿íDXpíÛ/iü(tº\ ­Ÿô6~óg@jnaÞåCÀ4Ç—Nñ  þþhƒý6x§ýãx€çÓCgnÈyûüçÿÜàûÿÞÝâ}½æÌpÞÿ÷ÍóçÑüÓ½wÍ÷HF>æyŽçþ)Ë‘üñøþ<ß??þFŸÀFùAðÍ4ˆÖïã•öù¾Î ú׿}øÍ ›ãä|lÿå×€Ö×SÖÄs¿·7<ìwÝìžßY‰„=gûüçâø ¨‘·‹W]šk+d./×%œ2¹0Ç}-DÈûIhË=mo© ÎRÊß/Ôìæ^Œ.m´FÛcì€öÃ¥D~_/²ýø¡Cíþx>—á|AÏ* _×–gí¼pfW/ ç:ñÿÙÙÔœ£ðNÁÏòúj§‰í¼L’›’ ‰Q”ƒÛvϸótD‚¾Gdà}U¤|bŸ!$‚Í\Oƒ$˜TM‚쎨¤¹.Û–y¨§ôÌ›Z×LOÎræU`LH" Éæ$…Ó9Ûÿ¯SìW*²W•Ó™èRTWª„¡@—²q0ØuHG Å]H¥™P-}u!›6ßF Ñ8ȶ%,½dÄõ\*ýÉ|*ÐHPR’òRE#t‹‰# "l°{èúZÝJˆOõV€ z”N’Ãk«OTÌHIö{Ò¯W¼)Øo¹/ú™,  FNA~û…ë¦F*ÊÏ0"uÈY”j!œ¨}¬Q,¬÷ÇñVÔ?í®m¿FâнwøìpR")ÁšBÈß8ß$‰P!H!kYEÛõQJ­G¦åŒ“9%tŒ`ó¥e}JëкwºKÊî VÏü[V S ‹ª FTQ•„<"&¢,{ckjbÐõë$LB%ø+%}þ—Æ äè¹)]@”•"’F4¨‡¿(…LÆWõS©QšõãrÅÏ,ÖÉQµ­¾ø)õœÙh„¯Õ¦0•a(òÿ[‹UH\OyÀ˜$ ’)cÑívýç®: ’7|Á8Œ˜Y3©)GcQÓë¢T› ÌYiA´aARi"˜H™Ôȹ„ b®™ìzJÍN½¸X„øl‰O¡`©ãûŠ.•Óh¶Ñc½g4hÀõPµv è„’‡ç(âWI¨ÀÆj––ˆ‚IIQ£q%•‚ðd “ësQ¨J^ ’J̃ÍA¾Èö$‘òèAF ®Qè˜õiB39ÄOD\}’4UCç5Ól˜B *¿¿¢s„µbL(À’ukRÁïëG²Ñ«w(¿+$!*•¨šŒã)ì~¢þǃ—¤ƒŒÝ¢”@€±HçþÔq<ªÔ,®i¢TÏM$ƒNl¨Å±éE-lî¬vDuØ©_tÏ'ÿW§ $O¤ÏZĬR"íÜ=6¨ö BÍðºÐJĤû!à='±ç‚Š/é¹ÛÁ5f^lNO¸Ãdå.ÜVÕÂõ‹ékÿÍÀl ¸GNqbEŽžòP ¬Ú­uI*’Å=uRiEæÍµ×Ü~šIE%6Ó4Ë©—M‘($I$‚($J%Q È¥e¦$RËõ§—ͬ‹äÛ6X• eÇØéø­Ùq$,’f™û挼ô[뇤­k+µdªÖÀéañKõŒcr¾Ïñõ¬‹ïÞæBÉkë½ÑküüÄÌ,“Þ¬‘HÒeª~×ù¡6aO……ŠVUrÖ ò÷Õ’U`yƒD›•¥IqÕj4Ü •Ë…#qB i„¬ÐðIHÒœ „»í¦·© H²$—öVê-ƒky¤^R4V‰6 $ºTR GB¤W(‘}E ˜°û+Ð)<•Ê£rÔt‡´G|r;½#Àûx3Ú<ÚUå3ʲ9Äóíò¡“9ÄBðà $Ç€†™ÏÖcÀ5.}‘0i¼ãrõv¼:µ’ÏÌÒ=§\üA{œCàòJÅrv ÑcÚQ7ý6æÉD ¹rÿYöoÃ.8@pÉïè’hp ßHc<û<¼áÎOuªi’°§‰7r´N*{ß"MOh§Nž3~u3­«ÄXœÏO9Þã2®Ôâ†ÕºÇ å¼^s¬âó{¼^/Ìݹc›3ðG~«Ç|sÏ<óÏ<óÏ<óÏ4qÊg0¼È|NO³ÌëËNÝ,ò|§3¢® 1‚Sà'aÉõ4š|•˜p0jÓp48=å<Ÿ5R>૤)ñ|ðò`•€|xøœýˆzH½O‚.kÏ4äß"§àåáÓ½>‚ù0»ÏA©®¾¾Wká¦è¢¦hÊñÀÎlëDéò|Þòpa‡‡8N:çºó±@×§V*OŒòr#‡È…!äü£‡ûà_TÂþO YïL8:¶½…÷bXÞ³Æ$< 9+L>@ó¸â«À×ß)t¢'±L<@ðx†Q&Ô§£7ÁªñÂlŽ¿MeàO žHtêÕËy]sâ|_Ã÷9> }ˆ¿Ao&³W\;:Ä·`q~…Ï ‰êò³ÂÃ|W¥;)D #1Ø74÷Q¤šû}½t`Ó£€•@/®a ‡g/;M9díÑ‹ñ%àÔùNÀ& LèSqF€5§BIÚ‘ô’NÆCòðy¼àuÏ<óÏ<õG®:ã®=>ðÓÁñSÊ >‡IxÞÀõC|œAòrq98Ç“A†Áñ¬qºF’ˆáÚ½žÏÐè¦ §rSÙíÇí7ŽÀ6‡ ™Ò^qjP ‚Ôàð¨sc,} \"ñÏdŒq*ô¸ò€0hr‡—ÑB~ŠbÈ xßz¨"¢žEòy:!‚QýÏs¨T xvÖØ 1¢¢… ˆDÑÝ'U‰;¶ƒ½ )G€Am¶Õ™ÕY­f‡:»ª¶t¼c[;š m¶mÔÝÝ·]ÀçmpÒÝIqœmÜà47t&Û(Ò1MnçNÂá¶CpALl]Ǩˆnå…[ “½]Òº\¿ XÍ·m€’ØYîs§w¼w6î‰îVÈm¹Îæy:€s¦$…mÑÕ%S³Y“m·`lÛ Û àÓÍÁ†­Š6»«ºm¬‡c`â²osŒ¶†íŒØm¶Ù‚@Œ°f ͷͰ°-›Lü}ó¾x (L¬g¸?ø9¾‡?÷×ï¾ñâUòIÑ œóõ•{õž$”é$>¾*u!9óPŒ d ’ã]â¡XóIº2ñïAЄ)N—yù$’ =Ï:¾JçIyȈIÞwã½÷ô—xy÷¼hûúÞÀ¿@€Ñ£°ê>ñ÷€ÞÀù€iè>ñØi£GÞ_¿@ xûû|ÿhû‡Þ4y¼|àÜhjýãï>ðöú‡¸ì}ãîxûóFpî>ö€×Þ>þ´}ãï>ðÑîÞ78ØÑ÷¼hÑ÷1÷ŽÀv7¯}ï÷¨}ã±£ïïïÝn{¼{µØ÷G`>ñ÷€ì`;}ãhˆ°¼4ì}àBŸx ã@ú_ƒƒð~ /ÀõûÚ°xìvûÀhí ÷h4€±÷»îÝ´­h ` >gàjüù_„«ðxÉ™Â6^ÛbgùöO[B„~?•æ}ü"áÉ/…;ÎPÄfat|Ï|#ã¯Ô®Û›FïSÙÍÓ= Ç[þˆ’`•lò‹ßžr‚T¯²ã6œ^M¾[Ù󕸟ÇÒ.`äï‘G*Š1øtgkð¼ßn mÁ´/øM½Ëó’c¯úùsˆ_°ÿø…±È]øþÔðÎmù3¾ Ñ Xe ”Cþ(_œ]x¾Ös¯öó»ßh~g0ÎY~(=DK©Ÿ3Ä<cx¶Ãh^vöÄ—:êD4Gò¿Á‰]?> q¡}…Ôý9«¤Ý»¼=lÎz†«:’ÌP—D3¨Nñ?9uyz¸|j„GžfΧˆÁ4(ùñ ˦Œù‡DÑ`,íCä¦(ÐÝåJl~rXÞØö Î^Û&~ þëùG"F#Wº7Q¿&ÕD¶%Fs6ÎæQ!‡¼¾7v€öR Anß3Š6Ú„Æ@?œm<ÉÐ|”þlDe”“¾ûG8ºô]šƒÓoF‡¡©,<²ÌÌøÔz!™tà‰C;ž&%—æRçrÖ)AKŒéq‡[¿¶­åù3G¿5“/ùyü?#ôn‰÷'$GAöŽA,‚‰ð§àÄôQÊ6‚wïÔ`žc,÷3²Ûv¿²ßók#fbym™bŹÔÐØ£™Í¹ñ+QoÿÍsæ#óºç9üœžV7Þ„í¶óævÄmµ'SÙ"~°ÜÍe[±2üôƒ¸`1!ÐMƒ÷¿¸DL˜(â7€×¤H_ýçBþmŸ´’é–vzfƒÔ;Ö_>[‘+Â8ðÎÑȰð`ßžÛqy:žsê|Í¥’|lAáøl·VFrÇêã5·‹> >Þax“žñIØ´Ätïý~ÿÌ8a1àâcÌÂOÄ!Lîrÿ0ˆ'ä½g½~DîáÎÔžÏdÿ=FÒ=CCæüpï³·÷]$Áã[«-3_eXµc-£‹ù!¯Ùm¹þ~x~¥AÔüóR¹Â=™OggSuBVX, ¨YÀÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿ©•ì´ñošÿùá™x‚Ðð΢˜ BóèÇÛí±ú>Þ~ûM ;³³û2B2’:Ïhò¾X aùâ…ŽüþŽHLwàL[;mˆ]2¥2´Î>›NÇ磥]ÚŒç?i£ æñ¶£GWœ_ž  ìXSùÈÖ ãhû­þË™òsytnÂûœÏmÈÒ³±ËãúŒ¶b3û<ØS"“Îlí—ç óÿQÔýa³+e$/ˆHK&^q;ñ´MkÖßyÎÎ~ºŸ9ÿ'÷†[Ÿ)åùDÇ•ù÷ÙFÙù7ö‡ÊÓñŠ0Îç~fÿYHYúóÅç#AeÝ;£Æ¡’þy†d…åNdüˆÆþMýô aàŒ²°ä”eŠ ›“·( #4uŸàŒÏö%xÁ;¿vGÿ£ŸA×~³¶ì¼é—‚$?#eÆó`F9|œVYâ"EFý¯óûÐÊÕ[¬3§V®^Nâ6øó÷t¦aH@Ÿy1ó<÷ã:EÙ½6€R·‰ P˳1içÏÏ>mþb6" BäbâŸãdxâü·ÛkþâÓ3ûñ™6ˆ¾C÷昉çÈDFßyâýx% LQg`¼Ê"Pºø¡Åþ=üëÞs£ù0'ñaŽw>wØR·œÑüýüwˆc™fË6[#ü;ï×—Ým9êí¾aó'ñÐÎúŒ÷‰ù„#m–{vgÊð#ø2<øv¶Â9ü˜âœÑfLÌEˆD‹®N4—†’oH3èµLw#ó‚“©Ú<ãZútÍ(ñ¸3þÑÂN·em¨o»óУÈÜR‡IúóÚϰ(Ä–|ûã®uyœm ¸"#¯‰¾ƒHP.†ÇæÓ&ž:£÷¨Q?iµ}asÌOÌ‘*ñο_$Ë '^ÇÌø ¶ß¯ ËòoÌæ†tsýý™ëˆÄ«>Iá¿áñ8ë˜ü꽛ΰYñýüÞO0þcþY¼ù™˜èó<ÞËKÌ“ ü¼õþÔ‚óÑוТsè”b1(Qщ}ñý»ñùX“¿ ܉Šòƒ.A“ääCúL²]I˜§žœJ?øˆä?<ÒÀÛŸo9/~A“ølŽM¡ÌöêöZ>ºÀŽû±?3¬¼k ¿3ÔÙœ·!ô†$Ê(ÌËò<¯>l!ŒçZyþË-È´#<×°ØßÌ®¸|—<‹:ýÍõ6ÜÛŶLg˜—”pùúÙ[+ØÉˆàÿ'öhiÅã;C‘·ó©ì/—°6ê N ˆÿr“îâƒKTã%RTü¨b{õ6AäI@òUÇ—!»`_ƒ–¸B§¾}bBÑ0H|aŠ¿*ªí•J8Yýq©§®j;áÎnE¹-’6´÷Ζ ‰8–¬©Zƒ=- ñ’<³šíÒçsÜP’²6oÌ7¨r )—Åõ¨ªŠJ(­G­®`’[\³î¤¡9žb‰ÓýA”µ!ó"à$ÆÐt DÈy0,EËéM±ŠP¤Æa9û_ß9ö„J{Ä®¢°y(…„DF @‹ÚI/JÔˆI#=Ò.R&\÷#z@ÛuêT¶¬ŒU¶»KFiç7ª6«ckõÎAr=±Šˆšõ‰‰ˆIåkx¹µ+¾ª"Ú¶”uÍ%¤°²^L¾„®©¨¨S:¿sß]:ƒ¾(‹!1Òçòþ„=½fÏõ‹²J…“îáêVâÇQW2K%`ûtÍJ’ò‰˜ÆóÕ“Þ/Š}_éáš8Nh<ô­ê>’—­(M8’Dd­Ð¬ŠÔHz©€Å9Z!DΧ|RÒ³ž,÷á ß)nS‡´ë×®ÅCá(Ç\ah˜Tp¶¬$Ô‚jFc;¯Æ¢u~ ' _z¤‘·§÷>P™Ö•¬¯ÜÄßÄ(DêË!‰îV ,‹É˜¨ƒ’"ÑÕ*-2û·è«¦¯ J2Å4ôf= „”ô˜W,z9DLDA4¡/cš±J žˆë±X]MKï7ð˜”Ä­”ĘD)ô &Gø>غ.”^•46½EŽŸgÒŽ’¡'ß¾-:Œ_„¥LìT‘„ôÊõBÞ©ï“©É(´>ìák‹ÙáA1ŒUÑ ²¯W‹aÝ&-e9“;掟„éDN6€°xõ_ÀDò8ØY‰<—‹v R«,_d,´iú¸f,õŒƒOÊzÁ5­Gdc'V‡1‘(íG"0ä½´'ÒBg[ ÂEADæ„+ˆ•ëäçî­Ϲ(_¹v²Œ$+?/[š€‡¤aoZ#Ú_0ó¥œ ]$ØL÷Âز…_Ë-3¦IŠdͱ&":*Y8E±=äDõ>”ž±) ÂÒ5¢¢OU…©QD’]/UhTSbkêQâ£)Êf*§‘U‰&ÈÒDjRGNÖØ$‘gYõöƒ¨˜6°#aq #öp ¬l%Œƒ:²ÆÕºÑz寒lXõu–E å.i-Y•µo•ZÊÝe“Åñ,EâÉáusʾ³íd”'²Êרµ®UY«âR+W «•Y˜=rV¤PDšH©A[0›,I=…£HYu¬‘A%I*²„èÜ?_¨ò•_’’@摹d(]øœÛÊ-(JÚJ—ß}ø_–#È’%åY'¥Ó~>·õygöma_ÞIè—•Õkfud­OY\·ÖfªŒ­%uôñÅ_Y_+w>ÐÄ.Úçj¹dòrY\µ•ZÀ¥g„ ãcV”ñeceÖË<Úϵ‚Jš”’-&˜›pî_`ø«àÆæ ZÆáÒ²T¬,¾»qöµ–è¤:@ôÙ-I Q?ý÷I+œÿïÏa(6ɧ¨”üÞô~û”f‘5s"õGŽn2ŒWg¤LÇ€Tž~ðj(©,šödNÞÖ[à ý[ÏVíºNmð‹ªT¯pùàãÀµDW«yïYðÉw!3;±¸5³*b&'J<ƒíþnbG´zú¬,fŠ«š1Ïÿ̯z»nëJè»kUÕ`ú¸J@œ’8=[x¥Ë¥Ùkô¸¦ùq XÐpÉìâÈ9ÅDë[ŽPH¾DOŠã† ÖLÓÅQ䬒r³bxÜ‘åqÜNž/)Œ}O¤3Û;¾å ¯{TÕœ'Fs@ƒðz5ù½¡éî~QO‚r)¯6p&ŸRœÂò· |§Èà8sm?„6Á9ë8QÓI¡¨Æf%åûÞÏ4Šy½ììø›_\Ÿ¿KÑОDµzp™^i9¥Ü@]:y½!ÊLSÌ=&s°æ=bCÓÓÙŒ£La4¥)ì±b·ï§Gˆ<ºžŽôãepŽQ“0=!Üô§´x|”å@K}Ÿa>ꆄß=¿bŒÐ™ӯ„:<œ¨”ø”èòžI òc†u˜‡¡!÷¶‰ÁÙÈÉöCÛÊÎÜÄä@ú4Àöô!“X¾9Ä€|OE!Ão„+ ÛÀö=¾ß'eiñ4»Ó³›ä 6ù<ÎNOG''ƒG2'àÉéö|ϰŸËðô§aC–¿‘žÏ2p@Ì;=ãPwJ‹ÀàO©‡Ä;1òWè1Œ(tÐ#ªvpvàà¢ÎO.Ï›éÓêSÉè÷:Bx0ê ÑS[¡óz«§f„S §Âø*ÆŽÉz€Ôá^[Ñ݇ó)+95_y3•<…‡CB~Fƒ¡ãVFHŠå5Q¤l½@¶±ïMÔæ\Õu–=7—»Umµ-­\ Ê£¦±©jŠ…¦© C‰uvº«U•*¢êØîÕkQWUÔbÛP 5V½@­µKmKvØ!=ßeFÕJªî²ãÕ)D³ÃE—Ô=àmvÀ^’ ­m´Ô=÷¼© ÕàÅ<"ª¨gÚDÀ¬$(”‘1œ ¢“&ø¤ÞRA'YÓ”]BHÖ×°Õ}ãÜ|>ðxûÇÚ(#¡÷¸Þï¼{¼{Ó±€>ðWÞ>ñÓï~ŸxìÜ>ð=ÇÜ;ãï +Ü}à>Ðxì{xÆP4 ßÁÅøBܶƒ@5 Gàú߀óâ~ )ÀÜÏùþ<ÇÎ_–L-·Ýl@•6n©Ëh…çù\l§‰™ñü˜÷û‹£¨RiWæêmìÏþOóú˜0ÈìF ëÎËÛ ‘’‘Ó¨Î"6Ç=ýƒÜŽò`¾Ó(³bOµ—Ì?ƒ‘6cÿ=ùš!lØSþ@ge™Y1óôÈø›#Æku§)ƒïöîªçë„O„pè‘FÊÏÍä3Ùy÷Þ[?|Dć[ÊÉÄü3‚ö ÔbO(?ò¢òÞֹMÿ—ý‰ E›PÏÛщÆùƒc©¿càŽ0¡JŽÎ 7&š›+ofÑa¸Ðý1¼í¼ð:àÐæ$ÇGk(üþWÎ/ý—ëË,p§l®¦ìvIÚŒùŠãû,à¹ÑΠRlü‰¼þ6-³0>:ñoóÆ9ðo²ˆêßmçÆÞTÙÆùdþ?9ežcôq§A/~GDò#›þºÊÙ.X  À™Çó6q,¿ç]u“º™!?^Èáü'ô¯ˆ“Ò̶ˆÄ›.ˆ•¾Ûyò)P-5¹cóyÝÐ3,1µ¡x¡JŒx™Bó©ÜÍÓŸ¿¨hC¿UŸÎ½ðqÁâOÎÚcyÚ_Ð.Ln…²æâ“xÒ þÚÊͱ…ºŽ}­ž¼L­—Qúè,ÈëÉØ€ùÁíˆ!ù]ûõäÙNäg^³Œ‹gÜY¸Éa=|™NógžDË<×]m·øœþÇ`Süyð?¶EðDàú²™ßnÄ/1oùðã+›þÜò#o?ÆÑ?eüYnD‹ “‚…ç™eóßc!x…ƒ¿í ‰Û¨ŸX·(¶Èæ?è‘|³þ„M_¦jþRÁ)ê˜Âê´RêP"Ç“&Kí9È+V]^¶¢¦”éqzÁ|úœ-ë0Z¢Ê Ìˆ'Û„px›F$žÒ ¹3¢/‡µ¬ ⟈={ žäãÖ"Ÿ2Äת{ËÁLs¿íV0zLËšF&ÈÇú[Y3ÊóêŒ#PJµÓ‰$®ÈûÛà”Hˆ5lŠ4ü}bb¦G*+¨ˆ&½”ÓY’Ñ#Ø‹¥Öfr™1/”7©3©\,ÌHõß«‰]™PQvœ%±KézÄ“ÐlÂ-$!-@}¯ªýzÇ\cc¢¦RY”£°½cê ^÷ö±ï¾YF™Í¿”Œ–qЪ²Œ éFñ¥„ûF—b2m/MŠýëV–i&”)«zžm‘¤Þ‹AZ‹fÌH1۳ѣOggSwBVX-€% טÿÿÿÿÿÿÿÿÿ0ÿÿÿÿÿÿÿÊ•PÂA¡w?°è¢R¤=$r%ÿ¢nØÃÊ„tÒQ©nû””Ù~?½s'_¤f`½Z‘]…®Ë$ôVL+­´´û]HÅœå,﫼PzÁ‰ï¿íþq¶"Q^#àa.Ja¾`\ËWO®ågÐÏe™è™$ôO.ÂÏPÕà Ôèô?DßÅ…Š4ùKâöhž…%pÉîEVqãbg¢,õ™=ˆžü{ñásbx¶ã¹¼qe’CÃcœËlØÚ³â5PQæñMÉ7ÞjÄæx¾Šn$Z»SŠ»VEc‡cð$~ÏÀ9Dô r!;Þ”ø¢™éùž^`(¥†e=ÞqÚtv,œÝ>Q‚œ´‘§ê¿‹yRž^g4ƒ®ç S£â/i0€È£Ñäôx=>†Ÿ4Gáñ¦"B”´9<ªrf›ÀP¹ÏGä±×aÃ:rƒ»“æCÚdó|úYÀ™)Ès”º ùzТŠ`\6R‘öy4p $hú°ñ©Éôâ”8W9‡¥ÖP8LQ˜eO"-$¤4 ß(ƒ>óè6Á š• aÛÚÈŒ{f½Ÿà°9è›Û±Ï¡Á<Š Ñâ¤}I=øìÄ=€mÞ3ZpÑZŒè€/¼6Cæ_‰ú]Ss{CŽÃËÉÉÂxe\¸ÞMCæx?™ÑS‡ÜupàCµöò&ò&˜bÙÉÁ_'›ìàŽpy6:ÎP€}OƒÁö»ð“Ùá*Ã$:>nŽº¿BF|ƒT´®DìôšEŒ˜X´'™Im¥>3áo~O‰¢v'+(¡†îü…èì‚{?'@|5>3¤ÓÐ>™àT‡ÈJr|OàŸcÁøw¾Â†Œðû}ÐO…„ÚÓ1ëm~i‰Q‰óX¢#!wdL0g‡°Ï/R!õrBÞ€Dî—å7®UdyO£8ŠÓ¼´p (ÄoѼÒºœ”ù0˜ ™{A«A_A¡ðN{>3°ÏB§È¸¢Ôõ4-+'Ðâ¼t„ š³[jMz4Ð Ý´È%Z£t º×j²Õ Ým]µ{R•°uUH–«ººH«j;’«(ƒ„®Û¥J:¨uˆu(=×f²ê®¬VÖ¢wUÙ{°êªªÚªlíFת*—¨t»V–ЏÀêJ€jíMVgW €@IA ï%¯k·C¢GÊÍ ªÌ/„’€*¢BŠ”uý !P‚HªR+¨‘)\ "H R$Š â •÷ >ñ÷€ x½€>ñ÷¼‡¸ûƽ ûÀ}àï÷¸Þ>õ}à>ðx¼ߟx¸Ú>ðxûÀ{¼A£@áÃï~Nˆ#@ ÖƒF¾í #è~¯Àø ¿WÁ–'‘$_mе§S·Û£â1H8þÌ´ÿ09þ>?Q·F~ƒ(âûs£\^-?[yóÚnl»óuá |ûV~úˆ‘Nö(6‚Ësß­¿OË/ÿÆÐ·˜óÎÓ7 í$~góR,£cÆ'ï*&+ó¬ý™!p1×CøË˜Ê3Á@ yæP&=ŒÏ’|–瑺€Ö“¼üCo=øe»ÉlgfQ·ŸËDc PsyQûIñ1Ì'‡S+ÿÔâO¿á9B?»íççñ5ý“÷òr¯²~´¹<#)0˜èS¼çf}üu?‘aÑì²i%—ðfGŠÙÚÅ¿•¼ÌÄõãã?ó Ï)Ëž}nÃ;`³yæÃÇÞr<Æùž¼›£Íâ?§96ÝÿAþ— þOÏ”œ,áó!O[”_À¿ü~¡ÉDIÌà£?òxÏÌnIJâH¥ÈS޼ßëÙex-3âx~^#ûýýGÍù´Þy*Ĩ’%DvBˆïÝ p¼ÉÃIÄâëçK žwxèÄ…ý ínsëeXÊ`ƒœþ|Ìø¤Q·k”Š73¾â–Mõ•›8óÖÆõŸ—mÞQ—h#s u>`Û­íÊç®OΈrLkKmßl¹—^ß îJÖ‡8s+BƒðÍ¡“uh ÙGÏsk1•›È~¶°ÝCLŒÜ~#“¾ÐÇôíùDÕ¡'’†ÒÈv"' Ï·Ûkà·¿¶´YbTâ¶ir™ÚFJ%qøÚY8)Rˆ:Ìøÿ㯈1ÃΓgáÜãà7"Mç~…÷ò‰°ëu±~ïÇäKúL÷ýÅ$y_‹­Öþj§ˆDï·Ífœ!ÈGßí³¤Ä±­:r2§Â&îSöÄ×§}ìGùˆ€ßƽŸî™ãK͸˜…ß“çÄÄèò~Š1(ý¯F÷|6ó§ yݵÞ½¹¥i~éÎN5}èÿSÑ›ÅìŽÛ¼/“ºbFþw7eæKzvûË„|%l¨ÿȈ³û4ºy4ðý(ÏD †1» çioßâ>˜þ$bfÏØ­²e¥?G$èÞ]9 Σ\‹¸ÑÛÿĦ)§)«ç£js9ÉÂucÚ³|a0ˆG±„cÖkÛÊy4’èþ!ÕwÄFqÓPaaX £…¿n¥1µ0ýÞÞzå«öZõõô>Эa)-=*UtlS$ábò–¤wÆ$½ñ«¶Ô<ì"×WI¨GÕ +­-Á²}ô˜£¯ld¢kÚ ~ŽüM‚\3Ù&­rúÐ6H¦GmDòW,‰Bå˃ÒPvl´ýõ|®Òq°uë¥õ È|õ|úŸÙùbbG¶L•1Lœû.“$ˆÉD¥úAÔdRÓßvãùœçQ¹x/1nÉøÚ"ÛK7¹§Î¬û¸Æ”ˆ’N¢¶gE•XäþÓ!°¶(‹[¾ÅΧÇi«âÌ­ý~IV.ÊûàŽï÷l¾’Oâlf2E <–¥¾Åè·rIR°˜™S™ö”A²&b"žŒ Œåå ™]ž‘ u1aýLñ;nVÉYXz}‰(£E|ý’‚DL¨E!ú3è$±*hèÏ}äˆÿHøÛª~ý%ƒãMÓ ÿ­•6y=æát®¿1.›`R…ŸÈ^_c§œ‹î2*þp·zg/bÉKÚmKëʘ’BÇô-ym²gõ,#ÿÿh\¤ÂúWß÷ÜÕßlM˜uø_ï÷ß}Ë$Õ,A…ŒQð©6#®9¥=žÐÞØQœ,FLËÊÉÍ«±  „#ÊÍy[6LôÊS„0G€Cö~^±ë‰VG^¹ë«©A…4©ïêjÕÅarçsʲE•ó¹pžM"Š+œJïAŽMˆýˆ@pÉïäÎô‹Glèâ^úÒLS€ØBXlÔ’â!P8&õ8θ¦xÙÏ2ãƒTð8åÉ‘g2*Α⛒mˆ˜œUÞg‹àW)¸»W17%c†>6äëyÎ8Î.ç3‹øi-'<ò×<ÂóÏ0Rv¯Pžoyè‚øݽSÑìüš*SA÷DŠŠ@¹!ÌŠ°DpòIó~žOfĆ=€šÃ–…Øq”Þdž‡§N?%<²YÂæ ÏÒó‡ÙÐ>Z|ïŸfŸ?::ù<Ÿör{y<|y‹ÉáxC‡>fpƒ£_“ɳ7Ÿn¾É¾ÎOH|?N)Cž¸àO£`/PîtzwÀ‰åø«t-0ÛæüÍôSÑÉàèDŠ"¦‰O°Gã‡'ºÔ(5 ÛɉÙðl0 r¼Ààãñ×K¨¦' òs¥8à'³‚•JCà† 5àéïžT@ÂÆ ¹”&0Š{89;]ùbye|¦±5Þ~gt>ŸÔ߆O+`§É•5ô1=€Ó´°›ÑÑÄù<ŸÍù›ô~Ä?gH|á‹ö8?GÞ„&DËåNÀL9…ˆHP62áíö.žGHDíêп0Š$`üM7«ÈŸ”„t¡|iÉrõÇ@¦&DDcÖèrêkiœy#šr'Ä…3®'I)ÖB!ø¸C4œÛB’xÈ$¥* A÷ŠR@6ÆË0:™6¶À#ÖƒT­xÀ0챡0-ٹرìð3‡°0­ZB)ÃÑ` Ò f·{bàÛ)Œ309°b€(Ná Œ’*€>ÜžàŽp¢ u–H(j 'SA%31jƒ”u‚(T1@¨à‚RA@‚D1@@à(ƒPCïxн}æ‡Þ>ùØÐ€ûÇc±Ø÷`€ïH¼}à;÷µ£Ô}cÌv@}à>ñ÷€õX ¼hûÇߟxûÇ`;€ûÇÞ4}à4}ÃñyX÷hûÇÞ4hûÀ}ãîã`=Àv=À}ã°GÞCð~/ÂÈ{€ ì Ðh>¦OÀ øa¾1Ùজ~ùïYD柞Ÿëi?§ 'ÃxSý+ɉ2¸(Πn‰ü SˆbRNw˜¡ûŠŒžßññŽ?M»Ÿìv ÿ©·]p#_þ N4¯óç$õsV:íøQ¾"œÙð^¬/•2,p…þ_-$ÅfO§~ýpD]v>u½è?î#® E™ƒÛ©°üè±4óî|Îfñ}¢²$€ô9à˜“1À“Å{þfæZTåGÜ>>fš{ôV|Ô)Žþpþ‘ðëÌþuû‚ôy:ÍG30Fß¡~‚™å¼„wêQŠ/³‘<\?™ñûÅÉ\üAX kÉô/LéžzÂøGžNø‡âåº~.;žÂãœ8  s‚è°?UèNz8¼9ë3”ú:è̘×CñËq{f(ïíóXBê&cª3ù‰(謢'‘Eˆ§çzÊŒÏÑÂ;ÅÂ&tÑð OggSyBVX.7÷ƒ¬ÿÿìÿÿÿÿÿÿÿÿaÿÿÿÿÿ¬?È¿C'Rß]ÿ‰XsIÁ1€\è¶(Š;ùÿø/áyÜÏnPòýå>y>&à ÿ%˜ò§q¿ÛÖµË)ºC5gïÚ è9>w0(]ˆP¿êv¶ÿdOñœÏÊÔ¢y9˜… Å1?|ÃÊëâqÑŒŒ”Wþa‹'ÏGŠŸ üÏç.?³ÊÞD¢Ø9¿ä$!ý9¬¹6ØgÿæÝŽ+œ\\zÜßh‹/ó*~à¬'Ïø}”KæMP"5“Úx]’"—}ýðNBû½ˆ!>ÄNC©„dô¢üžþ…‰èŒ'’œÖK'µTT ³ž˜‘h€ƒÎ’žD®Ët®Ns…¨Žøˆ$û¯²¤±z8'ë×Öí½Š“ Uë5™è»'¢kIa­Ÿýò¸Ç+d¦4Í{Á¹šQ©bÂGSê[a Ž[sÑšd.È€´ç»O²z×°ƒk±¶GÈ\ÎÊ çæ{­ýX[j' ¿‡ƒP6YˆŠ|Ò““ŽOãO±Š"ØÛã°l{IÉr+¦)ëõQ6›~øÅl^°ßu½\ˆÏéDÚáœ"DÂ]гô=kÐL L<\jdUHü˜±È®˜öŸS+l#¥t¢c–1ÉÎ$]ø‹‚üÝ— Ø]J õaôž…ÙÌÁÅå\1ÊEGA“‘»Ô¹#oÖ @Œæ¡E3¸ó¯$)Œ&Hc:Óô²hüÇ€"&·|*ޏ8.AÒ|Lj}*kÿ»"6OB(<ëø3×yצ0itÿ2³4ŠËç‹`KMX¾á&¬‚%äëâzH¼ç t©9Y¸5r¤»Ùõå‡Ä›î™ÄˆìKï–/Âÿ;dÇ¥ö¾%_ôZþû™Ùòž¦¦+ë$mÊE“ýEõ™UeÝ%€•ÈÙ¾%¦T%ÓÂyhlÏ*Þÿ1M…Ýå41³2¹9ÞL¤ dtÇ·8ΨÁµ1à =QŽÃoRCÒ3ÖªÅ+ò­Í75W3ºnÅÃé™. pÉïï¾Ì{ä8ˆŸy·=âMÖ¨—Y¢+8ÖͦQ¶ñsùf`Û´—ac6jÈ2×ÇxLëjqÎÕ½Ýx«”ÜM"T’í]«8cÛÍø¿ 5kÉgc99@;Ò^Cy[Ë'-y¡ç;Ÿa˱9iC>"À1Ñø §ƒÑ€¾†'³oÀéõ Ô™¼TÅéä p†Ñ ±9ïZÙPUŸsâ7'À¼â¤<ï2#AèÄ¿aÍsóDt"Câp!!¡‰ô(F[ðM 43sOPÄ#Œ3Ôú†š˜‡52vy4RÐEšèÕ—AŠPGå^tà2øHÃÓOê4èÆ>]¼èqyÄ?ˆq³EžZvdgOÒ|C9XšÇL¸‚yvŽq×58å³’,â ÂRÏÊÄäñÄK£}‘NÍ)à–û{Ðá‡g“’‚=5†ÞG¸¿Éa•èù¼ƒÑó ÷.5~ §ÀåûqHatî| CÐ ³lÆáp%I„P$ @$¢ "$GÞ>àx¼{À÷€i÷¼v?ÀÐÞ=ǸûÇÞ>ñ÷€ûǸÑ÷ϼ}ãï{]¼Þ4ûǨq÷¸}ãïxÀv>ð§´pØä{±£@ïæ~ /Á}Ø €Ð   ?Çà2øŸ$üYNYÏ6~D{Û’¿R¸„._쎠\11ù&0~DI õ¼ç0qFÊ2ñ0‚Ø@¢Ìúšò-û{µ¦{uù¸£o”³ÎZ¹¾ßç˜þwö:õ×9l û:ÛãþAµœã é6cË’rÿBÉMÿøž P#åìàÿ‘žPÄO•jŸÉ›1çž!“£›‹5½‘ì•ûÇ^ÿ×’'íÑx 3ôIÁy÷Âû2u· B73ŸìŽ‚#ÌÛ·Q³';Ô¼Ÿ%{DädÎÄ1·ƒøüÞ'ÌÊ‹<ç‘y¶z?3~u¶9öÖFPËqCÈ?'ì£#©ƒ›ãàæ]u>y¸§‚~™,üÇŸ‚W?.Ù”g KþµyžVÍ¢~g÷ä…æ?pO[¨[s̯ð)‰óðNg_·ñ·ë“ºïè±;uäd¡g¸ܹç/³ùO_bæü¶´\ëàââÇ?×_1+#/ærÌèÀxøˆ˜ëåÈF#ï3c$)è Iny™Dþˆ¤Ýá¶yç©Û}É—9egcw™ÎùT9Ä´™!Eá¾²‰]eœì½hËü²âüç?ïÏæMÿŸç¿OÏŸÍü?ünKóísqgÎ~'_ì3öᜣ›àR·~Œn²w§áà:‰ñˆÇÛÏGØëïÖÑÅ0ç3o;êFÐ@|¬ENEç`¹û}òäm[n{¿"cùDmFð ^WóßY œ0ú e~4•ãÌêØ1™× ¿=–`˜á;ài9[šDÆ´˜ž!”Â1¼çÔüìSáMƒóÏœL­>B„màâ{á7ß#©¾"QÅø·_#pÇêbÿ"ðüÎ?ὄ.¾F\ßltGü'¬È~H& ÌGæyÿÏçnxS)°Ö=¡ÔLóÔÐÞqò³,àŸ¤X…6Ç\ÁÔw£#¯=Œë´ø?3´·êvêz³ýÉ µn¿18è\V<ùƒ29jÏÌ×´…În£aB^Š˜>]øüÞƒ2x•C}hcþB¨‹í…ËÇLIBu ¡D`z#RN:ŒàÌ@’' OLu«Ÿýpå1ŠzĘS=ìÒ{¦`AJY¼o¥:Q6+Që2L)´`\ý1é!éóÖ½A1c(ü"¤Ko´Æ(¡3êLI4z`OSÆô»fz7£I¬Œ7WZí]‡'ÊÍkcWö‘=‘kÅrV)L+HÌ|Œ í|Ž%t¤³…½Ç½ãy‡Á0lûœ…£”A«JŠØZ%J¾K8+¢gþ²¬ …8¡c`Æppz61É:D#Œ¯Éù65¥ Š•/>Çì½½l{æ*œ‚7=P§+?µîÃíÓpc~°õðäç¹§-ÜÜepÑã #ðaù½71ÃXà¼E·fÊnœf\a+ KÉF²jÌ?‰7ÀC·ÝUz|‹Ï<óÏ<óÏ\t—žy¤çžy瞸çžyçžyçžyçžyæûø>M?b³¡ö>Gȧ±?GoGÐðüß©Áó>‡µ?Ìø<ƒ„<ŸSÁìèùžß'øÎyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžyçžÏ£¾4ç©Ò‘ó¾j9>¯Ï'‚_;ÉâEìÁ•Ä á×qYd“—á±p0 ¸–t¸ù åà> Á¸¦_©òìó§ï‚\¦J{>‡gÀO©ÀõPDáùœÒ|â|/¬Àß{W˜h^ŸŒïžwÓáxxÈÓß}ÏQ8„ œ§Àø¦…\Ny™Ñð^Zv˜ú$ œ¹óÞyíÄì…!ð>Ïé_UUVzªªªªªªªâ•B( ˆŠª©UШ@¢ª©UPP‚ *ªª•@R€(¥<(è%Q €R…*¥UABªH¥IP ˆ¨(„ERT©( € „ª€Q$•Dˆ U@UµªªªªªÕUVª©Ú?Çðǧôáð?ǘ¯p о÷Þ4Q÷½¯½­xÀ^à=À}Í}ãÜ}ã°xÀv@¸Á¯¼}óïŸx'¨÷x¼ =݀Рv^úûý¾ð ÷€Ð Ð Pp§Þè ¿–(7~ó]Ëã-kß%gv•ÇÆºòÄu-¼µ×ºÉ›uî8d%×l­g`bûƒ”²Z!‘¯zÉcÞZ±ª‚»åØÀtÑ/nôsÛZøQ­‰‰go½Ç2öîÔÈÖ€µ ƒZíØ;šD%ø#·lÉnü¡êµ÷‹˜¹ég!ö•nî^}Ý€@µØÁ÷¾ö€Ð°€Õhµ€ì€ }à °ìÇ`;€4}ïv€ @ÞûÀP@{µv44Q@PP @ÛïQ @@€ 4Ph Õh÷€4àÿÇ@ ¹aÕÛ­ÿæÙÌ"ø*òKQ2H2ào1tú´ `bòŠ|”ë§%Çéé$Ƀ$c7Oó¬…mH;3§/ž <¸‹AÓ„9ÀÙ—&LMbÄø°€ Ña ug]:žnòBö9ãÿK©Ôaìð5v¾zˆ±.€QÓ‚©Ø…L8¨ÎgÅê=h>ïƒãÒC7<œ¢ç tà]ñh{Ë8ú?”øu\«žÍ XÞA ™ôŠ:òŽˆ:\Q$ÄwºBï6,{«ÅãhZ‹®—þt pëˆP6ï¬.Ðëu×™®8ü|A ³mêÐÔQÁy\CE¨¬]ŸW+”YÇ] ˜ˆÒÞÀú=z¯†Žó|¿ö¿/|ûªPßgߺQ§ÃëJË÷êšOM§‹èɪ¼¾¡üÕOøjgNœ|\· ®·8éOƒm)Çûô‡ÓPii¢4К)M(§éO•ºðýÑ_þM¨íχæ-ý/B'ŸÓ' ›àµkÝ‚¹'Kvq÷ËÀñ¦€ÒSEhbý}æÐÞ& |¾hлP²¿O‰–—ÞsÚ_2}òS§K8ù¸H'ذáÇ!ñ&aôPž|© ¾M9 &ŽáçÑèhÍF‡N ibÂÊ>ù8Q–hh/Õ‘ r忞"µt§Á`'mÇÌüþgÕ=Ã) ˜}w×ýŸ^±yɞ˽(—‰±}}ý_œ&â ‡ò Bˆy!ë`ïןWãd:©KÔš¹Ì.#jÙœ 2m òQÚÿKbÎ^Þnâe(IF‡p]w®Ø8aå£ú³iãç4Xý“ýO 4mäjíö¯îFCÅXî¨H R­ ºâe“,$‡‰‹Ê…ëîd‰ÇÙåK,mYnzxLCæ9çUaO'Zƒ•Þ/ Ÿë×§“Äɽ«[ÿáú_ÈW­?ÿn¿ù»ô¼·úõöÿ6kcÙò_¶{sÿí×[Ÿÿ·;[¬Îݵ}_¶öÞÉ·‘nl 3m¿›döXþÇe‹,Í?όΗgÙ³Gij{Ú©õ¼Lšx4Wµî›j­X–„i àú}®ÿû6DÙíßÛÿÿñª}øvÉKöß_ÛžÙÛB¼³ù¶góÒSoýœ”§¶kuõ:ù}Ejñ«N1Ç>]–ÝíI EWG«×f–kw³&ßvj@±nåºÅ†}o¿oÔí±×n%/]izÈȾB»;`‡Öü?óÙýYlýÿúí/]wíŸöyõûgL­ë³¢Ý·ö~Ïú]–)A_"™"ÐçáðÔ!Å¡–x`dÄ™²SQ-òú—ÛñÐtÓ„•˜5˜L¥öJcÿÙ»7ÍÈ­Þ„½|ÏÒÕë³S¶åÚ]¿í¾ÜöÝ’ù–ð³öXýÛ`Ã7ÿ¶Oòß¿ÿÿÿgÿö}_þÝ¿KÿÿÿûeÇ`v}\?nß¶Ã=y¡Jï`Wh(µÚh(¤±œqµ}•\1eóžî:ÐÞ"rO¾Wx34²3b»wgÙƒnFÞB_·ní%Ûß¶oþµ¼Öçjÿ3ÿn7öÇÿödëÙžÙÿÿÿú_³ûpŠ¿·¿mÓüêÉÒ&'VãÙŸnu¸ÿÖòÏýºÊnã MÎ<îŒð|–P’«ÎžJ$C.$Ù£·ä ¸?^¥Þ3wdoV–Ïl=¡Læjž–ZlWÛØÞ½åy,”C~Õ¾õû=t¡öxJ7fe«ÿÙ³>¯‘P¶ÿŸnÿÿÿÍÿË:_ød{t ù/Û¿·>³|ygKü íÝšÞSãvÎ ŒJ€h™«×ÆÐ'ÒË«ó.°)d¼Ø·‘"·aíÔCm† Xà”Wfö:Sa–,t·Öîmƒ´X@g¡±>¬"û2RšíÝ™ƒÐ,2ÆE£*»nnÛöyÿúþ£þÉ馳?@œÙëÿëö’N‘6ÿ^¦ÞvÎÎÝûgù?nN‘1:Ea»ê ëUÙþÞº]ˆ›(ô"¬ÉèRubÅ}ëæÏû5{»¤Š»'ØlÖ,Vf–èJƤZÌê@e‰úu|Ám?"³_öXe‹¢ö=|ÙÿÑQý–Ýëë¾Ö+¥ãFDE'Ñ´f¶E“þ¯ì§[ú´má.' Ó3!8õØœ']:K|‰:É"N‘'LôŠ"fèºpW¨éÒ$é³'H“¦zD|ɤP‹äºu:µo‘'Mˆ·Ó³dUý"±¾ú´¢ù$[Ù¬,öÏÝ¿TFÿÖÚÜŽ½ÝnV0ß±1õCxíìx/2áWËÿuîãŸoJ³þ³ZÿÙfË:@ûY³‚ÜXâì­hÁ²ušËð Ú0Ø¡Õéde_K BU–^…ÌܽbźÛUÌV°ŽÈosg³n7b´*:Ûu‹¡J¿~-脳Î:†ƒù_X%Ò£@Ï×éFPè˜7Æ!õ›åŠã°á©³é}²(ÇŠCÑc›Úý¡÷g¬‚œ2Š¢Ê!:û„륋3C[Ÿöf`™éäC7±™Ûu¸ém·f­„ˆ¨›Û"ú]™™Ö1+u^*“at§P$àaDÝy•/Ek"ú_ñêkLjÆà¢„‡`*Û¤_2€¢™€»°ýý‡h+;Ûß̆`y™ü¼À\Ïà(f‚ƃÐW°ðp<†à.à*š ;¡è+™ŒÚÕÀ<1Ü+í0† CÙK î鋯7CLÝbffÃKĆ— Lþöœÿ3ûïêcv¦!wíOê À3Ðó!©¡æ}44`ÐÅíÜ0c› «u³1 ©üï[5‘E9Å4wˆœD©‰Ó^#€ Œã?JÞõ©!ÓÎ~L¸ž#‹¢—ŽFrdk:4ã˜íât/Fõ0möÌwx$Ú HO<‹bçxŒ)#×É&*°ÖŒ£ˆÓ£Ïàd"$0H¬‰ ·LD!‘ô|ÿ1íó&õ±~â X¾*uæÑQ3“—#Øíú1õï¹X¹ÊP›™Ç$q—D;èPGQŒ•{VªÏ‹5CNS[Ê ÕÞ"V.Š|q£çÊ5¨ã(Å÷+³P=úÅ<çCâž'ˆ¥F±Äe¿¼÷Ñæ.¿ ÒžœG_R,Š©Hò7yáƒèߣÞŽöƒÔ¢)çòH‚V†¤ˆ¡ÊD…"x¦I6`R…R¯1·C ¾.K—ÅÑt¨Š-ãxáæ:Žc˜ë½Ì¨ÃÌÀ÷¾E®‚"ÙQR QIˆB’3f:k0<þt5UWu@„Í‹b¸¯t)£ù³ ˆþ0OSôV'QH½#HÆ[…9ÑïkWÉ¡îu±¶îï2‘Aˆ‚$‹Beãèþ?õ` \5×Y¿»º)EÞyäY9yÇ¡@§‘ôÆ›>0þCt=ÁoéKpqq—¸Fóã™Óžc‰Õ cè=ßï‘SŸžxçO//"q5§N˜3wê)É ÃÔS’$En~(«”S )W˜!H«Ì ³1¾!fN4]Åq,¸±ê8ŽcxÚ1#¯}mÚ÷06»ñE±gž+ÅîÎqÔy;DI5š3xG߶滪ªª±^´\!;±ÜpºÓ#¸öhy€ô=Ôù?¸~ö˜1¼1 M¢So$¨²,wˆ"(´ F°PDZÚÓm™ï Ó7î‘DSçžEnr"Þ< |Žæ3LŸ3çôŸÝÚsE.(r—.'‰b‰ñ»ÌpõOŽzkP÷wþENBœ¢‘ ááàByœÍ:tì`rTDâŠjúïyâRK¯ ÔOÐ)–X)ã§ûŸÍlÎy'”A)ÓˆãÄÑCôpÿÆ3ªõ»Bôku¿—x†5ÁM'‚Ú!ðÃÀãö¯‰ˆÍ÷Þ²'79¹ÞôOggSzBVX0©4WžÿÿÿÿÿÿÿÿÿÿÿÿiÿÿÿÿŸK¦œrÜBåÇxª4dÏy™»ƒ~œ¶CÓéâ‰DíD$Üîïj:çón˜/7›AIÝH¢*tˆ…žäl<¬gÆqØ÷{Ÿà…ôR+‹¤˜¢»9þ9ã³ÌeëLõ¶öo»Ýþf¢ ˆ%hžEBÊëÔbõÜõú3£67CD§<Šb•U±$ØÎ8Ú<ÎÌ;ÜÝŠ«A Y¨¡ŒhqCÍÒëÒ¦æ ßâ&ëCsS7a¹™»ˆP{©Ã[Ðìα–¦I¼0—‹ 0`Á†ì3A¦Ã³ü0 !…ÝÆ$7I´0›z¦ éaú]Ðõ„L»ó37°äò˜ 8Xfˆ¦ÝØfÃJ °ú9Ëò›Ç2df/\‹3!„@Ql¦˜†ã7õ8`aŒl†0z@Tv쀭æ`2›òj¾x/$)Jö£ÅýL.Nr¬ÝN[ñÃx‰—zÕèÖ÷Üa¤Íßè-æ2™ŸÌÀð@¯iEV”Reµ=]os~>íðTN+›UŒ%VîU¶¸Næˆf3h˜™ŸÈq7ú…Ns¹»J&5sùÜþÃ÷Q»¡ä1ºÐäýØvé?¿ßì7t‰ ÒAè(ÿPÀ\¥8›Ÿ)•Œmü†l7AxŸLhŸÝØfÌ -݆<Ïä3!Ù™û ðþ“ù€¹ ÷IòwwúHf“ù¤Ø~é »û¿M „ºOÝ·AݺíßÜþçî|—CºB|—vïî\º.—A2]K·tô‰’BœO&´Y¢gâUA#S<9¬äƒ¢K¤’d£$!Ô˜):%ú3;SöyåV’Jce%ŠÒ"á £š—ߣŒæOz2%U)`»ÒEQd‚ϽŒV—9ÌÓ.D9-ß.”µO7·x™?Nîi<’ééîáí/Á;‹jT¬ëÞÒ“ Ëúe‹Þòke;m·¿{‘¾Ûm·T„–ï”çuÒ¸ÇÛ¶õïTzÌòz ßgmïwI┖凌ïS§mïm·ß}¶JEUD¹Û8}á2+ÞÜžs\Fž­sÖ$¦§›Î%>Ãèó’Dšj SY j ?ÍÏëkAÄ­5º›l<5¿ÀZ®@ƒ@ØaaMZ…4jðV8&………5 tàÁ‚?Ø;È8† š5 ý…µpþ ܃°hˆ› oŠJ¦Ñ07 šH;²uç)¦»¨¯f 8?ÓZL“Ó]îBîBÂïÓ*°¨,µ{Z†B×­ý¬ì¢1¬îkƒúÖ³›ôí¶þ– ¯$sši¶ NpC÷û à@„„QSP;Ôú!»4‚hÖì,)£P°C‚kwðCØ:ŸÏ¤©)þ­×éÑœo"G2^§¶5 ÿœæÿ£g©‘¬jEdùTŸ:1|¬þ޼Îsh.õEz9js’%qÓfF/ÑYg÷ɯyÄêÍVÞôTç8§z«—±‰Üxá.cá—ÈÂkï[øÓ«·œQJo£Z¤R”ýŠ(ËŠ]5<ðrH²ó_Ç•ìù“³7ù˜›ÉJùÚ¿½FQ«ãêÖ.j”Fûˆ*Sw‚bŠ÷Ñ ˆ)V!ÊZkÔf÷\eçÎ÷2Ÿßê"ªÑªû=þ5{xÔHX!ë43wˆªtuϦÿ7ý­zeGŸëz²ãÖúW?ÝLÚÕ²càûÊß{ß}ö°Ö~½Êß[½Yu†ÐÆÿÉ ·£oï*³n`=ÜÀ{ô‘Ÿoú¼õªûVˆUM'síú'”â¾ ¼”)În¤3?™°Üûc3fÐ\ÌmN=«q •ö»NKÚrÞQ9N3oô=GZ» Ñ7GÔLÝÝ™3£ïmÛRµÌêRœOè.ïõ²«›œ§˜ØÕë7ZµÌîC7Ac? ó­õª ®ì?AgP=ßì;wú‡°Ýþì3wwâ)J"'iiREJIšŒÔjVÁYhÄIã2ñÂÄ‚ µhéNÑ’$©Y’Njž˜"Ë¥AXŒÚJ „гs™¥‹Â ŒN’KKX–GÁ+qV1H5œ…Ž$caF6X§HŒqŒ8çŽ9¤PNJ!$’`æ XQKXÈ+tT`V8ᆒ(ŠZLîîîîîîîîîîîîî‚áAbð*¼ Ù>@X&|òÅÐY!Am7AP(;Û»¥þu.’Ü<¡’ÉníÍäKŵ©ÂX¬™ Ûd†ÞM·û%½3bÞpî]ß¡`ÛÜâ^²!-A‚”Û{€÷o|¥.î·n“!û¥Øm²ÃŠ]*n’ît–Kpôv¤ÍÔÍ»©¸[`²_¦À·bÝ3º„ºOÛ¶!›öËbµ»¸ú\‡¶íÛ2[p oööÅÙ,VK%’ÉjÄK@°C$3l2cû¦lDÜtjÝ»w­ nÝŠÅò‡nßí’ÈC0mX¬WH_Ù-XŒÛù,EÈS&AbÈB¦JKŠñ,ë%²Û)›¥±~K%’Ø;! nìÄ,`¿nºÐ Ô¦·úPyt2í«V"['ÈHivÕˆ;'ì_·-2jf!,„!w!ÖíÃ7-Û»º„Ü)w”4 óšLÛØîîÛùARÒ|˜\ÝÔÌ)C*[·Ø~Ù7á6è{˜_è ·­†Xe»$ %¿²&fíÛ[l¶Ê Õ½»¿Í0 »Ü>Üy©—¶ ,VÊ[v­m»z uh@Ѐ¿º`w“–ˆ@QëV wm–Õ TI¶Uµ¶­¤@V‰h ¢ ÍÞ¶6cc7zÍüÌlllÌÌÌÌÌÌllÌÌÌÌÌlÌlÌlÌÌÌÌÌÌÆÌÌÌñA$—:¼eÎõ™ñ½¼ìgolñAúÖÑ«¢iA^A•…FOˆƒß(\µÕ[¨ßéË´&ï­wUªoøÖJÔ‰NVê è^Üð¶—ñ|.6^+nƽ‰´ÒfŽ´@=¥Ö·Œ^ESÌž7Q„€~s+„–õ¯{NRèfe<îÖÚr蕵̈́ºRiI„ 0 XVÊ r> ¹¤„ÜÎSr”óœÛÌ& ”í!33ð›©Bîµwa!¬ÛBì$&síR'‰Ua!åÈD"¥„7 …˜Â¨Â”ëSħçí|½ñYZ¯Ë™ÒÌê´¦—:Ô嚼紘YA …ÞÑ›_9ªøÞ)•–«aIÚ“˜*g{ŒÜò”áz̉Vç8Í ˜LÅÂ|J‹6<Jt8ZBä,-70€Û EyÈ\…Ì`ø"\þ#d3v•þpDO¡säÒ¦gÈMÐ\QŠÑKE¾ÅbnÉí4ý—d’é‰%%Ù'ívÞf)ý‰~Åéß«fÏ·d—K.ɾÖJö¶×d›$›>Öù™ÓI²’I$I$ž7mÝß²l· £¯k²Kit"¾Ä·ˆô™d’INºbI$º] ³ìmÖ{$Ù)$’D’I-¬Î„ÛwvÞt'3¡’ÚH”›Ø’’I$I¾†wîä¾böînÊI}’é.2^݉§NIîºsíÝ#Ð@ç7A¥K¤Sסô#.†áG P€¦îìÛk  pÉí³I¨äìÉŠ»-& …˜(‚ J#•ÀN§— Ü#(Nb$c¡Gl™²1„H“ s†¹>s§ŒÀ6÷{Ÿ&s›âñxí¢Ýd¥ä~}ºW»ãzÏÁ…÷°ñ<Ÿ>.=‹å3àý¡È èøÐÃæ~Oƒñ<ß/’éñ<¾˜ËEOƒõxÞÌ@=ž_gg£îáð> òzƒñß‚cìó¿)G>‰ñ!¥7˜xR@ò@iÜâ}b³Ã;çãЛêcH|8 :£×Tý?É9wÙ)ŒŽ$±TzÆ&üåþ §L=­Á¡öCƒ.Λo‘D”é¿è3ÆóÇ|z:Mî÷Ï<û68œÄa×)ÑîNJ´»äðxcÃþ1Ü(kËØðÆsÓð?|ËÆto—Èø)àøˆŸ_  ý«³à|ŽÇâ*;Ò[íìàå‡E>çÄìøŸG( ¨ˆ:ý©ðòty>Ç(Äù„óÎCËÛíéâóÏGÀ§Áå¯GÈ^yèöcÌôáù%æ“Á哘=ß›êr×ÛÊΧ³äý ϨŸNiÀ @âÆÑ‡M:-Ð== ßÓäìèòx;"‘ø§æ?ö{S’ OÌøOÙÕåAæöKîòäOSÕè{FŸž Òr‰\ˆ †ëy礉‹ÀΨøˆ ˆ&’ö&žGyNqðaH‚aàŠ}¨¼egÐÐ*oîéèòÆÞª¯ªªªªªªªúª«êªªúçÕõUU\ǽ·»{Þíì¾Û·1m˜À:]› Û¾=÷½ï{Þ÷½Â»8N Õp <ž÷ß{Þ÷½ï{¹ÚŽp¬;€•\C°ï{×ws¦3˜c°Ì€6À.w¶à “0tÀqÀa€!caƒ&¢% …ïx‘U_}õ}UUU_Q–4DR$ªüíÓ^t"¿þO5:kΰ A;ñk»=Xâö¬¤ŠDÝŠŠªŠà¤E@Ð4j?1Á÷¼}ãÜ}ãÞ?4ÞF¼Þ>ðx¼€¼`è ûÐà53æC?Wàdü-~ÐüÀ(k@ŽÀ Ûåvûåèüâ‡àø]>Ö9•àüÏ&1ñ1 l§í1Ãð~Qÿ~šQæ›;—cGaß÷ïÑæÄÏ|ã³(”qÚfüÏA|y±H@ñèS4™LЕ Њ»[?%uë•Ð¥h\ë"iøÅ:”%ëÛs9 ¤^T*oÍmr»Ú䂹ˆå? po>’ Ÿ¡RÂf’ZæY¾ñLµPç¦)s,ë8¥ |ééÔç.mÚóÔoðÿ-læ#³Ë¿>Ÿxïßß?{ùßøúãËÇs¾Küï–Ü¿è?ìߤ}áÉšŽ—…Û=ÈïÕæ;çOáÇPøèùäß9™Ä}7óΑ&›Ð~鳇4²OáòKùøK‚’šTÿª#³~å>¶Hñ™ùÿO'ñßL |OŸô:M”`GßÈS*iGpiù½Çî(Sßßô| ÿb~ŽàýÊߦ4ÿpw~Í[¿ŽÎŸEþ/h¤¥T¨Á•Ô(ÇÞd^”RªUJ;žNÆT(<Ò§2Ò¯#ŸbõÙoý4ÓÐÆïßþ>±ÿÂлŠaA×’e ð…Øêf€F*îH]b]ü.y_õŠ˜0þ$~ºýÅÿb¦G‹Û¡ô]>Iñäâ óÅâ&_åÇà &pN¨‹¡»_`P ¿ÂŸÎu3:fbbyÖ#Ç´‹¿è;ô/ÐÙñVk˜è‰‰Ò[£ôw8±“¼þçAo09ÑÐŽŽ1aÏCÌ|3pŽ„q~}Ûã3^æizÖ€ŸÒ°÷YQáS$icMÑ2êH±´Ün/3/-PŽñʼh# k¸ŸÜIèk[Œ\q‹‰ï{çíüþ ÜþÓßÇ =:Ú¯¢D¾ùuŒØOã·/AjTÏ4%3½ítGí»œƒZ^õ$ïU£­dn˜©ž¿Ú:Ìø¡æŸÌÝ¿kÍZÙ[Ñ×Ý}4[¢ŸÓ{þÝŠ¸¬›èŠ$ë=8 ÖTi#C°ãk£S˜ÓFÖ7q·´lãg˜Ü«J´åVUãkã ª«Æ,—»V¼ •ÏÝU|Ö¤V«_d®~ëžµ ñÆLºrbçðÛ®þ5©>ŒOXÁו^\á²î}Úœþeöɾ Ú –Íü¶D*É¥cŽ)¤hãD†„hÑP$i#]ø×Æ’4q‹6±º´mãohÛFÝÊ:±Y¥]WŒXQ‹$.iÜ “ ìåó_¾Œ¹Ëj§k~Mþ¯YRO9"û™Ï™óæNµ³£z]ëFgruº£ðà\þ]krþeÜp÷ÖUS¨îÞÛKïí¾q\#«#M†¨Q¦JçíQ§DkYU'Aã7½›y­Û{ùª߀™Òõ;\ÌYÏŸ67$yãs'&kUZÕ¶½êgYóâç{Ý,ë™­Ò÷½oZ\ÜŠ1:Úÿß>›ÞyÇV²Ý­e|ùQ TJ†­u“é§ÈÀ  Œ•IŒ‡Í‘#z]VRôgìd¤ÑÞoñИ™]šðæŽê¶rrþ´ToñÔ:ð•ŸóæÌ]ž÷íëÂÔNâ4>ýé¶þüÁš¯³šÖúbwQÎkXtgzÅpÂÈåbU‰æ.óV*9Rú¸/é)9ÉžÛ ûûñvåõõ©ÎžEÕVFtz­<Õ©òŸe|mŽßTfg&¦[¶lÈ… •^dMz«p6¼Ã!³{Ý—²Wå4üîŸT55– â`ĤšÒM=„겈Œ:ˆK¨&™> ó¡-Þ9OÀZ›_«¿•a»îašêêM4Ï›uIªªŠM8È0-Ji©¡ªó«^kÃWR^z’13’JgRI$¾£EN[¦()šêê¼Bº“L&SšŠ¢º6Î*jþ ÓK«|ðÄâO„ŸÕÕæz£?ÔJÊê)øFH%2<ŠƒQ˜™’A"jäx Íê‰$ׄêrïჭEÈ•Ìd>ýªûªûZª<²%.”¿ ?ÊùR¤y Ÿú’‡Î×Ô)ˆ¯°¤È3^X:5Òœ­FWQ€ípîØ!ÖØ Þ¡ý­ë}:J±’Êüð›…$˜ºw½ù†¢µZ¯ûpëñ%¯;1€$Ð’r€,’ц`|zp*ªÂª¸pÍÀ[…U8G7®¿ñ4ê‘1€ÌãV¢u>P—Uú‹«Ó[½«ß2iw™µT¾P^ö­Z¿™’u[kZïÐo:’k+»¯(9»¹-æ:ÛmÝÊ Ûrä½6Þcm×n‚€‹Ê PpÉí®¥Y#!…lñl‘ÓÄ @dH'o(«xDãb—†Ie’" ]`à G³×©á'Œðž{¾ÅÃÅßÊóqN­M°üogÁ<§‹ðMt÷Q>'Äö|àòüOÍEFCêó<=ž‹aÛ‡Ôìü½'2‰ô~œóÏ;óxYÑñÎàIy>YÞû{ãž}¼óɇyº|[òVPàÂHjo=*¡ðå½y zG¯#Ðúè¢pw)ìó·y¬§\’_¼š=d ÁP¤~î†6äœÈé $×ýùžß=éöŠ^žL½Ÿ MM…è­'\¥Ðìúã}žs½ì7|âP駃'om4™1Ï“Ùõ8,÷·ÈŽ¿Cá~5A>“õø„x:?³·›ÈŸ“ÆŸü_ÑOÔúCÍ0/{qÅGèÃÃèc¢ïȧ/Ðù‰ØšüÌ ?G¦|Ï/Ø÷z=µÐ¿œ$èÀây…çžq?#œóÒÎyçžPò9ÍøçÌëžpz:çžzD;³ÁØDø¡èÜDŽ7 ÍåÁðG¹ðºy÷Ö 4`A]Ý9²XôL>ï±; ñ} ØžOk:>¡ÈžáÖßÀy5Mî'"9ÕMÃ1œÁ Ðx¡A8À¼õÎÀãŒY;/\–'jE^ü©ä|ð)t8Š¢dîðD iÞSq€ñÙöG\vó¹ |Fò(©æ‡É |O'Àûs6Ûí¶Ûm¶Ûm÷Ûm¾Û}¶Û}ö¥Ý³¶ ¾€€œ9Gw:¨.@]Ìà¼4†J„•µÆ±.ñô ‡s›«»ÊsqwU‚H¹J:À ¹8P®pp=]Ýìç¾q@ÑÀ€À#° ¼ðäŒ0ÁÌ[ÞûÜwÿ¶ß|~gý¸éÀ8cxG _Åf¸Q!ʉªCDEQQ[±Œ"ñlZ)×YpæJƒ`ª £g ãÂošK„UJaˆË‚j‹¸nú¼çªÓ†ëì¶é²»‘›F¡t\n²êªºªX‡•ÖUu7]t*®Xe»óãe›°}áø?°q`þ‚ € ÞG¸]»}ãïpûÇÞïxû­{xq >ñ£Ü}ãÜ}ó±î>Ðx÷ØÑ÷ŽÇÞ>á÷¼}ãï÷އÞï{AØÑ£Üh ÷ŽÀ}ãïx÷x÷x°ì©5àûÚì}à~ ÃÅâü_¾8  4РѸ°YÒ¾G”Ùö«‡à6¼.ÏŠpôt××|]£ð%püŸLâ}Ö«êpä©s³"%re¡ÚKv0yQ7ïÎnŒlÊà¶÷ÿ#Ϲ—Œ×Çeä_õăXóôÿPe1ì5#üMœQeŒãVu>ÄÏÛ~üÊWòD‰ùÃY̸?³ˆBæwVkôóèó–|t"ù™Hö7 ‹òǼˆÚmÑüûÈpjHcâ'©ÁqLý¸ˆöHƒˆü¼+?ÀqN8d|¿Ä™ ðRI´öe­Ïð~ô/íòÉý¼ý‚g²ñ}¢‹º4Óîó0">Óÿù}£™”?ähX…Óó<ûòw#iüæÜ±˜y^ øYZdÇG¿˜²7χ]ù§Cø€NS½ ˜3~¸`<æþõåmüøJe»¡D|0 þbMöûBø­g[GèñÅþè+äê5^¸j½ÐÄØ~ºœão¼ÎQ1Dq‹î ~úAüä¹ñ¸ˆØ¿Æ¬ƒmâbw›wi(Vþ^.¶ùýÂEñ=ø(Aо}yAºy{òoßãZGòÎÙÌdò>\€ÖðF2ÞÁ93]Âá׿:9Çá2'ôD™?eù˜_Ñõb|M Ç~ODy^_Ñ”©Ýn…Î!Â:™çžsÎ~‹Íð`/³<ÃÇÈùÌhD/”Ú¿¹aÃØkNÒ&Q?­ìÌ$/È-Ûž&³ùþÓ<׿ÝÏùÞc2jr|Gðy:ù…ß·†„wàyŒ”õ*'+;ùýÌz•²¥„§¿Ø€Œ¾æYNoÌwãûd0=fõ¨1ððA¹ŒÌú2¿ÇÀƒÁÁ À¼/r/.§ý –|‘‰>Õì Zí÷ŒL}¼®eîfsáÿøÌöyÖ“fQù1>'œž‰ë›€ c¨Ë÷y!úŸÙe›"ïÌ“%ø¿À×À`0(Yù8uÐÜ€[‘ßÃó"s2…ÁOP¼âPØ;x3ÎÑŸ|K;F'´áûA¯AÚN=âýs£¦d_àÚ>#‡ýsPº›3Ë D íE˜¢ï¥ÃO²Ìº7vNÿz«¦^éq ”s—nÒ¿7ÛüµuwÓŒÌç´jê»¶>Ìú$i%·Þ~ìv^¸Í!ÛP•wÍ÷ñžS#ëò!íO=ºÿ’Ñ#‡×î)‘¯×€qŽqaЦ²óè+%×]aÔB;ñtwóйß?yêd~‡ø[ŠÿØaa¦"ÄÂaD9Oè]c€¢|ÿÅ'ÿ‡\D/ÑcÚÅtUB§™âPuèT!èx_ËÖ]é¤#®¼©ò»œÿü:Ÿüüß9Šx¸s®)B"²þ²¬§òŸ3€„PŽIú§ö"êJ¾Òƒó–þ¹8y§5Å1É^ R¹~®,QÅ,Eÿ´¯I<¬oKÂ’=¤Éf-é½¶2™ffë·rGg·í:…˜Ãqô}å@•2¦êA“ÕäÊH’,ÌL¬¢þŒÉÛ¶MŒˆÖHDÈm•Í*ºI¶lC<=QSf tf”ö¡èô%-”¤ùêV B‘%¼¨KÆ ,T–pñ¡ûpR‰9óïàä„öøì[eC$¤µ•(A¤ÏऀPRbpÕ}G®IJ[)nJOggS}BVX2Í^¡ ÿÿÿ=ÿÿÿÿÿÿÿÿÿÿÿ†ÿÿË K¥.›õ °hLÂT%#hP`̤„f*ðêšx‚Ìf|øõÛ+wFVšnIãAž)Td“ɉ+ÑR2dŽH©o$<Ïvã»v§À$vŸe éy•©˜It[ö2sÕšwMësLÈ„’/";3»»ÍdǨ­ƒÄßÂ{ 2줶~Ä)P—·Pb}ÝA‘Ê–Htz2¤L©@ާ·c»ƒ*ö"|¼­w^™æe`*hT¨+b•ŒIññ•„’¥bõÔø4̬Úò (‚…†%0,ÇMuýÛR艌 šjˆ”‰¨ˆ«@Ÿ‡Q€-|I/Ø„À@L÷D0Ûá(’ˆ=ÇÀÆ$*R|Z{ä£8¬W!š˜‰'ªÖ*ÛÖòû ƒà ‰HF¢z^”ÁæBUˆÊfRŒ (•(èI ‰Z©\e`²@ÈqÇ#(¿¦Ÿ¾ôV؞ľÄbC± ×bnÄö&à(Âáp¸\.ÒkXëׯ__W_W_V®´dwÇ|vñÞ1ÛGl"3#\É‘“ÆF0›5„Ö ƒ`9—¯®s:øìæNeããããã¼|qçŒ@Ô@pÉíø¸é·œ+¨À ¬ÃËáÌðGÂO„Ÿ òÄ/Ñá<'†ÚÛá:Aìðù^YdÛá8Üïàñ¾™ð¾àÀûœbõ¦N÷°¾gjö{{ƒãy~ ¼Œë<tÁðGÉ{„=‰ AµR‰Ñæ(zað ä,êzòh»èìô|'8;ùôË@ŠÀõêx³áõ6NaXê¼ÞNì>Ñ÷HË,U~e8:?I¡_$°ÅLå§ŒAð;ÐóyLçž§ ß7àb¬ïCòS±¾´7~蜞ºÏˆõò¹êyÌûß„>Þ~Ÿ%å¡´7³á½½½Š¾Ï‚½ŸG²z|)Ú½«•S¡ÎyçóÏ<óWóÏ<ó:LçÍçŸO\óÏCyçž~rS²_€œ8pü’s=o·R1áª%o,ÐWX€£àqk *žì_ôÿOî|'W€£Ìðvyì@¡Ä€˜ WòùiñSA¯$EÃ8뮉0èôt7Pjj\V½1ìo‘è=Qpê@câ…N’F#Dàò#—G,40Ž3­ÞiOÕû`vìáÃÒs‘>®C÷@qÎè¿è)†€P !-=ÄX` ÷Ÿti9È%êM¢lÁï} ™6Ê ²àåS<Õ=ž’ÌA4l¦0²4ˆ2 ؆0ƒ¶Ë õµûx˜Í¡›clóg= °ÆÆ:{Òÿïòÿïòÿý{kÞ—ÿ1oQžðúÑÆp›Í¦µIr&´DPj1ŠÏ¬c¼Z«ÏIå)a±2ŒT*ÂÅ„^-WÕIåA,`A…DYÃd\1Œta7ű&bº&©…(ˆ T"ЬЅu¡]TàW*¦áQÍpó†Xqn†ñ÷¼¾ñ÷½ØûÇÞ>ñ÷¼v4¸Çcïî=Ǹ÷xûÇ»A÷€ì{€ûÚ÷k‘÷´v~OÀó?Ðüß ðE| @  }N\¸~N\+ë}[xøÚøžoU~ ÀIæó~,ï–ÏR[0e‰ýþ'9B‰Ž~§ÆdÿÿøL(ø“YYŸÉ[ŸŸ©£Gm ôèßgvÓÁçñVve³xÛþÃk @??ç$Q"ø\í¡üº €:/áãtHü'ÌH¸u¿Ò=öæ,Bè>:Ê yk!åGòeÈàÿÌœ ¿­v¢WŸ¡H·ÙøþÏ<ÀœBóœußÙ‡›Ãœð* }öÞ7×Þ¸¢‡˜:çØD³>»û0~³äìþÖy˜æ=áþY8 3™Ï>t'ñÈýù%’s,ÄþŠÅâœ{KøË}¬‰´ÌÞ\…ᚘê1Ák˜F ŽOLÌîÄg"öÊù+>oÿ‘øœ¼›öܘ9[‹ÒN.4QH÷¤‚R Ò<œu°üðÿÄý»üRwð!q|²Aÿ25¢°A”‡æbù}dCóíßhÊY‘=ûo2ùd(•>'ÍhÌâ£XMIÐtü2°Ylg!ÇE‚8[aù¿6ƒ=ðüÛØ‚?ó'ãùý'6óYyâ¤È Qç‰:æÜ&XFzDxÄyÇ$ä¿ Ybˆ˜¼AÅF?æìo #ÍñÁB'ðþÉ%ýfyܦ} ´åà.B“Gÿ‘&´ÎO1Ñùž,OÄbP CøËâr–‘ÔM ¯Ãô ŸñüÁy81 Fܼ_>¦ð]~H_ãÉŽÓßâɳà9ÄJ‰ò#d/öç]™8tb%ç ºëþfÀýsl)åY'øÞp{Ä`*Ãû£ÏƒyÑöäÂ;Ï>6›ú?ñ©GÃòËM™¼ÛÙ‰þ·øäÚ'­Ê?;PŒ1ÎŒ½šÀÌäX|yŽ<è]sãw¦cNÒâÊ\ ªi·fÛ³39Ì~wc.ú\^ýßwgF.ò5Õ¿_© `N’fÂqÀàd°RÔ±9c£.KÒôºEññ@šDTƒíòJ^,t˜øýŒ/äv!‘+ðëiTX´†ÒZ‡¯¸7è&„d :á!·ËÑèÇÒ&fMÐù¨©W"Œ¯mÎÌÀ”rµ¥p.¥º±RLÓÜ¢õõÝ2Â]Š_¹ ÏVøÁ7ž¥ŽÍ‹ä¦ò\©$å¤À¼Œ§ûRм¢LØÊ˜‡ „£¤5*T'”dÄÒ#1R z¼Á´,ä±i7y´€7ì›Ê§eZþÔez,i§F!×§ÓËÀcÒ{Qk”@ÇeìCVT¾c€%ÛС腟búe)~ÀÙÖqúˆPå!èËÁ¨xkãBµ$<‡"QK›°@¨´ %/gkxX,-e¨ BLn_¸8ó‚Àò–DÂpDL#"\¸¥"@ÐS£ä”hA‘U”Q´ö°y*bJ”@*Wð€Pž:Ñu"e§<ó'ɘMOžBQ! \ˆpE2b¤9R°FÊR‹ÑÇbÕ¨*W‚V"ú™„™ E˜r²ÂPÖ”6å*”¶RÙIå ùC[ã°›òÌ¡½(@¥R”Î9srØŠœ¹¬¡„ÊI)Î\¾cê2á uuR„ Ê’¹$ ÅO%%!” P€¹B唋%•À|¹¨Ë2Ê(@$}8’`\Òð [ì_R€ ¤ªâô¤ wjΕ‘«Hֲ޵:ÖD^’Õå­+(™ú#f] /ô¬IKKÒñ…ÊÉ Õ)nÆNdÐk’)‰ Ó+$X‚SÉMÀ¡‹Èdô¦²šäüqþT³bg'rs¡,uÊçšbÛŸvâ,Yúâ9³fAÅ`9€ºšF@ÇðaÀ¨Û0¬?šC ÂRÍ„!„ÀÌe2£žpã…Ï<ñÇ<ò—ž'Ï*xr°ãžOʼe)ç3SÍIôåÙg+YgÑNV2³ÿE94åk+_ü\µNIöOžT\¨„åo*T­šiöVòµê_® whÅÁbRQÜ;pìH\;pìObqpÇb{”wÄã±*áØ›†ôN¾Ä#¯±ˆìGb;×ëõõuúø›4&͎ጎøïŽc˜Ñ„P14ˆG!4&¸ÉŒfL}}wŽõõñÎdæqõõÎdæqÎgWæuñõõõõññõõññÑ(6¸-^pÉíqŽåà—ÊZ˜éó@“Kƒ€A€„’1/ƒÈ‰o#^,WòEDc%UdåÅü<'ž³‹Ý8gX:œ~—$Ìè”ÄSéûûj±‚#A÷| ËîüÞQ7£êtב;8 ìc‰¦¨Zø>Âö¯j|àô|s¸ßW—Ƀ£äd¢¥9|‰æÓ‹Ò,Wµeçèró2'z,æSÝ÷|Þ c—¡ çy[]¼ž_~­9/‰›ÏœJ+¤{êõÚ\O!¹Ñ§ÐFêø·ÎAœˆ½$•¶ÑÌ(·×³O±ó0”8=šCÌ0ø‚&Ÿ—ƒë°ùDÓë!g³ìêz4ázAážø2GâôUχ=Á6ÀŸ3J|è¹ÁNM~Nß¡ð<>C¢¾ÏI9:%‡ÑDè;4çÆrx£à†ô…bz½yÑœŒç¤Ð^EG'¹Ðp'‡€íX“ãOYÓò‰Íç”Xøh1,ƒó1ø–¹ù×FÏoÂçÌøÏ1Yóß3oG“·–¼ž1Ààú±s3Lò}¡¨~ÅóÏq\ûKm¸Ÿ;Ýc%¼ù»ñ>f/¶Xû—§|sÓÚÆšO£‘{4zä3ª¤ºo£X•<ièáìBÀŸ~ªþÃƒÊ „±81dèÑt‰½êù;, Èšb9¤äˆwÔOggSÿÿÿÿÿÿÿÿBVX32®åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«8$b[ÖÑGáA–D!±*½¢^yÎH¢Pçžyçž§žyçžz#×<ó͇#œèvžy¤çžyä7žyçš¿¾ÏF€©Ãñœ'<“G¹ÊΚóƒÌõžè£Ìà…ÒtÌH"ÉÔD M£ŠÉÁîxμDˆ½ä:?.Ó |ãÙDIó;;‰Ú½¨9‘øcàá˜{ é/7ˆð:~¯¡ŠxaÊgÝ dÄÁçœJ¬œ¸|Btb!Ø´ù,M!*pphà^¡$20 ØÂ ›Àhçœ#®”ä>À‘äb|fÒŸ'¶ btr|„ aèŒ!J|€œL«DÄÞÕWBRªª©Jªª”*•UTªªUJˆ@*ªªª«l˺ ¡¢ªç«Ñ‘ézÊ^•îûÜ{ǸáîóÀ;Ýïo.îy\TÜnw»ÁæÕwwƒÎ÷ÁGp{Þë¡Or5wsÞÛÇ{ÛÏwm©· {»»‡»‰·nw6íÜ;zs¸\ホ~Öàlpîçž¹Ñü÷sÛW»¸¼Þnç•¶Û[m½¶¶Ókm¶ÚÚ¶¶Ö»¶Öà€ˆ ¬ççè•F«÷è. ¨TŒÑ*–¹Ã¹ï5VƒlÔÔm¶;Þ?pò ÌÛjÛbPÁïdØŠ±&…Uom@ã•D{¤Ë)åUXÓlBkk»Ÿu÷Ý÷S¾ÛïÝ÷Ëï—¾ÛïwÛ¾A,$*7ÞãÆp›Í¦³%Ê@¤‰,aT(‹ÖŒÞ«ÿ¬Ò¤"!¾9 @«â¡„^mŠ~뮓Y“(À…z0R„xÔ¨*bø¬Ì9¶MRÁ‘rñMŠ DA…TBª" F"« ÕB¸Ôq,SA…TÐpwè§÷ˆ¸SwŸgüüp¯Í0.‚»PÜUÓŠqa»ìùŒÃèß‹èf5Ý5 …B*¢ì ÅŽ¬æðjXªÀ®¨¡íðxûǸ¼j¸ >ñ÷‡`¸Ð÷¼¸û‡cï7ïxÖš€Ñ÷€ûÇßî ûÀ{   O¼}í}ãïx¼Þ>ñ÷ ×Þ׸ìhÕkX®È;¦ v€5÷€4>ÐvÀ£ï{ï÷¾á 4v÷àüØÚxЃ¶ƒ±ØÐ h>àx½£_{G»±÷Ã^æÀ ògà*êðš²¶ÖdI¯À Ô¬y«"F?¥y#ä|˜~¯7‹ézS)®¬b½§Ö¸3éj¾™«(€Ü»Ü 5Ø5®À±A °@€m€ÁÂpYà×Úªì}¯±È­òÉ~)<€+^oÀ9ø!)à÷q8p>WNÓ¼u "×SýŸ…1öˆ_h^òó´…ï=7ýüÄàF:âø…äG뿌o |úUŒÏQŽŽ½âëµñؾóü ú¦¸iÃãŒtí¦ö81 õ$pç¶Ã|ù>HÐÚÌ~`ÖEˆYé³ÅÛy^ÏÎx'ÊνœkÈœŸ¡­´ó;:åNÏñ­-^,cUåêK>^"¼OÄû` ˆiÍ岊Aí¾~}•·1űä2~'çùfŽ¢::èÞ…‘ÿÍ™>ûL²Æç¢y×þltÇóH<çÛ,Á¾Ð Uý`ö/3Ëó„ ™óøüöõ¿6¹ý'egø9ò~oßÿ›ÇÙ– "»ð ë´îùÞ3ôÈÊ}“°¶~qÅ,¿ ž…à3œ·ä}·óçoùGûDÔÏ2óßx}Kºé ¡A®â… NFßYoäf~V#ÿ<ûÏ^ÿÑû÷Ížß;Ü\ë‹à]³'çËó<ó‘üuh/•­ƒÖãÏ'+#l£ŒÍîÄP³=]‰ûï=tœO:¢Kýo<œo²ÿ7ç~wä?2‡ç¯üñ/ÁÿÏ·~r°¿]ýçöΘÌÍý4`ÙI T@Ï'/ÈïÉ"|eEØö~ÿ,¼ªACꘂø£H%:tмR Šý™½üi¥ÿ¾Q?‘óäp’ç#˜&3ñ/Èê9»s~¿ö7~?<ót §ôç0(Ç|ÌòÜE$2ý?¢FS©DÄÙ1Äy×ÌsˆeoöE ¯óË-Wš!+Ç9þí”GŒÍ·Ÿ«¨ñçð:ÖŒo›ô®?¾9×ÛÄ©ç~(üóÈÞ™póH¤4¾”ÕÓ'SiùužYäO‚ @?Ôü?¶Ôö”eNá´Åc-ÈÙ–0þ‹KÄwçƒhŸ‘3³ú ϶ÙDý̶ö?]yþf~Oß›Ê<Ÿ´êÜ·å´òrìó#y’? ßÛöù}£v$^ åù·3ïìö‰Œß›Ày1âB™÷9Yõ†²eŽyqôÈ'÷ÿ‡óÐ~æz5‡°-#Çv†ñ´Oõ»Ð£¶ðc !“x¦¥BoÄKo1¨¿ƒ!¾×³Žyû¨_·('£„¶ýL"W;Ó3ÔDë-²˜êNˆðü#õΆ‡¼F:L£«ðËäÄ\ß,ÿßh#mçq †:/ÿM/ÀŠ{naˆ9÷Ê6^~f°¿ˆœF²ýÌFÔ©3~­þñm¥ï¿¦„òÒ‰qKðïì õú„å™Ý€?"Ý4Ó4¨½¶vÓ:E¡þ¸Û~ÐÒ-@ĵ•S ÄæfsÿøÎÙþv!ù÷G]vše§iðsšÒÃÍúÊ9¹ˆ¼ƒØ#¯ÿSgEœ˜™þ/øºöYÎ.`»eçñs³cì·ý{÷ä4,ºYó,öGR~«ä[ûN­Äk#ï×1þòX /sd~L¦wê:Þ~ßWíÝ QìÉ:aÓç&5a{%øü~2ü—K;쑳Ï:Ùì#±ЇowÒãGÛ¾’×'vêiªÙÂ’Ôâ2 b$£—vþôÄ:ù— ߆½ôΙ¥Å#²4°P{Ûy!ø:^¶g^¯f—ÐîÊ“ÞÑ1µËúi³ 7ˆ‰“™Ÿ­Þy†FyøDS&’qÜÇñ._ÎÀlñã3û’93¸•‡ ÊÙÆqéΟ:Ö³äï„ùÓ|~ö7 D çØ»dÆq¹z•9ÁâI㘞Õ*|âtƒe™Æ9~z#š#tãþô'ߦñç’2é¬y¼ŠfräúçóìN&$7!˜ÝÇ‚µ Ÿq,nèê%Ƴ+†ü`lc¹œáχdûžiŠu—oŒÿÔ9ŒvŸýïç6êìscgGÁ;!çyIøo/3Âq¼íaŒ‘›lƒÍwòæ'ây#˜™>&gñÄË4žØpï|ÄÎb1Ÿ§óž?9d²2a¾;Ï;Ìï× ÷3;–‰Q.f8o>\¸äy#ùþ|ï‚~p¥°åî ©?ò‡‡2ócZu âép¡:GÉЗ~³Dÿ þ­í Í"Þ¥'ÔU|$ÊNɶ»‘ó3×c2i¶éîÜÞÞÏæE÷ &ö2×vÚuÝ·nà]WWiYN£ËËNÍJOmAÞlÓk6bÔDEˇèÔÊz¥áD‡«½ Y)̨ð1hS"=C«ùøÛò¬¢u3M7£T<#Ié4 #¬â¦E¤‘U)œ^bÂá!"ÉÝ7✚/;$ÖžŠ”Ú=eù~_×YVJÅFE”–‹¨Q•|$Ž–„™ ÃK¤- ld8oss7Sº—ø™GÔH“èê#¨ ×R®§_Çô>2#0ÕL’‰H™!/Ù L¥éL@ ë,ÅÅø¨‡ÇH!11 à¿AêÞ›ð!£Fu:<5ñZŠR Ñf2£Ac8…ƒjœg§%Ð+]t¸Dà†aäz³L!4Å3eÔÈ„« Ö!Œ¦1Ç“Ý;(%C¦Xƒ½mÜ”Hˆb;vˆ”ŽàôS‘f3Äk0t]Û÷>Ó×Qþ%CƒsÇZéI~3IU.@"pbÂ1õ‘}C÷ m¢Ó>3®í§ÈÁ@W¡a2 ¶`ô+Ý y!Ð|5 ø]Y=IêgºIÄerC×sÊ¡Oµ0:ñ**Q1J1>Áחع¥C1ÇÄëÀͼ¹RˆøL™RÀ!I'T©($É‹Œ–—Q`.Zi<£iÑ‘zêŒÑOêP9•ÔiPÓi6÷)ÙÔiPLéH©¯v&V3·í•M*Y¿o©8¢ˆbaTd§hHtItËòBb5˜œ¬­t‹^œ½“rèF|G£•f] 26&uò• ©b!–rsXúgÃSáâ+ ˜rì˜õÜÔvoBò“à‚RÒäd-´ˆ:"B‚g'›ñx8QœQ*-ì"#À,ÉI ù³ðF )/Vºù •žNoVTh‡ì‘9ÚÔJìx{ÉšRbŒz#ù›T-+B07’¢b-²¸b‰‚·IËʤˆ5íѲûz7F ¡"`‰Ä¾(#è°¶F`Ädl Dáì„ÏJÊ2ô+ADb`ê2 #°¬ ú€·‡V”I›@NCž]2×FG”<& ºd¢€ÿ%ÅLóωô$E!ä9IrºUçŽ8ç‘”wšrˆpDž~‰¤)=@xâU®T†?Ž<óÇò|qĨâ|Êžeâ þ9æ} *,%bëÄ„K•>W¤‰ ¿‰2Z¤<§\´‰‚XÍ Â …! š^8©•B¥Wó——ÔÈpSë ò2/â2Búq+bm¯2t‘ÀõÔdÀ§¡r *Äõä%XxñõDFf!Ô™T YHp#DkBå!2!:‚•à…1ëºkõÜV\ad ºA¨$Ý8É G<š2†T¡—)|¡)|¤²„JZˈg“`2‚q¿O&ÅkÀÕJQ)l¡›(jÊ2†\¡)?‡IýÙ3—ò•JQ(gJAÒP|ƒÁ’N–gý©x4—ïRº^B\¢ŠH£C(øM®­dj‰yÊêUE±'2¹öPUNÕj&­'ZR²Œ-Þʲµªš®Ô•.ô)åýi¥;ŸIT)¦¥SÊ‚Õ2§uQA¢­ewaQÝTÊš3’I$’˜È´©g˜Ê ÀL­@  Ô ]eÜ«~LK€2++ªÏ/Ëþ1dÄs”˜MÇbY ôIèQmèôŽ‹óìð!ÓÉ­av¸“/Caa••(ƒiš­`´‹ }¥å!°è’ɃUÝMˆÊ-Ç•†|1qYæf™ÅBBBEf2"úÌÁÌù„QYc5øÂ.óH“*ÇÄȈ¢H€ˆ " u@AÅ$¦(« 9Ç‚O<óÇAsÏ/ƒƒ‚‚ÀñüñŽe^r},ÅÓLJbS쀳gŠÍ$J(£ù[˽M‡ê ýg+Y¨ÿÈÈ8¦Š=F2Rî%pœ‘ɸa!Qö' wuëw¯Yׯ~ó½{OggSBVX4PÃÑ 0ÿÿÿÿÿÿÿÿÿÿÿ6ÖýûõëëêÕ«W_®ãBlwŠ© B›i ºÏ®õÙÌ>²>¥ÅÇzÕã>ž ÀµpÉíñ½ß€c|—2½01À ñ*lX'Ëîø;Œ‰¬ëÅ„ÄÌ.D0Žp/“⇩îCTGÁüº>€@èþÏ£ òÎi9ãÀó{ÅøçEy§3y¥”ð|m8]N’% °pT•½†ð•t*t2$¼Å­ÎÂùÓ àà>$Ÿ€ôñî>ñ÷¼lûǸÑ÷€ûÇÞî÷ŽÇÞ4híýãïxûÇÞ;xÑ÷µ­¸ì}ãï~ŸxûÀ¸Ñ÷¼Þ>ù£ï'ÚüŸ3ðf~À)_S€«ðÐhРGƒâIU]>WnŸ€ ð:|Àø?×»·yìÿÀ-çuñ¼ùÌ$ÿ>‹9üÝüý…฾؉%Nû‡?[Ï—½û¥m g8åyÎçùrw?3Œ˜•o€ËɈ\90Xâ> ßÜ0s³©3N?Ï<É:ç¶LãàÁÀ$Du8ú̺‰ ï\êÓ¯ì±ÐGŒìÚ²Îü&ÍÀ²NF͆ïÞüà¥BèèBØŽI¸Ìó‡ýs¿:ø~ÄOœéq%,—U ——ÔD1ÿ~Eœå¹Ø4'æAÐ_ÁEÉ\:Ù?¬}'íº1?3ÎwõdðS…žau× þl2 ±þE¶ð@‹#µž~…Ôÿÿ3˜Ÿ•‹¯2‚ˆŽ¸A~ïÇçž!{Ïx„uüîB&p uæÈËåòïÊA3߄Қ Aá¤*Éùˆ~?= úÏàOï? F‚ŽFÙ YðöçñÀQ?«<›¯ga?¥‘DŸþ~üÏ8‹ óèÙãs¾–`Æ_ØKèà œšAãŸÇeÀGG˜dcø~!ù×å’[—±ÑïäÑždþó^ÏÀ'^Õ¿\QÏüM šírÑ`?)ƒ±϶èÈ?ðiÂð" $FjVò?¦ÏƒüLQ)â¶NM–çæmÿ~Fo‘ó”ü—A?}¹ø1úä.q­ŸãuÕ§$hG1Ùaˆ‘BËŠ˜'#ã6ÿo“ÛYOd¶`â0~Mƒ,[Äþ 'ÇÛ•w,²[oH>´ùŸ­vö¯8Pxâ`1·êÒ:”{ÿF÷ÁÈ“Ì<³‘ó"EÑåFóàÈÉsÃúx#;ÆK¯óëØwÐ7›÷Z”Kq0¦1( p,¿àçY? þ‰ç•ÿ‹¶ý¬¯äGÁ'M»ù=¿Š/°»ôxBç$Þ_˜ ëãô鬬…ùo 1~qy>æÜòüæÌìM"öäþ†(;w&’í(HÄ1nþú´6ïÂaù Ð<ž¨þ”zïèìm–t‚J\IK‰ô¾ú„ ›ä§¨ytˆé5¾òüÊÃS¼v_Öímqž­ @ÉàÄLÿž|sõöLÌ-¿Á‚óc¯Æÿ€¿ÿÎü3,8§õáãüñ|@¶ïã´„oïÛЀƒhÞ~~-ƒþ/çi_®c®ó÷$Þ`<²‰dé²ß~mEùÿ™¾gï)–1‚3ñÿB÷‡ÆK Ï/í:Œþ¼ÅªU¶cÊÓ˜áüÇÓ–g¶OÉØáËû3àÃùý&Ïì÷üÝOò|r äÙdº°òîd„HÌ‚‚ àý‰€ÈŽg—›Pùæ"veo¾_øßì(ÛýÆÚ³¶^"sÙ‘JâOè68(…(¿•*lÆE¼ÞlÌÍõoiUµ‹1Û¶-¦XlújVAMÒN´D0/„Ò˜Œ‹¯6iXl ‰÷ØesMÉž2àŽ¢Î2X’b‘ PÓÓÀÊàv*U/ãÒ”8¥3—eIC’Pä—e0’fà ò z™&]T]Lš,ÒH 꽚HÊUœÁ)\p#øLúRec 3I.œ¹Œ¹.Ê™?“ò‡¡Ç(qdöO‹|xuÁyÆIù‘O*®ú2©¼K¹’of÷Mâó,ìñ'cûûɤÔ|Ž'iSX‚Ãñ=Szñ]>šöéK’‡NåÊpL¨ ÚP$ $Åz-íK1Jƒ*™‹’œ€–)Ø©"2 Œ¢¬Ò¦Ñw/î̤šE;J¦tòªÌbÒˆ$!²IÞV&2"º‰2­œ–Ä¢fÎíăJ¡ÆWŠ›”¥^é»õ-%´šíddx2i ¿²TíáåB-ìLJ¡ž$%6èÀåøÞ= $“莹`y1m­‰ ÷GdzŠY±Lyè)NrNXÉë1ÈåEçNœ åÅ1C§‹tãO€3°OTyTzJÁ¤Dbns¶%iïZ™ÍÌ/¯¯ºÊ+¥Jž“¨éÜ"¤’LœÈ$’jæ¢9¤¤–ÔQ¨ÉäJ¨ •×ì ›itÆ,㥀$2(ÉrgÅeR_Ï8)X »JšÓµ—¯0PP\òˆqÁÀÉ©>$`©+¹œ¦9nF)–M%ÒË/ùY/ed¤Kkúõט6ÆC ߎ™ó´X11Î^Ê ¢9ñlx«ˆ9áœ?MLøI/ˆDDˆ_¤GH”®2 9ð5 ²¢R\$q£”¤’I'*ðEÎGçåÞÞ#¡Zü®:®7,UÂáG·ëzîžs«V×äD„và’S(á´áŠ}=#èOggSÿÿÿÿÿÿÿÿBVX5²!-Äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0ËüOq÷?ï¿~áÞÕì}ã±÷Ÿ}Úñ>ãâûÂ÷§Þ;Öy÷ýÃ{7±Ù÷ÒûšûŒ÷}ãïÓ^ï½[÷öå>ã5÷«SËW}ï¾·îûï}ãï]>ñ·ïÜ"ÙÛàß‚bÄúdÌ}¢{ìcâc3·L{›¢¸cî}Ͻø4“Áð±ø Óï{¿Ú·ëž¼íÊgn¯»ÎXŸKÝîñé÷=‡2>¨|õ>¡á*ïà"ø^¾œ½šûØ|Þï½÷óÛî>ö‚¾ö 5n{¼÷~ñ_xû‹­‡xïÝ÷µ÷¯¿Þ{çí}ÏÙÒxI.Áz=ÒcdŸxå%q47·(Ði¡²½éì²¾ö½ôïÖzé·7µyF†«Éê®â)Üó{O9ìóºÆ^ÕÚ¼¢)ÂO;±÷¼Þ>ðxûÇÞ>ñ÷¼Þïx¼}à>ðx£ïP}ãïxûÚûÇÞ>ðÑ÷¼Þ>ñð–1}ãïx¼}ãïxûÀ}à>ñ÷µ÷€ûÚûÀ}í}ãïxûÇÞ>B%:ÓÇ“¸j¦kxfŽG<u[Øó¨jˆBŽ-s5¸Ô:ì“ÁG ò¾ƒÀzªùÃÐy»l>ñ÷i¢¼}à>ñ÷ ”>ñ÷¼}ãï÷¼}à>ñ÷¼Ùé÷¾ö>çà˜ûž¯±ñ=^v×nß{·×Ǧ]ÑØûÝ»r+ÎÆƒï}ÏÆ5êä»xÐ^)GOÀNÝß'oJ|ϪÀÊû PnàÐ8t´j€v;€Áñ¼ytzß8«ŽÞè;/–#Ør÷¿cÝâ vónÖµ¯VµøµõwØ×È×Èûѯ­¦´Û_xÜ4: Øá X×*Ôh¨ª8Ñ9 (hrhѦþ)¿a–»ÀÙànï}œx.»Àãàqºïœxn»Àãàq¸Oœx.»Àéàtºï¥œx.»Àéàtºï¥œxE»Àïàwºï½œxî»Àïàwºï½œxîÀñàzºïÕœx®»ÀõàzºïÕœx®»ÀõàzºïÕœx®»ÀõàzºïÕœx®»ÀõàzºïÕœx®»ÀõàzºïÕœx®»ÀõàzºïÕœxîûÀïàwºï½œxî»ÀïàvžK8ð:]wÓÀéuÞK8ð:]wÏÀãõÞ8ð8ÝwÇÀßuÞû8ð6Ý÷³ÀÙuÞË8ð6]w³ÀÙq< qàfûï/‹Dð/YÇdRxa¸°6Û>}¿wm[¦á¶ìá7c†ô݉ƒ`Ú¶3ö«;6 Þm³çÛ`ì ¶ÛvpÛm·g ¶ÛvpÛm·g ¶ÛvpÛm·g ¶ÛÛÖ¶ÛKÈyÃnB-†Óµ¶Ï#ÀÏ÷VÎVËÓ`­m¶ ñãÖù<–¯#Vy«u£ÍÚ{ÈÞ<ß“É>O!èòZâÃîÛm°L­g…»[zµ³á »cÝ?wkíq ¶Ý…À >í‹Zvè-j,M¶Ýœ6ÛmÙÃm¶Ýœ6ÛmØ ònÅÖìé»[³¥blõ€ñæì:µ°NØ<‚-ò7ä‹Oy,*Î÷Œ•éÇíãÈ6æ.à/wDÍÓPìªÅjµÑÕH0ª³^¬Ñ(|†Ž!oq÷ÄÃ5I]Þ"(©æ–‚k«QL¢a0øÅ›ÆL$¸Où/øól^÷]]抱<º¯“Œž|¼f&IÁ©Ýè¿Ä„Z~¾páºf£›? ¯¬Í‡ŒÅq‰;ÊQû³,j¥[®×ëÝ4fù>á1´®Œ<7y1îù<„üÙüן½ÝS]uÀü¦ ‹V®Ç‚—ˆ‡æ L3§ÑU®šÞ9ìêÿ&™RÏÇB溕ñ?Í2zÓÿ-î8ûiª5ŽòðêîO¸¨ä‘è&–ƒó_½@¢Fª—ôWª2Í}G&ŽAJùÌ%‚'ìרý=g£%N«U45|ÜÜ£p‘¿¸5t-ý«üŠ8Óg¥ÂÐp]¢~\ã“_çî¼B}€L>}6Úµ¢äIæqÄ»ã\!ò\& kÈáÊ~ÃØz0m³†òŒXc /Ù²ßõÂàûO§×°rÛ6½6pÊwß“3ÕÙ²]wœB`Å­7ã†-ÕG¢cç£Tx2WûM®|X_VKõééà–Žôœ L" Ÿ8Ÿb +ƒÍœ!Ýã­ÿxåÿ·¢ü™.ûPñãÌv½Èî >£.L»b]q#Ú`š@Î ¿ÊÆHq†HAtMaLüéÄ‚E.ΣâcyÀàÅᓃÁŠïœ?„mŸ@Ûg‘÷ K³zÇÍ8„>M ¯8¸.ïÈzCOûÍÛ“£螌Ÿ`ÕØ0®2a²`ígÿctvuäüà6[žRÒqoêœâ {èA¶7a8_Ðp/gwQ‘ËËÃ~R`Óø›5zmƒ¹†Nšˆâ‹@‹‡ º.g‚?ò]vÐÙ2küùrj‰ˆQ;sˆ$Zóá«ÑÂO6>c‚é?]Û(™Š-Î81ì˜õ‚ï'‘àiZV\ýRQÙÃ/üTN"­ã¸ž@ql‚._ÿGŽpØã *µuÂÄ8ò#çì»8?(÷•k€ÈÍøiYªÙÃõ”Œ û† ÇÂ4³wusÿÎ&:UETè¥pò“Kº¯šüÄ_`MÛÙFÕ3ƒˆz¯ü4jw}C»Ï—10dà½Ý{ùgÉÓ81‰L%Ë`©`ððGìéËÛ÷Øpwå®V'îŽá± šxxDÏ×9jD2‚R®‹ÑÓ–¥ÑD3§¡·Ø9m`ŸÌ#-G‡ƒ‚Ð.»jµ@k°üW}|݃ ÷În¼F3‚Œ&Z'V{ûj^’ÏUó‡þÄÎÏ×’„N~>JQÃìÕ¸)Bõufü˜d¢ “§¹‰#äÉ»°EÒŒ&û†1|ÙŒ&ºrU:÷mýyÆCIæ®&!8h¢N~ùä\´~%š¯Õ—&ºði”¬‰„ZœRÞRr × Ïœ6Ûm· 6‘çlH6Q-„;M´ õ†=Úh<͸îÁ—|ìmÚ_Êß¼E³úúãÎÖ Àõû 7c*nÏX+<û_õú¿!ët÷6ʶ,;D‹<­=kÐ -ÚE2{ÜùÛnÆß»mû·k±/tÛµ¸?èÁÙoÜû~ŽÖínÂÝ‚m¶ÜHÐ"b½2§ ãÎ,|–¢ã†NíqЕF£Ú°‹@¤ÆLhôùñµ`VpýÒ“Ö»[~KÞŽÓǬìñãÖžL÷¿‘/a6sǽϳŸ'“ßÉä²ËÉä÷òy-ò#Öe*Ç>ðìM¶ÛvpÛ~éÐ7k`Ûmû·eŠL"v¦}Å–*Î`œZÛ³„ nÖõq#É;؜ɮò Ó–ù ¸_ëâ AnÉ‹j–EÛp°Ëýÿýö,:·[›Kc=iíZìáHy<žK9ÕˆòV³Öž'y<–X=îxõ†|,ÁäòX]ªÎ|žO'’ß'“Éo’ΪÀÛnbm¸>âÅ »]­ÚÛ³§kô·Ñ»V#ནn,Êßeì­öVqì‚v$Ïû¶ß¼EŸ¤{ôÛøN dø£to¿ “'ãû·ï¦Ð<‹Ù ~D§Ø{ \XÞ¬±ò[äòy,íØô!ãÀÐy<€7-ûVrá¸m$˜?@<åz/#ïäòy-J,ãÉäò7ä³ÙµŸM¶ì1ÓÑŸm¶Ü¸Ý­«³­X•®Îm»8‹Z±7îÛ~íÚìíZÁÔÏiÛ°Hû†¥žlÒ˜—lX£'‘´ü€ì»Ú$@)<¼‘¦ }žÛ÷uj^O%¾KU©ù^ò½º°=j•è€ñëRµ6íÝ«^O%¾K ›f<ªß"ô +û kM³í¶|7Ü·[­vV·³Žz¿`Ëñ~†ì‡ž‡\$ò;[IZ÷?!ì=…h÷uPl•Ú¿IÇmƒoüóx¹ð·îåÝËŒò#`Ÿ»ö£ñ9X XªÓßÜVìñ'/€ìO„–¿åÚ}ž^›¨Wr®…t; †+ìiï%Sûë$óǰ´ð/ ”>?›"ÝG°ÙC}•aµ-0=ÕzeÿǦì‚ê#E=êÏ{¦\õ-TïëS–<X9>MÛäK\"¹°{ O#м›R›oe¾&Ïm¾&n¡¡wW«]Þ$k|HÆÑ)%[R/ü4íÍ«E«ÕÖ¨•cKý¦˜ßZlø`ÀÐa$&ˆr~};NÇÙmfIjÝÇCß2_‡ô. Ž9OggSÿÿÿÿÿÿÿÿBVX6•á§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿråÎîGƒ åˑ˗.vMú*wþÆÓC<)ÃÎ}áškŸMj˜ÆšK®:próÓ'\6‚ .g¾žFôR¨*Lräs¿`sÀù[Ñ®1Dιeó €;¾"J*ç†Ì¡'cÈåÉDãó4KéÆhÚiDµááâ—<…x%KÀ@«šf0äÐ1}Ѱ¯y£:¼Y7õBë ŶbÓ,/^´ØÄ¶Ó“{ø¯˜ïþŠz+«ÀªNáÞé.rÈ£e^qèûÿ¢8ìgz¿~¸î¸Gßãˆ>Y?ÄïA ½á ßÝœ#üôÆÜÜhƒÆˆý~ÿ¦ˆû¿eœ  )Ð@#Å 3?Aà àððxx<<Àt:#DŒV#ƒä4‰ôaGt¼ º±9Ñî\ô HÕP‚¡mÄháOÒÅ8Z¡#i0æü’ò:Þä¢jÿlÈÚtª); §&áÿW¿›`b^?Ù6S+âÝRA1†aä.[_üYeR—Î÷%uó}Z ²AÄ<|¦ZZÒl97÷ô¥šÊûçêdsÒ 6±}§› HUæÿz¡æI{aœ@¨b›æ ìø¦ƒs-Q²pYPcb[ˆÌ;™5P…Ù…C0A-¦ÄŸ ŠÚË1i•%òD*¨*g¸ÎsÅB1ˆT˜q’g;,ãó8Æˈ€•³8™óO§ÓÇÿÕ ›ê“nnM>ømm­6t×笷k/4ÙsSu5‘3®1¡vSµ6xå¹Q*K]0Ï5Þ<ÎaÖDÞ^k1Õéç/Í»x¿Н$ä6òî™eU¶¦äºŸ%]yPÒ_õÎ0½dÑè+­<þãÿäs÷6l4nåäë†ÝnQD ÌPk—4Ì/.v67”X: ð'&M!ß§§NæžØÃk;/°½»µ&ËV;^h<4¢Zº'/råÉFä£!ZæP†“®ƒÊ0ž³@ÿå³ Š(·>‰æ…ÜþŽV¨ÊYâgâf%ܘÀ:~w ™tyÞ羉˜ÄÈi±Üìúrñø~&0IÇgéñq¿é÷æ#=ð85Èm,Óž2ˆàÈèKÐttt%èèKÑЂ~„½ z:ôt%è'GGB^Ž„½ z:åЗ£¡/GB^Ž„½ z:ôt%èèKÑЗ£¡/GB^Ž„½ z"ÑЗ£¡/DB::ôt%èèDB^Ž„½è¤#£¡/GB^ˆˆ§BP4ˆÛz„;ÞØ{ÛŽé]ÒºW{Ûo{XÅíȽÑD^ä^ô^ॄ°º c E+Úèt®é^ÛÕ¨w{ÚsÞã¥{ÚÀ†/VÞ­K¿¡E±{±m·½¥í—½;¡Þôï{®è{Û–¡ÞôH"'½â½=¨w½£ÂQDBXK¨‹ov¡½õÜqtBRAèww&ôál1ÒÐa¶÷j®ÛÜc°az[Ðá{ÑC‚÷©ÑЇ½+ õN xw½ ;] k¥µÀ%–9Jà¶ô)ÙÑl%mPIhÁ¬½Ë ¡+Õ ‘Ñ‹Ýè莆­JP)b÷YOL˜˜ý'Ùàrdk>_?N†ô V tRço«ØÀÂûø*=³†V8?»~3ŒƒywáÊ_<¡íã¯iùzáߥŸŸûver?ä×t;‡O `|5˜©™íç€gÑÙãëèry,—;òßÛ›wKK/Ÿ‘¡ïã«öö9Ï£§[>?·îËå2Mæ€÷öÓVÓËîd›&ÞOäòÏü|ýœ³žgjŠ2ZRº±òû`Lc>o“„ã;|ýò_ çûëꮆI¦ŒÑé ÇÂàð&1µÉç3™}íÝó8þ6Á^ ea:±Æ†ßÃTã×ïîp™L“‡~Sæj€”uË„Ãb¼µùt!å†Äç3'&I³oÊîÜÔEVÃñ. æ‰ vÿ¢$ŽHg¹Œbûûú˜Æ.O%Íæòy<æÈ›6Œ%‡—F+ŽÓ§€8N\ r¹…]ò9K(‘˜<&I0˜¬æsŠÅfó™L›J¹L•bô(’L $¸LVk5ŠÅc3y½çÇùûüq{÷Ø—ÂÒ»¢.//MvØç:œ.êÈW!ÿ* |L#ÃÃÐÙ0½ô‡Éùã¤æþ*ä2¹)ùy¯N‡pG¦Ö5Ì ™ÌszxÌpÙO­ÓGúõZ¢š±¦¿?sPÂã&w'÷¦éÿrþýÞ‡D0bÛÜg… ?\‘B¡•ÒÉŠzFï·¿¹¨mý'IÀpoù8¾Éþwr±ä£'©Œb{{{›f?×Îc?ŸÿÉg¶ˆïûúäÑKxùø¼Fœ1Èpá}“‡¿ÿÁ;ä²5KêÂàðrɃÅfó˜Ìf;œÉäêÚäòm<,d¸<Y0˜ÜÖsŠÄe³ŸçžGáÞïuîl܇wt¥m%Šh÷Åùz±s‚: “‚~}…+»Ø:"4`±Ø0"%‡ß’ùÞrm«*÷@‹êÒÇš¾Ü¦“ ÌéÛ>_c¬*" zËi€aÙ©ƒ¤ÀðýÒnùßœ9²a½°/Ç®z-H z>·×¢Dh= VÀknÖ½Ÿüêý$¢ÁJñÆ–3N…öÑÀz ̾K%9Pà ³¢œÖš4€ 裕v–¿|vpãûÍNQXˆ)âÄCˆ%ÇkòÄùgsr2;ª‚®C'Xd©bšAáƒÄxëÂá29 ƒ€›é)%wt®W§K÷§wt®÷ºîˆ½ÒCºX„=ï»»»º"öÃ½í¨½»¶¡ïtl½±{òiÁø2!ÊšpMûÿêVU<^…èŒD°•uî’^ˆœ÷¼îäW¢Bä¤N÷ºO{eÒ¼:R{Út^¡{auîÈŽ<ýþš0–(zýD""-¶õjWJî•íC¡ÝÝè{Üwww½%w½ÅŽ”ˆ¯l ==õ"Œ®Í>_¦Ÿ2UÆŽÐ nøæì?™{‘Ñî î½Ì´Ù\ßÎÌŽ^÷Ð"4½¬ ꤢ@¡ ƒk_Q³Þ²VNk',fVç>ñÌ™œ­ 8,ìsŸp÷/NXj²ó7ÃN²æòç:×½Æp÷ðê{ÍÁFˆŠ²ç 1òegÍoÍO›.þhDƒÕWE¶Ãä*¿´uQP%àTGä)}ÑFÄïÁß™Œ¬D c"u­kZÑ:ùò'çÏŸ">|ùò#çÏšˆùóçÈŸ>|ˆùóçȯŸ>xO†9Ði §{!ܪ*šÎó +Šâ¤+‡(bº­YPU}¥y^³N€!]B¸¯Æ…¢áfÄ Vmo.àJ·IPÚÜåžU"úCB­^ÿ޳}ßÒ¡ƒÊ2¸ªXªêº®kÈE*n÷›[ Šâeq_s[XƒJ×¼®séÈ<BY*Úº€O*Ù@œ²™8°…Fø½+~ÕEQUV•Ä6™UXUõ}QUVêú«l4âvq|qpçmïzßuG‹¢6õÆ­û÷íT8bæí>kɰV•Ÿ„{­y>P>/ì@ùóíÐŒWÍ_÷Á†(ýETð'Ь!V j(ýâ°ùŸ<ðFæÄ,ÝêÊ$ÅLSäˆzè Ã”Ôø < 1.\©+*Ø*ˆ 6~•¥L•C5VðÇDê*sè‹6ˆ1F'X<OÄÈ^ÿy+€¯b&—¼+ V3òä¯dùÞNâŠÈÞâ6bU)*RT¨…JŠ•P©YR²¥eJÊ••+!RÂ¥…K –,*XT°©aRÂ¥¤*[T¶©mRÚ¥µKj–Õ-¡Rê¥ÕKª—U.ª]Tº©uRê¥ÕKª—U.ª]Tº©uRê¥ÕKª—U.ª]Tº©uRê¥ÕKª–ЩmRÚ¥µKj–Õ-¡RÂ¥…K –,*XB¥…JÊ••+*VTª…JŠ”Ð©IR’¥%JJ”•)%Tœ©5 “$¡R2¤7uG÷´÷½÷+Ütµ©:WJO{Ïzw½¤½éïh{eïN÷´½ Kä „q‚õ`øÒ/xi¯Þ!òÒÉ!>ñÁÓÞH¼"<0KƒÁB=¥½ÊGžé‚Á%ô•”óz`p<%·5ÊàáãÇÊЈòÀ>ËM/uˆÓåéëã¡+F_??*xÈè@ñ«ØÍÐ`{ÇÞCûeg93ØNßÜ€QZî¯Å4ê×ë vó§UÛÆ+ó vNWu„¥R»«1ÿ;˜¶´‹fʆd®á$éÝŠ¥ õ&øßµ˜ã`Ï 4«ñË ƒ·SÞêŠ`gžg)šEøRæ…&Ý9 12BEBî÷}IaÉ ¸ºê»H‡^" IJqÔ’’•œK¨@÷¨b]8¤uuCÄ}Ìõ{´ýWwh®5EÜu]õDuuJ=QÕzŽ«ÜˆH`.ÓC¤'êÝT¤OgÑÕ}•„EîUâ®LžÍ•üÈ…¿y£Ù³'ˆo)FµKIçݺ¿y ×çìèÝ•ÛI÷òŸnê‡ã‹óF¿m¾¶üþå'oùÏ6-ÎL”ù}ðЖÙçÜÍZä-œíÙñóõÿ«O—¶."Ê|s‘ÜE6s3óRA7ŸÍ…·ä¦øÀׯV¹6oß³níÿøkóòJoÝ¿Û"¡ýÎíw½Ö…áœAËóñY² ß»9¿{YYærÛ»»´¯=:¶ü}ïÈ|M”ÿ§®¬®GaÁôèméÂè½ÊÎíüÈÕœ sY¼¤Û?¦åÐ]IE-f®ïº”žebÜÿçßíí`}¡Dx:tá™L°—‹ÛÛó±¯{E‚Kˆ½EêrØpä÷ü»¥n×½§Å1¡yBb…õ ÉxÅ(Pdy›g¸¨TP^¡qBß T(y(1Í£[ÆL4Ìïf(KPL ÙB”x˜¦ž5@K4˜ÜiŸ# #TÐõ•Aêõ j`EB"„sLA1eg ðf áY1”>ŃVV 1f #’³“ƒÈŸ#ÈÀ”Ðî'Û²Ö81¦ù!Hñ´‚|ˆ³†(ÞU†DŠÃ"] ±v¤^E¬‰²±’xº³Ã‡¾CŠ-ÂÀâWú»îoD™¤Ñ°až©Yr®%\³É×oÔe(ã”:±%ÑI!ÔJXƒ«©!q‚O’–é õuAS#ÛQÔ‘/hM©R,—êÛHá¼êJœVÏa#eõpÊIIuUÒ1'ša……~£CT%¥-U P9X a]¸T‰µáT ¤©P‚¨“ƒhu@_;ÝÕ„8%a%UQe3ÉkZi4Ô·¬€8Iм À 0*(TP¨¥QR¢¥EjŠÕª+TV¨­Qb¢ÅEŠ‹*,TX¨±Qb¢åEÊ‹•*.T\¨¹Qr¢åF Œ*0T`¨ÁQ‚£F Œ*0T`¨ÁQ‚£F Œ*0T`¨ÁQ‚£F Œ*/T\¨¹Qr¢åEÊ‹•*,TX¨±Qb¢ÅEŠŠÕª+TV¨©QR¢•E Š*(TP¨¡Q*¢EDŠˆUªJ¨fö°"µÜ—v‘"Ç{,½.¸/qe–Zë® ‚à$«V»Âç¶×A­t.uÎîD•m‰W.w¸.+ܱïzàu¨]z\îèX…«­¶ôK,‹/KÉÝÖ¼E–Úè\L¶N„ãW\ãÅ %wYdD '…Мb¢Fw´«R½Ê¹Vµ©;¡mJÅ—¸ñNáAŠ÷*DN½Ž²""×]zp“Í3»¥YÈ]Ém{®í"({ÒËÝ\öIïVEôM""'½=—¶ ¤äE{• ‘½îÂUE Š*&wQP9:é@ϹÛðÉD¿aQö×T\¨¹PZ¢‡ kbÞÀ'ùdJ™®¨K:¨½QKª(TcžTA)jûgÔpºlÌ] ŠÕª'T_lýP1é7*0TF¨ÁQ‚êʈ2³È΄*)T¨½Qrç?Õ?èF^9,ÈtÈ6*!T ªOз3ÉE)Ãó7EÙ-uAgB¡õC×¥CЇã5rÌ1 ’WfMD¿I$œ$’I$’I$’I$’NŽúÿ«Ë+$o~àÍa—léémD†/»bœÔXyó{W³æ %æÓà_ptôA¸ éÖâ7šØÂIùG§zù¸7¨ƒ;+==3b`bb,]:ˆ:Þºw’É­n 0ßËÊÀŠ•xö>fñ`‡ùÔF⌬ÅoèϾo´1Ñ•.Y·aY'É1]‰‰‰=‰=‰)=—‡½¬ Û©€•«­ ¼\†¤E µg@ƒHÏ@97hWt ŽZ€ðíÏ¢Z­]h³6Ñ’µ”ë—.™ŠÎ!t.Ö QC“ÚÚ”üHèqMnÅˉs(,bá\ÕÕi3K^Åĺ)\¦cKjéÄkXà\mkƒiHÁ©NP4­ä¯l®¶øÐõ´ÃH­3.LÕVŠ×P•KFZ­%ËE¤ÚÕ(jNÆ2”¼ÁñvŠá–ƒ±+feJöȼ êÉu¿$Ú‘EèE.‰$'&»B¶Ö½í½iˆ‚BºÖpÈDÂäBVºåÉEÉäf™9˜‘¥rç£í©“ æÞŠ´ ªDDµmƒ¡±=¤ÛozH+ :C¬‡&j]„]‰  %o5jÂìì°E’ˆÞëjåU‰S‚ A @ð<½dVµ'(¼E’C+[ÅJËÅá%:VRQÙØ=…PùkH×%,ì±ÒJ{8þwÊ=šiYìÕíÖÁ¼W¯³}KPÍü‘QÏ=A˜¨:»8°šÿ[ÆVòvO7¯¾Gh%£Î6O×ÕΉ[ùÙØZe®Õ´¼.ů$ûÔ- KåØ#ÙØé=Ÿ-àyÚ)‰7›dþpwºŒžâW@H¾WDCèc¾›å/÷A“6 PX™ô³÷íèôkõŽ{³g Û›~Àlßž_Q1þR/m¤$^ë¤ ¯o’ÙÎ8$²öúÆqÑ YiV¼„¬YZyÕª) ¥Zյ詈§QZéRŠº5,{RÔ¯C©oDšjÚ€omTº%кšhÂzÖ¤ïg]"Y\îNPðžuÔ—A ã¬hÀi[{´Z @ÊÒ×®FÕ­*’Å„ÖË$²„!BDMn­e«UJµ«ZÚÖºµjÔä"htêÓ©Ñ^$:H¤¥ªEêºåðÔER")$)%"©j],²Ô«RŒkZÒ&RŒ$!«ZÖ‘jÔ»L¡B†´Šº8×®¤ä•µ¡VµÕ«G †×JM©¿"Óª¯D‹])Hk§Muh*‘U`¬ÕÂí29 ¥ZèÓ«CÖ¥R" 1ŒcƵ­& H–rá)+bKÞêéttR…¶%t[¢V¥­í„”© ApU+Þ+Ü"‘ƒ{뜬eí¦ î$¥½Q‹,BHÞ™G­íÚC8"\÷¸´A`¤¥&½è¬²”AQ”JËÝd^áî“aÞ!{ãA*Å–YF iaRÛ^,½¦’ÈZ¸¯réii ž÷^Á@Š@¥H½ØJǽà Eé#­(õ¤ îu¤uõ¤^‰É°¤u$.xru¤•lPX< Ò„è%«BÈ×]!ú)õ«¡¬`^]Ar"r«Huk£IÑa ©V¶Â[ n AtºÒ\ýqι#Œây.ô‹î³‡{Eªâè¤{]r—·Õíë™&_Ï¿~Ý{ϤukRŽxôŽÙÕ{ñéͯ~.ãè²AŽnÝ»k7nݾ8•iﻮݻÛ:ãÌÓËðãb$ÝwIfùè…#į1šª… %äúŒª"*–g—~¦c'â*¦|¦\ ÈÂA(Tʇêfp%ÇþUUm×y . %QUNîó3T©UR·w™yˆ™˜ˆŠ‡wy™\DDDDUUK¼ÎK™ˆˆwy™3Êÿ“ÌÅTE.dÈzgÁ(€HYˆ‰w™“8K‰ÎqÍUTޤÈL¾ ± $¸ªª™T—wÀHQ ê©rgw˜©‘gõUU Žï+yˆ™šˆˆ‰y\mè=FÜâÌOggS@BVX8×¥ã5ÿÿÿÿÿÿÿÿÊÿÿÿÿÿÿÿÿU-ÝH…Y]a >¬Ë…þ¶àS/"S¶C¼E)©—˜ø”ÔmÇ™S2Å(‘ ff«léÔ9*X •Ç@@‚CWƒxXuÿ䇸Xüø’€ŸÆGƒ8 ã9¨Ì›Áãç¥@“Îî×üâ÷œÈ çXó+ó¸YÔh=д°ènƒ ª@ è:G«té}­ô° A À(ŽíPvÀÇ÷0•ñ}¸)Ý ²7O¶Jí¡XÙT ª8Cl@.Vàn•TÝVéXb€ª¶?º#JŽØX;ÈÛclF¸eÀyöËøƒ¶! lñ핺Û)ÁÛ .½à¶îñPò1¸. ·Ûû͸pVël×±b$H‘"#ˆˆˆˆª1q"@€ˆ ”ÈÞ(ˆ@… 9?š‚ à†(ÒÇ&/n 1¸ TBùˆŽàX+rV!P†òpW4%ÄŒ ®Dºp€@CÇ€„5c©åËÏ)!òä8œß¿_°ƒ%ãý©ßýK°0¹ÚîÄqay-¥©•é­6$ø°´¥Æý¾‹wO«6¤—A‹N>°ðñññññ ò ò ò ò ó0ó0ó0ó0ó@ô@ô@ô@ô@ô@ô@ô@ô@ô@ô@ô@ô@ô@ó0ó0ó0ó ò ò ò ñññðððððîàí°ê—t'ø…ã¬c60à>ÝÝÿ.õÞW¨xˆŒ¹Œè#çE c¤œÆ~‘EÑëÆÞ1ýã8h€f†™ÃLl!çë3†~žá¦aŠ&é ÓøÝ,Ý24 Ô Ò ]1ñƒOFÁœËó9€Ò @Ð <[  Ø PÎ PÔ}$3XLá¢A¨a„ì†7½,xw àÁ Í7H3¼™ÜÎö\Æ ]3C02Ã3¶ªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VNʬ•Y*²UdªÉU’«%VH•dªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y *ÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉ¬•Y;b[hJ •º¹ØÛ›h vÐÊöÐVûdm¡¶LʦÚ¶z²¶6þ¦ öĶ66ĶÐÛA^Úh+ X—¶€öÐW¶†Ú Ŷ‚Ʊ*ÉW¶€—¶†Ú ÛB•©¶…m%j²UdˆTò¹—™bU“/¶†Ú¾NµY*²dJÝöØ[ÌÈ•d¼í ®\c¬—•Ó­öØÌí 'u¨Xߊ¬•s$9X„«%sÄ„ì/f@U’¹â·\ÊöØ\­åc!­¹ðŸò‹—$, ‚EÂA H¹~e—.2åËÀZh\¹q€°Xc}¡qO(y.?—’ð2ã.\Eàc-²,ë-%œEŸhX±bŦU©*T¨Q@EeJ¨zR ©R¥J¤ÑXéè$ÒI¤‘ 0B… ^(ò(ò(ò(ò(ò(ò(ò(ò(ò(ò(ò(ò(ò(ò(òÑ`è°tX:,‹Eƒ¢ÁÑ`è°tX:,‹Eƒ¢ÁÑ`è°tX:,‹Eƒ¢ÁÑ`è°J<£Ê<£Ê<£Ê<£Ê<£Ê<£Ê<£Ê<£Ê<£Ê<£Ê<£Ê<£Ê<£Ê<£Š4£J4£ ,¢®Êx§Šp§›ŠW2™N”‘O”ùKþ7áLU%>Så?¢áªJY¼§ÊX§Š}R“«°§ÊwEÂSõqNS)ò•)òŸ)2¦ØS¥(Re9û”µXS…8Se8PEPEPEPEPEPEPePePePePePePePePePePePePePePePePePePePePePePePePePePePePePEPEPEPEPEPEPEP%PSÔú+2‚("€(! T(ˆ Ê¥(+h53AA”A#MJv"‰AT…P{TmveP%Pme¥™ATePu@¨HP *:Œ .ˆ:‘¨  §(¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L*aS ˜T¦0©…L Š™Ü2,›*aS0‚ ºI|*aS"¦w4g ©—åLïeeLL*gs˜TÎ0©™ø|"¹„ô‘vT¦0©„ D‘%J J”D‘%J H’$*QRŠ”D‘%J J”@‘$ @‘$I@‘$Iy™——UЬUb«XªÅV*±UЬUb«XªÅV*±UЬUb«XªÅV*±UЬUb«XªÅV*±UЬUb«XªÅV*±UЬUb«XªÅV*±UЬUb«XªÅV*±UЬUb«XªÅV*±UЬUb«XªÅV*±UЬUb«XªÅV*±UЬUb­«jÚ¶­«jÚ¾¯«ê¹u7WóÕr«•uWêãÕr«•\ªáêãÕr¦«•\ºžwUʾ«•\ç«íÕr¦«•\©«îêúšš¼î¦:¾¯«êú¨ €pÉíñH¬oNVùI$x<ÁHAD¢&T°ø7ÂŲrŽ'Ža9ò|Õ/)7§¸ž+ôü¯-•Äðqâ~O×îùgáû]¼óàúGüðüŽÎ€Ú8t5ù?å'9>§g’s“·Âž ö“¨Î·¹ò<‹É‡‰í^oÊzueÄùï\t³˜ÕöšüÏX­ëœ¿jE`o=*‚ß9Óö üy÷Ü_/ïižüPòùN#ðy£Àl9ß7—O­ ’°AxÂgŽ{aØ '|˜yxÁ{æ½>ØÏP;¡ÚNä vûCÍ \Yž8;×H'OØM98)ÓÁñkJP”øç <HM¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¤ËfÀÙ²î±zN$.+€a 6:@ûê ÅroÐ@Pl€>@TpA)‘€PDd 9PŽç:œsŽ’bçÐ ¾Cœ`JsœÀ¹Î>€(€P (ÜÊ÷ß^^÷Õ~÷¾ûÞÞñï;ÞûËß}ïõ”h3Kp×L|Ûn|^m5šK¤\’Y Mb¸\pæÀªä¿ÿ¼W¢±Hp„•“…Q¸aÿ¼Zoª¸“I¦‡( ¨$Ä(4Ua².ç¸ã‹ê¾‹j˜Q]FF¨Š¢è²¤EJãrÄ¢¼Wä|ä7NiÈ3Ñš2]ŠÌ‰(A ñW‚›€ïîÖw ŠqWšÀ`œZœÚÆqñ,U „æX×fã\jøÎøDˆf ƒ˜â ˆ1‰…³6(h˜ÉpÄ2U±FhŒT]À1 BìWdâ<„`‹”’Ö€ £ïC±ÜûÇÞ>ñ÷¼}à>ñî>ð—F€ 4ÞFq÷€û€}ã±÷€ìÞ±÷ö@Þ×°ûÇÞ>ñ÷q÷¼}ãïî±£ïx €ìß@4o¼}ãïxûÀ}ê(ûÀ~#êøß‰à1¨aâás;~OÀ-Ã\¿%WÆ=_€Uއpºuì!|È?B¯nè°»ðAau1âÌD û ’¢\]ŽºB´vB^$‚é®ÿæñôiòBY³fçÖnºÿ1›®!×(\G¥øDûc#øë¢ ʘߤR‚ÑÐQùiÅB^žgϘóÇõ—$,#Îÿ<#¯1˜´„8ãˆs‚°à¢ôg9ðìˆ~„!ž¾lÞ§¬_IÁS{©©†œ ƒàEaXoõåÄÄcˆº ¬Hó4Ž"ÝxU•.SIKŸD9謩ëÇ*EÆÔùeçHë¿ ùó"E4ÍeY ]ûð)ç`…ß÷·« ûÁܰ¨õÁ‰½IßàÀüˆ´Q=Ù¯€Ê€dUÁzŒa`96ŒÅ3ן¿@f År&`ƒ4þ~)ë>zC¯‰«YH{~!p=3ÓEò)@.ÿ‹Ê!ý‰ë”‡¢…ÿÒc1Ya¤-P¡ŸDÑ÷° ÃÎ:8I' ;~RpCÿë ¤® ò²Æ¸*ÔX,Lݲ1$s±ˆOdŒ _+®çø?ïÈB&Lj•Ëvºï08ƒ®[˜áÖ%Žºäüÿ ƒ""<”?\äyE…Ä/ÖrTà!Î@~HüèØ§Ðº¢/+ƒ"X¯„—òÇ¢+Á €¢ÞÇ?'‚íŽ ù<ãYEaCÁú.y±ÌQ‡F'•Ðð Ãð:ÍšŒóιø€¶Ž‡$Ï9áDç'³Ü,8ã2½»Ëç¾B¿SoçØ]ƒ®ŽÕÜgúFhÍ^^ÀÍØã–ÍëÌ8~OpŒ&nàJ Iò‰‹xÌ——› z8|Ý “GQÅÎ#Ⱥ%u†oâÂñ˜¯þo^ÄÐ+¸¿}}SÝ­–˹Eî›ÌtzË笧2¬¬8dU’0«V´íVGŸêªc†jòÜ+ËÑXAFŽE–¹ÃNxú %þhÓ ù#âþ3ˆG§LãSúÃÌÉYcBëV<Ó’Î7“»…îƒû§t0‰.ÜW ð E¥N?ù?*”xGG<¸Z*C–ïÜòs¢Áß ŽAa„þÂû2Ýú8@âè™ýx(¬2ÅMeé#¿¤•Ðáì `]~(DÛÅèBëèÔ£Þÿ1ß±/_¡‚E¤ît/ÿ<ÂbSÜü2äqŒe@Ö\×î ‚Œ)q¶””¥×T¹4¨jÓîÔ\ª‹±s¹‘T3¿©—î+@b÷>•2ó8>"‘¿ÜœÛžo6á%‹̼»Í¸Qpª—×$n â=¥þÒ‹‘ÞbÿqOßîOggSBBVX9(YþÇÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿ|ÿq´7¸3ð/ü\ŸöâRˆ¹@}î^ßÿêê­Yf²Ñû–KÜ›æ¦ñìLaýÅ(g÷Se~µ)J\Ò èÜ__Fâ냳³û ™ˆ‹¿rDÕÔþz˜¬35¸€]ésŠ•q. Ö›ëj«¿=[÷2—8_PÍCcõ­Ï¥(‡ÓîU +÷ÔÂ)qn¥èbLoAãú.cƒ: FÓ÷)÷„0 jPÀŸ2ÆxhËê®Eb׆zˆŽLñ§:pþÝÊ­JV– Ôtn—wÍ~ 0†ÙšÑU7Û 9tHAª´z÷ઌ5`{ñ—rË=βðf9íïšã-mðq“áû§«ðŸ‚û]¼ïÄìDæ'°yŸ+èï}½ÞM)ô‘y–Zß3Ññž§´`/w£ðAÐM~†Uéì_'(¦yƒæó}ý`çƒøµ“·æö…{y¾”…=¦­~/ùç^ü?0™=?LCý§ ¼Ý~gswoÇÃä‚x)/u}µªÕÔû‰ì^ψž y8fïݵÐôsîï÷csÕÞ=£Ä7³ãc¨yÎÞ_šg<óÏ<ò™Ï<óÍ'<óÏ<óÏ<ó#·)œóÏ<óÏ<óñ ë;¾ï““á<ÒÆöZÑaÆýw“DÀŸÐDøœ &ÞpðR> èiü#H|Ï=…ä/0Ðã‚d¾_±ÔqW*uTqy½Ì!6v܃£ò¨­Z§‚Júi…+Ñ„zX‰ÐƒPJªªªªªªªªªªªªªªªªªªª¾úªª¾ªªªªªª²À¢ B©UUnœ÷¸fàa†3¹Û¯Û&˜ì¶Ï¾ýú«0ßš¨ÀÁ€aU[pX6ûì“78ìíͰ›œ.`ÛŠ˜«±œì™€1ÎgÇs.ÀÛ>ïŒc›0÷grEP*ÃP IÈ@__Œ1îvÍÝ¶î Ž6wpüãmï{ÞÛÞ÷ÞÛÞ÷¶ÛÃÞÞûïw{ï·“:ÎM7×]{t³÷á®òߌç9N6¼ÚkŠÚM$êEáLÆɱTzutæÎ2£hæÑX˜rØÐ(*†üg*ÂqÕY¿M±X¦" ˆECcª¸˜­ ¦…!•MQ[u7=Ü|×âÃ’ü“‹n)É9§IJG&nXJû«3+qb†<˜ócãly;ÇXÓv{µÕ´kš¤Q¿4 B¼—â#X¿%yµc8@¸ çÄ®Ä'y7'&<\#ÌqŒbð„Ü÷NË K2ªˆŠ*ò…W]ƒAæã`2=È4v@h@îxûË£ xûÀ{ŽÇÞ4}ãïxûÀh÷À;£@}ãï =À}ãïxûÆ€ì}à(ûÀhûÀcïxÑ÷€ûÇÞ>ñ÷€Ñ÷ŽÀ¸ûÇt¼{€q£¡Øì ÷€¼}à=ƎǸûǸ;v×Þïkðüß‹³À(€h@F€Ö¤;Ïo7Áø ÈÇàü™<œ?UWÌáøº~=àÇ…"ès ]ÃØcªô¯Jôòƒ–ìt ¢Ý΋w3ì0à0 ç°8â`rÝžçk,,ö®­‹ ñ=¿GŸÇÎ8…Î`žFŸÉ¯Ì ®³*Xë¯>\öãŠ:厸!ãÿÐýD©BŽâ:äKÄWƒ÷”x]v9× ¬k€âÞÑ™_©Ãø¦à¿ç¯.ýËGè_Êàå¤ÇTVE'SÜ /Çýu<ÍžO뇉G+/ÁùÂÕéèäÊ1Ÿ Pìt/ç‹ÿ+ÖXMBñ/ܵ?÷õ”ÈfÍð ü Ïæ…X×ÿ ú ¯¢UïÓ{«“‡‚ª,Xô"_঒k ÷ýÿ]GÑÏz s¨çõ4¸GSX3âÿêIAn†Xó¼ú!¢Žûó\ +*ßÈzÃÄh\8½Ž `\ž¹3Óÿ•"‡óâ#@>÷®$ÕéÕåç#½~äÿ1 <øž1šT®‹@ÿÌQYÎ4aXaŒ×†cæÆ$Ʀ+Éɽ“æ)¬C‚›ë Ãͧ¿X¿øfÍG@ýK‡£ŠLiGü^ëƒ÷Áó"Í÷—`‚úïæàqúFŽñ7K%Èr]0°z*È"²×^y3 Säè~¼ã0wžt8/Î…Úö]~bˆØiÐ)øCŒzžsËð\@ÈäÀy„`ˆ¯ˆò0g<œïŽ„ ˆr°âûô ?¸„å箦”X,"ßȳO¯ à$ó‚T+  Ç”Páéè¯OôáÚ8(•ãùÇá?‹¹ÑÃkÞi¬¿üò# Áyð‚9ar{Ç9ÿ& àñÖèx˜ïæ½|Ù³çüàÿaœ†xp¿\:ãˆ\Gã‚VA¯™ç£ÈüõàÐýJ2÷XBšðÃÇx‡|UzD¿ÃIãÀM¹ùùXþ?èçÍ›0P‹LÇóuÎ(ðf¯‚™¦°_¯‡´¢šðQœ‘xS×oÕ_£¾p]yèü¬ºàIŒÖFnò.v¼u^™Ê+˪ðQžQß„ :‰Ç kWº+r}îOÉQ†8Áç p¢teƒ/§×Ô\k)zî•÷Ìð´é=eÞO:öo:‡‡¾‡½D’CP%êú}m—Äó« ˆO·Këç³¾üÞ¾m½cBvÜKÌGósyÏÏèuõÃ×¼æžQž'^¾3êæçyØ“››š$”:=ÉßàÂùÕ¼Â+=pcã©Ðžøž/V^YŒyqûÄà_¸Ò¦Bâë˜.ÿ˜Öì]¹dRäì¹Or¢ ¹x²û«Æâ—}Æ”­Ï¥ ©r¬E H»C2<£½~¢—(}º±ÏRò¯ oy·›pa¡rè2?ó0e1ð=Îû–Tf{e|/®ˆŸÌÃ<ÿÜam¼¹ÜÓãpà çw&6¾Þ"锹0dE#d˜Z]$ˆÞ #Á‰Æ›¿ø)ÿq½/¿î`NÇ®ðcjf!£îVºÿþÐ.ƒ CräÖóÓ‚¤A‰_uÌŠhd UÿûŒ¤}È Ê2{?x*·-[šUÆE@"”åÌžW"ïù W¹Dnr`À@§ÜÊ\xW˜?îïû½ «ÿr¢â!BäÅ1ሃiRI¸ÈU؃?MɈb ET}”Nþ.HÜÿîÅÈ¥(@3¥‚· Z ÈC6ÕÔè4cG.ït¡\Tsvr:íl·ÒêŸE_5lC v«ë]'JOŒwÜÕxQ°Tî3Ÿû¥2°—x¼æƒ+Éi´>Ø`Ó Žc‡K>3è6û•‘ð¤¥Í[´§:N{÷Ê¢m¢BAs¯}?¼l@0µíqâäm¥Í€ì‹bªb$J\u¶ã]›lD¤D–ݸ€d6Cqhuv{ýÈó7ó1‹ˆ».6p|fb«V·‚Œþè•q u®æ^¤÷Èz¨ðx·Óâµß/¿{νƒ".•nK,¯¯Zàãºë–\©œmS pòïJõ¯OUky¿áÁ’·€1RãðgRY ûQ M.9:SÜ‹ŸKˆ1sqÉÏø·ž¸›»ÝÎ~êç]wpŠ!áÌ×<škßÝâmÚáâ#«…»?û¥\$½ÜbR½K„Vóºù \ÜO0“~©}vt×ÛôÞ$忯B»ìqÃHU¸àì’p‘ûêFaé¬{îz|q==9Ï:K7‘#Û³nÅ#7ô[a¬gEÝÀ­ýøDýèJºk¹]Ü•7™Hë?…}ÞL©«„‰…õ׈ê¬x؆±¦TÁgT`}l¦˜L%09Niƒ>ÿJM)>¥$†)Iÿ¼ î6Ûì߯ÍRíooOÏÏïoOÏωùùýí©á™~gÆß™ñ—âß/߯îÝ·kºæõý]õvý>Ÿ>Y>Yv_ÀÊøþYv_ÀÉeYe–Ye–&pÉí àÞC)yµeSj±£À#–‡.%A®®eÇ<eHÖx`'œÒ&É K#”|?¸a°Ùá<1~~Ï,–mðqâ~ßÄüxü[³Õåø)äùÌ‘ õσ¼Hp|ËÌO«¯.Žvp6„O¡OˆžNì³g˜ ºRÖ¸Ò§Ç}ž @)ìà³ô}_oË|žŽŸc-5s´À p ]Äœòœ£Ÿ€GÕéðAR'Pæ|sRt0ã'“Ç¥8+Ùtd+õ:{Iäžõ*ϯǂ"d~Ó•2ÁMGÅ€³ÅŸQYúYáÇö|59•n'!Ò™OggSCBVX:ê•}ÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHØ\6¸¿iü0gÌ §z{Ðå÷>o ‰áÆ+kÞ^̽—6œ ë›}‘ætãœ?$ç¾O3ãSÑéãÁÊûB§Äùºù<ðØj¾goé'Á¡@ò:™9Чšrs9õ¸Ä˜ýOƒÙõ:>®SàýËÁåæžž¯ž_E½‹•üëÑ_‘ìú¸üv}1=à/“—àr+RÀˆüåÿÛ¿ /¬÷)“ÝÔËÏ<óÏ<óÏ<óÍçžyçžwÈ_7œNyçžyçžy矋' GÕòø=¾ì;WQnŒ¤ääø)´é/b‚ŸÌø;æu\1S—Ç€‹NŽÊÑ8;ãàs;ÐÞTò³•¼á8«½…â±Ñß]@[+ÊÔlR?"³ÈÎÑñG³Èž÷ð›Èn¬ss¹¡Ÿyû$4HÀèðôBˆ±ÓM[èµZÞDøVC¨=åUUUUUUUUUU~ªªªªªªªªªªªªýUjÓ±UwR©Tª¹,Æuư!™1…Žª«·vçÍܶßðÍÇ1VØ U`,`0Û9ÛÀ`E‚²‘E³œ0 Œ°0 €ì 4͆Œµ(ªý³(ª£}Øw ³†`!÷}!"­†m¶ÙÌ;Ó¶wA¸0çnÞ÷»mï}í{Þ÷аÛÞÞ÷½¼™Bõˆ_8Åê³X¤Ò%8A… ƒP±XmûÇÿ‡ïï5âÑ]T‡‚Šªú©X0ÿß÷ï ¼Úi.I`ÑA¨Ø±Æ6½©5ÂbijAˆ©®k"¨†áPZXÔa,x¯Á5c̬›§â¾ç¹`&ÅÕ]V BÝ]È\/Å^$5‹qsŽ‘Î1‰T¯ÌEBüSŠ¡X®ën¾/‹ÃÜaƒQª BpWŠápSr"n›·‰T0ˆböÂ.À|†!p¢ê®Ä3*.ŒY‡ªèÁ¨"ä"«”À  ZpîÜ}à=ÇcïÐÑ÷µ÷q÷¾žàGcÜcGÞ4}ã°xûÇÞ=À}àïxû§`>ñ÷ŽÇÞï}ãï;€Z׸ûÇ`4Þ4ûÀv@}ãï÷¼Þ4}ãðikÈV§à²ü0Câ~4h@€8'‹ƒ^÷Ñø=Séz¿àŒíåä/âá‚ñ±À1¬:€†ÁŽ‹Ã£h˜è–æ:9ƒ¡ ·íºæ øŸØ0|ç_Ö=óð€Äþ¬ß,££ß'Çœ{ù 0)ýçÄJ¾ÎÕÉ}ºçýøÆÛüq™\ ž`_­Ÿ$Oý¹‹Q!ÿá¬:áùÆÐ¬GÇn~§Á=EïÂKD/€ë£nJþÈ‚_>Ë£änyïîø$¼Ž…ðnxÏmâ_Ë©À~ºÿÂ'‚>f yÞÞ[j-Þgh<ÒY¡1Hš»(Øüò¼®‰Gn'ö|˜èDEiÇÛ||v›Ïû ¿¾&p`FùB–g˜á”ùä®ý¹<ÖA®ÐFÚÙ˜0^q1ɳ/™…úOÇŽŒŸë’ÿ”vÿý±H8Kü úiH(¿þÐÔ_®ü~B2òü] #Šâ äCøËÌ /ãI!pSüü‡ð GÍ àý¡¿GS¹Ô~)ëóìɃ÷æK‡0âÀ'•Œ]nüø/•'!{C£óóóœ&@þ8¹yóˆõ²B) Ò $õ¨Ì!L ÃþesµJZ"þ‹Ã¶ èèÄF9 öçB~/Ì­-ý†ÛôÇû.y°)ëüü i8µ¨?ùˆèÖ¢5¡çZkHÙþN¶×;O‘Šg®?2þï?رmç. Á€‘v¡úäõÚ}¿8…Ïùèݯ¼/³t|ÑáphuÁ G¬í$ÀCó.çlìPLà^Wä(»¬&P!uï>8/”ãÌuÑËýöðPOŽ¥ù;`G0.uûcñ¥ÕÙ”õ1‚u‡ä¡øøë’þýJ:7•Ð`Pt/xeÎöû+O¬?ŸŽ'å¢8˜Üñ.5£ùù?‹XG$?¼¼þ%ÏÅÖDY÷ÛsY'âƒ.çìüxýìM“±¬¼ÿç£ø}ï=gÖVëÎ-hquÀ^`Áë-h/¬9|Ä寇’ þ ƒ°è‰AàÁxÒ‹¿(}`RÒqó4˲†§72(?ó¡áÈ•ÏáyçüAŠ ¾0­š]}ÍgÈÈëÀ|ûóU ÄÎlîœNÝ;Ïž®‰ÜQ߆:à1*.óáÉ>gêÖòIÕåOƒPO‘¼KAG„Q>GÍóï™—û⫆žŒ®~yÔUVW„¬Wœ•Çdù•¨Å> Ç“÷ÎÁ‰¢DU–~ ¹óUçæH>—ù¿M=5}=âD‘”ºˆ›“á4|¾D~ÇÏ¿"¥ÿuákBgÀ‰YùáÀ𤅼Í⾊þW¯~Ð4j ÎŒddx?ßµáµàÈý££àuà$ë{ÚëÁ¨ˆlÛ9÷)·™Œ•~­FXEnŠŒ¯ï¨Éü>j¢·:ð¡r~fðdø/Ƶçä}aךù’hæ '>éÃú$IÁ÷dЈ¡Q¿šðGö|‚`ƒ{ÍgȪˆûµüˆ‘+¨(Ϲ/[¸ôðeù³ú?*¤óeN4*µçÔ!ùò~¯Ãì·¨ Bèuªn ¬ÑÍgíV­`¶ËæØ†ŒxÊ­ü.¾z­Ü [£y>árÖ'“TJ]ÖµÕ³Þv­©rD%”I+cٱ국'À@K’>ÂçÊQ€Cå$³wm)DÁáê3¶‰¨lň&.¼òkÀÍFK‰F^rÐEQˆ¨‡š½Q]ZðÅUI+˜fŒÅбÊ&ed›9PT2§Ó¾Íç÷âdn—eQ5ÑŠ#,lêŸq>l©µó«¹\)¿"nü“7hUËeï)STøTÏ<Æ‹¨Ë1.aðŒGì\1’ùáæ2&2Ÿ¡ŒµhïDˆ³ðT÷À×ìvT]­Fâ7‘‹´Òßì›äqm%¿¨¹‰ù+ö/örp¶ö9\ñCçØËL¨>TÊYl£¬ˆ›ã»* ŸW2 Þ:õo6"£ ’TšIuL©óÕå)•Òi%TÅèÎÐX+(ÿçÿf]ÿ_Ò€è.öf¯;¯¢æ»#²;v@ì öÙ ²<|ÄäüÜÜ\ÄÄìœÿ[-ÌN·fkSKix„å24¶†ÒšZiMÍbpÉ퓦8Ï šuc†Ëw´h,Šð‘o”Jôž,_F—ÂK\6F½2Dƒ™Ò1IJD+ãùø±IgÂx:Ù>•Ë6Vß>àKÓËðž“ð ðû€ûîröü‘ÈB';“ê'ÔìöSÉÙᤴªy< àø ÝøœÃNŒæó ÔøôK:)Ù'7Ùí/GÑìú½0ñ>'—³êîö@ÄøOªÜ(qx*-ûœ?¥Ÿ/~}câ=oy4CAñ´­éŸX¨mg’å÷ž ÃçïĈ#‹=Tͳ‰‰ø´×Êpb9àAå_|¹äõ˜¾e g/ŽÍPë½&¥ø«ôO—¶†ø<ùÝí^Þ§ÈZ¼­<>­î;$Óâ§Gíî? T·‰·ž§GÌAêù!ù8pªw¿ä'±»ƒô´‡k:ä(pú1æ%;>G§µ}œ‘Zvbx Ä'ÃG ™½çÂÿ%Óo<óÏ<óÏ<óÏ:óÏ<óÒ^Czãžyçžyçžyçž~0½ï8>§-:¿3·¯$ j(.xWø ¨ † ×ÁVz=¡äø¿Ùòèpð@ïôWè{>aäèöÒ†“Ž4yà—†^yíO‰Éð <˜ï˜•쌋å§ZÙNª JBΰÐÀíPíNˆ{š½ÞÆ“FÏ;y?úD9_‹G"”íðr¯ÈO ¦„b³ä,C¾o¶ûï¾û}¶Ûm¾ßo¾ûm¶ßmöÛêæû¶Í·m¶Tws$q]ÑôAÓ•µ·;5]× îº€ @!6ÛXrH@¦s‚N€ü#¸@¸$€€œ;Ü çs€ýDZƒ±Àcl}€n„gP„ˆ Kœ)ÎèA܉öÞ÷«Þ÷½ï{Þ÷¤4¯{×½ïxy¼Ro¿Æp›Õâ“H¬Iä X²aŠ€±T1Œ&ÑXCXÿkûÆ0űJ®+2VA&FØâ¶®$¦ A¦ˆ¢/©âhU_uø&«ñW‚»žéÁ7,Ä0€ÝV/ºû«/Á~$[ŠüãŒ_u÷^-ÅŒ^-Å1H‘~*îp…x/ÀBâ¾íãX¯8µ‹âøÂ/ŠîW^&ç¹&åPDN ÁP¨N‰°±=Ò$V"¡@8®Š B.X=‡°8ïaˆX*ª.°T0FÈÀ6¸ÝˆEˆ ÕED@>ñ÷€ûǸ÷÷¼}ãï{^à=À¸Æq£G¸Ñ÷px÷x¼}ãïxûÇÞ;xûƼh¼h¼v±÷pxûǰÇÞ; ×Þïx¼Þ>ñ÷Â'ñ®€ h×`øžI8DÔGœŽ‘€hûšû/'o'›ð |oÀ‰øçô_Ú]p¿àm7úTø¤ùâóùpEäPS=o|Î<ǰ_p [Èv7ñäßo€ ÿ^ÃÛ—ÛôæóìŸoðëãµýsà :Ÿãóð¼?³âŽD ÷ô Îu×Ë~B0B:ÚÑâOÀP`2_úŸÁ?XeÅþ ·Àcë súÃ/œîü°ùe(¿´–ì.Zm¹Ø! õÿȘÁ oøÎ/[Ïx`\]tNñžYuùçñÿƒædyÔëùñ8ïèu™ø'æHŒÑƒÛÿÚëMif²È/ðdlc{( ù–OÜÓóÿš°;û0Ë,²Ÿ9ŒÏ”.­N _ó5|ÄΛÝáÜé k\\!{úâÿ µa¨ÐmþAñçâŸ}æ9ÔœâärË:ý§8‹åùÃιøwö]|yøèGüi+ûÂ:ŽC“wÿ޾d<ÁˆLÌ~4uúçþ¾y¿³ 4£ÖÌî!uã(Õõ®|JñØ 7‹ÿ|pÛÁÁs£ð/¾ ùðuûoú/ùòÌþsð—²Ïþb'ÿ<˜Ìü»ã—Êý[s<ØÌÔ“ž h¼ízÿ £íÚqOggSEBVX;.­Bÿÿÿÿ,ÿÿÿÿÿÿÿÿÿ¸ÿÿÿY´?²^þ² š'Ïþ/Ggi·´‹úÖXuÌ2€ë˜Ç8;Êÿ®Ö1Ì !èƒë¯ïçÀ¹ÑþSð.sÁ×P†™`kþ׉@„r/ãN‹Ï±Ôc¨9‚ˆ=Ÿ–cßñ¬B= Íeb…øŽ{ýþC‹¡vpFeÉÈ,Î=ˈ·•?›õ>'‘¹Ãó­ù·BëZzÄOÚl_‘&Aþó¸q”#Ÿ¿§}—âè?0þáßžaDÆßœ1þZÃo+ÿ±×çßn²~,£Î<îkBÍa?/9‘òËÖñ-…òÞ`¶_Xaõ”Y>NyA+à¢c¯¼›Ð‡þÖ?÷¡?<ß{ÑÒ =©üº‰ç•²ûPa˜eqáê#Þxó¬,žó'ÖÜÅOôDvÂg¨êîW?_ˆDÄ,ì†Ô¡ÙÔdf†áÆxû³ßNRy!çÏŸ íÀ¾dæñzt<~FÃÞ®<÷ÖAÃñàûâ=ùÑÂûBü~ÑÂA† s ûèžt:§„ÃçY~-%{&ðé›nž¦7>ôFÁ;ÏÎN¯;<àÇ_$ób_Œq‘øŸO†l:«¼¾{æ ñ•øÁhË傉óÒ'¯\ &ëÓޱӬǘ|Sξuêb=cnö6žOŠ ¢:5ó˜£:XøB¨¾4ž xl¢lÛœkÚ€tÖPP±Béã,™lB&ÛEhÛ°CrÏ®Ð<’{è6Ùi˜váõ¯¼“—éäìyåóéZ÷ ÅË”ÈØê5Øqá²1A±m©ÎN£er"y!·•ô€ë,ˆ<Ÿ$1$Ï$€Ãël©‘ìŸM¶É·8RG¶¤ ¾NÍXîzøQ©œäl4™\äZ àÝÀƒSWp"%Ú’éå#L"ºmzŠ”RF¼ÙèH¢žI$u]‘uu¯!6'ük •(:úS¬!:#ƒäQFALk9 Q[*£Z#C@F2Ñž>¦ £ £Ò kDêçZ²eÍ—$¿P.±#gLœåòªv 6Y¶ZF‡%]•hæ}rzÂi¦B<)æmËFG4•-jR¦‡K¸¨×÷pTaX[Ž€~úÐZÖN˜‘šé4X°p(ÿÁÑ ‚F´0€™»{<룲\ä]]:¨\¾˜RÈõrrÁ= ˜yëteÐõÈù“M0Kt¸ÉÈl<‰«Ez:(>5/…èÅÜÃ'ÏRúèN.5]·WîžóÒwºe‘‚çD €š/¦}_Ccœ!+äçaür…4‰¹ÆŒë—¸à’8Ü“]|Þp„ìsãâ?¾=¹ÿ¿ãÇú þpõá—¾‰h¢š-ßÀ¾#ãÏ‚øç%ñì*Öe™s.€pÉíign•Û/²×Ë€lŠÔe€Ôkä—×<.Ù9'Â'9­s<¹@mH “çéMlðžúùþpÝžÁS¤?®Úå?gÃ?^ÿçÞíöóSæÜàûðÀìù¿càýxã¾0yã´½oŒígSÆ'sÚNgÊôG½éúNaz ßžƒƒÞùï¡<œ6ÐbMùHIö4šSža(³Çé&4Ò—‰Me_\§ÏŸ}ß7±p8ü*@ãRr|ðõó›>ø¿ v‘÷Ï8°ð3žp¤;K‰æRï¾y>TàÕyžý<žlëƒæ} òhâsÆô~IGðiù' ÷ˆðóTàãwQ׿y4ˆŸ3Ú½Áìú=«ÙðWµ+Ú¾Þ÷àõ·Àôò=v|8%ΧW[Ÿý(̳žyçžyçžyçžyçžyçžyÐò'e9çžyçžyåoF¥èñºMø öóW <½ö¡¢^GWÀèùdHŠ‚¾ÏäƒìãÐÜà5û×Ñ^Ø‘÷<µÁõ‰Í^ixË)ÇogÕóyçYظeìé‘’ ä¢qÉ'^Pó|ß |O£âôáÚÙÉ8z–Áû_‰^UvV^HLJy%ѨÈr!Òó÷w~ïÝû»»»»¾¸à[f9Å»˜ çÔCd’‚ml™eG't ˆ*¤8 @@A©ƒ»ºA EXHŒ–Là%Ñ}ñ&Ú> X`%î&A@ä`°€€µ6ȱ³¬µPˆkML‡t{Þµ{Þó×½ïhî{ÓÞõUé*'Zʱ¬*ñj®ºÅ*C \ºH"‰dƉ…B çN1„Þ+‰H¸<7< qe8ÎæõZ¬H¤¹D‚Z#Ž…°›ÍeÌ”Ib¢ˆ ×@Š¢³LKMXî®ëðW‚»+ºlWMÏrªq=ÏR¸Xj6QeW^-ªûû¯»„oÍ÷kŒb‘"»©ºBݬëŵ_Åæ»+ªõh“MR!6MÈT&é¹q7MÒ$MÏubàƒqºp»Øyvä.ª.¸fq²àª,@ @hûÇÞ=ÇcïxЀ÷>ñ÷€û‡Þ;î4v(ìh÷€ ÷÷ŽÀÞ>ñ÷¼{¼>ñ÷¼}ãïxûÇÞGÞ>ñ÷px¼}à>ñ÷¼}ãï÷¾÷Þ4~>ïÁµø{À€;^(Âq<Þ©äˆü/½ø½_‚Uü³‹BÞ-ýû#Þ-Ñš p.Óóžg“츴ñ0#.‘`ƒÞr1Ö,ÊsÍ|ƒm|ÂøŸ°V ! ¿7dùuždOÖËZú³;„`ÆXú°Ÿ6g;Ù·~n($ñ²ñy˜Ú>'´ écþH#h[ÿë}–°]¡?ùùmÔ£Ÿ<Æ`¼A9 óõËýçDpþíØýD‡ðþ8›~´9í³¢E*'ùÇ_ù@ygŽ¿ úæÌgþåÄdýð?³ýý9dg·Ëôe¿³5¶? Šç—Ë<ìážÀ‡æ>OîI–`üDggËò^ÿ—ãøð`øœG-²z-££½þb5¦´äR ß›™¡øeÇðþçDïH%J<óóûÃ’n?¾xàŒyÆïÞÃùùú$Á‡ãñC”Ç™ö/":÷¿ˆÌ̲2?¾Ïäùœ ¦zóÍùñç)ÿ“ÑÐ{ÂÏ+å>ùŒø-Iàeü7ŸçøŸ—Ÿ‘ÊÛg<ÍÞ¥ûò ÿìÉúÿÈ”e¹Ëf%:úÀÛËÕò¼t.s|y²@]tëyÜçÁ··%Ì ®ü ´æ_ñ·ðËÚ#>¸x#ÿ(‹ÏGÿg6ô:8¿ø²|‘ÔO%A“üˆžG#ï$Duä“y,ÈQ`ê<ãÞ/Ö˨Äóð_‚$ƒ.¢Hœ­ÚpDy9óÑ–/Õ³“Y<õãœüÇÆÐ{Î{: 'žþ¼ž#ÉþËã‚ãHá@!uð.B²Q‚O×Dßç°JùgáHY<ü ³9ÿsærŒ ‹»Ï˜È[xž.uÑŸÄ£ç þB"fÑóÅ¢„¬õ–þgÌ.½áп±NÀ²€ñâW8¬ù‹®~ƒ~Fs} ¶GóÖP ‡9×àº8§Zl#=åæmTNöjF¨Ëüµù¾ÏÌþF¯LQ]Ñ‘4ƒŒQ[ÿž^çŸÉÕÛf"%=ÏumEÞ¿Ì2Ë<–èÀ¼Oßç\ûrÖ fÜ¥ù1È]m…ã™-áƒu+ú ë¶O¬@r%ó×°¹Üh± ¿`\GyÿÛÛ¼ù@fœÈƒ¡ Ž.…ÔÚWð×D®´ù)Íì `å¼¼ ð=ç€åyç´E‡ô”P„9Ðºáø¥à^š(¤_•…`Š8Å<þTÉ|P±]ÊGˆAÔž±¬?ëŽB˜¨`àåaAG?¡ÁúþP ò1Ä/?ÅLŽ.|i¡y‡€ïÅÏÿßfi„çë‹ãÑ e>Š9Æ*ÁBÚc¤Â™@ ÿm)öíSJb“ãÖ{T¥%ðˆ' ï}µtõ=Zß—¨B×¢èöö']nÈ»*•ž”VÔN䡺”PG "z‰§åKV¿$\Fü§“kðî¯>ÿRNwoíGV¶ŸeeÕ²Zz=Q©±¨кcÒ¡òrƒ…ŒFç¼”‹à$‰‘$„JKÓSÓïú[ÒÆ ¬Iý&W_®P±Q(¬b ÆIDçVäûÛVl{uY%O¨ô‘ëì{zrËl1í…ÃÚ_’q]gQØ£ÓÐúGLzúÆ:Œeë5é8Gª±`ü=5 ¥|O¬@•iTF'^ÈÞ ¤«Ò½*zmcz#F£1×(Š0?‰P½JÉøHH¹É}Ú¹råÁp×´&_¿ÖþÂù _i[{~Iõ4åâ‘/Ò:¶®ù7ÎDH|W°}Û¬¯©­îE/Jù‰˜ŽMAð§AµoF&Bm’SÜ©uŸR?r+ŸÉc÷ßs*p\§ÇúüáðùÖ˜…ÞßûåíkXò÷üË«]²TÑ}cJ;Pöö}ûmeê"×îaØzÜWÖ¾ˆà¿\BU•ðõr®9(šMè{M¯’7ïöPå9Øææ×y<•¼ó<ÑÑðv“ß<Û&dì­-NT{1`÷éYiÚé}]æ¶Ýö[“•ªÉл/t]:¥V=ÄçþÚzðÝBµ¡bá¢ã¥ÁpXϤWyØpÉíñ[$Ûmzä1@Ž%/ FÎ G®w”Ïüåç9c™âEGrH±ÍÏÏð:Oá>çåêà]’q<ø,çð|…øø~Ͻàä7‘)§"}ÏOƒæP?–G´§¨J|#‡“Ûàøßo‡ÉVõÇ£¸Ì`Èb^ õÒ^’ô§Ž9Ðì/·˜Î§ÆõÇ\sÇBœã<õß/XÓ‹òL§ÙèùƒËõ^†/ü3êôö>@0Ôž%£gÖAŸšr×à0৪á…Ì>ßN¨Îóî}wîùwàv¯oÀPå^Õíö¯n>Õôk:|n‰CO[þÆXÝ òpJÐ÷o7žyçžyçžyçžy¤ëŽyçžo©äsžyçžyçžAš žÎšóËõ}°ê“gŽ0ØŽrDã§ö½1Y¥!¤T:à{}LÌæÈ@™±> )ögÐO ôt)4:ã$Íï"|g<òɾg°;E:b—` i_QæQa¥òxž„ó=OO•8Âv™äý? —~'$ )Ê0eŠ€â¤=žlbªM˜ø}Ó»»»¹às»»Žî8îïH〧s!fÊL›- H®50¬%aµô€PM;ºî\ +€AÔ‰ 0€„´ ™ˆ‰# !áƒÔ @m³€:0Ð(Ã@ÔB0RʉÿþWÿÿÕÿþÓWÿÿçÿÿÓŒgU øÕç ¼Þö¤kR%8t%" dÏ …dÔ±«æÑZžœT*>h5c«Mb³I•$ˆ……PÇÍäµf¶D‘ Ð*75Ebb»”<¯³ ×Ù}ÕÝMÊ©¹\÷ šãc]¢Ê*¼V/²º«‹î¾êÆñœßvqxÂ++ºl…7WtbÚOggSFBVX<̼·÷ÿÿÿÿÿÿsÿÿÿÿÿÿÿÿÿÿ­‹Åâ±!©î"n{ãrºDŠB0 µÐ EÂèšìB.‹ªº. ÕEDv@öãÜ}À>ðx¼}à>ñ÷ϼ}à÷îÜhûÀ}ã°xì|=à{Š>ðxÑ÷¼}ãï÷À¼Þ>ñî±î4}ãïxûÇcï÷¼}à>1÷¼z¼}ãGÞ ûÇÞ~/Á‰ø¼Ÿ… vÐvЭ Õñ4ž³‡„(ù^*üŸ‚sÕø=½³‹B—ÊÚW;¨Ç0#ü•?àÄ(v¦ýæb*\1ϸs¯xbOïýp müÃ"è ŒBüRÒ¹ƒžð謳8­Sxˆ@Á1¶þI£’˜Ûæ<¼F#à 캞‚óƒøöÌ{6£ln1›øòÄJí2³Y{ÿÒJÖQþgßÌò߀Ng±Õ¹|‹ÜfyìEÎOìÞE˜2D³ÐHºò§7ò†P»dô`G²Î§ËŸð_Ÿ,ò/ë¯Ðgø)¯ã¡d¼´~§œuÁÉ L^÷ö‡ø™]¡¡ežr„þÊ~üÊx¾y‹‹ÈŒ|sÇ ŒŠÎYçfþÍý±ºóÿ¿ ˜$Ÿ¹òù4 ÉóÏ!NK†gÏ,øF2 ûxÏíù!£çšyâÚ| òNdôJ1òê>Yv(Ù‘'ÄHœ{ÿêúG°:öGÈ99yöØ#èÇYäýÖl/΄yÕ“,‘ú’9žvc>Jv‘Ë'ðó˜þ/ç_‡]?™çŸÈþÙ,°>ÌÝG‘~.`i+Æ_( À¹€Ã,2#—ÌÅð<Ï"|ÚA¸F'ˆ1ìB÷Š‹0_ñ ¹jƒµ8c®ƒ “ô>ß¶žy#;þ À…ïçž! òË'øÄ •ÏÎóº”e=~n#ó ­%' ø:t?h\çœyÊ3 ðx»Bó®Ò`£˜ò.åö“žE¿]sàϘ²ÅùÏ€1?ð>$êp!D«8ñóËÎb%{qYg+ã^­eGRŽee„²} Üƒ“؈9Ñ=BÜÚ³’ƒsþ|Éž#Ÿ£ÀެÎðbÏC©,ÜPdÐŒö³)eJ>' ?'æù›qyüeÑüœBÿé’'ñ|ûÈò‹löô"|ÌI¿° ²)P޼ýöìð?ÛªŸï¶fó Fynü–s^|‰ø¼íìÙ˜~çµ°Ìÿ×6ÜßSr>Üïï—qìÁ€ðžDß§_)£áãy΄͟+#ÌNÔDýÄ.~°‚E=žu×îDÛ ]Q?õÜ·?òEzl&Çd~¿b{ÄÏ<Å*|ò"P!âW%aßùŸÔJœ1Ưž EÅ6ëË'¡F‚àBýJüShôóÖºeê¡ý¸ÿ¯ä;@ô/óÑiGèyˆ´ÄJ *é\òÁa ðyBè‡q `ñå³|üå  çêmÃþ¸(9  HDr)‰çù=ª;É!ù5©žÈÂ)dÉbõö˜äc"D¦g 0TÌËLDADå::ŒãQD¥„ ^¨äˆ0"5":,FpX,‰+H\± ün(ºJ¿µ­~J•$Iä£ ëíÊäÞ²´A§“‚yµÍ$ .D‘9BÕ­œF[#h !С’T`uj[©ÂU£$-Vè”àÒ—“Ñ €E¬£´“ÒDõÈ‹GÆ0´á1Œ ™ªQÜáJˆ‰•×3šŽ@ÂÁa¥ÌLÒ'“Œæ'®b7ŽGØ[\#ÉÊd(¨Ô.ç¨LÓT2'K8ˆÀÎ6¼ØÔÁÂUÝë ]A5üžˆƒp=ç8AˆÆ¯[DˆŠõè="w^¤ãhZzú,ƒÁŠõ²’ňҸ…‹CeMˆàD3Ö Ì•ì½Ôtæõ²¸¬ðj:öö×õëë-3 ¤”=í|òhò+±.ØB&Jðñµ.ax‰ƒÑx´#IFÊ’¤q+”ø›ö"úøõ|Šü”­à>ûóGO¯ÿY¾Ü™«ˆòÖÎÔž{“×*‰IÅÞ’ìXØú¯[ô‰¦–*¬+âÔòpOdß__9«Öä?½/I<Ò^é/³k‰=Ib•–UÌ-ÀÁÔäÎEfá¶ÕéÙ°G¡Ú^¡TïÌ?pÉíé"»qóH»exÜzÏ‘ÝI$Ì“äðž]>;vxOÏÏèéÄ̽ކ'àIóýà!áøO±ÙÙïžd‰…*`8|‰™ƒÈÀøNH¢x)P'ņŸò,4ùPëž–S7Š^bö³­è|sGµœñÜ'DqÍ¢^zÏ# %Ç ao¥=€g­ÇèûºP ‚Ëô|ºzé çN)äoR|âd§œŒèbÙÂ#¿N™õÞà÷RÒ_ò£ðVŒ·Ù³·~8žnŸÅ`ø½…óGµ‰q·{ÏbÁ/ÏD¿7À‡a ¼ô•4ïØ¿kò9zOf׎ òǃæwGÀΟ—8Ìàj>G“E(§FŽ{<{<ü'GgHH ÃìFcèÉ÷÷ž}¢ŸHFú;£œ» þßvZ8z@ż‡ÍïŽgµœñÚ½Ÿ{1è^ÕøÌß–?…Ïò!¯g²y½=sÏ<óÏ<óÏ<óÏ<óÏ<óÏ>o"û½sÏ<óÎ<óâ׌ø<Äo-yH¾Ü;)äEU‚¢‹Ü¢m1x{U?$ RÔ¡@øÏO³ã=žÏƒçoT÷û<œ? ñ¾ÏE©ÕT0ˆâñ¼õÀjó{ ›  zžÞ’îÚ@擦4§J r›ÀÏ „|Oüg·˜ƒÞúwÆ£ô'€#CÞôû>Æ•ŠCÂ0Eð³D Ó@ö€* бtâm¶Ûí¶Ûm¶Ûm¶ûm·Ûm¶Ûm¨ÝÙÜ uƒs†Í³Ò“¸@ƒ è%Îî®d6+œ§  €H€èd.€ÛlhÐ=G ¸Œp"3m¥„'Ày¢u‚"Ó ÛŽ÷ºä;€ÃÁžòs¹ fo\çÇGçL ÀR ND’䮹Ü'Êâå?ÿWÿÿÿ‰m_ÿÿŸÿ¦/¦ù3œã|§¯VªÞ•KÊytî¢ñ,¨YV~{Ŧ‘*eÑL¨ÖU…^­„‚Q,aP²œbõy¬Vd¢ L T “Z˜šž&©¸ÑŽì5_U÷_eµSTÙ5=J¡P¸ØÕ4¢«ÆŒZ+Ý]Ռ⻫ªñx´R)ªb‘"jšœHWMÄotÕ"C„D À ˆ Ôш!*kª¸ÔA`4p ûƼ`ì°ûÇÞï÷€ûÀ}ãï÷¼|;÷ŽÞïŽÇÞ>ñ÷¼{¼}ãï ;÷¼}à>ñ÷€ûÀhìNÀ}ãÜ) >ñì }ãÞ=ÇÞ>ñ÷¼}ãGÞ>ñ÷€ûÇÞï>oÀEø¿ÇàbüŸLö~ 4{´h ®óÕ÷>GÌ9€«áŸ;ð‰~¯ø> áŽ.|t#Èåæ>tc—‡ãMÎׇ1ú|t"Žf:÷ÇäXoeª!ueœöŸ©Gkü µ ©ˆâþÔèY «›{?..¥¡È¹åVùã@êvÒº®„D~gŽÅÀóÌæ-â Ä'áãåâeAåë‚™hÿIy”S9›ûÍüíè|³žn#…Ÿ2s1øYþHò`-,eOóŠv ñ¼êB%A7Õh"O—ËÙžrbîDãôüóæ|“×ÇP<^ÐÜÀÎi?´ñ€‰”mÃÁÑð`S7È Š%䓿ç>2ä‹üXþüË<Öße~Y~IóÎq;Ÿ Ôí ôsÞ[gñÈäÿÌøu&esäü×:¿!© äB‚zJ¡ø!÷Edw¹É¶Ïœ32ïÏÁ»ó™WÝùÃÏFyÛ±×=óúàoÎÌ®×·0wævä›í4ƒÛYø!J:ñÑŰX¸£þXXn?À&‘·ûGÍqL)ˆž67Ûs1¿‚2¶Éëå–Cøùóþ ÿ‘å`ì뮯x6€÷ˆã¢ÔuÉÁã > Îrþu Yu3`üãPÇ-ù(èŠ'ˆ\þÂß–£p:ë¢pæx%ÃúÞøð`›ãÂþo·çÀ Ñ|ŸÌJË"óðF  2/ê?„S\çGøžƒˆ=5ljۋÿž_Ðb➺ŒMãCãàBëM¡FWœ=Ÿh—äâàâëõÚ:?ÃàO]ì÷‡'‹õ Ÿ%óð_Ñ -Ì@vÄc¶´Sx±Y¸¤\3%Œ0AÍÌi¾§~2x™çYÌ¡ÿÎp˜?™Ÿ3lÛa6ZÄ9ä ä<.€$ŒüÁ¿"f:˜Ns¡`þç±ÏÏÍÉïÏ•–Å„r|ï1òÏlÿÑÑñä‰P1Р–p oçï¶ OÜAIÈļÎ÷|M<ëwàõ±m´OÞd`(­¨®rsöý²ák,{T¡ýÅlŒ™Û¯çÇýmÑŽýèû'æyó5S؉]dÛmÂ,77z(C2Ä/×$!w=(tÔ!ü po ;øýOìxq~OۆžÉìûG'H¹ÿg’ƒô,` ñ¤ú$!uXIÿ¦'ˆGôP~G9Šò?¬ð…*$ˆXíÉG?ð,;÷žŽ/Ðç_¸½eHs1E Éë¹Äy/ÿ<ü+*ÉøãÎgè&zóúŠ<£ø|J8æ‰hCÁàBìx"ýAÔ©íúï×~fÌQø©¬ØóÙ?DÇFËþz—€!Œ¢*=D¨ÏÕt½us13¤%˜3NDç}ÿE„Ñ„N¢¢aVýSQz)¢Ml³R°õˆ š‘j²:±±SÞ`"½a¦Æ£P‚ºø·¬cº«fLÌDQÆ×ÁZ$ô“…±IjĤ·)oëÙ`AÒË~«TÆÑS5g—«"hÒ«<ãkfúVK™|KZ 6')Fí¹êOAë(ÑÕù˜…Ì@xˆ $pB Õï|£V¨%GEÄ…’Â96ôÈöæ"dIÔÆŸ×‚™êŸT‰ T—‹*=%h—žëϤ»6èXÆ­8/Q;¢—&þÈÈÁÆ!}lá)‚•DõzDã3#Ú& Ü“Õf%”ûB ôÕ› Z/4­¨8Ú£VÂç¥MÂÌŽ |í£”e|iaij‚}}M/K,íL„}/:°QBþåI˜¯_Qí,SKV$A0_Qx’ø¥*Eƒé­o€xMY?©"|œir”­Š'3Š^éB\••²H9Î’×ÂÖïY$es–W_à ­ÌØ×ñ«—JÁd°³ >©ï×ùØYXÛ; s%ÔÈ0•¢d>=m}ëq]oT‹Ñ»j`ø z=¥ê"ù=à×€‰=óà  ÞØÇ€è• :/¬|S¾Icc›îOggSHBVX=b~›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙžöpÉíªâ38¹xƒrç“æ(r0›‡©ç“ ^ŒB4én+%yŽúyT‘6ò|Ø…‰ÃÆ|ÇÊ|¬Û³ÂjÏðòu÷¿ÞÿwàìíO9èNP'/Ôðø0òC¤<‡Yƒ˜BÞŠ|ŠRÎÍS’¬±4ø+8zx‰¤>g³‘'èÓògŸ3g“ `Óì¢tÃ7‡á¼ïqžœýRu Ô'1œÅ…ésŽ:ƒÜùB!x é}5áöã=}·Øy:óÙé"}ÒxòN$T /<Ûóœ^NJhô¾¢Óïaø¼ož¹}½¾±púÚzÉá­BJ_âKϹ<¦¥Ðä6ú#×Xœo‘<=šðIä`ràço=èS<Ù;>/kO’ü¹ôxÏ {âp}¯/Â~ggÐ'³bÆ5úÏ‹æ|`‡Àáí~çøé^Þ£9ÎÑëŸO£êüˆ„é9ç›ìõÖóà/ñ÷¼'¸ð/Þ>ñ÷xÑ÷ãïxûǽÜÜ0}ãÜ{€|ûÇÞ>ñ÷¼}ãïïxûÇÞï÷q ï÷Ž€}àï€Ð÷¼}à>ñ÷¼}ãïµ÷ÀûÇÞ4|?€#ð<~ OÁÙø€4h € x¿yÛð}ï‘ó=cðŒ¿€çqì#²;÷ x4./×~v†ça߈ý‘ûƒŒøÉì#¿"¼­ûÁŸ9ÕÖóúò˜£î?ÏHt9ÿóþo9ó Áü8ŽÐs ð1ÿàJ=º;ñÇCÕÐNÏÃN’sgŸÉƒ‹ ÍDñ~áö½»ñ3ÅËÜ„.M(s¹ŽQåÏ+ Bë ¦•$^ÃÄâ³[?ΦQè%x·'ðGùÈ/øtx©0G@¦0‰\]÷ûÏ©þ»4û0ÞA×Ñ=ƒ7?‘Kži˸yçŠ4†òqVÅX}ï&jË £ƒ0笴S‡^ÂÿøüB–:ôc?ÿáÿç—õ‡æn9šŽèþ‚˜ŸŒÐz)ÆÂê%JâÃùè„>€½˜ŠšEðÝu ‰zJÃÓ61\CÏá¥ýzSHPà.ýqs¬<Þáë*vGáé§æ¬RŽ»†eÑèp]ÏaúÍ.CááÏß©çcy Š9לÔz3™¤Šä¾Þ&4ªh¢}3˜òÞ(äJ<¿®.V#ƒœ~¸qáKÖš)èZ°¬Ÿ>cÏšÀ÷ARnXjxË B¾¨ùÏ™aÎŒÑàœO'DõŸ'=`¹8ŸÇIGü@3ìA+÷ëðè\™3¸uðÞƒÛ¿|Ž}`Žàž (o°Ö$|ˆÌS™xQ|ËÔÍ›7ðüž€üþÓã¨ÀއŠÉN?öD!G$óá~£ÌæRŽ¿â…ì9Ð ]sñw r%ÉBëøó>£Ò~ 3RuÄyåLŸª TuÄPQèêk2b;–Íë"™A¤ŠC™È'h?RóÔö‡£¨ƒ Sàrb}ðÄ% ¯Ñø„¾x Œj`xó£N‘AŸÑ4è¯"­Ý¬0˜Æ¥8㇂sÑçâh¬?ðþˆG Ãˆ^]ÊhÿˆM× >®ŒÆ…L¥çu€…ÑËt‰œ#¥ü¥’WnÁ9QH­R=QŒŽ™ –‰5ý&QJX -"L1þ°Ä"f’—¨ÉìR’|àÌ,ŽBTÊõ8zÙCYàÏ€,4Aä9¾ûòfRéP¼mÄ’¾²¸rj³Èºz' )ô3©r.SîCõà¾+ÀžMmªÞ©j×Ê×Ö7G±¾×¯µ6õ턇™6Dß«ë<ý—Ç𞀯‰fTy{FJÝ©go©ëàúS¼­acÜ”@†C6.2yÀpÉíÛ«î•^)#ÉI:hä* 9À©OŸ†<@·‰á<ø|ÿ+fm®'xOËí~?Sð}J'Ðøb}Ï$a‡(á ¾ßäòiïÉúžOGsÒ^mçÔîd¼€ÏSšNZuŸ åöŒé q>A:94_gN²h}Ïj|ŒX«Óê} ±GAyxf§FüB£MW3Í!{ür‘ ùßMa€¢i~ºt¥<ö êŽ,ÏÂfÞùõ/½°à:=é/¤ç±SñÇ1—ÍóÏJy†øjz¹ùó¼õÇOƒ•:{</ʇÉìðQfLÈÆ~M ûÀ›‚M§³!ì‡õøøùÞtàxC©ä㢾¥ äë8‡žˆhxW€ë;èõÖ{¸ÇUbõÏF<ñÏ>§<ŽO.}tû<&b°ôaðÉÝìõÏ<óÏ<óÏ<óÏ<ó|óÍ_GŽ9çžyçžyçÞyê\’÷Ÿžç`ÄæùS–a!HR4‚B” .tþ)±[#V¯øøÏ3Ø€D^¤è¾¹ÙÁ¥è R˜v/¹ÚbõàxMáà-åo/¹Z6 ƒœµæ3ˆÝEø!ì퇂ƾߨ@"Œ)„cפ<ÀñÄÿ>î¶as£rv|d ‡Ìéöa‰áOƒÙìWWKf*ñc`ytxX*Œ|M¶Ûm¶Ûm÷Ûo¾ûm­]¹Ý°ÌîØùŸ}ï{N 5\ëºt»œ â:GïÒ\ó ˆÎAB{ÐA@AväeÜGT PÉÜR8H€ QÞ  8‹¡€8$3ÄïxÆyï+&8O·²ø+T3Ù¯qÀ  ȧ"î'h$.OýÌBÜç5¾{Ú­zÞ]bHHEà3ÃÔö+Ÿûûûû¯šóȤ:†4T¬XEæÑOÝjT‡E1eÀ« £b¸^+H”‘P*+…B‚ Š‹Á"Q4#]WÙ]“b¨Ô¬7E†£YUWÕmWÙ]ÔÕ6MÆÅ`±ª6E”UUUYx´R+¥t„@¨q÷ŽÇ¸@²O¼}ãï÷¼}óïxÀ}ã°xÑØì|à=ƼhP >ñØûÇÞ>ñî>ñØÑî4v=ÆÇÞ;÷q÷¼€Ð>ñ¤@¼{€ZÑ÷¼hЀûÀ}à>ñ÷¼}ãïx¼}ãGÞ>ñ­z~/Àñø#¼Ÿ‚#à}íŸHF€Ð`4 Ð»},péøˆüßð(~Ãð(Ïí}å3ÎÒQðE1¬?™öJýMüF9)žyàt.c žÇ·iÃÛj// ó qÑ¿u¾Öú‘ï ºtÝŸ*üY`Aˆ$úÊ2BŽ¥ âø~Añ ¬ìöÙš/êgÆfYx?ÀÏ‚ëßÅ‘€Úc~¸¡xæÈ^&b–‘Dögú³œj‚'ÿe1¢u—?Ä.JçR¹bìÇÿô_ïûϳ4[œž~sÿø r ÇÁ×G²Åø H"qOÏoˆÿÉç%ÈŸ“ò 翤²Ïþ“F2“¯%Cÿmýz`Oïh¹Ã3–XŽ¿Žq|çõ?mߥnŸ†\„xÚNfeÑ óüÎóøþÅúmX?áŽx²Ó¾Yr'™åÈë#«?Ꭱü~cô#ü>DLf ~24ëàE¾`¶LÁq „|t å˜äk‰™bH_ã£-7ƒÖgLäÛñ=ç[r>:•ÎHcîµ|¥eß–¿¶ŸÅËçà]kNkF¿dŸŒm™j†œ‰åŸ©ÇQ W?+¯+šò‘øÏ@ˆ·æW–Y‘òçóó' \'üþ~`ÿ{2±xVÑ“îÆÐÎÕgG·=¿‰EûûbϘü2ýùá—D ÷•V~¿ ¾ßÑ×ÿàäQ  c}ÿ“òO–}ýOggSIBVX>¦~–¦ÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·ÇÝC ͱ·ü†=Ÿü|ÄÇ^g›Aúä³·’zý /Ð4‹QâXg£¢wG.†yÈ5/’ó1-èÈþÞuæ3ðk'ç°D "LMðø¹×žø˜óÝýÈe´Lv´ëôAh.‡…©‡äˆV =Ä|‹khùÕ:˜~:l¬‚^*¤žÊÃר÷I}¹zNÛ©*ï©@'³ð#l„Æ$b~uÝ:tR%<(Æ ¯ª©áæ_0yó»ãÚ€œ‡~c»öUÀXã;¯÷Ï8’!è¸zx¯È Ñì§“lŸ/N¾yÕèÈ0Ê¿t—È uSË=èÇÿ\I”z€":€ä¿¹ÜîKUÉ|rÊÕª0b–úœ–„”J•Êmd&Ê€®ÊꘊœRÂÉ<ö_*ž„ÿƒÌç¦QÛŠ»#jKcV"íÝL£lmKp2_‚ZÞÛjó¶Èì´”ì¡n‰¨K4‚Tkn„–å¿J1Z²€zÏI.Yº_’}Ô£•»¢褣83(¢c±ïQÑrØí‚]&íÔŸ‚1š‚@ò1Zgªp=ñ3È”zm1üW¬FNk¢hÏL™æã´äV˜)…Lr/(¥QÐR32þ™*Zt{ƒÊË5&= z@‚d(舤˜cFIÎ1~I<ØÎS0¬°<ÚÄ&'ÏK)“ÝÊÀÁ­’!‚: VÉ.›‹Õ)JŠ×´`¬’딾 Hލe:}ád^¢P’Êö¢AõL6ÝI¯XC×Ú½„Ê격__Q6_MšÆzúú±zÞÍ,Iðä»’$Ç&—€%Šû•°ß—J;ã±ð „éîK­®¹+¹*sÎußn¤z~\æûëî»u$³lsüN¾é²E-›ÑÉèÏ€%K4®u$n+tBÌÚ’(çn¢,¬,渢áÁzÍ, 7áÌþåÿ)e(ø>ÁŒåx.|:•dÖË„…«r%˜_!uO3=^ÝàJ dpÉïW™¼^š„ð´œ8”|°2Rà;¡v£‡«ȳ©D´IÈ‹‘¶Dôb |õ$Í“æûYá<xã‰ãð_l½g1³Äû½=¾7·—àU~WS–½4:)àO‰ÙñaÈ”å0äOd~'¥£Â^Ôø8Å}˜%8J{4òyA|“ƒè÷brü ,¾O…ú(<¾) ?'Ä'ì“úüƒœ§w”<âWÃ䯷ÉÒLÀÙC0)7LÌ^)4(¢ð0`sϧ¨^¡9½ ïC8ÑD:MØêió¤³Ñ_ rSŠ@ö§Ô]!Ï|’í>¾þ¤5ð €ú”†´^ =xü†§Û¥ù¨©Þ¼¦…/X|å4Õ~yo‘Ëå_©È°ð§?hr|‘ÎlÕ;0\t}Jrä?;q!ó}…­q.<<óhõÏIì³Éé>§€¹Dȼ›aMº†0)NM_݇ƒ|šþ/Îz›#½šr±ñê<Î LèÐãƒÇìî+"yEäYcʼnDwÏ+yúˆ”ë•6üê*}sázSöt™&*Ï©òéë¾çƒ¥šÆ8äø?QWâðHÖñ·ÎÑí§hséàSovš$œÒuÜ5zW¾C·iØÌކÍýù®»ÑÉÚ^Arv™Ï<óÏ<óÏ<óÏ<ß<õG¸çAžy¾yçC‘Îq==N¢yÞ¢§–òü òu@R¬V>sÐ.Œ i_q%†¥LÇ$0¯±|>çý÷<‰æGÉœ…çjÒ`¾NÏ‘ÉP5ȪZ ðÊ­¤PdJAaIV,¥YØ£hïT8A@`tH 7ž:cÐbûdªÓûz䜋ÚÌò°Î ñ¬Tzà.—40F€üC¹ ìɄӂ€ÀÒ¡íôÁõv%0=ª«- ö¨#¥D|Þàé9bï]Ý]×UuÕWwuÕUÕUuUWuUUWUUwwUÝÕÕW]ÝÝÕw]Õw·=ÛÝÏ«×Îwï?o^ù뻽ï{½ëÝoþlØìðÌñ¿í'ϰmû>¶ú™¾ú» óï·Ø{mŸ{Þö5`{Øó´ýWµ;»¶}›>÷° =ïÞÞÛl}í·ÛãàùlÞsr¬Öaì æÀ`{͸o7¼{|{o}´o#czû}±³Ï6l>.ºT¸äÍöÕîéJlß'÷pC`ožä+’•ï%U˜Íñ먺êQ;•#Þož÷½ïp\¼î©D‰ï.¤÷PºZ3ˆèíÕ’l»›,Žæ*:õìm³ì>ßm¾·Óm™ðß|XÌûl öÙ™·ºëØßlgßf,ß|m¾û†œ8ÊÆë—?õ㮼"¹½[6ªÕ*jyOJu/)$åõÉFB.L(š OtÐbª–n;Ufž àp—,‚{Šioú?¨Upy[x±œ&ºï6ï§îµlJI䀑ªTc¢j¬&ÓYçRe"„šÀ(„A@±¨TR Ôjhj•Å)¹P!%Qo¢l¶Êêš‚¨B¹YEÅõ_eu_UµSÙMSeeânT*ž¡QÄjkÑS]dUYux¬Z+‰!„ @èÐB‚ŠQ €hÁî=‚¼v:=ÇÞïkïxÑ÷€ûÀ}í}ãï÷q£ï(}ãï>ñ÷€ûÞï¼}ívï÷€Ñ÷÷¾ÞßWîxûÀ žã]€hxì!Ø }úÛÜ{€T(v4x÷¼vÖqêÐÞ>ñî×Þïkï÷€ü"ΕUô´~%‘ç•÷Ê•?׺¼\£ãGƒÑâè‡à*üÞ¯ˆtÖ<^OÀaÃ&ÅêÀµ€4€A£Üh4q¯p@@ ×n‰ìúŸ4özµÌrÒ}c_€s™m¿#ÁÃÙø"?v=æ¾W“¹ó;œ?ü¼¿]±ÛM°×ãó»/ãržÜ/;ùL2·GÆíÿ¦˜½ŒrñnºÛ!‘ù0o×F ƒ}¯û éù}úåãëhˆ–ÔwÔF?æ>d›#îßÈ—üuÌ|<ÿf²8Z}]dŽÍþËlÖ‰›÷ûcήù/yÙE1*ßì©ÚAÞêžî c¢w}øO úÒ…¼pG ;fwˆàmGybcmŸÐŸŽ•ZNѾj<œÛ‘ø¸)™ŒC÷ÊÚ99“ŸÉ|úýEŸ›µræÈ˜Û<É7Ø]ãmäðdî/;왉 ×ÿh3+wøp’Þfh­ßs¤‚0ú4ßɃü~ìHþeˆòK?cÇ“/ýó3#üÿ&cHÌ¿zýù\á]œÁøy„Gáf’31$d&Ë~FüËŠS¹öÜ~fÉ;o”ïΔÚ|@ü}Ÿ²·As¯óGþ²9€øº_yNm¾g2ëï m<¦y_|ˆ‘üqœ¾YeûO?ûûþ_“–Ñݽ¥ kûH;^v"IS÷Có=§Œ†\“ãóØýçìüÿ—?/ž2@?‚#`‰õóèÖW 9o“scö7ùδ¿çgäÁÂ#n@-sA;ÁIû’‰·7ôí¼þoÖÓò˜ò«eél/‚@&èÏ.þ• PÝùëÝÌÍxÁкŸß£û>en¸|k GØÿ0ÞùT7¼aãû£>{7Ù×|‘ ? øÔ̶ßttûžÁ›b?ó±ŸR|ÆàFßɸl@[s©þwœæ‚Þf†fûFFÐnD8þlÝ„{$Õ~èìÎÖæ6óD¶W€8k&v=£µáï6êJž¾yMm¿±sZo!ƒ{lè°‡á™Wó9ûºtc¯~ ö]’ÐÀÔQüþ*aý™~¼ùë£ñ|ö×…ý»¥§oÓqö‰ëÆ~aùÏåDÃv^oÅbzø:{iÔò‚û:Î62ü²Ù™‚3&<Ãå”ÿ — úákbýÖÉ–‡ 1ý0.IyÅÁGó’&¿Ê\f‡äF3ÛÁ·SÈÆ¦›Ò›mŽ™¦ûCfžœg`ÇÝ3é¡ic“Ê7û9~B‡ðiV“L±A¤ÎÁƒli•»S«šøø:²Ïý=ÏLoðí_øñDS»I_/ÂÛì}ä.ç>3æ°²ÝÈbl[žrð··YLqù–b³i9¥Nåã5õ ¤Ì™‹NÆé„s¡6ͧû™ˆ°¦ ›ÌìÌŽlÏ;Arû xco¾¤®¿“ó±ýHI™ÊDlÞ6eų ™L#yå·1¢ ɺA6ÚÛO»#ü>ö»Nïã>Å.LôYDzæÖÌ…¢™ÔÕS>³”é ahˆyör_Èò5aëº-JM¬ó‹Sá/Ye‰OP‘º-©L¹c¹ %N)`˜Ô-†Â) ´Ã ˜FŒŸË77tn>Xô,e‘µ/É1JûObfàF=a´RW`\¼þÆf2&H¹h¿Ÿ@E‚Â|÷̇$Àä·Ü–ó’Ûy:þø[wݵÃ~•×¼¥ƒÍËs_®ÝZ6ÄÒT†É[wîöO3jOO”V!» ÄŸ[}¯_P__$ªÈéáï—ÝØß\¶ÛdŸt‰JÔ–ÏÜ’žòžjЩ>Ï3NquÉ{¿»v6}Yܵ׽<ër„ZŠ7&½icvžÉÖÛ>ú>sÛÚ/­b¥hþÿÕ·ï®éâ ú%Y0JÝήÖð?$=—ÛÅZúëïƒð}ž/ÊzØþ-¤G¨³í«©LIŒn¹Ñ¶Ä‰hö1 1‚%AÂï±HÚ ‡Â£DÄÅßXõEjÊHˆ7 ËX-vm|C*Ë{UñQ/`‹LØÁÀÔzÉ ×§ïx5êÓ=J±OggSKBVX?³)¸;ÿÿÿêÿÿÿÿÿÿÿÿÿÿÚÿÿGi}Ä[ús¾c“œP*c•CÕ‚•ÚƒØO!l7¢Œ^ÌYëÆ“μÄOàÖÆ0¶y¨ä®R(‹#ÞO\ j:-dBIDƒTú¼`zé?V&p5d7þ"ÿì_^Ú|mé7IÔYŒƒÌÔL,â‘#ý_©d“Î •Ë[P‹)[[ÖMߦø™µ¯Ì§¾Y^É¿…boŸuö§íP—µ¯·dóêÒÒ¯¯çO)û[ÿ_·©0¯îÝVyQèq%AœÈ ‘@õ™öQ„&¼ÕÈŸ“Ó׳=MŒDHPU½I{ýl ¼.‡ÌbxˆIóvÁ=9ß…‚a±WöÛkZâ/D¿yÜìw«mrš}°{®‚¢ùáVÚzIA¹#ÔWIëI>W€$}Ô‡¥=”LÆ’=&‰H¥%ծſݞɲ5*PZsÆ¡UŒ=Z·¡zO’Ù²D«V:µ®½á²6Q¸;§“¸VTò­b¥éU•£kZí¬DTÿYÿ^wžûX¾ÖÚÒA /¤øÚÏ”ºš“Ò“§¬ìõ‚8%^•b’²Þ=XžŸ‹ã)‚DN®Ø¯CèôÒX™8®Õ„ÌT«g)i'4{9Š/µ"A~v6—ÅY%™/)>ÉgzUÂpOF¢žÊjºüÍ ãöTY 1éó$¾ûïÇé%×÷õc®óÉ\sµé¯-^Sþ?^Fò¼¾¯«ü¾Çþÿ²»³Üîrù‰ŸIÃüWäýÿÿtØýerQ1…й •¬o—똉¼¾ÎÅ©‚\³ì ›º}õõǽæ^³ºn¾Ò´æˆW{n°œV™p¶!B°¾lû(Vººzmvé…þJ œÉ–H½YepúݾWÊž¬ø¸B~\$­>~†'±© !t¤­k÷Ó4J@¥¥+Â~Ië6ü^û²?„eήCùŸ–eänFVµŸ6»u‰/®êÖÒ&×b-ý®‘ôaÀºtFÁ]#èOxb^°¬ZÑd÷Ò¾FÅ?À•à­e¨ê=¯8¥ÿö(¥ ùÙ7Šn#™èX¦µ ’ï2˜{Úbí5‡ÐRÄžƒÉzœ‰IJ·zÀ¤ÅÍ$¡‰¶TÕ<Š˜L=ž¼‡·´Æ>ÌhŸ^ÎRKZÏPJæ'“Eu&•”¤É†"cH¤IJ)…ª˜J1æ(*96Ë4Rb=mç=¿dO¤I "'­¶+ªÌQLîò´Í$¹Ùí–œ<¦‘¦¤šÊaò°·"“^K_à æ#À %H¤¡,}½°öƒÎGªðåO€>N:+ÕD*žRÆëÖ­uUŸråË"RK¦ÏðlXZ: èE‰Vµ€&P¢°¸k»ðpÉíñψ|ŽB¸[ª (®À…v£‡©ÓNîÁ:¾.§ÂX措%âOçéìÉxžàÆüþN¸Ùá8¤¯ð8ösø ¿ÿ?Àæ}.ÎßD<¿§î mù=ï³Ãíg1;ìí_Pbªº}^ˆ¹Õ_Éñ{ Nåãµ¥£Ç“èäð³<ÞúaÀw|ë|O[Îù×ÏiÀv‡}q½óßGà_büzøåéè7žyçžyç®9ç”Îožzã‘<­çžyçCžyÄçžpz˜')à¯(3Ùíèö}Ž£6àŒ‚1´Z‚–ÇSƒ³¥½–+.™àOoúzÒo’xãtD*|Mš/QSf¥Nˆr„a…iJÂŽ)œ²s×E;KÊo3±gEzž›4⃞yè` O7ÍóÄç·Öá/"8!9ž0/5DŸg³HbšQ)Ás£æpTá\XØÅœÂ‘ÃDMt¨Hò/»»»»¤vîî8îÛ¹ÞëðSafJØÝ[v€¬ O ¿~ˆñA ‡D’~ýu𠀌"ÛGKè˜jÉÕ=ª ÑXB jƧL BšH5¡°qðVfÂqi/z S†Ù-R €TØYˆ*À"" |Šk|kU׋զ³Z¥:&0aáTˆÍvK±¾x­Zi2"€DDЪ9®âþ½aïÆ¯šÕf•%$J†P ±£ PÂm!R+2dÅ4 FáP¨ÔЦ¥CÁ*L*„*«ªû¯²»Jáq¹º«‘¶1݆ën¾êê®é©Tõ+&ç¹\¸ÜÕ6º‹ª¸‹ÆXá@ TÞÀh hûÀ}ãïx¼}à>ñ÷€÷xpÃîî=À}à>ñ£ïxè}ã±÷px ¾ð¸}ãïxì}ãîxûÇcܼ}ãÜ}ãïÐ>ðx¼}ãïx¼Þ x€Ðà—?àø^Ï'C‡à”üÞOÁ\4kZЮÀÞ½â÷ž/îŽ~ï­ø Oà]›Wâð!L?3"iqšð¶i°~ ³í›Cà^C®#@u? f}ŒüŒ¾y­‡áÈØãð ò•èY¿ÖËh£;Î8¾ß/ׇïçcîþ°óœùâðŒ+nzñ&x'Qˆ2üŸ+Ê:…:sHôénÈñ,Å€epê܉NóÅüô _¬³´F>Ç„sËÚOè^O€æQe¡sü%pà°[ø!Ið!¯2Ü@sý´›‘¶YGõ‘l¡]G¾ˆ}˜g®§î„ âò¤k×è ŸÎpúç<Á'¿ˆ[í?)'(ˆ&6ò- æ!yçSO\³2q åòÿdü~€©^VyL_ºë ÇÚ…1ãoÁN²·2Ñxýtg™|`ÿožÒ?¡ ÄâQþÄŸ Çü:=“œÆ¾ñs;2ÿÎû`ž¹\Ä|oam²¿Ìá2 ‰Q’g`ùÁòûxâ¶ø˜žýóßÌG8¥ž…àßü§íù΀Îßt/xüŸ©ùßÈÛ0®+‹)£9NÞ³Æ~”)ñG,ضVßå3¶WÇ“üë¯Î§¯ãcŒ‘$òð ÷æk¨ÚŒÊ žk- Éùžh¶ç@~ ÇÖžÜÏÛ.l“í¼t'à)÷2êw’EÚ}§uå~_ÿÁdÍØŽšÃ„ Ÿùñ€ýPßδÏvecûoÊAÏðp_íÃqÄlÒ;›òwÎy0årlóÿDu¨tõÕS~EûZ£ù×Ü5~´8¥ÿà#‚Ð}ˆÓz¯„f«óîxrt§Ìõ¤k6ëgôu§\úî®É×aÙ/6õçˆÕšk¥Q}"|‘í°ê[ÓS#½Ê4ñ ‰këg´r~⦦LŽzÏÓÏ?²Z=–YikFžÕ|¯cP{<ë”4p‹,³^~ "Z½|!µÿ ›M=–w5/Bl²±ì<Ï·H‡etô,:0Ôx…õrÓÚg“¯Ÿ£ù‚>Ÿ|†±}&i-é¯Õ­,‚? äÍ^Ž¥}‹ƒšÉ³ïàèü9+Ã3ÏZ£ŸDxü<ÏÙ×Sxá'þ2õÎDw9+=ä|Bºl ?3Hìö±^ÓŠ©™À™Â)#4uñ¨Á>úØÙ/B¥bvÿ?XaÂÊT£f3~³ßt—«dªë™ÍtÑ8=[mo¹ÖÄm}|òkm—Aë*Äå÷÷ßBÂÁï&²I=ç¨Ò7›FihÑì&ž¬û±}+ 2®Ý}]8+EЉ°»péšI¾‘}|z,þëú}Â$ƒ)ðTÊ#Ù Y¯?eŒ.z«ˆØ"²µ$//ê%A=Ï£.e…¯Ö>Çš]‘ŒYDÙøIÆ2":VS¯XŸa³Ô‡ÕÉ×·0Æ7QÝ(BÑ>ªXÅÙO9ìDORª8®»F1@=O'ªØÄÆ0º-¯Iä"BÁ,®_ý§×ã>ÚŠˆRm†ßF˜\-tÿ’:yŒ‹!v퇪LDÅ[ó^d¤Ì £„*¸«s¸XÚÖ«±;=I?a"1бI¢Âu æ´ÈÁÆ~7~Á³J öz6(ª{!oTOš¾´ê`~3Á€úz½­ÃZ ðeb‘åmi|µÇ¾TT“Ì9Zy<‚77µ)z)P ‰bd#$¨Ñr — 9« -GKή”eïWð„–æKêëî¼›çKò@Å$²’¥v+LÕ³íD JÅ>ÞÉHGè"I³Þ¹KƒH³•ý —?ÿÿàµ÷ßalþøõ_«BäþÎÖU¿_ȹÜÿ añƒ¯µö¢êä|§ÿ_áól¹Ë÷§îו9“l¬#Ÿ++¡"ºŠ«L[VŠþ‘ýºž”1@üÂæl‘WÏQŸÿ˜35ôG̸ÂÙ ý$»^Œ¤U]èX«?G¨ÿ½-=šo€Azý‹ðVDÓìßlÆù^W!æ 3ÐÞÙåâO"r„Îù˜ðÌ+À­´¬ÐIr3æw¶KpŒ›››Ô¤Q1êcÀ»Q;¤ï²&­ r?*!x) r—0pÉíô$ñφ|‰ÈàLŽ€v“²5Ù,Âì×4Ö9¤Dwqñºøl“)’x»ùëÅÒÒpñ|>?ÂöÙàçÂx·Æ{?ÏÀùó½'êG±>Ûì_›à'ÁxçŽô“³ÝóCØœ€½¬é÷Ç©ä‚Sò|Í> %~­ ù΀g“å;<߈ƒ;î*}9§ßáò“”ÒevÅO;Øk£žhÂÆÿ'Ü;úÆŒd‰Zݸwˆ#œèr7¾:ãž÷•¼t;ÔO¡!©“á1ÞïIÈrtüA~ïFö÷0ü#Eíõ?6¹>4¡“~+äöy;äÐ>¿NÞéù$TåøŸƒÇð;ZW€îùÙãÆy½%‡:ùóÁfwµ½ßV§Åωò4ø'ÂUهƟ’^yçžyçž’óÏ<ó|èvžyÐçžt9çžy眑ï=åøìùÞZóÏ,šŠ`½ˆ•£4Aú=p±ÙX—€Oíö|@ó>U@)Ù§ä¥Y¤0öCFù*‰"ŠÓEñ @$zë…®/8<–uÇ#œõ½oF‹Z¥;ií€V&À¢û;‡©îy¾§§âxç<½-&`Q0èòø1O$;KÑðžÁøžogŠœDƒ‚ ‡`ª¨&˜"xÅ{VLJÝÝÝÞîîîîî÷Gï{³žó=Ðñ2&OggSLBVX@+d?bÿÿÿÿÿÿÿ'ÿÿÿÿÿÿÿÿÿVömh(6°b€mêÀ‡{ÕôÑØì{q÷€öxûÇÞäWcïϼ}ãÜ}ãïÐÑî>ñ÷€ì¸è}ãïãï4ÞïxûÇÞ>ñ÷€ûÀ}ê¼ð ~ jüŸ€Äü_3ð ~ 4hÐk@ƒF€Ðvü®½ßsÕô¸{#—Å?'àˆÔkð,îRŽ/‘.#‡è|e@˜ÆpÎ#ô9ÑÏtkÊÓ'¦ÆµvˆìdëÉþ8"|FOèY¨÷ØŠœ3È 2#’O¿ƒ†?ë6<ç+(åÑðÞ=ÓX±ÐO„O§èþNþýƒƒ„sÖ'ä"Þ#“Xs›ŠWGÿ ž3Ðÿ9oÄ.ðââ€?R<ôp“Q1ª¬¹=T½G]u*`=…5R¥'笂;‚ëуúƒ €°ýV¬k èç´ø8ä~.¤@/nxƒáÑ`õ€€Tù=>hrŠ ÿxŸÄ"›Â’3(¬éçóÁôÓÎpB.ÃÂF‘D•ÁÜÑ4V×ïú'¹ÔÓæ@RƒòÙ½9¨žR“±øº‡0òqü ]yâ禓¯aÎzhè™_ÏŸc¨Æ’ˆ8F‰&ƒé?¬†$ô4ëÍû’Vs¿1ã¹Óo#ÿ0ÿð“Ò´N\XcŸËñd+¬ÓíÄ!Ç—aÚÍ=W‘ðóÏüôuÃ>qq“ü#9ÐXZl!ÇÉEøÿ<*ËG,p‘W†x´.G!±é(£3Ž?|@Ž _ÈáÜ!ÈS?úʲ‚s Ì÷ÄÊ8‰xðuÅ..ºê'æÍ°]äëú€¦¼‡à1'þ/ëÈ\蘦üŸ«Ê?óO9(ŸÃ<]~¼®‹?ùÞ:::à¡uš+, z(&‡âïÂ5Hò…G;ÇÁ”O1^‰¬~8rˆ s }A@R©¬©‰¤ñè þ¤ æÿ^<¾Æbd§71Ã>‰Ó×ÑL¢ +,9ÿò9ñ4 Õ•f.(îÊѧ‡Sã”F2€Îýb¾ýdfáÄ/'¥tÿ“ððNæ¯!)ÅnÑè#=Éérf…Í á=ÇßÃ3Šê2=i’•í.¤]üãXSNx’ÁÏ?ç)YùÇ:ë¢aÜ‘yê9.#ŸžbWRÜ;õú"W´‚‡Ó•Þ bA&ÂóÇGü=‡9ØáG@i#õɇ•ù2(` (£ÓʧG‰\èF Ð.ç4®€è޼ÿÔ¯G¡¡?RÀçÿ1G§…ꢒŠobQÿxIÏ R±“BÅËJ<‡)žž€qü¯c£Ø^z ç] ¿=pó×@ÀÏ=»óÛ‹ùQíÜèï×ñøv‹ýãÿ²(Æq—´ôÌúú›òpˆF)ãqf ©ÔL‹wûL ê>¯uz¼Å¶ö*£)%XÌHŒ!X“Ž6بéS2=g«ÖW(õmÝ v¼¼Ý¿54òOA¤~'$üíȤªÕuIÆÚ~ŒZÖµ²T”,Ž‹c½RV¤œÙÝyr7#rVéxzY0LNDòk8X}' $£ol6ÒVØ™F£H\˜úÐJ~G`¶­ú6¹ŒÆ×D ü§˜õ“9³%6£ŒÎ ]ÌÆ^‘‰ìB4‘Í"ŒBÕ Dâ—b²XLQ³”›BÔÈŸQôT¬=T Åìf­kVÓ°„D¥‰ÂéÂ,ö{"':Þ² Y © á$±@£Œ˜F"­iém*bb5½nEÕ¨‹°`ØÉ|¬· 䬰9Åßè®F&"T#ÚwlƒF–žh{Š‘ë õ8CbŽ{›XØásga ŠA6W€6^¡r¦Ä…Ò{PKVË`I'yZ>¨Ÿ¦ªÝƒøµ¹ÂH¹}krßú¯!÷5ðÿ±„’¼#òTôJK¸ò× Q)Y:¶1%\’9®cÿì¾)ë²Ð‘6Ÿðµ» +ÀGC<J^¾zb`ÇCüŒŸ~ý3¢ØJð.Ý,.”¼ì~ÈpÉïxGz¸ªgºeIã­Œ@ ñz<½È—Ý/†q:WSÆÑËÎÞ§ü?AÄðžs;ùüŸ.Èæs|À›ÎgÀü_€jú~ï¡Éêö;SØß ™0L >GÁøG'w›ÉѤ90ô×ì„tø“_ZlV¨SOèzzž¹øMçÍõ<ßfvfýM?oО<ŸF‰|Ãàr"øŠÏµ~móøüãÐ|gšuqJí%Þ~qSô$~ÊSõCó×Ú=€½QÒ5=oëxì.zÚÞyÐçœÃ9Äç;ïßÇiÏ0UìMóÏ£ÅYçž¹OGÁõ·Œ¼¡ób| âGɦ§ƒ¬9 ãËPàýý± SÄßïJmá=OSE/—Îú²JÞÂù¾ŸrGìs!Ëüqo<óÏ<óÏ4;çžyÐçŽâu‰Èç<óÏ7Ï<ß<ón‡ ¯G´)ìó}¼Ð쓀ĢLLæçK6H ]Bg±=ŸÔùD6oF–‡Í‡oˆ¬#‘8­‘4ò h®ªëðæŽ3ˆ^[8ž¯°Î9ïyãÆèH­:i¦¡`q³S!q==힯§ÕõÉñ<žNªgcpCüáŽg9|íù¿3’“ ÖÑN6AñcU§¢`Í·Ûí¶ß}÷Û}¾Û}¶öÛï¶ûmöÛ}öÛï½¾ûm÷¾¾÷·Þ÷½í.€(‘A;‘û÷Ñ€…‰ô(¿¾Aïr+ƒ¨’T¸€€—Œ(á|‹<žIÎ@q83è€rîã€ör»Œ€€ C‚ÀjS¸èRî‚.\‘TÜ@E;¤%ÎdD@+ÕµÖô©H$»L*JÁsÒ+á¯VªÕ*zä:@"䲡UŽ¥b®ºïÂfü*ñi­R¤»Èr‘’ 2‚”*…†m¼V+R$¦ ¦U0¨*-ªhš•B£cYUQeq}WÝmTꦧÅ5(z¦åP¸ý³SfdÛ¢"¦ÅEÕYT^-ŠC‰Â @ì40{€ûÇÜïì>ñ÷¼}ãïo¼v;xûÇ`>ñ£Ü{€ûÇÞ>ðxq÷ŽÇÞ>ñØûÇÞP÷>ð÷€÷xûÇc°=ÀÞ>ñ÷¼}ãï÷¼}à>ñ}ãïxÇÞ }ð>ð{>©ø¾Wà²üÕø-¿øÖ€4h Ñ­€“àWà¾üƒCÁø+÷uÏä‡ÜQ,Û& Ìpqž†;þ‡-ÅØºoÞ|ñNAˆæ~S¨nÄþ@ìdÚ§äç«3„Uâ¼ÞºÏ×i£ŸF|ÜœÝ)^s™ÅÏü ~ЋuùðÏÿ¢‰ïçþýN%$Ê=L#˜°€ðDŸ{À¿GŠ(£Ó÷0ÍGÿ昣6qʉáÅú=¿Â3×!磡uÇáÅâBõ‡Š`ïøVR,Cˆ£¡³¹P)‰ó?Ü?;óDcÁã pŠyè?ú™Ž¿ëÀWóE>}†Oþøçöê8ù¸aÇë{ã?áWa‡„Q×Í~uì*Xî{ußÀ~L ÄÿJ8„—Ô£úÈç…÷⢃õè<¬%{ ô¬¦)¦²ç}æ?"WF "“ƒ‚ê<’ý žRG?€(p£¯ƒ½ žÛÔ"˜ù Âk *\ŽfÍûù£ŠH]âi3©ƒô1𰬩ˆŸÃ1¶hèüëÀVúóп凖{žŒÔ/É=àr‚šÂ²œ"!Ž ` D«µaqBýb±Ô`»=Î)ÏÖlXþ*cáôGïúøÉÄäçÄÒ/tG"Qý¾|ïúÿàÀ»ðï×1 ìgôÐòi ëØÁ^xu×ïÞl!úåy@ÏëÄž XÄã„ÿY 3Z,úi·×]uü"|tpïü¼ ðAÑh)s£¹Æ#ž|„ÿÅ+¸S¹@J!~ÿˆ#Ñ( Ñ °a×ÃÛˆ]ø»ôy]Dú•ó/Ô‚s¿Q><`Äwð…è¡3Ywcý.8½aü|Ïþ3ÿ÷?^WŠUduœþ(>lÂ?ŸßüÂ8uX H?å?ÍÒsú'ËüÞÓ(èZdýÇñé‰4ÓÀ ÇGÃÏÅgù³ÿ(ü„*i™ôfòõ‡9ôÍ<(ÂŽ¿ô1ÿž/Ô´#þˆqÖTгSóyÆsç 4G17$#¬Âø ëòŠ…ÔQB#‚Gá0º™€ü°‡öž§ÐàŒD)ëé“ÏìóØÙÿÏ,Ÿ:€X-„^…AÎ}oœ”Ü—mä«×G[Ñ…‚Y?DÄªŽ…ëÚ±dD#‰‰ÂÌF0bƒÔsA=3±NQ5:Ž˜ƒ)X´ä¸¹nFä¦ä¦ä¦äNFN<•ŽüŠÙ*]v/6UiÚ"ëÉ$šOYÛ’¤…¶Ù›VÉa±«Á9G®Ý6¶’IiÉtr7-ÉFò»m„„# ƒð/Î=gK =ë–1bMm‘ñ]7vA$6ÓíEOA³Ü&žq•ŽøþU ÷£RqlT{H|öH@«žÒ£V0®ô¹D¨å%´ýO\î3‹Ñ¤Œ¢JƒDŸPô{b­G¢'¤ÊQ¨ï]1ÑAÁB:µGC=c×Q9+#GÖQ*ªÔF“àZß‹ª`›B™=Êѯe¨RsX¢ða@¾H¡¼‚²[/Jޤˆ[ Ákô2jD.›OggSNBVXA,0ÐuÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!j <ádV12-¤1†Ò±õƒ©„HX¬çV ÅI‰bDŸ´V$ÑëzHƒuÚ9Öƒ•­eÈYBDÏÑ(-ηÅù+lÒK9Ç´%Q´¼Å•9¯®4ý .¸+º4—tÙ=ér'?ñ^’ò|««Ê_Ï¿EG>—(ó}•¼Jä.Zäw}7JcΣDÔ)+¶9ÿ—ÚY˜Ä•×íà ü¯+Ê]w•ÏÊ<“àË Í®—Ó|üY4d¼€“Èž L“ÆüW”ßsZ“Õ{xËÍ,‡ÅóðÇ’Î6xO_Ÿåkx‘Ìç«à~þ‚z?ôñü ŸJß„DùšaOFò'Fžù'“€³ÏÀgS×ùèú¾n‚òx=b;óxãàéö§À¢pyCÃÁàÁŸ0ëæs>aï凌$~‘ñW²è”OœUúh>ʧäˆþ­4±&œ|XéñîT­múGxì.ùñ9ç®9ç˜aìšk§§ Îçž1t9éPž}>@ù©÷õÌ>{]LíÕ:çÓ«¯gÏàr}ž*™œM¬ë\OoB'ÁNX|Ïw9Ïöñ©üÉï y ÷tsÜ»ý¾O¬öéH§ÔðC>.+ý>¹é/<óÏ8<óÏ=_ð^yçžyçžpyçšNyç>Æt[vüÏsÙÖ,7Ò”P Q âxèô+yÎ[æúç·Ûîzš’4/d?gÙàð‚@4ײ,´öÓâ,Ä©©Ñó¤æGš@ÔKµy«  z½ðÏ<ïg,¿BaäN‚J[å &¡à_^Ÿ`z}êyÌô†×A”x ýÇ)C!äDò3Ò#¹ì€» V–*º›Ç"z \áXjª‘x}ßwww}ßwww}÷wwwßwº{ß{ÝÝׇÂXË3V D Iªª3I­AïO…Š3 ¦mB­Š °@ô D"#$Y¡,eè t4DkÓ6… ÀJF0¶õ¢@P±  Ð "­ • d¤ž–êB t ƒLÞ­UªÞ•*]áÂ\¢YÊ= ‡°Ôö+ų]ÕªSóÈr€E6ÇR Ø/UšD”]8I™AB ÕUQbUÚošL‰. " U Â…P¨¤ * WE¶WUq5S ©±Pjjš"ªªª+6ÝMUÕ]“RºaîU+Ê¡Q†ÍÑUUUYuW‹Eb‘! P*€Ð =À}àïxûÀ}ãïxûÀƒG°ûÇCï!÷€ì}ãØ{µ£ïؼ}ãïx÷xûÇÞ>ñì>ðãïxûÀ€ìÞïxûÇÞ>ñ÷µ÷¼}ãïx}ãïkïvìv>ñß“'àRü€Céq?÷àì÷€ÜÀº4v;ü<ðrü ˆfwý~tÚ“8ŒtcŸ¢ùÀ´ô‹×n ·÷\—cÍ.PÒ®ÇÛþ%xç0¹Å›y‹åH/iÄ_'Ç9‘Ú9þ ³<þµƒ‹v"W땇³‘3Ѳ…ËÄ?£?l‰[B»ËÅùjÿ‚Õlch@#Ÿmiò&:?V[ÿ°Þa…Ƀükoð ê~¿ön_Ù|²YMË•Ïoù›~?,]DÂ~ÄÇâ.eÑ€[oGÒ£EçYAý@X}ŸÙeúËûI'œ?ãWþgáÐs­‘ ý\š%™uÈ?݉‹àÍœ)P øûÂÌ{÷3·$?—Á×ñ÷~ï:²?³Îÿ³oäÎ)i2ñì<Âäd-†d†OÁr)’Ó:AÜë{ _xý9e$Ÿ ¼‘|2ž{òË,dfg˜†dÿÎêê=±¡´/þ å|kÅOÇcë,þSµ¡É²0Gµ§eŽþûÏ·-¹ò’ ó°’-\5”Lc«l󉃠´ëæYÅÔìÀ9üÌ­ñùœ¸Ÿ·ñ¸.¼Lfn–XæãArwÛç(‘qG3Û㿜 ò_sÛþFÆVeûñOÏÄõåq¿(FÑØGü_/;†K?™Y~r&fïbxüãùùó òùíýøüÞÃûcõçn?b<#‹ÏÏ)ßß>Êæ{pÈ­™øåÿ’”)Ål²Ä?9”Ú~/³ú_Ùç&XÓùOGå ó‹8 Y—!AŸ.ƒsÃó4üúä™FÌù³3¨Ù(Á´ÑdÚ#mŸÈm&}n¶Œ¬ŒvçS¿/âïæ99ï⹞pVœH¼`à¿ELË]t.Øü¬©Í‰1àï4ÖSùíÇÅKúÃÒÑ×R/EžƒÍ(¦c’~gç^\G<óœbq.¦z:Ó< E £¿~‰~!u#‚ꜵyŸ×E¿Tá{è#¼"%Cü‘ãžzƒò0둇¬?Xbe»O#Äþ`pÿ¡€xF‹ÏA䤄.äcù$ã˜^OÊ{ù_È1Þ“úk./—ªJÂ…Îq§ƒõEðBÿ9iïø»_Ïòâ“õ+ô xøqæÐº E‹ts‚&ÑcñtüB#Æ^û'¸ÏT%ÁÉ%9$÷%°ä½­Ö¶Æt¬¢¬I‘/œ"¤¥Ö¢½—DÈÉ`r[˜Õždõ˜ÑžƒÚÕ"rrIÎKeÉm9$÷$žä“œ–Ã’ÙÉb‰'•a8.‰;-[­JŽ ø+jÖ»¶ŸÑµ‘²¸vK)Ù_ÒSy›QJîÚrInKiÉ29$—%ŠÔ´–/{ÏQ8’.èõJîõXªJ­®Õ°*ÚÖY#ÎpécchVÏeƒÿø¿¿~øõûcG FŠŒI˜!%s7)ÍÏ¡:’Š+¾ywƒrNÁGdÔiõ#Û ÄãÌ D¥¨Ô˜§QƒÎV´à¥*ˆ£ ‰ÂØ¿Öz#¡v¾¾9“„·ßñpâ¢Õ÷÷×)æq¾ ¡!ê›n¨zúÑ„ÎVé`‚’J¶Œ¦!ìN‰€L’©â +=ÿ[8$ P¡›$°1+ú}Y¸¦tú´½ l&Ü='„úEýhçk"z-Òû,MŽÇG—€6ºz&—;h*nÕÜW3ed¥XƒÜMM$AŽVs\Ò'‘AËrV¿¿sè•Ùe«gn˜ì¼¯+Êò¼¿eä¹4L&X~€&FýÉIÊs7š]_|»®IÓ^ƒY"’:HGÁœ¢,$«>ÁD•­«$‰V«dH+V^ŠáY¨è²]f2¹pÌIðÉ ,ý¾¦ð›Æ/^Þ£è¼>+6t†ø6ÁZ=Œ0Ä—.ÞÈ=pÖw9[g3rnªQ¿rRr´çrSrSsß¹.NJeÉrrR·"tƒÜ³î[-k${’%.ér—‹àpÉî÷{<ß#áâ$¤€lа’¼‡Òž„é/ b_'7âž‘#Ë”k,ãBKñ|ÿ É*q<'‰g ôz1ë¶N'=¼OÀÿ´g«ð=·Ãð9|¬~GÀOF H£ y‘èø0ìøS´|S³Ã‚¼|Îg7ïßdH -볂ÃfS‚£¡Œ/ΫŸ6Œút@ø||^žÇj aÈœw+e0û_¦=r/럹*éâ0œrö~,î7 EC >Ü ^ayçÆsÏ<óÎéJóÎŽû»­KºûN1óÒ‹ÏD›õšƒð?‡|zÁå×à¾nëõ:>|OÂW ì¯È å4~¤ê/èðû½ÌÿÝøL½ž'À +ðÕ³Îÿ²{¬~g·æÜ‹Äìaè£0ñ9祜óÏ<ÒsÏ<óÏ8O0C‘Îq9çš¼óÏsÏ?ðIÍ^˜ò‡–Ÿ<¸{ycÏjä & J#ÈßÉâVèF£ð=?óÙñ}‡ w¦µ^ÞGÈöy)ÙNÎYœ4ê{@a¿ jóWœ ¼ N\<‰È<ÂóÏÞ,RÌ0ï2¼¹àmk=_3Õöû=êù}‰pG‹àß ïÜ„ 0aËÉ€èáñ<_‚´èíø ³˜ÔÄ‚’1s™â8«&ðª0áýÝÝÝß}ÝÝÝÝÞîîï«FØ6!©3 €‡;«3i)•g=PPà¤@¬wwwB &“{×õóXh¶Ä¡¢$Y´H4  ˆ!(´ÛSf|J$²Û`xDQdˆfbB1ïUµÍb Z[Kbƒˆ’!ý0îêVÂõ‡ƒµSªT§ILxEâhxU,|V¯šÿ©÷OÜË”2Ê¡BÃÿO^8\w¬c ¼Ú«R©2\¸@²Š Ðj«ÍíY“ †(0ª^$¹xP U]Uبš¦ÅA¨Xª5Aj¢ª¨Š-‹j®«n®ên˜œÔÔ÷(V ‡ù¡±5QUQEâÑX¤<ºA0@¨@»ïxûÇÞ>ðãï÷€÷ãïxO¼Ü>ðxè}ãïxÇÞ>ñøûÀ}ãïÃÜÞ>ñ£îí}à>ðxûÇÞ>ñ£ïx xûÇÞïxû‡Þïçà¯Âø%£ð€Ö€×m ì`A Ñø +étõ}Óð~ÁäøŸ4ü 3±å µ0c®ô=iiïèW‡·KÖÛ³¶Æ6^MF ¹æÅ[;r°²Óàe,³¶þ|ج…íø<“öÞÙñ¿bsë+g8ÌM‘€Ž“—ˆ•öi»þg‘¸uÐŽ|úøïË"gµæžç1 Oÿ÷ÞúAµÙyƒ= cÈÉ1¶s7äÁù‡æoâE¶?¹5ãe>oþ&O.chPÆ!ð)ç<óÌË2G<¯1Ј-¶¸¡NyüŸƒøá||¸1q ÀŽ¥sþ}¿^Ã3®ŽJ×QÁ‡ç(o¶Ú±³,QÛŠf11çÏAä‚Ò&Ïñå¡ù?¯ÿÛ§ämó')`d´æ`ðGDz&$]u8=—œ#†²" ç]ý=ù›üÏ<Ìùü£|xüŶã£å”IJ@gŸ¿ý¯ÿ;ü¿câs}V6Ċ̲ÁÈÍvžbe'äLL.Ž"ý¢wÛmÀ‹Å×RtÇ•$£­¡É0@` ÿkN ëôöíÆÆ R¿^A˜TƒÀ_B›'G’W_£¶‰„#ç•qAòºñu׿ ~/ÑóòóŽHŽ„má¨ÿß0¤'òyˆR&ò r:pû^~…ç"ßÉ9Éÿ©µù¸wæG"8ÐêyÛ`ÐÞØýJ’~b.¦xÎÝ¡È=þrö7“¢1ÆrYly‹m°üÏÊþWA×F?[uøyQ¾ßùߣ©ðùÞMø&"ß–A˜¼NxÜû(ð|ñ÷'ÌãÿäÊ-ÜÁOggSPBVXBË‘§ÿÿÿjÿÿÿÿÿÿÿÿÿˆÿÿÿÿ$Fì~|¶ñäœOŹgþé•Ïx¼£9Íý»ó,HN?æà¶ñò¿xÏ“hy•3Íü¿yçŸ(Gö£õm”Lgú‰-lÏôL#ã<Œꈯ ¹”ÎV ÂÈ\€ù/ìÚbVûuû—Ï`ïÇöïÈF²…—ÚÂ;gŠÅýäÛÂ?_®Ðøš‡ò„/кä¡b ˜Rº8Ðÿ¾×xïí+ÿßËõùÎwöœáÜlR»øSÑó‡ü“±Ð¦—ö˜•×]~?ЇíÑâyøj—ÆG1¤¦˜ÃžDQ<ƒêTÓЋtSùý§È‡ƒ¨y˜óÅø¨ýJäúlO¬'qD[„cÜGèïôBc¯×?s¢'õ~ÄÑçÁ AŽ»‡àq@âæÂ®ˆæ&â,QXWå¿qèŸÏp?ÐNBä¸9)Üx} DÄêÈè¿-LHEes³}3‘Œ£@ªR£Dí¢Œv¶:l¹vÉÉq§%ÁÉMÉNó';–T“Á;œn!k–' ?kã§›c²ÞÏKK3°AšµÅu*}¬ý´³ß ®•„tXç`œ”ws¹..S‘ŸSÿD"”ØmQìû‹ºÙìRÝ!¾¢½JÃa¹4m`¡$r„£×R¬´£H©¢.ç åÕØB¯g#HÁ0%t)zOd79õ{`ÏA'²€å9”ª1ƒc·| Æ ¥c²ègcù«„.¹Ž¨n!aô©‘3Pz¥Gn³–ë(]‚¡óŒÀŒgcƒÖŽ o¥Æ/‘d%ÕbòdÛ¥=«Ðô–¥¦šÀõƒß¥´ D’l£ªAÂÏQ 5)%]=rƒÊ„J$鈛A__ûm ý[Õ‰¤OBºù83À3ŸLñ'Ia$°Qʧœ-àSÑZz&;/ÞçrÞùO d¬ ðŸgñ,ÎÈ<áõ_#‰ùç½!óz<«ç(°Åúï0ˆŽjÉt¶Ï8¾ÆŽ$™}(OïäÍ¡Q²·jY¯Î?…ØŠŒ~Eê&ÊeÍÅ÷Ñk˜îù[À!0Æø¶EO•m[ÀzÌO7ærS <c€$¹r™©èZ{Ì.$­¥Él‡ «\»Â²Èàÿ˜‹ÀpÉíð¬ò•ÃðAàIÜLWJ*¼‰óüãxyΗHw="KY"Ì—“øþmkÒ­,ðž%ž?Öãds8îø‚¿àü¹Î¿÷GÌàü:~ÏgÐë<ŸC‰uÉÙÙõŒ‡"røž’ Šˆèáð}?a©óAüùú—­<Á@è£_”Å‹åùòêS躼gã1ühŠí:-õ,|±Ç㔪añNz[Ï:¤ØoPœóǹ üà?(^Òß<ɦAØ{vü߇ÆO#Ÿ¡¡ÞÞ_~N÷r}ëòpü_œ8“ÜòÛî|ÏW¹æ}ïÍ8G ~ù  qàòý»ÀêrýÏÈú”‡§ü·Eëžyçžy瞸ä7ž9ÁäsžyçžyçšNyéôSÛò\ð“·æt¢{yç±s1bã•äA“ðAiïÈTL;“Èßùî|Ê@ ïft)ñ:kËä¥qØŠ“@ìô i±(QøsÌ<óGªNšr óÏa:ç¬ Zt@:0Zb\> NÉ¡Én-Ìõ|Ïh|N y}ÜÂ’&3u¨„[‰÷;|o&«ãyžó”Ma1Šö”`|`ìY‰PJrû»îîû»ÝÝÐ b4“ÅNllXZfH (÷²s©u4ÆÐ ‹`½€ Ô Ë!‘ìeŒ„ ZM‰ Œ ÂRT–b¢°+>øR6GÝêÒÈR)„O2HSß(I¯ÿá‡ïð´#²õx¼Ö)2ºI™áP¨ª<ðZ©ª¼R `†P(Š…‚ÿûU¦•%ÊD²…A¨X¨ŠÍæT”S£a¹Q2"0*¦/ºÛ«²nTMJ¥b¹T¬7…ÑSUUeVUUº«ª»©ªj›ž§¹y+…BÃsUQYEÕ*¬ª,ªñX¤HBjxj{‚ Áªe@ À T,_xûÇÞ>ñ÷ŽÇ¸ûÇÞ=Â{¼Þ;xû‡Þ4}à>ð>ñ÷¼hûÇÞ=ÇÞ>ñ÷¼}ãïxûÆ€ûÀt4hÑ÷¼}ãï}ãïà>ñ÷¼}á>ðϼ}ã°ƒà9?wàüÏÀåø¿G¹€ÐƃZ+7ð ~£â~/9ß$Þuß} 3ÉØä:ÿ?Õ‹lí^äœ0ñÂñrÈ ßÀO^Ïç€Úð…È? ™÷ÌíþògÄ JëŸfYOYDõ× ‚èÀ û˜”v½|x^gŽ`Á€_•Ì˼¼?Áɳ,¿äl¦çÀgÎÀF'ÎàŒ[—¼RÌAH&öncmº/˜ýJßÌÅ Ì~ Ç1­OÏñ”s0{ãù&Ä|OQÃãÎ ìã嘋çd4ø~?ùŠÎYŸcï«lÆeò†¢Ù@ÐÄë‹ôf!ed[f,NQy¤oæìY¸ò—09²Ûl<ö}Ÿ“âøAo8s›ÌO[.~¼¢ðGøüGÞye¹#Ì‹vh?ùø¾ÐAÎ…ÕÐ@£ó¯€{ç¹b#1’º/?_̢͠èSåLÂØâç:—ÏÀÐEýò¿ÁñÑ|˜„41Ñù¯#Â:•/̱–Yœå—B'ð»™6ƒ¯¹!™ÌA¼ý¦‰œÎ&ÛZº|¡2ÁÕ(ǼÀN7Á6ã®(²øýDxÚ6ÏhÌhÊcðxòx9ã/ ýȧÆ|%?Ïâ ¦>Ýegïàê$è<_«FÈ€PÄ‘AŸ*+mç­È°?~d„‡¹ÎO ç[íú2û,{äæ–ûXZ`G<¡ùöùò9¬ˆ(Ëão2<—?2Ï%1Ã8þTé–y•h‰aöž‰ŒËà(ÌGúü6ÎWí–Ñð-öÍ;„Ë4!ýažH4`è\™da‰è6ð®x~[kµá‘}§ÎïïÉ7“®xÌËÝ(}ää ;N¦û?BÇæxË/òøÚ8¿SÅ*ÇØpëˆý{ Gâ¿u'Xˆñn ¡wù©¡î]‘袒Šeûò~b&3ÐéΊôô1ç¨B†9Ç™—?çgáÐÍyÿœ#©üÿÎiðFŽE§çÉWÓ×ï6ަŸè ÇòƒÎ*²/ñ8•¢}?þ#©!ç‚ï4s7è9ÐÊiTæBàc!ú)íR¢Ç!p·sá¦Ä/L£~¦×qo6;‹Ø^ÝǕ砷]Ïø7Ä.{ ‹£ã‰ÏÛêþM9¯…ð.J7ÖÇÚr²Š*{`]Œ'‰Õ­ŠÛÔz±òKz‰èc:—FļöBDòëV= ¹|æ«tÚ×/÷Ü(«œ‹Òƒq?–è3Dܶ)<ïœÉÓɶHÆ,UžA9-Y)¿é[’¢’WîS¹ ¾±Îåý’É(T¬G²±&žvÔ`ô„á¶DX¥Œád‰XZž’*3¤. q»Ñ´t'½ö"›ë#¦AÓý¤´˜ÆdÄ·GQ¨´çnÛG µ„ÄFiÉFåOB]6'K˜¥tÏ%±ÏGÇD˜ŒO€V*Ðù‹)¿íè"–h<_ô(äµ)‹%+L=†›h×´¬‰/£¨B9«nØÓìv¥0c;N+zH• " XÂu”Mm¤Ã´tJ±T_†Ú²À”°—¾åÂ!E#>Ÿb“ò“lâIµ¦AºrØ#(É+ÔHId©5·,MÇÞ0û@õÈåÆ$ ¼áÈ©¢f ÎÀާÒ%´B„<>6è3²=äþ§ …‰ÀënØÍxkS_e‹êï€5&|Ë•ù9Vkþ‹úÑû4¹Fv±/áv5z÷=aûœXѰ\ÚO]¿,l‘I…%9ÛG–<¢éf?U—jú K×Ö¤”ûÀ}oh+½x™Ñä,åY*V’ð^©…x˜,çÛÊ”å9D¹¾Æø¹®6®7š±ð›ÈÞ]ëx­¦rVR°~”@î©) û÷ 6|pÉíàòŸL ¾UÊ •àç‹<3™/3ÆÌ%ž2HŽJˆ¥–Ö,øO›†Gñ3Š&ŸQÔüj|ÙÆÙ®§žyꦇӀæ¯sÔóÏ[×<öSCŸG ÞóéŽqa×+êÐì7®_•åÏÃÌù|ã DÏëñ`h¾6öý™ñŸ&–þá?së[¬ü¡G?âþCèØ{:}N©ð¤gwÏ<óÏ<óÏ<óÏ7Ï=qÏ<óÎ<õ½sÔ¹ë›äìêÃÙÎ'¹èâv&‰8CŒ"©½”äTàðyÄæ­X2X¿|ßgùö'ÄœîvR ?s¨½”즃ê$I§Är>%U9N 1<óÏRt³›êC—⇛ß=£‰„CÓ c xV‰KÞ‡‡‚ «gc=¾o©åON˜'›S‰ä©éŸ’ìúñ~˜Îxé z£Õ •ibÀbNÕ¼ØSJzöŒ:ÝÝÝï{½Þ¨6‹2À˜µP.ÝÕ2£mˆ „†mq Aü%($¢ÙdZˆd ²’ˆ C 1LÀåðÍ Ä&9Å<ø°ÃÞ1žç’¨*6ÄmL$ ‹2 5;Ñ'ЖÑdª5wPu&*W‡Ž£êÛûýY?ÿÿȬc|k ½Vö©T¤Rtá$bT*JŃ Ãýh¯=jK¤‚%„ •‚ßúëÆ­¯­û½Z­ªL©P ݃A¨X+UêÖÂm2Ô”\’Æ£`¡ª(<(7= ŒVUefbÚ¯ºû+ºj›)²nW=‚¡aÜsšè²‹ª²«°æ¿u÷[uqLSe7J¤½R\½ÊäUCÄÚÚ誊誋¨‹1!x´V+5Å㚦¢AÄ„Âé œH 4Œb BÀ`)÷€ûÇÞïxûÇÞ>ñ =ÇÞ>ðxûÇÞï¼}ãïkïxûÇÞ>ñØûÇÞ>ñî=ÀhûÇÞO¼¸¾€;xÇÞïxÑØûÀ}ù÷€ûÀ}ƒïxûôûÔkïx‰øB¿QîЀ@vZ×Þ k_[ð$~“ë~Áç;´Ê']˜néÙÓ¯ H—·–`Ÿ1Ð…—Oäpñ—ÈæXˆÁ¶ÿ-ƒXˆœ_?œOggSQBVXC«o[ÿÿÿÿÿÿNÿÿÿÿÿÿÿÿÿÿî^.‹sþùø“ø0Mü¯‹K—¦&'’{?ÇÊ85!Y?íoÁ g/Œ¿²Tc’¬>÷žGi¿L üƒ^WÅÀ,"çöä»As^r÷ ‹=…ÿæJê~%3Cë¿ ûФvgy%•ÀºZÌ€~?"rÿ¢ËlÈ6ÊW€0 ¡ù´ŸWÂ/>Üóæ¢_ù?$]ü?Ðg󞼊2Ÿž_ñý<~sÌi7Ì/—~gï“ña eÀµ7Þ|ÄÁÆ(ÎX—Á×ËÌù._1ù|™œòc†]Ìÿ Aæ&ø ƒ¼Jðf Ûϵ¤Œ–oÞ[ø`¿‡ÏÏø2ÈãûÙ9å¿GF #„¯ø§‡Ë'ç›s¯šýN ?¶>a’øAþ,Ž¿ÖdNì<ýæiaJ8ý ’'ˆóŽ ýý<眑‚ùç]Oç³çë|—Ci:ˆÇ蓇̰·§yI×AœØM¹A΄k@^cn!„(ë+6G0×ÛùÞT ê±$Äóü?˜>>Ùä„ð#è_—#9&JÌiì~Ðç•À³©G1וÄcf‚tà›íö.²/èíþ†¦=þøòtw›ÌO~B/>>HèöÛbüÞÂ~XŒ¿#ü M4ö4è[ÊB2Èë#ù[A¹d ¿òP…ÈŽDÊÿç'?9b=üPp…f²˜“ùþöu+ùÚ Ñÿ2ÎØæÊ Yyó×S½’ü9ì²6˜G¿ïèoÏdï!ìûnE™¡ŠW1Ïä?žb>! ¿%ùœÄø³É¿;ç0Fs&XçLòCü¹ùžoËT?‘0Ç–"b9`žþ<À…G‚"·Yçžs¿Í N;GôØgµ¿žf¦Ü¶£Ÿ‘âPŒä@ü<"_Â<×À²ÏÊ@þƒ€UßÏúœH/ãaxD+,µ£Áå|ö2ÿ1 È·"#©’'ͱ«ÑÓ0£ž~Ìü²Ì21ÌGñmô7­<žü‰»EèÔ&7’2È~—·¯¶õÌóÊ6ß,×<=N²cÐ!]§8·˜Ûçÿ]tÌ¿1'æYe³?3äcØqÿûƒÄ ì~B–|ÿf~!ûÁùÎâåqÃþ ‡$?S’ñèGÄ1XDÂ;òÝÉS=Ç¿î:“Û¸ë¢Ua ù¬¥MySÎñÎ.°ä+Š“úgO3/Ï2ðQ›œ?3š?Gðy•í<'‘ Lò޼þ‡¢°G§{ÿ×]ÇM9éç§”QùH¥…ÅÑè"ǤrŒÁ›8Aš`âž¹ØübP‹‰óôSñóE=u+¼äBۡοl;,<®×îlÿÎr)6ùÍl-‚É8ú‚–%’#¬ÅŽK^Ê ’r²|XÒŽˆ%(œ=QS=p XÀ¶&:­ƒ–縑zÝ{uÝ"ëñ$õÔ§ÓÑP, Î’ íž-V0E–6H«"ÈâºR}9ïÇ42.¼Ò«"‰è!CÞžóŠJåZúÄæ¬•¢ P•=F?ÚÑ:_'Â¥J–0Aq‹ÒyYÁ‡½ú„%\…}|­kþŸk¹Nà®HÄ÷û)¥ÔdLDÔºWcõƯœ†m=[a{%2§­ú4N¦™‘¨@àEº%.¸Ôu@UÅFj§+Q©ˆÉF) ‘Ù 1§×ï\‰KJÒ õj´YŠ4AƒlfD.¸¤Tdb õ_\VWU»}G指ìkbbÙ\µŠ”ü)tÜ´ô?wê×Äæýnsø…ÿ™D(é²Â ž÷ìVý0 /øQ–Õ4ækè7ú¸Õ”•­º› N××%"éü¼YˆDiáñ6O/ðg³}FV8¬²L:}Zè9Zуö/š]?~³~ÀœJ2Qå M‘…˨'À$._Ý«iE¹'®‚Þ„Œ$ô,Š\¯üÓü+›À]]*Ò´³i¼¾\½¢0Oöµ÷[U¿(à‹`¥hŽU(6…Ö‡Ú·€ J¼ÄYniaüt}Ï9¬ÃkOÍ™ ’¼Þ²ç|wÚ$/ùõà¢a¦9øçåž‘IAî>)Š{®_K’‹\s ý2×,äBHfg›Œ ëè›nŸm)Ýoz;ÉuYù]íþòߨab²¼­Ya!`Xý€ÏglñpÉí¬yOÀó])ÒW¡1Ðà|G.¹5l ãP[8ÖrxH,ˆ€a2%3áú+—•flð™lߟ«ÉÆÊâqÝð?-|7W¯Àõô(žDúÊ}NžÏgÅì_ªOz,ûžÏ¤zÃVr©íöc÷táìà/GôgÈ’ž‹ÚÑ~ZqšƒñØJ¾7HóÜN{/±O[ ÏbãÏoVw9 ZÀC˜¢žNž;|óÓñÎhõ¡Ï<ñÔ”^½QÁïÏ{Å_Z|v2íâF«„¼Ú¥O ÙNŽNÃç‡à“ÍZ0|¤ôË)öìyyôY¸<B0¡ÑÔ¡ì'/>‡³sdœª'³î:Õõ‰÷jg<ãÜ窖óÛò{ƒît¯·UVañGѪüxˆ¯@£9¼g õ3ùŸ¥Lƒþ„Ï¡¦y¾ÐøžQê kàìû>8<óÍóÏ<óÏ4 +ÐPêžyçžyçžy礼óô}žOò¶ì“¡ÏN¡ˆAnÁ;=Ÿ·K¡Ê`„Á)@‘øð<É^®vjññè/t>G&˜x;;<ŸrŠ€*¨Ï‡!´;êür·ž¸æ“®0y%ä¬)€<$ôv0)ÃõŒCÍò£ØçÀÔÐ`œs”™Éð ¿7ÚꎬÂ)Èd;WÙÁàÑZgÐ>d5‚©ÂNÕÕðþîîÝÝÝêY³TͤևNîîéÉ0­„< L$¾Ct Q6„  ØÊnÉl”” £ÉVbAëü¡1¯E.æÈd±ðïPݼ A{Þð͈áÝïpð}ñx<8 ÃÞ{ÀóM™†ƒžõ&ÔÌ•B*ˆlÒ™Ò[Ôd…3VJU‰D¶@Qò“)'ÿôŽÍÿÿø¬‰"0MêÕi¬Ö©œºH–B¡T.7 µ[ý]Rœ"$0ˆ…F:•‚ì÷,Jój¯f“&C‰dB¢ ˆ†¡ª5EÊȸâXŠðÈWF&ŒÕ‹b³,‰–†©®k£›UAÀh-5T£UvEÊÈÀj•]•ÝMÓsÝjW,°Ü×B‹¨ÕF*0]eX,ÁUØ1]u¦Þ*wÓÝNi¹T÷ 7.ÅÚÚèª3QUWXlÅv+– VŠÅ"E5SUë›&íãÌ!’j‹+ÁŸ†a`¨P, £°÷¼}à>ðx¼v>ñ÷€ûÇàïq÷xûÇÞ>ñÜûÀ}ãï{·cï>ö¾ñ÷q­}à;k°£Ü} ì€>ù£@h÷Û°Cïãïx¼Þï÷¿@ûÀ}À(¼}ãï÷€í÷«Ü|~oÀø¿×à~üàÉà° ûßxéàü_CÁø¿ ÷àež¿¹—"‡T°-¤üTn¤FÌÌò$þx¿•˜²èüèËë ¼ó‘€øååŠaù+ôÀ?3ùÏRºà®GD.¤Ìù âqgÌÁþ@¤ÿyòƒ‡Ç~Bâå|âu•¹e?h ÷Á8ññöŒºòŒQùqlo1ä¼_(?·˜¡÷‹üßó°¹oËÌ /+e–K‡òÎ!~?¾jE2y]ù[yB¢J çe‡?.·Ú2?ìcPÿäüÏ¢üߘæ Ágþr>x™ÁtžÉÿwë÷óàRs.3©ŽügÌO–mQësæ¾ÏùCS€„q¡×@„€öGT8p ^yye>&¼Û"2Èø/~xžÿïá?‚ÿ™!˜±ý–J6ÇC8çOÈó–YB~pþ™†_1ùg™üF³®¹˜S¢ÿÎA—~ç$²3"ðòOPmEòæWœ¿¢6ö“Ð'˜ÿ 6ÿÝ›õç2˸{çŸí]rVZmøÄ~€ßÏä m>PŽs¢qf¹2-2Ì_ç ·®·¾QξÑÔʌ̹19!j£‡‹ý¼e9αÁI¹‘‰R!qCʘÁy|¯/0éFìäòxt à 7Ó‹;,Ï,ìÎþ‹`Ö[A?‡ÇÖÓÁ íˆ6Dï¶YùR²ðÛ;rŒ‰£ÔÓl7ôÄÁ¿´ ¶ øP`1(G8^Gcçå駬ùe`ÀG›øØ÷˜ûNYõ—_Ϊ`]„O5=Õøb$· ‰F9¸¨›-·þ¹ï¾üñÔo#=™bÍÎJß~nÄ.¢EçÏ?~YŽLÇ™'ù ÄB?R$ù°˜í!può·ts9Þ8¹”qý9›XLR|íཇÊ,æó‘÷á–ÒäýE¶uh|s2 ¹<)BœD5›!1ΈbÏ9C2}‘½ó qó<ålå¼²³>ß7˜?ÎÕü‰þA?r~moûK1ó̲Lyý ÏÙyèoÀdœN;¾à…Ë×èx=|'_‚kƒ£à~NÏ¡óωä¡)ÉàñDÝ:Èú8>gõ/:'Kí!ìÔ53£ÛËÄðž?EïåÂs‡ƒàÓ+â>XSçÈÀÕ‚Gr˜ŸŒþOÜì¤hß© a†‹ø{%½¾÷­ëžožwâtÍNº|{ ¯<ÄO}[çžÎÛæÃ‘9£YÏ{ÍéÙâíövb«÷uõg¹ÞUªh ËÊ(@àDò|NÎÈå]Ã’Ÿ*F²Í€œàò™Y»ñ!¾M~&4P˜WJnù½™Ð3—çykÍúø×ÝG:ÄúÚ=tÓ¥œóÔù<<ß<ô³€„¥‰«Ñb) W èK83˜fùÂOùËð"0ì©ÙØöG³æ’cÓÉ’¿WÍó‡ ½óÎ÷Ï<óÏ<óÏ8œóÏ<óÏ<óÏ<óÏ=%çŸÔÐ|gq~M;<¡Ðg\y)¥•¦°À4ü©¹Ðrr¤r@üÅgƒƒí<£”Ü!¢‰;8!ð;z{±íú¨• rP°}@¦ŒâP© *ž G´Îyæ/WÈ+ÈçXï<óÆ/g¢‡Ð¯Dé±-b!o`³ÝñtÐ8hDò@±ªJl°®¹ø~§_†é@fòœg•::ã»ôMIÍRPç>ÅlIÀï­ðþû»»»îëîïwwHŠ)s(YbPd[Aï@úI™*ͼL$â¨>´´ S4@¡Ye° Tø¿ÀVzOyx™x,Ò<ð|ì¦ãÁ@ sØ>lÖðqÀÏ”Ø×Ö:¦M‚Ã0žî¤DQi "¥Š,ÖVc³ÝÝ"+%° „±AkI±M>–b´K_ïÿã;ÿÿ÷ûÿÿþþ%È8æÓY¤É–v " aŒ4¨¸]‹Mj“%È)„K(â…Bª› Äs_ÇY¾-VÅb³I¦)3C™©@ “ LQE†Èº4f\Ö]V âbYè5*¢‹"¨ºª¬ª¡B¸\ª¬ «ºüÇÁ]ËÄØ/Šî¶ëñ[‚œÓu8§âœ‰ò,KÄ`âmÍš1FJ®«Y-V›n®ªñRiºœÓ‰îX•`ŒFæÄt5ѲŠèÍV+0E¢±H®êñN.‘öÂ纹â)—ŠEaîš«¥Špc=b0EÑUÂáPŒG@Ôh1UÆ.‹£5šã …€ ´xûÀ}ãï÷xûÇßŒÑØ¼¸Ñ÷€ûi÷¼hè}ãïxý¼_3àŸ€cðX~ ÀÁø?—Å´`ÑØ?W¹,üŸ‚;ðq~Á/;Å7õ*}Ÿº7Ãèr§à{bÚbÀâø:3žº?Áx‹Ñ}¼NzCó3¡|Ñ΂E¦3ø¸Dý~G>-ò? <ÆÝqAm­ækõ‘ZŽ€À¿F?Áù<ž{Ï<£—›öeûÂyŽ!?i“¡üÃëà_ŸÉ:ÒÐÚœsÀ!üÜŒ¡:1(ß^§ãbxòÌêzâÿIƒ#y­ø´¢Ïž7•·—âù?½ ¤?¼äÇOÛ?$Qϗ矩GÃuÌç¢~Ñÿžº<ÙŒ ­ØæÙÿ´n<ÎG“dz,dýüGGSÉ>KÉÈèó–Y3eGe)üVÏ7÷òþ Í ®Ÿœûo&+ÿ~Wˆ?㿸×àÁç=úFùp°>[Ðÿoÿ\Sº&Qk/·AØß=ØdǃðòÌ’‰÷~SßÞÎ`Ç0t ÁäGY˜…%³Î½ºÃ/çåø">‡9— ¹uú'ô Î#¡uç¿Có<âÜÇ“ð„z@Ÿ’ϰBø¼ùÀ…=toóá”)ÞzáA¨[¬ 0^ºØ“$t`8¬ Éž|ÿ8bc¢:_çM‘ŽÐAˆSð=äDËI‹2#íÏ14ÄÄ®Œºá€èZmË}O³-/ŒF8`¼¿Ó=Ì®Ž.pSø†‚<õðëçžDy•1ööˆƒ1'À|píA§ï\BèsøƒæŽKúcþ¸¶‡÷8„‚Òxèíú„^CK,°]žºçü› Ef;_¾`è\E1×\GiñûÏÀ4|;Zõ׼Ǔñ¤Y`1¿ó¬6‰æDxº³íθ¿B0#‚ç?Ïþƒ1¬‹üsÂmï „áï–Y—Ÿ´äâ>²au0~A¬…kyŽyP½œÉg>b1CrÝ­$‘ù¾{†åµŒ‹ `7™S×›O=’Ù€ûDÿó&ݺƒÈ¹¾WÒøn „Þ(OÀ"Ã/å·ØÊÏŽsä²óçͬ†~p#ÏËå9ù”g<š;Êò}ÃÚæÑ–ëéœO/!ÇäÇÌó?³~?_é–dø9ñóŒ¶Áñ—ÇøÍmÏ3¾Ö AIÀÆCñVÏñ~¤öåƒ.sÏöo"’8gHç0²˜¯â#c<Ì|àÇ_<Žü7˜#ÎúáÜžÓ!ÄožË‚>^r“ó?H1Ù›:'¿ œ]ø1ߟ<öÜàüOãÝüÜÏ 7Ùš@ÍC¿uv™ÖˆïÌ«g^'¬Â$¬¿“>¡‹–?7ÙÒ7= £EŠ,Ú#ÄÐ¥ÇótüuZðΙœa”bZþ‰ý £ qÈò×~ ©_øÐPIMS*îÁÃñô¨:ê­ŽŽgÎR.ˆØ´Àc08„B•í僯ùç©ë¸ø#ËýˆQí"þÔð]dˆ¯ BÅííŸÌ¾~B8§ŸÖO®#ðÅÎþO?œ áAÅè£ü?Ä/aGRF”.œ¦œýŸÏ¬ƒœBŽ8¹é£®?Ãõ×oþ?GõÉüðóMÎ ƒÈcáÐ~ ~‹Ú:ýr_÷8ŽÇëÏc•ÿq ˇçG~ˆç¼¢àw°·Oô}Ö­¼Ÿí1¨´';]2ðC€ ë0j&×@}EàÄÚ2ð“„M*Äó¢‡ÉÂ|g$˜v$ì ¦ºf\l™e“.ƒãJ¾9^84|¾UÉÒŸ*fqÄÉ'Ç: Î¦týÜ$’üx0]xDÁÖÏ>‰pÙ2ÛZš(Ф=4žGŽë’‘šˆˆlIÎÏ£ÓÂxÑÈÊA„N0H+åéã’ç&ä‡a$Ô,¿ùe}'¤šÐ ùÀÙ.‹ å‹QÐ)ÁBú:s°QÙŒ×jP">‚m­"záQÇŽv: y D…qÇ€·p0G@‘hµi(è­œ%Úšô¾“^+åj0ÕqôÑ%¬ÎIDÆ(`Ù²~Z4h+EÔÎ+•މ³hYç\`’üƇ¦\‚þTQ¬$D ¨™ÕaEp€°š_€>³§gÀWh3᪟´#–pžøO|?œä¾—+>¼N8I¬úÏ„qÀÂNy.Kå5ä¸: èʲI®…P¾„ñ–Õ"+×BzòtAèdk(±€[†Z%#!­  Á†3`’Àvrάüt‘w{*]OÈ…øGÀÊèx”c8+¡ñ`‘ÍTƒ|,I¦ÂzO'“U>;kýò±Ôó‘’GÀ#tº€A¹;.vz kD`±¿‹ýñÙ«R™Á»(ò“º,L`±ì–´Ç ëïðXµX®OÕ9F3C±'Âÿµ8Õ0T¾¾”|)± əҹO#7!—qÜ 2f(¬æY2èX``9€f Ï5ô!÷ÜÓ>ëÓK¸Òî ÝÀìÝÁ4íèíË­.:FRuëÕRõZ3«=“°+dÕ˜ an0¥UƒÙ³>KË«`†YiÀö²îùsÂ+.w›‰ \Làí{¡Ý)ã_æ'uÛ%¡#ß\ÄÌY¦G£e½´=é•i=Öï4.zgùÉ:6)PCŒ¹È|.[À¶–ÞÙíå´……¼²|,)…–eààäþêtÔàpÉì¡ÛŒg-‹'œóq¾  ­‰$vÁXà{$©¦¬”BáfI #]Þmø@‹ "V|_? xØ•ÄðžOŸ‡ÕÄŽg=_ð/íéîñx¾¯+ãø*;yíö|˜˜àœ Ýü?‰/ŸUuHEt·Ã§åök{>U‚&3ÃÈ<ÎÏàìðCOÃÙœ…þ-0mÎÄû•øoÌssJáæs‡ìÑ=û:á¥9{<þ0ðþÎã÷gBSæF5×Ñ¥ èüev úÀ‘=¿*ÛÖ‰“^Co|ï¼óÍô—žy‹ßÈóÏ$²œ¦Q„y¤òö' ‡Ý¿§èWÉî¿"áËÓNr&Oµ¥Nùçžyçžyçž÷yçžyçžyçžyçŸ7ž{òWÅÐðWœðס½‰æsƒ,:A…Gª(CÑóRåè«#`@{žÎM=žÀÀ“™×ääû•ì^Ï%)€p|”®Nò‹ÃØ¡ƒ0BéëŽy據¼ß*ù¡×gtÁäø=1Y‚¡á«ÙÛð#ž§CCÈ>$¡ç{ Z'L9oÀ+€`tB ´áЫ´x ¡ÎÓ0Ñ@tEfÄàr= ¥º”S*ø›m·Ûm¶û}·ß}¶Ûmöß}¾Ûm­í³}³M rwpèt <‚D$yêçß@! T↡RîõN*Î÷R„ K¹;„œ«€ ‚™Þqx åà÷z¸ óÞP`aõ˜1Î;¡±žo½³o·>P"qDEj Hȇ8Bç Á¤ozº¸Bî(($èGˆ6© ]ÿ_ïõÿúA˜\/8M¦³%ij²$±ƒDPj5EM‡ÿ¼×©L "[ùŒmmOggSTBVXEß#å-ÿÿÿÿÿÿÿÿdÿÿÿÿÿÿÿÿqŠƒQW¶:0›}ïkâÓ\Re¥I˜x 0ƒCˆ1ETPGÑŽŠâø–Pb"*ªŠš¨B*ª…r¡Tö_‚¼ÜnX†‚êŽ#€Ù£füUÝ^ nœbÄØ#•b«¦úíº»©Í8Ÿ*ápÄxMÍŠ.¢ª®¬^-ŠñN(WRdVËãX›\×d…B1]váº*©±Mˆà¼ ¨çB ,q­v>ðxûÇÞ>ðxÔÌ}ãï ÷xpx¼}ãïxÑ÷€ìÞ4~ßSÆ}/Àj{¿ÈüØ$1Üü_€ËðÀ¸Gà$ü_SÁ_€ 𲟀Õàáøçø8qsë˜:ê~œÝs{ö_œvÂò†½¡ŽÎ‘ÀÓ‹®¹‚ÿ4vÞÐ:0b~Ù™ŽŒ~`#©ðX­Æ´¹´ òÓ/bÿ,òñ9P±múé›ÅùÿϺü‘ê̲ùþ{üÄûOâQÀöxŸƒÏÈ•Å`/ÁNQø) ÿö³0#ýhuæ/à®Ã<‹z?9 ó,Êø˜8ÁÅâö+!k,¼ðÁŽ~i©~sòdƒ‹•…Ú‡ædþYyu<Ø?¾ÃóåßUŒó31á}ž¼ò/öc®nf6!’%páÿÿ<ŒÈ;û<ðþ2?=œFBü»˜¸uùùuÿþÏ<ó<´ÿ™ ®@¥‘LFÇ\0u×Cøü˜È>HÿçŸüëœ]rrþw ¬þ7Úå½ᙉƒã̳Ï3Ÿ,ýøŒG>yKóô?g¿†uòüÈüØ\_éSñyçÿo‘?5Ñö/þ?÷ù‰,!uþ3ðX§£ ÿ›L(?û~b¬,8½‹ü_ù…×Ûû¿è¼¾E¾_ïŽeüŠGðŽcµ‚Ó'™<õe˜ý¡Ž ~>ï/í2¶,€ÔBÿeâùß@µÉE@ÖË-í¹6òŽ¿Ÿ=jµŽ†×Ï"a~¿¿ß82à¹Ïx8c„õȤÃÄÑf"{Ù\¦Æ¡ï”2cãùøƒ¡uøüV à/h~c¨eßâý Œ/¿_9ÄogÏ®¿SÀ @ˆ'ýðq§×\üF«NpÁ9ZƒŸóã®/ƒûþËǼÄtdFÆÐÄõÚ¶#þnrÈ=–]s©Á¿"Ýs‡Ž²·Z[1ï‹, ”u<Œö £ŸŸ.„.!ÏAƒ§æ_ÿòñ9ý—8DÊ–vÈ·%?ˆŸæ÷ɾ,›—"GØC=ñ'çÀrÿŽ»óÉ6ÿÏçÜU³µ|dvC©gmñìøŸ›ùû–OìÌÎld¼ÿýbw"_–qO]uømþ{øŸÅdò&Ì¿ó›3,-”Nösã<úã÷^hüc|«FÓru`aŸ; ¨ÁdmH÷äîb @¦?ÙJâà¸?ßQ•dpËÌo2~?ƒÄÊ¡Bf8`èŸ1þÿ"$ý:çña?žFÑ:Óåóõ‘[בřtüÈä™>N|¼¿7ÿHàFÞWdzÚ€u¬”DüƒØ‰ƒ±H^]’Æ¢Ø?7݈F ·<ùŒ÷Ÿ bÈû0y&=csjA³!ŸŸ©omÏ+SÌC?Za|t^˜!é×Á÷˜诞'I[Iñ÷©‡¤zuÜ.ì{䦞6*ûïŠD–;ö$Â0—=Dè¾ÇSßGy?hÛ0sóóý@Ãï§§è[˜B^bCãÛNaNnJJDõÄâ¡+˜NO?î¯71ØSßyùƒùŽ~uH}<Ÿzü¸ ¥b&'ÛwóÓÈŽ©âIàlX—ήõ.,‡³`§L ㇩‚Oƒï  ȧN„ø,HõÂm»¨ôù:МÇ€,‘/¾&N;T‹*ôiÂR” ÂÅŠ=?íêV½]k'”Ò9{GBé´…¨‚´qf‰1Öõ×l;äJ±zyYE<ßU’'Xl°‰ö²EFVH$J±§×°8Û9Ue†Ê·Üâ—©‡ÓÉÍïAêjÔ¬©ôNq#WsÚ‰OÏbªùtFŽK£Ø#|v>ÒJת= ”S¨é]­&RÔiB~ `EÓ[ã;¹+¹]§–ü!#‘ˆŽÏ^©œ-ÑÍÕè²' \Ìa)]ë°ˆ NF<,œt[HôÜÉT÷N½§Î¸K£b òôRWl„EI‚„hûLZÊT$g)¢ ýÚ$úÀžÅQÜ"'è RzIçJà8œ ?ÕiUÚ°õˆöÞ%EzÉ:ˆPBP¤Ø”-¥ƒÕI¿ô‰ž©yÄût<«)H¼X«÷ì¨ö¡ëV±îCÔ,&,RÑÅ%ÒIÓ÷XÚÊØú‚ºU¶BjY¿Ù>—Œ_Þ5}}ëgéŠØÙ%I8sIy‰õô|¯œÊÉÎçr\ZT\õ{’öi¢DrÇÀ-ž‚´JŠ%[±b³ý(Ž“¾ šÛDÄm«ˆï}r—E‘ÖÀÃüÌ• òŠA?:»ÒO€7¹dŠðIüÇÂÐôöõÙÙad Û,\ÝJDz-ßd¹ä~ÿêÿ’¹d±sl Îâ‡ãý5}’80ö¿ÅþÚüÙÐäH”œòÏg¶ÎU×"ºåW³’ðö?ÿ}äãí¿H¤yUì{×€"E.B|‰ä½»çà­œÚ1(…í“ØŠ„\‰ît÷<'ÝjNEuËrå­¿ö7oÓÜŒ¹/HÛÀÇ©7Ü¥é[¤êêó6Û`îÃpçrƒÐÛg<w’îHÖÏ¥y~^òû¥.×Wxt¸JŠÊA]aZp ´)+R”¤\4’\ç%QLÿ¿Î{Ò®·­ß6{K€pÉì–k½Y#âGË-NR @€ðF®G‹¤å[K8Ó¤Î^OOƒ(¨bÂ%3âùòã[*§Ârnk—g.ž[<'Àü ¼¡ó¿~¯ÜùœžO«ÈgˆžÎŸ€#ÂÈŸQ<žMyTšüO7àyøz;çÉÕÓîp|OGÝtPú½ÐîtŽ¢ÂÁÄNߤa?G8pŸƒS»Ý<7Âøp¥á]zëáÙ;)ñK·êòo  ÓÛœyúŠDú?C‹çYßoëCžzÏæqå÷Cô—›çCIªzÐC½ñU=taöSâ^hOÑGÁùøO×цdöè;zz»çt<æyÛêžy¾yäQÞC¤¼øx&Œã^Ï5øv”§£À_N´ëðYÓ"´û‹,|'’‹ÑHOºg<óÏ<òÏ<Âóž‡ayçžyçžyçžyçž{=šA9”åæ§Tžo`'hr$ŒÓBjO¡íèS¨ˆä¾ßsò}_g»å‘*˜Sðv}O'£ÔgÄðQÍ»>*ÉìNU<:ãÀ^l9¾èw¼Áïukg°’ÎWDà@E@PA*NLqNB ä ù¾^Gêì€%îZuˆrx°û^¸æ‚ŒÒÙ2„nÚÕ àù Q¡ÀêãÂC`Ã`¤_»»»»»ï»îï¾îîîîû»¾û»»¾ûï®îîú’™™Y¶ BÌž¨v›NE¨Á1l @( @â ³mBRÍ@(-T²œCeÔcÔAׂ”…íQH D…A.ÄZ)Hï©!–ŠT*‹6ieBÑ6BV‘gI¥  l*¤¥Quþ¯ÿçù!ÌÓR²oXF¶mzæµJ•.ŠIÐ ¦ì¡T¬W><8UêÕoõsJ9IÊ>ã}Uf©XVêÖ1„_ûx´Ö)T—R\9HXÁ¡T*V ÕŒã‹M%H&¡`¸À¨«œ¦$„T0ªQ}TÙ5*•£UPhÜj4UQÕmVÙ\SUwMSu6MJ‡©îU+…Ç©®j¢ª*ª«õÛU|uÕMÓcÔå'¹\ú…À›µMt]DUE#´V/ŠðSt$ â.¦-B°Ùpkšëº.¨]C]EÑq(€ ÷¼}à>ñ÷¼}ãï4ÞGÞ>ñ÷ŽÇÞïxÙØûÀ}ãïxûÇÞ>ñ÷xì{ƒ_€¸ߦ¼}ãGÞ>ðx¼¿xûÇÞ>ðxûÚûÀ}ãï÷x¼Þ 5GÉø¾÷á–ü#  Ð€Ð {€Z=ß+ðB~ÏÀ™ø!ç}¾? ǹ¾ßÃbý—Úþ…Ñ-ÄeñÐOï—ä&XEã‡1Ä?­þÎLmÊ"ý[ÌxÇ6¿ç0AÉA׿‰“9 ñ#O1fGòþÖE¯ÃùŽuÚV@tL“†ú“¾‹ârò|Å̱+ù\_“ó|qn¬^·V2>ßl£˜£·^ð1úä]²í_‹í”nyçÆò„eþ<´3ÖY—ößà38e3GÇÈÿ>|Š@1ü÷ôcwá·6Ýü,óÏ,¾,>Rƒ/úç>“â$|±Ö^HØ`èP¶\ñ³‚g;äýmþ篯yóÛ8³fwFóöù|ç Í$Ëå·Ë£¬ø~ƒÏ¯Éùñ§ñÑ‚ wæ}øu6ç.yS"Ì?&ŽÝøŒ±ÏÊ3ÏáGŸ„£$ H•2ËÐðÈx›ÁNê ‰³ìuñÆ:‰ÝßÖ|YHÎm¹ÀDå–qFÓ>Kÿ7 ñü£¯?˜8»ðÉmYÛdu?g´øœç¼jmÍéƒv— ;yyƒú<ÿ×Ì^éFò¸>ùèBŽt øº"û>›Y•Èž÷ˆDÔsÄyx’ qßìŒÎƒŸõçèèëc5æÁÚødn…óøçžJ€Ç°íCñtè·lIïì1aˆ/è“Høèæ ³ˆ]„Dï³ûƒ9ÀÍ£à…ûúØ<_é ãâÆhè0{ç~p~[æ2ù¬¹üßÈþÍ‘j~òÙ¼Ÿ<‹ì¾æà?óù±ù‘Â'‰ý+œS~Î`¶Âà \Þ?$57Ή22"rx“ÎæÐ?/~Dmž~~FÞc¨\ä0/ò¡…æÿ™”X¼’ÄuÑï…%öÇ}£#E‡:ö&;!`]Çæ=aûñÏÄÁÐ~†€•ãuÏXN?ü:è]<]Ä?B:™ë‚‡'¡~7"‡9Œ¬i?Ìhœ9Ì®qÃɲB9aú„#÷<õ‚£5Žýë ÜÛÿ|¢}3é?éŠ$~¼ñ½…ç¡Ie =ö½—4üjG8ÿõ0±SôÔò OggSUBVXF7‰ÿÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(„.Èä ŸÁàê[[€ÏýŽquúâŠË7×ý‡‰;þj}',ÿÿ¢)œšèIÎd,¤LEJŒN;… »ÚîdZdÉ‘l'7þ»çH.寎¬ízœ£s8 ¬b–+WWS÷V€‚ R¿¿JéY%ekX!mGM¯ÞA»uáO%uF*å‚GO^¸€_O…[‚þ»õîuŠè0!a])+ŠË~­ªzíOâ¡wXÏóÑ!Rôœa)|¾r5*+{Íl÷_&6Æb¯Ér_œ—˜¨H˜è™œ`ÂÅxgSg#¤²…Šìµ$j;ŸOêJ ΣÂR«ig·D@ˆ¤‚~‹ðQĬ¾«üQzì,•—E‘ ¢p&ÒªìÏ®VOY” ÒÊB+"µì”CÕ¬)OTBÁ"^JV&›eب¡wª#h ݾÐhéðV3 JW÷Ò¨)%ïF•¿U‰¤ »ßOøÀ:É›QÁo†Æ¶’^M#…±°'$¢_ƒjÓuZ6±Ò‡ÈH>7øI\TÒÔ‰—¼¹ïǵ®Þå$¢iÊÕûïäÑa«b¼’ð›N‘1#À3Q(]¨Rš±8YŸ`τ‡ÚIRüý÷%ÿË—øžZÇ£íZýéYdæåŠG®Ø¾ý¹ÿyæŠê´ò ¦¬N(©¹™õ”˜ÎÃþù$Ët}`޶è{?Ø“ý_ɆŠþ‰“vç¿Z/r'.ð³íÔy$‘PÞHáøú®B-ËÌÆ ð¹ç¾ýË„ÏïËøz¿¿r;ùAËÓß$]r'%w9õ}ûÈ{—W\ø=œ‰O/"ÿ«bè•¼à… ë$ë}¶5`êåÛÏy¾rº­bqk×ß%§’ˆ&ßt*´–³–)L¸ßQbÑp\GÿÿÿË¥t½€pÉïƒ$cåEÎTd‚B¸AP¨\9x*9F ÕYr(3@‰4ñ˜f*±ï,™ €J°>ŸÅâá‘g„ç¹à%@•>ð[&Ù3Àúþ_©ñ'Œëð žÌ~'Òö£Ï>oGÑê|÷y£ð>sص¤pBcÄ! KOGèæq0^Ï£Ú³>f!^ŽØò@z=4‡-)Iˆ?A8ŸÌÿ_‰HÂjkg“·ââ—ÛÜá÷~ 9~/àú¹:=S`sÏNŸ={¯“ËÛÒ'&{:>×»õ!Ç9?ŸD8§³Öáó+â\¸?p`çÜ}[¾ß ´!°D¯à™;>åGæéð¤ä‡K|‹öü'Ä9ìç¢8Pߨ›¼òCǾó²^hŠŸ†Äéí’^jϾ_ÏØN5|iyLéÝ碾Ξ€Náäèh´ðy'O9×Gåùì' ú=¤õtÕ½%õ9Lçžyçžyçžyçžy¤çžyçžayçžyçÆtå Š(ˆàó}çey"oaÇ{0í­àz±„ÙìøOH|!äÞP€:wÙÔúÁÁ^Šó Ñ÷42€­jeUrà"«œ.«‘èíø¡NDä­=ß ³ÁâvpÞq8\딼 NúYÚWÈqÒÈŠ§äHiìÓà/>¥~,¬ÈOÍóhºC€ž@øI‡‡Étxø<{ÈG»ÊY^8ž÷ØÜMäA[ß(ò9 ÕGa@qò`ö¯ „V1^ô¤ HÔÀPŠþÛm¶Ûnîîí¶ÛvíÝÛ»wwwwnÝÝÝ·mÝÝÛnÛvîíÝÛ·wvÛ»»»m¶Ûm¶Ý¶í¶ÚÛm»½îÝÛ»m—ç½D_ í>ù|S}ñ}èŸ ÷Ê€žD'Ô_#h¾‚sê;‰³ÐÙIÚ§½×ËÞ€«ãzj@{‹ï‚™òüûÔ[r QIî½};×ßÞÓ¾„­e©§òÙ.#ë†Áˆïg6¶ÍF<8}RúùÎÛ8Üw7wƒÞy›Í½³fm±¶7½ï1ƒwxÛ;6öèEnﲉ’úxUßS¦­Ï”]³mïKà‚Ñ%õ|JËŠúJ…ñõ÷q¹·’… |_o¢ˆªDq{¼mè/{÷ïß—êýïß¿~õû÷špM՛¼ã›ç™®dRf] HÓUq\L*&§±dW,”âœ8q›ðÞöõViN$¦QÇè®ú¸ìX1`›±/uaW«UoX¥Mt™’!$ ‰`Å”SR°X÷,K;®1É…cT‰VšÄ4šÊDBq¸`FªCL&&ú±Ñ]SR¢ú&‰ª*š •FŠ..¢(‹0UEÕlWU5StÕ0õ=Ê¡P¸T`ÿ7UG4]QuQUUYU†ývõÛ®š«ŠLÝ69|ËC¬Tj75MuE”]TXnDaÅñœ8¬R MÐ &E%âE!åÍ`J‘ŠÂ¨ÝxÆ(²1s×5Ù†!TEW"ʬa,‹(º¡Pª*ˆ0Ñ h`@Ѐ€  րУÜhûÁ¯¼¼ÞïxûÆŽÀ}àï4tûÇÞ=ÇÞûÇÞ±÷¼Qî>ñ÷µ÷…>ñ÷€ûÀwŸxÑ÷€÷h;xÐxÐ÷p¸Ð£Z>ö>ñ÷x÷xÑ÷€ûÇÞ×Þ>ñ­}ãï÷¨>ñ£ï÷ŽÇÞ=À~_€å}½¯Àu,G/¢|Žü Ÿ+Í[Åø»Mgàüßè}1{»4Ñ£@h;4`×cAZ…üÑäü‘ÕŸKê~‚Ö2\SïG/‰3‡Äú§›ð8¿€M‘cå‰<$ãÍø3N&»)|×Ç(ßUºŒ%«¥Ÿ-f[¨Ò®òøØi[yŽ1vÀÚá¾» *Õ*ß-òŒ!WmWxë•+X»ËpÛ]æ¾l©@×&J®5ÐÕuÛ²ÁzJølÒ®òÒº¿â5l–v£àÄm®Æ+ÞÝ«Jg+>[uí®ûmOT—v÷p÷»®Û$v+öìÍ]±OvÚó+²UÓ”<›ôáÛq©6wjYÀ#YTÅÌïygþÄ«—š»¡#3ݨ~»f!e¼¼Ùn4¨/%‚ZbçPD1ɵ|µæ’/K²ØHizŸعs8Ow)I“Jìe5?_¢#;;w3µ3ë®´‡ ÚìW«W]UÝu[’†gfqÖêïn¹íÜÙš±R¤õv]^ík§Û¥#[-êÛÎ3a»eÛ~5v¢ ‚•ÓjNWL"k‰Ç̺ÞÿîdA~ý‚×RV”íÂr¾êonÒ¤ÞU| k°‡õüe}¸ÚùV¼ÒdÝÅê‘\¹yuÔ'¯‹µá’\!„. [®¹vl®ÖðºÊò­bì…)d¯sS×vîl¹(m™‰¶]_+>·®^¾!B×.xêõªO¥æ\˶˳õŸˆuÌô¡ÚïÒ_0ãmË®Öæ%×9PÕ$W™<÷5vî)Ù‹I‹hæ´•ñ#椯ve¹ó&{¿ÚmKŠG~T¥ñ–÷¹¶Û3»>j5´ÕÍœ*| Ei9%Îå×f.bbÇW¥»;ö¸lõÖ¸l3.I`˜d”V|Œöê¹l ¹Y"»lW/h¥Î9»“}¿ˆ«½µÌ•ÉW\µÞîŸXaà »·oû÷uÆm¨\íÏã3ôºæÊ“U×ÄÉ^­ZìOê[—hB²ÈÔüe2hO¹î¶æm¶ºï(ÒN¯øU©@Ë e«v½Zs=+2»/M—€lµÖß\¥ÎËv[5;IeÒ“–ö×\·³Ýuµë’êU®¥]W+.Ëk«oʵIB&Sˆ·«ª¸ypß +xDÆ•[Â.x ´´oFø„$1šo4 äž ëx]¼Õ`Åmó:ak’´‰çºÝI{zm´32zï.m®¯[ÇÉÑÔ…S»†-å~µº»g¦šwZŵx•$ëM;׬µ~]Lï˪ÍLp.Ng*ݔ͒)´o{ZÚ¦2åÄmvÙÔ¹7ñ•ê± ‘\€±;‡½!Rˆ…ô¸…Îû»®ì—xì¡+«±²Mºå~`š»ÒÒ$RKÌïe6zé“­[2’ÊÌúµdŒ`)i%”›:§–ºÒ>r3RPŠJ¯ufvÙÛY_ë-u¶·úêK­.}\+v>ÔÆÌá’뮹˥4åNñó9.IYˆÎYÌ\»·-[ã®VÙ% e´ ìµÀƒà_»¶ñˆÛ]kÝWø wöç•ø¼¯k;”:W½r¿7LùîÆvw.¿ïnÈúGªÙjÝÎ]nb&`5èƒðŸĨu·IHôW6_É3\ÉÖÜü0AæÏ‚{šìö¾cæñðVXXŽÙué1RŸ¸6o†ÕŸYO¥„w þü+33eª{+ùU”©M(¡’†„¹+Ó¥"†Ú€›³Ô¸3N LA\žRìQÎ\W=Qã•ÊHî"pŒ™%áï©\ƒ¤t2K†[iÔ®Baòv¤H¥d˜rdxTû©JOù9rˆ”·–齎·'Ç;F˜#©’'máˆSä>ÛK;}ðJˆ¦0Gœ\çÏ‚:ˆl}À%FÍ'¦wŸ*s'o1|„(cÿ2Ïì}ñ×ýëe¿øÝêWÏj½sfŽÑ¶ïͦƒ,¬ÉÁ–þ€¢l·˜õ¡…ïÙÜÕ] ìl?RF®ÇdÕGGch£1feK`°c}ºÝOŸ×—ùndxÞ|Êȳñ¿b€C6òiŽK&}=óÌ¿ 'eÿÞO⿈ó5¼Ÿxâc}Øó”¿ºÙøü‡‚HsÂgW#nüû¿ ÒÌ9Ú3N?±•¡™:Ó-a®l¼‹m•dû“»|¼ýõä5<Ñ>ðAw£ìµiÖ¯öý†X³o$YžÌ72vwþ L¾ÜÁ|´Û„©þ9 o1?|Im½m¼©yû“³¿Íÿ<ç4E“'óºÏ<²ÌÏ<²2¯\?'o²›|jÉ~€óñȹ1Ÿ†"rÜ\üƒ­Ÿ…ü¢J ò€”ÉQ«9h‘HÓÒA·Xì©“ „ ‹H§t^oµƒB$Qw;i2i/ÿBî½<Ï8)—g„Ú8ÖÕ¡SeÑÍ :ʼn-4„Å«é¶Gôë–SÅ´GÁ:Tží§P¤‚EÉêûtH‡U*GÝb͈kÅM¤†Î1jÓÅM ¾*@RüS…•0 ™¥ K©>@E 8H ÐXíæŽŒšÄV1ááèQð™1¢fÄFö6¡8Äb1E¨RœKÇÂzÇ4Œë·'i¡Û¤V7ròOQ‘x¹bÈ5FFœÄ[…®[YêYádOggSVBVXGèr·ÿÿÿÿÿÿÿqÿÿÿÿÿÿÿÿÿ±ÎÓñ,ƒMXѨfU†2¡3ŒÝãìÎì♈$Jdæ(£Ãð%%{Rs4øâ‹ 3 ˆ ¿×]}–ÔV­´rÇØQ›õö,äÌ¡Ë(sŠ™ú) Rnî$S*Ñ2õÕ˜é$Þ‘mº)?²I´ún}¥Ã­}™ò,Þ¦Šùy¥X¡róZ’2¹)öñšyDL s]cxŒmºÄµ×Ë/S&QTêE½¥SÊ4õwKwíØž–`׺[[øQ ÜlíÛ4ÆŸ‡¯i—!õAWñöNJ`µEà˜ƒö©³LÛ‰fiQ¡ñC1s,(?¿H¶·‘V¤±ÄZ£ïå +qé3­µB.:‚³ª"Î…)ðB©ßs³P§jˆjÀŸRµ) ÆϬ'¦ƒ1Z’dS1qá¶îa»TDB?ó8óby;„¶ÝÔfm©¿· óU*Tôü[Š ÃS«K×»áƒ7á†ëâ"[®¾u‰…×­OèHáŽ(¶$9Ñz’DÈN†1 Ä¡«:Q!Aå°¦3Ä ãRÓõ¢ž4ƒD0ÁÅãÃÊðëö©‘éô2ÕŸ"ŽºmˈlƒñøkÒèeäÀe@h«”œ"ŽR¼"‹T<€ .£;¥Ž‹ÄA¢JóÉihÁ3f”F—.‘È„ˆG~æiF––Û$¹ob¬½Q™yùbc2y„ $º‘ðh¢bGJÐ €®IÅë]2ôlø¸v/E!;E"„ÎŽêÐSÞ ²ÒJcÛ[Eöûß\Cqé!-ìž$¯`UÍÅËzu,E‹NR}Û¶°.\I¶ŠµÛ¶µ×ü_bLÒFÇr²}Ã5*¤™ÉþÄ«X,l^-`lŸI©ŽƒÌ ò0b’Ì‹[˜’ªÁ#O ŽË‡™±¶Æ'DÆ6FE;Õm Í=#t—## µBèi&Á ‚?NÄ‘U<гƒûHŠ´¨jŒc0ð! Ðùšâ´R1IèDGQâ ʇ.¼óËp¸áº©[ËM¤k@øÊ^ Ž4ɯçùRŠÒcÏ™I‘Ðòh'@H™4ÖTqFúž3JƒíÔ5_ ‡>“ ~"â’„‰2 QiU#*Ÿ££Ék0M*9™ æN¿°/€ò¥Jb¼øuÐ]!-0X@¶ HºGY€Ér”ï!J‚GÍ|•×’œK®µhäÀëŸt"’g ‰FvTf‹s%`j[S-]užŽçP³«h ‹ê)uS¼/é‡P×€êH zI§êd,‹H“%Â-ÕO’ZA>±Ér\q×Cú»ðeBá4ãV8’æGžPëúd§¥Pj%JÕ =iÍ9­)TxtäÈÑÂhÔ4š•<8ኬùUR+Ž㎠6{€`:ðEE«L¯ ,º¤¸}kdñ2˜þ9€ ±)<]¯'V«=!–ãé¥ú”ŠñôK™Fâ “MzK´«=´Zô!E$'µ ü¤SÇÁ #ÿÿò?}c¦%›¥d—ï¦4Ø•ÿÿ–ä_þ –ð9Šj¤Š'ë¨_"‰¸ôI?£Ï¥HýÕJ¿© »²šñz=IH½Zƒ2’”…$YTì=EUNŠK¹(‡imcJ<ƒRV²a4rÎÝ{]©EÂE%I³×µëv×i&•(šS«VOµSDô˜©ÉSuj’±Ê¯jO¸«UJ$ôLËÖâ-3ÕdM¥jõ FB”˜·©2ó¯V¯Z4‘g¥ey2¡‹:“ $‰]VÔò¯hu¬B…M§YÕÝ=ÏVí '«¤‘Ö®ÕOì\ÒU”“T×ÙûŠJ‰’Sâ”›=îUÁ«_ª¤£VU£IUZI•+Wj“¯q©'O¦žÊRü½¬¾5?••)Œ¦›dæUËî-rú`—N0é´z¿åedô¦vi)tú` ìÙš@ïNt¦­W—lô¥L®–âÈî<ºäŠœ'SXÆx÷•í(®Õ"Ñ©Z‹;6çH%s»Jý6ËCã+„™ñÍmbšdR.î¤Þ‹IEe`˜§L˜© [¶±ˆ(¶Sv.‹GxØbËÛÈ`½Ã7L ÷Û×<¬35¼%#™B1Æ I™ƒ”#¦’`Œ£B!¨H!‘R®²ÏFÍ–R £+Ò ÅTd¨|dÁ3DU }HE Æždù‚DóïϳrŠø6<úô’§!5G'¢VO6±YV•x?“•xÞG*Ñõ•xòr­ U¦X ¼ÖhËŽàwÎfŸÊš(‚1ʳYÕœÖh®ï¿ïÙý•ÿÿê&2±–rµ–hî¯åc+?ûÿßþ¾Ä ÆðI}‰'±*ñx¼^/…Ø ÅàÞ/«Ã¼oß½û÷­Ë¯×ëõ÷nÚ ¨P¤"")$=‚)$’I.¾»×××××××××××××××Å××Ö}}}}}}}^Õ pÉí=3 àŒÌrôZ'I `8šÅr¨Æç<"˜©KÆ´¿S<몕a# Kðý#ËY6x:ƒ/xø>Qå³Âqá<ÀËâü Ûåzü'ÌÃêúŸ9þ>'§ÁÙù~Àø?÷æëäö'³·¬c&ƒò<ŸsÉÁ)©~çƒgÜù —ÉúŒgȹìÀ±æ“Áôˆ1úB>YÏP ¡Ñ/Ê©¿ tòX$yìðzé<ÏdòFïÙÇØ!ÇÒ0ìðcNºÌøoÞïŽòï\z{£¼ó×èpViƒÇÈÂo=žOOYó?›GÍÓàû'ƒ÷ÛøŸ#O^Ï ‘0ù2{öJ È{Dú¡(²SrSj}”pÿ@G- *è Ê;jgG8E÷Þä… ` Ûô‰«`âFr(I°"¢e±m«BØzY½éJLÔͪW(Çuÿÿ=ÿýëÿûÿ¯ÿÿûßïëüR¹bz«Äª¦¥TÔj®öÇ8ß ½VöªT§H¤†L(5*¡b¸.Lc¬Ú«T©(º„{(T…„qVqŒ*ñi¬R«4”¦dÈrIL˜Á¡Pj5+Ås.hÜy±fð…fBd‘" 55FÃT\ÕELƒÂ¡0¡PbÚ­²j¦É¹\.75ƨº«¯‹h¾ën®ên¦)©ê›•Àœ t]q¢ê®¼_ÏmUÅwW‚›¦çJÍq¹°6(º1F4®CÃƱp¬×΋j¾¬cH¦)ˆV+ºnö„ÝRÄ.+sâÖ HxUV1 â¬+Ž,câ uÇpÀ MR5ÕYHÎ"è«°0ª(ÃEvB…À 4{¼Þïx¼Þ>ðzT÷Ð4}àï÷¼cï=ÇÞ±÷¼|cïx÷xî}àGÞ¼ûÀÞ>ñ >ñÙ( ¼Þïx÷xûƼ}ãï÷¼}à>ðxûÀ}à>ñ÷€5÷xw|á'à>÷àDú§£Æ{?w¹ø¿éø= ;vÝ­kZÑØ ÷£GnÚéð=_€»ðŸ‚ãðo~/•ø-f`hs|mi7ïú°³U8ƒ›vù€Í³“ùüó?mÝ‚þDOƒå&|¸yŒJ~Y÷Æ’Ëe‘xÄNgñœl„)ÿ2Kÿ¶oüÁk/;›É* 5„Á—9˜eý· òA¼¯·æ ~?¼û-°Î õ…±=ü—éÃûŸ<ÊÙç D©žm—÷¶ðð1…±Î‹sú[+g!sç&_aùã×7wðyÜ¡”çò¯”ýëøýDËó?%Sø˜~qzܘ Ôø¾2Êwb ÔlþÉи‰ýƬç?tgûjYyóç¯À1å÷œ¹ƒ/mŠÃóÍaüaš|¡Iñÿ's²¥KŒþ&'u퓾[ˆËø?ÀþDu´œ­™7Ü~zô"†þ}þ`ß©¹ff[½›öù‹2ó“3ÎqùÏ­ ŸÄND fqü*ó›A2[ËD/Žü'±“/Ç䩼CËÅÝuм™ÆE–®Ns¶g?Ïmoͺmü›ÊˆAÑà>Ð[80Áú–O”I<%DͳÚþDÿ|KÔ‡¯6ÚsÙ™3×B%>Û‘ãà‚&2O˜‘‡t’ü1Ô“Ÿ7“¯äûq›xÇ6_yß=”g-_/*p|u ]xÁpÇi•‚úä0ƒŸéÎ?>ö\¬Ÿ;.ãØ!KøþgGS:Èæ%xé‰ÞI²<¿8µ¡eÖ²Ù[gèS?pãö7™:)‰QïÝå ÎF %áüò·/›C(ùñY'˜žø8OÎÏ'²$9<ïÇñÿ…·²ˆ~s¿Ÿ»þ¼Âûs¿þvZ„à -io¼¨Ì'å÷˜9̧">ÐuÃ:Ò#ç¡@eÑ3ä¯ÿ³>¸`tþ¸fe–S?ñsÿ/ã“Îç¯ÄB~O^Î N!.+9Ïœ™ Ççÿu?/’Ÿ§²€þ݈2þyÿ_¯È”~c®GäIÎ"&'Š_™}™RÉÉ2þŠ2{½|‚ ËžÙü~@€…»’Ï´A—¡ìÏùSÃÄG8Ëý¹½–±¼Œï·Ú³ÚkOñ×ïÎE~‚Äo·<ÆYAÌ¡~Óþ(Û&w¡,­ƒ'ãþb~T‚}§ Rê]Mr>—H<äe E v<ï¦IŠA0m‰ùÐvÅ,eÔÃÞÙl÷9ìüßÉÇt0èÒšä݈›{¥ˆwìQ" ¡ÍM]…ð'\x×Áÿÿ8/÷ôxRÀýuÖýN&Ÿ<ĈŸx¥rŒŒ1¾Lí;ï¾ÊNýn¸¾Ý³ÂÙvá+õ"9ð‰AÍíh`Ž Ú9>ØÙ[:«i˜²íZ|¿O …,FÌÒ»ó}¢vgÆeOggSWBVXHº'ÿÿÿÿÿÿ^ÿÿÿÿÿÿÿÿÿÿ¾:œ‚Ø&#-¿pKñøÿÝùçîúÛcó¿·Çáš2ðÇ Ó_Ïþo•8e?ápަìÿsÎûoÑÉ[­¦ ¥HnüðÃð~BŸ;¨ Ÿœt êxŸ›Æ?¼\äó߇êóùù–@)ëÞAúøˇ‰â?]\7PÓmá|  /"Nâ÷ò¬Ê¤è,œr¬u'«Q…3©¿–›j¥A^evÝÞ,%›a•=](•6ê4+@^Lb *s4Ô yl:ƒ‰qs&>ÃV¤Šê\í‘0.]¥C<‚F` X¹ó8µŒPMI7]YˆuÂa•›"C 3LP¤ z¶ßÜŒöíqhÜ }ñÅÉ•:ëMDÈ$Š'¼‹LTƒ1éïMzŸ"=Rñ^SÌE›.¥ñêf…<‘‘ ¹ò “&Ÿ!ƒIQ£LÀ2xxÈbfΙ——øÄdÅönwA„’oGØH¯}< l¹u&Û$éM¦wüOkŒ«dÒ¶”2£”Ä»u$Të ¦ÞÄ\ÊØQ2bÊD<%HQ.F¯2—PR®že D¹ôó=Ii=¾–Ý”jÈ9ggƒb}Ù¶J±,X´´ÈJ¥äšgcì;fYí0üY"’Zyþ@¿©Qêfºã€`Glˆ¦&e΃¨*2:ƽ‘ žk"h£€IKð$•ÔàÔT޾ŒŠR:Æf!ãæU)”(„«6Ü ñd°C4º„©3Ú.,™E š‡Öå ,á‹o(@€qåz€¾…µØ‡Q`˜‰?Œ÷WF¸P“Ge1ö>”†ì ñO ˆ@KMe!Ò} &¿$Åæƒ-E)§G$ÞqN-Ù,dùp>_%õþ‚ôÊ8ÖR€–¬X dø»ª†LYÊ?ª šyoÀ,ÀŽK Ža®‰K•¬ ¥×´Á1è_mðÏ(ƒ²'ehcìô 4ûg‚‘FE‰3jV@ÚÂVŽûm~úy{ì–Ÿk—EÀzOþýë Ñz}Û¡]¿µ’{Á/IïIêåË!rÀ ˆÞ¢Î^žœ”ªÐDESâÞžÅâÁözDÌ¿x{Ô> G“5ifNáu-‘<´=#L‰íSÕŸJwV‰[…*Ðu3ÔZ@#ÔxtÁ:£&¤Y!’ŒÒL@xT• ¿Ž$y^’’aá72¿™EùG”FN b´éÖ\ êQ’<$‘iëI@Fœ2;œÒL‰¯Š,‹Ê ã†\pÝORá J<#$™)%Vé JˆXEäә͗§Ž8•`ê\§/eÇ"‡Ht½“’‘d°†âË´1Ëe¯è:2˜tòZRƒ cQ¬¾›èK= %ÃdrúadžÌaÒšÅéCrT~(#èédϾ]çï‡ßt}y|˜B\»Yßyýåðÿ¢ÿåæ=%Š8Yñe>ßÑÏÿüÙ M¥ö«Ú••2}ªSµ_íQ;ö‹Ö“¬ ·“nÔ¨C¹Ÿ÷I—%¥)EFTnR¼L¯v5òMhh‰TIJÆFU?·ÕÓdîŠb”¨c—gÒòý(åÁëR‡\§qÆmÓ³/” åܸúÆK‡D¡Ûºåkê}>œ‰O²|%þ¹3™p¿Æ;eÞžZN-ðÎØð²ÁmTg*qÙÓ*c—2è¬ ÍÄ$B·SÄXÙ‹ábç6Þ€²m ŽR¥ÞFbdEZ$*J‰sâJðI +XN‡)8Á‚‚#¤†Ñ_‹5:Ç1)"ÎÉjÅ\°µ­qxИ€ãƒÑ”cšÎ0àå[#µÒ¤­ !jŧNX‹•ŒŸÅÈÉý4˜™b,C“áÿëùQ²¶—ÿÿK*&TeDJò å˜™wâ(Ÿ Úa‚@fðE’"É$Þ,^BŽÄR}ôûb<ŽõíÝs»®zûƒqëîÝ×ëîëîëîÝ·FÝ»aÙEvÑÈvÑÛ„s64Q“C1¥„F`Œb©‹Nsêk­õõõÎdæuººÓœÎ·z×_OOOWWWWWÿÿ+jÐpÉí&Ï,£ WÖd¼vŒ+·ƒ0 FJÎ;·Q d…NÈ—Œƒ1ŒƒÁݤ[ÇPÞðý'µ•O]ç?F¼cœ½Þ<'øü_Í÷¯Çø_•¹àùÎh|D æýªê|Ž&šþÀ„¨kýCÉàï=?Ø‹ÓÛÕèðâB¿3ÁWHx>‡'Áö'³NgŒ5%…èúºÍ)É௣ƒ_Ž{I<üywåo±§"„æ¹ ý4[òÖ{¬ˆƒ®Cùžoâ°›Ìeó¿u¡'Ë®:Ü&ü'<óÏ:g|óÏ玹üèsÏ9@Y;=õÇ ü8pmúŽ«¿ê¬4Ð8|Å~’|Gêté䑸õkõu~O8cðϤûTêè(õ‰{&üAèìO±Þü—>·ãy\Oš²Á§ƒ±¹þG»ñ;[ØžöãÉÒqÑñÎßbç.ôÖ ©½Ûèé'(g–Ô ä7±_´ù”û¥=Ïx}ùçžyçž’óÏ0¼óÏ<ñ×<óÏ<óÏ<óÏ<ñõ|žâxž†{;}àÐk§’š-‰ M=š20ÂŒ¦&)ìÿÏ"_ Ÿq>gÖv3(ä+y@{W{Õ\%ÍS´ÐôAèô£ Q™5ÕÓÀùItxúM^¸" (§8M UÂâÝSát‡H Ô(pªy..Ïl{è›m¶ÚNp3áàp}°Ã|ûfj¹Fú²tPè@Þ{Ù窻Ð ÜDåðA àøÞÞÒtrJpGzN—p¾§p‚þ¿ÿÿþÿþ¿ÿ¿ÿÿÿÿÿÿÿûÿøÀ1 ¦øÃ7‹Í*‘YréÂ0©P*+€æ¼Û5šÕ%Ô”$$QßQ Ùº­WMÐ9«ªóz½¯Šâ¶¥¦%D"Ê“ A¨Ül71☴ß´ÂdD¨ÔÕEFèª.k"¦+ªû«±`®ên›&çºlV…Ít]UÕ›MqmÕÝMÓsÜ®4EÑÁEÕ]f*żö榪n¯xžéÄ€¸âk›bŒl«˜»Å¸­ÅŒ^-Å~bÆ)ÅN-€7H›©ÄDŠð=Û†á8§¡¨@b¼^åvñp"B¸]Œsƒq¸‚+»Æ‹¼ƒˆbâ@â‹· º1„b8±Œb¬U`þB1Qvá¨QuXCQ›ˆf¬Å ®³ãPĠЀ€{à¸î}ãï÷¼cïx¼v>ðxûÀ}ãï÷¼}à>ñ÷€ì}ãîx¼}ãïãïàÞ( xèÛî ÷¼ÞïxûÆŠÛ@ûÇÞ>ðkG¸ûÇÞ;ÐÙ¯¼Þ>ðxûÇÞ>ðŽÚûÁZ÷ׯ›Gàü_cçWà¨ü½_€ãð(v hÑ­hÖ€=ƀд†×‹ápò~“è~/ÀQ÷¾·Úü s¿²~/Ôqsöô{ÿç¶Óó¼GAñÛtuÐmõqÔ.…ú0/í΄.Ào.ùtºÞõ6¢Òß7ýã_LÚ1õ”ÅïÔëíí$¿¢Âñüe’fMèÿç¼ÁkòÅãéûH<ŸüŽg½“=uÏê/0KñiLr±Èù®ÓãàÅŸ0탗¶Éñìâ?›5àθ7º9¦…?8œ²7RÍŸ_/–g?£¯?/—udÏóÿ3׬п,%œ²ô9üJ?]~ß±ÇæOòžŽ¶ÿŸ™Ûíá‘Z?ÚøfP¼'ÿÙašê"wž?cÃû8Ùû ›öˆ—àüèÁÿÞz~ ÆÓgÚc¢ÅÖÝ|yÛ}£¯°æL÷À8÷þ!~þ”g×üñŸgøöeßÙcïrÉ~fɇô¡vˆŽü77ÌáÎŒÍçcr-ØìolÏÊ 9â³ósÌì3ð?”?žvŒ¼u<Ày…Ô€uº  ñIS¹¿>Aùöî“~ü:Ö–M¤²¿³£ŠcŽºääüd˜Ÿ·#Îêl–gýšsëš1Ð~cÓ_üDaÑ´ød…‘EÌN#iü_E ò]p¶ÿŒ—ÁÑŠÿ¡Íþÿ8÷Î#o÷Á|r1ѤÚpÿ[B×—óÆÂž_ä€ådù\˘/~D.F:ŸaÌ=¯ìä)ÜŒc‘>0 ˜"2È0a•?ü:q¬cÓ7ÿ=ý¹x³Í¥Ÿuýöƒ¯0Jè2‚>ǹìý‹Ï/ß–x]$ƲÿŸÌ˜êw¡•À„ Çü…at?;fþny³ÿþ>!Ê'®¼#.  þyñ—ó[.uÿÀ¦øt"кËp2ɾy| iûóš]çîÀΟÍsËÃû7¨'y‹kNúæÛODìÎÑâ`½ þOɃqãW}3®Gµçí>~ï;»c'ðv?27y` gRƒ3ŸÉËçdîþÎ…õ%’6h.ýüŒuÍ©n8òvyÏ4t0v;ó–<LÑERQ ë yëµ×8÷¡ƒ£¡ADÇAûñûõüœðŒ"ìbXx¬>ÓÎ !ðƒ“XAXp‹å_þ‡ãþ©áý/½ÁOA0V]ttuΰþ•ñ@(A‚ðŠNêÕˆÿñ¡Çïß÷‚õ~ŽºA6lE t ¡Î[Øÿ®#¹ƒôq³D:ëÉc¹Ðsö!í߸ˆò_Ê"ò¡å êNX¨å›:´a —Œ˜•*Hþc$3 6HEˆ–ðJ•§ÄT&’fö&JR<–'ÆTŒÅ$'Øà½ ¢Ò´XHû%PjŒ©i8yh±“,dA¼f%¿ €þ$N2¨<OggSXBVXIG²™™ÿÿÿVÿÿÿÿÿÿÿÿÿÿÿÿÿõR#QßhÈ•°øMüt2B,'ÆTíd-¦bï3&Ì.™2b¤OQLŸUãé9õëâ"îJðõÖ G® Têx`IKôy# ¼¹8{¶íÔ•Šê¦ÂÕJ6¤ ÑJ¢—S+Ù¥n×RsåL©\ÒŠ@nÍ7<ªªWBÌšA#éöì;ÍßÛ4©,zò<¿W®Õ& òFUØQTèÊ‚Áå¤LÖ_Å/f?³Ìñ]GÞdðþ"º·»¨’¿ÐÇ&º€ pòœàÒ­G‰•U z€2lÞ$qbëÄfÂçÓbZDÊÃ!† øì:y‘¤ƒ‰ =pÚë½7Q™b¶â¦(ž IîB¸_Átf¶´ØìRÄ  K—Æ{YˆéVêµpeBžO‚$ÈeƨÛT¶cŽR; Üc—úÎÏ"á; ³“Û†aIîR˜¨¥¤j 9—㌄sm¹RþNä€Çµd¤ve™ŽMŽéH²‰ÁeKÿ”UéÄDžõ=$®|ò •Jì !Œ ´µ!n‰l’…¢°\öó?øí(I1™_̬åJÈÀHJ-ç™KÅJàëÄPR€ ¢B›ÆGže ¸†MƒS(…%%"W –•i  ÁâL ‘‘jID&’+èhW(ÀÉ4¢<ÊKјõ|›Ê L”’[Ê”…¾‰.ZôÀrB:z°!;ÚÉ1ñÛ,™c)YòŸ/úÝ/ÅI:jáÊüß¾_³]ÊMö2ÜҌқkYFÉö”x{ ò´^T±‘©*QêÉÕ›sý 2€ …3u£Ê1y'dÆÚø¢÷éØ=)¾dÞH HèÙb.¦Jp‰éŒò֦ɋ’1ƒˆb©“„b‚Q‘™¤ÃSùB1ä€68¬mŠ\`iËö}(âž\bttŽÇô”´b²ºŠ”~$º„⪦<Áx¡ØPKâàUÝŠf5a7 …€H'†‡t;¼Á £ %sYŠâþ“ôú/òè±)£&„1/J&&¾¿!¢Jb‰w‹/±$;À‘/ûÎô¨öí× Ûžã»víÁµ¬"…Zª¥ªºÁõ‘›AÑÃÇÃÃzxD'oýbpÉíÛÍÀA܃´X°ñRZF(ÁŒWÊœÎ&^ƒ’rK¬‡OÐËÄBI»:o¿Òš,„q>¯GÉ<¶xN;¾à‰ÛÇæ|À/ŒðžüùÝÃîüàò{~†>†ÞÏÈ kà†ïÔÍÓÜÏ(sð„éê&ŸŸF/<"ÜéùYÙ¨0׺Ϟ‹>kcôל}\>±ãîž>Ù7è׿¡>Æe?3éΟ.C}èw¼óÏ=ï<þyça¼óÏ: Oˆ_›s“TÄØ±Ë{ã¢rR“í¢ýÓ§M³äýîÕKÛÉÅ‹àû> =.Ìá6y|!È¡ö8SâpWä‡íYÒ‡Àä4ûCJzÃÄçCÍçžyçž÷žy æ\ó¡Ï<óÏ<óÈoS`õ<ï“èó¾Tìù¦³æE“%†_`ƒ0ÁQ(AÀhžêÁdÒ§—ä|O€;\…+ìOš”‚{h´ÆWÎF^yç»Ý';âúÞ’÷¼ÂóÀ¨ElzQ¼Òb)¦È aò@ó}¿ÓéÑkñ<ÞÀ0r’v¸ú;ãîî ‚~ˆ 0)Qð§aéT¤MJUKâ7€Dw³Âïï¾ûï¿}÷ß}ô:÷½èØL"YJ)‚X¨ ½û×Þ @ òI^ ÅŠÄ z¥U%`¶?RI³ ‹kcd 6§jŒÀK"ª½‡‚ËÌïÔ†0É5LÃK&¾¨[- 4@=V¡‰<” „± PDŸzPA$©šE!hÑbîî뻽Ý×uÝ×w»»ÒåSÕ^AUöN3z´^+4‰(ÈLA%Aa@aP°\.#›½Zk©OÖé @ YºíØ  ê\Ý­±œmŽ/¶¶)5ÅfbKÔð¨aŒ5eEÃÄq6 V °Q]Øè¾+…B‚ÑA®£‚106T÷*B¥u¸¯Å8'xŸÄp,æÀ3 Š‹£`£X¬Áƒ¹íºÜUÝ^*n§â|O™bŽCKbЍÕF*®³•]Uþv÷Ûš¼Ôâ|Ó’s>gÄ®…Ç3flQšŒÕf²ë±]š±~kscÅù«ÄEø-ÅŒcæ§7pÄ+Å]Ò+‰Ìùœ ù§7ðîšsj…bsH¬,Ã7°æ 1A 0ÍŒc1ÄACšñŒË7¸ÿ1Íô>†á#4d¼!VhÍü=…YªÉô*f£4Œb¬ÖbÔ5 ±]šE™®Íä;†`ÔkÝÀ¼}à>ñ÷‚½ÇÞ;{M>Áî>ñ÷€ú@{Qî=óï>ñ÷¼}ãï÷€ûÀhÑ÷¼}ãï/¸ûÇÞ:ŽÆ€ûÇÞ4}à>ðxph;xìhûÇÞïxûÀt ûÇÞ>ñ÷€ûǸûÇÞï{+ïü_CÕø? ø?Wà.üZøßƒL'»Z@h@h÷îÑ­ Ðvühò}‰Ëñ.~ÙæRî¿¡רÌÜ…>ÑL;]â}—Ki}3«¨ÎÌnèòÉùï2ŽÇ_?ßÍ–Ãø3öN´_ßï#â€ËæB‰Dî}ØóËÏð.k ȇöÐlþ=öÅ–mdíÙ´°ÑíÊó~g÷ ïÁ ¹åIðCó8#!ÜòšÓsà¾Yƒi/é¶Ü—@„/¦_oz FÔ{ÿzî°…¬¸€7ÌÚH<~Àü¤gÿx¿¿‹øu8’~wáß–? DG„Z¾iý÷úJ‹çöyÁ³1¶¹ö³öG;@{I!C‰ÝÌßÜæ}™\ B~dþÍý'çùå Ÿ'âóó,Î@t`11߄‡%KÉ#Qœ~¹Ø^mu¤Ëðñµþx¿À$ü+›ùËuþ䮺àþ\ó åš-òØæ£/éæô37ÿˆ!ý ›~.|ÿóc‘ÿ‘¥|SØæQ÷aüfW°PJˆYu¸lþ'•ÖÞñ™Ì§(Ö„0ËN½Š9kúH&'(/á”[d¨™…"m íe€xµAãŠQ´#FÚÂmËzç¶hÈ}£ærÀ¾W<]’Ë9gAøDmÿB'+C¿?6ÚÕÛoó¶ßéG­Ñ§1–ü°"bfñAãÎ8¼,fÁ.ÒC(PpBèòºÿˆ‹TõÃßH ÉÖü¶æóÏù83µN> ”Âía?Åó?Fë^ Üü“® ,ßrÒ`Ž{,Œ¾YÉžÞÍe’ð|­‹Î¦DËóç”æDŸÃxÁÐâ` Î`Ë=¨Ïü1àb$¼ÿ›ó9 ýó.‘6y›oOÍöŒufûO±œæ{ 9É6öNñ±ʼnGñ#;.¶ã47†di·È ˆ˜‘ù÷ Ÿˆÿÿ2‡áÄ:{(DKóÏÊ,Ën_Ý8ûמmx‡¼NÑ'Êcgæd³çóõÃ4 ÷ëôË%Î .üóü²ó«°½ãó.gù–VŸ"~Þ>s”¦oÿÖñç£aùŸ™Áø¿\æ?¾y èi;Æô çéÅ=ug]’ÄGûyŸCËõù̲ßwöÜ,ðËÚOSÏäÛù_t(øÈ=ó2þu$) »ò¹;ë,Ç7ášïÈ^Væû}„qˆ˜(õöšß­ö_¢ ðL/²ƒâXgZ?‹2²Â-Äü$ûbàdBìO(–?#|s‹|lj»t”1œìP{š<óH™éάÛË2u~O(Ð{B™‡ñ­4ªzzÁÀA©’glòÇ5¤3©®¥Õºç˳©0cZPÉëmi™Çõ 7cÆÆm— À“ úyуäÜgÕOò|ăÖŸ!|‡Â¯`fΔ¨škñ‘ÀAä$ÆT K¨ž®º¡_†2¦.¤T€ÅÖ1ÒÌk˜ç§„/pñ"§¸ H(Î Ì;žD­W¡ð"¤™1‹M´Êƒª:ÍuHq PxþÝÑ©´‰KÏ™"›ª^pd‰“ª˜âí Éùûz²ö^J~£4JSA«Žºžc=ÌwM÷<¢;¤…{Mþ”}ŃĚU¼©"Ò\ ¶)'hÄ=M³4Äd™¤Azeø•€J¤ÞïÔ$Óu+Ô®i6wöbdv"udûh™™™’%“MÜø¤,Û]˜³<‰d“&>ÓÚ£â€fزuépÎÉ%æ€:–Üí4^E¶¢ÊE·-¾-""|\•¸z“QÀ0‘ÔTÀ¢¦"‘ÔQüñBY„§ ;x,–*8ÈÌP-±Ü‘£å.¢°n£é¤¾,V’Q zð‘-Õ™•u:‚E…)è $ŠR´GÒQ€%6"/ÔFCF ؆,½‘fcûEœ³Êµ Øøx¶tW쑯‰•NZlíã/!ƒ™‹þ×’>%˜X@ LƒI±‘–åÌôi´ê(W¥ðËËcwW¼t|¡¢çå0å‡\±€ôé’Yr‡,JS—èYYf_aÇä—èÊpW ë·Z…%ɾ’I)CzÛiI$­+úZ<»ãú¼ê>ˆš\º=«Àš*1ŽªExåd‡ôrp‰•F±•"*Q$&g”d¾¥£2Ê+̇5K„’JB€¹"'ø¡R³‰_ÏUǦ½Ce”xuÏóñ¢¥z û‚Mü®yO*×Eˆ¡d“ÊU䌮Z¤%Há¢BFiL‰”@:ª_Àת T+ÄL•LÄ”ÃÃq(ÏMƒS(Ç øãŠ.L®¨xR<ÊÁâT%ñäö‰×*‹­%JtFT­ -+‚O*rßð»êJ?%bRÂ-†³l––HŸèÕã< „³•).‡'uít"oˆ*EÃVçöæÅ”Â=  4Ï*›¹(ËIö¨ÔØP”KgQ™¯jTÑ¥A2N“×´ÌÎõ•©ÙJÊ7i)GöÅ(õ(ô’_d¬ ÒŸ¢“Ò$,…{=6®9vUS#Ñ×'ØÀ!ÐMuHOggSZBVXJysIyÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿN½c¬­bŠ9$¿,K @ɘ\^QwzޱmQÊ3Û×§c[#>Œy6ÒÓÎ?³aöÈXÍ)1”Xe­ÓT¥P`”D~ ;,+*‚)+xðÝçpC¸8 W¼L)ÊÓÿÊG,´œãR´/÷޾6ÍCÙÖ§+¤w@pÉí¾)ÛÉèø%žµƒÅ\ÔcÆ žn^!àÚˆÃ0—å" &d*\fÊ$¿Ó¬šä’]ž/ ÓŽ^§ˆäylðœjßðBõøžÏÀŒåãøgÆÆÞèv}O‘ô4"x!íÉù<É>â€ý=¼¾êØ •У[?Ó„ÏgGx(JÈ4‘ø‰3ñlz”4‡äæ|ðŸ6Ï  ÄÓÜD›/ÙÀ<œ¼½^BœžÏJÓôÿŽˆvnùÖ†yS®<½†uÏ{Îû|ï:€ï: êõÈ_œã̽ž†}çk9ŸaÕ–¾OѯЦ¯Ó“Ñó>ÇžŽMÃôt|ç•Õ“á¿w؉öSàxÓô=ŸØÞ“Ð[ðÙè§ûçŸs=ŠÏ©èO/‡Ñè‡äÃõ—èrô⨔@ÑýàO‰ìòb~Fg®yLçžyçCÞxè7¨=óž·žyçžyç©w·ÛìO3Ñ—â÷$bmôÒªÄ;ÁEi€0f²I ìû <ƒ@´‘''ÐÓ¤Šqá'Êr ,\:"žÕ?‡£ªNay‹Ö÷|¡è3®9ÐçªppFÊü6"`§‘>æ±ÆzžAözÓÓ19CÍóÂTá­D¨ÏèàF¡A†Æäuv§ $HQ!9H¨-æ ,PA(Œ‡‡Ý÷}Ýßww}Ý÷wK?Þî´U€( ¸è£ceP3yU†êýûÉ ‹`ôAÝd fl”w¶«{×RÃA( Ô¶Õs³ò¨V š4CÞŸ àh<%l ÄÅ<ÈWÀ÷›è@ Cí€xuŒca!"ƒ[A@ÝW-G@wù “(ø`ï@¡UPq"ÈA „=ïºøÿþÿþïÿÿßþÿþÿÿÿÿÿÿßÿ˜žå‰x‘ãÆ¯›MfóI“)¡ JQ¨\j8†u狳‹»ƒ¼Úkªš©2" ,`UÏgõŠï«ÕaÑ\^o‹U±\S}-,.B ¡n,Kˆ0ÅTªkãeX^ÔƒÑEÆè¸âcDQt ¨ª Un*ðWtà§À± ãs]¢ê.ªì]ux©Äøæ§Àø–%rÄ. ››`¢ê±YuÜW`¯7SŠq+–)Èø‚X†#‰±£ªÁV+1]ˆŠqWбŒW‰ñCâ§N'Å!ÀÅ콇°Ô+CbBıwàqÌ$,C1ŒG Åö?Äb9¼„bŒMŠŒDF*1Q€Š±U‹ø ±U‹èT(ÅV"/b»¡˜bÙŠ±X»Ø»‡pß>àxûÇÜ>ñÐûÀ}ïwÞG¸ÑØûÈ}ãïxì}êqØûƽÛï{_x¼zÀì}Ãïx÷£°>ñ÷ØÐ£ï÷€ûÇÞ>ðpÑ÷ÀÞïxûÀ}à@}ãï÷¼Þïú"}êO¼…qò,ø€h¯…ø*=ø?×OÁøÀhZ@¸;ƃZíÛ´|¢?'à.ü0Ÿ€*¿,àGÁƒÿ q±†W¿!OžìÀˆ?5©pκ´Í, óËŸh÷%?>Sqm×7'™þõ®œÙÞ‡ócæ yBØ­>D ˆ· üùmdp'æ}mò7Û}MÍðo¶ç!H·æYYöSÐílåÄçì¸(ña±ÿü–tm³<üV ¡1ñe¦RÏnƒ®äôùfg3ƒ–!þùû; †cv;&®Ü<ÀD„wæe‡iκ<ÆÒ¡?'Îwõ'öû3· À)ÿæÂáG—XAŸ…³ø¶çåÿdE ¤É7>Èœ¼y³Xe'€‹5—FÜ<£|f/?ÊæÜµL©çþ”2Ú;ó*A˜×"h¿þIÞEæÌ6ùœÛæOæ>§Ël¼ŸY}¢z~RàWÓ´ž¿4›èeö&§öç»:o#•§l/·\Sæ8øˆA‡ï,~l?„ ?0üˆÖö9·›{’%tÙˆ¿òÃ'ßS|¹—ø›F9ÎWÏ'%~XâÏߜڱdê±Ïÿ•–OÈØžnZ?-ÿ 'Èo´PÚÒ>ìc›ó£Ö“”ƒÌ¹‰ƒ˜œDÌ#Ú}¼³s?¹ÉB&ç>übÁ÷¥[ã\[HÔ’º16² ôª%B#ãZí݆fÎd ´tìD E¹çŽLteˆ‰ù_â@ô€r¹Œæ_‹`ç‹3ÃûôæÊMøCQéÑ W]àÀu|3´Þk!G¼ÌÏ™‘`¹ÝŽ…Ä»B'#ÀËhÚ{“ƒû—‹ ȲΧS¶Ý¿R¸DãN#Îä°39!ãYÄLKóåJçcÿáͱ:Ã"%‹ÆûíC{6°#? º1ÍeæÎpŸe²}Î\±µem<šàc–F|ß:ÕšA(\óçÉù€>>ùö?ˆ°8Ï/÷™Õ`,³¨cloöó¶yã˜>ÇÛ–?¿óÏÀŽü­X˜æw‰ød‹9>'54€Þ}|«LDG­1ž~¶`‚7œÃm\6> ø¬!VÈ þdAˆ8¤ûβÕbvßó¿æMæw£·93áþübPùå{úiÚ¼2Á¶ä­¢>ÌF^=’?"Ú3ÃÐÇaç}Œ湘¥Ñù›÷ç;ÆPþ}Øcí5†ßxÉüØãÙo™Ï„ïäa™…ι,Éæ$A"‚ÿçå‘ù±#÷‘ÿ;¿‹2²Ì­9ßÏáùó ¹(Sc÷ä vênñúûW,žŒÊ¿³²·ËmZ—SX_ çMm¶±æ‹¯›`“åÿýÝ:AÔ‰˜Ó9ž&f`7ž€¿A㥎Áp·@±qHˆüSÔ‚ˆ]AÇë¹íìþOG·U„ã„¿T[€ÿËþ8)]ÀëÛƒõÅ('¿ž!û‹“ï2?DÖ`ÃüÊ <¢ƒéöýQ1Â?1I§W„À¹ÿ™Óõ9/ÈhýV¢°)]Øà.uü¯è]çøs¹=ÐP#®AÑFqø@©ð‰?裔RJ–2[ù÷“9NܪcÒÒûžÈÔ˪˜%,w£™ÒE"Uܬ§}ÂbiÔ»®õ –I•Ý+“ɳ æRS’sØS)3>Þg:Bgs(õ2YÚŽN¼GIóüG7‡ø‚^\^hNCÎ÷Ÿ:ËâÏ‘•Æd;ˆ.ïÎκÃêž÷:’9ÎõƒŒ„dLŽ|ç|)Ë}r1=4²¾z˜w¶.ž/’÷rW8Åk½M÷žw"@éw\Ti8Ÿß¹û¼Ï¼°$úžx‚?—çyÑ—yŸxV‰ÎÞõr5–3ŸO9ß^Ë)ïOY~ ƒ›Q„ú®“É29šèw{ÌøY,3à·™ÐLè¯Ë§ŸºQû÷áÖ@Cߟ:¾÷UÞJ™ûÎT°£Yy®0ëeâûÕô¤N–r‘ã&—3Ju?OAûZïy³ûÙKš”>¡ûôð”’Œk%p•’SòçK¥H¢jDÏfk#TÊi-I.[ÌÉ£¶É.˜ä#e”þÉήdëò0è;92¬‰ ¬ ZÊÏ&AÍ»;m¶ëÜÎÕHO Jvª×IfñŠç'¼ªá2x,ëzŒ&hÌ×Þ„³ï=)‰é™/vÚÓ—)ÊJ¨©Dw·}ævÙ–jWÀ‰ÞNçö¸Ë¶ñ¹<'§¹™è¥%w,ª•O\ùYå, n+:4–\MDºÖ?~Ðû®IÏ$ä>½¾ˆÃëØoô}î²kuãäº0cÀ+"©)]* ÉŠIM¦sô—"ºIµBè]ÎË¡å$N=åô¥‘èþV”W5í`|¦[à9áíæ-0ÅŒ¦^Jª$ÆéXi!mKS+†P°â%)âÖÞ«¡äÒ£$ÊK±¦7XÆö+S:„ÂÈÎè£ð^0«HòçÀ|Ÿ ßÂ#¶xàXM +iHʬԮF8RsãY2Æs¨ÂzJKF5©Ô¸ŠVX“ðOÍöF† LåF2Éó¹IMž2˜Ïe8š^1¥;[ˆ¬F•–¬¨çX3ÇÇÇÆ8áÅŽ1®8çŽ8â¼o† '`IQ½%ЙðÃrÇŽ_ÈO¹Ìb} >Í%%¿Lø„M ·æú>ªiõ)‡F‹ð®óžg‡Ûù“¯‹ô5OŒ×Ë;¨õà=9àgÏ6|œžH$ý?6ó§ÅOÙðI±†'Á§ØÀŸ#ðÓø÷»¹ntšóMõ<^óá{¡èïžwÛÞyã»ÌA5 ¡ä(s¸–ÚbÈZKG\ƘëÍÇîö¯oÚù §$ÈEt‹Rp¾‘øyx2n|>ÞŸoÉ D™Wè×Ç—à„ÐJÞ×§òvsÒ¹ç©GvyÎújuù·Þ513šEì‡ÎÀKˆÒÇ«Óó{ä^Ôð}¢PŸà<žPL>¢þ¡äÌG}Štß'ÞYNJs~†ýKñxò)¹©S:t¤=’ƒŽ"Þyê‚Nt:ãšNyï;ÀîöÈgA¼ß<óÏ{Õ¸ê{ß®BŸ ç>gwÎö¯E>"WÂã=€NŠ17Y(X '±~¯ÄöwØ OggS[BVXK±–ÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿÿÿÿvvSÁJÑÈøÁ‰ §³âÃÉe)“•>TN¡Âg)ÇñÝù½çžxê“”¥)ô0oÀÙÄžM4V<êz˜BDó{ÄÙÉYUÓØŸ™œ”‡ z[ô>P€A˜é`p©6š #3Ž9Kßŧ€jýUUUÝUWwwuUUUÝÝÝÕuUUÝ×U]UUUÕ×]UõÝWUõ]`Ûø`7½æ1¶Þ0%VkÚØfÛ çŒýûÿúîÀÁcaUZ 3`a€~û6Ì ˜Íç‚Ã ÆØlñæÀó϶cÿØ"¶á›xª>¥õÕW0í‘Ý}J®ºÕÇuݘóÕÁ_%ˈ0ð.ãﯨúލ½‡ßwd`^ò•0Ï7žÞlla°»¶ðÆ{mç‡E-¶lÞñ›f000cc¸ûï@,aì3mí à`a†o=ñÕÖ!Ûß›÷Úß|ýøÜýû÷ß·¿`Ä1,gF«Í¢“Y•J¤Ö‰D±ƒP¨Ø.#ˆÛÿƼQªüÓ³jÍýx´ÓEuÒ·’X¢*6– :®Ð:¬þÛÚÓ\LRÔ™‡„ÀÃ42 Q©®75WblËGŽ– Ã&!ª75¨ª,£P¨]~ q«Á^*q=Ó‰`›žåb8æÁ"ꮫXª» ®®ºæ•Y¦)Å5=ωêH\nk›]F+*³Ü]^*òSšwN'IJ,S˜â£ªÅf+°]“„!^.cŒcçÄáǬKÀÄF1þ(ÅEÄQ‚ÃV*…BìUbþ ÍØ«3 ±UŠ¡Ô€ì£@m6€ì h¼}ãï>ñ£ï÷¼}à>ñ÷zƒïãïï÷€ûÇÞïxûÀh¼}à;/qØÑ÷€€>ñî4 €;£B`"€ûÀ¡ Ðxìc@} >ðxûÀ}ãï÷€÷xÑ÷p >ðxûÇÞ>ð>ñ÷ÇÞ>ñ÷´xûÀ}à>ñ£i÷ϼ B~oŒ~…ød¿6  ´vÐj€   »hÐh×`t}cÁËäŸ$áó? 7áWúþðç_ó®¾ïÿ¡ … >:äc渿]ÿï?_µ5¤kmæ ûýåâôÇD# <®¡ròóè¼Îù/ÿ¯®4H¿åç\ãNÐúFóµ•eþ?,ÖSúÖ€þaÙxzv1ô’w1<#©:æýN‡–ŸÌûvÿz;ûÄk‹Kùeò0B~s5'‹§ ~ÃN׿Ð^F8þÌðÈÍJßÇÿ!<Ñò¹ÐÔÖ\_pb9|Çø§AÑß‹ÿÌñ1½ ÝŽOËÞ|èžþ..!|uÙz—äKÆÛ±o±DÝöz–gªøò¦â0o?ŸÃÿ!ùÏ×ýtbcý÷Ÿ¸ñFF:ðü„þᘃñCù|̾–eñöóžoÇîf^Ycö|?±9r~óÿë£?$ßöz¡È™†Òr6Ëqù¸cò…ÐfyP^ áùüÌxbƒ£¬òÕÔh&vÔ{PnP‡kÕ.DÒºæ}iuñ¶GûCñûGÌï·m¸º1þ;:œ£´?ëÅüG_ˆÇÄ—ÄÝóüI×~“~?!<ßçöQùaá†!ࢾy¯ÎÐ^zŒÍöŽ)9‘Ñ›ðþ6f†öX‹þý2ç1ò…+Âì=)!uÏ=ùÿ¼ïé*ÙÌ!úLxÓ»xþO;ë3J3È@<ê‚—4°Dÿ &?¹‹úý¿ã´žó¯i“û¯Âþ#ç‰\¹¹ úí#ë ÛXvq<ë\ºk_£uκëUIÎïÒ—õðt`]§.L!§]Aÿ!F<¡ wq|5èÁ×Çí#®À»OýãNÛí Vö|B‚'}º€&6‚ýÚq§P_Ïïåî–žœøëˆ]òñ¯ø/=mµf ug]~ÔZfKßÓω'¶Ï9œ}@/Ž¿_ô{þ?°ÉF¸çì»O×Ç\GÒ¼@`†ß ÎÆ´Ž|IÐuÌ…ï?¼Eû/ÁuÿGÇÁ>ÊWÇŸ vy˜]ýŽ?Ì|?9…$Ái¹¾dÎûÛµ,ÎwÈã8ðgòqFÑ3eÍ瘉#ÏÄtþìoµõýÿðž!?)å+õ1ÀËó>ú –âÈQÙ­6Œí'| ƒòÕçÆaÌX†Þ¾¿#xŽuaûà–J •ÿóöêè~}㓼{ñ3Q‹?Ú~GFÐq~óüù¦wœÀÿIJ-ŽÉ0ü—ü¿9̉η€]FÈLÒ 1Çàx¡çÂÿ™r?ïçös̶&=æøü'ùžy€Î‹÷í—‰ùI?©þݧ2…ä¿=ÿ¿ñn^ð1÷xÙ€þýÚY=ð(ÿ®¼‰“YEŸi놦ûÌ^m#g÷,ð#ü¹¼Éçy öçìuñ™϶çÛ9ŒÕ Î!ý«©³8”©ö-¾Ûã(‰ ‰3ÎUgðç·âñ­6 çùʨm‰€ÉBö:í:ƒ¯Å/îe.ŸÔNŽA~´´?Gø÷ûǦ''äžrˆëâ:tçã¾eâ7úÂcoÑþÌÏ- ßÌÌé±ïÄ¢5c“üîÖ|pž¼Þ!ü{KÀtq®º N ±ì GÇ'~ã4Ö¬„#ô8?”3к;öAúø|DFu@¯Gôp_¼ iÓ!úî[Ón¸½.-/ÃøL]H]Nˆ‡;Cþ¨¬MïGß߬(üY©üàŒW' ù©_âà)?…üQÿ¯nÿPþH¦H3ÍÊ}^°Ää~ð@9èçD‹%\8XcÇ`ý®ÿmßÏp±JêŠ(¥SÁ®ââç]wç:êå‡:¼Ž?²ç2YžôtÑžËw·sôBÚ³FWÜþ}ìaùFK9:ætk\ñŒÊ­û®°_³¶~ÆþT~|5ʨÁF¾²}(ˆ—uœW„H¯ ŠÙ·›çE6‰`tsÈβFªRDÔb³ÊM*AD¼ÊC™Ϫ³î|øýL‰–U“GR–DÀËNLÒ #tY'‰œ”żÒñ#Õ\k´Ã‚©Râb²o¿EegÊÏs5Ì{DëŒ-SI…sXSØV¦FZÇIšc%L'VÎk'>F8IA1’'äfeLÚ´éÄ£há±lÙìâöÚ+ÄzøZö³çèÛ±§ìú˜›c#1œ±(±ñz‹ñì±øc3ãµ[Y2×>Òñÿrv‚L¹¢i‰`G|d™p±à^0ïî~âë?ÙþñŸXYÖ_8z³™Z/™#çÃgÍ|'_¿[f»Šž&<4˜u¯\ ý|Êa'.d‡¾œƒS•s_~ýaù„Ëëò®fNkÆŠQ=æß¹3¢Æâ1y9 ”¤ú#-R#êóUYRÔ½N§DTÕq’Á.¡!‘d·Öô—U-$±ª™Ep–3ÚÀœSÚ=Ë£’„ƒœéWŽª¿îæ 2JcŽm9F\u”év‰×g³ÁÎð|gLéÆÀºM$) *y™Yþ+Ÿψ¸°D’ Ê9”ÇœYC¥PÈVžV}fVã.~`‰ü…!“™Pœ…g—ñÔŽg:£ì}œò©´yq:áΰÝIË:íVT¼PM±Ñ‘%dw4´VD”&û[±´Y¨îˆ9,Ÿ²! O'k}¨‘ ãkx§ø´ eYÖq+y  #|S$À±¬YaO )Jšsªœ;a†4¼{ŠÔ•ãÙÎl$W‘ëÈßͨ¿Ô™)d$˜Ó«\œ¨øçF8*'œafµ†С]’Ǽ%"†*X¨Ò¤Êd™8–Tf±F‘a8)Ä„1Gnc/› e»Ú3ÇX3Ä•®ÔÆ8â‘Å)S¨ß¸]J,1fŠHq‡1—u%j˜K 8á@ƒDLÆ4¼P&ªªÎXn›…Й| g#oZ¡&%"ÇïØ.–rÏI×yÓ~~ '¦ÕS#œŸe\pº60VF`º-ŒìJ2W8⌻dio|e`€ñËìýgP>(sÇñÄÊSÂN¿á> Ï*ö1fWÔ«ÖÍþÖ/Îg=åR1’ûõÕ]©{ÙÓ'ÖÏšG÷íÊ,¦»,«©.-=-+¤' u“C]Îx 7C§“Îb›½#¿º*:=°pÉížu‹ÙOLø °’v#&:’¡/¤žÈ\„ÙPÛXS3NÏd"0™lˆ–RÎnûý5ÓÀ™\O ÏW¿£ÅÔôÙá8î÷W/?¥óxÞçàüïÐÛìù= òœžÀÖ2ÓÙ CÉèTôyz#‚ Ãé ÛÑõ=ý<˜´ÓÃä·'‘Ξßü.½¿—îCêýÃXß±Òß''ÍöÔëCâ%>Œ|ÏÌÃâã0pæ|ºðCWCê|D‡Þ/ú£òÈOè§Èêù)ðaægs’&þwÎó¡Èo{ÙðÏÒÎxë|¼ãéÛì/<îóŠû~Ês ÓøÚSËÉÙñäyIOè00àûül?™œœ-áööß°Ãîáÿ~ç³éAW›Ø´øE5‘Oð?§)»G³áÇPà8ê'k<ÞŸ|tÓžz‚>N¡ñ°?É¿ƒµDûœFˆy?«ñ)@ô~#§èhǘg£Ñäèíúr'çÓîóÏ:Ÿ¼ýPîù…ç|#Ü/{õW·™ñ&z<õ>ht'M ÀJ\P}‰ðtäàˆriRJ˜„cÔ/<òÍùçžxëžyæ¼2ð|b|2›û@y3ÉäO"z}Ê-Áì(§©P<7Û¨WçhÔ  ‹Ð8tH4…8: €¥C )Íâ2•27ŠîÀ*bM¶ß}¶Ûo·Ûm¶ßo¾Ûm¶ÛíößmöÛ{m¶Ûï¾ßm@ƒâ¹Ü…Ô—aGEÔ ¹•Ðàé;Í_ý6@ªP!€\—%9Ñï(åDUuPG]B*ª;¸õ@CÑCžÐç¬é°AÃǶ÷™à8îã˜6 ‡˜è ÉáN‚è§§P—K•rîìÏUÜîˆD†ä§È€û¤!0ÏUÁNK!*‹Âªä-© óÄóǦÄ/ŠâØ–˜z“MJÐX˜j Íd]#f9c‰dX/¼Úk3P“CQcƒa¹`8ªÌ¯Œq}VÕ\WTÅ5*¦§…R¢lU(4*45 TDQE¢ê®5Qt\ØŽ 1Q’‹ÍõŒ]UÑŠ‹Ì\Õ]S\ثı+Ž*1^*óN)Èù–%‘bŽ#‘²D6(ÍFJ±UšÌVf»Ù*ÉuÕÍ&œSsÔù–a™®76¦Í¨ÍV+5]Áƒ+«ÅNjôN‡ÄûÖgдGCh8Žc’3FŠ4Uª­f³5Z.Ñ‹G¸ãØÔ*€ Àà>ñ³ï÷€ûÇÞ=À}cðü¼»}ãOggS\BVXL±Líÿÿÿÿÿÿÿÿÿ—ÿÿÿÿÿÿÿï}à>ñ÷¼}à>ðxÐØìv4hûÇÞ4`ûÁ­´xÀhÑÀ Ñ÷¼}ãï÷€ì}à>ðxûÀ}ãïî>ñ >ðŽÀA£ïxûÇÞï÷€ÐkïkçúÞO¸tù€sÕÚ?gàüŸ€"?×ÞéãP€hì;m´nÚÖ´pr÷kï~9ÏÀ8¼_àêξ>ñ×L^_ÓÆøŸÎì¥ ƒ:Ô ‹¡¨¾=1²?žá"4ódýˆ˜æm~ÍüØ/?†R`çí ùÉ™1¬,æñ6/󬎧F=§~? ÿ³3L˜ûG¯¬¢Oñ¬<®|D™ƒäÓl¼›ñuÏ‘ßÓæ<î~™ƒc~ ·ë¯Ž„}º€O㟮Ž-ŸŸ¿É;F<¢ó\>\ht ¨'ÿ?‡%âxƒ²0ü?PsÒåWm, ¿ŽÃþ>°~!¼?{ùwö_¿¦BÿžþS‰ž“½“¶ç¤~WÁ×È <ÙóñxAÏåýý ü:ý}ºž·è '¢¥†±uóÌfNbžÇÉtx}iöQÌG„(·Iéž;yCCn…—:ÏÄþc¨3ÿœ‚Bü ×à@1áÓ qÛ1¡Qƒ÷L˜‹8ƒâ6…”O_Ù(Äwâ#h!äøßèSÐMî'´æP¼óý“÷™QøÖFxßtÍ¥|t" ”^K#¹wöÛ2.·ÓñþþÊ “e'ñ!_y¤ƒÄÛ l™™Ë,ó—äh‰žüî©£$çòÖ›x’Iç_¿ þF&wYíßÇË®ˆá_³ó˜^Qíã?üÛñÈû‹8Ú¼‚1×ûšÁÄH¿ÏožßöCmPfyº™»æ&_Ê'sÊTn¥üüË/;í;e¿PÃà]y€óGO~¾Ëç³?ÎЉþw–@»ðŠ9¤:9Û´ï>9Èþâ8½u¼ÇÚ{;fþ>d¯ìýæ´‰ŒŸæQ—%ùüNäŒü÷Ùùðuñùû<¿³9Ä2Èü8¡…ÔàQ~²ÍfDó9â‰\[¿bVä?êÍý×Q9Ëÿaþþ†|Ä ì~uÚ‹ôyÄ ~óE·"‘§p?hŸH"dó(ÿæ¾O÷ñ9ç΀5¥˜0NéíˆòÁ¼ïžÉý»I˜æ5‡¿cüãÞ/ÆzЉÝxØ9óÛŸÌkMpjУ–s1/Î1ä2:²65§7œGÉùÿ–L8ÌLí¸.ü¡¾?;Q|޼âóŸ<©èŸÄÊ ´þ2ËnN\cWsˆ?~eÞßÍÁñ9n  ƒ¯{ŸØâýÆ<œñ*Š?)ŸÅ#OBž§‹ûú±Ðñø§Ê“ì†`~üä¿ðý gÎ*^q§QNuû‘ÌP)‰ ÏAL?~Ïo[¼:;ŒI,>زêŽ]UiÚ\9þÒýÊý¯ƒ“ûòÏyJ¥RYk&A'3Lþå*)h°ŸÉt÷49÷XPüùa1»ÂçH}fú²$¶§Ê©ÈjA+\¢Wñ(pf§‹*cUhsUÚa9ýÌ̪žœ¸„¬ÔËyÕV¨ÆÜØJ@Š4â7­²k/3™K4¬üzQÍí‡5Õ“:=ZéJÆ© :ΤPvõ-¹ÒµÝI£NüÊ~sîr³³™ÑUëc)ËNã%Óó_¬‰ØÒÃúX?aL¨FÖï)-)'À"=Œ-=TLôÛsÓrÉ+l,.jÊp{àBŽç¾’Ýçe«(߉«-ò¶ ;÷GDO€1$ô,zN¡LñgõxÖ³çVGšœLbüÂàöb˜àÍþ7º83–8¤†)O0a‚Öã„g‘‡HXYÔ‰”Ì”˜9ZÎëÐv””sN}J©ž»ÔÆVÀ$¥ò$6,ñ_¬%‹ÉÃ8¸™fáØÂ’&QÙ,8AœçªŒPœcU¤ÏâÃiÇF¸O,™SR£*<ÁxÁÏÆVãã<0ŒQ†IÅ,ðÁž¨¸Ï¾2B…*8©X¨Íhã¬cI*5rw¬ O½œ£¢|bó< ¨Ø2×9àÞ pÉ팾8â»ÄÙá#ή*±–©Q)/$ø˰…H<"(cF“„g±2"¶°""LÑHœŽ>šøñŽ'‹®v3èñV¼øœõ|/Qø} Íöù<3ÁünÏgÄìùŸ#„o/`£‚öáÓà/èÓ’¡L¿ç³³·üù9?&‰áÑZ Óî›™õìø¶ýEúŸmУÌ!û0ø‰§ÀëXŸ3«ñt…!)Ùßse4òxœ>‡?c|ÇìâFiå@ñ;XÎßbCû+ÛäF¾ûÌ·ÎùoöùßO‹æù:ùÍÏ\çä(A:;>מ~<öÃæ}H”ðÃÃËáŸPô°Â4øŽ|«ÔÏ¡<GÁtÏŠgÝàûÚÞú)×<Òy»ã1zçÍæøëšóÏ?ÉÈ€:~l%<´íºü|OG‘+¦'ù\œAú³Áõûšü£ò|OgØï— > €|ßy×=‘èèö|Fò9Ï=Hs|¦|o"„=ÊØ‹æöÀìHs;ñD.ªšê<”OɨpÇìUÕŸ1pö -(û<švz4èÃxEæŽù<›0ä€vG8¥–¯D:‰è°„gÑø½‘Jkì§e;~…I{< Åt†5„9‹¨c‹ìå5XAY)Êg½BÂrBM¶Ûm÷Ûm·ßm¾Ûm÷ßo¶Ûm¶Ûm·ÛoQß/%«€8ºW8×r]J‡@»¡Gz!ç»Èbi (+¸ò ÷½㜎S¹#¸ÅWºœrº\t)Áè€Ð.ç„3"{ÆÍ±¹Pƒœ =Ž(îS„¨Š Ù+“‰%ȪJ@ú cÍ.K¤ Ô… ÜÃÔ Šç"zäI;‡—qï¶ÛÞ¿ÿvý1M–1¶†-kh®)i2Ó ”0Y¢ ˆj£a².8ç µViR]$ ÃTƪÿ«=Bȸâ7]‰³F(¹c‹ê¾-Tšê¦©©áPªj 45UEUQaº¬uáUUWU| ª©`W Ž Á^JñN(¸äŽ&Å¢èÉ£·WŠÜÕä§59'ä|JárIJ ‡0Äq6(ÍFJ²F 1]esn*ñStæ|O™b‰9ÍF(ÍVj1Yu×WÁ^ŠsSý9–…˜fe˜jŒÑª3Qª¬Öf‘H¤Þ1‡Ìù 0B3  € =ÅvÑï>÷o¼v>ñ÷¼}ãï¸4}ãï>ñ÷¼}ãG½í÷ŽÇÞ>ðx÷÷¼}à>aî;ï=ÇÞ4}á@¼k@±÷€ûÚ÷¨}à>ðxûÀ}ãïãGÞ>ðxûÀ}ãïá>ðx¼ûÇÞ×°÷Çà—[<ø½ŸãÉø?×à¾úžÎР€ ´h Û@Ð{ vù¨ü Ÿ#ðæx¹~Œ~ìèc‡\„t_"øçní·æïGÁ¼ì"ÿσô_¤±ÅÄ‹Ž^´Æ‘¥ÈF†™—êuЈßo÷ô(ÀÄ~‰¿}¾û똜ÄñE¡Çä®Oö‚ÆH‚ÿyí72 ‚wR¦y|‰þ ŽHÏéžI}±È—çSæÎ3·Êv]s¡Yñ–Y?H³Ïÿ€í ~å2Ó‹ ÙOާXv:æwòüµ”Íý™Û¯¬'ì‹úýO¤ L}¾ÔÞuÍV7øÜ]HRÃÐ[Ñcž>E,D3T<åÍ£¿³«ø^{ÿ_Š_üà]@tý7'øÌÍým|‡ôB¢+£¸ã‚Ì^më°¿„NÿÐú@þÿýü©~ÏŸö†À)~G mÎÜÇê¹üŒù›û­å@ÐËÙó&ÉÊ5h¿µç“¯Mï¯]&ôÍ t¾€Ç¡”Cç—Ž„|åùÿ´îcĨŸç¿¦1ûú²ø÷Ðß#ù¿uìâ•×”¼À1¾Ü^CÄíÈ=¹eÏòžpÇ'X`Bûs¦7ÆJœò”e¾Ô°ùΰó YB&ÝŸ¬ÉÇïç|ÿä}¼rÉQ&GF8·R} Ì_(ÖT ÿüö?úÓz;FÚ»y©?ùäÆÛ˜ÝåÖË¥™PÒ7`‚ ÌçÀ„c´æ90¹ÏK ºùˆø üxŽ.Íô°’øÀòôèÓüÁ²êÿQõ–s8ÙènÏüA‚ aø¡þ?“$HþÌrR#³´L?fOïо/?0q®h]O¼þ²È¿Í擼øøÿX^_=GFÊ7ßù_iòGiÙˆbùÜ?žÌÍ‘OggS]BVXMÎ\!pÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿüå̲7Û9Bñ˜?>>c~sï$}ƒëK9 #ίŸI‡DíB‰óçß(Ô‰(ÐóGòξAëM‡ülýöÌ~ÉüÅþènÇïÍçZ.› #ˆÞb"f2³ŠqÏ—,á¶oæ»)ôqÅ¿¬G’Gæ}?_ž5„ÿ¸Ïã>ÉÄ!óØÖVgÅä6‹{;çyq; ùì²kÚkÅußÝ€'Í!ˆÛxûQÚ$>ÓÓ'æçœþyæÞ§ zضÍ÷ؾû!H}çv>Áòãû7ölíþÓ äŒ¸.º‘? ‡áÈ£´¦Œ±Ì·Äˆ~m=ýÁ? {ØcÁ–yœÎ"Nδûdq¼ÏÈ̤ üpfHþe Ò/ˆ[aùø¼Â˜6äý¿eý<Ž?ˆË8^xÆ­ý6XFP(ÞyÔЉ¯þÖk ¾ùfn§yF:ö}‘ŽƒåÀ£¶„`"wáÜÏàÌžS¢Y³©‰ëi£©¹@±vu‡$ÖyÎK3¶ê©^P·y2Bê¼÷ðü¸îgiÜç~›dd˜D–9fZªQLxù#7·ž€: ZÃ%„CO‚aŠ4úiãD~Žå‡â õ‡¦°¬+*Pþ^cÛþóÔÌõ ô<¿^q‘~p£Ð~(Ž/ÜèQÐüh?b* â"êsñ ÷ö‰ñ/ßà±$”c?®rÞ'9м¯Œú0©{IJö˪`@²áDÓB  ÃΕÊQã çÀ)Žò?é¥c„KùBÛ“úÀŠ}$¡  ¼X¸»Çëô{q‘r[²8ñÇî./ЃöaH„.u<_‹¡w:ÓbÑÐv=u"çQÇ’;ˆ;ø@»ùÏ×E»ƒÐ¸¦|¿ø Aò4ò#¡àÞ#CÄkxàí(-V­,?'ka‘ukŸxÉjϲBŒÑJQBŽ|ÃæSòŠE0t¦VWÍß^Ü·Šb« Ë K4‰á×3—f¿R9œ'>³AmU$ëÎoâ5|G爠¯â5üFLjýñ^+9J0,¾vøHú\ø–æcC-F™Ó¶ òÇö>Ƨ) ™ä™/áÛe¤ç#4TÍœ­*„¥™¬¹¼°ÅP O”—ø¿ßâ;´¾èýÏš±œ–2ÇXÖ3“©)j³ýC-sº¡5šaИ-LèþûÂtOÎU2ž¬ìÎ|áa6¬åƒZD ˆ&¨ÆˆÉolê,íüºì~–×À~0(OqèäÊçBúhñ!Î"e•šúy-p|)FŸ…jkR*…¡)yéa)2RWsæ|å?e—«V¢?j{ûòѰ"k$£ÂO”Ín„«*£)u«œŸ‹"ucÈAæ­d Ìø7¿nJ1<µ‘3Dn? hÔ%Š=(”žAIÊóðÍñó¼ê÷ç ™c,1ñß0”ÎÌg:b£R˜M92§¶²]5ñ"t¥‹ £ll° 0ÇÇîg†ô…œ³ó½y^®“ýضÞ~Kº¦`¶2¨Û'Tïš=˜ML™t³u%š‘ƒ‰bé ¶ygt«fϥ¤ºj}TÔajpa,g'4!,VXQñý`±Â1K åOL©–N}`ìÛLitÇ›gñ–cŒ-Á–>(Õ9ÏÈcL)LñJ–;ÆRSÌbc3)ú)yæÕïß±£3ãv-^Bò ?®|MÁÂäðøÞ$Ê`»ÄµË>Ùs]Æ|3³R,YÊIv4²øÃŽâÕj¼jhÙðô’ìgç”áqmâ³l^7CcÝ´eõäEmS2Q@žæ˜ÏNnZmé´ì‘2Š­‹h˜ŸoñŒÄ·oé|g1‹¹DÛ3ÅLe#%÷tû·n—âëÖ’ÞNka=Õ;œð8¸œCž33eS™šþ°‡ßÛÚ-Ûzw¦9@pÉíó?é3˜ƒ·® ®„˜éäsrzg‹œñœNFúò“Q(á‰Ë18Dù½d—g„ëœïçòró6sÖu{Á ãü |wÊßÀò|ŽOˆ¿IËö:Ÿ3³êv|ß—gwÙ£~‡Ì×êa@®Ç×–Ÿ‘)bxÅ'ÝÛ¯‰¿Dôlm;ò½œ÷+‘ãêC)1‘ÛþŸÑÜ…?'‡èaù<Sسòùßëîü'8žjmÿ!Þø;üŽyÐì-ÄÔ~›¡éϯ=éù|ÏëÇ»Óì@Ý{ø8£ãÙðÖœy×c/»×\÷Îsë8ëžyòäðx)ñ;og“Ä8:П_g¹ï:²ðÉWµ{+ÑñÁìø†z:ò|‹Ï<Ï@Ã÷³×<óצ{}½Åâ{)ÚÙòœ©é'5:P– :?FÎNˆ–$d©n®’MaÛù=Êá4êò{·à<"ˆTNÊì¬i^Tð€Ò”ò¦ŸÅ'4zçÎçÞyçCžy…ÄNŽˆp'2¯$½˜Câ yGÉÅ>¢yÛä4,äOG…‚›;_ó;}¾Õí‡e;)Ùè….”QËÓÑ/Äû=õžó£ÇSxVî»»»»»º“?À•€"QíYŠ´„[* ˆ}òe.EäDÚJ b䪱P¥M-Kb"›ÍPY °÷¯ùöðÁˆ4CЭŸ|‰$Ì}óìGUd¬H‡È! VB°‰ki&e§ÒŸ"AUSRZ-‰>÷Àê÷ž÷«Ù{ËÞ£=꽞ñè+Þ=ô_w_ÿí÷ÿÿÀÃN#‰­5µ}Zøµ«‹b˜–rì \A%š Ahˆ¢*k"㮌‡¾‹Uj˜§ùø]9@ L4CPj›"îÛ†ÁŸhY#46¼1|_Uq}ÑLST‡3CÀ¨B¨TjТРAЍ².£ÁF*±EæypÝ^ 65WU‚1QŽÂ •Tˆ¨Ü× Ób¯Ì.¦åˆàY(ÉF*±]Š»©É8©Äø–'È1C1ÈØ4tQíF*3UáVK®» UªqSšq>!ªs>!‰f†#Àa·6#’3QŠŒÕf³Ù0qàÅ_:'Cæ}1Ð56¨Ð•ªÍfk³] Šnœ×ŒàfY· …X£QŠÌÒ8ÅYªU @Ð}à>ðxûÀ}ãï>ðxûÀ}ê¼}ãï£íxÐ{_xì}à>ðx¼Þ>æ€>ñ£ïxûÀv?;OÁø ‰.Cì~Àø.Žs‰Š×¹vÐk± >ðkE}ŒGÜüðÑ~ oÀ/8Ü\ìãhöÍâù ë¼£óZXô”f9<ŽCö<íÿ¥?µ‡óΦlG:ìN²¶&d:ŒîùghþvÚ6D(üêÂþ¹rCü>ƒÁüçÙµ¯æff%ýá3*~µƒò9—üùfÍi²¬x<©ÞO·Ç3ï³ðýü˜€_Ï‚YOK*|‘­@`‚ß)ý÷êKúä"|LÄ1×ÀŒ{ÿÛ5¶Oï–sÍ”m'~R’<í²?ß´)6‰d:g® ?ØûfÁñÑûó#ùË¿µ¦òü?~~A _×ãû9€Qù¶ÏáŠ;íçse+í1€#mççaž%þÎO^IÍÿ–KËñ?YúgÔáùˆÚ³1B2òÁºÒ}ç!9ñï,ä™íÌ||GŸÍÀ’GÔ¢1÷ÕçÚe–A<&~°_ÈNç‹É\›WGDÆÌñk"|yÖ›G‰ðsœø±i+üŸ“»O=ý1ö†"7¤ ý ŒÏŸÙÌíöL‹ñA‰ïÌæÿŸ!bÙ’rDµ~xà?ã„-¾ÌëI€üá1ˆ¡ÄßähZ~ƒãÿ!¼£íþïìÖ²?³f²äsîxŸ´ Dðúùûm³¶hÅ wÑÙÓÄ?³ùJü×*‹à:…Ð4ž| ®¼^câ °9ë‚/è¼/•ÖËÞè ¼v'ñu ±¹òm–øs'®¥|ð2Å¿)Fñ&ÁOÅ‚0|€Äy0v¿›ûù¶?œ{,äî¼z곿@ÌÄí¾ßýhþ”Î ÎÇç‡+ü¦;Ÿa§’gÆÛÌ#‘ï‰\Á|(i+h³-欰.iןÆyeGSs4J6~¿âJAžìtNAãt}Á…3%ûq†X7Úµ 2zÛŸ+"`ç6ÛpÞmûI­7cýÙ3cœGñ²ÿ‹ï*|J¼Îð¢øFh̼Ràü¹C}O–«¾Ñ·¹äËhœâ'=ÄE[Àc3rþ ó”#kg|¹*k|òÿ÷ø9áÄ×sÇ,†%KÎ[úÓrvÝ–:ø9Y©x42\ù“Yøߟæ7™<B¬'üò^Q÷&31~&h Œ·¡ÕŠ;29{3<0?·~?8¹yÑ<ó㕳çcµÿÏ•ÿ[Ëcþéh)Øß°}à$çÜÉŸXKúq=Š'2P£$1‘=™b!‹ªŽÂߘöI»û±¶ó‹³x¶Ë²l\²<íø¨ìm”JŽŸÐKðÛðÌÊÞ`ËøcøÝý1²Û‡PO;ÿÍçcÿFv¿Š?T7Œ¸o|î¥uû}ØÓZV'óˆoÅøÐRýqB øŠV!(ÄãqÃ÷À\ýƒøc„Ø@‹æ˜·Cž™°B“þÇD®8wö£ CŸƒò;ˆG%A(X/ç-ÈÅø«!aÅТŽy…„Q’þzðçP º9ÅëÂ-‰Ð?–Žˆ<„PŠEä¬;úÛõ‚£®à!©áh?DÔùáÁÀþŸ‡¦’–C¯%&‰Åÿ£Á*V‡úN‰èÿô!4hÄŸž.çöXèþŽ„{ Û‹‹®rÀs -ý‡Ñ „yc‚êI˜ÅÅûÆ"ãü1ïÂc®!ø¹¦zÂ\6/ÿ~ëpGèÃöÓÅà^LÍϼYÊCœŸÉiŠ–_SØ+œï(¡À§4)Cí®ÐË_©‰UÀº}s>ÝO|ï܃ðâÓ‘Ôæ“ÏÌŸe‚XöË5:zÕsYϯcÂS Üy.ò|Ÿ-Χ¢K ]Ti8:P®D£Ì;:u39ûD»oÉMT픿ºë?ÊNsÌÞ¥ Ò PËœîùÌÔ’ÉL¨ÀåË”Æ8|Ïã-žï;uhˆ>kÁ¼Áœæ,¾ë_±4͈ˢXX0è1âŒ2ñŠÏšûÔσ¼ká:—ßÁg98OØÃÊôÑ> ψï(‚Œûüí¼ìcÈÅXK<::Ê£ «öx–?IOggS^BVXNŽòCÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒy+Æß™»ãüeÖis;8í}œÏÓÌ_«k³ptµ9˜Æ¤H_Q\Œ¥uVsÊÛk/Bs‘DoHM(êQdDð~?)…)u~Ê÷ÎL•Gƒ £°93±„åÈÙiï<Û\¥$¥õ$Ý2ÏBt‡©š×Æ)Ž]Pâ S§™–fŸ3SY\¯dûó䊧ଖeßTX=Šür>‰`QIéú'RK‘ô©kŒß*J“%ÞJ$äaY•ÏyY‘9ýç%JWNÕˆ$+7é,èMW~‚˜Iì>éÝê7°”9g4k5U:çÎ8•žL™ ü‹’!]—gL«¥“{ÿKÁÂ,,Ô¯ÇçsÀçÅ3†áxR ƒÀV+ÀÚ´-¤ fË–) )'bó)@Y¤ˆ(f)7¶W"OY?òKœ²gR`z 1ïØ©tiIcœç$Lö3º„BÆtŠ3'4’¬ê–vÓÇÆ8øÇã [³,Œ&ëÆqÜ}qaSš×(²‘Ýz:”],ç:)!„g²)*soµEMÖ®¼­™ú/>09úu³4OE†C”¶'ˆº¦£,c7*˜TʬG$*Ït±ajà V]`Ï &1šf£³2 }R=-‘¢ÉJa9¦NÎto3AÒ$³¦RK ’uøl*]tðm±Ï†“·41#‘¦á§6œ;?˜Î—0sû±Þzü·wDÛ:cÓžœôÇ`³|@pÉíËÚAì“Ξøí¶‹DA$‚‰’È'm)&[—ŒÉÂx8)å룛‚¢ ¦¹Z¥Y |Þ(Ž"I)|)¼Úߘú›Ìç«Ýî?ïÀ ð~^;ã“ðVx;*°ûP>b}Ü}àiTß x_Ú½6q93’r}ŽÏìùÎo£â}±Ÿ4ÌK¿Ÿz‘(ÃOÈhë‰çå0€3FzèúÄ9ùÇyš.ÀDÿžÏ ?Ù„~¨ø/{ãzkÚˆÄøg§Žâ­¡«Îy êrröë¼ß9œØ}·èýÐâO‰ôövy>8÷2f¨$o™áé'ƒ¿åÂgÄì7ÄòWÈohjï·½ó{Àñò"tÁ~míòx§ÄOáÙÂÝòñ)préœÏLyÞ÷i©sÍö§laŠå°òü'<ö{©äÊg5|Þ¨xS² NϳÞö·¢·çN]aòë¨Äœ ¦m)úŸÉ7¦pCz>ªv§“Ñ쥈d¢ÓBOÁȘtÀO'´t€“æyÑçž!œïyÞ!½``uÏU—âiîSØ ¢„Þ•áÀ‡ÑXrbr|O蓈ÓòyJ<-8g"ö¯W¢£ | Ôg'î£Od‰VCDÓ_Uó0¡‘¡<ÎpoIÂcð ¶Ûm·Ûm¶ÛmiÛs7lÙ›{dþ"î:¸ùp @]wn¤SŽäb:#êr"÷Ñ@é!R‰QQ\AÔ΀WÁrœ§8G½¯=ï{Îñ燪ááïL>SœƒäJ€¹¢ ê·¾òˆU%B‚Ü+÷ÙïSŽ‘rä W)U BooY—Š]ï/zâñ½R¨{Õï}{Óz¿‡ÿÿ ªûªê±œ´_›XèÃuô_Uu[UtSDÔªš¨²ŒUUÕYu—]–Œu_~W›j·º¹¦é©îY•FÅ€\`ÜÌÕQuQa²ìÊ묊ŽXËvz°Ù]×ÝmÕÝM“r©\¬8Ít]V ®²ì]v3|åÁnlø1àÊhбUƒ%‰\q,ËÀ3Sv=XtW¢½S¢u-@Ð3 ª4Q¢íUhÃÅ~ëu[šßêMz©ÍN©ÔùŸRÌ56¨ÕVª5_Í~«uW²ÕêO¹q-ƒrÔ5GaÜÚ£eªÕ~ªõSªÕì[Ÿ`ܶ‹tjm‘Å£eZ¨ÙVâ1ŠôXw ÀèA 18Çø€4Þ>ð{A÷¼}íÞ>ñ÷¼hûÀ`ûÇÞ×ÞïxûÇcïxûÇÞ>ñ÷µ÷¼hÐkï }ãÜv=Æ€¼{ŽÇ`±÷€ûÇÞï5÷€ûÀ}à>ñ÷ŽÇÞï÷€ûÇÞ׸ûÀh†¼cïxì~Ÿ€›ðvû€|óYø,?7S§ƒë~ ò5êò‘ 4Ø5­`(Öp{ƒ@h4ž¯‚€”ŠÉ'àØü)Áu®ß>pq¯÷ð0^#ÞvÍÉÜ:ž…òÙüç8ΰBh¿B×0»ñùΠO æ6·1i£nM‚ø&g ~9s#‡Oé]yáÃh^Ãnssã–ÇÊ™X[nG0/¬2ù̯ |ºýk,Ÿ þ'ý­Ö#lucÊ2ÌCòK‡ä.lËÜÌöm¸üQ~þ™ß“?¡ÃtFªÎg NYe¬‡÷óGhm­ ¿ÏÎy¼ÏäÏòƒãÆi!sœSÔwöÌÌíϧÑßl ¤›sªƒ ÎC?Æ5PýŸ¨ü7⌬BƒÉßäÚ"­‘ßñš~ÆklNËë‹o gãóüþFKhóÈGÄ øy3?_æeáüQØ €DqX¸ë…™?~\úÉ|ŸÇÈÏ’ ž9?,¿Ç8¼ärñNH8FÜë<ò•Ìï錇÷œºcø’‘ΰ[#qOŽKÏ“0¦ Üä³Cäü9挙 @Ÿƒÿ¿rh&:Ýú49áVú—ñ;ˆÛñG%~uÃÌüáýº ã„òÃ/y>|þ[îfty ÁÑØfz< Ï1+…Œož´ÿ/õ5vܾh…¢ Fá’x@~?cí·ÛrŒÿ;±º£èFÓBŠb1>w]&ß. Ÿ|`AÖ° ì³Ë; pØÚQ–Ó;ú0mëa¸ëžêÀ:cÑ ßýýæÝ¬³Bë—ðu-Ï7€´æÏÃÌ5ÿ¿Ž+2~ð˜œñç?³!tsüP"8àÊ6S'çpÊ qÁüGÌâÜà4è'‡_ ‹âà¾Ìi_uÅ*}ha+¡ÌFp ñx~¾ÓƒÂ˜Ñ(]Ax¿^†ŸøÜ?3\6~|yÜBf‡>QžP³3кñÍ¢EñÿR5†²ç-¶ÚgUdGçðŸÏòß´•—ÚÑþü~? òûŃ<ÅÁ’ßhçË/ƒÇLl”ÎüÜýŒ§<òœ·aüfNóüSúüô€ÕÕÔë/ùüpÁ툘ْfB9ÅøžOÈËÎóžY¿²‚f…ñægÑž §Ç26ò|¿]yÈ‘—á—ÿ=°Äî?#=ä2Ì þc}¾®Ìo¶&6ã/=}À>{ÆFl2_À\~ÉÌë!žâ—õ|…÷ò_%ýæ ?*†¬‡›Éû$cËú`Î6€ãû>R?ÿ:1ºbgh^w,üŒº‰^ŠˆGSaì,É uÝ'c‹óîY<™îÌ®ßJ“®"PFöâ2à :û O–VJLrÅ—˜æá–_h†:ú½Go&>#ÿ»2¡o”H#lr]‡Ò2íxƒ‹eKi¯EáëP¶8ÃØ…ב€îl}‡ë‹Õäö:6µ!výŸÅ߈´Å¥ƒØÎhb[Ã'`â=¥ö8á×ëüfEÔÐc(TsÁ逓ù^GœCùž‰ˆÇ)-ÓYaü÷Êc;©‚ ·ù[Ç\î('À.„<üÞk/Á:롽ÜëÐáhA?èâÍá䯲ÞÂ'à±ß÷Êèêÿ^XŽr?üð‡à.[ÛŒð„0a¡Ž";Ç8KEÑC`üÿÊ:¤ yh¦=1Cslx»º¦—ÃücË8Ç‰Š³ïÞŸB ¶1Zï eÅ›n d:ã¼ÝeÝêS “YGì“ôwã)ÕG&xÁ£Gx‘dаJ/ùÖ)ž¤ÏMTÆU÷#ÃçÅ—_;£ôæR—Îj˜%¯¨êyú¾–)L™Iæ‡rd”JúÂy—X‡*GµTº«Àî;Ü^kíM‚k'Ò«áaZ{ÉR÷ÉÏÌþòΞÊY¸¤Íªø×Œ fßÛ}{¢Ê”½0H“,rá†ñsër]¶Ï=Çb0#‰(ç°·ôd¹ÍvŠL“  “<™ü(K¯šC-V±Ñ!aŸsëå‡Ô KñBGHàî_´ekÙJ0I£Jæ},%ÌZøÏÁ|!å\C&¦g„Æj3ú~ XÏŒ¾ÉÏà+˜¨Ù ƒá=YÊ”οF†0çK5_˜£`QŠ6i1V,d,ΈGŒ&©ŠOd“ ¯Ó‡Úû«!`Ê|eõ…#Ÿäps)”V[(>²Y^Ä”ïuvCÊz¥ï­r—u„ÝÊË)Îˤ¸ÏvíöÙºÈçVb‰%ô_š]ís«˜IïLkôeÂÍsŸ»<΄£Ær‰*‚åQH® Ïà?J[~`O&’ Wtï¿È+S³¤9jwÈHL|ç8™H1…QK•¯#¿(NC‘1êbsë"“.1"¸J‘ ®Ë)ýøÆ?c?ÃígÖhRýõ%!,9ó÷iŠÍu¬?}!o¯ 1,[ׇú÷p;çx Ãd–äH$_;“È¿öL‚mgÀ~Ç…™ë@œm[A:ûd¯5«Î–[¨)QBï€AE`‰G œ—qÅ(&¥Ûz—3‹¬ê2˜Ó .q*1$J}Ž·a)ØNOŽ,Hà‹5«&F0‘2OŒ0KÅG¬ñœ0¦ëIT¨ÎuTLɪd¥u<˜ÂJÔöD“/’t™SÃx—ß?O“ÏŒ…VI(ÌÔÒɧ.)ê*¤©g'¬h¬3Z­Q,+Þë ñ+ÆXà±°Z® åF˜FRŠ7WC‚~2ÊdN6ÑΙâΑI‹RÁ –v±—úýìz=‡÷oà%$cÂs1Œ‰–5ß»jŒ,'‰F9WŽy|=eÞ åŽ},ŠgÆ_m+\ìiÅËçOBòUÎRçŠ-Vø —j¶7¶5çmŒÿ~§ÈäUU<Îf£ZëáŒùÝU§Õ#¿ÖñS©å$Îcãg¤ú%ï,izJby/²µ¡Ï Aòz\€2OggS`BVXO1òqwÿÿÿÿÿÿÿÿÿÿÿÿÿÿ1ÿÿŽ[ÐpÉí[;½ÕqË‹f»–»xÒA€B 35‚É"È#NòÒa"q:Û&äˆ€ŠŒêqÉ­1׫'Ï󸊓ÂFóŸ˜ú\ñ9ê÷Gà:}¿;í×£É?‡ú<c!Õø>AüB¡Éø2'ÐÄÑ„D§ÕìòVœ)ì@_åOذg`€Pç£à³—Ü`lgD{~Ô„é‡T{~‡\ùADÓ·®ÀäúŸ*ï`q ×âtp¢&´Ås¯À„Õc¯—Ñ'[û ñ†iÁ‡D5sÃèûGÉñ ääîz4ýµ7Ÿ/Âø}_wû;ÐôÞMažKÀ{œè>®sÇÈ '&<¯ÀðyÒöõO"5.lNÃBð]Ä C°[ËHÛÍ¿ ÃwÈÀçÛú‹Ð¡ÊgOºœïÀ÷<ç<ò‚~£=€ô(¤‰¡Àîô{>yÞÏ$L¨÷‰ #dC±[4¸ìçu‰àQ>¢{b\òÄòÃIútO‹_q$„ ‹ŽCX:ýJ§ÄO!íú‰ÈRoz¸a{Ð¥Ø)ÂÎúÞ«¼>OÈ”ìèÂ!äƒ8“ o/“èk©¯Àö‡³(`½Ÿ¤W±4€Œ¦ª|§D¥|M<$é/OÛ˜Á®¼ÀÀ©g®¼ŽehPåøp›€¶SFã‚{›m¶Û}öß}·ßmöÛm÷Ûï¶Ûo¾ÛO¶Öë]ó³ß;lÛííµð*ïªwªë¡' ¹Ô8‚]áP…x‚H>•à@è£ÜCÐ! EÈ8‚!Ð"ˆE+¹ÐyUž<áïø ÞõËçÛlÃ|6:ƒÀï¾{aïxgÞlÚU¸„©ÓH!wUŸ|ûï¾óÏmïS®¤…‰BäE€m·‡žÕ EI:»F °nÏyïz$ñïsÞCÀHÙëÆ  ÇxúBãà „n77ž¼ímÙãaªø½­Šì®)‰g„S(0 ÕDDTÕE•\q+£=WÆSŒa7ŦµJ¦§…ÁQ¢ êÁuµeŒtaªú-ªº&Šjz•FƒTPbЍЍªª¬º¬cÙêÊbʬÇDÕ6=Êǹ\nÇ«>¬y/É~*ñW’œTèX§"ȳ,C1ÍŽC‰²6hÉVlñ¢ûÀ}áïxè}ãÞï ûÀ}í}ãï~}ãï÷€ûÆ»}ãïkïx¼v>ð|ϼ}íÞ4Þ@{£@v;÷€ûGÞ>ö¾ðx×o¼}à>ñ÷€ûÇcÜ~(Ñ÷¼}ãGÞïxûÀhÐZx5£°xÑ÷½m{þÀõ±Ê> øOÀÕö¿gà^ƽÔö~m𳇴Ð>ð®Á®À4  h Ð¸¤áô¿ ø #‡á¼ú[ð6}™ß؆½|| üèÀ`F?jvž™ËÓ!tXnÅæ²ÙGW6d]ßíaå\ÿYk-irÂÏsï+µýkkùt mË®z†‚eV7'h 8|—|1û ‚·["?F°HRØAã—Îûs=Øüßiëtþ~ÿ;x<,ͺŽG@¼NȯóÃøŸã?Š6Ö_öŽõ‘y„kçy˜˜”Â3¯·ÇSÿ-aùñö²ê7ûßXNgÏû'fDG‘™B&Íeeìó9Óó1ާö{øÇž¿#†ûo´æyƒ&ù‰áþ7ì±Ï¨Ÿ­˜~‚pü•ø{Áº0ïƒ)þxþ~dþˆ~m í­çÖFPtêž³ñПܜƒ.bÙä-pb{BN£mß›¢'XÌåŸ=IÕ±˜gét#ªýù–hýKû3‚ÛyzÌá»ðùçÿëÒ 3~ÿH9• ,Š@(ûüúèDÇ?Ï%Ð¥û¾²áÅù±za VÍý¬ŸÊ@jŸï©×:ÚqÏîGè…ÖÑÅÄLhcU0+gu3–kÿ?>Ào‰ôHDãyç_õg'ù#rB'ÿ•°§ŸÏƒ/1ÿûQÑ3óAÑ Zpƒ¿è‰0 ! ýŸöÊâòŸÑ?-a?¿7_eDÊo#}¹µ ~qyQÑ0­ü83*˜8ÏDõi6Þ¼­ö‰]kÑö-=«¸ÆüzÚƒÝÜ_±H(åzX{Ý?ô^©ðt~öIÿ‚Y ·¾‰Ä¯ù×A×ë,‘õã–#í?hP…c÷Ÿå+›íô BÜAð À#ô/ñ`Ÿ™Ìx÷õÅ<Û!ù<6ðüÜBæ=ù õÚIÈ$Ç_äŽàGÈ0`i+éÔ/×N4–]+õï×ÂÌ;O+£1~Fìêrc=¡møx?/‘ù¶êWð§zû2ëó¢wñ1'?ùY€ùãï?ylÏÖ[o; ZñÈŽ£hïï¢Ý¶…Ô.tÆ:ñÔàÜÜÏËûóÒ<ù0ÅŸ°~‘·GäÛõAã'ñÆŸà_¯ŽÞý:—GâóÓÄÒF~YFô8]Fô1× íS@2oø¾Ü™dÛŒ®ÎÌГ‘(©ÜÞw¯ç¿Ÿó/Î?¬ÞIˆ;øe“ûmÁOTECrÖ~øÍ¨tQûPó·µncÈDIƒðþ)õ™Á˯ÁGOÌŒ§£Á¼ù øüŒ¶Ž €Ä.Ž„Ç%&T#Ãø~³ß¦yÃö\pBèùpž˜ýd¢%D}öb Ò¿]DÇží¸bK5ßÞs~“ä]¡ˆßS¿¿$‰Š&L²%¬¨˜?¸ÊûsfK!‹âu„¿¸ó“™e ?w“~®'ç†ft?¾BÛ®¡Qµ~þʋĮۨ\Rƒ˜ëóV6ì6œŸˆjÄ?G_®¼£¶ÿŠ(ÿ”çBöŽuíBý[‚ùèSäÇAº Oãmº!ý1sZqž Vâ1Å6è\‡Ñ<|^¡üt ÷•Çöîý“òjw“K™ E[ØÁÇè]LÛ¥ùaCuîñÈøqu#‹Œå¿Gî1ÇøÍ…úÀ†½¿$]G°?EºˆÍ<&9Þ|óÊèü=9õh]S%0ÜÇAG(¢°šhqa é(T†i·]Cï-y˜áÈ”wï WüŽ`Myqêžüðg¯…0V|ù¯¦yÔ/Â1pz„PüƒŸžÝàý°ö¬¨à†FAî.B_¡ÎŽB°KÿýÞbèýu=ñ:üÀ•"„t"æ¿þïÛÓ°çÎsšýÜë‘#Ι9šûõt,×9ÎUJÏ-OîçEq–LÒ{þ¹ºPt×É?Acõ5Cê9,y¯ÅÎRüþ¡B.Q“!Às¯£‘Œ™L>`s5]ýPã ¬ üdX&\ZÊ9†v%TýQbˆZÈóÕc+pµ—O¡Lfº”÷SŸ8L垢“õY4LÔŸÚYЩÁtçÄNëŒf³•3.£É,6ÚŽÇï¿7‘´„+€Øó©©úĦoŠ•~aƒ²õpd‘ùQ]úY;7FU¥>3#ç%Ž ±_™T¾’fYóœÏìc$§jmêï4¥‰bcKË‚ÌûR•Š‹½L—½èõX„©s//wÒ³\Æï~éŒ}‘Úʈ(¬t¢#“Ex)aB”´p%É$•ËJ΃m«¹ØæRV*}©Ì©gU‰ų̃ÏË"LÖ§‰$rä)$cdqgŠ1Ž4ŠG9)(ȰqÃI3³2˜âJIR¢SvÌØxö}ül”¿M`Yú´â>`$©4„$Kˆ'iò~D!·j0„Z¯¥­¥Y¼øÌ±@œ÷OÙ× `³–Ì÷c^1¦5‹.Ôc€Àáa,°ÕªYÝ 0Õa¤SÄ»˜AF ¬0Œ9ãKpKl¬ìI0FˆÇ4±Œ°Kˆêø x.Tø ck>j &?‡y<äŒ'J1¶5ädI^=ç?VCå§ÆR¨¨Ò¹%0î”bc'iÉ„„‡>˜/\üá:9®Fe”æ¼obÓ¤êUxÂBk¬Òí¢Õâ¿Y| ä o\1¿ä?FÝŸÓ+³Ï5Îus-jsçˆøéÄ­\mG6Fš·Í±9xo,Á‘! °µ«$dÒÌ)ÅK’üÚø„àÏg[ÏÌ|r5™yêøXØü «ð~|Þ/~säj?ÛOEiȽŸG·ç9~9îzœÏ•æ{„æ/Q;¾ ü¸í'OÂ#)åMæù>W—Ý·gÐó~¢¨Âœ‰ÏŠ~ržÉ뵟qÖP#ä§ÎKóÛÜíQµ¿3³ç}£§oÔo'ÍóäüÍ}Ÿø06õž"M^ßG{>:>Ë~žb|L×èô“Ãú<œ¿3Šü^_ÔM×ìCðBw ¡órf«¥ ^|…ÝwÌœ0"p}&†_/˜C“ý~ôòÈÏOWÉðç”Î_‰ó;èè!ØUêÆäL!^TD[‰§Ì÷Bð<=+ÒbžÏˆ=ñÓÙð<´N@µÚ}Žð{>s’Ó$%à —ˆ¼ÿHrS bƒÉß<àñßaAç½è.Ã{çƒ_g@{0ؾX"B?24N}¹œô}Â5öÄqgÒó;ƒ×!¨žy…å¡yBiO8¨iᦡȉÉèöinšr`šÅR‰í÷OggSaBVXPà¶Mÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿw}÷wwNéÖÀ°ãuÄ/ŠóPB“Ñ@ ƒÄ+ €T=èz DF¬Š ؇ŠDU4½¦¢Ï"b„PM‚ßa & P#Üsßz=U }óÕ09ñðRÚl‚†B±YB>øêÄ …1XEl„!˜ø*°%e©«%l­j´÷Àxà<=îÛ ¾áÁã»Þ|A˜ë âl‡^Õµ±\Re¤¸L±ˆˆ45MtY1bŒMæ9£¼ÚkŠwÒf©…¤D4DPjâ©Yf¸àáÁv*µNhŸ|q}Xh¬ßÑ]Ñ4*ž…AƒSUEVQu#X¨Ðú%Y£$c8îÇUÑuB£s\.…ÍtÔ®­Å~jòS’½朋0Ä2͈âŒTh«%Y¬ÍvL­ºû+ÍN)ÌúŸıM¹³Fj3U¢Ì×b»ºüõî¯E¹©Í7N…šu Ô5 1Ñ£E(ÕVŠ5Y¢¬×j§5:¨ÙV®qüÞ׸ cï§Þn€÷»}à>ðxq¸Ïq÷€ûÇÞ>ðx¼Þ=ÇÞÜ}à>ñ÷½P}ãôi9}“Qø #ð7Aâö~‰>7OÀ}ø «ä~ÎÞ@½÷»h÷hÑä¯ÀÊ<Õø9b?ÇálüŸ‚³ÕÆv_ão/„ãšÉăúY±üÂÖ[.eý–¸P/Â) o¬­ˆ´Q­?¶ß—…ÿ7åZÓnÔIÒÛTi,'›î`Ÿ´Ç0~y3ÄÇ1ÝEtýò\e€¢Î§Fø-9ùÌϾÞP…;Ñsó$leñ׎uD¤1 ~Å"ÞØ'õ»…¡ÄVƒi£´M#ùv2è5£5†ïï<ß10/9¯ç‹õ—“Wðüæó>ål£µ ôƒ²?/!ùù1ç)±ÁNä…¬˜ÿ4mE›ø½ðmüu”ø?œBd"þ. oìlü!мÒžÔƒ  ¼~g!½ØÛãà>b&Rþ Ã9çô5“©~lõs~‰è)ÌBƒ2Y– "G`¤v(í¹Öç1Ü$P'LÂ!ù¹öñ©öËÅ_øŒ²—ÿû?< ÿ?2CðÈèo&~Œö7Ø–:dóEí#ho#÷éù3¿^_™3µ >þuöSÐ`ËùÄ BŸÎÇd4¶<{þÜþÙýæòHgRY7S8è “ôáüÙFb·òD[ý‚•ùÎ mѾÌÈ·^~Û¯<buÏöÝl-ö£¶úËoan´Ölõ´øÜû¼M¼Œ»‘'Ÿý…æ ëqûºòÏÔÏóäÌDtËß“ºË;47cêÊ ¦:áÔO¿ãj8˜“;èˆ<ÀS:f[:àÖ„FÑáJ• Õfy‹¯=æóRDŠe¬ŸƒøË­a­?/•uÛðÄ} ëXI—üË´ê„ts_­"C¯Yæù\ä?Ê>JÖ5¦ûxñóØf„q·™êqü‹Èrbs·‘Ãøx‰fƲ¾°ÏYC ø•ÖÐNþ_ÙF'müo;oÀ Î?¾Š¤<õä'À¿o´lüŸÀøäjo¬»ù (QæcçË ö‹F?ŸǼü¶_œßzÉs“÷ç‘ûó(>ÓÅvŸŒà½$ü>a\ÜïÌ¿"$õ§ys;Î7àüûFô7™xÏÇãûÌLþàû£hAù÷ßÏÿŽBçÕ+ŸÉ&äY/ò"gæ¹ðcØL.Nô5Œ³û?|ÿ´)ÈðNãC£vÛ™(Mž/?à~“†Üã"ç7ËmYäñüÿ6e–>_m¿°œ3?v ù—R#yÝŠ4X‰—ôn-¡3S´ÐÕ›XŽ»úqÙßíüË2²Ïˆðeþ²²ÚÂ՘ѹËÃÿÉ0ýÛ®Ÿ›~ìFæº8aËø‚QÑ€çëãõËÌ Ns?Ôø ‡/ìð2Å ™a™çÌ0ΜD¯ŽŒ|| íðsçóŸþtëüÃu¼©ÿe'P{ú9gj}<¡ šGmöDÒH5g.’s·-ÃýŽÉÎ!ËÂ᎕Äsô[¸¹ç\;ˆÐÙÜ@±Sñ1×øý£ ç^Ø©( ê8[¸…Ðýq ‹tAÏæzœë‡ïüÏAEaª,Hžå`úU4Öf<¼ yø¼ÖTP¬©ÉÇ“/€ü믧šö<°wë¬XüõOž çá4_sæä@¹é_{{7¡_—åbRŽwÍ0!È‚ ÞóÊ:å‹£ˆëÀ…>óñ|0DO¬³uXRâê`~´é‡–:åŽý6‡òŽ/Ÿ `f|Ö=¡rEßìýaCІG"G±ûô/onw•O`ëü<À›ÿÖžßt¾°çϹü#ƒ¿~ýù÷ïϺû÷?™ðaÍØ}Õç\R`™â+ä¡?8Ã!A>¸Y-sHI<\ 8ÒâÒDmÌ•©aô•Íc½1—þ×Åø+X¯‰8¨Î„–)Ó'{{Žº˜»m÷©ú$|¶D±É<ƨw!CŒïÍ–s©¶Þ†Ô(½¶u‚ª˜?^¶{ŠgµSòop¬øÁku;¹(Ç"#ærÁnù™Ü®“”…3O[­!$È–¬¼*ªÆsÇð¬\G2)ôlâ ¯Ô?(²ü ’°bùֺ~dÒî}'2¬Êír–¸~éYùÌvý³ñSÜÿýú2|ž2GYKýÄýY”Ä~eS·uXi2â_¿Ir9ŒmÏœG#3´¼}ý"V§:mê£ +9šcÆ\Õe|ü3øHYöQéLË2µÂÆ:´[lkÍd'櫹üûÔ’0ú§æîÁžF5÷ìÊ&ÁÆKR˜|u÷öI9B5+UT”ÑZßß4µ2´¹®²²9Îñä| ÏÃô÷‚z—Ǿ3vß¹Ìnù†'œ8MSõ2tòqP*WGÌÝ&UÛðšäÖ¨ëzË_æ·xÞíŸéq:s™$Ìœò±—HÚ꫌\ä=.‹?Š’‘AF[\U p~K¼,Ùõ],òõÃ"É3<í‹…,HyX‰FGáó`øÂg™üyHåÑcöE$˜Qp¦å\ä¡ðQ:ÉÓ®ç”îô)“܉çLan‰Ÿ¼ÏŒ9ðøÁÕßÇÑÏ)~¤ Ï4ñcŠ“Ôy¤°K+XÑéµ$e›[}àÚÜÎIhì¡$¬r~ÇïÎÐ`Rì[-؃×gúE¹=¼Á`䓦}!,e-;Æmc<0Œyˆ§ºXð:X?uã'F3¸AkÂÄóã Ì|m.åV‹:N­bÌáŸñK×;Òsžñ~fcx¾Ð„ÎÆv²ÂÈÊÑ& ±&P–Fδ'$ó3¬9ŸèÓ¬ûÅšQ¬—y3ÁAF<ÂxÇè‚glo¥àà±P·Å6gƲ¾iê»ñŒ–Dbþu‹@š2R'ë>“à§2øÉËÆ.—K¨I™™Û²dK¤š"QeT’9áC:pÉí[-:#«ˆ‰S§Àá jxk6N‚DY]¨*©5A€*ºWÔ›.6³Ñ$pù!“„ú>Õ<)o2t¡äН<’©Ôð>ûz~9â®ÏƒËñaÉòàò‡—ã¶û+DQ 9>d8P‘åö|ÎÄO‹èÆ´NL¿s¹§– ä†)_sГìüŠ10O±_‹ìèÓÄNâp AGâM zx~îŸ@Dåм?˜0¡µ;©Ì.…N¹æ3r u6-7ŽyÑͤ¡x”ïŽx#©Tù’Ž¿'Ññ~v5ùž†¿!!…<)ñ¿Ÿ +ú$ìèðп0k,<Ÿ¼ð~g‚ {B ö}Dñ: ÑåÞ„ÕÛÏžAßsêyÈ7võ|a‘§­ŒñÜX3e‡YÓÁ¸{ºüÛÏDCáˆòi 9tÂß`Ô>7êX{CâØó„ |ŠçÄxôÃ\¡¹št¢ZSèvÖ¾D>»‰ÒŠw],êzç—¥œÐJë× Äœ"P#ÍÞÞÕ E|×^ogÊ®/Öò×уÉéù·É“âÅ(=|Ï"~¤<öiñmÒâÌd¸ê lüF]±ìø>\8>‡ƒå3  ¢W€Û»à”?FöñØ=8 L|Ðü/‹É7öCyž˜{<€œ”÷=Ùè_t9È¡ð:£Ú^m:}á"ƒâ¨¼µìgF‰„CÙÑð‡²XrÙàìò,‡“à(t9Êl%N´9 îžyBÑÑð}q<σɇ!o›æû8"‡`¼ß¾ 0DNîÆ¯I§ÀF}î¤ä]§Bˆ”˜ÔàúŽ˜Í¦:cíñ>ÇÁ®Ñhº[§Ö0H`fñÀ¶‹m´@  @ Z¶€¶Ú €QE´ -  ‚hhâbØ€@&NȰJ;i &[i8Ÿ$ÒÆ16i¶“r~Z #m&“-6Y|¯ &‘ ¤Úi‚Ûi¨ä&Ñ1&[ˆ¥! BM9%´Èi&’d¤’M¶É|’‰è””m´“JTŠI¤É}D”IÊ䤓‰¥I=’š€I$i$‚Sh’Ý$“H$QM¦Òji(]$[a&‚MÛE"Ú¤E4¤›i6ÑM´—$$Ú)´ $P@šHjVâ–„‹%BD°Fé t°5&’M¨’MFÚM>”D NF’i%m§]‚ M6Ô4Ór4ÛN8ÓmHØ „›M¶Ói;m¶‡ °J)FbŽ6›m3†&”1FÒM6“‰(’e[m´– $ÀI$’RhA,ÂJI7IÚl €0ËoØiˆÎ8MÒk†7• ¢£Ÿó8Êq¬g ¼V2Æ{«5ŵZk4Å&K•¢aêPDAj KCUŒ`ƒA©d5E‡ÔÖQ€åïÇÏ–2ÝŒa‹Å¢´ùé5™.D(D}ˆ54A¢,j£°êâ±iâËß–2šèÇŦø´^o‹kÂÖµuÛª˜¬š”SDÔªã =D¹Š¡ ¥DQE뢊"Šªˆ¢Ê,Š•Ô`£=YaªŠ&©¡èš•Órªû\Ñ€UŸ‹*ì¿ø/ºÛ¦‹qSuw[‚›¦éÀnœÈø&ãP±ó,Or¸!pÀ1㉰5Ñ‚¬ðaطx©Å8åˆb5œMŠ*Ž <°Ý‡ù-Å^IÅNIÍ9gȱ,‹2ÄqælÍŠí Td«5¹)Í^Eˆf9ŽŽqô€€5^ãð÷€Ñ ×Þï{¼i{ϼÞí÷€ûÈk°@.ýãïkï÷—ïh¾Ÿx¼…;¼~Ѹ÷y<‚bLOggSÿÿÿÿÿÿÿÿBVXQ 6Ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr:ž¨âQ5™ãx5{j&U‘ÓÂpáâúÜLºúÜ>'àöx8G«'“Â|O'-‘ø°x¼*Ihz0‘ͰLk¦Xùšôœ±ôºy¿gW¹ÂNH G`í®ßx÷{‡o¾}À5Å÷Ï)ø äu3/àhú_Sð~hÈ{¸ƒ=$xOº?G€=!Þ6eØdhö¿Æÿ¡¹ß–<‡›Ðe²ƒÇaÞî?ïèþg[ð컇~ ìŸDÓïß½ÞƒÃû¿[ж;÷p|ó;!­vw‰ÆÏÆ~ý%}Œ3f|HòìÆÌšþsÙØüÌÒÜN÷í úXaå01÷ÇpƑȜy‚JQ¦Ð+ÿĸ#ì‡ôïéfcæìÅ:aá§ÜzwÇØ>qLq˜«Ù™Á.9#¸%r’>Áì‰ÚÌ_K2à‹ƒ1$ýÇ#?po’슄“<øªòRsƒù†çÅ3¸3ṳ̀lÓ|òqêA$5›ÖŸþeŠ„ñžycÚBÖ5†Á†žñ¦ž\Lঌæ$ã’ o󸦙5»Ps˜ÍÓ#=‹L·YOþ™0âàÕ>›Lp9ÿ{’wfi‚ÏŠnH)†/Ǟ̗·ÿOŸ{‡ñ±NþPò¶úJ…R(óIwö`‚4²ÿˆÁÊ}Äfäf@þq~3–ïÛMdsè´Às‚œßê‹óM›—ƒHZŸAþJQ³ˆžyqÇ4ª)ÞJ¦C)ÒçfšzAü0“õ@sÃúsŒg°ÐßLr~Nóæãúk£wÓgÌÿ4Ú{˜¤uQÅ'lƒ¸Ì­8½P<ž˜ßšxa¹º)¿–¸ÚgŒÁ¼cfæãùóñ8ôŒåÄó‚\GHïÿÆq9ñ8Ÿ÷¥¿¦áÅ*úéí§ßðSzŒœã9‚iF¯Øñ:¦X¾ö|ù0¦)÷s˜#áwÒ¥¾ù‰d‚œI0♜[³j€Ÿ½„b‘ñįí-IË‹ŽaNø¥NÖö|Ú#ìglVÇ“Í7[gÈ>UITÅç9æÎ1L‰ÇÌLzAÉžkžÞW'ª#Û³ìÀvªÆ\R56í&éþªÿ®\ÿôÿ»ç~ÿý›þ­°ö£owq˜2çüGC=Ïœ>ݺf®vж›ôÛnþþð}_w¥,v_ñ˜ÙÆÄ/…óˆñŸ›·iÈ–eÜï<ïÿy©›ÿþv~³½3¡<øzWc|øŸçÉ”r<¹ÙÅ?Ó&Ki¸Úu#¸‰fqT#E¯Èö¹žÏ‡óO;gXs0R©ô×<¸‚1ˆ…-´¢6“‰ô†”N<‘8úrGñŸLèŠ,ýé§åæ¹³1‰XsSÊHÜ? ºþSb÷‹³'òÏO–÷*ƒ<]°æ‘áD2ŸqNó‹M²M=iQÈÞCŠl¸e(Ãñó†Ä‘1 óÜÎBK/mËÅ:æ|co¦DúGÓü߃¹ÿ‹Óf°]LÌÒŠAo¥6&iT1¾ óqŸ4Úwß|w.Y8œRTï˜:k;â]—šV¿‘¡&òMþãÎ6 è½»*ƒ/îœHÞ38oûQ± û;öl^Ø’"úQ–e†æ4ñ>Û¦5¯6xœÒyB"%þwÇ3½æÿ4<ûôNœ†÷ý>¹ðñøøß¸Ù>qŒi~öox5y:çÌo7.\ýž_?σOÞ;;Ñyƒ»‘üïGÄ<Î|¿èñË—°´ ˜¿3ðÿ¹Çp#Í+dê|NJPäQÆXàüǼ˜Éÿ ²HÞƒ;fXÙ`å¼Ññ?b{_þ?ûôð¼ÄÁƒ3WÜ` r›ƒ”“çŽâ>ˀ߽¿Gñðãùs­xÞâxO§f!¸™ß1~9¦žŠsžC91ævf\9Ï)yÐľ2ÿ¤Ÿ¬‡ÿSœQ‡À‡Þëî¦à<‚1Z1½Å‘=H}GDëœG¼ûÎsœ*àŽ}aĘó÷;îõ´Tަ¢î;,©Ôr U¿m*p»åÛÞr+z–î”×ÓŒþÙ½"ù¬”~dÔ¹áÚ? âÙ Ë&ij]V¸~?T«½HšÉvÚP}"¹Å?‹‰EVÿ‘ØÍ‹%Áùói”¾:ÊßGŸnÍoS;H§.RüóË·KÛ\9é6Âiu~%mB³9ýÃ^¾þHbþI‹Yù!Lí9NÿµÊ2 «Š’®ß’ï% ¾×rd­›?>mNußÓî.íù™ånTÓÜçÌÊ%'gôVÓ”#w¬ŽIcªÉ¶ÙèP|­‘·çÍdu.ê¿¥ùW>Rrݺw=®åÊ)þöÏ({ ÇÒ™»Ã9s¥Í†Öyß½¯~ú¾¾Wê÷q-È}§©^½$hMU=dgÕ™Íw{îf0]?mDQBãc/©T9Í9Ÿß©ÓDs9B ÒCû¯Æ×«â×>QE $Hî¥ÑúŸ÷î(JqvN.¥NÉû»×NŽ‹¦›mË6+zëÎNÉæz÷>uO ·„×)m^çÖ MÜÿ~²Š ñí>M¿?p¾&RÌœË:$% …eù¢ií×{ßWŒ9©(—þûÕ× šŒ9ã7q|Aw™“pt¼aÈÆÁøçÄPêïìùÍW9ù—ÖrÃå~´r6Ùë•ï$£Àý¿.ÞÉû×õmóc¢2IY)\¯ª¾u£è¤Á’¿,—[zEþçkjWÊ.E ›•†u$–ͶÛNÚ½í4UmG„)$ò©"~tÊæW _ùîá ¬?/ÈûŒ‹$8.ä™»À׸±åÞC¹©“GõøT¾ŽÝNÕOÝ7ÕoAnû2á;9Ò¶R’Lju5¶ÇJ‡hñ¶ã.\þ¹=óñΡfÓ_2|äê·:'gHrËÞ¬¬%Q}Ø/A9Ìù™gD`aŠœ\AH~­–îÖ©t<ƒ"e\pòíáÞ‡î)Ã* „¸”‡+ƒöËë¨\!×l`ëfÑ9uaƒª…› p 8ÌÓßÁ¶á®¿ëc=9ùàõÎdŽAƒŒ¥{Q%îùSÜ~Žc÷>}<É“àJ_?µÎeŒ—ŠÇ•:D„rTq>•§¸•g2.u”R±„§•@•ÒWB%NG½o»Þc*á« Âo¾Û\¹tÙ=" ›Nï¿ XCí«„¼5Ý*Ä—#T¡|û¨%¾êÂÏ’$­ï;Xš} czƒJKÒy²M ù›Y4óbû/bT•uñ‚Ù-¯5yÝIµ¶‰O}–¯æ×n£oƒZcO RÑí&Ëù¤YŸ´(ìµÄB{î?™XØÙ*P3FÙ¤Q%RŒžB“`ÌNñŒouYYT©RˆžƒÕéztÙêÍû5.š—:QÕzt°ûÛ7‘feΧŠÁ¶¿aX{"Dƒ0DþÝÔ,T;ÕoHZÄàµU¬lÇ·z±—pMVëúÆz³zꤌåXÝf–'ôÁa®L¥ïaf[ïªŒß )0pÚª¨ ´¬¬X‹[¨{là†‡-s)Çf1À•Ì%Å·icn<.°šÄcˆ©Ó¤X ·¸,òåÛ+áµg†ŒeÇX3«qÇ>»P„È‘ ÃŽ¤XB.Oï–Ø¬4ªÜeH‘\“6E>IbéúµéøÉ®ÔŽêRÞI«NÕ•?bç]ù]—ö_*lÎ¥:ŠódJãĽ$g8 B0rÙcªrÅlœí³ÜM 7Eš¬D™4iŽ2*qÛsª¦'hÁb¬XðVé;mUÕ'‘É;7SDPå£"’êž{sqï|1OsóO£o©{ÎgÖÐI/\švó‹“³©'JꤡtÓS¬0ÁYÅB”Yõ*ß×$}Zw).!8ï³³ÀÌ£u/³ˆNÝbÇ0u-JIÓþ‹$â1D¤a:†S•m–a•–UW*=X®µ€™gV§xËTPè³¼‚âÁs¼'óˆdp+#+m×#(D9šÔ±žÑ<ÔôAJ¥;|™™Û‹äü%~û6 ýðGÞB"9Ô¿)x€âyŸußÜýjH¼‹r«‰ÒEvÞÙ ¨*‚‚‚& -ϲ 0" 6ìÚTج¬|ch€³L¡i[„béŒÿ}ýoŒ|²ÝJúG?}¨%.¤‘cðØ`¿F\0Œ`–Q=L3¦±‘äy #ÀyJ)ŠeŒò˜ÎøŒ[à WWÑÄæ’'“Ù"”Ÿ¹ÊÊ î.…ö‘ÔëÝ"¾ý£µz3÷ô`é_—î‚“V¤8Hw#·ïÙÖ%uÁÌQÄèþ?¤rc)˜­}û9ëÒ–³çGâ°)K¯£éX×é¬-²¿åµùP)Ÿ#ÀŸâv¯gËx㨺FÈ=sËð㨿G›ò|>ÑðG¦®PøðoÄ@èùO'Èìù‚š}ŽzH|ì9~mÞ½üDJ|Ï'ÜüûÇÈŸ!ºx‹É‘×?3ªÂ0ñ|+ÛNÎŒ$Ùôƒªø>L4O¹ ‡Ú«ú1ùÓ¯<þL}ÄÿÔˆœ?/ôøžÏ«ô>No—Ùàöðó~OT~išµ{KÓí^Õ D¾ðò|Õüú>ãÑ…> ¢ùù<óm‹Þ«îtû>–tx~T} ÏÌîõK%0ò'ÌO þ÷æƒãÁbsW“NèsÑ/Cw°‡Å¤{ âr|_ZRì>\‡ +8ü>Þg¹åOE5X±Ld´ë°1ò!ÈgXž3¡ 9뎸ãÆònvjöú¾‘‡’©À„SG¸O<ëàòù=ž€¦$3³ËÐn#©©¤€@œ€ÎO˜ªJtE2 ŠH&:a¦‚€aJ×ÖùºžŸwÝ÷w}÷wwNë…×}`ÎîwK=Ôu½P¥$A|«™&Ä‘È)Ž5{ÐjÌó“ÅC‚Œª•Ã?öSiÆ1¶yÃv¬Úmšb–“79D c ƒQ¸åëÊo8εVdÒ\¼&`–-*¢ãRËV^|mŽ0ÅílWÄÃÂ*¢"£eUEÑq²0Ñ–"Š"aX¨+…P¨‹ðN*ðN`‹¯ºÛ¯Á^*ðStÜöN¹`š¨©®‹£_ÅÕ·ÛŠ¸§Ü÷+†#¸âk›`ŒT_E×â·%qN)ıM™±F*1Fkn¯yŽ&È€û€}ļhÜûÀ}à>ðx¼Þ@(ìÞ>ñØûÀ~>ñ÷Óïx xìÞ>ð÷€ûÀ}áǸ¼ßMϼ}ãZûÇÞï÷ûÚì}ãï>ðx¼}íy÷€(±÷¼¸÷xûÌ~ï½÷«áŽ~쟀+éYø ¾Å#ÕàôGà)gƒÕ€4ð7=ÇÞí­×Þ4¸=ÞàÐò¾+gà?§.Øø^/ÀƒÛÁìüÞÏ9ÂãÊŽŒv;h‘I/Ág²#ç‰߸¢†6d]|ãÂö/ÅÄÓY.…GSšÃ?¼ñtýÝàÒj?;´ïí¢‡YoÄŽƒ"EßÛä?¦ÏßÀIÏ?)>ìzÜùíÑüNlr³ú ÒþþE·ÿγð¢V¡H',—[žE¼yR& Š1”ü }äË22aÇ!²þWS»úrZ†Ñ³²™ç✟â,`ö‡Ý€ïÿ»ö ó1· ]ÇØD½ný‡ã3ãe3–Ïü¦'¯3Â’~cÏiå»÷𳘉¢P­¶æVXFÑ19ÅÚã僫¶çÖÈáçñø#Z#ý–y¬ØÞkæÌìk© Æx8vD"þ@#0øç“Ÿè]~dÇóI<õÖïvàbŒ£íÇäüýÃ,¤?õ§/œÃ­¤‡ßWõ°ýeü//Ј&:à‡¸ü󼿑áû/̲ÙÄ}h|òÌ“«lâ9÷Û¨¼$Þ±ð Nsõvè²Ãdon¨Ï‘ÞšÐö®¹sßÞÀÇœyñÎÆóæW¹xcvÁ"$Û| ›‘?XDHon{<ЀÀöµPo/ÝÞ_¬ÄÁå0ýÜ ÂÉ_ŸîÆ´,øÿ}Iâ5£û™º¨÷÷ñ¦äCÄlÌ3èj°ü tÊï v™x³ %o´1€Qam×›ûÇó vFâÈž§}¡xÖSˆ]ý–~ŸREú'ò"ÿx4äýsœ x€Q0¦&×öнü—ùмÇÛîÁüÇÚwÀÉPe—ð¤DiëèÚÃùû3ám؈ ™Ö‡Þa‰ñg1´­ŸŒB;‡á0þ[Fó¼ø~tþb8¼í<ááo% ˜ oûö'yÏ92°ƒl¿@åÉr9†2™þT(žg y^g›~2Áœ‘ãjC—D“áù}½ø.¢rÈñÇäÊmœw÷Ï2o/ÿ´Í¬wîê"Y—öL¿8ü?ïÈìd/—Îgm¹,õ?¿2~xþ…ßßHùÿiðŒÞ‰0uÈ\//…'ÇÞNþ·üùÄQc‘(ÿça–ÂûI_þ·ób(!jnN>Ïâÿ×£RÃ3ÀÌïäO’L¸~þ„n¼A+Êa;©Í&rò-ïÄ jæÉüe…äFÔÏ%®Þ`ÿ1êã,o/ÏâoSk©,cƒð÷›~ÎÃ&ø z ‹Š'¿>Ø&׆^¢gmøL(ÇS¡„Qbc“ãÇBŽ<´òóï?™ÞƒÄï÷ÎÆ'<ø€6&“ϦŸïâ#ï?ÑüïÆç •{fY“ùÜ4Ç #¦ò¾—ýÿåÞsïÓ¿à‰˜î3!³Í4Å0pãî};â Žy‹†µlÎ4ýæÎgæm91L܆ÌÈq³Ñß¿|ƛȉŠtS)Îsþpr÷ŽßéDøà8ùÙÆqÎÜøq˜3Ôé¥&æ™&ÿ¸˜âŒÄ‘d‘O3~b¶Q¡ã&ó0çKœü<ù‡äÆgìgà6>Ì"Ÿ¢ ßå¿c~>ÀNÙ?6&dû͇G³O³‰sNgø‰‚<~&6qߺhøÒ¡qó5ò™s…F?GÁó™ýÕ™2%®HTXK¿QBÌ9þLŸ5ǽâíNt§z 2£jsæy®$N¿}©ÙáÙË"A>ÛÈw †9Ôšg}Ò2ÃêTyœŠ”†ÓU+ÝeÒÍÒ'¨| †PSøÅJÈWÙ²Ðòó.`Iö~¹–Ž{zcN»ªÕ”ð‰Ëì¾JB˜xœbꎻ£ûXÆ&¦dÆ)Š88²è­;S/Þu!©ùžíR+7;eÊ~©Zw¬éÇSCähN”ê]vtùýk:,%òV¸“'U™ö´û ·‚X1£c _œX[ÆJÁÁÚàùÖ 'Wm.{ùÍZ˜vÃßÏ|¬æãEj›ê˜:u‰ªÑ3§$2~½Ìäùíÿ3$MdÜ)ý¯kž“ÅFu®}K3®FyrpIŒ'?¸³LøŽ—ViŒsN±ÇpÙœœÿw9·âÅ~¢GÉueq6qê\‡ÆÊœ–ÒeÝ}Ä:uT®öØ“$pOÃô‚]VíµdÉ’Xr¢²JïtA\Îâá=~âôl™Ÿ¥üBRŸŸiNú)ŸÐ¸­Ò.Ý:BÔ™”÷dÈd¢uFGÂì Vee!rR™4eg”êže'ïã ò ÂÒtÉXaÕªe1ŽQ”U g ìíÂÝÉá5©@ég&DÑ9 BÊx³z3,&y1—ìÐ6gQ‚?¹ÅÒ øÊ¬ç¬ªDè°œ‹d>#ÎoO3*¨T`Š#áÌ–T|P!>Œ‹²æ:˜(ø;šßO~6ÓÅ´‘jW%ëû9Œ›d_rãIX“Ö–C4­OY$æLOþT’WÕpÚÏÉèB©™Š}¶¼ï7ÆÔœ÷Ò\¥Æo„Ÿíq1Lô"β‚@ŸIé»mÈÙ4ÙK2víhÓùŒc²èŽwÒX-B(ËZÃãŽ8F4+9Aò­gê±å™ºy.ÀÆvsR™ñk qÖ8¥adY)peï†rfXãš 7³<¦ ŒÐÚ –cÅKÁëVÿYIgè‘I’€eíÈ-ùŸs£„ÑΤL&V•ô>k’±ŒTϤФmtdõ›µ÷ŸO Õ!TD¾±ÖŠœ{µ¾îÚ‘gJ7~–ûƾŸF”ƒ¾"–8é)à 탉cÒp,¬KÆx¬RQÔa\c)%b–ÔyêeàãDÊà 3b@Ïì(e¬D̓ô×=$¤ª_Jv5òu²':Å*`²8!þJòMúò¼¿ûÿ@¢? cM\7YD1¬ü[êû>«ËÌ^Só7Ì0Zº ÆÈYgBS¡ÝBNtK/…0°%ŸîXǰPFHXS+m6Yo;¨% U©>(OÆ? o÷…jæl×íҙɂÒ„ ª /Yß É’{ÐcGŽLiaŒçò±ÜcÎó9Õ¹1ž³œ/3ÛÖcÚ sŽGÛ¦—Ñù|IÞ(sƣϽ`t‰=ä¢;=®ýßÒ˜Ú{&e9¤œU:”ÊŒ)ê5lTm²s'ó9H„ ]%_ß¼•~p*Öö¹uèøf9àóÓ@pÉíøŽ^MW’§…Ž8‰aä‹v¦±,.ƒ`›‚fôéæ&hK\¹pðu˜†§Íâò‘9Iã™Õ|Ç‹Á“ˆ—ž³¬“#ð7áÏ‹§›ïðž ø >w@|O'’>bÂ!õyß;ÌVgñÛï}ΧÉë}‰Íµqî9~,N~‡ñ>GOÔêüt0ó|9rO´šx?/‡“êC埑~'´ ©}tù9>êü:øÎjuǃãžÏop{é%òxÙNÅèp8)Îz)¡CÐsò®8|Díîý3òú<‹³¤¿^ö}Šü"tcNiØpvî'à v^÷e> V›¼=÷ÎùÞ|àƒ¾0$yä7žbõÎÙ7¤á÷>=ï$~§ËÛñ>/ nΙùà~ÉSѯD¼ŒØ¼D!PiOG¦«ÚŸ³ÚÎ’ôûW½÷Tu~\³ÕœÌ¸^â íQ˜ðSwfœŸ£ÝŸ#Ž\œöйæùLæÃÔçŸo™îs‰æóG¬OOaÞžM¥Þoi9kÚ´ì„×¶å*ˆ‚˜3¦>À§ƒIWí§‡"vMåìø½`üAðü_Ùø> haÄæ U@¿>âáð<¾ƒš†÷”ÎCo–º xëB€Y4_Ëکš(7”°~&žÞĘYè‘9 ôüÂýÎÏ‘á‚Jœ$æ3ŒD ”5pA€ãtõ£qEHq„ŠövÂ>¸|Ùy:;œžÞßwÝÝÝ÷ÝRÆá³uÜçܽô}èŠ- éD*È:šƒªbÓ(žõX„7ÒeBŠ%š>úLˆÅ| U@"IDÕ“Ë+ch=µQ±áwžªË@ãÃaðÕB AV T Á A%mñÞ¦z€TDÕ(¢¯ @çÝîôÙè'‚m„ óÁÏ8ãÃÞ½ãÇžpz€ã`T!^0”H¸gV5ŒÞ0›âö´ÖdR©.]"@$±Š A¨P*6ãRË^S–1œOggSdBVXSâ—?nÿÿÿÿÿÿÿÿÿÿ.ÿÿÿÿÿÿ&Ó[Wi.œÌ&D@,Z"*T*°àWñ°Åñi&¸–vA1‚Ä´1- A¨Ù5ÆèÇFx¢$Š•OR‰¹]]ØðW‚p èÁV âû°â¶êî¦éÁ^ n®éıNˆÜØ£QЬb¿%æÝÕâ¯%y©Í8žçú{‘†#ˆäk›b¢ê±_š¼T朋!ÈØ›4d£%X«ÌÙ¿ÇðÐ>ñ£ï }ãGÞï÷€Ÿ{Ý÷ŽÇÞGcîx¼Þ>ñ÷€ûÇnßxÚ÷>ñ÷€ûÇÞ>ñ÷€ûÆ€¼)£Ü{¼v>ñ÷€ûÀ}à>ð@ïûÀ{¼Þ>ðxp¼Þïxìv4it{€PC@ìk@xÐ4hû™æüùšù€ìú^ïÁ]ø;~2¸€;}àÐÖ€ûÁÛ]€°k]€Ðy¿WÐÅIømÎß‚[ëÎæh`#Œk#Á÷Ö L¹?hÜ/¿ÚÈÑ8õ§&7[ãÎdÀÓÆb× ˜˜œNngóhÐÞþÊÊQÿbb´‚8·–vmàÎnt_ïþ'XCŒñýζuWïïÑ·DdOŒ ü³>2~7:—›`eˆœÿ>[™™YþGöeÂ'Ë;ensd}òófÞ ÖÑ|ÉØ‹À~»Ž¡ü…æŒìüÞu”1ޏÊ|üëŸîëômuößõðsëG3Çîǹù?æÿÉë±F|ÆÐˆê ºÎ;ûãàr8e—6ö>çàÒ<ùþeŠ5ÁdºŸß¾k?¥–q8ÌÇœ‹ì¯_ÅÜP_àÁCÍ›÷ãòÄNd®??ûBŽNP2?¶í;ò1ÅÁu±ã­¼ïòG÷ø ^ÿÏçüJgSå“ùýHˆ~Äø˜µàC^r&Œ0AšøøcyðÐÕQŠÞ&ŒÚ#K°¢‡²3´¹A)_Í»â]m?Ë?õ”LZNQ­>ßë 46_9‹°æÁ¹Ôb'>fAEL3œ :ˆ¶6G”mâbMߌõ8êQ¾´ÝÄï3<…3֛ߛÍû˸íg.p •'Ãñ|ño¡ùˆ[BBÝ8æèÞÿ ¾ïÃ/´ÿ¹Ï— §q÷/0tf"|ø8üÜ“®rÞ¸:èšàØ_šÒÉýx@ žó 0ÛîQÙsùíyñÄmñ=ø@6–A”A/ùËÿ˜ÛÂø1ñ:Â%Añ1æ6OÅÌ?¦‹ôðþœ§mÉߢ&ÒG÷ÝûœÈ? èûÁ‘ÈŸ2/ G=›G[õ¶û3·Ü³Ï5@yÕÅ™ˆo3#û¸8–1ð#Ëû6ßÎïÏéñþÿˆÏh5  Ý~J7˜´Ìç“Y0o´®»,o<ÞWÿ,u?\ÓaŽ;W•á¾ÒþˆŒç0æCG6ßLìƒã~r _·á 'Ùæ1çmÇæâžÄ* øß©ýÏÎLß‘Ø25væèOéÜä?$Ùùe¹EþÐß¿"{êÓ¾è…P»‰3.·>™Ó;/ö“.~¾´ýzÒüŸ0Üðí íc‡‹ÅÑûN.Œ€_´âÿ³–ûxûOBëÈÑ Jáÿ²ÿî3ÙýËÝÙïÌïë¨Êƒ<äÄùŸò:ëãÏ9gðn¥üOóì†#lÅß½FY;(eüÏgáÑŒùŸÖ¢Ôc´ë§cX½ì榿‹ Ž.˜ØÇj!ë‘к ðéÌŒ{Ìì_Ãö¬ ?L´è ÝÉí?k? ¼÷ó¯Ì~¹Ñ‚ÿs‡ò¿#ô_ó÷¿ÇRøvzÁù4QÀýa xwŽ"EâØ!ú:8.Ž¿çØA`}ã÷êW“Ãà±êGŸ=yêíã‚·£Ÿ¨¤Ä¢EÇÒ?_¯Îçòø‡rfÙèŸÜ<Ù‹ÓIè¤ðç¡éäâ~å¦þ>ý`!å –Âb†:ƒïV÷ÙÌÄy¬<ðÇ |f~ ®¤çîy]O†qÏøºƒÏG](:öxÇ] ¯oìr! ^Ú±iCQТEíÈ~.„@†çèb}£ùZâO`JGEk€üL»m¶°¥Ü×γ1’ËÈMÞN¨OÝwT'V&‚¹“ƒÑÄ…"ª{ƒ3®¿Ÿ9ЫF¸OLòy\q61<àâTR4ë5©s¬4âjcIÕ X”ºhJgÖ_$³™ZTRÎuE‡ÎFG2ÝëõeÍ£=à§„riÚTîéùÍRU[ûâbyΫ?Ã}I ë D–~ƒú®ñi ZëMô®ÞVŸDÖÌ_Yý`äs_&GÌ×:µ“.íÝdÒV"VnFO3,æGÎŽ®ae¬=Qî¤Îç ×g9?˜]#\_ª)æ§‹9Lx("{‘üž‰ÖVNúYS/Ý'ß·ó¿>õŸê¦u:æ”jqw–4˜|ýiøzªŠaÃÖ9㊌yÞX¨÷‘L9öÌûõ‡4pWÍYgPF¾šž£‰œÒL¹Z»T\+?œc&rViiÒ²JG9ý_tµY¬É¥#™ýý^Þ¤.ÍŸ9ÉWuŽ‘HS)š'"Yζ§Ÿ5•œÉC®"y¥§… `øÌ±—̇œ²n ýóOªy~ü;,”µv†]]ó/â*sçPö•sXȬ RN±ÂGêqÓó¥ÈÈ¿zÁ ¬(å'X᫾哜 ‘`ç×øÞcUà W€"“Eë×k,²/ ©D^nŽåø\U|•±UoÂ]oŸŸ|fPAoBiDAé<½¼*ÊCá0—™ÚK9.߃¬‰¦ðJÏd7çÌ-aω,#8FgRŽ©!Dm½¥Réf™Ý]b©‹R–Í—Bn˜I`°fŽ7S4`' 7XÆ÷X,ñƒ0Ý1ÂêÔ©Œ¹c3RÎØ*µ+aÆYÂLä¦gKŒÓVöaL%R8Æs!I«Ó IÙjޤ<[ãJX(ÅNŸtÎêë€É¬¹t²¦p‰É$q—Y ,\>z¶•–¥*ÂíYLBRFó¹pœH©Vpœ¤£,JÚÝ>§Ï.¥• ÚsC”°Œ§¥’!Œe<é¥6¯š—AHWyÂ̰LÿZ|P#ýÆ×ÛYÙO ýàýðÂBße.,þÛ\]ùbŒìK\äð³ýó9+¨–¸•FÓÔ­# ñª^7øRg,Š 2í‡õ¾?µ“™«5,Šs¦˜ð“ãßÓ:àüÅ]Lë7ÎtʨÕ9ÎÕ•1™[zÔÌŸY3™uSÒ—0ªÌ§ U§¾I5U:|Ê>ýÞÝWn pÉíø¾G’Wȱ‚8pêTM€ÓˆŠrzUæDø5'õgY~J‹/Ïâ<"O ßÍDÏ”ùRsÄç¬ë1‡àkð{¿Ÿá'à‚ùÝØò|ÎÖyÎr¯”œõ½s×óâö³žyã«éõ¾í19mæbcöÁÐo>gÄêüwÁÐ ò›ñŠÎõïl>Œ¿R¾KžN±)ˆØŸ Ê-| ú‚¿SÃÇ_=sÒ@ãËÚÞŸi›¾Xvœiõ§sâDŸøŸ"ÃðýÖ{ç»ù;<Ÿ ñzð|(…w°Úeì7½«Ï;†ïCˆ³Àõñ¼¿‰>æŒù‡{õŸ" ºv,ù°Óí\X,×ð¤{~ªcO9ƒÏazKÏ>D§ä÷;±O&Ø×Óäìü<ž/61>¡“>4$&tá*Ù^x£“htg'³ÔõÏð‡Œöó¡ù¾yòüL·x4wäiöÃÜAäìÓɦ¡ÉH¦æÏ V°Ãçµ¼v<œéäò}_‰äfßgÈù½Í6++t- i‡íø˜}N‹Öœ? «ž®W“žC,›â‡3À Tò{VðZRòGÚ´'±{W´ˆÃöBFA:>t({>.¯Èfð”W›80¸záÒ2Tá ´ˆD@Ç£¢ “æüNM,àìèàðûï»§Þêó¦Õ~³6˜‡¹Õf•öƒÈ ¨€J‚>PÊ'½î‚YõA6T)Éä(aí'ß(Dô™¾”!= G¿Þóúɾ¢@ -õÖå¨<}ï¨(gøD¥!­ ¬VŸxu+PÊ€«[¨[AÀóM%M²ºz‚”ÈÑ€wW¼yD¼ño3Ðòñð½ðÝÔç;Ïz¼pyç½áÓ¹ÂAq…±”/ä›`8Žq†1›Íñi¬Òdºrˆ`Z 1ƒDÐÕ5ŠÃ‚nlKÌØÍñj¶«b¸¤Ó¨b EPª« ÊèÄs,‡~†/¢¸¦‰ŠaDÄÕMh4(ÑQUtbŒž1Õ†€l©E•š¡`«.êñSŠp–#€`lQЬH]‚ìUšñS‰îrø©b…Ͷ(ºŽª0QЬW`»y©ÅNiÍ93äYÇÈÙ##f£%ªÍvkñWšç2ÈsFj3UšìÕæ|Ñš¬ÞãøÐ)÷¼h÷y~ðx¼ÞïxûÇÞÜ}à>ðxV¿[_C“ÅìáøŠóx£^oÀ倒OÀYø¿×Îåñ»x0ƒ@Þ×»·oÀž~M˜™ø#Àqø $?©ñç c±y/ß§b(! ÀøO](^|ƲËðçSŽ`G øûsÁ0Yȃn|ÎbbüÍhI,ø‰~­þÞm\C¿]¹'ØÚ%ü#yá;Á7ò2`‰£ÿÿ4ƒ°ÃøßÄí«CyçÆ¸z¤jíœù[‹£ˆ™'~OóHsõ”“ç‘ßùÇòmæþ™àÄR¿ãõþmÉ֟ʲ É’6ÿm—ø ¸e²ìì²Qc)ÎïØËÄÁã`#£ñþÿ‡ç>L?Œ·Uü‡’Æô#‘¶ýOGëÌýØ™ô‚‘A·³^LãÈndü–`Úª ­d 'ãóØGûDô|½x£@¤“ê@Œ|ŒÁéøœÿ ýìº %øjœAל?¦ù~YoÏ5ÛÑåFÛšËψÏcfväñýû<'ã÷‡óG3ñê1¶V÷àý¬x­%oÿOï×ðs"k?Óóå„RFÍKó4Ô?v2ž?,¿Ó«©ù<ÜnÁÂO?nöáàVl¿–róà°Ž}½æ“ÚÌ¿(ÏÀºžnÊFvzØëôƌӚ¹ç%ãóW6 ŸÈ;ÿŸ¹‚äÌò'#ÃMµþ‚Ly"wÚy’ÿˆ—ô ¾1>NüßlÔïOggSeBVXT•Ƚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ΃ß*Ò6ìP¬ˆ£¾hÖ‚ÿï"ìnþbŽ€:ç²óûhà.ÐÓŒ¨ëªŸ.ü”Ë3¹•W„YŽƒ ù&7L+9öÇYŠÝekû©9»nÃ"ÿ Ç€k(9Ÿ(Æí{åk"5€µ¦´;áFñÍilZµ–°ó(1ÏïfÌí•„Á3j=û}æ1’™Þ'|¢|£ÀOüÌßly ›ÔßÖ\š÷¿çyò1E¼ÆrÿÚŽÓãHf,G‚¼ÈmâdDîÄDfÎB óœ²ð?ÔÙÞNÃ'bæûGÚ¼!|²!Lí¼,óÚ} HQë'õàVÞ`2ÉùZ»¡zÙÈ}­~ù·S´þyóüQaxÙXyïÉÛô8cvL²Ô®™QËß™"|b1·³“þï×ïÊ_þ.Ì¿íÍ£(ßo7ר<®ýó–B“rßÍØ£A³7¤úcùâ6ŸüNçî½J$ÿFzº“ßŇçù nÎц"ê~}”?¤D‘ëdLV¤9‡æ[±9lAFwœ²ûù“6›àå‘2 ¾xGÐx]¤ÿ}¿§mýÃð sàµvT@ û줒ãÍÉŸDQ­ý º~ùJ7Û„üòV(ÇSÔ|FýlÌÿ3Kð­ÉŒ”G7ò¶ÄÅÿË3Èk·"WLÆ…ùÄ41ÿÛ‡\–~óâþ»Q:ý0 üF ÃÁúíµY?9Ðîê!§Gèƒí×GÅ¿/(ëd/ ‚¦Ãg6A8=içè’«*l1餯 ?E"ìÓ Â™qަƒAbzü?dãß± ŸYŸxÁüôVYRQ1.zqøFŸühR…×R.‹D±'DÑà9ÌzÙ¬J\ÿM&r²3ÖÔÍ‚âÆyíÊ7¨ü>Œ~c„yŸNmq_>§ñ|#F1‡R)(Â|OGð£WÇA¹Á~¢Y©ëô/ ‘L~v:ˆš@[¼y°»?þâäñ©x< ˆŽq{u>?_ÌF<ñ×°¹(øÉüÿ.?±Öñ p-ù#ø_NŸøJL9Q#޾ Ò´|û>4âêáX÷ïÍ™›QªÃœ¦›®Î¨šY»ˆJu9Fl¿$kyr&‚:Kd-³YzÃît÷Ñㄼ•øÍ0:]+>fˆª³«TtïË(è,ÈN}vÊê™v°¬™‘NßÞA]ÎTú£ó)É©âf…a§É]­÷OQ¦E–ÔJGÑ!Ï|¡•-?|y¸¬åÛ,›J9ý^óßyà¦kSíõR¥?OÃ2ç9‰Äê*ÇZ9ÍR×ßÎ)S—dÉ1NRLÖ¬9 ¹“–ß›½;|çG§:žçUQ­§÷[î©ð ¨ÒÔ„Ãú3¼T'Ú_¤BŒáXÑê"’çGÀÉ|³tdêZ™I‚ØÖ9âæ´g +, ™ TˆœqºÉQ•¸³ôŠL¶Âf5„3¥%…ÔàŸ§ãˆ²kO²Ù†°°ÊÏ 0¢ÇÄÓ”aŒcHZx0Q¦(QR÷JÄÀBi'ÆUƒ+¥¥„cb·Ãcdce«E K ¦°h)—±€¾b¤ÈÒõ®vfs‚嬆˜9gk}˜B]>¦1€SIå%Œ01—wÎfj4ÆÆ&†8«p–v%†8Öž¼e‰Ö7Vãda†á‚·Ãgb3‡qÆl’M]0œrƼ²Ô±FêêXáI\táÅ+<6Ã.ñÝEe,)?^Ýíï¡8we5jø ÅåŠp·€#gßsä3IÓ;:yÑ'TM2<œàüZ´rË5 c™ñ1錺“( # aÛ#>Ø ·V|‚XÌa÷]\6„Иw?Üd„¨VsÈÎa mê îv|C‘¢Q•šýã :} ,MŒyÞfµÝXÂz—Žà £ ´Ð‚àðx+ïkï4¸Ñ÷€ûÇÞ>ñ÷€ûǸûÀ}à>ðx vxûóï÷¾ñî=À}à>ðx £ïkï¾ðx¼Þ×Þ4}à>ð>ñ÷°xÐF{€TáðO’y¸z¾{ñ¿»ø#êx¾¹Ëð}O€£Ý 4>÷`p{ÜÀð> ¢<ŸƒÛð]~YÂÙÁúç] £o  ôº¬ÖZÐÖSü <`>Ÿ^mÛþ)¿húÖkD{3(°„Oߟa WÖF´ø&ŸÈŸËÎ C|OS¼?ÿ0ýO•¾ØûIò6ïâmÜQ'÷ÌÅ¢‡"ÓíüîÀOŸŸÒ§Ûoÿ˜óäßÄí¼“ˆûÉöFY-ü}¶dâ&°.¥LØI9d@üË´L m1ËüyŒ¦bÒ_ù§çÍûp•ÔHzà«í¬|"Ñ"ÿk/¶ÏÙ<ósyžcšp¼@DÁ´0cë/fÂéý95vüÛº}½ ”ÈÔI—:ïÎü= ö¹è¿ܘ˜ˆæ9ÄegöD(c}Îìc’Eä_ÎdJ‚_¹wö^`lj7¡Íñöž¾ïŒ×äÃû‹áSù=zùø>ÛÅ;¿§†XïÉç#YxBO#‚žo?Ï ‘×Ì\^ÍߦÄNå œù‘?.sn™AËcsnµ†ÌÄP¢À¶™aœ€Q‡çµñ;òIR¥Š2̘1"›5À§y‰äûn_úßoÂy÷Û?ϳ^ÆwÁºÌâ/Óüˆðµr„_âÈžÆãgøó/Çç>fû3žÏ+££¡jJŸ$ýZj]L¨ââ8¦ºü9¬ôƒ£ùû/º•ÿ æ º …0XÑü§quàë t/H"lSXЛDŒÄL0­ß6hQÔÞTÿ;ò=‚ÚŽÌÎ[..?ß®l ç‹~܈cžÿ<ýžÛífY¾ßþê Û™¿:ß„ÉâyÏ;ë-¨ÌýZnþ¶0K2þG™'y&þþ¤Œm”J#ߣø[1Ïœùg4Lçþ[±/É'‘$3Ï+oö G_hëRÿçl£oûûåòÏ:0ü`Íß½p‘ùD\ÏìÿÊÇa;ÇÍ ;úw¿Çâ6RyOÃqL?9E‡çöáH2Ë´íBžäþÝ?x/ßÙæñã=ZgFi÷ëò0pZ¶ŒÀÜÄålÈψ ?Äüòy¤Š$Š~ca¡ªGüü~l ÊgÙ¼Ägö9Ÿe²ÿü—äâŽuÆAüg$È'yįEùù2Žâ_´94v„ÃÈ@ ËP Å}òḷa<ÆÈÍý÷‰È2Ù?ØʘBîp#¯µêÏÆ¼I º–ÎËT£®/Žt(ÿc‡ÉâqÛF.§GGÆÜã‚‚D,W°D,„tJÑÎ#ò.ˆ\…ð1òxy‘zi”Zýw—;ˆ@Ï—'+©¬Šyê9Öþ3ñ“ɘöÁÊ£ÓDÓ߉„NŠDzÀß#6’•*æ#Gpyžñ0tccÖSàÍùÞŽB/^N3üŒ„bI>4)…&&ü)ð´#“Áxç 18¨~ñ#g¢šIÿÏôÒ~ÄŸúiÙÚvEß–ÆÇ<‹Ûˆq“¸ÿv2®ŽÚäë…… êXö»?Õ:3ÞjÞQcô.s9äiö’^½<]Îx £Çüñ'£“9œV¤)ŸÜêYJË̤»¼œ4éÅÔðE… §}G7¸9Ù&E1ÉiŸ³3«¾ õ¯Ÿ‡Ýw äúuo¤)Îý"²åbÝÎÓ«£é­¦0¤ïËtDæP5!2ȳ•õ7ºeD¢‚­KÞL¸*­¦£ OggSgBVXU¤÷Ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿ1—óY}ïÜð&X9kçéaÍvP¢r{Ïl²ì;ÂsÛa+gUH¥÷Œ¥Ç{s|ÒYÈTÆÀH(9Û$]ób>V¹XI*”×,Z·«\Œz{ðw¿uó5¥#¿…`â-Γ,±ÂÏŽöÃ²ÊÆ_‡X%œ‰×á(þ­)sµÝwiŒœ:|a‘Ø|aƒ$Âï~Ìñ hYÈÇ.ì{ÑÞH¬å"ÿÕSAOìøó¬ŠSÏc4>kdD¢)ù¨ÇœùÁøPü‹,3­="åPëN`u•HüÎŽÌw¡Ä)?mvnß‹ÎΣ¶ËÑ9ó„}Bd°ÅÞ°t°1‰4§mLâtãœsóæ¾°|þap¿¥¦B2þÒ¡Fd¦\DLþÃU³ŸZÁf‚Õ“G^²ªÛ×÷E…¶(ÂŒcø*`íH#óÞ2ã.¨ÃêcØÉþÙhòÖ‚A?m—CÍXàQߺÒ0”X„VÏŽ½ª~Gä-Û¶Â l÷ì ¥¨ƒŒ®`ÄGE’$%Ò—=Æ3©XkÕF&Ó`qRgœX²ªÇF<Ï‚ÄγS1žªÍgiŠ×*Ý[C× …1ÆK,,–Y9:€œ\9âµ½¥j˜BMFXcˆSˆpÅ‹ÊBÝBY8qÆq§æùcO¨À‚’×9Î!L ÈÛš=|šÅ‚gß*¡?8”'9cÃgS(“ãkàè S««#Šñ@ŸÖReKX`ψHãÖ,0µeÎp°ÔÆþ¢µleŽxk¬Ï3Æ2à +T¤Ì³ÿ5à `\¢gÝ(Íïº„Q‡BÂ}Gœ²„P•Î[¯¿¬BuFvšù ®[˙ф„ï?Z»§2äiCàã éûÎÚ­ïß ù“ã_ÐŒ¹ÖjÞBAÉ·5ª>("ýEÀ÷÷éÍÜTµö»Éñi‚ceÉzÒ,7ÝêŸJ¥ïª|’$¥ÃJ«]ïŒõ¼’ôçƒ2WPpÉíûI$Žêz'uä4Â*„8‰_],¾£Ú¯šT¯TÕMƒ‰ŽQÄxÖäŽOÀ7Åår“®tßÀÅâ’NyÞ½®þ7à'Ï>=?ÇàÜø<µä3Á BàÁaøQ:SØDá‘>†QÓƒêðlèìðøœ«‡äPÅqÇ]+Õøè7˜ÎsÕìO™Ö'I:MZÔj ¦Ÿ#›ñCÙÕøÄÓççM1ø¿Èl~Úü|‡_B)øÏ‘L:4/À÷ÎÛ_ýÄæS®¢Åô‡J÷Ïžt^{ãžõ‡uyÞ}ÑésŽzO#¬q?gÄøœÕíðs™×N|ÎÏ™ì¾@õÉÿ'Û;tOš<ó=¬å÷ ¾^³Îx¾x~î¿O'Øù¬ùCϳ姣âùø–ú; @Ûæ§Ìàxñ¨}ØÙrçÐäüœª?§‰úωÜäàû€t(yC‚Ùèo—âôwÏ;؉ô<™â§o±W`pˆÒ­ä‡ÅS2v|$ÉÛô¼6rârú8>-9"œ5ˆIóá'y¢ãB®ïˆ¼ÒsÎŽ)åxJSµU$O!¡23˜+Áô| žB{å€d;ÊLO³déÃBÆA£K=ôN p<àÜå TwIâo¾ûï¾Ûí¾ß}¾ß}·Ûm·ßm·Ûm´Ûêvã¹Îcm¶ï­­¥tm¢uMÕÝ»‘m)È€Kºö€By¥9@¢AwW½ ê÷¾¸ú¼w²À¼&ˆ§JŽQ^+ßO礤«êÃä]:œ].(QÄ$IЄP—8!'ÈŠ\”](ç ’E]ЇÏ>¨ï‚Sï<óï˜3Æ}•+Õà€J©\¬Yc)ʱŒ|Xν^-U‰2   B T®–SŒÞ-5šbwÉpä0"cƒQ¹\pC(ÎsÅæø­­2ÎÆ ,Ä“T STl76ÄrÂ*(‡©á@‡©T B¢û°Ù]ÔÝ7+Šãp°\n6E‘tTU±}ÖÝX®ênš¦ç¹\.9š¦º.¢êªªêñ_â¿·[мâ§àœ åb–€àl Š1F 1UнTæ¯b‹£@v>ðxûÀhûÀ}ãï>ðQ÷€¼Þ>ñØûÇÞïhü}à=…(vî÷€ûÀÞ4v>ñØûÀ¿x¼Þ×Þï÷€û€}ãïØûÀ}ãïx¼Þ>ð>ñ÷Ÿ€ £_2?Gà~$|Oø ¼?Gàì­v5­v÷íØ=ÚÑØ©Šü3ň? 7àüZ3€]| ?áð!×í?E2vß®cã¨[Bè~YßœSÑ­ [ÏdL Oþ´ÖZÂåçAŽ!u´Y!Ù?ûûBŸùçXk Î(ûìËÛÄÊe?2c“· # txü~’ÿÛÄNm=›m–ìL~LeæÓ`~§÷‚rèÛ¢z3“¯˜ü~lÿË7îû3áñ±íåLmxu´kHؘö™æçœÏ\è_hêm‹at)7òŸÇ~O‰Û¿ˆ„#É÷5†Ê#ln€ý¿7æÄl G‰ZE¡_áüsh™YÇW`/ÈÛjA¶®~|Š„s#‚ñ³Ñ¬9>LÁø}æQ®U¹ò™Ìµd áa·ÿ(f‡ú‘ÁÚ`ÖåùB ~ï_¿ÿšAÂÃhóšÀ_¶ìn ’!Ö^RÁõg€þÇ/®Å¼Ç9ÆE0?ý~}a4Ï'Äm(ïÎ(¿Üͳ‚(a™‰7>Y}£7áµ_T4ˆþÁ ç“æý7‘’ñ¬dvZ€srýŽ.äm7‡ës9c´g¼?9ñÃbc¿»÷mƒàDÅ„p“)eu÷xfQðm~ ¨ÃÿÚ„`[Aÿ@`ûî3~?ndÇ: ó‹~f¼@8\‹¡;ÙÀDò1sÌK¢'f|o3Ìsƒó!úþ~¸¯¿Sb çœÎBQƒ.³úÁý÷à‹Î7ž¹ë”vÛ¦oB‹;j°LmÐyç3É|üÃø‚0O##ÞJÖLëCZLüìÛ†\Ê;þ+ äÅ 7ïκ™~?T3Ø cZA> ä†~ßcpñ=ýöäý×8ŸÙŸÿ Íçx¶„A^ÇmL³4uŒÎýØÎ9àôƒ:Aòì°þ¡ó»ðïÂ1õ‘±cbwLù``gjIe»O›û'ãð~NñÃÌ!Oãû5´Îò}‡æóÃ"ùÀùãœïÌŸž%û¶ìsqþOÁ.gäJà»/Ò|”f5"ó”K>ev ŒßÀo'û©S“¼ÙlÄÁ;ªäí½ |N‹}¦ Q,QèÁŽm­<£Ynq~6Þgÿáç¾Þ2Èþ;nÿŠm?æfàý~`—ãó}¡øIð§¦#Æg[ˆì2tIüôcŠxä WÁù)yƒyP¿Õ‰øD—àBßYåç{mÀáJ÷õÜPqx•  pïçþäãËÿn?``\~°S‹”S_Ÿô?r@Äüö'¿PÀà"MqCò°+ ÀIß®.ôzAFI׉GôŸæ•ü!R¨½þó©ü¤«ÞWDM›¨4Øâ€ÍúÃÁÿ䮉Tççæ’°óø‡ëÀ¦…KÐyÏOë÷Y—ŸÎ´Ö ²ù³Šözhu+ÃŒˆc=ž('ø>Ƈîycðì{€,!ÿÇÜZë*×GË~#Œ{ÈÛ½¿k¿?}×í8*’ÊIÏZ£D†¥‹µµ?aKbÇÄ™¬¨ýüÉÂxv¢•gK:Ô‚\–ÛôðL»l¢d°3«yƒªÀ]Þ\߈޵Yâ)Q£òU‹\¤rÆ'J‡ØÂ{—³Æ?tehɪªÑ§ª[„‘nvueÍÙx˜<šà¡—.ZoFKŒ²ü¤¬úyD&<ï2å’HÛš_¥‚YO3%”ï¾Ùf1ܦ¤öD°ãH»À…­…)W‚…o+Oâ~iŽÆÑ‡ÎêeöcL¹šÊ®£n’‘9×Ü;õf¹š¡Ãök>&sîy%Ðrãe}a/ Œ¢ÁJÜôëjÔÃbÇ,¯” ©9*Qb…uÒ¬Œ(Îó÷?û¬K>feß²©ÏîŸø}ï5ñuiøuš—Ÿ_0ûûó ýûrRŸ¥qš‡¡ÌøÅùV\­s¢fuIJHx~e]¤^ü›>–.ßwV$úQ„šs©Ž㮥‰/xvYÒ{†L’圬üGï’„;ï嬢Ÿ’îy'R³rH›×uº#ã›p"¬Åv¬K&YËÂéá_—¤Èý’r”8XH®âÀ³Zù®üüüæ›-J± ì2¯¼©X¿&Ò t“æ¨æýÊby® f¿hý'ŠX˜ß,È"·gÖ`f0úËçŽßÉ„¹ÚÇ—&DÄîqD(É"U1×¾øô¤M¡Lªy냌"{#å„ôJðîs™¾hÆXa…Œ>puXâȱ–kÆÂQV]U-b¹2’£ )gn±œ¸ØQ~1šsÝ.©–â´B=ÆF,kÆ.+&r¥Øå`dÙn¨•à KúDáI=Ê9̱}Lቨßä`ÈÁ$‡?vÁkïããZè8ÂÌj7ŸŽG¶‰“Öhdaú7]ùЬ²0çB9º•…Š5ø¼P ï¿QÎÖ¯š“óŒí#ôƉ„$nß06<wä©q0ü©J£a9óò]Lå;í¬U0r™J5¦%¥L‰Iþ8çUIÓÞù§#¼žt)Ï›yšMs‡!ÁÍ|ïˆpÉíÇŒJ·˜¾ä;ªòY-Ul«"8ôálÜ”;á§8ð­èwz›­ÄxS·Èìú9§IRxNMàÝWÕâé²N:Îò"GàF”b{¼Ó;ž8üZÁðˆ Þ·ñ?·“Ñìå'½÷~‡Ùø‰Éö;SOÈ¡‹9çž;Þøçž¸ä7}Bu½_)>'ÈsަZ|ð8>oÄã~!4‘ñ¡æ>å'…òç/¼? +ñŸ¤YÃ(üyøeB/$¥|¯´Êy:/;ß;ñ‹Mç®ï|ó¸qÕ œø§«:ðŽà+©ÍæóÏO‘>'S–=Ï©+¾ggÜsÓ,>¢yøù¸æ|ŒÄÀ>#aL<šD$O§©¾å¯à4:;žŠvÃâ°ò ‹Ú•¯Áb¦-—£èÆø€éñø_f?§Üòûòø*œD/<ÐÞEý=??¯='^´‡Õ ©ðIðy6žJ¬<5‘[P×D¸IÙg ׃‰s-ø;ò¯­ˆÉðè=)1ÄhÝK·¨âœ½¾À$1ЫÙôe@F£Vy •¹½Æú©æuÏ·ÍçŸo<ù¾§3×>oR§O¬øÎŸgÜèÓV÷¼¸v|€OFSÐqÐ)Õ #¦ã>ÇŽrGŒòx=_oD9NDøAú§$?Ç'Çr;{ß4›¡ÞóËìä×OggShBVXV_syUÿÿÿÿÿÿÿÿÿ{ÿÿÿÿÿÿÿS€õËv¯`G´pCˆîH05>ôBCœŸ|ÐϾ_w°Øq —2@òcÖñœ¢5(‡Jè…ìÁäÆŸCÁ¦>¦Ûmöû}ößm¶ßm¾Ûm¶×Ûh9÷bí¶ÛAÙ}Wt)ÕÙܪ¹´©êà÷¢ä€ ¸áNs­:‚©Ðz” {'JàžSƒU™˜¥+Û7¶ß0a»„yì{01³=ÍŒáìÉs¸Xw rwAÔãÞó{Û{Ò€‘8]]À¨¸ ¾ùïl6Û<ÞõS‚*].:P§RuÆ`ñ‡ˆžaq÷mŒÌ=Œðpûà{¼}ãï>ðy€}ãïî>ñØý_~1ó¿7ài?‡à/~9ò8 vÐ{´}n‡/‘ó? Çà‘œ£ç\:?ñ-KÌp†‚¼÷ˆæË¿öÿ^ï_Î ÷ü:ÙýGÖA—_üësñ¶:GS“hkÚsy³2lÑLsõ8èÜâûnIÀ"v…Å·ó‘åñûÿí´gƒ1•¸Dæeã‘ñYe¼ùczÍÿr6ÖS³ö(ÉÖT^2Wù©Ø2¢9Û¨ýý47†2Œ1¼꙯ƒXnI÷Ëöžò|í¼p˜"@?q±ßÂÿv6û>?Ú>¬çˆOèþçË7æê6iÁT`cÿú0þœ²ÛÅà9€ù)"Wçý=ßÇ6ô#ïö¿}£õ´/”û3ËY)ÇÇþej§÷GQ2Oñ´/ÌÏç÷æ[|â)'#wâ˜äÞþÏ£øAÙØ7¯ØQ—ŸÌ¡ŽF&<X§ýç#ôÏ'f~Ü,ó :úÊýd޾?ÁÉ=_à£ÆÝi \‡pÖŒ¿§Ý‰Söä“ýõ€­Qö^•×BqÅçÎðxäÁš=Fù°È^;V°(ÿ1€€ê ¢ã-?6eÐö|LyQƒây3oþ#¡=zdãøñ&óF‡Ä#›|Ð}£ï¯n¬ƒ—šPGiÿí?À VëIæó&²"ó£¡QÐŽ‹ù¦T´ŸÓÊ0¨áÃå–]ƒàÒÿôÌ{äçC·’Óìc¨ÿ±/Ï1 àcTñ“‹¨\É›xÈ[II;åñå‘|JEþQ!ŽdN:ðEóŸeû®ŸÓÿ©G[=?Áüüä¡rø’ýý'_}HÙoó_eø·2À½æ-þÒ “ ÇbÓœÁ¹×=çT€ëz¢V?€ç(}_çžF:…>d7üË/ã›ù$Hüá´9 þ©&ãùÿGSrIØqØ}Dr/Ë4KøÛwçYoYÁ9Ï/Èÿ`øàß¿71ðLîÁçðiÛâ²Pº:øÿ®ÓŸÊ÷ñN“ÄþtmÐy€H ÇïÏ=?2…ÏFTƒùU«pf.N²ÖY¿w˜ØÀô̰uù #ù…äœð¢Jf$3#£õ‡Ä¤§ÿŸþ¹Î¹ÅÍ/$óÃıØ, ¸ÏAú“bß‹ì=½£˜~Ô/„õ×Rÿã%Q¢ZY¯µfhWps¨²¶Üþ³­}ûßÚýY­C/Œ«]:x–Ik‹4kã P‘ÈÁJh¸åÖÛAd¡4ÿ¼’íÐú»“½ŸêOÔë$ŠÔì¬K:ÎHø8–_Ý)ÇðH-çòÒ%™£íã:F£ šÉø~c9ô~äªzK]¥O„¢é‘BY~ïyå™'IdˆäéS Lh}çá÷¿ž³,*—Þý¦_'%/{Òzl*4ÃíˆëácLø–x°Š_ÀêÅùö¾V²ë…”ƒ©5ÙèwåÌéhŽàÃ%a®-¿~Cã>êy—…FµõRT'µ¤L»4‰âñ|çÖǾ(”† 2>1ý‰ä±Q”—€™K‚’xÄÖ¿3I‚Ï„peÈ¥ƒòœŒ$e çlj‚â㜌ˆ,¶ÛSO¥1žï ÷l“œ•=ú©5+O[¹œÍ?%ß#§R9ª9ÙHOØåptÑÔË7sOŤaÄÅiõÞHËLHû®xòŠß[FdVÛdü‘×Uë«?Äp<­~üHùœªcÑT¤ña»X“ë…S7»Oã½aÍeBPýö›V¾ÈŠÈÊxÏó4ï“›è²U®FýeÁÊ1¯ÎÕF⌿~ìøÇ±‘ñ@õ¿H„zv•S•ºîgdJ!É(t$±Tg jz-ô °~ÒŠ^ü¼êx&³•f¥FEFÕ['J1—¡6§$YÌg8N"µŽ½Œ-Ì å¶pVØXÙ†±ÇWA&.bÚXílвÌ ˜by>àž¤º˜`eĩڹã N‹=Øú9”ü4Q™%ä­@'ª‘HVk #`’T’g 1ñ´%›|u$öÊf°zÇtNtt–abÒŒ–8:œH}0²T»xæCª<“a[Êží{—¯z†ŠäùŸ3§âü^ˆ>ÿúd}Såüƒ$fD>Fž/•=˜)>Ç}gVÐïyã®y¾Âò—­Ì/<é8=óÒg¡íé먟Hô—§ó~‘ð‚}O¢aôóQšE>«ìáP}.z8?“‰í‡‡¹Óàù?S“èo·Ê8U; î»èýŽ=ÞÏo§ Dvø;Éò=3æ|ÎZüNͽŽ_òW¢¬»ÑêyJÃÇhó>µ9ñoËÙèîýC{ÝO‘èìЇъÓL_g‡â}Bð zuÐ~g©éF’x éþ¾Ï/œô|ç4 pÈ…0¯¤!²3Á¢x&ÑäWìô/ÊuÇS³äüŒ}£ö>@ó x笆؆w¼Òs Îç|œS””‰Â½Q ÃH‚½¤TŠ{À ‹ð>lÜŸöåÆ0¸D9L|¡Ëé§”j„B'£ÜÛo¾ß}öÚõ æÛ¶Ñ–Ý·•ŽT"jéT TP—<÷+šS«œ‘"þ«À¥w §ÉrãÆô»ÕâêwÒ]Ô ‚Tð’¶Êêžl9)ñì3ï 2‚)t\ RuwÐ+‘è"ä èHK¹Î@…Å's¡ ï{!€(a¼6À0omÆÚ*µz ø\ª{bµI¤Hrá Š ¦$0EP¨*•ŠåqÀmâ­Zk4™.œ ALš ÁŒŠ"ƒQ±XnXÆÕYÊkjZK² “¢"¡Q°Üq5â¶­M¨XTb T¢*“MSTÐõ*OA¨T(56&ª*‹(²(¢ªª¦©ŠaáêU*%®k"ª.ªªj“7=ÊÁq¸Ø×E‘uUUWMÏqº.@xûÇÞGÞï÷šx÷÷ÀûÇÞ>ñ÷çÞ>ÑØ÷xÐ ûÀ}à>ñƒÜ}ãXûÀ}à>ðxì}à>ðx¼Þï÷¼¸ûÀÛï>ðxÐÁ¯çŸ€ ðb~ï­h×»°hïhì{ƒZ;OÀeø?—á9ÚKHk-4¹vÌ~c¯˜ƒ¨-ÁÍh¦+ÿ¬óœOÖ’ƒðÎy¸/`¢{Æêgó+c™”#Â/¡æ? ~Ð æVÉù~‰Añ:Ñ]B)ÞdÛ#ƒ-ÈBìQŸ²ó•™o?X[¼í–Þ³9‘(Y‘´¿¹ÍÙcc˜è"r޶ëÿ‰ö"u¢ù©ÝO~!r±ÈóÈY‡2˜ÛÒîeð¦OðÈ?ŽüÏfz~bb#-@£Ã(ŸÂ¢·¨ ÷á˜.ŽþBëÜ¡IÇçá1þÒ}èx€\‹ß–óØÛü¹³=ùS3,“ߌ3âf3˜Ê"b ÝNÞzˆÙ ë¨~ý%/ì¶>]yÈÿ.wýc.ÉëŠ_™)Ç>;ñGŽü˜Ÿ´Úç£gìB(=±»ú`¼~KùçÖ[£yÚ5ì§Ç5þ-iE Ö^~Ëm§øÏ„ÛÑÏ<ëß2(š+l¿ †æ'><‘œ`vúö“|~~@™œ ¯‰ûXŸÃó¯qýpÖ¢CÇ÷Ç8üÜýdC÷ÎÔX¼&eOeø§#9Ë<äBø?ÃÀ„¶ï”‘;›±§ï¥f|ÿüžý⤠=æ’¥{õΠÇ]ç¨÷ÏìEÙù“š#ÆD¿²˜êa×_ó‹ƒø~N“—8"œòÙ³Ûæ%ùßÜø‘ÈþÚ%þü~|×%€Ÿ1¿$‰]5—˜#gáFƒ7‘·ößobèâû~xþ|Æê¼=ÿþA3ëü#ÿ´÷©ð'còzû&ü….üˆ˜ƒ>1e³!¿ŒJþ?Ÿ™wñöòõ¨oßÞ‡ñ/åÙc¿3ŸéÛˆÁY@ÿ+Å„KøÎ`ø2­´d«H·ì‡Àu3™žÑŸëøgy`‰GSêAOggSjBVXW#¶‡ˆÿÿÿ™ÿÿÿÿÿÿÿÿÿÈÿÿÿøÑ*±ÿ‚5ÏÁ÷ýeÇ¢xŽb‰ Éô X˜êå~§¸^w€•ÉR¿íÂÑnsDÚpŒLýyB3gÌ/¿ð˜Á„óͱ‡Âbq“<©ÓÈ0qÄpøâ?ëGAФÁVBAÎXäψ­)“ϼD|ïe1_‰$!!Îxã2–Fn)Õ“\àªÉ“’8´’C' Ûƒà4%Tݬ]ùjd'šÈPë9v\ù…LƒœÐ°»}!ù’aóö»´T^ÂË5Í mŸ¢˜)4 2rÉÎv¥và|Ïì“dTÂy@±œfˆÊii9ªï rå˜N«e©÷\EÄ•ŸÐY!öl[¡¿çH?ÉC£ó Œ+>‚°X kó?¹üZž±•Mg“ +SvåÉË fEË$̦i„åñ‰žp‹*cjÕiûFe!oz³ç ©‘È¿jÅîõ1¶d¡‚ëÄå3xXÐÝô‚ˬº,œÌqùÝÂý󫇉”ª:2O9C Ê$Ë•j„“BíK aóŒ‚$£®h°IÞòù•‡ìjPáY4àåµ>“Å_ æÒ9éç|÷Þ—€+;缞ð£ýܶåesIÆó"‰¡e¶iò£*LýÊ/‘FTÒáÇ¥cŒl–ŠÖ` (‚1Rª«è d,3šÁ g5ÎK0xºŒñϸa:Â3À`°Ö=z EbÍ [Ö&C…=N’™)J×'ФXO§{”ðüÔÉ*i0^6”RH°ÂˆÌêcÁ†8cž#t’ŒñÇP¬|aŽA‹…{9@>&ŸS^Ý? Èéì솟äœèsÏA{„æµt—¨Nyêyã¨ÎZv³¦Î“,íò¨SèjgÊrüŽélàÇÙ¸Òf=tÒÞÚø|¤‡­} <€ɯ±SïÁ>s®·­xÁí^»ÎƒyµüÄÕè{Ç)”{o\äòøïOÖsk÷ò{_—³Î½¼Ÿ'èw¼žèòSÇ«Å4ô/ü¯’œ¿ïBh¹à¤!÷Éóêtö|©àúèpS·èû;>x|DÐ5ûžÞóZ ÁçDˆöû{5þVy>»ñOƒgäQñ@=?ÇÑÙg§©NÏ'ƒÚžpYØä@í÷˜Öfz0~p™½Òà~ˆ' ºðxaåèûšzpàO(}v‚îw¾47޹E9kÇŠPyöà'k:YÈí, >‹§Á^ÕŸ'äÌâöypâþ' i‚ÛÄÞ@Ò˜aøYÐ4ê‡:€¸A˜RÏ/¾îï¾û»»»»»ï»»Ô°Û1lAÞêœ(£âI- ¨[–«ùG¤±´=)µA²²ƒAtI1è(+E½‘¢žŠÆ%çÑÕ”=)‡Ûƒ¼÷Àæ¨\‘-…ahvDÙ$®E°¤Š,hB(¶M±¦-/¾Êc8jsÝZ½kU¸Fj|·å|o„áX~¯V‹UbµH¥LÈrîé$*ò ”SK&1*–_lscUæÕY¥R:AJdÆ BãŽ1ŒfñI¬VdÈD†0h5*…ÇRfc5<=SF:¯ªÚ+ªº&ªh¦©ªhz•¡A ÔhН6Õ\WU5MSR…P TjbÔE›î¶ªê®Ê±ìz…BÃa©ª‹(¹]]Æáqš>ð£î÷xûÀ}à>ðª¿Îü€3ð~ïÀø-B€h4|ÀøOÃí&pÛ´. 6\¸‹–®Y߯2GÏÌ ¢K`矎Ø1×Á!áB$˜] ù<ãÛÏüÉM A­3ó¼ñyŸöÿ÷á;£%/Ó?´¿_ÂóÏèÏ0­˜ýžMž>:†7ØëXf¹ç/¬»IŒÏ±±ãáùš'"é?¢zä›ËóÐïÏñqnÉûfxù–ѶûÏóŸë £Änk 8sËþÖ%sùfu€g9ä¼é$Üíß»Û?3¿-iÎ@rŒÅþÙ­‰/ÕÄsÉûû’ìFOÞ~ü2ÖFAùÚšÈËì@¿SŽÒ`E=I}‚ñ3žy[¿¡x|¼ˆ~FcòÓ›E€ó£"g¿ ò(~e–fh×D>OætË &/ëæ)BtýË)9Âw’ ¶òQÚ±”øÚk0?9ç~A×–f6粜Lo<÷ÿ·™ÚŸˆGOãù]ø€\ æ'\¸ÊzøçÄÍË™¨È¼øqP™ÝŽÅž6ÇAæ6áɳ™Á‰ão3†v…éÛOs¡?šE™—›ßä0(7Ú'±§pü¤~e·Ö‹/œ¯÷²œö#ˆGÍü­Ûñùs‚û`ÁÄnJ… IB:°ÇÁç‚êTÁÀi<ÛYYû ¿ØÞêä?æc}º[¿³Ë/ò¾ÇP§¦>Ñ.Hÿ£¯?4d¦ðÊhÚ3Ùž#aû—Ž£À£ì¹µ¿r$™‰ÜOîmòžÐÜÔyø?œ™žçô÷å Dm/íP_Œ(Þ~LjÃñ~üŠû ñ&Dg™ödFLB×ý<ñúF® üãÑóüR¿rA¹5Cî'óÇ[ËópÏŠÁÏïå|Ô?2ü3œpÉø?ß˪ß?™ŸÝü£wá,QñæhFÑ3–[| >òShc/·ø!D(_i$~Ayã+fH˜\3 õ¤ä¶`‰Üÿ.ß2Éùå‘¿@ÇúŽ'UŽ¹Ï»øó²ëXgš„{ sÛå'_ZY9 ÑØÞ ØßîO ìR$þ…×>žØSú‚qg¿ŸëüÔï9f¶uúðÎuи~pþQŽÎ²Ýs?žŽ¡×BìvBÅ¿™èd°{x;ô(]àP ç-·ç? aøøˆè:Ñщ2Qû’ºó…4èßÊ(G?yŸEïp˜q~å«.¨)ô¿ä< Ïp)ÏrJ墉ëC‡_£˜¯ ap£54ˆýz/ð£ü8p]pâóàÏCŸ”SÏú•Ø¥Ѕ߹μ¡ ˆƒ°sc gbÿñ‚œ¦£Ý×J4,¿‡Gxìre,×’¦Ur{¤¥‹cø˜Ç"w+]7œÑeÀ¤¥—:ÚÖ5S‘P©cIgÌE!óéE‚ïÎd²¹ž\£.rtB_õCeE`k"Ô¯“®0rN¸ÈÆ)2Z¤ÊÍ&gÜQ™YÌcâMx›C)e(J1r~ø Ãój¥¦lÏ%Ø$dr¤)~,%â§\3“ŸáC‚–7cEýcYýúàX,þœ´˜%ØÂkïáú˜àsëø¹«Æ>’Ñ¥*AÈæ©T‰_#Im4ǵ¤$­Rpù”të‰|ùÈÆv<æd§>ž —S=’vgu—_°çï‰;-dÑ`„ôQÁ…*tŒ¸S;»±ðSê†GÈÁÍöÁ8q’¤àÝ÷’k9EÕ±õ²Ô‘À»<ÕÚÊJÕVx‰™àÉE!9¥EîsÑ*©—ì}|×ïÙ¬'>þ¡ûY='Y’Œ±) /Œ$pIÏñ®}aÍ%Ý}×?RµÂÀXè¡%„êœï}×#n„øÕ!—Sâ'|PFK.¥²­²¶ä“ŠH…¹èzP6VYZ&#‘*e=uÛI%öK˜ƒÐþ¥ã '¢Ê4‚llugH?Öm›~5ž>$†ë´ŠI*Q’³‰šCN1¤ŒqRJq1‰Œà£L3ÇIY ‹; œÛ9˜_&ƒÐ#‘kR¹^ók"Jç,‘q“çá²9Uνx½,1g=g[1O.À!ôçó?WgZÞ‰‚} ؾÚG~>'…>Å‡Ìæ}S®:„/1œÅí'·ª=ïa+Ü¡=Îi:Hê1æ} O·Êv|n8|$>ï¿ ð   ÌÃÉ÷1ÉxLmR²^qè/ä‡ó±0ß=g|÷|o\†…ÌNgµ{¿Üë{%ø,ì/I8yðs»Éöíò0>·Ü~ÀÊ|_ 3³ÂŸ¹ó;Sâ|oƒÑ‰ây ÿ4èø_'Ùåù‡ƒÑöSÜùnÊýõ]uö÷àöÇ—â{>Q;ô{~Qí:(®wòv|™Éåú”ìÓöüÎp>³õ=Bû;>Jrx<ϡϰ~/1zÏgÌ¥5ðQ´íÑ}¾ÈøW”Äâø%Xr ê‡À¿|æùãÆ&Ñì¹á¤tÓ‚Zj)ð>Gà÷w¼ Þ°9ÐëRÇ8áhdÓ{a‘±{ƒ‘LÜ(„]4La[„§Á7Ôø¾_Õ°U9@‚IIÚŸ„8(ž³¬ðÉ9$ù3Ãâ}÷ßo¾ßm¶Ûm¶ßm¶Û}êvçwt f¾CßT»»¡×_äî]Ô¨êí5(—» m*Np]ÁUÑ@¨N ÔD\‰“ª‘¾$‘}E3 Љj.ä¡GKª®|o¥@P« K ] B¾û<‚Ñà‚‘>=ê÷²€‡³@€ õ/Dã¯*Ư½êµŽišÕsY­åKºw’pƒ—(ËP¢hz•OsØùü±ýãŒ"ñj¬Ö¥:A$D¤ !Ph •É kÂ/ŠE&B…¡pÂq‰(Á˜r‚ ÛÑmUÕ]Å4MR‡¡Pª*††ª(4QDQj®»b¸¥ST™©Ë€…F MTUDQUOggSkBVXX›êŽÖÿÿÿÿÿÿÿ0ÿÿÿÿÿÿÿÿÿ¶WU5(z•F¡SXÕETÝM†Æ»üï÷>ö¾ñ÷¸}ãïx¼h¼}ãGÞïkïxûÀº>ñ÷€ûÀv;x÷x¼}à>ðx¼}à>ðxûÀ}ãïx¾žà>ñ÷´7Oq£Bhwà³á~ï©ò °÷vЀ;Yàûžûø¾àŠü_«s©Á¢òóàÇEüÁØŸþF²Ÿ³ZLSÑùï>+à0S‡s§òv†8¸¡øoÈäÀyÞ} Ûzï:áØÙ Ü‘ÿòÿm†snoÉÁ;v3³çÙõ¦Ñ‚òþTH¢&N¶Ê/’#!çï Q»öWäå—Ÿœùþ2ÃÒ a›?nÌ™•že™ù~…ýøË †§ÉZo!”ÃlR:ñ{ô 3ö@bC¿¬R?ŸÜ0 Ä(þ2;ë†Ìíyyÿ^‡ô ;ýOŒV`[¼ú/0A(Äó42e· gäzõ¦ùÁ ÿ!]ýÎeüóynýæÚÓ/þGà}—~ç÷2>aãv%øüßm“ð2à ¿7áñ$?ÏþÜêrÀŽD‡Þ{Göfìs<²ÿ8=k „É,O7Á¾ÄfÒ_$Þ€?>`|ÊæœÎHÁþ5ƒz,ëX}££ pƒq~³Î> üÝŽ…ã±û] à€ÇÀc2óý¹ˆ›þÃò=öõ>ð¼G€ödDÄYØçÓ#Ÿ7àçiŸƒãÄÍÏ57žbgûȘZÃ1y]BŸ'ïÃfX„±ÔëHFãûùÀN,ŃôpÚ%’676æÛÁßËþçßñ+ÌrO°ê{ò¿½ÉÊOðc÷ñ3`zçÿ1#þYŸ&~6‹ ãã©+?’~"o“ûœeÃò·èFk²c÷áѾÐm³ìb>ÁIîä#c™ÑôÛôu;8êGãó"`Lrsç8O±±ÿÁ?ü͸½ÌN®Û“fá?¨ž÷ú8§í­?´•ù=¶ùsø’fP„=›°üDsžB¤ c”(ÓhV¡|O<üqx=âüýºŸûCù^Çü»4¸ÇP(Qã Æš}8á ¦Žy£ãÄ.#Æ&ß­ O1ÿ•þ€<].…Üyýë/‚Ÿ3Ì(] ¹ÔŒûGœ_êüð\ó~¬Å¡ÃÑPQàE…Þk&(~Žù£? êJ‘°ùæ›Â¢yûÇ)¬³tôr“2 °¢pãÃøpØþŒª"_üÐv5cg?f&ã}xÇñÏçW?x× Ó9f{c½ï3)hŒ¡|r{Ó*Í.ªVô¬¤~Íý2;÷âV`R¦DeÄUg(¤m'÷;vEjU]»gÑ]Xk’'ýš)X%LûnrÁgúãäé~û÷ícú0|c¼ª¯Ñ‚Ó›½'ÇsZ®Ù‹öŸl #@ç—*åŒÓíÊr¥?5ó•>Ôð$´å'ê-~ü‡­OÐO(°‘û?Œ$Ïæ öWíqeÌò¹ÀXuÚߌ¨&8ØÌê¬EŠa–ˆ¨ÈÆ}ï|P&‰„D®|í¶—"è>é­ÎžJÄæÁôøüÂÁ)y ŽSVŠ!em!+G¢Ý‹“'ÉŒJIašÌáªíFÛο˜Í˜cˆÀ•ú»'˜NŒeñÇ:­bÇÖËVgnbÌÖš§›\¾tž·ÎV6dYàëž"ö˜ñzX†Dη®GàEÜðí®ãg༴>»Ï=¿9Ðåù¼g³““È¿a}ºüŠ×ŒÒSòø(žŠzSO3:~!;|£Üì-°û¼¾øèçžiRñêäì@·‚ž~Oè|{æ?w‹ç^U至_§&rºŸ'Dýôô‡ªáÁ¾(wñKŨy ÞŠpWáœèszø‘ñ9P4C9Ñ™9éxç{Ú,úNyæ}¹¼ù¬´— OÔã¥K Íæüpòp`wÏ/Ôê“—ò+`ž p—³¬á!ض½øzH(u€>\é˜Áè6ði߀½¾Õ­+$V8}$}¿7ÙáùÍ=Éà‹NÙÄeöÑž~àGwÈœ‰ô9BÏQåç»_yº †¼ÞÞÏ“Qç_ÛΜ¤!ÌÛó9ß¾}^`à|oJõ; W^{ƒë^‚ëaŒAí]#„@pcUígJ÷¯ ÁwJÈ›œpÊî&¿ çÞ=ç–¡ä@DäNÎFö~濽yëŽyêz çžyçžt<ÞyæžyçžyçCyæ˜Âuǧâó·ß„>å#ZOHªÞR_ÑÖåü=%-ã„Æ­†à%4×ÛØ gØO™ñ>`ñ…㎹çžBöKÄt8áÏÇàö²“¸N“%±a’žbp­œg.ž'fÁÙèìòt'̦[€—Â;¤ÊaÁ\¸yÌU|°úˆ‰ìì¢"+ßÞ÷½ïww{Þ÷{Þî÷{Ýï{Þï{Ýï{Ýïw{½Ïx·m·vÚAï{½í_>µ_]DSîBRŠIóèˆCTùçD@_t:¾)<ô|!„]J€µ#Þô¾@„ô!¼Q¶òŸS`ñ³ ;¹ÝîÎïöÍÞãÏwqÊáÝÛŽá€NsÀÇwww;Ý»¶Û7ƒÜÄ|Q$¾}|B)U÷ßww;Îî3{oomì¤%ô"© ;¹ÜÌí³`ñ >ð{A÷€ûÀ}ãï÷€ûÀ}‼}ãïxì}à>ö¾ñ÷¼}à>ðÞûÀ4{€ ÷Øìzìî÷¼Þ ûÇÞ@€€ÇÞ }à>ðxûÇÞA­ Gyмìv>ö¾à°à9 >ö€°÷=Àh÷÷€ûÀ}ã}€4€A@F :>ð¼hàþÀFc\?™]OÁ’rüc=5´ÞÑî mv4…vÀk@×`ûÞí(P8rð’~µøÏÁ±Iø.tbÃvçÇ;O‹0[ií¶Å¾`\1ð5ëÏ\B̸sòv:9ÔÆ>$]•Ãc뿹’ùyßZ×ݶù/>3·Øe`eþ3_‹®ükÃÌ47apËæWT-)äŒÍ|Ÿçûò5‚#›2ÅiùiÇùÉ£<2Ù™‰… Ë“î_r=£’ßžc,áÏ/!?§}·c÷¢, þßXebŒâ ‡æöBcyŒÈ3ýØðÇô±ÍÃuGnÀ¿ßrHDÏä-£ÊûÀ#u3C}MXê<ý²6…â/;ø3ýsr’bÅøŽ_ÇÿÙûó8?ßœç²?ä|©ПÙåqWù~/ýˆ•ëbxƒÌù+y£1Å”_ã<ÈóÓûæG¡È?æ.üÈ+þ¥ûæ¼eÂz ÿhÙ—óü‰ž…ÔACÐÞÏûôìüó™þ<ÛÿøËçþ^w6ó½ :ýÛsóXÔ³¯×Ymöýöô¿r7¼!§P4ònŸÛ‹R=ÿÃ_åÑ1ýôˆŽ(DÑaó%ÁŽB8·/•ý¡¼ÏÇk-do$~޹ï“þÿÕùÐÑûŸ ó<4â–’d¶Ý¿PÃöÃOöã²ßÏúú~ú<̼\uô~½2S_pïØaˆ‘kN¡~ÉÎŽß­ý0|xuý’!Ÿ×翨8»NbŽyìr:ù©ŽÅâ/ø–¼âÒì…þ?R¿FŸ¿®s˜>8<‹ó2ÿðsŸ#šÃ”rþƒâ8Ó£ãÿ¦2˜…1xÁÌúžºèG!B–šD~#‚Ï²Žº’,Ê57¼e³*0}¶pnÃ,3¶ü £/ï¼Áú–}AŸŒDlþëý¢Co^c/yÿLj ¼¿‚üßÐ9ˆΟŸýi­@¬ŒöÈìs³"ˆ\…Ûˆí>8ºÿ˜ýOëüv–CMN.…¿ü 6¾€!saD ~?_žvõ¯‡÷7>7ûñøü?Ÿ™xÆÕŽ(ŠüƒÿÊI.áù“ö _Üåûøù‡Qf}ýžyǬâdƒ+¨?_×¯ÍØïÍ]¡mÃÊ‚<ìÍö¼YA1[ãÏ8ßïõÁwäsþËÓRÓü;ýç¦ïׇ[“›Cÿ/ýL ŠÈ O¼Ò{gê WsbOy†bxF:Ö–„Ë=O-Êz‹ù¾Û‚ýöü_-ýñ´lü¢EäÐ^yüî.üþ?ž¢Ø˜bTqùâ†ÿ)åñ+/=£ï¬$_ ^#ÓSüéøÇÁ«ëÏã9Ñ<€OggSlBVXY·¨ÞÿÿÿÿÿMÿÿÿÿÿÿÿÿÿÿÿ!ä%¶”°òl¢"HZÈQ+ã°¿cã¯ûA˜³´ÞE;į|_ºý=Ãóï/æð¾ø»X1ð …Ñu«ºŽo˜ (³óË3_òÅöSœÙb5®ºê%{3'ÙÐ.rÍØG±g´À¶B,ƲÖ]}¬YÆZËYc‹$ QÚk-çØ| ÙòYn·Ç#Y-aa±y¿}ÏñÆHf 1&²ùOP?kú6¼þ ÊyÌr/â }ø¾|ßþxËxFöYÔ.[™–sŸúÿã®`ëð?P`âêÛë®_ÕËmýüZ¿\þßú·ÚÐ?Ÿ8ý{WRŒr o‚ܵ¥§"öýäŽXgñw]ÿ•<€áÄ OšãáE¸v}º*ûÑ6·pA!ΰ¬¹3ñîGpôÇšÂ)ÞÞü ²: rAÅÂšÉøôQŽt*Êbq‚~bi¤Í@ôÓ˜êPçñ8»ù8øzËÓYàä°ç°äuõCëÚ`qz³Ç:ãƒ0„sðóú Gò?—üG±cŠ xBðü•ÿèz§‘ôÀ×µ@ÞB¢±XDãèW„úU´µg‹“í=VCõOr ÿ_îÑ}«Ñáâ-‡µàfž.-Yó‚ÔB«(Oµõóßn’ñìl.Ë]§„Cìmjc­sê¶gÛÔ««–@Ø ^…Nøo^­µ?÷‹é¸nÿ¯£I~¬ÝX_>®<÷Ù+^wæø‘ì ¾ÞÝÛªãÊIóƒÿ¢QKw¼$¨¿o½>·"Ð.r×öÇ{Ì|M¬N¢ßx$JTVù«û™zÖæ5_ÚâO7 ’ûuÛ¢Þ¨>¢‰õÂ9 Uý«ÓGH­{u<—½iYh‘s4 `\™ÂŒ XD‡íqÿ>Ö³Á ’2þJàû!ä¯OEéœzW¦Lˆå,M—I¢yaìuꂲë|Sí)èúgk£c›÷úÖûVµ_ U–ïk¿ƒÁ_š˜ÓáTôYuÄb³ŒÉ8“¢ ×Óî ë™íbû¯~Îk蹿£yÞw†ï¸¾ï'O¼ÿµË—m¯iaoe"ü_­Åµ=ÿ Ì.åwç¤ò‘yX[õ§¤=_Õ ÊŽ‹é(Ξ£ n½-y¬{z}OQ¤Ú*¬òÿ3×ÕZÄ]6[’6ô”HÛ8 Dkו°Z4ò#£Ô>TòQÜ´³]Jr5™‚#‡ê#DF£/]> G­Pu먥Q¯\£¥E,b:IõÁ U™!i$-ŒÉ陞ɜæqœfg^Úž‰©¤t´|Ò¶ä)!.§’û~¾šzƒÍE2FȪS[ÑäÞ@±t›üo±"ÚsÛîUÍvü}õËó¹Y1uL”‰mžZ±ü£õÛÇõ6¾¹kÉçHבæs_}ÿmä>É.cám>Ù7—&¯'¢¾ûÚÏ:·”ªËþÒ³A[ïõyQ`º yO´'½[©UŸrï²Ô­&âÒ‹ÒÿÒÿŸŸë"ôRÀÔ3HíŸêQF›ÿ[>8ýäÚ_}¶ßÙ÷ÔJ«}аycÅÛ-\ÁÎø°·ežc;, © ’V¤’!%k%HY ¬JÉÕ‡ß/¹û.‹j= ½it¼úóÿ_Y¯d=RH©ôê²ö,ò9$ËG8Ä´ÃÞÖúc†aæwúýæL+Êò»~ÓàöXõMyDú –,ð öJÉ$’I$– qI+.xؾØïÞ÷ú’ÿRº,‰aÆË™ZÖnÚå=úºCá ª®]¾¹kë9œÖºûˆ¨µ¬®«/CZ”@ºÈÝQËZBˆ pÉí+^@0Gœ¿$¬>n-¼N)@»RÇ“$$XLB-ó{½$¤A¸+©ôäÇ âw;çxè}^/±9†õµ4F?þ§ønu_ƒó³êtx˜|Îß'Héû#èyyç­ìøAð/|t óÏc9ÐÁã¸øNi9¾ÂÝ>ÜžFoÈd<Ï‘ì/·§äçtE=x><ÓäÜOc)ð\+|‘™÷)ìÏ™—ïžèsºNj%2õÎ\s¾³žzÝ÷!Ýç'ŽZæžÄõœÚcíëÔ6é|^}ÓÑÚz>gÁàôpá.JaÙ3Ãò¦Î§gÈÓê}Í>¦°Ä9<+¤ƒÙðÞàÇööû}‘ì‡Oƒâé¯ÔÁT?sÜÿ®tÿCüöªüdÃêÑ;S·ÄzCƒ£”‘Šƒõ8速W®|ÞÄ"'J·–=ÎñxÄJAÎ:<˜dO(ÉDÑ95<³ 9yFŸA‹£®Ž¡ô:x:˜©½0±>Fètyx89~XÈYð9¡¬4§vºý‘ìúžßËîõ;¾ÐÓìû=?!1ªlTżˆ¼C6Gí›>áª÷‹¬W],… §ÈOÄ`²›S²Àç: ñC¼N¡yä6¾Â>ÓÁҡʺEB‘2y\KÑOÃTG¢ ðñξ3âyŸ“ÞjpLÞ2À™ßggHáèêp}€àåøÄD;÷½íï{Þ÷½ï{ßo¬ ±³m¶ÞÛm½ 6è*¹>¿t!ðEN]RAK¤äéQöú¡wSÈ) õÞT ¨j\D+帾"¹ÉÝ.„`hQ<  =÷ÏÏ.póǽárç¸Üœàx ««¤QsˆE\î>|{í+‘w@»„B0 Ù´òdÑ[9 #f÷€x Ø{Vc3Þi›slͶÆÍ°!5×U8ç ÃMôá6Ól…†ðk¦¹¦f\<©4‰ŠD™i‡ƒD¡Pjš•ËÞ¼+ Þ­Uªf•)ÒyES&vP¨U*…ÊŇïÆmUª^U)ÐE@…B T®ÒH@rŒÂ‹ØoŠÍ±]Å15"ð A ÃCQ_u·VÔšjš¦<"*45D ꮪh¦©©Põ MDUEe5¤n@£ï÷ÓïxûÀhûÀ}ãï{¾ð{_xûÀ}à>ðxûÀ}ãïãî>ñØÐxûà ûÇÞ`}à>ðxûÀ{€ k±÷€ûÇÞï{x¿>ðØû€Þ4{€Á£ï)FÏ'àn›“Íñ;wŸáGà†û€«GìkFvƒF€=ÚÚ=À€B?à>üOÁñ?ï Pį|^#áÕäÇÄÌÂòAb—‹Ý- ç{äÀМ}v*CòãB)ðÐ_¬ºß,~¼„ÄÂâè ¾^píשöïÒñù=úþ¼ÌŸ6A´V'‡µtý»ö6‚é:Êâ  ?Ú‹ ¿§©Àþžüòüu—˜b'ñYHOõ„Kûo ÌDe>¶Æ~~²ás:3©žü¡½dñíþbbíÏËß±;ì}YÄYÔ? GÏSrlÌÄHÊ`ße;~ü ˆœŠI²÷ÀcÎ#)"`ßó ŸèœâûþŸš”mëí¼ûÃeáÏÈôø_žy»ÀÿzÎf™åÿH= ƒÕ¹Ìmà9ãdüÍ[ƒjôMËùóÄDÎRýÛþ³<‹Í¢Ê6GàƒÎýýïÆ^"Pb;;G÷3®OS²ø†hÿ»ð1Å|'Q+´Œ¦—Ç[£fCígøø›çõþ"}È“í0 p…Ìl!qu´sãeð¶FþÚ&w2=‡†Øòæ†ñµoƒ>JâÜAg‰£1©ãk7Ú ”[çÖüì}öž3¶äm;|Ÿç'yÕ9ƒn|sÉóÜ^{üû6…³9O1ÊLÉdëVS÷—ñ3”³2ÎÐR±ºŒó[¿ÿŠAH"…Û²nÿìHÇ'p ùŠÔO>¼f¶PÂÞ}³(Þ%–þýøÿ‘wím‡çýç_'óú9Ìó—÷ÈË7硾ȈË)Ÿç“šŒpˆ“òO̶8ü7‡àF£ü™‡­CÑ3ÿ2#=Ÿ¯ÇìÚjá•(Ÿ ö³ü:þÑ´c ÿ«’3Þùºßf¥LžóÈ,&ÃÑ¡¼ö™ ùLNìo¼Ü3~]]™áÄ#íö"&S‰ž»ö6E“¹ 6ëí1ñlYÇ>q0¾S¹Ôißãóy/;hP…Ñ"„Ýžò™D~é~6fYbÇ@µqÚ›(…óÊÃÄý£©{fDuÑïöxÓÛý}YGø=ÿÁå:†±ð×ÀsŠgßúòýº•Ù룮ŸÎàCÈî#ÛHøc …=uÿ OкçB `Ž5Ü ByYVÈX|| ÀÄÎѧ¸~¾H¤Òsǘ?!!3ÿ‘1+£P!zw¨¨BÆÁ auM‹ú)ßÍO £®Çr`ù·à¦Q'õ¢…ì8XÓÔ©,/.A×·B¿àâåºá×TPtQGîJþÓÄ£é¿÷üéT\ …‚ÒÍ*¶V/ŠZa4æ³Üêê B'gÚ}…ƒìmù¼7`úW-v꾈Óï¬lõmÕDúÉR«ðPU*ð«ýKÙ^7ÿÁ6 &é+À½ZãÞªÂùÍu‰ˆî(ºpZdL,/…‹×Îuëwþç*åX°5™Z®=˵6ÕgÙ_X^.këû÷5õþ·%!u*Þíø3v_$ç}þP#¢Á¸ôžóÚ÷ß_w"Õ°O65¾ÖßoÖ(û‚ýèÎâÉaí1Q¿²*Ï6¾4nܱk`Ä1˜úH¿Ô{ @˜ŸIHƒ5ëÈ:|)/„-D>Âp[@Ú•©"j:QHĤH²ŸX?Ø“Öòˆö•Q$ÚíôOa BžˆdrQŒt£mî½J¼ßo­õ‚yu&Õ š³ßÁï‹¶úø[åò‡£¨ÑÅâ×bgh{ö¼þ×­/}Ý…öõk>ëÿW\áö¾)ey¶P‚¥Q×¹V¿¿y—;íg¾¯Ê¾µÓ`÷ìvÞžú|%0Oó2÷¡ekë,ÕË#rù];D™ÇÖ1õnðöŸ¿Bü¤vJ®EÇ—O+”*þ:’´Zce´I„=̘Uk¢Sñ5b³ÿ|Ñ8L³:Up”"”êV–sÈOWÛÆÝ¨G)dsõ<Ê KÀ"=Yd‘¤,­ù‚'sKäN*‰¤ahž«*1‚]ÈÁ“¥¾VHNDò’r®v'*no,ûRåWn#öÎZAÌæ„sr³µË–+çß]_*µˆúíËâCÂs9ä~µ}f#þ[%ý—죇öÿ%¾ãùZùô¿ Îã3øZÙ¿m‘×ãïêçrò¶›þPƒY‚!¶Ó²WÙ&Åûg+5Ξ-yZÖÑ]å,ïñ|#eÿìÅÌ^/ç©DB*:öän2È£F­›ìþòü؆6ÐGõ#ò—ÌùŠkï¾ä>:x?kì¿kìVQ¿oõgØ®“OÂÊÏOggSmBVXZ9Je¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìH¢–÷Ýÿ¦“ö£À“¤#¡µ ò³’±¶ÖÕòfvt¢1å1ÝLLuC;ZÓVh…ß1¦ô¶Õ‘ŒÌsp`ÑZMäc9ËÙO˜ÖÚPn^TÈóu<ÍŽ¤2­›3‰iÆÒÖùh¾^‘[B"Õ2R0G©õõÔÇ­¡œüÔ™X´zÆ()ænÛYõÓdR/ãý-h%\§¼¼›¶„R/O{jÉF—”@‚ÒE!D$Œ‹‚Ö’I2Ai €pÉíâñ.¸HÀ1;–M×.ÀJ`c‰z<W ±‰:Ï‘,½œÁXÇݯŽ”ŸŒñ‘6ɱÇ;Ê1Ã!Pñp5Ì’Ä5^6H‡à5á;÷éÜ¿ìðtÌötpŽDI`:~ÙN ò~&œèæ'ÑÔ@ÁÀZ‡šùžÀ-˜™¿ÊžÊ}Nî1ü"ÇÓæWäS³¢×GÈð'àL<>GtÍ^’&‡!y @B¯4<ŒÕ95izKÎò{+ÊgI”~g®l1>·»„<¿.¹CFv¤¼úzkõvópÓà‡Ìé÷~:vy zDîüª[ä6Ï0>øô*pt®š@)Ï’¤½œ”Tˆ|O€5þÔ'ÐÓO©òr‡qi½  ÇÆìZap/|V+««À´z|¬¦‹ô°ìÃÅú~‰™ê¡gg‰ v/7‘8>gÄßGÜù)ÄáBvå£ÇälPà,9¿ªP!Ðç<öÍô'2s3‚Œ‚j ¬¬+OGG,2'9 5Ø4øŒÆHk Àêòöþ–8ÝÕãA"à¥æp t|ÅàX€a³ÑO'ÀUŸ{ǽàçàðž<{ÁãÀ;ûŽîîîw½ÜU×Õ_k]¾ß}ZÛV÷­·ÝöÕ÷ݵõkêßo«}Vë–¶îîu­}}mÛmÚ×ÖÚõW}µµ+~ÙnVÚÛZ·jûwÖÝÜî«|ßÚź›»¬êê}ºÖ×VëîYgs®Ž;–ÎîÎàõ}²pç{Î8÷׫ރ€áà¶ó«³îø¾õÞ-æt8VÖ×ÕU÷Û~ý_jmZÛjûU°x8:·ß_U­­µ­­WéöÛE­µ¯¡ÎmËvÚ®Ûº¹§_ulµºÝÕîŽvpáÜqÇåîήã¸sƒŽqƒs»€8pàͶ(š•bÃ8Æ}7Íâ·¶k¦ši™—•) ’Y4Â&&‡ªqœ*ó…ïVŠæµ[ÒfeIy($”¤£X–¤¦QLf‰…B©a󯰫ÅêÕZ¥éR‘AÊ K¤@%Ì”^PMì $Àˆ´ß›bÖ®+jb¶˜¥©‰‰jÉ¡Q0ñX{%‘P™ ¨ˆh¶«UâØ¯5f¸¦&%<:rðªVUE‚’Ñþ-ŠÍ1]™¢aA©P(0hˆŠ Sut•ßà(£4€h Þï÷WÞïbУïyA Þ4¡~÷o¸v>ðØûÚûÚi÷¼Þïx¹÷ÒÎmM|j:rDz¸¼Ÿð!ÈÙo/À8;cÝOÓ¹ø0s+”XkÕâ<¢rÁðMcÄ|ÏÀ°c´¶ëÈeÉÓDPÞû݃·cDv¯¹'àpzQÊxO•ø8âYÓ…¶r}¯ÀÌíø£—ƒëË>næWL“©?K6N\“‹¹Ï§Þï?ûùÐdûþv>†÷Z›Îwz7?Þiå×/‡ŽÉúiáýÖþ>u†Ã§Ó 2úÏØÞÍf³p=ŽÆÂQûû¹A(9²þüà§±J äsN†àÇn¢ýŒïΓõN1>dñ'‰T?"™æ&J¢{3;O†Ó?!½Pc€âœùÆc6.)cpc-qòÎp9ü)ãžûnÏÆi e”é°àþeP‰ôÉ%™r-ÙIñ]êŒ6ŸÎAãquþw<ŸŒ7ä8?C‘8ËŽ¦=ÌO‘’£9þJCMq‚†å‹÷8M°ˆÞK3œÓ¢q–e|(œaÄ}3L½æÓ'¹=V¸”c?œÜxoúãÿÀ…>gì f'â _é·>y˜¦…1Í3©ßóç.~'æ3ª\qù…@…C˜qïÅç¦AùÌÄE:’ôïéã™ú£Ÿ8IT1û“Jg•ãÿçî`RX¾&7ãöȨ~LDýTÕ&ý§Oœf"˜x¤é<üÇ—2cù&™te~MÑœyÄ.&àSK;[þ]0ù@UcJKG&üS)/Iè#Ý1œ)§dßÛf œØÊ˜<ýôÂ(~åH÷ÿê}1FŸþßLû»ü)'¹¹½OP ƒ9c—‚<Ò8cœœbm¾;ÿéð@b˜˜ÀâbiV/Ü*sžDJ™Ìò~))ƒ0Ü*âýÖfeøËÍùÐÚ—ô¥ycq˜qçå ½ḵA4äÏÐjgz(ÎtÓAÕ or¦qçç“áÏ%kwNmÉW±ÓïÀÙyüuNó}Úsc»„ØÌÄóŠÎççSéšU4«üfÿHØëÊÞŒOÒ›ïÇsŸ?ÿ¾ Åê† â;U>Ç-ôÝÄŽL #Ìùç“çãõBC28qï‰ð)§âö ˜æ}ݹ±~æàeÓ̪9žÃç1úe;ÿQó§7¼úãJô9>Ð,ePT Ö €Â‘äÎ'Ò šL"˜Î ©çÎ@˜Îq.xɆy§€Å?ÓȦJšX>-R7ð-k˜ÏÏ &)ê|ÀÕ—0aÄÄM×ãÒ1Ë›Ôùc‡—#)ÜØ ¯ÞD3<™r|uC°¦Ó`e1®bCS:»¬Ë¿{³§Õÿ½EÌyü2—}8s\b{Xn38šu†5g2²ë@xNð÷Œó¼'<Ï5ÃqüÄùÜDÍ0ù^™g…C,Ÿ4Í…B.÷ØÌ¶biÍ•-§Sqj nb.¾É ^m;9˜’wïÖ»›Ï¦TŽmjq:Ý[éôØ5Ž›ÖÜi°úŸù òøÙE™t{[§se®vÝi:ÙwMÍdeùßÑFçÀyòñCÿtÓÆ úoPGÿílÒ­—L˜¢·gqÈÎýSÏùÜñÿy÷Ÿ\;÷ƒâvI~_ÿMä~d»cqü¸œâG󬯶1£±ž<Ò^}Œ}a§äCçºL7Á¤i¦÷çpøß¿³\_1™f C—ýîý7üÝÑ÷qŒ¾>HÀ9ûŸ®xÿO³%ÏÇsÜKÿ # ÆôÓèö:K½ØBoߣ‡{Ú;Ñqùßñy8Àܶ_sZZ™Û‡:ØS'&Wq$ÜS’*3òÇ9´³ ƒ‹šçð†Üâ[ébœKˆÎ¸RÌqøÓ±NT æD ?ϼpæ3w cÆw?f/÷6šÐˆ™šd]ú›§šXÙÎsŸuDcÎÄÿæ#¶TDc Á?Ú9L>q0Þ´|³aÙØ±£ƒ<Ûßœáe#bÑçw0€î8Q5²üνGŽoB²<ï"3—ç†!˘ÿ~÷âsñ4ÃH§r™ÈS±˜ùt r£w°7;8¾ÑÂÏ~MÌnz€íØè'O¸fçãýíoç|+ú”fêQx™â! )T!#µ7#»-z'+D<ŸBi Ù‹K=4cÐvÅ¡sÇ%³ëÜþ)ݰÚÛAÞ8—ƒ¡ñÂ-bãáÊÁ ôY´)(åÔ šÃMôKUôË?˵$V‘džT¨ê•˜Ùô¤L€‘Öoà¶éæiæS%¡öCö0ÕÜÍ’WŽ…‘ÁŠ÷ñòÓv±ƒäV‡ôã‹AŽÎëGÖ‚§`{@°:GÇ–Öc±4°'¨ÈÇ®¨pîûxN µ²IŽŠ,8(Ì€p•á­=i>Eª+ñJÌ+i Õ„È ¸""EŽš@¢JÄZ IZ0âãޱØ:ÆÀ¸ã·/ˆÂ=@î-aއX·2ZÙˆ»©0d#Œ‘‹PƒD†ÑÑíÈy»N‘J³êm>,ý‚Òx“ú裲þ?Á•FTm)p’ô!M¢´q\sÓËàîËŒ$jÚ§¶nyÉü z€˜š ­'F‰è̶N¦=p‹ vÙ_ÓŒþÓ1@ä'c/õcŠÛ·®ŸÃk·®ÙXdŒ­¥HΟ¤†@ecH´©i·³uÛ Þ*AäËȼ '«§³hü§-ë¥y]&Ê âR.ºžôwA÷^ùYz_5rãÓ’ŠÙŠâoT‘GÐÛQëP’§ßÕþÁI»°º ³ï5±W7ô¡Êþá¸ó0¨šÞ4EËç=Û+€À„_²¤·¢7iåJ¨»ų̂„#F2l¡vE@•0£’²/é5&ʬò‰ƒóÈ?4°G›53B¼td@n¼žTL³uDèkBƒÂÌV=º¡É ãNWƒHÁ[´  †œ6w¨3Tર,½,èÆhòéyçõóüëÉáìM1åq:ru,Šþ:ƒJþ8¨p¾ ¯Ájªñ4ŸžyЯ¬ÎĆ>pžt*ƒXûIVœÇÈã& ôA\&±æ£>QsAyþH((#^¨ùã 8(&ìÊ*QШ€f<¯ uà•Sü?kXªQô5-@×+Q@ä€ëEË¡dµÖŠ{@ŠÑ&Ô= (è %ëRQª#m5êGXœÿÿɰI|b‚C‡t3?Ψúõг×tg-U!úË ö·j¦ö?úü~.W"¾.¼ÁATgEL^'AôÓÜšÆ:ê4}Viî‰ÑVb˜ûråA Tçžj ¨ÐNµ¡OggSoBVX[ ×Všÿÿÿtÿÿÿÿÿÿÿÿÿÿÿÿ0ÿlÆ&U¥@Y„à‘3XÂã]TÑrE{=c Zàÿn1Ç€N8:ù忚PÊ‚z¤ªÑÅOþ!ªh(º­¥…~‚¢ývé ­LÊö‚}‚ÇâÔ§Ò‚£w™Uä}.­dÈ ©UvÁç—6ûñb«ä¼•}ýZϳ-÷ß9W–IišZ¼¾ûäØËå_R j?ýü±>Êþ¾G2m÷ø(yÆÞŒzí>õ£õ}¹ÝS­àä—'¹Ë¦qGs®»€w.µÝ¹'öo¦gkUí!I[™/Qv£×uL©F¯ÚíSµÍLûNzñ!Jõ«OµJ–5¢~çiM¤tNÊ”zpÏܯPâ=§ªNä»<ëïM«÷QˆÍ>ßB–Ѭ̂TE“¾Ù-$4©Uö‘âÝ]“Ö²LõZ ‹£õ‘ÓIsF´€Ê„‰£»H´‹·–ªfb•ëW׸›±žB‰™<“õ­zÓ Ó¢m»uöôŽªýê«W¦}Îã³÷¸W]ÇÛ^£Z§|6³Î´ÍãG^’í=j,’å)¦wêôz3IŒêßµêO¸‹>ÃÕh½$¼g´ŽÑ>YÍ]¬V‰ôL4mՈʠyDf^TC'Ê0ÄÚ˜GÈg”ÉŽÆÿd2sò”Á9O[ç-ëؾݨéÂQl É!"ÛTªL'qD'´¡t\¼›íÝ»tƒŽÓûOí*nˆÆ/Ï\|j…¤KVDfåJ$ò Êõ£mc¹ã­* Ý»÷¢Û¢X†Ý P³ûì í€O6@nM‡Šñ(ð§®2¤Hí-º@‚’Ú¦Lêm*ƒ¢.ez}u$”ÔAñw(4Uv™#C¦>¥ZEY‡BDD¨‡QðSDz§ A7PÔM1ÑÊH‘HÊñ®3&VÐT@e`P˜À—_©ZÆ@†«DèºØÑu @¼Ü–DÈ„ÉYÔ5Œ5 Ç›6cXù³"#b!Zê>/ÕÁrÃ¥…ñÆ™jH†¶cŒk®¬Œù0ó£J¡rLP­§›Uœ†­d-qå+%|¬%0ʼ G)}•d9V…•xüåY'”R$å[|YÊ´û*ð+ÿÅU€Ÿxá|å^ß’òYWßþ¿¢»´åXdܸúŠ C|<{êÖÒr­“YW‚Šî¯åX]pÉíøBÎÁðkÉD@w‰Ù>6ì„3|'³ÏÉÛ„G 色⛉jœdœ¾tê'ÙçžoÌ^rב½!æ|e<aäÎÀJ úÃä|ÎψZ'Øò}&Ï‘ò0êeäôìû*¿pž ;:>«䧂ŸE)é¿7>Ðyçž‘ïÝ §XÎx çCž•ñÆoF ñ:cÐÞ‡Ûõ矋ô@úùý0üE<9æý§GÄû à¶`CYWÁõ> :~s£â/jøCàüóȽAø“ÁäNÚ3ÃìøCéø=?‡ë„Ô>f§)o|±çžùå¥ã=Oƒƒ_gš_³¤¾g@Óàpx<šiíÇ‘œžÏ‹ñ1Á:>ç'ðÇèCö|o“ìCÜà™Èð‡|v7·Í ìW!ùAiEXN“…)^·!> Š'oÙì^MºÄ NxJy:+ìàŒ=žyä3® wÎ÷Ï<óéÌ=S²9Wµi‹8{ÙѨõ$>SÉ ÔÎ }Ÿ!å"¦:" ^dìî;ŸûÐÏ3á6ßo·Ûm¶Ûm¾Ûo¶Þß{m·¶Û@ßmy  êJ)Ît®'p"—s =é/‚£«’çÝA;“Þ‚ç©'uîG§ÍïHŠGGv‚K¼áAm³ÏO ¶ÙU8fúm®ºé¦™¦¹®i™zÔªD™ ¦& ©²j|3}7ͦ٬S]sLÈ™T‰ ‘"h4!5*Ÿ ×7ͳ\Öó*D™g…S•b±¼”¡Ð*Ê £i¬ÒigªaÊ)œ¢€Ä–fh†0ÐÍ lSÇY¤ËL<(@A†ˆŠ>è5Å0™áA†ˆŠ`ÀMh ƒÜhûÇÞ>ðx¸}ãï´ûÇÞï }à>íï@ cïxûÀ}à¼Þ=ÇÞ>ðx¼@h>ðÞ>ðx¼ÞÒŸx½@÷€Ð<õ÷gMpõkð¾ÕIËÕòð {#R?ðÇm}í;GÞ÷{€ ~ŽQô5ø?›ø+¿'ÖójseÖ¿Œ¶£dƺ!v|7ô\ë|Ôk_Ë–Àº½Úå{µ5Ð*ï.[ª¡}yzÂTµ‰rà6]®óW¥î#Þ§«$ÕÑn•‰•ïk9_V!Êc:r“g{~=ºæ¢¯—;^Zä¶ž»y—à3gŠí]mÄ­Ë>‘;Uê±_-iIÜïuµ]^çiiVµpÍNç`žÖŸŸ‹™sjGzºÐ¼?Xw|¸k|H -¹ÙÏ,œó›6ÂŽ›àt\Ö»ë®ÖeÝ)I¸ý ›105Ø-Ý­ñøBâÚkoê÷]¸¨˜„LsÑõö¢œp©õÞm0ôHϲ»2…JO¦gâ¸;= `‚×-¥å·2Åef…µˆ…£dÕ»‰¶vâU—2~q®ÍrõîókÛBHµÖ®¹¯m^;´K·‚\¹kÞYEØJÙ’gÒ.[‹kã-×T‹³³Ø 6Êζ½]¼·m³JÅS𝴠GD*Uzº‘%cºÖ¬ä¾e©\ì»Æò„úžŽeÔ—¼·Ç\É&÷/%Üå×g5ÞVÅÇØi_-þîñü¬4Ï|g^rj®çW+·rÐÍm5ÕÄ+uIš¸Òó[Wf¯oý4T©6Ö•M*QS´®YWnfJµ)4ÆÀSÝ%Wey¥·Üö^|fÆÒÈWÚ×åë6­@ÔŒ÷–…±ÎZs”@*éäO®kŸ;‹,žˆ—í&ë`6µ÷6t‹mr÷rç*xC„)‚)VìŠþw¶³ë +ߨ ÃȘí4µ*õ¼wÝ\]X-H y×kW7ûµkkˆBîA' @˜'¬ë”•Ú”‰ëD;æ”Ür‘®b'¶æyªŽÜÙ÷]uË«ÝB `/5Ê=( ÛLf•ËH¥âö¤÷¸@àj)ר µÞÞ؉¹^ÛI«µ&ó2د_®còt•œ x»1•­}1ºu÷•YõÙ€Ä3s+Á‘sŸ-[¥ólR.eoÙî]Z««U5Ù UÛÆW;/œ Þu¿•A–W‘Á§6gâüó´`‰ùŸˆá+ŸüÂCÃòXÏË19/ý¨|¼™„cnBÛ¢í,3òËb21ížoòw`fÏzÏ‘¶ïõgh'fw™zÔ£Ym(¯2É,Í7¼ßÒJIÉÏ>Q@¶ÿ¿¿Í‡÷Y÷!÷ÚÌL@àÜ™Ïx¢ðË4;´‡¢ Q̃9ƒ¨•1œÃ;Nû[üþÁ”ìõ¬µ¡ –(~¨ûcàËŸài0DÙÿb-âè‚8ü2ó—ÿ…ó{üÒ€M~ì´¨^rÁ¤ÒW€¶Ü!Làó}T@Ii‹HÃ÷ê Sh¹1ãSGFÌhz±¤ÀR¥ |tñl\iãä´Ä,©›Œâ‘%MöSM‡;vý‹øþ˜íp[¿óåƒöõ– Ò˲!ÊãŠ'Ë7¨ÑŠÈi±üd ØÖ5ŠTæŒQCû¦£ÔGRΖH“î1{uÆ5FXÕYñ 8«Õc0$$Žy ‡LixÌ€°Ž¬íÊX œ™µQ/ÐzÖÌfFˆˆŸ¤ÿ L#±ŒãqR€Úw7èPþÖfKñ²`}ôgíÝ& 0#<4lˆÅ˜Ê°ZjdG2OÖcêk® ¦"Lùgf’ʇMì×l•b©Å’mϸ€va®˜fÚ•<6{6áŠ:°½}±ê[Á“ά²x}¬‡2GÖßÑY6f”QS&GqHÌ=Ûia«ìb#ä·3uÔè´1E”8ãŸÁnÆx!!‚Ñ!¦í̼ Ħ@R ÚD9óÏXý%2†8ãÓ_Ñ$´RP-c:Ùœj$¥âü:“&à$óÂI‘˜(° PWƒ2ë­h i™ˆ‰`ß¹º’£×)¤7L.¤0>ÌÊm3¤œbÛvÊ3Np‡˜Èš8¢l©úN[ÔZ_,—0o2IÜ]‚¥én•Ã÷éÏíko¹ ×^’ è)¸B+։ȿ{ÑO;<¾óKV¿±r;} ZPÔòä;ýêqÓÞpGß>Æ#¥w’=kž¬I„%Q6'µ¶·`—hT‹ $Qú‘ø-B@y2‰×©U  ˆÑ¢‚âTf IÅ0¢2ª ¯<Ïž)Ä5ø.Ar‚pP\ú>¤yå¤JýRIŠ~Ðx. º·çà”ùç©‚â@W<ò'‰ª:i¤ªIX˜ðˆ0Ò:ÐPˆŠ ˜iÚBñ«ÕªHr|ðÜqN¼)J$1EŠHWR’Ïx'¬N"—®yæC†åŠGƒ¢ç˜. ¸uI ‘Æi"¹ãŽ(¬ DñüñäxàμaÃIչØ.™œ<>ÑU§Ñœª’Þ2ˆs>8*K€mlÉâkFð• |uÔ:‰:)P4wÉtÁÆÉˆ^]¿&âƒS7—MÄŸ_ÞA.¾i áùýÿ”¯¡¿OßõX1¨‰¼€#N×iêYÔÙ/wa•{{I4¨iŒÅuíRoJÊ–í5Z»¶¼•^©ëJîJêÌ;MI²öyj…è3Ý=Û*”€´ÞUÕUÝéÕÙØÑ¦FnììIêô•ŒÄö»LÎÌ븑o­egç‰ 4­Tý+5Gyn)=ÌÏÚí:“`¯ÖT:Rµé(ÃÅjSšó#Àn•®ÛpŒ%x© 3¼öìÚ+irµlÛYQƒ?h°J}¦LZIi J¡&b¢Ñˆ†£¦›GÈÏQ:”åÈHJs2Šآfk¯¢Šf0 Æ•$Hºîó2†wn‚ö'.èrïî½ZÝ]²¯ë;ò¯„ŽUˆåZi§Ïòʼ ’Iw¥ÅìRC}(¢hÐpÉíÓÝG¯Œäxĵ(†^8Ïx¾Ëb\——ÊbHæ#˹†Gi±•«å!}X8~©Áq5®¸á/³Åáã9H7 ëx­kð6Ü•ø sßOÂø;8*#èð'gÀZW}½¾OƒäQûžZv ™ghp'ÉôüùKð>h²ôžŽÏ&觃üvk:ø•ò{ŠÏ >!¿> S³äW˳ÉìÃê÷Ù>hs Þ’ßIyÁäw.tû »½¥åN‹éïJÖâr'¡?O0¼ßSëÏ”>·×|ʽ 'ÜLtbz>ç'ÝåO öŒ9G·á>Äí^Ê{| Ï\8OggSpBVX\¼á]ÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿHù8:0òy?&éÖ¿ƒ£‡ˆÂnptx}NŽôxÀÏ3ÓW Ï ¬ÉÁ"y8=ŸR:}…GÀœ8í”Çn0à#ä@ìö|B{<0›í¾ßm¶Ûm¶Û}¶Ûmößm´ ©Î;¡ut¸ …ÎNNäDªò'ÔwMò • w×qèÊrãÞ†žSËV"‰²™:ƒQ[ê‰À3¸Ï´#}ô¥9S§P)N—]UÁò/¾¡Ò¸t ú5{ê"íDøÖ44lY^¾o®ºë¦iyU̽n„ŠÍm[LLSDÕ]“ex&êo¦úëUÍ5Í/*AH9“KL*&¡TÝ^ î›fºkšffiy5©e¦&‰ªhVMÓ\Û! ¡êœ8RL‚¥Vi2)Qrá–¹ƒ À PXÖi2¥œË" ‚ÌY ÐkŠÚ–“,˜3ChŠša  ¡ÐxO¼Þ>ðx½¯¼n}à;xÕ}ãîx¼Q÷Š>õ(4v4}îÚ>ðµØûÀh5ÐÐx½÷¾ðŸx¼}à>ðx ÷¸Þ>ðx ð+~ ¯Hݼ ÝîÖe~4úZ³Ýï? gà3=3%áàüí ÅÄ#êAòýÛ°™ê ¨ìp2ÎΟǨŽo?eæ,GœO•܇˜e~b÷çûç>Än?“óý‡÷>ÁkûpÄîÆ~Åà!z‡˜~Hyûn^Lì?Ç6†7Ôz˜›µrÈ âËXne<ŒoCqn‡áÎd9dÛu³<‰ i̶Œ¼„DÇŸbK7)úæ¾¼Ϥû=Wàü~z@ÿ8tÐÊÏ–þÏ;| _Òãð#?§öûo>Mo8’ó#ÎLíûûs9ø@{4wù‹~LßÏÁ†r´•;íŸÅ»yÝúß¿#22æGS,¬¨n û? ˜’àZS›¿¾k“ð~xÉ?€^Ðä3™âƒ,,€ÁEçG\½Ú¾\üb)ó¡ëCøêDD¨™œþÈŸ1—ñýL*?kžZ}ä €&?¡pò= 'á+Þ϶g‰žýòm(n¼¯ü“òmå¿h"ð ·rbx‚ã8ŽD¿$óæÓ‰<´üDOe·ØÜÄþÓ¿,N²¯æïÎ1Ñ<ð̲]è9Ç6ôŽŒA’&! ÊêVûsÏæKóD÷¼nÐ'ò&jnrŽÏÇ÷˜Î[ußÛìÌïö–(œ¡Ös…b ƒ¡oö¤ÈÆÆ²ÜßhŸ1?™â_Ê~rx– ¬áö~GÞhˆ8þ7øÛW9c=¢6;vŒþÔvËxÛ#2Œ™±Fróк Ê±â†äo³ú(F¯Ïå—"…¸üë3Ëõ:AH>ÿjäy'r*^ kýäÙÙ¶¡4_Ðþö~ø™ú¤u?l«â…>ìD×;Ã>¿ÝŠ;[9û%‘=ÿb51Ú##¿vÆÐe;ÉÂO~Æ­ ßþFËÌ‹åÇÿYíÈ<ú2‰_Êe•·ÇPLë}?¾OÎË…ZÎvðAÙm‚es-Ããã º/´#5üþÐ>'î¡>WÛø#¿¿2ålº8BËÏ(@ºêq×À¥?Êý¥‹Ä,óÈç\ßnròo¯8³Š8äsÅsÞY›cœ´ âš+ç¨,ÿÎÃmáÌœÊ@e2¯Y‘~D· bxW7~ŽD8â™ß/™òó3æfOÇæ]g[ÏÏp_>}ä‚&cƒúHœu¼žm™ÈFYÇ%D¿¥0ÎÙÎûoüOÎ_ÑÔÆÀükýû‹àŽ.‚þP hŒÇÔˆþ‚Zmã…oSo,w|BøÅb$þz¯Ì=C CGÉl‹PÜ©«~Öð Êb?%‹¡›P8~§¨¨À=¨3²õÚ\¶(ÅÈu^ äyž0lããðŒD4",ÂJöÂH#ݬ~~%ŸŠÆbu<Ÿn¸ýc^Dzvb 1ú-âhNÈ“NƧMY¤…䱊Æ$é‚ñdcÃð8 빤Ù`…¤Ý¿ 8ñ’8!‚Ä{PH¼ˆê3'wí€ ·U2“™îI8óÊêÞÉñ›«dÖ3O¬›š™ñqAW¡‘°2JIÈ)¼×•Œ÷7.Ò`º¯«g!ì[©=y•¶°ñ&­ÞÇÚ¾ôi Ö4˜EˆxÆÂð^P3­Oˆâ0÷°Ñ:öD•f2 ¦Ôˆ5KÛÁ¡À=§†‘hºñˆ¯_ß+¨;hÐþàB:‘@Á Ú\© ‡¡bceÑZ´Õc§¨ìÔ(ð>;Q?@ 4ÑAŸ8§?6¸#€Ê,Gj@c‰EòŒÛÇÃòÅHÆC@ãðŒ€ -Yð”ÃÂ1‚[¥JÛ&|T‡(û&›?„ˆÌÈz´¼¯=ïÙ-²)ç²Ö%tʶQ9ZÑKãS"ÏJ Aù<=%1H­È±€ƒÃÞ¤’J‘ ƒŠ«^vüï[”©bô¬vy…¿6ŽV(Ž26䈉‘ ’LDÈñÔ@D`ª£sá>PMuE¼J¦fi° :•¤­r>3æQÏ u‚ãØ9æMTQâUEÁñ>8¹Ä–Jž¤8\qÇ3æ}ɳó¯¨Ìó zŽDØä¡Z©è!Â!=XXEŸ ÈÐîàHÈ„¢ÉÅWÖ•²ÈWªs1ý)JÆ2]VESùD¹çøB©Äë#A0¥8Ô8ÕÅÕ EUF/Wû/ÔA¦§ ¸)sÏIóËx jcΠOŸç“ÄÎl°ðÔ¬S>8Hã_åsÏ]Bq½—^`ˆA`’ P$pþdéɤM$Þ{òOÞþ•”Q1I5Ö§­D}¸]®Ó%*k'E'N¨Ê¦gî³ñEô­iTÝFeñj32tÃT¨[Ù*1v ´%’(Ô¹ë_j¾Î¢î¦Û HUw*ìÕ«É0z•/G4¤Ýå@õe¢^**ªiŽíÎÏZ¤Ò-^ÓHXWWêôµ;I‡b”B”£ H>ÉRA‘ÚÒ€ D±pOEµÜdEØ yE5ꈇˆªhDG©#5+u>C¨”Cað£3hC"äEœ,¦”cIu%åç*ð$I«Á?ùWRK¹`SHIÊ´xœ«ÁtpÉï2f$GÄtŽmÇ #XPq=Yg%W7eÎUÏÁµ ‘ÆìÈŒV®’dÎrNT3Go¡v'D'„êIà÷¼Å:>‡³Åâ4)ÛÁõ0ðôzIÌ/<óÏ„yDyçžyP᩵ &+ÚºH:pGU‚SÓñxÞÞDòv}ôy=¿*5{“¹@;ø àBaÁéOSm¶Ûm¶Û}¾Ûmößmöß}÷ÛmöÛm¾Ûm¶Ûm¶Û@ûm½¡òtÅÕÜpÎ¥Áw8Ú/¾¸èï¨âBQÁ;ª’à!Î@ßj®˜ö• «ºjÉ ¡Q´GŽ­{„qÍxõ8:|öÌÛKR¥ ©ÛºEK‚†ò”ލGJ W0=½•·›Ñ9N…÷¯ mïyè.͆ñ†6€UM³[Ó4¼¥/!̉‰i…ÕÑ5MTÛ6ªðÓ2©™—D @¹ ,Š„Ê…TÚ¯¦Ù´Öõª^•.žQ—”é .e¦”(˜zOrµ JB²˜±ˆjL™i‡2Ò\¨E0€Æ‚XÁ†hƒDS¤¼;9Pˆ!„0ÑA¢)2Ó%¢"ˆF8@Ñ 4€׸ûÇÞïs_x¼Þ>ñ÷€ûÇÞ>ñ÷€ûÀhûÀ}ãGÜí÷½¯qØqîÜh xì€ x¼¾ñÞïxÑ÷¼Þ×cïµ@}à>ðÍ6€Ñ£°£±?ÐЎƃ¶€ûÚÑîìh=d€ §µ?çÐü §à1ŸÖ..qtt.¬øâè\¶ßüÀv†í% =üÄc£þÛžš:øæÛæºÛ}ß’ƒ ìo´`ínc´ë\‚‰äÞÐÞ|ïØóáàˆË{nuægîyë…³ù?2Ìoˆ°&#-ÿö'á€ûÌH‚3Í?€Ž?r³õàƒRäKò=þG(j¿/~0"I‚c̼³ºÖž¹¹·ó;—\ÈßÇ?ÿoøŸ‡öÿ¡HÌG!šá¶è‡ùH7ˆÝøüˆ—áÅÆ™ÿ‘៩ ?>Yõ¼Ç¯?÷ä}`1›•–Ç­Õ¼›)&Dóeµ2Ë=ŒK/üÜ¢OÇǸEŸv<Áȸ?¦„ÊöFÎçSxŒìÍý·(ˆ›|ù9»ûDG˜ŽäœϘÿ؉ñ>Ûÿü˜1æ a ˆŸsŠcZk,èÿk‹ öçžoÅdî8ŒàÿÊ@ˆ1ý¡ˆqv7~O¿±üüuè±H|™\[’Cø0Ž»û× ÖYq¯ß$_@nçÀ#IáFß/!˜Sñ¥QÎ`‰l£¿ƒëõ§å3úíïë9Ú1;E›ÎÑ Tyúsˉ ÛøÜš;}¢Ð>OÇëøLçÿ˜¤1H6“U4f3g£Xeþ‰ÏøœÖÿþþbŠ훿rû¿ˆ˜bAš î Ëÿ¿bO/ßÔÍ2&d¡,@ˆ¿ö³Ûi5° ;ü]ÿ“þÈφÿýálþ^} ¡•g‰Õ CÃË$üßïÏ=FÝ™=ý÷aÿž5rx›ñ• €É™˜ã÷ü"6¯ˆ[ÏpȃxþiúŒÎý˜*“œHþ6ÞGçÿƒñùŸdÛ~ý“ñú?2]©Žlýó‘F¸B:HÈÆRϵ–,؉ªF<|¢W¿ês¦Ðµv:èÜ÷5—]O–\¿Ì?6±ø·7 6ÕØÎÝŸ²æ-Eˆ¾?Èkåæ'‘3þ<ù¼×Æpº›,:æïaÔ€êyð[Ë«sR­?œoOggSrBVX]a**ÿÿÿÿOÿÿÿÿÿÿÿÿÿÿOÿÿï;Î<Äóƒæ7€V;?0°+k>XC`pzø[Tçy÷8ýBÒçæ„ëì:rԉͰ#b¯…ǽ0=¬„@‡YÁƒô´ð|¾[>TÍÜ=zK ÍPçö}_p=“¤ìFÇó)Î /Ïž¶·ÏÀ!#ƒ§¸<ëç½Õ_ìö”h'­?lŠ“$1j)ºsì­§Ècâ?‰=wR|L–JbéÅA®d¶§’,ÞŒ f‹€²³m—ÄÅ/J^|,iãïôÁT21šLOáËѦh;E¦A–ÙŸÃöx‡Š=4 P6#<ÇXG®À "ƒHtìTcàߨ")áëÀ=X]>(šGuÜÏN«Ö\qHa€¡êY@µRè±Xù$@:¯Çc¸3hß×qjúð%2ŸTc1‘Ü4y6çqÇÛIJb[w–IÂ’ Á¦8¦Û:0M8ÉéÏÍä<õg"Dþ£ý/Æ’+c<Ù s)¬ êêbŠõ0‘€©#ŠM0‘;$žUˆÀ~vÊ×ê2‰ \Æo6¦ÆÚÂØ‘˜¹™+ØþÚÏiW“5›60X¡uåªVÑÃðê""ŽÌz˜´ã·'ÇÓÌÿ§×‚×()Ç ‡Ž©åKÁ!‘¯™>8ÃþT=AW™P¹æL°sÔÕ¤©à¸,ÙM‚ªAÛhž¡à î2i9ëÅ+ÕQ˜oi¨”Wh¥Á>5VÈÒCŽFcY1%QsÂ^ @B1 ªŒIó†•+šqÂS7ñà€‘áøS׎$Ƴá$ÐDR N@zñ†‡õŸã®8Æ8ÃèêÊŒxçšøÆÏ$ I&2\cÄéšLZ#H.&#=$3áªWPKª”S¿ri$¤…"”¢µÛO™ÓÊÊÒ{&ôîJÞÕ.¬W'¹^ᓪu î”—p¢^Cd€ÊÑ}䔘î«jJŠÖŒò‹»Ê)G]§nªLA•§µÚív»R;žÃñZ'eÖªE¨žW‘Pü´¢ŒI7Àƒ•(‰9LÌóƒ™Sº{\ µ¥IÛ°KkàLr¯qªGD¬j*`–¨Eâ&(©R(™^ª&E˜ºDÐzˆ‰êYVcß÷½ì«O¼|Ã*ð€'*ðI¼˜pÉíð9|0ó|®[7*£©îÉx·ÇO_>)­EÛ‘|ëReî˜Ä$ž3ïë#pxÍmî}Ná<$œd]æ¤[ Çà‡ÞXüü7¿ÂDøÛñ:?g—<¾Ü<Ÿá(|äÏ•;Í?Ɉ|ýüD'‘CàvwÓž@ù”èu|ò}˜ði÷4ŸKç8çyïžhvÃÞ=Î9ð§ixŸ!;cJC†ÔAëžÏEz=sè‘ÉÜHQ/Èð÷~gµ{Hœ+Ú½¬Ðá8aÚ½Œí^ÖtþNÞŠûð$àF¼€ç‰{: øž9¿3¢&ò6‡ÅßYÒȹï½ÑàR“OB}ÐÑ£ûߟ3ÓOc~gèô7êõà|ÆsWÁòzD;Îï§³¼î¤GH*¬ÊŸ#ÙDú¿s§G‘eÊo¢Ÿ\ïŽt9‹×<ó·<óæg4À@ Ux€‡fT2•ø”øŒSɇ£d!áøžöþÉo·µ>EJq+mC…+P²D8´øÊc§âz>O‰NÎwwwwÝÝÝÝÔ²‰hšX³UE`ªyé_t‚}P•`”¶L§ÛCg‚ª¶¯‰j–$QJØÅ‘ÔaN4Ä—™„ ©+K™V6ÈL9BI«U3› Ô õ™E} ßh\pïpï;êm®ºi®™¦™™¥éyT©šÔŠM-[RÓUq4MTÝ6ªë¶ºÕ3I³[ÖéaªÄŠL²‰¢jÏU7StÚ+UÍf•[Ó2ï.òéÂ2œ8Lì¡èšž©ºlX+Tœ’MFLׄS ²cƒCSÿ0åáÒge‚ Ôa¢ E«ª‰… ‹(1T€}ãïxûÀ} >ñ÷µî_¼‡Þì}í}ã}à>ñ Ð}à>ñî>á÷€ûÀä)õ?à0ü߆4v=Ú>ðh<Õøµò8Ÿ„ÓÞ~eåˆÙX…òâ_6ó-+¾­ŸfšÅ#k—@ËÑ M®Z¹7«‹™òã¿ 6¹Ir—R½|ÞK³b3Ãí2ïý¬þsn×[ªåêë‹*ëk>ν{|zµë_6ë+sm²ÝvVÎWªåÏ{ËbÆÛWº )U³¶Z­Ól”¼ [åw çɽk‰.œÛ8#TŠ•¬M„¹–ó*JÉ=\“éµ#b?6P˜M\¤ò—&”Åw~b1jÓ$P7zåZBg¸|¥ÛVÚêÝ·;8w5b’Õ#\›»­K#ìT×»•ë«…·9¯ke ÄU«„;‹’»™Ó®êúÝ® i0•«†jpŠK¥&Bÿv$»‹(,Dµœ;k¨†¥ Û¿2à$ÊP3=Nˆ‘åW[™_5ÂÛû>QÉҰ⨆Õi ò­Û3êØ®´àZµå³ˆWº÷¼Î\í«IÜé峞=+„•jÄÎ!s«ÌÊGã_.*7»Íª×TˆÝ€¹6|ìJÌ\®Å¯µ®¯n%zþk™ 9<) ¼¯V«Ø”µ¼Ë¼ÏuZµrÆHüžwçþO`cô/0€~ß:;‘]…åÿค.ðˆøèóÀ® tO€ë¸s'9 œCõR½xf½¡=!Hþ˜:>¿¬(¤ÂLBq‰<‡¤ÎzsS!ÌÜ+Ö<©ü8QBòŽg#©¦8ü‡çy ”t ñý‹ ¹Ã‘yu=ûùAÏ6ý|gô{]“ÿ=ü¢¬;¨ÒQ=ßoŒ‘À,àëf饅&îÍ '¨oàûmX&ðÑø •$"Ò¡Û®ïÜ© !ÁÐÍ›ÜùSÁ ­Ës ¯ÝCYÄ:) ¶j0)Ò‘¸Q‘Ó‹ 6NÉô›Ø?s“‰O Lñ 8x#‚ ÀQæc<&¿qðB!4ÿZ€·GBHf¹ÆÃ4CŸÑJÏK§™‹JŒLñ,,þ8yÆKX’Š0 *c•INoîó'ÐL02Mø¼hÎ=ÊCi¨{¿†î® ìºâÅ·n’w>äg²mâ2dìèCq[ƒvλ6ºqO^d‘Ä©>óhº´€¯BÜrdœòˆ™ Š„)$tòHöÍ^:•ÁÐþ ã jØÙ|¶<(üŠQ—ýÀ|:¸ÅÄÙ§'ßÜB-ØLu#¹2Ð}ÂTî$ØÊ˜°>O…‘Ô±m(‡lƒ+㛜 êr±Ä3kª±´jgˆa Y0ø ¨› ¬Ì 8ã^Ø‚6• Sóº¡R1€7QÐóƒ§éáPŽb bËAøŽšc›H…Ù"dÖ’ âÞ| 4ìÙöFjAäØ<>&B1pàf©í¹ÂB­ã*šE˜eV%/Žå+¶%QÀè¾ÐVd ·²U¶ í’\PB’ AÉ(¬„pAx ‘ªº+ÑCÜB U €VbáÏZl+©‘}¬/×vä“0u!Çp¤JæC–âTÁ®%v8ϸ<áD ⦫ÈqTØ¢ÆF ª¹¤ H*Áò¹ã 92¶ ˜žWŒ@EMz!Gˆ­%I‰t׎E6œxŽ‚(XTǨ‹i1ÒQ‡aÕjGª%LSc8¤ÐW\%AÍáIₘuç Æ?ÇJŠIGÌ«ç ó† ¢iI*FQ‹¨¨ˆ° Wi;* ø‚‚,™.%Pé׃â ÝBi‰dƒd¨E,É4ÄO€9j$•P¥!T¤êZ3ÊŠ·ŒtîQ¥{9ä¦[q.Š•Àæ²­V²)*ìÚêb§œ%m–tºÒ´))!=Y*—SӪ؉2²@›u[´éþ½A™ëI$>É9fî={SeJv¸v)/TÕŒ­£³J—j7iÛ«*„“ÔY“&(³»%Ö[ÌFV0§m²‹Šr5Y¨è²%¥r•„‡Ø}²²&”]…Ý2°%@²dPjúŽ‚Äu:Æ £É“×B“#Ô™ÐbD:u"1D¥HÅcA•ÏIe^º|r‡Ìå^«À›é4r¯cÜpÉíøOÀ.c‰qñç>+8¶&9ðo—pÆž}Lò›<3_€pÊIoÂxß’Îf²î4ÑÖÇÁCcPÄ<•7’#'§ÙèÂ!ã·Ð«Ó¬Õã±{èf‡<±Ñä8ƒÚZ0:>àx.têzzóò;ç›õÏÙàùž[É>•9ÞßBö¯··à15ø#íø«Ú¾†x=ë͇xœ#y¡éúŸ`ü? Ðшö¹±³}«µ=ÛåtüžÔö'͸§½½`Ó£Øù‹ò+á÷Áñ!Ûéìü‰ìÓJiU†©ìÍÊ\§¤:eSàüÎûžèü‚'ðÛÚÜ'sÇPC•½EçÍ|TxTXA!E@¡‰ÂÉUª' 1ÃÚ+Áð(¹ê~ ~-=žõ¢¨ Êfüñ?ˆz}½½‰Éô§‡ÝÝß}÷uÁ-ö ¤Õ °560Rô¡aÖ E<-dÌ|èpK5@µ¹ÆcfÌÙ#l͈™÷£è€ÃEò:8 a¸À]¦Üé6X°4uÀ&»tvŠÓ`òîHð§IÒ.¤8IÙN$¹M&a?òH)JA.$’ „OggStBVX^7ø¥Gÿÿÿÿÿ¥ÿÿÿÿÿÿÿÿÿÿÿe'BB\¦ré.e9I! A%H$ =ÇÞ>ñ£GÞ€ûÇÞ>ö» ø(>ù÷ŒpûÀt×Þ5¯¼¿xûÀ}í}à>ñ£Fpx¼Ü ûÇØ€ûà}àÀP}Ÿƒƒðn{ hZÐk@÷¿‡à…ü–zß©ŒFt®SDL ßa`¶çkâ}›¼kIdË£¬‰‰™7‰…ΦCä£hC(Ã=Ô{œ lÇ—÷‡þ`1í¶lvܯgFÑÐËv"Ȫ/‚@ðcàÊäɾß-Ÿ•òê '’@u’çcâQYS‡—öÌí¹\êØ™äýº?â0rz³vJ?ùí~G)ó—ŸŽñ«w1¶'/ñË”øó?ðóñfÜŒ™9Ϻ–ËùöëI±ø[œbzËh ."Y³íHy±§‹´/•´`‰¯Î‰8u\“?jñìð-a¬-Eýt~_Å3œ§å$)¹•âùþíÈL¿PÿˆGÚfa^vAag—¥7×VÏ6O»›ì_bÌíbõ}}—à–öˆ‰µÂoïÔ>>Ü\>ª}mrêD­ßÞh2×ÇwitD+‚ÖVBwŽ˜è<‘\â'šrÍE-n‹w™"0X#ŠRH\¦­$ÓÍ»eeoö2û> 0lm6Oúä½öÎÛÿKÿ(>!,~ßæ%ù!”ø%KÙ=_oRü}ô­÷f0¡òí?|ö–T>lóö> Ùú·'g³KùÊ 'öx³£ù³Ílƒ>ê_àôÛû¡é'Ë^ºvÍ‘ÿö¯þ¯¾µ‰Xþçû/Ô.Bûþ]¿I$ø„!•³WUµ=¶é{-˜ÇÚ#Ò"ØLR˜u¹ÅßfÙ¥r&[ZüSZßkMnqæ&}fb_¨0Q2RS33‚f Ä%ëê¬{.ÚRþϺlbJ;ò–¶oy}}­o¢Š MTQPpÉíò?ÌåÚ^> øsâ—‰˜b2kÌKçFxð3ÂLO-ð«Õò#á|9©œO“|'Àƒdo„ð/îñÌN¦¿ ‰á¿†Ôd<×êx;~0G{ ¾U2¨LQ’³s±ì1ŽøG{ Mì"äÉÖVo¬®×õÊçÂVwDη¿ ‹+ |œó´ì‡­ïg èïÓ~''­ð³¾ @è_pÆsIS¡>ˆÚ·c•îþ @>o§^_È0§ÂÓìuXx'©ˆt~Êõ=>ßd{aì÷#3òpºš|§%xSÑO«ÄG~ôMžÔð¯èèðûøhwìÈziž“²ùÏÍüžž'7̦ž°;>¢”ÓÁ¦ÔÒ‰õ>Ì~ jžggg·êüàú’úÊÛ-«côIúáÅ*0ü ñºÁBÇìwب(ž°]Fù¬§ Ä8Äw:ìt/ÀöäQDï=P‡?¡{ئ®ñ×ÿ¢äÐ|W,w:Ç·´¿ïÔÀ‚{ô6þu1ÛQÔÕ…9ë>ý#i/î¸V—1äêy§o¼Ùjû¾’Õ}IÌòT»¢t­•<=?‡Œ¤ã“c¶\ߺRôiÒÁk.\÷©†\Šwö忾±;íN³¡g4]±&SÝ´¬µ'dN¤;Ñ:ª‘:RVT&¹¾ûmíó'TO~¥¬y …=2Ëñç{’éUï;&>NÌ¿RsSc¯©èðêÍ:0[ L$.ÅFXÌ‚¿qrÄŒca³>#œ¥›ºá¶Ô)h¾ŽÍuriêG*Q¬™>È“l½9Û¤œB'i¢—8”ï½Ýܬ»Î¦Jé]cvöÕ6„]̲Ã#è©åRÉFg,뜈ÛmŸOT¸$#.çxX“ôI¡.ßßîJ&ï/{FÁ]Á?ˆCiHd5;}]û)Nºé#. nîæI\Ë–iÇ™ih°9ÑÑ~kï#Z|•)ʸD×Þðø N¹ŸÄWë–Ø#‚@“Þ§À–)w<DÍ‹˜¤—*ÊXKÈ•ªœÒV#ÆEÓqÃ`Ã+,-ÒÖ6ÆxÆ8a…ŠèZ™ãÛž²GÇf^G‹\æ '¹qu±Ö ÆT½³µ±˜q.¤º–8ÝXÂÛ.†,î±ÇÆé#µ¼WKD¬¬\°Ò¡ÕÖ8Ùm™3¢(X”¬¹n®­Ìá†8á[3†ÀOM]jéYÆ8²ºººBÜë,„¶ÁgŽú˜+9¥ÙÅŤÂçˆøØšg1l‚á„<‚œûΫIá„àûcÖÈW%ÞsꢔËè¤ÍlR3)LÔÊ—Öï§SÐ|æç—“›÷/Ýô÷Õš—“WU5“´‡<$§<%Á0pÉíò½ßïy·à߇>œ±íO†{xÇ@sà‡^>\8kð~’ÊH9xÏà÷k§^ÃbrNxáf8WáI|/á~bt~NŒÍN=qȶLÖçœ`óiÂn³7¿lyÅìÎdF*:„+ Êf|9Ýsà ÙÁ‡'3´¾~)¼Ú+ò¯W¤Î:<‡\i-7{K½Þ=séŽ&qxä½:«e‡¡S©™ÁÝï–*Ìñ 199G·æö}àöõ>o½â/Ê©Š'e<¾Å§gGgÐà߈ÀÄÁF•ùæŸøtJ¦”ÃDÓàv|DL™‚Cìžîû»s|«`$iRÝÓ*T`-¤+³¡©T”Ö¨(ÐÕ£¢ICáA ÐrÌÐ6èbAÇ#jÓt“ Ò´Øæ“RP«b  @’ ”H@QIˆ‚DA%H$ïy~ö¾ñ÷¢¼ >àpûÀhì}ãGÞï÷¼}ã±÷‚¾ðxûóð÷½¯¼}ãÃ𘽠G»°9{ÊÀø ŒYÈŒÎëeÓ$§öÏÄ@€ò åšÐæ9ã.…"×ßSy ¨üøŸßÏæeüFSâMöp£—aûGl¦x§}£87P?³™0DmAçŠH‰˜Pˆ9ì…–{uŸ!DÒçäèä(Çïçø?¢NËQš?Ç¿6GÍÉaôl˜ß(ÏËö ó`nGG~¿!FÏÉæR¿àŸ³'Ÿ'ðHÇäøóC¿ý çR¶ oç¡ÿÉŸ>û±°ƒš°mú9Ø>°Ù“Š6óÓûïöÖGü8..o·ëço1–k“ÏAŸßçP¾& Cóíж{Ëøf‡"Ý :Ö‡áï:—ôP£Ä‘ŸGû=`:áŽä.(óÍäáð/™Ï&P(ÿð(˜†'-a¿Öe™‰\û›m¶l„Y×RÇ÷çÞÖ6Š ¶Ù›7æûoòû×ðH)×Ȳœ÷¡ûèÌv/ ˆž(ÞË âpIòÚ2‰‹`ó&¯ˆœò"ó•}¢6ñÙóä‡ö~T}·Éý¶üÙù$Æ~!þÁá2ƒX3Ÿ:>c“è©”Cñ;3µ™.·7Õº’´þ}F?_hÌ^xÜ™ÿun¶Õ<ìÿªKøÃó¯ÉànúžÇS$_0ÍóloOggSwBVX_£ïjxÿÿ7ÿÿÿÿÿÿáÿÿÿÿÿÿ…ÿy{b?Ú'¦7âÔÄù„yüþD?âè§QßôgáÜü(Ä£‡§xæ%'8òAE4ÖAOàPG#8PP˜“7éánSã–Fü™À|H}Œºs5‘u„óŠ0²Q·5œøë÷;,ϱœƒä`›ÈqŸÜÊR—#53ѧ¯ -ç+\upÉíø£‰$m߇+—9ñYÊß[ñÍxy&$x@´ðŠÓ£€[ê$ÍLáã;ß¼ù9KÞÀö癓´~ ³ð/ß<†³‘°ðv|ó£è|o/Ï74ä/سƒÛ<ƒÀòr´8(¼êR ïSŽ`òO úǤ߇:v|ï‘룩—å¢Ï$<ÏC&|À…ïNtKç$8NyÞCyæ|«G¾SŒéf÷GYÏhõiøçèâ õÏÚ´üäCÑåè_ö{‹ÜNÕð/‚«ðø˜|‹åú?ouøœŸu=ŸcŠÃ‡ÓÐï™âù¾ã虩ÈçÕäûƒìòt$9iÙô;)Ùó)ì§PÐù‰òŸ³Ùˆ{xžM>$ üòzcðyç§M{p×ÀPçUkX<g+ Á>‡‡îþk^‘¦…‡)è DCÓøuðSÝÝÞ÷{»± @hš©$ˆv‰*+}Jhp,°5A_A(QD’  ’`Ƈ­¬¬dÁ‘"›cfÀ BÑH$ ID‚ ’Ä2$"I I!¡‰ d@$ìk_xûÇÞ>ðx¼}à>ðxûÇÞ×Þ_¼ØûÀ}à>ñ£ïx¼}ãGÞ ûÇÞïx¼{q÷€øcðWàÎ݃·`×mh5ø4¿Õ3¼ð;Ö»V¦<àŽ/çövR_9x9fs—üóìEÄZYZ.ˈ`Áèìƒö† ÈÛø¤ûö¼óøDÏ’#‚Ö[¯3·TLG$?ò!¿“8~foÌór”ŠWÎ`üÆ^r€ß5úãþ%œŸ9™àÁù'Ïbãò& = Â~Üægs¿üq~¥øøçÄrx)‚ç#eÈçžâ²ær¿ ù‘ëo5‘¸¼®<ƒ¿zïКÄ!ˆSíü^݇ëøOÎyŽŸ Ÿ°ÇRÌò>È1¾Ñf_ã®þDóñ?„?<÷:ÃÚo´LPÕÚcÚOü’á¬Ûs;ðÊzÖ™±?dÿ”#šÒò­,´ ÜÖ]f/3ù0ŒºëD®¿À…y1àCøë ä½çüº³Y1 Åö_Švu3÷ ‹ ?ùwûúÀùJÌž&E?'çå±üpbdoñ+ž,œ¿¼òO0þ‚ªü6ËóåàpOÚ'íµ"L¼oä?ú6äfsn˜£eÁ2ÀzÓ<±—¯&(Ïßñ󓿦7œŸÕÃ&ò¸z¤?Eߤ¿å¢ù/ìÇá½×áçgçÀmùþ_h˜ïÎAßžh-í•A ¿½)ÿo?Ÿ¿þ{o·ûÛŸxfðÌ÷óýa­$\þ>%rn/b0L´@ùÏÊ­¶g‹1BàÎ)#ÿ>Wh@ºîE@…ÞEü¨Â`Ç‹ôƒòœÞdÆqǨžð ÏÐýz#›ü9½Šiã÷'žŸO)›s¼ÚõÄtÝþ5H‰‘ÄLÏH%dR»BÝrµÄMH9sçÐâÅ L9•„ŠËIIüYvyhËQ‹épV,¸˜ö¿LÓ<‚r8 N|ÔÍVLÉZ5›Õ]H=û¡–P“£&y¤²Æ‹ç?r“šÝ»-hÖsY䩨œ´ý)×é.pʸ姱GÖÔó¥¯ÈWT¾tµIÚÚu4–«ã ˆæ…ièšî͘eéûvÏ£ Ž¬˜~K9‘ûz4‡4ìçN’³¬Õ¤NxÓÞÝ8Öûï)eâØ™%7ª¢Ë™ž%'Ó äaò½6+Ñ&º¸³ÀWŠ 캒Ÿ¶cm­¼RƒÄ¤)°¬+ P|òk`y%Ì-JŠTÂŒç1®g ±“¬­S,c:‰!KÄ”a8­c€ÇVŒ;«9¥Žg“ªs'£žîuÃÛÕéõŽN§ÛôÒžC8ž÷³áÀ¾Þó¾Í?UìòA4Óà&€ùò÷<¯‡èvv{†>Æ+Ú^–l<ÍôùCćyà$ò¼`y¾Ø|©éÓèø=ŸcÙìÃÙñ<º}«ÀºÂ<ø ¦Aæüo„y€JvSÌèñS)m:GÂ1;ª„Q^…=Ÿ#Àêô§À ¦”D†ºö«CâòÇÁÉwÝÝÝݶ·%zÃ4­)áÐQÙ ˆ„ŠD  °dÍMD„F²jAˆ1D†ËŒW0‰*šØ[l-˜ì‰fdUhÓ[`¦Ù»a­­zñ@Aô I, 0$†${ ƒX1– H"Hb ,‚A, €K$„ÌH€ÄÞïxÀß>ðx½¯´}âQùL~€5Û±¯­ø#Uõ0ÎêvkÄ Î¿þã´"ùL¦XŒ£]ä.áBòGÛ5?ïOúžÈÜ÷6ûì}ÈGÔ<¿¿•ÈÛŸ©Q´À¶Ÿ×‚ ÿ‡ mó¯9¿#FdÏGÿgüO7_ñ¿ÿË-¹Wñ?#1’kž9¿™~dmú#v'(3óÑþæyãaNïã%Ìç}ö‰…™‰´~D$çÂ8~ÌOãøïêøŸ9ãog_þ ƒm¿·?>yɇçÞ;ûSË?ZF°³¨"CàùeލíÅõ€üâ"{ót_ÐDÄŠq9e‰²gk¸1ÌâܲÎÌdO‡'èÄþµ¡±fh-ñ!lõseÃø¢Œf_ÐþÇÁüíºÏþFßF  ~~Ÿ æQ¸(>û©˜†q6#²Î ŸXk-`)ef@¡y?Ë'x §ôå'Ûæ¿Üq¹Ø…!•œÛÄY+ßã²Á¿Q³ûÎS÷`ØñÔ²‡üB¿ÿ%?þ¯ièФÅ þ FPyÞî1ŸRGÞwÌž£ÊÚ`ˆ~kG÷8Nñ8ënK×–_œ\\Ô‰*òSü°ô?äCû_ÄÏöœnKû¼»ke;Y졟–Vò%þ?X]ýæm²>²ˆ&WìAyÊÆ} ^‰ç4A¿ý§ƒ9Éø0üf~KZjëo:£ûŸÇ¶×´Ê„ëÇãôárwÆûAÓç›õ1È™Ú"Kv‹þWGÀ¬ÙÇ¿oùPXÿ~àE>cõ¤‚Â?ø³.Íö±”QHwèó=RqO9Ë(£91Me<¤Ž¿R.süç~üêZ” {Ïqc)ÿ‘ŠKÂ×Íe+XXįѴæõ]Ò)Ÿ2ž¬Î²çõkçL¦Tµ9ýdyE†,%æ—3¥8–)NAEõ=È22´”ekô‘’ì]ç:ãĬŸu]Ôêrˆ¬Ò}înOÁ#IÇ,ÆV8Ea•”‹·êP·;,:SªÏÀÓ.1åft­É‡ÞgÇ&ÉîѬ.ã :1x5ÏÝâœì=Ä$q`«=¨£9âÅ|y££©û)‹™ïZÉ#Ÿ+ëG’GÀ¥dÞªLƒçé &²ÏÁ¾:ø áDÎt%ûÊ­9Õ¼­Üâ´ç<äp—)f¿fàõ+éeÂCÜçâÖ^‡´|ê«U(N¬ïåGáËj‘8Õ9vT¼£#%lâvÒ|â ×Úýù¡\øˆÊ7r~ˆ{žù'E8ÝéWŒd9Òî‘PDs\ãœî²ü%cD|cùX¬ç|Mm#cš­„m¶Eз€#3f)a…Ÿ—ZÊž#k 18aŽ'Œ1Ñœ|i„h|c„c&dÙ3Q„Ù«J–a ÕLžØI’P™äÉ^3Á•,QÙÙ¨ F,’ÃX㑌ra“'b0X-;G‘æxâ1Œc™“¬œBц°º*ÌX? `#j]_²’¥^1²Ë#9a £‚ÎsýÔ™qOŠjÎŒ¾˜ÎÈ+xÂÁ!-+2À‹Yt²·Å‚ÍéÓ3c¥Fu¹ÎÍ%È“Z'<%ÊpÉì~¤|(‰;fχ>+àë^SÚqc«°äBIßšbIµX¯wàÇ£Õ'à§Äù5n6ÜïŽIÛ‡á? †‰ñšüŽÏ'·Ù§À”>÷ÃÆ¢§£â|‚û !É^¯I:u 2ó#^^bpIñZ޵WËU&®´~0éä½á:ó§—S)yê4ÃáÏrvFÒYà Å`so°>¸go£ CÙà7ÁéZP{¡3„#Š÷SùžR矉/o'²”ùiµ¹ÌìúÀúOgÀðyƒÁÜžDìòÇۤ>fg‡L*<‚ƒÁ¿7‹àéóO9Û톄¥=/Ї£ÈOggSyBVX` {®ÿÿÿÿÿÿÿÿÿÚÿÿÿÿÿÿÿÏOAÁ,Ö'®Nû¿ ò~g“£Ññ=¡õà|NfŸA ~D;4§u=ŸÁìøŸ@¢H“‚M:!àò2¸!À”ûŸ§µ<{Ë ;-àäʽ˜'BÿX~Ê|÷ßPvÔ‹d¹18.´ul»»59®¤lË„«”f’·{ç»›+gDf¶&ÆjJ ª&†­J¶«®êçn-WSZ]ÔD«jªªªªÜã±KµJUWµª  J  H@„Q%A$DIAI…ª~`Ÿ‚hð,'Õ<Êϼ©UÔ™5£Lµ‰€íÄ/ŽTò¶Z¤%Ť¶¥G­’ÅWÁ×[™¯*E}H¶”ŽÚùvWý‹œ  U%fz³g¤«hL®Ò™J¡m«öT´¥æ+¦¶Ðo6M aó£ÈíM²Ûå{ƒ~3Úáe"kv€Õ7عX¥Ìo¨)—f(_–mª‡«àÓ\œ)`1±m¸,·®®Gã½d´’â'W.ÄR[–ë•ÚÜ­y_w›ÇémÏrouª›êÌëÅ® ½_eeÕk²äMæóy˜hûÆÛº®]ÊåMRg.ñ²[kœWë€ëRzí‡æÔ«ºL¥Z쭼ص֮Ý!y®L&«3nõS§ƒ–ï‡/KI]+¯zÎÛyؤµm}Ÿ›Í•<Õâ7;Ð Õv[¼gl -ɹë»&N+bêúפ§ví^röà€ãÛÙg/ wþP¶jGÞ]­½íO¬ú“&úÖNë³W²«Úì¹Hœ¢¥Xö³âs¡Rl\Ѐ[H< °Óy|#lê›õ—Uˤ7'Ôj’Õç–¥n\¸­±/:þW¬Oè”:èñ?źš":$AŒÑ¾¸V¹n¸ºGŽçɸoòÄœù–U9ÌS–K2­a©œß‡HÊF råq—ÊÝÊÏæ»žÂyÐX/¡Ë"aÉÊídÕÝÞ¦E &”¥®Õl2g—gz–⨲÷*wYr˜Âu&c @ÝäRí©r¼fWN<º†U—‘…!SL&2°ö7ÉÔ¹34Áüª2 C+™Or22iN|w¡/—¾‡<”TÕ ©yñÈû3”Þ' xÂ{¾Ù/I©8ð"WŸ‚Cð*Î7ðÉr|$<¡Ìð|_Éð>/<{>-Lõã:~…yï±ÁÕ|Z tN ëà¯LÜÁ1&s_'ã“9ìè¬ðÙN¹ò`Åé§Ç¦V±òø‡Ôƒðáù­cØ^Ðq9¤ëyXP#tk/xz(Y èjhfºGH¼çÖ×^Þç‘H&Ü÷æ‹ÛÛƒÔùŸ{WÛÚžðpÙÝ)ÈŸÏÄ'èä >^Ë|Ç¢ ¯Ì¯'Fš}År|Ÿ³ðy‰Èžx8hp*R@>gff?ã·£îIý0§³àG“ö ûaDàøžÂmN鶇·Ã§ô‡g“ÊžŸƒËOO§à¥i œße#(4ÓÑ…~b& HzžNÏ Óäðmä.š4ù‰Ëó;<œù m¶Ûm·sjª .± У“<”BŠ©Pm@BéPt : äûëœ PPH »AÒ0€à¨PYz¥JÑB‚fPD@EA " $>ðŸxüô¿8 GÏ>à?1gFÅý·˜¡ƒø5¦h#i޶ֆ&$äÄß0¤è#€¶ñüÉœ¸yßoþÚ LïgËmÍ·Çç cëömiç,Ç~X§Á³?çf8/¬<íÎb$]×GÂÿÎKhÇËieO~Æcñûó f¿&rÉkÿ[º2@üË¿Á1=qùÂrósñVŸ1ž\Ö ¿s—ãø_,[±c¯aåD©­Á0þøþ'3UÑ×ùÀ¸vJ@ÿ~ÅñæÈÙ’HIüàAÚI1IgˆÇ.žÃ¨È~?˜Žm¹ód§ÿy]Hºÿ©Ž¨˜>þ0)•'ëó}ùçê?bH‰<ý§üyQ™|ú9­8?8üêÏÃ4(Ûž À?¹óUà ^{HÜ•ìTu„Êÿ‹àQƒ˜"xO\A¸¡ür2 ìÏCò~}ûމSI?™•µÇ¡ì>³1°"Î6¹rúé~ϲ«—Åö¿4wHœdlqÞ󧢩õüý!ˆZ%MGj HôÁ®®ØYüý­»ïH'Ü]¤žj3¶èÈUaêþl¨…º0-·L MºûÍʧŸi*¿µIKÓh;ÑÃj/#d•²µØ²Ôm¥“äô¿c÷õµŽÛ ‰²ÂÂËW=½‰ôÜﯷIY Ö4ó;AQ»ççö’,Ž6D‹—.\ÇØçµÄ66=jÞˆ¥M ê,— ’‡È7“°X÷§‚-’±Œ‰&H‚¤³š¶o­ëôzۇرµÿ+õ$¯+ËUÿOÝ êV6eåd.ÚÅ.ûc{‹Ñ’¾K2«öÿÊý_¾<]ß&æ÷æÿíÐuÿ˜÷ÛâŠûïJ¹›c˵L^³È5ûG*™ÒÁ±µ¬RÕÛ¢Ï{ήX]‡ÚåÂmKh¢ ïµò%wÊàpÉï`ƶùR†æÎJ¶U¼Ž5Y8pÔWÂÃ+Ë S|oÆÄˆÄ1^,²¼BH"Ï⎈M–w¼ÀÙÎæ¦G‹Å^Né Ž#ðÉO¢K‚låÍåû¡íó}NmIL,ÙO.ï§Ñó>“—ä«,Nâ}†rö Ðá¯ååü”ôy|^3øiûy|Îr}gБžz>‡|Vöêõ>ó³ºÃN9ðÇ!™ä'/&à†£Á¢CM8  ùôÈA¬;4ðpG“^—9) vyx=° Sˆ”_CÑ·²žÃ`c6V TåoL)ÓÀðš—•¸/.†$”…’ˆ@¢¨røË½¼¹ëãqí½s=îðõµt<z϶ùúârÀ|Ÿ±ô`ƒ©ÒZÛíæ|¬ŸËäè2ŸÑ"„+ eú”åÆÁH¹0†žýÕñG4Ás1;u^ÒÖŠ:ƒÓ…9Kª|H×ð²1‚ôsg'gGÌùO''³â%!ù8õ5äíO‰-+ìªzŒ4NÎŽ‰Ùôuõcôè̇ÂöõÁò9àèüÞ(à<'4•Š ^ŽÀ1)$‰Q¦Àý9~/Ñ jöù+ËD&ŒåÑ}–qÓäÁX=ºüŒ4%Ð^i¼ö÷4PNHééòé¢rw~6ß’^Æv3òÃÜþí4=yÕåðÌéä7¸Ãð~Àu<^JÑR,DB€)‚ü@èç€wÊsÀDôpqXð. Œ´Ãögèði5‚iöC"³„IŽJõÒzv1]8{CÆëÑóÃ5Û_2*ªØœWÀòu;b“ÐòGzª:~OUx¤…Mͱ ŽD˜éh ÞûÁ÷€_{±­ì9Oá1øâúÑy9É´N竟¹ÄÀõ?ê¬CÍ‹¦Ì”áʶXáÌßÀžˆˆœ1Y<ÑDÑ=ÓýäûÐ~?óNïæ‘ßá}'Áßþ—çMäwÿ/ÿs4Þïw?èóïyôÒP<âL„F÷Zï“Ni¿”ÚgòçõDóŒ —?7­dpS¢\K'#j3Nr zŠC=ÌeÇP8üܱÆ%¹Çôê©Pf鉦c™ŒõF­c*‚˜îâ`¦Ë\aAÌ5hÉü~yî'ß1Üw'S$ÓÜ~â ÿsŸ0~ä°»3òØñæ7Ò>i˜'¦c¸l6;ÅØ`ZuîÍ8¿Ê¡†¹sÿr˜èdÚKÌ`!ž'„K–Àµùò(Ü*Í<Åçñ‰"pàû>y8˜)˜óLñ9Üøqü’o˜"UËF6i³ŠJ’¦À|úT¦0f"fp0¦S1LU)(šn劂¡qŸO6±˜¦À¨7Ï |S‰ôž›ⲘO§b?žšûž¨y˜LíÆlg ¿9Œ::hðæ¸Œ”“ K…{i“ñ)ç!•$)Rà…B)”ŒFó*&ÎXtÛŒaG ²0q$e“?ÆÈJ†Ç;ûYÜg ï˜là ŒÄ)‰Û¢Ö/¸ñ>åî™Rp;L—)—TæãÇÄŠ~aL­7ï¿iƒÝˤÙÜn)¼p ˆßùù0§œ˜ÔžöOggSzBVXa׈3ÿÿÿÿÿÿÿÿÿÿ{ÿÿÿÿÿÿë•6–^äº(S¿}nþ?¾˜úfhÚÿpåÿåÈã0ã’¨9¦LÁ,²Ä-¢Ø€A‡[ óe!t†ÂŸÇ1>h-ù?Öçs¡ïNìçgS3ô53ª1Iç0S6äqϘô ÿ3ݦ_ £˜ß?~ÈèìLNù}fµãþœù‰ŽÔìWÎñk0êˆdhvËŒöb•LéŒùˆ“ÒÁÆ)ìÏ™ÌÌF/§\牋Ü-¨6 ñö¦8Ó|e®%Á*ã&bsÕ þ#·z¡–fõ•Pfrb aäóc*pdPËœf˜¨Íù<9‰&I•›`ÍÙåfËÔ(Þ Ú÷òS(R3¹9pS Êø„«qÚ¤Œã1{ „S™–8¤ÃN¹»<ó噾êt[³Iv}·Œóû‘Ü2‘" ãüxÈ\¡³NñˆPI›»\Ó1{ŠaòÎS'Óó›^ö@d"fuP§SÜFißÓÛ ÎΦ¶S;÷‰&B>ñÓ›ö]÷jGgq@œû‹' ÑP•¦Æs=Ì`ò Itúo…¤ùò¤ßÎM7ûÓ°ÙÄ©s#ù¡Þæy 9²ºŒéûh“»ßh~ïÚœ1:9‰|lwr2Ë_ó“ôÊ ®–÷öí­„4Ó›üd!Bˆž¡CÌsÞÿ¦ö;àÖf•jfJjKÔËϦÆãþ%s¾´ÖJ,šÆœn^bgߎM9ÏîpùíÒPöc\ÆBŸ®x:äãI}9‡›“F9lgì–zlý6 6q¿;ãÓ£s‡3ÜîÇ?†ËÜGðFÌ!áóÎv6ÿè>÷{ûáäJX~ÄébÎ2o˜˜â‹‚“|Î>i¸r ž£Þ?ýîÛL¤9Õñ#–ÄÄàŒžw²ü°ÍòÃ>ãïq´ÓÓæ)üòcçæN§MÜ´ÿŽØ“–å±MrB¡NË9wmß· Œû™OßöyÿLɸ]ÑÿGú;àqûþ$Æ)°Oœf<8Î;p£É‚›Nþ3«²Wg‚ç3}׈&yÞËäáÆ¹Î3BÎóëˆÏÙ0ós¿}íù|ýf|šhCÄnýñAôé.ÚþqF5‘}S×ïÕK½Ý|°ôÉæ›>m—¿êØ6ØöŸS—ÙEØ&¥}æÈ?AVl¾ôÍQ«yfæÉ·cË3]šÁÞðµ4ü’{÷«Imß¿žŠ?^‡{ުΤ›‘aí`ó´¬Ëï[9üª‹•®°§»®îù~åIë¶Jš¸~Ùf%OA¥–ßÚÝÑmÛñ)š?½ûÈì—vrž÷=d‰3SgXYÕbHûãýqÎTæÍ–-‰U»¤è‰.Ú¸œ·•«µ±Õ*)dÈ”‰ê]â­­kGˆð¿›ôq A–4&eÞ›ýÅJ‚‰G†~à‰äÏÖü`–ï5:è—ðÉ=Ò\F¿sEK®ƒJÓ\îd`ÃHþ³œ#t‡qI㢴yÓ_¹À¹¯¼Ï…xOÔXË>ËÔe`p+¬¹låꕟ§ÚÛ®ÝJ,¦4yÖêïsãÈÂc–Sö3ç iÇ4Îñ·OMI•Õ”Õ¦êÎ]NÓ¼õ…ž½+²UÂÞâ’w¿}iFdɦŽÈU†Pú‹m2Ö‚ÙDD’j¾·É&Þ»mý¾gÚâëoO¥‘TÍ|vÛYÞã$I%s{8K²Î½Ï™–(-S"‘§%RÀ“:)Ô³”‘È9”â*Up6²§µYM¤Â'$íI¢ª‡: ªãdüæ°ïiçÑ$ÊäÍb=©[tÌøm™UÖòD¤ëBUÎ÷R\§k]*…“$"™™Jpœ1WX]cÆ<ÁYÊCèägµÑš²E–çºõVSæÕfXÝ%—.•¸ƒ3¬C 0´WufAfpÕfe[œ·:6#‚ÒÉŽÕ˜u#§Í{ö8Éß»„òê¿ciër·JQ_šÒ<°M¾çrUrcJ«'cmœÍ¸O94ÊY„ó–B[DZ’L}œ¹ƒÝiš²j_Sà¶µXí­Ù]X‘u{ßmÕZîjŤKùÃï] ½.²Û¼+<„ëž8‚F:NµÛ,>òÃ)J°¥„¦Ý¨ð`'Xã`ųåZ˜*:lj­«Ñ®Áu½œ·µWHðŒ1Ò}>§*ÂÅÓ¤rQÙè«-•IsÔœŸ•a„•'JÃOHHIZ­¢{'>¢û³]·*­•OЏ£†+ ;«l*Ê“3o)Qš”R£Úwî~”W;Ó?¤²ëôPún8'Ÿx…XHI$ªJž›f\éÍ­ Œ\ºÇ»ÒtË¥Îõ°Ü=$¸2(Ô­•;s†ÎTRp·ýéÝ,d¦R–T&QIa¸©Q)IôÝUl„ªãÒ ƒˆé¢º³}žôôE?‹irNs“²š/©ž­U"©ïx4¹&º—UéõÇÀ·³é©ž»_À"½Þºwäµy u}mä«]éÏ[ݤ“µ}kÃ9ùÓ[=W܇“wd3cÇ—¤äI©`pÉíø?ôÍøsÁÖ|Vqlõ.ç¼¼FqŠIá]ê«€b>í*FTœ¤ðÏÏ<ü'„“5g»Íìå7T< ‡ÁìJr\Xp¢/Rœ?"ŽT!½ñÉÊù³çTÑÎUஆr׳ûNî’²sG®{lCN ðœxï\Ñëžèg×Chv°Þ‹â4O<õÇ<õǃÑ8¯r|€ ³¥+È Ò*•àPªQ9ììõ}<‘áÓÓÐÀ)츜Àõx?ü}¿&­öÜØûæÛ†TÛV†Hci5ݺÝm» øÚËí—½°ŒÙžcm˜›mzT¶’Á-ÛGe×N¢Å´ž¶Ù&mÓ«mlwÌ6ÛC·n hv°wH¢ UÙÆ(\®‚_àEIR”((™¹IQ”@!EArî>ñ£óñúŸ€û–#ÁSçI_$ôcæ~1ð¿'Ìå_ƒtôdü¤Ë@{1Yå¥áR·R*i’ÉuûíH KˆW)¯ÞVÜÖªo«ïw"ròÜÏ«=eœvÀ3»M_¦ýËmÛ¬•¯Ý4³—ð W¯\©RºíÜ^Ý+‰…ÆvÓ^'Æå*EgW®¹s2dº¹aÛ–”)2'Ê—lw ÏÅ×s~mq Üò…¿’±%^ëpE'NÞ5IJí(¤MqRônrà`³Ü×g-v!R/OYÊ÷[²àîZBÐî 7År¬5z!e.Fï˜A›°zê]¹Þ;ÑÐäÔ…*¾´C¬å)6<•ÕóµbfzèÃ]´¦#5µÎ=$ÈÌ™1»æíáü!vªM™'©åœ|Ö½Vuz·jgz® ³nl˘“¾$ÙøÙÛbìØ•™ñ%ÌüL‡+‘M&ÌÙ–«jâ°NF-r£®R\¬êFٮ˭rjæ5%ðÌùrÝWöZ{W-òëÂ×zü:YÌBqšS& lKü…}Â&ÅvI™)i&•mK\š²E\÷‚ ¸3ËÒ¥½H}Ì %@ÓN›P±7 –lZàZz[JÈ÷iHÙívØ72]jÏVîºi‚ê¢FíÄß3øÒÃëÜ\ØØGk€„ºHí]žµ¸¸¯œƒÞ¶ÙÒ(>[Ër}Äò»n’l–Ä,€{1i°L@¶¥Î¹+n×#` ö¾þÅ%«-Ù+„B•ß`õÏudªêFdmµ+]„Ä’%V½b6\RS&êìû'ŸÕË­t«fJYÝÏY„5Þt‹s[œjö½k¸Õö[³°eÝ|ÕõvIYÜ«‹ˆé±ôµ´º¿.[]p^²ï2Ü­²·•ö}«.á)ISæ”ÊÉkKâIÄ9”…I³'))dã–‘?Ø A”ô@Aî»ù¶èK€¬Å%Ø•öàñ ùs)qgr“€bºuölÎì­ÐáL\©¸ë²E¯j‡U³d±h‹µwÕéÆÚ½uÕi‚¤¸.f¼á sV.¯³gnUËqqR-%Oyk®Þa£¼Ñ“÷ªÄ'V „çdéûöu6Éi[û¬“ùëlþ‹k%käš²§£òsûW8P[xLŠÕuþåk¡;4çq„ó-evé ?-l1xˆzM%$SÒ’2U #ЙUî˜~ȆZ59vNš:É-&áSø=ï(©|Óvëvi~N÷™?m[9pKÞü‚æC–T²ýÚFMÞr:CöÛw¹ .ú»ªvúÅ*]™ÙÖó²‚ õ[²Šà­~Rì*æǎ­Pû%0Aø{Ò®‘r ÂJ‘~.üÁÁaÞ›ªJAÂj»Íl´i?Id­ùóX#+´t¨Wà2OggS}BVXbe°üßÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿ³ÿÃË,~Õ®blûÂÂYΞû÷8ÑñHõXI@â©øuÂv8b]ÎJ/ªœœ-ÛzØÊü à> ÷ÝÃæÆB7h§)±m.x\&·R+ãÿ%íüÀϼۑÛIVZÀRôæ{žü2§=ë ‚ iøš —Ò¾í'~lD¡zk—m—Õ›÷ӥž·ßk¼,™ Î?I°ŠÜF&]o~å«·æky3¾þðŸo—?q†Î{öÊ2à×G‚Cê·q, wN#‰f[í/ý&Ý\oškRY¬ä¥%‡~ñfqàŸPï•‘DknyÅõÏEZœpDV®ÞAÚ$VNW%")îräLU?ÙU¤jìž’ç8¹uK®å'H@ÖEI4àP+R«ïì磧Œ9ØÂH4ˆå ›°–§TyÈÎsšzÏÓ©…`=©'m¥S*WË1ÆËqðõ…AN|Bh!}Âx«òÂÏ¢^£ ¡4˜B#¥©ÊÇù2ºÎp¬râqKçÇà1Ç"_4ês qac;5uŽœcK$Â&XØwsd2 a½Ž.é8=éó!û™;##qTŒ¾†Ð¨ÍOJdáFÀPÅa -Yí†IÂ=êiW\ㅮƽì)—a>LàSôiÖà©…jÆX0³Ò8ÝY\bf±ÉS “æ5®N:7XŒ0É¿Ãk n…Ö÷R1ÄafX«Úš*±Z³&QÌåMÕªuLêiÂLç²€¶§‰c’ÜpÃ1îYªÀAnµ÷ãëEIÂŽõ¸|Œ¡D¤–}̪c1„ñΗËB“©R™ªÁñ3,F5¢sÙZ³tΟXº}„ôš4r*‘T÷Ô»²ú¥¨CŸXQ}KŸî·ÙΔŸE"&†ï*£½ï£OÛ:8‘!J[Q>ªeÒŠ•*]¶Ôvw«y— ~â[×$9Ï–Ö Ï§½Zð)i(kÞAÔ†¥ìéuõù!ù(Xdï\1]ã7v|W9à_éSr;ê€pÉíø&MåãŸ|98˜öŸ#Þ¹ñ®ü<ü¥ã–µø?2!Máâñ'‹çžuÄð¤òuS—²?ànü8ÜÞw’üºú>ó_ÌÍÈôØï“‚H“ G”B^ñïÇÄVõÐ$]g!³½wïÜ¥Àôyé²%pã9éì ,÷DÌë¬Å}£îóðx( >ñ÷xûÀ}à×Þ·§à6ü€KZûß{_3ðD~³Àe¸’«ÃÒÂ;®€Û+Mv“bæ×-³¥Í$ô§®µËãê•îár纮»`6ggb>lÚ¿.Wbk­*‘’[utî~âÖ5^××˲“]]myJÙª¹«#tšÛvؤJÕŬV"³óÇ2íLÁkrEº#Üš]œ(ùNÀKTÕöÖîöìù›Ç»oìgvÔ‹Uúçé­Ürƒžë¯o©Ë¯«µ|úÞ®_äµõü 0ƒ–ˆ`6~ºlB­}W.]ˆYPÁàkEs—¥µ¶®KµS%Ίê®í¹±]²ÕÏÅ«–­Ô™¯')K±›_˜‰‘© eãÜb¿q jÊUµµ WÊJ²[Å:àZÊõ™•Î韇m˯ç¡$ÜÍ{ITš¾v·¤•-¹ –ü!uÕöÍjâçÄzogf­°I6k×ÕË¥9 Y¬L\gW¼góWW Ùv¯µ:EÌúùj“6+ì8©Ê—õeÖÒk”qé¾Të’§¿š¶w\Bð/+.ׯmuàøÅggé ÕÅ”•®-*Ü»]®Ûº…Ÿ‹ŠÍ©3kI œ@C8„ݸ…v²×][. È­Â;.Û'–­gÕh)_õŠ9üÇÁ¬¨è)9E ¹Ñþ|@ŸGCǬ¹ËÚk/߇q®¿è8ä,$êQæ²áȦÿ>wŸÂ#ÓEè~6¦5û9ZQ¤¯šv»ùèKŒeÏÈôç’ìYÕL2þùÀ…mDó_”àä7Ïò£^êv+œe”|,ÖPö5U´»R ',å’nÔ„(™Aúœ²á•eÔÑΆ…‡ êùý¬£!Ëú«YrŸÈŽ"G}¥»Ý­Ë¶za4–¤U1t²ª¯™ð}=ÉÚ{¹¤EcôŸÙÉÍè°è,  ª)%KOS&s™ÉÄ–»“F«7Ðvý©cU³4A¥’°’§w°©_+D¥.&î‘4PúxvšyÎçD™‘.~¹Y2qƒ¥ûî¦pZ3Ôʧ¼`¹[<ÙÒL*уöÛ›)"£¤M-O&R“˜cz*È­Y‚ •”XØŽ«F3Â4œu…Ö¦ °Œ–±ãûä¬qŒv5†s‰XbuR¥FÓ!jèI:ähUV«Æuƒź²ÓamÔÒˇV2EqUYl±Ã ™ã§LgSÞ¼'~¥ž0˜ÀÛÙcAŒ'“ JKÆ1lŒ+Å)s+0SÈ~×á–‹>i0:§:s£'Š2ƒ/Ÿ?W¯­~NkªW^pÉíø(Ÿ#Í3É»9c‡wã{ìžuß)o êøXµ9x»ßÀN¶÷X:wÇYêüŸÃ»øn:uÀáÞ=ß(So¼Î]êžCš³éCTÇ›Eú#ò{‡!‚n­x>=®¯QÈ€"$ƒYUñY'SÉ ºàañoiyçôŽ—C‘:è({2ûàê$&h2 Ÿ]…ìñÂ}0*‘{S¾o±|Kág³Á 9¿G’œ”îiµº°òýãàôááÃÑ€Ó·T÷ºßçá7Óä_æ½û}:{>çGÀíDéùÎÈz—£ê{=ÈF½0ÙÍô“®:‰Ú˜óÀ< YˆÙb1€µ%jL1G%!äÃÁèø1*ʹ -³ìàz=ÃÝ¡›cM¾9º ww;§8î@2O‚vì8Ý;ƒ.œã£cMQ’Ch:ìîn¶»-:ˆJÛI¶-§kº8†u ¶P IÂ!‚@"w¤œ$@¢AA ˆA R@ Q $DIA÷{_p+ï/ÞŸ|û‡Þï÷GÞïx¼÷¼¿xûÀ}á>ñÞÖþ½Ç¸;kÝÌüÚ“„W\Ìf±®¼àX„¶Ü¶µËƒ –ëæÕ®YɆ˙‘öë‚:íÌ™ šQ@ÿ{ž€õ®:ë›&ååÖß÷jÏ«Rr½Ù°Aú³î2ßß«·jí1Uíí­ÎÛ]©ek×¹šì­áI¶n„Ô½òÖ·Z¢mÿûvnÜ Ù×5ãÙÍ\ Ú¸ZåÏuà©ÀÅå#«_6\¶UzTòå®ìÛ®Ó–­Ç¶Ý|ªÙªЬ9<ºÚôŒž«©I_VvÞ^îËVº×bR¤¶²ëv¼6º¾ÇiÆ®¯˜­*ë‹©Iv.Û·;kWX»Î®\øªöm¡“´²%·ieqKšæ¡.ÚÛœ"¶ŽrB ªí³[«ù]qm;¾=z­*­fÁT“kÒízá‚í·”—&LÉÊœ»2K¶b7Q•®H¤Å¢Àl ô¾*Ö#ú½¬C;(kÝ­´•Ä/ëskjÑÉ…µR¸.Ú½ÄGÛŒõíË^þ¤¤·:}_PÓJõµ}-&|WÌ–bà¯âàpVíÇYËvÞngGËvH =\¯|¹—S5\|Rë²^Vsv7çRýæ9ާ¢þdG'Ïû|DÆYØã#BŒ™Û3”£ä¹¯QÌ_ø™âBÛ-Ï3æs³ÏYù+ö¼¿®Ž¸Ïyš>}|óÏ´:Bí‚áYsï5;9°'¦3Cðp‘ÏÖ ¥wIp÷ïêÚnørÖ{C©1áÏ 22ʦg$`Pýv‹,½I×l[Z0ÚF$ð½ØæGì¼z’Ÿ,²LÈ4¦9â_KXŽ‘+½ãleÕN×?É="‹òzƵL1ënY8‚¦kõ’ìaRÅpŠÁÌþN}gÑ;%ß’Vøì¹S êRÈéŒ6uC²ïŽT_,S9RqÉ›Üe…wg-q%ë½Ã’>Jc¾MzDMîøLêE”VC…ŽÛ·oHë«æWë#Ö¥,¢‰È÷¹<`;n}ÈüAÏ"'÷x&\²ŽÊ@jZ<¢…¼BoZÅOÏŸ³L9û>:XOySV‘jxy±’’ôŠAi NÂÅ@'ò¡k~@…P¥ìª¨Æt±ÎhT„±Ò6#óac“E‰g†5«3ºÍ~¬êÚ,g4•¬S Æf(Œ0¥ÔÊ¥XKqÔ©g†&jÌŒ0Ãb’XÝkb%ÊT¨ÀæF¸ $`Âï$eŠ~+XÏgÖ·€'ë/Ñ¥¬á3çŒí²2›ï €UãÎŒìJ2‚‚ñ¯ßÇ\êI@@k¦£&H²È©oRͯ•SótÊž?xÒJªBJ§ÔêŸÝNx)³Y©K\pÉíø&Mø7—Iœ¼ry=¯Ç=¼||ü#ÃÞQ$ü^1€¼O“?8Ûá“ׂrüšü†»³­øÛC²oa¨ù° ʀᕗzÚÎ@:†yÞ¶‡lçÅ>N 8Ìa/{ò@ óDä11)È/„ÎE®µž88Þa¤;žBŠmóÂrœöí·«ÄLÓ;<0¬¾„OÛä{!P;}£³çCoÌíö§…| Ú¾ßv³î/üéðYÚ3⿜pЇÀ&'£æàœO›_µõvƒϼ0åõ?D-úš~ïÔO™ÐOg“ìv[ìgH/ƒO‹àû¶'vkOggSBVXctÕè& ÿÿÿÿÿUÿÿÿÿÿÿª }¡ñ| ß=aL'{¼0FDðù´ÂŸò|M ¿e,Mì¡>G…¶ÝÜëÑÖ®b[mºÎD#îä).QµM·\å1¬j1™5ÉÛí7$î2éŽÍ€tá­tÝ`®]56swr›8ÆÜºlqlYR’Pe€APH@!Z ¤HQ"€Hˆ!" $ŠH"-}à>øxƒòØüŸð(tú'ÌN‘«\äµõ·>OfÒ‹Þê´©Ç­“ÜWÔœ½gVI²'g ©¬ öOb3±e^iÏçkžÔD`JW¬¸™6r&W&Æ©Óåb%j¸™ïv!U0­”ì Y©IIµ® b=Ï„)¿Œ?Q ‘6zÚ°rLV€ˆ WgKý¤rÚ·]³·qBvÁ¯­rçÅPAÄiNï²rêT 9D6ÔÕèuê±]Ö±%¹–­\诮œ,ÕÕ)ÇIØ=•Øn°$L˜„Ý̶êK0Í|dÒË™ÛS½­üî[æMˆk ¬ QÕmH¤‰×:»-Õkµ×$pθ¹"¶­µ[µ}u¹mWlºÍe».Íu¹’Z)ÿ1sù–)E¥rÔ…/{—9i(ÈTßfÒÄR×WZ•án¤#;ñn#àS/j^òìªõËÅ!ÖÔ·f®‘D2L[4P´  ›»Å{›7vÙÉä™&b¹ÂíjB ZålÄÒƒjùv Q%ªr×Z¬CNbëíØ®ø®UßE¤ÕñióÝrÕ·»&û`1K›%¶Ì”(‡K8×3k‚£™Á¥Ä¢×UÿÄŠåºÞá BVªÞ]²ËmJ±‚!*¹nÄ#79KÕµR1^TµÚ­Ö6ËörwοþË-ì‘Ýÿåó« rüê×+–ñuìµbÑ×Ü-"O?…šÅííÚ‚òuæÏ,?‡SŸ=Åwey™vú>~6dIh‘SfâNÊ´…¹5±Ó·<¿}eàÁtpv³²žid™»>)qÝöëm„ìúåFk‹g½/oYÎÞ½{vûÖÉjwß}ó»sú2¾–²©YR’“[O½o¾òTÃŽ]5ÒA·§×§<ºiû*ÖZš©ÒZ§mU-ýïøÊ­,Dú§ýÑ×ÎÊv “>ðS»'X5Ÿ[à8ÎÁ#önxø%eÀVBǨ}#ë£á‘ÕYÏÁ'ê4. ˆ‰ž­Hs½$² ‚?…´“DPÉèîÂGÎ. …èè¹eË—m9Õ[%”Ö\¡ÿ~iØï»Þc¨êDéC«ØÃ'_•¨–æ½îwÕÞ ïd{e0‘.Údw™þ4¶×¦ÒùRÕòŸU8é×wbt”{ÇoN’’¡$ËÆÛrMiò,ü÷Í7Þž‚_O{ß¾‹,œýÑsìcò•o”×ÃÆ?E¾3G¡Qƒ[V±HlzŽÖ‹î®Ej…ƒ˜ÆV,3v6ç†<`±LÖÝLpŒhbc;ã2qÆ0à ¬qdŒ16®¬uŠÇ;#lš,yÕŽ–9ªÇ7A[V=Žù«%–Œe mŽæ\*0Z­ÐæxÍ0œiïT¸¹ŽxÆÖ]¼Nn³ìb1³&&ïÃOÈ.­Ã ðK =[,¬^0Æ µ¼Â&}‹Xâ1åcnr%F+VèôQ:™„ŒN»šÔ&}‚„a l& >™ýë;ÆÝ¦„$%¶å,+º8Lg£[XÂZ «P‚‚ejÕ°Öj¦YWåÓÚ¯ßgFs¢¨ýT—?gßÝñ«¦µF2t‰”©ùÓ¾·f÷Óý-ªeÒÊÇe§<œð7PpÉíô£â~Îæü9¸3áÉË×ãž½§Šœ¢2V|/Àøœ/3Yc×Üë'¹Éìù€ýÎ=½&{}¾8=x æû?fŸƒÙð{S²¿Ä[>çÅÓçS@ðþçô³²ƒ†Ÿs“ä'tz£ÞüM&ò:P;<–PÅp1š0{ Xà ‚ùvv§èù)Îd®ö'Ô_ð=ßwvÐjIP@ h3z ¢µ|‰Y@ "ƒ…ªTP@¡@ A@˜BAŠQà ‹„_$ ’dP Â)"¸}ãï>ñ÷€ûÇcïx¼}ãïxÔ}ãï÷¼}ãï÷€ûÇÞ=ÇÞï÷€ûǸûÀ|_…HZ ´ƒÜz$òu?YÌÌõqj’í«³¦W{j*íy×Ȧ¸÷.Ï,s[­-vÞ4­æ@?xÕg5×3Tªë•Ùù9­ñªç¸µÂgËBºåœà1ç®P³mµÔÓ*êºÓw>eÍåZG¥Øšæv{ã‘­ZÛW{]7®JWœÂ¨[<½œWÌÁ:¶·e¹É-YJF}—_?X›™à‚GrÙUˆ' ¼òÝËÎݯš÷>gl™3+e Òj|À·nêæ Ê–çŒ>"æÛËs¨£l÷0b®u¨®½`¼Åwåó;W\»]›-VËYíÖ¬¦ågÛÇ ­d­&\´•²Î5É’ØH›Ù‘ŸuŸW×3ê¹ëáîäR7™³ë­æ«­[—±J0ò'ºý©]mJÞ·ß©v·vb“=¨ÑZ­U×eΙñiêÜdÖøí²µ¯ŠK¯™»0úÕãgɤ^kÚ÷WQ9͙ݚ†ûZº¶·„ÿ•ó³s`µµöëçlf·`êÕ­YÞ-IŠ•×áµ×[ª¾bà7Ñ_þͫ帹sYÍ×hBmsm—3Û‹ÝÜ(!]¶|·õ·«¯šìÝÚ¯&Hàƒ®Àky€Ùëk¨4ܤÊ]‹µP9rÝj½®Õߌ k—ráDZ½º…u³G~µFF[渶+·;ÛA¾k]B ¨]p9€´µ×èuù¨Ó]æ(*îìé«_ʹ‚e~Ú ]v »¹zÒ碘Pe˜Ê•Åñ-:Ç:íƒÞc“äñ=ø\ÏÏá*ù#‡9ËeÅâè_i~å–G|ÎD.wöyM†X6"{…ó·Ýù•ývœý gà8ó”Cû£ÞYC¶ˆ±£ž%ÕÔÀ¸f¥…;î1g–0t„Ǻ­d:Ã’³Ë©æ¹ó ­bfΫ¼ËŒsá¡ÌéÜyÔ¸úuU¼¬¼:hƧΊ9t˜ñƒØL¹—)û8s§‹¿µó2dËêï(B†YØQ@Œ£ !Ó[í¿ø{!Ƹ°çÎmûöiš©a(K ý®ƒa·>Œ1LVt9fà˜*É÷¬º«œ='÷eüœ?!µ"³³J«UÌÉšù÷¸äeË¥Ÿ;ðë‡>`±Ó²d=Õa¤h†ç!yR$dÇ-~¡gâì™Ƀ‚—.tw«’Tž|™ÎUWâXm—+ ÓM`ù<Ò)q‡éG‡[–t£ÙÔÓ蜘ä쉜è=R]ÕªÁ8z«5,$‰Ë•[•/Âßœ‰š’ä>ÊŸ»j²õ…Ûßww–––{jR沜ÒÕ¢Bñé †Ñ¹,ˆºm´ïÐv& àD!`·%„¹)¡Ì(šU¯ZÜȺ&QÄs8a:ë s±XŸ+X™,®±Ã)ž ¥' Œ¾Í‰JcŽ8²Ç-$.™âÅú’9NÆJ5XW(×Þw[ÆXQ:(Ë#J›1Y21œY`±Äê±·º– …˜ÖXÎUb‘G …†:Ç-Ï#$J³¼,2êƒV8±„B˜¢©j^õ“8ãŽ3`¬~±#D«{cxûPüŒaÞÆ§2­³Å,Œiœ#M’;õFV¯~Ú¹L¡-¬íñ‡mL“þ²3flIq|›ó„¬ß$¤B_¿çý¯Ü®¯Ñ›Ù>5Ú¨œ*êcy1‚¯S›ÌÉ[iä“»êžÂ”ç‚[«ÉÞð;dOggSÿÿÿÿÿÿÿÿBVXdüRsäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0ËüO¼cï{¾ñøw{ß½¯¼}÷·Þ_¾ýãï¿~†¾ÿsï{»ûÇzw§zw§gßÞ¾ñ÷Óï°ûŠûþó~óï{ð—Ø}ZûÚû¾ûî·¼ Ù¯¿u~ðb¶`ö×ßM|wxípgfñÞ0¹Ë7‰sFo Â÷×]ïZcž ÃïPzó0Ô³dÙŠ˜’¼\K‚wd%0±Å’\Á-ë»;ïž½úÌUöÞ×à½Ê$ðž{%<³Â'yÙÇ[©½¦w&„ÞO“|ç„€{ß«R@­ï]î—æ÷]=à5÷í»÷–¾­}ûÚ齇ß÷Ÿq­:9J›«ì£ï}í ñkï­Ó½ aî×ÞûŽÂš{Ä+ß¾ß{O¼÷½Ýi§ßôkeW{ZWØ.µ t=îˆïïxk£ïy}üUá}–µ^ÜH$–J¥¯êŽR^ß{|7E_¿tÓÏ®Ž¬q=ó&,©}]ÎÔFKç.`’Ù¦>ûÚö}ö @ =ÞÔ æ•Ø3Ún–ÞfyCÎëï¸ß½ß—ß~÷ÞûÂëïkïkïxûÇÞí÷½Ûï{_xûÞï¿ñD>ñ÷¼}ãï÷€ûÇÞ>ñ÷¼Þ>ðx¼Þ(ûÞï¼}ãïs³_xûÇÞïéO¼}ãïx¼ÞïxûÀ}à>ñ÷¼Þ>ðxx¼}ãï÷¼}ãïxûÇ‘5óTæMïž·Y:Šr%×ß ƒµjÚâXp˜D¦…2XQ¿y|GÞ>-2ýïx¼}€>ðx¼}îÚ>õ÷¼}ãï÷€ûÀ}ãï÷µ÷‡÷tûß{ï}êü _cî{ÒÁ²<‰+(|ôûÝ»víÚ´QÊ1÷µô=éð½Ä¼ÌØ5GnÑ^.ÚêëãL“µh×ôcÅß=+·nÜ=ݎܼ/`+·ƒ|[líËÅìÔ¾œ°—Ö–~îÁëšùâ_ 4owO€®ÚöÓv4KÌÍkÁònïOaÑ~ñ÷NÜ4Rõ~áñÝv+ävˆí€]tjÁî5ÉG‡Ø=Ì®6C V³ŽÙ}†µ@x½^gàñ~!EXƵ­}ï…ø¼Ú®Ú+_% —¢#±\Ó@s뿃äòsð+tØ }à w@÷z ÅpáÃQZ,1ðxޱØÑÍP4½»»@ßÅ7ïàf2Ÿx¼ ß}àf³=×x| W àl³`Ÿxü â]àp³Âx¼—]àt³¥×x<—]àt³¥×x<¢]àw³½×xü÷]àw³½×xü÷]àw³½×xü÷]àw³½×xü÷]àw³½×xü÷]àw³½Âx|W]àz³Õ×x<ÿ]àw³½×xü÷]àw³½×xü÷]àw³½×xüÂÀégK®ð:x.»ÀégK®ð9ø~»Àãg®ð8øî»ÀßgÛ¾ð6x.»ÀÙgË®ð6x.ûÀÕg›¾ð4x¾ûÀÍgo¾ð3CpôÛm¸Ô+[‡ ¶Ûm°nÖÛ†σm¶Á»\7 Lm¶ÛmÄ6Û´ø8Óv¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¸>Á»`ÛnÆÛƒÞ­°m¶Ûm¶Ûm¶Ûm¶Ûm··êÛm¶Ûm¶Ûm¿'¨6ím¶Ûg;QïW °lóµ³Þ­Km°ƒÇ½Ûò0`ÏzÃòy5jµ»8znm„0Ð0M¶ÁÃm¶íPÏ»9mû°ˆ‡îà0€ƒîÖ@Ý®ÀØ0a¶áƒýÜ6ÛvpÛm·g ¶ÛvpÛm·g ¶ÛvpÛm·g ¶ÛvpÛln6½Óxð7bò;]…„7î–Ÿ»£Ìòy;|ˆ!ù=ZÌ"Ø=¿x…ä¢ÉäòòYä­iŸ`ãP ÄÛm¶ÙðMùµ®SI^*|=ž!^ú_€k–¢PúŠã.³‡ñ Õ~ð(øè…<ÐMîºþ'‰SÀcâ4ÝÑä>˜¦gÀ`6SC>!šÿôGfSª \Ôx< Þ.ô#[Y"ˆ y¼Bõóà¥T”Å tC·-¯ÄM¬­i¶?Ïñ mÑø‡³Ôd÷´T+¼&:¶bMi³0ž :çÌ’°T<Fg¾‰Z»ÄiqqÝ0¨uƒeD0>š^saPúc^„Ä0j € ÄTrÝ÷'‘Æ»2ßŃÄnëæÀ-t•0ËÁKý~…Kއäo/ºñÖk¹|C]›Æ1ˆð ULBpGˆÉ¼zQÕ®ÃUÆjº*þ!Š.3ÇÊK|‡¼–žǽÏ·Éäò[䳆¦, ¶ ûÛm„¶Û´À™ûØÞž1òÕ<~Ø£ïÞAdËäòÍK+¥‹þ½y4µÒ0ËÀ—àNð'^/_;Ð=m;3•"aÈ®Á‰ÇWãC‘ü > Ùê^„Q"Øcg“…õ>ˆ-Âh›Ò‡ƒnz|H=Yæ3ø¢< <^¶O¯¼ÃQ …Ð_Â_../ºó`ËWÀK…ìð$ð 9<ü1?–Ooì¾ÌyóÔãƒTi £Ñú=eÍŽù< #à-Ä…9óÇØºrà^TApÏ”oò [ó àQüö.6‚:õ WÔ›žƒVmë^$?'´Ðøj>#¿€ ‡–·‹˜Ð>ˆL0Úò—äòò =e„ô†ÛhvpÜ6Û·8Ã'Ñ‹ÀiN&δCñD4þž:߉Àc‚†¢£[`«>ïO€s¢¾cIw¢0Ïÿ€2Žjä%‘£À¿®x’rø i‰…àÂzî Ù¬'sMâï ‰ý/ÀC{©x Œ÷€/À£ÓÝ;ÓTS;ÝÁ੘_ì›É_!0™Žs “U®­þ.ºü >v?SøÌTÉÀi¼JžÉ» |7€®¥¹q£Bž^±®øCLøèu³D`ô¨%òx÷’ÓÖgN¶|m¶ìáÃm³ø! %7‡@j{Ì(Ûm¶Û>ÁÙâ¯`ýÑóî°`nÎ[~ì˜6íˆ6vÛm¶  ß»¶*\*3ßdØ"X.nl¬ã@“<í‡lƒpX"ŸoW€ˆÌø…ÌŠ<ë]~ì8 P;6½Ï°´ÀñãÖ»až<“í›Oy<€ü€Ÿ¹ãÌ<žCÖžv¥ï:vá°v¶ÛmÙÃm¶Û~í©‡îÛ~îÚÛ³„´Ûm»,Óµ»Z†ívÄ0jßaì-ö͇MÙËm¶Û¿™íšü? ƒ'EBƒEÄl»ÌU+³›´0œf“Ÿ«È9°¶íôV·`@zÓÐÜ#ÊÏO÷Ûv°›]°Ûm´Á¶ ?ŽÖìQkK[ÔƒµŸ‡cóõZh;¬MÛÏFoçkv%´«5ZÅGHm·bò[ÝT½â-';x˜Kjú¥¼´õ„ƒ©óÛ1]³Üì>@ω‡Öt^ËoÆ­à~KÀ÷¹{¥aò[äòC'“ßÉä÷Ø6Ý­·îÐ4á;[èÛ‹[gà@Ï·èÁû¶Ûlú4(ßwˆ·Å1âñøœ¨Þ"O§Ó7˜ÍUüQ¾&oˆÄ{â úâ|ñx ;(æXÉ™€»ñ x¦Íi¼4#oßÀïQðCxs߯€ÄËâ&ñ7ø›|I>#*‡S‰@ÉPMóÀïà© }wăâxÍ@ûÄóâzLJ‡Šæñ xtn+cDåÄ¡âNð1ø ‰«ÄDjÌ7õ 7×d«ø ³àÜ@FÔyÁ°÷éaˆnv `Ø0^k3á.'Äâ߉ÃÄßâ6àûÀÝà0‡ÇÀäÿñ=xž‡Ä•âxáð$xü¸ÅÁàIîßg‰+ÄâSYè4óVhé^ß·Ûñ:x“Íw‰ÈøüHÞoA¨ð*øÌ÷ÞÞ$ŸG_?/ƒÀ•Ýöÿ|Mø”|J' ¿O‰3zð,x¼yð=?lj˂Œpð x‘üF9 Q†ð(›¸¾¨‡‰x߈//‚À»àQð8ø|HÞ<9swx…Íω`×ø‚Œ `Ö`ñ5xœqbc6æž’dŒñ,x¼O |Ox< 1¬>OCB–÷;ñ4ñ3øš|KXqáð!Úøycm†½÷j¶ë|žO%®Ý“É-ÙÇ“Éä·ÈÀzR~O(G”±n½× )•ì›@>½ÿ`Û>Èùöàû€ö³íƒGØ(ôl?ì0q`~ÁƒqaMƒ@½‘ë}ƒh_ží¿`ƒÙ1¼—Ñ;8ß²mžÕù< ¾/ŸÅñ*xŽ|æ4ž×›“Àñà91¾¿Fr‚M»Vü[3Þ*}‚<½ Úb+ÿx¸ß²áDÔxŒ·Ë¾Œ÷ìž`×Þ3àgðe…kw±à ¦}Ìt÷âfñø¸èž&¿g€'À5à¨ÿ€±Ÿ<ö©9¼õϯ*¢Yh÷²ð/éf“À+ÝMÐ? j×Ûà(ß°ö̇²†ýÏ{låè{È#É{ ~À"-”Ú‡äòOggSÿÿÿÿÿÿÿÿBVXeƒÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý€?'’Õéè ÅŒªÓö m¶Ú—èô¡øGØ&Ñ÷Ñðl"ØæM³àܰnÀý===Û¥Ã`ÁXœ{úzz3ö¹maéüŠƒÁ«d+p}¢FìïÑZâÕ°†Û =k‹(cÝ/MbÕ²½?sÆpÐUS݈žç½={îÔü’ÀòôÀzÀyú ³¥è¼žO%Š‘‚ݧª<ž@ôòzyº<O 3ËÑJ‹ÚI@ŸŸó{&‚Ùõ«`ùõèÁ3çØ6üɃoÙ0öÁÚÏûsé¦}¶½‚ö^È›Ù8v?eì­öIŸôaì7aöÃÜùÿaióïÓÐ=‡°aìÙ{+}— {akd}{/d›oØ<íöÂÙ·Ù{ öÂÁì=€{/K}—²aì,ÃØ²öVû/dÃØZƒØ<ݧ{`ßaìòµ4½‡¹èöA콓dü‰ë}5jöAì=…‡MA?d mò€=èü‡š•î ðVû#Éz4ü$JR Ý ’_›Õ¾%¯ݾ%ÏÿKÌßâ]·Ä¿â_·ÄÃ}é„ßÿ‰Šß‰Šß%÷¦a¯ñ2Ûâeñ3[âfûãx™íñ3øš-ñ4ßúv߉¦ßO‰ªßeãy½ï¿ÄÙo‰³ÄÙo‰²ûÁ(ÿe¾&ï}¾&ûïv«ïñ7Ûâoñ8Ûâq¾û÷øœmñ8øœmñ8ß}‚ûüN6øœ|N6øœ†½3Áýþ'+|N>'|N7ß`¾ÿ¾'¾'ï° ‰Æß‡‰¾ß}ÿÈh/ÄÝo‰»ÄÝo‰¿ÿÓSýþ&ë|Mž&Ë|M—ÞÝ·ßâl·ÄÙâl·Ä×}áä×ÿâk·ÄÕâi·ÄÓ}öì/ÿÄÍo‰›ÄÍo‰šûá¥ýþ&[|L¾&[|L·Þà$£x™-ñ1x˜­ñ0_zA7ßâ`·Ä¿â_·Ä»éÿÿÕ¾%¥xqØ¢¾ž:Ð# ûôè?AýúÐÿ¿ ýoè?|<7÷z0xQ@𢀠0 +Á?ÿGô_E%FPLºo'èðÉô#pÍÁ–ÅLz1³ÿÜæˆñ$÷ˆœÇ{ˆk„8¿>(Àǀ袶w>6t¸‘ýæÄÛà“O³:æ®2÷MáÍóÿ¹s<—!JŠaN ÆÓÜã3?ð󀟗(9DEäÈo9Ï¢'ì"rQB±›=Úøøœèþå{ñc²+ÀÈx€÷J3ë{Ÿ è<Ð{Ÿ hå^qœ1µ»Ùva” ð)„}üÙß÷”@HQ†ú?ó¢¾~ÏÓb}3‘ÎÙÀæ0äqLôè¦ã—>™.)ѱ2xÇ3>N¯ÈôWïýÿ¿ïè‡ß¿{ÿ÷¿¿»výÙ¸AûÅx}Bo×-@€Œ(L[9>•´àÐêùÉÞüé䨩`B÷¡ô0( Ñ@*¡%G<æ¾ ×”œ_B€…!x×jiþ”@2ƒ5E;ð w› âÛÆ¥¦–•‚‚q*!ø9d±@2€.x™ë¼ùT2W“£Ž<¡A"€œÙýŸ=7ôBgáÙ†iŠ AQ :Š!ߟҠ˜êŽìoœ<vžgKü•î=чdB0â y@Iê¨Põ5~v:X©ÅwJî•Ý+»¥+Óº””(P(…ç¦CõP #œðÿC¥bƒeÒ¨/Pl¨õQËÖª¶Š D](/PL¨9P¿ç×Ò µ@Åz„° ñAÚƒÀ(8TgÈU*6TlDä Y@ŠB€ÃŒèËÇvdü9‘XJÅê @ j”ª6TG¹ÉQ²£Ä"Xƒe@Nq­5;O#Ðõ;aÄъР@ð΋w¼qEj ÔUÔ*"ݵQ ¢EE¼íP   @óžgŽíÝ 8»¡@âØB‚çú ü‡ú e@¿«TDjÖ i@â¢UDª‰T (TFw&(!PD¨]PŠ¡JÿÇ××Ä@ø X±@‚€Ü"€¥ê†óç0QT6t·:Y¬)'–y#|DB!ˆ½:Ð÷¼éîéT¨&PN‡P>~o™P¡¥D›~ ¤×ùÐføœ`èLëÑkO´¸‰]ã¢¶å• }¡àPïl`pxµŠŒqÕm¤Ž“JSÛ,ù’x‹©79«S«Y: õ_&ßm4JåÒuC3’!eî{ðig¿¢CÃÄOÓÝ@R¡×FBõƒITÿ9-â•à€ÏOŠû¨üÁtDX”âTCË -²–ÓTí?pæò¢8“\; qÌÓôy¨P>¨%¿-óó:"2|¨ èø9sQ‹ݰ&á­¤ˆ rG÷X½,½×t®î•ч{ÜÅËà yQ>àœ=^Ý{ÓÞ‡+Û{®‡C¥wt®tºv%õž÷{hQmïzõ–À›*ƒ/P–Û݋շ¾#{®èw½:Ww½9;»½ï»ÞÚt®ïzw½;¥w½,Cº+»¥y)GÂÿ: Ó<Í>8#Ó`ùf¥ù;L—-6øæ"öì^¢÷EbWJî‡JåzrwC½éÝ÷½bWJîéH‰ïyÊôN‡JïzOÏHF;:H…› ]9NéaÂ!{«­ˆK[{b"–!mî@Š*ؽʼnIÐèw²öýéïyÑeï=î8¥L]ò\ºWK@B=ú/_ü½Ž”¼%"øû½° ËÍ2XH(Þ‡pi¨`¢õ À¢Ç$®é]ìCÙ{¯zwu¨wA:W½,X‡w½ç±ƒ÷«Œe”¨+P@¨…PúrÚòŸ½µA¹ÃaAB ©IRˆkUDïè @ÔP8¡-B†áQR¡gåÏŒSåÕäÌõ8õÆŠ£õD¹†ª0É<(Pl( ø ûpYˆ"3DD,U¤e hQ™ÑU¬2,f2Äø#¡BJÉ^޵¯:×Âb~|ùò#çÏŸ"þ|ùò#çÍkZÖ³K+$¬Ÿ$ø#àLIYQˆÁª­ðÄ£ÆÆ4ˆ8Ý ¼úWϨÑûÇF’Š$mãOê Ôn/e]]ç ¢¬tTi.3Ò¥X¬ªÞ¼þƒê6¼ù*±ÂQ‹@ ]å¹%41£œ1£&+q¦´ÙhJÆÐFYVcLciV¬ª‹DG4iÑ#YV:¢²¬/ÔiãgHÕÞÆOggSÿÿÿÿÿÿÿÿBVXf7Ô+ÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍ3£ÉZ UãH® «±²ªZù|jæ46ÈÓ*ºZÑ$iÕ”Hу#÷@ÄxÚFÉ#t<’H¨'$uyUÊuÞ>ÚµæŒB2Î5²pÅœØDoÐz<—*¾xð¤y+$øS½Ä³”$ÒÆ בVIY+1*®çUMÞjδæî÷Ó”) Új§CGzfH¼œ iw'b„eI‰"Ïuy>F‚°¿‘ZÁçXLTŸ bƒÞà&ªMTš©5Rr'ªPJ©IR’UJŠ•*ªVT®©aRÂ¥…K –,*XT°©e –Õ-ª[T¶©mRÚ¥µKj–Õ-ª[T¶©mRÚ¥µKj–Õ-ª[T¶©mRÚUKª—U.ª]B¥ÅKj–Õ-ª[T¶©mRÚ¥µKj–Õ-ª[T¶…K –,*XT°©a –+*VT¬©YRª**SB¥%JJ”•)*RT¤…J “Щ9Rj¤ÕIª“]+¥wC»Þ܉ÝÒ»¥rt¤î‡t:÷¨½¢ºWJî‡wJèt:W{ÜwJè{Ó¼^ÖÏ”ÁÂ( APfXÒ¦öÐÞž÷âÖ¹s^C@“Üå`aÝ@O§ó‡kw'ËbT¼]§/sl9CÝ@¦:"*ÏçAÑÆUÍ ˜ÖnømÉÑ\Á«*S%@w´áεƠœ‰À[ŸûI¾ð€ ¡Ã”æl2€#1 ¼¶ûd3v ÐјÅ'Õl:¶Í¼Î—ÙÆÀÒÂÔ¾ƒ³äÅâ Â5Œ­›ÿ[KÑ•.Ô|PÈÛ»÷i@à£Î@ÃøüÔdV;Æ­•ÃéÜoã˜B‡Åúÿ%°%\£¢=Gב10ôÐôG½ í– jñ ÓŠ‹â««ªž¢Y(ˆ'bt ˆ.®®§"‡»ˆüxêxŽ®¤8#© úžš±P1jäÝ]L÷€iÛ»Ä ,xÍI‰Åâ#i¿8T¼åÙŽ¼Ç.¯øÓ”Å`-k¿P¿ÁBP?RTï]Q&!4^ãº_ÎïÕÔñ›©,u&¤uC“Þâd&ˆMÕÔMrGWRg‹d‡OÆyã±§?ÖN¨äãþ8µÓVÏšñ¦AtEí÷½kêßæÎªÇSÙ6K(aàMo“ñPa(sº±JgxEF@“õ8 +ªÍb°³Aê5ÐéÃå2*ƒ«O>ßïOSCõP ß±ÉÒä9?0žØÿÍÜïæõŸTgÓ9Ü·ˆ>9GÇÂPªŸîv¿é9òÚböüåU NMKò Ÿ®¼I€¨¢9,áÜÄç‘IÌ/sª‡0w,Ö%,âlÉÑ“Ëâ0N74q´ˆ(ÜtôPËÕ¶ª÷¥œ¡(¥?âØùúG ϘԽȽ¾¨'~œ@S:  ÅíøáÐ`ú˜Xwª76~á¼/kȰz’ÔI÷ÎÍNùO^?C“ŽŒAŧµ ½¬ âöªå³Ø¸Cr{*úlçï9WA%‹ÛQ{ƒ F÷¢÷Fõ¹D>%@š‚´ª´¢#B µ 5"‰Œ -*€ O®&ôþ¦œˆ¡Œ”Ö0%1ŒÿT d£{Oˆ½D "Â"÷"@a‚ ƒI³‚ûÌ*Ž•xj±*NdÑ6)fWª<c L>§#Ñ:£Cé@iˆ A?ª sÇ–ÿ㤀 «€P jâ1CÓ ìåÿ•ç”*”…Qz+ŸÁuG¦³pÑ|€±!„Ñut÷tƒ9àÀDS««¨zœT˜DzxxÕãÕLÙˆ AA"u …•æ rRFÝ߯ ‘A  <L$xœt#ã>¨@²‚µ²ãM7OãŠ@Þì^ै‹Ô^†õ½¿ˆ½Ú¼uuu:gT"¨@.ÖU?R~¡È*¬ç£õ &êê"#0™*…• ¨2ÔF½ªÌÕDІcÌ.í8wºn®ª9Ò¨5ùË&êGT'sÊÙ•äY 쌗ÖÇ9ÏÊ*&T, hÑ2d|MS1A¡uEúÕž‰¾¶EcŠN©@à&kkbb±¨>=ÎeìÚ{?RtýQÔîÃÍÆîïô]*n¤îðyœ+zŸ«ªö‚)DP(¢–zˆ@‹ä¾(„9ɾ J®sœ‡ùéôшËyæÀí<¯vgÎEúÂyÐrîŒñÞï_ÿ9EDnH êq*Î Š"|HRu@9·ˆ@Þ¡¡@¢/p`b÷!,%ˆˆ½ ê"ÄDDB!6Â"ÄD%ˆˆKˆ½@Š!0¢J"Ј¥KJ%D !ˆcADQD¢!¨CPŠ¡*„uÊT$%P”¡)BZ„¤ªT&(NPœ¡=Bz… P ¡ABš…(SP¦¡MBš*(SPª¡UBª…U êÔ+¨WP®¡]Bº…u Ò¨WP®¡]Bº…u êÔ+¨VP®¡UBª…U ªT*¡Bš…E jÔ)¨SP¤¡M*… *((NPœ¡9Br&(MP˜¡1BR„Å ¡!BB„eèP†¡ ÄKVN >AY…c)bR’KKÀiá)H„_ɲ²¨5q‚€’O…p,¤’ÓOȲbMFRÁ‡·R4íXBmJÁ:nïHÀþoÉöû´³d~h#šiHÖV7ö»ï-gûÝäCÕ„^I„¤´Õ§¬T ‰Ë -PÝy°¡SI ï4iàª%ÀÒ¥>ÚÖÖåFÂÖJ²U3„!š†PúÁèKíuTúnЇ"|Ûϯ'øTU´y÷jkà‰4ÓH8pFTà$M„á‚!: V’V¢‘ 䦜ŒJæÐ¦ši¤”ù$Ÿ$Ÿ' Í…DЉ*$TJ¨™Q2¢…E ŠU**TV¨­Qb¢ÅEŠ‹*,TX¨±Qj¢åEÊ‹•*.T\¨¹Qr¢åEÊ‹•*.T\¨¹Qr¢åEÊ‹•*.T\¨ÁQ‚£F ‹Õ*.T\¨¹Qr¢åEÊ‹•*.T\¨¹Qr¢ÅEŠ‹*,TX¨±QZ¢µEjŠÕ**TR¨¡QB¢…E Š*&TL¨•Q"¢EDЉ/k:¡üötî=” %oÿ‘8®N²÷7tøZ¼Êæô5ÖókÝózZ3»ð^5ž¨¯f¿¦n‰²Äü.J±­,©'ú½t^º5•py©VìñkôHoÚÞ¡kXáaJ5$÷ªý{;é„7Çrè„»ò2˜§B߇†û`ÚRsý ë¾¼Cëõýz!\‹`z<~WD ¾}æ+ÜžÔáŠÒt"ǽE½6½¶X\E—ãô=°Y~t­tt“Ùe„éJΕµ³§§¤“ÛoJÅ„²ÄtIHéïËmL ƒYe–&éé ¯F©Ê_fİNLé¶Å¶Šëke‹:zöXÑdZO³§¦ËY`Âç¶ôî– *ÃðN³¢^X´¢b/¤µ²gE¶ˆ]6ßMúë WhÝÑ{Ðox·t–=µ'Cz#\píxÓu1'ºæ÷­éÜe®ü<„†VKÑz kó™ºdkZQ‚œ€¥wˆd«F®A–RlôÕ…å+](@öô1*ä7mKT±oD"vôköä;öøúסÈ8N qæMa+Ý”-Eyvay$»ß£@7¼¹¶w$ Ïóˆò½±f°MjÍ<-[Ñ©¡—ˆ~!«¬½õp ¥؇zHè‹Ú2{ógþGü’—îGþ©_çÿ!¸¿¶¥ŸíËóûzZýÿö—ÑÑdüh`-°·’pžBÕ®kh] t,(Ù^eÕƒÅá Gž÷­¹jÛ d<úœ =¨ß¯ÇÓ„—_—õ´&<›œ} zWYcݸ±+"ßFXî4)µÊßL/——§í¨ÝÑA¸ÎÜ¿BÛ~þSúûát|=uÒËÚltÛ`ëÑNž„½=">–‹m²Þ…–tô&õñÂûþï°ˆw{zíò­Vôôz,XX›-³Q`™hÙ`Ä=»%ô¼Š>ü Rm(–×££ÓÀǃ+`­¨1>•ÀS§¦çN›:zcáµ&ðÞíŸivt‘N¿ïX'M¿¾É-µþA#eîý=è?ßáFï²OcY㸠Mÿnu׸·|÷º_[/kû/oíal¨uPê¡åCªˆª!T@¨…Q ¢5D*‰ª$TH¨Q¢eDª‰•*(TN¨¡QB¢…E ŠU**TT¨©QR¢µEjŠÕª+TV¨­QZ¢ÅEjŠÕª+TV¨­QZ¢µEjŠ•ª*TT¨¡QB¢¥E*Šª(TP¨¡QB¢uE ‰Õª&TL¨‘Q"¢EDŠˆÕ*#TF¨…Q¢D*ˆ*T@¨uPì ‚2Œ”yx裯³1‘$á8I8NI$œ$“Ó«Jè ûEÒjzsÔè‡ð`áÒ8ÍË,Ó‡RãݳöÄþ4b*Íɼ¶kZ5ŒGj>Íú‰b ä~k¢zmO:`Õ™X:ý;Μ4÷_§`êÚÀ0ôttDîu¾‘^´wPLF±Ç^À;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;;;;;;;;;;;;;;;;;;;{;;;;;;;{;;;=oñ—öè}‡TT;§Ô›%„ÞRíýòÂnÃ7ÿDÈŸî_‘ÈÊüKc„ ßô&J-Šüø sß,dìè„yKÊîr2>êÀ ·gØx”°à €[RëHg@tV~@9O0Lþ” /àÆ<7ù¾¾[R²Yg"Ô?sá<~ÿäÕОEÍÐ3®"[^‡Ù"è‚íàÛë3†It`NMT®D7‘]Ñ<¥T2%+Ä!°ÄN»ë»÷ÜŒÂ3gÌ¿RÓîy ¾òÑwu&vKÒõ”ŸËÞJäJ5úüû…òåîËéÿ1½ j¾Ã#ÿܨY¡Û«š^k‘×í$Ìã£ç[ÞvR;Ïß´aÞ\Ž@j,Çø_/ª2nÿjnÐÜŸAbï^?ú §ž 3³ K¾pÓÏïÀ¤¶2zéí,Þ®RfL¡%è]°È èî’5úþ˳_Þá’rÐ@‰‘ý޷ߎ~ãÆRûnvú~Pγų²F·3Lòúüda|n²yœä¼±ã é¿ó•øú)öêûÕ˜Ìyɳ÷œ±f}ò{Ù,³ÉŽðãyfÿ|"¿Ÿƒ¯[â‘÷3pà£!Ð/ïÏÌNñÆxdÁuçõ»i3_ß߆GçN ƒÝ '̡óý¸µÊ^ÿÃ9a¹]ò会ô$lÓƒŸ «%†ÊÏÍÂÃæp è/§cï×å…Œ÷~µä‰Ó?žýZËÆ_%7&†æý28‰êq6.²?q²i–½óXó~®‚Õ<¿0#á…üù„¥Û ›ë¼Òê¥vÿøßdé>ÏÈv”éñ&ß,+k]ÙžO$coÞb˜¦ýäµ²—erHþÉx‰çœÆ0·‡’ZÔK#•ÊäÌœŽó$É1¾ÿ‘¯Á­›ßÂNH²Y##ŽÉdñÙGÊdÿôà¾0û^èR]»fû¢Û„ælÜ3erÙ\ž')‘Äâp¿¹ä¿rF&;fí¦!‰ºnBFÿ!Äâ? ž'ŠÈã&žyù-þû¾ý‹ú ψÈë/·!FC!‘ýÅͳ‰Ãs2W}¸‘o«D›¯ 2)g2°$ËÝi6|$Óù!&ÂûÇ"òÄ€ÙÕt’ÝE¯ž w¬ÏwzÕdøgm_ëñóê’‹¤—Š—ùìÖKƒ¹æie›Ç çåëëÅ>™¶oüæSíó¿¯È]³ùã¿5iÿß¿ «'Éd«ááR.X\7þ[/‰Äe³8,&cz§ÂAnïAlòl˜i£TÁÿËb½²…—Ë šìeÃÄP=—Èâ±X|¾[ †øøÃa|¶|d³9|¿–^XuÒ¶­hÅhk϶í¤‡É5œ»%yH¤.¨»»M˜Í£nW¬-Õ H«RàPÙj”z÷øð‡“ML ¡i%ȯ¿A”S-Tê›R^Ï*ÖY»Ê·ŽòÕjÒ1@·¦£&}:mÂmZ]¦Qᢠ#g‡4j\V‹‰ ¡ËÖÑš•m\F@Ç= ¢Õ=!$‡¸à1øÎ¥>ÇKéqêý&[ž³¥×ѳeÿ‡yJ—y™ ñš¨Í£8ÿÿˆü›•QrõT´QE÷~îé'%ËÌ»—Éá^~¨‚\ºº­4ÓÜr™4v b•˜Øœˆ¿ú6F“N«‚I H¿ÿî_þóú!$Ó€_F.\¿HDDC«1tù£‘ë$*<ð ¸VŠ"ù§wˆ0%¤¬ÎºŒÃãÙª¹JOP$y½ú7áäÃø£œàb@"—áIÂŒ=>sFò¾U’Ó[¬ËªŽ³à‡óT'Wת‘ ÇÉ%nã8|fx/uKÏ*©ÅQ¸W1!dxH¸à'$÷˜ô¯OV­&•ÄÅž9Hî»hÄ Zqä Ѽ™Ó½ËñôfÒ(\ïð|ðê‘%~ fxEükͯ¦™Ñ­Ûêö³t‚IÝN«µÊ*Ѱ³CÏâmÙC)xÏ—Éò›Û·çò+‰ ¹ïzÊIY²c§øˆ¶f VŘÌÈZ ,÷“b—˜å\nß²Ž|#Ô®“º{uVíÙÌ]½vôùædÞ¾s÷ÛMþì …¤ dFù_]÷Yx¼&´QÁÔŽ2ïšPsç&ÂÚE]ÿýöxú»6íÛÆsŒ!ú¨ŽÎ\Uòœ^½ŒOî m€š¡ÐÀ±e[£‰ƒýÞ j’)r;bY·ÁÈ ßKO¤ˆ‡ëÖ% ÜBk5µ´r@ «ÌÌÇA™˜ÞÔð3¿ñÐzðÅ%î™ûxóæã›ž1­„2ˆÑ“VƒtÚ£ÍÄ´u¸%‘ãô–G’EŒ5–xuñ|€kãµ—â/ sKXº[§§ýapðlÜéÕ½9Ì5óß«‚ètFøN ]vø9Muºv„3/ú,X°T*X³œ*YQ2ÎeaŠË‚Å‚¡P©bÁP¨ ”nÁbÅ‹D[Ù,¨ù q …‚Ÿ˜±bÅ‹WUˈ——€$*VbÅ‹AbžX±h,X* – …B¡P©aÀT*YÂ¥‚¥‹B¡P«Åÿ ý¤2Š<ˆÞZnX±bÅŒ²Å_þþƒ½B¾XÿÅX—Ÿªåþ¼B 6àÔõg.š'Ø;žÃÞ°|Ú¨å9°•ñGŽyâo{ë+ž‚®¼öVLsTFîtNõX^p³ÐÆo$'ÙT9ãî#%‡Œ›—)ìn…*ܯñqP®1åÄ<~½€ Â…J•§á@¤ÁÅü<+7p5>JÄ!ÀõVfŒ¾ñÐθ44îyÁ¡g4Ä~ÝÞ—Û§eøY™íò¬¨Éø§b9rBŠâ’ù¼|¸áî,¿¹=Oóîª!Å肦YÊ•’¯é¢2r<>cx“¬=gè=qô—ž†²¿þ6«9ê¤Ü`èúh(ðU2¸HÎï´ì}üƒŠ¨„¢æ‡‚°’)»¢T柘Òç9£Å)â¨Ù§ë>üõ w‡“ã¼3ªòG\èN·+nûC¾×y/øŒmpwpwxw‡xx€x‡ˆx‡ˆyyyyy˜y‡˜y‡˜y‡˜y‡˜y‡˜y‡˜y‡˜y‡˜y‡˜y‡˜y‡˜z z y‡˜y‡˜y‡˜y‡˜y‡˜y‡˜y‡˜yyyyˆx‡ˆx‡ˆx‡€x€x€x€w‡xw‡pwpwlú ·‰Øê x2G|;ù¼g¥@|æØAqç(€ŒŽ0ñ…„Åd8•}@…Œ n_ OÓíDg7JÊnºÂ¼qwð2P£Ä(àà[å‡r…Ÿ{ÍFc*T-èJÍóÏã9Îv±øãï…Lãçã Ž8ýW}¹ábââˆþ8æ#4ûñ^Æ&3Ÿû\Û¡Çü}}/ñÆ×ýÏX…µ}©E/¥Qw³e”,Ù2Ñ7‘P²iFǼŠ|ð’ht‚G|>ʳ¥ÑGÝœ£›Ë@Ï'I<£×HÝH¦\¡Œè›ÅuŸæ22w’8=o<‰’„’(x¹Ò(/­œdû„2d“EeÑ2]œëÈ>‘Oÿ;% AûNá©‹©q>WQèÉ—÷~XØïµÂG<ÞOžÎ¾î' WθM8Éà ¥˜Úmž{:û8e†XfXf`f†hf†hghgpg†pg†xg†xg†xh€h€h€h†€h†ˆh†ˆiiiiiiiiiih†ˆh†ˆh†ˆhˆh€h€h€h€g†xgpgpgpgpf†pf†hfhf`e†]Z¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU“°«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²Ud€«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y5;­Ò‘Ó±³Æð(…;­Õ R(öIùÿŒ¬^'ËßÙÒãÄà_Á2q³‚búÌ£kèúŸE)¨_`@ žÓhMJ•€'…@ ™5€-‘ðqR¯aP^‡"ž=##Û‚ÅVé4ÕPÝÞªž„oHÔíè—2±ìBßb6øÙÙªWŠÝ;«¯U)Æ5u±* aã9= ç=/ç¸øž!uøüfdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’¬•Y*²vdªÉU’«'eVJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²UdªÉU’«%VJ¬•Y*²Ud¬uÈáÜ@azåBp™(‡u$„Š9 V×á50îX Ax¡,jÜO8üaÂû[ñX#ÛžpáaíÑ’u+p±ÈY%#V%‰B Áw‰ä¨(P¸zBb Ì(— ¼.n ¬--HM`Ä ÊVê`Å ‹º< ‚øÂá1¸çà „À€ Boáê0Ÿî@ R¦n vê .° ·P"@ ,°—%‡ ¼;‹xPô ¸†¢/p¸ î·N•> Â[­ÐH$  ‚[ +Ý$-Ь¸„8"ð!N áøð¬† ¿mÇn„Û‚Â*Ëq‡XF†¾Bä)-ÆKÈ‚èrêW%ŒsAfÊвÆ#(˜š4|F±Ÿuó?×€ÌùÏìOggSA BVXhRîmÿÿÿÿÿÿÐÿÿÿÿ¿ÿÿÿÿÿ"Š1ïÃÿýu×^÷óœ¢tQG9ö1‰>l»œþÎOóÆ6sŸû'÷½óÆcè Š1Æ Ñˆ4 ßþ:ë£#€¦?ÐR .€¤uw\~h6"zÂÌ/@Bld)#ÆNc{¨ˆÌC˜gû„3ŒŸ86bŒBÊãýã§9óŸyÍŒŸ³ç1³‘<SÅ>Så>Så>Så>Så>Så>Så>Så>Så>Så>Så>Så>Så>Så>Så>Så “œTÀÊ ìÃà ñÙD{} Ÿ§Áã…`{pËÜù¾ßsØžø«à^Ï­C”aÈ¡‚§†‘ôx8xµ÷óù‰ðžL| D„9<‘øX‚^_}ÌözGù’›ð?æ¸GÚ†Oá žÂú=‰ÈƒÑöt'—·îR4èN€N߃íö¹ÙÙ¯èî'‡béÑ‹nwÅ•PS¦Ù±­l1š´ƒ Rœì\6ÜŠ3n‘ãeVml&Ö,RE2t5ÝÜn;›­º¢ˆé¹$¤' ×8bݱû8P€( D„ !ôDRD"$€)"€ûçß>á÷€û‚}åûÀ}ãï ÷ƒ_Œ7à`¶yOÀC;œZùmDUwtA=ëmZ¾ V»që´¦©å¶©HÊrdë«>hɱU%ÌšÕ·bãt–¥mVͳ€\Ô—…Zûk†”=Ì|Åo3JMü®•{vjN¾®ÊË]ŸeÏYp…Q Uë0#“ÀxG\»\¼·^šÞy±ùÞ¶Êö«ek¨7½´ Nö\¡ Ú×ÅüÀæ[¯D-Û¶»9_•Q|]]­¹õº³³Õ—vÔuòÝ|·MW«UÙv'•¶Ò«Uº€ör‘©ImzjûkÎ5˜»2ÕÔ½Õo_RÜíDÛZg¼Ôš£fwëK•/¥“#Ël“:â›Zõÿ;‘ë[˶ZêÞU¥wr\¸+ir"g` ”+ŠÁoòõó’NÑùÙ$ȯšêG3d[À©[—˜¼%¹öm—žq({“-&¯\s¶ým6»y)±mñ"3]sb65ÏuÞZä·´{å¡e͵Ø:íJ¸µp¡ ?.nåË*ªAYΦ®-Ö—g¡…V§‚§*Ô–ƒ]œ¥K~¦Ë@bk 2ê¡l÷8ýàZ3È+úïàP§ü…–rºÞQ huçscõåpê:˜˜/1óD›¿±È}¢˜~D×Üš=ýª,%¸°s?¶ªb‹ÙôÌf©é³Ëv2“JIô7ØKŒ&gaësª»ª¬¬eÁŒbé½zé)m±.“‘Ç=Üé­sœ9¼o*©é2+UM®àÊ‰× "ÆNòsÞUW3á)v´–¾3#œ×ÁÉ“€/}W>IwÔɬ³¤úâ´ü]£èÇ˳|Ì䬚q$ŠWdéÒóóö¾ŠI”º)»33GåOy3“#]%Y—Ö«ôÈKUL%Î˯ÙÐ#&=NÙî“Í?½‚{ïíI¡‡h>‹ ¦^)Ô˜9š’$²”ˆ£ÊépÜ/Ä©×+nƒ‚>(áàÇ ™ÝuãL0ñ†+XxÎ|u),ðñŸU¹HWXë ñŽÆtc{18gK $ëYaƒ)X 3’YVHÆF8ŒXý™³\ñ—ïÂF]gdcgß|bÙc:¢úyc4ùÑqñ@þmtû°pÉíø&MøsÅÎ|98µí~9íãâc jx×_ü ÎcÕá¾€¬ðáN·ê~ ¯À¾xOÃ}Î$çá Òá49´áIfo~|fCm‘q79✅ïGsz“º}c 뢬¦wÁl|oÂí¥£®£ØÎùæ°ã™É©æ<ŒíO ûÄ Ñ+ß‘'dti)˜)Ÿ Á‘«žH'Üí‡W§¹äztÞ°¬¨½©ð{Wàô¯jû| á r/Âðâ~]>*ÃÄóó^ÐN |lú:>§O¾_oKåÏå÷=Ø”«Íõ=¿ãOSÓO™ð} ªãÑñ)îýNí4¹ÏGJôIßßSà pz!ª}ƨqŸ”QŠË!©Ñ‡Ä@‚ÿgÈìì%~8€¸æÁwTSºÊ„©ZJŒ!¶k26 ;›ÌË‘ºn¶[V˜Ì|ÇUº.]‹%ÈáiÐ]×T2EÇMÝ8JÉ~9á΂ýmº)׿ÆÇw;qŽ¿À䊪’²AIBH PD$$ˆH$Š ¦DPH)„@$IH@}í}ãïkï~}à;x¼}íÞï÷‚‚è÷µØûǺ¾ö½ÚûÆŽÇÞ5_xûÀ}í}ã±ßàÒí¯¼hÖµÓ8Ÿ‚òë8·'*„’nó—R»äå3"ÓR¸ bÂ5®Ò‡ñ^ZKU‰$F¬¥.„ÎÛWÙ]2KKR!éRkµÍ€rÑ+¼åîM26ÙIÖ*[=¬Jšd#;ìÿ¡–ªZì÷1UÚ¶fu¹<-e5pó0‡|º¥œµ«¾b˜aÞë_–…±sm»€Ãõ•B m õËvïåL•®Úî;=Ú³ÝÚ ¹Y$í»©¶iPÎûb‚ݲɮΘ€„¢ïÿ’¬DÝ‹(‹e3Ýkµ|Ë¥¤©KI®œ¬ “wyX®žWlöÝ^QD{Ê¢.U”ž©‘îg%Ëg(W3² 0Lz‘åC:Þbç/˜¶U¾fH¤io¶ã9žù¬¨aÞ6pw—ÌW+î°jÆ}UÛ3.ͦ«åfp²•Þ¯qRëj·ªÊ•VÅTß5Û:×¹©q_±ÝŸ¬Âœ”å'Î3ggfuÛ&F&kkº¼ãfL&”FÔ' T²'ë¯XPC;m¨ƒžÔÉ8¼Ï[/9zž¬µÜîS\î¶n3Ð;jMÍŠàµÔ&{_PÀÙ²i`¿6µ<×µƒ¹ó&Åv"Ò¹ \•¨d`ÄÁ¸»>… >¤-9\ ¦+éÆÙÊ’n^gâLYLV"y_+•ªÂUýù06[íyª½Ͷ íåëÚ¬*Uwv•NÛ1«ÜjÌ’TŒ™ó=×/;ÿÇ8~&"±õhÃ3¥O‰?9=`XÏ¢> ¡O0‰ k/éóއ#þ‰y'õ„DÃþfŠ ¶ùh|;~Þœ9¹±¿J×ϺÝ㺢˜ wÕ9ü·áý•lßO(šÕ›ãÞ ^ºÆì¼k"ʾ§Ðî’–8j¶ëÖ,rãÇo•¶Ô÷m»ý•5-÷•2Kª_47O~YÍÒi·xÁSæk(Ë”M.‰(ª”óíIsŒú}m³h´íe{åÓ»Á•Z™;6oww+\œ×NâÕSë;¹»+r >eë‚¥a³¥ÿ‘éž\Rª»Nt»ivÔ7rÛ-NÁì=Yù[\Ãïåò©{]ÜtlkˆS÷}PûgßÜÃ}ÜçRS!-÷/Z&L÷TR\`eÃö²L;ã÷¬ë}öûRA+A[$¢­ ÝLvÚ’Íû¹v2@T¾^IÃ=gjÔÑc#ÐÜVsœF%— ðeŒ„Ë 0 p`¬Ç.X•ƒÁYÛŽ"èaž,1ÆëV8çctóÄŒ4º:¥¬öáVðZŸSówzÝÕ/Æ’?x18ÎüÏŽaf1•M ØlåÉOÛÕ–jÅhUÀç-[„K jÙ%ÕÛºœPŃõd!®X–…кû€œ1WX‰qC CÓ=Ö$‰ÎÄ0Â×›™EÕÖÝ[««n®°@ÔÙXz~ü€èÆën ¨²"–9qÂÐõŸ±ºÄÑAØ5uuu««±Ç¬pXŠJÌø9„aŽ0 ö¿ß}õ3ëÊòÁ‡/Ùµôt³^7´GuBBArØ(HAØ+3à‚‚€ÔGm‚ñŒ•©c c#®0ÉQ€ûªZúGwµž©5Ô#TýìkÆv-w&ˆP–è¥û”¹ÞBB–OX¯Y ˜õõPÌ;ù9Ÿ«>3+U;¹L‡ü:/Cjšq3É߬=4‰™`ôJ“%+zxsžIÔÕFræ2éCwÔ¥ª.ug¼‰ÙÎ{Ëß›œçOç:§zsŒÊçSžú~òµ’Á»7ê~9Îs¶—çiµ»Ã‘éÏ M'!9ÏL":¹Ø;Y}èaSÛ[í©ûpM@pÉíø&Møsáχ',WœøÞý'Ž:ð1Ïzˆz«ð1VÒ>ü±—Â>~>—áTðŸ‡ÁÍaá |߈‡ÓßÉðz¿#§ây(Ÿ6>"÷àóî|ãïïÜýFŸ쮾AªYåñ¿ÑáF´N <¦ó;¿ÃM$¢'!ˆ4ì :jêÁ–€Å>OƒöGæù:C½fUnéú˜’ªY%$  @©"   …Ð\6Ü ` ¤U” )Mr*®H$E*„Q…ø+S—.¨% 0G[`=çDt¢ .8@$o¼}ê¼Ú>ðpûÂ}ãï÷(>ðÞ ÷µ÷€ûÇÞ_¾Þ;P{¼Þïv(x~ ¶µ÷µ£GÞòì~2OinT¢uËu¿Ûš•óëræÖ½Ïª¢­ÌBåÙy_6^[ׯQíuc®Íƒ¥»8 Ä‹Âín jË [Í™YØœºÚ!ŸU=«0tÿJg¯®¶jàrænçdò%fó]­t_Ô.S­íÜÝ­ w*åÖòùp{k¶è.Ý›ó6 ZëT'«¨mà`PA~×E±yo&¬zÕvÌyÔ?\Wz¡-ÙÖ¶µíxÎ÷6viLêyÚåj¯­vf|ΠµVójD߯vМúÝ”ùJK›lå%tݵ|®ö<É:Òò¤Ù¹°nS¶¡=[³aä¤ Y–pžæµüÏC'K˜·.¤æ¦¹œ Ϙžf`í|Ýgew.VuÕJ•[˜²«y¶\¼lÛí•WlÜlÍA&òzâ^æyam³Rj6~Zö[fks×»æzì覭¡]¶gÍm5µvڽϕ4®¾6•®}kìé—WÝ-=&År½H¤ndØsÕÌ®[ùkÔL /Ó+ù8Ú„õŸ6­Um¶ÿÝuu¬@*>ö³–»ÕÏsón»VæøfÖº”•"óêxu°¡]s¹-Ô"ín1RbfÜ´,.¡bõë_–í¶Ùß;AH¾¹—=Ð)ÉUš¶ÎÜí%Ùk¾eÎáo6ç@9â{ñà9náš`á¾cYo÷+’ pýÌ xXqéÏ›ð\b|¿ã¨¡ü£š?F,(¥À˜ËÂVºy+¼D/Æl=j²g—,•©:ªÒ—òFÖñ¢ü'æ\©«ß޽ïOÏ ëTògæ¾™u³¤gmK‡8~"—9d™üBÔÕÙ»»ÈéR²,íËŸ5!Ê{÷”ƒëWd›>ü§ÐŸÚ(¯Ï26¯¨e:œ¡7/Í<…ûÝ#%Òäæ|ù΂2p‘jí¹©àœ_¹¢®|bºÑ6[±°GH¨H­¾D,ŠAr3ETã¬+ [K=óÃ…¶g(s=éYåc ¢±ÈÍ`Ï 0Ï‘£žáÌ1CXYãŽ7I•š”–…‚®Œ)|p£3ÄTç/,„±ŸêfäqbgyB`â1…¬l\Ç1œÑÇ´K'zË ¸õn­Ö ðÂ1Ç9UˆÇ1Ğ︶tµm¶’Âz àwÇuƒ…º²—qÄQÖ8ž/ùù9ðXº;ã_Œ°íøíâR3ÍpOŒÜÖ@» «;DW>gÝBk¬?w°“j„ÂÑÍLë…A%k(CÍbs±3ìoAŒd/ü\Õ*4>´_§¿¸K>.PÁLf˜ôƒ<¿¤Iš¦sãDÎVtçH§ ò¥UÇ¥ËIÏ;Îx¼}KZO$9àSãíä({xúò )èpÉíñ¿i¾Üø²3áÉõߎ{G'ãâyBgàŠ¯ÌðCðM¼'.ÉÔ_¥øXðgàj×àXó›¥}®`AkÂ^W×ÈûTÝûyvvœ`µ}i_N-·Zµ-™š­x^ínR°ÕÚˆ8€U"b¥Ú!·in8ë^…¥õ•Úê%‡Ün]kì+×µqHw·b¿SZµpL —b1)úÙ³wjåZ¯·/_\¬õI¶}B»bêµwvÚÝD¦Ë|iEÿYïŽVg𳙫 ×=dÒ\Ë_ÙíIjµÏãlõÚ{þ®Ü%.Pú®1]ˆÜlùJJÄÙ™kvÒ3°:ŠUL–ÛJÁ†Ùµ®÷^ªÝ+åÆˆ R_2»[n ñ Û®zâžm“w%Ö‡|ŠÊg*ÔßõófgºŠ\ä¯WmwYúÚ½»¸wK€aÔ2Û,>fæzB‘kV®[œ*Ræ!.·qRÅy{·>mÝnzÖågß—6Êì©2±)/õv%­5˱¦FŽ”ëììž„#¥²€„ïÑ÷èwÈêò>&îà tGß}g¥9K·ßÕ¿¼pî\”掊Èé6•—‹–8©£ž)võ±Ê;óV»a†@»ù‹’¬Ò‘b×ízËû]É–Ž|Ó¸Ã.,{™–?BÎdŠ‘•ì¿.ªÆVYÁ —åøq!ÆŽ^k"—ÕS¾k9‘•d Œ>`p=k’®õƒèLö˜¿78‡"_4°Uøtƒ„q.3*µ•‹Tç{?Š'²F@íc?cŒ ɳ²/Ý=§Lš59—)bUH3œŒ¸'JÈç ™#´I;0gu¤Ä˜Ô1$®C ŒùiÆy#[1Ŭp´c††3ŽvØLdЬÐÁ‚î][IIìíHYÜ%Ndb«#,4–>0ÅcŒgŽsnNÑŒ9¦´ÊÌqc’1±WŒq`áÔ•«Æÿø˜ÊÖ 2€„ePËoÂFdBôYtÊêï ýc4iÎà£9Ò1Š<†ç¼ëødpÉíð?™¿W®z®N-{ŠûcŸ²G„‚o~~oÀÚ/Y'O~]g‡'\t=Ÿ‚£[ð ãà g"z›ß„¨qaë‘èvÖS²½¯¥}ž£N‚ž@NO‹&¾þ1íë¨Ns¾ÒóÏIzYž9çC”Ñu°>4u/4sÏ?s¸=½½^éãíkxìà‡Q>jxƒà_o·µ<+ÙõogÔø0öx;%+ØÏG£îücOäøC¹aáø_wÝ|“«åÿ˜üß`s=Ÿq—³ÑŽA ±Ùó¡™ø‚¦Ÿ Pøõº=ÂtÒ^¨ôSº˜Ù^ ka*‰ÉÍ/ÀöCƒ„t §& XcÔØ>„¨ÿ°3… 0ª‰"H NE¼Œ:M*¨ ´d¶€¢F6ªi‰±šÒP¥£AMG´Í€[6Ëi¸±¸‹)º7`Ümª;m²ì®wlÆŽD ]—))8F`)I8r‹„¥9p‚.¢ƒ„\J’„„r’¸r’4ÂÓR¦¦uJIÚBN\$…!Í-I¤ˆEÊÅ%Y ÷¼Þ ûÇÞ×Þ4}ãï÷€ûÈ}ê ïxûÁ_y¼¸ûÇÞ>ðzƒïx½Ûï÷€ûÀPgáª;ûǸ;kð'„ü ß‚¬õWáö"z·*ÕîË®µ"æ®Û.]kÚkÚÿ³w«ž4Æ-ógM&ËYm·JõYÙ[Í‚Û[­§9ªÞåÄNkVÝ»¹KÛ¥BåÄ×Ì]«y‹›Šë•/6rã'^Ä ¾jš^`õßöRò„ýuÌìÄ®‘q„*'þ)h[^Û‚A‚B®Rì#^½åþºç(L!®d¬­u”º[´ºë®¸1 ¡Õp¨Z®òÒLk¦-å}Ý]­À5Rvë­[¶Ë—VÖ›+\ËwwR¶Û@è[+c;-º‘»®~6Îs"í¾la•%Â-®ÚæÊF|ºís1OggSE BVXjüsÿÿÿÿ)ÿÿÿÿÿÿÿÿÿÿÿÿeì«rÖ! U!õ]7]sMe˜]­q¶m8í™ßj]Bnm•Öck–aüÍŽêÅ|®×+UH{•À>!Vùs6Ï®ñôŒí¬•^ÝkeÏI4é³Ú`¢[yÜÓR) ·4ªµ³À˵¨àaø¤uh•ÕIm¯]Ë—¸|TÞ¸.Ý':¶€Z;dó2ß)5+“U˜Î¿®|@u¯MÆ@„eµ}Ÿ?ir“_ÍiX™ß`07Zɇ-7Í^ŠIÔ—žn»2»ÛŸ^lÚ‘“3«ÓPzïr•õ5ÙˆNæ¶Û^×–ê:²âWýÎ]^ÛÝvN©Y@*U€-%¯8ÃD›=¸³‰‘×&êÕ?YB ÁiÀsróÄèyµæÛ—]v”kËœÇ$QW>jFIšÖ¯Îr¤«ªí¡îL?¤†ZéW-ÌšA~œ`›ï±õe#.|¬©æKófÆjMÖz@ÈÇïÑhä±ùÑb¶}Q~Ïõêq~©è¾³•šCvâc+½Î·Óæˆu?\‘)J:NK[1îZ$œëT—²‹©®‘uj#}Ã÷:ýŸåc3'7¹Ì:ñf,l]ågó«¤[Rcׯï*•f†#¸…OÖZäñ ÎÉÇU”‹cz‚Ñî¹8£Úæ¹Öé} °+/)¸+º&·êsÉ©ûL%ï©;Œœ–W;«Ráž R÷ÖÒj¶Ø.ÖL™8§wÉ”•«Gâ•TÊ~!*Íø,ž¬òéW_!Ò²* ¡¬«Eãå!Φøëi,§~-Ø-K°Akó¡)_Nºç>öVJzTŸÀ©â¶vÎ8Æ%‚eÖ5Ñõ+M É (I#dõ_ÞII%ÒÛm+ ÀºU¾þ½$ìè¬k9UÛ›Ë&‰F/(ekqXéX¼aŽceb0ç5†­ÖÆtsÄ­bÀÂë Œñš™c€ÃŒgZæjUeQ‘ºy¤¹-u'jF³±†&X¡‚HŒëïÞF ä8Ô±#T“;H>¦žôŸ™}$™«äš®³Ë ÈP.±µ Ç< çGèpÉíKSIz_%Ž{–1m–òpMr{8a’Uì,–JȵæÍ›a¨Ì€‹|§ИVkÕÉåÝ9±8«‰Çƒ‰^$sá9H•xp‚¢Ùø IO…ósxük›íçžP÷}Þwâó~'«ð{#Ùà÷+_NyçäxS’ðôcîiØËŒÓãv('‘ðNß›Ëú~Ú†¢„å/œO«ñy}Ôñ¼½ßžw€04Uš*|{Fx…òWÅûˆmO„7Ù¤>æOƒô8‰ÇY÷Ÿ¦y˜yªS¡Êx~°>qô|„NOˆöñå6XöõS¶Ì] ^·µ|ðaÙÁ^'ÈDÀ8³¦'qãyOœÇ·8íì¶+×=ž_'«õ x‰~¼öó¾çiÈŸ'_Жб¯Õ× ùmèègyµz‹Ú£Â$Ä´«ÙaNjöðéô;<‹âò>3ÙÁò_¿ —Ñð6¯‘§ØùŸC“ͻ󸧈=ÎÅæ>‹ï:W Úeòy§lE4ôKê>A§ÿ4g'“ä®!Üèìú>‡;;;bœÀ³â}(rù~ùø?` »;!ây89—·£àü¹wÁA×îCQ+"ò¬ ÚXVŸ9‘<Í)_¼ý¤ú‰ó~‡hJðP!Qôe9>£ì3ËËî‡a¼óÏ<ÒsIÏ<ÒsÎöJøTÊ‚º‘?CÀ¡Ê¿²sV¿lðy¿詈G{4íðÑ:/‘ž˜çgÄö—ÐËâ3Dî}(|;à7îîýÝÚÖ×jÝÓ~ý½mVý®Û»óÕ_¿#›i‰Ú_¥v›_•ï¿kwS´Ú¾—{Õ}U)ª”£cõõ*ÍKÍWþ?uT×´[*“ZPv‚@z—h­·èÁÙ!´ÿ‘  5ÊýÚÚ·í~ëUv¢ªJ­¯Ôj•Ú›·n«uvºÛvÛU@GuµÚ)]¥€ˆ5À¥y, (1LS“L !‡„§zTšQ(‚€4´°H€…0Š`o‰™dk€kŠà iªû D$(hì`Ð( ÷€ƒÜ}à1Ûõ¹ü€ƒðHWƒ…|o´}/Àü’þ hvu/À›Õn̲sdötø5&Iø"¿)Aø ?­ñêJåÿGT(z…ÞA8 ú<çÑü8ïi£Ã†ý7èi£¸ÓNð¢Ãñçè€B?é胿ºš<îœÖ:kQûù8pã·¶6(øP³£¤÷|o9Lô³ÄƒþÉôÄÒ_&–ÊaÉT?qæ?—™‚LžÈœ~âó£5Pœgf2B“«†çÏ¥~äÇ<çÄŒœ·ã4†‘ᬑ·vyî46c11,ó/“gá¥Áq—4éÌ}‡q14êg9=Á1ïÄãÁÈlâÿ0Ńéøk™3ÖlSõÄÅ6`Štd€ñ<ç/‰Á%Ó÷œßœyT3NaÄgâ|ÿ—ižbÅë_“Ð&#›ßç&ÈËù~ã~M +ù8bi¹bøž7{ðåLR€ÜΑ>™ÆÁ ƒ ø§SñaÄreøm6"~|ÇÉyñ÷¢k¼iÝøÓÚãi?§2ýœ;Úïuš!ùL:?Æ\lsËŠY‡æþÄÒéW’)SÈ4Îÿ.xñø|õCy$DÍ23ŒOËažLeeñ1Ï9¦r'Ó9%:XÏMêüˆa™˜Ÿ9ŽuñüÏ1*‡_Áñ˜‰ºs§–dóŒ` æ)”ž¿8Ÿ1óMÁüÅô©AŽÖÝ8Å%˜ôÌsžnÎ<˃{Àûû¹Ö:ÿOsÆÙòß“ãi×Oå« òÛÿùŒínŽ‡Óš!ìxywÎ9ïãÃ;÷èóê‡ßÄ&‡ òïÑæíSÝ´6?zwßéÌ-ÚFÍLn^ÌM„'a;Î…øž0…ÿ™¬ÿk4•¾ù‚l>jïq˜7O„'äôèñbsA&ÏBg"a BgÕGá•;ŒÈ٘奫Þ6K­¿ë‹7lÓöDK.òš"š”šZÿÙ·óÁ²Ô#LÇú`’;g“yÐLÇÒß$ç3f3YÛ-$Ò˜Lþ„¾Émgèó/Ì=ºJþKoìˆ÷Ï‹§ÈÑ÷gÓ¤›&þžÒNûÛK˜Ž0Ó¿ Þbb‹DwÚóïè—û"~_nœÁ a$ìÈévz:^k|~5˜µæ’ÿöÇÓ3C?~7ÍKvO‰J>áþ:ýÝÏÔ~ï®FñA.³ø>þuFØS¬–ÂÚ*OÄ{Ǽ~9Î4í÷§­}øzú© <Ï ·ý+ê׎T{BïÔr¹÷³Húˆ|̽èp¥!ø9ÜšæZÒýIæ©ÙÜk÷5]C¹¹°œñÁ“hûU‘ÈTÏé©”·•¢³mÔ¸w'g®Ÿn‘Mg+L³)Áï/ß9Î~Ù7ݼ‰”úx/«$Ð/Y_ÙryZœ¿pÈù­¤—-ZqÂJp8á‹ßK.\¿*UjŸì|ß^ÝõïåXÖ°vÎvZ|·»—Χ¡/Î3_dQ}ÇT‡î3š‰Á¶êÊíU‡Es–ðÏ÷SG&åjJ ÙõÝ#,¿S'©î•®½OÅÕ8Êé%${¾È*\›…®*À‡Ï$àþ ×’[ævZøžgü x¾”™ÒÔ¥SËŸ¿MºóKRîd1Nê©8.¿%*¼aù\rØÖmTd>UK'€_Éà¡:šzú´_¸¸™XÄc³Œ»Ÿ~¾f¶ÈÜÚ°zêk˜üµî¢ë]·îÛÚrÁ/¹V8:ZóµÅÏ•qeT»Ü]<·{·u/¥Éó8íÉßwîôÿ‹;½ýá/{c_wUõ/[ÒØ#\£j(­:©ó<ËO7qµÞåþ¦v²r=>gWjíʽ•wwv]‚µ·níÜ¿™^„àãõF¨¾w úOöݼ½>SÜõ‹m—fg­ÕoÔ~®ý—õh¹Q»ôÛ'_¯ÒçÍ<½òåÝ—sO%Ô‘F­Zµ‘Dp}ùh®”ôEŸ'nij/ÌJ 5æ¹ãŠ5ãJ œæ2Èé³I½LcÈÆ¥#%q–¨¬ˆ«×ÏÇ’»4©qó2ºn>v¶Æ¢U~Š6ÌŽ÷œØ(ÓaÀ…j´‰}o(åÜÉ|ŠÎ¹GÓ»®Ê\~û’ˆ+ _˜äí%Ωs¦kT†Y®tõu3®lŠHõÍ&$ó¤ÊG4¨dèç{ΔxtP™&tŒÒÞã ‡&“Úý#aPvJulÚOçÐK¤ÉSÉ­ÔêxäꀫJøV›Ÿ­šÛHV=šú­ÆšÛv‡¡5—‹’Šå8”îŒ 0€=EÊà)MÖ²0T2ãK.*ì.ªÜDÙ…œ×qÎqÓñÒ‘±Z"ë%S&´_`šªœqÄêÎ&+¬E« “8amÕÂë*Æêêëlî…Õ•%cOµ>r"¡€žŠÓõ‚\wTÔà•+E#—äÍmSµ›Ó×(UÍg'& \çÙµŸ¾ŽBOggSG BVXkôg“ÿÿÿÿxÿÿÿÿÿÿÿÿÿÿÑÿAlﯚà±ÖJÛwš5ðLö§˜Ò4¡ +mÞ¦¥ceÖ ±M?æÕ¬ Ÿu'îPVÏÉe Þ}4ÃÖ—“fáÙ²a¶’Ì©K%°[?lpÜLËJãºrvfHE`ò¤ñ?²üq€·+ë–õMzü1}d‚¦Àœ °Û8š‘…ÕÑÕÔVQïâ’knš]S4¿uK;e·WIÕÖ®®µuk¨s; $öpºciruR·ŠêêêÔ“ÈÇ 1à Øù¥†¥E[‰á&Ùå}üòU‹ì j~¶_^·ÂéÜÇ ººâ©öÙ6ç"¦p§"ï«y?§ð‚g]}ÐqèéžÌn¸õãòQ–v–ÓÖ&\Eµd`­Ö3ÇXjÆ8”û0ÂÕj7HN±±Êz¹¨@² ¨N–][h“%ZÑ,jÆí¥‘^(~P®‚% 9ùLî*J×;mµ)T´üïɪ):YÒ¯Ÿ­¶~Ú~¡ËGîæjyú50CT  µúˆ뜂Jºa!!54âµsû…T%)€@sÙß²wòVÚ>ðsXÚ«’¡ÑÓv™Ïï’é*XÇϽ)yWwPL䎊S<:tÓÖýÁdéèÆ4ǺâaKöR4?|Ô’KÊí¦ÒÂà˜ ×$DyÑUB‹éŸ{Cêíµö¾À}‚ì0GíÏèNYP.¼’,?x Ž&¸”ÂArˆà«(Ù§RJ¿B,1=ìö ¿¸’§ô{Â~êÊN¾þø‰=N¹`°"ù¡òÆ5§œÈL;ÌøYœ5Îóš¶Üù«‘ÞkÃgîw ye«Œ¬Ô4x;ËXq;Ú€²4¥žÿˆ&O­52œELñgוš%Iþ×fNê¾Íj]¥$W1!Ug=ƃꅩv§z”Bç¼ ŽÜÜ}ùÂŒ‰EìŽp:dî«JºŠ¥_‘z”zº·’¥~€8Ù"~HÉ”ššüˆ” -ôX.|óç9'™Â~3õWH®ž:¿.÷Têä•<ýƒ·ÏãøñqE-W?)×Q¥}ähœÎæRfd³”­!Ø>Ý}YÑ:Üç‘™š5D9m´Öò¤Éps‚Nšùï:5O¹Œºž÷Ôº\_¦ISTuŽkr°ÔŠS!ôTdñX¦Uª3DË S%/‘)Jø¼o)Ü ¥ÌSÒ‘OëÍ?}ËÌJÚÙ›gi5oDÌ\[ý½ûÖÊV­Ê{éîs½zôí¥ïý-„í³*v©½þÛÔº¶m´ì&u—a3{’S=“…UQ%滋–s¥À¦$–-’.”NÜ×)Tú”h‚¦wœ1Ï ¹…´çbŒp¼€Ðg@ëkÝ]׆¥ṳ́ŒÁÜBò$ìÒ4¿‚4&·7q`Ü[|¼…î«bx:ÇA$&ÙÈCÈJIÔ‘í® p”g#Ní¯Œ²I;Ir$@gœ€ú®~I`ºÓ0ó‘.°ðò^¶ò6kÞ¦ÇNìÝG¯Ä¾%sN´¢–ðpÉíð?6Íøs⿜[=oÅ}¼|l8ðá¾UWÍÄü ¬•bá<^7ðœ/„ð’Dætg/…øP_ øj9=?7t>2‡³ÆC©í¢T7‘ƒàv ’òÞpTìáFqÌ@4õgˆ‰†àu…‰AK ¹M\e}ÙÁL{ô4M;aÑPàÞϰÃA Ø@µ‹ÀPäx Ò©§!Èr“š©£Srë|QMö¢=½üÐìûñøŽ#ÉÇÝ a»Ùô{>§q;}‘öö¯·äÏm=3ÌùŽH;Æ3‡Éàò„;!‡PÒއ£¸{Dø?Å÷O'øgØO/ÈògÄü>Ši¯·æ}s7öDÕB`O§Äùo\u Í'4œÂóG¸¾o'–Ȩ‹ÔgJö¨RA8o²Ê¾} ¹?7üü#^Š ½´\<׺ާKIΈ›Ž¹¢Ší¹ÛšîïŘáûŸ¿Bß¶,Ÿ–g›>SÕ[¸à™ïÿqb6æ ôïÆ&OÓ?~ýûïTü×E—kÚ¸s¯ì+uÉÙ¤Ò®Ð×x äHÝqÍߢ” $$‚Š‚ ¤ª ’ b“I¤’@&ijà€¤Óšbº©Šà€Q$ ‰ „Ew D1I{IùÛþʪVµ¯¼&»pñvñ‘ø½OGÀ?gàtùæêú1Ìf~öäöv®ß3Î!ø“Úk. j’oXõé^qÀÚ‘«°œ»öäå2y$õÂùPÄ­—að‰¾ë³5qø›^Z ÷g×f¹·+PY?7¶ÔÕ’­Üí5›\åÎZîÎÏR·U$ÉZèŒÏ™ó5‹Ëà§5¼·fÕõm®¯pгä­í{/\à¦éâTÙÙñ]s m^•ÉsN]sÛAæš Qå˜PåÞ^Мšâ0rév ZA¶Áºµ˜&¬•¹ÿÊ•¢¤®¯Ä(½ÎÖÛ³Ò¿š¹[1ŸT’rÝÇ`Ü®Ù[0‡݉*YÌý.ø¯Y%*IéuI <…ÄjÎîF+*xºÊf×­­íH©2dmˆ ÛM›¯_0äÒ§^žóŒ”ÓµZD|)6‹U”Úõ’Å”Äå¥Å%‘nk–ÎV»2ëÝ^»w3½jù •ÒÛ«êz÷3Ò Q0™Ç¤ž +Âq’ 8ô¨M“ÁW,#wR“.J‘Áí!_aL•*ì÷‰æ¢ß®ÏvÔ& =m©uøLýåpÊRšs^³ÌWÕ¹¶*A1+tƒÉÚÄ ^;¿ð·¸C6#ww>{B¼¹°…}ÛkevØ æ™ÊûRP¨]\9p¥Ü—uÂã9^Ž¿ÛWÖ¸ûD¶w •{vÎá’k|ij»7-Û™©º².ÒÊÍÎ í›/0}DììJ¸ArµþÛkÐ5ÍI±Y0<5,Û2ÍÄ7¦|ý?Ää£$"ψG‰ûΉwhÏ~Z”D†-Biÿ0 ðPI7xFY\DVËÇxG˜bL̉ä„Û=¾ä²Z,¦g<‡·–çét¿ü=¡¬ñããÂçŸù¬®·ÿ³Äĉ'ÂcæÎfþJ`e>sòÉ0ÒÝ-ïl >ðáƒ}„ ïŸï©àùTü×îüÊL¯rõ®6~Š•+÷ÔˆùWr—G7=~½;Ö½ ö£÷OGþQ â¦âOïž«ïÉöçj~Ûõç–éû#¯º[¿Ī>§iÿ¥Ë|R¹”s4^ÿg ®/S;îá”åYrÑ—ËgNyNûš› Úºüêž÷‡âG0BUdz3ï}ÅdÉ9,ËjÉ•«B¥)žLîý3\Ó²©ÛÙ"zÕ¼Í뻺žßî^glÒæŠâÏ´D|Rvß}./ÜhP™ªùŠYÒwq¡çQÑü\s° ê~¥Ôh}ùS_8+(O»ÏÖÈ®žÜŽY`wíT¿~ÑÊN¶ŸÜU§'Níö8®Šæoz~§Rvr'ïúH“³jÚ±7®â§»k©çD¶~õqßϹßdë'㱩Ÿ§’œ+çâ¶ÃiõTDHR2N A8Ýâ_MÈi+éü‹Ñ;]&r™sy¸H{tž?"È’—D“êÖÇ-Ù£vllý¶ÙΧ;jëýžO¾~•î…V²‚WsëМ¾§w»S€JA%S·œ 3ö{Ú|¡V„¨ MÚªWf¦j©äáŸÉ”ê±øn?{Î{ŸÓ¹Éã7 µÂs'))3™Ôþ©²¼®mC碢â¿/ÞBìПÏͼóg)ÍΙ))ruÝJ bv^gš9óðôk¶¥©mÕ)Î%.ño?!]—‰I}e9Gyãjèœj•§š°ðƒ§Û®ï®¹áÞ‡zkiµP¯€¥švÕ8Ï z]ß᧸L$ŠÚmx¶•[iÙòÁæ³’Ó¶B,1²êêêºs®ˆXeX[Š›5eÕÖ†9iø°»Õ—CcIWTd°³ðÁgŠdÈÉã.#Z˜KUH*Ô&Y1¥uŒUN{H?f⟱OÍI‘ÞþÅåå*­¤ª£F„8'ì}U{“ß|¬ÿZª9›£B&D@·N³˜M$ªI¶èïöôe` ¢jÜLã÷Ú‚;¥YtÒf«n­åžìý/„í–c uJÒ®®–JÆË¬™; sÎÌ[~÷¹›pÄ>j©¹|«!%aeØ^uÝaÌÏ5uuue–Ý]c`×Á@`÷¬JË-3u,jÕòÈ(E4_TV(“ê}MÕÓñÇ«¬'¸cš8ã7Z´BMÐÃŽ[¨HKmµR„3Zx$š<ûÚ<9÷ë[9ÞØ~ˆL!é¥+uó:è°!b2øâ8ÕŠ Õ–}Eùý‚‚ú¹†0Z枟½ì'nrWKœ{Ñoãý¯½â„ꃤ@Q"Ö}ï-,²Îé\Ž2¹ïísšJ0t îSZ“BNEG÷JŠýÒâ`SY¹*TŒ’rU;*¥4×itŠý’µûñüÿÕ›ÓÊ„Rý¨w,•”¢UvzŽÕNÍòÿÚ?¾Ê¥L R³?XqHü±=UÉßßMTcï³Gt*TàëIð’*ŸR÷½ûàðßÙÞj·~ý~ï} É£ÊV ¼­B,14pOF¶KTüeÄ9 ä*™8çQ‡Lê~ïÎÙ™tÐ)ó[Rç#.t¹Î(!»ýûÝ=Ó3¾ûúõ._®Nåß—_¾û¾åûï½s‹²×­§m¨o¿»~ïííÏý5Ìs<éu'9ÛD=û©Î+Ü˳Š}ÙªÎÒÛm–Ê«ÝQ^éòj3…–É j¿VI­òÔ¿I5o[ &VÝDèý­òÖÞ•h=`^ /¹)íu›£àW™š ½@-€=ZKdfžÑ¤äûšýZ.w®¾ßÎxI/'½˜ç·´*¦ÚP•®ò,à ˜Ãž uþ!j5ï&YaÏÊQ1ϽŸ‘€pÉíø&MøsáÏŠÎXö¿öññ®üj³Ç†ùµ_J%àΞÆx¿~óª•xžËá~ïøm;só $­ˆϦ(Imã™i()ÙM|øç–p >‰CØNߣoϼÓVÇ“¡îLzA=óÈêù)âÁÎÞáöµ3´ªêð(óÎøLL=tÊ“V(ó•Ü…ÁÒœC’²éöLù)ÁÝíЩSC_ {tnßj ö³¥| à_Ú½«ñ&¾ôBÐ5=†¯bP ‚“âú|]ëSž §É txµžEÀ Nþyâ#íòû¾Ð|“³àû=!þ9{CÓñŸ2öy=žÀ"ÓƒOggSI BVXlÌó ÿÿÿÿ®ÿÿÿÿÿÿ ÿÿÿÿÿÿôüž+@ø½¿ž@ì_@ôYÌ'b²1­)Ù€¤+PM9Aá€'“âriäö|Xaÿz_ОÖû·aÐ)V€(a,ÁX3$:’K´Ä8Ûwþáðƒ©*” ¢I›!h]pP×và : l8¦2¡Bø HB!"QJ H`I ï÷Ï´}à>ñ÷ûÀÜ>ö¾ñÞ>ðx¼}à>òýà>ðÞ>á£ïÔûÇÕø/ ìí÷»Óç~Ž^YÝ~H¿›íaIgc‘<ÜÄæ£oÈ`~õ¶'Éà6}a/ÅØþlö>c|爉FóØÈ Ýý%œûì[>`7‰ƒ«"\soç‹–3xA€s›m¹æsÀü~ Aúýþ yËò¿8…H?®ü†2Þ|#ç1¬%{øýÈ6~? ¿Ì•¹¹Ÿó߀`Qù–ðoÿ1;“’òlN约°™ñiùˆäú3I9ÿç™»×ÛÇâˆ?GøÏ&±[)ÝÄm‰£âqáM3Çê—%KãÈ6#ïÓ×~¢|Å9´G7¨ _ËúÂh` è\°3%5‡AÔ±ç£×VX<‹ñ5 ê{÷·ön§D”¢ø“‚ ê™W^”À¼uì÷†/N‡~ÇÐ޽+z{ú-[¢ùù_Ýi6²G®üšX'†G¶žI!ç‰V²¿sà¶wú¢­u÷nÛ-¯ëzy²6SQ‹‹z¢Š‰Þ’d{]ö×°5í$‹ ö¶ÊÕr_t=¯n‘퇱Ym¢…µëJµmÑéVÙ{ EËÕZRúG®¾*w¦Ç﵋fÊN‘Z°ˆ3¯Iµ„`óéé1ëéǦê¶ Åhˆß|wvG'j¡¨Úóœ£Ú¶„6EØyõ«**,V‰3W¨°x‘éõ˜˜h8ª»uï=žÞÆ·oIj$¨ E¤‘Íç9Íè˜%eö£¨X¬¤<בb¸ #kÂþBÜžÂÏømúx°ÿ§ÿòûÿÇÛïƒú|̬÷ÕÉ =ù¯bý`Ãýdžzbëʰ¼ˆa­ŠQbˆgOÿ,íÕßû|¾ÿþÙô² ÏÙþQäYŸÕóq|ærVÑÔåäGµA};/îyƒ¦¿Uí×éæDyòqÅ”‹3Ó“E{ß ÍþX•6¨Â²?ý´°úÄ·úÿLèµÌßu„] "ˆ!Z´´––¢Å©ƒÀpÉíø$,ß[ðgÓ™g´øç·—Œ›Ž<<¾àaÆó<]—æu=ü'„Xt9ã—Œ„~ À×<'áœÓå™È|+U­So—àpÀ*UÆ´qôà‘Ò†³€š[ÁPéSš‡)ÏŽXöU…È=ñêñhd ]ᤡÁ¬Υ ‹…•5ïžUÏ=p9ÏI{#‰Ï4tyæùës—ëž¶¸.yçãÏG“¬OH ï™dߢ=«àg1| æ'…| ííO öõ…~aà^”gJ¾Öyߨ^öx4ààÑÎW8(yžÎÂÓ=¾_wÍ÷nœsžï‡ï}=v'ƒN_g“µÍ$Dò!8{0öx——Dìûž{œñî{yç•{Áã¡ÓÈŠ€b«”¨Y@$D¢èȵ\¥º}ÂÍž©ð>Š)}=‹|ž§ääO"} Ò–€Z*Ö°T±f´f«0-fl,iEØlÀ¥‚û` j6Ã`›#c€‘@-`6c• 0`ƱbÃû3V £?„¦DÂ2`H$°`D"Á!„ 2 ’X1 ¢ †%Á‘0dA, ÁŒ&‘ÍÃð÷ûÀ}à¾}À>ñ÷ϼÞ ûÇÞïxûÀ}à>õ¿‡×á8ü_{Gm{ð ~9ª@èÕžÄÇò…öf¨:í9Ì|~sÈd‹J¯ÈðYòæFq²äâ$ ° õ¡Ñø¬˜èÇèñ=*Ê¿/GûG‰óËÿÿÆFÄN;ûoøßÌ ô/”?\øè÷¿ zIþ²ÌÄJäü²²Pe!ù¬óR¦ ?¯þ²|Žº9™Ÿ¿ÈAþcðÊP&™ò^%Á”NY幈þ\ŠÓ3õìó–s˜ŸøF%| ÇÅ¥¶\ë£À;¬oùùû%~Uÿ"Ìü×ÊÒð=³œ?>JÏù?oÌLJ†VSÿ”â&1ò´1ùóÍpÁ¾Û̯•ùù˜SÅ u$`\æ]BØ…›Ç›M”êìKórnø õ!+Ï'›YW_©9À,æ?ÄÂcÄîU6ÝySÿ2ø®B7ì/óùfdŸ~sìþþ†ÿäG6Q²8OÏŸ8~üÑן·Ï}ö8}½ Z“ÚyïÏßÛ+/ëõ[(ýOÎ`¶¶‘g¤ºËUG¾¶2ÿt"ËsÛ}§/òùû" ƒûo™çYqïߌ¶ûr·‰>DÆß>ÌåL}®ÏR£<ù øÎÈQ9lož¢™Ýtdyñú³ûÎ÷ü^÷™ê9ÿ˜VšN¿ŸœŸÐ¢E©±õÅÉBŽ‚!|lfªþ¿>μ§7È‹, ^¿ââÊâêÁÀð8½¨ýJü½»¨&¿ñ”ì‰d ÿ~`SKy²%{I‹5­Ïôå¶òuß,ÿƒO12i ’CÙ¨è"j`Ùiµhé›XF6e2r‚=bŸdƒ#k{.OdWKö6¾Û¾›)c4Æ`VÃgosܸKìWål-¸ƒ¾ëO$•”n‹˜Ï…!”ÜbitŒà¢YÑý|„ÁxK"ùý*“©lfˆ`ž³‚ýr€½‰Å2õ`ÿRD‡ûÑÆÑ¿g Œ™ú&‹ÈQÀlalŒ ¾Ö/K[ï‹ÞY1V´ûjÈš{ÃAº‰Î(Úf} ÚÿýXmEZÔ­DF{‰MTln”MˆFÖ,³,]~ÚHm!ûÙTWøîéé¢ê¨åD¤€!-Ö¢Þ¥¦Ž-“§Dm³éùª2X'¥ íNoHí’S!ñ›rû®dÒIwµ–¹Kôõžü‹MòVÁZù$aþ›9íåáVß $¾|/›ð5d³3‡Œï~gÓÝð’Hç8ã•z¿9©øç†y¿ —GÄø\ãØIÑ„©õ-à¢qâòaí ›aÚÕå„:<Üè¬~²yÏZô·‘Ê÷¡ÓTô7‘Øú=”ìÑΜ!~?CzåëÈoi9wšMí2¯4FÔòUß‘ÁJ7á¿s¸=_½çDÆ·ŽÝÞg´¼ï‘)áO zYÏïgÕ¼ Ù·–O©ËÙèàžpŽ©‚|žÏ'd<ÏG߃MŸ»^CV®ºí€}/³]ÕrÜ[· ²ì•l§”›bRVÚÕz­u»™ï0I©wq‘èæÒß½P5ÌêùYw“M–½{SzóUr½R‘×gµàm—]]‰Ï5Ü^ñ®ÒÈ‘_Zté3x?égHSÿü•ÿBتùŸáSÊMÙÈÉ3g–ïV’ä™å¹܉³ 7Xy5KVÌô@@B[ÏIá`eþ¥.åη]^yiB î!mϬ¼Å&¬×:àS¸ŽÄ–·'¶»Q¶Oþ¯v^º†Ý7èaÚ–õ#flØWøOL õÙÄq%pqBð|§>‚RVNT:NòÈÜl9ë'*\)e»Ð,aS®® ¹“|ܯR©»‚^6#­NR>‡„—eâVkáFgrkYüÛˆN{HÏUó©+e,!WQ¡UŽ_ “×_ñÚ†oÏ<ê%wöR¹¼pîygCA ¯?¼‰¹Ž‰ùá~uJõàà(˜ôN Ë,e¹Wó|ωùä|Œÿù .-Ï·âç+àÉfü´æ#}¹îÄolC2|¤Ý´Ã4pLôo».Ø–N÷:.õ_zAá&k´OWGÌÎûåï,G5ÚßdáÐ_¿Þgùum-rÕóé;úZúj³äÓç÷ ”'º|ÑCïÝ·úH¤†Çžö/àOýc¾°|¿yö¡Ž_[U=µWPôÙ¶ÎOg›Ë½8×Ï©ÀVL™)'¾íòµÚÑ]<ŸYg,µvû¸)I³ßÐúÑkRë¸JsÃë{¾g·¯r)ÙréÚ‘ô÷>.Wy‰ν¹ÞöuQ¯¦ßÊrO´ÈûR,–µ:?G?0öãsù ýõù””Ùaüp+3Û-Ϫ¹[%Ä»œŽqtn –ÝæÌP§œôq{*D±­Nó§öÝë®"©Ïû‡2ô–_GÞÉ:¸ÒúÝÏÀ}æ²ò8OîtíÇ%Xñ ~ÉÇ®²¬ª ½ž‘39yìp4y›ºÜW>›W ³G½ÊÕærSOggSL BVXmLB$ÿÿÿ|ÿÿÿÿÿÿÿÿÿÿÿÿä딦qÖ]ج›ïí¢uO”âž³äúé?IÛ€Õ‡€¡Xñ“<5;z¶e!T)ÒýݰÝNÛV\§)ê­#Å‹ù¬‚q}¿$»ß½¶ÒÊàßpßt’4í²Õ®K÷;õ ís éôO8³tïî’&Œ™/Ë–·Þ–ÊRZœ9©Z*0åŽÛ&¥'ãJÅc¾&SVè‚Tˆœ-9oH$TƒHÄ‹ c 4A@°IïO3l‡WyLfÍ>Ê"68£µ™úD`½cÀa&u$›b°|¸ y­µ:é™a:}Ó%¤0ÖņÁ† ëñºÕšË¬u†Ú-³&+˜›¬q¶ÎX‹ ¬q“³ÞQ“G ²Ñ…·X`t²-ÂÌ캺æyVQƒAjÚ·C&l°í+K R8IöÒû)ÖÙ‡S½?s2%Ž_Oöñ´ËÖès˜­VÖ:œß Ä‹7lÚ]*ÆÞ¥ÛpÍÖ(]rˆzº´°«w°ÚAÉoÉ[ ,ÆÕÁmŒp· 0ÁL°*êÛK½û±Ö*ÉMÒc^û™~ò,€Ç.±à‰«råÇWK¬ªÞëJ¾Ä”sd}Ÿøƒ0Å÷q_r«8Åujek&“[ŸuHâ·FU¼)®Ú¾çÞêÉ´êÝpæ´¿[lc ‘ýà)&’Þä×9mæ·í§™Ì9Ó»N<5¥“³ÑÓkâcÓn¸k†ÛW8‰ýÎ’¡°ä°UÏÜÓ^iŸm„<%…§&ÞèØ`‰é„ Ê}Y`î#-½{ÎBBÅB 6,ûmíÂÓ*ÃÇÄÎÞ mñ÷{Þ~Ìó ü£iýÜþ¹0ýÎ5ákÁÍ5gR£½·Ÿ³É¥úŠ®×á5!'ÛH8+xLÏïÙ“û†R"—oÌ”;P™Û>±xUQÙô÷Ò¥Tû{©å=<×㳩ûíµSŒ#Q”.Ó/j»;Æ" êÍm<ßsiË/r‹ÄÕrkm–«[—£l¯[^hšd}óƒyšbíŸU½LøäB§Fòò·Vî^Æù«©¤–Òk«{m’ÚV!QÔ\ß~òPÃDÃm¼ˆÓ^Ù^Ûyš)m ePJ^’]Cêd³^úŸ_sÁ×Òh´ç`pÉíø&MäçnóáÉ̳Ú|sÛËÀ'ˆŒ»,.ðÙøð—‰á;ßÀ9|'‡9o/…ø(Ü~ûãÏOÃ-ß1è(;‚³ËCâs…ô{9tòéÈä¡úÇ¡Èû|u_×PñÏÀO°êùÝìç;3Qø{Àθæù çž{ã‰ß­çž}©¼åJÃÙßIzžS><ó;;ßiÁð\J?P¼Uí^ç±±|g„}½«Ú½¿gz4øž§§ê|U€Mœ>Ï%ÃìvvýHáíòy'YâÿOÈáùO/oćgÔìù•^T§oÙn)õiÛìö¹EÀtôxž|ά9Áîû½QéŠx›+4©NLq-!,+Š|@L|ン”4Nä †@} Uš Hô¦"•á 4ðø0IV"-ò4†Û2 hˆ#þUh)¶jA„"“   ”‚J! ð‚A ¤ "C$°bA â  (€I€H}ãGÞ>ðzƒïvûÀ}௼P÷€ûݾñ£ïx½Ûï÷€ûÇÞ>ñ÷¼}ãðËüŸ€ó]¾öµÛAàõŸ‚{ðœg)4Òãæ­v}åMöz¼#lµß2uÌîUØämV»ÜÓEÉ>O(ràֿׯx‰s5ÎÛ¤Z·8+uº»óÜ×j³—ú]ÚÕ™Ýë¶Û1H×;ïk8]ÙªôÏ]µÝÔ&ݹ³í³6 qŸ` ¡Bª~ÞÿÀe–ð.¾]ÚûþWå¼Ù›qõÈ…–բŽË¨ Þšëÿµ‰¾cÐ"ì)hL¡à[|mp7jü®»Ë³6w)%Üg·Z­@ ¹¶À&F¸6g&ÕÀDJÛkÜ»µ˜-›Ï6Áf¸Îȯ&±Ÿ£Î¥ÀSVÿ‘æsÔŠ÷)]×™w•ˆW>«˜ŒØ'ü%É ÙuæR&÷n`ZS+f!AzK|uׯwÅIXAêdÈò*Û]»•õÙ†™g2,Ù2fº®­Ü\핉Ú×]˜J¼Éó@~ê©w¹o5Ð2îkqM®¤ŒÍ¼bUܧԜ¤³YˆL·6~®gµ{­ ТgšiY™vv"÷R—ÍuÎÖ×뢺ë—¿æ+¢j船;ã‘§*·\Š¢„ w%Þ~Ù¯þ;f¥zÏ|IËm¢¢n“ͰNžõ¡U®P ¦²Ü\ô‰'³ÑèîûÖp¶ê¸™—Z¹¶~bÎg¾É×ZJëuÁзZà%ž¶lPB¹Å%tEW dV¿@½',ã…k’«—n„^â‘Ú¹¸Z•vË_Y%wbUİÌá\e¶¨åey¥ÉÛåTš[U¤ZW}˜º›´ 7òc‹mšç• WhGóçžÿðè  ¬43Ë™"!?_ˆÇB9Ôþs†|öŸ; Ò¢ÀÎ×s?–yñL=eç.eùDóÿB\1€³ûŠ2FyuãmºüÃùGÄx%Ñ -}ÄåË:ªdNwêIÑZ¦s—¼Î„§a2#뜼Ȗªz$'aÀˆrª&¿?heK?¢d#¯œÒu-"ˆÊº¥|‰q2Ã.«<¨~–¹ÕØßl¬q‘v…5 VLƒp‚ùûƒ%ÞL“$Vt-Ô£©Ã5»MÝ$ÑÍ*Ù$®Ñn*¦FMQj8˜¹'ÞÄŒ¢¬— 8 K‰%Y‘Ž!pºÆOæG-ýo\Ëå sÃ28rm¤tóZ/œ £Ä‚øêïAÔˆõóNù•8³“4 ¸ä2­ZG5øs–çiⵕ¢¥ŠÀ/“®I}û}9É¡}-JÄÖøuU¡6Sº?iÅ“%,-)Òñ¶¤ÑuÞIɶZ»YkwÎZÕTÎÞ§iJ…HN}!2îeë¤R÷ƒ÷Þ»™ÞœêCÞîvI±ßœË#šÄìgÁIBhŸÎ+5"îï ñWbdµ†TNnìÔ¿èÀ‰žJÕH“NO¬ƒ4‰<”çäL–{W5\ÎE:—†IZùãTƒÉ .”´ ­‡ê‰­ÐÛèÉ^YÙoÒ³{öX¼ô½L.‰Ôì©SŽ°Ã¢½™±Åó`I’Xë Ö±Ú]‚Á4³%ñ¤Wz0ÁÈ­Y,§<°eÒ(ጌ HÚ1ºgf°ñ­ÐXŒ5u†LR%ÖÖo³ñ%âKÄ”#G+?s,¿¦}Vs:— 'ŽÆQ²ÌçÙ´o—*ƒŠ£Ê!cŸi#6“´óg¬TÌìé³Xë߆@`0‰A“[5n¨I›®šV–Va††¨ân°É‡\¶`$«)+ŸºÏX’†]bñÆ·WYM¬.´H›X­]-Ö…Ö+EI„5)ËéÖ0‹<¤œ0͘·TÉãu•Œ WIw‰6]ð¾Î~̱• ËXåÈK Ù?ŠÎ„ÆØ­qr:€˜L½æ’,'Ÿ£RöªÊu"£%ÒM=Ϫ0î­ “ÉL-„ê~û®å,-ïcx!òI’!!9ªäýŵ¯Ü¬c+ƒªrÖLT2:d¸ŸÊiœÓ?µð¹¨j×9FÙkXIj³äøí?ô`Y˜`u––š™ÎÆÍï{Þý¶“´Õ<>¥Ôs¤s¡ØÏxÎJ—)ª÷…:^ôåoQG¦žž§[ÓªŸEû²š#rµ.ÑsçNýÄ»ëç[<—•˜{ÓØÙ­ W£Rœ€ôCY9õ!9 ]SHsÀŒDçO©ÏqäY)pÉíø&MøsÙ3áÉÄǼøÞÞ~~~&¯Ù?22¦ó>2x¿~ïuôHðcÅøÚºzÏ“¼"°ª¼SÀ!oLHJý³ {Ò#RÄðÊM>±èvMë‘Q ™ÏIhI)E”ºÄW ji¸8tüâd_áä'¸_sŠTàñS¸÷E9)ðz¾FþNÀúŽx?Gg¹À+ð9ãàõCÀÏüÔó‰Áö/ ‡¦•¡>e4òbð¸ÍÐ{¿“§ ·¸žǼâÂ4O@@t+úôL:¾ßÀá<Ÿ÷ìù~gÉ臃Ûà©ö?/³Ìлø8ìp'€>(tCÓð>'ìàöÓ>W³NQè§籉ÁìðRL;~9½R®Äå®2s3klËm :t16”v%Õ¦¶æàã5‰Í©±¥h&[¹ºqÍWfŽì꩚•Ç8J»tj¤©U-MH‚) :Á$$@B@‘@‘AA÷Œp1÷(>ð V¨Oº}à>ñ÷€ûÀ~?‚ïj¾àa$å¹Zœ'­ ¤ÄRóñk8×5wÌmpë.óBr¹¯mÊþ6*¾5{­:M•:ÙwÄ ìJV&w€ZýãøÄ/Dm¯Hz·\·ýæ¶Üúú8,†å·ûnqyÏ0Dÿi®Ö½Ûšî7¯V­Ø ­/Šä®ÎË—_fººtÄîR½{Êë^º•nêL4Ö’ºæuªm¨ 1µ‰Û,À\¹Ëª] lÕψ¬]³µµž6¤glFV[áÚEÙ¶b=—q«³UjÕù©H®­–b'¹È^ÔE!n©¥÷.Ís$èšÝM\ ˜ë,˜øŸè‘RãÒgµšêØÖâmÏÍÃP1.´˜˜A2R6dë¶ÉRß&’–l’º½ €åmeWýüSó®n$™^ç3ë´xž1keµÙÞ×;§H“•ÈÎ!Aßì¯.Êö·ð-D]kó¹–øõ«$kx¥~>|RR²Öü'Îü--Ÿ–YÛëÏžYÛ=§š¡i¼ø<ÁÉÿr D>Ä‚>yqsJë|?Èù?r×eóÁ5zç#XÉ×Îþ´‰UH&rñ‘No\Íå—áZ,vª½XS¦$QÙÒ󒆌Ÿ£¥YGŒ8ÅîeT)Ê«‹î§NªCö§F3\šüÁ b‡ü­!ôë÷ßѳ•óée“/’¿~ã…)¦'õê×Ù××ï¼ä\CäÕÞQUR‚UFdŒ*RAkòÒ?Aýõg—NzçoÞOMLÝÝ«»¼©~—3Ê8º¿N² ¢e*“Äm¹Ütüù™¬9©¡%Ä|?hÈÛéÏ„´°m—êê/×|à]"e<ëm(Ľ%&}‘Ñ[©ßd»>H!=_Û"un8°Ç(äÆXÐ|Ú³«;ž 3ÇR±ÇXãŽy1ZÈ ^8º1˜F *•qH˜ÍdÂ4£âiž21ÁެÊù,XÎ ,P³wWL-#«‘r„£>6ùNû¦nÀÄ•„ñ@žÆ²ó¬>Fß•Ÿî²²ÜMZ‰„*s´B.ê×XCÅk…BLÑ¥Ù-Ÿ¨ÐòŠ$Š2j«¥t²yýè¼R“2 ¤‘Ïoa ÈÈ-ÉÀOggSN BVXnºåpOÿÿÿÃÿÿÿÿÿÿÿðÿÿÿÿÿpÉíø¿ÖãÓ~ …9åË'­ñ}W§‡—”Ùé8~¬ÈÒq>#?©Æ­®8‡Áǃ'ƒñÂ'ÈO¡à‡š É Íóϰ<ʈÚÛìh0$öo\Ÿ3ÄXydäwÀ‹ç`ž\EXûë˜M8;8 >“ª1¿Ð¿’_/õÐD!%‘ö}Í<ÐûºSÈO‚¿G£èöûƒàúºÃchŠ)ÞA#‡Í;] !ÒóyƒÂÀ è@TѪŦ´ÞJuBÅ7Wàs€:Ï“¢‰ö~3àtÓ³æ}pF”úµûψ¡÷C—âj|Њ„íöÜd3>'ìÓLY0¬û€šx>g§ÛìàåOƒÙ‚}‡ÜQÙ$b¾+†d Ê*Íp`£ì@p¡ÓƒGM¶sO®ßTAÃÅß Q’"÷—ïcï&>ðxû‡Cî÷‚ Þ>ðx ò~ív÷~9ø¼£3„J,ð)‰œ"6+Úþß}¥bÌ—™£ º$ókÿý¨Û¿-Ï…F·BÏ¿>ùIê‹ïÅÎ;ÍŸ€þÞr…Ñòß©*œdûI÷ØùgœbQ#wæß<ƒ~}¶8_|§åÌ9ü?…¼ìË®¼òÒ ŠÁ¼| Êäy‘oÂd2ˆŽA=üãoù·‰Ýøÿb6ÛŸ÷öÏñ™ÞQåØÜÌ“7û·eý‘1ŸÌ;%ãú ÿ–ZüÈæáüOÚr#ù 2J:KïµÿÈ3"V09ñ‘ŸHõ™‰cq4—ì9ã7QRD£/0r³»»ò#ööºÊŠ Göv¼pÉíø>9¿ôf|Vq1ï?^®#ÃÃÏÄ"{?4"JÏ‘Öý¯‹‹¼#©ÖýOÁMø?õ~² øÈ‘‡;à‚"3ƒ“g--Ð= Šã8‰ÊóiÆ®Õy_ýÄî>³à3¾éÙO))‹Ö‹ƒ(‰^¯C«èg3:Â!ÀüéÕß#7|ñæ!¼óÈÄMžG9ï›ÁO/Øñ}4O®*Pœ5ñA÷‰‘<³”ñú:)àgÄö¾ć&ŸR”äHztùÙ¢&ó·§Ð´è^Àú£íèÓÛ’3¦@Ü”‚ýä? N%DÁ*÷ÉdLuŽÚnÖ5µ´ÜœîéRUP-‚ÜîÚÚ³¢Ngc»œl§@Va¶¬awͲ×&0™9Í®×v»nå3u±±wi$  Õºî܉à!$  ?Ž H¢!AIP@P$ @$×Þï÷Ф¼÷€5_{·Þ×Ü×Þïtí÷¼ÞðP}à€ïp5÷€ûÇÞ3ðX}àì}îÞÈ×ð¿™È%ð-uRîà ¸×=ºjê ñžë˜h*êR7ç#+'¾‰W nZZÁgW·2ל³–ì\Ü‹k›ÿ_NR×­+öÛ)ò{®v ïîœ ¶Z’eÉfjk×ëìW»5¸…pÔ€Ü×ûANõ~>brÿ»öèU›mªˆ6¼–‘Ý×éª&¹h¢VÝnúòí”Üô˜1 d¸λˆÖà ®¸CÕ.Q°+àj¸ê)¯D ³³³e·¸--î\½ë6p6 \P6]²nÂÍ×7™¶·¸´qvòðy«4ÿ•©7 Ð'HT“~Ôð…Õ;©.ænæµq˜ ® ¬ékR*k|¼.!ˆöݼÀ¼O©$]Q³–RxšcZú€Ýx¯Z»ß*6×fp:Ï‘ÕkRÙ¶#½ÏZË}‰láYˆÂ›q·333„@™&ã•7½rüY"Û›Pð,¢àðƒÒ8`™êz«m·2µÑ³—:\¥r¶{þçj „´“»Sâ³Ý¹ =ŸiŒ“[šÞÍf¶qv\öô@¤}¶Pnqy-ɨþ³»=©l#ôA‡KÌ–·ëhAåmkâ0…ßõà-¯5¬•Õxš@•Êþ¶°A^muµ^6Û³±øæ10„À}” Ùà#1FÛɉ?˜:™Ë­ü›ï!•³/Àðú3˜3ù~¹ùoçósðž?çúO³Tšƒû\§|+ê ™Ä󤋙'\”ŽŒìýuk›lÿ¢Å2ÜÉ4óó˜}K½à톿¤^ímê©Ó9¼V¾ël®ësÉêªqÊ)Ø)é£vË`“²Û;,·xèÝ‹·>µãU¿¶æ»¯¸cöÑ!Ø,^íŸN°ï;Ï¿[î´¶m”‘Z#&VN.Ûw8‡ y¬“w'gcÞ) š»ˆ”Àاð±-u. ¶_‡î!ÂîH›\³”Rö¾Šcö~®:h8§9á¹I.žs¼ÚûZ(8I™žl~ÑUÝ÷È)éM='Ôç3?dªõ!ÔsQǯOÞm<—Nž1Öûåœ#i}W²pšÓùÝN£ÏÙ\¤ÏåöÓ¬”rÎÜÛg[ä{×´é5:tÏR_.·ôáššÙÊULÊØësÚG†ä}m‡;ÛGKo ®êjðŸs»šìà³2U ·oÔ˜þ\£»Á§¤EËÉÛ[Çz1´¨Ã帆¡œÎ•Z"7ßó?£äÙ £©Yã¯F¥®ª]¬PÊ+9×éµk20Æx†0™rÙ®X-ÆAdäV6Ýc%!ŽÖvc”rÌF)cŽ8ر#.QßyƒÄ•ÒÍ 2ð[u† òkÄÞ¬æ#M¹áƒ+¥ŽQÌV¦DŠcajl·|¸rQSKçÅNt‡½Ó¾À‰žÄÚ§V¢ˆJÜð€²Ù­cbºÃ%–â,„FÙ‘5l$èã«92d`P‘´$«5\€C mÀN3É’¤BÓWà÷Ï'"GÉ<ÇÁÕ TKuå'o…©yÏ„ë¨^gµœUð3–¤í_oj÷ÄäÉð>fü¾*vy~OM=š~ xžø=òC’sžz>§·³àýZ{Éê%8 ÁðÏÅà¡ð9š"ò6üNO‘äô|Ï©ð5öz  2'Ô)÷¸ø|švt{=ºrù=°”þ àvÎÇw›–p\ݵª6ìS€î&çvÅF %Âî–(P*W FSCÏMÅ)žÐ" €]°Âª ¡P $@¢QL€ ƒ I$BE$´BA$ $A) I‘Hcïãïh>ð{_{ï}ãïxƒï÷à¸+F¼}í}ãGÞïPz€€ûÇÞ4}à×Þ;x“ð!~÷¸¼}îÇà¿:µò¢º®}pÅFÛ«±?WN«­¬ÔÂíÌÕµÛÙh-T²“¸slÕñjkøÚ²LåÚÖr6lìö…m¡ºÜ•×^]–ê×ñÚ€MËåOT¯]ymØ®¤ëgvm»ox[B ÞáÞõ eʯšÐÃÉ‘«=!u¤É‚ ëµ]kmjÜϳ$Œºð­vΉ¸Áís]ŸPÌn}Î/ï÷pB°_í¼ç:ÙÊô…Þe·mŠZ·^¾ÛÃë\¹Ù&»)3> nе\ŒïmÿIã¶mÕeu®ð^¬K¼ß–ÕÍ)³Õb[uÒŸu³%qÌÛ7½‹kkÞKÏá)w·5u#^\ÚH©õH'º¤ÖåHxçjܯµ"âˆ2ñÖç öÝÆ¹@Ý Wbã£Õ²ÍeÕöÉåzyT–³¨ÛåëT3jܯ‹¶msê·=ÚÜWÜv å#Ö#ÞÕºæmÅ¡næg®Ä¸2’à- œ"V¿·¼íÍ]ùBÏ–®Ú…YÚ’÷0 {HR”’¼¬L¬LnÕîé+•Ž«©IÿÞˆ]ªíx®aEºï×϶‚ £{¯uœÜÆN¨9~µwP­Ú€á” (a›t =K|c`-"|+”t¡þÛ¤Ô³‘œë>¥ÍvĤòÎfÛ=ÔÓLõív 2LÔ•í+Û—f£®€Ù['IfŒ» Ç'S|aȳ,Ö]ºµÒsY"~û:ò½Í¹ì2]¹zO/@°ñ>É„A§DØ ô!â6}Q;û+÷uÌfŽnðo°ø§ò+ ‘< _¸ÇUÄk'9BAõ:›YÛg–µða°S'(ÃyY2)­zèXiä?ÞÏ‹,µt›ªueßÔóÄá›-ÛÓéîñ&u.Â\ÙÕºßyM­žù™Rù}V(sRž°ßY)éùU¹Ü™ús²=dÃzïé:MNsƒýûXÎ@溙DŠ™2©–d UoNÙþ¶x·\ú³:[V9ðÏÑÏÉQò!á 2r¥óSk`Ž»Òà 7̧â„Ëðµ«Üž âûÉ[ƒ)óƒº)Ù~fâ>ó¹+3Í}TáGçË\aóOggSO BVXolº*ÿÿØ–úœ‹HçæreÒÐêíØVR(<žLéS«XdË5ß§ñS””ÉÓ„Î9å-Sú=Š­)â‹8V"Åܺ.ï:C‘;§NLæuT0µÆŸÒEd¿Pœ¬A4f–Éå k DŠöž(|Ô6Gj‹©Lþ¤œÂ˜8z;—(s:=D¼ëó + t©ÊÒéHY2LFGÚ„üïºÜ°•ÑnµšÕÖ# õn?ˆ“¬TôQ:qVÕ£,Ï4ã¨,qÅw-hÛfvºf“‚ÄJeޱO­e:¦±­cŸ‰­]cŽ9£œÂ!n°ÆÜqΤcâbë Ýt±Çå¸Û‚³WVd»ºÉÖ8âÅÖäFŠÄàÒÔà FP_ž‹ GYVÕ/üüà­6@c*±š`cLñjmÒÞa3ôí¦DìNx`×(ÀåŒ-šÒ–0ÎS4N[q\ÒX É’»`&ÂL?-਴”ÊëR2ã«#jn˜ã«u†±ºÏ‡†Û¬qÇVˆ ’R{ N' ¹Ž2j\V ,pÀÒÄëT.¬ÆŒ_ŸöÿóÑ?Rvs„©ZrAjÝM¼_¡è&g÷~@}ìó$%ÞÑ Þ¢“7öYcT8ìû)ÑÑß¼Ó¤4S›\ùÔy®üV@~¦„²Â ¸BU¶e×hç, dX.Q:É ùrËeÔ”"±¨‚×ÂŒ$`ZsS¿T—TÛ›P¥0í9kò2äÔcò[‰é?Q9ýâæ{/Œ+:v§H§½•v~ýªUn~yêI§½ï·ô~é§9ñ¦H¢(,þ?PfA¡2¼f陎éá>øÌë‚jq‰ï6]äJñiœÆ£¥}ð¢÷ƒº‡L¥·é´iÙ4±å¯]-s”Õ´Ô‘\c×HðwÇPÇ9b”câ=rx ÝøEO"wÃîzž³ÙäàËȢΣÁ‡å ~žßïæwINq<0ð|›à‡<)à“£êæ“ö’.ñH|ZR1²à2ûÇÃtÁ0ù‰Þôц‰èsÓtºpRrÄàGYåýv}ŽÎÏg³Ûð#§Ð§À‡²ØSÓÜ”NH|Îbt3àö82C :üe1Ó̧…=‰O°§8é±:­­kvº¸K¹s]œ¶vÚª®ù˜\íš:NuÖ¨Z¬ì»8Ô‰R…Æ";:n–D’æKšè뮲ݺt­ºQ®mF—»wwvsB\vk$Š ( ) ( ¼AHEDD’‚D÷Ïq÷4WÞ ûÇÞ4kï}à>ñ£ïÑ~ð÷¼á…ø=ÚûÞð1œp¶¹³ÝmÙë>µIjà­{yn¥âurꢎܮVxͳ+Üûulkˆ“¶ÄJÛŠ [n×¢`+‚Ó@6zr2eEHM_®Üãj %SŒÔ ®Äº†¬ën¶Ÿ „.r6rªo.ÂI0B 6»WxpÄ0†©oÝNÅeÙØ˜­\R‘ÙínK°Amh…×ÿ•„0bA³.««m™9 ±€!rIsÍ®ÄO5S@>i‹( h‚v„õ’kkkÕuÀ«ŸvõžQUiÝσ³³ÖÀeΜªUËnD›ìÖìŠauÚï1_3«W½vË \Ïk2]nµ+ö”@ToÝLäÜRims;WÎô…Òï÷DZndè PWÅÌA6\ÓÞ×ß­`u×̯l\Á¾p©š°NÞTy7¹v[¶ïR©æ¯[0k•&p˜BÜ™ wt¦v\×f+`=¤{¸M²W”.Þ-Å%)-.\»K¨T ¹Šëž”P°ý´{Ì÷yÖgèUrà.·j·‹¨¼8s׿:óûZ|­³™åÃyßÏ>dÄøæYسòx3·ø›ú0uûøÈñûj©Qá©{w1Ëó|ëÚÔš›+|u.ÖûÊÔÎJ©Ïšãék´qœOÄq:•² ‹¶ysü;•,Œj–E%záAJnç{ôž&EÜç'ܸ¿i{yu6sß¶Ôv;l梨תmé¶ç)ɧ¼}õ±~ÔúÌ}›ËÞ黪½m‹äO¬7mµ1îNeËw†}¶ßߦ 6¿§=þ¥Æ=àüVŸHP¡6ô#,€ÙÈ»–*Xê¶3™üŽœ}Ƴ˜þ’Ëö«Á8~Þß=Y_GªFÌOvp:ôÚ–g4¤±O}e~fÂ÷¹ÎwâÔm¶Ó5N~hü ‚- óäê†û§Ó§¯ÝÛnå:.û@‘BCÕu™&d¼¥Œ°—T­µ:&×YÜ’íRš|Ó¤Ðßu=Ë@—‘.™4¼`ŽŸÒ`ïô¢¿'`OJ,¬ÇT;©(YZáž#.x09ã©b³ǖ qXŒXG‹c8â“FL1³ƒsÇK B~\qÂëråc>0²Û¬F9㙀±¦a]#hNz#Úâ\c"ϳÂÎS¬,ae¹V,.®†#´0¬-ˉBîq³!¶Ícda†Y¬¹XPZp`øÏ”#1Ç7TK ñ"¸Ã/gJÛ¬N6ˆI†kÄÖgŽ:Ãxá%#¢2––ò¹#¨¡f­×ÌŒqƇ!$eßÙÙv¹Æ}ìý’0ï%¹Îp†ÓØÓ˜õþ¥øèþ¬k®I.Q~þ¹O’c|Ó×¹’u´¾¾SëðV>Lc³•9 {Ë»ÕS=¨NÕ#«Xl¬ü0 …ÿ´*òà|Ø_ù8<ø` ÿXl­ÞFþƒÂÿÖyp>l¬ü0 …ÿ¬*òà|Ø[ù<ø` ÿXl­ÞFþƒÂÿÖyp>l¬ü0 …ÿ¬*òà|Ø[ù0<ø` ÿhl¯|ŒüP …ÿ´*òà|ØX<ø  ÿhlo|˜üp…ÿ´*ô€ù°°xñÀ<þÐx¨ÒæÀßÈÁàÇðx_ûAâ H›[ÿÁá튀= >lmÞFþ8ƒÂÿÚj@|ØØ<øà ÿxlxü: ÿxþ?Oü&}·ñ¶ßÆÛÿ}üm·ñ¿ßÇŸmü}¿ñ¶ßÆÛíüm÷ñ¶ßÆÛmò6ÛøÛoãm¿¶þ6Þøóoão¿¶þ6ÛøßÏãÏ¿·¾>ÛøÛ{ã—߯Ûmþ6Ûøósñç÷ÆÛßíü{wñç/ãm¿¾þ7ÿøÛoãm¿öç}üm·ñ·ßÆÛ}üm·8Ûoã}ÿ¶þ6ÛøÛoãm¿¶çmüm·ñ¶ßÆÛ|¶ûÏümï8ûoãm¿9müm÷ØÛ{ãmÿçþ6÷øûoãÎ\ão¿¶þ7÷øósñùãmï¶û}ümºøÛÏãm¿·þ6ÿøßoãm¿¾þ6ûøÛoãm¿¶þ6ÿøÛoãmÿ¶þ6ÛøÛoão¿¶þ6ÛøÛoãm¿¶ùmümçñ¶ßÆÛÙüm·ØÛÛãmÿ¶þ6ÞøÛïãm¿ºrþ6ÛøÛïãm×ÆÛŸ¶þ6óìmçñÏ™cÛÕãmÿ·_oüm·ñ¾ßÆÛmüm·ñ¶ßÆÛ¯·þ6ÛøÛoãmÿ¶þ6ÛøÛoãm¿¶ûmüm·ÈÛoãm¿¾þ6ÛøÛo±·ŸÆÛ}·¾6öøÛoãmÿ·¾6ÛøÛïãnŸÆÛ{|m·ñ¶ßÆÛr6ÛôVößJûm™Æßó¾þ6ÛøÛoãm¿¶þ6ûøÛoãm¿¶þ>ÛøÛoãm¿¿¾6ûøÛïãm¿¶þ6Ûìm·ñ¶ß#m¾FÛßmüm·ñ¶ßcmÿ¼þ6ßøü¿ñ¶ßÆÛ{ümçñ¶ßÆßo|m·ñ¶ßÆÛ¯½¾6ßämËùY–Å®ñöÜãý¿¶þ6Ûøß{ão¿þþ>ÛøÛãm¿¶þ6ÛøÛoã}¿öþ6ÛøûÏãm¿¾þ6Ûäm·ñ¶ßÆÛÍüy·ñ¶ßÆß|¼þ6ßìmçñ¾ÿÆÛßÏümçñ÷ŸÆÛmüm¿ñ··ÆûßÍü?ñç·ÇÛ+ û ßÇókÆÛwöïíüm·ñ¾ßÇÛíüm·ñ¶ßÆÛíüm·ñ¶ßÆÛmüy·ñ¶ßÇM¿¶ùmüm·ØÛohßoãm½cm¿¶ùÍü}·Øþϱ¶ßÆÛÿyü7ñ¶ßÆÛmüm·ñü߯徯û}æþ?›øå·ò°½°½üm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñºoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ=›øûoãy¿¶þ>Ûø÷oãm¿Ž[müy·ñ¶ßÆÛmüm·ñ¾ßÇÛ+ ÷ Û4vÛÒ7ûøßo±ç߯Ûmüm·ñ¶ßÆÿ{FÛmëmüo¿ñö߯Ûmüm·ñ¶Úñö߯Ûu£m»ÆÛÍüm·ñ¶ÞѶß#m¾FÛmüm·ñ¾ßÆómü}·ñæßÆÛmü}·ñî߯é¾Fómö6Ûìm·ò±kâ×ñ·÷ÆÛmüoÿñ¶ßÆÛíüm·ñ¶ßÆÛmüo¿ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛíüo?ñ·ŸÆÛ}¶õ¶þ7ûøÛoãyÏÆÛÿÍüm·ñößÇßÒþ6ÛøÛoãm¿¶þ6ßäm½´}÷òã=¿üy÷ñ¶üãm¿vþ>ÛøÛãí¿¶þ6ÛäoÓøÛoãm»ÆÛoü}·8Ûoãm¿¶ïôþ6Û¼yíñ¾ÿÆóßyü}·ñ¶ßÆÛ}?¾6ÛøÛoã}ÿç¹{üm·ØÛÏãm¿¾þ7³øÛïã}éÇŸßo|y·xÛoåov÷ñ·¿ÆÛs·_müm·ñ¶ßÆÛ}ümÿÈ÷oãz]â?g÷ÆÛmüm·ñ¶Üãm¿¶ïùÞ6ÿøÛoãm¿ç_müm½ñ·ŸÆÛ}>þ6ÛøÛ{ãm¾Fóü·¾6Ûìm÷ØÛÏãmï¶þ6ÛøÛoãmùÆÛŸ¶Û¶ü„ÞëùèÛÿ±·ÿ#í¿¾þ6ÛøÛoão»ÆÛyümÓøµ°¬J59›.S<ZÆ…Ã1, :Xb´¶¿ªÖ¿cêq¶Ü‘¶ßÆÛw¶þ6ÿ¼m·ñ¶ßÆßyüm·ñ¶ßÆÛó½þ6ÛøÛ—ñ¶ßÆÛÿoyÓ.™ŠÏ㪞.Wå‚™p(”ä´Â ‚‹Ê£µß°Î;jkN •£o?¶ùmüm÷xÛÛãm¿¶í¶þ6ßämïñ÷Þ±¶ßÆÛ}¶þ6÷øÛoãm»ÆÛw¶þ6ûøÛÏíž ÀÍ&¾<Ä@‡ì,Y¿|ÿQ6ï”à†¨±[ÇEA¨0w\å¶âÆÛm·}ü}·ñ¶ßÆÛmü}·ñ¶ßÆÛs¶çmüm·ñüÿÆÞmüm·±;‚‰Qk.eÁ˜ÃÿÝ÷Z8a.:Hq ßa¬ìEŽB\C§´/–7ÛøÛïXÛÏão;ÆÛw¶í¶ûmò6Ûä}·ñnmüm·ñ¶ÿÆÞ|·þ7óìm·$m·xûoãÙ¹ßð$°PáÀ#°næ `,&½·7³÷•ƒh0¾  ÁÝøÛ{ãmûÆþßtþ6ÞämÓìmÏøÛÎq·õãnŸÆÞmò6ó¼m÷,}ïñì߯ÛmòwšœÁ˜Ÿ/ò…؇¯ºÐ`Hè^Á´ÆÞÿmüm·xþÛãm¹ÆûÜïšÅmÔ|ãntãm¿–Âèasø÷oãm¿¶þ¾›J¾®€†LÁ •–O×T±3@€ÝÅÜe(m¥Ï9ïE¸å—4ÞXzÚ†|P³èà 2ñ©hßúKä °Æ…ýáXTl®ºö&TÍüRð8ÛD3ʽâ e'™ kcÍhŽEaø¥Ñ†w„ãêDÖM€ ;y˜(€³ª3FÏxC>ÐmÿÖp½¡Ÿ‚POlJów¯Œ*ð%V²€àP2Mè 3›ì#sF(ˆáè£gL¥xjÚ,Û}TRõ̃ ¾Ý"€ãvtðLÁ#56~Ä/ q3SLÙÆGM°@r‘+ßõã€?hpÍt2½­æEtÒcßÇEseX.ÕhœDˆ%á3Òë„!óVsŽ9êô£Í¦ÿ‘¹qàA±E±ÁéŸ KsÇõ¹Ç›/ › ŸÇÛmüy·÷— HV Ræ @p*°QåL^‘çQ»¯”Z ¬n4xX0Ühþ7Ÿû¢H3@ÁÓ™h ;ãA·õ/~/YÛ€Äl€øp¸ FÁH‡’ç6çïŠF™¥c¶!ú矎‘•`CUò‚„¿äÓ„%͇7ØjðZÿ›bµlxT²3–  £[¨ÿƬ†jûDH¯ \*.`¡ˆÀàUø¥Í 2/ 9<‹àÃm({eàÁ×Êò¢$ƒz)8Äp`ïE.qÍ=é¢:]œ \'H`hæ:G«š@ë Q¿1Pìm¢†Ç Ãmyi `À_DæÈX–>”¿‚_¹9z)˜¬ì†‘ÓÁT7o¿]_ØF€yD›® s&,൑FpÃÁ_Ó9îლ%±â¯cõ–4„¶7áoÝï9ÂW-<á1ûÔ±ö¦ûÏ„À'Úû|"©üXfmänƒùUAB¡¨a÷#÷î- 8}‘…O]ä“qšsÞ“ÙèwwrEæ’§óg LO÷$bqÞÆš:§ÁT"„ s‘þZ"]ë:R¨\ ŒÁ½ùi”x)¹‚Q8„²c H 60îfÅJÁ‘*Á†ôS™Dgða»×Œe›òvXHø&lFø&±Ì¢4ÀȰP“T ‹Â¿zbqØ0ÚŠ ŽÁ†ïÃÐa±ž;¿w¶Üãm»’±e3PÌz³Í¶êFÛvßî`¤ƒ€f 8KÁ <0cÊß!ä ·}°dàÃq§{J 77ëg¾êpf†Àç8EÁ˜ñ¶ÞÕ0aú1«ÀÅèÆ¬‡ïÀb6 ðàðƒ@|8{^gÛ¹ëllG`‰â«Ç‡âñ Ÿ÷¦C03,Õ'†äklbüœº¡ûm^…²xÛâXJÀƒ*×…¸A š©^.B ñãc–#êÏ!PÓc#ïÎ*/Wå-¦L äù|®˜·‹Àfñ  ¿ºK†ØPî%WáK.x¡Í åÁ†ß({cða·ÊYò± 襱$ è¥é}ꛑàkiL`hæ%#ÀÖÙ u¤ +ê;‘ø0tØ8Æcð`,È8Äu&ã°`ïå/ÎcÐ`ïå/¥W6\»Å¬à¤-'•` ˆ4Z­Ä•acXá‡ïN_ÕªF1êÃæ:*Ž:ÃxÕž2>!³ôfCŠ–î”Ð¥s…¥ÔÙÀK‰@²Å&dàhêœ:Ô‹’Å~>X0‘)o¸LH& Wéö?• ˆ€kE‰Þ”Dñ`3mq³å¸Ôh:yr뺶NÁ¼Þï#ÔT€I5Bgä8†¸Ó3 mþä8DÉì’%cHë?¤*.ý¢7Èqp0vc±ð0važ¦dJØJuÊfú°dO > 7ÑKN ˆÏàÁÝ­6ê³¹ 1Y‡‚0važŽ%Ì"0ó@XÃŒe:ƒ ¨£A†ïc°a³øônf9Ûn=cm·ÉqÝ>d¾ýѶßÇÛlÑK˜4ƒ€^ ¢—phTy[’öC×ÊÁ’ƒ ÆžA’ƒ#öþÜ"`Ì ÎÐ82 |8~6Ûú¸0õj5lKGì›íÀI h‡{€“Á 0tîÐå#hÖÊ`°a½t°mã_óüçÉþÍàwšJ〪K°QñK”8ØPïœP•ÕFÆ~dKœNöäÁ´nÿrð_Š\Ò ¼Pæ!WáOL ‹Å÷“¶?|¡íÁ†ß(¼•‰ À_E-‰ À_E/ÝíúxJG«š`ëH1 ®iƒ¬ Q™Ñ߃LƒŒ~?›Ý—ÇàÁÛe/‚?Û) ó — 0ÝÉ s€ÃwqÛó)ò3 Íƒa3 Ø8ÂlÅ•cbÂ]8µ.È~Æ Ê¨zØ™ˆƒKLþ&b$]<@2PIä(Þ ³+6BãùÞTFØ2¤`çùx‡[!`—æeàÊߨû·8Ûâ>ø)Ä,| ðS¿0ˇ@Ãcƒ£1™¶œš4®ŠzpdZ(a  ÑOÆÿþÎä @eÌy€ÈÝ_¸•´Œ6Àtç3)ñ%dÔQÇë«¢ž!ƒj(éA‘è§wmüm·ä­Ï9íNÆßܶûï}³E.àØ42eÁ˜l +ù ŸóÚ×UÁ’~Š10dì)‡ØªØÿú-² À>p7ÜŽ@LXþwÏ÷ÃÓ¶ % ²e‡í©ÿ> ^Úpl øP·™Uð0zðö~©ÔÁ›œV}‘/UHÙÿŠÛÄW½ˆä%v` ˜¨?g"ñÓB©[NÝh¨ŸåŒT ]êzæl!ü´¼Ï!ûÂ08~)sH ‹ ÇK'ÁM‰J£'x~ 6ùCÜ+ŠXÒ‡Õ|¬Gú)å@ê¢Äõúä:®OtýÀ‘[«ša¶Ž.ʵ¶`¦ZaD :4;Y3b†°Õ ´Q»*Ãð`ïå/|¼o´WOjæØ4ÁNÁ¼ /#|{X3`øp çpfÁðà†!–VlNØ{޶øÞLþ&h ™ƒ&ÛQ4~ôÙJ7‚i¤T ”oÕÜm·èï*#x5~^!`—D2BÐ̼û¾Áð?»vG»{5Ëf9Myñb½\ÔÇ@ÃacTHÿU ;Ü‹3y82-0† ÑKV ŠŠ¹bº)n+o;ÊÛàa»±Âà„ŬÇõĹ èØ:ºfø‡AŠžÒƒ#¢“@õ ŸmÞþŠ{m·mÞ<æûyò6ÛøÛoçãplVÇaàé(eÝ©õ›’â¶¢äËãà6ÓÅ£ÑÕTÝ8/ Úq ¤èÏmgé¯ü<~'Œ^Äâ0üë„åÌELH*¦y‚ç>Ù ©~ YD#`A/0Gó Á ‘ÈÿE?FãA’¶Ç?¦uèÏ4—Ÿ èHV'‚Ÿ–;“ÆXÁAO°¼ÇÑ+TPE8•­tேÁp^šd‚Ë8x¿’kdPx||Š`óHö@”×!' Úö5&zu±˜eBAj—y”øg(’¥KÎC¬ê–uòB«û1šY÷ AD¬µS»Ã0(‡c˜~´Â¢îd·#Óû †$ocƒ«iµ­§¯ØÏ‚H.‚MÒ+m@± ¾Ýß° ‡ÓÄá~aaå;cÆêã|¯±¨7ÓòR.t~KÃÿ½º,y¶üm·ñÂÝñ¶÷Æßÿmü6pVܶÀ8CÖ7–œ)’â¼pó*‚ ø$ØQ›VwÙw‘:RÖ„bìWêCÊBÇ…0Ÿ©„ý«j|¿ÍŽKÁÞï ýš/´›ÔøtâN§nΜ bXCú~€‘¹#UçØxìïB×?a¼㙯 “â¼ëƒ>mõìxz€>µÉ¦~´EG‚Š@†ÃpŒƒ•ùW=ò‘_-‡·)¿FÕˆl4B„CAã?0d =–cÃ"¶ê½ºðÜ^—Ué¼÷¾I„A3uŸw; àxË™ê𯟛Ó+ú­S€P¢Ÿ3õAá [`GcðKFr‚_*g¦; ÝWì!ûïSž]ãb°È$‚e˜fs€A³—ØðÁÿë{kÃjµu;\-¦Á 0ÝÍŽäáó0Rp¸{ŒúfûØ2°a°˜¿Òû!Ü"HƒÜ?áÅ®Ap¾Õð‡ Û§Û`Éÿd> "ðù½ê˪Wú•ÛËèÁ´ ¾Õüתî<©DÓÒ‰¿s¹ ¾ 7×óåŽÀð?‘Á~lxv‡z«HÂHèûbæxû@ð_<'ñ{_´ûÒ[=TÆS‘Í2%±áÞT#ÜÈiòú¯ûÒ|븠~ÖŽ6  g&WØqH¯X37ØXöσÁTJ2Uì} ¹H”æ¢~S þ¬z”ªý‚+Ž%mz#wmFSãt5І[Ü "HïûÈ`ßݧ{h¾í¯êÇÛ}¶þVé Ôøûoãm¿¶þ>Ûì|~üäKJÛixµ  gÈÞ¨ßä#JeM(¶Ÿf:ȶڌ¾ßþB΄¡í«ãï>FûÃBäò€e´;m„/0 6á ±÷Ù ƒÀÿ“¤ë¶ _Ò»@ÕX–Û(^p®æ™íSÈé·ñöÚ´5æ]ÄOÊrBìù Åí 0„ðöò þKdæ[t†µæ¶?Wô/4WQ½ŸrKÂǹÃtïb‰w¸ýRÇìohV-ü„köuµßŽz‘·±–7Ûù™ýòîB@ e¥Ðá9JU²B1íÕßž’êþÝžÆßšdƒ7ƒ ÊÛò'õ'!ú¿’€¥lœi¹%h(YÒƒ"K?Bù÷„svéŸò7,z~Ò¤ÁF‡m´…òk’ ¼má PP·HGä3ð>Í!=©Yú:ù™a-Ç·¾6Ûkyüm·ò཰½üm·ñ¶÷ÆÛó¶þ6Ûøßoãm¿æþ7›øÛãm¿æþ6Ûøóo‘ößÇ»müm·ñùoãm¿Ž{mü}·ñ¾ßÇ›s¶þ6Û¼m·ñöõãÙ¹ÆÛÿï|o·ñ¶ßÇÛmüu³øþoãÍ¿Ómò7›ìy·ñ·ŸËA{a{f¶ô6×¶ûíüm·ñ¶ßÆÛmüm·xûnñ¶Úñ¶ßÆÛ|¶þ6ÛøÛoãm¿¶ïmÞ6ÛøÛoãm¿¶þ6ÛøÛnq¶ßÆÛw¶ïÍÞ6ÛøÛoã}ï6þ6ÛøÛoãm¿¶þ6ÛøÛoãm¾FÛmö7›ìm·òçæ÷ñ¾ßÇûmüm·ñ¾ÿÇÛmüm·ñ¶ßÇ›müm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¾ßÆÛmüm·ñ¶ßÆÛmüy·ñ¶ßÆÛÍüm·ñ¼ßÇ›ßmüm·ñýŸÆÛmüm·ñ¶ßÆÛ|¶ûmö?»ä}·ØÛnñ¾ßÆÛ–çmüm·ñ¾÷Çßó¶ïmímò6ÛøÛo‘¶ßÆÛw¶þ6Û¼m·ñ¶ßÆóíÞ7›œm¿ñößÇ›mÞ6ÛøÛoãm¿¶þ6ÛøÛoã}¿6þ<Ûøó{ãÍ¿¶þ7›øÛoãm¿¶þ6ÛäFû·#m¿w¯~¾6Ûœm·ñ¶ßÆÛmü}·ñ¶ÜãÝï¶ûÏò6ÛøÛoãm»ÆÛtþ<Þøßïãm¿æþ>ó¼o7ñ÷ŸÆÛmüoKøÛoãmï¶þ7›øÛÏãy¿¼þ6ÛøÛoã{?¶þ6ÛøÛ{ãÏ?÷¹¼þZ%‚ïñÛoãm¿¶þ7›øûÞñ¶ßÆÛmü{çÈÛ§ñ¶ßÆÛmò6ÛøÛoãm¿¶þ<óøóoão?6þ7Ý|m·ñ¶ßÆÛmüyçñü߯Ûßmüm·ñ¼ßÆÛßmüm·ñ¶ßÆÛmüm½ñæßÆÛo|y·ñ¶ßÊÂïŒ?¶þ6ÛøÛoão{ÆÛßmüm·ñ·ßÆÛ|¶þ6ÛøÛoãmï·þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿ç¾>ÛøÛoãm¿æþ6ÛøÛoão?¼þ6óøÛ{ãm¿¶þ6ÛøÛÏãÏ?·¾6ÛøÛ{ãoo¶þ6åümçò÷KsøûÏão¿æþ>óøÛoãmÿ¶þ6óøÛï±·/ãoÿ¶þ6ÛøÛ{ãm¿¶ùoüm·ñ¶÷Æßmüm·ñ¶ßÆÛmümçñ¶ßÆó{|o7ñ¶÷ÆÛmümçñ·?ãÏ?¶þ<ÛøÛsñ¼ßÆÛÍüm·ØÛoånryüm·ñî߯Ûßmüm·ñ¶ÿÆßmümçØÛïãm¿¶þ6ÛøÛoãm¾FÛÍü}·ñæßÆÞÿmüm·ñ¶ßÆÛmüm·ñ¶ßÆÞmüm·ñ¶ßÆÛo|ogñ¼ßÆÛyüm·ñæßÆÛßmümçñ·Ÿco?¦lNèƒÂÀ*ÿ™p>oþ´èƒÂÀ*ÿ™p>oþ¿K|ð …€T+ÿ2à|ßýX< à ¨oþ¿Klð …€\+ÿ2à|ßýX< à ¸oþ¿O|A…€\+ÿ2à|ßýx<  ‚ ¸oþ¿Kl0C…€\+ÿ2à|ßýX< `† ¸oþ¿Kl0C…€\+ÿ2à|ßýX< `† ¸oþ¿Kl0C…€\+ÿ2à|ßýX< `† ¸oþ¿Kl0C…€\+ÿ2à|ßýX< `† ¸oþ¿KlA…€\+ÿ2à|ßýX<  ‚ ¸oþ¸ð …€\+ÿ2à|ßý~œØ< à ¸oþ¬Ð …€T+ÿ2à|ßý~–Ø<   ¨oþì°…€T+ÿT€ù¿ûý-°xÀ<Px¯ýRæÿïà`;ðxXAâ¿õH›ÿ¿imƒÀÀràð° ƒÅê7ÿ|È…€T+ÿT€ù¿ûý-°x@è<, ñ_ú¤Íÿ݃ÀÀrAá`ŠÿÕ >oþÿ.[müm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßcm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶P}<ÿÿÿÿÿüe /€RæÀ<þÐ n¦7ma[;œ0·8ÇàÖÀ):æw¿ñû‡úïg{ÙÞöw½¼ï[Žgs™Üëy®ÖyæÔÜá—ñ$3•àÿx¸|»\>ÏÃ㞇À,~ö° ks|?ÿµãìðü>ÏÃìðü>Çìðü>ÏÃìnÚáöøð‚$¼Iµ@?wû[™Üæw9¾õ79MÎSs”Üå79MÎcwÛÜÞï³¹Ìîrþ>:Öä-ÑØÇ‰`øùÐ` µ@¡îw[wënSs”Üå79Îgs™Üæw9Îgs›Ü¦ç3ϼµ7;µ¹½ËqßoŽÚã°³õGü æ·[ÝÕÜï[r›œ‹sœÏ·õgs™Üïìîs;œÎç)ÃîSs»\rÜw±ãþÂ3ð` S×ÃíîÖܧÃè·Cñþ®ç3í½Cmúçøc>ßÔ1·Ÿ¯Ç;µÇ)Ãðú›¡þ·±Ãúœ?…Ýæžà €/×u7;õw81¶ß¯¹ßÿ†3íýC÷ž«îwýmÌn‘2{À)P`¡ž¾çxc>ÛÔ1¶ß†6Ûõ÷;ÿþƒ œõ gÛz¯¹ÞÍgõõxèìZ3lÎØp0P °Ê†zûá¶ü1¶ß†6Ûõ÷;ÿÿWsƒöÞ«îw¯ÇGuxèì3zöAgÞ»›Ýíîÿ†1ŸíT6Û¯ÃmÝMÎcwú»œ϶õ ïG¾ïõù«ÇGaªØ¥®† &gáŒÏÿöûµºGþÿÿ &ö߀ÆÛ{ðÆÛ~ƽCmû¿µ¹]Î gÛz©¹Ý~:;krÇCl}N:úwû[€ƒm¹½½ÝMÎ mÓŸÖܦç)¹Ênr›œß+áˆ4}ÛU÷9­Á†4noU79MÎSs¾Öæw81ŸmëÙÜ€, à@&𠯹Þ϶×ÀÜ{E¹ÎGÞõ1Õw81£n9CmÌ1¶ß†6Ûº›Ws—Üæ·3¹Ìîpc6õ m·ênr›œÇìîr›ú¼ttoƒ*À€dJ¡ý»{«nSs”Üæw;¦ÑÜ8Jâ‡&j(±*ø3ƒõ´¯PݬpþžÇ«¹Á¶ü1¶ÝÃmû;œÎçZÜÞîÎç3¹Áˆ4mÎ(cm¿GÇ9ÃÀÇFØ”­^B8)´ xà°C:yÉÁÑ£°Æ}·ö¸æ7 º ` tr±,ÿµøøý]Î gÛk€ÆÛuÿŒØ¡Õ%/óÕ‰ Í# Õ˜kHÉ´ÐÍœs„¡(U„PƒѶªmïÃm¶Îçín A£nj¡ŒhÛÕ}Î ¦Dß) ¾÷…ÿÿPbê:F¬ð¡œ·„@¦‰Ï Cþ*!öƒá@¬†ûœlîsµ¸}Žã~iøòòð|?þx½Â.çðó—Üè›sÔþ÷±þžÃ*/4yp3Á€+àÆ›é¡–!(|#+ôj*Uî<¾\+oÊ~ßÛ¡ŒhþÔm¹Ë`/ú»œƵU÷9$—×߀,GÐ2 F‹>Å€ ˆõBX ¢ x8U `Íxˆ„`|ˆËÁ€(q¹ðÆ}·[p“~8øe7â&Ì=/~o{ÃÆÚã6€,Kô:«·‡Ü3hÀCùòcμÉž}ÎõM œÖ) W ó5ƒi²Ž—0+&:3µm«<=lñxˆ¨›Ù¿r È)ðàÎ.® « 3ÀŒXC6ÂÃ= êE|!HЗðÌgž Që÷àkà†L ÐÍ6¾|võj€#@!FŽ…÷€@Í£!”ù< g&×Ô: òùðcâv©áéÇÆ­~£ÆG€uP27«pS5>èéÃïáö{ϵý×)¯‰Òƒ*Ë¿'„bcã4¥ÿN(xBTª¨‡ÿ•[ÆcQKÕÿ GÀñ˜ú¤š:iùï¦xŒCÎp…7sn$/Q»ÞaK`ø_üª?ª¼Ã"÷€Pæò>ôéPü Ü. ÐcOM¨> ‡÷ÚtÀ–]ð|(Äfa˜ßÿpñúñ¢â"çLáà ÎPͯRb`` ùç6® Í—€Hi mÂ| iÁJ‡ð ðù‡‹À(^A6æ/~3›°FpeQà#‘!Îb)uã3j„Q£‚0ŠŒ2† dÆ µTÛP`IÀ6 ”3P `IƒQx ‘{ov<(ñ,~•ÀÒ¢ Èð8ª¼ ‹ µPf>qòòà`4 ð ç?îEtÜÓÞc¸q58~Î †ycÏé•g“hH$†ùƒRàS@bp!†ÎÎÛœì4qÈa<ƒÊ€¨gÁšòWùÃ#OX)áõØu@¥ Ê€Ú1rEr° ødØ+K’ƒ âxýÞ¬ª‚,~ Ȇ Œ<„ šû—T¾§%tªè0÷…"GÏiç€PQ3|<ç½7yx0*õ=õ'nÇOÎàT¬ºBrà†ãM~òïš#šqáQ°,<‘Wøÿß莄bå'!ñ: P –a| ¥l|B>V Ø|…‚"V[°Ê²p v:=÷Ÿñ•o x’>7?x3°®H1ÿ—¸~}ãò÷c6á9wŒŠGÞ7 øp Á)ú;ldfÐ’ @¥Pd%ƒâ@¨ð` ð3N¾ ‡åÀ̃Wã‡åÀÌÐdÿ ÞÛÞÏ p/è £/¢X0)<”ðrC. S—)àd]¶á£VçUs€ù†G‚ŒWBwK†,!âòà`È ƒ4áòqX>,á> aM/S’+ˆ„§\ñ+sœ Vœ¡¡ ø¸ ‘}t\r¡˜ <¨ÿu@¥/# pÁ¸Žæ«ð0T¿ˆˆ°*€Î …“/ø>ÿaWv¿ê€ÙÀ)P0Š4 ¼3}†‡Æ| PÌÁ6 ðp¶< ÃúþÿÊhS€<ÖAÆ(~þû%:ÁcEá˜R‚@dD·ø>þ  ñø3ìà𤙴Fp@ð>$  A3bÝïâNá@?Ä€±åšoDX AE‡ÿÜ3…ÿµÅÂCcðxý^+{o~ð§ CÄ€>2âX>$úÕqà ñ VõÊ >âVÄ>yyp0Œ …š˜d<ÀøS•ëÏ…Øñ!pb(²G(4𫪠É sܤ>­èZ| F?Á˜ ð«¡ 'ø2!“‚›0C~€øðžÁàÿñÉ€X€YášJAšTC ƒo ¼B<: gàÀõbX>ÿ4~‡ÿØ0fàÃc©aLÈê‚¡$Kd(f¹rQpüKA€¨g0Íê ×À¨^ƒ5ôàÇ‚ž¨ǧ Ýè kr f(J ¦˜ø¼ÿu@]ð|?þËŒŸ…€EP>?ÿc6Áž\®ŽôuÀ,|?j$qx0f7á{ׄ@ÇšÕ iƒBþbr÷ka”[øÿûñÚ#ƒO FnT"ƒ @x?üAò`T¬^|,¸dècèh)¢ ‡Øt2~šÀ6‘8–bÆ13ðØXð ¸Å@“DðoBa÷›@0û‡D Ç@Q`À«àÆþ¨E QI€Èd³” À¤÷ËÁ„tBÕMƒj•ƒàÁ˜Sõ’;´(.¢òèØd >ÿj¨19|ï9_Áðÿ÷ ¬^d€ŸàÎÿÈ(¡ì4¤ÒÎWJ…3ÅÐç•U'‡…À>.Š0*‡‹à3ã (5ÀÿÄàøòÐÈá¦`Žc|fg`âòüÅÉNwŽ<3_ø‡ÿÝ$$r6‚„pa¤P v^ŒUWãÆm`0Ž||„TàÁš¯Ž — ¡ÙçË/°šùè0؈dÈ<é#ØÚ†:‰ÿ@¤Ç€#èUaËËÕéw uB¡«ËüÐŒÐwq9ñœ?‹§4“ÎÓ¸î<1‘(:O~†aM†LGGô¡Ûÿ &p)óËψŠí1à£a!ˆà|ò™y€h\ 3¸8qÿ¾#BZ¿´ @©áãá“PàaÄCf%*€uëz<3 fåt†¡à :áøEñz°Rƒãÿ÷ßfÔhC(m9» Ç Ÿ=‘IQ¯Ä³cµ"Yáüè0fò`§¨>þêŒøIÃÿßÎ…æ 0‰ñÿû`’„CàxàVŒÀ[= `ð½ƒÁÀjØ8Æ›À´Oûí %`‹Æœ<)£„xHÁñÿ÷r¡ûbP>?þï|±ð1ÿ0ðQA <'þ ÃCÐþð|˜T»ÀÏ 2ˆî•·:ƒàæAMà ` qp11À§ŠH kþ4åA”2›¡ƒ¡°A‘{Â’UÕB(f¨µàø0Ã!^G´¨EþðX¼œ}±©àίƒÀ,h蜾5ØxÇ ´2\B„›ƒ2àg./«APp¼è½ã<àøóž lÜM¶yž]}ïŒ=Z 6lËÆ]ESGG|­ê‡»´Éñ9DÑ”$|Ñäè¸vá"í¢±öüŸÀÞ>QU½!‘Àc’—¨¢ñ^÷º?€Éí‚Hƒ(ð Ð1ê øgÍćÞ3Bd3áâéb³:|øÎƒ0aí°ù²»î„ø;Uí Çô3££‚<¹ãÿ¼œÚ”FT#Û¬GñLé&E*Vxðg8fdh]øf2~„ÐWçD¢/[cêªù´h@ÎgÎ?ÿa ¼°§ÿíª€Î& ïò Ó°àe­“²AgÛp—ê *JåMkßç8qãÚ?‹Æ4bzDé þH:"MúpÊó†áÑŸ@)•a˜ìvÐ(§\3þ aÞŠÌûíÚå1 ÓÕ¸ZšMpè—ÃÇ…4Ë”´l»ƒßÌ=ƒ5˜Í²ñy-$ñÿ²Á«ÿ“„ŒÑ¥ ÇîÐÎ300?¦þõíù˜< < ÞÎÿäOñà;â·Kúp»&ßÃc6þnžóü¥!ÃÃD̃ œ3&e§va…áÀÉ*p„¹¶ ‹†b’pó€-VQ¯(s†fÕªz•YÓ€øà3Î&l2;âòFf vƒá@ÐÈ2 „dÞ%¨”è¢PöùeΜOkŽÃVå^#lwÔ„½Þ¸2ZØëÆN&Ù“ÙÜ5Ð D®Ç—B1ˆGæþ 4Êñà•¯ÓäÇ!œÌJ2 ¸¸»ÆAñ` iþm* Ú3ú ’P¶ dh^s;œÐ ÁH\Q (£@ø_ý˜‚*¯“©43ÜÄRä@­R­ëÀÿà0€HU s©^á–'+6à ª¢áA÷K#çC)›lðÔe5S-™LdlØ,þŽO…4´ÿ•&ÇÿWå`À cÃ$i;Ç\ŒÚƒƒÊB®—›D>A•´¸FS? ¬Sžze¾òc£°Bp0»{´DíOÞßûð£(ûÀ(½l•À)Áœc»ïž] ó¼ú4™¯)74ý8is_xéÉ<}Û"A’¦O¤u*ôÐ>ÿ0‰:6>:ðÍ4Ô+¬žS|ÿƒ8Í:Õô)ÖN;Ö™%•É $(#éÙ^†![É«<–œàH¾òª<3?„ûÚº®|SMG=E°ä~½*ª œ6›—®>Ëw˜eIs ÇR…5QV8+r¥pdÙ’¿X>w^•¢õ'̆IVHF;éÇ/JzK•ü)’® â ÌÀ(öˆ \ç3íõ×Üç?ÕÜåÅs¿ÿÕw9}ÎðÆ}·¯õ785t°»ð ÿ·Ç @ÅÎ{‚Õ÷;á”h÷Ÿü m¶®W6ÛðÎÛÛ¯€Xÿþ«¹ÁŒhÛÔ1¶ß¯¹Ü1¶ßþ¯€¨øúñð>õê[ \ ããꋜ¾ç-†o/«¹ÁŒhÛU m·ëàÿªîpcm¿_sµ¸àÆ}·¨cm¿×㣺¼ttnÑ(ñ(ñ,ëññõw9}Îý]Î m·Õ÷;ÿú®ç6Ûö÷pÆÛ×㣺¼ttc€2^Âç  _t®V\á(€»œàƽ5·ÿBÜå79MÎSs”ÜêÛ¿ÔÜàÆ5Ùê¾èî¯.‡º9½ÝnP LÇÍt- f¿mµÏç¸7ŸÝ†3Ýùâðcº»€)Œ•ÜàÆ4mÅ m·á¶îÛoÔÜàÆ4mê¦ç)¹Ìnõ781vz³¹ÚÛ–Ü‹“£ºütw[ŽotC|çð?ó}lÔÞàÆ}½ênr›S  µ€Sx5¹&ç81z†6ÛðÆÛ~ƽCmøc6õ m·á÷½MÎSs”Üå781z³¹ÝmÁŒa³Ô3¶æÝúœs›ãµ·5Çbp=ÁžA€,K>!…ϸ2}mép sÙÜ䛜àÆ}·ênpc9ücwks;œÎç3¹ÁŒhÛÕÎ cG¾¡¶ü1¶ß†1£oPÆÛ~­¶ïgs™Üî¶àÆ0Ùê­¶ïgts[ÿá–Áf¯žøa{Ãíúø¿gs™ÜàÆö®ÿ³ÇºÖæw9Îgs™ÜæwG}]Î m·íîýmÌnÞ¦ç&%ƒ`UÓÿr›Þ ÿBð _° ÚÜÖæp ¦pÉÖ7ÿÿìîs;œÞå³Õ°Z)½ýmÌnßÿÿÿÿÿû¶Qô˜ÿÿÿÿÿü/o ã÷ÿÿý¬3þ?—ÿÿÿÿÿáMÀÆ_ÿÿÿÿãø‰8ü¬îpc_:ÿÿÿÿÿñø>,#÷ÿÿÿÿñ·O“ÿÿÿÿøÉ¹á™7ÿÿÿÿÿ¸€ ÿÿÿÿÿèƒ'8 ÀÄ1™mÿÿÿÿÿýF á“‹ÔÜB÷ñ¶üÈä5äÉÞ×yÑ€¢C_ÿøÛ<á­“xÇÃ6é£ßøS@gQ—<n+ÁxSíóògpxøUTeäôÁæoÊž ¿ cfÜ]Œ½ßôQƒ¹Mä•·±¿ÅïÂø’Mèfê…/¦h•H•q~V©ìÓÜ=\2Pgÿ À-- ]ypíÊ"³÷x~F }…F\#r,zð…:÷ÁŽ8z§ç’•xéàÉD€/ÀÆÇÿ>?¡š,3>jêÁœ ±†uhK”äéV¾…ÎÙàc£÷§¼Á‰À,G^Ó¡’œ=çcð`ÌkßCÚ¡Ïñá›ÄZÇá9§‹pgÂð­ô½Îwž~ ƒ2èÒ BN†naÏÜ1ZŠ Âužjîsx¥‹% æär$ΆNPÚ£àÎià'CóbRš kÁš¬<îªÝàÏì'5€µòrw³(é±Tßç+ýÏãÄg)€Í+Ñ{ÁžŒ Á—Í—’s¾¢ •†`Ç8õÖœ…ïö •׫Œ‹ƒ5p <ÞôÓø>ÿfG‡"°g©ª>xÖ‰ƒ €Pû¨_T`†X‰ÏÐ|OþÜ®=3L¹ÅîFzgàÌ€KƒA˜¹­ŠÅkãba›É«2!á› à`ÈKj )ƒÀÌÑBu‡àÿî/WM¨3'Oû9”vªÁñ?ûöýY²/©g@!4±úTà§€T?¾>ªR{±Ç žŠ ÀÇpè¤òŽÂˆØðÉ=OŽPÉ]Yï©%j.;»BuFË gZhÀ/à@$ªDH’é,6äï×n½R¢RbV°>m%Àcž> q2jH‹¾D¿PMÿ¼oEÐ^}NSŸL2[§Ÿ ïÀ|/þà1“ÏB |_þ`>/ÿcÐÅ€U xŸq2§Šò@cÑý …Ó“l2†-[“IRÈét.€c(ÿ¹O£L(> yŽÓB:2‰ÿÚ cùN€@üoHž¬kÕkþÂw‹¸LáhÅÆái¼€ }>°¸sºCÓ¥b4!ª<|ød˜ÙuÓêÁŽkã–[óˆÓ‡Õ)uR}?þçO²pz#ƒ ž€ˆ(8úù§H`d¯ªyyŽS§“p ñÿ¨w$w?‘C% £þc¢è€Àÿüø>ÿa•¿M¤IG4ÿtøú©‡1·m6ª<ÉŠ…ÿÜ€û#UäR1Ãb 0g@ÉXdYP> `ô¶'À)GõgÛÃ0ØÆvsˆ$̆^Ò³€^­RŸ›‡›ð€RŠ3÷xhEÁ ”œz&Í€@£Ä‘ãºBä{Ý%C8:N2ÅiFB+A™1Ê6•>áxüàaÁ–³ï¯L5R¨x ø½Ï>ÒdmW70É07:ßI òüÝ4ÈRÂÿì!À KÓñÏí! SŸöQ@½’TDŸ `Êà[Að÷ !»ÛÊ®â#ºî Þ• cºyìnŠsG—“†VSrJ¤ ÆÞÉð3.VHÚ‰ÐÅ­Ë$4¡ZWpøóÒÁOŽ%(`ìs‚ÇŽóÌS¸|(üøì1½Üýà»Á[ƒ¥ 3ßÿü^îá>á½Ãô{ÜíÙ¸pû˜-¼ÿÿýÂ{»†÷qã5ÃG°Ñç†3™¿q',Gÿÿÿû‡¬ïîîñø18cm¿pPØÉß»ÿÿû‡¸-þûñù;†l@âÿÿÿýÁDàŸ÷âð p1` ßÿÿÿÜÿ¸Ð wÖÀ-Œën©½ÿÿÿ­»ÿÅàÚÀ-¼õ·ÿÿÿû{¶·1»†3í¿ÿÿÿÿõËY ¦\ êï{fÖ倴w)F¬c_ÿÿö1¯ÿÿÿÿÿÿû¶Rq¼ ÿÿÿÿü)†é°g¬ç¾™qnOÿÿÿØßÿá]ßÊ+€Æ¾ú÷9ƒÿÿÿÿÿáBŠz¼I ëÿÿÿÿÿü+D€@.¿ÿÿÿÿÿ—'Ÿ«ÃÿìÉÿÿÿÿÿü+¢Rð|?þþ^‡ÿÙ{â³bêÿÿÿÿÿþà³ôßËÍ€X1ÿÿÿÿÿÿÿ/Ãÿì½X1·ÿÿÿÿøË?—ƒáÿö%êÁ¸S79î@3ÿÿÿÿÿÆð3àÆÀ$2ÿÿÿÿÿð#¢úvÈ,Þ‘nXßÿÿÿÿÿ¶>¿€O}1ª| ¿ÿÿÿÿøX¾ 7»T Á—ÿÿÿÿÿ+›µ5ÿ0³Ž&ÿ¬Ÿª “Þð‚$ )­]Pê®Nÿÿãjü‰Ê/Í;þ%€%ÁŸþOÿ³ðÄ€_‰·žîÑš³œ]ó>™FTìé¼ÜØ!S×®ª ÿqù~Ÿü^bð €_øþ†AU¼òãO<hº‡?üÓ€ÁœN#D Ý@ÎO›ÿ‰’ÃÀÉPøмÅî¡np'Û<ÏÈx1÷¿|f ËØ€Ä"’ø-à E‚G¼!XýS+©Çãóeâ]ÃhÛÜ_Åàþ?¡ÎŽ€ÎwÇÂÀ|ÀØ%1‰@c`%2ghŽ|ndFˆ>3åFD c.Ÿ6/?áŒÛn+˜ü oð”‡8ªgXø„€ « áŒómqª øî&I—š»Í*©à P`Á<8f¬å¤‘Åʉ eM1àÉà#ǰ÷ñ ÷ÄR[ÈãÁNO Õƒ ôrðaX¨2…@Èú4ÐÌŸ££È—ãá›ÓIíWŒ†p C4iTkoü: Ý¢P Ì÷—˜MP2„Ê¿é\ GWT ƒ&ñN{ûÃÐ3ˆÎ šAñ`€ÇC/a“ÅÏYÂð ‘Ž8êˆOO¦˜™øfyešF¸yц* _ùïj‡„õ@1§`|(Áž®¼¼ÃôF:§è gAfñšD¥?3æ^2,ÀøPüãÆ$`Ëi×8BX0eàc>$ ²Œ­ô€!áp«¸j¨x•<,­QŸÃà'YÀÍÂø˜c @‡;ÂáÀø^s¤^èÍô)pþþèïx¥ß0i‹¼øˆj‚]œð‰%í@džŸ¸Í J>€Í—Æ8 0% 0ެ "‹©·*ûcP }ù«ájcUP´Tˆp1§=<2<$êyÙ/Ïp™MN&¨ B<­CÞèƒ9É(—ÓÐ[ú`™µNa…ƒ5ë~Ó•Ú £9€"þð¥í¼2ÔÁž àÎ ­h2 tTy§Ÿü<ð‚£žHÒãŠC4ð y…isªâ¢S42ñ8Í%ÔÚ¥R„€aÀ;°ðQò¼|¨ë§‡NæƒT˜¹"Lß>O¼Á†t݆ÆVM€_ô2pRØ¿í9åêÌyï JœT à|Ï<+»:T ðÌ*Ü2TÀÕÀÄâ;€@àÀMˆØÝ Á”œxZAÀ†:'§[‘Ôµs†xÍ™+¨>$bµt —áÀ5g  „Ö$‰mÀ(¨]÷„2öà2@ ‘ç`¢ƒ‰h(T N?ù@¹Ñô|Œîâðcœ ODá5GÌ—B4cà=¤28y4ƒýh‚'ˆvB0°O@ÌDgz¢ûGL‰Úç†x–%ª;¥X%ŽpÎ¥À̆Ï¿x 0ahf¤ ¤‚í1ë@ãýöˆBºKþ#JÕš¦ÓI‚œ ª cjËöÕdj _¶eÀÏ”ÐRAœ/ø|1†•Gå4`¦ƒá@­[A˜ô RƒAM çè>꜅ÿÙ'ÁŒ˨Ž4€ÆM…¶¹g…6¯× J"cEÒƒp1ø`fßá1ÐÍÕÁGU`Äй‡a>¶@#«‡YîäéH£À`†»„^bÒãd f c÷OîìzXjxÂ\¾Ì†F¼ B&Þl)£ËM{âõTÀõ§>SJ€©0P¨FŽï€Xßþ0?´ûËß†ÂæBw…X#¨œ˜=€ÂᕃBƒÿͨ0É€#ì47Œ jÊÐÕ(:2ÓGN? äPàÊV B3@hôp„]ðcq¸{ÃÃØ"¼Jéœ8‹ÿÜø>ÿby Ùxü¸ kkÛž0ŽŽ j)ø«úà.F% 44£ÂV ‰' G³ÚEå_:\ªqØ8':7ƒ< €X©ÀggOƒáÀ ¢°4úLÒÁŒ+VÁÌ 1³ mKÌz#†a™z°c0œBFª›E/ÿ„z ¥Ø#AN@ÎS@Ðfˆ†‚› %ãïê•jßUVz, GD@Ì)ؘ¸~‡;ÕZ¿™ rCÐcÁv¸›K¾Üï„&Áƒ?2ø ->á‡ðJyÅѸ‘>´ò`®ETœœø10ŒHåÓ¿ C!)P3t+V¨ZÙ0Ûñûp2Δh// Æ?ñÆV@ À(øW„É…DŠ@ØfบïŒ5$àP Ú–ÜØOÿí;àð¦€tå4Û‡ Í<Ë‚ŸÝp17ƒ"H¨È0…8}U3©1ÿHcŽ/ €$[a˜WäàdxD‘'àø_üuü²8\º2U``¤¸Hè”x Í\è Q— ‰…4A-XŽQXôx¤ìsá¡mxÍ_M,«#ü5ì<.×¼g?¾É×%Vô˜2Àcƒ"5ã’*Óºh0Á$ߟšªµc»„oéì—˜iðòC‡GŽŒÔ±ê„¨ qUcJb†B7‡ç†ISkP‚=WњQ)\ãxE%ß9 É|ÿ¸)×øiã¾°Éš OC%³»§ ¢ª°g‰*‹ºæDI¸þaî p˜» ~”Èô™9(SÕÆ«ËåüºóÕšÿ€Ð>GÿrNi(QA¸~°V [aHgÓab‘àè h[7ü`)ßâ@0Š@N¬HÄÿäV¥¨G,* ä"ÓmÁ@c (3 DqââàcrPc´ô÷0Œ ‚O*ïËtM¢Â×Hœ.Ÿ”Ô._ðcB>$8d{ fuŸëã1ãÈ…ÿË«TøS`FD¿ƒw‹‡ðKêaz§ø¿€+AGð^%üΈ¤€u ׊ß[Ž£ïá{›aß’œÊcá”2ðcØÜJâÿùEû¿.c¥ Æ“†«ÜlŒ˜|KŠ* œ(k@Í› `" œ¬2{Á|b >/ÿfTz “°… à ecç3 †‰^ë”ÓéàÇ]ê8)ƒ”€X1ðÈ2HÄøˆóÔòVKÝòÇÄÿ¯«†^¤à2">t2Mž+€øPÀÈèd"?Çž0™U Ž¢ª»GbÅa`1€³ûì`ÄÀäìPÈõ43fPmêC Ó±r¿;ÑàÎrNhÀ:ïƒë=AŽNxޝAA{§œ‘‚ ÁŸžà¥@=JÛñ ñ¯~u¿¼€Äcß Bš{áü¹d€Å/´ØðGD /|Э¼”pÐ]¯†B‰@Ì¥ƒR± E!ÖÈ!UöˆÂšÓ®‚œ2™!p0Ä_ ª¥À¥p ÉÁKž83 yõB§+?¯®<¢@(âvV¨á8ëO ~<G8Èlʰ Ü!¯§Ús0Ø18ŠÛ°Ì„FǃW)Â:_ƒ¡˜÷ÀÇ_õ»:(?øõ`!P oxfû˜Ã££Ü2[ï#z·¡p´Ð 8œ•€AxÄdz<[³Æ$Aèa›Òg¸H…ÿÛxf‹yÀÉ üû ‚ÇŽuÏý“¡’lãéh1ñø1èõGÒ`OŒ•À)Â@á÷]<®Ð ô¤Žà|ÈS¨« ø?ûŽÆÊüe° p…68>œRG’‰èz>¾vbH1”G ò—ob@Ì»ý<j\Ê ÉÆ4蜌 Ì'µê²ñà¦Í`fqÐ\æ1¢/ᬄ^3¨Sî †Fö¹^€L0¨¸ÊІð W’½4qõÛ ý[á÷[,@c¡“¦`ªN§Ç\$†`† l^ç%V½à0½¿¶×¶—$ÜhiŽ¡®=×£LÁ¦¹ :{Ð’qí´êé 0æšAŸ dý<“Ó±ÏÓæeÁ”riდØ39]á’è€Ï>ÊBµA’6¹Á“(Ž:Ó8dËM=œ3z\䬎tuÍ…6÷Çðë‹Ëî€[‡á˜!¶yà¶©SÞ¬ Þÿÿÿ×ßܾ=¯×þ?~*£ÐIYƒ{Øc:Û]rÞÿÿÿ÷ÿüV^¸·rðIÝ ¶ÁQí½ßÿÿ¸¿ÿàB¶iö̽àÊiý½üX/çUÜåð ¯ÿÿÜ_ÿð#æ{ëÏ—x\/{a03umÁŒ`ß]¼¿ÿÿÿÿ¨ŸÀÿÌ•¼¸…ÞÎw¾þôÃÏßÿÿÿÿøf6>ˆ0üOw—½õ·&x÷»¿ÿÿÿÿ Ádå1á–ðgÖÜÈ(¹Þ8@1sÿÿÿÿøX.óž<ëüGêà Â6öÿ†:mû‚ßÿÿÿÿøÄ/Ï{¨nè|*JÃ%3BYES`¾MîëgVþqL3 ÿÿÿÿÿÿÿÿÿÿ¿¶RîØ ÿÿÿÿÿý*‡Ôú 4k ½Ñÿ­€[ÿÿÿÿ…2BÑð” h3.ðà Vç=Ê5ÿû[ÿÿÿÿÃ}U9Jðà ƒÿÿÿÿÿøSw‹?Á‘õA3ÝŸÿÿÿÿþÄ|Pʃ"úen÷_ÿÿÿÿü)Jl.4>s‡àâMµ¿úÛ¿ÿÿÿàE,%€Îýoþ„ w¹Ëÿñû¿ÿü^,Ì.~àeÿÿÿÿÿÀŠnmÍó A˜Ïû¿ÿÿÿÿø[È/ýêÃ0ÏÿÿÿÿÿÂÚ¤ÂHf?»‡ï¹èzÞ¿ÿÿÿÿÂÞà‚còówUéÿÿÿÿÿ…M]ÃÿïÏ`ÏÁðÿùËŤ>ÿøbŒü~¬oÿÿÿþÐÿàÆÃ*^l‡çÿAðÿûËìoþ5C ¢CŽÜ>§XNtÿñ.õ‘âd1AÀc¬'åû[¼)Á|Í€P6¨ûÿþ€_ñ{Åï½>û¯/¾æÓ¦8>ŠÀ)ÇRÐ$´2>ïÅîÿãT¹PõG„ôϦ#Á’  p‹@ûê”…ÎTòAÜÜ÷žè`³otÝ zÝœ) GRl2§ÿý¶ðgú؋߾#²¹Xgøi[À$,ÜçsT9ˆ×ÿÿÂ’Ãßp3À,ð[¢Ó@Îzp¹[§†O»nÖlt0£qø0Á€-Þ¯€Á¾V1!…ÃðÎÇx>äÐÅJ•PÀ€>ëÏ î ×§H†<Už!€ø°¼F„Co¹ÇW8-çÀ/à? À'Œ­ÑéУ´JÄÿ잟—ŒÙ¶€B c£ bwPàö}40éðC¥cÉ¡ž.WM*&ÃÕV~ž{)¡§¾_÷$ÐÁ$8 ŽüÂT¥@1×ÿ"®^6›¿2«á/6 q2#ãã£þPðf0:ã'Á‰Ï2§B  óƒ(ƒ‰¡Còêb¼cAA›Ã'¦„H0CÄOž¡€ÎüvÂÿìúiD µ·UF•8^x*çOW¹Jø˜Ç‹Á#C ðƒ@ǘQ—V?2$‰n Áƒ/Pôëê¦ àg 9¢J±/UaðËú pjÅ’ 4?õç´Ø3Ú|I¡˜ôÀýïÄ<)P bJ°R¥{Ä’þ©Jt©x1°§ðüÐðÈ’`›±SND ÔWGç•àÿà ûÓJ <A€.3¶ÀÌIVu@¼~ƒ=ÑçÔzè?ãð;óàÄŽ´ïV$¿h1%ü×—›Oñp>à謹ƒÓÁžâö¶(4é S’,2$¸åóñèØÀ : uDöž:•Í?ë(ðË–DðÏ0|8è™Ýs›X«æ#‡ê|ñ/6iòacTQ—€ZvPõáŸÑÓÁø3>'»àL@É%‘ƒ~§<…ÙÁ€=áV æRµ*Q¾#<(à¯ÜÝ&PØfàCù¥ AN!ìßEÅÂ4#þNpk FÉè’^oîøg÷^p¦ßóúç×À,Õà g 슼Wó¹ÇPHÒ6éñº, ¾ 8pfíŒÒG‹Àc¼ ÿÃâÚcÂŽ #àRÒ¼º6%¥ ÏPÈÈÎ`Yâaà>'ÿa¬zÝ<ëº Pû¥C$Jð0eó-tÐÍQNi·8‘%/’*R=w#‡v&„ƒ¼~zaOÐ΄®ÿÛ  «Å€gI8P %§„ôè) ¹P)/Ðÿ˜`BŸòP ¬Ü9AHìiÃ*]ÛÃÅÚtÍ[µgjÞ#ÕV+ƒ"j|B“£ÿ³^<)±¦Ü^®ˆ€ð¦Ç—ϨNyGÁð¿õV `J÷ÁGQ O“¬hfõ"QG¯€< ddžKtÈWDK´€$3Á€=»=‡ƒàÿ bÓÚ`(Ð ‚)ßxÓàø Äu¯«# p\îEÒëïÁðàN༪ÃÿåáN×ÿÙ¿w¼4ð§ Ù¡CàÇÿçÐàQÎÊ;F,(ÅŠ_KÎÇ`E _s}® p3½ô˜w¼ú©¹Ã81….Wi‘XüK.P${äåàÆÄs@(g@€ÀP28 u@ÀP2šmÚÔÒ+iåÞd>ytÕ¥ cæøEV•ñУð*Ç=8xSœ•¢ ,¨l3VµgÀ%:Ëþ÷ýá˜1¶{kØGTŸ//ø1ø dσ´`­ÀÎ rD…C£»t2T¢ð•UàÌÎ p¿à`êÁŒ_/ˆîTú"% –†g¾Ë‰ƒ1>³½L8{ °]/ð1@g†ËËŠ1ú£!˜S†C02¬‹¿Èƒ+ãaBφ@¦„J 9á |¯#Ô›W€]`…w…%ÿUó‚R¸ wß6 ð 0Ö¯»IE¿‡ëP|þñ`³ž" %&ÓOÓNxSC !‰`ùü¹ÀÉÁò ¡—ÁŒ?ÿwâ9S@wäÞV`ô/6}I¸Ä€qU ÇN \ÒëDp&-&Wêl˜x:RÿÜd„)¤— WàÌð11÷Ã"ÿ…tœ¼KèfOçi ¼>÷ÃæÿŒS:}À%|wIz`€I;ÔOš¾]Þe4 v;‰œ?<«Ïÿ®ª ƒXÉ0±­Óª©¥Êž$x «Jø¡rŠB¢âaœ¡)WÔýY à„x3Á4ÇŒ<\gß&‰CáÒ”¯?Dcë\ N#a‚QpŽÿ¿oÈC#£t!çœ3à1£ ?ú“0º( ¯Ž!2±u õ¢RcNè>$÷ <¦žcÿaÀ ÎM†X”?4©š2Ї GÜñ‰ËÀcüá£ËÒÂH©Uù®/ Ä+sŠa#Õ 69áGIŸO8x)ÁT!—~øú¿ŒKýÐ ûè)ÙÓáE =O8¹’ôðW@g Âzøà¬Ö=ÁJ÷pb ï² 4ÿè1ÃáNšõO>@C1l PU°~\ hKŸãÄ·åËâ1[›òqà ‚•+D`a Q$dðcÃÜ·Œä“òé!8–];' Á÷ϯA‰kÄÕ†KËŽ——‰_ñß$áOP#ÒllŽzá¯*0à¬}ÀËôX¤ñÓ.º6;Îÿ]x/ 9Qx1¤ŒCªR}hàÍ.RËGÙâô^¬(â«Ñ1ÄàÇ4ÐË`—XÁéë†Iá—Õª9ýTõuY0¤xNû§Äh` ¯;Ó€ÏB£Åç „)=âø h> a$ê°D¨p¸x¬E»À%cBˆù£ h ûÿÀʼó’àÏG {¾<ñå`Ç4{”›>4­S¨dµE2#rÞVãÃè ïª8³Ä6$28}Y€¦”kÎUS‰ƒ ¯WÇUÎqì)°¡óäÀá(ºë¯†3ÝéÍ|Kb°  Î"c `ÎCðñÁšYC3•Êãܾ¤Üóàh×onË, ÍÊf964¼Ø0fü{èa ñØü*D¶?#œ£¯ ^ÊiÕG­1ß•€c—ÁÓx3ÞšXééC<¦‘`Ð ðd'jC"7­Hd¬Ñ5 ƒ'“ LCøyï¢àÌVÄ|è£B°RÄ‘z cbMRP§ké{ ëôÖš±pé—œ|3e¾†< ¼+´¹ï†P2QŽ<ÖH/9ц+m¿ÿÿÿÿÿ€Æm¶X Àƒm³#œ4Æ}¶»a»ÿÿÿÿÿšÂÌ4DÀ@-Xêozûßÿÿÿÿþ`‡‡œ¬AžM½·¿ý¨/¿ÿÿÿÿÆla9ÿÓ`??‹Ðˆ W¹ßs‡î¥-¹àgvÿÿÿøÎÃ8ù{Ï…àg{ØÞïˆ,ó¬{—µ¸X|ðÿÿÿüe€.Ÿ‚ùè ÷<þøa{oÜ'ÖÜÆïÿÿÿÿø¬/~¾¼Àa{ÎapømÎh»ÛÞÜ>ö¡÷7öÿÿÿÿÿ†'ßÔþâáðÞ8ðõ‡üæºÐû•‚ûáˆ0x÷ÿÿÿÿþ3OÀÁ3ü]žÂ Phv.~ Ç·¡pÈ2«·_ÿÿÿÿÿÿÿÿÿþ¶Skü ÿÿÿÿý(d2|3ÿÿÿÿÿá‰/˜|tgOÿÿÿÿþ2¬ÿ `Ëÿÿã÷ÿþ8`:p;v÷ÿÿÿÿÿàfàgWÿÿÿÿÿŒ¬ŠŒDô€$|koÿkÿÿÿøÇÈ kÀøýÊÿÿÿÿÿã|˜˜ž?ûþζÿÿÿÿÿœ£œxûÁ‰Ãíùþö7ÿÿÿÿü~ñûñ…/‘muÿkÿÿÿþàg ~¨òà ðfç ýˆ!·¿ÿÿÿþãŠÌ¹Àf2,ƒ8Ç]0¦C¿­ÿÿˆ¦78ûžç» ÿõ0 ªØ1»u¿„Ì7Ô[Gá—ÿýà‚ðZä»]“þ¦ç)€S¯¶° opc6ÞŠ¾Nq®ØQ¨/ƒàcZ`œÞ-ÑÏ?ýmPf½œª÷³ÁS¦-/¼^ÿãõ·­À] Οï´%ÑLEÆÃ ƒC1öüM†`ø?û¤³ƒ%G’îyr§û²ø¼ÿ‹Þ6Þ ÛY:vT¬ÿ· Eí¹ßÝø‹K€[{˜ßÖÝÃ`ðYâ¢Á€,V oî\EÎwüQ—PÌÅô÷ñ®ÿˆ0€E-0fAK@ƒ7ÕL{¸Ü)_ñ$Ø3•ƒ`Áœ{Áx·¹°_xÖ“åᜋð|8ÕOÏ@á€QúˆÐÀ0f0Òà r;ß:éÒtíðc Ïé±$ô©ñõFà&“Ž:åìà ©žV£üõA‘p±ùWô2Ó·Áð` ß𠨃ӻî$Óh†_°É*\ç#K9»ƒ`ÇÜ3ÇÁ“Áœ å`(kœšGêÏ:C@2¤ð €5íçXÀ-4¹æ\-¤ãÑ#F>e毃7ìçƒàÿï%øâXC6¬¼ÿ° l÷ÅpÕJñ¡)ÀÄÌÙÄ‹±ÇÀið|Ö£“aIIJþ*)2?Ø c…ì>ÛUíx” dkQ$êÀ/MUkúåÚ÷µðS°3Áð¿ùÂÿìàôrr«ð)©CÏ—²¨8x«oUñxWDR™Õ[œyl“—îWM|¾õfTªù¡Úe'ƘôÀQ¨ ¨ïŽøJ W `¦ù° .Ƴ„p9y€ÎÈr™yBž_)h(À44&ÓXW`tèôÛñ`vWkÐfÀ©åÿ‡±¿‰có „DŠ kÞ¦›ÀعÀÆp/¿e#ÿöò ªÁJ, €bµ€$pC€ø‰‡Òè1ÂàÎC!G~ª¤_¦”óÁ›ð`ÈúèEaŽÃ/—ƒ6S˜t/¢¢ðÌK]4`øpÐÉxÊGoT>ùЧaø0|¯ø3— ƒâ@‹ðf~|Êð” •*Dh£àÌð­Yà<‡8f«4ù™ó!^pd Lby>Z®è1 ­Bð|À(‚é Ü0T¹ËÚÏá@?Ä€$u!”$œ¡ ˆ6Lg–(@Pˆüñà‡Ñ <écµcÜà§€<-'..6wãàcP2ŒI>l˜¹à†l+à( P / Ó‚ÌNǪü8©À`H[‚ΆTÀU@B.±ðÿ!°$ \š€^¨X}%µá¼3 ¨ V€lÚvÑ^[Zôç7¨dêÆõH1µ$v^=;ƒ9Ðó–bƒc8àÿî%ÁÓçÇàø½ pE€tJ2Jžä| œ y%^ª›8Ža#Ð ÿ²yÄ”À…@c±I‡uàøp¸B¼ƒá÷°`·f Îù—BdZ  =£¢¨ b†NQÐ¥Ä|h18ð~yZKÛžxÐWC|OþGÀ¥!Ä*"±|À,3ƒâ@ 0Gž¡“¼ cðÿû 8ôG„ÿÄÿï þÞî…8)mÞ4ŽÊ;w‹Àט8N2]˜‘ÊÂ@øùƒXƒFRd™S†èqøˆ+ ܳ;‘ŽxK.—éãë…GóZhóˆì%cçx'$Pv›Yüñø;^,õ—&ÅUC ˇ/|èÏó ÌÀ`cû;…àº9´ =O‚hä-Î$:`9€)PW< peF@ÌêÀûœÖÍhHð ìÏ žÆ 3MƒT ø_ý†L`À:G¯pƆwá=¦Á€%t_P|?þá”è GžƒXåÀÆ)* s,Ð貎r½\û˜Á¥aKà¿EÅäáE…ÊÝTœ…ú¤¹#ãà14(Ì02=p0g†Â¼ž cA’) „`È÷0¼$ê«1~ƒsÕ#(” ÿCsAŽƒ  E$3Ð|/þüu-¾d3T"Ïœ/¤i.ÇÇùñÓ fáVàcú°|?þA€ 1›ýÌ\Ï¡” Ý'63fò |8Þ<ñêφ3Í¿¹”×¹—‰fí½Ö™Œ:Ûh3ÙIÐÉš8·K¥½ûº6— ’}â÷‹Þ•竨ÛܰZ}tŸrMÎ}WG†Kê—W%Üç!á›ÙÁŸ01KSÔ<õÏŒp*ød¯ÀÆ€"Càjÿÿø·»ÿÿþ)Å@øpæ¨@ ìoÿÿÿÿþðS`‰ï ‰¦0/xc:ÛY†1ƒmÝÿÿÿýß …öCOºðÆ75€Ì ÜÞü1ŒŸÓêïxc6ÕW‚׿ÿÿÿ»áTÀ¾†^ ÁÃÇœÔÞ÷`¼XLÜíýØ3ÿÿÿÞ\FÀ#:d28;Üæ·¼ª AkÞÚ@/û·ÿÿÿºÖ݌ؔð3ŸÐ|?þþ|÷ÿ»]¿ÿÿû­lö2°¿A¸ù÷{—ënýÛÿÿû{»šçã”)õÀø?ûc½î†£omîý­áŒûoÃmÿÿÿÿýþ°2ñ°:÷ÿÿÿÿÿÿÿÿÿÿ¿¶Sé ÿÿÿÿÿünÃJ¼hÿÿÿÿÿÿŽØ°Ò°Ïÿÿÿÿܧü{ÐÏÿÿÿøc2Û×Ü¿ãÔÿøc5û×ÿÿÿÿôØüýmìoÿÿÿÿÿäÇÿAðÿùÃí¿oÿÿÿÿøã}3ÿ­¿ÿÿÿþ/ÿÿÿÿÿ³mP[ÿÿÿÿÿà2ȶ˜^ãßÿÿÿÿ¸à5`½°ß¿ÿÿÿÿïŸàeÁÉÈü~àÆeï'ÿÿÿÿÿ/J /¥—Oîoýl3[ÿÿÿø¼¼ää~×ìQõ9áÛ—‹C'ÿÿõšU\µÿÿú¶xð^_z·ÿÿõ¬GÃ?ý˜'wýn ¶@|•©½÷†oÿœÿµ`OVç€Y?þºž=ÇTy̵C7¯—ÕhzŸ8÷¥‘ÕGŽ-A“»tô­xèduvŽšaÔº…@«NÆÛÞ­ÓÌIõw†ha·Î&\<3 Ô9÷0îVºŽ/¼õ+†A›ÓpÌ3:~*§=€Iðf»Ãî¤Ã0Ìó4ðÏlDLÎlç¤ÏÀÈðûrð‡†u82¯³š¼qêÉ€Jåg›Î.Ýáç5îV9Y†Nn'‹Ã0Æ6ûª¯gÀ%éyýào§Ö(dÇ2¸úe ³à{®מæC(ç°ê¶¯`§4?PoZÃ6Qg¯k·¦ôÚûë±À§‹Ý½,Gª ‰ÜaÄ8GËÎ+¢ãǪáF÷ðcÁ™áN“;ŽR:wÎ}Oî Í/ò¾a;ûÏU~ˆŽS<àmPRÁÿÆÁL A(:™ ÑØÁÿÆÁK˜è 4;2]"‰àMÖZí4ʃ€$KUÏx•'Ÿ„*}{ÈAQðÈüOëƒ2G¤wLJi‰žR€MàfÔ¿ f?~å‹Þ5·*q+¸,Õ ÉÑ»—CeÐZ¡’ÔûLžº`Ï|J‚Ž€S݇R^ôq{æ×q+[ð6Á¼ÿ «°øÆ €x?øØ ]‡€È¼Pêg¤B¨>N¬>(° +°g½7FW‘ØË•Œ3ø>'ÿ`a Å]²Âø KZ¡ö 4ž¬׺"ï?\x]ƒ¼…xs‰ a\`*qý6,îÚ-7'» CÜå,œ¹€ZÒ&xe%l:ð»öªÖç·‡B£ç^IWK«y÷š´}ËÀÏ– pU’÷†dçEÀ¹ö&}¸&NÔùßzüŽ$ÞàÊ!À$àé±p8|S ÷a±qh1±O÷Ûoø q cºà|(Û¨föÎNAc‡=fÍ"H»ïÐÉP èãÜ>€"Õ9ô—÷ãÏ¢H»AŽCÐõ<:¯ t{PBbà`øA¼çuHFĨ4¬ ÞÁ`(~½ÍKÀÃGÑWë zŽx¹â gþò1U'CãÜ™Ï8køågÅÓ…ç¶ê4z´ÿǰ6å,éÕŠi §*tYÜ݃\Ý{Öpc£dÜä4ÝŽ¾Ógm@Ø02]_ãíµ÷º¡@@dô_ÌCðø¾†mon•9‹uômŸ?»m'óâ¼3&ié÷´jtñÖ3ªêœãÊû•Â÷î;´æœ–ôɰcªžÈuA€!÷>ôØ}6Õ+›Ýզ޶§¶Nv=×j¹Ü¯¼ÔÜæZùÿŸmN;ö' g[r>÷—ÿÿñû‡îø½ÿþ(>ëïÿÿÿÿüPkËßÿÿÿÿÿì@ ?Ãɶ¿ÿÿÿÿ…wøf¤Ú Ê_ñ{¿ÿÿÿ÷_ÿÿÿÿÿk ÿÿÿÿÿýŒ?ÿÿÿÿü1­þÿÿÿÿÿýÕÀ„ð8ÿÿÿÿÿÿÿÿÿÿû¶Tf<ÿÿÿÿÿÿÿÿÿÿÿã÷ÿÿÿÿÿøü3ÿÿÿÿÿð é¿–ÿÿÿÿÿÿ ¹ýoÿÿÿÿÿð¸0)^Iÿÿÿÿÿâ€E?_ÿÿÿÿÿâp‰x—€Z·ÿÿÿÿÿø ¼/U…ì·ëßÿÿÿÿÿ×?þnÓpÆa·ÏÿÿÿÿýÿƒÿÁ†_ÿÿÿÿü1¨Ûñp0ïÿÿÿÿÿ îp½ÿÿÿÿÃÁ¿—ÿÿú'žy<¿ÿõºå(Ò»sÿâÁ—þŠñþ¡§mâÿÿÕiXe]m…;ÿ €@3ƒ/ö3t³>z=©žK½ÿ c\þ¿ cfÚ¯ú­+1÷=® ÷CÁ¶«þ*ÞaŒóÝu«ÑíÈ2nG+1B“3ƒ¯²?^å›<Û"ã,¢ ƒ&dvªÑÀc­È˜ˆýG\ŽNqæ7Ø`d}„A“ÉŠ{㪀c 1‚JsgkH3RG62‘‘ß ”j˜<ë]‘À v…õÑØ0yî5dúÉ«É[ÿA…•XX†u؃ ÈK?†t3 ®ìoa³ŠádòG ¯<ò® LL¼"¼ýx_Ÿà UÀÃôÒùð jFP“p1—;Jq„ޱFG_¼ãÏÖw"Ïœ ›µ@ºg£˜b>/–˜] ›Ï³¢ž=® UQp3ƒ¿ôÜ j°=i«1_WJU‹*¶ðÎ7Uo ¤p¤*·C:¬^JLè—½Ž{¤ÚOjGßKž{ÏUAJi}ï c}åbôàÉV¦£Â¼ Ÿø1be˜¸×s'œÚ:?ö¤T\ãá•{†U|}ž Ñ ­ÐÕ@4üx´¸eX8†zàR\\h¸Á¼ù{¶†gÝ¥à{à~«Oûëïz&¾÷†v!eÈ2¶ëÅC5oK0ÉÊX#U“òš_?_jäêÀÝpf7ªóð’Âý^x•Õ˜»š^A+¼Ø›• È2wm·ÞÀÊ Ñ  x4q,$oŽfàvòÀh ¬^ ŒƒÐqÅ4^7ÅÁÀ«ø¤\Xmˆwá'žÔ“a”ûI6ˆ¼áŒïا*ƒxŽWfúLñt3 ×àÆŒ(Qþá@yÚ^'­PóYæì3^°Ö˜Y…9¸¼×€ar°cgþîžn3íÀˆ5ážðjÕdà1‚GöcDQâ»MSÇÌ;KE\;ˆññ¼UÇŸE ŸOë–‘æ``óñê~ÖàÆ}îºÒá×ßhÉ–O>4ÄyæËž«‘6>,ï»OŠ™{q“>ó^Œ½3GN¸ë²VŸão%àSÏrÐ?±ƒ&§ðÌ1£l±j<¶Ðƒ4jçM3>+fJ œèd†ˆñ×a­õøôÁ‰ÇîÜçßh¡’ÎåÓqÌ~÷ÜèdÞ;+ЂÃ:iëowk8Þ[“‘Pft2Ú–E_yÐc.Ù2‘áÑçÝÄëógžËo¤o­½õsÓ¼~ñøeßk2ûëµ½œûßîw·:ï»»[N6¯v ÛhW¹Ü5ÛrM @${¿ÿÿÿÿÿþÊò÷מÿÿÿÿÿñ¿ðg«Vn9­ßÿÿÿÿýذÆwï0ÆÛÿÿÿÿÿÿÿÿ cWÞ¿ÿÿýO aŒÓzOÿÿÿÿþÈ‘3ÃsûáŒ`ÛÿÿÿÿÿÃÆîž­»·»ÿ cFö¿ÿÿþ¿ÿÿÿÿþãÿÿÿÿÿÿÿÿÿÿÿß¶TãXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøJmÛ/äÿÿÿÿþ8ÏÿÿÿÿÿøÝ@ ñÿÿÿÿÿÿ„«›êõÿÿÿÿÿñ`¥ÿã÷ÿÿÿö/ÿ»ÿÿÿÿ¹ÿÿÿÿýdßÿÿÿÿÿìoÿÿÿþ/x½ÿüo“;ÿÿÿøýÃ÷ÿÿÿÿúG`7OÿÖßÿÛpÍ|œ¼3ÿÿÕÜ衲àÌ÷ÿÿÚˆ2X÷Ýëÿxgÿÿ[r±¸«À‹ÁŸÿÿÚÏXÏ‹wÜíïÔk ŸIŸ<±Õ«nYϱõÛ«ŽîÝK4y ¸qâ¦7=˜g¹7 Þóï$¹—žRžúÙô=ç”§† g›kÜ}â½Àc”ê¤Ó¬Ø¶®iH1°Ê<™é~üßÀ.—nT÷+x o®ð™Q—i†ž²†Oµ½yƒ>ÒJŒ,ç– .ê}ïB™ðɶ:¯öT³ÇêÛƒ$™ãÇ’4|ðm‰¿­¾?%ã| 83%k$·†wnă4ìÿœ'«¼†§R߀,2•¤ytþÿ†cD~2àÍnà1Ë|ix™Jƒ2uu͹;ÓºôN}U>}|2sP<.œðuR@ ¢÷Ó¯¬Co%­»×Ã0Î’>r Ê'Ã5a›ÀÚ€xþU@øÿý‚T¸p<ÿ* |þú@d^] #àȼ'n_ûëëÀHŸx )±,;l¥æøô ¶¾‰ YÛHœ›_­7ÿÓcW  fN-]³û¾åÜ­é¹E€c6ʫӣç«ÞäÛ@tå©HW€(¯Eî'fÅg[€3‡pÃæ<ŸKÐÈþ ÿ{ /ÏÒ=¬2[}Z „WQЀI›\s{×™ü42CG¸ù3Û4ó‘ÌGž{QÿÆÇzº lÂè€Pd«*ž©øð|_þü eÊÀyÚu}fþN,ÈnîTd]V…x†GN š||lÀ ÷ ùí6*]ãFað€A?þÞæóÛìg›³íPdô݆c÷ÖiÕàlü°3‚H5ƒ `øp ûÁÀ¦G> Éc7(â¼P>'ÿjŒ©0| à“H0’‡ÿ®°a$ÿxæ}T ÉA¶'M±½g{8¾ zj¡õ)·§½ãúÿk?û{»y‹´ÝžÚÞÞúm½ñø´Ô|0»œûF†J½Útcâ<{žý·>)ÏÇU°ÉQ÷ÖÏÛßÿoö2ý¼Öä¿¶H3wi\ó göú¹ßÿÿÿÅïÿÿÿÿÿÿÿÿÿÿÿÿÿÿú»œà` ÿÿÿÿÿY Ï[u½ßÿÿÿÿÝ-­ßÿÿÿÿñû¿ÿÿÿÿÿÃç¿ÿÿÿÿÿõ·ÿÿÿÿû[˜Ýÿÿÿÿÿÿÿÿÿÿ÷¶U`|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©¹ßÿÿÿÿþð1ÿý½ßÿÿÿÿÿowÿÿÿÿÿñÆz¿ÿÿÿÿÿÇïÿÿÿÿÿÿÿÿÿÿ g[zÿ·€@c]ù“ÿÿÿÿÿÿÿÿÿû€þÆïÿÿþ¶ïî_ûÌÿÿÿ÷cwÿo ÿõsî[?ÿÿìnQºeÿìn·¿ÿEdÇÀ*ÄŸÿÿªÚµTòƒ5ðÌ¼Çøc0ÛÖÖÿýkŽwG†{ÿÿñ«ƒ zœ ¾CJ̆6ÞŸÔ°Éì¶Ÿc}kù†œ2ëØgý<Ú¹ÛØ³ý[<ëgwwìÛÜïiÀ)g2³gÛw Û¸x3umÈnqîûáŸnƒ$k¾±ýõiÄ®ëôƒ_ƒWðe+¦ÃEàÇ-ôÜeauÊí•ÜH«©4L¿÷üÍ ÊÍUµ"3ÖzûÃ7¶Ú{ô4޽ Y°ËUN†Jg¡D}Ì!¸JÔ2çÜ5iï<Õ½*ž?†÷‡sëg«äŸ¸3‡Ã—ŠDvãÀ5OChÙ>¶l`3³Áón>}¯M1Ÿ‰š¡›‘z hø10À(2R mtÔ¾=´7 ®s˜Ï ·HÖŽ}Y£âòq/†G«á¦›(dÓ¸-  x18«µçÀc:Û]#Q€y÷fI°Ýy׫d‹@A‚EïrðϯüDwÌ8ùÇÃ È >¾­ÿ ã:&1ÿ@]ÕaÕFSªGéq³ã.øHO9wT©§HbfD`p)Ú˜ø:hQÄ€x?úÚáð0tУy@g*`~ ™Ç€qø8Í‚¹õÇiQ´9êX"$^ŒÀÍoiYÿÆ«p×ø€Yñùç€= À%ÑîyÀËÎ'C™óѼÜìmÊg7f?×Ã0·å^6fðͪwÍÇñŠÐÀ%é sU ×_†jMÒÍQy¨ `úÍûO Ð?Õ›'"Gþ¦ýð|?þÉ•: aøÞðó‰`ý4òxÆaJŸ ÂP$«ÈDî\‰ÿܽ{£VL½†ÊèdÍûÝÆÖç1Nxÿ­†Ma“¦Ûç¡ß)³Í`i°É }×n 1¤TðÈ2¡\ üiÒ[‡˜p i\÷HÂÃ:¬Þ›jö÷»üŸñ§éƒêØfՔêÙy\{^ä44ÙËYÅf{§—  =ý\Ê2{¶Ù£­4kgØ Î¢+ÕŠpótým×:#N;áÛÞÚ§·–õf!÷:Þ|oàÈ2&­Z±cð¿ûs­Œåg&^ÿñc«o¬îjŸ·»ö…sMÃÍ»ýª/s!jTyÚûY×ÿwlhﻆ3ïí^6ÕÎnÆè½ÿÿÿÿÿÜ Ã¼ÜŽpÿÿ¸ÿÿÿÜ ÃmÙÿÿÿÿÿ¸OÿÿÿÿÿÜ'ÿÿÿÿÿÿ vû×ÿÿÿÿÿÙÜïáŒ`÷ÿÿÿÿýßðÆ÷ÿÿÿÿ k7µov¾çÿÿÿÿÿû;ßÿÿÿÿÿÿÿÿÿÿ¶Uݘÿÿÿÿÿý€KC?ÿÿÿÿp±†_†X3ù—ÿÿÿÿýâÿ`"ÿÿÿÿÿÿ‚€{¿ÿÿÿìnÿÇb+ÕxÓƒ¿ÿÿÿðÆo7ª›ý½Ð¼ÇP¦ž÷ÿÿÿÿö޿ð´wø2 ¿ÿÿÿÿüNPcÑQ¯;ÿÿÿÿÿ×Âã^ ¿ÿÿÿÿün `3 d÷ÿÿÿÿün cœÿÿÿÿ¼¿á\€<å`ÿÿÿÿÞ_ñ¸ €AåaŸØÝáŒdÛ‹ÿÿÿÿ‰ãÿ gßkûDܹONŸÿþòH§Ë†Kßø fžå‹ý¦Õü3m'.‹†•—˜ÿÿÆÄpÅNÓ ÿü&¦ý‹õ·WÜLí# È2wõ·EîÿU|¬ß€,^õð þ(ýçû{•Ëi#씹ÑïiÑà ® ÞbµøföE 9V·ÕSŸ{)†gÜŠÊ^>$(d|3n7VXëb†KóÚJ¹ Ã3à1A$õ®Ù(1òç! â÷90¡«¾žp ¡“î“Es °T«pÑøýúyóé’¸•õÜ2TFtJ¯æ´Òº h™ôФî´Ë“W@ÊÈ/rWwÚÞ©C7×D(¹V?>=Îq=Pʸð•#ÇžºƒXiVGÎ=5Ÿ}öÔ2u]^¡ÏQ½|>Îã¢æñ½Ètð­'ÆÊ缄³VðÌ3À…ÊÈÛVGš‹߯’ Üúü1çFh6ˆÔˆxiHùðÑ5x=]#ÿöÀ,)À—Þ’ªq.› 9Õ ÄV¼a¦rüÁæ7Ž8÷½/A¯ w…©cØnøÛxR£ž‹°ÌZ€ ÉŸB+Î ¬ãß^‰ý£²º,ªL¼f½yá“+5F‰ï @1*(Àc5ß'¼/ÐÈ÷^ÉÌ‘ÿ ßz· Ý ÉGïoô5’Z¤|­¾‘þ†¾`yÉ„ÿþÉût…ãyÎ.vƒjGÅN€[ãÁ»±OÎR—O”¸k؇ÿ݆ÞÚŸ§PW†„1„sR>޽£³Éö˜pgGëÉÞ2¬V HAEQdïtkóO*V n>Þ(ÜœõáŒëmm'Ï>¿^w‚öÂýäS!@döžº/· 1pc9è£2zÓàdEc”ÃëÍZ¶ÞÉõe ø3jO^•ÞžªpãíN9ãnoȹX1‚ja¬I>´Ã6椡âäñv,o ‘WŒ“øÎ"¶¼˜™tÃÖDê²sŸ¡—üÕ0ûP8N+ƒÀ‡€KáE“ðex}ÄÏ®ŸÃ!)_ðæ+ ÷ ßÂ.%Fç†o579sÇyÐìéæéé&î:Æ}íÝ ‹'¥b|2ø‰UþŽ8õY½í×ÞÓ"víÍUsOe¤ò¨Çî áŒlÛD]8±…@ªÃJ²RlË™ŽÈ޽Œ±ßã/½má“,N`!Án#Œ0˜^Þö7ö³¾Þ÷îÚ˜d¿{m§]õŠqfÁŽ»B³ßg„畵pÓî»üÀì­ ¾8pdûY†·¹]ГÿÅ6pûëgsª# ÞôíC·ì fßkûy—xc~×î+ï†1¥yUîVp >ë¾ÓœÝ'}÷û«;Ã;¿ aw»ÎÿÕW9À×ÿÿÿö·Â¸pQ×(4àˆ3íµÿÿÿÅï¼^ÿþÖmü2›vîŸÿÿÿÿÿñ¸ž=_ðÆ1Ù¯ÿÿÿÿø#NoE{€' g›sÿÿÿÿÿ à` ×¼ó‚/ÿÿÿÿÿa›€ÃÁýÿÿÿÿý½Ñ8ÐÏá™þÎ÷¿ mçÿÿÿÿÿ\~ úÿÿÿÿÿû€®¶ö7ÿÿÿö·7»ÿÿÿÿÿÿý¶VZ¼ÿÿÿÿÿÿÿÿÿÿÿìgÿÿÿÿÿýx}ù¿ÿÿÿÿÿ 643wÿÿÿÿÿ¯eáŸÀ/ÿÿÿÿü1©ŸÕØÜ Õ`Æþ ÷;ÿÿÿÿÃ{{±8$ƒ?àÏwÿÿÿÿÿ ™•Ø }1ÿÿÿÿÿãpZ¬ÕüÙí]Îÿÿÿÿÿ ŷůcÿÿÿÿÿü\-üZúcÿÿÿÿܿᕋ}úÿÿÿÿûÀÇðÂæ}9?ÿÿÿÿü1;à”ï†3µØßûI9ÊÁ'ÿÿÖܱ0|(Ñ”éÏWâ¿ @ þÆíÔU™p^OÿþÖ 1‚QÏqf<§¿ñ?à ñq¯W g›rkn c&ÜŽßjá{ÿÿö €Çöß")ïüN ÕT>4PÆu·;¤5PÈûœ·+JçH}ŸZn} \ä2½î[·(ò½Â­•í™Ã+”aŠç9ÅtÃÕ¾ª±|y¿ÇízBtñ·¹!INN`¾2?{”lW8PMÇõÁ°cÜgKÿæÁ†ðcúmË+Ú§1ybˆ~$@øŸÿÄq§Ùyñú“wWß¾#‰Ç…¾¾HI¼k¯ðb(@ ¹Î“[Ý5-ÓO:OnIöuéõ&xøù~ø_“ŸÆàŠuVlxn¸ŒéILÿíý+ãÿñ ¿ÀøŸý½‰ð81öß³¬|Tààh4 ² /_–€àU4:.ƒqmèÛAÆѶƒŒ1«È …Äìdï¾…½ãº Üôݽ¼Vúûœ<çÇ:)ù…rPbQBn%FÉÎrí@Ìø¨Ñ×4W;§Ü¯Œ¶çuñô J ¢>ç 812œñûŸÆë*UVl1œîRÃæÚãuð3ýEž2ûÎ"'†`6DyàÍÒ ðcgÔñâ÷-“1ü3ð §=-“!bƒÍ`ăð sã}H´ý`2Wä@\ˆ.žx®3îj :øù¹âµ¯P2 Ã81Œ_jbæ JðAW}0>\;ÞO¶'ºôÌ}¼QeS‘x2b3íÃÿæÞß½ñ]¹Ï·¸O“pÛ¦\úÆÜÞ)k‹‘<AÏ“°bpÌYÏ>8—Þæ·1®mmÏ&ì2qÞÇÓ–·8ÓTL$¶æ‚ȾìX!›Îôí­ÃÏ‹ÞÝ{n7ž|~ám9ö™9L2&ksìaïs˜À%ñ¼ OÚlkŠA…/}ð·Š9lø³¹‹<>Ü­€IÔNê*žÖæ3íPdªn 7ßÅ”ûÃÆßÜ ës÷V·¿}¬ãï¾éÝ!ûß}÷ã÷¡à—>;Hù:9ü™ïns†¾Æõ‰bžÅJþŒ8llú0d ð¿ïƒÅ@*%æÀ&ݲ0xèÁ’ƒÂÿ¾¨”›Ÿþ|( ”ýðx¨D€|ØÝ^Nüø2Px_÷Áâ ó``ð?σ%…ÿ|*‘ 66þJþ|(lxùÐd ð¿ïƒÅ@2#æÀ'Ÿ$`ð?΃%…ÿ|*‘66üè2Px_÷Áâ ó`n4”üè0üýðx¨D`|ØX<ó Ãðx_÷Áâ ó`§ò0xçA‡àð¿ïƒÅ@2#æÀ*ÁàƒÂÿ¾ÈŒ›«ud`ð?΃Ááߊ€dFÍ€UƒÀÿ: ?…ÿ|*‘6VþFüè0üýðx¨D`|ØX<ó Ãðx_÷Áâ ó`äàð?̃Ááߊ€dFÍ€UƒÀÿ2 ?…ÿ|*‘6W_%Àÿ2 ?…ÿl*‘6VüÈ0üý°x¨D`|Ø[ù<ó Ãðx_öÁâ ó``ð?̃ÁáÛŠ€dFÍ€U¹ÈÁà™ƒÂÿ¶ÈŒ›«þd~ þØl­üŒùaøl¬ùaøl¬ùaøþLüø2Px_÷Áâ ó``ð?σ%…ÿ|*‘ 69w‘ƒÀÿ> ”ýðx¨D€|ØØ<óàÉAáߊ€dHÍ€M¿“Àÿ> ”ýðx¨D€|Øp<ô`ÉAáߊ€TJÍ€OLä`ð?у%…ÿ|*Q(66ý2Px_÷Áâ ó`oäÀð?у+…ÿ|*Q 6<ý2°x_÷Áâ ó`sò0xèÁ•ƒÂÿ¾¨››þŒXþ=öøóïãùï¶þ6Þøóoãï¿¶þ=Sþ<Üü{ýñ¼ßÇÛŸg\¹|3<.æ~6ûäoÿñ·ÿÆÛíÎ6ûøÛohÛïãm½c~ŸÆÛrÆûÿò6ÛøÛoãm¿ºmÎ6ÛøÛoãm¿öþ9ôûÏ|mý$gñ÷ßÇ›rþ6ûì7ñ¾çãyÿ½þ>Ûøónq·/ãï¿}¾<Þøûoã~Ç›}¹7 ¹ž_#oycoûÆßßüo·ñ¶ßÆßÿyüwñ¶ßÆÛ¯¿»nµ¶þ6ÛøÛoãm¿¾þ6ÛøÛoãm¿¶ùmííüoçñçßÇ›Òþ6éümïñ¼çãm¿ç¾?¾øÛÏão?ºrþ6ûøÛsñùuñöçã;FÛ+ › ŸÆó«ÇOW#oWcmÿ½þ7ÛøÛ§ñ¶ßÆÛn¾6Ûämêìm·ñ¶ßÆÛÿmüm·ñ¶ß#mׯÛ}½¾6Ûäm·ñ¶ßÆßmüm·ÈÛ§ØÛoãoo½_n~6ßøÛoãnŸÆÜ¿½þ6éümíñ¶ëãyÏÇÛv6éü¬.|.ï_oö?›øþoãíÿ¿¾6ÛøÛïãm¿¶þ=ßøþ‘ö߯Û|m÷ñ·ß#m¿¶þ6ÛøÛãm¾ÆÛo|m·ñ·ßÆÞ}·þ6óÖ?/ü}·ØÛ±¶ßÆÞÿmüm÷ñ¼ÿÆÜï·þ6ÞøÛãmׯÞܹ|.æX\Ìò:mËÏÞ>ßøßoãïþþ7ûøóïã¦ÿcm¾Gûmüm·ñ¾ßÆûmüy÷Øéçñ·ßÆÛ|¶þ6ÛøÛo‘¼ßÇŸ}¼þ9}ò>óøÛ±¿Ÿ#mÿöþ7ŸøÛÏão?¶þ6ÛøüºøûŸñ¹Ïãm¿ï¾<ôüpÛû£gfyíüo·7Û¼·ñ¶ßÆûíü}·ñüßÇM½£m½c}¿¶þ7Ûøûoãm¿¶þ6ÛøÛoãm¾ÆÛmò6Ûäo·ØÛoãm¿¶ûÍü}·ñýŸÆó§þ79ü7ñÓoã–ßÇößmü7ñ¶ßc}¾G³müm·òÉŒÌ9Ƥ¿ñößÇÞÿoümçñ¶ßÇM¿öþ>ÛøÛoãm¿¶þ7Müm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÇÛÍü}·ñ¼ßÆóíü7ñæßÇM¿Ž{Íüm¿ñúoãsŸcm¿öùmü´b9Z9ýÎ6Û²6ÿ–7µ^7Ûøþoãm¿Ž›ÿmò>ÛøÛnq¶ÜãyûÇÛw¶þ6Û^6Û¼m·ñÿ߯ÛmÞ<ûìm·ñùoãm¿¶ùmö6ÛøÝ7ñì߯ûÏüo½ñ¶ÿÆÜ¿>þ6öøûoãÙ¿¶ùÍüy·Øé·ñËoåÆ;0þ6þøûoãý¿¾çz¯íüo÷ñï߯ÿmüo¿8÷oãm¿¶þ6Ûøþûão9Æý6ãm¿¶çmüm·ñ¶ßÆû}üm·Øó—ñ¶ßÇÛýüm·ñ¼çãm¿¶þ>ûøÛoãšïã–߯ûÿn~6õ|iäo7ñ¶ßÆßsvþ7]Î<ûø÷oãïùÆßßÏümÓøÛϱ¿Oã}ë#Í»ÆÛs·ç|gxóïã}éÇ»ßÞ<÷øßoãyïüþ>óøÞoãï>G?¹s¶ûï|m»²6ôüm·ØÛÏãß¿÷¾?|oíñËó8ÞúñÿŸÇ›{FÝ?è¿¶çmÞ6ß¼mïñ¶ßÆÞoümçñ·òÈ÷ïãm»Ç¿ÿ~~7Ûœo·ñ¶ßÆÛmÞ6Û¼m¹øÛïãmïìþ6ßøÛûão¿¹}vþ6éÎ6Üüm·xÜ·,}¿ñ·õ‘¿ŸcÍ¿»ßz~6ÛøÛ~ñ¾÷ÇŸŸºßyúæg¨YÇ[Sq·ßÇÛsº«ÆÛ}üm·8Ûoão;ÆÛ~–çl/†š[ÿð0èr›dÆf\©‘¹› ̓$k[€Á`sÐlÑöꃢ[ &ZÈÛîñ¶ßÆÛmümÿxÛoãm¹ÆÛ{üm·ñ¶ßÆÛÿ{ümÓøÛ—ñ¶ÝãmׯÛs'td@ €…¢H^Ð,²â`´Tq¦SÂ3  `A„¬Æ·Z »¸{—is* ­9müm·Èç÷ñ¿ŸÇ›wöþ7-ö6ßœm·dmïè¬Ë`7©ž>Û2GŸÒÇû}üm¶Üy÷ñö߯ÛÿmümçöH #¶ÆBhŒ ÁóX bÀÊàÿåhf"hb©e‚à‚ ?.ÆÇZe™, x8[†”%ø¡>à-ÖL!ƒVØjgö=]Émüm÷ñ¶ßÇÛmüm·xÛnqö߯Ûmüm·ñö߯ÛmÇóÿy¯mün[”¼ÑY  …Àâæ› ÌäÀøû‘BC@Â|£ …HU>cmiн£c,`ã3 ‚CþƒŒ†JDAðÿïÅØÞn¤m÷ñ·œãm¿·Û·»mò?/^7ûøûoå`˜»ÇM¾ÆÞÿoüo:²>æ§o|oýxößãÿyÆÛÿ| <ü¦3È‚ì þVÆsÈ‚éÛ ø(Aàà Ø_ ÖAÆKB8<ý-ƒŒ¼#ƒÁÿÒØ8Ë^6÷¼mêøÿÞqÏûãmׯÞß}ümê¼míñ·[ãm¹ÆÛ|½W¹ý¶þ=›øÛoã}ëÞL ˜ÀÂ0<¡s`;Àqž #ÁÀ::ÎÚ±±–ÛÌffàÀt è8Ï® AÀ§Ðq—ñ½·ÆÛó·¬í»íÎ7-ò6Û¼yï,o7ÈÛoå`ضãm¹#ý»hÆ$ÍI™ßƇ -àdƒ<^L)ÚÀ[‚Ô &h;b†Á‚P$@: G@”DE `É ¦ÝP VJ9à ¡' ôÂó¶þèȘ‘‘ø%L%ù†Ah @„ÒdØ>Ä ð0-ê€Hðo2>+ Û˜A´!cc¦õ@%3D°oü8O¸ s[Hÿ+@ã-€dAwHÿ.Œ¶ƒ  íf@75±óy€´e¿bâðRÛ¶U ’M a>‚P)pFL9R!‰š 3Z ð0/€ÓàÂR|¤Çm†˜C”àp¼¸pP&/ÀH€¡¥:Ñ•  ieMª ïúrZl49ЀaÓ)ñHX„aK&X\>`¹¬À²­ ^ %3) (ü|Øù°˜€Ã8 ,àÀtbe-áȆ80.8bw°Å@%e–ØkYmA€¼$“—‚P€JV ðU‡M&̶ €ü!'`†øé‘Ö¨2‹,4ÉPX4ÃZÞ†D1Ãð%5X­½˜¿l¶ 08 ŒÔ€Ž„fP91ËA€<_¢!’ àPô„|Ð0%$ ‡ÀÄÛÚí‚~†Lism Âël͈†âH0é3cc©S,40ap§Z0Gc­.3x´×z %áyp—•á‚ \ vpÀ*ÁH‰˜M›¦ÏbÔÀÃäãœÝ0L…À¦c´™0-!¦W†Þ‚CN-Š“‚‘‘ú}Ü0ô|? „Xa½‡©“ÑžÔl‚öš2Ãljƒ*¶$&g ?ƒà ÂíÝäYŠw@@t‚| róeS@œ¼ˆ2 ™>4¥AVà<à ` ÈùÅaÆ%CÔãæSh X9ƒ `1æÔ?î(oLcΜ³èk "…@ÞVu,\>tà”Y83 ÚÀHˆ˜LƂ͓'Åa™”Q³-kEFT0ü›wL²LXÛíøÛoå ìÆÛvÆÛ; KlþÐHþþŒ’L |þþŒôÀXÇÎÅàt ¦ÁÆ'ðp*›ÚT‚<ý-ƒŒ¼ÁàÿélgÙ—õ´€0ývŠL G@ÁÓ@ã àÿ×L RaŽƒ¦Æ>|-Áààd42ø’ʰqˆÒ—ààU²™0:Z°a;ûÀÊàÿéhe¦™ qŽ ¨þ–ÆZ`p)š¹È[ÜÌÖWBÍŽØL #¡Ø0–\ÐØÍí…©‡Z)”‚H”H aø%ü”#ñóIñ@X+Œ•û00ìÚÒ–ðÀr€€£¬¦ÐRˆÀª/3ñ¾4w±`<àøù—¼¸>þlþ~(>}ƒ„?%LÏÚ uæ#Ý¿%À@æ‡ÿ™<˜>þÂùø¤ù0p)Œ¶ü˜8Z1:-x%ncµð´ À6hÿstÁ „\ rüÀ[‚è“`Ñ <0|Öp³æ-rÌ™N;L˜nd`þ賦¹f tØ%‘kZ ûBÉËš¡¼82b­ÖŒ µ‰ÚÜ3­ƒ¼»Sná•Ææˆ0Ž ƶ΃c>šÉ ð-›Ía¥´—2 3†CÀ(‡ãŒ&s2˜ eÍî‘ù>'hrcâö…hØ-–´oL‡`¥L>ÕVÀa| _MŠŒ‰Á–µ °Ùx0Ž˜pTd9‚”tvÙ˜cHÚ bÐ`…€ø_÷Ö@ø÷á|E´ ˆÄf€±˜ì@ ;Àx(ŲÈ%°aØ<á{dç-UP%?‰A˜¼ I» ZÌ7A.™L@ A†ÆxŠeƒÐdFXŠg«mò6Ûùx Ìëc¬Üãmº³æ mƒ[[àÃàx?öðe¦àÃàx?÷Úi€±žx©°q€ø8L††~\Áàÿédgp‚ÿK ã/‘ý¹vø(àÿÙT3#à`é qŒ x?öUŒ±ð0tÐ8Á²vÄx8UƒŒ6$ƒÁÀ2¬br°:Z°ÔË`t µa©—Û`Éàÿéh5 p8ÌŒpdÀðô´ƒ 8ÍŒJO5º8ktÌÐm@é°qŒ“v ºÓ:Óxtd~Ë –Au±Û`ã+.b…‡-‚ÔR 9s8L±À-âÔ àRü°`FI Á`,Ì[dlB$!Ã`@ Ë„!“6Ø0.ÌÂr¤æT2–V˜0$¶{2Ï `øp ¾ 0|8ÖÇÛzÆû÷%Àð;ƒáÿç¸<àøû»™GôüX8Z0Ø<ñààUh8Æc`ø0K5&Ê…ÌÁx ‡)ðȧ1Fƒ€¸ ¨al2ŽÆ †ðtÁ•Cˆ<òb>à0†˜ ”ìà0ä½H0$†PIÅ©AQðNÃ`\ÈK`(å¼i³#0ô´ …ÌX\ÊXlsl‚t Äö8[ ¦¾\Ó#¤àã—´¡;x rA›Ç€%?ƒÛ ã(`ä³Aôs¦$ņVÐ.NÎ2ÑX%‚€‚€d.Q€dlŒØ3ðp øa‹œL¢p, &ya°0›2`bƒÓ¶ §ZR cÁZ¨ ?ƒÿ}°a=É ˆ-‚ÖÛûJ€`8‡ÿŸ¬ €øù¼%þØ1- ,c+N‡`ðpè8Ãd8ÏAàà!lc¶ „g0Ѷڣ>H†ƒà@Úh^Q†^ s-ÀٔÐdFX-x0 ƒ Œ½£mý#¦Ýåà7p¿N6ó–6Ûn –Þ‚OÛHþû@ã<¸l &`ÊàÿãÀq–\ »;a  ¦ÁÆ4„0p*™ùxƒÿ•qŸÀ4þVAÆ_co¾'Áý–ÆXø:T0Áý–ÆXø 01Lõæ;™>ÆX0-ì:N P¯/ààU«üƒV¬gÞø2 x?úZiÀ¦hcƒ*ƒÿ¥ qž>˜.–~°)Aààø8ÇPƒÁÀ:üª0p*ÕƒŒ¶ÁàÿélgòN‡æXäJlp#´˜´À[Æ( <ûm¦)00$43<þ)@7@)AàോLvXµc8I¬/¶Á'ÌJÁà sžÁà s—ÉçŒ?@À£ÀNd}·s^oA#Édp|?ýó€ÜuÌ£þüX8Z1ø<ñ`àU ©Œ—Ö˜-g¡q)P`QáÀ&¤ƒÀ@Þ‡›à_F£@`PƒÁÿÓ¦5„ýýüu¥ð® µº9Àqž VÀßSŒ§„­ˆÍŒ> àà ½¼/-!þƒ‹›H ðñ¶3C°p)›ÀÚÿ(_h%¢à[7 “9™y€dlŒÈ3Ë@ã €`í€q™ð8^ùÛN Ü~0_òÐ2]R$· ·|x?úE®XÛï[À•€0ÿ6 Xƒ°a;É[@‘[Æ7Ý zû`ã°d ã* ðp…ÿAƒŒË ‚S©ë;€`Pr H€7 ˜žX%¶1…ä¶ : õ ü1Òþ<Ûò\Ó3í1{éïK~ïl€x?ùBæ\ —&ÇöŠL(›Sf‚Û“¶ÁÀªdc¦_ƒ”ÍàrbÙpƒÁÿÊØ8Ï ?¡ûz qï¡·›½°PÁÿ¶Ð8ÏLÐ8Á aÐør$æ‚Ý6š& –Û£ÁÀªO Ä†xÜ€¥dp#61òð>Z°q– ªKÛÓºcT -Œñöƒ‹˜2 -Œ¬š šò·À4HÉdíK‚ÿ3.xÿK ã8˜2TÀhvØ8ÈÞñ[lַæ5±ÆM€`LA€0 ™Ó˜Ìægk%lp€nƒizÓ!tÊ–ƒW¡¨0O=9[ Âz2ÐÅLð`IÆ@BsFÆ$Ÿà`PƒáÀ'BðaØø ŽŒ´§<_ƒ„û€· ²JûÐHxa¨S¹†,*xðñp0([˜Ð$+™G|ø½ ™°xãÓ€³1µ¶b*BêfÅXàS §€>bÓ%ƒ„ýða¯3@À¡ƒÿ|j˜%ÆÛw'mPÜÃ醿82à`€þŒl #ÁÀFaÐKÂôØì:øh pRƒÁÿƱ$ 6h9Až ðò€L1¥c?‚Õè$C=´ÀÁÛã,Àª`a¦FÀ0šš¨Ó¶;©°qŽÇààS60Ý\x?úE¯ƒ'*…üRF÷ßl°0 áÿçð ¨|²¼‡Ø‰m¼ $ƒÁÀBØ8ÇÐK@~ƶ:Ðq„Û ¶±… %œ9@Hs+¬ HI¬S  0B ká’+{áP[Ê/‚Vƒixå8Yè%,m˲6Ûœ&eÛ¶>÷–=O|9³Nƒ©›3†G@ÂPìALaPâ #„Íãfñê@±.o±˜K–Á‡àÙ…ísH0‹Àã)”€€¬Þ8 È)“‚€|ÈÜĶxÉÁhU0Be>æ‡Aà`KL Aó”Ë0JH €¦)…¢Æ± »öìÇ`Àtv8( i;xÃÙâ %‚)ÙÖ°ÏÂ3­©3ërƒ,há¼Ð[‚ìA.à Ð`„@Öæ¿€€Y&ÜNÒ“{  Ã°f-á€`'`¨, )ØÄåAx(ËÁ’™ Ní¡òvô Ƨo˜Q00è|Ö‚@¥0B`¸e !!`˜Ã&Ö×JTÆ "J–u ´j ¡ ¡ñv•€Î£°U—éŸîí,v áø´2lFN —5 ¶0Øáœ2Á„ Ci¶1­3Å "²‚„ì¶5 [[—l(ƒ|m·pgdtË!['N #fA‡I™ /u…Ͷ60' o2Ë-hYM$Áp¬|˜.¬Â€®AC$ȹC2™Maþˆ £Ð`:;§Ó€d¡ ¦ ·Ñø’œ §Ý¼1´H0%p»³Î0`@˜Æ0˜0(Àª@Á&ó%Öˆ ã ðïèjgƒ è ƒÁÿàã? “u7'í0߯^h …Ò€ÆV àà œƒààhaà—ôØ’3a 0MÀ4þUa©›`àU21@|þ”àã(c—ˆ†]Í ¬à1Pdš¤t9Ð0 ÅM1¦e¨-,â– Ø[ ,Z ?Z÷pÂ>ÐZèvŒé“¶›T˜  %¶Ö5™½)‹p òæpEØ#±¢)ŽS©0E`ª6$¦hå¶)©Ú`Fƒ°dåÉ„SÀƒ zÚœhÏfàÂX2r­aƒ!‰trd6§NÚ}ReNG›}‡ƒYr}LÚ“ml6ƒ$O›˜Æ™ -'iœR`áÛeÚTd%0–6ÆBûÒ˜ˆ(—„¹>I U± —:^À§`«6Ó4 „ÅjùѰ>k@Hôƒ išÍPd<‚3)ÇzTg’ƒ 8)tvÞàZt0) ~ѶÜÔ(Ž€lŒ¶°V€¬ÚÀ!*2 <Yh$„@< #µ¹˜Ù–µ è\. s8 %°½»ÓN€Z™d˘ÀIj „ `|Æ…¡€Gl4Œ‡: ¬ŽÁ.òƒ à¡lvÎàZhv :HnL;X…ŸÀKÀ¡ÄÊ M4#¦ÜR­Mˆ‚Þ Aàÿé Æ |¬5ª Ÿ(ìJ}3˜‘¶ýÊÛh\™ŠÀa¹‰à$µpaÐ<­ŒaÐ0”ª4ÉŒS…º€Bö؃€e°qŠ ðô²2?dq¡òv˜Ð`©{c–÷Ajæ %Ët³³Ðm CPœÇ¿gÄa‚ôÆØ È 7ÛL£4/"@7Ë™Ì=¤ZEÍ ,6"˜H ´ ^]žñ 5ªAh¦ˆéšL oƒ'a¦·0Íæ*Á€¿Á^dø^m;b :gN€öA ±ò|Rdàpر…`$f à 6ÇÛ€%{à &`" aÛ æLˆÒæDSH\åNƈ¦6—±€—Úé™6Ø!—4 cІ ;hD3%Ž X.cpÀ{Ї£¶ÂÐðÀëcý‘[ÈJov<Û²<Ûøð·kÝÎ>ßì}·8÷nñª·œ…˜ËÚ6d^À3#ö,ÐïäDû2ðZ®È3%ìàÜÎÿ(Í’ôíÌ™êLÏ#oÿ¶þ6þøfÃþ7 •ëY °Çé†ÚdY€Ãñø0-N†ÈÁ௃2moÙBe¾Â2–ÆæLyäy¿¬m·ñ¶ÛZA`2šÖÚ¥@L’`%ì¦EÍËðφ’ÛÇú"™8œÇìƒ^ß!Ýe¶ÄS*…ŸÎ=öøßï´T̶›T˜û@ÉKÚÅjƒ,áø!§2r¤Ï#ηüeºÔ¸Ie0ØÈ°ûÒñ€cæ‡ÆS„1‰)ÓÌši²G5üã~wÈÁ I„”ì_4²Asß/h˃ÀÿZ”92:ÿ!–A™¶ cã¶ËÁ/OÆ®ÎñÈÉ¿˜M2Î@½0—° tŒù!,—àŠeè0ü½±Ëß!æ@é{`ÈLœmÐIñòV’e×#¯›XóoXÛoå³Âíñ½Ÿ#ïþÆÛ×·¾6ÛøÛoãïöþ7›øÿã}¿ìþ6Þøõ}Èßïãm¿¶þ6Ûøónq¼Ýãt߯óíüm·ñºoXÝ7´y·xßoãmïvçÍÞ?=üy·ÈþoãÝ¿6ûlþ=›øöÏãy¹Æû|Ž[w÷¾9yü´Gœm·ñém¤o·ØßmxÛoãm¿¶þ6ÛøÛoãû¶þ6ÛøÝ7ÈÛoãm¿¶þ6ÛøÛnqöÝãm¿¶þ6ÛøÛoãm»ÆÛ}¶ùm¯müy¿xûnñ¹mx÷{ãÍ»cm»ÆÛmümïñÎoãm¿¶ïmò7›ìy·´}·òà»°»Þ<åËmò6Ûøõ7ñ¶ßÇÞÿ6þ6Ûøé·xÛnq¶ßcm¾Få¿öþ>ÛøÛoãm¿¶þ<ÛøÛoã}¿¶þ6ÛøÛoãm¿¶þ>Ûøóoãm»Æç?Ëw¶çÍÎ<Þn<ÛøÛoãsŸÆÛíüm·ñ¹oãm¾GY¾Ç ¾Õ&1ŒÎ>íü}·,zžøÞuxûnqýŸÆûßtþ9|m·xÿo‘¶Ý±¾ßÇ›|¾6ûœm·ñ¶Ýãm¿¶þ7›øßoãy¹ÆÛÿmüy·ñ¶Ûq¶ßÆå¿¶þ6ó¼m·ñ¶ßÆûmürÛøó{ãÍ¿ËÍüm·ñ¶ßÇ9¿¶ùÒçqW·_yÞ>Ûœ{÷ñ¶ßÆÛÿmüy·ñ¶ÜãÝëÆÛ®Gó}·¾<Ûøónñ·Oãí¿:ßùüm·ñ¼ßÇÞwæþ>óøÛoãm¿émüo=ñ¶ßÆóyüo7ñçßÆÜ¿¶þ7·øÛÏãm¿·þ<ôüo½Èå·ñ÷ñýÿ#û>ÆÛíü}Í^>ÛøÛzq¶ßǽ>FÛw÷»ÏN>ßämêøÛoãm»Çžmü}ÿñÖÏãÏ¿öþ6ÛøÛoãm¿¶þ<óøþoãoo6þ6Üüo7ñ¶÷ÆÛÒþ6åüm÷ñ¶çãÍï6þ7žøÛÛãÙÿ¹}ˆÜ…ûãzcyûÇó{Þ>ûøÛŸñ¶úñ¶ßÆÞvÆßmëmüm½ñ¶ßÆÛmüm·ñ¶ßÆÞmümºøÞ{ãí¿¶þ6ÛøÞoãm¿¼þ6óøÛÏão?¶þ6óøÛoãm¿¾þ<åümíñ¶ßÆÛßyüm¿ñï;hóoæ`5™`5Þ?Ÿøû{ão¿÷¾=_|}¿ñ·Ýão7ù=¾6ûìm¿ñ¶ßÆÛŸ·þ6Ûämïñ·ßÆÛ{üm¹øÛoãm¿¶þ6ÛøÛoãn_Æó{|o7ñ¶÷ÆómümËøÞãÍ7ñ¼ßÇ›n~7›øÞoãóŸÆÛ|6þ\w ýã{?ìþ:yüm½ñïßÇÞ}Þ7›øþß±¶ßÆó¦þ6Ûäm·ÈÞoãm¿æþ:yüm·ñ÷¿ÆÛmüm·ñ¶ßÆÛ|¶þ6Ûìmçñ¶ß#m¿¶þ6Ûìomñ½ŸÇÞßmümçñ¶ßÇ›o|o7ñ½ŸÇÜ¿¼ùS2Ä@ð01ƒƒÂÀFÿHŒ›ÿmÀÀÊ ”0x¯úD`|ßû~œØ<  ÉAá`#Šÿ¤FÍÿ·ƒÀÀÒ ?…€Œ+þ‘7þß§¶H0ü0x¯úD`|ßûx< ÃðxX Áâ¿éóíúsàð04ƒÁá`'Šÿ¤FÍÿ·ÀÀÒ ?…€œ+þ‘7þߥæH0üpx¯úD`|ßûhaø<,àñ_ôˆÀù¿öý.˜< ÃðxX Áâ¿éóí`ð04ƒÁá`'Šÿ¤FÍÿ·é{ƒÀÀÒ ?…€œ+þ‘7þÜH0üpx¯úD`|ßû~Ÿø<  Ã°xX Áâ¿éóí`ð06ƒÁá`'Šÿ¤FÍÿ·émƒÀÀÚ ;…€œ+þ‘7þÞh0ìpx¯úD`|ßû~Ÿ˜<  Ã°xX Áâ¿éóí`ð06ƒÁá`'Šÿ¤FÍÿ·éíƒÀÀÚ ;…€œ+þ‘7þÖh0ìpx¯úD`|ßû~–ø< àÃÐxX Áâ¿éóí`ð07ƒ `ð°ƒÅÒóíú\°xA‡`ð°ƒÅÒ#æÿÚÁà`oÁá`%Šÿ¤!æÿÛô¶Áà`mƒÂÀNÿHŒ›ÿk¼K…€”+þ„›ÿoitÁà`mƒÂÀNÿHŒ›ÿmÀÀâ %ƒÂÀNÿHŒ›ÿn´¶Áà`qÁá`'Šÿ¤FÍÿµƒÀÀâ %ƒÂÀNÿHŒ›ÿoimƒÀÀâ %ƒÂÀNÿHŒ›ÿkÄK…€œ+þ‘7þÞRÛÄK…€œ+þ‘7þÖˆ0– 8oý¿Nla,px¯úD`|ßûX<  ÂX<,àñ_ôˆÀù¿öý-°xA„°xX Áâ¿éóí`ð08ƒ `ð°ƒÅÒ#æÿÛô¼Áà`qÁá`'Šÿ¤FÍÿµƒÀÀâ %ƒÂÀNÿHŒ›ÿoÒéƒÀÀâ %ƒÂÀNÿHŒ›ÿoÄK…€œ+þ‘7þߥËÄK…€œ+þ‘7þ܈0– 8oý¿Kla,px¯úD`|ßûX<  ÂX<,àñ_ôˆÀù¿öý-°xA„°xX Áâ¿éóí`ð08ƒ `ð°ƒÅÒ#æÿÛô¶Áà`qÁá`'Šÿ¤FÍÿµƒÀÀâ %ƒÂÀNÿHŒ›ÿoimƒÀÀâ %ƒÂÀNÿHŒ›ÿkÄK…€œ+þ‘7þߥ¶ˆ0– 8oý¬a,px¯úD`|ßû~šØÐaØ<,àñ_ôˆÀù¿ö°xA‡`ð°ƒÅÒ#æÿÛôËÀð06ƒÁá`'Šÿ¤FÍÿµƒÀÀÚ ;…€œ+þ‘7þÞÓåƒÀÀÚ ;…€œ+þ‘7þÖh0ìpx¯úD`|ßû~–Ø<  Ã°xX Áâ¿éóí`ð06ƒÁá`'Šÿ¤FÍÿ·éyƒÀÀÚ ;…€œ+þ‘7þÙ´v 8oý¿NÌÐaØ<,àñ_ôˆÀù¿öàxA‡àð°ƒÅÒ#æÿÛôýÁà`iƒÂÀNÿHŒ›ÿn¤~ 8oý¿Nlaø<,àñ_ôˆÀù¿öàxA‡àð°ƒÅÒ#æÿÛô·à`iƒÂÀFÿHŒ›ÿk¤~ oý¿KxPaø<,`ñ_ôˆÀù¿ö°xA‡àð°ƒÅÒ#æÿÛôìÁà`eƒÂÀFÿHŒ›ÿn”~ oý¿KlPaø<,`ñ_ôˆÀù¿ö°xA’ƒÂÀFÿHŒ›ÿoÒó”(<,`ñ_ôˆÀù¿öÈ< `ÉAá`#Šÿ´HÍÿÇérÁà`cJ oþ80d ð°ƒÅÚ$æÿãô¶Áà`cJ oþ80d ð°ƒÅÚ$æÿãÚs`ð0/ƒ%…€Œ+þÑ(7þüø2°xXÁâ¿íóïús`ð0/ƒ+…€Œ+þÑ 7þöø2°xXÁâ¿íóïøÁPÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm½£m¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶ý¶WTüÿÿÿÿÿün.<ÿÿÿÿÿÇõÿþÌ>êÿÿÿÿ×ÿÿÿÿÿøòuÿÿÿÿÿþ?¯ÿÿÿÿÿñø>/ÿÿÿÿÿþ<4Ÿÿÿÿÿÿí½ÿÿÿÿü1¶ÜÃÍÿÿÿÿÿÿâÀÄ3ÿÿÿÿÿðÄSã6_ÿÿÿÿÿëêÞ%ƒ?ÿÿÿÿü1˜Ïë×ËÁž¬ÿþ϶âÿÿÿÿêÁŸU›;ÿ¬ÛØÁŽÿ÷·v÷þ+z l2ÿÑ1Ð ‡´Ò£ßÿû‚v¬3m È+•'&=ÿ‹pËÃÆÜŸo>>®çÿÜ Ý ÁQܱw''ÿÇç°Æm¾¸Ù·†m¶ q´'‹Ã1£gÕ˜¦›§ƒ7Bx{nÀ!VÞu†Ã=fÔ½tóÏë6õÛVqû¶Ð\2]aó‹($ï‘{ÆÓ}z²{Åxf»¡Cª·©a™õ1ំÃ<6Òa¯ øpè>çÅç³Ã/pßxgDG<À…™¾g Ø/ðc™öa!š c"Ò>ì—ƒdÈs<ðÆÓˆ%¯; Ÿv„ù9=1 ç„ ¤ÃÿÕÈ4šHXÏyP>'ÿgÄì*‹OÐÊŒ;ÆC'¼6Û¸ ¨œÀwƒ3‡°Ä0èÄÆãuð3 ƒ5X9ó+Á ÏMÆ-ê!ú}ëa“ßzD#牙gîáCAƒ7†OU†$ÓB¹=ë¡â÷À|/þÙf¬qxfÆ^²”7CTgǃ5˜Õ+6Ûƒx,ML ¨2 dàøùºN‡ÿœ±ö#A<úHç<Û\)P”׃+  ÚˆœOdäôÃÓP   ‘´'üç°¢ˆôœ\¨™ôð m½ k˜` >à¾Y‡Ì:¼u"`ÍÊËdá“¶å\û¶Ò2f™½»>û£CfG+Y–·¦Ød>ƒá@‰À$ÓÛ)ÇÇà(PL _0 Ä‹C?àÉÁðÿïšdþõ>>gÆò¦ °V«ŒƒH!ƒqm'Ïâ8âÔ0ä"óãV†uÏ¡gÕœbã— È2S潡Û wÙh3?r'Û)ÞÈôþm ÎÎ6õrM$¶Ð1×°Ê™îÿÿÿÃ?ÿÀ0óT!î ÿÿÿÿÿÃîgÿÿÿÿÿá‰>L©¿ÿÿÿÿÿ¯«}°Æi½?ÿÿÿÿþ¾¬ôýùÿÿÿÿÿÛè†>Ûïÿÿÿÿÿk<÷{ÿÿÿÿÿúØfûÎÿÿÿÿü1˜mëÿÿÿÿÿÿÿÿÿÿÿÿ¶WÒÿÿÿÿÿÿÿÿÿÿÿãóßÿÿÿÿÿÿÿÿÿÿñÞMÿÿÿÿÿÿÿÿÿÿÿ“ÿÿÿÿÿÿÿÿÿÿ×ðÑïÿÿÿÿÿ_<{ÿÿÿÿÿÆ01Ž<úÿÿÿÿþòüQoÿÿÿÿÿ¸ÿÿÿÿÿû„ÿÿÿÿý’ž ¿ÿÿÿ­žÿñjÿüaÃcž cÚ¯ÿýäÖ ìž»ÿuðÆq·'з½l2c ¿ÿõ·ÅáŸþçë`Þ±º^yóï4ŠðΟe È2íPeÞ›Ã=Õ Zã®îö(ûÕ”†[T=VÏ$£¾?O=n»‡®±á—]0bE Æ-©ôÜÈü2}‡ ¬YêùãÍa–.#êúkÏ cmcÓN¨%O>Öf¶y†Ã Æ ~õÖPÉŠ ß½ãíÿ×ß\¯ç»úLHðcígÛIëoZ'tvðÌ2t­a—WóÃ(êž}÷xü2zØfÝÞ¿Œ60¿ØÏq{ÏZgÛ Ê®çilóèd6Ea³ìMêo šÃ,^O†OZ2Ö›õpÍÿà1¶ÝÀ`Ÿë‚SáŸnź¤ÏBŠpföñÝ5ð r̉7·¼]O¸Ã,^†1ƒmm¼1øg½Þý°ö½i†BðÎöµ=f©ñt>>ƒ>½ö÷€Æ3Ï¡”“ü6ߦ}L3 ÔßóËP1ÁøfÅXêÁŽ=ZÃ-²¿÷Uþ{I†^ê²p`õ¬ÛšÃ'WL]zØe½Ý^Ý%‚á’ÍHû†©ê6të•Õz§ƒ/ý¥sfŽþâý·8åî·;N:îé(3:÷'°á“ï»ÿÿÿÿÿÿÏÿÿÿÿÿøï<ÿÿÿÿÿÜ€»‚ÿÿÿÿÿÿÿÿÿÿÿ÷Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶XO<ÿÿÿÿÿü~{ÿÿÿÿÿД2=ÿÖÝÿÿÿþ?=ÿÿÿÿÿëÿÿÿÿÿþÙOÿÿÿÿøò¿ÿÿÿÿÿÿÿÿÿÿþ7ÏMÝþ?ÿÿÿþ?Ð|?þÿã÷ÿÿÿÿâøïÿÿÿÿÿ¿ÿÿÿÿÿÅþÿÿÿÿÿÿœš†|^ÿÿþÆïø½â÷ü^þ+pÉÿûÉ6†ŽV'Ýÿö÷N^N‡‹ÿoâ÷õ¨3BJ†`ñ1£mWÿþµ’Œ]É‚Èe¹PËÿ_{×Þö÷áŒûzH½âÏØ›íäßÿû4~{ÿuï'“3jGÙf ç¤<ð-žZNY<£O6Ú'GÉëHè£{ÖÏ3OÇ ‘íiJ™8ãRrÈŽZ$d~“=W's2:¨ễ'¥iøö(ï$6A• Û‘ì{“ ßYÏmø3sžÕŠ£ï `‘~z²pû@%Ý >~6™ç±Yñx‹ßkñ0½âi>úàÇN-†IçN¸2_>}íÒ¾½Ÿpû<.Ï þ+Âö}ÂæyŒþ?&Å_œûXf?p½Èðyø½ë竞ݓã {ÞûÊ®+t~á^òt-à/ …YâwǦô™óÀÆäáp¶ãáj|q†G‡Ó‹%'=ñëŸAÃ'Æ -›˜V2kÀ &Ã' ÝÞ…½Ëà )½¼õŒ2Iƒןd§Çsqèýíïc>…ÐaSÑb·Ïƒ Åï‹ÏâæNü|ÁŽðbcëOÁ“váú¿wY)î1çňªÇÀcyÿ‚}¼îÞý­ËJŸWvC£‰ž­דØÇ' ßÑ÷ØðÛöè§±_ ƒÛ6¨.GØßƒâÿö&ଞ8ÜNÏ)7 cFÚ Ã¥†‘3¸¼3cz(ƒ'œ øløš#/½BÝŸx}½ÍIí$ö¿oñ÷ÚÁ‰Ý5pb`ÊÜœ‡¸û¦½=âí㪠Æ\í± c«¸e%¾K#ÀÄør¶ñV‹þõ°bP¾zƒ€ÆÛôά@Äǘ3'f@¨ûâ.óþsØÀ!¯Ý<ôúÔ*SÝŽ7=½ö·>:ëÞêûîÓv÷’­œÂÿí÷Ý7[q= {ÚÞû)½ïÞMH2Æòxdð­#ï'´sÉ€ N:kXd*À!ãlûÛW»nhS€A+ÇÙìoa‘17¾ÞmÎïÞ\wû{Ÿk{šoÞéï´wîI¼2lÑÝÒjÃ'kÇäßÿÿ‹ßßÿÿ°8zûßÿÿÿÿü{“ÅïÿÿÿÅïÿÿö7ÿÿÿÿÿ[wp3cÿÿÿÿÿÿÿÿÿþ?t,dîw÷ŸÿÿÿÿþÞïÿÿÿÿ¡"sµ·ÿÿÿÿû[›ÝkwÿÿÿÙÜïÿÿÿÿÿÿ¿¶XÌXÿÿÿÿÿü÷ÿÿÿÿÿøï} ÿÿÿÿÿü_ÿÿÿÿÿãÿÐcÿÿÿÿþÞÿÿÿÿÿÇŠÿÿÿÿÿø¿ÿÿÿÿþà§áŒËoÿÿÿÿÿ kÿÿÿÿÿüN? ëßÿÿÿÿÿÿ:õ`?¸ÿÿÿÿúçV¬ÚµfÿÿÿÿÿüNÿƒ“ßÿÿÿÿøcW?ñcÿÖjŸFÑÓ ÿÿê´vc¿íïŠò`ËÅï¿ÔC§*Å0á+pcŸÿú+:Lè…*<à|Xÿ†3½qüvÖíðÆ}¶°1Ü}YG†A“’0@zÓ+=¸9/ÿþ‘¢gü˜Zg„øg^Mÿ‹Wu]ßzFŽ>òШãÔ‹á›ÝÝ&{C@í;Øá•¨3c èUÓŽZžêö®yê†ãžÀ{Ü÷i¿Çƒ;; cíӬѓŒ4O·žfNv-]¸=^¼ûÍï ë¶xó¶¼9<2ŠI·Ÿp¶±\ÆyÌÝ}À«X#ŠØ#Û·4Ü ã÷»J§ƒ7ÚW¡ýë+˜mÍÛ–†nãÙ¾•£î?Vt2lS˼|~K>©þî¯~Ûèfû}:<ð{ÛÈn³æýóoY2V{Òé>b¼Kîñ:­AŒz˜u¯¹Ê´|]ÛLóÍ–GέGWD}ÍÓOvÚJxÓ³]~úaÕÚ{Hw“Ó5X+pàf=tÚð½úà‰º]õfI(Ç{ãªÙú÷’“sõóá#A™+Úªåíï óUwª2|™Wœ&ÞUW“W§R°õÿ}Ú^€(„­Tup´ëÆp:žyèžß_AŒF¨ ¸ùèªäï À{Þ.ÏÆXm0IIŸÀd<;¡C*y3Á”ˆëØÜ•?SN>‰3Ï'f”›z(ø1÷ƒ â ÉÏ[‡vÜA’±}Ç] mËßñ?ûÂqÕ½ÎëÁW9_ôÐg1d/*¯ï8\ ž«< âu˜$}﯎a‰ôÛé`®?L3m´LÏ·Až¹€#‰·ufDFö‘Lú¾i nGÃ:Ó'{i·2Ô“Üiuï{Ú6ox¨¿>g”*ƒ$€¥ É!¹ &@gàÀ/Ãÿß0d øú¡ û†‚¬IIk‰ãhM6÷aÒ5æŸ ã—lå>ÃXöè…¶oaßbœÅ°í¾C[ÀÈaœqí¬YIÖZyP÷†Nì&zû-Ò:m‚øûµ¾Ù˜¨s¾>À°ú:9Ó…·{Þ†Ô3_w^QÑÉ|7¯'q^BkÃïB;æ¹é´gÒ´ð zÔqÒucwˆÿÙ œu‘Ü9®ànÓŸh:ð=w[»Ac®-¬ã¥´sî]ÇlÒ° pÏq·¦…=ãʤßü1Œkÿÿÿÿî¸ÿÿÿÿýp„ážͶÿï/ÿÿÿÿ]%`Ïøÿÿÿÿÿûn ÿÿÿÿ gvzÿÇñßÿÿÿÿÿÿÿÿÿÿðÂQôßÿÿÿÿü1)÷ON?ÿÿÿÿûb{ÿÿÿÿÿÿÿÿÿÿþ¶YI|ÿÿÿÿÿýÀ—ÿÿÿÿÿÅG_ÿÿÿÿÿà17fYfÿÿÿÿÿ`p¡™úÿÿÿÿÿÿ ¸[x[I?ÿÿÿÿýp‰x«¿ÿÿÿþð1þ'Õƒ=Yyºÿÿÿÿÿÿ\¬êÀ/ÿÿÿÿÿ×:°g——›áŒÖÏÿÿÿÿÿÆýù° &ÿÿÿÿÿñøÿÿÿÿø¼2ÿÿÿÿÿð¾G¿ÿÿÿÿü.PÈ÷þ³†l;Þ/ÿøc>þUZÝþ/ ø %L÷éÿfÀ"†n“l)Qïÿý ŠSgã¶•ü1Óï°Æk½8c8Þ‘ŽžøÍ€×àºÑxÝÿ†1“mWÿàq»ª 1¿ü1±ds¤hù1+ºñGÅá’+=ÓÞs.½‹'Y÷·žgp1Ç;»›Šš ´ïvÜi¼„ç%Ìnö° s»†1ŽÍU†€'waÞ³gØ£—›X±O×ßx׋n©(^ûl$íÝöäK¨1: c;î’ÈO‰è–“ùïO:8‰ÉÞ®~oµA•݇s{Øfu¼]Ã)ÛwY\Ò¿FäÇà ÍæÐʪÁþO²àM®%ÅÆ•†zIƒ ÉT™v˜ÝSëÞײu&ÕsçÞ7iíz À%¦Õm1†bÁ‰A‰^ H¶/(ΉëÏZl‘^’Äðç]µÿîmC7I…U‰áãëÎà1¾ý1»ÚÝxÕiCÏGÀc~xÓ€$1›m¬ÔÁ…­½÷ãìûÉz]àeéPTøãÎìMÁŒdÞEH̆mC×}¬•œŠæ) š²xû<ÄÞ¶¨2‹Þ(ÞLă,~ N#¤ÄbX¡ñÒw“§“<™øüŸ§¬˜˜™í‰)"§¼LSÇÄÖ‰ÏC¨¼Lö÷¾0­æ)‹xüóZA|~N/=dç†ùàÍÚù)+Ƽ2ð^…Ð ø÷ºò¹âÅJ>ÞèâO{ ŸjŽ2“ëÚÎ?jJ ¾ûyÅ÷9ê…#æ}½Íá“{㌜ø¼÷Ö b#Ï!ôñ^ðÍö¨ú»ƒ&ð [>Öý¼Ÿ†3Íù«@Ƽ uÝö7?}÷Ô(ìÊ»Ï?kz}Ì`Æß½ûrx®N~܉–•2é¹·’Ø1Ô{ÞöóÎÛm†o±¼Wœ ÿï¾ÝÃÞåp÷ýÊûû•˵™}­î}éöÎö°Ë·†v·¯½øcl×bÝÿÿøýßÿŽ2wÿÿÿÿøüïÿÿÿÿÿÖßìnÿÿÿÿüçuw;ÿÿÿðÆ0Ùëÿ[kwÿÿÿÿõ·†5öø½Â÷ÿÿÿøbS£ën­¹ÍîÿÿÿÿowìdÛÿÿÿÿý¼õ­Î?ÿÿÿÿÿÿÿÿÿÿ¿¶ZC¼ÿÿÿÿÿÿÿÿÿÿÿï;À°aÛ?ß½ÿÿÿÿ þtwzÿÿÿÿÿ á”wÿÿÿÿÿ‹À+ÿÿÿÿÿÚ+ÿÿÿÿÿü_+[¿ÿÿÿÿþ/ f›ÿÿÿÿñxb÷ÿÿÿÿÿß»Ãÿ¹?ÿÿÿÿðËݾOÃýÿÿÿÿÿþ'/wÿÿÿÿÿ[rà{Š-»ÿÿÿÿÿ® BQq¦·ÖÝÿÿïj7^t~{ÿ]GÃàcJ•áŒÛùØŒ2j d»^ ÿÿ¡Pü•¬ÿþ7˼kÞ5úoØÍ5.õ÷9iž[wÿþ:Ïÿñýø1¾‡t2÷ÅîÓÅDÓ¼`™§0(ª½ÝßcvàvÓNíÙæð ŒÛÇøfyûÚ\2 qÿþ ow]%_*û \ñ ã>ðÆy¾ªŠ«Ã'µn_´ÈôÚp$}Çá›õ³ñù7 öDäd´;<~±ßvÝ%³¬gj^½Èv`2y^¿þ› f¾ëÜ׋ÔYV0Ì1·ô©ü1†×í2}:>ç:½€Iû–ªæ³ÂŒžkQá{…ï’µ€J|ûVÿâòo{ýËÑêX ˜çuóÿ ëÔ0Lî¿^|JÙóçÖ‚3ÌJ¾½K–fM y!ö²M¼ŸÿÏ~??Äà¤ñúü1›M˜´Ã«¶çTm_ðÍÑ·`ÇÙˆûžûS&j¬7bƒ&·ïu·ûPQï_Þð1‚¶æ2'Ÿøg^Æû[ÒIç¬6æoVèûL@Ä×ìôÙÇw¡öáû•ðéÍ­ÏmÞÖÏÞü^y¬2WqËëÛ{žøœ kþ`àcÛUF»[ïLîuß÷wiïk?ýÅRθ^M[{ªÇ‡YsŽëº±ùµjÍíïíç>Ú»û—Û;ûyÝÕÕßqZwüV×ÞïÿÿÿÿÿïŽðÆu¶¼1ŸÍ¯ÿÿÿÿð¹7ÕÜàÆu¶½ßÿÿÿþÕÍò,†^àcÿÿÿÿü0–{îøc7Û÷ÿÿÿÿðÄo¹Ì1˜}ÉWsƒÎôÿÿÿÿÿÄà°`Os`bCªoÃmßÿÿÿÿý°_,1··ÿÿÿÿÿÇ{«ÿÿÿÿÿüi¿ÿÿÿÖÞÆÿÿÿÿÿÿÿû¶ZÀØÿÿÿÿÿý|@'ÿÿÿÿÿ×Ï€Oÿÿÿÿÿ¯©6?ÿÿÿÿþÛŸÿÿÿÿÿ÷_ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãvègð ÖÌW™ÿÿÿÿÿÆá€_À.;ÿÿÿÿÿà ŒßöáŒÏþa¼ÿÿÿÿÿýÂÎÛ{ÿÿÿü1ŸoÅÿ÷?úÙöT2§¿ÿü~öÊN_ýËÿ¼3Ižmÿþ’ ,ê{äÀcKšs­ ±ûÿñÞðË g6ëïÿZ@½ŸŸÿüj çÄèÂwÿ㈌5ÖÌ, Çž; €J¸²upÏM½4ñÎ+•ĬoU\¬Ã§tЬ3 žõiÃ' tí&zîÒ¹d̺n®i=ÓbnÇ©7_=]n€"öò_< oÝßB’£Çášøf¾êç‘2¨ŸAŒ^®®®¯o½Ñ9ãÁ›M* ÞCòt9€Q5T†qi¿rý}Á”a9áé°aZÙöÖ½t €KÓÓ¶æo‘/Àc$ï¿dËX1÷Iˆ©å©×wcQŒ”ÉâÕöÓ{¶öôûœt™yç@ØG Èž¨ÝüƒáÀèÝé„NChŸ¼ ×]6 ~šGüãçžm¸.€ àÎ=º{hÃ:èA‘õf½{ÓdëÙ9:×\ýõhC7šé€@4•|zŸ]ÅPñçB¬“Ösí¨V°Ìz0Í8®® Ï\€ |Aðà tlA!Ò=ЇÀÍù¾ñ¼kÎ8åŠñõ¨ó±5 Þ»‹-<3v&Øcͱ€[Mƒ9íÒm’·-@Ï|o0eç<€T¼?ƒáÿîÔKAð¿õŽÝGç¼®¯½U„ð½'DÇãõ˜à1‚¶æ2â ° Í6⿺ õwm·´ŒÅêêêûH`ì›Ã'§J/ špÊ鬑ëèð<?ZÃ*©¼ëîÆúÌÞÞ:jÐdæÔþmÊgúÛšÃ-áŸnßY¿=b†lojϽYÏbÝ}Kéã­_ƒ'4ñº±ƒz}ôfÁŽ:ÿÅa§ƒ0Æmç?ÿý‘N†maŸvõ…s¤æ·4ÈwOŸì4ö÷üY_ÿÿÿÿÿÿÿÿÿÿÿwÜ ÜÿÿÿÿÿÿÿÿÿÿnSßÿÿÿÿþ†Wxc6õxcýéÿÿÿÿÿ†5½n†>Û“Þÿÿÿÿuûÿÿÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß¶[=üÿÿÿÿÿýÁÿÿÿÿÿÃmëÿÿÿÿÿá¾åÿÿÿÿÿðÆÞ¿þð1ÿÿÿÿâÃ_ÿÿÿÿÿâ¡0Ëïÿÿÿÿÿñe?Æßÿÿÿÿÿ‹þÿÿÿÿÿÿƒ?ÿÿÿÿøc[÷¯…ðÌŸÿÿÿÿÿÄž›sÿÿÿÿøc6Û×üNSãÓaŸÿÿÿÿÿ®_¿ÿ6/ÿÿÿÿÿ`3øgÿ‰‘œsa“¡ÿÿëg#sÎãpÃ:qݬ2ý$t2ÿνþ/{{ÿÿ÷!»l"Vÿün hf¬Ƀ–Üõ°Éà¿xéw½ê°£àÂaŸ†1“}UŒï c'ô_ñ‰ 2 ƒ"ga˜@5ÿøª m™v˜ì!žU\÷…Ýi½Ñ1½æÉ½Qà÷#l›©¡¹ô2>„†qc„nrèa™ç^º6‘©{‘¹BOÕçñŽiÓ¯"tð <ãÑÖ®SŒ³ ô`º÷‚ÅÄïÖVÕnY@!¼ðÖÏ{Y:a‘ç½- 2-d'€OÝ÷=ä-ÏÇçžOiË\+{Ö²à|OþÙ9ãÊØd,1¨‡” ¢sî&5hùòf¦"u ÕÓ`îÖx^ô¨O<ôl@ç<<þS <€Xrgïk0  $ðÎ9hƒ3Ë92ö¦$ç„<šhó g•†&<>Oy=ãáG•˜ÇÇió§Þ©çüÄy7ŽØ?‹¤<ñìB 1ŒhfeÃÅÎY‘3  p.ƒ4 >A¼ 9F,ˆÎÀ|\ƒ0 ’pàe ̓klfÆ)Ö"\Ñ^ßùÚÎ6æ"cÊÞóbι×Ct¶š>ÄUX1´©“ÓM+×P '²ô2>Ó/|ëÚ‘øü •aÕ+7€Ç] Î8µPë•d¨ýM^CT~`OxRö‚‘-†þ÷“Щӵ¢,<ôÄ0F¨9Wþv8{O $ P1红F@cFÌà 8W°è¿TÃPÆq¶½[9ðÉØÒ>Ç7O=ÕfÁŽ^nÆót6ìó³U–9ÌÙ_6ņMç†àc'(âÜ (8*A” Ø8`ÃVÁ¾Y•!j7vÞx ‚¼¼Ê 1$o¥/¢ða·ÊBX0ßâ•0Ä5P dyíão{MzFçFñ]™rÔqÑã~QàÎÛoÛÜñ¾±°Élë«§u{`ÿ{šQ7Ÿw¹…@,ë﬘0îº7Guyº0Æ0ï":hæ÷9Îêè)÷IÕÓtøÜ{MÃmøc8÷]û†L…¯¼ûì…M(8ÈvïwîV³­î»«¾ê︓Nqßus¹üv§´Û€¯ÿÿÿÿÿVðÆq¶°1æÝÿÿÿÿÿñj†<÷¿ÿÿÿÿÿ Žçnÿÿÿÿÿ÷`î_ÿÿÿÿúâ`¸ÿÿÿÿÿã[Ï3 ¹ÿÿÿÿÿöÂ5ÿÿÿÿÿþÙC?ÿÿÿÿÿk ÿÿÿÿÿÿÿÿÿÿÿï¶[»ÿÿÿÿÿýp[^­ÿÿÿÿÿþ¿÷†ÿÿÿÿþ7ëëÏÿÿÿÿøï¯=ÿÿÿÿÿá}Ç¿ÿÿÿÿü^©ßÿÿÿÿþ/ó¿ÿÿÿÿüXªÿÿÿÿÿâ`ÐÌ¿ÿÿÿÿü1©ûÿÿÿÿÿÿ }÷ÿÿÿÿÿþ|‰ÿÿÿÿÿÿ\ O@ p1ÿÿÿÿÿá”À²hY3c ¿î!´ÞàßÿýdõÊøëœ‡ÿÁLTh'†3µÿÜŸê„wŸ{M׺/ÿýÔzXmˆüïü0Œõ§ÿ®…ŒÃ/o c'¼_ÿ]0ÈUˆ3{ Oëa—æô3ÕÏ|YÃ0cŽvÎ,#2ìö£{M†M†?B `Ç^áb0Í Á™½¡dâ7[‘º6dèaŒaÞUF¡;À%æóqòo`F¹â‚3ždø{gæxÞ @c$ᚬdãÓN±º^ ¤#õ`Œ2UÏé¦Ð€ }>çG†t3ñõ¨2mÀ*²OV¬øf়)Á“Ðcw)C}lãîV,FKxf/~îÚ½V \9ó1‚¡¶æÄÅB¬2 …`LâÃ_Çh†Aš¬wŽ€è¡n†î®]ãlSç½± ÉRGœ-7¶ïvkGÖ u"€I0;1\tkš³‚E§Š¤ö3î C Àø ù`2E€1¶Ü0sU H3 ßOÀÏ â€ˆfñÂA†pT`àU6(|C©°qŽ|(ÿ“Ÿ“ž'I>»ÏyŒ¬ ½ïr¨5sÞ£{8×´†?Ð|(Çï]d+o Ým¨d9sðÈ1ðºè>ÿ`+‚G‰Ä°%ðΆd÷Iyœ¯JÿàÍç€Æ0m¡˜dlÀõy0–OÊaãéñ¨€ÔqâQð> ðÈŸZ…Î*r1C7»\5oWóxbœm˜˜Ì€Oà1ÏÃÑã²èd†vÂ8LƒŒd‡øZ«ðUãÈ%ô¿Éƒ3­6¤Ó ‡`¨ÖM«T mÎÇ¥)·Xo0>Žå[€õX9p>'ÿ$îWuÕSÕh28¶ JÜ 2°OZ ŒDb,ê´údP ÈœOuߌ‘‰ V†Op›sß*wÊAð¿ùzÅ{~š!3Á—œ()ûvòZhé†2ȼípKÿƒ¯†3}åÞT À(\Ñ…ÇŽÄ*mì3 ‡w\ö7†1ƒms=ï½=7œÌ28Ñ¢ÊwÏU7clã+a—Ü qï±?½¬•áb˜Ë· °|_þˆõÜ~ƒ}x,¥S>,îU˜=öíͶ÷¶¦}ün kþÇCz¾â7§W;[Û·ÚÏ¡8fNIŒ3iÁŒ:ÚÞÂOu}í÷؇¡Jëëœ5¦Nè,Or›'}ä¢'wi7»O°çq63œ+„U€_Ã0Èðc2ßçYC'Û8´wö¦uÓoù÷î®VŽ@þÒUÎ{ÍÓì•ú÷v ýÊÞqƒ†~ÁoÃ?½ÇƒÍϸ ÿÿÿÿÿ «™ìËðÆÛsðÆ0ͯÿÿÿÿøcí»†9íßpÿÿÿÿÿ O¹‰_ gsp1ÿÿÿÿÿJ @| »oÿÿÿÿúàŠ{ n!Œçnÿÿÿÿá•sŒimõÀÇÿÿÿÿÿ y½wHc2ÛÿÿÿÿÿýÀ¤1˜ýÿü1mÿÿÿÿýÀ¥À§ÿÿÿÿÿÿÿÿÿÿý¶\8<ÿÿÿÿü{5ãMïz÷½ßã÷·¼cÞ÷¼{ýð©½îxÑþ÷½â÷ w½ã†ûÞ8p½â÷[Þ÷ ð ° ·Œ÷½ïz-ïx…½ïr-ïz-ïz-ïxŽïxÏ·€X½Mïo{„›ÞáF÷ ·¸^á{˜Þëõ7½mìo©½êoz›Þ9_½ïo{ݱØC}êßm·?·ï†aŽ›t°ÇÛ~ûƒ1ãü3 wܺ \玭çC0ÂT-ÞiaöîþͰÆß~Ûm0Çœ¿ }¾Øcm»†7³˜c}¹†6ûðÆÛÓ y·pÇÛm†<ûðÆÛ~ÛÏÃÏøco? o?á·— m·á¶ü1¶ÜÃmÜ1ïß@zxc—Û<¡xû{Ão¶,nàü<罨÷ó{Þþßù•†ûÃæÙG‡|3M üرáo†cðÌ{Œ3øfßuqÎ÷¼1ªûRÃmøóù½ã³é½ï j¾òÃmøcùÿ mùðÇ»~ßúá>ü1¶Úá¶ü^à´®ò÷<._sÇŠïo+¿¼xžöñâûËÇ—Þ^é¶Å†6ûñÒûÛž=Ñãæ÷·¼~ñÒÛ»Þ;}?÷Øço½ØaXÛsž4o¹ï yïãßÛÞ? Ç¿Ã0ƣ͋†cÔa˜ÙþðÌ1î÷†3=,{{ûÇ›ÛÃ0Ƴm‹}?¼yôoxóèÞñçѵî}?>ï k6Ø·>ãÏ£{ÃͶ-ï!r=Ï j¶Ø±ûÇØÞ=ã÷²¼y}ý᎛lXõö7·¼}½ãÓá˜û8få¼ÅþàÇÛzm¼}=ã«{ž;oosÇ¿·¼}½áW›(ðï†c—ûÞ†5+Ë>ÞŽŸÛÞ {øfÕ}ÒÇ›ÛÞ? ǰ¿†cðÌ}½ãíïqxc0ÛbÇŸG÷½ü1®óbÇŸGo;¼xžÊ²¼z»›Çï¼q¹ãíï¼~ðÆÛ~é¶Å†7ŸñäûÇï¼zØÞð }3:ì0ÔmÊû@ÇÛ} mýã÷†5>ì¡ïüt÷¼vÿpfÖ{±c`·™Î€XcWöÅ¿€Xc_>Å {ûÃÍö,}ýãðÌ}ü3o ÇðÍãíï m·ÀÆa¶Å¹ô;Ãmøc0÷bCmøcyþ†7·è÷xf?xô{Çëï vûbÇï¼y}ýãËïï tÛbÇïŸ ÇÍï y¶Å†3]Øóíh÷ñ¼3o7¼1Ûu¨ð°·¼x_ÛÞ? ÃͺŽ_~ÛîQáoO±æöð o°ÇÛ~Ì6ذÆÛ~Ì6رì0Íïàk1(£ $‡±ùk‚Æ^?˜ó‡_sè[ÆÛ<úïsè_ÆÛ>7€Xc0ÛbƒÙøc]¶Åw¼1¬ÛbÇ—ßÞûoí¶,1¶ßÞí¼Å'›Þé¶Å†7³ðÆó~ÛûÃ70̳ÃtÚ6ÛˆÛo®ÇŠ'÷Þï·¨ðÿxcY·ÀÆÛ~ÖmÔ†aŒÃm‹ m·ãÂ~þ†3-¶,xOoFÿÇY‚ ’¦³ÞEÁaÿ€Ø­¦Q{@ZÂÑ8t ŽKÀ`È, –CðóýÂ~xûùáûÇßÞ>o ÖÞHcmµ`Æa·–Ûo¡¶ü1¶ÜÃí¼±å÷÷†5›lXcm¿ y¶¸cm¿_xcÍ¿ tÛbÇ“Æ÷'ï m¶Å†6ÛðÆæ*aŽÛwþ7¼~ðÆ£oQçö†5[z†?›ðÆ£oPÆÛ~ÿo£Â^ÞÃ1á€Xü3Þþm¼~ð6¼÷^&a!ÉküyTßëÁÿxD¼è†#ç… A¾ÙLd —áòEà2L›iá_ø1áøüÚ°g×Þ<º÷7„¼3 m·ãÏáo ÇŸÂÞ7…½ãÍáoxc0Û¥/¿¼z}á6ü1ö߆>Ûñå÷÷Ã0Çók'ï¼}½á¶ü1¶ßŽ›BþàÌ1ÓoPǛڎOãyðÉãËê/î/î/ kvõïï j¼øßïÆÔ÷}ÀbÍÒŒ³™‘ÀoÖÏ Áf8N 3ÖŸø´SÂÀFHó™iòÇŸB^ðÆi¶ÅÞÛoaóx¿€Xc3ŸbGá/°ÆÛ|¿xýãÄ÷÷ ÷÷†5›lXcU·–<¾þðÇÛmO'†céï öņ7Ÿñéãëï™C}øéüo:ðÇOíGÞâ÷·a;'Ì¢ô/°XÏ »Ã+úF‚ϹŠÌöÔ°ÆÛ~Í6òÇŸÂ~·€Xûø¿†cæð ÂþðÌ~ðÆa·–>¾ñïïï_Þ=>ñûǧÞ? Ç·¿†c×Ïï uŸbǧïØÂ^xûž÷í”y¼oxÕ<úuÏ7ÜðÆ¥9Ôpïá›Ç‡{ûﺣ`ÿxf<ß Çá˜c0ÛËß Ç·Ã0Æa·P1÷¿„ôþ?„¼Ã!£#!cf‹ŽÏ¡1{Ǧ›C1çІcÏ¡/xóèKÞÍ6ذÆi·–? ÇßÃ1ûÇ·ÞÌ?©a¶î<_ ÆÛ? ÇÆ÷†5›lXôûÇÛÞ?xc·› cy¿tñýïãFP¿øƒ7y¼{ýãsÞ;:ÜðÆßÞ<ÿxá>÷¼1¬ÛËO Çà=½üÆÞ[ƒýüx?ßÃ1ã 3 f›ycï°ÆÛz†3M¶(~ñì7Þ?{ŸB^=„þðÆi¶Å›Ã1øf=¾ðÇŸÞÛoÆÛÛoÃŒû<¾ï?¼/¹ãÛï}Äóxc¦Û+ÛÃm²††#}C¹÷¿xç{ÞÔ¯µqýüz}áZz¨\ îxü37†cÛá˜ü3ÿ ÊûAøfÍ6é`1·›…°x;ÏàÏ VÜ®…CèLN<àf?xýã÷ÞÍçécÏ »Þ?® ÍçÃ0©ÕeÀÀxèÌÀ øÈ‚#‹OBð5@ ìèùÐðÈ0Z|WAð þ>®ø1è |3 ¼,Aâù¼3†awõ,|xcWöÅ…Óî Ç·Þ? ÃïqÓýÓÂ^dͳ5áŽvӳϼ1¬÷Õ¡¼þöÛß^=½ýãÓßÞ87νñûÆޣíï Ç¿À,1™må¸?ßÀÅ2ÜÏWÀ²€°5šF0ò È_棋Ž>€Ð4 ÚqPS96‰À¸à`´)àÂXAAð`†¡™ð†_OSãðÌ~›Þ>oxcm¸£åÐÌ+jýãîù 6lhȃM!¯7áxìȤaŸˆâ8zýà0’ eO9€aþ¼ )ÀÃ*Ûí(°¯<)«8~P xB˜/  {•81˜Í±a>üy|-¡˜ýáw¦>?†aFÛo Ç¿À,6õ\- ›Í‰>.> Ë𠾇ýðÌ ÅÚIE¢¶Gýè,€¾Õàa‚ÌØœó2E™dþD†\$Á^W€Ó¡uC¿ÃãCðÌ~Þ?xcmë¦ÒÿxùÐ3+æ‹S "/á`ÏÅ l#®·q´ç†L€HªÁsÇ+ø!<ùô ¸ÁðíŠkĺ ªÁ€, ‹ 3ÊÆ\9 Pð‹£.*G8¹  "-à1E€k÷~z­þa–Sǽ÷5P:aø– í?¿>_?èàÆa¶¤6Û1ljáo ÇßÃ0Æów ‰á/pfÛoÃmø_pf>þ†>Ûe }·ã Výï j?µ y·îLJyýáXó¨ðÿ?¼~ðƳoQ¸OÍï{Ãmøc0ÛÔx?Ç÷þ?ÇŸvÇ‹^*hȈÉÖã‹dÊpò·î>È3Æ §¯‡ PsàÁ ¼þð ÁÿÏuá X0f¨°6E#'ÅæNÌ€CÔøïÚ<lÄÆ Ì¿®?à1›Ù‹¶F¦ßÃ1÷ðÌ}ýãïêÜ2_|ñ$!@Á 8@ÈE§c)á&9÷»ø1¶AˆÛd]`I@¼\Ž»jd\ÀöðBðÍÙÛÝÜQ ÃmÊ mÆ m·ãïá˜cY¶Å†6ÛðƳm‹/…ü3 j6ذ¾àÌ|?À,y|%ï m¶ÊÕ†ü1ç¾Á·õ j½µ ç÷¼t†o jzz yýãÓÛÞ×ýêóoÃíøû ÇïAþ7‰%߀¢[Ã# a-iú¶:á`cöáŠP¸RbS™ Í·†9Ùô)§ xð‚~…ÿØørñø1°bõf‡ÀÏà¯Ã3á˜ûøf>þ¿¼m<ð¦Rñð>ÿjÁ¨–<8$û‡A‡À­Hýÿ.6$Þ/™b°‰€Ñ¾D“>:˜¼¼-‚À1ã^i÷>Þ†3-¼±ïà‡ï 71íà‡á˜÷ðw†afÛÂ^àÌ1¬ÛbÃmø\_ ûƒ0ÆÛ~Ücï࿹á<îd,r-¹†6óhÛŸ7?ágãPÆÛþê]{·Ã‡/Qá?ÞÌ6õ ooáŒËPÆÛŸ`ãxfëfè®[ñ˜¸ûËä(&"p8^nyšt)©0 pò÷Ñ"ƒá@`ß±ðÆreÃ%¿†cïá˜ûûÇWúç¸IAŽŠЦ Çx°¿Œ…à2±k¡oЇDl?,“#1àlŠpY§—ÇÆ Ád!EƒZÁþ¢¹_áãÃŒèfÌw©cÛÁÃ1÷ðÌ{{øfÛoÃͶ,1¶ß7¸a]›ÛoÂû€,|þ†:ͺ†<ÛðË̺1?Ôü pïxcV´jß»ð´SûÜñí7º}£}ãK{Þñàÿ÷þ?¼1™{êÛÃŽÞ¡¼ü(‚f7ÏÎ>½^Çžò·š| EŒc †…÷†/{ÐKD æàOÀÊÁú5B1°Vø¨2 m·hûøf>þ¿¼m{›¹¤~$áÿö A¾¯ƒ%pÜùx>à\? 2ˆÌﱟé\þlXð i 8aa¸ð4m3†,€AaWýÖ‹À¼ FË3M€@Çþ<5Báx-µXආ3 ³  Ç·¿†cßÀïÃ0Ƴm‹ m·ãÍàeá˜cm¿ m·á}À> ü3 mçÀÆÛs]å>8øczÿg•€Xü~lðöxf>þ¿†cïïxèÊkùóÇÀÙô€D-Êx^ÀÁh¥‰˜¶~>D ´hÆßbæ0Ãé…™‹ŒX(úcì¸qQàj²Ð 0.eÃP¼m±`§žwC•Âá{ûƒ1éðÌ{|3þþ†5›lXøxfÛoÃoxø+ðÌ}ü3 m÷ cm¿HóøÇAë~éíãÆð]ï¼1­óÔ~ñçûÇï¼}ýãߨ^<xw¼1˜mêÛ{Ãoô)„°<‡åÝ|Àc€¡Õ`ÁÒµ^>$ÞoÏÀÏJŽéÆl~÷´ñr syÕe÷^x}ü3 ÇßÃ1÷ðÌ}ýïŒ[ Ð;a=p©¤ñëŽ'ë‡`´ê,IvA2Rr!h” ƨ°>Ѳ:|Ðßl\,4 }Ù9ÊPb1Ai 06ÞO¿ fc¿†cðÌ1¬ÛbÃyøcW6ņ6Ûð¸g…ýÀé¶ÅÁ Ã0ÆÞ~ÛoÃ"†Ÿ†'tgøbÎü-÷O7ooxb=AlxÙ¾qãÓï k:Ú†:yøûëÇïwøcï mýá½ü Hœ*@t,ÆD@`è^ÛíX Õ"U-;_"Qš t𼀸}ü3 ÇßÃ1÷ðÌ}þŸo{ßÃoE mFÏcEÜ/`i aÀÄ-®P³ßr1HE† @co0´Á€kl¼ýgS7¢Ü/À` .e¶`^á·¢†3æ,1æß†6ÛðÇ›~ÛoÃmøcSlņ<ÛðÇM¶,1æß†<ÛñÞ~€[ƒ0Ç¿ú†?ÞðƶPÆÞŸäþ÷³½îÿ gáŽ[~<ßxc1Ûã‚¿Ãïx”áu{ÜÌA†›ïÊŠEÓñVBð Ûۆ̢{Ç)ò5Goðápûøf̶éaþÛ —ñ/Ãçƒ+ øþ:W¬ÊM4|Ÿ€ \ÓÄ<ÀæÐAøû ¡ Òºz=ïá6ü1¶ß†:ŽÏ$ ›`´EMÛCqax rÓÏâ!€3,—ç,ɱø¶ëo8>Ûű×À¿ÃͶ,1¶ß†6ÞðÆß~ÛÏÇ‹àoá˜c¦ÛÛoÃmøcm¿ m·áˆ¥s Õ {Û˜cÒß¹ý}£yýá^ÝPÇÛ~Éö˜ 5AˆQˆ¼Eç©õ,<nŒ>¬„~DU(²‰2ÑòŒáp Cò]°¹qº†:mŒ@£>^8_#‡ÀÖdš`"À,…~ñáo ¯e`²¯ÏkO Ó€Ñ ãÎB¢(ø1x– ¼3 ñÂÖ_Ά6ÛñâxûÃͺXcm¿ m·á6ü1ì߆:m±a¶üxn—†cíï m·á¶ý—q¿à ÆÛ{=Û°.7ÜðƳ{Qáo?½Âþo½ðÇÛ~Ì<õrl1™ÏqÁ3‡xc3OøI‚4üDØ#pˆ±e Àcíµó¨ m¶Æp"ZlÄZx“c€Û .üñŸ€HÅ ¶8à°)@¸Ã¼X–ÿïÏ~?|Ž‘p±&©ÙR° ª±zäŽ$ Åâ 2†?žu…‡Ç ZÛGÎü oœ%BáÐcàlÀ€ö =QÌpã‚Ä`oy3Èø'>¸°g^e¼sý¸ã ²á“l¿ìr…‘d üXüÿiñ%X3ä €c_÷Ò‡†øøf<¿ ÃͶ,1¶ßÀŸÃ0Æ®Ï,1¶ß Ð'ðÌxWÀËÀ,zûøf>Þ·†a·¼1ËïÙwÏ gá¾øÕîu yºñûß kïµpŸÜxw†5Ûz¸*ðïtû{œ¸wµ§ˆ®,õÓ>4G i¬P,abøZPXœÕ´ñŸ‚Íþ-ÂÀ7w玲 3ß™ŽŸ 4^8 !‡þ}W!—ŤG 7÷8ø}… øYGåß<þj `Ïêƒ?úž÷Ü¡4;4%G. |‘E€iûºè^'qÀ( /Ð0[芎\|­ZôkPumÅ ¦Ìbà ^÷^ÿžþžxAV ªK¿Ó”[…·écžþo†cÓá˜cm¿ð'ðÌy~†6Ûñá_ ÇÃ<3†cíà6·¼3 u³bÃ{øcy¿]Âþ~;ï ÃùøcÞ·†7ßðÇ·Þ?xöûÃyøýáfÝPÆÛþ×oh:?ÜñûÇõdü?Ü%—À éÀ¦úàÅðþðoÐ|ûà È~ƒÿ¿0*°ëü~~<2 •Õgà1à0Œ…“¾¨Xßn _pf? Ã Ï Ð-y„ÞÇùà²N“ã@|/þÎ&°›4…ÿÙÀF×Þ co30ÆÛêí¥žo õ,1¼ÝÃoxûxf? Ãmøc¼ûÿÏÇh!opf6î Æ¶÷¼3 mçáæü1÷Ÿ†£?jÞ§á¶ü1¶÷†6ßñô÷†35¨cooó{Ç‚õ÷†5Þl¡pUáÞç…Ùî Âìïîx·û‚äûžÌ6ذÆß~÷ÛÃoô1™yå…ÀÏÃì2 ÂòØdaŒËm‹ m½á¶ö m·á¶Ö6ÞØ1·Ãíü±áÿxcY·–<#à?ï j÷˜°Æöþ<+à=ïð÷O†cíá˜cý¶,1¼ß†<ÛðÆÛ~ÛoÃzüyí}áG¼PÆÛwå†5aÖ£°šïxö—÷7ŸÞÜðÆß~Ü…÷aZÞ÷<.o¹âïî ÷„ÝÁ˜Tï [ÞaŒÃm‹ ›‡{ƒ0Æa¶Å…éî ×»Û{ÃíøcÍ¿ mçÐÆßz†6Ûñà³ÀÃ0Æ»rņ5÷lXcmïð÷†6óðÆó~íüņ>Ûñéíá˜c­›Û{Ãoxcm¿ mýá¼ü1¶å°Çy½C{øcm¿ j6õ zžðºMÏ ÓÜñåRûÃͶP¸/ðïsÃ϶P¾ç†31=”^à½ýÏ k¶Ø°ÆÛ~Ûo`Æa¶Ð.þî Ç··†cÀ¿Ïà< ¼þaŒÃm‹ m·¨cm¿ m·á¼ü1˜m±cÁo€×¼x,ð÷_7†aVóóoÃmøc}¿ð÷†:ͱa¶ü1¶ß†6ÛðÆÛ~ÛÎÐÆß~3q½ï{Çœo8Þ<8¯aà μdÃ7Óïˆe÷xñ<žñ›ï{Þ=öñæÆÈ30ÞñçÛÇO ó¿ÞñàŸá˜ðBfà‡÷Ëá˜ñ<¾Ëá˜ñ¾¿†cÀŸà<þcÀá˜äþ÷†c( ýïxf2€à1ï{Ã6€ ððÍ<À-ïO·½ã<À-àñž``ñ…†oz{À-ïï{Þñž÷½ïá˜f½ã<3}>÷Œ»ÞðÍ×â÷ÿÿÿÿý³¶µX<`¿müm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmü¸Dx_üÁâ  T›<ƒ(– ÿ˜$ƒÂÿæZ |ØØ8‰ ð¿ùƒÅ@¨6wþFâHlíüŒÄx_üÁâ  T›;ñ$ÿ0x¨ÕæÀæò0pAáóŠ€-P>lôñÿ0x¨ÕæÀ_äÀàÁáóŠ€-P>løâHlíÎNñÿ0x¨ÕæÀÁÀ#ƒÂÿæZ |Øÿ¼˜â8løâ8lì¢8#hŽ ÿˆlïüŒ¢8lòÑÿx¨ÓæÀ÷ÉÁÀ#ƒÂÿâZ`|Øø8Dpx_üAâ  L›;ÿ#hŽ ÿˆlíüœ¢8llâxŽ ÿ˜lìâ8lùÞLñÿ0x¨ÕæÀÁÀ#ƒÂÿæZ |ØÛœŒâ8lìâ8lùÎFñÿ0x¨ÕæÀÁÀ|I…ÿÌ*µ@ù°½ò`pAáóŠ€-P>løÄx_üÁâ  T›;Ý‘ƒ€ø’ ÿ˜$ƒÂÿæZ |ØÛù8‰ ð¿ùƒÅ@¨6vâHlùüŒD`"Kù°°`EA€ˆÛn<ûøÛÏã}ÿç¾6óøþãmåãm¿¶þ6Ûøóoãßïçùyüo7ñç߯Þêtü}ºøûîq¶õãÝï÷sæûÕ¤Žô»ÆÝ>Fß}ò7Ûøßo‘¼ßÇŸm¯mü}¿ñç·Æßw¶þ?›øÛoãß¿ÿ§oüm¶¼m·ñ·ãm»ÆÛóç§mü7ñç߯ÛyÎ6þøÛãmï¾þ?.¾6öøÛoånrg¬¾þ6÷øÝvÖ<þøÞ{ã§ñ·õ±Ë§ÈÛoãý¾G›ÿyüm½ñ¾ÿÇös~çoÞ7³¼oÿñ·´ão»ÆÛÒFû}¶þ<ÛøÞ§ñö߯Üÿ¾ço^6Ûœm¿ñ¶÷Æû}üm·ñ·ŸÆÞÿmümïñ¶ßÆöÿo|oçòÉ•;ý±¶ÜãyîGþsúÿ^—çñߟñ·[±çÞ±çŸÆé¿þþ7ŸøÛoãm¿ºÍÞ6óøÛïã¿·3¶þ6ßøÛûãm¿¼þ6éü}íñ¶ßÆßÓ·¾6ÛøÛãmï½þ6ßøÛÏãn_ÆÛmüm·ñ·÷ÆÛÿíü¶èæ7c¶ýãtê,{N’7Üö7ë·Ï|{·ñË{ãîŸÇß»íüm¿Èþão{ÆÜÿ¾þ<éütÛøÛßão¶þ7ûäm·ñïO±·ŸÆÞÿtþ7öøÛÿã}ïæþ6ßøßoã—ßÇÞmü}ñ¶÷ÇÛÍüm¿ñ½¿ÆÞT™¿<ç=?uûÏ|sSû®FÛòþ<Ûì÷ñýÝãíïöþ6ÛøÞão?¼çoüy·í~n<¢eUâ嵐î¥ÈJcŸÎ=Jy#ù·ãm¾Fûmí¾þ>ÛøÛoãoîG»}öþ7›øÛoãm¿¶þ6Ûøóoã}ïw¾=›øÿoã{?æþ6þùx·çë#nßÄÚ]§ÖŸÿSŽósËÝ÷_>þ<ër=óøßzñ¹nÈÜýØÝ7ñö÷Æß|6ü‹Û‰Æ>ßqÉ+Åé’вCÃ_¬‚*˜äѹ6!ŽR}¨ ýW0¥÷\Î3îóâoocâq¼ÛXÛoãmµãí¿6õ¶þ7Ûn<ÛøÛnXßnXÞnñ¶Ýãù¿¶çmü{¶Üy·8ßoãÍ¿¶þ<ÛøÛoå·fç8榯Ôû{|{=ñÖšøÛoãÛOÇU5ñ·ÿc–ß#͹Æí¶ãy¿ç¾=Mò6Ûøûní¥ï)x©P3³Ã$ÕoL`ß½„BCÓ,/Çcí²kA~ ?TBÅÉøyÞ6ÃЃYöP¶Æûgñ¶ß#m½£m¿¶þ<ÛøßoãÍ¿Ëíüm·ñæßÇûmÎ6ÛøÞnqºnñ¹~qüåxÛm¸Ûoãm¿—iÏ"ÕoÒþ9­3Ž?¾7/|tæ¾?Oü{7ñ÷Ÿ#ÿ×ÇŸvÆåÌãþGé»#oï6þ>ÛòuN™ c$ßPdÈeˆ-Â6©r0òõÌ[mVY†7™ÝïÔ'˜áZSç)Ñ2,Á„Ú}ù{O¬o¿Øóûãm¿¶þ6Ûn>Ûøöoãm¿¶ùoíÍüy·xóoão¶ão?þþ6óœm·ñ¾Ûqï߯óíüÓºóþ:j?iÖŸú¯„Ïç¾=9ü½ñÖoã—߯çýûÉ—7·_íüm·ñ¶ÜÈúíÂ^ØØ¹_ %뎑 XJ1âtÃk²¬,§W^mZu/_§ÅÁ—Œfã[O‘ï›Æûs·þ6ÛøÛ{ãm¿¶þ6ÛøÛã}îÇóßÍüm·ñ¾÷Ç›müm·ñý·ÆÛßoüm½ñ¶ÿÆÞ'1áIï?ãìßcn*q¾ÿÇŸÿ{^<åò:vþ=¾œg6Ýv7_N6þ¶=ÞøÛï‘·÷ÆÛuañ¡ö͇dy·ÈÛm6Þ¶6ÛøÛí¤m¿ñ·Ÿcm¿ççÙö>÷øÝ<Ü{}ñ·œã¿?¾6ûøÛÛã}ÿíþ6ÛøÛsñ¼ßco?–LÛ ÿdz _z;õ_:ßÙüwSþ=>§ríyqc~ÿǶžÆÛŸ·oÎ6ÛøÛoã}¾Ç›u£oy#mö‘¶ßcm¹Æûs>þ6óimüm÷ñ·ŸÆÛûFÞÓîïmüm·ñ¶ßÆÛu§yÞ6ßøÛoãoï¶þ6ÛøÛÏãm¾ÌÈÛÔ0šñö§¼z}üsZ~?U¾=¿ø÷ñÓš¼tÿøáÜö=óøÝWøÜùøÛû‘¾ý±æßÆÛ}¼çu¦EoJ‡ôúºãÚ‘·óñ¶Üãm»ÆÛ}Ëyùmö>6ßd)zg^_W¥ ZÛãÊ`0°¸)œ\ñ󨵴Ô=ž€DuÐcƒ`cíVy˜Ðc5Uu< - µù爷¯yÞ7Ûøåý8Ûúñ¶÷ÆÛmüo½ñËïão?©»í9QÿÔÌãï×ÇéׯçoŽœ×ÇRïãÓqúÛã©ßãÛ>Ç5·Çÿò6Û™mñÑ·ó)¶žz½>ÜžK¦HxıT0/}2ÈI€c¢C a<ƒ4¶x~ƒÃÈô˧Mü<$Âî¶ÇI¶þ6þ¼m·$7,m÷r+z&Ô‰¾»Ê0ù@²fÁ`ÿŬ‚ï$Ž+296!Œ8hröžÛ”¢9ÏÇßÌìØòÿUÏ §‹Çµ •¦Tiñša¯ÕÓÔD0NdWÜ0Ê1/º8òoÌÃýoã–߯Ûsæïmüm·ñ¶ßÆÛmüm·ñ¶ßÊ ²‡ñÕiœw5_ÔOÇî§ãοÇ:gãšÛãú¿ÇO~Ç5ñÿ_ãy¿#ÔçÏ]8˜~1q”Tš¼^¨Âù‘ÄOÑk@¯É±ÈðôÑñI‡†)Ò7[ œz7ŸßÖǵKï U0Ël‚KºFÌV 9ˆónq¼ßÆÛmö.oC½nruâ”ɸájD„%ˆñ¿¼²Ž4•ž:­ã†EÿëÄÂ6Ûר¶eâ1ѶØÙqцæÐ8ŒÓ¤ÉÉÔM®*SÆë™•J”˜eiú´ÿ,´0ÇM±šòOG›müm¶Üo·ñæßÆÛmüm·ñ¾ÜãÍ¿¶í¸ÓŒü…ê»âg÷Ç~+ãRnù™ÝÖŸÕ×Ç33ñÕM|}Óøþïãoîþ+Ï¿VÒcÀ,TÂHâ ÂÂÛcˆ09¯l±_Çd¼ðÃSÓ"ÄFŒ‡Y2lï0Æ´Ä  e$dùS€À0R/ïŸùÈßìLl¢¸õô`~ü\XÇç:È$«£m¿¶þ6Ûò6ÛÕÍ|¢OuóÈW ì!¢‡4èGÎéÖíH1ðIì‚Gø$âÒˆo¼{Ë6çíÞ6£fm™ÞmXç½ØëSøóoãm¿æþ6ÛøÛoãm¿¶þ<Ûøûoáw»£S[øâië[žÇSëãÙÏǧãuÿdzßVmüo?ñ·ŸÇ÷û2.Ã!`çéõæYÇÅÏ0Z~´ŽŸXä=»=èÍ À/)ÜA‡P½›híºÒ%ÓÞ™¶o#Õý:wÎ °ä6þ5ëmüm·ñ¶ßÆÛv¶š©×–bD}Ä8‚ÃÀ-›d h†A"Î>I—€Çû›Ïb*Æ\=”ÎèÛm¸ÛmxÞnñýš´m½8ÛnñËoãm¾ÆÛoò6óøÛoãm¾ÆÛ[mήbg‡¨ÿ#›ÓxÛ§8çTü}èøÝzøåýñï¿#§¿cSñ¿¿ÇßÿÏü{çñ÷½Xóíáí «½•ôæé18a©Æ6F†ÛqÛ2…÷†) õ„ºs­ø]—M#onÆÛmüm·Ö¤‡„ybêwêP Cm¼Y°Ø·s®˜%ã(žÔ6N›:)Ü2 !=øZ„lc¹qô5pð”m¶wmÛ|o¶ÜyýñæßÆÛmüy·ñ¶ßÆÛmüo:øÞ—ñ·ŸÍ"Õôëøâiò:§?×}ü{Nøü·ñÖÕñìããšÓñÕ[øåÔüoOøû§ñ·ßÆóoñ¤’tÌ—:8ý{ J픨‰©>è$eÇ3ï_ܲ°IfI^tsNZÇ›s¶çmüm·Æ…˜¼zŒ^˜Pùp 3OÌ1bÈuÈ£ï²dr.lLy ÏÓGŸe1âÂôy»ãâXZM³¬ƒ8cÿWéXf?ÔcEÇŸßmüm¿ñ·/ãm¾Fóo|m·ñ¶ßÆÛžFóoÛr䪌F1ŸÈïêœ{wñéÓñÖªøöÛãóŸÇîßcOãMI߯þ<öø÷š¼m¿8Û{ãÝ¿k´‡åð ’8¼s…èm¶¬3;UHv–ðXï+ÙUlY 9[ÐÄo½ÈÛîØÛnq¶Üãm¾ØÃ4ó£{gÓYŸÍÏHt1sc‚-XW\-ò³æÇúàß S (1z¤¤äcÂïÑÊä>óéþ6ß-Ú êîM’7 Á$LZh!Ý/§ÝÆ÷w¶þ6ÛøÛoão?¶þ6ÛøÛ{ão?¶þ6óøÛoåôë§OÆëÿLïÿ_C¯‰5ÏÇOßÇõoŽ|ÿ޾ÿêÇþ8©ŸÕ~FóžÆßÿïu”¸øÆD}G@ 1—‘öÙqÍÕ"Y=;lž§ï^0’!æÛ™.>ÛÚ7›øßm¤m÷ñ¶æq·Úñ¶õÈÚ­š*y kÚâ)’3ÐàaÓ ¢©zì0.g§¢>2=÷!¶ø›m½§—«:Ù½3‹` »óp[ÆÛoÆßÓ¶þ6ÛøÛoãm¿¾þ<öøÛoãm¿¶þ<Ûù¹ˆ|?Gñýëãs§ãªšøÜWøÜmñßšøþ­ñÍLü×øê_äsMü¿ñ½çÉüáI4;½•S†p‰–G HÛyc™•KxaBG´ã¡| Þ~¿¶ïûͧÉORzEძÚÚL1L¶dA†!‚ °ÀµªT0 -›œrC1îØÙ1æß‘¶ßŸ¶Î%³i¯ Ó­P$ü"aäìqU‚,"!f].ñ×HÎÌÐÚ·”,Cy³4¶×¶þ6ÛøÛ{ãÏ¿¼þ<ÛøÝ7ñËoãm¿¶þ6ÛùpµN-ÿyümçñÔÕ|zf~:©«Ç¦¯ãÓ:qÕM|z}|sRþ>Ûìz[änÛä=Üß³âåÎè!²D„m¿”,±¿ž¬¼[˜0µ˜­È,¶ßin3Ò È©™E¬Éyƒä| "qTt à ¢ÖBsÇ1ö¶a[!b¶ž'ùöSøæ¯Þ¾Tcìéòc£ýµãy¿¶þ6Û^<Ûn6ÛøÛoãm¿¶þ:–þ7›øÛoãí¿–Ý,Ãøÿïãm¿w?ÍWÇ´ïTÿÍWǦwÇU7ñÌúøÝÌ|tïüs¾ùÝ=Ëý¼ä’N:p5@ÖHólœwmõ´Ráôï«‹žÕNeÃ-o¨×—òJÿrJƒ¡ú[#åQÅä=È2 2”2nµ\0oRdeöi”GÔêOEŒdÜ×ê›ÃÑýå]¡ € ºqøX­Ž¹árÎ8û-—h}¼{¶+Ù̯ŽÞÛáòI•‘T˜„Yð®xøå{ex{[#½ùá’µo,r6SéÀ,ÉþŸaŸÌˆã£ù±‰müm·ñ¶ßÆómüyýñ¶ßÆÛÏ|y·ñæßÆÛmü®œÉ‹U¶8©™ÇÝ{ÇnG5´ãû×ǦtãªÏã½ßǦ_Çþÿo¹òþ7ëün_ãpÀ$ÎdÄn+’á|m÷,{ìÛ ¦~Ú+v8…Ù Ó¼íÓæ8î‹Dó3Ú*¯ÖDóïe¿.é6’‘"Øÿ|/9žYããÚŒ¦>S<ˆ–ã‚í`øø1öÔ„¨XæXá pÛCÉKÉ'ëø0µ²ò[YŽ3ôîýšñu0Ãpû!õ`nÓëáï€Ñ,ÃѶØÁq¼ßÇÞ÷Ëmüo½ñíŸÆÛmüm·ñ¶ßÆÛ|m½ñìßÕéÝNÏøêkÞ9¦ù¹óŽg×ÇïM㩪œzgN:ñ_Ôþ#Òéøû¯ð¨üúø÷šø¾›w·ÕN„W‹=U[×;DxµŽšNãÔóLež3ô§ŒÓ0,onÃ%`{éëÌÓ£:E  a¿¯®ÇôȬty¶jG›qš hX)ó'Õc5ÙO i†”9̰‚áìŒÓ ?HåÌ´À¨‚ãBÆ—4 ˜R«q#—Xö´íKŒh,Îj·‰ˆ& LÆu;Žý;ÕëðÖ€Òa†•5ôØgtø±èÛÍ–6Û–7ßœo9n>óøÞão?¶þ7Þøóßãm¿·¾6Ûøöoão¶þtÇøR{Ív?«ëUoŽªkãôâÍh|㩪øôNøÔóWÿÚ~:{ü}çñ½Ÿèd©8YÎ9›! ܶƒ­ëôÿýdþ!¼ÙçÉ÷¯oümæËYãEÙ½z1—µC#â™0~ÿY{e€¶ ,rÿ×·@Z¡¿±§Ö7ûeCÙµsFÛòÆÞÍÆóÿn~6ÞøÛïãm¿¶þ<óøûïãmÏÇ»ßmüm·ñüÿÇÞ Sé#œÝãÞk㩺øó˜øßõ8ö¹¼{Lüu5_™ßy«ÆûßÓ|íûn;ÿéo†dm¹øÛÿ±¶ßÆÞ|¾þ6Þ¼m÷¬m¼wmüm·ñîò´m·ñ·ãmïï¾>ÛøÛão?·¾6Ûøþão½¾6ßøÛ{ãmïæþ6Ûù{§º>;sçÝüqÜÞ?ª§™ŸŽTãz·Ç5¦ñÔÝÞ=3¾:©šÝÖß®ûúßûëξ:s|¶þ6ÛøþŸñ¶ßÆÞÿ|y·ñ·ßÆÞmügñ·ŸÇŸßo|o7ñ¶ßÆÛ|}çñö߯Þo|m·ñç÷ÆÛyüI¦þÜ{ËøïOøÛãÝïŽ§×Æægã¯uñç·Ç55ñùuñï·c~kãçãï¾GÿÍütÛøë}´}·ÈÛûãmîFÛmümçñ¶ßÆÞmümçñ¼ÿÆÛßo|m·ñ¶÷Ç›müo·ñËoãm¿¼þ6ÛøÛ{ãm¿¶ï}ý? ààð°ƒÅî¨7ÿ|áðx¯ýÕæÿï-=Ð8„pxXÁâ¿÷T›ÿÛpŽ xoÿxÂ8<, ñ_ûªÍÿïéýƒ€8G…€D+ÿu@ù¿ý°pàð°ƒÅî¨7ÿ¿§Õ€0G…€D+ÿu@ù¿ýàpàð°ƒÅî¨7ÿ§Lƒ€0G…€D+ÿu@ù¿ý°pàð°ƒÅî¨7ÿ¿§ú`† xoÿLìÁ x¯ýÕæÿ÷ à Áá`ŠÿÝP>oÿK|Â8<, ñ_ûªÍÿîÀ!ƒÂÀ"ÿº`|ßþþ—˜80xXAâ¿÷L›ÿÛ`† ˆ x¯ýÓæÿïÀ!ƒÂÀ"ÿº`|ßþùLÖ`Ž ˆoþì<, ñ_û¦Íÿß´¾ÁÀ€!ƒÂÀ"ÿº`|ßýØ80xXAâ¿÷L›ÿ½”¹`à@Áá`ŠÿÝ0>oþì<, ñ_û¦ÍÿßéßC…€D+ÿtÀù¿ûðp `ð°ƒÅî˜7ÿ¥¶ x¯ýÓæÿïÀ!ƒÂÀ"ÿº`|ßþþ–Ø80xXAâ¿÷L›ÿ»† ˆoþì<, ñ_û¦ÍÿßéÏ€0C…€D+ÿ”Àù¿ûàp`ð°ƒÅò˜7ÿ¥¶Á x¯þSæÿîÁÀ!ƒÂÀ"ÿÊ`|ßýþ—˜80xXAâ¿÷T›ÿÛ`Ž ˆoÿl‚8<, ñ_ûªÍÿïémƒ€0G…€D+ÿu@ù¿ý°p`ð°ƒÅî¨7ÿ¿¥¶Áðx¯ýÕæÿöÁÀ#ƒÂÀÿº |ßþþ–ð8pxXAâ¿÷T›ÿÞpŽ xoÿlÂ8<,àñ_ûªÍÿïé—À#ƒÂÀÿº |ßþØ8„pxXÁâ¿÷T›ÿßÒÞpŽ xoÿNxÂ8<,àñ_ûªÍÿ타8G…€<+ÿu@ù¿ýý-°pàð°ƒÅî¨7ÿ¶áðx¯ýÕæÿ÷ô¶ÁÀ#ƒÂÀÿº |ßþØ8 ð°ƒÅî¨7ÿ¿¥¶á$ðx¯ýÕæÿ÷ÀxI…€<+ÿu@ù¿ýý-°pàð°ƒÅî¨7ÿ¶áðx¯ýÕæÿ÷ôæÁÀxI…€<+ÿu@ù¿ý°pAá`ŠÿÝP>oÿs§9á$ðx¯ýÕæÿöÁÀxI…€<+ÿu@ù¿ýÞ0šÛ–6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶ý¶]2|ÿÿÿÿÿÿÿÿÿÿÿÿøc·ó j7ܯÃͶ$1¶ÿÃͶ$1¶ßÿáŽßÌWÿÿþÖm±AŽ› mýÞÖm±?ÿøcréŠ míágý½áŽjž_ðÆ£}ŠþÌ6é?†3 ¶$1·¿Ã¶+ÿÿö*ÖªlWáŒÇí‰Ã†ÛÛoÿøcQ¶ÅaŽóìT1ÓmŠÃϱ_øcY¶ÅÃmÿ f?lO f^ìHcÍ¿þÔ}±_ÿzÿ f[lPcyÿῦ÷†6þç }¿á¼ÿáfÛå÷á6ÿÿðÆ£oOÆÛÖÝ*îéðÆg¼ÄáæÖC–ÛÿÃ6دÿª|1™{èóoŸðÆawü1™mäCœÛÛnxcY¶Å tÛb¸c¦Û'ÿðÆo>Äïn›”1š}±?ðÆa·J o?ág-Šÿ m¶Å=ÿïn¿ fßÙ? flPcm¹ÃÝæ(1­é±A9ÿþ̶é÷áŒÛn“ðÆm¶ÄþÌgؘcYüÅÿÿþÍþé!¶çÃá¶ü1˜m±? j6ØÇ›~óooÿðÆm·Køc8þbCm®ÛnáŒão&Ͷé A¾Ü±÷MÓwuÃ†Û k?©^í¶Äÿÿû¦îÞx1æß†6ÛðÆß× m·?¼{ÞÌ6é!<úÖïRxcm¿ vÛbÃmÿÿ÷¾›¦øÂî|"87>Ö÷ŸîÓ§uuºpÆa¶ÄáfÝ'†6þøc¦ÛÜÿÛL2ãò|1œmä†6ÛðÆÛ}»BÈ8 2vêç–ݯ(ðcÍ»mþÛnøcQüÄöéî áŒÛoOo:í»ð1Ù‹² FŽ m¶z6Û¸cm¿ ¶õt^輟áŒÃn’ÛnÿÃmÿýà¤1›méÞñyàÂól É€coã^¶îÛoÃmøcm»Eäà1…æØ@`9ü1™od†<Ûøc0ÛbÇïáGó†:mÔÿÿÃ./xcòéðÆÞÞÛoÃmü^áyû·áöÛÇï¼1¬ÛbxcS?KÿÿûÜ1œmÒCmÌ1¶ß†3ºOøcm¿ fsìHco?ÿÿÿãóðÆoÿ’ÛÎá¶æÛna¶þéEïðÆÛs y·0ÆÛmÿÿÿ†3yü¬^x^NÛ{ÃÍøcm¹†6Û¸cm¹€Æs>Ï&é:ü1˜mÒCmÿáŽÛÌOÿü1÷›Aù8üEç€c6Û_‚I gjNä‡îÜ/'†6Ûü1¬Ûbxc¶ÛÿÞ ¿“ÖÜ÷{Àƒ6ÛbOÇîÜ/<Ì6é?†5lHcÍ¿î¡GöŸðÆmï§‹ÿàcB÷CÆÛ³¸L›õÂôÿ÷OáfÛÛoðÆÛî¿ÃÝí?€Æÿ`»è`ÇÛeÌ^éHf1š  ,7á﻽¿þÔm±8c¦Ûÿÿü a¿‹ÞÄyð[ ñvñm½Ì¡ŒËnþÛoÿÿþ/{¦/|1šýÒCmϽ‹S¯NpÆß× fsù<1¬ÛbaFÛ m·ÿÿþÖ÷¿ fÛlO€ÆcÿBÒáW› j6ØÆÛß tÛb¼1×?étņ7çwü1¶ß f¶lOðÇÞ} j6Ø ÆÛðÆÛlOÿÿÿ f[lHcm¿†3 ¶+ kìØ®íöÅaŽ›lNÛmŠÿÿÿ f_ÌL1šÙ±0ÆÛ~óoÿ†5vlPcÍ¿Ãoÿÿÿÿÿÿÿÿÿÿÿï¶]¯˜ÿÿÿÿÿÿÿÿÿS ƒ/ÿýÂÿü1¨Û0¿Ã­·,1¶ÿí·,1¶Üÿÿþä¿ÿ†5[l^Ûú|1ªÛbÿÿøc—óÿ†5l_ÿÿøcQ¶ÅÿÿøcQ¶Åøc1¶¥áŒÃÍ‹ÿÿ j=Ø¿ÿûÀØcY¾Åÿÿÿÿÿÿÿ{rþÖm±a6ÿÝÿðÆ£{_ÿÃ'ÿÿÿÿÿï{ÛÏþÕm±ÿÿ kæêÿ»‹{ÿáVÛ—ÿûÁž·kü~xq†t3w§¿ %Ïÿ†7ÞøcU¶Åÿx»Áž¿þñÿ†5_Ì_û QàÏ{{}Èÿü1šmåÿÿö/¹'·÷ÿÿ†3Oæ,1¶Úá¶îÍ6òð Í6éq÷;»Û—ïê_†5Ô·‹ÉåÝ?þ¶çqm½Ü1æß†6ÛðÆß× m·'vßr‹l3øco? j÷©¹xc^_×ÿîMÙ; û¶í8]ۼǹdž5[t¿ÜG@ÁyßWƒ;x3Á~è-ÛÛ·E†3M¼°ÆÛ~ÛoïcÒ ‡“~?8/ îXc0ÛbðÆÛwö/»OW·§·»Á®Áƒ3O}/nл ·˜ÍìÈdUÁ¶ÏPÆÛ~ÛoÀƒm½\ö>½ m·ÿÞ[•÷—†3½\@‹îŸ¼`1·ñ¯PÆÛ~ÛoÃmøcm»Gçÿÿ†5lËÿÿáŒÓû,1¶ß†6Ûøüÿÿ†5[l_îž½Ð$ðQÓt ðQÄ ÃmÜ1¶ÜÃmøc4Û¥Ôãì2uïßûÛû mà³ííËñx‹löÛná¶æÛna¶úêöéî®ßÿܯº¼Øžžß}úØe÷†3M¼°ÆÛw m·%äå{†qøeÿ÷ÜÉëxŸ}äûÎÖqyè_ À ~C¦ÛæÞ_ÿ j¶Ø¿îb}÷ƒ>ûï¸kï»;Æ.Ï[™ýÕÛØdÞMëa•ïü1¨ÛbýäþàhHfð‡ïîÜ1™mèøº>Ä­°^ !ŒÓmÉ{sCÔ2GÇÄ.Þ(uÿ j¶Ø°ÆÛ†6ÛÿlsÏ0ÆaÍjð9¼ <œÌ6õp_sá¶æöêp ‡Ùçqøg÷C†wü1¨Ûbþì¼<Þü[@æWKØfæÇá[L3 Ã'1ÃmÿÜNó}÷„<øýÎ;Û»ží¸Æ-0cŽÓœ~ÿáVÛ j6ظcm¿û $ëxs¾é=½;?vÜÿtœ›¦äÿî[¤Ôm±»žžßxCÀ÷º?ÿÿÃ{ÿá‰NLÖ·ß±†W 4æÌ9¦WÇ¿ü1™m± f;Ô¿ klØ¿þð<ôü1ßÍ–ào k:̯¸cYþËÿáŒÃm’ð/ü1¨Ûbÿÿëa—ÿÿÿÿÿÿÿÿÿû¶^,¼ÿÿÿÿÿÿÿÿÿÿÿî/Ãm²|1¨Û0¿Ã­·,1¶ÿí·,1¶Üÿÿÿ÷ü1ªÛbðÆßÓáVÛÿÿÿ˜¿ü1¨Ûbÿÿÿö/ÿÿö/ÿÿü1¨÷bÿî×øcY¾Åÿÿÿÿÿÿÿ{ÿÿÿü1¨Þ×ÿǶ;BíÿÿÿðÆ£~¯ÿ÷·#¼ÿü1ªÛbÿÿÿý÷[ßÿí·/ÿÿÿØc …çÇÐ1ßÿ†7ÞøcU¶ÅÿÿÿÿÿðÆ«ù‹ÿlïþìW¸?ÿ†3M¼¿ÿøcQ¶Å÷~ðmÀþíÞ8c4þbÃm®ÛnáŒÓo/ Ón—tØMÏn¾ÕRü1¨Þ¥î}à“Ó°@䧆5»Ú¹…<_ÞcÊ º†<ÛðÆÛ~Ûúá¶ä÷BèëÓ«·ÃyøcW½Kÿx(äŸy=¹oï7q{ÇÈ2ÿ»ÕšpíÕÍ´fè~ÕmÒÿþà}^ ¼ GïvÅÉû¶ð¸c4ÛË m·á¶ü~¼ÅÍâêÅf0È2GðÆa¶Åá¶ï†5l_xž¾àšx5Ø-ÇÛ…o Å»Õl3 ïÍìÈdUÁ¶ÏPÆÛ~ÛoÀƒm½\<ᛘ‚ê¬À ã¿ m·ÿöáòzt <3Éà“ï¼÷lZëÂaŒÓû,1¶ß†6Ûø»¦EÐÅÛÝøcU¶ÅþÖ>ò}à‰á¾ð‡ß|1™­5[Ã,tdx3ww~óná¶æÛoæÝ+ÚW6Û¿ÿ}÷ßx&ûï¾ûï¼ C©PÆûÜ ƒ3ïŒFÛ |D;mÆ~Ûná¶æÛna¶ú? Ú°ÍË…ó®oÿûï¾ûï¼Þo¾û︆7÷ûš‹ü1šmå†6Û¸cm¹.Ÿ¹ÛÿûÊðI÷“•÷ß}÷ÞAŒÔï®æâÌDØc4Ûbøc4ÛËÅm¼2vŤ}ØþÕm±ÜG·ß}÷ß}÷ßy<<wn'\×vLjgݸc4Û¥âäNÄ™ð€6{ÿ j6Ø¿}÷„8M÷„°pÍÂnos†5ûzÞð†Ús°¬1šmº<Åš<- cŽ; ŽæØÏ°Éÿ j¶Ø°ÆÛ†6Ûÿk{÷ÇÞOp€‹÷‚N ‚o¾ð˜c¶Át4v7ÐŒž‹WãÛ žð¸Ð<.á“ÿáFÛ÷+Á'ÃÏUW„>ûïpNû‚wwîǸ'ÞÂæÃ'½x·8ä75ÿ m·ÿs¾ûî}æûï¸'}÷7Ò {Ï»Oð¾†OnÛŽáÔ1™mÒ¾Õm±pÆ£m‹†6Ûÿ¹x$û„\î}÷“ïß|1­Tê5žCw†NáŒË/ï¹Bà{¿øcQ¶ÅþÆx1ª÷ªû•á¾òx*û÷ßpL kþÙ-oÿÃŽö_ü1·¿þäƒ?}l2|1¬Ûez}÷ß}ÂaçûpC f3ì^Ì~Ø¿þÖÙ±ýðÇOë7ÜîAW`€1¬ßepCp÷ß f3졽¿p3p3 flŽn\1™Ù±xc0Ûdÿ†5l_ûýl3Z]C@î Ñî œà^àTp\pM°JhXf÷wß}ÿÿÿÿÿÿÿÿÿ¿¶hìÿÿÿÿÿÿÿÿÿÿÿ¼< |1Û|ÂÞ aVÙ…áW»–ÛoáOÛ–Þ~ÿÿÖÝÿðÆÛká¶çí¶/¼ ÿÿ y¶ÅÝžð<ðDðJíîż<ÿÿü1Ûm‹ÿÝžôôþûáfû†5›t¿ÿþí¶ÅÿÝ‚/}÷Ã÷™C6õ}ÏÃ_ÿÿÿîÀ×¾ûÉàq÷;ÿ k¶éÿÿýÐ tßexx}h!sïÞ1¨ûÒ×Ú˜¼1®÷dîñùïÿÿîÀ³ÛÛÉáž1ªþÕÌ<žOU’ø¶ßÿáVÛðÇMö/Ý^ûÍÊûÈ1¬ÛÕçÿÇÿÿ†5[n_ý÷ÞaŽ›z¾ûáŽ^ÿxÿÝÀƵv–Ÿ-Øc0ÛbÿðÆÛ~ð2Õo1Þ1÷æÇÇß}÷ÇïÏÆa·§ÿÿáVÛþâ0ÇOÍWÜæûï Æ«oG“ïN€·ü1™måÿ†5Ûl_øc¶ÛÞO ûï¾û?s¸BwxáŒËß/ f_ÌXcmµÃmÜ1™måàA™mÒãû¯Ã­º_†;mÒ÷ß}÷ß}÷ß}÷ßxøcÍ¿ m·á¿®ÛnMá.Ûéëá¶ü1ªÛ¥þûïûï¾ûï¾Ì7õ¾̶òîâg Ÿw{†3-º^̶énÇÓ¦ƒ^.Üö-·‹™ðƳú—íº_ï<ï¼!÷“ï¼ <žQÓ¹Ë;÷4ððÆÛs f[ya¶ü1¶Ü'd=_øc]¶Åá¶ï†;1}æûï¾ûï¾À'{ï60Ì1™Î²Ö4ö÷Mâì2 bfØF<ÀÆkfF‚J¸1¶ÙêÛoÃmøm·«‡çoÃmÿýäûï¾ûï†3}^ýàa«se<äëAXëÆõ m·á¶ü1¶ß†6Ûµçøc]·Kÿ vþdíï¼3ï¾ûï¾ûï¼^Ûö§L<þxÛúPÆÛ~Ûoí6ÿùö/÷ß}÷ß}Êûï¾øc2÷Öð<Ü$2Éêo{|1ç÷CmÜ1¶ÜÃmøc2Û¥pÆ&ï!³·ÿý‰½÷ß}÷ß}÷ß}àaíõ™¾ÜÞ-¢xc2ÛbÃmÌ1¶ÜÃm÷ÿÿßy>ûï¾ûï¾ûï¸{h3˜Ã,^ f[ya¶îÛnOÿáŽÛl_¼Ÿ¾ûï¾ûï7ß fz¼p3xpÆ&}„¿ f[l_ f[y{··OfܤeøcUîÅÿr†;mêð8ûï'ß}÷ß}÷ã¸\90¼ö.ÞèÿmÿáŽÛl_¹Çï¸Eç|1ªÛÕϾûÌ[¶̶Ýl2Y§…Ü3 ¾°á¶Ï1'º? j6ذÇÛ†6Ûÿt'Ãg/­o ~ð0ûïÏ¿{JF}Ï·½ °ÉâÃ7¾ô ¡øE‚oSá›Ãý’ÎÞÁ›œ®Ó‘ÿ†;m±y<3ÀãÁŸÞo¾ÕÿjûûÅ bœø/†ƒjyç4ùӆ1ClÃP Å-°€4>=·9&ì2tÿ j6ذÇÞÿ†6Ûÿß}ÁdûÀã÷“ï†5Ú<\ݰ¢~ñàŒX»q@ÓÝ»mï{mC&3®¿Ãmü1Ûm‹†6Ûÿï¾ó}÷‚O¿x}àX1˜ÙÔXf÷W¸c]üņ?óžãc÷»ÿøc¶Ûû¾ûáŽßz¾ûáŒÆÞ«Ág„=¾ð(Öݲ5N fvì\1÷¿^?ÿá¶ÿû{ï¼3ï¾û‚À³ï¾ÿp/¼ ~Ö2xcW¶Åí¶/Ãá÷µ }׸c{?}õ·¿}Œ2}÷ýÀÎ×ϲxc[üÅÃíÿü1©³bÿìo[uH! Þ¬½Íï¸;°3o ÷÷Üÿÿÿÿÿÿÿÿÿß¶P€ü ÿÿÿÿÿÿÿÿÿÿÿÿÿü1ª÷rÃmü1©ûrÃÏÏÿÿÿï†5[l^ûn|1ªÛbÿÿøcͶ/ÿ v÷bÿÿÿÿÿÿðƳn—ÿÿÿ÷/øcY¶Åÿÿÿÿ÷_ÿðÆ»n—½ÿÿÿÿÿñûÅÛÿÿÿîÁ¼ðÆaîÉîßÿðÆ«m‹ÿû=îÖmëÃùú¿Înÿÿ j¶Ü¿ÿ»_ÿÞÀc0ÛCäü1¶ßíæ/û’îÂÿ{ÿÿ j¶Ø¿÷§NåøcU·§ÿzÿÃí¶/ÿþâÿÿ f[t ÆÛ}Üîâ`íÏs? j¶éýÓÿû»ïáŒËn—»¿oðÆÛ~ÕmÒÿþàßÖÞ]ÜZžþ̶é{§s1t wxáVÝ/ÿÿîŸÿv½ï k¶Ø¼1¶Ýÿuzÿû§€Ek‘ûýÛÈ÷øcm¿ÿ¼n¿ýÚY°ÉÚ†pÆ&Ù„ÃÇÿávÝ.×ÍÒÿ÷Aÿø^Éÿá\ûûÁÿü1™{ë»wkø½üZ¾(Þÿÿtÿÿ÷¯øüã·ÿû¿ÿýïýÊìÿÿÝknÿñûÿx~=·ÿ†5^ì_÷¯øcYç¯øc2Û© f[t·{7¬ÛïÿvÃÚk[‚%áVÞ®/ëoÃmÅq ß÷Š÷ðÆ£m‹ m·ÿÿÿâ÷=XWµ`ë{ûßÿÿt þÌ6òðÆ)Ï‚øiÞNß{v…çÿ j½Ø¿÷ƒ:ÿÿvÜh~÷Žèíowwü1ªÛbÿïLnÿxWÝÖWýÝNjΆ3:\1®ÞËðÆ«m‹ÿÝ“Åÿ†3ë_×»'ÿÿ†?ûbþä¿ÿ k?˜¿ÿðÆ«m‹øc¦Ûÿÿì4þ×ϲ8?ávÛ'ÿþ‡½÷[[¿÷þÖÿÿÿÿÿÿÿÿþ¶Pþ ÿÿÿÿÿýŒÿÿ[ ¿ÿÿÿÖÞóí—ÿþÕ{¹a¶þÔý¹aççÿÿðÂÆ'vOö7þÕm±xcí¹ðÆ«m‹ÿÿá6Ø»ÁºÛ¼1ÛÝ‹þÕmÒÿÿÿü1ÖÝ‹þè|1¬Û¥ÿÿÿýá}ãxÿÿÿÿî¬np3áŽþu/¿Ãíº^íÿÿ¼a¿ªÿ j÷ªÿÿÿÝ7ÛãÅÿ†3vOÿÿ j¶Ø¿ýáW‚œ1¬ÛÖÔiýÀÏÿþÕm¹öóÏ ûï\1¯§ë­¿ü};ÿðÆÛ j·˜¿ï¾øcU¿Uà·¸#¼#ýïÿü1ªÛbÿÞO¾ûÏí½†ÿÿøc]¶ÅÿûïÿxoÿÿþÕmÒÿ¾û°Þ ÿ›¿÷¨ýÞÛoíº_[Åøc2ÛËÿÖÝ/»ÿ†5[t¿Þo äžžž¶ïû‚?ÿü~ü1®ÛbðÆÛwýäøc·ö¾ÿxWñí€O÷«Çü1¶ßÿÇï}÷“‡¾ãx0c1ß×âòÿ†3 ºXcÍ¿ÿ÷ï¾ûïW…=?þÞÿÿü1«Ÿbÿx6ðßðÆeï®ñýÛÿýàÁŽ»Úïx7ÿÿÿÿ÷‚Ï[ÓÇÞ ÿÿvÿÿï7“ÁžÜ¿ü~þ/&øcUîÅÿ}í÷ßq… á§ÿþÕ{±ï-ÝÆßþ¾çkg÷áVÛÿc ›ÝºÃ¿ºßÿÃíì¿ j¶Ø¿†:û±~èâÿÿ†3/vOÿü1×ù‹ÿÿÿÿþÕm± tÛbÿÿÿÃùöOÃí¶OÿÿovÆïõw;ÿÿÿÿÿÿÿÿÿ¿¶Q{< ÿÿÿÿÿýú÷1†MamÌ›šßkwÿÿÿÿ†Y#ÝÒÊéï+ÀpcÏæ_ ¼Å†>ëøcmþáVÛ–ð1¼ C¯w,1¶ßß·,1¼üÿÿþæœÛžÝ|Ëx¸OÀg†5[l^ûn|1ªÛbÿÿøcͶ.†ãϾßûPÇÝ6ÞÛÁFÛ"Àe81×í‹tg€Æ§í‹ðÇÛÿÿÿy>ûÀ01Í71ßޫᎿl¡w¦ÕÒÞz k=Ø·€Æ³n–þÎÿÿÿþÁ„}ðÇoVŽ³Ú¹€#0í·Q÷ß½>ð1ÿÿÿ¹c·»+˜ s';ï¸kÃ<;ïÿ¼½àX1®Û¥Ãïº[[ÿÿÿۃϟs¸ xCï¸'¼†5žìçûõîÓTÿÿÿîwß}÷›É÷ß}àð0ààc k¶Ø¸éÏyû¶íÿðÆ«m‹ÿÞûÍi½÷ßy>ò jWÚ<Z\à^Öíå÷6îÿÿáVÛ—ü1öÛp×›ïÞ ±½¼2}äû@cY·QÀ­Ü1÷ó~>»ÿá¶þÕo1Ç™9æûÂy<3ï¾òx k6ôp+p†5ûÔ¼0Ìcïåÿøc_>ÅðÆ«m‹ÿp×ÞO}÷ßs7˜cW½–ðàT k~ôkpc3·Ó f^ô¿ü1˜mÒðÆÛÿï¼ÞO¾ûïó}á¸Ãïê¸ÌïòÃoOÿñûü1ªÛ¥ÿs¾ó}æðMæó}÷Þagö¬oxD1™{å†7Þ­v_î½Ïá¶ü1ªÛ¥þóy¼ßy¾ûîWß~á!ŒËÞ–Þ~c÷÷‡ðÆe·KÅïvœw'øcU·Ký÷›ÍÈÞo¾ûþøcY·«„‚O¬ „ox½áŒI_a¾/ÿae†5Ûl^Ûnÿ¾ûï¾æO ûï¼41­þÑÃÛ‚C&Õî£Ú …‚;Þ?ÿá¶ÿþäO¾ûï67>ûï»W·¦ …Ùç` c6Âà-dï=ý¼÷ ft°Ç›ÿîA¾ûÍÊû•÷Þð$è<5ÿz†>ÛÔ^ö3ßýëü1«Ÿbÿ}÷ß}÷ß}÷ß}éàQàRÓ½Ô{oû·Å»Å¹ÏÿǘsÎFûï¹_}äûï¼ß}æÜƒ0Åð“ÄA¢»Ïþã°á—ÿþûï7ܯ¼ƒ¾¯'ß}Êûî0Êóþf\§›¥¹Ýõ³ÿÿs¾ûï7Ü&òy¾ûï¾û„Çï´`Çÿ×›à1®Þ/ïv/ûï¾ûï¾å}äçy­¹÷Ø—Éá¶ü1™mÒì&æ7ÿÿûdû÷Ü&ûɭϾûï'ßxXB‚ Ì'b ^ÆýÊêíE¶ÿ†5l_ûï¼ß}Ãß}ûëMÌIϾ(ÝgÑ¢.h2zÛïNÏñkŽzÿýñÖç¾û#ùÖ¯¿pJÜ ¾Z{ÏA=S bœø/†—VÜ.œíîîÎÇïü1ª÷bÿÖÜåk Ÿ|1¯ŸÕàaäûï¸!Þ vã¬2x] ÍÎk¸îJÚ½×øcU¶ÅÿÜÂNwX089ßxCï¾åx·¡uO·ûŽô-§pÆ»{/í¶/ÿr†:ªCuýˆrÛŸ|1˜ê¾ûï¾ðbÜó·¼1™{²ÿÿÃÞsàcoöÜ8 kiõ\ï¾ð@¶ç›„X“œÁpƾݕàà_Þ»ÿáVÛðÇM¶/÷ÀÀcQ·P1îæPƶ¯«÷‚'ÉšÖð‡2x(àD¸áŒÃšbïOOÀÎ×m²ÿía“šÃ%·[—+/{P2ë{з:´¹€+uÀŽÎç~Þkoÿÿÿÿÿÿÿý¶QøX!ÿÿÿÿý`eî mŒïcu{÷:ÛÿÿÿÿÃv3ÙC}Ì1þõÜ !¿™Cmøcý¾6Ûä1Óm‹ }·ÝÀ̓·@Çóò;§„¡W»–ÛoáOÛ–Þ~ÿÿ &gÓûFþÞopÆÛl¡÷¤ vû¨ÆàÇmº<1¿ÜÆ«m‹ m·ðÇÛsÜÿáŽÛl_þóm‹†1¶‘Ô\ Ὺ< Ã=L¯‡‚ c¦Ý@Æ£Þ–ÛoÞ7pco¿ j¼Ø¿ k¼Ø·‚×ÿÿî j÷y•ÀÜ"ûÕ×0Zþzn Èà¼Ï/‘Áèà¨CÏv-Ál1¬Û¥†5l_ÿïËÿû°:oÈð9p;¸„^WÜÅ}áw…Ü.ÖmåðÆ»ó— k¶Ø¿ÃͶ/áVûÿ÷@@xc˜'p=½ß}ðÆ£n c§¿»ÜðÇ»Ýp[ÃïûÀÄ1¶ÜÃíº[º ;?¸°c]·K†5›y j¶Ø¿ýÔ¿ªº‚Wøc§Þ®ðƳßWp= jvôp[xT1·Û@ƯmR×må†7›÷‹¹¢ÖqÝûì ÆéæÜ ÿþê!Óò>û[Jç+Áhc_g«ÀÔ1ªÛÑàjð5 jþذƷmP1ýŸÞnÅÝÑÜžð3¸ü1ªÛbÃ}ÿýÔ_}Âêûïw•ÁîÖ{èÛûïê¯Ç[yCÛp1¾ßïWÿðÆ«mËþûm‹¾÷}÷ßyCÏ}\!ìýÇWÃͽÁN×m±{ÓÜûÿ†6ÛøcU¼Åÿ}÷œ1×z«Ç{¾ç·v`ràÇO»†5\¸ŽW41­ûÑÁ0 †3 º¡ŒÃz—ÿøc_>ÅðÆ«m‹ÿad᎛Üx ½^î¸]Ü"¡_@ÆÝyp5 jþôp¸¸ðÆ·ï@Ç»sp^ ü1˜mÒðÆÛÿî€hûî÷Ýo¸z¸àbÖohã뜾ç½ßÿ f^ìUÑ®ËáVÝ/ûÅz¾ë}÷íí^¬n k?µx%x\1®ÛÑáŒÎo,1¶ÿÖKâ§PÉÿøcçÂ0áÞîœ1¶ß†5[t¿ÝU÷÷ûêç¸-W Ü. kÿôÝ"ÞvîMàc f[t¾ët#r½Šî¢ÑÃ7kµë†5Ûy jçØ¿ÇªŸ}÷Þï ¾ûÎøc]·«ÀõÁx÷‚+»:#ÑîìO»Îhc¶ÂÕÙ\È,ÎýË}÷ÃòëPÆöÞç¾õuå}÷Ü{ì!ã€c¶ÂV 4v {~ì®É½\ßÿ¶°ÉîûžçW{ïWßw¾ûï¾Û³¢êñjïýÙÙë‹yáxgÿï¾ûï¾×ÛÕ}ÔpÆc?«î·ÃýíC}òó1Fl ›q+ƒ–ÜO÷B=nÿ†5^ì_÷»ï÷ÞWÞ;Êõ f3ú†=öãÀÕà¥à¥Ü9ÙÃíµy°Æe·KwWdwOvkßá¶ÿû«†;qêÖÏêëinz½Cí½^® zÌ6õz¸/¼*Òˆ9‚—uÜ6kœì—”~ýÚì£Ù÷ðÆ«m‹ÿx%|1¨þÕÜ_}Öð»Â¡vÞ¯׆†3;=/0Å °À¼¹®ê-•îÈêX¡ÑÏs{ÿÿÝïWÞ¯÷Ý]…W=ß}Âà•ÂjÖÿe‹dxcÍõ¡ŒSŸðÓ½`Æ*Ï‚økb¡’ÈsÙ?x( j½Ø¿÷«ª¾ëxï¾ûï½ß}êá`D|?ëx ítÖÝ%ê莈íwÜë k~ò¾Õm±÷»Ç}îûï¾õ}êû†«Ý÷³Yn f>p°Æ÷m†7ÞýÚìnÛ{¾Õm±a¶ü1¨Þbû‚ÿ»Ã>õu¾î¾Ô1÷ÿ½_ k˪¯¾ï{†3ý, C†Þ5îWÈ×mÄpQp1­»ÿáŽÿl_p^ ý‡'ƒz®ñÞ+ÁðƶßWP=uwß}û…Ák‡‚ÐÆaï–óûÖ&pcoî8xc]¶ÅÃí¶/ k¶é|1ªÛbðÆÛ߆:m±[vñÞî=÷÷¸cW·T1ý¿¸\¿ {¼Ô1ÿÿ.k€Ãm÷ÿÿcޏ+èpN磂w9È[Þ³]k ˜ÜÞúÛÝÿýmßÿÿÿÿÿÿÿ¿¶Ru|%ÿÿÿÿýÁoÿÿÿÿÿÜ+ y¿Vóù–ënË oÓbÃmøcí¿†:m±aöþÔm²<ûàcí¿Ã¶,1¶ÿö,1¶ß†6Ûÿÿÿ M8Ïe°7Ã}ÕxÃÍÊÛûÃyð1Ûî co¹aŽÿlXcm¿†5l^ÛûþÔý±~Ôϱa·§ÿÃm±wHcßöG]Àð3}à… j6ê=ŸðÆÞ|áNóðÆ«mŠÿÿÿpA¸C}èèO¸·9àvóoÃmø¸ 81ßú— j¶Ø°ÆóþÔíÒÃmßÿÿÿ†9ý±a‰¶3UûZð2{½ß{¾ð*x\FÞ_ j÷²áfÛÿÿÿ¶)÷“Ìð^ûï¼&ñxCgúÔïe†7þ¼1ý÷÷29½ÀÆÖmÒÿ†5Ì_þð7z>ûî÷{ï†5[ú<¼Ãí´ o¶µÁT1«ÛË {½û½ÙE¡ k¶Ø¯ÿÿ½ßxïw[ïWßxM÷ƒÞpƾoMàfîkº¹¼1¬ÛË }·gáFÛ†;íåÿu¾õqo¾ûï¾ûÅ|1ªþ© k·²ïç{Õîô~×m±øcQ¶Åÿ }¶ÅÇÃÞû­êûï¼ï†5›z>ÕmÕx†?Ÿ›ÀÝàf×}±{²;ÿ o½ðÆ£m‹øcm¿¼wS¾ÔsU_}÷ß}÷ßb¯{¼¼Ãíº]ØŸþÖm±|1¨þbÿÚÞï·ÇP'w¾ûíî}÷ß}ûávÞXcïyøc1³¥á·ÿÿöf¢¼ Ýo¾ûï¾×Ïèñß}÷þõþÌ6Ø­Ç»'†5Ô¿ïwß}÷ßu¾ç½7øc[÷«Ýˆ¸1®ÛËÝ·÷~ÄͰ”6s]Ó†6óðƧz—ûï¾û”ï¾å¾øcYç fá[ûµÛ b}˜F»¿†3 º]Þéq”/¹î÷ßðÆ£n—ûáŽ÷Ú¾ûï†5ÞúºÝn-÷¨c1·Õàgvgö×{LŸÝÙ÷dÝé†5›y÷P3 }ïï¾ûî·[î=Çw »žû™]¯Aî½ßñîÇž‹] ÿÿÝ@Í÷ß}ÞûÕÞûïµ½÷uu{™ƒ¾†¯ýûº»¦×mÒÃmÏÿÝï¾ë}÷ß jzÚ†;s^âÃÍýCýûÀÌ1˜yë»îí÷|1Ša fî\1­ÞËøcQ¶Åþûï¾ûî÷{P/xcV|êêïw¾×mèîwß{ýâ=aŒS§„A›ÕÙ?ÿ}÷ß}÷Ýow÷[ájûG‚0co¾Å†6óü1Þ}‹Ã¶ÙÏóÿÿÿáŽ*XcͺÇÛõ^xc·½OáFÛ†5[y_ÿÿ÷·+‚ûƒ® ƒC=ÙCu¾ÛßÞ ¶éøcU¶ÅÿÿcÇ›u]^(cmé¼w‚ÿÿÿÿx8@ !î†:ïjóîoãÉùü¸cS¶ÅáWöXcí¶ÿí¼¿ÿúЃÞ tÛÑà•ÁX-pV;Ü1×ïW+ÀÅàap_øcU¶¤ÜÄv'p1†5›t¿†5t¿ÿ|1ïÝW¾ûÊã•ûÂAg¾?½ÁÿÝwdÿÿþõÔjðJõ}Â%qn=ðÆ«oW‚W‚+À³áfÝ-Ý]–ïvNð3þÔm±øcÏê¯Wß}÷ß}÷¸cS÷UàI÷gv[×ÿáFÛÿwWß}÷ß}÷ßx5÷‚ ÁÜÈêßÿÿï÷ß}÷Ýï¾ûÇÿÿálý/ÿp[ÝT1¿ßw¾øcZ]jîWwÞ¯ÿÿÿÿÞ.u}÷ßsßqEz¾õþì¯_÷%̯Wuq¿ýÖûï¾ûï¾ûï»c[÷§ºßvÿz»ß»‘ÕEáŸþûï¾ûÇ}÷ß}÷§tGro?†5Ût»¥Ì‚÷»ßü1¨Û¥þûï»ß}÷Þ®»ï¼^¯G{¢ÿ½.»î·eÿ÷ß}÷ß}÷q¯W«ãÝëw»-Ù“÷r|1¬Û…ÿ÷{ï¾ûï¼ûšì†5Ûú¼ÏáŒPßÃWCÿwG2avÝ,1¶Üÿý÷[ï¾ûï¾á{½áWƒ_ k?µÿÝû±ÉÿýÊï¾ûï½ß}÷ï¿»£ºÿw»q®ßÿ½_}îâßuÂðÆ«ßWß}÷Þ C‡¾_y¾Ì6énÊæ÷ÿß}÷ß}÷=÷ßwÇßy^ ^kÏþã\È/ ®ÂÿýÔ¯¾ûï¼*ûî:¾ë}÷ûÍÿs#›vOÿ»ß}îâß}ðƧ{WÞ }÷ß k¶é{φ5Ûô·1‘ÌKÀÇÞŸ j6Ø¿ï†;mñêâßpÛîêûïÖû÷nìK±Úûk þêÏ_ j6Ø¿÷pE o÷ß}îûáyuÃï¿áŒTÛƒ7et¾í~ì‚äz=?ÿx"¼_z¾õ}÷Þ+ï¾×Íå»^ÞÏÞ›ÈõvWKÿÿß}îûï÷ß}÷ßx(½]îÊôwÃíºK½Ù_}Öïz~Ôm±~é¶Åû½÷ÞïÜ·ßuºß}ðÆcgUävºþïqïÿ†5lXcm¿ÿ¾ûï¾ðRûïWÃû}C{{ï¼ cVœëÿ k¶Ø¿ÿýÞûï¾ûï½ÝEs‚—Šë}Ç¿ÿá\Ý/ÿýðÇûÕCñ÷Þî=÷ÃÏ}\÷[œwïÿ k6Ù?ÿÿÿÿÿÿÿÿÿÿÿÿý¶So¼)ÿÿÿÿÿÿÿÿÿÿü1æÛ,1üé–Ûm‹ }·øc¦Û÷ÿÿÿÜêCoÔ†<ûªà·†6û©ÿÿÿÿ y¶ÅáSÛ<éèð^ÿßPÆåÔÜ‚§‚û^ç‚÷ƒÿÿÿÿ÷ Cú¬x< ÞAŽ›õ\‚÷÷€ŸÿÿÿþÜê¨ð ê¨ððÆÿzº˜c¶Þ® ᎟Õ^ðÇoì°Æû jçòøcY¶Åÿÿÿáýúðw}áî· ÜÜ aŽÛuÿÜ w ó eÜ afÝ/áFÝ/ÿÃ{ᎳõûuÅ jgõx+|1ªóÕàNðøcU·–Ûo¼1ªû¥ïG;áfÝ'ü1¨Û¥ðÇmº_õ .àÆÛz¼Ã¶ê¸ ^á[áGö¡6ýêÕoèóÛáfÞÆ«ï.Ûo݈﹈æ'ÿÿáÓÕowS†56ú¾û‰Ü owxc[?T1«·×î×îSÿ†5[lOáŽÛt¿ì@MÏWÝnXcQï«ÀÜ1×ïWáGöŽp% k6ô kfôp3Æ»o.ÖmåÝÕÙ8c]·Køcù¿ÿ vÛËûáþõ}áw W9Ü+p\nÎ÷ }ïîpÿÿðƶ~—ÿ÷ Þî-÷-÷ïV¯ðÆÛÜx¼ ¡vÞŸÿÿÿ¸·ßb® uÞÔ1Óš÷ XcÓß»Öoèó—׳Ñàe÷«±?Ý•Ý^G^Oþá÷ßrÜ*aŽå½\*n°Æ£oWÝ÷ýÑÞí†ݯîÄÿíÇsïpÇ_í\*ï†5q\o†5_˜÷Þpƾ/tKºøc]·KÝ/¾æGdvÿ÷¸cÿí\P'u vÛÕÁ VøcQýàFûïWÞÞ®ÛšÿÞÎb?½ÿ÷€˜cíÿ{ºÜ[ﺜ1¨þÔ1ÞŸï¾û÷dvGd½ßûÝÿ†5›p¿þÙÀŒóŠû–û–ûÎð j~õqavÞ¯ðÆ»o-Ýwxc7Â0ÕñkŸs5Ý]Ó k¶éa6çÿî÷ŠøcW?ç|1­jë}žð?}àg f3ú6ó»»]ÿwAjÀv#›¸ÿü1×ûG»Âî-÷»„o¾ã…ß¾ûÀÉàUyîÿ»£Ë½\ÈæÿýàNò¾ûï÷;†5óú¾á·ß}àðÆ»o-ã¾æº'îÄw]Ì®ßÿ¼ï¾ûáŽûÚ¸ãºÞ|1©ëjûïsÀ­à>ýÚíþî®êûî­ÿá¶éns»»î=Ãn ¼¡}5¨cSï÷ ¹€ xï}áïÞ¢Öÿ¾ýÝEàÿï¾ûïµ¹çx†5©½_q¡yß@Ǿ~ûï¼÷uîÈæ#²{¸‚Õü;^ÿû<Ô{ñ÷ÝáŽßÕ\pžïË j?õx½ßx/»E¥ÎdKÞ›¹àÞïwoÿÞnW j½â¸§sÜ4 Ãþê¸má7- ÛÞ¶¯Ã¿íûÄtÞKº»®ôÿÿxxc¶ßÓ›w}ðÇßsr»Â¯»Ü[op»&Åoà€3îÄÞ¯W§ÿü1ÞÎÇ(ºß j½Z¸4 Þï†;ÿjë|1«÷ˆâß½oÝ–äÃíºK²»+²;ÝîÍÿ᎛lXcm¿ï°ÇOí_ jgõuðÆ«šÕáW8]Êx¯;ÀŒ1­ó¨ð!xÞ¯†5Ûp¿v¾õÿÿ u³b÷`Eu·Xcr{”=çs…Ü÷p¸cS¹ÕÅ6À¥Ï±×CùýpÆ»oOÃí¶/ÿÿwW÷ôu·Ã™ýCòü1÷Uï†5kMW( †5+Nê¯ z¶»Àcÿîÿû¨ß w›ÕÊáLýW(†5sª¡Ì¹¹@m Fá@.pPÐÆ³Þ cÏîÃͶOÿÿíá›[šßû[ÿÿÿÿÿÿÿÿÿû³G¶ìØLa-·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·òPa~ ƒÅ@Ð0I„ø0rK@Á!º²N Áƒx¨Z 0ä~ ƒÅ@Ð0HßÉÁ„ø0rK@Á'GàÁÈl< ŽÁƒx¨XÍ€'¾HÁ„Ø0rKù°°`6;Aâ  `6—þF Ç`ÁÈl-ü˜ ŽÁƒx¨XÍ€%ƒ±Ø0rKù°½òp`6;Aâ  `6– Ç`ÁÈl-üŒ ŽÁƒx¨XÍ€%ƒ±Ø0rK@ù°çò0`6;Aâ  `6– Ç`ÁÈl/|ŒAƒ ñP°›KG`ÁÈl=üŒAƒ ñP°›KG`ÁÈÈÁ„Ø0rK@Á#G`ÁÈG/¿¶ûmÞ6Û²6Ûäm·ñ¶Ýão¿·–FÛmÛýüy÷ñ¿ŸÇŸyÞ6ßøÛnñ÷ŸÆÛmü78Ûnñ¶ßÆû|{½ñ¶ÿÆÞoüm½ñ·÷ÆÿßÏümçñ3ÆÇ¿rGë{Ç·sç¾7Noõþ6Û–6ó²6çü}÷ÈÞãm¿¶þ6ßøÛoãùÿ¶çoüm·ØÛnÈÛnq¶Ýão¿¶þ6ûì}·ñ·ŸÆßs¼þ6Ûøßoãm¿çþ6óøßoãŸOãÏ?¾þ6ÛøÛÏã}¿·þ6ÞøÛoác7^qüýãßiÇÿ«ÆÿÏ|mçxÛïãûÿæþ:{Î>ó¼o8Û{ãm¹ÆÛwzs½ïmö6ÛøûnXÛzÈÞãm¿¶ûyüg8Ûïãm¿çþ6Û¼mç8Ûoãm¿çþ6ÛøÛÏão¿¼þ=ûøÛoãoï¶þ6ßøÛÏã¬æñ÷~qöÝãyé#ÿ~Æÿÿo|{÷xÛo±öÞ±æßÇ¿s¶þ6ßøÛûã}¹ÆÛw¿çyÞ6Ûœm·8Ûß±öÝãm»#ß¿¾þ?Ÿäm·,mïñ¾õãÍ¿¶ïÛümçñ¶ßÆÛ}ümçñüüãmÍã}¿÷¾<ÛøÞão?‰¼™RX÷dÓœo:ìyçñêÚñ¿ß#yÿvþ<Ûì÷xöãݹÆû|öï}üm·8ûnñ¾ÜãÝë ô汘‹ÂŽÓ(±¸+Ó´ŠqýÙ¥FßÍcmÿ¶þ<ÛøÛnñüüãíþFûrdzÿmü7xÛoãm¿¶þ6ûøþoãmÿ·§Íüo7ñ¶ßÆß×…Œú–±ÓþH÷ÚÈÝ}ñöüãy¹Ç?¾ÇûÿmüyËäy·ñ÷½ãrß#t߯ûs¶þ=ÞøónqöÞÍ}š J´ÀZ-i ° °`ûXÐ ,ƒÃze¡™. ±NÐZI’Œ!šc†>dF=Û9#m»ÆÛrFûßmÛmü{78ûoXûnØÞnXßzñ½Ý‘¶ßÆÛrÆóÿmÞ6ÛøßnqæßÆûmÞ6ÛøTb_’:­¥¿õN›Çëoïþ6Þøô½ñ÷ßÇNŸcÙ¾FûsÓÍüo·ñ¾÷ÇßwæøNË&À·Zm "™ea„ÞhZÅBá£1¶Ø¡ÐÙs/:2”N@¼/eæ…ѶÞ/müm·ñößÇ›mÙíËÍü7ñ¼ßÆÛmüm·8Ûnq¶ßÆÛwöþ7-Þ7Þœy·ñ·÷ÆÛs‰ôSã{kÇþóßóæþ=Þøÿÿãy¿¶þ9íò>ÛøÞnØ÷{ãîŸ#y¹#ï?¾çÏö6¶~Ôh¸/$0kBÁ;ZŸ†J âçL´kçY£&@$ê´í2'†CзÛ8Éçõ±üß#oêѶßÇÛzÆÛs¶ïÍÎ6Ûøßnñ¶ßÇ›rÆÛmÞ6ÛøßÎqç߯þÿo^<þøÛnq¾ßÇ÷ÒÇÝ¿m§§¾7ûøÞ~ñï·Çû¯¾þ<ç|{ºøÝwñíæH÷ßã}ÿ·¾6Ûø÷ïã}ï!¬1Lq³E ¶- F €Ñ¨0ZhÈð1ó!¦ÎÓ$Ç¿fÈÛ~XßnØßnqîßÇ›|m·ñ¶ßÆûßíÞ<Ûœ}·ñ¶ßÇŸßmÎ>Ûøóïão?7¯mÎ7Ûøóoás¿ÇœWÇÝ;Ç·×ýç~§Û|{6Üt椺Òþ>çÅúý·¾>÷¶7ßäo=ñ·ßÆÛsÿéq™ÙñöúÈÛnXÛzñ¶ß#m»Æß}ö7óœy½ñ¶ýhßzq¶óq¶ÿÆÞyüoýñæÝãm¿·¾6ÛøþmxÛnñç÷ÆÛ}–L©F}ãÙéǾ}úÿÏ|~tÞ?Uþ7>§Ùütçò?ÿøå·Ø÷ßãoÿ¶çß|o·ñç[ãm»ÆÛÓ¾ùo[oÙoËov6Û¼mý8ÛoXÛïãmîÇÛsýþ<ÛKmÙ}Þ6ó¼y·8ÛÎñ¶ßÆÛÿm¯ùü{?8ûϱüßbyæ&qÿNqíݑϗØêµ|{Tümí8ßuxóï±Í}ÈÛãï¿·?î¹ÛÛÏü}·ñ¿œãÍùÅî`ôfÓ n……”-¿ÍHÛo±¶Ý‘¾ßcÏïüì>í½¤"¿‘À§­z&Ð,, ÇÛË ÈYÂÄ<àÇÚ¬pgÒƒ h(1ê }ñÝ‹¸XD}¶0‘¶Üã?Ž_s·§müm·xÛoãoï÷¾<ßøã?ãßk#þŸÇ[éǥ×ÇŸwiÓŽžwºs9}ýïî¾6Þäo78ûßãíè±·æ3_KâA “ h^ÈM )IŠà\8´$ ËÁ%ÚpI'LFoO „£m»#m¶±¶ß#}¾Ç›oJÖÐi ´›0]qA`Æ™D$Ð ¡L05ìÈ2=û–>MÒVKfm´JiÌœdT.C5³ ˆÆÛçq·œãmæãÍ»ÆÛs¶çÍüm·ñ¾÷Ç›|…‚ûûãz·Ç¾ÓÿïßN7¶øûuñÖû㟜ãÎÇZ¿ÇžßoümÿØÞ{‘þç¥;¼À´‹@£e™˜ EíÂYbBØ``-C/¾ co²ktØ$[`’£ ‘fN Ð.¾ÞFÛs¶þ7·ìmçÈÛÎÖi °° ˜Ó%‘ækt,¶"Æ‚K1Ý•Áðï0ó´È˜XÉÁÀž=ðÄþ5ÆÂÔRÆÂÁs@4¬ ÏÓ WDÖm°°T-8,f2Ø 9¦FM™£´É8b6Þ7¿¾6Û¼m¿ñ·ŸÆÛmüm·ñ¶ßÆßßmü*1/^=÷œnø÷ÛãÿÕãrïãs;ã¯58ó§xóØæœüWøöÛã}ø±¶æ»^K J41 °[  d…¢Á Sµ& I±×–O{ñ•`gµÁŸN”FÞíüo7ñöݱöÜl›r-`Z/kÄÃi” Žг %†YF ÂóFÌãÛ2$F÷c‚ñüܰÔæ…YQ €$Óm…§ùakƦ}ä·d{½Øóoãm¹ÇÛmüm·ñç÷Ç›wöþ<Û–Y3XÍüyËøëïxÞþHôml~›øûo㙩øëÍ|wñìßÇ4ßÇç×#Û?'d“Í4À¬d¬ƒ L6'õ>™(À±Û`4ö…ësA‰ƒh°´Zœ4Ìe;aXÜ\ÝVeU8$å–h_…ѶÛq¼Ù\m¶üm¼².|»Y™I& ’(a‰4`u³,ýDàÚpH3 !öØh•mÆ6þ7›øë6zFÛiÆÛ}öþ<Û¼m·8óoãm¿¶þ6ÛøÛoãm¿¶þ&vcN;Ýö9uµŽ«M±½ÿǧOÆéïÕ{Ç:ŸÇþÿüzvøûß±ýõÙ൩5)áÑhóî’Vá0$A„XŒt/cyüÅ2OéHk—™T0³/³Âô1m¯m·müm¿a;.\bRr¹–9í”9’†p4W0Õ&h› 0èXP^Æ#ݼ˜ÞÎ4m·ñæÚñ¶ßÇ»ß^<ÛøßnÈÛnXÛoãm¿?»müsÞœo7xž$Ïøê¶øþïã™îqÕiøêj¯Òþ9­¹ßö7œüt÷øßïã{?yÿýÙ}Î7³¬Í,Là$$]€%‹ÎÇÛr³µËÌõ“‚IÆI ûm̤m·ñ¶ÝãmïæîOØ3º¥ÆR™cyüÄ3ý³´ÓÛ’/2)¦‚Ö£aelиLð¦Cml4 ÆóæHÛÍZ6Ûn>óøóoão¾GÛ×¶×¶þ6ÛøÛoãy¹ÆßÝ·þ3müs4ùóöŽæ#ÏkÇ4çã§_ãSñþÿÇêÿǶŸÿþ?¿øóÛãÝׯ÷Ó÷³P.0ÑL °¸Ð¾6ó•š´lTd)ÂòÂä6÷¦xÛoãm¿·þ6Û”‡Œ± %­TË-˜ƒ©€i°Ézb6ÛÆ#{âŽ!”h\Ó Ç‚ÖƒÍ€A­À°Zi°3¡p¶bVkAbƒš`_ ÆþcÇ›jÑýãm¿½í¼×¶þ6ÛøÛ{ãmîFûyümç9lÄ3ã¶ü±ÖzñÍi¼Ûœq¾¼z´|Õv<óø÷Ÿñú§ñì÷Çû¿¿¾6Þäm¿yÜà$Òi%vTX9As™Ž[ëU}.,À¡ty¼ò6Ýv6Þ¼m·8ÞnÈßîC>/`³ÃBcI,U  !šà^4 z7ã }«ÆÊæ,0Ð+Ö‚Ñ“ar%˜Óa”5pٶͱ¶ß#o?¾þ6ÛøÛoãm¿¼þ6ÛøÛÎñýÜão¿‰ÌþG5µ±¶ë‘öÜãŸ.ñ÷UñìçãšÓñ÷ãÛOǼWÆõïL¿ý_KÚnO):‘.0®eËä…Ù™ë™Í°HÑ•Tà“”lY 5 FÛo|m·8Ûzq¶ýãm½ctÙÄC:4i³.íDZ¥†ai&hžãZaˆÙ·  #oáw'Ȳ SŒ1·¹!y†#m±Âão?þþ6ÛøÛoãm¿¶þ6Û¼m·8Ûîq¶Ýãm¿‰ß1¾>éü{mÈÿþØëwñè™øëßøöïãš™øÿºøöñÏŸñý[‘¼÷cÿÕãÝþ5Ê,`†%,‚Ì¡öùfÛ Õ/†2Y„;ÿ8^‘æßcoëÆÛü¼ùÙ«Gßw¶ç{Ë8ìlY bÀ^/ ML`hÊò¸-04O­Hv%©†7Þ4/ÌG›mÎ6ÛøÛoãm¿~þ6Þn6Û^6ÛøÛoãÏï6þ^b Ïìw÷øþõ,oNøý}xýTü{íñöëãzŸÇ>ÇÝŽunG¼×Ç›üg?~­eH2%Æ1!s…ñ·Üfv°3Ú¥à’æP.CÍ· Ò7þ²<ëJVà,/q&€bµÜfªh G ¾72þ:©ÿßüqS?vçÍÞ9©¯êÿ×ßi¯'ɰ 94À“)–8ñHÌy¶ˆCÄÙh-eÜÌ2Ìx€+ 8ˆ1áÀµ'€1¶€Ü,vët,>È <Ø 0dÀ´°±•$Ú”& æù¡jiˆÛmN†Ð2ò»R,´.I–‚Ñ€à, Æ0Ìsë¡$Vüa‹BÖ¶ƒAqf€a ‰®×6eMl,>Ø $-p±æ€ÓšdÕ¶Š…‘«2ÆŠh]1š0¡–ò‚ွbØ)07ÛîÃ.,Ö‚Ö°X4²B€à%‚ÀcÅ…©ð: \öÖ_î…‹è ;¬…¨0±ë`4á•xÞ…â¸b:ÍžLm·lm½ñæßÆÛm·mü{÷ñ¶Ýãm¿¶þ6ö¼{½ñç÷ÆóÿÝÞ:ÍÎ<þìn¿øôÿñ»Óñùª¼o9œt÷øþûãÛMãûÔãÚwÇû¿o='ÔÆL±*h/HÆŒ®˜iy…¦4¦hXÝ…¦›§4˜20 |\òæ…ê|4‹Æçs’7û¶<Ö…CÉlƒAyp´c†Kà†X‹i†œÐÀ H->0 y¥ºJ à ,ü<ÖìúàÁj€Çðcø1æEô›ÐTàÇÉ K¿1°´^7›ymö6Þ¼m·8Ûoãm»Çömüy·ñ¶ýão?¼þ7ÞøóoãÍ¿6þ6õ|sæ¹ÿr=Þì~½|rþøçï8ëºø÷ñÓžÜsêgÏ·ßüzf~?ê¾7OEdcab@à PÈþ J·ô xëfaq÷ûXûϱæßÇ÷ñ#泆ä-tñ¿šØþÍ–7/™#íµãÏèÑ¶ßÆÛÿÙÞ6Ûøóoãm¿¼þ6ÛøÞnq½œãïfãÍ¿¶þ6ÛøÛoãmÏÇõ?öûmþ9¯?õ_{^9­M×ǼWÇ3S,uõ|w/ò=§r>ëü{ìbÇ»÷Ž]>Æös·þ6óämÏø÷úñ¶ýãm¾FÛrÆÛiÆÞmüm½ñ¼üão6ãm¿÷¹müo÷Øóoãmï¶þ7Þœo7xÛoã{?¶þ6÷œmϼo$glu>§Ôïÿçß|s÷¼VœssõùÍ?ýïÕ¥Ž~ü¿þ=[N6ÿ²<þ¼}ï8Þûã}ëÆåùÆÛsìþ<ûøûÎñü߯Ûßmüo7ñ¶÷Æómö6Ûäo7ñ¶ßÆû׿çmÞ6Ûøóûãm¿¼þ6ÛämýñîýhþþH÷ÛãîŸÇ5ßÇþ÷o¾<æ¾?ª~=ó¶?­üo=ñÓšänvøëïV7¾øÿÞXßÿã{?޾|ç­¾ùmüogñö߯ÛÏü}çñ¶ßÆÞÿmüm·ñ¶ßÆÞ}6þ6óøóoãy»ÆÛo|m·ñ¶Üãm¿§²@Âì8Šÿå€|ßþd@ƒñ_ü°›ÿÏi~€Ðì8Šÿå€|ßþX0ƒñ_ü°›ÿÏÓ¶àÁÀoÿ< Áƒ€x¯þXÍÿçéÓ€Ðì8Šÿå€|ßþp0ƒñ_ü°›ÿÍéªàÀhv ÅòÀ>oÿ4 ‡`ÁÀoÿ2 ‡`ÁÀoÿ8 Áƒ€x¯þXÍÿçézA€Ðì8Šÿå€|ßþx0ƒñ_ü°›ÿÍ´¿Á€Ðì8Šÿå€|ßþX0ƒñ_ü°›ÿÏÓ5€Ðì8Šÿå€|ßþh Áƒ€x¯þXÍÿ甾Á€Ðì8Šÿå€|ßþX0ƒñ_ü°›ÿÏÓ;¡Ø0pÿËù¿ü°`4;â¿ù`7ÿ›ÓûC°`à+ÿ–óùàÀhv ÅòÀ>oÿ=¥ö ‡`ÁÀoÿ8 Áƒ€x¯þXÍÿçéß¡Ø0pÿËù¿ü°`4;â¿ù`7ÿŸ§> ‡`ÁÀoÿ< Áƒ€x¯þXÍÿçéo¡Ø0pÿËù¿üà`4;â¿ù`7ÿŸ¥æ ‡`ÁÀoÿ8 Áƒ€x¯þXÍÿçéoƒ¡Ø0pÿËù¿üà`4;â¿ù`7ÿŸ§6 ‡`ÁÀoÿ,@ƒñ_ü°›ÿÏÒÞàÁÀÿ›ÀÂàgp3þßnðÆ£o/ÿÿ†6Ûdþàgp3¼ ^. ÑÁz8/¿ j}ê~Õmå†6ÛøcU·Kÿÿþóû[ƒU}Á}ðÇMº¯†5uÿx-†6ÛÿÿÿýÁl1îö¯Ãkp^/Ç_º¡½ü1ªÛÑÀO j½ôág¾^Õmåÿÿÿ y¶Èõ½ïÇÛz¼ ^/¸-¾ð1†5;ÕC¯½{ÀÇÝÌžÕmÒÿÿ÷ÃÌò½Þï½ß{¼ w÷¿¹Ñ•ÌhcY·K m·$1ªÛ¥ÿ†:mÒÿ m·RûïWß}÷ß|1ªÛ× k6ôxagÝ-ä~溠cY·— k6òƒͼ Ç›}†5[y|1¨Û¨ÛnÌ1×ûO†6Ûûï }÷ß}÷ðƯî­àc÷3^G_ k6éa¶øÖmåC­¼¨cU·K†5qºŸ÷«Õ÷ß}÷ßx¼ ^G®ÖeîvuOÃͼ¯†5[u?ûïwß}÷ß}÷ßí_x-†5›yxc]·—ÿðÆ«n—ÿ}÷ß}îûî·ß}÷øc]·— k¶òøc]·—†5Ûyá¶æÔmÒÿß}÷ß}÷ß}÷ß~×mÔ¼ÝäÃmÜ1®ÛË÷b;ØŽb:Ûnï_ÃmÕ}÷ß}÷ß}÷ß}÷®æ#¥Ý]—†5Ûyxc]·–ô}Ó bØN» j¶òøc¶Þ_ m·7[Õ÷ß}÷ß}÷ß|1¯ŸÖäguÞÁvÞ¶øÛoávÞ]Ñ•Öév#î¯áFÝ.Ûoý÷Ýo¾ûï½ß j~õ}û¢:]È·;Ó k¶òÃíº¡¶åv%Ðû™žŸ yý8cm¿á¶õ}ã¾ñß}Öûïâ¾ñÞ‹2†nÌ-Üåß k¶Ø°ÆÛeá¶Û m·Ù_†5›ya¶ç j¶òÿ m·ü1¶ß¾ûï¾ûï¾÷}ûÁÝÈ×må» Å-ðœÀdg m¶¼1®ÛË m·îÉwgdáVÞ_ j6é|1¶ßûÝ÷ß}÷[ï;ï¾ôzCïíol5Ûe™Hc]·—»Å?°˜3vGBa¶ÿáFÞ\1¶ßûï½_{¾ë}÷»ï¾þ×måîÌm±˜×må÷b;¦ìG2:†5[y÷Šûï¾ûïwßyß}÷íÜŽÉ{pÆ»o.×m廣Éu{±0Æ«o,1çßðÇm¼¿¾ûï¾÷}÷ß}÷ß}à»^Ü1¶ßÃmëv#™ívL1¶Ýü1¶ßøcmº¾ûï¾ûï¾ûï¾ûÿ†5Ût»ÉÜ×":»³xc·Þ_ðÆÛ~ûï¾ûï¾ûï¾ûïÝ1Š»a(i€FìGݾíº'áŽÛt¿†6Û÷[ï¾ûï¼&øcY·«ï¾û÷ cí¿v3 âÌ«¢:#Ð1‹a dìOv#îŸ j6Ø¿÷ß}÷ß}÷ß}Ǿûîγl…Á…ØŽŠîŽ×mÍvK±uw¯áŽÛl_†>Û© m¶Å¸·ß}÷ß|1ªÛÕ÷ß}÷Ý’á{™‘Ù.„Üêæº3²;þÔm±á¶úâß}÷ß}÷«ï¾ûï»VT:êGÝ{ÈìŽêèŽetgD†5[yÿ¾ûï¾ûï¾ûï¾ûïÇF÷Bú_øcm¶/¾ûï¾ûï¼Wß}¸®|1¯³ÒðQá|þ_ÿÿï¯ ¾ûïwß|1«ŸÕ÷Þï¸ûÀ±Ôð4þÕmÒÿÿ m¶Éß}÷œ1©÷ª÷}÷Þ¯wÜÞï¸>÷ kfõÿÿÿ†<Û¥ÿÿÿÿÿü1…߆6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmû¶Tç0†0¤ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ÿÿÿÿÿÿÃõµþà` ðÇmºÆ§n—ü1Ûn§ÿøc–Û$1¿½Xcmº°Æþ÷†>Û« vÛ¨à†:mÞÞnÿÿü1¾ÝXcùýCo|1Ö~a·ªáŽÛu?áVÝ/ÿÿþ÷îpÇÛ÷ o=áÖš¸c§ÝOÿÿÿþÞn¦àp ðÇMú°ÇÞþí· c}ïÿ j¶òÿÿÿá¶êÃíõx u÷ªÛïáŽÛupÆ£ú¯ j¶ê{Æ^ÕmÒÿÿ÷†:oÍ༠¼ ¼°ÇYù†;{kÿ¾çpêÖmÒÃmÉ j¶éáŽÛt¿ðÇ÷Ö^/!þõöõ†5[z†5zÿ½<1­›¥¸]Ì· Ƴo.Ömå5›yA6û j¶òøcQ·P1¶Ý˜c¶ÞŸá¶ìy¿ uþÖë7áŽßÚáVÝXcY·Wî1]ÃͺXcí¾5›y\1ªÛ¥Ã¸FÝOøcÿ~<®pLÜ€1ý÷Ü aFÞ°ÇóÿýÂî2ü1¬ÛÊøcU·Sÿ†:™þë½Ç›îp\î@ÀÀ&ðBðBð kmZü1®ÛËÿÿ j¶éöÈO<Üï¼3„Ü“ÓÀ«Á'ùý^^ÿþÛnaFÝ/ü1ÿß|1ÿÝW‰÷§ß}àu÷ßýÆXc]·K m·ÿ½<††6Û¿ýÂ@5÷0î ß}÷Þûï¾ÿî\1®ÛËîå b–ØN¸rqáVÞ_ðÇÛz†;ûñðÇm½_}÷ß}÷ß}þï¸Ü1®ÛË m·ýÛwvœÓ±9›²ðÆ£n—û€ƒ w÷Ô1·ß¾û€8ó}æûï¿»NiÌ·°Æ»o,1®ÛªÛnG;˜gžã¾ÿ†<þŸÃmêÀ0ÍÀ8Ü_p0ï¾ûï¾ð*áiÓ¸pax\h1®ÛbÃm—†6Ûnã»'wÖmå†6Ûœ1ªÛËÿÃmûï¾ûï¾ûï¾ýà/¹…Ü=Ô1¶ÚðÆ»o.èï¹øcU·—ú_û¾ûï¾ïÖÕÀÅ÷ß}íîÖýëq…ÜÈ5Ûe½!vÞ^ãN÷ ±;1¶ßü1¨ÛËý¿á›ï¾ûï7ß}÷߸ÝÍÃí¼¾è­Ûwq— j¶òÿï}÷;ï¾ûï7ß}ýØÝ»˜? k¶ò÷ ¸‚»™8ðÆ«o/ÿc ß}á¾ûï¾ûï¾ð.Öojì;ï¼þ×mäÞ'bpås»Ãmßþûn£Â}Á+ï¾û•÷ß}÷§ß¾ÿ¸ËÜ9\®ÿþ—2eûï¾ûï¾ûï¾ûû˜ï?q§kÜwÞÿp}÷ß}÷ß}÷ß}à$1«OTqŒ1‹a(hãp÷¾ûþÔm±ï}÷ß}÷ß k6õ}÷ß}¨'sw‰ÂÕÝÆ®îÉâ¹ßÿ†>Û© }¶Åß}÷ß}ûÀKï¾ûî`ýÚrw O+÷i÷þÔm±ûï¾ûîWÞ ¾ûï¾û‡»žÝûÓîtn\1ªÛËÿýÀe÷ß}÷ßr¾ûï¾ýåÿÿ j6éá¶Ø¾ûï¾ûï¾ûï¾ûÀ$1ªþÓðƳû/ÿÿûï¾ûï¾ûï¾ûïï/øcU·Kÿÿï¾ûï¾ûï¾ûï¾ð/ÿÿÿÿÿÿÿÿÿ aI·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~¶Ud<4†0¨ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ÿÿÿÿÿÿÿü1ÛoOÿÿÿÿÿ }·ÿÿÿÿ }·§ÿ j6ò¿ÿÿÿÿÿÿÿÿÿÿí¼¿ÿÿÿÿÿ½xcU·•ÿÿÿÿÿ†5[yA¶þÕmå†;måÿÿÿÿ j¶ò¡VÞPcU·”ÛoáVÞWÿÿÿÿü1ªÛË m·ÀÆ«o+†5yÿÿþÕmå÷í¼¯†5zøc¾ÿÿÿü¿ÿ†53úÿÿÿþÛoÿûÀ¥ÀÏÿÿ k¶òƒm÷îÓ× m·ÿÿpÿÿávÞWÿ j6áìg·7Üÿþéøc]· m·»Ýÿÿß}ÿ÷ðÆ»o,1®ÛÐ1¶ßîßt¿øcm½[À&à÷ßÿýáavÝ,1¶Ùxcm·ÿ j¶òÃmÎÕmÂÿðÆÛ~é¹Òûï¾àwÿøcm¹Ãí¼¿ðÆ«o/ÿáÿ¸á7ß}Îà?ü1«û‰y`1®Û-é k¶ò÷o½a¶ÿÿØPp^ûï¾ûÿ÷†5Ûy~ò bÆØPnw®Ômåÿî ß}÷ß~ð=û¿ávÞ^îòîøcQ·—ÿ·ü3}÷Þo¾ÿûµwwøc]·“þÛoÿá¶ôp/~ûï¾ÿ†5ž­?vÿûßÿ᎛Ú8¾ûï¾à^àgû·v¿ÿÿýÝ÷ß}÷ßÿv·MÚþîïÿý÷ß}÷ßîû˽ÿá¶é{ï¾ûï†5¶z¸ýÎï»ÿ»_ÿûï¾ûï»»¸ýÛÿºO<1ªÛËÿþÿûWß}÷ß}÷ÿÿÿÿÃmÒûï¾ûï¾ÿÿÿÿÿï¾ûï¿ÿÿ†5[yÿþûï¾ûîÿÿÿÿÿ¾þýÀßÿÿÿÿ†0¨ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿¶UáX4ÿÿÿÿÿÿÿÿÿÿÿÿ }¿¯ tûÓ†;δÿÿÿÿp3ÿ uÛÓÿÿÿÿÃïi }¿¯†>ÛÓÿÿÿÿÿÃ>ÿÿÿÿÿðÇYý? j6ôÿ†5[yÿÿþð%þôÿ÷¯ j¶ò¿ÿü1ÖL1©·×¼ ÷;Å j¶òƒmü1ªÛÊÿÃfêÃ?õáLþ¾ÔméûÖí5[yPÆ«o(1ªÛÊ m·ðÆ«o+ÿü1Óï_Ãí÷–óáVÞXcm¾5[y_ÿáËúCíâxcªs¬1¨ûÒÔïkáVÞ^çv¿ j¶ò¿ÿá‰7Ìýîwˆ1×z(cÿÿÃïxcU÷§ÿÿÿþžy‰àc¯Oá×ÚÜ Ã:z†5;Ú†7¿æÕméÿÿÿÿ†=ÞÖà†:mêàg w»Ô1×ß·€`cÝï knôþãXc]·”Ûo¾>ƒ7§4í;_þð8»¾çp1ýª{À+ûÕÌBð Ãí¼¯sO[¿ÿ užÑÈwß}ÂnaVü[À01¯³×Ý{µ k¶áa¶ïâÆ ÎäžNeÿì`à&ûï¾ÕÏêà&à&×™ú¼!|þ»½ëávÞXc]· cm¿w½w¯ÿx jmõy9ß}Âam¼W7ØcY¿¯»_ k¶éa¶ËÃm¿wðÆ«o,1¶ÜáVÜ/ÿ¼ 8 ¾ûï¸MðÆ«WÛ€|1¯:µû½ÝÜ1¶ÜávÞ]Îç½pÆ«o/ÿÞϾûï†5[z¸ ¾îîà&à&ÕméÝ»à1®Û-é k¶ò÷ßï1¶ßÿûÀãï¾ûîWÜ&ûï¾à'ÞíÃí¼¾û¢îÓ²ÿû~ûï¾ûï¾Ö{êûûÛ¼/†5Ûy}äñn4çÿ÷'Ü ß}÷ß}÷;ïø béÜ. ‡®ávÞ_†5Ûy7ßx¯ºÿþûï¾ý÷;œ1«¾ÕÀMÀà p·0×ýÚÝÿü1×ßï¾ûï¾à•÷;„ßÜм{ms¹Ý—ÿà ˜Íé}÷ß}÷ï¾ûî·/v'euw¹·?y?ÿýÀ}÷ß}÷ß}Â/¿w»½îûÿÿûï¾ûï¾ûï¾ýÝÇáw¼-ÚïNdé=ÿ¼ _}÷ß}÷Þo¾ÿûÄé=:nÖÕmåÿÿxp}÷ß}÷ï¾ûü1­ŸËÿÿÿ÷ß}÷ß~à^ûï¾àp ¸þÖ{åÿÿÿ}÷ß}÷Ý]ß}÷ß}ðƧ{OðÆ«o/ÿÿ¾ûï¾ûï¾ûï¾ûïálÞ·¿ÿÿýÀMûï¾ûï¾ûï¾ûïÿÿÿÿÿÿÿÿÿ¿¶V^|0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü1Ón§ÿÿÿÿÿÿÿÿÿÿÿÿ†5[yÿÿíàì ÿïN׆5[t¿ÿÿÿÿ½=pƳn–ÛnHcU·Kÿÿ±ü3ÿÿ»½pƳo.Ömå5›yA¶û j¶òÿÿÞÿÿÞ^ÖmÒÃmð1¬ÛÊÿÿÿÿ j¶òû¯áfÞWÿÿÿÿÿÿÿÿÿÿÿÿÿðÇMº®ÿÿzt°Æ»n–Ûoÿzvÿûxÿ j6õÿî— k¶òÿÞ¿ÿÿýëÃí¼°ÆÛÞžNÉéÞëÿÿÿº¸ŸávÞXc]·T1¶ÜŽ·û×ÿÿÿ}Ì^×m±a¶ËÃm·îðƳo,1¶ÜáVÞ_ÿÿÿøcmµávÞ_»\1ªÛËÿûµÿý倯»l·¤1®ÛËûÉÇÃmÿÿÿÿü1®ÛËÿÿÿþ×Ûëÿº|1®ÛËÿÿÿÿýÞ? þ×mäîÿÿÿÿýßþõÿÿÿûžðo»/Ý?ÿÿÿýÊì¿y=ÿÿ†5Þúû¿z‹§ýÌžï_ÿÖÝÿ÷†5ÛywÿÿÿýÝÙ~ï½aVÞ_ÿÿÿ÷—ÿÿÿÿÿÿÿÿÿÿÿÿ j¶éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¶VÛ˜-ÿÿÿÿÿÿÿÿÿÿ÷‚®Ûú¯ }÷S¼ÿÿÿÿ¼ Ã}Õ¸(Þ øc¦Ý_ÿÿÿýɆ>÷øcÞ¶¾íçSÿÿÿÿ¡`n |1Ûά1¶ßÿÿÿÿøc§¾ÆÿÚþí·§ü1ªÛËÿÿÿ ojÐ1϶ß­¯x ÿ÷EuO j¶éÿûxÃýë¸(ýo?ûÕÚèïhcY·K m·$1ªÛ¥ÿÿÜ!ÞW€àfð[ÿº6êfÞ\1¬ÛÊ k6òƒmöÕmåÿÿ†6þæéý­àox†5~úÿïGK¢pƳn–ÛofÞWÿû < ÞÝào¼ áfÝ_ j¶òûÓðƳo+ÿþó^÷‚笶þð2ÿÿÿÿÞÏ$1¨÷ªö}à¾ï÷®Õokÿÿÿÿ}÷‚÷ƒÞ~ð3xÞ ÞaWö¿»Ó†5Ût°ÆÛîÄuW£¢ûï¿ tÛªð;xhc¿ö¯;ÁîŠû­ÐÜ1®ÛËï#Ù׺'ÿ}÷ÞïwÞûûýo0Æ«o_v ¼3ÝM k¶òÃmÿyÏãÕ'dÿî·ß uÞÕ÷ßx¼ ùý^pÆ«©ÖêGk£?º6×må†5ÛuCmÈë}ÿÿ÷Þïwßxï+î}þöÝavÛÛl¼1¶ÛwDtK¦Ömå†6Ûœ1ªÛËÿî-îûï¾ûáGö¯áfþ¡<ÿî»­ðÆÛkÃí¼»ª¿ðÆ«o/ÿß}÷ßu¼=žûÀÍàvðF÷U¾í²Ì¤1®ÛËÞïü1¶ßÿûï¾ûï¾ûá}¾¯;ÿuÝpÆ»o/Ý?ÿûï¾ûï¾÷w¾×mêð;x¼Ã¿½.K÷_ k¶ò÷d÷»§ÿß}÷ß}÷ß}§}ëߌW;…F ©>×mäýÖÿÿ±€Cï¾ûáW«WÐàbç†5öú¹Çz¾ÕïjÿÿÜz]ÓïOtK¥Óÿïß}÷ÃÎ}àfð3qÇ k7õ}ý÷îäzº][ÝHûÿÿx_}÷Þwßsœ1Í=ï¾Öïk}û®äGßý÷Þ¿ÿx¾ûï¾ûƒîXc_Mjç·[ïw»ïïGe½£Ñ7r:ßÿþý÷ß{ºÃ¯½\àVÖzµ}÷ߺï#Ùÿ½wºÿÿÞ÷ß|1­·ªÂ›o8cr÷¾ûïÞ¯¹ÿz¾û½øcU·—ÿýØ ƒ³«Wß}ÔpƶW[Çx{†ß}ûï†5žyÿÿþð;}÷Žë}÷»Ô1«ŸÕîûïpƯûOþ§/ÿÿûï¾ûï¾ÕÕ:­÷»÷ß|1¶ÿÞáVÝ/ÿÿ¾ûï¾ûë]ﻎûï¾ð7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¶WX¼1ÿÿÿÿÿÿÿÿÿÿðÇžúøc§¾·‚¾ë¼É jgêöêCúXcÏoÿÿÿáwªÜn7‚§­ ÿRï·WáFÛ cyþÿÿÿîÃxc}íaŽóõa÷µÃ>ê jfôÿÿÿÞ!~ê¸Ü A{ˆ/p1¸Ü n8cíù†;ÛT ½ÿÿÿÿî€ m÷ cj¯¿uáŽÛu8cSý¯áVÞ_ÿÿûŽ/cïín8c¯ÝVÀNèc·Ý_û¥Ñ<1ªÛ¥ÿÿío {÷«‡€Ècùû¸‚÷°Æ§ßXc¶Þ¡÷¿áVÞ\1¬û˺÷D†5›t°ÆÛrC­º\1¬÷Ëÿþð^WÜA;‚s¸%¸ܸc¬ÿ¼ ág¾¿ºß»‘ÒÖmåÃͼ Æ³o(1¶ßaæÿÿûï¸û„ï¸Àí÷ýam½_ k6òîŒèŽáfÝ,1¶ßͼ¯†5sõ?ö3ï¾ûîç}÷»á޶~ÕÍÕ o7áfÝ\1¬ÛËÝ/þÖmåÿÜ[ï¾ãß|1©[U y·7Û‚Ð3pZ~÷zßÿÿÿ }ýÇ€‹ï¸îûî †ó†5_z8<°Æ¶Õ¯†5»yü1®÷¥ÿx¸-»Ü}÷ßyÝo†5[z¼ ÞpƳûN쎩†5Ût°ÆÛî¾äOÿ}÷Þá\þ¯¾ûï¾ûávÞ½ë¬þ×måÃí¼·‘Ѻom×ÿÜA0cÿ¾8-¾ó¾ûï¾ûïWÞávÝ-êû÷W†5Ûya¶ÿ¾êïW£­÷ÿû‚P^îwß}÷ûï¾ûï­«ðdë½Èû¯ k¶òÃíº¡¶äu¾õïÿûï¸>ûáVþ®-÷ß}÷ßuÇfvGTÝ1®ÛbÃm—†6Ûnè¾ü1¬ÛË m·8cU·—ÿÜŽàÛá\þ®o¾ûï¾ûï¸/¸%î‰ m¶¼1®ÛË÷_ j¶òøcU·Kÿ`”V® ß}÷ß}÷ß}þñn¡À1®Û-é k¶ò÷Ÿ½ðÆÛ†5[t¿ûÁ[Ýã¾ûï¾ûï¾ü1¯Ÿ×t%ä†5Ûy~ìnéÿü0¹›ûÞ;ï¾ûï¾ûï†5óú÷K÷§ k¶ò÷O½?þð?}÷ß}÷ß}÷ÞowµÑî¦tü1®ÛÉýÓÿï;ï¾ûî}÷ß}÷³Ùàtè—K§ÝSÝ7R:øcQ·—þûï¾ûï¾ï}÷ß}÷³¤1‹sá(dìÀ1¯Þ,ÉwDz:ÞŸ¿ÿö0 qo¾ûï¾ûï¾ýû¦è—D{=®·_u¾ÿÿÝwß}÷ß}÷ß}û¦Ű0 u÷»•.—Néºß}ÿÿÞO¾ûï¾û½÷ß}÷›’³ö mz¼—Tûïÿÿ¾ûï¾ûï¾ûï¾ýÖët¿÷/í¼¿ÿï¾ûï»ß}÷ß}÷ýí?ÿÿþðF}÷ß}Ǿûï¾ûïá}@ÇŸÝ÷ŸÿÿÞÏ÷Ýï¾ûﻫï¾ûÀëÿ†5[t¿ÿûï¾ûï¾ûïºß}÷Þϸc]ï¨c—÷ÿÿÿÿöàrÿÿÿÿÿÿÿÿÿ¶WÕØ0ÿÿÿÿÿÿÿÿÿÿÿøc}º¿†;{ÔáŽûu8cQ·P1¶ÿ0Æ£n—ÿÿþöúÈcíº¿ÿÿÿÿøcuܘcôö¶·Ã¶êÿý?ÿÿÿ᎟uaFÝOÿÿ j¶Ù?ÿûÀËÀÈcûáGÞ˜cU·§Ã­¼¿ÿÿÿxÃýÿÿþÕmÒÿÿ÷ ïÿZ_ú°Æ¯ïOî›Ü1¬Û¥†6Û’ÕmÒÿÿÿáŽßzÿÝ|1¬Ûˆ5›yAfÞPcm¾Ã­¼¿ü1Ón§ÿü1ªÛ«÷¿ÃͺXcm¾5›y_ jçêÿqww?ÿþÖmåÿþñ½>ð/íº¿ÿÿÿÿ}÷Þ<1¬ó«øc]·KÿøcY·§ÿº÷ßÃÏ}a¶æÖúµ†5_ÕÃíºXcm¿ÿÿÿ j½Z¼;ág¾¿ýåávÞ^é}ëÿýûÀXc_g¯Þn½â†5Ûya¶ÿ¼ž¯W¨c[gKÿÛÀ'Þ_Þ{ÀKÿðÆ»o,1®ÛªÛnOÞ_ÿ÷‡s÷Ãÿ}w§[«¦×m±a¶ËÃm·Ý,1¬ÛË m·8cU·–Ûoÿøcÿî}àŸx x/î[Ó”1¶ÚðÆ»o.éþÕmåðÆ«n—ü1öÝ^ð/¸)÷ßÃí½oÔ5Ûe½!vÞ_ܼ1¶ßÿû 6è{}àánö¯ýÈw#†5ÛyÿÿÝ;ïþððØc]ï¦é1[ø% >×måî¾,“Ü¿ÿ¾þëß}àž×ïhéÿ†5Ûy?ºÿû‹ÿ}÷ûƒ¯¶_½û¯áFÞ_ûÀÿý÷ßï÷§Ü¿ÿÞÿï¾ü1«ÞÖå½½\OávÞ]éåÿðÇÛlŽÀÛÀ¯ûï¿ýÊû‘n—½ÿÿ¾ûïw^ëðÆ-m„a–åyÿü1Ûn®ð>ûïO÷¯û®Õmåÿÿ†?_kïï{ï¾ð'Ãï}>ÖmÒÿÿü1Öß_ß|1¬÷ªð:ûï¾ð7ðÆ»oOÿÿÿï»÷ßálÝOðÆ«n—ÿÿÿ¼¼ß}÷ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¶XRü1ÿÿÿÿÿÿÿÿÿÿðÇôý tީöÙ8cQ·RÔoÒðÆ£n—ÿÿÿpQ†6þ« t÷׆;oÕ†6Ûïÿÿÿÿ÷þÔméÿÿÿÖ‚÷CÿU¼ œœ1¨ó«x*ÿÿáVÛ'ÿïëÀ²ðCx`cSo¯ j7ôíý j¶òÿÿÿÝ ÜŸx¯¾ðC jéõCÝÿÿy~ÕmÒÿÿû‚ ÷0C|1«§êðC {÷᎞óÿ¸Œè®—ttÃͺXcm¹!VÝ/ÿÿpý÷ßx{ÀÍàfÔïk j>õýÙ;¢5›ypƳo(1¬ÛÊ m·ØcU·—ÿþàŠw@³î·ßz½Þû¢;¯†5›t°ÆÛ| k6ò¾ÕÏÔÿÃÏòðçß}îûï†5ÚÃÏ=º k6ò¿ÿîÀ©ìûï¾ð«Á¯¾ð7 jçêøc]·Sÿÿÿï¾û÷ß½ßxøc͹ÿÿÿû ]÷{ï¿ vþÕàŽûÝçávÞØŽ‰†5Ût°ÆÛïW1Ríÿï ¾ûï¾ðW}îûï0Ƴï^课òpÆ»o/zºÝïï'ÿ}÷ß~ðG}÷ß}ûÁ}êþðÈc]·–Ûo÷[½÷]Úõuÿö÷ß}÷ï¾ûïîK¢¾þëÃí¼°Æ»n¨cm¹êëÿÿ}÷ß}ûï»ßy^WDv¾=3Ý1®ÛbÃm—†6Ûnò:™÷áfÞXcm¹Ã­¼°ÆÛÿ¾ûï¾ûï¾ûï†5_Ú¼Cͽn›Ë m¶¼1®Û˺o¿Ã­¼¾ÕmÒÿß}÷ß}÷ß}÷ÞÏnñp×m–ô†5Ûy{£qívÛoÿý÷ß}÷ß{¾û÷ánç]ëtHc]·—ÿÿý÷ßqï¾ûᅥ5[z÷K¬1‹a d-3ávÞ_ÿÿß}÷ß}÷[ï¼<ÿíqô ÀcvÂsÕ>×mäýÖéÿ÷ß¾ûï¾ûïGáËþÕ§µº½Ó÷DñèŸáFÞ_ûï¾ûî-÷ß}÷ïípƳoW–ëÞ®ªìŸtºÝÿ¾ûï¸Vûï¾ûÝà†ð/ k½õtº÷Dz:]·Uu÷ ¼3ÿøcí¶G‚çß}÷ß k9­C}ûÇ}Ámý÷HcýÂ0Êô}þé½^‚ðÍÓÿû«>ûï¾øcÒ÷º‚Ý÷ß½~õ}û§½ÿþûï¾ûî ww}÷ÝÀL1©ÛÕàotAxfëÝ÷£ïí¼¿ÿï¾ûïç{¾ûﻂ·p›á}ž—§ÿþÔm±÷ß}÷ßwß|1­ŸÕ÷ßíºŽžýÿÿÿï¾ûï¾ûï¾ð{ï¾ÕÍëÿíº_ÿÿ}÷ß}÷Ã÷µ}÷»Ç w_k j·ªC¯íÿÿÿý¸) ÿÿÿÿÿÿÿÿÿÿ¿¶XÐ1ÿÿÿÿÿÿÿÿÿÿøcͺ¼1öÞ¸cﺶåþÔoÒðÆ£n—ÿÿþàc†=ëU ïá˯†>Û« }·ðÇ_º¿ jçÙ?ÿÿýÀFà†7û˜cÙïpZaŽöúÃ}Õ†5u8cW>Éý?ÿÿû{Ãýê÷náþÿ v÷«x*†5õÿðÆ«m“ÿýÀ ¸˜côö¡Žßz¼ƒ}àfÔoéÿ j¶òÿÿÿáýøà¼ÞW‚c®ÝWûÀýøcí»î—DðÆ«n—ÿÿ¼ßxkÂ!ŽÛz¼ßp[}à‡ j·êðƳo/ugK¥Ò÷†5›t°ÆÛrC­º_ÿýêûî Á{­÷öê½Ã­½pƳoHcU·—Þ¯ÝUÖÖmåÃͼ Æ³o(1¶ßaVÞ_ÿ÷Þ<1ÛWßx~ð7 j·õ†<Û´1¬ß×÷KïðƳn–ÛofÞWùúŸýàlðC}Á·ŽûÀÉêü1«û«þõü1®ÛËÿÿ¼ß}÷ßx¯¾øcQ÷¬1­Ÿ×†5Ûu?ÿÿý÷ß}÷ß}÷Ã}ñàuá½çÿÃí¼¯áW½/ý÷ß}÷ß}÷ÞÏ`Æ«ûXc_oWÞŽ¼1®Û¥†6Ûÿrwdtÿ÷•÷ßxï÷ß¾ÿÜ—Dºøc]·—Ýo÷K¯ÿ{¾û†ß}÷ß}÷Þpƶó­ÖþèÆ»o,1¶ßîF}÷î—Kÿý·ßxï¾ûï¾ûïî‰u5ÛyavÝPÆÛr>ìŸÿ÷ß}÷Ýï¾ûï¾×mêð#º%ÓtGHc]¶Å†6Û/ m¶ÝÕŸáfÞXcm¹Ã­¼°ÆÛÿ¾ûï¾õ}÷ß}÷ÞpƳo[®èφ6Û^×måßðÏáVÞ_ j¶éïwß}÷ß}÷ß}÷á¶þño€Æ»l·¤1®ÛËÝT^ü1¶ßÿûïwß}÷ß}÷ß}ýÒòÝ^×må÷[§Ý?ÿw¾ûÅ}÷ß}÷ïí_†5}N—[ª¾ÿ k¶òÿºÿþûï¾û­÷ß}܆?Ÿ÷ÛÁ1¾ÿCÍíšûÿ k¶òw¶érý÷ß}÷ßu¾á[‡‚w•·´1®ßËu{âÞ^ô÷Uº_áFÞ_ûï¾ûï¾ûƒo¾ýàlð3ºµÑ½Òêžé½ÿþûï¾ûï¾ûï¾ûÚé܉Ýw›ÝÒÿÿ†>Ûd}÷ß}÷ß|1¬ÛÕÜï¾ý׆1gø% bðÏÝèët¾ÿÿï¾ûï¾ûî¸Vûï¾Õîuî·K²ýèý×ÿý÷ß}÷ß}÷ß}ðÆ·ß[¯tû¢^—Dí¼¿ÿï¾ûï¾ûï¾ûï7•ë j÷²þ×mÒÿÿþûï¾ûï¾ïýUç}᯿Ã=ëÿÿ÷ß}÷ß}÷ß}ᯠ¼/ k½õÿíº_ÿÿx¯»ß}÷ß}÷ŽûÝà‡áWÞ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿû¶YM<0ÿÿÿÿÿÿÿÿÿÿÿ÷ÿðÆ£~—†5t¿ÿÿÿÿÿÿþé¶ÉÿÿøcW>Éý?ÿÿ÷ÿÿÿ†5[lŸÿÃ=õü1¨÷« vþÓþÕmåÿÿÿ†?3Zÿÿ÷_†5[t¿ÿÿÿÿü1¬Û¥†6Û’ÕmÒÿÿï¿ÿÿ†5›ypƳo(1¬ÛÊ m·ØcU·—áVÛÿ¼Ãmêð;ÿÿü1¬Û¥†6ÛàcY·•ðÆóòÿáßÞð;ÿÿºÿÿÿ¼¾ð+ÿðÆ»n§ÿÿÿþÕûëÿÿþòðƫޗÿíÀû¿ÿðÆ»n–ÛoþìŸÿÿÿ†5ÛzÃß}ávÞ_ÿÿÿ†5zþé{Î×må†6ÛÿÞNÿÿÿÿþ×må†5ÛuCmÉÿÿÿÿþ×m±a¶ËÃm·øcY·–ÛnpÆ«o,1¶ßÿÿÿÃͽ~Ûmxc]·—þÕmåðÆ«n—ÿÿÿà1®Û-é k¶òÿsá¶ÿÿÛÀ'ÿÿÃí¼¿ÿÿÿÿýë†5Ûyÿÿÿÿÿ†5Ûy=ïÿü1©»×ÿøc6ÂPË fúw¯þÔmåÿÿÿþé8ø¼3ÿÿÿÿÿº[×ÿ†>Ûdÿÿÿ¸…ÿÿÿÿºÿù¶†ÿÿÿýÒÿ¹xcU·—ÿÿýßÿÿÿÿÿÿáw½_ÿÿÿÿþÕméÿ j¶éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï³G¶ÊXLa-·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·òPaz ƒƒÆó`ÀÅ¥àÁÈ8<`6sžÉ80‚=AÁãù°°az ƒƒÆó`Ï’paz ƒƒÆó`àÂô9ŒæÀ_²0az ƒƒÆó``Âô9ŒæÀÿÈÁ„è0rÍ€#Ð`ä0›>|‘ƒ#Ð`ä0›?G ÁÈ8<`6}þF AƒpxÀ>lüAƒ àñ€|Øÿù0‚=AÁãù°°az ƒƒÆó`û’`az ƒƒÆó``Âô9ŒæÀßÉÁ„è0rÍ€ƒ#Ð`ä0›;#G ÁÈ8<`6~ AƒpxÀ>lïöL AƒpxÀ>lìAƒ àñ€|ØÛù0‚=AÁãù°°az ƒƒÆó`{ä`Âô9ŒæÀÁ„è0rÍ€¾HÁ„è0rÍ€ƒ#Ð`ä0›;ü“ƒ±è0rÍ€±è0rÍ€¿‘ƒ±è0rÍ€ƒ±è0rÍ€¿‘ƒ±è0rÍ€ƒ±è0rÍ€¿“ƒ±è0rÍ€ƒ±è0rÍ€¿‘ƒ±è0rÍ€ƒ±è0rÍ€»É€Øô9ŒæÀÁ€Øô9ŒæÀÜäÀÀlz ƒƒÆó`àÀlz ƒƒÆó`oä`Àlz ƒƒÆó``Àlz ƒƒÆó`oä`Àlz ƒƒÆó``Àlz ƒƒÆó`oä`Àlz ƒƒÆó`ÀÀlz ƒƒÆó`oäàÀlz ƒƒÆó``Àlz ƒƒÆó`oä`Àlz ƒƒÆó``Àlz ƒƒÆó`oäÀÂô9ŒæÀÁ„è0rÍ€¿‘ƒ#Ð`ä0›;G ÁÈ8<`6|þF AƒpxÀ>lìAƒ àñ€|ØÛù00‚=AÁãù°°az ƒƒÆó`{²0az ƒƒÆó``Âô9ŒæÀß$`Âô9ŒæÀÁ„è0rÍ€#Ð`ä0›>G ÁÈ8<`6¾F AƒpxÀ>lìAƒ àñ€|ØÛù0‚=AÁãù°°az ƒƒÆó`{äÀÂô9ŒæÀÁ„è0rÍ€¿‘ƒ#Ð`ä0›;G ÁÈ8<`6vþF AƒpxÀ>lìAƒ àñ€|Ø÷ù0‚=AÁãù°°az ƒƒÆó`ÏäÀÂô9ŒæÀÁ„è0rÍ€‘ƒ#Ð`ä0›>G ÁÈ8<`6w¾F AƒpxÀ>løAƒ àñ€|ØóìŒAƒ àñ€|ØØ0‚=AÁãù°·ò0az ƒƒÆó``Âô9ŒæÀŸÆûÿÍÎ7³¼½$y¿xÞ{ãݹ#ï{#í¿>þ6ö–7û²7¾¼m½8Ûoãm»Çóó·¾6Ûøßîq¼ýãm¹ÆÞmÞ?›øÛnq¶Ýãm¹ÆÿmÞ7Ÿäm½8ßoãmÿ·¯ÿ|m·ñæßÇÛ}ü}½ñî÷Ç›|6þ>óøþ©ätçÙÝü{½lnžøþÿãmîÇŸ|¼þ>éò=»¼míØ÷ûãyþFÛÓ¶þ6÷¼{÷xóïãméÆßs¿¾>ÛøÛoã}¿?¯oü}·xóïão?¶þ6ÛøÛûãm¿öþ6ßøþão?·¾7ŸøÛ{ãoïæþ>ÛøóïãÏy#ÝþÇO{#~´ãÙ¿Ó›ÆûÿËyÙyüm¿Èûïão?·¾7ßøÛúñ¼ÿÇÿs>çíüm¶Üm¿$m½xÛão?öûÝü}·ñ¼êq·ŸÆÛßíüo·xÞãm¿¶þ6óøÛïão¶þ6÷øß{ãmÿ·¾7ŸøX[ümïd{½8ç½xûõñ½¿Çžw½þ>ûøóïãm¹ÆÞw¾çmü½ñ¶üãm¿çïyüo÷ñæÜ‘¶ßÆÛòÆÛ|¾þ?³¼?8Ûoãoo¶þ6ß¼o·8ÞmxÛoãm¿¶þ6ûøÛÏãùûÆÛ׿¾6ÛøÛûãmÿ}þ:Ÿ޼ÔãnãÏ9#Ù¾ÇÞß|?xéïØÛXÛßã9ÇÞmö6ßäm·ñ¶ÝãoéÆßw·§mÞ6Û–6þ©m«F÷ßm·mò6û–6óøßnñç߯ÛÓ·þ6ÞøÛoãm¿¶þ6ÛøÛoãm¿·þ7ÞøÛão?æþ&©©8öÛ±ïªqöÿÆóŸöïûò6ë|{gñö÷cï»Æ÷íÎ7ÛøÛnñüßÇ¿söþ<ûøßÙ«\–`¦o…„¡Ÿ‹Z’NÓ ÇGiÁˆÅÀS #}N8#ï4þþ6Û|y·dm·8Ûoãm¹ÆÛvÆÛíÎ<ûøÛÏãm¿¾þ?³øßzq¼ßÆûßmü?ñ··ÂâÖõhû§ñéÎ,çl~«Î7¼Î=_v=ÿøóoãϾG›ßíÞ7›äo7ØÝ7,o·ÈÞãÏ?‹ÛM½™·¼Ŭ@©€*)á`çŨdsb`(hž €ÆDZ¥øZ„4ø›yŒíµ¶çíö=Û²6Ûøónq¶ßc}»#y¹cm»ÆÛ|¶ïmËmü78ßoãy¿?¾6Ûøónñ¶üáX²øïï8éÿñí÷ǻ߯þ7»øÞoãÿ¾û¾ùoN=ûøÛoãy¿öþ?³¼}·$òˆ3ËK‹:é…¥‹†‹cÏâìW-_²·e&^,šdõ¸²?›øëg$m·ØÛoãí¿¶í¶äæùmüm·ñ¶ßÆÛÛÎ6óœm·ñîÝãÍ¿¶þ7Ûœo7ñ·÷Æûw–E·…®qϧÈý9øßþq¹ãÔ÷Æÿÿß|o=ñ¾ß#íÿìíìþ7Oò7œÉÍö>÷’?ŸìuÞЃ>˜ŠLO¤W"óL€Ó‡S1€Ñ“ 4kö@]ž-ð²3±¢#ý»Æó^6ÛøÛoãm¹#m»ÆûÒÇ›|öïÍü{·Øûoãm»ÆÛmÎ?›øßoãyëÇŸßíÎ=›øÐ²~>íö=¾’7O|ÿñ½õãÝ¿öþ>Ûøå÷ñçŸÇêŸÇŸÒFóßïüo?ÈÞoãí¿öãÃÇØÒ‡ˆ| ƒ?ñh·ÀX[üÙ#oëÇ¿|öïíÆ¶þ6Ûäy·ØÛoã}¿æþ6Ûœm·xûoãm¿¶þ<Ûœm·ñ¶ÿÆÞíÎ7Û¼o?ñ·ŸÇÞûüoÿdo}log8ëÍN7»øÞÙ¸éË’:vþ9Ýümç<ÿìm½ñ¶Ý±·¿#í¿vçmÎ=Û©—Îãý屿ÿcmëÆÛ|¶ì¶þ6Ûì}·8óílmçxßnq¼ÿÆþsçþ6ó¼m·ñ¶ýão?¶þ7þøó~q·ŸÆÛÞ{,€Õµüs»øÝmØûõñü߯åëÇ^oãû¹Çžßrùu_Î{n~7Nþ7žœm½ñ·ÿÆÝ?¼ì¶çr6ûìm·dm¿,m½ØÛn¬mý8ÛohÛoã{wXÛ–¬FÛj` ¾êFÛl±¶ÞѶÜãm»Çóó¼þ6ÛøÛão>ÆßÓ½þ6÷ìu>~:mÎ=»²7´ö?ëüoñÌ÷8éϼUv9rùÚ~7_üz_øÛ{‘ºÞØÞþq··Æ÷òFÛÖ´æ—€a?A`(ÐÔÀWHÀ$ `³q¶eŒmím´öû}ö7óøóúñ¶åU­È +à'à.†€[2‚ ø0 —X€p dL<†ÉF€¶Eð`1ð}ÀR¶£*| >,4,ð¶7”c$ÆßmÆÞs¶ïmÎ6ÛøÛnñ¶ßÆÛ}üm·ñjŸù׿þ?»œ{çñÿ¿ÇZµãÙéÇ4õãîœãÚco{ÇÝ??¹}Î6÷øþúä]¤£¦¶ið°€ —€b"`(l°‰€¨|T ¶¿“ƒеVAˆà´‘dmî…±¶Ýãm¹cm¾G¿}¶þ.}•Ù“ð°\À | ‹xX5ñm%f€YpŠKt”‚Õãm9WË¢Ík(Hê|Zm‘iâÑdc-˜d%mÞ6Û^6Ûn?³¼m·8Ûnqü߯Ûmüm·Èé÷ñ÷ßǾÓ×›Ç9Ƕßýþ?¿øöÎqÅLü}ÿñçßǾ¯öþ7›¼m¹•¯%àU€øX@°ÿ‹XBö ¢xH¸Ûì†þÖ²Ó ÄV¨Ñ‚ÕGÛmÞ6ÛøÞ±·¿"¼Ñð³tdX <¾ð HGÂÁÒ #Œ€IÖ@hÄ¥L#à.Ûax a¶Û8¨ h(Àð´àÍ€žŸñcZ*|Z- N²D@YÀ)„0d®mŒ|Z@²7³n6ÛN?³¼o?ñ·ŸÆÛmüm·ñ¾÷dzÿyünøíÏøûÿ±éÛãªÚñ÷ÿÇ:§ãw¦qý^ñ÷Ÿcß?þþ=-ün›ø¯´`©¬ÉøX/`žˆ ¡€IL¯Å§~%ÓòÀà 1ðƒ¨£m ½ôeXíp g‹E…‘ïÝhÛßãm¿¶þ>Ûµ‚ÂôÀ0Š`X`È´¹` qbà ¥Xø ãͳÒ7›älÇÆ ƒª«ƒ6ìçùyö>Ûøónq¾ßÆömüm·ñ¶Ýãm¿¶å–¶Åµñí·Ç_E‘ù¯8ö—lnœü~«ü{iøâ›øûoãÏ¿ŽkOÇ[þG¥µçd“5üÈ1ɳ&Æ‘ÇÀjØ @Â9ð£c`,CÂÂ~°3¶s-öÂÆ|žÙ"]•VAˆÝ‹Y 7FÛmÇÛk#m»cy¿À±—L,Wa`Y‘b~ Iý€KHV üÍ`7¶ïÍËíüo½do7ÈÛo±¶ÿÇžwæçÍüm·ñî÷Æßmüm·ñü߼őñýoã—[ãšslu½|{9ø÷Ïã÷^ñÎûãWÇ[½¾=N{ÕÚFͽ•mØþ~’WÓL D˜±?Øûndí` k>’,C§ÙÂÒ£m¹ÆÛvÆÛïp  í Îèµ¶ÊŒ-!¸¹´XÔƒ>:`]ð4ø š,õZ‹Çów¶çoÙÍümïñ½õãm¿öì6å¶þ>Ûøóû‘¾ßÇ›rÆÛw‰žÿŽkGÆêªqíSñ¶çãõýãÚ§ãß~Gý>Ç;ürþøõmñ¼ßÆßÜ|錰ˆ3¨c€ØûÎ3?XýVAˆÎà1 ¶Ø[ÆÛmüm·ñ¶ß í@ge“ [±ýå€dÆåõhi >,i °g™†E¦Y‹hNÆ–6…cûc‹6ãFß×¼þ<þøÛß‘¶ôãm¿¶þ6ÛøÛoãm¹ÆÛmü)©Oã{ï·7שÇ:¦ñúsñ¿ëãÙ¿ŽjwÇßÿêŸýþ?¿øÞ{ãt÷Æßÿzwe@Ý h Ç/åŒÖÈ1‚ÕAžÜ–#Ýção¿¶þ6ÛøÛo°ñ‘czµ`ZXaáh¹€9áh¸ 2Ø-~ÐèÙFÄÇø&/4ÚN3¬€Ãß üX-álmö:+m³Góó<þ6û¶6óøÛoãm¿·¾6þøÛoãm¾FÞsŽ£o޾©ÆÿwN׎ªjqíSxöÓñüë±½Oã~?ÇU¿Ç.§ãnÆÝç¹mù?€ÓvâÔ^"™eËþ´eTí` ìKFÛvFÞý¶ïmÎ6÷¼m½Ã|eFEˆ0%@,‹€±°„ì  LGÂшóì›Ê4œ‘4âÌ]b!Qbí™B×¶ÎXÛ{±¶ßÆÛ|m·ñ¶ßÆÞmüm·xÛnq·ßËÛbÚøö—ñÿ¿cúœãs:ñúûãÓÿÆÞŸëÿ<þ9­?ªÿ꟎kOÆÝycmîäA’…¢Ô6þ$YÛæÈ1#* 5صšJFÛü½¶·ÖFÛßÍÛíò<Û…Gg÷hGÀ4_à°ÏÂÐÄœ˜ˆb Ò‚>¨Ûl\bw ƒlÈ1nÆÛe×FÛШónñ¶Ýão6þ6ÛøÛoãoëÆÛó¼ço^6Ûø•¸²'wïÛr9ûÛÔþ=¦~7_|s«|sçütóøçzø÷ßãõÿ#—÷cn}ãoþ3ab 2X#‚E†‹Pßn +;\í`g°¶ ûìájÆÛ{Góo7ÿËNeü(Z­jê±¶Ýãm¾GJK4–€°TÀ¶8|X*-CC‹ØT, ÉÝ€OY8·Qbíš-‘¶ÿÆÞmÎ?›øÛoãm¿¼þ<Ûœo7ñ¶ßÇ›müFð¶¾=÷øþªœyËø÷ÎñÔßøÞÛãý×ÇO¿Ž|?úÿßr>÷øëoÈÞsñÿ¿YQŒˆ3™ 2‹c}ä¬ý@gõžâÜX†Ûx··­Šé£à¦0RWÀ0—€ar<,0³)ð‹ÀV m<,'#p ò€T!™m†"Ñßøî<Û–>ÞòwÀ!¦ ã µ ½è±¨Zi‘i¤âÕZH±½Ì•mmüm·ñ¿ŸÇ›wçþ?›øÞ~q÷ŸÆÛmüm·ð˜·çxóï㟷ÇSªñç/ãšÓxöÿãÚtãÿÿŽ·ßòþ:u}Ž]O#Ýÿ÷þ.Í&ˆúÂI01#-Ž[uÉÞœY8²ÁbOc )¦5äü,+à'áa@(ÐKÀXBߢ^ƒ#v>Ë Øßm 'éKDZ¤‹H·’xûlycm¹Åšð,GfOÂÂÞð À ‚<,µµYø TŒÀH AÿÀ])#¿‹Æ÷mcí¿æêÆÛÒÇ÷}¶þ6Ûœm·ñ¶ßÆÛmüm·ñöÝãñçã¿5ñí÷cŸ·Ç߯lþ7s?O¯9}ç?¯œþ?éüz[øßçð#d<ó,4}ö…ÇŠVsY Áf â(t”¥Öø =ðÊ™ |žøµz;à4T2—p¿€C‡ cy±!ˆòMæ°d“€ÃÄÉ|>,ð¶Ì€®……Ò[ÀÁb>†[4øXA€OÀ1!p2ë,§Åª|Œ¢Úû 5uðcñh„{¶0±¿õãm¾FÛ}¶þ<ÛøÛnq·¿ÆÛÍümýxÞoãm¾ÆÛÛÏ׎¾òFçþǶßßÎ?¶øëÏøëSøõNøÝ8ôÿÈççxûoãyï'xΓ­¡ýåcG»|ŠÛ[à7|Ó 4çÀ$È 0”G¾-R˜çÅ¢‘íØÁmŠx[gÓÒEƒBÔ4ø¾ ${6KÇȶ.7'T O •+© kàAŽÍÀYŸ€I¿€Õe¤ï‹o1ð)휱¹o±ö÷Ç›müm·xÛoãm¿æþ6ÛøóûãÏÏÆÛÍò7Ÿøþûãúºñï±ú{ã[ãu§ãîßÇ:§ãšÓñÖ¯ñç¦ñßÎqæßÆÞÕûX Ê2µqg=à€8F‹€¦½@-Pp™ø  T"ø 9ñjœ`-! G¸Ð &6Û2Fû{FÌ6x» ËÀ4Ÿ€jà ÏÂÑ Ôˆ ‰r ‰ƒ£)¾ìð`·€º   dT+ƒ€&¨À`·H%À]Ï8‹ÇþÇ$sþn6Û[ï^<ÛœmýñæÝãï;ÆÛÏümçñ¶ßÆÞíüy·ñæßÇ›[ÿŽ-îG[¿?¾:ûò=>»¼þ?Müyýñï½ã¿Ž|æãïÿo?ÖßïÂã6öŽ´ÓHö͸éï,m·ÈÞÏãïõãmãÉŽÞሌogdn[¶7›œmçxÛnq¶÷Æûÿo^<Ûøþïãm¿¶þ6óøÛzq·Üãmæãm¿¶þ6ÞøÛoãÕ_ãû»cÿO#~ŸÇ·žÇ?Ž_w}¾:Óþ<ÜümúœmÖœmÏìmúäo=ÈÿŸØåöëzoö<öøÿo±ö÷#Í»ÇÛkÆów¿¶7×¼ì¶×·þ6÷øÞnq¾óq½ŸÇ›|¶þ6Ûìm·ñ¶ßÇŸßoÎ?³¼m·ñ·ŸÆÛ—þ:óïtçòïõSyŸÿSo¾=ö¼UN=3¾?ÿøû©äz³¼m·,m÷ÈÛϱ¶ü‘·½‘¶ýãméÆÛÿû^6ûœm·8ÛÏ‘ö߯Ûï^=žøÛã{?·¾6ÛøÛo±¶ßÆóýüoçxónq¼Ýãm¿æþ6ÛøÛÏãÕ÷Ç;ï}ïnçûü}ÿñέñÿýãÛïŽjgãú¿Ç¾ÖÇÿÿÍoöùmü{½d}ÓøÞnXûßãÏîFûmü{¶Ö6ÛäogñößÇ›{üm·ñ¼ßÆómüm·ñ¶ßÆómüm½ñ¶ßÆów¶þ6ÞøÛoãm¹ÆÛKd„è0pXÍÿíƒÐ`à°›ÿßÒëƒÐ`à°›ÿÛ ÁÀ8=`7ÿ¿§f Aƒ€pzÀ>oÿl@ƒàõ€|ßþþŸØ0€=Áëù¿ýð`4=Áëù¿ýÞ¸0ƒàõ€|ßþð0€=Áëù¿ýý.°0€=Áëù¿ýðaz ƒÖóûú~ `4%ƒàõ€|ßþð0Áƒ€pzÀ>oÿNø@ƒàõ€|ßþð0€=Áëù¿ýý4è Aƒ€pzÀ>oÿl Aƒ€pzÀ>oÿO| Aƒ€pzÀ>oÿx@ƒàõ€|ßþïLÖCÐ`à°›ÿßCÐ`à°›ÿßÓ烡è<,àñ_û°›ÿÞCÐxXÁâ¿÷`7ÿ¿§v ‡ ÁÀoÿx Aƒ€x¯ýØÍÿï韀Ðô8ŠÿÝ€|ßþè Aƒ€x¯ýØÍÿïéûƒ¡,ðx¯ýØÍÿ탡,ðx¯ýØÍÿîÊwÀÀhz xoÿl Aá`¬æÿ÷ôöÁ€ÐôðpzÀ>oÿl Aƒ€pzÀ>oÿNl Aƒ€x¯ýØÍÿ탡è0pXÍÿïéo¡è0pXÍÿ탡è0pXÍÿïéoƒ¡è0pXÍÿï¡è0pXÍÿïé̓Ð`à°›ÿÛ ÁÀ8=`7ÿ¿§¶ Aƒ€pzÀ>oÿl@ƒàõ€|ßþþœð0€=Áëù¿ý°az ƒÖóûú{`Âô8¬æÿöÁ„è0pXÍÿïémƒÐ`à°›ÿÛ ÁÀ8=`7ÿ¿§< Aƒ€pzÀ>oÿl@ƒàõ€|ßþþ–Ø0€=Áëù¿ý°az ƒÖóûú[`Âô8¬æÿöÁ„è0pXÍÿïémƒÐ`à°›ÿÛ ÁÀ8=`7ÿ¿¥æ Aƒ€pzÀ>oÿx@ƒàõ€|ßþþ–Ø0€=Áëù¿ý°az ƒÖóûøÂÃo±¶Üãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6Û÷¶ZG|10¤ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ÿÿÿÿÿøcÙê®0ÆßvC¯ª†7û÷Œ1þõ@ÇÝ? m·(cÛëï\1¿üÃÏw†5t°ÇŸßö/áŽÛl˜c¦ÝNûm“ðÇ›l˜cŸN¨cÿ }ÿV÷î¬1ÞÞ­ÀO wÿ× j7ôÿÿÿ >Éøcmù¸‚ðǿڸ/«ÀÆð1ØßÿÿÿÿpðÇßz÷ŽÔzªC¶ê j¶òÿáVÝ/ÿûb ¨fàbn fàbpÇÿÚ¼^0Ç¥¿Ã½m÷Ãͺ\1ªÛbþÕmÒáVþ_áŽÛz†<Ûdz>øcýíC~½àbéýUÁx†5võaFÝ_†5³ú6óææGdøcU·Kÿþþ~¤1ùÞ«‚û‚Ûˆ†=?jð1|1ÛûWàbÕmë j6êí½CmþÖmå»^×3; j¶òþÔm±ÃmýpJt3¡›„o¾ð4 uþÕÁx¸-¸=Ü/Ì1¶ß†6ÛøcW½Rôz]®Ü1¬ÛË m·ÿÿ῾ƒO:ýð1ËûW£Õ÷»ƒo†5z¼ a¶ï j¶õ†5žywkÜZAކ5›y|1¬Û¥†5›ya¶ç†5[t°ÆÛÿî @½Áh¼ _}÷ß}à¥ðƧî¨cûy÷Ží{ k6òÿÿÛèfืß}îûï†5z¼CmÉx< ? k¶õávÝ,1¶ßÿøc¶ÝO¶À"÷ßw¾ûïw•àµà"ö}èð1†5Þyxc]·—Ãí¼°ÆÛ| m·?ÿý÷«ï¾û&5›ú¾ð3}÷߆6ߘc]·QÙ1®ÛÊ m·ÐÆÛw m·þìÎÌôº&Õmå†6Û·ûÇ}÷ß}êûÁkÁxc]ÏÕàµ÷ßÞge»°cmµ˜c]·–×måîdpÆvl1¶ßðÇm¼¿}÷ß}÷ß kìõx¾ûïî×næNÛoîk­ìì·dv»§†5t¿Þõ}÷ß}÷Ãݽ_}÷îdr3¢C¯fné†5Ûya¶ü1®Û¥¾í@ï†5[zí¼¿ûï¾ûï¾øcUý«ÀÅ÷ß}ÙÜ®î®Ïw¿ k¶òÃmýÝÞ¯oü1¨ÛËýŒ}÷ß}÷ß}÷ß k¶õx†5Ûz;µîøc]·—Ý c¶Â¡`deÞíþÕmÒÿß}÷Þ¯¾ûï¾ûï¿»%Ѱƻo,1¶ßÝ’Åm°”2º&Õmåü1¨ÛËý¼}÷ß}÷ß}÷ß}Ô /»’×må÷;Ð1¶ÛMÑŸ†6ÛÿÞwß}ðƯիï¾ûï¾û÷a”1‹a dìÜ1®ÛËîfîìíí¼¾í·—÷ß}÷«ï¾ûï¾ûïÝízavÞXcm¿ k¶òÃmþìŽÛµÛ j¶òÃm߆6Ûÿ }·Q÷ß}÷ß}÷Ãï=^¯¾ûÁC³]‹÷f k¶òû» j6òÿ y·íʾûï¾Ôojûï†5›ú¾ûágö®ÍÐŒÃÜ£%†<Û9®ÈûÓÝ÷fÿðÆÛ~ûï¾ûï¾ÔmêûïWß}ÝV‹³]™ýÝ“Ý øc¶Ý/ðÇÛwqo¾ûï¾ûï¾ûï†5[z»Ý»ÑìêÝÚ÷»^ÐÆ«o/á¶æí·—ðÆÛ}}÷ß}÷ß}ðƧûW«÷§v3×vû³:Þ¿ÃmßðÆóü}÷ß}÷í½_}÷ßz=îÌëw_ÞÎ߆5[ypÆ£n—ÿ¾ûï¾ûï†5¶z¾ûï¾ûIpcVk*ÿÿþé·—Ão1wß}÷ß}÷ÃÛ:¯¼¾ûá_ö¯L1¬ß×ÿü1Ûm“ýžûï¾ûï¾Õoêûï½Cmü1¬Û©ÿü1¨ÛdÿïpÇMû†6óÕîó¼áLþ¡V× W÷‚Ão? j¶ê6Ûÿí¶HcU¶Å†6ÛïáŽÛl_ü1æÝ/ÿÿÿÿÿáŒ)6ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~Ûoß¶ZĘ4†0¨ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ÿÿÿÿÿýà_ÿ tÛ©Ã7ô†5yÿ tÛÓ†>Û©øc–ÝO†:Ùë o÷¬1ÛHc¦öœ1ÛoOÿÿðÆÛu?†?Ÿ×Ãmëô†53úC÷´ÿÿÿÿ }¿«ÀÈcí½^ghc®ö¿ü1¹ÿÿáFÞ_ÿ÷g€ ÆÛz¸n[Àpcí½Cïxc~Ÿøc¾öžÕmåíºWí¼¯ÿøcͺŽMá¯/@Æ£oOýíÚøcU·•ÿü1¶Þ—ßp’xKïžy<l1ªÛÐ1¶ß†7›ÿÝþÔe>Ûÿ᎛z|1¶ßܯ7î>ðϾûïá¶ü1¶ß÷k»XcU·–ÛoÿÿÃmýäàfé¿£€(ûï†:mêûðǽxcU·§v¯aVÜ+†5[yaVÞPcm¿Ã­¼ Ç›} m·ßá¶ôïœ Þy>ûï¾ðÛoß}0ÆÛÜî6쿆5[y_ÿïx$ûïß}ûÀVÔïhð<ƒŸ½7ÿÿá·ô¾ûï7ß}÷Þž¯ç§ÿÿÿÿ}÷ß}÷ß¾ûáNÞ¿÷l1®Û…6Ûècm»m÷ûŽõ†5yaæùýà“ï¾ûï¾ûï¾ûÏÝþ×måCí¼®/;»á¶çþðMà…÷›ï¾ûï¿}ýÛí¶†_ݧ~íÿûÉ÷ß}÷ß}÷ß}û»“v÷|1®ÛË m·á¶ýÚü1ªÛÒÔmåÿß}÷›ï¾ûï¾ûï»NOðÆ»nÛnßÿÿ¾ûï¾ûï¾ûï¾þÖmÄݨc]·—àc6±``eÇvÿ†5yï¾ûï¾øcU¿£ï¾ûï÷jè k¶òÃmÿ¼¸cU·—ÿï¾ûîWß}÷ß}÷ðÆ·ní]ávÞ_ýÚÿûï¾ó}÷Þ÷ß¿†5Ÿq÷o†5ÛyÝ·|1¨ÛËÿ¾ûï¾ûï¾ûï¾ðð!{Ýþ×må~ï j6òÃmÿøcm½}÷ï7ß}÷ß}æýÞð»û·sÿøcm¿}÷ß}ûï¾ûï¾ÿwÞÜwißÝ«·ÿá¶ý÷ß}÷ß}÷ß}÷îw{µ¹ÿw{tÞÿü1¶Ýßx$ûï¾ûïß¾ûü1‹[a0aîÖõ{vNFøcU·•†;oåpÇM¼¿†6Û÷ß}÷ß}þûïÝÿzû¿ÿðÆÛ~ûï¾ûï¾ð j·õ¿ j·µðÆ«n'ºO_†5yþûï¾ûï¾óxxxaOÜOÿÿ†:måðÆÛt»ï¾ûï¾ûï¾ýàðøco»†5<í?ÿÿûï¾ûïß¾ýþóoÃ}ÿÿÿÿ~ÿ{PÇZkÃ{|1©/êÿßÃ}øcÏÏü1ªÛÐ1î÷Ãí?ÿ tÛ¥ÿÃmåÿÿÿÿÿü1…F߆6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmû¶[A¼8ÿÿÿÿÿÿÿÿÿÿÿøcŸ÷!íõ o=á÷¹ }÷¤1öÞýü1çZá·§†;ßi vÛËÿøcí½?ðÇ-º˜co~Ck u·Öß{@Ç¿Þéÿ¤1÷öŸÿÿÿÿ yÖÔ1î߆:ÙêÛùÿ†5yÿÿü1ïöœ1öÞ¼1ÓoOÿÿÿýàßß\1þö¡¾ÿ†;ßi†5zaVö˜cQ·— j6é_ j6ò¿ÿ÷0x<0Çûz¼áVÞ_wøcQ·•ÿÿs¾ÛoMà!÷€€Æ¦\1¨ÛÒÔmèÛoû·vÝÞ_†5y_ÿ m·¥÷ÞOï¾ðá¶ü1¶ßáFÞ[Žþï†5[ya¶ÿÿÿ|1¶ßŸy¾ûïý0Ç[?†5zCmýÆÝáVÜ+†5[yaVÞPcm¿Ã¼¯ÿ¼ =¾û÷Ã=^0Æ£ï_ j>òÿøcU·•ü1ÛoO÷ß}÷ßxgÞ1¨þÓðÇö}ÿÿÿ÷‚O¾ûï¼=àAàBï· c}ïÿÿÿÿ}÷ß}÷ß}ÿáfÜ+sAfÜ(1¶ßCmØÛo¿î×ÿ}÷ß}÷ß}ýàð÷níðƳo+vîÓÖæ¿ûï¾ûï¾ûïÞßýÌ_½ï½ïÿ¾ûÃ>ûï¾ûï¾ûîÛÕÍ|1¬ÛË m·á¶þíC­¼¾ÔméÿÝϾûï¾ûï¾øc[7£À1Þç|^wnÖmƒmÛw}Ýßÿý÷ß|1¨ÛŠûï¾ûï ò k6â;\1¬ÛËîàc6±``fíÿ¼ß}÷ß}÷ß}ü1­/é m·îÝáðƳo,1¶ßÜî{Žòü¿ÿ}÷ß}÷Ãÿµ}÷ß j¿µýã†5›y~ã}Úv¿þûï¾ûï¾ûï†;ýêð jï´Ý·{¿ k6ò÷÷iÏÿï7ß|1ÓoWß}÷ßxCïÇ€%ßü1¬ÛÊÝÝ­ßÿß}÷ß}÷ß}÷ß}þð»^íþÛoGß}÷ßy>ûï¾ûï†5žú»Ý¿ýßÿðÆÛ~û÷ß}÷ß~ûïî{µ»¸÷Ïÿÿß}÷ß}÷ß}÷ß|1­·ÑßîMϸ۵Ýü¯ÿ¾ûï¾ûï¾ûÂ~ðs÷{¸ßzÿÿß}÷ß}÷ßx$ûðƫգÀÇqÿv¿ÿþûï¾ûï¾ûï¾ÕÏèðÜ ÿÿÿ }·—÷ß}÷ß~ûï¾ûÿÿÿÿß}ðÆ¦šÕàA÷ß j>ô|1«·Ó jçô }·á¶ÿÿÿÿ÷ï jÎúðÇ›†5[zÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¶[¾Ø8ÿÿÿÿÿÿÿÿÿÿÿ÷¯á¿´ÿ†;}åÿøcí½?ÿÿÿÿÿÿÿÿü1¨ÛËÿÿÿÿ t÷×ÿÿÿÿÿÿþÔmÒ¾ÔmåÿÿÃï´ mçÿýÕåðÆ£o+ÿÿÿðÆ£o@ÆÛÿøcQ·•ÿðÆÛzþÛoÃmÿ¼¿ÿÿÿÿý=ëÿ j6ò¿ÿÿÿï/ÿÿÿ¼ xc¶ÞŸÿÿÿÿÿÿÿÿÿÿÿû‹ÿ¼žžO/ÿÿÿº_ýéÿÿÿÿÞ¿ý÷ݯÿÿÿr½»ý؃½?ÿÿîwKÿÿÿÿÿ†5?Úð1‹aX°03v¿ÿÿü1©û×ÿûäñC¼¿ÿÿþÖ{ÄÿýÇÿÿÿÿÿ¼N…ÿÿÿÿ»ÿݧ«¿ÿÿÿû¿½~ïÿá¶ôÿÿýÒ»_ÿü1¶ßÿÿïw+šÿÿÿÿÿ†1ox&Ý{Óµ½C¼¯ÿÿÿÿv·§KÿÿÿþõýÒ}×ÿÿÃíõÿü1ªþTÿÿøcí¼¿ÿýàðÆ«oOÿÿÿÿþï½§ÿÿÿÿÿ j6ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¶\;ü0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ᎛u?ÿÿÿÿÿÿÿÿü1ªÛËÿÿÿÿÿÿÿÿÿÿÿí¶/áVÝ/ÿÿÿÿ÷W¯†5[t¿ÿÿÿí½m÷Ý+ÉÚü1ªÛËÿøcmºŸÿ†6Ûècm¿þì_ÿÿÿÿ j¶õû‰ÿíº_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷/ýÒÿÿÿÿq\û×ÿÿÿû¤æ¿ÿÿÿÿ÷—ÿü1ªÛ×ÿÿþërÿÿÿÿÿÿþ1[l*FÿÿÿÿÿðÆ«o/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÿÿÿÿzÿÿá¶êÿÿÿÿøcm¿ÿÿîÕéëû¯ÿÿÿýå}ëzºOW Æ«o/ÿî/ÿþëþéÿÿÿ½=:^ãÿÿÿÿÿÿÿøc¦Þ_ÿÿ†5Ûzÿÿÿÿÿÿÿÿÿøc·½_ÿ†5[u?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶\¹,ÿÿÿÿÿÿÿÿÿÿÿáŽ_ª¿ÿÿÿÃ6êÿðÇÛuÿÿÿÿ y·¯†:mëÿáVÞ_ÿÿÿÿÿÿÿÿÿáFÝ_ j6õ†5›ÚxcU¶Åü1ªÛ¥ÿÿÿÿÿü1ªÛ¥ÿÿü1Þu¯ jçõðÆ«o@ÆÛ}ÿøcU·–ÛoÿþÛn§ÿá¶úÛoÿÿÿÿx?ÿáVÞ¾ôëÿ j¶éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÿÿÿ¹û×ÿÿÃîk_÷W1¹\®2î¿ý×ÿûÓÖé~øü;Ó—ÿÿþéEÐfåÿt¿ j¶õÿÿÿÝ]û¯ÝÿöÁFî?ÿü b¦ØTFÿ÷½àŸÿÝ?ÿí¼¿ÿrÿü1®Û×ÿÿÿ÷‚?þð3Ü®[¯ÿÿýàoÿûÿÿÿþðÿøcW÷®é¸¿ýÓÿðÆÛu!]?Ÿÿ¹þòt'"÷[×ÿ†6Ûÿÿ÷!÷“îŸîWIëÿÿü1®÷×ûÓï¹}Òv7h1ªÛËú_ÿÿá}¾»¬1‹a(dâ½?z÷[Ãÿÿ†5;º_½<¿ÿýà'ï}|1¬õUðÆcO×ÿÿðÇM¼¿áM¾¿øcU·¬1®Û×ÿÿÿÿám½[@ZïÿÿÿÿÛ} k<êøcU·Sÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¶]6<(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ j¶òÿÿÿÿÿÿÿÿÿÿÿðƳmŠøcY·Jÿÿÿÿþ÷ÃÙú\1¬Û¥ÿÿþÕmå†>Ûï÷ŸáfÞWÿÿÿ†>Ûècm¿þéÿÿÿÿü1¬ÛÓîÿðƳn•ÿÿÿÿÿÿÿÿÿÿÿÿýÓÿÿÿÿÿÿÿþíÿïow˜cY¶¥ÿÿÿûŸýæîí¾ÿÿÿ kíâáŒÆÎ'ÿþþéºÿÿþî÷ b–ØFü1¬ÛÓÿÿþÖ1;l)Ÿÿÿû·ÿþéÿïÿÿÿáŒËÞÿâÓ Ý8cY·—ÿïÿÿÿû¦À(3ÿÿöõÿ†3 ¼¿þåÿÿÿÿÿÿ…ð ÿÿÿ¸ÿýÒwÿÿøc]ï®ð/ÿsÿÿþÆ ÿÿ½ÿÅáŸÿÿ†5ã]_þÅ}à„4ýÖèøcY·•ÿ÷ ïÞÔîuüz†{Íϵ†~íÿÿþð ÷€oÝ»nßÿÿÞþÕ­:ðÆ«©¨ÿÕÿÿÿÿÿÿ†5_zÿÿÿêo>Ôi÷gÿÿÿÿøcQù«Ãͺ\1­ûÐ1Ëûÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¶]³X.ÿÿÿÿý<2.g9(. œ„® ”À(2E†@&îpd&^NrxdA’xdA’xdA’˜d'†Ad'†Ad'†Ad'†AdH°  É<€(2 “À(ƒ ÉL€)Lƒ%0 “À(2 ƒ$xdJad¦Jad¦A’xdA’xdA’˜d'†Ad'†Ad#à È2[ ”à ÉL2 ”à ÉL2 ”À(2S É|2ª˜La”1ÛîÀÆÛs ·pÆÛr6ÛðÆÛw m·0ÆÛö>ÛðÆÛ~Ûo¡¶øÛ~áöæÛo¶úÛoÃmøcm¾6ÛðÆÛ~ÛoÃmøcm»†6ÛðÆÛr†6Û¸cm¹†6ÛðÆÛw o7á¶æÞÃyøcm»†7ŸðÆÛÞÛïÃyøcÏï o?á¼ü1¶ß†7ŸðÇ/¿ m·ÀÆß~Ûna¶îÛoÃoøcùÿ mçÐÆÛ~Ûo¾ü1¶ßCmøcm¾6Û”1¶ß†6Û¸cm¹CmÕ m·á·ü1üþÁ·µ m¿áçü1·¶úÛná¶ü1¶ß†7ÛðÆó~ÛoÃÏøco? m·áöü1¶ß†6ÛðÇŸÞÛ{Ãmøcm¿ m·áçü1¶ÜÃíøcm»†6Û˜cm¿ m·pÆÛ~Ûîa¶îÛïÃíð1¶ß†6ÛðÆÛ~ÛoÃmÜ1¶ÜÃmØÛîa¶ü1ö÷CmÜ1·ü¡·š7›ðÆÛ~ÛoÃmøcm¹†6ÛðÆÛ~ÛÃo\1¶ß†6ÛðÆÛ~ÛoÃmøcm¿p vþd m½á¶ü1¶ß†6ÛðÆÛþÛná¶æàS‚ÕoÕ m·á¶îÛoÃmøcm¿ m·0ÆÛw m·0ÆÛ~ÛoÃmÌ1·ß†6ÛðÆÛ~ÛoÖÃ0Çu1×Qøcmù†6ÛðÆÛs m·`co? m·á¶ü1¶Ý¡·¦ÛípÆÛÞÛoÃmøcm¿ m·îÈ%ßp#Á.àg‚ÕÀͨc¦Û#ÞÃmÜ1¶ÜÃmÜ1ªÛŠûÞa¶ü1¶ß†6߸co m·á¶ü1¶ÜÃmøcm¾†6Ûàc}¿ m·pÆÛr6Û¸coéµ€[xfÛïPÆßr6óàcm¿ m·0ÆÛ~ÛoÃmÜ1¶ÜöæÛo®x%Ü ðK†5³z6ÛðÆÛ~ûï†;m²8 µs¥C6ÙmÌ1¶ß†6Û˜cm¿ }ïá¶îÛoÃmøcí¿ m·ÐÆÛw m·á¶æÛoÃmÜ1¶ß†6Û˜cm¿ m·ám6UÇQ_¡ð¸n;ÜÛ{ÖÃ0Æ«KêëÝêÛïÃmøcm¿ m·á¶ü1¶ß†7Û°1¯›…¸à— y·ÀÆÛ~Ûo¡FÝ@ÆÛ~àW‚]ÆD\­÷¼#†6Ûècm»†6Û1¶ÝÃ{Ì1¶ÜÃmøcm¿ m·á¶ü1¶ß†6Û¸cm¾6ÛðÆûr†6Ûàcm¿ m·áæå (ùξ±ðÅJç Ñ9pÀ-ï z2} tõ–Ìá˜fçÁ.Ì6â†>ÛªóoÃmÌ1¶ß†6Û¸cy¹\ðK¾Ûm°ÆÛs m·á¶æÛoß}ËßpþÛná¶æÛoÃmøcï o½á¾ü1¶ß†6ÛðÆÛ~ÛoÃmÌ1¶ß†7Ûècm¿ m·á¶îûna6üjt1øeð pc«ªñÙpÞàǧõ¡5rHãŒác0ÛŠÛoÃmøcù»†6Û˜cm¿pCÁp^—|1¬Û¥†6Û›^ wdáVÝ@ÆÛ~øc¶ÞŽ^û‡°ÆÛs m·hcm¸¡öæÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛw m·ÐÆó~ûÞ@ÆÛü }·0ÆÛ} }·ÐÄY bUƒ Ñ—¤ j8kGXfADÖE c…û)ÃïšHco>6ûðÆþs o7pÆÛs}÷Ãmô1¶ß†5[t°ÆÛ}p&A.ÕmèàW‚\1üýüôyPÇM½møcm¸¡¶ü1¶ß†6ßðÇÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6Û˜c}¿ m·á¶ü1¶ß†6ÛðÆó~Rb7ðÇ¡µpÆó„ÃU¦ªÝÕÕàÏ ƒ‡ß†6ÛðÇ›| m·ÐÆÛ~ÛoÃíº[Ë»0Çóü mçÐÆÛ} m·7dá¶ýÀ¯¸cm¹¸ൠtÛÑÀïá¶ü1¶ßCmð1¶ÝÃmÌ1¶ß†6ÛðÆÛw m·0ÆÛ~ÛoÃmÌ1¶ß†6ÛðÆÛv†6Ûàcm¿ m·0ÆÛþÖ ñ^€[X3ÙÁž·†aŒÇî cm»mÜ1½ŸCmÍÁ1®ÛË o½7fðü1¶ÜÃmØÛoÃmÜ1ªÛË m·ÐÆ£û,1¶Üg¼¡çýÁá¶ü1¶ß†6ûðÆÛ~Û{Ãmøco¿ m·0ÆÛ~Ûo¶ü1¶ßCmøcm¿ o·0Ç›~ÛoÃmð1¶Ý`Æe·1¶ßmÊÛná¶øÛúá¶îÛna¶ü1¶ß¸ àƒ¸àc†5ÛyavÞ[\1¶ß†6Û˜cm»†6þ›|1ªÛÐ1¶ÿ\ðZ¾çʆ:mêÛoÃmøco? m÷á¶ü1¶ß†6ÛðÆÛ~ÛoÃmô1·÷†6ÛðÆÛ~Ûo·­ m½0Æß~Ûo¡¶æÛïÃy¬ m¶Øcm¾†6Û´1æÞ¡¶ü1¶ß†6ÛðÆÛ~õÞècm¿p#ʼ= o?á¼ü1·ÜÃyÝÀÃ{úØ0f˜XË–^í½UÁ>Ãmøcm¿ m·á¶æÛoÃýøcm¿ m·ðÆ»oPÆÞ~ÛoÃmøcm¾†6Û˜cm¿ y·hcí¹†6ÛðÇ›~Ûm°ÆÛ~ÛoÃmÌ1¶ßCmð1¶ß†6ÛðÆÛ~ÌgòÜðP†6Û÷Œ¼? ooá¼ü1¶ß†6þðÆ«n–ónažŠvcPÖQc+…´Ç fÕ§ cϹ¸'Â8cm¿ m·á·ü17ÞðÆß~ÛoÃmøc]·¬1®ÛÔ1¶ß†6ÛðÆÛ| m·ÀÆÛ~ßú0co¿ m·á¶ü1¶ß†6ÛðÆÛ| m·°cm¿ m·á¶úÛo¶ü1¶ß¸áD1¶ß¼= kìòÃÍøcm¿ yýá¶ü1¶ß†>Ûö° g°ÎàŸï†6ÛðÆÛ| m½Õ€GÍðÆ¼ºÔ1ÓÏï Cù½VÃ4pŽàÌØÃ0Æcï¨cŸ÷¼?AÈ©³£B VÜÌôî(cÏ¿ m·X1¶ß†7ÜzØf¦†j`Ï{gî†3 ¸ŽxávÞ•0Ì3xj´3 ÔÃ0g©ƒ<ì`Ï j¶â†6Û×÷ª¡a†6ÛðÆó} Y‰@Æá´ÂÉ á„‚Î†"«lÁÝêoBýÀ€²¸`°Y˜¨,Ym0pΡŽbÞÁ‹¥Ð[á‰3‚Ô¶ *%g†"JÓw }? ~_ðÓ¡…ª½ à±2_ÃR¡bì,7¦3àG¹áŒËoU° j êþµ|1¼ß†9Ñ ò¨X– <1"Ìiƒ;5Ýê°ÏI‰“ÃL,°°¸XcLt1«Í) cÐýÃë~‘ ¯¡¡…‹é‚÷¦+1ƒXcU·— p˜Y ˜Ô6˜YAap°ÁœàÄ1gŒºL3Éc˜Ô1¶ß†7Ûõq$2VY0YPºáÁ©0 –ó4°ÆÛðµaXdð"±‚ê³™ ªd¹”ÌɕÅ)JE¬3 ­†H˜0a`»`ÐSL Ó hb+gL˜Éo áHóáCú°cžViÔ2 *Á˜H> Àq“ ”¡;o«†a˜cM­ý¼ö—xQŒ—øÐ ƒïd›‡Î×#Ãè¶åxÛƒÿS‰CC1!r‹Ü h ш3Œ†X38ÍÂÃ8a˜@Å«P2Ð\Y`¹ÃCdŒœ2‰˜2¦á¢Œ0ºÔ ¼3Ħgeòð̼3 tÛÔ3Õ»1pÆÛ~Ûoá–Âêas´6ÂügøÏ×.Üà#PÅÜà ¸d7l/³*ûCí¸¡¶î0 ]VfäÄôb‚ýƒ-RÌ×êŒÃ0 !øfàÌJ À,F°açt2²çpÆe·1çÝÝ»,ŸŸAOx=áàø ƒafÖ†5ßÌXg‹ › · Ñ‹3Ì(«vWãJ €+á˜c]·–ónðÚ¦(Ç1Ìp6™™3&X_ØcWg–Ó°»°»`Ï\Ëæ}|¼3/ ÃÍú¸0f ðÆÛ~Ûo×ÜàÝÜÆ ±Cl/fp_Ìô1ªû‹6b‚æcÚ™ ³4ð¿…ûCmü3©ÂçÂîùŠ ùŽúø–‰!œ1˜mè³° o1C0`ÍÀÏ. ÁžÒ@2(Á˜c0ÛÐ1·÷*` 0gƒ=Á\œê¨¼‡€#à>ùÒñéৃ< <¼3ÏÀ€\âp#ÁV« Ã0Æ»úó ¹ŒbÀ¦È"ÿ §æ¼3'À€_á˜Q²€ð×Ì9PZt1ç߆?›œ6Ì0»aw†Ù–ó,/øco¿ ù…Ý…ÞÛ2ÙŸ_† Ãmñ\åácm¿ m·ðÛ ™†a˜ðÛ ñ–³= m·× á¶a…Üà ¸a{ ð^Âÿ†6ÛðÆ»oPÏ .l.Ü6Ì`½˜a¯‰a™xg m·ÁÍÏÓUÁLÂ5àã ¨À,(M2àÌ!PfÛ‹Cðg†šH¨XYX1î²Å@ÇV¥4 nûl)¨@‚àÌ3 eÆËÃ0€ ðg‰ÏãÀÁ˜œ°[€_Ã7†6ÛØ3¾~6Ùøg¯Vxàø ýáJ‰4ì4¨†6ÛjÛmd6Ì3 Æ1á¶e…ìË3ðÆÛÞÛ › ¼3æeã>¿ðÍXfÛÏÕÁž ÷PÆ«oŠÿ „°È2¦bS §¡¶³8/fu†5³z†Ê˜ás0Âï ã8Ë3Œü1¶ß†6ßàgl.x.ðÛ0Âüa…þq•™Ÿ«ÃðÆÛ~2C÷<š® n‡UàφAƒ2àg«p[`

` ê”1)Ý ‚Å ¤lÉgUL¬¡šÅC¶õ…6‚X@¡—œ¬ Á|2/§ `ž ð€ ð|Až”Ø ÝC0ÆÞ| úBæÂìÀ°£a˜>¡˜XbõA“Ãy®Û{àFÌ3Ã1æClË2̳>ÔíÅ o·X3¶lZÛ2Ù™¯ü3/ Ãoz¸3ÁŸ[ ÃB?CV ¥l2± À_&dÊFz¶CxÄ…ÐbBíÃlÎ ñ˜ öcxcm½až¤.™ ¸“É„Âÿ ²e¦g)m‰ m·°Õ´I€&¸)º‰80Ó øøž­ÂCNœxB ¡£Áu*ÑC[Áz˜fBû†\e¡¦ FyàÆ¼ÄjÒ € ¿à`JVÀ$)Ãð`Ì!<3<`Ì1©i­–ûîÀ7.¡-B°´3‰ âòÆDæ°€,Á¶æÛn²Øfrb &b ld7ÌÁže3;±†pÏ .ˆ ¦âBøƒ2…( âêÃ7 !›ÜÛÏÕÃ0Ì1•¹ž†:ö§†>­ßA€´ÖƒÁnšÜfÛöðÌ0ÔDÆú†Ó0 Z`->ê¶ àcöô0¤Êï*áž$Å |6¨[Zdbð·PË&RP-ü†5Þú†—1ïPÙ<2€Zp-Ál<3)¦Oajˆ­á›HàÏ døgà ¿:$+8> þ‘}0¸[;;­1nýÃ#†yŸ mý~á+á™}:>/ ‡ÀÇ‹À$1ín*<#†`ÇCD³`-ñ $%`$ødžC1(2ÆÛw m·áŽ’ªÔ6Ì,˜ O…º†øZÌð¶Âܠƒ*Ó‹ ñÌ(d-ðÙ€µ@µ…¬-ªE ™®¼1Ô;¨Ê߀Hg wûåH.\àÆ«ïZ8U{œÞÃí½|1¯ÛÐ1¶ß\á=(!á&€M—˜ËÃ5A‘ÀÆ·­ cmþ4|ï fr¯PÇûv7=øcSÓ¥†5Þ~ÐK ï„ €cž ¡¶øþnÿ᎛umÜ1ªÛàcyÿ m·ÀÆ«oPÇÛ~ÛnáfÞ¡¶æûoÃmøcm¿†5Ûz†7ÞðÇŸ~ÛÛ¡6ü1˜mêÛoÃmøc}¾6ÛðÆa·–ÛoÃmøc0ÛË y·á¶ü1æß†6ÛðÆ»o,1¶ß†6Û¸cm¿ y·áVÞXcm¿ m·ÐÆÛ| y·á¶ü1¼Ý¡¶ü1¼ßCmøcm¿ m·á¶ü1¶ß†6÷ðÆÛs m·á¶ü1æß†>ÛðÆÛ~×mé k¶òÃïxcù¿ m·á6ü1¶ß†>ÛðÆÛ~ÛoÃmøcm¿ m·áw¼1¶ß†6ÛðÆÛ~ÛoÜð_†5Ûyaæü1¶ß†6ÛðÆÛw m·á¶øÛoÃmøcy¿ m·á¶ü1¶ßmøc;†>Ûàcm¿ m·á·¼1¶ÿ†6ÛðÆÛ~ÛoÃmü1®ÛË k¶òÃmøcm¾†6Ûàcm¿ m·á¶ü1î÷†6Ûøc0óË m·áæü1¶ß†6ÛðÆÛ~ÛoÃmÜ1®Û…†6Û¸cm¹†7ŸðÆþ× m·pÆÛ~ÛoÃyøcm¿ m·á¶ü1¶ß†7óðÇ›~Ûo¶ü1¶ß†6ÛðÆÛ~Û{ág¾¡¶ü1¶ß†5ÞzÃíºXcm¿ m·ÐÆÛr6Ûàcm¿ m·á¶ü1¶ßCí½mÜ1¶ÜÃmøcm¿ m·á¶ü1¶ß¸/ÀËpCÀË kæòÃmÜ1¶÷†6ÛðÆÛ~ÛoÃmøcm¹†6Þ˜cm¶Ãmøcmï m·ÀÆÞ~ÛoÃyøcmÿ m·á¶ü1¶ß¼? m½pÆÛ~ÛoÃ}Ì1­ÞË m·(cmÿ m·á¶úÛoÆ»n–Ûna¶øÛo¡¶æÛoÃmÜ1¶ß†6Û”1¶Ý¶æ×må†6÷ëŸû„ð_¸'Á~Õm±a¶ü1¶ß\ žÔmÒÜðõÀC·™ “îy÷ðÆÞ~ÛïÃoxco»†6Û˜cm¿ j¶õ m·8cU·¨co? m÷ÐÆÛ| m½hcmù†6Ûàcm¾avÝL1®ÛÒ×mÂÃmô1¶ß†6Ûèco;mô1¼ß¼'¸O†5[l[^í¶,1¶ß¶@ÆÛ~ûá¼ü1Óm1¶÷†9mû†à‡†5ö6Û˜cÝé†6ßðÆÛ~ÛoÃmÜ1ªÛÔ1¶ÜÃmü1¬ÛªÛoæõ }çá¶í k¶ô†6ó1®ÛËÃï6,1¶ÿCmð1·Ÿ†6Ûècm¿sàw†5›ÌlÞXcm¿ m·áVÛÛoÜ ðžÔm²<Ûèc¶ÛÞoÃmû^|1ÓÚ—ö°É¼2ÿÿÿÿÿÿÿÿÿÿ÷¶^0|,ÿÿÿÿÿÿÿÿÿÿÿü1ªÛ× j¶õáfÝPÆÛ| m¿pÆûsÿÿÿ†;2|1¨Û«ü1¬ÛªÛo˜cY÷¨cm¾Cí½mÜ1¶Ü°Æ»n—øc]¶É k¶Ù>Õm²C­¶O tÛd†:m²=ŸðÆÛs†5[uaVÞ¼1¶ßÃߺ¶ü1¶ßá¶îÛna¶ìþ×m±a¶ú×m²6Ûž×ÏÔ m½xcm¿ j¶ÙmøcU¶Éÿ m·>ÖmÕ m·á¶ü1®Û¨Ûna¶ï†5Ûz6ÛŸ¸*ð†5Ût°ÆÛ~×mÒá·¿†5[z6ÛðÆÛü1ªÛªÛn|1¬ÛÔ1¶ÜÃoÜ1·¿†6Ûþ×mêÛoáŒÃn cm¹mßxáŒÃo,1¶ß†<Û˜cm¿ m·Ã­½mÿ᎛l¶æÛoáVÞ°ÆÛw m·á¶ü1ößÃíº¡¶ü1¶ÜÃmøcm»ÃmÌ1¶ß†6ÛúÐ2ýà«ÁáŒÃo,1¶ß†6ÛðÆÛ~×mÒávÝ/í½?†6Ûècm»ÃmÞÛna¶ü1¶ß†6Ûøcm¹†6Û¸cm¾6Ûøc0ÛÐ1¶ß†6Ûû…·ÝÜ-½½ÃmƆ5Ûya¶æÛoü1ªÛbðÆ«o@ÆÛðÆÛw m·0Æ«oPÆÛ o½á¾ü1¶ß†6Ûøcm¿ m·0ÆÛ fz†6ÛðÆÛw†3 ½œ÷e @/Ãí¼°ÆÛÃͺXcm¹á¶îÛoþÛnpÆ«o\1¶ß†6ÛðÆÛ k¶õ m·á¶îÛo¡vÞ°Æa¿—ß¼ÞëðÆ»o/†6Ûècm¿ j¶éa¶û j¶ô†53õ0ÇM½mÿ k7õ }·á¶ü1¶ß†5Ûz†6ÛðÆÛ~ÛoÃmÏ÷½¼Þ7l1˜ýèóo¶ù†6Ûþþ¼úÛo¡¶ç m·ðÆÛs†:mé m·þ×mêÛoÃmß k¶õ m·0ÆÛ fu}ÛxKþÿ fvt°Æa· †6ÛþÛna¶ì m·á¶ï m·xcm¾ðÆÛÃÝíavÞ¸c]· cm¿ m·ÐÆÛü1™méøcm¹†6Ûü1®ÛËÃmøcm¹†6Û¾Ûn~é·¨cm¿á¶ü1¬ÛÔ1¶ßá¶û k¶õ m·ðÆc½T1îôŸü1¶ß†6Ûü1¶ßáçü1·ŸÃ­º^é: v÷«†6ÛþÛoÃýøcm¿ k¶õá¶ü1¶ßÃmÌ1¶ß†3 º¿Ã–Þ˜cm¿ m·øcm¿áfÞ_¸a¸†à‹†6Ûÿ k¶õøcm¿ m·ÿøc2ÛÔ1¶ßá¶ü1¶ßøc_g–ÛoÃmü1ªÛ¥ïo7ðÆÛøc]¹×¼-àŸx[ßÞÞáoþ𷃼᎛õoA¶þà›pM¸9ÃláÚ¸8Ü-½¾ðÎïO½½º[û±ïN“‹»ºÁ÷A#p§[ Ü(nÜ#X€Xcm¿ j¶øöû»‚÷wmÆ7¸.܉ÛŒœmØ.ðîÄáa.1†3 ½nÁÜ`ý±'îMÒtžósé=†5[p·.Û¢~á@Œ1¶ßïí\ï¾Ö}êé<½ÝÝÆ·w“9»AŒËn.é<÷“Û¬1¬Û¥ÞO¿}ÎëU~+ ƒmýÀ nûávøêû¾û»ðÆa·£ïÞ1˜mèÛû—…îo»O¸–â¾û÷ßrÚ « ƒmýÀM÷ÜîîûávÜ[ï»ÃmñÝ‹:õp{¶ï»}ö¨ÃávÛ%Õ÷߸·Ü¯ÕUa’°Ë}Îå|1­ÞÑ÷Ü¡¶þû»®îÃ{»ndÿ»ßr7žûï¸m÷ߪªÃ%a“žß}÷î®îxc_½–û«·º¾ä+î›ÛÀ}m÷{ï'žîûÍà&ûïÕÇá·€]÷“ÍÌÝ]Ý7]Õææî®Û›q»’tس®•íÝýÕæûîWÞo†:ïivÜ‹Þ/Ãí½~Ì6õýéëx_sûÿ†:m²5[|í½afÝPÆÛ~Ûna¶ü1¶ß†6Ûÿ†<Ûøc0ÛÔ1¶ß†6ÛÔ1¶ß†6ÛðÆÛ~ÛoávÞXcm¿ m·øc]·–Ûná¶þÕmå†6ÛðÆÛ} m·ÈcQ·—á¶ü1ªÛä1¶ßÃmÌ1¶ß†6ÛðÇ›~ûoÃmøc]·§†6ÛÔ1®ÛË m·ðÆa·–ÛoÃmøcm¿Ãmøcm¿ m·ávÞ\1¶ßøcU·K†5[t¼1Ûn§†5[|ðƳoPÆÛ~ÛoÃmøcí¿ m·Èc]·–Ûo¡¶øÛoÃmøcÍ¿ü1®ÛË m·á¶ü1¶ßá¶ïí¶,1¶ßøcm»áŽ›lFßmøcU·¯ÃͽCmÿÃí½mð1¶ß†6ÛðÆ»o,1¶ßavÝ,1¶ÜÃmøcm¿ m·á¶ü1¶ßü1ªÛ¥†6ÛþÔoeü1¶ßáVÞ¿†5›z†7ÞÖ×{éÃíº\1®ÛË m·ÀÆ»o@ÆÛsÃíºXcm¹xc]ï§Ã­¶Oÿ j¶õ m·ðÆ«oXcU·®Ömå†6Þ´1®ßŠÛo¶ùÿ†5Ûu?†5[lXcm¿†5l_ðÆ£ÞÀÆÛraVÞ¼1¶ß†5[zðƶo/øc]ïR×{²6ÛæÖm± j¶Ø°ÆÛ j6Ùm÷ tÛbÿÿÿÿÿÿÿÿÿÿÿþ¶hÌÿÿÿÿÿ²¡ŸÁŽ&Ú°ú€ÈÀ-–þ³†`Ïe²ð/†pgƒ?ìà öqø1À`ͼ3ía›xî-៳€X³€Xö° gz°cêÁŽ~Õmë†5[zðƳn¨cm¾6߸c}¹ÿÿÿÿ™>ÔmÕþÖmÕ m·Ì1¬ûÔ1¶ß!vÞ¶îÛnXc]·Kü1®Ûd†5ÛlŸ j¶Ù!VÛ'†;m²C6Ùmøcm¹Ã­º°Æ«o^ÛoáoÝ@ÆÛ~ÛoðÆÛw m·0ÆÛv k¶Ø°ÆÛ} k¶ÙmÏ kçê6Þ¼1¶ß†5[l¶ü1ªÛdÿ†6ÛŸ k6ê†6ÛðÆÛ~×mÔ m·0ÆÛwÃí½mÏÜÞ~×mÒÃmøc]·K†6ÞþÕmèÛoÃmÿðÆ«n¨cm¹ðƳoPÆÛs m¿pÆÞþÛoøc]·¨cm¿†3 º¶ä m·{Œ{áŒÃo,1¶ß†<Û˜cm¿ m·Ã­½mÿ᎛l¶æÛoáVÞ°ÆÛw m·á¶ü1ößÃíº¡¶ü1¶ÜÃmøcm»ÃmÌ1¶ß†6ÛðÆe·£˜;÷`}àl1¶ß†6ÛðÆÛ~ÛoÃmøc]·K†5Ût¿ j¶ôþÛo¡¶ï m·xcm¹†6ÛðÆÛ~Ûoá¶æÛná¶øÛoáŒÃo@ÆÛ~Ûoîr¾ûÓÍȆ3 ¸°Æ»o,1¶ÜÃmÿ†5[l^ÕmèÛoþÛná¶æÕmêÛoá÷¼1·ß†6ÛðÆÛ m·á¶æÛoáŒÃoPÆÛ~ÛnðÆa·£îw;ï¹1öÝðÆ»o,1¶ßðƳn–Ûnxcm»†6Ûÿ†6Ûœ1ªÛ× m·á¶ü1¶ßÃí½Cmøcm»†6Ûèc]·¬1˜oå÷ßr¹ßsü1®ÛËá¶úÛoíºXcm¾Ã­½!LýL1Ûo@ÆÛÃÍýCmøcm¿ m·ávÞ¡¶ü1¶ß†6ÛðÆÛsýÎû•÷;áŒÇï@Ç›| m·Ì1¶ßðÇóü mçÐÆÛ} m·8cm¿†6Ûœ1ÛoHcm¿ðÆ»oPÆÛ~Ûnøc]·¨cm¹†6Ûøc0Û«ï¾òy¾þÌìéaŒÃn m·ü1¶ÜÃmØÛoÃmÞÛnðÆÛ}á¶ÿ†5»ÚÃí½pÆ»o@ÆÛ~Ûo¡¶ÿøc2ÛÒòðÆÛs m·øc]·—†6ÛðÆÛs m·|1¶Üü1ÛoPÆÛÃmøcY·¨cm¿Ãmö×mêÛoáŒÇz¨cÝé?øcm¿ m·øcm¿ÃÏøco?†5[t½à›Á>Ûoøcm¿ o÷á¶ü1®Û׆6ÛðÆÛ m·0ÆÛ~Ì6êÿ f[za¶ü1¶ßá¶ÿ†5›y}Á®NpK†6Ûÿ k¶õávÞ°ÆÛ~ÛoÿðÆe·¨cm¿Ãmøcm¿ðƾÏ,1¶ß†6ÛøcU·K¾ûî8cm¿ág¾¿xxxx' fÚ<t ¼ðÆÞ~ðwƒøc]·¨co=Cßô1·Ÿ^ðw‚xcU·—îÄÛoîÆààî ƒ¸+q· p°·æ æã p–ð]æñ<ž]à«Øcú_¼%Á›…nMÐ[KÁÞœ›‚r7»¡¸(íç«…V jÀ(1¶ß†5[|ºO½;NÛÉéáîÛîs¼Ü? fz¸]äûï¸p—Gp‚z}ÊûîWÜ41ªÛ…¸)v76èÝ%XVJÀ(1¶ßîwß¼žoîwÜ»Ží¸Þøc2Û‹¬ Çž[ï¿ k6éo¾å}÷;îWÕ Eà^A¶ÿs}û÷ávÞ¯¾ü1˜mèãº'pÆa· coî>ÞëÂÞðîw$å¾ûûï¾ûï¾åª VCðÈ1¶ßï¾å k6â¾ûávÜ[ï¿ m·ÇÕýÆ;ÓÍÒ}÷˜c]¶É}÷=÷ß~¨5X+­ÀMæûá÷¬}÷Ãmý÷+û÷îÆí;{´år÷‚o-÷Ý]_}ðÇmµZ ´¼‹À*ð.ûï¾þoŽwßÜîw÷3soï]ÐÞœ1_}ðÆ»n}áw„¼!Êá@ÀeX%€T¥×ã}÷cy¾óy9îÀÈžæáw€ääáÜmÊãìnÝÕæûˆnDòr¼nÛ︆æo¾àà=ã{|1ªÛÕÏß|1®ÛÖûï8c0ÛÖòÿïÜ €Æ»o/}ýûðÇm¶@Æ«o˜cm¿†5›uCmøcm¹†>ÛðÆÛ~ÛoþóoáŒÃoPÆÛ~ÛoPÆÛ~ÛoÃmøcm¿†5Ûya¶ü1¶ßávÞXcm»†6ÛøcU·–ÛoÃmô1¶ß!FÞ_†6ÛðÆ«oÆÛ m·0ÆÛ~ÛoÃmøcí¿ m·ávÞžÛoPÆ»o,1¶ßÆÞXcm¿ m·á¶ÿ m·á¶ü1¶ß†5ÛypÆÛáVÝ.ÕmÒðÇmºžÕmóÃͽCmøcm¿ y·á¶ü1¶ß!vÞXcm¾†6Ûàcm¿ m·á6ÿðÆ»o,1¶ß†6ÛðÆÛ†6Û¿ j¶Ø°ÆÛá¶ï†:m²5| m·áVÞ¿ k6õ m·ÿ k¶ô m·ÀÆÛ~ÛoÃí¼°ÆÛ}†5Ût°ÆÛs m·á¶ü1¶ß†6ÛðÆÛðÆ«n–ÛoøcQ½—ðÆÛ†5[zþÖmêß{Xc]ï§Ãí¼°ÆÛ| k¶ô m·<1®Û¥†6Û—†5Þú|1ªÛdÿðÆ«oPÆÛ j¶õ†5[záfÞXcmëCíø¡¶øÛoàx~×mÔþÕm±a¶þÔm±Ã{mɆ5[zðÆÛ~ÕmëÃÙ¼¿Ãí½{Þ×{²6ÛæÖm± j¶Ø°ÆÛ j6Ùm÷ vÛbÿÿÿÿÿÿÿÿÿÿÿþ¶P„¼8ÿÿÿÿÿÿh ~ q$,@Ï€¥(X(ž,3\êÁŽ}¥ ÕV 2zpºû•÷“žð7ïß j¶ô¾þ×méûÆñÿïþé·P1¨ÛæÔmë j¶õ m·á¶ü1¶ß†6Û˜cm»~óoávÞ¶ü1¶ßmøcm¿ m·á¶þÖmå†6ÛðÆÛ†5[yA¶ü1¶ßü°ÆÛ~Ûo¡¶ùøcm¿ j6ù m·ðÆÛ~ÛoÃmøcm¿ m·á¶æÕméá¶øÖmå†6Ûøc]·–ÛoÃmøcm¿Ãmøcm¿ m·áfÞ\1¶ß|1¨Ûˆ5yxc¦ÞžÔmÉáVÞ¡¶ü1¶ß†6ÛðÆÛw m·$1¬ÛË m·ÐÆÛ| m·á¶ü1æßþÖmå†6ÛðÆÛ~ÛoðÆÛúXcm¿ðÆÛwðÆÛw j6õøcU·¨cm»ü1¬ÛÐ1¶ßmøcm¿ k6òÃmöÖmå†6ÛðÆÛ~ÛoÃmøcm¹†6ۿü°ÆÛÿáFÞ¿†5[z†6ÛÖÕméðƳo,1¶ßͽmþÖmå†6Ûï j¶ôøcQ·SÿýCmü1¨ÛÖÔmë†5[ya¶úÕmèÛoÃmóÿ j¶ôþÔmÒÃmÿÿýxcm¿ j6õáVÞ_áVÞ¶þÕmÔ m·Ì1ªÛ¥ü1¨Û¥†6Ûü1Ón¦é·Kÿÿÿÿÿÿÿÿÿÿÿû³‡¶ØlaQ·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ò n¥6Ì 7Rƒf†Þ²0n¥6Ì $ªÁƒ³‚Nþ„0~ØrÃñ)”Ñ ~Ð>Zˆ1ôÁòØ[ÁÈ1ú?ÛT¯©t«X-ì†t~¬9a…Áº”Ø;0$Z¹'êPc`ìÀ`“ƒu(1°v`0Iß$`ÝJ l˜ 0n¥6Ì ;ù$©Aƒ³‚DV¬9fŽ~Ð]A‚‚Øi¨…½´Aàcécü¾ }]º> 1þÌ`t«‚­Xr ,«ÉêPc`ìÀ`’º”Ø;0$·Ù87RƒfŒ©Aƒ± `“¾HÁº”Ø;0$ÀÝJ lü‰ƒuX1°v`0Hˆ*ÛAØbcíE2ˆ0 L-HÿÜÀÇàû?÷`À-`E3`ÇÕ ~C«l9f‹uX1°v`0H­öKêPc`ìÀ`’º”Ø; ;䌩Aƒ³‚HêPc`ìÀ`‘ï²ø?l9a‚¡ù”‚ÔBß™êS'4~¬9a†­ÙêPc`ìÀ`’Áº”Ø;0$R¹#êPc`ìÀ`‘ƒu(1°v`0IŸÐ˜7Rƒf…±+aÈ0Q’ ~ˇæTÔº T‚Ú ~C «Vƒ°Â ÝJ l˜ +'êPc`ìÀ`‘ƒu(1°v`0I÷ÈÁº”Ø;0$n¥6Ì úZ°ä†ĺ Tà-ûD¦ Ò `ÿÛ>¶«3¨üÆA°ä†êPc`ìÀ`‘Pµ^É@ÝJ l˜ H7RƒfòˆZ°ä˜ "­‡ ì1“ {h‡æRi…©…¿xûrð·í@`¨"è-l-P-ì‹­°ä(PjÃv`0IwòP*Òƒf˜iAƒ³‚Lõ‘‚­(rÌ *Õ‡ ìÀ`“o¶ùÿüj{áè Z½‘…¼-ïãªoãí¿¶þ7ŸøÝ7ñ­¾ä=‚Þþ {|þþ6Ûäm·ñ¶ßÇJ÷ñíŸÉ‚Ü·ñ×ãý¾GŸ|·¯¦›œo·Øûoãí¿*ÿÆÛ|m¿ñ¶÷Ʀã—nñ·œãý¾FÛÿW~G³×vå·¾6Ûøû{ãÛ;ÆÛ}¶ùíö6ÛøÛãm½c}¿¶þ6ÛøÛoã}ÿ¶þ7ÛøÛoãmÿ¶þ6ÛøÛoão¾GÛmüm·ØÛoãmùÆûmò<ûìm·ñ·ŸÆÛíüyýñ¶ÿÆÛßÙÎ>ÛøÛoãÙ¿¶þ7Þøóo‘¾ßcyþFþ}üm¿ÈÞoãí¾FÛ}¶þ6Ûìm·ñ¶ßÆÛ|¾þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¾ÆÛ|¶þ6Ûìm·ñ¶ß#m¿¶þ6ûøÛÏãß¿·þ6ÞøÛãm¿¼þ6ÛøÛoãù¿öþ<þ¼m·ÈÛoão¿¼þ6þøÛïãm¿·þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛÞXÛnñ¶ß#m¿¶þ6Ûäm·ñ¶ßÆßyö6ÞøÛïãm¿¶þ6ûøÛÏão¿½þ?³œmýñ¶÷ÆÛmüm÷ñæßÆÛmüm÷ÈÛo±¶ßÆÛoümïØÛo‘¶ßÆÛoüm·ñ¶ßÆÛmüm·ÈÛoãí¿K™cžv:êTXÛîØÛÏ‘¶ßÆÛmüm·ñ¶ßÆßÜöþ6Ûìm·ñ¶ßÆÛmüm·ñüÿÆûßmüm¿ñ·ŸÆÛmüm·ñ¶ßÆÛíö6ÛøÛoãm¾GÛmüm·ñ¶ßÆÿmüm·ñ¶ßÆÛmüm·ñ·ßÆÛ}¿\õz´}þÜm·ÈÛoãoîÆÛ|¶ùmüm·ñ¶ßÆÛ}öùÍüm·ñ¶ßÆÛmö6ÞøÛÿãmïçþ6óøÛoão¿¶ö¶þ7Ûäm·ñ¶ßÆÛmö6ÛøÛoãm¾GÛmüm·ñ¶ßÆÛ|¶ûmüm·ñ¼ßcmÏÆÚr­ö¢ÈÞlÎ7¢cÇ´¾GêîÈÛîXÛn¬m·ñ¶ßÆÛ}¶ùmímò6Ûäm·ñö÷cÍ¿¶þ<ÛøûÏãy¿¶þ6Ûøóoãí¿¶þ6ÛøÛoãm¿÷¾6ûøÛoãm¿¶ûmò7ÛøÛoãm¿¶þ6ÛøÛoãm¿6þ= üiKÊd«|ÏRãrÓUŽj-µ=ãÿó>Û¼y·ñ¶ßcm¾FÛ|¶þ6Ûøþo±¶Þ±¶ßÆÞmüo·ñ¼ßÆÛíüy·ñ¶ßÆÛmüm·ñ¶ß#m¾ÆÛmüm·ñ¶ßÆÛmò7ûøÛo±¶ßÆÛ|¶ûoò>óøóo±öÜãÕÝhý¿xé×{ 㙣„údöŠî\oWœmçñ·ÝhÛÏãm½c}¾Æó|¶ùmò6ÛÚ6Ûøûo‘æßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆß|¶å¶þ6ßøûnñ¶ßÆÛmüo÷ñ¶ßÆÛmò6ÛøÛoãm¾ÆÛ|¶þ>óø³œ’=s+cù=lzý—#\½¨öI×Gß#oï6û|m·ØÛoãm¿¶þ7Ûìo?ÈÛϱ¶ßcm¿¶þ6ÛøÛoãm¿¿¾6Ûøûoãm¹Ç›vÇÞõcm¾ÆómÎ6ÛøÛnñ¶ß#o¶þ6Ûäm·ñ¶ßÆÛmüm·ØÛoãm¿‡¤Ã«Ä… oXá:¸ÑµgkÜÕHÿ«imö7ÛämçÈóoãm¿¶çmÛmüm·ÈÛo±¶ß#m¿¶ùmö6Ûìm¿ÈÛÏhßo‘æßÆÛmÞ6ßøÛo±¶ßÆÛyÞ6ûøÛoãm¿¶þ6ÛøÛoãm¿¶þ7Þøóoãm¿¼ù}ö>¯¿vÌHþúXç·d·8ûû‘¶Ý‘¶ßÆÛmò6Ûìm·xÛoãm¿¶ûmüm·ñ¶ßÆÛÿyüm¿ñ¶ßcoîFÛmüm·ØÛoãm¹ÆÛvFÛ}¶þ6ßøÛnq¶Ýãm¾ÆÛ|¶þ6ÛøÛoãm¿¶þ6ÞøÛïãm¹co{ÆÛòFÞm#ÝïæûmümçÈÛoãm¿¶çmÛmüm·ñ¶ßÆÛmüo?ñ·ŸÆÛmüm·ñ¶ßÆößoíÍëmüm·ñ¶ßÆÛ×·þ6ÛøÛoão¿¶ïmÎ6Û¼{·8Ûo±¶Ý‘¶ßÆÛmüm·ñæß#í»Æ÷ÍÞ6Ûìm·ñ¶ßÆÛmö6Ûäm·ñ¶Ýãm¿¶þ6ÛøÛoãm¿¶þ7·øÛÏãm¿¶þ6ÛìnýiÀX\Â!fÑPÉ“=¾þ6ÛøÛo‘¶ßÆÛmËmÙïN6ûøÛo±¶ß#m¹cy¿½ùmüm·ñ¶ßÆÛs¶ïï|yýñöܱ¶ßÆÛw¶þ6ÛøÛoãm¿¶þ<ÛøÛoãm¿¶þ6ÛøÛÏãm¿¶þ7›øÛoãm¿6ûmüyûú9Š LH[ð™—_‘¶ßcm¾G›müm·ÈÛoãm½£m»ÆÛßíò6Ûmò6Û¼}·ñ¶÷co¾ÆÛzÆÛw¶þ6Ûìmçñ¾õ±æßcm¸±¶Ýã}ï6þ6ÞøónXÛnñ¶ßÆßßmüm·ÈþÏãy¹ÆÛvÆÛyüm÷ñü߯Ûïüj=¹}ö?›ìm·ÈôJ=x¿¾ûyÞ7²s¥ä‚Æ^?íy#ëcÚcéÍ0±0³±)¦Ö7:;˜Ý£œ,‰ ;ªÂÅöµ_#s1ñé™í,ad¦vš¾.r:j߯ßo|mÌÎ9™›cÙédac 4ÛM\…Š…Ÿë\Hónñ½£±t¦ˆYØš˜X¯Çòšñé™ù$,adoƒÁe&Âω}P±~FݾFÛß™KéÙ ²BÎDt©•ö¾ùˆKí,0\,(`¨Y™*fWf\±¶ß#yÿžQ1VbÙŠ˜H,ar0ÉM都cS7 žQ1TbىᄂÌ#¨Þ˜4XÊ&UcÍ[ˇX-¿x; PÈa›ÖQm0DÁM1 ”ØYÍé…¤Ž]©—«íÑ‚ÖäÂÞA½0M£%s*9¦+¦™I5[Ï|DÑLÄmQeeº|¦ÓäÅÌ 0J5FtÁ‚š`ù˜ttÕø¼o:­h&bŒ`º½ý0lÊfQ2¦Æ³5p¨Ý]:CVB×»æIa¨ú`Ù’ÅÛ1 ŒÅW*<üé<¦b¨ÅiŠL,f'2S¦v Üã¬þT7&)KË&%Sò³-™mö7ÛÖ6³ñ¥T.ö~Ü…ìÏ ÙžÆÛUþZÁs1As1µÀ^ÌÐ_fbÇj)ùmÚFÖuÛ\. bÌ0ºvPÉã2ÑžÆiJÿíëSW-s ذ»–X/ƒ)™ƒ;ÆûÿN¸-·¬wUûmüzßûTÅÜÅßhHÌ™¿ã3MÎ7M·j˜T.æ8]ó”Æ}-UC?ãï½co?EÌ:1½ó…ôAžËt™íÞ(cÿ•P»ð»öV¶ÿ¶þ?müªÕ‚çòã/mò6Û¼m½%L.l.f>Ø^̰½™øÛoãmÿ¾Q†3Ú}™ ¾ŒëmÙ{üyý%Ù‹ ™†Yl/³J̶eüm·ÈÛo±¶ëí…Üà ±jÁ{a~3ñ¶ßÆÛl.æ]ŒrØ^ÌཙYý™ÆÛ×·¾Ù†3.ûa{2Âöfq·ßÆÛrÆÛw-˜as0Âî™¶e™fYžFÞ¯7¾–šAbehæuö7ïö6éê^1‚å (y›fX_̰¿ão?¿¾Ù†3.å³,/fY›Æß|öïvvÌfc–ÂægÌ/ä¬Ëf\ãÏ¿¶þV6?•…í…ÿãm¿¶û+ › ŸÊ̹3»tþ7»ä_.Lvla˜€ºv¶³8/Æu¶þ6üËl.f8]ÌvØ_Œ°¿™¶6÷œm·dm·m³ .f8]öÂögøÏÆÞ¯¶ïmùlà ™†JfÙ–gácm¿¦cAŽÔW XÆ3›*æTTÊÜZî$mý{³.“}³,/fX_lm·,m·Ëæ]Œ0»¶Ì³,Ë3ÈÛo±¶ß#o?Ÿ³í°¹…øÃ û+2ñ—´mïÙÛ0ñŽÊÂç‚íò°½°¿|mÓøÛoåasfÔ™œ†˜HÎѶ·ìyùä<‘ˆ›jD.Ê£¯ìÌògXÛßh¹¹1{Áv1!v1;Á|™¿­{Ém´½¶¼cØÄ…Û\…ìÌ…ògãïWcm¾FóܼcÐbBîÞ3‚ù3|‘·7Ùô|Ç-3Ø]&cKF|#nŸ#Ó3Û“I†cèÆp^ä/’6çv6þ˼cÒbí¯ÆdÌ™ìM¤Ê›GöùQ··gÌÄÁ¯a|˜“;JÌé3˜¸û§ÙÞ12c²à»@]?. Ü…óñ¶£øÛ–Ìcc˜úÒ'¦ ²í!±@± ì)qc×WÊÃ+áœs åÜ™DÊ`Çì-øâÛì7&5©0»*ž?e¦e<ýäqyÞ>Ûìn4}¤bLXZtü—&Q2Á¨ü(2¦ßtþ=} ˜ƒp-åy¾AØ[d$Ì­·cêÚšÔc –6 ë1c%‚È Sœ%BΗ¼{Urz1†U6ŲÁl™@-áo#NÈÜ7ô&bLYÀ·•ôÌÈ1û jÂLÊÿItþ6Ûú ÂF:ÁoÞ1Ìž X[É’3l-üO¼°á3¬¸1ÂÓak?É“2™š Æ¿šäo÷Ú0c ¨h-ù²ªér0µ…¯üum˧ï2Þ\o·8ë·Èé^¤ä4°µºLœ-akïÇM¾ÆÛWßÈd-aoÔ©ZÂÖÍã¿Üãm¾GïßȸZÂß©R0µ…­½öùíükêRd€µ…»í …½¿Ž©¾GåÕHÍ>܈ëçÈÝ:ìk6òá0µ·ñ×m¤7Øßûãµíé# x[½"7óøûo‘ÒÔþ6ÞÊ¿­öûíüv³ªTm·¬}·ñ¶ß#m¿¶ûmÞ6Ûœm·xÛï‘öÜãm»ÆÛmüy·>Û²6ÛøÛoãm¿6þ6Ûäm·ÈÛoãm¿¶ô¶þ6Ûìo·ñ¶ß#í¿çþ6óäm·dm·ñ¾ßÇ›}¶þ7›äm·ñ¼ßÆÛíüm·ÈÛoãm¿¶þ6ÛøÛoãm»#m¾ÆÛzÆÛmÞ6Ûìy·ñö߯Ûs¶þ6Û²6ß¼m·ñ¶Ýãm¿¶þ6Ûäm·ñ¶ßÆÛmüm·ñ¶ßÆÛ|¶þ6ÛøÛoã{?¶þ6Ûìo?ñü߯Ûmüm·ÈÛoãm¿¶þ6ÛøÛo±¶ßÆÛmü}çñ·Üãm»ÆÛmö6ÛøÛoãm¿¶þ<Ûøûnñ¶Ü‘¶ßÆÛmö6Ûäm·ñ¶ßÆÛmüm·ñ¶÷Æßmüm·ñ¶ßÆÛmümçñ¶ßÆÛmüo7ñ¶ßÆÛmüm·ñ·ŸÇ›ÿyüm·ñ¶Ýãm¿¶þ<ÛøÛoão;Æß}·¾=Þäm¿ØÛoãm¿¶þ6Û¼mçñ·Ýãm¿æþ7Þäm÷ØÛo‘¶ßÆÛmüm·ÈÛãm¾ÆÛßmüm·ñ¶ßÆÛs¶ïmüm·ñ¼ßÆÛmüm·ñ¶ßÆÛmüm½ñ¶ßÆÛßmüm·ñ¶ßÆÛmÎ?·¼m½ñ·ßÆÛ}·¾6ßøÛoãm¿¶þ6Ûø÷{ãm¾ÆÛÿmò6óøÛo‘¶ßÆÛ}¶þ6Ûìm·ÈÛoãm¿¶þ6ÛøÛo‘¶Ý±¶ßÆÛ{ö<ÛøÛnñ¶Ü‘½Ÿ#m¿¶ö¿¯mÉo|m·ñ¶ßÆÛo|mçñ¶Ýãùÿ·þ6ÛøÛoãm¿æþ>óøÛoão¿¶þ6Ûìm·ÈÛ{±¶ÿcm¿¶ûmüm·ØÛoãm¾FÛmò6Ûìm·ñ¶ß#m¿¶ù{ö6óøÞoãm¿¶ùÍüm·ØÛoãm¾G›ý¼ïmÎ6Û¼m·ñ¶ßÇ›o|mçñçßÇöÿmüm·ñ¶ßÆÛmüm·ØÛßãm¿¶þ6ÛøÛo‘¶÷Æßmö6ÛøÛo‘¶ßÆÛmímüm·dm·ØÛo‘¶ßÆÞÍüm·ØÛoãm¾FÛmÞ6ÛøÛoãÏ¿ìþ6Ûìgdm·ñ¶ß#y¿¼ïÍý-”âPc@íÀ`•ƒq(1 và0KôîÁ¸”Ð;p%`ÜJ h¸ ý/0n%4Ü x7ƒn¿Kl‰A·‚V Ä ÆÛ€Á/ÒÛâPc@íÀ`•ƒq(1 và0Kô¾Á¸”Ð;p%àÜJ h¸ ý-°n%4Ü p7ƒn¿Kl‰A·‚V Ä ÆÛ€Á/ÒÛâPc@íÀ`—ƒq(1 và0Kô½¸”Ð;p%àÜJ h¸ ý=°n%4Ü X7ƒk@Á/ÒÛâPc@íh%`ÜJ h­¿Kl‰A·‚V Ä ÆÛ€Á/ÒÛâPc@íh%`ÜJ h­¿Kl‰Aµ `—ƒq(1 v´ öœØ7ƒk@Á+âPc@íh%å-°n%4Ö‚V Ä ÆÚÐ0Kô·¸”Ð;Z x7ƒk@Á/ÒÛâPc@íh%`ÜJ h­½¥¶ Ä ÆÚÐ0JÁ¸”Ð;Z ~–Ø7ƒk@Á+âPc@íh%ú[`ÜJ h­¬‰Aµ `—émƒq(1 v´ °n%4Ö‚_¥¶ Ä ÆÚÐ0JÁ¸”Ð;Z e¥¼ Ä ÆÚÐ0KÁ¸”Ð;Z ~žØ7ƒk@Á+âPc@íh%ús`ÜJ h­¬‰Aµ `—émƒq(1 v´ °n%4Ö‚^ÒÞâPc@íh%`ÜJ h­¿Kl‰Aµ `•ƒq(1 v´ ý-°n%4Ö‚V Ä ÆÛ€Á/ÒóâPc@íÀ`•ƒq(1 và0KÚ[ÀÜJ h¸ °n%4Ü ~–Ø7ƒn¼‰A·‚_¥¶ Ä ÆÛ€Á+âPc@íÀ`—”縔Ð;p%`ÜJ h¸ ý-°n%4Ü X7ƒn½¥¶ Ä ÆÛ€Á+âPc@íÀ`—éÏq(1 và0JÁ¸”Ð;p%ú[`ÜJ h¸ °n%4Ü {Kl‰A·‚V Ä ÆÛ€Á/ÒóâPc@íÀ`—q(1 và0Kô¶Á¸”Ð;p%ÀÜJ h¸ ý9°U%4Ü p*’ƒn·§l ¥`ÆÛ€Á.R°c@íÀ`–ñ…Ößcm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6Ûœm·ï¶Q~üDÿÿÿÿÿÿq]„¼i‚K€¿pfìq‚­¡s>ÃÜ÷¶ mà«L œõSùà J5!—‡`Äଠق¡’ |/þÝî X0ÍÁv˜?ޏ^àJØ" ž ° îûïNA~ðî®Æ½ãztoÞ7…÷‚½ÓvÝ>à<݆;mÙÿþÖmëáfÞŸÿ†;mëÿü1ªÛ«øcY·T1¶ÜøcY·¨cm»8cY· cm¾†6Û¿ü1¶ßÿü1ªÛ°1¶ß†6ÛÿÃmÏÿ k6ê6ÛðƳn§Ã½ðÇmº¿ÿÃͺ¡¶ä m·pÇÛsp?x+á¶æÛoÃmøcY·SÿðÇÛz†6ÛŸ j6øÛnÿ†5›z†6ÛðÆÛwÃͽ!vÞ·`ðÆ»o@Ç›Ãͽmÿý?á¶û†5vaVß8cY·¨cm»†6Û˜cm¿ÃͽCmþãw;ÁÞ †5›záfÜNÕmÔ†6ÛøcQ·Ví·¯†>Û׆6ÛÿðƳoXcY·¤1¶ÝÃmÌ1¬ÛÕÁ[³p¶ìÒz|1ößá¶ÿíº˜cm¹øc¦Þ°ÆÛwøcU·Ï†5›v6ÛècY·¯ k6õ¹Ý ÷øcÍ¿áfÞœ1¶ßCº¡¶ùöõ†6Û¼1¶ÜÿðƳoPÆÛ} m·' k6ôÞnw›îÛáfÞ¸cm¿ðÆ«n¨c;ðÆÛ~í·¯ÿÃmøcm¹mÿ m·nûï¹îøcY·¤1¶ßøcm¾6Ûÿ vÛçÿ†5›z†6ÛðÆÛ~Ûoøcm¹÷ï ðƳo@ÆÛ m·þÛna¶ïÿáVß<1¶ßÃͽCmÿÿá¶ÿ m·þÛoÃmÌ1¨Û©ÿÃmÿá¶ÿ†5›z†6Û³ÿ m·ÿÃmü1¨ÛÓq Ä?ÿÃmøcY·®ÛoÿðƳo@ÆÛ~ÖméðÆ«o@ÆÛ~Ôm麺|1öÞ¼1¨ÛçáfްƳofÞ°ÆÛÿ†6Ûècm¿Ãͽ>ÔmëýÓïo vîîÝàï v7jðUáo·ÞÞ7æì}Ø[¡¼ãº ½íãrºN«‚8—†{‚éÁtà½Åq\1¸;{zpäáî6öõq·Üw 'Þ'owuî†äN]ÅrN[Šâk‚9xf^ï¶é>ûîÓƒŠà÷wpžìNî=Óîî×÷2uqn“ïß}pGV« ðÆ£oŽw{„ßy;ß}÷÷ßwï{w~Õmé÷ß~û´éÜ®ë‚uaš°Ï m·îﺾûïß}÷÷ß~ã7iÞîïý÷ß»¼î+ë‚uaš°ÏpNû«ï¾û÷ß}ý÷ßwvÜûî¿ï¿}÷‚¢V†{ï¾ûï¾ý÷ß~Ömèð—ß}Ñ?»½î׺O¿¾ý÷Ü8#¼ß}Û}÷ßyß}Úz¸8;Ã>ûï¹¾ã­Ó»{Û¶÷q7MÓq_yº+÷]ÿðƳoOÿ¼^æNeøc¦ÝXc¶ß<1ªÛ°1¶ÜÃmÿðƳoL1¬ÛÔ1¶ß†6Ûàcm¿ m·á¶þÖmë†5›z~Ôméöõ m·ü1Ón¨cm¿øcU·¨cm¾†5[zÿ k6ô†6Ûçá¶øÖmèÛoÃmÿÿðÆÛøcm¾†6ÛðÆÛ~ÕmëáfÞ¡¶øÛoÃͽ?ÃͽmÿáFÝOøcÍ¿ vÛçøcU·¯ÃͽCmð1¶ß†5›z6ÛðÆÛ k6êðÆÛ†;mÔþÛoÿÿÿÿÿÿþÔmëÿÿÿáŽÛu?ÿþÿü1¨Û©ÿÿÿÿÿÿÿÿÿÿÿÿû¶QüLÿÿÿÿÿÿmC'  1Ÿ67îh·8íƒa×`«h¹¡‚0ÉÀßpjÜ÷‚nÁn{‚=Oð20¹ ,,ºóÁ›ë ö˜*ªŸp½Á ‡^ðM¤ ª§ØÞàzà9¼¼pF7û[ÜÁw 7;ƒ¼÷}ýÕÓ}Çv¼xNðFí¼Þûïo/o»nÿÿü1ªÛ×í½?ÿÿÿ j6êþÕmÕ m·>ÕmêÛnÎÕmèÛo¡¶ïÿÿü1¨Û°1¶ß†6ÛÿÃmÏÿ j¶ê6ÛðÆ«n§ÿÿÿøcU·T1öܶîÛnw‚? m·0ÆÛ~ÛoíºŸÿ†>Û×ÿí½Cmøcm»áfÞÆ³o[ŒÁáfÞ¶ÿ†5[z6ÛÿÿáŽÛ|øcQ·ÎÕmêÛná¶æÛoðƳoPÆÛx^à›ÁáfÞ¸cU·†5u8c¶Ý_ÃmëÿáVÞ°Æ«oHcm»†6Û˜cY·«‡¼ß}÷¨cm¿Ãmÿ†5u0ÆÛsðÇM½a¶ïðÆ£oŸ j¶ì m·ÐÆ«o^Ömës û÷;–ÛoøcU·§ m·ßá¶ï m·?ü1ªÛÔ1¶ßCmÉÃͽ72}÷ß k6õÃmÿ†5uÿøcm¿ m· cm¿á¶íÜï¾ûïðƳoHcm¿ðÆÛ|ÿÿí½Cmøcm¿ m·ü1¶Üûï¾ó k6ô m·ðÆÛá¶çÿðÆ£ožÛoáVÞ¡¶ÿÿðÆÛ†6Ûÿ m·ÿÿ m·ÿ†6ÛþÖmêÛnÏü1¶ßÿ m·þâ rÿ†6ÛðÆ«o\1¶ßÿáfÞ¶ü1¬ÛÓáFÞ¶ÿ¸3tœ7 }·¯þÕmë j¶øÕmë m·ÿøcm¾†6Ûü1ªÛÓþÿ÷‚oYƒ¿x;‚¦ðwƒ¼nÇx*ð·‡xûÁWƒ¼-á/ð2ñ¼=áÞð·‚ûÆöâw n!ŽP` vàu8.N'nî#y1{šq·p÷·«¶ïx x¯O½º{ÛÍæööûáG¼[†n®ÄÜQ¸'° s‚wÞÝÜ¡FÞ®wÜ'¼œÍÃß¹§w=ØÞÿ}Ð7r¹\6ûïßW>|o€X†O¾û•÷ß}Êþç}ýÎç k6õ¼-Ûw†5[z]{ï¹o¾øc¯ö¯«Ÿàa“ûï¾û￾é=o¾ýÆnÇýÕÁ»ï¹o¾å m¿ï«ÇÇÆ¼2s¹ß}÷ßÝÞž÷ß}÷Ýû¿}Ánûî[îWï«ÇÇŽÛ«øcQ·`cm¹†6ÛÿáVÞ˜cU·¨cí¿ m·ÀÆÛ~ÛoÃmü1ªÛ× j¶ôÿþûn¯áFÞ¡¶úÔmëü1ªÛÒÛoŸ†6ÛàcU· cm¿ m·ÿÿÃmÿá¶úÛoÃmøcQ·¯†5[z†6Ûàcm¿ j¶ôÿ j¶ô m·ÿÿá¶ÿþÔmëðÆ«oPÆÛ| m·áVÞ¶ü1¶ßíºŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß¶Ry⺠x&áÁ7=Ð#t ï/›¸)p`]Ø;°»˜{tÞ ¸8ÿ»¿÷ßy}÷ÿ¿ï¿ÿÿÿÿÿ jfôÿÿÿÿÿÿÿÿÿqÃÏ=C}ÿÿÿÿÿþàŽìÿÿÿÿÿ¸ïw÷þÔmÕÿÿÿÜw`›§v ¼OÿðÆÛsÿÿÿï¾öûÉÿøcQ·§ÿÿÿ¸]÷ß}ÿÿÿÿÿîî0§ÞO¿ÿÿÿÿþöðÏ¿ÿÿÿÿÿÿÿðÇm½ÿÿÿÿýÁ‚^ÿÿÿÿÿ÷¢pÿÿÿÿáFÞ½Û¸"÷ƒ¼.Õmêð]áwƒ¼%á÷„¼-áûÂÞáÞãxÞðw‚ïoð·}÷‚:ÛÖ§¸*7pÆ£{Ž §N¸Kp”ûîsÞöæœý÷;ï¾å k6â\2tOw+ƒ Á®î r¹„n 0Î)]ÿ¿9ÕýÛv7{ï¸I?q·¸q?»{ïïº{£q\7vÞŸ¹Ü¯Ü†{·º¯ž<þûî{ï¼·“Ó®ã¿ï ~ë¾û—}ÝÖû•û‚ÐÎÛß|UóÑÏï¾ý÷ßÜîÓû»¼1¬ÛÕÆo¾ótßܯ¿º¾ý÷+÷ª‚ß?Ï_=þû•ûï¹wß}÷wwJþåÜ￾ûï¾û÷Õüÿ=xeNóžaG¾¡·ºûïß}ýÎûû¾âßs¹wß}÷ܯÜãàeÌnsp›É÷;À˕؜ÞènÛ™ÜéºnÞìow6óº¼3Ã9w›Í÷ÞO'+ï¼ÞW}ç»oÿýíå{þÿáŽóuÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶RöXXÿÿÿÿÿÿp{¤›TBÉŽ[AØc¶ƒÀV=vÀ=\ ¶Á-«œiê´.T 6î´ùÀþØ®pDÓ²âíN0r£É@«.ÒWCÎî îî6ãÝØ7O:Ü*à‰¤ý¤¥ÚJäÁ™qØt žpk‚+*`b¨„»INCÉi,>çwî0îa.AWì{ î »ÜA.Íû«„ Ìp8 ¸@#pC¼x.á{ÁW‚n€ÝÄnAn ¸. ÜWà›°MÁ0]ØÜßy¼ýÒs¿ï7“«¾éº]ë¼%éç¾òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÌÿÿÿÿÿ÷Kƒ‚afÞ¿ÿÿÿÿáfö¯]§Þ ¼àÿÿÿÿÿÜ=÷ÜïoðÆ£oOðÇM½ÿûŽç}ÿÿÿÿÿûŽð‡“÷#ÿÿÿÿþûþû»¿ÿÿÿÿþÿÿÿÿÿÿÿÿï vÛ×ÿÿÿáfÞŸþâ uqÿÿÿÿ j6õî›×xýà›ÁðÆ«oW‚÷ƒ¼%ãÞð·Þ7…¼;ÇÞ{Áw‡x\1¨ÛÖûý ¹€L-ÎÂ÷Ó‚äà«x\ƒ“‚0î®7Ø*ôá.íîÜ%>ûÓÞñ¸¯o¸0gAÞ¾ûë…]sö©ÂSœÖá7wa®ÓÛÉ÷‰÷¸Y<®18q¸{ïû˺ne܉È÷ßpm÷*æ¹ÂSŸß}Öûïßs¾þîîýþì}Õß¾þûî·Ü«œ|âç?¹ß~ûïßs¾þçu~á7aoöæ»»ýØwßp=¾å^ œ©Î]÷Ýï¾ü1ªÛÕÎûû÷ßy¸ï¾ænû•ß¾êë}Êà–û•|œþûïß}ý÷ßÜï¾ûïÜßÿººßs¸%¹V3>Ø@$8[p>7§“ï7ßy9Üßs¾ü1¬óÑáÞnaÜï¾ûþé÷]Ðï'ܡޛz¾×ÔýÚ}ûÂ}᯾ûï¿ ?÷ß}ÿ{{ÿÿÿÿÿÿ†5zÿ†5[zÿÿÿðÆÛÿÿÿÿÿý?Ã6êÿÿÿÿü1Ûn§ÿÿÿÿÿ†6ÛÿÃmÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¶Ss|Tÿÿÿÿÿÿp÷u‚›“Ã%GÁœ K€öNÛ‚·má“`×§p(׺K'9pü BNÛ`ðcwšwãåÚ†@ÎL Œ|W,ð±P1NڃݭÕÒÛNpQ†È–ü9 ,Ad9  (]°R8U°E –†äÀÃT|}¡˜d¨,2 –Î8¾ã¹Ø[ wÝ7Únp\vì-Ûqî¯ÂÝ»½àîÁWèr{«K„‚®â¸Ýî —îÿvÜw›ÍçÝ'ßy÷#}÷÷§G½?Ý]·ktŸzÿÿÿÿÿÿÿÿü1¬ÛÓÿÿÿÿÿÿÿÿÿÿþðÿÿÿÿÿþð|1¬Û×ÿáLÞŸÿÿû»Çx+ÿÿÿÿÿqÝîÇÿÿÿÿÿsîÁÞÿáFÞŸÿÿû‚;«¦öá/ÿÿÿÿý÷[›ÿÿÿÿÿïÿÿÿÿÿÿÿÞðŸÿÿ†5Þzÿý‚œ!†;më†:mëÿÿÿÿýÓ¼;À ÿøcY·«Áw÷æñÿy¼aFÞ¿¸0Õ Ã ÉˆÃ'^àíÁÍÁÇp{ƒ·w7 7{ÛÓ…ÝxÞ=ÓpÏr¸kƒnp¦àÎáWIÊÀ8\çÝ·W“ÕÒ}çpãqÜ-îwÞÞ®+¶÷¾ûﺽ>êûëB%Ç É× jµs7+÷ßß}ýÝÝÏÞ7¾ûï÷ß~ûï¾ú¸d Î@÷÷ 7;–ûïï¾þûïÿß¾û÷ß}÷ÕÀ(›8?†5|y¾û￾ûûîïÝ¿ï¿ß|1ßn-÷öâ¾ú¸P߯ Üîî Þo'ß}÷÷;ï﻾ïþûý÷Ãmû„\ÉÊû調Ï'›îWÞäûï¹wß}Â÷ßÝû«·¼Ÿqnr7ÞnWß~ân"}å}÷ï¼½ûïßÿÿÿ½ÿÿÿÃͽÿøc¶ß?ÿÿÿøcQ·§Ã¶êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáFÞ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¶Sð˜Lÿÿÿÿÿÿp»al2Tà)ƒ82` ÁœàíÁ]a°Î‹è'8À¼€)Á[‚ª…ƒ êïƒHÀÏÚ ÀÀ8+hƒ' »û«–ØR6àÍ;¯€P#ÐÉ@d¸5‚Ò¦~=É߀˜0À¸ Œƒ `Ép]ø„2ýÝØK‘¼Ø[ÁÜ>é» x;ˆq®q70¶Ìî ]Øw{ÁVà›÷q‚®ÝÉ» pp—ìn›ÂÞè;ˆ÷Ü,-Ós¿Ý7m÷ûÆîûûÓíáÌtžxܮۭ÷ÝÛßûïý÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx;ÀŸÿÿÿÿÿsNÿÿÿÿÿï¿x*ðGÿÿÿÿýØ[É÷ÞÜÿÿÿÿÿï7Üÿÿÿÿÿ÷[ÛÍ÷0MÇÿÿÿÿþôûï¿ÿÿÿÿþûï¼ÿÿÿÿÿÿÿÿÿÿøcY·§ÿÿÖÃ7ÿÿÿÿÿû§ÖÃ?ü1­³Öðw„¼ûÍáÿýá÷ãþ⸆Á…†NpWpNà˜ÜÜà÷n4ûÉÎã¸ÂÜîpþðNñ¼~órNWAwp£qàÍʲd¹€aÐɱÃ7Wîîîî¯7Âo¸{»»÷Ü9¸û±ÿï¾ët7§[¦îìÃà ÍÎû÷ß|1ªÛŠûï¾ûîwï¾ÿÿß}ûï¿}÷ÜÉ÷÷ß|1¶Ýß}÷ïí_}÷î=çû®ûïß}÷ß}Ôq0 ØŸÎ9áFß}ðÆÛ~ûïÜ9¾þåu}÷Üý÷ß¾û÷ß}äéºÜûÃ>ç}÷ï¾ì[÷ß}ÿî»îWï¼!ý÷ u¾ãコo¾ór¼žO¾ûÉÎá{Øœîwßû­Ó߸÷ßq]\­]}÷~û÷ß}ýßß¼#ÿûÿxÿÿÿÿÿÿþÔmëÿÿÿÿ tÛ«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†5zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¶Tm¼DÿÿÿÿÿÿpNà÷h°ÈC%ÀÜ2 œÐÁ<: qÁîq´XH.à çmðɼ3v«Ép7 €)Áî1¸]Îçqë`Ç7ʨf 5rÀƒpEh6q4 h0Ô“Õj°Äèøð0á“J8¿uX"¸X;ÁÜÜ{³¸Â\0K»[…ƒ¸`·KÆ÷}ØÝ•l3vì÷›˜Ü‚îé¹7‡x;ˆ-ØîÍÛt^»»Ù»îÛ÷ß¼%Ä=àîDãw+ÍÒ~û„]··ÿßï¼¾ûÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÁïÿÿÿÿÿá|þ®?ÿÿÿÿÿpO¼áÿÿÿÿÿÜÜ8ï7ÿÿÿÿÿÜï;ÿÿÿÿÿ÷ßy¾çÿÿÿÿÿ}ûÿÿÿÿÿ÷ß}ÿÿÿÿÿÿÿÿ¼ÿÿÿÿûƒ\MÃ?ÿÿÿÿþí¿Þþð_ÿÿýà›ÁpƳs¯ï¼÷ ¬L2` œ¸+ܸ*ܸ¸KpTo{p{…·ãvÝ·¸Þì{ G¼;¦âºoÄ;‹q]Z#§@£Žü1¨ßÕÚuu}ííÂooN®îîï¸ÕÇî÷Dä·&ëu}l2`á“îûï¿}Êå†5›z9Ü»Ýßî6ïþå j6âß~ûêádî[÷·}÷ß¾çs¿¾ûûƒ÷w6Ûûïßuk ƒmû³}ÎýÎé9«€›î}÷߸îÉÛ¾ÿ÷߸¯¿}÷Ãïñ÷÷ß}÷ÝßßxNûîî®ïï¿þë¾ý÷ßpNûÁ;ï'ß}÷“žà÷Ü®¾ûï¾û…ï¿ýÄžœî“ï¾òWpe}äòyß¼Ÿ}ûÉåÞWï¾ÿÿ÷„<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶TêØ@ÿÿÿÿÿÿpNà÷¸ì˜0 Ã&Ìœ¸]ÆÜVÌœ¸;pº§T t3¡ †J83ƒ&á›Cdã»þêÁ@-©€¨-`,ϹÁ®ª ?0aƒ“úeª•GØÃ'MÃpÇMº·w÷0—a.îî®·;…îÆí»Ý…¹ƒ¸`wmÛqì1€_í ³îƒ¸pww$ñ¼-Èt6 ¾æûïþñ»Nw#xxcY·£ºN®wîÂÞÂ÷`îÝ»«•ÁÍæûîwÛÃ7Aß}÷ý÷ß k6ê6ÛžûïðƳo@ÆÛ~Ûn÷‡ï¾ý÷ß{ÿáVÝPÆÛøcm¹ÿáfÝ@ÆÛ~ÖmÔÿ~ÿÿÿÃͺ˜c]·¦ÖmëÃmÌ1¶ß†6ÛðƳn§ÿÿÿ k6õ m·á¶ìðÆÛÃí½<1¬ÛË m·ÿÿöùðÆ«o^ÖmêÛná¶ä m·ÿÜ8Ü$ðƳníºœ1¨Û©ÿÿÃͽ!fÞŸ¼oÞ8c]·®Ûoü1ªÛ¥†6Û–ÛnþÕmëðƳn¨cm¾†5›zýÁï7+ïÛ‚¯Ãͽ8cm¾†6ÛÿðÇM½ðƳoPÆÛ~Ûnß}÷2ü1¶ßøcU·Sÿÿ†6ÛðÆÛs m·ÿß}ýÇðÆÛá¶ÿÿÿ k6ô m·á¶úÛoÿ¾û÷…ü1¶ßøcm¹ÿü1ªÛ×ÃmöÖmêÛoÿ¼ÞO¾ÿÃmÿ†6Ûÿÿ†6ÛÿÃmóÿÿøcm¿øc¶ÞŸÿ†6ÛècY·¯ÿÿí½mÿpÍÃÿðƳoXcY·ÀƳo_ÿðƳoO÷6å vÛ×ÿ†5[zûÇÞxx[Ïýãx j6ôáŽÞúî&àÁ7[‚®Ômêà­ÁÛ„»„·np>œ%¸]ÂC¹ßpTÜop{ÄÿÞÞ;§q7ƒÜW nwÅ}Ð3´þîí?zuu}÷ß}÷wiÇ k¶ôp÷ÿuuÜWmÊÔmèêôýÕ÷c¶ß»ºÃ­½_tœ÷ßr¾ç¾åwÿÜ½Êøcm¹¾û­÷Çá››•Ï»¾ýÎûûï¿}÷ý×¾ý÷ß¾ûÀË‚÷+ûîW{￾û÷;»¸c]ïÎîÞþëÝ'½÷÷¢¾ú§ ƒ'ݧ÷ww¾ûûï¿}äøcy¹¿ÿ klôºº'øŽ+Ã>Û~Çܯ }ÎçpU8=äû>Oï¼3ï¾òt®;šqï¾ôè·W“É÷W“É÷ßY c—ßy>ûÂ/¾û÷]ážo¾ôío'“Éâ÷–ûÉ÷‚W“ðÇMº¡6ýâøcU·`cm¹mÿðƳoHcY· cm¾þÖmë†5›zÿ }·T1ÛoŸ j¶õ m·áVÞ¿Ãͽ!fÞŸ†6ÛàcY· cm¿ m·ÿý>é·RÛoŸ†6ÛðÆÛ~Ûoí½|1¬ÛÐ1¶ß†6ÛðƳoOðƳo@ÆÛÿþûo¿ðÆ«oO†5›z6ÛðÆÛ~ÖmèÛoÃmòÖmÔÿÿÿÿÿÿÿÿÿðÆ«oPÆÛÿÿÿþé½P1æ÷øcU·¯ÿÿÿðÆþwp/ÿÿÿÿÿÿÿÿÿÿÿß¶UgüDÿÿÿÿÿÿ´6à˜:ÀÿJß´ Ã7 p{„Ü-¶;ÔΆN Ü,lÃ5‚᛬çTì>ÀL2qÇs¸ÿГ8 u…§W q\¦M{BnqpÇMº»«Jµ0ɘHd;nÛ»•á݇fç;on}ØÜ‚\mÛwuo·»{ŠäÜáo rNÌ%ØwûîW#}÷ßܯ5¦? k6õv7MѹßݹŽäÞãÜ®›´Ó€EææÞœï>O÷ÞO†5›uCmÏ}÷û¡†5›z†6Û½á}÷÷ßÿí»móðÆÛsÿÃmØÛoÃͺŸïÿÿÿ k6êávÞ˜cY·¯ m·0ÆÛ~ÛoÃͺŸÿÿü1¬ÛÔ1¶ß†6Û¿†6Ûì1­ûÖ×méáfÞ¶ÿÿøc¶ß>Õmó†5›z†6Û¸cm¹†6Ûÿî`ÿÃ͸œ1ªÛ©Ãº¿ÿü1¬ÛÖÖmé÷—5ávÞ¸cm¿ðÆ«n cm¹ÃmÏÿí¾|1¬Û°1¶ßCͽs¼œwƒ¼ÝÃͽ8cm¾†6Ûçøc¦Þ¿øcY·¨cm¾†6Û“û‡º¾áÿ†6Ûÿ j¶êÿÿðÆÛ~Ûn@ÆÛýÎçÜcøcm¿ðÆÛ|†5zÿ†5›z†6ÛðÆÛ~Ûoÿ¾þíü1¶ßøcm¹ÿü1ªÛç†6ÛøcY·¨cm¿ÿ{vü1®ÛÓ m·þÛoÿþÛoÿ m·ÿÿÃmÿðÆÛïöõÿðÆÛ~Ömëÿøcm¿ü1ªÛÐ1¶ß÷Mņ;mëÿáfްƳofÞ¿ÿáfÞŸï¸bÿðÆ«o_÷ŸûÁü1¨Û×î p¨cן†;yû‚;‚7¸#¸;pup{ƒÜ%¸=Áîܸ+Üwï?ýÅî[“r»¾á Aüücή® î;»žêò}Õ÷§Iû˜ß¸îǹ·7ýÉ:†5zºn‰ÖûãäÝß~ûï¾û»ûï¹o¾ÿÞÞ¼1¬Û‹Ü¡¶æûïß}û÷-÷ß¾ûûï¹ï¾ýãï¿ýÊþêýÝñøg}÷<1ªÛãï¾û»û÷á|þ¯¿qÜk}ÿîÛ­Å}Öêû÷ß}Á{ï¾ûï»ï¾ýÃÞOÝÝ÷ßÝ]{î·w‰êûÃ8X c ßy>á;Éäûï'“ƒßy<Ÿ¹^O'ßr'¼žN÷2yn“¢}÷“»’p„¨dC¿¸ð‡“Êþò}÷ï'÷“ï+Àäôûï ¼3ýážOÞO᎛u j¶ì m·0ÆÛü1¬ÛÒÖmèÛo¿†5›záfÞŸÿÃ6ê†;móáVÞ¡¶úÕmëü1¬ÛÒÖméøcm¾5›z6ÛðÆÛü1¨ÛÓáŽÛua¶ÿðÆÛ} m·á¶ü1ªÛ×ÃͽCmð1¶ß†5›z†5›z6ÛÿÿðÆÛÿ j¶õøcY·¨cm¾6ÛðƳo@ÆÛ~ÛoáfÝOÿÿÿÿÿÿÿÿÿ j¶õ m·ÿÿÿúŸ vÛ©ÿü1ªÛ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶UåDÿÿÿÿÿÿ¸=Áî¬ θ;p{…Ütcƒ:uL2ñ÷ ¸{Žã¸Çuh<3qÛÀÇ]îþâ¹\U°Ê°¡›ŠÀ%;q\MÅû»£vÐ[‡7mÝÕÙ»ðîÂÜîî«3vð·1»7w·û§}Êè;…»â'ÜanÃÞÝ~û•Âí¹·ß¼Ü¯»¼;áfÞ®ÍÚ}íçx[ ½àîAÜ{•ÝÌß}æêóxÝ¿û￾ûï¾Ömë¾ûûÆôÖmêÛnïo[ï¾ý÷ßÿ†5[v6ÛçáfÞ¿øcm»møcY·Sÿÿÿü1¬Û«†5ÛzafÞ¼1¶ÜÃmøcm¿ k6êÿÿðƳoPÆÛ~ÛnþÛo¼1®ÛÓÃͽmÿÿðÇm¾|1ªÛç k6õ m·pÆÛs m·ÿÜÆÃ††5›q8cU·S†5uÿøcY·¬1¬ÛÓûxgx&à"×më†6ÛøcY·¦ÕmÔ m·8cm¹ÿøcU·Ï†5›v6ÛècY·¯îÆãáfÞœ1¶ßCmóÿÿ†5›z†6Ûècm¹?¼®{§ðÆÛáVÝ_ÿþÛoÃmÈÛoÿ¸ïÝ?Ãmÿ†6ÛçÿþÖmêÛoÃmøcm¿þûîßðÆÛá¶çÿðÆ«ožÛoáfÞ¡¶ÿûï;·øcm¿ðÆÛÿðÆÛøcm¿ÿÿþÛoûÀ¯ vÛ×ÿÃmøcY·¯ÿÿí½mþá®pØc¶Þ¿þÖmë k6øÖmëÿðÆ»o\1¬ÛÒÖmé÷+»—¼ÿ j¶õÿÿÿáFÞ¿t' N ^® §[ƒînp›ƒÜ.àíÂ]Áî;Žá7 ¸ÒÁfÿÿÝÜ]Ã\)8E®۫÷wW{»»«ï½?»¾êûï¸ßvîþåt®®®Ômêçwsßs¼¯¾ûï¾ûîwßÜ￾êáþïï†5›qn¯¹CmÍ÷Ü·ß~ûî]÷ßs¾þç}×s¹_ØÃ;·î»ï¹nWÜ·ß~û´ü1ªÛã÷ß}ý÷ßß}ûg»û‹¾û–ûïß}Ë}ÎæW‚7by>ûïîw†w†5ÛÚ>ûîiÍ;÷ß~ûïß}øc·ßO¸98î;ï¾òy8=÷“ï+ŽæO'§‰éäôòt-ѯø"ƒÁN¬ƒ³‚C4Ü—±*°"Ì þÿôà 2¬äÌLû°É†•ä†:°"Ì LÉ#:°"Ì )Õv`0HÛ-£‰YAÙ€Á ¿ß2€²Àeç.oÿù†¨ V˜þ¥VAÙ€Á%‚Xf†L«Ê)Õvx$C²ƒ°Æ,,ä¢ïi”lXí³þ˜?©U‡ ìÀ`‘@dÎÒ( u`D˜ `S« ìÀ`‘WF u`D˜ H"« ìÀ`“Eê'æ~ R+Îb÷fO}Ÿ‡ ì0̪U¤4 u`D˜ pS« ìÀ`ÍkC:°"Ì Ĭ‡ ì0Ð1yHûúd­Ç-©¦Oê¶Cv±i‘od\Uv`0IÁN¬ƒ³‚C’0S« ìÀ`“*°"Ì 3²FªÀˆ;0$`Ьƒ³‚G¾6ÛøÛoãm¿·þø³‹0³~ 5 g•IœWâÃagiû…ˆáŽM3/ã÷Fh¬-T[ñ÷Ü—`2Œ+ã*xÍèÆ` Sæ$§Qm*Y\£ã `°Ÿ…ƒHXÒ½3É”´dÃ&oçô,j˜¼¶,f2FöŸÌA’ú`—Å‹Ó4dp˃ 0a ñ‰h“ rÌ™ä´-ê‹Û0Àc1Àdçx¶l—‹[´‘üß-˜`1‹8 ìí€ß€m²³-™qgüXèÇ%à3¨oÙ2ÌÑg)–   xŸ«¦/îÅ”aabþ3ee&L+¦/T–GE‹©×“Ë`³êLXÑ1Flµm™1ó6f4o}ØÛoXßoão¾FÛíümïó¨kÆhÖú–ñ”NøZK É ¿E†A‚ÄHvN‘ÁgÕ Ð1VoâߘÓ&W2wæo‘ößh\Á¯³ž3%0P,7áiP¶¬‚½* }¡< : U«Æ¾dçÅ£ ò™ë}cj7-›ñ•|dч…¶Vˆ¸,#‚ÔÝdX0Y˘X_E¶ÚºdçÌžø´Þ™’Æ]¾_0Àg0£m­°ajŒ™’V-t-mÆûrß0Ì[o[à6ÂÕ3^eó?ãvï¶aƒ*a“Xdç…¿€´,(âJ(P Êiª=ó°µ™ùÖ9ã*Ã*• ðÊ'°ZOºÌ@, ˜ZŸjÁbl-T-úù¯‹Lè´Þ‹gΙ¥þ±¿÷Æóÿo|m·ñ¾÷dzÿmümGSþ+‚ÕNý•À˜0Z˜[/— Ámƒ¬ðóÐkEª…ª|f?müti¾Ð2Ái\¦FoÙp`¶A‚ÔÀ[t ˜ÐÂÛ yÖ‹W¿Èë÷ñçßóÁkVt!‚ÒØM@[ËH-`Ál…¼-ù” Lh·…·8FÕiü}½ðèÖægc `µo‹F!o yžŸÆß C¸-£s™ `´Î™ÁoävûìnžøkŒ0ͯ:hƒ³‚Þ[ Tl-áo!Ó>Ÿ#k?9¨µMrÒp ÈZÂß›ƒª€¶×a,ªÝ‘Óo±¶ÿÆÞûüm·8ßoãm¿¶þ7»øÝ7ñ¬Ûøßnq¶ÿ#m¾ÆÛmò>£müo·ñ¶ßÆÛmüm·ñÒ­üy÷ñö߯Û|öûmü{÷ñç߯Û¶þ6Ûøóo‘¶ÿÆûÿ·¾6þÖ6ÛøóoãõŸÆÛÏò6óøÛnq¶ßÆßyüm·ñ·ßÆÛyü{·ñ¶ßÆÛ}ü}·ØÛoãm¿¶þ6ÛøÛoãmï¾þ6ÛøÛoãm¿¶þ6ÛøÛãmîÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm¿ñ¾÷Ç›}ümçñ¶ßÆÛrÇóÿo|m·ñ¼ßÆÛmüm·ñ¶ÿÇóÿmüm·ñ¶ÿÆÛmüm·ñ¶ßÆÛmüo·ñ¶ßÆÛmüm·ñ¶ßÆÛmüo?ØûÏãm¾Gómüm·ñ¶ßÆÛmüo·ñ¼ßÆÛmüo·ñæßÆÛmüm¿ñ·ŸÆÛï|yýñ¶ßÆÛïv6ûøþo‘ö߯Ûmü}·ñ¶ßÆÛmüm·ñ¾ßcm¿¶þ6ÛøÛo‘¶ßÆÛíüy·ñ¶ßÇöO±ç*v>ëëyüm·ÈÛúñýœãm¿¶þ6ÛøÛoãm¿¶þ6ÛøûoãÍ¿æþ?›øÛo‘¶ßÇó}6þ6ÛøÛoãí¿¶þ6ÛøÛoãm¿öþ6ÛøÛoãm¿¶þ7Ûøóoãm¿¶þ6ÛøÛoãm¿¶þ>Ûøûoãm¿‡±Ž§Ç´Ö±ö÷ÇóÙüy·8Ûoãm¿¶þ6ÛøÛoãm¿¶þ7ŸøûÏãm¿öþ<ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6Ûøóoãm¿¶þ?›øûoãm¿¶þ6ÛøÛïãí¿¶þ6ÛøÛoãm¾ÆÛ|þþ6Ûìm·ñ¼æÊ^L,±:¥T‰s-ÃÒLí¾¬ão¶HÛoãoï¶þ>Ûøßoãy¿¶þ6ÛøûoãÍ¿¶þ6ÛøÛoãm¿¶þ6Ûøßoãm¿¶þ7Þøóoãß¿·þ7ÛøÛoãm¿¶þ6ûø÷oãm¿¶þ6ÛøÛoãm¿öþ6óøÛï‘¶ßcÒüµ$csÊ<&eýR&NLD‘)K2²XÛýä}·ñæßÇ›müm·ñ¶ßÆÛmüm·ñ¶ßÆÛmü7ñ·÷ÆÛoümçñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmü}·ñ¶ßcm¾EýãÎìΣ*±×ròf)e³¢¾˜,‘™b+Ì™¥Xûm¸ûm¸óoãm¿¶þ6ÛøÛoãoï¶þ6ÛøÛoãm¿¶þ<ÛøÛoãm¿¿¾6ÛøÛoãm¿÷¾<ûøÛoãm¿¶þ6ÛøÛoão¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãmï¾þ6Ûäm·óè0ñ§ÌÌI¡§!gKH–¥™Wá,bk´„̺÷¶ïmü7ñ¶ßÆÛmüm·ñ·ŸÆÛmüm÷ñ·ŸÆÛmüm·ñ¶ßÆÞmüm·ñ¶ßÆÛmüm¿ñ¶ßÆÛmüm·ñ·ŸÆßmüm·ñ¶ßÆÛmüm·ñ¶ÿÆÛmüm·ñ»êU„¸Z£n’pµ@·˜¼,í쎯¾GÛmÆÛmüm¿ñ·ŸÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmümýñ¶ßÆÛ|m·ñ¶ßÆÛmüm·ñ¶ßÆÛs¶ïmüm·ñ·ŸÆÛÿmüm·ñ¶ßÆÛmüm·ØÛoãm¾FÛíò6Û1#}¿¿¾6ÛøÛoãm¾ÆÛ|>þ6óøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãmÿ¼þ6ÛøþßãÏ?¼þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ>óøóoãï¶þ6ÛøÛoãm¿¶þ6Ûøóoãí¿¶þ6Ûìm·ñ¶ßÇ›müm·ñ¶ßÆÛÍüm·ñ¶ßÆÛíüy·ñ¶ßÆÛo|m·óäÂÌ\YÚ ,²ÁaÁnѨÌ~FÛzÆó}¶þ>ÛøÛo±¶ß#m¿æþ>ÛøÛoãm¿¶þ6Ûä}·Øóoãm¿¶þ6ÛøÛoã}¾FÛmüm·ñ¶ßcm¾FÛmüm·ñ¶ßÆÛmüy·ñ÷ŸÇömò6Ûìo7ñ¶ßÆÛ}¶ùmüm·ðÝažc³(ùœ×ÇÛÍö6ü|{êìm÷¤m·Èßoãm¿÷¾=ÞøÛîñ¶ßÆÛmö=ûäo7ØÛoã}¾Fó}ýþ6þìm·ñ¶ßÆÞoüm÷ñ¶ßÆÛÏü}íñ¶ßcmÿ¾ùï|y·ñ··cyÿ·¾6åüFØYþ6ûìwÈÛoãuö±·?±·ßÆûß^L,HÁl1ÚendÑ£§oxÛo±½£ëÒ#† ®ÔÂËSL38ÿSTîþ+˜DÇo˜,-‚ÉPØ—GL¯—ßT®d,DÁLoT…ŠN‹J³V„ÂÈ 3 y6  €µ©P±O¢ÃzcãùYÖÀYjâBÎà·ï€¥ÄLN˜Þ"´sL/ ºvFÛ‰¡²{f¬-å;0¶BÝ­…–"a ³hŠÒÚ`ÔHþ§¬W93´ÂÈ a„BÌÈ–¡­0c±Ìm—gØ[Ù ,áb8d¯jT,V´ÁÍ1Øû]éÎ~¸L,DÁL1{€±C)‡…°èÖ{©t80ÖbÞ0P,LXžlË S ÊRÂág«¥ÄÎL×Çÿ¿¹0©‹Fµ…²e‹Y£müˆÛßçªÃ-S̱+¶ËÞźXÛÿï˜DX©…ÀgБ”tÁ$E»ÄYCÆTR£SÓdŸñ–±àˆù……sj4s‚Ó†bF­ßÒ7›«hxÉ TY›d¾`bd¹”Żƫn Á‡w‚EC&ÛäkUçõ¡2HXª¢Íè)¦H¢-Íw¾L7F=kSñ”Vs©jx[f{×±öß'‚ž3Kíd‹2bň‹s¢¨2®Ln›å ˜¯¥’Ï,[Ø·hÛoãjzùV)bÏò¬-1Å·d”°¶Ÿ%ƒ+akìoç˳3}ȵ‹pµ‹~6Ûøû{㺵X Ì0Jœ¬ZØ w¶þw@3ðóµY3V{µN¤o?$~Û«* 2hWeà5K¾XÿoXóí¤ýQgâÍnA*¬¤Z¦Ç¾«Æéö‘­Ûìm½ñ¶ßÎèY2,äún`7hÛÕ,o¶ÜÜYÌqgò[ªP þb?Þäy÷Éý˜ÌÇÝÈð…¿,‹^µ±·»$ï‹;vvÅ­‹gmö6Û²V,xXä—‹_¹#m¸²³-‹_ÆÛ|¶a€Îc€Ë-‹Y™±l±¼ÿ#íþÆÛ3Œ˜±ü¬¼_Æß~O˜³ðÓ3¶[²FÛܾí¶ù+‹%`5°ùo|y·ó¶,lYöÁ)‹X%1ocmï¿»K”‚Ăͣ™uñ·þÓÌ =‹>vÀkbÙ#m¹#m¿©‹0JòV_þ¿¹Ïüí˜ÌÇÛŒ[€gü¼Zù—8þçlY,Yó¶-l[ñ¶ßÆÛ~JÅ‹ ÊÅ­‹\±¶Ý’±kb×ñ¶ß-˜`1˜à2vŸ[…¸[ÈÛoãyÿ‹ÛÆ'+8nÊÀkÀ5ËyÞvÀc`3“¶[¿íüm½ñ¶ÿÊÅ‹²°ð müm÷ó¶,œ,ú%1k`6XÛí¹ò8bPmA<1Œ–:-ÚCzePµkÖ:ûåϨY,Yµ!‹^½„̼þ6Ûù˜³S~’±kbÝÃ¶ßÆö;f1öÀc±cË+2Ù—ØÛÏçlXزó¶-ìZ¼m·ñ¶÷ÊÅ‹ÊÅ®E®ØÛnòȵÀ·N6ûíŀΰ³èƒ0-eþcâjOL)¼yýÈy#6ʈ²UÃ5).®@lìb6íüïÍ 3çØé¿V2ûíò7.{.š›Ê° ÐqŒGM¿æû>À3H ìú@lÀ ¼sYòv˜ v,åfŽ˜Þ:ÑyQý§³ÊbÈbÏžX ¨·‰Ü™Rq¶ç²È³@²{T€×Ù2¼m·ØþͤïɘíÀ ÂÙI›Ë"ܘ·|m÷-zE’bgœ-”ų¹¯þå¾,f(ÅxÍ–˜¶L¦e-1,vÖý™jfW{ãWïðòøe«­F°Z‰ÐµöOL.@ L- ÂÍjY»¾Pk «†pÀÄ™!jFX º‘®Ûú0˜³š y|-HZÀ[|„‘•¾øû§ðòF5}À²‚Ó`.@_&ƒ) ZÆ¿Õñì÷БˆY°˰µ38ðVTL¯aoì:1†Z¼¨Ö R<¢âÌWL*H[­ºúÃæÕÙ¬3?2t-À/.×ö†Ò17­É…BÓal€½m锌ð¶‚ÛÆ½wñ¶ßg„ÌsonÂÜŒ[yrÁ˜ ¶¬Huö‘†U N…¿k·¦XZÂÞBLʵþ:{ü;7†lÔ–\-HÊak t5kí§ýXûûãí½c[?‘$…¬-·ØL-§þ>óøÙŽØ˜Ûoãí¾Æ¶XÛmˆöþ6Ûìt³R#}¿÷»¯¹­½#m¶¶þ7ÛøÔ2ý&<ÛøÝ7ñ¶ßÆ«îñößÇJ·ñçÞTm½xÛoãm¿ŽóÿoeÆÛm#y¿Gô±¶Ûmò6Ûøý7¤j¾í¶þ>Ûäy·ØÞÏãí¿öä·­öþ6ÛøÛoãm¿¶þ6Ûøßoãm¾FÛ}öþ6ÛøÛo‘æßcm¾FÛmüm·ñ÷ŸÇ»müm·ñ¶ßÆÛmümïñ¶ßÆÛmüm·ñæß#m¿¶þ=Þäy·ØÛoãy»ÆÛmüm·ñ¶ßcm¾Fûß}üo7xßo‘¶ßÆÛmüm·ñ¶ßÆÛ|æþ7ÛøÛo‘¶ßÆÛmüm·ÈÛoãm¿¶þ6ÛøÛoãy¿¶þ6ÛøÛoãm¿vþ>Ûøóoãm¿¶þ7ŸøÛoão?6þ6ÛøÛo‘¶÷Æûÿmüm·ÈÛoãm¿¶ûmò6ÛøÛoãmï¶þ6ûøÛoãm¿¶þ6ÛøÛoãmï·þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6Ûøóïãí¿·¾6ÛøÛoãm¿ìþ?³øÛÏãoï¶þ6Ûøßoãm¿ìþ6ÛøÛoãm¿¶þ6ÛøÛÏãmÿ¶þ6ÛøÞãm¿¶þ6ÛøÛoãm¿¶þ7›øûÏãm¿¾þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ=ûøóïãï½þ6ÛøÛoãm»ÇŸß|m·ñ¶ßÇ›müm·ñ·ŸÆómüm·ØÛÏãÍ¿¶þ6ÛøÛoãm¿¶þ6ÛøÛÏãÍ¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛÏãmÿ¶þ6ÛøÛ{ãm¿¾þ6ÛøÛÏãmï·¾<ÛøÛoãm¿¶þ6óøÛoãm¿¶þ6ÛøÞãù¿¶þ6ÛøÛoãï?¶þ=ÞøÛïãm¿·¾6ßøÛoãm¿¶þ=ÞøÛïãm¿¶þ6ÛøÛoãm¿¶þ6óøÛoãm¿·¾6ÛøÛoãm¿¶þ6óøÛoãí¿6þ6ÛøÛoãm¿·¾6ÛøÛoãm¿¶þ6ÛøÛoã{?¶þ6ÛøÛoãmîFÛ}¶þ7Þø÷oãm¿¶þ6Ûø÷oãß¿¶þ6Ûø÷{ãmþÆÛor6ßøÛoãm»ÆÛmÎ6ÛøÛoãm¿¶ïmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛo|m·ñ¶ßÆÛýüm·ñ¶ßÆóÿmümçñ¶ßcm¿üþ<óú[* e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á/2° Ü ~–Ø)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú^`¦VÛ€Á+2° Ü ~–Ø)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—é}‚™Xn¬ÊÀ€;p%ú[à¦VÛ€Á+2° Ü ~—˜)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—é}‚™Xn¬ÊÀ€;p%í-°S+íÀ`•‚™Xn¼¥¶ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á+2° Ü ~–Ø)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á+2° Ü ~–Ø)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á+2° Ü ~–Ø)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—éÝ‚™Xn¬ÊÀ€;p%ús`¦VÛ€Á+2° Ü ~–Ø)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á.2° Ü ~œØ)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á+2° Ü ~—˜)•và0JÁL¬·‚_§ì e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú^`¦VÛ€Á+2° Ü ~—Ø)•và0JÁL¬·‚_¥¼ e`@¸ °S+íÀ`—éy‚™Xn¸‡íÀ`—ã¶ûmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛs¶þ6ÛøÛoãm¿¶þ6Ûœm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ß¿¶W\|L†0¼ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿÷nÜp{ƒÜáw Ü.áw ¸î;½Çv7ww}ÕÕÕÕÄœ[Šá®q\5¿݇t…»ÞîîêóxK ]ãwu»;±»÷÷ßu}ÕØKÁwA.›Â]îÝ„»_ÞnWMíÛ`ï}ÊðîW;›yÝ…»n›ï¸ÓÛÁ÷à­Êã{}ÎûïO¾ïÃ6êûÍ÷wÞ¼Ÿ}ϸەÕ÷îÁÝ'nðï¹»¶ò}Êûï¾ÿÿï¾ÿ¿øcU· cm¿þí·¥þé·¯ÿü1ªÛÒÕmèûoÃmÿøcU· cU·§ðÇm½?†;móðÆ£o_í½mü1¶ß†6ÛðÆÛ~Ömé†5›zÃͽ0ÆÛ~Ûoü1¨ÛÓ m·ÿÿ j6õøcU·¨cm¿ m·ØcU· cm¿†5›z6Û÷¼ÖmêÛoðÆÛ~Ûoü1¶ß†5zöøÛoü1¶ßü1¶ß†6Ûü1¶ß†>ÛðƳoPÆÛ}ݾÖmèÛoÃmøcÍ¿ÿ vÛÓøc¶ß¶õÿ j¶õ m·á¶ÿ }·þñîÂá¶úÛoðÆ«o@ÆÛ†5z6Ûü1¶ßü1Óo\1Ûo\1¨Û×á¶ÿýÝÝÝÇáfÞ¡fÞ¸cU·§ j6ôÿ m·áŽÛ| m·á¶ÿðÆ«oPÆÛ~ÛoÿÜw6îáMãÃmð1¶ßá¶ÿ†6Ûÿ†;më†6ÛðÆÛþÛoÃmøcm¿ÃͽCmÿ»¹]½ÿ m·ü1¶ßðÇm½<1¶ßÿÃmøcm¿ m·øcm¿ m·þû ·iÿá¶ÿ†6ÛðÆ£oL1¶ß᎛zÃmøc¶ßmþÔmêÛn j¶õ j¶õÃͽþÖmé m·ü1¶ß†6ÛÿÃ6õ†6ÛðÆÛ†6ÛÿÃmøcm¿ j¶õ†6ÛøcY·¯ÿ m·ðÆÛ~ÕmèÛoá¶ÿp¦áO tÛÖé·¨cm¾†6Ûä1¨Ûä1¨Û“ j¶õ m·ÿ†5›z†6ÛÿáfÞ¡¶ü1¶ßðÆÛÃmô1¨ÛÖé»aŽÛ|á¶øÛoŸ†5záVÞ¡¶ÿÿÿïxÿºƒ(cm¾†;oHàíÁ^àíÁÛƒ»ŒnÞ7·oÁÝ·wzÝ·ovî®®Nè\Op¦áNáWmæé¸p }Ù?»nÛ¥s'iÂÊãNn¸ÛÜï¹Òt·Þ·W·íº Çm¸®W›‘W —€Yxß}÷îï»ÜwIýÛtŸ÷3�:ºßuu}Îå® ËÃ5a˜c¶ßwß}ûî®÷ß~Ömèîû÷wiÉ{ïï¾ë}÷ßs¹C6â. ËÃ2ðÌ1¶ß¾ûƒï¾ýÝ÷﻾Ömª_}÷·§Ÿq]_}éÖûï¾çr×D¬3øfÛnnw“½÷Þ}÷í¸¯»O†6Ûí÷ßwzw÷;î–ûîÂo½>ûï+‚·WÜw;žòs7ßvŸ m·ïºNkt§ß}ÒzºWI÷÷IÙ<Ÿv§ï';Á½äòÿÿ k6ô¼àÁfÞ˜cU·§ÿ vÛ×öù¿þÕmêÛoÃmÿ k6õ m·ÀÆÛ~Ûo¸cY·¨cm¾Ã­½mÿÿðÇm¾6Ûÿ j6õí½|1ªÛÐ1¶ß†5[z6ÛðÇÛ†5›z~ÛoáVÞŸ†;mé᎛uaŽ›uaŽÛ| vÛ×ý†5[z6ÛðÆÛÿÿÿ tÛªÛoŽÛ|øcQ·®ÔmëáVÞ˜cU· cU· cm¿ m·á¶ÿÿðÇmº¶ÿá¶ÿ vÛä1Ûo_ j6õ m·áFÞ¡¶ùðÆÛ~ÛoðÆ«o@Æ«oL1ªÛÐ1¶ßü1¨Û©Ãmøcm¿øcm¿†:mó m·ÿ†5z†6Ûïÿÿ j6ôðÆÛÃ6êC6êþÔmëÿÿü1¶ßü1¶ßÿÿÿÿÿ†0¼ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿¶WÙ˜PÿÿÿÿÿÿÜ&áiÂw ¸váîã¸î;Žã¹ÝÜ}ÝßÝ]\WÅrÜW ¸VáW p¯÷w‡xK³v7÷›°—ØwaÞ7ÞìánÁÝÞýÕÝÝ÷w‚ï uvð—„¼;ïÿy¾ûÍ÷;Íû±¼ßv¯¾îûÆí¼ïoo¼}äå}÷ßy¸î/ûîW›ïî0ï¹\Ï}Îû•Èß}Ø[t7žûï¾ò}÷Ü-ÿï¾ÿ¾ûþò÷ßï¿ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáfÞ¾ðÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý›†?ÿÿÿÿþôÿÿÿÿÿÿ÷ ¸-±†w¸Kp}Áîq«„Ü{»Ó½ÝýîéÜMÕÓÜ)8®$áÁ®ï¬Cs˜p›»»­ÝÕÏvNî;Žîêçq»›þëuuux5ÕÕû«­÷߸Nû«÷ßw¾û÷ÝÝwwº¿}÷÷ß~û¨c¶ÜWß~8ÀKÝw}ûï»ß}û‚wßÝßÝ®ë}÷]÷ß¾êÛnï¾ün{Ýww~ûîï¾ûðÆ«oGßÝßî•Õûïºï¾ý÷WWß~7A›Ã'wßy_v'wß}û‡¾òÞŸv®ÓÕéêò}ýäû÷+÷ß~Û Íäûï'“îîDòt'“Êò}÷í9'jôûÓÖòy<·“Éäû‘?}äòx$òï¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¶XV¼PÿÿÿÿÿÿÜá7 Ü&ámÂîáw ¹ÜwÇs»ÝÝÝî®·+•Êår¸· ¸›†Ü"áW ÿs¼Þwfí»ºè%áÝ›³vn¯7`»°î‚ÞÞÝ_~îûï//!Ž›zº7à»Á7…¼n¿ßr¼Þnfó~û•ÐÜï7Ü®W3r7 ]ÌïðYàäÄ;Þo¼ŸtÜÛÿ÷Þnw÷ßwr7=÷mÍ9“¶í¹°—ƒÞð›ï'ܯ¾ûï'ÿ÷Þo7ûï¿Ý·§®þûûï¼·ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿýáÿÿÿÿýØ*æ?ÿÿÿÿþì3÷„ÿÿÿÿÿÜ®wÞðWÿÿÿÿû»»îW‰ËÿÿÿÿýÝ÷“îÿÿÿÿûÍ÷ßÿÿÿÿÿÿÿÿÿÿÿÿþá‡ÿÿÿÿÿÜ®/x ÿÿÿÿÿÜà×Þ p{ƒÜ¸îœ¸îpvà÷wÇvîw‹î»•Åq7§¸®p«…\"û»««‚ÍÌ 9Ý«ûŽûÅ~ôêïwsýÉ:W›¶õº¾û«îï¼Þn£Âî}÷w÷ß}÷ßÝݽ÷w~ôó~ûïï¾ûï»ß}û }÷ßß}÷Ýßßußww»Niéé÷¯¾þûï¾û­÷ß°sÎwßy>û«ïîîûî®îWKz}÷ß}÷ß}û•Îà–Þy÷ÞNwŠû‘9ß}庻]Ý÷{¡9Þêì÷–ûîw“Í÷ßy>ëOÕäò¼ŸpU>û¤ì!÷“÷v§¼'dñ=¾ýäå}÷÷“ï'Üîdý÷—ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß¶XÓØLÿÿÿÿÿÿÜáw Ü=Âîã¸î=ÝÎîçsû­Ër¸®WÅpÛ…\)¸Vá¸7û»Â^_xKÂ^]›°—Fã7„¼;ï/7màû««ïº»¾ê庺º7;ûÿ÷ß}÷;O7›´æO¬@aîÁ܃½¾çtÞß}æåwuyº x[îFðï7›ïÿ}äås¹_}÷Þo»N{°·m÷+Êðï¼;ÃÜ®0î“÷›ÉÌžoÿï¹ïï7“Íþûï¿q·½æþûïß}÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÀOÿÿÿÿÿîÂÿÿÿÿÿûÍ÷ŸÿÿÿÿýçvÿÿÿÿÿþéÿÿÿÿÿÝ^n‹ÿÿÿÿÿºnoÿÿÿÿÿÿÿÿÿÿÿÿý›…ÿÿÿÿ÷ÝåÿÿÿÿÿáŽÛz\¸7xUÂ[p½Âîqîs¸ÝßýŹ\MÄîWpÛ†¸U®®ïã€v“Žêêï»7WÝ_w}æäÝÞæÞ¿tï»oW+É÷ß{u¾ýá ¼¢à }÷ßß}÷ÝÝ-Ý÷î÷t_}Õý÷ï¾ë}÷<|Jƒ'¹_wsîï¹ÜwW}÷wîýëu~åw}÷ß}Öêîáç.¢àÉÎí·ÇÝ÷ß}÷Ýwß~î>Wß}Êû®ûï¾îýÝ×^Kƒ/O†6Û›»‘8:y¼œï¾û¾æäç»Þ'ß}âvžO¹_wß}÷ÞOÝÉŠÝ@Éäûî“Ó÷“ÉÊòyoºnï¾ò}÷ß}Ñ>û»´è® y:É÷Þ1ÛoGßu ÷¯ÿáVÞ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¶YPüHÿÿÿÿÿÿÜw¸MÂîáîp»…·´pÍÝÎçw»ýÅr¹n+ŠâÜW p«…\*áWÿw}÷WÝÝ]_yÜÆðï¾û•Ûww÷wÝ]Ýß¼o»ÝÝ¿ý÷MѼ%Ø;³s¾åvìnîw;¡» vì-Çv~÷}ÊðMÐ[¦öð—‡sûÿï½¼Üï¸{Îì-Ûr¼ß¹_r';ïºo Ü‚]…Ü5Û}ÌÜîw›ï¿ÿ¾ûïºo¾ÿ}í÷ïõ»o[ÓÓ÷ÞO¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ƒÿÿÿÿÿ÷`ÿÿÿÿÿþðî‚ïxÿÿÿÿÿs¾çzÿÿÿÿû„ßÿÿÿÿÿs¾ûÆñÿÿÿÿÿ¾ýéÿÿÿÿÿþÿÿÿÿÿÿÿþáWp¯ÿÿÿÿþêûÿÿÿÿÿÿ¸k…C¶õ¼*àíÁÆá.àpq¸Y¸=Á[‡7 n7·Çp{‚îòÞ÷_ÜW+–â¸k†¾ûðÇ¡¿`~ §bvÜÞ㺺¾í:OwwÝÆÜî=ÇýÉ8žû÷·ß¾û†×?ƒ%A“÷ßÜîÓï¹^{î®÷ßý÷÷ß}Õ÷ßu_ g?}˺oO¾îþîë¾û÷k÷ßß~ûïß\êƒ%A“÷;û÷îîû»ûï¾îï»]Ýý÷ï¾û￯Õ^ Ÿ¼žNwr¼ŸwzuÝÝÜ/}Ýäé;»þéo'jò}ûÉäâÜÓ?u~ûÉâv߸/}äûï';÷§{Öñ? jþô¹Þ¯'“÷ÞN/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶YÎDÿÿÿÿÿÿîp»Žá7 ¸{Žçpûn­†wÝn+ŠâÜW· ¸UÃ\*ḿïoº»±n}Õ÷Ãýwß¼»»ººº¾åººº¼}á!Ž›zÿº¼Þèáo }æìîý¾ñ¼-ãy9·…¾öûï»+¶ór xKïós¾òpß÷+•÷ß~óz}Ѻ ½½¾û£vÞá/ßxwÐܯ¾ûÍ÷ßÿs7ß}ûîwßu¾ûï¹î›Öóyß}÷ï'ßÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÁÿÿÿÿÿûÆñÞ?ÿÿÿÿ÷ïo½½ºÿÿÿÿïßrÿÿÿÿÿïïÿÿÿÿÿÝ7·ßÿÿÿÿÿïÿÿÿÿÿÿÿ÷nÿÿÿÿÿÜ!½»ÿÿÿÿÿxÿp«ƒwàíÞàíÂÛŽàVìÜï7ÍÆw‡{q›¯¸3tnŽân+‰ÜMÃ7 w nÜ*êû•Á[ Ü8"pwsNðÆ®Ž“¶êû¶æßy:»ºn{¡:ÝÝßy:o½Ý·Ý_}Úwjop÷îîøcW7«ï¾ôýÂo»îîÿ}ðƳn#ï¿}÷ïo'ß}ý-CçC'{ïîç}÷ßÝßß÷[ï¿}÷ï¾ûï¿»¹o¾á7ß}÷ßs¿»¿ºî“«ï¾þû÷Ý_¾þçvŸ}÷ßy¼Ÿ}÷÷ßÝ—ïNÓïºOÜ*ò}÷ÞO¾ûî ¶È¸s¾ûï¾ò}÷+8=÷•Þì^ôñ^O¾òr+ï'+ï'ÞWßÿáfÞ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶ZK<@†0²ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ûƒÜàû…Ü&áw NÙÃ0Í·5s¹Ü{Ïwi›ÛÁžÖ ÷Ü®W+Šá·Ã\5Ã\5¿Ꮏu]Ý_ vûÕÝ÷w„º+‡o»¾ë}ö3÷Ý﻾ûÆðÇÿú¾åw }·¬1öÝ_ßs®`%̹Þo¹Â^ÜÆì;»£vð—„¼;ŸÝ]_x.ðMà»ÁÝ^oÞóyøc¦Ý_}€ór¼;ûï¼Þo¸¯¾ûÍδoîÁÞ ß}÷ÞÎûïóÿï¾ûžöûîW÷ß}ûÂÝÃͽÛ–ûäò}Îò}ü1Óo_ûïý÷áfÞ›ïþÖmèÛoÿ†;méü1Ûo_í½ k6ô m·ðÆÛþ×Íé m·á¶ÿí½mü1ößÿü1ªÛ×áfÞ¡¶ü1¶ßafÞ¶ÿÿ m·á¶ÿÃmøcm¿ÿ†;mð1¶ßøcm¿øcm¿ m·øcm¿†5Ûz6Ûû„ÿ†5›z†;méü1ÛoŽÛzý k6õ m·á¶ÿýãþÖmèÛoðÆ«o@ÆÛ†6Ûÿ†:më†;më†5[zü1¶ßÿÜcsn1¼oøcY·§ j¶ôÿ m·áŽÛ| m·á¶ÿðƳoPÆÛ~ÛoÿïOOo¹avÞœ1¶ßðÆÛ~ÕméáŽÛzá¶ü1¶ßÿ†6ÛðÆÛ~ÛoÿÜï7-÷þÛoøcm¿áŽÛzxcm¿ÿ†6ÛðÆÛ~Ûoÿß~öÿá¶ÿ†6ÛðÆ«oL1¶ß᎛zÃmøc¶ßmþÕmêÛn k6õ k6õÿÞÿ†6ÛþÛoÃmÿ᎛zÃmøcm¿Ãmÿá¶ü1¶ß†5›zÿÿÃmøcY·¦Ûoî Ä0Æ£{PÇ›|†:më tÛÔ1¶÷C}ó†5[qxcY·¯ávÞ¶ÿøc]· cm¿ðÆÛÃmýÄ'FᡎÛ|†7Ûøcm½CíóðÆ«o\1¬ÛÔ1¶ßáfÞ¿ÿü1­³×Ã}.ܰ:à}¼^à¯p{ƒ· w¸îÆí¸Û¼o|1®ÛÑãxÞÞÞ{‘¸··FâÜ Ü*ûÎG to7¬ ‹Ã&`ɺ ƒ~8/}Á÷W§ÝÝ“»÷iÚqî6æî?ºwMíû’r'[»ï¼ßy\a#¼žûï¾êý÷ßw}Ǿû½â}ÿï'ß¾çrß}÷ߘ,ãÏ}÷ß}ðÆ«oWß¾û÷Ý]ï¾ÿººï¿}ÕÖûï¾ûðÇM¸ƒÎ÷Ýß}øcm¿s'ßw}ðƳoGßw¾ûîîÞÿu~ûî·WÙµG+ïãá/xgß}Îá$ûïÞO¾ãº¾ï¾û»¡;^å}ûïN·ß}÷buÛdûÊçr'ßr¾ûÉäûî¹Ý+Žé?½wB¼®"tOß»¼œþòü1¬ÛÖÖméÿøcY·§ÿ vÛÓöùÿÃͽmô1¬Û×ÿÃͽmÿÿêá˜fí·ÀÆÛ|ðÆ«o_áfÞ¶ü1¬ÛÐ1¶ßÿá¶þÖméøc¶Þžé·Ré·Rí·ÀÇm½|1ªÛ×øcY· cm¿ m·ÿÿÿðÇMº¶ü1ÛoŸáVÞ¿Ãͽͽmøcm¿ m·ÿÿ†;mÔ m·ÿ m·Ü1ÛoÇm½~Ûoí½Cmóá¶ü1¶ßáfÞfÞ˜cY· cm¿øcU·S†6ÛðÆÛðÆÛ tÛæÛoÿ j¶õ m·ÿÿü1ªÛÓÃmÿ tÛ© tÛ©ÿøcU·¯ÿÿðÆÛðÆÛ}ÿÿÿÿÿþÂËoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ý¶ZÈXH†0ºÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ûƒÜ.á{…ÜwÇT`àøýƒfþ 24Ü,uðbv°ÊïÝ]o6†Ã6Á˜fá†áW¸U·¸EÂ.. pk‚Ÿû»»÷wwÝ^îÚΰ¡Ÿu}÷W&ôôû»»»¨cQ·«ï¾êîêøc¦Þ¿ïºn¡FÝFÜçu}á7a.Â\îÁÝ Äãžêûîw;÷„¹coxKÁ7ƦŸ«±¹ßðÇMº¾êì-Æè-Ð[™¾ì-íæç}÷Fí¼nAÞîûï¹_}÷#r7›Íäû ·Ð;ÿû±¾ò}áïo¾ç~å}éÎëxKÂo¼x/}ææo¾ûîMÚÃ6õÿ¾û˼Ÿ~Ömé¾ÿï Æ³oM÷—y vÛçáVÞ¿†5›z6Ûøcm¿ÿÃͽmÿ†5[z6Ûÿ j6õÿí½~ÖmêÛoÃmöÖmèÛoÿðÇÛ~óoü1¶ß†6Ûÿ†53zðÇm¾>Ûÿ m·ÿ m·á¶ÿ m·ðÆ»oPÆÛ¼ü1®ÛÓÃÏü1ªÛÒÔméðÇM½aFß½aFÞ¿†5›z†6ÛðÆÛþñÃí½Cmÿ†5›z6Ûü1¶ß†5[z6Ûøcm¿øcm¿Ã½pÆ«o_†6ÛÿûÂܛü'ðƳoNÕméþÛoöøûoÃmÿáfÞ¡¶ü1¶ßÿß¹\¸c]·§ m·ü1ößü1Ûo\1¶ß†6ÛÿðÆÛ~ÛoÃmÿýÛ{}÷ øcm¿á¶ÿ†5zCmþÛoÿá¶ü1¶ß†6ÛÿûÛÍÿá¶ÿ†<ÛðÆ«oL1¶ßáŽÛzÃmøcQ·ÀÆÛ†5[z†6ÛŸÃͽCͽß}ÿá¶ÿ†6ÛðÆÛøc¶Þ°ÆÛ~ÛoðÆÛøcm¿ m·áfÞ¿ÿðÆÛ~Ömé†>ÛýÁ‡ j6õ†;më tÛÖÔmó†5[rpƳo_Ãí½CmÿðÆ»oPÆÛá¶ÿ†<ÛíÁ†éCmÿ m·ÀÇm¾~Õmë†5›z†6Ûü1®Û×¼ þÛoÃmÿïî½ÁA¸îÜvÂÍÁÏs7ï76ñ¸ÍÌ÷fíýãqÂn#pǸ1¸0í¸·7ÁA»OáAn 7CÜ.û–àªww kg⹓ÓïÞ÷WOyßq'!¾èÜ® ;»î ]]]_}÷Š´ †nêûîDý÷ß¾ûÿººû¢rßy¸C¹ß~ûï¾é8•¬3 w/ñ÷ßwwßt®ïÿºû¢}÷ßp[}÷ï¾ûïºÃ6â8M÷ß}ßtÝ•÷áfÞŸÜ®IÅ»¿}Îà–ûïß~ôôíï}äûï¹^¹ÞŸ}÷jïûï¾û¢}÷“ïܯ'›ï¼Ÿ}Êà”1ÞŸ­¼2}÷ßy9§Üdè®eݧk½}äûï» u¾û•äûï¾ûî þÖmêÛoÃmÿü1®Û×Ãͽ?øc¶Þ¾Ômóÿ†5›z†6ÛðƳo_ÿ k6ô m·ÿÿ«†eác¶ßmÿ†5[zÿ k6ô m·áfÞ¶ÿÿ m·ðƳoOý<1Ûn¬1Ón¬1¨ÛàcQ·¯†5[zÿ k6ô m·á¶ÿÿÿþé·T1¶ß¶ùþÕmëü1¬ÛÐ1¬ÛÐ1¶ß†6ÛðÆÛÿøcQ·P1¶ßü1¶ßáŽÛ|†5zü1¶ß†5[z†6ÛçÃmøcm¿Ãͽͽ0Ƴo@ÆÛðÆ«n§ m·á¶ÿá¶þé·Ì1¶ßþÕmêÛo¿ÿü1ªÛÓÃmÿ vÛ© tÛ©ÿøcU·¯ÿÿðÆÛðÆÛ}ÿÿÿÿÿþÂëoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ý¶[E|PÿÿÿÿÿÿîîpÂîÜ=Âîˆ6›ÁÚSmá“Ï»Ús…¶BÁÁÀ|/þÐà>ÿ`ÇV†nd½X1Ç Ôw‰Yމ@à>7ÿn᮸E®ÿ¾û÷Ý_utžœ=Ûv7ß»ý ›Üfãnw·_}û£}Ëÿs¾ýÎó}æäw ¹·ƒ¼%àÆox#Ü[ï¾û áFÞ¯¾êï?«°w3rÿßxKÁw‚ï sçr7›Í÷“Êû°wmæûÛÞûï¹ÂÞÜ`…È%ૌoÂ_ÿßr¾ûÎór¾û÷ÞnÍÊûïÞ ÜW`ïîÂ]ݦí¾û•ÿÿy>ûûï¾þûÉÊý÷÷iûï»'ï'“ÿÿÿÿÿÿøcí½ÿáVÞŸü1ªÛÓÿðÆÛÿÿ÷x+ÿÿÿÿÿïÿÿÿÿÿÜÞôæðw'ÿ†5zÿÿý÷ïOÿÿÿÿÿs¾ó}ÿÿÿÿÿûÍ÷Þÿÿÿÿ÷ßÿÿÿÿÿÿÿp`w‚?ÿÿøcY·¯ k6ôÿáFÞ— œ#ÿÿÿ m·þÖméðÆ«oHcU·¨cm¿†6ÛûËp«ƒ÷x;‡ƒŽÔoHãã;°·Þñ¼;Æð]ánÂÞ¼-àï x^èo xܸ‚Ü ëa›ˆ;„è;î p`w†ãn7Û‡ºOÜ&ìî6îáîdæÜî»NÓËzzzr¸ÄNM÷I÷+Šâ¹§Jû‘¼ªˆ€Xfé·Çi÷ßw~ûÉûï¿»{÷î·§Ü·ß~öäï¹ß¸8¸!ºNWß}÷ß}ûï¿÷›û­÷÷ß~û–û᎛qpÇM¹Ÿ}÷÷;ï¾û÷ßïî¯ßyï¾å¾é_~á°ÆÛ›^npÇm¹¾ò»ï¾ûï†5[z¾ò~çïÎöêûÍý÷ܯ½9C¶ô}÷ îo'ïܹ§Ý·§Ý'iç}ýÍï¿q^wßz¾ûï¼Ü¯¾ò|1Óo_ÿÿÿÿÿÿÿÿÿÿý Q|?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß¶[˜Pÿÿÿÿÿÿ÷¸Ná7p»‡¼ ¸*èPÊ€EÇsn;žî°}…ÂPd¼»jƒ'|2pj$¨ ÿ°|/þÜ(Ð*†ÁÕ|øf⸮p׸7þà>öûï»»»ºo±;onÉÕ÷ßÝ‚®„óppFáj麻º¾ûîwÿáŽóu]‚7ß}÷Ýï¸îwiÕû»îûï¾å}÷ï¼%à†ûÍÿýà»Áw‚ï xKï¹ßxwÎðîÝ‚î@Æn>û–ìO åx.ð]áÞO»^áßÿß}÷;Íûï¾ó}æöûîA.w‚7îW‚¯xKï¾ûï¹›ÿþûï¼·ß}ûï¾å~çv7»ï¾ûï¾ÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿ k<õÿÿÿÿÿ÷`ÿÿÿÿÿýÆëx;Áÿÿÿÿÿßs¼ÞÞÿÿÿÿÿÜîW;ŸÿÿÿÿþûÊì/ÿÿÿÿþûï¿ÿÿÿÿÿÿÿx;Á_ÿÿÿ†5›zý°Â{†ÿÿÿÿÿ÷ûˆ}ãîøX÷‡pqÞÂÍÁÍÁÆáÎñ¼nÇÞ;Íãxï¡Ýˆn {ˆn¸0[‰º pa¼np\nÜ»Nû„·«‡º¸¯7Üi͸ÛîÞñ¼ÞÜ„å¹'[«»Ì1¨÷Šà×›÷ß}íÂÛz¹ÜûîWß}û´òvWdîç½o7{ï¿}Ò}÷;÷ßÜï¿r¹÷;÷ß~îû÷ß~ñ¼oºï¾ýéÕ÷ß~û᎛qowÝ￾û÷ß¾û÷ßuvÞÞ÷[ï¿u}÷+ïßÞoßy8]Ý÷ß}÷ï¾å¾ýåÝÕ÷Ü·wß}÷áŸx8c¦Þ°ÇRÿ¼ßs¾û™¹ßr¹Ý}ÌŸ}æý÷›û®ûî[‰¼ß}û†¾ópŽßo—ÿÿÿÿÿøc¦ß?ÿÿÿÿõgÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÇM½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¶\?¼Pÿÿÿÿÿÿ÷¸MÂnp›…Ü/vð·ÕÎín{‡´ð1×Ao Bøí<â¶ ?rtÒáö⸮â¸U¿ý÷wWÝ]_q‚îÛ›pãy¾îïww[¶ƒ^âí»7wéÊí:¾ûï¾àßý÷ß}Õà›ï¾çt§3}÷wý÷ß}÷ï¾ûïØcÿ¸¿ðÇm½_y¼%á.w0‡ß}÷wÜɼá/77ï¾ûï¼%á/ð—·mì1¶ßÿîW+ï¾ûÊå}áß}Ù¾åy½Þ »º¼Þo¾ûï¾ûžåÿ÷ÞO'.ìo' s¾ò~æ ¹¸¯¼¯¹Ü·“ïºÿï¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÿÿÿÿÿ¸+xÿÿÿÿÿû³wv?ÿÿÿÿýýí×ÿÿÿÿýÌíãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü1¬ÛÓÿÜ*áM¿ÿÿÿÿÿ¸5Á½íÁÖñ¸*÷›ƒïî;ÿ÷½ÄÞ¸A¸k•ÇrÜöã' 7]ÁîÖá)÷ ¸ÛÇw{uqï'7þé:{…‰ÜMéÊû´êûãPoƒ8†WB~îåß}÷§ß¾îëÝþëur{«¢wu}Îêûû…û÷;ûêý÷w÷Ü·ßßwu}ÕÕ÷wPÇM¸·`nûï¾çpWwtŸ}÷»»»÷W¹ß}÷ßwu᎛~ûï¾ûï¾û•÷w•÷Ü÷wÝþ÷}ýÊç}÷§;«Éÿy;O†;oñ÷“Êò}ÎèŸ}Îòy5{z»º_ºÞO-äò}÷Ü·“î ÷ÿÿÿÿÿïÿÿÿÿÿî p`ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†:mëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³‡¶¼Ø„ae·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·òA8fŒiÀˆ;0$2ì‘‚*p"Ì 8*Óv`0IßÈÁVœƒ³‚F ´àD˜ ?É*Óv`0HÁVœƒ³‚FþF ´àD˜ pU§ ìÀ`‘ÿ“­8fŒiÀˆ;0$zt0U§ ìÀ`‘,NÈrÌ P{à û¢ÔÌs1¦jtáÈ; ( ´àD˜ (MU“‚­8f˜iÀˆ;0$©ùó,èŠÃð@'ö¯÷æ•8rÌ Z¸¶5 ´àD˜ aŸè%ª°UŒ^ÞÚ…N)P[9° °c¼-KìÎë!È0PoS§AÙ€Á!]0—Å–L¨*Óv`0HÁVœƒ³‚A‰›’äSv`0HGßþ‚\˜àÊ €“Œÿø pÀ&´ÇÁ8fœiÀˆ;0$0eNPÁVœƒ³‚HÄ©Ãv`0HÒ1Ɉ{ÿ2T°¦=öYÁ(8 ´àD˜ PšNŠZp"Ì 0*Óv`0IHᇓ!Œ§AÙ€Á!LÖC` ¿……­¡'pµy¸ [KAk‚Ò÷³;ôáÈ; TàD˜ Ñ`ÏâÎÑ@«NAÙ€Á"X•ä˜ HÆ• ½¦Q1ái@ñËOvžè-Pƻдaõl‡ ÁBš-3ó7¡pENƒ³‚Bžgú kÐeÐH¯ýù‰`7y†•ä˜ X*Óv`0H¹•—¡‚­8f’©Ãv`0HÓ0É1ú e@MÉ­fÿ˜=©YAØc€Ó&Q¤°ENƒ³‚F©Ãv`0H¦nF©Ãv`0I8rÌ ÖF©Ãv`0HÁ8rÌ œŒS‡ ìÀ`‘‚*pä˜ gy"§AÙ€Á&TáÈ;0$oãí¿þþ6ÛøÛoão¿öþw€cà3—Œs<Ã3yX ø¹Ç›vTÀc`3íák±küý€C`¬Wݙ̳?œÐ1dÉÀ·è `´¦ y_ùŠ!ó¯/ò–dÁ©Ìkm˜`Ì`Ò€'0ò³-™;f1ò°|>JÀ%° ûWаbLšPLÇÓ2u“1¦;ð`-i•gq€4Ÿ…¸-"Á–ë,E“£ y(ØÊÉ‹_Ð4Ã%<-TÀ³ê  ÌÎcß2t¬Lü+jÓœí€È`2ó¶^³•‹{¿Ÿ3˜ùp l;۬ˬÌãmþFÛÓ¿¾>Ûøóûão¾FÛoü}·ñ¶ß#m»ÎØ xNÙ†e˜Æ~V[®ñüßo€G0À!˜±k±kë;àø í³-æ¶rª-¾_Î̘|ÅIWŽÀ!íiL™À5™ó9ŽÎØ ìò^e³.IÛ0Ù‹ÊÀc`3}° ÆXó,·Œ&Œ>v¸¶3„©šï“µÀg¡d– ±3,c5¥ð rÏø±±eY˜ ÆX õ¥`ع#oîNØ ü9;`5°yXµñk[>f?19X l9۬ϬËq¶Úñ¶ýãm»ÆÛ|m·ØÛoãyþGÛmËoüï€Ç`3–Ì3bÆÅیϜÏ%`5°û;bÇÅ“—€ÇÀc¼¬^»ãn'ludµ¾hÂbß•‹Z_1§;Æ~0ÖV^0ûl³+Ú3ñ¶ßÆÛw·þ6ÛøßÏãm¹ÆÛÿmüm·ñ·ßÆÞ Ù†§Ôaƒ$ͰeL3%>,) 0 «EŸj€¤°Y`)0Ø2ž0Ò[æ{1†L¨dã&kX}ac[êUƒ%Ž0-ážPKâÁ†€ÂB€÷Á‚Â^pYÚ a…Lãl‹~S,™£eë;0Áž`Ķ®DÉÖ¢ð·Zÿ‡‚Áz€+·‚Â~0˜Yö‰…~e…§ü¦2ÌÿlÃŒÇ’ÎØ¶6KŒ×2ï;âÏ…œ¶ž¥`5ðä†èûÕ`3`ʘftù‚@ÁaaPYÛàÁbÚ,aaÆLv c>242¶µ-ã%ΰ-ažP/ø°Ø0XR‚Æi¨,+‚ÎFÕ¢©š N|[9L2f—3þ6Û²6óœm·ñ¶ßÆÛmüm÷ñ¶ßÆûßmü}ïñºo´Ã# T¼²8-H-C¨¿^álƒ¶ üÆ4Z0ø´Æ‹Wäf½?÷þƒØdcáj£·–G©…¨€´‚ß¼Ø ÀÁjš-ìÇ>F:epµY#[÷ñå{ú8d_à°Ì-û%‚Ø Pp öø X-àÁj€/³ø i•‚ÛÖ5[|¢Œ.À¶Æ8gíp«&Rjé™#ÿ»aµ 5;f£¢Ñ À.HJ z¾ñºß´Ã# U¼²`Áj`- /[ §Å¼¬ò3wûAü23À¡ð·–L-H¤¦ùl™ÐÀ]…½Þ€ÓºeK‹­¿çþ>Þøóoãmï¶þ6Ûäm·ñ¶ßÇóÿmüm·ñ¶ßÆí¿ŒÖuñ¾Þ±¾ßÇÞýümMû¬ß#m¿ý¾6ûøÛoãê7ñšýëmü?ñ¶÷ÇÕãÝ¿æùíük¶þ6ÛøÛïãê?ñ™or6ÛøÛoãö߯»ûXóïão?·»müo·ñç÷ÆÛÿmügØÛoãm¾Fóíüm·ñ¶ßÇÛmüm·Øß{ãÝ¿¶þ>ÛøÛo±¶ß#í¿¶þ7Ûøóoã}¾FÛ}¶þ7ÛøÛoãm¿?¯ÙÎ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ7Ûøóoãíïw¹müy·ØßoãÍ¿vþ>ÛøÛoãm¿¶þ6Ûøßoãm¿¶þ6ÛøÛoã}¿6þ6ÛøÛoãm¿¶þ6ÛøÛoãí¿¶þ6Ûìm·ñ¶ßÆÛmüm·ñæÜãí¿6þ6ÛøÛoãy¿¶þ?›øÛoãm¿¶þ6Ûøßoãy¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿öþ6Ûøþoãí¿¶þ6ÛøÛoão¿¶þ6ÛøÛoãm¿¶ûmüo÷ñ¶ß#m¿¶þ7žì…3´vÕñcm»ÆÛmò6Ûøþoãm¿¶þ7ÛøÛoãßï6þ6ÛøÛoão¿¼þ7Ûìo7ñ¶ßÆóÿyüm·ñ¶ßÆÛmü{·ñ¶ßÆÛÿmüm·ñ¶ßÆßíüm·ñ¶ßÆÛmüm·ñ¾ßÆÛmüm·ñ¶ßÆû}j¯ñö÷b·¤,ämûøÛoãm¿6þ7Þøóoãm¿öþ<þøÛoãm¿¶þ=ûøÛoãmï6þ6ÛøÛ{ãm¿¶þ6ÛøÛoãm¿¶þ6ßøÛoãß¿¶þ6ûøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6Þøp€Y)«KFWXË’?2•±"(ÊÝŽÖïHÛm¬m·ÈþÏãm¿¶þ6ÛøÛ{ãÏï¶þ6ÛøÛoãÍ¿¶þ7ÛøÞão?·þ6óøÛoãm¿÷¾<ûøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãmï¾þ6ÛøÛoã}þDÿ¥hVeש<¤bÕÃ3ƒ½0a ¥Ž™Žüm·ñ¶ßÇóÿyüm·ñ¶ßÆûß}üm·ñ¶ßÆÛÏümçñ¶ßÆóÿo|m·ñ·ßÆÞmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛoüm·ñ¶ßÆÛÏm,pb9 ¦&šX~efä.cº~6û²6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿·¾6ÛøÛo‘¶ßÆÛ}¶þ7›øÛoãm¿¶þ6Ûìm¿ñ¶ß#m¿¶þ6ÛøÛÏãm¿·þ6ÛøÛoãû?¶þ6ÛøÛoãm¿¶þ6Ûøßoä¼3‚ÕýíL2óXâw²;®êÆÛmcm¾FÛ}ümçñ¶ßÆÛoümçñ¶ßÆÛmüoçñæßÆÛÍü}çñ¶ßÇŸßyüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñö߯Þÿmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ÈûmÒ7ÛøÛo‘¶ßÆÛmüm·ñ¼ßÆÛmüm·ñ¶ßÆßßmüm·ñ·¿ÆÜÿ¾þ6ÛøÛoãm¾FÛ}?¾>ÛøÛoãm¿¶ùÍü?ñöÜãm»ÆÛs¶ùmö6ÛøÛnñ¶ßÆÛmüm·Èþoãí¿¶ûmüm·ÈÛo‘¾÷ÆßÍüm·ñ¶ßÆÛyügñ¶ßÆÛmüm·ñü߯Û?K dÅŸe@RÚ`¸Zh[´köùmò7Þøóû±¶÷Ç›mò6Ûøßoãm¿¶þ=ÞøÛîñ¶ßÆÛmö6÷øûoãm¿¶ùmö6ÛøÛ±çŸ#m¿¶þ6ÛøÛoãm¿¶þ<ÛøÛoãm¿¶þ6Ûøß{ãÍ¿¶þ6ÛøÞoãm¿6þ6Ûøú­OøZ Zßcï=cyÿˆå# |­íüo7ÈÛo´æˆY!gi~@W_µ‚Å5¶åŠûL,í-À ÁgÆÚþñ¶Þ‘[pv—“XmjÝXûs:[H,€^&ëiŠø¿Bag)Ÿf >'w¢ÃuÇ´§´ 6éëmò+qgcÚwǾÛSû  5åã}Ï)Ù ±Z#÷¦ì{hÖL`²#j]ÀX®‹9Ë×#o¾EnÃL´€RÚc±ö·ä\òcí 0‘’XciŒúŽeôÂb—j *ô¶„€UéÏ¥ÌòLðµµ –1‹øÏÐôX|ȸ«&'œó«>@ÇTÄ–K WÌab`7:Q‘•1–¥FÛvÔLR¿d…‰üÂŒ(-ÚQ˜´Ã¹!äŒu4˜ˆ±0§Œ¥Sÿ0©qi¾CÖ¯ZQ‚Ô0ËLÇÖDïÌ ¼dŽ˜§D^i…òáµÕk”`´¶fÌ}düÀ´XSæ7ˆj†fTËËÚÔ[ K VÓ=„¸[k~HÂØ ^äÄÌ}0·Œ‘ÞS¦TCæ é‡VÚÂ1Å›ÔdZml™Þ?KÞT5pZ÷ÔW ‘2`Z,Ú£Ÿ0l¯ÌAžÆòŸ*y.,Qagg&xövŒë{³½†zÆ9r,bÕEŒ[´Ì-´Áš¶5+û(¼2ˆ±c>3´èŒ¤d[™}ë?Tãj €Ú‰‹a²Á•—JÓü»‰‹x bÝåf[2Û¶ç·þÔŸA#€Ç ‘¼¬[°µåFéû*TXø³‚T²Ó&VT×#¦Ý‘»oåX è~Ë"Õlõ±Óm‹_ßk‹A#i`Zðµ­ÛmÆf­ü}çñ¿÷-QfÀHÂÌciRº@k}ÒíCŽ._¨fÀm™ÐÄtûÖ<þú0° t7²ÂÙ2ŸZ¯mÞwbÎÅ–ß0Àk0ÀnѶÿÆû|akŒò^f™—ÈÛoX|Á‡k ˜ñ’@“Ÿmüí˜lÇÛ˜[ÀcÞVe³.q¶ýí€Ì-à1‹y+2Ù—ÈÛoãmï¶‚CŸA#²±kb׬o};bÎ LXÁ*Éx ìé#o¹ÆÛ|•€ÏÀc«/½€ÝÈÛï‘æßÛŒ˜±è$rV-lZçov—“îÙ =üyÿ­¦c¡g1ÙX l½£Ý»–Ì0Ì0æK`5™à5™™ˆÛÞÈÛçxv9l˱kò6ÛùÛ6,弆~C¿mË;f1Vر€Ü ä¬Ëf_#m¹ÆÛöй‹YŸ˽þ.~L^Ø bÖ¶YY–̹ÆÞ|¶¶€fÎ\-Ø[ûm²Æÿ‰Þ“ “1Ÿ•‹^½£mý&bÆ LXä•€×€køÛoãm»“0Á)€ÇÓ$¬¶_˜¶þ7›û`1è$H `•ò±kÂ×ó´ÌdEŸA 3%ÜÈGtÊ«|¸ÿoígH³ùX x¿ççlÃŒÃyl³,ó>b>÷øÛoçÌ<>ص‹Y–-øÛßçÌXسï`5˜`7‘·ªó¶c3¶,à5€ÉòVeã.Ø÷{Hß{°és Z‘ößÎñ‡'r,ÂÙ&fIdÎGæ [ö¥d¯ã+a˜µ!óJ-¢ËiíP±…‘¡Ê&%Þ¨38d‰ˆ²Èµ¢-O±¼¤í6c ‹6临€lhb6Ôw½2’È É &¹’©­™˜æ#mOؾrf>l0%&,ŽË"ÙD[,óü,µLD¯0·Œ–3Ú[-¦ 9ÚoBBÌaEügZ˜ Ð-ƒ7Žò³÷&$X‘ˆV¹ɔŨ™–5,{¹½ã,LÄú1œ-”¶ÆÙÊÞw"ÄÑv} 6RíäÌ©Øÿ¯÷@1+xË y*0¹qi­ãmO•Ùüm¿8Ûoáij"à/­Ä“i™2ûqÛîXjŸÃ<ÆU–e‚Óán VÒ¢Œ- µ¬j©ü’l2x³¸U¢ÖÿÇ0Ô²J Oƒ§*¸~H÷{‘èêvEBÑ€0ZsäI@/ÞÈÞoáìc«ò,ÆÁiß•"l™Ï‘õ³äƒ 2€ 14ªRC¸-–:ºü†¹Ü3Œk$¶eûcÒîrp´ø 2òä`.‚ÖûíÕÆ­¡ó`-SzÉ€]…­äÆóü†Õ lÏ$€¾ÛʽVFé¹Èh-€»3¬,ýþ6Þìg¬m·Øóo‘þ߯ûÌ\m÷ñ¶Ýãm¿ŽŸmüm·xßoãm¿öþ>ÛÖ6Û²6ÛøÛnÈÛo.6Ûn6Ûøßoãm½#ý»ÆóíémÞ6óøóoãm¿öïmémÞ7›øÛûXûoãm»cy¿¶þ6ÛË·§mö6ÛÒ>ÛøÛoãoMésd›FÛ|~ûmüo7ñö߯Ûmü}·ñ¶ßÆÛoü}·ñ½ŸÆûmüm·ñ¶ßÆÛmüm·ñ¶ßÆómüy·ñî߯Ûmüm·ñ¶ßÆÛ{üm·ñæßÆÛmüy·ñ¶ßÆóï|y·ñ¶ßÆÛw6þ~‘‡ðÎõ à-@ØÛï±¶ß#}ï¾þ=ÛøÛoãm¿¶þ6ÛøÛoãy¿¶ùmö7›øßoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿æþ6ÛøÛoãm¿¶þ=Ûøþoãm¾ÆÛmüo7ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñµÛÖ<ßøóoãï~ÆÛ|6þ6ÞøÛãm¿w¾6ûøÛoãm¿¶ûmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛ}ü}·ñ¶ßÆÛmüm·ñ·ŸÆÛyümýñ¶ßÆÛmüm·ñýŸÆÛ|¶ûmüo?ñ÷¿Æûßï|y·ñ¶ßÆÛmü}·ñ¶ßÆÛmüm·ñ¼ßÇÞmüm÷ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñïßÇŸyüm·ñ¶ß#m¾ÆÛw?¾6ÛøÛoãm¿6þ6ÛøÛoãmïæþ6ÛøÛo±·ŸÆÛo|m½ØÛïãm¾FÛßoüm·ñ¶ßÇ»ß}üm·ñ¶ßÆÛmüm·ñ¶ßÆÞmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛ|¶þ6Ûäm·ØÛoãm¿¼þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ>óøÛoãm¿·ù{üm·ñ¾÷ÇŸmüm·ñ¶ßÆÞ|m÷ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛov6ÛøÛoãm¿¾þ6óøÛoãm¿¼þ6ÛøÛoãm¿·¹mö6ÛøÛoãy¿ìþ7ÛøÛoãÝïw¾<ßøûoãm¿6þ=ÞøÛoãm¾ÆÛü¶ïmüm·8Ûoãm¿¶þ6Û¼m·ñ¶ßÆÛmümçñ¶ßÆß}·¾6ÛøÛoãm¿¶þ=ÞøÛoãm¿çþ6ÞøÛoãm¿¶þ7óìy·ôæXIÀ€;p%`ªNÛ€Á/ií‚©8n¬IÀ€;p%å-°U'íÀ`•‚©8n¿KlIÀ€;p%`ªNÛ€Á/ÒóRp Ü X*“và0KôöÁTœ·‚V ¤à@¸ ý-ðU'íÀ`•‚©8n¿KlIÀ€;p%`ªNÛ€Á/ÒóRp Ü X*“và0Kô¾ÁTœ·‚V ¤à@¸ ý/0U'íÀ`•‚©8n¿OlIÀ€;p%àªNÛ€Á/ÒÛRp Ü X*“và0Kô¶ÁTœ·‚\ ¤à@¸ ö–Ø*“và0KÁTœ·‚_¥æ ¤à@¸ °U'íÀ`—ém‚©8n¬IÀ€;p%ú[`ªNÛ€Á+Rp Ü ~–Ø*“và0JÁTœ·‚_¥¶ ¤à@¸ °U'íÀ`—é}‚©8n¬IÀ€;p%ú[`ªNÛ€Á+Rp Ü ~–Ø*“và0JÁTœ·‚_¥¶ ¤à@¸ °U'íÀ`—ém‚©8n¬IÀ€;p%ú[`ªNÛ€Á+Rp Ü ~—˜*“và0JÁTœ·‚_¥¶ ¤à@¸ °U'íÀ`—ém‚©8n¬IÀ€;p%ús`ªNÛ€Á+Rp Ü ~–Ø*“và0JÁTœ·‚_¥¶ ¤à@¸ °U'íÀ`—éy‚©8n¬IÀ€;p%ú_ÀªNÛ€Á+Rp Ü ~œØ*“và0JÁTœ·‚_¥¶ ¤à@¸ °U'íÀ`—ém‚©8n¬IÀ€;p%ús`ªNÛ€Á+Rp Ü ~Ÿ˜*“và0JÁTœ·‚_¥¼ ¤à@¸ °U'íÀ`—ém‚©8n¬IÀ€;p%ú^`ªNÛ€Á+Dà@¸ ý/°U'íÀ`•‚"p Ü ~–ð"'íÀ`•‚"p Ü ~œØ"'Û€Á+DáÀ;p%øÄ-¿¶ûmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶Üãm¿¶þ6ÛøÛoãm¿¶çmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ï¶]9üT†1oÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ÿ÷í80dãÚa“c†Np–’pépìœã`j8VáìåÇ\îã²5€UÁî Úð l C'.¬Xø ÿ¸vbZ1ýq@)YçV à×ÐÈ2poþí·«ï¸xc¿ÝGÝÕÛp°·ÁÝŽã¹Ý]]_pÍÂäá î`«¦ñ¸°]Ø;•Îêû«ÿý÷ß¾êû«Û¸ÂÝ‚WwÜï¿Ý÷ß}û«ï¾ûÿýÊû£ j6ê» w}÷ßxgÝ_tÜfö÷é=ßxKÁw„»¿ü1Ûo^û•±7¸HKï vo7;•æýɹ„¹¹›·¹o¾ûïº}÷›îÞ|1ÓoPÆÛáŽÛzîmáß}ûï'ß~ì;¤ã¼ßx; { ·ß¾í>ûîfæŸÿðÆ£o[¶ûðÆ«o[ïáfÞ—ÝÿºNûï†;mëðÇM½ü1¶ß†5[z†6ÛøcU· cí¿†5›z†5›z6ÛøcU·§ j6ô m·ÿáŽÛ|øcQ·¯Ãmøcm¿áfÞfÞ¡¶ûðƳo@ÆÛ m·á¶ü1¬ÛÓÿ᎛z†6Ûøc¶Þ°Æ£o_í½Cmøcm¿Ãͽ~ìÃͽ>Ôméü1¶ß†6Ûøcm¿ÿ m·ÿþð¾Ömë†5[z6ÛÿáŽÛzðÆÛ~ÛoöøÛoÿ j¶õ m·á¶ÿ†5›zýØÝã{ðƳoHcm¿áVÞÆ£oOÃmÿøcU·¨cm¿ m·á¶ÿ k6õ m·ÿvÝ] ïÿ m·ÿá¶ÿü1¶ß†6ÛðÆÛÃmøcm¿û÷Üÿÿü1¶ßöùÿá¶ü1¶ßýÎí~ÖméÿþÛoðÆ£o_í½xcY·¯ÿÃmþÕméÿÃ6õ vÛàcm¿øcU·1¶ß†6Ûÿ†6ÛøcY·¬1¬Û׆5ÛzafÞ¾ÕmèÛoû… Ÿá¶ÿÿ j¶â†6Û¸cm¿†5›zÃͽCmøcY·¯ðÆÛ|Ãͽ!¶þÕmèÛoîÛÞâ x vÛ×xïãî1½îÍÝÛî†í½÷··OvÞ7Mãq=÷îÜAN à­ÁVà›p”àéÁ÷ àíÂîpíÆîÓ´ãw“¶ïvÞN¯'WW+Îâ¼ÜC¾é^7··“„];»«¤ÔmÈû÷wWîÉç¹ßÝÝþýÈw“¤ÔmÅzrÝ_r†;mêé8H vÛ÷wßpVû÷ß~îþû®êïÞ7￾êÛoßu¾ûû°/ vÛ÷wPÆ£nGwï¾ýÝýÝß}ÝÛï¿}ýÕûîWÜ￸À}Á;Óµwz}÷“½=ïnÆè'W4ö÷}ýáß}÷ß}äóáŽÛ~îû¤ûÉÚy<Ÿ}ᓽÁîIûštOÜîIÎòu»O[ï¾ûï†5z>òÿ j6õøcU·¨cm¿ m·á¶ü1¶ßÃͽpƳoNÖmë k6ôí½?þé;áFÞ¾ÛoðÆ«o@ÆÛ}áfÞ¡¶ü1¬ÛÐ1¶ßCmü1¬ÛÔ1¶ßC­½møcm¿ÿûƒZ† ¿†5zÿ j¶ô j¶ô m·ü1¬ÛÓðÆ«oOðÇm½<1Ûn¯þÔmëøcm¿ m·á¶ÿÿÿÿþÔmë†5z†6ÛþÕmé†5[z5[z6ÛðÆÛ~Ûoÿÿ vÛ¨ÛoÿÿáFÞ¡FÞ¿ÿþÔmÔá¶ü1¶ßü1Ón¬1ÓoŸü1¨Û×ÿÿøcm¿øc¦ÝL1¶ßÿÿÿøcQ·SðÆÛðÆÛ }·WÿÿÿÿÿáŒ@ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿¶]·\†1oÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ÿ÷¢õZyúK«ŽV犪ZO€¬óŽã§~¤bV’†@„ªýËSŽqÒ£×*š¸ÁQí\¹O×+=.,qË‚: T~¾BPc§œUÃ'¥û¤êˆA𠤚ª"Píq€1ÅÁK¨1åuTmr0R]´œãÜ⦠GÛW*Úx87ÿ¸UÆÜ-Ü.îû»…‚®ÁWwnDîïÝ…¸$ä ¸& ¼q¸Üƒºx*åw}÷wÿ†:mëß}å}Ý÷Ý'Ý^Nï¿Ý7·MО§Ü®“îîw;ï¿ÿÜîîÂoß}á/¾ûï»»Á ûï¾ûï¾ûÀKÀËÍá/ ÿ¾ð—›ï¼}÷ÞO7›ï»{}æêý÷ß}äò}á¼Þo7?ÿ¾äO¾ý÷+Í÷îÛÓ•÷݃¼÷›Êå}÷“É÷ßÿ÷;ï'÷ßv'ß½½ß}÷ï¾òÿÿÿ j¶ôÿÿ†5z6Ûÿÿýÿü1ªÛÓÿÿÿÿûÂxcU·¯ü1¨ÛÓÿÿþÕmëïoÿÿÿÿýØÞï vÿÿÿÿÿvÞÞßÿÿÿÿÿ¼o¿ÿÿÿÿÿt÷3ÿÿü1¨Û‹ÿÿÿÿÿÿÿÿÿînÿÿÿÿý÷÷÷æío·ڼnܼnÝíçÞooo=í㽺å~á ÄÜF²Ü¸0ÞÁÓ„·nNÁÝÂî3píÇvÝ7Üw“»Ûý÷w·$ânœF䮸‰Ã7§+•éã}ÕÁ„é,¡–í»w§ï½;ßwvïNî®ïï¾ÔmÅ}ÏtŸßZþé;Ww}÷￾þï÷ß¾þûá¶ýÊå½:¸6û‚0¾ïu}ûïï¿»ýÝûïï¿}Îû«»ûÀžêò¼Ÿp{ï¾ûëoß~ç}Ú÷§ï¿¾ûîWß}æþðp7}÷ß}÷ßÞO÷ûÓ³ý÷ß¾ûï¿­¾ÿÿÿÿÿýÈM!?ÿÿÿ j¶õÿÿpX;Q;øcQ·¯ÿÿÿþé·¯þÔmëÿÿÿÿÿðÆ£oPÆÛÿÿÿÿÿáFÞ¡FÞ¿ÿþÔméÿÿþÔmëÿÿÿÿÿÿÿðÆ£oOÿÿÿÿÿÿÿ b&߆6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmû¶^4<`ÿÿÿÿÿÿúÀOO(®}Á:€J®qÜ.Š2î’ÇFl?àÈ3p=¸#¨7À?<â¸MºžŸ œp?D|>¬÷ž°C7W¡‚sÔòÀ¸6\rÙ±s¸‚Ù±s‘V¸À"œPž¿ràr㕳ˆÀUÊ%gœûŽáÁÜwr¹‚7WÞÜ ‚7#r]Ü,¹[ u÷€« MÁ0Mø ]‚¯n@…Ì}ÈÜ®ànÿðÇM½{»´å}÷Wßv'“ï¾ëÞ7M÷Üc}äûÉ÷IÒ}ÕÎåÿï¹›Í÷Üï¼~ç}÷Ý„»î“ï¾û÷ß}÷ßtÝÜ¿þûÍà»Áw‡}÷ß}ÎûùŒx#x=÷ß}÷ß}÷Cx.ðw‚¯ ÿß}Êûþòy¾åy¾äO½<Ÿy¾ûï¾çs¾óy>ûïÿþç}÷ï¾ûïß}÷?}äýäû–ûïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvÿÿÿÿÿîÁÿÿÿÿÿû°wmàï ÿÿÿÿÿ»o½=ÿÿÿÿÿßy>ÿÿÿÿÿý÷ßÿÿÿÿÿÿÿý?ÿÿÿÿû„¸@Oÿÿÿÿÿzp<ýàïx_x^ð÷„¼o;ÂÞ7žñ¼-áoñ¼oÍáo;ƒ›…7ãxw‚opM8*n Žàæàçp÷ „›„Ü-¸tñ½8ÓŒÞÞœûÛÓî®[’rw pÉ á íÄžŸpbpDÁ"pQ7'»»ºÝÝï¾ý÷Ü÷cuÝ·=ýíÖûË}ûÓ­ÝÈ·cVàÊûï¾ûûïßs»[»÷mÛÝn®»ïß~êþú¸d}÷ß~ÔmÅ}÷ÜïîÓÖû÷Ouu}Õ×}Ë}Êûïï¸.Xßs7;ï¾à÷ÞO¾äoï»{î®÷»Ûï»Ow »¾ûîwß}àᎻÚÞÛÁŸy>ûï'·;îdòy>à÷w§û¿ßºº¾ý÷ܯ¾ûýXûÿÿÿÿ÷ª…3 ¿ÿÿÿÿûŠÓ ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß¶h¬0ÿÿÿÿÿýÀÀÆàÀ:ã¹Ðœàøøm 6Ù±s˜lعËǸàkp?D µsÜ`Þà#pC ¶Í‹ HÀÛfÅÎ[ªàé§äc xޏ3 ¢ ¶l]NÛ6.%ž£ÜpRÀ<ó­Ân¿ÿpw ¾ð—‚®®ïn ‚¯x;°UÁpWtÞã¸,Ý‚n ¸0[ˆ%àÈÌtèxMÁW@»‚ŸáŽ›zûÓï¾îîû¤ós·÷Wao7ÜïOo¾û«ïÝ_ÿß}÷ß}÷÷Ü›žå}÷ß}÷ß}Îûÿþûï¼ß}É» xx#s«ÂÞì-à÷ß}Îí>ûï¹ßy¹^o7ÿý÷+Í÷›Æð>݄¼oO7ß}÷m÷Ýß}÷"y>û÷ÿÿ}Ãïß}éÍ;ßs¹\·W÷#¾ûï7ÞNdòÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷„ÿÿÿÿÿûÂpƳo_ÿÿÿÿ÷aßxÞàÀŸÿÿÿÿû÷·ÿÿÿÿÿîî†óÿÿÿÿþñ½¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÜ Ü?õ÷¿ÿÿÿÿ¾äU·¸ ~¾÷¼oàïñïÁïüo7Œ1«ÞŠðïǼoo7yïÂ÷‡~áW!¼wŽðw·Û„•Ává=÷W“î½¹§ýÊåq7Ã7 mSÜ3…7¾ó}ÕÓtœ¸(œa¾ä\@ﯾò}â}Â÷;ï¾ã¾û»nÞ÷}÷jôýÕÛ}÷ß}÷îÛãÁ+×ëëîîûïºÜï¾ûû»ÿvï7ß}ÝÖêîûï¾û´åÜ®À=}[þû…Ýß}÷ï¾ûïï¿ûÛï¾û»­ÕÎûï¾ûî]Á+Àšè }êÞí·#Êûï¾ós¾ûï¸]÷žãþó}÷W[îWß}ûîW‚û &Ø;§ï¾ç¾ûŒO¾ûîÿîWßq_}÷ß}÷ß~éý®Ð"aŸÿÿÿÿþ¶÷UY82ÿÿÿÿÿÜ8ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶Pˆ|`ÿÿÿÿÿÿÿ±¹ÝÇs©‡ødH ¶l]NÛ6.q‡Wd൯ ‰¶Í‹œÀÛfÅÎ]Õܰ,>°UQöµÎ®ûƒÜ m·ÀÇÛ÷ppGp›‡W9ïº]‚7@« MÌ-Ø*èèrCÍW*â]‚7èv ¹® ‚­Æç\ p«*äøco¿†:mëî›ï¹_s¾íºNÓû»­Õà«¶æNFûÍíÓvÝ7ií÷bðÆÛûï¾û½9›þêêôó¼;Îûï¾ûï¹\¿†6Ûÿß}ÈÞ ¼v ¼}÷ßÞð{¶û÷ I÷ß}÷ßr¹Üïÿý÷ÛϼžO¼Ÿ}÷ÜW`«˜ÞÞÛ}û•Êûï';÷›‘¼ßÿûï¾ûï¾ûï¿v܉÷›ï¿xKÊûï'“ï¾ÿÿáŽÛú¹ß¾ÿ¾þûðÆ®Nûûïÿÿÿÿÿÿÿøc¿Þ¿ðÆ«o_x?ÿÿðÇM¾ÿûÂpƳo_ÿÿÿÿ÷…½Þ8cU·§ÿÿøc¶Þ¿ÿ½¾öä¿ÿÿðÆßÿý÷+ÿÿÿÿÿ÷û§ÿÿÿÿðÆ«o^÷x_ÿÿ×Þ^ÿ j6âÿÿáVÞ¿Ü*á j=õþ¾%†bXgÿÿÿÿº¼;„¯‰a˜ü3xÿ¼}æóïÆóïxÞ;ûƒ\Ü{Æðt ¨(^»ïq…¸Û„Üàãp“p}ÂÆácp÷7væÜcvÞ7ßÞÞÜ“–∯nœ"ûÍÂû£}íÁ†à¡8)®/®¾ã¹ÝÝ\ÍÖé;OOoN{¶îá?{¾ûaÜï'Üï¾ûï¾ìÞÃ6ä\Çà?»î®ï¹_½¹·ßt»ïþöûﻺ¿}ÝÕÎûï¾å¾òx\—€Xüï¾êêû÷ÜÉ÷Ý'né;_t÷ß}÷ï¾îûï¾û–ûÍÄ×eà­÷wwwß}÷Ý·ßt'w÷Þ^êþûîWß¾ûîWß}äûï¾°V=°q†n¯¾ý÷3s¸ï'ÞíÎûïïow½Îò}÷ßr¾ûÊûï¿}õ`‘øÿÿÿÿÿýnžy5†_ÿÿ†5[zÿÿ÷ß ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÇM½ÿÿÿÿ†>Ûçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¶Q˜\ÿÿÿÿÿÿÿîwÿû…\*ÆwÿðÇÛzûƒƒ¸X#¸{ƒ‚7 »´@„™à…Ø!pRã]÷ tÜ@ŽÚnx#vÿ´rÜ`›†.\@«ƒ7· à¿ðÇÛ~Ûo^è-íà›•æð—Üdîîä;ÁÝn†ñ:7MÊá®Fäoºº'Ýܯ»N_ÿ¾ûï¾ûï¾ûû«Ûï7ÞO¼Ÿ}ÈŸ}÷ß}÷ÿþç}÷ݧß~íovy»O¾ûîWß}÷ßy¹ßÿîwßwvœïû»Û°Uãxw›•æó}ûîwÜÍ÷ß}à»Â\ïÿþûîWܯ¾û«ï¾û•äûïßy_s¾å}÷Ü‚ÿ¾çr¼÷ÞOï¹ÞOÞOßy<¯¼ž_ÿÿÿýÿÿøc¦ß>í·¨c¿ÿ†5[zÿÿÿÿÿðÆ«o_ºÃͽÿÿÿÿÞ÷x&ó~ÿÿöõ m·ÿÿÜ›•Êÿÿÿÿÿþûî_ÿÿ tÛçÿÿº }ö_ÿÿá¶ÿÿÿÝ ÷“ÿÿþàáÿÿÿûŠàÁ?ìÃ?ÿÿÿýúAFÞ¸c¶Þ¾¸<3·‡x?ïx;Â^à÷‡xw‡Þ ¼oñïïxOpÁ.áW†6÷–ðUàvŒ<3 œ›‚÷náanáÇpàî1¸îÂÜ>ûï¾å}޾᮸E†á†áá ‚î °=Åxw+‚Aܸ$àƒÂ\ûîìnÛ¤õ» tœÛ•Æ·÷…¼÷+îw“»ÓïÝ'WÜï†5Ñs†;m¬}÷ãá–í>ûïÜw§Wßzÿ}÷ß}÷Ü·ß}÷+ï¾ÛnËÉðÇÞò8?}÷ݧîîÓï¾ýßÝo¾ûï¾û–ûï¾í>ûî Ü7ÁÞû÷;ïó}ÎûËsû¡ºO¾åvŸ}á;îWÞ'ß}徯çžà¸Ü¾óy¾ûï¾ûÉ÷Ý·+±¸Ç¼nÓîw•Ó¹^o¾å}÷ßxCîw–ûR ¿ÿÿÿÿ÷DøcÎßÿÿÿÿÿî '_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¶Q‚¼\ÿÿÿÿÿÿÿíÕm(wÿûŠáU°Ëÿÿ†:ýê÷sÐÇ¿|†;ojÛïÜî`ïáM?[Á7÷¸Mà˜c¶þ°ÇoÎaG½—t]ðÄ·ep1[ðjàÀp`Fàsá¶õ᎛z†6ÛþààmÂA Œpà›…‚0Bæž7›Á7ÜîÛ“¼¼¼r7+!}Ñ=>á •÷NÁ7w/ÿß}ðÇm½}÷;‡¹ß~îð?}äòy>ûÉ÷“ï¾ûï¹þûîw;îwß¾û÷Oß¾ýÎûîwß}÷/ÿßy>û•÷ß}÷î›Áw`«¼ë}û•÷“ï'›îFçÿý÷ß}åy>û÷0]ÛroÛ w@›ïºN¯¾ò}äçr¿ÿý÷ܯîwßrÝ·"}Ëv7•âu¾ç}÷Üï¿ÿÿÿÿÿÿÿ†;mëÿÿÿÿÿÿÿïÿÿÿÿÿ÷@›Àhc[g'ÿÿü1Ûo_ÿï}÷‚ÿÿÿÿÿ÷·ÞËÿÿÿÿÿ}äûÿÿþé·Ïÿÿ}÷ÿÿþàá?ÿÿÿýÄþÀ8"<é¿'ÿÿÿý‚ÜK vÛ×ãp\< yßÿ¼?xKÃ÷‚7ÿ¼;ÃîïÜWãxñ¸8X1àcÎ`Îà¨K„ÜÜ,%ÁÂîáan;…„¸Ã¸pî ÜanûÉç¸Þ åqâ púNÜßrÜ0Ý·›‚ÉÁcpK]ŠT§jóy݉û´èŸ}÷ß{r ç¿z~íºîÉØ{î[Ûï¹ßr×à@ }÷;žç~ûï¾ûï¾þï¼oÝ_{urß}÷+ï¹\û•øÜþ¢à s÷ß¾ü1©Þ‘Îûï¿}ýÞèé÷C~ôû÷ß¾ûï¹]ï¾Ð"o˜Ip*§>û÷ßy¸ss¾ûï¿}ûƒÝ÷ߺn›ï'-÷ß}äû︘c¶Þ·Ú9×;ï¼ß}÷+ï¾çy<Ÿ}äû÷›˜ß}û¶äO7mÅ}ÈÜÍ÷ß~âN.±C6·ÿÿÿÿìgxÿÿÿÿÿ¸"¼ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¶QÿØ\ÿÿÿÿÿÿýÁ/ªðTqT»U®0ÀËáŸÿî*D 1Ñ!Hœlïÿÿ†:}ësîÃo vß׆53u0Æ£o/†;ýÔÜA/ºaŽÛz†6ÛÔ1îßné·ÿ }·¯ tÛÔ1¶ßðÇmºŽ0Bão¸Á FôæÝ7‚7@«Á7‚w‚n@…Ä݃¼x!q7`›Ã¾óp€Bá@Âc¶ÜGn 7_ÿ¸H!u{ vÛÑÌO¾öööþû•÷ܯ'&û•æûî‰í÷§iÜ1Óî/ÿöõ}û÷ß}äþý÷ß}÷"}÷Ü·ß}Êøcm¿ÿøcyþ>ó}÷îwÜÉæðw·›ï¾å}÷ß}÷+ï¾ÔoE}÷¿ÿ¾ûÍ÷›ï'ܯ¹\¯¾ûÉ÷Jû÷ÞO'ÞO¾óÿþò}÷+ï¾û´÷r¾òrÞÞï¿}äòy>òs'ÿÿßÝ¿þûÿÿü1Ûo_ÿÿÿÿÿÿÿx'ÿÿÿÿÿîÿÿÿøc¶Þ¿ÿÞ ¹'ƒº ÿÿÿÿÿ¿rnŸÿÿÿÿýÝàï¿ÿÿ᎛|ÿÿ÷…¾ûÿÿþðGÿÿøcY·¯ÿp{ÁÿÒƒP•AåúúÿÿÿÿúÀÁop‡þ¸. e)ÁøcS÷ÿÿÞ7žõ¸(7ŽïoÌ1Óo‹ÏÎóžn0— Ü,;ŒwÜan0îãí¼-Ø[˜;ÂÝ…¼/xwAÜ(;=Äù7nn \¯áonÆän ¸(à Xc¦Ü•åçyϺNàã¸ÛnïÝ·wjôôôór†n#¾ûo7ßr¾ûî·mÉ8 ×ã•9÷܃>å}ý÷ß}ýØWÞ7·ß}÷ß¾ç}Îý÷-÷“Í]ྩÑÎ[÷ß}÷ß~çýéÊû•÷ß~û÷ß¾þûã`† uëŸÎóŸ}÷›•÷ÁÆûï¾ýÍ»ìa•ÐÝ7ß}÷ß~çr7ÞO¾ûî·;•Pȃ&çèç;ï¾ûï7§§“ï¾ýæñïÓ¶òy<žO'"y>åy¾û•÷ßr¿»a…ŒÕuŸïÿÿÿÿÜ7oÿÿÿÿÿpDÝ“ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¶R|üXÿÿÿÿÿÿÿîê Žÿî:€à«s‚/ÿÿþá`î »_ðÆ£n§pÖ‘œr÷ðÇÛuxc¦ÝPÆÛï/·wƒ¾û˜vý^Ü`}àmà5àl1¨÷Ô1¶Ýoo7@mà› >ð.è¸@#¸Pp`?ÿûÀ à¸gÌ1©ŸÑÂnwßuqÞÍ¿sNÛÀëïONW;ïo'W+Çt7¯ÿï¼&ûï¾ûÉ÷ß~ç¾ûï7"}÷•Îå}Îåÿþå}÷ßs¾ûîwß}÷ߺ{ï¹_}Êý÷ÿÿ¹›ï7ÞO¾ûï¾ò}ÊûïûîW“Í÷ßÿþçs¼Ÿ~ò}÷ß}äæOÝ‚;Áï¹ß}÷ß}ËÿþûÉý÷ß~ûï¿{z»oß}ûÉ÷ÿÿ j6õÿ÷ï¿ÿÿÿÿÿáfÜ_ÿÿÿÿÿtÿÿøcQ·¯ÿ÷0Fôð"ðGÿÿÿÿÿ}÷§ŸÿÿÿÿýÎûïÿÿøc¦ß?ÿýäò}ËÿÿïÿÿÿáfÞ¿ÿû˜*8*ÿÿÿÿp UÃîÁžÿþÕmë†5›zÿáWöŸz|1¨ÛÕÄàß tÛâì ¹Ï®Á7†5r<¸X<1©ÞŠð]ÆÕoE`Œã…‚®0wƒ¼%ÂÂ^ð—¡fÞ¯Þ ¼x'x;ˆp`w; T1ªÛÒårºO¼p`wp€zØf•Õ4;“Žá#¸9;w¸ÓtÞ§;îw;Ëy>ñ9\¯NÓ¶û«&á®wÞo¹]··»XfÆ?sNwW§ß¾ûîwîw+þûþûï¼#}Ë}ÊûK÷Þo7߆;qÎûý÷ß}ûÏ k6õs»¼ɼŸßuܯ¾û•Îûû„°.¶7¹û‚æð—+ïÜ%Êå}÷ï¹ïzy>ûÂnî.ûï¾ð—ßp‹„A2^Á“‘¹ÜÍæûï¹›¢y>û•÷ßy¸ÛÁ7Aß}÷ß~ð·Any<žO'"¹“‘o¹_y¿¾þûÿÿÿÿï ÿÿÿÿÿþàÁßÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ¶RúXÿÿÿÿÿÿÿ÷Oÿô ‚Ô¯ÿÿÿî\,¸ÿÿ¸†ÿÿýàáŽÛuaŽÛz¼»ºn`„1¨Û× j6êï;ÀàŒ1¨Û¨ÛoÜ€Û¶ð:ÔÍêðFí·­ààoá¶êøc¦Ý_pp>á Žá …÷ÝÝ\Á7`«„‚n¸ÀûîdìxÜ®®¶û︮MÆnþé½ÀÇ¿| m·0Ço}{ÛÓï¾ûîdû™¾û»É÷wÝÝ'm÷;ï¾û•÷ßü1öÞ¼1Ó_s¾ûîWßr¾ûîW÷;žWI÷-û•÷ÞoÿÃ?µûÌ%Îòy9Ã<žnFçs¼÷wÛ‚Ní•ï¾ò}Îç}÷—†:Íë†>Ûç÷ßy9\÷›ï'“<¯'›°Uà­àÎû´ûï¾ò}ÿ m¿á¼õ m·ðÇM¾|1¨ÛÕ÷ÜîWï¹\ÉÊû÷ß¹·»ÛÊîå~å}ÿá¶õøc¾Þ¿þþÿÿÿÿÿÿÿÿÿ†:{óÿÿïÿÿÿÿÿ j¶õÃÍî9„Þÿÿÿÿÿs }÷#ÿÿÿÿÿ¾ûÉÿÿÿÿÿûï¾óÿÿÿÿÿ¾ûÿÿÿ`K‚1ÿÿÿÿÜ(-Ãþé·¬n1xød÷Ÿÿí½þÕhðþöýÁöâüq0Éï†:î}ØÜ j7¤pqïxîÂïq‡¸Ã¼-Ø÷…¼;ÆðNñ¹7Þð½äÔ{êჹ„¸PK · ­¼~÷Ü wi^à¸wvÜp–á-Áî8HÝÝ\î;»·v ½¾é:ܛクPg¾ðï¹_y:o¹jêܭó†O}÷Üï¾û­÷î“÷“ïÜîû۱»ß}ÎæûïÚ†cÎ÷÷ß}÷=÷ï¿s¾ý÷݃¾ûûïîï¹_}÷ß¾û‘»!ãßß}÷Þwß¾ý÷ß¾ðMØ««¥y¾Õmľ齺O¾û•û‘<ß]¿i#œÍÁÁ0Mäò}÷ßy>ûÍÌ?}æûîÛÆñ»Æò~â»7w“Óï¾þçy¿»ï¿¿ßïoPÆ«oOÿï¿ÿÿÿÿÿ¸A¼ßÿÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¶Swà‹ÿÿ m·ÿî¯.ÿ j6êpÆ®~¥Ð3»Âo÷ƒÿÿ¸8p°GppMà…÷ÞÜ`}àÇx#x#qÝ‚onÁˆ¸€û°—a.Fð—77÷î ÿøc¶Þ½Æ›îWß}ÊûÛÝÒs¼ÞÞœ›»îW“îWß}÷M×ÿûï¹_}ö0ÍÌžO¾çzß¼žO¾ûï¾ûï¾ÿÿ÷ß}÷ß}÷ß}Åv ¼¾å}÷ܯ¾ûï¾û•÷ÿ†:móûï¹ßy>ûï¼®Á¤ûï7ß}÷Þo¼žO'“Éäòÿÿ}÷ß¾å}ûÒ}ûïÞ÷ÞNÛ÷ß᎛zÿûÿÿÿïÿÿÿÿÿÿÿÿÿûÁ_ÿÿÿÿðƳo^ðVÖmÉÿÿÿÿÿx;ÛÁw _ÿÿÿÿÿ}Êÿÿÿÿÿýá.Wßÿÿÿÿÿ¾ûÿÿÿvÜ ÿÿÿÿp«ƒ¸ÿ¸&Ø?ÿÃͽþÖméî+˜wî ?Ãìý°LÍ8'pT-ãÞ†5[z<à¼o xÞàîü/xÞá{üáo rÞ÷›w…¼ÞÀFàÁa¶ýà»’}ÁSpp·Ó„Ü'pîq͹Ü=ÎêûïÞܯ¸k†ÄÜ2pÉÃ' j½â¸@w+•÷§® _~¨"†o m¿îw•Ú~ûï¾ý͹†}÷ß¾ûï¾çu k6⺾ûï}Êûï¹_}äänëaco¾9ß¹_¾ý÷ß}ûÿ}÷Ü®˜cm¿}÷ß}÷ß j6â>û÷ß}ÁP4ÛÏ®wß}÷ßyÞo'Ü®{»¿÷;îWß¹ßy¹ß m·×+¾ót0ÇûÒ?´uÎûï'ß}æós¹ßy9n;³Þ7›¡º¶ûÉ÷“ï¼ßr¹\¯¾íº¿{r{ïþòÿßþÿÿßÿÿÿÿþàÃq' ÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ³Ç¶ôXŒam·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·òÁXfŒUv`0HeÙ#U`D˜ 0EVAÙ€Á#'U`D˜ 0EVAÙ€Á'#U`D˜ 0EVAÙ€Á#|‘‚*°"Ì 8)Õv`0HÿÉN¬ƒ³‚N u`D˜ 790)Õv`0IÁN¬ƒ³‚Fï#:°"Ì )Õv`0Hÿd`§VAÙ€Á#:°"Ì ù)Õv`0HÁN¬ƒ³‚Fù#:°"Ì )Õv`0HßÈÁN¬ƒ³‚F u`D˜ 7òpS« ìÀ`‘‚XfÎF u`D˜ 0S« ìÀ`‘ûÈÁN¬ƒ³‚F u`D˜ oò0S« ìÀ`‘‚Xf|ŒêÀˆ;0$`§VAÙ€Á#òHÁN¬ƒ³‚F u`D˜ 7lŒêÀˆ;0$`§VAÙ€Á#|‘‚XfŒêÀˆ;0$o²0S« ìÀ`‘‚XfòF u`D˜ 0S« ìÀ`‘¿‘‚XfŒêÀˆ;0$oä`§VAÙ€Á#:°"Ì ù)Õv`0HÁN¬ƒ³‚FþF u`D˜ 0S« ìÀ`‘¹d`§VAÙ€Á#:°"Ì ¼ŒêÀˆ;0$`§VAÙ€Á&|‘‚XfŒêÀˆ;0$oä`§VAÙ€Á#:°"Ì ìŒêÀˆ;0$`§VAÙ€Á##:°"Ì )Õv`0HÜä`§VAÙ€Á&:°"Ì ù)Õv`0HÁN¬ƒ³‚Fù#:°"Ì )Õv`0Hݲ0S« ìÀ`‘‚*°"Ì ù"« ìÀ`‘‚XfüŒUv`0HÁN¬ƒ³‚FþLªÃv`0HÁXrÌ ù"«AÙ€Á#UaÈ;0$~r0EVƒ³‚LªÃv`0I²0EVƒ³‚FªÃv`0H÷$`Ь9fŒU‡ ìÀ`“îÈÁXrÌ "«AÙ€Á##UaÈ;0$`Ь9fò6ÛøÛïãm¾Fÿmüm·ñ·ßÇÛmÉmÞ6ÛøÛnHÛ±½¿"½2|ßøÛo±¶ÿÆÛ{ò6óœm·xßûãϹÆÞ÷·¯mü}·ñ¶ßÅyÈYÊ~D,SLv6ÔvFßs·¯müo·ÈÞ±·ŸÆûs¶þ?›äo·8óï‘üÝãm¿¾þ6Ûøßïãm¿¶þ7Û¼m·8Ûo‘¶ßcm¾FßÓ¶û}ü}½ÙŠ0`ˆ0X€ì£L.oão¾GÛs·»}Þ7ûäm·ñ¶üãm»ÇÛoò6Ûœm·xÛÏçeX0à»@¯‡˜E ìA§Æk‘¼Ý‘¶ßÆÛrFÛmÞ6ûøÛoãmï·çÏümçxßoãÏ¿¶þ6ûøÛoãmÿ¶çmüm·ñ¶Ýãm¹"·¤,–<ê¹mÞ–à,ñ¶£œ¸³¯z ô€\’ÓZ@U…šÇÝÿö쥹0 ø«¦+ãm¹ÒÜa„€WÄmc58ÛÞñ{Ð}-À °²ñ·UñöæuæH`±Ÿ;`ÓdÇÔ̲ÀÁe€«ÆÚïém€WÆÚïãù若0XÀWÆÙ‡ñ¶ß#mþÆÛܶí¶þ6ÛøÞãm¹ÆÛmüm·ñ¶ßÆÛmüm·8Ûûæ$À° 0X\‰òQƒ& ½Ø¯T’Åì è ,ELöQ§Ì,þJÀ+p s ®˜‰P[ó@0X¦€Ëe­³¿‡BÁ^˜²,œja‡’bjŒ @R@²C’Œ00@÷cη&"Á‚) Y¼£&LHôµ´°Æ0Eg,—€a@`°Xa…»\– X ÁlZ èÓ³ì‹/Z°,bÎØ¯ÂÂÁeøØ ¼VY* ~Äà)M( «ð-€j‚Êùœ4±W…›âÄE˜ÍiFâÕ`ÿŸ",r9b¯ dX‰‹ü£c7"×,m·ÈÛoãm¾ÆÛs¾þ6óøÛoãí¿¶þ>ÛøÛoãm¿¶þ6ÛøÛïãyÿ—ÉðY>ÊÁgð,ßglÃf4•€SàëJÀ-° rÊÀ)ð 2ß22ø 0g¾…‚Òž´1Ã3˜\`^É+Kü£¯˜] ß+“`²ß.¶À-ö7ŸÖV &Ádû+¾À-Ëh0`‡Œ"I˜eºÝ _¦•™œ†A‚Ô0Ü|ÂßhZHÉ¥FHË)vLDßh…¢õFnÀ+YÅf@k  0ÛEªª™©g¤E€Ë-‹—àHf{+¯€×Éۀ϶a‹Y†-ì¸Zøµ¯mµ¶ùíüo7ñ¶ßÆßßmüm·ñ¶ßÆÞÿmüm·ñ·÷Æÿmüm·ò° Ì_å`³loçlÃf;+®À)Î\€^ùX,Ÿ“ùhû·ñºoåP¥€WùSŸà»+“`²|•€[`þ6ßùX,›“ùX,ߛ丳§Ùhû·Øßo²¨ -Ádþ\m€[ùߦÀ+çlÛ¿•™lËäí€ÆÅŸlXŬYŒò\[¯³¶šß0ŸÃ¿+ö-ßÍò6ÛøÛoãm¿¶þ7Ûøóoãm¿þþ6ÛøÛoã}¿6þ=ÛøÛoãmÿªÁeŒ0fÌ}I€^)ótr¿& xvä3(Y“?-_TZþ¥+¬Á•|g–š³d¶˜üv»O . ð ú`Ç2†Lüª€_\[ùR€ÌxÊÞ3ö“&$Ém0,ø}w8`È0 /àµI0bŠá…>frÐó2와S0À)É+¶À-üo·ÉX,›“ì¬Û·ó¾MPËf0¨,/¦,ªLØ¿@e©`˜3¢Å·™@“j…¢ÉjEYŒ.Ñaݯ­¢Á‡€K›O”¶iY™!Y—M¸û{‘æßÆÛ}¶þ6ÛøÛoãm¿¶þ6÷øÛoãm¿¶þ>ÛøÛoãm¿½þƒ8dëÕxgìˆZ) à• ~«Q Ájšu¦O2-9ðwLüjúÜ¡cØØÃ ý‹BÑ`X6ÀLòª "A‚Õtû2šd`È´çÀi¿GßΰÁmÃ?P» ‹ÆØJàý\,Ƀ»Ð û°´`È 9 4Ö™ø×tþè¹…üdd û7¾dÏůã}¿ª€+™ö…ƒ `òð æ¾eü6¹‡s³l I£<2O/éô€]¿”`c3ÿ ÷Œð Xi†yQ@´ZWjÀ/µ¾°`¾€ß˜çŧtÉ2·cí¾FÛÍüm·Èßo±æßÆÛmüm·ñö߯Û}¶þ6Ûäm·ñ¶ßÆÛmümVù c!m?“´÷ñßoã}¿Ûÿ ü…®þLøZß#¾ßÇ»Ü_ ì…®þLØZßÇÛmö5†ò?ÛÒ6ÛìfFü}·Èþϱ¬1‘æßÇûß[¿Œþï±öß#ùÿ¼þ7Ûìm·ñ¶ßÆÛo|y·ñ¶ßÆßßmüm·ñ¶ßÇÛmüm¿ñ¿ŸÆÛmüo÷ñ¶ßÆÛmüm·ñ¶ßÆÛ|æþ7ûìm·ÈÛoãm¾ÆÛmò6Ûìm·ÈÛoãí¾FÛ}>þ6óøÛoã}¿>þ6óäm·ñ¶ßÆÿmüo½ñæßÆÛíüo7ñö߯Ûÿmüm·ñ¶ßÇ»müowñ·ŸÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛýìþ=ÛøÛoãm¾ÆÛ{|mÓìm·ñ¶ßÆÛ|¶þ6óäy·ñ¶ßÆÛo|{÷ñ·÷ÆÛmüy·ñ¶ßÆûßÏümçñ¶ßÆÛmüo?ñö߯Û}üm·ñ¾ßÆóÿmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm½ñü߯÷müm·ñ¼ÿ̉ŽfÂß8Ömüm·ñ·õãm¿¶þ?³øÛoãm¿¶þ7ÞøÞÿãï?¶þ6Ûøþão?¶þ?·øÛ{ãm¿½þ6óøÛoãm¿¶þ7Ÿøßoãy¿½þ6ÛøÛoão¿¶þ6ÛøÛoãm¿¶þ6ÛøÛãm¿¶ùmüm·ñ^”0ÇbU3&%æŸ$±…’þ;kv‘¶ßÆÛ|çþ6óøÛoãm¿¶þ6ÛøÛûãm¿¶þ6ÞøÛoãmÿ¶þ6ÛøÛoãy¿¶þ6Û–6ÛøÛo‘¶ßÆÛ÷½ç^6ûøÛoão9ÆÛÿmÞ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛäîL~b- }‹ZYdÂXÄ4ˆ¿CL^>Û1#m¿¶ïmüm·ñ¶ßÆÛoüogñ·÷ÆÛmüo·ñæßÆÛÍü}çñ¶ßÇóÿyümçñ·ßÆÛmüm½ñößÇ¿müm·ñ÷ŸÆÛÿmüm·ñ¶ßÆÛmüo7ñö߯Û}¶þ6ÛøšqˆøVfS‹ ¨Î½0§ ‹I•BßlvÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ7ûøßÏãÍ¿¶þ6óøÛoãm¿¶þ6ÛøÛoãy¿¶þ6û¼m·ñ¶ßÆÛmö6ÛøÛoãm¹#ï¶þ<ÛøÛoãm¿¶þ6Ûøßoãy¿¶þ6Ûäm·ØÛnY…BÚ3É,-Œ3å¸ã8Ö¯™cm»ÆÛmö7›ägñ¶ßcm¾FÛÍüm·ØÛoãm¿·¹müm·ñ¾÷ÇŸßmüy·ñ¶ßÆÞKiˆƒ“ˆÚºa{co~FÛ|¶ïmö6ÛøÞoãí¿¶þ6ÛøÛoãm¿¶þ7ŸøûÏãm¿¶þ6Ûäm·ØûnñºnqýŸÇ›mò6ÛøÛoãÝï6þ6Ûäm·ñ¼ßÆÛ}í?´ÀRºzÇŸßmümïñ·ŸÆÛmü}·ñæßÇóü©1aŒW"¼§€k`5Émò6ßäm·ñ¶Ýãm¾ÆÛíÙmü{÷ñ·¿ÆÛmüo7ñ÷Ÿ#Í¿¶ûmüm·xÛoãm»ÆÛmüm·ØÛoãm¿¿¾6ÛøÛoãmïþþ7›ùÚƨ[öHœjìk¶ûmümÏøûïãí¿6þ6ÛøÞo±¶ßÆÛ_¦!˜`3²àØ úÆÞ×½å¿ùmÎ6ÞøÛãû~Çó|÷¾>ûøÞãï;ÆßÓ¥¼`³hÛ¿ñ¿·)nBÆ|FØYw¶þ6Ûœ=ñ[œ|FøYþ6éümçñæõãoTâ·2}/à³…Ÿuþ6ÛämO?­5ÈÛoçpa–ð³yQ %ó¬äŠôà³±agøÛ§ñ··)nÌ|m·ô3 €Hü|¸¦˜ Oµ&Mª±k‰X-'ã6T¾‹ Ó1>Õyv–@,Æ‹7–´XeP4øéï¤ò–ï ÛeðVø,,,à6¦-,Ù2¸Z­–áméBF a…­ƒ7½¦™.-¡nÑ®ÛÖ6þû.,@,±bÚg±¶ßÎØ ||É‹hÍ€Õ{¿¿†Í‹Kbœ‚à6€b`™ÖÞ,N¢ 1ÐlfVt[äu›ìmWçj€R`6€+Øñf_ÏK€ÏÀg— •?3ôîb5¿y1µß²ÕTd˜µ@ bÝ¥ VTΖ<ûáA“{­Œ’•±„[áˆêß¼#!mªþ>ÛäìÀ³qglV I€Ý€‘7hó¶©‹ŒÇ›M5C*Ûøí·xycòÔˆÚcÇ»p™éQcâÆ—@•€k¦-ïÜž¸vW3-Õ8 iÆÛw‡F°ËW[` .Ƀ -ó±83¶™†Ì™÷ØÛoèf ü¾^[¯ãÝ»#m¹ß`°À/‘ïß“¶M€W™¶|˸ÍãnŸÆÛl˜ `1² —|Ζ|Àgà2Âþ‚C½Ž-™ˆÛo‘¶ßß®-`Å¿+2Ù—ñ·¿ Û¦À+†K`̰ fzb6ÛúvCˆ…›Q!f °·•Ê&,-PYËØ ¼†~6Þûf Æ ùx l¹ÆÛ|öïl0Àc¶FÛs±câ϶ \ZÁ+ u½þ·À)˜À2r°ð wöùíý|dZ *˜`εùƒe¾b ïc˜zBPϽÈÛoç|6>V^¯ãí¹"¶ùŽÛŒØ ÀØÛߤï€W Ã7 7Ÿ‚F3,mýlVÚf>ä`ˆ±€ß—¶eö|Àg`2)oA!‹^‚CÖ1mÉÙöø0€)‹{+2ñ—ñ½÷ Þ¬À+†I¸³,öa‰Ú>1’›X»0ù”ôï‡Þ\þ…šŸ!€Ü L¯Û·|Øǟ+¯×8Ûnñ·µí€Æp `6XÛ{çxYسkà”Ŭ°·ãm¾ÐÌ0Ø åX¼qšÑ½ÜãoîCæ|e«¥‹†æù…Ø2OLgAU™4dÔ±·ö±¶÷ܘ™‹|¹É¢ÔŒÞ:k¹ÎàÃHÇnE‰Õ‚Öû.3h™^´6¿ŒÒúÜà (Ȱaáj.<#eS°r#k…¿køZWA"pÉ `¶IcL+g|í6 m†~¹I“‚ݦbÆô]âøpc¶˜AšÁi `·YSù‡:fyw>\˜LA…Á‚Û™-‹cæ0Z™™ CZÅ’·/‚Q‹-D-²À³–¹g™1fÞ]HŸÁnÑmã߹à ‹# š yvgL0`µ3?uŸÎã 4ðÏm1f˜ h-ùSÓ Î™Õ§”|bk·­4™0x-°¶9¬þv«hÞû*e˜. à·ãZ³Ú<ÛÖ7Méf|d^ T,\-«*Ÿ3J™söçíö5Fùíëmö6aû!ŒXZÞD÷ÈÝ78fà-êeÈÂÚ {øÿÎpØÄ-uJ½ù:ßÃÜ-ß">ÞìyNùöÞL·xßoá¬0 Ö ~t¨éïÈf¤-§ ‘…¼-ßãÿ?ŒÛî•mò5Ï÷¤m¶Ü}ïñõß’3ÿì^6Ûøì×Ó>í¶þ<£zFq·ØÞÎÈÛo±[pcj$Âæas2Go½#o;Ç¿mò6Ûøûzñ·ßÆÛ|6þ7Ûäm·ñæßcmÿ¶ù{üm·ñö߯ûmüm·ñ¶ß#;Æómüo7ØÛoãyþFÞ}¶þ6ÛøÛo‘¶ßÇÞÿmüy·ñ¶ßÆûor<ÛøÛo±¶ß#ù¿Æi ;eÀT……ÂÕô[^šeEö‘½ÿÆÞ}ò>Ûìm·ñæßÇ»|¶þ6ÛøÛúñ·ßÆÛ|æïmüm·ñ¶ßÇ¿|¶þ6ÛøÛoãm¿¶ùmüm·ñ¶ßÆÛÍüm·ÈÛoãm¿¶þ=Ûøþão?¶þ6Ûøóûãm¿¶þ6ÛämçñæßÆ×XC··¤o·ÈÞoãm¿6þ>Ûäm·ñ¶ßÆÛßoüm·ñ¶ßÆÛmüm·ñ¶ßÆómò6ÛøûÏão¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãÏ¿½þ<ÛøÛoãm¿·¾<ÛøÛoãm¿·¾7Þøóoãm¿¶õ¶þ6Ûìm·ñ¶ßÇ»müm·ñ¾÷Ç›{ümçñæßÇÛmüm·ñ¶ßÆÛmüm·ñ·ŸÆßmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛýüy÷ñ÷¿ÆÛmüm·ñ¶ÝãÏï¶þ6ÛøÛÏãÍ¿÷¾<ÛøÛoãm¾ÆÛ|¼þ6ÛøÛoãmï¾þ6ÛøÛoãmï·¾6ßøÛoãÏ¿·¾>ÛøÛoãm¿¶þ6ÛøÛoão?¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛ{ãmï¶þ6ÛøÛ{ão¿¶þ6óøÛoãm¿¶þ6ÛøÛoãm¿¼ûmüm·ñ¶ßÆÛíüm·ñ¶ßÆÛmüm÷ñ¶ßÆÞmümçñ¶ÿÆÛ}¶ùmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛo|m·ñ·ŸÆÛß}ümçñ¶ßÆÛmüm½ñ¶ßÇóo|m·ñ¶ßÆÛo|m¿ñ¶ßÆÛmüy·ñ¶ßÇÛmüm·ñ¶÷ÆÛmö7›øÛnÈÛoãï9Æóoü}·ñ¶Ýãm¿¶þ6ÛøÛoão?¶þ6ÛøÛoãm¿¶þ6ÛøóûãÍ¿¶þ6ÛøÛoãmï¶þ6ÛøÛoãÍ¿¼þœË™Xn¬ÊÀ€;p%í=°S+íÀ`—‚™Xn¼¥¶ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á+2° Ü {KlÊÀ€;p%`¦VÛ€Á/)m‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á+2° Ü ~–Ø)•và0JÁL¬·‚_§> e`@¸ °S+íÀ`—éù‚™Xn¬ÊÀ€;p%ú~`¦VÛ€Á+2° Ü ~—Ø)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%í-°S+íÀ`•‚™Xn¼¥¶ e`@¸ °S+íÀ`—´¶ÁL¬·‚V e`@¸ ý-ðS+íÀ`•‚™Xn¿KxÊÀ€;p%`¦VÛ€Á/Òó2° Ü X)•và0Kô·ÁL¬·‚V e`@¸ ý/°S+íÀ`•‚™Xn¿KlÊÀ€;p%`¦VÛ€Á/ÒÛ2° Ü X)•và0Kô¼ÁL¬·‚V e`@¸ ý-àS+íÀ`—‚™Xn¿KxÊÀ€;p%`¦VÛ€Á/)m‚™Xn¬ÊÀ€;p%í-°S+íÀ`•‚™Xn¿KlÊÀ€;p%`¦VÛ€Á/Òó2° Ü X)•và0Kô¶ÁL¬·‚V e`@¸ ý-°S+íÀ`•‚™Xn¿KlÊÀ€;p%À¦VÛ€Á/ÒÛ2° Ü X)•và0Kô¶ÁL¬·‚V e`@¸ ý-°S+íÀ`•‚™Xn¿KlÊÀ€;p%`¦VÛ€Á/ÒÛ2° Ü X)•và0Kô¶ÁL¬·‚V e`@¸ ý-°S+íÀ`—"° Ü ~—˜)•và0JÁXn¿Kxvà0JÁXn¿Kl‡íÀ`•‚"°à¸ üb6߯Û}¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛnq¶ßÆÛmüm·ñ¶ßÆÛs¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6Û÷¶Tq|Xÿÿÿÿÿÿÿÿÿÿÿÿøc¶ÝPÆÛr6Ûècm»oÿýmßûÁ7‚aŽÛu?ÿÿ†6ÛŸp°UÂÁ1¨Û×áFÝ@ÆÛî““pØc¶ÝHc¶ÞŸÃmÕÿ†;mêÛo»Á;î“Á]à›Á;Á7˜cQ·P1¶Ü÷C}ȼ vÛÒð?ðÇÛuöõ m·á¶ýÁÁW \%¸MÛtžn;Œ{q§íÚvoÝ‚®W@«Íé÷iɸ®Änp GðÇÛz†6Ûÿ†;mêÛoÃmøco¿zzs¾é==ºNnû÷‚Ï7·;¶ôûîÓÓÛ¦öîåü1öÞ°ÇM¾aŽÛz†6ÛðÆÛ j6øí:¹ßy>øcQ÷«‡ÞÞn÷ßv¯oNÛ«“vŸ}Úy9C¶õü1öß0Çm½Cmøcm¿ m·ðÆÛ|z}äûÛ™¾ûÉØ}Ø;ÁwÞ <»«îDîí:O¾å m·ÀÇm½8cí½|1¶ßý÷ß}É<Ÿ}æûï7Þ^ ºo^'†}÷ß}÷ðÇm½¶ôá¶õöøÛo¡ŽÛzý÷ß j¶õ¹ßrï¾ësO¾û÷;÷ÜîÃm÷Ãmÿ vÛçðÆ«o_ j¶ô m·ÿÿ j¶ô m·ÿöõü1Ûo¶ÿðÆ«oPÆÛÿü1¬ÛÒÕméü1¨ÛÓ m·áŽÛzü1¶ß†6ÛÿÃmøcm¿ j¶õ m·ðÆ«o_݃ÿÿ†;mêÛoÿ m·á¶ÿðÆÛ~Ûoøcm¿û°·jì?øcU·§ü1Óo\1Ûna¶ü1¶ßÿ j¶õí½CmÿÝßuí½?†5zöæÛoÿ†6Ûü1¶ß†6ÛðÆ«o_}÷ݯ m·øcU·§øc¶Þ¿ m·Ã­¸¿ÃͽafÞ·ßuÃͽ|1ªÛÐ1¶ßÿ vÛ× tÛÖí·îà¨ðÆ£o^Ûoí¸¡¶ï j¶õ m·øcm¿ k6ôøcY·Ã­½mþÕmëxXcQ·¦í·¨cm¿Ãmøc¦Þ·wÃmÊÔmÙí½pÆÛÃmð1¶ßþÕmëq Ã0ÆÛ}áŽÛzøc¦ß†5rC­¹8cU·¯x}áÞ¼o¼-á~ÛoÜMÂáÞ¼8cm¿}æãƒ·Gpq¸;¸;p‘¸8Ü,n7·bv݇q§dî㻌];¡ºÜCqâ†È;¶åp„á àÕ‡}êí¼Ý·ozzvžN®6í]ß¹Ÿ¾ðÁVß§ÛrWIðÇm¹}÷wï¿p›î￾ûï-÷-÷î6èou¾ýÒtî‰ðÆÛ| vÛÕæðï¿}û‚÷WwÞp{ï¾þç~ûïºýÔ1ªÛŠû¥tß¾é6ÛðÆÛ|}÷÷ßr¾ìn‰÷ÜÆêûÉæèÜmÛ}û¶é¼›±ºOwMîîåvß}÷MÙöõ}÷᎛~ûáŽÛro÷—ýÈ¿ÿïaŽÛz_yxc¶ßm߆5ñxcU·¬1ªÛÔ1¶ß†6ÛøcU·¬1ªÛÖÕmêÛoÃmü1ªÛÔ1¶ß†6Ûàcm¿ m·þÔméá¶ýÂÓÿ vÛç†5zþÕmèÕmèÛoÿðÆ«oOøc¶Þ¶ÿü1¶ß†;mëÃmÿðÆ«o@ÆÛÿÿá¶ü1¶ßÿü1¶ß†5z†6Ûÿí½­½møcm¿ m·ÿÿöê6Ûþé·SÃ6ù†;mêÛoü1¨Û×ÿÿü1Ûn cm¿áŽ›uáŽÛz†;mëÿ j6ôÿÿ†;mÔ m·á¶ÿÿá¶ü1¶ß†;mëü1¨Û¨Ûoÿÿöê6ÛðÆÛÿÿÿÿÿÿÿÿÿÿÿÿ¿¶Tî˜\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†;mëÿÿÿîÜ,ÿýȺaŽÛzÿÿ÷Mͼ{Á=àŸî“«'x ÿÿ÷ܸX*ôûÉÌÂo¹Ü`›îwƒ¼¼x&ètŸ}Êá®í·£…®pßÿ÷dïvÜÓ÷ß}÷îmØ(ìNWwM÷“ï¾ûÛÞßÿÿ}÷÷ßv¯';ïÝßx3îW“ï¾ûï¾å}ÿá¶ùþûÍ÷ßrNfæn“«´ôðM໿}÷ßs¾ûï'“ÿ }·¯þûîWßy¾òv§Wß}ÆÞðGy>ûÉÈžO'ßÿÿs¾û÷ß~ûï¿{}÷mûï¾ûï¿ÿÿþÕmèÛoÿÿÿÿÿÿÿí½?ÿÿÿ j¶õýàÿÿÿÿÿ m·ÿx[ÛÀËÁÿÿÿÿðÆ«oPÆÛûÍ?áVÞŸÿÿÿ m·á¶æÕmÕ÷÷ßðÆÛÿÿÿÿî‚ß}ÿÿÿ tÛ›ÁÜþÕmêÛnÿ†5[z6Ûÿxÿ÷Óÿÿ†5[z6Ûïÿ÷ 7ÿs¿ÿ÷žó÷›Çþí½\(Üw¼w;î ‡pTnܸ8ÜÁî7 n0· 7 ¸Û½¾íî6ûïѹ7Cq7ÜIÄ_y¸5ƒ;‚ÃT@\ß{vÝÝ“Óî÷§§W·Nã¸ÕÛq»Þët·mÓ¾ï}îñ¹7ß~ç}÷ݧß}Ë}÷W4ýÛv®ÛÕÛÝnW-÷-÷ß}ûï';ïß}û»ï¾ûï7Ü®wï¿}÷·Ý¾û÷Ý+ïßr¹ßßy>û•Û}÷3}äû•ÚsWÝ·ßyûÝæó}ä麺O¾ò}Àæå}ýûïÞŸxgß¿ÿýÿÿy¿ÿÿðÆ«oXcU·¨cm¿ m·ðÆ«oPÆÛÿ÷¼Ÿÿÿÿÿÿï/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß¶Uk¼\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýà}ÐÿûÁWÿÿÿýÉÏÿ÷ Þn¿ÿÿ¼¼Ü,¼ß}àààÐ#»Þý ¼†5z<y¾ðBâ\ vÛÑÁƒ?ÿû‡n>öäNÓÎçy;'»Éæòr¹^n$òy:¹_}Úr/ÿûï¾ûÓ¤ûï݂۠QÐ(îûïN?}÷ßrÿÃ6ùý÷ß}Ús¾ûîÁZÌÛ wWß}÷ß jµ}÷ßr?ÿûÉ÷;ï¼ÞO¾òvðï^ÝÝ·ß}ÊûÉ÷“äòr?ÿýÎäO¿}äûïN‰÷îÛï¾ûÉ÷ßy¾ÿÿÿ¿ÿýÿÿÿÿÿÿÿÿÿÿÿv?ÿÿÿÿþð—1Þÿÿÿÿÿ}÷§ÿÿÿÿÿï¾óyÿÿÿÿÿßy<Ÿÿÿøc¶Üÿÿ÷ÿðÆ£ûWŸþà­ÁP·ÿÿÿþàÁn ÿðÇM¾9ÝÃöäÿï÷…ýáÞ»nNàà vÛæð m·îïà˜Üo„Áø^ãáaÜÆãÆæÜøÂÞ7aÞwíÐwî!¹ Ádá®wßzr7ƒ¸(Ü7•Á!ª 0ÉÛïoNÍééÒ~îû´í?y=î‡{ºoW·-íîûï»OWfýͼí·#ïß~û­÷ßtžï¿ï7Þoßrß}÷ß}÷[Íæå¾ý÷ø®fý÷îïwßïï¾ý÷-ÊøcQ·÷ßvß¾û•ˆ:ÿqáÝà çy¾û?vÝÜÍÎû¥xÞŸ}÷ß}äýÈŸy¹“É÷“ïÞo¿¸/zz¾û÷ß¿}û¶ä~ÿ¾ýý÷÷Þ_ÿÿÿÿû‚Íéÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¶UèØ\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÔÙëÿ÷‚¯ÿÿÿþãÜÁ_ÿ¸®ÿÿÿ†;më vÛÔ1¶ÿ½½< j6ô¼ j6ô¼x#†5z<¸ÍÚr¸0.ðUà„1ÛoG@áŽÞúÿÿÜ,¸p^áÁw;ÎãoÞNfð^ôöð]÷ q¹_}÷ œ6Ễÿÿ÷;ï¾ûﺸÛÍ÷û•÷ww“÷ß}÷ßÿ†:móû÷ßr¹ï½>ýà-à~ûï¹_}÷ß}÷ÿÿîw;Éäç}äòy<žo'‡ß}÷ßs¹›ï¾ûï¿ÿÿ¾û÷ß}÷ܯ¾å}ОO¼Ÿ}Úy>äO'—ÿÿ¾ÿ~þõþêþÿÿÿÿøcY·ÿÿÿÿÿÞ ÿÿÿÿÿûÁï ÿÿÿÿÿ» {}ÿÿÿÿÿþû‘ÿÿÿÿÞo7ßÿÿÿÿÿ¼ÿþÔméÿ†;mÍÁPî ÿÿÿ÷ „pÇm½Ý7¯ÿïÁÿþì߸0ÿöäy<%ÂFáct à÷ 7 ÁÛŒnÆáÍÛqÆ;Óî»Æä7!ÜMÄÞÜCp¦öû•æûƒ ÁCpa¸mÁA†9Qïßz{vŸ}÷îwjí9»›swoÞŸ¾éÜIØî›ÓïÝ]\»¹‚]÷﻾û÷6ýÝÖöýß½¾ý÷•ÕÖûï¾ýæó}ü1×ï¿s¿y¿s¾îû÷ß»»û‹}ûÅ»¹_r¿}Ð_ï¾ûïO¹ß}÷“é;î÷]Åutn®WÜ›Óï'ß»¿Ã¶øò}÷Ý?¿ÿ½ÿÿܯ?ßÿÿÿÿÜNï?ÿÿÿÿþò vÞ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¶VeüXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî¸X'ÿ÷@î WÿÿÿÜî‰ÂǼÞ á\ýG˜cQ· coëºO†5z6Û¸cÍ¿ }½á6çÿÿ¸'ppUÁÁW{xK«Â݃½9›˜=Ø.ðw‚®Þâs7›ÍÃî ]Ã÷ \(ÿÿ»»nÓ«îWßvŸ{sÙ^ÞŸt_}ÝÕ÷ݧ/ü1ÓoŸßtÝß}Îæû™¾ûžï}Ø(ö÷}û÷ßrÿÿÝ]<‰æó}÷ßvðw»»•࣠]ÛtO¼ßy9_ÿÿßs¹\÷ÜîWÞNméÚy¼%ÝÝû«î›»É÷ÿÿýäó~ûÉý÷ß¼÷ƒï½_}ÿÿÿÿÿÿÿÿÿÿxÿÿÿÿÿvï?ÿÿÿÿû°w‡º ÿÿÿÿÿ¸Û¡ÜŸÿÿÿÿýÎòxÞ?ÿÿöùÿÿßÿ†5[z÷Fà˜ÿÿÿÿpÆá1©Ÿ×ýÚÿÿÿ÷‡}®8c¶Þ¯s¾à›pF7w7w7 np³p±¼ÞÜcx[Œwxw·W*ÛÝ ÈÞÜW¾ó}íÛq7n ® ܸ"îwÞONîîÛ÷·°Æ«Ww[Žé=½?{÷]Ý÷ß}ÕÉ^žonÛ§Ü=ûîï½»wß g#´ïvoWß¼Þ}ÕË}Ý÷ܮòy¹_î}÷Ýß}Ò¾ýäýÚvWß÷WwÝ]ßsï¾ÿ¹ß}ÎêûÛÉÃÞO'C}÷ÝÞûîîþîë}÷ß}÷+ƒ_}Òv/yoß}åy>ïwÿÿýå}÷ÿÿÿÿÿîžO/ÿÿÿÿþÿ†;móÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶VãTÿÿÿÿÿÿÿÿÿÿÿá~ìÿ†:ýÙÿÿÿðÇÛuxcͺ¡¶ÿÿáŽßÕÿÿÿÿü1¾ß$ÿï]„øc¶ÞŸÿÿÜ$%÷ ÿùý.ßÿðÇÛ|ðÇ_½}ÁP— j6ê8H;ï'›…„Ü,ÆqƒÞ »vð—ÞnÁݼÐ=ÐK þé·¯†56ü¸X[9ß}÷ÝÝÝ Ú¸{‡»NÓ«Îû¤ûÞð§—þé·¨c}¿ýÎêîûï¾ó}÷ï¾ç~ûîû®ûÿÿ vÛ׆5z»7„¾ûï¾åx.ð‡›Â^û•÷ß~ð·…ºo tæÿÿ÷‡}äûï'ÞO¾ûîW›Éûï½;½9'ßxÿÿáFÞ·ÞO¹o¾å~û¤å¾ó}ȯ»o;;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿÿÿÿÿÜ.èÜìÿÿÿÿ k6õï¿wÿÿÿÿÿ¾ówqÿÿÿÿÿï7ÿü1¨ÛÓÿ¸'pFÿÿÿ½ÿûï¸+ÿÿÿûßÿ¾û»‚wwww7 w nÜmÁSpvöámǸÛۻ˺7½ÓºnMÕÓr;‰¸Ÿ vÛ÷wßvoöíÞœîïOOn¯nÛ¶ïq«›sÜÿÞOܯÓtû‚wwß}÷+÷Ýß}ûïßw¼ï¿wsþû÷·ß}þÔmñÝû•Ú}ûîÓï¿}Ò¾ûŽáï7Ýîïþûûï'ýÁ;´ûîîÓï';«îwß¾é>ç}÷Üî¯ßuû««Ní÷“þûï†5q]ß}÷Þo¾ò|1ªÛÓ¾ýåîOÿºO_ÿÿÿÿû‰:oÿÿÿÿÿÿ†:móÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶W`í¹_}¿ÿûÓ÷+ï¾ûï¾ûï¾òrºo¼¯Wß}Ëÿÿ¾ûîwß}÷ßs¾ûïº ì+uuºo¹_ÿÿ}÷ÞO'ÞLa›ï¾çr¾ûÛ÷WÌ-áßy9“Ÿÿÿ¾û•ÊýÊòy>çs¼Ÿy<=ã½½:»O¾ÿÿÿÿÿÿÿÿÿÿ†5›zÿÿÿÿÿû›ÿÿÿÿÿî Þà]áÿÿÿÿÿï¼ÜÉåÿÿÿÿÿs¿qÿÿÿÿÿy¿ÿÿþà¨ÜÿÿÿÜOÿîÓ¸c¶ÜŸÿÿþâî/Ãýëï¾öà÷N Üà¬1ªóÕÁ[ƒÜmÁÍíÂî;±½ï7Ÿû… ÑÜM÷ ¸›…\áû•äîîûï7ßr¾ôèÝ]Ü9;No½].öäNwîë}ÿs¿s¼ƒ¸®¯ß}÷[î÷wû»½×u}÷î¯ß}÷þçw¾û»ï¾ûïºß~û÷nﺺï¾ýán»ï¼¾ìï'“ïºO¼Ÿ}äç}äçy<Þ®iåvN•äòxž®î%¾åýà–þîèŸyo/}ýâ¼¾õ†5zûÉåÿÿÿÿÿ¸Q? tÛ«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶XZ|LÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúŸÿÿÿ¸pwoÿݹÿÿÿÃ}aFÞ¯ q“Œox&ð÷ƒ¼ðï¼èà»Âw„ÿÿ÷…„¸Hw oo¼Ü$Ü=Îãw4ò}æû䜮$á†â¸×ÿÿvŸ}ØŸ}äûÍÕÙ¾ý÷“ÓÛÛ¤ûÉéÒtÝ\¿ÿûï¾åvŸ}÷IéÕ÷“þäÜþû¶í<x&ëÿÿ¾û•æó}÷§Mäò}÷Ÿtï7“ﺼ}ÿÿþç}ÌŸ¾û÷Ý'wÝ…¼=áßr¾ûï¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýØÜÿÿÿÿþìÿÿÿÿÿýÍÿÿÿÿÿ÷w6íÿÿÿÿÿû·ÿÿþà­Á_ÿÿÿ¸®&Õmëÿ†;mýÝÑÿÿû«­Â®Ômëÿs¾àáÜÜ'p{ƒîÍÂîp÷»¸ÛƒîûŸî+«îw+ï¸fáÜ"àß}ÎûîwwWîû«ï»¿qÝn{µÝnîwÝ;ï¹^Oßßu¸{ï¹ß»¾çw¾ë}ÿûﺻß~ò}÷þí·Ç÷ß}Êò½½¸ï†5›q]ß¾îã»_rß}ÕÖò~ûÉäëýî ݧ;ï'ßy8ÉØ¢vO'“Äûî‰éäìONÉÒy\5äòyÛðÆÛs m¿pÆû}áþô m·ÐÆÛv6Ûì1ÓïPÆÛw†;mÔ†;mÔÃ>ê6Ûècm¿áŽ›uCÏð1¶ÜÃmÜ1·ŸÃ}Ô†6þÔ1¶Ýá>õ m½á?®Ûoü1·ÝPÆûw†>ûÖé·T1¶ÜÃm÷Ãmòí· cm¹†;méðÇm½0Çyúœ1Óo@Çóó }ç cm¾ÃíøcϹÃmÿ†6Û°1¶ÿíøcm¹ÃkðÇ_º¿ÿ†;mÔ m·ÿá¶ê†6ß“áìêðÇÛz†6þøc}¿ tÛç÷ qƒÿá¾çrr ᎟z~û{_†?Ÿ×ÿÝÝ—xþõ¾ü1Ûn¦ñðÇO=CÍøc}¿á¶øßoÃmþé·¯†:¯:¸XKŽáÂ_}æã væÜÆîð·…»tð·`îWßpÁ.%Åp w 1ÓoPÆÛ~ÞÃ{ÿøc¦Þ¡¶þí·¨cm¿¸MÝ÷Ý·ßwz}÷{°î“ï­¹÷ܯ¹ÝÝß᎛z?ŸïðÇM½|1Ûo[ï¾ûï¾å}÷÷÷MÖûÊ麾ðCá¿´ }¿¯†>Ûä1¶ß}á.wßy>ûÍ÷ÞÛv]Õ÷ÞNî‰ÌžO†;méÿ m·ÿï¾äNdûîDæN{Åwvžð·áwß}÷ÜðÆÛ~í·§†>ßÖÛo_ÿßïÿþÛïþû{á·ÿÿÿÿÿÿ m·ÿÿü1ªÛÔ1¶ß?ÿÿá¶õÿÿ†6ÛðÆÛÝ»Ïÿÿÿ vÛŠßîÿøcU·¯»oÿü1öÞ¿ðÆ£n/ÿw½¿ÿÿÃmÿÿÿï }ÿü1¨ÛÓü1¶ß÷¸9±ÐÏÿÿÿ¸k…á¶ûÜw6à¯ÿÿÿ¾ç¸S wÞ×ÿ vÛ›Û«ƒÜp{„îÜ.á7 »„·áÓû–â¹o¹_}Ã\!8D1×{W® p[î Ý^N®fî蟻¾ûÛÉÕÕûýÊûï¼ßr¾û«Šòy>îë÷Ýߺº¾ýÊøcQý£«ï¾ûïþû÷ß}÷Ýß¼Ÿr¿ðÇm¾9Ü÷wßxkÕ÷ß}Ýû¿ïî®ï¾ûîy>ÿî ›‘>êûîw“É÷§Ý§ßzsÜiÍ»[Ó’y9 ÷“ÉÚy>ûûïÿy_xm÷÷ǯÿü1¨ÛÓz¼)åÿÿÿÿÿ¸5Êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶YT¼Pÿÿÿÿÿÿÿÿÿÿÿÿá·õÿü1ÓïOÿþåýWþÞï¿áŽÛzpÇmºŸ vÛ©ÿ }·WÃÏÕ†9}Õ y÷gðÆÛ|þí·¯ÿáŽÛz }·¨cyþ6Þ·ü1÷Þ¸cm¿ýØ;Œ/ðÆ£n§Ý¼ü1ýŸøcϽ†:móû»_†6ÛŸÜ›—ÿÃmëü1ÓoPÆÛ}îÂÛ‡s'ßq‡v7Æîææð·‡tè;»ï'AÜ‚Ü5Ä7_ÿÿ vþÕÌ·Ý'ßwvÞÝ'ÞÞÝÝ“»ï¾çztN“¤ëÿÿÃíû»ïO'ß}÷wß}÷„:{•÷W§iÎûÿÿýÂo¼ßwy>òyõ¹nWÝ·ßw}éè1ÞÎ+«Éÿº¿}÷Ýnwl1¨þÑÚz¼Ÿ}÷ÞLH3î»ï¼ß}ðƦÞ-Ä7WßýÕ÷ß}÷jí<¯¿y¼ß}÷ßî–ûïNÛ۫ïþí½#™;ï ðÏn‰÷“¶ûÉ÷Þäû¡>ûÉáO ôôääòrN“ï»NA·"rþßoÝ•÷÷ÞO¿y_u¾ýûïáFÞ¿¸Pž_ÿÿÿÿû… Òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß³Ç¶ÑØŒam·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ò"Ì "²AÙ€Á!‡dŒY ìÀ`‘‚+ D˜ wò0EVAÙ€Á'U`D˜ ?ò0EVAÙ€Á#U`D˜ 7É"« ìÀ`‘‚*°"Ì ù8"« ìÀ`“*°"Ì œœUv`0HÁXfÞFªÀˆ;0$`Ьƒ³‚Fû#U`D˜ 0EVAÙ€Á##:°"Ì "« ìÀ`‘ÿ‘‚XfŒêÀˆ;0$oäà§VAÙ€Á#:°"Ì äŒêÀˆ;0$À§VAÙ€Á#rÉÁN¬ƒ³‚L u`D˜ 7dŒêÀˆ;0$à§VAÙ€Á##:°"Ì )Õv`0IßÈÁN¬ƒ³‚F u`D˜ 7$ŒêÀˆ;0$`§VAÙ€Á#vÉÁN¬ƒ³‚L u`D˜ 7ò0S« ìÀ`‘‚XfüŒêÀˆ;0$`§VAÙ€Á##:°"Ì )Õv`0Hß$`§VAÙ€Á#:°"Ì ìŒêÀˆ;0$`§VAÙ€Á#|‘‚XfŒêÀˆ;0$oä`§VAÙ€Á#:°"Ì –F u`D˜ 0S« ìÀ`‘»$`§VAÙ€Á#:°"Ì 7ù)Õv`0HÁN¬ƒ³‚MþF u`D˜ 0S« ìÀ`‘¾ÈÁN¬ƒ³‚F u`D˜ gò`S« ìÀ`‘‚XfÎN u`D˜ `S« ìÀ`‘¿‘‚XfŒêÀˆ;0$nò0EVAÙ€Á#:°"Ì 3ù"« ìÀ`‘‚*°"Ì ù"«AÙ€Á#UaÈ;0$oä`Ь9f˜U‡ ìÀ`‘¿‘‚*°ä˜ 0EVƒ³‚G¾FªÃv`0HÁXrÌ –FªÃv`0HÁXrÌ ¼ŒU‡ ìÀ`“*°ä˜ =É8"«AÙ€Á&VCv`0I÷d`ŠÈrÌ "²ƒ³‚LþF¬‡ ìÀ`‘‚+!È;0$o‘ö߯Ûmò6ÛøÛã}¿¿¾6ßøûnHÛnØÛoãm¹Æû|¶ùmüm·ØÛo±¶ßÆÛvFßs½þ6ÛøÛ{‘¶Üãm»ÆÛw¶ûr>ÛøÛo‘ößcÏë#oéÆÛmüo?ñ·Ÿcm¿öçoY|o·8Û‘öõãÍ¿¾þ>ÛøÛoão¿¶þ6ß¼m¿8ûo‘¶ßcm¾Fßs¶þ6ÛøÛo±¶ßÆÛ|æþ6ûøûnq¶ßÇÛs¶ïíÎ6Û¼{÷ñ¶ß#͹#Í»co¿½þ6óäo·ñ¾Ýãyÿ·§}ü}çx÷ïãÍ¿÷ç{üm·ñ·ãm¿¶þ6ÛøÛoão¿vþ6Ûœm·ñ¶ßÆÛwþä¶çmümýxÛoã¹ÇŸw¶å>þ6þ’6ûøÛnñ¶Ýãm¹ÆÛmüm·ñ¶÷#ïëcm¾GŸÍö7Ûøóûãoï¶çíüm·ñ·ßÆÞ|çûo|m·ñ¶Ýãoïÿ¾<ûøÛnq·ßÆÛÿmüm·ñ¶ßÆÛÿmÎ6ÛøÛoãm¿~ç}Þ=ÛøÛnHÛzñL),m×øÛoãm¹ÆÛw¶þ6ÛøÛoãm¿öå~ïoËyÙKif©Ÿf+±¶ü‘îßÇ›müm·ñ¶ßÆß}¼ùoö6ÛøÛzq¶ÿÆÛmü}·ñ¶ßÆÛmüm¿ñ¾ßÆÛmö6Ûäm·ñ¶ÿÆÛmüm·ñ¶ÿÎÐ`ÆMP$ÎH0X1WadAŸñýö6Ûämýñ¶Üãm¿¶þ6Ûœm·ñï߯Ûmü7Ù‰¤0-P”öQÐ 3þ6Û¶7Ÿ’6ÞøÛïão?¶çmümýØÛoãoï·þ6óøóûãm¿>þ>Ûøûoãm¿¾þ6ÛøÛoãm¿·ûÛò>Ûø¯bÀ[ñ;Sì‡'o}/ð ÿå@’ªŸŸàg²Ìø-í2Å`À+®S\΀ÚcãÎ÷Òñ&<–Ð ìJÃ=1|‹å“Uà·êÁeÐ ÎÆÚ›”¶[aP`zg¦ –Ð ìNÍè±{Òôxr\Xžx,ßr¬Æ »àµP`-=Œ™,c•@YB¯Å™±—åzBÈ0)ð øŽ”d û}üm·ñ¾ßÆÛmüm·ñ·÷ÆÛÿmüm·Øßïãm¾Fûmò6ÛøÛoãm¾FÛß}üo·ö°^À$1d° j€XèÌ2 A'³ø1\Æ–/`-X$6"U‚F÷Œµ@’̵@“¬VU­ý +×l-|ë/[Á`É,cáh¸Ì²ŒÌ²Ì˜5Û(D´0,¶‚GÊ“ ’c2 /“â ²lZÙ„@-™`™Y¢¬ 1‚ ŒiP§ÂÄ’Ð4ø íTÉ€`´›7jø Áyf5¡AdxZ5½—¬X¨É ntZ˜0Z2Vdà ú!“0À$ÚLOÙC €_1*Á#h›ã5¥Ï$·!ø_"ö  ÆX f{vä6þ6ÛøÛoão?¶þ7ÛøÞoãÍ¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãí¿¶þ6ßøÞÏí‹;‘Å€HåæA!è$¶A!™ÞÌ7€“ÛlCV €Hl‚GÛ3ÕK3ÕOÎÍÏðYüg¯¨ú£"…+˜ùK‚Ϧ =öÁdô,ž‚GÊÕ‚OjÁ%üû‚ÉàY}½†oA#«›Þ0€ ÂÌÀ$vÖV ̨¬9§P`5øt±±   Ùq•Y—ò¨ .ÁdþUAf«›ùÛ`[`y{#«‡€Õ‚GË̶gý¿Nð$?Kð$}æA!™jÁ!™øûoãù¾FÛ}¶þ7ûøÞoãm¿6þ>ÛøÛoãm¿öçmüm·xß{ãmÿ¶þ6ÛøÛïã}¿¶,lE]Q¯2 à’TÉf@gÖñƒ («3klGV 8¬ÏÑŒõ@“J‹6¶cÍ@Yœ d¥âÿ|ŸTÉ’`YÌü¶ 6aY—ɸ,±“ Œ¿ª@-’d @W×°,“ÀUŒ 7¿ Ù•2¨¶KâÆÀ$1g`9lù–¬™'ìXزöÀc¶ü¬Ëf_ÊÁdÔHeÙT‚Í—V,, }o‹/|(b[þŒL*2Pεc8‡Àa€`³³H bÂLÈ–[¾e(¶¾6Ûä{ýñæßÆÛÏü}·ñ¶ßÆÛmüm·ñ¶ÿÇÛmüm÷Øßo‘¶ßÆÛ}ü{çñößÃ£Ì Yϱ>ƒÒ8j‰á„‚Ó:5BÃÌü-=ðoã¥ú*‹FXd_à å‰@SEA€[ZgU‹L|Æð·á3íýÛäm½ØÛoãm¿6þ6ÛøÛãm¿¼þ6ÛøÛoãß¿¶þ6ßøßoãϹÆÛvÆß|¶þ6ÛøÛãm¿¶þ6ÛøÛßãm¿¶ùmüy·Øóïãí¾ÆÛ|¶ùmö6Ûäm·ÈÛoãí¿çþ6óøÛoãm¿÷¾6ûäm·ñ¶ßÆÛÿyüm¿ñ¶÷ÆÛmüy·ñ¶ßÆÛmü{÷ñ¶ßÆ÷ßýÞ6ÛøÛoãm¿¶þ6ÛøÛïãm¿¶þ6Ûøûoãm¿¶ûmüm·ÈÛoãm¿¶þ+mˆÝ¿¾ûmüm·ÈÛoãmï¶þ6ÛøÛoãm¿·þ6ÞøÛoãm¾FÛ}¶þ6ÛøÛoãm¿¿¾6ÛøÛoão¹ÆÛmüo½ñï߯Ûs¶ïmüm·ñ¶Üão¶ïmüm·ñ¶ßÆÛmüm·ñ¶ÿÆÛmüm·ÙÝ…³‚Écþßb·r6ÔöFÛ}~ùmüm·ñ¶ßÆÛoüogñ·÷ÆÛmüm·ÈÛo±¶ßÆßßmüo·ñæßÆÛmüm·ñ¶ßÆûýÎ6ÛøÛúq¶Ýãm¿¶ï{Î6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶ûmò6󿆼û@Y…¼YŲÎi3’ÁM©éƒ7¾Ù#m¿¶þ<ÛøÛoãm¿¶þ6Ûøßïã?6þ6ÛøÛoãm¿¶þ<ÛøÛoãm¿¶þ6ÛøÛnñ¶ßÆÛ}¶ùmÎ6ÛøÛãm¹ÆÛmüm·ñ¶ßÆÛmüm·ñ¾ßÆómüm·ÈÛo±¶ßÆÛܼaQjf3µ-Y Ó Ù\2˜µcÍ‘¬Ûn6Ûn6Ûì7ÈþÏãm¾ÆÛ|¶þ7›øÛo±¶ßÆÛo|y·ñ¶ßÇÛßmüo7ñ¶ßÇÛíüm·8ÛnÈÛß±¶ß#m¿½þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ7ŸøûÏãm¿¶þ6Ûäm·ØÞuÙ T L;$Œ3kÏ#RÿøÛÏãm¿¶ùï|y·ñ¶ß#m¿æþ6Ûìm·ÈÛoãm¾ÆÛmüoïñ·ŸÆÛíüy·ñæßÇÛmüm·8Þo‘|âž1Ú¤,²›à43´(ôþþ6Ûìm¿ÈÛoãß¹ÆÞ÷¶þ6ÛøÞoãï?6þ>Ûìm·ñ¶ßÆÛmÔìþ7›øÛoãm¾FÛv6ÛøÛo‘¶÷Æßý‹ôð³â6·ÌÚ6Ûäm·Èóoãm¾Çów¶çmüm½ñ¶ßcí¿¶çmÞ6ß–6óäí_ö,íÀ%1o ÂÞÆÛmüm·ñ¼ý±ý¼‘ößÇÛs¶ïmüm·ñ¶ÝãmùÇžmüm·ñ¶Ýãm¹ÆÛ|¶þ6ÛøÛoãmï7ùyö6Ûøß{ãÏîC¥pó}…ze·ØÛoZsG QžÆÚ¯±¶÷#mùÆÞmüm¿ñ·Ÿ#Ï¿¶þ6Ûœm·ñ¿ßglXس–Áˆ·H·±D,ŽÕ‚Ï*L £ üJfÿà°Ç"÷0bt¹%€2ÿà³héžüŠöLÇÒÙ,`-¯ø,Ú7Ïí)r_Æ ›Ä¦{LT—f $-€·êáe—Pšø³±\,K—!d€¦¥†yU”]F=ü £íwR+Ò\v}!g°·ïœ,€´¸$ö%õþ,5ع´Œip0°† dÆd:°ÎÖà,À)…¨xÏjP,¤4X{Lv6ÖzW“ Áfòð²ÍYÎNÒÃXYÛ%‚Ã0T‹™Ì…cYm.BÉIøÈ¼Ååà)E€hÂXßûYå0³ŸT€¥'æN™øé·ÈÛoãm¿¶þ7›øûß“¾a󷀈·`$X ä#!i…wÏÊ0g˜[býÅ&†` Ë J1ëKMƒ,Õ’@´ojÒ?N¯r¨Ì€ZÀ²,¬#Fûuã(`$(b¼ LXZp-° SXÌgõ²li……‰‚U2cæL´-¸±©·ÒÅÌ"Ƀ0_ðHìA£“7´cµM|f|”`ÎTYµþ¹˜¨ø$ö³ WÞ…€m€T^d!™•ùQù[0dš³ €Q`›ÉïÙÕÀ3Ð òY¼À/ôÄô`Y¨Y­Ø%ðJ¡nÑ­_i<˜`[Í‹7´€n2,³²b4tÌ= ©Sb¯ ]3j¶õ¼þ6Û¼m·ñ¾ôãmÿ³˜½ÖB€7à$08óo“¾a³ÛÀb,vCdw¼þØ,˜ð àñ·Ýãm¹Û“d,› ‘ñ·«Ëf!˜þ2J üo¦#m½ ¿MSpb ™%¡oâ×iˆó{[à3h$0ô;+2ñ—Ø­âØ,ä9Ád©ÛÁbBË hYËÀ•…¬˜·hÛoï€U^¦zÇÞü÷¹x° ÀÀoÆÛ~NØ68d•€[`ºb~Å‹9l°µ‚WëoümG´µØ2Q“üd[…f)±]L/DŒY™1¬m÷ÈÞÏãm¿¶þ6ÛøÛ‘¶ßÎÙ‡Œ}¼ŒvF¿Ùüù˜xÇÛÀb&È$¼Œ~6Ûå°YHØC ‘ñ5c:4\ܘåÀ5`ˆ À7ãm¿¾aø‡àHä¬Û·ÈÛnÂØ±ƒaf¨ÆIX Ò|(ÄmïilmŒOA#¦efsýl« iQ„€+2 Âé•mü츳&,‰l¸µ‚VÖ·»l˜° ÀÈÛo±¶ÿÛ¦x° ø³?çlNŸ+· û?bÆÌY{"E¿"1$}ç´yï$ꬨÏ7ã9vQ“ÂÁh$ -¦ÂPÏ<ä¶ùÙÞ6ÛøÛoãm¿¼ïíÎvŸŒ: gp H2`h Ð øÛßçhøÆPÞä ˜ƒ¾äŽmîÐcÆ~|-Pi†~È|Xl" ¦ ü¼,…ZöÐoÂÒFXÄÎTÅ«X[¾Ðñ‰0 Z4 y*,˜Ìïês- `µp6 u3*6x ßšhÌ›c``·’—ùƒ|-ßAêBÓ Ë+ñbà*\…¿¬-°´ÇÚ¸e2tÉ9¤Ì{ oi‹0´bØ ä$Ì«oòf=}¤7ÌŒ@[|•jô¿´LNP-€¿–±À]r5)ÔìÇ…¥…£¶_ÆŠµþ>Ûø­WŒvÕö€…~ePJ0g‘ö߯Ûw¶þ<Ûìm·ñ¶ßÆÛ{ümVùmé}üt³qcm»ÆÛWx\fÛvÆÛ|˜nñ¶ßÆ«oHÛoã}½£[g•müo¿ØÕyåFÛU½#m¿¶ìVÞTn›äj¶ô¶þ7Mü}½•mö;müm·ñ¶ßÇJ½—müVÚXcµèÃ’ •S4hËÒ6Û²6Ûø÷û±¶ß#m¿¶þ6Ûøûnñ¶Üãm¾G›w½çmÎ6Û¼m·ñ¶ß#o¶þ6ÛøÛoãm¿¶ûmüm·ñ¼ß#m¾ÆÛmüm·ÈÛo±¶ßÆÛmò6Ûøßßãm¿¶ùmö6Ûäo?ñ¾ß#;ÃÈxÏ7ò%¢ÓZeÿŽömÞ6Ûøßo‘æßÆÛmüm·ñî߯Ûw¶þ6Ûøûnñ¶ßÆÛmÞ6Ûøûoãm¿~þ6ÛøÛo‘¶ßÆÛmüm·ñ¶ß#m¿¶þ6ÛøÛo‘¶ßÆÛmü{·ñüÿÆÞmüm½ÈÛûão¿·¾6Ûäoçñæßcù¿¶þ6ÛøÞÏãm¿>þ>ÛøÛoãíï¶þ6ßøÛoãßï>þ>ÛøÛ{ãÝ¿ìþ7Ûøóïãíï¾þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿>þ>÷øóoãm¿¶þ6Ûøóão?6þ6ÛøûÏãÙ¾FÛmö6ÛøÛoãm¿¼þ6ûøÛoãÍ¿÷¾<Ûäm·ñæßÇ›müm·ñ¶÷ÆÛÍüm·ÈûÏão?¾þ6óøÛïãm¿¶þ6ÛøÛoãm¿¶þ=ûøóïãï·¾6ÛøÛoãm»ÇŸß|7ñ¶ßÆÛÿ|yýñ¶ßÆÛmüm·ñ¶ßÇÞ}üm·ñ¶ßÆÛ|¶þ6ÛøÛoãm¿6þ>ÛøÛoãm¿¶ùmüm·ñ¶ßÆÞmümçñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶÷ÆÛ|¶þ6Ûìm·ñ¶ßÆÞmümçñ¶ßÆÛmüm·ñ¶÷Æómüy·ñ¶ßÇ›müm·ñ¶ßÆÛo|m÷ñ¶ßÇÞmü}ïñ¶ßÆÛ}¶ùmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßcm¿·¾7›øûÏãmï¾þ6ÛøÛoãm¿¶þ6ÞøÛoãm¿·¾6ÛøÛoãm¿½þ6ÛøÛoãy¿¶þ=ÞøÛïãm¿¶þ6ÞøÛoãm¿¶ûÍüm·dm·ñ¶Üãïìþ>óøÛ~ñ¶ßÆÛmüm·ñ·ŸÆÛmò6ÛøÛo±¶ßÆÛ|y·ñ¶ßÆÛmüm½ñ¶ßÆÛo|y·ñ¶ßÓ™PDVÛ€Á/E`@¸ ý=°S+íÀ`—‚™Xn¿KÌÊÀ€;p%`¦VÛ€Á/Òû2° Ü X)•và0Kô¶ÁL¬·‚V e`@¸ ö–Ø)•và0JÁL¬·‚^Rß2° Ü X)•và0Kô¶ÁL¬·‚V e`@¸ ý9°S+íÀ`•‚™Xn¿KlÊÀ€;p%`¦VÛ€Á/Óó2° Ü X)•và0KôöÁL¬·‚V e`@¸ ý-°S+íÀ`•‚™Xn¿KlÊÀ€;p%`¦VÛ€Á/ÒÛ2° Ü x)•và0KÚ[`¦VÛ€Á.2° Ü yKlÊÀ€;p%`¦VÛ€Á/im‚™Xn¬ÊÀ€;p%ú[à¦VÛ€Á+2° Ü ~—°)•và0JÁL¬·‚_¥¶ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á/2° Ü ~—˜)•và0JÁL¬·‚_§æ e`@¸ °S+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[À¦VÛ€Á+2° Ü ~–Ø)•và0JÁL¬·‚^RÛ2° Ü X)•và0KÚ[`¦VÛ€Á+2° Ü yKlÊÀ€;p%`¦VÛ€Á/Òó2° Ü X)•và0Kô¶ÁL¬·‚V e`@¸ ö–Ø)•và0JÁL¬·‚_¥¶ e`@¸ àS+íÀ`—ém‚™Xn¬ÊÀ€;p%ú[`¦VÛ€Á+2° Ü ~–Ø)•và0JÁL¬·‚_§6 e`@¸ °S+íÀ`—ém‚™Xn¸ÊÀ€;p%ú[`¦VÛ€Á/2° Ü ~–Ø)•và0KXn¿KlÊÀ€;p%`ˆ¬·‚_¥¼ŠÀ€;p%`ˆ¬·‚_§6ŠÃ€và0JÁXpÜ ~1#oãm¿¶ûmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·8Ûoãm¿¶þ6ÛøÛoãm¹ÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmû¶ZNüTÿÿÿÿÿÿÿÿÿÿÿá6ìÿðÇmº˜c¶Þ¡¶îÛnÀÆßs†;}Ô m½á¶æÛná¶úÛoÿÿøcm»?†:mÕá¶úí·T1¶ßÍÌ1·ßÿ†;må†;mÔöêþÛnÏÿ o÷0ÇŸwÿÿÿÿÿ vÛÔ1¿ß†<û¿q‡ü1¨Û©÷Aøc¶ÞŸü1öß?öõû‡wÿ÷CrxcoïÿÿáŽÛü o÷Ü,wß}ãtîÇv7c»Æð·WÝ¡ºÄ7öõÿ }·ðÇM¾C¶õöõ m½û;7 o'ßpéÝäìnÓ¶ðÎÛ•ÝÕ÷ßtÝ'+Ã>ßoöõ†;më tÛ× }·¨cí¿†6Ûþí·¨cí¿Ã½_tƒ¹½}÷ÜcvO¾é<žW§†tžÓ}÷WÝCmøcù¾~Ûoÿû»»æûÉ÷“¡¼žÞo=Ý÷Þ7“ﺻnÈ1¶ßÿxc¶Þ¾ûoPÆÛ†;mÉþò}ÊìOºNmÒ{ztœæìowé÷Ý·W#ráLÞ¡ŽßÚÿ†;mÈÛoÿÜ+ðƳoMëÞÃͽ/ïøcm¿ y·ÿðǹ?†5[z†6Ûÿ k6õÿÿ j¶ôáŽßÚøcí½pÇm¹ðÆ«o_ k6õÿÿÿá¶ÿ m·á÷¿†5zðÆÛðƳo_ÿÿü1¶ßá¶ü1¾ßðÆÛÃmøcU·®ÖmêÛoÃmÿ»ÿí½?øcm¿ÃmÛÿ j¶õ†5›záfްƳo]îíÃíº¾ÕmèÛoÿ†5ÚþÛoŸÃ­¸¡¶îÛoá¶ÿ m·áfÞÚü1¬ÛÒÛoáVÞ¡¶øÛoü1·ŸðÇÛz†;mü1¶Üöøà¨œcQ·' m·ÿ†6Ûÿÿî$âPÆ£oNÛoü1¶ÜðÇm¹·_í¸¡¶ïáfÞ¿ÿ¾é\(\1¶ßøcm¿îwÝ' „‰Ân' ¸Û…‰Âî'pq9‰Ä Ø®ÄèN„èN“œâ'¯ºO¾èN8R¸RpeöæÛoÃ{ñÎû»›vžžŸqÝtžž®2pû˜¯w=ÌÝ·Wwï'ß~öýÈÜ^Ûná÷§}Ó»¾ûï¾ûï¿yºWww‰ÕíÕäë¹n¯¾ýäû‘;/ m·á·øï·7w»¾ûï'ß}÷îïW§›Ûµz¹ é:÷ßt'ßáŽÛ~ÛoÃyÞðÏ òx^O¼Ÿy>ûÉÚtO+ž'Ý'§Ett§Dòy>û‚›«øc¶Þ¸c¶ß†6ÛðÆ£ÞNÔmÅáVßmð1¶ß†>ÛðÆÛ~Ûoÿü1ªÛ× j¶õû… äòøcm¿ m·ü1¨Ûç†6Ûä1ªÛÔ1æß†6ÛøcU·¯ k6õ m·á¶þÖmêÛoÃmð1¶ß†6Ûÿ÷IðÇm¾6Û²í·W†;mÿ†5z†6Ûü1¶ß†5[záVÞ¡VÞ¶ÿÿ j¶ôí½8cQ·¦Ôyè÷o¿ÃmøcQ½Ïÿ j¶ô m·ÿÿþûÏÃÍð1ÛoOáŽÛ| wÞç j6õ m·ÿí½!VÞ¶ü1¶ßÿÿ†7þ¸cÏïöêü1¶ß†6Ûç†5zýÿÿÿðÇM¿Ã¶õ wÛ×ðÆ£o_ j6ôÿÿöê6Ûÿÿ w›Ô1ÛoPÆûßþÔmÔ m·áFÜOÿáŽßÕmøcm¿ÿÿÿÿÿÿÿÿÿÿÿÿß¶ZÌ`ÿÿÿÿÿÿÿÿÿÿÿÿÿ tÛÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþñþÔmé÷Ÿÿÿÿî;¸ÿû•Èn_ÿÿûƒ‡p³¸Y»N®féÜÝãyÞnG¾óqˆî#p§ÿðÇM½u|1¨ÛÕæû«û¶ì·CsN›¦ööûÓ§tÞøc¦Þ¿ÿý_~ûﺻ½¼½íéäò}÷§ï¿ÿÿï¾ûï½>æÞnÝá{ï7"y=¾û¶ûÿÃmëÃ6äÿ}äûï'·WFæOOwiÖöôûÎò}Í>ÿÿÿÞO¿ÜŸÿzÿÿÿÿÿÿÿÃmëÿÿÿÿÿá¶ÿøcQ·ÿ÷¯ÿÿ†6Ûÿá¶ÿÿÿÿÿÃmÿÿÿ÷bx¿ÿÿÿÿûÛÿÿü1öÞ¡Ž›sîp‘8_ÿÿÿq ÃaFÞŸá¶ÿ†;mÍÙ:ÿÿÿîÉÊáW ¿Ãmó¸MÚy8Xg páœ8œ=Æ'‰Æ'‰ØgiÆOâv'BºNDñ:ä÷“Ó… ÂàÛƒ Á¿}íÝÝØwÞžž§mÒ{»Êð§‰îêèåt+‰ß}÷îw"}ÓwþîûîWß~û¦û÷ßî„è2ÛŸ}ûŠýÝ÷ß¾û•ÿ÷“É÷Þäò}äîûÊûûÂÜïßy]^]‰÷ßÞO¿Ã6ÿ¸/s ûï ûï¾ûÉ÷ß}åxgÞO¾èNWßtì3¤ôò¸P3‚[ï᎛zÿ†5qÿÿÿp §“—ÿÿÿÿÿw†:mëþÔmêÛoÿÿÿðÆ£oOÿÿÿÿÿÿÿáFÞ¿ÿÿÿ᎛zÿü1¨Û×ÿÿÿÿÿáFÞ¾Ôméÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶[I<\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ ÿûÇÿÿÿû‡¹Ïÿº¹ Åÿÿÿ¸îÝØÞ§cs;³q^o;ÍÐÜFó{tnÄ;ˆn ÿýÆn6îí»7IÓwwwvŸ}÷Ý_}÷ßy¹7·_ÿü1ÛoPÇÛ~ûîî‰é÷›ï¾îí;÷3y>ûï¹_}ßþûoÿ÷;ï¾ó{y>ûï½÷B}÷“ï7†y>ëÿÿîwßuz}÷ß}÷WíÐÞ'ï¾ûÚ{ÿÿ÷ßß}ûÞó¾ýíßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÛÿÿÿÿÿý×ÿÿÿÿÿy;_ÿÿû„§ ÿÿÿî%ÿþû¿ÿÿþá•“… ÿ<bp±8]ÂÉÂÕÉÆ'8ÄôìNÄñ;+¡:'Dñ9 ÈO¤â¤ïvŸp¤áDá­a›ƒ‹ýÝû»»¡;7ÞÝÞß»nÕÚwqÝ^[“ºN÷Ý÷-÷ܯ/÷ß¾û«»ï¾óu¾ýÛ¾êõu~û§uw}Ëy;o¿þðÎ{Ã<žÉ÷Þžò~ìO'mÝ÷BtOW$í<3¡;¾þèž_÷“É÷ßw}ÈŸ}ÝËy?{}÷§§M÷I÷ßxžŸ}ýÊåÿÿí½CmÏÿÿ÷ ò vÛçÿÿþÕmëÿýÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶[ÆXXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþñÿÿÿÿs·ÿ¹\CqÿÿáFÞ® ‡¼n½½ºã¸ïæäw›Û°îFä;ˆÿÿp›ÜbtŸ}Ú}÷›Æö÷}Óu}éÓrNWWWÿÿáFÞ·;««ï¾ûµî®CtŸ}÷IÕ÷ß}Ëÿÿîïoo¾ûî†í^=Ú}÷ßzy>ûï'ÿÿþîé;O'“¤û»Û«·}÷ß}÷wßr¾ÿÿÿÿr}ï~ÿ¿ j~õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ NÿÿÿÜ(œÿÿvN¿ÿ÷‹ïèŸp¡8Wÿï»'4áiÂS‡ŒW8ÉÌœÉÆ'dò¼¯'Ý é9'‰Â®$é9Ý^ƒ Âc·ôŽ œœÿwx®„öôíÝ_}ûïîï'·+¤öñ>é?}ÝÝ÷ޞ݉×ý÷ï¾û÷ß}ÿÞ'+ï¾ý÷ßtßtß¾û‘?þðÏßxgÞO'“ï'–ìU¡O{}äòy>ý©O'+»ïN÷Ú“ßÿ¼3Â/'ß}÷ßy?v'-÷ß}äûï¹_}÷“Åp ­äÿÿÿÿÿþàÁž_ÿÿÿÿý÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ¶\C|Tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷Oÿÿÿÿÿÿÿÿÿwtîþé}Êêê麺ÿÿww}÷ï_ýþûî_ÿÿ½¾ýÛÞ÷]ÒzuÿÿïOOW§i×tž·•åzuzw}ÿÿÿÿ÷¯z÷§?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvWBÿÿÿÿÿÞ'§¿ÿÿÿÿþûÿÿÿÿÿûÄûËÿÿü1ßznÓµÿÿÿº_ÿï¼ÿ÷‹x¿ï[¢º[ż¿ÝßzvO'iêí=;OO»OO»W§“ÕОOO[®‰ÈW"¹rÿ÷mæóÝžò»7ýëº{§u j¶âº¿q é÷ÿÜî÷w“û»¿ûÓÉâÝ}Öíº>ÿýéêñ>îí9§§§§Šñëuºÿá¶ÿáŽÛz†>Ûü1¨ÛÕ÷½å÷WßtŸ}Õ÷î°Æ£oOÿÿx[«ïotï7K{º¾ýêí:OopÆÛ vÛÓÿÿÞû«²Ý^û®ëÝÿ vÛ“ÿÿîœ1¬ÛÓ½þí·¯ÿü1¬ÛÔ1¶ßøcY·§ÿÿÿÿÃͽ|1¬ÛÓ÷ÿÿÿí½xcm¿øcY·¯îŸÿÿðÆ£nNÛoøcm¿ k6õÃͽCmøcm¿÷[ÏøcY·§ÿÿøcY·¬1¬Û×ýÕÓ†5Ûu<1¬ÛÐ1¶ßÿÿþÖmÅ m·pÆÛ m·ÿÿ†5›zCmÿÿøc¶Ü]׆6ÛÿÃͽÿðÆ«oOþÛo·_Ã͸¡¶ïÿÿÿÿ÷[«ÍßÝÝî·_tÿºü1Ûnºn¿uÝ+׺]ÓÿÿÿºÝ]}×î»®êêët?ÿî¡FÜ—Oÿÿü1ªæõÿÿÿÿÞ¿ÿÿøcU·†5›z†6ÛðÆÛ~ÛoÃmøcm¾øcY·§ÿÿý|1¶ßÃͽCmøcm¾Cͽ8cY· cm¿ m·ðƳo@ÆÛ~ÛoÃmøcm¿ÿÿü1ªÛÔ1¶ßá¶ü1¬Û× k6ô k6ô m·ÿøcY·§áVÞŸÿÿðƳo@ÆÛÿÿÿÿýCmÿðƳoHcY· cm¿ m·ÿÿÿÿáFÞ°Æ«o_ÿÿÿÿÿ†5[zøcU·§ÿÿÿÿÿ j6ê<ÛðÆ£n'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶PŒõÜÕ¡fÞ—?øc¶Þ¿ÿðƳoPÆÛáfÞ¿ÿÿÿÿ k6õðƳo_ºÿÿÿ j¶õá¶ÿáfÞ¾éÿÿÿù8cm¿á¶ü1¬Û× k6õ m·á¶ÿÿðƳoOÿÿðƳoXcY·¯î®Ÿ k¶êøcY· cm¿ÿÿü1¬ÛŠÛná¶þÛoÿÝ?†5›zCmÿÿøc¶ÜŸ†6ÛÿÃͽÿrn¸cU·§ÿ m·÷I×áfÜPÆÛwïÿ÷_ÿß÷W[«¦ëýËY_uî½ÒrÝ-×áŽÛsÝ]n•÷ï¾þéºWI×uººW§IÕÖÿºAŽßr¾ûÕÕÿuu¿¾êåzº¿º7û×ÿïpƧzoýÓ}êêë}÷k{{u¾êêët½Á¿ÿ÷'ýÍ~õï\1«ŸÕÕÌÿí¸¼1¬Ûàcm¾6ÛðÆÛ~ÛoÃmÿÿ†5›zÿuut/þÔmóÃmòÖmêÛoÃmü1¬Û׆5›z†6ÛðÆÛ k6õ m·á¶øÛoÃmÿÿÿáVÞ¡¶ÿ m·áfÞ¸cY·¨cY· cm¿ÿÃͽ? j¶ôÿÿÿ†5›z6ÛÿÿÿÿþÔmêûoÿ†5›zCͽmøcm¿ÿÿÿÿ j6õ†5[zÿÿÿÿÿü1ªÛ×í½?ÿÿÿÿøcQ·P1æß†5q?ÿÿÿÿÿÿÿÿÿÿÿÿÿý³¶ X|aa·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·òÁN¬ƒ³‚F u`Dž »ÈÁN¬ƒ³ÀÁ#:°"ÏòN u`Dž )Õvx$oä`§VAÙà`‘‚Xg‚NþF tàDž 8)Óvx$äÀ§NAÙà`“‚8g‚Mä‘‚­8g‚F ´àDž ¼ŒiÀˆ;< 0U« ìð0HßÈÁVœƒ³ÀÁ#Zp"ÏüœiÀˆ;< 0U§ ìð0HßÈÁVœƒ³ÀÁ#Zp"ÏüŒiÀˆ;< 0U§ ìð0HÿÈÁVœƒ³ÀÁ#Zp"ÏÎF ´àDž *Óvx$nò0U§ ìð0HÁVœƒ³ÀÁ#'Zp"ÏŒiÀˆ;< }ò0U§ ìð0HÁVœƒ³ÀÁ#rHÁVœƒ³ÀÁ#Zp"ÏÞF ´àDž *Óvx$oä`«NAÙà`‘‚­8g‚FþF ´àDž *Óvx$oä`«NAÙà`‘‚­8g‚FþF ´àDž *Óvx$oä`«NAÙà`‘‚­8g‚FþF ´àDž *Óvx$oä`«NAÙà`‘‚­8g‚Fç#Zp"ÏŒiÀˆ;< oy*Óvx$`«NAÙà`“?‘‚­8g‚L ´àDž ù8*Óvx$`«NAÙà`‘¿“­8g‚F ´àDž ù*Óvx$`«NAÙà`‘¹ÈÁVœƒ³ÀÁ#Zp"ÏöF ´àDž *Óvx$nò0U§ ìð0HÁVœƒ³ÀÁ&#Zp"ÏŒiÀˆ;< 7ò`U§ ìÀ`‘‚­8füŒjÀˆ;0$`«NAÙ€Á#ß#:°"Ì )Óv`0HßÈÁNœƒ³‚F u`D˜ 79)Õv`0HÁN¬ƒ³‚G¯#:°"Ì 0)Õv`0HßÈÁN¬ƒ³‚F u`D˜ =ò0S« ìÀ`“XfüŒêÀˆ;0$`§VAÙ€Á&}ò>ßøßãmï¾ùoümïñö߯Ûsçïmü}·8Ûo‘¶ßc¿öùmüm·ñ¶ßÆßmò6ÛøÛ{±¶Üãm»ÆÛw¶þ>Ûø÷ïãÏ¿¶þ6ó¼m·8Ûoãùÿ¶þ6ÛøßÏãϹÆÛ×öþ7Ÿœoçñ¼ýão?¶ûmümýÈ÷oãm¿¶ïmÎ6ûøÛoãm¿¶ç}ò6Ûøûo‘¶ßÆÛoüm·ñ¾ß#m¿¶å¶ïoÎ>Û¼{÷ñ¶ß#ϹÆÛw¶û{ümçñöß#yûcmï¶ûmüy÷ÈÛÏãm¿öçv7Ÿøþ~ñ½¿ÆÛ}üo÷ñ¾ßÆÛoÎ6ßøÛoãm»ÆÛs¾ä¶ûmÛmümý$m¿xþ~qö߯ÛrÆß|¶ïmÞ6Ûœm·ñ¶ßÆÛßv6þ²6Ûì{÷ñ½ßÆÛo|mýÈÛ~XÛo‘¶÷ÆÛwþû}ò6ÛøÛ{ãùûÆÛß}ümçñýœãm¿÷¾<ßøÛão?¶þ6Ûœo÷ñ¶ßÆÛ|÷§}Ûíüm·8Ûo±¶ÿÆÛmüm·8Ûnñ¶ßÆÛmüo·ñ¶ü‘îÝãϹ#mëcm¿¶çÿv=ûøóoãm¿öþ7ŸøÛo‘·Ÿcß¿·þ6Þœm¿ñ·ŸÆß}üm·ñ¶ÿÆÛÝüm·ØÛoã¾FÛmüm¿ØÛoãm¹ÆÛmö/ÛûK<Ö‹*…X³‘ã5ñö߯ÛmÎ6ÛøÛoãm¹cm¾FÛ}¶ùmö|ž`[ʦ1Ë( Á2€9™cUŒ7cmþFÞ}üm·ØÛÏãm¹#yÿ¼þ6Ûø÷ï‘¶ÿco?çþ6óøÛoãmÿ¶þ7ÛøÛo±¶ßÇöÿmüm¿ñý¿cí¿¶þ#òWÇ¿}ŠÞ³çi‹)‹>ÐT X$5@Õ‚Gjß—€&‚ψ݅Ÿ‘¶ßÒÜ…˜|mßø½äÂψóJ|7ñ[ÒXfñj Ô±·ßÖð3“à &vyg´Ó‹;KåÁ,|Wš@+â}zbþ6Þå-  ymÀ³hÛ­ñ¶ßcyþGÛßÏümçñ¶ßÇómüm·ñ¶ßÇÛ{ö6ÛøÛoã¾FÛ|¶þ6Þøûïã}¿Ÿ'ã 5@“Ûâ q[Aa/AðgügóÿeÚðZ*€BÎ& _cE~ " þc“5@–à[ÕBu¬J ¤>0Ž‹Uqm€@Ë턳BÑ3~ ~!–;oÅûbäÞ J}P@Å> (äZ´+—óáZac@¸>ÓVÐI°HÚ 7®Ð÷‚Ôü`R¨YÛø Æ A€6cîƒãþ,V 5ªÿÁeŒS…ÃpK‹b´ÂÁ~`Xi¥aa+ ~|,Óûaf×cƒtæ ƒàÿÞ» yf‘'šÀ²UJ"Ë%:œX4@îsòŠ%Â`IåbÀ3Na}ãvå¶ùmüo·ÈÞo±üßcm¿·þ6óìm·ñ¶ßÆûmüm·ñ÷¿ÆÛmü}·ñ¶ßÆÛÍüÿª–ÕO-ø$ïÀÁŸØÛßåàÎl¸_Þ~0ÁžÌ}µ@¨µ¦Šl'0å°¼È 3ðIWì^¨/IÕ@“^”™y™`g¿¾ ïðH`Îß•«œÕ‚Kûf1p$3¸>ó`þ =°HŸ´UIQb`΀Jù§@Y€g«Ú'¢e_ Y€gE²M‚D|E߄ۛÎtb\ &h¸~q!àgú#þùe•K5@’Å“—ƒ=°g¿äÀ’Ú`I¼íƒ=°gö6ÛøÛoãí¾Æömümçñ¶ßÆÛÍüm·ñößÇÞÿoÎ7óøÛnÈÛoã}¿¶ûmüoÈßoç}P$¾Ð$ýïC}4 §1ÈΘý«—KI1Ž _31Eæo¦ŽØ$*\d§Á#’ÿ‚NI¼&;} Iþ‚ê…‘€‘ò°gå‹Ì×Ûwø$(\fA+åÊÁ' œY¾ñ†\ xÂJ°Ym°Hÿ•èfg7.– L¸_Ë@Ïxÿçt ìÁËz X$½†¬g;eÀ’ú`Iímƒ=‚T˜ú[€²‚Îßh"Ú›k@GÕ€'¢¬Â^¶ÓM……Ó >¿ÁžÁ)dægýüm·ñæßÆÛíüo?ñ¶÷Æómò?³øÛûãí¿æþ6ÛøÛ±¶÷#ï~ÆÛoü}·ñ¶ßÃjà$¿ömP´$=ð°RÐýŠ> `Ra©1Û!ïŠ6-[Bñ’°¿Œ·ªLõŸÙÔÂÑ&“¸dfÐýŠ>ÐZdsæªLrÉ{ÁeÿBÅ´/«½¡Wõ&YŸÊªÐ±F¾˜4b¿ø-6fYÓhø’…&m€OÊ6N-±†è[þÚ`I`”¢£&‡ #å`Ïj«Ðµüíƒ;¬›ág-ü°I5öÀE¶ =†Ök@K_íVŒ‹¿à´jЋ°ùbP`a°¹üÄ« þ %ŒücšvÅ@’$иkà $ þèPH~`ïÀ&IŒ¶™ù‘ŸÛ Tìm·ñï߯Ûmò<þìm·ñ¶ßÆûÍü}·ñ¾ßÆÛýüm·ñ¼Ü‘¶ý‘¶ßÆÛý¶þ6ÛøÛoãmÿ†`w‚֧Ȇ\ƒ€$ÛÖÚ¬ßÇÛÆÁk¯‘ ä™ Pcê·¬}÷ñóýüƒà˜1õ_É@ÇÕ _œ}½ÈfG /«ØÔmò>ºì(j*þ6óøcè j|’Ô [øéLù i/©90 °µ¿·¹müm·ÈÛïão?¶þ6ÛøÛoãm¿÷¾<ÛøÛnq¶ÿÇ»müm÷ñ·œ±¶Ý‘·ßÆÛmö6ßøÛo‘¶ßÆÛ{üm·ñ¶ßÆÛmò6Ûìm·ñ¶ßÆÛmö6ÛøÛoãm¾ÆÛÍüm·ÈÛo±¶ßÆÛÏü}ïñ·¿ÆÞ}¶þ6Ûäyýñ¶ßÆÛmüm¿ØÛÏãm»ÆÛmÎ6Ûøóï±¶ß#m¹Ç¿w¶þ6Ûäm÷ñ¶ßÆÛmü}·ñ¶ßÆÛoügØÛoãm¿¶þ/Ù1ñTÏøÛïão?¶ùmö6ßøûÏãy¾FÛ}¶þ7ŸøÞ{‘¶÷ÆÛmüm·ñ¶ß#m¾ÆÛÿo|m·ñ¶ßÆÛs¾þ6ÛøÛoãß¹#m»ÆÛw¶þ6ÛøÛnq·¿ÆÛw¶þ6ÛøÛoãm¿¶þ7›øÛãm¿·þ6ÞínÂØ 6˜œoÔö—“ >˜ä(ì¶ûmüm·ñýŸÆÛ}¶ùmö7³øÛû±¶ßÆÛo|m·ÈÛãmï¶þ6ÛøÛoãm¿¶þ6ÛøÛoãí¿~ïmüm·,m·xÛoãm»ÇÞó¶þ6ÛøÛoãm¿¶þ6ÛøÛoãí¿¶þ6ÛøÞ츲…¼X µZs)i 'ø[Z`Å‘·ó¬m·ÈÛo±¶ßÆÛ}¶þ6ÛøÛo‘¿ßÆþ}~þ<Ûø÷oã;ÆÛoò6óøÛo±¶ß#m¾ÆÛw¶þ6Ûøóoã}µ±¶Ýãm¹ÆÛvFÛ|¶ûmüm·ÈÛnq¶Ýãm¿öùmüm·ñ¶ßcm¿æþ/ÏìÛ#™€J¢BÃe#e°Êã+ù#}ï¾þ<Ûäo7ØþÏãm¾FÛ}¶þ7›øûo‘¶ßÆÛ}·¾6Ûäm·ñ¶÷cm¿¶þ6Ûøßï‘¶ßÆÛs¶ïÙüm·ñ¶Üãm»ÆÛmö7ÛøÛoãm¿¶ïmüm·ñ¼ÿcû?¶ùmüm·ñ¾÷Æÿ¯È[aj­ä°µfœjSoÆþÿïv6Ûø÷{ãÍ¿¶ûmüo7ñ¶ßÇ»íö6Ûäm·ØÛoãm¿¶þ6ÛøÛoãm¿¶þ6Û^6ÛøÛnñ¾ôãmûÜ…ˆƒLX- »-o‚ÅHÂq¶ÝXÛo‘¼ÿcí¿¶çmÞ6Ûœm·xÞoãï>Ç›mò6ÛøÛãÝîGÛÿý´¼ïÍò6Ûìm·ñ·÷ÆÛmö6ÛÖ+n vÑ<¦˜‰`-ìtÖܶùmüo·Èóo±¼Ý±¶Ü‘¶ßÆÛmüm·ñ¶ßÆÛoÎ6óøÛoçU`|>\ öÁží?¹v7Ÿ²?Ÿœ}·ñ¶Üãm¿÷¾7›øÛ~ñ÷œãmÿ¶þ6óøßîñ¼Ü‘¾õão?çûmò6Þìo·ñæ÷Äo•ñ¶ßÆíÿ„2v£øÛoëi…‰øÁ?àÌŽù÷È÷sñ¶ÿ#yÅ{`³±·«ãÏï¶þ6ÛøÛnñ¶ßÆÛÿ|y÷$í€G ­+|¤¬Â1­0±0ajà/kÀÀ(Æø,-áh·þ¢(Æzbâ×(ƒŒ2/¯–·ÁbªHÏãù½nÄA'†EÍFò«¸*|Nò¼†ɘ"NY߆%Y†Ö˜X˜X Z¸[K¸<¾ø,,дYÿ)1½k& KÊÓ2Zababál`¶­½ 5¡i6Å‘ãSú×’ ‹3¬Ò`h-¿¸ +BäðZ,ñYŒÈ†yæð,3|W r*ŒÕ´õ °ØXKøz7©0² l-ÒÓÀ³h]dVÐ ùNi‹&¬X{2|Ž ñ, 0 9ü `$@ï²ü.ÅêŒ ÙŠTfÕ™¯eBË véE'ž iV…¿{Z ™! Å¿¯x“â~À·ßŒÛ4|Áã/âߨûû‘¶ß#m¿¿¾6ÛøÞoã}¿~þvÁœèß4ZÚe@ ¯Ž¿vPo$MⳕGe@Í@þ“¨ jtÌÊÀ%¦.ñ¾ßν€Ci#²Èî.sÙ€l90½°H¿™UX$)5w³Fð$3Ð$vRÀ0PÇÖû.̪’M‚BŠ&~ EY3X˥ȰZp-ïâ×Ì,úÖ €³&1”°Œ¤^† úê%õ@“±›Ú |Íü‰C;F£oçPÀ:ŽÊXö·ÙéS ˜û¦#[h:°IÚ7ÛûP,pdà‘$jöç0é¥ßµI„˜8¨ÉFñIŒÈ‡™ðšu&bŒµw߯ûÜ6þ6ÛøßÎñ·ßÆûËÆÛ÷¶þvÁœø|¬[Ÿdm·vÕGj"ÂV/Nóíƒ9ð¹™X¶.ñ·¼¤í¦†À#ÌË€%à ;àØ^VœV ±¶Ü“öÐ$6¨>V-€Kø÷ïïSø1¦Ø1åf[3¾¼ŽÄ• üm,…œc¦TÔ¢‚ޘˠ´É+—€%ôÄÿ*–ÕO-ü‰™‡ “ØÛoçl%jÁ!´à‘úb|Ì~cí´ DÕ‚Oh°Iìm·{`À'€F¾ÇÞü¾õ Éâ³iP·ZŠ«0h«xž )R©–f¹mò7Þøóoãm¿¶çmÞ6ß¼m·xÛnYÞõ` É«‰3Èû·zÞT †% HLZ*Ìc6Îè:íhY­¦¬1™R¤Á?…ÐÚoX,ÒÓñ„š„Á!uBݪÀѹ3¬í€WL¤¶¬˜ø$%óµ¶Ìf!/ŸDåÀÒ¹Ú6þûÀ¾ D’£ ‘ò³=˜1öX“*…¥> v5*²ú,°³.‰1+4-«W–‹`&Lòw€+¢}ï‚FíЈ·XÛ2þ· T<¼¬$Îù”¾c†'¼at’^ð$HÆnˆ…üˆô™«ßˆlhÏ-RcYdÍ™Ö>íü6oÆ}ëbŸj“E¦*•™¦B÷øÛoHÛoãm¿¶ïmüo·ñ¾Ýãû?6þ7ÛøÛoHÛoãÍ»ÆÛï|mÿÈÛÏãm½#í¿·¾6þÒ7Ûìm÷R>ÛøÛoãm¿Æqã=²€Ç¤$ùíÞ™ê>Fûmüy¿ñ·ŸÆÛÙü}·ñ¶ßÆÛw¶çor>û¼mï8ÛnHÛnñ¶ßÆÛ{üm·ñ¶ßÆÛ|¶þ6ÛøÛo±¶ß#{?¶ùmüm·ñ¶ßcm¾G›müm·ñ¶ßÆþÿmüm·ñæßÆÛmüm·ñå[ägÛ|¶õæþ6Û¶>ÛøÛoãyÿ¼ï}üm·ñî÷Æßw¶þ<Ûä}·xÛoãm¿¶þ6Ûøûoãm¾G¿}¶þ6Ûìm·ñ¶ß#m¿¶þ6ÛøÛoãm¿¶ùmüm·ñ¶ßÆÛmü?ñ·ŸÆÛmüm·ñ¶ßǟݶþ<Ûäm·ñ¶ÿÆÛßor6Ûìm·ñ¶ßÆóÿmü}½ñ¶ÿÆÛmü{½ñ·ßÆÛo|{·ñ½¿Æû}>þ>ÞøÛïãm¿¶ûmüm·ÈÛoãm¿¶þ6ÛøÛoãm¿¶þ<ûøûßãÍÿ¶þ6ÞøÛoãm¿¼þ<ûøóÏãm¿·»Íüm·ñ¶ßcm¾FÛ}¶þ<ÛøûoãÍ¿¶ûmò6ÛøÛoãÝï¾þ6ÛøÛ{ãí¿çùmö>ßøÛoãmï¾ùmüm·ñ¶ßÆÛmüm·ñ¶ßÇ¿}ü}ïñ¶ßÆÛßmüm·xÛ{ãoïçþ6óøÛoãmï¾ùmüm½ñ¶ßcm¾ÆÞmüm·ñ¶ßÆÛo|m¿ñ¶ßÆÛmüy·ñ÷ŸÆßmüm½ØÛoãm¾ÆÛmümçñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛßo|m·ñ¶ßÆÛmüo½ñ¼ßÆÛyüm·Èóo±¶÷Ç›müm½ñö߯Þ}ümçñ¶ÿÆÛmò6ÛøÛoãm¿¼þ<ÛøÛÏão¿¶ùmö6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÞøÛoã}¿öþ<ÛøÛoãm¿¶ûyò6ÛøÛo±¶÷ÆÛoN6ÛøÛÏãm¿îþ>÷øÞo±¾÷#ßï¾þ6ÛøÛoãm¿w¾6Ûìm·ñ¶ßÇ›w¶þ6Û–?³øþÏ‘÷ŸÆÛ÷¶þ6ÛøÛoãm¿¼þ6ÛøÛoãm¿¶ùmö6ÛøÛ{ãÍ¿¶þ6ÛøÞoãm¾ÆÛÏü}çñ¶ßc;Ó™PS+íð0JÁTœ·ÀÁ/ÒÛ2° ߬IÀ€;| ý=ðU'íð0JÁTœ·ÀÁ/Ó»Rp ߬IÀ€;| ý/0U'íð0JÁTœ·ÀÁ/)‚©8o‚V ¤à@¾ ~–Ø*“vø%àªNÛà`—´æÁTœ·ÀÁ+Rp ß¼§6 ¤à@¾ X*“vø%ú[`ªNÛà`•‚©8o‚_¥¶ ¤à@¾ X*“vø%ú{`ªNÛà`•‚©8o‚_¥¶ ¤à@¾ X*“vø%ú[`ªNÛà`•‚©8o‚_¥¶ ¤à@¾ X*“vø%ú[àªNÛà`—©8o‚_¥¶ ¤à@¾ X*“vø%ú[`ªNÛà`•‚©8o‚_¥¾ ¤à@¾ X*“vø%ú[ÀªNÛà`•‚©8o‚_¥¶ ¤à@¾ X*“vø%ú[`ªNÛà`•‚©8o‚_¥¶ ¤à@¾ x*“vø%ú^`ªNÛà`•‚©8o‚_§æ ¤à@¾ p*“vø%ú[àªNÛà`•‚©8o‚_¥¼ ¤à@¾ X*“vø%ú[`ªNÛà`•‚©8o‚_¥¶ ¤à@¾ X*“vø%ú[`ªNÛà`•‚©8o‚_¥¶ ¤à@¾ X*“vø%ú^`ªNÛà`•‚©8o‚^ÒÛRp ߬IÀ€;| ý-°U'íð0JÁTœ·ÀÁ/ÒÛRp ߸IÀ€;| ý/0U'íð0JÁTœ·ÀÁ/ÓÛRp ߬IÀ€;| òœØ*“vø%ÀªNÛà`—´¶ÁTœ·ÀÁ+Rp ß¿KlIÀ€;| °U'íð0KôîÁTœ·ÀÁ+Rp ß¿KÌIÀ€;| °U'íð0Kô¶ÁTœ·ÀÁ+2p ß¿NxÉÀ€;| °S'íð0KôýÁLœ·ÀÁ.2p Ü ~1oãm¿¶þ6ÛøÛo±¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·8Ûoãm¿¶þ6ÛøÛoãm¹ÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmû¶Q†|H†0ºÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ÿÿÿÿÿÿÿøc¶Þ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÔmëû¥ÿÞ'Kü1Ûo_ÿÿ»WKt¯N•Òz¿½]'JÔmëþûoÿûÕå½=:7“£~êû«³tžŸuvžnņ5zÿ m·ÿáVÞ¿Ý-û­Ø3´ëº>ëÿ†>ÛçÿÝ^wOtŸzº;«×vÝ'JÕmë j6õÿ vÛŸýÒw}ÕÛtOºNfí:½]w·IÚrO¾ÿþé·ÿí¾w§Ý–æ-ÝÖõ¼¯OWIÍÿÿ k6õ m·þ×më†5ÛzÃí½Cmøcm¿ m·øc]·®ÖmëáVÞ¿ðÇm¹ÿ†5›zøc]·¯ k¶øÛoÝ,1®ÛÔ1¶ßÿá¶ÿÿðÆ«oœ1¶ßü1®Û×Ý»µÿÿ᎛sùÿ m·ü1®ÛÔ1¶ß†6ÛðÆ»oPÆÛºº_áfÞ¿þÛnáŽÛ m·ðƳn,1®Û×ávÞ»»· k¶õ m·þÛoáfÞ¡¶ÿÿ vÛŸøcY· cm»mÞÛoÿ½~×mêÛoðƳo_ü1ÓoPÇmµÃmÿt.ÛoÃmÏávß?Ãí½pÆÛ}ï\1ªÛ×ðÆÛ} m·øcQ·?áfÜŸÿ†6ÛÿÝ«×øcm¿þén–é^ž'IÚv+Ó¤éoNÄé]'ÝÉÙ:N…tž¡ŽÛzáŽÛsÿýå¹åûÖïu k6âîfíÝÛoÃ6õ†6Û¿ÿzávÜ[®åv'bþï÷Bso.é·¯ï~ôîûßï]ÒvÞÞ;¤öé½^°Æ«oWöçî“ÕÚv»ÉÚt«‰:W«¢º¡:'KtW•å m·÷öõ†:mó†5sþÖmêÛoÿÃí½Cmøcm¿øcY·§û×ÿü1¶ßÃͽCmøcm¿†5›zðÆÛ~ÛoÃmü1®ÛÔ1¶ß†6ÛàcÍ¿ m·ÿ†5[zøcQ·WöÿáVÞ¡¶ÿ m·áfÞ¸cY·¨cY·¨cm¿ÿÃͽmü1¬ÛÓ†5[zC­½ÿ†5[zÿ k6õ m·ÿÿÿÿøcU·¬1ªÛ×ðÆÛ k6õ m·ÀÆÛ~Ûoÿÿÿöÿøcm¿ÿÿÿÿÿþÕmëáVÞ¿ÿÿÿÿü1ªÛªÛoí¸¿ÿÿÿÿÿÿÿÿÃ]møcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß¿¶R˜PÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºW¯ÿÿþ÷îîû¥÷§Né]?ÿÿÿz»î»Óßu»ÿÿÿûÕëº_î—ÿÿû½Úº+Õë½n•ÝÕÍ;ÿÿÿzïN—ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†5›zÿÿÿÿÿÿÿÿýßÿÿÿÿÿÿÿÿÿÿÿ½]ÿ½]/zÝ}Òþòÿÿÿt·®ëºÿÿÿý×÷Ouºî·_ÿûÖôìOOO[¥z{½]+»¥zÝ+¥÷Kÿz~õ½=^¯^õ¼»ÖõÿÿÿÿÿÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¶R€¼PÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþïÿÝ·oÿÿÿ÷wݧ¯ûÓÿÿÿû¶îîýêïvÝ·mÚ»ïÝÝÿÿÿß}÷ß{}÷­÷Þî×»ÿÿÿ¾öôôñîîïq§mÝ÷owvßöôÿÿ j6õÖ`UÎîûÝé÷÷·ß{y;ß¾ûŸÿÿÝÝ'MûÄîîè;ÝÛ}åw}÷»µ{záŽÛzÿÿÝ÷»›»¼Ÿ{}Ñ»oo{»ÛÞïÿ†:mÿÿ½û¾ëþåÿÿÿÿ k6ôÃí½avÞ¡¶ü1¶ß†6Ûü1¬ÛÓÿþí·?ÿ†5›zðÆ»oPÆÛÃí½Cmóÿÿÿÿ†5›zÿÿÿðÇM¹ÿþÖmêÛoÃmøc]·¨cm¿Ýÿÿÿ m·pÇm¿†;mÿþÖmëðÆ»o[ß fz<Ûÿÿü1ÛnþÛoÿÿ k6õ m·øcU·¯þé·¬1¶ÜûŸÿ†5›|ÿ k¶õÃmþã»ÿá¶ÿ†;m¯wwÿÿá¶ùþîïzøcm¾ýÝíîîîïs»»»»»nÛ›w»ÜïÝÂÓÝÆÝï»»»Üî vÛŸw~ç½nï¾ýØÝÌÝÜ•ÝÙº½ÞÝ§ß j¶â¾ïy;O¿†:më m·~û÷wßw»'ß|1¬Ûˆîýû½íäû÷Ýn÷ß¾ó†6Ûÿ¾ýþãºÞß¾öåwwzw}÷·îï½»ÞŸßÿÝÜ{ÿû§¹?ÿݼ1ÛoXc¦Þ¿ÿÿ k¶õ m·á¶ÿÿîÛÿÿÿü1æßmøcm¿†5›z6ÛðÆÛÿðÇmº¾í·ÿÿÿÿ j¶ôÿÿÿÿÿÿÿÿ†5zÿÿÿÿÿþÔmëÿÿÿÿÿÿÿÿÿÿÿþÔmÕ m·á¶çÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¶Tu<@ÿÿÿÿÿÿÿÿÿÿÿÿÿáŽÛzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøc¶ÞŸ½»ÿÿÿÿÿ÷wŸþíÝ¿†;mëÿÿÝÝ·mÛ{y=»w{»¶öîíîÛӻ߆;méÿþÔmë}Ñnï½]ŠîûÊéwîîÿÿÿïãzvííˆÜñ½½½]î÷iÝÓvï>í·¯ÿþîíº¿}Úvôåv®ÝÛwtîÉ÷;ßþé·ÿÿ{¸Ní¹}ï{ÿÿÿøcY·¦×më k¶õ m·á¶ü1¶ßáfÞŸÿðÇm¹ÿü1¬Û׆5Ûz†6Ûþ×mêÛoŸÿÿÿü1¬Û×ÿÿÿ†:mÏÿðƳoPÆÛ~ÛoÃí½Cmÿwÿÿøcm»†;mü1ÛoÿðƳo_†5Ûzü1®ÛÐ1¶ßÿÿáŽÛsÿðÆÛÿøcY·¨cm¿Ã­½ðÇM½a¶çîÿøcY·ÏðÆ»o\1¶ßÿþÛoøc¶Ú÷ÿÿ m·Ïÿøcm¾ýÝßwv÷wwmÛýßÿÿðÇm¹÷Þ·ÞÝ÷Þ]ßÿv·pÆ«n/ü1ÓoXcm»÷÷wßï¿ k6â]ûÛßÿÿ m·ÿv»Û»Ó¾öÿw»ÿÿ»_þ÷½ÿûßûßþí·¬1Óo_ÿÿ†5Ûz†6ÛðÆÛÿÿÿÿÿ†<Ûàcm¿ m·ðƳo@ÆÛ~Ûoÿþí·WöÿÿÿÿáVÞŸÿÿÿÿÿÿÿðÆ£o_ÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿú¡¶ü1¶Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¶TòX@ÿÿÿÿÿÿÿÿÿÿÿÿÿáŽÛzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøc¶ÞŸs»ÿ÷›¿ÿÿÿÞÝßv÷oÞûM¾ó»7ní·¯ÿÿ»ï÷{·w{u»ÝÛmï¹·‰ï vÛÓÿü1¨ÛÖîýßw{tÝ–îîæšÞè3·ß}ÿÿÿ¾ööôçîÝÝÑß}û½íéííª øc¶Þ¿ÿþîò¶ï¼îÛšw{{{{ÜÝ÷+·ÿ†:mÿÿßïïw½ßÿÿÿðƳoOü1¬ÛÓÿþí·?ÿ†5›zýÏÿÿÿÿü1¬Û×Ü{‡ÿÿøc¦Üÿÿ k6õ m·á¶ÿÚßÿÿøcm»†;mü1ÛoÿðƳo_û¼1®ÛÓÿÿ†;mÏÿÃmÿÿáfÞ¡¶ÿ j¶õÿÃ6õ†6ÛŸ»ÿáfß?øcm¿îßþÛoøc¶Úû¿ÿÿþíÝÝÿ†6Ûïû¾ïÿ[ÿa°Îµ½Óvû¿†;mÏ÷mÞÞÝñí€G´Ûû½Ý¶ßðÆ«n+»Êíü1ÓoXcm»ÿÝîÖ»†o k6âGàwwv®ï¾ýÝÝÇw¿Øl3ðÆÛÿÖßww·†wl~•÷o{}ï}Ýîí»îÛ¿ýßîÛÝÛ»ݾ÷t÷oÜwCöõ†:mëÿÿÿÿû¶ïÿÿÿ†5›z6ÛðÆÛ k6ô m·á¶ÿÿáŽÛu|1ÛoÿÿÿþÕméÿÿÿÿÿÿÿÿ j6õÿÿÿÿÿü1¨Û×ÿÿÿÿÿÿÿÿÿÿÿü1¨ÛªÛoÃmÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿß¶Uo|DÿÿÿÿÿÿÿÿÿÿÿÿÿáŽÛzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøc¶Þ¿»»ÿîÓ·ÿÿÿÞîßÞ?îÜ1Ûo_ÿþç[{ÝÝ÷ovÝ·wwmßvÝ·w}møc¶Þ¿ÿáFÞ·;«ï¾îé»nÛÉäí¼ž-Ì;É÷·ÝÝÝÝÿÿýÝííîì;¶åxžwÞw{ï½ÞØPÍïöõÿÿÝïooÞn›ÊöÚA›·ºwníÛF÷¿ü1ÓoÿýÛ{ïoï~íî¿ÿÿÿ k6õÿÃͽÿáŽÛsÿøcY·¯ÿÿÿÿÿÃͽ~íÿÿü1Ónÿ†5›z†6ÛðÆÛîÛËÿÿá¶îí·ðÇm¿ÿÃͽîðÆ»o_ÿþí·?ÿ m·ÿÝ¿ÃͽCmþÕmëÿ†:më m·>îïÿ†5›|ÿá¶ûÖßÿ†6Ûï vÛ÷ÿÿÿýÏþÛoþîì÷;»¾ïvÞÝÜýk{·wvÝ·nïwö}Ûc†;mϺ½^¯OÝß}½÷aßÝ÷wï+» ÷ðÆ«n/ü1ÓoXcm»÷Ýîîïïo»Ã͸®½ÝÝÞîþîÿ»Þ¾Ûoþôï{{wvûÛÜǾ²¾í»[ ïoÚÃ7ÿ»}ÇtýÛ½½÷ýÛݽï vÛÖé·Ïÿÿÿÿî×ÿÿþÖmêÛoÃmü1¬ÛÔ1¶ß†6Ûçÿöêøc¶ßÿÿÿü1ªÛÓÿÿÿÿÿÿÿþÔmëÿÿÿÿÿøcQ·¯ÿÿÿÿÿÿÿÿÿÿÿøcQ·T1¶ß†6ÛŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¶Uì˜@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ vÛÓ÷mßÿvÿÿÿÿxï¿þ÷vÞ'oáŽÛzÿÿû½ÞýÝÚwzv·OÞ÷~í·§ÿøcQ·®îÿ»{³ÞÞݾ÷ÿÿÿ½½½¼/sONÓ°îÓÂÝ«»½­û{ï vÛ×ÿÿwï_îÛßwÿÿÿþïÿÿÿÿÿðƳoOü1¬ÛÓÿÿÿøcY·¯ÿÿÿÿÿÃͽÿÿÿÿðƳoPÆÛ~Ûoÿÿÿÿ vÛÿü1¬Û×û·Ãí½?ÿÿÿÃmÿÿáfÞ¡¶ÿ j¶õÿÿwÿáfß?øcm¿ÿÿö׻ÿÿÿ¼{ÿÿÜ÷}ßû½ßÿÿÿ½Þ ðIßÿïü1ªÛ‹ÿýßÝØpÏÝÃ͸—»ÿÿÿ»ýÞîïû¿Þ~ñíoïÿï_÷ÿÿÿÿÿÿÿÿÿÿøcY· cm¿ m·ðƳo@ÆÛ~Ûoÿþí·Wÿÿÿÿ j¶ôÿÿÿÿÿÿÿÿ†5zÿÿÿÿÿþÔmëÿÿÿÿÿÿÿÿÿÿÿþÔmÕ m·á¶çÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¶Vi¼@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ vÛÓ÷6æÿ÷6æÿÿÿÿ½<÷nð}æ÷uvݷöõÿÿ÷;ÎûïÝßs»nw6îîîûÛ²snmÝ͸ðÇm½?ÿýwWß}ö÷ºNï¾ûïNÓÓ£}÷W§›ÛÓÿÿÿz}÷ß}Õ÷MÓtÞN“ïºï½¾ûÉ÷ðÇm½ÿ÷I÷ß}í÷ÝݧÞß}÷›ï¾ûî›ÿÿÿß~ò}ϾçÞwK}÷ÝÿÿþÖméÿ†5›zÿÿÿ k6õû‡ÿÿÿÿÿ k6õ÷6áaÿÿÿþÖmêÛoÃmÿ½>ãÿÿöÿÿ k6õþûïÃí½?ÿÿÿÃmÿ÷ßøcY·¨cm¿Ã­½ÿÜîü1¬Ûçÿ m·û‡»ÿ†;m¯}ÿÿÿýÛ»nÿÿ}îmÝÎîç¹·;Žçp÷w6í»»¹Ý·6îîçvÖlíÌßvß{vÝ»»·þûÎìßuw¾ûïÝÞ+»ûÛ»î·w{È1ªÛŠí¼®Û»Žïþêï}Õ÷ï¾û¨cY·÷ï¾çwtÝ_w¾Þû½ÝûÓÍÿûëo»»¾Û½÷ß}Þûxß}÷›µw~îýÛwxwgºnËþîã¾ç~ûï¾ûï¾ç~ûþíï{ï÷eÿÿÿÿÿ¸Ûîÿÿü1¬ÛÐ1¶ß†6ÛøcY· cm¿ m·ÿÿ vÛ«ÿÿÿÿ†5[zÿÿÿÿÿÿÿýÿÿÿÿÿ j6õÿÿÿÿÿÿÿÿÿÿÿÿ j6ê†6ÛðÆÛsÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷³¶æØdaI·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·òn¥ ìð0HÁº”ƒ³ÀÁ!·ò0n¥ ìð0IÁº”ƒ³ÀÁ##êP"ÏŒ©@ˆ;< wdŒ©@ˆ;< pn¥ ìð0HÿÈÁº”ƒ³ÀÁ#êP"ÏòF Ô Dž 7Rvx$ä`ÝJAÙà`‘ƒu(g‚FþN Ô Dž 7Rvx$oä`ÝJAÙà`‘ƒu(g‚FþF Ô Dž 7Rvx$ïä`ÝJAÙà`“ƒu(g‚GþF Ô Dž 7Rvx$ßä`ÝJAÙà`‘ƒu(g‚FþF Ô Dž 7Rvx$oä`ÝJAÙà`‘ƒ¥ ìð0HßÈÁ‹Rvx$`Å©@ˆ;< 7ò0bÔ Dž 1jP"Ïüœµ(g‚F Z”ƒ³ÀÁ'#-JAÙà`‘ƒ¥ ìð0Hß$`Å©@ˆ;< 0bÔ Dž ù1jP"ÏŒµ(g‚FþF Z”ƒ³ÀÁ#-JAÙà`‘¿‘ƒ¥ ìð0HÁ‹Rvx$oä`Å©@ˆ;< 0bÔ Dž ù1jP"ÏŒµ(g‚FþF Z”ƒ³ÀÁ#-JAÙà`‘¿‘ƒ¥ ìð0HÁ‹Rvx$oäÀÅ©@ˆ;< 0bÔ Dž 3¼Œµ(g‚F Z”ƒ³ÀÁ#s‘ƒ¥ ìð0HÁ‹Rvx$oä`Å©@ˆ;< 0n¥ ìð0HßÈÁº”ƒ³ÀÁ#êP"ÏöF Ô Dž 7Rvx$o’0n¥ ìð0HÁº”ƒ³ÀÁ#}‘ƒu(g‚L Ô Dž 3ù7Rvx$`ÝJAÙà`‘¿‘ƒu(g‚F Ô Dž 3ù7Rvx$`ÝJAÙà`‘¿“u(g‚F Ô Dž ù7Rvx$`ÝJAÙà`‘¿‘ƒu(g‚F Ô Dž ù7Rvx$ÀÝJAÙà`‘u(g‚L Ô Dž ù7Rvx$`ÝJAÙà`“?“u(g‚F Ô Dž øÛoãí¿·þ>ßøÛoãm¿¶þ7ûøÛoãmÿ¶þ>ÛøÛoãmÿöþ=ûøÛï‘¶ßÆÛ|¶þ6Ûì}·ñ¼ÿ#m¿¶þ6ÛøÛoãí¹ÆÞw¶ç}üm½ñ¶ßÆÛÏímü}·ñ½¿ÆÛo|m¿ñ¾÷ÇŸyüy·ñüÿÆßoÎ6ÛøÛoãmÿ¶þ6ûøÛoãí¿¾þ6ÛøÛoãíÿ¶ïmüm·ØÛoãm½cm¿¾þ6ÞøÛoãm¿¶þ6ÛøÛoãm¿¾çmüm·ñ¾÷ÆÛÏö6óøÛoãm¿¾þ6óœm·ñ¶ßÆÛÿo|m÷ñ÷ŸÆßmüm÷ñï߯Ûÿoüm·ñ¶ßÆÛ}üm·ñ¶ÿÆÛÍü}·ñ¶ÿÆÛß}üm·ñ¶ßÇ»|öû}üm·ñ¶ßÆÛmüm·ñ¶ßÆÛßmüm¿ñ¶Ýãmé#o½£m¿¼þ6ÛøÛïãm¿·¾6ÞøÛãm¿¼þ6ûøÛoãmÿ·þ6óøÛïãm¿¶þ6ûøÛïãm¿¶þ6ÛøÛoãmùÆóßíüm·ñ¶ÿÆÛmÞ7Ûäy÷ñ¶Üãm¿¶þ6Û¼m·ñï¿ÆÞÿKoYm¯oüm·ÈÛϱ·ßÆÞmüm·ñ¶ßÆßßo|m·ñ¶ßÆÞ}üm·ñ¶÷Çß}¶þ6ÛøÛï‘¶ÿÆÛmüm·ñ¶ßÆßmüo¿õè,2M&¢@5gÄQŽø,=ñö߯Ûmüm·ñ¶ßÆÛ}¶ùmüm·8Ûnñ^éø~Ëb`¶µ€°D›À!D¾v ×cmþFÛܶþ6Ûì}·Èóo±ö߯óÿyüo·ñ¶ßÆÛmö6ûøûoãm¿¾ûíò6ÛøÛoã¿¶þ>ÛøÛoãmÿ¼þ7Üü{ÓøÛ{ãyÿ•aaF<—õ½ƒ d,ø°²»mò+zBÉÆÝ{cm¾DnÊøÛïãmïˆÞ ?co¾Nß'G°ý¦˜-($dÀ‘“‚Dj±—;ã8,ø­ù >#ø,¾Æó|¥¸ Yñ·o±ößÇ›mü?ñ·ŸÆÛÿ{ümçñ¶ßÆÛíüo·ñ¶ßcm¿öùmü}½ñ·ßÆÛmüu³û ™€´–¤Á…‚½¥ÅK¥“|¯ & Ypø:1ö“)E($OÁ'å`ÂÆÁ…è Ë,/à1‚Kƒ¿oAŒ ”€±à[òŒTœr” ¾Óö)2"ò@’@b2&*Ê0JÀX2& \yÙDÞ z#ÀI¥X˜0,¥òƒ$A(¸0·6)ÜȤ`-©d¼-à1¼ Ã v´Áð`1 Æ(-H~¡—Ø e0ZÂÃ2YT؈ñ1†›áe`,ì&7¦kX\F 'Me)‹N”-‹c°K¤`-À–T| YfS`X>ÐWà‘,‚NóÜà$ùð$éb4ÉŒZPU0$ZPHøƒªÚ /ãm¿¶þ<ÛøÛoãm¿¶þ?›øûo‘æßcí¿öþ6ÛøÛoã¿¶þ6Ûøßoãm¿¶þ6ÛøÛoå`À3°`ù+J 4Ò‚Kû“ | %#í² DŹb,-ùhx -%üÇ’² ÀóS™: Lý 0"&>¤Æ:<3ö+O€!/à h$"”~é 11iˆØ³åÀÀ5°`þ}ÇÀ’Øø{?ÀÀ5ð`õápóF0] 1ÜÿT'•SƒÐIú ƒ¢ÑðØÁ $ýŠ$ôÅ. ~q ûÚzž™Ø\L 8$dÀ‘IA#æ :-P-SA&¯;ãÀH–>‰Ûø$fA%ü “yÿð$·àI´ÀÓ‚CL 8$rWðIoà’ûmüm·ñößÇ›Íüm·ñ¾ßÇ›mò6Ûœm÷ñ¶Ýã}¹ÆÛw·þ>ÛøÛo±¾ß#m¿öþ<ûû`ÂÌ V<3+åiA%¤?1û'!/L$ûéÁ#² 4”Á'êãàIj$šÀH«+¹é:ú€À2sÒãágÖØüoà¢pIí´€ÄlÃL 6#U…­!þ)1€'“¾>›D|,}ƒÜ Jtýó 10ÒNé(1ÐIiA!™ìþ“Ké'KâÆ X±ƒÚÓçàIÿ&%Ò`HiA#¤Œœ5•è$½ðIÝ¢Œaà$u‡†k[ø$4à“: %ð œí° 9$Þ5í° ($@°Ðÿ@G%z >´t±·ß#y¿¶þ?›øÛoãm¿æþ6Ûìm·ñ·ßÆÛmÎ6ÛøÛoão¿¶þ6ßøûo±¶ß#m¿~þƒ‰> ÊžÕ& ’Ïæ²À àÀ*)Ïá‘,»². ,jLd{(À~ÈPpË!oå ø¨É„ßRaQÂdágÙp-h1/“…¢`{I€YÀÂÓŒ€Of:”Z¶‚Hå–BÛ’‡€’m µŽ˜d,í‘Ð%dÀ‰€Y‹‹LrÕÀcÖ<e&û8c³*Ψ0e>©26N”-3öðZ@H“ $øûÉAˆ¾‚NKðÌüï$—lOm‹0 WßÀ±aø¶Hz°{í®>ø# $lÃ!`“À{h,¯AŒ ËL)ÿàYö5gÁaôŸ O¡iü·š¤À›ì£´À³ã&>̓àÀ*[É‚Áqi‹ÖL}Æ€€üZ7dg÷BÙc§ßÆÞmüm·ñ¾ßÇ¿ßÍüo·ñç÷ÆÛmÞ6ÛøßîqçÿÆûs¶ïoü}ïñ¶ß#o¿¶þ6Ûøt7 _ä…q>˜@¦M¿’ô~dÖü-±ªÛäxaÜä XÈX€*Ì™'Y“[ðµ¿LßÇÍ7É|,/‰LªwäÀŠemgL·Ø×íëÇžd,f>û!m7¬mVù aJÛð´ÓìmçØg0Zל‰‚)šÐ÷#]ýðÆ¡“2×ùS*&[œ%‚Þ߯Û}üoçñç÷ÆÛmüm·ñ¶ßÆû|Ž_ßmÎ6ÛøÛoãm¿¶þ6ÛøÛoão¿¶þ6ÛøÛoãm¿¶þ6ÛøÛo‘¶ßÆÛ}ü}·Èþãm¿¶þ6ÛøÛoãm¾ÆÛmö6ÛøÛïãï?7þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6Þøßo±¶ßÆÛÿmüm·ñ¶ßÆÛmüm·ñ·ßÆÛmüm·ñ¶ßÆÛÿmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛ¶žøÎ˜Zq¶Ýãm¿¶þ6ÛøÛoãoï¶þ6ßøÛoão?¶þ6ÛøÛoãm¿¶þ6ÛøÛoãmÿ·¾6ÛøÛoãm¿¶þ6ßøÛoãm¿¶çmÞ6Ûœm·ñ¶ßÆÛmüm·ñ¶õãmÿ¶þ6ÛøÛoão¿¶þ6ÛøÛoç éRÂú-j5j[²SHÛSÕ¶þ6Ûøóïãí¿¶þ7Ÿøß{ãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ßøÛÏãm¿¶þ6ÛøÛoãm¿¶þ6Ûœm·ñ¶ßÆÛmüm·ñ¶Ýãm¿¶þ6ÛøÛïãm¿¶þ6ÛøÛoãm¿´L«1…iÏÏŒR 2µ¥ "ÀZÀ´èX’=TÌ.6ÛøÛoãm¿¼þ6ÛøÞoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¾Fûmüm·ñ¶ßÆÛs¶þ6ÛøÛnñ¶ßcm¿¶þ6Û²6Ûøßoãm¿öþ<Ûøûoãm¿¶þ6ÛøþÏ·1@ ÂÞÓ”+†+æ îü-@¯€!éšÑšm¯m·müm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüo·ñ¼ßÆûmü}·ñ¼ßÇÞÿmüm·ñ¶Ýã}ëÇŸs¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿æþ6ßøÛoãm¿¶þ6ÛøÛoä[ ½¯©r|3-³…¶ÜHÛoãm¿¶þ7³øÛoãy¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛnqö߯Ûmümÿó´³ÁlLföˆ8 ™h1adsc¶ÞLm·ñ¶ßcm¿¶ço|m¿xÛoãm¿æþ6Ûøûoãm¾ÆÛyüy¶Üm·¤m·ñ¶ßÆÛmüm·ñ¶ßÆûÍüo½öža`± YiBÍ£¶3|¶ô¶ö¶ûmò6ÛøÛoãm¾Æó|¶þ6ÛøÛoãm¿¶þ6Ûøóûç£LN~žÝVø$°`JÌ‚Lãm»cm¾FÛ|·û{ü{íñç߯Þÿmüm÷ñ·¿ÆÛ}¼þ6ûøß{ãÍ¿¶þ?³øÛßão¶þ>ÞøóÏã}¿¾=Þùð±ïÂÕ_ÆÛÚÏ ,Ľà´J£‚Õ;o|y·ñïßÆÛŸ¿¾7þìy½ÈÛoãm¿¶þ6ÛøÛoãÍ¿¿OþŸ¶‰[d^!ü6ÚAb@*ôÊà/kL,½„°Šý¹óˆmŸN|ýb©Œëh£&LŠ´ì‚LxéªéUÊ$ÁÚbZ§@a¢ÉÁ |g2,åX3P² à5¦à”6þ˜ám "–\Òm!Åüð´QàôÆe' ó)€JÀ‘ÛK‰–T-4òí pÿ‚ ÑGü¤ÆñcÃ7ÊÚxa3q@Y­¤²ƒ¾-\-û•$,€´\›BÞÊkp,PZ” cϓà &—e0 |À« fÎœÛøa0°Î™\-Ë´³ &ŒÅ©€oj;¾ ' ÆÆ©Ã4«+€_ðXA1•Œï¶6y%’`X,,À·nƒÍ3cmŠŸâÞ É:…}à¶Ô`[e¢‘¯˜"708žÆi·—>+ì Z€3i‹ƒ€ áö@B¿í¾FÛÿmüm·ñ¶ßÆÛmüm¿óºÀIlÇ/0 E Ì׈Œ'žÆ0íòs'Ær©'¥Bô <†Aˆž‚Næ ù¦'¿NY›àÀ•,‚NÄ€-² 5ãmÿžÎ$—ÒOK'"f{ ÄOA&9‰ù¯K~–&ÛÄP”ÍxˆÂPIÝÉÖ2>3Õ1i’as <ùž”Œb5›vYã Å”c¦"–RéÁ$ÌÁ'Þ8ÚÚF³oµ¨i $ÈY °̱C ÄS “?"ßša‰ìÇ%¼œ\»`%)žÀ1„ “ ¸Ì6è´øò`IôÀ$íb@J€Á*YãQo¹k`Æx1Œ gxÛnR×`oAˆ›’ôб™L m‹|Hù§ÚYÄÂ҉ŇØÕEsÄt™ÅVÚ‘dîB=ó4³ìm¿ÈÛÏãm¿·þ6ÛøÛoãm¿¶þvü -à$ý¿4à“ü DÓ‚O#ï=gí $¶v/2 Dô[ ÄOA'Ì·àIoÀ“Ã6Áñ l‚KÀb&œgmÙ;i%Ê`Iûlƒ32È13ó·àIo'íø‹¥—àb)J 6FÛ~Oø1ŒÁŒy’^”J c¶ö¶Ì4ÀÄLÇL EyXü{J 3õÊyàµ/`Z(ÏfÞdA‚Î,‹Mk?–4ÑDÙ-ü‰ü^ƒ?‚L†'Ï%ì›Û`‰¥–À$4 “R6ÛÖwؘ­ƒSdX%S “do7öÁŒ0c8Æ3ñ¿½ËlOÐb&À$í"ó2±o™«}ë:ë$³ìjƒ5*"”X3hza/à †Lˆ²Å°60g*?³øÛoãm¿¶þ7›¼}ïñ¶ßÆÛmüï˜ixÇÛð1N 1àHA8³±¿«iܤœ’Cþ E¾ 3 ƒ"Ï1 ÖIšå×´â LHH3€.µ'°ÓX2  ̶Ha0°Æ|òÛ ÄXË‹gN³çàI2‹6·àb&”cÀŠS½ë¹1!bI y’á($c2ÉY„þbC¾³g¸1)ˆ’ñ„ØвPIå’˜ƒ:˜´J ƒ,Æ…ŠgÔ˜Ú£?žMl,‰[M0$ÈYY¡eï|‹|o5I„YÀ¤ÿà$™.ÁŒËlD¥˜ò€±æ>7§í;”À’ÐLcîA+'œ¤Nch¿ ÃÞ0ÁŒ¢˜4à'±;Hʾ[ð$à`J£ 1𡚓dW$É›cmOñÑQmT†EŸI $ƒ:>Q€ £_cy½cm¿¶þ6ÛøÛoãí¿¶þ6ÛøÞá·Ÿ ýhšºÈZ0zBÆ[ßVÄáeÖA¨8~·´o·ÉjBÂx :=‹È\+h oi º _Ën•YÇRù𱘉 èLЂïZ3Yé&Ã&ÁÀ¡ÈÒ ÁÀ³{ð·:Ѷÿ$yð°tÌ®ò¤àÁn2Üá®9ÆtÆVÉIpyÖ„¶™6ö² ðUÝ Mí¡»Áo_Y à àÁkù‘·?hmp`µ¯¬ƒÀ6fËBÖòaç†Zœh ð`´ÎÅ¡pµýðÔgÂΦ\( mí£í¿Šóf5¾S™œ*0hΑöÞ±¶ßÆÛmüm·ñ¶ßÆÛmüm·ñößÇ»|¶òãm¿¶ùmüm·ØÛn¬m·ñ¼ÿÆþzFÛmëmímüm·¬}·Øûo‘¼Ýã}¿võ6þ<ÛÖ<ÛÖ<ÛÉæþ6ÛøÛoãm¿öþ7Ûøßoãßí¢æäÇÙ\„q0XS0·À'2¿2¡—ÈÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãÍ¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿æþ7›øþÏãm¿¶þ6ÛøûoãÍ¿¶þ6ÛøÛoãy¿¶þ<Ûøûoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoã;FéþÆ5or6ÛÖ6Ûäm·´m·ñ¶ßÆÛmÞ6ÛøÛoãm¿¶þ7›øßoãm¿¶ûmò6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6Ûø÷{ãÍ¿¼þ7›äm·ÈÛoãm¿¶þ<ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ<ÛøÛo±¼ßÇÛ|¶þ6ÛÚ6ÛøÛoãm¿¶þ6Ûœ{·ñ¶ßÆÛmüm·ñ¼Ýãï6þ>ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ7ÞøÞo‘¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÞ}üy·ñ¶ßcmï·¾6þøÛoãm¿¶ïo|owñ¾ßÆÛmüm·ñ¶ß#m¿w¾6ûøÛoãm¿¶þ6ÛøÛoãm¿¶þ6Ûäm·ñ¶ß#m¿¶þ6ÛøÛoãm¿¶þ6ÛøÛoãm¿¶þ6ÛøÛ{ãm¿æïyü}·ñæßÆÛs·¾6Ûøßzñ¶ßÆÛs¼þ6ÛøÛoão·¾6ßøÛoãm¿·¾6ÛøÛïão?¶þ6ßøÛoãm¿¶þ6ÛøÛoãm¾FÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßcmîFÛmümïñ¶ßÆÛmüm½ñ¶ßÆömüm·ñ·ŸÆÞyüm÷ñ¶÷ÆÛÿo|m¿ñ¶ßÆÛmümçñ¶ßÆÛ|m·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ÿÆÛmüm·ñ·ŸÆÛmüm·ñ¶ßÆÛßmüm·ñ¶÷ÆÛyüm·ñæÝãméÆßßmümçñ½ŸÆÛyüm÷ñ¶ßÆóÿï|m¿ñ¶ßÆßmüm·ñ¶ßÆÛíüm·ñ¶Ýãm¿¶çmüm·Z6ÛøÛoXÛoãmï¶þ6ÛøÞo±¶ßÆÛ|¶þ6ÛøÞÏ‘¶ßÆÛmümï´mçñ¶ßÆÛyüm·xóoãy¿¶þ6Û¼m·ô¶P‰@€;| °n%íð0KôæÁ¸”·ÀÁ+âP ß¿Kì‰@€;| °n%íð0Kô·Á¸”·ÀÁ+âP ß¿Kl‰@€;| °bÄ @¾ ~—˜1bP ߬±(o‚_§¾ X”·ÀÁ+,JÛà`—”æÁ‹vø%`ʼn@€;| ý=ðbÄ @¾ X1bP ß¿Kl±(o‚V X”·ÀÁ/ÒÛ,JÛà`•ƒ%íð0Kô¶Á‹vø%ÀŃð ß¿K̰~Ûà`•ƒÀ€;| ý-°bÁøo‚V X?íð0Kô¶Á‹à@¾ x1`ü·ÀÁ/ÒÛ,vø%`Ńð ß¿Kl°~Ûà`•ƒÀ€;| ý-°bÁøo‚V X?íð0Kô¶Á‹à@¾ X1`ü·ÀÁ/ÒÛ,vø%`Ńð ß¿Kl°~Ûà`•ƒÀ€;| ö–Ø1`ü·ÀÁ+,vø%ú_`Ńð ߬°~ µ `—é݃Áƒ€v´ ðbÁø0pÖ‚_¥¶ X?ÚÐ0K‹à@¾ ~œØ1`ü·ÀÁ+,vø%å-°bÁøo‚V X?íð0Kµ-°bÁøo‚V X?íð0KÊ[`Ńð ߬°~Ûà`—émƒÀ€;| àbÁøo‚_¥¶ X?íð0JÁ‹à@¾ ~–Ø1`ü·ÀÁ/,JÛà`—émƒ%íð0JÁ‹vø%ú^`ʼn@€;| àbÄ @¾ ~—°1bP ß¼±(o‚_¥¶ X”·ÀÁ+,JÛà`—émƒ%íð0JÁ‹vø%úsÀʼn@€;| °bÄ @¾ ~–Ø7vø%`ÜJÛà`—émƒq(o‚V Ä @¾ ~—˜7vø%`ÜJÛà`—émƒq(o‚\ Ä @¾ ~—˜7vø%`ÜJÛà`—émƒq(o‚V Ä @¾ ~–Ø7vø%`ÜJÛà`—ã ¿¶þ6ÛøÛoãm¿¶ûmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmÎ6ÛøÛoãm¿¶çmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ñ¶ßÆÛmüm·ï¶Wcü@†0²ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ÿÿÿÿÿÿü1öýPÆûÿ†;mÔ m·ÿü1Ö~¯ÿÿÿÿÿ᎛uÿÿÿÿþé·Wÿÿ vÛ×ðÆ«oL1ªÛ©ÿöôÿÿðÇm½v(cU·§áV޶︼1ÛoPÆÛ|ÿ†6Ûÿöõ m·øcQ·¯Þ8cm¿ÿÝ?ÿøc¦ßü1¨Û׺o^÷îÖé]·†5z†<Ûÿøc¦ßü1¨ÛÔ1¶ß†5[z†6Û÷_ºO_ÞÝ—î¡¶ü1¶ßøc¦Þ¼1ÿÜþÔmòÕmëÝ=à÷G½ÿºOon÷PÇÛÿ m·ü1Ûoœ1¶ßïnîîÛu»nûÍî÷{vŸwrxcm¿Ã¶õΌ tÛÿáVÞ°Æ«oPÆÛrÿî‹ÝÜŸ†5[zÿ o·Ècm¹†:mÿá¶ü1ªÛ׆5›zÃͽCmÿÿðƳoPÆÛ m·áVÞ¡¶ÿá·¿ðÆ£oÆ«oÆ«oPƳoPÆÛ~ÛoðÆÛ~ÛoÃͽCmÿÃí½|1¬þÔ1¶ßáfÞ¸cU·¨cm¿ÿöç m·8cm¹†5[z†6ÛðÆÛ~ÛoÃmþÛoÃmøcm¿Ãí½áfÞ¸cm¿Ãmøcm¿ÿÃmü1¶ßÃmøcm¿ m·á¶ü1¶ß†6Û¸cY·¬1¶ßøcm¿ºnÛ·á}ž¡¶þÖmêÛoÃͽCmøcm¿ m·ÿøcm¿†6Ûœ1¶ß†6Ûècm¿ m·á¶ì m·ðƳoXcY·¯ m·û‘=Ãí½pÆÛ~Ûoá¶ü1¶ß†6ÛðÆÛ~ÛoÃmÿ᎛z†:mφ5sÃmøcm¿†5›r6ÛðÆÛ m·áfÞ¡·ÿ†6ÛðÆ»oŽ“™øc_g¨cm¿†5›z†6ÛðÆÛ~ÛoÃmøcÍ¿ m·øc¶Þ¼1¶ß†6ÛŸºpÆÛ| m·áfܶü1¶ÜðÆÛ~ÛoÃÍøcY·®Ûo°Æ»oPÆÛ~Ûoøcm¿ m·ýï j¶õ m·Ü1¶ßðÆÛü1¶ßCmóðƳoXcY¿¯Ãí½ûµ†5zÿýÝÒt7°Æ³n.÷v¯nÓ«•ïºN›»¤÷»Ý]-ï uŸÖé¶¿Ý7?ÿǸ½º+ßþýÒutÝpÇM½uÿÃ͸Ÿv¿ÿvþÛoÃ6çîýç{ÿºw·WW¿{ïnǽ½ðÆÛ~ÛoýÕÚº»÷IÞï÷«›ÿ»nDí†5[zþÛoÃmÿí¹møcm¾6ÛðÇÛ~Ûná¶ÿ†5›záfÞ¼1¬ÛÖÖmêÛoÃmð1¶ß†6ÛðÆÛ~ÛoðÆ«o@ÆÛ~Ûo·Ní·¯ m·á¶ÿ†5s†6ÛðÆÛ~ÛoÃmü1¬ÛÔ1¶ß†5›z†6Ûøcm¿ k6õ m·á¶ü1¬ÛÔ1¶ß†6ÛðÆÛ~ÖmêÛoÃmøcm¿ m·á¶ü1¶ßí½!¶ü1¶ß†6Ûç m·ÎÛoøc¶ßþC­¾6Ûècm¾5›z†6ÛðÆÛ~ÛoÃmøcY·¨cm¿ m·á¶þÖmë†5›z6ÛðÆÛ~ÛoÃmøcm¿ m·á¶þÛoí½møcm¿ m·ÐÆ£o\1¶ßxcm¿á¶ç m·0Æ£nÈcU·ÀÆÛ†5›z†6ÛðÆÛ~ÛoÃmøcm¿ m·áfÞ¡¶ÿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿Ã­½møcm¿ÿ m·áŽ›ðÆ£oÆÛ| m·áVÞ¾ÖmêÛoÃmøcm¾pƳo@ÆÛ~ÛoÃmøcm¿ m·á¶ÿáVÝOü1¶ßü1¶ßü1ªÛ×ðÆ«o@ÆÛÿ†5[z6ÛðÆÛ j6êÿýþÕmèÛoÃmøcm¿ÿÿÿÿÿðÆ«n§øc¶Ý_ÿÿÿÿÿÿáŒ,¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~Ûoß¶WáH†0ºÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ÿÿÿÿÿÿÿÿú¿ÿÿÿÿÿÿü1Ón¯ÿÿÿÿÿÃ6êÿÿÿÿÿÿÿü1¨Û×÷Fóÿï? j6õ m·ÿÿðÆ£o_ûÇxÿþìÿ tÛÿ÷½îöêêûÝííÓtÝ7›Û«ÛÝï j6õÿ†:mÿðÆ«oPÆÛ}ûîî¾ò»½¿º-× m·þé·¯ÿ j¶õï]ãï?û¦óáVÞ¿ðÇM¹ÿ m·ûÍÓtî¯n÷WMÓtþöûîK†6Ûü1¨Û×᎛ü1ªÛç¹ÝwmÉî6âw+ÝîïºnŸü1ÓoÆÛs vÛÿÃmÿ†5›zÃí½CmÿÿðƳoPÆÛí½ÿ j¶ù†5›z†6ÛðÆÛ†6ÛðÆÛ~×mêÛoþ×móávÞ¸cY·¯ m·ÿÿ†6ÛžÛnPÆÛ| m·øcm¿ m·á¶ÿ k¶õÿ†6Ûü1¶ßðÆÛÿ†5sá¶ÿ m·á¶ü1¶ÝÃͽa¶ÿÃmÿ{øcm¿†5›z†6ÛðƳo\1¶ßÿá¶ÿ†6Ûü1¶ß†6Û¸cm¿†5ÛzÃí½xcm¾ü1®Û× k¶õ m·ðÆÛ~ÛoÃmþÛoÿ tÛàc¶Üÿ m·øcm¿ m·á¶þÛoÃí½|1¶ß†5Û|{ü1¶ßÃͽCmøcm¿ m·áfÞ°ÆÛ†5zðÆÛ~ÛoþöÛoáfܶü1¶ÜðÆÛ~ÛoÃí½CmþÛoávßmð1¶ßðÆ»oPÆÛÞøcm¾á¶ÿ†6Ûÿá¶ÿøc]·¯ðÆ»o_û§{rÿÿ{{½Ã͸··W·Mîé½î›¦÷Þï7ïn›ÛÞ÷öçÿýÿtûÛ¢÷¿Ü‹áŽ›zÿÿÃí¸¿{½ºü1¬ÛÓï§á¶ü1ÛnûÛ³ÿ½¿ºw]ïºOðÆÛ~Ûoþ÷ï¿Ý»Þ÷rÝ¿tß½ÜXcU·¯á¶ü1¶ßü1ªÛ1¶ßáfÜPÆÛw m·ü1®Û× k¶õávÞ°Æ»oPÆÛ~Ûo6ü1¶ß†6ÛðÆÛþÔmëÃmøcm¿øcm¿ m·ü1¬ÛÔ1¶ß†5›z†6ÛøcÍ¿ k6õ m·á¶ü1®ÛÔ1¶ß†6ÛðÆÛ~×mêÛoÃmøcí¿ m·á¶ü1¶ßü1ªÛÖ÷ m·ÎÛoøcQ·ü1ªÛæÖmêÛoÃmøcm¿ m·áfÞ¡¶ü1¶ß†6ÛøcY·®ÖmèÛoÃmøcm¿ y·á¶ü1¶ß†6Ûÿ j¶ô m·ÞÛo¼1¶ßðÆÛsðÆ«oœ1¬ÛÔ1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ k6õ m·øcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmÿ†6ÛÿðÆÛ~é·ÿÃmóðƳoPÆÛ~ÛoÃmÿ k6ô m·á¶ü1¶ß†6ÛðÆÛ~ÛoÿÿÃmÿÿÿÿøcU·§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÂëoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ü1¶ß†6ÛðÆÛ~ÛoÃmøcm¿ m·á¶ý¶X^ó~îñÝ·fôµ½÷m÷w|1¶ßøc¦Þ¿ÿ»ÝÚps»ØPÍ÷µ¬7wwWÚ·Þ;¤öîÔmëÿ tÛŸþôío¿vÚiîÖí½»­€MÚwwðÇm½~é·ÿþí:îýßÿwÿÃ6õ†6ÛŸÿáfÞ¡¶ÿÿÿÿÿÿ†6ÛðÆÛ~ÖmêÛoþÌ6õøcY·¯ÿÿÿÃmøcm¿ m·øc0Û×þÛoÿÿáŽÛsÿá¶ÿÃmÿü1¶ßÿÿÃmÿþÖmë k6õá¶ÿ½C†Þ¸cY·¨cm¿ÿøc¦Þ¿ÿ†6ÛðƳo_ m·áŒÃoŸÃmÿþí·¯ m·ÿ±AŸðÆÛ~ÛoÃͽCmþÛo°Æa·¨cm¿ m·ü1¬ÛÔ1¶ßÿá¶ÿ†6ÛÿØßþÖmëü1˜mëÿÿÿö0c¿z±¾ôîôïÖÃ?ûßÝÿÿo û»XgxoÝ÷ní:öœ3Ö§ï<1Óo_Ûwÿw~ÖmÄþîÆ÷wîîö° »ïO^Ûoÿm§÷w‹a_v¾í^šw=÷¦îÿ­¿Ãmÿï^Ö w÷¯ÿw÷>óðÆÛÿþÖmë†5›zðƳoXcY·¨cm¿ m·Ïþîí·¯ m·ÿÿü1¶ß†5›z†6ÛðÆÛ~ÛoÃͽCmü1¬ÛÓÿÃmó†6Ûþí·ÿÿÿÿþÛo¼1¶ßðÆÛsÿÿÿÿÿ m·áŽ›ÿÿÿÿÿá¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¶[Ê@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ vÛ©ÿÿÿÿÿÿÿÃ6êÿÿÿÿÿü1Ón¯ÿÿÿÿÿÿÿöõýÏÿÜÿ vÛÔ1¶ß?ÿáŽÛzÿosðƳn§ïºÿÿÃ6ÿÿÝþî¶.îÿïxc¶Þ¿ðÇM¿ÿ»»»¾îïîï½?ÿÃmÿ†:mëÿýëÝ·cwßîïxf÷ÿ᎛sÿݽïû÷}ßÝÞü1Ûo_†:mÿÿz÷ÿÿøc¦Þ°ÆÛsÿü1¬ÛÔ1¶ßÿÿÿÿÿðÆÛ~ÛoÃͽCmÿÃí½~ÖmëÿÿÿðÆÛ~ÛoÃmþ×mëÿ m·ÿÿðÇm¹ÿðÆÛá¶þïü1¶ßÿÿÃmÿþÖmë k6õá¶þñðÆ»o\1¬ÛÔ1¶ßÿü1Óo_ÿÃmøcY·¯†6ÛðÆ»oŸÃmÿþí·¯ m·ÿÿ†6ÛðÆÛ~ÖmêÛoðÆÛ}†5Ûz†6ÛðÆÛÃͽCmÿþÛoøcm¿û¿ü1¬Û×øc]·¯ÿwÿþÞiÝßÝÿ­¿w»û»—ÿÿz»±€FïÝ‹»}îýÞìøc¦Þ¿wÝß[uÞÖmÄwÝßw»¶¯îí¨]ýäôípÆÛ÷w»×»½ww{¡Ý¾ð·{ÏvîÓ¾ûφ6ÛÿÿÿÝÿ÷?¸Oá¶ÿÿü1¬Û× k6õáfްƳoPÆÛ~ÛoŸû¼1Ûo^Ûoÿÿøcm¿ k6õ m·á¶ü1¶ß†5›z†6ÛøcY·§ÿ†6Ûç m·ü1Ûoÿÿÿÿü1¶ßxcm¿á¶çÿÿÿÿþÛoÃ6ÿÿÿÿÿÿÃmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû˜moovlmvhd|%°€|%°€èç@trak\tkhd|%°€|%°€ç@Ð@¡mdia mdhd|%°€|%°€u06ù-hdlrmhlrvide VideoHandlerLminfvmhd,hdlrdhlrurl DataHandler$dinfdref url àstbl¸stsd¨mp4vFFMPÐ@HHmpeg4ÿÿResdsD<  @-°µ‰ Ä‹©…„Hc²Lavc52.20.1(sttsé »é@stss  %1=IUamy…stscPstsz,oë õ€ ,”wƒÙ2hƒ¥ýom–<•ö`È$¬C-ô~œ¦å+·!º¨ÓØ ¢? rþUÛ–Võ¾è5ßxŽq BݸÀ‰ˆòPŠiv‡›#Ó‘ý…h`)%F5IüýÏ¢„ƒKRK¹¦Œ:rû•YN¨ä@¸&D9——OFX¯V𥨙 îR¹ˆLstco$,“C~LŒ[ju-zÁÁƒÛˆRÕ’®ÅÊ™Í>Ñ;ÕªÚÝ­àéä~étîÔ œ1H6‹:¸?¬E*GÆJlOíW\ëaf͇Վ”‘˜9œ ä¡î¦©­­Å²´Ô‹Û‰àÞ乿Oç¥éšëX@ uTÌ6Z;Ë@ÕCæG(J/M OÄT„Y]`%|ƒ…g‡æŠpŒÙO•ÖœqŸ”¢g¤øÁõÈzÌâÏýÓÖxÙ¡ÜÆà ãAæŠé†ƒ â„•cµ!$¹'_DëJ%L—N°P«R@S™TçVY¡\>_"}b‚ƒ@„„…½‡T‰ëŒ:Ž€Ø’‡”Ý´Í»ÕÁzÃ"IJÆKÇWÈEÉ—ÌPudta©enc Lavf52.31.0plainbox-provider-checkbox-0.25/data/touch_zoom_test.qml0000664000175000017500000000637712646152433024762 0ustar sylvainsylvain00000000000000/* This file is part of Checkbox. Copyright 2014 Canonical Ltd. Written by: Daniel Manrique Checkbox is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3, as published by the Free Software Foundation. Checkbox is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Checkbox. If not, see . */ import QtQuick 2.0 import Ubuntu.Components 0.1 Rectangle{ id: mainWindow width: 400 height: 400 focus: true Keys.onEscapePressed: { console.log("ESC pressed, exiting"); Qt.quit() } PinchArea { anchors.fill: parent onPinchUpdated: { rotatable.scale = pinch.scale if ( (rotatable.height * rotatable.scale) >= goalsize.height){ rotatable.color = "green" } else{ rotatable.color = "blue" } } onPinchFinished:{ rotatable.height = rotatable.height * rotatable.scale rotatable.width = rotatable.width * rotatable.scale rotatable.scale = 1.0 if ( (rotatable.height ) >= goalsize.height){ console.log("PASS") timer.running = false Qt.quit() } } } Rectangle{ id: instructions height: mainWindow.height / 3 anchors.margins: units.gu(1.5) anchors.top: mainWindow.top anchors.left: mainWindow.left anchors.right: mainWindow.right color: "#aaaaaa" radius: 10 Text { id: text anchors.fill: instructions anchors.margins: units.gu(1.5) font.pointSize: units.gu(1.5) property var timeout: 30 text: "Using two fingers, scale the blue rectangle so it is larger than the red outline. " + "Press ESC to cancel the test at any time. Test will exit automatically in " + timeout + " seconds " wrapMode: Text.Wrap } } Timer { id: timer interval: 1000 running: true repeat: true onTriggered: { text.timeout = text.timeout - 1 if (text.timeout <= 0) { running = false console.log("TIMED OUT - no action detected") Qt.quit() } } } Rectangle{ id: goalsize anchors.top: instructions.bottom anchors.bottom: mainWindow.bottom anchors.bottomMargin: units.gu(5) anchors.margins: units.gu(8) anchors.right: mainWindow.right anchors.left: mainWindow.left border.color: "red" border.width: 4 } Rectangle{ id: rotatable width: goalsize.width * 0.25 height: goalsize.height * 0.25 anchors.horizontalCenter: goalsize.horizontalCenter anchors.verticalCenter: goalsize.verticalCenter color: "blue" } } plainbox-provider-checkbox-0.25/data/touch_tap_test.qml0000664000175000017500000000442212646152433024547 0ustar sylvainsylvain00000000000000import Ubuntu.Components 0.1 import QtQuick 2.0 Rectangle { id: main color: "black" width: 800 height: 600 focus:true Keys.onEscapePressed: {Qt.quit()} Arguments { id: args Argument { name: "touchpoints" help: "minimum TouchPoints" required: true valueNames: ["TouchPoints"] } } Text { id: text color: "white" font.pointSize: units.gu(1.5) property var timeout: 15 text: "

Touch the screen with "+args.values.touchpoints+" fingers at the same time

" + "

Press ESC to cancel the test at any time.

" + "

Test will exit automatically in " + timeout + " seconds

" wrapMode: Text.Wrap } Timer { id: timer interval: 1000 running: true repeat: true onTriggered: { text.timeout = text.timeout - 1 if (text.timeout <= 0) { running = false Qt.quit() } } } // Visual presentation of the touch points Repeater { id: touchBalls model: multiArea.points Item { x: modelData.x y: modelData.y Rectangle { anchors.centerIn: parent color: "white" opacity: 0.1 width: 1000 * modelData.pressure height: width radius: width / 2 } Rectangle { anchors.centerIn: parent color: "#20cc2c" opacity: modelData.pressure * 10 width: 100 height: width radius: width / 2 } } } MultiPointTouchArea { id: multiArea property variant points: [] property var done enabled: true anchors.fill: parent minimumTouchPoints: args.values.touchpoints maximumTouchPoints: minimumTouchPoints onReleased: { points = touchPoints; if (done) { console.log("PASS") Qt.quit(); } } onPressed: { points = touchPoints; done = true } } } plainbox-provider-checkbox-0.25/data/touch_rotate_test.qml0000664000175000017500000000725312646152433025266 0ustar sylvainsylvain00000000000000/* This file is part of Checkbox. Copyright 2014 Canonical Ltd. Written by: Daniel Manrique Checkbox is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3, as published by the Free Software Foundation. Checkbox is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Checkbox. If not, see . */ import QtQuick 2.0 import Ubuntu.Components 0.1 Rectangle{ id: mainWindow width: 400 height: 400 focus: true Keys.onEscapePressed: { console.log("ESC pressed, exiting") Qt.quit() } PinchArea { anchors.fill: parent property var startpinchangle property var rotangle property var currentangle onPinchStarted: { startpinchangle = pinch.angle rotangle = rotatable.rotation } onPinchUpdated: { if (startpinchangle != null){ currentangle = rotangle - (pinch.angle - startpinchangle) rotatable.rotation = currentangle } if (Math.abs(currentangle) < 1){ rotatable.color = "green" } else if(Math.abs(Math.abs(currentangle) - 180) < 1){ rotatable.color = "green" } else{ rotatable.color = "blue" } } onPinchFinished:{ console.log("Current angle: " + Math.abs(currentangle)) if (Math.abs(currentangle) < 1 || Math.abs(Math.abs(currentangle) - 180) < 1){ console.log("PASS") timer.running = false Qt.quit() } } } Rectangle{ id: instructions z: 1 // So it appears on top height: mainWindow.height / 3 anchors.margins: units.gu(1.5) anchors.top: mainWindow.top anchors.left: mainWindow.left anchors.right: mainWindow.right color: "#aaaaaa" radius: 10 Text { id: text anchors.fill: instructions anchors.margins: units.gu(1.5) font.pointSize: units.gu(1.5) property var timeout: 30 text: "Using two fingers, rotate the blue rectangle so it fits within the red outline. " + "Press ESC to cancel the test at any time. Test will exit automatically in " + timeout + " seconds " wrapMode: Text.Wrap } } Timer { id: timer interval: 1000 running: true repeat: true onTriggered: { text.timeout = text.timeout - 1 if (text.timeout <= 0) { running = false console.log("TIMED OUT - no action detected") Qt.quit() } } } Rectangle{ id: goalsize anchors.top: instructions.bottom anchors.margins: units.gu(8) anchors.right: mainWindow.right anchors.left: mainWindow.left anchors.bottom: mainWindow.bottom anchors.bottomMargin: units.gu(10) border.color: "red" border.width: 4 } Rectangle{ id: rotatable anchors.horizontalCenter: goalsize.horizontalCenter anchors.verticalCenter: goalsize.verticalCenter width: goalsize.width * 0.95 height: goalsize.height * 0.85 color: "blue" rotation: 45 } } plainbox-provider-checkbox-0.25/data/touch_continuous_move_test.qml0000664000175000017500000000426012646152433027217 0ustar sylvainsylvain00000000000000/* This file is part of Checkbox. Copyright 2015 Canonical Ltd. Written by: Sylvain Pineau Checkbox is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3, as published by the Free Software Foundation. Checkbox is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Checkbox. If not, see . */ import QtQuick 2.0 import Ubuntu.Components 0.1 Rectangle { width: 500 height: 500 MouseArea { anchors.fill: parent anchors.margins: 30 onPositionChanged: { if (timer2.running) { timer2.restart(); } } hoverEnabled: true } Column { spacing: units.gu(5) anchors.centerIn: parent Text { id: legend anchors.horizontalCenter: parent.horizontalCenter text: "Continuously move your mouse cursor" font.bold: true font.pointSize: 30 } Text { id: countdown anchors.horizontalCenter: parent.horizontalCenter text: " " font.pointSize: 40 } } Timer { id: timer1 interval: 1000 running: true repeat: true property int timeout: 11 onTriggered: { timeout = timeout - 1 countdown.text = timeout if (timeout <= 0) { running = false console.log("PASS") Qt.quit() } } } Timer { id: timer2 interval: 200 running: false repeat: true onTriggered: { running = false console.log("FAIL") Qt.quit() } } Timer { id: timer3 interval: 2000 running: true onTriggered: { timer2.running = true } } } plainbox-provider-checkbox-0.25/po/0000775000175000017500000000000012646152434020513 5ustar sylvainsylvain00000000000000plainbox-provider-checkbox-0.25/po/POTFILES.in0000664000175000017500000001275412646152433022300 0ustar sylvainsylvain00000000000000[encoding: UTF-8] [type: gettext/rfc822deb] jobs/audio.txt.in [type: gettext/rfc822deb] jobs/benchmarks.txt.in [type: gettext/rfc822deb] jobs/bluetooth.txt.in [type: gettext/rfc822deb] jobs/camera.txt.in [type: gettext/rfc822deb] jobs/codecs.txt.in [type: gettext/rfc822deb] jobs/cpu.txt.in [type: gettext/rfc822deb] jobs/daemons.txt.in [type: gettext/rfc822deb] jobs/disk.txt.in [type: gettext/rfc822deb] jobs/esata.txt.in [type: gettext/rfc822deb] jobs/ethernet.txt.in [type: gettext/rfc822deb] jobs/expresscard.txt.in [type: gettext/rfc822deb] jobs/fingerprint.txt.in [type: gettext/rfc822deb] jobs/firewire.txt.in [type: gettext/rfc822deb] jobs/firmware.txt.in [type: gettext/rfc822deb] jobs/floppy.txt.in [type: gettext/rfc822deb] jobs/graphics.txt.in [type: gettext/rfc822deb] jobs/hibernate.txt.in [type: gettext/rfc822deb] jobs/info.txt.in [type: gettext/rfc822deb] jobs/input.txt.in [type: gettext/rfc822deb] jobs/install.txt.in [type: gettext/rfc822deb] jobs/keys.txt.in [type: gettext/rfc822deb] jobs/led.txt.in [type: gettext/rfc822deb] jobs/local.txt.in [type: gettext/rfc822deb] jobs/mediacard.txt.in [type: gettext/rfc822deb] jobs/memory.txt.in [type: gettext/rfc822deb] jobs/mir.txt.in [type: gettext/rfc822deb] jobs/miscellanea.txt.in [type: gettext/rfc822deb] jobs/mobilebroadband.txt.in [type: gettext/rfc822deb] jobs/monitor.txt.in [type: gettext/rfc822deb] jobs/networking.txt.in [type: gettext/rfc822deb] jobs/optical.txt.in [type: gettext/rfc822deb] jobs/panel_clock_test.txt.in [type: gettext/rfc822deb] jobs/panel_reboot.txt.in [type: gettext/rfc822deb] jobs/peripheral.txt.in [type: gettext/rfc822deb] jobs/power-management.txt.in [type: gettext/rfc822deb] jobs/rendercheck.txt.in [type: gettext/rfc822deb] jobs/server-services.txt.in [type: gettext/rfc822deb] jobs/smoke.txt.in [type: gettext/rfc822deb] jobs/stress.txt.in [type: gettext/rfc822deb] jobs/suspend.txt.in [type: gettext/rfc822deb] jobs/touchpad.txt.in [type: gettext/rfc822deb] jobs/touchscreen.txt.in [type: gettext/rfc822deb] jobs/usb.txt.in [type: gettext/rfc822deb] jobs/user_apps.txt.in [type: gettext/rfc822deb] jobs/virtualization.txt.in [type: gettext/rfc822deb] jobs/wireless.txt.in [type: gettext/python] bin/accelerometer_test bin/alsa_info bin/alsa_record_playback [type: gettext/python] bin/ansi_parser [type: gettext/python] bin/audio_driver_info [type: gettext/python] bin/audio_settings [type: gettext/python] bin/audio_test [type: gettext/python] bin/battery_test bin/bluetooth_scan [type: gettext/python] bin/bluetooth_test [type: gettext/python] bin/brightness_test [type: gettext/python] bin/camera_test bin/check_is_laptop [type: gettext/python] bin/cking_suite [type: gettext/python] bin/color_depth_info bin/connect_wireless bin/cpu_offlining [type: gettext/python] bin/cpu_topology [type: gettext/python] bin/create_connection bin/cycle_vts bin/disk_read_performance_test [type: gettext/python] bin/disk_smart bin/disk_stats_test bin/dns_server_test [type: gettext/python] bin/filter_templates [type: gettext/python] bin/floppy_test [type: gettext/python] bin/frequency_governors_test [type: gettext/python] bin/fresh_rate_info [type: gettext/python] bin/fwts_test [type: gettext/python] bin/gateway_ping_test bin/gcov_tarball [type: gettext/python] bin/gpu_test [type: gettext/python] bin/gputest_benchmark [type: gettext/python] bin/graphic_memory_info [type: gettext/python] bin/graphics_driver [type: gettext/python] bin/graphics_modes_info [type: gettext/python] bin/graphics_stress_test [type: gettext/python] bin/gst_pipeline_test bin/ipmi_test [type: gettext/python] bin/key_test [type: gettext/python] bin/keyboard_test bin/lamp_test bin/led_hdd_test [type: gettext/python] bin/lock_screen_watcher [type: gettext/python] bin/lsmod_info bin/max_diskspace_used [type: gettext/python] bin/memory_compare [type: gettext/python] bin/memory_info [type: gettext/python] bin/memory_test [type: gettext/python] bin/mm-test [type: gettext/python] bin/network [type: gettext/python] bin/network_bandwidth_test [type: gettext/python] bin/network_check [type: gettext/python] bin/network_device_info [type: gettext/python] bin/network_info [type: gettext/python] bin/network_ntp_test bin/network_printer_test [type: gettext/python] bin/network_reconnect_resume_test [type: gettext/python] bin/network_restart bin/network_wait [type: gettext/python] bin/optical_detect [type: gettext/python] bin/optical_read_test bin/optical_write_test [type: gettext/python] bin/pm_log_check [type: gettext/python] bin/pm_test [type: gettext/python] bin/process_wait bin/pts_run [type: gettext/python] bin/pulse-active-port-change [type: gettext/python] bin/removable_storage_test [type: gettext/python] bin/removable_storage_watcher [type: gettext/python] bin/rendercheck_test [type: gettext/python] bin/resolution_test [type: gettext/python] bin/rotation_test [type: gettext/python] bin/run_templates bin/samba_test [type: gettext/python] bin/sleep_test [type: gettext/python] bin/sleep_test_log_check [type: gettext/python] bin/sleep_time_check bin/sources_test bin/spindown bin/storage_test bin/tomcat_test [type: gettext/python] bin/touchpad_driver_info [type: gettext/python] bin/touchpad_test [type: gettext/python] bin/udisks2_monitor [type: gettext/python] bin/virtualization [type: gettext/python] bin/volume_test [type: gettext/python] bin/wifi_time2reconnect [type: gettext/python] bin/window_test bin/wireless_ext bin/xen_test [type: gettext/python] bin/xml_sanitize [type: gettext/python] bin/xrandr_cycle [type: gettext/python] manage.py src/clocktest.c src/threaded_memtest.c data/resolution_test.qml plainbox-provider-checkbox-0.25/po/fr.po0000664000175000017500000054571712646152433021504 0ustar sylvainsylvain00000000000000# French translation for checkbox # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the checkbox package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: checkbox\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2016-01-14 14:48+0800\n" "PO-Revision-Date: 2015-11-18 11:05+0000\n" "Last-Translator: Pierre Slamich \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2016-01-15 05:08+0000\n" "X-Generator: Launchpad (build 17886)\n" #. description #: ../jobs/audio.txt.in:9 msgid "Test to detect audio devices" msgstr "Test afin de détecter des périphériques audio" #. description #: ../jobs/audio.txt.in:28 msgid "" "PURPOSE:\n" " This test will check that internal speakers work correctly\n" "STEPS:\n" " 1. Make sure that no external speakers or headphones are connected\n" " When testing a desktop, you can skip this test if there is no\n" " internal speaker, we will test the external output later\n" " 2. Commence the test to play a brief tone on your audio device\n" "VERIFICATION:\n" " Did you hear a tone?" msgstr "" #. summary #: ../jobs/audio.txt.in:46 msgid "HDMI audio test" msgstr "" #. summary #: ../jobs/audio.txt.in:79 msgid "DisplayPort audio test" msgstr "" #. summary #: ../jobs/audio.txt.in:112 msgid "Thunderbolt audio test" msgstr "" #. description #: ../jobs/audio.txt.in:156 msgid "" "PURPOSE:\n" " This test will check that headphones connector works correctly\n" "STEPS:\n" " 1. Connect a pair of headphones to your audio device\n" " 2. Commence the test to play a sound to your audio device\n" "VERIFICATION:\n" " Did you hear a sound through the headphones and did the sound play " "without any distortion, clicks or other strange noises from your headphones?" msgstr "" #. description #: ../jobs/audio.txt.in:182 msgid "" "PURPOSE:\n" " This test will check that recording sound using the onboard microphone " "works correctly\n" "STEPS:\n" " 1. Disconnect any external microphones that you have plugged in\n" " 2. Click \"Test\", then speak into your internal microphone\n" " 3. After a few seconds, your speech will be played back to you.\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/audio.txt.in:209 msgid "" "PURPOSE:\n" " This test will check that recording sound using an external microphone " "works correctly\n" "STEPS:\n" " 1. Connect a microphone to your microphone port\n" " 2. Click \"Test\", then speak into the external microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/audio.txt.in:235 msgid "" "PURPOSE:\n" " This test will check that a USB audio device works correctly\n" "STEPS:\n" " 1. Connect a USB audio device to your system\n" " 2. Click \"Test\", then speak into the microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back through the USB headphones?" msgstr "" #. description #: ../jobs/audio.txt.in:258 msgid "" "Play back a sound on the default output and listen for it on the default " "input." msgstr "" #. description #: ../jobs/audio.txt.in:267 msgid "" "Collect audio-related system information. This data can be used to simulate " "this computer's audio subsystem and perform more detailed tests under a " "controlled environment." msgstr "" #. description #: ../jobs/audio.txt.in:278 msgid "Attaches the audio hardware data collection log to the results." msgstr "" #. description #: ../jobs/audio.txt.in:286 msgid "" "PURPOSE:\n" " Check that the various audio channels are working properly\n" "STEPS:\n" " 1. Commence the test\n" "VERIFICATION:\n" " You should clearly hear a voice from the different audio channels" msgstr "" #. description #: ../jobs/audio.txt.in:314 msgid "" "PURPOSE:\n" " Check that external line out connection works correctly\n" "STEPS:\n" " 1. Insert cable to speakers (with built-in amplifiers) on the line out " "port\n" " 2. Open system sound preferences, 'Output' tab, select 'Line-out' on " "the connector list. Commence the test\n" " 3. On the system sound preferences, select 'Internal Audio' on the " "device list and click 'Test Speakers' to check left and right channel\n" "VERIFICATION:\n" " 1. Do you hear a sound in the speakers? The internal speakers should " "*not* be muted automatically\n" " 2. Do you hear the sound coming out on the corresponding channel?" msgstr "" #. description #: ../jobs/audio.txt.in:341 msgid "" "PURPOSE:\n" " Check that external line in connection works correctly\n" "STEPS:\n" " 1. Use a cable to connect the line in port to an external line out " "source.\n" " 2. Open system sound preferences, 'Input' tab, select 'Line-in' on the " "connector list. Commence the test\n" " 3. After a few seconds, your recording will be played back to you.\n" "VERIFICATION:\n" " Did you hear your recording?" msgstr "" #. description #: ../jobs/audio.txt.in:359 msgid "" "PURPOSE:\n" " Check that system detects speakers or headphones being plugged in\n" "STEPS:\n" " 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack\n" " 2. Locate the speaker / headphone jack on the device under test\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug headphones or speakers into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/audio.txt.in:380 msgid "" "PURPOSE:\n" " Check that system detects a microphone being plugged in\n" "STEPS:\n" " 1. Prepare a microphone with a standard 3.5mm jack\n" " 2. Locate the microphone jack on the device under test.\n" " Keep in mind that it may be shared with the headphone jack.\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug the microphone into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/audio.txt.in:411 msgid "" "PURPOSE:\n" " Check that balance control works correctly on internal speakers\n" "STEPS:\n" " 1. Check that moving the balance slider from left to right works " "smoothly\n" " 2. Commence the test to play an audio tone for 10 seconds.\n" " 3. Move the balance slider from left to right and back.\n" " 4. Check that actual speaker audio balance follows your setting.\n" "VERIFICATION:\n" " Does the slider move smoothly, as well as being followed by the setting " "by the actual audio output?" msgstr "" #. description #: ../jobs/audio.txt.in:439 msgid "" "PURPOSE:\n" " Check that balance control works correctly on external headphone\n" "STEPS:\n" " 1. Check that moving the balance slider from left to right works " "smoothly\n" " 2. Commence the test to play an audio tone for 10 seconds.\n" " 3. Move the balance slider from left to right and back.\n" " 4. Check that actual headphone audio balance follows your setting.\n" "VERIFICATION:\n" " Does the slider move smoothly, as well as being followed by the setting " "by the actual audio output?" msgstr "" #. description #: ../jobs/audio.txt.in:459 msgid "Test to detect audio devices after suspending 30 times." msgstr "" #. description #: ../jobs/audio.txt.in:478 msgid "" "PURPOSE:\n" " This test will check that internal speakers work correctly after " "suspending 30 times.\n" "STEPS:\n" " 1. Make sure that no external speakers or headphones are connected\n" " When testing a desktop, you can skip this test if there is no\n" " internal speaker, we will test the external output later\n" " 2. Commence the test to play a brief tone on your audio device\n" "VERIFICATION:\n" " Did you hear a tone?" msgstr "" #. description #: ../jobs/audio.txt.in:503 msgid "" "Play back a sound on the default output and listen for it on the default " "input, after suspending 30 times." msgstr "" #. description #: ../jobs/audio.txt.in:516 msgid "" "This test will verify that the volume levels are at an acceptable level on " "your local system. The test will validate that the volume is greater than " "or equal to minvol and less than or equal to maxvol for all sources (inputs) " "and sinks (outputs) recognized by PulseAudio. It will also validate that " "the active source and sink are not muted. You should not manually adjust " "the volume or mute before running this test." msgstr "" #. description #: ../jobs/audio.txt.in:532 msgid "Record mixer settings after suspending 30 times." msgstr "" #. description #: ../jobs/benchmarks.txt.in:6 msgid "Raw read timing benchmark of each disk using hdparm." msgstr "" #. summary #: ../jobs/benchmarks.txt.in:20 msgid "Benchmark for each disk" msgstr "" #. description #: ../jobs/benchmarks.txt.in:24 msgid "Cached read timing benchmark of each disk using hdparm." msgstr "" #. description #: ../jobs/benchmarks.txt.in:44 msgid "Run gtkperf to make sure that GTK based test cases work" msgstr "" #. description #: ../jobs/benchmarks.txt.in:53 msgid "Run Render-Bench XRender/Imlib2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:61 msgid "Run Qgears2 XRender Extension gearsfancy benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:69 msgid "Run Qgears2 XRender Extension image scaling benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:77 msgid "Run Qgears2 OpenGL gearsfancy benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:85 msgid "Run Qgears2 OpenGL image scaling benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:95 msgid "Run GLmark2-ES2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:106 msgid "Run GLmark2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:113 msgid "Run Unigine Santuary benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:120 msgid "Run Unigine Tropics benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:127 msgid "Run Unigine Heaven benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:134 msgid "Run Lightsmark benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:142 msgid "Run Cachebench Read benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:150 msgid "Run Cachebench Write benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:158 msgid "Run Cachebench Read / Modify / Write benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:166 msgid "Run Stream Copy benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:174 msgid "Run Stream Scale benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:182 msgid "Run Stream Add benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:190 msgid "Run Stream Triad benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:198 msgid "Run Network Loopback benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:205 msgid "Check the time needed to reconnect to a WIFI access point" msgstr "" #. description #: ../jobs/benchmarks.txt.in:213 msgid "Run Encode MP3 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:221 msgid "Run x264 H.264/AVC encoder benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:228 msgid "Run GnuPG benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:236 msgid "Run Compress PBZIP2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:244 msgid "Run Compress 7ZIP benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:252 msgid "Run N-Queens benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:260 msgid "Run Himeno benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:268 msgid "CPU utilization on an idle system." msgstr "" #. description #: ../jobs/benchmarks.txt.in:276 msgid "Disk utilization on an idle system." msgstr "" #. description #: ../jobs/benchmarks.txt.in:286 msgid "" "Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Fullscreen 1920x1080 " "no antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:298 msgid "" "Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Windowed 1024x640 no " "antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:310 msgid "" "Run GiMark, a geometry instancing test (OpenGL 3.3) Fullscreen 1920x1080 no " "antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:322 msgid "" "Run GiMark, a geometry instancing test (OpenGL 3.3) Windowed 1024x640 no " "antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:334 msgid "" "Run a tessellation test based on TessMark (OpenGL 4.0) Fullscreen 1920x1080 " "no antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:345 msgid "" "Run a tessellation test based on TessMark (OpenGL 4.0) Windowed 1024x640 no " "antialiasing" msgstr "" #. description #: ../jobs/bluetooth.txt.in:23 msgid "" "Automated test to store bluetooth device information in checkbox report" msgstr "" #. description #: ../jobs/bluetooth.txt.in:31 msgid "" "PURPOSE:\n" " This test will check that bluetooth connection works correctly\n" "STEPS:\n" " 1. Enable bluetooth on any mobile device (PDA, smartphone, etc.)\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select 'Setup new device'\n" " 4. Look for the device in the list and select it\n" " 5. In the device write the PIN code automatically chosen by the wizard\n" " 6. The device should pair with the computer\n" " 7. Right-click on the bluetooth icon and select browse files\n" " 8. Authorize the computer to browse the files in the device if needed\n" " 9. You should be able to browse the files\n" "VERIFICATION:\n" " Did all the steps work?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:52 msgid "" "PURPOSE:\n" " This test will check that you can transfer information through a " "bluetooth connection\n" "STEPS:\n" " 1. Make sure that you're able to browse the files in your mobile device\n" " 2. Copy a file from the computer to the mobile device\n" " 3. Copy a file from the mobile device to the computer\n" "VERIFICATION:\n" " Were all files copied correctly?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:77 msgid "" "PURPOSE:\n" " This test will check the High Fidelity Playback (A2DP) capability of " "your Bluetooth device,\n" " to see if you can hear audio from it.\n" "STEPS:\n" " 1. Enable and pair the bluetooth headset\n" " 2. Click \"Test\" to play a brief tone on your Bluetooth device, if it " "failed to set the Mode to A2DP,\n" " please select the device and change it manually in the \"Sound " "Settings\"\n" "VERIFICATION:\n" " Did you hear the tone?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:94 msgid "" "PURPOSE:\n" " This test will check the Telephony Duplex capability of your bluetooth " "device,\n" " to see if you can record and hear audio from it simultaneously.\n" "STEPS:\n" " 1. Enable the bluetooth headset\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select \"Setup new device\"\n" " 4. Look for the device in the list and pair it\n" " 5. Click the sound icon\n" " 6. Click \"Sound Settings\"\n" " 7. Select device and ensure Mode is set to \"Telephony Duplex " "(HSP/HFP)\"\n" " 8. Click \"Test\" to record and play for five seconds in the bluetooth " "device\n" "VERIFICATION:\n" " Did you hear the sound you recorded in the bluetooth with a slight " "intended delay?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:116 msgid "" "PURPOSE:\n" " This test will check that you can use a BlueTooth HID device\n" "STEPS:\n" " 1. Enable either a BT mouse or keyboard\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select 'Setup new device'\n" " 4. Look for the device in the list and select it\n" " 5. For mice, perform actions such as moving the pointer, right and left " "button clicks and double clicks\n" " 6. For keyboards, commence the test to launch a small tool. Enter some " "text into the tool and close it.\n" "VERIFICATION:\n" " Did the device work as expected?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:154 msgid "" "This is an automated Bluetooth file transfer test. It sends a large file to " "the device specified by the BTDEVADDR environment variable, then retrieves " "it again using Bluetooth and verifies the checksum to ensure the transfer " "didn't corrupt the file." msgstr "" #. description #: ../jobs/camera.txt.in:8 msgid "This Automated test attempts to detect a camera." msgstr "" #. description #: ../jobs/camera.txt.in:18 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works\n" "STEPS:\n" " 1. Click on Test to display a video capture from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the video capture?" msgstr "" #. description #: ../jobs/camera.txt.in:37 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works\n" "STEPS:\n" " 1. Click on Test to display a still image from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the image?" msgstr "" #. description #: ../jobs/camera.txt.in:54 msgid "" " Takes multiple pictures based on the resolutions supported by the camera " "and\n" " validates their size and that they are of a valid format." msgstr "" #. description #: ../jobs/codecs.txt.in:9 msgid "" "PURPOSE:\n" " This test will verify your system's ability to play Ogg Vorbis audio " "files.\n" "STEPS:\n" " 1. Click Test to play an Ogg Vorbis file (.ogg)\n" " 2. Please close the player to proceed.\n" "VERIFICATION:\n" " Did the sample play correctly?" msgstr "" #. description #: ../jobs/codecs.txt.in:26 msgid "" "PURPOSE:\n" " This test will verify your system's ability to play Wave Audio files.\n" "STEPS:\n" " 1. Select Test to play a Wave Audio format file (.wav)\n" " 2. Please close the player to proceed.\n" "VERIFICATION:\n" " Did the sample play correctly?" msgstr "" #. description #: ../jobs/cpu.txt.in:10 msgid "" "Test the CPU scaling capabilities using Firmware Test Suite (fwts cpufreq)." msgstr "" #. description #: ../jobs/cpu.txt.in:19 msgid "" "Attaches the log generated by cpu/scaling_test to the results submission." msgstr "" #. description #: ../jobs/cpu.txt.in:30 msgid "" "Test that the CPU can run at its max frequency using Firmware Test Suite " "(fwts cpufreq)." msgstr "" #. description #: ../jobs/cpu.txt.in:39 msgid "" "Attaches the log generated by cpu/maxfreq_test to the results submission." msgstr "" #. description #: ../jobs/cpu.txt.in:47 msgid "Tests the CPU for clock jitter." msgstr "" #. description #: ../jobs/cpu.txt.in:56 msgid "Test offlining of each CPU core in a multicore system." msgstr "" #. description #: ../jobs/cpu.txt.in:65 msgid "This test checks cpu topology for accuracy between proc and sysfs." msgstr "" #. description #: ../jobs/cpu.txt.in:74 msgid "This test checks that CPU frequency governors are obeyed when set." msgstr "" #. description #: ../jobs/cpu.txt.in:83 msgid "Validate that the Vector Floating Point Unit is running on ARM device" msgstr "" #. description #: ../jobs/cpu.txt.in:92 msgid "Run Firmware Test Suite (fwts) cstates tests." msgstr "" #. description #: ../jobs/cpu.txt.in:104 ../jobs/firmware.txt.in:71 msgid "Attaches the FWTS desktop diagnosis results log to the submission" msgstr "" #. description #: ../jobs/daemons.txt.in:6 msgid "Test if the atd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:13 msgid "Test if the cron daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:20 msgid "Test if the cupsd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:27 msgid "Test if the getty daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:34 msgid "Test if the init daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:41 msgid "Test if the klogd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:48 msgid "Test if the nmbd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:55 msgid "Test if the smbd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:62 msgid "Test if the syslogd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:70 msgid "Test if the udevd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:77 msgid "Test if the winbindd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/disk.txt.in:12 msgid "" "Displays information about each disk detected on the system under test." msgstr "" #. summary #: ../jobs/disk.txt.in:27 msgid "Disk statistics for /dev/{name}" msgstr "" #. description #: ../jobs/disk.txt.in:28 msgid "" "This test checks disk stats, generates some activity and rechecks stats to " "verify they've changed. It also verifies that disks appear in the various " "files they're supposed to." msgstr "" #. description #: ../jobs/disk.txt.in:28 msgid "This test will inspect the following disk:" msgstr "" #. description #: ../jobs/disk.txt.in:28 msgid "" " product name: {product}\n" " sysfs path: {path}\n" " device node path: /dev/{name}" msgstr "" #. summary #: ../jobs/disk.txt.in:40 msgid "Check stats changes for each disk" msgstr "" #. description #: ../jobs/disk.txt.in:44 msgid "" "This test generates some disk activity and checks the stats to ensure drive " "activity is being recorded properly." msgstr "" #. summary #: ../jobs/disk.txt.in:62 msgid "SMART test" msgstr "" #. description #: ../jobs/disk.txt.in:68 msgid "This tests the SMART capabilities of disks detected on the system." msgstr "" #. summary #: ../jobs/disk.txt.in:86 msgid "Verify system storage performs at or above baseline performance" msgstr "" #. description #: ../jobs/disk.txt.in:91 msgid "Verify system storage performs at or above a baseline speed." msgstr "" #. summary #: ../jobs/disk.txt.in:107 msgid "" "Verify that storage devices, such as Fibre Channel and RAID, perform under " "stress." msgstr "" #. description #: ../jobs/disk.txt.in:112 msgid "" "Verify that storage devices, such as Fibre Channel and RAID, perform under " "stress without data loss or corruption." msgstr "" #. description #: ../jobs/disk.txt.in:138 msgid "" "Some new hard drives include a feature that parks the drive heads after a " "short period of inactivity. This is a power-saving feature, but it can have " "a bad interaction with the operating system that results in the drive " "constantly parked then activated. This produces excess wear on the drive, " "potentially leading to early failures." msgstr "" #. description #: ../jobs/disk.txt.in:151 msgid "" "PURPOSE:\n" " This test checks that a systems drive protection mechanism works properly.\n" "STEPS:\n" " 1. Click on Test\n" " 2. Move the system under test around, ensuring it is raised and lowered at " "some point.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/esata.txt.in:5 msgid "" "PURPOSE:\n" " This test will check the system can detect the insertion of an eSATA " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will\n" " timeout and fail if the insertion has not been detected within 20 " "seconds.\n" " 2. Plug an eSATA HDD into an available eSATA port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/esata.txt.in:22 msgid "" "This is an automated test which performs read/write operations on an " "attached eSATA HDD" msgstr "" #. description #: ../jobs/esata.txt.in:31 msgid "" "PURPOSE:\n" " This test will check the system can detect the removal of an eSATA HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will timeout and fail if\n" " the removal has not been detected within 20 seconds.\n" " 2. Remove the previously attached eSATA HDD from the eSATA port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/ethernet.txt.in:14 msgid "" "Test to detect and return information about available network controllers on " "the system under test." msgstr "" #. description #: ../jobs/ethernet.txt.in:26 msgid "" "Gathers some info on the current state of your network devices. If no " "devices are found, the test will exit with an error." msgstr "" #. description #: ../jobs/ethernet.txt.in:35 msgid "" "PURPOSE:\n" " This test will check your wired connection\n" "STEPS:\n" " 1. Click on the Network icon in the top panel\n" " 2. Select a network below the \"Wired network\" section\n" " 3. Click \"Test\" to verify that it's possible to establish a HTTP " "connection\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" #. summary #: ../jobs/ethernet.txt.in:52 msgid "Multi-NIC Iperf testing for NIC {interface}" msgstr "" #. description #: ../jobs/ethernet.txt.in:62 msgid "" "This test uses iperf to ensure network devices pass data at an acceptable " "minimum percentage of advertized speed." msgstr "" #. summary #: ../jobs/ethernet.txt.in:73 msgid "Multi-NIC Iperf3 testing for NIC {interface}" msgstr "" #. description #: ../jobs/ethernet.txt.in:83 msgid "" "This test uses iperf3 to ensure network devices pass data at an acceptable " "minimum percentage of advertized speed." msgstr "" #. summary #: ../jobs/ethernet.txt.in:94 msgid "ethtool check for NIC {interface}" msgstr "" #. description #: ../jobs/ethernet.txt.in:100 msgid "" "This test executes ethtool requests against ethernet device {__index__} " "({interface})." msgstr "" #. summary #: ../jobs/ethernet.txt.in:110 msgid "Maximum bandwidth test of device {__index__} ({interface})" msgstr "" #. purpose #: ../jobs/ethernet.txt.in:119 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of each ethernet interface." msgstr "" #. steps #: ../jobs/ethernet.txt.in:122 ../jobs/mobilebroadband.txt.in:105 #: ../jobs/wireless.txt.in:694 msgid "" "1. Click \"Test\". 2. Read the network test summary and confirm that the " "throughput is acceptable. 3. If needed, click \"Test\" again to repeat the " "transfer test." msgstr "" #. verification #: ../jobs/ethernet.txt.in:126 ../jobs/mobilebroadband.txt.in:109 #: ../jobs/wireless.txt.in:698 msgid "" "Was the reported throughput acceptable for the type and maximum speed of " "this interface?" msgstr "" #. summary #: ../jobs/ethernet.txt.in:136 msgid "" "Stress and performance test of ethernet device {__index__} ({interface})" msgstr "" #. description #: ../jobs/ethernet.txt.in:142 msgid "" "Automated test that tests performance of ethernet device {__index__} " "({interface})." msgstr "" #. description #: ../jobs/expresscard.txt.in:4 msgid "" "PURPOSE:\n" " This will verify that an ExpressCard slot can detect inserted devices.\n" "STEPS:\n" " Skip this test if you do not have an ExpressCard slot.\n" " 1. Plug an ExpressCard device into the ExpressCard slot\n" "VERIFICATION:\n" " Was the device correctly detected?" msgstr "" #. description #: ../jobs/fingerprint.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that a fingerprint reader will work properly for " "logging into your system. This test case assumes that there's a testing " "account from which test cases are run and a personal account that the tester " "uses to verify the fingerprint reader\n" "STEPS:\n" " 1. Click on the User indicator on the left side of the panel (your user " "name).\n" " 2. Select \"Switch User Account\"\n" " 3. On the LightDM screen select your username.\n" " 4. Use the fingerprint reader to login.\n" " 5. Click on the user switcher applet.\n" " 6. Select the testing account to continue running tests.\n" "VERIFICATION:\n" " Did the authentication procedure work correctly?" msgstr "" #. description #: ../jobs/fingerprint.txt.in:20 msgid "" "PURPOSE:\n" " This test will verify that a fingerprint reader can be used to unlock a " "locked system.\n" "STEPS:\n" " 1. Click on the Session indicator (Cog icon on the Left side of the " "panel) .\n" " 2. Select 'Lock screen'.\n" " 3. Press any key or move the mouse.\n" " 4. A window should appear that provides the ability to unlock either " "typing your password or using fingerprint authentication.\n" " 5. Use the fingerprint reader to unlock.\n" " 6. Your screen should be unlocked.\n" "VERIFICATION:\n" " Did the authentication procedure work correctly?" msgstr "" #. description #: ../jobs/firewire.txt.in:6 msgid "" "PURPOSE:\n" " This test will check the system can detect the insertion of a FireWire " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will\n" " timeout and fail if the insertion has not been detected within 20 " "seconds.\n" " 2. Plug a FireWire HDD into an available FireWire port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/firewire.txt.in:24 msgid "" "This is an automated test which performs read/write operations on an " "attached FireWire HDD" msgstr "" #. description #: ../jobs/firewire.txt.in:34 msgid "" "PURPOSE:\n" " This test will check the system can detect the removal of a FireWire " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will timeout and fail if\n" " the removal has not been detected within 20 seconds.\n" " 2. Remove the previously attached FireWire HDD from the FireWire port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/firmware.txt.in:25 msgid "Automated tests for firmware using Firmware Test Suite." msgstr "" #. description #: ../jobs/firmware.txt.in:45 msgid "" "Run Firmware Test Suite (fwts) QA-concerned desktop-specific diagnosis tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:47 msgid "Run FWTS QA-concerned desktop-specific diagnosis tests." msgstr "" #. description #: ../jobs/firmware.txt.in:58 msgid "" "Run Firmware Test Suite (fwts) HWE-concerned desktop-specific diagnosis " "tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:60 msgid "Run FWTS HWE-concerned desktop-specific diagnosis tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:72 msgid "Attach FWTS desktop diagnosis log to submission" msgstr "" #. description #: ../jobs/firmware.txt.in:80 msgid "" "Attaches the FWTS desktop diagnosis results log to the submission (to HWE)" msgstr "" #. summary #: ../jobs/firmware.txt.in:81 msgid "Attach FWTS desktop diagnosis log to submission (to HWE)" msgstr "" #. summary #: ../jobs/firmware.txt.in:86 msgid "No _REV interface in ACPI [DS]SDT tables" msgstr "" #. description #: ../jobs/firmware.txt.in:90 msgid "" "This Automated test checks misuse of the _REV interface in ACPI DSDT and " "SSDT tables" msgstr "" #. description #: ../jobs/floppy.txt.in:5 msgid "Floppy test" msgstr "" #. summary #: ../jobs/graphics.txt.in:4 msgid "Driver version tests" msgstr "" #. description #: ../jobs/graphics.txt.in:23 msgid "Test to output the Xorg version" msgstr "" #. summary #: ../jobs/graphics.txt.in:24 msgid "Test Xorg version" msgstr "" #. summary #: ../jobs/graphics.txt.in:29 msgid "Resolution change tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:61 msgid "Test that the X process is running." msgstr "" #. description #: ../jobs/graphics.txt.in:69 msgid "Test that the X is not running in failsafe mode." msgstr "" #. summary #: ../jobs/graphics.txt.in:70 msgid "Test that X is not in failsafe mode." msgstr "" #. summary #: ../jobs/graphics.txt.in:101 msgid "Default resolution tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:126 msgid "Minimum resolution tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:147 msgid "Maximum resolution tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:178 msgid "Mode tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:194 msgid "Color depth tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:210 msgid "Refresh rate tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:225 msgid "Graphic memory tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:240 msgid "Display video test" msgstr "" #. description #: ../jobs/graphics.txt.in:266 msgid "Check that VESA drivers are not in use" msgstr "" #. summary #: ../jobs/graphics.txt.in:267 msgid "Test that VESA drivers are not in use" msgstr "" #. summary #: ../jobs/graphics.txt.in:272 msgid "Resolution cycling tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:296 msgid "Rotation tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:320 msgid "Compiz support tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:337 msgid "Unity support tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:354 msgid "glxgears tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:378 msgid "3D window open/close tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:395 msgid "3D window with suspend/resume tests" msgstr "" #. description #: ../jobs/graphics.txt.in:411 msgid "Multiple 3D window open/close" msgstr "" #. summary #: ../jobs/graphics.txt.in:412 msgid "Multiple 3D window open/close tests" msgstr "" #. description #: ../jobs/graphics.txt.in:428 msgid "3D window movement" msgstr "" #. summary #: ../jobs/graphics.txt.in:429 msgid "3D window movement tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:448 msgid "screenshot tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:470 msgid "screenshot attachment tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:486 msgid "full screen video screenshot tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:516 msgid "GPU switch prompt tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:539 msgid "full screen video attachment tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:555 msgid "Obtains a simple screen capture" msgstr "" #. description #: ../jobs/graphics.txt.in:559 msgid "Obtains a simple screen capture using gnome-screenshot if present" msgstr "" #. summary #: ../jobs/graphics.txt.in:564 msgid "Attaches a simple screen capture" msgstr "" #. description #: ../jobs/graphics.txt.in:568 msgid "Attaches the simple screen capture file" msgstr "" #. summary #: ../jobs/graphics.txt.in:583 msgid "Obtains a simple screen capture of {product}" msgstr "" #. description #: ../jobs/graphics.txt.in:587 msgid "" "Obtains a simple screen capture of {product} using gnome-screenshot if " "present" msgstr "" #. summary #: ../jobs/graphics.txt.in:596 msgid "Attaches a simple screen capture of {product}" msgstr "" #. description #: ../jobs/graphics.txt.in:599 msgid "Attaches the simple screen capture file of {product}" msgstr "" #. description #: ../jobs/hibernate.txt.in:18 msgid "" "PURPOSE:\n" " This test will check to make sure your system can successfully hibernate " "(if supported)\n" "STEPS:\n" " 1. Click on Test\n" " 2. The system will hibernate and should wake itself within 5 minutes\n" " 3. If your system does not wake itself after 5 minutes, please press the " "power button to wake the system manually\n" " 4. If the system fails to resume from hibernate, please restart System " "Testing and mark this test as Failed\n" "VERIFICATION:\n" " Did the system successfully hibernate and did it work properly after " "waking up?" msgstr "" #. summary #: ../jobs/hibernate.txt.in:34 msgid "Hibernate test" msgstr "" #. description #: ../jobs/hibernate.txt.in:68 msgid "Automated check of the hibernate log for errors discovered by fwts" msgstr "" #. description #: ../jobs/hibernate.txt.in:77 msgid "attaches log from single hibernate/resume test to results" msgstr "" #. summary #: ../jobs/hibernate.txt.in:81 msgid "Hibernate log attach" msgstr "" #. description #: ../jobs/info.txt.in:17 msgid "Attaches a report of installed codecs for Intel HDA" msgstr "" #. description #: ../jobs/info.txt.in:24 msgid "Attaches a report of CPU information" msgstr "" #. summary #: ../jobs/info.txt.in:25 msgid "Attach a copy of /proc/cpuinfo" msgstr "" #. description #: ../jobs/info.txt.in:32 msgid "Attaches a copy of /var/log/dmesg to the test results" msgstr "" #. summary #: ../jobs/info.txt.in:33 msgid "Attach a copy of /var/log/dmesg" msgstr "" #. description #: ../jobs/info.txt.in:40 msgid "Attaches info on DMI" msgstr "" #. summary #: ../jobs/info.txt.in:41 msgid "Attach a copy of /sys/class/dmi/id/*" msgstr "" #. description #: ../jobs/info.txt.in:50 msgid "Attaches dmidecode output" msgstr "" #. summary #: ../jobs/info.txt.in:51 msgid "Attach a copy of of the output of dmidecode" msgstr "" #. description #: ../jobs/info.txt.in:59 msgid "Attaches lshw output" msgstr "" #. description #: ../jobs/info.txt.in:67 msgid "Attaches the firmware version" msgstr "" #. description #: ../jobs/info.txt.in:74 msgid "Attaches very verbose lspci output." msgstr "" #. summary #: ../jobs/info.txt.in:75 msgid "Attach a list of PCI devices" msgstr "" #. description #: ../jobs/info.txt.in:82 msgid "Attaches very verbose lspci output (with central database Query)." msgstr "" #. summary #: ../jobs/info.txt.in:85 msgid "Attach PCI configuration space hex dump" msgstr "" #. description #: ../jobs/info.txt.in:90 msgid "" " Attaches a hex dump of the standard part of the PCI configuration\n" " space for all PCI devices." msgstr "" #. description #: ../jobs/info.txt.in:101 msgid "Attaches a list of detected USB devices." msgstr "" #. description #: ../jobs/info.txt.in:108 msgid "Attaches info on system memory as seen in /proc/meminfo." msgstr "" #. description #: ../jobs/info.txt.in:115 msgid "Attaches the contents of the various modprobe conf files." msgstr "" #. summary #: ../jobs/info.txt.in:116 msgid "Attach the contents of modprobe configuration files" msgstr "" #. summary #: ../jobs/info.txt.in:121 msgid "Attach modinfo information" msgstr "" #. description #: ../jobs/info.txt.in:130 msgid "Attaches modinfo information for all currently loaded modules" msgstr "" #. description #: ../jobs/info.txt.in:138 msgid "Attaches the contents of the /etc/modules file." msgstr "" #. summary #: ../jobs/info.txt.in:139 msgid "Attach the contents of /etc/modules" msgstr "" #. description #: ../jobs/info.txt.in:146 msgid "Attaches the contents of various sysctl config files." msgstr "" #. summary #: ../jobs/info.txt.in:147 msgid "Attach sysctl configuration files." msgstr "" #. description #: ../jobs/info.txt.in:152 msgid "Attaches a report of sysfs attributes." msgstr "" #. summary #: ../jobs/info.txt.in:160 msgid "Attach detailed sysfs property output from udev" msgstr "" #. description #: ../jobs/info.txt.in:167 msgid "" "Attaches a dump of the udev database showing system hardware information." msgstr "" #. summary #: ../jobs/info.txt.in:168 msgid "Attach hardware database (udev)" msgstr "" #. description #: ../jobs/info.txt.in:175 msgid "Attaches the output of udev_resource, for debugging purposes" msgstr "" #. description #: ../jobs/info.txt.in:183 msgid "Attaches a tarball of gcov data if present." msgstr "" #. description #: ../jobs/info.txt.in:190 msgid "Attaches a list of the currently running kernel modules." msgstr "" #. summary #: ../jobs/info.txt.in:191 msgid "Attach a list of currently running kernel modules" msgstr "" #. summary #: ../jobs/info.txt.in:198 msgid "Attaches json dumps of installed dkms package information." msgstr "" #. description #: ../jobs/info.txt.in:205 msgid "Attaches the contents of /proc/acpi/sleep if it exists." msgstr "" #. description #: ../jobs/info.txt.in:210 msgid "Bootchart information." msgstr "" #. summary #: ../jobs/info.txt.in:218 msgid "SATA/IDE device information." msgstr "" #. description #: ../jobs/info.txt.in:221 msgid "Attaches SATA/IDE device information reported by hdparm." msgstr "" #. description #: ../jobs/info.txt.in:243 msgid "Attaches the bootchart png file for bootchart runs" msgstr "" #. description #: ../jobs/info.txt.in:252 msgid "Attaches the bootchart log for bootchart test runs." msgstr "" #. description #: ../jobs/info.txt.in:261 msgid "installs the installer bootchart tarball if it exists." msgstr "" #. description #: ../jobs/info.txt.in:269 msgid "Attaches the installer debug log if it exists." msgstr "" #. description #: ../jobs/info.txt.in:277 msgid "" "Returns the name, driver name and driver version of any touchpad discovered " "on the system." msgstr "" #. description #: ../jobs/info.txt.in:290 msgid "Lists the device driver and version for all audio devices." msgstr "" #. description #: ../jobs/info.txt.in:301 msgid "Provides information about network devices" msgstr "" #. description #: ../jobs/info.txt.in:308 msgid "Provides information about wwan/mobile broadband devices" msgstr "" #. description #: ../jobs/info.txt.in:314 msgid "Provides information about displays attached to the system" msgstr "" #. description #: ../jobs/info.txt.in:322 msgid "Attaches information about disk partitions" msgstr "" #. description #: ../jobs/info.txt.in:328 msgid "Attaches the buildstamp identifier for the preinstalled OS" msgstr "" #. summary #: ../jobs/info.txt.in:329 msgid "Attach /etc/buildstamp" msgstr "" #. description #: ../jobs/info.txt.in:339 msgid "Check existence of recovery partition" msgstr "" #. description #: ../jobs/info.txt.in:350 msgid "Check the recovery type is dell or not" msgstr "" #. summary #: ../jobs/info.txt.in:360 msgid "Attach the recovery partition versions" msgstr "" #. description #: ../jobs/info.txt.in:361 msgid "" "Attach the recovery partition version image_version is the preinstalled OS " "image version bto_version is only for dell_recovery Example: image_version: " "somerville-trusty-amd64-20140620-0 bto_version: A00_dell-bto-trusty-houston-" "15-A11-iso-20141203-0.iso" msgstr "" #. summary #: ../jobs/info.txt.in:377 msgid "Attach the bto.xml in Dell recovery partition" msgstr "" #. description #: ../jobs/info.txt.in:378 msgid "" "bto.xml is basically a Fish manifest The information include:\n" " - fish packages\n" " - dell recovery stage 2 boot log" msgstr "" #. description #: ../jobs/info.txt.in:389 msgid "" "Attaches the debug log from the virtualization/kvm_check_vm test to the " "results submission." msgstr "" #. description #: ../jobs/info.txt.in:399 msgid "Attaches the kernel command line used to boot" msgstr "" #. summary #: ../jobs/info.txt.in:400 msgid "Attach a copy of /proc/cmdline" msgstr "" #. description #: ../jobs/input.txt.in:7 msgid "Pointing device tests." msgstr "" #. description #: ../jobs/input.txt.in:27 msgid "" "PURPOSE:\n" " This test will test your pointing device\n" "STEPS:\n" " 1. Move the cursor using the pointing device or touch the screen.\n" " 2. Perform some single/double/right click operations.\n" "VERIFICATION:\n" " Did the pointing device work as expected?" msgstr "" #. description #: ../jobs/input.txt.in:42 msgid "" "PURPOSE:\n" " This test will test your keyboard\n" "STEPS:\n" " 1. Click on Test\n" " 2. On the open text area, use your keyboard to type something\n" "VERIFICATION:\n" " Is your keyboard working properly?" msgstr "" #. description #: ../jobs/input.txt.in:55 msgid "" "PURPOSE:\n" " Manual detection of accelerometer.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Is this system supposed to have an accelerometer?" msgstr "" #. description #: ../jobs/input.txt.in:70 msgid "" "PURPOSE:\n" " This test will test your accelerometer to see if it is detected\n" " and operational as a joystick device.\n" "STEPS:\n" " 1. Click on Test\n" " 2. Tilt your hardware in the directions onscreen until the axis " "threshold is met.\n" "VERIFICATION:\n" " Is your accelerometer properly detected? Can you use the device?" msgstr "" #. summary #: ../jobs/input.txt.in:85 msgid "Create click tests for pointing devices." msgstr "" #. description #: ../jobs/input.txt.in:86 msgid "Click tests for pointing devices." msgstr "" #. description #: ../jobs/install.txt.in:6 msgid "" "Tests to see that apt can access repositories and get updates (does not " "install updates). This is done to confirm that you could recover from an " "incomplete or broken update." msgstr "" #. description #: ../jobs/keys.txt.in:8 msgid "" "PURPOSE:\n" " This test will test the screen lock key\n" "STEPS:\n" " 1. Commence the test. If there is no such key, please skip this test.\n" " 2. Press the lock screen button on the keyboard in 30 seconds.\n" " 3. If the screen is locked, move the mouse or press any key to activate " "the prompt.\n" " 4. Input the password to unlock the screen.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/keys.txt.in:25 msgid "" "PURPOSE:\n" " This test will test the brightness key\n" "STEPS:\n" " 1. Press the brightness buttons on the keyboard\n" "VERIFICATION:\n" " Did the brightness change following to your key presses?" msgstr "" #. description #: ../jobs/keys.txt.in:41 msgid "" "PURPOSE:\n" " This test will test the volume keys of your keyboard\n" "STEPS:\n" " Skip this test if your computer has no volume keys.\n" " 1. Click test to open a window on which to test the volume keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:59 msgid "" "PURPOSE:\n" " This test will test the mute key of your keyboard\n" "STEPS:\n" " 1. Click test to open a window on which to test the mute key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the mute key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:74 msgid "" "PURPOSE:\n" " This test will test the sleep key\n" "STEPS:\n" " 1. Press the sleep key on the keyboard\n" " 2. Wake your system up by pressing the power button\n" "VERIFICATION:\n" " Did the system go to sleep after pressing the sleep key?" msgstr "" #. description #: ../jobs/keys.txt.in:90 msgid "" "PURPOSE:\n" " This test will test the battery information key\n" "STEPS:\n" " Skip this test if you do not have a Battery Button.\n" " 1. Click Test to begin\n" " 2. Press the Battery Info button (or combo like Fn+F3)\n" " 3: Close the Power Statistics tool if it opens\n" "VERIFICATION:\n" " Did the Battery Info key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:106 msgid "" "PURPOSE:\n" " This test will test the wireless key\n" "STEPS:\n" " 1. Press the wireless key on the keyboard\n" " 2. Check that the wifi LED turns off or changes color\n" " 3. Check that wireless is disabled\n" " 4. Press the same key again\n" " 5. Check that the wifi LED turns on or changes color\n" " 6. Check that wireless is enabled\n" "VERIFICATION:\n" " Did the wireless turn off on the first press and on again on the " "second?\n" " (NOTE: the LED functionality will be reviewed in a following test. " "Please\n" " only consider the functionality of the wifi itself here.)" msgstr "" #. description #: ../jobs/keys.txt.in:129 msgid "" "PURPOSE:\n" " This test will test the media keys of your keyboard\n" "STEPS:\n" " Skip this test if your computer has no media keys.\n" " 1. Click test to open a window on which to test the media keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:147 msgid "" "PURPOSE:\n" " This test will test the super key of your keyboard\n" "STEPS:\n" " 1. Click test to open a window on which to test the super key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the super key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:161 msgid "" "PURPOSE:\n" " Validate that the External Video hot key is working as expected\n" "STEPS:\n" " 1. Plug in an external monitor\n" " 2. Press the display hot key to change the monitors configuration\n" "VERIFICATION:\n" " Check that the video signal can be mirrored, extended, displayed on " "external or onboard only." msgstr "" #. description #: ../jobs/keys.txt.in:175 msgid "" "PURPOSE:\n" " Verify touchpad hotkey toggles touchpad functionality on and off\n" "STEPS:\n" " 1. Verify the touchpad is functional\n" " 2. Tap the touchpad toggle hotkey\n" " 3. Tap the touchpad toggle hotkey again\n" "VERIFICATION:\n" " Verify the touchpad has been disabled and re-enabled." msgstr "" #. description #: ../jobs/keys.txt.in:190 msgid "" "PURPOSE:\n" " Verify that the keyboard backlight toggle key works properly\n" "STEPS:\n" " 1. Tap the keyboard backlight key\n" " 2. Confirm that the keyboard backlight was toggled to the opposite " "state\n" " 3. Tap the keyboard backlight key again\n" " 4. Confirm that the keyboard backlight was toggled to the opposite " "state\n" "VERIFICATION:\n" " Did the keyboard backlight state change on each press?" msgstr "" #. description #: ../jobs/keys.txt.in:218 msgid "" "PURPOSE:\n" " This test will test the mute key for your microphone\n" "STEPS:\n" " 1. Click \"Test\" then speak: \"Imagination is more important than " "knowledge\" (or anything else) into your microphone.\n" " 2. While you are speaking, please press the mute key for the microphone " "to mute it and press it again to unmute.\n" " 3. After a few seconds, your speech will be played back to you. If the " "key works, your speech should be interrupted for a few seconds.\n" "VERIFICATION:\n" " Does the microphone mute key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:233 msgid "" "PURPOSE:\n" " This test will test the hibernate key\n" "STEPS:\n" " 1. Press the hibernate key on the keyboard\n" " 2. Check that the system hibernated correctly\n" " 3. Wake your system after hibernating by pressing the power button\n" "VERIFICATION:\n" " Did the system go to hibernate after pressing the hibernate key?" msgstr "" #. description #: ../jobs/keys.txt.in:248 msgid "" "PURPOSE:\n" " This test will test the keyboard overhead light key or switch\n" "STEPS:\n" " 1. Press the keyboard overhead light key or swtich on the light\n" " 2. Check the the keyboard overhead light turn on correctly\n" " 3. Press the key or switch again to toggle off the light\n" "VERIFICATION:\n" " Did the keyboard overhead light key or switch turns on and off the light?" msgstr "" #. description #: ../jobs/led.txt.in:5 msgid "" "PURPOSE:\n" " Power LED verification\n" "STEPS:\n" " 1. Power LED should be on while device is switched on\n" "VERIFICATION:\n" " Does the power LED light as expected?" msgstr "" #. description #: ../jobs/led.txt.in:18 msgid "" "PURPOSE:\n" " Power LED verification\n" "STEPS:\n" " 1. The Power LED should blink or change color while the system is " "suspended\n" "VERIFICATION:\n" " Did the Power LED blink or change color while the system was suspended " "for the previous suspend test?" msgstr "" #. description #: ../jobs/led.txt.in:31 msgid "" "PURPOSE:\n" " Suspend LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a dedicated Suspend LED.\n" " 1. The Suspend LED should blink or change color while the system is\n" " suspended\n" "VERIFICATION\n" " Did the Suspend LED blink or change color while the system was suspended?" msgstr "" #. description #: ../jobs/led.txt.in:45 msgid "" "PURPOSE:\n" " Validate that the battery light shows charging status\n" "STEPS:\n" " 1. Let system run on battery for a while\n" " 2. Plug in AC plug\n" "VERIFICATION:\n" " Did the battery indicator LED turn orange?" msgstr "" #. description #: ../jobs/led.txt.in:58 msgid "" "PURPOSE:\n" " Validate that the battery LED properly displays charged status\n" "STEPS:\n" " 1. Let system run on battery for a short time\n" " 2. Plug in AC\n" " 3. Let system run on AC\n" "VERIFICATION:\n" " Does the orange battery LED shut off when system is fully charged?" msgstr "" #. description #: ../jobs/led.txt.in:72 msgid "" "PURPOSE:\n" " Validate that the battery LED indicated low power\n" "STEPS:\n" " 1. Let system run on battery for several hours\n" " 2. Monitor battery LED carefully\n" "VERIFICATION:\n" " Does the LED light orange when battery is low?" msgstr "" #. description #: ../jobs/led.txt.in:86 msgid "" "PURPOSE:\n" " HDD LED verification\n" "STEPS:\n" " 1. Select \"Test\" to write and read a temporary file for a few seconds\n" " 2. HDD LED should light when writing to/reading from HDD\n" "VERIFICATION:\n" " Did the HDD LED light?" msgstr "" #. description #: ../jobs/led.txt.in:100 msgid "" "PURPOSE:\n" " Numeric keypad LED verification\n" "STEPS:\n" " 1. Press \"Block Num\" key to toggle numeric keypad LED\n" " 2. Click on the \"Test\" button to open a window to verify your typing\n" " 3. Type using the numeric keypad both when the LED is on and off\n" "VERIFICATION:\n" " 1. Numeric keypad LED status should toggle everytime the \"Block Num\" " "key is pressed\n" " 2. Numbers should only be entered in the keyboard verification window " "when the LED is on" msgstr "" #. description #: ../jobs/led.txt.in:115 msgid "" "PURPOSE:\n" " Block cap keys LED verification\n" "STEPS:\n" " 1. Press \"Block Cap Keys\" to activate/deactivate cap keys blocking\n" " 2. Cap Keys LED should be switched on/off every time the key is pressed\n" "VERIFICATION:\n" " Did the Cap Keys LED light as expected?" msgstr "" #. description #: ../jobs/led.txt.in:129 msgid "" "PURPOSE:\n" " WLAN LED verification\n" "STEPS:\n" " 1. During the keys/wireless test you should have observed the\n" " wireless LED while turning wireless back on.\n" " 2. WLAN LED should light or change color when wireless is turned on\n" "VERIFICATION:\n" " Did the WLAN LED turn on or change color as expected?" msgstr "" #. description #: ../jobs/led.txt.in:144 msgid "" "PURPOSE:\n" " Validate that WLAN LED shuts off when disabled\n" "STEPS:\n" " 1. During the keys/wireless test you should have observed the WLAN LED\n" " while performing that test after turning wireless off.\n" " 2. WLAN LED should turn off or change color when wireless is turned off\n" "VERIFICATION:\n" " Did the WLAN LED turn off or change color as expected?" msgstr "" #. description #: ../jobs/led.txt.in:159 msgid "" "PURPOSE:\n" " Validate that the Bluetooth LED turns on and off when BT is " "enabled/disabled\n" "STEPS:\n" " 1. Switch bluetooth off from a hardware switch (if present)\n" " 2. Switch bluetooth back on\n" " 3. Switch bluetooth off from the panel applet\n" " 4. Switch bluetooth back on\n" "VERIFICATION:\n" " Did the bluetooth LED turn off and on twice?" msgstr "" #. description #: ../jobs/led.txt.in:176 msgid "" "PURPOSE:\n" " Camera LED verification\n" "STEPS:\n" " 1. Select Test to activate camera\n" " 2. Camera LED should light for a few seconds\n" "VERIFICATION:\n" " Did the camera LED light?" msgstr "" #. description #: ../jobs/led.txt.in:189 msgid "" "PURPOSE:\n" " Touchpad LED verification\n" "STEPS:\n" " 1. Click on the touchpad button or press key combination to " "enable/disable touchpad button\n" " 2. Slide your finger on the touchpad\n" "VERIFICATION:\n" " 1. Touchpad LED status should toggle everytime the button is clicked or " "the key combination is pressed\n" " 2. When the LED is on, the mouse pointer should move on touchpad usage\n" " 3. When the LED is off, the mouse pointer should not move on touchpad " "usage" msgstr "" #. description #: ../jobs/led.txt.in:204 msgid "" "PURPOSE:\n" " Wireless (WLAN + Bluetooth) LED verification\n" "STEPS:\n" " 1. Make sure WLAN connection is established and Bluetooth is enabled.\n" " 2. WLAN/Bluetooth LED should light\n" " 3. Switch WLAN and Bluetooth off from a hardware switch (if present)\n" " 4. Switch them back on\n" " 5. Switch WLAN and Bluetooth off from the panel applet\n" " 6. Switch them back on\n" "VERIFICATION:\n" " Did the WLAN/Bluetooth LED light as expected?" msgstr "" #. description #: ../jobs/led.txt.in:222 msgid "" "PURPOSE:\n" " Audio Mute LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a special Audio Mute LED.\n" " 1. Press the Mute key twice and observe the Audio LED to determine if " "it\n" " either turned off and on or changed colors.\n" "VERIFICATION:\n" " Did the Audio LED turn on and off or change color as expected?" msgstr "" #. description #: ../jobs/led.txt.in:237 msgid "" "PURPOSE:\n" " Microphone Mute LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a special Microphone Mute " "LED.\n" " 1. Press the Microphone Mute key twice and observe the Microphone LED " "to\n" " determine if it either turned off and on or changed colors.\n" "VERIFICATION:\n" " Did the Microphone Mute LED turn on and off or change color as expected?" msgstr "" #. description #: ../jobs/local.txt.in:3 msgid "Audio tests" msgstr "" #. description #: ../jobs/local.txt.in:10 msgid "Benchmarks tests" msgstr "" #. description #: ../jobs/local.txt.in:17 msgid "Bluetooth tests" msgstr "" #. description #: ../jobs/local.txt.in:24 msgid "Camera tests" msgstr "" #. description #: ../jobs/local.txt.in:31 msgid "Codec tests" msgstr "" #. description #: ../jobs/local.txt.in:38 msgid "CPU tests" msgstr "" #. description #: ../jobs/local.txt.in:45 msgid "System Daemon tests" msgstr "" #. description #: ../jobs/local.txt.in:52 msgid "Disk tests" msgstr "" #. description #: ../jobs/local.txt.in:59 msgid "Docking tests" msgstr "" #. description #: ../jobs/local.txt.in:66 msgid "Ethernet Device tests" msgstr "" #. description #: ../jobs/local.txt.in:73 msgid "eSATA disk tests" msgstr "" #. description #: ../jobs/local.txt.in:80 msgid "Fingerprint reader tests" msgstr "" #. description #: ../jobs/local.txt.in:87 msgid "Firewire disk tests" msgstr "" #. description #: ../jobs/local.txt.in:94 msgid "Firmware tests" msgstr "" #. description #: ../jobs/local.txt.in:101 msgid "Floppy disk tests" msgstr "" #. description #: ../jobs/local.txt.in:108 msgid "Graphics tests" msgstr "" #. description #: ../jobs/local.txt.in:115 msgid "Hibernation tests" msgstr "" #. description #: ../jobs/local.txt.in:122 msgid "Informational tests" msgstr "" #. description #: ../jobs/local.txt.in:129 msgid "Input Devices tests" msgstr "" #. description #: ../jobs/local.txt.in:136 msgid "Software Installation tests" msgstr "" #. description #: ../jobs/local.txt.in:143 msgid "Hotkey tests" msgstr "" #. description #: ../jobs/local.txt.in:150 msgid "LED tests" msgstr "" #. description #: ../jobs/local.txt.in:157 msgid "Media Card tests" msgstr "" #. description #: ../jobs/local.txt.in:164 msgid "Memory tests" msgstr "" #. description #: ../jobs/local.txt.in:171 msgid "Rendercheck tests" msgstr "" #. description #: ../jobs/local.txt.in:178 msgid "MIR tests" msgstr "" #. description #: ../jobs/local.txt.in:185 msgid "Miscellaneous tests" msgstr "" #. description #: ../jobs/local.txt.in:192 msgid "Monitor tests" msgstr "" #. description #: ../jobs/local.txt.in:199 msgid "Non-device specific networking tests" msgstr "" #. description #: ../jobs/local.txt.in:206 msgid "Optical Drive tests" msgstr "" #. description #: ../jobs/local.txt.in:213 msgid "Panel Clock Verification tests" msgstr "" #. description #: ../jobs/local.txt.in:220 msgid "Panel Reboot Verification tests" msgstr "" #. description #: ../jobs/local.txt.in:227 msgid "ExpressCard tests" msgstr "" #. description #: ../jobs/local.txt.in:234 msgid "Peripheral tests" msgstr "" #. description #: ../jobs/local.txt.in:241 msgid "Power Management tests" msgstr "" #. description #: ../jobs/local.txt.in:248 msgid "Server Services checks" msgstr "" #. description #: ../jobs/local.txt.in:255 msgid "Suspend tests" msgstr "" #. description #: ../jobs/local.txt.in:262 msgid "Thunderbolt tests" msgstr "" #. description #: ../jobs/local.txt.in:269 msgid "Touchpad tests" msgstr "" #. description #: ../jobs/local.txt.in:276 msgid "Touchscreen tests" msgstr "" #. description #: ../jobs/local.txt.in:283 msgid "USB tests" msgstr "" #. description #: ../jobs/local.txt.in:290 msgid "User Applications" msgstr "" #. description #: ../jobs/local.txt.in:297 msgid "Virtualization tests" msgstr "" #. description #: ../jobs/local.txt.in:304 msgid "Wireless networking tests" msgstr "" #. description #: ../jobs/local.txt.in:311 msgid "Mobile broadband tests" msgstr "" #. description #: ../jobs/local.txt.in:318 msgid "Stress tests" msgstr "" #. description #: ../jobs/local.txt.in:325 msgid "Smoke tests" msgstr "" #. description #: ../jobs/mediacard.txt.in:6 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Multimedia Card (MMC) media\n" "STEPS:\n" " 1. Click \"Test\" and then insert an MMC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:26 msgid "" "This test is automated and executes after the mediacard/mmc-insert test is " "run. It tests reading and writing to the MMC card." msgstr "" #. description #: ../jobs/mediacard.txt.in:36 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of the MMC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the MMC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:52 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED Secure Digital (SD) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:72 msgid "" "This test is automated and executes after the mediacard/sd-insert test is " "run. It tests reading and writing to the SD card." msgstr "" #. description #: ../jobs/mediacard.txt.in:82 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SD card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:100 msgid "" "This is a fully automated version of mediacard/sd-automated and assumes that " "the system under test has a memory card device plugged in prior to checkbox " "execution. It is intended for SRU automated testing." msgstr "" #. description #: ../jobs/mediacard.txt.in:110 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a UNLOCKED Secure Digital High-Capacity\n" " (SDHC) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SDHC card into the " "reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:131 msgid "" "This test is automated and executes after the mediacard/sdhc-insert test is " "run. It tests reading and writing to the SDHC card." msgstr "" #. description #: ../jobs/mediacard.txt.in:141 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SDHC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SDHC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:157 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Compact Flash (CF) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a CF card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:177 msgid "" "This test is automated and executes after the mediacard/cf-insert test is " "run. It tests reading and writing to the CF card." msgstr "" #. description #: ../jobs/mediacard.txt.in:187 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a CF card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the CF card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:203 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Secure Digital Extended Capacity (SDXC) media " "card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SDXC card into the " "reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:223 msgid "" "This test is automated and executes after the mediacard/sdxc-insert test is " "run. It tests reading and writing to the SDXC card." msgstr "" #. description #: ../jobs/mediacard.txt.in:233 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a SDXC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SDXC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:249 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Memory Stick (MS) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a MS card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:269 msgid "" "This test is automated and executes after the mediacard/ms-insert test is " "run. It tests reading and writing to the MS card." msgstr "" #. description #: ../jobs/mediacard.txt.in:279 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a MS card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the MS card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:295 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Memory Stick Pro (MSP) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a MSP card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:315 msgid "" "This test is automated and executes after the mediacard/msp-insert test is " "run. It tests reading and writing to the MSP card." msgstr "" #. description #: ../jobs/mediacard.txt.in:325 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a MSP card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MSP card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:341 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Extreme Digital (xD) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a xD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:361 msgid "" "This test is automated and executes after the mediacard/xd-insert test is " "run. It tests reading and writing to the xD card." msgstr "" #. description #: ../jobs/mediacard.txt.in:371 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a xD card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the xD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:389 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SD card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:405 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SDHC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:421 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MMC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:437 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert CF card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:453 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SDXC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:469 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MS card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:485 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MSP card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:501 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert xD card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/memory.txt.in:7 msgid "" "This test checks the amount of memory which is reporting in meminfo against " "the size of the memory modules detected by DMI." msgstr "" #. description #: ../jobs/memory.txt.in:19 msgid "" "Test to perform some basic stress and exercise of system memory. This test " "also includes an over-commit function to force swapping to disk, thus SUTs " "should have suitably large swap files for the amount of RAM they have " "installed." msgstr "" #. description #: ../jobs/mir.txt.in:5 msgid "MIR Integration tests" msgstr "" #. description #: ../jobs/mir.txt.in:21 msgid "MIR Acceptance tests" msgstr "" #. description #: ../jobs/miscellanea.txt.in:17 msgid "" "A meta-job that verifies the data necessary for a complete result submission " "are present. Failure indicates that the results are incomplete and may be " "rejected." msgstr "" #. description #: ../jobs/miscellanea.txt.in:25 msgid "" "PURPOSE:\n" " Keep tester related information in the report\n" "STEPS:\n" " 1. Tester Information\n" " 2. Please enter the following information in the comments field:\n" " a. Name\n" " b. Email Address\n" " c. Reason for this test run\n" "VERIFICATION:\n" " Nothing to verify for this test" msgstr "" #. description #: ../jobs/miscellanea.txt.in:44 msgid "" "PURPOSE:\n" " This test will check that the system can switch to a virtual terminal " "and back to X\n" "STEPS:\n" " 1. Click \"Test\" to switch to another virtual terminal and then back to " "X\n" "VERIFICATION:\n" " Did your screen change temporarily to a text console and then switch " "back to your current session?" msgstr "" #. description #: ../jobs/miscellanea.txt.in:59 msgid "Run Firmware Test Suite (fwts) automated tests." msgstr "" #. description #: ../jobs/miscellanea.txt.in:70 msgid "Attaches the miscellanes/fwts_test results log to the submission." msgstr "" #. description #: ../jobs/miscellanea.txt.in:78 msgid "Attaches the FWTS results log to the submission (to HWE)" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:79 msgid "Attach FWTS log to submission (to HWE)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:87 msgid "" "This will run some basic commands in-band against a BMC, verifying that IPMI " "works. Use of MAAS to deploy the system implicitly tests out-of-band BMC " "control." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:98 msgid "EFI-mode boot test" msgstr "" #. description #: ../jobs/miscellanea.txt.in:99 msgid "" "Test to verify that the system booted in EFI mode rather than Legacy/BIOS " "mode." msgstr "" #. description #: ../jobs/miscellanea.txt.in:116 msgid "" "This will gather some info about the BMC itself for diagnostic purposes. " "This will not works on non-IPMI systems like AMT and blade/sled type systems." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:119 msgid "Gather BMC Identification info" msgstr "" #. description #: ../jobs/miscellanea.txt.in:129 msgid "" "Sanity check of CPU information; fails if CPU is an engineering sample" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:131 msgid "CPU sanity check" msgstr "" #. description #: ../jobs/miscellanea.txt.in:141 msgid "Sanity check of DMI system identification data (for servers)" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:143 msgid "DMI ID sanity check (servers)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:153 msgid "" "Sanity check of DMI system identification data (for desktops & laptops)" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:155 msgid "DMI ID sanity check (desktops/laptops)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:162 msgid "" " Determine if we need to run tests specific to portable computers that may " "not apply to desktops." msgstr "" #. description #: ../jobs/miscellanea.txt.in:171 msgid "" "Test that the /var/crash directory doesn't contain anything. Lists the files " "contained within if it does, or echoes the status of the directory (doesn't " "exist/is empty)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:178 msgid "" "Checks that a specified sources list file contains the requested repositories" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:187 msgid "PXE verification test of device {__index__} ({interface})" msgstr "" #. purpose #: ../jobs/miscellanea.txt.in:189 msgid "" "This test will verify that you have attempted to PXE boot this machine from " "the network device {__index__} ({interface})." msgstr "" #. steps #: ../jobs/miscellanea.txt.in:192 msgid "" "1. Prior to running this test, you should have attempted to boot this system " "via PXE on every Network Port available." msgstr "" #. verification #: ../jobs/miscellanea.txt.in:194 msgid "" "1. Select Yes if you successfully used PXE boot this system using the NIC " "{interface} 2. Select No if you did not attempt to PXE boot this system " "using the NIC {interface} 3. Select No if you attempted to PXE boot via " "{interface} and it failed for some reason." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:206 msgid "" "Remote Shared IPMI verification test for device {__index__} ({interface})" msgstr "" #. purpose #: ../jobs/miscellanea.txt.in:208 msgid "" "This test will verify that you have attempted IPMI control of this machine " "from the network device {__index__} ({interface})." msgstr "" #. steps #: ../jobs/miscellanea.txt.in:210 msgid "" "1. Prior to running this test, you should have configured and used IPMI to " "power this machine off and on using every Network Port available." msgstr "" #. verification #: ../jobs/miscellanea.txt.in:212 msgid "" "1. Select Yes if you successfully used IPMI to remotely power this system " "off and on using the NIC {interface} 2. Select No if you did not attempt to " "use IPMI to remotely power this sytem off and on via the NIC {interface} 3. " "Select No if you attempted to use IPMI to remotely power off/on this system " "via {interface} and it failed for some reason." msgstr "" #. description #: ../jobs/miscellanea.txt.in:220 msgid "" "PURPOSE:\n" " Some systems do not share IPMI over all NICs but instead have a dedicated " "management port directly connected to the BMC. This test verifies that you " "have used that port for remote IPMI connections and actions.\n" "STEPS:\n" " 1. Prior to running the test, you should have configured and used the " "Dedicated Management Port to remotely power off/on this sytem.\n" "VERIFICATION:\n" " Skip this test if this system ONLY uses shared management/ethernet ports OR " "if this system does not have a BMC (Management Console)\n" " 1. Select Yes if you successfully used IPMI to remotely power this system " "off and on using the dedicated management port.\n" " 2. Select No if you attempted to use the dedicated management port to " "remotely power this system off/on and it failed for some reason." msgstr "" #. description #: ../jobs/miscellanea.txt.in:236 msgid "Run Firmware Test Suite (fwts) oops tests." msgstr "" #. description #: ../jobs/miscellanea.txt.in:248 msgid "Attaches the FWTS oops results log to the submission" msgstr "" #. description #: ../jobs/miscellanea.txt.in:261 msgid "" "If system was installed via MAAS from a cert server, the MAAS version used " "should be contained in /etc/installed-by-maas" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:262 msgid "Gets the version of MAAS used to deploy the SUT" msgstr "" #. description #: ../jobs/miscellanea.txt.in:270 msgid "" "Retrieve the computer's make and model for easier access than digging " "through the dmidecode output." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:271 msgid "Retrieve the computer's make and model" msgstr "" #. description #: ../jobs/mobilebroadband.txt.in:29 msgid "" "Creates a mobile broadband connection for a GSM based modem and checks the " "connection to ensure it's working. " msgstr "" #. description #: ../jobs/mobilebroadband.txt.in:58 msgid "" "Creates a mobile broadband connection for a CDMA based modem and checks the " "connection to ensure it's working." msgstr "" #. purpose #: ../jobs/mobilebroadband.txt.in:102 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of device {__index__} ({interface})." msgstr "" #. summary #: ../jobs/monitor.txt.in:3 msgid "VGA port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:23 msgid "DVI port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:43 msgid "DisplayPort test" msgstr "" #. summary #: ../jobs/monitor.txt.in:63 msgid "HDMI port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:83 msgid "S-VIDEO port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:103 msgid "RCA port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:123 msgid "Multi-monitor test" msgstr "" #. summary #: ../jobs/monitor.txt.in:146 msgid "Monitor power-saving test" msgstr "" #. summary #: ../jobs/monitor.txt.in:166 msgid "Screen dimming test" msgstr "" #. summary #: ../jobs/monitor.txt.in:189 msgid "Thunderbolt monitor test" msgstr "" #. description #: ../jobs/networking.txt.in:7 msgid "Tests whether the system has a working Internet connection." msgstr "" #. summary #: ../jobs/networking.txt.in:16 msgid "Network Information of device {__index__} ({interface})" msgstr "" #. description #: ../jobs/networking.txt.in:20 msgid "" "PURPOSE:\n" " This test will check the network device {__index__} ({interface})\n" "STEPS:\n" " 1. Click \"Test\" to verify the information for this network device\n" "VERIFICATION:\n" " Is this correct?" msgstr "" #. description #: ../jobs/networking.txt.in:32 msgid "" "PURPOSE:\n" " This test will check that a DSL modem can be configured and connected.\n" "STEPS:\n" " 1. Connect the telephone line to the computer\n" " 2. Click on the Network icon on the top panel.\n" " 3. Select \"Edit Connections\"\n" " 4. Select the \"DSL\" tab\n" " 5. Click on \"Add\" button\n" " 6. Configure the connection parameters properly\n" " 7. Click \"Test\" to verify that it's possible to establish an HTTP " "connection\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" #. description #: ../jobs/networking.txt.in:50 msgid "" "Automated test case to verify availability of some system on the network " "using ICMP ECHO packets." msgstr "" #. description #: ../jobs/networking.txt.in:57 ../jobs/peripheral.txt.in:40 msgid "" "Automated test case to make sure that it's possible to download files " "through HTTP" msgstr "" #. description #: ../jobs/networking.txt.in:66 msgid "Test to see if we can sync local clock to an NTP server" msgstr "" #. description #: ../jobs/networking.txt.in:73 msgid "" "Verify that an installation of checkbox-server on the network can be reached " "over SSH." msgstr "" #. description #: ../jobs/networking.txt.in:80 msgid "Try to enable a remote printer on the network and print a test page." msgstr "" #. description #: ../jobs/optical.txt.in:6 msgid "Detects optical drives (CD/DVD) attached to the system." msgstr "" #. description #: ../jobs/optical.txt.in:18 msgid "Optical read test." msgstr "" #. summary #: ../jobs/optical.txt.in:40 msgid "Automated optical read test." msgstr "" #. description #: ../jobs/optical.txt.in:45 msgid "" "Automated test to read a data CD/DVD and ensure the optical drive works " "properly." msgstr "" #. description #: ../jobs/optical.txt.in:66 msgid "CD write test." msgstr "" #. description #: ../jobs/optical.txt.in:96 msgid "Automated CD write test" msgstr "" #. description #: ../jobs/optical.txt.in:117 msgid "" "PURPOSE:\n" " This test will check your CD audio playback capabilities\n" "STEPS:\n" " 1. Insert an audio CD in your optical drive\n" " 2. When prompted, launch the Music Player\n" " 3. Locate the CD in the display of the Music Player\n" " 4. Select the CD in the Music Player\n" " 5. Click the Play button to listen to the music on the CD\n" " 6. Stop playing after some time\n" " 7. Right click on the CD icon and select \"Eject Disc\"\n" " 8. The CD should be ejected\n" " 9. Close the Music Player\n" "VERIFICATION:\n" " Did all the steps work?" msgstr "" #. description #: ../jobs/optical.txt.in:139 msgid "DVD write test." msgstr "" #. description #: ../jobs/optical.txt.in:169 msgid "Automated DVD write test." msgstr "" #. description #: ../jobs/optical.txt.in:193 msgid "" "PURPOSE:\n" " This test will check your DVD playback capabilities\n" "STEPS:\n" " 1. Insert a DVD that contains any movie in your optical drive\n" " 2. Click \"Test\" to play the DVD in Totem\n" "VERIFICATION:\n" " Did the file play?" msgstr "" #. description #: ../jobs/optical.txt.in:207 msgid "Automated Blu-Ray read test." msgstr "" #. description #: ../jobs/optical.txt.in:235 msgid "Automated Blu-Ray write test." msgstr "" #. description #: ../jobs/panel_clock_test.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that the desktop clock displays the correct date " "and time\n" "STEPS:\n" " 1. Check the clock in the upper right corner of your desktop.\n" "VERIFICATION:\n" " Is the clock displaying the correct date and time for your timezone?" msgstr "" #. description #: ../jobs/panel_clock_test.txt.in:18 msgid "" "PURPOSE:\n" " This test will verify that the desktop clock synchronizes with the system " "clock.\n" "STEPS:\n" " 1. Commence the test and verify the clock moves ahead by 1 hour.\n" " Note: It may take a minute or so for the clock to refresh\n" " 2. Right click on the clock, then click on \"Time & Date Settings...\"\n" " 3. Ensure that your clock application is set to manual.\n" " 4. Change the time 1 hour back\n" " 5. Close the window and reboot\n" "VERIFICATION:\n" " Is your system clock displaying the correct date and time for your " "timezone?" msgstr "" #. description #: ../jobs/panel_reboot.txt.in:3 msgid "" "PURPOSE:\n" " This test will verify that you can reboot your system from the desktop " "menu\n" "STEPS:\n" " 1. Click the Gear icon in the upper right corner of the desktop and click " "on \"Shut Down\"\n" " 2. Click the \"Restart\" button on the left side of the Shut Down dialog\n" " 3. After logging back in, restart System Testing and it should resume " "here\n" "VERIFICATION:\n" " Did your system restart and bring up the GUI login cleanly?" msgstr "" #. description #: ../jobs/peripheral.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that a network printer is usable\n" "STEPS:\n" " 1. Make sure that a printer is available in your network\n" " 2. Click on the Gear icon in the upper right corner and then click on " "Printers\n" " 3. If the printer isn't already listed, click on Add\n" " 4. The printer should be detected and proper configuration values should " "be displayed\n" " 5. Print a test page\n" "VERIFICATION:\n" " Were you able to print a test page to the network printer?" msgstr "" #. description #: ../jobs/peripheral.txt.in:20 msgid "" "PURPOSE:\n" " This test will verify that a USB DSL or Mobile Broadband modem works\n" "STEPS:\n" " 1. Connect the USB cable to the computer\n" " 2. Right click on the Network icon in the panel\n" " 3. Select 'Edit Connections'\n" " 4. Select the 'DSL' (for ADSL modem) or 'Mobile Broadband' (for 3G modem) " "tab\n" " 5. Click on 'Add' button\n" " 6. Configure the connection parameters properly\n" " 7. Notify OSD should confirm that the connection has been established\n" " 8. Select Test to verify that it's possible to establish an HTTP " "connection\n" "VERIFICATION:\n" " Was the connection correctly established?" msgstr "" #. description #: ../jobs/power-management.txt.in:5 msgid "" "PURPOSE:\n" " This test will check your system shutdown/booting cycle.\n" "STEPS:\n" " 1. Shutdown your machine.\n" " 2. Boot your machine.\n" " 3. Repeat steps 1 and 2 at least 5 times.\n" "VERIFICATION:\n" " Did the system shutdown and rebooted correctly?" msgstr "" #. description #: ../jobs/power-management.txt.in:21 msgid "Test ACPI Wakealarm (fwts wakealarm)" msgstr "" #. description #: ../jobs/power-management.txt.in:31 msgid "Attach log from fwts wakealarm test" msgstr "" #. description #: ../jobs/power-management.txt.in:48 msgid "" "PURPOSE:\n" " This test will check the system's ability to power-off and boot.\n" "STEPS:\n" " 1. Select \"Test\" to begin.\n" " 2. The machine will shut down.\n" " 3. Power the machine back on.\n" " 4. After rebooting, wait for the test prompts to inform you that the test " "is complete.\n" " 5. Once the test has completed, restart checkbox and select 'Re-run' when " "prompted.\n" "VERIFICATION:\n" " If the machine successfully shuts down and boots, select 'Yes', otherwise,\n" " select 'No'." msgstr "" #. description #: ../jobs/power-management.txt.in:68 msgid "" "This will attach any logs from the power-management/poweroff test to the " "results." msgstr "" #. description #: ../jobs/power-management.txt.in:82 msgid "" "PURPOSE:\n" " This test will check the system's ability to reboot cleanly.\n" "STEPS:\n" " 1. Select \"Test\" to begin.\n" " 2. The machine will reboot.\n" " 3. After rebooting, wait for the test prompts to inform you that the test " "is complete.\n" " 4. Once the test has completed, restart checkbox and select Re-Run when " "prompted.\n" "VERIFICATION:\n" " If the machine successfully reboots, select Yes then select Next." msgstr "" #. description #: ../jobs/power-management.txt.in:100 msgid "" "This will attach any logs from the power-management/reboot test to the " "results." msgstr "" #. description #: ../jobs/power-management.txt.in:108 msgid "" "PURPOSE:\n" " This test will check your lid sensors.\n" "STEPS:\n" " 1. Close your laptop lid.\n" "VERIFICATION:\n" " Does closing your laptop lid cause your system to suspend?" msgstr "" #. description #: ../jobs/power-management.txt.in:127 msgid "" "PURPOSE:\n" " This test will check your lid sensors\n" "STEPS:\n" " 1. Click \"Test\".\n" " 2. Close and open the lid.\n" "VERIFICATION:\n" " Did the screen turn off while the lid was closed?" msgstr "" #. description #: ../jobs/power-management.txt.in:147 msgid "" "PURPOSE:\n" " This test will check your lid sensors.\n" "STEPS:\n" " 1. Click \"Test\".\n" " 2. Close the lid.\n" " 3. Wait 5 seconds with the lid closed.\n" " 4. Open the lid.\n" "VERIFICATION:\n" " Did the system resume when the lid was opened?" msgstr "" #. description #: ../jobs/power-management.txt.in:168 msgid "" "Verify that the Real-time clock (RTC) device functions properly, if present." msgstr "" #. description #: ../jobs/power-management.txt.in:176 msgid "" "Check to see if CONFIG_NO_HZ is set in the kernel (this is just a simple " "regression check)" msgstr "" #. description #: ../jobs/power-management.txt.in:184 msgid "" "PURPOSE:\n" " This test will ensure that the AC is unplugged for the battery drain " "tests to run.\n" "STEPS:\n" " 1. Unplug laptop from AC.\n" "VERIFICATION:\n" " Was the laptop unplugged from AC?" msgstr "" #. description #: ../jobs/power-management.txt.in:198 msgid "" "Checks the battery drain during idle. Reports time and capacity until empty " "and capacity." msgstr "" #. description #: ../jobs/power-management.txt.in:209 msgid "" "Checks the battery drain while watching a movie. Reports time and capacity " "until empty. Requires MOVIE_VAR to be set." msgstr "" #. description #: ../jobs/power-management.txt.in:222 msgid "" "Checks the battery drain during suspend. Reports time and capacity until " "empty." msgstr "" #. description #: ../jobs/power-management.txt.in:231 msgid "" "PURPOSE:\n" " This test will ensure that the AC is plugged back in after the battery.\n" " tests\n" "STEPS:\n" " 1. Plug laptop into AC.\n" "VERIFICATION:\n" " Was the laptop plugged into AC?" msgstr "" #. description #: ../jobs/power-management.txt.in:246 msgid "" "PURPOSE:\n" " This test will verify that your system can successfully reboot.\n" "STEPS:\n" " 1. Select 'Test' to initiate a system reboot.\n" " 2. When the grub boot menu is displayed, boot into Ubuntu (Or allow the\n" " system to automatically boot on its own).\n" " 3. Once the system has restarted, log in and restart checkbox-" "certification-server.\n" " 4. Select 'Re-Run' to return to this test.\n" " 5. Select 'Yes' to indicate the test has passed if the system rebooted\n" " successfully, otherwise, select 'No' to indicate there was a problem.\n" "VERIFICATION:\n" " Did the system reboot correctly?" msgstr "" #. description #: ../jobs/power-management.txt.in:266 msgid "" "PURPOSE:\n" " This test will check your system shutdown/booting cycle\n" "STEPS:\n" " 1. Select 'Test' to initiate a system shutdown.\n" " 2. Power the system back on.\n" " 3. From the grub menu, boot into the Xen Hypervisor.\n" " 4. When the system has restarted, log in and restart checkbox-" "certification-server.\n" " 5. Select 'Re-Run' to return to this test.\n" " 6. Select 'Yes' to indicate the test has passed if the machine shut " "down\n" " successfully otherwise, Select 'No' to indicate there was a problem.\n" "VERIFICATION:\n" " Did the system shutdown and boot correctly?" msgstr "" #. description #: ../jobs/rendercheck.txt.in:7 msgid "" "Runs all of the rendercheck test suites. This test can take a few minutes." msgstr "" #. description #: ../jobs/rendercheck.txt.in:15 msgid "Attach log from rendercheck tests" msgstr "" #. description #: ../jobs/server-services.txt.in:5 msgid "Verifies that sshd is running." msgstr "" #. description #: ../jobs/server-services.txt.in:11 msgid "Verifies that Print/CUPs server is running." msgstr "" #. description #: ../jobs/server-services.txt.in:20 msgid "Verifies that DNS server is running and working." msgstr "" #. description #: ../jobs/server-services.txt.in:29 msgid "Verifies that Samba server is running." msgstr "" #. description #: ../jobs/server-services.txt.in:40 msgid "Verifies that the LAMP stack is running (Apache, MySQL and PHP)." msgstr "" #. description #: ../jobs/server-services.txt.in:47 msgid "Verifies that Tomcat server is running and working." msgstr "" #. description #: ../jobs/smoke.txt.in:4 msgid "Check success result from shell test case" msgstr "" #. description #: ../jobs/smoke.txt.in:10 msgid "Check failed result from shell test case" msgstr "" #. description #: ../jobs/smoke.txt.in:17 msgid "Check job is executed when dependency succeeds" msgstr "" #. description #: ../jobs/smoke.txt.in:24 msgid "Check job result is set to uninitiated when dependency fails" msgstr "" #. description #: ../jobs/smoke.txt.in:31 msgid "Check job is executed when requirements are met" msgstr "" #. description #: ../jobs/smoke.txt.in:38 msgid "" "Check job result is set to \"not required on this system\" when requirements " "are not met" msgstr "" #. description #: ../jobs/smoke.txt.in:43 msgid "" "PURPOSE:\n" " This test checks that the manual plugin works fine\n" "STEPS:\n" " 1. Add a comment\n" " 2. Set the result as passed\n" "VERIFICATION:\n" " Check that in the report the result is passed and the comment is " "displayed" msgstr "" #. description #: ../jobs/stress.txt.in:9 msgid "" "Simulate high system load using the 'stress' tool to exercise the CPU for " "several hours. The test is considered passed if the system does not freeze " "or abend." msgstr "" #. description #: ../jobs/stress.txt.in:33 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "hibernate/resume for 30 cycles" msgstr "" #. description #: ../jobs/stress.txt.in:42 msgid "" "Automated check of the 30 cycle hibernate log for errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:50 msgid "Attaches the log from the 30 cycle Hibernate/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:63 msgid "" "This is an automated stress test that will run a sequence of '30 " "suspend/resume cycles and one reboot' 3 times." msgstr "" #. description #: ../jobs/stress.txt.in:83 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "suspend/resume for 30 cycles." msgstr "" #. description #: ../jobs/stress.txt.in:93 msgid "" "Automated check of the 30 cycle suspend log for errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:102 msgid "" "Automated check of the '30 cycle suspend and 1 reboot times 3' logs for " "errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:111 msgid "Attaches the log from the 30 cycle Suspend/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:120 msgid "" "Attaches the log from the '30 cycle Suspend/Resume and one reboot times 3' " "test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:156 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "hibernate/resume for 250 cycles" msgstr "" #. description #: ../jobs/stress.txt.in:165 msgid "" "Attaches the log from the 250 cycle Hibernate/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:183 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "suspend/resume for 250 cycles." msgstr "" #. description #: ../jobs/stress.txt.in:192 msgid "Attaches the log from the 250 cycle Suspend/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:200 ../jobs/suspend.txt.in:388 msgid "" "Checks the sleep times to ensure that a machine suspends and resumes within " "a given threshold" msgstr "" #. description #: ../jobs/stress.txt.in:214 msgid "Stress reboot system (100 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:237 msgid "Stress reboot system (30 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:259 msgid "Stress poweroff system (100 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:282 msgid "Stress poweroff system (30 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:299 msgid "Check logs for the stress reboot (30 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:316 msgid "Check logs for the stress poweroff (30 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:333 msgid "Check logs for the stress reboot (100 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:350 msgid "Check logs for the stress poweroff (100 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:370 msgid "Run the graphics stress test. This test can take a few minutes." msgstr "" #. description #: ../jobs/stress.txt.in:380 msgid "Attaches the graphics stress results to the submission." msgstr "" #. description #: ../jobs/stress.txt.in:388 msgid "Runs a test that transfers 100 10MB files 3 times to usb." msgstr "" #. summary #: ../jobs/stress.txt.in:394 msgid "Stress test for SDHC card" msgstr "" #. description #: ../jobs/stress.txt.in:397 msgid "" "PURPOSE:\n" " This test will transfers 100 10MB files 3 times to a SDHC card, to\n" " check that the systems media card reader can transfer large amounts\n" " of data.\n" "STEPS:\n" " 1. Insert a SDHC card into the reader and then Click \"Test\".\n" " If a file browser opens up, you can safely close it.\n" " 2. Do not remove the device during this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/stress.txt.in:417 msgid "Ping ubuntu.com and restart network interfaces 100 times" msgstr "" #. description #: ../jobs/stress.txt.in:431 msgid "" "PURPOSE:\n" " To make sure that stressing the wifi hotkey does not cause applets to " "disappear from the panel or the system to lock up\n" "STEPS:\n" " 1. Log in to desktop\n" " 2. Press wifi hotkey at a rate of 1 press per second and slowly increase " "the speed of the tap, until you are tapping as fast as possible\n" "VERIFICATION:\n" " Verify the system is not frozen and the wifi and bluetooth applets are " "still visible and functional" msgstr "" #. description #: ../jobs/suspend.txt.in:6 msgid "Record the current network before suspending." msgstr "" #. summary #: ../jobs/suspend.txt.in:19 msgid "Record the current resolution before suspending." msgstr "" #. description #: ../jobs/suspend.txt.in:38 msgid "Record mixer settings before suspending." msgstr "" #. description #: ../jobs/suspend.txt.in:45 msgid "Verify that all the CPUs are online before suspending" msgstr "" #. description #: ../jobs/suspend.txt.in:52 msgid "" "Dumps memory info to a file for comparison after suspend test has been run" msgstr "" #. description #: ../jobs/suspend.txt.in:63 msgid "" "This test disconnects all connections and then connects to the wireless " "interface. It then checks the connection to confirm it's working as expected." msgstr "" #. description #: ../jobs/suspend.txt.in:100 msgid "" "This test executes iperf connection performance/stability against device " "{__index__} ({interface}) before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:128 msgid "" "This test executes iperf connection performance/stability against the " "broadband device found on the system before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:232 msgid "" "PURPOSE:\n" " This test will check suspend and resume\n" "STEPS:\n" " 1. Click \"Test\" and your system will suspend for about 30 - 60 " "seconds\n" " 2. Observe the Power LED to see if it blinks or changes color during " "suspend\n" " 3. If your system does not wake itself up after 60 seconds, please press " "the power button momentarily to wake the system manually\n" " 4. If your system fails to wake at all and must be rebooted, restart " "System Testing after reboot and mark this test as Failed\n" "VERIFICATION:\n" " Did your system suspend and resume correctly?\n" " (NOTE: Please only consider whether the system successfully suspended " "and resumed. Power/Suspend LED verification will occur after this test is " "completed.)" msgstr "" #. summary #: ../jobs/suspend.txt.in:247 msgid "Suspend after graphics card switch tests" msgstr "" #. description #: ../jobs/suspend.txt.in:290 msgid "This is the automated version of suspend/suspend_advanced." msgstr "" #. summary #: ../jobs/suspend.txt.in:299 msgid "Hybrid sleep test" msgstr "" #. description #: ../jobs/suspend.txt.in:327 msgid "" "Automated check of the suspend log to look for errors reported by fwts" msgstr "" #. summary #: ../jobs/suspend.txt.in:339 msgid "Suspend log attach" msgstr "" #. summary #: ../jobs/suspend.txt.in:354 msgid "Hybrid sleep log check test" msgstr "" #. summary #: ../jobs/suspend.txt.in:370 msgid "Hybrid sleep log attach" msgstr "" #. summary #: ../jobs/suspend.txt.in:393 msgid "Suspend time check test" msgstr "" #. description #: ../jobs/suspend.txt.in:413 msgid "" "PURPOSE:\n" " Wake up by USB keyboard\n" "STEPS:\n" " 1. Enable \"Wake by USB KB/Mouse\" item in BIOS\n" " 2. Press \"Test\" to enter suspend (S3) mode\n" " 3. Press any key of USB keyboard to wake system up\n" "VERIFICATION:\n" " Did the system wake up from suspend mode when you pressed a keyboard key?" msgstr "" #. description #: ../jobs/suspend.txt.in:430 msgid "" "PURPOSE:\n" " Wake up by USB mouse\n" "STEPS:\n" " 1. Enable \"Wake by USB KB/Mouse\" item in BIOS\n" " 2. Press \"Test\" to enter suspend (S3) mode\n" " 3. Press any button of USB mouse to wake system up\n" "VERIFICATION:\n" " Did the system wake up from suspend mode when you pressed the mouse " "button?" msgstr "" #. description #: ../jobs/suspend.txt.in:445 msgid "Test the network after resuming." msgstr "" #. description #: ../jobs/suspend.txt.in:453 msgid "" "Test to see that we have the same resolution after resuming as before." msgstr "" #. summary #: ../jobs/suspend.txt.in:459 msgid "" "Resolution consistency check after suspend with the valuse we got before " "suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:492 msgid "" "Verify that mixer settings after suspend are the same as before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:506 msgid "" "PURPOSE:\n" " Check that system detects speakers or headphones being plugged in after " "suspend\n" "STEPS:\n" " 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack\n" " 2. Locate the speaker / headphone jack on the device under test\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug headphones or speakers into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/suspend.txt.in:528 msgid "" "PURPOSE:\n" " Check that system detects a microphone being plugged in after suspend\n" "STEPS:\n" " 1. Prepare a microphone with a standard 3.5mm jack\n" " 2. Locate the microphone jack on the device under test.\n" " Keep in mind that it may be shared with the headphone jack.\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug the microphone into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/suspend.txt.in:559 msgid "" "PURPOSE:\n" " This test will check that headphones connector works correctly after " "suspend\n" "STEPS:\n" " 1. Connect a pair of headphones to your audio device\n" " 2. Commence the test to play a sound to your audio device\n" "VERIFICATION:\n" " Did you hear a sound through the headphones and did the sound play " "without any distortion, clicks or other strange noises from your headphones?" msgstr "" #. description #: ../jobs/suspend.txt.in:585 msgid "" "PURPOSE:\n" " This test will check that recording sound using an external microphone " "works correctly after suspend\n" "STEPS:\n" " 1. Connect a microphone to your microphone port\n" " 2. Click \"Test\", then speak into the external microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/suspend.txt.in:608 msgid "Verify that all CPUs are online after resuming." msgstr "" #. description #: ../jobs/suspend.txt.in:625 msgid "Verify that all memory is available after resuming from suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:634 msgid "" "PURPOSE:\n" " This test will check that the display is correct after suspend and " "resume\n" "STEPS:\n" " 1. Check that your display does not show up visual artifacts after " "resuming.\n" "VERIFICATION:\n" " Does the display work normally after resuming from suspend?" msgstr "" #. summary #: ../jobs/suspend.txt.in:645 msgid "Display after suspend tests" msgstr "" #. description #: ../jobs/suspend.txt.in:671 msgid "" "This test checks that the wireless interface is working after suspending the " "system. It disconnects all interfaces and then connects to the wireless " "interface and checks that the connection is working as expected." msgstr "" #. description #: ../jobs/suspend.txt.in:891 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11b/g protocols after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:922 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11b/g protocols after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:953 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11n protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:984 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11n protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:1016 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11ac protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:1048 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11ac protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:1085 msgid "" "This test executes iperf connection performance/stability against device " "{__index__} ({interface}) after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1113 msgid "" "This test executes iperf connection performance/stability against the " "broadband device found on the system after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1143 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1183 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1223 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11n protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1263 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11n protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1303 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1343 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1379 msgid "" "This test grabs the hardware address of the bluetooth adapter after suspend " "and compares it to the address grabbed before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1437 msgid "" "This is an automated Bluetooth file transfer test. It sends an image to the " "device specified by the BTDEVADDR environment variable." msgstr "" #. description #: ../jobs/suspend.txt.in:1495 msgid "" "This is an automated Bluetooth test. It emulates browsing on a remote device " "specified by the BTDEVADDR environment variable." msgstr "" #. description #: ../jobs/suspend.txt.in:1553 msgid "" "This is an automated Bluetooth test. It receives the given file from a " "remote host specified by the BTDEVADDR environment variable" msgstr "" #. description #: ../jobs/suspend.txt.in:1563 msgid "" "PURPOSE:\n" " This test will cycle through the detected display modes\n" "STEPS:\n" " 1. Click \"Test\" and the display will cycle trough the display modes\n" "VERIFICATION:\n" " Did your display look fine in the detected mode?" msgstr "" #. summary #: ../jobs/suspend.txt.in:1575 msgid "Cycle resolution after suspend tests" msgstr "" #. description #: ../jobs/suspend.txt.in:1600 msgid "" "This test will check to make sure supported video modes work after a suspend " "and resume. This is done automatically by taking screenshots and uploading " "them as an attachment." msgstr "" #. description #: ../jobs/suspend.txt.in:1610 msgid "" "This attaches screenshots from the suspend/cycle_resolutions_after_suspend " "test to the results submission." msgstr "" #. summary #: ../jobs/suspend.txt.in:1615 msgid "" "Attach screenshots from the suspend/cycle_resolution_after_suspend test to " "the results submission." msgstr "" #. description #: ../jobs/suspend.txt.in:1657 msgid "" "This will check to make sure that your audio device works properly after a " "suspend and resume. This may work fine with speakers and onboard " "microphone, however, it works best if used with a cable connecting the audio-" "out jack to the audio-in jack." msgstr "" #. description #: ../jobs/suspend.txt.in:1664 msgid "Attaches the log from the single suspend/resume test to the results" msgstr "" #. description #: ../jobs/suspend.txt.in:1674 msgid "" "PURPOSE:\n" " Take a screengrab of the current screen after suspend (logged on Unity " "desktop)\n" "STEPS:\n" " 1. Take picture using USB webcam\n" "VERIFICATION:\n" " Review attachment manually later" msgstr "" #. description #: ../jobs/suspend.txt.in:1687 msgid "Attaches the screenshot captured in graphics/screenshot." msgstr "" #. description #: ../jobs/suspend.txt.in:1699 msgid "" "PURPOSE:\n" " Do some challenging operations then check for lockup on the GPU\n" "STEPS:\n" " 1. Create 2 glxgears windows and move them quickly\n" " 2. Switch workspaces with wmctrl\n" " 3. Launch an HTML5 video playback in firefox\n" "VERIFICATION:\n" " After a 60s workload, check kern.log for reported GPU errors" msgstr "" #. description #: ../jobs/suspend.txt.in:1729 msgid "" "Checks the length of time it takes to reconnect an existing wifi connection " "after a suspend/resume cycle." msgstr "" #. description #: ../jobs/suspend.txt.in:1753 msgid "" "Checks the length of time it takes to reconnect an existing wired " "connection\n" " after a suspend/resume cycle." msgstr "" #. description #: ../jobs/suspend.txt.in:1762 msgid "" "PURPOSE:\n" " Validate that the power LED operated the same after resuming from " "suspend\n" "STEPS:\n" " 1. Power LED should be on while device is switched on\n" "VERIFICATION:\n" " Does the power LED remain on after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1775 msgid "" "PURPOSE:\n" " Validate that the battery light shows charging status after resuming " "from suspend\n" "STEPS:\n" " 1. Let system run on battery for a while\n" " 2. Plug in AC plug\n" "VERIFICATION:\n" " Did the battery indicator LED still turn orange after resuming from " "suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1789 msgid "" "PURPOSE:\n" " Validate that the battery LED properly displays charged status after " "resuming from suspend\n" "STEPS:\n" " 1. Let system run on battery for a short time\n" " 2. Plug in AC\n" " 3. Let system run on AC\n" "VERIFICATION:\n" " Does the orange battery LED still shut off when system is fully charged " "after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1804 msgid "" "PURPOSE:\n" " Validate that the battery LED indicated low power after resuming from " "suspend\n" "STEPS:\n" " 1. Let system run on battery for several hours\n" " 2. Monitor battery LED carefully\n" "VERIFICATION:\n" " Does the LED light orange when battery is low after resuming from " "suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1819 msgid "" "PURPOSE:\n" " Validate that the HDD LED still operates as expected after resuming from " "suspend\n" "STEPS:\n" " 1. Select \"Test\" to write and read a temporary file for a few seconds\n" " 2. HDD LED should blink when writing to/reading from HDD\n" "VERIFICATION:\n" " Did the HDD LED still blink with HDD activity after resuming from " "suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1834 msgid "" "PURPOSE:\n" " Validate that the numeric keypad LED operates the same before and after " "resuming from suspend\n" "STEPS:\n" " 1. Press \"Block Num\" key to toggle numeric keypad LED\n" " 2. Click on the \"Test\" button to open a window to verify your typing\n" " 3. Type using the numeric keypad both when the LED is on and off\n" "VERIFICATION:\n" " 1. Numeric keypad LED status should toggle everytime the \"Block Num\" " "key is pressed\n" " 2. Numbers should only be entered in the keyboard verification window " "when the LED is on" msgstr "" #. description #: ../jobs/suspend.txt.in:1850 msgid "" "PURPOSE:\n" " Validate that the Caps Lock key operates the same before and after " "resuming from suspend\n" "STEPS:\n" " 1. Press \"Block Cap Keys\" to activate/deactivate cap keys blocking\n" " 2. Cap Keys LED should be switched on/off every time the key is pressed\n" "VERIFICATION:\n" " Did the Cap Keys LED light as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1864 msgid "" "PURPOSE:\n" " WLAN LED verification after resuming from suspend\n" "STEPS:\n" " 1. Make sure WLAN connection is established\n" " 2. WLAN LED should light\n" "VERIFICATION:\n" " Did the WLAN LED light as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1878 msgid "" "PURPOSE:\n" " Validate that WLAN LED shuts off when disabled after resuming from " "suspend\n" "STEPS:\n" " 1. Connect to AP\n" " 2. Use Physical switch to disable WLAN\n" " 3. Re-enable\n" " 4. Use Network-Manager to disable WLAN\n" "VERIFICATION:\n" " Did the LED turn off then WLAN is disabled after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1894 msgid "" "PURPOSE:\n" " Validate that the Bluetooth LED turns on and off when BT is " "enabled/disabled after resuming from suspend\n" "STEPS:\n" " 1. Switch bluetooth off from a hardware switch (if present)\n" " 2. Switch bluetooth back on\n" " 3. Switch bluetooth off from the panel applet\n" " 4. Switch bluetooth back on\n" "VERIFICATION:\n" " Did the bluetooth LED turn off and on twice after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1913 msgid "" "PURPOSE:\n" " Validate that the camera LED still works as expected after resuming from " "suspend\n" "STEPS:\n" " 1. Select Test to activate camera\n" " 2. Camera LED should light for a few seconds\n" "VERIFICATION:\n" " Did the camera LED still turn on and off after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1927 msgid "" "PURPOSE:\n" " Touchpad LED verification after resuming from suspend\n" "STEPS:\n" " 1. Click on the touchpad button or press key combination to " "enable/disable touchpad button\n" " 2. Slide your finger on the touchpad\n" "VERIFICATION:\n" " 1. Touchpad LED status should toggle everytime the button is clicked or " "the key combination is pressed\n" " 2. When the LED is on, the mouse pointer should move on touchpad usage\n" " 3. When the LED is off, the mouse pointer should not move on touchpad " "usage" msgstr "" #. description #: ../jobs/suspend.txt.in:1943 msgid "" "PURPOSE:\n" " Validate Wireless (WLAN + Bluetooth) LED operated the same after " "resuming from suspend\n" "STEPS:\n" " 1. Make sure WLAN connection is established and Bluetooth is enabled.\n" " 2. WLAN/Bluetooth LED should light\n" " 3. Switch WLAN and Bluetooth off from a hardware switch (if present)\n" " 4. Switch them back on\n" " 5. Switch WLAN and Bluetooth off from the panel applet\n" " 6. Switch them back on\n" "VERIFICATION:\n" " Did the WLAN/Bluetooth LED light as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1962 msgid "" "PURPOSE:\n" " This test will test the brightness key after resuming from suspend\n" "STEPS:\n" " 1. Press the brightness buttons on the keyboard\n" "VERIFICATION:\n" " Did the brightness change following to your key presses after resuming " "from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1979 msgid "" "PURPOSE:\n" " This test will test the volume keys of your keyboard after resuming from " "suspend\n" "STEPS:\n" " Skip this test if your computer has no volume keys.\n" " 1. Click test to open a window on which to test the volume keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Did the volume change following to your key presses?" msgstr "" #. description #: ../jobs/suspend.txt.in:1998 msgid "" "PURPOSE:\n" " This test will test the mute key of your keyboard after resuming from " "suspend\n" "STEPS:\n" " 1. Click test to open a window on which to test the mute key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Did the volume mute following your key presses?" msgstr "" #. description #: ../jobs/suspend.txt.in:2014 msgid "" "PURPOSE:\n" " This test will test the sleep key after resuming from suspend\n" "STEPS:\n" " 1. Press the sleep key on the keyboard\n" " 2. Wake your system up by pressing the power button\n" "VERIFICATION:\n" " Did the system go to sleep after pressing the sleep key after resuming " "from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2031 msgid "" "PURPOSE:\n" " This test will test the battery information key after resuming from " "suspend\n" "STEPS:\n" " Skip this test if you do not have a Battery Button.\n" " 1. Click Test to begin\n" " 2. Press the Battery Info button (or combo like Fn+F3)\n" " 3: Close the Power Statistics tool if it opens\n" "VERIFICATION:\n" " Did the Battery Info key work as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2048 msgid "" "PURPOSE:\n" " This test will test the wireless key after resuming from suspend\n" "STEPS:\n" " 1. Press the wireless key on the keyboard\n" " 2. Press the same key again\n" "VERIFICATION:\n" " Did the wireless go off on the first press and on again on the second " "after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2066 msgid "" "PURPOSE:\n" " This test will test the media keys of your keyboard after resuming from " "suspend\n" "STEPS:\n" " Skip this test if your computer has no media keys.\n" " 1. Click test to open a window on which to test the media keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2085 msgid "" "PURPOSE:\n" " This test will test the super key of your keyboard after resuming from " "suspend\n" "STEPS:\n" " 1. Click test to open a window on which to test the super key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the super key work as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2100 msgid "" "PURPOSE:\n" " Validate that the External Video hot key is working as expected after " "resuming from suspend\n" "STEPS:\n" " 1. Plug in an external monitor\n" " 2. Press the display hot key to change the monitors configuration\n" "VERIFICATION:\n" " Check that the video signal can be mirrored, extended, displayed on " "external or onboard only, after resuming from suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2115 msgid "" "PURPOSE:\n" " Verify touchpad hotkey toggles touchpad functionality on and off after " "resuming from suspend\n" "STEPS:\n" " 1. Verify the touchpad is functional\n" " 2. Tap the touchpad toggle hotkey\n" " 3. Tap the touchpad toggle hotkey again\n" "VERIFICATION:\n" " Verify the touchpad has been disabled and re-enabled." msgstr "" #. description #: ../jobs/suspend.txt.in:2132 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB storage device after suspend and resume.\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB storage device (pen-drive/HDD).\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2153 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB 3.0 storage device after suspend and resume.\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB 3.0 storage device (pen-drive/HDD) " "in\n" " a USB 3.0 port. (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2172 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB storage device after suspend.\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2192 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB 3.0 storage device after suspend\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB 3.0 device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2210 msgid "" "This test is automated and executes after the " "suspend/usb_insert_after_suspend test is run." msgstr "" #. description #: ../jobs/suspend.txt.in:2223 msgid "" "This test is automated and executes after the " "suspend/usb3_insert_after_suspend test is run." msgstr "" #. description #: ../jobs/suspend.txt.in:2234 msgid "" "This is an automated version of usb/storage-automated and assumes that the " "server has usb storage devices plugged in prior to checkbox execution. It is " "intended for servers and SRU automated testing." msgstr "" #. description #: ../jobs/suspend.txt.in:2248 msgid "" "This is an automated version of usb3/storage-automated and assumes that the " "server has usb 3.0 storage devices plugged in prior to checkbox execution. " "It is intended for servers and SRU automated testing." msgstr "" #. description #: ../jobs/suspend.txt.in:2260 ../jobs/usb.txt.in:219 msgid "" "This test will check that your USB 2.0 port transfers data at a minimum " "expected speed." msgstr "" #. description #: ../jobs/suspend.txt.in:2273 msgid "" "This test will check that your USB 3.0 port could be recognized as " "SuperSpeed USB device using xhci_hcd driver and transfers data correctly." msgstr "" #. description #: ../jobs/suspend.txt.in:2283 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an MMC card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an MMC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2303 msgid "" "This test is automated and executes after the mediacard/mmc-insert-after-" "suspend test is run. It tests reading and writing to the MMC card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2313 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of an MMC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MMC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2330 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED SD card after the system\n" " has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an UNLOCKED SD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2351 msgid "" "This test is automated and executes after the mediacard/sd-insert-after-" "suspend test is run. It tests reading and writing to the SD card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2361 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SD card from the systems card reader\n" " after the system has been suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2379 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED SDHC media card after the\n" " system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an UNLOCKED SDHC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2400 msgid "" "This test is automated and executes after the mediacard/sdhc-insert-after-" "suspend test is run. It tests reading and writing to the SDHC card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2410 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of an SDHC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SDHC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2427 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a CF card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a CF card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2447 msgid "" "This test is automated and executes after the mediacard/cf-insert-after-" "suspend test is run. It tests reading and writing to the CF card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2457 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a CF card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the CF card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2474 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a SDXC card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a SDXC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2494 msgid "" "This test is automated and executes after the mediacard/sdxc-insert-after-" "suspend test is run. It tests reading and writing to the SDXC card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2504 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a SDXC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SDXC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2521 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a MS card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a MS card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2541 msgid "" "This test is automated and executes after the mediacard/ms-insert-after-" "suspend test is run. It tests reading and writing to the MS card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2551 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a MS card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MS card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2568 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a MSP card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a MSP card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2588 msgid "" "This test is automated and executes after the mediacard/msp-insert-after-" "suspend test is run. It tests reading and writing to the MSP card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2598 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a MSP card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MSP card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2615 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a xD card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a xD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2635 msgid "" "This test is automated and executes after the mediacard/xd-insert-after-" "suspend test is run. It tests reading and writing to the xD card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2645 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a xD card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the xD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2665 msgid "Determine if the touchpad is still functioning after suspend/resume." msgstr "" #. description #: ../jobs/suspend.txt.in:2675 ../jobs/touchscreen.txt.in:45 msgid "" "PURPOSE:\n" " Check touchscreen tap recognition\n" "STEPS:\n" " 1. Tap an object on the screen with finger. The cursor should jump to " "location tapped and object should highlight\n" "VERIFICATION:\n" " Does tap recognition work?" msgstr "" #. description #: ../jobs/suspend.txt.in:2691 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works after suspend\n" "STEPS:\n" " 1. Click on Test to display a video capture from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the video capture?" msgstr "" #. description #: ../jobs/suspend.txt.in:2710 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works after suspend\n" "STEPS:\n" " 1. Click on Test to display a still image from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the image?" msgstr "" #. description #: ../jobs/suspend.txt.in:2727 msgid "" " Takes multiple pictures based on the resolutions supported by the camera " "and\n" " validates their size and that they are of a valid format after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2736 msgid "Pointing device tests after suspend." msgstr "" #. summary #: ../jobs/suspend.txt.in:2754 msgid "Create click tests for pointing devices after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2759 msgid "Click tests for pointing devices after suspend." msgstr "" #. summary #: ../jobs/suspend.txt.in:2784 msgid "Compiz support tests after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2806 msgid "Check that the hardware is able to run compiz after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2807 msgid "Test Compiz support after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2812 msgid "glxgears tests after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2842 msgid "Test that glxgears works after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2843 msgid "" "PURPOSE:\n" " This test tests the basic 3D capabilities of your $product video card " "after suspend\n" "STEPS:\n" " 1. Click \"Test\" to execute an OpenGL demo. Press ESC at any time to " "close.\n" " 2. Verify that the animation is not jerky or slow.\n" "VERIFICATION:\n" " 1. Did the 3d animation appear?\n" " 2. Was the animation free from slowness/jerkiness?" msgstr "" #. summary #: ../jobs/suspend.txt.in:2856 msgid "Display video test after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2887 msgid "Test that video can be displayed after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2888 msgid "" "PURPOSE:\n" " This test will test the default display after suspend with a sample " "video\n" "STEPS:\n" " 1. Click \"Test\" to display a video test.\n" "VERIFICATION:\n" " Do you see color bars and static?" msgstr "" #. summary #: ../jobs/suspend.txt.in:2899 msgid "Driver version tests after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2920 msgid "" "Parses Xorg.0.Log and discovers the running X driver and version after " "suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2921 msgid "Test X driver/version after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2930 msgid "Run Firmware Test Suite (fwts) oops tests after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2942 msgid "Attaches the FWTS oops results log to the submission after suspend" msgstr "" #. description #: ../jobs/touchpad.txt.in:6 msgid "" "PURPOSE:\n" " Touchpad manual verification\n" "STEPS:\n" " 1. Make sure that touchpad is enabled.\n" " 2. Move cursor using the touchpad.\n" "VERIFICATION:\n" " Did the cursor move?" msgstr "" #. description #: ../jobs/touchpad.txt.in:23 msgid "" "PURPOSE:\n" " Touchpad horizontal scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the horizontal slider by moving your finger " "right and left in the lower part of the touchpad.\n" "VERIFICATION:\n" " Could you scroll right and left?" msgstr "" #. description #: ../jobs/touchpad.txt.in:40 msgid "" "PURPOSE:\n" " Touchpad vertical scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the vertical slider by moving your finger up " "and down in the right part of the touchpad.\n" "VERIFICATION:\n" " Could you scroll up and down?" msgstr "" #. description #: ../jobs/touchpad.txt.in:57 msgid "" "Determine whether the touchpad is detected as a singletouch device " "automatically." msgstr "" #. description #: ../jobs/touchpad.txt.in:68 msgid "" "Determine whether the touchpad is detected as a multitouch device " "automatically." msgstr "" #. description #: ../jobs/touchpad.txt.in:77 msgid "" "PURPOSE:\n" " Touchpad manual detection of multitouch.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Is the touchpad supposed to be multitouch?" msgstr "" #. description #: ../jobs/touchpad.txt.in:90 msgid "" "PURPOSE:\n" " Determine that the hot corner feature is working as expected\n" "STEPS:\n" " 1. Launch a browser.\n" " 2. Go to a website, and hover the cursor over a link.\n" " 3. Tap the upper right corner on the touchpad.\n" "VERIFICATION:\n" " Did the tap trigger a new tab to be opened?" msgstr "" #. description #: ../jobs/touchpad.txt.in:105 msgid "" "PURPOSE:\n" " Determine that the selection window function is working as expected.\n" "STEPS:\n" " 1. Open a file folder\n" " 2. Double tap and drag the cursor across several file.\n" "VERIFICATION:\n" " Did a selection window open and were several files selected?" msgstr "" #. description #: ../jobs/touchpad.txt.in:120 msgid "" "PURPOSE:\n" " Determine that the right click function is working as expected.\n" "STEPS:\n" " 1. Open a file folder\n" " 2. Hover cursor over file in folder\n" " 3. 2-touch tap.\n" "VERIFICATION:\n" " Did the right click pop up menu appear?" msgstr "" #. description #: ../jobs/touchpad.txt.in:136 msgid "" "PURPOSE:\n" " Touchpad 2-touch horizontal scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the horizontal slider by moving 2 fingers " "right and left along the touchpad.\n" "VERIFICATION:\n" " Could you scroll right and left?" msgstr "" #. description #: ../jobs/touchpad.txt.in:151 msgid "" "PURPOSE:\n" " Touchpad 2-touch vertical scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the vertical slider by moving 2 fingers up " "and down along the touchpad.\n" "VERIFICATION:\n" " Could you scroll up and down?" msgstr "" #. description #: ../jobs/touchpad.txt.in:165 msgid "" "PURPOSE:\n" " Determine that the drag and drop function is working as expected.\n" "STEPS:\n" " 1. Browse to the examples folder in the current user's home directory\n" " 2. Double tap and hold to select the \"Ubuntu_Free_Culture_Showcase\" " "folder\n" " 2. Drag the selected folder to the desktop and remove finger from " "touchpad.\n" "VERIFICATION:\n" " Did a selected folder move to the desktop?" msgstr "" #. summary #: ../jobs/touchpad.txt.in:181 msgid "Check touchpad pinch-to-zoom gesture" msgstr "" #. description #: ../jobs/touchpad.txt.in:182 msgid "" "PURPOSE:\n" " Check touchpad pinch gesture for zoom\n" "STEPS:\n" " 1. Open gallery-app with an image\n" " 2. Place two fingers on the touchpad and pinch them together\n" " 3. Place two fingers on the touchpad and move them apart\n" "VERIFICATION:\n" " Does the image zoom in and out?" msgstr "" #. summary #: ../jobs/touchpad.txt.in:198 msgid "Check 4-finger tap gesture" msgstr "" #. description #: ../jobs/touchpad.txt.in:199 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. 4-touch tap (tap with 4 fingers) anywhere on the touchpad\n" "VERIFICATION:\n" " Did the tap open the Dash?" msgstr "" #. description #: ../jobs/touchpad.txt.in:220 msgid "This test will check if your touchpad was detected as a mouse." msgstr "" #. description #: ../jobs/touchpad.txt.in:229 msgid "" "PURPOSE:\n" " Touchpad continuous move verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and continuously move your cursor within " "the borders of the displayed test window.\n" " You'll need to keep moving your finger on the touchpad for 10 seconds.\n" "VERIFICATION:\n" " Did the mouse cursor move without interruption?" msgstr "" #. name #: ../jobs/touchscreen.txt.in:3 msgid "Touchscreen" msgstr "" #. description #: ../jobs/touchscreen.txt.in:13 msgid "" "Determine whether the screen is detected as a non-touch device automatically." msgstr "" #. description #: ../jobs/touchscreen.txt.in:23 msgid "" "Determine whether the screen is detected as a multitouch device " "automatically." msgstr "" #. description #: ../jobs/touchscreen.txt.in:31 msgid "" "PURPOSE:\n" " Touchscreen capability manual detection.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Your screen was detected as a non touch screen. Select PASS if this is " "correct." msgstr "" #. description #: ../jobs/touchscreen.txt.in:59 msgid "" "PURPOSE:\n" " Check touchscreen drag & drop\n" "STEPS:\n" " 1. Tap and hold an object on the desktop\n" " 2. Drag and drop the object in a different location\n" "VERIFICATION:\n" " Does drag and drop work?" msgstr "" #. summary #: ../jobs/touchscreen.txt.in:71 msgid "Check touchscreen pinch gesture for zoom" msgstr "" #. description #: ../jobs/touchscreen.txt.in:76 msgid "" "PURPOSE:\n" " Check touchscreen pinch gesture for zoom\n" "STEPS:\n" " 1. Commence the test\n" " 2. Using 2 fingers, resize the blue square until it turns green, then " "release it.\n" "VERIFICATION:\n" " Did the blue square change size following the gesture?" msgstr "" #. summary #: ../jobs/touchscreen.txt.in:88 msgid "Check touchscreen pinch gesture for rotate" msgstr "" #. description #: ../jobs/touchscreen.txt.in:93 msgid "" "PURPOSE:\n" " Check touchscreen pinch gesture for rotate\n" "STEPS:\n" " 1. Commence the test\n" " 2. Using 2 fingers, rotate the blue square until it turns green, then " "release it.\n" "VERIFICATION:\n" " Did the blue square rotate following the gesture?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:108 msgid "" "PURPOSE:\n" " Validate that 3-touch drag is operating as expected\n" "STEPS:\n" " 1. Open a windows and bring it to the foreground\n" " 2. 3-touch the window and drag\n" "VERIFICATION:\n" " Did the window move along with the drag?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:123 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. 4-touch tap anywhere on the touchscreen\n" "VERIFICATION:\n" " Did the tap open the Dash?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:137 msgid "" "PURPOSE:\n" " Validate that 3-touch tap is operating as expected\n" "STEPS:\n" " 1. Commence the test\n" " 2. Tap the screen within the test area with 3 fingers simultaneously.\n" " 3. Once 3 fingers are on the screen you should see the indicator they " "are recognized.\n" "VERIFICATION:\n" " Did you see the green circles around the three fingers?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:160 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. Commence the test\n" " 2. Tap the screen within the test area with 4 fingers simultaneously.\n" " 3. Once 4 fingers are on the screen you should see the indicator they " "are recognized.\n" "VERIFICATION:\n" " Did you see the green circles around the four fingers?" msgstr "" #. description #: ../jobs/usb.txt.in:6 msgid "Detects and shows USB devices attached to this system." msgstr "" #. description #: ../jobs/usb.txt.in:14 msgid "" "PURPOSE:\n" " This test will check that your system detects USB storage devices.\n" "STEPS:\n" " 1. Plug in one or more USB keys or hard drives.\n" " 2. Click on \"Test\".\n" "VERIFICATION:\n" " Were the drives detected?" msgstr "" #. description #: ../jobs/usb.txt.in:29 msgid "" "PURPOSE:\n" " This test will check that you can use a USB HID device\n" "STEPS:\n" " 1. Enable either a USB mouse or keyboard\n" " 2. For mice, perform actions such as moving the pointer, right and left " "button clicks and double clicks\n" " 3. For keyboards, commence the test to launch a small tool. Type some " "text and close the tool.\n" "VERIFICATION:\n" " Did the device work as expected?" msgstr "" #. description #: ../jobs/usb.txt.in:45 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB storage device\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB storage device\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:64 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB 3.0 storage device\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB 3.0 storage device in a USB 3.0 " "port.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:82 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB storage device\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:101 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB 3.0 storage device\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB 3.0 device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:119 msgid "" "PURPOSE:\n" " This test will check your USB connection.\n" "STEPS:\n" " 1. Plug a USB HDD or thumbdrive into the computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Click \"Test\" to begin the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:139 msgid "" "PURPOSE:\n" " This test will check your USB 3.0 connection.\n" "STEPS:\n" " 1. Plug a USB 3.0 HDD or thumbdrive into a USB 3.0 port in the " "computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Click \"Test\" to begin the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:157 msgid "This test is automated and executes after the usb/insert test is run." msgstr "" #. description #: ../jobs/usb.txt.in:169 msgid "" "This test is automated and executes after the usb3/insert test is run." msgstr "" #. description #: ../jobs/usb.txt.in:178 msgid "" "Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on " "randomly created data. It requires that a USB stick is plugged into an " "available USB port before running the certification suite." msgstr "" #. description #: ../jobs/usb.txt.in:191 msgid "" "Tests USB 3.0 ports on a system by doing write/read/compare tests on " "randomly created data. It requires that a USB stick is plugged into an " "available USB port before running the certification suite. Additionally, it " "will only work with USB sticks and ports rated for USB 3.0 speeds or faster." msgstr "" #. description #: ../jobs/usb.txt.in:200 msgid "" "PURPOSE:\n" " This test will check your USB connection.\n" "STEPS:\n" " 1. Connect a USB storage device to an external USB slot on this " "computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Confirm that the icon appears.\n" " 4. Eject the device.\n" " 5. Repeat with each external USB slot.\n" "VERIFICATION:\n" " Do all USB slots work with the device?" msgstr "" #. description #: ../jobs/user_apps.txt.in:7 msgid "" "PURPOSE:\n" " This test will check that the update manager can find updates.\n" "STEPS:\n" " 1. Click Test to launch update-manager.\n" " 2. Follow the prompts and if updates are found, install them.\n" " 3. When Update Manager has finished, please close the app by clicking the " "Close button in the lower right corner.\n" "VERIFICATION:\n" " Did Update manager find and install updates (Pass if no updates are found,\n" " but Fail if updates are found but not installed)" msgstr "" #. description #: ../jobs/user_apps.txt.in:24 msgid "" "PURPOSE:\n" " This test will check that the file browser can create a new folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. On the menu bar, click File -> Create Folder.\n" " 3. In the name box for the new folder, enter the name Test Folder and hit " "Enter.\n" " 4. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a new folder called Test Folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:40 msgid "" "PURPOSE:\n" " This test will check that the file browser can copy a folder\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the folder called Test Folder and click on Copy.\n" " 3. Right Click on any white area in the window and click on Paste.\n" " 4. Right click on the folder called Test Folder(copy) and click Rename.\n" " 5. Enter the name Test Data in the name box and hit Enter.\n" " 6. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a folder called Test Data?" msgstr "" #. description #: ../jobs/user_apps.txt.in:58 msgid "" "PURPOSE:\n" " This test will verify that the file browser can move a folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Click and drag the folder called Test Data onto the icon called Test " "Folder.\n" " 3. Release the button.\n" " 4. Double click the folder called Test Folder to open it up.\n" " 5. Close the File Browser.\n" "VERIFICATION:\n" " Was the folder called Test Data successfully moved into the folder called " "Test Folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:75 msgid "" "PURPOSE:\n" " This test will check that the file browser can create a new file.\n" "STEPS:\n" " 1. Click Select Test to open the File Browser.\n" " 2. Right click in the white space and click Create Document -> Empty " "Document.\n" " 3. Enter the name Test File 1 in the name box and hit Enter.\n" " 4. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a file called Test File 1?" msgstr "" #. description #: ../jobs/user_apps.txt.in:91 msgid "" "PURPOSE:\n" " This test will check that the file browser can copy a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the file called Test File 1 and click Copy.\n" " 3. Right click in the white space and click Paste.\n" " 4. Right click on the file called Test File 1(copy) and click Rename.\n" " 5. Enter the name Test File 2 in the name box and hit Enter.\n" " 6. Close the File Browser.\n" "VERIFICATION:\n" " Do you now have a file called Test File 2?" msgstr "" #. description #: ../jobs/user_apps.txt.in:109 msgid "" "PURPOSE:\n" " This test will check that the file browser can move a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Click and drag the file called Test File 2 onto the icon for the folder " "called Test Data.\n" " 3. Release the button.\n" " 4. Double click the icon for Test Data to open that folder up.\n" " 5. Close the File Browser.\n" "VERIFICATION:\n" " Was the file Test File 2 successfully moved into the Test Data folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:126 msgid "" "PURPOSE:\n" " This test will check that the file browser can delete a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the file called Test File 1 and click on Move To Trash.\n" " 3. Verify that Test File 1 has been removed.\n" " 4. Close the File Browser.\n" "VERIFICATION:\n" " Is Test File 1 now gone?" msgstr "" #. description #: ../jobs/user_apps.txt.in:142 msgid "" "PURPOSE:\n" " This test will check that the file browser can delete a folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the folder called Test Folder and click on Move To " "Trash.\n" " 3. Verify that the folder was deleted.\n" " 4. Close the file browser.\n" "VERIFICATION:\n" " Has Test Folder been successfully deleted?" msgstr "" #. description #: ../jobs/user_apps.txt.in:223 msgid "Common Document Types Test" msgstr "" #. description #: ../jobs/user_apps.txt.in:246 msgid "" "PURPOSE:\n" " This test will check that Firefox can render a basic web page.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view the test web page.\n" "VERIFICATION:\n" " Did the Ubuntu Test page load correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:260 msgid "" "PURPOSE:\n" " This test will check that Firefox can run flash applications. Note: this " "may\n" " require installing additional software to successfully complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view a sample Flash test.\n" "VERIFICATION:\n" " Did you see the text?" msgstr "" #. description #: ../jobs/user_apps.txt.in:275 msgid "" "PURPOSE:\n" " This test will check that Firefox can play a Flash video. Note: this may\n" " require installing additional software to successfully complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view a short flash video.\n" "VERIFICATION:\n" " Did the video play correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:292 msgid "" "PURPOSE:\n" " This test will check that Firefox can play a Quicktime (.mov) video file.\n" " Note: this may require installing additional software to successfully\n" " complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox with a sample video.\n" "VERIFICATION:\n" " Did the video play using a plugin?" msgstr "" #. description #: ../jobs/user_apps.txt.in:307 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Facebook Chat service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:322 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Google Talk (gtalk) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:337 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Jabber service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:352 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the AOL Instant Messaging (AIM) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:367 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Microsoft Network (MSN) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:382 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a POP3 account.\n" "VERIFICATION:\n" " Were you able to receive and read e-mail correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:396 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a IMAP account.\n" "VERIFICATION:\n" " Were you able to receive and read e-mail correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:410 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a SMTP account.\n" "VERIFICATION:\n" " Were you able to send e-mail without errors?" msgstr "" #. description #: ../jobs/user_apps.txt.in:424 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator.\n" "VERIFICATION:\n" " Did it launch correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:438 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Simple math functions (+,-,/,*)\n" " 2. Nested math functions ((,))\n" " 3. Fractional math\n" " 4. Decimal math\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:456 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Memory set\n" " 2. Memory reset\n" " 3. Memory last clear\n" " 4. Memory clear\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:474 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Cut\n" " 2. Copy\n" " 3. Paste\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:490 msgid "" "PURPOSE:\n" " This test checks that gedit works.\n" "STEPS:\n" " 1. Commence the test to open gedit.\n" " 2. Enter some text and save the file (make a note of the file name you " "use), then close gedit.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:505 msgid "" "PURPOSE:\n" " This test checks that gedit works.\n" "STEPS:\n" " 1. Commence the test to open gedit, and re-open the file you created " "previously.\n" " 2. Edit then save the file, then close gedit.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:519 msgid "" "PURPOSE:\n" " This test will check that Gnome Terminal works.\n" "STEPS:\n" " 1. Commence the test to open Terminal.\n" " 2. Type 'ls' and press enter. You should see a list of files and folder in " "your home directory.\n" " 3. Close the terminal window.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/virtualization.txt.in:12 msgid "" "Verifies that a KVM guest can be created and booted using an Ubuntu Server " "cloud image." msgstr "" #. summary #: ../jobs/virtualization.txt.in:15 msgid "Verify KVM VM boots" msgstr "" #. description #: ../jobs/virtualization.txt.in:25 msgid "Test to verify that the Xen Hypervisor is running." msgstr "" #. summary #: ../jobs/virtualization.txt.in:27 msgid "Verify Xen is running" msgstr "" #. description #: ../jobs/virtualization.txt.in:37 msgid "Test to check that a Xen domU image can boot and run on Xen on Ubuntu" msgstr "" #. summary #: ../jobs/virtualization.txt.in:39 msgid "Verify Xen domU can boot" msgstr "" #. description #: ../jobs/wireless.txt.in:22 msgid "Wireless scanning test. It scans and reports on discovered APs." msgstr "" #. description #: ../jobs/wireless.txt.in:32 msgid "" "This is an automated test to gather some info on the current state of your " "wireless devices. If no devices are found, the test will exit with an error." msgstr "" #. description #: ../jobs/wireless.txt.in:41 msgid "" "PURPOSE:\n" " This test will check your wireless connection.\n" "STEPS:\n" " 1. Click on the Network icon in the panel.\n" " 2. Select a network below the 'Wireless networks' section.\n" " 3. Click \"Test\" to verify that it's possible to establish an HTTP " "connection.\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" #. description #: ../jobs/wireless.txt.in:77 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11b/g protocols." msgstr "" #. description #: ../jobs/wireless.txt.in:107 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11b/g protocols." msgstr "" #. description #: ../jobs/wireless.txt.in:137 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11n protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:167 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11n protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:198 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11ac protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:229 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11ac protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:259 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:298 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:338 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11n protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:378 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11n protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:418 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections with the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:458 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections with the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:497 msgid "" "Tests the performance of a system's wireless connection through the iperf " "tool." msgstr "" #. description #: ../jobs/wireless.txt.in:526 msgid "" "Tests the performance of a system's wireless connection through the iperf " "tool, using UDP packets." msgstr "" #. description #: ../jobs/wireless.txt.in:555 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11a protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11a protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:585 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11b protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11b protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:605 msgid "" "This test executes iperf to generate a load on the network device " "{__index__} ({interface}) and then performs a ping test to watch for dropped " "packets and very large latency periods." msgstr "" #. description #: ../jobs/wireless.txt.in:633 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11g protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11g protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:644 msgid "" "Test that the MAC80211 modules are loaded and wireless extensions are " "working." msgstr "" #. description #: ../jobs/wireless.txt.in:657 msgid "" "This test executes iwconfig requests against wireless device {__index__} " "({interface})." msgstr "" #. description #: ../jobs/wireless.txt.in:666 msgid "" "PURPOSE:\n" " This test will check whether or not your driver responds to rfkill " "commands.\n" "STEPS:\n" " 1. Use the hardware switch on the side of your device to switch off " "wireless.\n" " 2. If you do not have a hardware switch disable wireless from the " "network manager icon in the panel\n" " 3. Click \"Test\" to verify that the hard or soft blocks are in place.\n" "VERIFICATION:\n" " Did the hard or soft blocks show on in the dialog?" msgstr "" #. purpose #: ../jobs/wireless.txt.in:691 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of wireless device {__index__} ({interface})." msgstr "" plainbox-provider-checkbox-0.25/po/zh_TW.po0000664000175000017500000105163612646152433022121 0ustar sylvainsylvain00000000000000# Chinese (Traditional) translation for checkbox # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the checkbox package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: checkbox\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2016-01-14 14:48+0800\n" "PO-Revision-Date: 2016-01-15 03:37+0000\n" "Last-Translator: Po-Hsu Lin \n" "Language-Team: Chinese (Traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2016-01-15 05:08+0000\n" "X-Generator: Launchpad (build 17886)\n" #. description #: ../jobs/audio.txt.in:9 msgid "Test to detect audio devices" msgstr "嵿¸¬éŸ³æ•ˆè£ç½®çš„æ¸¬è©¦" #. description #: ../jobs/audio.txt.in:28 msgid "" "PURPOSE:\n" " This test will check that internal speakers work correctly\n" "STEPS:\n" " 1. Make sure that no external speakers or headphones are connected\n" " When testing a desktop, you can skip this test if there is no\n" " internal speaker, we will test the external output later\n" " 2. Commence the test to play a brief tone on your audio device\n" "VERIFICATION:\n" " Did you hear a tone?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥å…§å»ºå–‡å­æ˜¯å¦é‹ä½œæ­£å¸¸\n" "步驟:\n" " 1. ç¢ºå®šæ²’æœ‰é€£æŽ¥ä»»ä½•å¤–æŽ¥å–‡å­æˆ–耳機,\n" " 若您是使用沒有內建喇å­çš„æ¡Œä¸Šåž‹é›»è…¦ï¼Œæ‚¨å¯ä»¥ç•¥éŽæœ¬é …測試。\n" " 我們之後將會測試外接音效è£ç½®ã€‚\n" " 2. 進行測試來讓您的è£ç½®æ’­æ”¾ä¸€å°æ®µéŸ³æ•ˆ\n" "檢查:\n" " 您有è½åˆ°æ¸¬è©¦éŸ³å—Žï¼Ÿ" #. summary #: ../jobs/audio.txt.in:46 msgid "HDMI audio test" msgstr "HDMI 音效輸出測試" #. summary #: ../jobs/audio.txt.in:79 msgid "DisplayPort audio test" msgstr "DisplayPort 音效輸出測試" #. summary #: ../jobs/audio.txt.in:112 msgid "Thunderbolt audio test" msgstr "Thunderbolt 音效輸出測試" #. description #: ../jobs/audio.txt.in:156 msgid "" "PURPOSE:\n" " This test will check that headphones connector works correctly\n" "STEPS:\n" " 1. Connect a pair of headphones to your audio device\n" " 2. Commence the test to play a sound to your audio device\n" "VERIFICATION:\n" " Did you hear a sound through the headphones and did the sound play " "without any distortion, clicks or other strange noises from your headphones?" msgstr "" "目的:\n" " é€™å€‹æ¸¬è©¦æœƒæ¸¬è©¦è€³æ©Ÿé€£æŽ¥ç«¯å­æ˜¯å¦æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. 將外接耳機接上電腦\n" " 2. 進行測試來讓您的è£ç½®æ’­æ”¾ä¸€å°æ®µéŸ³æ•ˆ\n" "檢查:\n" " æ‚¨æ˜¯å¦æœ‰å¾žå¤–接耳機è½åˆ°ä¸€æ®µæ¸…楚ä¸å¤±çœŸã€æ²’æœ‰å–€å™ è²æˆ–是其他奇怪噪音的音效?" #. description #: ../jobs/audio.txt.in:182 msgid "" "PURPOSE:\n" " This test will check that recording sound using the onboard microphone " "works correctly\n" "STEPS:\n" " 1. Disconnect any external microphones that you have plugged in\n" " 2. Click \"Test\", then speak into your internal microphone\n" " 3. After a few seconds, your speech will be played back to you.\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" "目的:\n" " é€™å€‹æ¸¬è©¦å°‡æœƒæª¢æŸ¥å…§å»ºçš„éº¥å…‹é¢¨æ˜¯å¦æ­£å¸¸é‹ä½œ (將用內建的麥克風錄下一段è²éŸ³)\n" "步驟:\n" " 1. 如果您已經接上的外接的麥克風,請先移除\n" " 2. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•,然後å°è‘—內建的麥克風講一段話\n" " 3. 您剛剛講的話將é€éŽå–‡å­æ’­æ”¾å‡ºä¾†\n" "檢查:\n" " æ‚¨æ˜¯å¦æœ‰è½åˆ°è‡ªå·±å‰›å‰›è¢«éŒ„下來的話" #. description #: ../jobs/audio.txt.in:209 msgid "" "PURPOSE:\n" " This test will check that recording sound using an external microphone " "works correctly\n" "STEPS:\n" " 1. Connect a microphone to your microphone port\n" " 2. Click \"Test\", then speak into the external microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" "目的:\n" " é€™å€‹æ¸¬è©¦å°‡æœƒæª¢æŸ¥å¤–æŽ¥çš„éº¥å…‹é¢¨æ˜¯å¦æ­£å¸¸é‹ä½œ (將用外接的麥克風錄下一段è²éŸ³)\n" "步驟:\n" " 1. 將外接的麥克風連接到電腦\n" " 2. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•,然後å°è‘—外接的麥克風講一段話\n" " 3. 您剛剛講的話將é€éŽå–‡å­æ’­æ”¾å‡ºä¾†\n" "檢查:\n" " æ‚¨æ˜¯å¦æœ‰è½åˆ°è‡ªå·±å‰›å‰›è¢«éŒ„下來的話" #. description #: ../jobs/audio.txt.in:235 msgid "" "PURPOSE:\n" " This test will check that a USB audio device works correctly\n" "STEPS:\n" " 1. Connect a USB audio device to your system\n" " 2. Click \"Test\", then speak into the microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back through the USB headphones?" msgstr "" "目的:\n" " 這個測試將會檢查 USB 音效è£ç½®æ˜¯å¦æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. å°‡ USB 音效è£ç½®é€£æŽ¥åˆ°é›»è…¦\n" " 2. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•,然後å°è‘— USB 音效è£ç½®çš„麥克風講一段話\n" " 3. 您剛剛講的話將é€éŽå–‡å­æ’­æ”¾å‡ºä¾†\n" "檢查:\n" " æ‚¨æ˜¯å¦æœ‰è½åˆ°è‡ªå·±å‰›å‰›è¢«éŒ„下來的話" #. description #: ../jobs/audio.txt.in:258 msgid "" "Play back a sound on the default output and listen for it on the default " "input." msgstr "在é è¨­éŸ³æ•ˆè¼¸å‡ºè£ç½®ä¸Šæ’­æ”¾ä¸€æ®µéŸ³æ•ˆï¼Œä¸¦ç”±é è¨­éŸ³æ•ˆè¼¸å…¥è£ç½®æŽ¥æ”¶å®ƒ" #. description #: ../jobs/audio.txt.in:267 msgid "" "Collect audio-related system information. This data can be used to simulate " "this computer's audio subsystem and perform more detailed tests under a " "controlled environment." msgstr "收集音效相關的系統資訊。這些資料å¯ä»¥ç”¨ä¾†æ¨¡æ“¬é€™å°é›»è…¦çš„音效å­ç³»çµ±ä¸¦åœ¨å—控環境下進行更詳細的檢查。" #. description #: ../jobs/audio.txt.in:278 msgid "Attaches the audio hardware data collection log to the results." msgstr "將音效硬體資料附加至測試報告中。" #. description #: ../jobs/audio.txt.in:286 msgid "" "PURPOSE:\n" " Check that the various audio channels are working properly\n" "STEPS:\n" " 1. Commence the test\n" "VERIFICATION:\n" " You should clearly hear a voice from the different audio channels" msgstr "" "目的:\n" " 檢查ä¸åŒçš„è²é“æ˜¯å¦æœ‰æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. 進行測試\n" "檢查:\n" " 你應該會è½åˆ°éŸ³æ•ˆç”±ä¸åŒçš„è²é“中播出" #. description #: ../jobs/audio.txt.in:314 msgid "" "PURPOSE:\n" " Check that external line out connection works correctly\n" "STEPS:\n" " 1. Insert cable to speakers (with built-in amplifiers) on the line out " "port\n" " 2. Open system sound preferences, 'Output' tab, select 'Line-out' on " "the connector list. Commence the test\n" " 3. On the system sound preferences, select 'Internal Audio' on the " "device list and click 'Test Speakers' to check left and right channel\n" "VERIFICATION:\n" " 1. Do you hear a sound in the speakers? The internal speakers should " "*not* be muted automatically\n" " 2. Do you hear the sound coming out on the corresponding channel?" msgstr "" "目的:\n" " 檢查輸出至其他è£ç½® (Line-Out) 音æºé€£æŽ¥åŸ æ˜¯å¦æœ‰æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. 將音æºç·šå¾žæœ‰å…§å»ºæ”¾å¤§å™¨çš„å–‡å­æŽ¥åˆ°é›»è…¦ä¸Šè¼¸å‡ºè‡³å…¶ä»–è£ç½® (Line-Out) 的音æºé€£æŽ¥åŸ \n" " 2. 打開系統音效設定,於「輸出ã€é ç±¤çš„è£ç½®åˆ—è¡¨ä¸­é¸æ“‡ã€Œè¼¸å‡ºè‡³å…¶ä»–è£ç½® (Line-Out)ã€ï¼Œç„¶å¾Œé€²è¡Œæ¸¬è©¦\n" " 3. åŒæ¨£æ–¼æ­¤é ç±¤ä¸­ï¼Œé¸æ“‡ã€Œå…§å»ºéŸ³æ•ˆã€è£ç½®ä¸¦æŒ‰ä¸‹ã€Œæ¸¬è©¦è²éŸ³ã€ä¾†æª¢æŸ¥å·¦å³è²é“\n" "檢查:\n" " 1. 您有è½åˆ°ä¾†è‡ªå¤–接喇å­çš„è²éŸ³å—Žï¼Ÿå…§å»ºå–‡å­æ‡‰è©²*䏿œƒ*自動被éœéŸ³\n" " 2. 您有è½åˆ°è²éŸ³å¾žç›¸å°æ‡‰çš„è²é“中播出嗎?" #. description #: ../jobs/audio.txt.in:341 msgid "" "PURPOSE:\n" " Check that external line in connection works correctly\n" "STEPS:\n" " 1. Use a cable to connect the line in port to an external line out " "source.\n" " 2. Open system sound preferences, 'Input' tab, select 'Line-in' on the " "connector list. Commence the test\n" " 3. After a few seconds, your recording will be played back to you.\n" "VERIFICATION:\n" " Did you hear your recording?" msgstr "" "目的:\n" " 檢查自其他è£ç½®è¼¸å…¥ (Line-In) 音æºé€£æŽ¥åŸ æ˜¯å¦æœ‰æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. 連接外部音æºèˆ‡é›»è…¦ä¸Šçš„自其他è£ç½®è¼¸å…¥ (Line-In) 音æºé€£æŽ¥åŸ \n" " 2. 打開系統音效設定,於「輸入ã€é ç±¤çš„è£ç½®åˆ—è¡¨ä¸­é¸æ“‡ã€Œè‡ªå…¶ä»–è£ç½®è¼¸å…¥ (Line-In) ã€ï¼Œç„¶å¾Œé€²è¡Œæ¸¬è©¦\n" " 3. 幾秒é˜å¾Œï¼Œé›»è…¦å°‡æœƒæ’­æ”¾è‡ªå¤–部音æºéŒ„下的è²éŸ³\n" "檢查:\n" " 您有è½åˆ°è‡ªå¤–部音æºéŒ„下的è²éŸ³å—Žï¼Ÿ" #. description #: ../jobs/audio.txt.in:359 msgid "" "PURPOSE:\n" " Check that system detects speakers or headphones being plugged in\n" "STEPS:\n" " 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack\n" " 2. Locate the speaker / headphone jack on the device under test\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug headphones or speakers into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" "目的:\n" " æª¢æŸ¥ç³»çµ±èƒ½å¦æ­£ç¢ºåµæ¸¬åˆ°å¤–æŽ¥å–‡å­æˆ–耳機的連接\n" "STEPS:\n" " 1. 準備一組帶有 3.5mm 標準接頭的耳機或喇å­\n" " 2. æ‰¾åˆ°é›»è…¦ä¸Šä¾›å¤–æŽ¥å–‡å­ / 耳機接頭用的連接埠\n" " 3. 執行測試 (您會有 30 秒的時間來執行以下æ“作)\n" " 4. 將耳機或喇å­é€£æŽ¥ç«¯å­æŽ¥è‡³é›»è…¦ä¸Šå°æ‡‰çš„連接埠\n" " 5. 為了接下來的測試,請將連接端å­è‡ªé›»è…¦ä¸Šæ‹”除\n" "檢查:\n" " 這是一個自動化的測試,您ä¸éœ€è¦é€²è¡Œå…¶ä»–æ“作\n" " 本測試將在 30 秒後逾時 (若逾時,本測試將會被紀錄為測試失敗)" #. description #: ../jobs/audio.txt.in:380 msgid "" "PURPOSE:\n" " Check that system detects a microphone being plugged in\n" "STEPS:\n" " 1. Prepare a microphone with a standard 3.5mm jack\n" " 2. Locate the microphone jack on the device under test.\n" " Keep in mind that it may be shared with the headphone jack.\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug the microphone into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" "目的:\n" " æª¢æŸ¥ç³»çµ±èƒ½å¦æ­£ç¢ºåµæ¸¬åˆ°å¤–接麥克風的連接\n" "STEPS:\n" " 1. 準備一組帶有 3.5mm 標準接頭的麥克風\n" " 2. 找到電腦上供外接麥克風接頭用的連接埠\n" " 外接麥克風有å¯èƒ½æœƒè·Ÿå¤–接耳機共用åŒä¸€å€‹é€£æŽ¥åŸ \n" " 3. 執行測試 (您會有 30 秒的時間來執行以下æ“作)\n" " 4. å°‡éº¥å…‹é¢¨é€£æŽ¥ç«¯å­æŽ¥è‡³é›»è…¦ä¸Šå°æ‡‰çš„連接埠\n" " 5. 為了接下來的測試,請將連接端å­è‡ªé›»è…¦ä¸Šæ‹”除\n" "檢查:\n" " 這是一個自動化的測試,您ä¸éœ€è¦é€²è¡Œå…¶ä»–æ“作\n" " 本測試將在 30 秒後逾時 (若逾時,本測試將會被紀錄為測試失敗)" #. description #: ../jobs/audio.txt.in:411 msgid "" "PURPOSE:\n" " Check that balance control works correctly on internal speakers\n" "STEPS:\n" " 1. Check that moving the balance slider from left to right works " "smoothly\n" " 2. Commence the test to play an audio tone for 10 seconds.\n" " 3. Move the balance slider from left to right and back.\n" " 4. Check that actual speaker audio balance follows your setting.\n" "VERIFICATION:\n" " Does the slider move smoothly, as well as being followed by the setting " "by the actual audio output?" msgstr "" "目的:\n" " 檢查音效輸出平衡控制是å¦èƒ½åœ¨å…§å»ºå–‡å­ä¸Šæ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. 檢查是å¦èƒ½ç”±å·¦åˆ°å³é †åˆ©çš„æ‹–動音效輸出平衡設定æ¢\n" " 2. 進行測試來播放一段約 10 ç§’é˜çš„音效\n" " 3. 將音效輸出平衡設定æ¢ç”±å·¦ç§»åˆ°å³å†ç§»å›žä¾†\n" " 4. æª¢æŸ¥å–‡å­æ˜¯å¦æœ‰æ­£ç¢ºå應出該音效輸出平衡設定\n" "檢查:\n" " éŸ³æ•ˆè¼¸å‡ºå¹³è¡¡è¨­å®šæ¢æ˜¯å¦èƒ½å¤ é †åˆ©çš„è¢«æ‹–å‹•ï¼Œå–‡å­æ˜¯å¦æœ‰æ­£ç¢ºå應出實際的音效平衡設定?" #. description #: ../jobs/audio.txt.in:439 msgid "" "PURPOSE:\n" " Check that balance control works correctly on external headphone\n" "STEPS:\n" " 1. Check that moving the balance slider from left to right works " "smoothly\n" " 2. Commence the test to play an audio tone for 10 seconds.\n" " 3. Move the balance slider from left to right and back.\n" " 4. Check that actual headphone audio balance follows your setting.\n" "VERIFICATION:\n" " Does the slider move smoothly, as well as being followed by the setting " "by the actual audio output?" msgstr "" "目的:\n" " 檢查音效輸出平衡控制是å¦èƒ½åœ¨å¤–接耳機上正常é‹ä½œ\n" "步驟:\n" " 1. 檢查是å¦èƒ½ç”±å·¦åˆ°å³é †åˆ©çš„æ‹–動音效輸出平衡設定æ¢\n" " 2. 進行測試來播放一段約 10 ç§’é˜çš„音效\n" " 3. 將音效輸出平衡設定æ¢ç”±å·¦ç§»åˆ°å³å†ç§»å›žä¾†\n" " 4. æª¢æŸ¥è€³æ©Ÿæ˜¯å¦æœ‰æ­£ç¢ºå應出該音效輸出平衡設定\n" "檢查:\n" " éŸ³æ•ˆè¼¸å‡ºå¹³è¡¡è¨­å®šæ¢æ˜¯å¦èƒ½å¤ é †åˆ©çš„è¢«æ‹–å‹•ï¼Œè€³æ©Ÿæ˜¯å¦æœ‰æ­£ç¢ºå應出實際的音效平衡設定?" #. description #: ../jobs/audio.txt.in:459 msgid "Test to detect audio devices after suspending 30 times." msgstr "本測試會在暫åœ30æ¬¡å¾Œåµæ¸¬éŸ³æ•ˆè£ç½®" #. description #: ../jobs/audio.txt.in:478 msgid "" "PURPOSE:\n" " This test will check that internal speakers work correctly after " "suspending 30 times.\n" "STEPS:\n" " 1. Make sure that no external speakers or headphones are connected\n" " When testing a desktop, you can skip this test if there is no\n" " internal speaker, we will test the external output later\n" " 2. Commence the test to play a brief tone on your audio device\n" "VERIFICATION:\n" " Did you hear a tone?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥å…§å»ºå–‡å­æ˜¯å¦åœ¨æš«åœ 30 次後ä»èƒ½å¤ æ­£å¸¸é‹ä½œ\n" "步驟\n" " 1. 確èªç¢ºå®šæ²’æœ‰é€£æŽ¥ä»»ä½•å¤–æŽ¥å–‡å­æˆ–耳機,\n" " 若您是使用沒有內建喇å­çš„æ¡Œä¸Šåž‹é›»è…¦ï¼Œæ‚¨å¯ä»¥ç•¥éŽæœ¬é …測試。\n" " 我們之後將會測試外接音效è£ç½®ã€‚\n" " 2. 進行測試來讓您的è£ç½®æ’­æ”¾ä¸€å°æ®µéŸ³æ•ˆ\n" "檢查:\n" " 您有è½åˆ°æ¸¬è©¦éŸ³å—Žï¼Ÿ" #. description #: ../jobs/audio.txt.in:503 msgid "" "Play back a sound on the default output and listen for it on the default " "input, after suspending 30 times." msgstr "åœ¨æš«åœ 30 次後,於é è¨­éŸ³æ•ˆè¼¸å‡ºè£ç½®ä¸Šæ’­æ”¾ä¸€æ®µéŸ³æ•ˆï¼Œä¸¦ç”±é è¨­éŸ³æ•ˆè¼¸å…¥è£ç½®æŽ¥æ”¶å®ƒ" #. description #: ../jobs/audio.txt.in:516 msgid "" "This test will verify that the volume levels are at an acceptable level on " "your local system. The test will validate that the volume is greater than " "or equal to minvol and less than or equal to maxvol for all sources (inputs) " "and sinks (outputs) recognized by PulseAudio. It will also validate that " "the active source and sink are not muted. You should not manually adjust " "the volume or mute before running this test." msgstr "" "æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ‚¨çš„éŸ³é‡æ˜¯è¢«è¨­å®šåœ¨å¯æŽ¥å—的範åœå…§ã€‚ 本測試將會檢查所有的音效輸入ã€è¼¸å‡ºéŸ³é‡æ˜¯å¦å¤§æ–¼æˆ–等於 PulseAudio æ‰€åµæ¸¬åˆ°çš„ minvol " "值,以åŠéŸ³é‡æ˜¯å¦å°æ–¼ç­‰æ–¼ maxvol 值。它也會檢查使用中的音效輸出ã€è¼¸å…¥æ˜¯å¦ä¸æ˜¯è™•æ–¼éœéŸ³çš„狀態。在開始測試å‰è«‹ä¸è¦æ‰‹å‹•調整音é‡å¤§å°ã€‚" #. description #: ../jobs/audio.txt.in:532 msgid "Record mixer settings after suspending 30 times." msgstr "在暫åœ30次後紀錄混音器設定" #. description #: ../jobs/benchmarks.txt.in:6 msgid "Raw read timing benchmark of each disk using hdparm." msgstr "" #. summary #: ../jobs/benchmarks.txt.in:20 msgid "Benchmark for each disk" msgstr "é‡å°å„個ç£ç¢Ÿé€²è¡Œæ•ˆèƒ½æ¸¬è©¦" #. description #: ../jobs/benchmarks.txt.in:24 msgid "Cached read timing benchmark of each disk using hdparm." msgstr "" #. description #: ../jobs/benchmarks.txt.in:44 msgid "Run gtkperf to make sure that GTK based test cases work" msgstr "執行 gtkperf 以確èªåŸºæ–¼ GTK 的測試項目能夠é‹ä½œ" #. description #: ../jobs/benchmarks.txt.in:53 msgid "Run Render-Bench XRender/Imlib2 benchmark" msgstr "執行 Render-Bench XRender/Imlib2 效能測試" #. description #: ../jobs/benchmarks.txt.in:61 msgid "Run Qgears2 XRender Extension gearsfancy benchmark" msgstr "執行 Qgears2 XRender 延伸套件 gearsfancy 效能測試" #. description #: ../jobs/benchmarks.txt.in:69 msgid "Run Qgears2 XRender Extension image scaling benchmark" msgstr "執行 Qgears2 XRender Extension å½±åƒç¸®æ”¾æ•ˆèƒ½æ¸¬è©¦" #. description #: ../jobs/benchmarks.txt.in:77 msgid "Run Qgears2 OpenGL gearsfancy benchmark" msgstr "執行 Qgears2 OpenGL gearsfancy 效能測試" #. description #: ../jobs/benchmarks.txt.in:85 msgid "Run Qgears2 OpenGL image scaling benchmark" msgstr "執行 Qgears2 OpenGL å½±åƒç¸®æ”¾æ•ˆèƒ½æ¸¬è©¦" #. description #: ../jobs/benchmarks.txt.in:95 msgid "Run GLmark2-ES2 benchmark" msgstr "執行 GLmark2-ES2 效能測試" #. description #: ../jobs/benchmarks.txt.in:106 msgid "Run GLmark2 benchmark" msgstr "執行 GLmark2 效能測試" #. description #: ../jobs/benchmarks.txt.in:113 msgid "Run Unigine Santuary benchmark" msgstr "執行 Unigine Santuary 效能測試" #. description #: ../jobs/benchmarks.txt.in:120 msgid "Run Unigine Tropics benchmark" msgstr "執行 Unigine Tropics 效能測試" #. description #: ../jobs/benchmarks.txt.in:127 msgid "Run Unigine Heaven benchmark" msgstr "執行 Unigine Heaven 效能測試" #. description #: ../jobs/benchmarks.txt.in:134 msgid "Run Lightsmark benchmark" msgstr "執行 Lightsmark 效能測試" #. description #: ../jobs/benchmarks.txt.in:142 msgid "Run Cachebench Read benchmark" msgstr "執行 Cachebench è®€å–æ•ˆèƒ½æ¸¬è©¦" #. description #: ../jobs/benchmarks.txt.in:150 msgid "Run Cachebench Write benchmark" msgstr "執行 Cachebench 寫入效能測試" #. description #: ../jobs/benchmarks.txt.in:158 msgid "Run Cachebench Read / Modify / Write benchmark" msgstr "執行 Cachebench è®€å– / 修改 / 寫入效能測試" #. description #: ../jobs/benchmarks.txt.in:166 msgid "Run Stream Copy benchmark" msgstr "執行 Stream Copy 效能測試" #. description #: ../jobs/benchmarks.txt.in:174 msgid "Run Stream Scale benchmark" msgstr "執行 Stream Scale 效能測試" #. description #: ../jobs/benchmarks.txt.in:182 msgid "Run Stream Add benchmark" msgstr "執行 Stream Add 效能測試" #. description #: ../jobs/benchmarks.txt.in:190 msgid "Run Stream Triad benchmark" msgstr "執行 Stream Triad 效能測試" #. description #: ../jobs/benchmarks.txt.in:198 msgid "Run Network Loopback benchmark" msgstr "執行網路 Loopback 效能測試" #. description #: ../jobs/benchmarks.txt.in:205 msgid "Check the time needed to reconnect to a WIFI access point" msgstr "æª¢æŸ¥é‡æ–°é€£è‡³ WIFI 無線網路存å–點所需時間" #. description #: ../jobs/benchmarks.txt.in:213 msgid "Run Encode MP3 benchmark" msgstr "執行 MP3 編碼效能測試" #. description #: ../jobs/benchmarks.txt.in:221 msgid "Run x264 H.264/AVC encoder benchmark" msgstr "執行 x264 H.264/AVC 編碼器效能測試" #. description #: ../jobs/benchmarks.txt.in:228 msgid "Run GnuPG benchmark" msgstr "執行 GnuPG 效能測試" #. description #: ../jobs/benchmarks.txt.in:236 msgid "Run Compress PBZIP2 benchmark" msgstr "執行 PBZIP2 壓縮效能測試" #. description #: ../jobs/benchmarks.txt.in:244 msgid "Run Compress 7ZIP benchmark" msgstr "執行 7ZIP 壓縮效能測試" #. description #: ../jobs/benchmarks.txt.in:252 msgid "Run N-Queens benchmark" msgstr "執行Nçš‡åŽæ•ˆèƒ½æ¸¬è©¦" #. description #: ../jobs/benchmarks.txt.in:260 msgid "Run Himeno benchmark" msgstr "執行 Himeno 效能測試" #. description #: ../jobs/benchmarks.txt.in:268 msgid "CPU utilization on an idle system." msgstr "檢查在系統閒置時的 CPU 閒置率" #. description #: ../jobs/benchmarks.txt.in:276 msgid "Disk utilization on an idle system." msgstr "檢查在系統閒置時的ç£ç¢Ÿä½¿ç”¨çއ" #. description #: ../jobs/benchmarks.txt.in:286 msgid "" "Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Fullscreen 1920x1080 " "no antialiasing" msgstr "採用 FurMark (OpenGL 2.1 or 3.2) 無抗鋸齒 1920x1080 全螢幕模å¼é€²è¡Œå£“力測試" #. description #: ../jobs/benchmarks.txt.in:298 msgid "" "Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Windowed 1024x640 no " "antialiasing" msgstr "採用 FurMark (OpenGL 2.1 or 3.2) 無抗鋸齒 1024x640 視窗模å¼é€²è¡Œå£“力測試" #. description #: ../jobs/benchmarks.txt.in:310 msgid "" "Run GiMark, a geometry instancing test (OpenGL 3.3) Fullscreen 1920x1080 no " "antialiasing" msgstr "執行 GiMark (OpenGL 3.3) 幾何示例測試,以無抗鋸齒 1920x1080 全螢幕模å¼é€²è¡Œ" #. description #: ../jobs/benchmarks.txt.in:322 msgid "" "Run GiMark, a geometry instancing test (OpenGL 3.3) Windowed 1024x640 no " "antialiasing" msgstr "執行 GiMark (OpenGL 3.3) 幾何示例測試,以無抗鋸齒 1024x640 視窗模å¼é€²è¡Œ" #. description #: ../jobs/benchmarks.txt.in:334 msgid "" "Run a tessellation test based on TessMark (OpenGL 4.0) Fullscreen 1920x1080 " "no antialiasing" msgstr "執行 TessMark (OpenGL 4.0) 曲é¢ç´°åˆ†æ¸¬è©¦ï¼Œä»¥ç„¡æŠ—鋸齒 1920x1080 全螢幕模å¼é€²è¡Œ" #. description #: ../jobs/benchmarks.txt.in:345 msgid "" "Run a tessellation test based on TessMark (OpenGL 4.0) Windowed 1024x640 no " "antialiasing" msgstr "執行 TessMark (OpenGL 4.0) 曲é¢ç´°åˆ†æ¸¬è©¦ï¼Œä»¥ç„¡æŠ—鋸齒 1024x640 視窗模å¼é€²è¡Œ" #. description #: ../jobs/bluetooth.txt.in:23 msgid "" "Automated test to store bluetooth device information in checkbox report" msgstr "此測試會把è—芽è£ç½®è³‡è¨Šå„²å­˜åˆ° Checkbox 的報告中" #. description #: ../jobs/bluetooth.txt.in:31 msgid "" "PURPOSE:\n" " This test will check that bluetooth connection works correctly\n" "STEPS:\n" " 1. Enable bluetooth on any mobile device (PDA, smartphone, etc.)\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select 'Setup new device'\n" " 4. Look for the device in the list and select it\n" " 5. In the device write the PIN code automatically chosen by the wizard\n" " 6. The device should pair with the computer\n" " 7. Right-click on the bluetooth icon and select browse files\n" " 8. Authorize the computer to browse the files in the device if needed\n" " 9. You should be able to browse the files\n" "VERIFICATION:\n" " Did all the steps work?" msgstr "" "目的:\n" " 本測試將會檢查è—ç‰™é€£ç·šæ˜¯å¦æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. 啟動任何行動è£ç½® (PDAã€æ™ºæ…§åž‹æ‰‹æ©Ÿç­‰) 上的è—芽功能\n" " 2. 點擊系統é¸å–®çš„è—牙圖示\n" " 3. 鏿“‡ã€Œè¨­å®šæ–°è£ç½®ã€\n" " 4. 在列表中找到該è£ç½®ä¸¦èˆ‡å…¶é…å°\n" " 5. 在該è£ç½®ä¸­è¼¸å…¥è¨­å®šç²¾éˆæ‰€çµ¦å®šçš„ PIN 碼\n" " 6. 該è£ç½®æ‡‰è©²æœƒèˆ‡é›»è…¦æˆåŠŸé…å°\n" " 7. 在è—牙圖示上按å³éµï¼Œé¸æ“‡ç€è¦½æª”案\n" " 8. 若有需è¦ï¼Œè«‹åœ¨è©²è£ç½®ä¸ŠæŽˆæ¬Šè®“本電腦能夠ç€è¦½è©²è£ç½®ä¸Šçš„æª”案needed\n" " 9. 您ç¾åœ¨æ‡‰è©²å¯ä»¥ç€è¦½è£ç½®ä¸Šçš„æª”案了\n" "檢查:\n" " æ˜¯å¦æ‰€æœ‰çš„æ­¥é©Ÿéƒ½èƒ½æ­£ç¢ºé€²è¡Œï¼Ÿ" #. description #: ../jobs/bluetooth.txt.in:52 msgid "" "PURPOSE:\n" " This test will check that you can transfer information through a " "bluetooth connection\n" "STEPS:\n" " 1. Make sure that you're able to browse the files in your mobile device\n" " 2. Copy a file from the computer to the mobile device\n" " 3. Copy a file from the mobile device to the computer\n" "VERIFICATION:\n" " Were all files copied correctly?" msgstr "" "目的:\n" " 本測試將會檢查是å¦èƒ½é€éŽè—ç‰™é€£ç·šå‚³é€æª”案\n" "步驟:\n" " 1. 確定您å¯ä»¥é€éŽè—牙連線ç€è¦½è¡Œå‹•è£ç½®ä¸Šçš„æª”案\n" " 2. 將一個檔案從電腦上複製到行動è£ç½®ä¸Š\n" " 3. 將一個檔案從行動è£ç½®ä¸Šè¤‡è£½åˆ°é›»è…¦ä¸Š\n" "檢查:\n" " 檔案有被正確的複製嗎?" #. description #: ../jobs/bluetooth.txt.in:77 msgid "" "PURPOSE:\n" " This test will check the High Fidelity Playback (A2DP) capability of " "your Bluetooth device,\n" " to see if you can hear audio from it.\n" "STEPS:\n" " 1. Enable and pair the bluetooth headset\n" " 2. Click \"Test\" to play a brief tone on your Bluetooth device, if it " "failed to set the Mode to A2DP,\n" " please select the device and change it manually in the \"Sound " "Settings\"\n" "VERIFICATION:\n" " Did you hear the tone?" msgstr "" "目的:\n" " 本測試將會檢查è—牙音效è£ç½®çš„高傳真播放 (A2DP) 能力來判斷您是å¦å¯ä»¥å¾žå®ƒè½åˆ°è²éŸ³\n" "步驟:\n" " 1. 啟動並é…å°æ‚¨çš„è—牙耳機麥克風\n" " 2. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•來在您的è—牙è£ç½®ä¸Šæ’­æ”¾ä¸€æ®µè²éŸ³ï¼Œå¦‚果它沒有將模å¼è¨­å®šç‚º A2DP\n" " 請在「音效設定ã€ä¸­é¸æ“‡è©²è£ç½®ä¸¦æ‰‹å‹•更改它\n" "檢查:\n" " 您有è½åˆ°æ¸¬è©¦éŸ³å—Žï¼Ÿ" #. description #: ../jobs/bluetooth.txt.in:94 msgid "" "PURPOSE:\n" " This test will check the Telephony Duplex capability of your bluetooth " "device,\n" " to see if you can record and hear audio from it simultaneously.\n" "STEPS:\n" " 1. Enable the bluetooth headset\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select \"Setup new device\"\n" " 4. Look for the device in the list and pair it\n" " 5. Click the sound icon\n" " 6. Click \"Sound Settings\"\n" " 7. Select device and ensure Mode is set to \"Telephony Duplex " "(HSP/HFP)\"\n" " 8. Click \"Test\" to record and play for five seconds in the bluetooth " "device\n" "VERIFICATION:\n" " Did you hear the sound you recorded in the bluetooth with a slight " "intended delay?" msgstr "" "目的:\n" " 本測試將會檢查è—牙音效è£ç½®çš„電話全雙工能力來判斷它是å¦èƒ½åŒæ™‚進行錄音與播放\n" "步驟:\n" " 1. 啟動è—牙耳機麥克風\n" " 2. 點擊系統é¸å–®çš„è—牙圖示\n" " 3. 鏿“‡ã€Œè¨­å®šæ–°è£ç½®ã€\n" " 4. 在è£ç½®åˆ—表中找到該è—牙音效è£ç½®ä¸¦èˆ‡å…¶é…å°\n" " 5. 點擊音效圖示\n" " 6. 鏿“‡ã€ŒéŸ³æ•ˆè¨­å®šã€\n" " 7. 點é¸è©²è—牙音效è£ç½®ä¸¦ç¢ºèªæ¨¡å¼è¨­å®šç‚ºã€Œé›»è©±å…¨é›™å·¥ (HSP/HFP)ã€\n" " 8. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•來用è—牙耳機麥克風錄製一段約五秒é˜çš„è²éŸ³\n" "檢查:\n" " 您有è½åˆ°æ‚¨è‡ªå·±çš„è²éŸ³å—Ž (帶有一點點刻æ„的延é²)?" #. description #: ../jobs/bluetooth.txt.in:116 msgid "" "PURPOSE:\n" " This test will check that you can use a BlueTooth HID device\n" "STEPS:\n" " 1. Enable either a BT mouse or keyboard\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select 'Setup new device'\n" " 4. Look for the device in the list and select it\n" " 5. For mice, perform actions such as moving the pointer, right and left " "button clicks and double clicks\n" " 6. For keyboards, commence the test to launch a small tool. Enter some " "text into the tool and close it.\n" "VERIFICATION:\n" " Did the device work as expected?" msgstr "" "目的:\n" " 本測試將會檢查您是å¦å¯ä»¥ä½¿ç”¨è—牙人機介é¢è£ç½®\n" "步驟:\n" " 1. 啟動è—牙éµç›¤æˆ–滑鼠\n" " 2. 點擊系統é¸å–®çš„è—牙圖示\n" " 3. 鏿“‡ã€Œè¨­å®šæ–°è£ç½®ã€\n" " 4. 在è£ç½®åˆ—表中找到該è—牙è£ç½®ä¸¦èˆ‡å…¶é…å°\n" " 5. 若是測試滑鼠,請測試左å³éµé»žæ“Šï¼Œé›™æ“Šä»¥åŠç§»å‹•游標\n" " 6. 若是測試éµç›¤ï¼Œè«‹é€²è¡Œæ¸¬è©¦ä¾†æ‰“開測試用å°å·¥å…·ï¼Œåœ¨è©²å·¥å…·è£¡è¼¸å…¥ä¸€äº›æ–‡å­—後將其關閉\n" "檢查:\n" " 這些è£ç½®çš„é‹ä½œæ˜¯å¦ä¸€å¦‚é æœŸï¼Ÿ" #. description #: ../jobs/bluetooth.txt.in:154 msgid "" "This is an automated Bluetooth file transfer test. It sends a large file to " "the device specified by the BTDEVADDR environment variable, then retrieves " "it again using Bluetooth and verifies the checksum to ensure the transfer " "didn't corrupt the file." msgstr "" "這是一個全自動的è—牙檔案傳輸測試,它將會傳é€ä¸€å€‹è¼ƒå¤§çš„æª”案到環境設定中由 BTDEVADDR " "變數所指定的è£ç½®ä¸Šï¼ŒæŽ¥è‘—å†é€éŽè—牙將它下載回來,並å°ç¸½å’Œæª¢æŸ¥ç¢¼é€²è¡Œé©—è­‰ä»¥ç¢ºèªæª”案在傳輸éŽç¨‹ä¸­æ²’有æå£žã€‚" #. description #: ../jobs/camera.txt.in:8 msgid "This Automated test attempts to detect a camera." msgstr "é€™å€‹æ¸¬è©¦å°‡æœƒè‡ªå‹•åµæ¸¬å…§å»ºçš„æ”å½±æ©Ÿ" #. description #: ../jobs/camera.txt.in:18 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works\n" "STEPS:\n" " 1. Click on Test to display a video capture from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the video capture?" msgstr "" "目的:\n" " 本測試將會檢查內建æ”å½±æ©Ÿæ˜¯å¦æœ‰æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•來播放 10 ç§’é˜ç”±å…§å»ºæ”å½±æ©Ÿæ‰€æ‹æ”的影片\n" "檢查:\n" " 您有看到æ”影機所æ‹åˆ°çš„影片嗎?" #. description #: ../jobs/camera.txt.in:37 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works\n" "STEPS:\n" " 1. Click on Test to display a still image from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the image?" msgstr "" "目的:\n" " 本測試將會檢查內建æ”å½±æ©Ÿæ˜¯å¦æœ‰æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•來播放 10 ç§’é˜ç”±å…§å»ºæ”å½±æ©Ÿæ‰€æ‹æ”的照片\n" "檢查:\n" " 您有看到æ”影機所æ‹åˆ°ç…§ç‰‡å—Žï¼Ÿ" #. description #: ../jobs/camera.txt.in:54 msgid "" " Takes multiple pictures based on the resolutions supported by the camera " "and\n" " validates their size and that they are of a valid format." msgstr " 根據æ”影機所支æ´çš„è§£æžåº¦ä¾†æ‹æ”多張相片,並檢查它們的檔案大å°åŠç¢ºèªå…¶ç‚ºæœ‰æ•ˆçš„æ ¼å¼ã€‚" #. description #: ../jobs/codecs.txt.in:9 msgid "" "PURPOSE:\n" " This test will verify your system's ability to play Ogg Vorbis audio " "files.\n" "STEPS:\n" " 1. Click Test to play an Ogg Vorbis file (.ogg)\n" " 2. Please close the player to proceed.\n" "VERIFICATION:\n" " Did the sample play correctly?" msgstr "" "目的:\n" " 本測試將會檢查您的系統是å¦èƒ½å¤ æ’­æ”¾ Ogg Vorbis æ ¼å¼éŸ³æ•ˆæª”\n" "步驟:\n" " 1. 點擊「測試ã€ä¾†æ’­æ”¾ Ogg Vorbis æ ¼å¼æª”案 (.ogg)\n" " 2. è«‹é¸æ“‡æ’­æ”¾å™¨ä¾†ç¹¼çºŒ\n" "檢查:\n" " 是å¦èƒ½æ­£å¸¸æ’­æ”¾è©²æ¸¬è©¦æª”案?" #. description #: ../jobs/codecs.txt.in:26 msgid "" "PURPOSE:\n" " This test will verify your system's ability to play Wave Audio files.\n" "STEPS:\n" " 1. Select Test to play a Wave Audio format file (.wav)\n" " 2. Please close the player to proceed.\n" "VERIFICATION:\n" " Did the sample play correctly?" msgstr "" "目的:\n" " 本測試將會檢查您的系統是å¦èƒ½å¤ æ’­æ”¾ Wave æ ¼å¼éŸ³æ•ˆæª”\n" "步驟:\n" " 1. 點擊「測試ã€ä¾†æ’­æ”¾ Wave æ ¼å¼æª”案 (.wav)\n" " 2. è«‹é¸æ“‡æ’­æ”¾å™¨ä¾†ç¹¼çºŒ\n" "檢查:\n" " 是å¦èƒ½æ­£å¸¸æ’­æ”¾è©²æ¸¬è©¦æª”案?" #. description #: ../jobs/cpu.txt.in:10 msgid "" "Test the CPU scaling capabilities using Firmware Test Suite (fwts cpufreq)." msgstr "利用 Firmware Test Suite 測試 CPU 的頻率調整功能 (指令:fwts cpufreq)" #. description #: ../jobs/cpu.txt.in:19 msgid "" "Attaches the log generated by cpu/scaling_test to the results submission." msgstr "å°‡ cpu/scaling_test 產生的紀錄附加至測試報告中。" #. description #: ../jobs/cpu.txt.in:30 msgid "" "Test that the CPU can run at its max frequency using Firmware Test Suite " "(fwts cpufreq)." msgstr "利用 Firmware Test Suite 測試 CPU 能夠到é”其最大頻率 (指令:fwts cpufreq)" #. description #: ../jobs/cpu.txt.in:39 msgid "" "Attaches the log generated by cpu/maxfreq_test to the results submission." msgstr "å°‡ cpu/maxfreq_test 產生的紀錄附加至測試報告中。" #. description #: ../jobs/cpu.txt.in:47 msgid "Tests the CPU for clock jitter." msgstr "å° CPU 進行時脈抖動測試。" #. description #: ../jobs/cpu.txt.in:56 msgid "Test offlining of each CPU core in a multicore system." msgstr "測試多核心系統æ¯å€‹ CPU 核心的離線功能。" #. description #: ../jobs/cpu.txt.in:65 msgid "This test checks cpu topology for accuracy between proc and sysfs." msgstr "æœ¬æ¸¬è©¦å°‡æœƒæ¯”å° proc 與 sysfs 下的 CPU 的資訊以確èªå…¶æ­£ç¢ºæ€§ã€‚" #. description #: ../jobs/cpu.txt.in:74 msgid "This test checks that CPU frequency governors are obeyed when set." msgstr "" #. description #: ../jobs/cpu.txt.in:83 msgid "Validate that the Vector Floating Point Unit is running on ARM device" msgstr "ç¢ºèª Vector Floating Point Unit 有在 ARM è£ç½®ä¸ŠåŸ·è¡Œ" #. description #: ../jobs/cpu.txt.in:92 msgid "Run Firmware Test Suite (fwts) cstates tests." msgstr "執行 Firmware Test Suite (fwts) cstates 測試。" #. description #: ../jobs/cpu.txt.in:104 ../jobs/firmware.txt.in:71 msgid "Attaches the FWTS desktop diagnosis results log to the submission" msgstr "å°‡ FWTS desktop è¨ºæ–·çµæžœé™„加至測試報告中" #. description #: ../jobs/daemons.txt.in:6 msgid "Test if the atd daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ atd 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:13 msgid "Test if the cron daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ cron 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:20 msgid "Test if the cupsd daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ cupsd 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:27 msgid "Test if the getty daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ getty 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:34 msgid "Test if the init daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ init 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:41 msgid "Test if the klogd daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ klogd 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:48 msgid "Test if the nmbd daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ nmbd 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:55 msgid "Test if the smbd daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ smbd 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:62 msgid "Test if the syslogd daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ syslogd 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:70 msgid "Test if the udevd daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ udevd 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/daemons.txt.in:77 msgid "Test if the winbindd daemon is running when the package is installed." msgstr "當套件安è£å¾Œï¼Œæ¸¬è©¦ winbindd 系統æœå‹™æ˜¯å¦å·²åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/disk.txt.in:12 msgid "" "Displays information about each disk detected on the system under test." msgstr "" #. summary #: ../jobs/disk.txt.in:27 msgid "Disk statistics for /dev/{name}" msgstr "/dev/{name} çš„ç£ç¢Ÿçµ±è¨ˆè³‡æ–™" #. description #: ../jobs/disk.txt.in:28 msgid "" "This test checks disk stats, generates some activity and rechecks stats to " "verify they've changed. It also verifies that disks appear in the various " "files they're supposed to." msgstr "本測試將會比å°åœ¨é€²è¡Œä¸€äº›æ“作å‰å¾Œçš„ç£ç¢Ÿç‹€æ³ï¼Œä¾†ç¢ºèªå…¶ç‹€æ…‹æœƒæ”¹è®Šã€‚å®ƒåŒæ™‚也會檢查ç£ç¢Ÿæ˜¯å¦æœ‰å‡ºç¾åœ¨æ‡‰è©²å‡ºç¾çš„æª”案裡。" #. description #: ../jobs/disk.txt.in:28 msgid "This test will inspect the following disk:" msgstr "本測試將會檢測下列ç£ç¢Ÿï¼š" #. description #: ../jobs/disk.txt.in:28 msgid "" " product name: {product}\n" " sysfs path: {path}\n" " device node path: /dev/{name}" msgstr "" " 產å“å稱:{product}\n" " sysfs 路徑:{path}\n" " è£ç½®ç¯€é»žè·¯å¾‘:/dev/{name}" #. summary #: ../jobs/disk.txt.in:40 msgid "Check stats changes for each disk" msgstr "檢查æ¯å€‹ç£ç¢Ÿçš„狀態改變" #. description #: ../jobs/disk.txt.in:44 msgid "" "This test generates some disk activity and checks the stats to ensure drive " "activity is being recorded properly." msgstr "" #. summary #: ../jobs/disk.txt.in:62 msgid "SMART test" msgstr "SMART 測試" #. description #: ../jobs/disk.txt.in:68 msgid "This tests the SMART capabilities of disks detected on the system." msgstr "本測試會å°ç³»çµ±ä¸Šåµæ¸¬åˆ°çš„硬碟進行 SMART 性測試。" #. summary #: ../jobs/disk.txt.in:86 msgid "Verify system storage performs at or above baseline performance" msgstr "確èªç³»çµ±çš„儲存è£ç½®æ•ˆèƒ½æœ‰é”到或超éŽä¸€èˆ¬çš„æ°´æº–" #. description #: ../jobs/disk.txt.in:91 msgid "Verify system storage performs at or above a baseline speed." msgstr "確èªç³»çµ±çš„儲存è£ç½®æ•ˆèƒ½æœ‰é”到或超éŽä¸€èˆ¬çš„æ°´æº–。" #. summary #: ../jobs/disk.txt.in:107 msgid "" "Verify that storage devices, such as Fibre Channel and RAID, perform under " "stress." msgstr "確èªå„²å­˜è£ç½®ï¼Œå¦‚光纖通é“和容錯å¼ç£ç¢Ÿé™£åˆ—能在壓力測試下é‹ä½œã€‚" #. description #: ../jobs/disk.txt.in:112 msgid "" "Verify that storage devices, such as Fibre Channel and RAID, perform under " "stress without data loss or corruption." msgstr "確èªå„²å­˜è£ç½®ï¼Œå¦‚光纖通é“和容錯å¼ç£ç¢Ÿé™£åˆ—能在壓力測試下é‹ä½œä¸¦æ²’有資料æå¤±æˆ–毀æã€‚" #. description #: ../jobs/disk.txt.in:138 msgid "" "Some new hard drives include a feature that parks the drive heads after a " "short period of inactivity. This is a power-saving feature, but it can have " "a bad interaction with the operating system that results in the drive " "constantly parked then activated. This produces excess wear on the drive, " "potentially leading to early failures." msgstr "" "有些新的硬碟會有自動休眠的功能,在閒置一段時間後會將硬碟讀寫頭歸ä½ã€‚具有此çœé›»åŠŸèƒ½çš„ç¡¬ç¢Ÿä½¿ç”¨åœ¨ä½œæ¥­ç³»çµ±ä¸Šå¯èƒ½æœƒå› ç‚ºéŽæ–¼é »ç¹çš„讀寫頭歸ä½è€Œé€ æˆä¸å¿…è¦çš„磨æï¼Œ" "進而導致硬體壽命縮短。" #. description #: ../jobs/disk.txt.in:151 msgid "" "PURPOSE:\n" " This test checks that a systems drive protection mechanism works properly.\n" "STEPS:\n" " 1. Click on Test\n" " 2. Move the system under test around, ensuring it is raised and lowered at " "some point.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統的硬碟ä¿è­·æ©Ÿåˆ¶æ˜¯å¦èƒ½æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•\n" " 2. ç¨å¾®ç§»å‹•您的電腦,確ä¿å®ƒæœ‰è¢«æ‹‰é«˜ã€é™ä½Žåˆ°æŸç¨®ç¨‹åº¦\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/esata.txt.in:5 msgid "" "PURPOSE:\n" " This test will check the system can detect the insertion of an eSATA " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will\n" " timeout and fail if the insertion has not been detected within 20 " "seconds.\n" " 2. Plug an eSATA HDD into an available eSATA port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥ç³»çµ±èƒ½å¤ è‡ªå‹•åµæ¸¬åˆ° eSATA 外接硬碟的連接\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•ä¾†é–‹å§‹ã€‚è‹¥ä¸€ç›´ç„¡æ³•åµæ¸¬åˆ° eSATA 外接硬碟的連接,本測試將於 20 秒後逾時並自動判斷為失敗\n" " 2. å°‡ eSATA 外接硬碟連接至電腦上的 eSATA 連接埠\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/esata.txt.in:22 msgid "" "This is an automated test which performs read/write operations on an " "attached eSATA HDD" msgstr "æœ¬è‡ªå‹•åŒ–æ¸¬è©¦é …ç›®å°‡æœƒå° eSATA 外接硬碟進行讀 / 寫æ“作" #. description #: ../jobs/esata.txt.in:31 msgid "" "PURPOSE:\n" " This test will check the system can detect the removal of an eSATA HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will timeout and fail if\n" " the removal has not been detected within 20 seconds.\n" " 2. Remove the previously attached eSATA HDD from the eSATA port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥ç³»çµ±èƒ½å¤ è‡ªå‹•åµæ¸¬åˆ° eSATA 外接硬碟的移除\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•ä¾†é–‹å§‹ã€‚è‹¥ä¸€ç›´ç„¡æ³•åµæ¸¬åˆ° eSATA 外接硬碟的移除,本測試將於 20 秒後逾時並自動判斷為失敗\n" " 2. å°‡ eSATA 外接硬碟連從電腦上的 eSATA 連接埠上拔除\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/ethernet.txt.in:14 msgid "" "Test to detect and return information about available network controllers on " "the system under test." msgstr "åœ¨å¾…æ¸¬ç³»çµ±ä¸Šåµæ¸¬å¯ç”¨çš„網路控制器並回傳相關資訊的測試。" #. description #: ../jobs/ethernet.txt.in:26 msgid "" "Gathers some info on the current state of your network devices. If no " "devices are found, the test will exit with an error." msgstr "收集您的網路è£ç½®çš„ç¾ç‹€è³‡è¨Šï¼Œè‹¥æ²’有找到任何è£ç½®ï¼Œæœ¬æ¸¬è©¦å°‡æœƒå›žå ±éŒ¯èª¤ã€‚" #. description #: ../jobs/ethernet.txt.in:35 msgid "" "PURPOSE:\n" " This test will check your wired connection\n" "STEPS:\n" " 1. Click on the Network icon in the top panel\n" " 2. Select a network below the \"Wired network\" section\n" " 3. Click \"Test\" to verify that it's possible to establish a HTTP " "connection\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" "目的:\n" " 本測試將會檢查您的有線網路連線\n" "步驟:\n" " 1. 於上方狀態列點擊網路圖示\n" " 2. 鏿“‡ã€Œæœ‰ç·šç¶²è·¯ã€ä¸‹çš„網路連線\n" " 3. 點擊「測試ã€ä¾†æª¢æŸ¥æ˜¯å¦èƒ½å¤ å»ºç«‹ HTTP 連線\n" "檢查:\n" " æ˜¯å¦æœ‰é€šçŸ¥å‡ºç¾ï¼Œè€Œä¸”é€£ç·šæ˜¯å¦æœ‰æ­£ç¢ºå»ºç«‹ï¼Ÿ" #. summary #: ../jobs/ethernet.txt.in:52 msgid "Multi-NIC Iperf testing for NIC {interface}" msgstr "å° {interface} 網路介é¢å¡çš„å¤šç¶²å¡ Iperf 測試" #. description #: ../jobs/ethernet.txt.in:62 msgid "" "This test uses iperf to ensure network devices pass data at an acceptable " "minimum percentage of advertized speed." msgstr "" #. summary #: ../jobs/ethernet.txt.in:73 msgid "Multi-NIC Iperf3 testing for NIC {interface}" msgstr "å° {interface} 網路介é¢å¡çš„å¤šç¶²å¡ Iperf3 測試" #. description #: ../jobs/ethernet.txt.in:83 msgid "" "This test uses iperf3 to ensure network devices pass data at an acceptable " "minimum percentage of advertized speed." msgstr "" #. summary #: ../jobs/ethernet.txt.in:94 msgid "ethtool check for NIC {interface}" msgstr "用 ethtool å°ç¶²è·¯ä»‹é¢å¡ {interface} 進行檢查" #. description #: ../jobs/ethernet.txt.in:100 msgid "" "This test executes ethtool requests against ethernet device {__index__} " "({interface})." msgstr "æœ¬æ¸¬è©¦æœƒå° {__index__} ({interface}) 乙太網路è£ç½®åŸ·è¡Œ ethtool 指令。" #. summary #: ../jobs/ethernet.txt.in:110 msgid "Maximum bandwidth test of device {__index__} ({interface})" msgstr "å° {__index__} ({interface}) è£ç½®çš„æœ€å¤§é »å¯¬æ¸¬è©¦" #. purpose #: ../jobs/ethernet.txt.in:119 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of each ethernet interface." msgstr "" #. steps #: ../jobs/ethernet.txt.in:122 ../jobs/mobilebroadband.txt.in:105 #: ../jobs/wireless.txt.in:694 msgid "" "1. Click \"Test\". 2. Read the network test summary and confirm that the " "throughput is acceptable. 3. If needed, click \"Test\" again to repeat the " "transfer test." msgstr "" #. verification #: ../jobs/ethernet.txt.in:126 ../jobs/mobilebroadband.txt.in:109 #: ../jobs/wireless.txt.in:698 msgid "" "Was the reported throughput acceptable for the type and maximum speed of " "this interface?" msgstr "" #. summary #: ../jobs/ethernet.txt.in:136 msgid "" "Stress and performance test of ethernet device {__index__} ({interface})" msgstr "å° {__index__} ({interface}) 乙太網路è£ç½®çš„壓力與效能測試" #. description #: ../jobs/ethernet.txt.in:142 msgid "" "Automated test that tests performance of ethernet device {__index__} " "({interface})." msgstr "å° {__index__} ({interface}) 乙太網路è£ç½®çš„自動化效能測試。" #. description #: ../jobs/expresscard.txt.in:4 msgid "" "PURPOSE:\n" " This will verify that an ExpressCard slot can detect inserted devices.\n" "STEPS:\n" " Skip this test if you do not have an ExpressCard slot.\n" " 1. Plug an ExpressCard device into the ExpressCard slot\n" "VERIFICATION:\n" " Was the device correctly detected?" msgstr "" "目的:\n" " 本測試將會檢查 ExpressCard æ’æ§½æ˜¯å¦èƒ½å¤ åµæ¸¬åˆ°å¤–接的è£ç½®\n" "步驟:\n" " 若您的電腦上沒有 ExpressCard æ’æ§½çš„è©±è«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. å°‡ ExpressCard è£ç½®æ’å…¥ ExpressCard æ’æ§½ä¸­\n" "檢查:\n" " 該è£ç½®æ˜¯å¦æœ‰è¢«æ­£ç¢ºåµæ¸¬åˆ°ï¼Ÿ" #. description #: ../jobs/fingerprint.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that a fingerprint reader will work properly for " "logging into your system. This test case assumes that there's a testing " "account from which test cases are run and a personal account that the tester " "uses to verify the fingerprint reader\n" "STEPS:\n" " 1. Click on the User indicator on the left side of the panel (your user " "name).\n" " 2. Select \"Switch User Account\"\n" " 3. On the LightDM screen select your username.\n" " 4. Use the fingerprint reader to login.\n" " 5. Click on the user switcher applet.\n" " 6. Select the testing account to continue running tests.\n" "VERIFICATION:\n" " Did the authentication procedure work correctly?" msgstr "" "目的:\n" " 本測試將會檢查指紋讀å–器是å¦èƒ½è®“使用者登入作業系統。本測試項目å‡è¨­ç³»çµ±ä¸Šæœ‰ä¸€å€‹æ¸¬è©¦æŒ‡ç´‹è®€å–器用的使用者帳戶\n" "步驟:\n" " 1. 點é¸ä¸Šæ–¹ç‹€æ…‹åˆ—的使用者圖示 (您會看到您的使用者å稱)\n" " 2. 鏿“‡ã€Œåˆ‡æ›ä½¿ç”¨è€…帳戶ã€\n" " 3. 在登入畫é¢ä¸­é¸æ“‡æ¸¬è©¦æŒ‡ç´‹è®€å–器用的使用者帳戶\n" " 4. 使用指紋讀å–器來登入\n" " 5. æ¸¬è©¦çµæŸå¾Œè«‹å†æ¬¡é¸æ“‡ã€Œåˆ‡æ›ä½¿ç”¨è€…帳戶ã€\n" " 6. 切æ›å›žç•¶å‰çš„使用者帳戶來繼續進行測試\n" "檢查:\n" " èªè­‰æ˜¯å¦æœ‰æˆåŠŸï¼Ÿ" #. description #: ../jobs/fingerprint.txt.in:20 msgid "" "PURPOSE:\n" " This test will verify that a fingerprint reader can be used to unlock a " "locked system.\n" "STEPS:\n" " 1. Click on the Session indicator (Cog icon on the Left side of the " "panel) .\n" " 2. Select 'Lock screen'.\n" " 3. Press any key or move the mouse.\n" " 4. A window should appear that provides the ability to unlock either " "typing your password or using fingerprint authentication.\n" " 5. Use the fingerprint reader to unlock.\n" " 6. Your screen should be unlocked.\n" "VERIFICATION:\n" " Did the authentication procedure work correctly?" msgstr "" "目的:\n" " 本測試將會檢查指紋讀å–器是å¦èƒ½è®“使用者解鎖處於鎖定狀態的作業系統\n" "步驟:\n" " 1. 點é¸ä¸Šæ–¹ç‹€æ…‹åˆ—的齒輪圖示\n" " 2. 鏿“‡ã€ŒéŽ–å®šèž¢å¹•ã€\n" " 3. 按任æ„鵿ˆ–移動一下滑鼠\n" " 4. 此時應該會有一個能讓您輸入密碼或使用指紋驗證來解除螢幕鎖定的視窗\n" " 5. 使用指紋讀å–器來解鎖\n" " 6. 您應該å¯ä»¥æˆåŠŸè§£éŽ–èž¢å¹•\n" "檢查:\n" " èªè­‰æ˜¯å¦æœ‰æˆåŠŸï¼Ÿ" #. description #: ../jobs/firewire.txt.in:6 msgid "" "PURPOSE:\n" " This test will check the system can detect the insertion of a FireWire " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will\n" " timeout and fail if the insertion has not been detected within 20 " "seconds.\n" " 2. Plug a FireWire HDD into an available FireWire port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥ç³»çµ±èƒ½å¤ è‡ªå‹•åµæ¸¬åˆ° FireWire 外接硬碟的連接\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•ä¾†é–‹å§‹ã€‚è‹¥ä¸€ç›´ç„¡æ³•åµæ¸¬åˆ° FireWire 外接硬碟的連接,本測試將於 20 秒後逾時並自動判斷為失敗\n" " 2. å°‡ FireWire 外接硬碟連接至電腦上的 FireWire 連接埠\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/firewire.txt.in:24 msgid "" "This is an automated test which performs read/write operations on an " "attached FireWire HDD" msgstr "æœ¬è‡ªå‹•åŒ–æ¸¬è©¦é …ç›®å°‡æœƒå° FireWire 外接硬碟進行讀 / 寫æ“作" #. description #: ../jobs/firewire.txt.in:34 msgid "" "PURPOSE:\n" " This test will check the system can detect the removal of a FireWire " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will timeout and fail if\n" " the removal has not been detected within 20 seconds.\n" " 2. Remove the previously attached FireWire HDD from the FireWire port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥ç³»çµ±èƒ½å¤ è‡ªå‹•åµæ¸¬åˆ° FireWire 外接硬碟的移除\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•ä¾†é–‹å§‹ã€‚è‹¥ä¸€ç›´ç„¡æ³•åµæ¸¬åˆ° FireWire 外接硬碟的移除,本測試將於 20 秒後逾時並自動判斷為失敗\n" " 2. å°‡ FireWire 外接硬碟連從電腦上的 FireWire 連接埠上拔除\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/firmware.txt.in:25 msgid "Automated tests for firmware using Firmware Test Suite." msgstr "採用 Firmware Test Suite å°éŸŒé«”進行自動化測試。" #. description #: ../jobs/firmware.txt.in:45 msgid "" "Run Firmware Test Suite (fwts) QA-concerned desktop-specific diagnosis tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:47 msgid "Run FWTS QA-concerned desktop-specific diagnosis tests." msgstr "" #. description #: ../jobs/firmware.txt.in:58 msgid "" "Run Firmware Test Suite (fwts) HWE-concerned desktop-specific diagnosis " "tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:60 msgid "Run FWTS HWE-concerned desktop-specific diagnosis tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:72 msgid "Attach FWTS desktop diagnosis log to submission" msgstr "å°‡ FWTS desktop è¨ºæ–·çµæžœé™„加至測試報告中" #. description #: ../jobs/firmware.txt.in:80 msgid "" "Attaches the FWTS desktop diagnosis results log to the submission (to HWE)" msgstr "å°‡ FWTS desktop è¨ºæ–·çµæžœé™„加至測試報告中 (給 HWE)" #. summary #: ../jobs/firmware.txt.in:81 msgid "Attach FWTS desktop diagnosis log to submission (to HWE)" msgstr "å°‡ FWTS desktop è¨ºæ–·çµæžœé™„加至測試報告中 (給 HWE)" #. summary #: ../jobs/firmware.txt.in:86 msgid "No _REV interface in ACPI [DS]SDT tables" msgstr "在 ACPI [DS]SDT 表格中沒有 _REV 介é¢" #. description #: ../jobs/firmware.txt.in:90 msgid "" "This Automated test checks misuse of the _REV interface in ACPI DSDT and " "SSDT tables" msgstr "" #. description #: ../jobs/floppy.txt.in:5 msgid "Floppy test" msgstr "軟碟測試" #. summary #: ../jobs/graphics.txt.in:4 msgid "Driver version tests" msgstr "驅動程å¼ç‰ˆæœ¬æ¸¬è©¦" #. description #: ../jobs/graphics.txt.in:23 msgid "Test to output the Xorg version" msgstr "輸出 Xorg 版本的測試" #. summary #: ../jobs/graphics.txt.in:24 msgid "Test Xorg version" msgstr "測試 Xorg 版本" #. summary #: ../jobs/graphics.txt.in:29 msgid "Resolution change tests" msgstr "è§£æžåº¦åˆ‡æ›æ¸¬è©¦" #. summary #: ../jobs/graphics.txt.in:61 msgid "Test that the X process is running." msgstr "測試 X ç¨‹åºæ­£åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/graphics.txt.in:69 msgid "Test that the X is not running in failsafe mode." msgstr "測試在失敗安全模å¼ä¸‹ X 程åºä¸¦æœªåŸ·è¡Œã€‚" #. summary #: ../jobs/graphics.txt.in:70 msgid "Test that X is not in failsafe mode." msgstr "測試 X 並ä¸è™•於失敗安全模å¼ä¸­ã€‚" #. summary #: ../jobs/graphics.txt.in:101 msgid "Default resolution tests" msgstr "é è¨­è§£æžåº¦æ¸¬è©¦" #. summary #: ../jobs/graphics.txt.in:126 msgid "Minimum resolution tests" msgstr "最å°è§£æžåº¦æ¸¬è©¦" #. summary #: ../jobs/graphics.txt.in:147 msgid "Maximum resolution tests" msgstr "最大解æžåº¦æ¸¬è©¦" #. summary #: ../jobs/graphics.txt.in:178 msgid "Mode tests" msgstr "æ¨¡å¼æ¸¬è©¦" #. summary #: ../jobs/graphics.txt.in:194 msgid "Color depth tests" msgstr "色彩深度測試" #. summary #: ../jobs/graphics.txt.in:210 msgid "Refresh rate tests" msgstr "更新頻率測試" #. summary #: ../jobs/graphics.txt.in:225 msgid "Graphic memory tests" msgstr "圖形介é¢å¡è¨˜æ†¶é«”測試" #. summary #: ../jobs/graphics.txt.in:240 msgid "Display video test" msgstr "" #. description #: ../jobs/graphics.txt.in:266 msgid "Check that VESA drivers are not in use" msgstr "ç¢ºå®šç›®å‰æ²’有使用 VESA 驅動程å¼" #. summary #: ../jobs/graphics.txt.in:267 msgid "Test that VESA drivers are not in use" msgstr "檢查 VESA 驅動程å¼ç‚ºéžä½¿ç”¨ä¸­ç‹€æ…‹" #. summary #: ../jobs/graphics.txt.in:272 msgid "Resolution cycling tests" msgstr "è§£æžåº¦å¾ªç’°åˆ‡æ›æ¸¬è©¦" #. summary #: ../jobs/graphics.txt.in:296 msgid "Rotation tests" msgstr "旋轉測試" #. summary #: ../jobs/graphics.txt.in:320 msgid "Compiz support tests" msgstr "Compiz 支æ´åº¦æ¸¬è©¦" #. summary #: ../jobs/graphics.txt.in:337 msgid "Unity support tests" msgstr "Unity 支æ´åº¦æ¸¬è©¦" #. summary #: ../jobs/graphics.txt.in:354 msgid "glxgears tests" msgstr "glxgears 測試" #. summary #: ../jobs/graphics.txt.in:378 msgid "3D window open/close tests" msgstr "3D 視窗開啟 / 關閉測試" #. summary #: ../jobs/graphics.txt.in:395 msgid "3D window with suspend/resume tests" msgstr "3D è¦–çª—èˆ‡ç³»çµ±æš«åœ / æ¢å¾©æ¸¬è©¦" #. description #: ../jobs/graphics.txt.in:411 msgid "Multiple 3D window open/close" msgstr "開啟 / 關閉多個 3D 視窗" #. summary #: ../jobs/graphics.txt.in:412 msgid "Multiple 3D window open/close tests" msgstr "多個 3D 視窗開啟 / 關閉測試" #. description #: ../jobs/graphics.txt.in:428 msgid "3D window movement" msgstr "3D 視窗移動" #. summary #: ../jobs/graphics.txt.in:429 msgid "3D window movement tests" msgstr "3D 視窗移動測試" #. summary #: ../jobs/graphics.txt.in:448 msgid "screenshot tests" msgstr "螢幕截圖測試" #. summary #: ../jobs/graphics.txt.in:470 msgid "screenshot attachment tests" msgstr "將螢幕截圖附加至測試報告中" #. summary #: ../jobs/graphics.txt.in:486 msgid "full screen video screenshot tests" msgstr "全螢幕影片截圖測試" #. summary #: ../jobs/graphics.txt.in:516 msgid "GPU switch prompt tests" msgstr "GPU åˆ‡æ›æç¤ºæ¸¬è©¦" #. summary #: ../jobs/graphics.txt.in:539 msgid "full screen video attachment tests" msgstr "將全螢幕影片截圖附加至測試報告中" #. summary #: ../jobs/graphics.txt.in:555 msgid "Obtains a simple screen capture" msgstr "å–得一張簡單的螢幕快照" #. description #: ../jobs/graphics.txt.in:559 msgid "Obtains a simple screen capture using gnome-screenshot if present" msgstr "利用 gnome-screenshot (è‹¥å¯ç”¨) 來進行簡單的螢幕快照" #. summary #: ../jobs/graphics.txt.in:564 msgid "Attaches a simple screen capture" msgstr "附加簡單的螢幕快照至測試報告中" #. description #: ../jobs/graphics.txt.in:568 msgid "Attaches the simple screen capture file" msgstr "將簡單的螢幕快照檔案附加至測試報告中" #. summary #: ../jobs/graphics.txt.in:583 msgid "Obtains a simple screen capture of {product}" msgstr "å° {product} å–得簡單的螢幕快照" #. description #: ../jobs/graphics.txt.in:587 msgid "" "Obtains a simple screen capture of {product} using gnome-screenshot if " "present" msgstr "利用 gnome-screenshot (è‹¥å¯ç”¨) ä¾†å° {product} 進行簡單的螢幕快照" #. summary #: ../jobs/graphics.txt.in:596 msgid "Attaches a simple screen capture of {product}" msgstr "å°‡å° {product} å–得的簡單的螢幕快照附加至測試報告中" #. description #: ../jobs/graphics.txt.in:599 msgid "Attaches the simple screen capture file of {product}" msgstr "å°‡å° {product} å–得的簡單的螢幕快照檔案附加至測試報告中" #. description #: ../jobs/hibernate.txt.in:18 msgid "" "PURPOSE:\n" " This test will check to make sure your system can successfully hibernate " "(if supported)\n" "STEPS:\n" " 1. Click on Test\n" " 2. The system will hibernate and should wake itself within 5 minutes\n" " 3. If your system does not wake itself after 5 minutes, please press the " "power button to wake the system manually\n" " 4. If the system fails to resume from hibernate, please restart System " "Testing and mark this test as Failed\n" "VERIFICATION:\n" " Did the system successfully hibernate and did it work properly after " "waking up?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ‚¨é›»è…¦çš„ä¼‘çœ åŠŸèƒ½æ˜¯å¦æ­£å¸¸ (若有支æ´çš„話)\n" "步驟:\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•\n" " 2. 您的電腦將會進入休眠模å¼ï¼Œä¸¦åœ¨å¤§ç´„五分é˜å¾Œè‡ªå‹•醒來\n" " 3. 若您的電腦在五分é˜å¾Œä¸¦æ²’有自己醒來,請手動按下電æºéˆ•來喚醒它\n" " 4. 若您的電腦無法正常自休眠模å¼ä¸­è¢«å–šé†’ï¼Œè«‹é‡æ–°å•Ÿå‹•本系統測試工具並將此測項標記為測試失敗\n" "驗證:\n" " æ‚¨çš„é›»è…¦æ˜¯å¦æ­£å¸¸çš„進入休眠模å¼ï¼Œä¸¦åœ¨è¢«å–šé†’後正常é‹ä½œï¼Ÿ" #. summary #: ../jobs/hibernate.txt.in:34 msgid "Hibernate test" msgstr "休眠測試" #. description #: ../jobs/hibernate.txt.in:68 msgid "Automated check of the hibernate log for errors discovered by fwts" msgstr "自動檢查休眠紀錄中由 fwts æ‰€åµæ¸¬åˆ°çš„錯誤" #. description #: ../jobs/hibernate.txt.in:77 msgid "attaches log from single hibernate/resume test to results" msgstr "將單次休眠 / 喚醒測試的紀錄檔附加至測試報告中" #. summary #: ../jobs/hibernate.txt.in:81 msgid "Hibernate log attach" msgstr "將休眠紀錄附加至測試報告中" #. description #: ../jobs/info.txt.in:17 msgid "Attaches a report of installed codecs for Intel HDA" msgstr "å°‡å° Intel HDA 所安è£çš„解碼器列表附加至測試報告中" #. description #: ../jobs/info.txt.in:24 msgid "Attaches a report of CPU information" msgstr "å°‡ CPU 資訊附加至測試報告中" #. summary #: ../jobs/info.txt.in:25 msgid "Attach a copy of /proc/cpuinfo" msgstr "å°‡ /proc/cpuinfo 的複本附加至測試報告中" #. description #: ../jobs/info.txt.in:32 msgid "Attaches a copy of /var/log/dmesg to the test results" msgstr "å°‡ /var/log/dmesg 的複本附加至測試報告中" #. summary #: ../jobs/info.txt.in:33 msgid "Attach a copy of /var/log/dmesg" msgstr "å°‡ /var/log/dmesg 的複本附加至測試報告中" #. description #: ../jobs/info.txt.in:40 msgid "Attaches info on DMI" msgstr "å°‡ DMI 資訊附加至測試報告中" #. summary #: ../jobs/info.txt.in:41 msgid "Attach a copy of /sys/class/dmi/id/*" msgstr "å°‡ /sys/class/dmi/id/* 的複本附加至測試報告中" #. description #: ../jobs/info.txt.in:50 msgid "Attaches dmidecode output" msgstr "å°‡ dmidecoe 資訊附加至測試報告中" #. summary #: ../jobs/info.txt.in:51 msgid "Attach a copy of of the output of dmidecode" msgstr "å°‡ dmidecode 輸出的複本附加至測試報告中" #. description #: ../jobs/info.txt.in:59 msgid "Attaches lshw output" msgstr "å°‡ lshw 資訊附加至測試報告中" #. description #: ../jobs/info.txt.in:67 msgid "Attaches the firmware version" msgstr "將韌體版本資訊附加至測試報告中" #. description #: ../jobs/info.txt.in:74 msgid "Attaches very verbose lspci output." msgstr "將詳盡的 lspci è¼¸å‡ºçµæžœé™„加至測試報告中。" #. summary #: ../jobs/info.txt.in:75 msgid "Attach a list of PCI devices" msgstr "附加 PCI è£ç½®åˆ—表" #. description #: ../jobs/info.txt.in:82 msgid "Attaches very verbose lspci output (with central database Query)." msgstr "將詳盡的 lspci è¼¸å‡ºçµæžœé™„加至測試報告中 (å‘中央資料庫進行查詢)。" #. summary #: ../jobs/info.txt.in:85 msgid "Attach PCI configuration space hex dump" msgstr "" #. description #: ../jobs/info.txt.in:90 msgid "" " Attaches a hex dump of the standard part of the PCI configuration\n" " space for all PCI devices." msgstr "" #. description #: ../jobs/info.txt.in:101 msgid "Attaches a list of detected USB devices." msgstr "é™„åŠ åµæ¸¬åˆ°çš„ USB è£ç½®åˆ—表" #. description #: ../jobs/info.txt.in:108 msgid "Attaches info on system memory as seen in /proc/meminfo." msgstr "" #. description #: ../jobs/info.txt.in:115 msgid "Attaches the contents of the various modprobe conf files." msgstr "å°‡å„個 modprobe 的設定檔內容附加至測試報告中。" #. summary #: ../jobs/info.txt.in:116 msgid "Attach the contents of modprobe configuration files" msgstr "附加 modprobe 設定檔的內容" #. summary #: ../jobs/info.txt.in:121 msgid "Attach modinfo information" msgstr "附加 modinfo 資訊" #. description #: ../jobs/info.txt.in:130 msgid "Attaches modinfo information for all currently loaded modules" msgstr "" #. description #: ../jobs/info.txt.in:138 msgid "Attaches the contents of the /etc/modules file." msgstr "å°‡ /etc/modules 檔案的內容附加至測試報告中。" #. summary #: ../jobs/info.txt.in:139 msgid "Attach the contents of /etc/modules" msgstr "附加 /etc/modules 的內容" #. description #: ../jobs/info.txt.in:146 msgid "Attaches the contents of various sysctl config files." msgstr "附加å„個 sysctl 設定檔的內容。" #. summary #: ../jobs/info.txt.in:147 msgid "Attach sysctl configuration files." msgstr "附加 sysctl 設定檔。" #. description #: ../jobs/info.txt.in:152 msgid "Attaches a report of sysfs attributes." msgstr "å°‡ sysfs 屬性報告附加至測試報告中。" #. summary #: ../jobs/info.txt.in:160 msgid "Attach detailed sysfs property output from udev" msgstr "" #. description #: ../jobs/info.txt.in:167 msgid "" "Attaches a dump of the udev database showing system hardware information." msgstr "" #. summary #: ../jobs/info.txt.in:168 msgid "Attach hardware database (udev)" msgstr "附加硬體資料庫 (udev)" #. description #: ../jobs/info.txt.in:175 msgid "Attaches the output of udev_resource, for debugging purposes" msgstr "為了除錯需è¦ï¼Œå°‡ udev_resource 的輸出附加至測試報告中" #. description #: ../jobs/info.txt.in:183 msgid "Attaches a tarball of gcov data if present." msgstr "å°‡ gvoc 資料 (若存在) 打包附加至測試報告中。" #. description #: ../jobs/info.txt.in:190 msgid "Attaches a list of the currently running kernel modules." msgstr "將目å‰åŸ·è¡Œä¸­çš„內核模組列表附加至測試報告中。" #. summary #: ../jobs/info.txt.in:191 msgid "Attach a list of currently running kernel modules" msgstr "將目å‰åŸ·è¡Œä¸­çš„內核模組列表附加至測試報告中" #. summary #: ../jobs/info.txt.in:198 msgid "Attaches json dumps of installed dkms package information." msgstr "" #. description #: ../jobs/info.txt.in:205 msgid "Attaches the contents of /proc/acpi/sleep if it exists." msgstr "è‹¥ /proc/acpi/sleep 存在,將其內容附加至測試報告中" #. description #: ../jobs/info.txt.in:210 msgid "Bootchart information." msgstr "Bootchart 資訊。" #. summary #: ../jobs/info.txt.in:218 msgid "SATA/IDE device information." msgstr "SATA/IDE è£ç½®è³‡è¨Šã€‚" #. description #: ../jobs/info.txt.in:221 msgid "Attaches SATA/IDE device information reported by hdparm." msgstr "å°‡ hdparm 回報的 SATA/IDE è£ç½®è³‡è¨Šé™„加至測試報告中。" #. description #: ../jobs/info.txt.in:243 msgid "Attaches the bootchart png file for bootchart runs" msgstr "將執行 bootchart 產生的 bootchart png 檔案附加至測試報告中" #. description #: ../jobs/info.txt.in:252 msgid "Attaches the bootchart log for bootchart test runs." msgstr "將執行 bootchart 產生的 bootchart 紀錄檔附加至測試報告中" #. description #: ../jobs/info.txt.in:261 msgid "installs the installer bootchart tarball if it exists." msgstr "" #. description #: ../jobs/info.txt.in:269 msgid "Attaches the installer debug log if it exists." msgstr "將安è£ç¨‹å¼çš„除錯紀錄 (若存在) 附加至測試報告中。" #. description #: ../jobs/info.txt.in:277 msgid "" "Returns the name, driver name and driver version of any touchpad discovered " "on the system." msgstr "å›žå‚³ç³»çµ±ä¸Šåµæ¸¬åˆ°çš„觸控æ¿å稱ã€é©…動程å¼å稱以åŠé©…動程å¼ç‰ˆæœ¬ã€‚" #. description #: ../jobs/info.txt.in:290 msgid "Lists the device driver and version for all audio devices." msgstr "列出有音效è£ç½®çš„驅動程å¼èˆ‡ç‰ˆæœ¬è³‡è¨Šã€‚" #. description #: ../jobs/info.txt.in:301 msgid "Provides information about network devices" msgstr "æä¾›é—œæ–¼ç¶²éš›ç¶²è·¯è£ç½®çš„資訊" #. description #: ../jobs/info.txt.in:308 msgid "Provides information about wwan/mobile broadband devices" msgstr "æä¾›é—œæ–¼ WWAN / 行動網路è£ç½®çš„資訊" #. description #: ../jobs/info.txt.in:314 msgid "Provides information about displays attached to the system" msgstr "æä¾›é—œæ–¼é€£æŽ¥è‡³æœ¬æ©Ÿçš„螢幕資訊" #. description #: ../jobs/info.txt.in:322 msgid "Attaches information about disk partitions" msgstr "å°‡ç£ç¢Ÿåˆ†å‰²è³‡è¨Šé™„加至測試報告中" #. description #: ../jobs/info.txt.in:328 msgid "Attaches the buildstamp identifier for the preinstalled OS" msgstr "附加é è¼‰ä½œæ¥­ç³»çµ±çš„ buildstamp 識別至測試報告中" #. summary #: ../jobs/info.txt.in:329 msgid "Attach /etc/buildstamp" msgstr "å°‡ /etc/buildstamp 資訊附加至測試報告中" #. description #: ../jobs/info.txt.in:339 msgid "Check existence of recovery partition" msgstr "檢查還原ç£å€æ˜¯å¦å­˜åœ¨" #. description #: ../jobs/info.txt.in:350 msgid "Check the recovery type is dell or not" msgstr "檢查還原類別是å¦ç‚º Dell" #. summary #: ../jobs/info.txt.in:360 msgid "Attach the recovery partition versions" msgstr "附加還原資å€ç‰ˆæœ¬è³‡è¨Š" #. description #: ../jobs/info.txt.in:361 msgid "" "Attach the recovery partition version image_version is the preinstalled OS " "image version bto_version is only for dell_recovery Example: image_version: " "somerville-trusty-amd64-20140620-0 bto_version: A00_dell-bto-trusty-houston-" "15-A11-iso-20141203-0.iso" msgstr "" #. summary #: ../jobs/info.txt.in:377 msgid "Attach the bto.xml in Dell recovery partition" msgstr "附加 Dell 還原ç£å€ä¸­çš„ bto.xml" #. description #: ../jobs/info.txt.in:378 msgid "" "bto.xml is basically a Fish manifest The information include:\n" " - fish packages\n" " - dell recovery stage 2 boot log" msgstr "" #. description #: ../jobs/info.txt.in:389 msgid "" "Attaches the debug log from the virtualization/kvm_check_vm test to the " "results submission." msgstr "" #. description #: ../jobs/info.txt.in:399 msgid "Attaches the kernel command line used to boot" msgstr "將開機使用的內核指令附加至測試報告中" #. summary #: ../jobs/info.txt.in:400 msgid "Attach a copy of /proc/cmdline" msgstr "附加 /proc/cmdline 的複本" #. description #: ../jobs/input.txt.in:7 msgid "Pointing device tests." msgstr "指å‘è£ç½®æ¸¬è©¦ã€‚" #. description #: ../jobs/input.txt.in:27 msgid "" "PURPOSE:\n" " This test will test your pointing device\n" "STEPS:\n" " 1. Move the cursor using the pointing device or touch the screen.\n" " 2. Perform some single/double/right click operations.\n" "VERIFICATION:\n" " Did the pointing device work as expected?" msgstr "" "目的:\n" " 本測試將會檢查您的指å‘è£ç½®\n" "步驟:\n" " 1. 用該指å‘è£ç½®æˆ–觸碰螢幕來移動游標\n" " 2. 進行一些單擊 / 雙擊 / å³éµæ“作\n" "檢查:\n" " 該指å‘è£ç½®çš„é‹ä½œæ˜¯å¦ä¸€å¦‚é æœŸï¼Ÿ" #. description #: ../jobs/input.txt.in:42 msgid "" "PURPOSE:\n" " This test will test your keyboard\n" "STEPS:\n" " 1. Click on Test\n" " 2. On the open text area, use your keyboard to type something\n" "VERIFICATION:\n" " Is your keyboard working properly?" msgstr "" "目的:\n" " 本測試將會檢查您的éµç›¤\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•\n" " 2. 在文字輸入å€åŸŸç”¨æ‚¨çš„éµç›¤è¼¸å…¥ä¸€äº›æ–‡å­—\n" "檢查:\n" " 您的éµç›¤æ˜¯å¦æœ‰æ­£å¸¸é‹ä½œï¼Ÿ" #. description #: ../jobs/input.txt.in:55 msgid "" "PURPOSE:\n" " Manual detection of accelerometer.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Is this system supposed to have an accelerometer?" msgstr "" "目的:\n" " 經由人工檢測確èªåŠ é€Ÿåº¦æ„Ÿæ‡‰å™¨çš„å­˜åœ¨\n" "步驟\n" " 1. è«‹æŸ¥é–±æ‚¨ç³»çµ±çš„è¦æ ¼æ›¸\n" "檢查:\n" " 這å°é›»è…¦æœ‰åŠ é€Ÿåº¦æ„Ÿæ‡‰å™¨å—Žï¼Ÿ" #. description #: ../jobs/input.txt.in:70 msgid "" "PURPOSE:\n" " This test will test your accelerometer to see if it is detected\n" " and operational as a joystick device.\n" "STEPS:\n" " 1. Click on Test\n" " 2. Tilt your hardware in the directions onscreen until the axis " "threshold is met.\n" "VERIFICATION:\n" " Is your accelerometer properly detected? Can you use the device?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ‚¨çš„åŠ é€Ÿåº¦æ„Ÿæ‡‰å™¨æ˜¯å¦æœ‰è¢«åµæ¸¬åˆ°ï¼Œä¸¦è¢«è¦–ç‚ºæ–æ¡¿è£ç½®é‹ä½œ\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•\n" " 2. 根據螢幕上所顯示的方å‘傾斜您的電腦,直到其符åˆè©²è»¸çš„門檻值\n" "檢查:\n" " æ‚¨çš„åŠ é€Ÿåº¦æ„Ÿæ‡‰å™¨æœ‰è¢«æ­£ç¢ºåµæ¸¬åˆ°å—Žï¼Ÿæ‚¨èƒ½å¤ ä½¿ç”¨è©²è£ç½®å—Žï¼Ÿ" #. summary #: ../jobs/input.txt.in:85 msgid "Create click tests for pointing devices." msgstr "為指å‘è£ç½®ç”¢ç”Ÿé»žæ“Šæ¸¬è©¦é …ç›®" #. description #: ../jobs/input.txt.in:86 msgid "Click tests for pointing devices." msgstr "指å‘è£ç½®çš„點擊測試" #. description #: ../jobs/install.txt.in:6 msgid "" "Tests to see that apt can access repositories and get updates (does not " "install updates). This is done to confirm that you could recover from an " "incomplete or broken update." msgstr "檢查 apt 是å¦èƒ½å¤ å­˜å–軟體庫並å–å¾—æ›´æ–° (æ­¤æ¸¬è©¦ä¸¦ä¸æœƒå®‰è£æ›´æ–°)ã€‚é€™æ˜¯ç‚ºäº†ç¢ºèªæ‚¨èƒ½å¤ å¾žä¸å®Œæ•´æˆ–有å•題的更新中æ¢å¾©ã€‚" #. description #: ../jobs/keys.txt.in:8 msgid "" "PURPOSE:\n" " This test will test the screen lock key\n" "STEPS:\n" " 1. Commence the test. If there is no such key, please skip this test.\n" " 2. Press the lock screen button on the keyboard in 30 seconds.\n" " 3. If the screen is locked, move the mouse or press any key to activate " "the prompt.\n" " 4. Input the password to unlock the screen.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的\n" " 本測試將會檢查螢幕鎖定éµ\n" "步驟\n" " 1. 請開始本測試,若沒有此按éµè«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 2. 在 30 秒內按下螢幕鎖定éµ\n" " 3. 如果螢幕被æˆåŠŸéŽ–å®šï¼Œè«‹ç§»å‹•æ»‘é¼ æˆ–æŒ‰ä»»æ„éµä¾†å•Ÿå‹•解鎖æç¤ºç•«é¢\n" " 4. 輸入密碼來解鎖螢幕\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/keys.txt.in:25 msgid "" "PURPOSE:\n" " This test will test the brightness key\n" "STEPS:\n" " 1. Press the brightness buttons on the keyboard\n" "VERIFICATION:\n" " Did the brightness change following to your key presses?" msgstr "" "目的:\n" " 本測試將會檢查亮度調整éµ\n" "步驟:\n" " 1. 按下éµç›¤ä¸Šçš„亮度調整éµ\n" "檢查:\n" " èž¢å¹•äº®åº¦æ˜¯å¦æœ‰éš¨è‘—您按下的亮度調整éµè€Œæ”¹è®Šï¼Ÿ" #. description #: ../jobs/keys.txt.in:41 msgid "" "PURPOSE:\n" " This test will test the volume keys of your keyboard\n" "STEPS:\n" " Skip this test if your computer has no volume keys.\n" " 1. Click test to open a window on which to test the volume keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected?" msgstr "" "目的:\n" " 本測試將會檢查您éµç›¤ä¸Šçš„音é‡èª¿æ•´éµ\n" "步驟:\n" " 若您的電腦上沒有音é‡èª¿æ•´éµè«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開啟測試音é‡éµçš„視窗\n" " 2. 如果所有按éµéƒ½èƒ½æ­£å¸¸é‹ä½œï¼Œæœ¬æ¸¬è©¦å°‡æœƒè¢«è¨­å®šç‚ºé€šéŽ\n" "檢查:\n" " 這些按éµé‹ä½œæ˜¯å¦æ­£å¸¸ï¼Ÿ" #. description #: ../jobs/keys.txt.in:59 msgid "" "PURPOSE:\n" " This test will test the mute key of your keyboard\n" "STEPS:\n" " 1. Click test to open a window on which to test the mute key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the mute key work as expected?" msgstr "" "目的:\n" " 本測試將會檢查您éµç›¤ä¸Šçš„音é‡éœéŸ³éµ\n" "步驟\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開啟測試音é‡éœéŸ³éµçš„視窗\n" " 2. 如果該按éµèƒ½æ­£å¸¸é‹ä½œï¼Œæœ¬æ¸¬è©¦å°‡æœƒè¢«è¨­å®šç‚ºé€šéŽä¸”該視窗會自動關閉\n" "檢查:\n" " 此音é‡éœéŸ³éµæ˜¯å¦é‹ä½œæ­£å¸¸ï¼Ÿ" #. description #: ../jobs/keys.txt.in:74 msgid "" "PURPOSE:\n" " This test will test the sleep key\n" "STEPS:\n" " 1. Press the sleep key on the keyboard\n" " 2. Wake your system up by pressing the power button\n" "VERIFICATION:\n" " Did the system go to sleep after pressing the sleep key?" msgstr "" "目的:\n" " 本測試將會檢查ç¡çœ éµ\n" "步驟:\n" " 1. 按下éµç›¤ä¸Šçš„ç¡çœ éµ\n" " 2. 按下電æºéµä¾†å–šé†’您的電腦\n" "檢查:\n" " 按下ç¡çœ éµå¾Œæœ‰è®“您的系統進入ç¡çœ ç‹€æ…‹å—Žï¼Ÿ" #. description #: ../jobs/keys.txt.in:90 msgid "" "PURPOSE:\n" " This test will test the battery information key\n" "STEPS:\n" " Skip this test if you do not have a Battery Button.\n" " 1. Click Test to begin\n" " 2. Press the Battery Info button (or combo like Fn+F3)\n" " 3: Close the Power Statistics tool if it opens\n" "VERIFICATION:\n" " Did the Battery Info key work as expected?" msgstr "" "目的:\n" " 本測試將會檢查電池資訊éµ\n" "步驟:\n" " 若您的電腦上沒有電池資訊éµè«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開始\n" " 2. æŒ‰ä¸‹é›»æ± è³‡è¨Šéµ (或是 Fn+F3 的組åˆ)\n" " 3: 若電力統計工具有被打開的話請關閉它\n" "檢查:\n" " é›»æ± è³‡è¨Šéµæ˜¯å¦é‹ä½œæ­£å¸¸ï¼Ÿ" #. description #: ../jobs/keys.txt.in:106 msgid "" "PURPOSE:\n" " This test will test the wireless key\n" "STEPS:\n" " 1. Press the wireless key on the keyboard\n" " 2. Check that the wifi LED turns off or changes color\n" " 3. Check that wireless is disabled\n" " 4. Press the same key again\n" " 5. Check that the wifi LED turns on or changes color\n" " 6. Check that wireless is enabled\n" "VERIFICATION:\n" " Did the wireless turn off on the first press and on again on the " "second?\n" " (NOTE: the LED functionality will be reviewed in a following test. " "Please\n" " only consider the functionality of the wifi itself here.)" msgstr "" "目的:\n" " 本測試將會檢查無線網路éµ\n" "步驟:\n" " 1. 按下éµç›¤ä¸Šçš„無線網路éµ\n" " 2. 檢查無線網路狀態 LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰ç†„滅或變色\n" " 3. æª¢æŸ¥ç„¡ç·šç¶²è·¯æ˜¯å¦æœ‰è¢«åœç”¨\n" " 4. 冿Œ‰ä¸€æ¬¡è©²ç„¡ç·šç¶²è·¯éµ\n" " 5. 撿查無線網路狀態 LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰äº®èµ·æˆ–變色\n" " 6. æª¢æŸ¥ç„¡ç·šç¶²è·¯æ˜¯å¦æœ‰è¢«å•Ÿç”¨\n" "檢查:\n" " ç„¡ç·šç¶²è·¯æ˜¯å¦æœ‰åœ¨ç¬¬ä¸€æ¬¡æŒ‰ä¸‹è©²æŒ‰éµæ™‚è¢«é—œé–‰ï¼Œä¸¦åœ¨ç¬¬äºŒæ¬¡æŒ‰ä¸‹è©²æŒ‰éµæ™‚啟用?\n" " (註:我們將會在後é¢çš„æ¸¬è©¦ä¸­æª¢æ¸¬ LED 指示燈的é‹ä½œç‹€æ³ï¼Œåœ¨æœ¬æ¸¬è©¦ä¸­è«‹è‘—é‡åœ¨ç„¡ç·šç¶²è·¯éµçš„功能上)" #. description #: ../jobs/keys.txt.in:129 msgid "" "PURPOSE:\n" " This test will test the media keys of your keyboard\n" "STEPS:\n" " Skip this test if your computer has no media keys.\n" " 1. Click test to open a window on which to test the media keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected?" msgstr "" "目的:\n" " 本測試將會檢查您éµç›¤ä¸Šçš„多媒體控制éµ\n" "步驟:\n" " 若您的電腦上沒有多媒體控制éµè«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開啟測試多媒體控制éµçš„視窗\n" " 2. 如果所有按éµéƒ½èƒ½æ­£å¸¸é‹ä½œï¼Œæœ¬æ¸¬è©¦å°‡æœƒè¢«è¨­å®šç‚ºé€šéŽ\n" "檢查:\n" " 這些按éµé‹ä½œæ˜¯å¦æ­£å¸¸ï¼Ÿ" #. description #: ../jobs/keys.txt.in:147 msgid "" "PURPOSE:\n" " This test will test the super key of your keyboard\n" "STEPS:\n" " 1. Click test to open a window on which to test the super key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the super key work as expected?" msgstr "" "目的:\n" " 本測試將會檢查您éµç›¤ä¸Šçš„ super éµ\n" "步驟:\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開啟測試 super éµçš„視窗\n" " 2. 如果該按éµèƒ½æ­£å¸¸é‹ä½œï¼Œæœ¬æ¸¬è©¦å°‡æœƒè¢«è¨­å®šç‚ºé€šéŽä¸”該視窗會自動關閉\n" "檢查:\n" " æ­¤ super 鵿˜¯å¦é‹ä½œæ­£å¸¸ï¼Ÿ" #. description #: ../jobs/keys.txt.in:161 msgid "" "PURPOSE:\n" " Validate that the External Video hot key is working as expected\n" "STEPS:\n" " 1. Plug in an external monitor\n" " 2. Press the display hot key to change the monitors configuration\n" "VERIFICATION:\n" " Check that the video signal can be mirrored, extended, displayed on " "external or onboard only." msgstr "" "目的:\n" " 本測試將會檢查顯示切æ›ç†±éµæ˜¯å¦é‹ä½œæ­£å¸¸\n" "步驟:\n" " 1. 接上一個外接螢幕\n" " 2. 按下顯示切æ›ç†±éµä¾†åˆ‡æ›èž¢å¹•顯示設定\n" "檢查:\n" " 檢查螢幕顯示模å¼å¯ä»¥åœ¨é¡åƒã€å»¶ä¼¸ã€åªé¡¯ç¤ºåœ¨å¤–接螢幕上與åªé¡¯ç¤ºåœ¨å…§å»ºèž¢å¹•上切æ›" #. description #: ../jobs/keys.txt.in:175 msgid "" "PURPOSE:\n" " Verify touchpad hotkey toggles touchpad functionality on and off\n" "STEPS:\n" " 1. Verify the touchpad is functional\n" " 2. Tap the touchpad toggle hotkey\n" " 3. Tap the touchpad toggle hotkey again\n" "VERIFICATION:\n" " Verify the touchpad has been disabled and re-enabled." msgstr "" "目的:\n" " 檢查觸控æ¿ç†±éµèƒ½å¤ å•Ÿå‹•ã€é—œé–‰è§¸æŽ§æ¿åŠŸèƒ½\n" "步驟:\n" " 1. 檢查觸控æ¿é‹ä½œæ˜¯å¦æ­£å¸¸\n" " 2. 按下觸控æ¿ç†±éµ\n" " 3. 冿¬¡æŒ‰ä¸‹è§¸æŽ§æ¿ç†±éµ\n" "檢查:\n" " 請確èªè§¸æŽ§æ¿æ˜¯å¦æœ‰è¢«åœç”¨ã€é‡æ–°å•Ÿç”¨" #. description #: ../jobs/keys.txt.in:190 msgid "" "PURPOSE:\n" " Verify that the keyboard backlight toggle key works properly\n" "STEPS:\n" " 1. Tap the keyboard backlight key\n" " 2. Confirm that the keyboard backlight was toggled to the opposite " "state\n" " 3. Tap the keyboard backlight key again\n" " 4. Confirm that the keyboard backlight was toggled to the opposite " "state\n" "VERIFICATION:\n" " Did the keyboard backlight state change on each press?" msgstr "" "目的:\n" " 檢查éµç›¤èƒŒå…‰ç†±éµé‹ä½œæ˜¯å¦æ­£å¸¸\n" "步驟:\n" " 1. 按下éµç›¤èƒŒå…‰ç†±éµ\n" " 2. 確èªéµç›¤èƒŒå…‰æœ‰éš¨è‘—按éµè¢«åˆ‡æ›\n" " 3. 冿¬¡æŒ‰ä¸‹éµç›¤èƒŒå…‰ç†±éµ\n" " 4. 確èªéµç›¤èƒŒå…‰æœ‰éš¨è‘—按éµè¢«åˆ‡æ›\n" "檢查:\n" " éµç›¤èƒŒå…‰ç‹€æ…‹æœ‰éš¨è‘—æ¯æ¬¡æŒ‰ä¸‹æ­¤ç†±éµè€Œæ”¹è®Šå—Žï¼Ÿ" #. description #: ../jobs/keys.txt.in:218 msgid "" "PURPOSE:\n" " This test will test the mute key for your microphone\n" "STEPS:\n" " 1. Click \"Test\" then speak: \"Imagination is more important than " "knowledge\" (or anything else) into your microphone.\n" " 2. While you are speaking, please press the mute key for the microphone " "to mute it and press it again to unmute.\n" " 3. After a few seconds, your speech will be played back to you. If the " "key works, your speech should be interrupted for a few seconds.\n" "VERIFICATION:\n" " Does the microphone mute key work as expected?" msgstr "" "目的:\n" " 本測試將會檢查麥克風éœéŸ³éµ\n" "步驟:\n" " 1. 按下「測試ã€éµä¸¦å°è‘—麥克風說出「想åƒåŠ›æ¯”çŸ¥è­˜é‡è¦ã€(或其他å¥å­)\n" " 2. 當您在唸出這å¥å­æ™‚,請在中途按下麥克風éœéŸ³éµå°‡éº¥å…‹é¢¨éœéŸ³ï¼Œä¸¦åœ¨ä¸€å°æ®µæ™‚é–“å¾Œå†æŒ‰ç¬¬äºŒæ¬¡ä¾†è§£é™¤éœéŸ³\n" " 3. 幾秒é˜å¾Œï¼Œæ‚¨å‰›å‰›å”¸å‡ºçš„å¥å­å°‡æœƒè¢«é‡æ–°æ’­æ”¾å‡ºä¾†ã€‚若此麥克風éœéŸ³éµé‹ä½œæ­£å¸¸ï¼Œæ‚¨å‰›å‰›å”¸çš„å¥å­æ‡‰è©²æœƒæœ‰ä¸€å°æ®µçš„中斷\n" "檢查:\n" " 麥克風éœéŸ³éµé‹ä½œæ˜¯å¦ä¸€å¦‚é æœŸï¼Ÿ" #. description #: ../jobs/keys.txt.in:233 msgid "" "PURPOSE:\n" " This test will test the hibernate key\n" "STEPS:\n" " 1. Press the hibernate key on the keyboard\n" " 2. Check that the system hibernated correctly\n" " 3. Wake your system after hibernating by pressing the power button\n" "VERIFICATION:\n" " Did the system go to hibernate after pressing the hibernate key?" msgstr "" "目的:\n" " 本測試將會檢查休眠éµåŠŸèƒ½\n" "步驟:\n" " 1. 按下éµç›¤ä¸Šçš„休眠éµ\n" " 2. æª¢æŸ¥ç³»çµ±æ˜¯å¦æœ‰æ­£ç¢ºé€²å…¥ä¼‘眠狀態\n" " 3. 按下電æºéµä¾†å–šé†’您的電腦\n" "檢查:\n" " 在您按下休眠éµå¾Œï¼Œç³»çµ±æ˜¯å¦æœ‰é€²å…¥ä¼‘眠狀態?" #. description #: ../jobs/keys.txt.in:248 msgid "" "PURPOSE:\n" " This test will test the keyboard overhead light key or switch\n" "STEPS:\n" " 1. Press the keyboard overhead light key or swtich on the light\n" " 2. Check the the keyboard overhead light turn on correctly\n" " 3. Press the key or switch again to toggle off the light\n" "VERIFICATION:\n" " Did the keyboard overhead light key or switch turns on and off the light?" msgstr "" "目的:\n" " 本測試將會檢查éµç›¤ç…§æ˜Žç‡ˆéµ\n" "步驟:\n" " 1. 按下éµç›¤ç…§æ˜Žç‡ˆéµä¾†å•Ÿå‹•照亮éµç›¤ç”¨çš„照明燈\n" " 2. æª¢æŸ¥è©²ç…§æ˜Žç‡ˆæ˜¯å¦æœ‰è¢«æ‰“é–‹\n" " 3. 冿Œ‰ä¸€æ¬¡éµç›¤ç…§æ˜Žç‡ˆéµä¾†æŠŠå®ƒé—œæŽ‰\n" "檢查:\n" " éµç›¤ç…§æ˜Žç‡ˆéµæ˜¯å¦èƒ½æŽ§åˆ¶è©²ç…§æ˜Žç‡ˆï¼Ÿ" #. description #: ../jobs/led.txt.in:5 msgid "" "PURPOSE:\n" " Power LED verification\n" "STEPS:\n" " 1. Power LED should be on while device is switched on\n" "VERIFICATION:\n" " Does the power LED light as expected?" msgstr "" "目的:\n" " é›»æºç‹€æ…‹ LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 1. é›»æºç‹€æ…‹ LED 指示燈應該在電腦啟動時亮著\n" "檢查:\n" " é›»æºç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæœ‰ä¸€å¦‚é æœŸçš„亮著嗎?" #. description #: ../jobs/led.txt.in:18 msgid "" "PURPOSE:\n" " Power LED verification\n" "STEPS:\n" " 1. The Power LED should blink or change color while the system is " "suspended\n" "VERIFICATION:\n" " Did the Power LED blink or change color while the system was suspended " "for the previous suspend test?" msgstr "" "目的:\n" " é›»æºç‹€æ…‹ LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 1. 您電腦的電æºç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæ‡‰è©²æœƒåœ¨é›»è…¦æš«åœæ™‚é–ƒçˆæˆ–變色\n" "檢查:\n" " 您電腦的電æºç‹€æ…‹ LED 指示燈在先å‰çš„æš«åœæ¸¬è©¦ä¸­æœ‰é–ƒçˆæˆ–變色嗎?" #. description #: ../jobs/led.txt.in:31 msgid "" "PURPOSE:\n" " Suspend LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a dedicated Suspend LED.\n" " 1. The Suspend LED should blink or change color while the system is\n" " suspended\n" "VERIFICATION\n" " Did the Suspend LED blink or change color while the system was suspended?" msgstr "" "目的:\n" " æš«åœç‹€æ…‹ LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 若您的電腦上沒有專門的暫åœç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆçš„è©±è«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. æš«åœç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæ‡‰è©²æœƒåœ¨ç³»çµ±æš«åœæ™‚é–ƒçˆæˆ–是變色\n" "檢查:\n" " æš«åœç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæœ‰åœ¨ç³»çµ±æš«åœæ™‚é–ƒçˆæˆ–是變色嗎?" #. description #: ../jobs/led.txt.in:45 msgid "" "PURPOSE:\n" " Validate that the battery light shows charging status\n" "STEPS:\n" " 1. Let system run on battery for a while\n" " 2. Plug in AC plug\n" "VERIFICATION:\n" " Did the battery indicator LED turn orange?" msgstr "" "目的:\n" " 電池狀態 LED 指示燈充電狀態檢測\n" "步驟:\n" " 1. 讓您的電腦以電池é‹ä½œä¸€å°æ®µæ™‚é–“\n" " 2. 將電æºä¾›æ‡‰å™¨æŽ¥ä¸Šç­†é›»\n" "檢查:\n" " 電池狀態 LED æŒ‡ç¤ºç‡ˆæœ‰è®Šæˆæ©˜è‰²å—Žï¼Ÿ" #. description #: ../jobs/led.txt.in:58 msgid "" "PURPOSE:\n" " Validate that the battery LED properly displays charged status\n" "STEPS:\n" " 1. Let system run on battery for a short time\n" " 2. Plug in AC\n" " 3. Let system run on AC\n" "VERIFICATION:\n" " Does the orange battery LED shut off when system is fully charged?" msgstr "" "目的:\n" " 電池狀態 LED 指示燈充電完æˆç‹€æ…‹æª¢æ¸¬\n" "步驟:\n" " 1. 讓您的電腦以電池é‹ä½œä¸€å°æ®µæ™‚é–“\n" " 2. 將電æºä¾›æ‡‰å™¨æŽ¥ä¸Šç­†é›»\n" " 3. 讓您的電腦以電æºä¾›æ‡‰å™¨é‹ä½œ\n" "檢查:\n" " 橘色的電池狀態 LED 指示燈有在充電完æˆå¾Œç†„滅嗎?" #. description #: ../jobs/led.txt.in:72 msgid "" "PURPOSE:\n" " Validate that the battery LED indicated low power\n" "STEPS:\n" " 1. Let system run on battery for several hours\n" " 2. Monitor battery LED carefully\n" "VERIFICATION:\n" " Does the LED light orange when battery is low?" msgstr "" "目的:\n" " 電池狀態 LED 指示燈低電é‡ç‹€æ…‹æª¢æ¸¬\n" "步驟:\n" " 1. 讓您的電腦以電池é‹ä½œå¹¾å€‹å°æ™‚\n" " 2. 觀察電池狀態 LED 指示燈\n" "檢查:\n" " 電池狀態 LED 指示燈在電力ä¸è¶³æ™‚æœ‰è®Šæˆæ©˜è‰²å—Žï¼Ÿ" #. description #: ../jobs/led.txt.in:86 msgid "" "PURPOSE:\n" " HDD LED verification\n" "STEPS:\n" " 1. Select \"Test\" to write and read a temporary file for a few seconds\n" " 2. HDD LED should light when writing to/reading from HDD\n" "VERIFICATION:\n" " Did the HDD LED light?" msgstr "" "目的:\n" " 硬碟狀態 LED 指示燈檢測\n" "步驟\n" " 1. 按下「測試ã€ä¾†é€²è¡Œå¹¾ç§’é˜çš„æš«å­˜æª”讀 / 寫æ“作\n" " 2. 硬碟狀態 LED 指示燈在å°ç¡¬ç¢Ÿé€²è¡Œè®€ / 寫æ“作時應該會亮起\n" "檢查:\n" " 硬碟狀態 LED 指示燈有亮起嗎?" #. description #: ../jobs/led.txt.in:100 msgid "" "PURPOSE:\n" " Numeric keypad LED verification\n" "STEPS:\n" " 1. Press \"Block Num\" key to toggle numeric keypad LED\n" " 2. Click on the \"Test\" button to open a window to verify your typing\n" " 3. Type using the numeric keypad both when the LED is on and off\n" "VERIFICATION:\n" " 1. Numeric keypad LED status should toggle everytime the \"Block Num\" " "key is pressed\n" " 2. Numbers should only be entered in the keyboard verification window " "when the LED is on" msgstr "" "目的:\n" " 數字éµç›¤ LED 指示燈檢測\n" "步驟:\n" " 1. 按下「NumLockã€éµä¾†å•Ÿå‹•數字éµç›¤ LED 指示燈\n" " 2. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•打開測試視窗來測試輸入\n" " 3. 在數字éµç›¤ LED 指示燈亮起與熄滅的狀態下用數字éµç›¤æ‰“å­—\n" "檢查:\n" " 1. 按下「NumLockã€éµæ‡‰è©²èƒ½å¤ åˆ‡æ›æ•¸å­—éµç›¤ LED 指示燈狀態\n" " 2. 僅在數字éµç›¤ LED 指示燈亮起時,æ‰èƒ½å¾žæ•¸å­—éµç›¤ä¸Šè¼¸å…¥æ•¸å­—" #. description #: ../jobs/led.txt.in:115 msgid "" "PURPOSE:\n" " Block cap keys LED verification\n" "STEPS:\n" " 1. Press \"Block Cap Keys\" to activate/deactivate cap keys blocking\n" " 2. Cap Keys LED should be switched on/off every time the key is pressed\n" "VERIFICATION:\n" " Did the Cap Keys LED light as expected?" msgstr "" "目的:\n" " 大寫鎖定狀態 LED 指示燈檢測\n" "步驟:\n" " 1. 按下「CapLocksã€éµä¾†å•Ÿå‹• / 關閉大寫鎖定\n" " 2. åœ¨æŒ‰ä¸‹è©²æŒ‰éµæ™‚應該能夠切æ›å¤§å¯«éŽ–å®šç‹€æ…‹ LED 指示燈狀態\n" "檢查:\n" " 大寫鎖定狀態 LED æŒ‡ç¤ºç‡ˆæœ‰ä¸€å¦‚é æœŸçš„亮起嗎?" #. description #: ../jobs/led.txt.in:129 msgid "" "PURPOSE:\n" " WLAN LED verification\n" "STEPS:\n" " 1. During the keys/wireless test you should have observed the\n" " wireless LED while turning wireless back on.\n" " 2. WLAN LED should light or change color when wireless is turned on\n" "VERIFICATION:\n" " Did the WLAN LED turn on or change color as expected?" msgstr "" "目的:\n" " 無線網路狀態 LED 指示燈檢測\n" "步驟:\n" " 1. 在 keys/wireless 測試時您應該有觀察到無線網路狀態 LED 指示燈在啟用無線網路後的變化\n" " 2. 無線網路狀態 LED 指示燈應該在無線網路啟用時亮起或變色\n" "檢查:\n" " 無線網路狀態 LED 指示燈有亮起或變色嗎?" #. description #: ../jobs/led.txt.in:144 msgid "" "PURPOSE:\n" " Validate that WLAN LED shuts off when disabled\n" "STEPS:\n" " 1. During the keys/wireless test you should have observed the WLAN LED\n" " while performing that test after turning wireless off.\n" " 2. WLAN LED should turn off or change color when wireless is turned off\n" "VERIFICATION:\n" " Did the WLAN LED turn off or change color as expected?" msgstr "" "目的:\n" " åœç”¨ç„¡ç·šç¶²è·¯æ™‚的無線網路狀態 LED 指示燈檢測\n" "步驟:\n" " 1. 在 keys/wireless 測試時您應該有觀察到無線網路狀態 LED 指示燈在åœç”¨ç„¡ç·šç¶²è·¯å¾Œçš„變化\n" " 2. 無線網路狀態 LED 指示燈應該在無線網路åœç”¨æ™‚熄滅或變色\n" "檢查:\n" " 無線網路狀態 LED 指示燈有熄滅或變色嗎?" #. description #: ../jobs/led.txt.in:159 msgid "" "PURPOSE:\n" " Validate that the Bluetooth LED turns on and off when BT is " "enabled/disabled\n" "STEPS:\n" " 1. Switch bluetooth off from a hardware switch (if present)\n" " 2. Switch bluetooth back on\n" " 3. Switch bluetooth off from the panel applet\n" " 4. Switch bluetooth back on\n" "VERIFICATION:\n" " Did the bluetooth LED turn off and on twice?" msgstr "" "目的:\n" " 在è—牙功能啟用 / åœç”¨ç‹€æ…‹ä¸‹çš„è—牙狀態 LED 指示燈測試\n" "步驟:\n" " 1. 若有è—牙控制éµçš„話,請用它將è—牙功能關閉\n" " 2. å°‡è—ç‰™é‡æ–°æ‰“é–‹\n" " 3. 從è—牙圖示關閉è—牙功能\n" " 4. å°‡è—ç‰™é‡æ–°æ‰“é–‹\n" "檢查:\n" " è—牙狀態 LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰äº®èµ·ã€ç†„滅兩次?" #. description #: ../jobs/led.txt.in:176 msgid "" "PURPOSE:\n" " Camera LED verification\n" "STEPS:\n" " 1. Select Test to activate camera\n" " 2. Camera LED should light for a few seconds\n" "VERIFICATION:\n" " Did the camera LED light?" msgstr "" "目的::\n" " 網路æ”影機狀態 LED 指示燈檢測\n" "步驟:\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來啟動網路æ”影機\n" " 2. 網路æ”影機狀態 LED 指示燈應該會亮起幾秒é˜\n" "檢查:\n" " 網路æ”影機狀態 LED 指示燈有亮起嗎?" #. description #: ../jobs/led.txt.in:189 msgid "" "PURPOSE:\n" " Touchpad LED verification\n" "STEPS:\n" " 1. Click on the touchpad button or press key combination to " "enable/disable touchpad button\n" " 2. Slide your finger on the touchpad\n" "VERIFICATION:\n" " 1. Touchpad LED status should toggle everytime the button is clicked or " "the key combination is pressed\n" " 2. When the LED is on, the mouse pointer should move on touchpad usage\n" " 3. When the LED is off, the mouse pointer should not move on touchpad " "usage" msgstr "" "目的:\n" " 觸控æ¿ç‹€æ…‹ LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 1. 按下觸控æ¿ç†±éµæˆ–按éµçµ„åˆä¾†å•Ÿå‹• / åœç”¨è§¸æŽ§æ¿\n" " 2. 將您的手指滑éŽè§¸æŽ§æ¿\n" "檢查:\n" " 1. 按下觸控æ¿ç†±éµæˆ–按éµçµ„åˆæ™‚應該è¦èƒ½å¤ åˆ‡æ›è§¸æŽ§æ¿ç‹€æ…‹ LED 指示燈狀態\n" " 2. 當觸控æ¿ç‹€æ…‹ LED 指示燈亮起時,游標應該è¦éš¨è‘—手指在觸控æ¿ä¸Šçš„æ“ä½œè€Œç§»å‹•\n" " 3. 當觸控æ¿ç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆç†„æ»…æ™‚ï¼Œæ¸¸æ¨™æ‡‰è©²ä¸æœƒéš¨è‘—手指在觸控æ¿ä¸Šçš„æ“ä½œè€Œç§»å‹•" #. description #: ../jobs/led.txt.in:204 msgid "" "PURPOSE:\n" " Wireless (WLAN + Bluetooth) LED verification\n" "STEPS:\n" " 1. Make sure WLAN connection is established and Bluetooth is enabled.\n" " 2. WLAN/Bluetooth LED should light\n" " 3. Switch WLAN and Bluetooth off from a hardware switch (if present)\n" " 4. Switch them back on\n" " 5. Switch WLAN and Bluetooth off from the panel applet\n" " 6. Switch them back on\n" "VERIFICATION:\n" " Did the WLAN/Bluetooth LED light as expected?" msgstr "" "目的:\n" " ç„¡ç·šè£ç½® (無線網路 + è—牙) 狀態 LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 1. 確定無線網路處於已連線狀態且è—牙為啟動狀態\n" " 2. 無線網路 / è—牙狀態 LED 指示燈應該è¦äº®è‘—\n" " 3. 若有無線網路與è—牙控制éµçš„話,請用它將無線網路與è—牙關閉\n" " 4. å°‡å®ƒé‡æ–°æ‰“é–‹\n" " 5. 從系統狀態列的網路圖示與è—牙圖示關閉無線網路與è—牙功能\n" " 6. å°‡å®ƒé‡æ–°æ‰“é–‹\n" "檢查:\n" " ç„¡ç·šè£ç½® (無線網路 + è—牙) 狀態 LED 指示燈é‹ä½œæ˜¯å¦ä¸€å¦‚é æœŸï¼Ÿ" #. description #: ../jobs/led.txt.in:222 msgid "" "PURPOSE:\n" " Audio Mute LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a special Audio Mute LED.\n" " 1. Press the Mute key twice and observe the Audio LED to determine if " "it\n" " either turned off and on or changed colors.\n" "VERIFICATION:\n" " Did the Audio LED turn on and off or change color as expected?" msgstr "" "目的:\n" " 音效éœéŸ³ç‹€æ…‹ LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 若您的電腦上沒有專門的音效éœéŸ³ç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆçš„è©±è«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. 按下音效éœéŸ³ç†±éµå…©æ¬¡ï¼Œä¸¦è§€å¯ŸéŸ³æ•ˆéœéŸ³ç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰ç†„æ»…ã€äº®èµ·æˆ–變色\n" "檢查:\n" " 音效éœéŸ³ç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰ä¸€å¦‚é æœŸçš„熄滅ã€äº®èµ·æˆ–變色?" #. description #: ../jobs/led.txt.in:237 msgid "" "PURPOSE:\n" " Microphone Mute LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a special Microphone Mute " "LED.\n" " 1. Press the Microphone Mute key twice and observe the Microphone LED " "to\n" " determine if it either turned off and on or changed colors.\n" "VERIFICATION:\n" " Did the Microphone Mute LED turn on and off or change color as expected?" msgstr "" "目的:\n" " 麥克風éœéŸ³ç‹€æ…‹ LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 若您的電腦上沒有專門的麥克風éœéŸ³ç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆçš„è©±è«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. 按下麥克風éœéŸ³ç†±éµå…©æ¬¡ï¼Œä¸¦è§€å¯Ÿéº¥å…‹é¢¨éœéŸ³ç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰ç†„æ»…ã€äº®èµ·æˆ–變色\n" "檢查:\n" " 麥克風éœéŸ³ç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰ä¸€å¦‚é æœŸçš„熄滅ã€äº®èµ·æˆ–變色?" #. description #: ../jobs/local.txt.in:3 msgid "Audio tests" msgstr "音效測試" #. description #: ../jobs/local.txt.in:10 msgid "Benchmarks tests" msgstr "效能測試" #. description #: ../jobs/local.txt.in:17 msgid "Bluetooth tests" msgstr "è—牙測試" #. description #: ../jobs/local.txt.in:24 msgid "Camera tests" msgstr "網路æ”影機測試" #. description #: ../jobs/local.txt.in:31 msgid "Codec tests" msgstr "編解碼器測試" #. description #: ../jobs/local.txt.in:38 msgid "CPU tests" msgstr "CPU 測試" #. description #: ../jobs/local.txt.in:45 msgid "System Daemon tests" msgstr "系統常é§ç¨‹å¼æ¸¬è©¦" #. description #: ../jobs/local.txt.in:52 msgid "Disk tests" msgstr "ç£ç¢Ÿæ¸¬è©¦" #. description #: ../jobs/local.txt.in:59 msgid "Docking tests" msgstr "筆電擴充基座測試" #. description #: ../jobs/local.txt.in:66 msgid "Ethernet Device tests" msgstr "乙太網路測試" #. description #: ../jobs/local.txt.in:73 msgid "eSATA disk tests" msgstr "eSATA ç£ç¢Ÿæ¸¬è©¦" #. description #: ../jobs/local.txt.in:80 msgid "Fingerprint reader tests" msgstr "指紋讀å–器測試" #. description #: ../jobs/local.txt.in:87 msgid "Firewire disk tests" msgstr "Firewire ç£ç¢Ÿæ¸¬è©¦" #. description #: ../jobs/local.txt.in:94 msgid "Firmware tests" msgstr "韌體測試" #. description #: ../jobs/local.txt.in:101 msgid "Floppy disk tests" msgstr "軟碟測試" #. description #: ../jobs/local.txt.in:108 msgid "Graphics tests" msgstr "圖形測試" #. description #: ../jobs/local.txt.in:115 msgid "Hibernation tests" msgstr "休眠測試" #. description #: ../jobs/local.txt.in:122 msgid "Informational tests" msgstr "" #. description #: ../jobs/local.txt.in:129 msgid "Input Devices tests" msgstr "輸入è£ç½®æ¸¬è©¦" #. description #: ../jobs/local.txt.in:136 msgid "Software Installation tests" msgstr "è»Ÿé«”å®‰è£æ¸¬è©¦" #. description #: ../jobs/local.txt.in:143 msgid "Hotkey tests" msgstr "ç†±éµæ¸¬è©¦" #. description #: ../jobs/local.txt.in:150 msgid "LED tests" msgstr "LED 測試" #. description #: ../jobs/local.txt.in:157 msgid "Media Card tests" msgstr "記憶å¡è®€å¡æ©Ÿæ¸¬è©¦" #. description #: ../jobs/local.txt.in:164 msgid "Memory tests" msgstr "記憶體測試" #. description #: ../jobs/local.txt.in:171 msgid "Rendercheck tests" msgstr "Rendercheck 測試" #. description #: ../jobs/local.txt.in:178 msgid "MIR tests" msgstr "MIR 測試" #. description #: ../jobs/local.txt.in:185 msgid "Miscellaneous tests" msgstr "雜項測試" #. description #: ../jobs/local.txt.in:192 msgid "Monitor tests" msgstr "螢幕測試" #. description #: ../jobs/local.txt.in:199 msgid "Non-device specific networking tests" msgstr "" #. description #: ../jobs/local.txt.in:206 msgid "Optical Drive tests" msgstr "光碟機測試" #. description #: ../jobs/local.txt.in:213 msgid "Panel Clock Verification tests" msgstr "ç‹€æ…‹åˆ—æ™‚é˜æ¸¬è©¦" #. description #: ../jobs/local.txt.in:220 msgid "Panel Reboot Verification tests" msgstr "ç‹€æ…‹åˆ—é‡æ–°é–‹æ©Ÿæ¸¬è©¦" #. description #: ../jobs/local.txt.in:227 msgid "ExpressCard tests" msgstr "ExpressCard 測試" #. description #: ../jobs/local.txt.in:234 msgid "Peripheral tests" msgstr "周邊è£ç½®æ¸¬è©¦" #. description #: ../jobs/local.txt.in:241 msgid "Power Management tests" msgstr "é›»æºç®¡ç†æ¸¬è©¦" #. description #: ../jobs/local.txt.in:248 msgid "Server Services checks" msgstr "伺æœå™¨æœå‹™æª¢æŸ¥æ¸¬è©¦" #. description #: ../jobs/local.txt.in:255 msgid "Suspend tests" msgstr "æš«åœæ¸¬è©¦" #. description #: ../jobs/local.txt.in:262 msgid "Thunderbolt tests" msgstr "Thunderbolt 測試" #. description #: ../jobs/local.txt.in:269 msgid "Touchpad tests" msgstr "è§¸æŽ§æ¿æ¸¬è©¦" #. description #: ../jobs/local.txt.in:276 msgid "Touchscreen tests" msgstr "觸控螢幕測試" #. description #: ../jobs/local.txt.in:283 msgid "USB tests" msgstr "USB 測試" #. description #: ../jobs/local.txt.in:290 msgid "User Applications" msgstr "ä½¿ç”¨è€…æ‡‰ç”¨ç¨‹å¼æ¸¬è©¦" #. description #: ../jobs/local.txt.in:297 msgid "Virtualization tests" msgstr "虛擬化測試" #. description #: ../jobs/local.txt.in:304 msgid "Wireless networking tests" msgstr "無線網路測試" #. description #: ../jobs/local.txt.in:311 msgid "Mobile broadband tests" msgstr "行動寬頻網路測試" #. description #: ../jobs/local.txt.in:318 msgid "Stress tests" msgstr "壓力測試" #. description #: ../jobs/local.txt.in:325 msgid "Smoke tests" msgstr "煙霧測試" #. description #: ../jobs/mediacard.txt.in:6 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Multimedia Card (MMC) media\n" "STEPS:\n" " 1. Click \"Test\" and then insert an MMC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ°å¤šåª’é«”è¨˜æ†¶å¡ (MMC) çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 MMC 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:26 msgid "" "This test is automated and executes after the mediacard/mmc-insert test is " "run. It tests reading and writing to the MMC card." msgstr "本自動化測試將在 mediacard/mmc-insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚å®ƒå°‡æœƒå° MMC å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/mediacard.txt.in:36 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of the MMC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the MMC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ° MMC å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 MMC 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:52 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED Secure Digital (SD) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ°è™•於解鎖狀態的安全數ä½å¡ (SD) çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張處於解鎖狀態的 SD 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:72 msgid "" "This test is automated and executes after the mediacard/sd-insert test is " "run. It tests reading and writing to the SD card." msgstr "本自動化測試將在 mediacard/sd-insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚å®ƒå°‡æœƒå° SD å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/mediacard.txt.in:82 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SD card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ° SD å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 SD 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:100 msgid "" "This is a fully automated version of mediacard/sd-automated and assumes that " "the system under test has a memory card device plugged in prior to checkbox " "execution. It is intended for SRU automated testing." msgstr "" "本測試為 mediacard/sd-automated 的全自動版本,å‡è¨­åœ¨ Checkbox 啟動å‰å¾…測系統上已經有æ’上記憶å¡äº†ã€‚這是é‡å° SRU " "自動化測試的項目。" #. description #: ../jobs/mediacard.txt.in:110 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a UNLOCKED Secure Digital High-Capacity\n" " (SDHC) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SDHC card into the " "reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ°è™•於解鎖狀態的高容é‡å®‰å…¨æ•¸ä½å¡ (SDHC) çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張處於解鎖狀態的 SDHC 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:131 msgid "" "This test is automated and executes after the mediacard/sdhc-insert test is " "run. It tests reading and writing to the SDHC card." msgstr "本自動化測試將在 mediacard/sdhc-insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚å®ƒå°‡æœƒå° SDHC å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/mediacard.txt.in:141 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SDHC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SDHC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ° SDHC å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 SDHC 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:157 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Compact Flash (CF) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a CF card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ°Compact Flash (CF) å¡çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 CF 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:177 msgid "" "This test is automated and executes after the mediacard/cf-insert test is " "run. It tests reading and writing to the CF card." msgstr "本自動化測試將在 mediacard/cf-insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚å®ƒå°‡æœƒå° CF å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/mediacard.txt.in:187 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a CF card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the CF card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ° CF å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 CF 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:203 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Secure Digital Extended Capacity (SDXC) media " "card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SDXC card into the " "reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ°è™•於解鎖狀態的超高容é‡å®‰å…¨æ•¸ä½å¡ (SDXC) çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張處於解鎖狀態的 SDXC 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:223 msgid "" "This test is automated and executes after the mediacard/sdxc-insert test is " "run. It tests reading and writing to the SDXC card." msgstr "本自動化測試將在 mediacard/sdxc-insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚å®ƒå°‡æœƒå° SDXC å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/mediacard.txt.in:233 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a SDXC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SDXC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ° SDXC å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 SDXC 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:249 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Memory Stick (MS) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a MS card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ°Memory Stick (MS) å¡çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 MS 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:269 msgid "" "This test is automated and executes after the mediacard/ms-insert test is " "run. It tests reading and writing to the MS card." msgstr "本自動化測試將在 mediacard/ms-insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚å®ƒå°‡æœƒå° MS å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/mediacard.txt.in:279 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a MS card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the MS card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ° MS å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 MS 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:295 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Memory Stick Pro (MSP) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a MSP card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ°Memory Stick Pro (MSP) å¡çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 MSP 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:315 msgid "" "This test is automated and executes after the mediacard/msp-insert test is " "run. It tests reading and writing to the MSP card." msgstr "本自動化測試將在 mediacard/msp-insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚å®ƒå°‡æœƒå° MSP å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/mediacard.txt.in:325 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a MSP card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MSP card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ° MSP å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 MSP 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:341 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Extreme Digital (xD) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a xD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ°Extreme Digital (xD) å¡çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 xD 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:361 msgid "" "This test is automated and executes after the mediacard/xd-insert test is " "run. It tests reading and writing to the xD card." msgstr "本自動化測試將在 mediacard/xd-insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚å®ƒå°‡æœƒå° xD å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/mediacard.txt.in:371 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a xD card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the xD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åµæ¸¬åˆ° xD å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 xD 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/mediacard.txt.in:389 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SD card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" "目的:\n" " 本測試將會檢查您的多媒體記憶å¡è³‡æ–™å‚³è¼¸æ•ˆèƒ½\n" "步驟:\n" " 1. æ’å…¥ SD å¡è‡³æœ¬ç³»çµ±ä¸Šçš„è®€å¡æ©Ÿ\n" " 2. 進行測試\n" "檢查:\n" " æ¸¬è©¦çµæžœæœ‰ç¬¦åˆæ­¤è¨˜æ†¶å¡æ‰€é æœŸçš„æ•ˆèƒ½å—Žï¼Ÿ" #. description #: ../jobs/mediacard.txt.in:405 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SDHC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" "目的:\n" " 本測試將會檢查您的多媒體記憶å¡è³‡æ–™å‚³è¼¸æ•ˆèƒ½\n" "步驟:\n" " 1. æ’å…¥ SDHC å¡è‡³æœ¬ç³»çµ±ä¸Šçš„è®€å¡æ©Ÿ\n" " 2. 進行測試\n" "檢查:\n" " æ¸¬è©¦çµæžœæœ‰ç¬¦åˆæ­¤è¨˜æ†¶å¡æ‰€é æœŸçš„æ•ˆèƒ½å—Žï¼Ÿ" #. description #: ../jobs/mediacard.txt.in:421 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MMC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" "目的:\n" " 本測試將會檢查您的多媒體記憶å¡è³‡æ–™å‚³è¼¸æ•ˆèƒ½\n" "步驟:\n" " 1. æ’å…¥ MMC å¡è‡³æœ¬ç³»çµ±ä¸Šçš„è®€å¡æ©Ÿ\n" " 2. 進行測試\n" "檢查:\n" " æ¸¬è©¦çµæžœæœ‰ç¬¦åˆæ­¤è¨˜æ†¶å¡æ‰€é æœŸçš„æ•ˆèƒ½å—Žï¼Ÿ" #. description #: ../jobs/mediacard.txt.in:437 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert CF card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" "目的:\n" " 本測試將會檢查您的多媒體記憶å¡è³‡æ–™å‚³è¼¸æ•ˆèƒ½\n" "步驟:\n" " 1. æ’å…¥ CF å¡è‡³æœ¬ç³»çµ±ä¸Šçš„è®€å¡æ©Ÿ\n" " 2. 進行測試\n" "檢查:\n" " æ¸¬è©¦çµæžœæœ‰ç¬¦åˆæ­¤è¨˜æ†¶å¡æ‰€é æœŸçš„æ•ˆèƒ½å—Žï¼Ÿ" #. description #: ../jobs/mediacard.txt.in:453 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SDXC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" "目的:\n" " 本測試將會檢查您的多媒體記憶å¡è³‡æ–™å‚³è¼¸æ•ˆèƒ½\n" "步驟:\n" " 1. æ’å…¥ SDXC å¡è‡³æœ¬ç³»çµ±ä¸Šçš„è®€å¡æ©Ÿ\n" " 2. 進行測試\n" "檢查:\n" " æ¸¬è©¦çµæžœæœ‰ç¬¦åˆæ­¤è¨˜æ†¶å¡æ‰€é æœŸçš„æ•ˆèƒ½å—Žï¼Ÿ" #. description #: ../jobs/mediacard.txt.in:469 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MS card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" "目的:\n" " 本測試將會檢查您的多媒體記憶å¡è³‡æ–™å‚³è¼¸æ•ˆèƒ½\n" "步驟:\n" " 1. æ’å…¥ MS å¡è‡³æœ¬ç³»çµ±ä¸Šçš„è®€å¡æ©Ÿ\n" " 2. 進行測試\n" "檢查:\n" " æ¸¬è©¦çµæžœæœ‰ç¬¦åˆæ­¤è¨˜æ†¶å¡æ‰€é æœŸçš„æ•ˆèƒ½å—Žï¼Ÿ" #. description #: ../jobs/mediacard.txt.in:485 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MSP card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" "目的:\n" " 本測試將會檢查您的多媒體記憶å¡è³‡æ–™å‚³è¼¸æ•ˆèƒ½\n" "步驟:\n" " 1. æ’å…¥ MSP å¡è‡³æœ¬ç³»çµ±ä¸Šçš„è®€å¡æ©Ÿ\n" " 2. 進行測試\n" "檢查:\n" " æ¸¬è©¦çµæžœæœ‰ç¬¦åˆæ­¤è¨˜æ†¶å¡æ‰€é æœŸçš„æ•ˆèƒ½å—Žï¼Ÿ" #. description #: ../jobs/mediacard.txt.in:501 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert xD card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" "目的:\n" " 本測試將會檢查您的多媒體記憶å¡è³‡æ–™å‚³è¼¸æ•ˆèƒ½\n" "步驟:\n" " 1. æ’å…¥ xD å¡è‡³æœ¬ç³»çµ±ä¸Šçš„è®€å¡æ©Ÿ\n" " 2. 進行測試\n" "檢查:\n" " æ¸¬è©¦çµæžœæœ‰ç¬¦åˆæ­¤è¨˜æ†¶å¡æ‰€é æœŸçš„æ•ˆèƒ½å—Žï¼Ÿ" #. description #: ../jobs/memory.txt.in:7 msgid "" "This test checks the amount of memory which is reporting in meminfo against " "the size of the memory modules detected by DMI." msgstr "本測試將會比å°ç”± meminfo 所回報的記憶體總é‡èˆ‡ç¶“ç”± DMI æ‰€åµæ¸¬åˆ°çš„記憶體模組總é‡" #. description #: ../jobs/memory.txt.in:19 msgid "" "Test to perform some basic stress and exercise of system memory. This test " "also includes an over-commit function to force swapping to disk, thus SUTs " "should have suitably large swap files for the amount of RAM they have " "installed." msgstr "" #. description #: ../jobs/mir.txt.in:5 msgid "MIR Integration tests" msgstr "MIR æ•´åˆæ¸¬è©¦" #. description #: ../jobs/mir.txt.in:21 msgid "MIR Acceptance tests" msgstr "MIR Acceptance 測試" #. description #: ../jobs/miscellanea.txt.in:17 msgid "" "A meta-job that verifies the data necessary for a complete result submission " "are present. Failure indicates that the results are incomplete and may be " "rejected." msgstr "" #. description #: ../jobs/miscellanea.txt.in:25 msgid "" "PURPOSE:\n" " Keep tester related information in the report\n" "STEPS:\n" " 1. Tester Information\n" " 2. Please enter the following information in the comments field:\n" " a. Name\n" " b. Email Address\n" " c. Reason for this test run\n" "VERIFICATION:\n" " Nothing to verify for this test" msgstr "" "目的:\n" " 在測試報告中附上測試者資訊\n" "步驟:\n" " 1. 測試者資訊\n" " 2. 請將下列資訊輸入在備註欄中:\n" " a. å§“å\n" " b. é›»å­éƒµä»¶ä¿¡ç®±\n" " c. 進行本測試的原因\n" "檢查:\n" " 本測試ä¸éœ€è¦ç‰¹åˆ¥æª¢æŸ¥ä»€éº¼" #. description #: ../jobs/miscellanea.txt.in:44 msgid "" "PURPOSE:\n" " This test will check that the system can switch to a virtual terminal " "and back to X\n" "STEPS:\n" " 1. Click \"Test\" to switch to another virtual terminal and then back to " "X\n" "VERIFICATION:\n" " Did your screen change temporarily to a text console and then switch " "back to your current session?" msgstr "" "目的:\n" " 本測試將會檢查系統能å¦åˆ‡æ›åˆ°è™›æ“¬çµ‚端å†åˆ‡å›ž X\n" "步驟:\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來切æ›è‡³å¦ä¸€å€‹è™›æ“¬çµ‚端然後在切回 X\n" "檢查:\n" " 您的螢幕有暫時切到文字模å¼ç„¶å¾Œå†åˆ‡å›žæ‚¨ç›®å‰çš„作業環境嗎?" #. description #: ../jobs/miscellanea.txt.in:59 msgid "Run Firmware Test Suite (fwts) automated tests." msgstr "執行 Firmware Test Suite (fwts) 自動化測試項目。" #. description #: ../jobs/miscellanea.txt.in:70 msgid "Attaches the miscellanes/fwts_test results log to the submission." msgstr "å°‡ miscellanes/fwts_test çµæžœç´€éŒ„附加至測試報告中。" #. description #: ../jobs/miscellanea.txt.in:78 msgid "Attaches the FWTS results log to the submission (to HWE)" msgstr "å°‡ FWTS çµæžœç´€éŒ„附加至測試報告中 (給 HWE)" #. summary #: ../jobs/miscellanea.txt.in:79 msgid "Attach FWTS log to submission (to HWE)" msgstr "å°‡ FWTS 紀錄附加至測試報告中 (給 HWE)" #. description #: ../jobs/miscellanea.txt.in:87 msgid "" "This will run some basic commands in-band against a BMC, verifying that IPMI " "works. Use of MAAS to deploy the system implicitly tests out-of-band BMC " "control." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:98 msgid "EFI-mode boot test" msgstr "EFI 模å¼é–‹æ©Ÿæ¸¬è©¦" #. description #: ../jobs/miscellanea.txt.in:99 msgid "" "Test to verify that the system booted in EFI mode rather than Legacy/BIOS " "mode." msgstr "æª¢æŸ¥ç³»çµ±æ˜¯å¦æ˜¯ä»¥ EFI 模å¼é–‹æ©Ÿè€Œä¸æ˜¯ Legacy/BIOS 模å¼ã€‚" #. description #: ../jobs/miscellanea.txt.in:116 msgid "" "This will gather some info about the BMC itself for diagnostic purposes. " "This will not works on non-IPMI systems like AMT and blade/sled type systems." msgstr "為了診斷需è¦ï¼Œé€™å°‡æœƒæ”¶é›†ä¸€äº›é—œæ–¼ BMC æœ¬èº«çš„è³‡è¨Šã€‚é€™åœ¨éž IPMI 的系統上將無法é‹ä½œï¼Œå¦‚ AMT èˆ‡åˆ€é‹’å¼ / 微伺æœå™¨ã€‚" #. summary #: ../jobs/miscellanea.txt.in:119 msgid "Gather BMC Identification info" msgstr "收集 BMC 識別資訊" #. description #: ../jobs/miscellanea.txt.in:129 msgid "" "Sanity check of CPU information; fails if CPU is an engineering sample" msgstr "CPU 資訊完整性檢查,若 CPU 為工程樣本測試將會失敗" #. summary #: ../jobs/miscellanea.txt.in:131 msgid "CPU sanity check" msgstr "CPU 資訊完整性檢查" #. description #: ../jobs/miscellanea.txt.in:141 msgid "Sanity check of DMI system identification data (for servers)" msgstr "DMI 系統識別資料完整性檢查 (å°ä¼ºæœå™¨)" #. summary #: ../jobs/miscellanea.txt.in:143 msgid "DMI ID sanity check (servers)" msgstr "DMI ID 完整性檢查 (伺æœå™¨)" #. description #: ../jobs/miscellanea.txt.in:153 msgid "" "Sanity check of DMI system identification data (for desktops & laptops)" msgstr "DMI 系統識別資料完整性檢查 (å°æ¡Œæ©Ÿèˆ‡ç­†é›»)" #. summary #: ../jobs/miscellanea.txt.in:155 msgid "DMI ID sanity check (desktops/laptops)" msgstr "DMI ID 完整性檢查 (桌機/筆電)" #. description #: ../jobs/miscellanea.txt.in:162 msgid "" " Determine if we need to run tests specific to portable computers that may " "not apply to desktops." msgstr " 檢查我們是å¦éœ€è¦åŸ·è¡Œé‡å°ç­†è¨˜åž‹é›»è…¦çš„æ¸¬è©¦ï¼Œé‚£äº›æ¸¬è©¦å¯èƒ½ä¸é©ç”¨æ–¼æ¡Œä¸Šåž‹é›»è…¦ã€‚" #. description #: ../jobs/miscellanea.txt.in:171 msgid "" "Test that the /var/crash directory doesn't contain anything. Lists the files " "contained within if it does, or echoes the status of the directory (doesn't " "exist/is empty)" msgstr "確定 /var/crash 資料夾中沒有任何æ±è¥¿ï¼Œè‹¥æœ‰æª”案存在則將其列出,或是回傳資料夾狀態 (ä¸å­˜åœ¨ / 空的)" #. description #: ../jobs/miscellanea.txt.in:178 msgid "" "Checks that a specified sources list file contains the requested repositories" msgstr "檢查指定的軟體來æºåˆ—è¡¨æª”æ¡ˆä¸­æ˜¯å¦æœ‰åŒ…嫿‰€éœ€çš„軟體庫" #. summary #: ../jobs/miscellanea.txt.in:187 msgid "PXE verification test of device {__index__} ({interface})" msgstr "å° {__index__} ({interface}) è£ç½®çš„ PXE 驗證測試" #. purpose #: ../jobs/miscellanea.txt.in:189 msgid "" "This test will verify that you have attempted to PXE boot this machine from " "the network device {__index__} ({interface})." msgstr "æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ‚¨æ˜¯å¦æœ‰é€éŽ {__index__} ({interface}) 網路è£ç½®å˜—è©¦å°æœ¬æ©Ÿå™¨é€²è¡Œ PXE 開機。" #. steps #: ../jobs/miscellanea.txt.in:192 msgid "" "1. Prior to running this test, you should have attempted to boot this system " "via PXE on every Network Port available." msgstr "1. 在進行本測試å‰ï¼Œæ‚¨æ‡‰è©²æœ‰å˜—試在本機器上é€éŽæ‰€æœ‰å¯ç”¨çš„乙太網路孔上進行 PXE 開機。" #. verification #: ../jobs/miscellanea.txt.in:194 msgid "" "1. Select Yes if you successfully used PXE boot this system using the NIC " "{interface} 2. Select No if you did not attempt to PXE boot this system " "using the NIC {interface} 3. Select No if you attempted to PXE boot via " "{interface} and it failed for some reason." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:206 msgid "" "Remote Shared IPMI verification test for device {__index__} ({interface})" msgstr "å° {__index__} ({interface}) è£ç½®çš„é ç«¯å…±äº« IPMI 驗證測試" #. purpose #: ../jobs/miscellanea.txt.in:208 msgid "" "This test will verify that you have attempted IPMI control of this machine " "from the network device {__index__} ({interface})." msgstr "" #. steps #: ../jobs/miscellanea.txt.in:210 msgid "" "1. Prior to running this test, you should have configured and used IPMI to " "power this machine off and on using every Network Port available." msgstr "" #. verification #: ../jobs/miscellanea.txt.in:212 msgid "" "1. Select Yes if you successfully used IPMI to remotely power this system " "off and on using the NIC {interface} 2. Select No if you did not attempt to " "use IPMI to remotely power this sytem off and on via the NIC {interface} 3. " "Select No if you attempted to use IPMI to remotely power off/on this system " "via {interface} and it failed for some reason." msgstr "" #. description #: ../jobs/miscellanea.txt.in:220 msgid "" "PURPOSE:\n" " Some systems do not share IPMI over all NICs but instead have a dedicated " "management port directly connected to the BMC. This test verifies that you " "have used that port for remote IPMI connections and actions.\n" "STEPS:\n" " 1. Prior to running the test, you should have configured and used the " "Dedicated Management Port to remotely power off/on this sytem.\n" "VERIFICATION:\n" " Skip this test if this system ONLY uses shared management/ethernet ports OR " "if this system does not have a BMC (Management Console)\n" " 1. Select Yes if you successfully used IPMI to remotely power this system " "off and on using the dedicated management port.\n" " 2. Select No if you attempted to use the dedicated management port to " "remotely power this system off/on and it failed for some reason." msgstr "" #. description #: ../jobs/miscellanea.txt.in:236 msgid "Run Firmware Test Suite (fwts) oops tests." msgstr "執行 Firmware Test Suite (fwts) oops 測試。" #. description #: ../jobs/miscellanea.txt.in:248 msgid "Attaches the FWTS oops results log to the submission" msgstr "å°‡ FWTS oops æ¸¬è©¦çµæžœé™„加到測試報告中" #. description #: ../jobs/miscellanea.txt.in:261 msgid "" "If system was installed via MAAS from a cert server, the MAAS version used " "should be contained in /etc/installed-by-maas" msgstr "" "如果系統是é€éŽ cert 伺æœå™¨ä»¥ MAAS 安è£çš„,其所使用的 MAAS 版本資訊將會在 /etc/installed-by-maas 檔案中" #. summary #: ../jobs/miscellanea.txt.in:262 msgid "Gets the version of MAAS used to deploy the SUT" msgstr "å–得佈署此待測機器用的 MAAS 版本資訊" #. description #: ../jobs/miscellanea.txt.in:270 msgid "" "Retrieve the computer's make and model for easier access than digging " "through the dmidecode output." msgstr "å–得電腦的製造商與型號,如此一來å–得此資料會比之後在 dmidecode 輸出中挖掘來得容易" #. summary #: ../jobs/miscellanea.txt.in:271 msgid "Retrieve the computer's make and model" msgstr "å–得本電腦的製造商與型號å稱" #. description #: ../jobs/mobilebroadband.txt.in:29 msgid "" "Creates a mobile broadband connection for a GSM based modem and checks the " "connection to ensure it's working. " msgstr "為 GSM 數據機建立行動寬頻網路連線並檢查連線以確定它é‹ä½œæ­£å¸¸ " #. description #: ../jobs/mobilebroadband.txt.in:58 msgid "" "Creates a mobile broadband connection for a CDMA based modem and checks the " "connection to ensure it's working." msgstr "為 CDMA 數據機建立行動寬頻網路連線並檢查連線以確定它é‹ä½œæ­£å¸¸" #. purpose #: ../jobs/mobilebroadband.txt.in:102 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of device {__index__} ({interface})." msgstr "" #. summary #: ../jobs/monitor.txt.in:3 msgid "VGA port test" msgstr "VGA 視訊輸出埠測試" #. summary #: ../jobs/monitor.txt.in:23 msgid "DVI port test" msgstr "DVI 視訊輸出埠測試" #. summary #: ../jobs/monitor.txt.in:43 msgid "DisplayPort test" msgstr "DisplayPort 視訊輸出埠測試" #. summary #: ../jobs/monitor.txt.in:63 msgid "HDMI port test" msgstr "HDMI 視訊輸出埠測試" #. summary #: ../jobs/monitor.txt.in:83 msgid "S-VIDEO port test" msgstr "S-VIDEO 視訊輸出埠測試" #. summary #: ../jobs/monitor.txt.in:103 msgid "RCA port test" msgstr "RCA 視訊輸出埠測試" #. summary #: ../jobs/monitor.txt.in:123 msgid "Multi-monitor test" msgstr "多螢幕測試" #. summary #: ../jobs/monitor.txt.in:146 msgid "Monitor power-saving test" msgstr "螢幕çœé›»åŠŸèƒ½æ¸¬è©¦" #. summary #: ../jobs/monitor.txt.in:166 msgid "Screen dimming test" msgstr "螢幕亮度é™ä½Žæ¸¬è©¦" #. summary #: ../jobs/monitor.txt.in:189 msgid "Thunderbolt monitor test" msgstr "Thunderbolt 螢幕測試" #. description #: ../jobs/networking.txt.in:7 msgid "Tests whether the system has a working Internet connection." msgstr "測試系統網路連線是å¦é‹ä½œæ­£å¸¸ã€‚" #. summary #: ../jobs/networking.txt.in:16 msgid "Network Information of device {__index__} ({interface})" msgstr "{__index__} ({interface}) è£ç½®çš„網路資訊" #. description #: ../jobs/networking.txt.in:20 msgid "" "PURPOSE:\n" " This test will check the network device {__index__} ({interface})\n" "STEPS:\n" " 1. Click \"Test\" to verify the information for this network device\n" "VERIFICATION:\n" " Is this correct?" msgstr "" "目的:\n" " 本測試將會檢查 {__index__} ({interface}) 網路è£ç½®\n" "步驟:\n" " 1. 按下「測試ã€ä¾†æª¢è¦–此網路è£ç½®çš„資訊\n" "檢查:\n" " 這資訊正確嗎?" #. description #: ../jobs/networking.txt.in:32 msgid "" "PURPOSE:\n" " This test will check that a DSL modem can be configured and connected.\n" "STEPS:\n" " 1. Connect the telephone line to the computer\n" " 2. Click on the Network icon on the top panel.\n" " 3. Select \"Edit Connections\"\n" " 4. Select the \"DSL\" tab\n" " 5. Click on \"Add\" button\n" " 6. Configure the connection parameters properly\n" " 7. Click \"Test\" to verify that it's possible to establish an HTTP " "connection\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" "目的:\n" " 本測試將會檢查 DSL 數據機能被設定並建立連線\n" "步驟:\n" " 1. 將電話線連接至電腦\n" " 2. 在上方狀態列中點擊網路圖示\n" " 3. 鏿“‡ã€Œç·¨è¼¯é€£ç·šã€\n" " 4. 鏿“‡ã€ŒDSLã€é ç±¤\n" " 5. é»žæ“Šã€Œæ–°å¢žã€æŒ‰éˆ•\n" " 6. å°‡é€£ç·šåƒæ•¸è¨­å®šå¥½\n" " 7. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•來檢查是å¦èƒ½å¤ å»ºç«‹ HTTP 連線\n" "檢查:\n" " æ˜¯å¦æœ‰é€šçŸ¥å‡ºç¾ï¼Œé€£ç·šæ˜¯å¦å·²æˆåŠŸå»ºç«‹ï¼Ÿ" #. description #: ../jobs/networking.txt.in:50 msgid "" "Automated test case to verify availability of some system on the network " "using ICMP ECHO packets." msgstr "é©—è­‰æŸäº›ç³»çµ±åœ¨ç¶²è·¯ä¸Šèƒ½å¦ä½¿ç”¨ ICMP 回應å°åŒ…的自動化測試。" #. description #: ../jobs/networking.txt.in:57 ../jobs/peripheral.txt.in:40 msgid "" "Automated test case to make sure that it's possible to download files " "through HTTP" msgstr "驗證是å¦èƒ½é€éŽ HTTP 下載檔案的自動化測試。" #. description #: ../jobs/networking.txt.in:66 msgid "Test to see if we can sync local clock to an NTP server" msgstr "測試能å¦è®“本機的時間與 NTP 伺æœå™¨åŒæ­¥ã€‚" #. description #: ../jobs/networking.txt.in:73 msgid "" "Verify that an installation of checkbox-server on the network can be reached " "over SSH." msgstr "驗證一個在網路上已安è£å¥½çš„ checkbox-server å¯ä»¥é€éŽ SSH 連接。" #. description #: ../jobs/networking.txt.in:80 msgid "Try to enable a remote printer on the network and print a test page." msgstr "嘗試啓動網路é ç«¯å°è¡¨æ©Ÿä¸¦ä¸”å°å‡ºæ¸¬è©¦é ã€‚" #. description #: ../jobs/optical.txt.in:6 msgid "Detects optical drives (CD/DVD) attached to the system." msgstr "" #. description #: ../jobs/optical.txt.in:18 msgid "Optical read test." msgstr "å…‰ç¢Ÿè®€å–æ¸¬è©¦ã€‚" #. summary #: ../jobs/optical.txt.in:40 msgid "Automated optical read test." msgstr "è‡ªå‹•åŒ–çš„å…‰ç¢Ÿè®€å–æ¸¬è©¦ã€‚" #. description #: ../jobs/optical.txt.in:45 msgid "" "Automated test to read a data CD/DVD and ensure the optical drive works " "properly." msgstr "" #. description #: ../jobs/optical.txt.in:66 msgid "CD write test." msgstr "CD 寫入測試。" #. description #: ../jobs/optical.txt.in:96 msgid "Automated CD write test" msgstr "自動化的 CD 寫入測試" #. description #: ../jobs/optical.txt.in:117 msgid "" "PURPOSE:\n" " This test will check your CD audio playback capabilities\n" "STEPS:\n" " 1. Insert an audio CD in your optical drive\n" " 2. When prompted, launch the Music Player\n" " 3. Locate the CD in the display of the Music Player\n" " 4. Select the CD in the Music Player\n" " 5. Click the Play button to listen to the music on the CD\n" " 6. Stop playing after some time\n" " 7. Right click on the CD icon and select \"Eject Disc\"\n" " 8. The CD should be ejected\n" " 9. Close the Music Player\n" "VERIFICATION:\n" " Did all the steps work?" msgstr "" "目的:\n" " 本測試將會檢查您的音樂 CD 播放功能\n" "步驟:\n" " 1. æ’入一張音樂 CD 到您的光碟機中\n" " 2. ç•¶æç¤ºå‡ºç¾æ™‚,啟動音樂撥放器\n" " 3. 在音樂播放器中找到該 CD\n" " 4. åœ¨éŸ³æ¨‚æ’­æ”¾å™¨ä¸­é¸æ“‡è©² CD\n" " 5. 按下播放鈕來從該 CD 播放音樂\n" " 6. æ–¼ä¸€å°æ®µæ™‚é–“å¾Œåœæ­¢æ’­æ”¾\n" " 7. 在 CD 圖示上按å³éµä¸¦é¸æ“‡ã€Œé€€å‡ºå…‰ç¢Ÿã€\n" " 8. CD 應該會被退出來\n" " 9. 關閉音樂撥放器\n" "檢查:\n" " å„個步驟是å¦éƒ½æ­£å¸¸é‹ä½œï¼Ÿ" #. description #: ../jobs/optical.txt.in:139 msgid "DVD write test." msgstr "DVD 寫入測試。" #. description #: ../jobs/optical.txt.in:169 msgid "Automated DVD write test." msgstr "自動化的 DVD 寫入測試。" #. description #: ../jobs/optical.txt.in:193 msgid "" "PURPOSE:\n" " This test will check your DVD playback capabilities\n" "STEPS:\n" " 1. Insert a DVD that contains any movie in your optical drive\n" " 2. Click \"Test\" to play the DVD in Totem\n" "VERIFICATION:\n" " Did the file play?" msgstr "" "目的:\n" " 本測試將會檢查您的 DVD 播放功能\n" "步驟:\n" " 1. æ’å…¥è£æœ‰ä»»ä½•電影的 DVD 到您的光碟機中\n" " 2. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來在 Totem 中播放該 DVD\n" "檢查:\n" " 該電影檔有被播放出來嗎?" #. description #: ../jobs/optical.txt.in:207 msgid "Automated Blu-Ray read test." msgstr "自動化的è—å…‰å…‰ç¢Ÿè®€å–æ¸¬è©¦ã€‚" #. description #: ../jobs/optical.txt.in:235 msgid "Automated Blu-Ray write test." msgstr "自動化的è—光光碟寫入測試。" #. description #: ../jobs/panel_clock_test.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that the desktop clock displays the correct date " "and time\n" "STEPS:\n" " 1. Check the clock in the upper right corner of your desktop.\n" "VERIFICATION:\n" " Is the clock displaying the correct date and time for your timezone?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ¡Œé¢æ™‚é˜æ˜¯å¦æœ‰é¡¯ç¤ºæ­£ç¢ºçš„æ—¥æœŸèˆ‡æ™‚é–“\n" "步驟:\n" " 1. 檢查您桌é¢å³ä¸Šè§’的時é˜\n" "檢查:\n" " æ™‚é˜æœ‰æ­£ç¢ºé¡¯ç¤ºæ‚¨ç›®å‰æ™‚å€çš„æ—¥æœŸèˆ‡æ™‚間嗎?" #. description #: ../jobs/panel_clock_test.txt.in:18 msgid "" "PURPOSE:\n" " This test will verify that the desktop clock synchronizes with the system " "clock.\n" "STEPS:\n" " 1. Commence the test and verify the clock moves ahead by 1 hour.\n" " Note: It may take a minute or so for the clock to refresh\n" " 2. Right click on the clock, then click on \"Time & Date Settings...\"\n" " 3. Ensure that your clock application is set to manual.\n" " 4. Change the time 1 hour back\n" " 5. Close the window and reboot\n" "VERIFICATION:\n" " Is your system clock displaying the correct date and time for your " "timezone?" msgstr "" #. description #: ../jobs/panel_reboot.txt.in:3 msgid "" "PURPOSE:\n" " This test will verify that you can reboot your system from the desktop " "menu\n" "STEPS:\n" " 1. Click the Gear icon in the upper right corner of the desktop and click " "on \"Shut Down\"\n" " 2. Click the \"Restart\" button on the left side of the Shut Down dialog\n" " 3. After logging back in, restart System Testing and it should resume " "here\n" "VERIFICATION:\n" " Did your system restart and bring up the GUI login cleanly?" msgstr "" "目的:\n" " 本測試將會檢查您是å¦èƒ½å¾žæ¡Œé¢é¸å–®ä¸­é‡æ–°å•Ÿå‹•您的系統\n" "步驟:\n" " 1. é»žé¸æ¡Œé¢å³ä¸Šè§’çš„é½’è¼ªåœ–ç¤ºï¼Œä¸¦é¸æ“‡ã€Œé—œæ©Ÿã€\n" " 2. 在關機å°è©±æ¡†ä¸­é»žé¸å·¦å´çš„ã€Œé‡æ–°å•Ÿå‹•ã€æŒ‰éˆ•\n" " 3. ç™»å…¥å¾Œï¼Œè«‹é‡æ–°å•Ÿå‹•本系統測試工具,它應該會從這裡繼續測試\n" "檢查:\n" " æ‚¨çš„ç³»çµ±æ˜¯å¦æœ‰é‡æ–°å•Ÿå‹•,並正常出ç¾åœ–形介é¢çš„登入畫é¢å—Žï¼Ÿ" #. description #: ../jobs/peripheral.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that a network printer is usable\n" "STEPS:\n" " 1. Make sure that a printer is available in your network\n" " 2. Click on the Gear icon in the upper right corner and then click on " "Printers\n" " 3. If the printer isn't already listed, click on Add\n" " 4. The printer should be detected and proper configuration values should " "be displayed\n" " 5. Print a test page\n" "VERIFICATION:\n" " Were you able to print a test page to the network printer?" msgstr "" "目的:\n" " 本測試將會檢查網路å°è¡¨æ©Ÿæ˜¯å¦å¯ç”¨\n" "步驟:\n" " 1. 確定在您的網路上有å¯ç”¨çš„å°è¡¨æ©Ÿ\n" " 2. é»žé¸æ¡Œé¢å³ä¸Šè§’çš„é½’è¼ªåœ–ç¤ºï¼Œä¸¦é¸æ“‡å°è¡¨æ©Ÿ\n" " 3. 如果該å°è¡¨æ©Ÿä¸åœ¨åˆ—表中,請點é¸ã€Œæ–°å¢žã€\n" " 4. 該å°è¡¨æ©Ÿæ‡‰è©²è¦å¯ä»¥è¢«åµæ¸¬åˆ°ï¼Œä¸¦é¡¯ç¤ºæ­£ç¢ºçš„設定值\n" " 5. åˆ—å°æ¸¬è©¦é é¢\n" "檢查:\n" " 您å¯ä»¥é€éŽç¶²è·¯å°è¡¨æ©Ÿåˆ—å°æ¸¬è©¦é å—Žï¼Ÿ" #. description #: ../jobs/peripheral.txt.in:20 msgid "" "PURPOSE:\n" " This test will verify that a USB DSL or Mobile Broadband modem works\n" "STEPS:\n" " 1. Connect the USB cable to the computer\n" " 2. Right click on the Network icon in the panel\n" " 3. Select 'Edit Connections'\n" " 4. Select the 'DSL' (for ADSL modem) or 'Mobile Broadband' (for 3G modem) " "tab\n" " 5. Click on 'Add' button\n" " 6. Configure the connection parameters properly\n" " 7. Notify OSD should confirm that the connection has been established\n" " 8. Select Test to verify that it's possible to establish an HTTP " "connection\n" "VERIFICATION:\n" " Was the connection correctly established?" msgstr "" "目的:\n" " 本測試將會檢查 USB DSL æˆ–è¡Œå‹•å¯¬é »ç¶²è·¯æ•¸æ“šæ©Ÿæ˜¯å¦æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. å°‡ USB 線連接至電腦\n" " 2. 在上方狀態列中å³éµé»žé¸ç¶²è·¯åœ–示\n" " 3. 鏿“‡ã€Œç·¨è¼¯é€£ç·šã€\n" " 4. 鏿“‡ 「DSLã€(ADSL 數據機) 或「行動寬頻網路ã€(3G 網路數據機) é ç±¤\n" " 5. 點é¸ã€Œæ–°å¢žã€æŒ‰éˆ•\n" " 6. é©ç•¶çš„è¨­å®šé€£ç·šåƒæ•¸\n" " 7. æç¤ºè¦–窗應該會告訴您已建立連線\n" " 8. 點é¸ã€Œæ¸¬è©¦ã€ä¾†æª¢æŸ¥æ˜¯å¦èƒ½å¤ å»ºç«‹ HTTP 連線\n" "檢查:\n" " é€£ç·šæ˜¯å¦æœ‰æ­£ç¢ºå»ºç«‹ï¼Ÿ" #. description #: ../jobs/power-management.txt.in:5 msgid "" "PURPOSE:\n" " This test will check your system shutdown/booting cycle.\n" "STEPS:\n" " 1. Shutdown your machine.\n" " 2. Boot your machine.\n" " 3. Repeat steps 1 and 2 at least 5 times.\n" "VERIFICATION:\n" " Did the system shutdown and rebooted correctly?" msgstr "" "目的:\n" " 本測試將會檢查您的系統關機 / 開機循環\n" "步驟:\n" " 1. 關掉您的電腦\n" " 2. 啟動您的電腦\n" " 3. é‡è¤‡æ­¥é©Ÿ 1 與 2 至少五次\n" "檢查:\n" " 系統有正確的關機與啟動嗎?" #. description #: ../jobs/power-management.txt.in:21 msgid "Test ACPI Wakealarm (fwts wakealarm)" msgstr "測試 ACPI å–šé†’é¬§é˜ (fwts wakealarm)" #. description #: ../jobs/power-management.txt.in:31 msgid "Attach log from fwts wakealarm test" msgstr "å°‡ fwts wakealarm æ¸¬è©¦çš„çµæžœé™„加至測試報告中" #. description #: ../jobs/power-management.txt.in:48 msgid "" "PURPOSE:\n" " This test will check the system's ability to power-off and boot.\n" "STEPS:\n" " 1. Select \"Test\" to begin.\n" " 2. The machine will shut down.\n" " 3. Power the machine back on.\n" " 4. After rebooting, wait for the test prompts to inform you that the test " "is complete.\n" " 5. Once the test has completed, restart checkbox and select 'Re-run' when " "prompted.\n" "VERIFICATION:\n" " If the machine successfully shuts down and boots, select 'Yes', otherwise,\n" " select 'No'." msgstr "" "目的:\n" " 本測試將會檢查系統是å¦èƒ½é—œæ©Ÿä¸¦é–‹æ©Ÿ\n" "步驟:\n" " 1. 點é¸ã€Œé–‹å§‹ã€æŒ‰éˆ•來進行本測試\n" " 2. 此機器將會關機\n" " 3. 請手動啟動此機器\n" " 4. 釿–°é–‹æ©Ÿå¾Œï¼Œè«‹ç­‰å€™æç¤ºå‘Šè¨´æ‚¨æ¸¬è©¦å·²å®Œæˆ\n" " 5. 當測試完æˆå¾Œï¼Œè«‹é‡æ–°å•Ÿå‹• Checkbox 䏦鏿“‡ã€ŒRe-runã€\n" "檢查:\n" " 如果此機器æˆåŠŸé—œæ©Ÿä¸¦é–‹æ©Ÿï¼Œè«‹é¸æ“‡ã€ŒYesã€ï¼Œåä¹‹è«‹é¸æ“‡ã€ŒNoã€" #. description #: ../jobs/power-management.txt.in:68 msgid "" "This will attach any logs from the power-management/poweroff test to the " "results." msgstr "這將會把 power-management/poweroff 測試所產生的所有紀錄檔附加至測試報告中。" #. description #: ../jobs/power-management.txt.in:82 msgid "" "PURPOSE:\n" " This test will check the system's ability to reboot cleanly.\n" "STEPS:\n" " 1. Select \"Test\" to begin.\n" " 2. The machine will reboot.\n" " 3. After rebooting, wait for the test prompts to inform you that the test " "is complete.\n" " 4. Once the test has completed, restart checkbox and select Re-Run when " "prompted.\n" "VERIFICATION:\n" " If the machine successfully reboots, select Yes then select Next." msgstr "" "目的:\n" " 本測試將會檢查系統是å¦èƒ½æ­£å¸¸çš„釿–°å•Ÿå‹•\n" "步驟:\n" " 1. 點é¸ã€Œé–‹å§‹ã€æŒ‰éˆ•來進行本測試\n" " 2. æ­¤æ©Ÿå™¨å°‡æœƒé‡æ–°å•Ÿå‹•\n" " 3. 釿–°é–‹æ©Ÿå¾Œï¼Œè«‹ç­‰å€™æç¤ºå‘Šè¨´æ‚¨æ¸¬è©¦å·²å®Œæˆ\n" " 4. 當測試完æˆå¾Œï¼Œè«‹é‡æ–°å•Ÿå‹• Checkbox 䏦鏿“‡ã€ŒRe-runã€\n" "檢查:\n" " 如果此機器æˆåŠŸé‡æ–°å•Ÿå‹•ï¼Œè«‹é¸æ“‡ã€ŒYesã€ï¼Œåä¹‹è«‹é¸æ“‡ã€ŒNoã€" #. description #: ../jobs/power-management.txt.in:100 msgid "" "This will attach any logs from the power-management/reboot test to the " "results." msgstr "這將會把 power-management/reboot 測試所產生的所有紀錄檔附加至測試報告中。" #. description #: ../jobs/power-management.txt.in:108 msgid "" "PURPOSE:\n" " This test will check your lid sensors.\n" "STEPS:\n" " 1. Close your laptop lid.\n" "VERIFICATION:\n" " Does closing your laptop lid cause your system to suspend?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ‚¨çš„èž¢å¹•ä¸Šè“‹åµæ¸¬å™¨\n" "步驟:\n" " 1. 將您的筆電螢幕上蓋關起來\n" "檢查:\n" " 關起您的筆電螢幕上蓋會讓您的系統進入暫åœç‹€æ…‹å—Žï¼Ÿ" #. description #: ../jobs/power-management.txt.in:127 msgid "" "PURPOSE:\n" " This test will check your lid sensors\n" "STEPS:\n" " 1. Click \"Test\".\n" " 2. Close and open the lid.\n" "VERIFICATION:\n" " Did the screen turn off while the lid was closed?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ‚¨çš„èž¢å¹•ä¸Šè“‹åµæ¸¬å™¨\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•\n" " 2. å°‡æ‚¨çš„ç­†é›»èž¢å¹•ä¸Šè“‹é—œèµ·ä¾†å†æ‰“é–‹\n" "檢查:\n" " 在您關上筆電螢幕上蓋時,螢幕有被關閉嗎?" #. description #: ../jobs/power-management.txt.in:147 msgid "" "PURPOSE:\n" " This test will check your lid sensors.\n" "STEPS:\n" " 1. Click \"Test\".\n" " 2. Close the lid.\n" " 3. Wait 5 seconds with the lid closed.\n" " 4. Open the lid.\n" "VERIFICATION:\n" " Did the system resume when the lid was opened?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ‚¨çš„ç­†é›»èž¢å¹•ä¸Šè“‹åµæ¸¬å™¨\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•\n" " 2. 關上筆電螢幕上蓋\n" " 3. 等五秒\n" " 4. 打開筆電螢幕上蓋\n" "檢查:\n" " 在打開筆電螢幕上蓋後,系統有從暫åœç‹€æ…‹ä¸­æ¢å¾©å—Žï¼Ÿ" #. description #: ../jobs/power-management.txt.in:168 msgid "" "Verify that the Real-time clock (RTC) device functions properly, if present." msgstr "è‹¥æœ‰å¯¦æ™‚æ™‚é˜ (RTC) è£ç½®çš„è©±ï¼Œæª¢æŸ¥å…¶æ˜¯å¦æ­£å¸¸é‹ä½œã€‚" #. description #: ../jobs/power-management.txt.in:176 msgid "" "Check to see if CONFIG_NO_HZ is set in the kernel (this is just a simple " "regression check)" msgstr "檢查 CONFIG_NO_HZ æ˜¯å¦æœ‰è¢«è¨­å®šåœ¨å…§æ ¸ä¸­ (é€™åªæ˜¯ä¸€å€‹ç°¡å–®çš„退化檢查)" #. description #: ../jobs/power-management.txt.in:184 msgid "" "PURPOSE:\n" " This test will ensure that the AC is unplugged for the battery drain " "tests to run.\n" "STEPS:\n" " 1. Unplug laptop from AC.\n" "VERIFICATION:\n" " Was the laptop unplugged from AC?" msgstr "" "目的:\n" " 本測試將會確ä¿ç‚ºäº†èƒ½å¤ é€²è¡Œé›»æ± è€—電測試,電æºä¾›æ‡‰å™¨å·²è¢«ç§»é™¤\n" "步驟:\n" " 1. 將電æºä¾›æ‡‰å™¨å¾žç­†é›»ä¸Šç§»é™¤\n" "檢查:\n" " é›»æºä¾›æ‡‰å™¨æœ‰å¾žç­†é›»ä¸Šç§»é™¤å—Žï¼Ÿ" #. description #: ../jobs/power-management.txt.in:198 msgid "" "Checks the battery drain during idle. Reports time and capacity until empty " "and capacity." msgstr "" #. description #: ../jobs/power-management.txt.in:209 msgid "" "Checks the battery drain while watching a movie. Reports time and capacity " "until empty. Requires MOVIE_VAR to be set." msgstr "" #. description #: ../jobs/power-management.txt.in:222 msgid "" "Checks the battery drain during suspend. Reports time and capacity until " "empty." msgstr "" #. description #: ../jobs/power-management.txt.in:231 msgid "" "PURPOSE:\n" " This test will ensure that the AC is plugged back in after the battery.\n" " tests\n" "STEPS:\n" " 1. Plug laptop into AC.\n" "VERIFICATION:\n" " Was the laptop plugged into AC?" msgstr "" "目的:\n" " 本測試將會確ä¿åœ¨é›»æ± æ¸¬è©¦å¾Œé›»æºä¾›æ‡‰å™¨æœ‰è¢«æŽ¥å›žç­†é›»\n" "步驟:\n" " 1. 將電æºä¾›æ‡‰å™¨æŽ¥ä¸Šç­†é›»\n" "檢查:\n" " é›»æºä¾›æ‡‰å™¨æœ‰æŽ¥ä¸Šç­†é›»å—Žï¼Ÿ" #. description #: ../jobs/power-management.txt.in:246 msgid "" "PURPOSE:\n" " This test will verify that your system can successfully reboot.\n" "STEPS:\n" " 1. Select 'Test' to initiate a system reboot.\n" " 2. When the grub boot menu is displayed, boot into Ubuntu (Or allow the\n" " system to automatically boot on its own).\n" " 3. Once the system has restarted, log in and restart checkbox-" "certification-server.\n" " 4. Select 'Re-Run' to return to this test.\n" " 5. Select 'Yes' to indicate the test has passed if the system rebooted\n" " successfully, otherwise, select 'No' to indicate there was a problem.\n" "VERIFICATION:\n" " Did the system reboot correctly?" msgstr "" "目的:\n" " 本測試將會檢查系統是å¦èƒ½æ­£å¸¸çš„釿–°å•Ÿå‹•\n" "步驟:\n" " 1. 鏿“‡ã€Œæ¸¬è©¦ã€ä¾†é€²è¡Œç³»çµ±é‡æ–°å•Ÿå‹•\n" " 2. ç•¶ grub 開機é¸å–®å‡ºç¾æ™‚,請開進 Ubuntu (或讓系統自己自動開進去)\n" " 3. ç•¶ç³»çµ±é‡æ–°å•Ÿå‹•å¾Œï¼Œè«‹ç™»å…¥ä¸¦é‡æ–°å•Ÿå‹• checkbox-certification-server\n" " 4. 鏿“‡ã€ŒRe-Runã€ä»¥å›žåˆ°æœ¬æ¸¬è©¦\n" " 5. 若系統æˆåŠŸé‡æ–°å•Ÿå‹•ï¼Œè«‹é¸æ“‡ã€ŒYesã€ä¾†è¡¨ç¤ºæ¸¬è©¦é€šéŽã€‚åä¹‹è«‹é¸æ“‡ã€ŒNoã€ä¾†è¡¨ç¤ºæœ‰å•題\n" "檢查:\n" " ç³»çµ±æœ‰æ­£ç¢ºçš„é‡æ–°å•Ÿå‹•嗎?" #. description #: ../jobs/power-management.txt.in:266 msgid "" "PURPOSE:\n" " This test will check your system shutdown/booting cycle\n" "STEPS:\n" " 1. Select 'Test' to initiate a system shutdown.\n" " 2. Power the system back on.\n" " 3. From the grub menu, boot into the Xen Hypervisor.\n" " 4. When the system has restarted, log in and restart checkbox-" "certification-server.\n" " 5. Select 'Re-Run' to return to this test.\n" " 6. Select 'Yes' to indicate the test has passed if the machine shut " "down\n" " successfully otherwise, Select 'No' to indicate there was a problem.\n" "VERIFICATION:\n" " Did the system shutdown and boot correctly?" msgstr "" "目的:\n" " 本測試將會檢查您的系統關機 / 開機循環\n" "步驟:\n" " 1. 鏿“‡ã€Œæ¸¬è©¦ã€ä¾†é€²è¡Œç³»çµ±é—œæ©Ÿ\n" " 2. 啟動您的電腦\n" " 3. ç•¶ grub 開機é¸å–®å‡ºç¾æ™‚,請開進 Xen Hypervisor\n" " 4. ç•¶ç³»çµ±é‡æ–°å•Ÿå‹•å¾Œï¼Œè«‹ç™»å…¥ä¸¦é‡æ–°å•Ÿå‹• checkbox-certification-server\n" " 5. 鏿“‡ã€ŒRe-Runã€ä»¥å›žåˆ°æœ¬æ¸¬è©¦\n" " 6. 若系統æˆåŠŸé—œæ©Ÿï¼Œè«‹é¸æ“‡ã€ŒYesã€ä¾†è¡¨ç¤ºæ¸¬è©¦é€šéŽã€‚åä¹‹è«‹é¸æ“‡ã€ŒNoã€ä¾†è¡¨ç¤ºæœ‰å•題\n" "檢查:\n" " 系統有正確的關機與啟動嗎?" #. description #: ../jobs/rendercheck.txt.in:7 msgid "" "Runs all of the rendercheck test suites. This test can take a few minutes." msgstr "執行所有 rendercheck 測試套件,本測試將會需è¦å¹¾åˆ†é˜çš„æ™‚間。" #. description #: ../jobs/rendercheck.txt.in:15 msgid "Attach log from rendercheck tests" msgstr "å°‡ rendercheck 測試紀錄附加至測試報告中" #. description #: ../jobs/server-services.txt.in:5 msgid "Verifies that sshd is running." msgstr "ç¢ºèª sshd 正在執行中。" #. description #: ../jobs/server-services.txt.in:11 msgid "Verifies that Print/CUPs server is running." msgstr "確èªåˆ—å° / CUPs 伺æœå™¨æ­£åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/server-services.txt.in:20 msgid "Verifies that DNS server is running and working." msgstr "ç¢ºèª DNS 伺æœå™¨æ˜¯å¦æ­£å¸¸é‹ä½œä¸­ã€‚" #. description #: ../jobs/server-services.txt.in:29 msgid "Verifies that Samba server is running." msgstr "ç¢ºèª Samba 伺æœå™¨æ­£åœ¨åŸ·è¡Œä¸­ã€‚" #. description #: ../jobs/server-services.txt.in:40 msgid "Verifies that the LAMP stack is running (Apache, MySQL and PHP)." msgstr "ç¢ºèª LAMP stack 正在執行中 (Apacheã€MySQL 與 PHP)。" #. description #: ../jobs/server-services.txt.in:47 msgid "Verifies that Tomcat server is running and working." msgstr "ç¢ºèª Tomcat 伺æœå™¨æ˜¯å¦æ­£å¸¸é‹ä½œä¸­ã€‚" #. description #: ../jobs/smoke.txt.in:4 msgid "Check success result from shell test case" msgstr "自 shell 測試項目檢查測試æˆåŠŸçš„çµæžœ" #. description #: ../jobs/smoke.txt.in:10 msgid "Check failed result from shell test case" msgstr "自 shell æ¸¬è©¦é …ç›®æª¢æŸ¥æ¸¬è©¦å¤±æ•—çš„çµæžœ" #. description #: ../jobs/smoke.txt.in:17 msgid "Check job is executed when dependency succeeds" msgstr "æª¢æŸ¥ç•¶æœ‰æ»¿è¶³ç›¸ä¾æ€§æ™‚ï¼Œæ¸¬è©¦å·¥ä½œå¦æœ‰è¢«åŸ·è¡Œ" #. description #: ../jobs/smoke.txt.in:24 msgid "Check job result is set to uninitiated when dependency fails" msgstr "æª¢æŸ¥ç•¶ç›¸ä¾æ€§ç„¡æ³•è¢«æ»¿è¶³æ™‚ï¼Œæ¸¬è©¦å·¥ä½œçµæžœæ˜¯å¦æœ‰è¢«è¨­å®šç‚ºæœªé–‹å§‹" #. description #: ../jobs/smoke.txt.in:31 msgid "Check job is executed when requirements are met" msgstr "æª¢æŸ¥ç•¶è¦æ±‚æœ‰è¢«æ»¿è¶³æ™‚ï¼Œæ¸¬è©¦å·¥ä½œå¦æœ‰è¢«åŸ·è¡Œ" #. description #: ../jobs/smoke.txt.in:38 msgid "" "Check job result is set to \"not required on this system\" when requirements " "are not met" msgstr "æª¢æŸ¥ç•¶è¦æ±‚ä¸è¢«æ»¿è¶³æ™‚ï¼Œæ¸¬è©¦å·¥ä½œçµæžœæ˜¯å¦æœ‰è¢«è¨­å®šç‚ºã€Œä¸éœ€è¦åœ¨æ­¤ç³»çµ±ä¸ŠåŸ·è¡Œã€" #. description #: ../jobs/smoke.txt.in:43 msgid "" "PURPOSE:\n" " This test checks that the manual plugin works fine\n" "STEPS:\n" " 1. Add a comment\n" " 2. Set the result as passed\n" "VERIFICATION:\n" " Check that in the report the result is passed and the comment is " "displayed" msgstr "" #. description #: ../jobs/stress.txt.in:9 msgid "" "Simulate high system load using the 'stress' tool to exercise the CPU for " "several hours. The test is considered passed if the system does not freeze " "or abend." msgstr "" #. description #: ../jobs/stress.txt.in:33 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "hibernate/resume for 30 cycles" msgstr "" "目的:\n" " 本自動化壓力測試將會強迫系統進行 30 次的休眠 / 喚醒循環" #. description #: ../jobs/stress.txt.in:42 msgid "" "Automated check of the 30 cycle hibernate log for errors detected by fwts." msgstr "自動檢查 30 次休眠紀錄中由 fwts æ‰€åµæ¸¬åˆ°çš„錯誤。" #. description #: ../jobs/stress.txt.in:50 msgid "Attaches the log from the 30 cycle Hibernate/Resume test if it exists" msgstr "è‹¥ 30 次休眠 / 喚醒循環的測試紀錄存在,則將其附加到測試報告中" #. description #: ../jobs/stress.txt.in:63 msgid "" "This is an automated stress test that will run a sequence of '30 " "suspend/resume cycles and one reboot' 3 times." msgstr "" #. description #: ../jobs/stress.txt.in:83 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "suspend/resume for 30 cycles." msgstr "" "目的:\n" " 本自動化壓力測試將會強迫系統進行 30 æ¬¡çš„æš«åœ / æ¢å¾©å¾ªç’°ã€‚" #. description #: ../jobs/stress.txt.in:93 msgid "" "Automated check of the 30 cycle suspend log for errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:102 msgid "" "Automated check of the '30 cycle suspend and 1 reboot times 3' logs for " "errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:111 msgid "Attaches the log from the 30 cycle Suspend/Resume test if it exists" msgstr "è‹¥ 30 æ¬¡æš«åœ / æ¢å¾©å¾ªç’°çš„æ¸¬è©¦ç´€éŒ„存在,則將其附加到測試報告中" #. description #: ../jobs/stress.txt.in:120 msgid "" "Attaches the log from the '30 cycle Suspend/Resume and one reboot times 3' " "test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:156 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "hibernate/resume for 250 cycles" msgstr "" "目的:\n" " 本自動化壓力測試將會強迫系統進行 250 次的休眠 / 喚醒循環。" #. description #: ../jobs/stress.txt.in:165 msgid "" "Attaches the log from the 250 cycle Hibernate/Resume test if it exists" msgstr "è‹¥ 250 次休眠 / 喚醒循環的測試紀錄存在,則將其附加到測試報告中" #. description #: ../jobs/stress.txt.in:183 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "suspend/resume for 250 cycles." msgstr "" "目的:\n" " 本自動化壓力測試將會強迫系統進行 250 æ¬¡çš„æš«åœ / æ¢å¾©å¾ªç’°ã€‚" #. description #: ../jobs/stress.txt.in:192 msgid "Attaches the log from the 250 cycle Suspend/Resume test if it exists" msgstr "è‹¥ 250 æ¬¡æš«åœ / æ¢å¾©å¾ªç’°çš„æ¸¬è©¦ç´€éŒ„存在,則將其附加到測試報告中" #. description #: ../jobs/stress.txt.in:200 ../jobs/suspend.txt.in:388 msgid "" "Checks the sleep times to ensure that a machine suspends and resumes within " "a given threshold" msgstr "檢查系統進入暫åœç‹€æ…‹ä»¥åŠç”±æš«åœç‹€æ…‹æ¢å¾©çš„æ‰€éœ€æ™‚間是å¦ç¬¦åˆçµ¦å®šçš„門檻值" #. description #: ../jobs/stress.txt.in:214 msgid "Stress reboot system (100 cycles)" msgstr "é‡é–‹æ©Ÿå£“力測試 (100次)" #. description #: ../jobs/stress.txt.in:237 msgid "Stress reboot system (30 cycles)" msgstr "é‡é–‹æ©Ÿå£“力測試 (30次)" #. description #: ../jobs/stress.txt.in:259 msgid "Stress poweroff system (100 cycles)" msgstr "關機壓力測試 (100次)" #. description #: ../jobs/stress.txt.in:282 msgid "Stress poweroff system (30 cycles)" msgstr "關機壓力測試 (30次)" #. description #: ../jobs/stress.txt.in:299 msgid "Check logs for the stress reboot (30 cycles) test case" msgstr "檢查é‡é–‹æ©Ÿå£“力測試 (30次) 的紀錄" #. description #: ../jobs/stress.txt.in:316 msgid "Check logs for the stress poweroff (30 cycles) test case" msgstr "檢查關機壓力測試 (30次) 的紀錄" #. description #: ../jobs/stress.txt.in:333 msgid "Check logs for the stress reboot (100 cycles) test case" msgstr "檢查é‡é–‹æ©Ÿå£“力測試 (100次) 的紀錄" #. description #: ../jobs/stress.txt.in:350 msgid "Check logs for the stress poweroff (100 cycles) test case" msgstr "檢查關機壓力測試 (100次) 的紀錄" #. description #: ../jobs/stress.txt.in:370 msgid "Run the graphics stress test. This test can take a few minutes." msgstr "執行圖形壓力測試,本測試將會需è¦å¹¾åˆ†é˜çš„æ™‚間。" #. description #: ../jobs/stress.txt.in:380 msgid "Attaches the graphics stress results to the submission." msgstr "å°‡åœ–å½¢å£“åŠ›æ¸¬è©¦çš„çµæžœé™„加至測試報告中。" #. description #: ../jobs/stress.txt.in:388 msgid "Runs a test that transfers 100 10MB files 3 times to usb." msgstr "åŸ·è¡Œä¸‰æ¬¡å‚³é€ 100 個 10MB 的檔案至 USB 的測試。" #. summary #: ../jobs/stress.txt.in:394 msgid "Stress test for SDHC card" msgstr "å° SDHC 記憶å¡çš„壓力測試" #. description #: ../jobs/stress.txt.in:397 msgid "" "PURPOSE:\n" " This test will transfers 100 10MB files 3 times to a SDHC card, to\n" " check that the systems media card reader can transfer large amounts\n" " of data.\n" "STEPS:\n" " 1. Insert a SDHC card into the reader and then Click \"Test\".\n" " If a file browser opens up, you can safely close it.\n" " 2. Do not remove the device during this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒé€²è¡Œä¸‰æ¬¡ï¼Œå‚³é€ 100 個大å°ç‚º 10MB 的檔案至 SDHC 記憶å¡ï¼Œä¾†ç¢ºå®šç³»çµ±ä¸Šçš„記憶å¡è®€å¡æ©Ÿèƒ½å¤ å‚³è¼¸å¤§é‡çš„資料\n" "步驟:\n" " 1. æ’入一張 SDHC 記憶å¡åˆ°è®€å¡æ©Ÿä¸­å¾ŒæŒ‰ä¸‹ã€Œæ¸¬è©¦ã€éˆ•\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " 2. 在測試進行中請勿移除è£ç½®\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/stress.txt.in:417 msgid "Ping ubuntu.com and restart network interfaces 100 times" msgstr "Ping ubuntu.com 䏦釿–°å•Ÿå‹•ç¶²è·¯ä»‹é¢ 100 次" #. description #: ../jobs/stress.txt.in:431 msgid "" "PURPOSE:\n" " To make sure that stressing the wifi hotkey does not cause applets to " "disappear from the panel or the system to lock up\n" "STEPS:\n" " 1. Log in to desktop\n" " 2. Press wifi hotkey at a rate of 1 press per second and slowly increase " "the speed of the tap, until you are tapping as fast as possible\n" "VERIFICATION:\n" " Verify the system is not frozen and the wifi and bluetooth applets are " "still visible and functional" msgstr "" "目的:\n" " 確定å°ç„¡ç·šç¶²è·¯ç†±éµé€²è¡Œå£“åŠ›æ¸¬è©¦ä¸æœƒå°Žè‡´ç¶²è·¯å·¥å…·å¾žç‹€æ…‹åˆ—消失或系統死當\n" "步驟:\n" " 1. 登入桌é¢ç’°å¢ƒ\n" " 2. 以一秒一次的頻率按下無線網路熱éµï¼Œä¸¦æ…¢æ…¢çš„加快按的速度直到您按下熱éµåˆ°é”您能按的最快速度\n" "檢查:\n" " 檢查系統沒有死當,而網路與è—牙å°å·¥å…·é‚„在上方狀態列中並且ä»ç„¶èƒ½å¤ é‹ä½œ" #. description #: ../jobs/suspend.txt.in:6 msgid "Record the current network before suspending." msgstr "在暫åœå‰ç´€éŒ„ç•¶å‰ç¶²è·¯è¨­å®šã€‚" #. summary #: ../jobs/suspend.txt.in:19 msgid "Record the current resolution before suspending." msgstr "在暫åœä¹‹å‰ç´€éŒ„ç›®å‰çš„è§£æžåº¦ã€‚" #. description #: ../jobs/suspend.txt.in:38 msgid "Record mixer settings before suspending." msgstr "在暫åœå‰ç´€éŒ„混音器設定。" #. description #: ../jobs/suspend.txt.in:45 msgid "Verify that all the CPUs are online before suspending" msgstr "在暫åœå‰ç¢ºèª CPU 都在線上狀態" #. description #: ../jobs/suspend.txt.in:52 msgid "" "Dumps memory info to a file for comparison after suspend test has been run" msgstr "å°‡è¨˜æ†¶é«”è³‡è¨Šå­˜å…¥æª”æ¡ˆä»¥ä¾¿åœ¨æš«åœæ¸¬è©¦å¾Œé€²è¡Œæ¯”較。" #. description #: ../jobs/suspend.txt.in:63 msgid "" "This test disconnects all connections and then connects to the wireless " "interface. It then checks the connection to confirm it's working as expected." msgstr "本測試將會先切斷所有網路連線後å†é€£åˆ°ç„¡ç·šç¶²è·¯ï¼Œç„¶å¾Œæª¢æŸ¥é€£ç·šä»¥ç¢ºèªå…¶é‹ä½œä¸€å¦‚é æœŸã€‚" #. description #: ../jobs/suspend.txt.in:100 msgid "" "This test executes iperf connection performance/stability against device " "{__index__} ({interface}) before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:128 msgid "" "This test executes iperf connection performance/stability against the " "broadband device found on the system before suspend." msgstr "本測試將會在暫åœå‰å°ç³»çµ±ä¸Šæ‰€æœ‰æ‰¾åˆ°çš„寬頻è£ç½®åŸ·è¡Œ iperf é€£ç·šè¡¨ç¾ / 穩定度測試。" #. description #: ../jobs/suspend.txt.in:232 msgid "" "PURPOSE:\n" " This test will check suspend and resume\n" "STEPS:\n" " 1. Click \"Test\" and your system will suspend for about 30 - 60 " "seconds\n" " 2. Observe the Power LED to see if it blinks or changes color during " "suspend\n" " 3. If your system does not wake itself up after 60 seconds, please press " "the power button momentarily to wake the system manually\n" " 4. If your system fails to wake at all and must be rebooted, restart " "System Testing after reboot and mark this test as Failed\n" "VERIFICATION:\n" " Did your system suspend and resume correctly?\n" " (NOTE: Please only consider whether the system successfully suspended " "and resumed. Power/Suspend LED verification will occur after this test is " "completed.)" msgstr "" "目的:\n" " 本測試將會檢查系統的暫åœåŠæ¢å¾©åŠŸèƒ½\n" "步驟:\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•後,您的電腦將會進入暫åœç‹€æ…‹ç´„ 30 到 60 ç§’\n" " 2. è§€å¯Ÿé›»æº LED æŒ‡ç¤ºç‡ˆæ–¼æš«åœæ¨¡å¼ä¸‹æ˜¯å¦æœƒé–ƒçˆæˆ–變色\n" " 3. 若您的電腦在 60 ç§’å¾Œæ²’æœ‰è‡ªå‹•å¾žæš«åœæ¨¡å¼ä¸­æ¢å¾©ï¼Œè«‹æ‰‹å‹•按下電æºéˆ•來喚醒它\n" " 4. è‹¥æ‚¨çš„é›»è…¦å®Œå…¨ç„¡æ³•å¾žæš«åœæ¨¡å¼ä¸­æ¢å¾©ä¸¦éœ€è¦é‡æ–°é–‹æ©Ÿï¼Œè«‹åœ¨é‡æ–°é–‹æ©Ÿå¾Œé‡æ–°å•Ÿå‹•本系統測試工具並將此測項標記為「Failedã€\n" "驗證:\n" " æ‚¨çš„é›»è…¦æ˜¯å¦æœ‰æ­£å¸¸çš„進入暫åœç‹€æ…‹ä¸¦æ¢å¾©ï¼Ÿ\n" " (è¨»ï¼šè«‹ä¾æ“šé›»è…¦æ˜¯å¦æ­£å¸¸çš„æš«åœä¸¦æ¢å¾©ä¾†é¸æ“‡æ¸¬è©¦çµæžœï¼Œé—œæ–¼é›»æº LED æŒ‡ç¤ºç‡ˆçš„é©—è­‰å°‡æ–¼æœ¬æ¸¬è©¦çµæŸå¾Œé€²è¡Œã€‚)" #. summary #: ../jobs/suspend.txt.in:247 msgid "Suspend after graphics card switch tests" msgstr "在圖形å¡åˆ‡æ›æ¸¬è©¦å¾Œé€²è¡Œæš«åœæ¸¬è©¦" #. description #: ../jobs/suspend.txt.in:290 msgid "This is the automated version of suspend/suspend_advanced." msgstr "本測試為 suspend/suspend_advanced 的全自動版本。" #. summary #: ../jobs/suspend.txt.in:299 msgid "Hybrid sleep test" msgstr "" #. description #: ../jobs/suspend.txt.in:327 msgid "" "Automated check of the suspend log to look for errors reported by fwts" msgstr "自動檢查暫åœç´€éŒ„中由 fwts æ‰€åµæ¸¬åˆ°çš„錯誤" #. summary #: ../jobs/suspend.txt.in:339 msgid "Suspend log attach" msgstr "" #. summary #: ../jobs/suspend.txt.in:354 msgid "Hybrid sleep log check test" msgstr "" #. summary #: ../jobs/suspend.txt.in:370 msgid "Hybrid sleep log attach" msgstr "" #. summary #: ../jobs/suspend.txt.in:393 msgid "Suspend time check test" msgstr "" #. description #: ../jobs/suspend.txt.in:413 msgid "" "PURPOSE:\n" " Wake up by USB keyboard\n" "STEPS:\n" " 1. Enable \"Wake by USB KB/Mouse\" item in BIOS\n" " 2. Press \"Test\" to enter suspend (S3) mode\n" " 3. Press any key of USB keyboard to wake system up\n" "VERIFICATION:\n" " Did the system wake up from suspend mode when you pressed a keyboard key?" msgstr "" "目的:\n" " é€éŽ USB éµç›¤å–šé†’系統\n" "步驟:\n" " 1. 在 BIOS 中啟動「é€éŽ USB éµç›¤ / 滑鼠喚醒ã€é¸é …\n" " 2. 按下「測試ã€ä¾†é€²å…¥æš«åœç‹€æ…‹ (S3)\n" " 3. 按下 USB éµç›¤çš„ä»»æ„éµä¾†å–šé†’系統\n" "檢查:\n" " 當您按下éµç›¤ä¸Šçš„æŒ‰éµæ™‚,系統有從暫åœç‹€æ…‹ä¸­æ¢å¾©å—Žï¼Ÿ" #. description #: ../jobs/suspend.txt.in:430 msgid "" "PURPOSE:\n" " Wake up by USB mouse\n" "STEPS:\n" " 1. Enable \"Wake by USB KB/Mouse\" item in BIOS\n" " 2. Press \"Test\" to enter suspend (S3) mode\n" " 3. Press any button of USB mouse to wake system up\n" "VERIFICATION:\n" " Did the system wake up from suspend mode when you pressed the mouse " "button?" msgstr "" "目的:\n" " é€éŽ USB 滑鼠喚醒系統\n" "步驟:\n" " 1. 在 BIOS 中啟動「é€éŽ USB éµç›¤ / 滑鼠喚醒ã€é¸é …\n" " 2. 按下「測試ã€ä¾†é€²å…¥æš«åœç‹€æ…‹ (S3)\n" " 3. 按下 USB 滑鼠上的任æ„éµä¾†å–šé†’系統\n" "檢查:\n" " ç•¶æ‚¨æŒ‰ä¸‹æ»‘é¼ ä¸Šçš„æŒ‰éµæ™‚,系統有從暫åœç‹€æ…‹ä¸­æ¢å¾©å—Žï¼Ÿ" #. description #: ../jobs/suspend.txt.in:445 msgid "Test the network after resuming." msgstr "å¾žæš«åœæ¢å¾©ä¹‹å¾Œæ¸¬è©¦ç¶²è·¯ã€‚" #. description #: ../jobs/suspend.txt.in:453 msgid "" "Test to see that we have the same resolution after resuming as before." msgstr "æ¸¬è©¦çœ‹çœ‹å¾žæš«åœæ¢å¾©ä¹‹å¾Œæˆ‘們是å¦èƒ½æ“有與之å‰ç›¸åŒçš„è§£æžåº¦ã€‚" #. summary #: ../jobs/suspend.txt.in:459 msgid "" "Resolution consistency check after suspend with the valuse we got before " "suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:492 msgid "" "Verify that mixer settings after suspend are the same as before suspend." msgstr "從暫åœç‹€æ…‹æ¢å¾©å¾Œæª¢æŸ¥æ··éŸ³å™¨è¨­å®šæ˜¯å¦èˆ‡æš«åœå‰ç›¸åŒã€‚" #. description #: ../jobs/suspend.txt.in:506 msgid "" "PURPOSE:\n" " Check that system detects speakers or headphones being plugged in after " "suspend\n" "STEPS:\n" " 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack\n" " 2. Locate the speaker / headphone jack on the device under test\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug headphones or speakers into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/suspend.txt.in:528 msgid "" "PURPOSE:\n" " Check that system detects a microphone being plugged in after suspend\n" "STEPS:\n" " 1. Prepare a microphone with a standard 3.5mm jack\n" " 2. Locate the microphone jack on the device under test.\n" " Keep in mind that it may be shared with the headphone jack.\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug the microphone into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/suspend.txt.in:559 msgid "" "PURPOSE:\n" " This test will check that headphones connector works correctly after " "suspend\n" "STEPS:\n" " 1. Connect a pair of headphones to your audio device\n" " 2. Commence the test to play a sound to your audio device\n" "VERIFICATION:\n" " Did you hear a sound through the headphones and did the sound play " "without any distortion, clicks or other strange noises from your headphones?" msgstr "" #. description #: ../jobs/suspend.txt.in:585 msgid "" "PURPOSE:\n" " This test will check that recording sound using an external microphone " "works correctly after suspend\n" "STEPS:\n" " 1. Connect a microphone to your microphone port\n" " 2. Click \"Test\", then speak into the external microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/suspend.txt.in:608 msgid "Verify that all CPUs are online after resuming." msgstr "å¾žæš«åœæ¢å¾©ä¹‹å¾Œç¢ºèªæ‰€æœ‰ CPU 都在線上狀態。" #. description #: ../jobs/suspend.txt.in:625 msgid "Verify that all memory is available after resuming from suspend." msgstr "檢查從暫åœç‹€æ…‹æ¢å¾©å¾Œæ˜¯å¦æ‰€æœ‰è¨˜æ†¶é«”皆å¯ç”¨ã€‚" #. description #: ../jobs/suspend.txt.in:634 msgid "" "PURPOSE:\n" " This test will check that the display is correct after suspend and " "resume\n" "STEPS:\n" " 1. Check that your display does not show up visual artifacts after " "resuming.\n" "VERIFICATION:\n" " Does the display work normally after resuming from suspend?" msgstr "" "目的:\n" " 本測試將會檢查顯示器從暫åœç‹€æ…‹æ¢å¾©å¾Œæ˜¯å¦æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. 從暫åœç‹€æ…‹æ¢å¾©å¾Œæª¢æŸ¥æ‚¨çš„顯示器沒有出ç¾å¤šé¤˜çš„產物\n" "檢查:\n" " 顯示器從暫åœç‹€æ…‹æ¢å¾©å¾Œæ˜¯å¦æ­£å¸¸é‹ä½œï¼Ÿ" #. summary #: ../jobs/suspend.txt.in:645 msgid "Display after suspend tests" msgstr "æš«åœå¾Œçš„顯示器測試" #. description #: ../jobs/suspend.txt.in:671 msgid "" "This test checks that the wireless interface is working after suspending the " "system. It disconnects all interfaces and then connects to the wireless " "interface and checks that the connection is working as expected." msgstr "" "本測試將會檢查無線網路介é¢åœ¨ç³»çµ±å¾žæš«åœç‹€æ…‹æ¢å¾©å¾Œæ˜¯å¦é‹ä½œæ­£å¸¸ã€‚它將會先切斷所有網路連線後å†é€£åˆ°ç„¡ç·šç¶²è·¯ï¼Œç„¶å¾Œæª¢æŸ¥é€£ç·šä»¥ç¢ºèªå…¶é‹ä½œä¸€å¦‚é æœŸã€‚" #. description #: ../jobs/suspend.txt.in:891 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11b/g protocols after the system has been suspended." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½åœ¨ç³»çµ±å¾žæš«åœç‹€æ…‹æ¢å¾©å¾ŒæŽ¡ç”¨ 802.11b/g 通訊å”定以 WPA 加密之設定連上路由器。" #. description #: ../jobs/suspend.txt.in:922 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11b/g protocols after the system has been suspended." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½åœ¨ç³»çµ±å¾žæš«åœç‹€æ…‹æ¢å¾©å¾ŒæŽ¡ç”¨ 802.11b/g 通訊å”定以無加密之設定連上路由器。" #. description #: ../jobs/suspend.txt.in:953 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11n protocol after the system has been suspended." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½åœ¨ç³»çµ±å¾žæš«åœç‹€æ…‹æ¢å¾©å¾ŒæŽ¡ç”¨ 802.11n 通訊å”定以 WPA 加密之設定連上路由器。" #. description #: ../jobs/suspend.txt.in:984 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11n protocol after the system has been suspended." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½åœ¨ç³»çµ±å¾žæš«åœç‹€æ…‹æ¢å¾©å¾ŒæŽ¡ç”¨ 802.11n 通訊å”定以無加密之設定連上路由器。" #. description #: ../jobs/suspend.txt.in:1016 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11ac protocol after the system has been suspended." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½åœ¨ç³»çµ±å¾žæš«åœç‹€æ…‹æ¢å¾©å¾ŒæŽ¡ç”¨ 802.11ac 通訊å”定以 WPA 加密之設定連上路由器。" #. description #: ../jobs/suspend.txt.in:1048 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11ac protocol after the system has been suspended." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½åœ¨ç³»çµ±å¾žæš«åœç‹€æ…‹æ¢å¾©å¾ŒæŽ¡ç”¨ 802.11ac 通訊å”定以無加密之設定連上路由器。" #. description #: ../jobs/suspend.txt.in:1085 msgid "" "This test executes iperf connection performance/stability against device " "{__index__} ({interface}) after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1113 msgid "" "This test executes iperf connection performance/stability against the " "broadband device found on the system after suspend." msgstr "測試將會在系統從暫åœç‹€æ…‹æ¢å¾©å¾Œå°æ‰€æœ‰æ‰¾åˆ°çš„寬頻è£ç½®åŸ·è¡Œ iperf é€£ç·šè¡¨ç¾ / 穩定度測試。" #. description #: ../jobs/suspend.txt.in:1143 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1183 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1223 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11n protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1263 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11n protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1303 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1343 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1379 msgid "" "This test grabs the hardware address of the bluetooth adapter after suspend " "and compares it to the address grabbed before suspend." msgstr "本測試會在系統從暫åœç‹€æ…‹æ¢å¾©å¾Œå°‡åµæ¸¬åˆ°çš„è—牙硬體ä½ç½®èˆ‡æš«åœå‰å–å¾—çš„ä½ç½®ä½œæ¯”較。" #. description #: ../jobs/suspend.txt.in:1437 msgid "" "This is an automated Bluetooth file transfer test. It sends an image to the " "device specified by the BTDEVADDR environment variable." msgstr "這是一個全自動的è—牙檔案傳輸測試,它將會傳é€ä¸€å€‹å½±åƒæª”到環境設定中由 BTDEVADDR 變數所指定的è£ç½®ä¸Šã€‚" #. description #: ../jobs/suspend.txt.in:1495 msgid "" "This is an automated Bluetooth test. It emulates browsing on a remote device " "specified by the BTDEVADDR environment variable." msgstr "這是一個全自動的è—牙測試,它將會模擬ç€è¦½ç’°å¢ƒè¨­å®šä¸­ç”± BTDEVADDR 變數所指定的è£ç½®ã€‚" #. description #: ../jobs/suspend.txt.in:1553 msgid "" "This is an automated Bluetooth test. It receives the given file from a " "remote host specified by the BTDEVADDR environment variable" msgstr "這是一個全自動的è—牙測試,它將會從環境設定中由 BTDEVADDR 變數所指定的è£ç½®ä¸ŠæŽ¥æ”¶ä¸€å€‹æª”案。" #. description #: ../jobs/suspend.txt.in:1563 msgid "" "PURPOSE:\n" " This test will cycle through the detected display modes\n" "STEPS:\n" " 1. Click \"Test\" and the display will cycle trough the display modes\n" "VERIFICATION:\n" " Did your display look fine in the detected mode?" msgstr "" "目的:\n" " 本測試將會ä¾åºæ¸¬è©¦æ‰€æœ‰åµæ¸¬åˆ°çš„螢幕解æžåº¦\n" "步驟:\n" " 1. 按下「測試ã€å¾Œæ‚¨çš„螢幕將會ä¾åºåˆ‡æ›è‡³å„個解æžåº¦è¨­å®š\n" "檢查:\n" " 您的螢幕在å„個解æžåº¦ä¸‹é‹ä½œæ­£å¸¸å—Žï¼Ÿ" #. summary #: ../jobs/suspend.txt.in:1575 msgid "Cycle resolution after suspend tests" msgstr "" #. description #: ../jobs/suspend.txt.in:1600 msgid "" "This test will check to make sure supported video modes work after a suspend " "and resume. This is done automatically by taking screenshots and uploading " "them as an attachment." msgstr "本測試將會檢查系統自暫åœç‹€æ…‹æ¢å¾©å¾Œæ‰€æœ‰æ”¯æ´çš„螢幕解æžåº¦æ˜¯å¦ä»èƒ½æ­£å¸¸é‹ä½œã€‚此自動測試將會擷å–螢幕畫é¢ä¸¦ä»¥é™„加檔之形å¼ä¸Šå‚³ã€‚" #. description #: ../jobs/suspend.txt.in:1610 msgid "" "This attaches screenshots from the suspend/cycle_resolutions_after_suspend " "test to the results submission." msgstr "這將會把 suspend/cycle_resolutions_after_suspend 測試中所擷å–的螢幕畫é¢é™„加至測試報告中。" #. summary #: ../jobs/suspend.txt.in:1615 msgid "" "Attach screenshots from the suspend/cycle_resolution_after_suspend test to " "the results submission." msgstr "" #. description #: ../jobs/suspend.txt.in:1657 msgid "" "This will check to make sure that your audio device works properly after a " "suspend and resume. This may work fine with speakers and onboard " "microphone, however, it works best if used with a cable connecting the audio-" "out jack to the audio-in jack." msgstr "" "本測試將會檢查系統自暫åœç‹€æ…‹æ¢å¾©å¾Œæ‚¨çš„音效è£ç½®æ˜¯å¦ä»èƒ½æ­£å¸¸é‹ä½œã€‚用內建麥克風與喇å­å³å¯é€²è¡Œæœ¬æ¸¬è©¦ï¼Œä½†å¦‚果用一æ¢éŸ³è¨Šç·šé€£æŽ¥éŸ³æºè¼¸å‡ºå­”連與音訊輸入孔的話效果會" "更好。" #. description #: ../jobs/suspend.txt.in:1664 msgid "Attaches the log from the single suspend/resume test to the results" msgstr "å°‡å–®æ¬¡æš«åœ / æ¢å¾©çš„æ¸¬è©¦ç´€éŒ„附加到測試報告中" #. description #: ../jobs/suspend.txt.in:1674 msgid "" "PURPOSE:\n" " Take a screengrab of the current screen after suspend (logged on Unity " "desktop)\n" "STEPS:\n" " 1. Take picture using USB webcam\n" "VERIFICATION:\n" " Review attachment manually later" msgstr "" "目的:\n" " æ‹æ”系統從暫åœç‹€æ…‹æ¢å¾©å¾Œçš„èž¢å¹•ç•«é¢ (登入 Unity 桌é¢)\n" "步驟:\n" " 1. 用 USB 網路æ”å½±æ©Ÿæ‹æ”ç•«é¢\n" "檢查:\n" " ç¨å€™è«‹ä»¥äººå·¥æª¢è¦–附加檔案" #. description #: ../jobs/suspend.txt.in:1687 msgid "Attaches the screenshot captured in graphics/screenshot." msgstr "å°‡ graphics/screenshot 測試項中所æ‹åˆ°çš„ç•«é¢é™„加至測試報告中。" #. description #: ../jobs/suspend.txt.in:1699 msgid "" "PURPOSE:\n" " Do some challenging operations then check for lockup on the GPU\n" "STEPS:\n" " 1. Create 2 glxgears windows and move them quickly\n" " 2. Switch workspaces with wmctrl\n" " 3. Launch an HTML5 video playback in firefox\n" "VERIFICATION:\n" " After a 60s workload, check kern.log for reported GPU errors" msgstr "" "目的:\n" " 檢查 GPU 在一些高負載的æ“ä½œå¾Œæ˜¯å¦æœ‰éŽ–æ­»çš„ç¾è±¡\n" "步驟:\n" " 1. 開啟兩個 glxgears 視窗並快速移動它們\n" " 2. 用 wmctrl 切æ›å·¥ä½œå€åŸŸ\n" " 3. 啟動 Firefox 用 HTML5 播放影片\n" "檢查\n" " 在 60 秒的負載後,檢查 kern.log æ˜¯å¦æœ‰å›žå ± GPU 錯誤" #. description #: ../jobs/suspend.txt.in:1729 msgid "" "Checks the length of time it takes to reconnect an existing wifi connection " "after a suspend/resume cycle." msgstr "æª¢æŸ¥åœ¨æš«åœ / æ¢å¾©å¾ªç’°å¾Œé‡æ–°é€£ä¸Šç¾å­˜çš„無線網路需è¦å¤šä¹…的時間。" #. description #: ../jobs/suspend.txt.in:1753 msgid "" "Checks the length of time it takes to reconnect an existing wired " "connection\n" " after a suspend/resume cycle." msgstr "æª¢æŸ¥åœ¨æš«åœ / æ¢å¾©å¾ªç’°å¾Œé‡æ–°é€£ä¸Šç¾å­˜çš„æœ‰ç·šç¶²è·¯éœ€è¦å¤šä¹…的時間。" #. description #: ../jobs/suspend.txt.in:1762 msgid "" "PURPOSE:\n" " Validate that the power LED operated the same after resuming from " "suspend\n" "STEPS:\n" " 1. Power LED should be on while device is switched on\n" "VERIFICATION:\n" " Does the power LED remain on after resuming from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„é›»æºç‹€æ…‹ LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 1. é›»æºç‹€æ…‹ LED 指示燈在系統啟動後應該會亮起\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œé›»æºç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰äº®èµ·ï¼Ÿ" #. description #: ../jobs/suspend.txt.in:1775 msgid "" "PURPOSE:\n" " Validate that the battery light shows charging status after resuming " "from suspend\n" "STEPS:\n" " 1. Let system run on battery for a while\n" " 2. Plug in AC plug\n" "VERIFICATION:\n" " Did the battery indicator LED still turn orange after resuming from " "suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„電池狀態 LED 指示燈充電狀態檢測\n" "步驟:\n" " 1. 讓您的電腦以電池é‹ä½œä¸€å°æ®µæ™‚é–“\n" " 2. 將電æºä¾›æ‡‰å™¨æŽ¥ä¸Šç­†é›»\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œå……電時電池狀態 LED æŒ‡ç¤ºç‡ˆæœ‰è®Šæˆæ©˜è‰²å—Žï¼Ÿ" #. description #: ../jobs/suspend.txt.in:1789 msgid "" "PURPOSE:\n" " Validate that the battery LED properly displays charged status after " "resuming from suspend\n" "STEPS:\n" " 1. Let system run on battery for a short time\n" " 2. Plug in AC\n" " 3. Let system run on AC\n" "VERIFICATION:\n" " Does the orange battery LED still shut off when system is fully charged " "after resuming from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„電池狀態 LED 指示燈充電完æˆç‹€æ…‹æª¢æ¸¬\n" "步驟:\n" " 1. 讓您的電腦以電池é‹ä½œä¸€å°æ®µæ™‚é–“\n" " 2. 將電æºä¾›æ‡‰å™¨æŽ¥ä¸Šç­†é›»\n" " 3. 讓您的電腦以電æºä¾›æ‡‰å™¨é‹ä½œ\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œå……é›»å®Œæˆæ™‚橘色的電池狀態 LED 指示燈有熄滅嗎?" #. description #: ../jobs/suspend.txt.in:1804 msgid "" "PURPOSE:\n" " Validate that the battery LED indicated low power after resuming from " "suspend\n" "STEPS:\n" " 1. Let system run on battery for several hours\n" " 2. Monitor battery LED carefully\n" "VERIFICATION:\n" " Does the LED light orange when battery is low after resuming from " "suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„電池狀態 LED 指示燈低電é‡ç‹€æ…‹æª¢æ¸¬\n" "步驟:\n" " 1. 讓您的電腦以電池é‹ä½œå¹¾å€‹å°æ™‚\n" " 2. 觀察電池狀態 LED 指示燈\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œé›»æ± ç‹€æ…‹ LED 指示燈在電力ä¸è¶³æ™‚æœ‰è®Šæˆæ©˜è‰²å—Žï¼Ÿ" #. description #: ../jobs/suspend.txt.in:1819 msgid "" "PURPOSE:\n" " Validate that the HDD LED still operates as expected after resuming from " "suspend\n" "STEPS:\n" " 1. Select \"Test\" to write and read a temporary file for a few seconds\n" " 2. HDD LED should blink when writing to/reading from HDD\n" "VERIFICATION:\n" " Did the HDD LED still blink with HDD activity after resuming from " "suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„硬碟狀態 LED 指示燈檢測\n" "步驟:\n" " 1.按下「測試ã€ä¾†é€²è¡Œå¹¾ç§’é˜çš„æš«å­˜æª”讀 / 寫æ“作\n" " 2. 硬碟狀態 LED 指示燈在å°ç¡¬ç¢Ÿé€²è¡Œè®€ / 寫æ“作時應該會亮起\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œé€²è¡Œæœ¬æ¸¬è©¦æ™‚硬碟狀態 LED 指示燈有亮起嗎?" #. description #: ../jobs/suspend.txt.in:1834 msgid "" "PURPOSE:\n" " Validate that the numeric keypad LED operates the same before and after " "resuming from suspend\n" "STEPS:\n" " 1. Press \"Block Num\" key to toggle numeric keypad LED\n" " 2. Click on the \"Test\" button to open a window to verify your typing\n" " 3. Type using the numeric keypad both when the LED is on and off\n" "VERIFICATION:\n" " 1. Numeric keypad LED status should toggle everytime the \"Block Num\" " "key is pressed\n" " 2. Numbers should only be entered in the keyboard verification window " "when the LED is on" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„æ•¸å­—éµç›¤ LED 指示燈檢測\n" "步驟:\n" " 1. 按下「NumLockã€éµä¾†å•Ÿå‹•數字éµç›¤ LED 指示燈\n" " 2. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•打開測試視窗來測試輸入\n" " 3. 在數字éµç›¤ LED 指示燈亮起與熄滅的狀態下用數字éµç›¤æ‰“å­—\n" "檢查:\n" " 1. 按下「NumLockã€éµæ‡‰è©²èƒ½å¤ åˆ‡æ›æ•¸å­—éµç›¤ LED 指示燈狀態\n" " 2. 僅在數字éµç›¤ LED 指示燈亮起時,æ‰èƒ½å¾žæ•¸å­—éµç›¤ä¸Šè¼¸å…¥æ•¸å­—" #. description #: ../jobs/suspend.txt.in:1850 msgid "" "PURPOSE:\n" " Validate that the Caps Lock key operates the same before and after " "resuming from suspend\n" "STEPS:\n" " 1. Press \"Block Cap Keys\" to activate/deactivate cap keys blocking\n" " 2. Cap Keys LED should be switched on/off every time the key is pressed\n" "VERIFICATION:\n" " Did the Cap Keys LED light as expected after resuming from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„大寫鎖定狀態 LED 指示燈檢測\n" "步驟:\n" " 1. 按下「CapLocksã€éµä¾†å•Ÿå‹• / 關閉大寫鎖定\n" " 2. åœ¨æŒ‰ä¸‹è©²æŒ‰éµæ™‚應該能夠切æ›å¤§å¯«éŽ–å®šç‹€æ…‹ LED 指示燈狀態\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œå¤§å¯«éŽ–å®šç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆèƒ½å¤ ä¸€å¦‚é æœŸçš„亮起嗎?" #. description #: ../jobs/suspend.txt.in:1864 msgid "" "PURPOSE:\n" " WLAN LED verification after resuming from suspend\n" "STEPS:\n" " 1. Make sure WLAN connection is established\n" " 2. WLAN LED should light\n" "VERIFICATION:\n" " Did the WLAN LED light as expected after resuming from suspend?" msgstr "" "目的::\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„無線網路狀態 LED 指示燈檢測\n" "步驟:\n" " 1. 確定已建立無線網路連線\n" " 2. 無線網路狀態 LED 指示燈應該è¦äº®èµ·\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œç„¡ç·šç¶²è·¯ç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰ä¸€å¦‚é æœŸçš„亮起?" #. description #: ../jobs/suspend.txt.in:1878 msgid "" "PURPOSE:\n" " Validate that WLAN LED shuts off when disabled after resuming from " "suspend\n" "STEPS:\n" " 1. Connect to AP\n" " 2. Use Physical switch to disable WLAN\n" " 3. Re-enable\n" " 4. Use Network-Manager to disable WLAN\n" "VERIFICATION:\n" " Did the LED turn off then WLAN is disabled after resuming from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œåœç”¨ç„¡ç·šç¶²è·¯æ™‚的無線網路狀態 LED 指示燈檢測\n" "步驟:\n" " 1. 連線至無線網路\n" " 2. 用無線網路熱éµä¾†é—œé–‰ç„¡ç·šç¶²è·¯\n" " 3. 釿–°å•Ÿå‹•無線網路\n" " 4. 用網路管ç†å“¡ä¾†é—œé–‰ç„¡ç·šç¶²è·¯\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œç•¶æ‚¨åœç”¨ç„¡ç·šç¶²è·¯æ™‚無線網路狀態 LED 指示燈有熄滅嗎?" #. description #: ../jobs/suspend.txt.in:1894 msgid "" "PURPOSE:\n" " Validate that the Bluetooth LED turns on and off when BT is " "enabled/disabled after resuming from suspend\n" "STEPS:\n" " 1. Switch bluetooth off from a hardware switch (if present)\n" " 2. Switch bluetooth back on\n" " 3. Switch bluetooth off from the panel applet\n" " 4. Switch bluetooth back on\n" "VERIFICATION:\n" " Did the bluetooth LED turn off and on twice after resuming from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œè—牙功能啟用 / åœç”¨ç‹€æ…‹ä¸‹çš„è—牙狀態 LED 指示燈測試\n" "步驟:\n" " 1. 若有è—牙控制éµçš„話,請用它將è—牙功能關閉\n" " 2. å°‡è—ç‰™é‡æ–°æ‰“é–‹\n" " 3. 從è—牙圖示關閉è—牙功能\n" " 4. å°‡è—ç‰™é‡æ–°æ‰“é–‹\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œåœ¨é€™äº›æ­¥é©Ÿå¾Œè—牙狀態 LED æŒ‡ç¤ºç‡ˆæ˜¯å¦æœ‰äº®èµ·ã€ç†„滅兩次?" #. description #: ../jobs/suspend.txt.in:1913 msgid "" "PURPOSE:\n" " Validate that the camera LED still works as expected after resuming from " "suspend\n" "STEPS:\n" " 1. Select Test to activate camera\n" " 2. Camera LED should light for a few seconds\n" "VERIFICATION:\n" " Did the camera LED still turn on and off after resuming from suspend?" msgstr "" "目的::\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„網路æ”影機狀態 LED 指示燈檢測\n" "步驟:\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來啟動網路æ”影機\n" " 2. 網路æ”影機狀態 LED 指示燈應該會亮起幾秒é˜\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œç¶²è·¯æ”影機狀態 LED 指示燈能正常亮起嗎?" #. description #: ../jobs/suspend.txt.in:1927 msgid "" "PURPOSE:\n" " Touchpad LED verification after resuming from suspend\n" "STEPS:\n" " 1. Click on the touchpad button or press key combination to " "enable/disable touchpad button\n" " 2. Slide your finger on the touchpad\n" "VERIFICATION:\n" " 1. Touchpad LED status should toggle everytime the button is clicked or " "the key combination is pressed\n" " 2. When the LED is on, the mouse pointer should move on touchpad usage\n" " 3. When the LED is off, the mouse pointer should not move on touchpad " "usage" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„觸控æ¿ç‹€æ…‹ LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 1. 按下觸控æ¿ç†±éµæˆ–按éµçµ„åˆä¾†å•Ÿå‹• / åœç”¨è§¸æŽ§æ¿\n" " 2. 將您的手指滑éŽè§¸æŽ§æ¿\n" "檢查:\n" " 1. 按下觸控æ¿ç†±éµæˆ–按éµçµ„åˆæ™‚應該è¦èƒ½å¤ åˆ‡æ›è§¸æŽ§æ¿ç‹€æ…‹ LED 指示燈狀態\n" " 2. 當觸控æ¿ç‹€æ…‹ LED 指示燈亮起時,游標應該è¦éš¨è‘—手指在觸控æ¿ä¸Šçš„æ“ä½œè€Œç§»å‹•\n" " 3. 當觸控æ¿ç‹€æ…‹ LED æŒ‡ç¤ºç‡ˆç†„æ»…æ™‚ï¼Œæ¸¸æ¨™æ‡‰è©²ä¸æœƒéš¨è‘—手指在觸控æ¿ä¸Šçš„æ“ä½œè€Œç§»å‹•" #. description #: ../jobs/suspend.txt.in:1943 msgid "" "PURPOSE:\n" " Validate Wireless (WLAN + Bluetooth) LED operated the same after " "resuming from suspend\n" "STEPS:\n" " 1. Make sure WLAN connection is established and Bluetooth is enabled.\n" " 2. WLAN/Bluetooth LED should light\n" " 3. Switch WLAN and Bluetooth off from a hardware switch (if present)\n" " 4. Switch them back on\n" " 5. Switch WLAN and Bluetooth off from the panel applet\n" " 6. Switch them back on\n" "VERIFICATION:\n" " Did the WLAN/Bluetooth LED light as expected after resuming from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„ç„¡ç·šè£ç½® (無線網路 + è—牙) 狀態 LED 指示燈é‹ä½œæ¸¬è©¦\n" "步驟:\n" " 1. 確定無線網路處於已連線狀態且è—牙為啟動狀態\n" " 2. 無線網路 / è—牙狀態 LED 指示燈應該è¦äº®è‘—\n" " 3. 若有無線網路與è—牙控制éµçš„話,請用它將無線網路與è—牙關閉\n" " 4. å°‡å®ƒé‡æ–°æ‰“é–‹\n" " 5. 從系統狀態列的網路圖示與è—牙圖示關閉無線網路與è—牙功能\n" " 6. å°‡å®ƒé‡æ–°æ‰“é–‹\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œç„¡ç·šè£ç½® (無線網路 + è—牙) 狀態 LED 指示燈的é‹ä½œæ˜¯å¦ä¸€å¦‚é æœŸï¼Ÿ" #. description #: ../jobs/suspend.txt.in:1962 msgid "" "PURPOSE:\n" " This test will test the brightness key after resuming from suspend\n" "STEPS:\n" " 1. Press the brightness buttons on the keyboard\n" "VERIFICATION:\n" " Did the brightness change following to your key presses after resuming " "from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„äº®åº¦èª¿æ•´éµæ¸¬è©¦\n" "步驟:\n" " 1. 按下éµç›¤ä¸Šçš„亮度調整éµ\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œèž¢å¹•äº®åº¦æ˜¯å¦æœ‰éš¨è‘—您按下的亮度調整éµè€Œæ”¹è®Šï¼Ÿ" #. description #: ../jobs/suspend.txt.in:1979 msgid "" "PURPOSE:\n" " This test will test the volume keys of your keyboard after resuming from " "suspend\n" "STEPS:\n" " Skip this test if your computer has no volume keys.\n" " 1. Click test to open a window on which to test the volume keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Did the volume change following to your key presses?" msgstr "" "目的:\n" " 系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œéµç›¤ä¸Šçš„音é‡èª¿æ•´éµæ¸¬è©¦\n" "步驟:\n" " 若您的電腦上沒有音é‡èª¿æ•´éµè«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開啟測試音é‡éµçš„視窗\n" " 2. 如果所有按éµéƒ½èƒ½æ­£å¸¸é‹ä½œï¼Œæœ¬æ¸¬è©¦å°‡æœƒè¢«è¨­å®šç‚ºé€šéŽ\n" "檢查:\n" " 這些按éµé‹ä½œæ˜¯å¦æ­£å¸¸ï¼Ÿ" #. description #: ../jobs/suspend.txt.in:1998 msgid "" "PURPOSE:\n" " This test will test the mute key of your keyboard after resuming from " "suspend\n" "STEPS:\n" " 1. Click test to open a window on which to test the mute key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Did the volume mute following your key presses?" msgstr "" "目的:\n" " 系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œéµç›¤ä¸Šçš„音é‡éœéŸ³éµæ¸¬è©¦\n" "步驟:\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開啟測試音é‡éœéŸ³éµçš„視窗\n" " 2. 如果該按éµèƒ½æ­£å¸¸é‹ä½œï¼Œæœ¬æ¸¬è©¦å°‡æœƒè¢«è¨­å®šç‚ºé€šéŽä¸”該視窗會自動關閉\n" "檢查:\n" " 此音é‡éœéŸ³éµæ˜¯å¦é‹ä½œæ­£å¸¸ï¼Ÿ" #. description #: ../jobs/suspend.txt.in:2014 msgid "" "PURPOSE:\n" " This test will test the sleep key after resuming from suspend\n" "STEPS:\n" " 1. Press the sleep key on the keyboard\n" " 2. Wake your system up by pressing the power button\n" "VERIFICATION:\n" " Did the system go to sleep after pressing the sleep key after resuming " "from suspend?" msgstr "" "目的:\n" " 系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„ç¡çœ éµæ¸¬è©¦\n" "步驟:\n" " 1. 按下éµç›¤ä¸Šçš„ç¡çœ éµ\n" " 2. 按下電æºéµä¾†å–šé†’您的電腦\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼ŒæŒ‰ä¸‹ç¡çœ éµå¾Œæœ‰è®“您的系統進入ç¡çœ ç‹€æ…‹å—Žï¼Ÿ" #. description #: ../jobs/suspend.txt.in:2031 msgid "" "PURPOSE:\n" " This test will test the battery information key after resuming from " "suspend\n" "STEPS:\n" " Skip this test if you do not have a Battery Button.\n" " 1. Click Test to begin\n" " 2. Press the Battery Info button (or combo like Fn+F3)\n" " 3: Close the Power Statistics tool if it opens\n" "VERIFICATION:\n" " Did the Battery Info key work as expected after resuming from suspend?" msgstr "" "目的:\n" " 系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„é›»æ± è³‡è¨Šéµæ¸¬è©¦\n" "步驟:\n" " 若您的電腦上沒有電池資訊éµè«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開始\n" " 2. æŒ‰ä¸‹é›»æ± è³‡è¨Šéµ (或是 Fn+F3 的組åˆ)\n" " 3: 若電力統計工具有被打開的話請關閉它\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œé›»æ± è³‡è¨Šéµæ˜¯å¦é‹ä½œæ­£å¸¸ï¼Ÿ" #. description #: ../jobs/suspend.txt.in:2048 msgid "" "PURPOSE:\n" " This test will test the wireless key after resuming from suspend\n" "STEPS:\n" " 1. Press the wireless key on the keyboard\n" " 2. Press the same key again\n" "VERIFICATION:\n" " Did the wireless go off on the first press and on again on the second " "after resuming from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„ç„¡ç·šç¶²è·¯éµæ¸¬è©¦\n" "步驟:\n" " 1. 按下éµç›¤ä¸Šçš„無線網路éµ\n" " 2. 冿Œ‰ä¸€æ¬¡è©²ç„¡ç·šç¶²è·¯éµ\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œç„¡ç·šç¶²è·¯æ˜¯å¦æœ‰åœ¨ç¬¬ä¸€æ¬¡æŒ‰ä¸‹è©²æŒ‰éµæ™‚è¢«é—œé–‰ï¼Œä¸¦åœ¨ç¬¬äºŒæ¬¡æŒ‰ä¸‹è©²æŒ‰éµæ™‚啟用?" #. description #: ../jobs/suspend.txt.in:2066 msgid "" "PURPOSE:\n" " This test will test the media keys of your keyboard after resuming from " "suspend\n" "STEPS:\n" " Skip this test if your computer has no media keys.\n" " 1. Click test to open a window on which to test the media keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected after resuming from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œéµç›¤ä¸Šçš„å¤šåª’é«”æŽ§åˆ¶éµæ¸¬è©¦\n" "步驟:\n" " 若您的電腦上沒有多媒體控制éµè«‹ç•¥éŽæœ¬æ¸¬è©¦\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開啟測試多媒體控制éµçš„視窗\n" " 2. 如果所有按éµéƒ½èƒ½æ­£å¸¸é‹ä½œï¼Œæœ¬æ¸¬è©¦å°‡æœƒè¢«è¨­å®šç‚ºé€šéŽ\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œé€™äº›æŒ‰éµé‹ä½œæ˜¯å¦æ­£å¸¸ï¼Ÿ" #. description #: ../jobs/suspend.txt.in:2085 msgid "" "PURPOSE:\n" " This test will test the super key of your keyboard after resuming from " "suspend\n" "STEPS:\n" " 1. Click test to open a window on which to test the super key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the super key work as expected after resuming from suspend?" msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œéµç›¤ä¸Šçš„ super 鵿¸¬è©¦\n" "步驟:\n" " 1. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•來開啟測試 super éµçš„視窗\n" " 2. 如果該按éµèƒ½æ­£å¸¸é‹ä½œï¼Œæœ¬æ¸¬è©¦å°‡æœƒè¢«è¨­å®šç‚ºé€šéŽä¸”該視窗會自動關閉\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œæ­¤ super 鵿˜¯å¦é‹ä½œæ­£å¸¸ï¼Ÿ" #. description #: ../jobs/suspend.txt.in:2100 msgid "" "PURPOSE:\n" " Validate that the External Video hot key is working as expected after " "resuming from suspend\n" "STEPS:\n" " 1. Plug in an external monitor\n" " 2. Press the display hot key to change the monitors configuration\n" "VERIFICATION:\n" " Check that the video signal can be mirrored, extended, displayed on " "external or onboard only, after resuming from suspend." msgstr "" "目的:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œçš„顯示切æ›ç†±éµæ¸¬è©¦\n" "步驟:\n" " 1. 接上一個外接螢幕\n" " 2. 按下顯示切æ›ç†±éµä¾†åˆ‡æ›èž¢å¹•顯示設定\n" "檢查:\n" " 在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œæª¢æŸ¥èž¢å¹•顯示模å¼å¯ä»¥åœ¨é¡åƒã€å»¶ä¼¸ã€åªé¡¯ç¤ºåœ¨å¤–接螢幕上與åªé¡¯ç¤ºåœ¨å…§å»ºèž¢å¹•上切æ›" #. description #: ../jobs/suspend.txt.in:2115 msgid "" "PURPOSE:\n" " Verify touchpad hotkey toggles touchpad functionality on and off after " "resuming from suspend\n" "STEPS:\n" " 1. Verify the touchpad is functional\n" " 2. Tap the touchpad toggle hotkey\n" " 3. Tap the touchpad toggle hotkey again\n" "VERIFICATION:\n" " Verify the touchpad has been disabled and re-enabled." msgstr "" "目的:\n" " 檢查觸控æ¿ç†±éµèƒ½å¤ åœ¨ç³»çµ±è‡ªæš«åœç‹€æ…‹æ¢å¾©å¾Œå•Ÿå‹•ã€é—œé–‰è§¸æŽ§æ¿åŠŸèƒ½\n" "步驟:\n" " 1. 檢查觸控æ¿é‹ä½œæ˜¯å¦æ­£å¸¸\n" " 2. 按下觸控æ¿ç†±éµ\n" " 3. 冿¬¡æŒ‰ä¸‹è§¸æŽ§æ¿ç†±éµ\n" "檢查:\n" " 請確èªè§¸æŽ§æ¿æ˜¯å¦æœ‰è¢«åœç”¨ã€é‡æ–°å•Ÿç”¨" #. description #: ../jobs/suspend.txt.in:2132 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB storage device after suspend and resume.\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB storage device (pen-drive/HDD).\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統在由暫åœç‹€æ…‹æ¢å¾©å¾Œæ˜¯å¦èƒ½åµæ¸¬åˆ° USB 儲存è£ç½®çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•將一個 USB 儲存è£ç½® (隨身碟 / 硬碟) æ’到 USB 埠上\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è£ç½®\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2153 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB 3.0 storage device after suspend and resume.\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB 3.0 storage device (pen-drive/HDD) " "in\n" " a USB 3.0 port. (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統在由暫åœç‹€æ…‹æ¢å¾©å¾Œæ˜¯å¦èƒ½åµæ¸¬åˆ° USB 3.0 儲存è£ç½®çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•將一個 USB 3.0 儲存è£ç½® (隨身碟 / 硬碟) æ’到 USB 3.0 埠上\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è£ç½®\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2172 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB storage device after suspend.\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統在由暫åœç‹€æ…‹æ¢å¾©å¾Œæ˜¯å¦èƒ½åµæ¸¬åˆ° USB 儲存è£ç½®çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 USB 儲存è£ç½®ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2192 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB 3.0 storage device after suspend\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB 3.0 device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統在由暫åœç‹€æ…‹æ¢å¾©å¾Œæ˜¯å¦èƒ½åµæ¸¬åˆ° USB 3.0 儲存è£ç½®çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 USB 3.0 儲存è£ç½®ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2210 msgid "" "This test is automated and executes after the " "suspend/usb_insert_after_suspend test is run." msgstr "本自動化測試將在 suspend/usb_insert_after_suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚" #. description #: ../jobs/suspend.txt.in:2223 msgid "" "This test is automated and executes after the " "suspend/usb3_insert_after_suspend test is run." msgstr "本自動化測試將在 suspend/usb3_insert_after_suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚" #. description #: ../jobs/suspend.txt.in:2234 msgid "" "This is an automated version of usb/storage-automated and assumes that the " "server has usb storage devices plugged in prior to checkbox execution. It is " "intended for servers and SRU automated testing." msgstr "" "本測試為 usb/storage-automated 的全自動版本,å‡è¨­åœ¨ Checkbox 啟動å‰ä¼ºæœå™¨ä¸Šå·²ç¶“有外接 USB " "儲存è£ç½®äº†ã€‚這是é‡å°ä¼ºæœå™¨èˆ‡ SRU 自動化測試的項目。" #. description #: ../jobs/suspend.txt.in:2248 msgid "" "This is an automated version of usb3/storage-automated and assumes that the " "server has usb 3.0 storage devices plugged in prior to checkbox execution. " "It is intended for servers and SRU automated testing." msgstr "" "本測試為 usb3/storage-automated 的全自動版本,å‡è¨­åœ¨ Checkbox 啟動å‰ä¼ºæœå™¨ä¸Šå·²ç¶“有外接 USB 3.0 " "儲存è£ç½®äº†ã€‚這是é‡å°ä¼ºæœå™¨èˆ‡ SRU 自動化測試的項目。" #. description #: ../jobs/suspend.txt.in:2260 ../jobs/usb.txt.in:219 msgid "" "This test will check that your USB 2.0 port transfers data at a minimum " "expected speed." msgstr "本測試將會檢查您的 USB 2.0 埠是å¦èƒ½å¤ è‡³å°‘以最低的期望速度進行資料傳輸。" #. description #: ../jobs/suspend.txt.in:2273 msgid "" "This test will check that your USB 3.0 port could be recognized as " "SuperSpeed USB device using xhci_hcd driver and transfers data correctly." msgstr "" "本測試將會檢查您的 USB 3.0 埠是å¦èƒ½è¢«åµæ¸¬ç‚º SuperSpeed USB è£ç½®ä¸¦ä½¿ç”¨ xhci_hcd 驅動程å¼ï¼Œä¸”能正確的進行資料傳輸。" #. description #: ../jobs/suspend.txt.in:2283 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an MMC card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an MMC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ°å¤šåª’é«”è¨˜æ†¶å¡ (MMC) çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 MMC 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2303 msgid "" "This test is automated and executes after the mediacard/mmc-insert-after-" "suspend test is run. It tests reading and writing to the MMC card after the " "system has been suspended." msgstr "" "本自動化測試將在 mediacard/mmc-insert-after-suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚它將會在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œå° MMC " "å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/suspend.txt.in:2313 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of an MMC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MMC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ° MMC å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 MMC 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2330 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED SD card after the system\n" " has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an UNLOCKED SD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ°è™•於解鎖狀態的安全數ä½å¡ (SD) çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張處於解鎖狀態的 SD 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2351 msgid "" "This test is automated and executes after the mediacard/sd-insert-after-" "suspend test is run. It tests reading and writing to the SD card after the " "system has been suspended." msgstr "" "本自動化測試將在 mediacard/sd-insert-after-suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚它將會在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œå° SD " "å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/suspend.txt.in:2361 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SD card from the systems card reader\n" " after the system has been suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ° SD å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 SD 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2379 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED SDHC media card after the\n" " system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an UNLOCKED SDHC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ°è™•於解鎖狀態的高容é‡å®‰å…¨æ•¸ä½å¡ (SDHC) çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張處於解鎖狀態的 SDHC 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2400 msgid "" "This test is automated and executes after the mediacard/sdhc-insert-after-" "suspend test is run. It tests reading and writing to the SDHC card after the " "system has been suspended." msgstr "" "本自動化測試將在 mediacard/sdhc-insert-after-suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚它將會在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œå° SDHC " "å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/suspend.txt.in:2410 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of an SDHC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SDHC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ° SDHC å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 SDHC 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2427 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a CF card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a CF card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ°Compact Flash (CF) å¡çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 CF 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2447 msgid "" "This test is automated and executes after the mediacard/cf-insert-after-" "suspend test is run. It tests reading and writing to the CF card after the " "system has been suspended." msgstr "" "本自動化測試將在 mediacard/cf-insert-after-suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚它將會在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œå° CF " "å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/suspend.txt.in:2457 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a CF card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the CF card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ° CF å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 CF 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2474 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a SDXC card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a SDXC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ°è™•於解鎖狀態的超高容é‡å®‰å…¨æ•¸ä½å¡ (SDXC) çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張處於解鎖狀態的 SDXC 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2494 msgid "" "This test is automated and executes after the mediacard/sdxc-insert-after-" "suspend test is run. It tests reading and writing to the SDXC card after the " "system has been suspended." msgstr "" "本自動化測試將在 mediacard/sdxc-insert-after-suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚它將會在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œå° SDXC " "å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/suspend.txt.in:2504 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a SDXC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SDXC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2521 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a MS card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a MS card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ°Memory Stick (MS) å¡çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 MS 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2541 msgid "" "This test is automated and executes after the mediacard/ms-insert-after-" "suspend test is run. It tests reading and writing to the MS card after the " "system has been suspended." msgstr "" "本自動化測試將在 mediacard/ms-insert-after-suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚它將會在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œå° MS " "å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/suspend.txt.in:2551 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a MS card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MS card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ° MS å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 MS 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2568 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a MSP card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a MSP card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ° Memory Stick Pro (MSP) å¡çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 MSP 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2588 msgid "" "This test is automated and executes after the mediacard/msp-insert-after-" "suspend test is run. It tests reading and writing to the MSP card after the " "system has been suspended." msgstr "" "本自動化測試將在 mediacard/msp-insert-after-suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚它將會在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œå° MSP " "å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/suspend.txt.in:2598 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a MSP card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MSP card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ° MSP å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 MSP 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2615 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a xD card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a xD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ°Extreme Digital (xD) å¡çš„æ’å…¥\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並æ’入一張 xD 記憶å¡åˆ°è®€å¡æ©Ÿä¸­\n" " 如果檔案ç€è¦½è¦–窗跳了出來,您å¯ä»¥æ”¾å¿ƒé—œé–‰å®ƒ\n" " (註:本測試將在 20 秒後逾時)\n" " 2. åœ¨æ­¤æ¸¬è©¦çµæŸå¾Œè«‹ä¸è¦ç§»é™¤è©²è¨˜æ†¶å¡\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2635 msgid "" "This test is automated and executes after the mediacard/xd-insert-after-" "suspend test is run. It tests reading and writing to the xD card after the " "system has been suspended." msgstr "" "本自動化測試將在 mediacard/xd-insert-after-suspend 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚它將會在系統由暫åœç‹€æ…‹æ¢å¾©å¾Œå° xD " "å¡é€²è¡Œè®€å¯«æ¸¬è©¦ã€‚" #. description #: ../jobs/suspend.txt.in:2645 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a xD card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the xD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查系統上的記憶å¡è®€å¡æ©Ÿæ˜¯å¦èƒ½åœ¨ç³»çµ±ç”±æš«åœç‹€æ…‹æ¢å¾©å¾Œåµæ¸¬åˆ° xD å¡çš„移除\n" "步驟:\n" " 1. 按下「測試ã€éˆ•並將 xD 記憶å¡å¾žè®€å¡æ©Ÿä¸­ç§»é™¤\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/suspend.txt.in:2665 msgid "Determine if the touchpad is still functioning after suspend/resume." msgstr "確èªè§¸æŽ§æ¿åœ¨ç³»çµ±æš«åœ / æ¢å¾©å¾Œæ˜¯å¦ä»æ­£å¸¸é‹ä½œã€‚" #. description #: ../jobs/suspend.txt.in:2675 ../jobs/touchscreen.txt.in:45 msgid "" "PURPOSE:\n" " Check touchscreen tap recognition\n" "STEPS:\n" " 1. Tap an object on the screen with finger. The cursor should jump to " "location tapped and object should highlight\n" "VERIFICATION:\n" " Does tap recognition work?" msgstr "" "目的:\n" " æª¢æŸ¥è§¸æŽ§èž¢å¹•é»žæ“Šåµæ¸¬\n" "步驟:\n" " 1. 用手指點擊螢幕上的任一物件,游標應該會跳到該處且該物件會被é¸å–\n" "檢查:\n" " è§¸æŽ§èž¢å¹•é»žæ“Šåµæ¸¬é‹ä½œæ­£å¸¸å—Žï¼Ÿ" #. description #: ../jobs/suspend.txt.in:2691 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works after suspend\n" "STEPS:\n" " 1. Click on Test to display a video capture from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the video capture?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒåœ¨ç³»çµ±å¾žæš«åœæ¢å¾©å¾Œæª¢æŸ¥å…§å»ºæ”å½±æ©Ÿæ˜¯å¦æœ‰æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•來播放 10 ç§’é˜ç”±å…§å»ºæ”å½±æ©Ÿæ‰€æ‹æ”的影片\n" "檢查:\n" " 您有看到æ”影機所æ‹åˆ°çš„影片嗎?" #. description #: ../jobs/suspend.txt.in:2710 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works after suspend\n" "STEPS:\n" " 1. Click on Test to display a still image from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the image?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒåœ¨ç³»çµ±å¾žæš«åœæ¢å¾©å¾Œæª¢æŸ¥å…§å»ºæ”å½±æ©Ÿæ˜¯å¦æœ‰æ­£å¸¸é‹ä½œ\n" "步驟:\n" " 1. é»žæ“Šã€Œæ¸¬è©¦ã€æŒ‰éˆ•來播放 10 ç§’é˜ç”±å…§å»ºæ”å½±æ©Ÿæ‰€æ‹æ”的照片\n" "檢查:\n" " 您有看到æ”影機所æ‹åˆ°ç…§ç‰‡å—Žï¼Ÿ" #. description #: ../jobs/suspend.txt.in:2727 msgid "" " Takes multiple pictures based on the resolutions supported by the camera " "and\n" " validates their size and that they are of a valid format after suspend" msgstr " 在系統從暫åœç‹€æ…‹æ¢å¾©å¾Œï¼Œæ ¹æ“šæ”影機所支æ´çš„è§£æžåº¦ä¾†æ‹æ”多張相片,並檢查它們的檔案大å°åŠç¢ºèªå…¶ç‚ºæœ‰æ•ˆçš„æ ¼å¼ã€‚" #. description #: ../jobs/suspend.txt.in:2736 msgid "Pointing device tests after suspend." msgstr "åœ¨ç³»çµ±å¾žæš«åœæ¢å¾©å¾Œçš„æŒ‡å‘è£ç½®æ¸¬è©¦ã€‚" #. summary #: ../jobs/suspend.txt.in:2754 msgid "Create click tests for pointing devices after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2759 msgid "Click tests for pointing devices after suspend." msgstr "" #. summary #: ../jobs/suspend.txt.in:2784 msgid "Compiz support tests after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2806 msgid "Check that the hardware is able to run compiz after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2807 msgid "Test Compiz support after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2812 msgid "glxgears tests after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2842 msgid "Test that glxgears works after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2843 msgid "" "PURPOSE:\n" " This test tests the basic 3D capabilities of your $product video card " "after suspend\n" "STEPS:\n" " 1. Click \"Test\" to execute an OpenGL demo. Press ESC at any time to " "close.\n" " 2. Verify that the animation is not jerky or slow.\n" "VERIFICATION:\n" " 1. Did the 3d animation appear?\n" " 2. Was the animation free from slowness/jerkiness?" msgstr "" #. summary #: ../jobs/suspend.txt.in:2856 msgid "Display video test after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2887 msgid "Test that video can be displayed after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2888 msgid "" "PURPOSE:\n" " This test will test the default display after suspend with a sample " "video\n" "STEPS:\n" " 1. Click \"Test\" to display a video test.\n" "VERIFICATION:\n" " Do you see color bars and static?" msgstr "" #. summary #: ../jobs/suspend.txt.in:2899 msgid "Driver version tests after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2920 msgid "" "Parses Xorg.0.Log and discovers the running X driver and version after " "suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2921 msgid "Test X driver/version after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2930 msgid "Run Firmware Test Suite (fwts) oops tests after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2942 msgid "Attaches the FWTS oops results log to the submission after suspend" msgstr "" #. description #: ../jobs/touchpad.txt.in:6 msgid "" "PURPOSE:\n" " Touchpad manual verification\n" "STEPS:\n" " 1. Make sure that touchpad is enabled.\n" " 2. Move cursor using the touchpad.\n" "VERIFICATION:\n" " Did the cursor move?" msgstr "" "目的:\n" " 觸控æ¿äººå·¥æª¢æŸ¥\n" "步驟:\n" " 1. 確èªè§¸æŽ§æ¿å·²å•Ÿç”¨\n" " 2. é€éŽè§¸æŽ§æ¿ç§»å‹•您的游標\n" "檢查:\n" " 游標有移動嗎?" #. description #: ../jobs/touchpad.txt.in:23 msgid "" "PURPOSE:\n" " Touchpad horizontal scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the horizontal slider by moving your finger " "right and left in the lower part of the touchpad.\n" "VERIFICATION:\n" " Could you scroll right and left?" msgstr "" "目的:\n" " è§¸æŽ§æ¿æ°´å¹³æ²å‹•檢查\n" "步驟:\n" " 1. ç•¶æº–å‚™å¥½å¾Œè«‹æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•,並將游標移動到出ç¾çš„æ¸¬è©¦è¦–窗內\n" " 2. 將手指在觸控æ¿ä¸‹ç·£å‘å·¦åŠå‘峿»‘動來檢查您是å¦å¯ä»¥ç§»å‹•æ°´å¹³æ²å‹•軸\n" "檢查:\n" " 您能夠å‘å³èˆ‡å‘å·¦æ²å‹•嗎?" #. description #: ../jobs/touchpad.txt.in:40 msgid "" "PURPOSE:\n" " Touchpad vertical scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the vertical slider by moving your finger up " "and down in the right part of the touchpad.\n" "VERIFICATION:\n" " Could you scroll up and down?" msgstr "" "目的:\n" " 觸控æ¿åž‚ç›´æ²å‹•檢查\n" "步驟:\n" " 1. ç•¶æº–å‚™å¥½å¾Œè«‹æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•,並將游標移動到出ç¾çš„æ¸¬è©¦è¦–窗內\n" " 2. 將手指在觸控æ¿å³å´å‘上åŠå‘下滑動來檢查您是å¦å¯ä»¥ç§»å‹•垂直æ²å‹•軸\n" "檢查:\n" " 您能夠å‘上與å‘下æ²å‹•嗎?" #. description #: ../jobs/touchpad.txt.in:57 msgid "" "Determine whether the touchpad is detected as a singletouch device " "automatically." msgstr "åˆ¤æ–·è§¸æŽ§æ¿æ˜¯å¦æœ‰è‡ªå‹•è¢«åµæ¸¬ç‚ºå–®é»žè§¸æŽ§è£ç½®ã€‚" #. description #: ../jobs/touchpad.txt.in:68 msgid "" "Determine whether the touchpad is detected as a multitouch device " "automatically." msgstr "åˆ¤æ–·è§¸æŽ§æ¿æ˜¯å¦æœ‰è‡ªå‹•è¢«åµæ¸¬ç‚ºå¤šé»žè§¸æŽ§è£ç½®ã€‚" #. description #: ../jobs/touchpad.txt.in:77 msgid "" "PURPOSE:\n" " Touchpad manual detection of multitouch.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Is the touchpad supposed to be multitouch?" msgstr "" "目的:\n" " 觸控æ¿å¤šé»žè§¸æŽ§äººå·¥æª¢æŸ¥\n" "步驟:\n" " 1. æª¢æŸ¥æ‚¨ç³»çµ±çš„è¦æ ¼è¡¨\n" "檢查:\n" " è§¸æŽ§æ¿æ˜¯å¤šé»žè§¸æŽ§çš„嗎?" #. description #: ../jobs/touchpad.txt.in:90 msgid "" "PURPOSE:\n" " Determine that the hot corner feature is working as expected\n" "STEPS:\n" " 1. Launch a browser.\n" " 2. Go to a website, and hover the cursor over a link.\n" " 3. Tap the upper right corner on the touchpad.\n" "VERIFICATION:\n" " Did the tap trigger a new tab to be opened?" msgstr "" #. description #: ../jobs/touchpad.txt.in:105 msgid "" "PURPOSE:\n" " Determine that the selection window function is working as expected.\n" "STEPS:\n" " 1. Open a file folder\n" " 2. Double tap and drag the cursor across several file.\n" "VERIFICATION:\n" " Did a selection window open and were several files selected?" msgstr "" "目的:\n" " 檢查視窗圈é¸åŠŸèƒ½çš„é‹ä½œæ˜¯å¦æ­£å¸¸\n" "步驟:\n" " 1. 打開一個檔案資料夾\n" " 2. 雙擊後將游標拖éŽå¤šå€‹æª”案\n" "檢查:\n" " 圈é¸è¦–窗有出ç¾è€Œä¸”æœ‰å¤šå€‹æª”æ¡ˆè¢«é¸æ“‡å—Žï¼Ÿ" #. description #: ../jobs/touchpad.txt.in:120 msgid "" "PURPOSE:\n" " Determine that the right click function is working as expected.\n" "STEPS:\n" " 1. Open a file folder\n" " 2. Hover cursor over file in folder\n" " 3. 2-touch tap.\n" "VERIFICATION:\n" " Did the right click pop up menu appear?" msgstr "" "目的:\n" " 檢查å³éµé»žæ“ŠåŠŸèƒ½çš„é‹ä½œæ˜¯å¦æ­£å¸¸\n" "步驟:\n" " 1. 打開一個檔案資料夾\n" " 2. 將游標移動到任一檔案上\n" " 3. 兩指點擊\n" "檢查:\n" " å³éµé¸å–®æœ‰å‡ºç¾å—Žï¼Ÿ" #. description #: ../jobs/touchpad.txt.in:136 msgid "" "PURPOSE:\n" " Touchpad 2-touch horizontal scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the horizontal slider by moving 2 fingers " "right and left along the touchpad.\n" "VERIFICATION:\n" " Could you scroll right and left?" msgstr "" "目的:\n" " 觸控æ¿å…©æŒ‡æ°´å¹³æ²å‹•檢查\n" "步驟:\n" " 1. ç•¶æº–å‚™å¥½å¾Œè«‹æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•,並將游標移動到出ç¾çš„æ¸¬è©¦è¦–窗內\n" " 2. 將兩隻手指在觸控æ¿ä¸Šå‘å³åŠå‘左滑動來檢查您是å¦å¯ä»¥ç§»å‹•æ°´å¹³æ²å‹•軸\n" "檢查:\n" " 您能夠å‘å³èˆ‡å‘å·¦æ²å‹•嗎?" #. description #: ../jobs/touchpad.txt.in:151 msgid "" "PURPOSE:\n" " Touchpad 2-touch vertical scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the vertical slider by moving 2 fingers up " "and down along the touchpad.\n" "VERIFICATION:\n" " Could you scroll up and down?" msgstr "" "目的:\n" " 觸控æ¿å…©æŒ‡åž‚ç›´æ²å‹•檢查\n" "步驟:\n" " 1. ç•¶æº–å‚™å¥½å¾Œè«‹æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æŒ‰éˆ•,並將游標移動到出ç¾çš„æ¸¬è©¦è¦–窗內\n" " 2. 將兩隻手指在觸控æ¿ä¸Šå‘上åŠå‘下滑動來檢查您是å¦å¯ä»¥ç§»å‹•垂直æ²å‹•軸\n" "檢查:\n" " 您能夠å‘上與å‘下æ²å‹•嗎?" #. description #: ../jobs/touchpad.txt.in:165 msgid "" "PURPOSE:\n" " Determine that the drag and drop function is working as expected.\n" "STEPS:\n" " 1. Browse to the examples folder in the current user's home directory\n" " 2. Double tap and hold to select the \"Ubuntu_Free_Culture_Showcase\" " "folder\n" " 2. Drag the selected folder to the desktop and remove finger from " "touchpad.\n" "VERIFICATION:\n" " Did a selected folder move to the desktop?" msgstr "" "目的:\n" " 檢查拖放功能的é‹ä½œæ˜¯å¦æ­£å¸¸\n" "步驟:\n" " 1. 從目å‰çš„使用者資料夾中打開 examples 資料夾\n" " 2. 在「Ubuntu_Free_Culture_Showcaseã€è³‡æ–™å¤¾ä¸Šé»žå…©ä¸‹ä¸¦æŒ‰ä½\n" " 2. 將此資料夾拖曳至桌é¢ä¸Šå¾Œå°‡æ‰‹æŒ‡å¾žè§¸æŽ§æ¿ä¸Šç§»é–‹\n" "檢查:\n" " 被é¸å–的資料夾能夠有移到桌é¢ä¸Šå—Žï¼Ÿ" #. summary #: ../jobs/touchpad.txt.in:181 msgid "Check touchpad pinch-to-zoom gesture" msgstr "檢查觸控æ¿ç¸®æ”¾æ‰‹å‹¢" #. description #: ../jobs/touchpad.txt.in:182 msgid "" "PURPOSE:\n" " Check touchpad pinch gesture for zoom\n" "STEPS:\n" " 1. Open gallery-app with an image\n" " 2. Place two fingers on the touchpad and pinch them together\n" " 3. Place two fingers on the touchpad and move them apart\n" "VERIFICATION:\n" " Does the image zoom in and out?" msgstr "" "目的:\n" " 檢查觸控æ¿ç¸®æ”¾æ‰‹å‹¢\n" "步驟:\n" " 1. æ‰“é–‹å°‡å½±åƒæª”用「gallery-appã€æ‰“é–‹\n" " 2. 將兩隻手指在觸控æ¿ä¸Šæåˆåœ¨ä¸€èµ·\n" " 3. 將兩隻手指在觸控æ¿ä¸Šä¼¸å±•開來\n" "檢查\n" " å½±åƒæœ‰è¢«ç¸®æ”¾å—Žï¼Ÿ" #. summary #: ../jobs/touchpad.txt.in:198 msgid "Check 4-finger tap gesture" msgstr "檢查四指點擊手勢" #. description #: ../jobs/touchpad.txt.in:199 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. 4-touch tap (tap with 4 fingers) anywhere on the touchpad\n" "VERIFICATION:\n" " Did the tap open the Dash?" msgstr "" "目的:\n" " 檢查四指點擊功能的é‹ä½œæ˜¯å¦æ­£å¸¸\n" "步驟:\n" " 1. 四指點擊 (ç”¨å››éš»æ‰‹æŒ‡åŒæ™‚點擊) 觸控æ¿çš„任何地方\n" "檢查:\n" " 點擊後 Dash 有被打開嗎?" #. description #: ../jobs/touchpad.txt.in:220 msgid "This test will check if your touchpad was detected as a mouse." msgstr "æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ‚¨çš„è§¸æŽ§æ¿æ˜¯å¦æœ‰è¢«åµæ¸¬ç‚ºæ»‘鼠。" #. description #: ../jobs/touchpad.txt.in:229 msgid "" "PURPOSE:\n" " Touchpad continuous move verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and continuously move your cursor within " "the borders of the displayed test window.\n" " You'll need to keep moving your finger on the touchpad for 10 seconds.\n" "VERIFICATION:\n" " Did the mouse cursor move without interruption?" msgstr "" #. name #: ../jobs/touchscreen.txt.in:3 msgid "Touchscreen" msgstr "" #. description #: ../jobs/touchscreen.txt.in:13 msgid "" "Determine whether the screen is detected as a non-touch device automatically." msgstr "è‡ªå‹•æª¢æŸ¥èž¢å¹•æ˜¯å¦æœ‰è¢«åµæ¸¬æˆéžè§¸æŽ§è£ç½®ã€‚" #. description #: ../jobs/touchscreen.txt.in:23 msgid "" "Determine whether the screen is detected as a multitouch device " "automatically." msgstr "è‡ªå‹•æª¢æŸ¥èž¢å¹•æ˜¯å¦æœ‰è¢«åµæ¸¬æˆå¤šé»žè§¸æŽ§è£ç½®ã€‚" #. description #: ../jobs/touchscreen.txt.in:31 msgid "" "PURPOSE:\n" " Touchscreen capability manual detection.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Your screen was detected as a non touch screen. Select PASS if this is " "correct." msgstr "" "目的:\n" " 觸控螢幕功能人工檢查\n" "步驟:\n" " 1. æª¢æŸ¥æ‚¨ç³»çµ±çš„è¦æ ¼è¡¨\n" "檢查:\n" " æ‚¨çš„èž¢å¹•è¢«åµæ¸¬ç‚ºéžè§¸æŽ§èž¢å¹•ï¼Œè‹¥æ­£ç¢ºè«‹é¸æ“‡ PASS" #. description #: ../jobs/touchscreen.txt.in:59 msgid "" "PURPOSE:\n" " Check touchscreen drag & drop\n" "STEPS:\n" " 1. Tap and hold an object on the desktop\n" " 2. Drag and drop the object in a different location\n" "VERIFICATION:\n" " Does drag and drop work?" msgstr "" "目的:\n" " 檢查觸控螢幕的拖放功能\n" "步驟:\n" " 1. 在桌é¢ä¸Šé»žæ“Šä¸¦æŒ‰ä½ä¸€å€‹ç‰©ä»¶\n" " 2. 將該物件拖曳並放到ä¸åŒçš„ä½ç½®\n" "檢查:\n" " 拖放功能的é‹ä½œæ˜¯å¦æ­£å¸¸ï¼Ÿ" #. summary #: ../jobs/touchscreen.txt.in:71 msgid "Check touchscreen pinch gesture for zoom" msgstr "檢查觸控螢幕縮放手勢" #. description #: ../jobs/touchscreen.txt.in:76 msgid "" "PURPOSE:\n" " Check touchscreen pinch gesture for zoom\n" "STEPS:\n" " 1. Commence the test\n" " 2. Using 2 fingers, resize the blue square until it turns green, then " "release it.\n" "VERIFICATION:\n" " Did the blue square change size following the gesture?" msgstr "" #. summary #: ../jobs/touchscreen.txt.in:88 msgid "Check touchscreen pinch gesture for rotate" msgstr "檢查觸控螢幕旋轉手勢" #. description #: ../jobs/touchscreen.txt.in:93 msgid "" "PURPOSE:\n" " Check touchscreen pinch gesture for rotate\n" "STEPS:\n" " 1. Commence the test\n" " 2. Using 2 fingers, rotate the blue square until it turns green, then " "release it.\n" "VERIFICATION:\n" " Did the blue square rotate following the gesture?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:108 msgid "" "PURPOSE:\n" " Validate that 3-touch drag is operating as expected\n" "STEPS:\n" " 1. Open a windows and bring it to the foreground\n" " 2. 3-touch the window and drag\n" "VERIFICATION:\n" " Did the window move along with the drag?" msgstr "" "目的:\n" " 檢查三指拖曳功能的é‹ä½œæ˜¯å¦æ­£å¸¸\n" "步驟:\n" " 1. æ‰“é–‹ä¸€å€‹è¦–çª—ä¸¦å°‡å…¶å¸¶åˆ°å‰æ™¯\n" " 2. 用三指點擊該視窗並拖曳\n" "檢查:\n" " 視窗有隨著拖曳手勢而移動嗎?" #. description #: ../jobs/touchscreen.txt.in:123 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. 4-touch tap anywhere on the touchscreen\n" "VERIFICATION:\n" " Did the tap open the Dash?" msgstr "" "目的:\n" " 檢查四指點擊功能的é‹ä½œæ˜¯å¦æ­£å¸¸\n" "步驟:\n" " 1. 四指點擊觸控螢幕的任何地方\n" "檢查:\n" " 點擊後 Dash 有被打開嗎?" #. description #: ../jobs/touchscreen.txt.in:137 msgid "" "PURPOSE:\n" " Validate that 3-touch tap is operating as expected\n" "STEPS:\n" " 1. Commence the test\n" " 2. Tap the screen within the test area with 3 fingers simultaneously.\n" " 3. Once 3 fingers are on the screen you should see the indicator they " "are recognized.\n" "VERIFICATION:\n" " Did you see the green circles around the three fingers?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:160 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. Commence the test\n" " 2. Tap the screen within the test area with 4 fingers simultaneously.\n" " 3. Once 4 fingers are on the screen you should see the indicator they " "are recognized.\n" "VERIFICATION:\n" " Did you see the green circles around the four fingers?" msgstr "" #. description #: ../jobs/usb.txt.in:6 msgid "Detects and shows USB devices attached to this system." msgstr "嵿¸¬ä¸¦ç§€å‡ºé€£æŽ¥åˆ°æœ¬ç³»çµ±çš„ USB è£ç½®ã€‚" #. description #: ../jobs/usb.txt.in:14 msgid "" "PURPOSE:\n" " This test will check that your system detects USB storage devices.\n" "STEPS:\n" " 1. Plug in one or more USB keys or hard drives.\n" " 2. Click on \"Test\".\n" "VERIFICATION:\n" " Were the drives detected?" msgstr "" #. description #: ../jobs/usb.txt.in:29 msgid "" "PURPOSE:\n" " This test will check that you can use a USB HID device\n" "STEPS:\n" " 1. Enable either a USB mouse or keyboard\n" " 2. For mice, perform actions such as moving the pointer, right and left " "button clicks and double clicks\n" " 3. For keyboards, commence the test to launch a small tool. Type some " "text and close the tool.\n" "VERIFICATION:\n" " Did the device work as expected?" msgstr "" #. description #: ../jobs/usb.txt.in:45 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB storage device\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB storage device\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:64 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB 3.0 storage device\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB 3.0 storage device in a USB 3.0 " "port.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:82 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB storage device\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測是將會檢查系統是å¦èƒ½æ­£ç¢ºåµæ¸¬åˆ° USB 儲存è£ç½®çš„移除\n" "步驟:\n" " 1. 點擊「測試ã€éˆ•並移除 USB è£ç½®\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/usb.txt.in:101 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB 3.0 storage device\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB 3.0 device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測是將會檢查系統是å¦èƒ½æ­£ç¢ºåµæ¸¬åˆ° USB 3.0 儲存è£ç½®çš„移除\n" "步驟:\n" " 1. 點擊「測試ã€éˆ•並移除 USB 3.0 è£ç½®\n" " (註:本測試將在 20 秒後逾時)\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/usb.txt.in:119 msgid "" "PURPOSE:\n" " This test will check your USB connection.\n" "STEPS:\n" " 1. Plug a USB HDD or thumbdrive into the computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Click \"Test\" to begin the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查您的 USB 連線\n" "步驟:\n" " 1. æ’å…¥ USB 硬碟或隨身碟到您的電腦\n" " 2. 啟動器上應該會出ç¾ä¸€å€‹åœ–示\n" " 3. 點擊「測試ã€ä¾†é€²è¡Œæ¸¬è©¦\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/usb.txt.in:139 msgid "" "PURPOSE:\n" " This test will check your USB 3.0 connection.\n" "STEPS:\n" " 1. Plug a USB 3.0 HDD or thumbdrive into a USB 3.0 port in the " "computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Click \"Test\" to begin the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" "目的:\n" " 本測試將會檢查您的 USB 3.0 連線\n" "步驟:\n" " 1. æ’å…¥ USB 3.0 硬碟或隨身碟到您電腦上的 USB 3.0 埠\n" " 2. 啟動器上應該會出ç¾ä¸€å€‹åœ–示\n" " 3. 點擊「測試ã€ä¾†é€²è¡Œæ¸¬è©¦\n" "檢查:\n" " 本測試將會進行自動檢查,請ä¸è¦ä¿®æ”¹è‡ªå‹•åˆ¤æ–·çš„æ¸¬è©¦çµæžœã€‚" #. description #: ../jobs/usb.txt.in:157 msgid "This test is automated and executes after the usb/insert test is run." msgstr "本自動化測試將在 usb/insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚" #. description #: ../jobs/usb.txt.in:169 msgid "" "This test is automated and executes after the usb3/insert test is run." msgstr "本自動化測試將在 usb3/insert 測試æˆåŠŸçµæŸå¾Œé€²è¡Œã€‚" #. description #: ../jobs/usb.txt.in:178 msgid "" "Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on " "randomly created data. It requires that a USB stick is plugged into an " "available USB port before running the certification suite." msgstr "" #. description #: ../jobs/usb.txt.in:191 msgid "" "Tests USB 3.0 ports on a system by doing write/read/compare tests on " "randomly created data. It requires that a USB stick is plugged into an " "available USB port before running the certification suite. Additionally, it " "will only work with USB sticks and ports rated for USB 3.0 speeds or faster." msgstr "" #. description #: ../jobs/usb.txt.in:200 msgid "" "PURPOSE:\n" " This test will check your USB connection.\n" "STEPS:\n" " 1. Connect a USB storage device to an external USB slot on this " "computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Confirm that the icon appears.\n" " 4. Eject the device.\n" " 5. Repeat with each external USB slot.\n" "VERIFICATION:\n" " Do all USB slots work with the device?" msgstr "" "目的:\n" " 本測試將會檢查您的 USB 連線\n" "步驟:\n" " 1. å°‡ USB 儲存è£ç½®æŽ¥åˆ°æœ¬é›»è…¦ä¸Šçš„ USB 連接埠上\n" " 2. 啟動器上應該會出ç¾ä¸€å€‹åœ–示\n" " 3. 確èªåœ–是有出ç¾\n" " 4. 將該è£ç½®é€€å‡º\n" " 5. é‡è¤‡å°æ¯å€‹ USB 連接埠進行測試\n" "檢查:\n" " 剛è£ç½®æ˜¯å¦èƒ½åœ¨æ‰€æœ‰çš„ USB 連接埠上é‹ä½œï¼Ÿ" #. description #: ../jobs/user_apps.txt.in:7 msgid "" "PURPOSE:\n" " This test will check that the update manager can find updates.\n" "STEPS:\n" " 1. Click Test to launch update-manager.\n" " 2. Follow the prompts and if updates are found, install them.\n" " 3. When Update Manager has finished, please close the app by clicking the " "Close button in the lower right corner.\n" "VERIFICATION:\n" " Did Update manager find and install updates (Pass if no updates are found,\n" " but Fail if updates are found but not installed)" msgstr "" "目的:\n" " 本測試將會檢查更新管ç†å“¡æ˜¯å¦èƒ½æ‰¾åˆ°æ›´æ–°æª”\n" "步驟:\n" " 1. 按下「測試ã€ä¾†å•Ÿå‹•更新管ç†å“¡\n" " 2. ä¾ç…§æç¤ºæ“作,如果有找到更新請進行安è£\n" " 3. 當安è£ç®¡ç†å“¡å®Œæˆå·¥ä½œå¾Œè«‹å°‡å…¶é—œé–‰\n" "檢查:\n" " 安è£ç®¡ç†å“¡æœ‰æ‰¾åˆ°ä¸¦å®‰è£æ›´æ–°å—Žï¼Ÿ(å¦‚æžœæ²’æœ‰æ‰¾åˆ°æ›´æ–°æª”è«‹é¸æ“‡ Pass,若有找到更新但無法安è£è«‹é¸æ“‡ Fail)" #. description #: ../jobs/user_apps.txt.in:24 msgid "" "PURPOSE:\n" " This test will check that the file browser can create a new folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. On the menu bar, click File -> Create Folder.\n" " 3. In the name box for the new folder, enter the name Test Folder and hit " "Enter.\n" " 4. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a new folder called Test Folder?" msgstr "" "目的:\n" " 本測試將會檢查檔案ç€è¦½å™¨èƒ½å¤ å»ºç«‹æ–°è³‡æ–™å¤¾\n" "步驟:\n" " 1. 按下「測試ã€ä¾†é–‹å•Ÿæª”案ç€è¦½å™¨\n" " 2. 在é¸å–®åˆ—點擊「檔案ã€->「建立資料夾ã€\n" " 3. 在新資料夾的å稱欄中輸入「Test Folderã€å¾ŒæŒ‰ä¸‹ Enter éµ\n" " 4. 關閉檔案ç€è¦½å™¨\n" "檢查:\n" " æ‚¨æ˜¯å¦æœ‰å€‹å為 Test Folder 的新資料夾?" #. description #: ../jobs/user_apps.txt.in:40 msgid "" "PURPOSE:\n" " This test will check that the file browser can copy a folder\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the folder called Test Folder and click on Copy.\n" " 3. Right Click on any white area in the window and click on Paste.\n" " 4. Right click on the folder called Test Folder(copy) and click Rename.\n" " 5. Enter the name Test Data in the name box and hit Enter.\n" " 6. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a folder called Test Data?" msgstr "" "目的:\n" " 本測試將會檢查檔案ç€è¦½å™¨èƒ½å¤ è¤‡è£½æ–°è³‡æ–™å¤¾\n" "步驟:\n" " 1. 按下「測試ã€ä¾†é–‹å•Ÿæª”案ç€è¦½å™¨\n" " 2. 在å為 Test Folder 的資料夾上按å³éµä¸¦é»žé¸ã€Œè¤‡è£½ã€\n" " 3. 在視窗中的任何一個空白å€åŸŸæŒ‰å³éµä¸¦é»žé¸ã€Œè²¼ä¸Šã€\n" " 4. 在å為 Test Folder(copy) 的資料夾上按å³éµä¸¦é»žé¸ã€Œé‡æ–°å‘½åã€\n" " 5. 在å稱欄中輸入「Test Dataã€å¾ŒæŒ‰ä¸‹ Enter éµ\n" " 6. 關閉檔案ç€è¦½å™¨\n" "檢查:\n" " æ‚¨æ˜¯å¦æœ‰å€‹å為 Test Data 的新資料夾?" #. description #: ../jobs/user_apps.txt.in:58 msgid "" "PURPOSE:\n" " This test will verify that the file browser can move a folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Click and drag the folder called Test Data onto the icon called Test " "Folder.\n" " 3. Release the button.\n" " 4. Double click the folder called Test Folder to open it up.\n" " 5. Close the File Browser.\n" "VERIFICATION:\n" " Was the folder called Test Data successfully moved into the folder called " "Test Folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:75 msgid "" "PURPOSE:\n" " This test will check that the file browser can create a new file.\n" "STEPS:\n" " 1. Click Select Test to open the File Browser.\n" " 2. Right click in the white space and click Create Document -> Empty " "Document.\n" " 3. Enter the name Test File 1 in the name box and hit Enter.\n" " 4. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a file called Test File 1?" msgstr "" #. description #: ../jobs/user_apps.txt.in:91 msgid "" "PURPOSE:\n" " This test will check that the file browser can copy a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the file called Test File 1 and click Copy.\n" " 3. Right click in the white space and click Paste.\n" " 4. Right click on the file called Test File 1(copy) and click Rename.\n" " 5. Enter the name Test File 2 in the name box and hit Enter.\n" " 6. Close the File Browser.\n" "VERIFICATION:\n" " Do you now have a file called Test File 2?" msgstr "" #. description #: ../jobs/user_apps.txt.in:109 msgid "" "PURPOSE:\n" " This test will check that the file browser can move a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Click and drag the file called Test File 2 onto the icon for the folder " "called Test Data.\n" " 3. Release the button.\n" " 4. Double click the icon for Test Data to open that folder up.\n" " 5. Close the File Browser.\n" "VERIFICATION:\n" " Was the file Test File 2 successfully moved into the Test Data folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:126 msgid "" "PURPOSE:\n" " This test will check that the file browser can delete a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the file called Test File 1 and click on Move To Trash.\n" " 3. Verify that Test File 1 has been removed.\n" " 4. Close the File Browser.\n" "VERIFICATION:\n" " Is Test File 1 now gone?" msgstr "" #. description #: ../jobs/user_apps.txt.in:142 msgid "" "PURPOSE:\n" " This test will check that the file browser can delete a folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the folder called Test Folder and click on Move To " "Trash.\n" " 3. Verify that the folder was deleted.\n" " 4. Close the file browser.\n" "VERIFICATION:\n" " Has Test Folder been successfully deleted?" msgstr "" #. description #: ../jobs/user_apps.txt.in:223 msgid "Common Document Types Test" msgstr "常見文件類型測試" #. description #: ../jobs/user_apps.txt.in:246 msgid "" "PURPOSE:\n" " This test will check that Firefox can render a basic web page.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view the test web page.\n" "VERIFICATION:\n" " Did the Ubuntu Test page load correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:260 msgid "" "PURPOSE:\n" " This test will check that Firefox can run flash applications. Note: this " "may\n" " require installing additional software to successfully complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view a sample Flash test.\n" "VERIFICATION:\n" " Did you see the text?" msgstr "" #. description #: ../jobs/user_apps.txt.in:275 msgid "" "PURPOSE:\n" " This test will check that Firefox can play a Flash video. Note: this may\n" " require installing additional software to successfully complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view a short flash video.\n" "VERIFICATION:\n" " Did the video play correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:292 msgid "" "PURPOSE:\n" " This test will check that Firefox can play a Quicktime (.mov) video file.\n" " Note: this may require installing additional software to successfully\n" " complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox with a sample video.\n" "VERIFICATION:\n" " Did the video play using a plugin?" msgstr "" #. description #: ../jobs/user_apps.txt.in:307 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Facebook Chat service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:322 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Google Talk (gtalk) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:337 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Jabber service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:352 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the AOL Instant Messaging (AIM) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:367 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Microsoft Network (MSN) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:382 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a POP3 account.\n" "VERIFICATION:\n" " Were you able to receive and read e-mail correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:396 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a IMAP account.\n" "VERIFICATION:\n" " Were you able to receive and read e-mail correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:410 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a SMTP account.\n" "VERIFICATION:\n" " Were you able to send e-mail without errors?" msgstr "" #. description #: ../jobs/user_apps.txt.in:424 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator.\n" "VERIFICATION:\n" " Did it launch correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:438 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Simple math functions (+,-,/,*)\n" " 2. Nested math functions ((,))\n" " 3. Fractional math\n" " 4. Decimal math\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:456 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Memory set\n" " 2. Memory reset\n" " 3. Memory last clear\n" " 4. Memory clear\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:474 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Cut\n" " 2. Copy\n" " 3. Paste\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:490 msgid "" "PURPOSE:\n" " This test checks that gedit works.\n" "STEPS:\n" " 1. Commence the test to open gedit.\n" " 2. Enter some text and save the file (make a note of the file name you " "use), then close gedit.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:505 msgid "" "PURPOSE:\n" " This test checks that gedit works.\n" "STEPS:\n" " 1. Commence the test to open gedit, and re-open the file you created " "previously.\n" " 2. Edit then save the file, then close gedit.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:519 msgid "" "PURPOSE:\n" " This test will check that Gnome Terminal works.\n" "STEPS:\n" " 1. Commence the test to open Terminal.\n" " 2. Type 'ls' and press enter. You should see a list of files and folder in " "your home directory.\n" " 3. Close the terminal window.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/virtualization.txt.in:12 msgid "" "Verifies that a KVM guest can be created and booted using an Ubuntu Server " "cloud image." msgstr "" #. summary #: ../jobs/virtualization.txt.in:15 msgid "Verify KVM VM boots" msgstr "檢查 KVM 虛擬機是å¦èƒ½é–‹æ©Ÿ" #. description #: ../jobs/virtualization.txt.in:25 msgid "Test to verify that the Xen Hypervisor is running." msgstr "檢查 Xen Hypervisor 是å¦åœ¨é‹ä½œä¸­çš„æ¸¬è©¦ã€‚" #. summary #: ../jobs/virtualization.txt.in:27 msgid "Verify Xen is running" msgstr "檢查 Xen 是å¦åœ¨é‹ä½œä¸­" #. description #: ../jobs/virtualization.txt.in:37 msgid "Test to check that a Xen domU image can boot and run on Xen on Ubuntu" msgstr "檢查 Xen domU æ˜ åƒæª”å¯ä»¥é–‹æ©Ÿä¸¦ä¸”能在 Ubuntu 上執行 Xen" #. summary #: ../jobs/virtualization.txt.in:39 msgid "Verify Xen domU can boot" msgstr "檢查 Xen domU 是å¦å¯ä»¥é–‹æ©Ÿ" #. description #: ../jobs/wireless.txt.in:22 msgid "Wireless scanning test. It scans and reports on discovered APs." msgstr "ç„¡ç·šç¶²è·¯æŽƒææ¸¬è©¦ï¼Œå®ƒå°‡æœƒé€²è¡ŒæŽƒæä¸¦å›žå ±æ‰¾åˆ°çš„ AP" #. description #: ../jobs/wireless.txt.in:32 msgid "" "This is an automated test to gather some info on the current state of your " "wireless devices. If no devices are found, the test will exit with an error." msgstr "本自動化的測試將會收集您無線網路è£ç½®çš„資訊,若沒有到任何è£ç½®ï¼Œæœ¬æ¸¬è©¦å°‡æœƒå›žå ±éŒ¯èª¤ã€‚" #. description #: ../jobs/wireless.txt.in:41 msgid "" "PURPOSE:\n" " This test will check your wireless connection.\n" "STEPS:\n" " 1. Click on the Network icon in the panel.\n" " 2. Select a network below the 'Wireless networks' section.\n" " 3. Click \"Test\" to verify that it's possible to establish an HTTP " "connection.\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" "目的:\n" " 本測試將會檢查您的無線網路連線\n" "步驟:\n" " 1. 於上方狀態列點擊網路圖示\n" " 2. 鏿“‡ã€Œç„¡ç·šç¶²è·¯ã€ä¸‹çš„網路連線\n" " 3. 點擊「測試ã€ä¾†æª¢æŸ¥æ˜¯å¦èƒ½å¤ å»ºç«‹ HTTP 連線\n" "檢查:\n" " æ˜¯å¦æœ‰é€šçŸ¥å‡ºç¾ï¼Œè€Œä¸”é€£ç·šæ˜¯å¦æœ‰æ­£ç¢ºå»ºç«‹ï¼Ÿ" #. description #: ../jobs/wireless.txt.in:77 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11b/g protocols." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½å¤ æŽ¡ç”¨ 802.11b/g 通訊å”定以 WPA 加密之設定連上路由器。" #. description #: ../jobs/wireless.txt.in:107 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11b/g protocols." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½å¤ æŽ¡ç”¨ 802.11b/g 通訊å”定以無加密之設定連上路由器。" #. description #: ../jobs/wireless.txt.in:137 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11n protocol." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½å¤ æŽ¡ç”¨ 802.11n 通訊å”定以 WPA 加密之設定連上路由器。" #. description #: ../jobs/wireless.txt.in:167 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11n protocol." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½å¤ æŽ¡ç”¨ 802.11n 通訊å”定以無加密之設定連上路由器。" #. description #: ../jobs/wireless.txt.in:198 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11ac protocol." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½å¤ æŽ¡ç”¨ 802.11ac 通訊å”定以 WPA 加密之設定連上路由器。" #. description #: ../jobs/wireless.txt.in:229 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11ac protocol." msgstr "測試本系統的無線網路è£ç½®æ˜¯å¦èƒ½å¤ æŽ¡ç”¨ 802.11ac 通訊å”定以無加密之設定連上路由器。" #. description #: ../jobs/wireless.txt.in:259 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:298 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:338 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11n protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:378 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11n protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:418 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections with the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:458 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections with the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:497 msgid "" "Tests the performance of a system's wireless connection through the iperf " "tool." msgstr "利用 iperf 工具來檢測系統的無線網路連線能力。" #. description #: ../jobs/wireless.txt.in:526 msgid "" "Tests the performance of a system's wireless connection through the iperf " "tool, using UDP packets." msgstr "利用 iperf 工具以 UDP å°åŒ…來檢測系統的無線網路連線能力。" #. description #: ../jobs/wireless.txt.in:555 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11a protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11a protocol." msgstr "" " 測試系統的無線è£ç½®èƒ½å¤ æŽ¡ç”¨ 802.11a 通訊å”定連上路由器。\n" " é€™éœ€è¦æ‚¨äº‹å…ˆå°‡è·¯ç”±å™¨è¨­å®šç‚ºåƒ…接å—使用 802.11a 無線通訊å”定的連線。" #. description #: ../jobs/wireless.txt.in:585 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11b protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11b protocol." msgstr "" " 測試系統的無線è£ç½®èƒ½å¤ æŽ¡ç”¨ 802.11b 通訊å”定連上路由器。\n" " é€™éœ€è¦æ‚¨äº‹å…ˆå°‡è·¯ç”±å™¨è¨­å®šç‚ºåƒ…接å—使用 802.11b 無線通訊å”定的連線。" #. description #: ../jobs/wireless.txt.in:605 msgid "" "This test executes iperf to generate a load on the network device " "{__index__} ({interface}) and then performs a ping test to watch for dropped " "packets and very large latency periods." msgstr "" #. description #: ../jobs/wireless.txt.in:633 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11g protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11g protocol." msgstr "" " 測試系統的無線è£ç½®èƒ½å¤ æŽ¡ç”¨ 802.11g 通訊å”定連上路由器。\n" " é€™éœ€è¦æ‚¨äº‹å…ˆå°‡è·¯ç”±å™¨è¨­å®šç‚ºåƒ…接å—使用 802.11g 無線通訊å”定的連線。" #. description #: ../jobs/wireless.txt.in:644 msgid "" "Test that the MAC80211 modules are loaded and wireless extensions are " "working." msgstr "檢查是å¦å·²è¼‰å…¥ MAC80211 æ¨¡çµ„ä¸”ç„¡ç·šç¶²è·¯ä»‹é¢æ˜¯å¦æ­£å¸¸é‹ä½œä¸­ã€‚" #. description #: ../jobs/wireless.txt.in:657 msgid "" "This test executes iwconfig requests against wireless device {__index__} " "({interface})." msgstr "æœ¬æ¸¬è©¦æœƒå° {__index__} ({interface}) 無線網路è£ç½®åŸ·è¡Œ iwconfig 指令。" #. description #: ../jobs/wireless.txt.in:666 msgid "" "PURPOSE:\n" " This test will check whether or not your driver responds to rfkill " "commands.\n" "STEPS:\n" " 1. Use the hardware switch on the side of your device to switch off " "wireless.\n" " 2. If you do not have a hardware switch disable wireless from the " "network manager icon in the panel\n" " 3. Click \"Test\" to verify that the hard or soft blocks are in place.\n" "VERIFICATION:\n" " Did the hard or soft blocks show on in the dialog?" msgstr "" "目的:\n" " æœ¬æ¸¬è©¦å°‡æœƒæª¢æŸ¥æ‚¨çš„é©…å‹•ç¨‹å¼æ˜¯å¦å° rfkill æŒ‡ä»¤æœ‰åæ‡‰\n" "步驟:\n" " 1. 用ä½åœ¨æ‚¨è£ç½®å´é‚Šçš„無線網路控制éµä¾†é—œé–‰ç„¡ç·šç¶²è·¯åŠŸèƒ½\n" " 2. 如果您沒有無線網路控制éµï¼Œè«‹ç”¨ä¸Šæ–¹ç‹€æ…‹åˆ—的網路管ç†å“¡åœ–示來åœç”¨ç„¡ç·šç¶²è·¯\n" " 3. æŒ‰ä¸‹ã€Œæ¸¬è©¦ã€æª¢æŸ¥ hard 或 soft blocks æ˜¯å¦æœ‰å‡ºç¾\n" "檢查:\n" " å°è©±æ¡†ä¸­æœ‰å‡ºç¾ hard 或 soft blocks 嗎?" #. purpose #: ../jobs/wireless.txt.in:691 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of wireless device {__index__} ({interface})." msgstr "" plainbox-provider-checkbox-0.25/po/pl.po0000664000175000017500000054562512646152433021506 0ustar sylvainsylvain00000000000000# Checkbox Provider translations # Copyright (C) 2014 Canonical # This file is distributed under the same license as the plainbox-provider-checkbox package. # Zygmunt , 2014. # msgid "" msgstr "" "Project-Id-Version: plainbox-provider-checkbox 0.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-14 14:48+0800\n" "PO-Revision-Date: 2014-06-12 07:54+0000\n" "Last-Translator: Zygmunt Krynicki \n" "Language-Team: polski <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2016-01-15 05:08+0000\n" "X-Generator: Launchpad (build 17886)\n" "Language: Polish\n" #. description #: ../jobs/audio.txt.in:9 msgid "Test to detect audio devices" msgstr "" #. description #: ../jobs/audio.txt.in:28 msgid "" "PURPOSE:\n" " This test will check that internal speakers work correctly\n" "STEPS:\n" " 1. Make sure that no external speakers or headphones are connected\n" " When testing a desktop, you can skip this test if there is no\n" " internal speaker, we will test the external output later\n" " 2. Commence the test to play a brief tone on your audio device\n" "VERIFICATION:\n" " Did you hear a tone?" msgstr "" #. summary #: ../jobs/audio.txt.in:46 msgid "HDMI audio test" msgstr "" #. summary #: ../jobs/audio.txt.in:79 msgid "DisplayPort audio test" msgstr "" #. summary #: ../jobs/audio.txt.in:112 msgid "Thunderbolt audio test" msgstr "" #. description #: ../jobs/audio.txt.in:156 msgid "" "PURPOSE:\n" " This test will check that headphones connector works correctly\n" "STEPS:\n" " 1. Connect a pair of headphones to your audio device\n" " 2. Commence the test to play a sound to your audio device\n" "VERIFICATION:\n" " Did you hear a sound through the headphones and did the sound play " "without any distortion, clicks or other strange noises from your headphones?" msgstr "" #. description #: ../jobs/audio.txt.in:182 msgid "" "PURPOSE:\n" " This test will check that recording sound using the onboard microphone " "works correctly\n" "STEPS:\n" " 1. Disconnect any external microphones that you have plugged in\n" " 2. Click \"Test\", then speak into your internal microphone\n" " 3. After a few seconds, your speech will be played back to you.\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/audio.txt.in:209 msgid "" "PURPOSE:\n" " This test will check that recording sound using an external microphone " "works correctly\n" "STEPS:\n" " 1. Connect a microphone to your microphone port\n" " 2. Click \"Test\", then speak into the external microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/audio.txt.in:235 msgid "" "PURPOSE:\n" " This test will check that a USB audio device works correctly\n" "STEPS:\n" " 1. Connect a USB audio device to your system\n" " 2. Click \"Test\", then speak into the microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back through the USB headphones?" msgstr "" #. description #: ../jobs/audio.txt.in:258 msgid "" "Play back a sound on the default output and listen for it on the default " "input." msgstr "" #. description #: ../jobs/audio.txt.in:267 msgid "" "Collect audio-related system information. This data can be used to simulate " "this computer's audio subsystem and perform more detailed tests under a " "controlled environment." msgstr "" #. description #: ../jobs/audio.txt.in:278 msgid "Attaches the audio hardware data collection log to the results." msgstr "" #. description #: ../jobs/audio.txt.in:286 msgid "" "PURPOSE:\n" " Check that the various audio channels are working properly\n" "STEPS:\n" " 1. Commence the test\n" "VERIFICATION:\n" " You should clearly hear a voice from the different audio channels" msgstr "" #. description #: ../jobs/audio.txt.in:314 msgid "" "PURPOSE:\n" " Check that external line out connection works correctly\n" "STEPS:\n" " 1. Insert cable to speakers (with built-in amplifiers) on the line out " "port\n" " 2. Open system sound preferences, 'Output' tab, select 'Line-out' on " "the connector list. Commence the test\n" " 3. On the system sound preferences, select 'Internal Audio' on the " "device list and click 'Test Speakers' to check left and right channel\n" "VERIFICATION:\n" " 1. Do you hear a sound in the speakers? The internal speakers should " "*not* be muted automatically\n" " 2. Do you hear the sound coming out on the corresponding channel?" msgstr "" #. description #: ../jobs/audio.txt.in:341 msgid "" "PURPOSE:\n" " Check that external line in connection works correctly\n" "STEPS:\n" " 1. Use a cable to connect the line in port to an external line out " "source.\n" " 2. Open system sound preferences, 'Input' tab, select 'Line-in' on the " "connector list. Commence the test\n" " 3. After a few seconds, your recording will be played back to you.\n" "VERIFICATION:\n" " Did you hear your recording?" msgstr "" #. description #: ../jobs/audio.txt.in:359 msgid "" "PURPOSE:\n" " Check that system detects speakers or headphones being plugged in\n" "STEPS:\n" " 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack\n" " 2. Locate the speaker / headphone jack on the device under test\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug headphones or speakers into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/audio.txt.in:380 msgid "" "PURPOSE:\n" " Check that system detects a microphone being plugged in\n" "STEPS:\n" " 1. Prepare a microphone with a standard 3.5mm jack\n" " 2. Locate the microphone jack on the device under test.\n" " Keep in mind that it may be shared with the headphone jack.\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug the microphone into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/audio.txt.in:411 msgid "" "PURPOSE:\n" " Check that balance control works correctly on internal speakers\n" "STEPS:\n" " 1. Check that moving the balance slider from left to right works " "smoothly\n" " 2. Commence the test to play an audio tone for 10 seconds.\n" " 3. Move the balance slider from left to right and back.\n" " 4. Check that actual speaker audio balance follows your setting.\n" "VERIFICATION:\n" " Does the slider move smoothly, as well as being followed by the setting " "by the actual audio output?" msgstr "" #. description #: ../jobs/audio.txt.in:439 msgid "" "PURPOSE:\n" " Check that balance control works correctly on external headphone\n" "STEPS:\n" " 1. Check that moving the balance slider from left to right works " "smoothly\n" " 2. Commence the test to play an audio tone for 10 seconds.\n" " 3. Move the balance slider from left to right and back.\n" " 4. Check that actual headphone audio balance follows your setting.\n" "VERIFICATION:\n" " Does the slider move smoothly, as well as being followed by the setting " "by the actual audio output?" msgstr "" #. description #: ../jobs/audio.txt.in:459 msgid "Test to detect audio devices after suspending 30 times." msgstr "" #. description #: ../jobs/audio.txt.in:478 msgid "" "PURPOSE:\n" " This test will check that internal speakers work correctly after " "suspending 30 times.\n" "STEPS:\n" " 1. Make sure that no external speakers or headphones are connected\n" " When testing a desktop, you can skip this test if there is no\n" " internal speaker, we will test the external output later\n" " 2. Commence the test to play a brief tone on your audio device\n" "VERIFICATION:\n" " Did you hear a tone?" msgstr "" #. description #: ../jobs/audio.txt.in:503 msgid "" "Play back a sound on the default output and listen for it on the default " "input, after suspending 30 times." msgstr "" #. description #: ../jobs/audio.txt.in:516 msgid "" "This test will verify that the volume levels are at an acceptable level on " "your local system. The test will validate that the volume is greater than " "or equal to minvol and less than or equal to maxvol for all sources (inputs) " "and sinks (outputs) recognized by PulseAudio. It will also validate that " "the active source and sink are not muted. You should not manually adjust " "the volume or mute before running this test." msgstr "" #. description #: ../jobs/audio.txt.in:532 msgid "Record mixer settings after suspending 30 times." msgstr "" #. description #: ../jobs/benchmarks.txt.in:6 msgid "Raw read timing benchmark of each disk using hdparm." msgstr "" #. summary #: ../jobs/benchmarks.txt.in:20 msgid "Benchmark for each disk" msgstr "" #. description #: ../jobs/benchmarks.txt.in:24 msgid "Cached read timing benchmark of each disk using hdparm." msgstr "" #. description #: ../jobs/benchmarks.txt.in:44 msgid "Run gtkperf to make sure that GTK based test cases work" msgstr "" #. description #: ../jobs/benchmarks.txt.in:53 msgid "Run Render-Bench XRender/Imlib2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:61 msgid "Run Qgears2 XRender Extension gearsfancy benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:69 msgid "Run Qgears2 XRender Extension image scaling benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:77 msgid "Run Qgears2 OpenGL gearsfancy benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:85 msgid "Run Qgears2 OpenGL image scaling benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:95 msgid "Run GLmark2-ES2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:106 msgid "Run GLmark2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:113 msgid "Run Unigine Santuary benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:120 msgid "Run Unigine Tropics benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:127 msgid "Run Unigine Heaven benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:134 msgid "Run Lightsmark benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:142 msgid "Run Cachebench Read benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:150 msgid "Run Cachebench Write benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:158 msgid "Run Cachebench Read / Modify / Write benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:166 msgid "Run Stream Copy benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:174 msgid "Run Stream Scale benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:182 msgid "Run Stream Add benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:190 msgid "Run Stream Triad benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:198 msgid "Run Network Loopback benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:205 msgid "Check the time needed to reconnect to a WIFI access point" msgstr "" #. description #: ../jobs/benchmarks.txt.in:213 msgid "Run Encode MP3 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:221 msgid "Run x264 H.264/AVC encoder benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:228 msgid "Run GnuPG benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:236 msgid "Run Compress PBZIP2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:244 msgid "Run Compress 7ZIP benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:252 msgid "Run N-Queens benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:260 msgid "Run Himeno benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:268 msgid "CPU utilization on an idle system." msgstr "" #. description #: ../jobs/benchmarks.txt.in:276 msgid "Disk utilization on an idle system." msgstr "" #. description #: ../jobs/benchmarks.txt.in:286 msgid "" "Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Fullscreen 1920x1080 " "no antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:298 msgid "" "Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Windowed 1024x640 no " "antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:310 msgid "" "Run GiMark, a geometry instancing test (OpenGL 3.3) Fullscreen 1920x1080 no " "antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:322 msgid "" "Run GiMark, a geometry instancing test (OpenGL 3.3) Windowed 1024x640 no " "antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:334 msgid "" "Run a tessellation test based on TessMark (OpenGL 4.0) Fullscreen 1920x1080 " "no antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:345 msgid "" "Run a tessellation test based on TessMark (OpenGL 4.0) Windowed 1024x640 no " "antialiasing" msgstr "" #. description #: ../jobs/bluetooth.txt.in:23 msgid "" "Automated test to store bluetooth device information in checkbox report" msgstr "" #. description #: ../jobs/bluetooth.txt.in:31 msgid "" "PURPOSE:\n" " This test will check that bluetooth connection works correctly\n" "STEPS:\n" " 1. Enable bluetooth on any mobile device (PDA, smartphone, etc.)\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select 'Setup new device'\n" " 4. Look for the device in the list and select it\n" " 5. In the device write the PIN code automatically chosen by the wizard\n" " 6. The device should pair with the computer\n" " 7. Right-click on the bluetooth icon and select browse files\n" " 8. Authorize the computer to browse the files in the device if needed\n" " 9. You should be able to browse the files\n" "VERIFICATION:\n" " Did all the steps work?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:52 msgid "" "PURPOSE:\n" " This test will check that you can transfer information through a " "bluetooth connection\n" "STEPS:\n" " 1. Make sure that you're able to browse the files in your mobile device\n" " 2. Copy a file from the computer to the mobile device\n" " 3. Copy a file from the mobile device to the computer\n" "VERIFICATION:\n" " Were all files copied correctly?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:77 msgid "" "PURPOSE:\n" " This test will check the High Fidelity Playback (A2DP) capability of " "your Bluetooth device,\n" " to see if you can hear audio from it.\n" "STEPS:\n" " 1. Enable and pair the bluetooth headset\n" " 2. Click \"Test\" to play a brief tone on your Bluetooth device, if it " "failed to set the Mode to A2DP,\n" " please select the device and change it manually in the \"Sound " "Settings\"\n" "VERIFICATION:\n" " Did you hear the tone?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:94 msgid "" "PURPOSE:\n" " This test will check the Telephony Duplex capability of your bluetooth " "device,\n" " to see if you can record and hear audio from it simultaneously.\n" "STEPS:\n" " 1. Enable the bluetooth headset\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select \"Setup new device\"\n" " 4. Look for the device in the list and pair it\n" " 5. Click the sound icon\n" " 6. Click \"Sound Settings\"\n" " 7. Select device and ensure Mode is set to \"Telephony Duplex " "(HSP/HFP)\"\n" " 8. Click \"Test\" to record and play for five seconds in the bluetooth " "device\n" "VERIFICATION:\n" " Did you hear the sound you recorded in the bluetooth with a slight " "intended delay?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:116 msgid "" "PURPOSE:\n" " This test will check that you can use a BlueTooth HID device\n" "STEPS:\n" " 1. Enable either a BT mouse or keyboard\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select 'Setup new device'\n" " 4. Look for the device in the list and select it\n" " 5. For mice, perform actions such as moving the pointer, right and left " "button clicks and double clicks\n" " 6. For keyboards, commence the test to launch a small tool. Enter some " "text into the tool and close it.\n" "VERIFICATION:\n" " Did the device work as expected?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:154 msgid "" "This is an automated Bluetooth file transfer test. It sends a large file to " "the device specified by the BTDEVADDR environment variable, then retrieves " "it again using Bluetooth and verifies the checksum to ensure the transfer " "didn't corrupt the file." msgstr "" #. description #: ../jobs/camera.txt.in:8 msgid "This Automated test attempts to detect a camera." msgstr "" #. description #: ../jobs/camera.txt.in:18 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works\n" "STEPS:\n" " 1. Click on Test to display a video capture from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the video capture?" msgstr "" #. description #: ../jobs/camera.txt.in:37 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works\n" "STEPS:\n" " 1. Click on Test to display a still image from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the image?" msgstr "" #. description #: ../jobs/camera.txt.in:54 msgid "" " Takes multiple pictures based on the resolutions supported by the camera " "and\n" " validates their size and that they are of a valid format." msgstr "" #. description #: ../jobs/codecs.txt.in:9 msgid "" "PURPOSE:\n" " This test will verify your system's ability to play Ogg Vorbis audio " "files.\n" "STEPS:\n" " 1. Click Test to play an Ogg Vorbis file (.ogg)\n" " 2. Please close the player to proceed.\n" "VERIFICATION:\n" " Did the sample play correctly?" msgstr "" #. description #: ../jobs/codecs.txt.in:26 msgid "" "PURPOSE:\n" " This test will verify your system's ability to play Wave Audio files.\n" "STEPS:\n" " 1. Select Test to play a Wave Audio format file (.wav)\n" " 2. Please close the player to proceed.\n" "VERIFICATION:\n" " Did the sample play correctly?" msgstr "" #. description #: ../jobs/cpu.txt.in:10 msgid "" "Test the CPU scaling capabilities using Firmware Test Suite (fwts cpufreq)." msgstr "" #. description #: ../jobs/cpu.txt.in:19 msgid "" "Attaches the log generated by cpu/scaling_test to the results submission." msgstr "" #. description #: ../jobs/cpu.txt.in:30 msgid "" "Test that the CPU can run at its max frequency using Firmware Test Suite " "(fwts cpufreq)." msgstr "" #. description #: ../jobs/cpu.txt.in:39 msgid "" "Attaches the log generated by cpu/maxfreq_test to the results submission." msgstr "" #. description #: ../jobs/cpu.txt.in:47 msgid "Tests the CPU for clock jitter." msgstr "" #. description #: ../jobs/cpu.txt.in:56 msgid "Test offlining of each CPU core in a multicore system." msgstr "" #. description #: ../jobs/cpu.txt.in:65 msgid "This test checks cpu topology for accuracy between proc and sysfs." msgstr "" #. description #: ../jobs/cpu.txt.in:74 msgid "This test checks that CPU frequency governors are obeyed when set." msgstr "" #. description #: ../jobs/cpu.txt.in:83 msgid "Validate that the Vector Floating Point Unit is running on ARM device" msgstr "" #. description #: ../jobs/cpu.txt.in:92 msgid "Run Firmware Test Suite (fwts) cstates tests." msgstr "" #. description #: ../jobs/cpu.txt.in:104 ../jobs/firmware.txt.in:71 msgid "Attaches the FWTS desktop diagnosis results log to the submission" msgstr "" #. description #: ../jobs/daemons.txt.in:6 msgid "Test if the atd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:13 msgid "Test if the cron daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:20 msgid "Test if the cupsd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:27 msgid "Test if the getty daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:34 msgid "Test if the init daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:41 msgid "Test if the klogd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:48 msgid "Test if the nmbd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:55 msgid "Test if the smbd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:62 msgid "Test if the syslogd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:70 msgid "Test if the udevd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:77 msgid "Test if the winbindd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/disk.txt.in:12 msgid "" "Displays information about each disk detected on the system under test." msgstr "" #. summary #: ../jobs/disk.txt.in:27 msgid "Disk statistics for /dev/{name}" msgstr "" #. description #: ../jobs/disk.txt.in:28 msgid "" "This test checks disk stats, generates some activity and rechecks stats to " "verify they've changed. It also verifies that disks appear in the various " "files they're supposed to." msgstr "" #. description #: ../jobs/disk.txt.in:28 msgid "This test will inspect the following disk:" msgstr "" #. description #: ../jobs/disk.txt.in:28 msgid "" " product name: {product}\n" " sysfs path: {path}\n" " device node path: /dev/{name}" msgstr "" #. summary #: ../jobs/disk.txt.in:40 msgid "Check stats changes for each disk" msgstr "" #. description #: ../jobs/disk.txt.in:44 msgid "" "This test generates some disk activity and checks the stats to ensure drive " "activity is being recorded properly." msgstr "" #. summary #: ../jobs/disk.txt.in:62 msgid "SMART test" msgstr "" #. description #: ../jobs/disk.txt.in:68 msgid "This tests the SMART capabilities of disks detected on the system." msgstr "" #. summary #: ../jobs/disk.txt.in:86 msgid "Verify system storage performs at or above baseline performance" msgstr "" #. description #: ../jobs/disk.txt.in:91 msgid "Verify system storage performs at or above a baseline speed." msgstr "" #. summary #: ../jobs/disk.txt.in:107 msgid "" "Verify that storage devices, such as Fibre Channel and RAID, perform under " "stress." msgstr "" #. description #: ../jobs/disk.txt.in:112 msgid "" "Verify that storage devices, such as Fibre Channel and RAID, perform under " "stress without data loss or corruption." msgstr "" #. description #: ../jobs/disk.txt.in:138 msgid "" "Some new hard drives include a feature that parks the drive heads after a " "short period of inactivity. This is a power-saving feature, but it can have " "a bad interaction with the operating system that results in the drive " "constantly parked then activated. This produces excess wear on the drive, " "potentially leading to early failures." msgstr "" #. description #: ../jobs/disk.txt.in:151 msgid "" "PURPOSE:\n" " This test checks that a systems drive protection mechanism works properly.\n" "STEPS:\n" " 1. Click on Test\n" " 2. Move the system under test around, ensuring it is raised and lowered at " "some point.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/esata.txt.in:5 msgid "" "PURPOSE:\n" " This test will check the system can detect the insertion of an eSATA " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will\n" " timeout and fail if the insertion has not been detected within 20 " "seconds.\n" " 2. Plug an eSATA HDD into an available eSATA port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/esata.txt.in:22 msgid "" "This is an automated test which performs read/write operations on an " "attached eSATA HDD" msgstr "" #. description #: ../jobs/esata.txt.in:31 msgid "" "PURPOSE:\n" " This test will check the system can detect the removal of an eSATA HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will timeout and fail if\n" " the removal has not been detected within 20 seconds.\n" " 2. Remove the previously attached eSATA HDD from the eSATA port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/ethernet.txt.in:14 msgid "" "Test to detect and return information about available network controllers on " "the system under test." msgstr "" #. description #: ../jobs/ethernet.txt.in:26 msgid "" "Gathers some info on the current state of your network devices. If no " "devices are found, the test will exit with an error." msgstr "" #. description #: ../jobs/ethernet.txt.in:35 msgid "" "PURPOSE:\n" " This test will check your wired connection\n" "STEPS:\n" " 1. Click on the Network icon in the top panel\n" " 2. Select a network below the \"Wired network\" section\n" " 3. Click \"Test\" to verify that it's possible to establish a HTTP " "connection\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" #. summary #: ../jobs/ethernet.txt.in:52 msgid "Multi-NIC Iperf testing for NIC {interface}" msgstr "" #. description #: ../jobs/ethernet.txt.in:62 msgid "" "This test uses iperf to ensure network devices pass data at an acceptable " "minimum percentage of advertized speed." msgstr "" #. summary #: ../jobs/ethernet.txt.in:73 msgid "Multi-NIC Iperf3 testing for NIC {interface}" msgstr "" #. description #: ../jobs/ethernet.txt.in:83 msgid "" "This test uses iperf3 to ensure network devices pass data at an acceptable " "minimum percentage of advertized speed." msgstr "" #. summary #: ../jobs/ethernet.txt.in:94 msgid "ethtool check for NIC {interface}" msgstr "" #. description #: ../jobs/ethernet.txt.in:100 msgid "" "This test executes ethtool requests against ethernet device {__index__} " "({interface})." msgstr "" #. summary #: ../jobs/ethernet.txt.in:110 msgid "Maximum bandwidth test of device {__index__} ({interface})" msgstr "" #. purpose #: ../jobs/ethernet.txt.in:119 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of each ethernet interface." msgstr "" #. steps #: ../jobs/ethernet.txt.in:122 ../jobs/mobilebroadband.txt.in:105 #: ../jobs/wireless.txt.in:694 msgid "" "1. Click \"Test\". 2. Read the network test summary and confirm that the " "throughput is acceptable. 3. If needed, click \"Test\" again to repeat the " "transfer test." msgstr "" #. verification #: ../jobs/ethernet.txt.in:126 ../jobs/mobilebroadband.txt.in:109 #: ../jobs/wireless.txt.in:698 msgid "" "Was the reported throughput acceptable for the type and maximum speed of " "this interface?" msgstr "" #. summary #: ../jobs/ethernet.txt.in:136 msgid "" "Stress and performance test of ethernet device {__index__} ({interface})" msgstr "" #. description #: ../jobs/ethernet.txt.in:142 msgid "" "Automated test that tests performance of ethernet device {__index__} " "({interface})." msgstr "" #. description #: ../jobs/expresscard.txt.in:4 msgid "" "PURPOSE:\n" " This will verify that an ExpressCard slot can detect inserted devices.\n" "STEPS:\n" " Skip this test if you do not have an ExpressCard slot.\n" " 1. Plug an ExpressCard device into the ExpressCard slot\n" "VERIFICATION:\n" " Was the device correctly detected?" msgstr "" #. description #: ../jobs/fingerprint.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that a fingerprint reader will work properly for " "logging into your system. This test case assumes that there's a testing " "account from which test cases are run and a personal account that the tester " "uses to verify the fingerprint reader\n" "STEPS:\n" " 1. Click on the User indicator on the left side of the panel (your user " "name).\n" " 2. Select \"Switch User Account\"\n" " 3. On the LightDM screen select your username.\n" " 4. Use the fingerprint reader to login.\n" " 5. Click on the user switcher applet.\n" " 6. Select the testing account to continue running tests.\n" "VERIFICATION:\n" " Did the authentication procedure work correctly?" msgstr "" #. description #: ../jobs/fingerprint.txt.in:20 msgid "" "PURPOSE:\n" " This test will verify that a fingerprint reader can be used to unlock a " "locked system.\n" "STEPS:\n" " 1. Click on the Session indicator (Cog icon on the Left side of the " "panel) .\n" " 2. Select 'Lock screen'.\n" " 3. Press any key or move the mouse.\n" " 4. A window should appear that provides the ability to unlock either " "typing your password or using fingerprint authentication.\n" " 5. Use the fingerprint reader to unlock.\n" " 6. Your screen should be unlocked.\n" "VERIFICATION:\n" " Did the authentication procedure work correctly?" msgstr "" #. description #: ../jobs/firewire.txt.in:6 msgid "" "PURPOSE:\n" " This test will check the system can detect the insertion of a FireWire " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will\n" " timeout and fail if the insertion has not been detected within 20 " "seconds.\n" " 2. Plug a FireWire HDD into an available FireWire port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/firewire.txt.in:24 msgid "" "This is an automated test which performs read/write operations on an " "attached FireWire HDD" msgstr "" #. description #: ../jobs/firewire.txt.in:34 msgid "" "PURPOSE:\n" " This test will check the system can detect the removal of a FireWire " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will timeout and fail if\n" " the removal has not been detected within 20 seconds.\n" " 2. Remove the previously attached FireWire HDD from the FireWire port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/firmware.txt.in:25 msgid "Automated tests for firmware using Firmware Test Suite." msgstr "" #. description #: ../jobs/firmware.txt.in:45 msgid "" "Run Firmware Test Suite (fwts) QA-concerned desktop-specific diagnosis tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:47 msgid "Run FWTS QA-concerned desktop-specific diagnosis tests." msgstr "" #. description #: ../jobs/firmware.txt.in:58 msgid "" "Run Firmware Test Suite (fwts) HWE-concerned desktop-specific diagnosis " "tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:60 msgid "Run FWTS HWE-concerned desktop-specific diagnosis tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:72 msgid "Attach FWTS desktop diagnosis log to submission" msgstr "" #. description #: ../jobs/firmware.txt.in:80 msgid "" "Attaches the FWTS desktop diagnosis results log to the submission (to HWE)" msgstr "" #. summary #: ../jobs/firmware.txt.in:81 msgid "Attach FWTS desktop diagnosis log to submission (to HWE)" msgstr "" #. summary #: ../jobs/firmware.txt.in:86 msgid "No _REV interface in ACPI [DS]SDT tables" msgstr "" #. description #: ../jobs/firmware.txt.in:90 msgid "" "This Automated test checks misuse of the _REV interface in ACPI DSDT and " "SSDT tables" msgstr "" #. description #: ../jobs/floppy.txt.in:5 msgid "Floppy test" msgstr "" #. summary #: ../jobs/graphics.txt.in:4 msgid "Driver version tests" msgstr "" #. description #: ../jobs/graphics.txt.in:23 msgid "Test to output the Xorg version" msgstr "" #. summary #: ../jobs/graphics.txt.in:24 msgid "Test Xorg version" msgstr "" #. summary #: ../jobs/graphics.txt.in:29 msgid "Resolution change tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:61 msgid "Test that the X process is running." msgstr "" #. description #: ../jobs/graphics.txt.in:69 msgid "Test that the X is not running in failsafe mode." msgstr "" #. summary #: ../jobs/graphics.txt.in:70 msgid "Test that X is not in failsafe mode." msgstr "" #. summary #: ../jobs/graphics.txt.in:101 msgid "Default resolution tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:126 msgid "Minimum resolution tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:147 msgid "Maximum resolution tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:178 msgid "Mode tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:194 msgid "Color depth tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:210 msgid "Refresh rate tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:225 msgid "Graphic memory tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:240 msgid "Display video test" msgstr "" #. description #: ../jobs/graphics.txt.in:266 msgid "Check that VESA drivers are not in use" msgstr "" #. summary #: ../jobs/graphics.txt.in:267 msgid "Test that VESA drivers are not in use" msgstr "" #. summary #: ../jobs/graphics.txt.in:272 msgid "Resolution cycling tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:296 msgid "Rotation tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:320 msgid "Compiz support tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:337 msgid "Unity support tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:354 msgid "glxgears tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:378 msgid "3D window open/close tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:395 msgid "3D window with suspend/resume tests" msgstr "" #. description #: ../jobs/graphics.txt.in:411 msgid "Multiple 3D window open/close" msgstr "" #. summary #: ../jobs/graphics.txt.in:412 msgid "Multiple 3D window open/close tests" msgstr "" #. description #: ../jobs/graphics.txt.in:428 msgid "3D window movement" msgstr "" #. summary #: ../jobs/graphics.txt.in:429 msgid "3D window movement tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:448 msgid "screenshot tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:470 msgid "screenshot attachment tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:486 msgid "full screen video screenshot tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:516 msgid "GPU switch prompt tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:539 msgid "full screen video attachment tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:555 msgid "Obtains a simple screen capture" msgstr "" #. description #: ../jobs/graphics.txt.in:559 msgid "Obtains a simple screen capture using gnome-screenshot if present" msgstr "" #. summary #: ../jobs/graphics.txt.in:564 msgid "Attaches a simple screen capture" msgstr "" #. description #: ../jobs/graphics.txt.in:568 msgid "Attaches the simple screen capture file" msgstr "" #. summary #: ../jobs/graphics.txt.in:583 msgid "Obtains a simple screen capture of {product}" msgstr "" #. description #: ../jobs/graphics.txt.in:587 msgid "" "Obtains a simple screen capture of {product} using gnome-screenshot if " "present" msgstr "" #. summary #: ../jobs/graphics.txt.in:596 msgid "Attaches a simple screen capture of {product}" msgstr "" #. description #: ../jobs/graphics.txt.in:599 msgid "Attaches the simple screen capture file of {product}" msgstr "" #. description #: ../jobs/hibernate.txt.in:18 msgid "" "PURPOSE:\n" " This test will check to make sure your system can successfully hibernate " "(if supported)\n" "STEPS:\n" " 1. Click on Test\n" " 2. The system will hibernate and should wake itself within 5 minutes\n" " 3. If your system does not wake itself after 5 minutes, please press the " "power button to wake the system manually\n" " 4. If the system fails to resume from hibernate, please restart System " "Testing and mark this test as Failed\n" "VERIFICATION:\n" " Did the system successfully hibernate and did it work properly after " "waking up?" msgstr "" #. summary #: ../jobs/hibernate.txt.in:34 msgid "Hibernate test" msgstr "" #. description #: ../jobs/hibernate.txt.in:68 msgid "Automated check of the hibernate log for errors discovered by fwts" msgstr "" #. description #: ../jobs/hibernate.txt.in:77 msgid "attaches log from single hibernate/resume test to results" msgstr "" #. summary #: ../jobs/hibernate.txt.in:81 msgid "Hibernate log attach" msgstr "" #. description #: ../jobs/info.txt.in:17 msgid "Attaches a report of installed codecs for Intel HDA" msgstr "" #. description #: ../jobs/info.txt.in:24 msgid "Attaches a report of CPU information" msgstr "" #. summary #: ../jobs/info.txt.in:25 msgid "Attach a copy of /proc/cpuinfo" msgstr "" #. description #: ../jobs/info.txt.in:32 msgid "Attaches a copy of /var/log/dmesg to the test results" msgstr "" #. summary #: ../jobs/info.txt.in:33 msgid "Attach a copy of /var/log/dmesg" msgstr "" #. description #: ../jobs/info.txt.in:40 msgid "Attaches info on DMI" msgstr "" #. summary #: ../jobs/info.txt.in:41 msgid "Attach a copy of /sys/class/dmi/id/*" msgstr "" #. description #: ../jobs/info.txt.in:50 msgid "Attaches dmidecode output" msgstr "" #. summary #: ../jobs/info.txt.in:51 msgid "Attach a copy of of the output of dmidecode" msgstr "" #. description #: ../jobs/info.txt.in:59 msgid "Attaches lshw output" msgstr "" #. description #: ../jobs/info.txt.in:67 msgid "Attaches the firmware version" msgstr "" #. description #: ../jobs/info.txt.in:74 msgid "Attaches very verbose lspci output." msgstr "" #. summary #: ../jobs/info.txt.in:75 msgid "Attach a list of PCI devices" msgstr "" #. description #: ../jobs/info.txt.in:82 msgid "Attaches very verbose lspci output (with central database Query)." msgstr "" #. summary #: ../jobs/info.txt.in:85 msgid "Attach PCI configuration space hex dump" msgstr "" #. description #: ../jobs/info.txt.in:90 msgid "" " Attaches a hex dump of the standard part of the PCI configuration\n" " space for all PCI devices." msgstr "" #. description #: ../jobs/info.txt.in:101 msgid "Attaches a list of detected USB devices." msgstr "" #. description #: ../jobs/info.txt.in:108 msgid "Attaches info on system memory as seen in /proc/meminfo." msgstr "" #. description #: ../jobs/info.txt.in:115 msgid "Attaches the contents of the various modprobe conf files." msgstr "" #. summary #: ../jobs/info.txt.in:116 msgid "Attach the contents of modprobe configuration files" msgstr "" #. summary #: ../jobs/info.txt.in:121 msgid "Attach modinfo information" msgstr "" #. description #: ../jobs/info.txt.in:130 msgid "Attaches modinfo information for all currently loaded modules" msgstr "" #. description #: ../jobs/info.txt.in:138 msgid "Attaches the contents of the /etc/modules file." msgstr "" #. summary #: ../jobs/info.txt.in:139 msgid "Attach the contents of /etc/modules" msgstr "" #. description #: ../jobs/info.txt.in:146 msgid "Attaches the contents of various sysctl config files." msgstr "" #. summary #: ../jobs/info.txt.in:147 msgid "Attach sysctl configuration files." msgstr "" #. description #: ../jobs/info.txt.in:152 msgid "Attaches a report of sysfs attributes." msgstr "" #. summary #: ../jobs/info.txt.in:160 msgid "Attach detailed sysfs property output from udev" msgstr "" #. description #: ../jobs/info.txt.in:167 msgid "" "Attaches a dump of the udev database showing system hardware information." msgstr "" #. summary #: ../jobs/info.txt.in:168 msgid "Attach hardware database (udev)" msgstr "" #. description #: ../jobs/info.txt.in:175 msgid "Attaches the output of udev_resource, for debugging purposes" msgstr "" #. description #: ../jobs/info.txt.in:183 msgid "Attaches a tarball of gcov data if present." msgstr "" #. description #: ../jobs/info.txt.in:190 msgid "Attaches a list of the currently running kernel modules." msgstr "" #. summary #: ../jobs/info.txt.in:191 msgid "Attach a list of currently running kernel modules" msgstr "" #. summary #: ../jobs/info.txt.in:198 msgid "Attaches json dumps of installed dkms package information." msgstr "" #. description #: ../jobs/info.txt.in:205 msgid "Attaches the contents of /proc/acpi/sleep if it exists." msgstr "" #. description #: ../jobs/info.txt.in:210 msgid "Bootchart information." msgstr "" #. summary #: ../jobs/info.txt.in:218 msgid "SATA/IDE device information." msgstr "" #. description #: ../jobs/info.txt.in:221 msgid "Attaches SATA/IDE device information reported by hdparm." msgstr "" #. description #: ../jobs/info.txt.in:243 msgid "Attaches the bootchart png file for bootchart runs" msgstr "" #. description #: ../jobs/info.txt.in:252 msgid "Attaches the bootchart log for bootchart test runs." msgstr "" #. description #: ../jobs/info.txt.in:261 msgid "installs the installer bootchart tarball if it exists." msgstr "" #. description #: ../jobs/info.txt.in:269 msgid "Attaches the installer debug log if it exists." msgstr "" #. description #: ../jobs/info.txt.in:277 msgid "" "Returns the name, driver name and driver version of any touchpad discovered " "on the system." msgstr "" #. description #: ../jobs/info.txt.in:290 msgid "Lists the device driver and version for all audio devices." msgstr "" #. description #: ../jobs/info.txt.in:301 msgid "Provides information about network devices" msgstr "" #. description #: ../jobs/info.txt.in:308 msgid "Provides information about wwan/mobile broadband devices" msgstr "" #. description #: ../jobs/info.txt.in:314 msgid "Provides information about displays attached to the system" msgstr "" #. description #: ../jobs/info.txt.in:322 msgid "Attaches information about disk partitions" msgstr "" #. description #: ../jobs/info.txt.in:328 msgid "Attaches the buildstamp identifier for the preinstalled OS" msgstr "" #. summary #: ../jobs/info.txt.in:329 msgid "Attach /etc/buildstamp" msgstr "" #. description #: ../jobs/info.txt.in:339 msgid "Check existence of recovery partition" msgstr "" #. description #: ../jobs/info.txt.in:350 msgid "Check the recovery type is dell or not" msgstr "" #. summary #: ../jobs/info.txt.in:360 msgid "Attach the recovery partition versions" msgstr "" #. description #: ../jobs/info.txt.in:361 msgid "" "Attach the recovery partition version image_version is the preinstalled OS " "image version bto_version is only for dell_recovery Example: image_version: " "somerville-trusty-amd64-20140620-0 bto_version: A00_dell-bto-trusty-houston-" "15-A11-iso-20141203-0.iso" msgstr "" #. summary #: ../jobs/info.txt.in:377 msgid "Attach the bto.xml in Dell recovery partition" msgstr "" #. description #: ../jobs/info.txt.in:378 msgid "" "bto.xml is basically a Fish manifest The information include:\n" " - fish packages\n" " - dell recovery stage 2 boot log" msgstr "" #. description #: ../jobs/info.txt.in:389 msgid "" "Attaches the debug log from the virtualization/kvm_check_vm test to the " "results submission." msgstr "" #. description #: ../jobs/info.txt.in:399 msgid "Attaches the kernel command line used to boot" msgstr "" #. summary #: ../jobs/info.txt.in:400 msgid "Attach a copy of /proc/cmdline" msgstr "" #. description #: ../jobs/input.txt.in:7 msgid "Pointing device tests." msgstr "" #. description #: ../jobs/input.txt.in:27 msgid "" "PURPOSE:\n" " This test will test your pointing device\n" "STEPS:\n" " 1. Move the cursor using the pointing device or touch the screen.\n" " 2. Perform some single/double/right click operations.\n" "VERIFICATION:\n" " Did the pointing device work as expected?" msgstr "" #. description #: ../jobs/input.txt.in:42 msgid "" "PURPOSE:\n" " This test will test your keyboard\n" "STEPS:\n" " 1. Click on Test\n" " 2. On the open text area, use your keyboard to type something\n" "VERIFICATION:\n" " Is your keyboard working properly?" msgstr "" #. description #: ../jobs/input.txt.in:55 msgid "" "PURPOSE:\n" " Manual detection of accelerometer.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Is this system supposed to have an accelerometer?" msgstr "" #. description #: ../jobs/input.txt.in:70 msgid "" "PURPOSE:\n" " This test will test your accelerometer to see if it is detected\n" " and operational as a joystick device.\n" "STEPS:\n" " 1. Click on Test\n" " 2. Tilt your hardware in the directions onscreen until the axis " "threshold is met.\n" "VERIFICATION:\n" " Is your accelerometer properly detected? Can you use the device?" msgstr "" #. summary #: ../jobs/input.txt.in:85 msgid "Create click tests for pointing devices." msgstr "" #. description #: ../jobs/input.txt.in:86 msgid "Click tests for pointing devices." msgstr "" #. description #: ../jobs/install.txt.in:6 msgid "" "Tests to see that apt can access repositories and get updates (does not " "install updates). This is done to confirm that you could recover from an " "incomplete or broken update." msgstr "" #. description #: ../jobs/keys.txt.in:8 msgid "" "PURPOSE:\n" " This test will test the screen lock key\n" "STEPS:\n" " 1. Commence the test. If there is no such key, please skip this test.\n" " 2. Press the lock screen button on the keyboard in 30 seconds.\n" " 3. If the screen is locked, move the mouse or press any key to activate " "the prompt.\n" " 4. Input the password to unlock the screen.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/keys.txt.in:25 msgid "" "PURPOSE:\n" " This test will test the brightness key\n" "STEPS:\n" " 1. Press the brightness buttons on the keyboard\n" "VERIFICATION:\n" " Did the brightness change following to your key presses?" msgstr "" #. description #: ../jobs/keys.txt.in:41 msgid "" "PURPOSE:\n" " This test will test the volume keys of your keyboard\n" "STEPS:\n" " Skip this test if your computer has no volume keys.\n" " 1. Click test to open a window on which to test the volume keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:59 msgid "" "PURPOSE:\n" " This test will test the mute key of your keyboard\n" "STEPS:\n" " 1. Click test to open a window on which to test the mute key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the mute key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:74 msgid "" "PURPOSE:\n" " This test will test the sleep key\n" "STEPS:\n" " 1. Press the sleep key on the keyboard\n" " 2. Wake your system up by pressing the power button\n" "VERIFICATION:\n" " Did the system go to sleep after pressing the sleep key?" msgstr "" #. description #: ../jobs/keys.txt.in:90 msgid "" "PURPOSE:\n" " This test will test the battery information key\n" "STEPS:\n" " Skip this test if you do not have a Battery Button.\n" " 1. Click Test to begin\n" " 2. Press the Battery Info button (or combo like Fn+F3)\n" " 3: Close the Power Statistics tool if it opens\n" "VERIFICATION:\n" " Did the Battery Info key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:106 msgid "" "PURPOSE:\n" " This test will test the wireless key\n" "STEPS:\n" " 1. Press the wireless key on the keyboard\n" " 2. Check that the wifi LED turns off or changes color\n" " 3. Check that wireless is disabled\n" " 4. Press the same key again\n" " 5. Check that the wifi LED turns on or changes color\n" " 6. Check that wireless is enabled\n" "VERIFICATION:\n" " Did the wireless turn off on the first press and on again on the " "second?\n" " (NOTE: the LED functionality will be reviewed in a following test. " "Please\n" " only consider the functionality of the wifi itself here.)" msgstr "" #. description #: ../jobs/keys.txt.in:129 msgid "" "PURPOSE:\n" " This test will test the media keys of your keyboard\n" "STEPS:\n" " Skip this test if your computer has no media keys.\n" " 1. Click test to open a window on which to test the media keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:147 msgid "" "PURPOSE:\n" " This test will test the super key of your keyboard\n" "STEPS:\n" " 1. Click test to open a window on which to test the super key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the super key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:161 msgid "" "PURPOSE:\n" " Validate that the External Video hot key is working as expected\n" "STEPS:\n" " 1. Plug in an external monitor\n" " 2. Press the display hot key to change the monitors configuration\n" "VERIFICATION:\n" " Check that the video signal can be mirrored, extended, displayed on " "external or onboard only." msgstr "" #. description #: ../jobs/keys.txt.in:175 msgid "" "PURPOSE:\n" " Verify touchpad hotkey toggles touchpad functionality on and off\n" "STEPS:\n" " 1. Verify the touchpad is functional\n" " 2. Tap the touchpad toggle hotkey\n" " 3. Tap the touchpad toggle hotkey again\n" "VERIFICATION:\n" " Verify the touchpad has been disabled and re-enabled." msgstr "" #. description #: ../jobs/keys.txt.in:190 msgid "" "PURPOSE:\n" " Verify that the keyboard backlight toggle key works properly\n" "STEPS:\n" " 1. Tap the keyboard backlight key\n" " 2. Confirm that the keyboard backlight was toggled to the opposite " "state\n" " 3. Tap the keyboard backlight key again\n" " 4. Confirm that the keyboard backlight was toggled to the opposite " "state\n" "VERIFICATION:\n" " Did the keyboard backlight state change on each press?" msgstr "" #. description #: ../jobs/keys.txt.in:218 msgid "" "PURPOSE:\n" " This test will test the mute key for your microphone\n" "STEPS:\n" " 1. Click \"Test\" then speak: \"Imagination is more important than " "knowledge\" (or anything else) into your microphone.\n" " 2. While you are speaking, please press the mute key for the microphone " "to mute it and press it again to unmute.\n" " 3. After a few seconds, your speech will be played back to you. If the " "key works, your speech should be interrupted for a few seconds.\n" "VERIFICATION:\n" " Does the microphone mute key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:233 msgid "" "PURPOSE:\n" " This test will test the hibernate key\n" "STEPS:\n" " 1. Press the hibernate key on the keyboard\n" " 2. Check that the system hibernated correctly\n" " 3. Wake your system after hibernating by pressing the power button\n" "VERIFICATION:\n" " Did the system go to hibernate after pressing the hibernate key?" msgstr "" #. description #: ../jobs/keys.txt.in:248 msgid "" "PURPOSE:\n" " This test will test the keyboard overhead light key or switch\n" "STEPS:\n" " 1. Press the keyboard overhead light key or swtich on the light\n" " 2. Check the the keyboard overhead light turn on correctly\n" " 3. Press the key or switch again to toggle off the light\n" "VERIFICATION:\n" " Did the keyboard overhead light key or switch turns on and off the light?" msgstr "" #. description #: ../jobs/led.txt.in:5 msgid "" "PURPOSE:\n" " Power LED verification\n" "STEPS:\n" " 1. Power LED should be on while device is switched on\n" "VERIFICATION:\n" " Does the power LED light as expected?" msgstr "" #. description #: ../jobs/led.txt.in:18 msgid "" "PURPOSE:\n" " Power LED verification\n" "STEPS:\n" " 1. The Power LED should blink or change color while the system is " "suspended\n" "VERIFICATION:\n" " Did the Power LED blink or change color while the system was suspended " "for the previous suspend test?" msgstr "" #. description #: ../jobs/led.txt.in:31 msgid "" "PURPOSE:\n" " Suspend LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a dedicated Suspend LED.\n" " 1. The Suspend LED should blink or change color while the system is\n" " suspended\n" "VERIFICATION\n" " Did the Suspend LED blink or change color while the system was suspended?" msgstr "" #. description #: ../jobs/led.txt.in:45 msgid "" "PURPOSE:\n" " Validate that the battery light shows charging status\n" "STEPS:\n" " 1. Let system run on battery for a while\n" " 2. Plug in AC plug\n" "VERIFICATION:\n" " Did the battery indicator LED turn orange?" msgstr "" #. description #: ../jobs/led.txt.in:58 msgid "" "PURPOSE:\n" " Validate that the battery LED properly displays charged status\n" "STEPS:\n" " 1. Let system run on battery for a short time\n" " 2. Plug in AC\n" " 3. Let system run on AC\n" "VERIFICATION:\n" " Does the orange battery LED shut off when system is fully charged?" msgstr "" #. description #: ../jobs/led.txt.in:72 msgid "" "PURPOSE:\n" " Validate that the battery LED indicated low power\n" "STEPS:\n" " 1. Let system run on battery for several hours\n" " 2. Monitor battery LED carefully\n" "VERIFICATION:\n" " Does the LED light orange when battery is low?" msgstr "" #. description #: ../jobs/led.txt.in:86 msgid "" "PURPOSE:\n" " HDD LED verification\n" "STEPS:\n" " 1. Select \"Test\" to write and read a temporary file for a few seconds\n" " 2. HDD LED should light when writing to/reading from HDD\n" "VERIFICATION:\n" " Did the HDD LED light?" msgstr "" #. description #: ../jobs/led.txt.in:100 msgid "" "PURPOSE:\n" " Numeric keypad LED verification\n" "STEPS:\n" " 1. Press \"Block Num\" key to toggle numeric keypad LED\n" " 2. Click on the \"Test\" button to open a window to verify your typing\n" " 3. Type using the numeric keypad both when the LED is on and off\n" "VERIFICATION:\n" " 1. Numeric keypad LED status should toggle everytime the \"Block Num\" " "key is pressed\n" " 2. Numbers should only be entered in the keyboard verification window " "when the LED is on" msgstr "" #. description #: ../jobs/led.txt.in:115 msgid "" "PURPOSE:\n" " Block cap keys LED verification\n" "STEPS:\n" " 1. Press \"Block Cap Keys\" to activate/deactivate cap keys blocking\n" " 2. Cap Keys LED should be switched on/off every time the key is pressed\n" "VERIFICATION:\n" " Did the Cap Keys LED light as expected?" msgstr "" #. description #: ../jobs/led.txt.in:129 msgid "" "PURPOSE:\n" " WLAN LED verification\n" "STEPS:\n" " 1. During the keys/wireless test you should have observed the\n" " wireless LED while turning wireless back on.\n" " 2. WLAN LED should light or change color when wireless is turned on\n" "VERIFICATION:\n" " Did the WLAN LED turn on or change color as expected?" msgstr "" #. description #: ../jobs/led.txt.in:144 msgid "" "PURPOSE:\n" " Validate that WLAN LED shuts off when disabled\n" "STEPS:\n" " 1. During the keys/wireless test you should have observed the WLAN LED\n" " while performing that test after turning wireless off.\n" " 2. WLAN LED should turn off or change color when wireless is turned off\n" "VERIFICATION:\n" " Did the WLAN LED turn off or change color as expected?" msgstr "" #. description #: ../jobs/led.txt.in:159 msgid "" "PURPOSE:\n" " Validate that the Bluetooth LED turns on and off when BT is " "enabled/disabled\n" "STEPS:\n" " 1. Switch bluetooth off from a hardware switch (if present)\n" " 2. Switch bluetooth back on\n" " 3. Switch bluetooth off from the panel applet\n" " 4. Switch bluetooth back on\n" "VERIFICATION:\n" " Did the bluetooth LED turn off and on twice?" msgstr "" #. description #: ../jobs/led.txt.in:176 msgid "" "PURPOSE:\n" " Camera LED verification\n" "STEPS:\n" " 1. Select Test to activate camera\n" " 2. Camera LED should light for a few seconds\n" "VERIFICATION:\n" " Did the camera LED light?" msgstr "" #. description #: ../jobs/led.txt.in:189 msgid "" "PURPOSE:\n" " Touchpad LED verification\n" "STEPS:\n" " 1. Click on the touchpad button or press key combination to " "enable/disable touchpad button\n" " 2. Slide your finger on the touchpad\n" "VERIFICATION:\n" " 1. Touchpad LED status should toggle everytime the button is clicked or " "the key combination is pressed\n" " 2. When the LED is on, the mouse pointer should move on touchpad usage\n" " 3. When the LED is off, the mouse pointer should not move on touchpad " "usage" msgstr "" #. description #: ../jobs/led.txt.in:204 msgid "" "PURPOSE:\n" " Wireless (WLAN + Bluetooth) LED verification\n" "STEPS:\n" " 1. Make sure WLAN connection is established and Bluetooth is enabled.\n" " 2. WLAN/Bluetooth LED should light\n" " 3. Switch WLAN and Bluetooth off from a hardware switch (if present)\n" " 4. Switch them back on\n" " 5. Switch WLAN and Bluetooth off from the panel applet\n" " 6. Switch them back on\n" "VERIFICATION:\n" " Did the WLAN/Bluetooth LED light as expected?" msgstr "" #. description #: ../jobs/led.txt.in:222 msgid "" "PURPOSE:\n" " Audio Mute LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a special Audio Mute LED.\n" " 1. Press the Mute key twice and observe the Audio LED to determine if " "it\n" " either turned off and on or changed colors.\n" "VERIFICATION:\n" " Did the Audio LED turn on and off or change color as expected?" msgstr "" #. description #: ../jobs/led.txt.in:237 msgid "" "PURPOSE:\n" " Microphone Mute LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a special Microphone Mute " "LED.\n" " 1. Press the Microphone Mute key twice and observe the Microphone LED " "to\n" " determine if it either turned off and on or changed colors.\n" "VERIFICATION:\n" " Did the Microphone Mute LED turn on and off or change color as expected?" msgstr "" #. description #: ../jobs/local.txt.in:3 msgid "Audio tests" msgstr "" #. description #: ../jobs/local.txt.in:10 msgid "Benchmarks tests" msgstr "" #. description #: ../jobs/local.txt.in:17 msgid "Bluetooth tests" msgstr "" #. description #: ../jobs/local.txt.in:24 msgid "Camera tests" msgstr "" #. description #: ../jobs/local.txt.in:31 msgid "Codec tests" msgstr "" #. description #: ../jobs/local.txt.in:38 msgid "CPU tests" msgstr "" #. description #: ../jobs/local.txt.in:45 msgid "System Daemon tests" msgstr "" #. description #: ../jobs/local.txt.in:52 msgid "Disk tests" msgstr "" #. description #: ../jobs/local.txt.in:59 msgid "Docking tests" msgstr "" #. description #: ../jobs/local.txt.in:66 msgid "Ethernet Device tests" msgstr "" #. description #: ../jobs/local.txt.in:73 msgid "eSATA disk tests" msgstr "" #. description #: ../jobs/local.txt.in:80 msgid "Fingerprint reader tests" msgstr "" #. description #: ../jobs/local.txt.in:87 msgid "Firewire disk tests" msgstr "" #. description #: ../jobs/local.txt.in:94 msgid "Firmware tests" msgstr "" #. description #: ../jobs/local.txt.in:101 msgid "Floppy disk tests" msgstr "" #. description #: ../jobs/local.txt.in:108 msgid "Graphics tests" msgstr "" #. description #: ../jobs/local.txt.in:115 msgid "Hibernation tests" msgstr "" #. description #: ../jobs/local.txt.in:122 msgid "Informational tests" msgstr "" #. description #: ../jobs/local.txt.in:129 msgid "Input Devices tests" msgstr "" #. description #: ../jobs/local.txt.in:136 msgid "Software Installation tests" msgstr "" #. description #: ../jobs/local.txt.in:143 msgid "Hotkey tests" msgstr "" #. description #: ../jobs/local.txt.in:150 msgid "LED tests" msgstr "" #. description #: ../jobs/local.txt.in:157 msgid "Media Card tests" msgstr "" #. description #: ../jobs/local.txt.in:164 msgid "Memory tests" msgstr "" #. description #: ../jobs/local.txt.in:171 msgid "Rendercheck tests" msgstr "" #. description #: ../jobs/local.txt.in:178 msgid "MIR tests" msgstr "" #. description #: ../jobs/local.txt.in:185 msgid "Miscellaneous tests" msgstr "" #. description #: ../jobs/local.txt.in:192 msgid "Monitor tests" msgstr "" #. description #: ../jobs/local.txt.in:199 msgid "Non-device specific networking tests" msgstr "" #. description #: ../jobs/local.txt.in:206 msgid "Optical Drive tests" msgstr "" #. description #: ../jobs/local.txt.in:213 msgid "Panel Clock Verification tests" msgstr "" #. description #: ../jobs/local.txt.in:220 msgid "Panel Reboot Verification tests" msgstr "" #. description #: ../jobs/local.txt.in:227 msgid "ExpressCard tests" msgstr "" #. description #: ../jobs/local.txt.in:234 msgid "Peripheral tests" msgstr "" #. description #: ../jobs/local.txt.in:241 msgid "Power Management tests" msgstr "" #. description #: ../jobs/local.txt.in:248 msgid "Server Services checks" msgstr "" #. description #: ../jobs/local.txt.in:255 msgid "Suspend tests" msgstr "" #. description #: ../jobs/local.txt.in:262 msgid "Thunderbolt tests" msgstr "" #. description #: ../jobs/local.txt.in:269 msgid "Touchpad tests" msgstr "" #. description #: ../jobs/local.txt.in:276 msgid "Touchscreen tests" msgstr "" #. description #: ../jobs/local.txt.in:283 msgid "USB tests" msgstr "" #. description #: ../jobs/local.txt.in:290 msgid "User Applications" msgstr "" #. description #: ../jobs/local.txt.in:297 msgid "Virtualization tests" msgstr "" #. description #: ../jobs/local.txt.in:304 msgid "Wireless networking tests" msgstr "" #. description #: ../jobs/local.txt.in:311 msgid "Mobile broadband tests" msgstr "" #. description #: ../jobs/local.txt.in:318 msgid "Stress tests" msgstr "" #. description #: ../jobs/local.txt.in:325 msgid "Smoke tests" msgstr "" #. description #: ../jobs/mediacard.txt.in:6 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Multimedia Card (MMC) media\n" "STEPS:\n" " 1. Click \"Test\" and then insert an MMC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:26 msgid "" "This test is automated and executes after the mediacard/mmc-insert test is " "run. It tests reading and writing to the MMC card." msgstr "" #. description #: ../jobs/mediacard.txt.in:36 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of the MMC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the MMC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:52 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED Secure Digital (SD) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:72 msgid "" "This test is automated and executes after the mediacard/sd-insert test is " "run. It tests reading and writing to the SD card." msgstr "" #. description #: ../jobs/mediacard.txt.in:82 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SD card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:100 msgid "" "This is a fully automated version of mediacard/sd-automated and assumes that " "the system under test has a memory card device plugged in prior to checkbox " "execution. It is intended for SRU automated testing." msgstr "" #. description #: ../jobs/mediacard.txt.in:110 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a UNLOCKED Secure Digital High-Capacity\n" " (SDHC) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SDHC card into the " "reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:131 msgid "" "This test is automated and executes after the mediacard/sdhc-insert test is " "run. It tests reading and writing to the SDHC card." msgstr "" #. description #: ../jobs/mediacard.txt.in:141 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SDHC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SDHC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:157 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Compact Flash (CF) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a CF card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:177 msgid "" "This test is automated and executes after the mediacard/cf-insert test is " "run. It tests reading and writing to the CF card." msgstr "" #. description #: ../jobs/mediacard.txt.in:187 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a CF card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the CF card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:203 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Secure Digital Extended Capacity (SDXC) media " "card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SDXC card into the " "reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:223 msgid "" "This test is automated and executes after the mediacard/sdxc-insert test is " "run. It tests reading and writing to the SDXC card." msgstr "" #. description #: ../jobs/mediacard.txt.in:233 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a SDXC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SDXC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:249 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Memory Stick (MS) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a MS card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:269 msgid "" "This test is automated and executes after the mediacard/ms-insert test is " "run. It tests reading and writing to the MS card." msgstr "" #. description #: ../jobs/mediacard.txt.in:279 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a MS card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the MS card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:295 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Memory Stick Pro (MSP) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a MSP card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:315 msgid "" "This test is automated and executes after the mediacard/msp-insert test is " "run. It tests reading and writing to the MSP card." msgstr "" #. description #: ../jobs/mediacard.txt.in:325 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a MSP card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MSP card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:341 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Extreme Digital (xD) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a xD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:361 msgid "" "This test is automated and executes after the mediacard/xd-insert test is " "run. It tests reading and writing to the xD card." msgstr "" #. description #: ../jobs/mediacard.txt.in:371 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a xD card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the xD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:389 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SD card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:405 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SDHC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:421 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MMC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:437 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert CF card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:453 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SDXC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:469 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MS card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:485 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MSP card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:501 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert xD card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/memory.txt.in:7 msgid "" "This test checks the amount of memory which is reporting in meminfo against " "the size of the memory modules detected by DMI." msgstr "" #. description #: ../jobs/memory.txt.in:19 msgid "" "Test to perform some basic stress and exercise of system memory. This test " "also includes an over-commit function to force swapping to disk, thus SUTs " "should have suitably large swap files for the amount of RAM they have " "installed." msgstr "" #. description #: ../jobs/mir.txt.in:5 msgid "MIR Integration tests" msgstr "" #. description #: ../jobs/mir.txt.in:21 msgid "MIR Acceptance tests" msgstr "" #. description #: ../jobs/miscellanea.txt.in:17 msgid "" "A meta-job that verifies the data necessary for a complete result submission " "are present. Failure indicates that the results are incomplete and may be " "rejected." msgstr "" #. description #: ../jobs/miscellanea.txt.in:25 msgid "" "PURPOSE:\n" " Keep tester related information in the report\n" "STEPS:\n" " 1. Tester Information\n" " 2. Please enter the following information in the comments field:\n" " a. Name\n" " b. Email Address\n" " c. Reason for this test run\n" "VERIFICATION:\n" " Nothing to verify for this test" msgstr "" #. description #: ../jobs/miscellanea.txt.in:44 msgid "" "PURPOSE:\n" " This test will check that the system can switch to a virtual terminal " "and back to X\n" "STEPS:\n" " 1. Click \"Test\" to switch to another virtual terminal and then back to " "X\n" "VERIFICATION:\n" " Did your screen change temporarily to a text console and then switch " "back to your current session?" msgstr "" #. description #: ../jobs/miscellanea.txt.in:59 msgid "Run Firmware Test Suite (fwts) automated tests." msgstr "" #. description #: ../jobs/miscellanea.txt.in:70 msgid "Attaches the miscellanes/fwts_test results log to the submission." msgstr "" #. description #: ../jobs/miscellanea.txt.in:78 msgid "Attaches the FWTS results log to the submission (to HWE)" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:79 msgid "Attach FWTS log to submission (to HWE)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:87 msgid "" "This will run some basic commands in-band against a BMC, verifying that IPMI " "works. Use of MAAS to deploy the system implicitly tests out-of-band BMC " "control." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:98 msgid "EFI-mode boot test" msgstr "" #. description #: ../jobs/miscellanea.txt.in:99 msgid "" "Test to verify that the system booted in EFI mode rather than Legacy/BIOS " "mode." msgstr "" #. description #: ../jobs/miscellanea.txt.in:116 msgid "" "This will gather some info about the BMC itself for diagnostic purposes. " "This will not works on non-IPMI systems like AMT and blade/sled type systems." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:119 msgid "Gather BMC Identification info" msgstr "" #. description #: ../jobs/miscellanea.txt.in:129 msgid "" "Sanity check of CPU information; fails if CPU is an engineering sample" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:131 msgid "CPU sanity check" msgstr "" #. description #: ../jobs/miscellanea.txt.in:141 msgid "Sanity check of DMI system identification data (for servers)" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:143 msgid "DMI ID sanity check (servers)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:153 msgid "" "Sanity check of DMI system identification data (for desktops & laptops)" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:155 msgid "DMI ID sanity check (desktops/laptops)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:162 msgid "" " Determine if we need to run tests specific to portable computers that may " "not apply to desktops." msgstr "" #. description #: ../jobs/miscellanea.txt.in:171 msgid "" "Test that the /var/crash directory doesn't contain anything. Lists the files " "contained within if it does, or echoes the status of the directory (doesn't " "exist/is empty)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:178 msgid "" "Checks that a specified sources list file contains the requested repositories" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:187 msgid "PXE verification test of device {__index__} ({interface})" msgstr "" #. purpose #: ../jobs/miscellanea.txt.in:189 msgid "" "This test will verify that you have attempted to PXE boot this machine from " "the network device {__index__} ({interface})." msgstr "" #. steps #: ../jobs/miscellanea.txt.in:192 msgid "" "1. Prior to running this test, you should have attempted to boot this system " "via PXE on every Network Port available." msgstr "" #. verification #: ../jobs/miscellanea.txt.in:194 msgid "" "1. Select Yes if you successfully used PXE boot this system using the NIC " "{interface} 2. Select No if you did not attempt to PXE boot this system " "using the NIC {interface} 3. Select No if you attempted to PXE boot via " "{interface} and it failed for some reason." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:206 msgid "" "Remote Shared IPMI verification test for device {__index__} ({interface})" msgstr "" #. purpose #: ../jobs/miscellanea.txt.in:208 msgid "" "This test will verify that you have attempted IPMI control of this machine " "from the network device {__index__} ({interface})." msgstr "" #. steps #: ../jobs/miscellanea.txt.in:210 msgid "" "1. Prior to running this test, you should have configured and used IPMI to " "power this machine off and on using every Network Port available." msgstr "" #. verification #: ../jobs/miscellanea.txt.in:212 msgid "" "1. Select Yes if you successfully used IPMI to remotely power this system " "off and on using the NIC {interface} 2. Select No if you did not attempt to " "use IPMI to remotely power this sytem off and on via the NIC {interface} 3. " "Select No if you attempted to use IPMI to remotely power off/on this system " "via {interface} and it failed for some reason." msgstr "" #. description #: ../jobs/miscellanea.txt.in:220 msgid "" "PURPOSE:\n" " Some systems do not share IPMI over all NICs but instead have a dedicated " "management port directly connected to the BMC. This test verifies that you " "have used that port for remote IPMI connections and actions.\n" "STEPS:\n" " 1. Prior to running the test, you should have configured and used the " "Dedicated Management Port to remotely power off/on this sytem.\n" "VERIFICATION:\n" " Skip this test if this system ONLY uses shared management/ethernet ports OR " "if this system does not have a BMC (Management Console)\n" " 1. Select Yes if you successfully used IPMI to remotely power this system " "off and on using the dedicated management port.\n" " 2. Select No if you attempted to use the dedicated management port to " "remotely power this system off/on and it failed for some reason." msgstr "" #. description #: ../jobs/miscellanea.txt.in:236 msgid "Run Firmware Test Suite (fwts) oops tests." msgstr "" #. description #: ../jobs/miscellanea.txt.in:248 msgid "Attaches the FWTS oops results log to the submission" msgstr "" #. description #: ../jobs/miscellanea.txt.in:261 msgid "" "If system was installed via MAAS from a cert server, the MAAS version used " "should be contained in /etc/installed-by-maas" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:262 msgid "Gets the version of MAAS used to deploy the SUT" msgstr "" #. description #: ../jobs/miscellanea.txt.in:270 msgid "" "Retrieve the computer's make and model for easier access than digging " "through the dmidecode output." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:271 msgid "Retrieve the computer's make and model" msgstr "" #. description #: ../jobs/mobilebroadband.txt.in:29 msgid "" "Creates a mobile broadband connection for a GSM based modem and checks the " "connection to ensure it's working. " msgstr "" #. description #: ../jobs/mobilebroadband.txt.in:58 msgid "" "Creates a mobile broadband connection for a CDMA based modem and checks the " "connection to ensure it's working." msgstr "" #. purpose #: ../jobs/mobilebroadband.txt.in:102 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of device {__index__} ({interface})." msgstr "" #. summary #: ../jobs/monitor.txt.in:3 msgid "VGA port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:23 msgid "DVI port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:43 msgid "DisplayPort test" msgstr "" #. summary #: ../jobs/monitor.txt.in:63 msgid "HDMI port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:83 msgid "S-VIDEO port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:103 msgid "RCA port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:123 msgid "Multi-monitor test" msgstr "" #. summary #: ../jobs/monitor.txt.in:146 msgid "Monitor power-saving test" msgstr "" #. summary #: ../jobs/monitor.txt.in:166 msgid "Screen dimming test" msgstr "" #. summary #: ../jobs/monitor.txt.in:189 msgid "Thunderbolt monitor test" msgstr "" #. description #: ../jobs/networking.txt.in:7 msgid "Tests whether the system has a working Internet connection." msgstr "" #. summary #: ../jobs/networking.txt.in:16 msgid "Network Information of device {__index__} ({interface})" msgstr "" #. description #: ../jobs/networking.txt.in:20 msgid "" "PURPOSE:\n" " This test will check the network device {__index__} ({interface})\n" "STEPS:\n" " 1. Click \"Test\" to verify the information for this network device\n" "VERIFICATION:\n" " Is this correct?" msgstr "" #. description #: ../jobs/networking.txt.in:32 msgid "" "PURPOSE:\n" " This test will check that a DSL modem can be configured and connected.\n" "STEPS:\n" " 1. Connect the telephone line to the computer\n" " 2. Click on the Network icon on the top panel.\n" " 3. Select \"Edit Connections\"\n" " 4. Select the \"DSL\" tab\n" " 5. Click on \"Add\" button\n" " 6. Configure the connection parameters properly\n" " 7. Click \"Test\" to verify that it's possible to establish an HTTP " "connection\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" #. description #: ../jobs/networking.txt.in:50 msgid "" "Automated test case to verify availability of some system on the network " "using ICMP ECHO packets." msgstr "" #. description #: ../jobs/networking.txt.in:57 ../jobs/peripheral.txt.in:40 msgid "" "Automated test case to make sure that it's possible to download files " "through HTTP" msgstr "" #. description #: ../jobs/networking.txt.in:66 msgid "Test to see if we can sync local clock to an NTP server" msgstr "" #. description #: ../jobs/networking.txt.in:73 msgid "" "Verify that an installation of checkbox-server on the network can be reached " "over SSH." msgstr "" #. description #: ../jobs/networking.txt.in:80 msgid "Try to enable a remote printer on the network and print a test page." msgstr "" #. description #: ../jobs/optical.txt.in:6 msgid "Detects optical drives (CD/DVD) attached to the system." msgstr "" #. description #: ../jobs/optical.txt.in:18 msgid "Optical read test." msgstr "" #. summary #: ../jobs/optical.txt.in:40 msgid "Automated optical read test." msgstr "" #. description #: ../jobs/optical.txt.in:45 msgid "" "Automated test to read a data CD/DVD and ensure the optical drive works " "properly." msgstr "" #. description #: ../jobs/optical.txt.in:66 msgid "CD write test." msgstr "" #. description #: ../jobs/optical.txt.in:96 msgid "Automated CD write test" msgstr "" #. description #: ../jobs/optical.txt.in:117 msgid "" "PURPOSE:\n" " This test will check your CD audio playback capabilities\n" "STEPS:\n" " 1. Insert an audio CD in your optical drive\n" " 2. When prompted, launch the Music Player\n" " 3. Locate the CD in the display of the Music Player\n" " 4. Select the CD in the Music Player\n" " 5. Click the Play button to listen to the music on the CD\n" " 6. Stop playing after some time\n" " 7. Right click on the CD icon and select \"Eject Disc\"\n" " 8. The CD should be ejected\n" " 9. Close the Music Player\n" "VERIFICATION:\n" " Did all the steps work?" msgstr "" #. description #: ../jobs/optical.txt.in:139 msgid "DVD write test." msgstr "" #. description #: ../jobs/optical.txt.in:169 msgid "Automated DVD write test." msgstr "" #. description #: ../jobs/optical.txt.in:193 msgid "" "PURPOSE:\n" " This test will check your DVD playback capabilities\n" "STEPS:\n" " 1. Insert a DVD that contains any movie in your optical drive\n" " 2. Click \"Test\" to play the DVD in Totem\n" "VERIFICATION:\n" " Did the file play?" msgstr "" #. description #: ../jobs/optical.txt.in:207 msgid "Automated Blu-Ray read test." msgstr "" #. description #: ../jobs/optical.txt.in:235 msgid "Automated Blu-Ray write test." msgstr "" #. description #: ../jobs/panel_clock_test.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that the desktop clock displays the correct date " "and time\n" "STEPS:\n" " 1. Check the clock in the upper right corner of your desktop.\n" "VERIFICATION:\n" " Is the clock displaying the correct date and time for your timezone?" msgstr "" #. description #: ../jobs/panel_clock_test.txt.in:18 msgid "" "PURPOSE:\n" " This test will verify that the desktop clock synchronizes with the system " "clock.\n" "STEPS:\n" " 1. Commence the test and verify the clock moves ahead by 1 hour.\n" " Note: It may take a minute or so for the clock to refresh\n" " 2. Right click on the clock, then click on \"Time & Date Settings...\"\n" " 3. Ensure that your clock application is set to manual.\n" " 4. Change the time 1 hour back\n" " 5. Close the window and reboot\n" "VERIFICATION:\n" " Is your system clock displaying the correct date and time for your " "timezone?" msgstr "" #. description #: ../jobs/panel_reboot.txt.in:3 msgid "" "PURPOSE:\n" " This test will verify that you can reboot your system from the desktop " "menu\n" "STEPS:\n" " 1. Click the Gear icon in the upper right corner of the desktop and click " "on \"Shut Down\"\n" " 2. Click the \"Restart\" button on the left side of the Shut Down dialog\n" " 3. After logging back in, restart System Testing and it should resume " "here\n" "VERIFICATION:\n" " Did your system restart and bring up the GUI login cleanly?" msgstr "" #. description #: ../jobs/peripheral.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that a network printer is usable\n" "STEPS:\n" " 1. Make sure that a printer is available in your network\n" " 2. Click on the Gear icon in the upper right corner and then click on " "Printers\n" " 3. If the printer isn't already listed, click on Add\n" " 4. The printer should be detected and proper configuration values should " "be displayed\n" " 5. Print a test page\n" "VERIFICATION:\n" " Were you able to print a test page to the network printer?" msgstr "" #. description #: ../jobs/peripheral.txt.in:20 msgid "" "PURPOSE:\n" " This test will verify that a USB DSL or Mobile Broadband modem works\n" "STEPS:\n" " 1. Connect the USB cable to the computer\n" " 2. Right click on the Network icon in the panel\n" " 3. Select 'Edit Connections'\n" " 4. Select the 'DSL' (for ADSL modem) or 'Mobile Broadband' (for 3G modem) " "tab\n" " 5. Click on 'Add' button\n" " 6. Configure the connection parameters properly\n" " 7. Notify OSD should confirm that the connection has been established\n" " 8. Select Test to verify that it's possible to establish an HTTP " "connection\n" "VERIFICATION:\n" " Was the connection correctly established?" msgstr "" #. description #: ../jobs/power-management.txt.in:5 msgid "" "PURPOSE:\n" " This test will check your system shutdown/booting cycle.\n" "STEPS:\n" " 1. Shutdown your machine.\n" " 2. Boot your machine.\n" " 3. Repeat steps 1 and 2 at least 5 times.\n" "VERIFICATION:\n" " Did the system shutdown and rebooted correctly?" msgstr "" #. description #: ../jobs/power-management.txt.in:21 msgid "Test ACPI Wakealarm (fwts wakealarm)" msgstr "" #. description #: ../jobs/power-management.txt.in:31 msgid "Attach log from fwts wakealarm test" msgstr "" #. description #: ../jobs/power-management.txt.in:48 msgid "" "PURPOSE:\n" " This test will check the system's ability to power-off and boot.\n" "STEPS:\n" " 1. Select \"Test\" to begin.\n" " 2. The machine will shut down.\n" " 3. Power the machine back on.\n" " 4. After rebooting, wait for the test prompts to inform you that the test " "is complete.\n" " 5. Once the test has completed, restart checkbox and select 'Re-run' when " "prompted.\n" "VERIFICATION:\n" " If the machine successfully shuts down and boots, select 'Yes', otherwise,\n" " select 'No'." msgstr "" #. description #: ../jobs/power-management.txt.in:68 msgid "" "This will attach any logs from the power-management/poweroff test to the " "results." msgstr "" #. description #: ../jobs/power-management.txt.in:82 msgid "" "PURPOSE:\n" " This test will check the system's ability to reboot cleanly.\n" "STEPS:\n" " 1. Select \"Test\" to begin.\n" " 2. The machine will reboot.\n" " 3. After rebooting, wait for the test prompts to inform you that the test " "is complete.\n" " 4. Once the test has completed, restart checkbox and select Re-Run when " "prompted.\n" "VERIFICATION:\n" " If the machine successfully reboots, select Yes then select Next." msgstr "" #. description #: ../jobs/power-management.txt.in:100 msgid "" "This will attach any logs from the power-management/reboot test to the " "results." msgstr "" #. description #: ../jobs/power-management.txt.in:108 msgid "" "PURPOSE:\n" " This test will check your lid sensors.\n" "STEPS:\n" " 1. Close your laptop lid.\n" "VERIFICATION:\n" " Does closing your laptop lid cause your system to suspend?" msgstr "" #. description #: ../jobs/power-management.txt.in:127 msgid "" "PURPOSE:\n" " This test will check your lid sensors\n" "STEPS:\n" " 1. Click \"Test\".\n" " 2. Close and open the lid.\n" "VERIFICATION:\n" " Did the screen turn off while the lid was closed?" msgstr "" #. description #: ../jobs/power-management.txt.in:147 msgid "" "PURPOSE:\n" " This test will check your lid sensors.\n" "STEPS:\n" " 1. Click \"Test\".\n" " 2. Close the lid.\n" " 3. Wait 5 seconds with the lid closed.\n" " 4. Open the lid.\n" "VERIFICATION:\n" " Did the system resume when the lid was opened?" msgstr "" #. description #: ../jobs/power-management.txt.in:168 msgid "" "Verify that the Real-time clock (RTC) device functions properly, if present." msgstr "" #. description #: ../jobs/power-management.txt.in:176 msgid "" "Check to see if CONFIG_NO_HZ is set in the kernel (this is just a simple " "regression check)" msgstr "" #. description #: ../jobs/power-management.txt.in:184 msgid "" "PURPOSE:\n" " This test will ensure that the AC is unplugged for the battery drain " "tests to run.\n" "STEPS:\n" " 1. Unplug laptop from AC.\n" "VERIFICATION:\n" " Was the laptop unplugged from AC?" msgstr "" #. description #: ../jobs/power-management.txt.in:198 msgid "" "Checks the battery drain during idle. Reports time and capacity until empty " "and capacity." msgstr "" #. description #: ../jobs/power-management.txt.in:209 msgid "" "Checks the battery drain while watching a movie. Reports time and capacity " "until empty. Requires MOVIE_VAR to be set." msgstr "" #. description #: ../jobs/power-management.txt.in:222 msgid "" "Checks the battery drain during suspend. Reports time and capacity until " "empty." msgstr "" #. description #: ../jobs/power-management.txt.in:231 msgid "" "PURPOSE:\n" " This test will ensure that the AC is plugged back in after the battery.\n" " tests\n" "STEPS:\n" " 1. Plug laptop into AC.\n" "VERIFICATION:\n" " Was the laptop plugged into AC?" msgstr "" #. description #: ../jobs/power-management.txt.in:246 msgid "" "PURPOSE:\n" " This test will verify that your system can successfully reboot.\n" "STEPS:\n" " 1. Select 'Test' to initiate a system reboot.\n" " 2. When the grub boot menu is displayed, boot into Ubuntu (Or allow the\n" " system to automatically boot on its own).\n" " 3. Once the system has restarted, log in and restart checkbox-" "certification-server.\n" " 4. Select 'Re-Run' to return to this test.\n" " 5. Select 'Yes' to indicate the test has passed if the system rebooted\n" " successfully, otherwise, select 'No' to indicate there was a problem.\n" "VERIFICATION:\n" " Did the system reboot correctly?" msgstr "" #. description #: ../jobs/power-management.txt.in:266 msgid "" "PURPOSE:\n" " This test will check your system shutdown/booting cycle\n" "STEPS:\n" " 1. Select 'Test' to initiate a system shutdown.\n" " 2. Power the system back on.\n" " 3. From the grub menu, boot into the Xen Hypervisor.\n" " 4. When the system has restarted, log in and restart checkbox-" "certification-server.\n" " 5. Select 'Re-Run' to return to this test.\n" " 6. Select 'Yes' to indicate the test has passed if the machine shut " "down\n" " successfully otherwise, Select 'No' to indicate there was a problem.\n" "VERIFICATION:\n" " Did the system shutdown and boot correctly?" msgstr "" #. description #: ../jobs/rendercheck.txt.in:7 msgid "" "Runs all of the rendercheck test suites. This test can take a few minutes." msgstr "" #. description #: ../jobs/rendercheck.txt.in:15 msgid "Attach log from rendercheck tests" msgstr "" #. description #: ../jobs/server-services.txt.in:5 msgid "Verifies that sshd is running." msgstr "" #. description #: ../jobs/server-services.txt.in:11 msgid "Verifies that Print/CUPs server is running." msgstr "" #. description #: ../jobs/server-services.txt.in:20 msgid "Verifies that DNS server is running and working." msgstr "" #. description #: ../jobs/server-services.txt.in:29 msgid "Verifies that Samba server is running." msgstr "" #. description #: ../jobs/server-services.txt.in:40 msgid "Verifies that the LAMP stack is running (Apache, MySQL and PHP)." msgstr "" #. description #: ../jobs/server-services.txt.in:47 msgid "Verifies that Tomcat server is running and working." msgstr "" #. description #: ../jobs/smoke.txt.in:4 msgid "Check success result from shell test case" msgstr "" #. description #: ../jobs/smoke.txt.in:10 msgid "Check failed result from shell test case" msgstr "" #. description #: ../jobs/smoke.txt.in:17 msgid "Check job is executed when dependency succeeds" msgstr "" #. description #: ../jobs/smoke.txt.in:24 msgid "Check job result is set to uninitiated when dependency fails" msgstr "" #. description #: ../jobs/smoke.txt.in:31 msgid "Check job is executed when requirements are met" msgstr "" #. description #: ../jobs/smoke.txt.in:38 msgid "" "Check job result is set to \"not required on this system\" when requirements " "are not met" msgstr "" #. description #: ../jobs/smoke.txt.in:43 msgid "" "PURPOSE:\n" " This test checks that the manual plugin works fine\n" "STEPS:\n" " 1. Add a comment\n" " 2. Set the result as passed\n" "VERIFICATION:\n" " Check that in the report the result is passed and the comment is " "displayed" msgstr "" #. description #: ../jobs/stress.txt.in:9 msgid "" "Simulate high system load using the 'stress' tool to exercise the CPU for " "several hours. The test is considered passed if the system does not freeze " "or abend." msgstr "" #. description #: ../jobs/stress.txt.in:33 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "hibernate/resume for 30 cycles" msgstr "" #. description #: ../jobs/stress.txt.in:42 msgid "" "Automated check of the 30 cycle hibernate log for errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:50 msgid "Attaches the log from the 30 cycle Hibernate/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:63 msgid "" "This is an automated stress test that will run a sequence of '30 " "suspend/resume cycles and one reboot' 3 times." msgstr "" #. description #: ../jobs/stress.txt.in:83 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "suspend/resume for 30 cycles." msgstr "" #. description #: ../jobs/stress.txt.in:93 msgid "" "Automated check of the 30 cycle suspend log for errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:102 msgid "" "Automated check of the '30 cycle suspend and 1 reboot times 3' logs for " "errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:111 msgid "Attaches the log from the 30 cycle Suspend/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:120 msgid "" "Attaches the log from the '30 cycle Suspend/Resume and one reboot times 3' " "test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:156 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "hibernate/resume for 250 cycles" msgstr "" #. description #: ../jobs/stress.txt.in:165 msgid "" "Attaches the log from the 250 cycle Hibernate/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:183 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to " "suspend/resume for 250 cycles." msgstr "" #. description #: ../jobs/stress.txt.in:192 msgid "Attaches the log from the 250 cycle Suspend/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:200 ../jobs/suspend.txt.in:388 msgid "" "Checks the sleep times to ensure that a machine suspends and resumes within " "a given threshold" msgstr "" #. description #: ../jobs/stress.txt.in:214 msgid "Stress reboot system (100 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:237 msgid "Stress reboot system (30 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:259 msgid "Stress poweroff system (100 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:282 msgid "Stress poweroff system (30 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:299 msgid "Check logs for the stress reboot (30 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:316 msgid "Check logs for the stress poweroff (30 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:333 msgid "Check logs for the stress reboot (100 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:350 msgid "Check logs for the stress poweroff (100 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:370 msgid "Run the graphics stress test. This test can take a few minutes." msgstr "" #. description #: ../jobs/stress.txt.in:380 msgid "Attaches the graphics stress results to the submission." msgstr "" #. description #: ../jobs/stress.txt.in:388 msgid "Runs a test that transfers 100 10MB files 3 times to usb." msgstr "" #. summary #: ../jobs/stress.txt.in:394 msgid "Stress test for SDHC card" msgstr "" #. description #: ../jobs/stress.txt.in:397 msgid "" "PURPOSE:\n" " This test will transfers 100 10MB files 3 times to a SDHC card, to\n" " check that the systems media card reader can transfer large amounts\n" " of data.\n" "STEPS:\n" " 1. Insert a SDHC card into the reader and then Click \"Test\".\n" " If a file browser opens up, you can safely close it.\n" " 2. Do not remove the device during this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/stress.txt.in:417 msgid "Ping ubuntu.com and restart network interfaces 100 times" msgstr "" #. description #: ../jobs/stress.txt.in:431 msgid "" "PURPOSE:\n" " To make sure that stressing the wifi hotkey does not cause applets to " "disappear from the panel or the system to lock up\n" "STEPS:\n" " 1. Log in to desktop\n" " 2. Press wifi hotkey at a rate of 1 press per second and slowly increase " "the speed of the tap, until you are tapping as fast as possible\n" "VERIFICATION:\n" " Verify the system is not frozen and the wifi and bluetooth applets are " "still visible and functional" msgstr "" #. description #: ../jobs/suspend.txt.in:6 msgid "Record the current network before suspending." msgstr "" #. summary #: ../jobs/suspend.txt.in:19 msgid "Record the current resolution before suspending." msgstr "" #. description #: ../jobs/suspend.txt.in:38 msgid "Record mixer settings before suspending." msgstr "" #. description #: ../jobs/suspend.txt.in:45 msgid "Verify that all the CPUs are online before suspending" msgstr "" #. description #: ../jobs/suspend.txt.in:52 msgid "" "Dumps memory info to a file for comparison after suspend test has been run" msgstr "" #. description #: ../jobs/suspend.txt.in:63 msgid "" "This test disconnects all connections and then connects to the wireless " "interface. It then checks the connection to confirm it's working as expected." msgstr "" #. description #: ../jobs/suspend.txt.in:100 msgid "" "This test executes iperf connection performance/stability against device " "{__index__} ({interface}) before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:128 msgid "" "This test executes iperf connection performance/stability against the " "broadband device found on the system before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:232 msgid "" "PURPOSE:\n" " This test will check suspend and resume\n" "STEPS:\n" " 1. Click \"Test\" and your system will suspend for about 30 - 60 " "seconds\n" " 2. Observe the Power LED to see if it blinks or changes color during " "suspend\n" " 3. If your system does not wake itself up after 60 seconds, please press " "the power button momentarily to wake the system manually\n" " 4. If your system fails to wake at all and must be rebooted, restart " "System Testing after reboot and mark this test as Failed\n" "VERIFICATION:\n" " Did your system suspend and resume correctly?\n" " (NOTE: Please only consider whether the system successfully suspended " "and resumed. Power/Suspend LED verification will occur after this test is " "completed.)" msgstr "" #. summary #: ../jobs/suspend.txt.in:247 msgid "Suspend after graphics card switch tests" msgstr "" #. description #: ../jobs/suspend.txt.in:290 msgid "This is the automated version of suspend/suspend_advanced." msgstr "" #. summary #: ../jobs/suspend.txt.in:299 msgid "Hybrid sleep test" msgstr "" #. description #: ../jobs/suspend.txt.in:327 msgid "" "Automated check of the suspend log to look for errors reported by fwts" msgstr "" #. summary #: ../jobs/suspend.txt.in:339 msgid "Suspend log attach" msgstr "" #. summary #: ../jobs/suspend.txt.in:354 msgid "Hybrid sleep log check test" msgstr "" #. summary #: ../jobs/suspend.txt.in:370 msgid "Hybrid sleep log attach" msgstr "" #. summary #: ../jobs/suspend.txt.in:393 msgid "Suspend time check test" msgstr "" #. description #: ../jobs/suspend.txt.in:413 msgid "" "PURPOSE:\n" " Wake up by USB keyboard\n" "STEPS:\n" " 1. Enable \"Wake by USB KB/Mouse\" item in BIOS\n" " 2. Press \"Test\" to enter suspend (S3) mode\n" " 3. Press any key of USB keyboard to wake system up\n" "VERIFICATION:\n" " Did the system wake up from suspend mode when you pressed a keyboard key?" msgstr "" #. description #: ../jobs/suspend.txt.in:430 msgid "" "PURPOSE:\n" " Wake up by USB mouse\n" "STEPS:\n" " 1. Enable \"Wake by USB KB/Mouse\" item in BIOS\n" " 2. Press \"Test\" to enter suspend (S3) mode\n" " 3. Press any button of USB mouse to wake system up\n" "VERIFICATION:\n" " Did the system wake up from suspend mode when you pressed the mouse " "button?" msgstr "" #. description #: ../jobs/suspend.txt.in:445 msgid "Test the network after resuming." msgstr "" #. description #: ../jobs/suspend.txt.in:453 msgid "" "Test to see that we have the same resolution after resuming as before." msgstr "" #. summary #: ../jobs/suspend.txt.in:459 msgid "" "Resolution consistency check after suspend with the valuse we got before " "suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:492 msgid "" "Verify that mixer settings after suspend are the same as before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:506 msgid "" "PURPOSE:\n" " Check that system detects speakers or headphones being plugged in after " "suspend\n" "STEPS:\n" " 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack\n" " 2. Locate the speaker / headphone jack on the device under test\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug headphones or speakers into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/suspend.txt.in:528 msgid "" "PURPOSE:\n" " Check that system detects a microphone being plugged in after suspend\n" "STEPS:\n" " 1. Prepare a microphone with a standard 3.5mm jack\n" " 2. Locate the microphone jack on the device under test.\n" " Keep in mind that it may be shared with the headphone jack.\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug the microphone into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/suspend.txt.in:559 msgid "" "PURPOSE:\n" " This test will check that headphones connector works correctly after " "suspend\n" "STEPS:\n" " 1. Connect a pair of headphones to your audio device\n" " 2. Commence the test to play a sound to your audio device\n" "VERIFICATION:\n" " Did you hear a sound through the headphones and did the sound play " "without any distortion, clicks or other strange noises from your headphones?" msgstr "" #. description #: ../jobs/suspend.txt.in:585 msgid "" "PURPOSE:\n" " This test will check that recording sound using an external microphone " "works correctly after suspend\n" "STEPS:\n" " 1. Connect a microphone to your microphone port\n" " 2. Click \"Test\", then speak into the external microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/suspend.txt.in:608 msgid "Verify that all CPUs are online after resuming." msgstr "" #. description #: ../jobs/suspend.txt.in:625 msgid "Verify that all memory is available after resuming from suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:634 msgid "" "PURPOSE:\n" " This test will check that the display is correct after suspend and " "resume\n" "STEPS:\n" " 1. Check that your display does not show up visual artifacts after " "resuming.\n" "VERIFICATION:\n" " Does the display work normally after resuming from suspend?" msgstr "" #. summary #: ../jobs/suspend.txt.in:645 msgid "Display after suspend tests" msgstr "" #. description #: ../jobs/suspend.txt.in:671 msgid "" "This test checks that the wireless interface is working after suspending the " "system. It disconnects all interfaces and then connects to the wireless " "interface and checks that the connection is working as expected." msgstr "" #. description #: ../jobs/suspend.txt.in:891 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11b/g protocols after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:922 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11b/g protocols after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:953 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11n protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:984 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11n protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:1016 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11ac protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:1048 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11ac protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:1085 msgid "" "This test executes iperf connection performance/stability against device " "{__index__} ({interface}) after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1113 msgid "" "This test executes iperf connection performance/stability against the " "broadband device found on the system after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1143 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1183 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1223 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11n protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1263 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11n protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1303 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1343 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1379 msgid "" "This test grabs the hardware address of the bluetooth adapter after suspend " "and compares it to the address grabbed before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1437 msgid "" "This is an automated Bluetooth file transfer test. It sends an image to the " "device specified by the BTDEVADDR environment variable." msgstr "" #. description #: ../jobs/suspend.txt.in:1495 msgid "" "This is an automated Bluetooth test. It emulates browsing on a remote device " "specified by the BTDEVADDR environment variable." msgstr "" #. description #: ../jobs/suspend.txt.in:1553 msgid "" "This is an automated Bluetooth test. It receives the given file from a " "remote host specified by the BTDEVADDR environment variable" msgstr "" #. description #: ../jobs/suspend.txt.in:1563 msgid "" "PURPOSE:\n" " This test will cycle through the detected display modes\n" "STEPS:\n" " 1. Click \"Test\" and the display will cycle trough the display modes\n" "VERIFICATION:\n" " Did your display look fine in the detected mode?" msgstr "" #. summary #: ../jobs/suspend.txt.in:1575 msgid "Cycle resolution after suspend tests" msgstr "" #. description #: ../jobs/suspend.txt.in:1600 msgid "" "This test will check to make sure supported video modes work after a suspend " "and resume. This is done automatically by taking screenshots and uploading " "them as an attachment." msgstr "" #. description #: ../jobs/suspend.txt.in:1610 msgid "" "This attaches screenshots from the suspend/cycle_resolutions_after_suspend " "test to the results submission." msgstr "" #. summary #: ../jobs/suspend.txt.in:1615 msgid "" "Attach screenshots from the suspend/cycle_resolution_after_suspend test to " "the results submission." msgstr "" #. description #: ../jobs/suspend.txt.in:1657 msgid "" "This will check to make sure that your audio device works properly after a " "suspend and resume. This may work fine with speakers and onboard " "microphone, however, it works best if used with a cable connecting the audio-" "out jack to the audio-in jack." msgstr "" #. description #: ../jobs/suspend.txt.in:1664 msgid "Attaches the log from the single suspend/resume test to the results" msgstr "" #. description #: ../jobs/suspend.txt.in:1674 msgid "" "PURPOSE:\n" " Take a screengrab of the current screen after suspend (logged on Unity " "desktop)\n" "STEPS:\n" " 1. Take picture using USB webcam\n" "VERIFICATION:\n" " Review attachment manually later" msgstr "" #. description #: ../jobs/suspend.txt.in:1687 msgid "Attaches the screenshot captured in graphics/screenshot." msgstr "" #. description #: ../jobs/suspend.txt.in:1699 msgid "" "PURPOSE:\n" " Do some challenging operations then check for lockup on the GPU\n" "STEPS:\n" " 1. Create 2 glxgears windows and move them quickly\n" " 2. Switch workspaces with wmctrl\n" " 3. Launch an HTML5 video playback in firefox\n" "VERIFICATION:\n" " After a 60s workload, check kern.log for reported GPU errors" msgstr "" #. description #: ../jobs/suspend.txt.in:1729 msgid "" "Checks the length of time it takes to reconnect an existing wifi connection " "after a suspend/resume cycle." msgstr "" #. description #: ../jobs/suspend.txt.in:1753 msgid "" "Checks the length of time it takes to reconnect an existing wired " "connection\n" " after a suspend/resume cycle." msgstr "" #. description #: ../jobs/suspend.txt.in:1762 msgid "" "PURPOSE:\n" " Validate that the power LED operated the same after resuming from " "suspend\n" "STEPS:\n" " 1. Power LED should be on while device is switched on\n" "VERIFICATION:\n" " Does the power LED remain on after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1775 msgid "" "PURPOSE:\n" " Validate that the battery light shows charging status after resuming " "from suspend\n" "STEPS:\n" " 1. Let system run on battery for a while\n" " 2. Plug in AC plug\n" "VERIFICATION:\n" " Did the battery indicator LED still turn orange after resuming from " "suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1789 msgid "" "PURPOSE:\n" " Validate that the battery LED properly displays charged status after " "resuming from suspend\n" "STEPS:\n" " 1. Let system run on battery for a short time\n" " 2. Plug in AC\n" " 3. Let system run on AC\n" "VERIFICATION:\n" " Does the orange battery LED still shut off when system is fully charged " "after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1804 msgid "" "PURPOSE:\n" " Validate that the battery LED indicated low power after resuming from " "suspend\n" "STEPS:\n" " 1. Let system run on battery for several hours\n" " 2. Monitor battery LED carefully\n" "VERIFICATION:\n" " Does the LED light orange when battery is low after resuming from " "suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1819 msgid "" "PURPOSE:\n" " Validate that the HDD LED still operates as expected after resuming from " "suspend\n" "STEPS:\n" " 1. Select \"Test\" to write and read a temporary file for a few seconds\n" " 2. HDD LED should blink when writing to/reading from HDD\n" "VERIFICATION:\n" " Did the HDD LED still blink with HDD activity after resuming from " "suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1834 msgid "" "PURPOSE:\n" " Validate that the numeric keypad LED operates the same before and after " "resuming from suspend\n" "STEPS:\n" " 1. Press \"Block Num\" key to toggle numeric keypad LED\n" " 2. Click on the \"Test\" button to open a window to verify your typing\n" " 3. Type using the numeric keypad both when the LED is on and off\n" "VERIFICATION:\n" " 1. Numeric keypad LED status should toggle everytime the \"Block Num\" " "key is pressed\n" " 2. Numbers should only be entered in the keyboard verification window " "when the LED is on" msgstr "" #. description #: ../jobs/suspend.txt.in:1850 msgid "" "PURPOSE:\n" " Validate that the Caps Lock key operates the same before and after " "resuming from suspend\n" "STEPS:\n" " 1. Press \"Block Cap Keys\" to activate/deactivate cap keys blocking\n" " 2. Cap Keys LED should be switched on/off every time the key is pressed\n" "VERIFICATION:\n" " Did the Cap Keys LED light as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1864 msgid "" "PURPOSE:\n" " WLAN LED verification after resuming from suspend\n" "STEPS:\n" " 1. Make sure WLAN connection is established\n" " 2. WLAN LED should light\n" "VERIFICATION:\n" " Did the WLAN LED light as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1878 msgid "" "PURPOSE:\n" " Validate that WLAN LED shuts off when disabled after resuming from " "suspend\n" "STEPS:\n" " 1. Connect to AP\n" " 2. Use Physical switch to disable WLAN\n" " 3. Re-enable\n" " 4. Use Network-Manager to disable WLAN\n" "VERIFICATION:\n" " Did the LED turn off then WLAN is disabled after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1894 msgid "" "PURPOSE:\n" " Validate that the Bluetooth LED turns on and off when BT is " "enabled/disabled after resuming from suspend\n" "STEPS:\n" " 1. Switch bluetooth off from a hardware switch (if present)\n" " 2. Switch bluetooth back on\n" " 3. Switch bluetooth off from the panel applet\n" " 4. Switch bluetooth back on\n" "VERIFICATION:\n" " Did the bluetooth LED turn off and on twice after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1913 msgid "" "PURPOSE:\n" " Validate that the camera LED still works as expected after resuming from " "suspend\n" "STEPS:\n" " 1. Select Test to activate camera\n" " 2. Camera LED should light for a few seconds\n" "VERIFICATION:\n" " Did the camera LED still turn on and off after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1927 msgid "" "PURPOSE:\n" " Touchpad LED verification after resuming from suspend\n" "STEPS:\n" " 1. Click on the touchpad button or press key combination to " "enable/disable touchpad button\n" " 2. Slide your finger on the touchpad\n" "VERIFICATION:\n" " 1. Touchpad LED status should toggle everytime the button is clicked or " "the key combination is pressed\n" " 2. When the LED is on, the mouse pointer should move on touchpad usage\n" " 3. When the LED is off, the mouse pointer should not move on touchpad " "usage" msgstr "" #. description #: ../jobs/suspend.txt.in:1943 msgid "" "PURPOSE:\n" " Validate Wireless (WLAN + Bluetooth) LED operated the same after " "resuming from suspend\n" "STEPS:\n" " 1. Make sure WLAN connection is established and Bluetooth is enabled.\n" " 2. WLAN/Bluetooth LED should light\n" " 3. Switch WLAN and Bluetooth off from a hardware switch (if present)\n" " 4. Switch them back on\n" " 5. Switch WLAN and Bluetooth off from the panel applet\n" " 6. Switch them back on\n" "VERIFICATION:\n" " Did the WLAN/Bluetooth LED light as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1962 msgid "" "PURPOSE:\n" " This test will test the brightness key after resuming from suspend\n" "STEPS:\n" " 1. Press the brightness buttons on the keyboard\n" "VERIFICATION:\n" " Did the brightness change following to your key presses after resuming " "from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1979 msgid "" "PURPOSE:\n" " This test will test the volume keys of your keyboard after resuming from " "suspend\n" "STEPS:\n" " Skip this test if your computer has no volume keys.\n" " 1. Click test to open a window on which to test the volume keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Did the volume change following to your key presses?" msgstr "" #. description #: ../jobs/suspend.txt.in:1998 msgid "" "PURPOSE:\n" " This test will test the mute key of your keyboard after resuming from " "suspend\n" "STEPS:\n" " 1. Click test to open a window on which to test the mute key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Did the volume mute following your key presses?" msgstr "" #. description #: ../jobs/suspend.txt.in:2014 msgid "" "PURPOSE:\n" " This test will test the sleep key after resuming from suspend\n" "STEPS:\n" " 1. Press the sleep key on the keyboard\n" " 2. Wake your system up by pressing the power button\n" "VERIFICATION:\n" " Did the system go to sleep after pressing the sleep key after resuming " "from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2031 msgid "" "PURPOSE:\n" " This test will test the battery information key after resuming from " "suspend\n" "STEPS:\n" " Skip this test if you do not have a Battery Button.\n" " 1. Click Test to begin\n" " 2. Press the Battery Info button (or combo like Fn+F3)\n" " 3: Close the Power Statistics tool if it opens\n" "VERIFICATION:\n" " Did the Battery Info key work as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2048 msgid "" "PURPOSE:\n" " This test will test the wireless key after resuming from suspend\n" "STEPS:\n" " 1. Press the wireless key on the keyboard\n" " 2. Press the same key again\n" "VERIFICATION:\n" " Did the wireless go off on the first press and on again on the second " "after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2066 msgid "" "PURPOSE:\n" " This test will test the media keys of your keyboard after resuming from " "suspend\n" "STEPS:\n" " Skip this test if your computer has no media keys.\n" " 1. Click test to open a window on which to test the media keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2085 msgid "" "PURPOSE:\n" " This test will test the super key of your keyboard after resuming from " "suspend\n" "STEPS:\n" " 1. Click test to open a window on which to test the super key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the super key work as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2100 msgid "" "PURPOSE:\n" " Validate that the External Video hot key is working as expected after " "resuming from suspend\n" "STEPS:\n" " 1. Plug in an external monitor\n" " 2. Press the display hot key to change the monitors configuration\n" "VERIFICATION:\n" " Check that the video signal can be mirrored, extended, displayed on " "external or onboard only, after resuming from suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2115 msgid "" "PURPOSE:\n" " Verify touchpad hotkey toggles touchpad functionality on and off after " "resuming from suspend\n" "STEPS:\n" " 1. Verify the touchpad is functional\n" " 2. Tap the touchpad toggle hotkey\n" " 3. Tap the touchpad toggle hotkey again\n" "VERIFICATION:\n" " Verify the touchpad has been disabled and re-enabled." msgstr "" #. description #: ../jobs/suspend.txt.in:2132 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB storage device after suspend and resume.\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB storage device (pen-drive/HDD).\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2153 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB 3.0 storage device after suspend and resume.\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB 3.0 storage device (pen-drive/HDD) " "in\n" " a USB 3.0 port. (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2172 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB storage device after suspend.\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2192 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB 3.0 storage device after suspend\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB 3.0 device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2210 msgid "" "This test is automated and executes after the " "suspend/usb_insert_after_suspend test is run." msgstr "" #. description #: ../jobs/suspend.txt.in:2223 msgid "" "This test is automated and executes after the " "suspend/usb3_insert_after_suspend test is run." msgstr "" #. description #: ../jobs/suspend.txt.in:2234 msgid "" "This is an automated version of usb/storage-automated and assumes that the " "server has usb storage devices plugged in prior to checkbox execution. It is " "intended for servers and SRU automated testing." msgstr "" #. description #: ../jobs/suspend.txt.in:2248 msgid "" "This is an automated version of usb3/storage-automated and assumes that the " "server has usb 3.0 storage devices plugged in prior to checkbox execution. " "It is intended for servers and SRU automated testing." msgstr "" #. description #: ../jobs/suspend.txt.in:2260 ../jobs/usb.txt.in:219 msgid "" "This test will check that your USB 2.0 port transfers data at a minimum " "expected speed." msgstr "" #. description #: ../jobs/suspend.txt.in:2273 msgid "" "This test will check that your USB 3.0 port could be recognized as " "SuperSpeed USB device using xhci_hcd driver and transfers data correctly." msgstr "" #. description #: ../jobs/suspend.txt.in:2283 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an MMC card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an MMC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2303 msgid "" "This test is automated and executes after the mediacard/mmc-insert-after-" "suspend test is run. It tests reading and writing to the MMC card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2313 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of an MMC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MMC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2330 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED SD card after the system\n" " has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an UNLOCKED SD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2351 msgid "" "This test is automated and executes after the mediacard/sd-insert-after-" "suspend test is run. It tests reading and writing to the SD card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2361 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SD card from the systems card reader\n" " after the system has been suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2379 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED SDHC media card after the\n" " system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an UNLOCKED SDHC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2400 msgid "" "This test is automated and executes after the mediacard/sdhc-insert-after-" "suspend test is run. It tests reading and writing to the SDHC card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2410 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of an SDHC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SDHC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2427 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a CF card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a CF card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2447 msgid "" "This test is automated and executes after the mediacard/cf-insert-after-" "suspend test is run. It tests reading and writing to the CF card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2457 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a CF card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the CF card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2474 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a SDXC card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a SDXC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2494 msgid "" "This test is automated and executes after the mediacard/sdxc-insert-after-" "suspend test is run. It tests reading and writing to the SDXC card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2504 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a SDXC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SDXC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2521 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a MS card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a MS card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2541 msgid "" "This test is automated and executes after the mediacard/ms-insert-after-" "suspend test is run. It tests reading and writing to the MS card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2551 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a MS card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MS card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2568 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a MSP card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a MSP card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2588 msgid "" "This test is automated and executes after the mediacard/msp-insert-after-" "suspend test is run. It tests reading and writing to the MSP card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2598 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a MSP card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MSP card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2615 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a xD card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a xD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2635 msgid "" "This test is automated and executes after the mediacard/xd-insert-after-" "suspend test is run. It tests reading and writing to the xD card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2645 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a xD card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the xD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2665 msgid "Determine if the touchpad is still functioning after suspend/resume." msgstr "" #. description #: ../jobs/suspend.txt.in:2675 ../jobs/touchscreen.txt.in:45 msgid "" "PURPOSE:\n" " Check touchscreen tap recognition\n" "STEPS:\n" " 1. Tap an object on the screen with finger. The cursor should jump to " "location tapped and object should highlight\n" "VERIFICATION:\n" " Does tap recognition work?" msgstr "" #. description #: ../jobs/suspend.txt.in:2691 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works after suspend\n" "STEPS:\n" " 1. Click on Test to display a video capture from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the video capture?" msgstr "" #. description #: ../jobs/suspend.txt.in:2710 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works after suspend\n" "STEPS:\n" " 1. Click on Test to display a still image from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the image?" msgstr "" #. description #: ../jobs/suspend.txt.in:2727 msgid "" " Takes multiple pictures based on the resolutions supported by the camera " "and\n" " validates their size and that they are of a valid format after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2736 msgid "Pointing device tests after suspend." msgstr "" #. summary #: ../jobs/suspend.txt.in:2754 msgid "Create click tests for pointing devices after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2759 msgid "Click tests for pointing devices after suspend." msgstr "" #. summary #: ../jobs/suspend.txt.in:2784 msgid "Compiz support tests after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2806 msgid "Check that the hardware is able to run compiz after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2807 msgid "Test Compiz support after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2812 msgid "glxgears tests after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2842 msgid "Test that glxgears works after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2843 msgid "" "PURPOSE:\n" " This test tests the basic 3D capabilities of your $product video card " "after suspend\n" "STEPS:\n" " 1. Click \"Test\" to execute an OpenGL demo. Press ESC at any time to " "close.\n" " 2. Verify that the animation is not jerky or slow.\n" "VERIFICATION:\n" " 1. Did the 3d animation appear?\n" " 2. Was the animation free from slowness/jerkiness?" msgstr "" #. summary #: ../jobs/suspend.txt.in:2856 msgid "Display video test after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2887 msgid "Test that video can be displayed after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2888 msgid "" "PURPOSE:\n" " This test will test the default display after suspend with a sample " "video\n" "STEPS:\n" " 1. Click \"Test\" to display a video test.\n" "VERIFICATION:\n" " Do you see color bars and static?" msgstr "" #. summary #: ../jobs/suspend.txt.in:2899 msgid "Driver version tests after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2920 msgid "" "Parses Xorg.0.Log and discovers the running X driver and version after " "suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2921 msgid "Test X driver/version after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2930 msgid "Run Firmware Test Suite (fwts) oops tests after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2942 msgid "Attaches the FWTS oops results log to the submission after suspend" msgstr "" #. description #: ../jobs/touchpad.txt.in:6 msgid "" "PURPOSE:\n" " Touchpad manual verification\n" "STEPS:\n" " 1. Make sure that touchpad is enabled.\n" " 2. Move cursor using the touchpad.\n" "VERIFICATION:\n" " Did the cursor move?" msgstr "" #. description #: ../jobs/touchpad.txt.in:23 msgid "" "PURPOSE:\n" " Touchpad horizontal scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the horizontal slider by moving your finger " "right and left in the lower part of the touchpad.\n" "VERIFICATION:\n" " Could you scroll right and left?" msgstr "" #. description #: ../jobs/touchpad.txt.in:40 msgid "" "PURPOSE:\n" " Touchpad vertical scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the vertical slider by moving your finger up " "and down in the right part of the touchpad.\n" "VERIFICATION:\n" " Could you scroll up and down?" msgstr "" #. description #: ../jobs/touchpad.txt.in:57 msgid "" "Determine whether the touchpad is detected as a singletouch device " "automatically." msgstr "" #. description #: ../jobs/touchpad.txt.in:68 msgid "" "Determine whether the touchpad is detected as a multitouch device " "automatically." msgstr "" #. description #: ../jobs/touchpad.txt.in:77 msgid "" "PURPOSE:\n" " Touchpad manual detection of multitouch.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Is the touchpad supposed to be multitouch?" msgstr "" #. description #: ../jobs/touchpad.txt.in:90 msgid "" "PURPOSE:\n" " Determine that the hot corner feature is working as expected\n" "STEPS:\n" " 1. Launch a browser.\n" " 2. Go to a website, and hover the cursor over a link.\n" " 3. Tap the upper right corner on the touchpad.\n" "VERIFICATION:\n" " Did the tap trigger a new tab to be opened?" msgstr "" #. description #: ../jobs/touchpad.txt.in:105 msgid "" "PURPOSE:\n" " Determine that the selection window function is working as expected.\n" "STEPS:\n" " 1. Open a file folder\n" " 2. Double tap and drag the cursor across several file.\n" "VERIFICATION:\n" " Did a selection window open and were several files selected?" msgstr "" #. description #: ../jobs/touchpad.txt.in:120 msgid "" "PURPOSE:\n" " Determine that the right click function is working as expected.\n" "STEPS:\n" " 1. Open a file folder\n" " 2. Hover cursor over file in folder\n" " 3. 2-touch tap.\n" "VERIFICATION:\n" " Did the right click pop up menu appear?" msgstr "" #. description #: ../jobs/touchpad.txt.in:136 msgid "" "PURPOSE:\n" " Touchpad 2-touch horizontal scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the horizontal slider by moving 2 fingers " "right and left along the touchpad.\n" "VERIFICATION:\n" " Could you scroll right and left?" msgstr "" #. description #: ../jobs/touchpad.txt.in:151 msgid "" "PURPOSE:\n" " Touchpad 2-touch vertical scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the vertical slider by moving 2 fingers up " "and down along the touchpad.\n" "VERIFICATION:\n" " Could you scroll up and down?" msgstr "" #. description #: ../jobs/touchpad.txt.in:165 msgid "" "PURPOSE:\n" " Determine that the drag and drop function is working as expected.\n" "STEPS:\n" " 1. Browse to the examples folder in the current user's home directory\n" " 2. Double tap and hold to select the \"Ubuntu_Free_Culture_Showcase\" " "folder\n" " 2. Drag the selected folder to the desktop and remove finger from " "touchpad.\n" "VERIFICATION:\n" " Did a selected folder move to the desktop?" msgstr "" #. summary #: ../jobs/touchpad.txt.in:181 msgid "Check touchpad pinch-to-zoom gesture" msgstr "" #. description #: ../jobs/touchpad.txt.in:182 msgid "" "PURPOSE:\n" " Check touchpad pinch gesture for zoom\n" "STEPS:\n" " 1. Open gallery-app with an image\n" " 2. Place two fingers on the touchpad and pinch them together\n" " 3. Place two fingers on the touchpad and move them apart\n" "VERIFICATION:\n" " Does the image zoom in and out?" msgstr "" #. summary #: ../jobs/touchpad.txt.in:198 msgid "Check 4-finger tap gesture" msgstr "" #. description #: ../jobs/touchpad.txt.in:199 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. 4-touch tap (tap with 4 fingers) anywhere on the touchpad\n" "VERIFICATION:\n" " Did the tap open the Dash?" msgstr "" #. description #: ../jobs/touchpad.txt.in:220 msgid "This test will check if your touchpad was detected as a mouse." msgstr "" #. description #: ../jobs/touchpad.txt.in:229 msgid "" "PURPOSE:\n" " Touchpad continuous move verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and continuously move your cursor within " "the borders of the displayed test window.\n" " You'll need to keep moving your finger on the touchpad for 10 seconds.\n" "VERIFICATION:\n" " Did the mouse cursor move without interruption?" msgstr "" #. name #: ../jobs/touchscreen.txt.in:3 msgid "Touchscreen" msgstr "" #. description #: ../jobs/touchscreen.txt.in:13 msgid "" "Determine whether the screen is detected as a non-touch device automatically." msgstr "" #. description #: ../jobs/touchscreen.txt.in:23 msgid "" "Determine whether the screen is detected as a multitouch device " "automatically." msgstr "" #. description #: ../jobs/touchscreen.txt.in:31 msgid "" "PURPOSE:\n" " Touchscreen capability manual detection.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Your screen was detected as a non touch screen. Select PASS if this is " "correct." msgstr "" #. description #: ../jobs/touchscreen.txt.in:59 msgid "" "PURPOSE:\n" " Check touchscreen drag & drop\n" "STEPS:\n" " 1. Tap and hold an object on the desktop\n" " 2. Drag and drop the object in a different location\n" "VERIFICATION:\n" " Does drag and drop work?" msgstr "" #. summary #: ../jobs/touchscreen.txt.in:71 msgid "Check touchscreen pinch gesture for zoom" msgstr "" #. description #: ../jobs/touchscreen.txt.in:76 msgid "" "PURPOSE:\n" " Check touchscreen pinch gesture for zoom\n" "STEPS:\n" " 1. Commence the test\n" " 2. Using 2 fingers, resize the blue square until it turns green, then " "release it.\n" "VERIFICATION:\n" " Did the blue square change size following the gesture?" msgstr "" #. summary #: ../jobs/touchscreen.txt.in:88 msgid "Check touchscreen pinch gesture for rotate" msgstr "" #. description #: ../jobs/touchscreen.txt.in:93 msgid "" "PURPOSE:\n" " Check touchscreen pinch gesture for rotate\n" "STEPS:\n" " 1. Commence the test\n" " 2. Using 2 fingers, rotate the blue square until it turns green, then " "release it.\n" "VERIFICATION:\n" " Did the blue square rotate following the gesture?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:108 msgid "" "PURPOSE:\n" " Validate that 3-touch drag is operating as expected\n" "STEPS:\n" " 1. Open a windows and bring it to the foreground\n" " 2. 3-touch the window and drag\n" "VERIFICATION:\n" " Did the window move along with the drag?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:123 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. 4-touch tap anywhere on the touchscreen\n" "VERIFICATION:\n" " Did the tap open the Dash?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:137 msgid "" "PURPOSE:\n" " Validate that 3-touch tap is operating as expected\n" "STEPS:\n" " 1. Commence the test\n" " 2. Tap the screen within the test area with 3 fingers simultaneously.\n" " 3. Once 3 fingers are on the screen you should see the indicator they " "are recognized.\n" "VERIFICATION:\n" " Did you see the green circles around the three fingers?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:160 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. Commence the test\n" " 2. Tap the screen within the test area with 4 fingers simultaneously.\n" " 3. Once 4 fingers are on the screen you should see the indicator they " "are recognized.\n" "VERIFICATION:\n" " Did you see the green circles around the four fingers?" msgstr "" #. description #: ../jobs/usb.txt.in:6 msgid "Detects and shows USB devices attached to this system." msgstr "" #. description #: ../jobs/usb.txt.in:14 msgid "" "PURPOSE:\n" " This test will check that your system detects USB storage devices.\n" "STEPS:\n" " 1. Plug in one or more USB keys or hard drives.\n" " 2. Click on \"Test\".\n" "VERIFICATION:\n" " Were the drives detected?" msgstr "" #. description #: ../jobs/usb.txt.in:29 msgid "" "PURPOSE:\n" " This test will check that you can use a USB HID device\n" "STEPS:\n" " 1. Enable either a USB mouse or keyboard\n" " 2. For mice, perform actions such as moving the pointer, right and left " "button clicks and double clicks\n" " 3. For keyboards, commence the test to launch a small tool. Type some " "text and close the tool.\n" "VERIFICATION:\n" " Did the device work as expected?" msgstr "" #. description #: ../jobs/usb.txt.in:45 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB storage device\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB storage device\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:64 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB 3.0 storage device\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB 3.0 storage device in a USB 3.0 " "port.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:82 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB storage device\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:101 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB 3.0 storage device\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB 3.0 device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:119 msgid "" "PURPOSE:\n" " This test will check your USB connection.\n" "STEPS:\n" " 1. Plug a USB HDD or thumbdrive into the computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Click \"Test\" to begin the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:139 msgid "" "PURPOSE:\n" " This test will check your USB 3.0 connection.\n" "STEPS:\n" " 1. Plug a USB 3.0 HDD or thumbdrive into a USB 3.0 port in the " "computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Click \"Test\" to begin the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:157 msgid "This test is automated and executes after the usb/insert test is run." msgstr "" #. description #: ../jobs/usb.txt.in:169 msgid "" "This test is automated and executes after the usb3/insert test is run." msgstr "" #. description #: ../jobs/usb.txt.in:178 msgid "" "Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on " "randomly created data. It requires that a USB stick is plugged into an " "available USB port before running the certification suite." msgstr "" #. description #: ../jobs/usb.txt.in:191 msgid "" "Tests USB 3.0 ports on a system by doing write/read/compare tests on " "randomly created data. It requires that a USB stick is plugged into an " "available USB port before running the certification suite. Additionally, it " "will only work with USB sticks and ports rated for USB 3.0 speeds or faster." msgstr "" #. description #: ../jobs/usb.txt.in:200 msgid "" "PURPOSE:\n" " This test will check your USB connection.\n" "STEPS:\n" " 1. Connect a USB storage device to an external USB slot on this " "computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Confirm that the icon appears.\n" " 4. Eject the device.\n" " 5. Repeat with each external USB slot.\n" "VERIFICATION:\n" " Do all USB slots work with the device?" msgstr "" #. description #: ../jobs/user_apps.txt.in:7 msgid "" "PURPOSE:\n" " This test will check that the update manager can find updates.\n" "STEPS:\n" " 1. Click Test to launch update-manager.\n" " 2. Follow the prompts and if updates are found, install them.\n" " 3. When Update Manager has finished, please close the app by clicking the " "Close button in the lower right corner.\n" "VERIFICATION:\n" " Did Update manager find and install updates (Pass if no updates are found,\n" " but Fail if updates are found but not installed)" msgstr "" #. description #: ../jobs/user_apps.txt.in:24 msgid "" "PURPOSE:\n" " This test will check that the file browser can create a new folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. On the menu bar, click File -> Create Folder.\n" " 3. In the name box for the new folder, enter the name Test Folder and hit " "Enter.\n" " 4. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a new folder called Test Folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:40 msgid "" "PURPOSE:\n" " This test will check that the file browser can copy a folder\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the folder called Test Folder and click on Copy.\n" " 3. Right Click on any white area in the window and click on Paste.\n" " 4. Right click on the folder called Test Folder(copy) and click Rename.\n" " 5. Enter the name Test Data in the name box and hit Enter.\n" " 6. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a folder called Test Data?" msgstr "" #. description #: ../jobs/user_apps.txt.in:58 msgid "" "PURPOSE:\n" " This test will verify that the file browser can move a folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Click and drag the folder called Test Data onto the icon called Test " "Folder.\n" " 3. Release the button.\n" " 4. Double click the folder called Test Folder to open it up.\n" " 5. Close the File Browser.\n" "VERIFICATION:\n" " Was the folder called Test Data successfully moved into the folder called " "Test Folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:75 msgid "" "PURPOSE:\n" " This test will check that the file browser can create a new file.\n" "STEPS:\n" " 1. Click Select Test to open the File Browser.\n" " 2. Right click in the white space and click Create Document -> Empty " "Document.\n" " 3. Enter the name Test File 1 in the name box and hit Enter.\n" " 4. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a file called Test File 1?" msgstr "" #. description #: ../jobs/user_apps.txt.in:91 msgid "" "PURPOSE:\n" " This test will check that the file browser can copy a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the file called Test File 1 and click Copy.\n" " 3. Right click in the white space and click Paste.\n" " 4. Right click on the file called Test File 1(copy) and click Rename.\n" " 5. Enter the name Test File 2 in the name box and hit Enter.\n" " 6. Close the File Browser.\n" "VERIFICATION:\n" " Do you now have a file called Test File 2?" msgstr "" #. description #: ../jobs/user_apps.txt.in:109 msgid "" "PURPOSE:\n" " This test will check that the file browser can move a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Click and drag the file called Test File 2 onto the icon for the folder " "called Test Data.\n" " 3. Release the button.\n" " 4. Double click the icon for Test Data to open that folder up.\n" " 5. Close the File Browser.\n" "VERIFICATION:\n" " Was the file Test File 2 successfully moved into the Test Data folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:126 msgid "" "PURPOSE:\n" " This test will check that the file browser can delete a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the file called Test File 1 and click on Move To Trash.\n" " 3. Verify that Test File 1 has been removed.\n" " 4. Close the File Browser.\n" "VERIFICATION:\n" " Is Test File 1 now gone?" msgstr "" #. description #: ../jobs/user_apps.txt.in:142 msgid "" "PURPOSE:\n" " This test will check that the file browser can delete a folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the folder called Test Folder and click on Move To " "Trash.\n" " 3. Verify that the folder was deleted.\n" " 4. Close the file browser.\n" "VERIFICATION:\n" " Has Test Folder been successfully deleted?" msgstr "" #. description #: ../jobs/user_apps.txt.in:223 msgid "Common Document Types Test" msgstr "" #. description #: ../jobs/user_apps.txt.in:246 msgid "" "PURPOSE:\n" " This test will check that Firefox can render a basic web page.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view the test web page.\n" "VERIFICATION:\n" " Did the Ubuntu Test page load correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:260 msgid "" "PURPOSE:\n" " This test will check that Firefox can run flash applications. Note: this " "may\n" " require installing additional software to successfully complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view a sample Flash test.\n" "VERIFICATION:\n" " Did you see the text?" msgstr "" #. description #: ../jobs/user_apps.txt.in:275 msgid "" "PURPOSE:\n" " This test will check that Firefox can play a Flash video. Note: this may\n" " require installing additional software to successfully complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view a short flash video.\n" "VERIFICATION:\n" " Did the video play correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:292 msgid "" "PURPOSE:\n" " This test will check that Firefox can play a Quicktime (.mov) video file.\n" " Note: this may require installing additional software to successfully\n" " complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox with a sample video.\n" "VERIFICATION:\n" " Did the video play using a plugin?" msgstr "" #. description #: ../jobs/user_apps.txt.in:307 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Facebook Chat service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:322 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Google Talk (gtalk) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:337 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Jabber service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:352 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the AOL Instant Messaging (AIM) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:367 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Microsoft Network (MSN) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:382 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a POP3 account.\n" "VERIFICATION:\n" " Were you able to receive and read e-mail correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:396 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a IMAP account.\n" "VERIFICATION:\n" " Were you able to receive and read e-mail correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:410 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a SMTP account.\n" "VERIFICATION:\n" " Were you able to send e-mail without errors?" msgstr "" #. description #: ../jobs/user_apps.txt.in:424 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator.\n" "VERIFICATION:\n" " Did it launch correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:438 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Simple math functions (+,-,/,*)\n" " 2. Nested math functions ((,))\n" " 3. Fractional math\n" " 4. Decimal math\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:456 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Memory set\n" " 2. Memory reset\n" " 3. Memory last clear\n" " 4. Memory clear\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:474 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Cut\n" " 2. Copy\n" " 3. Paste\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:490 msgid "" "PURPOSE:\n" " This test checks that gedit works.\n" "STEPS:\n" " 1. Commence the test to open gedit.\n" " 2. Enter some text and save the file (make a note of the file name you " "use), then close gedit.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:505 msgid "" "PURPOSE:\n" " This test checks that gedit works.\n" "STEPS:\n" " 1. Commence the test to open gedit, and re-open the file you created " "previously.\n" " 2. Edit then save the file, then close gedit.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:519 msgid "" "PURPOSE:\n" " This test will check that Gnome Terminal works.\n" "STEPS:\n" " 1. Commence the test to open Terminal.\n" " 2. Type 'ls' and press enter. You should see a list of files and folder in " "your home directory.\n" " 3. Close the terminal window.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/virtualization.txt.in:12 msgid "" "Verifies that a KVM guest can be created and booted using an Ubuntu Server " "cloud image." msgstr "" #. summary #: ../jobs/virtualization.txt.in:15 msgid "Verify KVM VM boots" msgstr "" #. description #: ../jobs/virtualization.txt.in:25 msgid "Test to verify that the Xen Hypervisor is running." msgstr "" #. summary #: ../jobs/virtualization.txt.in:27 msgid "Verify Xen is running" msgstr "" #. description #: ../jobs/virtualization.txt.in:37 msgid "Test to check that a Xen domU image can boot and run on Xen on Ubuntu" msgstr "" #. summary #: ../jobs/virtualization.txt.in:39 msgid "Verify Xen domU can boot" msgstr "" #. description #: ../jobs/wireless.txt.in:22 msgid "Wireless scanning test. It scans and reports on discovered APs." msgstr "" #. description #: ../jobs/wireless.txt.in:32 msgid "" "This is an automated test to gather some info on the current state of your " "wireless devices. If no devices are found, the test will exit with an error." msgstr "" #. description #: ../jobs/wireless.txt.in:41 msgid "" "PURPOSE:\n" " This test will check your wireless connection.\n" "STEPS:\n" " 1. Click on the Network icon in the panel.\n" " 2. Select a network below the 'Wireless networks' section.\n" " 3. Click \"Test\" to verify that it's possible to establish an HTTP " "connection.\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" #. description #: ../jobs/wireless.txt.in:77 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11b/g protocols." msgstr "" #. description #: ../jobs/wireless.txt.in:107 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11b/g protocols." msgstr "" #. description #: ../jobs/wireless.txt.in:137 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11n protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:167 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11n protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:198 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11ac protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:229 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11ac protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:259 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:298 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:338 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11n protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:378 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11n protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:418 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections with the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:458 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections with the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:497 msgid "" "Tests the performance of a system's wireless connection through the iperf " "tool." msgstr "" #. description #: ../jobs/wireless.txt.in:526 msgid "" "Tests the performance of a system's wireless connection through the iperf " "tool, using UDP packets." msgstr "" #. description #: ../jobs/wireless.txt.in:555 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11a protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11a protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:585 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11b protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11b protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:605 msgid "" "This test executes iperf to generate a load on the network device " "{__index__} ({interface}) and then performs a ping test to watch for dropped " "packets and very large latency periods." msgstr "" #. description #: ../jobs/wireless.txt.in:633 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11g protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11g protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:644 msgid "" "Test that the MAC80211 modules are loaded and wireless extensions are " "working." msgstr "" #. description #: ../jobs/wireless.txt.in:657 msgid "" "This test executes iwconfig requests against wireless device {__index__} " "({interface})." msgstr "" #. description #: ../jobs/wireless.txt.in:666 msgid "" "PURPOSE:\n" " This test will check whether or not your driver responds to rfkill " "commands.\n" "STEPS:\n" " 1. Use the hardware switch on the side of your device to switch off " "wireless.\n" " 2. If you do not have a hardware switch disable wireless from the " "network manager icon in the panel\n" " 3. Click \"Test\" to verify that the hard or soft blocks are in place.\n" "VERIFICATION:\n" " Did the hard or soft blocks show on in the dialog?" msgstr "" #. purpose #: ../jobs/wireless.txt.in:691 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of wireless device {__index__} ({interface})." msgstr "" plainbox-provider-checkbox-0.25/po/plainbox-provider-checkbox.pot0000664000175000017500000054537712646152433026513 0ustar sylvainsylvain00000000000000# 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: 2016-01-15 14:43+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #. description #: ../jobs/audio.txt.in:9 msgid "Test to detect audio devices" msgstr "" #. description #: ../jobs/audio.txt.in:28 msgid "" "PURPOSE:\n" " This test will check that internal speakers work correctly\n" "STEPS:\n" " 1. Make sure that no external speakers or headphones are connected\n" " When testing a desktop, you can skip this test if there is no\n" " internal speaker, we will test the external output later\n" " 2. Commence the test to play a brief tone on your audio device\n" "VERIFICATION:\n" " Did you hear a tone?" msgstr "" #. summary #: ../jobs/audio.txt.in:46 msgid "HDMI audio test" msgstr "" #. summary #: ../jobs/audio.txt.in:79 msgid "DisplayPort audio test" msgstr "" #. summary #: ../jobs/audio.txt.in:112 msgid "Thunderbolt audio test" msgstr "" #. description #: ../jobs/audio.txt.in:156 msgid "" "PURPOSE:\n" " This test will check that headphones connector works correctly\n" "STEPS:\n" " 1. Connect a pair of headphones to your audio device\n" " 2. Commence the test to play a sound to your audio device\n" "VERIFICATION:\n" " Did you hear a sound through the headphones and did the sound play " "without any distortion, clicks or other strange noises from your headphones?" msgstr "" #. description #: ../jobs/audio.txt.in:182 msgid "" "PURPOSE:\n" " This test will check that recording sound using the onboard microphone " "works correctly\n" "STEPS:\n" " 1. Disconnect any external microphones that you have plugged in\n" " 2. Click \"Test\", then speak into your internal microphone\n" " 3. After a few seconds, your speech will be played back to you.\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/audio.txt.in:209 msgid "" "PURPOSE:\n" " This test will check that recording sound using an external microphone " "works correctly\n" "STEPS:\n" " 1. Connect a microphone to your microphone port\n" " 2. Click \"Test\", then speak into the external microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/audio.txt.in:235 msgid "" "PURPOSE:\n" " This test will check that a USB audio device works correctly\n" "STEPS:\n" " 1. Connect a USB audio device to your system\n" " 2. Click \"Test\", then speak into the microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back through the USB headphones?" msgstr "" #. description #: ../jobs/audio.txt.in:258 msgid "" "Play back a sound on the default output and listen for it on the default " "input." msgstr "" #. description #: ../jobs/audio.txt.in:267 msgid "" "Collect audio-related system information. This data can be used to simulate " "this computer's audio subsystem and perform more detailed tests under a " "controlled environment." msgstr "" #. description #: ../jobs/audio.txt.in:278 msgid "Attaches the audio hardware data collection log to the results." msgstr "" #. description #: ../jobs/audio.txt.in:286 msgid "" "PURPOSE:\n" " Check that the various audio channels are working properly\n" "STEPS:\n" " 1. Commence the test\n" "VERIFICATION:\n" " You should clearly hear a voice from the different audio channels" msgstr "" #. description #: ../jobs/audio.txt.in:314 msgid "" "PURPOSE:\n" " Check that external line out connection works correctly\n" "STEPS:\n" " 1. Insert cable to speakers (with built-in amplifiers) on the line out " "port\n" " 2. Open system sound preferences, 'Output' tab, select 'Line-out' on " "the connector list. Commence the test\n" " 3. On the system sound preferences, select 'Internal Audio' on the " "device list and click 'Test Speakers' to check left and right channel\n" "VERIFICATION:\n" " 1. Do you hear a sound in the speakers? The internal speakers should " "*not* be muted automatically\n" " 2. Do you hear the sound coming out on the corresponding channel?" msgstr "" #. description #: ../jobs/audio.txt.in:341 msgid "" "PURPOSE:\n" " Check that external line in connection works correctly\n" "STEPS:\n" " 1. Use a cable to connect the line in port to an external line out " "source.\n" " 2. Open system sound preferences, 'Input' tab, select 'Line-in' on the " "connector list. Commence the test\n" " 3. After a few seconds, your recording will be played back to you.\n" "VERIFICATION:\n" " Did you hear your recording?" msgstr "" #. description #: ../jobs/audio.txt.in:359 msgid "" "PURPOSE:\n" " Check that system detects speakers or headphones being plugged in\n" "STEPS:\n" " 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack\n" " 2. Locate the speaker / headphone jack on the device under test\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug headphones or speakers into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/audio.txt.in:380 msgid "" "PURPOSE:\n" " Check that system detects a microphone being plugged in\n" "STEPS:\n" " 1. Prepare a microphone with a standard 3.5mm jack\n" " 2. Locate the microphone jack on the device under test.\n" " Keep in mind that it may be shared with the headphone jack.\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug the microphone into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/audio.txt.in:411 msgid "" "PURPOSE:\n" " Check that balance control works correctly on internal speakers\n" "STEPS:\n" " 1. Check that moving the balance slider from left to right works " "smoothly\n" " 2. Commence the test to play an audio tone for 10 seconds.\n" " 3. Move the balance slider from left to right and back.\n" " 4. Check that actual speaker audio balance follows your setting.\n" "VERIFICATION:\n" " Does the slider move smoothly, as well as being followed by the setting " "by the actual audio output?" msgstr "" #. description #: ../jobs/audio.txt.in:439 msgid "" "PURPOSE:\n" " Check that balance control works correctly on external headphone\n" "STEPS:\n" " 1. Check that moving the balance slider from left to right works " "smoothly\n" " 2. Commence the test to play an audio tone for 10 seconds.\n" " 3. Move the balance slider from left to right and back.\n" " 4. Check that actual headphone audio balance follows your setting.\n" "VERIFICATION:\n" " Does the slider move smoothly, as well as being followed by the setting " "by the actual audio output?" msgstr "" #. description #: ../jobs/audio.txt.in:459 msgid "Test to detect audio devices after suspending 30 times." msgstr "" #. description #: ../jobs/audio.txt.in:478 msgid "" "PURPOSE:\n" " This test will check that internal speakers work correctly after " "suspending 30 times.\n" "STEPS:\n" " 1. Make sure that no external speakers or headphones are connected\n" " When testing a desktop, you can skip this test if there is no\n" " internal speaker, we will test the external output later\n" " 2. Commence the test to play a brief tone on your audio device\n" "VERIFICATION:\n" " Did you hear a tone?" msgstr "" #. description #: ../jobs/audio.txt.in:503 msgid "" "Play back a sound on the default output and listen for it on the default " "input, after suspending 30 times." msgstr "" #. description #: ../jobs/audio.txt.in:516 msgid "" "This test will verify that the volume levels are at an acceptable level on " "your local system. The test will validate that the volume is greater than " "or equal to minvol and less than or equal to maxvol for all sources (inputs) " "and sinks (outputs) recognized by PulseAudio. It will also validate that " "the active source and sink are not muted. You should not manually adjust " "the volume or mute before running this test." msgstr "" #. description #: ../jobs/audio.txt.in:532 msgid "Record mixer settings after suspending 30 times." msgstr "" #. description #: ../jobs/benchmarks.txt.in:6 msgid "Raw read timing benchmark of each disk using hdparm." msgstr "" #. summary #: ../jobs/benchmarks.txt.in:20 msgid "Benchmark for each disk" msgstr "" #. description #: ../jobs/benchmarks.txt.in:24 msgid "Cached read timing benchmark of each disk using hdparm." msgstr "" #. description #: ../jobs/benchmarks.txt.in:44 msgid "Run gtkperf to make sure that GTK based test cases work" msgstr "" #. description #: ../jobs/benchmarks.txt.in:53 msgid "Run Render-Bench XRender/Imlib2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:61 msgid "Run Qgears2 XRender Extension gearsfancy benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:69 msgid "Run Qgears2 XRender Extension image scaling benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:77 msgid "Run Qgears2 OpenGL gearsfancy benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:85 msgid "Run Qgears2 OpenGL image scaling benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:95 msgid "Run GLmark2-ES2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:106 msgid "Run GLmark2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:113 msgid "Run Unigine Santuary benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:120 msgid "Run Unigine Tropics benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:127 msgid "Run Unigine Heaven benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:134 msgid "Run Lightsmark benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:142 msgid "Run Cachebench Read benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:150 msgid "Run Cachebench Write benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:158 msgid "Run Cachebench Read / Modify / Write benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:166 msgid "Run Stream Copy benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:174 msgid "Run Stream Scale benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:182 msgid "Run Stream Add benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:190 msgid "Run Stream Triad benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:198 msgid "Run Network Loopback benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:205 msgid "Check the time needed to reconnect to a WIFI access point" msgstr "" #. description #: ../jobs/benchmarks.txt.in:213 msgid "Run Encode MP3 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:221 msgid "Run x264 H.264/AVC encoder benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:228 msgid "Run GnuPG benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:236 msgid "Run Compress PBZIP2 benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:244 msgid "Run Compress 7ZIP benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:252 msgid "Run N-Queens benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:260 msgid "Run Himeno benchmark" msgstr "" #. description #: ../jobs/benchmarks.txt.in:268 msgid "CPU utilization on an idle system." msgstr "" #. description #: ../jobs/benchmarks.txt.in:276 msgid "Disk utilization on an idle system." msgstr "" #. description #: ../jobs/benchmarks.txt.in:286 msgid "" "Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Fullscreen 1920x1080 " "no antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:298 msgid "" "Run a stress test based on FurMark (OpenGL 2.1 or 3.2) Windowed 1024x640 no " "antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:310 msgid "" "Run GiMark, a geometry instancing test (OpenGL 3.3) Fullscreen 1920x1080 no " "antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:322 msgid "" "Run GiMark, a geometry instancing test (OpenGL 3.3) Windowed 1024x640 no " "antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:334 msgid "" "Run a tessellation test based on TessMark (OpenGL 4.0) Fullscreen 1920x1080 " "no antialiasing" msgstr "" #. description #: ../jobs/benchmarks.txt.in:345 msgid "" "Run a tessellation test based on TessMark (OpenGL 4.0) Windowed 1024x640 no " "antialiasing" msgstr "" #. description #: ../jobs/bluetooth.txt.in:23 msgid "Automated test to store bluetooth device information in checkbox report" msgstr "" #. description #: ../jobs/bluetooth.txt.in:31 msgid "" "PURPOSE:\n" " This test will check that bluetooth connection works correctly\n" "STEPS:\n" " 1. Enable bluetooth on any mobile device (PDA, smartphone, etc.)\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select 'Setup new device'\n" " 4. Look for the device in the list and select it\n" " 5. In the device write the PIN code automatically chosen by the wizard\n" " 6. The device should pair with the computer\n" " 7. Right-click on the bluetooth icon and select browse files\n" " 8. Authorize the computer to browse the files in the device if needed\n" " 9. You should be able to browse the files\n" "VERIFICATION:\n" " Did all the steps work?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:52 msgid "" "PURPOSE:\n" " This test will check that you can transfer information through a " "bluetooth connection\n" "STEPS:\n" " 1. Make sure that you're able to browse the files in your mobile device\n" " 2. Copy a file from the computer to the mobile device\n" " 3. Copy a file from the mobile device to the computer\n" "VERIFICATION:\n" " Were all files copied correctly?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:77 msgid "" "PURPOSE:\n" " This test will check the High Fidelity Playback (A2DP) capability of " "your Bluetooth device,\n" " to see if you can hear audio from it.\n" "STEPS:\n" " 1. Enable and pair the bluetooth headset\n" " 2. Click \"Test\" to play a brief tone on your Bluetooth device, if it " "failed to set the Mode to A2DP,\n" " please select the device and change it manually in the \"Sound " "Settings\"\n" "VERIFICATION:\n" " Did you hear the tone?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:94 msgid "" "PURPOSE:\n" " This test will check the Telephony Duplex capability of your bluetooth " "device,\n" " to see if you can record and hear audio from it simultaneously.\n" "STEPS:\n" " 1. Enable the bluetooth headset\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select \"Setup new device\"\n" " 4. Look for the device in the list and pair it\n" " 5. Click the sound icon\n" " 6. Click \"Sound Settings\"\n" " 7. Select device and ensure Mode is set to \"Telephony Duplex (HSP/" "HFP)\"\n" " 8. Click \"Test\" to record and play for five seconds in the bluetooth " "device\n" "VERIFICATION:\n" " Did you hear the sound you recorded in the bluetooth with a slight " "intended delay?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:116 msgid "" "PURPOSE:\n" " This test will check that you can use a BlueTooth HID device\n" "STEPS:\n" " 1. Enable either a BT mouse or keyboard\n" " 2. Click on the bluetooth icon in the menu bar\n" " 3. Select 'Setup new device'\n" " 4. Look for the device in the list and select it\n" " 5. For mice, perform actions such as moving the pointer, right and left " "button clicks and double clicks\n" " 6. For keyboards, commence the test to launch a small tool. Enter some " "text into the tool and close it.\n" "VERIFICATION:\n" " Did the device work as expected?" msgstr "" #. description #: ../jobs/bluetooth.txt.in:154 msgid "" "This is an automated Bluetooth file transfer test. It sends a large file to " "the device specified by the BTDEVADDR environment variable, then retrieves " "it again using Bluetooth and verifies the checksum to ensure the transfer " "didn't corrupt the file." msgstr "" #. description #: ../jobs/camera.txt.in:8 msgid "This Automated test attempts to detect a camera." msgstr "" #. description #: ../jobs/camera.txt.in:18 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works\n" "STEPS:\n" " 1. Click on Test to display a video capture from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the video capture?" msgstr "" #. description #: ../jobs/camera.txt.in:37 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works\n" "STEPS:\n" " 1. Click on Test to display a still image from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the image?" msgstr "" #. description #: ../jobs/camera.txt.in:54 msgid "" " Takes multiple pictures based on the resolutions supported by the camera " "and\n" " validates their size and that they are of a valid format." msgstr "" #. description #: ../jobs/codecs.txt.in:9 msgid "" "PURPOSE:\n" " This test will verify your system's ability to play Ogg Vorbis audio " "files.\n" "STEPS:\n" " 1. Click Test to play an Ogg Vorbis file (.ogg)\n" " 2. Please close the player to proceed.\n" "VERIFICATION:\n" " Did the sample play correctly?" msgstr "" #. description #: ../jobs/codecs.txt.in:26 msgid "" "PURPOSE:\n" " This test will verify your system's ability to play Wave Audio files.\n" "STEPS:\n" " 1. Select Test to play a Wave Audio format file (.wav)\n" " 2. Please close the player to proceed.\n" "VERIFICATION:\n" " Did the sample play correctly?" msgstr "" #. description #: ../jobs/cpu.txt.in:10 msgid "" "Test the CPU scaling capabilities using Firmware Test Suite (fwts cpufreq)." msgstr "" #. description #: ../jobs/cpu.txt.in:19 msgid "" "Attaches the log generated by cpu/scaling_test to the results submission." msgstr "" #. description #: ../jobs/cpu.txt.in:30 msgid "" "Test that the CPU can run at its max frequency using Firmware Test Suite " "(fwts cpufreq)." msgstr "" #. description #: ../jobs/cpu.txt.in:39 msgid "" "Attaches the log generated by cpu/maxfreq_test to the results submission." msgstr "" #. description #: ../jobs/cpu.txt.in:47 msgid "Tests the CPU for clock jitter." msgstr "" #. description #: ../jobs/cpu.txt.in:56 msgid "Test offlining of each CPU core in a multicore system." msgstr "" #. description #: ../jobs/cpu.txt.in:65 msgid "This test checks cpu topology for accuracy between proc and sysfs." msgstr "" #. description #: ../jobs/cpu.txt.in:74 msgid "This test checks that CPU frequency governors are obeyed when set." msgstr "" #. description #: ../jobs/cpu.txt.in:83 msgid "Validate that the Vector Floating Point Unit is running on ARM device" msgstr "" #. description #: ../jobs/cpu.txt.in:92 msgid "Run Firmware Test Suite (fwts) cstates tests." msgstr "" #. description #: ../jobs/cpu.txt.in:104 ../jobs/firmware.txt.in:71 msgid "Attaches the FWTS desktop diagnosis results log to the submission" msgstr "" #. description #: ../jobs/daemons.txt.in:6 msgid "Test if the atd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:13 msgid "Test if the cron daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:20 msgid "Test if the cupsd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:27 msgid "Test if the getty daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:34 msgid "Test if the init daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:41 msgid "Test if the klogd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:48 msgid "Test if the nmbd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:55 msgid "Test if the smbd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:62 msgid "Test if the syslogd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:70 msgid "Test if the udevd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/daemons.txt.in:77 msgid "Test if the winbindd daemon is running when the package is installed." msgstr "" #. description #: ../jobs/disk.txt.in:12 msgid "Displays information about each disk detected on the system under test." msgstr "" #. summary #: ../jobs/disk.txt.in:27 msgid "Disk statistics for /dev/{name}" msgstr "" #. description #: ../jobs/disk.txt.in:28 msgid "" "This test checks disk stats, generates some activity and rechecks stats to " "verify they've changed. It also verifies that disks appear in the various " "files they're supposed to." msgstr "" #. description #: ../jobs/disk.txt.in:28 msgid "This test will inspect the following disk:" msgstr "" #. description #: ../jobs/disk.txt.in:28 msgid "" " product name: {product}\n" " sysfs path: {path}\n" " device node path: /dev/{name}" msgstr "" #. summary #: ../jobs/disk.txt.in:40 msgid "Check stats changes for each disk" msgstr "" #. description #: ../jobs/disk.txt.in:44 msgid "" "This test generates some disk activity and checks the stats to ensure drive " "activity is being recorded properly." msgstr "" #. summary #: ../jobs/disk.txt.in:62 msgid "SMART test" msgstr "" #. description #: ../jobs/disk.txt.in:68 msgid "This tests the SMART capabilities of disks detected on the system." msgstr "" #. summary #: ../jobs/disk.txt.in:86 msgid "Verify system storage performs at or above baseline performance" msgstr "" #. description #: ../jobs/disk.txt.in:91 msgid "Verify system storage performs at or above a baseline speed." msgstr "" #. summary #: ../jobs/disk.txt.in:107 msgid "" "Verify that storage devices, such as Fibre Channel and RAID, perform under " "stress." msgstr "" #. description #: ../jobs/disk.txt.in:112 msgid "" "Verify that storage devices, such as Fibre Channel and RAID, perform under " "stress without data loss or corruption." msgstr "" #. description #: ../jobs/disk.txt.in:138 msgid "" "Some new hard drives include a feature that parks the drive heads after a " "short period of inactivity. This is a power-saving feature, but it can have " "a bad interaction with the operating system that results in the drive " "constantly parked then activated. This produces excess wear on the drive, " "potentially leading to early failures." msgstr "" #. description #: ../jobs/disk.txt.in:151 msgid "" "PURPOSE:\n" " This test checks that a systems drive protection mechanism works properly.\n" "STEPS:\n" " 1. Click on Test\n" " 2. Move the system under test around, ensuring it is raised and lowered at " "some point.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/esata.txt.in:5 msgid "" "PURPOSE:\n" " This test will check the system can detect the insertion of an eSATA " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will\n" " timeout and fail if the insertion has not been detected within 20 " "seconds.\n" " 2. Plug an eSATA HDD into an available eSATA port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/esata.txt.in:22 msgid "" "This is an automated test which performs read/write operations on an " "attached eSATA HDD" msgstr "" #. description #: ../jobs/esata.txt.in:31 msgid "" "PURPOSE:\n" " This test will check the system can detect the removal of an eSATA HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will timeout and fail if\n" " the removal has not been detected within 20 seconds.\n" " 2. Remove the previously attached eSATA HDD from the eSATA port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/ethernet.txt.in:14 msgid "" "Test to detect and return information about available network controllers on " "the system under test." msgstr "" #. description #: ../jobs/ethernet.txt.in:26 msgid "" "Gathers some info on the current state of your network devices. If no " "devices are found, the test will exit with an error." msgstr "" #. description #: ../jobs/ethernet.txt.in:35 msgid "" "PURPOSE:\n" " This test will check your wired connection\n" "STEPS:\n" " 1. Click on the Network icon in the top panel\n" " 2. Select a network below the \"Wired network\" section\n" " 3. Click \"Test\" to verify that it's possible to establish a HTTP " "connection\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" #. summary #: ../jobs/ethernet.txt.in:52 msgid "Multi-NIC Iperf testing for NIC {interface}" msgstr "" #. description #: ../jobs/ethernet.txt.in:62 msgid "" "This test uses iperf to ensure network devices pass data at an acceptable " "minimum percentage of advertized speed." msgstr "" #. summary #: ../jobs/ethernet.txt.in:73 msgid "Multi-NIC Iperf3 testing for NIC {interface}" msgstr "" #. description #: ../jobs/ethernet.txt.in:83 msgid "" "This test uses iperf3 to ensure network devices pass data at an acceptable " "minimum percentage of advertized speed." msgstr "" #. summary #: ../jobs/ethernet.txt.in:94 msgid "ethtool check for NIC {interface}" msgstr "" #. description #: ../jobs/ethernet.txt.in:100 msgid "" "This test executes ethtool requests against ethernet device {__index__} " "({interface})." msgstr "" #. summary #: ../jobs/ethernet.txt.in:110 msgid "Maximum bandwidth test of device {__index__} ({interface})" msgstr "" #. purpose #: ../jobs/ethernet.txt.in:119 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of each ethernet interface." msgstr "" #. steps #: ../jobs/ethernet.txt.in:122 ../jobs/mobilebroadband.txt.in:105 #: ../jobs/wireless.txt.in:694 msgid "" "1. Click \"Test\". 2. Read the network test summary and confirm that the " "throughput is acceptable. 3. If needed, click \"Test\" again to repeat the " "transfer test." msgstr "" #. verification #: ../jobs/ethernet.txt.in:126 ../jobs/mobilebroadband.txt.in:109 #: ../jobs/wireless.txt.in:698 msgid "" "Was the reported throughput acceptable for the type and maximum speed of " "this interface?" msgstr "" #. summary #: ../jobs/ethernet.txt.in:136 msgid "" "Stress and performance test of ethernet device {__index__} ({interface})" msgstr "" #. description #: ../jobs/ethernet.txt.in:142 msgid "" "Automated test that tests performance of ethernet device {__index__} " "({interface})." msgstr "" #. description #: ../jobs/expresscard.txt.in:4 msgid "" "PURPOSE:\n" " This will verify that an ExpressCard slot can detect inserted devices.\n" "STEPS:\n" " Skip this test if you do not have an ExpressCard slot.\n" " 1. Plug an ExpressCard device into the ExpressCard slot\n" "VERIFICATION:\n" " Was the device correctly detected?" msgstr "" #. description #: ../jobs/fingerprint.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that a fingerprint reader will work properly for " "logging into your system. This test case assumes that there's a testing " "account from which test cases are run and a personal account that the tester " "uses to verify the fingerprint reader\n" "STEPS:\n" " 1. Click on the User indicator on the left side of the panel (your user " "name).\n" " 2. Select \"Switch User Account\"\n" " 3. On the LightDM screen select your username.\n" " 4. Use the fingerprint reader to login.\n" " 5. Click on the user switcher applet.\n" " 6. Select the testing account to continue running tests.\n" "VERIFICATION:\n" " Did the authentication procedure work correctly?" msgstr "" #. description #: ../jobs/fingerprint.txt.in:20 msgid "" "PURPOSE:\n" " This test will verify that a fingerprint reader can be used to unlock a " "locked system.\n" "STEPS:\n" " 1. Click on the Session indicator (Cog icon on the Left side of the " "panel) .\n" " 2. Select 'Lock screen'.\n" " 3. Press any key or move the mouse.\n" " 4. A window should appear that provides the ability to unlock either " "typing your password or using fingerprint authentication.\n" " 5. Use the fingerprint reader to unlock.\n" " 6. Your screen should be unlocked.\n" "VERIFICATION:\n" " Did the authentication procedure work correctly?" msgstr "" #. description #: ../jobs/firewire.txt.in:6 msgid "" "PURPOSE:\n" " This test will check the system can detect the insertion of a FireWire " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will\n" " timeout and fail if the insertion has not been detected within 20 " "seconds.\n" " 2. Plug a FireWire HDD into an available FireWire port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/firewire.txt.in:24 msgid "" "This is an automated test which performs read/write operations on an " "attached FireWire HDD" msgstr "" #. description #: ../jobs/firewire.txt.in:34 msgid "" "PURPOSE:\n" " This test will check the system can detect the removal of a FireWire " "HDD\n" "STEPS:\n" " 1. Click 'Test' to begin the test. This test will timeout and fail if\n" " the removal has not been detected within 20 seconds.\n" " 2. Remove the previously attached FireWire HDD from the FireWire port.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the " "automatically\n" " selected result" msgstr "" #. description #: ../jobs/firmware.txt.in:25 msgid "Automated tests for firmware using Firmware Test Suite." msgstr "" #. description #: ../jobs/firmware.txt.in:45 msgid "" "Run Firmware Test Suite (fwts) QA-concerned desktop-specific diagnosis tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:47 msgid "Run FWTS QA-concerned desktop-specific diagnosis tests." msgstr "" #. description #: ../jobs/firmware.txt.in:58 msgid "" "Run Firmware Test Suite (fwts) HWE-concerned desktop-specific diagnosis " "tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:60 msgid "Run FWTS HWE-concerned desktop-specific diagnosis tests." msgstr "" #. summary #: ../jobs/firmware.txt.in:72 msgid "Attach FWTS desktop diagnosis log to submission" msgstr "" #. description #: ../jobs/firmware.txt.in:80 msgid "" "Attaches the FWTS desktop diagnosis results log to the submission (to HWE)" msgstr "" #. summary #: ../jobs/firmware.txt.in:81 msgid "Attach FWTS desktop diagnosis log to submission (to HWE)" msgstr "" #. summary #: ../jobs/firmware.txt.in:86 msgid "No _REV interface in ACPI [DS]SDT tables" msgstr "" #. description #: ../jobs/firmware.txt.in:90 msgid "" "This Automated test checks misuse of the _REV interface in ACPI DSDT and " "SSDT tables" msgstr "" #. description #: ../jobs/floppy.txt.in:5 msgid "Floppy test" msgstr "" #. summary #: ../jobs/graphics.txt.in:4 msgid "Driver version tests" msgstr "" #. description #: ../jobs/graphics.txt.in:23 msgid "Test to output the Xorg version" msgstr "" #. summary #: ../jobs/graphics.txt.in:24 msgid "Test Xorg version" msgstr "" #. summary #: ../jobs/graphics.txt.in:29 msgid "Resolution change tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:61 msgid "Test that the X process is running." msgstr "" #. description #: ../jobs/graphics.txt.in:69 msgid "Test that the X is not running in failsafe mode." msgstr "" #. summary #: ../jobs/graphics.txt.in:70 msgid "Test that X is not in failsafe mode." msgstr "" #. summary #: ../jobs/graphics.txt.in:101 msgid "Default resolution tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:126 msgid "Minimum resolution tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:147 msgid "Maximum resolution tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:178 msgid "Mode tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:194 msgid "Color depth tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:210 msgid "Refresh rate tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:225 msgid "Graphic memory tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:240 msgid "Display video test" msgstr "" #. description #: ../jobs/graphics.txt.in:266 msgid "Check that VESA drivers are not in use" msgstr "" #. summary #: ../jobs/graphics.txt.in:267 msgid "Test that VESA drivers are not in use" msgstr "" #. summary #: ../jobs/graphics.txt.in:272 msgid "Resolution cycling tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:296 msgid "Rotation tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:320 msgid "Compiz support tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:337 msgid "Unity support tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:354 msgid "glxgears tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:378 msgid "3D window open/close tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:395 msgid "3D window with suspend/resume tests" msgstr "" #. description #: ../jobs/graphics.txt.in:411 msgid "Multiple 3D window open/close" msgstr "" #. summary #: ../jobs/graphics.txt.in:412 msgid "Multiple 3D window open/close tests" msgstr "" #. description #: ../jobs/graphics.txt.in:428 msgid "3D window movement" msgstr "" #. summary #: ../jobs/graphics.txt.in:429 msgid "3D window movement tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:448 msgid "screenshot tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:470 msgid "screenshot attachment tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:486 msgid "full screen video screenshot tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:516 msgid "GPU switch prompt tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:539 msgid "full screen video attachment tests" msgstr "" #. summary #: ../jobs/graphics.txt.in:555 msgid "Obtains a simple screen capture" msgstr "" #. description #: ../jobs/graphics.txt.in:559 msgid "Obtains a simple screen capture using gnome-screenshot if present" msgstr "" #. summary #: ../jobs/graphics.txt.in:564 msgid "Attaches a simple screen capture" msgstr "" #. description #: ../jobs/graphics.txt.in:568 msgid "Attaches the simple screen capture file" msgstr "" #. summary #: ../jobs/graphics.txt.in:583 msgid "Obtains a simple screen capture of {product}" msgstr "" #. description #: ../jobs/graphics.txt.in:587 msgid "" "Obtains a simple screen capture of {product} using gnome-screenshot if " "present" msgstr "" #. summary #: ../jobs/graphics.txt.in:596 msgid "Attaches a simple screen capture of {product}" msgstr "" #. description #: ../jobs/graphics.txt.in:599 msgid "Attaches the simple screen capture file of {product}" msgstr "" #. description #: ../jobs/hibernate.txt.in:18 msgid "" "PURPOSE:\n" " This test will check to make sure your system can successfully hibernate " "(if supported)\n" "STEPS:\n" " 1. Click on Test\n" " 2. The system will hibernate and should wake itself within 5 minutes\n" " 3. If your system does not wake itself after 5 minutes, please press the " "power button to wake the system manually\n" " 4. If the system fails to resume from hibernate, please restart System " "Testing and mark this test as Failed\n" "VERIFICATION:\n" " Did the system successfully hibernate and did it work properly after " "waking up?" msgstr "" #. summary #: ../jobs/hibernate.txt.in:34 msgid "Hibernate test" msgstr "" #. description #: ../jobs/hibernate.txt.in:68 msgid "Automated check of the hibernate log for errors discovered by fwts" msgstr "" #. description #: ../jobs/hibernate.txt.in:77 msgid "attaches log from single hibernate/resume test to results" msgstr "" #. summary #: ../jobs/hibernate.txt.in:81 msgid "Hibernate log attach" msgstr "" #. description #: ../jobs/info.txt.in:17 msgid "Attaches a report of installed codecs for Intel HDA" msgstr "" #. description #: ../jobs/info.txt.in:24 msgid "Attaches a report of CPU information" msgstr "" #. summary #: ../jobs/info.txt.in:25 msgid "Attach a copy of /proc/cpuinfo" msgstr "" #. description #: ../jobs/info.txt.in:32 msgid "Attaches a copy of /var/log/dmesg to the test results" msgstr "" #. summary #: ../jobs/info.txt.in:33 msgid "Attach a copy of /var/log/dmesg" msgstr "" #. description #: ../jobs/info.txt.in:40 msgid "Attaches info on DMI" msgstr "" #. summary #: ../jobs/info.txt.in:41 msgid "Attach a copy of /sys/class/dmi/id/*" msgstr "" #. description #: ../jobs/info.txt.in:50 msgid "Attaches dmidecode output" msgstr "" #. summary #: ../jobs/info.txt.in:51 msgid "Attach a copy of of the output of dmidecode" msgstr "" #. description #: ../jobs/info.txt.in:59 msgid "Attaches lshw output" msgstr "" #. description #: ../jobs/info.txt.in:67 msgid "Attaches the firmware version" msgstr "" #. description #: ../jobs/info.txt.in:74 msgid "Attaches very verbose lspci output." msgstr "" #. summary #: ../jobs/info.txt.in:75 msgid "Attach a list of PCI devices" msgstr "" #. description #: ../jobs/info.txt.in:82 msgid "Attaches very verbose lspci output (with central database Query)." msgstr "" #. summary #: ../jobs/info.txt.in:85 msgid "Attach PCI configuration space hex dump" msgstr "" #. description #: ../jobs/info.txt.in:90 msgid "" " Attaches a hex dump of the standard part of the PCI configuration\n" " space for all PCI devices." msgstr "" #. description #: ../jobs/info.txt.in:101 msgid "Attaches a list of detected USB devices." msgstr "" #. description #: ../jobs/info.txt.in:108 msgid "Attaches info on system memory as seen in /proc/meminfo." msgstr "" #. description #: ../jobs/info.txt.in:115 msgid "Attaches the contents of the various modprobe conf files." msgstr "" #. summary #: ../jobs/info.txt.in:116 msgid "Attach the contents of modprobe configuration files" msgstr "" #. summary #: ../jobs/info.txt.in:121 msgid "Attach modinfo information" msgstr "" #. description #: ../jobs/info.txt.in:130 msgid "Attaches modinfo information for all currently loaded modules" msgstr "" #. description #: ../jobs/info.txt.in:138 msgid "Attaches the contents of the /etc/modules file." msgstr "" #. summary #: ../jobs/info.txt.in:139 msgid "Attach the contents of /etc/modules" msgstr "" #. description #: ../jobs/info.txt.in:146 msgid "Attaches the contents of various sysctl config files." msgstr "" #. summary #: ../jobs/info.txt.in:147 msgid "Attach sysctl configuration files." msgstr "" #. description #: ../jobs/info.txt.in:152 msgid "Attaches a report of sysfs attributes." msgstr "" #. summary #: ../jobs/info.txt.in:160 msgid "Attach detailed sysfs property output from udev" msgstr "" #. description #: ../jobs/info.txt.in:167 msgid "" "Attaches a dump of the udev database showing system hardware information." msgstr "" #. summary #: ../jobs/info.txt.in:168 msgid "Attach hardware database (udev)" msgstr "" #. description #: ../jobs/info.txt.in:175 msgid "Attaches the output of udev_resource, for debugging purposes" msgstr "" #. description #: ../jobs/info.txt.in:183 msgid "Attaches a tarball of gcov data if present." msgstr "" #. description #: ../jobs/info.txt.in:190 msgid "Attaches a list of the currently running kernel modules." msgstr "" #. summary #: ../jobs/info.txt.in:191 msgid "Attach a list of currently running kernel modules" msgstr "" #. summary #: ../jobs/info.txt.in:198 msgid "Attaches json dumps of installed dkms package information." msgstr "" #. description #: ../jobs/info.txt.in:205 msgid "Attaches the contents of /proc/acpi/sleep if it exists." msgstr "" #. description #: ../jobs/info.txt.in:210 msgid "Bootchart information." msgstr "" #. summary #: ../jobs/info.txt.in:218 msgid "SATA/IDE device information." msgstr "" #. description #: ../jobs/info.txt.in:221 msgid "Attaches SATA/IDE device information reported by hdparm." msgstr "" #. description #: ../jobs/info.txt.in:243 msgid "Attaches the bootchart png file for bootchart runs" msgstr "" #. description #: ../jobs/info.txt.in:252 msgid "Attaches the bootchart log for bootchart test runs." msgstr "" #. description #: ../jobs/info.txt.in:261 msgid "installs the installer bootchart tarball if it exists." msgstr "" #. description #: ../jobs/info.txt.in:269 msgid "Attaches the installer debug log if it exists." msgstr "" #. description #: ../jobs/info.txt.in:277 msgid "" "Returns the name, driver name and driver version of any touchpad discovered " "on the system." msgstr "" #. description #: ../jobs/info.txt.in:290 msgid "Lists the device driver and version for all audio devices." msgstr "" #. description #: ../jobs/info.txt.in:301 msgid "Provides information about network devices" msgstr "" #. description #: ../jobs/info.txt.in:308 msgid "Provides information about wwan/mobile broadband devices" msgstr "" #. description #: ../jobs/info.txt.in:314 msgid "Provides information about displays attached to the system" msgstr "" #. description #: ../jobs/info.txt.in:322 msgid "Attaches information about disk partitions" msgstr "" #. description #: ../jobs/info.txt.in:328 msgid "Attaches the buildstamp identifier for the preinstalled OS" msgstr "" #. summary #: ../jobs/info.txt.in:329 msgid "Attach /etc/buildstamp" msgstr "" #. description #: ../jobs/info.txt.in:339 msgid "Check existence of recovery partition" msgstr "" #. description #: ../jobs/info.txt.in:350 msgid "Check the recovery type is dell or not" msgstr "" #. summary #: ../jobs/info.txt.in:360 msgid "Attach the recovery partition versions" msgstr "" #. description #: ../jobs/info.txt.in:361 msgid "" "Attach the recovery partition version image_version is the preinstalled OS " "image version bto_version is only for dell_recovery Example: image_version: " "somerville-trusty-amd64-20140620-0 bto_version: A00_dell-bto-trusty-" "houston-15-A11-iso-20141203-0.iso" msgstr "" #. summary #: ../jobs/info.txt.in:377 msgid "Attach the bto.xml in Dell recovery partition" msgstr "" #. description #: ../jobs/info.txt.in:378 msgid "" "bto.xml is basically a Fish manifest The information include:\n" " - fish packages\n" " - dell recovery stage 2 boot log" msgstr "" #. description #: ../jobs/info.txt.in:389 msgid "" "Attaches the debug log from the virtualization/kvm_check_vm test to the " "results submission." msgstr "" #. description #: ../jobs/info.txt.in:399 msgid "Attaches the kernel command line used to boot" msgstr "" #. summary #: ../jobs/info.txt.in:400 msgid "Attach a copy of /proc/cmdline" msgstr "" #. description #: ../jobs/input.txt.in:7 msgid "Pointing device tests." msgstr "" #. description #: ../jobs/input.txt.in:27 msgid "" "PURPOSE:\n" " This test will test your pointing device\n" "STEPS:\n" " 1. Move the cursor using the pointing device or touch the screen.\n" " 2. Perform some single/double/right click operations.\n" "VERIFICATION:\n" " Did the pointing device work as expected?" msgstr "" #. description #: ../jobs/input.txt.in:42 msgid "" "PURPOSE:\n" " This test will test your keyboard\n" "STEPS:\n" " 1. Click on Test\n" " 2. On the open text area, use your keyboard to type something\n" "VERIFICATION:\n" " Is your keyboard working properly?" msgstr "" #. description #: ../jobs/input.txt.in:55 msgid "" "PURPOSE:\n" " Manual detection of accelerometer.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Is this system supposed to have an accelerometer?" msgstr "" #. description #: ../jobs/input.txt.in:70 msgid "" "PURPOSE:\n" " This test will test your accelerometer to see if it is detected\n" " and operational as a joystick device.\n" "STEPS:\n" " 1. Click on Test\n" " 2. Tilt your hardware in the directions onscreen until the axis " "threshold is met.\n" "VERIFICATION:\n" " Is your accelerometer properly detected? Can you use the device?" msgstr "" #. summary #: ../jobs/input.txt.in:85 msgid "Create click tests for pointing devices." msgstr "" #. description #: ../jobs/input.txt.in:86 msgid "Click tests for pointing devices." msgstr "" #. description #: ../jobs/install.txt.in:6 msgid "" "Tests to see that apt can access repositories and get updates (does not " "install updates). This is done to confirm that you could recover from an " "incomplete or broken update." msgstr "" #. description #: ../jobs/keys.txt.in:8 msgid "" "PURPOSE:\n" " This test will test the screen lock key\n" "STEPS:\n" " 1. Commence the test. If there is no such key, please skip this test.\n" " 2. Press the lock screen button on the keyboard in 30 seconds.\n" " 3. If the screen is locked, move the mouse or press any key to activate " "the prompt.\n" " 4. Input the password to unlock the screen.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/keys.txt.in:25 msgid "" "PURPOSE:\n" " This test will test the brightness key\n" "STEPS:\n" " 1. Press the brightness buttons on the keyboard\n" "VERIFICATION:\n" " Did the brightness change following to your key presses?" msgstr "" #. description #: ../jobs/keys.txt.in:41 msgid "" "PURPOSE:\n" " This test will test the volume keys of your keyboard\n" "STEPS:\n" " Skip this test if your computer has no volume keys.\n" " 1. Click test to open a window on which to test the volume keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:59 msgid "" "PURPOSE:\n" " This test will test the mute key of your keyboard\n" "STEPS:\n" " 1. Click test to open a window on which to test the mute key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the mute key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:74 msgid "" "PURPOSE:\n" " This test will test the sleep key\n" "STEPS:\n" " 1. Press the sleep key on the keyboard\n" " 2. Wake your system up by pressing the power button\n" "VERIFICATION:\n" " Did the system go to sleep after pressing the sleep key?" msgstr "" #. description #: ../jobs/keys.txt.in:90 msgid "" "PURPOSE:\n" " This test will test the battery information key\n" "STEPS:\n" " Skip this test if you do not have a Battery Button.\n" " 1. Click Test to begin\n" " 2. Press the Battery Info button (or combo like Fn+F3)\n" " 3: Close the Power Statistics tool if it opens\n" "VERIFICATION:\n" " Did the Battery Info key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:106 msgid "" "PURPOSE:\n" " This test will test the wireless key\n" "STEPS:\n" " 1. Press the wireless key on the keyboard\n" " 2. Check that the wifi LED turns off or changes color\n" " 3. Check that wireless is disabled\n" " 4. Press the same key again\n" " 5. Check that the wifi LED turns on or changes color\n" " 6. Check that wireless is enabled\n" "VERIFICATION:\n" " Did the wireless turn off on the first press and on again on the " "second?\n" " (NOTE: the LED functionality will be reviewed in a following test. " "Please\n" " only consider the functionality of the wifi itself here.)" msgstr "" #. description #: ../jobs/keys.txt.in:129 msgid "" "PURPOSE:\n" " This test will test the media keys of your keyboard\n" "STEPS:\n" " Skip this test if your computer has no media keys.\n" " 1. Click test to open a window on which to test the media keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:147 msgid "" "PURPOSE:\n" " This test will test the super key of your keyboard\n" "STEPS:\n" " 1. Click test to open a window on which to test the super key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the super key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:161 msgid "" "PURPOSE:\n" " Validate that the External Video hot key is working as expected\n" "STEPS:\n" " 1. Plug in an external monitor\n" " 2. Press the display hot key to change the monitors configuration\n" "VERIFICATION:\n" " Check that the video signal can be mirrored, extended, displayed on " "external or onboard only." msgstr "" #. description #: ../jobs/keys.txt.in:175 msgid "" "PURPOSE:\n" " Verify touchpad hotkey toggles touchpad functionality on and off\n" "STEPS:\n" " 1. Verify the touchpad is functional\n" " 2. Tap the touchpad toggle hotkey\n" " 3. Tap the touchpad toggle hotkey again\n" "VERIFICATION:\n" " Verify the touchpad has been disabled and re-enabled." msgstr "" #. description #: ../jobs/keys.txt.in:190 msgid "" "PURPOSE:\n" " Verify that the keyboard backlight toggle key works properly\n" "STEPS:\n" " 1. Tap the keyboard backlight key\n" " 2. Confirm that the keyboard backlight was toggled to the opposite " "state\n" " 3. Tap the keyboard backlight key again\n" " 4. Confirm that the keyboard backlight was toggled to the opposite " "state\n" "VERIFICATION:\n" " Did the keyboard backlight state change on each press?" msgstr "" #. description #: ../jobs/keys.txt.in:218 msgid "" "PURPOSE:\n" " This test will test the mute key for your microphone\n" "STEPS:\n" " 1. Click \"Test\" then speak: \"Imagination is more important than " "knowledge\" (or anything else) into your microphone.\n" " 2. While you are speaking, please press the mute key for the microphone " "to mute it and press it again to unmute.\n" " 3. After a few seconds, your speech will be played back to you. If the " "key works, your speech should be interrupted for a few seconds.\n" "VERIFICATION:\n" " Does the microphone mute key work as expected?" msgstr "" #. description #: ../jobs/keys.txt.in:233 msgid "" "PURPOSE:\n" " This test will test the hibernate key\n" "STEPS:\n" " 1. Press the hibernate key on the keyboard\n" " 2. Check that the system hibernated correctly\n" " 3. Wake your system after hibernating by pressing the power button\n" "VERIFICATION:\n" " Did the system go to hibernate after pressing the hibernate key?" msgstr "" #. description #: ../jobs/keys.txt.in:248 msgid "" "PURPOSE:\n" " This test will test the keyboard overhead light key or switch\n" "STEPS:\n" " 1. Press the keyboard overhead light key or swtich on the light\n" " 2. Check the the keyboard overhead light turn on correctly\n" " 3. Press the key or switch again to toggle off the light\n" "VERIFICATION:\n" " Did the keyboard overhead light key or switch turns on and off the light?" msgstr "" #. description #: ../jobs/led.txt.in:5 msgid "" "PURPOSE:\n" " Power LED verification\n" "STEPS:\n" " 1. Power LED should be on while device is switched on\n" "VERIFICATION:\n" " Does the power LED light as expected?" msgstr "" #. description #: ../jobs/led.txt.in:18 msgid "" "PURPOSE:\n" " Power LED verification\n" "STEPS:\n" " 1. The Power LED should blink or change color while the system is " "suspended\n" "VERIFICATION:\n" " Did the Power LED blink or change color while the system was suspended " "for the previous suspend test?" msgstr "" #. description #: ../jobs/led.txt.in:31 msgid "" "PURPOSE:\n" " Suspend LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a dedicated Suspend LED.\n" " 1. The Suspend LED should blink or change color while the system is\n" " suspended\n" "VERIFICATION\n" " Did the Suspend LED blink or change color while the system was suspended?" msgstr "" #. description #: ../jobs/led.txt.in:45 msgid "" "PURPOSE:\n" " Validate that the battery light shows charging status\n" "STEPS:\n" " 1. Let system run on battery for a while\n" " 2. Plug in AC plug\n" "VERIFICATION:\n" " Did the battery indicator LED turn orange?" msgstr "" #. description #: ../jobs/led.txt.in:58 msgid "" "PURPOSE:\n" " Validate that the battery LED properly displays charged status\n" "STEPS:\n" " 1. Let system run on battery for a short time\n" " 2. Plug in AC\n" " 3. Let system run on AC\n" "VERIFICATION:\n" " Does the orange battery LED shut off when system is fully charged?" msgstr "" #. description #: ../jobs/led.txt.in:72 msgid "" "PURPOSE:\n" " Validate that the battery LED indicated low power\n" "STEPS:\n" " 1. Let system run on battery for several hours\n" " 2. Monitor battery LED carefully\n" "VERIFICATION:\n" " Does the LED light orange when battery is low?" msgstr "" #. description #: ../jobs/led.txt.in:86 msgid "" "PURPOSE:\n" " HDD LED verification\n" "STEPS:\n" " 1. Select \"Test\" to write and read a temporary file for a few seconds\n" " 2. HDD LED should light when writing to/reading from HDD\n" "VERIFICATION:\n" " Did the HDD LED light?" msgstr "" #. description #: ../jobs/led.txt.in:100 msgid "" "PURPOSE:\n" " Numeric keypad LED verification\n" "STEPS:\n" " 1. Press \"Block Num\" key to toggle numeric keypad LED\n" " 2. Click on the \"Test\" button to open a window to verify your typing\n" " 3. Type using the numeric keypad both when the LED is on and off\n" "VERIFICATION:\n" " 1. Numeric keypad LED status should toggle everytime the \"Block Num\" " "key is pressed\n" " 2. Numbers should only be entered in the keyboard verification window " "when the LED is on" msgstr "" #. description #: ../jobs/led.txt.in:115 msgid "" "PURPOSE:\n" " Block cap keys LED verification\n" "STEPS:\n" " 1. Press \"Block Cap Keys\" to activate/deactivate cap keys blocking\n" " 2. Cap Keys LED should be switched on/off every time the key is pressed\n" "VERIFICATION:\n" " Did the Cap Keys LED light as expected?" msgstr "" #. description #: ../jobs/led.txt.in:129 msgid "" "PURPOSE:\n" " WLAN LED verification\n" "STEPS:\n" " 1. During the keys/wireless test you should have observed the\n" " wireless LED while turning wireless back on.\n" " 2. WLAN LED should light or change color when wireless is turned on\n" "VERIFICATION:\n" " Did the WLAN LED turn on or change color as expected?" msgstr "" #. description #: ../jobs/led.txt.in:144 msgid "" "PURPOSE:\n" " Validate that WLAN LED shuts off when disabled\n" "STEPS:\n" " 1. During the keys/wireless test you should have observed the WLAN LED\n" " while performing that test after turning wireless off.\n" " 2. WLAN LED should turn off or change color when wireless is turned off\n" "VERIFICATION:\n" " Did the WLAN LED turn off or change color as expected?" msgstr "" #. description #: ../jobs/led.txt.in:159 msgid "" "PURPOSE:\n" " Validate that the Bluetooth LED turns on and off when BT is enabled/" "disabled\n" "STEPS:\n" " 1. Switch bluetooth off from a hardware switch (if present)\n" " 2. Switch bluetooth back on\n" " 3. Switch bluetooth off from the panel applet\n" " 4. Switch bluetooth back on\n" "VERIFICATION:\n" " Did the bluetooth LED turn off and on twice?" msgstr "" #. description #: ../jobs/led.txt.in:176 msgid "" "PURPOSE:\n" " Camera LED verification\n" "STEPS:\n" " 1. Select Test to activate camera\n" " 2. Camera LED should light for a few seconds\n" "VERIFICATION:\n" " Did the camera LED light?" msgstr "" #. description #: ../jobs/led.txt.in:189 msgid "" "PURPOSE:\n" " Touchpad LED verification\n" "STEPS:\n" " 1. Click on the touchpad button or press key combination to enable/" "disable touchpad button\n" " 2. Slide your finger on the touchpad\n" "VERIFICATION:\n" " 1. Touchpad LED status should toggle everytime the button is clicked or " "the key combination is pressed\n" " 2. When the LED is on, the mouse pointer should move on touchpad usage\n" " 3. When the LED is off, the mouse pointer should not move on touchpad " "usage" msgstr "" #. description #: ../jobs/led.txt.in:204 msgid "" "PURPOSE:\n" " Wireless (WLAN + Bluetooth) LED verification\n" "STEPS:\n" " 1. Make sure WLAN connection is established and Bluetooth is enabled.\n" " 2. WLAN/Bluetooth LED should light\n" " 3. Switch WLAN and Bluetooth off from a hardware switch (if present)\n" " 4. Switch them back on\n" " 5. Switch WLAN and Bluetooth off from the panel applet\n" " 6. Switch them back on\n" "VERIFICATION:\n" " Did the WLAN/Bluetooth LED light as expected?" msgstr "" #. description #: ../jobs/led.txt.in:222 msgid "" "PURPOSE:\n" " Audio Mute LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a special Audio Mute LED.\n" " 1. Press the Mute key twice and observe the Audio LED to determine if " "it\n" " either turned off and on or changed colors.\n" "VERIFICATION:\n" " Did the Audio LED turn on and off or change color as expected?" msgstr "" #. description #: ../jobs/led.txt.in:237 msgid "" "PURPOSE:\n" " Microphone Mute LED verification.\n" "STEPS:\n" " Skip this test if your system does not have a special Microphone Mute " "LED.\n" " 1. Press the Microphone Mute key twice and observe the Microphone LED " "to\n" " determine if it either turned off and on or changed colors.\n" "VERIFICATION:\n" " Did the Microphone Mute LED turn on and off or change color as expected?" msgstr "" #. description #: ../jobs/local.txt.in:3 msgid "Audio tests" msgstr "" #. description #: ../jobs/local.txt.in:10 msgid "Benchmarks tests" msgstr "" #. description #: ../jobs/local.txt.in:17 msgid "Bluetooth tests" msgstr "" #. description #: ../jobs/local.txt.in:24 msgid "Camera tests" msgstr "" #. description #: ../jobs/local.txt.in:31 msgid "Codec tests" msgstr "" #. description #: ../jobs/local.txt.in:38 msgid "CPU tests" msgstr "" #. description #: ../jobs/local.txt.in:45 msgid "System Daemon tests" msgstr "" #. description #: ../jobs/local.txt.in:52 msgid "Disk tests" msgstr "" #. description #: ../jobs/local.txt.in:59 msgid "Docking tests" msgstr "" #. description #: ../jobs/local.txt.in:66 msgid "Ethernet Device tests" msgstr "" #. description #: ../jobs/local.txt.in:73 msgid "eSATA disk tests" msgstr "" #. description #: ../jobs/local.txt.in:80 msgid "Fingerprint reader tests" msgstr "" #. description #: ../jobs/local.txt.in:87 msgid "Firewire disk tests" msgstr "" #. description #: ../jobs/local.txt.in:94 msgid "Firmware tests" msgstr "" #. description #: ../jobs/local.txt.in:101 msgid "Floppy disk tests" msgstr "" #. description #: ../jobs/local.txt.in:108 msgid "Graphics tests" msgstr "" #. description #: ../jobs/local.txt.in:115 msgid "Hibernation tests" msgstr "" #. description #: ../jobs/local.txt.in:122 msgid "Informational tests" msgstr "" #. description #: ../jobs/local.txt.in:129 msgid "Input Devices tests" msgstr "" #. description #: ../jobs/local.txt.in:136 msgid "Software Installation tests" msgstr "" #. description #: ../jobs/local.txt.in:143 msgid "Hotkey tests" msgstr "" #. description #: ../jobs/local.txt.in:150 msgid "LED tests" msgstr "" #. description #: ../jobs/local.txt.in:157 msgid "Media Card tests" msgstr "" #. description #: ../jobs/local.txt.in:164 msgid "Memory tests" msgstr "" #. description #: ../jobs/local.txt.in:171 msgid "Rendercheck tests" msgstr "" #. description #: ../jobs/local.txt.in:178 msgid "MIR tests" msgstr "" #. description #: ../jobs/local.txt.in:185 msgid "Miscellaneous tests" msgstr "" #. description #: ../jobs/local.txt.in:192 msgid "Monitor tests" msgstr "" #. description #: ../jobs/local.txt.in:199 msgid "Non-device specific networking tests" msgstr "" #. description #: ../jobs/local.txt.in:206 msgid "Optical Drive tests" msgstr "" #. description #: ../jobs/local.txt.in:213 msgid "Panel Clock Verification tests" msgstr "" #. description #: ../jobs/local.txt.in:220 msgid "Panel Reboot Verification tests" msgstr "" #. description #: ../jobs/local.txt.in:227 msgid "ExpressCard tests" msgstr "" #. description #: ../jobs/local.txt.in:234 msgid "Peripheral tests" msgstr "" #. description #: ../jobs/local.txt.in:241 msgid "Power Management tests" msgstr "" #. description #: ../jobs/local.txt.in:248 msgid "Server Services checks" msgstr "" #. description #: ../jobs/local.txt.in:255 msgid "Suspend tests" msgstr "" #. description #: ../jobs/local.txt.in:262 msgid "Thunderbolt tests" msgstr "" #. description #: ../jobs/local.txt.in:269 msgid "Touchpad tests" msgstr "" #. description #: ../jobs/local.txt.in:276 msgid "Touchscreen tests" msgstr "" #. description #: ../jobs/local.txt.in:283 msgid "USB tests" msgstr "" #. description #: ../jobs/local.txt.in:290 msgid "User Applications" msgstr "" #. description #: ../jobs/local.txt.in:297 msgid "Virtualization tests" msgstr "" #. description #: ../jobs/local.txt.in:304 msgid "Wireless networking tests" msgstr "" #. description #: ../jobs/local.txt.in:311 msgid "Mobile broadband tests" msgstr "" #. description #: ../jobs/local.txt.in:318 msgid "Stress tests" msgstr "" #. description #: ../jobs/local.txt.in:325 msgid "Smoke tests" msgstr "" #. description #: ../jobs/mediacard.txt.in:6 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Multimedia Card (MMC) media\n" "STEPS:\n" " 1. Click \"Test\" and then insert an MMC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:26 msgid "" "This test is automated and executes after the mediacard/mmc-insert test is " "run. It tests reading and writing to the MMC card." msgstr "" #. description #: ../jobs/mediacard.txt.in:36 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of the MMC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the MMC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:52 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED Secure Digital (SD) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:72 msgid "" "This test is automated and executes after the mediacard/sd-insert test is " "run. It tests reading and writing to the SD card." msgstr "" #. description #: ../jobs/mediacard.txt.in:82 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SD card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:100 msgid "" "This is a fully automated version of mediacard/sd-automated and assumes that " "the system under test has a memory card device plugged in prior to checkbox " "execution. It is intended for SRU automated testing." msgstr "" #. description #: ../jobs/mediacard.txt.in:110 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a UNLOCKED Secure Digital High-Capacity\n" " (SDHC) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SDHC card into the " "reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:131 msgid "" "This test is automated and executes after the mediacard/sdhc-insert test is " "run. It tests reading and writing to the SDHC card." msgstr "" #. description #: ../jobs/mediacard.txt.in:141 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SDHC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SDHC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:157 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Compact Flash (CF) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a CF card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:177 msgid "" "This test is automated and executes after the mediacard/cf-insert test is " "run. It tests reading and writing to the CF card." msgstr "" #. description #: ../jobs/mediacard.txt.in:187 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a CF card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the CF card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:203 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Secure Digital Extended Capacity (SDXC) media " "card\n" "STEPS:\n" " 1. Click \"Test\" and then insert an UNLOCKED SDXC card into the " "reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:223 msgid "" "This test is automated and executes after the mediacard/sdxc-insert test is " "run. It tests reading and writing to the SDXC card." msgstr "" #. description #: ../jobs/mediacard.txt.in:233 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a SDXC card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the SDXC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:249 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Memory Stick (MS) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a MS card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:269 msgid "" "This test is automated and executes after the mediacard/ms-insert test is " "run. It tests reading and writing to the MS card." msgstr "" #. description #: ../jobs/mediacard.txt.in:279 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a MS card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the MS card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:295 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Memory Stick Pro (MSP) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a MSP card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:315 msgid "" "This test is automated and executes after the mediacard/msp-insert test is " "run. It tests reading and writing to the MSP card." msgstr "" #. description #: ../jobs/mediacard.txt.in:325 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a MSP card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MSP card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:341 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a Extreme Digital (xD) media card\n" "STEPS:\n" " 1. Click \"Test\" and then insert a xD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:361 msgid "" "This test is automated and executes after the mediacard/xd-insert test is " "run. It tests reading and writing to the xD card." msgstr "" #. description #: ../jobs/mediacard.txt.in:371 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of a xD card from the systems card reader.\n" "STEPS:\n" " 1. Click \"Test\" and then remove the xD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/mediacard.txt.in:389 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SD card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:405 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SDHC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:421 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MMC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:437 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert CF card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:453 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert SDXC card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:469 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MS card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:485 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert MSP card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/mediacard.txt.in:501 msgid "" "PURPOSE:\n" " This test will check your Media Card data transfer performance.\n" "STEPS:\n" " 1. Insert xD card into the reader slot on this computer.\n" " 2. Commence the test.\n" "VERIFICATION:\n" " Did the results of the test match the expected performance of the " "inserted device?" msgstr "" #. description #: ../jobs/memory.txt.in:7 msgid "" "This test checks the amount of memory which is reporting in meminfo against " "the size of the memory modules detected by DMI." msgstr "" #. description #: ../jobs/memory.txt.in:19 msgid "" "Test to perform some basic stress and exercise of system memory. This test " "also includes an over-commit function to force swapping to disk, thus SUTs " "should have suitably large swap files for the amount of RAM they have " "installed." msgstr "" #. description #: ../jobs/mir.txt.in:5 msgid "MIR Integration tests" msgstr "" #. description #: ../jobs/mir.txt.in:21 msgid "MIR Acceptance tests" msgstr "" #. description #: ../jobs/miscellanea.txt.in:17 msgid "" "A meta-job that verifies the data necessary for a complete result submission " "are present. Failure indicates that the results are incomplete and may be " "rejected." msgstr "" #. description #: ../jobs/miscellanea.txt.in:25 msgid "" "PURPOSE:\n" " Keep tester related information in the report\n" "STEPS:\n" " 1. Tester Information\n" " 2. Please enter the following information in the comments field:\n" " a. Name\n" " b. Email Address\n" " c. Reason for this test run\n" "VERIFICATION:\n" " Nothing to verify for this test" msgstr "" #. description #: ../jobs/miscellanea.txt.in:44 msgid "" "PURPOSE:\n" " This test will check that the system can switch to a virtual terminal " "and back to X\n" "STEPS:\n" " 1. Click \"Test\" to switch to another virtual terminal and then back to " "X\n" "VERIFICATION:\n" " Did your screen change temporarily to a text console and then switch " "back to your current session?" msgstr "" #. description #: ../jobs/miscellanea.txt.in:59 msgid "Run Firmware Test Suite (fwts) automated tests." msgstr "" #. description #: ../jobs/miscellanea.txt.in:70 msgid "Attaches the miscellanes/fwts_test results log to the submission." msgstr "" #. description #: ../jobs/miscellanea.txt.in:78 msgid "Attaches the FWTS results log to the submission (to HWE)" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:79 msgid "Attach FWTS log to submission (to HWE)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:87 msgid "" "This will run some basic commands in-band against a BMC, verifying that IPMI " "works. Use of MAAS to deploy the system implicitly tests out-of-band BMC " "control." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:98 msgid "EFI-mode boot test" msgstr "" #. description #: ../jobs/miscellanea.txt.in:99 msgid "" "Test to verify that the system booted in EFI mode rather than Legacy/BIOS " "mode." msgstr "" #. description #: ../jobs/miscellanea.txt.in:116 msgid "" "This will gather some info about the BMC itself for diagnostic purposes. " "This will not works on non-IPMI systems like AMT and blade/sled type systems." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:119 msgid "Gather BMC Identification info" msgstr "" #. description #: ../jobs/miscellanea.txt.in:129 msgid "Sanity check of CPU information; fails if CPU is an engineering sample" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:131 msgid "CPU sanity check" msgstr "" #. description #: ../jobs/miscellanea.txt.in:141 msgid "Sanity check of DMI system identification data (for servers)" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:143 msgid "DMI ID sanity check (servers)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:153 msgid "Sanity check of DMI system identification data (for desktops & laptops)" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:155 msgid "DMI ID sanity check (desktops/laptops)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:162 msgid "" " Determine if we need to run tests specific to portable computers that may " "not apply to desktops." msgstr "" #. description #: ../jobs/miscellanea.txt.in:171 msgid "" "Test that the /var/crash directory doesn't contain anything. Lists the files " "contained within if it does, or echoes the status of the directory (doesn't " "exist/is empty)" msgstr "" #. description #: ../jobs/miscellanea.txt.in:178 msgid "" "Checks that a specified sources list file contains the requested repositories" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:187 msgid "PXE verification test of device {__index__} ({interface})" msgstr "" #. purpose #: ../jobs/miscellanea.txt.in:189 msgid "" "This test will verify that you have attempted to PXE boot this machine from " "the network device {__index__} ({interface})." msgstr "" #. steps #: ../jobs/miscellanea.txt.in:192 msgid "" "1. Prior to running this test, you should have attempted to boot this system " "via PXE on every Network Port available." msgstr "" #. verification #: ../jobs/miscellanea.txt.in:194 msgid "" "1. Select Yes if you successfully used PXE boot this system using the NIC " "{interface} 2. Select No if you did not attempt to PXE boot this system " "using the NIC {interface} 3. Select No if you attempted to PXE boot via " "{interface} and it failed for some reason." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:206 msgid "" "Remote Shared IPMI verification test for device {__index__} ({interface})" msgstr "" #. purpose #: ../jobs/miscellanea.txt.in:208 msgid "" "This test will verify that you have attempted IPMI control of this machine " "from the network device {__index__} ({interface})." msgstr "" #. steps #: ../jobs/miscellanea.txt.in:210 msgid "" "1. Prior to running this test, you should have configured and used IPMI to " "power this machine off and on using every Network Port available." msgstr "" #. verification #: ../jobs/miscellanea.txt.in:212 msgid "" "1. Select Yes if you successfully used IPMI to remotely power this system " "off and on using the NIC {interface} 2. Select No if you did not attempt to " "use IPMI to remotely power this sytem off and on via the NIC {interface} 3. " "Select No if you attempted to use IPMI to remotely power off/on this system " "via {interface} and it failed for some reason." msgstr "" #. description #: ../jobs/miscellanea.txt.in:220 msgid "" "PURPOSE:\n" " Some systems do not share IPMI over all NICs but instead have a dedicated " "management port directly connected to the BMC. This test verifies that you " "have used that port for remote IPMI connections and actions.\n" "STEPS:\n" " 1. Prior to running the test, you should have configured and used the " "Dedicated Management Port to remotely power off/on this sytem.\n" "VERIFICATION:\n" " Skip this test if this system ONLY uses shared management/ethernet ports OR " "if this system does not have a BMC (Management Console)\n" " 1. Select Yes if you successfully used IPMI to remotely power this system " "off and on using the dedicated management port.\n" " 2. Select No if you attempted to use the dedicated management port to " "remotely power this system off/on and it failed for some reason." msgstr "" #. description #: ../jobs/miscellanea.txt.in:236 msgid "Run Firmware Test Suite (fwts) oops tests." msgstr "" #. description #: ../jobs/miscellanea.txt.in:248 msgid "Attaches the FWTS oops results log to the submission" msgstr "" #. description #: ../jobs/miscellanea.txt.in:261 msgid "" "If system was installed via MAAS from a cert server, the MAAS version used " "should be contained in /etc/installed-by-maas" msgstr "" #. summary #: ../jobs/miscellanea.txt.in:262 msgid "Gets the version of MAAS used to deploy the SUT" msgstr "" #. description #: ../jobs/miscellanea.txt.in:270 msgid "" "Retrieve the computer's make and model for easier access than digging " "through the dmidecode output." msgstr "" #. summary #: ../jobs/miscellanea.txt.in:271 msgid "Retrieve the computer's make and model" msgstr "" #. description #: ../jobs/mobilebroadband.txt.in:29 msgid "" "Creates a mobile broadband connection for a GSM based modem and checks the " "connection to ensure it's working. " msgstr "" #. description #: ../jobs/mobilebroadband.txt.in:58 msgid "" "Creates a mobile broadband connection for a CDMA based modem and checks the " "connection to ensure it's working." msgstr "" #. purpose #: ../jobs/mobilebroadband.txt.in:102 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of device {__index__} ({interface})." msgstr "" #. summary #: ../jobs/monitor.txt.in:3 msgid "VGA port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:23 msgid "DVI port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:43 msgid "DisplayPort test" msgstr "" #. summary #: ../jobs/monitor.txt.in:63 msgid "HDMI port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:83 msgid "S-VIDEO port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:103 msgid "RCA port test" msgstr "" #. summary #: ../jobs/monitor.txt.in:123 msgid "Multi-monitor test" msgstr "" #. summary #: ../jobs/monitor.txt.in:146 msgid "Monitor power-saving test" msgstr "" #. summary #: ../jobs/monitor.txt.in:166 msgid "Screen dimming test" msgstr "" #. summary #: ../jobs/monitor.txt.in:189 msgid "Thunderbolt monitor test" msgstr "" #. description #: ../jobs/networking.txt.in:7 msgid "Tests whether the system has a working Internet connection." msgstr "" #. summary #: ../jobs/networking.txt.in:16 msgid "Network Information of device {__index__} ({interface})" msgstr "" #. description #: ../jobs/networking.txt.in:20 msgid "" "PURPOSE:\n" " This test will check the network device {__index__} ({interface})\n" "STEPS:\n" " 1. Click \"Test\" to verify the information for this network device\n" "VERIFICATION:\n" " Is this correct?" msgstr "" #. description #: ../jobs/networking.txt.in:32 msgid "" "PURPOSE:\n" " This test will check that a DSL modem can be configured and connected.\n" "STEPS:\n" " 1. Connect the telephone line to the computer\n" " 2. Click on the Network icon on the top panel.\n" " 3. Select \"Edit Connections\"\n" " 4. Select the \"DSL\" tab\n" " 5. Click on \"Add\" button\n" " 6. Configure the connection parameters properly\n" " 7. Click \"Test\" to verify that it's possible to establish an HTTP " "connection\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" #. description #: ../jobs/networking.txt.in:50 msgid "" "Automated test case to verify availability of some system on the network " "using ICMP ECHO packets." msgstr "" #. description #: ../jobs/networking.txt.in:57 ../jobs/peripheral.txt.in:40 msgid "" "Automated test case to make sure that it's possible to download files " "through HTTP" msgstr "" #. description #: ../jobs/networking.txt.in:66 msgid "Test to see if we can sync local clock to an NTP server" msgstr "" #. description #: ../jobs/networking.txt.in:73 msgid "" "Verify that an installation of checkbox-server on the network can be reached " "over SSH." msgstr "" #. description #: ../jobs/networking.txt.in:80 msgid "Try to enable a remote printer on the network and print a test page." msgstr "" #. description #: ../jobs/optical.txt.in:6 msgid "Detects optical drives (CD/DVD) attached to the system." msgstr "" #. description #: ../jobs/optical.txt.in:18 msgid "Optical read test." msgstr "" #. summary #: ../jobs/optical.txt.in:40 msgid "Automated optical read test." msgstr "" #. description #: ../jobs/optical.txt.in:45 msgid "" "Automated test to read a data CD/DVD and ensure the optical drive works " "properly." msgstr "" #. description #: ../jobs/optical.txt.in:66 msgid "CD write test." msgstr "" #. description #: ../jobs/optical.txt.in:96 msgid "Automated CD write test" msgstr "" #. description #: ../jobs/optical.txt.in:117 msgid "" "PURPOSE:\n" " This test will check your CD audio playback capabilities\n" "STEPS:\n" " 1. Insert an audio CD in your optical drive\n" " 2. When prompted, launch the Music Player\n" " 3. Locate the CD in the display of the Music Player\n" " 4. Select the CD in the Music Player\n" " 5. Click the Play button to listen to the music on the CD\n" " 6. Stop playing after some time\n" " 7. Right click on the CD icon and select \"Eject Disc\"\n" " 8. The CD should be ejected\n" " 9. Close the Music Player\n" "VERIFICATION:\n" " Did all the steps work?" msgstr "" #. description #: ../jobs/optical.txt.in:139 msgid "DVD write test." msgstr "" #. description #: ../jobs/optical.txt.in:169 msgid "Automated DVD write test." msgstr "" #. description #: ../jobs/optical.txt.in:193 msgid "" "PURPOSE:\n" " This test will check your DVD playback capabilities\n" "STEPS:\n" " 1. Insert a DVD that contains any movie in your optical drive\n" " 2. Click \"Test\" to play the DVD in Totem\n" "VERIFICATION:\n" " Did the file play?" msgstr "" #. description #: ../jobs/optical.txt.in:207 msgid "Automated Blu-Ray read test." msgstr "" #. description #: ../jobs/optical.txt.in:235 msgid "Automated Blu-Ray write test." msgstr "" #. description #: ../jobs/panel_clock_test.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that the desktop clock displays the correct date " "and time\n" "STEPS:\n" " 1. Check the clock in the upper right corner of your desktop.\n" "VERIFICATION:\n" " Is the clock displaying the correct date and time for your timezone?" msgstr "" #. description #: ../jobs/panel_clock_test.txt.in:18 msgid "" "PURPOSE:\n" " This test will verify that the desktop clock synchronizes with the system " "clock.\n" "STEPS:\n" " 1. Commence the test and verify the clock moves ahead by 1 hour.\n" " Note: It may take a minute or so for the clock to refresh\n" " 2. Right click on the clock, then click on \"Time & Date Settings...\"\n" " 3. Ensure that your clock application is set to manual.\n" " 4. Change the time 1 hour back\n" " 5. Close the window and reboot\n" "VERIFICATION:\n" " Is your system clock displaying the correct date and time for your " "timezone?" msgstr "" #. description #: ../jobs/panel_reboot.txt.in:3 msgid "" "PURPOSE:\n" " This test will verify that you can reboot your system from the desktop " "menu\n" "STEPS:\n" " 1. Click the Gear icon in the upper right corner of the desktop and click " "on \"Shut Down\"\n" " 2. Click the \"Restart\" button on the left side of the Shut Down dialog\n" " 3. After logging back in, restart System Testing and it should resume " "here\n" "VERIFICATION:\n" " Did your system restart and bring up the GUI login cleanly?" msgstr "" #. description #: ../jobs/peripheral.txt.in:4 msgid "" "PURPOSE:\n" " This test will verify that a network printer is usable\n" "STEPS:\n" " 1. Make sure that a printer is available in your network\n" " 2. Click on the Gear icon in the upper right corner and then click on " "Printers\n" " 3. If the printer isn't already listed, click on Add\n" " 4. The printer should be detected and proper configuration values should " "be displayed\n" " 5. Print a test page\n" "VERIFICATION:\n" " Were you able to print a test page to the network printer?" msgstr "" #. description #: ../jobs/peripheral.txt.in:20 msgid "" "PURPOSE:\n" " This test will verify that a USB DSL or Mobile Broadband modem works\n" "STEPS:\n" " 1. Connect the USB cable to the computer\n" " 2. Right click on the Network icon in the panel\n" " 3. Select 'Edit Connections'\n" " 4. Select the 'DSL' (for ADSL modem) or 'Mobile Broadband' (for 3G modem) " "tab\n" " 5. Click on 'Add' button\n" " 6. Configure the connection parameters properly\n" " 7. Notify OSD should confirm that the connection has been established\n" " 8. Select Test to verify that it's possible to establish an HTTP " "connection\n" "VERIFICATION:\n" " Was the connection correctly established?" msgstr "" #. description #: ../jobs/power-management.txt.in:5 msgid "" "PURPOSE:\n" " This test will check your system shutdown/booting cycle.\n" "STEPS:\n" " 1. Shutdown your machine.\n" " 2. Boot your machine.\n" " 3. Repeat steps 1 and 2 at least 5 times.\n" "VERIFICATION:\n" " Did the system shutdown and rebooted correctly?" msgstr "" #. description #: ../jobs/power-management.txt.in:21 msgid "Test ACPI Wakealarm (fwts wakealarm)" msgstr "" #. description #: ../jobs/power-management.txt.in:31 msgid "Attach log from fwts wakealarm test" msgstr "" #. description #: ../jobs/power-management.txt.in:48 msgid "" "PURPOSE:\n" " This test will check the system's ability to power-off and boot.\n" "STEPS:\n" " 1. Select \"Test\" to begin.\n" " 2. The machine will shut down.\n" " 3. Power the machine back on.\n" " 4. After rebooting, wait for the test prompts to inform you that the test " "is complete.\n" " 5. Once the test has completed, restart checkbox and select 'Re-run' when " "prompted.\n" "VERIFICATION:\n" " If the machine successfully shuts down and boots, select 'Yes', otherwise,\n" " select 'No'." msgstr "" #. description #: ../jobs/power-management.txt.in:68 msgid "" "This will attach any logs from the power-management/poweroff test to the " "results." msgstr "" #. description #: ../jobs/power-management.txt.in:82 msgid "" "PURPOSE:\n" " This test will check the system's ability to reboot cleanly.\n" "STEPS:\n" " 1. Select \"Test\" to begin.\n" " 2. The machine will reboot.\n" " 3. After rebooting, wait for the test prompts to inform you that the test " "is complete.\n" " 4. Once the test has completed, restart checkbox and select Re-Run when " "prompted.\n" "VERIFICATION:\n" " If the machine successfully reboots, select Yes then select Next." msgstr "" #. description #: ../jobs/power-management.txt.in:100 msgid "" "This will attach any logs from the power-management/reboot test to the " "results." msgstr "" #. description #: ../jobs/power-management.txt.in:108 msgid "" "PURPOSE:\n" " This test will check your lid sensors.\n" "STEPS:\n" " 1. Close your laptop lid.\n" "VERIFICATION:\n" " Does closing your laptop lid cause your system to suspend?" msgstr "" #. description #: ../jobs/power-management.txt.in:127 msgid "" "PURPOSE:\n" " This test will check your lid sensors\n" "STEPS:\n" " 1. Click \"Test\".\n" " 2. Close and open the lid.\n" "VERIFICATION:\n" " Did the screen turn off while the lid was closed?" msgstr "" #. description #: ../jobs/power-management.txt.in:147 msgid "" "PURPOSE:\n" " This test will check your lid sensors.\n" "STEPS:\n" " 1. Click \"Test\".\n" " 2. Close the lid.\n" " 3. Wait 5 seconds with the lid closed.\n" " 4. Open the lid.\n" "VERIFICATION:\n" " Did the system resume when the lid was opened?" msgstr "" #. description #: ../jobs/power-management.txt.in:168 msgid "" "Verify that the Real-time clock (RTC) device functions properly, if present." msgstr "" #. description #: ../jobs/power-management.txt.in:176 msgid "" "Check to see if CONFIG_NO_HZ is set in the kernel (this is just a simple " "regression check)" msgstr "" #. description #: ../jobs/power-management.txt.in:184 msgid "" "PURPOSE:\n" " This test will ensure that the AC is unplugged for the battery drain " "tests to run.\n" "STEPS:\n" " 1. Unplug laptop from AC.\n" "VERIFICATION:\n" " Was the laptop unplugged from AC?" msgstr "" #. description #: ../jobs/power-management.txt.in:198 msgid "" "Checks the battery drain during idle. Reports time and capacity until empty." msgstr "" #. description #: ../jobs/power-management.txt.in:209 msgid "" "Checks the battery drain while watching a movie. Reports time and capacity " "until empty. Requires MOVIE_VAR to be set." msgstr "" #. description #: ../jobs/power-management.txt.in:222 msgid "" "Checks the battery drain during suspend. Reports time and capacity until " "empty." msgstr "" #. description #: ../jobs/power-management.txt.in:231 msgid "" "PURPOSE:\n" " This test will ensure that the AC is plugged back in after the battery.\n" " tests\n" "STEPS:\n" " 1. Plug laptop into AC.\n" "VERIFICATION:\n" " Was the laptop plugged into AC?" msgstr "" #. description #: ../jobs/power-management.txt.in:246 msgid "" "PURPOSE:\n" " This test will verify that your system can successfully reboot.\n" "STEPS:\n" " 1. Select 'Test' to initiate a system reboot.\n" " 2. When the grub boot menu is displayed, boot into Ubuntu (Or allow the\n" " system to automatically boot on its own).\n" " 3. Once the system has restarted, log in and restart checkbox-" "certification-server.\n" " 4. Select 'Re-Run' to return to this test.\n" " 5. Select 'Yes' to indicate the test has passed if the system rebooted\n" " successfully, otherwise, select 'No' to indicate there was a problem.\n" "VERIFICATION:\n" " Did the system reboot correctly?" msgstr "" #. description #: ../jobs/power-management.txt.in:266 msgid "" "PURPOSE:\n" " This test will check your system shutdown/booting cycle\n" "STEPS:\n" " 1. Select 'Test' to initiate a system shutdown.\n" " 2. Power the system back on.\n" " 3. From the grub menu, boot into the Xen Hypervisor.\n" " 4. When the system has restarted, log in and restart checkbox-" "certification-server.\n" " 5. Select 'Re-Run' to return to this test.\n" " 6. Select 'Yes' to indicate the test has passed if the machine shut " "down\n" " successfully otherwise, Select 'No' to indicate there was a problem.\n" "VERIFICATION:\n" " Did the system shutdown and boot correctly?" msgstr "" #. description #: ../jobs/rendercheck.txt.in:7 msgid "" "Runs all of the rendercheck test suites. This test can take a few minutes." msgstr "" #. description #: ../jobs/rendercheck.txt.in:15 msgid "Attach log from rendercheck tests" msgstr "" #. description #: ../jobs/server-services.txt.in:5 msgid "Verifies that sshd is running." msgstr "" #. description #: ../jobs/server-services.txt.in:11 msgid "Verifies that Print/CUPs server is running." msgstr "" #. description #: ../jobs/server-services.txt.in:20 msgid "Verifies that DNS server is running and working." msgstr "" #. description #: ../jobs/server-services.txt.in:29 msgid "Verifies that Samba server is running." msgstr "" #. description #: ../jobs/server-services.txt.in:40 msgid "Verifies that the LAMP stack is running (Apache, MySQL and PHP)." msgstr "" #. description #: ../jobs/server-services.txt.in:47 msgid "Verifies that Tomcat server is running and working." msgstr "" #. description #: ../jobs/smoke.txt.in:4 msgid "Check success result from shell test case" msgstr "" #. description #: ../jobs/smoke.txt.in:10 msgid "Check failed result from shell test case" msgstr "" #. description #: ../jobs/smoke.txt.in:17 msgid "Check job is executed when dependency succeeds" msgstr "" #. description #: ../jobs/smoke.txt.in:24 msgid "Check job result is set to uninitiated when dependency fails" msgstr "" #. description #: ../jobs/smoke.txt.in:31 msgid "Check job is executed when requirements are met" msgstr "" #. description #: ../jobs/smoke.txt.in:38 msgid "" "Check job result is set to \"not required on this system\" when requirements " "are not met" msgstr "" #. description #: ../jobs/smoke.txt.in:43 msgid "" "PURPOSE:\n" " This test checks that the manual plugin works fine\n" "STEPS:\n" " 1. Add a comment\n" " 2. Set the result as passed\n" "VERIFICATION:\n" " Check that in the report the result is passed and the comment is " "displayed" msgstr "" #. description #: ../jobs/stress.txt.in:9 msgid "" "Simulate high system load using the 'stress' tool to exercise the CPU for " "several hours. The test is considered passed if the system does not freeze " "or abend." msgstr "" #. description #: ../jobs/stress.txt.in:33 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to hibernate/" "resume for 30 cycles" msgstr "" #. description #: ../jobs/stress.txt.in:42 msgid "" "Automated check of the 30 cycle hibernate log for errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:50 msgid "Attaches the log from the 30 cycle Hibernate/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:63 msgid "" "This is an automated stress test that will run a sequence of '30 suspend/" "resume cycles and one reboot' 3 times." msgstr "" #. description #: ../jobs/stress.txt.in:83 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to suspend/" "resume for 30 cycles." msgstr "" #. description #: ../jobs/stress.txt.in:93 msgid "" "Automated check of the 30 cycle suspend log for errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:102 msgid "" "Automated check of the '30 cycle suspend and 1 reboot times 3' logs for " "errors detected by fwts." msgstr "" #. description #: ../jobs/stress.txt.in:111 msgid "Attaches the log from the 30 cycle Suspend/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:120 msgid "" "Attaches the log from the '30 cycle Suspend/Resume and one reboot times 3' " "test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:156 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to hibernate/" "resume for 250 cycles" msgstr "" #. description #: ../jobs/stress.txt.in:165 msgid "Attaches the log from the 250 cycle Hibernate/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:183 msgid "" "PURPOSE:\n" " This is an automated stress test that will force the system to suspend/" "resume for 250 cycles." msgstr "" #. description #: ../jobs/stress.txt.in:192 msgid "Attaches the log from the 250 cycle Suspend/Resume test if it exists" msgstr "" #. description #: ../jobs/stress.txt.in:200 ../jobs/suspend.txt.in:388 msgid "" "Checks the sleep times to ensure that a machine suspends and resumes within " "a given threshold" msgstr "" #. description #: ../jobs/stress.txt.in:214 msgid "Stress reboot system (100 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:237 msgid "Stress reboot system (30 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:259 msgid "Stress poweroff system (100 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:282 msgid "Stress poweroff system (30 cycles)" msgstr "" #. description #: ../jobs/stress.txt.in:299 msgid "Check logs for the stress reboot (30 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:316 msgid "Check logs for the stress poweroff (30 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:333 msgid "Check logs for the stress reboot (100 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:350 msgid "Check logs for the stress poweroff (100 cycles) test case" msgstr "" #. description #: ../jobs/stress.txt.in:370 msgid "Run the graphics stress test. This test can take a few minutes." msgstr "" #. description #: ../jobs/stress.txt.in:380 msgid "Attaches the graphics stress results to the submission." msgstr "" #. description #: ../jobs/stress.txt.in:388 msgid "Runs a test that transfers 100 10MB files 3 times to usb." msgstr "" #. summary #: ../jobs/stress.txt.in:394 msgid "Stress test for SDHC card" msgstr "" #. description #: ../jobs/stress.txt.in:397 msgid "" "PURPOSE:\n" " This test will transfers 100 10MB files 3 times to a SDHC card, to\n" " check that the systems media card reader can transfer large amounts\n" " of data.\n" "STEPS:\n" " 1. Insert a SDHC card into the reader and then Click \"Test\".\n" " If a file browser opens up, you can safely close it.\n" " 2. Do not remove the device during this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/stress.txt.in:417 msgid "Ping ubuntu.com and restart network interfaces 100 times" msgstr "" #. description #: ../jobs/stress.txt.in:431 msgid "" "PURPOSE:\n" " To make sure that stressing the wifi hotkey does not cause applets to " "disappear from the panel or the system to lock up\n" "STEPS:\n" " 1. Log in to desktop\n" " 2. Press wifi hotkey at a rate of 1 press per second and slowly increase " "the speed of the tap, until you are tapping as fast as possible\n" "VERIFICATION:\n" " Verify the system is not frozen and the wifi and bluetooth applets are " "still visible and functional" msgstr "" #. description #: ../jobs/suspend.txt.in:6 msgid "Record the current network before suspending." msgstr "" #. summary #: ../jobs/suspend.txt.in:19 msgid "Record the current resolution before suspending." msgstr "" #. description #: ../jobs/suspend.txt.in:38 msgid "Record mixer settings before suspending." msgstr "" #. description #: ../jobs/suspend.txt.in:45 msgid "Verify that all the CPUs are online before suspending" msgstr "" #. description #: ../jobs/suspend.txt.in:52 msgid "" "Dumps memory info to a file for comparison after suspend test has been run" msgstr "" #. description #: ../jobs/suspend.txt.in:63 msgid "" "This test disconnects all connections and then connects to the wireless " "interface. It then checks the connection to confirm it's working as expected." msgstr "" #. description #: ../jobs/suspend.txt.in:100 msgid "" "This test executes iperf connection performance/stability against device " "{__index__} ({interface}) before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:128 msgid "" "This test executes iperf connection performance/stability against the " "broadband device found on the system before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:232 msgid "" "PURPOSE:\n" " This test will check suspend and resume\n" "STEPS:\n" " 1. Click \"Test\" and your system will suspend for about 30 - 60 " "seconds\n" " 2. Observe the Power LED to see if it blinks or changes color during " "suspend\n" " 3. If your system does not wake itself up after 60 seconds, please press " "the power button momentarily to wake the system manually\n" " 4. If your system fails to wake at all and must be rebooted, restart " "System Testing after reboot and mark this test as Failed\n" "VERIFICATION:\n" " Did your system suspend and resume correctly?\n" " (NOTE: Please only consider whether the system successfully suspended " "and resumed. Power/Suspend LED verification will occur after this test is " "completed.)" msgstr "" #. summary #: ../jobs/suspend.txt.in:247 msgid "Suspend after graphics card switch tests" msgstr "" #. description #: ../jobs/suspend.txt.in:290 msgid "This is the automated version of suspend/suspend_advanced." msgstr "" #. summary #: ../jobs/suspend.txt.in:299 msgid "Hybrid sleep test" msgstr "" #. description #: ../jobs/suspend.txt.in:327 msgid "Automated check of the suspend log to look for errors reported by fwts" msgstr "" #. summary #: ../jobs/suspend.txt.in:339 msgid "Suspend log attach" msgstr "" #. summary #: ../jobs/suspend.txt.in:354 msgid "Hybrid sleep log check test" msgstr "" #. summary #: ../jobs/suspend.txt.in:370 msgid "Hybrid sleep log attach" msgstr "" #. summary #: ../jobs/suspend.txt.in:393 msgid "Suspend time check test" msgstr "" #. description #: ../jobs/suspend.txt.in:413 msgid "" "PURPOSE:\n" " Wake up by USB keyboard\n" "STEPS:\n" " 1. Enable \"Wake by USB KB/Mouse\" item in BIOS\n" " 2. Press \"Test\" to enter suspend (S3) mode\n" " 3. Press any key of USB keyboard to wake system up\n" "VERIFICATION:\n" " Did the system wake up from suspend mode when you pressed a keyboard key?" msgstr "" #. description #: ../jobs/suspend.txt.in:430 msgid "" "PURPOSE:\n" " Wake up by USB mouse\n" "STEPS:\n" " 1. Enable \"Wake by USB KB/Mouse\" item in BIOS\n" " 2. Press \"Test\" to enter suspend (S3) mode\n" " 3. Press any button of USB mouse to wake system up\n" "VERIFICATION:\n" " Did the system wake up from suspend mode when you pressed the mouse " "button?" msgstr "" #. description #: ../jobs/suspend.txt.in:445 msgid "Test the network after resuming." msgstr "" #. description #: ../jobs/suspend.txt.in:453 msgid "Test to see that we have the same resolution after resuming as before." msgstr "" #. summary #: ../jobs/suspend.txt.in:459 msgid "" "Resolution consistency check after suspend with the valuse we got before " "suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:492 msgid "" "Verify that mixer settings after suspend are the same as before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:506 msgid "" "PURPOSE:\n" " Check that system detects speakers or headphones being plugged in after " "suspend\n" "STEPS:\n" " 1. Prepare a pair of headphones or speakers with a standard 3.5mm jack\n" " 2. Locate the speaker / headphone jack on the device under test\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug headphones or speakers into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/suspend.txt.in:528 msgid "" "PURPOSE:\n" " Check that system detects a microphone being plugged in after suspend\n" "STEPS:\n" " 1. Prepare a microphone with a standard 3.5mm jack\n" " 2. Locate the microphone jack on the device under test.\n" " Keep in mind that it may be shared with the headphone jack.\n" " 3. Run the test (you have 30 seconds from now on)\n" " 4. Plug the microphone into the appropriate jack\n" " 5. Unplug the device for subsequent tests.\n" "VERIFICATION:\n" " Verification is automatic, no action is required.\n" " The test times out after 30 seconds (and fails in that case)." msgstr "" #. description #: ../jobs/suspend.txt.in:559 msgid "" "PURPOSE:\n" " This test will check that headphones connector works correctly after " "suspend\n" "STEPS:\n" " 1. Connect a pair of headphones to your audio device\n" " 2. Commence the test to play a sound to your audio device\n" "VERIFICATION:\n" " Did you hear a sound through the headphones and did the sound play " "without any distortion, clicks or other strange noises from your headphones?" msgstr "" #. description #: ../jobs/suspend.txt.in:585 msgid "" "PURPOSE:\n" " This test will check that recording sound using an external microphone " "works correctly after suspend\n" "STEPS:\n" " 1. Connect a microphone to your microphone port\n" " 2. Click \"Test\", then speak into the external microphone\n" " 3. After a few seconds, your speech will be played back to you\n" "VERIFICATION:\n" " Did you hear your speech played back?" msgstr "" #. description #: ../jobs/suspend.txt.in:608 msgid "Verify that all CPUs are online after resuming." msgstr "" #. description #: ../jobs/suspend.txt.in:625 msgid "Verify that all memory is available after resuming from suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:634 msgid "" "PURPOSE:\n" " This test will check that the display is correct after suspend and " "resume\n" "STEPS:\n" " 1. Check that your display does not show up visual artifacts after " "resuming.\n" "VERIFICATION:\n" " Does the display work normally after resuming from suspend?" msgstr "" #. summary #: ../jobs/suspend.txt.in:645 msgid "Display after suspend tests" msgstr "" #. description #: ../jobs/suspend.txt.in:671 msgid "" "This test checks that the wireless interface is working after suspending the " "system. It disconnects all interfaces and then connects to the wireless " "interface and checks that the connection is working as expected." msgstr "" #. description #: ../jobs/suspend.txt.in:891 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11b/g protocols after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:922 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11b/g protocols after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:953 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11n protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:984 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11n protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:1016 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11ac protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:1048 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11ac protocol after the system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:1085 msgid "" "This test executes iperf connection performance/stability against device " "{__index__} ({interface}) after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1113 msgid "" "This test executes iperf connection performance/stability against the " "broadband device found on the system after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1143 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1183 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1223 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11n protocols.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1263 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11n protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1303 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "that set in ROUTER_PSK\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1343 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your routers configuration tool\n" " 2. Change the settings to only accept connections on the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to ROUTER_SSID\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/suspend.txt.in:1379 msgid "" "This test grabs the hardware address of the bluetooth adapter after suspend " "and compares it to the address grabbed before suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:1437 msgid "" "This is an automated Bluetooth file transfer test. It sends an image to the " "device specified by the BTDEVADDR environment variable." msgstr "" #. description #: ../jobs/suspend.txt.in:1495 msgid "" "This is an automated Bluetooth test. It emulates browsing on a remote device " "specified by the BTDEVADDR environment variable." msgstr "" #. description #: ../jobs/suspend.txt.in:1553 msgid "" "This is an automated Bluetooth test. It receives the given file from a " "remote host specified by the BTDEVADDR environment variable" msgstr "" #. description #: ../jobs/suspend.txt.in:1563 msgid "" "PURPOSE:\n" " This test will cycle through the detected display modes\n" "STEPS:\n" " 1. Click \"Test\" and the display will cycle trough the display modes\n" "VERIFICATION:\n" " Did your display look fine in the detected mode?" msgstr "" #. summary #: ../jobs/suspend.txt.in:1575 msgid "Cycle resolution after suspend tests" msgstr "" #. description #: ../jobs/suspend.txt.in:1600 msgid "" "This test will check to make sure supported video modes work after a suspend " "and resume. This is done automatically by taking screenshots and uploading " "them as an attachment." msgstr "" #. description #: ../jobs/suspend.txt.in:1610 msgid "" "This attaches screenshots from the suspend/cycle_resolutions_after_suspend " "test to the results submission." msgstr "" #. summary #: ../jobs/suspend.txt.in:1615 msgid "" "Attach screenshots from the suspend/cycle_resolution_after_suspend test to " "the results submission." msgstr "" #. description #: ../jobs/suspend.txt.in:1657 msgid "" "This will check to make sure that your audio device works properly after a " "suspend and resume. This may work fine with speakers and onboard " "microphone, however, it works best if used with a cable connecting the audio-" "out jack to the audio-in jack." msgstr "" #. description #: ../jobs/suspend.txt.in:1664 msgid "Attaches the log from the single suspend/resume test to the results" msgstr "" #. description #: ../jobs/suspend.txt.in:1674 msgid "" "PURPOSE:\n" " Take a screengrab of the current screen after suspend (logged on Unity " "desktop)\n" "STEPS:\n" " 1. Take picture using USB webcam\n" "VERIFICATION:\n" " Review attachment manually later" msgstr "" #. description #: ../jobs/suspend.txt.in:1687 msgid "Attaches the screenshot captured in graphics/screenshot." msgstr "" #. description #: ../jobs/suspend.txt.in:1699 msgid "" "PURPOSE:\n" " Do some challenging operations then check for lockup on the GPU\n" "STEPS:\n" " 1. Create 2 glxgears windows and move them quickly\n" " 2. Switch workspaces with wmctrl\n" " 3. Launch an HTML5 video playback in firefox\n" "VERIFICATION:\n" " After a 60s workload, check kern.log for reported GPU errors" msgstr "" #. description #: ../jobs/suspend.txt.in:1729 msgid "" "Checks the length of time it takes to reconnect an existing wifi connection " "after a suspend/resume cycle." msgstr "" #. description #: ../jobs/suspend.txt.in:1753 msgid "" "Checks the length of time it takes to reconnect an existing wired " "connection\n" " after a suspend/resume cycle." msgstr "" #. description #: ../jobs/suspend.txt.in:1762 msgid "" "PURPOSE:\n" " Validate that the power LED operated the same after resuming from " "suspend\n" "STEPS:\n" " 1. Power LED should be on while device is switched on\n" "VERIFICATION:\n" " Does the power LED remain on after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1775 msgid "" "PURPOSE:\n" " Validate that the battery light shows charging status after resuming " "from suspend\n" "STEPS:\n" " 1. Let system run on battery for a while\n" " 2. Plug in AC plug\n" "VERIFICATION:\n" " Did the battery indicator LED still turn orange after resuming from " "suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1789 msgid "" "PURPOSE:\n" " Validate that the battery LED properly displays charged status after " "resuming from suspend\n" "STEPS:\n" " 1. Let system run on battery for a short time\n" " 2. Plug in AC\n" " 3. Let system run on AC\n" "VERIFICATION:\n" " Does the orange battery LED still shut off when system is fully charged " "after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1804 msgid "" "PURPOSE:\n" " Validate that the battery LED indicated low power after resuming from " "suspend\n" "STEPS:\n" " 1. Let system run on battery for several hours\n" " 2. Monitor battery LED carefully\n" "VERIFICATION:\n" " Does the LED light orange when battery is low after resuming from " "suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1819 msgid "" "PURPOSE:\n" " Validate that the HDD LED still operates as expected after resuming from " "suspend\n" "STEPS:\n" " 1. Select \"Test\" to write and read a temporary file for a few seconds\n" " 2. HDD LED should blink when writing to/reading from HDD\n" "VERIFICATION:\n" " Did the HDD LED still blink with HDD activity after resuming from " "suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1834 msgid "" "PURPOSE:\n" " Validate that the numeric keypad LED operates the same before and after " "resuming from suspend\n" "STEPS:\n" " 1. Press \"Block Num\" key to toggle numeric keypad LED\n" " 2. Click on the \"Test\" button to open a window to verify your typing\n" " 3. Type using the numeric keypad both when the LED is on and off\n" "VERIFICATION:\n" " 1. Numeric keypad LED status should toggle everytime the \"Block Num\" " "key is pressed\n" " 2. Numbers should only be entered in the keyboard verification window " "when the LED is on" msgstr "" #. description #: ../jobs/suspend.txt.in:1850 msgid "" "PURPOSE:\n" " Validate that the Caps Lock key operates the same before and after " "resuming from suspend\n" "STEPS:\n" " 1. Press \"Block Cap Keys\" to activate/deactivate cap keys blocking\n" " 2. Cap Keys LED should be switched on/off every time the key is pressed\n" "VERIFICATION:\n" " Did the Cap Keys LED light as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1864 msgid "" "PURPOSE:\n" " WLAN LED verification after resuming from suspend\n" "STEPS:\n" " 1. Make sure WLAN connection is established\n" " 2. WLAN LED should light\n" "VERIFICATION:\n" " Did the WLAN LED light as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1878 msgid "" "PURPOSE:\n" " Validate that WLAN LED shuts off when disabled after resuming from " "suspend\n" "STEPS:\n" " 1. Connect to AP\n" " 2. Use Physical switch to disable WLAN\n" " 3. Re-enable\n" " 4. Use Network-Manager to disable WLAN\n" "VERIFICATION:\n" " Did the LED turn off then WLAN is disabled after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1894 msgid "" "PURPOSE:\n" " Validate that the Bluetooth LED turns on and off when BT is enabled/" "disabled after resuming from suspend\n" "STEPS:\n" " 1. Switch bluetooth off from a hardware switch (if present)\n" " 2. Switch bluetooth back on\n" " 3. Switch bluetooth off from the panel applet\n" " 4. Switch bluetooth back on\n" "VERIFICATION:\n" " Did the bluetooth LED turn off and on twice after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1913 msgid "" "PURPOSE:\n" " Validate that the camera LED still works as expected after resuming from " "suspend\n" "STEPS:\n" " 1. Select Test to activate camera\n" " 2. Camera LED should light for a few seconds\n" "VERIFICATION:\n" " Did the camera LED still turn on and off after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1927 msgid "" "PURPOSE:\n" " Touchpad LED verification after resuming from suspend\n" "STEPS:\n" " 1. Click on the touchpad button or press key combination to enable/" "disable touchpad button\n" " 2. Slide your finger on the touchpad\n" "VERIFICATION:\n" " 1. Touchpad LED status should toggle everytime the button is clicked or " "the key combination is pressed\n" " 2. When the LED is on, the mouse pointer should move on touchpad usage\n" " 3. When the LED is off, the mouse pointer should not move on touchpad " "usage" msgstr "" #. description #: ../jobs/suspend.txt.in:1943 msgid "" "PURPOSE:\n" " Validate Wireless (WLAN + Bluetooth) LED operated the same after " "resuming from suspend\n" "STEPS:\n" " 1. Make sure WLAN connection is established and Bluetooth is enabled.\n" " 2. WLAN/Bluetooth LED should light\n" " 3. Switch WLAN and Bluetooth off from a hardware switch (if present)\n" " 4. Switch them back on\n" " 5. Switch WLAN and Bluetooth off from the panel applet\n" " 6. Switch them back on\n" "VERIFICATION:\n" " Did the WLAN/Bluetooth LED light as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1962 msgid "" "PURPOSE:\n" " This test will test the brightness key after resuming from suspend\n" "STEPS:\n" " 1. Press the brightness buttons on the keyboard\n" "VERIFICATION:\n" " Did the brightness change following to your key presses after resuming " "from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:1979 msgid "" "PURPOSE:\n" " This test will test the volume keys of your keyboard after resuming from " "suspend\n" "STEPS:\n" " Skip this test if your computer has no volume keys.\n" " 1. Click test to open a window on which to test the volume keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Did the volume change following to your key presses?" msgstr "" #. description #: ../jobs/suspend.txt.in:1998 msgid "" "PURPOSE:\n" " This test will test the mute key of your keyboard after resuming from " "suspend\n" "STEPS:\n" " 1. Click test to open a window on which to test the mute key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Did the volume mute following your key presses?" msgstr "" #. description #: ../jobs/suspend.txt.in:2014 msgid "" "PURPOSE:\n" " This test will test the sleep key after resuming from suspend\n" "STEPS:\n" " 1. Press the sleep key on the keyboard\n" " 2. Wake your system up by pressing the power button\n" "VERIFICATION:\n" " Did the system go to sleep after pressing the sleep key after resuming " "from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2031 msgid "" "PURPOSE:\n" " This test will test the battery information key after resuming from " "suspend\n" "STEPS:\n" " Skip this test if you do not have a Battery Button.\n" " 1. Click Test to begin\n" " 2. Press the Battery Info button (or combo like Fn+F3)\n" " 3: Close the Power Statistics tool if it opens\n" "VERIFICATION:\n" " Did the Battery Info key work as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2048 msgid "" "PURPOSE:\n" " This test will test the wireless key after resuming from suspend\n" "STEPS:\n" " 1. Press the wireless key on the keyboard\n" " 2. Press the same key again\n" "VERIFICATION:\n" " Did the wireless go off on the first press and on again on the second " "after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2066 msgid "" "PURPOSE:\n" " This test will test the media keys of your keyboard after resuming from " "suspend\n" "STEPS:\n" " Skip this test if your computer has no media keys.\n" " 1. Click test to open a window on which to test the media keys.\n" " 2. If all the keys work, the test will be marked as passed.\n" "VERIFICATION:\n" " Do the keys work as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2085 msgid "" "PURPOSE:\n" " This test will test the super key of your keyboard after resuming from " "suspend\n" "STEPS:\n" " 1. Click test to open a window on which to test the super key.\n" " 2. If the key works, the test will pass and the window will close.\n" "VERIFICATION:\n" " Does the super key work as expected after resuming from suspend?" msgstr "" #. description #: ../jobs/suspend.txt.in:2100 msgid "" "PURPOSE:\n" " Validate that the External Video hot key is working as expected after " "resuming from suspend\n" "STEPS:\n" " 1. Plug in an external monitor\n" " 2. Press the display hot key to change the monitors configuration\n" "VERIFICATION:\n" " Check that the video signal can be mirrored, extended, displayed on " "external or onboard only, after resuming from suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2115 msgid "" "PURPOSE:\n" " Verify touchpad hotkey toggles touchpad functionality on and off after " "resuming from suspend\n" "STEPS:\n" " 1. Verify the touchpad is functional\n" " 2. Tap the touchpad toggle hotkey\n" " 3. Tap the touchpad toggle hotkey again\n" "VERIFICATION:\n" " Verify the touchpad has been disabled and re-enabled." msgstr "" #. description #: ../jobs/suspend.txt.in:2132 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB storage device after suspend and resume.\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB storage device (pen-drive/HDD).\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2153 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB 3.0 storage device after suspend and resume.\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB 3.0 storage device (pen-drive/HDD) " "in\n" " a USB 3.0 port. (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2172 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB storage device after suspend.\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2192 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB 3.0 storage device after suspend\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB 3.0 device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2210 msgid "" "This test is automated and executes after the suspend/" "usb_insert_after_suspend test is run." msgstr "" #. description #: ../jobs/suspend.txt.in:2223 msgid "" "This test is automated and executes after the suspend/" "usb3_insert_after_suspend test is run." msgstr "" #. description #: ../jobs/suspend.txt.in:2234 msgid "" "This is an automated version of usb/storage-automated and assumes that the " "server has usb storage devices plugged in prior to checkbox execution. It is " "intended for servers and SRU automated testing." msgstr "" #. description #: ../jobs/suspend.txt.in:2248 msgid "" "This is an automated version of usb3/storage-automated and assumes that the " "server has usb 3.0 storage devices plugged in prior to checkbox execution. " "It is intended for servers and SRU automated testing." msgstr "" #. description #: ../jobs/suspend.txt.in:2260 ../jobs/usb.txt.in:219 msgid "" "This test will check that your USB 2.0 port transfers data at a minimum " "expected speed." msgstr "" #. description #: ../jobs/suspend.txt.in:2273 msgid "" "This test will check that your USB 3.0 port could be recognized as " "SuperSpeed USB device using xhci_hcd driver and transfers data correctly." msgstr "" #. description #: ../jobs/suspend.txt.in:2283 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an MMC card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an MMC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2303 msgid "" "This test is automated and executes after the mediacard/mmc-insert-after-" "suspend test is run. It tests reading and writing to the MMC card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2313 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of an MMC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MMC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2330 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED SD card after the system\n" " has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an UNLOCKED SD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2351 msgid "" "This test is automated and executes after the mediacard/sd-insert-after-" "suspend test is run. It tests reading and writing to the SD card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2361 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects\n" " the removal of an SD card from the systems card reader\n" " after the system has been suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2379 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of an UNLOCKED SDHC media card after the\n" " system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert an UNLOCKED SDHC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2400 msgid "" "This test is automated and executes after the mediacard/sdhc-insert-after-" "suspend test is run. It tests reading and writing to the SDHC card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2410 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of an SDHC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SDHC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2427 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a CF card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a CF card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2447 msgid "" "This test is automated and executes after the mediacard/cf-insert-after-" "suspend test is run. It tests reading and writing to the CF card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2457 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a CF card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the CF card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2474 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a SDXC card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a SDXC card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2494 msgid "" "This test is automated and executes after the mediacard/sdxc-insert-after-" "suspend test is run. It tests reading and writing to the SDXC card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2504 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a SDXC card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the SDXC card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2521 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a MS card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a MS card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2541 msgid "" "This test is automated and executes after the mediacard/ms-insert-after-" "suspend test is run. It tests reading and writing to the MS card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2551 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a MS card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MS card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2568 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a MSP card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a MSP card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2588 msgid "" "This test is automated and executes after the mediacard/msp-insert-after-" "suspend test is run. It tests reading and writing to the MSP card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2598 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a MSP card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the MSP card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2615 msgid "" "PURPOSE:\n" " This test will check that the systems media card reader can\n" " detect the insertion of a xD card after the system has been suspended\n" "STEPS:\n" " 1. Click \"Test\" and insert a xD card into the reader.\n" " If a file browser opens up, you can safely close it.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not remove the device after this test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2635 msgid "" "This test is automated and executes after the mediacard/xd-insert-after-" "suspend test is run. It tests reading and writing to the xD card after the " "system has been suspended." msgstr "" #. description #: ../jobs/suspend.txt.in:2645 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal\n" " of a xD card from the systems card reader after the system has been " "suspended.\n" "STEPS:\n" " 1. Click \"Test\" and remove the xD card from the reader.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/suspend.txt.in:2665 msgid "Determine if the touchpad is still functioning after suspend/resume." msgstr "" #. description #: ../jobs/suspend.txt.in:2675 ../jobs/touchscreen.txt.in:45 msgid "" "PURPOSE:\n" " Check touchscreen tap recognition\n" "STEPS:\n" " 1. Tap an object on the screen with finger. The cursor should jump to " "location tapped and object should highlight\n" "VERIFICATION:\n" " Does tap recognition work?" msgstr "" #. description #: ../jobs/suspend.txt.in:2691 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works after suspend\n" "STEPS:\n" " 1. Click on Test to display a video capture from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the video capture?" msgstr "" #. description #: ../jobs/suspend.txt.in:2710 msgid "" "PURPOSE:\n" " This test will check that the built-in camera works after suspend\n" "STEPS:\n" " 1. Click on Test to display a still image from the camera for ten " "seconds.\n" "VERIFICATION:\n" " Did you see the image?" msgstr "" #. description #: ../jobs/suspend.txt.in:2727 msgid "" " Takes multiple pictures based on the resolutions supported by the camera " "and\n" " validates their size and that they are of a valid format after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2736 msgid "Pointing device tests after suspend." msgstr "" #. summary #: ../jobs/suspend.txt.in:2754 msgid "Create click tests for pointing devices after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2759 msgid "Click tests for pointing devices after suspend." msgstr "" #. summary #: ../jobs/suspend.txt.in:2784 msgid "Compiz support tests after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2806 msgid "Check that the hardware is able to run compiz after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2807 msgid "Test Compiz support after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2812 msgid "glxgears tests after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2842 msgid "Test that glxgears works after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2843 msgid "" "PURPOSE:\n" " This test tests the basic 3D capabilities of your $product video card " "after suspend\n" "STEPS:\n" " 1. Click \"Test\" to execute an OpenGL demo. Press ESC at any time to " "close.\n" " 2. Verify that the animation is not jerky or slow.\n" "VERIFICATION:\n" " 1. Did the 3d animation appear?\n" " 2. Was the animation free from slowness/jerkiness?" msgstr "" #. summary #: ../jobs/suspend.txt.in:2856 msgid "Display video test after suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2887 msgid "Test that video can be displayed after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2888 msgid "" "PURPOSE:\n" " This test will test the default display after suspend with a sample " "video\n" "STEPS:\n" " 1. Click \"Test\" to display a video test.\n" "VERIFICATION:\n" " Do you see color bars and static?" msgstr "" #. summary #: ../jobs/suspend.txt.in:2899 msgid "Driver version tests after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2920 msgid "" "Parses Xorg.0.Log and discovers the running X driver and version after " "suspend" msgstr "" #. summary #: ../jobs/suspend.txt.in:2921 msgid "Test X driver/version after suspend" msgstr "" #. description #: ../jobs/suspend.txt.in:2930 msgid "Run Firmware Test Suite (fwts) oops tests after suspend." msgstr "" #. description #: ../jobs/suspend.txt.in:2942 msgid "Attaches the FWTS oops results log to the submission after suspend" msgstr "" #. description #: ../jobs/touchpad.txt.in:6 msgid "" "PURPOSE:\n" " Touchpad manual verification\n" "STEPS:\n" " 1. Make sure that touchpad is enabled.\n" " 2. Move cursor using the touchpad.\n" "VERIFICATION:\n" " Did the cursor move?" msgstr "" #. description #: ../jobs/touchpad.txt.in:23 msgid "" "PURPOSE:\n" " Touchpad horizontal scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the horizontal slider by moving your finger " "right and left in the lower part of the touchpad.\n" "VERIFICATION:\n" " Could you scroll right and left?" msgstr "" #. description #: ../jobs/touchpad.txt.in:40 msgid "" "PURPOSE:\n" " Touchpad vertical scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the vertical slider by moving your finger up " "and down in the right part of the touchpad.\n" "VERIFICATION:\n" " Could you scroll up and down?" msgstr "" #. description #: ../jobs/touchpad.txt.in:57 msgid "" "Determine whether the touchpad is detected as a singletouch device " "automatically." msgstr "" #. description #: ../jobs/touchpad.txt.in:68 msgid "" "Determine whether the touchpad is detected as a multitouch device " "automatically." msgstr "" #. description #: ../jobs/touchpad.txt.in:77 msgid "" "PURPOSE:\n" " Touchpad manual detection of multitouch.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Is the touchpad supposed to be multitouch?" msgstr "" #. description #: ../jobs/touchpad.txt.in:90 msgid "" "PURPOSE:\n" " Determine that the hot corner feature is working as expected\n" "STEPS:\n" " 1. Launch a browser.\n" " 2. Go to a website, and hover the cursor over a link.\n" " 3. Tap the upper right corner on the touchpad.\n" "VERIFICATION:\n" " Did the tap trigger a new tab to be opened?" msgstr "" #. description #: ../jobs/touchpad.txt.in:105 msgid "" "PURPOSE:\n" " Determine that the selection window function is working as expected.\n" "STEPS:\n" " 1. Open a file folder\n" " 2. Double tap and drag the cursor across several file.\n" "VERIFICATION:\n" " Did a selection window open and were several files selected?" msgstr "" #. description #: ../jobs/touchpad.txt.in:120 msgid "" "PURPOSE:\n" " Determine that the right click function is working as expected.\n" "STEPS:\n" " 1. Open a file folder\n" " 2. Hover cursor over file in folder\n" " 3. 2-touch tap.\n" "VERIFICATION:\n" " Did the right click pop up menu appear?" msgstr "" #. description #: ../jobs/touchpad.txt.in:136 msgid "" "PURPOSE:\n" " Touchpad 2-touch horizontal scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the horizontal slider by moving 2 fingers " "right and left along the touchpad.\n" "VERIFICATION:\n" " Could you scroll right and left?" msgstr "" #. description #: ../jobs/touchpad.txt.in:151 msgid "" "PURPOSE:\n" " Touchpad 2-touch vertical scroll verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and place your cursor within the borders " "of the displayed test window.\n" " 2. Verify that you can move the vertical slider by moving 2 fingers up " "and down along the touchpad.\n" "VERIFICATION:\n" " Could you scroll up and down?" msgstr "" #. description #: ../jobs/touchpad.txt.in:165 msgid "" "PURPOSE:\n" " Determine that the drag and drop function is working as expected.\n" "STEPS:\n" " 1. Browse to the examples folder in the current user's home directory\n" " 2. Double tap and hold to select the \"Ubuntu_Free_Culture_Showcase\" " "folder\n" " 2. Drag the selected folder to the desktop and remove finger from " "touchpad.\n" "VERIFICATION:\n" " Did a selected folder move to the desktop?" msgstr "" #. summary #: ../jobs/touchpad.txt.in:181 msgid "Check touchpad pinch-to-zoom gesture" msgstr "" #. description #: ../jobs/touchpad.txt.in:182 msgid "" "PURPOSE:\n" " Check touchpad pinch gesture for zoom\n" "STEPS:\n" " 1. Open gallery-app with an image\n" " 2. Place two fingers on the touchpad and pinch them together\n" " 3. Place two fingers on the touchpad and move them apart\n" "VERIFICATION:\n" " Does the image zoom in and out?" msgstr "" #. summary #: ../jobs/touchpad.txt.in:198 msgid "Check 4-finger tap gesture" msgstr "" #. description #: ../jobs/touchpad.txt.in:199 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. 4-touch tap (tap with 4 fingers) anywhere on the touchpad\n" "VERIFICATION:\n" " Did the tap open the Dash?" msgstr "" #. description #: ../jobs/touchpad.txt.in:220 msgid "This test will check if your touchpad was detected as a mouse." msgstr "" #. description #: ../jobs/touchpad.txt.in:229 msgid "" "PURPOSE:\n" " Touchpad continuous move verification\n" "STEPS:\n" " 1. Select \"Test\" when ready and continuously move your cursor within " "the borders of the displayed test window.\n" " You'll need to keep moving your finger on the touchpad for 10 seconds.\n" "VERIFICATION:\n" " Did the mouse cursor move without interruption?" msgstr "" #. name #: ../jobs/touchscreen.txt.in:3 msgid "Touchscreen" msgstr "" #. description #: ../jobs/touchscreen.txt.in:13 msgid "" "Determine whether the screen is detected as a non-touch device automatically." msgstr "" #. description #: ../jobs/touchscreen.txt.in:23 msgid "" "Determine whether the screen is detected as a multitouch device " "automatically." msgstr "" #. description #: ../jobs/touchscreen.txt.in:31 msgid "" "PURPOSE:\n" " Touchscreen capability manual detection.\n" "STEPS:\n" " 1. Look at the specifications for your system.\n" "VERIFICATION:\n" " Your screen was detected as a non touch screen. Select PASS if this is " "correct." msgstr "" #. description #: ../jobs/touchscreen.txt.in:59 msgid "" "PURPOSE:\n" " Check touchscreen drag & drop\n" "STEPS:\n" " 1. Tap and hold an object on the desktop\n" " 2. Drag and drop the object in a different location\n" "VERIFICATION:\n" " Does drag and drop work?" msgstr "" #. summary #: ../jobs/touchscreen.txt.in:71 msgid "Check touchscreen pinch gesture for zoom" msgstr "" #. description #: ../jobs/touchscreen.txt.in:76 msgid "" "PURPOSE:\n" " Check touchscreen pinch gesture for zoom\n" "STEPS:\n" " 1. Commence the test\n" " 2. Using 2 fingers, resize the blue square until it turns green, then " "release it.\n" "VERIFICATION:\n" " Did the blue square change size following the gesture?" msgstr "" #. summary #: ../jobs/touchscreen.txt.in:88 msgid "Check touchscreen pinch gesture for rotate" msgstr "" #. description #: ../jobs/touchscreen.txt.in:93 msgid "" "PURPOSE:\n" " Check touchscreen pinch gesture for rotate\n" "STEPS:\n" " 1. Commence the test\n" " 2. Using 2 fingers, rotate the blue square until it turns green, then " "release it.\n" "VERIFICATION:\n" " Did the blue square rotate following the gesture?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:108 msgid "" "PURPOSE:\n" " Validate that 3-touch drag is operating as expected\n" "STEPS:\n" " 1. Open a windows and bring it to the foreground\n" " 2. 3-touch the window and drag\n" "VERIFICATION:\n" " Did the window move along with the drag?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:123 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. 4-touch tap anywhere on the touchscreen\n" "VERIFICATION:\n" " Did the tap open the Dash?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:137 msgid "" "PURPOSE:\n" " Validate that 3-touch tap is operating as expected\n" "STEPS:\n" " 1. Commence the test\n" " 2. Tap the screen within the test area with 3 fingers simultaneously.\n" " 3. Once 3 fingers are on the screen you should see the indicator they " "are recognized.\n" "VERIFICATION:\n" " Did you see the green circles around the three fingers?" msgstr "" #. description #: ../jobs/touchscreen.txt.in:160 msgid "" "PURPOSE:\n" " Validate that 4-touch tap is operating as expected\n" "STEPS:\n" " 1. Commence the test\n" " 2. Tap the screen within the test area with 4 fingers simultaneously.\n" " 3. Once 4 fingers are on the screen you should see the indicator they " "are recognized.\n" "VERIFICATION:\n" " Did you see the green circles around the four fingers?" msgstr "" #. description #: ../jobs/usb.txt.in:6 msgid "Detects and shows USB devices attached to this system." msgstr "" #. description #: ../jobs/usb.txt.in:14 msgid "" "PURPOSE:\n" " This test will check that your system detects USB storage devices.\n" "STEPS:\n" " 1. Plug in one or more USB keys or hard drives.\n" " 2. Click on \"Test\".\n" "VERIFICATION:\n" " Were the drives detected?" msgstr "" #. description #: ../jobs/usb.txt.in:29 msgid "" "PURPOSE:\n" " This test will check that you can use a USB HID device\n" "STEPS:\n" " 1. Enable either a USB mouse or keyboard\n" " 2. For mice, perform actions such as moving the pointer, right and left " "button clicks and double clicks\n" " 3. For keyboards, commence the test to launch a small tool. Type some " "text and close the tool.\n" "VERIFICATION:\n" " Did the device work as expected?" msgstr "" #. description #: ../jobs/usb.txt.in:45 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB storage device\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB storage device\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:64 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the insertion of\n" " a USB 3.0 storage device\n" "STEPS:\n" " 1. Click \"Test\" and insert a USB 3.0 storage device in a USB 3.0 " "port.\n" " (Note: this test will time-out after 20 seconds.)\n" " 2. Do not unplug the device after the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:82 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB storage device\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:101 msgid "" "PURPOSE:\n" " This test will check that the system correctly detects the removal of\n" " a USB 3.0 storage device\n" "STEPS:\n" " 1. Click \"Test\" and remove the USB 3.0 device.\n" " (Note: this test will time-out after 20 seconds.)\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:119 msgid "" "PURPOSE:\n" " This test will check your USB connection.\n" "STEPS:\n" " 1. Plug a USB HDD or thumbdrive into the computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Click \"Test\" to begin the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:139 msgid "" "PURPOSE:\n" " This test will check your USB 3.0 connection.\n" "STEPS:\n" " 1. Plug a USB 3.0 HDD or thumbdrive into a USB 3.0 port in the " "computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Click \"Test\" to begin the test.\n" "VERIFICATION:\n" " The verification of this test is automated. Do not change the\n" " automatically selected result." msgstr "" #. description #: ../jobs/usb.txt.in:157 msgid "This test is automated and executes after the usb/insert test is run." msgstr "" #. description #: ../jobs/usb.txt.in:169 msgid "This test is automated and executes after the usb3/insert test is run." msgstr "" #. description #: ../jobs/usb.txt.in:178 msgid "" "Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on " "randomly created data. It requires that a USB stick is plugged into an " "available USB port before running the certification suite." msgstr "" #. description #: ../jobs/usb.txt.in:191 msgid "" "Tests USB 3.0 ports on a system by doing write/read/compare tests on " "randomly created data. It requires that a USB stick is plugged into an " "available USB port before running the certification suite. Additionally, it " "will only work with USB sticks and ports rated for USB 3.0 speeds or faster." msgstr "" #. description #: ../jobs/usb.txt.in:200 msgid "" "PURPOSE:\n" " This test will check your USB connection.\n" "STEPS:\n" " 1. Connect a USB storage device to an external USB slot on this " "computer.\n" " 2. An icon should appear on the Launcher.\n" " 3. Confirm that the icon appears.\n" " 4. Eject the device.\n" " 5. Repeat with each external USB slot.\n" "VERIFICATION:\n" " Do all USB slots work with the device?" msgstr "" #. description #: ../jobs/user_apps.txt.in:7 msgid "" "PURPOSE:\n" " This test will check that the update manager can find updates.\n" "STEPS:\n" " 1. Click Test to launch update-manager.\n" " 2. Follow the prompts and if updates are found, install them.\n" " 3. When Update Manager has finished, please close the app by clicking the " "Close button in the lower right corner.\n" "VERIFICATION:\n" " Did Update manager find and install updates (Pass if no updates are found,\n" " but Fail if updates are found but not installed)" msgstr "" #. description #: ../jobs/user_apps.txt.in:24 msgid "" "PURPOSE:\n" " This test will check that the file browser can create a new folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. On the menu bar, click File -> Create Folder.\n" " 3. In the name box for the new folder, enter the name Test Folder and hit " "Enter.\n" " 4. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a new folder called Test Folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:40 msgid "" "PURPOSE:\n" " This test will check that the file browser can copy a folder\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the folder called Test Folder and click on Copy.\n" " 3. Right Click on any white area in the window and click on Paste.\n" " 4. Right click on the folder called Test Folder(copy) and click Rename.\n" " 5. Enter the name Test Data in the name box and hit Enter.\n" " 6. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a folder called Test Data?" msgstr "" #. description #: ../jobs/user_apps.txt.in:58 msgid "" "PURPOSE:\n" " This test will verify that the file browser can move a folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Click and drag the folder called Test Data onto the icon called Test " "Folder.\n" " 3. Release the button.\n" " 4. Double click the folder called Test Folder to open it up.\n" " 5. Close the File Browser.\n" "VERIFICATION:\n" " Was the folder called Test Data successfully moved into the folder called " "Test Folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:75 msgid "" "PURPOSE:\n" " This test will check that the file browser can create a new file.\n" "STEPS:\n" " 1. Click Select Test to open the File Browser.\n" " 2. Right click in the white space and click Create Document -> Empty " "Document.\n" " 3. Enter the name Test File 1 in the name box and hit Enter.\n" " 4. Close the File browser.\n" "VERIFICATION:\n" " Do you now have a file called Test File 1?" msgstr "" #. description #: ../jobs/user_apps.txt.in:91 msgid "" "PURPOSE:\n" " This test will check that the file browser can copy a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the file called Test File 1 and click Copy.\n" " 3. Right click in the white space and click Paste.\n" " 4. Right click on the file called Test File 1(copy) and click Rename.\n" " 5. Enter the name Test File 2 in the name box and hit Enter.\n" " 6. Close the File Browser.\n" "VERIFICATION:\n" " Do you now have a file called Test File 2?" msgstr "" #. description #: ../jobs/user_apps.txt.in:109 msgid "" "PURPOSE:\n" " This test will check that the file browser can move a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Click and drag the file called Test File 2 onto the icon for the folder " "called Test Data.\n" " 3. Release the button.\n" " 4. Double click the icon for Test Data to open that folder up.\n" " 5. Close the File Browser.\n" "VERIFICATION:\n" " Was the file Test File 2 successfully moved into the Test Data folder?" msgstr "" #. description #: ../jobs/user_apps.txt.in:126 msgid "" "PURPOSE:\n" " This test will check that the file browser can delete a file.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the file called Test File 1 and click on Move To Trash.\n" " 3. Verify that Test File 1 has been removed.\n" " 4. Close the File Browser.\n" "VERIFICATION:\n" " Is Test File 1 now gone?" msgstr "" #. description #: ../jobs/user_apps.txt.in:142 msgid "" "PURPOSE:\n" " This test will check that the file browser can delete a folder.\n" "STEPS:\n" " 1. Click Test to open the File Browser.\n" " 2. Right click on the folder called Test Folder and click on Move To " "Trash.\n" " 3. Verify that the folder was deleted.\n" " 4. Close the file browser.\n" "VERIFICATION:\n" " Has Test Folder been successfully deleted?" msgstr "" #. description #: ../jobs/user_apps.txt.in:223 msgid "Common Document Types Test" msgstr "" #. description #: ../jobs/user_apps.txt.in:246 msgid "" "PURPOSE:\n" " This test will check that Firefox can render a basic web page.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view the test web page.\n" "VERIFICATION:\n" " Did the Ubuntu Test page load correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:260 msgid "" "PURPOSE:\n" " This test will check that Firefox can run flash applications. Note: this " "may\n" " require installing additional software to successfully complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view a sample Flash test.\n" "VERIFICATION:\n" " Did you see the text?" msgstr "" #. description #: ../jobs/user_apps.txt.in:275 msgid "" "PURPOSE:\n" " This test will check that Firefox can play a Flash video. Note: this may\n" " require installing additional software to successfully complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox and view a short flash video.\n" "VERIFICATION:\n" " Did the video play correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:292 msgid "" "PURPOSE:\n" " This test will check that Firefox can play a Quicktime (.mov) video file.\n" " Note: this may require installing additional software to successfully\n" " complete.\n" "STEPS:\n" " 1. Select Test to launch Firefox with a sample video.\n" "VERIFICATION:\n" " Did the video play using a plugin?" msgstr "" #. description #: ../jobs/user_apps.txt.in:307 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Facebook Chat service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:322 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Google Talk (gtalk) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:337 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Jabber service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:352 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the AOL Instant Messaging (AIM) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:367 msgid "" "PURPOSE:\n" " This test will check that Empathy messaging client works.\n" "STEPS:\n" " 1. Select Test to launch Empathy.\n" " 2. Configure it to connect to the Microsoft Network (MSN) service.\n" " 3. Once you have completed the test, please quit Empathy to continue here.\n" "VERIFICATION:\n" " Were you able to connect correctly and send/receive messages?" msgstr "" #. description #: ../jobs/user_apps.txt.in:382 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a POP3 account.\n" "VERIFICATION:\n" " Were you able to receive and read e-mail correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:396 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a IMAP account.\n" "VERIFICATION:\n" " Were you able to receive and read e-mail correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:410 msgid "" "PURPOSE:\n" " This test will check that Evolution works.\n" "STEPS:\n" " 1. Commence the test to launch Evolution.\n" " 2. Configure it to connect to a SMTP account.\n" "VERIFICATION:\n" " Were you able to send e-mail without errors?" msgstr "" #. description #: ../jobs/user_apps.txt.in:424 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator.\n" "VERIFICATION:\n" " Did it launch correctly?" msgstr "" #. description #: ../jobs/user_apps.txt.in:438 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Simple math functions (+,-,/,*)\n" " 2. Nested math functions ((,))\n" " 3. Fractional math\n" " 4. Decimal math\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:456 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Memory set\n" " 2. Memory reset\n" " 3. Memory last clear\n" " 4. Memory clear\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:474 msgid "" "PURPOSE:\n" " This test checks that gcalctool (Calculator) works.\n" "STEPS:\n" " Commence the test to open the calculator and perform:\n" " 1. Cut\n" " 2. Copy\n" " 3. Paste\n" "VERIFICATION:\n" " Did the functions perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:490 msgid "" "PURPOSE:\n" " This test checks that gedit works.\n" "STEPS:\n" " 1. Commence the test to open gedit.\n" " 2. Enter some text and save the file (make a note of the file name you " "use), then close gedit.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:505 msgid "" "PURPOSE:\n" " This test checks that gedit works.\n" "STEPS:\n" " 1. Commence the test to open gedit, and re-open the file you created " "previously.\n" " 2. Edit then save the file, then close gedit.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/user_apps.txt.in:519 msgid "" "PURPOSE:\n" " This test will check that Gnome Terminal works.\n" "STEPS:\n" " 1. Commence the test to open Terminal.\n" " 2. Type 'ls' and press enter. You should see a list of files and folder in " "your home directory.\n" " 3. Close the terminal window.\n" "VERIFICATION:\n" " Did this perform as expected?" msgstr "" #. description #: ../jobs/virtualization.txt.in:12 msgid "" "Verifies that a KVM guest can be created and booted using an Ubuntu Server " "cloud image." msgstr "" #. summary #: ../jobs/virtualization.txt.in:15 msgid "Verify KVM VM boots" msgstr "" #. description #: ../jobs/virtualization.txt.in:25 msgid "Test to verify that the Xen Hypervisor is running." msgstr "" #. summary #: ../jobs/virtualization.txt.in:27 msgid "Verify Xen is running" msgstr "" #. description #: ../jobs/virtualization.txt.in:37 msgid "Test to check that a Xen domU image can boot and run on Xen on Ubuntu" msgstr "" #. summary #: ../jobs/virtualization.txt.in:39 msgid "Verify Xen domU can boot" msgstr "" #. description #: ../jobs/wireless.txt.in:22 msgid "Wireless scanning test. It scans and reports on discovered APs." msgstr "" #. description #: ../jobs/wireless.txt.in:32 msgid "" "This is an automated test to gather some info on the current state of your " "wireless devices. If no devices are found, the test will exit with an error." msgstr "" #. description #: ../jobs/wireless.txt.in:41 msgid "" "PURPOSE:\n" " This test will check your wireless connection.\n" "STEPS:\n" " 1. Click on the Network icon in the panel.\n" " 2. Select a network below the 'Wireless networks' section.\n" " 3. Click \"Test\" to verify that it's possible to establish an HTTP " "connection.\n" "VERIFICATION:\n" " Did a notification show and was the connection correctly established?" msgstr "" #. description #: ../jobs/wireless.txt.in:77 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11b/g protocols." msgstr "" #. description #: ../jobs/wireless.txt.in:107 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11b/g protocols." msgstr "" #. description #: ../jobs/wireless.txt.in:137 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11n protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:167 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11n protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:198 msgid "" "Tests that the systems wireless hardware can connect to a router using WPA " "security and the 802.11ac protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:229 msgid "" "Tests that the systems wireless hardware can connect to a router using no " "security and the 802.11ac protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:259 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:298 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11b/g protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the B and G " "wireless bands\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:338 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11n protocols.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:378 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11n protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections on the N wireless " "band\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:418 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using " "WPA\n" " security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections with the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use WPA2 and ensure the PSK matches " "what is set in the ROUTER_PSK environment variable\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:458 msgid "" "PURPOSE:\n" " Tests that the systems wireless hardware can connect to a router using\n" " no security and the 802.11ac protocol.\n" "STEPS:\n" " 1. Open your router's configuration tool\n" " 2. Change the settings to only accept connections with the 802.11ac " "protocol.\n" " 3. Make sure the SSID is set to the contents of the ROUTER_SSID " "environment variable\n" " 4. Change the security settings to use no security\n" " 5. Commence the test to create a connection to the router and test the " "connection\n" "VERIFICATION:\n" " Verification is automated, do not change the automatically selected " "result." msgstr "" #. description #: ../jobs/wireless.txt.in:497 msgid "" "Tests the performance of a system's wireless connection through the iperf " "tool." msgstr "" #. description #: ../jobs/wireless.txt.in:526 msgid "" "Tests the performance of a system's wireless connection through the iperf " "tool, using UDP packets." msgstr "" #. description #: ../jobs/wireless.txt.in:555 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11a protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11a protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:585 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11b protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11b protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:605 msgid "" "This test executes iperf to generate a load on the network device " "{__index__} ({interface}) and then performs a ping test to watch for dropped " "packets and very large latency periods." msgstr "" #. description #: ../jobs/wireless.txt.in:633 msgid "" " Test that the system's wireless hardware can connect to a router using the\n" " 802.11g protocol. This requires that you have a router pre-configured to " "only\n" " respond to requests on the 802.11g protocol." msgstr "" #. description #: ../jobs/wireless.txt.in:644 msgid "" "Test that the MAC80211 modules are loaded and wireless extensions are " "working." msgstr "" #. description #: ../jobs/wireless.txt.in:657 msgid "" "This test executes iwconfig requests against wireless device {__index__} " "({interface})." msgstr "" #. description #: ../jobs/wireless.txt.in:666 msgid "" "PURPOSE:\n" " This test will check whether or not your driver responds to rfkill " "commands.\n" "STEPS:\n" " 1. Use the hardware switch on the side of your device to switch off " "wireless.\n" " 2. If you do not have a hardware switch disable wireless from the " "network manager icon in the panel\n" " 3. Click \"Test\" to verify that the hard or soft blocks are in place.\n" "VERIFICATION:\n" " Did the hard or soft blocks show on in the dialog?" msgstr "" #. purpose #: ../jobs/wireless.txt.in:691 msgid "" "User verification of whether the observed transfer throughput is acceptable " "for the type and maximum speed of wireless device {__index__} ({interface})." msgstr ""