Sigil-0.9.9/000077500000000000000000000000001321676412500126075ustar00rootroot00000000000000Sigil-0.9.9/3rdparty/000077500000000000000000000000001321676412500143575ustar00rootroot00000000000000Sigil-0.9.9/3rdparty/CMakeLists.txt000066400000000000000000000031051321676412500171160ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.0) project(3rdparty) # Note: All files in the cmake dir will be included as if they were in this file. # The paths in each .cmake file are relative to this directory not the # cmake directory. IF(MSVC) add_definitions( /D_CRT_SECURE_NO_WARNINGS /DUNICODE /D_UNICODE ) ENDIF() if( NOT USE_SYSTEM_LIBS OR NOT ZLIB_FOUND ) MESSAGE(STATUS "Using Bundled ZLIB") include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/zlib.cmake) else () MESSAGE(STATUS "Using System ZLIB") endif() if( NOT USE_SYSTEM_LIBS OR NOT MINIZIP_FOUND ) MESSAGE(STATUS "Using Bundled MiniZip") include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/minizip.cmake) else () MESSAGE(STATUS "Using System MiniZip") endif() if( NOT USE_SYSTEM_LIBS OR NOT HUNSPELL_FOUND ) MESSAGE(STATUS "Using Bundled Hunspell") include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/hunspell.cmake) else () MESSAGE(STATUS "Using System Hunspell") endif() if( NOT USE_SYSTEM_LIBS OR NOT PCRE_FOUND OR APPLE ) MESSAGE(STATUS "Using Bundled PCRE") include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/pcre.cmake) else () MESSAGE(STATUS "Using System PCRE") endif() if (SYSTEM_LIBS_REQUIRED) if (NOT ZLIB_FOUND OR NOT MINIZIP_FOUND OR NOT HUNSPELL_FOUND OR (NOT APPLE AND NOT PCRE_FOUND)) #if (NOT ZLIB_FOUND OR NOT MINIZIP_FOUND OR (NOT APPLE AND NOT PCRE_FOUND)) MESSAGE(FATAL_ERROR "Could not find all required system libraries...") endif() endif() if( (UNIX AND NOT APPLE) AND BUILD_PATCHED_LIBXML2 ) include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ext_libxml2.cmake) endif() Sigil-0.9.9/3rdparty/about.md000066400000000000000000000014201321676412500160100ustar00rootroot000000000000003rdparty ======== Bundled copies of 3rd party libraries. To prevent using bundled copies in favor of system libraries use the build flag: USE_SYSTEM_LIBS To require the use of System libraries and not allow falling back to bundled copies if a system library is not found use the build flag: SYSTEM_LIBS_REQUIRED Both of the above libraries should be constructed like so: -D...=1 Each copy is a pristine (unchanged) copy without any modification. Any files that need to be or are modified will be in the extra directory. Versions ======== hunspell - 1.3.3 minizip - 1.1 pcre - 8.37 python - 3.4.3 zlib - 1.2.8 extra ===== The extra directory is for files that are custom files and not part of the 3rdparty source directly. Such as preconfigured .config files. Sigil-0.9.9/3rdparty/cmake/000077500000000000000000000000001321676412500154375ustar00rootroot00000000000000Sigil-0.9.9/3rdparty/cmake/ext_libxml2.cmake000066400000000000000000000033551321676412500207000ustar00rootroot00000000000000include(ExternalProject) MESSAGE(STATUS "The git, libtool, autoconf, and automake packages are required for compiling libxml2") find_program(GIT git) if(NOT GIT) message(FATAL_ERROR "The git program is needed for compiling libxml2. Install the git package.") endif() find_program(LIBTOOL libtoolize) if (NOT LIBTOOL) message(FATAL_ERROR "The libtoolize program is needed for compiling libxml2. Install the libtool package.") endif() find_program(AUTOCONF autoreconf) if (NOT AUTOCONF) message(FATAL_ERROR "The autoreconf program is needed for compiling libxml2. Install the autoconf package.") endif() find_program(AUTOMAKE automake) if (NOT AUTOMAKE) message(FATAL_ERROR "The automake program is needed for compiling libxml2. Install the automake package.") endif() ExternalProject_Add( libxml2 GIT_REPOSITORY "https://github.com/GNOME/libxml2.git" GIT_TAG "d8083bf77955b7879c1290f0c0a24ab8cc70f7fb" SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/libxml2 UPDATE_COMMAND "" PATCH_COMMAND patch < ${CMAKE_CURRENT_SOURCE_DIR}/extra/libxml2/libxml2_bug_fix.patch CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/libxml2/autogen.sh --prefix=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libxml2 --disable-static --enable-shared --without-python TEST_COMMAND "" INSTALL_COMMAND "" BUILD_IN_SOURCE 1 ) ExternalProject_Add_Step( libxml2 CopyToLib COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libxml2/.libs/libxml2.so.2.9.4 ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libsigilxml2.so.2.9.4 COMMAND strip --strip-unneeded ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libsigilxml2.so.2.9.4 COMMAND ln -sfr ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libsigilxml2.so.2.9.4 ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libxml2.so.2 DEPENDEES build ) Sigil-0.9.9/3rdparty/cmake/hunspell.cmake000066400000000000000000000026261321676412500203010ustar00rootroot00000000000000cmake_minimum_required( VERSION 3.0 ) PROJECT(hunspell CXX) set( HUNSPELL_LIBRARIES ${PROJECT_NAME} CACHE INTERNAL "" ) set( HUNSPELL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME} CACHE INTERNAL "" ) SET(PROJECT_C_FLAGS "") CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/extra/hunspell/config.h ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/config.h COPYONLY) SET(SOURCES ${PROJECT_NAME}/src/hunspell/affentry.cxx ${PROJECT_NAME}/src/hunspell/affixmgr.cxx ${PROJECT_NAME}/src/hunspell/csutil.cxx ${PROJECT_NAME}/src/hunspell/dictmgr.cxx ${PROJECT_NAME}/src/hunspell/filemgr.cxx ${PROJECT_NAME}/src/hunspell/hashmgr.cxx ${PROJECT_NAME}/src/hunspell/hunspell.cxx ${PROJECT_NAME}/src/hunspell/hunzip.cxx ${PROJECT_NAME}/src/hunspell/phonet.cxx ${PROJECT_NAME}/src/hunspell/replist.cxx ${PROJECT_NAME}/src/hunspell/suggestmgr.cxx ) if( APPLE ) set(CMAKE_MACOSX_RPATH 1) endif() ADD_LIBRARY(${PROJECT_NAME} SHARED ${SOURCES}) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/src/hunspell ) # Special compiler and linker flags for MSVC if( MSVC ) set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS /DBUILDING_LIBHUNSPELL) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") set( CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL" ) endif() Sigil-0.9.9/3rdparty/cmake/minizip.cmake000066400000000000000000000021411321676412500201160ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.0) project(minizip C) set( MINIZIP_LIBRARIES ${PROJECT_NAME} CACHE INTERNAL "" ) set( MINIZIP_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME} CACHE INTERNAL "" ) SET(PROJECT_C_FLAGS "") SET(SOURCES ${PROJECT_NAME}/ioapi.c ${PROJECT_NAME}/mztools.c ${PROJECT_NAME}/unzip.c ${PROJECT_NAME}/zip.c ) if(WIN32) list(APPEND SOURCES ${PROJECT_NAME}/iowin32.c ) endif() # OS X doesn't have fopen64. if(APPLE) set(PROJECT_C_FLAGS "${PROJECT_C_FLAGS} -DUSE_FILE32API") endif() add_library(${PROJECT_NAME} ${SOURCES}) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME} ${ZLIB_INCLUDE_DIRS} ) target_link_libraries( ${PROJECT_NAME} ${ZLIB_LIBRARIES} ) set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${PROJECT_C_FLAGS}") # Special compiler and linker flags for MSVC if( MSVC ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL" ) set_target_properties( ${PROJECT_NAME} PROPERTIES STATIC_LIBRARY_FLAGS "/LTCG" ) endif() Sigil-0.9.9/3rdparty/cmake/pcre.cmake000066400000000000000000000076261321676412500174050ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.0) project(pcre C) INCLUDE(CheckIncludeFile) INCLUDE(CheckIncludeFileCXX) INCLUDE(CheckFunctionExists) INCLUDE(CheckTypeSize) set( PCRE_LIBRARIES ${PROJECT_NAME} CACHE INTERNAL "" ) set( PCRE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME} CACHE INTERNAL "" ) SET(PROJECT_C_FLAGS "-DHAVE_CONFIG_H") CHECK_INCLUDE_FILE(dirent.h HAVE_DIRENT_H) CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H) CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H) CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H) CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H) CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H) CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H) CHECK_INCLUDE_FILE_CXX(type_traits.h HAVE_TYPE_TRAITS_H) CHECK_INCLUDE_FILE_CXX(bits/type_traits.h HAVE_BITS_TYPE_TRAITS_H) CHECK_FUNCTION_EXISTS(bcopy HAVE_BCOPY) CHECK_FUNCTION_EXISTS(memmove HAVE_MEMMOVE) CHECK_FUNCTION_EXISTS(strerror HAVE_STRERROR) CHECK_FUNCTION_EXISTS(strtoll HAVE_STRTOLL) CHECK_FUNCTION_EXISTS(strtoq HAVE_STRTOQ) CHECK_FUNCTION_EXISTS(_strtoi64 HAVE__STRTOI64) CHECK_TYPE_SIZE("long long" LONG_LONG) CHECK_TYPE_SIZE("unsigned long long" UNSIGNED_LONG_LONG) # Prepare build configuration SET(pcre_have_type_traits 0) SET(pcre_have_bits_type_traits 0) IF(HAVE_TYPE_TRAITS_H) SET(pcre_have_type_traits 1) ENDIF(HAVE_TYPE_TRAITS_H) IF(HAVE_BITS_TYPE_TRAITS_H) SET(pcre_have_bits_type_traits 1) ENDIF(HAVE_BITS_TYPE_TRAITS_H) SET(pcre_have_long_long 0) SET(pcre_have_ulong_long 0) IF(HAVE_LONG_LONG) SET(pcre_have_long_long 1) ENDIF(HAVE_LONG_LONG) IF(HAVE_UNSIGNED_LONG_LONG) SET(pcre_have_ulong_long 1) ENDIF(HAVE_UNSIGNED_LONG_LONG) # Our configuration SET(PCRE_LINK_SIZE "2") SET(PCRE_POSIX_MALLOC_THRESHOLD "10") SET(PCRE_MATCH_LIMIT "10000000") SET(PCRE_MATCH_LIMIT_RECURSION "MATCH_LIMIT") SET(PCRE_PARENS_NEST_LIMIT "250") SET(SUPPORT_PCRE16 1) SET(SUPPORT_UTF 1) SET(SUPPORT_UCP 1) SET(PCRE_SUPPORT_UTF ON) SET(SUPPORT_JIT 1) SET(NEWLINE "10") # LF # Output files CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/config-cmake.h.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/config.h @ONLY) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/pcre.h.generic ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/pcre.h COPYONLY) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/pcre_chartables.c.dist ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/pcre_chartables.c COPYONLY) SET(SOURCES ${PROJECT_NAME}/pcre16_byte_order.c ${PROJECT_NAME}/pcre16_chartables.c ${PROJECT_NAME}/pcre16_compile.c ${PROJECT_NAME}/pcre16_config.c ${PROJECT_NAME}/pcre16_dfa_exec.c ${PROJECT_NAME}/pcre16_exec.c ${PROJECT_NAME}/pcre16_fullinfo.c ${PROJECT_NAME}/pcre16_get.c ${PROJECT_NAME}/pcre16_globals.c ${PROJECT_NAME}/pcre16_jit_compile.c ${PROJECT_NAME}/pcre16_maketables.c ${PROJECT_NAME}/pcre16_newline.c ${PROJECT_NAME}/pcre16_ord2utf16.c ${PROJECT_NAME}/pcre16_refcount.c ${PROJECT_NAME}/pcre16_string_utils.c ${PROJECT_NAME}/pcre16_study.c ${PROJECT_NAME}/pcre16_tables.c ${PROJECT_NAME}/pcre16_ucd.c ${PROJECT_NAME}/pcre16_utf16_utils.c ${PROJECT_NAME}/pcre16_valid_utf16.c ${PROJECT_NAME}/pcre16_version.c ${PROJECT_NAME}/pcre16_xclass.c ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/pcre_chartables.c ) add_library(${PROJECT_NAME} ${SOURCES}) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME} ) set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${PROJECT_C_FLAGS}") # Special compiler and linker flags for MSVC if( MSVC ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") set( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Oi /GL" ) set_target_properties( ${PROJECT_NAME} PROPERTIES STATIC_LIBRARY_FLAGS "/LTCG" ) endif() Sigil-0.9.9/3rdparty/cmake/zlib.cmake000066400000000000000000000041611321676412500174030ustar00rootroot00000000000000cmake_minimum_required( VERSION 3.0 ) PROJECT(zlib C) set( ZLIB_LIBRARIES ${PROJECT_NAME} CACHE INTERNAL "" ) set( ZLIB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME} CACHE INTERNAL "" ) SET(PROJECT_C_FLAGS "") include(CheckTypeSize) include(CheckFunctionExists) include(CheckIncludeFile) include(CheckCSourceCompiles) check_include_file(sys/types.h HAVE_SYS_TYPES_H) check_include_file(stdint.h HAVE_STDINT_H) check_include_file(stddef.h HAVE_STDDEF_H) check_type_size(off64_t OFF64_T) check_function_exists(fseeko HAVE_FSEEKO) check_include_file(unistd.h Z_HAVE_UNISTD_H) if(HAVE_SYS_TYPES_H) SET(PROJECT_C_FLAGS "${PROJECT_C_FLAGS} -DHAVE_SYS_TYPES_H") endif() if(HAVE_STDINT_H) set(PROJECT_C_FLAGS "${PROJECT_C_FLAGS} -DHAVE_STDINT_H") endif() if(HAVE_STDDEF_H) set(PROJECT_C_FLAGS "${PROJECT_C_FLAGS} -DHAVE_STDDEF_H") endif() if(HAVE_OFF64_T) set(PROJECT_C_FLAGS "${PROJECT_C_FLAGS} -D_LARGEFILE64_SOURCE=1") endif() if(NOT HAVE_FSEEKO) set(PROJECT_C_FLAGS "${PROJECT_C_FLAGS} -DNO_FSEEKO") endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/zconf.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/zconf.h @ONLY) set(SOURCES ${PROJECT_NAME}/adler32.c ${PROJECT_NAME}/compress.c ${PROJECT_NAME}/crc32.c ${PROJECT_NAME}/deflate.c ${PROJECT_NAME}/gzclose.c ${PROJECT_NAME}/gzlib.c ${PROJECT_NAME}/gzread.c ${PROJECT_NAME}/gzwrite.c ${PROJECT_NAME}/inflate.c ${PROJECT_NAME}/infback.c ${PROJECT_NAME}/inftrees.c ${PROJECT_NAME}/inffast.c ${PROJECT_NAME}/trees.c ${PROJECT_NAME}/uncompr.c ${PROJECT_NAME}/zutil.c ) ADD_LIBRARY(${PROJECT_NAME} ${SOURCES}) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME} ) set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${PROJECT_C_FLAGS}") if( MSVC ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") set( CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL" ) set_target_properties( ${PROJECT_NAME} PROPERTIES STATIC_LIBRARY_FLAGS "/LTCG" ) endif() Sigil-0.9.9/3rdparty/extra/000077500000000000000000000000001321676412500155025ustar00rootroot00000000000000Sigil-0.9.9/3rdparty/extra/hunspell/000077500000000000000000000000001321676412500173345ustar00rootroot00000000000000Sigil-0.9.9/3rdparty/extra/hunspell/config.h000066400000000000000000000012251321676412500207520ustar00rootroot00000000000000/* Name of package */ #define PACKAGE "hunspell" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "nemeth@openoffice.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "hunspell" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "hunspell 1.3.3" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "hunspell" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "1.3.3" /* Version number of package */ #define VERSION "1.3.3" Sigil-0.9.9/3rdparty/extra/libxml2/000077500000000000000000000000001321676412500170535ustar00rootroot00000000000000Sigil-0.9.9/3rdparty/extra/libxml2/libxml2_bug_fix.patch000066400000000000000000000005511321676412500231510ustar00rootroot00000000000000--- parser.c.orig 2016-07-13 09:25:04.312703211 -0400 +++ parser.c 2016-07-13 10:13:34.475133927 -0400 @@ -7420,6 +7420,10 @@ } if (ent->checked == 0) ent->checked = 2; + + /* Prevent entity from being parsed and expanded twice (Bug 760367). */ + was_checked = 0; + } else if (ent->checked != 1) { ctxt->nbentities += ent->checked / 2; } Sigil-0.9.9/CMakeLists.txt000066400000000000000000000067701321676412500153610ustar00rootroot00000000000000######################################################## # # This is a CMake configuration file. # To use it you need CMake which can be # downloaded from here: # http://www.cmake.org/cmake/resources/software.html # ######################################################### cmake_minimum_required( VERSION 3.0 ) project( Sigil ) set( CMAKE_DEBUG_POSTFIX "d" ) # Avoid the whole Release/Debug folder creation with Visual Studio if (MSVC_IDE) set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_BINARY_DIR}/bin") set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_BINARY_DIR}/bin") set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${PROJECT_BINARY_DIR}/lib") set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${PROJECT_BINARY_DIR}/lib") set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${PROJECT_BINARY_DIR}/lib") set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${PROJECT_BINARY_DIR}/lib") endif() set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin ) set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib ) set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib ) set( PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/package ) set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake_extras" ) set( SIGIL_MAJOR_VERSION 0 ) set( SIGIL_MINOR_VERSION 9 ) set( SIGIL_REVISION_VERSION 9 ) set( SIGIL_FULL_VERSION ${SIGIL_MAJOR_VERSION}.${SIGIL_MINOR_VERSION}.${SIGIL_REVISION_VERSION} ) if( UNIX AND NOT APPLE ) # Make sure the correct rpath is set for the sigil executable # on Linux -- for both the build and the installed versions. # Needed to make sure the installed shared hunspell and gumbo # libraries are found/used at runtime. # use, i.e. don't skip the full RPATH for the build tree SET(CMAKE_SKIP_BUILD_RPATH FALSE) # when building, don't use the install RPATH already # (but later on when installing) SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib/sigil") # add the automatically determined parts of the RPATH # which point to directories outside the build tree to the install RPATH. # This will ensure the Qt5 lib directory is always included after install. SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) endif() # Check if platform is 64 bit if( NOT APPLE ) if( CMAKE_SIZEOF_VOID_P EQUAL 4 ) set( 64_BIT_PLATFORM 0 ) else() set( 64_BIT_PLATFORM 1 ) endif() endif() # Profiler configuration for GCC if( CMAKE_COMPILER_IS_GNUCXX ) set( CMAKE_BUILD_TYPE profiling ) set( CMAKE_CXX_FLAGS_PROFILING "-O2 -DNDEBUG -pg -g -fno-omit-frame-pointer -fno-inline-functions -fno-inline-functions-called-once -fno-optimize-sibling-calls" ) # After creating the new build type, # we clear the default back to empty set( CMAKE_BUILD_TYPE ) endif() if (USE_SYSTEM_LIBS) MESSAGE(STATUS "Trying to use System Libraries...") find_package( ZLIB ) find_package( PkgConfig ) find_package( MiniZip ) pkg_check_modules( HUNSPELL hunspell ) if ( NOT APPLE ) pkg_check_modules( PCRE libpcre16 ) endif() endif() if ( WIN32 OR APPLE ) find_package(PythonInterp 3.5) find_package (PythonLibs 3.5) else() find_package(PythonInterp 3.4) find_package (PythonLibs 3.4) endif() # gumbo-parser it is our main xhtml/html5 parser. # We have an internal version because it diverges from Google's and GitHub's # versions and neither want's our epub specific changes. add_subdirectory( internal/gumbo ) add_subdirectory( 3rdparty/ ) add_subdirectory( src/ ) Sigil-0.9.9/COPYING.txt000066400000000000000000001045131321676412500144640ustar00rootroot00000000000000 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 . Sigil-0.9.9/ChangeLog.txt000066400000000000000000003163121321676412500152050ustar00rootroot00000000000000Sigil-0.9.9 Bug Fixes - Add python_3.5_fixes3.patch to Python build and update build docs on OSX to fix missing symbols - Fix crash caused by Preview holding pointer to user removed resource when front tab is non-html resource - Fix crash in FlowTab destructor due to re-entering flowtab during Syntax Highlighting and signals - Fix issue with file icons disappearing when reordering in Book Browser (commit ecb56b1f) - Fix missing epub3 Manifest cover-image property setting/unsetting with BookBrowser - Fix issue where cancelling the SaveAs dialog disconnected an existing epub from its saved path - Fix assertion error in sigil-gumbo when handling extraneous script end tags - Apply multiple fixes for gumbo from upstream - Fix segfault in Split at Cursor when not an html file - Make sure Add Cover tool properly handles existing manifest cover properties in EPUB3s - Correct error dialog to say "Sigil may need to close." - Prevent Images and Misc items from being dragged to the Text folder in Book Browser (commit 30bb96d) - Fix Linux bug that prevents rich text from other programs being pasted into Book View (issue #320) - Fix bug where index entries inside em and dfn tags were ignored during index generation - Fix bug on Windows in spell checking when smart right single quotes are used for apostrophes - Fix bug in simple well-formed check to handle generic xml processing instructions - Fix bug in epub3 MetaEditor with title-type and collection-type properties - Fix plugin code to prevent book href vs manifest id clashes - Fix bug in Plugin Runner to allow it to delete non-manifested files properly - Fix bug in SourceUpdates to handle properly handle css properties with multiple urls - Fix bugs in well-formed check to better handle missing doctypes New Features - Add SIGIL_DISABLE_CURSOR_BLINK environment variable to disable text cursor to aid Accessibility on OSX - Better use semantic information (guide types and Landmarks) to allow the user finer control of index generation - Attempt to improve Metadata Editor placeholder text to help beginners - Preview Window Title bar will now show height and width of the Preview Window - Allow users to limit/disable clipboard history saving via General Preferences - Convert br tags in header text to linebreaks for toc/ncx/nav generation routines - Support spell checking of words with numbers controlled by Preference settings - Add two additional Quick Lauch Icons for Plugins Sigil-0.9.8 Bug Fixes - Make sure when new empty epub3's are created that the toc does not use a doctype (Issue # 250) - Make GetUniqueFilenameVersion work even on Case-Insensitive filesystems (Issue #247) - Properly urlencode/decode all hrefs in plugin's ResultXML in launcher/PluginRunner to prevent parse errors - Enable Basic Cut Copy Paste Icons/Actions in OPF, NCX, XML, SVG, and other Misc Text Tabs - Add proper detection for minimum service pack requirements in Windows installer - Include workaround for bug in KDE Qt5 plugin on Linux that keep plugins from launching from menu - Prevent splitting Section0001.xhtml (Split at Cursor) needlessly rewrite the file's manifest id with a uuid - Fix issue where merging files when non-xhtml tabs were open was causing Python errors or crashes - Fix segfault in Image Reports when deleting unused image files - Fix bug in prettyprint_xhtml in sigil_bs4 (put back inadvertently dropped is_void_tag routine) - Fix gumbo serialize to better handle injected newlines - Harden bundled Python isolation on Windows and add subset of PyQt5 to bundled modules - Harden plugin interface code to properly unquote/quote hrefs - Stop Sigil from nagging about unsupported mimetypes when epubs with Adobe xpgt page-templates are opened - Fix Book Browser highlighting issue when editable XML files from the "Misc" folder are opened - Pull upstream bug fixes from google's gumbo parser for Sigil - Force formatting buttons in BookView to generate inline-styled spans instead of "strike", "b", etc - Fix bug from deprecated use of jquery $.browser.msie introduced when jQuery was updated - Fix temp folder specification on Windows systems that delete the system temp folder for every login (Issue #285) - Fix typos in metadata descriptions to allow better translations New Features - New preference setting (Appearance section) which allows user to adjust the size of the main menu icons - Add manifest properties to Book Browser tooltips and to All Files Reports Widget for epub3 - Make Sigil's UI and spellchecker language settings available to plugins - Add support for PyQt5 for plugin gui widgets - Internal builds now use Qt 5.6.2 with Webkit added back - Major compiler tool change and update for Windows build to sync Qt/Python/Sigil on Windows - Update all build it yourself from source documentation for new requirements Sigil-0.9.7 Bug Fixes - Allow tags in the svg and mathml namespace to automtically self-close if empty to help work around a bug in Kindlegen that will not seem to accept a closing svg image tag even though image is non-void - Prevent TextTab from constantly recentering page when focus is lost - Fix bugs in plugin basename_to_id when used with xpgt files or any unrecognized extensions - Fix typos in pls mimetype in plugins - Fix code synchronization issues among 3 places where file extensions are mapped to mimetypes - Fix plugin readotherfile interface to rebuild the opf on the fly only if it has been modified - Fix plugin validation issues with integer vs string representations of line number and character offsets - Fix duplicate filename in multiple directories bug when updating CSS urls - Fix bug in page-map.xml mimetype when "Add Existing ..." is used - Fix undefined behaiviour shifting signed negative values in 3rdparty libs and fix many warnings - Fix text vs binary file type recognition in the plugin interface (CSS and js files are text not binary) - Fix too small toolbar icons on high dpi displays - Fix bug that caused text highlighting to get lost on some systems when doing a CSS Find & Replace. - Fix bug in plugin interface basename_to_id to recognize .htm extensions - Fix bug in epub3 semantic popups to always refect the local name of epub:type setting - Fix bug where creation on an HTML TOC could overwrite an existing Nav under epub3 - Fix manifest id not starting with alpha character bug New Features - Extend validation plugin interface with add_extended_result() method to allow better cursor positioning - Extend TextTab and Tabs derived by it to position cursor based on offset - Allow editing of page-map.xml files, xpgt files and other misc xml based files inside Sigil - Update Windows builds use Python 3.5, VS2015 - Update Mac OS X builds and build instructions to use Python-3.5.2 - Remove support for python2.7 *only* plugins and simply Manage Plugins settings - Update to Qt 5.6.1-1 with QtWebKit added back for release builds for Windows (VS2015) and Mac OSX - Update Mac OS X and Linux build instruction documentation for recent changes - Allow Linux Dictionaries to look up default paths for dictionaries passed in by build cmake settings - Mke the columns in the Manage Plugins table be sortable by the user - Better detect undefined and non-existing url fragments to prevent issues when splitting or merging files - Make tooltips for Run Plugin Icons show the name of the selected plugin on hover - Upgrade from jquery 1.6.2 to version 2.2.4 - Upgrade from jquery.scrollTo 1.4.2 to version 2.1.2 - Upgrade to double sized 48x48 pixel icons for High DPI displays, Special Thanks to PatNY for creating our icons Sigil-0.9.6 Bug Fixes - Make StdWarningDialog resizeable when "Show Details" is used - Fix CleanSource svg prefix removal bug that sometimes broke valid svg code - Remove svg image and html5 menuitem from the list of void elements in the Sigil and plugin code - Properly xml escape "&" in metadata attribute values - Properly perform source updates on epub load even when they do not follow recommended spec - Make handling of comments in both xhtml and xml more roubst - Properly url escape css file names to handle css files with spaces in them - Try to make direct editing of content.opf more safe by auto-fixing errors when possible - Properly handle WellFormed checks for pure XML in XMLResource.cpp by using embedded python3 lxml - Make opf_newparser.py and xmlprocessor.py more robust to broken user input in content.opf - Make ProcessXML (repairXML in xmlprocessor.py) - leave untouched anything well-formed - Fix thinko in plugin bookcontainer.py and outputcontainer.py contributed by wrCisco - Fix for improper encoding in plugins on Mac OS X due to missing inherited plugin environment - Fix for typos in epub xmlns when splitting epub3 ebooks in BookView - Update testplugin_v012.zip to testplugin_v013.zip to handle sgc-nav.css new feature - Fix bugs in DeleteUnusedStyles when selector exists more than once in the same stylesheet - Fix bugs in DeleteUnusedStyles when group selectors span more than one line - Fix bugs in Reports: CSS Styles missing cases when selector exists more than once - Fix bug in Reports: All Files to use Landmark Semantics under epub3 not guide semantics - Fix bug, slow in loading ini when too large clipboard history, user can delete them via dialog - Stop cosmetic double-spaces being introduced into OPF manifest, spine and guide entries - Fix bug when user selects too much in BookView and then tries to change case - Fix bug in Delete Unused Media when css urls do not use quotes - Try to set all ways of updating the ncx to use 2 character indentation of head element - Fix Building Relocatable Python on Mac build instructions to remove BeautifulSoup4 requirement - Fix for generating empty guide for epub3 when in plugins New Features - create sgc-nav.css stylesheet for nav and allow templates in Prefs Dir for user to control it - Add General Setting to allow user to set own temporary directory location - Add Qt Stylesheet support - Recognize and load "qt_styles.qss" file if stored in Sigil Preferences folder - Extended the plugin interface to add support for epub3 bindings elements - Add option + forward delete shortcut to active Metadata Editor remove Sigil-0.9.5 Bug Fixes - Fix regression when ImportHTML in gathering HTML based DC. metadata - Fix regression - remove incorrect use of opf:scheme from dc:creator and dc:contributor under epub2 - Fix regression - the guide reference tag is always a void tag - Fix issues with hunspell spell checking under Windows when non-ascii paths to dictionaries - Fix issues with overridding the prefs directory on Windows with non-ascii paths - Fix broken manual "Check" button on W3C stylesheet validation's generated html form. - Fix media-type recognition for .m4a and .m4v file extenstions in main Sigil and plugin code - Treat ruby and rt as inline tags when pretty-printing in Sigils and for plugins New Features - Allow user to choose what level of CSS gets used in the "Validate Stylesheets With W3C" tool via user preference (General). Sigil-0.9.4 Bug Fixes - Prevent the use of zero length key fields when obfuscating fonts - IDPF font obfuscation key accepts all input except as specified - Fix typo in main.ui accelerator assignment - Update Transifex project URL - Prevent NCX Weirdness with ampersand added when editing NCX in codeview and TOC widget showing - Fix lost namespace attributes on metadata tag - Allow auto conversion from package version 1.0 to 2.0 - Remove unused parameter from gumbo create_text_node - Fix bug that hits package version when no xml declaration on opf on import - Add id to Heading structure to greatly speed up NCX/TOC creation even more - Only the true nav should ever have the nav manifest property set - Prevent nav property from being overwritten when updating manifest properties - Prevent segfault if user add semantics but never chooses one - Prevent Add Cover from returning the wrong doctype for epub3 - Make sure cover-image and svg (if needed) are added as epub3 manifest properties when adding a cover - Make sure all referenced resources are found for Delete Unused Media - Remap non-standard epub namespace prefixes in the opf to those now reserved for epub3 - Make loading epubs with broken opf files more robust New Features - Extract all MarcRelators related code into its own class so it can be shared - Added some missing MARC relators - Removed obsolete MARC relators (ctb replaced clb, and sng replaces voc) - Completely redesign MetaEditor gui to work with both epub2 and epub3 metadata - Add default metadata language and title for the user - Make the Nav a required part of an epub3 - create an empty one if need be - Create NavProcessor to use gumbo to update the nav.xhtml - Add support for Adding/Removing Nav Landmarks - Better identify the true nav when loading epub3s - Add ability to generate Nav TOC from Book Headings to CreateTOC tool - Check for valid nav otherwise create a new default one ready for updates - Do not allow split markers to be added to nav.xhtml - Do not allow nav to get merged - Do not allow the nav to be deleted - Do not allow plugins to delete the nav under epub3 - Completely Revamp BookBrowser interface to support both Guide and Landmark Semantics - Create Semantics Dialog to better handle epub2 and epub3 semantics - Create Separate Guide/Landmarks classes for epub2 and epub3 respectively - Rename DescriptiveMetaInfo structure to just DescriptiveInfo to work with guide/landmarks elements - Add a mapping from Landmark to Guide and Back - Remove old GuideSemantics code - Make sure Landmarks semantics show up in BookBrowser tooltips - Update epub3 semantic vocab in Landmarks - Completely Revamp how the dockable TableOfContents gui widget is built and updated - Remove strong coupling between TableOfContents widget and NCX - Allow dockable Table Of Contents to refresh from Nav under epub3 - Large update for translations needed - Many new strings supporting the MetaEditor GUI and Add Semantics GUI were added Sigil-0.9.3 Bug Fixes - Add a python based updatechecker for Sigil updates to prevent Windows OpenSSL build issues - Stop 'Generate TOC' from introducing unnecessary spaces in front of class attibute values - Use localeAwareCompare to attempt to add Index Entries to build them sorted - Fix segfault caused by use of possibly stale htmlresource pointer in FlowTab destructor - Workaround Qt bug that causes slow selection/highlighting of xhtml on Linux - Fix multiple typos in sigil_gumbo_bs4_adapter code New Features - Add an autostart/autoclose capability for plugin developers - Add 3 User-assignable ToolBar Buttons for up to 3 plugins - users can an assign key accelerators to them - Add General Settings Preference for setting default (epub 2 or 3) for new documents - Merge CleanSource Preference Settings into General Settings Preferences - Add Setting to control Epub access non-multimedia remote resources - Completely reworked Sigil internals to support epub version (2 or 3) specific functionality - ImportHTML, ImportEPUB, Splitting and Merging, Index Generation, Mending, are all now epub version aware - AddModificationDate upon save is now epub2 and epub3 aware - Add "Epub3 Tools" to the Tools menu - Add three new epub3 tools: "Update Manifest Properties", "Generate Nav From NCX" and "Generate NCX From Nav" to "Epub3 Tools" menu - Add local-storage support to PV/BV for epub3's that use javascripts - Added support to recognize and update upon load SMIL files and Adobe page-map.xml files - Make quoteurl url scheme-aware in both python and for Qt, since epub3 allows external resources - Extend url address recognition to include track, video, and object elements attributes - Recognize and store .vtt and .ttml files for video subtitles and captioning - Prevent attempts from using Metadata Editor gui from hurting epub3 until support is added later - Many epub3 related bug fixes and changes to make sure all new epub3 href/links are properly updated - Reworked the plugin_launcher epub3 interface code to allow fallback and media-overlay attributes - Added support for MathML in Preview via Mathjax.js-single polyfill - Added the MathML list of void tags to GumboInterface for proper serialization - Add technique to call long EmbeddedPython calls by using QtConcurrent::run Sigil 0.9.2 - Update BuildingOnLinux docs - Update Building on Mac OS X docs - Fix example clips/searches loading on Linux - Simplify UseBundledInterpreter Logic - Preliminary Linux binary installer support added - Include Pull Request 161 by pinotree "Switch TempFolder to QTemporaryDir" to improve safety - Fix bug when adding existing html links to stylesheets not being updated - Fix bug in Well-Formed error messages due to bug inside gumbo's error.c - Add xmlns="http://www.w3.org/1999/xhtml" attribute to html tag if missing - Reduce fear of Cleaning ToValidXHTML by using serialize not prettyprint - Add ability to change Sigil's user preferences directory by specifying a new path via the SIGIL_PREFS_DIR environment variable (path must be user-writable). - Fix lost DOCTYPE info when splitting or merging - Completely rework pretty printing via gumbo to be much more robust - Make identification and storage of page-map.xml more robust - Completely revamp Cleaning to use "Mend Code" and remove PrettyPrintGumbo as on option - Rename PrettyPrintGumbo to "Mend and Prettify" and move to CodeView Right-click menu - Restore Sigil's update checker that's been broken for a while - Update sigil_bs4 prettyprint_xhtml and serialize_xhtml routines to use logic of code in GumboInterface - Update sigil_bs4 to use numeric entities when faced with nbsp so they do not get lost later in Sigil - Rename "Sanity Check" to "Well-Formed Check EPUB" and remove check icon people confused with FlightCrew - Fix out of date error message referencing Tidy - Coerce missing or bad doctypes to meet either epub2 or epub3 standard - Inject empty title tag if missing from head - Html escape Index entry text used to create index.html Sigil 0.9.1 - Fix bug when template sgc_toc.css could be changed to blank on save, since no InitialLoad() was done - Change order of TextResource m_IsLoaded and m_CacheInUse flags to minimize potential race exposure. - Fix PluginRunner bug that introduced errors into xhtml files when both the content.opf and xhtml were modified - Auto XML Decode and Escape Metadata entries created in the Metadata GUI - Alter pluginhunspell.py so a missing libhunspell doesn't stop ALL plugins from working - Default to using clean by gumbo vs prettyprint gumbo in new installs - Fix prettyprint bug with trailing whitespace improperly inserted after inline tags inside div tags - Fix for bundled interpreter packages PIL and cssutils on Mac OS X that were missing - Fix for crash when using Find in BV on pages with no text, only images (issue #156) - Added testplugin_v010.zip to docs to allow Linux packagers to test their plugin implementation - Fix for prettyprint bug with tables (issue # 158) - Fix for serialize in gumbo to limit injected returns - Update to Sigil_Plugin_Framework_rev6.epub - Make build order of sigilgumbo deterministic in order to help Linux packagers - Make plugin launcher success and error messages robust to non-utf-8 strings - Fix for crash bug when comments exist inside manifest of opf - Fix for Sigil's gumbo - only inject end tags when current token does NOT need to be reprocessed Sigil 0.9.0 Release - Add "Use Bundled Python" option to bring sanity and choice to Python3 Interpreter selection - Merge EmbeddedPython code across platforms and fix python flags for all platforms - Properly build translation base.ts to prevent blank message fields being generated by tr() - Allow PrettyPrint_Gumbo to condense whitespace where allowed - In PluginRunner auto-repair modified xml (opf, ncx), do not check xml with xhtml wellformed check - Fix bug in plugin epub3 interface, conversion of properties with null strings to None - Restore ability to override hunspell dictionary locations on Linux with SIGIL_DICTIONARIES env var - Restore ability to build Sigil against system hunspell libraries on Linux - Adjust pluginhunspell.py to try to find system hunspell if bundled hunspell is not built/installed - Fix hang/slowness in TOC creation when huge number of headings all exist in the same file - Performance speedups for NCX writing to help with slow ToC Creation - Bug fix for better detecting comments in sanitycheck.py - Bug fix for Adding Blank xhtml files to an epub3 - Bug fix for Issue 140 - TOC gets cut-off under some platforms (lxml needs utf-8 not unicode) - Add cmake option INSTALL_BUNDLED_DICTS to enable/disable installation of bundled hunspell dictionaries - Allow SIGIL_DICTIONARIES env var to specify multiple paths (colon delimited) - Fix bug in sanitycheck.py error message creation - Identify woff files as fonts when importing epubs - Fixes for nbsp being "lost" when linking in stylesheets and when splitting and merging chapters - Fix for lost whitespace inside text holding tags when pretty printing - Workaround for broken QShortCut in Qt 5.4.X see Issue 149 - Cleanup up some compiler warnigns Sigil 0.8.901 Second in the pre-release series - primarily a bug fix release Fixes - fix for hang when trying to add a cover - multiple fixes for segfaults in the TOC creation code - fixes for blank TOC headings caused by tags nested inside of h1-h6 tags - workaround for an instability caused by a compiler bug in Visual Studio 2013 on Windows - fixes for multiple xml header declarations appearing when using sigil_bs4 prettyprint_xhtml() or serialzie_xhtml() - build fixes to include MSVCR100.DLL for Windows machines that are too new to have it - fix pretty printing using gumbo to support some mbp: tags - fixes to deal with self-closing iframe tags which made gumbo stumble - fixes to more robustly convert from QByteArray types to their char * pointers - fixes and improvements to the Building on Linux instructions - protect gumbo parsing with a mutex to prevent unknown issues with potential for non-reentrant code in that library - workaround Qt QHash operator()= bugs that caused static QHash objects to freed multiple times - fix for internal opf processing encoding detection being confused by xml header declarations potentially resulting in missing spine and manifest items. Features - new launcher/wrapper code interface to support plugins that operate on epub3 ebooks - added cssutils, cssselect, and chardet to the site-packages of the embedded Python 3.4 interpreter - validation plugins that report no errors will now have "No problems found" appear in the Sigil Validation window. - validation plugins will auto accept/close the plugin runner window no matter the results - Windows installer now detects whether MS redistributable runtimes are already installed Primarily Infrastructure Changes Toward Dual Epub2 / Epub3 support: Sigil 0.8.900 (pre Sigil 0.9.0 series) - Kill tidy and replace it with a combination of a specially modified Gumbo parser that supports html5 - Kill Xerces and XercesExtras. - Kill Boost, replace with C++ 11 - Kill unused bundles. - Replace all "undefined - behaviour" use of "Null" References with proper pointers across entire codebase to allow it to work with the latest clang compilers - Completely revamp the build process to embed the Python 3.4 Interpreter inside of Sigil and integrate it in, including as site-packages: [lxml, bs4, PIL, regex, six, html5lib]. This will allow plugins that use the internal Python 3.X engine access to all of these specialized packaes by default with no additional action needed by end users of their plugin. - Create our own version of BeautifulSoup4-4.4.0 called sigil_bs4 that fixes lxml namespace bugs, fixes serialization/prettyprinting of inline xhtml tags, and modifies the bs4 codebase so that a single sourcecode works equally well on both Python 2.7 and Python 3.X - Replace internal opf and ncx xml processing and cleaning with a combination of embedded Python 3.4, sigil_bs4 / lxml - Build hunspell as a shared library and then add a ctypes interface to allow plugins to spellcheck - Build our modified gumbo html5 parser as a shared library and provide a bs4 ctypes interface to it for easy xhtml processing in plugins that use Python 2.7 and Python 3.X - Allow plugins to auto-fix "text/html" media-types to "application/xhtml+xml" - Redesign the ebook source updates upon load process to use our modified gumbo-parser - Begin the transition to allow for both epub2 and epub3 editing (Note: epub3 editing is still incomplete) - Convert Flightcrew to become a Sigil plugin and replace it with a simple and fast internal sanity checker. - Update Hunspell dictionaries to be actual dictioanries and not word lists for en_US and en_GB - Updated other dictionaries to their most current version to match what is used in LibreOffice 5 - Fix issue #54 modified date using local numerials when it should be using Arabic numerals per the spec. - Set the book to modified when font's are obfuscated. - Change FORCE_BUNDLED_COPIES build flag to USE_SYSTEM_LIBS. This flips the meaning of the flag. Now USE_SYSTEM_LIBS will enable using system libraries. Also, SYSTEM_LIBS_REQUIRED was added which will fail the cmake configure if any system libraries are not found instead of falling back to the bundled copy. Finally, this makes the build more consistent for Windows and OS X users. Sigil 0.8.7 2015.06.14 - Update links - Try to work around clang compiler issues with older C++ codebase Sigil 0.8.6 2015.04.12 - Fix for crash during merging xhtml files. - Changed fix for "Create TOC crash in Sigil 0.8.5" to reduce the degree of disconnecting to prevent lost signals on html resources. - Fix for missing audio and video mime types in OPFResource and FolderKeeper. - Attempt to prevent Tidy from simply deleting all mathml during cleaning. Sigil 0.8.5 2015.03.29 - Fix text resource not alwalys saving to disk. - Fix bug in missing CSS. - Fix create html toc crash bug. - Update some links in the help menu. Sigil 0.8.4 2015.02.01 - Fix for removeall plugins bug where all plugins would remove all plugins regardless if the user clicked no instead of yes. Sigil 0.8.3 2015.01.31 - 10.9.5 is now the minimum OS X version required. Only 10.10.1 has been tested. - -DCODE_SIGN_ID=XYZ option has been added to auto sign the app bundle on OS X. - Validation result plugins will auto close the Plugin Runner Dialog since the dialog has no real info and openes the validation pane with the results anyway. - New Plugin Preferences Support added - Plugins Manager will now remember last folder used - Support for building both Linux .deb and .rpm packages - Lots of Linux build support, compilation, installation, and documentation improvements - Qt 5.4 is now a minimum requirement. - Build changes to support update to latest Qt 5.4.0 and to use latest C++11 compiler - Numerous bugs fixed or worked around including: - Make Invocation of CSS W3C Online Validator more reliable - Fix to make Preview Window update after BookView to prevent memory corruption and crashes - Workaround Qt bug (font cache assertion) when using clearMemoryCaches() - see https://bugreports.qt.io/browse/QTBUG-43504 - Properly handle loadFinsihed Signal in BookViewPreview to prevent clashes between BookView and Preview - Fix for Sigil memory use after it was freed bug - Workaround to the extent possible Qt bug with memory use after free using QWebInspectors - see https://bugreports.qt.io/browse/QTBUG-43725 - Workaround to the extent possible Qt bug with memory use after free when closing MainWindows - see https://bugreports.qt.io/browse/QTBUG-43692 - Bug fix to prevent crashes in KeyboardsShortcuts when accessing Preferences with multiple MainWindows Sigil 0.8.2 2014.11.28 - Validator plugin type which can load validation results into the main window validation panel. - Corrections to Sigil Plugin Framework Documentation - Pull request #17: Fix typos in README.md - Additional python plugin interface features: - multiple plugin engines now allowed for plugins that work on both python 2.7 and python 3.4 - launcher revision date interface - plugin stdout will now appear immediately in Sigil - Multiple plugin launcher bug fixes: - make parsing more robust to poorly formed xhtml - modified text iterator to follow spine order - bug fixes for readotherfile, and writeotherfile - bug fixes for guide types and setting the guide Sigil 0.8.1 2014.10.12 - Set minimum OS X version to 10.9.0 in Info.plist so users trying to run on older versions of OS X will receive an error dialog instead of a crash dialog. - Set minimum Windows version to Vista in Installer so installation will error when trying to install on XP (which is not supported and Sigil binary packages won't run on). - Fix issue #21: Use Hunspell WORDCHARS to help in tokenization of words. - Pull request #19: Moving plugin description to ToolTips. - Pull request #20: Preserve current file name for future save as actions if appropriate. - Fix bug where save after using input plugin would fail. Sigil 0.8.0 2014.09.27 - Plugin framework. - Add the svg image tag as an svg inline element (not a block element) and add it as an empty element (TidyEmptyTags). - Allow user defined list of entities to preserve. - Pull request #16: Hardcode menu Plugins in UI, move it before menu Help. - Pull request #10: Add ability to move entries in TOC up and down. - Pull request #8: Allow pasting HTML as HTML or plain text in BookView. Sigil 0.7.4 2013.10.27 - Use numeric entity for non-breaking spaces (nbsp) instead of named entity. Fixes issues where files without a doctype won't open properly. Sigil 0.7.3 2013.08.03 - Fix issue 2309: Compile failure due to case issue on m_lastFolderOpen. - Fix issue 2269: "Conflicts with:" always in English. - Fix issue 2186: Sigil 0.7.2 crashes on "Add existing files". - Fix issue 2232: The nbsp characters in UTF-8 files are converted to normal spaces. - Fix issue 2201: Save does not prompt for filename if filename not set after cancelling save operation. - Fix issue 2193: Incorrect country code used for Serbia. - Implement issue 2199: Mac, Don't open empty book by default. Sigil 0.7.2 2013.04.14 - Implement issue 2129: Enhance archive filename encoding handling. - Implement issue 2128: Warnings for non-ASCII characters in filenames. - Implement issue 2113: Preview should zoom separately from other views. - Implement issue 1997: Tool to Add Cover image and file automatically. - Implement issue 1993: Find & Replace should have a Marked Text option. - Implement issue 2083: Enhance invalid OPF recovery. - Implement issue 2082: Improve performance of Book Browser refresh. - Fix issue 2170: Spellcheck should remember position after changing word. - Fix issue 2148: Don't delete cover image in "Delete unused media files". - Fix issue 2147: Doubleclick in Delete Files dialog can cause crash. - Fix issue 2143: Bulk rename with just a number for filename does not use correct number of 0s. - Fix issue 2121: Wait cursor shows when dialog is open while saving or opening. - Fix issue 2107: Heading not accepted due to split at end of file. - Fix issue 2110: Insert Special Character inserts wrong code for nnbsp. - Fix issue 2021: Importing UTF-16 encoded files results in empty file. - Fix issue 2088: Ctrl-click on text files does not work in Code View. - Fix Issue 2071: Anchor dialog has disabled text field. - Fix Issue 2077: Rename dialog incorrectly sized. - Fix issue 2081: Book Browser tooltips are not updated when semantics change or for cover images. - Fix issue 2080: OPF meta title not updated correctly for Add Semantic. - Fix issue 2079: UI Language dropdown does not show language names for entries containing _. Sigil 0.7.1 2013.03.03 - Implement issue 2058: Code View should be able to show resizable image. - Implement issue 2038: Spellcheck "change selected word to" should remember sorting order. - Implement issue 2043: Spellcheck should allow case-insensitive sorting. - Implement issue 2029: Save and open should warn if HTML files are not well formed. - Implement issue 2009: Add semantic tags to filenames in reports. - Implement issue 2028: Special characters should work in non-html files. - Implement issue 2027: Upgrade Boost to Boost 1.53.0. - Fix issue 2069: Work around for archives where filenames are not utf-8 encoded. - Fix issue 2068: ZIP general purpose bit 11 (utf-8) filename not set. - Fix issue 2061: Language code using wrong character to separate country code. - Fix issue 2057: Text selected across lines using Ctrl-F cannot be found with Find. - Fix issue 2036: Mark for Index can insert HTML tags into code making it invalid. - Fix issue 2041: Preview does not sync cursor after using Sigil for a while. - Fix issue 2030: The   character is incorrectly converted to space on open. - Fix issue 2035: Index Editor entries with nbsp character don't match text. - Fix issue 2016: Find with wrap off and All HTML Files still wraps on last file. - Fix issue 2001: Spellcheck does not always highlight a word the first time. - Fix issue 2017: Clips pasted into some windows does not work correctly. - Fix issue 2008: Index adds extra comma in some cases. Sigil 0.7.0 2013.02.17 - Implement issue 1983: Set the tooltips of files in Book Browser to the filename. - Implement issue 1965: Allow opening files that are missing container.xml. - Implement issue 1975: HTML TOC and Index should use CSS files instead of inline stylesheet. - Implement issue 1968: Bookmark location in editing window. - Implement issue 1963: Table Of Contents window should default to expanded when opened or refreshed. - Implement issue 1953: Allow entering a list of new words into dictionary preferences. - Implement issue 1952: Add shortcut for Copy HTML file. - Implement issue 1951: Doubleclick on Image Report file should find next use of image. - Implement issue 1949: Add support for multiple active user dictionaries. - Implement issue 1947: Spellcheck dialog to manage all misspelled words at once. - Implement issue 62: Add document's css styles to menu. - Implement issue 1945: Allow editing of CSS while displaying page. - Implement issue 1661: Report list of all different characters in the book. - Implement issue 1746: Add Report for Links and Footnotes. - Implement issue 1941: Add Find & Replace option to wrap or not wrap searches. - Implement issue 1940: Update Insert Image to Insert File to support insert of audio/video. - Implement issue 1938: Update Delete Image files to Delete Media files to include audio/video. - Implement issue 1937: Add Report for All Files. - Implement issue 1936: Add Clip Bar toolbar with buttons for Clips and shortcuts for Clips. - Implement issue 1931: Change to QRegularExpression for most regexes. - Implement issue 1185: Edit Table of Contents without needing Generate TOC. - Implement issue 1929: Add support for playing audio and video files. - Implement issue 917: Sigil should support audio and video tags. - Implement issue 1928: Add well-formed check to HTML File Report. - Implement issue 1864: Allow Metadata Editor dialog to stay open while editing. - Implement issue 1871: Code View context menu should show clips even if word is misspelled. - Implement issue 1870: Saved Searches should use mode settings from Find & Replace. - Implement issue 1927: Add support for basic replacement Clips (e.g. span) in Book View. - Implement issue 20: Embedded fonts support. - Implement issue 1926: Upgrade to Qt5. - Implement issue 1924: Add dockable Clips window to select clips. - Implement issue 1925: Don't force well formed checks unless absolutely necessary. - Implement issue 1843: Preview should be real-time display of Code View. - Fix issue 1989: Problem with nested index entries. - Fix issue 1964: Correcting a word using spellcheck does not make file go to "not saved" state. - Fix issue 1961: Generate TOC should not create IDs for headings when it only points to filenames. - Fix issue 1857: CSS Highlighting inline styles inconsistent. - Fix issue 1946: Highlight misspelled words checkbox should be available in Preferences. - Fix issue 1943: Reports can crash if file has non well-formed xml. - Fix issue 1883: TOC window does not jump to right location for some entries. - Fix issue 1906: "Delete unused image files" deleting background images. - Fix issue 1874: Using Delete Unused Stylesheet Classes deletes pseudo-elements. - Fix issue 1939: CSS parser does not match wildcard selectors consistently. - Fix issue 1935: Improve speed of Index Editor autofill by removing progress dialog. - Fix issue 1891: Opening the Saved Searches expands all groups. - Fix issue 1934: Go To Style does not work with CSS filenames that have spaces in them. - Fix issue 1933: No message is displayed if Go To Style can't find a style. - Fix issue 1932: Replace All needs to be run twice in some cases. - Fix issue 1930: Fix Metadata language dropdown selection incorrect matching. - Fix issue 1775: Sigil-0.6.0 edit very slow with Thai e-Pub. - Fix issue 1764: Sigil crashes on KDE after rearranging text sections. - Fix issue 1720: Book View highlights text apparently randomly. - Fix issue 1923: CSS validation should use EPUB 2 profile. - Fix issue 1922: Invalid EPUB warning dialog is not long enough. - Fix issue 1918: Support import of tab separated entries for Index Editor. - Fix issue 1917: Keep selection when deleting unused images if an HTML file was selected. - Fix issue 1916: Allow Go To Style to work for link type text/x-oeb1-css. - Fix issue 1869: Backspace in Preferences - Shortcuts causes crash. - Fix issue 1818: Hyperlink of URL with & causes invalid code. - Fix issue 1824: Cursor position changes when saving the book. Sigil 0.6.2 2012.12.06 - Fix issue 1834: Pretty Print should be removed due to formatting issues. - Fix issue 1821: Audio files missing. - Fix issue 1816: Height is incorrect in Reports->Image Files. - Fix issue 1809: Fix crash related to cursor syncing. - Fix issue 1808: Editing in book view changes DTD to incorrect value. Sigil 0.6.1 2012.12.02 - Implement issue 1801: Audio and Video tags and files should be supported by Sigil. - Implement issue 1797: Clean Source should have preference options to set when it should run. - Implement issue 1768: Add non-destructive pretty printer as an option in addition to the Tidy provided one. - Implement issue 1770: Change Clean Source to no longer warn about restarting Sigil. - Implement issue 1767: Change default file extension from html to xhtml. - Implement issue 1695: Add tooltips to show counts of files in Book Browser and headings in Generate TOC. - Implement issue 1731: Delete files, Unused Images and Styles dialog should be scrollable and allow unselecting entries. - Implement issue 1735: Print stylesheets and other non-HTML files. - Implement issue 1758: Handle importing invalid files with duplicate IDs in OPF file. - Implement issue 1711: Reports should allow saving to comma separated text file. - Implement issue 1712: Reports should be non-modal and allow editing book while still open. - Implement issue 1748: Add a Copy Image context menu option for images. - Implement issue 1738: Move Generate Table of Contents button to toolbar. - Implement issue 1743: Insert Image should include an alt tag with filename. - Implement issue 1717: Allow more control of Author field in Metadata Editor. - Implement issue 1729: Bulk rename should allow changing file extension. - Implement issue 1728: Open/add invalid HTML files should show line numbers of error. - Implement issue 1742: Add context menu option in Preview View for Inspect Element. - Implement issue 1734: Splitting files and new blank HTML files should use existing file extension. - Implement issue 1732: Index Editor should support opening/importing .txt files. - Implement issue 1687: Insert ID should warn if invalid ID names are used. - Fix issue 1791: All   are replaced by normal space when switching from Book View to Code View. - Fix issue 1798: Files, *-tmp.epub, are left in /tmp/Sigil/scratchpad after closing Sigil. - Fix issue 1785: Split at Cursor in Book View does not always update href links. - Fix issue 1759: Zipped files get wrong date and time. - Fix issue 1757: Spellcheck does not handle one letter misspellings properly. - Fix issue 1750: Loading HTML file should not automatically generate TOC. - Fix issue 1749: Right click on SVG images should give same options as other images. - Fix issue 1730: Changing view or using back button should select file in Book Browser. - Fix issue 1726: Selecting all text and replacing with a Clip causes crash. - Fix issue 1707: Application may crash when editing files externally. - Fix issue 1733: Files edited with Open With are not always updated when externally saved. - Fix issue 1704: Language dropdown entries have blank entries. - Fix issue 1740: When dockable windows are stacked the program can give error on close. Sigil 0.6.0 2012.10.27 - Implement issue 1664: Improve performance of opening and changing tabs. - Implement issue 1665: Attempt to recover EPUB if it is missing an ncx file. - Implement issue 1643: Change Clean Source default to Pretty Print instead of Tidy. - Implement issue 1636: Add shift-click Replace for Replace Current - replace but not find next match. - Implement issue 1638: Improve performance of Generate TOC. - Implement issue 1637: Provide more friendly handling of bad EPUBs by not crashing after showing warning. - Implement issue 1629: Localization of title in contentx.opf semantics. - Implement issue 1622: Allow Font Obfuscation to work for multiple font files. - Implement issue 1620: Well-formed check option should be removed and replaced with more appropriate automatic checking. - Implement issue 1617: Split should split at cursor position not at end of paragraph. - Implement issue 1619: Generate TOC should show tooltip details for the heading in case title and text is blank. - Implement issue 1618: Generate TOC should allow changing heading levels in document and TOC. - Implement issue 1615: Generate TOC should number sigil_toc_id's across all files and delete unused id's before generating. - Implement issue 1612: Improve performance of merging files. - Implement issue 1611: Improve performance of switching and closing tabs. - Implement issue 1610: Use html instead of xhtml as the default extension for new blank HTML files. - Implement issue 1606: Allow rename of titles in Generate Table Of Contents and show filenames in tooltip. - Implement issue 1601: Delete unused Images. - Implement issue 1602: Delete unused Styles. - Implement issue 1603: Allow formatting buttons to work in Code View. - Implement issue 1600: Option to delete one line in Code View without selecting text. - Implement issue 1597: Show HTML tag information for current location in text while in Book View. - Implement issue 1594: Allow miscellaneous text files to be edited and others to be opened externally. - Implement issue 1590: Insert image should allow insert from disk. - Implement issue 1557: Sigil requires Qt 4.8 or above. - Implement issue 1586: Spellcheck should allow setting a keyboard shortcut for Ignore Word to speed editing. - Implement issue 1585: Spellcheck should have a menu entry to clear all ignored words. - Implement issue 1584: Sigil should allow CSS file to be edited while viewing HTML. - Implement issue 1583: Sigil should remember the current view state when it restarts. - Implement issue 1573: Improve performance of bulk rename. - Implement issue 1468: Allow images to be opened externally. - Implement issue 1571: Display whether classes are used in the HTML or CSS files in a new Reports dialog. - Implement issue 1572: Add feature to re-format CSS files - Implement issue 1567: Remove XPGT support. - Implement issue 755: Support 'code view' for svg images that are loaded as separate files. - Implement issue 1561: Add Save A Copy option to save file under a different name without renaming current file. - Implement issue 1559: Add option to insert special characters into document. - Implement issue 1333: Add Hyperlink editor buttons to select target from existing ids and set id anchor. - Implement issue 401: Add edit buttons for Uppercase, Lowercase, Propercase, Capitization. - Implement issue 985: Sigil fonts should be configurable in Preferences. - Implement issue 1248: Code View/CSS should allow colors to be configurable in Preferences. - Implement issue 1153: Highlighted Text in Code view Difficult/Impossible to see. - Implement issue 1511: Prompt to replace an image when adding an image that already exists in the book. - Implement issue 1542: Add a Go to Style option to jump to the CSS class used by a tag. - Implement issue 1541: Heading styles should optionally remove/keep attributes in tags. - Implement issue 1540: Add option to tokenise spaces and numbers in F&R find text. - Implement issue 1539: Regex should support options for minimal matching, dot includes newlines. - Implement issue 1535: Add Clipboard History to automatically saved recent cut or copied text. - Implement issue 1534: Option to toggle Book View or Preview View to Code View and vice versa. - Implement issue 1528: Shortcut preferences should be simplified. - Implement issue 1536: Split at Chapter Markers should split all files. - Implement issue 1530: The heading dropdown should be changed to buttons for quicker selection. - Implement issue 1529: Code View should support heading/formatting buttons as used in Book View. - Implement issue 73: External HTML links should be usable but evoke warning dialog. - Implement issue 1521: Tab headers right click to close other tabs, toggle view state. - Implement issue 715: Search Editor for saving and executing Find & Replaces searches. - Implement issue 588: Clip Editor for saving and inserting text. - Implement issue 1519: Open and go back to links in Code View and Book View. - Implement issue 167: Index Editor to create a book index. - Implement issue 1450: View classes used in HTML files. - Implement issue 102: View details of all HTML files. - Implement issue 839: Word Count (in View HTML details). - Implement issue 1392: View details of all images. - Implement issue 1513: Add progress indicators to various functions. - Implement issue 1510: Add Existing Files should only open last file not all files. - Implement issue 1428: Find&Replace should allow Ctrl/Shift key modifiers to set what to search. - Implement issue 1325: Insert Images support for multiple images, resizing, thumbnails. - Implement issue 31: Automatically set "date of modification" on save. - Implement issue 1508: Allow export/saving of individual files. - Implement issue 1367: Shortcut key to remove code tags from selected text. - Implement issue 761: Shortcut key to close last open tag (Code View). - Implement issue 1507: Metadata dialogs should allow double click to select. - Implement issue 1457: Save should not add heading ids - already done in Generate TOC. - Implement issue 1444: Sigil should not include .txt or .html in file associations during install. - Implement issue 1443: Find&Replace should save state on restart. - Implement issue 1416: Don't add selected text to F&R history and increase selected text limit for being auto loaded into F&R. - Implement issue 1414: Cover semantic should not be added automatically. - Implement issue 1405: Cleared shortcut reset to default after restart. - Implement issue 1407: Tidy should allow more fine-grained control. - Implement issue 1393: Add Semantics Text should only apply to one file. - Implement issue 1369: Add support for \xDD as Regex replacement in F&R. - Implement issue 1285: Display image properties. - Implement issue 534: Link to Stylesheets option for HTML files. - Implement issue 1385: Metadata editor should always display fields - Implement issue 1311: Metadata support for all RfC 639-2 languages. - Implement issue 1335: Run Save As automatically if saving new html file. - Implement issue 1366: TOC window tree support for collapse/expand all. - Implement issue 759: Auto generate inline TOC HTML file. - Implement issue 32: Metadata custom "date" options. - Implement issue 33: Metadata options for creators and contributors. - Implement issue 1374: Split View is now Preview View with code inspector. - Implement issue 184: Superscript/subscript buttons. - Implement issue 443: Book View RTL languages support (right to left rtl tag). - Implement issue 504: Book View button for normal paragraph. - Implement issue 1265: Preference to manually set UI language. - Implement issue 1295: Metadata Editor support for translating descriptions. - Implement issue 77: Metadata support for multiple language elements. - Implement issue 1180: Spell Check button/menu to find next misspelled word. - Implement issue 1045: Better highlighting of misspelled words. - Implement issue 1301: Preferences for User and Additional Dictionary locations. - Implement issue 1058: Use ini format for settings on all platforms. - Implement issue 1376: Change organization name and location of settings to sigil-ebook. - Implement issue 1381: Switch to using Minizip for 1.1 for ZIP support. - Remove ZipArchive and Zipios++. - Implement issue 1380: Update zlib to 1.2.7. - Implement issue 1383: Remove the use of a precompiled header. - Implement issue 1377: Update PCRE to 8.31. - Make PCRE 8.31 with UTF-16 support the minimum required version. - Bundled PCRE uses PCRE's JIT for faster searching. - Modify Regex search code to use UTF-16 instead of UTF-8 for all searches. This brings search in line with the view components being able to display UTF-16 characters. - Implement issue 1378: Update Hunspell to 1.3.2. - Implement issue 1379: Update Boost to Boost 1.49.0. - Implement issue 1283: Spell check should have an ignore option. - Fix issue 1694: User dictionary shows duplicate entries and doesn't scroll to new entry when adding. - Fix issue 1693: Words in user dictionary could be lost if blank entries are saved. - Fix issue 1692: Code View highlighting incorrectly hides spelling issues if an & is used. - Fix issue 1674: Batch rename changes filename extension. - Fix issue 1663: Generate TOC gives heading ids for items not in the TOC. - Fix issue 1642: Replace sometimes leaves a \1 in the text. - Fix issue 1635: Replace can replace too much text if manual selection includes extra text. - Fix issue 1639: Ensure Spellcheck treats single quotes as word boundary appropriately. - Fix issue 1624: Do not close Sigil if an invalid HTML file was added. - Fix issue 1623: Do not leave Sigil in an invalid state if an invalid book was opened. - Fix issue 1605: Sigil cannot read epubs missing mimetypes as first file since container.xml might not be found. - Fix issue 1621: Change sigilNotInTOC to sigil_not_in_toc for consistency but still recognize legacy value in old files. - Fix issue 1477: Sigil may crash when loading ePubs containing empty (zero-sized) files. - Fix issue 1589: Clicking on TOC entry the first time does not scroll to a heading at the top of the page. - Fix issue 1582: Replace All should be single-threaded to avoid certain crashes. - Fix issue 1581: Caret position in Book View - Code View syncing is not always correct. - Fix issue 1580: Chapter split starts new files with suffix _002 instead of 001. - Fix issue 1579: Generate Headings in TOC should select next item after unchecking an item. - Fix issue 1563: Split Chapter break can create empty page. - Fix issue 1284: Image and Stylesheet paths not updated for duplicate references when importing. - Fix issue 1155: Filename removed from href in anchor tag when importing HTML. - Fix issue 1553: Rename of one html file should keep file selected, allow rename shortcut, link stylesheets. - Fix issue 1551: Generate TOC include column scrolls offscreen when headings are long. - Fix issue 1550: Table of Contents window is not emptied if all TOC entries deleted manually. - Fix issue 1549: Sigil should not modify source by converting shy/ndash/mdash to entities automatically. - Fix issue 1345: Adding accented words dictionary doesn't work. - Fix issue 1546: Find&Replace loses focus when changing tabs or going from Book to Code View. - Fix issue 425: Shift+ PgUp/PgDn does not work in text editor. - Fix issue 1390: Image is not updated until restart if deleted and re-added. - Fix issue 1413: Crashes when opening a particular epub. - Fix issue 1543: Tabs should only do updates when finished loading to improve performance. - Fix issue 1395: A type of hyphen, when pasted in code view, crashes Sigil. - Fix issue 1429: Changes to stylesheets are not seen in book and preview views. - Fix issue 1406: Typing spaces on a word highlighted by spelling crashes Sigil. - Fix issue 1524: Replace \s does not always match newlines. - Fix issue 1538: Sigil can save a corrupted epub file if zip fails. - Fix issue 1517: Delete selected file should not open another file unnecessarily. - Fix issue 1474: New lines added in every xhtml file after saving. - Fix issue 1486: Replace replaces even if text doesn't match if manually changed. - Fix issue 1483: Add Existing Files adds HTML files in reverse order. - Fix issue 1479: F&R auto-completer preventing searching for same word different case. - Fix issue 1424: Spell check does not allow paste next to misspelled word. - Fix issue 1422: Delete file should not update tab if opened file is not deleted. - Fix issue 1417: OPF meta tags not updated if Cover image renamed or deleted. - Fix issue 1408: Book Browser should not translate folder names. - Fix issue 1308: Allow renaming file extensions. - Fix issue 1363: Open and Save file directory inconsistent. - Fix issue 1130: Content.opf edits overwritten by save. - Fix issue 1354: Chapter Split breaks links in second half of document. - Fix issue 999: Split does not update file references in TOC. - Fix issue 1277: Meta-editor will not open. - Fix issue 1281: Semantics information retained for deleted files. - Fix issue 1338: F&R Replace All can crash using current file with large replaces. - Fix issue 1296: F&R Search All crashes if HTML file doesn't have focus. - Fix issue 1382: Settings not saving to disk. - Fix issue 1272: Tabs should always use the View state set by the View buttons. Sigil 0.5.3 2012.02.25 - Fix issue 1254: Bulk rename will stop if one name matches, context menu needs cleanup and warnings. - Fix issue 1268: Find/Replace all files does not search in book order, and other issues. - Fix issue 1266: Store user dictionary as UTF-8. - Ensure the checkmarks in add semantic are set correctly when selecting multiple files. - Fix issue 1030: Don't close if canceling out of a failed save. - Fix issue 1258: Find/Replace step by step in All HTML files is broken. Sigil 0.5.2 2012.02.09 - Fix issue 1253: Replace All in All HTML files adds extra blank lines in style section. - Fix issue 1251: Merge does not work if you previously used split chapter. - Fix issue 1249: Replace All in All HTML Files leaves cursor at the bottom. - Fix issue 1247: Cannot rename file extension in book browser and rename selected should default to first extension name. - Fix issue 1238: Deleting a file does not go to the next closest entry in book browser. - Fix issue 1236: Replace All in Current file does not center cursor. - Fix issue 1234: Switching from Code View to Split View and SplitCV to CV does not vertically center the cursor. - Fix issue 1237: Rename does not keep current selection in book browser. - Fix issue 1242: Metadata::FreeFormMetadata missing assignment line 360. - Fix issue 1235: Deleting one file does not give a warning dialog. - Fix issue 1129: Crash when importing existing image. Sigil 0.5.1 2012.02.05 - Issue 1225: * Add searching selected files. * Add search wrapping. * Replace in BV automatically goes to CV. * Fixed bug where in CV if you do a replace of a word and then replace all when there are the same words on the page, the page view wouldn't be refreshed. * Various fixes. - Add English translation file used for plural strings. - Implement issue 986: Automatically renumber playorder in TOC NCX. - Implement issue 1224: F&R modifications to update layout and add Regex Multiline. - Fix issue 1214: Dictionary files do not include hypen files or GB files. - Fix issue 1213: Find and Replace does not save file when F&R is already open and searching all HTML files. - Remove the ability to use F&R to replace text in BV as it is unfixable in its current state. - Fix issue 1215: Book View line/column incorrect in status bar. - Fix issue 1216: Re-opening a document already in a tab resets the cursor position back to the top. - Fix issue 1218: F&R cleanup. - Fix issue 1212: Remove opf namespace rewriting when opening a file because it ended up being more trouble than it was wroth. - Fix issue 1188: New Sigil Regex engine crashes when pressing "replace all", works fine on pushing "replace" over and over and over again. - Implement issue 269: Select more than one item in the Book Browser Column. - Implement issues 792: Add Shortcuts for next/previous HTML file with regard to reading order, and sync selection in book browser to open tab. - Implement issue 1135: New blank section must be automatically selected on book browser. - Implement issue 1148: Allow user to change the order of split view so book view or code view is first. - Implement issue 1168: Add ability to sort HTML files alphanumerically. - Implement issue 1174: Add new blank html section should insert section after selected file. - Implement issue 1181: Merge Previous when previous file is open in current tab requires refresh to see merged data. Sigil 0.5.0 2012.01.21 - Implement issue 533 and 1079: allow user to select which level(s) of to include. - Fix issue 788: Error saving when the folder the file was in was renamed outside Sigil. - Fix issue 998: Don't select file extension on rename in book browser. - Fix issue 1111: Failure to rename to same name with case change. - Implement issue 205: Drag and drop for images to book and code views. - Fix issue 1019: issues with opf-namespace declaration. - Inline spell check with right click replace in Code View. - Fix issue 1064: Issues with editing epubs with differing html extensions. Take mimetype into account when opening the file to help determine how to deal with the file. - Fix issue 1055, 1038, 1006: Focus switching causes unwanted cursor jumping in split view. Don't auto sync cursor position between views. - Implement issue 375: Add image selection dialog for inserting existing images into book and code views. - Add menu items for setting heading, adding new items, show / hide toolbars. - Organize menu. - Fix issue 803: Print prints immediately, no dialog box. - Implement 245: Unify zoom levels (book, text, image) and store the levels. - i18n capability. Build and load translation files. - Add keyboard shortcut manager so user can change the keyboard shortcuts. Fixes 966. - Add preference dialog. Closes 206, 718. - Refactor Find & Replace into a widget that appears below the editor. Closes issues: 961, 579. - Windows Installer: Add Sigil as a handler for EPUB and HTML files so that jump lists will work and it will always show up on the 'Open With...' menu. - Fix issue 1033, 1034: Implement scroll to fragment for Code View and fix scrolling for book view. - Fix issue 1032: Remove '=' from the list of valid characters for ids. - Fix issue 1001: Valid IDs are now formed by replacing invalid characters with underscores. Colon removed from the list of valid characters. - Fix issue 1014: Sigil was erroneously assuming that fragment ids would be unique across the entire book, whereas they're only required to be unique within a particular xhtml document. New code implemented to cover those situations where this assumption is wrong. - Fix issue 1015: Fix issues with cursor positioning in Split View. - Fix issue 1022: Added support for Adobe's page-map.xml pagination extension. (Must use this exact filename). - Implement issue 183: Use a PCRE regular expression engine instead of QRegExp. Also fixes issue 498: regex '^' (start of line) broken. - Implement issue 168: Allow selection of multiple Meta Editor properties. - Allow for deleting multiple metadata items. - Implement issue 368: Pressing enter key on item in book browser should open item. - Fix issue 1005: Regression from change to ensure metdata element has dc namespace. Sigil v0.4.2 2011.09.02 - Fix issue 993: Split then selection jumps back to top instead of selection point. - Fix issue 988: fail to scroll properly after chapter split. - Allow users to disable Well-Formed checks or if they should be auto fixed as they were in 0.3.x. - Don't read use tidy setting from disk each time it's checked. Store the setting and save / load it upon edit and startup. This prevents Sigil from using the wrong value when multiple instances are open. - Use Pretty Print when auto fixing well formed errors. - Added a safety check to LoadTabContent() to ensure that focus changes don't cause a loss of non-well-formed data that has been entered but not saved. - Fix an issue where the opf namespace is being written in individual elements in the metadata section in the OPF. We're now going to clean and write the dc and opf namespaces directly to the metadata element when loading an OPF to ensure they're present and correct. - Fix for entities not being displayed when loading a file where they are saved as unicode in the file itself. - Fix for typo in code to preserve entities. - Fix for path encoding issue on reconstructing the opf. Sigil v0.4.1 2011.08.26 - Fix issue 615: implement undo for Find/Replace in Book View. - Update Toc section of manual for 0.4 Toc panel. - Implement issue 80: Select lines when clicking on line number in line number area in code view. - Fix issue 770: Incorrect file permissions for some files in archive create on OS X. - Fix issue 890: Line number mismatch between Code View and Validation Results when style tag in head section contains CDATA. CDATA was being stripped from the Code View. - Fix issue 942: Work around for the Nook not being able to deal with cover meta element having attributes in alphabetic order. - Fix issue 976: Creation of new Code View tab fails to show all content if the web page's asynchronous loading is delayed. - Fix an issue where the line numbers in code view were not aligned to the line they represent. - Fix issue 871: Update heading combo when putting cursor on block with heading style. - Fix the formation of an empty paragraph at the top of the new file on doing a chapter split in Book View. - Fix issue 967: toc.ncx file keeps erasing manual input. - Fix issues 657, 661, 694 and 867: The Heading Selector in Book View will now function as expected and find the correct block-level tag to change rather than attempting to change inline tags. It will also retain the attributes (including class) of the old tag. - Fix the entity display for shy, mdash and ndash. - Set modified state on book when page order is changed. - Fixed the cursor issues on moving from Book to Code View and vice-versa. The new view should now always gain keyboard focus and show the cursor properly. - Insert the xml tag explicitly so that Tidy doesn't insert one without encoding and standalone attributes. - Fix issue #877: Invalid xml error prevents Find/Replace window from opening. - Fix issue where switching between code and book view causes the code view to load old data from book view. - Implement issue 364: Go to line #. - Implement issue 742: Shortcut/menu action to close all tabs except the current one. - Fix issue 959: Original creator's name is mangled in About dialog. - Fix for chapter splitting issue involving filenames with spaces. - Makes sure the cursor is properly displayed on entering Code View. Sigil v0.4.0 2011.08.15 - Fix issue 650: Convert SVG prefixes into a form that Tidy will tolerate. - Fix issue 952: Allow compatible extension changes. - Fix issue 835: File, Close shortcut does not work on OS X due to shortcut conflict. - Fix issue 793: Don't delete com.apple.ibooks.display-options.xml. - Fix issue 319: Adding chapter break in code view at end of current chapter creates new chapter before the current one. - Fix issue 947: Normalise headings before automatically generating the TOC. - Build system changes to accomidate the Windows SDK. - Remove empty styles on body tags when cleaning webkit junk. - Fix issue 549 : Split on SGF Chapter Markers puts new files (sections) at end of file list. - Fix issue 869: Right-click in Code View with error in code shows error dialog. - Fix issue 919 and issue 316: Replace potentially problematic characters with named or numerical entities. - Change About to include an authors section. - Fixed and issue where chapter splitting loses some chapters, places others in wrong order (issue 836). - Fixed an issue where language was not being properly detected (issue 923). - Fixed an issue where font mangling caused file duplication (issue 932). - Fixed an issue where extra blank lines were left in the STYLE section (issue 937). - Fixed an issue where FlightCrew was reporting erroneous Resource is reachable but not present in OPF errors (issue 813). - Fixed string format compile warnings (issue 892). - Fixed GCC 4.6 compile failure (issue 864). - Changed Save As shortcut key to Ctrl+Shift+S (issue 838). - Fixed an issue where the shortcut keys were not working properly on OS X (issue 838). - Fixed an issue where metadata changed in metadata editor unsaved if Sigil closed right after (issue 930). - OS X minimum version bumped to 10.6. - on Linux machines, the installer now places a shortcut to Sigil in the Applications->Office menu instead of in a special "Sigil" folder under the Gnome root menu (issue #162) Sigil v0.4.0 RC1 2011.04.22. - fixed an issue with splitting on SGF chapter markers creating the new HTML files in the wrong order (issue #828) - fixed a rare crash/memory corruption issue with automatic OPF updates - made the CSS resource path updates faster and more robust - updated FlightCrew so that CSS resource use is now far more robustly detected (issue #822) - fixed a rare hang when opening the Meta Editor on Win XP machines - a more accurate error message is now displayed for problems with file loading/saving (issue #772) - fixed an issue with incorrect font filepath updates in the CSS (issue #736) - fixed an issue with paths in the OPF not being URL-encoded (issue #823) Sigil v0.4.0 ß3 2011.03.24 - added a workaround for loading broken epub files that use the incorrect mimetype for the NCX (issue #815) - fixed a rare issue with loading epub files with OPF's that had the XML version set to 1.1, but also had other attributes in the XML declaration (issue #812) - fixed an issue with entries appearing at random in the TOC after a split on SGF markers is followed up with "Generate TOC from headings" request (issue #804) - fixed an issue with files not appearing in the Book Browser after a split on SGF markers (issue #816) - fixed a regression that caused the auto-cover-setting heuristics to unset covers when they are already set (issue #806) - opening an HTML file now automatically builds a TOC from the headings - fixed a regression that caused the Add Semantics menu to stop working (issue #807) Sigil v0.4.0 ß2 2011.03.21. - fixed an issue with the ID of the manifest item of a resource not being updated when the resource was renamed - fixed an issue with chapter splits being created in the wrong reading order (issue #797) - fixed an issue with some HTML files disappearing after a save/load cycle if chapter splitting was performed before the save - fixed an issue with renaming a file and then splitting it causing duplicate ID's in the OPF manifest (issue #800) - fixed a validation issue with the Meta Editor not adding the correct namespace prefix to some Dublin Core metadata element attributes Sigil v0.4.0 ß1 2011.03.20 - fixed an issue with CSS @import rules in the '@import "something.css"' format not being recognized and thus not updated on import - removed the "CustomID" basic metadata entry from the Meta Editor; those wishing to use custom ID's can now add them directly to the OPF - Sigil now preserves custom unique identifiers in the OPF (issue #552) - removed support for the Sigil-proprietary SGF format - the user can now edit the OPF file by hand (issue #281) - the user can now edit the NCX file by hand (issue #282) - the OPF file is now preserved on import (issue #586) - the NCX file is now preserved on import (issue #283) - the Table Of Contents editor has been replaced with a new Table of Contents sidebar; clicking on an item in this sidebar takes the user to the target location, enabling TOC navigation (issue #100) - a dialog now informs the user if his XHTML, NCX or OPF documents are not well-formed XML (with error location and description), thus allowing him to fix the potential problems by hand instead of leaving them to Tidy to fix (issue #519) - fixed a rare issue with no tab opened by default when loading epubs - made the sigil.sh startup script more robust (courtesy of Craig Sanders) (issue #737) Sigil v0.3.4 2011.01.12. - fixed a regression ("Not a folder" error) with opening certain epub files on Mac and Linux systems (issue #731) Sigil v0.3.3 2011.01.06. - added a small "Donate" button to the toolbar and a related entry in the Help menu - added a .desktop file for the make install target (courtesy of Richard Gibert) - this time *really* worked around a Tidy bug that added blank lines to the start of
 
    and "
    ""
    "
" "" ""; SelectFiles::SelectFiles(QString title, QList media_resources, QString default_selected_image, QWidget *parent) : QDialog(parent), m_MediaResources(media_resources), m_SelectFilesModel(new QStandardItemModel), m_PreviewReady(false), m_PreviewLoaded(false), m_DefaultSelectedImage(default_selected_image), m_ThumbnailSize(THUMBNAIL_SIZE), m_IsInsertFromDisk(false), m_WebView(new QWebView(this)) { ui.setupUi(this); setWindowTitle(title); m_WebView->setContextMenuPolicy(Qt::NoContextMenu); m_WebView->setFocusPolicy(Qt::NoFocus); m_WebView->setAcceptDrops(false); m_WebView->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); m_WebView->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); ui.avLayout->addWidget(m_WebView); ReadSettings(); m_AllItem = new QListWidgetItem(tr("All"), ui.FileTypes); m_ImageItem = new QListWidgetItem(tr("Images"), ui.FileTypes); m_VideoItem = new QListWidgetItem(tr("Video"), ui.FileTypes); m_AudioItem = new QListWidgetItem(tr("Audio"), ui.FileTypes); ui.FileTypes->setCurrentItem(m_AllItem); SetImages(); connectSignalsSlots(); SetPreviewImage(); } SelectFiles::~SelectFiles() { WriteSettings(); } bool SelectFiles::IsInsertFromDisk() { return m_IsInsertFromDisk; } QStringList SelectFiles::SelectedImages() { QList selected_images; // Shift-click order is top to bottom regardless of starting position // Ctrl-click order is first clicked to last clicked (included shift-clicks stay ordered as is) if (ui.imageTree->selectionModel()->hasSelection()) { QModelIndexList selected_indexes = ui.imageTree->selectionModel()->selectedRows(0); foreach(QModelIndex index, selected_indexes) { selected_images.append(m_SelectFilesModel->itemFromIndex(index)->text()); } } return selected_images; } void SelectFiles::SetImages() { ui.Details->clear(); m_WebView->setHtml("", QUrl()); m_SelectFilesModel->clear(); QStringList header; header.append(tr("Files In the Book")); if (m_ThumbnailSize) { header.append(tr("Thumbnails")); } m_SelectFilesModel->setHorizontalHeaderLabels(header); ui.imageTree->setSelectionBehavior(QAbstractItemView::SelectRows); ui.imageTree->setModel(m_SelectFilesModel); QSize icon_size(m_ThumbnailSize, m_ThumbnailSize); ui.imageTree->setIconSize(icon_size); ui.imageTree->setSortingEnabled(true); int row = 0; foreach(Resource *resource, m_MediaResources) { // Don't show resources not matching the selected type Resource::ResourceType type = resource->Type(); if ((m_ImageItem->isSelected() && type != Resource::ImageResourceType && type != Resource::SVGResourceType) || (m_VideoItem->isSelected() && type != Resource::VideoResourceType) || (m_AudioItem->isSelected() && type != Resource::AudioResourceType)) { continue; } QString filepath = "../" + resource->GetRelativePathToOEBPS(); QList rowItems; QStandardItem *name_item = new QStandardItem(); name_item->setText(resource->Filename()); name_item->setToolTip(filepath); name_item->setData(static_cast(type), Qt::UserRole); name_item->setData(resource->GetFullPath(), Qt::UserRole + 1); name_item->setEditable(false); rowItems << name_item; // Do not show thumbnail if file is not an image if ((type == Resource::ImageResourceType || type == Resource::SVGResourceType) && m_ThumbnailSize) { QPixmap pixmap(resource->GetFullPath()); if (pixmap.height() > m_ThumbnailSize || pixmap.width() > m_ThumbnailSize) { pixmap = pixmap.scaled(QSize(m_ThumbnailSize, m_ThumbnailSize), Qt::KeepAspectRatio); } QStandardItem *icon_item = new QStandardItem(); icon_item->setIcon(QIcon(pixmap)); icon_item->setEditable(false); rowItems << icon_item; } m_SelectFilesModel->appendRow(rowItems); row++; } ui.imageTree->header()->setStretchLastSection(true); for (int i = 0; i < ui.imageTree->header()->count(); i++) { ui.imageTree->resizeColumnToContents(i); } // Sort by filename by default. ui.imageTree->header()->setSortIndicator(0, Qt::AscendingOrder); FilterEditTextChangedSlot(ui.Filter->text()); SelectDefaultImage(); } void SelectFiles::SelectDefaultImage() { QStandardItem *root_item = m_SelectFilesModel->invisibleRootItem(); QModelIndex parent_index; // Set the default to the first image if no default is set if (m_DefaultSelectedImage.isEmpty() && root_item->rowCount() > 0) { m_DefaultSelectedImage = m_SelectFilesModel->itemFromIndex(m_SelectFilesModel->index(0, 0, parent_index))->text(); } for (int row = 0; row < root_item->rowCount(); row++) { if (root_item->child(row, COL_NAME)->text() == m_DefaultSelectedImage) { ui.imageTree->selectionModel()->select(m_SelectFilesModel->index(row, 0, parent_index), QItemSelectionModel::Select | QItemSelectionModel::Rows); ui.imageTree->setFocus(); ui.imageTree->setCurrentIndex(root_item->child(row, 0)->index()); break; } } } void SelectFiles::IncreaseThumbnailSize() { m_ThumbnailSize += THUMBNAIL_SIZE_INCREMENT; ui.ThumbnailDecrease->setEnabled(true); m_DefaultSelectedImage = GetLastSelectedImageName(); SetImages(); } void SelectFiles::DecreaseThumbnailSize() { m_ThumbnailSize -= THUMBNAIL_SIZE_INCREMENT; if (m_ThumbnailSize <= 0) { m_ThumbnailSize = 0; ui.ThumbnailDecrease->setEnabled(false); } m_DefaultSelectedImage = GetLastSelectedImageName(); SetImages(); } void SelectFiles::ReloadPreview() { // Make sure we don't load when initial painting is resizing if (m_PreviewReady) { SetPreviewImage(); } } void SelectFiles::SelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { ReloadPreview(); } void SelectFiles::SplitterMoved(int pos, int index) { ReloadPreview(); } void SelectFiles::resizeEvent(QResizeEvent *event) { ReloadPreview(); } void SelectFiles::SetPreviewImage() { m_PreviewReady = false; QPixmap(pixmap); QString details = ""; QStandardItem *item = GetLastSelectedImageItem(); ui.Details->clear(); m_WebView->setHtml("", QUrl()); if (!item || item->text().isEmpty()) { m_PreviewReady = true; return; } Resource::ResourceType resource_type = static_cast(item->data(Qt::UserRole).toInt()); // Basic file details QString path = item->data(Qt::UserRole + 1).toString(); const QFileInfo fileInfo = QFileInfo(path); const double ffsize = fileInfo.size() / 1024.0; const QString fsize = QLocale().toString(ffsize, 'f', 2); const double ffmbsize = ffsize / 1024.0; const QString fmbsize = QLocale().toString(ffmbsize, 'f', 2); bool loading_resources = false; // Images if (resource_type == Resource::ImageResourceType || resource_type == Resource::SVGResourceType) { // Define detailed information label const QImage img(path); const QUrl imgUrl = QUrl::fromLocalFile(path); QString colors_shades = img.isGrayscale() ? tr("shades") : tr("colors"); QString grayscale_color = img.isGrayscale() ? tr("Grayscale") : tr("Color"); QString colorsInfo = ""; if (img.depth() == 32) { colorsInfo = QString(" %1bpp").arg(img.bitPlaneCount()); } else if (img.depth() > 0) { colorsInfo = QString(" %1bpp (%2 %3)").arg(img.bitPlaneCount()).arg(img.colorCount()).arg(colors_shades); } details = QString("%2x%3px | %4 KB | %5%6").arg(img.width()).arg(img.height()) .arg(fsize).arg(grayscale_color).arg(colorsInfo); MainWindow::clearMemoryCaches(); const QUrl resourceUrl = QUrl::fromLocalFile(path); QString html = IMAGE_HTML_BASE_PREVIEW.arg(resourceUrl.toString()); m_PreviewLoaded = false; m_WebView->setHtml(html, resourceUrl); loading_resources = true; } if (resource_type == Resource::VideoResourceType) { QString html; const QUrl resourceUrl = QUrl::fromLocalFile(path); MainWindow::clearMemoryCaches(); html = VIDEO_HTML_BASE.arg(resourceUrl.toString()); m_PreviewLoaded = false; m_WebView->setHtml(html, resourceUrl); loading_resources = true; details = QString("%1 MB").arg(fmbsize); } else if (resource_type == Resource::AudioResourceType) { QString html; const QUrl resourceUrl = QUrl::fromLocalFile(path); MainWindow::clearMemoryCaches(); html = AUDIO_HTML_BASE.arg(resourceUrl.toString()); m_PreviewLoaded = false; m_WebView->setHtml(html, resourceUrl); loading_resources = true; details = QString("%1 MB").arg(fmbsize); } // Technically, we need to wait until Preview is actually loaded // because setHtml loads external resources asynchronously if (loading_resources) { while(!IsPreviewLoaded()) { qApp->processEvents(); } } ui.Details->setText(details); m_PreviewReady = true; } void SelectFiles::PreviewLoadComplete(bool okay) { if (!okay) { m_WebView->stop(); } m_PreviewLoaded = true; } bool SelectFiles::IsPreviewLoaded() { return m_PreviewLoaded; } void SelectFiles::FilterEditTextChangedSlot(const QString &text) { const QString lowercaseText = text.toLower(); QStandardItem *root_item = m_SelectFilesModel->invisibleRootItem(); QModelIndex parent_index; // Hide rows that don't contain the filter text int first_visible_row = -1; for (int row = 0; row < root_item->rowCount(); row++) { if (text.isEmpty() || root_item->child(row, COL_NAME)->text().toLower().contains(lowercaseText)) { ui.imageTree->setRowHidden(row, parent_index, false); if (first_visible_row == -1) { first_visible_row = row; } } else { ui.imageTree->setRowHidden(row, parent_index, true); } } if (!text.isEmpty() && first_visible_row != -1) { // Select the first non-hidden row ui.imageTree->setCurrentIndex(root_item->child(first_visible_row, 0)->index()); } else { // Clear current and selection, which clears preview image ui.imageTree->setCurrentIndex(QModelIndex()); } } QStandardItem *SelectFiles::GetLastSelectedImageItem() { QStandardItem *item = NULL; if (ui.imageTree->selectionModel()->hasSelection()) { QModelIndexList selected_indexes = ui.imageTree->selectionModel()->selectedRows(0); if (!selected_indexes.isEmpty()) { item = m_SelectFilesModel->itemFromIndex(selected_indexes.last()); } } return item; } QString SelectFiles::GetLastSelectedImageName() { QString selected_entry = ""; QStandardItem *item = GetLastSelectedImageItem(); if (item) { selected_entry = item->text(); } return selected_entry; } void SelectFiles::InsertFromDisk() { m_IsInsertFromDisk = true; ui.imageTree->selectionModel()->clear(); accept(); } void SelectFiles::ReadSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status QByteArray geometry = settings.value("geometry").toByteArray(); if (!geometry.isNull()) { restoreGeometry(geometry); } // The position of the splitter handle QByteArray splitter_position = settings.value("splitter").toByteArray(); if (!splitter_position.isNull()) { ui.splitter->restoreState(splitter_position); } // The thumbnail size m_ThumbnailSize = settings.value("thumbnail_size").toInt(); if (m_ThumbnailSize <= 0) { ui.ThumbnailDecrease->setEnabled(false); } settings.endGroup(); } void SelectFiles::WriteSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status settings.setValue("geometry", saveGeometry()); // The position of the splitter handle settings.setValue("splitter", ui.splitter->saveState()); // The thumbnail size settings.setValue("thumbnail_size", m_ThumbnailSize); settings.endGroup(); } void SelectFiles::connectSignalsSlots() { QItemSelectionModel *selectionModel = ui.imageTree->selectionModel(); connect(selectionModel, SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(SelectionChanged(const QItemSelection &, const QItemSelection &))); connect(ui.imageTree, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(accept())); connect(ui.Filter, SIGNAL(textChanged(QString)), this, SLOT(FilterEditTextChangedSlot(QString))); connect(ui.ThumbnailIncrease, SIGNAL(clicked()), this, SLOT(IncreaseThumbnailSize())); connect(ui.ThumbnailDecrease, SIGNAL(clicked()), this, SLOT(DecreaseThumbnailSize())); connect(ui.InsertFromDisk, SIGNAL(clicked()), this, SLOT(InsertFromDisk())); connect(ui.FileTypes, SIGNAL(itemSelectionChanged()), this, SLOT(SetImages())); connect(m_WebView, SIGNAL(loadFinished(bool)), this, SLOT(PreviewLoadComplete(bool))); connect(ui.splitter, SIGNAL(splitterMoved(int, int)), this, SLOT(SplitterMoved(int, int))); } Sigil-0.9.9/src/Dialogs/SelectFiles.h000066400000000000000000000056111321676412500173360ustar00rootroot00000000000000/************************************************************************ ** ** ** Copyright (C) 2012,2013 John Schember ** Copyright (C) 2012,2013 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SELECTFILES_H #define SELECTFILES_H #include #include #include "ResourceObjects/Resource.h" #include "ui_SelectFiles.h" class QString; class QStringList; class QWebView; class SelectFiles : public QDialog { Q_OBJECT public: SelectFiles(QString title, QList image_resources, QString default_selected_image, QWidget *parent = 0); ~SelectFiles(); /** * The image(s) selected in the dialog. * * @return The filename of the selected image. */ QStringList SelectedImages(); bool IsInsertFromDisk(); public slots: /** * Set the list of image resources to display. */ void SetImages(); protected: void resizeEvent(QResizeEvent *event); private slots: /** * Displays a given image in the list in the preview area. */ void PreviewLoadComplete(bool); void IncreaseThumbnailSize(); void DecreaseThumbnailSize(); void ReloadPreview(); void SelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void SelectDefaultImage(); /** * Filters the list of displayed images */ void FilterEditTextChangedSlot(const QString &text); void WriteSettings(); void InsertFromDisk(); void SplitterMoved(int pos, int index); private: bool IsPreviewLoaded(); void ReadSettings(); void connectSignalsSlots(); void SetPreviewImage(); QList m_MediaResources; QStandardItemModel *m_SelectFilesModel; QStandardItem *GetLastSelectedImageItem(); QString GetLastSelectedImageName(); bool m_PreviewReady; bool m_PreviewLoaded; QString m_DefaultSelectedImage; int m_ThumbnailSize; bool m_IsInsertFromDisk; QListWidgetItem *m_AllItem; QListWidgetItem *m_ImageItem; QListWidgetItem *m_VideoItem; QListWidgetItem *m_AudioItem; QWebView *m_WebView; Ui::SelectFiles ui; }; #endif // SELECTFILES_H Sigil-0.9.9/src/Dialogs/SelectHyperlink.cpp000066400000000000000000000204101321676412500205660ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Dialogs/SelectHyperlink.h" #include "ResourceObjects/HTMLResource.h" #include "Misc/SettingsStore.h" #include "sigil_constants.h" static QString SETTINGS_GROUP = "select_hyperlink"; SelectHyperlink::SelectHyperlink(QString default_href, HTMLResource *html_resource, QList resources, QSharedPointer book, QWidget *parent) : QDialog(parent), m_CurrentHTMLResource(html_resource), m_DefaultTarget(default_href), m_SavedTarget(QString()), m_Resources(resources), m_Book(book), m_SelectHyperlinkModel(new QStandardItemModel) { ui.setupUi(this); connectSignalsSlots(); ReadSettings(); SetList(); // Set default href name ui.href->setText(m_DefaultTarget); if (!m_DefaultTarget.isEmpty()) { SelectText(m_DefaultTarget); } else { SelectText(m_SavedTarget); } // Default entry on the target url not the filter ui.href->setFocus(); } void SelectHyperlink::SetList() { m_SelectHyperlinkModel->clear(); QStringList header; header.append(tr("Targets in the Book")); m_SelectHyperlinkModel->setHorizontalHeaderLabels(header); ui.list->setSelectionBehavior(QAbstractItemView::SelectRows); ui.list->setModel(m_SelectHyperlinkModel); // Get the complete list of valid targets m_IDNames = m_Book->GetIdsInHTMLFiles(); // Display in-file targets first, then in order AddEntry(m_CurrentHTMLResource); foreach(Resource * resource, m_Resources) { if (resource != m_CurrentHTMLResource) { AddEntry(resource); } } } void SelectHyperlink::AddEntry(Resource *resource) { if (!resource) { return; } QString filename = resource->Filename(); QStringList ids = QStringList() << "" << m_IDNames[filename]; foreach(QString id, ids) { // Do not allow linking to index entries because they can be regenerated // and because they can take up a lot of room. if (id.startsWith(SIGIL_INDEX_ID_PREFIX)) { continue; } QString target = filename; QString filepath; // Only relative paths if inserting hyperlink not editing TOC if (m_CurrentHTMLResource) { filepath = "../"; } filepath += resource->GetRelativePathToOEBPS(); if (!id.isEmpty()) { QString fragment = "#" % id; filepath.append(fragment); // Show the short version if this is the same file if (m_CurrentHTMLResource && filename == m_CurrentHTMLResource->Filename()) { target = fragment; } else { target.append(fragment); } } QList rowItems; QStandardItem *target_item = new QStandardItem(); target_item->setText(target); target_item->setData(filepath); rowItems << target_item; m_SelectHyperlinkModel->appendRow(rowItems); rowItems[0]->setEditable(false); } } QString SelectHyperlink::GetSelectedText() { QString text; if (ui.list->selectionModel()->hasSelection()) { QModelIndexList selected_indexes = ui.list->selectionModel()->selectedRows(0); if (!selected_indexes.isEmpty()) { QStandardItem *item = m_SelectHyperlinkModel->itemFromIndex(selected_indexes.last()); if (item) { text = item->text(); } } } return text; } void SelectHyperlink::SelectText(QString &text) { if (!text.isEmpty()) { QModelIndex parent_index; QStandardItem *root_item = m_SelectHyperlinkModel->invisibleRootItem(); // Convert search text to filename#fragment QString target = text; if (target.startsWith("#") && m_CurrentHTMLResource) { target = m_CurrentHTMLResource->Filename() + text; } if (target.contains("/")) { target = target.right(target.length() - target.lastIndexOf("/") - 1); } for (int row = 0; row < root_item->rowCount(); row++) { QStandardItem *child = root_item->child(row, 0); // Convert selection text to filename#fragment QString selection = child->data().toString(); if (selection.contains("/")) { selection = selection.right(selection.length() - selection.lastIndexOf("/") - 1); } if (target == selection) { ui.list->selectionModel()->select(m_SelectHyperlinkModel->index(row, 0, parent_index), QItemSelectionModel::Select | QItemSelectionModel::Rows); ui.list->setFocus(); ui.list->setCurrentIndex(child->index()); } } } } void SelectHyperlink::FilterEditTextChangedSlot(const QString &text) { const QString lowercaseText = text.toLower(); QStandardItem *root_item = m_SelectHyperlinkModel->invisibleRootItem(); QModelIndex parent_index; // Hide rows that don't contain the filter text int first_visible_row = -1; for (int row = 0; row < root_item->rowCount(); row++) { if (text.isEmpty() || root_item->child(row, 0)->text().toLower().contains(lowercaseText)) { ui.list->setRowHidden(row, parent_index, false); if (first_visible_row == -1) { first_visible_row = row; } } else { ui.list->setRowHidden(row, parent_index, true); } } if (!text.isEmpty() && first_visible_row != -1) { // Select the first non-hidden row ui.list->setCurrentIndex(root_item->child(first_visible_row, 0)->index()); } else { // Clear current and selection, which clears preview image ui.list->setCurrentIndex(QModelIndex()); } } QString SelectHyperlink::GetTarget() { QString target; target = ui.href->text(); return target; } void SelectHyperlink::DoubleClicked(const QModelIndex &index) { Clicked(index); accept(); } void SelectHyperlink::Clicked(const QModelIndex &index) { QStandardItem *item = m_SelectHyperlinkModel->itemFromIndex(index); if (item->text().startsWith("#")) { ui.href->setText(item->text()); } else { ui.href->setText(item->data().toString()); } } void SelectHyperlink::ReadSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status QByteArray geometry = settings.value("geometry").toByteArray(); if (!geometry.isNull()) { restoreGeometry(geometry); } m_SavedTarget = settings.value("lastselectedentry").toString(); settings.endGroup(); } void SelectHyperlink::WriteSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status settings.setValue("geometry", saveGeometry()); settings.setValue("lastselectedentry", GetSelectedText()); settings.endGroup(); } void SelectHyperlink::connectSignalsSlots() { connect(this, SIGNAL(accepted()), this, SLOT(WriteSettings())); connect(ui.filter, SIGNAL(textChanged(QString)), this, SLOT(FilterEditTextChangedSlot(QString))); connect(ui.list, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(DoubleClicked(const QModelIndex &))); connect(ui.list, SIGNAL(clicked(const QModelIndex &)), this, SLOT(Clicked(const QModelIndex &))); } Sigil-0.9.9/src/Dialogs/SelectHyperlink.h000066400000000000000000000041471321676412500202440ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SELECTHYPERLINK_H #define SELECTHYPERLINK_H #include #include #include #include "ResourceObjects/Resource.h" #include "BookManipulation/Book.h" #include "ui_SelectHyperlink.h" class SelectHyperlink: public QDialog { Q_OBJECT public: SelectHyperlink(QString href, HTMLResource *html_resource, QList resources, QSharedPointer book, QWidget *parent = 0); void SetList(); QString GetTarget(); private slots: void WriteSettings(); void FilterEditTextChangedSlot(const QString &text); void DoubleClicked(const QModelIndex &); void Clicked(const QModelIndex &); private: void SetSelectedText(); void ReadSettings(); void connectSignalsSlots(); void AddEntry(Resource *resource); QString GetSelectedText(); void SelectText(QString &text); HTMLResource *m_CurrentHTMLResource; QString m_DefaultTarget; QString m_SavedTarget; QHash m_IDNames; QList m_Resources; QSharedPointer m_Book; QStandardItemModel *m_SelectHyperlinkModel; Ui::SelectHyperlink ui; }; #endif // SELECTHYPERLINK_H Sigil-0.9.9/src/Dialogs/SelectId.cpp000066400000000000000000000050371321676412500171650ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include "Dialogs/SelectId.h" #include "ResourceObjects/HTMLResource.h" #include "Misc/SettingsStore.h" static QString SETTINGS_GROUP = "select_id"; SelectId::SelectId(QString id, HTMLResource *html_resource, QSharedPointer book, QWidget *parent) : QDialog(parent), m_SelectedText(id), m_HTMLResource(html_resource), m_Book(book) { ui.setupUi(this); QCompleter *qc = ui.id->completer(); qc->setCaseSensitivity(Qt::CaseSensitive); connectSignalsSlots(); ReadSettings(); SetList(); } void SelectId::SetList() { QStringList ids = m_Book->GetIdsInHTMLFile(m_HTMLResource); foreach(QString id, ids) { ui.id->addItem(id); } // Set default id name ui.id->setEditText(m_SelectedText); } QString SelectId::GetId() { return m_SelectedText; } void SelectId::SetSelectedText() { m_SelectedText = ui.id->currentText(); } void SelectId::ReadSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status QByteArray geometry = settings.value("geometry").toByteArray(); if (!geometry.isNull()) { restoreGeometry(geometry); } settings.endGroup(); } void SelectId::WriteSettings() { SetSelectedText(); SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status settings.setValue("geometry", saveGeometry()); settings.endGroup(); } void SelectId::connectSignalsSlots() { connect(this, SIGNAL(accepted()), this, SLOT(WriteSettings())); } Sigil-0.9.9/src/Dialogs/SelectId.h000066400000000000000000000030671321676412500166330ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SELECTID_H #define SELECTID_H #include #include "ResourceObjects/Resource.h" #include "BookManipulation/Book.h" #include "ui_SelectId.h" class SelectId: public QDialog { Q_OBJECT public: SelectId(QString id, HTMLResource *html_resource, QSharedPointer book, QWidget *parent = 0); void SetList(); QString GetId(); private slots: void WriteSettings(); private: void SetSelectedText(); void ReadSettings(); void connectSignalsSlots(); QString m_SelectedText; HTMLResource *m_HTMLResource; QSharedPointer m_Book; Ui::SelectId ui; }; #endif // SELECTID_H Sigil-0.9.9/src/Dialogs/SelectIndexTitle.cpp000066400000000000000000000042541321676412500207020ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Dialogs/SelectIndexTitle.h" #include "Misc/SettingsStore.h" static QString SETTINGS_GROUP = "select_index_title"; SelectIndexTitle::SelectIndexTitle(QString title, QWidget *parent) : QDialog(parent), m_SelectedTitle(title) { ui.setupUi(this); connectSignalsSlots(); ReadSettings(); // Set default title ui.title->setText(m_SelectedTitle); } QString SelectIndexTitle::GetTitle() { return m_SelectedTitle; } void SelectIndexTitle::SetSelectedTitle() { m_SelectedTitle = ui.title->text(); } void SelectIndexTitle::ReadSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status QByteArray geometry = settings.value("geometry").toByteArray(); if (!geometry.isNull()) { restoreGeometry(geometry); } settings.endGroup(); } void SelectIndexTitle::WriteSettings() { SetSelectedTitle(); SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status settings.setValue("geometry", saveGeometry()); settings.endGroup(); } void SelectIndexTitle::connectSignalsSlots() { connect(this, SIGNAL(accepted()), this, SLOT(WriteSettings())); } Sigil-0.9.9/src/Dialogs/SelectIndexTitle.h000066400000000000000000000026601321676412500203460ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SELECTINDEXTITLE_H #define SELECTINDEXTITLE_H #include #include "ui_SelectIndexTitle.h" class SelectIndexTitle: public QDialog { Q_OBJECT public: SelectIndexTitle(QString title, QWidget *parent = 0); void SetList(); QString GetTitle(); private slots: void WriteSettings(); private: void SetSelectedTitle(); void ReadSettings(); void connectSignalsSlots(); QString m_SelectedTitle; Ui::SelectIndexTitle ui; }; #endif // SELECTINDEXTITLE_H Sigil-0.9.9/src/Dialogs/SpellcheckEditor.cpp000066400000000000000000000507111321676412500207140ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012, 2013 John Schember ** Copyright (C) 2012, 2013 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include "Dialogs/SpellcheckEditor.h" #include "Misc/CaseInsensitiveItem.h" #include "Misc/NumericItem.h" #include "Misc/SettingsStore.h" #include "Misc/SpellCheck.h" #include "Misc/Utility.h" #include "ResourceObjects/Resource.h" static const QString SETTINGS_GROUP = "spellcheck_editor"; static const QString SELECTED_DICTIONARY = "selected_dictionary"; static const QString SHOW_ALL_WORDS = "show_all_words"; static const QString CASE_INSENSITIVE_SORT = "case_insensitive_sort"; static const QString SORT_COLUMN = "sort_column"; static const QString SORT_ORDER = "sort_order"; static const QString FILE_EXTENSION = "ini"; SpellcheckEditor::SpellcheckEditor(QWidget *parent) : QDialog(parent), m_Book(NULL), m_SpellcheckEditorModel(new QStandardItemModel(this)), m_ContextMenu(new QMenu(this)), m_MultipleSelection(false), m_SelectRow(-1), m_FilterSC(new QShortcut(QKeySequence(tr("f", "Filter")), this)), m_ShowAllSC(new QShortcut(QKeySequence(tr("s", "ShowAllWords")), this)), m_NoCaseSC(new QShortcut(QKeySequence(tr("c", "Case-InsensitiveSort")), this)), m_RefreshSC(new QShortcut(QKeySequence(tr("r", "Refresh")), this)) { ui.setupUi(this); ui.FilterText->installEventFilter(this); SetupSpellcheckEditorTree(); CreateContextMenuActions(); ConnectSignalsSlots(); UpdateDictionaries(); ReadSettings(); } SpellcheckEditor::~SpellcheckEditor() { WriteSettings(); } void SpellcheckEditor::SetBook(QSharedPointer book) { m_Book = book; } void SpellcheckEditor::SetupSpellcheckEditorTree() { ui.SpellcheckEditorTree->setModel(m_SpellcheckEditorModel); ui.SpellcheckEditorTree->setContextMenuPolicy(Qt::CustomContextMenu); ui.SpellcheckEditorTree->setSortingEnabled(true); ui.SpellcheckEditorTree->setWordWrap(true); ui.SpellcheckEditorTree->setAlternatingRowColors(true); ui.SpellcheckEditorTree->header()->setStretchLastSection(false); } void SpellcheckEditor::showEvent(QShowEvent *event) { ui.FilterText->clear(); Refresh(); } bool SpellcheckEditor::eventFilter(QObject *obj, QEvent *event) { if (obj == ui.FilterText) { if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast(event); int key = keyEvent->key(); if (key == Qt::Key_Down) { ui.SpellcheckEditorTree->setFocus(); return true; } } } // pass the event on to the parent class return QDialog::eventFilter(obj, event); } void SpellcheckEditor::toggleShowAllWords() { ui.ShowAllWords->click(); ui.SpellcheckEditorTree->setFocus(); } void SpellcheckEditor::toggleCaseInsensitiveSort() { ui.CaseInsensitiveSort->click(); ui.SpellcheckEditorTree->setFocus(); } int SpellcheckEditor::SelectedRowsCount() { int count = 0; if (ui.SpellcheckEditorTree->selectionModel()->hasSelection()) { count = ui.SpellcheckEditorTree->selectionModel()->selectedRows(0).count(); } return count; } QList SpellcheckEditor::GetSelectedItems() { QList selected_items; if (SelectedRowsCount() < 1) { return selected_items; } // Shift-click order is top to bottom regardless of starting position // Ctrl-click order is first clicked to last clicked (included shift-clicks stay ordered as is) QModelIndexList selected_indexes = ui.SpellcheckEditorTree->selectionModel()->selectedRows(0); foreach(QModelIndex index, selected_indexes) { selected_items.append(m_SpellcheckEditorModel->itemFromIndex(index)); } return selected_items; } void SpellcheckEditor::Ignore() { if (SelectedRowsCount() < 1) { emit ShowStatusMessageRequest(tr("No words selected.")); return; } m_MultipleSelection = SelectedRowsCount() > 1; SpellCheck *sc = SpellCheck::instance(); foreach (QStandardItem *item, GetSelectedItems()) { sc->ignoreWord(item->text()); MarkSpelledOkay(item->row()); } if (m_MultipleSelection) { m_MultipleSelection = false; FindSelectedWord(); } emit ShowStatusMessageRequest(tr("Ignored word(s).")); emit SpellingHighlightRefreshRequest(); } void SpellcheckEditor::Add() { if (SelectedRowsCount() < 1) { emit ShowStatusMessageRequest(tr("No words selected.")); return; } QString dict_name = ui.Dictionaries->currentText(); if (dict_name.isEmpty()) { return; } m_MultipleSelection = SelectedRowsCount() > 1; SpellCheck *sc = SpellCheck::instance(); SettingsStore settings; QStringList enabled_dicts = settings.enabledUserDictionaries(); bool enabled = false; foreach (QStandardItem *item, GetSelectedItems()) { sc->addToUserDictionary(item->text(), dict_name); if (enabled_dicts.contains(dict_name)) { enabled = true; MarkSpelledOkay(item->row()); } } if (m_MultipleSelection) { m_MultipleSelection = false; FindSelectedWord(); } if (enabled) { emit ShowStatusMessageRequest(tr("Added word(s) to dictionary.")); } else { emit ShowStatusMessageRequest(tr("Added word(s) to dictionary. The dictionary is not enabled in Preferences.")); } emit SpellingHighlightRefreshRequest(); } void SpellcheckEditor::ChangeAll() { QString old_word = GetSelectedWord(); if (old_word.isEmpty()) { emit ShowStatusMessageRequest(tr("No words selected.")); return; } QString new_word = ui.cbChangeAll->currentText(); if (new_word.contains("<") || new_word.contains(">") || new_word.contains("&")) { Utility::DisplayStdErrorDialog(tr("The new word cannot contain \"<\", \">\", or \"&\".")); return; } m_SelectRow = GetSelectedRow(); emit UpdateWordRequest(old_word, new_word); } void SpellcheckEditor::MarkSpelledOkay(int row) { m_SpellcheckEditorModel->invisibleRootItem()->child(row, 2)->setText(tr("No")); if (ui.ShowAllWords->checkState() == Qt::Unchecked) { m_SpellcheckEditorModel->removeRows(row, 1); if (row >= m_SpellcheckEditorModel->rowCount()) { row--; } if (row >= 0) { ui.SpellcheckEditorTree->selectionModel()->clear(); QModelIndex index = m_SpellcheckEditorModel->index(row, 0); ui.SpellcheckEditorTree->setCurrentIndex(index); ui.SpellcheckEditorTree->selectionModel()->select(index, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows); } } } void SpellcheckEditor::CreateModel(int sort_column, Qt::SortOrder sort_order) { m_SpellcheckEditorModel->clear(); QStringList header; header.append(tr("Word")); header.append(tr("Count")); header.append(tr("Misspelled?")); m_SpellcheckEditorModel->setHorizontalHeaderLabels(header); ui.SpellcheckEditorTree->header()->setSectionResizeMode(0, QHeaderView::Stretch); ui.SpellcheckEditorTree->resizeColumnToContents(1); ui.SpellcheckEditorTree->resizeColumnToContents(2); QHash unique_words = m_Book->GetUniqueWordsInHTMLFiles(); int total_misspelled_words = 0; SpellCheck *sc = SpellCheck::instance(); QHashIterator i(unique_words); while (i.hasNext()) { i.next(); QString word = i.key(); int count = unique_words.value(word); bool misspelled = !sc->spell(word); if (misspelled) { total_misspelled_words++; } if (ui.ShowAllWords->checkState() == Qt::Unchecked && !misspelled) { continue; } QList row_items; if (ui.CaseInsensitiveSort->checkState() == Qt::Unchecked) { QStandardItem *word_item = new QStandardItem(word); word_item->setEditable(false); row_items << word_item; } else { CaseInsensitiveItem *word_item = new CaseInsensitiveItem(); word_item->setText(word); word_item->setEditable(false); row_items << word_item; } NumericItem *count_item = new NumericItem(); count_item->setText(QString::number(count)); row_items << count_item; QStandardItem *misspelled_item = new QStandardItem(); misspelled_item->setEditable(false); if (misspelled) { misspelled_item->setText(tr("Yes")); } else { misspelled_item->setText(tr("No")); } row_items << misspelled_item ; m_SpellcheckEditorModel->invisibleRootItem()->appendRow(row_items); } // Since sortIndicator calls this routine, must disconnect/reconnect while resorting disconnect(ui.SpellcheckEditorTree->header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), this, SLOT(Sort(int, Qt::SortOrder))); ui.SpellcheckEditorTree->header()->setSortIndicator(sort_column, sort_order); connect(ui.SpellcheckEditorTree->header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), this, SLOT(Sort(int, Qt::SortOrder))); ui.SpellcheckEditorTree->header()->setToolTip("
" % tr("Misspelled Words") % ":" % QString::number(total_misspelled_words) % "
" % tr("Total Unique Words") % ":" % QString::number(unique_words.count()) % "
"); } void SpellcheckEditor::Refresh(int sort_column, Qt::SortOrder sort_order) { QApplication::setOverrideCursor(Qt::WaitCursor); WriteSettings(); CreateModel(sort_column, sort_order); UpdateDictionaries(); ReadSettings(); ui.FilterText->setFocus(); FilterEditTextChangedSlot(ui.FilterText->text()); SelectRow(m_SelectRow); UpdateSuggestions(); QApplication::restoreOverrideCursor(); } void SpellcheckEditor::UpdateDictionaries() { ui.Dictionaries->clear(); SpellCheck *sc = SpellCheck::instance(); QStringList dicts = sc->userDictionaries(); if (dicts.count() > 0) { ui.Dictionaries->addItems(dicts); } } void SpellcheckEditor::DictionaryChanged(QString dictionary) { ui.Dictionaries->setToolTip(dictionary); } void SpellcheckEditor::ChangeState(int state) { Refresh(); } void SpellcheckEditor::SelectAll() { ui.SpellcheckEditorTree->selectAll(); } QString SpellcheckEditor::GetSelectedWord() { QString word; if (SelectedRowsCount() != 1 || m_MultipleSelection) { return word; } QModelIndex index = ui.SpellcheckEditorTree->selectionModel()->selectedRows(0).first(); word = m_SpellcheckEditorModel->itemFromIndex(index)->text(); return word; } int SpellcheckEditor::GetSelectedRow() { int row = -1; if (SelectedRowsCount() != 1 || m_MultipleSelection) { return row; } return ui.SpellcheckEditorTree->selectionModel()->selectedRows(0).first().row(); } void SpellcheckEditor::SelectRow(int row) { QStandardItem *root_item = m_SpellcheckEditorModel->invisibleRootItem(); if (root_item->rowCount() > 0 && row >= 0) { if (row >= root_item->rowCount()) { row = root_item->rowCount() - 1; } QStandardItem *child = root_item->child(row, 0); if (child) { QModelIndex index = child->index(); ui.SpellcheckEditorTree->setFocus(); ui.SpellcheckEditorTree->selectionModel()->select(index, QItemSelectionModel::Select | QItemSelectionModel::Rows); ui.SpellcheckEditorTree->setCurrentIndex(child->index()); } } m_SelectRow = -1; } void SpellcheckEditor::UpdateSuggestions() { ui.cbChangeAll->clear(); QString word = GetSelectedWord(); if (!word.isEmpty()) { SpellCheck *sc = SpellCheck::instance(); ui.cbChangeAll->addItems(sc->suggest(word)); } } void SpellcheckEditor::FindSelectedWord() { QString word = GetSelectedWord(); if (!word.isEmpty()) { emit FindWordRequest(word); } } void SpellcheckEditor::SelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { UpdateSuggestions(); FindSelectedWord(); } void SpellcheckEditor::FilterEditTextChangedSlot(const QString &text) { const QString lowercaseText = text.toLower(); QModelIndex root_index = m_SpellcheckEditorModel->indexFromItem(m_SpellcheckEditorModel->invisibleRootItem()); for (int row = 0; row < m_SpellcheckEditorModel->invisibleRootItem()->rowCount(); row++) { QStandardItem *item = m_SpellcheckEditorModel->item(row, 0); bool hidden = !(text.isEmpty() || item->text().toLower().contains(lowercaseText)); ui.SpellcheckEditorTree->setRowHidden(item->row(), root_index, hidden); } } void SpellcheckEditor::Sort(int logicalindex, Qt::SortOrder order) { Refresh(logicalindex, order); } void SpellcheckEditor::ReadSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status QByteArray geometry = settings.value("geometry").toByteArray(); if (!geometry.isNull()) { restoreGeometry(geometry); } // Selected Dictionary int index = -1; QString dictionary; if (settings.contains(SELECTED_DICTIONARY)) { dictionary = settings.value(SELECTED_DICTIONARY).toString(); index = ui.Dictionaries->findText(dictionary); } if (index < 0) { index = 0; } ui.Dictionaries->setCurrentIndex(index); if (dictionary.isEmpty()) { dictionary = ui.Dictionaries->currentText(); } ui.Dictionaries->setToolTip(dictionary); // Checkboxes // Disconnect signals to avoid refresh when setting. if (settings.contains(SHOW_ALL_WORDS)) { if (settings.value(SHOW_ALL_WORDS).toBool()) { disconnect(ui.ShowAllWords, SIGNAL(stateChanged(int)), this, SLOT(ChangeState(int))); ui.ShowAllWords->setCheckState(Qt::Checked); connect(ui.ShowAllWords, SIGNAL(stateChanged(int)), this, SLOT(ChangeState(int))); } } if (settings.contains(CASE_INSENSITIVE_SORT)) { if (settings.value(CASE_INSENSITIVE_SORT).toBool()) { disconnect(ui.CaseInsensitiveSort, SIGNAL(stateChanged(int)), this, SLOT(ChangeState(int))); ui.CaseInsensitiveSort->setCheckState(Qt::Checked); connect(ui.CaseInsensitiveSort, SIGNAL(stateChanged(int)), this, SLOT(ChangeState(int))); } } // Sort Order. if (settings.contains(SORT_COLUMN) && settings.contains(SORT_ORDER)) { int sort_column = settings.value(SORT_COLUMN).toInt(); Qt::SortOrder sort_order = Qt::AscendingOrder; if (!settings.value(SORT_ORDER).toBool()) { sort_order = Qt::DescendingOrder; } // Since sortIndicator calls this routine, must disconnect/reconnect while resorting disconnect(ui.SpellcheckEditorTree->header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), this, SLOT(Sort(int, Qt::SortOrder))); ui.SpellcheckEditorTree->header()->setSortIndicator(sort_column, sort_order); connect(ui.SpellcheckEditorTree->header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), this, SLOT(Sort(int, Qt::SortOrder))); } settings.endGroup(); } void SpellcheckEditor::WriteSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status settings.setValue("geometry", saveGeometry()); // Selected Dictionary settings.setValue(SELECTED_DICTIONARY, ui.Dictionaries->currentText()); // Checkboxes settings.setValue(SHOW_ALL_WORDS, ui.ShowAllWords->checkState() == Qt::Checked); settings.setValue(CASE_INSENSITIVE_SORT, ui.CaseInsensitiveSort->checkState() == Qt::Checked); settings.setValue(SORT_COLUMN, ui.SpellcheckEditorTree->header()->sortIndicatorSection()); settings.setValue(SORT_ORDER, ui.SpellcheckEditorTree->header()->sortIndicatorOrder() == Qt::AscendingOrder); settings.endGroup(); } void SpellcheckEditor::CreateContextMenuActions() { m_Ignore = new QAction(tr("Ignore"), this); m_Add = new QAction(tr("Add to Dictionary"), this); m_Find = new QAction(tr("Find in Text"), this); m_SelectAll = new QAction(tr("Select All"), this); m_Ignore->setShortcut(QKeySequence(Qt::Key_F1)); m_Add->setShortcut(QKeySequence(Qt::Key_F2)); m_Find->setShortcut(QKeySequence(Qt::Key_F3)); // Has to be added to the dialog itself for the keyboard shortcut to work. addAction(m_Ignore); addAction(m_Add); addAction(m_Find); } void SpellcheckEditor::OpenContextMenu(const QPoint &point) { SetupContextMenu(point); m_ContextMenu->exec(ui.SpellcheckEditorTree->viewport()->mapToGlobal(point)); m_ContextMenu->clear(); // Make sure every action is enabled - in case shortcut is used after context menu disables some. m_Ignore->setEnabled(true); m_Add->setEnabled(true); m_Find->setEnabled(true); m_SelectAll->setEnabled(true); } void SpellcheckEditor::SetupContextMenu(const QPoint &point) { int selected_rows_count = SelectedRowsCount(); m_ContextMenu->addAction(m_Ignore); m_Ignore->setEnabled(selected_rows_count > 0); m_ContextMenu->addAction(m_Add); m_Add->setEnabled(selected_rows_count > 0); m_ContextMenu->addAction(m_Find); m_Find->setEnabled(selected_rows_count > 0); m_ContextMenu->addSeparator(); m_ContextMenu->addAction(m_SelectAll); } void SpellcheckEditor::ForceClose() { close(); } void SpellcheckEditor::ConnectSignalsSlots() { QItemSelectionModel *selectionModel = ui.SpellcheckEditorTree->selectionModel(); connect(selectionModel, SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(SelectionChanged(const QItemSelection &, const QItemSelection &))); connect(ui.FilterText, SIGNAL(textChanged(QString)), this, SLOT(FilterEditTextChangedSlot(QString))); connect(ui.Refresh, SIGNAL(clicked()), this, SLOT(Refresh())); connect(ui.Ignore, SIGNAL(clicked()), this, SLOT(Ignore())); connect(ui.Add, SIGNAL(clicked()), this, SLOT(Add())); connect(ui.ChangeAll, SIGNAL(clicked()), this, SLOT(ChangeAll())); connect(ui.SpellcheckEditorTree, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(OpenContextMenu(const QPoint &))); connect(ui.SpellcheckEditorTree->header(), SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), this, SLOT(Sort(int, Qt::SortOrder))); connect(m_Ignore, SIGNAL(triggered()), this, SLOT(Ignore())); connect(m_Add, SIGNAL(triggered()), this, SLOT(Add())); connect(m_Find, SIGNAL(triggered()), this, SLOT(FindSelectedWord())); connect(m_SelectAll, SIGNAL(triggered()), this, SLOT(SelectAll())); connect(ui.SpellcheckEditorTree, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(FindSelectedWord())); connect(ui.ShowAllWords, SIGNAL(stateChanged(int)), this, SLOT(ChangeState(int))); connect(ui.CaseInsensitiveSort, SIGNAL(stateChanged(int)), this, SLOT(ChangeState(int))); connect(ui.Dictionaries, SIGNAL(activated(const QString &)), this, SLOT(DictionaryChanged(const QString &))); connect(m_FilterSC, SIGNAL(activated()), ui.FilterText, SLOT(setFocus())); connect(m_ShowAllSC, SIGNAL(activated()), this, SLOT(toggleShowAllWords())); connect(m_NoCaseSC, SIGNAL(activated()), this, SLOT(toggleCaseInsensitiveSort())); connect(m_RefreshSC, SIGNAL(activated()), this, SLOT(Refresh())); } Sigil-0.9.9/src/Dialogs/SpellcheckEditor.h000066400000000000000000000066521321676412500203660ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012, 2013 John Schember ** Copyright (C) 2012, 2013 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SPELLCHECKEDITOR_H #define SPELLCHECKEDITOR_H #include #include #include #include #include #include #include "Misc/SettingsStore.h" #include "BookManipulation/Book.h" #include "ui_SpellcheckEditor.h" class QPoint; /** * The editor used to create and modify index entries */ class SpellcheckEditor : public QDialog { Q_OBJECT public: SpellcheckEditor(QWidget *parent); ~SpellcheckEditor(); void SetBook(QSharedPointer book); void ForceClose(); public slots: void Refresh(int sort_column = 1, Qt::SortOrder sort_order = Qt::AscendingOrder); signals: void ShowStatusMessageRequest(const QString &message); void SpellingHighlightRefreshRequest(); void FindWordRequest(QString word); void UpdateWordRequest(QString old_word, QString new_word); protected: bool eventFilter(QObject *obj, QEvent *ev); protected slots: void showEvent(QShowEvent *event); private slots: void FindSelectedWord(); void SelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void UpdateSuggestions(); void DictionaryChanged(QString dictionary); void ChangeState(int state); void Ignore(); void Add(); void SelectAll(); void ChangeAll(); void toggleShowAllWords(); void toggleCaseInsensitiveSort(); void FilterEditTextChangedSlot(const QString &text); void OpenContextMenu(const QPoint &point); void Sort(int logicalindex, Qt::SortOrder order); private: void CreateModel(int logicalindex, Qt::SortOrder order); void UpdateDictionaries(); void SetupSpellcheckEditorTree(); void MarkSpelledOkay(int row); QString GetSelectedWord(); int GetSelectedRow(); int SelectedRowsCount(); void SelectRow(int row); QList GetSelectedItems(); void ReadSettings(); void WriteSettings(); void CreateContextMenuActions(); void SetupContextMenu(const QPoint &point); void ConnectSignalsSlots(); QAction *m_Ignore; QAction *m_Add; QAction *m_Find; QAction *m_SelectAll; QSharedPointer m_Book; QStandardItemModel *m_SpellcheckEditorModel; QMenu *m_ContextMenu; bool m_MultipleSelection; int m_SelectRow; QShortcut * m_FilterSC; QShortcut * m_ShowAllSC; QShortcut * m_NoCaseSC; QShortcut * m_RefreshSC; Ui::SpellcheckEditor ui; }; #endif // SPELLCHECKEDITOR_H Sigil-0.9.9/src/Dialogs/TreeItem.cpp000066400000000000000000000077431321676412500172150ustar00rootroot00000000000000/**************************************************************************** ** ** Modifications Copyright (C) 2016 Kevin B, Hendricks, Stratford, ON, Canada ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ /* TreeItem.cpp A container for items of data supplied by the simple tree model. */ #include "Dialogs/TreeItem.h" #include TreeItem::TreeItem(const QVector &data, TreeItem *parent) { parentItem = parent; itemData = data; } TreeItem::~TreeItem() { qDeleteAll(childItems); } TreeItem *TreeItem::child(int number) { return childItems.value(number); } int TreeItem::childCount() const { return childItems.count(); } int TreeItem::childNumber() const { if (parentItem) return parentItem->childItems.indexOf(const_cast(this)); return 0; } int TreeItem::columnCount() const { return itemData.count(); } QVariant TreeItem::data(int column) const { return itemData.value(column); } bool TreeItem::insertChildren(int position, int count, int columns) { if (position < 0 || position > childItems.size()) return false; for (int row = 0; row < count; ++row) { QVector data(columns); TreeItem *item = new TreeItem(data, this); childItems.insert(position, item); } return true; } TreeItem *TreeItem::parent() { return parentItem; } bool TreeItem::removeChildren(int position, int count) { if (position < 0 || position + count > childItems.size()) return false; for (int row = 0; row < count; ++row) delete childItems.takeAt(position); return true; } bool TreeItem::moveChildUp(int position) { if (position <=0 || position > childItems.size() - 1) return false; childItems.swap(position, position-1); return true; } bool TreeItem::moveChildDown(int position) { if (position < 0 || position >= childItems.size() - 1) return false; childItems.swap(position, position+1); return true; } bool TreeItem::setData(int column, const QVariant &value) { if (column < 0 || column >= itemData.size()) return false; itemData[column] = value; return true; } Sigil-0.9.9/src/Dialogs/TreeItem.h000066400000000000000000000054271321676412500166570ustar00rootroot00000000000000/**************************************************************************** ** ** Modification Copyright (2) 2016 Kevin B. Hendricks, Stratford, ON Canada ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef TREEITEM_H #define TREEITEM_H #include #include #include class TreeItem { public: explicit TreeItem(const QVector &data, TreeItem *parent = 0); ~TreeItem(); TreeItem *child(int number); int childCount() const; int columnCount() const; QVariant data(int column) const; bool insertChildren(int position, int count, int columns); TreeItem *parent(); bool removeChildren(int position, int count); int childNumber() const; bool setData(int column, const QVariant &value); bool moveChildUp(int position); bool moveChildDown(int position); private: QList childItems; QVector itemData; TreeItem *parentItem; }; #endif // TREEITEM_H Sigil-0.9.9/src/Dialogs/TreeModel.cpp000066400000000000000000000223351321676412500173510ustar00rootroot00000000000000/**************************************************************************** ** ** Modifications Copyright (C) 2016 Kevin B. Hendricks, Stratford, ON Canada ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "Dialogs/TreeItem.h" #include "Dialogs/TreeModel.h" const QString _RS = QString(QChar(30)); const QString _US = QString(QChar(31)); const QString _IN = QString(" "); TreeModel::TreeModel(const QStringList &headers, const QString &data, QObject *parent) : QAbstractItemModel(parent) { QVector rootData; foreach (QString header, headers) rootData << header; rootItem = new TreeItem(rootData); setupModelData(data.split(_RS, QString::SkipEmptyParts), rootItem); } TreeModel::~TreeModel() { delete rootItem; } int TreeModel::columnCount(const QModelIndex & /* parent */) const { return rootItem->columnCount(); } QVariant TreeModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (role != Qt::DisplayRole && role != Qt::EditRole) return QVariant(); TreeItem *item = getItem(index); return item->data(index.column()); } Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const { if (!index.isValid()) return 0; return Qt::ItemIsEditable | QAbstractItemModel::flags(index); } TreeItem *TreeModel::getItem(const QModelIndex &index) const { if (index.isValid()) { TreeItem *item = static_cast(index.internalPointer()); if (item) return item; } return rootItem; } QVariant TreeModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) return rootItem->data(section); return QVariant(); } QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const { if (parent.isValid() && parent.column() != 0) return QModelIndex(); TreeItem *parentItem = getItem(parent); TreeItem *childItem = parentItem->child(row); if (childItem) return createIndex(row, column, childItem); else return QModelIndex(); } bool TreeModel::insertRows(int position, int rows, const QModelIndex &parent) { TreeItem *parentItem = getItem(parent); bool success; beginInsertRows(parent, position, position + rows - 1); success = parentItem->insertChildren(position, rows, rootItem->columnCount()); endInsertRows(); return success; } QModelIndex TreeModel::parent(const QModelIndex &index) const { if (!index.isValid()) return QModelIndex(); TreeItem *childItem = getItem(index); TreeItem *parentItem = childItem->parent(); if (parentItem == rootItem) return QModelIndex(); return createIndex(parentItem->childNumber(), 0, parentItem); } bool TreeModel::removeRows(int position, int rows, const QModelIndex &parent) { TreeItem *parentItem = getItem(parent); bool success = true; beginRemoveRows(parent, position, position + rows - 1); success = parentItem->removeChildren(position, rows); endRemoveRows(); return success; } bool TreeModel::moveRowUp(int position, const QModelIndex &parent) { if (position == 0) return false; TreeItem *parentItem = getItem(parent); bool success = true; if (!beginMoveRows(parent, position, position, parent, position-1)) { return false; } success = parentItem->moveChildUp(position); endMoveRows(); return success; } bool TreeModel::moveRowDown(int position, const QModelIndex &parent) { TreeItem *parentItem = getItem(parent); if (position == parentItem->childCount()-1) return false; bool success = true; if (!beginMoveRows(parent, position, position, parent, position+2)) { return false; } success = parentItem->moveChildDown(position); endMoveRows(); return success; } int TreeModel::rowCount(const QModelIndex &parent) const { TreeItem *parentItem = getItem(parent); return parentItem->childCount(); } bool TreeModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (role != Qt::EditRole) return false; TreeItem *item = getItem(index); bool result = item->setData(index.column(), value); if (result) emit dataChanged(index, index); return result; } bool TreeModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role) { if (role != Qt::EditRole || orientation != Qt::Horizontal) return false; bool result = rootItem->setData(section, value); if (result) emit headerDataChanged(orientation, section, section); return result; } void TreeModel::setupModelData(const QStringList &lines, TreeItem *parent) { QList parents; QList indentations; parents << parent; indentations << 0; int number = 0; while (number < lines.count()) { int position = 0; while (position < lines[number].length()) { if (lines[number].mid(position, 1) != " ") break; ++position; } QString lineData = lines[number].mid(position).trimmed(); if (!lineData.isEmpty()) { // Read the column data from the rest of the line. QStringList columnStrings = lineData.split(_US, QString::SkipEmptyParts); QVector columnData; for (int column = 0; column < columnStrings.count(); ++column) columnData << columnStrings[column]; if (position > indentations.last()) { // The last child of the current parent is now the new parent // unless the current parent has no children. if (parents.last()->childCount() > 0) { parents << parents.last()->child(parents.last()->childCount()-1); indentations << position; } } else { while (position < indentations.last() && parents.count() > 0) { parents.pop_back(); indentations.pop_back(); } } // Append a new item to the current parent's list of children. TreeItem *parent = parents.last(); parent->insertChildren(parent->childCount(), 1, rootItem->columnCount()); for (int column = 0; column < columnData.size(); ++column) parent->child(parent->childCount() - 1)->setData(column, columnData[column]); } ++number; } } QStringList TreeModel::getModelData(TreeItem * node, int lvl) { QStringList reslst; int cols = rootItem->columnCount(); QString indent = _IN.repeated(lvl); QString res = indent + (node->data(0)).toString(); for (int col=1; col < cols; col++) { res = res + _US + (node->data(col)).toString(); } reslst.append(res); int numchild = node->childCount(); for (int row=0; row < numchild; row++) { TreeItem* childItem=node->child(row); reslst.append(getModelData(childItem, lvl+1)); } return reslst; } QString TreeModel::getAllModelData() { QStringList results; int numchild = rootItem->childCount(); for (int row=0; row < numchild; row++) { TreeItem* childItem=rootItem->child(row); results.append(getModelData(childItem, 0)); } return results.join(_RS); } Sigil-0.9.9/src/Dialogs/TreeModel.h000066400000000000000000000076221321676412500170200ustar00rootroot00000000000000/**************************************************************************** ** ** Modifications Copyright (C) 2016 Kevin B Hendricks, Stratford, ON, Canada ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef TREEMODEL_H #define TREEMODEL_H #include #include #include class TreeItem; class TreeModel : public QAbstractItemModel { Q_OBJECT public: TreeModel(const QStringList &headers, const QString &data, QObject *parent = 0); ~TreeModel(); QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; QModelIndex parent(const QModelIndex &index) const Q_DECL_OVERRIDE; int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; QString getAllModelData(); bool moveRowUp(int position, const QModelIndex & parent); bool moveRowDown(int position, const QModelIndex & parent); bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE; bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE; private: void setupModelData(const QStringList &lines, TreeItem *parent); QStringList getModelData(TreeItem * node, int lvl); TreeItem *getItem(const QModelIndex &index) const; TreeItem *rootItem; }; #endif // TREEMODEL_H Sigil-0.9.9/src/Dialogs/ViewImage.cpp000066400000000000000000000046401321676412500173450ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2013 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include "MainUI/MainWindow.h" #include "Dialogs/ViewImage.h" #include "ResourceObjects/ImageResource.h" #include "sigil_constants.h" static QString SETTINGS_GROUP = "view_image"; ViewImage::ViewImage(QWidget *parent) : QDialog(parent) { ui.setupUi(this); ui.webView->setContextMenuPolicy(Qt::NoContextMenu); ui.webView->setFocusPolicy(Qt::NoFocus); ui.webView->setAcceptDrops(false); ui.webView->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); ui.webView->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); ReadSettings(); } ViewImage::~ViewImage() { WriteSettings(); } void ViewImage::ShowImage(QString path) { MainWindow::clearMemoryCaches(); const QUrl resourceUrl = QUrl::fromLocalFile(path); QString html = IMAGE_HTML_BASE_PREVIEW.arg(resourceUrl.toString()); ui.webView->setHtml(html, resourceUrl); } void ViewImage::ReadSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status QByteArray geometry = settings.value("geometry").toByteArray(); if (!geometry.isNull()) { restoreGeometry(geometry); } settings.endGroup(); } void ViewImage::WriteSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status settings.setValue("geometry", saveGeometry()); settings.endGroup(); } Sigil-0.9.9/src/Dialogs/ViewImage.h000066400000000000000000000024671321676412500170170ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2013 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef VIEWIMAGE_H #define VIEWIMAGE_H #include #include "Misc/SettingsStore.h" #include "ResourceObjects/Resource.h" #include "ui_ViewImage.h" class QWebView; class ViewImage : public QDialog { Q_OBJECT public: ViewImage(QWidget *parent = 0); ~ViewImage(); void ShowImage(QString path); private slots: void WriteSettings(); private: void ReadSettings(); Ui::ViewImage ui; }; #endif // VIEWIMAGE_H Sigil-0.9.9/src/Exporters/000077500000000000000000000000001321676412500153715ustar00rootroot00000000000000Sigil-0.9.9/src/Exporters/EncryptionXmlWriter.cpp000066400000000000000000000045001321676412500221040ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "BookManipulation/Book.h" #include "Exporters/EncryptionXmlWriter.h" #include "Misc/Utility.h" EncryptionXmlWriter::EncryptionXmlWriter(const Book *book, QIODevice &device) : XMLWriter(book, device) { } void EncryptionXmlWriter::WriteXML() { m_Writer->writeStartDocument(); m_Writer->writeStartElement("encryption"); m_Writer->writeAttribute("xmlns", "urn:oasis:names:tc:opendocument:xmlns:container"); m_Writer->writeAttribute("xmlns:enc", "http://www.w3.org/2001/04/xmlenc#"); QList font_resources = m_Book->GetFolderKeeper()->GetResourceTypeList(); foreach(FontResource *font_resource, font_resources) { WriteEncryptedData(font_resource); } m_Writer->writeEndElement(); m_Writer->writeEndDocument(); } void EncryptionXmlWriter::WriteEncryptedData(const FontResource *font_resource) { QString algorithm = font_resource->GetObfuscationAlgorithm(); if (algorithm.isEmpty()) { return; } m_Writer->writeStartElement("enc:EncryptedData"); m_Writer->writeEmptyElement("enc:EncryptionMethod"); m_Writer->writeAttribute("Algorithm", algorithm); m_Writer->writeStartElement("enc:CipherData"); m_Writer->writeEmptyElement("enc:CipherReference"); m_Writer->writeAttribute("URI", font_resource->GetRelativePathToRoot()); m_Writer->writeEndElement(); m_Writer->writeEndElement(); } Sigil-0.9.9/src/Exporters/EncryptionXmlWriter.h000066400000000000000000000031421321676412500215520ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef ENCRYPTIONXMLWRITER_H #define ENCRYPTIONXMLWRITER_H #include "Exporters/XMLWriter.h" class EncryptionXmlWriter : private XMLWriter { public: /** * Constructor. * * @param book The book for which we're writing the OPF. * @param device The IODevice into which we should write the XML. */ EncryptionXmlWriter(const Book *book, QIODevice &device); void WriteXML(); private: /** * Writes the EncryptedData element and its children for the * specified font. * * @param The font for which we want to write the encryption info. */ void WriteEncryptedData(const FontResource *font_resource); }; #endif // ENCRYPTIONXMLWRITER_H Sigil-0.9.9/src/Exporters/ExportEPUB.cpp000066400000000000000000000233711321676412500200400ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #ifdef _WIN32 #define NOMINMAX #endif #include #include #include #ifdef _WIN32 #include #endif #include #include #include #include #include #include #include #include "BookManipulation/CleanSource.h" #include "BookManipulation/FolderKeeper.h" #include "BookManipulation/XhtmlDoc.h" #include "Exporters/EncryptionXmlWriter.h" #include "Exporters/ExportEPUB.h" #include "Misc/Utility.h" #include "Misc/TempFolder.h" #include "Misc/FontObfuscation.h" #include "ResourceObjects/FontResource.h" #include "sigil_constants.h" #include "sigil_exception.h" #define BUFF_SIZE 8192 const QString BODY_START = "<\\s*body[^>]*>"; const QString BODY_END = ""; const QString OPF_FILE_NAME = "content.opf"; const QString NCX_FILE_NAME = "toc.ncx"; const QString CONTAINER_XML_FILE_NAME = "container.xml"; const QString ENCRYPTION_XML_FILE_NAME = "encryption.xml"; static const QString METAINF_FOLDER_SUFFIX = "/META-INF"; static const QString OEBPS_FOLDER_SUFFIX = "/OEBPS"; static const char * EPUB_MIME_DATA = "application/epub+zip"; // Constructor; // the first parameter is the location where the book // should be save to, and the second is the book to be saved ExportEPUB::ExportEPUB(const QString &fullfilepath, QSharedPointer book) : m_FullFilePath(fullfilepath), m_Book(book) { } // Destructor ExportEPUB::~ExportEPUB() { } // Writes the book to the path // specified in the constructor void ExportEPUB::WriteBook() { // Obfuscating fonts needs an UUID ident if (m_Book->HasObfuscatedFonts()) { m_Book->GetOPF()->EnsureUUIDIdentifierPresent(); } m_Book->GetOPF()->AddSigilVersionMeta(); m_Book->GetOPF()->AddModificationDateMeta(); m_Book->SaveAllResourcesToDisk(); TempFolder tempfolder; CreatePublication(tempfolder.GetPath()); if (m_Book->HasObfuscatedFonts()) { ObfuscateFonts(tempfolder.GetPath()); } SaveFolderAsEpubToLocation(tempfolder.GetPath(), m_FullFilePath); } // Creates the publication from the Book // (creates XHTML, CSS, OPF, NCX files etc.) void ExportEPUB::CreatePublication(const QString &fullfolderpath) { Utility::CopyFiles(m_Book->GetFolderKeeper()->GetFullPathToMainFolder(), fullfolderpath); if (m_Book->HasObfuscatedFonts()) { CreateEncryptionXML(fullfolderpath + METAINF_FOLDER_SUFFIX); } } void ExportEPUB::SaveFolderAsEpubToLocation(const QString &fullfolderpath, const QString &fullfilepath) { QString tempFile = fullfolderpath + "-tmp.epub"; QDateTime timeNow = QDateTime::currentDateTime(); zip_fileinfo fileInfo; #ifdef Q_OS_WIN32 zlib_filefunc64_def ffunc; fill_win32_filefunc64W(&ffunc); zipFile zfile = zipOpen2_64(Utility::QStringToStdWString(QDir::toNativeSeparators(tempFile)).c_str(), APPEND_STATUS_CREATE, NULL, &ffunc); #else zipFile zfile = zipOpen64(QDir::toNativeSeparators(tempFile).toUtf8().constData(), APPEND_STATUS_CREATE); #endif if (zfile == NULL) { throw (CannotOpenFile(tempFile.toStdString())); } memset(&fileInfo, 0, sizeof(fileInfo)); fileInfo.tmz_date.tm_sec = timeNow.time().second(); fileInfo.tmz_date.tm_min = timeNow.time().minute(); fileInfo.tmz_date.tm_hour = timeNow.time().hour(); fileInfo.tmz_date.tm_mday = timeNow.date().day(); fileInfo.tmz_date.tm_mon = timeNow.date().month() - 1; fileInfo.tmz_date.tm_year = timeNow.date().year(); // Write the mimetype. This must be uncompressed and the first entry in the archive. if (zipOpenNewFileInZip64(zfile, "mimetype", &fileInfo, NULL, 0, NULL, 0, NULL, Z_NO_COMPRESSION, 0, 0) != Z_OK) { zipClose(zfile, NULL); QFile::remove(tempFile); throw(CannotStoreFile("mimetype")); } if (zipWriteInFileInZip(zfile, EPUB_MIME_DATA, (unsigned int)strlen(EPUB_MIME_DATA)) != Z_OK) { zipCloseFileInZip(zfile); zipClose(zfile, NULL); QFile::remove(tempFile); throw(CannotStoreFile("mimetype")); } zipCloseFileInZip(zfile); // Write all the files in our directory path to the archive. QDirIterator it(fullfolderpath, QDir::Files | QDir::NoDotAndDotDot | QDir::Readable | QDir::Hidden, QDirIterator::Subdirectories); while (it.hasNext()) { it.next(); QString relpath = it.filePath().remove(fullfolderpath); while (relpath.startsWith("/")) { relpath = relpath.remove(0, 1); } // Add the file entry to the archive. // We should check the uncompressed file size. If it's over >= 0xffffffff the last parameter (zip64) should be 1. if (zipOpenNewFileInZip4_64(zfile, relpath.toUtf8().constData(), &fileInfo, NULL, 0, NULL, 0, NULL, Z_DEFLATED, 8, 0, 15, 8, Z_DEFAULT_STRATEGY, NULL, 0, 0x0b00, 1<<11, 0) != Z_OK) { zipClose(zfile, NULL); QFile::remove(tempFile); throw(CannotStoreFile(relpath.toStdString())); } // Open the file on disk. We will read this and write what we read into // the archive. QFile dfile(it.filePath()); if (!dfile.open(QIODevice::ReadOnly)) { zipCloseFileInZip(zfile); zipClose(zfile, NULL); QFile::remove(tempFile); throw(CannotOpenFile(it.fileName().toStdString())); } // Write the data from the file on disk into the archive. char buff[BUFF_SIZE] = {0}; qint64 read = 0; while ((read = dfile.read(buff, BUFF_SIZE)) > 0) { if (zipWriteInFileInZip(zfile, buff, read) != Z_OK) { dfile.close(); zipCloseFileInZip(zfile); zipClose(zfile, NULL); QFile::remove(tempFile); throw(CannotStoreFile(relpath.toStdString())); } } dfile.close(); // There was an error reading the file on disk. if (read < 0) { zipCloseFileInZip(zfile); zipClose(zfile, NULL); QFile::remove(tempFile); throw(CannotStoreFile(relpath.toStdString())); } if (zipCloseFileInZip(zfile) != Z_OK) { zipClose(zfile, NULL); QFile::remove(tempFile); throw(CannotStoreFile(relpath.toStdString())); } } zipClose(zfile, NULL); // Overwrite the contents of the real file with the contents from the temp // file we saved the data do. We do this instead of simply copying the file // because a file copy will lose extended attributes such as labels on OS X. QFile temp_epub(tempFile); if (!temp_epub.open(QFile::ReadOnly)) { throw(CannotOpenFile(tempFile.toStdString())); } QFile real_epub(fullfilepath); if (!real_epub.open(QFile::WriteOnly | QFile::Truncate)) { temp_epub.close(); throw(CannotWriteFile(fullfilepath.toStdString())); } // Copy the contents from the temp file to the real file. char buff[BUFF_SIZE] = {0}; qint64 read = 0; qint64 written = 0; while ((read = temp_epub.read(buff, BUFF_SIZE)) > 0) { written = real_epub.write(buff, read); if (written != read) { temp_epub.close(); real_epub.close(); QFile::remove(tempFile); throw(CannotCopyFile(fullfilepath.toStdString())); } } if (read == -1) { temp_epub.close(); real_epub.close(); QFile::remove(tempFile); throw(CannotCopyFile(fullfilepath.toStdString())); } temp_epub.close(); real_epub.close(); QFile::remove(tempFile); } void ExportEPUB::CreateEncryptionXML(const QString &fullfolderpath) { QTemporaryFile file; if (!file.open()) { std::string msg = file.fileName().toStdString() + ": " + file.errorString().toStdString(); throw (CannotOpenFile(msg)); } EncryptionXmlWriter enc(m_Book.data(), file); enc.WriteXML(); // Write to disk immediately file.flush(); QFile::copy(file.fileName(), fullfolderpath + "/" + ENCRYPTION_XML_FILE_NAME); } void ExportEPUB::ObfuscateFonts(const QString &fullfolderpath) { QString uuid_id = m_Book->GetOPF()->GetUUIDIdentifierValue(); QString main_id = m_Book->GetPublicationIdentifier(); QList font_resources = m_Book->GetFolderKeeper()->GetResourceTypeList(); foreach(FontResource *font_resource, font_resources) { QString algorithm = font_resource->GetObfuscationAlgorithm(); if (algorithm.isEmpty()) { continue; } QString font_path = fullfolderpath + "/" + font_resource->GetRelativePathToRoot(); if (algorithm == ADOBE_FONT_ALGO_ID) { FontObfuscation::ObfuscateFile(font_path, algorithm, uuid_id); } else { FontObfuscation::ObfuscateFile(font_path, algorithm, main_id); } } } Sigil-0.9.9/src/Exporters/ExportEPUB.h000066400000000000000000000047521321676412500175070ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef EXPORTEPUB_H #define EXPORTEPUB_H #include "BookManipulation/FolderKeeper.h" #include "BookManipulation/Book.h" #include "Exporters/Exporter.h" class ExportEPUB : public Exporter { public: // Constructor; // the first parameter is the location where the book // should be save to, and the second is the book to be saved ExportEPUB(const QString &fullfilepath, QSharedPointer book); // Destructor virtual ~ExportEPUB(); // Writes the book to the path // specified in the constructor virtual void WriteBook(); private: // Creates the publication from the Book // (creates XHTML, CSS, OPF, NCX files etc.) void virtual CreatePublication(const QString &fullfolderpath); // Saves the publication in the specified folder // to the specified file path as an epub; // the second optional parameter specifies the // mimetype to write to the special "mimetype" file void SaveFolderAsEpubToLocation(const QString &fullfolderpath, const QString &fullfilepath); // Creates the publication's encryption.xml file, // if there are any fonts to obfuscate void CreateEncryptionXML(const QString &fullfolderpath); // Obfuscates the fonts marked for obfuscation void ObfuscateFonts(const QString &fullfolderpath); /////////////////////////////// // PROTECTED MEMBER VARIABLES /////////////////////////////// // The location where the publication // should be exported to QString m_FullFilePath; // The book being exported QSharedPointer m_Book; }; #endif // EXPORTEPUB_H Sigil-0.9.9/src/Exporters/Exporter.h000066400000000000000000000021441321676412500173530ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef EXPORTER_H #define EXPORTER_H // An interface class for all Exporters class Exporter { public: virtual ~Exporter() {} virtual void WriteBook() = 0; }; #endif // EXPORTER_H Sigil-0.9.9/src/Exporters/ExporterFactory.cpp000066400000000000000000000030271321676412500212370ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "Exporters/ExportEPUB.h" #include "Exporters/ExporterFactory.h" // Constructor ExporterFactory::ExporterFactory() : m_Exporter(NULL) { } // Destructor ExporterFactory::~ExporterFactory() { delete m_Exporter; } // Returns a reference to the exporter // appropriate for the given filename Exporter *ExporterFactory::GetExporter(const QString &filename, QSharedPointer book) { QString extension = QFileInfo(filename).suffix().toLower(); if ((extension == "epub")) { m_Exporter = new ExportEPUB(filename, book); return m_Exporter; } return m_Exporter; } Sigil-0.9.9/src/Exporters/ExporterFactory.h000066400000000000000000000026311321676412500207040ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef EXPORTERFACTORY_H #define EXPORTERFACTORY_H #include "BookManipulation/Book.h" #include "Exporters/Exporter.h" class ExporterFactory { public: // Constructor ExporterFactory(); // Destructor ~ExporterFactory(); // Returns a reference to the exporter // appropriate for the given filename Exporter *GetExporter(const QString &filename, QSharedPointer book); private: // The exporter created Exporter *m_Exporter; }; #endif // EXPORTERFACTORY_H Sigil-0.9.9/src/Exporters/NCXWriter.cpp000066400000000000000000000171111321676412500177230ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, Ontario, Canada ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "BookManipulation/Book.h" #include "Exporters/NCXWriter.h" #include "Misc/Utility.h" #include "ResourceObjects/HTMLResource.h" #include "sigil_constants.h" NCXWriter::NCXWriter(const Book *book, QIODevice &device) : XMLWriter(book, device), m_Headings(), m_TOCRootEntry(TOCModel::TOCEntry()), m_version(book->GetConstOPF()->GetEpubVersion()) { // Remove the Nav resource from list of HTMLResources if it exists (EPUB3) QList htmlresources = book->GetFolderKeeper()->GetResourceTypeList(true); HTMLResource* nav_resource = book->GetConstOPF()->GetNavResource(); if (nav_resource) { htmlresources.removeOne(nav_resource); } m_Headings = Headings::MakeHeadingHeirarchy(Headings::GetHeadingList(htmlresources)); } NCXWriter::NCXWriter(const Book *book, QIODevice &device, TOCModel::TOCEntry toc_root_entry) : XMLWriter(book, device), m_TOCRootEntry(toc_root_entry), m_version(book->GetConstOPF()->GetEpubVersion()) { } void NCXWriter::WriteXMLFromHeadings() { m_TOCRootEntry = ConvertHeadingsToTOC(); WriteXML(); } void NCXWriter::WriteXML() { m_Writer->writeStartDocument(); if (m_version.startsWith('2')) { m_Writer->writeDTD("\n"); } m_Writer->writeStartElement("ncx"); m_Writer->writeAttribute("xmlns", "http://www.daisy.org/z3986/2005/ncx/"); m_Writer->writeAttribute("version", "2005-1"); WriteHead(); WriteDocTitle(); WriteNavMap(); m_Writer->writeEndElement(); m_Writer->writeEndDocument(); } void NCXWriter::WriteHead() { m_Writer->writeStartElement("head"); m_Writer->writeEmptyElement("meta"); m_Writer->writeAttribute("name", "dtb:uid"); m_Writer->writeAttribute("content", m_Book->GetPublicationIdentifier()); m_Writer->writeEmptyElement("meta"); m_Writer->writeAttribute("name", "dtb:depth"); m_Writer->writeAttribute("content", QString::number(GetTOCDepth())); m_Writer->writeEmptyElement("meta"); m_Writer->writeAttribute("name", "dtb:totalPageCount"); m_Writer->writeAttribute("content", "0"); m_Writer->writeEmptyElement("meta"); m_Writer->writeAttribute("name", "dtb:maxPageNumber"); m_Writer->writeAttribute("content", "0"); m_Writer->writeEndElement(); } void NCXWriter::WriteDocTitle() { QString document_title; QList titles = m_Book->GetMetadataValues("dc:title"); if (titles.isEmpty()) { document_title = "Unknown"; } else { // FIXME: handle multiple titles document_title = titles.first().toString(); } m_Writer->writeStartElement("docTitle"); m_Writer->writeTextElement("text", document_title); m_Writer->writeEndElement(); } void NCXWriter::WriteNavMap() { int play_order = 1; m_Writer->writeStartElement("navMap"); if (!m_TOCRootEntry.children.isEmpty()) { // The NavMap is written recursively; // WriteNavPoint is called for each entry in the tree foreach(TOCModel::TOCEntry entry, m_TOCRootEntry.children) { WriteNavPoint(entry, play_order); } } else { // No headings? Well the spec *demands* an NCX file // with a NavMap with at least one NavPoint, so we // write a dummy one. WriteFallbackNavPoint(); } m_Writer->writeEndElement(); } void NCXWriter::WriteFallbackNavPoint() { m_Writer->writeStartElement("navPoint"); m_Writer->writeAttribute("id", QString("navPoint-%1").arg(1)); m_Writer->writeAttribute("playOrder", QString("%1").arg(1)); m_Writer->writeStartElement("navLabel"); m_Writer->writeTextElement("text", "Start"); m_Writer->writeEndElement(); QList html_resources = m_Book->GetFolderKeeper()->GetResourceTypeList(true); Q_ASSERT(!html_resources.isEmpty()); m_Writer->writeEmptyElement("content"); m_Writer->writeAttribute("src", Utility::URLEncodePath(html_resources.at(0)->GetRelativePathToOEBPS())); m_Writer->writeEndElement(); } TOCModel::TOCEntry NCXWriter::ConvertHeadingsToTOC() { TOCModel::TOCEntry toc_root; foreach(const Headings::Heading & heading, m_Headings) { toc_root.children.append(ConvertHeadingWalker(heading)); } return toc_root; } TOCModel::TOCEntry NCXWriter::ConvertHeadingWalker(const Headings::Heading &heading) { TOCModel::TOCEntry toc_child; if (heading.include_in_toc) { toc_child.text = heading.text; QString heading_file = heading.resource_file->GetRelativePathToOEBPS(); QString id_to_use = heading.id; // If this heading appears right after a section break, // then it "represents" and links to its file; otherwise, // we link to the heading element directly if (heading.at_file_start) { toc_child.target = Utility::URLEncodePath(heading_file); } else { QString path = heading_file + "#" + id_to_use; toc_child.target = Utility::URLEncodePath(path); } } foreach(Headings::Heading child_heading, heading.children) { toc_child.children.append(ConvertHeadingWalker(child_heading)); } return toc_child; } void NCXWriter::WriteNavPoint(const TOCModel::TOCEntry &entry, int &play_order) { m_Writer->writeStartElement("navPoint"); m_Writer->writeAttribute("id", QString("navPoint-%1").arg(play_order)); m_Writer->writeAttribute("playOrder", QString("%1").arg(play_order)); play_order++; m_Writer->writeStartElement("navLabel"); // Compress whitespace that pretty-print may add. m_Writer->writeTextElement("text", entry.text.simplified()); m_Writer->writeEndElement(); m_Writer->writeEmptyElement("content"); m_Writer->writeAttribute("src", entry.target); foreach(TOCModel::TOCEntry child, entry.children) { WriteNavPoint(child, play_order); } m_Writer->writeEndElement(); } int NCXWriter::GetTOCDepth() const { int max_depth = 0; foreach(TOCModel::TOCEntry entry, m_TOCRootEntry.children) { int current_depth = 0; TOCDepthWalker(entry , current_depth, max_depth); } return max_depth; } void NCXWriter::TOCDepthWalker(const TOCModel::TOCEntry &entry , int ¤t_depth, int &max_depth) const { current_depth++; if (current_depth > max_depth) { max_depth = current_depth; } foreach(TOCModel::TOCEntry child_entry , entry.children) { int new_current_depth = current_depth; TOCDepthWalker(child_entry, new_current_depth, max_depth); } } Sigil-0.9.9/src/Exporters/NCXWriter.h000066400000000000000000000062041321676412500173710ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef NCXWRITER_H #define NCXWRITER_H #include "BookManipulation/Headings.h" #include "Exporters/XMLWriter.h" #include "MainUI/TOCModel.h" /** * Writes the NCX file of the EPUB publication. */ class NCXWriter : private XMLWriter { public: /** * Constructor. * * @param book The book for which we're writing the NCX. * @param device The IODevice into which we should write the XML. */ NCXWriter(const Book *book, QIODevice &device); NCXWriter(const Book *book, QIODevice &device, TOCModel::TOCEntry toc_root_entry); void WriteXML(); void WriteXMLFromHeadings(); private: /** * Writes the element. */ void WriteHead(); /** * Writes the element. */ void WriteDocTitle(); /** * Writes the element. */ void WriteNavMap(); /** * Writes a fallback for when the book has no headings. */ void WriteFallbackNavPoint(); /** * Writes a ; called recursively to write the TOC tree. * * @param heading The heading being written. * @param play_order A reference to the general playorder. */ void WriteNavPoint(const TOCModel::TOCEntry &entry , int &play_order); /** * Returns the depth of the TOC tree * * @return The TOC hierarchy depth */ int GetTOCDepth() const; /** * Used to walk through the headings tree and * search for the its maximum depth. * * @param heading The current heading we are walking through. * @param current_depth A reference to the depth of the current sub-tree. * @param max_depth A reference to the current maximum depth. */ void TOCDepthWalker(const TOCModel::TOCEntry &entry, int ¤t_depth, int &max_depth) const; TOCModel::TOCEntry ConvertHeadingsToTOC(); TOCModel::TOCEntry ConvertHeadingWalker(const Headings::Heading &heading); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * A hierarchical tree of all the headings in the book. */ QList m_Headings; TOCModel::TOCEntry m_TOCRootEntry; QString m_version; }; #endif // NCXWRITER_H Sigil-0.9.9/src/Exporters/XMLWriter.cpp000066400000000000000000000025411321676412500177340ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include "BookManipulation/Book.h" #include "Exporters/XMLWriter.h" XMLWriter::XMLWriter(const Book *book, QIODevice &device) : m_Book(book), m_IODevice(device), m_Writer(new QXmlStreamWriter(&m_IODevice)) { m_Writer->setAutoFormatting(true); m_Writer->setAutoFormattingIndent(2); } XMLWriter::~XMLWriter() { // TODO: Why is this on the heap? delete m_Writer; } Sigil-0.9.9/src/Exporters/XMLWriter.h000066400000000000000000000034711321676412500174040ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef XMLWRITER_H #define XMLWRITER_H #include "BookManipulation/FolderKeeper.h" class Book; class QIODevice; class QXmlStreamWriter; /** * An abstract base class for XML writers like * NCXWriter and OPFWriter. */ class XMLWriter { public: /** * Constructor. * * @param book The book for which we're writing the XML. * @param device The IODevice into which we should write the XML. */ XMLWriter(const Book *book, QIODevice &device); /** * Destructor. */ virtual ~XMLWriter(); /** * Writes the XML file to the disk. */ virtual void WriteXML() = 0; protected: /** * The book being exported. */ const Book *m_Book; /** * The IO device that we are writing to. */ QIODevice &m_IODevice; /** * The XML writer used to write XML. */ QXmlStreamWriter *m_Writer; }; #endif // XMLWRITER_H Sigil-0.9.9/src/Form_Files/000077500000000000000000000000001321676412500154235ustar00rootroot00000000000000Sigil-0.9.9/src/Form_Files/About.ui000066400000000000000000000222051321676412500170350ustar00rootroot00000000000000 About 0 0 332 309 About 0 0 16777215 80 :/about/Sigil_logo.png Qt::AlignCenter 0 32 14 The EPUB Editor Qt::AlignHCenter|Qt::AlignTop 0 General 0 0 0 0 3 3 3 3 10 Homepage: 10 <a href="http://code.google.com/p/sigil/">http://code.google.com/p/sigil/</a> Qt::AutoText 5 true Qt::TextBrowserInteraction 10 Version: 10 VERSION HERE 5 10 Loaded Qt: 10 ArrowCursor LOADED QT VERSION HERE 5 10 <a href="http://www.gnu.org/licenses/gpl-3.0-standalone.html">GNU General Public License v3</a> 5 true 10 Build time: 10 BUILD TIME HERE 5 10 License: Authors 0 0 0 0 Qt::Horizontal QDialogButtonBox::Ok true buttonBox accepted() About accept() 248 254 157 274 buttonBox rejected() About reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/AddMetadata.ui000066400000000000000000000052411321676412500201150ustar00rootroot00000000000000 AddMetadata 0 0 600 600 Add metadata property Qt::Vertical 7 false QAbstractItemView::ExtendedSelection true 0 0 600 100 Metadata description Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() AddMetadata accept() 257 290 157 274 buttonBox rejected() AddMetadata reject() 325 290 286 274 Sigil-0.9.9/src/Form_Files/AddSemantics.ui000077500000000000000000000054761321676412500203400ustar00rootroot00000000000000 AddSemantics 0 0 224 700 Add Semantic Property Qt::Vertical 7 false 200 200 QAbstractItemView::ExtendedSelection true 0 0 200 150 Description of Semantic Properties Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() AddSemantics accept() 257 290 157 274 buttonBox rejected() AddSemantics reject() 325 290 286 274 Sigil-0.9.9/src/Form_Files/ClipEditor.ui000066400000000000000000000177051321676412500200320ustar00rootroot00000000000000 ClipEditor 0 0 800 440 Clip Editor Filter Name: Filter All: List only the entries containing the text you enter. 1 1 QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed true Paste the selected entry into the active window. Paste Clip Qt::Vertical QSizePolicy::Fixed 20 20 Add Entry Add Group Qt::Vertical QSizePolicy::Fixed 20 20 Move an entry up one entry in the same group. ... Qt::UpArrow Qt::Horizontal 1 20 Move an entry to the level of its parent. ... Qt::LeftArrow Qt::Horizontal QSizePolicy::Fixed 15 10 You must select an item immediately under a group to move it into the group. ... Qt::RightArrow Qt::Horizontal 1 20 Move an entry down one in the group. ... Qt::DownArrow Qt::Vertical QSizePolicy::Fixed 20 20 Qt::Vertical 20 40 true QDialogButtonBox::Close|QDialogButtonBox::Save ClipEditorTreeView QTreeView
MiscEditors/ClipEditorTreeView.h
Sigil-0.9.9/src/Form_Files/ClipboardHistorySelector.ui000066400000000000000000000045311321676412500227470ustar00rootroot00000000000000 ClipboardHistorySelector 0 0 300 453 Select Text to Paste Recent clipboards: Arial 8 QAbstractItemView::SingleSelection QAbstractItemView::SelectRows 2 false false QDialogButtonBox::Abort|QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() ClipboardHistorySelector accept() 149 558 149 289 buttonBox rejected() ClipboardHistorySelector reject() 149 540 149 280 Sigil-0.9.9/src/Form_Files/DeleteFiles.ui000066400000000000000000000027401321676412500201520ustar00rootroot00000000000000 DeleteFiles 0 0 376 457 Delete Files QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox rejected() DeleteFiles reject() 187 434 187 228 buttonBox accepted() DeleteFiles accept() 187 434 187 228 Sigil-0.9.9/src/Form_Files/DeleteStyles.ui000066400000000000000000000027451321676412500204000ustar00rootroot00000000000000 DeleteStyles 0 0 376 457 Delete Styles QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox rejected() DeleteStyles reject() 187 434 187 228 buttonBox accepted() DeleteStyles accept() 187 434 187 228 Sigil-0.9.9/src/Form_Files/EditTOC.ui000066400000000000000000000144521321676412500172230ustar00rootroot00000000000000 EditTOC 0 0 611 445 Edit Table Of Contents 1 1 false false false true 15 true Insert a blank entry above the currently selected entry. Add Above Add a blank entry below the currently selected entry. Add Below Delete the selected TOC entry Delete Set the destination of the TOC entry from a list of valid targets in the book. Select Target Qt::Vertical QSizePolicy::Fixed 20 20 Decrease the heading level of the selected entry. You can also use the left arrow key. Qt::LeftArrow ... Qt::UpArrow ... Qt::DownArrow Increase the heading level of the selected entry. You can also use the right arrow key. Qt::RightArrow Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok false buttonBox accepted() EditTOC accept() 248 254 157 274 buttonBox rejected() EditTOC reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/FindReplace.ui000066400000000000000000000353651321676412500201520ustar00rootroot00000000000000 FindReplace 0 0 566 93 0 0 Find & Replace 0 0 QFrame::StyledPanel QFrame::Raised 0 0 0 0 Hide Find and Replace border: 0px; ... :/main/widget-close-48.png:/main/widget-close-48.png 24 24 false Qt::NoArrow Qt::Vertical 20 40 0 0 Show/Hide Advanced Options border: 0px; ... :/main/chevron-down_48px.png:/main/chevron-down_48px.png 24 24 false Qt::NoArrow 3 3 1 3 2 Find: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true 25 QComboBox::AdjustToMinimumContentsLengthWithIcon false 0 0 Find next match. Find 0 0 Replace highlighted match (if any), then find the Next match in Code View. Replace/Find Replace: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true 25 QComboBox::AdjustToMinimumContentsLengthWithIcon false 0 0 Replace highlighted match (if any) in Code View. Replace 0 0 Replace all matches in Code View. Replace All Options: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter For Regex searches, prefix your search with (?s). DotAll For Regex searches, prefix your search with (?U). Minimal Match For Regex searches, tokenise/escape selection when opening Find. Auto-Tokenise Search from current position to end of the current file or book, and then wrap to the other end to continue searching. Wrap Qt::Horizontal 40 0 0 0 0 22 Count all matches in Code View. Count All Mode: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 40 20 75 true cbFind cbReplace chkRegexOptionDotAll chkRegexOptionMinimalMatch chkRegexOptionAutoTokenise cbSearchMode cbLookWhere cbSearchDirection findNext replaceFind replaceCurrent replaceAll count close PasteTargetComboBox QComboBox
Misc/PasteTargetComboBox.h
Sigil-0.9.9/src/Form_Files/HeadingSelector.ui000066400000000000000000000135701321676412500210300ustar00rootroot00000000000000 HeadingSelector 0 0 611 445 Generate Table Of Contents 1 1 false false false true 15 true Change the name of the entry in the TOC. The heading's title attribute will be updated in the document. Rename Qt::Vertical QSizePolicy::Fixed 20 20 Decrease the heading level of the selected entry by 1. The heading's tag will be updated in the document. You can also use the left arrow key. Qt::LeftArrow Increase the heading level of the selected entry by 1. The heading's tag will be updated in the document. You can also use the right arrow key. Qt::RightArrow Qt::Vertical 20 40 Only display the items that will be added to the Table Of Contents. Check or uncheck an entry to determine if it will be added to the TOC. Show TOC items only true 0 0 Qt::ClickFocus Quickly mark which headings are included in the TOC. You can then check or uncheck individual headings in the list above. QComboBox::AdjustToContents Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok false buttonBox accepted() HeadingSelector accept() 248 254 157 274 buttonBox rejected() HeadingSelector reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/IndexEditor.ui000066400000000000000000000051641321676412500202060ustar00rootroot00000000000000 IndexEditor 0 0 800 440 Index Editor Filter: List only the entries containing the text you enter. QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed true Add Entry Qt::Vertical 20 40 QDialogButtonBox::Close|QDialogButtonBox::Save IndexEditorTreeView QTreeView
MiscEditors/IndexEditorTreeView.h
Sigil-0.9.9/src/Form_Files/LinkStylesheets.ui000066400000000000000000000067061321676412500211250ustar00rootroot00000000000000 LinkStylesheets 0 0 408 328 Link StyleSheets false false true QAbstractItemView::SingleSelection true Move the selected stylesheets up in priority. Stylesheets that are listed first take precedence over later stylesheets. Up Qt::UpArrow Move the selected stylesheets down in priority. Down Qt::DownArrow Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok false buttonBox accepted() LinkStylesheets accept() 248 254 157 274 buttonBox rejected() LinkStylesheets reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/MetaEditor.ui000066400000000000000000000127321321676412500200240ustar00rootroot00000000000000 MetaEditor 0 0 751 503 0 0 MetaData Editor 0 0 0 Qt::Vertical 20 40 Add a new metadata element. Add Metadata Remove a metadata element or property. Remove Add a new property or attribute to an existing metadata element. Add Property Qt::Vertical 20 40 Move selected metadata element or property up. ... Qt::UpArrow Move selected metadata element or property down. ... Qt::DownArrow true 0 0 600 450 0 0 Double-click in cell to edit its value. Minimum metadata consists of main language, title, and at least one creator. true QAbstractItemView::SelectItems QAbstractItemView::ScrollPerPixel false true Use OK to commit your metdata changes to the epub, otherwise use Cancel. QDialogButtonBox::Cancel|QDialogButtonBox::Ok Sigil-0.9.9/src/Form_Files/OpenWithName.ui000066400000000000000000000057731321676412500203340ustar00rootroot00000000000000 OpenWithName 0 0 504 132 Open With Application Name Enter the name to display in the Open With menu for this application: Qt::Vertical QSizePolicy::Fixed 20 10 Filename: Menu Name: No File Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Ok buttonBox accepted() OpenWithName accept() 248 254 157 274 buttonBox rejected() OpenWithName reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/PAppearanceWidget.ui000066400000000000000000000413531321676412500213130ustar00rootroot00000000000000 AppearanceWidget 0 0 425 512 Appearance 0 Fonts / Colors Book View / Preview: If no font is specified in the CSS for your page, the following font will be used to display within Sigil. These fonts will not be used in your actual ebook. true 80 0 Default font size to be used for Book View and Preview if no font-size specified in your CSS Font Size: Qt::Horizontal 0 20 6 99 Default font family to be used for Book View and Preview if no font-family specified in your CSS Standard Font: Default font family to be used for Book View and Preview if a serif font-family specified in your CSS Serif Font: Default font family to be used for Book View and Preview if a sans-serif font-family specified in your CSS Sans-Serif Font: Qt::Horizontal 0 20 Qt::Vertical QSizePolicy::Fixed 0 10 CSS / Code View: Item Colors: 80 0 Font size to be used for text in Code View. Font Size: Qt::Horizontal 0 20 6 Font family to be used for text in Code View. Standard Font: QFontComboBox::MonospacedFonts 220 90 0 0 90 0 Select an alternative color for this display item Custom Color... Qt::Vertical QSizePolicy::Fixed 0 10 Insert Special Characters: 80 0 Font size to be used for Insert Special Characters window Font Size: Qt::Horizontal 0 20 6 99 Font family to be used for Insert Special Characters window Standard Font: Qt::Horizontal 0 0 Qt::Vertical 20 0 Menus Main Menu Icon Size Adjust the size of the icons in the main menu. true 10 30 18 18 Qt::Horizontal QSlider::TicksBothSides 1 Qt::Vertical 20 40 Qt::Vertical 20 40 0 0 Reset all fonts and colors to the default values Reset All Qt::Horizontal 40 20 Sigil-0.9.9/src/Form_Files/PGeneralSettingsWidget.ui000066400000000000000000000231711321676412500223500ustar00rootroot00000000000000 GeneralSettingsWidget 0 0 652 598 General Settings Choose which version of Epub to use when creating new or empty Epubs in Sigil. Create New or Empty Epubs as: Epub Version 2. Version 2 true Epub Version 3. Version 3 false Choose when your HTML code is automatically mended. Mend XHTML Source Code On: Mend when opening an Epub or HTML file, and when switching from Book View to Code View. Open Mend when saving an Epub. Save Determine if Epubs are allowed to access non-multimedia remote resources. Control Access by Epubs to non-multimedia remote resources. Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Check to allow Epubs to access non-multimedia remote resources. Epubs may access all remote resources types. false 0 0 What CSS level to specify for W3C stylesheet validation tool (EPUB2) EPUB2 W3C Stylesheet Validation Level: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter W3C stylesheet validator will use CSS level 2 for EPUB2 CSS Level 2 W3C stylesheet validator will use CSS level 2.1 for EPUB2 CSS Level 2.1 true W3C stylesheet validator will use CSS level 3 for EPUB2 CSS Level 3 false 0 0 What CSS Level to specify for W3C stylesheet validation tool (EPUB3) EPUB3 W3C Stylesheet Validation Level: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter W3C stylesheet validator will use CSS level 2 for EPUB3 CSS Level 2 W3C stylesheet validator will use CSS level 2.1 for EPUB3 CSS Level 2.1 false W3C stylesheet validator will use CSS level 3 for EPUB3 CSS Level 3 true Number of clipboard history items to save between sessions (0 disables): 16777215 16777215 Use to limit (or disable) clipboard history saving between sessions 0 20 20 Qt::Horizontal 40 20 Set Folder where temporary files should be created Auto Browse Qt::Vertical 20 11 Sigil-0.9.9/src/Form_Files/PKeyboardShortcutsWidget.ui000077500000000000000000000113271321676412500227340ustar00rootroot00000000000000 KeyboardShortcutsWidget 0 0 568 451 Keyboard Shortcuts 6 0 0 0 List only the entries containing the text you enter. Filter: false true true 3 Name Shortcut Description Reset all to default Reset All Qt::Horizontal 40 20 Press the key combination you want to use. Shortcut: Press the key combination you want to use. false 0 0 Assign this keyboard shortcut, overriding any conflicting usages. Assign 16 16 false Remove this keyboard shortcut. Remove Qt::RichText Sigil-0.9.9/src/Form_Files/PLanguageWidget.ui000066400000000000000000000052171321676412500207760ustar00rootroot00000000000000 LanguageWidget 0 0 400 300 Language 6 0 0 0 You must restart Sigil after changing the User Interface language. If a translation for specific word or phrase is not available it will be displayed in English. Use Preferences->Spellcheck Dictionaries to set the Spellcheck dictionary. User Interface Language: Set the default language used by the Metadata Editor for new books. Default Language For Metadata: Qt::Horizontal 40 20 Qt::Vertical 20 100 Sigil-0.9.9/src/Form_Files/PPluginWidget.ui000066400000000000000000000173251321676412500205140ustar00rootroot00000000000000 PluginWidget 0 0 681 398 Plugins Assign as Plugin 1 0 1 QAbstractItemView::NoEditTriggers true QAbstractItemView::SingleSelection QAbstractItemView::SelectRows true true true false false false true Name Version Author Type Interpreter 0 0 ≥Python3.4: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal Auto Set Qt::Vertical 20 40 Plugins Add Plugin Remove All Remove Plugin Qt::Vertical 20 40 417 16777215 Path to Interpreter Executable false Should the bundled Python interpreter be used if present? Use Bundled Python Assign as Plugin 2 Assign as Plugin 3 Assign as Plugin 4 Assign as Plugin 5 Sigil-0.9.9/src/Form_Files/PPreserveEntitiesWidget.ui000066400000000000000000000050301321676412500225440ustar00rootroot00000000000000 PreserveEntitiesWidget 0 0 574 367 Preserve Entities 6 0 0 0 Entities to Preserve QAbstractItemView::ExtendedSelection Enter or paste entities to add to the list. Entities can be separated by lines, commas, or spaces. Add Remove Remove All Qt::Vertical 10 50 Sigil-0.9.9/src/Form_Files/PSpellCheckWidget.ui000066400000000000000000000205741321676412500212730ustar00rootroot00000000000000 SpellCheckWidget 0 0 574 367 Spellcheck Dictionaries 6 0 0 0 Dictionary: 0 0 Qt::Horizontal 40 20 Highlight misspelled words in Code View. Highlight Misspelled Words Check words with numbers in them. Check Numbers Qt::Vertical QSizePolicy::Maximum 20 10 Qt::Horizontal Qt::Vertical QSizePolicy::Maximum 20 10 User Dictionaries Add Rename Copy Remove Remove the selected dictionary. You cannot remove the last dictionary. Qt::Vertical 20 40 Mark which dictionaries are enabled for spell checking. Select a dictionary to display its words, and to make it the default dictionary. User Dictionary Word List QAbstractItemView::ExtendedSelection Enter or paste words to add to the dictionary. Words can be separated by lines, commas, or spaces. Add Edit Remove Remove All Qt::Vertical 20 40 The default dictionary is used when you add words to the default dictionary or use the shortcuts for Add Misspelled Words. Default Dictionary: none Qt::Horizontal 40 20 Sigil-0.9.9/src/Form_Files/PluginRunner.ui000066400000000000000000000112771321676412500204220ustar00rootroot00000000000000 PluginRunner 0 0 789 550 Plugin Runner 0 0 Plugin: 0 0 Start 0 0 Cancel 1 1 true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'.Lucida Grande UI'; font-size:13pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> true Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse Message 0 0 Details... OK false 0 0 0 -1 false Status: Sigil-0.9.9/src/Form_Files/Preferences.ui000066400000000000000000000047711321676412500202340ustar00rootroot00000000000000 Preferences 0 0 800 600 Preferences 200 0 200 16777215 0 0 QAbstractItemView::SelectRows 0 0 Qt::Horizontal QDialogButtonBox::Ok|QDialogButtonBox::Reset buttonBox accepted() Preferences accept() 248 254 157 274 buttonBox rejected() Preferences reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/RenameTemplate.ui000066400000000000000000000053141321676412500206700ustar00rootroot00000000000000 RenameTemplate 0 0 497 87 0 0 Rename Files Enter the starting name to use for renaming all selected files, e.g.: filename001 filename08.xhtml .html All numbers at the END of the filename you enter will be replaced sequentially starting at the number provided (default is 1 if no number is provided), with leading 0's added to match the number of digits used. If you provide a file extension it will be used for all files, otherwise the current extensions will be kept. If you just provide a file extension (e.g. .xhtml) then only file extensions will be updated. Be careful that any extension you use is valid for all selected files. Rename Files Starting At: Section0001 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() RenameTemplate accept() 20 20 20 20 buttonBox rejected() RenameTemplate reject() 20 20 20 20 Sigil-0.9.9/src/Form_Files/Reports.ui000066400000000000000000000037641321676412500174320ustar00rootroot00000000000000 Reports 0 0 1000 600 Reports 200 0 200 16777215 0 0 QAbstractItemView::SelectRows Refresh 0 0 Sigil-0.9.9/src/Form_Files/ReportsAllFilesWidget.ui000066400000000000000000000041761321676412500222100ustar00rootroot00000000000000 AllFilesWidget 0 0 1000 600 All Files 6 0 0 0 List only the file names which contain the text you enter. Filter: 0 0 false true QAbstractItemView::ExtendedSelection false true QDialogButtonBox::Close|QDialogButtonBox::Save Sigil-0.9.9/src/Form_Files/ReportsCSSFilesWidget.ui000066400000000000000000000043521321676412500221240ustar00rootroot00000000000000 CSSFilesWidget 0 0 1000 600 CSS Files 6 0 0 0 List only the file names which contain the text you enter. Filter: 0 0 false true QAbstractItemView::ExtendedSelection false true QDialogButtonBox::Close|QDialogButtonBox::Save Sigil-0.9.9/src/Form_Files/ReportsCharactersInHTMLFilesWidget.ui000066400000000000000000000051321321676412500245240ustar00rootroot00000000000000 CharactersInHTMLFilesWidget 0 0 1000 600 Characters in HTML Files 6 0 0 0 List only the file names which contain the text you enter. Filter: 0 0 false true QAbstractItemView::ExtendedSelection false true Characters: true QDialogButtonBox::Close|QDialogButtonBox::Save Sigil-0.9.9/src/Form_Files/ReportsClassesInHTMLFilesWidget.ui000066400000000000000000000042421321676412500240430ustar00rootroot00000000000000 ClassesInHTMLFilesWidget 0 0 1000 600 Style Classes in HTML Files 6 0 0 0 List only the file names which contain the text you enter. Filter: 0 0 false true QAbstractItemView::ExtendedSelection false true QDialogButtonBox::Close|QDialogButtonBox::Save Sigil-0.9.9/src/Form_Files/ReportsHTMLFilesWidget.ui000066400000000000000000000042011321676412500222310ustar00rootroot00000000000000 HTMLFilesWidget 0 0 1000 600 HTML Files 6 0 0 0 List only the file names which contain the text you enter. Filter: 0 0 false true QAbstractItemView::ExtendedSelection false true QDialogButtonBox::Close|QDialogButtonBox::Save Sigil-0.9.9/src/Form_Files/ReportsImageFilesWidget.ui000066400000000000000000000063571321676412500225250ustar00rootroot00000000000000 ImageFilesWidget 0 0 1000 600 Image Files 6 0 0 0 List only the file names which contain the text you enter. Filter: 0 0 false true QAbstractItemView::ExtendedSelection false true Thumbnail size: :/main/list-remove_48px.png:/main/list-remove_48px.png :/main/list-add_48px.png:/main/list-add_48px.png Qt::Horizontal 40 20 QDialogButtonBox::Close|QDialogButtonBox::Save Sigil-0.9.9/src/Form_Files/ReportsLinksWidget.ui000066400000000000000000000041641321676412500215720ustar00rootroot00000000000000 LinksWidget 0 0 1000 600 Links 6 0 0 0 List only the file names which contain the text you enter. Filter: 0 0 false true QAbstractItemView::ExtendedSelection false true QDialogButtonBox::Close|QDialogButtonBox::Save Sigil-0.9.9/src/Form_Files/ReportsStylesInCSSFilesWidget.ui000066400000000000000000000042351321676412500236170ustar00rootroot00000000000000 StylesInCSSFilesWidget 0 0 1000 600 Style Classes in CSS Files 6 0 0 0 List only the file names which contain the text you enter. Filter: 0 0 false true QAbstractItemView::ExtendedSelection false true QDialogButtonBox::Close|QDialogButtonBox::Save Sigil-0.9.9/src/Form_Files/SearchEditor.ui000066400000000000000000000256731321676412500203530ustar00rootroot00000000000000 SearchEditor 0 0 644 578 Saved Searches Filter Name: Filter All: List only the entries containing the text you enter. 1 1 QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed true Load the selected entry into the Find & Replace window. Load Search Qt::Vertical QSizePolicy::Fixed 20 20 Run Find using the selected entry. If a group is selected, find the first entry in the list, then if not found look for the second entry in the list, etc. Find Run Replace using the selected entry. If a group is selected, loop through each entry and stop at the first successful replace. Replace Qt::Vertical QSizePolicy::Fixed 20 10 Run Replace/Find using the selected entry. If a group is selected, loop through each entry and stop at the first successful replace/find. Replace/Find Run Replace All for the selected entries in the order selected. Select a group to replace all entries in the group in order. Replace All Qt::Vertical QSizePolicy::Fixed 20 10 Run Count All for the selected entries in the order selected, including entries in selected groups. Count All Qt::Vertical QSizePolicy::Fixed 20 20 Move an entry up one level in the same group. ... Qt::UpArrow Qt::Horizontal 1 1 Move an entry to the level of its parent. ... Qt::LeftArrow Qt::Horizontal QSizePolicy::Fixed 15 20 You must select an item immediately under a group to move it into the group. ... Qt::RightArrow Qt::Horizontal 1 1 Move an entry down one level in the same group. ... Qt::DownArrow Qt::Vertical QSizePolicy::Fixed 20 20 Qt::Vertical 20 40 75 true Click Apply to load Find & Replace with the selected search. Click OK to load your search, save your data, and close. QDialogButtonBox::Close|QDialogButtonBox::Save SearchEditorTreeView QTreeView
MiscEditors/SearchEditorTreeView.h
Sigil-0.9.9/src/Form_Files/SelectCharacter.ui000066400000000000000000000007361321676412500210240ustar00rootroot00000000000000 SelectCharacter 0 0 355 96 Insert Special Character Sigil-0.9.9/src/Form_Files/SelectFiles.ui000066400000000000000000000160221321676412500201650ustar00rootroot00000000000000 SelectFiles 0 0 800 600 Insert File 100 0 100 16777215 List only the file names which contain the text you enter. Filter: Choose which image, video, or audio files from your computer to add to your book and automatically insert into your document. Other Files... 0 0 Qt::Horizontal 10 false 0 0 500 16777215 Qt::ScrollBarAsNeeded false true QAbstractItemView::ExtendedSelection false Thumbnail size: :/main/list-remove_48px.png:/main/list-remove_48px.png :/main/list-add_48px.png:/main/list-add_48px.png Qt::Horizontal 40 20 Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse Qt::Vertical QSizePolicy::Fixed 20 10 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() SelectFiles accept() 248 254 157 274 buttonBox rejected() SelectFiles reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/SelectHyperlink.ui000066400000000000000000000055161321676412500210760ustar00rootroot00000000000000 SelectHyperlink 0 0 549 468 Select Target List only the entries that match the text you enter. Filter: Qt::Vertical QSizePolicy::Fixed 20 20 Enter the target URL for this hyperlink. You can select or double click on existing destinations in your book from the list above. Target: Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() SelectHyperlink accept() 248 254 157 274 buttonBox rejected() SelectHyperlink reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/SelectId.ui000066400000000000000000000050641321676412500174630ustar00rootroot00000000000000 SelectId 0 0 504 100 Insert ID Enter an ID name to use as a destination for hyperlinks, notes, and TOC entries. The dropdown box shows existing ID names in the current file. ID names must be unique and start with a letter. ID: 0 0 true Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() SelectId accept() 248 254 157 274 buttonBox rejected() SelectId reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/SelectIndexTitle.ui000066400000000000000000000042261321676412500211770ustar00rootroot00000000000000 SelectIndexTitle 0 0 504 109 Mark For Index Enter the index entry to create for the selected text. Index Entry: Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() MarkForIndex accept() 248 254 157 274 buttonBox rejected() MarkForIndex reject() 316 260 286 274 Sigil-0.9.9/src/Form_Files/SpellcheckEditor.ui000066400000000000000000000167551321676412500212240ustar00rootroot00000000000000 SpellcheckEditor 0 0 600 600 Spellcheck Filter: List only the entries containing the text you enter. 1 1 QAbstractItemView::ExtendedSelection true Ignore the selected words until Sigil is restarted or a new book is opened. Ignore Qt::Vertical QSizePolicy::Fixed 20 20 0 0 Add the selected words to the dictionary selected below. Add To Dictionary: 0 0 150 16777215 Qt::Vertical QSizePolicy::Fixed 20 20 Change all occurrences of the selected word in HTML files to the word you select or type below. The selected word does not have to be misspelled. Change Selected Word To: true 25 QComboBox::AdjustToMinimumContentsLengthWithIcon false Qt::Vertical 20 40 Show All Words Sort words as AaBbCc instead of ABCabc. Case-Insensitive Sort Qt::Horizontal 40 20 Re-check the HTML files for misspelled words. Use if you edit any HTML files while Spellcheck is open. Refresh Qt::Horizontal 40 20 QDialogButtonBox::Ok buttonBox accepted() SpellcheckEditor accept() 399 416 399 219 Sigil-0.9.9/src/Form_Files/ViewImage.ui000066400000000000000000000022411321676412500176360ustar00rootroot00000000000000 ViewImage 0 0 600 800 0 0 View Image 0 0 about:blank QWebView QWidget
QtWebKitWidgets/QWebView
Sigil-0.9.9/src/Form_Files/main.ui000066400000000000000000002303641321676412500167160ustar00rootroot00000000000000 MainWindow 0 0 1000 700 untitled.epub[*] - Sigil 24 24 Qt::ToolButtonIconOnly Qt::LeftToRight 0 0 0 0 0 0 0 1000 22 &File A&dd &Edit C&hange Case &Insert Cli&p &Help For&mat &Heading &View &Toolbars &Search Current Fil&e &Window &Tools &Table Of Contents Spe&llcheck &Index Re&format HTML Epub&3 Tools Plugins File TopToolBarArea false Edit TopToolBarArea false View TopToolBarArea false Insert TopToolBarArea false Back TopToolBarArea false Donate TopToolBarArea false Tools TopToolBarArea false false Heading TopToolBarArea true Format TopToolBarArea false Align TopToolBarArea false List TopToolBarArea false Indent TopToolBarArea false Change Case TopToolBarArea false Text Direction TopToolBarArea false Clip Bar TopToolBarArea true :/main/document-new_48px.png:/main/document-new_48px.png &New <p style="padding-top: 0.5em;" ><b>New</b></p> <p style="margin-left: 0.5em;">Create a new book.</p> Ctrl+N :/main/document-save_48px.png:/main/document-save_48px.png &Save <p style="padding-top: 0.5em;" ><b>Save</b></p> <p style="margin-left: 0.5em;">Save the current book.</p> Ctrl+S Save &As... <p style="padding-top: 0.5em;" ><b>Save As</b></p> <p style="margin-left: 0.5em;">Save the current book with a different filename.</p> Ctrl+Shift+S Save A &Copy... Save a copy of your book to another file name. :/main/edit-cut_48px.png:/main/edit-cut_48px.png Cu&t <p style="padding-top: 0.5em;" ><b>Cut</b></p> <p style="margin-left: 0.5em;">Cuts the selected text from the document and puts it on the clipboard.</p> :/main/edit-paste_48px.png:/main/edit-paste_48px.png &Paste <p style="padding-top: 0.5em;" ><b>Paste</b></p> <p style="margin-left: 0.5em;">Pastes the content from the clipboard into the book.</p> &Closing Tag Insert a closing tag in Code View. Ctrl+. :/main/edit-undo_48px.png:/main/edit-undo_48px.png &Undo <p style="padding-top: 0.5em;" ><b>Undo</b></p> <p style="margin-left: 0.5em;">Reverts the changes of the previous operation.</p> Ctrl+Z :/main/edit-redo_48px.png:/main/edit-redo_48px.png &Redo <p style="padding-top: 0.5em;" ><b>Redo</b></p> <p style="margin-left: 0.5em;">Restores the changes reverted by the previous Undo action.</p> Ctrl+Y :/main/edit-copy_48px.png:/main/edit-copy_48px.png &Copy <p style="padding-top: 0.5em;" ><b>Copy</b></p> <p style="margin-left: 0.5em;">Copies the selected text and puts it on the clipboard.</p> true :/main/format-justify-left_48px.png:/main/format-justify-left_48px.png Align &Left <p style="padding-top: 0.5em;" ><b>Align Left</b></p> <p style="margin-left: 0.5em;">Align the paragraph to the left.</p> true :/main/format-justify-right_48px.png:/main/format-justify-right_48px.png Align &Right <p style="padding-top: 0.5em;" ><b>Align Right</b></p> <p style="margin-left: 0.5em;">Align the paragraph to the right.</p> true :/main/format-justify-center_48px.png:/main/format-justify-center_48px.png &Center <p style="padding-top: 0.5em;" ><b>Center</b></p> <p style="margin-left: 0.5em;">Center the paragraph.</p> Ctrl+E true :/main/format-justify-fill_48px.png:/main/format-justify-fill_48px.png &Justify <p style="padding-top: 0.5em;" ><b>Justify</b></p> <p style="margin-left: 0.5em;">Align the paragraph to both the left and right margins.</p> Ctrl+J true :/main/format-text-bold_48px.png:/main/format-text-bold_48px.png &Bold <p style="padding-top: 0.5em;" ><b>Bold</b></p> <p style="margin-left: 0.5em;">Make the selected text bold.</p> Ctrl+B true :/main/format-text-italic_48px.png:/main/format-text-italic_48px.png &Italic <p style="padding-top: 0.5em;" ><b>Italic</b></p> <p style="margin-left: 0.5em;">Make the selected text italic.</p> Ctrl+I :/main/document-open_48px.png:/main/document-open_48px.png &Open... <p style="padding-top: 0.5em;" ><b>Open</b></p> <p style="margin-left: 0.5em;">Open a book from disk.</p> Ctrl+O true :/main/format-text-underline_48px.png:/main/format-text-underline_48px.png &Underline <p style="padding-top: 0.5em;" ><b>Underline</b></p> <p style="margin-left: 0.5em;">Underline the selected text.</p> Ctrl+U :/main/process-stop_48px.png:/main/process-stop_48px.png &Quit Exit Ctrl+Q :/main/help-browser_48px.png:/main/help-browser_48px.png &About... Show information about Sigil. Add &Cover... <p style="padding-top: 0.5em;" ><b>Add Cover</b></p> <p style="margin-left: 0.5em;">Add a cover.</p> :/main/metadata-editor_48px.png:/main/metadata-editor_48px.png &Metadata Editor... <p style="padding-top: 0.5em;" ><b>Metadata Editor</b></p> <p style="margin-left: 0.5em;">Edit and display information about your book including the author and title.</p> F8 :/main/generate-toc_48px.png:/main/generate-toc_48px.png &Generate Table Of Contents... <p style="padding-top: 0.5em;" ><b>Generate Table of Contents</b></p> <p style="margin-left: 0.5em;">Generate a new Table of Contents from headings in your book.</p> Ctrl+T &Edit Table Of Contents... <p style="padding-top: 0.5em;" ><b>Edit Table of Contents</b></p> <p style="margin-left: 0.5em;">Directly edit the existing Table of Contents.</p> true :/main/view-book_48px.png:/main/view-book_48px.png &Book View <p style="padding-top: 0.5em;" ><b>Book View</b></p> <p style="margin-left: 0.5em;">Edit and display the files in your book as they will appear to readers.</p> true :/main/view-code_48px.png:/main/view-code_48px.png &Code View <p style="padding-top: 0.5em;" ><b>Code View</b></p> <p style="margin-left: 0.5em;">Edit and display the actual contents of the files in your book, including the formatting codes that control how your book will appear to readers.</p> &Toggle View State Toggle Book View to Code View or Code View to Book View F2 :/main/split-section_48px.png:/main/split-section_48px.png &Split At Cursor <p style="padding-top: 0.5em;" ><b>Split At Cursor</b></p> <p style="margin-left: 0.5em;">Split the current file into two files using your cursor location as the dividing point.</p> Ctrl+Return :/main/insert-image_48px.png:/main/insert-image_48px.png &File... <p style="padding-top: 0.5em;" ><b>Insert File</b></p> <p style="margin-left: 0.5em;">Select image, video or audio files from your book to insert into the text.</p> <p style="margin-left: 0.5em;">You can add files to your book by using the menu File - Add - Existing Files.</p> Ctrl+Shift+I :/main/insert-special-character_48px.png:/main/insert-special-character_48px.png &Special Character... <p style="padding-top: 0.5em;" ><b>Insert Special Character</b></p> <p style="margin-left: 0.5em;">Select a character to insert into your text.</p> :/main/insert-id_48px.png:/main/insert-id_48px.png I&D... <p style="padding-top: 0.5em;" ><b>Insert ID</b></p> <p style="margin-left: 0.5em;">Insert or edit an anchor with an ID name to use as a link target.</p> :/main/insert-hyperlink_48px.png:/main/insert-hyperlink_48px.png &Link... <p style="padding-top: 0.5em;" ><b>Insert Link</b></p> <p style="margin-left: 0.5em;">Insert or edit an anchor with a hyperlink to a target.</p> true :/main/insert-numbered-list_48px.png:/main/insert-numbered-list_48px.png &Numbered List <p style="padding-top: 0.5em;" ><b>Numbering</b></p> <p style="margin-left: 0.5em;">Create a numbered list.</p> true :/main/insert-bullet-list_48px.png:/main/insert-bullet-list_48px.png Bulle&ted List <p style="padding-top: 0.5em;" ><b>Bullets</b></p> <p style="margin-left: 0.5em;">Create a bulleted list.</p> Ctrl+Shift+L true :/main/format-text-strikethrough_48px.png:/main/format-text-strikethrough_48px.png Stri&kethrough <p style="padding-top: 0.5em;" ><b>Strikethrough</b></p> <p style="margin-left: 0.5em;">Draw a line through the selected text.</p> true :/main/format-text-subscript_48px.png:/main/format-text-subscript_48px.png &Subscript <p style="padding-top: 0.5em;" ><b>Subscript</b></p> <p style="margin-left: 0.5em;">Set the selected text slightly smaller and below the normal line.</p> true :/main/format-text-superscript_48px.png:/main/format-text-superscript_48px.png Su&perscript <p style="padding-top: 0.5em;" ><b>Superscript</b></p> <p style="margin-left: 0.5em;">Set the selected text slightly smaller and above the normal line.</p> :/main/document-print_48px.png:/main/document-print_48px.png &Print... Print Ctrl+P :/main/document-print-preview_48px.png:/main/document-print-preview_48px.png Print Pre&view... Print Preview Close Close Ctrl+Shift+W :/main/list-add_48px.png:/main/list-add_48px.png Zoom &In Zoom In Ctrl+= :/main/list-remove_48px.png:/main/list-remove_48px.png Zoom &Out Zoom Out Ctrl+- Sho&w Tag Show the enclosing tag HTML for the cursor position in Book View. Ctrl+Alt+T :/main/edit-find_48px.png:/main/edit-find_48px.png &Find && Replace... <p style="padding-top: 0.5em;" ><b>Find &amp; Replace</b></p> <p style="margin-left: 0.5em;">Find and replace text in the document.</p> Ctrl+F :/main/format-indent-more_48px.png:/main/format-indent-more_48px.png Incre&ase Indent <p style="padding-top: 0.5em;" ><b>Increase Indent</b></p> <p style="margin-left: 0.5em;">Increase the indent level of the paragraph.</p> Ctrl+Alt+M :/main/format-indent-less_48px.png:/main/format-indent-less_48px.png &Decrease Indent <p style="padding-top: 0.5em;" ><b>Decrease Indent</b></p> <p style="margin-left: 0.5em;">Decrease the indent level of the paragraph.</p> Ctrl+Shift+M :/main/format-direction-ltr_48px.png:/main/format-direction-ltr_48px.png Te&xt Direction LTR <p style="padding-top: 0.5em;" ><b>Left-to-Right</b></p> <p style="margin-left: 0.5em;">Set paragraph direction left to right.</p> :/main/format-direction-rtl_48px.png:/main/format-direction-rtl_48px.png T&ext Direction RTL <p style="padding-top: 0.5em;" ><b>Right-to-Left</b></p> <p style="margin-left: 0.5em;">Set paragraph direction right to left.</p> :/main/format-direction-default_48px.png:/main/format-direction-default_48px.png Text Directi&on Default <p style="padding-top: 0.5em;" ><b>Default</b></p> <p style="margin-left: 0.5em;">Set paragraph direction to inherit from default.</p> Remove &Formatting Ctrl+Space :/main/format-case-lowercase_48px.png:/main/format-case-lowercase_48px.png &Lowercase <p style="padding-top: 0.5em;" ><b>Lowercase</b></p> <p style="margin-left: 0.5em;">Set selected text to lowercase.</p> Alt+L :/main/format-case-uppercase_48px.png:/main/format-case-uppercase_48px.png &Uppercase <p style="padding-top: 0.5em;" ><b>Uppercase</b></p> <p style="margin-left: 0.5em;">Set selected text to uppercase.</p> Alt+U :/main/format-case-titlecase_48px.png:/main/format-case-titlecase_48px.png &Titlecase <p style="padding-top: 0.5em;" ><b>Titlecase</b></p> <p style="margin-left: 0.5em;">Capitalize the first letter of each word selected.</p> :/main/format-case-capitalize_48px.png:/main/format-case-capitalize_48px.png &Capitalize <p style="padding-top: 0.5em;" ><b>Capitalize</b></p> <p style="margin-left: 0.5em;">Capitalize only the first word of the selected text.</p> Sigil Website... &Next Tab Ctrl+PgUp &Previous Tab Ctrl+PgDown &Close Tab Ctrl+W Split At &Markers Split At Sigil split file markers F6 Split &Marker Insert Sigil split file marker Ctrl+Shift+Return User &Guide... User Guide F1 &Frequently Asked Questions... Frequently Asked Questions &Tutorials... Tutorials Well-Formed Check &EPUB <html><head/><body><p><span style=" font-weight:600;">Well-Formed Check EPUB</span></p><p>Verify your document complies with minimum needed to be successfully parsed. This does not indicate compliance with the relevant epub standards.</p></body></html> F7 Validate Stylesheets With &W3C <p style="padding-top: 0.5em;" ><b>Validate Stylesheets with W3C</b></p> <p style="margin-left: 0.5em;">Verify your CSS stylesheets comply with W3C standards using the online W3C CSS Validation Service.</p> :/main/document-spellcheck_48px.png:/main/document-spellcheck_48px.png &Spellcheck... <p style="padding-top: 0.5em;" ><b>Spellcheck</b></p> <p style="margin-left: 0.5em;">Find all misspelled words and allow you to add them to a dictionary or ignore them.</p> Alt+Q true &Highlight Misspelled Words Enable or disable highlighting of misspelled words in Code View. &Next Misspelled Word Find the next misspelled word in the book. F4 &Add Misspelled Word Add the current misspelled word under the caret to the default user dictionary. &Ignore Misspelled Word Ignore the current misspelled word under the caret until Sigil is restarted. &Clear Ignored Words Clear currently ignored words from Spellcheck without having to restart Sigil. &Index Editor... Ctrl+Alt+I &Delete Unused Media Files... Delete &Unused Stylesheet Classes... &Reports... Ctrl+Shift+R :/main/emblem-favorite_48px.png:/main/emblem-favorite_48px.png &Donate... <p style="padding-top: 0.5em;" ><b>Donate</b></p> <p style="margin-left: 0.5em;">Donate to support Sigil.</p> Close &Other Tabs Ctrl+Alt+W Go To &Line... Ctrl+/ Find &Next Ctrl+G Find &Previous Ctrl+Shift+G Replace Ctrl+R &Replace/Find Next Ctrl+] R&eplace/Find Previous Ctrl+[ Replace &All Alt+A &Count All Alt+C Mar&k Selected Text Ctrl+Shift+M Find &Next In File &Replace Next In File Replace &All In File &Count All In File &Saved Searches... Ctrl+Alt+F &Clip Editor... Open the Clip Editor. Ctrl+Alt+C Clip &1 Insert Clip 1 Ctrl+Alt+1 Clip &2 Insert Clip 2 Ctrl+Alt+2 Clip &3 Insert Clip 3 Ctrl+Alt+3 Clip &4 Insert Clip 4 Ctrl+Alt+4 Clip &5 Insert Clip 5 Ctrl+Alt+5 Clip &6 Insert Clip 6 Ctrl+Alt+6 Clip &7 Insert Clip 7 Ctrl+Alt+7 Clip &8 Insert Clip 8 Ctrl+Alt+8 Clip &9 Insert Clip 9 Ctrl+Alt+9 Clip 1&0 Insert Clip 10 Ctrl+Alt+0 Clip 11 Insert Clip 11 Clip 12 Insert Clip 12 Clip 13 Insert Clip 13 Clip 14 Insert Clip 14 Clip 15 Insert Clip 15 Clip 16 Insert Clip 16 Clip 17 Insert Clip 17 Clip 18 Insert Clip 18 Clip 19 Insert Clip 19 Clip 20 Insert Clip 20 &Preferences... F5 &Zoom Reset Zoom Reset Ctrl+0 true :/main/heading-1_48px.png:/main/heading-1_43px.png Heading &1 <p style="padding-top: 0.5em;" ><b>Heading 1</b></p> <p style="margin-left: 0.5em;">Format paragraph as a level 1 heading.</p> Ctrl+1 true :/main/heading-2_48px.png:/main/heading-2_48px.png Heading &2 <p style="padding-top: 0.5em;" ><b>Heading 2</b></p> <p style="margin-left: 0.5em;">Format paragraph as a level 2 heading.</p> Ctrl+2 true :/main/heading-3_48px.png:/main/heading-3_48px.png Heading &3 <p style="padding-top: 0.5em;" ><b>Heading 3</b></p> <p style="margin-left: 0.5em;">Format paragraph as a level 3 heading.</p> Ctrl+3 true :/main/heading-4_48px.png:/main/heading-4_48px.png Heading &4 <p style="padding-top: 0.5em;" ><b>Heading 4</b></p> <p style="margin-left: 0.5em;">Format paragraph as a level 4 heading.</p> Ctrl+4 true :/main/heading-5_48px.png:/main/heading-5_48px.png Heading &5 <p style="padding-top: 0.5em;" ><b>Heading 5</b></p> <p style="margin-left: 0.5em;">Format paragraph as a level 5 heading.</p> Ctrl+5 true :/main/heading-6_48px.png:/main/heading-6_48px.png Heading &6 <p style="padding-top: 0.5em;" ><b>Heading 6</b></p> <p style="margin-left: 0.5em;">Format paragraph as a level 6 heading.</p> Ctrl+6 true :/main/heading-normal_48px.png:/main/heading-normal_48px.png &Normal <p style="padding-top: 0.5em;" ><b>Paragraph</b></p> <p style="margin-left: 0.5em;">Format paragraph as a normal paragraph.</p> Ctrl+7 true &Preserve Existing Attributes When applying this style, preserve any existing attributes on the tag Blank HTML File Add a new blank HTML file to the book. :/main/document-add_48px.png:/main/document-add_48px.png Existing Files... <p style="padding-top: 0.5em;" ><b>Add Existing Files</b></p> <p style="margin-left: 0.5em;">Add files from your computer to the book.</p> Blank Stylesheet Add a new blank stylesheet to the book. Blank SVG Image Add a new blank svg image file to the book. Pre&vious File Open previous file of the same type. Alt+PgUp Next &File Open next file of the same type. Alt+PgDown &Add To Index Editor Add the selected text to the Index Editor. &Mark For Index Mark the selected text for inclusion in the Index. Ctrl+Shift+X &Create Index Generate a new Index HTML file. &Create HTML Table Of Contents Create a new HTML file using the current TOC. Book&mark Location Ctrl+Alt+B &Go To Link Or Style F3 :/main/back-to-link-style_48px.png:/main/back-to-link-style_48px.png &Back <p style="padding-top: 0.5em;" ><b>Back</b></p> <p style="margin-left: 0.5em;">Go back to where you last went to a link or style, or bookmarked your location.</p> Ctrl+\ Edit/Paste From Clipboard &History... Ctrl+Alt+V &Delete Line Ctrl+D Manage Plugins :/main/plugin_48px_1pips.png:/main/plugin_48px_1pips.png Run Plugin 1 :/main/plugin_48px_2pips.png:/main/plugin_48px_2pips.png Run Plugin 2 :/main/plugin_48px_3pips.png:/main/plugin_48px_3pips.png Run Plugin 3 :/main/plugin_48px_4pips.png:/main/plugin_48px_4pips.png Run Plugin 4 :/main/plugin_48px_5pips.png:/main/plugin_48px_5pips.png Run Plugin 5 Mend and &Prettify All HTML Files &Mend All HTML Files &Update Manifest Properties Generate NC&X from Nav Sigil-0.9.9/src/Importers/000077500000000000000000000000001321676412500153625ustar00rootroot00000000000000Sigil-0.9.9/src/Importers/ImportEPUB.cpp000066400000000000000000000760761321676412500200340ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, Ontario, Canada ** Copyright (C) 2012 John Schember ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #ifdef _WIN32 #define NOMINMAX #endif #include "unzip.h" #ifdef _WIN32 #include "iowin32.h" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "BookManipulation/FolderKeeper.h" #include "BookManipulation/CleanSource.h" #include "Importers/ImportEPUB.h" #include "Misc/FontObfuscation.h" #include "Misc/HTMLEncodingResolver.h" #include "Misc/QCodePage437Codec.h" #include "Misc/SettingsStore.h" #include "Misc/Utility.h" #include "ResourceObjects/CSSResource.h" #include "ResourceObjects/HTMLResource.h" #include "ResourceObjects/OPFResource.h" #include "ResourceObjects/NCXResource.h" #include "ResourceObjects/Resource.h" #include "ResourceObjects/OPFParser.h" #include "SourceUpdates/UniversalUpdates.h" #include "sigil_constants.h" #include "sigil_exception.h" #ifndef MAX_PATH // Set Max length to 256 because that's the max path size on many systems. #define MAX_PATH 256 #endif // This is the same read buffer size used by Java and Perl. #define BUFF_SIZE 8192 const QString DUBLIN_CORE_NS = "http://purl.org/dc/elements/1.1/"; static const QString OEBPS_MIMETYPE = "application/oebps-package+xml"; static const QString UPDATE_ERROR_STRING = "SG_ERROR"; const QString NCX_MIMETYPE = "application/x-dtbncx+xml"; static const QString NCX_EXTENSION = "ncx"; const QString ADOBE_FONT_ALGO_ID = "http://ns.adobe.com/pdf/enc#RC"; const QString IDPF_FONT_ALGO_ID = "http://www.idpf.org/2008/embedding"; static const QString CONTAINER_XML = "\n" "\n" " \n" " \n" " \n" "\n"; static QCodePage437Codec *cp437 = 0; // Constructor; // The parameter is the file to be imported ImportEPUB::ImportEPUB(const QString &fullfilepath) : Importer(fullfilepath), m_ExtractedFolderPath(m_TempFolder.GetPath()), m_HasSpineItems(false), m_NCXNotInManifest(false), m_NavResource(NULL) { } // Reads and parses the file // and returns the created Book QSharedPointer ImportEPUB::GetBook(bool extract_metadata) { QList non_well_formed; SettingsStore ss; if (!Utility::IsFileReadable(m_FullFilePath)) { throw (EPUBLoadParseError(QString(QObject::tr("Cannot read EPUB: %1")).arg(QDir::toNativeSeparators(m_FullFilePath)).toStdString())); } // These read the EPUB file ExtractContainer(); QHash encrypted_files = ParseEncryptionXml(); if (BookContentEncrypted(encrypted_files)) { throw (FileEncryptedWithDrm("")); } QApplication::setOverrideCursor(Qt::WaitCursor); // These mutate the m_Book object LocateOPF(); // These mutate the m_Book object ReadOPF(); AddObfuscatedButUndeclaredFonts(encrypted_files); AddNonStandardAppleXML(); LoadInfrastructureFiles(); const QHash updates = LoadFolderStructure(); const QList resources = m_Book->GetFolderKeeper()->GetResourceList(); // We're going to check all html files until we find one that isn't well formed then we'll prompt // the user if they want to auto fix or not. // // If we have non-well formed content and they shouldn't be auto fixed we'll pass that on to // the universal update function so it knows to skip them. Otherwise we won't include them and // let it modify the file. for (int i=0; iType() == Resource::HTMLResourceType) { HTMLResource *hresource = dynamic_cast(resources.at(i)); if (!hresource) { continue; } // Load the content into the HTMLResource so we can perform a well formed check. try { hresource->SetText(HTMLEncodingResolver::ReadHTMLFile(hresource->GetFullPath())); } catch (...) { if (ss.cleanOn() & CLEANON_OPEN) { non_well_formed << hresource; continue; } } if (ss.cleanOn() & CLEANON_OPEN) { if (!XhtmlDoc::IsDataWellFormed(hresource->GetText(),hresource->GetEpubVersion())) { non_well_formed << hresource; } } } } if (!non_well_formed.isEmpty()) { QApplication::restoreOverrideCursor(); if (QMessageBox::Yes == QMessageBox::warning(QApplication::activeWindow(), tr("Sigil"), tr("This EPUB has HTML files that are not well formed. " "Sigil can attempt to automatically fix these files, although this " "can result in data loss.\n\n" "Do you want to automatically fix the files?"), QMessageBox::Yes|QMessageBox::No) ) { non_well_formed.clear(); } QApplication::setOverrideCursor(Qt::WaitCursor); } const QStringList load_errors = UniversalUpdates::PerformUniversalUpdates(false, resources, updates, non_well_formed); Q_FOREACH (QString err, load_errors) { AddLoadWarning(QString("%1").arg(err)); } ProcessFontFiles(resources, updates, encrypted_files); if (m_PackageVersion.startsWith('3')) { HTMLResource * nav_resource = NULL; if (m_NavResource) { if (m_NavResource->Type() == Resource::HTMLResourceType) { nav_resource = dynamic_cast(m_NavResource); } } if (!nav_resource) { // we need to create a nav file here because one was not found // it will automatically be added to the content.opf nav_resource = m_Book->CreateEmptyNavFile(true); Resource * res = dynamic_cast(nav_resource); m_Book->GetOPF()->SetItemRefLinear(res, false); } m_Book->GetOPF()->SetNavResource(nav_resource); } if (m_NCXNotInManifest) { // We manually created an NCX file because there wasn't one in the manifest. // Need to create a new manifest id for it. m_NCXId = m_Book->GetOPF()->AddNCXItem(m_NCXFilePath); } // Ensure that our spine has a element on it now in case it was missing. m_Book->GetOPF()->UpdateNCXOnSpine(m_NCXId); // Make sure the for the NCX in the manifest reflects correct href path m_Book->GetOPF()->UpdateNCXLocationInManifest(m_Book->GetNCX()); // If spine was not present or did not contain any items, recreate the OPF from scratch // preserving any important metadata elements and making a new reading order. if (!m_HasSpineItems) { QList originalMetadata = m_Book->GetOPF()->GetDCMetadata(); m_Book->GetOPF()->AutoFixWellFormedErrors(); if (extract_metadata) { m_Book->GetOPF()->SetDCMetadata(originalMetadata); } AddLoadWarning(QObject::tr("The OPF file does not contain a valid spine.") % "\n" % QObject::tr("Sigil has created a new one for you.")); } // If we have modified the book to add spine attribute, manifest item or NCX mark as changed. m_Book->SetModified(GetLoadWarnings().count() > 0); QApplication::restoreOverrideCursor(); return m_Book; } QHash ImportEPUB::ParseEncryptionXml() { QString encrpytion_xml_path = m_ExtractedFolderPath + "/META-INF/encryption.xml"; if (!QFileInfo(encrpytion_xml_path).exists()) { return QHash(); } QXmlStreamReader encryption(Utility::ReadUnicodeTextFile(encrpytion_xml_path)); QHash encrypted_files; QString encryption_algo; QString uri; while (!encryption.atEnd()) { encryption.readNext(); if (encryption.isStartElement()) { if (encryption.name() == "EncryptionMethod") { encryption_algo = encryption.attributes().value("", "Algorithm").toString(); } else if (encryption.name() == "CipherReference") { uri = Utility::URLDecodePath(encryption.attributes().value("", "URI").toString()); encrypted_files[ uri ] = encryption_algo; } } } if (encryption.hasError()) { const QString error = QString(QObject::tr("Error parsing encryption xml.\nLine: %1 Column %2 - %3")) .arg(encryption.lineNumber()) .arg(encryption.columnNumber()) .arg(encryption.errorString()); throw (EPUBLoadParseError(error.toStdString())); } return encrypted_files; } bool ImportEPUB::BookContentEncrypted(const QHash &encrypted_files) { foreach(QString algorithm, encrypted_files.values()) { if (algorithm != ADOBE_FONT_ALGO_ID && algorithm != IDPF_FONT_ALGO_ID) { return true; } } return false; } // This is basically a workaround for old versions of InDesign not listing the fonts it // embedded in the OPF manifest, even though the specs say it has to. // It does list them in the encryption.xml, so we use that. void ImportEPUB::AddObfuscatedButUndeclaredFonts(const QHash &encrypted_files) { if (encrypted_files.empty()) { return; } QDir opf_dir = QFileInfo(m_OPFFilePath).dir(); foreach(QString filepath, encrypted_files.keys()) { if (!FONT_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower())) { continue; } // Only add the path to the manifest if it is not already included. QMapIterator valueSearch(m_Files); if (!valueSearch.findNext(opf_dir.relativeFilePath(filepath))) { m_Files[ Utility::CreateUUID() ] = opf_dir.relativeFilePath(filepath); } } } // Another workaround for non-standard Apple files // At present it only handles com.apple.ibooks.display-options.xml, but any // further iBooks aberrations should be handled here as well. void ImportEPUB::AddNonStandardAppleXML() { QDir opf_dir = QFileInfo(m_OPFFilePath).dir(); QStringList aberrant_Apple_filenames; aberrant_Apple_filenames.append(m_ExtractedFolderPath + "/META-INF/com.apple.ibooks.display-options.xml"); for (int i = 0; i < aberrant_Apple_filenames.size(); ++i) { if (QFile::exists(aberrant_Apple_filenames.at(i))) { m_Files[ Utility::CreateUUID() ] = opf_dir.relativeFilePath(aberrant_Apple_filenames.at(i)); } } } // Each resource can provide us with its new path. encrypted_files provides // a mapping from old resource paths to the obfuscation algorithms. // So we use the updates hash which provides a mapping from old paths to new // paths to match the resources to their algorithms. void ImportEPUB::ProcessFontFiles(const QList &resources, const QHash &updates, const QHash &encrypted_files) { if (encrypted_files.empty()) { return; } QList font_resources = m_Book->GetFolderKeeper()->GetResourceTypeList(); if (font_resources.empty()) { return; } QHash new_font_paths_to_algorithms; foreach(QString old_update_path, updates.keys()) { if (!FONT_EXTENSIONS.contains(QFileInfo(old_update_path).suffix().toLower())) { continue; } QString new_update_path = updates[ old_update_path ]; foreach(QString old_encrypted_path, encrypted_files.keys()) { if (old_update_path == old_encrypted_path) { new_font_paths_to_algorithms[ new_update_path ] = encrypted_files[ old_encrypted_path ]; } } } foreach(FontResource * font_resource, font_resources) { QString match_path = "../" + font_resource->GetRelativePathToOEBPS(); QString algorithm = new_font_paths_to_algorithms.value(match_path); if (algorithm.isEmpty()) { continue; } font_resource->SetObfuscationAlgorithm(algorithm); // Actually we are de-obfuscating, but the inverse operations of the obfuscation methods // are the obfuscation methods themselves. For the math oriented, the obfuscation methods // are involutary [ f( f( x ) ) = x ]. if (algorithm == ADOBE_FONT_ALGO_ID) { FontObfuscation::ObfuscateFile(font_resource->GetFullPath(), algorithm, m_UuidIdentifierValue); } else { FontObfuscation::ObfuscateFile(font_resource->GetFullPath(), algorithm, m_UniqueIdentifierValue); } } } void ImportEPUB::ExtractContainer() { int res = 0; if (!cp437) { cp437 = new QCodePage437Codec(); } #ifdef Q_OS_WIN32 zlib_filefunc64_def ffunc; fill_win32_filefunc64W(&ffunc); unzFile zfile = unzOpen2_64(Utility::QStringToStdWString(QDir::toNativeSeparators(m_FullFilePath)).c_str(), &ffunc); #else unzFile zfile = unzOpen64(QDir::toNativeSeparators(m_FullFilePath).toUtf8().constData()); #endif if (zfile == NULL) { throw (EPUBLoadParseError(QString(QObject::tr("Cannot unzip EPUB: %1")).arg(QDir::toNativeSeparators(m_FullFilePath)).toStdString())); } res = unzGoToFirstFile(zfile); if (res == UNZ_OK) { do { // Get the name of the file in the archive. char file_name[MAX_PATH] = {0}; unz_file_info64 file_info; unzGetCurrentFileInfo64(zfile, &file_info, file_name, MAX_PATH, NULL, 0, NULL, 0); QString qfile_name; QString cp437_file_name; qfile_name = QString::fromUtf8(file_name); if (!(file_info.flag & (1<<11))) { // General purpose bit 11 says the filename is utf-8 encoded. If not set then // IBM 437 encoding might be used. cp437_file_name = cp437->toUnicode(file_name); } // If there is no file name then we can't do anything with it. if (!qfile_name.isEmpty()) { // We use the dir object to create the path in the temporary directory. // Unfortunately, we need a dir ojbect to do this as it's not a static function. QDir dir(m_ExtractedFolderPath); // Full file path in the temporary directory. QString file_path = m_ExtractedFolderPath + "/" + qfile_name; QFileInfo qfile_info(file_path); // Is this entry a directory? if (file_info.uncompressed_size == 0 && qfile_name.endsWith('/')) { dir.mkpath(qfile_name); continue; } else { dir.mkpath(qfile_info.path()); } // Open the file entry in the archive for reading. if (unzOpenCurrentFile(zfile) != UNZ_OK) { unzClose(zfile); throw (EPUBLoadParseError(QString(QObject::tr("Cannot extract file: %1")).arg(qfile_name).toStdString())); } // Open the file on disk to write the entry in the archive to. QFile entry(file_path); if (!entry.open(QIODevice::WriteOnly | QIODevice::Truncate)) { unzCloseCurrentFile(zfile); unzClose(zfile); throw (EPUBLoadParseError(QString(QObject::tr("Cannot extract file: %1")).arg(qfile_name).toStdString())); } // Buffered reading and writing. char buff[BUFF_SIZE] = {0}; int read = 0; while ((read = unzReadCurrentFile(zfile, buff, BUFF_SIZE)) > 0) { entry.write(buff, read); } entry.close(); // Read errors are marked by a negative read amount. if (read < 0) { unzCloseCurrentFile(zfile); unzClose(zfile); throw (EPUBLoadParseError(QString(QObject::tr("Cannot extract file: %1")).arg(qfile_name).toStdString())); } // The file was read but the CRC did not match. // We don't check the read file size vs the uncompressed file size // because if they're different there should be a CRC error. if (unzCloseCurrentFile(zfile) == UNZ_CRCERROR) { unzClose(zfile); throw (EPUBLoadParseError(QString(QObject::tr("Cannot extract file: %1")).arg(qfile_name).toStdString())); } if (!cp437_file_name.isEmpty() && cp437_file_name != qfile_name) { QString cp437_file_path = m_ExtractedFolderPath + "/" + cp437_file_name; QFile::copy(file_path, cp437_file_path); } } } while ((res = unzGoToNextFile(zfile)) == UNZ_OK); } if (res != UNZ_END_OF_LIST_OF_FILE) { unzClose(zfile); throw (EPUBLoadParseError(QString(QObject::tr("Cannot open EPUB: %1")).arg(QDir::toNativeSeparators(m_FullFilePath)).toStdString())); } unzClose(zfile); } void ImportEPUB::LocateOPF() { QString fullpath = m_ExtractedFolderPath + "/META-INF/container.xml"; QXmlStreamReader container; try { container.addData(Utility::ReadUnicodeTextFile(fullpath)); } catch (CannotOpenFile) { // Find the first OPF file. QString OPFfile; QDirIterator files(m_ExtractedFolderPath, QStringList() << "*.opf", QDir::NoFilter, QDirIterator::Subdirectories); while (files.hasNext()) { OPFfile = QDir(m_ExtractedFolderPath).relativeFilePath(files.next()); break; } if (OPFfile.isEmpty()) { std::string msg = fullpath.toStdString() + ": " + tr("Epub has missing or improperly specified OPF.").toStdString(); throw (CannotOpenFile(msg)); } // Create a default container.xml. QDir folder(m_ExtractedFolderPath); folder.mkdir("META-INF"); Utility::WriteUnicodeTextFile(CONTAINER_XML.arg(OPFfile), fullpath); container.addData(Utility::ReadUnicodeTextFile(fullpath)); } while (!container.atEnd()) { container.readNext(); if (container.isStartElement() && container.name() == "rootfile" ) { if (container.attributes().hasAttribute("media-type") && container.attributes().value("", "media-type") == OEBPS_MIMETYPE ) { m_OPFFilePath = m_ExtractedFolderPath + "/" + container.attributes().value("", "full-path").toString(); // As per OCF spec, the first rootfile element // with the OEBPS mimetype is considered the "main" one. break; } } } if (container.hasError()) { const QString error = QString( QObject::tr("Unable to parse container.xml file.\nLine: %1 Column %2 - %3")) .arg(container.lineNumber()) .arg(container.columnNumber()) .arg(container.errorString()); throw (EPUBLoadParseError(error.toStdString())); } if (m_OPFFilePath.isEmpty() || !QFile::exists(m_OPFFilePath)) { throw (EPUBLoadParseError(QString(QObject::tr("No appropriate OPF file found")).toStdString())); } } void ImportEPUB::ReadOPF() { QString opf_text = CleanSource::ProcessXML(PrepareOPFForReading(Utility::ReadUnicodeTextFile(m_OPFFilePath)),OEBPS_MIMETYPE); QXmlStreamReader opf_reader(opf_text); QString ncx_id_on_spine; while (!opf_reader.atEnd()) { opf_reader.readNext(); if (!opf_reader.isStartElement()) { continue; } if (opf_reader.name() == "package") { m_UniqueIdentifierId = opf_reader.attributes().value("", "unique-identifier").toString(); m_PackageVersion = opf_reader.attributes().value("", "version").toString(); if (m_PackageVersion == "1.0") m_PackageVersion = "2.0"; } else if (opf_reader.name() == "identifier") { ReadIdentifierElement(&opf_reader); } // Get the list of content files that // make up the publication else if (opf_reader.name() == "item") { ReadManifestItemElement(&opf_reader); } // We read this just to get the NCX id else if (opf_reader.name() == "spine") { ncx_id_on_spine = opf_reader.attributes().value("", "toc").toString(); } else if (opf_reader.name() == "itemref") { m_HasSpineItems = true; } } if (opf_reader.hasError()) { const QString error = QString(QObject::tr("Unable to read OPF file.\nLine: %1 Column %2 - %3")) .arg(opf_reader.lineNumber()) .arg(opf_reader.columnNumber()) .arg(opf_reader.errorString()); throw (EPUBLoadParseError(error.toStdString())); } // Ensure we have an NCX available LocateOrCreateNCX(ncx_id_on_spine); } void ImportEPUB::ReadIdentifierElement(QXmlStreamReader *opf_reader) { QString id = opf_reader->attributes().value("", "id").toString(); QString scheme = opf_reader->attributes().value("", "scheme").toString(); QString value = opf_reader->readElementText(); if (id == m_UniqueIdentifierId) { m_UniqueIdentifierValue = value; } if (m_UuidIdentifierValue.isEmpty() && (value.contains("urn:uuid:") || scheme.toLower() == "uuid")) { m_UuidIdentifierValue = value; } } void ImportEPUB::ReadManifestItemElement(QXmlStreamReader *opf_reader) { QString id = opf_reader->attributes().value("", "id").toString(); QString href = opf_reader->attributes().value("", "href").toString(); QString type = opf_reader->attributes().value("", "media-type").toString(); QString properties = opf_reader->attributes().value("", "properties").toString(); // Paths are percent encoded in the OPF, we use "normal" paths internally. href = Utility::URLDecodePath(href); QString extension = QFileInfo(href).suffix().toLower(); if (type != NCX_MIMETYPE && extension != NCX_EXTENSION) { if (!m_MainfestFilePaths.contains(href)) { if (m_Files.contains(id)) { // We have an error situation with a duplicate id in the epub. // We must warn the user, but attempt to use another id so the epub can still be loaded. QString base_id = QFileInfo(href).fileName(); QString new_id(base_id); int duplicate_index = 0; while (m_Files.contains(new_id)) { duplicate_index++; new_id = QString("%1%2").arg(base_id).arg(duplicate_index); } const QString load_warning = QObject::tr("The OPF manifest contains duplicate ids for: %1").arg(id) + " - " + QObject::tr("A temporary id has been assigned to load this EPUB. You should edit your OPF file to remove the duplication."); id = new_id; AddLoadWarning(load_warning); } m_Files[ id ] = href; m_FileMimetypes[ id ] = type; m_MainfestFilePaths << href; // store information about any nav document if (properties.contains("nav")) { m_NavId = id; m_NavHref = href; } } } else { m_NcxCandidates[ id ] = href; } } void ImportEPUB::LocateOrCreateNCX(const QString &ncx_id_on_spine) { QString load_warning; QString ncx_href = "not_found"; m_NCXId = ncx_id_on_spine; // Handle various failure conditions, such as: // - ncx not specified in the spine (search for a matching manifest item by extension) // - ncx specified in spine, but no matching manifest item entry (create a new one) // - ncx file not physically present (create a new one) // - ncx not in spine or manifest item (create a new one) if (!m_NCXId.isEmpty()) { ncx_href = m_NcxCandidates[ m_NCXId ]; } else { // Search for the ncx in the manifest by looking for files with // a .ncx extension. QHashIterator ncxSearch(m_NcxCandidates); while (ncxSearch.hasNext()) { ncxSearch.next(); if (QFileInfo(ncxSearch.value()).suffix().toLower() == NCX_EXTENSION) { m_NCXId = ncxSearch.key(); load_warning = QObject::tr("The OPF file did not identify the NCX file correctly.") + "\n" + " - " + QObject::tr("Sigil has used the following file as the NCX:") + QString(" %1").arg(m_NcxCandidates[ m_NCXId ]); ncx_href = m_NcxCandidates[ m_NCXId ]; break; } } } m_NCXFilePath = QFileInfo(m_OPFFilePath).absolutePath() % "/" % ncx_href; if (ncx_href.isEmpty() || !QFile::exists(m_NCXFilePath)) { m_NCXNotInManifest = m_NCXId.isEmpty() || ncx_href.isEmpty(); m_NCXId.clear(); // Things are really bad and no .ncx file was found in the manifest or // the file does not physically exist. We need to create a new one. m_NCXFilePath = QFileInfo(m_OPFFilePath).absolutePath() % "/" % NCX_FILE_NAME; // Create a new file for the NCX. NCXResource ncx_resource(m_ExtractedFolderPath, m_NCXFilePath, m_Book->GetFolderKeeper()); // We are relying on an identifier being set from the metadata. // It might not have one if the book does not have the urn:uuid: format. if (!m_UuidIdentifierValue.isEmpty()) { ncx_resource.SetMainID(m_UuidIdentifierValue); } ncx_resource.SaveToDisk(); if (m_PackageVersion.startsWith('3')) { load_warning = QObject::tr("Sigil has created a template NCX") + "\n" + QObject::tr("to support epub2 backwards compatibility."); } else { if (ncx_href.isEmpty()) { load_warning = QObject::tr("The OPF file does not contain an NCX file.") + "\n" + " - " + QObject::tr("Sigil has created a new one for you."); } else { load_warning = QObject::tr("The NCX file is not present in this EPUB.") + "\n" + " - " + QObject::tr("Sigil has created a new one for you."); } } } if (!load_warning.isEmpty()) { AddLoadWarning(load_warning); } } void ImportEPUB::LoadInfrastructureFiles() { // always SetEpubVersion before SetText in OPF as SetText will validate with it m_Book->GetOPF()->SetEpubVersion(m_PackageVersion); m_Book->GetOPF()->SetText(CleanSource::ProcessXML(PrepareOPFForReading(Utility::ReadUnicodeTextFile(m_OPFFilePath)),OEBPS_MIMETYPE)); QString OPFBookRelPath = m_OPFFilePath; OPFBookRelPath = OPFBookRelPath.remove(0,m_ExtractedFolderPath.length()+1); m_Book->GetOPF()->SetCurrentBookRelPath(OPFBookRelPath); m_Book->GetNCX()->SetText(CleanSource::ProcessXML(Utility::ReadUnicodeTextFile(m_NCXFilePath),"application/x-dtbncx+xml")); m_Book->GetNCX()->SetEpubVersion(m_PackageVersion); QString NCXBookRelPath = m_NCXFilePath; NCXBookRelPath = NCXBookRelPath.remove(0,m_ExtractedFolderPath.length()+1); m_Book->GetNCX()->SetCurrentBookRelPath(NCXBookRelPath); } QHash ImportEPUB::LoadFolderStructure() { QList keys = m_Files.keys(); int num_files = keys.count(); QFutureSynchronizer> sync; for (int i = 0; i < num_files; ++i) { QString id = keys.at(i); sync.addFuture(QtConcurrent::run( this, &ImportEPUB::LoadOneFile, m_Files.value(id), m_FileMimetypes.value(id))); } sync.waitForFinished(); QList>> futures = sync.futures(); int num_futures = futures.count(); QHash updates; for (int i = 0; i < num_futures; ++i) { std::tuple result = futures.at(i).result(); updates[std::get<0>(result)] = std::get<1>(result); } updates.remove(UPDATE_ERROR_STRING); return updates; } std::tuple ImportEPUB::LoadOneFile(const QString &path, const QString &mimetype) { QString fullfilepath = QDir::cleanPath(QFileInfo(m_OPFFilePath).absolutePath() + "/" + path); QString currentpath = fullfilepath; currentpath = currentpath.remove(0,m_ExtractedFolderPath.length()+1); try { Resource *resource = m_Book->GetFolderKeeper()->AddContentFileToFolder(fullfilepath, false, mimetype); if (path == m_NavHref) { m_NavResource = resource; } resource->SetCurrentBookRelPath(currentpath); QString newpath = "../" + resource->GetRelativePathToOEBPS(); return std::make_tuple(currentpath, newpath); } catch (FileDoesNotExist) { return std::make_tuple(UPDATE_ERROR_STRING, UPDATE_ERROR_STRING); } } QString ImportEPUB::PrepareOPFForReading(const QString &source) { QString source_copy(source); QString prefix = source_copy.left(XML_DECLARATION_SEARCH_PREFIX_SIZE); QRegularExpression version(VERSION_ATTRIBUTE); QRegularExpressionMatch mo = version.match(prefix); if (mo.hasMatch()) { // MASSIVE hack for XML 1.1 "support"; // this is only for people who specify // XML 1.1 when they actually only use XML 1.0 source_copy.replace(mo.capturedStart(1), mo.capturedLength(1), "1.0"); } return source_copy; } Sigil-0.9.9/src/Importers/ImportEPUB.h000066400000000000000000000162161321676412500174670ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef IMPORTEPUB_H #define IMPORTEPUB_H #include #include #include #include #include "Importers/Importer.h" #include "Misc/TempFolder.h" class HTMLResource; class CSSResource; class QXmlStreamReader; class ImportEPUB : public Importer { Q_DECLARE_TR_FUNCTIONS(ImportEPUB) public: // The parameter is the file to be imported ImportEPUB(const QString &fullfilepath); // Reads and parses the file // and returns the created Book virtual QSharedPointer GetBook(bool extract_metaata=true); private: /** * Extracts the EPUB file to a temporary folder. * The path to the the temp folder with the extracted files * is stored in m_ExtractedFolderPath. */ void ExtractContainer(); /** * Locates the OPF file in the extracted folder. * The path to the OPF is then stored in m_OPFFilePath. */ void LocateOPF(); /** * Parses the OPF file and stores the parsed information * inside m_MetaElements, m_Files and m_ReadingOrderIds */ void ReadOPF(); /** * Reads an element. * * @param opf_reader The OPF reader positioned to read * the required element type. */ void ReadIdentifierElement(QXmlStreamReader *opf_reader); /** * Reads a manifest element. * * @param opf_reader The OPF reader positioned to read * the required element type. */ void ReadManifestItemElement(QXmlStreamReader *opf_reader); /** * Locate or create an NCX file if missing or not correctly specified. * * @param ncx_id_on_spine - The toc attribute value from the */ void LocateOrCreateNCX(const QString &ncx_id_on_spine); /** * Loads the book's infrastructure files, like * the NCX and the OPF. */ void LoadInfrastructureFiles(); /** * Loads the referenced files into the main folder of the book. * * @return A hash with keys being old references (URLs) to resources, * and values being the new references to those resources. */ QHash LoadFolderStructure(); /** * Loads a single file. * * @param path A full path to the file to load. * @param mimetype The mimetype of the file to load. * @return A tuple where the first member is the old path to the file, * and the new member is the new, OEBPS-relative path to it. */ std::tuple LoadOneFile(const QString &path, const QString &mimetype = QString()); /** * Performs the necessary modifications to the OPF * source so that it can be read. * * @param source The XML source of the OPF. * @return The prepared source. */ QString PrepareOPFForReading(const QString &source); /** * Parses the "encryption.xml" file in the META-INF folder. * We return the list of file paths and the algorithms used * to encrypt them. * * @return The list of encrypted fsiles. The keys are the * absolute paths to the files and the values are the * encryption algorithm IDs. */ QHash ParseEncryptionXml(); bool BookContentEncrypted(const QHash &encrypted_files); void AddObfuscatedButUndeclaredFonts(const QHash &encrypted_files); /** * Another workaround function to handle com.apple.ibooks.display-options.xml * and any future non-standard Apple xml. If additional files need to * be excluded from being handled as proper ePub content, you will also * need to alter FILE_EXCEPTIONS at the top of FolderKeeper.cpp so the regex * will detect them. * This is not added to the manifest, but epubcheck uses a similar exception * and accepts ePubs containing an unmanifested file of this name. */ void AddNonStandardAppleXML(); void ProcessFontFiles(const QList &resources, const QHash &updates, const QHash &encrypted_files); /** * The main temp folder where files are stored. */ TempFolder m_TempFolder; /** * The full path to the folder where the * EPUB was extracted to. */ QString m_ExtractedFolderPath; /** * The full path to the OPF file * of the publication. */ QString m_OPFFilePath; /** * The full path to the NCX file * of the publication. */ QString m_NCXFilePath; /** * The map of all the files in the publication's * manifest; The keys are the element ID's, * the values are stored paths to the files. */ QMap m_Files; /** * The map of all files in the publication's manifest; * The keys are the element ID's, the vaules are the * mimetype of the file. */ QMap m_FileMimetypes; /** * InDesign likes listing several files multiple times in the manifest, * even though that's explicitly forbidden by the spec. So we use this * to make sure we don't load such files multiple times. */ QSet m_MainfestFilePaths; /** * The identifier of the book's unique identifier. */ QString m_UniqueIdentifierId; /** * The value of the book's unique identifier. */ QString m_UniqueIdentifierValue; /** * The value of the book's first UUID-based identifier. */ QString m_UuidIdentifierValue; /** * It's theoretically possible (although unlikely) that an epub * will have more than one file listed in the OPF manifest with * an NCX mimetype. Only one of them will be the actual NCX though. * This hash stores all the candidates, as an ID-to-href mapping. */ QHash m_NcxCandidates; bool m_HasSpineItems; bool m_NCXNotInManifest; QString m_NCXId; QString m_NavId; QString m_NavHref; Resource * m_NavResource; /** * The value of the opf package version tag */ QString m_PackageVersion; }; #endif // IMPORTEPUB_H Sigil-0.9.9/src/Importers/ImportHTML.cpp000066400000000000000000000227431321676412500200350ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include #include #include "BookManipulation/CleanSource.h" #include "BookManipulation/FolderKeeper.h" #include "BookManipulation/HTMLMetadata.h" #include "BookManipulation/XhtmlDoc.h" #include "Importers/ImportHTML.h" #include "Misc/GumboInterface.h" #include "Misc/HTMLEncodingResolver.h" #include "Misc/SettingsStore.h" #include "Misc/TempFolder.h" #include "Misc/Utility.h" #include "ResourceObjects/CSSResource.h" #include "ResourceObjects/HTMLResource.h" #include "ResourceObjects/NCXResource.h" #include "SourceUpdates/PerformHTMLUpdates.h" #include "SourceUpdates/UniversalUpdates.h" #include "sigil_constants.h" #include "sigil_exception.h" // Constructor; // The parameter is the file to be imported ImportHTML::ImportHTML(const QString &fullfilepath) : Importer(fullfilepath), m_IgnoreDuplicates(false), m_CachedSource(QString()) { SettingsStore ss; m_EpubVersion = ss.defaultVersion(); } void ImportHTML::SetBook(QSharedPointer book, bool ignore_duplicates) { m_Book = book; m_IgnoreDuplicates = ignore_duplicates; // update epub version to match the book that was just set m_EpubVersion = m_Book->GetConstOPF()->GetEpubVersion(); } XhtmlDoc::WellFormedError ImportHTML::CheckValidToLoad() { // For HTML & XML documents we will perform a well-formed check return XhtmlDoc::WellFormedErrorForSource(LoadSource()); } // Reads and parses the file // and returns the created Book QSharedPointer ImportHTML::GetBook(bool extract_metadata) { QString source = LoadSource(); if (extract_metadata) { LoadMetadata(source); } UpdateFiles(CreateHTMLResource(), source, LoadFolderStructure(source)); // Before returning the new book, if it is epub3, make sure it has a nav if (m_EpubVersion.startsWith('3')) { HTMLResource* nav_resource = m_Book->GetConstOPF()->GetNavResource(); if (!nav_resource) { HTMLResource * nav_resource = m_Book->CreateEmptyNavFile(true); m_Book->GetOPF()->SetNavResource(nav_resource); m_Book->GetOPF()->SetItemRefLinear(nav_resource, false); } } return m_Book; } // Loads the source code into the Book QString ImportHTML::LoadSource() { SettingsStore ss; if (m_CachedSource.isNull()) { if (!Utility::IsFileReadable(m_FullFilePath)) { throw (CannotReadFile(m_FullFilePath.toStdString())); } m_CachedSource = HTMLEncodingResolver::ReadHTMLFile(m_FullFilePath); m_CachedSource = CleanSource::CharToEntity(m_CachedSource); if (ss.cleanOn() & CLEANON_OPEN) { m_CachedSource = XhtmlDoc::ResolveCustomEntities(m_CachedSource); m_CachedSource = CleanSource::Mend(m_CachedSource, m_EpubVersion); } } return m_CachedSource; } // Searches for meta information in the HTML file // and tries to convert it to Dublin Core void ImportHTML::LoadMetadata(const QString & source) { GumboInterface gi(source, m_EpubVersion); gi.parse(); QList metadata; QList nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_META); for (int i = 0; i < nodes.count(); ++i) { GumboNode* node = nodes.at(i); MetaEntry meta = HTMLMetadata::Instance()->MapHTMLToOPFMetadata(node, gi); if (!meta.m_name.isEmpty() && !meta.m_content.isEmpty()) { metadata.append(meta); } } m_Book->SetMetadata(metadata); } HTMLResource *ImportHTML::CreateHTMLResource() { TempFolder tempfolder; QString fullfilepath = tempfolder.GetPath() + "/" + QFileInfo(m_FullFilePath).fileName(); Utility::WriteUnicodeTextFile("TEMP_SOURCE", fullfilepath); HTMLResource *resource = qobject_cast(m_Book->GetFolderKeeper()->AddContentFileToFolder(fullfilepath)); resource->SetCurrentBookRelPath(m_FullFilePath); return resource; } void ImportHTML::UpdateFiles(HTMLResource *html_resource, QString &source, const QHash &updates) { Q_ASSERT(html_resource != NULL); QHash html_updates; QHash css_updates; QString newsource = source; QString currentpath = html_resource->GetCurrentBookRelPath(); QString version = html_resource->GetEpubVersion(); std::tie(html_updates, css_updates, std::ignore) = UniversalUpdates::SeparateHtmlCssXmlUpdates(updates); QList all_files = m_Book->GetFolderKeeper()->GetResourceList(); int num_files = all_files.count(); QList css_resources; for (int i = 0; i < num_files; ++i) { Resource *resource = all_files.at(i); if (resource->Type() == Resource::CSSResourceType) { css_resources.append(qobject_cast(resource)); } } QFutureSynchronizer sync; sync.addFuture(QtConcurrent::map(css_resources, std::bind(UniversalUpdates::LoadAndUpdateOneCSSFile, std::placeholders::_1, css_updates))); html_resource->SetText(PerformHTMLUpdates(newsource, html_updates, css_updates, currentpath, version)()); html_resource->SetCurrentBookRelPath(""); sync.waitForFinished(); } // Loads the referenced files into the main folder of the book; // as the files get a new name, the references are updated QHash ImportHTML::LoadFolderStructure(const QString &source) { QStringList mediapaths = XhtmlDoc::GetPathsToMediaFiles(source); QStringList stylepaths = XhtmlDoc::GetPathsToStyleFiles(source); QFutureSynchronizer> sync; sync.addFuture(QtConcurrent::run(this, &ImportHTML::LoadMediaFiles, mediapaths)); sync.addFuture(QtConcurrent::run(this, &ImportHTML::LoadStyleFiles, stylepaths)); sync.waitForFinished(); QList>> futures = sync.futures(); int num_futures = futures.count(); QHash updates; for (int i = 0; i < num_futures; ++i) { updates.unite(futures.at(i).result()); } return updates; } QHash ImportHTML::LoadMediaFiles(const QStringList & file_paths) { QHash updates; QDir folder(QFileInfo(m_FullFilePath).absoluteDir()); QStringList current_filenames = m_Book->GetFolderKeeper()->GetAllFilenames(); // Load the media files (images, video, audio) into the book and // update all references with new urls foreach(QString file_path, file_paths) { try { QString filename = QFileInfo(file_path).fileName(); QString fullfilepath = QFileInfo(folder, file_path).absoluteFilePath(); QString newpath; if (m_IgnoreDuplicates && current_filenames.contains(filename)) { newpath = "../" + m_Book->GetFolderKeeper()->GetResourceByFilename(filename)->GetRelativePathToOEBPS(); } else { Resource * resource = m_Book->GetFolderKeeper()->AddContentFileToFolder(fullfilepath); newpath = "../" + resource->GetRelativePathToOEBPS(); } updates[ fullfilepath ] = newpath; } catch (FileDoesNotExist) { // Do nothing. If the referenced file does not exist, // well then we don't load it. // TODO: log this. } } return updates; } QHash ImportHTML::LoadStyleFiles(const QStringList & file_paths ) { QHash updates; QDir folder(QFileInfo(m_FullFilePath).absoluteDir()); QStringList current_filenames = m_Book->GetFolderKeeper()->GetAllFilenames(); foreach(QString file_path, file_paths) { try { QString filename = QFileInfo(file_path).fileName(); QString fullfilepath = QFileInfo(folder, file_path).absoluteFilePath(); QString newpath; if (m_IgnoreDuplicates && current_filenames.contains(filename)) { newpath = "../" + m_Book->GetFolderKeeper()->GetResourceByFilename(filename)->GetRelativePathToOEBPS(); } else { Resource * resource = m_Book->GetFolderKeeper()->AddContentFileToFolder(fullfilepath); newpath = "../" + resource->GetRelativePathToOEBPS(); } updates[ fullfilepath ] = newpath; } catch (FileDoesNotExist) { // Do nothing. If the referenced file does not exist, // well then we don't load it. // TODO: log this. } } return updates; } Sigil-0.9.9/src/Importers/ImportHTML.h000066400000000000000000000054011321676412500174720ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef IMPORTHTML_H #define IMPORTHTML_H #include "Misc/GumboInterface.h" #include "BookManipulation/XhtmlDoc.h" #include "Importers/Importer.h" class HTMLResource; class CSSResource; class QDomDocument; class ImportHTML : public Importer { public: // Constructor; // The parameter is the file to be imported ImportHTML(const QString &fullfilepath); // Needed so that we can use an existing Book // in which to load HTML files (and their dependencies). void SetBook(QSharedPointer book, bool ignore_duplicates); virtual XhtmlDoc::WellFormedError CheckValidToLoad(); // Reads and parses the file // and returns the created Book. virtual QSharedPointer GetBook(bool extract_metadata=true); private: // Loads the source code into the Book QString LoadSource(); // Searches for meta information in the HTML file // and tries to convert it to Dublin Core void LoadMetadata(const QString &source); HTMLResource *CreateHTMLResource(); void UpdateFiles(HTMLResource *html_resource, QString &source, const QHash &updates); // Loads the referenced files into the main folder of the book; // as the files get a new name, the references are updated QHash LoadFolderStructure(const QString & source); // Returns a hash with keys being old references (URLs) to resources, // and values being the new references to those resources. QHash LoadMediaFiles(const QStringList & file_paths); QHash LoadStyleFiles(const QStringList & file_paths); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// bool m_IgnoreDuplicates; QString m_CachedSource; QString m_EpubVersion; }; #endif // IMPORTHTML_H Sigil-0.9.9/src/Importers/ImportTXT.cpp000066400000000000000000000076411321676412500177500ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "BookManipulation/CleanSource.h" #include "BookManipulation/FolderKeeper.h" #include "BookManipulation/XhtmlDoc.h" #include "Importers/ImportTXT.h" #include "Misc/SettingsStore.h" #include "Misc/TempFolder.h" #include "Misc/Utility.h" #include "ResourceObjects/HTMLResource.h" #include "sigil_constants.h" #include "sigil_exception.h" const QString FIRST_SECTION_PREFIX = "Section0001"; const QString FIRST_SECTION_NAME = FIRST_SECTION_PREFIX + ".xhtml"; // Constructor; // The parameter is the file to be imported ImportTXT::ImportTXT(const QString &fullfilepath) : Importer(fullfilepath) { SettingsStore ss; m_EpubVersion = ss.defaultVersion(); } // Reads and parses the file // and returns the created Book QSharedPointer ImportTXT::GetBook(bool extract_metadata) { if (!Utility::IsFileReadable(m_FullFilePath)) { throw(CannotReadFile(m_FullFilePath.toStdString())); } QString source = LoadSource(); InitializeHTMLResource(source, CreateHTMLResource(source)); // Before returning the new book, if it is epub3, make sure it has a nav if (m_EpubVersion.startsWith('3')) { HTMLResource* nav_resource = m_Book->GetConstOPF()->GetNavResource(); if (!nav_resource) { HTMLResource * nav_resource = m_Book->CreateEmptyNavFile(true); m_Book->GetOPF()->SetNavResource(nav_resource); m_Book->GetOPF()->SetItemRefLinear(nav_resource, false); } } return m_Book; } QString ImportTXT::LoadSource() const { SettingsStore ss; QString version = ss.defaultVersion(); QString source = Utility::ReadUnicodeTextFile(m_FullFilePath); source = CreateParagraphs(source.split(QChar('\n'))); if (ss.cleanOn() & CLEANON_OPEN) { return CleanSource::Mend(source, version); } return source; } HTMLResource *ImportTXT::CreateHTMLResource(const QString &source) { TempFolder tempfolder; QString fullfilepath = tempfolder.GetPath() + "/" + FIRST_SECTION_NAME; Utility::WriteUnicodeTextFile(source, fullfilepath); m_Book->GetFolderKeeper()->AddContentFileToFolder(fullfilepath); return m_Book->GetFolderKeeper()->GetResourceTypeList()[ 0 ]; } void ImportTXT::InitializeHTMLResource(const QString &source, HTMLResource *resource) { resource->SetText(source); } // Accepts a list of text lines and returns // a string with paragraphs wrapped into

tags QString ImportTXT::CreateParagraphs(const QStringList &lines) const { QString text = ""; QString paragraph = "

"; int num_lines = lines.count(); for (int i = 0; i < num_lines; ++i) { QString line = lines.at(i); if (line.isEmpty() || line[ 0 ].isSpace()) { text.append(paragraph.append("

\n")); paragraph = "

"; } // We prepend a space so words on // line breaks don't get merged paragraph.append(QString(line.prepend(" ")).toHtmlEscaped()); } text.append(paragraph.append("

\n")); return text; } Sigil-0.9.9/src/Importers/ImportTXT.h000066400000000000000000000033441321676412500174110ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef IMPORTTXT_H #define IMPORTTXT_H #include #include #include "Importers/Importer.h" class ImportTXT : public Importer { public: // Constructor; // The parameter is the file to be imported ImportTXT(const QString &fullfilepath); // Reads and parses the file // and returns the created Book virtual QSharedPointer GetBook(bool extract_metadata=true); private: QString LoadSource() const; HTMLResource *CreateHTMLResource(const QString &source); void InitializeHTMLResource(const QString &source, HTMLResource *resource); // Accepts a list of text lines and returns // a string with paragraphs wrapped into

tags QString CreateParagraphs(const QStringList &lines) const; QString m_EpubVersion; }; #endif // IMPORTTXT_H Sigil-0.9.9/src/Importers/Importer.cpp000066400000000000000000000026721321676412500176760ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Importers/Importer.h" Importer::Importer(const QString &fullfilepath) : m_FullFilePath(fullfilepath), m_Book(new Book()), m_LoadWarnings(QStringList()) { } XhtmlDoc::WellFormedError Importer::CheckValidToLoad() { // Default behaviour is to assume resource is valid. XhtmlDoc::WellFormedError error; error.line = -1; return error; } QStringList Importer::GetLoadWarnings() { return m_LoadWarnings; } void Importer::AddLoadWarning(const QString &warning) { m_LoadWarnings.append(warning % "\n"); } Sigil-0.9.9/src/Importers/Importer.h000066400000000000000000000046211321676412500173370ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef IMPORTER_H #define IMPORTER_H #include #include "BookManipulation/Book.h" #include "BookManipulation/XhtmlDoc.h" /** * The abstract base class for Importers. * Defines the GetBook() method that the importer subclasses need to implement. */ class Importer { public: /** * Constructor. * * @param fullfilepath The path to the file to be imported. */ Importer(const QString &fullfilepath); /** * Destructor. */ virtual ~Importer() {} /** * Call this prior to calling GetBook() to determine whether the item * is valid to be loaded. */ virtual XhtmlDoc::WellFormedError CheckValidToLoad(); /** * Loads the file as a Book and returns it. * * @return The file as a Book object, RAII wrapped. */ virtual QSharedPointer GetBook(bool extract_metadata=true) = 0; /** * Call this after calling GetBook() to get any warning messages that * occurred while GetBook() was loading. */ QStringList GetLoadWarnings(); protected: void AddLoadWarning(const QString &warning); /////////////////////////////// // PROTECTED MEMBER VARIABLES /////////////////////////////// /** * The full path to the file to be imported. */ const QString &m_FullFilePath; /** * The Book that will be created * by the importing process. */ QSharedPointer m_Book; QStringList m_LoadWarnings; }; #endif // IMPORTER_H Sigil-0.9.9/src/Importers/ImporterFactory.cpp000066400000000000000000000043331321676412500212220ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "Importers/ImporterFactory.h" #include "Importers/ImportEPUB.h" #include "Importers/ImportHTML.h" #include "Importers/ImportTXT.h" #include "sigil_constants.h" #include "sigil_exception.h" // Constructor ImporterFactory::ImporterFactory() : m_importer_html(NULL), m_importer_epub(NULL), m_importer_txt(NULL) { } // Destructor ImporterFactory::~ImporterFactory() { if (m_importer_html) { delete m_importer_html; } if (m_importer_epub) { delete m_importer_epub; } if (m_importer_txt) { delete m_importer_txt; } } Importer *ImporterFactory::GetImporter(const QString &filename) { QString extension = QFileInfo(filename).suffix().toLower(); if ((extension == "xhtml") || (extension == "html") || (extension == "htm") ) { if (!m_importer_html) { m_importer_html = new ImportHTML(filename); } return m_importer_html; } if ((extension == "txt")) { if (!m_importer_txt) { m_importer_txt = new ImportTXT(filename); } return m_importer_txt; } if ((extension == "epub")) { if (!m_importer_epub) { m_importer_epub = new ImportEPUB(filename); } return m_importer_epub; } return NULL; } Sigil-0.9.9/src/Importers/ImporterFactory.h000066400000000000000000000025611321676412500206700ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef IMPORTERFACTORY_H #define IMPORTERFACTORY_H #include "Importers/Importer.h" class ImporterFactory { public: // Constructor ImporterFactory(); // Destructor ~ImporterFactory(); // Returns the appropriate importer // for the given filename Importer *GetImporter(const QString &filename); private: Importer *m_importer_html; Importer *m_importer_epub; Importer *m_importer_txt; }; #endif // IMPORTERFACTORY_H Sigil-0.9.9/src/MainUI/000077500000000000000000000000001321676412500145205ustar00rootroot00000000000000Sigil-0.9.9/src/MainUI/BookBrowser.cpp000066400000000000000000001606541321676412500174760ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include #include #include "BookManipulation/Book.h" #include "BookManipulation/FolderKeeper.h" #include "Dialogs/DeleteFiles.h" #include "Dialogs/RenameTemplate.h" #include "Dialogs/AddSemantics.h" #include "Importers/ImportHTML.h" #include "MainUI/BookBrowser.h" #include "MainUI/MainWindow.h" #include "MainUI/OPFModel.h" #include "Misc/FilenameDelegate.h" #include "Misc/KeyboardShortcutManager.h" #include "Misc/SettingsStore.h" #include "Misc/Utility.h" #include "Misc/OpenExternally.h" #include "Misc/GuideItems.h" #include "Misc/Landmarks.h" #include "ResourceObjects/HTMLResource.h" #include "ResourceObjects/NCXResource.h" #include "ResourceObjects/OPFResource.h" #include "ResourceObjects/NavProcessor.h" #include "sigil_constants.h" #include "sigil_exception.h" static const QString SETTINGS_GROUP = "bookbrowser"; static const QString OPF_NCX_EDIT_WARNING_KEY = SETTINGS_GROUP + "-opfncx-warning"; static const int COLUMN_INDENTATION = 10; BookBrowser::BookBrowser(QWidget *parent) : QDockWidget(tr("Book Browser"), parent), m_Book(NULL), m_TreeView(new QTreeView(this)), m_OPFModel(new OPFModel(this)), m_ContextMenu(new QMenu(this)), m_FontObfuscationContextMenu(new QMenu(this)), m_OpenWithContextMenu(new QMenu(this)), m_LastContextMenuType(Resource::GenericResourceType), m_RenamedResource(NULL) { m_FontObfuscationContextMenu->setTitle(tr("Font Obfuscation")); m_OpenWithContextMenu->setTitle(tr("Open With")); setWidget(m_TreeView); setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); ReadSettings(); SetupTreeView(); CreateContextMenuActions(); ConnectSignalsToSlots(); m_OpenWithContextMenu->addAction(m_OpenWithEditor); m_OpenWithContextMenu->addAction(m_OpenWith); } BookBrowser::~BookBrowser() { WriteSettings(); KeyboardShortcutManager *sm = KeyboardShortcutManager::instance(); sm->removeActionsOf(this); } void BookBrowser::showEvent(QShowEvent *event) { QDockWidget::showEvent(event); raise(); } void BookBrowser::SetBook(QSharedPointer book) { m_Book = book; m_OPFModel->SetBook(book); connect(this, SIGNAL(BookContentModified()), m_Book.data(), SLOT(SetModified())); ExpandTextFolder(); RefreshCounts(); try { // Here we fake that the "first" HTML file has been double clicked // so that we have a default first tab opened. // An exception is thrown if there are no HTML files in the epub. EmitResourceActivated(m_OPFModel->GetFirstHTMLModelIndex()); } // No exception variable since we don't use it catch (NoHTMLFiles) { // Do nothing. No HTML files, no first file opened. } } void BookBrowser::RefreshCounts() { for (int i = 0; i < m_OPFModel->invisibleRootItem()->rowCount(); i++) { QStandardItem *folder = m_OPFModel->invisibleRootItem()->child(i); int count = folder->rowCount(); QString tooltip = QString("%1 ").arg(count); if (count == 1) { tooltip.append(tr("file")); } else { tooltip.append(tr("files")); } folder->setToolTip(tooltip); } } void BookBrowser::Refresh() { m_OPFModel->Refresh(); RefreshCounts(); emit UpdateBrowserSelection(); } void BookBrowser::SelectAll() { QList resources = m_OPFModel->GetResourceListInFolder(m_LastContextMenuType); SelectResources(resources); } void BookBrowser::SelectResources(QList resources) { m_TreeView->selectionModel()->clearSelection(); foreach(Resource *resource, resources) { QModelIndex index = m_OPFModel->GetModelItemIndex(resource, OPFModel::IndexChoice_Current); m_TreeView->selectionModel()->select(index, QItemSelectionModel::Select); } } void BookBrowser::SelectRenamedResource() { if (m_RenamedResource == NULL) { return; } // Set the selection to the resource that was being renamed UpdateSelection(m_RenamedResource); // Make sure Book Browser has focus so keyboard navigation works as expected qobject_cast(m_TreeView)->setFocus(); m_RenamedResource = NULL; } void BookBrowser::UpdateSelection(Resource *resource) { const int MIN_SPACE = 40; m_TreeView->selectionModel()->clearSelection(); QModelIndex index = m_OPFModel->GetModelItemIndex(resource, OPFModel::IndexChoice_Current); m_TreeView->selectionModel()->setCurrentIndex(index, QItemSelectionModel::SelectCurrent); // Do we need to scroll the TreeView further to ensure the item is easily visible? QRect item_rect = m_TreeView->visualRect(index); QRect tv_rect = m_TreeView->rect(); if ((item_rect.top() < MIN_SPACE) || ((tv_rect.bottom() - item_rect.bottom()) < MIN_SPACE)) { // Too close to the top or bottom m_TreeView->scrollTo(index, QAbstractItemView::PositionAtCenter); } } void BookBrowser::NextResource() { Resource *resource = GetCurrentResource(); if (resource != NULL) { QModelIndex index = m_OPFModel->GetModelItemIndex(resource, OPFModel::IndexChoice_Next); if (index.isValid()) { emit ResourceActivated(GetResourceByIndex(index)); } } } void BookBrowser::PreviousResource() { Resource *resource = GetCurrentResource(); if (resource != NULL) { QModelIndex index = m_OPFModel->GetModelItemIndex(resource, OPFModel::IndexChoice_Previous); if (index.isValid()) { emit ResourceActivated(GetResourceByIndex(index)); } } } void BookBrowser::SortHTML() { QList resources = ValidSelectedResources(); QMessageBox::StandardButton button_pressed; button_pressed = QMessageBox::warning(this, tr("Sigil"), tr("Are you sure you want to sort the selected files alphanumerically?") % "\n" % tr("This action cannot be reversed."), QMessageBox::Ok | QMessageBox::Cancel ); if (button_pressed != QMessageBox::Ok) { return; } QList indexList = m_TreeView->selectionModel()->selectedRows(0); m_OPFModel->SortHTML(indexList); SelectResources(resources); } void BookBrowser::RenumberTOC() { emit RenumberTOCContentsRequest(); } Resource *BookBrowser::GetUrlResource(const QUrl &url) { const QString &filename = QFileInfo(url.path()).fileName(); try { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); return resource; } catch (ResourceDoesNotExist) { Utility::DisplayStdErrorDialog(tr("The file \"%1\" does not exist.").arg(filename)); } return NULL; } void BookBrowser::EmitResourceActivated(const QModelIndex &index) { QString identifier(m_OPFModel->itemFromIndex(index)->data().toString()); if (!identifier.isEmpty()) { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByIdentifier(identifier); emit ResourceActivated(resource); } } void BookBrowser::OpenContextMenu(const QPoint &point) { if (!SuccessfullySetupContextMenu(point)) { return; } m_ContextMenu->exec(m_TreeView->viewport()->mapToGlobal(point)); m_ContextMenu->clear(); // Ensure any actions with keyboard shortcuts that might have temporarily been // disabled are enabled again to let the shortcut work outside the menu. m_Delete->setEnabled(true); m_Merge->setEnabled(true); m_Rename->setEnabled(true); } QList BookBrowser::ValidSelectedHTMLResources() { return ValidSelectedResources(Resource::HTMLResourceType); } QList BookBrowser::AllHTMLResources() { return m_OPFModel->GetResourceListInFolder(Resource::HTMLResourceType); } QList BookBrowser::AllImageResources() { return m_OPFModel->GetResourceListInFolder(Resource::ImageResourceType); } QList BookBrowser::AllMediaResources() { QList resources; resources = m_OPFModel->GetResourceListInFolder(Resource::ImageResourceType); resources.append(m_OPFModel->GetResourceListInFolder(Resource::VideoResourceType)); resources.append(m_OPFModel->GetResourceListInFolder(Resource::AudioResourceType)); return resources; } QList BookBrowser::AllCSSResources() { return m_OPFModel->GetResourceListInFolder(Resource::CSSResourceType); } QList BookBrowser::ValidSelectedResources(Resource::ResourceType resource_type) { QList resources = ValidSelectedResources(); foreach(Resource *resource, resources) { if (resource->Type() != resource_type) { resources.clear(); } } return resources; } int BookBrowser::AllSelectedItemCount() { QList list = m_TreeView->selectionModel()->selectedRows(0); int count = list.length(); if (count <= 1) { return count; } foreach(QModelIndex index, list) { QStandardItem *item = m_OPFModel->itemFromIndex(index); const QString &identifier = item->data().toString(); // If folder item included, multiple selection is invalid if (identifier == NULL) { return -1; } Resource *resource = m_Book->GetFolderKeeper()->GetResourceByIdentifier(identifier); // If for some reason there is something with an identifier but no resource, fail if (resource == NULL) { return -1; } } return count; } QList BookBrowser::AllSelectedResources() { QList resources; if (AllSelectedItemCount() < 1) { return resources; } QList list = m_TreeView->selectionModel()->selectedRows(0); foreach(QModelIndex index, list) { QStandardItem *item = m_OPFModel->itemFromIndex(index); if (item != NULL) { const QString &identifier = item->data().toString(); Resource *resource = m_Book->GetFolderKeeper()->GetResourceByIdentifier(identifier); if (resource != NULL) { resources.append(resource); } } } return resources; } QList BookBrowser::ValidSelectedResources() { QList resources; Resource::ResourceType resource_type = Resource::HTMLResourceType; if (ValidSelectedItemCount() < 1) { return resources; } QList list = m_TreeView->selectionModel()->selectedRows(0); foreach(QModelIndex index, list) { QStandardItem *item = m_OPFModel->itemFromIndex(index); if (item != NULL) { const QString &identifier = item->data().toString(); Resource *resource = m_Book->GetFolderKeeper()->GetResourceByIdentifier(identifier); if (resource != NULL) { resources.append(resource); resource_type = resource->Type(); } } } // TOC and contents are not in a folder and are always just one file if (resource_type == Resource::OPFResourceType || resource_type == Resource::NCXResourceType) { return resources; } // Sort according to treeview order QList sorted_resources; QList all_resources = m_OPFModel->GetResourceListInFolder(resource_type); foreach(Resource * all_resource, all_resources) { foreach(Resource * resource, resources) { if (all_resource->Filename() == resource->Filename()) { sorted_resources.append(all_resource); break; } } } return sorted_resources; } int BookBrowser::ValidSelectedItemCount() { QList list = m_TreeView->selectionModel()->selectedRows(0); int count = list.length(); if (count <= 1) { return count; } Resource::ResourceType resource_type = Resource::HTMLResourceType; foreach(QModelIndex index, list) { QStandardItem *item = m_OPFModel->itemFromIndex(index); const QString &identifier = item->data().toString(); // If folder item included, multiple selection is invalid if (identifier == NULL) { return -1; } Resource *resource = m_Book->GetFolderKeeper()->GetResourceByIdentifier(identifier); // If for some reason there is something with an identifier but no resource, fail if (resource == NULL) { return -1; } // Check that multiple selection only contains items of the same type if (index == list[0]) { resource_type = resource->Type(); } else if (resource_type != resource->Type()) { return -1; } } return count; } void BookBrowser::AddFile(QString filepath) { m_Book->GetFolderKeeper()->AddContentFileToFolder(filepath); emit BookContentModified(); Refresh(); } void BookBrowser::AddNew() { if (m_LastContextMenuType == Resource::HTMLResourceType) { AddNewHTML(); } else if (m_LastContextMenuType == Resource::CSSResourceType) { AddNewCSS(); } else if (m_LastContextMenuType == Resource::ImageResourceType) { AddNewSVG(); } } // Create a new HTML file and copy the text from the current file into it void BookBrowser::CopyHTML() { Resource *current_resource = GetCurrentResource(); if (!current_resource) { return; } HTMLResource *current_html_resource = qobject_cast(current_resource); // Create an empty file HTMLResource *new_html_resource = m_Book->CreateEmptyHTMLFile(current_html_resource); m_Book->MoveResourceAfter(new_html_resource, current_html_resource); // Copy the text from the current file new_html_resource->SetText(current_html_resource->GetText()); // Open the new file in a tab emit ResourceActivated(new_html_resource); emit BookContentModified(); Refresh(); } // Create a new HTML file and insert it after the currently selected file void BookBrowser::AddNewHTML() { Resource *current_resource = GetCurrentResource(); HTMLResource *current_html_resource = qobject_cast(current_resource); HTMLResource *new_html_resource = m_Book->CreateEmptyHTMLFile(current_html_resource); if (current_resource != NULL) { m_Book->MoveResourceAfter(new_html_resource, current_html_resource); } // Open the new file in a tab emit ResourceActivated(new_html_resource); emit BookContentModified(); Refresh(); } void BookBrowser::CopyCSS() { Resource *current_resource = GetCurrentResource(); if (!current_resource) { return; } CSSResource *current_css_resource = qobject_cast(current_resource); // Create an empty file CSSResource *new_resource = m_Book->CreateEmptyCSSFile(); // Copy the text from the current file new_resource->SetText(current_css_resource->GetText()); // Open the new file in a tab emit ResourceActivated(new_resource); emit BookContentModified(); Refresh(); } void BookBrowser::AddNewCSS() { CSSResource *new_resource = m_Book->CreateEmptyCSSFile(); // Open the new file in a tab emit ResourceActivated(new_resource); emit BookContentModified(); Refresh(); } void BookBrowser::AddNewSVG() { SVGResource *new_resource = m_Book->CreateEmptySVGFile(); // Open the new file in a tab emit ResourceActivated(new_resource); emit BookContentModified(); Refresh(); } void BookBrowser::CreateHTMLTOCCSSFile() { CSSResource *css_resource = m_Book->CreateHTMLTOCCSSFile(); m_OPFModel->RenameResource(css_resource, SGC_TOC_CSS_FILENAME); emit BookContentModified(); Refresh(); } void BookBrowser::CreateIndexCSSFile() { CSSResource *css_resource = m_Book->CreateIndexCSSFile(); m_OPFModel->RenameResource(css_resource, SGC_INDEX_CSS_FILENAME); emit BookContentModified(); Refresh(); } QStringList BookBrowser::AddExisting(bool only_multimedia, bool only_images) { QStringList added_files; QString filter_string = ""; if (!QFileInfo(m_LastFolderOpen).exists()) { m_LastFolderOpen = ""; } QStringList filepaths = QFileDialog::getOpenFileNames(this, tr("Add Existing Files"), m_LastFolderOpen, filter_string); if (filepaths.isEmpty()) { return added_files; } m_LastFolderOpen = QFileInfo(filepaths.first()).absolutePath(); QStringList current_filenames = m_Book->GetFolderKeeper()->GetAllFilenames(); QStringList invalid_filenames; HTMLResource *current_html_resource = qobject_cast(GetCurrentResource()); Resource *open_resource = NULL; // Display progress dialog if adding several items // Avoid dialog popping up over Insert File from disk for duplicate file all the time int progress_value = 0; int file_count = filepaths.count(); QProgressDialog progress(QObject::tr("Adding Existing Files.."), 0, 0, file_count, this); if (file_count > 1) { progress.setMinimumDuration(PROGRESS_BAR_MINIMUM_DURATION); progress.setValue(progress_value); } foreach(QString filepath, filepaths) { if (file_count > 1) { // Set progress value and ensure dialog has time to display when doing extensive updates // Set ahead of actual add since it can abort in several places progress.setValue(progress_value++); qApp->processEvents(QEventLoop::ExcludeUserInputEvents); } // Check if the file matches the type requested for adding // Only used for inserting images from disk if (only_images) { if (!IMAGE_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower())) { Utility::DisplayStdErrorDialog( tr("File is not an image and cannot be used:\n\n\"%1\".").arg(filepath)); continue; } } else if (only_multimedia) { if (!IMAGE_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower()) && !SVG_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower()) && !VIDEO_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower()) && !AUDIO_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower())) { Utility::DisplayStdErrorDialog( tr("File is not multimedia (image, video, audio) and cannot be inserted:\n\n\"%1\".") .arg(filepath)); continue; } } QString filename = QFileInfo(filepath).fileName(); if (current_filenames.contains(filename)) { // If this is an image prompt to replace it. if (IMAGE_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower()) || SVG_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower()) || VIDEO_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower()) || AUDIO_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower())) { QMessageBox::StandardButton button_pressed; button_pressed = QMessageBox::warning(this, tr("Sigil"), tr("The multimedia file \"%1\" already exists in the book.\n\nOK to replace?").arg(filename), QMessageBox::Ok | QMessageBox::Cancel); if (button_pressed != QMessageBox::Ok) { continue; } try { Resource *old_resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); old_resource->Delete(); } catch (ResourceDoesNotExist) { Utility::DisplayStdErrorDialog(tr("Unable to delete or replace file \"%1\".").arg(filename) ); continue; } } else { QMessageBox::warning(this, tr("Sigil"), tr("Unable to load \"%1\"\n\nA file with this name already exists in the book.").arg(filename)); continue; } } if (QFileInfo(filepath).fileName() == "page-map.xml") { m_Book->GetFolderKeeper()->AddContentFileToFolder(filepath, true, QString("application/oebps-page-map+xml")); } else if (TEXT_EXTENSIONS.contains(QFileInfo(filepath).suffix().toLower())) { ImportHTML html_import(filepath); XhtmlDoc::WellFormedError error = html_import.CheckValidToLoad(); if (error.line != -1) { invalid_filenames << QString("%1 (line %2: %3)").arg(QDir::toNativeSeparators(filepath)).arg(error.line).arg(error.message); continue; } html_import.SetBook(m_Book, true); // Since we set the Book manually, // this call merely mutates our Book. bool extract_metadata = false; html_import.GetBook(extract_metadata); Resource *added_resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); HTMLResource *added_html_resource = qobject_cast(added_resource); if (current_html_resource && added_html_resource) { m_Book->MoveResourceAfter(added_html_resource, current_html_resource); current_html_resource = added_html_resource; // Only open HTML files as they are likely to be edited whereas other items // are likely to be inserted into or linked to the current file. // Only open the first file in any added group. if (!open_resource) { open_resource = added_resource; } } } else { // TODO: adding a CSS file should add the referenced fonts too Resource *resource = m_Book->GetFolderKeeper()->AddContentFileToFolder(filepath); if (resource->Type() == Resource::CSSResourceType) { CSSResource *css_resource = qobject_cast (resource); css_resource->InitialLoad(); } } added_files.append(filepath); } if (!invalid_filenames.isEmpty()) { progress.cancel(); QMessageBox::warning(this, tr("Sigil"), tr("The following file(s) were not loaded due to invalid content or not well formed XML:\n\n%1") .arg(invalid_filenames.join("\n"))); } if (!added_files.isEmpty()) { QApplication::setOverrideCursor(Qt::WaitCursor); emit ResourcesAdded(); if (open_resource) { emit ResourceActivated(open_resource); } emit BookContentModified(); Refresh(); emit ShowStatusMessageRequest(tr("File(s) added.")); QApplication::restoreOverrideCursor(); } return added_files; } void BookBrowser::SaveAsUrl(const QUrl &url) { SaveAsFile(GetUrlResource(url)); } void BookBrowser::SaveAs() { QList resources = ValidSelectedResources(); if (resources.count() == 1) { Resource *resource = resources.first(); SaveAsFile(resource); } else if (resources.count() > 1) { SaveAsFiles(); } } void BookBrowser::SaveAsFile(Resource *resource) { if (!resource) { return; } const QString &filename = resource->Filename(); QString save_path = m_LastFolderSaveAs + "/" + filename; QString filter_string = ""; QString default_filter = ""; QString destination = QFileDialog::getSaveFileName(this, tr("Save As File"), save_path, filter_string, &default_filter ); if (destination.isEmpty()) { return; } // Store the folder the user saved to m_LastFolderSaveAs = QFileInfo(destination).absolutePath(); m_Book->GetFolderKeeper()->SuspendWatchingResources(); resource->SaveToDisk(); m_Book->GetFolderKeeper()->ResumeWatchingResources(); QString source = resource->GetFullPath(); if (QFileInfo(destination).exists()) { QFile::remove(destination); } if (!QFile::copy(source, destination)) { Utility::DisplayStdErrorDialog(tr("Unable to save the file.")); } } void BookBrowser::SaveAsFiles() { QList resources = ValidSelectedResources(); QString dirname = QFileDialog::getExistingDirectory(this, tr("Choose the directory to save the files to"), m_LastFolderSaveAs); if (dirname.isEmpty()) { return; } bool files_exist = false; foreach(Resource * resource, resources) { QString fullfilepath = dirname + "/" + resource->Filename(); if (QFileInfo(fullfilepath).exists()) { files_exist = true; break; } } QMessageBox::StandardButton button_pressed; if (files_exist) { button_pressed = QMessageBox::warning(this, tr("Sigil"), tr("One or more files already exists. OK to overwrite?"), QMessageBox::Ok | QMessageBox::Cancel); if (button_pressed != QMessageBox::Ok) { return; } } m_LastFolderSaveAs = dirname; m_Book->GetFolderKeeper()->SuspendWatchingResources(); foreach(Resource * resource, resources) { resource->SaveToDisk(); QString source = resource->GetFullPath(); QString destination = dirname + "/" + resource->Filename(); if (QFileInfo(destination).exists()) { if (!QFileInfo(destination).isFile()) { Utility::DisplayStdErrorDialog(tr("Unable to save files. Destination may be a directory.")); break; } QFile::remove(destination); } if (!QFile::copy(source, destination)) { Utility::DisplayStdErrorDialog(tr("Unable to save files.")); break; } } m_Book->GetFolderKeeper()->ResumeWatchingResources(); } void BookBrowser::OpenWith() const { Resource *resource = GetCurrentResource(); if (resource) { m_Book->GetFolderKeeper()->SuspendWatchingResources(); resource->SaveToDisk(); m_Book->GetFolderKeeper()->ResumeWatchingResources(); const QString &editorPath = OpenExternally::selectEditorForResourceType(resource->Type()); if (!editorPath.isEmpty()) { if (OpenExternally::openFile(resource->GetFullPath(), editorPath)) { m_Book->GetFolderKeeper()->WatchResourceFile(resource); } } } } void BookBrowser::OpenWithEditor() const { Resource *resource = GetCurrentResource(); if (resource) { m_Book->GetFolderKeeper()->SuspendWatchingResources(); resource->SaveToDisk(); m_Book->GetFolderKeeper()->ResumeWatchingResources(); const QVariant &editorPathData = m_OpenWithEditor->data(); if (editorPathData.isValid()) { if (OpenExternally::openFile(resource->GetFullPath(), editorPathData.toString())) { m_Book->GetFolderKeeper()->WatchResourceFile(resource); } } } } void BookBrowser::Rename() { QList resources = ValidSelectedResources(); if (resources.isEmpty()) { return; } Resource::ResourceType resource_type = resources.first()->Type(); if (resource_type == Resource::OPFResourceType || resource_type == Resource::NCXResourceType) { return; } if (resources.count() == 1) { // Save the resource so it can be re-selected m_RenamedResource = GetCurrentResource(); // The actual renaming code is in OPFModel::ItemChangedHandler m_TreeView->edit(m_TreeView->currentIndex()); } else { RenameSelected(); } } QString BookBrowser::GetFirstAvailableTemplateName(QString base, QString number_string) { int number = number_string.toInt(); QStringList book_filenames = m_Book->GetFolderKeeper()->GetAllFilenames(); QStringList short_filenames; foreach(QString filename, book_filenames) { short_filenames.append(filename.left(filename.lastIndexOf("."))); } QString template_name; while (true) { template_name = QString("%1%2").arg(base).arg(number, number_string.length(), 10, QChar('0')); if (!short_filenames.contains(template_name)) { break; } number++; } return template_name; } void BookBrowser::RenameSelected() { QList resources = ValidSelectedResources(); if (resources.isEmpty()) { return; } // Load initial value from stored preferences SettingsStore settings; QString template_name = settings.renameTemplate(); // If no template set it to the first available default name if (template_name.isEmpty()) { template_name = GetFirstAvailableTemplateName("Section", "0001"); } RenameTemplate rename_template(template_name, this); // Get the template from the user if (rename_template.exec() != QDialog::Accepted) { return; } template_name = rename_template.GetTemplateName(); // Save the template for later - save now in case of abort before final save settings.setRenameTemplate(template_name); // Get the name without extension, and get the extension if any QString new_extension; if (template_name.contains(".")) { new_extension = template_name.right(template_name.length() - template_name.lastIndexOf(".")); template_name = template_name.left(template_name.lastIndexOf(".")); } // Get the base text and starting number if the template is not just an extension QString template_base; QString template_number_string; if (!template_name.isEmpty()) { int pos = template_name.length() - 1; while (pos >= 0 && template_name[pos].isDigit()) { template_number_string.prepend(QString("%1").arg(template_name[pos])); pos--; } template_base = template_name.left(pos + 1); if (template_number_string == "") { template_number_string = "1"; } } // Get the list of new names that will be created int resources_count = resources.count(); int template_number_start = template_number_string.toInt(); QStringList new_filenames; QStringList book_filenames = m_Book->GetFolderKeeper()->GetAllFilenames(); int template_number = template_number_start; for (int i = 0; i < resources_count; i++) { QString file_extension = new_extension; QString old_filename = resources[i]->Filename(); // If the user gave a new file extension, use it, else use the old name's extension if (file_extension.isEmpty() && old_filename.contains('.')) { file_extension = old_filename.right(old_filename.length() - old_filename.lastIndexOf('.')); } // Save the name QString name; if (template_number_string.isEmpty()) { // If no name or number given for template, then use old name but with new extension QString old_filename_no_extension = old_filename.left(old_filename.lastIndexOf('.')); name = QString("%1").arg(old_filename_no_extension).append(file_extension); } else { name = QString("%1%2").arg(template_base).arg(template_number, template_number_string.length(), 10, QChar('0')).append(file_extension); } // Stop if the new name is already used or will be used by a different entry if ((book_filenames.contains(name) && resources[i]->Filename() != name) || new_filenames.contains(name)) { QMessageBox::critical(this, tr("Sigil"), tr("Cannot rename files since this would result in duplicate filenames.")); return; } new_filenames.append(name); template_number++; } foreach (QString s, new_filenames) { if (!Utility::use_filename_warning(s)) { return; } } // Save the next name in the sequence for later QString next_name_template; if (!template_number_string.isEmpty()) { QString next_template_number_string = QString("%1").arg(template_number, template_number_string.length(), 10, QChar('0')); next_name_template = GetFirstAvailableTemplateName(template_base, next_template_number_string); } if (!new_extension.isEmpty()) { next_name_template.append(new_extension); } settings.setRenameTemplate(next_name_template); // After a rename we want to keep the resources in the identical position. int scrollY = m_TreeView->verticalScrollBar()->value(); // Rename the resources m_OPFModel->RenameResourceList(resources, new_filenames); SelectResources(resources); m_TreeView->verticalScrollBar()->setSliderPosition(scrollY); } void BookBrowser::Delete() { emit RemoveResourcesRequest(); } void BookBrowser::RemoveSelection(QList tab_resources) { QList resources = ValidSelectedResources(); RemoveResources(tab_resources, resources); } void BookBrowser::RemoveResources(QList tab_resources, QList resources) { if (resources.isEmpty()) { return; } Resource *next_resource = NULL; Resource * nav_resource = m_Book->GetConstOPF()->GetNavResource(); if (nav_resource && resources.contains(nav_resource)) { Utility::DisplayStdErrorDialog( tr("The Nav document can not be removed.") ); return; } Resource::ResourceType resource_type = resources.first()->Type(); if (resource_type == Resource::OPFResourceType || resource_type == Resource::NCXResourceType) { Utility::DisplayStdErrorDialog( tr("Neither the NCX nor the OPF can be removed.") ); return; } else if (resource_type == Resource::HTMLResourceType && resources.count() == m_Book->GetFolderKeeper()->GetResourceTypeList().count()) { { Utility::DisplayStdErrorDialog( tr("You cannot remove all html files.\n" "There always has to be at least one.") ); return; } } QStringList files_to_delete; foreach(Resource * resource, resources) { files_to_delete.append(resource->Filename()); } // Confirm and select which files to delete DeleteFiles delete_files(files_to_delete, this); connect(&delete_files, SIGNAL(OpenFileRequest(QString, int)), this, SIGNAL(OpenFileRequest(QString, int))); if (delete_files.exec() != QDialog::Accepted) { return; } files_to_delete = delete_files.GetFilesToDelete(); if (files_to_delete.count() < 1) { return; } QApplication::setOverrideCursor(Qt::WaitCursor); foreach(Resource * resource, resources) { if (!files_to_delete.contains(resource->Filename())) { resources.removeOne(resource); } } // Find next resource to select QList selected_resources = ValidSelectedResources(); bool keep_selection = true; foreach (Resource *resource, selected_resources) { if (resources.contains(resource)) { keep_selection = false; break; } } if (keep_selection) { next_resource = selected_resources.first(); } else { next_resource = ResourceToSelectAfterRemove(resources); } // Check if any tabs will remain after deleting resources bool tab_remaining = false; foreach(Resource * tab_resource, tab_resources) { if (!resources.contains(tab_resource)) { tab_remaining = true; } } // If no tabs will be left, make sure at least one tab is opened. // next_resource will always be an openable type resource if no // tabs remain because at least one tab was open before deletion. if (!tab_remaining && next_resource) { emit ResourceActivated(next_resource); } // Delete the resources foreach(Resource * resource, resources) { resource->Delete(); } emit ResourcesDeleted(); emit BookContentModified(); // Avoid full refresh so selection stays for non-openable resources m_OPFModel->Refresh(); RefreshCounts(); if (keep_selection) { SelectResources(selected_resources); } else { if (next_resource) { UpdateSelection(next_resource); } } QApplication::restoreOverrideCursor(); } Resource *BookBrowser::ResourceToSelectAfterRemove(QList selected_resources) { if (selected_resources.isEmpty()) { return NULL; } QList all_resources = m_OPFModel->GetResourceListInFolder(selected_resources.first()); if (all_resources.isEmpty()) { return NULL; } Resource *top_resource = NULL; Resource *bottom_resource = NULL; bool in_delete = false; foreach(Resource * all_resource, all_resources) { bool found = false; foreach(Resource * selected_resource, selected_resources) { if (all_resource->Filename() == selected_resource->Filename()) { in_delete = true; found = true; break; } } if (!in_delete && !found) { top_resource = all_resource; } if (in_delete && !found && !bottom_resource) { bottom_resource = all_resource; } } if (bottom_resource) { top_resource = bottom_resource; } else if (!top_resource) { all_resources = AllHTMLResources(); if (!all_resources.isEmpty()) { top_resource = all_resources.first(); } } return top_resource; } void BookBrowser::SetCoverImage() { QList resources = ValidSelectedResources(); int scrollY = m_TreeView->verticalScrollBar()->value(); ImageResource *image_resource = qobject_cast(GetCurrentResource()); if (image_resource == NULL) { emit ShowStatusMessageRequest(tr("Unable to set file as cover image.")); return; } m_Book->GetOPF()->SetResourceAsCoverImage(image_resource); m_OPFModel->Refresh(); emit BookContentModified(); SelectResources(resources); m_TreeView->verticalScrollBar()->setSliderPosition(scrollY); } void BookBrowser::AddSemanticCode() { QList resources = ValidSelectedResources(); int scrollY = m_TreeView->verticalScrollBar()->value(); if (resources.count()!= 1) { return; } Resource * resource = resources.first(); if (resource->Type() != Resource::HTMLResourceType) { return; } HTMLResource *html_resource = qobject_cast(resource); QStringList codes; QString version = m_Book->GetConstOPF()->GetEpubVersion(); if (version.startsWith('3')) { AddSemantics addmeaning(Landmarks::instance()->GetCodeMap(), this); if (addmeaning.exec() == QDialog::Accepted) { codes = addmeaning.GetSelectedEntries(); if (!codes.isEmpty()) { QString new_code = codes.at(0); NavProcessor navproc(m_Book->GetConstOPF()->GetNavResource()); navproc.AddLandmarkCode(html_resource, new_code); // if new_code is valid for guide as well, update the guide too QString guide_code = Landmarks::instance()->GuideLandMapping(new_code); if (!guide_code.isEmpty()) { m_Book->GetOPF()->AddGuideSemanticCode(html_resource, guide_code); m_OPFModel->Refresh(); } emit BookContentModified(); } } } else { AddSemantics addmeaning(GuideItems::instance()->GetCodeMap(), this); if (addmeaning.exec() == QDialog::Accepted) { codes = addmeaning.GetSelectedEntries(); if (!codes.isEmpty()) { m_Book->GetOPF()->AddGuideSemanticCode(html_resource, codes.at(0)); m_OPFModel->Refresh(); emit BookContentModified(); } } } SelectResources(resources); m_TreeView->verticalScrollBar()->setSliderPosition(scrollY); } void BookBrowser::Merge() { int scrollY = m_TreeView->verticalScrollBar()->value(); emit MergeResourcesRequest(ValidSelectedResources(Resource::HTMLResourceType)); m_TreeView->verticalScrollBar()->setSliderPosition(scrollY); } void BookBrowser::LinkStylesheets() { QList resources = ValidSelectedResources(); if (resources.isEmpty()) { return; } Resource::ResourceType resource_type = resources.first()->Type(); if (resource_type != Resource::HTMLResourceType) { return; } emit LinkStylesheetsToResourcesRequest(ValidSelectedResources(Resource::HTMLResourceType)); } void BookBrowser::NoObfuscationMethod() { foreach(Resource * resource, ValidSelectedResources()) { FontResource *font_resource = qobject_cast(resource); Q_ASSERT(font_resource); font_resource->SetObfuscationAlgorithm(""); emit BookContentModified(); } } void BookBrowser::AdobesObfuscationMethod() { foreach(Resource * resource, ValidSelectedResources()) { FontResource *font_resource = qobject_cast(resource); Q_ASSERT(font_resource); font_resource->SetObfuscationAlgorithm(ADOBE_FONT_ALGO_ID); emit BookContentModified(); } } void BookBrowser::IdpfsObfuscationMethod() { foreach(Resource * resource, ValidSelectedResources()) { FontResource *font_resource = qobject_cast(resource); Q_ASSERT(font_resource); font_resource->SetObfuscationAlgorithm(IDPF_FONT_ALGO_ID); emit BookContentModified(); } } void BookBrowser::ValidateStylesheetWithW3C() { QList resources = ValidSelectedResources(Resource::CSSResourceType); foreach(Resource * resource, resources) { CSSResource *css_resource = qobject_cast(resource); Q_ASSERT(css_resource); css_resource->ValidateStylesheetWithW3C(); } } void BookBrowser::ExpandTextFolder() { m_TreeView->expand(m_OPFModel->GetTextFolderModelIndex()); } void BookBrowser::ReadSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); m_LastFolderOpen = settings.value("lastfolderopen").toString(); m_LastFolderSaveAs = settings.value("lastfoldersaveas").toString(); settings.endGroup(); } void BookBrowser::WriteSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); settings.setValue("lastfolderopen", m_LastFolderOpen); settings.setValue("lastfoldersaveas", m_LastFolderSaveAs); settings.endGroup(); } void BookBrowser::SetupTreeView() { m_TreeView->setEditTriggers(QAbstractItemView::EditKeyPressed); m_TreeView->setSortingEnabled(false); m_TreeView->sortByColumn(-1); m_TreeView->setUniformRowHeights(true); m_TreeView->setDragEnabled(true); m_TreeView->setAcceptDrops(false); m_TreeView->setDropIndicatorShown(true); m_TreeView->setDragDropMode(QAbstractItemView::InternalMove); m_TreeView->setContextMenuPolicy(Qt::CustomContextMenu); m_TreeView->setItemDelegate(new FilenameDelegate); m_TreeView->setSelectionMode(QAbstractItemView::ExtendedSelection); m_TreeView->setModel(m_OPFModel); for (int i = 1; i < m_OPFModel->columnCount(); ++i) { m_TreeView->hideColumn(i); } m_TreeView->setIndentation(COLUMN_INDENTATION); m_TreeView->setHeaderHidden(true); } void BookBrowser::CreateContextMenuActions() { KeyboardShortcutManager *sm = KeyboardShortcutManager::instance(); m_SelectAll = new QAction(tr("Select All"), this); m_AddNewHTML = new QAction(tr("Add Blank HTML File"), this); m_AddNewCSS = new QAction(tr("Add Blank Stylesheet"), this); m_AddNewSVG = new QAction(tr("Add Blank SVG Image"), this); m_AddExisting = new QAction(tr("Add Existing Files..."), this); m_CopyHTML = new QAction(tr("Add Copy"), this); m_CopyCSS = new QAction(tr("Add Copy"), this); m_Rename = new QAction(tr("Rename") + "...", this); m_Delete = new QAction(tr("Delete") + "...", this); m_CoverImage = new QAction(tr("Cover Image"), this); m_Merge = new QAction(tr("Merge"), this); m_NoObfuscationMethod = new QAction(tr("None"), this); m_AdobesObfuscationMethod = new QAction(tr("Use Adobe's Method"), this); m_IdpfsObfuscationMethod = new QAction(tr("Use IDPF's Method"), this); m_SortHTML = new QAction(tr("Sort") + "...", this); m_RenumberTOC = new QAction(tr("Renumber TOC Entries"), this); m_LinkStylesheets = new QAction(tr("Link Stylesheets..."), this); m_AddSemantics = new QAction(tr("Add Semantics..."), this); m_ValidateWithW3C = new QAction(tr("Validate with W3C"), this); m_OpenWith = new QAction(tr("Open With") + "...", this); m_SaveAs = new QAction(tr("Save As") + "...", this); m_OpenWithEditor = new QAction("", this); m_CoverImage ->setCheckable(true); m_NoObfuscationMethod ->setCheckable(true); m_AdobesObfuscationMethod->setCheckable(true); m_IdpfsObfuscationMethod ->setCheckable(true); m_CopyHTML->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Y)); sm->registerAction(this, m_CopyHTML, "MainWindow.BookBrowser.CopyHTML"); m_Delete->setShortcut(QKeySequence::Delete); m_Merge->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M)); m_Merge->setToolTip("Merge with previous file, or merge multiple files into one."); sm->registerAction(this, m_Merge, "MainWindow.BookBrowser.Merge"); m_Rename->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_R)); m_Rename->setToolTip("Rename selected file(s)"); sm->registerAction(this, m_Rename, "MainWindow.BookBrowser.Rename"); m_LinkStylesheets->setToolTip("Link Stylesheets to selected file(s)."); sm->registerAction(this, m_LinkStylesheets, "MainWindow.BookBrowser.LinkStylesheets"); m_AddSemantics->setToolTip("Add Semantics to selected file(s)."); sm->registerAction(this, m_AddSemantics, "MainWindow.BookBrowser.AddSemantics"); // Has to be added to the book browser itself as well // for the keyboard shortcut to work. addAction(m_CopyHTML); addAction(m_Delete); addAction(m_Merge); addAction(m_Rename); addAction(m_LinkStylesheets); addAction(m_AddSemantics); } bool BookBrowser::SuccessfullySetupContextMenu(const QPoint &point) { QModelIndex index = m_TreeView->indexAt(point); if (!index.isValid()) { return false; } int item_count = ValidSelectedItemCount(); if (item_count < 1) { return false; } QStandardItem *item = m_OPFModel->itemFromIndex(index); Q_ASSERT(item); m_LastContextMenuType = m_OPFModel->GetResourceType(item); QList resources = m_OPFModel->GetResourceListInFolder(m_LastContextMenuType); Resource *resource = GetCurrentResource(); if (resource) { m_ContextMenu->addSeparator(); // Delete and Rename if (m_LastContextMenuType != Resource::OPFResourceType && m_LastContextMenuType != Resource::NCXResourceType) { m_ContextMenu->addAction(m_Delete); m_Delete->setEnabled(m_LastContextMenuType != Resource::HTMLResourceType || (AllHTMLResources().count() > 1 && resources.count() != item_count)); m_ContextMenu->addAction(m_Rename); } if (resource->Type() == Resource::HTMLResourceType) { m_ContextMenu->addAction(m_Merge); m_Merge->setEnabled(item_count > 1 || (AllHTMLResources().count() > 1 && AllHTMLResources().at(0) != ValidSelectedResources().at(0))); m_ContextMenu->addAction(m_SortHTML); m_SortHTML->setEnabled(item_count > 1); m_ContextMenu->addAction(m_LinkStylesheets); m_LinkStylesheets->setEnabled(AllCSSResources().count() > 0); m_ContextMenu->addAction(m_AddSemantics); } if (resource->Type() == Resource::FontResourceType) { SetupFontObfuscationMenu(); } if (resource->Type() == Resource::NCXResourceType) { m_ContextMenu->addAction(m_RenumberTOC); } if (resource->Type() == Resource::CSSResourceType) { m_ContextMenu->addAction(m_ValidateWithW3C); } if (resource->Type() == Resource::ImageResourceType) { SetupImageSemanticContextMenu(resource); } m_ContextMenu->addSeparator(); // Open With if (OpenExternally::mayOpen(resource->Type())) { const QString &editorPath = OpenExternally::editorForResourceType(resource->Type()); const QString &editorDescription = OpenExternally::editorDescriptionForResourceType(resource->Type()); if (editorPath.isEmpty()) { m_OpenWithEditor->setData(QVariant::Invalid); m_OpenWith->setText(tr("Open With") + "..."); m_ContextMenu->addAction(m_OpenWith); } else { m_OpenWithEditor->setText(editorDescription); m_OpenWithEditor->setData(editorPath); m_OpenWithEditor->setEnabled(item_count == 1); m_OpenWith->setText(tr("Other Application") + "..."); m_ContextMenu->addMenu(m_OpenWithContextMenu); } m_OpenWith->setEnabled(item_count == 1); m_OpenWithContextMenu->setEnabled(item_count == 1); } // Save As m_ContextMenu->addAction(m_SaveAs); } // Applies to Menus and Resources // Add Existing and Add specific file types m_ContextMenu->addSeparator(); if (m_LastContextMenuType == Resource::HTMLResourceType) { m_ContextMenu->addAction(m_AddNewHTML); m_ContextMenu->addAction(m_CopyHTML); m_CopyHTML->setEnabled(item_count == 1); } else if (m_LastContextMenuType == Resource::CSSResourceType) { m_ContextMenu->addAction(m_AddNewCSS); m_ContextMenu->addAction(m_CopyCSS); m_CopyCSS->setEnabled(item_count == 1); } else if (m_LastContextMenuType == Resource::ImageResourceType || m_LastContextMenuType == Resource::SVGResourceType) { m_ContextMenu->addAction(m_AddNewSVG); } m_ContextMenu->addAction(m_AddExisting); // Select All if (m_LastContextMenuType != Resource::OPFResourceType && m_LastContextMenuType != Resource::NCXResourceType) { m_ContextMenu->addSeparator(); m_ContextMenu->addAction(m_SelectAll); m_SelectAll->setEnabled(item_count > 0 || (!resource && resources.count() > 0)); } return true; } void BookBrowser::SetupImageSemanticContextMenu(Resource *resource) { m_ContextMenu->addAction(m_CoverImage); ImageResource *image_resource = qobject_cast(GetCurrentResource()); Q_ASSERT(image_resource); m_CoverImage->setChecked(false); if (m_Book->GetOPF()->IsCoverImage(image_resource)) { m_CoverImage->setChecked(true); } } void BookBrowser::SetupFontObfuscationMenu() { m_FontObfuscationContextMenu->addAction(m_NoObfuscationMethod); m_FontObfuscationContextMenu->addAction(m_AdobesObfuscationMethod); m_FontObfuscationContextMenu->addAction(m_IdpfsObfuscationMethod); SetFontObfuscationActionCheckState(); m_ContextMenu->addMenu(m_FontObfuscationContextMenu); } void BookBrowser::SetFontObfuscationActionCheckState() { Resource *resource = GetCurrentResource(); if (resource->Type() != Resource::FontResourceType) { return; } // Get the algorithm used by the first font FontResource *font_resource = qobject_cast(resource); Q_ASSERT(font_resource); QString algorithm = font_resource->GetObfuscationAlgorithm(); // Now compare against all the other fonts and if the same set a checkmark bool same_algorithm = true; foreach(Resource * resource, ValidSelectedResources()) { FontResource *font_resource2 = qobject_cast(resource); Q_ASSERT(font_resource); QString algorithm2 = font_resource2->GetObfuscationAlgorithm(); if (algorithm2 != algorithm) { same_algorithm = false; break; } } m_NoObfuscationMethod->setChecked(same_algorithm && (algorithm.isEmpty() || algorithm == "")); m_AdobesObfuscationMethod->setChecked(same_algorithm && algorithm == ADOBE_FONT_ALGO_ID); m_IdpfsObfuscationMethod ->setChecked(same_algorithm && algorithm == IDPF_FONT_ALGO_ID); } void BookBrowser::ConnectSignalsToSlots() { connect(m_TreeView, SIGNAL(activated(const QModelIndex &)), this, SLOT(EmitResourceActivated(const QModelIndex &))); connect(m_TreeView, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(OpenContextMenu(const QPoint &))); connect(m_OPFModel, SIGNAL(ResourceRenamed()), this, SLOT(SelectRenamedResource())); connect(m_SelectAll, SIGNAL(triggered()), this, SLOT(SelectAll())); connect(m_CopyHTML, SIGNAL(triggered()), this, SLOT(CopyHTML())); connect(m_CopyCSS, SIGNAL(triggered()), this, SLOT(CopyCSS())); connect(m_AddNewHTML, SIGNAL(triggered()), this, SLOT(AddNewHTML())); connect(m_RenumberTOC, SIGNAL(triggered()), this, SLOT(RenumberTOC())); connect(m_SortHTML, SIGNAL(triggered()), this, SLOT(SortHTML())); connect(m_AddNewCSS, SIGNAL(triggered()), this, SLOT(AddNewCSS())); connect(m_AddNewSVG, SIGNAL(triggered()), this, SLOT(AddNewSVG())); connect(m_AddExisting, SIGNAL(triggered()), this, SLOT(AddExisting())); connect(m_Rename, SIGNAL(triggered()), this, SLOT(Rename())); connect(m_Delete, SIGNAL(triggered()), this, SLOT(Delete())); connect(m_CoverImage, SIGNAL(triggered()), this, SLOT(SetCoverImage())); connect(m_Merge, SIGNAL(triggered()), this, SLOT(Merge())); connect(m_LinkStylesheets, SIGNAL(triggered()), this, SLOT(LinkStylesheets())); connect(m_AddSemantics, SIGNAL(triggered()), this, SLOT(AddSemanticCode())); connect(m_SaveAs, SIGNAL(triggered()), this, SLOT(SaveAs())); connect(m_ValidateWithW3C, SIGNAL(triggered()), this, SLOT(ValidateStylesheetWithW3C())); connect(m_OpenWith, SIGNAL(triggered()), this, SLOT(OpenWith())); connect(m_OpenWithEditor, SIGNAL(triggered()), this, SLOT(OpenWithEditor())); connect(m_AdobesObfuscationMethod, SIGNAL(triggered()), this, SLOT(AdobesObfuscationMethod())); connect(m_IdpfsObfuscationMethod, SIGNAL(triggered()), this, SLOT(IdpfsObfuscationMethod())); connect(m_NoObfuscationMethod, SIGNAL(triggered()), this, SLOT(NoObfuscationMethod())); } Resource *BookBrowser::GetCurrentResource() const { return GetResourceByIndex(m_TreeView->currentIndex()); } Resource *BookBrowser::GetResourceByIndex(QModelIndex index) const { if (!index.isValid()) { return NULL; } QStandardItem *item = m_OPFModel->itemFromIndex(index); Q_ASSERT(item); const QString &identifier = item->data().toString(); return m_Book->GetFolderKeeper()->GetResourceByIdentifier(identifier); } Sigil-0.9.9/src/MainUI/BookBrowser.h000066400000000000000000000272521321676412500171370ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef BOOKBROWSER_H #define BOOKBROWSER_H #include #include #include "BookManipulation/Book.h" #include "ResourceObjects/Resource.h" class MainWindow; class HTMLResource; class ImageResource; class OPFModel; class Resource; class QAction; class QMenu; class QModelIndex; class QPoint; class QToolButton; class QTreeView; class QVBoxLayout; class QUrl; /** * Represents the pane with which the user can manipulate the book's files. * The user uses this browser to open the files in tabs. Some files can then * be edited, others cannot. */ class BookBrowser : public QDockWidget { Q_OBJECT public: /** * Constructor. * * @param parent The QObject's parent. */ BookBrowser(QWidget *parent = 0); /** * Destructor. */ ~BookBrowser(); /** * List of selected resources */ QList AllSelectedResources(); int AllSelectedItemCount(); /** * Valid resources selected in the Book Browser */ QList ValidSelectedHTMLResources(); /** * All HTML resources in the Book Browser in order */ QList AllHTMLResources(); /** * All Image resources in the Book Browser in order */ QList AllImageResources(); QList AllMediaResources(); /* * All CSS resources in the Book Browser in order */ QList AllCSSResources(); void SelectResources(QList resources); void RemoveSelection(QList tab_resources); void RemoveResources(QList tab_resources, QList resources); /** * Returns the currently selected resource in the tree view. * * @return The currently selected resource in the tree view, * or NULL if no resource is selected. */ Resource *GetCurrentResource() const; /** * Updates the selection in the book display */ void UpdateSelection(Resource *resource); void AddFile(QString filepath); public slots: /** * Sets the book whose contents the browser should display. * * @param book The book to be displayed. */ void SetBook(QSharedPointer book); /** * Refreshes the display of the book. * This is done by clearing the current content * and reloading the file list from the book. */ void Refresh(); /** * Refreshes the TOC file to renumber entries */ void RenumberTOC(); /** * Displays the previous resource in the book display */ void PreviousResource(); /** * Displays the next resource in the book display */ void NextResource(); /** * Returns the resource referenced by the specified URL. * * @param url The URL to open. */ Resource *GetUrlResource(const QUrl &url); void CopyHTML(); void CopyCSS(); void AddNewHTML(); void AddNewCSS(); void AddNewSVG(); void CreateHTMLTOCCSSFile(); void CreateIndexCSSFile(); /** * Implements the Add Existing context menu action functionality. */ QStringList AddExisting(bool only_multimedia = false, bool only_images = false); /* * Sorts the HTML book entries alphanumerically */ void SortHTML(); void SelectAll(); /** * Updates the selection in the book display * to the one resource being renamed * and resets the focus to Book Browser. */ void SelectRenamedResource(); void SaveAsUrl(const QUrl &url); signals: void ShowStatusMessageRequest(const QString &message, int duration = 10000); /** * Emitted when the user activates a resource in the browser. * * @param resource The selected resource. */ void ResourceActivated(Resource *resource); /** * Emitted when merging to force open tabs to close * * @param resource The resource whose tab needs to close. */ void RemoveTabRequest(); /** * Emitted when requested to update the TOC numbers * */ void RenumberTOCContentsRequest(); /** * Emitted when the book's content is modified through the Book Browser. */ void BookContentModified(); void ResourcesAdded(); void ResourcesDeleted(); /** * Wired to the current MainWindow::UpdateBrowserSelectionToTab signal. */ void UpdateBrowserSelection(); void MergeResourcesRequest(QList resources); void LinkStylesheetsToResourcesRequest(QList resources); void RemoveResourcesRequest(); void OpenFileRequest(QString, int); private slots: /** * Emits the ResourceActivated signal. * * @param The selected model index in the Tree View. */ void EmitResourceActivated(const QModelIndex &index); /** * Opens the context menu at the requested point. * * @param point The point at which the menu should be opened. */ void OpenContextMenu(const QPoint &point); /** * Implements the Add New context menu action functionality. */ void AddNew(); void SaveAs(); void SaveAsFile(Resource *resource); void SaveAsFiles(); void OpenWith() const; void OpenWithEditor() const; /** * Implements the Rename context menu action functionality. */ void Rename(); QString GetFirstAvailableTemplateName(QString base, QString number_string); /** * Implements the Rename selected context menu action functionality. */ void RenameSelected(); /** * Implements the Delete context menu action functionality. */ void Delete(); /** * Returns the resource to select after removal */ Resource *ResourceToSelectAfterRemove(QList selected_resources); /** * Implements the Cover Image semantic context menu action functionality. */ void SetCoverImage(); /** * Adds the semantic type information to the currently * selected resource. */ void AddSemanticCode(); /** * Implements the Merge context menu action functionality. */ void Merge(); void LinkStylesheets(); /** * Clears obfuscation for the current resource. */ void NoObfuscationMethod(); /** * Sets the use of Adobe's obfuscation method for the current resource. */ void AdobesObfuscationMethod(); /** * Sets the use of the IDPF's obfuscation method for the current resource. */ void IdpfsObfuscationMethod(); void ValidateStylesheetWithW3C(); protected: virtual void showEvent(QShowEvent *event); private: /** * Expands the Text folder so that all HTML files are shown. */ void ExpandTextFolder(); /** * Reads all the stored application settings like * window position, geometry etc. */ void ReadSettings(); /** * Writes all the stored application settings like * window position, geometry etc. */ void WriteSettings(); /** * Performs the initial setup for the tree view. */ void SetupTreeView(); /** * Creates all the context menu actions. */ void CreateContextMenuActions(); /** * Tries to setup the context menu for the specified point, * and returns true on success. * * @param point The point at which the menu should be opened. * @return \c true if the menu could be set up. */ bool SuccessfullySetupContextMenu(const QPoint &point); /** * Sets up the sub-menu for adding resource-specific context menu actions. * * @param resource The resource on which the context menu was invoked. */ void SetupResourceSpecificContextMenu(Resource *resource); /** * Sets up the sub-menu for adding semantic information, * when the menu is invoked for ImageResources. * * @param resource The resource on which the context menu was invoked. */ void SetupImageSemanticContextMenu(Resource *resource); /** * Sets up the sub-menu for adding or removing font obfuscation, * when the menu is invoked for FontResources. */ void SetupFontObfuscationMenu(); /** * Sets the checked state for the font obfuscation actions * based on the resource's current state. */ void SetFontObfuscationActionCheckState(); /** * Returns the resource for the given index in the tree view. * * @return the resource for the given index in the tree view, * or NULL if no resource is selected. */ Resource *GetResourceByIndex(QModelIndex index) const; /** * Connects all the required signals to their respective slots. */ void ConnectSignalsToSlots(); /** * List of selected resources after validating selection */ QList ValidSelectedResources(); /** * Number of valid items selected */ int ValidSelectedItemCount(); /** * List of selected resources after validating selected resources are of the given type */ QList ValidSelectedResources(Resource::ResourceType resource_type); void RefreshCounts(); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * The book currently being displayed. */ QSharedPointer m_Book; /** * The tree view used to represent the book's files. */ QTreeView *m_TreeView; /** * The data model used to feed the tree view. */ OPFModel *m_OPFModel; /** * The right-click context menu. */ QMenu *m_ContextMenu; /** * The sub-menu for marking fonts * for obfuscation. */ QMenu *m_FontObfuscationContextMenu; // The context menu actions. QAction *m_SelectAll; QAction *m_CopyHTML; QAction *m_CopyCSS; QAction *m_AddNewHTML; QAction *m_AddNewCSS; QAction *m_AddNewSVG; QAction *m_AddExisting; QAction *m_Rename; QAction *m_Delete; QAction *m_Merge; QAction *m_MergeWithPrevious; QAction *m_CoverImage; QAction *m_NoObfuscationMethod; QAction *m_AdobesObfuscationMethod; QAction *m_IdpfsObfuscationMethod; QAction *m_SortHTML; QAction *m_RenumberTOC; QAction *m_LinkStylesheets; QAction *m_AddSemantics; QAction *m_SaveAs; QAction *m_ValidateWithW3C; QMenu *m_OpenWithContextMenu; QAction *m_OpenWith; QAction *m_OpenWithEditor; /** * The resource type of the last item on which the * the context menu was invoked. */ Resource::ResourceType m_LastContextMenuType; /** * The last folder from which the user * added an existing file. */ QString m_LastFolderOpen; QString m_LastFolderSaveAs; QList m_SavedSelection; Resource *m_RenamedResource; }; #endif // BOOKBROWSER_H Sigil-0.9.9/src/MainUI/ClipsWindow.cpp000066400000000000000000000065141321676412500174740ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include "MainUI/ClipsWindow.h" static const int COLUMN_INDENTATION = 15; ClipsWindow::ClipsWindow(QWidget *parent) : QDockWidget(tr("Clips"), parent), m_MainWidget(new QWidget(this)), m_Layout(new QVBoxLayout(m_MainWidget)), m_TreeView(new QTreeView(m_MainWidget)) { m_Layout->setContentsMargins(0, 0, 0, 0); #ifdef Q_OS_MAC m_Layout->setSpacing(4); #endif m_Layout->addWidget(m_TreeView); m_MainWidget->setLayout(m_Layout); setWidget(m_MainWidget); SetupTreeView(); connect(m_TreeView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(ItemClickedHandler(const QModelIndex &))); } void ClipsWindow::showEvent(QShowEvent *event) { QDockWidget::showEvent(event); raise(); } void ClipsWindow::SetupTreeView() { m_ClipsModel = ClipEditorModel::instance(); m_TreeView->setModel(m_ClipsModel); m_TreeView->setSortingEnabled(false); m_TreeView->setWordWrap(false); m_TreeView->setAlternatingRowColors(false); m_TreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); m_TreeView->sortByColumn(-1); m_TreeView->setUniformRowHeights(true); m_TreeView->setDragEnabled(false); m_TreeView->setAcceptDrops(false); m_TreeView->setDropIndicatorShown(false); m_TreeView->setDragDropMode(QAbstractItemView::NoDragDrop); m_TreeView->setAnimated(true); m_TreeView->setIndentation(COLUMN_INDENTATION); m_TreeView->setHeaderHidden(true); m_TreeView->setColumnHidden(1, true); m_TreeView->expandAll(); } void ClipsWindow::ItemClickedHandler(const QModelIndex &index) { ClipEditorModel::clipEntry *clip = ClipEditorModel::instance()->GetEntry(index); QList clips; clips.append(clip); emit PasteClips(clips); } void ClipsWindow::contextMenuEvent(QContextMenuEvent *event) { QMenu *menu = new QMenu(this); // Add menu options QAction *collapseAction = new QAction(tr("Collapse All"), menu); QAction *expandAction = new QAction(tr("Expand All"), menu); menu->addAction(collapseAction); connect(collapseAction, SIGNAL(triggered()), m_TreeView, SLOT(collapseAll())); menu->addAction(expandAction); connect(expandAction, SIGNAL(triggered()), m_TreeView, SLOT(expandAll())); menu->exec(mapToGlobal(event->pos())); } Sigil-0.9.9/src/MainUI/ClipsWindow.h000066400000000000000000000044041321676412500171350ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef CLIPSWINDOW_H #define CLIPSWINDOW_H #include #include "MiscEditors/ClipEditorModel.h" class QTreeView; class QVBoxLayout; /** * Represents the pane in which the book's NCX TOC is rendered. * Clicking on an entry takes the user to that location. */ class ClipsWindow : public QDockWidget { Q_OBJECT public: /** * Constructor. * * @param parent The QObject's parent. */ ClipsWindow(QWidget *parent = 0); private slots: /** * Handles the mouse clicks in the TOC and causes * those clicks to open/activate files in the main view area. * * @param index The model index of the item clicked. */ void ItemClickedHandler(const QModelIndex &index); protected: void contextMenuEvent(QContextMenuEvent *event); virtual void showEvent(QShowEvent *event); signals: void PasteClips(QList clips); private: /** * Performs the initial setup for the tree view. */ void SetupTreeView(); /** * A container widget for the TOC UI widgets. */ QWidget *m_MainWidget; /** * The layout for the container widget. */ QVBoxLayout *m_Layout; /** * The treeview used to represent the TOC. */ QTreeView *m_TreeView; ClipEditorModel *m_ClipsModel; }; #endif // CLIPSWINDOW_H Sigil-0.9.9/src/MainUI/FindReplace.cpp000066400000000000000000001266021321676412500174070ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011, 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include "MainUI/FindReplace.h" #include "Misc/SettingsStore.h" #include "Misc/FindReplaceQLineEdit.h" static const QString SETTINGS_GROUP = "find_replace"; static const QString REGEX_OPTION_UCP = "(*UCP)"; static const QString REGEX_OPTION_IGNORE_CASE = "(?i)"; static const QString REGEX_OPTION_DOT_ALL = "(?s)"; static const QString REGEX_OPTION_MINIMAL_MATCH = "(?U)"; static const int SHOW_FIND_RESULTS_MESSAGE_DELAY_MS = 20000; FindReplace::FindReplace(MainWindow *main_window) : QWidget(main_window), m_MainWindow(main_window), m_RegexOptionDotAll(false), m_RegexOptionMinimalMatch(false), m_RegexOptionAutoTokenise(false), m_OptionWrap(true), m_SpellCheck(false), m_LookWhereCurrentFile(false), m_IsSearchGroupRunning(false) { ui.setupUi(this); FindReplaceQLineEdit *find_ledit = new FindReplaceQLineEdit(this); ui.cbFind->setLineEdit(find_ledit); FindReplaceQLineEdit *replace_ledit = new FindReplaceQLineEdit(this); replace_ledit->setTokeniseEnabled(false); ui.cbReplace->setLineEdit(replace_ledit); QCompleter *fqc = ui.cbFind->completer(); fqc->setCaseSensitivity(Qt::CaseSensitive); fqc->setCompletionMode(QCompleter::PopupCompletion); ui.cbFind->setCompleter(fqc); QCompleter *rqc = ui.cbReplace->completer(); rqc->setCaseSensitivity(Qt::CaseSensitive); rqc->setCompletionMode(QCompleter::PopupCompletion); ui.cbReplace->setCompleter(rqc); ExtendUI(); ConnectSignalsToSlots(); ShowHideAdvancedOptions(); ShowHideMarkedText(false); ReadSettings(); } // Destructor FindReplace::~FindReplace() { WriteSettings(); } void FindReplace::SetUpFindText() { Searchable *searchable = GetAvailableSearchable(); if (searchable) { QString selected_text = searchable->GetSelectedText(); if (!selected_text.isEmpty()) { if (m_RegexOptionAutoTokenise && GetSearchMode() == FindReplace::SearchMode_Regex) { selected_text = TokeniseForRegex(selected_text, false); } ui.cbFind->setEditText(selected_text); // To allow the user to immediately click on Replace, we need to setup the // regex match as though the user had clicked on Find. searchable->SetUpFindForSelectedText(GetSearchRegex()); } } // Find text should be selected by default ui.cbFind->lineEdit()->selectAll(); SetFocus(); } void FindReplace::SetFocus() { ui.cbFind->lineEdit()->setFocus(Qt::ShortcutFocusReason); } bool FindReplace::HasFocus() { return ui.cbFind->lineEdit()->hasFocus(); } void FindReplace::close() { WriteSettingsVisible(false); QWidget::close(); } void FindReplace::show() { WriteSettingsVisible(true); clearMessage(); QWidget::show(); } void FindReplace::ShowHideMarkedText(bool marked) { if (marked) { ui.cbLookWhere->hide(); ui.MarkedTextIndicator->show(); } else { ui.cbLookWhere->show(); ui.MarkedTextIndicator->hide(); } } bool FindReplace::IsMarkedText() { return !ui.MarkedTextIndicator->isHidden(); } void FindReplace::HideFindReplace() { WriteSettingsVisible(false); hide(); } void FindReplace::AdvancedOptionsClicked() { bool is_currently_visible = ui.chkRegexOptionAutoTokenise->isVisible(); WriteSettingsAdvancedVisible(!is_currently_visible); ShowHideAdvancedOptions(); } void FindReplace::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) { HideFindReplace(); } } void FindReplace::ShowMessage(const QString &message) { QString new_message = message; if (m_LookWhereCurrentFile && GetLookWhere() != FindReplace::LookWhere_CurrentFile) { new_message.append(" (" % tr("Current File") % ")"); } ui.message->setText(new_message); m_timer.start(SHOW_FIND_RESULTS_MESSAGE_DELAY_MS); emit ShowMessageRequest(new_message); } void FindReplace::SetKeyModifiers() { // Only use with mouse click not menu/shortcuts to avoid modifying actions m_LookWhereCurrentFile = QApplication::keyboardModifiers() & Qt::ControlModifier; } void FindReplace::ResetKeyModifiers() { m_LookWhereCurrentFile = false; } void FindReplace::FindClicked() { SetKeyModifiers(); Find(); ResetKeyModifiers(); } void FindReplace::ReplaceClicked() { SetKeyModifiers(); Replace(); ResetKeyModifiers(); } void FindReplace::ReplaceAllClicked() { SetKeyModifiers(); ReplaceAll(); ResetKeyModifiers(); } void FindReplace::CountClicked() { SetKeyModifiers(); Count(); ResetKeyModifiers(); } bool FindReplace::FindAnyText(QString text, bool escape) { SetCodeViewIfNeeded(true); WriteSettings(); SetSearchMode(FindReplace::SearchMode_Regex); SetLookWhere(FindReplace::LookWhere_AllHTMLFiles); SetSearchDirection(FindReplace::SearchDirection_Down); SetRegexOptionDotAll(true); SetRegexOptionMinimalMatch(true); SetOptionWrap(true); QString search_text; if (escape) { search_text = QRegularExpression::escape(text); } else { search_text = text + "(?![^<>]*>)(?!.*]*>)"; } ui.cbFind->setEditText(search_text); bool found = FindNext(); ReadSettings(); // Show the search term in case it's needed ui.cbFind->setEditText(search_text); return found; } void FindReplace::FindAnyTextInTags(QString text) { SetCodeViewIfNeeded(true); WriteSettings(); SetSearchMode(FindReplace::SearchMode_Regex); SetLookWhere(FindReplace::LookWhere_AllHTMLFiles); SetSearchDirection(FindReplace::SearchDirection_Down); SetRegexOptionDotAll(true); SetRegexOptionMinimalMatch(true); SetOptionWrap(true); text = text + "(?=[^<]*>)(?!(?:[^<\"]*\"[^<\"]*\")+\\s*/?>)"; ui.cbFind->setEditText(text); FindNext(); ReadSettings(); } bool FindReplace::Find() { bool found = false; if (GetSearchDirection() == FindReplace::SearchDirection_Up) { found = FindPrevious(); } else { found = FindNext(); } return found; } bool FindReplace::FindNext() { return FindText(Searchable::Direction_Down); } bool FindReplace::FindPrevious() { return FindText(Searchable::Direction_Up); } // Counts the number of occurrences of the user's // term in the document. int FindReplace::Count() { clearMessage(); if (!IsValidFindText()) { return 0; } SetCodeViewIfNeeded(true); int count = 0; if (GetLookWhere() == FindReplace::LookWhere_CurrentFile || m_LookWhereCurrentFile || IsMarkedText()) { Searchable *searchable = GetAvailableSearchable(); if (!searchable) { return 0; } count = searchable->Count(GetSearchRegex(), GetSearchableDirection(), m_OptionWrap, IsMarkedText()); } else { // If wrap, all files are counted, otherwise only files before/after // the current file are counted, and then added to the count of current file. count = CountInFiles(); if (!m_OptionWrap) { Searchable *searchable = GetAvailableSearchable(); if (searchable) { count += searchable->Count(GetSearchRegex(), GetSearchableDirection(), m_OptionWrap); } } } if (count == 0) { CannotFindSearchTerm(); } else if (count > 0) { QString message = tr("Matches found: %n", "", count); ShowMessage(message); } UpdatePreviousFindStrings(); return count; } bool FindReplace::Replace() { bool found = false; if (GetSearchDirection() == FindReplace::SearchDirection_Up) { found = ReplacePrevious(); } else { found = ReplaceNext(); } return found; } bool FindReplace::ReplaceNext() { return ReplaceText(Searchable::Direction_Down); } bool FindReplace::ReplacePrevious() { return ReplaceText(Searchable::Direction_Up); } bool FindReplace::ReplaceCurrent() { bool found = false; if (GetSearchDirection() == FindReplace::SearchDirection_Up) { found = ReplaceText(Searchable::Direction_Up, true); } else { found = ReplaceText(Searchable::Direction_Down, true); } return found; } // Replaces the user's search term with the user's // replacement text in the entire document. int FindReplace::ReplaceAll() { m_MainWindow->GetCurrentContentTab()->SaveTabContent(); clearMessage(); if (!IsValidFindText()) { return 0; } SetCodeViewIfNeeded(true); int count = 0; if (GetLookWhere() == FindReplace::LookWhere_CurrentFile || m_LookWhereCurrentFile || IsMarkedText()) { Searchable *searchable = GetAvailableSearchable(); if (!searchable) { return 0; } count = searchable->ReplaceAll(GetSearchRegex(), ui.cbReplace->lineEdit()->text(), GetSearchableDirection(), m_OptionWrap, IsMarkedText()); } else { // If wrap, all files are replaced, otherwise only files before/after // the current file are updated, and then the current file is done. count = ReplaceInAllFiles(); if (!m_OptionWrap) { Searchable *searchable = GetAvailableSearchable(); if (searchable) { count += searchable->ReplaceAll(GetSearchRegex(), ui.cbReplace->lineEdit()->text(), GetSearchableDirection(), m_OptionWrap); } } } if (count == 0) { ShowMessage(tr("No replacements made")); } else if (count > 0) { QString message = tr("Replacements made: %n", "", count); ShowMessage(message); } if (count > 0) { // Signal that the contents have changed and update the view m_MainWindow->GetCurrentBook()->SetModified(true); m_MainWindow->GetCurrentContentTab()->ContentChangedExternally(); } UpdatePreviousFindStrings(); UpdatePreviousReplaceStrings(); return count; } void FindReplace::FindNextInFile() { m_LookWhereCurrentFile = true; FindText(Searchable::Direction_Down); m_LookWhereCurrentFile = false; } void FindReplace::ReplaceNextInFile() { m_LookWhereCurrentFile = true; ReplaceText(Searchable::Direction_Down); m_LookWhereCurrentFile = false; } void FindReplace::ReplaceAllInFile() { m_LookWhereCurrentFile = true; ReplaceAll(); m_LookWhereCurrentFile = false; } void FindReplace::CountInFile() { m_LookWhereCurrentFile = true; Count(); m_LookWhereCurrentFile = false; } Searchable::Direction FindReplace::GetSearchableDirection() { Searchable::Direction direction = Searchable::Direction_Down; if (GetSearchDirection() == FindReplace::SearchDirection_Up) { direction = Searchable::Direction_Up; } return direction; } void FindReplace::clearMessage() { if (!m_IsSearchGroupRunning) { ui.message->clear(); emit ShowMessageRequest(""); } } void FindReplace::expireMessage() { m_timer.stop(); ui.message->clear(); emit ShowMessageRequest(""); } bool FindReplace::FindMisspelledWord() { clearMessage(); SetCodeViewIfNeeded(true); m_SpellCheck = true; WriteSettings(); // Only files, direction, wrap are checked for misspelled searches SetLookWhere(FindReplace::LookWhere_AllHTMLFiles); SetSearchDirection(FindReplace::SearchDirection_Down); SetOptionWrap(true); bool found = FindInAllFiles(Searchable::Direction_Down); ReadSettings(); m_SpellCheck = false; if (found) { clearMessage(); } else { CannotFindSearchTerm(); } return found; } // Starts the search for the user's term. bool FindReplace::FindText(Searchable::Direction direction) { bool found = false; clearMessage(); if (!IsValidFindText()) { return found; } SetCodeViewIfNeeded(); if (GetLookWhere() == FindReplace::LookWhere_CurrentFile || m_LookWhereCurrentFile || IsMarkedText()) { Searchable *searchable = GetAvailableSearchable(); if (!searchable) { return found; } found = searchable->FindNext(GetSearchRegex(), direction, false, false, m_OptionWrap, IsMarkedText()); } else { found = FindInAllFiles(direction); } if (found) { clearMessage(); } else { CannotFindSearchTerm(); } UpdatePreviousFindStrings(); return found; } // Replaces the user's search term with the user's // replacement text if a match is selected. If it's not, // calls Find in the direction specified so it becomes selected. bool FindReplace::ReplaceText(Searchable::Direction direction, bool replace_current) { bool found = false; clearMessage(); if (!IsValidFindText()) { return found; } SetCodeViewIfNeeded(true); Searchable *searchable = GetAvailableSearchable(); if (!searchable) { return found; } // If we have the matching text selected, replace it // This will not do anything if matching text is not selected. found = searchable->ReplaceSelected(GetSearchRegex(), ui.cbReplace->lineEdit()->text(), direction, replace_current); // If we are not going to stay put after a simple Replace, then find next match. if (!replace_current) { // If doing a Replace/Find set the value of found to the result of the Find. if (direction == Searchable::Direction_Up) { found = FindPrevious(); } else { found = FindNext(); } } UpdatePreviousFindStrings(); UpdatePreviousReplaceStrings(); // Do not use the return value to tell if a replace was done - only if a complete // Find/Replace or ReplaceCurrent was ok. This allows multiple selections to work as expected. return found; } void FindReplace::SetCodeViewIfNeeded(bool force) { // We never need to switch to CodeView if only working within scope of a non-html file. if (m_LookWhereCurrentFile || GetLookWhere() == FindReplace::LookWhere_CurrentFile || IsMarkedText()) { if (GetCurrentResource()->Type() != Resource::HTMLResourceType) { return; } } bool has_focus = HasFocus(); if (force || (!m_LookWhereCurrentFile && (GetLookWhere() == FindReplace::LookWhere_AllHTMLFiles || GetLookWhere() == FindReplace::LookWhere_SelectedHTMLFiles) && (m_MainWindow->GetViewState() == MainWindow::ViewState_BookView))) { // Force change to Code View m_MainWindow->AnyCodeView(); if (has_focus) { SetFocus(); } } } // Displays a message to the user informing him // that his last search term could not be found. void FindReplace::CannotFindSearchTerm() { ShowMessage(tr("No matches found")); } // Constructs a searching regex from the selected // options and fields and then returns it. QString FindReplace::GetSearchRegex() { if (m_SpellCheck) { return QString(); } QString text = ui.cbFind->lineEdit()->text(); // Convert 
 to match line separator used by plainText. text.replace(QRegularExpression("\\R"), "\n"); QString search(text); // Search type if (GetSearchMode() == FindReplace::SearchMode_Normal || GetSearchMode() == FindReplace::SearchMode_Case_Sensitive) { search = QRegularExpression::escape(search); if (GetSearchMode() == FindReplace::SearchMode_Normal) { search = PrependRegexOptionToSearch(REGEX_OPTION_IGNORE_CASE, search); } } else { if (m_RegexOptionDotAll) { search = PrependRegexOptionToSearch(REGEX_OPTION_DOT_ALL, search); } if (m_RegexOptionMinimalMatch) { search = PrependRegexOptionToSearch(REGEX_OPTION_MINIMAL_MATCH, search); } } return search; } QString FindReplace::PrependRegexOptionToSearch(const QString &option, const QString &search) { if (search.startsWith(REGEX_OPTION_UCP)) { // Special case scenario - this directive must *always* be before any others return REGEX_OPTION_UCP % option % search.mid(REGEX_OPTION_UCP.length()); } return option % search; } bool FindReplace::IsCurrentFileInHTMLSelection() { bool found = false; QList resources = GetHTMLFiles(); Resource *current_resource = GetCurrentResource(); HTMLResource *current_html_resource = qobject_cast(current_resource); if (current_html_resource) { foreach(Resource * resource, resources) { if (resource->Filename() == current_html_resource->Filename()) { found = true; break; } } } return found; } // Returns all html resources or only those selected in Book Browser QList FindReplace::GetHTMLFiles() { // For now, this must hold Q_ASSERT(GetLookWhere() == FindReplace::LookWhere_AllHTMLFiles || GetLookWhere() == FindReplace::LookWhere_SelectedHTMLFiles); QList all_resources; QList resources; if (GetLookWhere() == FindReplace::LookWhere_AllHTMLFiles) { all_resources = m_MainWindow->GetAllHTMLResources(); } else { all_resources = m_MainWindow->GetValidSelectedHTMLResources(); } // If wrapping, or the current resource is not in the HTML files to search // (meaning there is no before/after for wrap to use) then just return all files Resource *current_resource = GetCurrentResource(); if (m_OptionWrap || !all_resources.contains(current_resource)) { return all_resources; } // Return only the current file and before/after files if (GetSearchDirection() == FindReplace::SearchDirection_Up) { foreach (Resource *resource, all_resources) { resources.append(resource); if (resource == current_resource) { break; } } } else { bool keep = false; foreach (Resource *resource, all_resources) { if (resource == current_resource) { keep = true; } if (keep) { resources.append(resource); } } } return resources; } int FindReplace::CountInFiles() { // For now, this must hold Q_ASSERT(GetLookWhere() == FindReplace::LookWhere_AllHTMLFiles || GetLookWhere() == FindReplace::LookWhere_SelectedHTMLFiles); m_MainWindow->GetCurrentContentTab()->SaveTabContent(); // When not wrapping remove the current resource as it's counted separately QListhtml_files = GetHTMLFiles(); if (!m_OptionWrap) { html_files.removeOne(GetCurrentResource()); } return SearchOperations::CountInFiles( GetSearchRegex(), html_files, SearchOperations::CodeViewSearch); } int FindReplace::ReplaceInAllFiles() { // For now, this must hold Q_ASSERT(GetLookWhere() == FindReplace::LookWhere_AllHTMLFiles || GetLookWhere() == FindReplace::LookWhere_SelectedHTMLFiles); m_MainWindow->GetCurrentContentTab()->SaveTabContent(); // When not wrapping remove the current resource as it's replace separately QListhtml_files = GetHTMLFiles(); if (!m_OptionWrap) { html_files.removeOne(GetCurrentResource()); } int count = SearchOperations::ReplaceInAllFIles( GetSearchRegex(), ui.cbReplace->lineEdit()->text(), html_files, SearchOperations::CodeViewSearch); return count; } bool FindReplace::FindInAllFiles(Searchable::Direction direction) { Searchable *searchable = 0; bool found = false; if (IsCurrentFileInHTMLSelection()) { searchable = GetAvailableSearchable(); if (searchable) { found = searchable->FindNext(GetSearchRegex(), direction, m_SpellCheck, false, false); } } if (!found) { Resource *containing_resource = GetNextContainingHTMLResource(direction); if (containing_resource) { // Save if editor or F&R has focus bool has_focus = HasFocus(); // Save selected resources since opening tabs changes selection QListselected_resources = GetHTMLFiles(); m_MainWindow->OpenResourceAndWaitUntilLoaded(containing_resource); // Restore selection since opening tabs changes selection if (GetLookWhere() == FindReplace::LookWhere_SelectedHTMLFiles && !m_SpellCheck) { m_MainWindow->SelectResources(selected_resources); } // Reset focus to F&R if it had it if (has_focus) { SetFocus(); } searchable = GetAvailableSearchable(); if (searchable) { found = searchable->FindNext(GetSearchRegex(), direction, m_SpellCheck, true, false); } } else { if (searchable) { // Check the part of the original file above the cursor found = searchable->FindNext(GetSearchRegex(), direction, m_SpellCheck, false, false); } } } return found; } HTMLResource *FindReplace::GetNextContainingHTMLResource(Searchable::Direction direction) { Resource *current_resource = GetCurrentResource(); HTMLResource *starting_html_resource = qobject_cast (current_resource); QList resources = GetHTMLFiles(); if (resources.isEmpty()) { return NULL; } if (!starting_html_resource || (GetLookWhere() == FindReplace::LookWhere_SelectedHTMLFiles && !IsCurrentFileInHTMLSelection())) { if (direction == Searchable::Direction_Up) { starting_html_resource = qobject_cast(resources.first()); } else { starting_html_resource = qobject_cast(resources.last()); } } HTMLResource *next_html_resource = starting_html_resource; bool passed_starting_html_resource = false; while (!passed_starting_html_resource || (next_html_resource != starting_html_resource)) { next_html_resource = GetNextHTMLResource(next_html_resource, direction); if (next_html_resource == starting_html_resource) { if (!m_OptionWrap) { return NULL; } passed_starting_html_resource = true ; } if (next_html_resource) { if (ResourceContainsCurrentRegex(next_html_resource)) { return next_html_resource; } // else continue } else { return NULL; } } return NULL; } HTMLResource *FindReplace::GetNextHTMLResource(HTMLResource *current_resource, Searchable::Direction direction) { QList resources = GetHTMLFiles(); int max_reading_order = resources.count() - 1; int current_reading_order = 0; int next_reading_order = 0; // Find the current resource in the selected/all html entries int i = 0; foreach(Resource * resource, resources) { if (resource->Filename() == current_resource->Filename()) { current_reading_order = i; break; } i++; } // We wrap back (if needed) if (direction == Searchable::Direction_Up) { next_reading_order = current_reading_order - 1 >= 0 ? current_reading_order - 1 : max_reading_order ; } else { next_reading_order = current_reading_order + 1 <= max_reading_order ? current_reading_order + 1 : 0; } if (next_reading_order > max_reading_order || next_reading_order < 0) { return NULL; } else { HTMLResource &html_resource = *qobject_cast(resources[ next_reading_order ]); return &html_resource; } } Resource *FindReplace::GetCurrentResource() { return m_MainWindow->GetCurrentContentTab()->GetLoadedResource(); } QStringList FindReplace::GetPreviousFindStrings() { QStringList find_strings; for (int i = 0; i < qMin(ui.cbFind->count(), ui.cbFind->maxCount()); ++i) { if (!find_strings.contains(ui.cbFind->itemText(i))) { find_strings.append(ui.cbFind->itemText(i)); } } return find_strings; } QStringList FindReplace::GetPreviousReplaceStrings() { QStringList replace_strings; for (int i = 0; i < qMin(ui.cbReplace->count(), ui.cbReplace->maxCount()); ++i) { if (!replace_strings.contains(ui.cbReplace->itemText(i))) { replace_strings.append(ui.cbReplace->itemText(i)); } } return replace_strings; } void FindReplace::UpdatePreviousFindStrings(const QString &text) { QString new_find_string; if (!text.isNull()) { new_find_string = text; } else { new_find_string = ui.cbFind->lineEdit()->text(); } int used_at_index = ui.cbFind->findText(new_find_string); if (used_at_index != -1) { ui.cbFind->removeItem(used_at_index); } ui.cbFind->insertItem(0, new_find_string); // Must not change the current string! ui.cbFind->setCurrentIndex(0); } void FindReplace::UpdatePreviousReplaceStrings(const QString &text) { QString new_replace_string; if (!text.isNull()) { new_replace_string = text; } else { new_replace_string = ui.cbReplace->lineEdit()->text(); } int used_at_index = ui.cbReplace->findText(new_replace_string); if (used_at_index != -1) { ui.cbReplace->removeItem(used_at_index); } ui.cbReplace->insertItem(0, new_replace_string); // Must not change the current string! ui.cbReplace->setCurrentIndex(0); } FindReplace::SearchMode FindReplace::GetSearchMode() { int mode = ui.cbSearchMode->itemData(ui.cbSearchMode->currentIndex()).toInt(); switch (mode) { case FindReplace::SearchMode_Regex: return static_cast(mode); break; case FindReplace::SearchMode_Case_Sensitive: return static_cast(mode); break; default: return FindReplace::SearchMode_Normal; } } FindReplace::LookWhere FindReplace::GetLookWhere() { int look = ui.cbLookWhere->itemData(ui.cbLookWhere->currentIndex()).toInt(); switch (look) { case FindReplace::LookWhere_AllHTMLFiles: return static_cast(look); break; case FindReplace::LookWhere_SelectedHTMLFiles: return static_cast(look); break; default: return FindReplace::LookWhere_CurrentFile; } } FindReplace::SearchDirection FindReplace::GetSearchDirection() { int direction = ui.cbSearchDirection->itemData(ui.cbSearchDirection->currentIndex()).toInt(); switch (direction) { case FindReplace::SearchDirection_Up: return static_cast(direction); break; default: return FindReplace::SearchDirection_Down; } } bool FindReplace::IsValidFindText() { return !ui.cbFind->lineEdit()->text().isEmpty(); } void FindReplace::ReadSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // Find and Replace history QStringList find_strings = settings.value("find_strings").toStringList(); find_strings.removeDuplicates(); ui.cbFind->clear(); ui.cbFind->addItems(find_strings); QStringList replace_strings = settings.value("replace_strings").toStringList(); replace_strings.removeDuplicates(); ui.cbReplace->clear(); ui.cbReplace->addItems(replace_strings); SetSearchMode(settings.value("search_mode", 0).toInt()); SetLookWhere(settings.value("look_where", 0).toInt()); SetSearchDirection(settings.value("search_direction", 0).toInt()); bool regexOptionDotAll = settings.value("regexoptiondotall", false).toBool(); SetRegexOptionDotAll(regexOptionDotAll); bool regexOptionMinimalMatch = settings.value("regexoptionminimalmatch", false).toBool(); SetRegexOptionMinimalMatch(regexOptionMinimalMatch); bool regexOptionAutoTokenise = settings.value("regexoptionautotokenise", false).toBool(); SetRegexOptionAutoTokenise(regexOptionAutoTokenise); bool optionWrap = settings.value("optionwrap", true).toBool(); SetOptionWrap(optionWrap); settings.endGroup(); } void FindReplace::ShowHide() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); QVariant show_find_replace = settings.value("visible"); settings.endGroup(); // Hide the window by default if (show_find_replace.isNull() ? false : show_find_replace.toBool()) { show(); } else { hide(); } } void FindReplace::ShowHideAdvancedOptions() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); bool show_advanced = settings.value("advanced_visible", true).toBool(); settings.endGroup(); ui.optionsl->setVisible(show_advanced); ui.chkRegexOptionDotAll->setVisible(show_advanced); ui.chkRegexOptionMinimalMatch->setVisible(show_advanced); ui.chkRegexOptionAutoTokenise->setVisible(show_advanced); ui.chkOptionWrap->setVisible(show_advanced); ui.count->setVisible(show_advanced); QIcon icon; if (show_advanced) { icon.addFile(QString::fromUtf8(":/main/chevron-up_16px.png")); ui.advancedShowHide->setIcon(icon); } else { icon.addFile(QString::fromUtf8(":/main/chevron-down_16px.png")); ui.advancedShowHide->setIcon(icon); } } void FindReplace::WriteSettingsVisible(bool visible) { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); settings.setValue("visible", visible); settings.endGroup(); } void FindReplace::WriteSettingsAdvancedVisible(bool visible) { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); settings.setValue("advanced_visible", visible); settings.endGroup(); } void FindReplace::WriteSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); settings.setValue("find_strings", GetPreviousFindStrings()); settings.setValue("replace_strings", GetPreviousReplaceStrings()); settings.setValue("search_mode", GetSearchMode()); settings.setValue("look_where", GetLookWhere()); settings.setValue("search_direction", GetSearchDirection()); settings.setValue("regexoptiondotall", ui.chkRegexOptionDotAll->isChecked()); settings.setValue("regexoptionminimalmatch", ui.chkRegexOptionMinimalMatch->isChecked()); settings.setValue("regexoptionautotokenise", ui.chkRegexOptionAutoTokenise->isChecked()); settings.setValue("optionwrap", ui.chkOptionWrap->isChecked()); settings.endGroup(); } Searchable *FindReplace::GetAvailableSearchable() { Searchable *searchable = m_MainWindow->GetCurrentContentTab()->GetSearchableContent(); if (!searchable) { ShowMessage(tr("This tab cannot be searched")); } return searchable; } void FindReplace::SaveSearchAction() { SearchEditorModel::searchEntry *search_entry = new SearchEditorModel::searchEntry(); search_entry->name = "Unnamed Search"; search_entry->is_group = false; search_entry->find = ui.cbFind->lineEdit()->text(), search_entry->replace = ui.cbReplace->lineEdit()->text(), emit OpenSearchEditorRequest(search_entry); } void FindReplace::LoadSearchByName(const QString &name) { LoadSearch(SearchEditorModel::instance()->GetEntryFromName(name)); } void FindReplace::LoadSearch(SearchEditorModel::searchEntry *search_entry) { if (!search_entry) { clearMessage(); return; } UpdatePreviousFindStrings(search_entry->find); UpdatePreviousReplaceStrings(search_entry->replace); // Show a message containing the name that was loaded QString message(tr("Unnamed search loaded")); if (!search_entry->name.isEmpty()) { message = QString("%1: %2 ").arg(tr("Loaded")).arg(search_entry->name.replace('<', "<").replace('>', ">").left(50)); } ShowMessage(message); } void FindReplace::FindSearch(QList search_entries) { if (search_entries.isEmpty()) { ShowMessage(tr("No searches selected")); return; } SetKeyModifiers(); m_IsSearchGroupRunning = true; foreach(SearchEditorModel::searchEntry * search_entry, search_entries) { LoadSearch(search_entry); if (Find()) { break; }; } m_IsSearchGroupRunning = false; ResetKeyModifiers(); } void FindReplace::ReplaceCurrentSearch(QList search_entries) { if (search_entries.isEmpty()) { ShowMessage(tr("No searches selected")); return; } m_IsSearchGroupRunning = true; foreach(SearchEditorModel::searchEntry * search_entry, search_entries) { LoadSearch(search_entry); if (ReplaceCurrent()) { break; } } m_IsSearchGroupRunning = false; } void FindReplace::ReplaceSearch(QList search_entries) { if (search_entries.isEmpty()) { ShowMessage(tr("No searches selected")); return; } SetKeyModifiers(); m_IsSearchGroupRunning = true; foreach(SearchEditorModel::searchEntry * search_entry, search_entries) { LoadSearch(search_entry); if (Replace()) { break; } } m_IsSearchGroupRunning = false; ResetKeyModifiers(); } void FindReplace::CountAllSearch(QList search_entries) { if (search_entries.isEmpty()) { ShowMessage(tr("No searches selected")); return; } SetKeyModifiers(); m_IsSearchGroupRunning = true; int count = 0; foreach(SearchEditorModel::searchEntry * search_entry, search_entries) { LoadSearch(search_entry); count += Count(); } m_IsSearchGroupRunning = false; if (count == 0) { CannotFindSearchTerm(); } else if (count > 0) { QString message = tr("Matches found: %n", "", count); ShowMessage(message); } ResetKeyModifiers(); } void FindReplace::ReplaceAllSearch(QList search_entries) { if (search_entries.isEmpty()) { ShowMessage(tr("No searches selected")); return; } SetKeyModifiers(); m_IsSearchGroupRunning = true; int count = 0; foreach(SearchEditorModel::searchEntry * search_entry, search_entries) { LoadSearch(search_entry); count += ReplaceAll(); } m_IsSearchGroupRunning = false; if (count == 0) { ShowMessage(tr("No replacements made")); } else { QString message = tr("Replacements made: %n", "", count); ShowMessage(message); } ResetKeyModifiers(); } void FindReplace::SetSearchMode(int search_mode) { ui.cbSearchMode->setCurrentIndex(0); for (int i = 0; i < ui.cbSearchMode->count(); ++i) { if (ui.cbSearchMode->itemData(i) == search_mode) { ui.cbSearchMode->setCurrentIndex(i); break; } } } void FindReplace::SetLookWhere(int look_where) { ui.cbLookWhere->setCurrentIndex(0); for (int i = 0; i < ui.cbLookWhere->count(); ++i) { if (ui.cbLookWhere->itemData(i) == look_where) { ui.cbLookWhere->setCurrentIndex(i); break; } } } void FindReplace::SetSearchDirection(int search_direction) { ui.cbSearchDirection->setCurrentIndex(0); for (int i = 0; i < ui.cbSearchDirection->count(); ++i) { if (ui.cbSearchDirection->itemData(i) == search_direction) { ui.cbSearchDirection->setCurrentIndex(i); break; } } } void FindReplace::TokeniseSelection() { if (!IsValidFindText()) { return; } QString text; if (ui.cbFind->lineEdit()->hasSelectedText()) { // We want to tokenise only the selection text = ui.cbFind->lineEdit()->selectedText(); } else { // We will tokenise the whole thing text = ui.cbFind->lineEdit()->text(); } QString new_text = TokeniseForRegex(text, true); if (new_text != text) { if (ui.cbFind->lineEdit()->hasSelectedText()) { // We will paste in the new text so the user has the ability to undo. ui.cbFind->PasteText(new_text); } else { // We still want to paste in, but we replacing all the text that is in there ui.cbFind->lineEdit()->selectAll(); ui.cbFind->PasteText(new_text); } } } QString FindReplace::TokeniseForRegex(const QString &text, bool includeNumerics) { QString new_text(text); // Convert any form of newline or tabs to multiple spaces new_text.replace(QRegularExpression("\\R"), " "); new_text.replace("\\t", " "); // If the text does not contain a backslash we "assume" it has not been // tokenised already so we need to escape it if (!new_text.contains("\\")) { new_text = QRegularExpression::escape(new_text); } // Restore some characters for readability new_text.replace("\\ ", " "); new_text.replace("\\<", "<"); new_text.replace("\\>", ">"); new_text.replace("\\/", "/"); new_text.replace("\\;", ";"); new_text.replace("\\:", ":"); new_text.replace("\\&", "&"); new_text.replace("\\=", "="); // Replace multiple spaces new_text.replace(QRegularExpression("(\\s{2,})"), "\\s+"); if (includeNumerics) { // Replace numerics. new_text.replace(QRegularExpression("(\\d+)"), "\\d+"); } return new_text; } void FindReplace::SetRegexOptionDotAll(bool new_state) { m_RegexOptionDotAll = new_state; ui.chkRegexOptionDotAll->setChecked(new_state); } void FindReplace::SetRegexOptionMinimalMatch(bool new_state) { m_RegexOptionMinimalMatch = new_state; ui.chkRegexOptionMinimalMatch->setChecked(new_state); } void FindReplace::SetRegexOptionAutoTokenise(bool new_state) { m_RegexOptionAutoTokenise = new_state; ui.chkRegexOptionAutoTokenise->setChecked(new_state); } void FindReplace::SetOptionWrap(bool new_state) { m_OptionWrap = new_state; ui.chkOptionWrap->setChecked(new_state); } // The UI is setup based on the capabilities. void FindReplace::ExtendUI() { // Clear these because we want to add their items based on the // capabilities. ui.cbSearchMode->clear(); ui.cbLookWhere->clear(); ui.cbSearchDirection->clear(); QString mode_tooltip = "

" + tr("What to search for") + ":

"; ui.cbSearchMode->addItem(tr("Normal"), FindReplace::SearchMode_Normal); mode_tooltip += "
Normal
" + tr("Case in-sensitive search of exactly what you type.") + "
"; ui.cbSearchMode->addItem(tr("Case Sensitive"), FindReplace::SearchMode_Case_Sensitive); mode_tooltip += "
Case Sensitive
" + tr("Case sensitive search of exactly what you type.") + "
"; ui.cbSearchMode->addItem(tr("Regex"), FindReplace::SearchMode_Regex); mode_tooltip += "
Regex
" + tr("Search for a pattern using Regular Expression syntax.") + "
"; ui.cbSearchMode->setToolTip(mode_tooltip); QString look_tooltip = "

" + tr("Where to search") + ":

"; ui.cbLookWhere->addItem(tr("Current File"), FindReplace::LookWhere_CurrentFile); look_tooltip += "
Current File
" + tr("Restrict the find or replace to the opened file. Hold the Ctrl key down while clicking any search buttons to temporarily restrict the search to the Current File.") + "
"; ui.cbLookWhere->addItem(tr("All HTML Files"), FindReplace::LookWhere_AllHTMLFiles); look_tooltip += "
All HTML Files
" + tr("Find or replace in all HTML files in Code View.") + "
"; ui.cbLookWhere->addItem(tr("Selected HTML Files"), FindReplace::LookWhere_SelectedHTMLFiles); look_tooltip += "
Selected HTML Files
" + tr("Restrict the find or replace to the HTML files selected in the Book Browser in Code View.") + "
"; look_tooltip += "
"; look_tooltip += "

To restrict search to selected text, use Search→Mark Selected Text.

"; ui.cbLookWhere->setToolTip(look_tooltip); // Special Marked Text indicator. QString mark_tooltip = "

" + tr("Where to search") + ":

"; ui.MarkedTextIndicator->addItem(tr("Marked Text")); mark_tooltip += "
Marked Text
" + tr("Restrict the find or replace to the text marked by Search→Mark Selected Text. Cleared if you use Undo, enter text, or change views or tabs.") + "
"; mark_tooltip += "
"; ui.MarkedTextIndicator->setToolTip(mark_tooltip); ui.cbSearchDirection->addItem(tr("Up"), FindReplace::SearchDirection_Up); ui.cbSearchDirection->addItem(tr("Down"), FindReplace::SearchDirection_Down); ui.cbSearchDirection->setToolTip("

" + tr("Direction to search") + ":

" "
" "
Up
" + tr("Search for the previous match from your current position.") + "
" "
Down
" + tr("Search for the next match from your current position.") + "
" "
"); } void FindReplace::ConnectSignalsToSlots() { connect(&m_timer, SIGNAL(timeout()), this, SLOT(expireMessage())); connect(ui.findNext, SIGNAL(clicked()), this, SLOT(FindClicked())); connect(ui.cbFind->lineEdit(), SIGNAL(returnPressed()), this, SLOT(Find())); connect(ui.count, SIGNAL(clicked()), this, SLOT(CountClicked())); connect(ui.replaceCurrent, SIGNAL(clicked()), this, SLOT(ReplaceCurrent())); connect(ui.replaceFind, SIGNAL(clicked()), this, SLOT(ReplaceClicked())); connect(ui.cbReplace->lineEdit(), SIGNAL(returnPressed()), this, SLOT(Replace())); connect(ui.replaceAll, SIGNAL(clicked()), this, SLOT(ReplaceAllClicked())); connect(ui.close, SIGNAL(clicked()), this, SLOT(HideFindReplace())); connect(ui.advancedShowHide, SIGNAL(clicked()), this, SLOT(AdvancedOptionsClicked())); connect(ui.cbFind, SIGNAL(ClipboardSaveRequest()), this, SIGNAL(ClipboardSaveRequest())); connect(ui.cbFind, SIGNAL(ClipboardRestoreRequest()), this, SIGNAL(ClipboardRestoreRequest())); connect(ui.cbReplace, SIGNAL(ClipboardSaveRequest()), this, SIGNAL(ClipboardSaveRequest())); connect(ui.cbReplace, SIGNAL(ClipboardRestoreRequest()), this, SIGNAL(ClipboardRestoreRequest())); connect(ui.chkRegexOptionDotAll, SIGNAL(clicked(bool)), this, SLOT(SetRegexOptionDotAll(bool))); connect(ui.chkRegexOptionMinimalMatch, SIGNAL(clicked(bool)), this, SLOT(SetRegexOptionMinimalMatch(bool))); connect(ui.chkRegexOptionAutoTokenise, SIGNAL(clicked(bool)), this, SLOT(SetRegexOptionAutoTokenise(bool))); connect(ui.chkOptionWrap, SIGNAL(clicked(bool)), this, SLOT(SetOptionWrap(bool))); } Sigil-0.9.9/src/MainUI/FindReplace.h000066400000000000000000000215421321676412500170510ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011, 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef FINDREPLACE_H #define FINDREPLACE_H #include #include "ui_FindReplace.h" #include "BookManipulation/FolderKeeper.h" #include "MainUI/MainWindow.h" #include "Misc/SearchOperations.h" #include "MiscEditors/SearchEditorModel.h" #include "ViewEditors/Searchable.h" class HTMLResource; class Resource; class MainWindow; class FindReplace : public QWidget { Q_OBJECT public: FindReplace(MainWindow *main_window); ~FindReplace(); /** * Defines possible areas where the search can be performed. */ enum LookWhere { LookWhere_CurrentFile = 0, LookWhere_AllHTMLFiles = 10, LookWhere_SelectedHTMLFiles = 20, }; enum SearchMode { // Normal is Case insensitive SearchMode_Normal = 0, SearchMode_Case_Sensitive = 10, SearchMode_Regex = 20 }; enum SearchDirection { SearchDirection_Down = 0, SearchDirection_Up = 10 }; /** * Sets up the default Find text during dialog creation. */ void SetUpFindText(); void ShowHide(); public slots: void close(); void show(); void LoadSearchByName(const QString &name); void LoadSearch(SearchEditorModel::searchEntry *search_entry); void FindSearch(QList search_entries); void ReplaceCurrentSearch(QList search_entries); void ReplaceSearch(QList search_entries); void CountAllSearch(QList search_entries); void ReplaceAllSearch(QListsearch_entries); bool FindMisspelledWord(); void SetRegexOptionDotAll(bool new_state); void SetRegexOptionMinimalMatch(bool new_state); void SetRegexOptionAutoTokenise(bool new_state); void SetOptionWrap(bool new_state); bool FindAnyText(QString text, bool escape = true); void FindAnyTextInTags(QString text); void ShowHideMarkedText(bool marked); signals: void OpenSearchEditorRequest(SearchEditorModel::searchEntry *search_entry = NULL); void ShowMessageRequest(const QString &message); /** * Emitted when we want to do some operations with the clipboard * to paste things, but restoring state afterwards so that the * Clipboard History and current clipboard is left unaffected. */ void ClipboardSaveRequest(); void ClipboardRestoreRequest(); protected: void keyPressEvent(QKeyEvent *event); private slots: // Shows a message in the main window. void ShowMessage(const QString &message); bool IsMarkedText(); void FindClicked(); void CountClicked(); void ReplaceClicked(); void ReplaceAllClicked(); // Uses the find direction to determine if we should find next // or previous. bool Find(); bool FindNext(); bool FindPrevious(); // Counts the number of occurrences of the user's // term in the document. int Count(); // Uses the find direction to determine if we should replace next // or previous. bool Replace(); // Replaces the user's search term with the user's // replacement text if a match is selected. If it's not, // calls FindNext() so it becomes selected. bool ReplaceNext(); bool ReplacePrevious(); bool ReplaceCurrent(); // Replaces the user's search term with the user's // replacement text in the entire document. Shows a // dialog telling how many occurrences were replaced. int ReplaceAll(); void FindNextInFile(); void ReplaceNextInFile(); void ReplaceAllInFile(); void CountInFile(); void clearMessage(); void expireMessage(); void SaveSearchAction(); void TokeniseSelection(); void HideFindReplace(); void AdvancedOptionsClicked(); private: Searchable::Direction GetSearchableDirection(); bool FindText(Searchable::Direction direction); bool ReplaceText(Searchable::Direction direction, bool replace_current = false); /** * Checks if book-wide searching is allowed for the current view. * * @return \c true if book-wide searching is allowed. */ void SetCodeViewIfNeeded(bool force = false); // Displays a message to the user informing him // that his last search term could not be found. void CannotFindSearchTerm(); Searchable *GetAvailableSearchable(); // Constructs a searching regex from the selected // options and fields and then returns it. QString GetSearchRegex(); QString PrependRegexOptionToSearch(const QString &option, const QString &search); QList GetHTMLFiles(); bool IsCurrentFileInHTMLSelection(); void SetKeyModifiers(); void ResetKeyModifiers(); int CountInFiles(); int ReplaceInAllFiles(); bool FindInAllFiles(Searchable::Direction direction); HTMLResource *GetNextContainingHTMLResource(Searchable::Direction direction); HTMLResource *GetNextHTMLResource(HTMLResource *current_resource, Searchable::Direction direction); Resource *GetCurrentResource(); void SetSearchMode(int search_mode); void SetLookWhere(int look_where); void SetSearchDirection(int search_direction); template bool ResourceContainsCurrentRegex(T *resource); /** * Returns a list of all the strings * currently stored in the find combo box. * * @return The stored find strings. */ QStringList GetPreviousFindStrings(); /** * Returns a list of all the strings * currently stored in the replace combo box. * * @return The stored replace strings. */ QStringList GetPreviousReplaceStrings(); /** * Updates the find combo box with the * currently typed-in string. */ void UpdatePreviousFindStrings(const QString &text = QString()); /** * Updates the replace combo box with the * currently typed-in string. */ void UpdatePreviousReplaceStrings(const QString &text = QString()); FindReplace::LookWhere GetLookWhere(); FindReplace::SearchMode GetSearchMode(); FindReplace::SearchDirection GetSearchDirection(); // Checks if Find is empty when not checking spelling bool IsValidFindText(); // Reads all the stored dialog settings void ReadSettings(); // Writes all the stored dialog settings void WriteSettings(); void ShowHideAdvancedOptions(); void ExtendUI(); /* * Tokenisation helper function for automating replacement * of elements of Find text in regular expressions */ QString TokeniseForRegex(const QString &text, bool includeNumerics); void WriteSettingsVisible(bool visible); void WriteSettingsAdvancedVisible(bool advanced); /** * Connects all the required signals to their respective slots. */ void ConnectSignalsToSlots(); void SetFocus(); bool HasFocus(); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// // A const reference to the mainwindow that // spawned this widget. Needed for searching. MainWindow *m_MainWindow; QTimer m_timer; Ui::FindReplace ui; bool m_RegexOptionDotAll; bool m_RegexOptionMinimalMatch; bool m_RegexOptionAutoTokenise; bool m_OptionWrap; bool m_SpellCheck; bool m_LookWhereCurrentFile; QString m_LastFindText; bool m_IsSearchGroupRunning; }; template bool FindReplace::ResourceContainsCurrentRegex(T *resource) { // For now, this must hold Q_ASSERT(GetLookWhere() == FindReplace::LookWhere_AllHTMLFiles || GetLookWhere() == FindReplace::LookWhere_SelectedHTMLFiles); Resource *generic_resource = resource; return SearchOperations::CountInFiles( GetSearchRegex(), QList() << generic_resource, SearchOperations::CodeViewSearch, m_SpellCheck) > 0; } #endif // FINDREPLACE_H Sigil-0.9.9/src/MainUI/MainApplication.cpp000066400000000000000000000025501321676412500202760ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Grant Drake ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "MainUI/MainApplication.h" MainApplication::MainApplication(int &argc, char **argv) : QApplication(argc, argv) { } bool MainApplication::event(QEvent *pEvent) { if (pEvent->type() == QEvent::ApplicationActivate) { emit applicationActivated(); } else if (pEvent->type() == QEvent::ApplicationDeactivate) { emit applicationDeactivated(); } return QApplication::event(pEvent); } Sigil-0.9.9/src/MainUI/MainApplication.h000066400000000000000000000025041321676412500177420ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Grant Drake ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef MAINAPPLICATION_H #define MAINAPPLICATION_H #include #include class MainApplication : public QApplication { Q_OBJECT public: MainApplication(int &argc, char **argv); signals: void applicationActivated(); void applicationDeactivated(); protected: bool event(QEvent *pEvent); }; #endif // MAINAPPLICATION_H Sigil-0.9.9/src/MainUI/MainWindow.cpp000066400000000000000000006223771321676412500173210ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, Ontario Canada ** Copyright (C) 2012-2015 John Schember ** Copyright (C) 2012-2013 Dave Heiland ** Copyright (C) 2009-2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "BookManipulation/CleanSource.h" #include "BookManipulation/Index.h" #include "BookManipulation/FolderKeeper.h" #include "Dialogs/About.h" #include "Dialogs/ClipEditor.h" #include "Dialogs/ClipboardHistorySelector.h" #include "Dialogs/DeleteStyles.h" #include "Dialogs/EditTOC.h" #include "Dialogs/HeadingSelector.h" #include "Dialogs/LinkStylesheets.h" #include "Dialogs/MetaEditor.h" #include "Dialogs/PluginRunner.h" #include "Dialogs/Preferences.h" #include "Dialogs/SearchEditor.h" #include "Dialogs/SelectCharacter.h" #include "Dialogs/SelectFiles.h" #include "Dialogs/SelectHyperlink.h" #include "Dialogs/SelectId.h" #include "Dialogs/SelectIndexTitle.h" #include "Exporters/ExportEPUB.h" #include "Exporters/ExporterFactory.h" #include "Importers/ImporterFactory.h" #include "Importers/ImportHTML.h" #include "MainUI/BookBrowser.h" #include "MainUI/ClipsWindow.h" #include "MainUI/MainWindow.h" #include "MainUI/FindReplace.h" #include "MainUI/PreviewWindow.h" #include "MainUI/TableOfContents.h" #include "MainUI/ValidationResultsView.h" #include "Misc/HTMLSpellCheck.h" #include "Misc/KeyboardShortcutManager.h" #include "Misc/Plugin.h" #include "Misc/PluginDB.h" #include "Misc/PythonRoutines.h" #include "Misc/SettingsStore.h" #include "Misc/SleepFunctions.h" #include "Misc/SpellCheck.h" #include "Misc/TempFolder.h" #include "Misc/TOCHTMLWriter.h" #include "Misc/Utility.h" #include "MiscEditors/IndexHTMLWriter.h" #include "ResourceObjects/HTMLResource.h" #include "ResourceObjects/NCXResource.h" #include "ResourceObjects/OPFResource.h" #include "ResourceObjects/NavProcessor.h" #include "sigil_constants.h" #include "sigil_exception.h" #include "SourceUpdates/LinkUpdates.h" #include "SourceUpdates/WordUpdates.h" #include "Tabs/FlowTab.h" #include "Tabs/OPFTab.h" #include "Tabs/TabManager.h" static const int TEXT_ELIDE_WIDTH = 300; static const QString SETTINGS_GROUP = "mainwindow"; const float ZOOM_STEP = 0.1f; const float ZOOM_MIN = 0.09f; const float ZOOM_MAX = 5.0f; const float ZOOM_NORMAL = 1.0f; static const int ZOOM_SLIDER_MIN = 0; static const int ZOOM_SLIDER_MAX = 1000; static const int ZOOM_SLIDER_MIDDLE = 500; static const int ZOOM_SLIDER_WIDTH = 140; static const QString DONATE = "http://sigil-ebook.com/donate"; static const QString SIGIL_WEBSITE = "http://sigil-ebook.com"; static const QString USER_GUIDE_URL = "http://sigil-ebook.com/documentation"; static const QString BOOK_BROWSER_NAME = "bookbrowser"; static const QString FIND_REPLACE_NAME = "findreplace"; static const QString VALIDATION_RESULTS_VIEW_NAME = "validationresultsname"; static const QString TABLE_OF_CONTENTS_NAME = "tableofcontents"; static const QString PREVIEW_WINDOW_NAME = "previewwindow"; static const QString CLIPS_WINDOW_NAME = "clipswindow"; static const QString FRAME_NAME = "managerframe"; static const QString TAB_STYLE_SHEET = "#managerframe {border-top: 0px solid white;" "border-left: 1px solid grey;" "border-right: 1px solid grey;" "border-bottom: 1px solid grey;} "; static const QString HTML_TOC_FILE = "TOC.xhtml"; static const QString HTML_INDEX_FILE = "Index.xhtml"; const QString HTML_COVER_FILENAME = "cover.xhtml"; // External constant (sigil_contants.h) used to consolidate the upper clipboard history limit. const int CLIPBOARD_HISTORY_MAX = 20; static const QStringList SUPPORTED_SAVE_TYPE = QStringList() << "epub"; static const QString DEFAULT_FILENAME = "untitled.epub"; QStringList MainWindow::s_RecentFiles = QStringList(); MainWindow::MainWindow(const QString &openfilepath, bool is_internal, QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), m_LastOpenFileWarnings(QStringList()), m_IsInitialLoad(true), m_CurrentFilePath(QString()), m_CurrentFileName(QString()), m_Book(new Book()), m_LastFolderOpen(QString()), m_SaveACopyFilename(QString()), m_LastInsertedFile(QString()), m_TabManager(new TabManager(this)), m_BookBrowser(NULL), m_Clips(NULL), m_FindReplace(new FindReplace(this)), m_TableOfContents(NULL), m_ValidationResultsView(NULL), m_PreviewWindow(NULL), m_slZoomSlider(NULL), m_lbZoomLabel(NULL), c_SaveFilters(GetSaveFiltersMap()), c_LoadFilters(GetLoadFiltersMap()), m_ViewState(MainWindow::ViewState_BookView), m_headingMapper(new QSignalMapper(this)), m_casingChangeMapper(new QSignalMapper(this)), m_pluginMapper(new QSignalMapper(this)), m_SearchEditor(new SearchEditor(this)), m_ClipEditor(new ClipEditor(this)), m_IndexEditor(new IndexEditor(this)), m_SpellcheckEditor(new SpellcheckEditor(this)), m_SelectCharacter(new SelectCharacter(this)), m_ViewImage(new ViewImage(this)), m_Reports(new Reports(this)), m_preserveHeadingAttributes(true), m_LinkOrStyleBookmark(new LocationBookmark()), m_ClipboardHistorySelector(new ClipboardHistorySelector(this)), m_ClipboardHistoryLimit(CLIPBOARD_HISTORY_MAX), m_LastPasteTarget(NULL), m_ZoomPreview(false), m_LastWindowSize(QByteArray()), m_PreviousHTMLResource(NULL), m_PreviousHTMLText(QString()), m_PreviousHTMLLocation(QList()), m_menuPluginsInput(NULL), m_menuPluginsOutput(NULL), m_menuPluginsEdit(NULL), m_menuPluginsValidation(NULL), m_pluginList(QStringList()), m_SaveCSS(false) { ui.setupUi(this); // Telling Qt to delete this window // from memory when it is closed setAttribute(Qt::WA_DeleteOnClose); ExtendUI(); PlatformSpecificTweaks(); // Needs to come before signals connect // (avoiding side-effects) ReadSettings(); // Ensure the UI is properly set to the saved view state. SetDefaultViewState(); SetupPreviewTimer(); ConnectSignalsToSlots(); CreateRecentFilesActions(); UpdateRecentFileActions(); ChangeSignalsWhenTabChanges(NULL, m_TabManager->GetCurrentContentTab()); LoadInitialFile(openfilepath, is_internal); loadPluginsMenu(); } MainWindow::~MainWindow() { // Make sure that any modeless windows that are visible are closed first // to prevent crashes on Windows. if (m_SelectCharacter && m_SelectCharacter->isVisible()) { m_SelectCharacter->close(); m_SelectCharacter = NULL; } if (m_ViewImage && m_ViewImage->isVisible()) { m_ViewImage->close(); m_ViewImage = NULL; } } // Note on Mac OS X you may only add a QMenu or SubMenu to the MenuBar Once! // Actions can be removed void MainWindow::loadPluginsMenu() { PluginDB *pdb = PluginDB::instance(); m_menuPlugins = ui.menuPlugins; m_actionManagePlugins = ui.actionManage_Plugins; unloadPluginsMenu(); connect(m_actionManagePlugins, SIGNAL(triggered()), this, SLOT(ManagePluginsDialog())); // Setup up for quick launch of plugins connect(ui.actionPlugin1, SIGNAL(triggered()), m_pluginMapper, SLOT(map())); m_pluginMapper->setMapping(ui.actionPlugin1, 0); connect(ui.actionPlugin2, SIGNAL(triggered()), m_pluginMapper, SLOT(map())); m_pluginMapper->setMapping(ui.actionPlugin2, 1); connect(ui.actionPlugin3, SIGNAL(triggered()), m_pluginMapper, SLOT(map())); m_pluginMapper->setMapping(ui.actionPlugin3, 2); connect(ui.actionPlugin4, SIGNAL(triggered()), m_pluginMapper, SLOT(map())); m_pluginMapper->setMapping(ui.actionPlugin4, 3); connect(ui.actionPlugin5, SIGNAL(triggered()), m_pluginMapper, SLOT(map())); m_pluginMapper->setMapping(ui.actionPlugin5, 4); connect(m_pluginMapper, SIGNAL(mapped(int)), this, SLOT(QuickLaunchPlugin(int))); updateToolTipsOnPluginIcons(); QHash plugins = pdb->all_plugins(); QStringList keys = plugins.keys(); keys.sort(); m_pluginList = keys; foreach(QString key, keys) { Plugin *p = plugins.value(key); if (p == NULL) { continue; } QString pname = p->get_name(); QString ptype = p->get_type(); if (ptype == "input") { if (m_menuPluginsInput == NULL) { m_menuPluginsInput = m_menuPlugins->addMenu(tr("Input")); connect(m_menuPluginsInput, SIGNAL(triggered(QAction *)), this, SLOT(runPlugin(QAction *))); } m_menuPluginsInput->addAction(pname); } else if (ptype == "output") { if (m_menuPluginsOutput == NULL) { m_menuPluginsOutput = m_menuPlugins->addMenu(tr("Output")); connect(m_menuPluginsOutput, SIGNAL(triggered(QAction *)), this, SLOT(runPlugin(QAction *))); } m_menuPluginsOutput->addAction(pname); } else if (ptype == "edit") { if (m_menuPluginsEdit == NULL) { m_menuPluginsEdit = m_menuPlugins->addMenu(tr("Edit")); connect(m_menuPluginsEdit, SIGNAL(triggered(QAction *)), this, SLOT(runPlugin(QAction *))); } m_menuPluginsEdit->addAction(pname); } else if (ptype == "validation") { if (m_menuPluginsValidation == NULL) { m_menuPluginsValidation = m_menuPlugins->addMenu(tr("Validation")); connect(m_menuPluginsValidation, SIGNAL(triggered(QAction *)), this, SLOT(runPlugin(QAction *))); } m_menuPluginsValidation->addAction(pname); } } } // Keeps the Plugins menu and ManagePlugins submenu arround even if no plugins added yet void MainWindow::unloadPluginsMenu() { if (m_menuPlugins != NULL) { if (m_menuPluginsInput != NULL) { disconnect(m_menuPluginsInput, SIGNAL(triggered(QAction *)), this, SLOT(runPlugin(QAction *))); m_menuPluginsInput->clear(); m_menuPlugins->removeAction(m_menuPluginsInput->menuAction()); m_menuPluginsInput = NULL; } if (m_menuPluginsOutput != NULL) { disconnect(m_menuPluginsOutput, SIGNAL(triggered(QAction *)), this, SLOT(runPlugin(QAction *))); m_menuPluginsOutput->clear(); m_menuPlugins->removeAction(m_menuPluginsOutput->menuAction()); m_menuPluginsOutput = NULL; } if (m_menuPluginsEdit != NULL) { disconnect(m_menuPluginsEdit, SIGNAL(triggered(QAction *)), this, SLOT(runPlugin(QAction *))); m_menuPluginsEdit->clear(); m_menuPlugins->removeAction(m_menuPluginsEdit->menuAction()); m_menuPluginsEdit = NULL; } if (m_menuPluginsValidation != NULL) { disconnect(m_menuPluginsValidation, SIGNAL(triggered(QAction *)), this, SLOT(runPlugin(QAction *))); m_menuPluginsValidation->clear(); m_menuPlugins->removeAction(m_menuPluginsValidation->menuAction()); m_menuPluginsValidation = NULL; } } disconnect(m_actionManagePlugins, SIGNAL(triggered()), this, SLOT(ManagePluginsDialog())); disconnect(m_pluginMapper, SIGNAL(mapped(int)), this, SLOT(QuickLaunchPlugin(int))); m_pluginMapper->removeMappings(ui.actionPlugin1); m_pluginMapper->removeMappings(ui.actionPlugin2); m_pluginMapper->removeMappings(ui.actionPlugin3); m_pluginMapper->removeMappings(ui.actionPlugin4); m_pluginMapper->removeMappings(ui.actionPlugin5); } void MainWindow::runPlugin(QAction *action) { QString pname = action->text(); #if !defined(Q_OS_WIN32) && !defined(Q_OS_MAC) // Workaround for a bug in the KDE Qt5 plugin that injects accelerator shortcuts // into QAction->text(). So return the toolTip() text in those cases where it // differs from text(). Everybody else uses text(). // https://bugs.kde.org/show_bug.cgi?format=multiple&id=345023 QString altname = action->toolTip(); if (pname != altname && !altname.isEmpty()) { pname = altname; } #endif PluginRunner prunner(m_TabManager, this); prunner.exec(pname); } void MainWindow::SelectResources(QList resources) { return m_BookBrowser->SelectResources(resources); } QList MainWindow::GetValidSelectedHTMLResources() { return m_BookBrowser->ValidSelectedHTMLResources(); } QList MainWindow::GetAllHTMLResources() { return m_BookBrowser->AllHTMLResources(); } QSharedPointer MainWindow::GetCurrentBook() { return m_Book; } BookBrowser *MainWindow::GetBookBrowser() { return m_BookBrowser; } ContentTab *MainWindow::GetCurrentContentTab() { return m_TabManager->GetCurrentContentTab(); } FlowTab *MainWindow::GetCurrentFlowTab() { return qobject_cast(GetCurrentContentTab()); } void MainWindow::ResetLinkOrStyleBookmark() { ResetLocationBookmark(m_LinkOrStyleBookmark); } void MainWindow::ResetLocationBookmark(MainWindow::LocationBookmark *locationBookmark) { locationBookmark->filename.clear(); ui.actionGoBackFromLinkOrStyle->setEnabled(false); } void MainWindow::GoBackFromLinkOrStyle() { GoToBookmark(m_LinkOrStyleBookmark); UpdateBrowserSelectionToTab(); } void MainWindow::GoToBookmark(MainWindow::LocationBookmark *locationBookmark) { if (locationBookmark->filename.isEmpty()) { return; } try { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByFilename(locationBookmark->filename); // The following OpenResource call will switch ViewState if required to be changed. // However in order to ensure the caret is moved to the bookmark which may not be where // the tab was last clicked on we must switch view state now. SetViewState(locationBookmark->view_state); OpenResource(resource, -1, locationBookmark->cv_cursor_position, locationBookmark->bv_caret_location_update, locationBookmark->view_state); ShowMessageOnStatusBar(); } catch (ResourceDoesNotExist) { // Nothing. Old file must have been deleted. ShowMessageOnStatusBar(tr("Navigation cancelled as location no longer exists.")); ResetLocationBookmark(locationBookmark); } } void MainWindow::GoToPreviewLocation() { FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab && flow_tab->GetLoadedResource()->Type() == Resource::HTMLResourceType) { flow_tab->GoToCaretLocation(m_PreviewWindow->GetCaretLocation()); } } void MainWindow::BookmarkLocation() { BookmarkLinkOrStyleLocation(); ShowMessageOnStatusBar(tr("Location bookmarked.")); } void MainWindow::BookmarkLinkOrStyleLocation() { ResetLinkOrStyleBookmark(); ContentTab *tab = GetCurrentContentTab(); if (tab == NULL) { return; } Resource *current_resource = tab->GetLoadedResource(); m_LinkOrStyleBookmark->filename = current_resource->Filename(); m_LinkOrStyleBookmark->view_state = m_ViewState; m_LinkOrStyleBookmark->cv_cursor_position = tab->GetCursorPosition(); m_LinkOrStyleBookmark->bv_caret_location_update = tab->GetCaretLocationUpdate(); ui.actionGoBackFromLinkOrStyle->setEnabled(!m_LinkOrStyleBookmark->filename.isEmpty()); } void MainWindow::OpenUrl(const QUrl &url) { if (url.isEmpty()) { return; } BookmarkLinkOrStyleLocation(); if (url.scheme().isEmpty() || url.scheme() == "file") { Resource *resource = m_BookBrowser->GetUrlResource(url); if (resource == NULL) { ResetLinkOrStyleBookmark(); return; } int line = -1; if (url.fragment().isEmpty()) { ; // If empty fragment force view to top of page line = 1; } OpenResource(resource, line, -1, QString(), MainWindow::ViewState_Unknown, url.fragment()); } else { QMessageBox::StandardButton button_pressed; button_pressed = QMessageBox::warning(this, tr("Sigil"), tr("Are you sure you want to open this external link?\n\n%1").arg(url.toString()), QMessageBox::Ok | QMessageBox::Cancel); if (button_pressed == QMessageBox::Ok) { QDesktopServices::openUrl(url); } } } void MainWindow::OpenResource(Resource *resource, int line_to_scroll_to, int position_to_scroll_to, const QString &caret_location_to_scroll_to, MainWindow::ViewState view_state, const QUrl &fragment, bool precede_current_tab) { if (view_state == MainWindow::ViewState_Unknown) { view_state = m_ViewState; } m_TabManager->OpenResource(resource, line_to_scroll_to, position_to_scroll_to, caret_location_to_scroll_to, view_state, fragment, precede_current_tab); if (view_state != m_ViewState) { SetViewState(view_state); } } void MainWindow::OpenResourceAndWaitUntilLoaded(Resource *resource, int line_to_scroll_to, int position_to_scroll_to, const QString &caret_location_to_scroll_to, MainWindow::ViewState view_state, const QUrl &fragment, bool precede_current_tab) { OpenResource(resource, line_to_scroll_to, position_to_scroll_to, caret_location_to_scroll_to, view_state, fragment, precede_current_tab); while (!GetCurrentContentTab()->IsLoadingFinished()) { qApp->processEvents(); SleepFunctions::msleep(100); } } void MainWindow::ResourceUpdatedFromDisk(Resource *resource) { SettingsStore ss; QString message = QString(tr("File")) + " " + resource->Filename() + " " + tr("was updated") + "."; int duration = 10000; if (resource->Type() == Resource::HTMLResourceType) { HTMLResource *html_resource = qobject_cast(resource); if (!m_Book->IsDataOnDiskWellFormed(html_resource)) { OpenResource(resource, -1, -1, QString(), MainWindow::ViewState_CodeView); message = QString(tr("Warning")) + ": " + message + " " + tr("The file was NOT well formed and may be corrupted."); duration = 20000; } } ShowMessageOnStatusBar(message, duration); } void MainWindow::ShowMessageOnStatusBar(const QString &message, int millisecond_duration) { // It is only safe to add messages to the status bar on the GUI thread. Q_ASSERT(QThread::currentThread() == QCoreApplication::instance()->thread()); // The MainWindow has to have a status bar initialised Q_ASSERT(statusBar()); if (message.isEmpty()) { statusBar()->clearMessage(); } else { statusBar()->showMessage(message, millisecond_duration); } } void MainWindow::ShowLastOpenFileWarnings() { if (!m_LastOpenFileWarnings.isEmpty()) { Utility::DisplayStdWarningDialog( "

" % tr("Opening this EPUB generated warnings.") % "

" % tr("Select Show Details for more information.") % "

", m_LastOpenFileWarnings.join("\n")); m_LastOpenFileWarnings.clear(); } } void MainWindow::showEvent(QShowEvent *event) { m_IsInitialLoad = false; QMainWindow::showEvent(event); if (!m_LastOpenFileWarnings.isEmpty()) { QTimer::singleShot(0, this, SLOT(ShowLastOpenFileWarnings())); } } void MainWindow::moveEvent(QMoveEvent *event) { // Workaround for Qt 4.8 bug - see WriteSettings() for details. if (!isMaximized()) { m_LastWindowSize = saveGeometry(); } QMainWindow::moveEvent(event); } void MainWindow::resizeEvent(QResizeEvent *event) { // Workaround for Qt 4.8 bug - see WriteSettings() for details. if (!isMaximized()) { m_LastWindowSize = saveGeometry(); } QMainWindow::resizeEvent(event); } void MainWindow::closeEvent(QCloseEvent *event) { if (MaybeSaveDialogSaysProceed()) { ShowMessageOnStatusBar(tr("Sigil is closing...")); WriteSettings(); KeyboardShortcutManager *sm = KeyboardShortcutManager::instance(); sm->removeActionsOf(this); // The user may have unsaved search/clip/index/meta entries if dialogs are open. // Prompt them to save or discard their changes if any. if (m_SearchEditor && m_SearchEditor->isVisible()) { m_SearchEditor->ForceClose(); } if (m_ClipEditor && m_ClipEditor->isVisible()) { m_ClipEditor->ForceClose(); } if (m_IndexEditor && m_IndexEditor->isVisible()) { m_IndexEditor->ForceClose(); } if (m_SpellcheckEditor && m_SpellcheckEditor->isVisible()) { m_SpellcheckEditor->ForceClose(); } if ((m_PreviewWindow) && m_PreviewWindow->isVisible()) { m_PreviewWindow->hide(); } event->accept(); } else { event->ignore(); } } void MainWindow::New() { // The nasty IFDEFs are here to enable the multi-document // interface on the Mac; Lin and Win just use multiple // instances of the Sigil application #ifndef Q_OS_MAC if (MaybeSaveDialogSaysProceed()) #endif { #ifdef Q_OS_MAC MainWindow *new_window = new MainWindow(); new_window->show(); #else CreateNewBook(); #endif } ShowMessageOnStatusBar(tr("New file created.")); } void MainWindow::Open() { // The nasty IFDEFs are here to enable the multi-document // interface on the Mac; Lin and Win just use multiple // instances of the Sigil application #ifndef Q_OS_MAC if (MaybeSaveDialogSaysProceed()) #endif { QStringList filters(c_LoadFilters.values()); filters.removeDuplicates(); QString filter_string = ""; foreach(QString filter, filters) { filter_string += filter + ";;"; } QString default_filter = c_LoadFilters.value("epub"); QString filename = QFileDialog::getOpenFileName(this, tr("Open File"), m_LastFolderOpen, filter_string, &default_filter ); if (!filename.isEmpty()) { #ifdef Q_OS_MAC MainWindow *new_window = new MainWindow(filename); new_window->show(); #else LoadFile(filename); #endif } } } void MainWindow::OpenRecentFile() { // The nasty IFDEFs are here to enable the multi-document // interface on the Mac; Lin and Win just use multiple // instances of the Sigil application QAction *action = qobject_cast(sender()); if (action != NULL) { #ifndef Q_OS_MAC if (MaybeSaveDialogSaysProceed()) #endif { // It is possible that the file in the recent file menu no longer exists. // Prompt the user asking them if they want to remove it. const QString &filename = action->data().toString(); if (!QFile::exists(filename)) { QMessageBox::StandardButton button_pressed; const QString &msg = tr("This file no longer exists. Click OK to remove it from the menu.\n%1"); button_pressed = QMessageBox::warning(this, tr("Sigil"), msg.arg(filename), QMessageBox::Ok | QMessageBox::Cancel); if (button_pressed == QMessageBox::Ok) { s_RecentFiles.removeAll(filename); UpdateRecentFileActions(); } return; } #ifdef Q_OS_MAC MainWindow *new_window = new MainWindow(filename); new_window->show(); #else LoadFile(filename); #endif } } } bool MainWindow::Save() { if (m_CurrentFilePath.isEmpty()) { return SaveAs(); } else { QString extension = QFileInfo(m_CurrentFilePath).suffix().toLower(); if (!SUPPORTED_SAVE_TYPE.contains(extension)) { return SaveAs(); } return SaveFile(m_CurrentFilePath); } } bool MainWindow::SaveAs() { QStringList filters(c_SaveFilters.values()); filters.removeDuplicates(); QString filter_string = ""; foreach(QString filter, filters) { filter_string += filter + ";;"; } QString save_path = ""; QString default_filter = ""; if (m_CurrentFilePath.isEmpty()) { m_CurrentFilePath = (m_CurrentFileName.isEmpty())?DEFAULT_FILENAME:m_CurrentFileName; } if (m_LastFolderOpen.isEmpty()) { m_LastFolderOpen = QDir::homePath(); } // If we can save this file type, then we use the current filename if (c_SaveFilters.contains(QFileInfo(m_CurrentFilePath).suffix().toLower())) { save_path = m_LastFolderOpen + "/" + QFileInfo(m_CurrentFilePath).fileName(); default_filter = c_SaveFilters.value(QFileInfo(m_CurrentFilePath).suffix().toLower()); } // If not, we change the extension to EPUB else { save_path = m_LastFolderOpen + "/" + QFileInfo(m_CurrentFilePath).completeBaseName() + ".epub"; default_filter = c_SaveFilters.value("epub"); } QString filename = QFileDialog::getSaveFileName(this, tr("Save File"), save_path, filter_string, #if !defined(Q_OS_WIN32) && !defined(Q_OS_MAC) & default_filter, QFileDialog::DontUseNativeDialog #else & default_filter #endif ); // QFileDialog cancelled if (filename.isEmpty()) { // The only time m_CurrentFilePath should be cleared after the SaveAs dialog is // cancelled, is when it's populated with the "untitled.epub" default filename. if (m_CurrentFilePath == DEFAULT_FILENAME) { m_CurrentFilePath.clear(); } return false; } QString extension = QFileInfo(filename).suffix().toLower(); if (extension.isEmpty()) { filename += ".epub"; } // Store the folder the user saved to m_LastFolderOpen = QFileInfo(filename).absolutePath(); bool save_result = SaveFile(filename); if (!save_result) { m_CurrentFilePath.clear(); } return save_result; } bool MainWindow::SaveACopy() { if (m_CurrentFilePath.isEmpty()) { m_CurrentFilePath = (m_CurrentFileName.isEmpty())?DEFAULT_FILENAME:m_CurrentFileName; } if (m_SaveACopyFilename.isEmpty()) { m_SaveACopyFilename = m_LastFolderOpen + "/" + QFileInfo(m_CurrentFilePath).completeBaseName() + "_copy." + QFileInfo(m_CurrentFilePath).suffix(); } QStringList filters(c_SaveFilters.values()); filters.removeDuplicates(); QString filter_string = "*.epub"; QString default_filter = "*.epub"; QString filename = QFileDialog::getSaveFileName(this, tr("Save a Copy"), m_SaveACopyFilename, filter_string, #if !defined(Q_OS_WIN32) && !defined(Q_OS_MAC) & default_filter, QFileDialog::DontUseNativeDialog #else & default_filter #endif ); // QFileDialog cancelled if (filename.isEmpty()) { // The only time m_CurrentFilePath should be cleared after the SaveAs dialog is // cancelled, is when it's populated with the "untitled.epub" default filename. if (m_CurrentFilePath == DEFAULT_FILENAME) { m_CurrentFilePath.clear(); } return false; } QString extension = QFileInfo(filename).suffix(); if (extension.isEmpty()) { filename += ".epub"; } // Store the filename the user saved to m_SaveACopyFilename = filename; return SaveFile(filename, false); } void MainWindow::Exit() { qApp->closeAllWindows(); #ifdef Q_OS_MAC MainWindow *mw; foreach (QWidget *w, qApp->topLevelWidgets()) { mw = qobject_cast(w); if (mw && !mw->isHidden()) { return; } } qApp->quit(); #endif } void MainWindow::Find() { SaveTabData(); m_FindReplace->SetUpFindText(); m_FindReplace->show(); } void MainWindow::GoToLine() { ContentTab *tab = GetCurrentContentTab(); if (tab == NULL) { return; } int line = QInputDialog::getInt(this, tr("Go To Line"), tr("Line #"), -1, 1); if (line >= 1) { OpenResource(tab->GetLoadedResource(), line, -1, QString(), MainWindow::ViewState_CodeView); } } void MainWindow::ViewImageDialog(const QUrl &url) { // non-modal dialog m_ViewImage->show(); m_ViewImage->raise(); m_ViewImage->activateWindow(); QString image_path = url.toString(); QString filename = QFileInfo(image_path).fileName(); try { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); if (resource->Type() == Resource::ImageResourceType || resource->Type() == Resource::SVGResourceType) { m_ViewImage->ShowImage(resource->GetFullPath()); } } catch (ResourceDoesNotExist) { QMessageBox::warning(this, tr("Sigil"), tr("Image does not exist: ") + image_path); } } void MainWindow::GoToLinkedStyleDefinition(const QString &element_name, const QString &style_class_name) { // Invoked via a signal when the user has requested to navigate to a // style definition and none was found in the inline styles, so look // at the linked resources for this tab instead. ContentTab *tab = GetCurrentContentTab(); if (tab == NULL) { return; } Resource *current_resource = tab->GetLoadedResource(); if (current_resource->Type() == Resource::HTMLResourceType) { BookmarkLinkOrStyleLocation(); // Look in the linked stylesheets for a match QList css_resources = m_BookBrowser->AllCSSResources(); QStringList stylesheets = GetStylesheetsAlreadyLinked(current_resource); bool found_match = false; CSSResource *first_css_resource = 0; foreach(QString pathname, stylesheets) { // Check whether the stylesheet contains this style CSSResource *css_resource = NULL; foreach(Resource * resource, css_resources) { if (pathname == QString("../" + resource->GetRelativePathToOEBPS())) { // We have our resource matching this stylesheet. css_resource = dynamic_cast(resource); if (!first_css_resource) { first_css_resource = css_resource; } break; } } if (css_resource) { CSSInfo css_info(css_resource->GetText(), true); CSSInfo::CSSSelector *selector = css_info.getCSSSelectorForElementClass(element_name, style_class_name); // If we fail to find a matching class, search again with just the element if (!style_class_name.isEmpty() && !selector) { selector = css_info.getCSSSelectorForElementClass(element_name, ""); } if (selector) { m_TabManager->OpenResource(css_resource, selector->line); found_match = true; break; } } } if (!found_match) { QString display_name; if (style_class_name.isEmpty()) { display_name = element_name; } else { display_name = QString("\".%1\" or \"%2.%1\"").arg(style_class_name).arg(element_name); } // Open the first linked stylesheet if any if (first_css_resource) { OpenResource(first_css_resource, 1); } ShowMessageOnStatusBar(QString(tr("No CSS styles named") + " " + display_name + " found, " + "or stylesheet not linked."), 7000); } } } void MainWindow::ZoomIn() { ZoomByStep(true); } void MainWindow::ZoomOut() { ZoomByStep(false); } void MainWindow::ZoomReset() { ZoomByFactor(ZOOM_NORMAL); } void MainWindow::IndexEditorDialog(IndexEditorModel::indexEntry *index_entry) { SaveTabData(); // non-modal dialog m_IndexEditor->show(); m_IndexEditor->raise(); m_IndexEditor->activateWindow(); if (index_entry) { m_IndexEditor->AddEntry(false, index_entry, false); } } void MainWindow::SpellcheckEditorDialog() { SaveTabData(); // non-modal dialog m_SpellcheckEditor->show(); m_SpellcheckEditor->raise(); m_SpellcheckEditor->activateWindow(); } void MainWindow::clearMemoryCaches() { // See https://bugreports.qt-project.org/browse/QTBUG-4350 // QWebSettinbgs::clearMemoryCaches(); // replace the above with a similar sequence // that does not invalidate the fontCache // toggle memory caches to disable and then re-enable QWebSettings::setObjectCacheCapacities(0,0,0); QWebSettings::setObjectCacheCapacities(0, 0, 100 * 1024 * 1024); // do the same to flush the page cache int numpages = QWebSettings::maximumPagesInCache(); QWebSettings::setMaximumPagesInCache(0); QWebSettings::setMaximumPagesInCache(numpages); } bool MainWindow::ProceedWithUndefinedUrlFragments() { std::tuple result = m_Book->HasUndefinedURLFragments(); if (std::get<0>(result)) { QMessageBox::StandardButton button_pressed; const QString &msg = tr("

The href %1 found in %2 does not exist (and there may be more)." " Splitting or merging under these conditions can result in broken links.

" "

Do you still wish to continue?

"); button_pressed = QMessageBox::warning(this, tr("Sigil"), msg.arg(std::get<1>(result), std::get<2>(result)), QMessageBox::Yes | QMessageBox::No); if (button_pressed != QMessageBox::Yes) { return false; } return true; } return true; } void MainWindow::AddCover() { // Get the image to use. QStringList selected_files; // Get just images, not svg files. QList image_resources = m_Book->GetFolderKeeper()->GetResourceListByType(Resource::ImageResourceType); QString title = tr("Add Cover"); SelectFiles select_files(title, image_resources, m_LastInsertedFile, this); if (select_files.exec() == QDialog::Accepted) { if (select_files.IsInsertFromDisk()) { QStringList filenames = m_BookBrowser->AddExisting(false, true); // Convert full path to filename. foreach(QString filename, filenames) { QString internal_filename = filename.right(filename.length() - filename.lastIndexOf("/") - 1); selected_files.append(internal_filename); } } else { selected_files = select_files.SelectedImages(); } } if (selected_files.count() == 0) { return; } QString image_filename = selected_files.first(); QApplication::setOverrideCursor(Qt::WaitCursor); // Find existing cover HTML file if there is one. HTMLResource *html_cover_resource = NULL; QList html_resources; QList resources = GetAllHTMLResources(); foreach(Resource * resource, resources) { HTMLResource *html_resource = qobject_cast(resource); if (html_resource) { html_resources.append(html_resource); // Check if this is an existing cover file. if (m_Book->GetOPF()->GetGuideSemanticCodeForResource(html_resource) == "cover") { html_cover_resource = html_resource; } else if (resource->Filename().toLower() == HTML_COVER_FILENAME && html_cover_resource == NULL) { html_cover_resource = html_resource; } } } // Populate the HTML cover file with the necessary text. // If a template file exists, use its text for the cover source. QString version = m_Book->GetOPF()->GetEpubVersion(); QString text = HTML_COVER_SOURCE; if (version.startsWith('3')) text = HTML5_COVER_SOURCE; QString cover_path = Utility::DefinePrefsDir() + "/" + HTML_COVER_FILENAME; if (QFile::exists(cover_path)) { text = Utility::ReadUnicodeTextFile(cover_path); } // Create an HTMLResource for the cover if it doesn't exist. if (html_cover_resource == NULL) { html_cover_resource = m_Book->CreateHTMLCoverFile(text); } else { html_cover_resource->SetText(text); } try { Resource *image_resource = m_Book->GetFolderKeeper()->GetResourceByFilename(image_filename); // Set cover semantics if (version.startsWith('3')) { NavProcessor navproc(m_Book->GetOPF()->GetNavResource()); navproc.AddLandmarkCode(html_cover_resource, "cover", false); } m_Book->GetOPF()->AddGuideSemanticCode(html_cover_resource, "cover", false); ImageResource *image_type_resource = qobject_cast(image_resource); if (image_type_resource) { if (!m_Book->GetOPF()->IsCoverImage(image_type_resource)) { m_Book->GetOPF()->SetResourceAsCoverImage(image_type_resource); } // Add the filename and dimensions of the image to the HTML source. QString image_relative_path = "../" + image_resource->GetRelativePathToOEBPS(); QImage img(image_resource->GetFullPath()); QString text = html_cover_resource->GetText(); QString width = QString::number(img.width()); QString height = QString::number(img.height()); text.replace("SGC_IMAGE_FILENAME", image_relative_path); text.replace("SGC_IMAGE_WIDTH", width); text.replace("SGC_IMAGE_HEIGHT", height); html_cover_resource->SetText(text); // Finally, if epub3 update the html resource manifest properties if (version.startsWith('3')) { QList resources_to_update; resources_to_update.append(html_cover_resource); m_Book->GetOPF()->UpdateManifestProperties(resources_to_update); } } else { Utility::DisplayStdErrorDialog(tr("Unexpected error. Only image files can be used for the cover.")); } } catch (ResourceDoesNotExist) { // } m_BookBrowser->Refresh(); m_Book->SetModified(); clearMemoryCaches(); OpenResourceAndWaitUntilLoaded(html_cover_resource); // Reload the tab to ensure it reflects updated image. FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab) { flow_tab->LoadTabContent(); flow_tab->ScrollToTop(); } ShowMessageOnStatusBar(tr("Cover added.")); QApplication::restoreOverrideCursor(); } void MainWindow::UpdateManifestProperties() { QString version = m_Book->GetConstOPF()->GetEpubVersion(); if (!version.startsWith('3')) { ShowMessageOnStatusBar(tr("Not Available for epub2.")); return; } SaveTabData(); QApplication::setOverrideCursor(Qt::WaitCursor); QList resources = GetAllHTMLResources(); m_Book->GetOPF()->UpdateManifestProperties(resources); m_Book->SetModified(); ShowMessageOnStatusBar(tr("OPF Manifest Properties Updated.")); QApplication::restoreOverrideCursor(); } void MainWindow::GenerateNCXFromNav() { QString version = m_Book->GetConstOPF()->GetEpubVersion(); if (!version.startsWith('3')) { ShowMessageOnStatusBar(tr("Not Available for epub2.")); return; } SaveTabData(); QApplication::setOverrideCursor(Qt::WaitCursor); // find existing nav document if there is one HTMLResource * nav_resource = m_Book->GetConstOPF()->GetNavResource(); QString navname = ""; QString navdata = ""; if (nav_resource) { navdata = CleanSource::Mend(nav_resource->GetText(),"3.0"); navname = nav_resource->Filename(); } if ((!nav_resource) || navdata.isEmpty()) { ShowMessageOnStatusBar(tr("NCX generation failed.")); QApplication::restoreOverrideCursor(); } QList mvalues = m_Book->GetConstOPF()->GetDCMetadataValues("dc:title"); QString doctitle = "UNKNOWN"; if (!mvalues.isEmpty()) { doctitle = mvalues.at(0).toString(); } QString mainid = m_Book->GetConstOPF()->GetMainIdentifierValue(); // Now build the ncx in python in a separate thread since may be an long job PythonRoutines pr; QFuture future = QtConcurrent::run(&pr, &PythonRoutines::GenerateNcxInPython, navdata, navname, doctitle, mainid); future.waitForFinished(); QString ncxdata = future.result(); if (!ncxdata.isEmpty()) { NCXResource * ncx_resource = m_Book->GetNCX(); ncx_resource->SetText(ncxdata); ncx_resource->SaveToDisk(); m_TableOfContents->Refresh(); m_BookBrowser->BookContentModified(); m_BookBrowser->Refresh(); m_Book->SetModified(); // now update the guide entries as well PythonRoutines pr; QList results = pr.UpdateGuideFromNavInPython(navdata, navname); foreach(QStringList entry, results) { QString gtype = entry.at(0); QString href = entry.at(1); if (!gtype.isEmpty() && !href.isEmpty()) { // remove any fragment identifier and extract file name QStringList parts = href.split('#', QString::KeepEmptyParts); QString base = parts.at(0); QStringList path_pieces = base.split("/"); int last = path_pieces.count() - 1; QString filename = path_pieces.at(last); Resource * resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); HTMLResource *html_resource = qobject_cast(resource); if (html_resource) { // The OPFResource AddSemantic code defaults to remove by adding again (ie. toggling) // Setting the last parameter (toggle) to false disables toggling m_Book->GetOPF()->AddGuideSemanticCode(html_resource, gtype, false); } } } ShowMessageOnStatusBar(tr("NCX generated.")); QApplication::restoreOverrideCursor(); return; } ShowMessageOnStatusBar(tr("NCX generation failed.")); QApplication::restoreOverrideCursor(); } void MainWindow::CreateIndex() { SaveTabData(); QApplication::setOverrideCursor(Qt::WaitCursor); // If Index CSS file does not exist create one. bool found_css = false; foreach(Resource *resource, m_BookBrowser->AllCSSResources()) { if (resource->Filename() == SGC_INDEX_CSS_FILENAME) { found_css = true; } } // If Index CSS file does not exist look for a default file // in preferences directory and if none create one. if (!found_css) { QString css_path = Utility::DefinePrefsDir() + "/" + SGC_INDEX_CSS_FILENAME; if (QFile::exists(css_path)) { m_BookBrowser->AddFile(css_path); } else { m_BookBrowser->CreateIndexCSSFile(); } } // get semantic (guide/landmark) information for all resources QHash semantic_types = m_Book->GetOPF()->GetSemanticCodeForPaths(); QStringList allow_index; allow_index << "bodymatter" << "chapter" << "conclusion" << "division" << "epilogue" << "introduction" << "part" << "preamble" << "prologue" << "subchapter" << "text" << "volume"; HTMLResource *index_resource = NULL; QList html_resources; // Turn the list of Resources that are really HTMLResources to a real list // of HTMLResources stripping out any front or back matter QList resources = GetAllHTMLResources(); foreach(Resource * resource, resources) { HTMLResource *html_resource = qobject_cast(resource); if (html_resource) { QString resource_path = html_resource->GetRelativePathToOEBPS(); QString semantic_code; if (semantic_types.contains(resource_path)) { semantic_code = semantic_types[resource_path]; } if (semantic_code.isEmpty() || allow_index.contains(semantic_code)) { html_resources.append(html_resource); } // Check if this is an existing index file. if (semantic_code == "index") { index_resource = html_resource; } else if (resource->Filename() == HTML_INDEX_FILE && html_resource == NULL) { index_resource = html_resource; } } } // Close the tab so the focus saving doesn't overwrite the text were // replacing in the resource. if (index_resource != NULL) { m_TabManager->CloseTabForResource(index_resource); } // Create an HTMLResource for the INDEX if it doesn't exist. if (index_resource == NULL) { index_resource = m_Book->CreateEmptyHTMLFile(); index_resource->RenameTo(HTML_INDEX_FILE); html_resources.append(index_resource); m_Book->GetOPF()->UpdateSpineOrder(html_resources); } // Make sure you not indexing the index page itself html_resources.removeOne(index_resource); // Skip indexing any epub3 nav document HTMLResource * nav_resource = m_Book->GetConstOPF()->GetNavResource(); if (nav_resource) { html_resources.removeOne(nav_resource); } // Scan the book, add ids for any tag containing at least one index entry and store the // document index entry at the same time (including custom and from the index editor). if (!Index::BuildIndex(html_resources)) { return; } // Write out the HTML index file. QString version = index_resource->GetEpubVersion(); IndexHTMLWriter index; index_resource->SetText(index.WriteXML(version)); // Normally Setting a semantic on a resource that already has it set will remove the semantic. // Pass along toggle as false to disable this default behaviour m_Book->GetOPF()->AddGuideSemanticCode(index_resource, "index", false); if (version.startsWith('3')) { NavProcessor navproc(m_Book->GetOPF()->GetNavResource()); navproc.AddLandmarkCode(index_resource, "index", false); } m_Book->SetModified(); m_BookBrowser->Refresh(); OpenResource(index_resource); QApplication::restoreOverrideCursor(); } void MainWindow::DeleteReportsStyles(QList reports_styles_to_delete) { // Convert the styles to CSS Selectors QHash> css_styles_to_delete; foreach(BookReports::StyleData * report_style, reports_styles_to_delete) { CSSInfo::CSSSelector *selector = new CSSInfo::CSSSelector(); selector->groupText = report_style->css_selector_text; selector->line = report_style->css_selector_line; QString css_short_filename = report_style->css_filename; css_short_filename = css_short_filename.right(css_short_filename.length() - css_short_filename.lastIndexOf('/') - 1); css_styles_to_delete[css_short_filename].append(selector); } // Confirm which styles to delete DeleteStyles delete_styles(css_styles_to_delete, this); connect(&delete_styles, SIGNAL(OpenFileRequest(QString, int)), this, SLOT(OpenFile(QString, int))); if (delete_styles.exec() != QDialog::Accepted) { return; } css_styles_to_delete = delete_styles.GetStylesToDelete(); if (css_styles_to_delete.count() < 1) { return; } QApplication::setOverrideCursor(Qt::WaitCursor); // Actually delete the styles QHashIterator> stylesheets_to_delete(css_styles_to_delete); while (stylesheets_to_delete.hasNext()) { stylesheets_to_delete.next(); DeleteCSSStyles(stylesheets_to_delete.key(), stylesheets_to_delete.value()); } ShowMessageOnStatusBar(tr("Styles deleted.")); QApplication::restoreOverrideCursor(); } void MainWindow::ReportsDialog() { SaveTabData(); if (!m_Book.data()->GetNonWellFormedHTMLFiles().isEmpty()) { QMessageBox::warning(this, tr("Sigil"), tr("Reports cancelled due to XML not well formed.")); return; } // non-modal dialog m_Reports->CreateReports(m_Book); m_Reports->show(); m_Reports->raise(); m_Reports->activateWindow(); } void MainWindow::OpenFile(QString filename, int line) { if (filename.isEmpty()) { return; } if (line < 1) { line = 1; } try { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); OpenResource(resource, line); } catch (ResourceDoesNotExist) { // } } void MainWindow::DeleteFilenames(QStringList files_to_delete) { if (files_to_delete.count() <= 0) { return; } QList resources; foreach(QString filename, files_to_delete) { try { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); resources.append(resource); } catch (ResourceDoesNotExist) { continue; } } RemoveResources(resources); } bool MainWindow::DeleteCSSStyles(const QString &filename, QList css_selectors) { // Save our tabs data as we will be modifying the underlying resources SaveTabData(); bool is_modified = false; bool is_found = false; // Try our CSS resources first as most likely place for a style QList css_resources = m_BookBrowser->AllCSSResources(); foreach(Resource * resource, css_resources) { if (resource->Filename() == filename) { CSSResource *css_resource = qobject_cast(resource); is_found = true; is_modified = css_resource->DeleteCSStyles(css_selectors); break; } } if (!is_found) { // Try an inline style instead QList html_resources = GetAllHTMLResources(); foreach(Resource * resource, html_resources) { if (resource->Filename() == filename) { HTMLResource *html_resource = qobject_cast(resource); is_modified = html_resource->DeleteCSStyles(css_selectors); break; } } } if (is_modified) { m_Book->SetModified(); } return is_modified; } void MainWindow::DeleteUnusedMedia() { SaveTabData(); if (!m_Book.data()->GetNonWellFormedHTMLFiles().isEmpty()) { QMessageBox::warning(this, tr("Sigil"), tr("Delete Unused Media Files cancelled due to XML not well formed.")); return; } QList resources; QHash html_files_hash = m_Book->GetHTMLFilesUsingMedia(); // Get file urls from HTML inline styles QStringList style_urls = m_Book->GetStyleUrlsInHTMLFiles(); // Get files urls from CSS files QList css_resources = m_BookBrowser->AllCSSResources(); foreach(Resource *resource, css_resources) { CSSResource *css_resource = dynamic_cast(resource); CSSInfo css_info(css_resource->GetText(), true); style_urls.append(css_info.getAllPropertyValues("")); } // Get file urls from HTML CSS files QList html_resources = GetAllHTMLResources(); foreach(Resource *resource, html_resources) { HTMLResource *html_resource = dynamic_cast(resource); CSSInfo css_info(html_resource->GetText(), false); style_urls.append(css_info.getAllPropertyValues("")); } style_urls.removeDuplicates(); QStringList style_url_files; QRegularExpression url_file_search("url\\s*\\(\\s*['\"]?([^\\(\\)'\"]*)[\"']?\\)"); foreach (QString url, style_urls) { QRegularExpressionMatch match = url_file_search.match(url); if (match.hasMatch()) { style_url_files.append(match.captured(1)); } } foreach(Resource * resource, m_BookBrowser->AllMediaResources()) { QString filepath = "../" + resource->GetRelativePathToOEBPS(); // Include the file in the list to delete if it was not referenced if (html_files_hash[filepath].count() == 0 && !style_url_files.contains(filepath)) { // If used as cover image, consider it referenced. ImageResource *image_resource = qobject_cast(resource); if (!image_resource || !m_Book->GetOPF()->IsCoverImage(image_resource)) { resources.append(resource); } } } if (resources.count() > 0) { RemoveResources(resources); ShowMessageOnStatusBar(tr("Unused media files deleted.")); } else { QMessageBox::information(this, tr("Sigil"), tr("There are no unused image, video or audio files to delete.")); } } void MainWindow::DeleteUnusedStyles() { SaveTabData(); if (!m_Book.data()->GetNonWellFormedHTMLFiles().isEmpty()) { QMessageBox::warning(this, tr("Sigil"), tr("Delete Unused Styles cancelled due to XML not well formed.")); return; } QList html_class_usage = BookReports::GetAllHTMLClassUsage(m_Book, true); QList css_selector_usage = BookReports::GetCSSSelectorUsage(m_Book, html_class_usage); qDeleteAll(html_class_usage); QList css_selectors_to_delete; foreach(BookReports::StyleData *selector, css_selector_usage) { if (selector->html_filename.isEmpty()) { css_selectors_to_delete.append(selector); } } if (css_selectors_to_delete.count() > 0) { DeleteReportsStyles(css_selectors_to_delete); } else { QMessageBox::information(this, tr("Sigil"), tr("There are no unused stylesheet classes to delete.")); } qDeleteAll(css_selector_usage); } void MainWindow::InsertFileDialog() { SaveTabData(); ShowMessageOnStatusBar(); FlowTab *flow_tab = GetCurrentFlowTab(); if (!flow_tab || !flow_tab->InsertFileEnabled()) { QMessageBox::warning(this, tr("Sigil"), tr("You cannot insert a file at this position.")); return; } QStringList selected_files; QList media_resources = m_BookBrowser->AllMediaResources(); QString title = tr("Insert File"); SelectFiles select_files(title, media_resources, m_LastInsertedFile, this); if (select_files.exec() == QDialog::Accepted) { if (select_files.IsInsertFromDisk()) { InsertFilesFromDisk(); } else { selected_files = select_files.SelectedImages(); InsertFiles(selected_files); } } } void MainWindow::InsertFiles(const QStringList &selected_files) { if (!selected_files.isEmpty()) { FlowTab *flow_tab = GetCurrentFlowTab(); if (!flow_tab) { return; } if (flow_tab->InsertFileEnabled()) { foreach(QString selected_file, selected_files) { try { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByFilename(selected_file); QString relative_path = "../" + resource->GetRelativePathToOEBPS(); QString filename = relative_path.right(relative_path.length() - relative_path.lastIndexOf("/") - 1); if (filename.contains(".")) { filename = filename.left(filename.lastIndexOf(".")); } QString html; if (resource->Type() == Resource::ImageResourceType || resource->Type() == Resource::SVGResourceType) { html = QString("\"%1\"").arg(filename).arg(relative_path); } else if (resource->Type() == Resource::VideoResourceType) { // When inserted in BV the filename will disappear html = QString("").arg(relative_path).arg(filename); } else if (resource->Type() == Resource::AudioResourceType) { html = QString("").arg(relative_path).arg(filename); } flow_tab->InsertFile(html); } catch (ResourceDoesNotExist) { Utility::DisplayStdErrorDialog(tr("The file \"%1\" does not exist.") .arg(selected_file)); } } } flow_tab->ResumeTabReloading(); m_LastInsertedFile = selected_files.last(); } } void MainWindow::InsertFilesFromDisk() { // Prompt the user for the images to add. // Workaround for insert same image twice from disk causing a book view refresh // due to the linked resource being modified. Will perform the refresh afterwards. FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab) { flow_tab->SuspendTabReloading(); } // We must disconnect the ResourcesAdded signal to avoid LoadTabContent being called // which results in the inserted image being cleared from the BV page immediately. disconnect(m_BookBrowser, SIGNAL(ResourcesAdded()), this, SLOT(ResourcesAddedOrDeleted())); QStringList filenames = m_BookBrowser->AddExisting(true); connect(m_BookBrowser, SIGNAL(ResourcesAdded()), this, SLOT(ResourcesAddedOrDeleted())); // Since we disconnected the signal we will have missed forced clearing of cache clearMemoryCaches(); QStringList internal_filenames; foreach(QString filename, filenames) { QString internal_filename = filename.right(filename.length() - filename.lastIndexOf("/") - 1); internal_filenames.append(internal_filename); } InsertFiles(internal_filenames); } void MainWindow::InsertSpecialCharacter() { // non-modal dialog m_SelectCharacter->show(); m_SelectCharacter->raise(); m_SelectCharacter->activateWindow(); } void MainWindow::InsertId() { SaveTabData(); // Get current id attribute value if any ShowMessageOnStatusBar(); FlowTab *flow_tab = GetCurrentFlowTab(); if (!flow_tab || !flow_tab->InsertIdEnabled()) { QMessageBox::warning(this, tr("Sigil"), tr("You cannot insert an id at this position.")); return; } QString id = flow_tab->GetAttributeId(); // Prevent adding a hidden anchor id in Book View. if (m_ViewState == MainWindow::ViewState_BookView && id.isEmpty() && flow_tab->GetSelectedText().isEmpty()) { QMessageBox::warning(this, tr("Sigil"), tr("You must select text before inserting a new id.")); return; } HTMLResource *html_resource = qobject_cast(flow_tab->GetLoadedResource()); SelectId select_id(id, html_resource, m_Book, this); if (select_id.exec() == QDialog::Accepted) { QString selected_id = select_id.GetId(); QRegularExpression invalid_id("(^[^A-Za-z]|[^A-Za-z0-9_:\\.-])"); QRegularExpressionMatch mo = invalid_id.match(selected_id); if (mo.hasMatch()) { QMessageBox::warning(this, tr("Sigil"), tr("ID is invalid - must start with a letter, followed by letter number _ : - or .")); return; }; if (!flow_tab->InsertId(select_id.GetId())) { QMessageBox::warning(this, tr("Sigil"), tr("You cannot insert an id at this position.")); } } } void MainWindow::InsertHyperlink() { SaveTabData(); // Get current id attribute value if any ShowMessageOnStatusBar(); FlowTab *flow_tab = GetCurrentFlowTab(); if (!flow_tab || !flow_tab->InsertHyperlinkEnabled()) { QMessageBox::warning(this, tr("Sigil"), tr("You cannot insert a link at this position.")); return; } QString href = flow_tab->GetAttributeHref(); // Prevent adding a hidden anchor link in Book View. if (m_ViewState == MainWindow::ViewState_BookView && href.isEmpty() && flow_tab->GetSelectedText().isEmpty()) { QMessageBox::warning(this, tr("Sigil"), tr("You must select text before inserting a new link.")); return; } HTMLResource *html_resource = qobject_cast(flow_tab->GetLoadedResource()); QList resources = GetAllHTMLResources() + m_BookBrowser->AllMediaResources(); SelectHyperlink select_hyperlink(href, html_resource, resources, m_Book, this); if (select_hyperlink.exec() == QDialog::Accepted) { QString target = select_hyperlink.GetTarget(); if (target.contains("<") || target.contains(">")) { QMessageBox::warning(this, tr("Sigil"), tr("Link is invalid - cannot contain '<' or '>'")); return; }; if (!flow_tab->InsertHyperlink(target)) { QMessageBox::warning(this, tr("Sigil"), tr("You cannot insert a link at this position.")); } } } void MainWindow::MarkForIndex() { SaveTabData(); ShowMessageOnStatusBar(); FlowTab *flow_tab = GetCurrentFlowTab(); if (!flow_tab || !flow_tab->MarkForIndexEnabled()) { QMessageBox::warning(this, tr("Sigil"), tr("You cannot mark an index at this position or without selecting text.")); return; } // Get current id attribute value if any QString title = flow_tab->GetAttributeIndexTitle(); SelectIndexTitle select_index_title(title, this); if (select_index_title.exec() == QDialog::Accepted) { QString entry = select_index_title.GetTitle(); if (entry.contains("<") || entry.contains(">")) { QMessageBox::warning(this, tr("Sigil"), tr("Entry is invalid - cannot contain '<' or '>'")); return; }; if (!flow_tab->MarkForIndex(entry)) { QMessageBox::warning(this, tr("Sigil"), tr("You cannot mark an index at this position.")); } } } void MainWindow::ApplicationFocusChanged(QWidget *old, QWidget *now) { QWidget *window = QApplication::activeWindow(); if (!window || !now) { // Nothing to do - application is exiting return; } // We are only interested in focus events that take place in this MainWindow if (window != this) { return; } m_LastPasteTarget = dynamic_cast(now); // Update the zoom target based on current window. if (m_PreviewWindow->HasFocus()) { m_ZoomPreview = true; float zoom_factor = GetZoomFactor(); UpdateZoomLabel(zoom_factor); UpdateZoomSlider(zoom_factor); } else { ContentTab *tab = m_TabManager->GetCurrentContentTab(); if (tab != NULL && tab->hasFocus()) { m_ZoomPreview = false; float zoom_factor = GetZoomFactor(); UpdateZoomLabel(zoom_factor); UpdateZoomSlider(zoom_factor); } } } void MainWindow::QuickLaunchPlugin(int i) { SettingsStore ss; QStringList namemap = ss.pluginMap(); if ((i >= 0) && (namemap.count() > i)) { QString pname = namemap.at(i); if (m_pluginList.contains(pname)) { PluginRunner prunner(m_TabManager, this); prunner.exec(pname); } } } void MainWindow::PasteTextIntoCurrentTarget(const QString &text) { if (m_LastPasteTarget == NULL) { ShowMessageOnStatusBar(tr("Select the destination to paste into first.")); return; } ShowMessageOnStatusBar(); m_LastPasteTarget->PasteText(text); } void MainWindow::PasteClipIntoCurrentTarget(int clip_number) { if (m_LastPasteTarget == NULL) { ShowMessageOnStatusBar(tr("Select the destination to paste into first.")); return; } bool applied = m_LastPasteTarget->PasteClipNumber(clip_number); if (applied) { // Clear the statusbar afterwards but only if entries were pasted. ShowMessageOnStatusBar(tr("Pasted clip entry %1.").arg(clip_number)); } } void MainWindow::PasteClip1IntoCurrentTarget() { PasteClipIntoCurrentTarget(1); } void MainWindow::PasteClip2IntoCurrentTarget() { PasteClipIntoCurrentTarget(2); } void MainWindow::PasteClip3IntoCurrentTarget() { PasteClipIntoCurrentTarget(3); } void MainWindow::PasteClip4IntoCurrentTarget() { PasteClipIntoCurrentTarget(4); } void MainWindow::PasteClip5IntoCurrentTarget() { PasteClipIntoCurrentTarget(5); } void MainWindow::PasteClip6IntoCurrentTarget() { PasteClipIntoCurrentTarget(6); } void MainWindow::PasteClip7IntoCurrentTarget() { PasteClipIntoCurrentTarget(7); } void MainWindow::PasteClip8IntoCurrentTarget() { PasteClipIntoCurrentTarget(8); } void MainWindow::PasteClip9IntoCurrentTarget() { PasteClipIntoCurrentTarget(9); } void MainWindow::PasteClip10IntoCurrentTarget() { PasteClipIntoCurrentTarget(10); } void MainWindow::PasteClip11IntoCurrentTarget() { PasteClipIntoCurrentTarget(11); } void MainWindow::PasteClip12IntoCurrentTarget() { PasteClipIntoCurrentTarget(12); } void MainWindow::PasteClip13IntoCurrentTarget() { PasteClipIntoCurrentTarget(13); } void MainWindow::PasteClip14IntoCurrentTarget() { PasteClipIntoCurrentTarget(14); } void MainWindow::PasteClip15IntoCurrentTarget() { PasteClipIntoCurrentTarget(15); } void MainWindow::PasteClip16IntoCurrentTarget() { PasteClipIntoCurrentTarget(16); } void MainWindow::PasteClip17IntoCurrentTarget() { PasteClipIntoCurrentTarget(17); } void MainWindow::PasteClip18IntoCurrentTarget() { PasteClipIntoCurrentTarget(18); } void MainWindow::PasteClip19IntoCurrentTarget() { PasteClipIntoCurrentTarget(19); } void MainWindow::PasteClip20IntoCurrentTarget() { PasteClipIntoCurrentTarget(20); } void MainWindow::PasteClipEntriesIntoCurrentTarget(const QList &clips) { if (m_LastPasteTarget == NULL) { ShowMessageOnStatusBar(tr("Select the destination to paste into first.")); return; } bool applied = m_LastPasteTarget->PasteClipEntries(clips); if (applied) { // Clear the statusbar afterwards but only if entries were pasted. ShowMessageOnStatusBar(); } } void MainWindow::PasteClipEntriesIntoPreviousTarget(const QList &clips) { FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab && flow_tab->GetLoadedResource()->Type() == Resource::HTMLResourceType) { bool applied = flow_tab->PasteClipEntries(clips); if (applied) { flow_tab->setFocus(); // Clear the statusbar afterwards but only if entries were pasted. ShowMessageOnStatusBar(); } } } void MainWindow::MergeResources(QList resources) { if (resources.isEmpty()) { return; } // Save the tab data SaveTabData(); // Convert merge previous to merge selected so all files can be checked for validity if (resources.count() == 1) { Resource *resource = m_Book->PreviousResource(resources.first()); if (!resource || resource == resources.first()) { QMessageBox::warning(this, tr("Sigil"), tr("One resource selected and there is no previous resource to merge into.")); return; } resources.prepend(resource); } else { QMessageBox::StandardButton button_pressed; button_pressed = QMessageBox::warning(this, tr("Sigil"), tr("Are you sure you want to merge the selected files?\nThis action cannot be reversed."), QMessageBox::Ok | QMessageBox::Cancel); if (button_pressed != QMessageBox::Ok) { return; } } // Check if data is well formed foreach (Resource *r, resources) { HTMLResource *h = qobject_cast(r); if (!h) { continue; } if (!h->FileIsWellFormed()) { QMessageBox::warning(this, tr("Sigil"), tr("Merge cancelled: %1, XML not well formed.").arg(h->Filename())); return; } } if (!m_TabManager->IsAllTabDataWellFormed()) { QMessageBox::warning(this, tr("Sigil"), tr("Merge cancelled due to XML not well formed.")); return; } // Handle warning the user about undefined url fragments. if (!ProceedWithUndefinedUrlFragments()) { return; } QApplication::setOverrideCursor(Qt::WaitCursor); // Close all tabs being updated to prevent BV overwriting the new data foreach(Resource *resource, resources) { m_TabManager->CloseTabForResource(resource); } // Close the OPF tab bool opf_was_open = m_TabManager->CloseOPFTabIfOpen(); // Display progress dialog Resource *resource_to_open = resources.first(); Resource *failed_resource = m_Book->MergeResources(resources); if (failed_resource != NULL) { QApplication::restoreOverrideCursor(); QMessageBox::critical(this, tr("Sigil"), tr("Cannot merge file %1").arg(failed_resource->Filename())); QApplication::setOverrideCursor(Qt::WaitCursor); resource_to_open = failed_resource; } else { m_BookBrowser->Refresh(); } // Reopen OPF tab if it got closed if (opf_was_open) { OpenResource(m_Book->GetOPF()); } OpenResource(resource_to_open); UpdateBrowserSelectionToTab(); QApplication::restoreOverrideCursor(); ShowMessageOnStatusBar(tr("Merge completed. You may need to regenerate or edit your Table Of Contents.")); } void MainWindow::LinkStylesheetsToResources(QList resources) { if (resources.isEmpty()) { return; } SaveTabData(); // Check if data is well formed before saving foreach (Resource *r, resources) { HTMLResource *h = qobject_cast(r); if (!h) { continue; } if (!h->FileIsWellFormed()) { QMessageBox::warning(this, tr("Sigil"), tr("Link Stylesheets cancelled: %1, XML not well formed.").arg(h->Filename())); return; } } // Choose which stylesheets to link LinkStylesheets link(GetStylesheetsMap(resources), this); if (link.exec() != QDialog::Accepted) { return; } Resource *current_resource = NULL; ContentTab *tab = m_TabManager->GetCurrentContentTab(); if (tab != NULL) { current_resource = tab->GetLoadedResource(); } // Close all tabs being updated to prevent BV overwriting the new data foreach(Resource *resource, resources) { m_TabManager->CloseTabForResource(resource); } QStringList stylesheets = link.GetStylesheets(); QApplication::setOverrideCursor(Qt::WaitCursor); // Convert HTML resources into HTMLResource types QListhtml_resources; foreach(Resource *resource, resources) { html_resources.append(qobject_cast(resource)); } LinkUpdates::UpdateLinksInAllFiles(html_resources, stylesheets); m_Book->SetModified(); if (current_resource && resources.contains(current_resource)) { OpenResource(current_resource); } SelectResources(resources); QApplication::restoreOverrideCursor(); } void MainWindow::FindWord(QString word) { SaveTabData(); SetViewState(MainWindow::ViewState_CodeView); // Note the current tab if it is an HTML file. HTMLResource *current_html_resource = NULL; QString current_html_filename; FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab) { Resource *resource = flow_tab->GetLoadedResource(); if (resource->Type() == Resource::HTMLResourceType) { current_html_resource = qobject_cast(resource); current_html_filename = current_html_resource->Filename(); } } // Get list of files from current to end followed // by start to just before current file. QList html_resources; QList resources = GetAllHTMLResources(); int passed_current = false; foreach(Resource *resource, resources) { if (!passed_current && resource->Filename() != current_html_filename) { continue; } passed_current = true; html_resources.append(resource); } foreach(Resource * resource, resources) { html_resources.append(resource); if (resource->Filename() == current_html_filename) { break; } } // Search for the word. bool done_current = false; foreach (Resource *resource, html_resources) { HTMLResource *html_resource = qobject_cast(resource); if (!html_resource) { continue; } int start_pos = 0; // Reset the start to current cursor position only if this is the // first time we are in the current file. if (resource->Filename() == current_html_filename) { if (!done_current) { FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab) { start_pos = flow_tab->GetCursorPosition(); } } done_current = true; } QString text = html_resource->GetText(); int found_pos = HTMLSpellCheck::WordPosition(text, word, start_pos); if (found_pos >= 0) { if (resource->Filename() != current_html_filename) { OpenResourceAndWaitUntilLoaded(resource, -1, found_pos); } FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab) { flow_tab->HighlightWord(word, found_pos); break; } } } } void MainWindow::UpdateWord(QString old_word, QString new_word) { QApplication::setOverrideCursor(Qt::WaitCursor); SaveTabData(); SetViewState(MainWindow::ViewState_CodeView); QList html_resources; QList resources = GetAllHTMLResources(); foreach(Resource * resource, resources) { HTMLResource *html_resource = qobject_cast(resource); if (html_resource) { html_resources.append(html_resource); } } WordUpdates::UpdateWordInAllFiles(html_resources, old_word, new_word); m_Book->SetModified(); m_SpellcheckEditor->Refresh(); ShowMessageOnStatusBar(tr("Word updated.")); QApplication::restoreOverrideCursor(); } QList> MainWindow::GetStylesheetsMap(QList resources) { QList> stylesheet_map; QList css_resources = m_BookBrowser->AllCSSResources(); // Use the first resource to get a list of known linked stylesheets in order. QStringList checked_linked_paths = GetStylesheetsAlreadyLinked(resources.at(0)); // Then only consider them included if every selected resource includes // the same stylesheets in the same order. foreach(Resource * valid_resource, resources) { QStringList linked_paths = GetStylesheetsAlreadyLinked(valid_resource); foreach(QString path, checked_linked_paths) { if (!linked_paths.contains(path)) { checked_linked_paths.removeOne(path); } } } // Save the paths included in all resources in order foreach(QString path, checked_linked_paths) { stylesheet_map.append(std::make_pair(path, true)); } // Save all the remaining paths and mark them not included foreach(Resource * resource, css_resources) { QString pathname = "../" + resource->GetRelativePathToOEBPS(); if (!checked_linked_paths.contains(pathname)) { stylesheet_map.append(std::make_pair(pathname, false)); } } return stylesheet_map; } QStringList MainWindow::GetStylesheetsAlreadyLinked(Resource *resource) { HTMLResource *html_resource = qobject_cast(resource); QStringList linked_stylesheets; QStringList existing_stylesheets; foreach(Resource * css_resource, m_BookBrowser->AllCSSResources()) { //existing_stylesheets.append( css_resource->Filename() ); existing_stylesheets.append("../" + css_resource->GetRelativePathToOEBPS()); } foreach(QString pathname, html_resource->GetLinkedStylesheets()) { pathname = Utility::URLDecodePath(pathname); // Only list the stylesheet if it exists in the book if (existing_stylesheets.contains(pathname)) { linked_stylesheets.append(pathname); } } return linked_stylesheets; } void MainWindow::RemoveResources(QList resources) { // work around Qt bug when deleting png images on page shown by both // BookView and Preview by temporarily hiding the PreviewWindow bool pw_showing = m_PreviewWindow->IsVisible(); if ((pw_showing) && (m_ViewState == MainWindow::ViewState_BookView)) { m_PreviewWindow->hide(); } // Provide the open tab list to ensure one tab stays open if (resources.count() > 0) { m_BookBrowser->RemoveResources(m_TabManager->GetTabResources(), resources); } else { m_BookBrowser->RemoveSelection(m_TabManager->GetTabResources()); } // check if user deleted the html resource last shown in Preview // and if removed update Preview's cache resource, text, and location QList current_resources = m_Book->GetFolderKeeper()->GetResourceListByType(Resource::HTMLResourceType); if (!current_resources.contains(m_PreviousHTMLResource)) { m_PreviousHTMLResource = NULL; m_PreviousHTMLText = ""; m_PreviousHTMLLocation = QList(); } if ((pw_showing) && !m_PreviewWindow->IsVisible()) { m_PreviewWindow->show(); } ShowMessageOnStatusBar(tr("File(s) deleted.")); } void MainWindow::EditTOCDialog() { SaveTabData(); QList resources = GetAllHTMLResources() + m_BookBrowser->AllMediaResources(); EditTOC toc(m_Book, resources, this); if (toc.exec() != QDialog::Accepted) { ShowMessageOnStatusBar(tr("Edit Table of Contents cancelled.")); return; } m_Book.data()->SetModified(); ShowMessageOnStatusBar(tr("Table Of Contents edited.")); } // For epub2 this set the NCX for epub3 this sets the Nac TOC section void MainWindow::GenerateToc() { SaveTabData(); QList resources = GetAllHTMLResources(); if (resources.isEmpty()) { return; } bool is_headings_changed = false; { HeadingSelector toc(m_Book, this); if (toc.exec() != QDialog::Accepted) { ShowMessageOnStatusBar(tr("Generate TOC cancelled.")); return; } is_headings_changed = toc.IsBookChanged(); } QApplication::setOverrideCursor(Qt::WaitCursor); bool is_toc_changed = false; QString version = m_Book->GetConstOPF()->GetEpubVersion(); if (version.startsWith('3')) { NavProcessor navproc(m_Book->GetOPF()->GetNavResource()); is_toc_changed = navproc.GenerateTOCFromBookContents(m_Book.data()); } else { // Regenerate the NCX regardless of whether headings were changed, in case the user erased it. is_toc_changed = m_Book->GetNCX()->GenerateNCXFromBookContents(m_Book.data()); } if (is_headings_changed || is_toc_changed) { // Reload the current tab to see visual impact if user changed heading level(s) // It might not have been the current tab, but what the heck, possible user has the NCX open even. ResourcesAddedOrDeleted(); m_Book.data()->SetModified(); ShowMessageOnStatusBar(tr("Table Of Contents generated.")); } else { ShowMessageOnStatusBar(tr("No Table Of Contents changes were necessary.")); } QApplication::restoreOverrideCursor(); } void MainWindow::CreateHTMLTOC() { SaveTabData(); QApplication::setOverrideCursor(Qt::WaitCursor); bool found_css = false; foreach(Resource *resource, m_BookBrowser->AllCSSResources()) { if (resource->Filename() == SGC_TOC_CSS_FILENAME) { found_css = true; } } // If HTML TOC CSS file does not exist look for a default file // in preferences directory and if none create one. if (!found_css) { QString css_path = Utility::DefinePrefsDir() + "/" + SGC_TOC_CSS_FILENAME; if (QFile::exists(css_path)) { // Need to make sure InitialLoad is done in newly added css resource object to prevent // blank css issues after a save to disk Resource * resource = m_Book->GetFolderKeeper()->AddContentFileToFolder(css_path); CSSResource *css_resource = qobject_cast (resource); css_resource->InitialLoad(); } else { m_BookBrowser->CreateHTMLTOCCSSFile(); } } HTMLResource *tocResource = NULL; HTMLResource *navResource = m_Book->GetOPF()->GetNavResource(); QList htmlResources; // Turn the list of Resources that are really HTMLResources to a real list // of HTMLResources. QList resources = GetAllHTMLResources(); foreach(Resource * resource, resources) { HTMLResource *htmlResource = qobject_cast(resource); if (htmlResource) { // prevent the nav resource from being chosen or used if (htmlResource != navResource) { htmlResources.append(htmlResource); // Check if this is an existing toc file. if (m_Book->GetOPF()->GetGuideSemanticCodeForResource(htmlResource) == "toc") { tocResource = htmlResource; } else if (resource->Filename() == HTML_TOC_FILE && tocResource == NULL) { tocResource = htmlResource; } } } } // Close the tab so the focus saving doesn't overwrite the text were // replacing in the resource. if (tocResource != NULL) { m_TabManager->CloseTabForResource(tocResource); } // Create the an HTMLResource for the TOC if it doesn't exit. if (tocResource == NULL) { tocResource = m_Book->CreateEmptyHTMLFile(); tocResource->RenameTo(HTML_TOC_FILE); htmlResources.insert(0, tocResource); m_Book->GetOPF()->UpdateSpineOrder(htmlResources); } TOCHTMLWriter toc(m_TableOfContents->GetRootEntry()); QString version = tocResource->GetEpubVersion(); tocResource->SetText(toc.WriteXML(version)); // Setting a semantic on a resource that already has it set will remove the semantic. // Unless you pass toggle as false as the final parameter // In epub3 only the nav should be marked as the toc so do not set this landmark in the nav m_Book->GetOPF()->AddGuideSemanticCode(tocResource, "toc", false); m_Book->SetModified(); m_BookBrowser->Refresh(); OpenResource(tocResource); QApplication::restoreOverrideCursor(); } void MainWindow::ChangeCasing(int casing_mode) { ContentTab *tab = GetCurrentContentTab(); if (tab == NULL) { return; } Utility::Casing casing; switch (casing_mode) { case Utility::Casing_Lowercase: { casing = Utility::Casing_Lowercase; break; } case Utility::Casing_Uppercase: { casing = Utility::Casing_Uppercase; break; } case Utility::Casing_Titlecase: { casing = Utility::Casing_Titlecase; break; } case Utility::Casing_Capitalize: { casing = Utility::Casing_Capitalize; break; } default: return; } tab->ChangeCasing(casing); } void MainWindow::MarkSelection() { ContentTab *tab = GetCurrentContentTab(); if (tab == NULL) { return; } bool marked = tab->MarkSelection(); m_FindReplace->ShowHideMarkedText(marked); if (marked) { ShowMessageOnStatusBar(tr("Text selection marked.")); } else { ShowMessageOnStatusBar(tr("Text selection unmarked.")); } } void MainWindow::ClearMarkedText(ContentTab *old_tab) { bool cleared = false; if (old_tab) { cleared = old_tab->ClearMarkedText(); } else { ContentTab *tab = GetCurrentContentTab(); if (tab == NULL) { return; } cleared = tab->ClearMarkedText(); } if (cleared) { // Only show message if there was a selection to clear. ShowMessageOnStatusBar(tr("Text selection unmarked.")); } m_FindReplace->ShowHideMarkedText(false); } void MainWindow::ToggleViewState() { ContentTab *tab = GetCurrentContentTab(); if (tab == NULL) { return; } Resource::ResourceType type = tab->GetLoadedResource()->Type(); if (type == Resource::HTMLResourceType) { if (m_ViewState == MainWindow::ViewState_CodeView) { SetViewState(MainWindow::ViewState_BookView); } else { SetViewState(MainWindow::ViewState_CodeView); } } UpdateBrowserSelectionToTab(); } void MainWindow::BookView() { SetViewState(MainWindow::ViewState_BookView); UpdateBrowserSelectionToTab(); } void MainWindow::CodeView() { SetViewState(MainWindow::ViewState_CodeView); UpdateBrowserSelectionToTab(); } MainWindow::ViewState MainWindow::GetViewState() { return m_ViewState; } void MainWindow::AnyCodeView() { SetViewState(MainWindow::ViewState_CodeView); } void MainWindow::SearchEditorDialog(SearchEditorModel::searchEntry *search_entry) { // non-modal dialog m_SearchEditor->show(); m_SearchEditor->raise(); m_SearchEditor->activateWindow(); if (search_entry) { m_SearchEditor->AddEntry(search_entry->is_group, search_entry, false); } } void MainWindow::ClipEditorDialog(ClipEditorModel::clipEntry *clip_entry) { // non-modal dialog m_ClipEditor->show(); m_ClipEditor->raise(); m_ClipEditor->activateWindow(); if (clip_entry) { m_ClipEditor->AddEntry(clip_entry->is_group, clip_entry, false); } } void MainWindow::CloseAllTabs() { m_TabManager->CloseAllTabs(); } void MainWindow::SaveTabData() { m_TabManager->SaveTabData(); } void MainWindow::MetaEditorDialog() { MetaEditor medit(this); if (medit.exec() != QDialog::Accepted) { ShowMessageOnStatusBar(tr("Metadata Editor cancelled.")); return; } ShowMessageOnStatusBar(tr("Metadata edited.")); m_Book->SetModified(); } void MainWindow::UserGuide() { QDesktopServices::openUrl(QUrl(USER_GUIDE_URL)); } void MainWindow::Donate() { QDesktopServices::openUrl(QUrl(DONATE)); } void MainWindow::SigilWebsite() { QDesktopServices::openUrl(QUrl(SIGIL_WEBSITE)); } void MainWindow::AboutDialog() { About about(this); about.exec(); } void MainWindow::PreferencesDialog() { Preferences preferences(this); preferences.exec(); if (preferences.isReloadTabsRequired()) { m_TabManager->ReopenTabs(m_ViewState); } else if (preferences.isRefreshSpellingHighlightingRequired()) { RefreshSpellingHighlighting(); // Make sure menu state is set SettingsStore settings; ui.actionAutoSpellCheck->setChecked(settings.spellCheck()); } if (preferences.isRefreshClipHistoryLimitRequired()) { SettingsStore settings; m_ClipboardHistoryLimit = settings.clipboardHistoryLimit(); } if (m_SelectCharacter->isVisible()) { // To ensure any font size changes are immediately applied. m_SelectCharacter->show(); } updateToolTipsOnPluginIcons(); } void MainWindow::ManagePluginsDialog() { Preferences preferences(this); preferences.makeActive(Preferences::PluginsPrefs); preferences.exec(); // other preferences may have been changed as well if (preferences.isReloadTabsRequired()) { m_TabManager->ReopenTabs(m_ViewState); } else if (preferences.isRefreshSpellingHighlightingRequired()) { RefreshSpellingHighlighting(); // Make sure menu state is set SettingsStore settings; ui.actionAutoSpellCheck->setChecked(settings.spellCheck()); } if (preferences.isRefreshClipHistoryLimitRequired()) { SettingsStore settings; m_ClipboardHistoryLimit = settings.clipboardHistoryLimit(); } if (m_SelectCharacter->isVisible()) { // To ensure any font size changes are immediately applied. m_SelectCharacter->show(); } updateToolTipsOnPluginIcons(); } void MainWindow::updateToolTipsOnPluginIcons() { SettingsStore ss; QStringList namemap = ss.pluginMap(); QString pname1 = tr("RunPlugin1"); QString pname2 = tr("RunPlugin2"); QString pname3 = tr("RunPlugin3"); QString pname4 = tr("RunPlugin4"); QString pname5 = tr("RunPlugin5"); if (namemap.count() > 0) pname1 = namemap.at(0); if (namemap.count() > 1) pname2 = namemap.at(1); if (namemap.count() > 2) pname3 = namemap.at(2); if (namemap.count() > 3) pname4 = namemap.at(3); if (namemap.count() > 4) pname5 = namemap.at(4); ui.actionPlugin1->setToolTip(pname1); ui.actionPlugin2->setToolTip(pname2); ui.actionPlugin3->setToolTip(pname3); ui.actionPlugin4->setToolTip(pname4); ui.actionPlugin5->setToolTip(pname5); } void MainWindow::WellFormedCheckEpub() { m_ValidationResultsView->ValidateCurrentBook(); } bool MainWindow::CharLessThan(const QChar &s1, const QChar &s2) { return s1 < s2; } void MainWindow::ValidateStylesheetsWithW3C() { SaveTabData(); QList css_resources = m_BookBrowser->AllCSSResources(); if (css_resources.isEmpty()) { ShowMessageOnStatusBar(tr("This EPUB does not contain any CSS stylesheets to validate.")); return; } foreach(Resource * resource, css_resources) { CSSResource *css_resource = qobject_cast(resource); css_resource->ValidateStylesheetWithW3C(); } } void MainWindow::ChangeSignalsWhenTabChanges(ContentTab *old_tab, ContentTab *new_tab) { BreakTabConnections(old_tab); MakeTabConnections(new_tab); // Clear selection if the tab changed. ClearMarkedText(old_tab); } void MainWindow::SetViewState(MainWindow::ViewState view_state) { // This function is called when: // 1. Invoked from OpenResource() to open a new tab or programmatically switch to existing one. // 2. When the user toggles view state, or uses the specific view state icons on toolbar // 3. To return to a bookmarked location // OpenResource() ensures that any attempt to open a tab with a viewstate of "Unknown" // will instead inherit the current MainWindow setting for the last FlowTab used. // The only other places that call this function directly all use the m_ViewState // value for view_state parameter, hence can never be "Unknown" in this function. Q_ASSERT(view_state != MainWindow::ViewState_Unknown); bool set_tab_state = m_ViewState != view_state; m_ViewState = view_state; UpdateViewState(set_tab_state); } void MainWindow::UpdateViewState(bool set_tab_state) { ContentTab *tab = GetCurrentContentTab(); if (tab == NULL) { return; } Resource::ResourceType type = tab->GetLoadedResource()->Type(); if (type == Resource::HTMLResourceType) { if (set_tab_state) { FlowTab *ftab = dynamic_cast(tab); if (ftab) { bool view_state_changed = ftab->SetViewState(m_ViewState); // We cannot reliably use Qt focus events to determine whether or // not to reload the contents of a tab. ftab->ReloadTabIfPending(); if (!view_state_changed) { // Either we were already in this view, the data is not well formed or tab is still loading. // We must force the UI to be in the state that this tab is now in. m_ViewState = ftab->GetViewState(); } } ClearMarkedText(); } if (m_ViewState == MainWindow::ViewState_CodeView) { SetStateActionsCodeView(); } else { m_ViewState = MainWindow::ViewState_BookView; SetStateActionsBookView(); } } else if (type == Resource::CSSResourceType) { SetStateActionsCSSView(); } else if (type == Resource::XMLResourceType || type == Resource::OPFResourceType || type == Resource::NCXResourceType || type == Resource::MiscTextResourceType || type == Resource::SVGResourceType || type == Resource::TextResourceType) { SetStateActionsRawView(); } else { SetStateActionsStaticView(); } } void MainWindow::UpdateUIOnTabChanges() { ContentTab *tab = m_TabManager->GetCurrentContentTab(); if (tab == NULL) { return; } // Set enabled state based on selection change ui.actionCut ->setEnabled(tab->CutEnabled()); ui.actionCopy ->setEnabled(tab->CopyEnabled()); ui.actionPaste ->setEnabled(tab->PasteEnabled()); ui.actionDeleteLine ->setEnabled(tab->DeleteLineEnabled()); ui.actionAddToIndex ->setEnabled(tab->AddToIndexEnabled()); ui.actionMarkForIndex ->setEnabled(tab->MarkForIndexEnabled()); ui.actionRemoveFormatting ->setEnabled(tab->RemoveFormattingEnabled()); // Set whether icons are checked ui.actionBold ->setChecked(tab->BoldChecked()); ui.actionItalic ->setChecked(tab->ItalicChecked()); ui.actionUnderline ->setChecked(tab->UnderlineChecked()); ui.actionStrikethrough ->setChecked(tab->StrikethroughChecked()); ui.actionSubscript ->setChecked(tab->SubscriptChecked()); ui.actionSuperscript ->setChecked(tab->SuperscriptChecked()); ui.actionAlignLeft ->setChecked(tab->AlignLeftChecked()); ui.actionAlignRight ->setChecked(tab->AlignRightChecked()); ui.actionAlignCenter ->setChecked(tab->AlignCenterChecked()); ui.actionAlignJustify ->setChecked(tab->AlignJustifyChecked()); ui.actionInsertBulletedList ->setChecked(tab->BulletListChecked()); ui.actionInsertNumberedList ->setChecked(tab->NumberListChecked()); // State of zoom controls depends on current tab/view float zoom_factor = GetZoomFactor(); UpdateZoomLabel(zoom_factor); UpdateZoomSlider(zoom_factor); UpdateCursorPositionLabel(tab->GetCursorLine(), tab->GetCursorColumn()); SelectEntryOnHeadingToolbar(tab->GetCaretElementName()); } void MainWindow::UpdateUIWhenTabsSwitch() { ContentTab *tab = m_TabManager->GetCurrentContentTab(); if (tab == NULL) { return; } tab->UpdateDisplay(); UpdateViewState(); ClearMarkedText(); } void MainWindow::UpdateUIOnTabCountChange() { ui.actionNextTab ->setEnabled(m_TabManager->GetTabCount() > 1); ui.actionPreviousTab ->setEnabled(m_TabManager->GetTabCount() > 1); ui.actionCloseTab ->setEnabled(m_TabManager->GetTabCount() > 1); ui.actionCloseOtherTabs->setEnabled(m_TabManager->GetTabCount() > 1); } void MainWindow::SetStateActionsBookView() { ui.actionBookView->setChecked(true); ui.actionCodeView->setChecked(false); ui.actionBookView->setEnabled(true); ui.actionCodeView->setEnabled(true); ui.actionPrintPreview->setEnabled(true); ui.actionPrint->setEnabled(true); ui.actionSplitSection->setEnabled(true); ui.actionInsertSGFSectionMarker->setEnabled(true); ui.actionInsertFile->setEnabled(true); ui.actionInsertSpecialCharacter->setEnabled(true); ui.actionInsertId->setEnabled(true); ui.actionInsertHyperlink->setEnabled(true); ui.actionInsertClosingTag->setEnabled(false); ui.actionUndo->setEnabled(true); ui.actionRedo->setEnabled(true); ui.actionPasteClipboardHistory->setEnabled(true); ui.actionBold ->setEnabled(true); ui.actionItalic ->setEnabled(true); ui.actionUnderline ->setEnabled(true); ui.actionStrikethrough->setEnabled(true); ui.actionSubscript ->setEnabled(true); ui.actionSuperscript ->setEnabled(true); ui.actionAlignLeft ->setEnabled(true); ui.actionAlignCenter ->setEnabled(true); ui.actionAlignRight ->setEnabled(true); ui.actionAlignJustify->setEnabled(true); ui.actionDecreaseIndent->setEnabled(true); ui.actionIncreaseIndent->setEnabled(true); ui.actionTextDirectionLTR ->setEnabled(true); ui.actionTextDirectionRTL ->setEnabled(true); ui.actionTextDirectionDefault->setEnabled(true); ui.actionInsertBulletedList->setEnabled(true); ui.actionInsertNumberedList->setEnabled(true); ui.actionShowTag->setEnabled(true); ui.actionRemoveFormatting->setEnabled(true); ui.menuHeadings->setEnabled(true); ui.actionHeading1->setEnabled(true); ui.actionHeading2->setEnabled(true); ui.actionHeading3->setEnabled(true); ui.actionHeading4->setEnabled(true); ui.actionHeading5->setEnabled(true); ui.actionHeading6->setEnabled(true); ui.actionHeadingNormal->setEnabled(true); ui.actionCasingLowercase ->setEnabled(true); ui.actionCasingUppercase ->setEnabled(true); ui.actionCasingTitlecase ->setEnabled(true); ui.actionCasingCapitalize ->setEnabled(true); ui.actionFind->setEnabled(true); ui.actionFindNext->setEnabled(true); ui.actionFindPrevious->setEnabled(true); ui.actionReplaceCurrent->setEnabled(true); ui.actionReplaceNext->setEnabled(true); ui.actionReplacePrevious->setEnabled(true); ui.actionReplaceAll->setEnabled(true); ui.actionCount->setEnabled(true); ui.actionMarkSelection->setEnabled(false); ui.menuSearchCurrentFile->setEnabled(true); ui.actionFindNextInFile->setEnabled(true); ui.actionReplaceNextInFile->setEnabled(true); ui.actionReplaceAllInFile->setEnabled(true); ui.actionCountInFile->setEnabled(true); ui.actionGoToLine->setEnabled(false); ui.actionGoToLinkOrStyle->setEnabled(false); ui.actionAddMisspelledWord->setEnabled(false); ui.actionIgnoreMisspelledWord->setEnabled(false); ui.actionAutoSpellCheck->setEnabled(false); UpdateUIOnTabChanges(); m_FindReplace->ShowHide(); } void MainWindow::SetStateActionsCodeView() { ui.actionBookView->setChecked(false); ui.actionCodeView->setChecked(true); ui.actionBookView->setEnabled(true); ui.actionCodeView->setEnabled(true); ui.actionPrintPreview->setEnabled(true); ui.actionPrint->setEnabled(true); ui.actionSplitSection->setEnabled(true); ui.actionInsertSGFSectionMarker->setEnabled(true); ui.actionInsertFile->setEnabled(true); ui.actionInsertSpecialCharacter->setEnabled(true); ui.actionInsertId->setEnabled(true); ui.actionInsertHyperlink->setEnabled(true); ui.actionInsertClosingTag->setEnabled(true); ui.actionUndo->setEnabled(true); ui.actionRedo->setEnabled(true); ui.actionPasteClipboardHistory->setEnabled(true); ui.actionBold ->setEnabled(true); ui.actionItalic ->setEnabled(true); ui.actionUnderline ->setEnabled(true); ui.actionStrikethrough->setEnabled(true); ui.actionSubscript ->setEnabled(true); ui.actionSuperscript ->setEnabled(true); ui.actionAlignLeft ->setEnabled(true); ui.actionAlignCenter ->setEnabled(true); ui.actionAlignRight ->setEnabled(true); ui.actionAlignJustify->setEnabled(true); ui.actionDecreaseIndent->setEnabled(false); ui.actionIncreaseIndent->setEnabled(false); ui.actionTextDirectionLTR ->setEnabled(true); ui.actionTextDirectionRTL ->setEnabled(true); ui.actionTextDirectionDefault->setEnabled(true); ui.actionInsertBulletedList->setEnabled(false); ui.actionInsertNumberedList->setEnabled(false); ui.actionShowTag->setEnabled(false); ui.actionRemoveFormatting->setEnabled(true); ui.menuHeadings->setEnabled(true); ui.actionHeading1->setEnabled(true); ui.actionHeading2->setEnabled(true); ui.actionHeading3->setEnabled(true); ui.actionHeading4->setEnabled(true); ui.actionHeading5->setEnabled(true); ui.actionHeading6->setEnabled(true); ui.actionHeadingNormal->setEnabled(true); ui.actionCasingLowercase ->setEnabled(true); ui.actionCasingUppercase ->setEnabled(true); ui.actionCasingTitlecase ->setEnabled(true); ui.actionCasingCapitalize ->setEnabled(true); ui.actionFind->setEnabled(true); ui.actionFindNext->setEnabled(true); ui.actionFindPrevious->setEnabled(true); ui.actionReplaceCurrent->setEnabled(true); ui.actionReplaceNext->setEnabled(true); ui.actionReplacePrevious->setEnabled(true); ui.actionReplaceAll->setEnabled(true); ui.actionCount->setEnabled(true); ui.actionMarkSelection->setEnabled(true); ui.menuSearchCurrentFile->setEnabled(true); ui.actionFindNextInFile->setEnabled(true); ui.actionReplaceNextInFile->setEnabled(true); ui.actionReplaceAllInFile->setEnabled(true); ui.actionCountInFile->setEnabled(true); ui.actionGoToLine->setEnabled(true); ui.actionGoToLinkOrStyle->setEnabled(true); ui.actionAddMisspelledWord->setEnabled(true); ui.actionIgnoreMisspelledWord->setEnabled(true); ui.actionAutoSpellCheck->setEnabled(true); UpdateUIOnTabChanges(); m_FindReplace->ShowHide(); } void MainWindow::SetStateActionsCSSView() { SetStateActionsRawView(); ui.actionBold ->setEnabled(true); ui.actionItalic ->setEnabled(true); ui.actionUnderline ->setEnabled(true); ui.actionStrikethrough->setEnabled(true); ui.actionAlignLeft ->setEnabled(true); ui.actionAlignCenter ->setEnabled(true); ui.actionAlignRight ->setEnabled(true); ui.actionAlignJustify->setEnabled(true); ui.actionTextDirectionLTR ->setEnabled(true); ui.actionTextDirectionRTL ->setEnabled(true); ui.actionTextDirectionDefault->setEnabled(true); UpdateUIOnTabChanges(); } void MainWindow::SetStateActionsRawView() { ui.actionBookView->setChecked(false); ui.actionCodeView->setChecked(false); ui.actionBookView->setEnabled(false); ui.actionCodeView->setEnabled(false); ui.actionPrintPreview->setEnabled(true); ui.actionPrint->setEnabled(true); ui.actionSplitSection->setEnabled(false); ui.actionInsertSGFSectionMarker->setEnabled(false); ui.actionInsertFile->setEnabled(false); ui.actionInsertSpecialCharacter->setEnabled(true); ui.actionInsertId->setEnabled(false); ui.actionInsertHyperlink->setEnabled(false); ui.actionInsertClosingTag->setEnabled(false); ui.actionUndo->setEnabled(true); ui.actionRedo->setEnabled(true); ui.actionPasteClipboardHistory->setEnabled(true); ui.actionBold ->setEnabled(false); ui.actionItalic ->setEnabled(false); ui.actionUnderline ->setEnabled(false); ui.actionStrikethrough->setEnabled(false); ui.actionSubscript ->setEnabled(false); ui.actionSuperscript ->setEnabled(false); ui.actionAlignLeft ->setEnabled(false); ui.actionAlignCenter ->setEnabled(false); ui.actionAlignRight ->setEnabled(false); ui.actionAlignJustify->setEnabled(false); ui.actionDecreaseIndent->setEnabled(false); ui.actionIncreaseIndent->setEnabled(false); ui.actionTextDirectionLTR ->setEnabled(false); ui.actionTextDirectionRTL ->setEnabled(false); ui.actionTextDirectionDefault->setEnabled(false); ui.actionInsertBulletedList->setEnabled(false); ui.actionInsertNumberedList->setEnabled(false); ui.actionShowTag->setEnabled(false); ui.actionRemoveFormatting->setEnabled(false); ui.menuHeadings->setEnabled(false); ui.actionHeading1->setEnabled(false); ui.actionHeading2->setEnabled(false); ui.actionHeading3->setEnabled(false); ui.actionHeading4->setEnabled(false); ui.actionHeading5->setEnabled(false); ui.actionHeading6->setEnabled(false); ui.actionHeadingNormal->setEnabled(false); ui.actionCasingLowercase ->setEnabled(true); ui.actionCasingUppercase ->setEnabled(true); ui.actionCasingTitlecase ->setEnabled(true); ui.actionCasingCapitalize ->setEnabled(true); ui.actionFind->setEnabled(true); ui.actionFindNext->setEnabled(true); ui.actionFindPrevious->setEnabled(true); ui.actionReplaceCurrent->setEnabled(true); ui.actionReplaceNext->setEnabled(true); ui.actionReplacePrevious->setEnabled(true); ui.actionReplaceAll->setEnabled(true); ui.actionCount->setEnabled(true); ui.actionMarkSelection->setEnabled(true); ui.menuSearchCurrentFile->setEnabled(true); ui.actionFindNextInFile->setEnabled(true); ui.actionReplaceNextInFile->setEnabled(true); ui.actionReplaceAllInFile->setEnabled(true); ui.actionCountInFile->setEnabled(true); ui.actionGoToLine->setEnabled(true); ui.actionGoToLinkOrStyle->setEnabled(false); ui.actionAddMisspelledWord->setEnabled(false); ui.actionIgnoreMisspelledWord->setEnabled(false); ui.actionAutoSpellCheck->setEnabled(false); UpdateUIOnTabChanges(); m_FindReplace->ShowHide(); } void MainWindow::SetStateActionsStaticView() { ui.actionBookView->setChecked(false); ui.actionCodeView->setChecked(false); ui.actionBookView->setEnabled(false); ui.actionCodeView->setEnabled(false); ui.actionPrintPreview->setEnabled(true); ui.actionPrint->setEnabled(true); ui.actionSplitSection->setEnabled(false); ui.actionInsertSGFSectionMarker->setEnabled(false); ui.actionInsertFile->setEnabled(false); ui.actionInsertSpecialCharacter->setEnabled(false); ui.actionInsertId->setEnabled(false); ui.actionInsertHyperlink->setEnabled(false); ui.actionInsertClosingTag->setEnabled(false); ui.actionUndo->setEnabled(false); ui.actionRedo->setEnabled(false); ui.actionPasteClipboardHistory->setEnabled(false); ui.actionBold ->setEnabled(false); ui.actionItalic ->setEnabled(false); ui.actionUnderline ->setEnabled(false); ui.actionStrikethrough->setEnabled(false); ui.actionSubscript ->setEnabled(false); ui.actionSuperscript ->setEnabled(false); ui.actionAlignLeft ->setEnabled(false); ui.actionAlignCenter ->setEnabled(false); ui.actionAlignRight ->setEnabled(false); ui.actionAlignJustify->setEnabled(false); ui.actionDecreaseIndent->setEnabled(false); ui.actionIncreaseIndent->setEnabled(false); ui.actionTextDirectionLTR ->setEnabled(false); ui.actionTextDirectionRTL ->setEnabled(false); ui.actionTextDirectionDefault->setEnabled(false); ui.actionInsertBulletedList->setEnabled(false); ui.actionInsertNumberedList->setEnabled(false); ui.actionShowTag->setEnabled(false); ui.actionRemoveFormatting->setEnabled(false); ui.menuHeadings->setEnabled(false); ui.actionHeading1->setEnabled(false); ui.actionHeading2->setEnabled(false); ui.actionHeading3->setEnabled(false); ui.actionHeading4->setEnabled(false); ui.actionHeading5->setEnabled(false); ui.actionHeading6->setEnabled(false); ui.actionHeadingNormal->setEnabled(false); ui.actionCasingLowercase ->setEnabled(false); ui.actionCasingUppercase ->setEnabled(false); ui.actionCasingTitlecase ->setEnabled(false); ui.actionCasingCapitalize ->setEnabled(false); ui.actionFind->setEnabled(false); ui.actionFindNext->setEnabled(false); ui.actionFindPrevious->setEnabled(false); ui.actionReplaceCurrent->setEnabled(false); ui.actionReplaceNext->setEnabled(false); ui.actionReplacePrevious->setEnabled(false); ui.actionReplaceAll->setEnabled(false); ui.actionCount->setEnabled(false); ui.actionMarkSelection->setEnabled(false); ui.menuSearchCurrentFile->setEnabled(false); ui.actionFindNextInFile->setEnabled(false); ui.actionReplaceNextInFile->setEnabled(false); ui.actionReplaceAllInFile->setEnabled(false); ui.actionCountInFile->setEnabled(false); ui.actionGoToLine->setEnabled(false); ui.actionGoToLinkOrStyle->setEnabled(false); ui.actionAddMisspelledWord->setEnabled(false); ui.actionIgnoreMisspelledWord->setEnabled(false); ui.actionAutoSpellCheck->setEnabled(false); UpdateUIOnTabChanges(); // Only hide window, don't save closed state since its temporary m_FindReplace->hide(); } void MainWindow::SetupPreviewTimer() { m_PreviewTimer.setSingleShot(true); m_PreviewTimer.setInterval(1000); connect(&m_PreviewTimer, SIGNAL(timeout()), this, SLOT(UpdatePreview())); } void MainWindow::UpdatePreviewRequest() { if (m_PreviewTimer.isActive()) { m_PreviewTimer.stop(); } m_PreviewTimer.start(); } void MainWindow::UpdatePreviewCSSRequest() { m_SaveCSS = true; UpdatePreviewRequest(); } void MainWindow::UpdatePreview() { m_PreviewTimer.stop(); QString text; QList location; HTMLResource *html_resource; ContentTab *tab = GetCurrentContentTab(); if (tab != NULL) { // Save CSS if update requested from CSS tab if (m_SaveCSS) { m_SaveCSS = false; tab->SaveTabContent(); } html_resource = qobject_cast(tab->GetLoadedResource()); // handles all cases of non-html resource in front tab if (!html_resource) { // note: must handle case of m_PreviousHTMLResource being deleted by user // see RemoveResources() html_resource = m_PreviousHTMLResource; } else { m_PreviousHTMLResource = NULL; } if (html_resource) { FlowTab *flow_tab = qobject_cast(tab); if (flow_tab) { // Make sure the document is loaded. As soon as the views are created // signals are sent that it has changed which requests Preview to update // so these need to be ignored. Once the document is loaded it signals again. if (!flow_tab->IsLoadingFinished()) { return; } text = flow_tab->GetText(); location = flow_tab->GetCaretLocation(); } else { text = m_PreviousHTMLText; if (m_PreviousHTMLResource) { location = m_PreviewWindow->GetCaretLocation(); } else { location = m_PreviousHTMLLocation; } } m_PreviousHTMLResource = html_resource; m_PreviousHTMLText = text; m_PreviousHTMLLocation = location; m_PreviewWindow->UpdatePage(html_resource->GetFullPath(), text, location); } } } void MainWindow::InspectHTML() { m_PreviewWindow->show(); m_PreviewWindow->raise(); UpdatePreview(); } void MainWindow::UpdateCursorPositionLabel(int line, int column) { if (line > 0 && column > 0) { const QString l = QString::number(line); const QString c = QString::number(column); m_lbCursorPosition->setText(tr("Line: %1, Col: %2").arg(l).arg(c)); m_lbCursorPosition->show(); } else { m_lbCursorPosition->clear(); m_lbCursorPosition->hide(); } } void MainWindow::SliderZoom(int slider_value) { ContentTab *tab = m_TabManager->GetCurrentContentTab(); if (tab == NULL) { return; } float new_zoom_factor = SliderRangeToZoomFactor(slider_value); float current_zoom_factor = GetZoomFactor(); // We try to prevent infinite loops... if (!qFuzzyCompare(new_zoom_factor, current_zoom_factor)) { ZoomByFactor(new_zoom_factor); } } void MainWindow::UpdateZoomSlider(float new_zoom_factor) { m_slZoomSlider->setValue(ZoomFactorToSliderRange(new_zoom_factor)); } void MainWindow::UpdateZoomLabel(int slider_value) { float zoom_factor = SliderRangeToZoomFactor(slider_value); UpdateZoomLabel(zoom_factor); } void MainWindow::SetDefaultViewState() { // Default will be BookView unless there is a persisted value. SettingsStore settings; int view_state_value = settings.viewState(); switch (view_state_value) { case MainWindow::ViewState_CodeView: m_ViewState = static_cast(view_state_value); break; } } void MainWindow::SetAutoSpellCheck(bool new_state) { SettingsStore settings; settings.setSpellCheck(new_state); emit SettingsChanged(); } void MainWindow::MendPrettifyHTML() { m_Book->ReformatAllHTML(false); } void MainWindow::MendHTML() { m_Book->ReformatAllHTML(true); } void MainWindow::ClearIgnoredWords() { QApplication::setOverrideCursor(Qt::WaitCursor); SpellCheck *sc = SpellCheck::instance(); sc->clearIgnoredWords(); // Need to reload any tabs to force spelling to be run again in CodeView RefreshSpellingHighlighting(); QApplication::restoreOverrideCursor(); } void MainWindow::RefreshSpellingHighlighting() { QList content_tabs = m_TabManager->GetContentTabs(); foreach(ContentTab *content_tab, content_tabs) { FlowTab *flow_tab = qobject_cast(content_tab); if (flow_tab) { flow_tab->RefreshSpellingHighlighting(); } } } void MainWindow::UpdateZoomLabel(float new_zoom_factor) { m_lbZoomLabel->setText(QString("%1% ").arg(qRound(new_zoom_factor * 100))); } void MainWindow::CreateSectionBreakOldTab(QString content, HTMLResource *originating_resource) { if (content.isEmpty()) { QMessageBox::warning(this, tr("Sigil"), tr("File cannot be split at this position.")); return; } // XXX: This should be using the mime type not the extension. if (!TEXT_EXTENSIONS.contains(QFileInfo(originating_resource->Filename()).suffix().toLower())) { QMessageBox::warning(this, tr("Sigil"), tr("Cannot split since it may not be an HTML file.")); return; } HTMLResource * nav_resource = m_Book->GetConstOPF()->GetNavResource(); if (nav_resource && nav_resource == originating_resource) { QMessageBox::warning(this, tr("Sigil"), tr("The Nav file cannot be split.")); return; } HTMLResource *html_resource = m_Book->CreateSectionBreakOriginalResource(content, originating_resource); m_BookBrowser->Refresh(); // Open the old shortened content in a new tab preceding the current one. // without grabbing focus OpenResource(html_resource, -1, -1, QString(), m_ViewState, QUrl(), true); FlowTab *flow_tab = GetCurrentFlowTab(); // We will reload the reduced content tab to ensure reflects updated resource. if (flow_tab) { flow_tab->LoadTabContent(); flow_tab->ScrollToTop(); } ShowMessageOnStatusBar(tr("Split completed.")); } void MainWindow::SplitOnSGFSectionMarkers() { QList html_resources = GetAllHTMLResources(); Resource * nav_resource = m_Book->GetConstOPF()->GetNavResource(); if (nav_resource) { html_resources.removeOne(nav_resource); } SaveTabData(); // If have the current tab is open in BV, make sure it has its content saved so it won't later overwrite a split. FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab && (flow_tab->GetViewState() == MainWindow::ViewState_BookView)) { flow_tab->SaveTabContent(); } bool done_checking_frags = false; bool ignore_frags = false; foreach(Resource * resource, html_resources) { HTMLResource *html_resource = qobject_cast(resource); if (!html_resource) { QMessageBox::warning(this, tr("Sigil"), tr("Cannot split since at least one file is not an HTML file.")); return; } // Check if data is well formed before splitting. if (!html_resource->FileIsWellFormed()) { QMessageBox::warning(this, tr("Sigil"), tr("Cannot split: %1 XML is not well formed").arg(html_resource->Filename())); return; } // XXX: This should be using the mime type not the extension. if (!TEXT_EXTENSIONS.contains(QFileInfo(html_resource->Filename()).suffix().toLower())) { QMessageBox::warning(this, tr("Sigil"), tr("Cannot split since at least one file may not be an HTML file.")); return; } // Handle warning the user about undefined url fragments. if (!done_checking_frags) { done_checking_frags = true; ignore_frags = ProceedWithUndefinedUrlFragments(); if (!ignore_frags) { break; } } } if (!ignore_frags) { return; } QApplication::setOverrideCursor(Qt::WaitCursor); QList changed_resources; foreach(Resource * resource, html_resources) { HTMLResource *html_resource = qobject_cast(resource); QStringList new_sections = html_resource->SplitOnSGFSectionMarkers(); if (!new_sections.isEmpty()) { m_Book->CreateNewSections(new_sections, html_resource); changed_resources.append(resource); } } if (changed_resources.count() > 0) { m_TabManager->ReloadTabDataForResources(changed_resources); m_BookBrowser->Refresh(); ShowMessageOnStatusBar(tr("Split completed. You may need to update the Table of Contents.")); if (flow_tab && (flow_tab->GetViewState() == MainWindow::ViewState_BookView)) { // Our focus will have been moved to the book browser. Set it there and back to do // an equivalent of "GrabFocus()" to workaround Qt setFocus() not always working. m_BookBrowser->setFocus(); flow_tab->setFocus(); } } else { ShowMessageOnStatusBar(tr("No split file markers found. Use Insert->Split Marker.")); } QApplication::restoreOverrideCursor(); } void MainWindow::ShowPasteClipboardHistoryDialog() { // We only want to show the dialog if focus is in a control that can accept its content. if (m_LastPasteTarget == NULL) { return; } m_ClipboardHistorySelector->exec(); } // Change the selected/highlighted resource to match the current tab void MainWindow::UpdateBrowserSelectionToTab() { ContentTab *tab = m_TabManager->GetCurrentContentTab(); if (tab != NULL) { m_BookBrowser->UpdateSelection(tab->GetLoadedResource()); } } void MainWindow::ReadSettings() { SettingsStore settings; ui.actionAutoSpellCheck->setChecked(settings.spellCheck()); emit SettingsChanged(); settings.beginGroup(SETTINGS_GROUP); // The size of the window and its full screen status // Due to the 4.8 bug, we restore its "normal" window size and then maximize // it afterwards (if last state was maximized) to ensure on correct screen. bool isMaximized = settings.value("maximized", false).toBool(); m_LastWindowSize = settings.value("geometry").toByteArray(); if (!m_LastWindowSize.isNull()) { restoreGeometry(m_LastWindowSize); if (isMaximized) { setWindowState(windowState() | Qt::WindowMaximized); } } // The positions of all the toolbars and dock widgets QByteArray toolbars = settings.value("toolbars").toByteArray(); if (!toolbars.isNull()) { restoreState(toolbars); } // The last folder used for saving and opening files m_LastFolderOpen = settings.value("lastfolderopen", QDir::homePath()).toString(); // The list of recent files s_RecentFiles = settings.value("recentfiles").toStringList(); m_preserveHeadingAttributes = settings.value("preserveheadingattributes", true).toBool(); SetPreserveHeadingAttributes(m_preserveHeadingAttributes); const QStringList clipboardHistory = settings.value("clipboardringhistory").toStringList(); m_ClipboardHistorySelector->LoadClipboardHistory(clipboardHistory); settings.endGroup(); m_ClipboardHistoryLimit = settings.clipboardHistoryLimit(); // Our default fonts for book view/web preview SettingsStore::BookViewAppearance bookViewAppearance = settings.bookViewAppearance(); QWebSettings *web_settings = QWebSettings::globalSettings(); web_settings->setFontSize(QWebSettings::DefaultFontSize, bookViewAppearance.font_size); web_settings->setFontFamily(QWebSettings::StandardFont, bookViewAppearance.font_family_standard); web_settings->setFontFamily(QWebSettings::SerifFont, bookViewAppearance.font_family_serif); web_settings->setFontFamily(QWebSettings::SansSerifFont, bookViewAppearance.font_family_sans_serif); } void MainWindow::WriteSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); // The size of the window and it's full screen status // This is a workaround for this bug: // Maximizing Sigil and then closing will forget the previous window size // and open it maximized on the wrong screen. // https://bugreports.qt-project.org/browse/QTBUG-21371 settings.setValue("maximized", isMaximized()); settings.setValue("geometry", m_LastWindowSize); // The positions of all the toolbars and dock widgets settings.setValue("toolbars", saveState()); // The last folders used for saving and opening files settings.setValue("lastfolderopen", m_LastFolderOpen); // The list of recent files settings.setValue("recentfiles", s_RecentFiles); settings.setValue("preserveheadingattributes", m_preserveHeadingAttributes); settings.setValue("clipboardringhistory", m_ClipboardHistorySelector->GetClipboardHistory(m_ClipboardHistoryLimit)); KeyboardShortcutManager::instance()->writeSettings(); settings.endGroup(); settings.setClipboardHistoryLimit(m_ClipboardHistoryLimit); settings.setViewState(m_ViewState); } bool MainWindow::MaybeSaveDialogSaysProceed() { // Make sure that any tabs currently about to be drawn etc get a chance to do so. // or else the process of closing/creating a new book will crash with Qt object errors. // Particularly a problem if open a large tab in Preview prior to the action // due to QWebInspector qApp->processEvents(); if (isWindowModified()) { QMessageBox::StandardButton button_pressed; button_pressed = QMessageBox::warning(this, tr("Sigil"), tr("The document has been modified.\n" "Do you want to save your changes?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel ); if (button_pressed == QMessageBox::Save) { return Save(); } else if (button_pressed == QMessageBox::Cancel) { return false; } } return true; } void MainWindow::SetNewBook(QSharedPointer new_book) { m_TabManager->CloseOtherTabs(); m_TabManager->CloseAllTabs(true); m_Book = new_book; m_BookBrowser->SetBook(m_Book); m_TableOfContents->SetBook(m_Book); m_ValidationResultsView->SetBook(m_Book); m_IndexEditor->SetBook(m_Book); m_ClipEditor->SetBook(m_Book); m_SpellcheckEditor->SetBook(m_Book); SpellCheck *sc = SpellCheck::instance(); sc->clearIgnoredWords(); ResetLinkOrStyleBookmark(); SettingsStore settings; settings.setRenameTemplate(""); connect(m_Book.data(), SIGNAL(ModifiedStateChanged(bool)), this, SLOT(setWindowModified(bool))); connect(m_Book.data(), SIGNAL(ResourceUpdatedFromDiskRequest(Resource *)), this, SLOT(ResourceUpdatedFromDisk(Resource *))); connect(m_BookBrowser, SIGNAL(ShowStatusMessageRequest(const QString &, int)), this, SLOT(ShowMessageOnStatusBar(const QString &, int))); connect(m_BookBrowser, SIGNAL(ResourcesDeleted()), this, SLOT(ResourcesAddedOrDeleted())); connect(m_BookBrowser, SIGNAL(ResourcesAdded()), this, SLOT(ResourcesAddedOrDeleted())); } void MainWindow::ResourcesAddedOrDeleted() { clearMemoryCaches(); // Make sure currently visible tab is updated immediately FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab) { flow_tab->LoadTabContent(); } } void MainWindow::CreateNewBook() { QSharedPointer new_book = QSharedPointer(new Book()); new_book->CreateEmptyHTMLFile(); QString version = new_book->GetConstOPF()->GetEpubVersion(); if (version.startsWith('3')) { HTMLResource * nav_resource = new_book->CreateEmptyNavFile(true); new_book->GetOPF()->SetNavResource(nav_resource); new_book->GetOPF()->SetItemRefLinear(nav_resource, false); } SetNewBook(new_book); new_book->SetModified(false); m_SaveACopyFilename = ""; UpdateUiWithCurrentFile(""); } bool MainWindow::LoadFile(const QString &fullfilepath, bool is_internal) { if (!Utility::IsFileReadable(fullfilepath)) { return false; } try { ImporterFactory importerFactory; // Create the new book, clean up the old one // (destructors take care of that) Importer *importer = importerFactory.GetImporter(fullfilepath); if (!importer) { throw tr("No importer for file type: %1").arg(QFileInfo(fullfilepath).suffix().toLower()); } XhtmlDoc::WellFormedError error = importer->CheckValidToLoad(); if (error.line != -1) { // Warn the user their content is invalid. Utility::DisplayStdErrorDialog(tr("The following file was not loaded due to invalid content or not well formed XML:\n\n%1 (line %2: %3)\n\nTry setting the Clean Source preference to Mend XHTML Source Code on Open and reloading the file.") .arg(QDir::toNativeSeparators(fullfilepath)) .arg(error.line) .arg(error.message)); } else { ShowMessageOnStatusBar(tr("Loading file..."), 0); m_Book->SetModified(false); SetNewBook(importer->GetBook()); // The m_IsModified state variable is set in GetBook() to indicate whether the OPF // file was invalid and had to be recreated. // Since this happens before the connections have been established, it needs to be // tested and retoggled if true in order to indicate the actual state. if (m_Book->IsModified()) { m_Book->SetModified(false); m_Book->SetModified(true); } m_SaveACopyFilename = ""; ShowMessageOnStatusBar(tr("File loaded.")); // Get any warnings - if our main window is not currently visible they will be // shown when the window is displayed. m_LastOpenFileWarnings.append(importer->GetLoadWarnings()); if (!m_IsInitialLoad) { ShowLastOpenFileWarnings(); } if (!is_internal) { // Store the folder the user opened from m_LastFolderOpen = QFileInfo(fullfilepath).absolutePath(); // Clear the last inserted file m_LastInsertedFile = ""; UpdateUiWithCurrentFile(fullfilepath); } else { UpdateUiWithCurrentFile(""); m_Book->SetModified(); } return true; } } catch (FileEncryptedWithDrm) { ShowMessageOnStatusBar(); QApplication::restoreOverrideCursor(); Utility::DisplayStdErrorDialog( tr("The creator of this file has encrypted it with DRM. " "Sigil cannot open such files.")); } catch (EPUBLoadParseError epub_load_error) { ShowMessageOnStatusBar(); QApplication::restoreOverrideCursor(); const QString errors = QString(epub_load_error.what()); Utility::DisplayStdErrorDialog( tr("Cannot load EPUB: %1").arg(QDir::toNativeSeparators(fullfilepath)), errors); } catch (const std::runtime_error &e) { ShowMessageOnStatusBar(); QApplication::restoreOverrideCursor(); Utility::DisplayExceptionErrorDialog(tr("Cannot load file %1: %2") .arg(QDir::toNativeSeparators(fullfilepath)) .arg(e.what())); } catch (QString err) { ShowMessageOnStatusBar(); QApplication::restoreOverrideCursor(); Utility::DisplayStdErrorDialog(err); } // If we got to here some sort of error occurred while loading the file // and potentially has left the GUI in a nasty state (like on initial startup) // Fallback to displaying a new book instead so GUI integrity is maintained. CreateNewBook(); return false; } void MainWindow::SetValidationResults(const QList &results) { m_ValidationResultsView->LoadResults(results); } bool MainWindow::SaveFile(const QString &fullfilepath, bool update_current_filename) { SettingsStore ss; bool not_well_formed = false; try { ShowMessageOnStatusBar(tr("Saving EPUB..."), 0); SaveTabData(); QString extension = QFileInfo(fullfilepath).suffix().toLower(); // TODO: Move to ExporterFactory and throw exception // when the user tries to save an unsupported type if (!SUPPORTED_SAVE_TYPE.contains(extension)) { ShowMessageOnStatusBar(); Utility::DisplayStdErrorDialog( tr("Sigil cannot save files of type \"%1\".\n" "Please choose a different format.") .arg(extension) ); return false; } QApplication::setOverrideCursor(Qt::WaitCursor); QList resources; Q_FOREACH(Resource * r, GetAllHTMLResources()) { HTMLResource *t = dynamic_cast(r); if (t) { resources.append(t); if (!XhtmlDoc::IsDataWellFormed(t->GetText())) { not_well_formed = true; break; } } } if (ss.cleanOn() & CLEANON_SAVE) { if (not_well_formed) { QApplication::restoreOverrideCursor(); bool auto_fix = QMessageBox::Yes == QMessageBox::warning(this, tr("Sigil"), tr("This EPUB has HTML files that are not well formed and " "your current Clean Source preferences are set to automatically mend on Save. " "Saving a file that is not well formed will cause it to be automatically " "fixed, which very rarely may result in data loss.\n\n" "Do you want to automatically mend the files before saving?"), QMessageBox::Yes|QMessageBox::No); QApplication::setOverrideCursor(Qt::WaitCursor); if (auto_fix) { CleanSource::ReformatAll(resources, CleanSource::Mend); not_well_formed = false; } } else { CleanSource::ReformatAll(resources, CleanSource::Mend); } } ExporterFactory().GetExporter(fullfilepath, m_Book)->WriteBook(); // Return the focus back to the current tab ContentTab *tab = GetCurrentContentTab(); if (tab != NULL) { tab->setFocus(); } if (update_current_filename) { m_Book->SetModified(false); UpdateUiWithCurrentFile(fullfilepath); } if (not_well_formed) { ShowMessageOnStatusBar(tr("EPUB saved, but not all HTML files are well formed.")); } else { ShowMessageOnStatusBar(tr("EPUB saved.")); } QApplication::restoreOverrideCursor(); } catch (std::runtime_error e) { ShowMessageOnStatusBar(); QApplication::restoreOverrideCursor(); Utility::DisplayExceptionErrorDialog(tr("Cannot save file %1: %2").arg(fullfilepath).arg(e.what())); return false; } return true; } void MainWindow::ZoomByStep(bool zoom_in) { ContentTab *tab = m_TabManager->GetCurrentContentTab(); if (tab == NULL) { return; } // We use a negative zoom stepping if we are zooming *out* float zoom_stepping = zoom_in ? ZOOM_STEP : - ZOOM_STEP; // If we are zooming in, we round UP; // on zoom out, we round DOWN. float rounding_helper = zoom_in ? 0.05f : - 0.05f; float current_zoom_factor = GetZoomFactor(); float rounded_zoom_factor = Utility::RoundToOneDecimal(current_zoom_factor + rounding_helper); // If the rounded value is nearly the same as the original value, // then the original was rounded to begin with and so we // add the zoom increment if (qAbs(current_zoom_factor - rounded_zoom_factor) < 0.01f) { ZoomByFactor(Utility::RoundToOneDecimal(current_zoom_factor + zoom_stepping)); } // ...otherwise we first zoom to the rounded value else { ZoomByFactor(rounded_zoom_factor); } } void MainWindow::ZoomByFactor(float new_zoom_factor) { ContentTab *tab = m_TabManager->GetCurrentContentTab(); if (tab == NULL) { return; } if (new_zoom_factor > ZOOM_MAX || new_zoom_factor < ZOOM_MIN) { return; } if (m_ZoomPreview && m_PreviewWindow->IsVisible()) { m_PreviewWindow->SetZoomFactor(new_zoom_factor); } else { tab->SetZoomFactor(new_zoom_factor); } } float MainWindow::GetZoomFactor() { if (m_ZoomPreview && m_PreviewWindow->IsVisible()) { return m_PreviewWindow->GetZoomFactor(); } else { ContentTab *tab = m_TabManager->GetCurrentContentTab(); if (tab != NULL) { return tab->GetZoomFactor(); } } return 1; } int MainWindow::ZoomFactorToSliderRange(float zoom_factor) { // We want a precise value for the 100% zoom, // so we pick up all float values near it. if (qFuzzyCompare(zoom_factor, ZOOM_NORMAL)) { return ZOOM_SLIDER_MIDDLE; } // We actually use two ranges: one for the below 100% zoom, // and one for the above 100%. This is so that the 100% mark // rests in the middle of the slider. if (zoom_factor < ZOOM_NORMAL) { double range = ZOOM_NORMAL - ZOOM_MIN; double normalized_value = zoom_factor - ZOOM_MIN; double range_proportion = normalized_value / range; return ZOOM_SLIDER_MIN + qRound(range_proportion * (ZOOM_SLIDER_MIDDLE - ZOOM_SLIDER_MIN)); } else { double range = ZOOM_MAX - ZOOM_NORMAL; double normalized_value = zoom_factor - ZOOM_NORMAL; double range_proportion = normalized_value / range; return ZOOM_SLIDER_MIDDLE + qRound(range_proportion * ZOOM_SLIDER_MIDDLE); } } float MainWindow::SliderRangeToZoomFactor(int slider_range_value) { // We want a precise value for the 100% zoom if (slider_range_value == ZOOM_SLIDER_MIDDLE) { return ZOOM_NORMAL; } // We actually use two ranges: one for the below 100% zoom, // and one for the above 100%. This is so that the 100% mark // rests in the middle of the slider. if (slider_range_value < ZOOM_SLIDER_MIDDLE) { double range = ZOOM_SLIDER_MIDDLE - ZOOM_SLIDER_MIN; double normalized_value = slider_range_value - ZOOM_SLIDER_MIN; double range_proportion = normalized_value / range; return ZOOM_MIN + range_proportion * (ZOOM_NORMAL - ZOOM_MIN); } else { double range = ZOOM_SLIDER_MAX - ZOOM_SLIDER_MIDDLE; double normalized_value = slider_range_value - ZOOM_SLIDER_MIDDLE; double range_proportion = normalized_value / range; return ZOOM_NORMAL + range_proportion * (ZOOM_MAX - ZOOM_NORMAL); } } void MainWindow::SetInsertedFileWatchResourceFile(const QString &pathname) { QString filename = QFileInfo(pathname).fileName(); try { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); m_Book->GetFolderKeeper()->WatchResourceFile(resource); } catch (ResourceDoesNotExist) { // nothing } } const QMap MainWindow::GetLoadFiltersMap() { QMap file_filters; file_filters[ "epub" ] = tr("EPUB files (*.epub)"); file_filters[ "htm" ] = tr("HTML files (*.htm *.html *.xhtml)"); file_filters[ "html" ] = tr("HTML files (*.htm *.html *.xhtml)"); file_filters[ "xhtml" ] = tr("HTML files (*.htm *.html *.xhtml)"); file_filters[ "txt" ] = tr("Text files (*.txt)"); file_filters[ "*" ] = tr("All files (*.*)"); return file_filters; } const QMap MainWindow::GetSaveFiltersMap() { QMap file_filters; file_filters[ "epub" ] = tr("EPUB file (*.epub)"); return file_filters; } void MainWindow::UpdateUiWithCurrentFile(const QString &fullfilepath) { m_CurrentFilePath = fullfilepath; m_CurrentFileName = m_CurrentFilePath.isEmpty() ? DEFAULT_FILENAME : QFileInfo(m_CurrentFilePath).fileName(); QString epubversion = m_Book->GetConstOPF()->GetEpubVersion(); // Update the titlebar setWindowTitle(tr("%1[*] - epub%2 - %3").arg(m_CurrentFileName).arg(epubversion).arg(tr("Sigil"))); if (m_CurrentFilePath.isEmpty()) { return; } // Update recent files actions const QString nativeFilePath = QDir::toNativeSeparators(m_CurrentFilePath); s_RecentFiles.removeAll(nativeFilePath); s_RecentFiles.prepend(nativeFilePath); while (s_RecentFiles.size() > MAX_RECENT_FILES) { s_RecentFiles.removeLast(); } // Update the recent files actions on // ALL the main windows foreach(QWidget * window, QApplication::topLevelWidgets()) { if (MainWindow *mainWin = qobject_cast(window)) { mainWin->UpdateRecentFileActions(); } } } void MainWindow::SelectEntryOnHeadingToolbar(const QString &element_name) { ui.actionHeading1->setChecked(false); ui.actionHeading2->setChecked(false); ui.actionHeading3->setChecked(false); ui.actionHeading4->setChecked(false); ui.actionHeading5->setChecked(false); ui.actionHeading6->setChecked(false); ui.actionHeadingNormal->setChecked(false); if (!element_name.isEmpty()) { if ((element_name[ 0 ].toLower() == QChar('h')) && (element_name[ 1 ].isDigit())) { QString heading_name = QString(element_name[ 1 ]); if (heading_name == "1") { ui.actionHeading1->setChecked(true); } else if (heading_name == "2") { ui.actionHeading2->setChecked(true); } else if (heading_name == "3") { ui.actionHeading3->setChecked(true); } else if (heading_name == "4") { ui.actionHeading4->setChecked(true); } else if (heading_name == "5") { ui.actionHeading5->setChecked(true); } else if (heading_name == "6") { ui.actionHeading6->setChecked(true); } } else { ui.actionHeadingNormal->setChecked(true); } } } void MainWindow::ApplyHeadingStyleToTab(const QString &heading_type) { FlowTab *flow_tab = GetCurrentFlowTab(); if (flow_tab) { flow_tab->HeadingStyle(heading_type, m_preserveHeadingAttributes); } } void MainWindow::SetPreserveHeadingAttributes(bool new_state) { m_preserveHeadingAttributes = new_state; ui.actionHeadingPreserveAttributes->setChecked(m_preserveHeadingAttributes); ShowMessageOnStatusBar(tr("Preserve existing heading attributes is now:") % " " % (m_preserveHeadingAttributes ? tr("ON") : tr("OFF"))); } void MainWindow::CreateRecentFilesActions() { for (int i = 0; i < MAX_RECENT_FILES; ++i) { m_RecentFileActions[ i ] = new QAction(this); // The actions are not visible until we put a filename in them m_RecentFileActions[ i ]->setVisible(false); QList actlist = ui.menuFile->actions(); // Add the new action just above the Quit action // and the separator behind it ui.menuFile->insertAction(actlist[ actlist.size() - 3 ], m_RecentFileActions[ i ]); connect(m_RecentFileActions[ i ], SIGNAL(triggered()), this, SLOT(OpenRecentFile())); } } void MainWindow::UpdateRecentFileActions() { int num_recent_files = qMin(s_RecentFiles.size(), MAX_RECENT_FILES); // Store the filenames to the actions and display those actions for (int i = 0; i < num_recent_files; ++i) { QString text = tr("&%1 %2").arg(i + 1).arg(QFileInfo(s_RecentFiles[ i ]).fileName()); m_RecentFileActions[ i ]->setText(fontMetrics().elidedText(text, Qt::ElideRight, TEXT_ELIDE_WIDTH)); m_RecentFileActions[ i ]->setData(s_RecentFiles[ i ]); m_RecentFileActions[ i ]->setVisible(true); } // If we have fewer files than actions, hide the other actions for (int j = num_recent_files; j < MAX_RECENT_FILES; ++j) { m_RecentFileActions[ j ]->setVisible(false); } QAction *separator = ui.menuFile->actions()[ ui.menuFile->actions().size() - 3 ]; // If we have any actions with files shown, // display the separator; otherwise, don't if (num_recent_files > 0) { separator->setVisible(true); } else { separator->setVisible(false); } } void MainWindow::sizeMenuIcons() { // Size icons based on Qfont line-spacing and a // user-preference tweakable scale-factor. SettingsStore settings; double iconscalefactor = settings.mainMenuIconSize(); int iconsize = QFontMetrics(QFont()).lineSpacing() * iconscalefactor; if (iconsize < 12) iconsize = 12; if (iconsize > 48) iconsize = 48; QList all_toolbars = findChildren(); foreach(QToolBar * toolbar, all_toolbars) { toolbar->setIconSize(QSize(iconsize,iconsize)); } } void MainWindow::PlatformSpecificTweaks() { // We use the "close" action only on Macs, // because they need it for the multi-document interface #ifndef Q_OS_MAC ui.actionClose->setEnabled(false); ui.actionClose->setVisible(false); #else // Macs also use bigger icons but scale them automatically for high dpi displays //QList all_toolbars = findChildren(); //foreach(QToolBar * toolbar, all_toolbars) { // toolbar->setIconSize(QSize(32, 32)); //} // Set the action because they are not automatically put in the right place as of Qt 5.1. ui.actionAbout->setMenuRole(QAction::AboutRole); ui.actionPreferences->setMenuRole(QAction::PreferencesRole); #endif sizeMenuIcons(); } void MainWindow::ExtendUI() { m_FindReplace->ShowHide(); // We want a nice frame around the tab manager QFrame *frame = new QFrame(this); QLayout *layout = new QVBoxLayout(frame); frame->setLayout(layout); layout->addWidget(m_TabManager); layout->addWidget(m_FindReplace); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(1); frame->setObjectName(FRAME_NAME); frame->setStyleSheet(TAB_STYLE_SHEET); setCentralWidget(frame); m_BookBrowser = new BookBrowser(this); m_BookBrowser->setObjectName(BOOK_BROWSER_NAME); addDockWidget(Qt::LeftDockWidgetArea, m_BookBrowser); m_TableOfContents = new TableOfContents(this); m_TableOfContents->setObjectName(TABLE_OF_CONTENTS_NAME); addDockWidget(Qt::RightDockWidgetArea, m_TableOfContents); m_ValidationResultsView = new ValidationResultsView(this); m_ValidationResultsView->setObjectName(VALIDATION_RESULTS_VIEW_NAME); addDockWidget(Qt::BottomDockWidgetArea, m_ValidationResultsView); // By default, we want the validation results view to be hidden // *for first-time users*. That is, when a new user installs and opens Sigil, // the val. results view is hidden, but if he leaves it open before exiting, // then it will be open when he opens Sigil the next time. // Basically, restoreGeometry() in ReadSettings() overrules this command. m_ValidationResultsView->hide(); m_PreviewWindow = new PreviewWindow(this); m_PreviewWindow->setObjectName(PREVIEW_WINDOW_NAME); addDockWidget(Qt::RightDockWidgetArea, m_PreviewWindow); m_PreviewWindow->hide(); m_Clips = new ClipsWindow(this); m_Clips->setObjectName(CLIPS_WINDOW_NAME); addDockWidget(Qt::LeftDockWidgetArea, m_Clips); m_Clips->hide(); ui.menuView->addSeparator(); ui.menuView->addAction(m_BookBrowser->toggleViewAction()); m_BookBrowser->toggleViewAction()->setShortcut(QKeySequence(Qt::ALT + Qt::Key_F1)); ui.menuView->addAction(m_Clips->toggleViewAction()); ui.menuView->addAction(m_PreviewWindow->toggleViewAction()); m_PreviewWindow->toggleViewAction()->setShortcut(QKeySequence(Qt::Key_F10)); ui.menuView->addAction(m_TableOfContents->toggleViewAction()); m_TableOfContents->toggleViewAction()->setShortcut(QKeySequence(Qt::ALT + Qt::Key_F3)); ui.menuView->addAction(m_ValidationResultsView->toggleViewAction()); m_ValidationResultsView->toggleViewAction()->setShortcut(QKeySequence(Qt::ALT + Qt::Key_F2)); // Create the view menu to hide and show toolbars. ui.menuToolbars->addAction(ui.toolBarFileActions->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarTextManip->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarViews->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarInsertions->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarBack->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarDonate->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarTools->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarHeadings->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarTextFormats->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarTextAlign->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarLists->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarIndents->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarChangeCase->toggleViewAction()); ui.menuToolbars->addAction(ui.toolBarTextDirection->toggleViewAction()); ui.toolBarTextDirection->setVisible(false); ui.menuToolbars->addAction(ui.toolBarClips->toggleViewAction()); ui.toolBarClips->setVisible(false); m_lbCursorPosition = new QLabel(QString(""), statusBar()); statusBar()->addPermanentWidget(m_lbCursorPosition); UpdateCursorPositionLabel(0, 0); // Creating the zoom controls in the status bar m_slZoomSlider = new QSlider(Qt::Horizontal, statusBar()); m_slZoomSlider->setTracking(false); m_slZoomSlider->setTickInterval(ZOOM_SLIDER_MIDDLE); m_slZoomSlider->setTickPosition(QSlider::TicksBelow); m_slZoomSlider->setFixedWidth(ZOOM_SLIDER_WIDTH); m_slZoomSlider->setMinimum(ZOOM_SLIDER_MIN); m_slZoomSlider->setMaximum(ZOOM_SLIDER_MAX); m_slZoomSlider->setValue(ZOOM_SLIDER_MIDDLE); QToolButton *zoom_out = new QToolButton(statusBar()); zoom_out->setDefaultAction(ui.actionZoomOut); QToolButton *zoom_in = new QToolButton(statusBar()); zoom_in->setDefaultAction(ui.actionZoomIn); m_lbZoomLabel = new QLabel(QString("100% "), statusBar()); statusBar()->addPermanentWidget(m_lbZoomLabel); statusBar()->addPermanentWidget(zoom_out); statusBar()->addPermanentWidget(m_slZoomSlider); statusBar()->addPermanentWidget(zoom_in); // We override the default color for highlighted text // so we can actually *see* the text that the FindReplace // dialog finds in Book View... sadly, QWebView ignores a custom // palette set on it directly, so we have to do this globally. QPalette palette; palette.setColor(QPalette::Inactive, QPalette::Highlight, Qt::darkGreen); palette.setColor(QPalette::Inactive, QPalette::HighlightedText, Qt::white); qApp->setPalette(palette); // Setup userdefined keyboard shortcuts for actions. KeyboardShortcutManager *sm = KeyboardShortcutManager::instance(); // Note: shortcut action Ids should not be translated. // File sm->registerAction(this, ui.actionNew, "MainWindow.New"); sm->registerAction(this, ui.actionNewHTMLFile, "MainWindow.NewHTMLFile"); sm->registerAction(this, ui.actionNewCSSFile, "MainWindow.NewCSSFile"); sm->registerAction(this, ui.actionNewSVGFile, "MainWindow.NewSVGFile"); sm->registerAction(this, ui.actionAddExistingFile, "MainWindow.AddExistingFile"); sm->registerAction(this, ui.actionOpen, "MainWindow.Open"); #ifndef Q_OS_MAC sm->registerAction(this, ui.actionClose, "MainWindow.Close"); #endif sm->registerAction(this, ui.actionSave, "MainWindow.Save"); sm->registerAction(this, ui.actionSaveAs, "MainWindow.SaveAs"); sm->registerAction(this, ui.actionSaveACopy, "MainWindow.SaveACopy"); sm->registerAction(this, ui.actionPrintPreview, "MainWindow.PrintPreview"); sm->registerAction(this, ui.actionPrint, "MainWindow.Print"); sm->registerAction(this, ui.actionExit, "MainWindow.Exit"); // Edit sm->registerAction(this, ui.actionUndo, "MainWindow.Undo"); sm->registerAction(this, ui.actionRedo, "MainWindow.Redo"); sm->registerAction(this, ui.actionCut, "MainWindow.Cut"); sm->registerAction(this, ui.actionCopy, "MainWindow.Copy"); sm->registerAction(this, ui.actionPaste, "MainWindow.Paste"); sm->registerAction(this, ui.actionPasteClipboardHistory, "MainWindow.PasteClipboardHistory"); sm->registerAction(this, ui.actionDeleteLine, "MainWindow.DeleteLine"); sm->registerAction(this, ui.actionInsertFile, "MainWindow.InsertFile"); sm->registerAction(this, ui.actionInsertSpecialCharacter, "MainWindow.InsertSpecialCharacter"); sm->registerAction(this, ui.actionInsertId, "MainWindow.InsertId"); sm->registerAction(this, ui.actionInsertHyperlink, "MainWindow.InsertHyperlink"); sm->registerAction(this, ui.actionMarkForIndex, "MainWindow.MarkForIndex"); sm->registerAction(this, ui.actionSplitSection, "MainWindow.SplitSection"); sm->registerAction(this, ui.actionInsertSGFSectionMarker, "MainWindow.InsertSGFSectionMarker"); sm->registerAction(this, ui.actionSplitOnSGFSectionMarkers, "MainWindow.SplitOnSGFSectionMarkers"); sm->registerAction(this, ui.actionInsertClosingTag, "MainWindow.InsertClosingTag"); #ifndef Q_OS_MAC sm->registerAction(this, ui.actionPreferences, "MainWindow.Preferences"); #endif //Search sm->registerAction(this, ui.actionFind, "MainWindow.Find"); sm->registerAction(this, ui.actionFindNext, "MainWindow.FindNext"); sm->registerAction(this, ui.actionFindPrevious, "MainWindow.FindPrevious"); sm->registerAction(this, ui.actionReplaceCurrent, "MainWindow.ReplaceCurrent"); sm->registerAction(this, ui.actionReplaceNext, "MainWindow.ReplaceNext"); sm->registerAction(this, ui.actionReplacePrevious, "MainWindow.ReplacePrevious"); sm->registerAction(this, ui.actionReplaceAll, "MainWindow.ReplaceAll"); sm->registerAction(this, ui.actionCount, "MainWindow.Count"); sm->registerAction(this, ui.actionMarkSelection, "MainWindow.MarkSelection"); sm->registerAction(this, ui.actionFindNextInFile, "MainWindow.FindNextInFile"); sm->registerAction(this, ui.actionReplaceNextInFile, "MainWindow.ReplaceNextInFile"); sm->registerAction(this, ui.actionReplaceAllInFile, "MainWindow.ReplaceAllInFile"); sm->registerAction(this, ui.actionCountInFile, "MainWindow.CountInFile"); sm->registerAction(this, ui.actionGoToLine, "MainWindow.GoToLine"); sm->registerAction(this, ui.actionBookmarkLocation, "MainWindow.BookmarkLocation"); sm->registerAction(this, ui.actionGoToLinkOrStyle, "MainWindow.GoToLinkOrStyle"); sm->registerAction(this, ui.actionGoBackFromLinkOrStyle, "MainWindow.GoBackFromLinkOrStyle"); // Format sm->registerAction(this, ui.actionBold, "MainWindow.Bold"); sm->registerAction(this, ui.actionItalic, "MainWindow.Italic"); sm->registerAction(this, ui.actionUnderline, "MainWindow.Underline"); sm->registerAction(this, ui.actionStrikethrough, "MainWindow.Strikethrough"); sm->registerAction(this, ui.actionSubscript, "MainWindow.Subscript"); sm->registerAction(this, ui.actionSuperscript, "MainWindow.Superscript"); sm->registerAction(this, ui.actionAlignLeft, "MainWindow.AlignLeft"); sm->registerAction(this, ui.actionAlignCenter, "MainWindow.AlignCenter"); sm->registerAction(this, ui.actionAlignRight, "MainWindow.AlignRight"); sm->registerAction(this, ui.actionAlignJustify, "MainWindow.AlignJustify"); sm->registerAction(this, ui.actionInsertNumberedList, "MainWindow.InsertNumberedList"); sm->registerAction(this, ui.actionInsertBulletedList, "MainWindow.InsertBulletedList"); sm->registerAction(this, ui.actionIncreaseIndent, "MainWindow.IncreaseIndent"); sm->registerAction(this, ui.actionDecreaseIndent, "MainWindow.DecreaseIndent"); sm->registerAction(this, ui.actionTextDirectionLTR, "MainWindow.TextDirectionLTR"); sm->registerAction(this, ui.actionTextDirectionRTL, "MainWindow.TextDirectionRTL"); sm->registerAction(this, ui.actionTextDirectionDefault, "MainWindow.TextDirectionDefault"); sm->registerAction(this, ui.actionShowTag, "MainWindow.ShowTag"); sm->registerAction(this, ui.actionRemoveFormatting, "MainWindow.RemoveFormatting"); sm->registerAction(this, ui.actionHeading1, "MainWindow.Heading1"); sm->registerAction(this, ui.actionHeading2, "MainWindow.Heading2"); sm->registerAction(this, ui.actionHeading3, "MainWindow.Heading3"); sm->registerAction(this, ui.actionHeading4, "MainWindow.Heading4"); sm->registerAction(this, ui.actionHeading5, "MainWindow.Heading5"); sm->registerAction(this, ui.actionHeading6, "MainWindow.Heading6"); sm->registerAction(this, ui.actionHeadingNormal, "MainWindow.HeadingNormal"); sm->registerAction(this, ui.actionHeadingPreserveAttributes, "MainWindow.HeadingPreserveAttributes"); sm->registerAction(this, ui.actionCasingLowercase, "MainWindow.CasingLowercase"); sm->registerAction(this, ui.actionCasingUppercase, "MainWindow.CasingUppercase"); sm->registerAction(this, ui.actionCasingTitlecase, "MainWindow.CasingTitlecase"); sm->registerAction(this, ui.actionCasingCapitalize, "MainWindow.CasingCapitalize"); // Tools sm->registerAction(this, ui.actionAddCover, "MainWindow.AddCover"); sm->registerAction(this, ui.actionMetaEditor, "MainWindow.MetaEditor"); sm->registerAction(this, ui.actionEditTOC, "MainWindow.EditTOC"); sm->registerAction(this, ui.actionGenerateTOC, "MainWindow.GenerateTOC"); sm->registerAction(this, ui.actionCreateHTMLTOC, "MainWindow.CreateHTMLTOC"); sm->registerAction(this, ui.actionWellFormedCheckEpub, "MainWindow.WellFormedCheckEpub"); sm->registerAction(this, ui.actionValidateStylesheetsWithW3C, "MainWindow.ValidateStylesheetsWithW3C"); sm->registerAction(this, ui.actionAutoSpellCheck, "MainWindow.AutoSpellCheck"); sm->registerAction(this, ui.actionMendPrettifyHTML, "MainWindow.MendPrettifyHTML"); sm->registerAction(this, ui.actionMendHTML, "MainWindow.MendHTML"); sm->registerAction(this, ui.actionUpdateManifestProperties, "MainWindow.UpdateManifestProperties"); sm->registerAction(this, ui.actionNCXFromNav, "MainWindow.NCXFromNav"); sm->registerAction(this, ui.actionSpellcheckEditor, "MainWindow.SpellcheckEditor"); sm->registerAction(this, ui.actionSpellcheck, "MainWindow.Spellcheck"); sm->registerAction(this, ui.actionAddMisspelledWord, "MainWindow.AddMispelledWord"); sm->registerAction(this, ui.actionIgnoreMisspelledWord, "MainWindow.IgnoreMispelledWord"); sm->registerAction(this, ui.actionClearIgnoredWords, "MainWindow.ClearIgnoredWords"); sm->registerAction(this, ui.actionReports, "MainWindow.Reports"); sm->registerAction(this, ui.actionSearchEditor, "MainWindow.SearchEditor"); sm->registerAction(this, ui.actionClipEditor, "MainWindow.ClipEditor"); sm->registerAction(this, ui.actionAddToIndex, "MainWindow.AddToIndex"); sm->registerAction(this, ui.actionMarkForIndex, "MainWindow.MarkForIndex"); sm->registerAction(this, ui.actionCreateIndex, "MainWindow.CreateIndex"); sm->registerAction(this, ui.actionDeleteUnusedMedia, "MainWindow.DeleteUnusedMedia"); sm->registerAction(this, ui.actionDeleteUnusedStyles, "MainWindow.DeleteUnusedStyles"); // View sm->registerAction(this, ui.actionBookView, "MainWindow.BookView"); sm->registerAction(this, ui.actionCodeView, "MainWindow.CodeView"); sm->registerAction(this, ui.actionToggleViewState, "MainWindow.ToggleViewState"); sm->registerAction(this, ui.actionZoomIn, "MainWindow.ZoomIn"); sm->registerAction(this, ui.actionZoomOut, "MainWindow.ZoomOut"); sm->registerAction(this, ui.actionZoomReset, "MainWindow.ZoomReset"); sm->registerAction(this, m_BookBrowser->toggleViewAction(), "MainWindow.BookBrowser"); sm->registerAction(this, m_ValidationResultsView->toggleViewAction(), "MainWindow.ValidationResults"); sm->registerAction(this, m_TableOfContents->toggleViewAction(), "MainWindow.TableOfContents"); // Window sm->registerAction(this, ui.actionNextTab, "MainWindow.NextTab"); sm->registerAction(this, ui.actionPreviousTab, "MainWindow.PreviousTab"); sm->registerAction(this, ui.actionCloseTab, "MainWindow.CloseTab"); sm->registerAction(this, ui.actionCloseOtherTabs, "MainWindow.CloseOtherTabs"); sm->registerAction(this, ui.actionPreviousResource, "MainWindow.PreviousResource"); sm->registerAction(this, ui.actionNextResource, "MainWindow.NextResource"); // Help sm->registerAction(this, ui.actionUserGuide, "MainWindow.UserGuide"); sm->registerAction(this, ui.actionFAQ, "MainWindow.FAQ"); sm->registerAction(this, ui.actionTutorials, "MainWindow.FAQ"); sm->registerAction(this, ui.actionDonate, "MainWindow.Donate"); sm->registerAction(this, ui.actionSigilWebsite, "MainWindow.SigilWebsite"); sm->registerAction(this, ui.actionAbout, "MainWindow.About"); // Clips sm->registerAction(this, ui.actionClip1, "MainWindow.Clip1"); sm->registerAction(this, ui.actionClip2, "MainWindow.Clip2"); sm->registerAction(this, ui.actionClip3, "MainWindow.Clip3"); sm->registerAction(this, ui.actionClip4, "MainWindow.Clip4"); sm->registerAction(this, ui.actionClip5, "MainWindow.Clip5"); sm->registerAction(this, ui.actionClip6, "MainWindow.Clip6"); sm->registerAction(this, ui.actionClip7, "MainWindow.Clip7"); sm->registerAction(this, ui.actionClip8, "MainWindow.Clip8"); sm->registerAction(this, ui.actionClip9, "MainWindow.Clip9"); sm->registerAction(this, ui.actionClip10, "MainWindow.Clip10"); sm->registerAction(this, ui.actionClip11, "MainWindow.Clip11"); sm->registerAction(this, ui.actionClip12, "MainWindow.Clip12"); sm->registerAction(this, ui.actionClip13, "MainWindow.Clip13"); sm->registerAction(this, ui.actionClip14, "MainWindow.Clip14"); sm->registerAction(this, ui.actionClip15, "MainWindow.Clip15"); sm->registerAction(this, ui.actionClip16, "MainWindow.Clip16"); sm->registerAction(this, ui.actionClip17, "MainWindow.Clip17"); sm->registerAction(this, ui.actionClip18, "MainWindow.Clip18"); sm->registerAction(this, ui.actionClip19, "MainWindow.Clip19"); sm->registerAction(this, ui.actionClip20, "MainWindow.Clip20"); // for plugins sm->registerAction(this, ui.actionPlugin1, "MainWindow.Plugins.RunPlugin1"); sm->registerAction(this, ui.actionPlugin2, "MainWindow.Plugins.RunPlugin2"); sm->registerAction(this, ui.actionPlugin3, "MainWindow.Plugins.RunPlugin3"); sm->registerAction(this, ui.actionPlugin4, "MainWindow.Plugins.RunPlugin4"); sm->registerAction(this, ui.actionPlugin5, "MainWindow.Plugins.RunPlugin5"); ExtendIconSizes(); UpdateClipsUI(); } void MainWindow::UpdateClipButton(int clip_number, QAction *ui_action) { ClipEditorModel::clipEntry *clip_entry = ClipEditorModel::instance()->GetEntryFromNumber(clip_number); if (clip_entry) { ui_action->setText(clip_entry->name); QString clip_text = clip_entry->text; clip_text.replace('&', "&").replace('<', "<").replace('>', ">"); ui_action->setToolTip(clip_text); ui_action->setVisible(true); } else { ui_action->setText(""); ui_action->setToolTip(""); ui_action->setVisible(false); } } void MainWindow::UpdateClipsUI() { UpdateClipButton(1, ui.actionClip1); UpdateClipButton(2, ui.actionClip2); UpdateClipButton(3, ui.actionClip3); UpdateClipButton(4, ui.actionClip4); UpdateClipButton(5, ui.actionClip5); UpdateClipButton(6, ui.actionClip6); UpdateClipButton(7, ui.actionClip7); UpdateClipButton(8, ui.actionClip8); UpdateClipButton(9, ui.actionClip9); UpdateClipButton(10, ui.actionClip10); UpdateClipButton(11, ui.actionClip11); UpdateClipButton(12, ui.actionClip12); UpdateClipButton(13, ui.actionClip13); UpdateClipButton(14, ui.actionClip14); UpdateClipButton(15, ui.actionClip15); UpdateClipButton(16, ui.actionClip16); UpdateClipButton(17, ui.actionClip17); UpdateClipButton(18, ui.actionClip18); UpdateClipButton(19, ui.actionClip19); UpdateClipButton(20, ui.actionClip20); } void MainWindow::ExtendIconSizes() { QIcon icon; icon = ui.actionNew->icon(); icon.addFile(QString::fromUtf8(":/main/document-new_16px.png")); icon.addFile(QString::fromUtf8(":/main/document-new_22px.png")); ui.actionNew->setIcon(icon); icon = ui.actionAddExistingFile->icon(); icon.addFile(QString::fromUtf8(":/main/document-add_16px.png")); icon.addFile(QString::fromUtf8(":/main/document-add_22px.png")); ui.actionAddExistingFile->setIcon(icon); icon = ui.actionSave->icon(); icon.addFile(QString::fromUtf8(":/main/document-save_16px.png")); icon.addFile(QString::fromUtf8(":/main/document-save_22px.png")); ui.actionSave->setIcon(icon); icon = ui.actionSpellcheckEditor->icon(); icon.addFile(QString::fromUtf8(":/main/document-spellcheck_16px.png")); icon.addFile(QString::fromUtf8(":/main/document-spellcheck_22px.png")); ui.actionSpellcheckEditor->setIcon(icon); icon = ui.actionCut->icon(); icon.addFile(QString::fromUtf8(":/main/edit-cut_16px.png")); icon.addFile(QString::fromUtf8(":/main/edit-cut_22px.png")); ui.actionCut->setIcon(icon); icon = ui.actionPaste->icon(); icon.addFile(QString::fromUtf8(":/main/edit-paste_16px.png")); icon.addFile(QString::fromUtf8(":/main/edit-paste_22px.png")); ui.actionPaste->setIcon(icon); icon = ui.actionUndo->icon(); icon.addFile(QString::fromUtf8(":/main/edit-undo_16px.png")); icon.addFile(QString::fromUtf8(":/main/edit-undo_22px.png")); ui.actionUndo->setIcon(icon); icon = ui.actionRedo->icon(); icon.addFile(QString::fromUtf8(":/main/edit-redo_16px.png")); icon.addFile(QString::fromUtf8(":/main/edit-redo_22px.png")); ui.actionRedo->setIcon(icon); icon = ui.actionCopy->icon(); icon.addFile(QString::fromUtf8(":/main/edit-copy_16px.png")); icon.addFile(QString::fromUtf8(":/main/edit-copy_22px.png")); ui.actionCopy->setIcon(icon); icon = ui.actionAlignLeft->icon(); icon.addFile(QString::fromUtf8(":/main/format-justify-left_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-justify-left_22px.png")); ui.actionAlignLeft->setIcon(icon); icon = ui.actionAlignRight->icon(); icon.addFile(QString::fromUtf8(":/main/format-justify-right_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-justify-right_22px.png")); ui.actionAlignRight->setIcon(icon); icon = ui.actionAlignCenter->icon(); icon.addFile(QString::fromUtf8(":/main/format-justify-center_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-justify-center_22px.png")); ui.actionAlignCenter->setIcon(icon); icon = ui.actionAlignJustify->icon(); icon.addFile(QString::fromUtf8(":/main/format-justify-fill_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-justify-fill_22px.png")); ui.actionAlignJustify->setIcon(icon); icon = ui.actionBold->icon(); icon.addFile(QString::fromUtf8(":/main/format-text-bold_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-text-bold_22px.png")); ui.actionBold->setIcon(icon); icon = ui.actionItalic->icon(); icon.addFile(QString::fromUtf8(":/main/format-text-italic_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-text-italic_22px.png")); ui.actionItalic->setIcon(icon); icon = ui.actionUnderline->icon(); icon.addFile(QString::fromUtf8(":/main/format-text-underline_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-text-underline_22px.png")); ui.actionUnderline->setIcon(icon); icon = ui.actionStrikethrough->icon(); icon.addFile(QString::fromUtf8(":/main/format-text-strikethrough_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-text-strikethrough_22px.png")); ui.actionStrikethrough->setIcon(icon); icon = ui.actionSubscript->icon(); icon.addFile(QString::fromUtf8(":/main/format-text-subscript_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-text-subscript_22px.png")); ui.actionSubscript->setIcon(icon); icon = ui.actionSuperscript->icon(); icon.addFile(QString::fromUtf8(":/main/format-text-superscript_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-text-superscript_22px.png")); ui.actionSuperscript->setIcon(icon); icon = ui.actionInsertNumberedList->icon(); icon.addFile(QString::fromUtf8(":/main/insert-numbered-list_16px.png")); icon.addFile(QString::fromUtf8(":/main/insert-numbered-list_22px.png")); ui.actionInsertNumberedList->setIcon(icon); icon = ui.actionInsertBulletedList->icon(); icon.addFile(QString::fromUtf8(":/main/insert-bullet-list_16px.png")); icon.addFile(QString::fromUtf8(":/main/insert-bullet-list_22px.png")); ui.actionInsertBulletedList->setIcon(icon); icon = ui.actionIncreaseIndent->icon(); icon.addFile(QString::fromUtf8(":/main/format-indent-more_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-indent-more_22px.png")); ui.actionIncreaseIndent->setIcon(icon); icon = ui.actionDecreaseIndent->icon(); icon.addFile(QString::fromUtf8(":/main/format-indent-less_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-indent-less_22px.png")); ui.actionDecreaseIndent->setIcon(icon); icon = ui.actionCasingLowercase->icon(); icon.addFile(QString::fromUtf8(":/main/format-case-lowercase_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-case-lowercase_22px.png")); ui.actionCasingLowercase->setIcon(icon); icon = ui.actionCasingUppercase->icon(); icon.addFile(QString::fromUtf8(":/main/format-case-uppercase_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-case-uppercase_22px.png")); ui.actionCasingUppercase->setIcon(icon); icon = ui.actionCasingTitlecase->icon(); icon.addFile(QString::fromUtf8(":/main/format-case-titlecase_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-case-titlecase_22px.png")); ui.actionCasingTitlecase->setIcon(icon); icon = ui.actionCasingCapitalize->icon(); icon.addFile(QString::fromUtf8(":/main/format-case-capitalize_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-case-capitalize_22px.png")); ui.actionCasingCapitalize->setIcon(icon); icon = ui.actionTextDirectionLTR->icon(); icon.addFile(QString::fromUtf8(":/main/format-direction-ltr_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-direction-ltr_22px.png")); ui.actionTextDirectionLTR->setIcon(icon); icon = ui.actionTextDirectionRTL->icon(); icon.addFile(QString::fromUtf8(":/main/format-direction-rtl_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-direction-rtl_22px.png")); ui.actionTextDirectionRTL->setIcon(icon); icon = ui.actionTextDirectionDefault->icon(); icon.addFile(QString::fromUtf8(":/main/format-direction-default_16px.png")); icon.addFile(QString::fromUtf8(":/main/format-direction-default_22px.png")); ui.actionTextDirectionDefault->setIcon(icon); icon = ui.actionHeading1->icon(); icon.addFile(QString::fromUtf8(":/main/heading-1_16px.png")); icon.addFile(QString::fromUtf8(":/main/heading-1_22px.png")); ui.actionHeading1->setIcon(icon); icon = ui.actionHeading2->icon(); icon.addFile(QString::fromUtf8(":/main/heading-2_16px.png")); icon.addFile(QString::fromUtf8(":/main/heading-2_22px.png")); ui.actionHeading2->setIcon(icon); icon = ui.actionHeading3->icon(); icon.addFile(QString::fromUtf8(":/main/heading-3_16px.png")); icon.addFile(QString::fromUtf8(":/main/heading-3_22px.png")); ui.actionHeading3->setIcon(icon); icon = ui.actionHeading4->icon(); icon.addFile(QString::fromUtf8(":/main/heading-4_16px.png")); icon.addFile(QString::fromUtf8(":/main/heading-4_22px.png")); ui.actionHeading4->setIcon(icon); icon = ui.actionHeading5->icon(); icon.addFile(QString::fromUtf8(":/main/heading-5_16px.png")); icon.addFile(QString::fromUtf8(":/main/heading-5_22px.png")); ui.actionHeading5->setIcon(icon); icon = ui.actionHeading6->icon(); icon.addFile(QString::fromUtf8(":/main/heading-6_16px.png")); icon.addFile(QString::fromUtf8(":/main/heading-6_22px.png")); ui.actionHeading6->setIcon(icon); icon = ui.actionHeadingNormal->icon(); icon.addFile(QString::fromUtf8(":/main/heading-normal_16px.png")); icon.addFile(QString::fromUtf8(":/main/heading-normal_22px.png")); ui.actionHeadingNormal->setIcon(icon); icon = ui.actionOpen->icon(); icon.addFile(QString::fromUtf8(":/main/document-open_16px.png")); icon.addFile(QString::fromUtf8(":/main/document-open_22px.png")); ui.actionOpen->setIcon(icon); icon = ui.actionExit->icon(); icon.addFile(QString::fromUtf8(":/main/process-stop_16px.png")); icon.addFile(QString::fromUtf8(":/main/process-stop_22px.png")); ui.actionExit->setIcon(icon); icon = ui.actionAbout->icon(); icon.addFile(QString::fromUtf8(":/main/help-browser_16px.png")); icon.addFile(QString::fromUtf8(":/main/help-browser_22px.png")); ui.actionAbout->setIcon(icon); icon = ui.actionBookView->icon(); icon.addFile(QString::fromUtf8(":/main/view-book_16px.png")); icon.addFile(QString::fromUtf8(":/main/view-book_22px.png")); ui.actionBookView->setIcon(icon); icon = ui.actionCodeView->icon(); icon.addFile(QString::fromUtf8(":/main/view-code_16px.png")); icon.addFile(QString::fromUtf8(":/main/view-code_22px.png")); ui.actionCodeView->setIcon(icon); icon = ui.actionSplitSection->icon(); icon.addFile(QString::fromUtf8(":/main/insert-section-break_16px.png")); icon.addFile(QString::fromUtf8(":/main/insert-section-break_22px.png")); ui.actionSplitSection->setIcon(icon); icon = ui.actionInsertFile->icon(); icon.addFile(QString::fromUtf8(":/main/insert-image_16px.png")); icon.addFile(QString::fromUtf8(":/main/insert-image_22px.png")); ui.actionInsertFile->setIcon(icon); icon = ui.actionPrint->icon(); icon.addFile(QString::fromUtf8(":/main/document-print_16px.png")); icon.addFile(QString::fromUtf8(":/main/document-print_22px.png")); ui.actionPrint->setIcon(icon); icon = ui.actionPrintPreview->icon(); icon.addFile(QString::fromUtf8(":/main/document-print-preview_16px.png")); icon.addFile(QString::fromUtf8(":/main/document-print-preview_22px.png")); ui.actionPrintPreview->setIcon(icon); icon = ui.actionZoomIn->icon(); icon.addFile(QString::fromUtf8(":/main/list-add_16px.png")); icon.addFile(QString::fromUtf8(":/main/list-add_22px.png")); ui.actionZoomIn->setIcon(icon); icon = ui.actionZoomOut->icon(); icon.addFile(QString::fromUtf8(":/main/list-remove_16px.png")); icon.addFile(QString::fromUtf8(":/main/list-remove_22px.png")); ui.actionZoomOut->setIcon(icon); icon = ui.actionFind->icon(); icon.addFile(QString::fromUtf8(":/main/edit-find_16px.png")); icon.addFile(QString::fromUtf8(":/main/edit-find_22px.png")); ui.actionFind->setIcon(icon); icon = ui.actionDonate->icon(); icon.addFile(QString::fromUtf8(":/main/emblem-favorite_16px.png")); icon.addFile(QString::fromUtf8(":/main/emblem-favorite_22px.png")); ui.actionDonate->setIcon(icon); icon = ui.actionMetaEditor->icon(); icon.addFile(QString::fromUtf8(":/main/metadata-editor_16px.png")); icon.addFile(QString::fromUtf8(":/main/metadata-editor_22px.png")); ui.actionMetaEditor->setIcon(icon); icon = ui.actionGenerateTOC->icon(); icon.addFile(QString::fromUtf8(":/main/generate-toc_16px.png")); icon.addFile(QString::fromUtf8(":/main/generate-toc_22px.png")); ui.actionGenerateTOC->setIcon(icon); } void MainWindow::LoadInitialFile(const QString &openfilepath, bool is_internal) { if (!openfilepath.isEmpty()) { LoadFile(openfilepath, is_internal); } else { CreateNewBook(); } } void MainWindow::ConnectSignalsToSlots() { connect(m_PreviewWindow, SIGNAL(Shown()), this, SLOT(UpdatePreview())); connect(m_PreviewWindow, SIGNAL(GoToPreviewLocationRequest()), this, SLOT(GoToPreviewLocation())); connect(m_PreviewWindow, SIGNAL(ZoomFactorChanged(float)), this, SLOT(UpdateZoomLabel(float))); connect(m_PreviewWindow, SIGNAL(ZoomFactorChanged(float)), this, SLOT(UpdateZoomSlider(float))); connect(qApp, SIGNAL(focusChanged(QWidget *, QWidget *)), this, SLOT(ApplicationFocusChanged(QWidget *, QWidget *))); // Setup signal mapping for heading actions. connect(ui.actionHeading1, SIGNAL(triggered()), m_headingMapper, SLOT(map())); m_headingMapper->setMapping(ui.actionHeading1, "1"); connect(ui.actionHeading2, SIGNAL(triggered()), m_headingMapper, SLOT(map())); m_headingMapper->setMapping(ui.actionHeading2, "2"); connect(ui.actionHeading3, SIGNAL(triggered()), m_headingMapper, SLOT(map())); m_headingMapper->setMapping(ui.actionHeading3, "3"); connect(ui.actionHeading4, SIGNAL(triggered()), m_headingMapper, SLOT(map())); m_headingMapper->setMapping(ui.actionHeading4, "4"); connect(ui.actionHeading5, SIGNAL(triggered()), m_headingMapper, SLOT(map())); m_headingMapper->setMapping(ui.actionHeading5, "5"); connect(ui.actionHeading6, SIGNAL(triggered()), m_headingMapper, SLOT(map())); m_headingMapper->setMapping(ui.actionHeading6, "6"); connect(ui.actionHeadingNormal, SIGNAL(triggered()), m_headingMapper, SLOT(map())); m_headingMapper->setMapping(ui.actionHeadingNormal, "Normal"); // File connect(ui.actionNew, SIGNAL(triggered()), this, SLOT(New())); connect(ui.actionOpen, SIGNAL(triggered()), this, SLOT(Open())); connect(ui.actionNewHTMLFile, SIGNAL(triggered()), m_BookBrowser, SLOT(AddNewHTML())); connect(ui.actionNewCSSFile, SIGNAL(triggered()), m_BookBrowser, SLOT(AddNewCSS())); connect(ui.actionNewSVGFile, SIGNAL(triggered()), m_BookBrowser, SLOT(AddNewSVG())); connect(ui.actionAddExistingFile, SIGNAL(triggered()), m_BookBrowser, SLOT(AddExisting())); connect(ui.actionSave, SIGNAL(triggered()), this, SLOT(Save())); connect(ui.actionSaveAs, SIGNAL(triggered()), this, SLOT(SaveAs())); connect(ui.actionSaveACopy, SIGNAL(triggered()), this, SLOT(SaveACopy())); connect(ui.actionClose, SIGNAL(triggered()), this, SLOT(close())); connect(ui.actionExit, SIGNAL(triggered()), this, SLOT(Exit())); // Edit connect(ui.actionInsertFile, SIGNAL(triggered()), this, SLOT(InsertFileDialog())); connect(ui.actionInsertSpecialCharacter, SIGNAL(triggered()), this, SLOT(InsertSpecialCharacter())); connect(ui.actionInsertId, SIGNAL(triggered()), this, SLOT(InsertId())); connect(ui.actionInsertHyperlink, SIGNAL(triggered()), this, SLOT(InsertHyperlink())); connect(ui.actionPreferences, SIGNAL(triggered()), this, SLOT(PreferencesDialog())); // Search connect(ui.actionFind, SIGNAL(triggered()), this, SLOT(Find())); connect(ui.actionFindNext, SIGNAL(triggered()), m_FindReplace, SLOT(FindNext())); connect(ui.actionFindPrevious, SIGNAL(triggered()), m_FindReplace, SLOT(FindPrevious())); connect(ui.actionReplaceCurrent, SIGNAL(triggered()), m_FindReplace, SLOT(ReplaceCurrent())); connect(ui.actionReplaceNext, SIGNAL(triggered()), m_FindReplace, SLOT(ReplaceNext())); connect(ui.actionReplacePrevious, SIGNAL(triggered()), m_FindReplace, SLOT(ReplacePrevious())); connect(ui.actionReplaceAll, SIGNAL(triggered()), m_FindReplace, SLOT(ReplaceAll())); connect(ui.actionCount, SIGNAL(triggered()), m_FindReplace, SLOT(Count())); connect(ui.actionFindNextInFile, SIGNAL(triggered()), m_FindReplace, SLOT(FindNextInFile())); connect(ui.actionReplaceNextInFile, SIGNAL(triggered()), m_FindReplace, SLOT(ReplaceNextInFile())); connect(ui.actionReplaceAllInFile, SIGNAL(triggered()), m_FindReplace, SLOT(ReplaceAllInFile())); connect(ui.actionMarkSelection, SIGNAL(triggered()), this, SLOT(MarkSelection())); connect(ui.actionCountInFile, SIGNAL(triggered()), m_FindReplace, SLOT(CountInFile())); connect(ui.actionGoToLine, SIGNAL(triggered()), this, SLOT(GoToLine())); // About connect(ui.actionUserGuide, SIGNAL(triggered()), this, SLOT(UserGuide())); connect(ui.actionDonate, SIGNAL(triggered()), this, SLOT(Donate())); connect(ui.actionSigilWebsite, SIGNAL(triggered()), this, SLOT(SigilWebsite())); connect(ui.actionAbout, SIGNAL(triggered()), this, SLOT(AboutDialog())); // Tools connect(ui.actionAddCover, SIGNAL(triggered()), this, SLOT(AddCover())); connect(ui.actionMetaEditor, SIGNAL(triggered()), this, SLOT(MetaEditorDialog())); connect(ui.actionWellFormedCheckEpub, SIGNAL(triggered()), this, SLOT(WellFormedCheckEpub())); connect(ui.actionValidateStylesheetsWithW3C, SIGNAL(triggered()), this, SLOT(ValidateStylesheetsWithW3C())); connect(ui.actionSpellcheckEditor, SIGNAL(triggered()), this, SLOT(SpellcheckEditorDialog())); connect(ui.actionAutoSpellCheck, SIGNAL(triggered(bool)), this, SLOT(SetAutoSpellCheck(bool))); connect(ui.actionSpellcheck, SIGNAL(triggered()), m_FindReplace, SLOT(FindMisspelledWord())); connect(ui.actionMendPrettifyHTML, SIGNAL(triggered()), this, SLOT(MendPrettifyHTML())); connect(ui.actionMendHTML, SIGNAL(triggered()), this, SLOT(MendHTML())); connect(ui.actionUpdateManifestProperties, SIGNAL(triggered()), this, SLOT(UpdateManifestProperties())); connect(ui.actionNCXFromNav, SIGNAL(triggered()), this, SLOT(GenerateNCXFromNav())); connect(ui.actionClearIgnoredWords, SIGNAL(triggered()), this, SLOT(ClearIgnoredWords())); connect(ui.actionGenerateTOC, SIGNAL(triggered()), this, SLOT(GenerateToc())); connect(ui.actionEditTOC, SIGNAL(triggered()), this, SLOT(EditTOCDialog())); connect(ui.actionCreateHTMLTOC, SIGNAL(triggered()), this, SLOT(CreateHTMLTOC())); connect(ui.actionReports, SIGNAL(triggered()), this, SLOT(ReportsDialog())); connect(ui.actionClipEditor, SIGNAL(triggered()), this, SLOT(ClipEditorDialog())); connect(ui.actionSearchEditor, SIGNAL(triggered()), this, SLOT(SearchEditorDialog())); connect(ui.actionIndexEditor, SIGNAL(triggered()), this, SLOT(IndexEditorDialog())); connect(ui.actionMarkForIndex, SIGNAL(triggered()), this, SLOT(MarkForIndex())); connect(ui.actionCreateIndex, SIGNAL(triggered()), this, SLOT(CreateIndex())); connect(ui.actionDeleteUnusedMedia, SIGNAL(triggered()), this, SLOT(DeleteUnusedMedia())); connect(ui.actionDeleteUnusedStyles, SIGNAL(triggered()), this, SLOT(DeleteUnusedStyles())); // Change case connect(ui.actionCasingLowercase, SIGNAL(triggered()), m_casingChangeMapper, SLOT(map())); connect(ui.actionCasingUppercase, SIGNAL(triggered()), m_casingChangeMapper, SLOT(map())); connect(ui.actionCasingTitlecase, SIGNAL(triggered()), m_casingChangeMapper, SLOT(map())); connect(ui.actionCasingCapitalize, SIGNAL(triggered()), m_casingChangeMapper, SLOT(map())); m_casingChangeMapper->setMapping(ui.actionCasingLowercase, Utility::Casing_Lowercase); m_casingChangeMapper->setMapping(ui.actionCasingUppercase, Utility::Casing_Uppercase); m_casingChangeMapper->setMapping(ui.actionCasingTitlecase, Utility::Casing_Titlecase); m_casingChangeMapper->setMapping(ui.actionCasingCapitalize, Utility::Casing_Capitalize); connect(m_casingChangeMapper, SIGNAL(mapped(int)), this, SLOT(ChangeCasing(int))); // View connect(ui.actionZoomIn, SIGNAL(triggered()), this, SLOT(ZoomIn())); connect(ui.actionZoomOut, SIGNAL(triggered()), this, SLOT(ZoomOut())); connect(ui.actionZoomReset, SIGNAL(triggered()), this, SLOT(ZoomReset())); connect(ui.actionBookView, SIGNAL(triggered()), this, SLOT(BookView())); connect(ui.actionCodeView, SIGNAL(triggered()), this, SLOT(CodeView())); connect(ui.actionToggleViewState, SIGNAL(triggered()), this, SLOT(ToggleViewState())); connect(ui.actionHeadingPreserveAttributes, SIGNAL(triggered(bool)), this, SLOT(SetPreserveHeadingAttributes(bool))); connect(m_headingMapper, SIGNAL(mapped(const QString &)), this, SLOT(ApplyHeadingStyleToTab(const QString &))); // Window connect(ui.actionNextTab, SIGNAL(triggered()), m_TabManager, SLOT(NextTab())); connect(ui.actionPreviousTab, SIGNAL(triggered()), m_TabManager, SLOT(PreviousTab())); connect(ui.actionCloseTab, SIGNAL(triggered()), m_TabManager, SLOT(CloseTab())); connect(ui.actionCloseOtherTabs, SIGNAL(triggered()), m_TabManager, SLOT(CloseOtherTabs())); connect(ui.actionPreviousResource, SIGNAL(triggered()), m_BookBrowser, SLOT(PreviousResource())); connect(ui.actionNextResource, SIGNAL(triggered()), m_BookBrowser, SLOT(NextResource())); connect(ui.actionBookmarkLocation, SIGNAL(triggered()), this, SLOT(BookmarkLocation())); connect(ui.actionGoBackFromLinkOrStyle, SIGNAL(triggered()), this, SLOT(GoBackFromLinkOrStyle())); connect(ui.actionSplitOnSGFSectionMarkers, SIGNAL(triggered()), this, SLOT(SplitOnSGFSectionMarkers())); connect(ui.actionPasteClipboardHistory, SIGNAL(triggered()), this, SLOT(ShowPasteClipboardHistoryDialog())); // Clips connect(ui.actionClip1, SIGNAL(triggered()), this, SLOT(PasteClip1IntoCurrentTarget())); connect(ui.actionClip2, SIGNAL(triggered()), this, SLOT(PasteClip2IntoCurrentTarget())); connect(ui.actionClip3, SIGNAL(triggered()), this, SLOT(PasteClip3IntoCurrentTarget())); connect(ui.actionClip4, SIGNAL(triggered()), this, SLOT(PasteClip4IntoCurrentTarget())); connect(ui.actionClip5, SIGNAL(triggered()), this, SLOT(PasteClip5IntoCurrentTarget())); connect(ui.actionClip6, SIGNAL(triggered()), this, SLOT(PasteClip6IntoCurrentTarget())); connect(ui.actionClip7, SIGNAL(triggered()), this, SLOT(PasteClip7IntoCurrentTarget())); connect(ui.actionClip8, SIGNAL(triggered()), this, SLOT(PasteClip8IntoCurrentTarget())); connect(ui.actionClip9, SIGNAL(triggered()), this, SLOT(PasteClip9IntoCurrentTarget())); connect(ui.actionClip10, SIGNAL(triggered()), this, SLOT(PasteClip10IntoCurrentTarget())); connect(ui.actionClip11, SIGNAL(triggered()), this, SLOT(PasteClip11IntoCurrentTarget())); connect(ui.actionClip12, SIGNAL(triggered()), this, SLOT(PasteClip12IntoCurrentTarget())); connect(ui.actionClip13, SIGNAL(triggered()), this, SLOT(PasteClip13IntoCurrentTarget())); connect(ui.actionClip14, SIGNAL(triggered()), this, SLOT(PasteClip14IntoCurrentTarget())); connect(ui.actionClip15, SIGNAL(triggered()), this, SLOT(PasteClip15IntoCurrentTarget())); connect(ui.actionClip16, SIGNAL(triggered()), this, SLOT(PasteClip16IntoCurrentTarget())); connect(ui.actionClip17, SIGNAL(triggered()), this, SLOT(PasteClip17IntoCurrentTarget())); connect(ui.actionClip18, SIGNAL(triggered()), this, SLOT(PasteClip18IntoCurrentTarget())); connect(ui.actionClip19, SIGNAL(triggered()), this, SLOT(PasteClip19IntoCurrentTarget())); connect(ui.actionClip20, SIGNAL(triggered()), this, SLOT(PasteClip20IntoCurrentTarget())); // Slider connect(m_slZoomSlider, SIGNAL(valueChanged(int)), this, SLOT(SliderZoom(int))); // We also update the label when the slider moves... this is to show // the zoom value the slider will land on while it is being moved. connect(m_slZoomSlider, SIGNAL(sliderMoved(int)), this, SLOT(UpdateZoomLabel(int))); connect(m_TabManager, SIGNAL(TabCountChanged()), this, SLOT(UpdateUIOnTabCountChange())); connect(m_TabManager, SIGNAL(TabChanged(ContentTab *, ContentTab *)), this, SLOT(ChangeSignalsWhenTabChanges(ContentTab *, ContentTab *))); connect(m_TabManager, SIGNAL(TabChanged(ContentTab *, ContentTab *)), this, SLOT(UpdateUIWhenTabsSwitch())); connect(m_TabManager, SIGNAL(TabChanged(ContentTab *, ContentTab *)), this, SLOT(UpdateBrowserSelectionToTab())); connect(m_TabManager, SIGNAL(TabChanged(ContentTab *, ContentTab *)), this, SLOT(UpdatePreview())); connect(m_BookBrowser, SIGNAL(UpdateBrowserSelection()), this, SLOT(UpdateBrowserSelectionToTab())); connect(m_BookBrowser, SIGNAL(RenumberTOCContentsRequest()), m_TableOfContents, SLOT(RenumberTOCContents())); connect(m_BookBrowser, SIGNAL(RemoveTabRequest()), m_TabManager, SLOT(RemoveTab())); connect(m_BookBrowser, SIGNAL(ResourceActivated(Resource *)), this, SLOT(OpenResource(Resource *))); connect(m_BookBrowser, SIGNAL(MergeResourcesRequest(QList)), this, SLOT(MergeResources(QList))); connect(m_BookBrowser, SIGNAL(LinkStylesheetsToResourcesRequest(QList)), this, SLOT(LinkStylesheetsToResources(QList))); connect(m_BookBrowser, SIGNAL(RemoveResourcesRequest()), this, SLOT(RemoveResources())); connect(m_BookBrowser, SIGNAL(OpenFileRequest(QString, int)), this, SLOT(OpenFile(QString, int))); connect(m_TableOfContents, SIGNAL(OpenResourceRequest(Resource *, int, int, const QString &, MainWindow::ViewState, const QUrl &)), this, SLOT(OpenResource(Resource *, int, int, const QString &, MainWindow::ViewState, const QUrl &))); connect(m_ValidationResultsView, SIGNAL(OpenResourceRequest(Resource *, int, int, const QString &, MainWindow::ViewState)), this, SLOT(OpenResource(Resource *, int, int, const QString &, MainWindow::ViewState))); connect(m_TabManager, SIGNAL(OpenUrlRequest(const QUrl &)), this, SLOT(OpenUrl(const QUrl &))); connect(m_TabManager, SIGNAL(OldTabRequest(QString, HTMLResource *)), this, SLOT(CreateSectionBreakOldTab(QString, HTMLResource *))); connect(m_TabManager, SIGNAL(ToggleViewStateRequest()), this, SLOT(ToggleViewState())); connect(m_FindReplace, SIGNAL(OpenSearchEditorRequest(SearchEditorModel::searchEntry *)), this, SLOT(SearchEditorDialog(SearchEditorModel::searchEntry *))); connect(m_TabManager, SIGNAL(ShowStatusMessageRequest(const QString &, int)), this, SLOT(ShowMessageOnStatusBar(const QString &, int))); connect(m_FindReplace, SIGNAL(ShowMessageRequest(const QString &)), m_SearchEditor, SLOT(ShowMessage(const QString &))); connect(m_FindReplace, SIGNAL(ClipboardSaveRequest()), m_ClipboardHistorySelector, SLOT(SaveClipboardState())); connect(m_FindReplace, SIGNAL(ClipboardRestoreRequest()), m_ClipboardHistorySelector, SLOT(RestoreClipboardState())); connect(m_SearchEditor, SIGNAL(LoadSelectedSearchRequest(SearchEditorModel::searchEntry *)), m_FindReplace, SLOT(LoadSearch(SearchEditorModel::searchEntry *))); connect(m_SearchEditor, SIGNAL(FindSelectedSearchRequest(QList)), m_FindReplace, SLOT(FindSearch(QList))); connect(m_SearchEditor, SIGNAL(ReplaceCurrentSelectedSearchRequest(QList)), m_FindReplace, SLOT(ReplaceCurrentSearch(QList))); connect(m_SearchEditor, SIGNAL(ReplaceSelectedSearchRequest(QList)), m_FindReplace, SLOT(ReplaceSearch(QList))); connect(m_SearchEditor, SIGNAL(CountAllSelectedSearchRequest(QList)), m_FindReplace, SLOT(CountAllSearch(QList))); connect(m_SearchEditor, SIGNAL(ReplaceAllSelectedSearchRequest(QList)), m_FindReplace, SLOT(ReplaceAllSearch(QList))); connect(m_ClipboardHistorySelector, SIGNAL(PasteRequest(const QString &)), this, SLOT(PasteTextIntoCurrentTarget(const QString &))); connect(m_SelectCharacter, SIGNAL(SelectedCharacter(const QString &)), this, SLOT(PasteTextIntoCurrentTarget(const QString &))); connect(m_ClipEditor, SIGNAL(PasteSelectedClipRequest(QList)), this, SLOT(PasteClipEntriesIntoCurrentTarget(QList))); connect(m_Clips, SIGNAL(PasteClips(QList)), this, SLOT(PasteClipEntriesIntoPreviousTarget(QList))); connect(m_SearchEditor, SIGNAL(ShowStatusMessageRequest(const QString &)), this, SLOT(ShowMessageOnStatusBar(const QString &))); connect(m_ClipEditor, SIGNAL(ShowStatusMessageRequest(const QString &)), this, SLOT(ShowMessageOnStatusBar(const QString &))); connect(m_ClipEditor, SIGNAL(ClipsUpdated()), this, SLOT(UpdateClipsUI())); connect(m_IndexEditor, SIGNAL(ShowStatusMessageRequest(const QString &)), this, SLOT(ShowMessageOnStatusBar(const QString &))); // connect(m_MetaEditor, SIGNAL(ShowStatusMessageRequest(const QString &)), // this, SLOT(ShowMessageOnStatusBar(const QString &))); connect(m_SpellcheckEditor, SIGNAL(ShowStatusMessageRequest(const QString &)), this, SLOT(ShowMessageOnStatusBar(const QString &))); connect(m_SpellcheckEditor, SIGNAL(SpellingHighlightRefreshRequest()), this, SLOT(RefreshSpellingHighlighting())); connect(m_SpellcheckEditor, SIGNAL(FindWordRequest(QString)), this, SLOT(FindWord(QString))); connect(m_SpellcheckEditor, SIGNAL(UpdateWordRequest(QString, QString)), this, SLOT(UpdateWord(QString, QString))); connect(m_SpellcheckEditor, SIGNAL(ShowStatusMessageRequest(const QString &)), this, SLOT(ShowMessageOnStatusBar(const QString &))); connect(m_Reports, SIGNAL(Refresh()), this, SLOT(ReportsDialog())); connect(m_Reports, SIGNAL(OpenFileRequest(QString, int)), this, SLOT(OpenFile(QString, int))); connect(m_Reports, SIGNAL(DeleteFilesRequest(QStringList)), this, SLOT(DeleteFilenames(QStringList))); connect(m_Reports, SIGNAL(DeleteStylesRequest(QList)), this, SLOT(DeleteReportsStyles(QList))); connect(m_Reports, SIGNAL(FindText(QString)), m_FindReplace, SLOT(FindAnyText(QString))); connect(m_Reports, SIGNAL(FindTextInTags(QString)), m_FindReplace, SLOT(FindAnyTextInTags(QString))); // Plugins PluginDB *pdb = PluginDB::instance(); connect(pdb, SIGNAL(plugins_changed()), this, SLOT(loadPluginsMenu())); } void MainWindow::MakeTabConnections(ContentTab *tab) { Resource::ResourceType rType; if (tab == NULL) { return; } rType = tab->GetLoadedResource()->Type(); // Triggered connections should be disconnected in BreakTabConnections if (rType != Resource::ImageResourceType && rType != Resource::AudioResourceType && rType != Resource::VideoResourceType) { connect(ui.actionUndo, SIGNAL(triggered()), tab, SLOT(Undo())); connect(ui.actionRedo, SIGNAL(triggered()), tab, SLOT(Redo())); connect(ui.actionCut, SIGNAL(triggered()), tab, SLOT(Cut())); connect(ui.actionCopy, SIGNAL(triggered()), tab, SLOT(Copy())); connect(ui.actionPaste, SIGNAL(triggered()), tab, SLOT(Paste())); connect(ui.actionDeleteLine, SIGNAL(triggered()), tab, SLOT(DeleteLine())); connect(tab, SIGNAL(OpenClipEditorRequest(ClipEditorModel::clipEntry *)), this, SLOT(ClipEditorDialog(ClipEditorModel::clipEntry *))); } // Allow Cut, Copy, Paste to work in other TextTabs to enable basic edit icons if (rType == Resource::MiscTextResourceType || rType == Resource::OPFResourceType || rType == Resource::NCXResourceType || rType == Resource::SVGResourceType || rType == Resource::TextResourceType || rType == Resource::XMLResourceType) { connect(tab, SIGNAL(SelectionChanged()), this, SLOT(UpdateUIOnTabChanges())); } if (rType == Resource::HTMLResourceType || rType == Resource::ImageResourceType || rType == Resource::SVGResourceType) { connect(tab, SIGNAL(InsertedFileOpenedExternally(const QString &)), this, SLOT(SetInsertedFileWatchResourceFile(const QString &))); connect(tab, SIGNAL(InsertedFileSaveAs(const QUrl &)), m_BookBrowser, SLOT(SaveAsUrl(const QUrl &))); } if (rType == Resource::CSSResourceType) { connect(tab, SIGNAL(CSSUpdated()), this, SLOT(UpdatePreviewCSSRequest())); } if (rType == Resource::HTMLResourceType || rType == Resource::CSSResourceType) { connect(ui.actionBold, SIGNAL(triggered()), tab, SLOT(Bold())); connect(ui.actionItalic, SIGNAL(triggered()), tab, SLOT(Italic())); connect(ui.actionUnderline, SIGNAL(triggered()), tab, SLOT(Underline())); connect(ui.actionStrikethrough, SIGNAL(triggered()), tab, SLOT(Strikethrough())); connect(ui.actionAlignLeft, SIGNAL(triggered()), tab, SLOT(AlignLeft())); connect(ui.actionAlignCenter, SIGNAL(triggered()), tab, SLOT(AlignCenter())); connect(ui.actionAlignRight, SIGNAL(triggered()), tab, SLOT(AlignRight())); connect(ui.actionAlignJustify, SIGNAL(triggered()), tab, SLOT(AlignJustify())); connect(ui.actionTextDirectionLTR, SIGNAL(triggered()), tab, SLOT(TextDirectionLeftToRight())); connect(ui.actionTextDirectionRTL, SIGNAL(triggered()), tab, SLOT(TextDirectionRightToLeft())); connect(ui.actionTextDirectionDefault, SIGNAL(triggered()), tab, SLOT(TextDirectionDefault())); connect(tab, SIGNAL(SelectionChanged()), this, SLOT(UpdateUIOnTabChanges())); } if (rType == Resource::HTMLResourceType) { connect(ui.actionSubscript, SIGNAL(triggered()), tab, SLOT(Subscript())); connect(ui.actionSuperscript, SIGNAL(triggered()), tab, SLOT(Superscript())); connect(ui.actionInsertBulletedList, SIGNAL(triggered()), tab, SLOT(InsertBulletedList())); connect(ui.actionInsertNumberedList, SIGNAL(triggered()), tab, SLOT(InsertNumberedList())); connect(ui.actionDecreaseIndent, SIGNAL(triggered()), tab, SLOT(DecreaseIndent())); connect(ui.actionIncreaseIndent, SIGNAL(triggered()), tab, SLOT(IncreaseIndent())); connect(ui.actionShowTag, SIGNAL(triggered()), tab, SLOT(ShowTag())); connect(ui.actionRemoveFormatting, SIGNAL(triggered()), tab, SLOT(RemoveFormatting())); connect(ui.actionSplitSection, SIGNAL(triggered()), tab, SLOT(SplitSection())); connect(ui.actionInsertSGFSectionMarker, SIGNAL(triggered()), tab, SLOT(InsertSGFSectionMarker())); connect(ui.actionInsertClosingTag, SIGNAL(triggered()), tab, SLOT(InsertClosingTag())); connect(ui.actionGoToLinkOrStyle, SIGNAL(triggered()), tab, SLOT(GoToLinkOrStyle())); connect(ui.actionAddToIndex, SIGNAL(triggered()), tab, SLOT(AddToIndex())); connect(ui.actionAddMisspelledWord, SIGNAL(triggered()), tab, SLOT(AddMisspelledWord())); connect(ui.actionIgnoreMisspelledWord, SIGNAL(triggered()), tab, SLOT(IgnoreMisspelledWord())); connect(this, SIGNAL(SettingsChanged()), tab, SLOT(LoadSettings())); connect(tab, SIGNAL(OpenIndexEditorRequest(IndexEditorModel::indexEntry *)), this, SLOT(IndexEditorDialog(IndexEditorModel::indexEntry *))); connect(tab, SIGNAL(ViewImageRequest(const QUrl &)), this, SLOT(ViewImageDialog(const QUrl &))); connect(tab, SIGNAL(GoToLinkedStyleDefinitionRequest(const QString &, const QString &)), this, SLOT(GoToLinkedStyleDefinition(const QString &, const QString &))); connect(tab, SIGNAL(BookmarkLinkOrStyleLocationRequest()), this, SLOT(BookmarkLinkOrStyleLocation())); connect(tab, SIGNAL(ClipboardSaveRequest()), m_ClipboardHistorySelector, SLOT(SaveClipboardState())); connect(tab, SIGNAL(ClipboardRestoreRequest()), m_ClipboardHistorySelector, SLOT(RestoreClipboardState())); connect(tab, SIGNAL(SpellingHighlightRefreshRequest()), this, SLOT(RefreshSpellingHighlighting())); connect(tab, SIGNAL(InsertFileRequest()), this, SLOT(InsertFileDialog())); connect(tab, SIGNAL(UpdatePreview()), this, SLOT(UpdatePreviewRequest())); connect(tab, SIGNAL(UpdatePreviewImmediately()), this, SLOT(UpdatePreview())); connect(tab, SIGNAL(InspectElement()), this, SLOT(InspectHTML())); } if (rType != Resource::AudioResourceType && rType != Resource::VideoResourceType) { connect(ui.actionPrintPreview, SIGNAL(triggered()), tab, SLOT(PrintPreview())); connect(ui.actionPrint, SIGNAL(triggered()), tab, SLOT(Print())); connect(tab, SIGNAL(ContentChanged()), m_Book.data(), SLOT(SetModified())); connect(tab, SIGNAL(UpdateCursorPosition(int, int)), this, SLOT(UpdateCursorPositionLabel(int, int))); connect(tab, SIGNAL(ZoomFactorChanged(float)), this, SLOT(UpdateZoomLabel(float))); connect(tab, SIGNAL(ZoomFactorChanged(float)), this, SLOT(UpdateZoomSlider(float))); connect(tab, SIGNAL(ShowStatusMessageRequest(const QString &)), this, SLOT(ShowMessageOnStatusBar(const QString &))); connect(tab, SIGNAL(MarkSelectionRequest()), this, SLOT(MarkSelection())); connect(tab, SIGNAL(ClearMarkedTextRequest()), this, SLOT(ClearMarkedText())); } } void MainWindow::BreakTabConnections(ContentTab *tab) { if (tab == NULL) { return; } disconnect(ui.actionUndo, 0, tab, 0); disconnect(ui.actionRedo, 0, tab, 0); disconnect(ui.actionCut, 0, tab, 0); disconnect(ui.actionCopy, 0, tab, 0); disconnect(ui.actionPaste, 0, tab, 0); disconnect(ui.actionDeleteLine, 0, tab, 0); disconnect(ui.actionBold, 0, tab, 0); disconnect(ui.actionItalic, 0, tab, 0); disconnect(ui.actionUnderline, 0, tab, 0); disconnect(ui.actionStrikethrough, 0, tab, 0); disconnect(ui.actionSubscript, 0, tab, 0); disconnect(ui.actionSuperscript, 0, tab, 0); disconnect(ui.actionAlignLeft, 0, tab, 0); disconnect(ui.actionAlignCenter, 0, tab, 0); disconnect(ui.actionAlignRight, 0, tab, 0); disconnect(ui.actionAlignJustify, 0, tab, 0); disconnect(ui.actionInsertBulletedList, 0, tab, 0); disconnect(ui.actionInsertNumberedList, 0, tab, 0); disconnect(ui.actionDecreaseIndent, 0, tab, 0); disconnect(ui.actionIncreaseIndent, 0, tab, 0); disconnect(ui.actionTextDirectionLTR, 0, tab, 0); disconnect(ui.actionTextDirectionRTL, 0, tab, 0); disconnect(ui.actionTextDirectionDefault, 0, tab, 0); disconnect(ui.actionShowTag, 0, tab, 0); disconnect(ui.actionRemoveFormatting, 0, tab, 0); disconnect(ui.actionSplitSection, 0, tab, 0); disconnect(ui.actionInsertSGFSectionMarker, 0, tab, 0); disconnect(ui.actionInsertClosingTag, 0, tab, 0); disconnect(ui.actionGoToLinkOrStyle, 0, tab, 0); disconnect(ui.actionAddMisspelledWord, 0, tab, 0); disconnect(ui.actionIgnoreMisspelledWord, 0, tab, 0); disconnect(ui.actionPrintPreview, 0, tab, 0); disconnect(ui.actionPrint, 0, tab, 0); disconnect(ui.actionAddToIndex, 0, tab, 0); disconnect(ui.actionMarkForIndex, 0, tab, 0); disconnect(tab, 0, this, 0); disconnect(tab, 0, m_Book.data(), 0); disconnect(tab, 0, m_BookBrowser, 0); disconnect(tab, 0, m_ClipboardHistorySelector, 0); } Sigil-0.9.9/src/MainUI/MainWindow.h000066400000000000000000000661061321676412500167560ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012-2015 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2009-2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SIGIL_H #define SIGIL_H #include #include #include "ui_main.h" #include "BookManipulation/Book.h" #include "BookManipulation/BookReports.h" #include "Dialogs/ClipboardHistorySelector.h" #include "Dialogs/IndexEditor.h" #include "Dialogs/Reports.h" #include "Dialogs/SpellcheckEditor.h" #include "Dialogs/ViewImage.h" #include "MainUI/FindReplace.h" #include "MainUI/TOCModel.h" #include "Misc/CSSInfo.h" #include "Misc/PasteTarget.h" #include "Misc/SettingsStore.h" #include "Misc/ValidationResult.h" #include "MiscEditors/ClipEditorModel.h" #include "MiscEditors/IndexEditorModel.h" #include "MiscEditors/SearchEditorModel.h" #include "Tabs/ContentTab.h" const int MAX_RECENT_FILES = 5; const int STATUSBAR_MSG_DISPLAY_TIME = 7000; class QComboBox; class QLabel; class QSignalMapper; class QSlider; class QTimer; class FindReplace; class TabManager; class BookBrowser; class TableOfContents; class ValidationResultsView; class PreviewWindow; class SearchEditor; class ClipEditor; class ClipsWindow; class SelectCharacter; class ViewImage; class FlowTab; /** * @mainpage * The conversion of all source comments to Doxygen format * is in progress. Some files have been converted, others have not. * * Be patient. */ /** * The main window of the application. * Presents the main user interface with menus, toolbars, editing panes * and side panes like the Book Browser. * * This window is the main entry point to all functionality. */ class MainWindow : public QMainWindow { Q_OBJECT public: /** * Constructor. * * @param openfilepath The path to the file that the window * should load (new file loaded if empty). * @param parent The window's parent object. * @param flags The flags used to modify window behavior. */ MainWindow(const QString &openfilepath = QString(), bool is_internal = false, QWidget *parent = 0, Qt::WindowFlags flags = 0); ~MainWindow(); /** * The book currently being edited. * * @return A shared pointer to the book. */ QSharedPointer GetCurrentBook(); /** * get BookBrowser for this book * * @return A pointer to the BookBrowser */ BookBrowser *GetBookBrowser(); /** * Returns a reference to the current content tab. * * @return A reference to the current content tab. */ ContentTab *GetCurrentContentTab(); FlowTab *GetCurrentFlowTab(); /** * Returns a list of valid selected HTML resources * * @return List of valid selected HTML resources */ QList GetValidSelectedHTMLResources(); /** * Returns a list of all HTML resources in book browser order * * @return List of all HTML resources in book browser order */ QList GetAllHTMLResources(); /** * Select resources in the Book Browser * */ void SelectResources(QList resources); /** * Describes the type of the View mode * currently used in FlowTab. */ enum ViewState { ViewState_Unknown = 0, /**< Default non view that we don't know or care what it is */ ViewState_BookView = 10, /**< The WYSIWYG view. */ ViewState_CodeView = 30 /**< The XHTML code editing view. */ }; /** * The location of the last bookmark. */ struct LocationBookmark { QString filename; MainWindow::ViewState view_state; QString bv_caret_location_update; int cv_cursor_position; }; /** * Returns the current view state. * * @return The current view state. */ MainWindow::ViewState GetViewState(); void CloseAllTabs(); void SaveTabData(); SearchEditorModel *GetSearchEditorModel(); /** * Returns a map with keys being extensions of file types * we can load, and the values being filters for use in file dialogs. * * @return The load dialog filters. */ static const QMap GetLoadFiltersMap(); /** * Loads a book from the file specified. * * @param fullfilepath The path to the file to load. */ bool LoadFile(const QString &fullfilepath, bool is_internal = false); void SetValidationResults(const QList &results); static void clearMemoryCaches(); /** * Handle warning the user about undefined url fragments when splitting/merging resources. */ bool ProceedWithUndefinedUrlFragments(); void sizeMenuIcons(); public slots: void AnyCodeView(); void OpenUrl(const QUrl &url); /** * Opens the specified resource in the specified view state. */ void OpenResource(Resource *resource, int line_to_scroll_to = -1, int position_to_scroll_to = -1, const QString &caret_location_to_scroll_to = QString(), MainWindow::ViewState view_state = MainWindow::ViewState_Unknown, const QUrl &fragment = QUrl(), bool precede_current_tab = false); void OpenResourceAndWaitUntilLoaded(Resource *resource, int line_to_scroll_to = -1, int position_to_scroll_to = -1, const QString &caret_location_to_scroll_to = QString(), MainWindow::ViewState view_state = MainWindow::ViewState_Unknown, const QUrl &fragment = QUrl(), bool precede_current_tab = false); void UpdateManifestProperties(); void GenerateNCXFromNav(); void CreateIndex(); void runPlugin(QAction *action); void ResourcesAddedOrDeleted(); signals: void SettingsChanged(); protected: void showEvent(QShowEvent *event); /** * Workaround for Qt 4.8 bug, which does not save/restore window state * correctly if maximized at the time of calling saveGeometry(). */ void moveEvent(QMoveEvent *event); void resizeEvent(QResizeEvent *event); /** * Overrides the closeEvent handler so we can check * for saved status before actually closing. * * @param event The close event. */ void closeEvent(QCloseEvent *event); private slots: void AddCover(); /** * Implements New action functionality. */ void New(); /** * Implements Open action functionality. */ void Open(); /** * Implements Open recent file action functionality. */ void OpenRecentFile(); /** * Implements Save action functionality. */ bool Save(); /** * Implements Save As action functionality. */ bool SaveAs(); /** * Implements Save A Copy action functionality. */ bool SaveACopy(); void Exit(); void ShowMessageOnStatusBar(const QString &message = "", int millisecond_duration = STATUSBAR_MSG_DISPLAY_TIME); void ShowLastOpenFileWarnings(); /** * Implements Find action functionality. */ void Find(); /** * Implements Go To Line action functionality. */ void GoToLine(); /** * Implements Zoom In action functionality. */ void ZoomIn(); /** * Implements Zoom Out action functionality. */ void ZoomOut(); /** * Implements Zoom Reset action functionality. */ void ZoomReset(); void IndexEditorDialog(IndexEditorModel::indexEntry *index_entry = NULL); void SpellcheckEditorDialog(); void ReportsDialog(); bool DeleteCSSStyles(const QString &filename, QList css_selectors); void DeleteUnusedMedia(); void DeleteUnusedStyles(); void InsertFileDialog(); void InsertSpecialCharacter(); void InsertId(); void InsertHyperlink(); void MarkForIndex(); /** * Track the last active control that had focus in the MainWindow that * is a valid PasteTarget. */ void ApplicationFocusChanged(QWidget *old, QWidget *now); /** * Quick Launch Plugins via icon button */ void QuickLaunchPlugin(int i); /** * Some controls (CodeView, BookView and combo boxes in F&R) inherit PasteTarget * to allow various modeless/popup dialogs like Clipboard History, Clip Editor and * Insert Special Characters to insert text into the focused "PasteTarget" control. * These two slots will delegate the relevant signal to the current target if any. */ void PasteTextIntoCurrentTarget(const QString &text); void PasteClipEntriesIntoCurrentTarget(const QList &clips); void PasteClipEntriesIntoPreviousTarget(const QList &clips); void PasteClipIntoCurrentTarget(int clip_number); void PasteClip1IntoCurrentTarget(); void PasteClip2IntoCurrentTarget(); void PasteClip3IntoCurrentTarget(); void PasteClip4IntoCurrentTarget(); void PasteClip5IntoCurrentTarget(); void PasteClip6IntoCurrentTarget(); void PasteClip7IntoCurrentTarget(); void PasteClip8IntoCurrentTarget(); void PasteClip9IntoCurrentTarget(); void PasteClip10IntoCurrentTarget(); void PasteClip11IntoCurrentTarget(); void PasteClip12IntoCurrentTarget(); void PasteClip13IntoCurrentTarget(); void PasteClip14IntoCurrentTarget(); void PasteClip15IntoCurrentTarget(); void PasteClip16IntoCurrentTarget(); void PasteClip17IntoCurrentTarget(); void PasteClip18IntoCurrentTarget(); void PasteClip19IntoCurrentTarget(); void PasteClip20IntoCurrentTarget(); /** * Implements the set BookView functionality. */ void BookView(); /** * Implements the set CodeView functionality. */ void CodeView(); /** * Implements Meta Editor action functionality. */ void MetaEditorDialog(); /** * Implements Search Editor Dialog functionality. */ void SearchEditorDialog(SearchEditorModel::searchEntry *search_entry = NULL); void ClipEditorDialog(ClipEditorModel::clipEntry *clip_entry = NULL); /** * Implements User Guide action functionality. */ void UserGuide(); /** * Implements Donate action functionality. */ void Donate(); /** * Implements Sigil Website action functionality. */ void SigilWebsite(); /** * Implements About action functionality. */ void AboutDialog(); /** * Implements Preferences action functionality. */ void PreferencesDialog(); /** * Implements Preferences action functionality. */ void ManagePluginsDialog(); /** * Implements Validate Epub action functionality. */ void WellFormedCheckEpub(); void ValidateStylesheetsWithW3C(); bool CharLessThan(const QChar &s1, const QChar &s2); /** * Disconnects all signals to the old tab * and reconnects them to the new tab when the * current tab is changed. * * @old_tab The tab that was previously in use. * @new_tab The tab that is becoming current. */ void ChangeSignalsWhenTabChanges(ContentTab *old_tab, ContentTab *new_tab); /** * Updates the toolbars/menus based on current state * and updates the tab state if requested */ void UpdateViewState(bool set_tab_state = true); /** * Updates the toolbars based on current tab state and changes. */ void UpdateUIOnTabChanges(); /** * Updates the menus based on the number of tabs open. */ void UpdateUIOnTabCountChange(); /** * Performs needed changes when the user switches tabs. */ void UpdateUIWhenTabsSwitch(); /** * Set initial state for actions in Book View */ void SetStateActionsBookView(); /** * Set initial state for actions in Code View */ void SetStateActionsCodeView(); /** * Set initial state for actions in CSS files */ void SetStateActionsCSSView(); /** * Set initial state for actions in Raw View */ void SetStateActionsRawView(); /** * Set initial state for actions in Static View * (everything dead, used for viewing images etc.) */ void SetStateActionsStaticView(); void UpdatePreviewRequest(); void UpdatePreviewCSSRequest(); void UpdatePreview(); void InspectHTML(); /** * Updates the cursor postion label to refelect the position of the * cursor within the text. * * Use a negative value to to denote an unknown or invalid value. * * @param line The line the currsor is currently at. * @param column The column within the line that the cursor is currently at. */ void UpdateCursorPositionLabel(int line, int column); /** * Zooms the current view with the new zoom slider value. * * @param slider_value The new value from the zoom slider. */ void SliderZoom(int slider_value); /** * Updates the zoom slider to reflect the new zoom factor. * * @new_zoom_factor The new zoom factor. */ void UpdateZoomSlider(float new_zoom_factor); /** * Updates the zoom label to reflect the state of the zoom slider. * This is needed so the user can see to what zoom value the slider * is being dragged to. * * @param slider_value The new value from the zoom slider. */ void UpdateZoomLabel(int slider_value); /** * Updates the zoom label to reflect the new zoom factor. */ void UpdateZoomLabel(float new_zoom_factor); /** * Creates a new tab from the section splitting operation. * * @param content The content of the "old" tab/resource. * @param originating_resource The original resource from which the content * was extracted to create the "old" tab/resource. * @see FlowTab::SplitSection, FlowTab::OldTabRequest, * BookViewEditor::SplitSection, Book::CreateSectionBreakOriginalResource */ void CreateSectionBreakOldTab(QString content, HTMLResource *originating_resource); /** * Updates the selection/highlight in the Book Browser to the resource in the current tab * * @see BookBrowser::UpdateSelection */ void UpdateBrowserSelectionToTab(); /** * Creates new section/XHTML documents. */ void SplitOnSGFSectionMarkers(); void SetAutoSpellCheck(bool new_state); /** * Reformats all the book's html resources using Book.cpp's ReformatAllHTML() function. */ void MendPrettifyHTML(); void MendHTML(); void ClearIgnoredWords(); void RefreshSpellingHighlighting(); void MergeResources(QList resources); void LinkStylesheetsToResources(QList resources); void ResourceUpdatedFromDisk(Resource *resource); void UpdateWord(QString old_word, QString new_word); void FindWord(QString word); /** * Return a map of stylesheets included/excluded for all given resources */ QList> GetStylesheetsMap(QList resources); /** * Return the list of stylesheets linked to the given resource */ QStringList GetStylesheetsAlreadyLinked(Resource *resource); void RemoveResources(QList resources = QList()); void GenerateToc(); void EditTOCDialog(); void CreateHTMLTOC(); void ChangeCasing(int casing_mode); void MarkSelection(); void ClearMarkedText(ContentTab *old_tab = NULL); void ToggleViewState(); void ApplyHeadingStyleToTab(const QString &heading_type); void SetPreserveHeadingAttributes(bool new_state); void GoBackFromLinkOrStyle(); void GoToBookmark(LocationBookmark *locationBookmark); void GoToLinkedStyleDefinition(const QString &element_name, const QString &style_class_name); void ViewImageDialog(const QUrl &url); void BookmarkLocation(); void BookmarkLinkOrStyleLocation(); void GoToPreviewLocation(); void ShowPasteClipboardHistoryDialog(); void SetInsertedFileWatchResourceFile(const QString &pathname); void DeleteReportsStyles(QList reports_styles_to_delete); void DeleteFilenames(QStringList files_to_delete); void OpenFile(QString filename, int line = -1); void UpdateClipsUI(); /** * support for plugins */ void loadPluginsMenu(); void unloadPluginsMenu(); private: void updateToolTipsOnPluginIcons(); void UpdateClipButton(int clip_number, QAction *ui_action); void InsertFiles(const QStringList &selected_images); void InsertFilesFromDisk(); void ResetLinkOrStyleBookmark(); void ResetLocationBookmark(LocationBookmark *locationBookmark); /** * Reads all the stored application settings like * window position, geometry etc. */ void ReadSettings(); /** * Writes all the stored application settings like * window position, geometry etc. */ void WriteSettings(); void SetDefaultViewState(); /** * Gets called on possible saves and asks the user * does he want to save. * If the user chooses SAVE, we save and continue * If the user chooses DISCARD, we don't save and continue * If the user chooses CANCEL, we don't save and stop what we were doing * * @return \c true if we are allowed to proceed with the current operation. */ bool MaybeSaveDialogSaysProceed(); /** * Makes the provided book the current one. * * @param new_book The new book for editing. */ void SetNewBook(QSharedPointer new_book); /** * Creates a new, empty book and replaces * the current one with it. */ void CreateNewBook(); /** * Saves the current book to the file specified. * * @param fullfilepath The path to save to. */ bool SaveFile(const QString &fullfilepath, bool update_current_filename = true); /** * Performs zoom operations in the views using the default * zoom step. Setting zoom_in to \c true zooms the views *in*, * and a setting of \c false zooms them *out*. The zoom value * is first wrapped to the nearest zoom step (relative to the zoom direction). * * @param zoom_in If \c true, zooming in. Otherwise zooming out. */ void ZoomByStep(bool zoom_in); /** * Sets the provided zoom factor on the active view editor. * Valid values are between ZOOM_MAX and ZOOM_MIN, others are ignored. * * @param new_zoom_factor The new zoom factor for the view. */ void ZoomByFactor(float new_zoom_factor); /** * Converts a zoom factor to a value in the zoom slider range. * * @param zoom_factor The zoom factor being converted. * @return The converted slider range value. */ static int ZoomFactorToSliderRange(float zoom_factor); /** * Converts a value in the zoom slider range to a zoom factor. * * @param slider_range_value The slider range value being converted. * @return The converted zoom factor value. */ static float SliderRangeToZoomFactor(int slider_range_value); float GetZoomFactor(); /** * Returns a map with keys being extensions of file types * we can save, and the values being filters for use in file dialogs. * * @return The save dialog filters. */ static const QMap GetSaveFiltersMap(); /** * Sets the current file in the window title and also * updates the recent files list. * * @param fullfilepath The path to the currently edited file. */ void UpdateUiWithCurrentFile(const QString &fullfilepath); /** * Selects the appropriate entry in the heading combo box * based on the provided name of the element. * * @param element_name The name of the currently selected element. */ void SelectEntryOnHeadingToolbar(const QString &element_name); /** * Creates and adds the recent files actions * to the File menu. */ void CreateRecentFilesActions(); /** * Updates the recent files actions when the * list of files to be listed has changed. */ void UpdateRecentFileActions(); /** * Performs specific changes based on the OS platform. */ void PlatformSpecificTweaks(); /** * Extends the UI with extra widgets and tweaks. * Qt Designer is not able to create all the widgets * we want in the MainWindow, so we use this function * to extend the UI created by the Designer. */ void ExtendUI(); /** * Extends all the icons with 16px versions. * The prevents the use of automatic, blurry, scaled * down versions that Qt creates. */ void ExtendIconSizes(); /** * Loads the initial file provided to the MainWindow on creation. * If a file was provided to be loaded with this main window instance, * that file is loaded; if not, or it can't be opened, an empty file * is loaded. * * @param openfilepath The path to the file to load. Can be empty. */ void LoadInitialFile(const QString &openfilepath, bool is_internal = false); /** * Connects all the required signals to their slots. */ void ConnectSignalsToSlots(); /** * Connects all the UI signals to the provided tab. * * @param tab The tab to connect the signals. */ void MakeTabConnections(ContentTab *tab); /** * Disconnects all the UI signals from the provided tab. * * @param tab The tab from which to disconnect the signals. */ void BreakTabConnections(ContentTab *tab); /** * Sets the view state of the current tab to view_state * * @param view_state - The view state to set. */ void SetViewState(MainWindow::ViewState view_state); void SetupPreviewTimer(); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * Warning messages to be displayed to the user after opening a book * if non-fatal errors occurred during loading. When Sigil is started * with a filename on command line, we must store these for display * after the UI main window is visible. */ QStringList m_LastOpenFileWarnings; bool m_IsInitialLoad; /** * The path to the current file loaded. */ QString m_CurrentFilePath; /** * The name of the current file loaded. */ QString m_CurrentFileName; /** * The book currently being worked on. */ QSharedPointer m_Book; /** * The last folder from which the user opened or saved a file. */ QString m_LastFolderOpen; /** * The last filename used for Save As Copy */ QString m_SaveACopyFilename; /** * The last file selected from Insert File, per book */ QString m_LastInsertedFile; /** * The list of full filepaths * for the last MAX_RECENT_FILES files. * \c static because on Mac we have many MainWindows */ static QStringList s_RecentFiles; /** * Array of recent files actions that are in the File menu. */ QAction *m_RecentFileActions[ MAX_RECENT_FILES ]; /** * The tab managing object. */ TabManager *m_TabManager; /** * The Book Browser pane that lists all the files in the book. */ BookBrowser *m_BookBrowser; ClipsWindow *m_Clips; /** * The find / replace widget. */ FindReplace *m_FindReplace; /** * The Table of Contents pane that displays a rendered view of the NCX. */ TableOfContents *m_TableOfContents; /** * The Validation Results pane that lists all the validation problems. */ ValidationResultsView *m_ValidationResultsView; PreviewWindow *m_PreviewWindow; /** * The lable that displays the cursor position. * Line and column. */ QLabel *m_lbCursorPosition; /** * The slider which the user can use to zoom. */ QSlider *m_slZoomSlider; /** * The label that displays the current zoom factor. */ QLabel *m_lbZoomLabel; /** * A map with keys being extensions of file types * we can load, and the values being filters for use in file dialogs. */ const QMap c_SaveFilters; /** * A map with keys being extensions of file types * we can save, and the values being filters for use in file dialogs. */ const QMap c_LoadFilters; /** * Holds the view state for new/switched tabs */ MainWindow::ViewState m_ViewState; /** * Collects signals and sends specific parameters to the connected slots. */ QSignalMapper *m_headingMapper; QSignalMapper *m_casingChangeMapper; QSignalMapper *m_pluginMapper; /** * The Search Manager dialog */ SearchEditor *m_SearchEditor; /** * The storage for SearchEditor */ SearchEditorModel *m_SearchEditorModel; ClipEditor *m_ClipEditor; IndexEditor *m_IndexEditor; SpellcheckEditor *m_SpellcheckEditor; SelectCharacter *m_SelectCharacter; ViewImage *m_ViewImage; Reports *m_Reports; bool m_preserveHeadingAttributes; LocationBookmark *m_LinkOrStyleBookmark; ClipboardHistorySelector *m_ClipboardHistorySelector; int m_ClipboardHistoryLimit; /** * The last widget in this window that had focus that inherited PasteTarget. */ PasteTarget *m_LastPasteTarget; bool m_ZoomPreview; /** * Workaround for Qt 4.8 bug, to track the last known window size when not maximized. */ QByteArray m_LastWindowSize; QTimer m_PreviewTimer; HTMLResource *m_PreviousHTMLResource; QString m_PreviousHTMLText; QList m_PreviousHTMLLocation; /** * dynamically updated plugin menus and actions */ QMenu *m_menuPlugins; QMenu *m_menuPluginsInput; QMenu *m_menuPluginsOutput; QMenu *m_menuPluginsEdit; QMenu *m_menuPluginsValidation; QAction *m_actionManagePlugins; QStringList m_pluginList; bool m_SaveCSS; /** * Holds all the widgets Qt Designer created for us. */ Ui::MainWindow ui; }; #endif // SIGIL_H Sigil-0.9.9/src/MainUI/OPFModel.cpp000066400000000000000000000500041321676412500166300ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include "BookManipulation/Book.h" #include "BookManipulation/FolderKeeper.h" #include "MainUI/OPFModel.h" #include "MainUI/OPFModelItem.h" #include "Misc/Utility.h" #include "ResourceObjects/Resource.h" #include "ResourceObjects/HTMLResource.h" #include "ResourceObjects/OPFResource.h" #include "ResourceObjects/NCXResource.h" #include "ResourceObjects/NavProcessor.h" #include "sigil_constants.h" #include "sigil_exception.h" #include "SourceUpdates/UniversalUpdates.h" static const QList FORBIDDEN_FILENAME_CHARS = QList() << '<' << '>' << ':' << '"' << '/' << '\\' << '|' << '?' << '*'; OPFModel::OPFModel(QObject *parent) : QStandardItemModel(parent), m_RefreshInProgress(false), m_Book(NULL), m_TextFolderItem(new QStandardItem("Text")), m_StylesFolderItem(new QStandardItem("Styles")), m_ImagesFolderItem(new QStandardItem("Images")), m_FontsFolderItem(new QStandardItem("Fonts")), m_MiscFolderItem(new QStandardItem("Misc")), m_AudioFolderItem(new QStandardItem("Audio")), m_VideoFolderItem(new QStandardItem("Video")) { connect(this, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(RowsRemovedHandler(const QModelIndex &, int, int))); connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); QList items; items.append(m_TextFolderItem); items.append(m_StylesFolderItem); items.append(m_ImagesFolderItem); items.append(m_FontsFolderItem); items.append(m_AudioFolderItem); items.append(m_VideoFolderItem); items.append(m_MiscFolderItem); QIcon folder_icon = QFileIconProvider().icon(QFileIconProvider::Folder); foreach(QStandardItem * item, items) { item->setIcon(folder_icon); item->setEditable(false); item->setDragEnabled(false); item->setDropEnabled(false); appendRow(item); } // We enable reordering of files in the text folder m_TextFolderItem->setDropEnabled(true); invisibleRootItem()->setDropEnabled(false); } void OPFModel::SetBook(QSharedPointer book) { m_Book = book; connect(this, SIGNAL(BookContentModified()), m_Book.data(), SLOT(SetModified())); Refresh(); } void OPFModel::Refresh() { m_RefreshInProgress = true; InitializeModel(); SortFilesByFilenames(); SortHTMLFilesByReadingOrder(); m_RefreshInProgress = false; } void OPFModel::SortHTML(QList index_list) { m_RefreshInProgress = true; SortHTMLFilesByAlphanumeric(index_list); UpdateHTMLReadingOrders(); m_RefreshInProgress = false; } QModelIndex OPFModel::GetFirstHTMLModelIndex() { if (!m_TextFolderItem->hasChildren()) { throw(NoHTMLFiles("")); } return m_TextFolderItem->child(0)->index(); } QModelIndex OPFModel::GetTextFolderModelIndex() { return m_TextFolderItem->index(); } QList OPFModel::GetResourceListInFolder(Resource *resource) { return GetResourceListInFolder(resource->Type()); } QList OPFModel::GetResourceListInFolder(Resource::ResourceType resource_type) { QList resources; QStandardItem *folder = NULL; if (resource_type == Resource::HTMLResourceType) { folder = m_TextFolderItem; } else if (resource_type == Resource::CSSResourceType) { folder = m_StylesFolderItem; } else if (resource_type == Resource::ImageResourceType || resource_type == Resource::SVGResourceType) { folder = m_ImagesFolderItem; } else if (resource_type == Resource::FontResourceType) { folder = m_FontsFolderItem; } else if (resource_type == Resource::MiscTextResourceType) { folder = m_MiscFolderItem; } else if (resource_type == Resource::AudioResourceType) { folder = m_AudioFolderItem; } else if (resource_type == Resource::VideoResourceType) { folder = m_VideoFolderItem; } else if (resource_type != Resource::OPFResourceType && resource_type != Resource::NCXResourceType) { folder = m_MiscFolderItem; } if (folder) { for (int i = 0; i < folder->rowCount(); ++i) { QStandardItem *item = folder->child(i); QString identifier = item->data().toString(); Resource *resource = m_Book->GetFolderKeeper()->GetResourceByIdentifier(identifier); resources.append(resource); } } return resources; } // Get the index of the given resource regardless of folder QModelIndex OPFModel::GetModelItemIndex(Resource *resource, IndexChoice indexChoice) { Resource::ResourceType resourceType = resource->Type(); QStandardItem *folder = NULL; if (resourceType == Resource::OPFResourceType || resourceType == Resource::NCXResourceType) { folder = invisibleRootItem(); } else { for (int i = 0; i < invisibleRootItem()->rowCount() && folder == NULL; ++i) { QStandardItem *child = invisibleRootItem()->child(i); if ((child == m_TextFolderItem && resourceType == Resource::HTMLResourceType) || (child == m_ImagesFolderItem && (resourceType == Resource::ImageResourceType || resourceType == Resource::SVGResourceType)) || (child == m_StylesFolderItem && (resourceType == Resource::CSSResourceType)) || (child == m_FontsFolderItem && resourceType == Resource::FontResourceType) || (child == m_MiscFolderItem && (resourceType == Resource::GenericResourceType || resourceType == Resource::XMLResourceType)) || (child == m_AudioFolderItem && resourceType == Resource::AudioResourceType) || (child == m_VideoFolderItem && resourceType == Resource::VideoResourceType) ) { folder = child; } } } return GetModelFolderItemIndex(folder, resource, indexChoice); } // Get the index of the given resource in a specific folder QModelIndex OPFModel::GetModelFolderItemIndex(QStandardItem const *folder, Resource *resource, IndexChoice indexChoice) { if (folder != NULL) { int rowCount = folder->rowCount(); for (int i = 0; i < rowCount ; ++i) { QStandardItem *item = folder->child(i); const QString &identifier = item->data().toString(); if (!identifier.isEmpty() && identifier == resource->GetIdentifier()) { if (folder != invisibleRootItem()) { if (indexChoice == IndexChoice_Previous && i > 0) { i--; } else if (indexChoice == IndexChoice_Next && (i + 1 < rowCount)) { i++; } } return index(i, 0, folder->index()); } } } return index(0, 0); } Resource::ResourceType OPFModel::GetResourceType(QStandardItem const *item) { Q_ASSERT(item); if (item == m_TextFolderItem) { return Resource::HTMLResourceType; } if (item == m_StylesFolderItem) { return Resource::CSSResourceType; } if (item == m_ImagesFolderItem) { return Resource::ImageResourceType; } if (item == m_FontsFolderItem) { return Resource::FontResourceType; } if (item == m_MiscFolderItem) { return Resource::GenericResourceType; } if (item == m_AudioFolderItem) { return Resource::AudioResourceType; } if (item == m_VideoFolderItem) { return Resource::VideoResourceType; } const QString &identifier = item->data().toString(); return m_Book->GetFolderKeeper()->GetResourceByIdentifier(identifier)->Type(); } void OPFModel::sort(int column, Qt::SortOrder order) { return; } Qt::DropActions OPFModel::supportedDropActions() const { return Qt::MoveAction; } // This function initiates HTML reading order updating when the user // moves the HTML files in the Book Browser. // You would expect the use of QAbstractItemModel::rowsMoved, but that // signal is never emitted because in QStandardItemModel, row moves // are actually handled by creating a copy of the row in the new position // and then deleting the old row. // Yes, it's stupid and violates the guarantees of the QAbstractItemModel // class. Oh and it's not documented anywhere. Nokia FTW. // This also handles actual HTML item deletion. void OPFModel::RowsRemovedHandler(const QModelIndex &parent, int start, int end) { if (m_RefreshInProgress || itemFromIndex(parent) != m_TextFolderItem) { return; } UpdateHTMLReadingOrders(); // File icons disappear on some platforms when re-ordering html files via // drag and drop in the Book Browser TreeView without this extra refresh. Refresh(); } void OPFModel::ItemChangedHandler(QStandardItem *item) { Q_ASSERT(item); const QString &identifier = item->data().toString(); if (!identifier.isEmpty()) { const QString &new_filename = item->text(); Resource *resource = m_Book->GetFolderKeeper()->GetResourceByIdentifier(identifier); if (new_filename != resource->Filename()) { if (!Utility::use_filename_warning(new_filename)) { item->setText(resource->Filename()); return; } RenameResource(resource, new_filename); } } emit ResourceRenamed(); } bool OPFModel:: RenameResource(Resource *resource, const QString &new_filename) { QList resources; QStringList filenames; resources.append(resource); filenames.append(new_filename); return RenameResourceList(resources, filenames); } bool OPFModel:: RenameResourceList(QList resources, QList new_filenames) { QApplication::setOverrideCursor(Qt::WaitCursor); QStringList not_renamed; QHash update; foreach(Resource * resource, resources) { const QString &old_bookrelpath = resource->GetRelativePathToRoot(); QString old_filename = resource->Filename(); QString extension = old_filename.right(old_filename.length() - old_filename.lastIndexOf('.')); QString new_filename = new_filenames.first(); new_filenames.removeFirst(); QString new_filename_with_extension = new_filename; if (!new_filename.contains('.')) { new_filename_with_extension.append(extension); } if (old_filename == new_filename_with_extension) { continue; } if (!FilenameIsValid(old_filename, new_filename_with_extension)) { not_renamed.append(resource->Filename()); continue; } bool rename_success = resource->RenameTo(new_filename_with_extension); if (!rename_success) { not_renamed.append(resource->Filename()); continue; } update[ old_bookrelpath ] = "../" + resource->GetRelativePathToOEBPS(); } if (update.count() > 0) { UniversalUpdates::PerformUniversalUpdates(true, m_Book->GetFolderKeeper()->GetResourceList(), update); emit BookContentModified(); } Refresh(); QApplication::restoreOverrideCursor(); if (not_renamed.isEmpty()) { return true; } return false; } void OPFModel::InitializeModel() { Q_ASSERT(m_Book); ClearModel(); QList resources = m_Book->GetFolderKeeper()->GetResourceList(); QHash reading_order_all = m_Book->GetOPF()->GetReadingOrderAll(resources); QString version = m_Book->GetConstOPF()->GetEpubVersion(); QHash semantic_type_all; QHash manifest_properties_all; if (version.startsWith('3')) { NavProcessor navproc(m_Book->GetConstOPF()->GetNavResource()); semantic_type_all = navproc.GetLandmarkNameForPaths(); manifest_properties_all = m_Book->GetOPF()->GetManifestPropertiesForPaths(); } else { semantic_type_all = m_Book->GetOPF()->GetGuideSemanticNameForPaths(); } foreach(Resource * resource, resources) { AlphanumericItem *item = new AlphanumericItem(resource->Icon(), resource->Filename()); item->setDropEnabled(false); item->setData(resource->GetIdentifier()); QString tooltip = resource->Filename(); QString path = resource->GetRelativePathToOEBPS(); if (semantic_type_all.contains(path)) { tooltip += " (" + semantic_type_all[path] + ")"; } if (manifest_properties_all.contains(path)) { tooltip += " [" + manifest_properties_all[path] + "]"; } item->setToolTip(tooltip); if (resource->Type() == Resource::HTMLResourceType) { int reading_order = -1; if (reading_order_all.contains(resource)) { reading_order = reading_order_all[resource]; } else { reading_order = NO_READING_ORDER; } item->setData(reading_order, READING_ORDER_ROLE); // Remove the extension for alphanumeric sorting QString name = resource->Filename().left(resource->Filename().lastIndexOf('.')); item->setData(name, ALPHANUMERIC_ORDER_ROLE); m_TextFolderItem->appendRow(item); } else if (resource->Type() == Resource::CSSResourceType) { item->setDragEnabled(false); m_StylesFolderItem->appendRow(item); } else if (resource->Type() == Resource::ImageResourceType || resource->Type() == Resource::SVGResourceType ) { item->setDragEnabled(false); m_ImagesFolderItem->appendRow(item); } else if (resource->Type() == Resource::FontResourceType) { item->setDragEnabled(false); m_FontsFolderItem->appendRow(item); } else if (resource->Type() == Resource::AudioResourceType) { item->setDragEnabled(false); m_AudioFolderItem->appendRow(item); } else if (resource->Type() == Resource::VideoResourceType) { item->setDragEnabled(false); m_VideoFolderItem->appendRow(item); } else if (resource->Type() == Resource::OPFResourceType || resource->Type() == Resource::NCXResourceType) { item->setEditable(false); item->setDragEnabled(false); appendRow(item); } else { item->setDragEnabled(false); m_MiscFolderItem->appendRow(item); } } } void OPFModel::UpdateHTMLReadingOrders() { QList reading_order_htmls; for (int i = 0; i < m_TextFolderItem->rowCount(); ++i) { QStandardItem *html_item = m_TextFolderItem->child(i); Q_ASSERT(html_item); html_item->setData(i, READING_ORDER_ROLE); HTMLResource *html_resource = qobject_cast( m_Book->GetFolderKeeper()->GetResourceByIdentifier(html_item->data().toString())); if (html_resource != NULL) { reading_order_htmls.append(html_resource); } } m_Book->GetOPF()->UpdateSpineOrder(reading_order_htmls); m_Book->SetModified(); } void OPFModel::ClearModel() { while (m_TextFolderItem->rowCount() != 0) { m_TextFolderItem->removeRow(0); } while (m_StylesFolderItem->rowCount() != 0) { m_StylesFolderItem->removeRow(0); } while (m_ImagesFolderItem->rowCount() != 0) { m_ImagesFolderItem->removeRow(0); } while (m_FontsFolderItem->rowCount() != 0) { m_FontsFolderItem->removeRow(0); } while (m_MiscFolderItem->rowCount() != 0) { m_MiscFolderItem->removeRow(0); } while (m_AudioFolderItem->rowCount() != 0) { m_AudioFolderItem->removeRow(0); } while (m_VideoFolderItem->rowCount() != 0) { m_VideoFolderItem->removeRow(0); } int i = 0; while (i < invisibleRootItem()->rowCount()) { QStandardItem *child = invisibleRootItem()->child(i, 0); if (child != m_TextFolderItem && child != m_StylesFolderItem && child != m_ImagesFolderItem && child != m_FontsFolderItem && child != m_MiscFolderItem && child != m_AudioFolderItem && child != m_VideoFolderItem) { invisibleRootItem()->removeRow(i); } else { ++i; } } } void OPFModel::SortFilesByFilenames() { for (int i = 0; i < invisibleRootItem()->rowCount(); ++i) { invisibleRootItem()->child(i)->sortChildren(0); } } void OPFModel::SortHTMLFilesByReadingOrder() { int old_sort_role = sortRole(); setSortRole(READING_ORDER_ROLE); m_TextFolderItem->sortChildren(0); setSortRole(old_sort_role); } void OPFModel::SortHTMLFilesByAlphanumeric(QList index_list) { // Get items for all selected indexes QList item_list; foreach(QModelIndex index, index_list) { QStandardItem *qitem = itemFromIndex(index); item_list.append(qitem); } // Create new model for selected items to allow temporary sorting QStandardItemModel sort_model; sort_model.setSortRole(ALPHANUMERIC_ORDER_ROLE); QStandardItem *items = new QStandardItem(); sort_model.setItem(0, items); int first_item_position = -1; foreach(QStandardItem *item, item_list) { int i = 0; while (i < m_TextFolderItem->rowCount()) { if (m_TextFolderItem->child(i) == item) { if (first_item_position < 0) { first_item_position = i; } QList removed_items = m_TextFolderItem->takeRow(i--); foreach(QStandardItem *one_item, removed_items) { items->appendRow(one_item); } break; } i++; } } items->sortChildren(0); for (int i = 0; i < items->rowCount(); ++i) { QList removed_items = items->takeRow(i--); foreach(QStandardItem *one_item, removed_items) { m_TextFolderItem->insertRow(first_item_position++, one_item); } } } bool OPFModel::FilenameIsValid(const QString &old_filename, const QString &new_filename) { foreach(QChar character, new_filename) { if (FORBIDDEN_FILENAME_CHARS.contains(character)) { Utility::DisplayStdErrorDialog( tr("A filename cannot contains the character \"%1\".") .arg(character) ); return false; } } const QString &extension = QFileInfo(new_filename).suffix(); QString new_filename_without_extension = new_filename.left(new_filename.length() - extension.length() - 1); if (new_filename.isEmpty() || new_filename_without_extension.isEmpty()) { Utility::DisplayStdErrorDialog( tr("The filename cannot be empty.") ); return false; } if (new_filename != m_Book->GetFolderKeeper()->GetUniqueFilenameVersion(new_filename)) { Utility::DisplayStdErrorDialog( tr("The filename \"%1\" is already in use.\n") .arg(new_filename) ); return false; } return true; } Sigil-0.9.9/src/MainUI/OPFModel.h000066400000000000000000000171561321676412500163100ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef OPFMODEL_H #define OPFMODEL_H #include #include #include "BookManipulation/Book.h" #include "ResourceObjects/Resource.h" class AlphanumericItem; class QModelIndex; class QStandardItem; /** * A hierarchical model for the OPF structure and files. * Meant to be used with a Qt View class (like QTreeView). */ class OPFModel : public QStandardItemModel { Q_OBJECT public: enum IndexChoice { IndexChoice_Current, /** The current file browser list. */ IndexChoice_Next, /** The next file in the browser list. */ IndexChoice_Previous /** The previous file in the browser list. */ }; /** * Constructor. * * @param parent The model's parent. */ OPFModel(QObject *parent = 0); /** * Sets the model's book. * * @param book The book whose model we will be building. */ void SetBook(QSharedPointer book); /** * Forces the recreation of the model * from the information in the stored book. */ void Refresh(); /** * Re-sorts the selected HTML entires in alphanumeric order */ void SortHTML(QList index_list); /** * Returns the QModelIndex of the first HTML file. * * @return The QModelIndex of the first HTML file. * @throws NoHTMLFiles() */ QModelIndex GetFirstHTMLModelIndex(); /** * Returns the QModelIndex of the Text folder. * * @return The QModelIndex of the Text folder. */ QModelIndex GetTextFolderModelIndex(); /** * Returns the QModelIndex of the resource in any folder. * * @return The QModelIndex of the resource in any folder. */ QModelIndex GetModelItemIndex(Resource *resource, IndexChoice indexChoice); /** * Returns the QModelIndex of the resource in the given folder. * * @return The QModelIndex of the folder in the given folder. */ QModelIndex GetModelFolderItemIndex(QStandardItem const *folder, Resource *resource, IndexChoice indexChoice); /** * Gets a sorted list of the resources in the folder containing the given resource name * * @param item The resource in the folder whose list we want * @return The list of resources in the same folder as the given resource */ QList GetResourceListInFolder(Resource *resource); /** * Gets a sorted list of the resources in the folder containing the given resource type * * @param item The resource type in the folder whose list we want * @return The list of resources in the same folder as the given resource */ QList GetResourceListInFolder(Resource::ResourceType resource_type); /** * Gets an item's resource type. * * @param item THe item whose resource type we want. * @return The requested resource type. */ Resource::ResourceType GetResourceType(QStandardItem const *item); /** * Kills the inherited sort function. * If this function is left standing, then the user could * sort the items with clicks in a View. We don't want that * because the HTML files are \em always sorted by their * reading order, and the other files by their filenames. * * @param column The column to sort. * @param order The type of sorting needed. */ virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); /** * Specifies the supported drop actions in the model. * * @return The drop actions supported. */ virtual Qt::DropActions supportedDropActions() const; /** * Renames the selected resource * * @return Whether rename succeeded or not */ bool RenameResource(Resource *resource, const QString &new_filename); bool RenameResourceList(QList resources, QList new_filenames); signals: /** * Emitted when the book's content is modified with the OPF model. */ void BookContentModified(); /** * Emitted after a rename of a file is attempted. */ void ResourceRenamed(); private slots: /** * Handler for removed rows. Used for updating HTMLResource * reading orders when the user reorders them in a View. * * @param parent The parent model index in which rows were removed. * @param start The start index of the removed rows, * @param end The end index of the removed rows. */ void RowsRemovedHandler(const QModelIndex &parent, int start, int end); /** * Handler for changed items. Used for handling item renames, * and \em only item renames. * * @param item The item that was changed. */ void ItemChangedHandler(QStandardItem *item); private: /** * Initializes an empty model with data. It is filled * using information from the stored book. */ void InitializeModel(); /** * Updates the reading orders of the HTMLResources * with their order in the model. */ void UpdateHTMLReadingOrders(); /** * Sorts \em all files by their filenames, alphabetically. */ void SortFilesByFilenames(); /** * Sorts the HTML files by their reading orders. */ void SortHTMLFilesByReadingOrder(); /** * Sorts the selected HTML files by alphanumeric order of filename */ void SortHTMLFilesByAlphanumeric(QList index_list); /** * Removes all data from the model. */ void ClearModel(); /** * Determines if a filename is valid. If it is not, * an error dialog is presented to the user informing * him of the reason why. * * @param old_filename The old filename of the file. * @param new_filename The requested new filename of the file. * @return \c true if the filename is valid. */ bool FilenameIsValid(const QString &old_filename, const QString &new_filename); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * Used to prevent the RowsRemovedHandler * from messing up the reading orders. * Is \c true while the model is refreshing. */ bool m_RefreshInProgress; /** * The book whose model we are representing. */ QSharedPointer m_Book; QStandardItem *m_TextFolderItem; /**< The Text folder item. */ QStandardItem *m_StylesFolderItem; /**< The Styles folder item. */ QStandardItem *m_ImagesFolderItem; /**< The Images folder item. */ QStandardItem *m_FontsFolderItem; /**< The Fonts folder item. */ QStandardItem *m_MiscFolderItem; /**< The Misc folder item. */ QStandardItem *m_AudioFolderItem; QStandardItem *m_VideoFolderItem; }; #endif // OPFMODEL_H Sigil-0.9.9/src/MainUI/OPFModelItem.cpp000066400000000000000000000064221321676412500174540ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "MainUI/OPFModelItem.h" // Reimplementation of QStandardItem to support sorting alphanumerically AlphanumericItem::AlphanumericItem() : QStandardItem() { } AlphanumericItem::AlphanumericItem(const QIcon icon, const QString text) : QStandardItem(icon, text) { } // Override standard sort operator to allow sorting alphanumerically case-sensitive bool AlphanumericItem::operator<(const QStandardItem &item) const { if (model()->sortRole() == READING_ORDER_ROLE) { return data(READING_ORDER_ROLE).toInt() < item.data(READING_ORDER_ROLE).toInt(); } else if (model()->sortRole() != ALPHANUMERIC_ORDER_ROLE) { return text().compare(item.text()) < 0; } QString s1 = data(ALPHANUMERIC_ORDER_ROLE).toString(); QString s2 = item.data(ALPHANUMERIC_ORDER_ROLE).toString(); if (s1 == NULL || s2 == NULL) { return false; } int len1 = s1.length(); int len2 = s2.length(); int marker1 = 0; int marker2 = 0; int result = 0; // Loop through both strings with separate markers while (marker1 < len1 && marker2 < len2) { QChar ch1 = s1[marker1]; QChar ch2 = s2[marker2]; QString space1(s1); QString space2(s2); int loc1 = 0; int loc2 = 0; // Loop over first string at marker collecting consecutive digits (or non-digits) do { space1[loc1++] = ch1; marker1++; if (marker1 < len1) { ch1 = s1[marker1]; } else { break; } } while (ch1.isDigit() == space1[0].isDigit()); // Loop over second string at marker collecting consecutive digits (or non-digits) do { space2[loc2++] = ch2; marker2++; if (marker2 < len2) { ch2 = s2[marker2]; } else { break; } } while (ch2.isDigit() == space2[0].isDigit()); QString str1 = space1.left(loc1); QString str2 = space2.left(loc2); // If we collected numbers, compare them numerically if (space1[0].isDigit() && space2[0].isDigit()) { int n1 = str1.toInt(); int n2 = str2.toInt(); result = n1 - n2; } else { result = str1.compare(str2); } if (result != 0) { return result < 0; } } return len1 < len2; } Sigil-0.9.9/src/MainUI/OPFModelItem.h000066400000000000000000000030531321676412500171160ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef OPFMODELITEM_H #define OPFMODELITEM_H #include #include #include #include static const int NO_READING_ORDER = std::numeric_limits::max(); static const int READING_ORDER_ROLE = Qt::UserRole + 2; static const int ALPHANUMERIC_ORDER_ROLE = Qt::UserRole + 3; /** * A re-implementation of QStandardItem to * support sorting alphanumerically */ class AlphanumericItem : public QStandardItem { public: AlphanumericItem(); AlphanumericItem(QIcon, QString); private: virtual bool operator<(const QStandardItem &item) const; }; #endif // OPFMODELITEM_H Sigil-0.9.9/src/MainUI/PreviewWindow.cpp000066400000000000000000000203471321676412500200430ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 Dave Heiland, John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include #include #include "MainUI/PreviewWindow.h" #include "Misc/SleepFunctions.h" #include "Misc/SettingsStore.h" #include "Misc/Utility.h" #include "ViewEditors/BookViewPreview.h" #include "sigil_constants.h" static const QString SETTINGS_GROUP = "previewwindow"; PreviewWindow::PreviewWindow(QWidget *parent) : QDockWidget(tr("Preview"), parent), m_MainWidget(new QWidget(this)), m_Layout(new QVBoxLayout(m_MainWidget)), m_Preview(new BookViewPreview(this)), m_Inspector(new QWebInspector(this)), m_Splitter(new QSplitter(this)), m_StackedViews(new QStackedWidget(this)) { SetupView(); LoadSettings(); ConnectSignalsToSlots(); } PreviewWindow::~PreviewWindow() { // BookViewPreview must be deleted before QWebInspector. // BookViewPreview's QWebPage is linked to the QWebInspector // and when deleted it will send a message to the linked QWebInspector // to remove the association. If QWebInspector is deleted before // BookViewPreview, BookViewPreview will try to access the deleted // QWebInspector and the application will SegFault. This is an issue // with how QWebPages interface with QWebInspector. if (m_Inspector) { m_Inspector->setPage(0); m_Inspector->close(); } if (m_Preview) { delete m_Preview; m_Preview = 0; } if (m_Inspector) { delete m_Inspector; m_Inspector = 0; } if (m_Splitter) { delete m_Splitter; m_Splitter = 0; } if (m_StackedViews) { delete(m_StackedViews); m_StackedViews= 0; } } void PreviewWindow::resizeEvent(QResizeEvent *event) { // Update self normally QDockWidget::resizeEvent(event); UpdateWindowTitle(); } void PreviewWindow::hideEvent(QHideEvent * event) { if (m_Inspector) { // break the link between the inspector and the page it is inspecting // to prevent memory corruption from Qt modified after free issue m_Inspector->setPage(0); if (m_Inspector->isVisible()) { m_Inspector->hide(); } } if ((m_Preview) && m_Preview->isVisible()) { m_Preview->hide(); } if ((m_Splitter) && m_Splitter->isVisible()) { m_Splitter->hide(); } if ((m_StackedViews) && m_StackedViews->isVisible()) { m_StackedViews->hide(); } } void PreviewWindow::showEvent(QShowEvent * event) { // restablish the link between the inspector and its page if ((m_Inspector) && (m_Preview)) { m_Inspector->setPage(m_Preview->page()); } // perform the show for all children of this widget if ((m_Preview) && !m_Preview->isVisible()) { m_Preview->show(); } if ((m_Inspector) && !m_Inspector->isVisible()) { m_Inspector->show(); } if ((m_Splitter) && !m_Splitter->isVisible()) { m_Splitter->show(); } if ((m_StackedViews) && !m_StackedViews->isVisible()) { m_StackedViews->show(); } QDockWidget::showEvent(event); raise(); emit Shown(); } bool PreviewWindow::IsVisible() { return m_Preview->isVisible(); } bool PreviewWindow::HasFocus() { if (!m_Preview->isVisible()) { return false; } return m_Preview->hasFocus(); } float PreviewWindow::GetZoomFactor() { return m_Preview->GetZoomFactor(); } void PreviewWindow::SetupView() { QApplication::setOverrideCursor(Qt::WaitCursor); m_Inspector->setPage(m_Preview->page()); m_Layout->setContentsMargins(0, 0, 0, 0); #ifdef Q_OS_MAC m_Layout->setSpacing(4); #endif m_Layout->addWidget(m_StackedViews); m_Splitter->setOrientation(Qt::Vertical); m_Splitter->addWidget(m_Preview); m_Splitter->addWidget(m_Inspector); m_Splitter->setSizes(QList() << 400 << 200); m_StackedViews->addWidget(m_Splitter); m_MainWidget->setLayout(m_Layout); setWidget(m_MainWidget); m_Preview->Zoom(); QApplication::restoreOverrideCursor(); } void PreviewWindow::UpdatePage(QString filename, QString text, QList location) { if (!m_Preview->isVisible()) { return; } // If this page uses the mathml, inject a polyfill // MathJax.js so that the mathml appears in the Preview Window QRegularExpression mathused("<\\s*math [^>]*>"); QRegularExpressionMatch mo = mathused.match(text); if (mo.hasMatch()) { QString mathjaxurl; // The path to MathJax.js is platform dependent #ifdef Q_OS_MAC // On Mac OS X QCoreApplication::applicationDirPath() points to Sigil.app/Contents/MacOS/ QDir execdir(QCoreApplication::applicationDirPath()); execdir.cdUp(); mathjaxurl = execdir.absolutePath() + "/polyfills/MathJax.js"; #elif defined(Q_OS_WIN32) mathjaxurl = "/" + QCoreApplication::applicationDirPath() + "/polyfills/MathJax.js"; #else // all flavours of linux / unix // user supplied environment variable to 'share/sigil' directory will overrides everything if (!sigil_extra_root.isEmpty()) { mathjaxurl = sigil_extra_root + "/polyfills/MathJax.js"; } else { mathjaxurl = sigil_share_root + "/polyfills/MathJax.js"; } #endif mathjaxurl = "file://" + Utility::URLEncodePath(mathjaxurl); int endheadpos = text.indexOf(""); if (endheadpos > 1) { QString inject_mathjax = ""; text.insert(endheadpos, inject_mathjax); } } m_Preview->CustomSetDocument(filename, text); // Wait until the preview is loaded before moving cursor. while (!m_Preview->IsLoadingFinished()) { qApp->processEvents(); SleepFunctions::msleep(100); } m_Preview->StoreCaretLocationUpdate(location); m_Preview->ExecuteCaretUpdate(); m_Preview->InspectElement(); UpdateWindowTitle(); } void PreviewWindow::UpdateWindowTitle() { if ((m_Preview) && m_Preview->isVisible()) { int height = m_Preview->height(); int width = m_Preview->width(); setWindowTitle(tr("Preview") + " (" + QString::number(width) + "x" + QString::number(height) + ")"); } } QList PreviewWindow::GetCaretLocation() { return m_Preview->GetCaretLocation(); } void PreviewWindow::SetZoomFactor(float factor) { m_Preview->SetZoomFactor(factor); } void PreviewWindow::SplitterMoved(int pos, int index) { Q_UNUSED(pos); Q_UNUSED(index); SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); settings.setValue("splitter", m_Splitter->saveState()); settings.endGroup(); UpdateWindowTitle(); } void PreviewWindow::LoadSettings() { SettingsStore settings; settings.beginGroup(SETTINGS_GROUP); m_Splitter->restoreState(settings.value("splitter").toByteArray()); settings.endGroup(); } void PreviewWindow::ConnectSignalsToSlots() { connect(m_Splitter, SIGNAL(splitterMoved(int, int)), this, SLOT(SplitterMoved(int, int))); connect(m_Preview, SIGNAL(GoToPreviewLocationRequest()), this, SIGNAL(GoToPreviewLocationRequest())); connect(m_Preview, SIGNAL(ZoomFactorChanged(float)), this, SIGNAL(ZoomFactorChanged(float))); } Sigil-0.9.9/src/MainUI/PreviewWindow.h000066400000000000000000000041511321676412500175030ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 Dave Heiland, John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef PREVIEWWINDOW_H #define PREVIEWWINDOW_H #include #include class BookViewPreview; class QSplitter; class QStackedWidget; class QWebInspector; class QVBoxLayout; class PreviewWindow : public QDockWidget { Q_OBJECT public: PreviewWindow(QWidget *parent = 0); ~PreviewWindow(); QList GetCaretLocation(); bool IsVisible(); bool HasFocus(); float GetZoomFactor(); public slots: void UpdatePage(QString filename, QString text, QList location); void SetZoomFactor(float factor); void SplitterMoved(int pos, int index); signals: void Shown(); void GoToPreviewLocationRequest(); void ZoomFactorChanged(float factor); protected: virtual void hideEvent(QHideEvent* event); virtual void showEvent(QShowEvent* event); void resizeEvent(QResizeEvent * event); private: void SetupView(); void LoadSettings(); void ConnectSignalsToSlots(); void UpdateWindowTitle(); QWidget *m_MainWidget; QVBoxLayout *m_Layout; BookViewPreview *m_Preview; QWebInspector *m_Inspector; QSplitter *m_Splitter; QStackedWidget *m_StackedViews; }; #endif // PREVIEWWINDOW_H Sigil-0.9.9/src/MainUI/TOCModel.cpp000066400000000000000000000133021321676412500166310ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, Ontario, Canada ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include "MainUI/TOCModel.h" #include "Misc/Utility.h" #include "ResourceObjects/NCXResource.h" #include "ResourceObjects/OPFResource.h" #include "ResourceObjects/NavProcessor.h" #include "BookManipulation/CleanSource.h" TOCModel::TOCModel(QObject *parent) : QStandardItemModel(parent), m_Book(NULL), m_RefreshInProgress(false), m_TocRootWatcher(new QFutureWatcher(this)) { connect(m_TocRootWatcher, SIGNAL(finished()), this, SLOT(RefreshEnd())); } void TOCModel::SetBook(QSharedPointer book) { { // We need to make sure we don't step on the toes of GetNCXText QMutexLocker book_lock(&m_UsingBookMutex); m_Book = book; m_EpubVersion = m_Book->GetConstOPF()->GetEpubVersion(); } Refresh(); } QUrl TOCModel::GetUrlForIndex(const QModelIndex &index) { QStandardItem *item = itemFromIndex(index); if (!item) { return QUrl(); } return item->data().toUrl(); } // Should only ever be called from the main thread! // This is because access to m_RefreshInProgress is not guarded. // We *could* guard it, but there's no need to call this func // from several threads so we just disallow it with the assert. void TOCModel::Refresh() { Q_ASSERT(QThread::currentThread() == QApplication::instance()->thread()); if (m_RefreshInProgress) { return; } m_RefreshInProgress = true; m_TocRootWatcher->setFuture(QtConcurrent::run(this, &TOCModel::GetRootTOCEntry)); } void TOCModel::RefreshEnd() { BuildModel(m_TocRootWatcher->result()); m_RefreshInProgress = false; emit RefreshDone(); } TOCModel::TOCEntry TOCModel::GetRootTOCEntry() { if (m_EpubVersion.startsWith('3')) { NavProcessor navproc(m_Book->GetConstOPF()->GetNavResource()); return navproc.GetRootTOCEntry(); } return ParseNCX(GetNCXText()); } QString TOCModel::GetNCXText() { QMutexLocker book_lock(&m_UsingBookMutex); NCXResource *ncx = m_Book->GetNCX(); QReadLocker locker(&(ncx->GetLock())); return CleanSource::ProcessXML(ncx->GetText(), "application/x-dtbncx+xml"); } TOCModel::TOCEntry TOCModel::ParseNCX(const QString &ncx_source) { QXmlStreamReader ncx(ncx_source); bool in_navmap = false; TOCModel::TOCEntry root; root.is_root = true; while (!ncx.atEnd()) { ncx.readNext(); if (ncx.isStartElement()) { if (!in_navmap) { if (ncx.name() == "navMap") { in_navmap = true; } continue; } if (ncx.name() == "navPoint") { root.children.append(ParseNavPoint(ncx)); } } else if (ncx.isEndElement() && ncx.name() == "navMap") { break; } } if (ncx.hasError()) { TOCModel::TOCEntry empty; empty.is_root = true; return empty; } return root; } TOCModel::TOCEntry TOCModel::ParseNavPoint(QXmlStreamReader &ncx) { TOCModel::TOCEntry current; while (!ncx.atEnd()) { ncx.readNext(); if (ncx.isStartElement()) { if (ncx.name() == "text") { while (!ncx.isCharacters()) { ncx.readNext(); } // The string returned from text() is unescaped // (that is, XML entities have already been converted to text). // Compress whitespace that pretty-print may add. current.text = ncx.text().toString().simplified(); } else if (ncx.name() == "content") { current.target = Utility::URLDecodePath(ncx.attributes().value("", "src").toString()); } else if (ncx.name() == "navPoint") { current.children.append(ParseNavPoint(ncx)); } } else if (ncx.isEndElement() && ncx.name() == "navPoint") { break; } } return current; } void TOCModel::BuildModel(const TOCModel::TOCEntry &root_entry) { clear(); foreach(const TOCModel::TOCEntry & child_entry, root_entry.children) { AddEntryToParentItem(child_entry, invisibleRootItem()); } } void TOCModel::AddEntryToParentItem(const TOCEntry &entry, QStandardItem *parent) { Q_ASSERT(parent); QStandardItem *item = new QStandardItem(entry.text); item->setData(QUrl(entry.target)); item->setToolTip(entry.target); item->setEditable(false); item->setDragEnabled(false); item->setDropEnabled(false); parent->appendRow(item); foreach(const TOCModel::TOCEntry & child_entry, entry.children) { AddEntryToParentItem(child_entry, item); } } Sigil-0.9.9/src/MainUI/TOCModel.h000066400000000000000000000123741321676412500163060ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B Hendricks, Stratford, Ontario, Canada ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef TOCMODEL_H #define TOCMODEL_H #include #include #include #include #include "BookManipulation/Book.h" class NCXResource; class QModelIndex; class QStandardItem; class QXmlStreamReader; class QUrl; /** * A hierarchical model for the NCX structure. * Meant to be used with a Qt View class (like QTreeView). */ class TOCModel : public QStandardItemModel { Q_OBJECT public: /** * Constructor. * * @param parent The model's parent. */ TOCModel(QObject *parent = 0); /** * Sets the model's book. * * @param book The book whose model we will be building. */ void SetBook(QSharedPointer book); /** * Translates a model index of an item into an URL * that points to the TOC item target. * * @param index The model index of an item. * @return The target URL of the item. */ QUrl GetUrlForIndex(const QModelIndex &index); /** * Forces the recreation of the model * from the information in the stored book. * The refresh is done asynchronously, meaning that this * function will return quickly and the actual refreshing will be * done in a separate thread. The "second part" of this process is * in RefreshEnd. * Can be called repeatedly while a refresh is still in progress. */ void Refresh(); /** * Represents a single entry in the NCX TOC. */ struct TOCEntry { /** * The entry text that will be presented to the user. */ QString text; /** * The raw value of the "src" attribute, pointing to * the actual target of the entry (note: there may be a fragment!). */ QString target; /** * This entry's sub-entries (its children). */ QList children; /** * If \c true, then this is an "invisible" root NCXEntry; * this entry has no text or target, only children. */ bool is_root; TOCEntry() { is_root = false; } }; /** * Reads the NCX file or Nav file, parses it and returns the root TOC * entry (that entry is the tree start). * @return The root TOCEntry. */ TOCEntry GetRootTOCEntry(); signals: void RefreshDone(); private slots: /** * Completes the refresh process. It is called after the * background thread has finished processing the NCX and * the UI can now be updated. */ void RefreshEnd(); private: /** * Reads the NCX file and returns the text in it. * * @return The NCX text. */ QString GetNCXText(); /** * Parses the NCX source and returns the root TOC entry. * * @param ncx_source The NCX source code. * @return The root TOCEntry. */ static TOCEntry ParseNCX(const QString &ncx_source); /** * Parses an NCX navPoint element. Calls itself recursively * if there are navPoint children. * * @param ncx The QXmlStreamReader reading an NCX file positioned * on a navPoint element. */ static TOCEntry ParseNavPoint(QXmlStreamReader &ncx); /** * Builds the actual display model from the tree of TOCEntries. * * @param root_entry The root TOC entry. */ void BuildModel(const TOCEntry &root_entry); /** * Adds the provided entry as an item child to the provided parent. * Calls itself recursively if the entry has children of it's own. */ static void AddEntryToParentItem(const TOCEntry &entry, QStandardItem *parent); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * The book whose model we are representing. */ QSharedPointer m_Book; /** * If \c true, then a refresh operation is in progress. */ bool m_RefreshInProgress; /** * Guards the use of the m_Book variable. */ QMutex m_UsingBookMutex; /** * Watches the completion of the GetRootNCXEntry func * and signals the RefreshEnd func when the root NCX entry is ready. */ QFutureWatcher *m_TocRootWatcher; QString m_EpubVersion; }; #endif // TOCMODEL_H Sigil-0.9.9/src/MainUI/TableOfContents.cpp000066400000000000000000000122441321676412500202610ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include #include "BookManipulation/FolderKeeper.h" #include "MainUI/TableOfContents.h" #include "Misc/Utility.h" #include "ResourceObjects/NCXResource.h" #include "sigil_exception.h" static const int COLUMN_INDENTATION = 15; static const int REFRESH_DELAY = 1000; TableOfContents::TableOfContents(QWidget *parent) : QDockWidget(tr("Table Of Contents"), parent), m_Book(NULL), m_MainWidget(new QWidget(this)), m_Layout(new QVBoxLayout(m_MainWidget)), m_TreeView(new QTreeView(m_MainWidget)), m_TOCModel(new TOCModel(this)) { m_Layout->setContentsMargins(0, 0, 0, 0); #ifdef Q_OS_MAC m_Layout->setSpacing(4); #endif m_Layout->addWidget(m_TreeView); m_MainWidget->setLayout(m_Layout); setWidget(m_MainWidget); m_RefreshTimer.setInterval(REFRESH_DELAY); m_RefreshTimer.setSingleShot(true); SetupTreeView(); connect(m_TreeView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(ItemClickedHandler(const QModelIndex &))); connect(&m_RefreshTimer, SIGNAL(timeout()), this, SLOT(Refresh())); connect(m_TOCModel, SIGNAL(RefreshDone()), m_TreeView, SLOT(expandAll())); } void TableOfContents::showEvent(QShowEvent *event) { QDockWidget::showEvent(event); raise(); } void TableOfContents::SetBook(QSharedPointer book) { m_Book = book; m_TOCModel->SetBook(book); m_EpubVersion = m_Book->GetConstOPF()->GetEpubVersion(); if (m_EpubVersion.startsWith('3')) { connect(m_Book->GetConstOPF()->GetNavResource(), SIGNAL(Modified()), this, SLOT(StartRefreshDelay())); } else { connect(m_Book->GetNCX(), SIGNAL(Modified()), this, SLOT(StartRefreshDelay())); } Refresh(); } void TableOfContents::Refresh() { m_TOCModel->Refresh(); } void TableOfContents::StartRefreshDelay() { // Repeatedly calling start() will re-start the timer // and that's exactly what we want. // We want the timer to fire REFRESH_DELAY miliseconds // after the user has stopped typing up the Nav/NCX. m_RefreshTimer.start(); } void TableOfContents::RenumberTOCContents() { if (m_EpubVersion.startsWith('3')) { } else { m_Book->GetNCX()->GenerateNCXFromTOCContents(m_Book.data(), m_TOCModel); } } void TableOfContents::ItemClickedHandler(const QModelIndex &index) { QUrl url = m_TOCModel->GetUrlForIndex(index); QString filename = QFileInfo(url.path()).fileName(); int line = -1; // If no id, go to the top of the page if (url.fragment().isEmpty()) { line = 1; } try { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); emit OpenResourceRequest(resource, line, -1, QString(), MainWindow::ViewState_Unknown, url.fragment()); } catch (ResourceDoesNotExist) { Utility::DisplayStdErrorDialog( tr("The file \"%1\" does not exist.") .arg(filename) ); } } TOCModel::TOCEntry TableOfContents::GetRootEntry() { return m_TOCModel->GetRootTOCEntry(); } void TableOfContents::SetupTreeView() { m_TreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); m_TreeView->setSortingEnabled(false); m_TreeView->sortByColumn(-1); m_TreeView->setUniformRowHeights(true); m_TreeView->setDragEnabled(false); m_TreeView->setAcceptDrops(false); m_TreeView->setDropIndicatorShown(false); m_TreeView->setDragDropMode(QAbstractItemView::NoDragDrop); m_TreeView->setAnimated(true); m_TreeView->setModel(m_TOCModel); m_TreeView->setIndentation(COLUMN_INDENTATION); m_TreeView->setHeaderHidden(true); } void TableOfContents::contextMenuEvent(QContextMenuEvent *event) { QMenu *menu = new QMenu(this); // Add menu options QAction *collapseAction = new QAction(tr("Collapse All"), menu); QAction *expandAction = new QAction(tr("Expand All"), menu); menu->addAction(collapseAction); connect(collapseAction, SIGNAL(triggered()), m_TreeView, SLOT(collapseAll())); menu->addAction(expandAction); connect(expandAction, SIGNAL(triggered()), m_TreeView, SLOT(expandAll())); menu->exec(mapToGlobal(event->pos())); } Sigil-0.9.9/src/MainUI/TableOfContents.h000066400000000000000000000077251321676412500177360ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, Ontario, Canada ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef TABLEOFCONTENTS_H #define TABLEOFCONTENTS_H #include #include #include "BookManipulation/Book.h" #include "MainUI/MainWindow.h" #include "MainUI/TOCModel.h" class QTimer; class QTreeView; class QVBoxLayout; class Book; /** * Represents the pane in which the book's NCX TOC is rendered. * Clicking on an entry takes the user to that location. */ class TableOfContents : public QDockWidget { Q_OBJECT public: /** * Constructor. * * @param parent The QObject's parent. */ TableOfContents(QWidget *parent = 0); public slots: /** * Sets the book whose TOC the should be displayed. * * @param book The book to be displayed. */ void SetBook(QSharedPointer book); /** * Refreshes the display of the book's TOC. */ void Refresh(); /** * Starts the refresh operation, but on a delay. * Repeatedly calling this function resets the delay timer. */ void StartRefreshDelay(); /** * Refresh the TOC file contents to renumber entries */ void RenumberTOCContents(); TOCModel::TOCEntry GetRootEntry(); private slots: /** * Handles the mouse clicks in the TOC and causes * those clicks to open/activate files in the main view area. * * @param index The model index of the item clicked. */ void ItemClickedHandler(const QModelIndex &index); protected: void contextMenuEvent(QContextMenuEvent *event); virtual void showEvent(QShowEvent *event); signals: /** * Emitted when the TOC wants a resource to be opened. * * @param resource The resource that should be opened. * @param fragment The fragment ID to which the new tab should be scrolled. */ void OpenResourceRequest(Resource *resource, int line_to_scroll_to = -1, int position_to_scroll_to = -1, const QString &caret_location_to_scroll_to = QString(), MainWindow::ViewState view_state = MainWindow::ViewState_Unknown, const QUrl &fragment = QUrl()); private: /** * Performs the initial setup for the tree view. */ void SetupTreeView(); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * The book currently being displayed. */ QSharedPointer m_Book; /** * A container widget for the TOC UI widgets. */ QWidget *m_MainWidget; /** * The layout for the container widget. */ QVBoxLayout *m_Layout; /** * The tree view used to represent the TOC. */ QTreeView *m_TreeView; /** * The timer that provides the delay for the refresh operation. */ QTimer m_RefreshTimer; /** * The data model used to feed the tree view. */ TOCModel *m_TOCModel; QString m_EpubVersion; }; #endif // TABLEOFCONTENTS_H Sigil-0.9.9/src/MainUI/ValidationResultsView.cpp000066400000000000000000000217241321676412500215410ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Misc/EmbeddedPython.h" #include #include #include #include #include #include #include "BookManipulation/Book.h" #include "BookManipulation/FolderKeeper.h" #include "MainUI/ValidationResultsView.h" #include "Misc/Utility.h" #include "sigil_exception.h" static const QBrush INFO_BRUSH = QBrush(QColor(224, 255, 255)); static const QBrush WARNING_BRUSH = QBrush(QColor(255, 255, 230)); static const QBrush ERROR_BRUSH = QBrush(QColor(255, 230, 230)); const QString ValidationResultsView::SEP = QString(QChar(31)); ValidationResultsView::ValidationResultsView(QWidget *parent) : QDockWidget(tr("Validation Results"), parent), m_ResultTable(new QTableWidget(this)) { setWidget(m_ResultTable); setAllowedAreas(Qt::BottomDockWidgetArea); SetUpTable(); connect(m_ResultTable, SIGNAL(itemDoubleClicked(QTableWidgetItem *)), this, SLOT(ResultDoubleClicked(QTableWidgetItem *))); } void ValidationResultsView::showEvent(QShowEvent *event) { QDockWidget::showEvent(event); raise(); } QStringList ValidationResultsView::ValidateFile(QString &apath) { int rv = 0; QString error_traceback; QStringList results; QList args; args.append(QVariant(apath)); EmbeddedPython * epython = EmbeddedPython::instance(); QVariant res = epython->runInPython( QString("sanitycheck"), QString("perform_sanity_check"), args, &rv, error_traceback); if (rv != 0) { Utility::DisplayStdWarningDialog(QString("error in sanitycheck perform_sanity_check: ") + QString::number(rv), error_traceback); // an error happened - make no changes return results; } return res.toStringList(); } void ValidationResultsView::ValidateCurrentBook() { ClearResults(); QList results; QApplication::setOverrideCursor(Qt::WaitCursor); m_Book->SaveAllResourcesToDisk(); QList resources = m_Book->GetFolderKeeper()->GetResourceList(); foreach (Resource * resource, resources) { if (resource->Type() == Resource::HTMLResourceType) { QString apath = resource->GetFullPath(); QStringList reslst = ValidateFile(apath); if (!reslst.isEmpty()) { foreach (QString res, reslst) { QStringList details = res.split(SEP); ValidationResult::ResType vtype; QString etype = details[0]; if (etype == "info") { vtype = ValidationResult::ResType_Info; } else if (etype == "warning") { vtype = ValidationResult::ResType_Warn; } else if (etype == "error") { vtype = ValidationResult::ResType_Error; } else { continue; } QString filename = details[1]; int lineno = details[2].toInt(); int charoffset = details[3].toInt(); QString msg = details[4]; results.append(ValidationResult(vtype,filename,lineno,charoffset,msg)); } } } } QApplication::restoreOverrideCursor(); DisplayResults(results); show(); raise(); } void ValidationResultsView::LoadResults(const QList &results) { ClearResults(); DisplayResults(results); show(); raise(); } void ValidationResultsView::ClearResults() { m_ResultTable->clearContents(); m_ResultTable->setRowCount(0); } void ValidationResultsView::SetBook(QSharedPointer book) { m_Book = book; ClearResults(); } void ValidationResultsView::ResultDoubleClicked(QTableWidgetItem *item) { Q_ASSERT(item); int row = item->row(); QTableWidgetItem *path_item = m_ResultTable->item(row, 0); if (!path_item) { return; } QString filename = QFileInfo(path_item->text()).fileName(); QTableWidgetItem *line_item = m_ResultTable->item(row, 1); QTableWidgetItem *offset_item = m_ResultTable->item(row, 2); if (!line_item || !offset_item) { return; } int line = line_item->text().toInt(); int charoffset = offset_item->text().toInt(); try { Resource *resource = m_Book->GetFolderKeeper()->GetResourceByFilename(filename); // if character offset info exists, use it in preference to just the line number if (charoffset != -1) { emit OpenResourceRequest(resource, line, charoffset, QString(), MainWindow::ViewState_CodeView); } else { emit OpenResourceRequest(resource, line, -1, QString(), MainWindow::ViewState_CodeView); } } catch (ResourceDoesNotExist) { return; } } void ValidationResultsView::SetUpTable() { m_ResultTable->setEditTriggers(QAbstractItemView::NoEditTriggers); m_ResultTable->setTabKeyNavigation(false); m_ResultTable->setDropIndicatorShown(false); m_ResultTable->horizontalHeader()->setStretchLastSection(true); m_ResultTable->verticalHeader()->setVisible(false); } void ValidationResultsView::DisplayResults(const QList &results) { m_ResultTable->clear(); if (results.empty()) { DisplayNoProblemsMessage(); return; } ConfigureTableForResults(); Q_FOREACH(ValidationResult result, results) { int rownum = m_ResultTable->rowCount(); QTableWidgetItem *item = NULL; QBrush row_brush = INFO_BRUSH; if (result.Type() == ValidationResult::ResType_Warn) { row_brush = WARNING_BRUSH; } else if (result.Type() == ValidationResult::ResType_Error) { row_brush = ERROR_BRUSH; } m_ResultTable->insertRow(rownum); QString path = result.Filename(); item = new QTableWidgetItem(RemoveEpubPathPrefix(path)); item->setBackground(row_brush); m_ResultTable->setItem(rownum, 0, item); item = result.LineNumber() > 0 ? new QTableWidgetItem(QString::number(result.LineNumber())) : new QTableWidgetItem(tr("N/A")); item->setBackground(row_brush); m_ResultTable->setItem(rownum, 1, item); item = result.CharOffset() > 0 ? new QTableWidgetItem(QString::number(result.CharOffset())) : new QTableWidgetItem(tr("N/A")); item->setBackground(row_brush); m_ResultTable->setItem(rownum, 2, item); item = new QTableWidgetItem(result.Message()); item->setBackground(row_brush); m_ResultTable->setItem(rownum, 3, item); } // Make Line and Offset columns as small as possible // Ditto for Filename m_ResultTable->resizeColumnToContents(0); m_ResultTable->resizeColumnToContents(1); m_ResultTable->resizeColumnToContents(2); //m_ResultTable->resizeColumnsToContents(); } void ValidationResultsView::DisplayNoProblemsMessage() { m_ResultTable->setRowCount(1); m_ResultTable->setColumnCount(1); m_ResultTable->setHorizontalHeaderLabels( QStringList() << tr("Message")); QTableWidgetItem *item = new QTableWidgetItem(tr("No problems found!")); item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); QFont font = item->font(); font.setPointSize(16); item->setFont(font); m_ResultTable->setItem(0, 0, item); m_ResultTable->resizeRowToContents(0); } void ValidationResultsView::ConfigureTableForResults() { m_ResultTable->setRowCount(0); m_ResultTable->setColumnCount(4); m_ResultTable->setHorizontalHeaderLabels( QStringList() << tr("File") << tr("Line") << tr("Offset") << tr("Message")); m_ResultTable->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); } QString ValidationResultsView::RemoveEpubPathPrefix(const QString &path) { return QString(path).remove(QRegularExpression("^[\\w-]+\\.epub/?")); } Sigil-0.9.9/src/MainUI/ValidationResultsView.h000066400000000000000000000077021321676412500212060ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef VALIDATIONRESULTSVIEW_H #define VALIDATIONRESULTSVIEW_H #include #include #include #include "MainUI/MainWindow.h" #include "Misc/ValidationResult.h" class QTableWidget; class QTableWidgetItem; class Book; /** * Represents the pane in which all the validation results are displayed. */ class ValidationResultsView : public QDockWidget { Q_OBJECT public: /** * Constructor. * * @param parent The QObject's parent. */ ValidationResultsView(QWidget *parent = 0); /** * Validates the epub file given and displays the results. */ void ValidateCurrentBook(); QStringList ValidateFile(QString &apath); void LoadResults(const QList &results); /** * Clears the result table. */ void ClearResults(); public slots: /** * Sets the book that should be validated. * * @param book The book to be validated. */ void SetBook(QSharedPointer book); signals: /** * Emitted when the user clicks a result and thus wants * a resource to be opened on that error. * * @param resource The resource that should be opened. * @param line_to_scroll_to To which line should the resource scroll. * @param view_state In which View should the resource open or switch to. */ void OpenResourceRequest(Resource *resource, int line_to_scroll_to = -1, int position_to_scroll_to = -1, const QString &caret_location_to_scroll_to = QString(), MainWindow::ViewState view_state = MainWindow::ViewState_Unknown); private slots: /** * Handles double-clicking on a result in the table. * * @param item The item that was clicked. */ void ResultDoubleClicked(QTableWidgetItem *item); protected: virtual void showEvent(QShowEvent *event); private: /** * Sets up the table widget to our liking. */ void SetUpTable(); /** * Displays the given results in the widget's table. * * @param results A list of validation results. */ void DisplayResults(const QList &results); /** * Informs the user that no problems were found. */ void DisplayNoProblemsMessage(); /** * Configures the table for presenting validation results. */ void ConfigureTableForResults(); /** * Removes the epub filename prefix in the path, if any. * * @param path The relative path to clean. * @return The cleaned path. */ static QString RemoveEpubPathPrefix(const QString &path); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * The table that holds all the validation results. */ QTableWidget *m_ResultTable; /** * The book being validated. */ QSharedPointer m_Book; static const QString SEP; }; #endif // VALIDATIONRESULTSVIEW_H Sigil-0.9.9/src/Misc/000077500000000000000000000000001321676412500142715ustar00rootroot00000000000000Sigil-0.9.9/src/Misc/AppEventFilter.cpp000066400000000000000000000032401321676412500176640ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "MainUI/MainWindow.h" #include "Misc/AppEventFilter.h" // Constructor; // The argument is the object's parent. AppEventFilter::AppEventFilter(QObject *parent) : QObject(parent) { } // The event filter used to catch OS X's // QFileOpenEvents. These signal the user used the OS's // services to start Sigil with an existing document bool AppEventFilter::eventFilter(QObject *watched_object, QEvent *event) { if (event->type() == QEvent::FileOpen) { QFileOpenEvent *openEvent = static_cast(event); MainWindow *widget = new MainWindow(openEvent->file()); widget->show(); return true; } // standard event processing return QObject::eventFilter(watched_object, event); } Sigil-0.9.9/src/Misc/AppEventFilter.h000066400000000000000000000026611321676412500173370ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef APPEVENTFILTER_H #define APPEVENTFILTER_H #include class QEvent; class AppEventFilter : public QObject { Q_OBJECT public: // Constructor; // The argument is the object's parent. AppEventFilter(QObject *parent); protected: // The event filter used to catch OS X's // QFileOpenEvents. These signal the user used the OS's // services to start Sigil with an existing document bool eventFilter(QObject *watched_object, QEvent *event); }; #endif // APPEVENTFILTER_H Sigil-0.9.9/src/Misc/CSSHighlighter.cpp000066400000000000000000000152511321676412500176100ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010 Nokia Corporation, Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Misc/CSSHighlighter.h" #include "Misc/SettingsStore.h" // TODO: This code was written by Nokia for Qt Designer, and it's horribly ugly. // I've tried to clean it up, but it's hopeless. Write a new CSS parser to replace this. enum State { Selector, Property, Value, Pseudo, Pseudo1, Pseudo2, Quote, MaybeComment, Comment, MaybeCommentEnd }; enum Token { ALNUM, LBRACE, RBRACE, COLON, SEMICOLON, COMMA, QUOTE, SLASH, STAR }; // Transitions for the DFA static const int transitions[ 10 ][ 9 ] = { { Selector, Property, Selector, Pseudo, Property, Selector, Quote, MaybeComment, Selector }, // Selector { Property, Property, Selector, Value, Property, Property, Quote, MaybeComment, Property }, // Property { Value, Property, Selector, Value, Property, Value, Quote, MaybeComment, Value }, // Value { Pseudo1, Property, Selector, Pseudo2, Selector, Selector, Quote, MaybeComment, Pseudo }, // Pseudo { Pseudo1, Property, Selector, Pseudo, Selector, Selector, Quote, MaybeComment, Pseudo1 }, // Pseudo1 { Pseudo2, Property, Selector, Pseudo, Selector, Selector, Quote, MaybeComment, Pseudo2 }, // Pseudo2 { Quote, Quote, Quote, Quote, Quote, Quote, -1, Quote, Quote }, // Quote { -1, -1, -1, -1, -1, -1, -1, -1, Comment }, // MaybeComment { Comment, Comment, Comment, Comment, Comment, Comment, Comment, Comment, MaybeCommentEnd }, // Comment { Comment, Comment, Comment, Comment, Comment, Comment, Comment, -1, MaybeCommentEnd } // MaybeCommentEnd }; CSSHighlighter::CSSHighlighter(QObject *parent) : QSyntaxHighlighter(parent) { SettingsStore settings; m_codeViewAppearance = settings.codeViewAppearance(); } void CSSHighlighter::highlightBlock(const QString &text) { int lastIndex = 0; bool lastWasSlash = false; int state = previousBlockState(); int save_state = 0; if (state == -1) { // As long as the text is empty, leave the state undetermined if (text.isEmpty()) { setCurrentBlockState(-1); return; } // The initial state is based on the presence of a ":" and the absence of a "{". // This is because Qt style sheets support both a full stylesheet as well as // an inline form with just properties. state = save_state = (text.indexOf(QLatin1Char(':')) > -1 && text.indexOf(QLatin1Char('{')) == -1) ? Property : Selector; } else { save_state = state >> 16; state &= 0x00ff; } if (state == MaybeCommentEnd) { state = Comment; } else if (state == MaybeComment) { state = save_state; } for (int i = 0; i < text.length(); i++) { int token = ALNUM; const char character = text.at(i).toLatin1(); if (state == Quote) { if (character == '\\') { lastWasSlash = true; } else { if (character == '\"' && !lastWasSlash) { token = QUOTE; } lastWasSlash = false; } } else { token = character == '{' ? LBRACE : character == '}' ? RBRACE : character == ':' ? COLON : character == ';' ? SEMICOLON : character == ',' ? COMMA : character == '\"' ? QUOTE : character == '/' ? SLASH : character == '*' ? STAR : ALNUM; } int new_state = transitions[ state ][ token ]; if (new_state != state) { bool include_token = new_state == MaybeCommentEnd || (state == MaybeCommentEnd && new_state != Comment) || state == Quote; highlight(text, lastIndex, i - lastIndex + include_token, state); if (new_state == Comment) { lastIndex = i - 1; // include the slash and star } else { lastIndex = i + ((token == ALNUM || new_state == Quote) ? 0 : 1); } } if (new_state == -1) { state = save_state; } else if (state <= Pseudo2) { save_state = state; state = new_state; } else { state = new_state; } } highlight(text, lastIndex, text.length() - lastIndex, state); setCurrentBlockState(state + (save_state << 16)); } void CSSHighlighter::highlight(const QString &text, int start, int length, int state) { if (start >= text.length() || length <= 0) { return; } QTextCharFormat format; switch (state) { case Selector: setFormat(start, length, m_codeViewAppearance.css_selector_color); break; case Property: setFormat(start, length, m_codeViewAppearance.css_property_color); break; case Value: setFormat(start, length, m_codeViewAppearance.css_value_color); break; case Pseudo1: setFormat(start, length, m_codeViewAppearance.css_selector_color); break; case Pseudo2: setFormat(start, length, m_codeViewAppearance.css_selector_color); break; case Quote: setFormat(start, length, m_codeViewAppearance.css_quote_color); break; case Comment: case MaybeCommentEnd: format.setForeground(m_codeViewAppearance.css_comment_color); setFormat(start, length, format); break; default: break; } } Sigil-0.9.9/src/Misc/CSSHighlighter.h000066400000000000000000000025151321676412500172540ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010 Nokia Corporation, Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #ifndef CSSHIGHLIGHTER_H #define CSSHIGHLIGHTER_H #include #include "Misc/SettingsStore.h" class CSSHighlighter : public QSyntaxHighlighter { public: explicit CSSHighlighter(QObject *parent); protected: void highlightBlock(const QString &text); void highlight(const QString &, int start, int length, int state); private: SettingsStore::CodeViewAppearance m_codeViewAppearance; }; #endif // CSSHIGHLIGHTER_H Sigil-0.9.9/src/Misc/CSSInfo.cpp000066400000000000000000000523631321676412500162520ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, ON Canada ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "Misc/CSSInfo.h" const int TAB_SPACES_WIDTH = 4; const QString LINE_MARKER("[SIGIL_NEWLINE]"); static const QString DELIMITERS = "}{;"; CSSInfo::CSSInfo(const QString &text, bool isCSSFile) : m_OriginalText(text), m_IsCSSFile(isCSSFile) { if (isCSSFile) { parseCSSSelectors(text, 0, 0); } else { // This is an HTML file with any number of inline CSS style blocks within it int style_start = -1; int style_end = -1; int offset = 0; while (findInlineStyleBlock(text, offset, style_start, style_end)) { int line = text.left(style_start).count(QChar('\n')); parseCSSSelectors(text.mid(style_start, style_end - style_start), line, style_start); offset = style_end; } } } QList CSSInfo::getClassSelectors(const QString filterClassName) { QList selectors; foreach(CSSInfo::CSSSelector * cssSelector, m_CSSSelectors) { if (cssSelector->classNames.count() > 0) { if (filterClassName.isEmpty() || cssSelector->classNames.contains(filterClassName)) { selectors.append(cssSelector); } } } return selectors; } CSSInfo::CSSSelector *CSSInfo::getCSSSelectorForElementClass(const QString &elementName, const QString &className) { if (!className.isEmpty()) { // Find the selector(s) if any with this class name QList class_selectors = getClassSelectors(className); if (class_selectors.count() > 0) { // First look for match on element and class foreach(CSSInfo::CSSSelector * cssSelector, class_selectors) { // Always match on wildcard class selector if (cssSelector->elementNames.isEmpty()) { return cssSelector; } if (cssSelector->elementNames.contains(elementName)) { // Doublecheck that the full element.class is actually in the text // to avoid, e.g., div class="test" matching p.test + div if (cssSelector->groupText.contains(elementName % "." % className)) { return cssSelector; } } } } } else { // try match on element name alone foreach(CSSInfo::CSSSelector * cssSelector, m_CSSSelectors) { if (cssSelector->elementNames.contains(elementName) && cssSelector->classNames.isEmpty()) { return cssSelector; } } } return NULL; } QList CSSInfo::getAllCSSSelectorsForElementClass(const QString &elementName, const QString &className) { QList matches; if (!className.isEmpty()) { // Find the selector(s) if any with this class name QList class_selectors = getClassSelectors(className); if (class_selectors.count() > 0) { // First look for match on element and class foreach(CSSInfo::CSSSelector * cssSelector, class_selectors) { // Always match on wildcard class selector if (cssSelector->elementNames.isEmpty()) { matches.append(cssSelector);; } if (cssSelector->elementNames.contains(elementName)) { // Doublecheck that the full element.class is actually in the text // to avoid, e.g., div class="test" matching p.test + div if (cssSelector->groupText.contains(elementName % "." % className)) { matches.append(cssSelector); } } } } } else { // try match on element name alone foreach(CSSInfo::CSSSelector * cssSelector, m_CSSSelectors) { if (cssSelector->elementNames.contains(elementName) && cssSelector->classNames.isEmpty()) { matches.append(cssSelector); } } } return matches; } QStringList CSSInfo::getAllPropertyValues(QString property) { QStringList property_values; int last_selector_line = -1; for (int i = m_CSSSelectors.count() - 1; i >= 0; i--) { CSSInfo::CSSSelector *cssSelector = m_CSSSelectors.at(i); if (cssSelector->isGroup && cssSelector->line == last_selector_line) { // Must be a selector group which we have already processed. continue; } last_selector_line = cssSelector->line; QList properties = getCSSProperties(m_OriginalText, cssSelector->openingBracePos + 1, cssSelector->closingBracePos); foreach (CSSInfo::CSSProperty *p, properties) { // If property is empty return properties of everything if (property.isEmpty() || p->name == property) { property_values.append(p->value); } } } return property_values; } QString CSSInfo::getReformattedCSSText(bool multipleLineFormat) { QString new_text(m_OriginalText); int selector_indent = m_IsCSSFile ? 0 : TAB_SPACES_WIDTH; // Work backwards through our selectors to change the document as will be in line order. // must also cater for fact that a selector group ( e.g. body,p { ) will have multiple // selector entries so skip if the next selector is on the same line. int last_selector_line = -1; for (int i = m_CSSSelectors.count() - 1; i >= 0; i--) { CSSInfo::CSSSelector *cssSelector = m_CSSSelectors.at(i); if (cssSelector->isGroup && cssSelector->line == last_selector_line) { // Must be a selector group which we have already processed. continue; } last_selector_line = cssSelector->line; // Will place a blank line after every style if in multi-line mode if (multipleLineFormat) { new_text.insert(cssSelector->closingBracePos + 1, LINE_MARKER); } // Now replace the contents inside the braces QList new_properties = getCSSProperties(m_OriginalText, cssSelector->openingBracePos + 1, cssSelector->closingBracePos); const QString &new_properties_text = formatCSSProperties(new_properties, multipleLineFormat, selector_indent); new_text.replace(cssSelector->openingBracePos + 1, cssSelector->closingBracePos - cssSelector->openingBracePos - 1, new_properties_text); // Reformat the selector text itself - whitespace only since incomplete parsing. // Will ensure the braces are placed on the same line as the selector name, // comma separated groups are spaced apart and double spaces are removed. QString selector_text = m_OriginalText.mid(cssSelector->position, cssSelector->openingBracePos - cssSelector->position); selector_text.replace(QRegularExpression(","), ", "); selector_text.replace(QRegularExpression(" {2,}"), QChar(' ')); new_text.replace(cssSelector->position, cssSelector->openingBracePos - cssSelector->position, selector_text.trimmed() % QChar(' ')); // Make sure the selector itself is left-aligned (indented if inline CSS) if (cssSelector->position > 0) { int pos = cssSelector->position; while (pos-- > 0 && (new_text.at(pos) == QChar(' ') || new_text.at(pos) == QChar('\t'))); if (pos <= 0) { new_text.replace(0, cssSelector->position, QString(" ").repeated(selector_indent)); } else { new_text.replace(pos + 1, cssSelector->position - pos - 1, QString(" ").repeated(selector_indent)); new_text.insert(pos + 1, QChar('\n')); } } } // Finally remove extra blank lines so styles are placed consecutively if inline, or one line spacing if CSS. // If we are reformatting an inline CSS, make sure we are doing so only within style blocks if (m_IsCSSFile) { new_text.replace(QRegularExpression("\n{2,}"), "\n"); } else { int style_start = -1; int style_end = -1; int offset = 0; while (findInlineStyleBlock(new_text, offset, style_start, style_end)) { QString script_text = new_text.mid(style_start, style_end - style_start); script_text.replace(QRegularExpression("\n{2,}"), "\n"); new_text.replace(style_start, style_end - style_start, script_text); offset = style_start + script_text.length(); } } new_text.replace(LINE_MARKER, "\n"); return new_text.trimmed(); } QString CSSInfo::removeMatchingSelectors(QList cssSelectors) { // First try to find a CSS selector currently parsed that matches each of the selectors supplied. QList remove_selectors; foreach(CSSSelector * css_selector, cssSelectors) { foreach(CSSSelector * match_selector, m_CSSSelectors) { if ((match_selector->line == css_selector->line) && (match_selector->groupText == css_selector->groupText)) { remove_selectors.append(match_selector); break; } } } // If no matches found, return a null string to caller if (remove_selectors.isEmpty()) { return QString(); } QString new_text(m_OriginalText); // Sort the selectors by line number ascending. qSort(remove_selectors.begin(), remove_selectors.end(), dereferencedLessThan); CSSSelector *remove_selector; // Now iterate in reverse order for (int i = remove_selectors.count() - 1; i >= 0; i--) { remove_selector = remove_selectors.at(i); // Is the selector in a group - if so, just remove the text portion. if (remove_selector->isGroup) { // Life is now complicated. We need to be careful how we remove the text. const int selector_length = remove_selector->originalText.length(); const QString current_selector_text = new_text.mid(remove_selector->position, selector_length); QStringList current_groups = current_selector_text.split(QChar(','), QString::SkipEmptyParts); // If we are the last group within the selector, we can safely remove the whole thing if (current_groups.count() > 1) { // Darn, we arent. We will reassemble the group selector, calculate the difference in length // between the old and new and then update all of the selectors for the group to assign a // new offset for the opening bracket/closing bracket position. for (int j = 0; j < current_groups.count(); j++) { if (current_groups.at(j).trimmed() == remove_selector->groupText) { current_groups.removeAt(j); break; } } const QString new_groups_text = current_groups.join(",").trimmed(); int delta = remove_selector->originalText.length() - new_groups_text.length(); foreach(CSSSelector * update_selector, m_CSSSelectors) { if (update_selector->line == remove_selector->line) { update_selector->openingBracePos -= delta; update_selector->closingBracePos -= delta; } } new_text.replace(remove_selector->position, selector_length, new_groups_text); // Done all we intend to for this selector group for now continue; } } // Remove the entire text for this CSS style from the stylesheet, plus trailing whitespace. int start_pos = remove_selector->position; int end_pos = remove_selector->closingBracePos; while (++end_pos < new_text.length() && new_text.at(end_pos).isSpace()); new_text.remove(start_pos, end_pos - start_pos); } return new_text; } QList CSSInfo::getCSSProperties(const QString &text, const int &styleTextStartPos, const int &styleTextEndPos) { QList new_properties; if (styleTextEndPos - 1 <= styleTextStartPos) { return new_properties; } const QString &style_text = text.mid(styleTextStartPos, styleTextEndPos - styleTextStartPos); QStringList properties = style_text.split(QChar(';'), QString::SkipEmptyParts); foreach(QString property_text, properties) { if (property_text.trimmed().isEmpty()) { continue; } QStringList name_values = property_text.split(QChar(':'), QString::SkipEmptyParts); CSSProperty *css_property = new CSSProperty(); // Any badly formed CSS or stuff we don't "understand" like pre-processing we leave as is if (name_values.count() != 2) { css_property->name = property_text.trimmed(); css_property->value = QString(); } else { css_property->name = name_values.at(0).trimmed(); css_property->value = name_values.at(1).trimmed(); } new_properties.append(css_property); } return new_properties; } QString CSSInfo::formatCSSProperties(QList new_properties, bool multipleLineFormat, const int &selectorIndent) { QString tab_spaces = QString(" ").repeated(TAB_SPACES_WIDTH + selectorIndent); if (new_properties.count() == 0) { if (multipleLineFormat) { return QString("\n%1") .arg(QString(" ").repeated(selectorIndent)); } else { return QString(""); } } else { QStringList property_values; foreach(CSSInfo::CSSProperty * new_property, new_properties) { if (new_property->value.isNull()) { property_values.append(new_property->name); } else { property_values.append(QString("%1: %2").arg(new_property->name).arg(new_property->value)); } } if (multipleLineFormat) { return QString("\n%1%2;\n%3") .arg(tab_spaces) .arg(property_values.join(";\n" % tab_spaces)) .arg(QString(" ").repeated(selectorIndent)); } else { return QString(" %1; ").arg(property_values.join("; ")); } } } bool CSSInfo::findInlineStyleBlock(const QString &text, const int &offset, int &styleStart, int &styleEnd) { QRegularExpression inline_styles_search("<\\s*style\\s[^>]+>", QRegularExpression::CaseInsensitiveOption|QRegularExpression::InvertedGreedinessOption); int style_len = 0; styleEnd = -1; styleStart = -1; QRegularExpressionMatch match = inline_styles_search.match(text, offset); if (match.hasMatch()) { styleStart = match.capturedStart(); style_len = match.capturedLength(); } if (styleStart > 0) { styleStart += style_len; styleEnd = text.indexOf(QRegularExpression("<\\s*/\\s*style\\s*>", QRegularExpression::CaseInsensitiveOption), styleStart); if (styleEnd >= styleStart) { return true; } } return false; } void CSSInfo::parseCSSSelectors(const QString &text, const int &offsetLines, const int &offsetPos) { QRegularExpression strip_attributes_regex("\\[[^\\]]*\\]"); QRegularExpression strip_ids_regex("#[^\\s\\.]+"); QRegularExpression strip_non_name_chars_regex("[^A-Za-z0-9_\\-\\.:]+"); QString search_text = replaceBlockComments(text); // CSS selectors can be in a myriad of formats... the class based selectors could be: // .c1 / e1.c1 / e1.c1.c2 / e1[class~=c1] / e1#id1.c1 / e1.c1#id1 / .c1, .c2 / ... // Then the element based selectors could be: // e1 / e1 > e2 / e1 e2 / e1 + e2 / e1[attribs...] / e1#id1 / e1, e2 / ... // Really needs a parser to do this properly, this will only handle the 90% scenarios. // Note: selector groups can be sepaparated by line feeds so you can not stop // at the beginning of line when searching for the start of a selector int pos = 0; int open_brace_pos = -1; int close_brace_pos = -1; while (true) { open_brace_pos = search_text.indexOf(QChar('{'), pos); if (open_brace_pos < 0) { break; } // Now search backwards until we get a line (or more) containing text . bool have_text = false; pos = open_brace_pos - 1; while ((pos >= 0) && (!DELIMITERS.contains(search_text.at(pos)) || !have_text)) { if (search_text.at(pos).isLetter()) { have_text = true; } pos--; } pos++; if (!have_text) { // Really badly formed CSS document - try to skip ahead pos = open_brace_pos + 1; continue; } close_brace_pos = search_text.indexOf(QChar('}'), open_brace_pos + 1); if (close_brace_pos < 0) { // Another badly formed scenario - no point in looking further break; } // Skip past leading whitespace/newline. while (search_text.at(pos).isSpace()) { pos++; } int line = search_text.left(pos + 1).count(QChar('\n')) + 1; QString selector_text = search_text.mid(pos, open_brace_pos - pos).trimmed(); // Handle case of a selector group containing multiple declarations QStringList matches = selector_text.split(QChar(','), QString::SkipEmptyParts); foreach(QString match, matches) { CSSSelector *selector = new CSSSelector(); selector->originalText = selector_text; selector->groupText = match.trimmed(); selector->position = pos + offsetPos; selector->line = line + offsetLines; selector->isGroup = matches.length() > 1; selector->openingBracePos = open_brace_pos + offsetPos; selector->closingBracePos = close_brace_pos + offsetPos; // Need to parse our selector text to determine what sort of selector it contains. // First strip out any attributes and then identifiers match.replace(strip_attributes_regex, ""); match.replace(strip_ids_regex, ""); // Also replace any other characters like > or + not of interest match.replace(strip_non_name_chars_regex, QChar(' ')); // Now break it down into the element components QStringList elements = match.trimmed().split(QChar(' '), QString::SkipEmptyParts); foreach(QString element, elements) { if (element.contains(QChar('.'))) { QStringList parts = element.split('.'); if (!parts.at(0).isEmpty()) { selector->elementNames.append(parts.at(0)); } for (int i = 1; i < parts.length(); i++) { selector->classNames.append(parts.at(i)); } } else { selector->elementNames.append(element); } } m_CSSSelectors.append(selector); } pos = open_brace_pos + 1; } } QString CSSInfo::replaceBlockComments(const QString &text) { // We take a copy of the text and remove all block comments from it. // However we must be careful to replace with spaces/keep line feeds // so that do not corrupt the position information used by the parser. QString new_text(text); QRegularExpression comment_search("/\\*.*\\*/", QRegularExpression::InvertedGreedinessOption|QRegularExpression::DotMatchesEverythingOption); int start = 0; int comment_index; while (true) { int comment_len = 0; comment_index = -1; QRegularExpressionMatch match = comment_search.match(new_text, start); if (match.hasMatch()) { comment_index = match.capturedStart(); comment_len = match.capturedLength(); } if (comment_index < 0) { break; } QString match_text = new_text.mid(comment_index, comment_len); match_text.replace(QRegularExpression("[^\r\n]"), QChar(' ')); new_text.remove(comment_index, match_text.length()); new_text.insert(comment_index, match_text); // Prepare for the next comment. start = comment_index + comment_len; if (start >= new_text.length() - 2) { break; } } return new_text; } Sigil-0.9.9/src/Misc/CSSInfo.h000066400000000000000000000113041321676412500157050ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef CSSINFO_H #define CSSINFO_H #include #include class QStringList; class CSSInfo : public QObject { Q_OBJECT public: /** * Parse the supplied text to identify all named CSS styles. * The supplied text can be a CSS file or html containing inline styles. */ CSSInfo(const QString &text, bool isCSSFile = true); struct CSSSelector { QString originalText; /* The original text of the complete selector */ bool isGroup; /* Whether selector was declared in a comma separated group */ QString groupText; /* The text of the selector for this group (same as originalText if not a group) */ QStringList classNames; /* The classname(s) (stripped of periods) if a class selector */ QStringList elementNames; /* The element names if any (stripped of any ids/attributes) */ int line; /* For convenience of navigation, the line# selector is on */ int position; /* The position in the file of the full selector name */ int openingBracePos; /* Location of the opening brace which contains properties */ int closingBracePos; /* Location of the closing brace which contains properties */ bool operator<(const CSSSelector &rhs) const { return line < rhs.line; } }; struct CSSProperty { QString name; QString value; }; /** * Return selectors subset for only class based CSS declarations. */ QList getClassSelectors(const QString filterClassName = ""); /** * Search for a line position for a tag element name and an optional * class name for the style. * Looks in order of: elementName.style, .style */ CSSSelector *getCSSSelectorForElementClass(const QString &elementName, const QString &className); /** * Search for *all* CSS selector that match an elementName, and classname * not just the first. Needed because one use of an html class can actually * relate to more than one style */ QList getAllCSSSelectorsForElementClass(const QString &elementName, const QString &className); /** * Return a list of all property values for the given property in the CSS. */ QStringList getAllPropertyValues(QString property); /** * Return the original text with a reformatted appearance either to * a multiple line style (each property on its own line) or single line style. */ QString getReformattedCSSText(bool multipleLineFormat); /** * Search for a CSSSelector with the same definition of original group text and line as this, * and if found remove from the document text, returning the new text. * If not found returns a null string. * Note the caller must intialise a new CSSInfo object to re-parse the updated text for another remove. */ QString removeMatchingSelectors(QList cssSelectors); static QList getCSSProperties(const QString &text, const int &styleTextStartPos, const int &styleTextEndPos); static QString formatCSSProperties(QList new_properties, bool multipleLineFormat, const int &selectorIndent = 0); private: bool findInlineStyleBlock(const QString &text, const int &offset, int &styleStart, int &styleEnd); void parseCSSSelectors(const QString &text, const int &offsetLines, const int &offsetPos); QString replaceBlockComments(const QString &text); QList m_CSSSelectors; QString m_OriginalText; bool m_IsCSSFile; }; template bool dereferencedLessThan(T *o1, T *o2) { return *o1 < *o2; } #endif // CSSINFO_H Sigil-0.9.9/src/Misc/CaseInsensitiveItem.h000066400000000000000000000031111321676412500203510ustar00rootroot00000000000000/************************************************************************** ** ** Copyright (C) 2013 Dave Heiland ** ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** ** GNU Lesser General Public License Usage ** ** This file may be used under the terms of the GNU Lesser General Public ** License version 2.1 as published by the Free Software Foundation and ** appearing in the file LICENSE.LGPL included in the packaging of this file. ** Please review the following information to ensure the GNU Lesser General ** Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** Other Usage ** ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** **************************************************************************/ #pragma once #ifndef CASEINSENSITIVE_H #define CASEINSENSITIVE_H #include class CaseInsensitiveItem: public QStandardItem { public: CaseInsensitiveItem(QWidget *parent = 0) : QStandardItem() { } private: bool operator<(const QStandardItem &other) const { return text().toLower() < other.text().toLower(); } }; #endif // CASEINSENSITIVE_H Sigil-0.9.9/src/Misc/DescriptiveInfo.h000066400000000000000000000023141321676412500175370ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, ON, Canada ** Copyright (C) 2011 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef DESCRIPTIVEINFO_H #define DESCRIPTIVEINFO_H class QString; struct DescriptiveInfo { // The user-friendly name QString name; // Associated description of the name QString description; }; #endif // DESCRIPTIVEINFO_H Sigil-0.9.9/src/Misc/EmbeddedPython.cpp000066400000000000000000000436061321676412500177010ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin Hendricks ** Copyright (C) 2015 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Misc/EmbeddedPython.h" #include #include #include #include #include #include #include #include #include "Misc/Utility.h" #include "sigil_constants.h" /** * Possibly Useful QMetaTypes::Type types * * QMetaType::Bool 1 bool * QMetaType::Int 2 int * QMetaType::UInt 3 unsigned int * QMetaType::Double 6 double * QMetaType::QChar 7 QChar * QMetaType::QString 10 QString * QMetaType::QByteArray 12 QByteArray * QMetaType::Long 32 long * QMetaType::LongLong 4 LongLong * QMetaType::Short 33 short * QMetaType::Char 34 char * QMetaType::ULong 35 unsigned long * QMetaType::ULongLong 5 ULongLong * QMetaType::UShort 36 unsigned short * QMetaType::SChar 40 signed char * QMetaType::UChar 37 unsigned char * QMetaType::Float 38 float * QMetaType::QVariant 41 QVariant * QMetaType::QVariantList 9 QVariantList * QMetaType::QStringList 11 QStringList * QMetaType::QVariantMap 8 QVariantMap * QMetaType::QVariantHash 28 QVariantHash * QMetaType::User 1024 Base value for User registered Type * QMetaType::UnknownType 0 This is an invalid type id. It is returned from QMetaType for types that are not registered */ /** * // example of how to run a python function inside a specific module * * void EmbeddedPython::multiply_pushed(int val1, int val2) * { * int rv = 0; * QString error_traceback; * QList args; * args.append(QVariant(val1)); * args.append(QVariant(val2)); * QVariant res = runInPython(QString("multiply"), * QString("multiply"), * args, * &rv, * error_traceback); * if (rv == 0) { * // no errors * } else { * // error occured * } * } * * // Where multiply.py is: * * #!/usr/bin/env python3 * * def multiply(a,b): * print("Will compute", a, "times", b) * c = a * b * return c */ /** * // example of how to use the callPyObjMethod * * // First invoke module function to get the Python object * * PyObjectPtr MyClass::get_object() * { * int rv = 0; * QString traceback; * QString v1 = QString("Hello"); * QList args; * args.append(QVariant(v1)); * * QVariant res = m_epp->runInPython( QString("multiply"), * QString("get_object"), * args, * &rv, * traceback, * true); * if (rv == 0) { * return PyObjectPtr(res); * } else { * return PyObjectPtr(); * } * } * * // Now invoke its "get_len" method * * QString MyClass:use_object(PyObjectPtr v) * { * int rv = 0; * QString traceback; * QList args; * QVariant res = m_epp->callPyObjMethod(v, * QString("get_len"), * args, * &rv, * traceback); * if (rv == 0) { * return res.toString(); * } else { * return QString("Error: ") + QString::number(rv); * } * } * * * # With the following python code inside of multiply.py * * class TestMe: * def __init__(self, storeme): * self.storeme = storeme * self.mylen = len(self.storeme) * * def get_me(self): * return self.storeme * * def get_len(self): * return self.mylen * * def get_object(v1): * tme = TestMe(v1) * return tme */ QMutex EmbeddedPython::m_mutex; EmbeddedPython* EmbeddedPython::m_instance = 0; int EmbeddedPython::m_pyobjmetaid = 0; PyThreadState * EmbeddedPython::m_threadstate = NULL; EmbeddedPython* EmbeddedPython::instance() { if (m_instance == 0) { m_instance = new EmbeddedPython(); } return m_instance; } EmbeddedPython::EmbeddedPython() { // Build string list of paths that will // comprise the embedded Python's sys.path #if defined(BUNDLING_PYTHON) // Apple doesn't need these paths set with its framework-built Python #if !defined(__APPLE__) QString pyhomepath = QCoreApplication::applicationDirPath(); wchar_t *hpath = new wchar_t[pyhomepath.size()+1]; pyhomepath.toWCharArray(hpath); hpath[pyhomepath.size()]=L'\0'; QString pysyspath = pyhomepath + PYTHON_MAIN_PATH; foreach (const QString &src_path, PYTHON_SYS_PATHS) { pysyspath = pysyspath + PATH_LIST_DELIM + pyhomepath + PYTHON_MAIN_PATH + src_path; } wchar_t *mpath = new wchar_t[pysyspath.size()+1]; pysyspath.toWCharArray(mpath); mpath[pysyspath.size()]=L'\0'; delete[] hpath; Py_OptimizeFlag = 2; Py_NoSiteFlag = 1; #endif // !defined(__APPLE__) // Everyone uses these flags when python is bundled. Py_DontWriteBytecodeFlag = 1; Py_IgnoreEnvironmentFlag = 1; Py_NoUserSiteDirectory = 1; //Py_DebugFlag = 0; //Py_VerboseFlag = 0; #if !defined(__APPLE__) // Set before Py_Initialize to ensure isolation from system python Py_SetPath(mpath); delete[] mpath; #endif // !defined(__APPLE__) #endif // defined(BUNDLING_PYTHON) Py_Initialize(); PyEval_InitThreads(); m_threadstate = PyEval_SaveThread(); m_pyobjmetaid = qMetaTypeId(); } EmbeddedPython::~EmbeddedPython() { if (m_instance) { delete m_instance; m_instance = 0; } m_pyobjmetaid = 0; PyEval_RestoreThread(m_threadstate); Py_Finalize(); } QString EmbeddedPython::embeddedRoot() { QString embedded_root; QStringList embedded_roots; QDir d; #ifdef Q_OS_MAC embedded_roots.append(QCoreApplication::applicationDirPath() + "/../python3lib/"); #elif defined(Q_OS_WIN32) embedded_roots.append(QCoreApplication::applicationDirPath() + "/python3lib/"); #elif !defined(Q_OS_WIN32) && !defined(Q_OS_MAC) // all flavours of linux / unix // user supplied environment variable to 'share/sigil' directory will overrides everything if (!sigil_extra_root.isEmpty()) { embedded_roots.append(sigil_extra_root + "/python3lib/"); } else { embedded_roots.append(sigil_share_root + "/python3lib/"); } #endif Q_FOREACH (QString s, embedded_roots) { if (d.exists(s)) { embedded_root = s; break; } } QDir base(embedded_root); return base.absolutePath(); } bool EmbeddedPython::addToPythonSysPath(const QString &mpath) { EmbeddedPython::m_mutex.lock(); PyGILState_STATE gstate = PyGILState_Ensure(); PyObject* sysPath = NULL; PyObject* aPath = NULL; bool success = false; // PySys_GetObject borrows a reference */ sysPath = PySys_GetObject((char*)"path"); if (sysPath != NULL) { aPath = PyUnicode_FromString(mpath.toUtf8().constData()); if (aPath != NULL) { PyList_Append(sysPath, aPath); success = true; } } Py_XDECREF(aPath); PyGILState_Release(gstate); EmbeddedPython::m_mutex.unlock(); return success; } // run interpreter without initiating/locking/unlocking GIL // in a single thread at a time QVariant EmbeddedPython::runInPython(const QString &mname, const QString &fname, const QVariantList &args, int *rv, QString &tb, bool ret_python_object) { EmbeddedPython::m_mutex.lock(); PyGILState_STATE gstate = PyGILState_Ensure(); QVariant res = QVariant(QString()); PyObject *moduleName = NULL; PyObject *module = NULL; PyObject *func = NULL; PyObject *pyargs = NULL; PyObject *pyres = NULL; int idx = 0; moduleName = PyUnicode_FromString(mname.toUtf8().constData()); if (moduleName == NULL) { *rv = -1; goto cleanup; } module = PyImport_Import(moduleName); if (module == NULL) { *rv = -2; goto cleanup; } func = PyObject_GetAttrString(module,fname.toUtf8().constData()); if (func == NULL) { *rv = -3; goto cleanup; } if (!PyCallable_Check(func)) { *rv = -4; goto cleanup; } // Build up Python argument List from args pyargs = PyTuple_New(args.size()); idx = 0; foreach(QVariant arg, args) { PyTuple_SetItem(pyargs, idx, QVariantToPyObject(arg)); idx++; } pyres = PyObject_CallObject(func, pyargs); if (pyres == NULL) { *rv = -5; goto cleanup; } *rv = 0; res = PyObjectToQVariant(pyres, ret_python_object); cleanup: if (PyErr_Occurred() != NULL) { tb = getPythonErrorTraceback(); } Py_XDECREF(pyres); Py_XDECREF(pyargs); Py_XDECREF(func); Py_XDECREF(module); Py_XDECREF(moduleName); PyGILState_Release(gstate); EmbeddedPython::m_mutex.unlock(); return res; } // given an existing python object instance, invoke one of its methods // grabs mutex to prevent need for Python GIL QVariant EmbeddedPython::callPyObjMethod(PyObjectPtr &pyobj, const QString &methname, const QVariantList &args, int *rv, QString &tb, bool ret_python_object) { EmbeddedPython::m_mutex.lock(); PyGILState_STATE gstate = PyGILState_Ensure(); QVariant res = QVariant(QString()); PyObject* obj = pyobj.object(); PyObject* func = NULL; PyObject* pyargs = NULL; PyObject* pyres = NULL; int idx = 0; func = PyObject_GetAttrString(obj,methname.toUtf8().constData()); if (func == NULL) { *rv = -1; goto cleanup; } if (!PyCallable_Check(func)) { *rv = -2; goto cleanup; } // Build up Python argument List from args pyargs = PyTuple_New(args.size()); idx = 0; foreach(QVariant arg, args) { PyTuple_SetItem(pyargs, idx, QVariantToPyObject(arg)); idx++; } pyres = PyObject_CallObject(func, pyargs); if (pyres == NULL) { *rv = -3; goto cleanup; } *rv = 0; res = PyObjectToQVariant(pyres, ret_python_object); cleanup: if (PyErr_Occurred() != NULL) { tb = getPythonErrorTraceback(); } Py_XDECREF(pyres); Py_XDECREF(pyargs); Py_XDECREF(func); PyGILState_Release(gstate); EmbeddedPython::m_mutex.unlock(); return res; } // *** below here all routines are private and only invoked // *** from runInPython and callPyObjMethod with lock held // Convert PyObject types to their QVariant equivalents // call recursively to allow populating QVariant lists and lists of lists QVariant EmbeddedPython::PyObjectToQVariant(PyObject *po, bool ret_python_object) { QVariant res = QVariant(QString()); if ((po) == NULL) return res; if (PyLong_Check(po)) { res = QVariant(PyLong_AsLongLong(po)); } else if (PyFloat_Check(po)) { res = QVariant(PyFloat_AsDouble(po)); } else if (PyBytes_Check(po)) { res = QVariant(QByteArray(PyBytes_AsString(po))); } else if (PyUnicode_Check(po)) { int kind = PyUnicode_KIND(po); if (PyUnicode_READY(po) != 0) return res; if (kind == PyUnicode_1BYTE_KIND) { // latin 1 according to PEP 393 res = QVariant(QString::fromLatin1(reinterpret_castPyUnicode_1BYTE_DATA(po), -1)); } else if (kind == PyUnicode_2BYTE_KIND) { res = QVariant(QString::fromUtf16(PyUnicode_2BYTE_DATA(po), -1)); } else if (kind == PyUnicode_4BYTE_KIND) { // PyUnicode_4BYTE_KIND res = QVariant(QString::fromUcs4(PyUnicode_4BYTE_DATA(po), -1)); } else { // convert to utf8 since not a known res = QVariant(QString::fromUtf8(PyUnicode_AsUTF8(po),-1)); } } else if (PyTuple_Check(po)) { QVariantList vlist; int n = PyTuple_Size(po); for (int i=0; i< n; i++) { vlist.append(PyObjectToQVariant(PyTuple_GetItem(po,i))); } res = QVariant(vlist); } else if (PyList_Check(po)) { QVariantList vlist; int n = PyList_Size(po); for (int i=0; i< n; i++) { vlist.append(PyObjectToQVariant(PyList_GetItem(po,i))); } res = QVariant(vlist); } else if (ret_python_object) { QVariant var; var.setValue(PyObjectPtr(po)); res = var; } else { // do nothing here to return null value } return res; } // Convert QVariant to a Python Equivalent Type // call recursively to allow populating tuples/lists and lists of lists PyObject* EmbeddedPython::QVariantToPyObject(const QVariant &v) { PyObject* value = NULL; bool ok; switch ((QMetaType::Type)v.type()) { case QMetaType::Double: value = Py_BuildValue("d", v.toDouble(&ok)); break; case QMetaType::Float: value = Py_BuildValue("f", v.toFloat(&ok)); break; case QMetaType::Int: value = Py_BuildValue("i", v.toInt(&ok)); break; case QMetaType::UInt: value = Py_BuildValue("I", v.toUInt(&ok)); break; case QMetaType::LongLong: value = Py_BuildValue("L", v.toLongLong(&ok)); break; case QMetaType::ULongLong: value = Py_BuildValue("K", v.toULongLong(&ok)); break; case QMetaType::QString: value = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, v.toString().utf16(), v.toString().size()); // value = Py_BuildValue("s", v.toString().toUtf8().constData()); break; case QMetaType::QByteArray: value = Py_BuildValue("y", v.toByteArray().constData()); break; case QMetaType::QStringList: { QStringList vlist = v.toStringList(); value = PyList_New(vlist.size()); int pos = 0; foreach(QString av, vlist) { PyObject* strval = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, av.utf16(), av.size()); PyList_SetItem(value, pos, strval); pos++; } } break; case QMetaType::QVariantList: { QVariantList vlist = v.toList(); value = PyList_New(vlist.size()); int pos = 0; foreach(QVariant av, vlist) { PyList_SetItem(value, pos, QVariantToPyObject(av)); pos++; } } break; default: { if ((QMetaType::Type)v.type() >= QMetaType::User && (v.userType() == m_pyobjmetaid)) { PyObjectPtr op = v.value(); value = op.object(); // Need to increment object count otherwise will go away when Py_XDECREF used on pyargs Py_XINCREF(value); } else { // Ensure we don't have any holes. value = Py_BuildValue("u", ""); } } break; } return value; } // get traceback from inside interpreter upon error QString EmbeddedPython::getPythonErrorTraceback(bool useMsgBox) { PyObject *etype = NULL; PyObject *evalue = NULL; PyObject *etraceback = NULL; PyObject *mod = NULL; PyObject *elist = NULL; QStringList tblist; PyErr_Fetch(&etype, &evalue, &etraceback); PyErr_NormalizeException(&etype, &evalue, &etraceback); mod = PyImport_ImportModule("traceback"); if (mod) { elist = PyObject_CallMethod(mod, "format_exception", "OOO", etype, evalue, etraceback); if (elist != NULL) { tblist = PyObjectToQVariant(elist).toStringList(); } else { tblist.append(QString("Error: traceback report is missing")); } } else { tblist.append(QString("Error: traceback module failed to load")); } Py_XDECREF(elist); Py_XDECREF(mod); Py_XDECREF(etraceback); Py_XDECREF(evalue); Py_XDECREF(etype); PyErr_Clear(); QString tb = tblist.join(QString("\n")); if (useMsgBox) { QString message = QString(tr("Embedded Python Error")); Utility::DisplayStdErrorDialog(message, tb); } return tb; } Sigil-0.9.9/src/Misc/EmbeddedPython.h000066400000000000000000000044421321676412500173410ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin B. Hendricks, John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef EMBEDDEDPYTHON_H #define EMBEDDEDPYTHON_H #include #include #include #include #include #include "Misc/PyObjectPtr.h" /** * Singleton. */ class EmbeddedPython { Q_DECLARE_TR_FUNCTIONS(EmbeddedPython) public: static EmbeddedPython* instance(); ~EmbeddedPython(); QString embeddedRoot(); bool addToPythonSysPath(const QString& modulepath); QVariant runInPython(const QString &module_name, const QString &function_name, const QVariantList &args, int *pRV, QString &error_traceback, bool ret_python_object = false); QVariant callPyObjMethod(PyObjectPtr &pyobj, const QString &methname, const QVariantList &args, int *rv, QString &tb, bool ret_python_object = false); private: EmbeddedPython(); QVariant PyObjectToQVariant(PyObject *po, bool ret_python_object = false); PyObject *QVariantToPyObject(const QVariant &v); QString getPythonErrorTraceback(bool useMsgBox = true); static QMutex m_mutex; static EmbeddedPython *m_instance; static int m_pyobjmetaid; static PyThreadState *m_threadstate; }; #endif // EMBEDDEDPYTHON_H Sigil-0.9.9/src/Misc/EmbeddedPythonPkg.cpp000066400000000000000000000436531321676412500203450ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin Hendricks ** Copyright (C) 2015 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Misc/EmbeddedPython.h" #include #include #include #include #include #include #include #include #include "Misc/Utility.h" #include "sigil_constants.h" /** * Possibly Useful QMetaTypes::Type types * * QMetaType::Bool 1 bool * QMetaType::Int 2 int * QMetaType::UInt 3 unsigned int * QMetaType::Double 6 double * QMetaType::QChar 7 QChar * QMetaType::QString 10 QString * QMetaType::QByteArray 12 QByteArray * QMetaType::Long 32 long * QMetaType::LongLong 4 LongLong * QMetaType::Short 33 short * QMetaType::Char 34 char * QMetaType::ULong 35 unsigned long * QMetaType::ULongLong 5 ULongLong * QMetaType::UShort 36 unsigned short * QMetaType::SChar 40 signed char * QMetaType::UChar 37 unsigned char * QMetaType::Float 38 float * QMetaType::QVariant 41 QVariant * QMetaType::QVariantList 9 QVariantList * QMetaType::QStringList 11 QStringList * QMetaType::QVariantMap 8 QVariantMap * QMetaType::QVariantHash 28 QVariantHash * QMetaType::User 1024 Base value for User registered Type * QMetaType::UnknownType 0 This is an invalid type id. It is returned from QMetaType for types that are not registered */ /** * // example of how to run a python function inside a specific module * * void EmbeddedPython::multiply_pushed(int val1, int val2) * { * int rv = 0; * QString error_traceback; * QList args; * args.append(QVariant(val1)); * args.append(QVariant(val2)); * QVariant res = runInPython(QString("multiply"), * QString("multiply"), * args, * &rv, * error_traceback); * if (rv == 0) { * // no errors * } else { * // error occured * } * } * * // Where multiply.py is: * * #!/usr/bin/env python3 * * def multiply(a,b): * print("Will compute", a, "times", b) * c = a * b * return c */ /** * // example of how to use the callPyObjMethod * * // First invoke module function to get the Python object * * PyObjectPtr MyClass::get_object() * { * int rv = 0; * QString traceback; * QString v1 = QString("Hello"); * QList args; * args.append(QVariant(v1)); * * QVariant res = m_epp->runInPython( QString("multiply"), * QString("get_object"), * args, * &rv, * traceback, * true); * if (rv == 0) { * return PyObjectPtr(res); * } else { * return PyObjectPtr(); * } * } * * // Now invoke its "get_len" method * * QString MyClass:use_object(PyObjectPtr v) * { * int rv = 0; * QString traceback; * QList args; * QVariant res = m_epp->callPyObjMethod(v, * QString("get_len"), * args, * &rv, * traceback); * if (rv == 0) { * return res.toString(); * } else { * return QString("Error: ") + QString::number(rv); * } * } * * * # With the following python code inside of multiply.py * * class TestMe: * def __init__(self, storeme): * self.storeme = storeme * self.mylen = len(self.storeme) * * def get_me(self): * return self.storeme * * def get_len(self): * return self.mylen * * def get_object(v1): * tme = TestMe(v1) * return tme */ QMutex EmbeddedPython::m_mutex; EmbeddedPython* EmbeddedPython::m_instance = 0; int EmbeddedPython::m_pyobjmetaid = 0; PyThreadState * EmbeddedPython::m_threadstate = NULL; EmbeddedPython* EmbeddedPython::instance() { if (m_instance == 0) { m_instance = new EmbeddedPython(); } return m_instance; } EmbeddedPython::EmbeddedPython() { // Build string list of paths that will // comprise the embedded Python's sys.path. #if defined(__APPLE__) // On Mac OS X QCoreApplication::applicationDirPath() points to // whereever Sigil.app/Contents/MacOS/ is located // but the python3 dir is in Contents QDir execdir(QCoreApplication::applicationDirPath()); execdir.cdUp(); QString pyhomepath = execdir.absolutePath(); #else QString pyhomepath = QCoreApplication::applicationDirPath(); #endif wchar_t *hpath = new wchar_t[pyhomepath.size()+1]; pyhomepath.toWCharArray(hpath); hpath[pyhomepath.size()]=L'\0'; QString pysyspath = pyhomepath + PYTHON_MAIN_PATH; foreach (const QString &src_path, PYTHON_SYS_PATHS) { pysyspath = pysyspath + PATH_LIST_DELIM + pyhomepath + PYTHON_MAIN_PATH + src_path; } wchar_t *mpath = new wchar_t[pysyspath.size()+1]; pysyspath.toWCharArray(mpath); mpath[pysyspath.size()]=L'\0'; delete[] hpath; Py_OptimizeFlag = 2; Py_NoSiteFlag = 1; Py_DontWriteBytecodeFlag = 1; Py_IgnoreEnvironmentFlag = 1; Py_NoUserSiteDirectory = 1; /*Py_DebugFlag = 0; Py_VerboseFlag = 0; Py_SetProgramName(progname); delete[] progname; Py_SetPythonHome(hpath); delete[] hpath;*/ // Set before Py_Initialize to ensure isolation from system python Py_SetPath(mpath); delete[] mpath; Py_Initialize(); PyEval_InitThreads(); m_threadstate = PyEval_SaveThread(); m_pyobjmetaid = qMetaTypeId(); } EmbeddedPython::~EmbeddedPython() { if (m_instance) { delete m_instance; m_instance = 0; } m_pyobjmetaid = 0; PyEval_RestoreThread(m_threadstate); Py_Finalize(); } QString EmbeddedPython::embeddedRoot() { QString embedded_root; QStringList embedded_roots; QDir d; #ifdef Q_OS_MAC embedded_roots.append(QCoreApplication::applicationDirPath() + "/../python3lib/"); #elif defined(Q_OS_WIN32) embedded_roots.append(QCoreApplication::applicationDirPath() + "/python3lib/"); #elif !defined(Q_OS_WIN32) && !defined(Q_OS_MAC) // all flavours of linux / unix if (!sigil_extra_root.isEmpty()) { embedded_roots.append(sigil_extra_root + "/python3lib/"); } else { embedded_roots.append(sigil_share_root + "/python3lib/"); } #endif Q_FOREACH (QString s, embedded_roots) { if (d.exists(s)) { embedded_root = s; break; } } QDir base(embedded_root); return base.absolutePath(); } bool EmbeddedPython::addToPythonSysPath(const QString &mpath) { EmbeddedPython::m_mutex.lock(); PyGILState_STATE gstate = PyGILState_Ensure(); PyObject* sysPath = NULL; PyObject* aPath = NULL; bool success = false; // PySys_GetObject borrows a reference */ sysPath = PySys_GetObject((char*)"path"); if (sysPath != NULL) { aPath = PyUnicode_FromString(mpath.toUtf8().constData()); if (aPath != NULL) { PyList_Append(sysPath, aPath); success = true; } } Py_XDECREF(aPath); PyGILState_Release(gstate); EmbeddedPython::m_mutex.unlock(); return success; } // run interpreter without initiating/locking/unlocking GIL // in a single thread at a time QVariant EmbeddedPython::runInPython(const QString &mname, const QString &fname, const QVariantList &args, int *rv, QString &tb, bool ret_python_object) { EmbeddedPython::m_mutex.lock(); PyGILState_STATE gstate = PyGILState_Ensure(); QVariant res = QVariant(QString()); PyObject *moduleName = NULL; PyObject *module = NULL; PyObject *func = NULL; PyObject *pyargs = NULL; PyObject *pyres = NULL; int idx = 0; moduleName = PyUnicode_FromString(mname.toUtf8().constData()); if (moduleName == NULL) { *rv = -1; goto cleanup; } module = PyImport_Import(moduleName); if (module == NULL) { *rv = -2; goto cleanup; } func = PyObject_GetAttrString(module,fname.toUtf8().constData()); if (func == NULL) { *rv = -3; goto cleanup; } if (!PyCallable_Check(func)) { *rv = -4; goto cleanup; } // Build up Python argument List from args pyargs = PyTuple_New(args.size()); idx = 0; foreach(QVariant arg, args) { PyTuple_SetItem(pyargs, idx, QVariantToPyObject(arg)); idx++; } pyres = PyObject_CallObject(func, pyargs); if (pyres == NULL) { *rv = -5; goto cleanup; } *rv = 0; res = PyObjectToQVariant(pyres, ret_python_object); cleanup: if (PyErr_Occurred() != NULL) { tb = getPythonErrorTraceback(); } Py_XDECREF(pyres); Py_XDECREF(pyargs); Py_XDECREF(func); Py_XDECREF(module); Py_XDECREF(moduleName); PyGILState_Release(gstate); EmbeddedPython::m_mutex.unlock(); return res; } // given an existing python object instance, invoke one of its methods // grabs mutex to prevent need for Python GIL QVariant EmbeddedPython::callPyObjMethod(PyObjectPtr &pyobj, const QString &methname, const QVariantList &args, int *rv, QString &tb, bool ret_python_object) { EmbeddedPython::m_mutex.lock(); PyGILState_STATE gstate = PyGILState_Ensure(); QVariant res = QVariant(QString()); PyObject* obj = pyobj.object(); PyObject* func = NULL; PyObject* pyargs = NULL; PyObject* pyres = NULL; int idx = 0; func = PyObject_GetAttrString(obj,methname.toUtf8().constData()); if (func == NULL) { *rv = -1; goto cleanup; } if (!PyCallable_Check(func)) { *rv = -2; goto cleanup; } // Build up Python argument List from args pyargs = PyTuple_New(args.size()); idx = 0; foreach(QVariant arg, args) { PyTuple_SetItem(pyargs, idx, QVariantToPyObject(arg)); idx++; } pyres = PyObject_CallObject(func, pyargs); if (pyres == NULL) { *rv = -3; goto cleanup; } *rv = 0; res = PyObjectToQVariant(pyres, ret_python_object); cleanup: if (PyErr_Occurred() != NULL) { tb = getPythonErrorTraceback(); } Py_XDECREF(pyres); Py_XDECREF(pyargs); Py_XDECREF(func); PyGILState_Release(gstate); EmbeddedPython::m_mutex.unlock(); return res; } // *** below here all routines are private and only invoked // *** from runInPython and callPyObjMethod with lock held // Convert PyObject types to their QVariant equivalents // call recursively to allow populating QVariant lists and lists of lists QVariant EmbeddedPython::PyObjectToQVariant(PyObject *po, bool ret_python_object) { QVariant res = QVariant(QString()); if ((po) == NULL) return res; if (PyLong_Check(po)) { res = QVariant(PyLong_AsLongLong(po)); } else if (PyFloat_Check(po)) { res = QVariant(PyFloat_AsDouble(po)); } else if (PyBytes_Check(po)) { res = QVariant(QByteArray(PyBytes_AsString(po))); } else if (PyUnicode_Check(po)) { int kind = PyUnicode_KIND(po); if (PyUnicode_READY(po) != 0) return res; if (kind == PyUnicode_1BYTE_KIND) { // latin 1 according to PEP 393 res = QVariant(QString::fromLatin1(reinterpret_castPyUnicode_1BYTE_DATA(po), -1)); } else if (kind == PyUnicode_2BYTE_KIND) { res = QVariant(QString::fromUtf16(PyUnicode_2BYTE_DATA(po), -1)); } else if (kind == PyUnicode_4BYTE_KIND) { // PyUnicode_4BYTE_KIND res = QVariant(QString::fromUcs4(PyUnicode_4BYTE_DATA(po), -1)); } else { // convert to utf8 since not a known res = QVariant(QString::fromUtf8(PyUnicode_AsUTF8(po),-1)); } } else if (PyTuple_Check(po)) { QVariantList vlist; int n = PyTuple_Size(po); for (int i=0; i< n; i++) { vlist.append(PyObjectToQVariant(PyTuple_GetItem(po,i))); } res = QVariant(vlist); } else if (PyList_Check(po)) { QVariantList vlist; int n = PyList_Size(po); for (int i=0; i< n; i++) { vlist.append(PyObjectToQVariant(PyList_GetItem(po,i))); } res = QVariant(vlist); } else if (ret_python_object) { QVariant var; var.setValue(PyObjectPtr(po)); res = var; } else { // do nothing here to return null value } return res; } // Convert QVariant to a Python Equivalent Type // call recursively to allow populating tuples/lists and lists of lists PyObject* EmbeddedPython::QVariantToPyObject(const QVariant &v) { PyObject* value = NULL; bool ok; switch ((QMetaType::Type)v.type()) { case QMetaType::Double: value = Py_BuildValue("d", v.toDouble(&ok)); break; case QMetaType::Float: value = Py_BuildValue("f", v.toFloat(&ok)); break; case QMetaType::Int: value = Py_BuildValue("i", v.toInt(&ok)); break; case QMetaType::UInt: value = Py_BuildValue("I", v.toUInt(&ok)); break; case QMetaType::LongLong: value = Py_BuildValue("L", v.toLongLong(&ok)); break; case QMetaType::ULongLong: value = Py_BuildValue("K", v.toULongLong(&ok)); break; case QMetaType::QString: value = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, v.toString().utf16(), v.toString().size()); // value = Py_BuildValue("s", v.toString().toUtf8().constData()); break; case QMetaType::QByteArray: value = Py_BuildValue("y", v.toByteArray().constData()); break; case QMetaType::QStringList: { QStringList vlist = v.toStringList(); value = PyList_New(vlist.size()); int pos = 0; foreach(QString av, vlist) { PyObject* strval = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, av.utf16(), av.size()); PyList_SetItem(value, pos, strval); pos++; } } break; case QMetaType::QVariantList: { QVariantList vlist = v.toList(); value = PyList_New(vlist.size()); int pos = 0; foreach(QVariant av, vlist) { PyList_SetItem(value, pos, QVariantToPyObject(av)); pos++; } } break; default: { if ((QMetaType::Type)v.type() >= QMetaType::User && (v.userType() == m_pyobjmetaid)) { PyObjectPtr op = v.value(); value = op.object(); // Need to increment object count otherwise will go away when Py_XDECREF used on pyargs Py_XINCREF(value); } else { // Ensure we don't have any holes. value = Py_BuildValue("u", ""); } } break; } return value; } // get traceback from inside interpreter upon error QString EmbeddedPython::getPythonErrorTraceback(bool useMsgBox) { PyObject *etype = NULL; PyObject *evalue = NULL; PyObject *etraceback = NULL; PyObject *mod = NULL; PyObject *elist = NULL; QStringList tblist; PyErr_Fetch(&etype, &evalue, &etraceback); PyErr_NormalizeException(&etype, &evalue, &etraceback); mod = PyImport_ImportModule("traceback"); if (mod) { elist = PyObject_CallMethod(mod, "format_exception", "OOO", etype, evalue, etraceback); if (elist != NULL) { tblist = PyObjectToQVariant(elist).toStringList(); } else { tblist.append(QString("Error: traceback report is missing")); } } else { tblist.append(QString("Error: traceback module failed to load")); } Py_XDECREF(elist); Py_XDECREF(mod); Py_XDECREF(etraceback); Py_XDECREF(evalue); Py_XDECREF(etype); PyErr_Clear(); QString tb = tblist.join(QString("\n")); if (useMsgBox) { QString message = QString(tr("Embedded Python Error")); Utility::DisplayStdErrorDialog(message, tb); } return tb; } Sigil-0.9.9/src/Misc/FilenameDelegate.cpp000066400000000000000000000030721321676412500201520ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include "Misc/FilenameDelegate.h" FilenameDelegate::FilenameDelegate(QWidget *parent) : QStyledItemDelegate(parent) { } bool FilenameDelegate::eventFilter(QObject *object, QEvent *event) { if (event->type() == QEvent::FocusIn) { if (QLineEdit *edit = qobject_cast(object)) { QString text = edit->text(); int pos = text.lastIndexOf('.'); if (pos == -1) { pos = text.length(); } edit->setSelection(0, pos); event->accept(); return true; } } return QStyledItemDelegate::eventFilter(object, event); } Sigil-0.9.9/src/Misc/FilenameDelegate.h000066400000000000000000000022561321676412500176220ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #ifndef FILENAMEDELEGATE_H #define FILENAMEDELEGATE_H #include class FilenameDelegate : public QStyledItemDelegate { public: FilenameDelegate(QWidget *parent = 0); protected: virtual bool eventFilter(QObject *object, QEvent *event); }; #endif // FILENAMEDELEGATE_H Sigil-0.9.9/src/Misc/FindReplaceQLineEdit.cpp000066400000000000000000000115031321676412500207100ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include #include "Misc/FindReplaceQLineEdit.h" #include "MiscEditors/SearchEditorModel.h" FindReplaceQLineEdit::FindReplaceQLineEdit(QWidget *parent) : QLineEdit(parent), m_FindReplace(parent), m_searchMapper(new QSignalMapper(this)), m_tokeniseEnabled(true) { connect(m_searchMapper, SIGNAL(mapped(const QString &)), m_FindReplace, SLOT(LoadSearchByName(const QString &))); } FindReplaceQLineEdit::~FindReplaceQLineEdit() { } void FindReplaceQLineEdit::contextMenuEvent(QContextMenuEvent *event) { QMenu *menu = createStandardContextMenu(); QAction *topAction = 0; if (!menu->actions().isEmpty()) { topAction = menu->actions().at(0); } if (m_tokeniseEnabled) { QAction *tokeniseAction = new QAction(tr("Tokenise Selection"), menu); connect(tokeniseAction, SIGNAL(triggered()), m_FindReplace, SLOT(TokeniseSelection())); if (topAction) { menu->insertAction(topAction, tokeniseAction); menu->insertSeparator(topAction); } else { menu->addAction(tokeniseAction); } topAction = tokeniseAction; } QAction *saveSearchAction = new QAction(tr("Save Search") % "...", menu); connect(saveSearchAction, SIGNAL(triggered()), m_FindReplace, SLOT(SaveSearchAction())); menu->insertAction(topAction, saveSearchAction); menu->insertSeparator(topAction); topAction = saveSearchAction; if (CreateMenuEntries(menu, topAction, SearchEditorModel::instance()->invisibleRootItem())) { menu->insertSeparator(topAction); } menu->exec(mapToGlobal(event->pos())); delete menu; } bool FindReplaceQLineEdit::CreateMenuEntries(QMenu *parent_menu, QAction *topAction, QStandardItem *item) { QAction *searchAction = 0; QMenu *group_menu = parent_menu; if (!item) { return false; } if (!item->text().isEmpty()) { // If item has no children, add entry to the menu, else create menu if (!item->data().toBool()) { searchAction = new QAction(item->text(), this); connect(searchAction, SIGNAL(triggered()), m_searchMapper, SLOT(map())); m_searchMapper->setMapping(searchAction, SearchEditorModel::instance()->GetFullName(item)); if (!topAction) { parent_menu->addAction(searchAction); } else { parent_menu->insertAction(topAction, searchAction); } } else { group_menu = new QMenu(this); group_menu->setTitle(item->text()); if (topAction) { parent_menu->insertMenu(topAction, group_menu); } else { parent_menu->addMenu(group_menu); } topAction = 0; } } // Recursively add entries for children for (int row = 0; row < item->rowCount(); row++) { CreateMenuEntries(group_menu, topAction, item->child(row, 0)); } return item->rowCount() > 0; } bool FindReplaceQLineEdit::isTokeniseEnabled() { return m_tokeniseEnabled; } void FindReplaceQLineEdit::setTokeniseEnabled(bool value) { m_tokeniseEnabled = value; } bool FindReplaceQLineEdit::event(QEvent *e) { if (e->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast(e); if (completer()->popup()->isVisible()) { if ((ke->modifiers() & Qt::AltModifier) || (ke->modifiers() & Qt::ControlModifier)) { // Alt/Control modifier keys while the autocompletion popup is down are swallowed // which prevents any actions with keyboard shortcuts from working. completer()->popup()->hide(); } } } return QLineEdit::event(e); } Sigil-0.9.9/src/Misc/FindReplaceQLineEdit.h000066400000000000000000000032211321676412500203530ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef FINDREPLACEQLINEEDIT_H #define FINDREPLACEQLINEEDIT_H #include #include class QContextMenuEvent; class QSignalMapper; class FindReplaceQLineEdit : public QLineEdit { public: FindReplaceQLineEdit(QWidget *parent = 0); ~FindReplaceQLineEdit(); virtual void contextMenuEvent(QContextMenuEvent *event); bool isTokeniseEnabled(); void setTokeniseEnabled(bool value); protected: bool event(QEvent *e); private: bool CreateMenuEntries(QMenu *parent_menu, QAction *topAction, QStandardItem *entry); QWidget *m_FindReplace; QSignalMapper *m_searchMapper; bool m_tokeniseEnabled; }; #endif // FINDREPLACEQLINEEDIT_H Sigil-0.9.9/src/Misc/FontObfuscation.cpp000066400000000000000000000073641321676412500201120ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include "Misc/FontObfuscation.h" #include "sigil_constants.h" #include "sigil_exception.h" static int ADOBE_METHOD_NUM_BYTES = 1024; static int IDPF_METHOD_NUM_BYTES = 1040; namespace { QByteArray IdpfKeyFromIdentifier(const QString &identifier) { QString whitespace_free = QString(identifier) .remove("\x20") .remove("\x09") .remove("\x0D") .remove("\x0A"); return QCryptographicHash::hash(whitespace_free.toLatin1(), QCryptographicHash::Sha1); } QByteArray AdobeKeyFromIdentifier(const QString &identifier) { QString cruft_free = QString(identifier) .remove("urn:uuid:") .remove("-") .remove(":"); return QByteArray::fromHex(cruft_free.toLatin1()); } void IdpfObfuscate(const QString &filepath, const QString &identifier) { QFile file(filepath); if (!file.open(QFile::ReadWrite)) { return; } QByteArray contents = file.readAll(); QByteArray key = IdpfKeyFromIdentifier(identifier); int key_size = key.size(); if (key_size == 0) { return; } for (int i = 0; (i < IDPF_METHOD_NUM_BYTES) && (i < contents.size()); ++i) { contents[ i ] = contents[ i ] ^ key[ i % key_size ]; } file.seek(0); file.write(contents); } void AdobeObfuscate(const QString &filepath, const QString &identifier) { QFile file(filepath); if (!file.open(QFile::ReadWrite)) { return; } QByteArray contents = file.readAll(); QByteArray key = AdobeKeyFromIdentifier(identifier); int key_size = key.size(); if (key_size == 0) { return; } for (int i = 0; (i < ADOBE_METHOD_NUM_BYTES) && (i < contents.size()); ++i) { contents[ i ] = contents[ i ] ^ key[ i % key_size ]; } file.seek(0); file.write(contents); } }; void FontObfuscation::ObfuscateFile(const QString &filepath, const QString &algorithm, const QString &identifier) { if (!QFileInfo(filepath).exists() || algorithm.isEmpty() || identifier.isEmpty()) { std::string msg = filepath.toStdString() + ": " + algorithm.toStdString() + ": " + identifier.toStdString(); throw(FontObfuscationError(msg)); } if (algorithm == ADOBE_FONT_ALGO_ID) { AdobeObfuscate(filepath, identifier); } else if (algorithm == IDPF_FONT_ALGO_ID) { IdpfObfuscate(filepath, identifier); } else { std::string msg = filepath.toStdString() + ": " + algorithm.toStdString() + ": " + identifier.toStdString(); throw(FontObfuscationError(msg)); } } Sigil-0.9.9/src/Misc/FontObfuscation.h000066400000000000000000000022511321676412500175450ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef FONTOBFUSCATION_H #define FONTOBFUSCATION_H class QString; namespace FontObfuscation { void ObfuscateFile(const QString &filepath, const QString &algorithm, const QString &identifier); } #endif // FONTOBFUSCATION_H Sigil-0.9.9/src/Misc/GuideItems.cpp000066400000000000000000000123771321676412500170460ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, Ontario, Canada ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include "Misc/GuideItems.h" GuideItems *GuideItems::m_instance = 0; GuideItems *GuideItems::instance() { if (m_instance == 0) { m_instance = new GuideItems(); } return m_instance; } QString GuideItems::GetName(QString code) { DescriptiveInfo rel = m_CodeMap.value(code, DescriptiveInfo() ); return rel.name; } QString GuideItems::GetDescriptionByCode(QString code) { DescriptiveInfo rel = m_CodeMap.value(code, DescriptiveInfo()); return rel.description; } QString GuideItems::GetDescriptionByName(QString name) { QString code = m_NameMap.value(name, QString()); return GetDescriptionByCode(code); } QString GuideItems::GetCode(QString name) { return m_NameMap.value(name, QString()); } bool GuideItems::isGuideItemsCode(QString code) { return m_CodeMap.contains(code); } bool GuideItems::isGuideItemsName(QString name) { return m_NameMap.contains(name); } QStringList GuideItems::GetSortedNames() { if (!m_sortedNames.isEmpty()) { return m_sortedNames; } foreach(QString code, m_CodeMap.keys()) { DescriptiveInfo rel = m_CodeMap.value(code); m_sortedNames.append(rel.name); } m_sortedNames.sort(); return m_sortedNames; } const QHash & GuideItems::GetCodeMap() { return m_CodeMap; } GuideItems::GuideItems() { SetGuideItemsMap(); } void GuideItems::SetGuideItemsMap() { if (!m_CodeMap.isEmpty()) { return; } // For the authoritiative relator list and descriptive definitions see http://www.loc.gov/marc/relators/ // Names and codes must be unique between basic and advanced (except Publisher). QStringList data; data << tr("Acknowledgements") << "acknowledgements" << tr("A passage containing acknowledgments to entities involved in the realization of the work.") << tr("Bibliography") << "bibliography" << tr("A list of works cited.") << tr("Text") << "text" << tr("The start of the main text content of a publication.") << tr("Colophon") << "colophon" << tr("A brief description usually located at the end of a publication, describing production notes relevant to the edition.") << tr("Copyright Page") << "copyright-page" << tr("The copyright page of the work.") << tr("Cover") << "cover" << tr("The publications cover(s), jacket information, etc.") << tr("Dedication") << "dedication" << tr("An inscription addressed to one or several particular person(s).") << tr("Epigraph") << "epigraph" << tr("A quotation that is pertinent but not integral to the text.") << tr("Foreword") << "foreword" << tr("An introductory section that precedes the work, typically not written by the work's author.") << tr("Glossary") << "glossary" << tr("An alphabetical list of terms in a particular domain of knowledge, with the definitions for those terms.") << tr("Index") << "index" << tr("A detailed list, usually arranged alphabetically, of the specific information in a publication.") << tr("List of Illustrations") << "loi" << tr("A listing of illustrations included in the work.") << tr("List of Tables") << "lot" << tr("A listing of tables included in the work.") << tr("Notes") << "notes" << tr("A collection of notes. It can be used to identify footnotes, rear notes, marginal notes, inline notes, and similar when legacy naming conventions are not desired. Status: Deprecated - Replaced by: 'footnotes', 'rearnotes'") << tr("Preface") << "preface" << tr("An introductory section that precedes the work, typically written by the work's author.") << tr("Title Page") << "title-page" << tr("A page at the beginning of a book giving its title, authors, publisher and other publication information.") << tr("Table of Contents") << "toc" << tr("A table of contents which is a list of the headings or parts of the book or document, organized in the order in which they appear. Typically appearing in the work's frontmatter, or at the beginning of a section."); for (int i = 0; i < data.count(); i++) { QString name = data.at(i++); QString code = data.at(i++); QString description = data.at(i); DescriptiveInfo rel; rel.name = name; rel.description = description; m_CodeMap.insert(code, rel); m_NameMap.insert(name, code); } } Sigil-0.9.9/src/Misc/GuideItems.h000066400000000000000000000035271321676412500165100ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, ON, Canada ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef GUIDEITEMS_H #define GUIDEITEMS_H #include #include #include #include #include "Misc/DescriptiveInfo.h" /** * Singleton. * * GuideItems */ class GuideItems { Q_DECLARE_TR_FUNCTIONS(GuideItems) public: static GuideItems *instance(); QString GetName(QString code); QString GetDescriptionByCode(QString code); QString GetDescriptionByName(QString name); QString GetCode(QString name); QStringList GetSortedNames(); bool isGuideItemsCode(QString code); bool isGuideItemsName(QString name); const QHash &GetCodeMap(); private: GuideItems(); void SetGuideItemsMap(); // code -> DescriptiveInfo -> name and description QHash m_CodeMap; // name -> code QHash m_NameMap; QStringList m_sortedNames; static GuideItems *m_instance; }; #endif // GUIDEITEMS_H Sigil-0.9.9/src/Misc/GumboInterface.cpp000066400000000000000000001347371321676412500177060ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin B. Hendricks, Stratford Ontario ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include // #include #include "Misc/Utility.h" #include "GumboInterface.h" #include "string_buffer.h" #include "error.h" static std::unordered_set nonbreaking_inline = { "a","abbr","acronym","b","bdo","big","br","button","cite","code","del", "dfn","em","font","i","image","img","input","ins","kbd","label","map", "nobr","object","q","ruby","rt","s","samp","select","small","span","strike","strong", "sub","sup","textarea","tt","u","var","wbr", "mbp:nu" }; static std::unordered_set preserve_whitespace = { "pre","textarea","script","style" }; static std::unordered_set special_handling = { "html","body" }; static std::unordered_set no_entity_sub = { "script","style" }; static std::unordered_set void_tags = { "area","base","basefont","bgsound","br","col","command","embed", "event-source","frame","hr","img","input","keygen","link", "meta","param","source","spacer","track","wbr", "mbp:pagebreak", "mglyph", "mspace", "mprescripts", "none", "maligngroup", "malignmark", "msline" }; static std::unordered_set structural_tags = { "article","aside","blockquote","body","canvas","colgroup","div","dl", "figure","footer","head","header","hr","html","ol","section", "table","tbody","tfoot","thead","td","th","tr","ul" }; static std::unordered_set other_text_holders = { "address","caption","dd","div","dt","h1","h2","h3","h4","h5","h6", "legend","li","option","p","td","th","title" }; static std::unordered_set manifest_properties = { "math","nav","script","svg","epub:switch" }; static std::unordered_set href_src_tags = { "a","area","audio","base","embed","font-face-uri","frame","iframe", "image","img","input","link","object","script","source","track","video" }; static const QChar POUND_SIGN = QChar::fromLatin1('#'); static const QChar FORWARD_SLASH = QChar::fromLatin1('/'); static const std::string aSRC = std::string("src"); static const std::string aHREF = std::string("href"); static const std::string aPOSTER = std::string("poster"); static const std::string aDATA = std::string("data"); QHash EmptyHash = QHash(); // These need to match the GumboAttributeNamespaceEnum sequence static const char * attribute_nsprefixes[4] = { "", "xlink:", "xml:", "xmlns:" }; // Note: m_output contains the gumbo output tree which // has data structures with pointers into the original source // buffer passed in!!!!!! // This source buffer is provided by the m_utf8src std::string // which should always exist unchanged alongside the output tree // Do NOT change or delete m_utf8src once set until after you // have properly destroyed the gumbo output tree GumboInterface::GumboInterface(const QString &source, const QString &version) : m_source(source), m_output(NULL), m_utf8src(""), m_sourceupdates(EmptyHash), m_newcsslinks(""), m_currentdir(""), m_newbody(""), m_hasnbsp(false), m_version(version) { } GumboInterface::GumboInterface(const QString &source, const QString &version, const QHash & source_updates) : m_source(source), m_output(NULL), m_utf8src(""), m_sourceupdates(source_updates), m_newcsslinks(""), m_currentdir(""), m_newbody(""), m_hasnbsp(false), m_version(version) { } GumboInterface::~GumboInterface() { if (m_output != NULL) { gumbo_destroy_output(m_output); m_output = NULL; m_utf8src = ""; } } void GumboInterface::parse() { if (!m_source.isEmpty() && (m_output == NULL)) { if (!m_version.startsWith('3')) { m_hasnbsp = m_source.contains(" "); } m_utf8src = m_source.toStdString(); // remove any xml header line and any trailing whitespace if (m_utf8src.compare(0,5,"', 5); end = m_utf8src.find_first_not_of("\n\r\t\v\f ",end+1); m_utf8src.erase(0,end); } // In case we ever have to revert to earlier versions, please note the following // additional initialization is needed because Microsoft Visual Studio 2013 (and earlier?) // do not properly initialize myoptions from the static const kGumboDefaultOptions defined // in the gumbo library. Instead whatever was in memory at the time is used causing random // issues later on so if reverting remember to keep these specific changes as the bug // they work around took a long long time to track down GumboOptions myoptions = kGumboDefaultOptions; myoptions.tab_stop = 4; myoptions.use_xhtml_rules = true; myoptions.stop_on_first_error = false; myoptions.max_errors = -1; // GumboInterface::m_mutex.lock(); m_output = gumbo_parse_with_options(&myoptions, m_utf8src.data(), m_utf8src.length()); // GumboInterface::m_mutex.unlock(); } } QString GumboInterface::repair() { QString result = ""; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } std::string utf8out = serialize(m_output->document); rtrim(utf8out); result = "\n" + QString::fromStdString(utf8out); } return result; } QString GumboInterface::getxhtml() { QString result = ""; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } std::string utf8out = serialize(m_output->document); rtrim(utf8out); result = "\n" + QString::fromStdString(utf8out); } return result; } QString GumboInterface::prettyprint(QString indent_chars) { QString result = ""; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } std::string ind = indent_chars.toStdString(); std::string utf8out = prettyprint(m_output->document, 0, ind); rtrim(utf8out); result = "\n" + QString::fromStdString(utf8out); } return result; } QStringList GumboInterface::get_all_properties() { QStringList properties; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } properties = get_properties(m_output->root); } return properties; } QString GumboInterface::perform_source_updates(const QString& my_current_book_relpath) { m_currentdir = QFileInfo(my_current_book_relpath).dir().path(); QString result = ""; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } enum UpdateTypes doupdates = SourceUpdates; std::string utf8out = serialize(m_output->document, doupdates); rtrim(utf8out); result = "\n" + QString::fromStdString(utf8out); } return result; } QString GumboInterface::perform_style_updates(const QString& my_current_book_relpath) { m_currentdir = QFileInfo(my_current_book_relpath).dir().path(); QString result = ""; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } enum UpdateTypes doupdates = StyleUpdates; std::string utf8out = serialize(m_output->document, doupdates); rtrim(utf8out); result = "\n" + QString::fromStdString(utf8out); } return result; } QString GumboInterface::perform_link_updates(const QString& newcsslinks) { m_newcsslinks = newcsslinks.toStdString(); QString result = ""; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } enum UpdateTypes doupdates = LinkUpdates; std::string utf8out = serialize(m_output->document, doupdates); rtrim(utf8out); result = "\n" + QString::fromStdString(utf8out); } return result; } GumboNode * GumboInterface::get_root_node() { if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } } return m_output->root; } QString GumboInterface::get_body_contents() { if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } } QList tags = QList() << GUMBO_TAG_BODY; QList nodes = get_all_nodes_with_tags(tags); if (nodes.count() != 1) { return QString(); } enum UpdateTypes doupdates = NoUpdates; std::string results = serialize_contents(nodes.at(0), doupdates); return QString::fromStdString(results); } QStringList GumboInterface::get_properties(GumboNode* node) { if (node->type != GUMBO_NODE_ELEMENT) { return QStringList(); } QStringList properties; std::string tagname = get_tag_name(node); if (in_set(manifest_properties, tagname)) { properties.append(QString::fromStdString(tagname)); } GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "src"); if (attr && !QUrl(QString::fromUtf8(attr->value)).isRelative()) { properties.append(QString("remote-resources")); } GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { properties.append(get_properties(static_cast(children->data[i]))); } return properties; } QString GumboInterface::get_qwebpath_to_node(GumboNode* node) { QStringList path_pieces; GumboNode* anode = node; while (anode && !((anode->type == GUMBO_NODE_ELEMENT) && (anode->v.element.tag == GUMBO_TAG_HTML))) { GumboNode* myparent = anode->parent; QString parent_name = QString::fromStdString(get_tag_name(myparent)); int index; QString aname = QString::fromStdString(get_tag_name(anode)); if (aname == "#text") { index = anode->index_within_parent; } else { // need to find child num in parent as if only elements exist GumboVector* children = &myparent->v.element.children; int elnum = 0; for (unsigned int i=0; i < children->length; i++) { GumboNode* child = static_cast(children->data[i]); if (i == anode->index_within_parent) { break; } if ((child->type == GUMBO_NODE_ELEMENT) || (child->type == GUMBO_NODE_TEMPLATE)) { elnum++; } } index = elnum; } path_pieces.prepend(parent_name + " " + QString::number(index)); anode = myparent; } return path_pieces.join(","); } GumboNode* GumboInterface::get_node_from_qwebpath(QString webpath) { QStringList path_pieces = webpath.split(",", QString::SkipEmptyParts); GumboNode* node = get_root_node(); GumboNode* end_node = node; for (int i=0; i < path_pieces.count() - 1 ; ++i) { QString piece = path_pieces.at(i); QString name = piece.split(" ")[0]; int index = piece.split(" ")[1].toInt(); GumboVector* children = &node->v.element.children; GumboNode * next_node = NULL; if (children->length > 0) { if (path_pieces.at(i+1).startsWith("#text")) { next_node = static_cast(children->data[index]); } else { // need to index correct child index when only counting elements int elnum = -1; for (unsigned int j=0; j < children->length; j++) { GumboNode* child = static_cast(children->data[j]); if ((child->type == GUMBO_NODE_ELEMENT) || (child->type == GUMBO_NODE_TEMPLATE)) { elnum++; } if (elnum == index) { next_node = child; break; } } } if (next_node) { end_node = next_node; node = next_node; } else { break; } } } return end_node; } QList GumboInterface::get_path_to_node(GumboNode* node) { QList apath = QList(); GumboNode* anode = node; while (anode && !((anode->type == GUMBO_NODE_ELEMENT) && (anode->v.element.tag == GUMBO_TAG_HTML))) { apath.prepend(anode->index_within_parent); anode = anode->parent; } return apath; } GumboNode* GumboInterface::get_node_from_path(QList & apath) { GumboNode* dest = get_root_node(); foreach(unsigned int childnum, apath) { if ((dest->type == GUMBO_NODE_ELEMENT) || (dest->type == GUMBO_NODE_TEMPLATE)) { GumboVector* children = &dest->v.element.children; if (childnum < children->length) { dest = static_cast(children->data[childnum]); } else { break; } } else { break; } } return dest; } QString GumboInterface::perform_body_updates(const QString & new_body) { QString result = ""; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } } QList tags = QList() << GUMBO_TAG_BODY; QList nodes = get_all_nodes_with_tags(tags); if (nodes.count() != 1) { return QString(); } m_newbody = new_body.toStdString(); enum UpdateTypes doupdates = BodyUpdates; std::string utf8out = serialize(m_output->document, doupdates); result = "\n" + QString::fromStdString(utf8out); m_newbody= ""; return result; } QList GumboInterface::error_check() { QList errlist; int line_offset = 0; // In case we ever have to revert to earlier versions, please note the following // additional initialization is needed because Microsoft Visual Studio 2013 (and earlier?) // do not properly initialize myoptions from the static const kGumboDefaultOptions defined // in the gumbo library. Instead whatever was in memory at the time is used causing random // issues later on so if reverting remember to keep these specific changes as the bug // they work around took a long long time to track down GumboOptions myoptions = kGumboDefaultOptions; myoptions.tab_stop = 4; myoptions.use_xhtml_rules = true; myoptions.stop_on_first_error = false; myoptions.max_errors = -1; if (!m_source.isEmpty() && (m_output == NULL)) { m_utf8src = m_source.toStdString(); // remove any xml header line and trailing whitespace if (m_utf8src.compare(0,5,"', 0); end = m_utf8src.find_first_not_of("\n\r\t\v\f ",end+1); m_utf8src.erase(0,end); line_offset++; } // add in epub version specific doctype if missing if ((m_utf8src.compare(0,9,"\n"); } else { m_utf8src.insert(0, "\n\n"); } line_offset--; } m_output = gumbo_parse_with_options(&myoptions, m_utf8src.data(), m_utf8src.length()); } // qDebug() << QString::fromStdString(m_utf8src); const GumboVector* errors = &m_output->errors; for (unsigned int i=0; i< errors->length; ++i) { GumboError* er = static_cast(errors->data[i]); GumboWellFormedError gperror; gperror.line = er->position.line + line_offset;; gperror.column = er->position.column; // unsigned int typenum = er->type; GumboStringBuffer text; gumbo_string_buffer_init(&text); gumbo_error_to_string(er, &text); std::string errmsg(text.data, text.length); gperror.message = QString::fromStdString(errmsg); // qDebug() << gperror.message; gumbo_string_buffer_destroy(&text); errlist.append(gperror); } return errlist; } QList GumboInterface::get_all_nodes_with_attribute(const QString& attname) { QList nodes; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } nodes = get_nodes_with_attribute(m_output->root, attname.toUtf8().constData()); } return nodes; } QList GumboInterface::get_nodes_with_attribute(GumboNode* node, const char * attname) { if (node->type != GUMBO_NODE_ELEMENT) { return QList(); } QList nodes; GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, attname); if (attr) { nodes.append(node); } GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { nodes.append(get_nodes_with_attribute(static_cast(children->data[i]), attname)); } return nodes; } QStringList GumboInterface::get_all_values_for_attribute(const QString& attname) { QStringList attrvals; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } attrvals = get_values_for_attr(m_output->root, attname.toUtf8().constData()); } return attrvals; } QStringList GumboInterface::get_values_for_attr(GumboNode* node, const char* attr_name) { if (node->type != GUMBO_NODE_ELEMENT) { return QStringList(); } QStringList attr_vals; GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, attr_name); if (attr != NULL) { attr_vals.append(QString::fromUtf8(attr->value)); } GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { attr_vals.append(get_values_for_attr(static_cast(children->data[i]), attr_name)); } return attr_vals; } QHash GumboInterface::get_attributes_of_node(GumboNode* node) { QHash node_atts; if (node->type != GUMBO_NODE_ELEMENT) { return node_atts; } const GumboVector * attribs = &node->v.element.attributes; for (unsigned int i=0; i< attribs->length; ++i) { GumboAttribute* attr = static_cast(attribs->data[i]); QString key = QString::fromStdString(get_attribute_name(attr)); QString val = QString::fromUtf8(attr->value); node_atts[key] = val; } return node_atts; } QString GumboInterface::get_local_text_of_node(GumboNode* node) { QString node_text; if (node->type != GUMBO_NODE_ELEMENT) { return node_text; } // handle br tag as special case element tag with a text value GumboTag tag = node->v.element.tag; if (tag == GUMBO_TAG_BR) { node_text = "\n"; return node_text; } GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { GumboNode* child = static_cast (children->data[i]); if (child->type == GUMBO_NODE_TEXT) { node_text += QString::fromUtf8(child->v.text.text); } else if (child->type == GUMBO_NODE_WHITESPACE) { // keep all whitespace to keep as close to original as possible node_text += QString::fromUtf8(child->v.text.text); } else if (child->type == GUMBO_NODE_CDATA) { node_text += QString::fromUtf8(child->v.text.text); } else if (child->type == GUMBO_NODE_ELEMENT) { node_text += get_local_text_of_node(child); } } return node_text; } QList GumboInterface::get_all_nodes_with_tag(GumboTag tag) { QList tags; tags << tag; return get_all_nodes_with_tags(tags); } QList GumboInterface::get_all_nodes_with_tags(const QList & tags ) { QList nodes; if (!m_source.isEmpty()) { if (m_output == NULL) { parse(); } nodes = get_nodes_with_tags(m_output->root, tags); } return nodes; } QList GumboInterface::get_nodes_with_tags(GumboNode* node, const QList & tags) { if (node->type != GUMBO_NODE_ELEMENT) { return QList(); } QList nodes; GumboTag tag = node ->v.element.tag; if (tags.contains(tag)) { nodes.append(node); } GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { nodes.append(get_nodes_with_tags(static_cast(children->data[i]), tags)); } return nodes; } bool GumboInterface::in_set(std::unordered_set &s, std::string &key) { return s.find(key) != s.end(); } void GumboInterface::rtrim(std::string &s) { s.erase(s.find_last_not_of(" \n\r\t\v\f")+1); } void GumboInterface::ltrim(std::string &s) { s.erase(0,s.find_first_not_of(" \n\r\t\v\f")); } void GumboInterface::ltrimnewlines(std::string &s) { s.erase(0,s.find_first_not_of("\n\r")); } // delete everything up to and including the newline void GumboInterface::newlinetrim(std::string &s) { size_t pos = s.find("\n"); if (pos != std::string::npos) { s.erase(0, pos+1); } } void GumboInterface::condense_whitespace(std::string &s) { size_t n = s.length(); std::string val; val.reserve(n); std::string wspace = " \n\r\t\v\f"; char last_c = 'x'; for (size_t i=0; i < n; i++) { char c = s.at(i); if (wspace.find(c) != std::string::npos) { c = ' '; } if ((c != ' ') || (last_c != ' ')) { val.push_back(c); } last_c = c; } s = val; } void GumboInterface::replace_all(std::string &s, const char * s1, const char * s2) { std::string t1(s1); size_t len = t1.length(); size_t pos = s.find(t1); while (pos != std::string::npos) { s.replace(pos, len, s2); pos = s.find(t1, pos + len); } } std::string GumboInterface::update_attribute_value(const std::string &attvalue) { std::string result = attvalue; QString attpath = Utility::URLDecodePath(QString::fromStdString(attvalue)); int fragpos = attpath.lastIndexOf(POUND_SIGN); bool has_fragment = fragpos != -1; QString fragment = ""; if (has_fragment) { fragment = attpath.mid(fragpos, -1); attpath = attpath.mid(0, fragpos); } QString search_key = QDir::cleanPath(m_currentdir + FORWARD_SLASH + attpath); QString new_href; if (m_sourceupdates.contains(search_key)) { new_href = m_sourceupdates.value(search_key); } if (!new_href.isEmpty()) { new_href += fragment; new_href = Utility::URLEncodePath(new_href); result = new_href.toStdString(); } return result; } std::string GumboInterface::update_style_urls(const std::string &source) { QString result = QString::fromStdString(source); // Now parse the text once looking urls and replacing them where needed QRegularExpression reference( "(?:(?:src|background|background-image|list-style|list-style-image|border-image|border-image-source|content)\\s*:|@import)\\s*" "[^;\\}\\(\"']*" "(?:" "url\\([\"']?([^\\(\\)\"']*)[\"']?\\)" "|" "[\"']([^\\(\\)\"']*)[\"']" ")"); int start_index = 0; QRegularExpressionMatch mo = reference.match(result, start_index); do { for (int i = 1; i < reference.captureCount(); ++i) { if (mo.captured(i).trimmed().isEmpty()) { continue; } QString apath = Utility::URLDecodePath(mo.captured(i)); QString search_key = QDir::cleanPath(m_currentdir + FORWARD_SLASH + apath); QString new_href; if (m_sourceupdates.contains(search_key)) { new_href = m_sourceupdates.value(search_key); } if (!new_href.isEmpty()) { new_href = Utility::URLEncodePath(new_href); result.replace(mo.capturedStart(i), mo.capturedLength(i), new_href); } } start_index += mo.capturedLength(); mo = reference.match(result, start_index); } while (mo.hasMatch()); return result.toStdString(); } std::string GumboInterface::substitute_xml_entities_into_text(const std::string &text) { std::string result = text; // replacing & must come first replace_all(result, "&", "&"); replace_all(result, "<", "<"); replace_all(result, ">", ">"); // convert non-breaking spaces to entities to prevent their loss for later editing // See the strange//buggy behaviour of Qt QTextDocument toPlainText() routine if (m_hasnbsp) { replace_all(result, "\xc2\xa0", " "); } else { replace_all(result, "\xc2\xa0", " "); } return result; } std::string GumboInterface::substitute_xml_entities_into_attributes(char quote, const std::string &text) { std::string result = substitute_xml_entities_into_text(text); if (quote == '"') { replace_all(result,"\"","""); } else if (quote == '\'') { replace_all(result,"'","'"); } return result; } std::string GumboInterface::get_tag_name(GumboNode *node) { std::string tagname; if (node->type == GUMBO_NODE_DOCUMENT) { tagname = "#document"; return tagname; } else if ((node->type == GUMBO_NODE_TEXT) || (node->type == GUMBO_NODE_WHITESPACE)) { tagname = "#text"; return tagname; } else if (node->type == GUMBO_NODE_CDATA) { tagname = "#cdata"; return tagname; } tagname = gumbo_normalized_tagname(node->v.element.tag); if ((tagname.empty()) || (node->v.element.tag_namespace == GUMBO_NAMESPACE_SVG)) { // set up to examine original text of tag. GumboStringPiece gsp = node->v.element.original_tag; gumbo_tag_from_original_text(&gsp); // special handling for some svg tag names. if (node->v.element.tag_namespace == GUMBO_NAMESPACE_SVG) { const char * data = gumbo_normalize_svg_tagname(&gsp); // NOTE: data may not be null-terminated! // since case change only - length must be same as original // if no replacement found returns null, not original tag! if (data != NULL) { return std::string(data, gsp.length); } } if (tagname.empty()) { return std::string(gsp.data, gsp.length); } } return tagname; } // if missing leave it alone // if epub3 docytpe use it otherwise set it to epub2 docytpe std::string GumboInterface::build_doctype(GumboNode *node) { std::string results = ""; if (m_version.startsWith('2')) { results.append("\n\n"); return results; } else if (m_version.startsWith('3')) { results.append("\n\n"); return results; } if (node->v.document.has_doctype) { std::string name(node->v.document.name); std::string pi(node->v.document.public_identifier); std::string si(node->v.document.system_identifier); if ((name == "html") && pi.empty() && si.empty()) { results.append("\n\n"); return results; } else { results.append("\n\n"); } } return results; } // deal properly with foreign namespaced attributes std::string GumboInterface::get_attribute_name(GumboAttribute * at) { std::string attr_name = at->name; GumboAttributeNamespaceEnum attr_ns = at->attr_namespace; if ((attr_ns == GUMBO_ATTR_NAMESPACE_NONE) || (attr_name == "xmlns")) { return attr_name; } attr_name = std::string(attribute_nsprefixes[attr_ns]) + attr_name; return attr_name; } std::string GumboInterface::build_attributes(GumboAttribute * at, bool no_entities, bool run_src_updates, bool run_style_updates) { std::string atts = " "; std::string name = get_attribute_name(at); std::string local_name = at->name; atts.append(name); std::string attvalue = at->value; if (run_src_updates && (local_name == aHREF || local_name == aSRC || local_name == aPOSTER || local_name == aDATA)) { attvalue = update_attribute_value(attvalue); } if (run_style_updates && (local_name == "style")) { attvalue = update_style_urls(attvalue); } // we handle empty attribute values like so: alt="" char quote = '"'; std::string qs="\""; // verify an original value existed since we create our own attributes // and if so determine the original quote character used if any if (at->original_value.data) { if ( (!attvalue.empty()) || (at->original_value.data[0] == '"') || (at->original_value.data[0] == '\'') ) { quote = at->original_value.data[0]; if (quote == '\'') qs = std::string("'"); if (quote == '"') qs = std::string("\""); } } atts.append("="); atts.append(qs); if (no_entities) { atts.append(attvalue); } else { atts.append(substitute_xml_entities_into_attributes(quote, attvalue)); } atts.append(qs); return atts; } // serialize children of a node // may be invoked recursively std::string GumboInterface::serialize_contents(GumboNode* node, enum UpdateTypes doupdates) { std::string contents = ""; std::string tagname = get_tag_name(node); bool no_entity_substitution = in_set(no_entity_sub, tagname); bool keep_whitespace = in_set(preserve_whitespace, tagname); bool is_inline = in_set(nonbreaking_inline, tagname); bool is_structural = in_set(structural_tags, tagname); // build up result for each child, recursively if need be GumboVector* children = &node->v.element.children; bool inject_newline = false; bool in_head_without_title = (tagname == "head"); for (unsigned int i = 0; i < children->length; ++i) { GumboNode* child = static_cast (children->data[i]); if (child->type == GUMBO_NODE_TEXT) { std::string text; if (no_entity_substitution) { text = std::string(child->v.text.text); } else { text = substitute_xml_entities_into_text(std::string(child->v.text.text)); } if (inject_newline && !text.empty() && (text.at(0) == '\n')) text.erase(0,1); inject_newline = false; contents.append(text); } else if (child->type == GUMBO_NODE_ELEMENT || child->type == GUMBO_NODE_TEMPLATE) { contents.append(serialize(child, doupdates)); inject_newline = false; std::string childname = get_tag_name(child); if (in_head_without_title && (childname == "title")) in_head_without_title = false; if (!is_inline && !keep_whitespace && !in_set(nonbreaking_inline,childname) && is_structural) { contents.append("\n"); inject_newline = true; } } else if (child->type == GUMBO_NODE_WHITESPACE) { // try to keep all whitespace to keep as close to original as possible std::string wspace = std::string(child->v.text.text); if (inject_newline) { newlinetrim(wspace); inject_newline = false; } contents.append(wspace); inject_newline = false; } else if (child->type == GUMBO_NODE_CDATA) { contents.append("v.text.text) + "]]>"); inject_newline = false; } else if (child->type == GUMBO_NODE_COMMENT) { contents.append(""); } else { fprintf(stderr, "unknown element of type: %d\n", child->type); inject_newline = false; } } if (in_head_without_title) contents.append(""); return contents; } // serialize a GumboNode back to html/xhtml // may be invoked recursively std::string GumboInterface::serialize(GumboNode* node, enum UpdateTypes doupdates) { // special case the document node if (node->type == GUMBO_NODE_DOCUMENT) { std::string results = build_doctype(node); results.append(serialize_contents(node, doupdates)); return results; } std::string close = ""; std::string closeTag = ""; std::string atts = ""; std::string tagname = get_tag_name(node); bool need_special_handling = in_set(special_handling, tagname); bool is_void_tag = in_set(void_tags, tagname); bool no_entity_substitution = in_set(no_entity_sub, tagname); bool is_href_src_tag = in_set(href_src_tags, tagname); bool in_xml_ns = node->v.element.tag_namespace != GUMBO_NAMESPACE_HTML; // bool is_inline = in_set(nonbreaking_inline, tagname); // build attr string const GumboVector * attribs = &node->v.element.attributes; for (unsigned int i=0; i< attribs->length; ++i) { GumboAttribute* at = static_cast(attribs->data[i]); atts.append(build_attributes(at, no_entity_substitution, ((doupdates & SourceUpdates) && is_href_src_tag), (doupdates & StyleUpdates))); } // Make sure that the xmlns attribute exists as an html tag attribute if (tagname == "html") { if (atts.find("xmlns=") == std::string::npos) { atts.append(" xmlns=\"http://www.w3.org/1999/xhtml\""); } } // determine contents std::string contents; if ((tagname == "body") && (doupdates & BodyUpdates)) { contents = m_newbody; } else { // serialize your contents contents = serialize_contents(node, doupdates); } // determine closing tag type std::string testcontents = contents; ltrim(testcontents); if (is_void_tag || (in_xml_ns && testcontents.empty())) { close = "/"; } else { closeTag = ""; } if ((doupdates & StyleUpdates) && (tagname == "style") && (node->parent->type == GUMBO_NODE_ELEMENT) && (node->parent->v.element.tag == GUMBO_TAG_HEAD)) { contents = update_style_urls(contents); } if (need_special_handling) { ltrimnewlines(contents); rtrim(contents); contents.append("\n"); } // build results std::string results; if ((doupdates & LinkUpdates) && (tagname == "link") && (node->parent->type == GUMBO_NODE_ELEMENT) && (node->parent->v.element.tag == GUMBO_TAG_HEAD)) { return ""; } results.append("<"+tagname+atts+close+">"); if (need_special_handling) results.append("\n"); results.append(contents); if ((doupdates & LinkUpdates) && (tagname == "head")) { results.append(m_newcsslinks); } results.append(closeTag); if (need_special_handling) results.append("\n"); return results; } std::string GumboInterface::prettyprint_contents(GumboNode* node, int lvl, const std::string indent_chars) { std::string contents = ""; std::string tagname = get_tag_name(node); bool no_entity_substitution = in_set(no_entity_sub, tagname); bool keep_whitespace = in_set(preserve_whitespace, tagname); bool is_inline = in_set(nonbreaking_inline, tagname); bool is_structural = in_set(structural_tags, tagname); char c = indent_chars.at(0); int n = indent_chars.length(); std::string indent_space = std::string((lvl-1)*n,c); char last_char = 'x'; bool contains_block_tags = false; GumboVector* children = &node->v.element.children; if (is_structural || (tagname == "#document")) last_char = '\n'; bool in_head_without_title = (tagname == "head"); for (unsigned int i = 0; i < children->length; ++i) { GumboNode* child = static_cast (children->data[i]); if (child->type == GUMBO_NODE_TEXT) { std::string val; if (no_entity_substitution) { val = std::string(child->v.text.text); } else { val = substitute_xml_entities_into_text(std::string(child->v.text.text)); } // if child of a structual element is text and follows a newline, indent it properly if (is_structural && last_char == '\n') { contents.append(indent_space); ltrim(val); } if (!keep_whitespace && !is_structural) { // okay to condense whitespace condense_whitespace(val); } contents.append(val); } else if (child->type == GUMBO_NODE_ELEMENT || child->type == GUMBO_NODE_TEMPLATE) { std::string val = prettyprint(child, lvl, indent_chars); std::string childname = get_tag_name(child); if (in_head_without_title && (childname == "title")) in_head_without_title = false; if (!in_set(nonbreaking_inline, childname)) { contains_block_tags = true; if (last_char != '\n') { contents.append("\n"); if (tagname != "head" && tagname != "html") contents.append("\n"); last_char='\n'; } } // if child of a structual element is inline and follows a newline, indent it properly if (is_structural && in_set(nonbreaking_inline, childname) && (last_char == '\n')) { contents.append(indent_space); ltrim(val); } contents.append(val); } else if (child->type == GUMBO_NODE_WHITESPACE) { if (keep_whitespace) { std::string wspace = std::string(child->v.text.text); contents.append(wspace); } else if (is_inline || in_set(other_text_holders, tagname)) { if (std::string(" \t\v\f\r\n").find(last_char) == std::string::npos) { contents.append(std::string(" ")); } } } else if (child->type == GUMBO_NODE_CDATA) { contents.append("v.text.text) + "]]>"); } else if (child->type == GUMBO_NODE_COMMENT) { contents.append(""); } else { fprintf(stderr, "unknown element of type: %d\n", child->type); } // update last character of current contents if (!contents.empty()) { last_char = contents.at(contents.length()-1); } } // inject epmpty title into head if one is missing if (in_head_without_title) { if (last_char != '\n') contents.append("\n"); contents.append(indent_space + "\n"); last_char = '\n'; } // treat inline tags containing block tags like a block tag if (is_inline && contains_block_tags) { if (last_char != '\n') contents.append("\n\n"); contents.append(indent_space); } return contents; } // prettyprint a GumboNode back to html/xhtml // may be invoked recursively std::string GumboInterface::prettyprint(GumboNode* node, int lvl, const std::string indent_chars) { // special case the document node if (node->type == GUMBO_NODE_DOCUMENT) { std::string results = build_doctype(node); results.append(prettyprint_contents(node,lvl+1,indent_chars)); return results; } std::string tagname = get_tag_name(node); std::string parentname = get_tag_name(node->parent); bool in_head = (parentname == "head"); bool is_structural = in_set(structural_tags, tagname); bool is_inline = in_set(nonbreaking_inline, tagname); bool in_xml_ns = node->v.element.tag_namespace != GUMBO_NAMESPACE_HTML; // build attr string std::string atts = ""; bool no_entity_substitution = in_set(no_entity_sub, tagname); const GumboVector * attribs = &node->v.element.attributes; for (unsigned int i=0; i< attribs->length; ++i) { GumboAttribute* at = static_cast(attribs->data[i]); atts.append(build_attributes(at, no_entity_substitution)); } bool is_void_tag = in_set(void_tags, tagname); // get tag contents std::string contents = ""; if (!is_void_tag) { if (is_structural && tagname != "html") { contents = prettyprint_contents(node, lvl+1, indent_chars); } else { contents = prettyprint_contents(node, lvl, indent_chars); } } bool keep_whitespace = in_set(preserve_whitespace, tagname); if (!keep_whitespace && !is_inline) { rtrim(contents); } std::string testcontents = contents; ltrim(testcontents); bool single = is_void_tag || (in_xml_ns && testcontents.empty()); char c = indent_chars.at(0); int n = indent_chars.length(); std::string indent_space = std::string((lvl-1)*n,c); // handle self-closed tags with no contents first if (single) { std::string selfclosetag = "<" + tagname + atts + "/>"; if (is_inline) { // always add newline after br tags when they are children of structural tags if ((tagname == "br") && in_set(structural_tags, parentname)) { selfclosetag.append("\n"); if (!in_head && (tagname != "html")) selfclosetag.append("\n"); } return selfclosetag; } if (!in_head && (tagname != "html")) selfclosetag.append("\n"); return indent_space + selfclosetag + "\n"; } // Handle the general case std::string results; std::string starttag = "<" + tagname + atts + ">"; std::string closetag = ""; if (is_structural) { results = indent_space + starttag; if (!contents.empty()) { results.append("\n" + contents + "\n" + indent_space); } results.append(closetag + "\n"); if (!in_head && (tagname != "html")) results.append("\n"); } else if (is_inline) { results = starttag; results.append(contents); results.append(closetag); } else /** all others */ { results = indent_space + starttag; if (!keep_whitespace) { ltrim(contents); } results.append(contents); results.append(closetag + "\n"); if (!in_head && (tagname != "html")) results.append("\n"); } return results; } // The below are hopefully obsolete now but keep them since // they are a real pain to recreate and may be needed again // if other corner cases in gumbo xhtml support are found #if 0 // handle a few special cases that are hard to deal with insides of gumbo static QStringList allowed_void_tags = QStringList() << "area" << "base" << "basefont" << "bgsound" << "br" << "col" << "command" << "embed" << "event-source" << "frame" << "hr" << "image" << "img" << "input" << "keygen" << "link" << "menuitem" << "meta" << "param" << "source" << "spacer" << "track" << "wbr"; // Handle the general case QString GumboInterface::fix_self_closing_tags(const QString &source) { QString newsource = source; QRegularExpression selfclosed("<\\s*([a-zA-Z]+)(\\s*[^>/]*)/\\s*>"); QRegularExpressionMatch match = selfclosed.match(newsource, 0); while (match.hasMatch()) { if (match.capturedStart() == -1) { break; } QString tag = match.captured(0); int sp = match.capturedStart(0); int n = match.capturedLength(0); QString name = match.captured(1); QString atts = match.captured(2);; atts = atts.trimmed(); if (!atts.isEmpty()) { atts = " " + atts; } int nsp = sp + n; if (!allowed_void_tags.contains(name)) { QString newtag = "<" + name + atts + ">"; newsource = newsource.replace(sp,n,newtag); nsp = sp + newtag.length(); } match = selfclosed.match(newsource, nsp); } return newsource; } // Handle the specific problem of iframe being self-closed QString GumboInterface::fix_self_closing_tags(const QString &source) { QString newsource = source; QRegularExpression selfclosed("<\\s*iframe(\\s*[^>/]*)/\\s*>"); QRegularExpressionMatch match = selfclosed.match(newsource, 0); while (match.hasMatch()) { if (match.capturedStart() == -1) { break; } QString tag = match.captured(0); int sp = match.capturedStart(0); int n = match.capturedLength(0); QString atts = match.captured(1);; atts = atts.trimmed(); if (!atts.isEmpty()) { atts = " " + atts; } QString newtag = ""; newsource = newsource.replace(sp,n,newtag); int nsp = sp + newtag.length(); match = selfclosed.match(newsource, nsp); } return newsource; } #endif Sigil-0.9.9/src/Misc/GumboInterface.h000066400000000000000000000126341321676412500173420ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin B. Hendricks Stratford, ON, Canada ** Copyright (C) 2012 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #ifndef GUMBO_INTERFACE #define GUMBO_INTERFACE #include #include #include #include "gumbo.h" #include "gumbo_edit.h" #include #include #include class QString; struct GumboWellFormedError { int line; int column; QString message; }; class GumboInterface { public: GumboInterface(const QString &source, const QString &version); GumboInterface(const QString &source, const QString &version, const QHash &source_updates); ~GumboInterface(); void parse(); QString repair(); QString getxhtml(); QString prettyprint(QString indent_chars=" "); // returns list tags that match manifest properties QStringList get_all_properties(); // returns "html" node GumboNode * get_root_node(); // routines for working with gumbo paths GumboNode* get_node_from_path(QList & apath); QList get_path_to_node(GumboNode* node); // routines for working with qwebpaths GumboNode* get_node_from_qwebpath(QString webpath); QString get_qwebpath_to_node(GumboNode* node); // routines for updating while serializing (see SourceUpdates and AnchorUpdates QString perform_source_updates(const QString & my_current_book_relpath); QString perform_style_updates(const QString & my_current_book_relpath); QString perform_link_updates(const QString & newlinks); QString get_body_contents(); QString perform_body_updates(const QString & new_body); // routines for working with nodes with specific attributes QList get_all_nodes_with_attribute(const QString & attname); QStringList get_all_values_for_attribute(const QString & attname); QHash get_attributes_of_node(GumboNode* node); // routines for working with nodes with specific tags QList get_all_nodes_with_tag(GumboTag tag); QList get_all_nodes_with_tags(const QList & tags); // utility routines std::string get_tag_name(GumboNode *node); QString get_local_text_of_node(GumboNode* node); // routine to check if well-formed QList error_check(); // routines to work with node and it children only QList get_nodes_with_attribute(GumboNode* node, const char * att_name); QList get_nodes_with_tags(GumboNode* node, const QList & tags); private: enum UpdateTypes { NoUpdates = 0, SourceUpdates = 1 << 0, LinkUpdates = 1 << 1, BodyUpdates = 1 << 2, StyleUpdates = 1 << 3 }; QStringList get_properties(GumboNode* node); QStringList get_values_for_attr(GumboNode* node, const char* attr_name); std::string serialize(GumboNode* node, enum UpdateTypes doupdates = NoUpdates); std::string serialize_contents(GumboNode* node, enum UpdateTypes doupdates = NoUpdates); std::string prettyprint(GumboNode* node, int lvl, const std::string indent_chars); std::string prettyprint_contents(GumboNode* node, int lvl, const std::string indent_chars); std::string build_doctype(GumboNode *node); std::string get_attribute_name(GumboAttribute * at); std::string build_attributes(GumboAttribute * at, bool no_entities, bool run_src_updates = false, bool run_style_updates = false); std::string update_attribute_value(const std::string &href); std::string update_style_urls(const std::string& source); std::string substitute_xml_entities_into_text(const std::string &text); std::string substitute_xml_entities_into_attributes(char quote, const std::string &text); bool in_set(std::unordered_set &s, std::string &key); void rtrim(std::string &s); void ltrim(std::string &s); void ltrimnewlines(std::string &s); void newlinetrim(std::string &s); void condense_whitespace(std::string &s); void replace_all(std::string &s, const char * s1, const char * s2); // Hopefully now unneeded // QString fix_self_closing_tags(const QString & source); QString m_source; GumboOutput* m_output; std::string m_utf8src; const QHash & m_sourceupdates; std::string m_newcsslinks; QString m_currentdir; std::string m_newbody; bool m_hasnbsp; QString m_version; }; #endif Sigil-0.9.9/src/Misc/HTMLEncodingResolver.cpp000066400000000000000000000175311321676412500207410ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks Stratford, Ontario, Canada ** Copyright (C) 2013 John Schember ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include "Misc/HTMLEncodingResolver.h" #include "Misc/Utility.h" #include "sigil_constants.h" #include "sigil_exception.h" const QString ENCODING_ATTRIBUTE = "encoding\\s*=\\s*(?:\"|')([^\"']+)(?:\"|')"; const QString CHARSET_ATTRIBUTE = "charset\\s*=\\s*(?:\"|')([^\"']+)(?:\"|')"; const QString STANDALONE_ATTRIBUTE = "standalone\\s*=\\s*(?:\"|')([^\"']+)(?:\"|')"; const QString VERSION_ATTRIBUTE = "<\\?xml[^>]*version\\s*=\\s*(?:\"|')([^\"']+)(?:\"|')[^>]*>"; // Accepts a full path to an HTML file. // Reads the file, detects the encoding // and returns the text converted to Unicode. QString HTMLEncodingResolver::ReadHTMLFile(const QString &fullfilepath) { QFile file(fullfilepath); // Check if we can open the file if (!file.open(QFile::ReadOnly)) { std::string msg = file.fileName().toStdString() + ": " + file.errorString().toStdString(); throw (CannotOpenFile(msg)); } QByteArray data = file.readAll(); if (IsValidUtf8(data)) { data.replace("\xC2\xA0", " "); } return Utility::ConvertLineEndings(GetCodecForHTML(data)->toUnicode(data)); } // Accepts an HTML stream and tries to determine its encoding; // if no encoding is detected, the default codec for this locale is returned. // We use this function because Qt's QTextCodec::codecForHtml() function // leaves a *lot* to be desired. const QTextCodec *HTMLEncodingResolver::GetCodecForHTML(const QByteArray &raw_text) { unsigned char c1; unsigned char c2; unsigned char c3; unsigned char c4; QString text; QTextCodec *codec; if (raw_text.count() < 4) { return QTextCodec::codecForName("UTF-8"); } // Check the BOM if present. c1 = raw_text.at(0); c2 = raw_text.at(1); c3 = raw_text.at(2); c4 = raw_text.at(3); if (c1 == 0xEF && c2 == 0xBB && c3 == 0xBF) { return QTextCodec::codecForName("UTF-8"); } else if (c1 == 0xFF && c2 == 0xFE && c3 == 0 && c4 == 0) { return QTextCodec::codecForName("UTF-32LE"); } else if (c1 == 0 && c2 == 0 && c3 == 0xFE && c4 == 0xFF) { return QTextCodec::codecForName("UTF-32BE"); } else if (c1 == 0xFE && c2 == 0xFF) { return QTextCodec::codecForName("UTF-16BE"); } else if (c1 == 0xFF && c2 == 0xFE) { return QTextCodec::codecForName("UTF-16LE"); } // Alternating char followed by 0 is typical of utf 16 le without BOM. if (c1 != 0 && c2 == 0 && c3 != 0 && c4 == 0) { return QTextCodec::codecForName("UTF-16LE"); } // Try to find an ecoding specified in the file itself. text = Utility::Substring(0, 1024, raw_text); // Check if the xml encoding attribute is set. QRegularExpression enc_re(ENCODING_ATTRIBUTE); QRegularExpressionMatch enc_mo = enc_re.match(text); if (enc_mo.hasMatch()) { codec = QTextCodec::codecForName(enc_mo.captured(1).toLatin1().toUpper()); if (codec) { return codec; } } // Check if the charset is set in the head. QRegularExpression char_re(CHARSET_ATTRIBUTE); QRegularExpressionMatch char_mo = char_re.match(text); if (char_mo.hasMatch()) { codec = QTextCodec::codecForName(char_mo.captured(1).toLatin1().toUpper()); if (codec) { return codec; } } // See if all characters within this document are utf-8. if (IsValidUtf8(raw_text)) { return QTextCodec::codecForName("UTF-8"); } // Finally, let Qt guess and if it doesn't know it will return the codec // for the current locale. text = raw_text; return QTextCodec::codecForHtml(raw_text, QTextCodec::codecForLocale()); } // This function goes through the entire byte array // and tries to see whether this is a valid UTF-8 sequence. // If it's valid, this is probably a UTF-8 string. bool HTMLEncodingResolver::IsValidUtf8(const QByteArray &string) { // This is an implementation of the Perl code written here: // http://www.w3.org/International/questions/qa-forms-utf-8 // // Basically, UTF-8 has a very specific byte-pattern. This function // checks if the sent byte-sequence conforms to this pattern. // If it does, chances are *very* high that this is UTF-8. // // This function is written to be fast, not pretty. if (string.isNull()) { return false; } int index = 0; while (index < string.size()) { QByteArray dword = string.mid(index, 4); if (dword.size() < 4) { dword = dword.leftJustified(4, '\0'); } const unsigned char *bytes = (const unsigned char *) dword.constData(); // ASCII if (bytes[0] == 0x09 || bytes[0] == 0x0A || bytes[0] == 0x0D || (0x20 <= bytes[0] && bytes[0] <= 0x7E) ) { index += 1; } // non-overlong 2-byte else if ((0xC2 <= bytes[0] && bytes[0] <= 0xDF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) ) { index += 2; } else if ((bytes[0] == 0xE0 && // excluding overlongs (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || // straight 3-byte bytes[0] == 0xEE || bytes[0] == 0xEF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || (bytes[0] == 0xED && // excluding surrogates (0x80 <= bytes[1] && bytes[1] <= 0x9F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) ) { index += 3; } else if ((bytes[0] == 0xF0 && // planes 1-3 (0x90 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || ((0xF1 <= bytes[0] && bytes[0] <= 0xF3) && // planes 4-15 (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || (bytes[0] == 0xF4 && // plane 16 (0x80 <= bytes[1] && bytes[1] <= 0x8F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) ) { index += 4; } else { return false; } } return true; } Sigil-0.9.9/src/Misc/HTMLEncodingResolver.h000066400000000000000000000035101321676412500203760ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef HTMLEncodingResolver_H #define HTMLEncodingResolver_H class QString; class HTMLEncodingResolver { public: // Accepts a full path to an HTML file. // Reads the file, detects the encoding // and returns the text converted to Unicode. static QString ReadHTMLFile(const QString &fullfilepath); private: // Accepts an HTML stream and tries to determine its encoding; // if no encoding is detected, the default codec for this locale is returned. // We use this function because Qt's QTextCodec::codecForHtml() function // leaves a *lot* to be desired. static const QTextCodec *GetCodecForHTML(const QByteArray &raw_text); // This function goes through the entire byte array // and tries to see whether this is a valid UTF-8 sequence. // If it's valid, this is probably a UTF-8 string. static bool IsValidUtf8(const QByteArray &string); }; #endif // HTMLEncodingResolver_H Sigil-0.9.9/src/Misc/HTMLPrettyPrint.cpp000066400000000000000000000204531321676412500177720ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include "HTMLPrettyPrint.h" static QStringList defaultInlineTags = QStringList() << "a" << "abbr" << "acronym" << "audio" << "b" << "bdo" << "big" << "br" << "button" << "cite" << "del" << "dfn" << "em" << "i" << "img" << "ins" << "input" << "label" << "map" << "kbd" << "object" << "q" << "ruby" << "samp" << "select" << "small" << "span" << "strong" << "sub" << "sup" << "textarea" << "tt" << "var" << "video"; HTMLPrettyPrint::HTMLPrettyPrint(const QString &source) : m_source(source), m_level(-1), m_indentChar(' '), m_indentCharCount(4), m_ignoreInline(false), m_inlineTags(defaultInlineTags) { tokenize(); } HTMLPrettyPrint::~HTMLPrettyPrint() { Q_FOREACH(HTMLToken * t, m_tokens) { delete t; t = 0; } } QString HTMLPrettyPrint::prettyPrint() { int level = m_level; bool in_pre = false; QString indentChar = m_indentChar; QStringList builder; QString segment; HTMLToken *last_token = 0; Q_FOREACH(HTMLToken * token, m_tokens) { if (!token) { continue; } segment = m_source.mid(token->start, token->len); if (token->tag == "pre") { in_pre = !in_pre; } if (!in_pre) { segment = cleanSegement(segment); } if (segment.trimmed().isEmpty()) { continue; } if (m_ignoreInline || ((last_token && last_token->type == TOKEN_TYPE_COMMENT) || token->type == TOKEN_TYPE_COMMENT) || (last_token && last_token->type != TOKEN_TYPE_TEXT && !m_inlineTags.contains(last_token->tag) && !m_inlineTags.contains(token->tag) && token->type != TOKEN_TYPE_TEXT) || (token->type == TOKEN_TYPE_OPEN_TAG && !m_inlineTags.contains(token->tag))) { if (last_token && (last_token->type == TOKEN_TYPE_OPEN_TAG || (!m_ignoreInline && m_inlineTags.contains(last_token->tag))) && (token->type == TOKEN_TYPE_OPEN_TAG || token->type == TOKEN_TYPE_SELF_CLOSING_TAG || token->type == TOKEN_TYPE_COMMENT)) { level++; } else if (last_token && (last_token->type == TOKEN_TYPE_CLOSE_TAG || last_token->type == TOKEN_TYPE_SELF_CLOSING_TAG) && token->type != TOKEN_TYPE_OPEN_TAG && token->type != TOKEN_TYPE_SELF_CLOSING_TAG && token->type != TOKEN_TYPE_COMMENT) { level--; } if (level > 0 && !in_pre) { builder.append(indentChar.repeated(m_indentCharCount * level)); } } else { if (!builder.isEmpty() && builder.last() == "\n") { builder.removeLast(); } } builder.append(segment); builder.append("\n"); last_token = token; } return builder.join(""); } QStringList HTMLPrettyPrint::inlineTags() { return m_inlineTags; } void HTMLPrettyPrint::resetInlineTags() { m_inlineTags = defaultInlineTags; } void HTMLPrettyPrint::setIndentLevel(int level) { m_level = level; } void HTMLPrettyPrint::setIndentCharacter(QChar c) { m_indentChar = c; } void HTMLPrettyPrint::setIndentCharacterCount(unsigned int count) { m_indentCharCount = count; } void HTMLPrettyPrint::setIgnoreInline(bool ignore) { m_ignoreInline = ignore; } void HTMLPrettyPrint::setInlineTags(QStringList tags) { m_inlineTags = tags; } void HTMLPrettyPrint::tokenize() { QChar c; int start = 0; bool in_comment = false; bool collect_tag = false; size_t tag_start = 0; size_t tag_len = 0; for (int i = 0; i < m_source.size(); ++i) { c = m_source.at(i); if (collect_tag) { if (c == '>' || c == ' ') { collect_tag = false; } else { tag_len++; } if (m_source.midRef(tag_start, tag_len) == "!--") { collect_tag = false; in_comment = true; } } if (c == '<' || c == '>') { if (in_comment && ((c == '<') || (c == '>' && i >= 2 && m_source.midRef(i - 2, 2) != "--"))) { continue; } HTMLToken *token = new HTMLToken(); token->start = start; token->len = i - start; start = i; if (c == '<') { token->type = TOKEN_TYPE_TEXT; if (!in_comment) { collect_tag = true; tag_start = i + 1; tag_len = 0; } } else if (c == '>') { in_comment = false; token->len++; QString segment = m_source.mid(token->start, token->len); token->type = tokenType(segment); token->tag = tag(segment); i++; start++; } m_tokens.append(token); } } // Trailing text. if (start != m_source.size()) { HTMLToken *token = new HTMLToken(); token->start = start; token->len = m_source.size() - start; token->type = TOKEN_TYPE_TEXT; m_tokens.append(token); } } QString HTMLPrettyPrint::cleanSegement(const QString &source) { QString segment = source; segment = segment.replace(QRegularExpression("(\\r\\n)|\\n|\\r"), " "); segment = segment.replace(QRegularExpression("\\s{2,}"), " "); return segment; } HTMLPrettyPrint::TOKEN_TYPE HTMLPrettyPrint::tokenType(const QString &source) { if (source.startsWith("")) { return TOKEN_TYPE_SELF_CLOSING_TAG; } else if (source.startsWith(""; static const QString CSS_BEGIN = "<\\s*style[^>]*>"; static const QString CSS_END = "]*>"; static const QString CSS_COMMENT_BEGIN = "/\\*"; static const QString CSS_COMMENT_END = "\\*/"; static const QString ATTRIBUTE_VALUE = "\"[^<\"]*\"|'[^<']*'"; static const QString ATTRIBUTE_NAME = "[\\w:-]+"; static const QString ENTITY_BEGIN = "&(?=[^\\s;]+;)"; static const QString ENTITY_END = ";"; // Constructor XHTMLHighlighter::XHTMLHighlighter(bool checkSpelling, QObject *parent) : QSyntaxHighlighter(parent), m_checkSpelling(checkSpelling) { SettingsStore settings; m_codeViewAppearance = settings.codeViewAppearance(); QTextCharFormat html_format; QTextCharFormat doctype_format; QTextCharFormat html_comment_format; QTextCharFormat css_format; QTextCharFormat css_comment_format; QTextCharFormat attribute_name_format; QTextCharFormat attribute_value_format; QTextCharFormat entity_format; doctype_format .setForeground(m_codeViewAppearance.xhtml_doctype_color); html_format .setForeground(m_codeViewAppearance.xhtml_html_color); html_comment_format .setForeground(m_codeViewAppearance.xhtml_html_comment_color); css_format .setForeground(m_codeViewAppearance.xhtml_css_color); css_comment_format .setForeground(m_codeViewAppearance.xhtml_css_comment_color); attribute_name_format .setForeground(m_codeViewAppearance.xhtml_attribute_name_color); attribute_value_format.setForeground(m_codeViewAppearance.xhtml_attribute_value_color); entity_format .setForeground(m_codeViewAppearance.xhtml_entity_color); HighlightingRule rule; rule.pattern = QRegularExpression(DOCTYPE_BEGIN); rule.format = doctype_format; m_Rules[ "DOCTYPE_BEGIN" ] = rule; rule.pattern = QRegularExpression(HTML_ELEMENT_BEGIN); rule.format = html_format; m_Rules[ "HTML_ELEMENT_BEGIN" ] = rule; rule.pattern = QRegularExpression(HTML_ELEMENT_END); rule.format = html_format; m_Rules[ "HTML_ELEMENT_END" ] = rule; rule.pattern = QRegularExpression(HTML_COMMENT_BEGIN); rule.format = html_comment_format; m_Rules[ "HTML_COMMENT_BEGIN" ] = rule; rule.pattern = QRegularExpression(HTML_COMMENT_END); rule.format = html_comment_format; m_Rules[ "HTML_COMMENT_END" ] = rule; rule.pattern = QRegularExpression(CSS_BEGIN); rule.format = css_format; m_Rules[ "CSS_BEGIN" ] = rule; rule.pattern = QRegularExpression(CSS_END); rule.format = css_format; m_Rules[ "CSS_END" ] = rule; rule.pattern = QRegularExpression(CSS_COMMENT_BEGIN); rule.format = css_comment_format; m_Rules[ "CSS_COMMENT_BEGIN" ] = rule; rule.pattern = QRegularExpression(CSS_COMMENT_END); rule.format = css_comment_format; m_Rules[ "CSS_COMMENT_END" ] = rule; rule.pattern = QRegularExpression(ATTRIBUTE_NAME); rule.format = attribute_name_format; m_Rules[ "ATTRIBUTE_NAME" ] = rule; rule.pattern = QRegularExpression(ATTRIBUTE_VALUE); rule.format = attribute_value_format; m_Rules[ "ATTRIBUTE_VALUE" ] = rule; rule.pattern = QRegularExpression(ENTITY_BEGIN); rule.format = entity_format; m_Rules[ "ENTITY_BEGIN" ] = rule; rule.pattern = QRegularExpression(ENTITY_END); rule.format = entity_format; m_Rules[ "ENTITY_END" ] = rule; } // Overrides the function from QSyntaxHighlighter; // gets called by QTextEditor whenever // a block (line of text) needs to be repainted void XHTMLHighlighter::highlightBlock(const QString &text) { // By default, all block states are -1; // in our implementation regular text is state == 1 if (previousBlockState() == -1) { setCurrentBlockState(State_Text); } // Propagate previous state; needed for state tracking else { setCurrentBlockState(previousBlockState()); } if (text.isEmpty()) { return; } SettingsStore settings; m_enableSpellCheck = settings.spellCheck(); // Run spell check over the text. if (m_enableSpellCheck && m_checkSpelling) { CheckSpelling(text); } // The order of these operations is important // because some states format text over previous states! HighlightLine(text, State_Entity); HighlightLine(text, State_CSS); HighlightLine(text, State_HTML); HighlightLine(text, State_CSSComment); HighlightLine(text, State_HTMLComment); HighlightLine(text, State_DOCTYPE); } // Returns the regex that matches the left bracket of a state QRegularExpression XHTMLHighlighter::GetLeftBracketRegEx(int state) const { QRegularExpression empty; switch (state) { case State_Entity: return m_Rules.value("ENTITY_BEGIN").pattern; case State_HTML: return m_Rules.value("HTML_ELEMENT_BEGIN").pattern; case State_HTMLComment: return m_Rules.value("HTML_COMMENT_BEGIN").pattern; case State_CSS: return m_Rules.value("CSS_BEGIN").pattern; case State_CSSComment: return m_Rules.value("CSS_COMMENT_BEGIN").pattern; case State_DOCTYPE: return m_Rules.value("DOCTYPE_BEGIN").pattern; default: return empty; } } // Returns the regex that matches the right bracket of a state QRegularExpression XHTMLHighlighter::GetRightBracketRegEx(int state) const { QRegularExpression empty; switch (state) { case State_Entity: return m_Rules.value("ENTITY_END").pattern; case State_DOCTYPE: case State_HTML: return m_Rules.value("HTML_ELEMENT_END").pattern; case State_HTMLComment: return m_Rules.value("HTML_COMMENT_END").pattern; case State_CSS: return m_Rules.value("CSS_END").pattern; case State_CSSComment: return m_Rules.value("CSS_COMMENT_END").pattern; default: return empty; } } // Sets the requested state for the current text block void XHTMLHighlighter::SetState(int state) { int current_state = currentBlockState(); // Add the current state to the list current_state = current_state | state; setCurrentBlockState(current_state); } // Clears the requested state for the current text block void XHTMLHighlighter::ClearState(int state) { int current_state = currentBlockState(); // Remove the current state from the list current_state = current_state & ~state; setCurrentBlockState(current_state); } // Checks if the requested state is set // for the current text block bool XHTMLHighlighter::StateChecked(int state) const { int current_state = currentBlockState(); // Check if our state is in the list if ((current_state & state) != 0) { return true; } else { return false; } } // Formats the inside of a node; // "text" is the textblock/line of text; // "state" describes the node; // "index" is the index to start formatting from; // "length" is the length of chars to format. void XHTMLHighlighter::FormatBody(const QString &text, int state, int index, int length) { if (state == State_HTML) { // First paint everything the color of the brackets setFormat(index, length, m_Rules.value("HTML_ELEMENT_BEGIN").format); QRegularExpression name = m_Rules.value("ATTRIBUTE_NAME").pattern; QRegularExpression value = m_Rules.value("ATTRIBUTE_VALUE").pattern; // Used to move over the line int main_index = index; // We skip over the left bracket (if it's present) QRegularExpression bracket(HTML_ELEMENT_BEGIN); QRegularExpressionMatch bracket_match = bracket.match(text, main_index); if (bracket_match.hasMatch() && bracket_match.capturedStart() == main_index) { main_index += bracket_match.capturedLength(); } // We skip over the element name (if it's present) // because we want it to be the same color as the brackets QRegularExpression elem_name(HTML_ELEMENT_NAME); QRegularExpressionMatch elem_name_match = elem_name.match(text, main_index); if (elem_name_match.hasMatch() && elem_name_match.capturedStart() == main_index) { main_index += elem_name_match.capturedLength(); } while (true) { // Get the indexes of the attribute names and values int name_index = -1; int name_len = 0; QRegularExpressionMatch name_match = name.match(text, main_index); if (name_match.hasMatch()) { name_index = name_match.capturedStart(); name_len = name_match.capturedLength(); } int value_index = -1; int value_len = 0; QRegularExpressionMatch value_match = value.match(text, main_index); if (value_match.hasMatch()) { value_index = value_match.capturedStart(); value_len = value_match.capturedLength(); } // If we can't find the names and values or we found them // outside of the area we are formatting, we exit if (((name_index != -1) && (name_index < index + length)) || ((value_index != -1) && (value_index < index + length))) { // ... otherwise format the found sections setFormat(name_index, name_len, m_Rules.value("ATTRIBUTE_NAME").format); setFormat(value_index, value_len, m_Rules.value("ATTRIBUTE_VALUE").format); } else { break; } // Update the main index with the regex that matched "further down the line" if (name_index + name_len > value_index + value_len) { main_index = name_index + name_len; } else { main_index = value_index + value_len; } } } else if (state == State_HTMLComment) { setFormat(index, length, m_Rules.value("HTML_COMMENT_BEGIN").format); } else if (state == State_CSS) { setFormat(index, length, m_Rules.value("CSS_BEGIN").format); } else if (state == State_CSSComment) { setFormat(index, length, m_Rules.value("CSS_COMMENT_BEGIN").format); } else if (state == State_Entity) { setFormat(index, length, m_Rules.value("ENTITY_BEGIN").format); } else if (state == State_DOCTYPE) { setFormat(index, length, m_Rules.value("DOCTYPE_BEGIN").format); } } // Highlights the current line according to the state requested; // check to see if the node of type "state" is present; // if it is, the node is formatted void XHTMLHighlighter::HighlightLine(const QString &text, int state) { QRegularExpression left_bracket_regex = GetLeftBracketRegEx(state); QRegularExpression right_bracket_regex = GetRightBracketRegEx(state); int main_index = 0; // We loop over the line several times // because we could have several nodes on it while (main_index < text.length()) { int left_bracket_index = -1; int left_bracket_len = 0; int right_bracket_index = -1; int right_bracket_len = 0; if (!left_bracket_regex.pattern().isEmpty()) { QRegularExpressionMatch left_bracket_match = left_bracket_regex.match(text, main_index); if (left_bracket_match.hasMatch()) { left_bracket_index = left_bracket_match.capturedStart(); left_bracket_len = left_bracket_match.capturedLength(); } } if (!right_bracket_regex.pattern().isEmpty()) { QRegularExpressionMatch right_bracket_match = right_bracket_regex.match(text, main_index); if (right_bracket_match.hasMatch()) { right_bracket_index = right_bracket_match.capturedStart(); right_bracket_len = right_bracket_match.capturedLength(); } } // If we are not starting our state and our state is // not already set, we don't format; see the four cases explanation below if (left_bracket_index == -1 && !StateChecked(state)) { return; } // Every node/state has a left "bracket", a right "bracket" and the inside body. // This example uses HTML tags, but the principle is the same for every node/state. // There are four possible cases: // (1) <......> (both brackets on the same line; state starts and stops here) // (2) <....... (only the left bracket; next line continues state) // (3) .......> (only the right bracket; current line ends state) // (4) ........ (no brackets; a line between (2) and (3)) // We also check the state because we don't want to start a new node // if the current node of the same type hasn't finished if (left_bracket_index != -1 && !StateChecked(state)) { main_index = left_bracket_index + left_bracket_len; // (1) if (right_bracket_index != -1) { main_index = right_bracket_index + right_bracket_len; int length = right_bracket_index - left_bracket_index + right_bracket_len; FormatBody(text, state, left_bracket_index, length); // There's no point in setting the state here because the state // starts and ends on this line. } // (2) else { int length = text.length() - left_bracket_index; FormatBody(text, state, left_bracket_index, length); main_index += length; // Set the current state so the next line can continue // with the formatting. SetState(state); } } else { // (3) if (right_bracket_index != -1) { main_index = right_bracket_index + right_bracket_len; int length = right_bracket_index + right_bracket_len; FormatBody(text, state, 0, length); // Clear the current state because our state has just ended. ClearState(state); } // (4) else { int length = text.length(); FormatBody(text, state, 0, length); main_index += length; } } } } void XHTMLHighlighter::CheckSpelling(const QString &text) { QTextCharFormat format; format.setUnderlineColor(m_codeViewAppearance.spelling_underline_color); // QTextCharFormat::SpellCheckUnderline has issues with Qt 5. It only displays // at some zoom levels and often doesn't display at all. So we're using wave // underline since it's good enough for most people. format.setUnderlineStyle(QTextCharFormat::WaveUnderline); QList misspelled_words = HTMLSpellCheck::GetMisspelledWords(text); foreach(HTMLSpellCheck::MisspelledWord misspelled_word, misspelled_words) { setFormat(misspelled_word.offset, misspelled_word.length, format); } } Sigil-0.9.9/src/Misc/XHTMLHighlighter.h000066400000000000000000000066601321676412500175250ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef XHTMLHIGHLIGHTER_H #define XHTMLHIGHLIGHTER_H #include #include #include "Misc/SettingsStore.h" class XHTMLHighlighter : public QSyntaxHighlighter { public: // Constructor XHTMLHighlighter(bool checkSpelling, QObject *parent = 0); protected: // Overrides the function from QSyntaxHighlighter; // gets called by QTextEditor whenever // a block (line of text) needs to be repainted void highlightBlock(const QString &text); private: // Returns the regex that matches the left bracket of a state QRegularExpression GetLeftBracketRegEx(int state) const; // Returns the regex that matches the right bracket of a state QRegularExpression GetRightBracketRegEx(int state) const; // Sets the requested state for the current text block void SetState(int state); // Clears the requested state for the current text block void ClearState(int state); // Checks if the requested state is set // for the current text block bool StateChecked(int state) const; // Formats the inside of a node; // "text" is the textblock/line; // "state" describes the node; // "index" is the index to start formatting from // "length" is the length of chars to format void FormatBody(const QString &text, int state, int index, int length); // Highlights the current line according to the state requested; // check to see if the node of type "state" is present; // if it is, the node is formatted void HighlightLine(const QString &text, int state); void CheckSpelling(const QString &text); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// // Al the possible nodes/states enum BlockState { State_Text = 1 << 0, State_Entity = 1 << 1, State_HTML = 1 << 2, State_CSS = 1 << 3, State_CSSComment = 1 << 4, State_HTMLComment = 1 << 5, State_DOCTYPE = 1 << 6 }; struct HighlightingRule { QRegularExpression pattern; QTextCharFormat format; }; // Stores all of our highlighting rules // and the text formats used QHash m_Rules; // Determine if spell check should be used on the document. bool m_checkSpelling; // Determine if automatic spell check is enabled bool m_enableSpellCheck; SettingsStore::CodeViewAppearance m_codeViewAppearance; }; #endif // XHTMLHIGHLIGHTER_H Sigil-0.9.9/src/Misc/XMLEntities.cpp000066400000000000000000000440221321676412500171440ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2013 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include "Misc/XMLEntities.h" XMLEntities *XMLEntities::m_instance = 0; XMLEntities *XMLEntities::instance() { if (m_instance == 0) { m_instance = new XMLEntities(); } return m_instance; } QString XMLEntities::GetEntityName(ushort code) { QString name; if (m_EntityName.contains(code)) { name = m_EntityName.value(code, QString()); } return name; } QString XMLEntities::GetEntityDescription(ushort code) { QString name; if (m_EntityDescription.contains(code)) { name = m_EntityDescription.value(code, QString()); } return name; } ushort XMLEntities::GetEntityCode(const QString name) { ushort code = 0; if (name.startsWith("&") && name.endsWith(";")) { QString root; int n = name.length(); root = name.mid(1,n-2); if (root.startsWith("#")) { bool ok; int base = 10; root = root.mid(1); if (root.startsWith('x', Qt::CaseInsensitive)) { base = 16; root = root.mid(1); } int rcode = root.toUShort(&ok, base); if (ok) { code = rcode; } } else { if (m_EntityCode.contains(root)) { code = m_EntityCode.value(root, 0); } } } return code; } XMLEntities::XMLEntities() { SetXMLEntities(); } void XMLEntities::SetXMLEntities() { if (!m_EntityName.isEmpty()) { return; } QStringList data; data << "34" << "quot" << tr("quotation mark") << "38" << "amp" << tr("ampersand") << "39" << "apos" << tr("apostrophe") << "60" << "lt" << tr("less-than sign") << "62" << "gt" << tr("greater-than sign") << "160" << "nbsp" << tr("no-break space") << "161" << "iexcl" << tr("inverted exclamation mark") << "162" << "cent" << tr("cent sign") << "163" << "pound" << tr("pound sign") << "164" << "curren" << tr("currency sign") << "165" << "yen" << tr("yen sign") << "166" << "brvbar" << tr("broken bar") << "167" << "sect" << tr("section sign") << "168" << "uml" << tr("diaeresis") << "169" << "copy" << tr("copyright symbol") << "170" << "ordf" << tr("feminine ordinal indicator") << "171" << "laquo" << tr("left-pointing double angle quotation mark") << "172" << "not" << tr("not sign") << "173" << "shy" << tr("soft hyphen") << "174" << "reg" << tr("registered sign") << "175" << "macr" << tr("macron") << "176" << "deg" << tr("degree symbol") << "177" << "plusmn" << tr("plus-minus sign") << "178" << "sup2" << tr("superscript two") << "179" << "sup3" << tr("superscript three") << "180" << "acute" << tr("acute accent") << "181" << "micro" << tr("micro sign") << "182" << "para" << tr("pilcrow sign") << "183" << "middot" << tr("middle dot") << "184" << "cedil" << tr("cedilla") << "185" << "sup1" << tr("superscript one") << "186" << "ordm" << tr("masculine ordinal indicator") << "187" << "raquo" << tr("right-pointing double angle quotation mark") << "188" << "frac14" << tr("vulgar fraction one quarter") << "189" << "frac12" << tr("vulgar fraction one half") << "190" << "frac34" << tr("vulgar fraction three quarters") << "191" << "iquest" << tr("inverted question mark") << "192" << "Agrave" << tr("Latin capital letter A with grave accent") << "193" << "Aacute" << tr("Latin capital letter A with acute accent") << "194" << "Acirc" << tr("Latin capital letter A with circumflex") << "195" << "Atilde" << tr("Latin capital letter A with tilde") << "196" << "Auml" << tr("Latin capital letter A with diaeresis") << "197" << "Aring" << tr("Latin capital letter A with ring above") << "198" << "AElig" << tr("Latin capital letter AE") << "199" << "Ccedil" << tr("Latin capital letter C with cedilla") << "200" << "Egrave" << tr("Latin capital letter E with grave accent") << "201" << "Eacute" << tr("Latin capital letter E with acute accent") << "202" << "Ecirc" << tr("Latin capital letter E with circumflex") << "203" << "Euml" << tr("Latin capital letter E with diaeresis") << "204" << "Igrave" << tr("Latin capital letter I with grave accent") << "205" << "Iacute" << tr("Latin capital letter I with acute accent") << "206" << "Icirc" << tr("Latin capital letter I with circumflex") << "207" << "Iuml" << tr("Latin capital letter I with diaeresis") << "208" << "ETH" << tr("Latin capital letter Eth") << "209" << "Ntilde" << tr("Latin capital letter N with tilde") << "210" << "Ograve" << tr("Latin capital letter O with grave accent") << "211" << "Oacute" << tr("Latin capital letter O with acute accent") << "212" << "Ocirc" << tr("Latin capital letter O with circumflex") << "213" << "Otilde" << tr("Latin capital letter O with tilde") << "214" << "Ouml" << tr("Latin capital letter O with diaeresis") << "215" << "times" << tr("multiplication sign") << "216" << "Oslash" << tr("Latin capital letter O with stroke") << "217" << "Ugrave" << tr("Latin capital letter U with grave accent") << "218" << "Uacute" << tr("Latin capital letter U with acute accent") << "219" << "Ucirc" << tr("Latin capital letter U with circumflex") << "220" << "Uuml" << tr("Latin capital letter U with diaeresis") << "221" << "Yacute" << tr("Latin capital letter Y with acute accent") << "222" << "THORN" << tr("Latin capital letter THORN") << "223" << "szlig" << tr("Latin small letter sharp s") << "224" << "agrave" << tr("Latin small letter a with grave accent") << "225" << "aacute" << tr("Latin small letter a with acute accent") << "226" << "acirc" << tr("Latin small letter a with circumflex") << "227" << "atilde" << tr("Latin small letter a with tilde") << "228" << "auml" << tr("Latin small letter a with diaeresis") << "229" << "aring" << tr("Latin small letter a with ring above") << "230" << "aelig" << tr("Latin small letter ae") << "231" << "ccedil" << tr("Latin small letter c with cedilla") << "232" << "egrave" << tr("Latin small letter e with grave accent") << "233" << "eacute" << tr("Latin small letter e with acute accent") << "234" << "ecirc" << tr("Latin small letter e with circumflex") << "235" << "euml" << tr("Latin small letter e with diaeresis") << "236" << "igrave" << tr("Latin small letter i with grave accent") << "237" << "iacute" << tr("Latin small letter i with acute accent") << "238" << "icirc" << tr("Latin small letter i with circumflex") << "239" << "iuml" << tr("Latin small letter i with diaeresis") << "240" << "eth" << tr("Latin small letter eth") << "241" << "ntilde" << tr("Latin small letter n with tilde") << "242" << "ograve" << tr("Latin small letter o with grave accent") << "243" << "oacute" << tr("Latin small letter o with acute accent") << "244" << "ocirc" << tr("Latin small letter o with circumflex") << "245" << "otilde" << tr("Latin small letter o with tilde") << "246" << "ouml" << tr("Latin small letter o with diaeresis") << "247" << "divide" << tr("division sign") << "248" << "oslash" << tr("Latin small letter o with stroke") << "249" << "ugrave" << tr("Latin small letter u with grave accent") << "250" << "uacute" << tr("Latin small letter u with acute accent") << "251" << "ucirc" << tr("Latin small letter u with circumflex") << "252" << "uuml" << tr("Latin small letter u with diaeresis") << "253" << "yacute" << tr("Latin small letter y with acute accent") << "254" << "thorn" << tr("Latin small letter thorn") << "255" << "yuml" << tr("Latin small letter y with diaeresis") << "338" << "OElig" << tr("Latin capital ligature oe") << "339" << "oelig" << tr("Latin small ligature oe") << "352" << "Scaron" << tr("Latin capital letter s with caron") << "353" << "scaron" << tr("Latin small letter s with caron") << "376" << "Yuml" << tr("Latin capital letter y with diaeresis") << "402" << "fnof" << tr("Latin small letter f with hook") << "710" << "circ" << tr("modifier letter circumflex accent") << "732" << "tilde" << tr("small tilde") << "913" << "Alpha" << tr("Greek capital letter Alpha") << "914" << "Beta" << tr("Greek capital letter Beta") << "915" << "Gamma" << tr("Greek capital letter Gamma") << "916" << "Delta" << tr("Greek capital letter Delta") << "917" << "Epsilon" << tr("Greek capital letter Epsilon") << "918" << "Zeta" << tr("Greek capital letter Zeta") << "919" << "Eta" << tr("Greek capital letter Eta") << "920" << "Theta" << tr("Greek capital letter Theta") << "921" << "Iota" << tr("Greek capital letter Iota") << "922" << "Kappa" << tr("Greek capital letter Kappa") << "923" << "Lambda" << tr("Greek capital letter Lambda") << "924" << "Mu" << tr("Greek capital letter Mu") << "925" << "Nu" << tr("Greek capital letter Nu") << "926" << "Xi" << tr("Greek capital letter Xi") << "927" << "Omicron" << tr("Greek capital letter Omicron") << "928" << "Pi" << tr("Greek capital letter Pi") << "929" << "Rho" << tr("Greek capital letter Rho") << "931" << "Sigma" << tr("Greek capital letter Sigma") << "932" << "Tau" << tr("Greek capital letter Tau") << "933" << "Upsilon" << tr("Greek capital letter Upsilon") << "934" << "Phi" << tr("Greek capital letter Phi") << "935" << "Chi" << tr("Greek capital letter Chi") << "936" << "Psi" << tr("Greek capital letter Psi") << "937" << "Omega" << tr("Greek capital letter Omega") << "945" << "alpha" << tr("Greek small letter alpha") << "946" << "beta" << tr("Greek small letter beta") << "947" << "gamma" << tr("Greek small letter gamma") << "948" << "delta" << tr("Greek small letter delta") << "949" << "epsilon" << tr("Greek small letter epsilon") << "950" << "zeta" << tr("Greek small letter zeta") << "951" << "eta" << tr("Greek small letter eta") << "952" << "theta" << tr("Greek small letter theta") << "953" << "iota" << tr("Greek small letter iota") << "954" << "kappa" << tr("Greek small letter kappa") << "955" << "lambda" << tr("Greek small letter lambda") << "956" << "mu" << tr("Greek small letter mu") << "957" << "nu" << tr("Greek small letter nu") << "958" << "xi" << tr("Greek small letter xi") << "959" << "omicron" << tr("Greek small letter omicron") << "960" << "pi" << tr("Greek small letter pi") << "961" << "rho" << tr("Greek small letter rho") << "962" << "sigmaf" << tr("Greek small letter final sigma") << "963" << "sigma" << tr("Greek small letter sigma") << "964" << "tau" << tr("Greek small letter tau") << "965" << "upsilon" << tr("Greek small letter upsilon") << "966" << "phi" << tr("Greek small letter phi") << "967" << "chi" << tr("Greek small letter chi") << "968" << "psi" << tr("Greek small letter psi") << "969" << "omega" << tr("Greek small letter omega") << "977" << "thetasym" << tr("Greek theta symbol") << "978" << "upsih" << tr("Greek Upsilon with hook symbol") << "982" << "piv" << tr("Greek pi symbol") << "8194" << "ensp" << tr("en space") << "8195" << "emsp" << tr("em space") << "8201" << "thinsp" << tr("thin space") << "8204" << "zwnj" << tr("zero-width non-joiner") << "8205" << "zwj" << tr("zero-width joiner") << "8206" << "lrm" << tr("left-to-right mark") << "8207" << "rlm" << tr("right-to-left mark") << "8211" << "ndash" << tr("en dash") << "8212" << "mdash" << tr("em dash") << "8216" << "lsquo" << tr("left single quotation mark") << "8217" << "rsquo" << tr("right single quotation mark") << "8218" << "sbquo" << tr("single low-9 quotation mark") << "8220" << "ldquo" << tr("left double quotation mark") << "8221" << "rdquo" << tr("right double quotation mark") << "8222" << "bdquo" << tr("double low-9 quotation mark") << "8224" << "dagger" << tr("dagger, obelisk") << "8225" << "Dagger" << tr("double dagger, double obelisk") << "8226" << "bull" << tr("bullet") << "8230" << "hellip" << tr("horizontal ellipsis") << "8240" << "permil" << tr("per mille sign") << "8242" << "prime" << tr("prime") << "8243" << "Prime" << tr("double prime") << "8249" << "lsaquo" << tr("single left-pointing angle quotation mark") << "8250" << "rsaquo" << tr("single right-pointing angle quotation mark") << "8254" << "oline" << tr("overline") << "8260" << "frasl" << tr("fraction slash") << "8364" << "euro" << tr("euro sign") << "8465" << "image" << tr("black-letter capital I") << "8472" << "weierp" << tr("script capital P") << "8476" << "real" << tr("black-letter capital R") << "8482" << "trade" << tr("trademark symbol") << "8501" << "alefsym" << tr("alef symbol") << "8592" << "larr" << tr("leftwards arrow") << "8593" << "uarr" << tr("upwards arrow") << "8594" << "rarr" << tr("rightwards arrow") << "8595" << "darr" << tr("downwards arrow") << "8596" << "harr" << tr("left right arrow") << "8629" << "crarr" << tr("downwards arrow with corner leftwards") << "8656" << "lArr" << tr("leftwards double arrow") << "8657" << "uArr" << tr("upwards double arrow") << "8658" << "rArr" << tr("rightwards double arrow") << "8659" << "dArr" << tr("downwards double arrow") << "8660" << "hArr" << tr("left right double arrow") << "8704" << "forall" << tr("for all") << "8706" << "part" << tr("partial differential") << "8707" << "exist" << tr("there exists") << "8709" << "empty" << tr("empty set") << "8711" << "nabla" << tr("nabla") << "8712" << "isin" << tr("element of") << "8713" << "notin" << tr("not an element of") << "8715" << "ni" << tr("contains as member") << "8719" << "prod" << tr("n-ary product") << "8721" << "sum" << tr("n-ary summation") << "8722" << "minus" << tr("minus sign") << "8727" << "lowast" << tr("asterisk operator") << "8730" << "radic" << tr("square root") << "8733" << "prop" << tr("proportional to") << "8734" << "infin" << tr("infinity") << "8736" << "ang" << tr("angle") << "8743" << "and" << tr("logical and") << "8744" << "or" << tr("logical or") << "8745" << "cap" << tr("intersection") << "8746" << "cup" << tr("union") << "8747" << "int" << tr("integral") << "8756" << "there4" << tr("therefore sign") << "8764" << "sim" << tr("tilde operator") << "8773" << "cong" << tr("congruent to") << "8776" << "asymp" << tr("almost equal to") << "8800" << "ne" << tr("not equal to") << "8801" << "equiv" << tr("identical to") << "8804" << "le" << tr("less-than or equal to") << "8805" << "ge" << tr("greater-than or equal to") << "8834" << "sub" << tr("subset of") << "8835" << "sup" << tr("superset of") << "8836" << "nsub" << tr("not a subset of") << "8838" << "sube" << tr("subset of or equal to") << "8839" << "supe" << tr("superset of or equal to") << "8853" << "oplus" << tr("circled plus") << "8855" << "otimes" << tr("circled times") << "8869" << "perp" << tr("up tack") << "8901" << "sdot" << tr("dot operator") << "8968" << "lceil" << tr("left ceiling") << "8969" << "rceil" << tr("right ceiling") << "8970" << "lfloor" << tr("left floor") << "8971" << "rfloor" << tr("right floor") << "9001" << "lang" << tr("left-pointing angle bracket") << "9002" << "rang" << tr("right-pointing angle bracket") << "9674" << "loz" << tr("lozenge") << "9824" << "spades" << tr("black spade suit") << "9827" << "clubs" << tr("black club suit") << "9829" << "hearts" << tr("black heart suit") << "9830" << "diams" << tr("black diamond suit"); for (int i = 0; i < data.count(); i++) { ushort code = data.at(i++).toInt(); QString name = data.at(i++); QString description = data.at(i); m_EntityName.insert(code, name); m_EntityDescription.insert(code, description); m_EntityCode.insert(name, code); } } Sigil-0.9.9/src/Misc/XMLEntities.h000066400000000000000000000030301321676412500166030ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2013 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef XMLENTITIES_H #define XMLENTITIES_H #include #include class QString; class QStringList; /** * Singleton. * * XMLEntities routines */ class XMLEntities { Q_DECLARE_TR_FUNCTIONS(XMLEntities) public: static XMLEntities *instance(); QString GetEntityName(ushort code); QString GetEntityDescription(ushort code); ushort GetEntityCode(const QString name); private: XMLEntities(); void SetXMLEntities(); QHash m_EntityName; QHash m_EntityDescription; QHash m_EntityCode; static XMLEntities *m_instance; }; #endif // XMLENTITIES_H Sigil-0.9.9/src/Misc/XhtmlEntitiesDtd.cpp000066400000000000000000006030141321676412500202360ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "sigil_constants.h" /* Xtml DTD with entities only. */ const char *XHTML_ENTITIES_DTD_ID = "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"; const unsigned int XHTML_ENTITIES_DTD_LEN = 31101; const unsigned char XHTML_ENTITIES_DTD[] = { 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x31, 0x2c, 0x20, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x25, 0x20, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x2d, 0x6c, 0x61, 0x74, 0x31, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x20, 0x4c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x31, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x2d, 0x6c, 0x61, 0x74, 0x31, 0x2e, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x28, 0x43, 0x29, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x39, 0x38, 0x36, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x54, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x25, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x20, 0x4c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x31, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x31, 0x2f, 0x44, 0x54, 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x2d, 0x6c, 0x61, 0x74, 0x31, 0x2e, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x25, 0x48, 0x54, 0x4d, 0x4c, 0x6c, 0x61, 0x74, 0x31, 0x3b, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x62, 0x73, 0x70, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x2d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x65, 0x78, 0x63, 0x6c, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x61, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x79, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x79, 0x65, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x79, 0x75, 0x61, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x62, 0x72, 0x76, 0x62, 0x61, 0x72, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x62, 0x61, 0x72, 0x20, 0x3d, 0x20, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x61, 0x72, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x65, 0x63, 0x74, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x20, 0x3d, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x64, 0x69, 0x61, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x36, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x72, 0x64, 0x66, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x66, 0x65, 0x6d, 0x69, 0x6e, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x61, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x73, 0x63, 0x72, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x68, 0x79, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x73, 0x63, 0x72, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x44, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x65, 0x67, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x72, 0x61, 0x64, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6d, 0x61, 0x63, 0x72, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x41, 0x50, 0x4c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x62, 0x61, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x41, 0x46, 0x20, 0x49, 0x53, 0x4f, 0x64, 0x69, 0x61, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x64, 0x65, 0x67, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x6c, 0x75, 0x73, 0x6d, 0x6e, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x70, 0x6c, 0x75, 0x73, 0x2d, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x70, 0x6c, 0x75, 0x73, 0x2d, 0x6f, 0x72, 0x2d, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x75, 0x70, 0x32, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x3d, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x20, 0x74, 0x77, 0x6f, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x64, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x75, 0x70, 0x33, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x37, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x63, 0x75, 0x62, 0x65, 0x64, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x64, 0x69, 0x61, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x61, 0x72, 0x61, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x70, 0x69, 0x6c, 0x63, 0x72, 0x6f, 0x77, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6f, 0x74, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x47, 0x65, 0x6f, 0x72, 0x67, 0x69, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x47, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, 0x64, 0x6f, 0x74, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x65, 0x64, 0x69, 0x6c, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x63, 0x65, 0x64, 0x69, 0x6c, 0x6c, 0x61, 0x20, 0x3d, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x65, 0x64, 0x69, 0x6c, 0x6c, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x64, 0x69, 0x61, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x75, 0x70, 0x31, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x72, 0x64, 0x6d, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6d, 0x61, 0x73, 0x63, 0x75, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x61, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x75, 0x69, 0x6c, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x66, 0x72, 0x61, 0x63, 0x31, 0x34, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x76, 0x75, 0x6c, 0x67, 0x61, 0x72, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x66, 0x72, 0x61, 0x63, 0x31, 0x32, 0x20, 0x22, 0x26, 0x23, 0x31, 0x38, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x76, 0x75, 0x6c, 0x67, 0x61, 0x72, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x44, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x66, 0x72, 0x61, 0x63, 0x33, 0x34, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x76, 0x75, 0x6c, 0x67, 0x61, 0x72, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x46, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x41, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x41, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x41, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x41, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x41, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x41, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x41, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x41, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x41, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x41, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x41, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x41, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x41, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x41, 0x20, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x41, 0x45, 0x6c, 0x69, 0x67, 0x20, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x41, 0x45, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x41, 0x45, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x43, 0x63, 0x65, 0x64, 0x69, 0x6c, 0x20, 0x22, 0x26, 0x23, 0x31, 0x39, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x43, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x65, 0x64, 0x69, 0x6c, 0x6c, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x45, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x45, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x45, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x45, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x45, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x45, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x45, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x45, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x49, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x49, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x44, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x49, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x49, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x49, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x43, 0x46, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x45, 0x54, 0x48, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x45, 0x54, 0x48, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4e, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x30, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x4e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x55, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x55, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x55, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x55, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x55, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x31, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x55, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x55, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x55, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x59, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x59, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x44, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x54, 0x48, 0x4f, 0x52, 0x4e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x54, 0x48, 0x4f, 0x52, 0x4e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x7a, 0x6c, 0x69, 0x67, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x73, 0x68, 0x61, 0x72, 0x70, 0x20, 0x73, 0x20, 0x3d, 0x20, 0x65, 0x73, 0x73, 0x2d, 0x7a, 0x65, 0x64, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x44, 0x46, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x32, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x20, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x65, 0x6c, 0x69, 0x67, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x63, 0x65, 0x64, 0x69, 0x6c, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x63, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x65, 0x64, 0x69, 0x6c, 0x6c, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x44, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x33, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x45, 0x46, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x74, 0x68, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x65, 0x74, 0x68, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x74, 0x72, 0x6f, 0x6b, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x75, 0x67, 0x72, 0x61, 0x76, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x34, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x75, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x75, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x35, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x75, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x75, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x35, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x75, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x75, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x35, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x75, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x79, 0x61, 0x63, 0x75, 0x74, 0x65, 0x20, 0x22, 0x26, 0x23, 0x32, 0x35, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x44, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x68, 0x6f, 0x72, 0x6e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x35, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x6f, 0x72, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x79, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x32, 0x35, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x46, 0x46, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x25, 0x20, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x2d, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x20, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x2d, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2e, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x2c, 0x20, 0x47, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x54, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x25, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x20, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x31, 0x2f, 0x44, 0x54, 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x2d, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2e, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x25, 0x48, 0x54, 0x4d, 0x4c, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3b, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x28, 0x43, 0x29, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x39, 0x38, 0x36, 0x3a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x74, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x73, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x28, 0x69, 0x2e, 0x65, 0x2e, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x79, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x65, 0x78, 0x2e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x20, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x4c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x2d, 0x42, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x66, 0x6e, 0x6f, 0x66, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x34, 0x30, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x66, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x68, 0x6f, 0x6f, 0x6b, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x72, 0x69, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x31, 0x39, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x47, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x31, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x42, 0x65, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x31, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x62, 0x65, 0x74, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x32, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x47, 0x61, 0x6d, 0x6d, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x31, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x67, 0x61, 0x6d, 0x6d, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x31, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x45, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x31, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x35, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x5a, 0x65, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x31, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x7a, 0x65, 0x74, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x36, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x45, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x31, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x65, 0x74, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x37, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x54, 0x68, 0x65, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x74, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x49, 0x6f, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6f, 0x74, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x39, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4b, 0x61, 0x70, 0x70, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6b, 0x61, 0x70, 0x70, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x41, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4d, 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6d, 0x75, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x43, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4e, 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x75, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x44, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x58, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x78, 0x69, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x39, 0x46, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x50, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x69, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x52, 0x68, 0x6f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x32, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x72, 0x68, 0x6f, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x31, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x53, 0x69, 0x67, 0x6d, 0x61, 0x66, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x32, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x53, 0x69, 0x67, 0x6d, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x33, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x54, 0x61, 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x33, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x74, 0x61, 0x75, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x34, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x55, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x33, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x75, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x50, 0x68, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x33, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x68, 0x69, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x43, 0x68, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x33, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x63, 0x68, 0x69, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x37, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x50, 0x73, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x33, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x73, 0x69, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x6d, 0x65, 0x67, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x33, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x6d, 0x65, 0x67, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x34, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x62, 0x65, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x34, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x62, 0x65, 0x74, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x67, 0x61, 0x6d, 0x6d, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x34, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x67, 0x61, 0x6d, 0x6d, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x34, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x34, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x7a, 0x65, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x7a, 0x65, 0x74, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x65, 0x74, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x68, 0x65, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x74, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x6f, 0x74, 0x61, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6f, 0x74, 0x61, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6b, 0x61, 0x70, 0x70, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6b, 0x61, 0x70, 0x70, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6d, 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6d, 0x75, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x75, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x44, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x78, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x78, 0x69, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x35, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x42, 0x46, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x69, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x68, 0x6f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x72, 0x68, 0x6f, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x66, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x61, 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x74, 0x61, 0x75, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x75, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x75, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x68, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x68, 0x69, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x68, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x63, 0x68, 0x69, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x73, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x73, 0x69, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x6d, 0x65, 0x67, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x6d, 0x65, 0x67, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x43, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x68, 0x65, 0x74, 0x61, 0x73, 0x79, 0x6d, 0x20, 0x22, 0x26, 0x23, 0x39, 0x37, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x74, 0x61, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x44, 0x31, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x75, 0x70, 0x73, 0x69, 0x68, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x37, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x75, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x68, 0x6f, 0x6f, 0x6b, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x44, 0x32, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x69, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x38, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x70, 0x69, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x44, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x67, 0x72, 0x6b, 0x33, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x6e, 0x63, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x62, 0x75, 0x6c, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x32, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x32, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x31, 0x39, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x68, 0x65, 0x6c, 0x6c, 0x69, 0x70, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x33, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x20, 0x65, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, 0x20, 0x3d, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x32, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x34, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x65, 0x65, 0x74, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x33, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x34, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x33, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x35, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x33, 0x45, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x66, 0x72, 0x61, 0x73, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x36, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x34, 0x34, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x77, 0x65, 0x69, 0x65, 0x72, 0x70, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x34, 0x37, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x50, 0x20, 0x3d, 0x20, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x57, 0x65, 0x69, 0x65, 0x72, 0x73, 0x74, 0x72, 0x61, 0x73, 0x73, 0x20, 0x70, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x31, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x6f, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x34, 0x36, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x49, 0x20, 0x3d, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x70, 0x61, 0x72, 0x74, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x31, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x6f, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x34, 0x37, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x52, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x31, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x6f, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x72, 0x61, 0x64, 0x65, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x34, 0x38, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x72, 0x61, 0x64, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x32, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x6c, 0x65, 0x66, 0x73, 0x79, 0x6d, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x35, 0x30, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x6c, 0x65, 0x66, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x20, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x33, 0x35, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x6c, 0x65, 0x66, 0x20, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6c, 0x65, 0x66, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x35, 0x44, 0x30, 0x20, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x67, 0x6c, 0x79, 0x70, 0x68, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x70, 0x69, 0x63, 0x74, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x41, 0x72, 0x72, 0x6f, 0x77, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x61, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x35, 0x39, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x39, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x75, 0x61, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x35, 0x39, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x75, 0x70, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x39, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x61, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x35, 0x39, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x39, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x64, 0x61, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x35, 0x39, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x39, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x68, 0x61, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x35, 0x39, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x39, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x61, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x72, 0x61, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x36, 0x32, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x77, 0x61, 0x72, 0x64, 0x73, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x72, 0x72, 0x69, 0x61, 0x67, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x42, 0x35, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x41, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x36, 0x35, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x44, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x61, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6c, 0x41, 0x72, 0x72, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x27, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x27, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x75, 0x74, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x53, 0x6f, 0x20, 0x3f, 0x20, 0x6c, 0x41, 0x72, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x27, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x27, 0x20, 0x61, 0x73, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x75, 0x41, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x36, 0x35, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x75, 0x70, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x44, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x61, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x41, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x36, 0x35, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x44, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x61, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x27, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x27, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x62, 0x75, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x6f, 0x20, 0x3f, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x41, 0x72, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x27, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x27, 0x20, 0x61, 0x73, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x64, 0x41, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x36, 0x35, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x44, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x61, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x68, 0x41, 0x72, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x36, 0x36, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x31, 0x44, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x61, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x66, 0x6f, 0x72, 0x61, 0x6c, 0x6c, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x30, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x30, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x30, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x30, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x30, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x30, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x30, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x30, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x6f, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x61, 0x62, 0x6c, 0x61, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x31, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x61, 0x62, 0x6c, 0x61, 0x20, 0x3d, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x30, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x73, 0x69, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x31, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x30, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x31, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x30, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x31, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x73, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x30, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x27, 0x6e, 0x69, 0x27, 0x3f, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x31, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x2d, 0x61, 0x72, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x30, 0x46, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x73, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x30, 0x20, 0x27, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x70, 0x69, 0x27, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x67, 0x6c, 0x79, 0x70, 0x68, 0x20, 0x6d, 0x69, 0x67, 0x68, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x75, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x32, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x2d, 0x61, 0x72, 0x79, 0x20, 0x73, 0x75, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x31, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x75, 0x6d, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x73, 0x20, 0x55, 0x2b, 0x30, 0x33, 0x41, 0x33, 0x20, 0x27, 0x67, 0x72, 0x65, 0x65, 0x6b, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x27, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x67, 0x6c, 0x79, 0x70, 0x68, 0x20, 0x6d, 0x69, 0x67, 0x68, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x32, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x31, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x6f, 0x77, 0x61, 0x73, 0x74, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x32, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x73, 0x74, 0x65, 0x72, 0x69, 0x73, 0x6b, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x31, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x61, 0x64, 0x69, 0x63, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x33, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x61, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x31, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x33, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x31, 0x44, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x33, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x31, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x6e, 0x67, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x33, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x32, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x6f, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x34, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x77, 0x65, 0x64, 0x67, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x32, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x72, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x34, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x32, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x61, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x34, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x70, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x32, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x75, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x34, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x63, 0x75, 0x70, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x32, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x34, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x6c, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x32, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x34, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x35, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x33, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x69, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x36, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x72, 0x69, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x33, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x37, 0x45, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x67, 0x6c, 0x79, 0x70, 0x68, 0x20, 0x6d, 0x69, 0x67, 0x68, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x6f, 0x6e, 0x67, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x37, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x34, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x73, 0x79, 0x6d, 0x70, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x37, 0x37, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x61, 0x73, 0x79, 0x6d, 0x70, 0x74, 0x6f, 0x74, 0x69, 0x63, 0x20, 0x74, 0x6f, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x34, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x72, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x30, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x36, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x30, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x36, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x30, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x2d, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x36, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x67, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x30, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x2d, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x36, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x75, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x33, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x38, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x75, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x33, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x38, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x73, 0x75, 0x70, 0x2c, 0x20, 0x27, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x38, 0x33, 0x27, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x2e, 0x20, 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x69, 0x74, 0x20, 0x62, 0x65, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x3f, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x6e, 0x20, 0x20, 0x2d, 0x2d, 0x3e, 0x20, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x73, 0x75, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x33, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x38, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x6e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x75, 0x62, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x33, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x38, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x75, 0x70, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x33, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x38, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x70, 0x6c, 0x75, 0x73, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x35, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x64, 0x20, 0x70, 0x6c, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x20, 0x73, 0x75, 0x6d, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x39, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x35, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x39, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x65, 0x72, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x38, 0x36, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x75, 0x70, 0x20, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x6f, 0x72, 0x74, 0x68, 0x6f, 0x67, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x3d, 0x20, 0x70, 0x65, 0x72, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x41, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x64, 0x6f, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x39, 0x30, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x32, 0x43, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x73, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x42, 0x37, 0x20, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, 0x64, 0x6f, 0x74, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x4d, 0x69, 0x73, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x63, 0x65, 0x69, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x39, 0x36, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x6c, 0x20, 0x75, 0x70, 0x73, 0x74, 0x69, 0x6c, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x33, 0x30, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x63, 0x20, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x63, 0x65, 0x69, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x39, 0x36, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x63, 0x65, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x33, 0x30, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x63, 0x20, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x39, 0x37, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x70, 0x6c, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x69, 0x6c, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x33, 0x30, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x63, 0x20, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x39, 0x37, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x33, 0x30, 0x42, 0x20, 0x49, 0x53, 0x4f, 0x61, 0x6d, 0x73, 0x63, 0x20, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x30, 0x30, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x72, 0x61, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x33, 0x32, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x73, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x33, 0x43, 0x20, 0x27, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x27, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x72, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x33, 0x39, 0x20, 0x27, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x27, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x30, 0x30, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6b, 0x65, 0x74, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x33, 0x32, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x73, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x33, 0x45, 0x20, 0x27, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x27, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x72, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x33, 0x41, 0x20, 0x27, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x27, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x47, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x20, 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x6f, 0x7a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x36, 0x37, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x6f, 0x7a, 0x65, 0x6e, 0x67, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x35, 0x43, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x4d, 0x69, 0x73, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x20, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x70, 0x61, 0x64, 0x65, 0x73, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x38, 0x32, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x20, 0x73, 0x70, 0x61, 0x64, 0x65, 0x20, 0x73, 0x75, 0x69, 0x74, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x36, 0x36, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x20, 0x68, 0x65, 0x72, 0x65, 0x20, 0x73, 0x65, 0x65, 0x6d, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x6c, 0x75, 0x62, 0x73, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x38, 0x32, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x20, 0x63, 0x6c, 0x75, 0x62, 0x20, 0x73, 0x75, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x72, 0x6f, 0x63, 0x6b, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x36, 0x36, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x68, 0x65, 0x61, 0x72, 0x74, 0x73, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x38, 0x32, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x20, 0x68, 0x65, 0x61, 0x72, 0x74, 0x20, 0x73, 0x75, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x36, 0x36, 0x35, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x64, 0x69, 0x61, 0x6d, 0x73, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x39, 0x38, 0x33, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x20, 0x64, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x69, 0x74, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x36, 0x36, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x25, 0x20, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x2e, 0x65, 0x6e, 0x74, 0x22, 0x20, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x54, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x25, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x49, 0x45, 0x53, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x31, 0x2f, 0x44, 0x54, 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x2e, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x25, 0x48, 0x54, 0x4d, 0x4c, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x3b, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x28, 0x43, 0x29, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x39, 0x38, 0x36, 0x3a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x53, 0x47, 0x4d, 0x4c, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x2e, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x52, 0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x74, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x73, 0x65, 0x74, 0x20, 0x69, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x28, 0x69, 0x2e, 0x65, 0x2e, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x29, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x79, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x38, 0x37, 0x39, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x72, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x65, 0x78, 0x2e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x31, 0x30, 0x36, 0x34, 0x36, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x20, 0x0d, 0x0a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x43, 0x30, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x4c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x20, 0x3d, 0x20, 0x41, 0x50, 0x4c, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x32, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x6d, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x38, 0x3b, 0x23, 0x33, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x32, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x38, 0x3b, 0x23, 0x36, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x2d, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x33, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x67, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x36, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x2d, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x33, 0x45, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x61, 0x70, 0x6f, 0x73, 0x09, 0x20, 0x22, 0x26, 0x23, 0x33, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x61, 0x70, 0x6f, 0x73, 0x74, 0x72, 0x6f, 0x70, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x30, 0x32, 0x37, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x4c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x2d, 0x41, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x45, 0x6c, 0x69, 0x67, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x33, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x4f, 0x45, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x31, 0x35, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x32, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6f, 0x65, 0x6c, 0x69, 0x67, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x33, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x31, 0x35, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x32, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x69, 0x73, 0x6e, 0x6f, 0x6d, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x53, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x35, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x53, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x31, 0x36, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x32, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x35, 0x33, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x31, 0x36, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x32, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x59, 0x75, 0x6d, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x33, 0x37, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x59, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x64, 0x69, 0x61, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x31, 0x37, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x6c, 0x61, 0x74, 0x32, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x53, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x63, 0x69, 0x72, 0x63, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x37, 0x31, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x20, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x30, 0x32, 0x43, 0x36, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x37, 0x33, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x30, 0x32, 0x44, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x64, 0x69, 0x61, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x50, 0x75, 0x6e, 0x63, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x6e, 0x73, 0x70, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x31, 0x39, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x30, 0x32, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x6d, 0x73, 0x70, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x31, 0x39, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6d, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x30, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x73, 0x70, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x30, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x30, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x7a, 0x77, 0x6e, 0x6a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x30, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x72, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x30, 0x43, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x52, 0x46, 0x43, 0x20, 0x32, 0x30, 0x37, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x7a, 0x77, 0x6a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x30, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x30, 0x44, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x52, 0x46, 0x43, 0x20, 0x32, 0x30, 0x37, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x72, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x30, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2d, 0x74, 0x6f, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x30, 0x45, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x52, 0x46, 0x43, 0x20, 0x32, 0x30, 0x37, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x6c, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x30, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x74, 0x6f, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x30, 0x46, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x52, 0x46, 0x43, 0x20, 0x32, 0x30, 0x37, 0x30, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6e, 0x64, 0x61, 0x73, 0x68, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x31, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x20, 0x64, 0x61, 0x73, 0x68, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x31, 0x33, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6d, 0x64, 0x61, 0x73, 0x68, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x31, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6d, 0x20, 0x64, 0x61, 0x73, 0x68, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x31, 0x34, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x73, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x31, 0x36, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x31, 0x38, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x73, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x31, 0x37, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x31, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x73, 0x62, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x31, 0x38, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x6c, 0x6f, 0x77, 0x2d, 0x39, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x31, 0x41, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x64, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x32, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x31, 0x43, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x64, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x32, 0x31, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x31, 0x44, 0x20, 0x49, 0x53, 0x4f, 0x6e, 0x75, 0x6d, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x62, 0x64, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x32, 0x32, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x6c, 0x6f, 0x77, 0x2d, 0x39, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x31, 0x45, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x64, 0x61, 0x67, 0x67, 0x65, 0x72, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x32, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x32, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x44, 0x61, 0x67, 0x67, 0x65, 0x72, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x32, 0x35, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x64, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x32, 0x31, 0x20, 0x49, 0x53, 0x4f, 0x70, 0x75, 0x62, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x6c, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x34, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x70, 0x65, 0x72, 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x33, 0x30, 0x20, 0x49, 0x53, 0x4f, 0x74, 0x65, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x6c, 0x73, 0x61, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x34, 0x39, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x33, 0x39, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x73, 0x61, 0x71, 0x75, 0x6f, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x79, 0x65, 0x74, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x72, 0x73, 0x61, 0x71, 0x75, 0x6f, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x32, 0x35, 0x30, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x33, 0x41, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x72, 0x73, 0x61, 0x71, 0x75, 0x6f, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x79, 0x65, 0x74, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x20, 0x65, 0x75, 0x72, 0x6f, 0x20, 0x20, 0x20, 0x22, 0x26, 0x23, 0x38, 0x33, 0x36, 0x34, 0x3b, 0x22, 0x3e, 0x20, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x20, 0x65, 0x75, 0x72, 0x6f, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x55, 0x2b, 0x32, 0x30, 0x41, 0x43, 0x20, 0x4e, 0x45, 0x57, 0x20, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a }; Sigil-0.9.9/src/MiscEditors/000077500000000000000000000000001321676412500156235ustar00rootroot00000000000000Sigil-0.9.9/src/MiscEditors/ClipEditorModel.cpp000066400000000000000000000506131321676412500213530ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include "MiscEditors/ClipEditorModel.h" #include "Misc/Utility.h" #include "sigil_constants.h" static const QString SETTINGS_FILE = "sigil_clips.ini"; static const QString SETTINGS_GROUP = "clip_entries"; static const QString ENTRY_NAME = "Name"; static const QString ENTRY_TEXT = "Text"; const int COLUMNS = 2; static const int IS_GROUP_ROLE = Qt::UserRole + 1; static const int FULLNAME_ROLE = Qt::UserRole + 2; static const QString CLIP_EXAMPLES_FILE = "clip_entries.ini"; ClipEditorModel *ClipEditorModel::m_instance = 0; ClipEditorModel *ClipEditorModel::instance() { if (m_instance == 0) { m_instance = new ClipEditorModel(); } return m_instance; } ClipEditorModel::ClipEditorModel(QObject *parent) : QStandardItemModel(parent), m_FSWatcher(new QFileSystemWatcher()), m_IsDataModified(false) { m_SettingsPath = Utility::DefinePrefsDir() + "/" + SETTINGS_FILE; QStringList header; header.append(tr("Name")); header.append(tr("Text")); setHorizontalHeaderLabels(header); LoadInitialData(); // Save it to make sure we have a file in case it was loaded from examples SaveData(); if (!m_FSWatcher->files().contains(m_SettingsPath)) { m_FSWatcher->addPath(m_SettingsPath); } connect(m_FSWatcher, SIGNAL(fileChanged(const QString &)), this, SLOT(SettingsFileChanged(const QString &)), Qt::DirectConnection); connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); connect(this, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(RowsRemovedHandler(const QModelIndex &, int, int))); } ClipEditorModel::~ClipEditorModel() { delete m_FSWatcher; m_FSWatcher = 0; if (m_instance) { delete m_instance; m_instance = 0; } } void ClipEditorModel::SetDataModified(bool modified) { m_IsDataModified = modified; ClipsUpdated(); } bool ClipEditorModel::IsDataModified() { return m_IsDataModified; } Qt::DropActions ClipEditorModel::supportedDropActions() const { return Qt::MoveAction; } bool ClipEditorModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { QModelIndex new_parent(parent); if (parent.column() > 0) { // User is trying to drop onto a child column - treat it as though they are dropping in the initial column. new_parent = index(parent.row(), 0, parent.parent()); } if (column > 0) { // Same as above but for when user drops into the between row selector in a child column. column = 0; } // If dropped on an non-group entry convert to parent item group/row if (new_parent.isValid() && !itemFromIndex(new_parent)->data(IS_GROUP_ROLE).toBool()) { row = new_parent.row() + 1; new_parent = new_parent.parent(); } if (!QStandardItemModel::dropMimeData(data, action, row, column, new_parent)) { return false; } // As our drag/drop completed successfully, recalculate the fullname for all the items in the model UpdateFullName(invisibleRootItem()); // If we dropped onto a parent group, make sure it is expanded. if (new_parent.isValid()) { emit ItemDropped(new_parent); } SetDataModified(true); return true; } void ClipEditorModel::RowsRemovedHandler(const QModelIndex &parent, int start, int end) { SetDataModified(true); } void ClipEditorModel::ItemChangedHandler(QStandardItem *item) { Q_ASSERT(item); if (item->column() != 0) { SetDataModified(true); return; } // Restore name if nothing entered or contains a group indicator if (item->text().isEmpty() || item->text().contains("/")) { QString name = item->data(FULLNAME_ROLE).toString(); name.replace(QRegularExpression("/$"), ""); if (name.contains("/")) { name = name.split("/").last(); } // Disconnect change signal while changing the items disconnect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); item->setText(name); connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); return; } Rename(item); } void ClipEditorModel::Rename(QStandardItem *item, const QString &name) { // Update the name and all its children // Disconnect change signal while changing the items disconnect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); // If item name not already changed, set it if (name != "") { item->setText(name); } UpdateFullName(item); connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); SetDataModified(true); } void ClipEditorModel::UpdateFullName(QStandardItem *item) { QStandardItem *parent_item = item->parent(); if (!parent_item) { parent_item = invisibleRootItem(); } QString fullname = parent_item->data(FULLNAME_ROLE).toString() + item->text(); QString tooltip; tooltip = fullname; if (item->data(IS_GROUP_ROLE).toBool()) { fullname.append("/"); } else { QStandardItem *text_item = parent_item->child(item->row(), 1); if (text_item) { tooltip += "\n\n" % text_item->text(); tooltip.replace('&', "&").replace('<', "<").replace('>', ">"); } } item->setToolTip(tooltip); item->setData(fullname, FULLNAME_ROLE); if (item->hasChildren()) { for (int row = 0; row < item->rowCount(); row++) { UpdateFullName(item->child(row, 0)); } } } void ClipEditorModel::SettingsFileChanged(const QString &path) const { // The file may have been deleted prior to writing a new version - give it a chance to write. QTime wake_time = QTime::currentTime().addMSecs(1000); while (!QFile::exists(path) && QTime::currentTime() < wake_time) { QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } // The signal is also received after resource files are removed / renamed, // but it can be safely ignored because QFileSystemWatcher automatically stops watching them. if (QFile::exists(path)) { // Some editors write the updated contents to a temporary file // and then atomically move it over the watched file. // In this case QFileSystemWatcher loses track of the file, so we have to add it again. if (!m_FSWatcher->files().contains(path)) { m_FSWatcher->addPath(path); } instance()->LoadInitialData(); emit SettingsFileUpdated(); } } bool ClipEditorModel::ItemIsGroup(QStandardItem *item) { return item->data(IS_GROUP_ROLE).toBool(); } QString ClipEditorModel::GetFullName(QStandardItem *item) { return item->data(FULLNAME_ROLE).toString(); } ClipEditorModel::clipEntry *ClipEditorModel::GetEntryFromNumber(int clip_number) { return GetEntry(GetItemFromNumber(clip_number)); } QStandardItem *ClipEditorModel::GetItemFromNumber(int clip_number) { QStandardItem *item = NULL; clip_number--; if (clip_number < 0) { return item; } // Get the entry for the number, skipping over group entries so that // the entries can be at top or bottom, or anywhere, in the list. int row = 0; int rows = invisibleRootItem()->rowCount(); for (int i = 0; i <= clip_number; i++) { while (row < rows) { item = invisibleRootItem()->child(row, 0); row++; if (!item || !item->data(IS_GROUP_ROLE).toBool()) { break; } } if (row >= rows) { break; } if (i == clip_number) { return item; } } return NULL; } ClipEditorModel::clipEntry *ClipEditorModel::GetEntryFromName(const QString &name, QStandardItem *item) { return GetEntry(GetItemFromName(name, item)); } QStandardItem *ClipEditorModel::GetItemFromName(QString name, QStandardItem *item) { QStandardItem *found_item = NULL; if (!item) { item = invisibleRootItem(); } if (item != invisibleRootItem() && item->data(FULLNAME_ROLE).toString() == name) { return item; } for (int row = 0; row < item->rowCount(); row++) { found_item = GetItemFromName(name, item->child(row, 0)); // Return with first found entry if (found_item) { return found_item; } } return found_item; } void ClipEditorModel::LoadInitialData() { removeRows(0, rowCount()); LoadData(); if (invisibleRootItem()->rowCount() == 0) { AddExampleEntries(); } SetDataModified(false); } void ClipEditorModel::LoadData(const QString &filename, QStandardItem *item) { SettingsStore *settings; if (filename.isEmpty()) { settings = new SettingsStore(m_SettingsPath); } else { settings = new SettingsStore(filename); } int size = settings->beginReadArray(SETTINGS_GROUP); // Add one entry at a time to the list for (int i = 0; i < size; ++i) { settings->setArrayIndex(i); ClipEditorModel::clipEntry *entry = new ClipEditorModel::clipEntry(); QString fullname = settings->value(ENTRY_NAME).toString(); fullname.replace(QRegularExpression("\\s*/+\\s*"), "/"); fullname.replace(QRegularExpression("^/"), ""); entry->is_group = fullname.endsWith("/"); // Name is set to fullname only while looping through parent groups when adding entry->name = fullname; entry->fullname = fullname; entry->text = settings->value(ENTRY_TEXT).toString(); AddFullNameEntry(entry, item); } settings->endArray(); } void ClipEditorModel::AddFullNameEntry(ClipEditorModel::clipEntry *entry, QStandardItem *parent_item, int row) { if (!parent_item) { parent_item = invisibleRootItem(); } if (parent_item != invisibleRootItem() && !parent_item->data(IS_GROUP_ROLE).toBool()) { row = parent_item->row() + 1; parent_item = parent_item->parent(); } if (row < 0) { row = parent_item->rowCount(); } QString entry_name = entry->name; if (entry->name.contains("/")) { QStringList group_names = entry->name.split("/", QString::SkipEmptyParts); entry_name = group_names.last(); if (!entry->is_group) { group_names.removeLast(); } foreach(QString group_name, group_names) { bool found = false; for (int r = 0; r < parent_item->rowCount(); r++) { if (parent_item->child(r, 0)->data(IS_GROUP_ROLE).toBool() && parent_item->child(r, 0)->text() == group_name) { parent_item = parent_item->child(r, 0); found = true; break; } } if (!found) { ClipEditorModel::clipEntry *new_entry = new ClipEditorModel::clipEntry(); new_entry->is_group = true; new_entry->name = group_name; parent_item = AddEntryToModel(new_entry, new_entry->is_group, parent_item, parent_item->rowCount()); } } row = parent_item->rowCount(); } if (!entry->is_group) { entry->name = entry_name; AddEntryToModel(entry, entry->is_group, parent_item, row); } } QStandardItem *ClipEditorModel::AddEntryToModel(ClipEditorModel::clipEntry *entry, bool is_group, QStandardItem *parent_item, int row) { // parent_item must be a group item if (!parent_item) { parent_item = invisibleRootItem(); } // Create an empty entry if none supplied if (!entry) { entry = new ClipEditorModel::clipEntry(); entry->is_group = is_group; if (!is_group) { entry->name = "Text"; entry->text = ""; } else { entry->name = "Group"; } } entry->fullname = entry->name; if (parent_item != invisibleRootItem()) { // Set the fullname based on the parent entry entry->fullname = parent_item->data(FULLNAME_ROLE).toString() + entry->name; } if (entry->is_group) { entry->fullname += "/"; } QList rowItems; QStandardItem *group_item = parent_item; if (entry->is_group) { group_item = new QStandardItem(entry->name); QFont font; font.setWeight(QFont::Bold); group_item->setFont(font); rowItems << group_item; for (int col = 1; col < COLUMNS ; col++) { QStandardItem *item = new QStandardItem(""); item->setEditable(false); rowItems << item; } } else { rowItems << new QStandardItem(entry->name); rowItems << new QStandardItem(entry->text); } rowItems[0]->setData(entry->is_group, IS_GROUP_ROLE); rowItems[0]->setData(entry->fullname, FULLNAME_ROLE); QString tooltip; if (entry->is_group) { tooltip = entry->fullname; } else { tooltip = entry->fullname % "\n\n" % entry->text; } rowItems[0]->setToolTip(tooltip); // Add the new item to the model at the specified row QStandardItem *new_item; if (row < 0 || row >= parent_item->rowCount()) { parent_item->appendRow(rowItems); new_item = parent_item->child(parent_item->rowCount() - 1, 0); } else { parent_item->insertRow(row, rowItems); new_item = parent_item->child(row, 0); } SetDataModified(true); return new_item; } void ClipEditorModel::AddExampleEntries() { QString examples_dir; #ifdef Q_OS_MAC examples_dir = QCoreApplication::applicationDirPath() + "/../examples/"; #elif defined(Q_OS_WIN32) examples_dir = QCoreApplication::applicationDirPath() + "/examples/"; #else // all flavours of linux / unix // user supplied environment variable to 'share/sigil' directory will override everything if (!sigil_extra_root.isEmpty()) { examples_dir = sigil_extra_root + "/examples/"; } else { examples_dir = sigil_share_root + "/examples/"; } #endif LoadData(examples_dir % CLIP_EXAMPLES_FILE); } QList ClipEditorModel::GetNonGroupItems(QList items) { QList all_items; foreach(QStandardItem * item, items) { all_items.append(GetNonGroupItems(item)); } return all_items; } QList ClipEditorModel::GetNonGroupItems(QStandardItem *item) { QList items; if (!item->data(IS_GROUP_ROLE).toBool()) { items.append(item); } for (int row = 0; row < item->rowCount(); row++) { items.append(GetNonGroupItems(item->child(row, 0))); } return items; } QList ClipEditorModel::GetNonParentItems(QList items) { QList all_items; foreach(QStandardItem * item, items) { all_items.append(GetNonParentItems(item)); } return all_items; } QList ClipEditorModel::GetNonParentItems(QStandardItem *item) { QList items; if (item->rowCount() == 0) { if (item != invisibleRootItem()) { items.append(item); } } for (int row = 0; row < item->rowCount(); row++) { items.append(GetNonParentItems(item->child(row, 0))); } return items; } QList ClipEditorModel::GetEntries(QList items) { QList entries; foreach(QStandardItem * item, items) { entries.append(GetEntry(item)); } return entries; } ClipEditorModel::clipEntry *ClipEditorModel::GetEntry(QStandardItem *item) { QStandardItem *parent_item; if (item == NULL) { return NULL; } if (item->parent()) { parent_item = item->parent(); } else { parent_item = invisibleRootItem(); } ClipEditorModel::clipEntry *entry = new ClipEditorModel::clipEntry(); entry->is_group = parent_item->child(item->row(), 0)->data(IS_GROUP_ROLE).toBool(); entry->fullname = parent_item->child(item->row(), 0)->data(FULLNAME_ROLE).toString(); entry->name = parent_item->child(item->row(), 0)->text(); if (!entry->is_group) { QStandardItem *text_item = parent_item->child(item->row(), 1); if (text_item) { entry->text = text_item->text(); } else { entry->text = ""; } } return entry; } ClipEditorModel::clipEntry *ClipEditorModel::GetEntry(const QModelIndex &index) { QStandardItem *item = itemFromIndex(index); if (!item) { return NULL; } return GetEntry(item); } QStandardItem *ClipEditorModel::GetItemFromId(quintptr id, int row, QStandardItem *item) const { QStandardItem *found_item = NULL; if (!item) { item = invisibleRootItem(); } if (item->index().internalId() == id) { if (item->parent()) { item = item->parent(); } else { item = invisibleRootItem(); } return item->child(row, 0); } for (int r = 0; r < item->rowCount(); r++) { found_item = GetItemFromId((quintptr)id, row, item->child(r, 0)); // Return with first found entry if (found_item) { return found_item; } } return found_item; } QString ClipEditorModel::SaveData(QList entries, const QString &filename) { QString message = ""; // Save everything if no entries selected if (entries.isEmpty()) { QList items = GetNonParentItems(invisibleRootItem()); if (!items.isEmpty()) { entries = GetEntries(items); } } // Stop watching the file while we save it if (m_FSWatcher->files().contains(m_SettingsPath)) { m_FSWatcher->removePath(m_SettingsPath); } // Open the default file for save, or specific file for export SettingsStore *settings; if (filename.isEmpty()) { settings = new SettingsStore(m_SettingsPath); } else { settings = new SettingsStore(filename); } settings->sync(); if (!settings->isWritable()) { message = tr("Unable to create file %1").arg(filename); // Watch the file again m_FSWatcher->addPath(m_SettingsPath); return message; } // Remove the old values to account for deletions settings->remove(SETTINGS_GROUP); settings->beginWriteArray(SETTINGS_GROUP); int i = 0; foreach(ClipEditorModel::clipEntry * entry, entries) { settings->setArrayIndex(i++); settings->setValue(ENTRY_NAME, entry->fullname); if (!entry->is_group) { settings->setValue(ENTRY_TEXT, entry->text); } } settings->endArray(); // Make sure file is created/updated so it can be checked settings->sync(); // Watch the file again m_FSWatcher->addPath(m_SettingsPath); SetDataModified(false); return message; } QVariant ClipEditorModel::data(const QModelIndex &index, int role) const { if (index.isValid() && index.column() == 1 && role == Qt::SizeHintRole) { // Make all rows the same height using the name column to ensure text limited to a single line return data(this->index(0, 0), role).toSize(); } return QStandardItemModel::data(index, role); } Sigil-0.9.9/src/MiscEditors/ClipEditorModel.h000066400000000000000000000075121321676412500210200ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef CLIPEDITORMODEL_H #define CLIPEDITORMODEL_H #include #include #include #include "Misc/SettingsStore.h" class ClipEditorModel : public QStandardItemModel { Q_OBJECT public: ClipEditorModel(QObject *parent = 0); ~ClipEditorModel(); static ClipEditorModel *instance(); struct clipEntry { bool is_group; QString fullname; QString name; QString text; }; bool IsDataModified(); bool ItemIsGroup(QStandardItem *item); QString GetFullName(QStandardItem *item); void LoadInitialData(); void LoadData(const QString &filename = QString(), QStandardItem *parent_item = NULL); void AddFullNameEntry(ClipEditorModel::clipEntry *entry = NULL, QStandardItem *parent_item = NULL, int row = -1); QStandardItem *AddEntryToModel(ClipEditorModel::clipEntry *entry, bool is_group = false, QStandardItem *parent_item = NULL, int row = -1); QString SaveData(QList entries = QList(), const QString &filename = QString()); QList GetEntries(QList items); ClipEditorModel::clipEntry *GetEntry(QStandardItem *item); ClipEditorModel::clipEntry *GetEntry(const QModelIndex &index); ClipEditorModel::clipEntry *GetEntryFromName(const QString &name, QStandardItem *parent_item = NULL); ClipEditorModel::clipEntry *GetEntryFromNumber(int clip_number); QStandardItem *GetItemFromName(QString name, QStandardItem *item = NULL); QList GetNonGroupItems(QList items); QList GetNonGroupItems(QStandardItem *item); QList GetNonParentItems(QList items); QList GetNonParentItems(QStandardItem *item); void Rename(QStandardItem *item, const QString &name = ""); void UpdateFullName(QStandardItem *item); QVariant data(const QModelIndex &index, int role) const; signals: void SettingsFileUpdated() const; void ItemDropped(const QModelIndex &) const; void ClipsUpdated(); private slots: void RowsRemovedHandler(const QModelIndex &parent, int start, int end); void ItemChangedHandler(QStandardItem *item); void SettingsFileChanged(const QString &path) const; private: void SetDataModified(bool modified); bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); Qt::DropActions supportedDropActions() const; QStandardItem *GetItemFromId(quintptr id, int row, QStandardItem *item = NULL) const; QStandardItem *GetItemFromNumber(int clip_number); void AddExampleEntries(); static ClipEditorModel *m_instance; QString m_SettingsPath; QFileSystemWatcher *m_FSWatcher; bool m_IsDataModified; }; #endif // CLIPEDITORMODEL_H Sigil-0.9.9/src/MiscEditors/ClipEditorTreeView.cpp000066400000000000000000000064131321676412500220440ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "MiscEditors/ClipEditorTreeView.h" ClipEditorTreeView::ClipEditorTreeView(QWidget *parent) : QTreeView(parent) { setDragEnabled(true); setAcceptDrops(false); setDropIndicatorShown(true); setDragDropMode(QAbstractItemView::InternalMove); setAutoScroll(true); setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionBehavior(QAbstractItemView::SelectRows); setSortingEnabled(false); setTabKeyNavigation(true); setAutoExpandDelay(200); } ClipEditorTreeView::~ClipEditorTreeView() { } QModelIndex ClipEditorTreeView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) { if (cursorAction == QAbstractItemView::MoveNext) { QModelIndex index = currentIndex(); // Only the first column of a group is editable if (!model()->data(index.sibling(index.row(), 0), Qt::UserRole + 1).toBool()) { // Move to next column in row if there is one if (index.column() < (header()->count() - 1)) { return model()->index(index.row(), index.column() + 1, index.parent()); } } // Reset to first column in row so that default moveCursor moves it down one if (indexBelow(index).isValid()) { setCurrentIndex(model()->index(index.row(), 0, index.parent())); } } else if (cursorAction == QAbstractItemView::MovePrevious) { QModelIndex index = currentIndex(); // Only the first column of a group is editable if (!model()->data(index.sibling(index.row(), 0), Qt::UserRole + 1).toBool()) { // Move to previous column in row if there is one if (index.column() > 0) { return model()->index(index.row(), index.column() - 1, index.parent()); } } if (indexAbove(index).isValid()) { // If row above is a group always reset to first column otherwise last column if (model()->data(indexAbove(index).sibling(indexAbove(index).row(), 0), Qt::UserRole + 1).toBool()) { setCurrentIndex(model()->index(index.row(), 0, index.parent())); } else { setCurrentIndex(model()->index(index.row(), header()->count() - 1, index.parent())); } } } return QTreeView::moveCursor(cursorAction, modifiers); } Sigil-0.9.9/src/MiscEditors/ClipEditorTreeView.h000066400000000000000000000024571321676412500215150ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef CLIPEDITORTREEVIEW_H #define CLIPEDITORTREEVIEW_H #include class ClipEditorTreeView : public QTreeView { public: ClipEditorTreeView(QWidget *parent = 0); ~ClipEditorTreeView(); protected: QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers); }; #endif // CLIPEDITORTREEVIEW_H Sigil-0.9.9/src/MiscEditors/IndexEditorModel.cpp000066400000000000000000000260621321676412500215340ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include "MiscEditors/IndexEditorModel.h" #include "Misc/Utility.h" static const QString SETTINGS_FILE = "sigil_index.ini"; static const QString SETTINGS_GROUP = "index_entries"; static const QString ENTRY_PATTERN = "Text to Include"; static const QString ENTRY_INDEX_ENTRY = "Index Entries"; const int COLUMNS = 2; static const int IS_GROUP_ROLE = Qt::UserRole + 1; static const int FULLNAME_ROLE = Qt::UserRole + 2; IndexEditorModel *IndexEditorModel::m_instance = 0; IndexEditorModel *IndexEditorModel::instance() { if (m_instance == 0) { m_instance = new IndexEditorModel(); } return m_instance; } IndexEditorModel::IndexEditorModel(QObject *parent) : QStandardItemModel(parent), m_FSWatcher(new QFileSystemWatcher()), m_IsDataModified(false) { m_SettingsPath = Utility::DefinePrefsDir() + "/" + SETTINGS_FILE; QStringList header; header.append(tr("Text to Include")); header.append(tr("Index Entries")); setHorizontalHeaderLabels(header); LoadInitialData(); // Save it to make sure we have a file in case it was loaded from examples SaveData(); if (!m_FSWatcher->files().contains(m_SettingsPath)) { m_FSWatcher->addPath(m_SettingsPath); } connect(m_FSWatcher, SIGNAL(fileChanged(const QString &)), this, SLOT(SettingsFileChanged(const QString &)), Qt::DirectConnection); connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); connect(this, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(RowsRemovedHandler(const QModelIndex &, int, int))); } IndexEditorModel::~IndexEditorModel() { delete m_FSWatcher; m_FSWatcher = 0; if (m_instance) { delete m_instance; m_instance = 0; } } void IndexEditorModel::SetDataModified(bool modified) { m_IsDataModified = modified; } bool IndexEditorModel::IsDataModified() { return m_IsDataModified; } void IndexEditorModel::RowsRemovedHandler(const QModelIndex &parent, int start, int end) { SetDataModified(true); } void IndexEditorModel::ItemChangedHandler(QStandardItem *item) { Q_ASSERT(item); SetDataModified(true); if (item->column() != 0) { return; } // Split the entry into multiple entries if there is a return in it if (item->text().contains("\n")) { SplitEntry(item); } } void IndexEditorModel::SplitEntry(QStandardItem *item) { // Disconnect change signal while changing the items disconnect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); IndexEditorModel::indexEntry *entry = GetEntry(item); QStringList names = entry->pattern.split("\n"); QString first_name = names.first(); names.removeFirst(); // Update the first entry item->setText(first_name); foreach(QString name, names) { entry->pattern = name; QStandardItem *new_item = AddFullNameEntry(entry, item); item = new_item; } connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); } void IndexEditorModel::ClearData() { removeRows(0, rowCount()); } void IndexEditorModel::SettingsFileChanged(const QString &path) const { // The file may have been deleted prior to writing a new version - give it a chance to write. QTime wake_time = QTime::currentTime().addMSecs(1000); while (!QFile::exists(path) && QTime::currentTime() < wake_time) { QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } // The signal is also received after resource files are removed / renamed, // but it can be safely ignored because QFileSystemWatcher automatically stops watching them. if (QFile::exists(path)) { // Some editors write the updated contents to a temporary file // and then atomically move it over the watched file. // In this case QFileSystemWatcher loses track of the file, so we have to add it again. if (!m_FSWatcher->files().contains(path)) { m_FSWatcher->addPath(path); } instance()->LoadInitialData(); emit SettingsFileUpdated(); } } void IndexEditorModel::LoadInitialData(const QString &filename) { ClearData(); LoadData(filename); SetDataModified(false); } void IndexEditorModel::LoadData(const QString &filename, QStandardItem *item) { // Read text files with one line per entry if (filename.endsWith(".txt")) { QString index_data = Utility::ReadUnicodeTextFile(filename); foreach(QString line, index_data.split("\n")) { IndexEditorModel::indexEntry *entry = new IndexEditorModel::indexEntry(); // Split on tab if present if (line.contains("\t")) { int tab_position = line.indexOf("\t"); entry->pattern = line.left(tab_position); entry->index_entry = line.right(line.length() - tab_position - 1); } else { entry->pattern = line; } AddFullNameEntry(entry, item); } return; } // Read standard ini files SettingsStore *settings; if (filename.isEmpty()) { settings = new SettingsStore(m_SettingsPath); } else { settings = new SettingsStore(filename); } int size = settings->beginReadArray(SETTINGS_GROUP); // Add one entry at a time to the list for (int i = 0; i < size; ++i) { settings->setArrayIndex(i); IndexEditorModel::indexEntry *entry = new IndexEditorModel::indexEntry(); entry->pattern = settings->value(ENTRY_PATTERN).toString(); entry->index_entry = settings->value(ENTRY_INDEX_ENTRY).toString(); if (!entry->pattern.isEmpty() || !entry->index_entry.isEmpty()) { AddFullNameEntry(entry, item); } } settings->endArray(); } QStandardItem *IndexEditorModel::AddFullNameEntry(IndexEditorModel::indexEntry *entry, QStandardItem *parent_item, int row) { if (!parent_item) { parent_item = invisibleRootItem(); } if (parent_item != invisibleRootItem()) { row = parent_item->row() + 1; parent_item = parent_item->parent(); } if (row < 0) { row = parent_item->rowCount(); } return AddEntryToModel(entry, parent_item, row); } QStandardItem *IndexEditorModel::AddEntryToModel(IndexEditorModel::indexEntry *entry, QStandardItem *parent_item, int row) { // parent_item must be a group item if (!parent_item) { parent_item = invisibleRootItem(); } // Create an empty entry if none supplied if (!entry) { entry = new IndexEditorModel::indexEntry(); entry->pattern = ""; entry->index_entry = ""; } QList rowItems; rowItems << new QStandardItem(entry->pattern); rowItems << new QStandardItem(entry->index_entry); // Add the new item to the model at the specified row QStandardItem *new_item; if (row < 0 || row >= parent_item->rowCount()) { parent_item->appendRow(rowItems); new_item = parent_item->child(parent_item->rowCount() - 1, 0); } else { parent_item->insertRow(row, rowItems); new_item = parent_item->child(row, 0); } SetDataModified(true); return new_item; } QList IndexEditorModel::GetItems() { QList items; for (int row = 0; row < invisibleRootItem()->rowCount(); row++) { items.append(invisibleRootItem()->child(row, 0)); } return items; } QList IndexEditorModel::GetEntries(QList items) { if (!items.count()) { items = GetItems(); } QList entries; foreach(QStandardItem * item, items) { entries.append(GetEntry(item)); } return entries; } IndexEditorModel::indexEntry *IndexEditorModel::GetEntry(QStandardItem *item) { QStandardItem *parent_item; if (item->parent()) { parent_item = item->parent(); } else { parent_item = invisibleRootItem(); } IndexEditorModel::indexEntry *entry = new IndexEditorModel::indexEntry(); entry->pattern = parent_item->child(item->row(), 0)->text(); entry->index_entry = parent_item->child(item->row(), 1)->text(); return entry; } QString IndexEditorModel::SaveData(QList entries, const QString &filename) { QString message = ""; // Save everything if no entries selected if (entries.isEmpty()) { QList items = GetItems(); if (!items.isEmpty()) { entries = GetEntries(items); } } // Stop watching the file while we save it if (m_FSWatcher->files().contains(m_SettingsPath)) { m_FSWatcher->removePath(m_SettingsPath); } // Open the default file for save, or specific file for export SettingsStore *settings; if (filename.isEmpty()) { settings = new SettingsStore(m_SettingsPath); } else { settings = new SettingsStore(filename); } settings->sync(); if (!settings->isWritable()) { message = tr("Unable to create file %1").arg(filename); // Watch the file again m_FSWatcher->addPath(m_SettingsPath); return message; } // Remove the old values to account for deletions settings->remove(SETTINGS_GROUP); settings->beginWriteArray(SETTINGS_GROUP); int i = 0; foreach(IndexEditorModel::indexEntry * entry, entries) { if (entry->pattern.isEmpty() && entry->index_entry.isEmpty()) { continue; } foreach(QString pattern, entry->pattern.split("\n")) { settings->setArrayIndex(i++); settings->setValue(ENTRY_PATTERN, pattern); settings->setValue(ENTRY_INDEX_ENTRY, entry->index_entry); } } settings->endArray(); // Make sure file is created/updated so it can be checked settings->sync(); // Watch the file again m_FSWatcher->addPath(m_SettingsPath); SetDataModified(false); return message; } Sigil-0.9.9/src/MiscEditors/IndexEditorModel.h000066400000000000000000000052431321676412500211770ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef INDEXEDITORMODEL_H #define INDEXEDITORMODEL_H #include #include #include #include "Misc/SettingsStore.h" class IndexEditorModel : public QStandardItemModel { Q_OBJECT public: IndexEditorModel(QObject *parent = 0); ~IndexEditorModel(); static IndexEditorModel *instance(); struct indexEntry { QString pattern; QString index_entry; }; bool IsDataModified(); void ClearData(); void LoadInitialData(const QString &filename = QString()); void LoadData(const QString &filename = QString(), QStandardItem *parent_item = NULL); QStandardItem *AddFullNameEntry(IndexEditorModel::indexEntry *entry = NULL, QStandardItem *parent_item = NULL, int row = -1); QStandardItem *AddEntryToModel(IndexEditorModel::indexEntry *entry, QStandardItem *parent_item = NULL, int row = -1); QString SaveData(QList entries = QList(), const QString &filename = QString()); QList GetEntries(QList items = QList()); IndexEditorModel::indexEntry *GetEntry(QStandardItem *item); QList GetItems(); signals: void SettingsFileUpdated() const; private slots: void RowsRemovedHandler(const QModelIndex &parent, int start, int end); void ItemChangedHandler(QStandardItem *item); void SettingsFileChanged(const QString &path) const; private: void SetDataModified(bool modified); void SplitEntry(QStandardItem *item); static IndexEditorModel *m_instance; QString m_SettingsPath; QFileSystemWatcher *m_FSWatcher; bool m_IsDataModified; }; #endif // INDEXEDITORMODEL_H Sigil-0.9.9/src/MiscEditors/IndexEditorTreeView.cpp000066400000000000000000000044711321676412500222260ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "MiscEditors/IndexEditorTreeView.h" IndexEditorTreeView::IndexEditorTreeView(QWidget *parent) : QTreeView(parent) { setAcceptDrops(false); setDropIndicatorShown(false); setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionBehavior(QAbstractItemView::SelectRows); setSortingEnabled(true); setTabKeyNavigation(true); } IndexEditorTreeView::~IndexEditorTreeView() { } QModelIndex IndexEditorTreeView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) { if (cursorAction == QAbstractItemView::MoveNext) { QModelIndex index = currentIndex(); // Only the first 2 columns are editable if (index.column() < header()->count() - 1) { return model()->index(index.row(), index.column() + 1, index.parent()); } if (indexBelow(index).isValid()) { setCurrentIndex(model()->index(index.row(), 0, index.parent())); } } else if (cursorAction == QAbstractItemView::MovePrevious) { QModelIndex index = currentIndex(); if (index.column() > 0) { return model()->index(index.row(), index.column() - 1, index.parent()); } if (indexAbove(index).isValid()) { setCurrentIndex(model()->index(index.row(), header()->count() - 1, index.parent())); } } return QTreeView::moveCursor(cursorAction, modifiers); } Sigil-0.9.9/src/MiscEditors/IndexEditorTreeView.h000066400000000000000000000025331321676412500216700ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef INDEXEDITORTREEVIEW_H #define INDEXEDITORTREEVIEW_H #include #include #include class IndexEditorTreeView : public QTreeView { // Q_OBJECT public: IndexEditorTreeView(QWidget *parent = 0); ~IndexEditorTreeView(); protected: QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers); }; #endif // INDEXEDITORTREEVIEW_H Sigil-0.9.9/src/MiscEditors/IndexEntries.cpp000066400000000000000000000064601321676412500207360ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "MiscEditors/IndexEntries.h" #include "MiscEditors/IndexEditorModel.h" IndexEntries *IndexEntries::m_instance = 0; IndexEntries *IndexEntries::instance() { if (m_instance == 0) { m_instance = new IndexEntries(); } return m_instance; } IndexEntries::IndexEntries() : m_BookIndexRootItem(new QStandardItem()) { } IndexEntries::~IndexEntries() { if (m_instance) { delete m_instance; m_instance = 0; } } QStandardItem *IndexEntries::GetRootItem() { return m_BookIndexRootItem; } void IndexEntries::AddOneEntry(QString text, QString filename, QString index_id_value) { QStandardItem *parent_item = m_BookIndexRootItem; QStringList names = text.split("/", QString::SkipEmptyParts); names.append(filename % "#" % index_id_value); // Add names in heirachary foreach(QString name, names) { bool found = false; int insert_at_row = -1; for (int r = 0; r < parent_item->rowCount(); r++) { if (name == parent_item->child(r, 0)->text()) { parent_item = parent_item->child(r, 0); found = true; break; } // If not already in tree, add the entry in sorted order // Only sort categories - leave filename#id (last child) in order found else if (parent_item->child(0, 0)->rowCount() && (name.toLower().localeAwareCompare(parent_item->child(r, 0)->text().toLower()) < 0)) { insert_at_row = r ; break; } } if (!found) { parent_item = AddEntryToModel(name, parent_item, insert_at_row); } } } QStandardItem *IndexEntries::AddEntryToModel(QString entry, QStandardItem *parent_item, int row) { if (!parent_item) { parent_item = m_BookIndexRootItem; } QList rowItems; rowItems << new QStandardItem(entry); // Append or insert the item into the model as needed QStandardItem *new_item; if (row < 0 || row >= parent_item->rowCount()) { parent_item->appendRow(rowItems); new_item = parent_item->child(parent_item->rowCount() - 1, 0); } else { parent_item->insertRow(row, rowItems); new_item = parent_item->child(row, 0); } return new_item; } void IndexEntries::Clear() { while (m_BookIndexRootItem->rowCount()) { m_BookIndexRootItem->removeRow(0); } } Sigil-0.9.9/src/MiscEditors/IndexEntries.h000066400000000000000000000027571321676412500204100ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef INDEXENTRIES_H #define INDEXENTRIES_H #include /** * Holds the Index entries to put into the Index */ class IndexEntries { public: static IndexEntries *instance(); ~IndexEntries(); void Clear(); QStandardItem *GetRootItem(); void AddOneEntry(QString text, QString filename, QString index_id_value); private: IndexEntries(); QStandardItem *AddEntryToModel(QString entry, QStandardItem *parent_item, int row); QStandardItem *m_BookIndexRootItem; static IndexEntries *m_instance; }; #endif // INDEXENTRIES_H Sigil-0.9.9/src/MiscEditors/IndexHTMLWriter.cpp000066400000000000000000000112611321676412500212610ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "MiscEditors/IndexHTMLWriter.h" #include "MiscEditors/IndexEntries.h" #include "sigil_constants.h" const QString SGC_INDEX_CSS_FILENAME = "sgc-index.css"; static const QString TEMPLATE_BEGIN_TEXT = "\n" "\n" "\n" "\n" "\n" "Index\n" "\n" "\n" "\n"; static const QString TEMPLATE3_BEGIN_TEXT = "\n" "\n\n" "\n" "\n" "Index\n" "\n" "\n" "\n"; static const QString TEMPLATE_END_TEXT = "\n" "\n"; IndexHTMLWriter::IndexHTMLWriter() : m_IndexHTMLFile(QString()) { } QString IndexHTMLWriter::WriteXML(const QString &version) { if (version.startsWith('2')) { m_IndexHTMLFile += TEMPLATE_BEGIN_TEXT; } else { m_IndexHTMLFile += TEMPLATE3_BEGIN_TEXT; } m_IndexHTMLFile += "
"; m_IndexHTMLFile += QObject::tr("Index"); m_IndexHTMLFile += "
\n"; m_IndexHTMLFile += "
"; WriteEntries(); m_IndexHTMLFile += "
"; m_IndexHTMLFile += TEMPLATE_END_TEXT; return m_IndexHTMLFile; } void IndexHTMLWriter::WriteEntries(QStandardItem *parent_item) { QStandardItem *root_item = IndexEntries::instance()->GetRootItem(); if (!parent_item) { parent_item = root_item; } if (!parent_item->rowCount()) { return; } QChar letter = ' '; for (int i = 0; i < parent_item->rowCount(); i++) { QStandardItem *item = parent_item->child(i, 0); // If this is a target entry then skip. if (!item->rowCount()) { continue; } // Need to html escape entry text // If the first letter of this entry is different than the last // entry then insert a special separator. // Get actual first letter not htmlescaped QChar new_letter = item->text()[0].toLower(); if (new_letter != letter && parent_item == root_item) { letter = new_letter; m_IndexHTMLFile += "
"; // starting letter may be an & or > or < - therefore html escape it m_IndexHTMLFile += QString(letter.toUpper()).toHtmlEscaped(); m_IndexHTMLFile += "
"; } m_IndexHTMLFile += "
"; // make sure to use the html escaped text here for entry QString etext = item->text().toHtmlEscaped(); m_IndexHTMLFile += etext % "\n"; m_IndexHTMLFile += " "; // Print all the targets for this entry int ref_count = 1; for (int j = 0; j < item->rowCount(); j++) { // If the entry has no children then its a target id. if (item->child(j, 0)->rowCount() == 0) { QString target = "../Text/" % item->child(j, 0)->text(); if (ref_count > 1) { m_IndexHTMLFile += ", "; } m_IndexHTMLFile += "" % QString::number(ref_count) % ""; ref_count++; } } // Print any subentries and their targets WriteEntries(item); m_IndexHTMLFile += "
"; } } Sigil-0.9.9/src/MiscEditors/IndexHTMLWriter.h000066400000000000000000000024171321676412500207310ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #ifndef INDEXWRITER_H #define INDEXWRITER_H #include /** * Writes the Index into an HTML file of the EPUB publication. */ class IndexHTMLWriter { public: IndexHTMLWriter(); QString WriteXML(const QString &version); private: void WriteEntries(QStandardItem *parent_item = NULL); QString m_IndexHTMLFile; }; #endif // INDEXWRITER_H Sigil-0.9.9/src/MiscEditors/SearchEditorModel.cpp000066400000000000000000000457401321676412500216760ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include "MiscEditors/SearchEditorModel.h" #include "Misc/Utility.h" #include "sigil_constants.h" static const QString SETTINGS_FILE = "sigil_searches.ini"; static const QString SETTINGS_GROUP = "search_entries"; static const QString ENTRY_NAME = "Name"; static const QString ENTRY_FIND = "Find"; static const QString ENTRY_REPLACE = "Replace"; const int COLUMNS = 3; static const int IS_GROUP_ROLE = Qt::UserRole + 1; static const int FULLNAME_ROLE = Qt::UserRole + 2; static const QString SEARCH_EXAMPLES_FILE = "search_entries.ini"; SearchEditorModel *SearchEditorModel::m_instance = 0; SearchEditorModel *SearchEditorModel::instance() { if (m_instance == 0) { m_instance = new SearchEditorModel(); } return m_instance; } SearchEditorModel::SearchEditorModel(QObject *parent) : QStandardItemModel(parent), m_FSWatcher(new QFileSystemWatcher()), m_IsDataModified(false) { m_SettingsPath = Utility::DefinePrefsDir() + "/" + SETTINGS_FILE; QStringList header; header.append(tr("Name")); header.append(tr("Find")); header.append(tr("Replace")); setHorizontalHeaderLabels(header); LoadInitialData(); // Save it to make sure we have a file in case it was loaded from examples SaveData(); if (!m_FSWatcher->files().contains(m_SettingsPath)) { m_FSWatcher->addPath(m_SettingsPath); } connect(m_FSWatcher, SIGNAL(fileChanged(const QString &)), this, SLOT(SettingsFileChanged(const QString &)), Qt::DirectConnection); connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); connect(this, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(RowsRemovedHandler(const QModelIndex &, int, int))); } SearchEditorModel::~SearchEditorModel() { if (m_instance) { delete m_instance; m_instance = 0; } } void SearchEditorModel::SetDataModified(bool modified) { m_IsDataModified = modified; } bool SearchEditorModel::IsDataModified() { return m_IsDataModified; } Qt::DropActions SearchEditorModel::supportedDropActions() const { return Qt::MoveAction; } bool SearchEditorModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { QModelIndex new_parent(parent); if (parent.column() > 0) { // User is trying to drop onto a child column - treat it as though they are dropping in the initial column. new_parent = index(parent.row(), 0, parent.parent()); } if (column > 0) { // Same as above but for when user drops into the between row selector in a child column. column = 0; } // If dropped on an non-group entry convert to parent item group/row if (new_parent.isValid() && !itemFromIndex(new_parent)->data(IS_GROUP_ROLE).toBool()) { row = new_parent.row() + 1; new_parent = new_parent.parent(); } if (!QStandardItemModel::dropMimeData(data, action, row, column, new_parent)) { return false; } // As our drag/drop completed successfully, recalculate the fullname for all the items in the model UpdateFullName(invisibleRootItem()); // If we dropped onto a parent group, make sure it is expanded. if (new_parent.isValid()) { emit ItemDropped(new_parent); } SetDataModified(true); return true; } void SearchEditorModel::RowsRemovedHandler(const QModelIndex &parent, int start, int end) { SetDataModified(true); } void SearchEditorModel::ItemChangedHandler(QStandardItem *item) { Q_ASSERT(item); if (item->column() != 0) { SetDataModified(true); return; } // Restore name if nothing entered or contains a group indicator if (item->text().isEmpty() || item->text().contains("/")) { QString name = item->data(FULLNAME_ROLE).toString(); name.replace(QRegularExpression("/$"), ""); if (name.contains("/")) { name = name.split("/").last(); } item->setText(name); return; } Rename(item); } void SearchEditorModel::Rename(QStandardItem *item, const QString &name) { // Update the name and all its children // Disconnect change signal while changing the items disconnect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); // If item name not already changed, set it if (name != "") { disconnect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); item->setText(name); connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); } UpdateFullName(item); connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(ItemChangedHandler(QStandardItem *))); SetDataModified(true); } void SearchEditorModel::UpdateFullName(QStandardItem *item) { QStandardItem *parent_item = item->parent(); if (!parent_item) { parent_item = invisibleRootItem(); } QString fullname = parent_item->data(FULLNAME_ROLE).toString() + item->text(); if (item->data(IS_GROUP_ROLE).toBool()) { fullname.append("/"); } item->setToolTip(fullname); item->setData(fullname, FULLNAME_ROLE); for (int row = 0; row < item->rowCount(); row++) { UpdateFullName(item->child(row, 0)); } } void SearchEditorModel::SettingsFileChanged(const QString &path) const { // The file may have been deleted prior to writing a new version - give it a chance to write. QTime wake_time = QTime::currentTime().addMSecs(1000); while (!QFile::exists(path) && QTime::currentTime() < wake_time) { QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } // The signal is also received after resource files are removed / renamed, // but it can be safely ignored because QFileSystemWatcher automatically stops watching them. if (QFile::exists(path)) { // Some editors write the updated contents to a temporary file // and then atomically move it over the watched file. // In this case QFileSystemWatcher loses track of the file, so we have to add it again. if (!m_FSWatcher->files().contains(path)) { m_FSWatcher->addPath(path); } instance()->LoadInitialData(); emit SettingsFileUpdated(); } } bool SearchEditorModel::ItemIsGroup(QStandardItem *item) { return item->data(IS_GROUP_ROLE).toBool(); } QString SearchEditorModel::GetFullName(QStandardItem *item) { return item->data(FULLNAME_ROLE).toString(); } SearchEditorModel::searchEntry *SearchEditorModel::GetEntryFromName(const QString &name, QStandardItem *item) { return GetEntry(GetItemFromName(name, item)); } QStandardItem *SearchEditorModel::GetItemFromName(const QString &name, QStandardItem *item) { QStandardItem *found_item = NULL; if (!item) { item = invisibleRootItem(); } if (item != invisibleRootItem() && item->data(FULLNAME_ROLE).toString() == name) { return item; } for (int row = 0; row < item->rowCount(); row++) { found_item = GetItemFromName(name, item->child(row, 0)); // Return with first found entry if (found_item) { return found_item; } } return found_item; } void SearchEditorModel::LoadInitialData() { removeRows(0, rowCount()); LoadData(); if (invisibleRootItem()->rowCount() == 0) { AddExampleEntries(); } SetDataModified(false); } void SearchEditorModel::LoadData(const QString &filename, QStandardItem *item) { SettingsStore *settings; if (filename.isEmpty()) { settings = new SettingsStore(m_SettingsPath); } else { settings = new SettingsStore(filename); } int size = settings->beginReadArray(SETTINGS_GROUP); // Add one entry at a time to the list for (int i = 0; i < size; ++i) { settings->setArrayIndex(i); SearchEditorModel::searchEntry *entry = new SearchEditorModel::searchEntry(); QString fullname = settings->value(ENTRY_NAME).toString(); fullname.replace(QRegularExpression("\\s*/+\\s*"), "/"); fullname.replace(QRegularExpression("^/"), ""); entry->is_group = fullname.endsWith("/"); // Name is set to fullname only while looping through parent groups when adding entry->name = fullname; entry->fullname = fullname; entry->find = settings->value(ENTRY_FIND).toString(); entry->replace = settings->value(ENTRY_REPLACE).toString(); AddFullNameEntry(entry, item); } settings->endArray(); } void SearchEditorModel::AddFullNameEntry(SearchEditorModel::searchEntry *entry, QStandardItem *parent_item, int row) { if (!parent_item) { parent_item = invisibleRootItem(); } if (parent_item != invisibleRootItem() && !parent_item->data(IS_GROUP_ROLE).toBool()) { row = parent_item->row() + 1; parent_item = parent_item->parent(); } if (row < 0) { row = parent_item->rowCount(); } QString entry_name = entry->name; if (entry->name.contains("/")) { QStringList group_names = entry->name.split("/", QString::SkipEmptyParts); entry_name = group_names.last(); if (!entry->is_group) { group_names.removeLast(); } foreach(QString group_name, group_names) { bool found = false; for (int r = 0; r < parent_item->rowCount(); r++) { if (parent_item->child(r, 0)->data(IS_GROUP_ROLE).toBool() && parent_item->child(r, 0)->text() == group_name) { parent_item = parent_item->child(r, 0); found = true; break; } } if (!found) { SearchEditorModel::searchEntry *new_entry = new SearchEditorModel::searchEntry(); new_entry->is_group = true; new_entry->name = group_name; parent_item = AddEntryToModel(new_entry, new_entry->is_group, parent_item, parent_item->rowCount()); } } row = parent_item->rowCount(); } if (!entry->is_group) { entry->name = entry_name; AddEntryToModel(entry, entry->is_group, parent_item, row); } } QStandardItem *SearchEditorModel::AddEntryToModel(SearchEditorModel::searchEntry *entry, bool is_group, QStandardItem *parent_item, int row) { // parent_item must be a group item if (!parent_item) { parent_item = invisibleRootItem(); } // Create an empty entry if none supplied if (!entry) { entry = new SearchEditorModel::searchEntry(); entry->is_group = is_group; if (!is_group) { entry->name = "Search"; entry->find = ""; entry->replace = ""; } else { entry->name = "Group"; } } entry->fullname = entry->name; if (parent_item != invisibleRootItem()) { // Set the fullname based on the parent entry entry->fullname = parent_item->data(FULLNAME_ROLE).toString() + entry->name; } if (entry->is_group) { entry->fullname += "/"; } QList rowItems; QStandardItem *group_item = parent_item; if (entry->is_group) { group_item = new QStandardItem(entry->name); QFont font; font.setWeight(QFont::Bold); group_item->setFont(font); rowItems << group_item; for (int col = 1; col < COLUMNS ; col++) { QStandardItem *item = new QStandardItem(""); item->setEditable(false); rowItems << item; } } else { rowItems << new QStandardItem(entry->name); rowItems << new QStandardItem(entry->find); rowItems << new QStandardItem(entry->replace); } rowItems[0]->setData(entry->is_group, IS_GROUP_ROLE); rowItems[0]->setData(entry->fullname, FULLNAME_ROLE); rowItems[0]->setToolTip(entry->fullname); // Add the new item to the model at the specified row QStandardItem *new_item; if (row < 0 || row >= parent_item->rowCount()) { parent_item->appendRow(rowItems); new_item = parent_item->child(parent_item->rowCount() - 1, 0); } else { parent_item->insertRow(row, rowItems); new_item = parent_item->child(row, 0); } SetDataModified(true); return new_item; } void SearchEditorModel::AddExampleEntries() { QString examples_dir; #ifdef Q_OS_MAC examples_dir = QCoreApplication::applicationDirPath() + "/../examples/"; #elif defined(Q_OS_WIN32) examples_dir = QCoreApplication::applicationDirPath() + "/examples/"; #else // all flavours of linux / unix // user supplied environment variable to 'share/sigil' directory will override everything if (!sigil_extra_root.isEmpty()) { examples_dir = sigil_extra_root + "/examples/"; } else { examples_dir = sigil_share_root + "/examples/"; } #endif LoadData(examples_dir % SEARCH_EXAMPLES_FILE); } QList SearchEditorModel::GetNonGroupItems(QList items) { QList all_items; foreach(QStandardItem * item, items) { all_items.append(GetNonGroupItems(item)); } return all_items; } QList SearchEditorModel::GetNonGroupItems(QStandardItem *item) { QList items; if (!item->data(IS_GROUP_ROLE).toBool()) { items.append(item); } for (int row = 0; row < item->rowCount(); row++) { items.append(GetNonGroupItems(item->child(row, 0))); } return items; } QList SearchEditorModel::GetNonParentItems(QList items) { QList all_items; foreach(QStandardItem * item, items) { all_items.append(GetNonParentItems(item)); } return all_items; } QList SearchEditorModel::GetNonParentItems(QStandardItem *item) { QList items; if (item->rowCount() == 0) { if (item != invisibleRootItem()) { items.append(item); } } for (int row = 0; row < item->rowCount(); row++) { items.append(GetNonParentItems(item->child(row, 0))); } return items; } QList SearchEditorModel::GetEntries(QList items) { QList entries; foreach(QStandardItem * item, items) { entries.append(GetEntry(item)); } return entries; } SearchEditorModel::searchEntry *SearchEditorModel::GetEntry(QStandardItem *item) { QStandardItem *parent_item; if (item->parent()) { parent_item = item->parent(); } else { parent_item = invisibleRootItem(); } SearchEditorModel::searchEntry *entry = new SearchEditorModel::searchEntry(); entry->is_group = parent_item->child(item->row(), 0)->data(IS_GROUP_ROLE).toBool(); entry->fullname = parent_item->child(item->row(), 0)->data(FULLNAME_ROLE).toString(); entry->name = parent_item->child(item->row(), 0)->text(); entry->find = parent_item->child(item->row(), 1)->text(); entry->replace = parent_item->child(item->row(), 2)->text(); return entry; } QStandardItem *SearchEditorModel::GetItemFromId(quintptr id, int row, QStandardItem *item) const { QStandardItem *found_item = NULL; if (!item) { item = invisibleRootItem(); } if (item->index().internalId() == id) { if (item->parent()) { item = item->parent(); } else { item = invisibleRootItem(); } return item->child(row, 0); } for (int r = 0; r < item->rowCount(); r++) { found_item = GetItemFromId((quintptr)id, row, item->child(r, 0)); // Return with first found entry if (found_item) { return found_item; } } return found_item; } QString SearchEditorModel::SaveData(QList entries, const QString &filename) { QString message = ""; // Save everything if no entries selected if (entries.isEmpty()) { QList items = GetNonParentItems(invisibleRootItem()); if (!items.isEmpty()) { entries = GetEntries(items); } } // Stop watching the file while we save it if (m_FSWatcher->files().contains(m_SettingsPath)) { m_FSWatcher->removePath(m_SettingsPath); } // Open the default file for save, or specific file for export SettingsStore *settings; if (filename.isEmpty()) { settings = new SettingsStore(m_SettingsPath); } else { settings = new SettingsStore(filename); } settings->sync(); if (!settings->isWritable()) { message = tr("Unable to create file %1").arg(filename); // Watch the file again m_FSWatcher->addPath(m_SettingsPath); return message; } // Remove the old values to account for deletions settings->remove(SETTINGS_GROUP); settings->beginWriteArray(SETTINGS_GROUP); int i = 0; foreach(SearchEditorModel::searchEntry * entry, entries) { settings->setArrayIndex(i++); settings->setValue(ENTRY_NAME, entry->fullname); if (!entry->is_group) { settings->setValue(ENTRY_FIND, entry->find); settings->setValue(ENTRY_REPLACE, entry->replace); } } settings->endArray(); // Make sure file is created/updated so it can be checked settings->sync(); // Watch the file again m_FSWatcher->addPath(m_SettingsPath); SetDataModified(false); return message; } QVariant SearchEditorModel::data(const QModelIndex &index, int role) const { if (index.isValid() && index.column() > 0 && role == Qt::SizeHintRole) { // Make all rows the same height using the name column to ensure text limited to a single line return data(this->index(0, 0), role).toSize(); } return QStandardItemModel::data(index, role); } Sigil-0.9.9/src/MiscEditors/SearchEditorModel.h000066400000000000000000000074131321676412500213360ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SEARCHEDITORMODEL_H #define SEARCHEDITORMODEL_H #include #include #include #include "Misc/SettingsStore.h" class SearchEditorModel : public QStandardItemModel { Q_OBJECT public: SearchEditorModel(QObject *parent = 0); ~SearchEditorModel(); static SearchEditorModel *instance(); struct searchEntry { bool is_group; QString fullname; QString name; QString find; QString replace; }; bool IsDataModified(); bool ItemIsGroup(QStandardItem *item); QString GetFullName(QStandardItem *item); void LoadInitialData(); void LoadData(const QString &filename = QString(), QStandardItem *parent_item = NULL); void AddFullNameEntry(SearchEditorModel::searchEntry *entry = NULL, QStandardItem *parent_item = NULL, int row = -1); QStandardItem *AddEntryToModel(SearchEditorModel::searchEntry *entry, bool is_group = false, QStandardItem *parent_item = NULL, int row = -1); QString SaveData(QList entries = QList(), const QString &filename = QString()); QList GetEntries(QList items); SearchEditorModel::searchEntry *GetEntry(QStandardItem *item); SearchEditorModel::searchEntry *GetEntryFromName(const QString &name, QStandardItem *parent_item = NULL); QStandardItem *GetItemFromName(const QString &name, QStandardItem *item = NULL); QList GetNonGroupItems(QList items); QList GetNonGroupItems(QStandardItem *item); QList GetNonParentItems(QList items); QList GetNonParentItems(QStandardItem *item); void Rename(QStandardItem *item, const QString &name = ""); void UpdateFullName(QStandardItem *item); QVariant data(const QModelIndex &index, int role) const; signals: void SettingsFileUpdated() const; void ItemDropped(const QModelIndex &) const; private slots: void RowsRemovedHandler(const QModelIndex &parent, int start, int end); void ItemChangedHandler(QStandardItem *item); void SettingsFileChanged(const QString &path) const; private: void SetDataModified(bool modified); bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); Qt::DropActions supportedDropActions() const; QStandardItem *GetItemFromId(quintptr id, int row, QStandardItem *item = NULL) const; QString CheckEntries(QList entries); void AddExampleEntries(); static SearchEditorModel *m_instance; QString m_SettingsPath; QFileSystemWatcher *m_FSWatcher; bool m_IsDataModified; }; #endif // SEARCHEDITORMODEL_H Sigil-0.9.9/src/MiscEditors/SearchEditorTreeView.cpp000066400000000000000000000064271321676412500223670ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "MiscEditors/SearchEditorTreeView.h" SearchEditorTreeView::SearchEditorTreeView(QWidget *parent) : QTreeView(parent) { setDragEnabled(true); setAcceptDrops(false); setDropIndicatorShown(true); setDragDropMode(QAbstractItemView::InternalMove); setAutoScroll(true); setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionBehavior(QAbstractItemView::SelectRows); setSortingEnabled(false); setTabKeyNavigation(true); setAutoExpandDelay(200); } SearchEditorTreeView::~SearchEditorTreeView() { } QModelIndex SearchEditorTreeView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) { if (cursorAction == QAbstractItemView::MoveNext) { QModelIndex index = currentIndex(); // Only the first column of a group is editable if (!model()->data(index.sibling(index.row(), 0), Qt::UserRole + 1).toBool()) { // Move to next column in row if there is one if (index.column() < (header()->count() - 1)) { return model()->index(index.row(), index.column() + 1, index.parent()); } } // Reset to first column in row so that default moveCursor moves it down one if (indexBelow(index).isValid()) { setCurrentIndex(model()->index(index.row(), 0, index.parent())); } } else if (cursorAction == QAbstractItemView::MovePrevious) { QModelIndex index = currentIndex(); // Only the first column of a group is editable if (!model()->data(index.sibling(index.row(), 0), Qt::UserRole + 1).toBool()) { // Move to previous column in row if there is one if (index.column() > 0) { return model()->index(index.row(), index.column() - 1, index.parent()); } } if (indexAbove(index).isValid()) { // If row above is a group always reset to first column otherwise last column if (model()->data(indexAbove(index).sibling(indexAbove(index).row(), 0), Qt::UserRole + 1).toBool()) { setCurrentIndex(model()->index(index.row(), 0, index.parent())); } else { setCurrentIndex(model()->index(index.row(), header()->count() - 1, index.parent())); } } } return QTreeView::moveCursor(cursorAction, modifiers); } Sigil-0.9.9/src/MiscEditors/SearchEditorTreeView.h000066400000000000000000000024731321676412500220310ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SEARCHEDITORTREEVIEW_H #define SEARCHEDITORTREEVIEW_H #include class SearchEditorTreeView : public QTreeView { public: SearchEditorTreeView(QWidget *parent = 0); ~SearchEditorTreeView(); protected: QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers); }; #endif // SEARCHEDITORTREEVIEW_H Sigil-0.9.9/src/PCRE/000077500000000000000000000000001321676412500141275ustar00rootroot00000000000000Sigil-0.9.9/src/PCRE/PCRECache.cpp000066400000000000000000000030271321676412500163120ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "PCRE/PCRECache.h" PCRECache *PCRECache::m_instance = 0; PCRECache *PCRECache::instance() { if (m_instance == 0) { m_instance = new PCRECache(); } return m_instance; } PCRECache::PCRECache() { } bool PCRECache::insert(const QString &key, SPCRE *object) { return m_cache.insert(key, object); } SPCRE *PCRECache::getObject(const QString &key) { // Create a new SPCRE if it doesn't alreayd exit. // The key is the pattern for initializing the SPCRE. if (!m_cache.contains(key)) { SPCRE *spcre = new SPCRE(key); m_cache.insert(key, spcre, 1); return spcre; } return m_cache.object(key); } Sigil-0.9.9/src/PCRE/PCRECache.h000066400000000000000000000041641321676412500157620ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef PCRECACHE_H #define PCRECACHE_H #include #include #include "PCRE/SPCRE.h" /** * Singleton. A cache of SPCRE regular expression objects. * * The SPCRE's are cached to improve performance. */ class PCRECache { public: /** * The accessor function to access the cache. */ static PCRECache *instance(); ~PCRECache(); /** * Insert an SPCRE into the cache. The key is the regular expression * pattern by the SPCRE as a string. * * @param key The key associated with the SPCRE. * @param object The SPCRE to store. * * @return True if the object was successfully inserted. */ bool insert(const QString &key, SPCRE *object); /** * Retrieve the SPCRE object from the cache. * * If the object does not exist it is created and inserted into te cache * then returned. * * @param key The key associated with the SPCRE. */ SPCRE *getObject(const QString &key); private: /** * Private constructor. */ PCRECache(); // The cache that we store the SPCRE's. QCache m_cache; // The single instance of the cache. static PCRECache *m_instance; }; #endif // PCRECACHE_H Sigil-0.9.9/src/PCRE/PCREReplaceTextBuilder.cpp000066400000000000000000000307241321676412500210420ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "PCRE/PCREReplaceTextBuilder.h" #include "Misc/Utility.h" #define is_hex(a) (((a) >= '0' && (a) <= '9') || ((a) >= 'a' && (a) <= 'f') || ((a) >= 'A' && (a) <= 'F') ? true : false) PCREReplaceTextBuilder::PCREReplaceTextBuilder() { resetState(); } bool PCREReplaceTextBuilder::BuildReplacementText(SPCRE &sre, const QString &text, const QList> &capture_groups_offsets, const QString &replacement_pattern, QString &out) { resetState(); if (!sre.isValid()) { return false; } // Check if the \ start control is in the string. // If it's not we don't need to run though the replacment code and we // can just return the pattern as the replaced text. // This is a simple and quick way that will catch a large number of // cases but not all. if (!replacement_pattern.contains("\\")) { out = replacement_pattern; return true; } // Tempory character used as we loop though all characters so we can // determine if it is a control character or text. QChar c; // Named back referecnes can be in within {} or <>. Store which // character we've matched so we can match the appropriate closing // character. QChar backref_bracket_start_char; QChar control_char; // Stores a named back reference we build as we parse the string. QString backref_name; QString invalid_contol; // \x hex code. QString control_x_hex; // The state of our progress through the replacment string. bool in_control = false; // We are going to parse the replacment pattern one character at a time // to build the final replacement string. We need to replace subpatterns // numbered and named with the text matched by the regex. As well as // do any required case chagnes. // // We do a linear replacement one character at a time instead of using // a regex because we don't want false positives or replacments // within subpatterns. E.G. replace \g{1a} with back reference 1 by // accident. It's also faster to do one pass through the string instead // of multiple times by using multiple regexes. // // Back references can be: // \# where # is 0 to 9. // \g{#s} where #s can be 0 to capture_groups_offsets.count(). // \g<#s> where #s can be 0 to capture_groups_offsets.count(). // \g{text} where text can be any string. // \g where text can be any string. // // Case changes can be: // \l Lower case next character. // \u Upper case next character. // \L Lower case until \E. // \U Upper case until \E. // \E End case modification. // * Note: case changes cannot stop within a segment. Meaning // a \L within a \U will be ignored and the \U will be honored until // \E is encountered. for (int i = 0; i < replacement_pattern.length(); i++) { c = replacement_pattern.at(i); if (in_control) { // Store characters incase this is an invalid control and we // need to put it in the final text. invalid_contol += c; // This is the first character after the \\ start of control. if (control_char.isNull()) { // Store the control character so we know we what it is. control_char = c; // Process the control character. // # is special because it's a numbered back reference. // We processed it here. if (c.isDigit()) { int backref_number = c.digitValue(); // Check if this number is a back reference we can // actually get. if (backref_number >= 0 && backref_number < capture_groups_offsets.count()) { accumulateReplcementText(Utility::Substring(capture_groups_offsets.at(backref_number).first, capture_groups_offsets.at(backref_number).second, text)); } else { accumulateReplcementText(invalid_contol); } in_control = false; } // Metacharacters else if (c == 'a') { accumulateReplcementText("\a"); in_control = false; } else if (c == 'b') { accumulateReplcementText("\b"); in_control = false; } else if (c == 'f') { accumulateReplcementText("\f"); in_control = false; } else if (c == 'n') { accumulateReplcementText("\n"); in_control = false; } else if (c == 'r') { accumulateReplcementText("\r"); in_control = false; } else if (c == 't') { accumulateReplcementText("\t"); in_control = false; } else if (c == 'v') { accumulateReplcementText("\v"); in_control = false; } else if (c == '\\') { accumulateReplcementText("\\"); in_control = false; } // End case change. else if (c == 'E') { m_caseChangeState = CaseChange_None; in_control = false; } // Backreference. else if (c == 'g') { backref_bracket_start_char = QChar(); } // Lower case next character. else if (c == 'l') { trySetCaseChange(CaseChange_LowerNext); in_control = false; } // Lower case until \E. else if (c == 'L') { trySetCaseChange(CaseChange_Lower); in_control = false; } // Upper case next character. else if (c == 'u') { trySetCaseChange(CaseChange_UpperNext); in_control = false; } // Upper case until \E. else if (c == 'U') { trySetCaseChange(CaseChange_Upper); in_control = false; } } // We know the control character. else { if (control_char == 'g') { if (backref_bracket_start_char.isNull()) { // We only support named references within // {} and <>. if (c == '{' || c == '<') { backref_bracket_start_char = c; backref_name.clear(); } else { in_control = false; accumulateReplcementText(invalid_contol); } } else { if ((c == '}' && backref_bracket_start_char == '{') || (c == '>' && backref_bracket_start_char == '<')) { // Either we have a back reference number in the bracket // or we have a name which we will convert to a number. int backref_number; // Try to convert the backref name to a number. backref_number = backref_name.toInt(); // The backref wasn't a number so get the number for the name. if (backref_number == 0 && backref_name != "0") { backref_number = sre.getCaptureStringNumber(backref_name); } // Check if there is we have a back reference we can // actually get. if (backref_number >= 0 && backref_number < capture_groups_offsets.count()) { accumulateReplcementText(Utility::Substring(capture_groups_offsets.at(backref_number).first, capture_groups_offsets.at(backref_number).second, text)); } else { accumulateReplcementText(invalid_contol); } in_control = false; } else { backref_name += c; } } } else if (control_char == 'x') { if (is_hex(c)) { control_x_hex += c; if (control_x_hex.count() == 2) { accumulateReplcementText(QChar(control_x_hex.toUInt(NULL, 16))); in_control = false; } } else { accumulateReplcementText(invalid_contol); in_control = false; } } // Invalid or unsupported control. else { accumulateReplcementText(invalid_contol); in_control = false; } } } // We're not in a control. else { // Start a control character. if (c == '\\') { // Reset our invalid control accumulator. invalid_contol = c; // Reset the control character that is after this control_char = QChar(); // Reset the \x character. control_x_hex = QString(); // We are now in a control. in_control = true; } // Normal text. else { accumulateReplcementText(c); } } } // If we ended reading the replacement string and we're still in // a back reference then we have an invalid back reference because // it never ended. Put the invalid reference into the replacment string. if (in_control) { accumulateReplcementText(invalid_contol); } out = m_finalText; return true; } void PCREReplaceTextBuilder::accumulateReplcementText(const QChar &ch) { m_finalText += processTextSegement(ch); } void PCREReplaceTextBuilder::accumulateReplcementText(const QString &text) { m_finalText += processTextSegement(text); } QString PCREReplaceTextBuilder::processTextSegement(const QChar &ch) { return processTextSegement(QString(ch)); } QString PCREReplaceTextBuilder::processTextSegement(const QString &text) { QString processedText; if (text.length() == 0) { return processedText; } switch (m_caseChangeState) { case CaseChange_LowerNext: processedText += text.at(0).toLower(); processedText += text.mid(1); m_caseChangeState = CaseChange_None; break; case CaseChange_Lower: processedText += text.toLower(); break; case CaseChange_UpperNext: processedText += text.at(0).toUpper(); processedText += text.mid(1); m_caseChangeState = CaseChange_None; break; case CaseChange_Upper: processedText += text.toUpper(); break; default: processedText += text; break; } return processedText; } void PCREReplaceTextBuilder::trySetCaseChange(CaseChange state) { if (m_caseChangeState == CaseChange_None) { m_caseChangeState = state; } } void PCREReplaceTextBuilder::resetState() { m_finalText.clear(); m_caseChangeState = CaseChange_None; } Sigil-0.9.9/src/PCRE/PCREReplaceTextBuilder.h000066400000000000000000000073521321676412500205100ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef PCREREPLACETEXTBUILDER_H #define PCREREPLACETEXTBUILDER_H #include #include "PCRE/SPCRE.h" class QChar; /** * Build replacement text from a given replacement pattern. */ class PCREReplaceTextBuilder { public: /** * Constructor. */ PCREReplaceTextBuilder(); /** * Generate replacement text. * * @param sre The SPCRE. * @param text The matched text we are using as a replacement. * @param capture_groups_offsets The offsets within the matched text * representing the captured subpatterns. * @param replacement_pattern The replacement pattern. Can be text or text * and control characters. * @param[out] out The string to store the repacement. * * @return True if replacement text is created. */ bool BuildReplacementText(SPCRE &sre, const QString &text, const QList> &capture_groups_offsets, const QString &replacement_pattern, QString &out); private: /** * The state of case changes. */ enum CaseChange { CaseChange_LowerNext, CaseChange_Lower, CaseChange_UpperNext, CaseChange_Upper, CaseChange_None }; /** * Reset the state of the replacement process. */ void resetState(); /** * Add to the final replacement text we are building. * * Processes by calling processTextSegement before adding. * * @param ch The character to add. */ void accumulateReplcementText(const QChar &ch); /** * Add to the final replacement text we are building. * * Processes by calling processTextSegement before adding. * * @param text The text to add. */ void accumulateReplcementText(const QString &text); /** * Processes the text segment making any changes necessary based upon * the state. * * @param ch The character to process. * * @return The processed and transformed text. */ QString processTextSegement(const QChar &ch); /** * Processes the text segment making any changes necessary based upon * the state. * * @param text The text to process. * * @return The processed and transformed text. */ QString processTextSegement(const QString &text); /** * Change the case state if possible. * * Case changes can only occur if no case change is currently active. * This will only change the case change state if it is not already set. * * @param state The state to set if possible. */ void trySetCaseChange(CaseChange state); // Case change state. CaseChange m_caseChangeState; // The final replacement text. QString m_finalText; }; #endif // PCREREPLACETEXTBUILDER_H Sigil-0.9.9/src/PCRE/SPCRE.cpp000066400000000000000000000163241321676412500155150ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "PCRE/SPCRE.h" #include "PCRE/PCREReplaceTextBuilder.h" #include "sigil_constants.h" // The maximum number of catpures that we will allow. const int PCRE_MAX_CAPTURE_GROUPS = 30; SPCRE::SPCRE(const QString &patten) { m_pattern = patten; m_re = NULL; m_study = NULL; m_captureSubpatternCount = 0; const char *error; int erroroffset; m_re = pcre16_compile(m_pattern.utf16(), PCRE_UTF16 | PCRE_MULTILINE, &error, &erroroffset, NULL); // Pattern is valid. if (m_re != NULL) { m_valid = true; // Study the pattern and save the results of the study. m_study = pcre16_study(m_re, 0, &error); // Store the number of capture subpatterns. pcre16_fullinfo(m_re, m_study, PCRE_INFO_CAPTURECOUNT, &m_captureSubpatternCount); } // Pattern is not valid. else { m_valid = false; } } SPCRE::~SPCRE() { if (m_re != NULL) { pcre16_free(m_re); m_re = NULL; } if (m_study != NULL) { pcre16_free(m_study); m_study = NULL; } } bool SPCRE::isValid() { return m_valid; } QString SPCRE::getPattern() { return m_pattern; } pcre16 *SPCRE::getCompiledPattern() { return m_re; } pcre16_extra *SPCRE::getStudy() { return m_study; } int SPCRE::getCaptureSubpatternCount() { return m_captureSubpatternCount; } int SPCRE::getCaptureStringNumber(const QString &name) { if (m_re == NULL) { return -1; } int number = pcre16_get_stringnumber(m_re, name.utf16()); if (number == 0) { number = -1; } return number; } QList SPCRE::getEveryMatchInfo(const QString &text) { // This function is very similar to getNextMatchInfo but we don't // want to put a call to getNextMatchInfo in a loop because it allocates // a new ovector. We want to avoid this and only do one allocation so we // reuse the logic and put the call to generateMatchInfo in the loop. QList info; if (m_re == NULL || text.isEmpty()) { return info; } int rc = 0; // Set the size of the array based on the number of capture subpatterns // if it does not exceed our maximum size. int ovector_count = getCaptureSubpatternCount(); if (ovector_count > PCRE_MAX_CAPTURE_GROUPS) { ovector_count = PCRE_MAX_CAPTURE_GROUPS; } // The vector needs to be a multiple of 3 and have at least one location // for the full matched string. int ovector_size = (1 + ovector_count) * 3; // Allocate only the amount of memory we need for the search pattern and // the number of capture patterns it contains. // Can't use dynamic array alloction (int ovector[ovector_size]) because // MSVC doesn't support it. int *ovector = new int[ovector_size]; memset(ovector, 0, sizeof(int)*ovector_size); // We keep track of the last offsets as we move though the string matching // sub strings. int last_offset[2] = {0}; // Run until no matches are found. do { // Store the matching offsets so we can tell when we need to quit this // loop. last_offset[0] = ovector[0]; last_offset[1] = ovector[1]; // We only care about matches that have text in it. if (last_offset[0] != last_offset[1]) { // Add the matched information to the list. info.append(generateMatchInfo(ovector, ovector_count)); } rc = pcre16_exec(m_re, m_study, text.utf16(), text.length(), last_offset[1], 0, ovector, ovector_size); } while (rc >= 0 && ovector[0] != ovector[1] && ovector[1] != last_offset[1] && ovector[0] < ovector[1]); delete[] ovector; return info; } SPCRE::MatchInfo SPCRE::getFirstMatchInfo(const QString &text) { SPCRE::MatchInfo match_info; if (m_re == NULL || text.isEmpty()) { return match_info; } int rc = 0; // Set the size of the array based on the number of capture subpatterns // if it does not exceed our maximum size. int ovector_count = getCaptureSubpatternCount(); if (ovector_count > PCRE_MAX_CAPTURE_GROUPS) { ovector_count = PCRE_MAX_CAPTURE_GROUPS; } // The vector needs to be a multiple of 3 and have at least one location // for the full matched string. int ovector_size = (1 + ovector_count) * 3; // Allocate only the amount of memory we need for the search pattern and // the number of capture patterns it contains. // Can't use dynamic array alloction (int ovector[ovector_size]) because // MSVC doesn't support it. int *ovector = new int[ovector_size]; memset(ovector, 0, sizeof(int)*ovector_size); rc = pcre16_exec(m_re, m_study, text.utf16(), text.length(), 0, 0, ovector, ovector_size); if (rc >= 0 && ovector[0] != ovector[1]) { match_info = generateMatchInfo(ovector, ovector_count); } delete[] ovector; return match_info; } SPCRE::MatchInfo SPCRE::getLastMatchInfo(const QString &text) { QList info; info = getEveryMatchInfo(text); if (!info.isEmpty()) { return info.last(); } else { return SPCRE::MatchInfo(); } } bool SPCRE::replaceText(const QString &text, const QList> &capture_groups_offsets, const QString &replacement_pattern, QString &out) { PCREReplaceTextBuilder builder; return builder.BuildReplacementText(*this, text, capture_groups_offsets, replacement_pattern, out); } SPCRE::MatchInfo SPCRE::generateMatchInfo(int ovector[], int ovector_count) { MatchInfo match_info; // Store the offsets in the QString text that we ar matching // against. int match_start = ovector[0]; int match_end = ovector[1]; match_info.offset = std::pair(match_start, match_end); // We keep a list of the substrings within the matched string that // are captured by capture patterns. // // The first match is always the string itself. match_info.capture_groups_offsets.append(std::pair(0, match_end - match_start)); // Translate the subpattern offsets into locations within the // matched substring. for (int i = 1; i <= ovector_count; i++) { int subpattern_start = ovector[2 * i] - match_start; int subpattern_end = ovector[2 * i + 1] - match_start; match_info.capture_groups_offsets.append(std::pair(subpattern_start, subpattern_end)); } return match_info; } Sigil-0.9.9/src/PCRE/SPCRE.h000066400000000000000000000117421321676412500151610ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2011 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SPCRE_H #define SPCRE_H #include #include #include #include using std::pair; /** * Sigil Regular Expression object. * * Used to find matches within a string and create replacements. * * This class is a wrapper for the PCRE C library. The C API is used instead * of the C++ API because the C++ API does not return offsets within the matched * String. */ class SPCRE { public: /** * Constructor. * * @param pattern The search pattern. */ SPCRE(const QString &patten); ~SPCRE(); /** * Defines an offset in a string of matching instances. Also, defines * offsets within the matched string that relate to captured patterns from * the matched pattern. The offset of the captured patterns is relative * to the matched substring. */ struct MatchInfo { // Offset within the full text where this match occurs. std::pair offset; // Each offset representes the porition of text that the capture // represents inside of the matched string. This is normalized so that // 0 represents the start of the string represented by offset. QList> capture_groups_offsets; MatchInfo() { offset.first = -1; offset.second = -1; } }; /** * Is the pattern valid. * * @return True if the pattern in valid. */ bool isValid(); /** * The string that was used to create the regular expression. * * @return The pattern string that was given in the constructor. */ QString getPattern(); /** * The compiled PCRE pattern created from the string pattern given in the * constructor. * * @return The compiled pattern. */ pcre16 *getCompiledPattern(); /** * The result of the study of the compiled pattern. * * @return The study result. */ pcre16_extra *getStudy(); /** * The total number of capture subpatterns within the pattern. * * @return The total number of capture subpatterns referenced within the * pattern. */ int getCaptureSubpatternCount(); /** * Convert a named capture group to its absolute numbered group equivelent. * * @param name The named catpure group. * @return The absolute numbered group represented by the name. -1 if the * named group does not exist within the pattern. */ int getCaptureStringNumber(const QString &name); /** * Generate match information from a segment of text. Finds all matching * instances of pattern within the given text. * * @param text The text to get matching information from. * * @return A list of MatchInfo objects. */ QList getEveryMatchInfo(const QString &text); MatchInfo getFirstMatchInfo(const QString &text); MatchInfo getLastMatchInfo(const QString &text); /** * Replaces the given text using a replacement pattern. The matched text is * required because the replacement pattern can references the capture * groups from within the matched text. * * @param text The matched text. * @param capture_group_offsets Offsets within the string that represents * the capture groups. * @param replacement_pattern The pattern / text to use to create the * final replacement text. * @param[out] out The final replacement string. * * @return true if the replacement string was created successfully. */ bool replaceText(const QString &text, const QList> &capture_groups_offsets, const QString &replacement_pattern, QString &out); private: MatchInfo generateMatchInfo(int ovector[], int ovector_count); // Store if the pattern is valid. bool m_valid; // The regular expression as a string. QString m_pattern; // The compiled regular expression. pcre16 *m_re; // The result of a study of the pcre. pcre16_extra *m_study; // The number of capture subpatterns with the expression. int m_captureSubpatternCount; }; #endif // SPCRE_H Sigil-0.9.9/src/ResourceObjects/000077500000000000000000000000001321676412500164775ustar00rootroot00000000000000Sigil-0.9.9/src/ResourceObjects/AudioResource.cpp000066400000000000000000000022421321676412500217540ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "ResourceObjects/AudioResource.h" AudioResource::AudioResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : Resource(mainfolder, fullfilepath, parent) { } Resource::ResourceType AudioResource::Type() const { return Resource::AudioResourceType; } Sigil-0.9.9/src/ResourceObjects/AudioResource.h000066400000000000000000000023051321676412500214210ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef AUDIORESOURCE_H #define AUDIORESOURCE_H #include "ResourceObjects/Resource.h" class AudioResource : public Resource { Q_OBJECT public: AudioResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); // inherited virtual ResourceType Type() const; }; #endif Sigil-0.9.9/src/ResourceObjects/CSSResource.cpp000066400000000000000000000111341321676412500213430ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include "Misc/Utility.h" #include "Misc/SettingsStore.h" #include "ResourceObjects/CSSResource.h" static const QString W3C_HTML_FORM = "" " " "

%1

" "

%2

" "

%3

" "

" "
" "
" "

" " " " " "
" "
" " " " " ""; CSSResource::CSSResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : TextResource(mainfolder, fullfilepath, parent), m_TemporaryValidationFiles(QList()) { } CSSResource::~CSSResource() { foreach(QString filepath, m_TemporaryValidationFiles) { Utility::SDeleteFile(filepath); } } bool CSSResource::DeleteCSStyles(QList css_selectors) { CSSInfo css_info(GetText()); // Search for selectors with the same definition and line and remove from text const QString &new_resource_text = css_info.removeMatchingSelectors(css_selectors); if (!new_resource_text.isNull()) { // At least one of the selector(s) was removed. SetText(new_resource_text); emit Modified(); return true; } return false; } Resource::ResourceType CSSResource::Type() const { return Resource::CSSResourceType; } void CSSResource::ValidateStylesheetWithW3C() { SettingsStore settings; QString w3c_spec; // check user prefs for EPUB stylesheet validation level if (GetEpubVersion().startsWith('3')) { w3c_spec = settings.cssEpub3ValidationSpec(); } else { w3c_spec = settings.cssEpub2ValidationSpec(); } const QString &post_form_html = W3C_HTML_FORM .arg(tr("Sigil will send your stylesheet data to the W3C Validation Service.")) .arg(tr("This page should disappear once loaded after 3 seconds.")) .arg(tr("If your browser does not have javascript enabled, click on the button below.")) .arg(GetText()) .arg(w3c_spec); const QString &temp_file_path = Utility::GetTemporaryFileNameWithExtension(".html"); Utility::WriteUnicodeTextFile(post_form_html, temp_file_path); m_TemporaryValidationFiles.append(temp_file_path); QDesktopServices::openUrl(QUrl::fromLocalFile(temp_file_path)); } Sigil-0.9.9/src/ResourceObjects/CSSResource.h000066400000000000000000000035031321676412500210110ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** Copyright (C) 2012 Dave Heiland ** Copyright (C) 2012 Grant Drake ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef CSSRESOURCE_H #define CSSRESOURCE_H #include "Misc/CSSInfo.h" #include "ResourceObjects/TextResource.h" /** * Represents a CSS stylesheet on disk. */ class CSSResource : public TextResource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ CSSResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); ~CSSResource(); bool DeleteCSStyles(QList css_selectors); // inherited virtual ResourceType Type() const; void ValidateStylesheetWithW3C(); private: QList m_TemporaryValidationFiles; }; #endif // CSSRESOURCE_H Sigil-0.9.9/src/ResourceObjects/FontResource.cpp000066400000000000000000000027601321676412500216260ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Misc/Utility.h" #include "ResourceObjects/FontResource.h" FontResource::FontResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : Resource(mainfolder, fullfilepath, parent) { } Resource::ResourceType FontResource::Type() const { return Resource::FontResourceType; } QString FontResource::GetObfuscationAlgorithm() const { return m_ObfuscationAlgorithm; } void FontResource::SetObfuscationAlgorithm(const QString &algorithm) { m_ObfuscationAlgorithm = algorithm; } bool FontResource::LoadFromDisk() { emit Modified(); return true; } Sigil-0.9.9/src/ResourceObjects/FontResource.h000066400000000000000000000032521321676412500212700ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef FONTRESOURCE_H #define FONTRESOURCE_H #include "ResourceObjects/Resource.h" /** * Represents a font file on disk (TTF or OTF). */ class FontResource : public Resource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ FontResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); // inherited virtual ResourceType Type() const; QString GetObfuscationAlgorithm() const; void SetObfuscationAlgorithm(const QString &algorithm); virtual bool LoadFromDisk(); private: QString m_ObfuscationAlgorithm; }; #endif // FONTRESOURCE_H Sigil-0.9.9/src/ResourceObjects/HTMLResource.cpp000066400000000000000000000155721321676412500214710ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin B. Hendricks Stratford, ON, Canada ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include // #include #include "BookManipulation/CleanSource.h" #include "BookManipulation/XhtmlDoc.h" #include "Misc/Utility.h" #include "Misc/GumboInterface.h" #include "ResourceObjects/HTMLResource.h" #include "sigil_exception.h" static const QString LOADED_CONTENT_MIMETYPE = "application/xhtml+xml"; const QString XML_NAMESPACE_CRUFT = "xmlns=\"http://www.w3.org/1999/xhtml\""; const QString REPLACE_SPANS = ""; const QString XML_TAG = ""; HTMLResource::HTMLResource(const QString &mainfolder, const QString &fullfilepath, const QHash &resources, QObject *parent) : XMLResource(mainfolder, fullfilepath, parent), m_Resources(resources), m_TOCCache("") { } Resource::ResourceType HTMLResource::Type() const { return Resource::HTMLResourceType; } bool HTMLResource::LoadFromDisk() { try { const QString &text = Utility::ReadUnicodeTextFile(GetFullPath()); SetText(text); emit LoadedFromDisk(); return true; } catch (CannotOpenFile) { // } return false; } void HTMLResource::SetText(const QString &text) { emit TextChanging(); XMLResource::SetText(text); // Track resources whose change will necessitate an update of the BV and PV. // At present this only applies to css files and images. TrackNewResources(GetPathsToLinkedResources()); } QString HTMLResource::GetTOCCache() { if (m_TOCCache.isEmpty()) { m_TOCCache = TextResource::GetText(); } return m_TOCCache; } void HTMLResource::SetTOCCache(const QString & text) { m_TOCCache = text; } void HTMLResource::SaveToDisk(bool book_wide_save) { SetText(GetText()); XMLResource::SaveToDisk(book_wide_save); } QStringList HTMLResource::GetLinkedStylesheets() { return XhtmlDoc::GetLinkedStylesheets(GetText()); } QStringList HTMLResource::GetManifestProperties() const { QStringList properties; QReadLocker locker(&GetLock()); GumboInterface gi = GumboInterface(GetText(), GetEpubVersion()); gi.parse(); QStringList props = gi.get_all_properties(); props.removeDuplicates(); if (props.contains("math")) properties.append("mathml"); if (props.contains("svg")) properties.append("svg"); // nav as a property should only be used on the nav document and no where else // if (props.contains("nav")) properties.append("nav"); if (props.contains("script")) properties.append("scripted"); if (props.contains("epub:switch")) properties.append("switch"); if (props.contains("remote-resources")) properties.append("remote-resources"); return properties; } QStringList HTMLResource::SplitOnSGFSectionMarkers() { QStringList sections = XhtmlDoc::GetSGFSectionSplits(GetText()); SetText(CleanSource::Mend(sections.takeFirst(),GetEpubVersion())); return sections; } QStringList HTMLResource::GetPathsToLinkedResources() { QStringList linked_resources; // Can NOT grab Read Lock here as this is also invoked in SetText which has write lock! // leading to instant lockup when renaming any resource // QReadLocker locker(&GetLock()); GumboInterface gi = GumboInterface(GetText(),GetEpubVersion()); gi.parse(); QList tags; tags << GUMBO_TAG_IMG << GUMBO_TAG_LINK; const QList linked_rsc_nodes = gi.get_all_nodes_with_tags(tags); for (int i = 0; i < linked_rsc_nodes.count(); ++i) { GumboNode* node = linked_rsc_nodes.at(i); // We skip the link elements that are not stylesheets if (node->v.element.tag == GUMBO_TAG_LINK) { GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "rel"); if (attr && (QString::fromUtf8(attr->value) != "stylesheet")) { continue; } } GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "href"); if (attr) { linked_resources.append(QString::fromUtf8(attr->value)); continue; } attr = gumbo_get_attribute(&node->v.element.attributes, "src"); if (attr) { linked_resources.append(QString::fromUtf8(attr->value)); } } return linked_resources; } void HTMLResource::TrackNewResources(const QStringList &filepaths) { QStringList filenames; QStringList linkedResourceIDs; foreach(QString filepath, filepaths) { filenames.append(QFileInfo(filepath).fileName()); } foreach(Resource * resource, m_Resources.values()) { disconnect(resource, SIGNAL(ResourceUpdatedOnDisk()), this, SIGNAL(LinkedResourceUpdated())); disconnect(resource, SIGNAL(Deleted(const Resource *)), this, SIGNAL(LinkedResourceUpdated())); if (filenames.contains(resource->Filename())) { linkedResourceIDs.append(resource->GetIdentifier()); } } foreach(QString resource_id, linkedResourceIDs) { Resource *resource = m_Resources.value(resource_id); if (resource) { connect(resource, SIGNAL(ResourceUpdatedOnDisk()), this, SIGNAL(LinkedResourceUpdated())); connect(resource, SIGNAL(Deleted(const Resource *)), this, SIGNAL(LinkedResourceUpdated())); } } } bool HTMLResource::DeleteCSStyles(QList css_selectors) { CSSInfo css_info(GetText(), false); // Search for selectors with the same definition and line and remove from text const QString &new_resource_text = css_info.removeMatchingSelectors(css_selectors); if (!new_resource_text.isNull()) { // At least one of the selector(s) was removed. SetText(new_resource_text); emit Modified(); return true; } return false; } Sigil-0.9.9/src/ResourceObjects/HTMLResource.h000066400000000000000000000071401321676412500211260ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin B. Hendricks Stratford, ON, Canada ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef HTMLRESOURCE_H #define HTMLRESOURCE_H #include #include "Misc/CSSInfo.h" #include "ResourceObjects/XMLResource.h" class QString; /** * Represents an HTML file of the book. * Stores several caches of the content for faster access. * There's a QWebPage cache that stores the rendered form of * the HTML and a QTextDocument cache that stores the syntax * colored version. */ class HTMLResource : public XMLResource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param resources The hash of Resources present in the FolderKeeper. * @param parent The object's parent. */ HTMLResource(const QString &mainfolder, const QString &fullfilepath, const QHash &resources, QObject *parent = NULL); QString GetTOCCache(); void SetTOCCache(const QString & text); // inherited virtual ResourceType Type() const; virtual void SetText(const QString &text); virtual bool LoadFromDisk(); void SaveToDisk(bool book_wide_save = false); /** * Splits the content of the resource into multiple section. * The SGF section markers are used as the break points. * The first section is set as the content of the resource, * and the others are returned. * * @return The content of all the sections except the first. */ QStringList SplitOnSGFSectionMarkers(); /** * Returns the paths to all the linked resources * like images and stylesheets. * * @return The paths to the linked resources. */ QStringList GetPathsToLinkedResources(); /** * Returns the paths to all the linked stylesheets * * @return The paths to the linked stylesheets. */ QStringList GetLinkedStylesheets(); QStringList GetManifestProperties() const; bool DeleteCSStyles(QList css_selectors); signals: void LinkedResourceUpdated(); void TextChanging(); void LoadedFromDisk(); private: /** * Makes sure the given paths are watched for updates. * * @param filepaths The paths to resources to watch. */ void TrackNewResources(const QStringList &filepaths); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * The resource list from FolderKeeper. * @todo This is ugly as hell. Find a way to remove this. */ const QHash &m_Resources; QString m_TOCCache; }; #endif // HTMLRESOURCE_H Sigil-0.9.9/src/ResourceObjects/ImageResource.cpp000066400000000000000000000025221321676412500217360ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Misc/Utility.h" #include "ResourceObjects/ImageResource.h" ImageResource::ImageResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : Resource(mainfolder, fullfilepath, parent) { } Resource::ResourceType ImageResource::Type() const { return Resource::ImageResourceType; } bool ImageResource::LoadFromDisk() { emit ResourceUpdatedOnDisk(); return true; } Sigil-0.9.9/src/ResourceObjects/ImageResource.h000066400000000000000000000027571321676412500214150ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef IMAGERESOURCE_H #define IMAGERESOURCE_H #include "ResourceObjects/Resource.h" class ImageResource : public Resource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ ImageResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); // inherited virtual ResourceType Type() const; virtual bool LoadFromDisk(); }; #endif // IMAGERESOURCE_H Sigil-0.9.9/src/ResourceObjects/MiscTextResource.cpp000066400000000000000000000023511321676412500224540ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Misc/Utility.h" #include "ResourceObjects/MiscTextResource.h" MiscTextResource::MiscTextResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : TextResource(mainfolder, fullfilepath, parent) { } Resource::ResourceType MiscTextResource::Type() const { return Resource::MiscTextResourceType; } Sigil-0.9.9/src/ResourceObjects/MiscTextResource.h000066400000000000000000000030371321676412500221230ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef MISCTEXTRESOURCE_H #define MISCTEXTRESOURCE_H #include "ResourceObjects/TextResource.h" /** * Represents an editable text file that will be in the Misc folder. */ class MiscTextResource : public TextResource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ MiscTextResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); // inherited virtual ResourceType Type() const; }; #endif // MISCTEXTRESOURCE_H Sigil-0.9.9/src/ResourceObjects/NCXResource.cpp000066400000000000000000000127001321676412500213430ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford, Ontario, Canada ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include "BookManipulation/CleanSource.h" #include "Exporters/NCXWriter.h" #include "ResourceObjects/NCXResource.h" #include "Misc/SettingsStore.h" #include "sigil_constants.h" static const QString TEMPLATE_TEXT = "\n" "\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" "\n" " Unknown\n" "\n" "\n" "\n" " \n" " %1\n" " \n" " \n" "\n" "\n" ""; // under xhtml5 / epub3 no doctype is allowed for the ncx static const QString TEMPLATE3_TEXT = "\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" "\n" " Unknown\n" "\n" "\n" "\n" " \n" " %1\n" " \n" " \n" "\n" "\n" ""; NCXResource::NCXResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : XMLResource(mainfolder, fullfilepath, parent) { FillWithDefaultText(); // Make sure the file exists on disk. // Among many reasons, this also solves the problem // with the Book Browser not displaying an icon for this resource. SaveToDisk(); } bool NCXResource::RenameTo(const QString &new_filename) { // The user is not allowed to rename the NCX file. return false; } Resource::ResourceType NCXResource::Type() const { return Resource::NCXResourceType; } void NCXResource::SetMainID(const QString &main_id) { SetText(GetText().replace("ID_UNKNOWN", main_id)); } bool NCXResource::GenerateNCXFromBookContents(const Book *book) { bool is_changed = false; QByteArray raw_ncx; QBuffer buffer(&raw_ncx); buffer.open(QIODevice::WriteOnly); NCXWriter ncx(book, buffer); ncx.WriteXMLFromHeadings(); buffer.close(); QString new_text = CleanSource::ProcessXML(QString::fromUtf8(raw_ncx.constData(), raw_ncx.size()),"application/x-dtbncx+xml"); QString existing_text = GetText(); // Only update the resource if have changed. Note that this is_changed trick will not // work after first loading an EPUB, because the metadata elements have their attributes // in swapped in a different order from the xhtml processing. if (new_text != existing_text) { SetText(new_text); is_changed = true; } return is_changed; } void NCXResource::GenerateNCXFromTOCContents(const Book *book, TOCModel *toc_model) { GenerateNCXFromTOCEntries(book, toc_model->GetRootTOCEntry()); } void NCXResource::GenerateNCXFromTOCEntries(const Book *book, TOCModel::TOCEntry toc_root_entry) { QByteArray raw_ncx; QBuffer buffer(&raw_ncx); buffer.open(QIODevice::WriteOnly); NCXWriter ncx(book, buffer, toc_root_entry); ncx.WriteXML(); buffer.close(); SetText(CleanSource::ProcessXML(QString::fromUtf8(raw_ncx.constData(), raw_ncx.size()), "application/x-dtbncx+xml")); } void NCXResource::FillWithDefaultText() { SettingsStore ss; QString version = ss.defaultVersion(); if (version.startsWith('2')) { SetText(TEMPLATE_TEXT.arg(tr("Start")).arg(FIRST_SECTION_NAME)); } else { SetText(TEMPLATE3_TEXT.arg(tr("Start")).arg(FIRST_SECTION_NAME)); } } QString NCXResource::GetRelativePathToRoot() const { QFileInfo info(GetFullPath()); QDir parent_dir = info.dir(); QString parent_name = parent_dir.dirName(); return parent_name + "/" + Filename(); } Sigil-0.9.9/src/ResourceObjects/NCXResource.h000066400000000000000000000035761321676412500210230ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef NCXRESOURCE_H #define NCXRESOURCE_H #include "MainUI/TOCModel.h" #include "ResourceObjects/XMLResource.h" class Book; class NCXResource : public XMLResource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ NCXResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); // inherited virtual bool RenameTo(const QString &new_filename); virtual ResourceType Type() const; void SetMainID(const QString &main_id); bool GenerateNCXFromBookContents(const Book *book); void GenerateNCXFromTOCContents(const Book *book, TOCModel *toc_model); void GenerateNCXFromTOCEntries(const Book *book, TOCModel::TOCEntry toc_root_entry); QString GetRelativePathToRoot() const; private: void FillWithDefaultText(); }; #endif // NCXRESOURCE_H Sigil-0.9.9/src/ResourceObjects/NavProcessor.cpp000077500000000000000000000720711321676412500216410ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks, Stratford Ontario ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include #include "Misc/Utility.h" #include "Misc/SettingsStore.h" #include "Misc/GumboInterface.h" #include "Misc/Landmarks.h" #include "BookManipulation/FolderKeeper.h" #include "ResourceObjects/Resource.h" #include "ResourceObjects/NavProcessor.h" static const QString NAV_PAGELIST_PATTERN = "\\s*\\s*"; static const QString NAV_LANDMARKS_PATTERN = "\\s*\\s*"; static const QString NAV_TOC_PATTERN = "\\s*\\s*"; static const QStringList SIGIL_FOLDERS = QStringList() << "Images" << "Fonts" << "Text" << "Styles" << "Audio" << "Video" << "Misc"; NavProcessor::NavProcessor(HTMLResource * nav_resource) : m_NavResource(nav_resource) { bool valid = true; { QReadLocker locker(&m_NavResource->GetLock()); QString source = m_NavResource->GetText(); GumboInterface gi = GumboInterface(source, "3.0"); gi.parse(); const QList nav_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_NAV); valid = valid && nav_nodes.length() > 0; bool has_toc = false; for (int i = 0; i < nav_nodes.length(); ++i) { GumboNode* node = nav_nodes.at(i); GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "epub:type"); if (attr) { QString etype = QString::fromUtf8(attr->value); if (etype == "toc") has_toc = true; } } valid = valid && has_toc; } if (!valid) { SettingsStore ss; QString lang = ss.defaultMetadataLang(); QString newsource = "\n" "\n" "\n" "\n" " \n" " \n" "\n" "\n" " \n" " \n" "\n" ""; newsource = newsource.arg(lang).arg(lang); QWriteLocker locker(&m_NavResource->GetLock()); m_NavResource->SetText(newsource); } } NavProcessor::~NavProcessor() { } QList NavProcessor::GetLandmarks() { QList landlist; if (!m_NavResource) return landlist; QReadLocker locker(&m_NavResource->GetLock()); GumboInterface gi = GumboInterface(m_NavResource->GetText(), "3.0"); gi.parse(); const QList nav_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_NAV); for (int i = 0; i < nav_nodes.length(); ++i) { GumboNode* node = nav_nodes.at(i); GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "epub:type"); if (attr && (QString::fromUtf8(attr->value) == "landmarks")) { const QList tags = QList() << GUMBO_TAG_A;; const QList anchor_nodes = gi.get_nodes_with_tags(node, tags); for (int j = 0; j < anchor_nodes.length(); ++j) { NavLandmarkEntry le; GumboNode* ancnode = anchor_nodes.at(j); GumboAttribute* typeattr = gumbo_get_attribute(&ancnode->v.element.attributes, "epub:type"); GumboAttribute* hrefattr = gumbo_get_attribute(&ancnode->v.element.attributes, "href"); if (typeattr) le.etype = QString::fromUtf8(typeattr->value); if (hrefattr) le.href = Utility::URLDecodePath(QString::fromUtf8(hrefattr->value)); le.title = Utility::DecodeXML(gi.get_local_text_of_node(ancnode)); landlist.append(le); } break; } } return landlist; } QList NavProcessor::GetPageList() { QList pagelist; if (!m_NavResource) return pagelist; QReadLocker locker(&m_NavResource->GetLock()); GumboInterface gi = GumboInterface(m_NavResource->GetText(), "3.0"); gi.parse(); const QList nav_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_NAV); for (int i = 0; i < nav_nodes.length(); ++i) { GumboNode* node = nav_nodes.at(i); GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "epub:type"); if (attr && (QString::fromUtf8(attr->value) == "page-list")) { QList tags = QList() << GUMBO_TAG_A; const QList anchor_nodes = gi.get_nodes_with_tags(node, tags); for (int j = 0; j < anchor_nodes.length(); ++j) { NavPageListEntry pe; GumboNode* ancnode = anchor_nodes.at(j); GumboAttribute* hrefattr = gumbo_get_attribute(&ancnode->v.element.attributes, "href"); if (hrefattr) pe.href = Utility::URLDecodePath(QString::fromUtf8(hrefattr->value)); pe.pagename = Utility::DecodeXML(gi.get_local_text_of_node(ancnode)); pagelist.append(pe); } break; } } return pagelist; } QList NavProcessor::GetTOC() { QList toclist; if (!m_NavResource) return toclist; QReadLocker locker(&m_NavResource->GetLock()); GumboInterface gi = GumboInterface(m_NavResource->GetText(), "3.0"); gi.parse(); const QList nav_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_NAV); for (int i = 0; i < nav_nodes.length(); ++i) { GumboNode* node = nav_nodes.at(i); GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "epub:type"); if (attr && (QString::fromUtf8(attr->value) == "toc")) { QList tags = QList() << GUMBO_TAG_OL; const QList ol_nodes = gi.get_nodes_with_tags(node, tags); for (int j = 0; j < ol_nodes.length(); ++j) { GumboNode * olnode = ol_nodes.at(j); toclist.append(GetNodeTOC(gi, olnode, 1)); break; } break; } } return toclist; } QList NavProcessor::GetNodeTOC(GumboInterface & gi, const GumboNode * node, int lvl) { if ((node->type != GUMBO_NODE_ELEMENT) || (node->v.element.tag != GUMBO_TAG_OL)) { return QList(); } QList toclist; const GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { GumboNode * child = static_cast(children->data[i]); if (child->type == GUMBO_NODE_ELEMENT) { if (child->v.element.tag == GUMBO_TAG_LI) { const GumboVector* li_children = &child->v.element.children; for (unsigned int j = 0; j < li_children->length; ++j) { GumboNode * li_child = static_cast(li_children->data[j]); if (li_child->type == GUMBO_NODE_ELEMENT) { if (li_child->v.element.tag == GUMBO_TAG_A) { NavTOCEntry te; te.lvl = lvl; GumboAttribute* hrefattr = gumbo_get_attribute(&li_child->v.element.attributes, "href"); if (hrefattr) te.href = Utility::URLDecodePath(QString::fromUtf8(hrefattr->value)); te.title = Utility::DecodeXML(gi.get_local_text_of_node(li_child)); toclist.append(te); } else if (li_child->v.element.tag == GUMBO_TAG_OL) { toclist.append(GetNodeTOC(gi, li_child, lvl+1)); } } } } } } return toclist; } QString NavProcessor::BuildTOC(const QList & toclist) { QStringList res; int curlvl = 1; bool initial = true; QString step = " "; QString base = step.repeated(2); res << "\n" + step + "\n"; return res.join(""); } QString NavProcessor::BuildLandmarks(const QList & landlist) { QStringList res; QString step = " "; QString base = step.repeated(2); res << "\n" + step + "\n"; return res.join(""); } QString NavProcessor::BuildPageList(const QList & pagelist) { QStringList res; QString step = " "; QString base = step.repeated(3); res << "\n" + step + "\n"; return res.join(""); } void NavProcessor::SetPageList(const QList & pagelist) { if (!m_NavResource) return; bool found_pagelist = false; // QWriteLocker locker(&m_NavResource->GetLock()); GumboInterface gi = GumboInterface(m_NavResource->GetText(), "3.0"); gi.parse(); QList nav_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_NAV); for (int i = 0; i < nav_nodes.length(); ++i) { GumboNode* node = nav_nodes.at(i); GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "epub:type"); if (attr && (QString::fromUtf8(attr->value) == "page-list")) { found_pagelist = true; GumboNode* parent = node->parent; unsigned int index_within_parent = node->index_within_parent; gumbo_remove_from_parent(node); gumbo_destroy_node(node); GumboNode * placeholder = gumbo_create_text_node(GUMBO_NODE_COMMENT,"SIGIL_REPLACE_PAGELIST_HERE"); gumbo_insert_node(placeholder, parent, index_within_parent); break; } } if (!found_pagelist) { QList body_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_BODY); if (body_nodes.length() == 1) { GumboNode* body = body_nodes.at(0); GumboNode * placeholder = gumbo_create_text_node(GUMBO_NODE_COMMENT,"SIGIL_REPLACE_PAGELIST_HERE"); gumbo_append_node(body, placeholder); } } QString nav_data = gi.getxhtml(); QString page_xml = BuildPageList(pagelist); QRegularExpression pagelist_placeholder(NAV_PAGELIST_PATTERN, QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption); QRegularExpressionMatch mo = pagelist_placeholder.match(nav_data); if (mo.hasMatch()) { nav_data.replace(mo.capturedStart(), mo.capturedLength(), page_xml); } m_NavResource->SetText(nav_data); } void NavProcessor::SetLandmarks(const QList & landlist) { if (!m_NavResource) return; bool found_landmarks = false; // QWriteLocker locker(&m_NavResource->GetLock()); GumboInterface gi = GumboInterface(m_NavResource->GetText(), "3.0"); gi.parse(); const QList nav_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_NAV); for (int i = 0; i < nav_nodes.length(); ++i) { GumboNode* node = nav_nodes.at(i); GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "epub:type"); if (attr && (QString::fromUtf8(attr->value) == "landmarks")) { found_landmarks = true; GumboNode * parent = node->parent; unsigned int index_within_parent = node->index_within_parent; gumbo_remove_from_parent(node); gumbo_destroy_node(node); GumboNode * placeholder = gumbo_create_text_node(GUMBO_NODE_COMMENT,"SIGIL_REPLACE_LANDMARKS_HERE"); gumbo_insert_node(placeholder, parent, index_within_parent); break; } } if (!found_landmarks) { QList body_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_BODY); if (body_nodes.length() == 1) { GumboNode* body = body_nodes.at(0); GumboNode * placeholder = gumbo_create_text_node(GUMBO_NODE_COMMENT,"SIGIL_REPLACE_LANDMARKS_HERE"); gumbo_append_node(body, placeholder); } } QString nav_data = gi.getxhtml(); QString land_xml = BuildLandmarks(landlist); QRegularExpression landmarks_placeholder(NAV_LANDMARKS_PATTERN, QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption); QRegularExpressionMatch mo = landmarks_placeholder.match(nav_data); if (mo.hasMatch()) { nav_data.replace(mo.capturedStart(), mo.capturedLength(), land_xml); } m_NavResource->SetText(nav_data); } void NavProcessor::SetTOC(const QList & toclist) { if (!m_NavResource) return; bool found_toc = false; // QWriteLocker locker(&m_NavResource->GetLock()); GumboInterface gi = GumboInterface(m_NavResource->GetText(), "3.0"); gi.parse(); const QList nav_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_NAV); for (int i = 0; i < nav_nodes.length(); ++i) { GumboNode* node = nav_nodes.at(i); GumboAttribute* attr = gumbo_get_attribute(&node->v.element.attributes, "epub:type"); if (attr && (QString::fromUtf8(attr->value) == "toc")) { found_toc = true; GumboNode * parent = node->parent; unsigned int index_within_parent = node->index_within_parent; gumbo_remove_from_parent(node); gumbo_destroy_node(node); GumboNode * placeholder = gumbo_create_text_node(GUMBO_NODE_COMMENT,"SIGIL_REPLACE_TOC_HERE"); gumbo_insert_node(placeholder, parent, index_within_parent); break; } } if (!found_toc) { QList body_nodes = gi.get_all_nodes_with_tag(GUMBO_TAG_BODY); if (body_nodes.length() == 1) { GumboNode* body = body_nodes.at(0); GumboNode * placeholder = gumbo_create_text_node(GUMBO_NODE_COMMENT,"SIGIL_REPLACE_TOC_HERE"); gumbo_append_node(body, placeholder); } } QString nav_data = gi.getxhtml(); QString toc_xml = BuildTOC(toclist); QRegularExpression toc_placeholder(NAV_TOC_PATTERN, QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption); QRegularExpressionMatch mo = toc_placeholder.match(nav_data); if (mo.hasMatch()) { nav_data.replace(mo.capturedStart(), mo.capturedLength(), toc_xml); } m_NavResource->SetText(nav_data); } void NavProcessor::AddLandmarkCode(const Resource *resource, QString new_code, bool toggle) { if (new_code.isEmpty()) return; QList landlist = GetLandmarks(); QWriteLocker locker(&m_NavResource->GetLock()); int pos = GetResourceLandmarkPos(resource, landlist); QString current_code; if (pos > -1) { NavLandmarkEntry le = landlist.at(pos); current_code = le.etype; } if ((current_code != new_code) || !toggle) { QString title = Landmarks::instance()->GetName(new_code); if (pos > -1) { NavLandmarkEntry le = landlist.at(pos); le.etype = new_code; le.title = title; landlist.replace(pos, le); } else { NavLandmarkEntry le; le.etype = new_code; le.title = title; le.href = ConvertOEBPSToNavRelative(resource->GetRelativePathToOEBPS()); landlist.append(le); } } else { // if the current code is the same as the new one, we toggle it off. if (pos > -1) landlist.removeAt(pos); } SetLandmarks(landlist); } void NavProcessor::RemoveLandmarkForResource(const Resource * resource) { QList landlist = GetLandmarks(); QWriteLocker locker(&m_NavResource->GetLock()); int pos = GetResourceLandmarkPos(resource, landlist); if (pos > -1) { landlist.removeAt(pos); SetLandmarks(landlist); } } int NavProcessor::GetResourceLandmarkPos(const Resource *resource, const QList & landlist) { QString resource_oebps_path = resource->GetRelativePathToOEBPS(); for (int i=0; i < landlist.count(); ++i) { NavLandmarkEntry le = landlist.at(i); QString href = ConvertHREFToOEBPSRelative(le.href); QStringList parts = href.split('#', QString::KeepEmptyParts); if (parts.at(0) == resource_oebps_path) { return i; } } return -1; } QString NavProcessor::GetLandmarkCodeForResource(const Resource *resource) { const QList landlist = GetLandmarks(); QReadLocker locker(&m_NavResource->GetLock()); int pos = GetResourceLandmarkPos(resource, landlist); QString etype; if (pos > -1) { NavLandmarkEntry le = landlist.at(pos); etype = le.etype; } return etype; } QString NavProcessor::GetLandmarkNameForResource(const Resource *resource) { QString name; QString etype = GetLandmarkCodeForResource(resource); if (!etype.isEmpty()) { name = Landmarks::instance()->GetName(etype); } return name; } QHash NavProcessor::GetLandmarkNameForPaths() { const QList landlist = GetLandmarks(); QReadLocker locker(&m_NavResource->GetLock()); QHash semantic_types; foreach(NavLandmarkEntry le, landlist) { QString href = ConvertHREFToOEBPSRelative(le.href); QStringList parts = href.split('#', QString::KeepEmptyParts); QString etype = le.etype; semantic_types[parts.at(0)] = Landmarks::instance()->GetName(etype); } return semantic_types; } QHash NavProcessor::GetLandmarkCodeForPaths() { const QList landlist = GetLandmarks(); QReadLocker locker(&m_NavResource->GetLock()); QHash semantic_types; foreach(NavLandmarkEntry le, landlist) { QString href = ConvertHREFToOEBPSRelative(le.href); QStringList parts = href.split('#', QString::KeepEmptyParts); QString etype = le.etype; semantic_types[parts.at(0)] = etype; } return semantic_types; } // Interface to Set the Nav TOC directly from Book Contents (Headings) // Get the Book headings and Make a Tree out of them and then convert // That tree of headings to our flat NavTOCEntry list bool NavProcessor::GenerateTOCFromBookContents(const Book* book) { QString prev_xml = BuildTOC(GetTOC()); QWriteLocker locker(&m_NavResource->GetLock()); bool is_changed = false; // Remove the Nav resource from list of HTMLResources if it exists (EPUB3) QList htmlresources = book->GetFolderKeeper()->GetResourceTypeList(true); if (m_NavResource) { htmlresources.removeOne(m_NavResource); } const QList headings = Headings::MakeHeadingHeirarchy(Headings::GetHeadingList(htmlresources)); QList toclist; foreach(const Headings::Heading & heading, headings) { toclist.append(HeadingWalker(heading, 1)); } QString new_xml = BuildTOC(toclist); is_changed = new_xml != prev_xml; SetTOC(toclist); return is_changed; } // Used by GenerateTOCFromBookContents QList NavProcessor::HeadingWalker(const Headings::Heading & heading, int lvl) { QList toclist; QString nav_file = m_NavResource->GetRelativePathToOEBPS(); QString heading_file = heading.resource_file->GetRelativePathToOEBPS(); if (heading.include_in_toc && (nav_file != heading_file)) { NavTOCEntry te; te.lvl = lvl; te.title = heading.text; QString id_to_use = heading.id; // If this heading appears right after a section break, // then it "represents" and links to its file; otherwise, // we link to the heading element directly // Prevent links back to to the nav itself form the nav if (heading.at_file_start) { te.href = ConvertOEBPSToNavRelative(heading_file); } else { te.href = ConvertOEBPSToNavRelative(heading_file) + "#" + id_to_use; } toclist.append(te); } foreach(Headings::Heading child_heading, heading.children) { toclist.append(HeadingWalker(child_heading, lvl+1)); } return toclist; } // Interface from Dockable Table of Contents Widget to get the Nav TOC // Need to take our flat Nav TOC list and create a tree then convert that // tree to become a TOCModel::TOCEntry tree with returned root that is // used in the Tabel Of Contents Dockable Widget TOCModel::TOCEntry NavProcessor::GetRootTOCEntry() { TOCModel::TOCEntry root; root.is_root = true; QList navtree = MakeHierarchy(GetTOC()); foreach(NavTOCEntry nav_entry, navtree) { AddTOCEntry(nav_entry, root); } return root; } void NavProcessor::AddTOCEntry(const NavTOCEntry & nav_entry, TOCModel::TOCEntry & parent) { TOCModel::TOCEntry toc_entry; toc_entry.text = nav_entry.title; QString href = ConvertHREFToOEBPSRelative(nav_entry.href); toc_entry.target = href; foreach(NavTOCEntry nav_child, nav_entry.children) { AddTOCEntry(nav_child, toc_entry); } parent.children.append(toc_entry); } QList NavProcessor::MakeHierarchy(const QList & toclist) { // Based on the approach used in Headings:: QList navtree = toclist; for (int i = 0; i < navtree.size(); ++i) { // As long as entries after this one are higher in level, we // continue adding them to this entry's children or grandchildren while(true) { if ((i == navtree.size() - 1) || (navtree[ i + 1 ].lvl <= navtree[ i ].lvl)) { break; } AddChildEntry(navtree[ i ], navtree[ i + 1 ]); // The removeAt function will "push down" the rest // of the elements in the list by one after // it removes this element navtree.removeAt(i + 1); } } return navtree; } // Adds the new_child heading to the parent heading; // the new_child is propagated down the tree (to its children) if needed void NavProcessor::AddChildEntry(NavTOCEntry &parent, NavTOCEntry new_child) { if ((!parent.children.isEmpty()) && (parent.children.last().lvl < new_child.lvl)) { AddChildEntry(parent.children.last(), new_child); } else { parent.children.append(new_child); } } // Interface from EditTOC Dialog to Set the Nav TOC // passes in TOCModel::TOCEntry root // So convert to flat Nav TOC Entry list and rebuild the Nav TOC Section void NavProcessor::GenerateNavTOCFromTOCEntries(const TOCModel::TOCEntry& root) { QList toclist; foreach(TOCModel::TOCEntry entry, root.children) { toclist.append(AddEditTOCEntry(entry, 1)); } SetTOC(toclist); } // Used by GenerateNavTOCFromTOCEntries QList NavProcessor::AddEditTOCEntry(TOCModel::TOCEntry & entry, int lvl) { QList toclist; NavTOCEntry te; te.title = entry.text; QString href = ConvertOEBPSToNavRelative(entry.target); te.href = href; te.lvl = lvl; toclist.append(te); foreach(TOCModel::TOCEntry child, entry.children) { toclist.append(AddEditTOCEntry(child, lvl+1)); } return toclist; } // Utility Routines to convert hrefs from NCX Relative to Nav Relative and Back // convert nav relative paths to be relative to OEBPS folder // Nav lives in OEBPS/Text/ in Sigil // NCX lives in OEBPS/ in Sigil QString NavProcessor::ConvertHREFToOEBPSRelative(const QString & href) { QString new_href = href; QString nav_href = m_NavResource->GetRelativePathToOEBPS(); if (new_href.startsWith("./")) { // handles "./" and "./Section0001.xhtml" new_href.remove(0,2); if (new_href.isEmpty()) { new_href = nav_href; } else { new_href = "Text/" + new_href; } } else if (new_href.startsWith("#")) { // handles "#toc" new_href = nav_href + new_href; } else if (new_href.startsWith("../")) { // handles "../Text/blah" new_href.remove(0,3); QStringList parts = new_href.split('/', QString::KeepEmptyParts); QString folder = parts.at(0); if (!SIGIL_FOLDERS.contains(folder)) { new_href = "Text/" + new_href; } } else { // handles "Section0001.xhtml#frag" QStringList parts = new_href.split('/', QString::KeepEmptyParts); QString folder = parts.at(0); if (!SIGIL_FOLDERS.contains(folder)) { new_href = "Text/" + new_href; } } return new_href; } // convert oebps relative paths to be relative to the Text folder // Nav lives in OEBPS/Text/ in Sigil // NCX lives in OEBPS/ in Sigil QString NavProcessor::ConvertOEBPSToNavRelative(const QString & href) { QString new_href = href; QString nav_href = m_NavResource->GetRelativePathToOEBPS(); QStringList pieces = new_href.split('#', QString::KeepEmptyParts); QString basepath = pieces.at(0); QString fragment = ""; if (pieces.size() > 1) fragment = pieces.at(1); if ((basepath == nav_href) && !fragment.isEmpty()) { new_href = "#" + fragment; } else if (!new_href.startsWith("http://")) { new_href = "../" + new_href; } return new_href; } Sigil-0.9.9/src/ResourceObjects/NavProcessor.h000077500000000000000000000070101321676412500212750ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2016 Kevin B. Hendricks Stratford, ON, Canada ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #ifndef NAVPROCESSORH #define NAVPROCESSORH #include #include #include "BookManipulation/Book.h" #include "BookManipulation/Headings.h" #include "ResourceObjects/HTMLResource.h" #include "Misc/GumboInterface.h" #include "MainUI/TOCModel.h" struct NavTOCEntry { int lvl; QString title; QString href; // allow for either flat or hierarchical use QList children; }; struct NavPageListEntry { QString pagename; QString href; }; struct NavLandmarkEntry { QString etype; QString title; QString href; }; class NavProcessor { public: NavProcessor(HTMLResource * nav_resource); ~NavProcessor(); QList GetTOC(); QList GetLandmarks(); QList GetPageList(); // Set Nav Section from Actual Book Headings bool GenerateTOCFromBookContents(const Book* book); // Set Nav Section from TOCEntry Tree void GenerateNavTOCFromTOCEntries(const TOCModel::TOCEntry& root); // Get current Nav as TOCEntry Tree TOCModel::TOCEntry GetRootTOCEntry(); // For Working with Landmarks void AddLandmarkCode(const Resource * resource, QString new_code, bool toggle = true); void RemoveLandmarkForResource(const Resource * resource); QString GetLandmarkCodeForResource(const Resource * resource); QString GetLandmarkNameForResource(const Resource * resource); QHash GetLandmarkCodeForPaths(); QHash GetLandmarkNameForPaths(); private: QString BuildTOC(const QList & toclist); QString BuildLandmarks(const QList & landlist); QString BuildPageList(const QList & pagelist); void SetTOC(const QList & toclist); void SetLandmarks(const QList & landlist); void SetPageList(const QList & pagelist); int GetResourceLandmarkPos(const Resource * resource, const QList & landlist); QList GetNodeTOC(GumboInterface & gi, const GumboNode* node, int lvl); QList HeadingWalker(const Headings::Heading & heading, int lvl); void AddTOCEntry(const NavTOCEntry & nav_entry, TOCModel::TOCEntry & parent); QList MakeHierarchy(const QList & toclist); void AddChildEntry(NavTOCEntry &parent, NavTOCEntry new_child); QList AddEditTOCEntry(TOCModel::TOCEntry & rentry, int lvl); QString ConvertHREFToOEBPSRelative(const QString & href); QString ConvertOEBPSToNavRelative(const QString & href); HTMLResource * m_NavResource; }; #endif // NAVPROCESSORH Sigil-0.9.9/src/ResourceObjects/OPFParser.cpp000066400000000000000000000331671321676412500210160ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin B. Hendricks, John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Misc/EmbeddedPython.h" #include "Misc/Utility.h" #include "ResourceObjects/OPFParser.h" /** * Package tag */ PackageEntry::PackageEntry(const QString& version, const QString& uniqueid, const QStringList& keylist, const QStringList& vallist) : m_version(version), m_uniqueid(uniqueid) { int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } PackageEntry::PackageEntry(const QVariant& qv) : m_version(""), m_uniqueid(""), m_atts(QHash()) { // tuple: (version, uniqueid, keylist, vallist) QList tup = qv.toList(); if (tup.size() == 4) { m_version = tup.at(0).toString(); m_uniqueid = tup.at(1).toString(); QStringList keylist = tup.at(2).toStringList(); QStringList vallist = tup.at(3).toStringList(); int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } } QString PackageEntry::convert_to_xml() const { QStringList xmlres; xmlres << "\n"; return xmlres.join(QString("")); } /** * metadata namespace attributes */ MetaNSEntry::MetaNSEntry(const QStringList& keylist, const QStringList& vallist) { int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } MetaNSEntry::MetaNSEntry(const QVariant& qv) : m_atts(QHash()) { // tuple: (keylist, vallist) QList tup = qv.toList(); if (tup.size() == 2) { QStringList keylist = tup.at(0).toStringList(); QStringList vallist = tup.at(1).toStringList(); int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } } QString MetaNSEntry::convert_to_xml() const { QStringList xmlres; xmlres << " \n"; return xmlres.join(QString("")); } /** * metadata tags */ MetaEntry::MetaEntry(const QString& name, const QString& content, const QStringList& keylist, const QStringList& vallist) : m_name(name), m_content(content) { int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } MetaEntry::MetaEntry(const QVariant& qv) : m_name(""), m_content("") { // tuple: (tagname, content, keylist, vallist) QList tup = qv.toList(); if (tup.size() == 4) { m_name = tup.at(0).toString(); m_content = tup.at(1).toString(); QStringList keylist = tup.at(2).toStringList(); QStringList vallist = tup.at(3).toStringList(); int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } } QString MetaEntry::convert_to_xml() const { QStringList xmlres; xmlres << " <" + m_name; foreach (QString kv, m_atts.keys()) { QString val = m_atts.value(kv,""); val.replace("\"", """); xmlres << " " + kv + "=\"" + val + "\""; } if (m_content.isEmpty()) { xmlres << " />\n"; } else { xmlres << ">" + m_content + "\n"; } return xmlres.join(QString("")); } /** * manifest tags */ ManifestEntry::ManifestEntry(const QString& id, const QString& href, const QString& mtype, const QStringList& keylist, const QStringList& vallist) : m_id(id), m_href(href), m_mtype(mtype) { int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } ManifestEntry::ManifestEntry(const QVariant& qv) : m_id(""), m_href(""), m_mtype("") { QList tup = qv.toList(); // tuple (id, href, media-type, keylist, vallist) if (tup.size() == 5) { m_id = tup.at(0).toString(); m_href = tup.at(1).toString(); m_mtype = tup.at(2).toString(); QStringList keylist = tup.at(3).toStringList(); QStringList vallist = tup.at(4).toStringList(); int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } } QString ManifestEntry::convert_to_xml() const { QStringList xmlres; xmlres << " \n"; return xmlres.join(QString("")); } /** * spine attributes */ SpineAttrEntry::SpineAttrEntry(const QStringList& keylist, const QStringList& vallist) { int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } SpineAttrEntry::SpineAttrEntry(const QVariant& qv) : m_atts(QHash()) { // tuple (keylist, vallist) QList tup = qv.toList(); if (tup.size() == 2) { QStringList keylist = tup.at(0).toStringList(); QStringList vallist = tup.at(1).toStringList(); int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } } QString SpineAttrEntry::convert_to_xml() const { QStringList xmlres; xmlres << " \n"; return xmlres.join(QString("")); } /** * spine tags */ SpineEntry::SpineEntry(const QString& idref, const QStringList& keylist, const QStringList& vallist) : m_idref(idref) { int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } SpineEntry::SpineEntry(const QVariant& qv) : m_idref("") { QList tup = qv.toList(); // tuple (idref, keylist, vallist) if (tup.size() == 3) { m_idref = tup.at(0).toString(); QStringList keylist = tup.at(1).toStringList(); QStringList vallist = tup.at(2).toStringList(); int n = keylist.size(); if (n == vallist.size()) { for (int i=0; i < n; i++) { m_atts[keylist.at(i)] = vallist.at(i); } } } } QString SpineEntry::convert_to_xml() const { QStringList xmlres; xmlres << " \n"; return xmlres.join(QString("")); } /** * guide tags */ GuideEntry::GuideEntry(const QString& gtype, const QString& gtitle, const QString& ghref) : m_type(gtype), m_title(gtitle), m_href(ghref) { } GuideEntry::GuideEntry(const QVariant& qv) : m_type(""), m_title(""), m_href("") { // tuple (type, title, href) QList tup = qv.toList(); if (tup.size() == 3) { m_type = tup.at(0).toString(); m_title = tup.at(1).toString(); m_href = tup.at(2).toString(); } } QString GuideEntry::convert_to_xml() const { QStringList xmlres; xmlres << " \n"; return xmlres.join(QString("")); } /** * bindings tags */ BindingsEntry::BindingsEntry(const QString& mtype, const QString& handler) : m_mtype(mtype), m_handler(handler) { } BindingsEntry::BindingsEntry(const QVariant& qv) : m_mtype(""), m_handler("") { // tuple (media-type, handler) QList tup = qv.toList(); if (tup.size() == 2) { m_mtype = tup.at(0).toString(); m_handler = tup.at(1).toString(); } } QString BindingsEntry::convert_to_xml() const { QStringList xmlres; xmlres << " \n"; return xmlres.join(QString("")); } void OPFParser::parse(const QString& source) { int rv = 0; QString traceback; QList args; args.append(QVariant(source)); EmbeddedPython* epp = EmbeddedPython::instance(); QVariant res = epp->runInPython( QString("opf_newparser"), QString("parseopf"), args, &rv, traceback, true); if (rv) fprintf(stderr, "setext parseropf error %d traceback %s\n",rv, traceback.toStdString().c_str()); PyObjectPtr mpo = PyObjectPtr(res); args.clear(); res = epp->callPyObjMethod(mpo, QString("get_package"), args, &rv, traceback); if (rv) fprintf(stderr, "setext package error %d traceback %s\n",rv, traceback.toStdString().c_str()); m_package = PackageEntry(res); res = epp->callPyObjMethod(mpo, QString("get_metadata_attr"), args, &rv, traceback); if (rv) fprintf(stderr, "setext meta_attr error %d traceback %s\n",rv, traceback.toStdString().c_str()); m_metans = MetaNSEntry(res); res = epp->callPyObjMethod(mpo, QString("get_metadata"), args, &rv, traceback); if (rv) fprintf(stderr, "setext metadata error %d traceback %s\n",rv, traceback.toStdString().c_str()); m_metadata.clear(); QList lst = res.toList(); foreach(QVariant qv, lst) { m_metadata.append(MetaEntry(qv)); } m_idpos.clear(); m_hrefpos.clear(); res = epp->callPyObjMethod(mpo, QString("get_manifest"), args, &rv, traceback); if (rv) fprintf(stderr, "setext manifest error %d traceback %s\n",rv, traceback.toStdString().c_str()); m_manifest.clear(); lst = res.toList(); for (int i = 0; i < lst.count(); i++) { ManifestEntry me = ManifestEntry(lst.at(i)); m_idpos[me.m_id] = i; m_hrefpos[me.m_href] = i; m_manifest.append(me); } res = epp->callPyObjMethod(mpo, QString("get_spine_attr"), args, &rv, traceback); if (rv) fprintf(stderr, "setext spineattr error %d traceback %s\n",rv, traceback.toStdString().c_str()); m_spineattr = SpineAttrEntry(res); res = epp->callPyObjMethod(mpo, QString("get_spine"), args, &rv, traceback); if (rv) fprintf(stderr, "setext spine error %d traceback %s\n",rv, traceback.toStdString().c_str()); m_spine.clear(); lst = res.toList(); foreach(QVariant qv, lst) { m_spine.append(SpineEntry(qv)); } res = epp->callPyObjMethod(mpo, QString("get_guide"), args, &rv, traceback); if (rv) fprintf(stderr, "setext guide error %d traceback %s\n",rv, traceback.toStdString().c_str()); m_guide.clear(); lst = res.toList(); foreach(QVariant qv, lst) { m_guide.append(GuideEntry(qv)); } res = epp->callPyObjMethod(mpo, QString("get_bindings"), args, &rv, traceback); if (rv) fprintf(stderr, "setext bindings error %d traceback %s\n",rv, traceback.toStdString().c_str()); m_bindings.clear(); lst = res.toList(); foreach(QVariant qv, lst) { m_bindings.append(BindingsEntry(qv)); } } QString OPFParser::convert_to_xml() const { QStringList xmlres; xmlres << "\n"; xmlres << m_package.convert_to_xml(); xmlres << m_metans.convert_to_xml(); foreach (MetaEntry me, m_metadata) { xmlres << me.convert_to_xml(); } xmlres << " \n"; xmlres << " \n"; foreach (ManifestEntry me, m_manifest) { xmlres << me.convert_to_xml(); } xmlres << " \n"; xmlres << m_spineattr.convert_to_xml(); foreach(SpineEntry sp, m_spine) { xmlres << sp.convert_to_xml(); } xmlres << " \n"; if ((m_guide.size() > 0) || (m_package.m_version.startsWith("2"))) { xmlres << " \n"; foreach(GuideEntry ge, m_guide) { xmlres << ge.convert_to_xml(); } xmlres << " \n"; } if ((m_bindings.size() > 0) && (!m_package.m_version.startsWith("2"))) { xmlres << " \n"; foreach(BindingsEntry be, m_bindings) { xmlres << be.convert_to_xml(); } xmlres << " \n"; } xmlres << "\n"; return xmlres.join(""); } Sigil-0.9.9/src/ResourceObjects/OPFParser.h000066400000000000000000000116421321676412500204550ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin B. Hendricks, John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef _OPFENTRY_H #define _OPFENTRY_H #include #include #include #include struct PackageEntry { QString m_version; QString m_uniqueid; QHash m_atts; PackageEntry() : m_version("2.0"), m_uniqueid("Bookid"), m_atts(QHash()) {}; PackageEntry(const QVariant&); PackageEntry(const QString&, const QString&, const QStringList&, const QStringList&); PackageEntry(const PackageEntry& entry) : m_version(entry.m_version), m_uniqueid(entry.m_uniqueid), m_atts(entry.m_atts) {}; QString convert_to_xml() const; }; struct MetaNSEntry { QHash m_atts; MetaNSEntry() : m_atts(QHash()) {}; MetaNSEntry(const QVariant&); MetaNSEntry(const QStringList&, const QStringList&); MetaNSEntry(const MetaNSEntry& entry) : m_atts(entry.m_atts) {}; QString convert_to_xml() const; }; struct MetaEntry { QString m_name; QString m_content; QHash m_atts; MetaEntry() : m_name(""), m_content(""), m_atts(QHash()) {}; MetaEntry(const QVariant&); MetaEntry(const QString&, const QString&, const QStringList&, const QStringList&); MetaEntry(const MetaEntry& entry) : m_name(entry.m_name), m_content(entry.m_content), m_atts(entry.m_atts) {}; QString convert_to_xml() const; }; struct ManifestEntry { QString m_id; QString m_href; QString m_mtype; QHash m_atts; ManifestEntry() : m_id(""), m_href(""), m_mtype(""), m_atts(QHash()) {} ; ManifestEntry(const QVariant&); ManifestEntry(const QString&, const QString&, const QString&, const QStringList&, const QStringList&); ManifestEntry(const ManifestEntry& entry) : m_id(entry.m_id), m_href(entry.m_href), m_mtype(entry.m_mtype), m_atts(entry.m_atts) {}; QString convert_to_xml() const; }; struct SpineAttrEntry { QHash m_atts; SpineAttrEntry() : m_atts(QHash()) {}; SpineAttrEntry(const QVariant&); SpineAttrEntry(const QStringList&, const QStringList&); SpineAttrEntry(const SpineAttrEntry& entry) : m_atts(entry.m_atts) {}; QString convert_to_xml() const; }; struct SpineEntry { QString m_idref; QHash m_atts; SpineEntry() : m_idref(""), m_atts(QHash()) {}; SpineEntry(const QVariant&); SpineEntry(const QString&, const QStringList&, const QStringList&); SpineEntry(const SpineEntry& entry) : m_idref(entry.m_idref), m_atts(entry.m_atts) {}; QString convert_to_xml() const; }; struct GuideEntry { QString m_type; QString m_title; QString m_href; GuideEntry() : m_type(""), m_title(""), m_href("") {}; GuideEntry(const QVariant&); GuideEntry(const QString&, const QString&, const QString&); GuideEntry(const GuideEntry& entry) : m_type(entry.m_type), m_title(entry.m_title), m_href(entry.m_href) {}; QString convert_to_xml() const; }; struct BindingsEntry { QString m_mtype; QString m_handler; BindingsEntry() : m_mtype(""), m_handler("") {}; BindingsEntry(const QVariant&); BindingsEntry(const QString&, const QString&); BindingsEntry(const BindingsEntry& entry) : m_mtype(entry.m_mtype), m_handler(entry.m_handler) {}; QString convert_to_xml() const; }; struct OPFParser { PackageEntry m_package; MetaNSEntry m_metans; QList m_metadata; QList m_manifest; SpineAttrEntry m_spineattr; QList m_spine; QList m_guide; QList m_bindings; QHash m_idpos; QHash m_hrefpos; OPFParser(): m_idpos(QHash()), m_hrefpos(QHash()) {}; void parse(const QString & source); QString convert_to_xml() const; }; #endif Sigil-0.9.9/src/ResourceObjects/OPFResource.cpp000066400000000000000000001325171321676412500213500ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015, 2016 Kevin B. Hendricks Stratford, ON Canada ** Copyright (C) 2013 John Schember ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include #include #include #include "BookManipulation/CleanSource.h" #include "BookManipulation/XhtmlDoc.h" #include "Misc/Utility.h" #include "Misc/SettingsStore.h" #include "Misc/GuideItems.h" #include "Misc/Landmarks.h" #include "ResourceObjects/HTMLResource.h" #include "ResourceObjects/ImageResource.h" #include "ResourceObjects/NCXResource.h" #include "ResourceObjects/OPFResource.h" #include "ResourceObjects/OPFParser.h" #include "ResourceObjects/NavProcessor.h" #include "sigil_constants.h" static const QString SIGIL_VERSION_META_NAME = "Sigil version"; static const QString OPF_XML_NAMESPACE = "http://www.idpf.org/2007/opf"; static const QString FALLBACK_MIMETYPE = "text/plain"; static const QString ITEM_ELEMENT_TEMPLATE = ""; static const QString ITEMREF_ELEMENT_TEMPLATE = ""; static const QString OPF_REWRITTEN_COMMENT = ""; static const QString PKG_VERSION = "<\\s*package[^>]*version\\s*=\\s*[\"\']([^\'\"]*)[\'\"][^>]*>"; static const QString TEMPLATE_TEXT = "\n" "\n\n" " \n" " urn:uuid:%1\n" " %2\n" " %3\n" " \n\n" " \n" " \n" " \n\n" " \n" " \n\n" " \n\n\n\n" ""; /** ** Epub 3 reserved prefix values for the package tag. ** See http://www.idpf.org/epub/vocab/package/pfx/ ** ** Prefix IRI ** --------- --------------------------------------------------------- ** dcterms http://purl.org/dc/terms/ ** epubsc http://idpf.org/epub/vocab/sc/# ** marc http://id.loc.gov/vocabulary/ ** media http://www.idpf.org/epub/vocab/overlays/# ** onix http://www.editeur.org/ONIX/book/codelists/current.html# ** rendition http://www.idpf.org/vocab/rendition/# ** schema http://schema.org/ ** xsd http://www.w3.org/2001/XMLSchema# ** ** ** Note single space is required after ":" that delimits the prefix ** ** example: ** ** ** */ // " \n" // " \n" static const QString TEMPLATE3_TEXT = "\n" "\n\n" " \n" " urn:uuid:%1\n" " %2\n" " %3\n" " \n\n" " \n" " \n" " \n\n" " \n" " \n\n" " \n\n\n\n" ""; OPFResource::OPFResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : XMLResource(mainfolder, fullfilepath, parent), m_NavResource(NULL), m_WarnedAboutVersion(false) { CreateMimetypes(); FillWithDefaultText(); // Make sure the file exists on disk. // Among many reasons, this also solves the problem // with the Book Browser not displaying an icon for this resource. SaveToDisk(); } bool OPFResource::RenameTo(const QString &new_filename) { // The user is not allowed to rename the OPF file. return false; } Resource::ResourceType OPFResource::Type() const { return Resource::OPFResourceType; } QString OPFResource::GetText() const { return TextResource::GetText(); } void OPFResource::SetText(const QString &text) { QWriteLocker locker(&GetLock()); QString source = ValidatePackageVersion(text); TextResource::SetText(source); } QHash OPFResource::GetReadingOrderAll( const QList resources) { QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QHash reading_order; QHash id_order; for (int i = 0; i < p.m_spine.count(); ++i) { id_order[p.m_spine.at(i).m_idref] = i; } QHash id_mapping = GetResourceManifestIDMapping(resources, p); foreach(Resource *resource, resources) { reading_order[resource] = id_order[id_mapping[resource]]; } return reading_order; } int OPFResource::GetReadingOrder(const HTMLResource *html_resource) const { QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); const Resource *resource = static_cast(html_resource); QString resource_id = GetResourceManifestID(resource, p); for (int i = 0; i < p.m_spine.count(); ++i) { QString idref = p.m_spine.at(i).m_idref; if (resource_id == idref) { return i; } } return -1; } QString OPFResource::GetMainIdentifierValue() const { QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); int i = GetMainIdentifier(p); if (i > -1) { return QString(p.m_metadata.at(i).m_content); } return QString(); } void OPFResource::SaveToDisk(bool book_wide_save) { QString source = ValidatePackageVersion(CleanSource::ProcessXML(GetText(),"application/oebps-package+xml")); // Work around for covers appearing on the Nook. Issue 942. source = source.replace(QRegularExpression(" -1) { ManifestEntry me = p.m_manifest.at(pos); QString href = me.m_href; me.m_href = ncx->Filename(); p.m_manifest.replace(pos, me); p.m_hrefpos.remove(href); p.m_hrefpos[ncx->Filename()] = pos; UpdateText(p); } } void OPFResource::AddSigilVersionMeta() { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); for (int i=0; i < p.m_metadata.count(); ++i) { MetaEntry me = p.m_metadata.at(i); if ((me.m_name == "meta") && (me.m_atts.contains("name"))) { QString name = me.m_atts[QString("name")]; if (name == SIGIL_VERSION_META_NAME) { me.m_atts["content"] = QString(SIGIL_VERSION); p.m_metadata.replace(i, me); UpdateText(p); return; } } } MetaEntry me; me.m_name = "meta"; me.m_atts[QString("name")] = QString("Sigil version"); me.m_atts[QString("content")] = QString(SIGIL_VERSION); p.m_metadata.append(me); UpdateText(p); } bool OPFResource::IsCoverImage(const ImageResource *image_resource) const { QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QString resource_id = GetResourceManifestID(image_resource, p); return IsCoverImageCheck(resource_id, p); } bool OPFResource::IsCoverImageCheck(QString resource_id, const OPFParser & p) const { int pos = GetCoverMeta(p); if (pos > -1) { MetaEntry me = p.m_metadata.at(pos); return me.m_atts.value(QString("content"),QString("")) == resource_id; } return false; } bool OPFResource::CoverImageExists() const { QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); return GetCoverMeta(p) > -1; } void OPFResource::AutoFixWellFormedErrors() { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); SetText(source); } QStringList OPFResource::GetSpineOrderFilenames() const { QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QStringList filenames_in_reading_order; for (int i=0; i < p.m_spine.count(); ++i) { SpineEntry sp = p.m_spine.at(i); QString idref = sp.m_idref; int pos = p.m_idpos.value(idref,-1); if (pos > -1) { QString href = p.m_manifest.at(pos).m_href; QString filename = QFileInfo(href).fileName(); filenames_in_reading_order.append(filename); } } return filenames_in_reading_order; } QList OPFResource::GetDCMetadata() const { QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QList metadata; for (int i=0; i < p.m_metadata.count(); ++i) { if (p.m_metadata.at(i).m_name.startsWith("dc:")) { MetaEntry me(p.m_metadata.at(i)); metadata.append(me); } } return metadata; } QList OPFResource::GetDCMetadataValues(QString text) const { QList values; foreach(MetaEntry meta, GetDCMetadata()) { if (meta.m_name == text) { values.append(meta.m_content); } } return values; } void OPFResource::SetDCMetadata(const QList &metadata) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); // this will not work with refines so it needs to be fixed RemoveDCElements(p); foreach(MetaEntry book_meta, metadata) { MetaEntry me(book_meta); me.m_content = me.m_content.toHtmlEscaped(); p.m_metadata.append(me); } UpdateText(p); } void OPFResource::AddResource(const Resource *resource) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); ManifestEntry me; me.m_id = GetUniqueID(GetValidID(resource->Filename()),p); me.m_href = resource->GetRelativePathToOEBPS(); me.m_mtype = GetResourceMimetype(resource); // Argh! If this is an new blank resource - it will have no content yet // so trying to parse it here to check for manifest properties is a mistake // if (resource->Type() == Resource::HTMLResourceType) { // if (p.m_package.m_version == "3.0") { // const HTMLResource * html_resource = qobject_cast(resource); // QStringList properties = html_resource->GetManifestProperties(); // if (properties.count() > 0) { // me.m_atts["properties"] = properties.join(QString(" ")); // } // } // } int n = p.m_manifest.count(); p.m_manifest.append(me); p.m_idpos[me.m_id] = n; p.m_hrefpos[me.m_href] = n; if (resource->Type() == Resource::HTMLResourceType) { SpineEntry se; se.m_idref = me.m_id; p.m_spine.append(se); } UpdateText(p); } void OPFResource::RemoveCoverImageProperty(QString& resource_id, OPFParser& p) { // remove the cover image property from manifest with resource_id if (!resource_id.isEmpty()) { int pos = p.m_idpos.value(resource_id, -1); if (pos >= 0 ) { ManifestEntry me = p.m_manifest.at(p.m_idpos[resource_id]); QString properties = me.m_atts.value("properties", ""); if (properties.contains("cover-image")) { properties = properties.remove("cover-image"); properties = properties.simplified(); } me.m_atts.remove("properties"); if (!properties.isEmpty()) { me.m_atts["properties"] = properties; } p.m_manifest.replace(pos, me); } } } void OPFResource::AddCoverImageProperty(QString& resource_id, OPFParser& p) { // add the cover image property from manifest with resource_id if (!resource_id.isEmpty()) { int pos = p.m_idpos.value(resource_id, -1); if (pos >= 0 ) { ManifestEntry me = p.m_manifest.at(p.m_idpos[resource_id]); QString properties = me.m_atts.value("properties", "cover-image"); if (!properties.contains("cover-image")) { properties = properties.append(" cover-image"); } me.m_atts.remove("properties"); me.m_atts["properties"] = properties; p.m_manifest.replace(pos, me); } } } void OPFResource::RemoveCoverMetaForImage(const Resource *resource, OPFParser& p) { int pos = GetCoverMeta(p); QString resource_id = GetResourceManifestID(resource, p); // Remove entry if there is a cover in meta and if this file is marked as cover if (pos > -1) { MetaEntry me = p.m_metadata.at(pos); if (me.m_atts.value(QString("content"),QString("")) == resource_id) { p.m_metadata.removeAt(pos); } } } void OPFResource::AddCoverMetaForImage(const Resource *resource, OPFParser &p) { int pos = GetCoverMeta(p); QString resource_id = GetResourceManifestID(resource, p); // If a cover entry exists, update its id, else create one if (pos > -1) { MetaEntry me = p.m_metadata.at(pos); me.m_atts["content"] = resource_id; p.m_metadata.replace(pos, me); } else { MetaEntry me; me.m_name = "meta"; me.m_atts["name"] = "cover"; me.m_atts["content"] = QString(resource_id); p.m_metadata.append(me); } } void OPFResource::RemoveResource(const Resource *resource) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); if (p.m_manifest.isEmpty()) return; QString resource_oebps_path = resource->GetRelativePathToOEBPS(); int pos = p.m_hrefpos.value(resource_oebps_path, -1); QString item_id = ""; // Delete the meta tag for cover images before deleting the manifest entry if (resource->Type() == Resource::ImageResourceType) { RemoveCoverMetaForImage(resource, p); } if (pos > -1) { item_id = p.m_manifest.at(pos).m_id; } if (resource->Type() == Resource::HTMLResourceType) { for (int i=0; i < p.m_spine.count(); ++i) { QString idref = p.m_spine.at(i).m_idref; if (idref == item_id) { p.m_spine.removeAt(i); break; } } RemoveGuideReferenceForResource(resource, p); QString version = GetEpubVersion(); if (version.startsWith('3')) { NavProcessor navproc(GetNavResource()); navproc.RemoveLandmarkForResource(resource); } } if (pos > -1) { p.m_manifest.removeAt(pos); // rebuild the maps since updating them item by item would be slower p.m_idpos.clear(); p.m_hrefpos.clear(); for (int i=0; i < p.m_manifest.count(); ++i) { p.m_idpos[p.m_manifest.at(i).m_id] = i; p.m_hrefpos[p.m_manifest.at(i).m_href] = i; } } UpdateText(p); } void OPFResource::AddGuideSemanticCode(HTMLResource *html_resource, QString new_code, bool toggle) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QString current_code = GetGuideSemanticCodeForResource(html_resource, p); if ((current_code != new_code) || !toggle) { RemoveDuplicateGuideCodes(new_code, p); SetGuideSemanticCodeForResource(new_code, html_resource, p); } else { // If the current code is the same as the new one, // we toggle it off. RemoveGuideReferenceForResource(html_resource, p); } UpdateText(p); } QString OPFResource::GetGuideSemanticCodeForResource(const Resource *resource, const OPFParser &p) const { QString gtype; int pos = GetGuideReferenceForResourcePos(resource, p); if (pos > -1) { GuideEntry ge = p.m_guide.at(pos); gtype = ge.m_type; } return gtype; } int OPFResource::GetGuideReferenceForResourcePos(const Resource *resource, const OPFParser &p) const { QString resource_oebps_path = resource->GetRelativePathToOEBPS(); for (int i=0; i < p.m_guide.count(); ++i) { GuideEntry ge = p.m_guide.at(i); QString href = ge.m_href; QStringList parts = href.split('#', QString::KeepEmptyParts); if (parts.at(0) == resource_oebps_path) { return i; } } return -1; } void OPFResource::RemoveDuplicateGuideCodes(QString code, OPFParser& p) { // Industry best practice is to have only one // reference type instance per xhtml file. // For NoType, there is nothing to remove. if (code.isEmpty()) return; if (p.m_guide.isEmpty()) return; // build up the list to be deleted in reverse order QList dellist; for (int i = p.m_guide.count() - 1; i >= 0; --i) { GuideEntry ge = p.m_guide.at(i); QString gtype = ge.m_type; if (gtype == code) { dellist.append(i); } } // remove them from the list in reverse order foreach(int index, dellist) { p.m_guide.removeAt(index); } } void OPFResource::RemoveGuideReferenceForResource(const Resource *resource, OPFParser& p) { if (p.m_guide.isEmpty()) return; int pos = GetGuideReferenceForResourcePos(resource, p); if (pos > -1) { p.m_guide.removeAt(pos); } } void OPFResource::SetGuideSemanticCodeForResource(QString code, const Resource *resource, OPFParser& p) { if (code.isEmpty()) return; int pos = GetGuideReferenceForResourcePos(resource, p); QString title = GuideItems::instance()->GetName(code); if (pos > -1) { GuideEntry ge = p.m_guide.at(pos); ge.m_type = code; ge.m_title = title; p.m_guide.replace(pos, ge); } else { GuideEntry ge; ge.m_type = code; ge.m_title = title; ge.m_href = resource->GetRelativePathToOEBPS(); p.m_guide.append(ge); } } QString OPFResource::GetGuideSemanticCodeForResource(const Resource *resource) const { QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); return GetGuideSemanticCodeForResource(resource, p); } QString OPFResource::GetGuideSemanticNameForResource(Resource *resource) { return GuideItems::instance()->GetName(GetGuideSemanticCodeForResource(resource)); } QHash OPFResource::GetSemanticCodeForPaths() { QString version = GetEpubVersion(); if (version.startsWith('3')) { NavProcessor navproc(GetNavResource()); return navproc.GetLandmarkCodeForPaths(); } QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QHash semantic_types; foreach(GuideEntry ge, p.m_guide) { QString href = ge.m_href; QStringList parts = href.split('#', QString::KeepEmptyParts); QString gtype = ge.m_type; semantic_types[parts.at(0)] = gtype; } return semantic_types; } QHash OPFResource::GetGuideSemanticNameForPaths() { QString version = GetEpubVersion(); if (version.startsWith('3')) { NavProcessor navproc(GetNavResource()); return navproc.GetLandmarkNameForPaths(); } QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QHash semantic_types; foreach(GuideEntry ge, p.m_guide) { QString href = ge.m_href; QStringList parts = href.split('#', QString::KeepEmptyParts); QString gtype = ge.m_type; semantic_types[parts.at(0)] = GuideItems::instance()->GetName(gtype); } // Cover image semantics don't use reference int pos = GetCoverMeta(p); if (pos > -1) { MetaEntry me = p.m_metadata.at(pos); QString cover_id = me.m_atts.value(QString("content"),QString("")); ManifestEntry man = p.m_manifest.at(p.m_idpos[cover_id]); QString href = man.m_href; semantic_types[href] = GuideItems::instance()->GetName("cover"); } return semantic_types; } void OPFResource::SetResourceAsCoverImage(ImageResource *image_resource) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QString resource_id = GetResourceManifestID(image_resource, p); // First deal with any previous covers by removing // related metadata and manifest properties QString old_cover_resource_id; int pos = GetCoverMeta(p); if (pos > -1) { MetaEntry me = p.m_metadata.at(pos); old_cover_resource_id = me.m_atts.value(QString("content"),QString("")); p.m_metadata.removeAt(pos); } if (!old_cover_resource_id.isEmpty()) { if (p.m_package.m_version.startsWith("3")) { RemoveCoverImageProperty(old_cover_resource_id, p); } } // Now add in new metadata and manifest properties AddCoverMetaForImage(image_resource, p); if (p.m_package.m_version.startsWith("3")) { AddCoverImageProperty(resource_id, p); } UpdateText(p); } // note: under epub3 spine elements may have page properties set, so simply clearing the // spine will lose these attributes. We should try to keep as much of the spine properties // and linear attributes as we can. Either that or make the HTML Resource remember its own // spine page properties, linear attribute, etc void OPFResource::UpdateSpineOrder(const QList<::HTMLResource *> html_files) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QList new_spine; foreach(HTMLResource * html_resource, html_files) { const Resource *resource = static_cast(html_resource); QString id = GetResourceManifestID(resource, p); int found = -1; for (int i = 0; i < p.m_spine.count(); ++i) { SpineEntry se = p.m_spine.at(i); if (se.m_idref == id) { found = i; break; } } if (found > -1) { new_spine.append(p.m_spine.at(found)); } else { SpineEntry se; se.m_idref = id; new_spine.append(se); } } p.m_spine.clear(); p.m_spine = new_spine; UpdateText(p); } void OPFResource::ResourceRenamed(const Resource *resource, QString old_full_path) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QString path_to_oebps_folder = QFileInfo(GetFullPath()).absolutePath() + "/"; QString resource_oebps_path = QString(old_full_path).remove(path_to_oebps_folder); QString old_id; QString new_id; for (int i=0; i < p.m_manifest.count(); ++i) { QString href = p.m_manifest.at(i).m_href; if (href == resource_oebps_path) { ManifestEntry me = p.m_manifest.at(i); QString old_href = me.m_href; me.m_href = resource->GetRelativePathToOEBPS(); old_id = me.m_id; p.m_idpos.remove(old_id); new_id = GetUniqueID(GetValidID(resource->Filename()),p); me.m_id = new_id; p.m_idpos[new_id] = i; p.m_hrefpos.remove(old_href); p.m_hrefpos[me.m_href] = i; p.m_manifest.replace(i, me); break; } } for (int i=0; i < p.m_spine.count(); ++i) { QString idref = p.m_spine.at(i).m_idref; if (idref == old_id) { SpineEntry se = p.m_spine.at(i); se.m_idref = new_id; p.m_spine.replace(i, se); break; } } if (resource->Type() == Resource::ImageResourceType) { // Change meta entry for cover if necessary // Check using IDs since file is already renamed if (IsCoverImageCheck(old_id, p)) { // Add will automatically replace an existing id // Assumes only one cover but removing duplicates // can cause timing issues AddCoverMetaForImage(resource, p); } } UpdateText(p); } int OPFResource::GetCoverMeta(const OPFParser& p) const { for (int i = 0; i < p.m_metadata.count(); ++i) { MetaEntry me = p.m_metadata.at(i); if ((me.m_name == "meta") && (me.m_atts.contains(QString("name")))) { QString name = me.m_atts[QString("name")]; if (name == "cover") { return i; } } } return -1; } int OPFResource::GetMainIdentifier(const OPFParser& p) const { QString unique_identifier = p.m_package.m_uniqueid; for (int i=0; i < p.m_metadata.count(); ++i) { MetaEntry me = p.m_metadata.at(i); if (me.m_name == "dc:identifier") { QString id = me.m_atts.value("id", ""); if (id == unique_identifier) { return i; } } } return -1; } QString OPFResource::GetResourceManifestID(const Resource *resource, const OPFParser& p) const { QString oebps_path = resource->GetRelativePathToOEBPS(); int pos = p.m_hrefpos.value(oebps_path,-1); if (pos > -1) { return QString(p.m_manifest.at(pos).m_id); } return QString(); } QHash OPFResource::GetResourceManifestIDMapping(const QList resources, const OPFParser& p) { QHash id_mapping; foreach(Resource * resource, resources) { QString oebps_path = resource->GetRelativePathToOEBPS(); int pos = p.m_hrefpos.value(oebps_path,-1); if (pos > -1) { id_mapping[ resource ] = p.m_manifest.at(pos).m_id; } } return id_mapping; } void OPFResource::RemoveDCElements(OPFParser& p) { int pos = GetMainIdentifier(p); // build list to be delted in reverse order QList dellist; int n = p.m_metadata.count(); for (int i = n-1; i >= 0; --i) { MetaEntry me = p.m_metadata.at(i); if (me.m_name.startsWith("dc:")) { if (i != pos) { dellist.append(i); } } } // delete the MetaEntries in reverse order to not mess up indexes foreach(int index, dellist) { p.m_metadata.removeAt(index); } } void OPFResource::WriteSimpleMetadata(const QString &metaname, const QString &metavalue, OPFParser& p) { MetaEntry me; me.m_name = QString("dc:") + metaname; me.m_content = metavalue.toHtmlEscaped(); p.m_metadata.append(me); } void OPFResource::WriteIdentifier(const QString &metaname, const QString &metavalue, OPFParser& p) { int pos = GetMainIdentifier(p); if (pos > -1) { MetaEntry me = p.m_metadata.at(pos); QString scheme = me.m_atts.value(QString("scheme"),QString("")); if ((metavalue == me.m_content) && (metaname == scheme)) { return; } } MetaEntry me; me.m_name = QString("dc:identifier"); me.m_atts[QString("opf:scheme")] = metaname; if (metaname.toLower() == "uuid" && !metavalue.contains("urn:uuid:")) { me.m_content = QString("urn:uuid:") + metavalue; } else { me.m_content = metavalue; } p.m_metadata.append(me); } void OPFResource::AddModificationDateMeta() { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QString epubversion = GetEpubVersion(); if (epubversion.startsWith('3')) { // epub 3 set dcterms:modified date time in ISO 8601 format QDateTime local(QDateTime::currentDateTime()); local.setTimeSpec(Qt::UTC); QString datetime = local.toString(Qt::ISODate); // if an entry exists, update it for (int i=0; i < p.m_metadata.count(); ++i) { MetaEntry me = p.m_metadata.at(i); if (me.m_name == QString("meta")) { QString property = me.m_atts.value(QString("property"), QString("")); if (property == QString("dcterms:modified")) { me.m_content = datetime; p.m_metadata.replace(i, me); UpdateText(p); return; } } } // otherwize create a new entry MetaEntry me; me.m_name = QString("meta"); me.m_content = datetime; me.m_atts["property"]="dcterms:modified"; p.m_metadata.append(me); UpdateText(p); return; } // epub 2 version QString date; QDate d = QDate::currentDate(); // We can't use QDate.toString() because it will take into account the locale. Which mean we may not get Arabic // numerals if the local uses it's own numbering system. So we use this instead to ensure we get a valid date per // the epub spec. QTextStream(&date) << d.year() << "-" << (d.month() < 10 ? "0" : "") << d.month() << "-" << (d.day() < 10 ? "0" : "") << d.day(); // if an entry exists, update it for (int i=0; i < p.m_metadata.count(); ++i) { MetaEntry me = p.m_metadata.at(i); if (me.m_name == QString("dc:date")) { QString etype = me.m_atts.value(QString("opf:event"), QString("")); if (etype == QString("modification")) { me.m_content = date; p.m_metadata.replace(i, me); UpdateText(p); return; } } } // otherwize create a new entry MetaEntry me; me.m_name = QString("dc:date"); me.m_content = date; me.m_atts["xmlns:opf"]="http://www.idpf.org/2007/opf"; me.m_atts[QString("opf:event")] = QString("modification"); p.m_metadata.append(me); UpdateText(p); } // Yeah, we could get this list of paths with the GetSortedContentFilesList() // func from FolderKeeper, but let's not create a strong coupling from // the opf to the FK just yet. If we can work without that dependency, // then let's do so. QStringList OPFResource::GetRelativePathsToAllFilesInOEPBS() const { // The parent folder of the OPF will always be the OEBPS folder. QString path_to_oebps_folder = QFileInfo(GetFullPath()).absolutePath(); QStringList paths = Utility::GetAbsolutePathsToFolderDescendantFiles(path_to_oebps_folder); paths.replaceInStrings(Utility::URLEncodePath(path_to_oebps_folder) + "/", ""); paths.sort(); return paths; } QString OPFResource::GetOPFDefaultText(const QString &version) { SettingsStore ss; QString defaultLanguage = ss.defaultMetadataLang(); if (version.startsWith('2')) { return TEMPLATE_TEXT.arg(Utility::CreateUUID()).arg(defaultLanguage).arg(tr("[Title here]")); } return TEMPLATE3_TEXT.arg(Utility::CreateUUID()).arg(defaultLanguage).arg(tr("[Main title here]")); } void OPFResource::FillWithDefaultText() { SettingsStore ss; QString version = ss.defaultVersion(); SetEpubVersion(version); SetText(GetOPFDefaultText(version)); } QString OPFResource::GetUniqueID(const QString &preferred_id, const OPFParser& p) const { if (p.m_idpos.contains(preferred_id)) { return QString("x").append(Utility::CreateUUID()); } return preferred_id; } QString OPFResource::GetResourceMimetype(const Resource *resource) const { QString mimetype = resource->GetMediaType(); if (mimetype.isEmpty()) { mimetype = GetFileMimetype(resource->Filename()); } return mimetype; } QString OPFResource::GetFileMimetype(const QString &filepath) const { return m_Mimetypes.value(QFileInfo(filepath).suffix().toLower(), FALLBACK_MIMETYPE); } // Initializes m_Mimetypes void OPFResource::CreateMimetypes() { m_Mimetypes[ "jpg" ] = "image/jpeg"; m_Mimetypes[ "jpeg" ] = "image/jpeg"; m_Mimetypes[ "png" ] = "image/png"; m_Mimetypes[ "gif" ] = "image/gif"; m_Mimetypes[ "tif" ] = "image/tiff"; m_Mimetypes[ "tiff" ] = "image/tiff"; m_Mimetypes[ "bm" ] = "image/bmp"; m_Mimetypes[ "bmp" ] = "image/bmp"; m_Mimetypes[ "svg" ] = "image/svg+xml"; m_Mimetypes[ "ncx" ] = NCX_MIMETYPE; // We convert all HTML document types to XHTML m_Mimetypes[ "xml" ] = "application/xhtml+xml"; // m_Mimetypes[ "xml" ] = "application/oebs-page-map+xml"; m_Mimetypes[ "xhtml" ] = "application/xhtml+xml"; m_Mimetypes[ "html" ] = "application/xhtml+xml"; m_Mimetypes[ "htm" ] = "application/xhtml+xml"; m_Mimetypes[ "css" ] = "text/css"; m_Mimetypes[ "mp3" ] = "audio/mpeg"; m_Mimetypes[ "oga" ] = "audio/ogg"; m_Mimetypes[ "ogg" ] = "audio/ogg"; m_Mimetypes[ "m4a" ] = "audio/mp4"; m_Mimetypes[ "mp4" ] = "video/mp4"; m_Mimetypes[ "m4v" ] = "video/mp4"; m_Mimetypes[ "ogv" ] = "video/ogg"; m_Mimetypes[ "webm" ] = "video/webm"; m_Mimetypes[ "smil" ] = "application/smil+xml"; m_Mimetypes[ "pls" ] = "application/pls+xml"; m_Mimetypes[ "xpgt" ] = "application/adobe-page-template+xml"; m_Mimetypes[ "js" ] = "text/javascript"; // Until the standards gods grace us with font mimetypes, // these will have to do m_Mimetypes[ "otf" ] = "application/vnd.ms-opentype"; m_Mimetypes[ "ttf" ] = "application/x-font-ttf"; m_Mimetypes[ "ttc" ] = "application/x-font-truetype-collection"; m_Mimetypes[ "woff" ] = "application/font-woff"; m_Mimetypes[ "vtt" ] = "text/vtt"; m_Mimetypes[ "ttml" ] = "application/ttml+xml"; } QString OPFResource::GetRelativePathToRoot() const { QFileInfo info(GetFullPath()); QDir parent_dir = info.dir(); QString parent_name = parent_dir.dirName(); return parent_name + "/" + Filename(); } void OPFResource::UpdateText(const OPFParser &p) { TextResource::SetText(p.convert_to_xml()); } QString OPFResource::ValidatePackageVersion(const QString& source) { QString newsource = source; QString orig_version = GetEpubVersion(); QRegularExpression pkgversion_search(PKG_VERSION, QRegularExpression::CaseInsensitiveOption); QRegularExpressionMatch mo = pkgversion_search.match(newsource); if (mo.hasMatch()) { QString version = mo.captured(1); if (version != orig_version) { newsource.replace(mo.capturedStart(1), mo.capturedLength(1), orig_version); if (!m_WarnedAboutVersion && !version.startsWith('1')) { Utility::DisplayStdWarningDialog("Changing package version inside Sigil is not supported", "Use an appropriate output plugin to make the initial conversion"); m_WarnedAboutVersion = true; } } } return newsource; } void OPFResource::UpdateManifestProperties(const QList resources) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); if (p.m_package.m_version != "3.0") { return; } foreach(Resource* resource, resources) { const HTMLResource* html_resource = static_cast(resource); // do not overwrite the nav property, it must stay no matter what if (html_resource != m_NavResource) { QString href = html_resource->GetRelativePathToOEBPS(); int pos = p.m_hrefpos.value(href, -1); if ((pos >= 0) && (pos < p.m_manifest.count())) { ManifestEntry me = p.m_manifest.at(pos); QStringList properties = html_resource->GetManifestProperties(); me.m_atts.remove("properties"); if (properties.count() > 0) { me.m_atts["properties"] = properties.join(QString(" ")); } p.m_manifest.replace(pos, me); } } } // now add the cover-image properties int metapos = GetCoverMeta(p); if (metapos > -1) { MetaEntry cmeta = p.m_metadata.at(metapos); QString cover_id = cmeta.m_atts.value(QString("content"),QString("")); if (!cover_id.isEmpty()) { int pos = p.m_idpos.value(cover_id, -1); if (pos >= 0 ) { ManifestEntry me = p.m_manifest.at(p.m_idpos[cover_id]); me.m_atts.remove("properties"); me.m_atts["properties"] = QString("cover-image"); p.m_manifest.replace(pos, me); } } } UpdateText(p); } QString OPFResource::GetManifestPropertiesForResource(const Resource * resource) { QString properties; if (!resource) return properties; QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); if (!p.m_package.m_version.startsWith("3")) { return properties; } QString href = resource->GetRelativePathToOEBPS(); int pos = p.m_hrefpos.value(href, -1); if ((pos >= 0) && (pos < p.m_manifest.count())) { ManifestEntry me = p.m_manifest.at(pos); properties = me.m_atts.value("properties",""); } return properties; } QHash OPFResource::GetManifestPropertiesForPaths() { QHash manifest_properties_all; QString version = GetEpubVersion(); if (!version.startsWith('3')) { return manifest_properties_all; } QReadLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); foreach(ManifestEntry me, p.m_manifest) { QString href = me.m_href; if (me.m_atts.contains("properties")){ QString properties = me.m_atts["properties"]; manifest_properties_all[href] = properties; } } return manifest_properties_all; } HTMLResource * OPFResource::GetNavResource()const { return m_NavResource; } void OPFResource::SetNavResource(HTMLResource * nav_resource) { m_NavResource = nav_resource; // Make sure the proper nav property is set in the opf manifest if (m_NavResource) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QString href = m_NavResource->GetRelativePathToOEBPS(); int pos = p.m_hrefpos.value(href, -1); if ((pos >= 0) && (pos < p.m_manifest.count())) { ManifestEntry me = p.m_manifest.at(pos); me.m_atts["properties"] = QString("nav"); p.m_manifest.replace(pos, me); } UpdateText(p); } } void OPFResource::SetItemRefLinear(Resource * resource, bool linear) { QWriteLocker locker(&GetLock()); QString source = CleanSource::ProcessXML(GetText(),"application/oebps-package+xml"); OPFParser p; p.parse(source); QString resource_oebps_path = resource->GetRelativePathToOEBPS(); int pos = p.m_hrefpos.value(resource_oebps_path, -1); QString item_id = ""; if (pos > -1) { item_id = p.m_manifest.at(pos).m_id; if (resource->Type() == Resource::HTMLResourceType) { for (int i=0; i < p.m_spine.count(); ++i) { QString idref = p.m_spine.at(i).m_idref; if (idref == item_id) { SpineEntry se = p.m_spine.at(i); se.m_atts.remove(QString("linear")); // default is linear = "yes" if (!linear) { se.m_atts[QString("linear")] = QString("no"); } p.m_spine.replace(i, se); break; } } } UpdateText(p); } } Sigil-0.9.9/src/ResourceObjects/OPFResource.h000066400000000000000000000167531321676412500210200ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2015 Kevin B. Hendricks, Stratford ON ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef OPFRESOURCE_H #define OPFRESOURCE_H #include #include "Misc/GuideItems.h" #include "ResourceObjects/XMLResource.h" #include "ResourceObjects/OPFParser.h" class HTMLResource; class ImageResource; class NCXResource; class OPFResource : public XMLResource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ OPFResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); // inherited virtual bool RenameTo(const QString &new_filename); virtual ResourceType Type() const; virtual QString GetText() const; virtual void SetText(const QString &text); QString GetGuideSemanticCodeForResource(const Resource *resource) const; QString GetGuideSemanticNameForResource(Resource *resource); QHash GetSemanticCodeForPaths(); QHash GetGuideSemanticNameForPaths(); int GetReadingOrder(const HTMLResource *html_resource) const; QHash GetReadingOrderAll( const QList resources); QString GetMainIdentifierValue() const; void SaveToDisk(bool book_wide_save = false); QString GetPackageVersion() const; // Also creates such an ident if none was found QString GetUUIDIdentifierValue(); void EnsureUUIDIdentifierPresent(); QString AddNCXItem(const QString &ncx_path); void UpdateNCXOnSpine(const QString &new_ncx_id); void UpdateNCXLocationInManifest(const NCXResource *ncx); void AddModificationDateMeta(); void AddSigilVersionMeta(); bool IsCoverImage(const ImageResource *image_resource) const; void AutoFixWellFormedErrors(); QStringList GetSpineOrderFilenames() const; void SetItemRefLinear(Resource * resource, bool linear); /** * SetSpineOrderFromFilenames * The setter to complement GetSpineOrderFilenames() * * @param An list of the content file names that must be written * in order to the spine. **/ // void SetSpineOrderFromFilenames(const QStringList spineOrder); /** * Returns the book's Dublin Core metadata. * * @return The DC metadata, in the same format as the SetDCMetadata metadata parameter. */ QList GetDCMetadata() const; /** * Returns the values for a specific dc: metadata name. * * @return A list of values */ QList GetDCMetadataValues(QString text) const; QString GetRelativePathToRoot() const; void SetNavResource(HTMLResource* nav); HTMLResource* GetNavResource() const; public slots: /** * Writes metadata to the OPF element. * * @param metadata A list with meta information about the book. */ void SetDCMetadata(const QList &metadata); void AddResource(const Resource *resource); void RemoveResource(const Resource *resource); void AddGuideSemanticCode(HTMLResource *html_resource, QString code, bool toggle = true); void SetResourceAsCoverImage(ImageResource *image_resource); void UpdateSpineOrder(const QList html_files); void ResourceRenamed(const Resource *resource, QString old_full_path); void UpdateManifestProperties(const QList resources); QString GetManifestPropertiesForResource(const Resource * resource); QHash GetManifestPropertiesForPaths(); private: /** * Determines if a cover image exists. * * @return \c true if a cover image exists. */ bool CoverImageExists() const; bool IsCoverImageCheck(QString resource_id, const OPFParser& p) const; void AddCoverImageProperty(QString& resource_id, OPFParser& p); void RemoveCoverImageProperty(QString& resource_id, OPFParser& p); void AddCoverMetaForImage(const Resource *resource, OPFParser &p); void RemoveCoverMetaForImage(const Resource *resource, OPFParser &p); // static void AppendToSpine(const QString &id); // static void RemoveFromSpine(const QString &id); // static void UpdateItemrefID(const QString &old_id, const QString &new_id); int GetMainIdentifier(const OPFParser &p) const; // CAN BE -1 which means no reference for resource int GetGuideReferenceForResourcePos(const Resource *resource, const OPFParser &p) const; void RemoveGuideReferenceForResource(const Resource *resource, OPFParser &p); QString GetGuideSemanticCodeForResource(const Resource *resource, const OPFParser &p) const; void SetGuideSemanticCodeForResource(QString code, const Resource *resource, OPFParser &p); void RemoveDuplicateGuideCodes(QString code, OPFParser &p); // CAN BE -1 means no cover meta element int GetCoverMeta(const OPFParser &p) const; QString GetResourceManifestID(const Resource *resource, const OPFParser &p) const; QHash GetResourceManifestIDMapping(const QList resources, const OPFParser &p); void RemoveDCElements(OPFParser &p); /** * Writes simple metadata. * * @param metaname The name of the metadata to be written. * @param metavalue The value of the metadata to be written. * @param document The OPF DOM document. */ void WriteSimpleMetadata(const QString &metaname, const QString &metavalue, OPFParser &p); /** * Writes the elements. * The metaname will be used for the scheme. * * @param metaname The name of the metadata to be written. * @param metavalue The value of the metadata to be written. * @param document The OPF DOM document. */ void WriteIdentifier(const QString &metaname, const QString &metavalue, OPFParser &p); QStringList GetRelativePathsToAllFilesInOEPBS() const; static QString GetOPFDefaultText(const QString &version); void FillWithDefaultText(); QString GetUniqueID(const QString &preferred_id, const OPFParser &p) const; QString GetResourceMimetype(const Resource *resource) const; QString GetFileMimetype(const QString &filepath) const; void UpdateText(const OPFParser &p); QString ValidatePackageVersion(const QString &source); /** * Initializes m_Mimetypes. */ void CreateMimetypes(); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * A mapping between file extensions * and appropriate MIME types. */ QHash m_Mimetypes; HTMLResource * m_NavResource; bool m_WarnedAboutVersion; }; #endif // OPFRESOURCE_H Sigil-0.9.9/src/ResourceObjects/Resource.cpp000066400000000000000000000146661321676412500210070ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include "Misc/Utility.h" #include "ResourceObjects/Resource.h" const int WAIT_FOR_WRITE_DELAY = 100; Resource::Resource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : QObject(parent), m_Identifier(Utility::CreateUUID()), m_MainFolder(mainfolder), m_FullFilePath(fullfilepath), m_LastSaved(0), m_LastWrittenTo(0), m_LastWrittenSize(0), m_CurrentBookRelPath(""), m_EpubVersion("2.0"), m_MediaType(""), m_ReadWriteLock(QReadWriteLock::Recursive) { } bool Resource::operator< (const Resource &other) { return Filename() < other.Filename(); } QString Resource::GetIdentifier() const { return m_Identifier; } QString Resource::Filename() const { return QFileInfo(m_FullFilePath).fileName(); } QString Resource::GetFolder() const { // Pathname of the directory within the EPUB. return QFileInfo(GetRelativePath()).absolutePath().remove(0, 1); } QString Resource::GetRelativePath() const { // Pathname of the file within the EPUB. return m_FullFilePath.right(m_FullFilePath.length() - m_MainFolder.length()); } QString Resource::GetRelativePathToOEBPS() const { return QFileInfo(m_FullFilePath).dir().dirName() + "/" + Filename(); } QString Resource::GetRelativePathToRoot() const { QFileInfo info(m_FullFilePath); QDir parent_dir = info.dir(); QString parent_name = parent_dir.dirName(); parent_dir.cdUp(); QString grandparent_name = parent_dir.dirName(); return grandparent_name + "/" + parent_name + "/" + Filename(); } QString Resource::GetFullPath() const { return m_FullFilePath; } QUrl Resource::GetBaseUrl() const { return QUrl::fromLocalFile(QFileInfo(m_FullFilePath).absolutePath() + "/"); } void Resource::SetCurrentBookRelPath(const QString& current_path) { m_CurrentBookRelPath = current_path; } QString Resource::GetCurrentBookRelPath() { if (m_CurrentBookRelPath.isEmpty()) { return GetRelativePathToRoot(); } return m_CurrentBookRelPath; } void Resource::SetEpubVersion(const QString& version) { m_EpubVersion = version; } QString Resource::GetEpubVersion() const { return m_EpubVersion; } void Resource::SetMediaType(const QString& mtype) { m_MediaType = mtype; } QString Resource::GetMediaType() const { return m_MediaType; } QReadWriteLock &Resource::GetLock() const { return m_ReadWriteLock; } QIcon Resource::Icon() const { return QFileIconProvider().icon(QFileInfo(m_FullFilePath)); } bool Resource::RenameTo(const QString &new_filename) { QString new_path; bool successful = false; { QWriteLocker locker(&m_ReadWriteLock); new_path = QFileInfo(m_FullFilePath).absolutePath() + "/" + new_filename; successful = Utility::RenameFile(m_FullFilePath, new_path); } if (successful) { QString old_path = m_FullFilePath; m_FullFilePath = new_path; emit Renamed(this, old_path); } return successful; } bool Resource::Delete() { bool successful = false; { QWriteLocker locker(&m_ReadWriteLock); successful = Utility::SDeleteFile(m_FullFilePath); } if (successful) { emit Deleted(this); deleteLater(); } return successful; } Resource::ResourceType Resource::Type() const { return Resource::GenericResourceType; } bool Resource::LoadFromDisk() { return false; } void Resource::SaveToDisk(bool book_wide_save) { const QDateTime lastModifiedDate = QFileInfo(m_FullFilePath).lastModified(); if (lastModifiedDate.isValid()) { m_LastSaved = lastModifiedDate.toMSecsSinceEpoch(); } } void Resource::FileChangedOnDisk() { QFileInfo latestFileInfo(m_FullFilePath); const QDateTime lastModifiedDate = latestFileInfo.lastModified(); m_LastWrittenTo = lastModifiedDate.isValid() ? lastModifiedDate.toMSecsSinceEpoch() : 0; m_LastWrittenSize = latestFileInfo.size(); QTimer::singleShot(WAIT_FOR_WRITE_DELAY, this, SLOT(ResourceFileModified())); } void Resource::ResourceFileModified() { QFileInfo newFileInfo(m_FullFilePath); const QDateTime lastModifiedDate = newFileInfo.lastModified(); qint64 latestWrittenTo = lastModifiedDate.isValid() ? lastModifiedDate.toMSecsSinceEpoch() : 0; qint64 latestWrittenSize = newFileInfo.size(); if (latestWrittenTo == m_LastSaved) { // The FileChangedOnDisk has triggered even though the data in the file has not changed. // This can happen if the FileWatcher is monitoring a file that Sigil has just performed // a disk operation with, such as Saving before a Merge. In this circumstance the data // loaded in memory by Sigil may be more up to date than that on disk (such as after the // merge but before user has chosen to Save) so we want to ignore the file change notification. return; } if ((latestWrittenTo != m_LastWrittenTo) || (latestWrittenSize != m_LastWrittenSize)) { // The file is still being written to. m_LastWrittenTo = latestWrittenTo; m_LastWrittenSize = latestWrittenSize; QTimer::singleShot(WAIT_FOR_WRITE_DELAY, this, SLOT(ResourceFileModified())); } else { if (LoadFromDisk()) { // will trigger marking the book as modified emit ResourceUpdatedFromDisk(this); } // will trigger updates in other resources that link to this resource emit ResourceUpdatedOnDisk(); } } Sigil-0.9.9/src/ResourceObjects/Resource.h000066400000000000000000000220141321676412500204360ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef RESOURCE_H #define RESOURCE_H #include #include #include #include /** * Represents a resource file on disk. * Stores data caches for improved performance, * enables safe multi-threaded access to the data * and holds all sorts of meta information * on the file. */ class Resource : public QObject { Q_OBJECT public: /** * Used to inspect a resource's type. * There's a reason why all of these end with *Type. If we just use the * name of the subclass without the suffix, then we get a name clash in * Resource subclasses that use other Resource subclasses. While we can * get around this with a ::, Qt's MOC is not smart enough and sees slots * that refer to, say, ::HTMLResource as having a parameter type of "::HTMLResource". * That is then incompatible with just "HTMLResource". So we use a suffix. */ enum ResourceType { GenericResourceType = 1 << 0, /**< A \em vulgaris resource; used for Misc resources. */ TextResourceType = 1 << 1, /**< Used for Text resources, but \em not HTML files. */ XMLResourceType = 1 << 2, /**< Used for Text resources, but \em not HTML files. */ HTMLResourceType = 1 << 3, /**< Used for pure (X)HTML resources. */ CSSResourceType = 1 << 4, /**< Used for CSS resources (stylesheets). */ ImageResourceType = 1 << 5, /**< Used for image resource, of all types. */ SVGResourceType = 1 << 6, /**< Used for SVG image resources. */ FontResourceType = 1 << 7, /**< Used for font resources, both TTF and OTF. */ OPFResourceType = 1 << 8, /**< Used for the OPF document. */ NCXResourceType = 1 << 9, /**< Used for the NCX table of contents. */ MiscTextResourceType = 1 << 10, /**< Used for editable text resource. */ AudioResourceType = 1 << 11, /**< Used for Audio resources. */ VideoResourceType = 1 << 12 /**< Used for Video resources. */ }; /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ Resource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); /** * The less-than operator overload. By default, compares * the resources by filename (lexical). * * @param other The other Resource object we're comparing with. */ virtual bool operator< (const Resource &other); /** * Returns the resource's UUID. * * @return The resource's UUID. */ QString GetIdentifier() const; /** * Returns the resource's filename. * * @return The resource's filename. */ QString Filename() const; QString GetFolder() const; QString GetRelativePath() const; /** * Returns the resource's path relative to the OEBPS folder. * Returned \em without leading "../" characters. * * @return The resource's path relative to the OEBPS folder. */ QString GetRelativePathToOEBPS() const; /** * Returns the resource's path relative to the publication's * root folder. Returned \em without leading "../" characters. * * @return The root-relative path. */ virtual QString GetRelativePathToRoot() const; /** * Returns the resource's full file path. * We \em really shouldn't be using this, * it kinda breaks encapsulation. * * @return The resource's full file path. */ QString GetFullPath() const; /** * Returns the URL to the parent folder ("base URL") of this resource. * * @return The base URL. */ QUrl GetBaseUrl() const; /** * gets and set the original path relative to the import location */ void SetCurrentBookRelPath(const QString& ); QString GetCurrentBookRelPath(); /** * gets and set the epub version this resource is used in */ void SetEpubVersion(const QString& ); QString GetEpubVersion() const; /** * gets and sets the resources media-type */ void SetMediaType(const QString& ); QString GetMediaType() const; /** * Returns a reference to the resource's ReadWriteLock. * * @return The resource's ReadWriteLock. */ QReadWriteLock &GetLock() const; /** * Returns the resource's icon. * * @return The resource's icon. */ QIcon Icon() const; /** * Renames the resource. * * @param new_filename The new name. * @return \c true if the operation was successful. */ virtual bool RenameTo(const QString &new_filename); /** * Deletes the resource. * * @return \c true if the operation was successful. */ virtual bool Delete(); /** * Returns the resource's type. * * @return The resource's type. */ virtual ResourceType Type() const; /** * Instructs the resource to save any cached data to disk. * The default implementation does nothing, and assumes * the resource data is not being cached in memory. * * @param book_wide_save If \c false (the default), a ResourceUpdatedOnDisk() * signal will be emitted. */ virtual void SaveToDisk(bool book_wide_save = false); /** * Called by FolderKeeper when files get changed on disk. * May trigger a resource internal update if the files were not changed by Sigil. */ void FileChangedOnDisk(); signals: /** * Emitted whenever the resource changes its name. * * @param resource The resource's that was renamed. */ void Renamed(const Resource *resource, QString old_full_path); /** * Emitted when the resource has been scheduled for deletion. * * @param resource The resource's that was deleted. */ void Deleted(const Resource *resource); /** * Emitted when the resource has been updated on disk. */ void ResourceUpdatedOnDisk(); /** * Emitted after a resource was refreshed from a newer version on disk. * Caused by book files being modified from outside Sigil. */ void ResourceUpdatedFromDisk(Resource *resource); /** * Emitted when the resource has been modified. This * modification may or may not be visible on the disk. * (this means that the ResourceUpdatedOnDisk may or may * not have been also emitted). * Note that in the cases where a user of the Resource is * using its low-level interfaces, the resource can be modified * without this signal being emitted. It is then up to the user * to emit this signal. Modifying the resource in such a way * without emitting this signal is an error. */ void Modified(); protected: /** * Update the internal resource data from the disk file. */ virtual bool LoadFromDisk(); private slots: /** * When ResourceFileChanged detects a modification this slot is activated on * a timer to wait for the file to stop changing. */ void ResourceFileModified(); private: /** * The resources identifying UUID. */ QString m_Identifier; QString m_MainFolder; /** * The full path to the resource on disk. */ QString m_FullFilePath; /** * Timestamp of when the resource was last saved to disk by Sigil. */ qint64 m_LastSaved; /** * Timestamp of when the resource was last written to by an external application. */ qint64 m_LastWrittenTo; /** * Size of the resource when last written to by an external application. */ qint64 m_LastWrittenSize; /** * The original path to this resource from its imported epub */ QString m_CurrentBookRelPath; /** * The version of epub this resource is used in */ QString m_EpubVersion; /** * The media type of the resource */ QString m_MediaType; /** * The ReadWriteLock guarding access to the resource's data. */ mutable QReadWriteLock m_ReadWriteLock; }; #endif // RESOURCE_H Sigil-0.9.9/src/ResourceObjects/SVGResource.cpp000066400000000000000000000023201321676412500213470ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "Misc/Utility.h" #include "ResourceObjects/SVGResource.h" SVGResource::SVGResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : TextResource(mainfolder, fullfilepath, parent) { } Resource::ResourceType SVGResource::Type() const { return Resource::SVGResourceType; } Sigil-0.9.9/src/ResourceObjects/SVGResource.h000066400000000000000000000030101321676412500210110ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef SVGRESOURCE_H #define SVGRESOURCE_H #include "ResourceObjects/TextResource.h" /** * Represents an Image file consisting of editable text (svg) on disk. */ class SVGResource : public TextResource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ SVGResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); // inherited virtual ResourceType Type() const; }; #endif // SVGRESOURCE_H Sigil-0.9.9/src/ResourceObjects/TextResource.cpp000066400000000000000000000143761321676412500216520ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include #include #include #include #include #include #include #include "Misc/Utility.h" #include "ResourceObjects/TextResource.h" #include "sigil_exception.h" TextResource::TextResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : Resource(mainfolder, fullfilepath, parent), m_CacheInUse(false), m_TextDocument(new QTextDocument(this)), m_IsLoaded(false) { m_TextDocument->setDocumentLayout(new QPlainTextDocumentLayout(m_TextDocument)); connect(m_TextDocument, SIGNAL(contentsChanged()), this, SIGNAL(Modified())); } QString TextResource::GetText() const { QMutexLocker locker(&m_CacheAccessMutex); if (m_CacheInUse) { return m_Cache; } return m_TextDocument->toPlainText(); } void TextResource::SetText(const QString &text) { // We need to delay updating the QTextDocument if SetText has // been called from something other than the main GUI thread. Why? // Because a CodeView is probably connected to the text document, // and if we update it from a non-GUI thread, it will notify the // CodeView base class to update as well and that will crash us since // the base class derives from QWidget (and those can only be updated // in the GUI thread). // So we cache the text update into m_Cache and update the QTextDocument // when we return to the GUI thread. The single-shot timer makes sure // of that. if (QThread::currentThread() == QApplication::instance()->thread()) { SetTextInternal(text); } else { QMutexLocker locker(&m_CacheAccessMutex); m_Cache = text; // We want to make sure we schedule only one delayed update if (!m_CacheInUse) { m_CacheInUse = true; QTimer::singleShot(0, this, SLOT(DelayedUpdateToTextDocument())); } } } QTextDocument &TextResource::GetTextDocumentForWriting() { Q_ASSERT(m_TextDocument); return *m_TextDocument; } void TextResource::SaveToDisk(bool book_wide_save) { { QWriteLocker locker(&GetLock()); if (!m_CacheInUse && !m_IsLoaded) { return; } // We can't perform the document modified check // here because that causes problems with epub export // when the user has not changed the text file. // (some text files have placeholder text on disk) // But we always want to save the most up to date version if (m_CacheInUse) { Utility::WriteUnicodeTextFile(m_Cache, GetFullPath()); } else { Utility::WriteUnicodeTextFile(GetText(), GetFullPath()); } } if (!book_wide_save) { emit ResourceUpdatedOnDisk(); } m_TextDocument->setModified(false); Resource::SaveToDisk(book_wide_save); } void TextResource::InitialLoad() { /** * Stuff to know about resource loading... * * Currently Sigil when opening an ePub creates Resource objects *prior* * to actually copying the resources from the zip into the Sigil folders. * So in 99% of cases the resource will not exist, so a call to InitialLoad() * from the constructor would fail (which it used to do). * * For some resource types there is a call made afterwards which will result * in the resource being loaded such as for HTML files, CSS, NCX and OPF * (see UniversalUpdates.cpp and code setting default text for new html pages etc). * * For other text resource types, they will only get loaded on demand, when * the tab is actually opened, TextTab.cpp will call this InitialLoad() function. * * If you were to write some code to iterate over resources that do not fall * into the special cases above, you *must* call InitialLoad() first to ensure * the data is loaded, or else it will be blank or have data depending on whether * it had been opened in a tab first. */ QWriteLocker locker(&GetLock()); Q_ASSERT(m_TextDocument); if (m_TextDocument->toPlainText().isEmpty() && QFile::exists(GetFullPath())) { SetText(Utility::ReadUnicodeTextFile(GetFullPath())); } } Resource::ResourceType TextResource::Type() const { return Resource::TextResourceType; } bool TextResource::LoadFromDisk() { try { const QString &text = Utility::ReadUnicodeTextFile(GetFullPath()); QMutexLocker locker(&m_CacheAccessMutex); m_Cache = text; // We want to make sure we schedule only one delayed update if (!m_CacheInUse) { m_CacheInUse = true; QTimer::singleShot(0, this, SLOT(DelayedUpdateToTextDocument())); } return true; } catch (CannotOpenFile) { // ? } return false; } void TextResource::DelayedUpdateToTextDocument() { QMutexLocker locker(&m_CacheAccessMutex); if (!m_CacheInUse) { return; } SetTextInternal(m_Cache); } void TextResource::SetTextInternal(const QString &text) { m_TextDocument->setPlainText(text); m_TextDocument->setModified(false); // Our resource has now been loaded with some text m_IsLoaded = true; m_CacheInUse = false; // Clear anything left in the cache // m_Cache = ""; } bool TextResource::IsLoaded() { return m_IsLoaded; } Sigil-0.9.9/src/ResourceObjects/TextResource.h000066400000000000000000000067721321676412500213200ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef TEXTRESOURCE_H #define TEXTRESOURCE_H #include #include "ResourceObjects/Resource.h" class QTextDocument; /** * A parent class for textual resources like CSS and SVG images. * Takes care of loading and caching content etc. */ class TextResource : public Resource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ TextResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); /** * Returns the text stored in the resource. * * @return The resource text. */ virtual QString GetText() const; /** * Sets the text of the resource, replacing the stored content. */ virtual void SetText(const QString &text); /** * Returns a reference to the QTextDocument that can be read and written to * in consumers. If you need just read access, use GetTextDocumentForReading(). * * @warning Make sure to get a write lock externally before calling this function! * * @return A reference to the QTextDocument cache. */ QTextDocument &GetTextDocumentForWriting(); // inherited void SaveToDisk(bool book_wide_save = false); /** * Loads the text content into the QTextDocument cache if * nothing has been loaded so far. This is not done automatically * because we want to do loading on demand (for performance reasons). */ virtual void InitialLoad(); bool IsLoaded(); // inherited virtual ResourceType Type() const; protected: virtual bool LoadFromDisk(); private slots: /** * Performs the delayed update of m_TextDocument with the text * stored in m_Cache. */ void DelayedUpdateToTextDocument(); private: /** * Actually sets the text to m_TextDocument. * * @param text The text to set. */ void SetTextInternal(const QString &text); /////////////////////////////// // PRIVATE MEMBER VARIABLES /////////////////////////////// /** * If \c true, then the m_Cache var is holding cached text. */ bool m_CacheInUse; /** * The cached text used when threads are in use. @see SetText() internals. */ QString m_Cache; /** * The access mutex for the cache. */ mutable QMutex m_CacheAccessMutex; /** * The syntax colored cache of the TextResource text content. */ QTextDocument *m_TextDocument; bool m_IsLoaded; }; #endif // TEXTRESOURCE_H Sigil-0.9.9/src/ResourceObjects/VideoResource.cpp000066400000000000000000000022421321676412500217610ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "ResourceObjects/VideoResource.h" VideoResource::VideoResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : Resource(mainfolder, fullfilepath, parent) { } Resource::ResourceType VideoResource::Type() const { return Resource::VideoResourceType; } Sigil-0.9.9/src/ResourceObjects/VideoResource.h000066400000000000000000000023051321676412500214260ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2012 John Schember ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef VIDEORESOURCE_H #define VIDEORESOURCE_H #include "ResourceObjects/Resource.h" class VideoResource : public Resource { Q_OBJECT public: VideoResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); // inherited virtual ResourceType Type() const; }; #endif Sigil-0.9.9/src/ResourceObjects/XMLResource.cpp000066400000000000000000000064211321676412500213560ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #include "BookManipulation/CleanSource.h" #include "BookManipulation/XhtmlDoc.h" #include "Misc/Utility.h" #include "ResourceObjects/XMLResource.h" XMLResource::XMLResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent) : TextResource(mainfolder, fullfilepath, parent) { } Resource::ResourceType XMLResource::Type() const { return Resource::XMLResourceType; } bool XMLResource::FileIsWellFormed() const { // TODO: expand this with a dialog to fix the problem QReadLocker locker(&GetLock()); QString mtype = GetMediaType(); if ((mtype == "application/xhtml+xml") || (mtype == "application/x-dtbook+xml")) { XhtmlDoc::WellFormedError error = XhtmlDoc::WellFormedErrorForSource(GetText()); bool well_formed = error.line == -1; return well_formed; } bool well_formed = CleanSource::IsWellFormedXML(GetText(),mtype); return well_formed; } XhtmlDoc::WellFormedError XMLResource::WellFormedErrorLocation() const { QReadLocker locker(&GetLock()); QString mtype = GetMediaType(); XhtmlDoc::WellFormedError error; if ((mtype == "application/xhtml+xml") || (mtype == "application/x-dtbook+xml")) { error = XhtmlDoc::WellFormedErrorForSource(GetText()); } else { error = CleanSource::WellFormedXMLCheck(GetText(), mtype); } return error; } QString XMLResource::GetValidID(const QString &value) { QString new_value = value.simplified(); int i = 0; // Remove all forbidden characters. while (i < new_value.size()) { if (!IsValidIDCharacter(new_value.at(i))) { new_value.replace(i, 1, "_"); } else { ++i; } } if (new_value.isEmpty()) { return Utility::CreateUUID(); } QChar first_char = new_value.at(0); // IDs cannot start with a number, a dash or a dot if (first_char.isNumber() || first_char == QChar('-') || first_char == QChar('.') ) { new_value.prepend("x"); } return new_value; } // This is probably more rigorous // than the XML spec, but it's simpler. // (spec ref: http://www.w3.org/TR/xml-id/#processing) bool XMLResource::IsValidIDCharacter(const QChar &character) { return character.isLetterOrNumber() || character == QChar('-') || character == QChar('_') || character == QChar('.') ; } Sigil-0.9.9/src/ResourceObjects/XMLResource.h000066400000000000000000000041571321676412500210270ustar00rootroot00000000000000/************************************************************************ ** ** Copyright (C) 2009, 2010, 2011 Strahinja Markovic ** ** This file is part of Sigil. ** ** Sigil is free software: 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. ** ** Sigil is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Sigil. If not, see . ** *************************************************************************/ #pragma once #ifndef XMLRESOURCE_H #define XMLRESOURCE_H #include "BookManipulation/XhtmlDoc.h" #include "ResourceObjects/TextResource.h" class XMLResource : public TextResource { Q_OBJECT public: /** * Constructor. * * @param fullfilepath The full path to the file that this * resource is representing. * @param parent The object's parent. */ XMLResource(const QString &mainfolder, const QString &fullfilepath, QObject *parent = NULL); // inherited virtual ResourceType Type() const; bool FileIsWellFormed() const; XhtmlDoc::WellFormedError WellFormedErrorLocation() const; protected: /** * Creates a valid ID from the requested value. * * @param value What the caller wants the ID value to be. * @return The potentially modified value to make the ID valid. */ static QString GetValidID(const QString &value); /** * Determines if the provided character can appear * in an XML ID attribute. * * @param character The character that needs to be checked. * @return True if the character is valid. */ static bool IsValidIDCharacter(const QChar &character); }; #endif // XMLRESOURCE_H Sigil-0.9.9/src/Resource_Files/000077500000000000000000000000001321676412500163075ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/About/000077500000000000000000000000001321676412500173615ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/About/About.qrc000066400000000000000000000001421321676412500211370ustar00rootroot00000000000000 Sigil_logo.png Sigil-0.9.9/src/Resource_Files/About/Sigil_logo.png000066400000000000000000000431271321676412500221650ustar00rootroot00000000000000‰PNG  IHDR¶Zv¬ýtEXtSoftwareAdobe ImageReadyqÉe< @iTXtXML:com.adobe.xmp ° À8­IDATxÚì} œEµ~ußmæÎ;ûL–™ìdßCBX@xQòžø@yà¢DqEEY ï)>ˆ( PD $–„,“}’Ù2ëÝ÷ÛÝõ?§ºêvÝÎ}B¢ïöï×3wëîZ¾:õ¥N)”RR<ŠÇ?Û¡› x]<ŠGØÅ£x]<ŠGØÅ£x]<ŠÀ.ÅãŸåpúPQ”bËúÊÿR”ØÅãÿŽÄÇC‘þ«¶ÿŠô=å'†ôÞ>/ºH‹Ç»ìËkjÈÄÊJRåõ§ÃA ˜"nÚ¶M€Öqëâų|ÇÅ@oÔªÒÒÏG‰Êd&Ctø~_æñ°ûD’IÒ›H<÷Âi¼ ýì…îî>øJ‡Sã Ç“|{Ñ"ŠÏAÊ„SR,•"½Ñ(;£ðšÃ(Ž„€ã¥c%Q q•‘pì/ÍœÉ@­ª*Yo%²óÕ«¿ìTÕ«bÉäÔ€6‹1Ðêë#IŽV7?Ux½¦¬ŒÌž0TÂý4f"“ Òé†ñÔííûà§Y~©!ÍâÌ“òg) ñ8±MLjcØß\´ˆÜ²}»ú&—ªÞÙ@>ÜßOvvt8|‘æbO©¯ÂSÂtA]„Ì‚NÃ{•ÃYgHñR·›5>©ÀwÅbR†±ñgííO­_´h‘ßá8KQUƼÑÒ2u0xåBž‚Ë3B¯-Ò—"°Ç`a”ã»+W®ªöxèD–" w CðJç!/‚¨= ¼â¯–ù3Jyu2!çPg¸ÏBI^ç$¿ŸIp”¾õå失ºš•/«ë)Ía˜¶tvâàùÞnB~—ÄͱC²E`ÿßöX96õ÷V­:¿Êíþ]{ @^Û¿Ÿôà]aB¶¸Ÿ”õHBã”BãŸááÀ²tòGøïòò|-!€ÿkÒ‘)ƒsrUÉ=A-Ž`"Aö÷ô°ÙÍ^øW%=C£E`•DZ‚÷*€º@€/~¿°½À©AšKÒ$?3_ÀVBP“, ‡ó¡ B^nýÔt8$Ñtš4ÄF ƒ×ûººHXÓØM2æõåü9‰¢¥ìQƒú«K—Ωt» Äãx. ¨Ó&¨  ~…7c%‰&d$K‡ "N®K"ñÂé‡ pîŸCÈ瀞,í ÝgUi)I £Ù,5Ž àÍü>ESØ£¶³ŒÒE‰ŠýÝݤèBØDîëêÍÄýpöÂ0ñžµ.Ik"Im·‡6öòÝÙ„\âøt”½É$ †$êa$œÄ¯uËV^<ŠÀ™´¾uáÂktÃXÛÜÛKšAyKp ¨ÿÀA6è#ØNAý §Û˜Â«–Ù.ÅË•à÷aô=s¿àeª4„ ¯çñërÀöz<ÌNîr8FŒrTNã@wR8+ŒÁ&ަL´î*Çxð³8Ô¿ÏÀïÜpO|†ðúâû±ÔË=¡¢‚Ôú|c¾×HÛìD¶Óët^脆GÄ¡â¨s1NMPÇ9 c\Rk§8GZ9¸†¾f‚:Ãq‹piÏ+SËË/ÞJÀ¦Öª8Ïv :rÓÛo‹r+£àÝT:Éé šýé RÜ8l.ºö¿bzd+‡ôôš¦&Z×"°Ó–P‚{HÀí+)!U ]qðÜj:ÈÆ^Ï@€Úúú˜¶Ù‰l®Î`pšÊ§žN£ÏÕ9G–•ÄQWk5\»970ÉÙ›N¿~zuu ¤–ÚZ‘r{¸¤ˆªß=ùä0­¿/–N«0Ý«ÐÈÃê¨Îp˜þüj*õg<ú«P“Õ¬ˆ(í*¹”FSd9€iÇú·ßÎÅÌüçܹ5M^ï§b©”JMǘ‚a8³}Ïž‡…Bý`[›P¬é-óæåž…Ô$ R”Q?ø Æ/oß±ƒ=ê¹rêÉž{÷Ê•ç@ßž|,ÛìD”Ø.˜^¦da:Ä¢”‹Iƒä;_ŒSÇìàfŽLRTJOÒŽž*U›UÄq »û&˜].Äß"ð‚TÅÓ!MõX ¤B©(¤ËPˆcfµvñçÒ–jô$)ì+[·æB î[½ú&Ú_Æã• ÒJ&­Æð£ä½sÑ¢†’ÉíáL晟¶¶þPèßln¦6)häÎPˆ^ær‰ïÇ«ž(ŒæÎΫJ\ˆ³ꇜÛÍ©E¡ûà=ÐÛKÂðyÊ4Ríä÷*Øf'ªÄÆú‘`£)Ò‡Ð:5ö c"'K@ÒÊËéï£Q1hRºi d›Ü´`Íû¤ÈŠõÛ¶¶ý„ÔÁë3Ü&'Óª«ISU£8½c§tÃÿtþ½þÒJÈãܦ.¤¨N €Zð\äÅÔŽ»W¯>ÏIé7;‚Á%øµ§¿?ïþªSÂÍ•NEYƒcы߂ôBž¾#¢—÷î%ûS©-¦‡Û!ûxoo®®ãTO¦Ïü®£ã‹åæ`^ 6Ö-Z8y2(Hƒð>pŸ ɹyßDý Þïè!ä¼Z"4HÿGáØQPT2°s³\r{Í`¦ÿ’íÈ8-cÇŒÜÔú'¬%¤6IƒÄ­‡Ö ÷ÝćDá¼ÊGÈ"(ß è°ùJ pJK,{k ÀK<àièèp¯VèÕ}¼³“ƒrYr ž Fúq›æøáêÕ7ëšöµæžòJk+]p“­pïðœÍ𺋘‚ ¬–÷A'Ô»)=7 2‹*q¨Tâ}ÑB‚a½i„#9ƒ›Pã¦Ì~ÇzR¸O Î;àu5*ä~]ÿu_,ÆÙaé>B ™Ž¸$§Š1îƒpñ{)…,`'*°‘#‚Uh>Šy3ïLB.9@È=‚€¤ÕÏöx T¤Fn•d]ZWG7ôö²é:ˇ椬„vt I&S!hñV8c QÞ9©¬ìœ>»Ð©$î§?BÈAn¢¤²Ô!’™Ë„Ósmy9SÞî°@íºgõê±Ø»Ž!;AJ£ç4é_FM¯¨<5ëð¼H'€Œ ‚ŸL$äCš¦]êï/S…$0¥¸é>[ÿþ,Z—ÆÛxÔÓ„£C€ØØ¬úzf%:•»d³)1¿ˆlÈ —0þQ€-8V´7+öÖ\¯B‡Or:/«÷xº^‹Åâ#Yÿk:ͤìù>E@¦GpœFD \¡er?4rF<è — Îí4‰>døçÂRâD‰ˆeOA9yU,ª•á’'Ì­;Ÿë$,*oh¹¸“+oXýûN;íÁ#Áà/47³ áÉ÷ÿ^(ÖI©ŒDò¶ºA?RpãB®´œÌ¦SÁd…‡g7À¿JbÅÝ(ÒàzÊÌ.Ák%äh%]¦¦þ» ¿W\ö[/`«£`´%z=Ì•?P ?tt (>îék,)ùÂ%'~•°6Í¡ðQþ‹)hC'Nµê0ÂcqEn÷àáà @‹üþ*~”b¢õú ù_Ít »yZ’@YÞØAó§ìh:Òxg 'Sˆ_ËèäÉPw,OHj¬7W̨¿µ|ùƒÀ óà˜gÔò[‹ð‚.N%ŽØ^wò÷=PðöÃ„Ü uû 6ÚÀ¼áýïEý†Sh—Ôú8Ö3Ëÿ ³mdîá“%«²ì»È ƒøýqáäú؉,±h6Û\FÈ9¸ ì„ÆG3Ò ìl,Õ´Ë×UVÎÙy_6»]Tö©þ~ý²†Š9œÞP‚'ñ´áýtKº+«kj>¶4yŽ`œR7¤L…ªŸ7¬X×`HÀ’ß; ˜ ų8"¼³b’´¦Ϋ™§€ý­]»˜d¼yáÂõý@?6íÛGPV(Ûßa”ý†?7Â;]‚¥¤{ %×ÅÏþÌ(t¿‰0 ¨É2:?ôNpÃ(xÌl:žõ”f;|té÷IH *;ƒoœ=›âlÞÕ,÷® 'SzŒ…ñ6ãq½ÇS¼ÞÏ` ÔTjX¡4+éJ¹;ɬjr:7.«¯¿íWÿÍ!óxw7›¦®ll¤n6Äîd{…QAŒ™Ï`ûo--•ð®zccŸµdµW6kÜå¼Þ²:‹QBÓ*µ$PZ:3â>8X‘¡´F¥î&q|}ÅŠzŽ;Þèí%q(7ŒÞxÀ´2è4X®> ÔX6åëË—ßõU¡”`&³é‘––wøwiá8ºÊ B~,‡€f6›áˆÊ.ç@zâ—XÇŠ’ýW½½ŒkrC’ðì\?¾!{Z‘ã3o,:¬à³7w†¸•#p Ø}ºÞÛ>Ãy±œ35gA X)œ†`Þ¼óÊ)S>Ñ´žêì|BH­Ÿµ·3îýÉ)S(ZO»¦lRNJÓr{'!ßBE Îz>%k\ör %Mvny9…Ž"¿æÊ'˜3›2F—ñ¦—yµõ/žS]Zz_(gh-àyA³¦ñ>iÀ±Y䮕+¿Êå[ZZСÁÌqS««É§§Oß¾«¯ï›/G£/ñk)4’‚!€â˰CÐðE¼ÞÞÊxÖ“øí0î“kî2h§[M“'!Gg"Èý_ëñP €d³' °™-¤ÉýS9JÍ4x1ÿt¸±r8:=œ£ôÖ2™ùåÏWOŸ~-P™_lhoÿ ïììOZ[s±ÙW€OKRM…bVž“Ì硸°)u©­£†òýö¨hÁÁ§Z¼ÚYåt>Ú‰Tl9tˆ9'ø{®§ b°‘[/þñ »v]ÑŠ/øa¸w¼¿¿_ $“@.´þr¥Çó½-éôýâI—ëù%—a[  ÓV]*‡Pnk=ÉèÚK~«¨Y¿|gåÊ‹¡ßgâqU£ôp‚Ò·Þ·ï€Pì7¥ÓÆEzW-¸N(Ð9ÿÚáMö€äQ6*ˆÂóåäA> €ôûÎu3g~%”Éüø@2ùÓÍ}}ÝB#ÿßöv¦•_Ry¬p 3NB áR_á×¥$îª/çÆBiY S)–ç»ÍÍ Ô_œ?=P±%»»»I;Hl®1mÖ,®)85óZÞ8oÞM÷ì¹âP:½Ð~KÜ=‚Óuþ¤I§‡ãñÉ8M«ºþ¥é 3´ò¬Sg6»D7 î^)¯Š·¤GP‡Cv`|æÌºõõϧ^JPÿ g€`›m÷‰iÓ{±½ýŽVMë–Õcb8ò(8\”˜g U§€ø¸Tå-,´TRÐáNGw!Ou À1R-ñW½é¬††›ø|Ï%t}ㆶ¶Ÿð k?mmÍ-F¸¤8›JÜP·¹¹…–.F Ùó­< ›z@ÑeÆÙ¿ã v\7þœ†òòëû0<“Ûu ³@ïðr‰E8õ ššja|,€æÛâ&èÙ¢ˆÏÍ›wKdzÍz¼½`ú1íòx¯tÀ íÙ ­~vI11Š1õ4FÑ^YËQ”s¦6””\Ý/Å0Xœiöõ‘#0`±°UÏ¿7¹\KÓ”~¤[×;ˆ¥€Ž;¸G#± .f.j'ä§ ðÞ,‚H[1ºÐcg Ja†+u:iØj€~{qé8Ô“Ž®½ìi4\»Ž™†žNawä^Ÿ(¥8ÔÏ#×ÂwçrG“.™)õ؆ä¹bÑt †^„7-Pð«A]_¢Jn1!½ñ=NǨÝ#°ñÄižïmR$Øé -O¿fæÌ¯F2™okû0M=ÑÕ•kˆ÷”—³xߨ ÍáhùMÑeܹ Úkšß1òF\TÜå½ø6tÌæ­tõÆbU¼÷z,ÖBâ;C¡7”F¬å2ŸÿMŠ·ÈzœÎ9I¨DÍ$oáÐȬÕ“Ž¢½lR›Ñ´ƒ‘È¡µ>I%¥'eÎd¤ÆïO.¡özg'f('ùY Ž;°å€$¡À1°Cé´.BVFÈ¿ÀÍg:¤É×Ý ’¶NüiJº,ÅqúÉèeóæëfͺ9˜É<Ø?üJÿ!ÅÿbFýÑsü~:ôJJ ¦šc™X|5w¤¨?Ëè”Q ÖH%Li·¹õïÎ|¬.³3³BÙ Sš†6ºÎ ¡.„Þ•ééü{!É€ÆøÏqïI“{Ëñ”ŽC=éèÚë(ü$äî‰&ï_Ôxà:èâËêëÌÛh« “¥ëX(ÀcÉ+bXÂ*'ÅY§—LÀù”zô䙋5›ASH(•Ó”^8«D•<öWx01ì%f@ Ô53¼ÞkšÊÊz¥«ëm™L—pŸÿ91Ná¶Q;¸Gi—5uGxö}{÷2itÅŒçÂ}+0œ ‡mrÊV9NB,,R;c±]Ð{§¶8Qª>ã•À+Þ"fG?Íé‡&¹¦3ç56^ž„º§¸´†Q³Ÿ?+6@Ç¡žÃ‘ØbæRD‰çRÂ3õ!d1³~•û޲sšVW/ÓÒés^lmÅ‘¿X‹AމŽ0ÖLPb:LJ•nVxN›QdOEY-° :¸JµEïˆE¹²¯ƒ) ­)|5ŠhÜ(ŽxÃøô¼²²Kçøý7¿Ø×÷+1ý=fl¡ªR”cã1E£ý8§4z<ïaëaà½}öíÄ Ý´»Ì©®ª;©ªê“@±>ÈdžJ˜ÀJS”;q²\Šé"8 @=¡¡´ôªÛÚ„ñþׂÆk•’ñnQ"Åöà«ó««2¯¡aèéúâÍ–³-6ÐÁ ³[)t"›ÌÌí¦93œÚ—ó‹&OZöTGçmRgk;à7óUk­.l’7‰÷¹“ †ÏýèŠgÒk3:ÌðCŒ—ÃkÙ ¤ä0±¢öDØl®Jû4íO8ÔéRÕIóJK¾ñf2uŸ‚E†,ƒ·—K~e}}ÙšIïeÌß™J" ~Ïc§âñ¢nc©g¡ëìïÓPw]±|è;‚²Îá 3KÉA¸æµ¸é™ ØÚË8á€ÊÕY@6†#†¤Èàó©ù¥?JIDÔ&ÞS} Y#hŠjÓD©=‚Ëùá,çÒ) – ]î±Ø'g)¤j?eæ#E¸ÔUÚh6¸ä¦ƒxÑ;0.‹2ß_^Ò{!Æ¡ÇM`îH™³’ ¬£æÀ€ßCsc5Ó©ëë+týçîlvÅŠÒ’ÿÑJJ¾º-ÚaUXÛ±±~ãÒ%gV{ñ€Szä–66R¨ýÁÎ]ÔFKâ’Ë»LƒÝ”ñÅ'«²Î%ÑR@Š£%%§ã³áyÈ÷ÐÝŽæ2hÔ‹ÒÙNÉ÷ïß¡éÚ<‡jÕj ŽjŠþù!.ë˜]Q±Kx–C·:8¥™uËKÝFóm´)¨ë[€/‰¾ÓH¥VN+-ýãåÓ§ý®ßŠG Qhy‰G©þÁh2¹èînòfWIPÒ6W%eˆ•..&U³•ü0¢ÑÖ“ènžDGdßRT‡ÃWæõ”»Ý†CQT¨ƒh2o^¤˜‹C §ªh›ºº_#ù1ét€˜’ã ì¦ÊJfÁ@Š€ÞÆë糕Õôž]ÍÂÞ•¤RŒXAé>òŠ µhŠÇFSd)ŽŸÅLŽÍÌ„èõC‰ JªŽÏRMkï Lqa‚¥Y7ècúŽÖHô/õõý‰X v!šâ‡û¦t—‹€‡_ ÷™$KK * *t)Й_¥ù¢lœMሾ®¾Ž’aòÍBàî‹Ç•Ì (¥:Z¯:Ê耽Ôã¦[Si]òÔÊúG±BP]’°ð(±2kå(Èç€ò¡+È¥=JHUQ†t…ÅŽ’:‰ÙHÞúI³®˜–ž¡¹EÃ/¡„Óµ4|˜Ë‰}YoNÊ0“H4xUÕºÓ£ó<žÛšÓéÿ&$o‡ún›MÍ·­Z¹Ê£ªmëìœözk+KÀž5§Rüÿ´‚¡0ôã>3çÅ¢Ñ íÑ()QÕ…“üþ_~¨©ñ¡ß¶µß.N;Às¦B‘#”4×(äsÚÅê Ê|WæWÈ{)[G˜7ÄÍ>DÇ3J•1 E$ Bwºv7ôZâV#§x½ô¡={åe[²b]Â=pY¢+W¸sSôgÔ”ó×.ÌàÙ¡(æ#e=‡cѤå{:Íÿ[‘rT˜.n.°ŽH¶wQÔ2“aJþSЋ ´. †qiÚÕïñÜ9ÃåŒÌjdª>Rp*¯È-+O>”ˆß¨+_ikc#JüœÏ¦ÌŒBfçÐ\‡?ƒ×VB’†qj"šU—NzA‰§zg*}³0—‰i„E|s ”¯ïÀ=> âü_sÆe˜³RâC.µWsyV.}±¼m…Ôf.t¾*()­ú.tà„‰èFP¬kù’(ÛDcŸ&VÂz{ „¬ÔWìF÷ïj&6£›5†#ôüAf¦±zîy\©ßÜóÇ #†LQÈÐy%ðÁÖ¸¹à"lþŒ ©„T)Çqìü+Ä®o£þRêtÞáWÕ×"†Ñ2<5hlÀf ¾~éÒ9n÷ï·9Â@¢ 9÷ó ÙV™–4w†·%O¢ë$êûH2y-Ôì≠‰‚4¾ÿNN ¤ZJòê%á8¢Ã~!*ÍÃ9m; .âÒ^ó§eýˆŽ¼ãT’BIÊÿ}©ýÇÔ5<;Ô·ß6³C}iù²YNE¹$¿8éçaj¯”¯sñÅÌ… *`…Ir á²[ÚÛ¦d©4ãéƒÅvŒÄóXè;yÓ-ÕÔ„)7½¼¦zÙ ¯·ä•övì,Ü¢E,‹ë½zá‚Õ3+*.´×ÉvF£Û{zž~#y„c°nô¬ÇTÃøwCÓʽÔXRéË6<3`;}õ1àÒ•/µ´Ñú#¨È6IщÉ^@’[`Í8$‹+ˆPò;(é^¾ß€|¢^!;{(ù¥ÔîrÂ9O63©õ™àž×® ’¦%Ý*‹f £ùèéÕ‡r5v€Ña±t¸k™Åí½v+P-fA-)!w¿cmø­SW߀¼#ßîè`±1ÙBZ**n7™ ƒcrE[f‡–\„€QQ3ü•ðU¶Or…;*Úk¨™i<ÂV¥ïqFĈÅÄÔòò³1ÛtÐnÍô¢®Ô÷éE WÍ®¬¼ ã¨è*X—ÉÙlö³ Ô(µÿT«›’ŸƒÔ/ÌŽ Ðhÿ ûôá›6E’Ž'°Yç\»`þúp*µd€:iÚY7%LP§Iþ¿8!y)âÄ3.áÊàÛ àO()ù\*u#|öœh*ÈpÚJEйÜôÌ:hÉ=0u=@ðÚw0ULÎ7/AÇÛwŒÊ#'~@û1o HT”\)ngUÛÍœh׿wÇNöú“ ÔO.ónhîé9믚¡CUŸ€_e…Ê3™Ì¿E@ G0`N@ÜX*(òRÖÝpþ úàY®h‹A¯KÏcÏã¼ß£‰tº©žfÎܹ}‡ÊTõ TpqÁI[(Dö÷÷³œÙŠ©è^ ¿ù_™Cû< ¹ÁR¦uÜr4âÐÖáÛ4+Êõšàvܬ ê,¯D7çS›´–M˜ÜlŸRPðž\PVö‰žTj’O!+c&™TF@7)æÙFs W®]áÎGA_Ž“ÍsrS ŸÈ#7Rœø™ÛåjÇu(­qù–œ—£ö2¦[ô±ƒ-¹ìPNjlxxË–³’¦µàh˜ßdÌvR =*²M´ÓÓMõèýy åÔšÅñ~0ÓœÉÑ!ŸôXz \(Àñt6«ó©9+ÍÚ™=½½ Ю«ƒ<×"“”ø'‚æ<Úd+/¡.÷ó‹jk®Ä™­-;Yš‘¸ép;­ A®ÜJŽ–$„RR{C­ÏÇô èb—wT‚׆öpA˜r:­eräï‡p±3€:˵x]–x Û«„¿Möd2{…ã>XÂ1Q*+Ïã%±°ªú•§©â… +UVXtö³ ÐûùTŒ…¹}ÕÊ«AÛ­i¯À¨Ýöø¾ý%ó^ˆX<·D{? ¸ÛinY‚ÀÛ‹ý{zÑIäùzÎ@2æ]ÄX?îG¶5––’04xÜ e• úز£ÅRì*n׋ÉÐ]§44L?oÚÔËC‰ÄÒ}Áà†7zz~ۛɒ<—Xær¥­Ê#òê…å¸r|Òä±vÝÛßßÁµ ClD»(îƒþ¹Èÿ®…€Â¾X­¦Rå}.2$£™Ì› $¯0ÌûÕj¦Ðt“,Hp—†t„Ãkq¢ ñÈ6Úâ’„Ö.š:%ê«€_ί©~ž¥.*E®_]Uùøæ`è+xoÓ9—ÛEØÀ1Xb–¸U‡ãº’’‹P© àþ-–DQl÷Rbò<Æû»‰½x|¶*Ň3gƒBàSzk³ý@UÜhÌœ7Õç«[;iâ×’™Œ=nXìRgwÆf‰‡„ɯMÍ…Ë—&ùI °þrz–†™Öõ+0Y¼®/ û³<çîûˆä÷AßdàLUº\õkšÉŸAWK™)dÇ2sXæhžBæÂo!$¯}éX©ÇÒªª“ÒšæÇé¡›SÕLò®ÙƒâV`¾«ÒåÜÉ„ItÐ3†á§ïtu‘ÖPè²ÙÞÒ¡“OžàóÍŽk’f|ÇÓã$Å Ep»Ýî·„õ€JF`ݘ2P'SyÌE+‚rô:òk|Vn:â^´BÛ‹«Ì7¬ãj\®…Û»º|›ÛÚX.’Öp+1:}:/ºˆ)‰R‰ZØÊ¨IæÏœ ÚÅ c¨ç`Àâ>¬}‚”¼ ôÖyziÉ’ÐdÙX¡bÕÌÏ]š9síË&¨_¶ŽåòŸKϺوr¨ 燪×é˜A¹ûZ³Ì\Õöö8¹ÂOyšuAeEýÁ`ð¬==lêÆ•/ì (]h ;©ªêÊ&¯÷¶—Bq³ä/ª¡ƒIŠ…eÞ\Ô\k"yÀÞ!|H÷·‡ÑñŒß«ç\øÀRóÍø9MâòBt‡Ù‚L˜CÏÛô$]{€šìëïG[nN!4¬ ªªä™(E™a‹MÑ'òÐÕJÚñàØò šéÒô›ÂÙl,’J­æv}gNEÅLþ€©þòä§Ì¿ä¯û÷-‹Q¦wüFœYÉdiÙ})³…;ÈSM ‹Šè”:íäëÞf¤Ìõ~ì¡o„#ÊÙ¦çKIë†-(hæAå.ãnçm }}³2¦Ùð/äèä*à‚ƒŸìˆ' IrJ 0h_'%SœÚjnv“ͪêËÕ^oìH4ê“s§Àõµ’TÉ)ª=‰ÄŸœ¸³! M÷Em©ô“óýå¦c±éÖˆDÆì\‘XAéPu¸õ®¹¯À}Ä@Ä,|]ÀK¯ý&#›={R¹ãì«æÍ퀺¶áM0jOùÝ®],[&³‡4Ó’·›ó€¶®’¶Xì–CÆ ØbƒœdG û{Ï£Å)J6Jî`Ó¿ßÆ"±èßáÚSdoË1çæT T/¤M7¼6M>Jy>@ÑÖËjjÑ…•:jjß»mŽžQ)VlS!…šhý™LïÎÞÞ·T̩ȭ|acüªJ·6Oe‡}”üw½Bþ~?»ÆãùØÌªªYð›ÃÐq¯t…Ãgp'Ë;…,7ÿ@‡œ±@OPòŒÒO‚ö{ù®@àýpN†Ï'çÌ´”< ýý´f6E¬<,ÌŠò±9³ÿÕà!†•BÍž˜g|¬"(hňÅ4 IžUU5c2„Iq Wûú ÉzHõÇä-¯rÃÜt4Lšq$YbË1Ñ -±ÔåVž‚Euµë0é|'OÒÂkŸâveØ£š¢ù@Í.Á 7{Uu-Ú´Ar©†^¢3ï‘¢ôØZJ®ô+ä®CÑèj4ºJ¾šZžÃŽ”™G;c³ûÊk8V*BF]Šóqp¥/(&sÓ+~ù¶¤(f¤€·¯¿Óïv¯E%7 ÊW›ÆÙ¥ÞžHì¨)ñ0~àj)”p ÈÎéÉu-uާd+”æó.…Ü ŸÔÊ µØ2½NbÑAÞ¸B5`É!a`ùÍ<Lws*ʦ=Òa’OÓNz@öÆÙÁ=kOaœËh8]Ï5ú˯í‹Ç}hcF7»bÙáK%³”°¹G"”Ü £­4|ü)T“²cäÉ&b-›KHÑo£²h§„9vÞ/ón¯f.–h—ô9Ñ/rÂx–5kIMMm0™|ÿ¶®.äÒL®·Ä¦G’Éବ/ |Ó.åU¬T!͘Ói‰4òÄÂÞ8”x Еk ·ÏT2.DávÝÜž"Èeú¥H<­¿Æ…J'f‹zd™çã’“NZZøi{AC¥Ì°xÙkRðÔQë#Mý5Ýã¦-é ãó uï 6A/­+1óù :r2€»Ž'ƒqÛž0âp³7ˆ•)U8hDœ0ÛåB_Gšžì8¤8³Kí ÉÏ–$ÖŽªdÕIËmBZ/¯¯ÿD"“öGù6æYØYRxÙݘ€³ ·|:ïl—¶ç »áïñ)ä1sÝb\ò‚‰©ëjÝÀ”láÔÅà• ÛûD”~Wk£!ø< šÈ÷~N£:oéõ8ÐŽp ÷jµdyæ¡Áb FÎÉéHn£&à‘?ƒ:¯ËX\èÈQÓæê!Vn”äâîY™DÂvj›ŽÅvêhÊ8œñP‡¸AòcÎSÄZD!ÇšgmžiåòysOšä/ÿÌßLÑOI³aaB̼ãJEØ4½º¹TUÏÆPL”T‰PÈ̤(˜hòG6ûvXÓãR…„½5H¬u{e¼¢"D5*9’…  nPOá±Í˜sŽ+æÏ;àÿݽ½ ؆%6J`Éc­©¯£/÷ôŽJ;J[t„¥ÖÃ=o€süÑ ôšl¦€ƒÌ ù[2ŸG}ié}ýñxÅþ@@|)”ÿ¼¬WãeǶ’¦:]Ï7VVÆ0 =|H ˜7í¹ŠRVítÞåu¨S%ðÊ ºß»8×jå'º`{ˆmÕu —ÖlƒPÐ3««É´ª*ÛÌA­^Âñÿ«<0KNºž-¤<e»@zåæ‚þðˆP&ü|·4Ý0Ê@j†˜w%ÄJ.–x‰½úˆµ”¼ËK‡r¬ ÷ýÏ@÷À>¬QòQÈ¥”D+˜pýÔÂëWkw Ïƒ²é&°3$?­Å¸JlfÃnÙÓ‰lÊhÚ:DÚ’1ôÐà‹vUUUçrÝÛG´ÿŒëz‹$‘² dï‘n7ÇÕª E·;Z>È eelà 7ëþ­Û„Ó½¸®îÙîXlÊÆ–¶…2§ S¦…E¬|—M‡­6à]  –îšSü ôñ,_¢ÅêsËòÿQIJËVÅ&½ØcøË)¦4x…Ï*£)ã`”b$÷í}ìôqAI ÅA}Šý‰[[_:ׯZùŸ oÃåvª %•?,Íf#^Ø;\*Â8QV7ÚJ†`!±à¸$ 0,¶ ãTÕåun×ÏÝšr]0«½#Ù'åÍDj‹•5ÕÔÍÓ WBç–ó„ëúsŠúïóæÕÏ©®Úp(\òû={f åVδ™B-dSF™mA3–Ÿ^6f>ýÓJ…¬e³ÓrKö¡-ê=ž/F4í@VÛ(IlýÌ [V† bá?.Àœýê蓎ªc[‰ŸÛõ ÛÁˆ¯Gz,’òøaÿášOïC±¯'ïKF?n?uõw A¯Gç[moFô!àöIÒ~Ä4dØVñ oi?p!Æ«qºÈsýÐ9^sIÓœ §ó7‹êênÛÔyd±-:¸hæ b”ô¢3Ø6ob§ø?âÚÂ{­Fp|uõ)çAçÿ×@`ê3»wç|ÎpÓýis±0§6b—®½™ü\N¨8wú C!Ì_ Òü@2½T!÷+|ÁƒÓ\ßXVîtþÈër_Ý–H¼Ä‘~©«[{ÿÔ)+`ý0~ÐR(ÍÈõÈ ÅO x{ à‘-E+G©ˆ»²ž3€ò!ëøæ²Ii7¯áÞgOü#š—ƒÛî>KJ³¾¡õX:½„%@,àÇØjÕK³)˜ãìœ u+ß@PëûGoQš{$›**ʽÇ×Mò/TúÞÍÝÝ›·zêÀAðËfŸD=Ü\¦p@£$û‘É£ÿwÀTµ$È—`ªº`W0HþôƒñÔÏfÌtµ1è..­s–O,˜OÑ#fDZc°|‘»ÃÌt™ÛÑZ}‡BÉ% ù®°{ãÂ_h'ŸßéxüœÆÉ÷þ¹½ãû|I?{ØÜ!í’Y3)v<Û´ 9:´«n–‘€/”Èó%³£išŸ‡d^m­Ö¢±Ôs:è1eœ*¦"<¦à§;wɹŽX_Þ~Ú©—@¯‚v<³ØâÀfþÜÇŠóÇ JmTõ˜¤_È™üÊ\ΉX˜njjó©Šp£Ö °Ðaço<÷¢Y3_ƒ‘¹ñ­lW¦<¾w_!ƒ;Óž¯\¸`V£Ïwp× û‰%Û»»É«­­¹¤xpa3¼~V7•P±s7wH¶° $ã’_Ü_E ~0"еÍûh– Ó¢ˆÒcq/`Ò48€r°¤ø?de—eŠ1Th3|÷-И¯G«vT¤]×?~Sã‡u¢<ö§¶¶»ÅÿÕþÉ_ª™3cþÇ‚ùg+”N~½½tðÀö;MÛ0Í« àO8¨|~ÙR:–zBy¨=”‚çè>R|  ®™ŠÊ!®ŽA½gB\!„ Ùµ„<Á]ˆ¯àËs—}r4_ÃÂû&¸]‡)ê^¡ÑB%J¾mGtÈ Ë'MbSHû €ÄÙmÑ> ? ’±RlM|$ô>aþ1ã8wèfÚ}$?õ—°2„ÈÑKˆØô÷ùåËV8¦½÷‚ô?CGAÎ÷Æ™[[›p»\[¡‘ߌ¤3O¼ÙÛ»]¢Qº8þp«¼Cq‘zU'@#-u+äø¢I Âz˜ÞQÙÆ3˜J=Ru+”E|ÏÞHʳrë©«ÿ f®C|#7>œ r .üø ðû˸e) 9vÆRO¡ )wž~Ú§'CÌt9kpîËPû}VNžL¦VVb¸q?ô«'»ôŒ)pýTAIÀXŸß©—‰õI¹YŒ3S×tRF1ÛxyV£!vô.°ÜŒW |òË@*y–Ñý’Ý RÈè€*˜žO¶îg3QADÅè ©ðx,Ó ”cKGÇQK‘Ð]pó¿À³Þâ…d3¢X@Àlæ¸ù”U—À½¿Ù‹MÃÁr$z*©-0K^Ó…Ž ˆ0Sü¸-•¾Uº¯VÁ¦¹plܸ[ðB> ¿ÀžÀ:NpXý±“ÍüÚ¦e Ûw"Û ’:gè¥Hµ‰ä÷æ~4XÿÔó¢1ÖsŒg¯˜?ï®W`þ0S kÏ`÷Δ?œÄ=Š6xVoŒ’K¸i¸—XyÄÇØ*ƒÀ-ÚPõÅ –J’C,ê,²Ì:p×^ú©BâÁ+¤Äãz\¸¦PqÛ·¬ÉŸb9šH¦“´gzJ]-ý{oG5õï@‹–êÖ3u-+ùe‹Ÿ]£™RƒÍŠÕ¸¸=Üv]ÍŽ»çVÀ/€/ÏÁ"ÍfªMy9Ê”fÎN»P2ó·RËš”óæÂ=0Ö{vêùÊëy&FÜùr \s1ÄõÇòPÌ}àw¦ÌÍq[ùŒ#rHï8[á’©ŒƒAí%V~9Í‚‹wt‰ä>vØùº-b‹’ÂZå]õÄ rîyѰîiŠ )Z]:RiA|P€3à#—¬>jÈR\¹c˜ƒƒJ1 ’Ÿ°^d9eK·àyîùH¾äíSEÌFøß™ Jßrbn P ³ÙR«Çáõo¹Åo¾‹‡¿º%HÎ%B=û¹(Â?÷Œ±ž"[á}[ɪŸÚR[™„ž!'¼×eŽOòW¿ØOu¡ÈOÓÇ©V‡KsL€-o¤Sjs Ë[(n Ün)ú¯Ðv¡%§ø’óú¥lÁMY2p"•?¿Œ¬Šw–ð pš­ã£݉I³Â@íãäm#.NŸ-H)gßëО,H^ñ/VûGùkŸ[9†zF$ëå€ö+s@Þ" ©ŸtrtÌ»"1û9{KäÂÄÊ&%†ìášû¨-À%MòV6>.èˆ[º‹ ¼vèYrt(ÌÃÉ $g-u’ܹ…ö vù½  ¡Â&©-þA¦LAbeU•¥žœ«O#ù›´f%àÉA@º ˜B±U¤Á?Úz&¥A¢K&M· ÐJ>³³¥Àë‘Ðq¹ýâdûÔ WbÛMªƒycièT¡ÔfÃÔlRÁ ãò,#¨‘ÛÖÙÔÖÑdÉ&OµÆ0ž›3•ñg{¤YÌmàÔ&¹í¹X4©cí ×eóškŒõÔ¤x ±í×þ.RljìiR du¼¨Èh½´öiI‘¤u!`Ó1Z[¦2À SFûSHÒÑ<_•@î”Êà´MËöiÝ>ÅëdàPèñ¬'µûÈ»¿_; íɉìåPx=T Ñx?ß>¸‡3¨ÉÒñ¬ç»zŒÇþ‡nƒãÜ¡vý៵ž'ÔáÍh(ÅãD?Ôb"°‹Gñ(»x"°‹Gñ(»x"°‹ÇÿÉãÿ 0IŒ1åzÆþ¯IEND®B`‚Sigil-0.9.9/src/Resource_Files/bash/000077500000000000000000000000001321676412500172245ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/bash/sigil-sh_install000077500000000000000000000014031321676412500224150ustar00rootroot00000000000000#!/bin/sh # Entry point for Sigil on Unix systems. # Adds linked Qt's lib directory to the LD_LIBRARY_PATH QTLIB_DIR="${QT_LIBRARY_DIR}" SIGIL_BIN_DIR="${CMAKE_INSTALL_PREFIX}/lib/sigil" if [ -z "$LD_LIBRARY_PATH" ]; then LD_LIBRARY_PATH="$SIGIL_BIN_DIR:$QTLIB_DIR" else LD_LIBRARY_PATH="$SIGIL_BIN_DIR:$QTLIB_DIR:$LD_LIBRARY_PATH" fi # Create an environment var for the Sigil share directory location. if [ -z "$SIGIL_SHARE_PREFIX" ]; then SIGIL_SHARE_PREFIX="${SHARE_INSTALL_PREFIX}" export SIGIL_SHARE_PREFIX fi # Not really needed anymore but left in for fringe cases #if [ -z "$SIGIL_EXTRA_ROOT" ]; then # SIGIL_EXTRA_ROOT="${SIGIL_SHARE_ROOT}" # export SIGIL_EXTRA_ROOT #fi export LD_LIBRARY_PATH exec ${CMAKE_INSTALL_PREFIX}/lib/sigil/sigil "$@" Sigil-0.9.9/src/Resource_Files/dtd/000077500000000000000000000000001321676412500170625ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/dtd/xhtml-entities.dtd000066400000000000000000000745751321676412500225570ustar00rootroot00000000000000 Sigil-0.9.9/src/Resource_Files/examples/000077500000000000000000000000001321676412500201255ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/examples/clip_entries.ini000066400000000000000000000047641321676412500233210ustar00rootroot00000000000000[clip_entries] 1\Name=Clips Help 1\Text=Right click for menu to add groups and entries. Edit or re-order any item. Use right click in editor to select which entry to paste. 2\Name=Example Clips/p 2\Text=

\\1

3\Name=Example Clips/h1 3\Text=

\\1

4\Name=Example Clips/h2 4\Text=

\\1

5\Name=Example Clips/h3 5\Text=

\\1

6\Name=Example Clips/h4 6\Text=

\\1

7\Name=Example Clips/h1 class 7\Text="

\\1

" 8\Name=Example Clips/B span 8\Text="\\1" 9\Name=Example Clips/I span 9\Text="\\1" 10\Name=Example Clips/Example span 10\Text="\\1" 11\Name=Example Clips/Styles/Highlight Anchor IDs 11\Text="[id class!=sigil_index_marker] { color:#00ff00; }" 12\Name=Example Clips/Styles/Highlight Index Markers 12\Text="[class=\"sigil_index_marker\"] { color:#335500; }" 13\Name=Example Clips/Styles/Highlight Excluded Headings 13\Text="[class=\"sigil_not_in_toc\"] { color:#880000; }" 14\Name=Example Clips/Miscellaneous/a href 14\Text="\\1" 15\Name=Example Clips/Miscellaneous/Sigil Split Marker 15\Text="
" 16\Name=Example Clips/Miscellaneous/hr 16\Text=
17\Name=Example Clips/Miscellaneous/br 17\Text=
18\Name=Example Clips/Miscellaneous/div 18\Text=
\\1
19\Name=Example Clips/Miscellaneous/UPPERCASE 19\Text=\\U\\1\\E 20\Name=Example Clips/Miscellaneous/lowercase 20\Text=\\L\\1\\E 21\Name=Example Clips/Miscellaneous/Titlecase 21\Text=\\u\\1 size=22 22\Name=Example Clips/Text/Lorem Ipsum 22\Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ac tellus nunc. Phasellus imperdiet leo metus, et gravida lacus. Donec metus ligula, elementum at pellentesque pellentesque, suscipit ac nunc. Etiam lobortis, massa ac aliquam auctor, augue nisl sagittis urna, at dapibus tellus erat ullamcorper ligula. Praesent orci dui, pulvinar id convallis a, faucibus non mauris. Donec tellus augue, tempus sed facilisis sed, fringilla quis leo. Mauris vulputate, leo ac facilisis vulputate, enim orci interdum augue, in blandit quam turpis quis dui. Morbi dictum luctus velit nec faucibus. Cras vitae tortor purus, ut tincidunt mauris. Sed at velit nisl. Donec eu mauris tortor, interdum condimentum erat. Nam egestas turpis eget nibh laoreet pharetra. Suspendisse a sem eros, ut pulvinar enim. In sed elit eu nulla accumsan tincidunt eget sit amet ipsum. Nullam ut massa rutrum dolor placerat tempor accumsan eget purus." Sigil-0.9.9/src/Resource_Files/examples/search_entries.ini000066400000000000000000000067671321676412500236440ustar00rootroot00000000000000[search_entries] 1\Name=Saved Searches Help 1\Find=Right click for menu to add groups or entries. Edit or re-order any item. Select a group to run a command for each entry in order. 1\Replace=Right click in Find & Replace text box to load any entry. 2\Name=Example Searches/Join Paragraphs 2\Find="([[:alpha:],])

\\s*]*>" 2\Replace="\\1 " 3\Name=Example Searches/Remove Non-Breaking Spaces/Empty paragraph 3\Find="(?s)]*>(&(nb|em|en|thin)sp;|\\s)*

" 3\Replace= 4\Name=Example Searches/Remove Non-Breaking Spaces/Trailing space 4\Find="&(nbsp|#160);(

)" 4\Replace=\\2 5\Name=Example Searches/Remove Non-Breaking Spaces/Leading space 5\Find="(]*>)&(nbsp|#160);" 5\Replace=\\1 6\Name=Example Searches/Convert Characters to Entities/ensp 6\Find=\x2002 6\Replace=" " 7\Name=Example Searches/Convert Characters to Entities/emsp 7\Find=\x2003 7\Replace=" " 8\Name=Example Searches/Convert Characters to Entities/thin space 8\Find=\x2009 8\Replace=" " 9\Name=Example Searches/Convert Characters to Entities/shy 9\Find=\xad 9\Replace="­" 10\Name=Example Searches/Convert Characters to Entities/ndash 10\Find=\x2013 10\Replace="–" 11\Name=Example Searches/Convert Characters to Entities/mdash 11\Find=\x2014 11\Replace="—" 12\Name=Example Searches/Convert Characters to Entities/right arrow 12\Find=\x2192 12\Replace="→" 13\Name=Example Searches/Convert Characters to Entities/left double quote 13\Find=\x201c 13\Replace="“" 14\Name=Example Searches/Convert Characters to Entities/right double quote 14\Find=\x201d 14\Replace="”" 15\Name=Example Searches/Convert Entities to Characters/ensp 15\Find=" " 15\Replace=\x2002 16\Name=Example Searches/Convert Entities to Characters/emsp 16\Find=" " 16\Replace=\x2003 17\Name=Example Searches/Convert Entities to Characters/thin space 17\Find=" " 17\Replace=\x2009 size=33 18\Name=Example Searches/Convert Entities to Characters/shy 18\Find="­" 18\Replace=\xad 19\Name=Example Searches/Convert Entities to Characters/ndash 19\Find="–" 19\Replace=\x2013 20\Name=Example Searches/Convert Entities to Characters/mdash 20\Find="—" 20\Replace=\x2014 21\Name=Example Searches/Convert Entities to Characters/right arrow 21\Find="→" 21\Replace=\x2192 22\Name=Example Searches/Convert Entities to Characters/left double quote 22\Find="&ldquot;" 22\Replace=\x201c 23\Name=Example Searches/Convert Entities to Characters/right double quote 23\Find="&rdquot;" 23\Replace=\x201d 24\Name=Example Searches/Promote Headings/h2 to h1 24\Find=(?sU)]*>.*) 24\Replace= 25\Name=Example Searches/Promote Headings/h3 to h2 25\Find=(?sU)]*>.*) 25\Replace= 26\Name=Example Searches/Promote Headings/h4 to h3 26\Find=(?sU)]*>.*) 26\Replace= 27\Name=Example Searches/Promote Headings/h5 to h4 27\Find=(?sU)]*>.*) 27\Replace= 28\Name=Example Searches/Promote Headings/h6 to h5 28\Find=(?sU)]*>.*) 28\Replace= 29\Name=Example Searches/Demote Headings/h5 to h6 29\Find=(?sU)]*>.*) 29\Replace= 30\Name=Example Searches/Demote Headings/h4 to h5 30\Find=(?sU)]*>.*) 30\Replace= 31\Name=Example Searches/Demote Headings/h3 to h4 31\Find=(?sU)]*>.*) 31\Replace= 32\Name=Example Searches/Demote Headings/h2 to h3 32\Find=(?sU)]*>.*) 32\Replace= 33\Name=Example Searches/Demote Headings/h1 to h2 33\Find=(?sU)]*>.*) 33\Replace= Sigil-0.9.9/src/Resource_Files/freedesktop/000077500000000000000000000000001321676412500206225ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/freedesktop/sigil.desktop000066400000000000000000000002361321676412500233250ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=Sigil Comment=ePUB file editor TryExec=sigil Exec=sigil %F Icon=sigil Categories=Office; MimeType=application/epub+zip; Sigil-0.9.9/src/Resource_Files/icon/000077500000000000000000000000001321676412500172375ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/icon/Sigil.icns000066400000000000000000006570571321676412500212100ustar00rootroot00000000000000icns^/is32ü€ýþÿ…þÿþýýüÿЙž­­ª©¢¥­’¶ÿýûÿ¸Nli9'8RuI%šÿýûÿ¸vu"$D1#›ÿýûÿ·jP$A9,M6—ÿýûÿ¶QF¹8ÿ†ö_¼Íjõ§ÿ…#ÿà(öŽÑý8ü6£ÿô–`r½çY'EX˜¤špil32 ‘ÿ€þ ÿþþ†ÿýÿÀŽ—•‘–“‘–™—–“Ž‹‹––•›¤P¢ÿü‚ÿýÿ°t_9\v~…uhaejsp[k|v87;BFU|–„XO6ÿû‚ÿýÿ²xlrn,07=@m>A G4Œÿû‚ÿýÿ³wz~‚-4/D./D:3Œÿû‚ÿýÿ³uq…U2!:==9BK49'&/ÿû‚ÿýÿ´ojv=:=7668>(,d?1(+Žÿû‚ÿ ýÿ¶ibe98= 08€6 1[Kl>.+Žÿû‚ÿýÿ·cUR84VN$(345.[oi)7*.ÿû‚ÿýÿ·dBK,8H`fI621,UqP4J3Œÿû‚ÿýÿ´s(M-(6Jank]N6R," €-ÿû‚ÿýÿ±6M&!+=Thrqg^P•(Žÿû‚ÿýÿ±}SE0&9M_jmmQ*[)Žÿû‚ÿýÿ±{U.<2 ,?S_ff$@˜'Žÿû‚ÿýÿ±|R$36$%6CG]e2Œÿû‚ÿýÿ±}M7o‚p_A29(')5G!ÿû‚ÿýÿ²xoz‹mYV]cE0=!$B*˜ÿû‚ÿýÿ³t|‚F€/57KOB((<˜ÿû‚ÿýÿ³k‚E+ *2D( F"?–ÿû‚ÿýÿ¯kj', H[DO;.OE=•ÿû‚ÿüÿ¨fJ'#^Ž‹PfJ&\RQ49•ÿû‚ÿüÿžX:#.dS<=@WP VL7–ÿû‚ÿüÿ™M5A4C #,XH6uT4—ÿû‚ÿûÿD*57-9.(R]d5&˜ÿû‚ÿûÿŠ70M6N}b2 —ÿû‚ÿüÿ(R'#XS"5Sx‡i0–ÿû‚ÿýÿ°AV Pot}ƒ‡…tK"0*)Žÿû‚ÿýÿµFF*01(!,@KMG;+‚  ’ÿû‚ÿ üÿ•1<4 ƒ ! ’ÿû‚ÿ üÿ–/6'‚ " “ÿû‚ÿüÿ—,2  *(  “ÿû‚ÿ üÿ—),*€ !;%’ÿû‚ÿüÿ—)% 1&:'’ÿû‚ÿüÿ–1",4. C’ÿû‚ÿüÿ”7  !,33/!N “ÿû‚ÿüÿ”7" €$,4*"M “ÿû‚ÿüÿ”7! (3O “ÿû‚ÿüÿ”7" -5’ÿû‚ÿüÿ”7 1?8/!   #”ÿû‚ÿüÿ•45;+‚  ’ÿû‚ÿ üÿ•1<4 ƒ ! ’ÿû‚ÿ üÿ–/6'‚ " “ÿû‚ÿüÿ—,2  *(  “ÿû‚ÿ üÿ—),*€ !;%’ÿû‚ÿüÿ—)% 1&:'’ÿû‚ÿüÿ–1",4. C’ÿû‚ÿüÿ”7  !,33/!N “ÿû‚ÿüÿ”7" €%,4*"M “ÿû‚ÿüÿ”7! (3O “ÿû‚ÿüÿ”7!,5’ÿû‚ÿüÿ”7 1?8/!   #”ÿû‚ÿüÿ•44ÛÿýeQÿÿü^ ÌÿóUDüþÿÜ@Þÿ¾-Ýÿüÿî}*à¿SƒÿüüþÿÙ{) 62³ÿýûüþÿîªT" ùÿþûûÿÿþÑtbºóÿÿüúýþÿÝ_Mžäÿÿþúüÿþ| DB"7„Îûÿýûþü[—ñÿÿó¦+,iÅÿþûÿÌÈÿã­ŸÁüã:$úÿþýX¤ÿÄU+FßÌ Šÿüÿ=úüs D'cûHÈÿÿª |ÿñTžÿä«ðNzÿÿ³›ÿú_*ðÿûÿÑ0Yÿÿ©™ÿÿŽ¿ÿþø}yÿÿŠ yÿÿÞ,4Ÿ»}+ËÿíVAøÿÿ´$ €ÿÿ¨%Óÿùÿ·+‚ûÿÅF  Æÿüþÿê•T::Q†Øÿö°K…×¾Ààûÿÿÿÿþÿî¶s4--)?c’™•†lM/ it32rÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ÿýÿ Š”™’“€’ƒ‘‘€’€“€”“’’‘”’™O ('Þÿý ÿýÿq|Žz{{z€{ zzyxwwvuvt€srrqrsqpsqqrsux{~}zyz‚{‹zx‚.Øÿý ÿýÿw‚‚€†‚ ƒ€€€~|€{zzyzxwxxww€vuutsqokhffiu…ˆ‚~ƒ€€‚€~‰1Ùÿý ÿýÿv€yt„uvqw…ƒ€|zxyzzyxwwyz}~{z|zywwvuttssqojaR?BVw‰…ƒ„‚€€‚ƒ~}€}ˆ0Øÿý ÿýÿv€~ƒW;@?K@?9UŠ“ƒzxxzzyxy|‚†‹Ž”€‰Ž~‡„~|ywusqpnleS4*R‰‰…}||{xqnmƒ‡~}ˆ0Øÿý ÿýÿv€~ƒV:?€>L?;=o—Šxuxyzxx~‡Ž”•–™šœ’™ˆ„‘„’…„€~{zxurnkjje`ovxyzyywtoe@Pƒ}ˆ0Øÿý ÿýÿv€=~ƒV:?>>?;E–}swzzxyƒ‘—™™œ‘€mYIF6348FHLVkq††‚{w|uwwuronptvvxx€wvumdJ E‡}}ˆ0Øÿý ÿýÿv€ ~ƒV:?>?:GŠttyzyy…•ššœŸqN3$€#)5G\s}€{nrnqvv€stvy~‚‡‹}unaG y}ˆ0Øÿý ÿýÿv€T~ƒV:??:Gˆ‰quyzx’œ™› ‰T-#,6?DIIJE=8.'$#$&,<[ovqjgrx|€ˆ’•”•šmCjaCg„|ˆ0Øÿý ÿýÿv€ ~„V8?;G‰†nvyyxˆšš— ŽR%$7L[aba^€]0_bbaZL:*'()'2Pillsv”“”“”šr++g]; Oˆ{ˆ0Øÿý ÿýÿv€T~„V9=>Šmvyxy›–˜Ÿm)%D]bZNE=864457;AHR\c]H/'-,(4Pqxz€ƒ’’“”“šp("?lR0Pˆ{ˆ0Øÿý ÿýÿv€ ~„V9;tluxxz“š”ššR ?_^L<0(!€0%-6AQ_aK0(0.+=`€…ƒ‘’“’›r(*%LhI&Kˆ{ˆ0Øÿý ÿýÿv€~„V2]qtxx{“˜’›‘?"'VaJ6( 0 ".;L__C+,1,,Fl‡—–˜}.+/(TbA0ˆ{ˆ0Øÿý ÿýÿv€~„SAŠxo€xŒ˜“˜Ž8#0`V:(Š+  .=PcW4+03./Jt€sf8(--'S_?0ˆ{ˆ0Øÿý ÿýÿv€~„Rq‡kwxwŠ”•–@%1bN2Ž  #3D[b>-€3-/7862001-MaA"/ˆ{ˆ0Øÿý ÿýÿv€j…osww‘‘–U% )`M/ ˆ…' +=SfI-31465:>8023/>aG* 1ˆ{ˆ0Øÿý ÿýÿv~„wmww{ŽŒ‹•|$$#UT1 …„‚&':OfI,45456;911213]P2%…|ˆ0Øÿý ÿýÿv‚‚ksvw„Œ@&=_: „€  €%:PhF25568:;3€1.TY:|~‡0Øÿý ÿýÿv€~qlvv|ˆ…‰’s"%$"XN+„)7:<>:90 '>Vh<37899:4./0+G_A"€ k‡0Øÿý ÿýÿv‚iruw…ˆ†…ŒI '"3^> ƒ4>=;:99::<>;)€,E`_69€8<6./0,=aG(V…†0Øÿý ÿýÿv€vguuz€† ˆ},%("DZ4‚ 1?;99ƒ:99:=>) €!7PjK38;?B7,--+3`K- C††0Øÿý ÿýÿv~‚kkuv€€‚‹c!''"PS.‚<;8‰988<;)F`c9>@@D<-0\O1 2††0Øÿý ÿýÿv€}Zptw}}€~„I#*)&TN, <98Œ989>-=VkN>CFJB*(WR3€‡/Øÿý ÿýÿv~‚qTssxwuy~9&*)'VL* €;‘87;5 5Rh]CHHIE+€*)VS4}ˆ/Øÿý ÿýÿv~…aTssxnnoql/())*[K+ 2:7‘8%7:6.PeiMNNOL-)**(SS3}ˆ/Øÿý ÿ!ýÿv~…\Yqsvpqpte)(('*\M. <7”8#5^%PcmNMNNL,&''$RR1ˆ/Øÿý ÿýÿv~…GYpto]aacV) ([R3&:6“7$80lh Rcob^__]0&()'TO. q‹/Øÿý ÿýÿv~ƒD[nsumlko\€,-)TZ:€,8”6$71aŽ8Ucqd]^_Z*#%%&WJ* jŒ/Øÿý ÿ!ýÿv~ƒM\mtlfjimU-,,-)GcE*!;5“6$71c‡rXerd]^`T##$"+ZC$q‹/Øÿý ÿ"ýÿv€}8[kth[]\`K0-..-5eT;"  475’6$71d‚†"^grc]]bI"#6Z9ˆ/Øÿý ÿ ýÿv€{*Zisi€WYG2.-.1,TgM:&854‘5$60c‚ˆG!disa[[`9 HR/}ˆ/Øÿý ÿ$ýÿv€|#Tgs\EMLMF40/102=ecPA2 5645$60c‚‡M0hkuj`b`($XB% }ˆ/Øÿý ÿ%ýÿv€~JgphWVVXN3400384DjdVK@/ 2734$5/c‚†P>jntmmsRAU3€‡/Øÿý ÿ ýÿv€~CbngE€HE543345A@Joi]UL>"(9434$5/cƒƒ^Tlpvfdc((Y?%2††0Øÿý ÿýÿv€ 3_jlIFD@>62534@B@NOfpc]UK7561Œ34.c„€`bmsuluETJ-€ C††0Øÿý ÿ*ýÿv&YdoG::9;8235@A@LQ>Qerib\UK- -;30Š34.b„~ahotxy[PO1 € cƒ†0Øÿý ÿýÿv}ˆ-P^pS6;942:AKP@NOM\sohc]VL'8<3/23†23-b‡tWlnw„j#*VO2€  y‡0Øÿý ÿýÿv}ˆ-BXid85101€21=OBJQPNQXnsnhd_ZH&$>A3.13„23-a‰hMmmpa!#E]J0 +…|ˆ0Øÿý ÿ3ýÿv}ˆC/O_n=,10/.01106IQNNRUVXbqsmieb_P1*BE6-.1212,a‰iIgja$'I_Y@+ \†{ˆ0Øÿý ÿýÿv}ˆRBUjY+/-,,-€106IPPTT[€WmssnjgddV9&1GM>1,/€12,`Q1\\b]`]J6$ ‚ }ˆ0Øÿý ÿýÿv~„g 0K\l<)-,+)-€0//0BUTXWZV^^alttpligg_G43EOH7-,02+_ŽJKJMNE8*ƒ [†}}ˆ0Øÿý ÿýÿv€}%)&'$$)././.,6Na`^]^]bg_fjrvvrpmkli\D26Alp‹y~}ˆ0Øÿý ÿ?ýÿv~‚t3GZh5!($$&#&,/../,-;R_`]]faedecnlvvurnlkjdP92OX‡ c‡}€}ˆ0Øÿý ÿýÿv€}ˆ/4GZf5%&#$"#(-.+,;Q_df_fdeihbkhquwspmjjhZ@%€€"+`„~€}ˆ0Øÿý ÿýÿv€}‡C !4FYe6$$#"" $(-.€-*,:U`hdeclcjgdbkkrvurnkiibP+ €‚ ,1'`…~€}ˆ0Øÿý ÿýÿv€~„M  2CUeA!"€! !&+€-,,**5L^gkhbjceejbcgnuvsolhfbR6#,/,,&`…~€}ˆ0Øÿý ÿýÿv€~„L!€ .?OdO$" !$)€-*,*(0AZbnhdbjeedcdakqwtplifbX9"251-,+,-&`…~€}ˆ0Øÿý ÿýÿv€~…J( (9H^\6!"'+€,'*((4JYfhjacdcd`bcdpuuqlieaU1%.,++,%`…~€}ˆ0Øÿý ÿýÿv€~…J$/ "1@SbN)%)+$)&,:T_gecd^dae[d]juvqlgc^P,(.+,%`…~€}ˆ0Øÿý ÿýÿv€~…J$,( )7FZ_E'+#'++*+*''/BXde_ac^baX^cervqke_W?*-#_…~€}ˆ0Øÿý ÿýÿv€~…J$+,$-:IZ^M0€!%*+€*)&)9K`df[e[[e]X[frtog`XH $'^…~€}ˆ0Øÿý ÿýÿv€ ~…I#*(+!€: !-8FV_T:!$(**)*)&&/EUecX_bZ[ZYRbrsiaWJ%e…}€}ˆ0Øÿý ÿýÿv€ ~…I")('*#  *4@P^[D'€€.!%))())'$)ncS? l†0Øÿý ÿýÿv€T~…G&%&!"Aq‹Šƒ„„qooh\M>*  (2?O][D&#&%%&$%14454,#Fo\K3 ‡/Øÿý ÿýÿv€T~…F'$=q‹zxyxx|{zyywsk`N8"$/:IY^M/$%$%$#-51&&)%WjUA$M.Øÿý ÿýÿv€~…F"&\ŒŠ{wxyzzyxyxvvtsoh\H/  +6DT_U:€"$#,'$%($'g`L3…1Øÿý ÿýÿv€~…G1u}uwyzyxz~€‚xuvzxwtpj_L1'2>O]\E&$##$#%$$"#?lT@ F8Øÿý ÿýÿv€~†@6„‡uuyzyy~…ˆ€†$€uyzqplprvuph\H+#/:I[`E€"€#$#€!"!]aI. (Øÿý ÿýÿv€%~‚^„rvyyx~‰Œ‹ŽŽ‰~liV__fjmjc_ksulcU:€  ,8H\^8"#€ !:jQ:€Øÿý ÿýÿv%~†}qwzyz…Œ‘ŽxR3 $3FT`\RauqeZE%‚ -;NcQ"€"#"€^]B$Øÿý ÿýÿv&€yowyx|Š‹‹m4  ,?JMOjtf\H* ƒ  #3C[a3€€! "BfJ/ ƒØÿý ÿýÿv€(zowxx}Œ‡Œ= 2DQY]YRF7$ $<>B]sfZH(„ ,_>Øÿý ÿýÿxzftuyxsx]RS-ƒA-@IKH=.7To=#$gS3  `ƒ* %@Xi'!3`@!Øÿý ÿýÿŽypjuwzmlx: _E$ ƒB Djx{{zwriY>&3PkY9 `V4  X‡…24MiL!"%-`C$Øÿý ÿýÿwgptxtlni)`<‚C\wzzyxyyzwpeNAQia1"^V3  Z…}†%'E]g' #%,"(`D%Øÿý ÿýÿ‘l`stxjem`4_9D2itxyx{‚ƒ|qtwueWYjjV(_T1  Z†{†D>UmB"+-/%"_E&Øÿý ÿýÿ”_bsut``iM 8]7€EIpwxx‚‰ˆ„rb`RdsfcnjW"aO-Y†|†@ 5Ri[*,+-% _E&Øÿý ÿýÿ“Ufrvo\^e? 9]8#sfuxy…Š€†sfX@,QvltpX eI'€%Y†|†@*Odg0/01- _D%Øÿý ÿýÿCipwdTX^4  3_;Ibkvw{‚ƒ††saI5)Z{uxZ 1eA€%Y†|†?M`o>.12.!^C#Øÿý ÿ3ýÿ‰@moveYZ_/-a@" UXouywq{‚„ˆ}X7(#p|x;G^8€%Y†|†?L_pH8==7 %]@!Øÿý ÿ2ýÿ†:mouOJMQ,"aG) WHrsx][eq‚U:&Yr\P-% X†|†?L`q]EHJA *]=Øÿý ÿ2üÿv-nntODFI,\O1G?ossKFIKV7(sŒ4.c?"% X†|†?Pbr]CFH< 4[8Øÿý ÿ"üÿv*lmsNGHK4QY9 !3knrB62(€ *Vr> SR0% X†|†>YetY@DF8 >W3Øÿý ÿ1üÿv(knnDBCF6 =bA$+bgv;+. 3_$40ciuaIKP6  KQ-Øÿý ÿüÿv$gkqICEG=%dK0€T_oW  ]F*‚X†|†=:TRinuidbe3  VG' ‚Øÿý ÿ0üÿwcisM;=>:ZX;>T`p6  VL/ ‚X†|†=Veemss\^ac  "\< ‚Øÿý ÿ%üÿw]gs=+0/1 AeF,!BP_j0  € TN1 ‚X†|†='henpvugccN 8X3‚Øÿý ÿ"üÿx WesM.204!!hS;  )=L[g=€ %VK0ƒ W†|†=Mqjssxjhin5 PK)‚Øÿý ÿüÿyO`rQ&-,.&QfJ4€ %6DPaW9$+DVC-ƒ W†|†= (qmqtwwgdfb !\; ƒØÿý ÿüÿ{B]m`*,)#  h[F1€ +8ANY[XUWTI5& „  W†|‡< ^yltuzumjm> BS.ƒØÿý ÿüÿ|3Xgk);mUE0€'/59<;6.% „ W†|‡6=€mtuxzonpj [?# „Øÿý ÿ ýÿQ`q5€QkTD1 …  W†}‚Xuupvwzzokt< DS/„Øÿý ÿ ýÿ FZoP€€`gTE2ƒ€‡€ W†}~‚yowwy|qrx^ "\<" „Øÿý ÿýÿ—!7Seh'keUH6 W†}ypwxx}zsrr! SJ+…Øÿý ÿýÿ˜4$J\q6 '# 4oeXL<"ŽT‡zpwxw|ux~4 AV2 …Øÿý ÿ!ýÿ—M>Vl\&--,*##7oh[PD. €‡  1s‚ysxyy}„~xF 1[9"‚€Øÿý ÿ$ýÿ“f0Rek/-//0"!"#5ll_WO>!€" ;e…‚wtyyx}„}}‡N '\?'‚Øÿý ÿýÿx!PboB0224"€!8#4lpd_XO?! 3Pu‡…|vwzyx€…|„F &]C*‚ €Øÿý ÿ)ýÿ>Oaq<*1/2"#"! $24^tke`]WJ.1KKC>€-!+9BL[hy„‡‚zxwyzyz…|5 ,]D*  37Øÿý ÿMýÿŽ|fQbqP>A?E(  !$221-Qrslhfee^JBPlnkutt‚|€€€|yxxyzyy~†‚~‰q" 9]A* ƒs4Øÿý ÿýÿv‚ TcrT=@C6 €  "3517=?bttolklpojgnrvxxz€{z„y~„…€‡„Q KZ<' ‚ <‘-Øÿý ÿýÿt‹@ WdsTDMgsvtrpoqsstu€vww‚xz|€ƒƒ‡†c%,ZR6$ ‚ |ˆ/Øÿý ÿýÿu‰YWerQ?B ‚ 4 *:LJGMPcmvwxvuvuuvvwwxxz{}~€ƒ„ˆ_+L^E.‚ m‚†0Øÿý ÿ*ýÿu†jTcpN9  #6MSWUU^blqxs|€{||z}{}~€‚„kEF_Q8' ƒ Zˆ{ˆ0Øÿý ÿ*ýÿu†hM^oE!)-.*  %;JY`ccnhhy€wx€{€}ynX?#  $I_V>,„ M‡}}ˆ0Øÿý ÿýÿvƒv=Vb_$,@NWZ[Z[\`\I/  $3=QQ[a€`^^RI:-  :V`T?.! ƒM‰}}ˆ0Øÿý ÿ"ýÿv€'IP[`\_ZOD<73349CP[[P>)  ‚ +BWa\L:,  „M‰}}ˆ0Øÿý ÿ(ýÿv2;ACA:2*#$,5@LW\]VK>2' ‚ %1>LX`aZM>1' … a‡}€}ˆ0Øÿý ÿ)ýÿv€‚ !  ")07?HQW]__^[ZXX€YXZ]`bca]VLB8/& †s†}}ˆ0Øÿý ÿ ýÿvˆ2‡  &+/49=BFILM€NMKIE@<71+% ‡Dƒ‚}‚}ˆ0Øÿý ÿýÿŽt}…B  "$%&€' &$#  Š"i‡||ƒ}{†/Øÿý ÿýÿ’€‰o—ƒ"_†‡„ˆ†‘3Øÿý ÿ üÿ}CRNS¹%SWNN†ONTØÿý ÿûÿ`ÒØÿý ÿûÿ`½Œ€Øÿý ÿûÿ`ÒØÿý ÿûÿ`ÒØÿýŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ÿüÿŒR_ ]…\ƒ]€^€]\”]\a;$''Þÿý ÿüÿu+<š98‚766ƒ56545445568:;<;98‘98=€Øÿý ÿüÿx4D‚AC‡DCBBA€BA@@€?ˆ>€=< ;;9975446=<;=>>=>=<;;:99861) !,:@?>>?‚@AABB@?€@?DØÿý ÿüÿw3C€@?D‚ /=>>‚=> =;9857343*146-€58;<==;98763*8;>>?>=987BD€@?DØÿý ÿüÿw3C€@?D‚;@><<€=>?><976789380.,)€2*3+*)*,/39<<:7655429=>=<:83! (B@@?DØÿý ÿüÿw3C€@?D(@?;<€=*??>:88;:4+! !)--*%"&&09=:778:;;<‚=;72&#D??DØÿý ÿüÿw3C€@ ?D/A<:€= >?>:8;<4#Œ "')')8=<;;<=€>=;2781$=A?DØÿý ÿüÿw3C€@ ?D/@;;€=?>:8;DØÿý ÿüÿw3C€@?D/@9;==>?=89=2€!+1221€01220*$"")*645564:"3/(D>DØÿý ÿüÿw3C€@?D*?8;==>?:7:= €.2.(#€1!%*02, %'*,56677:!8))D>DØÿý ÿüÿw3C€@ ?D!>8;==?>97;9/0' €  !)10)-,4€5;"6%&D>DØÿý ÿüÿw3C€@?D€:<=??87;4 (2% ‚/ '1. .989<)#2 D>DØÿý ÿüÿw3C€@?E1;9<==<87:2 0, Š+ )3& $*""1D>DØÿý ÿüÿw3C€@?E<8<<=>5287 2( Ž  "/0‡2 D>DØÿý ÿüÿw3C@B$/8:<=>45670'’*4€ 1$E>DØÿý ÿüÿw3C@ A449<<>8128)(,”  (5‡,) C>DØÿý ÿüÿw3C@A85;;=:2€3 1— (5…". € ??DØÿý ÿüÿw3C@A76<<>2.16$)( ™ ,3 †2 € 6ADØÿý ÿüÿw3C‚@59;=9./.1 0› "2*‚€ 2#+CCØÿý ÿüÿw3C€@A;4;;=1./0). œ (70&"CCØÿý ÿüÿw3C€@A66;=8*,-2"+ ž #1,,)DCØÿý ÿüÿw3C€@?-9:=0)+*.&(ž ,7 ‚(*ADØÿý ÿüÿw3C@@B9*::;(%'++(')6#€ ‚%+ ?DØÿý ÿüÿw3C@?C1*:;8!!"#€+'œ(4/ € ‚#+  ?EØÿý ÿüÿw3C@?C.-9;4!##$,'š$(24  $* @DØÿý ÿüÿw3C@?C$-8<.‚** š,6)27&)€ 9FØÿý ÿ üÿw3C@@B".8;/€ "€#/™'I+29€*&5GØÿý ÿüÿw3C@@B'.6<) !€3"™(F9 -39-"€ 9FØÿý ÿüÿw3C@@?.6<& ‚2+˜$(DC /4: . @DØÿý ÿüÿw3C@A>-5<' !6& –$(CD$25:*  ?EØÿý ÿüÿw3C@@?+4;!  ƒ03(!•(CD'46:!€," ?DØÿý ÿ üÿw3C@@? %3:* 34+&!”$(DC)587#!%,ADØÿý ÿüÿw3C€@ "19,  66.+&$(DB/+697 - DCØÿý ÿüÿw3C€@ 063 .:2/+& Ž(D@016;3!&(& € "CCØÿý ÿ(üÿw3C@@A -38*;51/+&Œ(D?148<1(&)‚ 2BDØÿý ÿüÿw3C@?E (/: 8:41/+&Š(F:,68:1! *(‚ =@DØÿý ÿüÿw3C@?E",6-„ 0;8420.$ ˆ(G4&781/% C>DØÿý ÿüÿw3C@?E"(08 „"6;8531/( …(G4%47, /. ‚ .D>DØÿý ÿüÿw3C@?D)"+7%…+8;85322,‚'I(./2.10& ‚ A@?DØÿý ÿüÿw3C@?C4&.6… +8<965440% €'I% &%''#ƒ .D??DØÿý ÿüÿw3C€@? (3,ˆ**8<:76554-"'I) „C?@?DØÿý ÿüÿw3C@@?D!*7‡ ")5;<976563)'F5…B€@?DØÿý ÿüÿw3C@@?D( #,6ˆ! &19=;87665/$/J8Œ =A?@@?DØÿý ÿüÿw3C€@ A:$.3 ‰!€ %*6;<:86552*',‰*E?€@?DØÿý ÿüÿw3C€@ ?D$.2 Š !! #"#$/7=<96554. €‡(D?€@?DØÿý ÿüÿw3C€@?D#-2‹" !$$" $(3;<:86551)€…(D?€@?DØÿý ÿüÿw3C€@?D!,3‹"$"$ !!##-8<;86542* „(D?€@?DØÿý ÿüÿw3C€@?D€  (4"Œ &" #€!(3;;96532, ‚(D?€@?DØÿý ÿüÿw3C€@?D  $0-"#$!! !"09<:6531+ €(D?€@?DØÿý ÿüÿw3C€@?D‚   *2"Œ #" !! " *8<:6420((D?€@?DØÿý ÿüÿw3C€@?Dƒ  #./€‰€!" ! !'6<:530, €(D?€@?DØÿý ÿüÿw3C€@?D…  %//" Ž!"""'6<840,$'D?€@?DØÿý ÿüÿw3C€@?D†  #,1(€"!!&8;51,&*D?€@?DØÿý ÿüÿw3C€@?D„   )0- $-<61+$D@?DØÿý ÿüÿw3C€@?D‚… &.0#Š ":70*"C€@?DØÿý ÿüÿw3C€@?Dƒ† #,0)‹! 67/) B?@?DØÿý ÿüÿw3C€@?Dƒ€ƒ  (0- ‹66.' E??DØÿý ÿüÿw3C€@?D€† &./$‹ 65,$*D>DØÿý ÿüÿw3C€@?D )42ƒ "+0)Š   82* 6ADØÿý ÿüÿw3C€@-?D*:>@?@B9785.'   (0- ‰ 9.& ADØÿý ÿüÿw3C€@ ?D+=@?>=€>==<:60( %.0$‰ &7*!'HØÿý ÿüÿw3C€@ ?D;A>‡=>=<<;:85/$  "+0)‰21&CØÿý ÿüÿw3C€@ ?D .A?<<€=€>#?=;;54;8;<=;950&   (0- ˆ€7* #Øÿý ÿüÿw3C€@?E 7A<;€=(>??<9773:-/0+,+05;<94/$ %/0ˆƒ,2% €Øÿý ÿüÿw3C@B&4A:<€=?@=9;<93*)$#&()($$/9<72+€  %/.†€ 6) €Øÿý ÿüÿw3C‚@?=:<==>@=:=<0" *;:3-#‚  (2&‹-/"ƒØÿý ÿüÿw3C@ A=8<==??:;=+‚‚  2<3.$ƒ  !.0‰5%ƒØÿý ÿüÿw3C€@ A>8<==??8<6&,.,& *;3-$„*4Š 3) ƒØÿý ÿüÿw3C€@ ?8;<=@>7=,€&12/+((),032+$;2+#„ &4"‹(/‚Øÿý ÿüÿw3C€@)9:==>=8=( )4-#$+32!&:0( † $3%‰3"‚Øÿý ÿ2üÿw3C@A;8<7<<><59-5& ƒ  +7 24) ‡&5†/)‚Øÿý ÿüÿw3CA79<=>5265% ˆ (88-"€ )6†(, ‚Øÿý ÿüÿw3D:4;<>827"-* …‚*8+3%€€  !//† !/ Øÿý ÿüÿw3D58;=;/24 2Š"206'€ &5„ 1Øÿý ÿüÿw4?3;;=4/3$'* ƒ  %&% *8 4)€+C!,5 € 1 Øÿý ÿüÿw4:6;<:,,2/#ƒ"5=>>=<95,(7'0,$'EC '6!1"Øÿý ÿüÿx368:=4+-*1‚ .<=€><93'!)6- .,$(D?D#/3  0"Øÿý ÿüÿy.2::<,(-%0 ƒ5:€=>?<837<;3,-62 /+$(D>D +8  0#Øÿý ÿüÿz'3:<8%&+0 ‚=9<==@>;8.&&/;3282!0)$(D>D)6*  0"Øÿý ÿüÿy"69<3#%)0 € 03;<=A<:;:0)" #<6;3! 3%(D>D(23 € 0"Øÿý ÿüÿx79=, "$0+6;<=989;:0' *?:4#3 (D>D'18  € 0"Øÿý ÿüÿt98<+"$& 1 €(9;>6/59:<6" 9:3!0 $(D>D &09 / Øÿý ÿüÿs88;   1$€!#::=&%*099! '@0.)‚$(D>D '19)/Øÿý ÿüÿk97: .(€8:9" 0>2 ‚$(D>D(1:)/ Øÿý ÿ"üÿk 979&- 689 ‚ !1)* ‚$(D>D -3;', Øÿý ÿüÿk €72!24<‚  0‚(D>D25<*$)‚Øÿý ÿüÿk 668 3& +09)‚‚ /# ‚(D>D%*58;-*()+$‚Øÿý ÿ üÿk45:€,,€ +09€‚+' ƒ(D>D"/37:8%')) .‚Øÿý ÿüÿl14: 3# !)06€ )(ƒ(D>D ,388<6+))- ‚Øÿý ÿüÿl.3;!  4*€&.4„+&ƒ(D>D56::<.,-/(&ƒØÿý ÿ üÿl*0:%   &4%€"(1+ !+!„(D>D 179:<9+*+) .ƒØÿý ÿ üÿm#/8.  € 4.# €!(-.,+,+% „€(D>D&:7:;=5/./ * ƒØÿý ÿ üÿn,45 €8+# €  …€(D>E;7:;=;001. . „Øÿý ÿ üÿv)09&7*" ‚ € …(D?B'4;8<<=70/3!* „Øÿý ÿ üÿx #-9%€€/5*# „‰(D?@>;8<<>;125(.„Øÿý ÿüÿ{*33€  53+$ “‚)D?A=8<<=>6322 )% …Øÿý ÿüÿ|&.: 83,&‘‚(D@=9€<@8458,…Øÿý ÿüÿ{ +7-  €  85.("Ž7B=:<==?=95:.†Øÿý ÿüÿy+*35€  660,(€„€+=A<:€=?=88= /  ‡Øÿý ÿüÿw4(18 €  6930,( ˆ !4>A?<<€=@>89<.! ƒ €Øÿý ÿ)üÿw7! (19    -;631/,% € &-6=?@>=<€=>@=7;9/"  Øÿý ÿüÿw65 )19#  €%9:74€30%!&120€4;9<=>?>>‚=>??:9>2 /! ƒ:Øÿý ÿüÿw3C +2:&ƒ .:;9766886479;<;=>„=?@=9=<"%. ‚ IØÿý ÿüÿw2H ,2:%† !09<;9889::;ƒ< ==>??=<;==, .* ‚ >EØÿý ÿ üÿw2G,,3:$„  "-4:<=<;<;;<==><€;>:) &/# ‚ 7ADØÿý ÿüÿw2E5 *29# †  $&$$),26:8ƒ=;;::9:€;0  "0) „ -D>DØÿý ÿ üÿw2F5'/9€€ '*++1-.76:7€961& € $0+ „ 'D??DØÿý ÿüÿw3D< ,1/ '+‚.0.$ƒ ##(*))$    +0+  „'E?@?DØÿý ÿüÿw3CA $(.1/0-("")..' “  +1/& „'E?@@?DØÿý ÿ(üÿw3C@  "!  ',//+$ ‚ %,01-' †1D?€@?DØÿý ÿüÿw3CB    $),/00/.-ƒ,-.0211/,'! †:C?@?DØÿý ÿ üÿw3BEˆ# "#%&''(''&%#  ‡"BB?‚@?DØÿý ÿüÿw2AC!‘    5D…?>CØÿý ÿüÿy7FG8™€ƒ€0GGC…DCIØÿý ÿüÿn+(* »*,'‡('+€Øÿý ÿûÿ`ÒØÿý ÿûÿ`½ŒØÿý ÿûÿ`ÒØÿý ÿûÿ`ÒØÿýŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…ÿüÿŒR_ ]…\ƒ]€^€]\”]\a;$''Þÿý ÿüÿu+<š98‚766ƒ56545445568:;<;98‘98=€Øÿý ÿüÿx4D‚AC‡DCBBA€BA@@€?ˆ>€=< ;;9975446=<;=>>=>=<;;:99861) !,:@?>>?‚@AABB@?€@?DØÿý ÿüÿw3C€@?D‚ /=>>‚=> =;9857343*146-€58;<==;98763*8;>>?>=987BD€@?DØÿý ÿüÿw3C€@?D‚;@><<€=>?><976789380.,)€2*3+*)*,/39<<:7655429=>=<:83! (B@@?DØÿý ÿüÿw3C€@?D(@?;<€=*??>:88;:4+! !)--*%"&&09=:778:;;<‚=;72&#D??DØÿý ÿüÿw3C€@ ?D/A<:€= >?>:8;<4#Œ "')')8=<;;<=€>=;2781$=A?DØÿý ÿüÿw3C€@ ?D/@;;€=?>:8;DØÿý ÿüÿw3C€@?D/@9;==>?=89=2€!+1221€01220*$"")*645564:"3/(D>DØÿý ÿüÿw3C€@?D*?8;==>?:7:= €.2.(#€1!%*02, %'*,56677:!8))D>DØÿý ÿüÿw3C€@ ?D!>8;==?>97;9/0' €  !)10)-,4€5;"6%&D>DØÿý ÿüÿw3C€@?D€:<=??87;4 (2% ‚/ '1. .989<)#2 D>DØÿý ÿüÿw3C€@?E1;9<==<87:2 0, Š+ )3& $*""1D>DØÿý ÿüÿw3C€@?E<8<<=>5287 2( Ž  "/0‡2 D>DØÿý ÿüÿw3C@B$/8:<=>45670'’*4€ 1$E>DØÿý ÿüÿw3C@ A449<<>8128)(,”  (5‡,) C>DØÿý ÿüÿw3C@A85;;=:2€3 1— (5…". € ??DØÿý ÿüÿw3C@A76<<>2.16$)( ™ ,3 †2 € 6ADØÿý ÿüÿw3C‚@59;=9./.1 0› "2*‚€ 2#+CCØÿý ÿüÿw3C€@A;4;;=1./0). œ (70&"CCØÿý ÿüÿw3C€@A66;=8*,-2"+ ž #1,,)DCØÿý ÿüÿw3C€@?-9:=0)+*.&(ž ,7 ‚(*ADØÿý ÿüÿw3C@@B9*::;(%'++(')6#€ ‚%+ ?DØÿý ÿüÿw3C@?C1*:;8!!"#€+'œ(4/ € ‚#+  ?EØÿý ÿüÿw3C@?C.-9;4!##$,'š$(24  $* @DØÿý ÿüÿw3C@?C$-8<.‚** š,6)27&)€ 9FØÿý ÿ üÿw3C@@B".8;/€ "€#/™'I+29€*&5GØÿý ÿüÿw3C@@B'.6<) !€3"™(F9 -39-"€ 9FØÿý ÿüÿw3C@@?.6<& ‚2+˜$(DC /4: . @DØÿý ÿüÿw3C@A>-5<' !6& –$(CD$25:*  ?EØÿý ÿüÿw3C@@?+4;!  ƒ03(!•(CD'46:!€," ?DØÿý ÿ üÿw3C@@? %3:* 34+&!”$(DC)587#!%,ADØÿý ÿüÿw3C€@ "19,  66.+&$(DB/+697 - DCØÿý ÿüÿw3C€@ 063 .:2/+& Ž(D@016;3!&(& € "CCØÿý ÿ(üÿw3C@@A -38*;51/+&Œ(D?148<1(&)‚ 2BDØÿý ÿüÿw3C@?E (/: 8:41/+&Š(F:,68:1! *(‚ =@DØÿý ÿüÿw3C@?E",6-„ 0;8420.$ ˆ(G4&781/% C>DØÿý ÿüÿw3C@?E"(08 „"6;8531/( …(G4%47, /. ‚ .D>DØÿý ÿüÿw3C@?D)"+7%…+8;85322,‚'I(./2.10& ‚ A@?DØÿý ÿüÿw3C@?C4&.6… +8<965440% €'I% &%''#ƒ .D??DØÿý ÿüÿw3C€@? (3,ˆ**8<:76554-"'I) „C?@?DØÿý ÿüÿw3C@@?D!*7‡ ")5;<976563)'F5…B€@?DØÿý ÿüÿw3C@@?D( #,6ˆ! &19=;87665/$/J8Œ =A?@@?DØÿý ÿüÿw3C€@ A:$.3 ‰!€ %*6;<:86552*',‰*E?€@?DØÿý ÿüÿw3C€@ ?D$.2 Š !! #"#$/7=<96554. €‡(D?€@?DØÿý ÿüÿw3C€@?D#-2‹" !$$" $(3;<:86551)€…(D?€@?DØÿý ÿüÿw3C€@?D!,3‹"$"$ !!##-8<;86542* „(D?€@?DØÿý ÿüÿw3C€@?D€  (4"Œ &" #€!(3;;96532, ‚(D?€@?DØÿý ÿüÿw3C€@?D  $0-"#$!! !"09<:6531+ €(D?€@?DØÿý ÿüÿw3C€@?D‚   *2"Œ #" !! " *8<:6420((D?€@?DØÿý ÿüÿw3C€@?Dƒ  #./€‰€!" ! !'6<:530, €(D?€@?DØÿý ÿüÿw3C€@?D…  %//" Ž!"""'6<840,$'D?€@?DØÿý ÿüÿw3C€@?D† #,1("!!'8;51,&*D?€@?DØÿý ÿüÿw3C€@?Dˆ   )0-€ #,<61+$D@?DØÿý ÿüÿw3C€@?DŠ &.0#Ž!:70*"C€@?DØÿý ÿüÿw3C€@?DŒ  #,0)€ 67/) B?@?DØÿý ÿüÿw3C€@?Dƒ€ƒ   (0-€66.' E??DØÿý ÿüÿw3C€@?D† &.0# 65,$*D>DØÿý ÿüÿw3C€@?D (31ƒ  "+0)€‹   82* 6ADØÿý ÿüÿw3C€@)?D)9>?>@B9785.'   (0-€Š9.& ADØÿý ÿüÿw3C€@?D *<@?>=>==€>==<:60( %.0#Š &7*!'HØÿý ÿüÿw3C€@ ?D;A>‡=>=<<;:85/$  "+0)‰21&CØÿý ÿüÿw3C€@ ?D-@><<€=>"<;:54;7;<=;950&   (0-ˆ€8* #Øÿý ÿüÿw3C€@?E 6A<;€=)>?>;8662:,./*++05;<94/$ %/0‡‚ ,2% €Øÿý ÿüÿw3C@B%3A:<€=??<8:;82)(#"%'('##.9<72+€  %/.†€ 6) €Øÿý ÿüÿw3C‚@>=:<==>@<9<;/ !);:3-#‚  (2%‹-/"ƒØÿý ÿüÿw3C@ A=8<==??9:<*‚ƒ 2<3.$ƒ  !/0‰5%ƒØÿý ÿüÿw3C€@ A>8<==?>7;5 &,.,& € );3-$„*4Œ 2) ƒØÿý ÿüÿw3C€@ ?8;<=?=6<+€&12/+((),033+ #;2+#„ &4!Œ)/‚Øÿý ÿüÿw3C€@)9:==><7<' )4-#$+32!%:0( † $3$‰3"‚Øÿý ÿ2üÿw3C@A;8<7<<>;48,5& ƒ  +8 24) ‡&5‡/)‚Øÿý ÿüÿw3CA79<=>4155% ˆ (88-"… )6‡(, ‚Øÿý ÿüÿw3D:4;<>716!-* …‚*8*3%…  !//† !/ Øÿý ÿüÿw3D58;=;.13 2Š"206'ƒ  &5„ 1Øÿý ÿüÿw4?3;;=3.2#'* ƒ  %&% *8 4)+C!-4 €€ 2 Øÿý ÿüÿw4:6;<:++1/#ƒ"5=>>=<95,(7'0,$'EC '6!1"Øÿý ÿüÿx368:=3*,)1‚ .<=€><93'!)6- .,$(D?D#/3  1"Øÿý ÿüÿy.2::<+',$0 ƒ5:€=>?<837<;3,-62 /+(D>D +8  0#Øÿý ÿüÿz'3:<8$%*0 ‚<9<==@=:7-%%.;3282 0((D>D)6*  0"Øÿý ÿüÿy"69<3"$(0 ‚ /3;<=@;9:9/(! "<6;2  3%(D>D(22 0"Øÿý ÿüÿx79=+!#0*7;<=878:9/&)?:3"3 (D>D€'18 0"Øÿý ÿüÿt98<+!#% 1 €(9;>6.489;5!9:2!0 (D>D€ &09 / Øÿý ÿüÿs88;  1$€ "::=&$)/88 '?/.)‚(D>D€ '1:(/Øÿý ÿüÿk97: .(€8:9!€ 0<2 ‚(D>D€(1:(/ Øÿý ÿ üÿk 979&- 689  0)* ‚$(D>D -3;&, Øÿý ÿüÿk €72!24<„  0ƒ(D>D25<)$)‚Øÿý ÿüÿk 668 3& +09)‡ /# ƒ(D>D$*58:,)'(+$‚Øÿý ÿ üÿk45:€,-€ +09…+' „(D>D!/37:8$&(( .‚Øÿý ÿüÿl14:  3#!)06€€ )(„(D>D +388<5*((- ‚Øÿý ÿ üÿl.3;  4*€&.4„+&…(D>D46::<-+,.(&ƒØÿý ÿ üÿl*0:$ ‚&4%€"(2+ !+!†(D>D 079:<8*)*( .ƒØÿý ÿ üÿm#/8. 4.# €!(..,+,+% ‡(D>D%:7:;=4.-. * ƒØÿý ÿ üÿn,45 €8+# €  ˆ(D>E;7:;=://0, . „Øÿý ÿ üÿv)09&7*" ‚ € ‰(D?B&3;8<<=6/.2 * „Øÿý ÿ üÿx #-9$€€/5*# „(D?@=;8<<>:014'.„Øÿý ÿüÿ{*33€  54+$ ˜(D?A=8<<==5211 )% …Øÿý ÿüÿ|&.: 83,&–(D@=8€<?7347,…Øÿý ÿüÿ{ +7,  €  85.("’€6B=:<==?=848.†Øÿý ÿüÿy+*35€ 660,(€†‚*=<€=>?<6:8/"  Øÿý ÿüÿw65 )19#  €$9:74€30%!%01/€3:8;<>?>>‚=>??98=1 /! ƒ:Øÿý ÿüÿw3C +2:$ƒ .:;9766886478:;;=>ƒ=>??<8<;!%. ‚ IØÿý ÿüÿw2H ,2:$†  09<;9889::;ƒ< ==>?>=;:<<+ .* ‚ >EØÿý ÿ üÿw2G,,3:#ƒ!,4:<=€<;;<==><€:=9) &/# ‚ 7ADØÿý ÿüÿw2E5 *29"† #%##(+25:8‚= <;<9989:;:/  "0) „ -D>DØÿý ÿ üÿw2F5'/9€„  &)**/,-65 9687850% € $0+ „ 'D??DØÿý ÿüÿw3D< ,1/ '+‚.0.#„ ""')((#   +0+  „'E?@?DØÿý ÿüÿw3CA $(.1/0-("")..' “  +1/& „'E?@@?DØÿý ÿ(üÿw3C@  "!  ',//+$ ‚ %,01-' †1D?€@?DØÿý ÿüÿw3CB    $),/00/.-ƒ,-.0211/,'! †:C?@?DØÿý ÿ üÿw3BEˆ# "#%&''(''&%#  ‡"BB?‚@?DØÿý ÿüÿw2AC!‘    5D…?>CØÿý ÿüÿy7FG8™€ƒ€0GGC…DCIØÿý ÿüÿn+(* »*,'‡('+€Øÿý ÿûÿ`ÒØÿý ÿûÿ`½ŒØÿý ÿûÿ`ÒØÿý ÿûÿ`ÒØÿýŠÿt8mk@   !*2:AGKNOONLIFB=71*#  )7DQ_l{‰•Ÿ¤¥¥£Ÿ™‘‰€uk`VJ@4'  &7I]tŽªÃØèóúþÿÿÿþýû÷òëáÓ®˜‚mZI8' *?Vr—¾àöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúìÔ´’rYC/ #'(%  &?Z~®Ýúÿÿÿþýýþþþþþþþþþþþþþþýýþÿÿÿÿöج‚eO>513:BKU\ZM<)  4Sx±èÿÿÿþýþÿþþþÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿþýþÿÿþæ¹”}ploy‰œ±ÂÎȃF($BeœàÿÿþýÿÿÿþÿÿÿÿüõîèåååéïöýÿÿÿÿþÿÿÿÿþþþÿÿðÙËÇÒâñüÿÿþÿïp9 )Lv¾ùÿþþÿÿÿþÿÿþóàͽ±©£ ž £©±¿Ïãõÿÿÿþÿÿÿÿÿþþÿÿÿÿÿÿÿÿþýüþø‰G",QƒÖÿþþÿÿÿÿþÿýè˲¡”‹„~zwvvx|ˆ’ ³Ìéýÿþþÿÿÿÿÿþþþþþþþÿÿÿþÿê‹S( ,SŠâÿýþÿÿÿÿÿÿíɬ˜‰|qh`[VSRQRUZ`ht‚’§Äèþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿâ‘Y.'PˆãÿýÿÿÿÿþÿûÙ³›ˆvh\SKD@<:9779;?EMXgyާÉðÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÞ”^3 !HÜÿýÿÿÿÿþÿ÷Í©‘{iZND=72.+)('''(+-29CPbx’°Úüÿþÿÿÿÿÿÿÿÿÿÿÿþÿá›d8 =pËÿýÿÿÿÿÿÿ÷É¥Šr_PD:2+&" $*2>Od€žÇõÿþÿÿÿÿÿÿÿÿÿÿþÿê¥n>! /^°ÿþÿÿÿÿÿÿûϦˆnYJ=2)" &0?Tq’ºîÿþÿÿÿÿÿÿÿÿÿÿÿø´xF%  !KŽðÿþÿÿÿÿÿÿÝ®ŒmWE7,"  &4He‰´íÿþÿÿÿÿÿÿÿÿÿÿÿǃO) 7mÎÿýÿÿÿÿþÿò¾–sXD5(  ,@^†¶ñÿþÿÿÿÿÿÿÿÿþÿÙŽX.  #QúÿÿÿÿÿÿÿÿÚ§€^F5'  '<]ˆÀúÿÿÿÿÿÿÿÿÿþÿé›b47oÔÿþÿÿÿÿÿÿùÄ•lL8(  $;a’Ôÿþÿÿÿÿÿÿÿþÿõ©l;M˜ùÿÿÿÿÿÿþÿí³…\?-  $Ao¨ïÿþÿÿÿÿÿÿÿÿü·uB  .cÆÿþÿÿÿÿÿþÿâ¦xO4$  )P„ÌÿþÿÿÿÿÿÿÿÿÿÂ}I$ >~ëÿþÿÿÿÿÿþÿÙmE, 7i¨õÿþÿÿÿÿÿÿþÿË„O( KšûÿÿÿÿÿÿÿþÿÔ–f=& %QŒàÿþÿÿÿÿÿÿþÿÒˆT+ $W±ÿþÿÿÿÿÿÿÿÿÏ’`8"  @xÉÿþÿÿÿÿÿÿþÿÕ‹V- ,bÃÿþÿÿÿÿÿÿÿÿÏ‘^5 3i¶ÿÿÿÿÿÿÿÿþÿÔŒX/ 2kÑÿýÿÿÿÿÿÿþÿÕ”_5 *^¨ûÿÿÿÿÿÿÿþÿÏŠW/7sÛÿþÿÿÿÿÿÿþÿßœf8$W øÿþÿÿÿÿÿÿÿdžT.:xàÿþÿÿÿÿÿÿþÿï«qA"!Sœ÷ÿþÿÿÿÿÿÿü»€O-<{äÿþÿÿÿÿÿÿÿÿýÄ…P*  R›øÿþÿÿÿÿþÿò¬xJ+.! BxÏÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿä°‚`F/+Gp|}|sfYK=.".]óÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿý௃bJ3!  /?MUTOH@7,!  DvÂÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿý㵊jQ;($-3652-& -XŽÞÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿëØu[F3"  ##"  ;i¢îÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿöÖ­‡iR>,   &Hv°ôÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿþêÆz_J6$    -Q~¶õÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿúÞ¶ŽnV@-  3V¶òÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿñΣ}aJ5# 6Y€¯êÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿûḎmS=)  7W|¥ÛþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿðÊžx\D. !5Rt˜ÆóÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿùÚ¬bH1 1JjŠ®Ûûÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿþ䶈eJ2 -B\{™¼äûÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿ껊eH.  '8Oiƒž½Ýöÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿ칄^@%  !/AVn…œ¶Ôïþÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿå©tP0  &4DWl–­Êæûÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿü͉^: (4BTf{¥¿Ýõÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿäœg@"  (3?N`tˆ¶Óîþÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿñ¨mC# &0;IZm–­Éæûÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿõ­oC" $-7DTgz¥¿Üõÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿö«l@ ")3?N`tˆµÒîþÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿñ¢f9  '0;IYm•¬Éåúÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿæ’[0  ").110-(#$-7DTfz¤¾ÜõÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÑ€M& +:GS]fklic[QG<0%")3?N_sˆµÒíþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü³n= !5J_y–°ÅÒÚÛÕÊ»§xbP>-&/;HYl•¬Èæûÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿè“Z. 3Mk•Äèûÿÿÿÿÿÿÿÿÿöâ›uZB,$,6CSfz¦ÃæýÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÃwD &Cd•ÒúÿÿÿþýýýýýýþÿÿÿÿúÚ§xW;#!)3?N`v§Êðÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿì˜]/ .OzÀøÿþýþÿÿþþþþÿþþþýýþÿÿýÙ™jH* &/;K^v‘±ÛüÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÀuB 3YŽÞÿþýþÿþþÿÿÿÿÿÿÿÿÿÿÿþþýþÿö¸yQ/ $.;LcžÆóÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿãW+ 4\šíÿýþÿÿþÿÿüðâÖÍÉÍÕàíúÿÿÿþýÿÿÍ‚V1  #.>So¶éÿþÿÿÿÿÿÿÿÿÿÿÿÿÿú­k9 2[óÿýÿÿþÿÿôÙÁ®¡™”’’•œ§·ÍçûÿÿýþÿÕ†W/  %3Fb„«áÿþÿÿÿÿÿÿÿÿÿÿÿþÿË~J#+V–ðÿþÿÿþÿù×¶ ‘…{tnkkmszƒ¡»ßûÿþýÿÒ‚R+ +>Y}¥Ýÿþÿÿÿÿÿÿÿÿÿÿþÿä’Y-  "L‡çÿýÿÿþÿðã}ocZSNJIJMRZft†œ¾ëÿþýÿÅxI$ %7Rx£àÿþÿÿÿÿÿÿÿÿÿþÿô¦h7 >sÓÿýÿÿþÿî¼›ƒo`SJB<853346;BL[pŠ«áÿþÿû­h;  !3Px¨èÿþÿÿÿÿÿÿÿÿÿÿþºuB .]±ÿþÿÿÿÿõÁ›~gWJ?70+'$#"#$'+1;I_¥âÿýÿéU+ 2Q}³ôÿþÿÿÿÿÿÿÿÿþÿÌM& H‰îÿþÿÿÿÿÓ¤‚fSD8.&  &/>W~­ðÿýÿ½m=  3X‡ÆþÿÿÿÿÿÿÿÿÿþÿÚV, 1dÃÿýÿÿþÿï¶ŽlSB4) '9[‰Éÿýÿâ…O& 9c™âÿþÿÿÿÿÿÿÿþÿæ—_2 F‹ñÿþÿÿþÿÚ£|ZC4&  %@m¦òÿÿö]1  #Dv¶úÿÿÿÿÿÿÿÿþÿî f7 *]ºÿþÿÿÿÿýÈ•lK7( #,0.)"/WÞÿþþ®h9 -XÞÿþÿÿÿÿÿÿþÿó¨m<;xáÿþÿÿþÿöº‰_?,  *>O_fbVG7(-MÑÿþÿµn?   >s¹þÿÿÿÿÿÿÿþÿ÷®r@! K˜úÿÿÿÿþÿð±U6$  7U|±×ÜÓ¸ŒdJ=QÍÿþÿµpB# +Z™ìÿþÿÿÿÿÿÿÿù³uD#  '[·ÿþÿÿÿþÿí­zM/  ;b¤ìÿþÿÿÿø¿{agŒÖÿÿü¯oB$  F€ÔÿþÿÿÿÿÿÿÿúµxF$  1jÒÿýÿÿÿþÿí«wH*3_³þÿýýýýýþÿÔ•‘ªèÿÿö¤k@$ 6l»ÿÿÿÿÿÿÿÿÿú¶yG% ;zäÿþÿÿÿþÿð¬vF'  #L›ýÿþÿÿÿÿÿþýÿؾÌùÿÿé–e=$  *^¦ùÿÿÿÿÿÿÿÿù´yG& Bˆðÿþÿÿÿþÿô±xG& 2gÙÿýÿÿÿÿÿÿÿþÿùÎåÿýÿÕ‰\8# "S–ðÿþÿÿÿÿþÿ÷±wF& I“÷ÿþÿÿÿÿÿúº}J' =ƒôÿþÿÿÿÿÿÿÿÿÿÿïüÿÿþº|R3! KŒèÿþÿÿÿÿþÿó¬tD% M›ûÿÿÿÿÿÿÿÿÇ„P* B‘üÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿìŸpI. Gˆäÿþÿÿÿÿþÿì¥pA% P¡ýÿÿÿÿÿÿþÿÖY/ BŒøÿþÿÿÿÿÿÿÿÿÿÿþÿþÿÈ‹a@)IŠèÿþÿÿÿÿþÿãžj>$ Q¢ýÿÿÿÿÿÿþÿèže63)  'Wžöÿþÿÿÿÿþÿà§|U9% >wÔÿþÿÿÿÿÿÿÿÿþþÅ€O) $+268740*#  EÛÿþÿÿÿÿþÿõ½‘hG/ 0c²ÿÿÿÿÿÿÿÿÿÿþÿù·xI&  #%%#  ;m¾ÿþÿÿÿÿÿþÿÓ¡zV;' #R’ëÿþÿÿÿÿÿÿÿÿþÿô¯tG%  6cªùÿþÿÿÿÿþÿ㮈cF0  A{Îÿþÿÿÿÿÿÿÿÿÿþÿò­tI'  6`Ÿñÿþÿÿÿÿþÿí¹“oP9&3j·ÿÿÿÿÿÿÿÿÿÿÿÿþÿó³yO- 1&  &J…âôéà×ÎÆÀ»¹ºÀËÝïûÿÿÿÿÿþþþþþþþýýþþþþþþþýýýýþþÿÿÿÿÿ÷ãȯ›Œ}m^PC7," 4Rs˜›š˜•‘‹Œ—¡®¿ÒãñúÿÿÿÿÿÿÿÿÿþþþþþþÿÿÿÿÿÿÿÿÿúíÜDZŸ’…wj]QE:0' 4J[gmnmjfb``cjs~Š•¡®¼ÉÖáêñ÷ûþÿÿÿÿÿÿÿÿþû÷òêßÒ󥘎„yncXMD:2)!  *6?EGHFDA??@CIR\gs}‡—ž¥¬²¸¾ÁÄÅÅÅÄÿ»µ®§Ÿ˜‰ƒ{sjaXOG?80)"  &+/00/-+++,/39@HR[ckrx}„‡ˆ‰ŠŠ‰ˆ‡…ƒ~zupke_XRKE?93-'    !$(-28>DJOTX[^`abccba`^[YVRNJFB>:61-(#   $(+/258;=?@@ABA@@?><;97420,)%!   !$&()+,--...--,+*)'%"      ic08µc jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ ´vÿ“ÏÁ^8ø”¸v„‹© ³:ºìbG 4¹lãøa À°&%­G‰i me®*ã„´Œ×5ßóÕ¿6þ­?:b©u)ŽÇñ¸øÀ: Vçc!ÇÚn…]`Ý]ä­óÞ¨)Iåº,©ùÅÖ…i€a4¥Ìü  LÆuܹldÙô8}LÏÁ,T‚šÂðµ³ýלX%a±qõÌOÚuóVêud¤âC)Û^0͸| Æå˜Ë·ê¯Ü̼G’Úv|HN€kïDM±·ˆ>·Ø½µÃí8‡ÚmÚp/W}ÜcÊ>î¡›#–sŒËZĪOPg+Ô@ñÇÐ÷œ¢Ý8ÙÎøAíK {¹²®ÝG“bqs™‹J‰ÌYžŒjµµË«Q‘ ²pÎäJû½åwCS|ZÏi[œ*†ç4^n¦Á‚ŽŽ’IVÓŸç‹í¶Ä®Áws»=÷¢ÇÌ0cmƒE:¼ T¿è ãi!ö©úd¸\¥•»„Ú?ÏÜ”c¤ ì›À (Põ\'.Yµð.PnÓ½Ãí4‡ÚeÚl3_¯ùM÷Á¤§SOËÆÃWµÐˆOý [5¢%$›%ÃåY}É·¿\Wô*L,¯%Y>KC_¼~ ,‹ô§Â/ÚÝÆDûcÇ„ºþð)p÷ψ}j]½5óIè¾Ü§jö™s¡¶"í»™nË$†é„7‡s»3iëÍc“E8V?›2ŒyüÉ0>5£~màÞÍ¿óÎTeˆÏÌþ~gðü@‚(È1¹{c£3…q’¶9=T ):†XãMLúÍ­ÍÇÂÌQqáê}R"D¡ÖÚ¢Žxuøó©3åF*KS†k0^88W3‚†¬vŸ%2éÄäÈÛyÆ»|^ߊÃâù§QxÒÝFllZ9Ìœ4ˆX>g7K÷£¥„Ú 0“¨ÈÎ3(€v„)ˬGŒð2ØE½¸À˜–©ýÑÈZî Õ«ÿU+¨_öÞon³üi#ûƒÇá\Cí©aøU ‰‰K@%‡˜WDO ¦1Fó%ÕÜvx¤Òþ]´Ö^°H«sD:Ø&ïŠÔ©“~™ñÇÌn6,±–á$q$ïˆHÈîÍõÔîh”,âkKóNÝû˜ëäD»‚þ¦È®·K`¡»/ÖÁ&NÕ:Èï«SËÅìs%îÇéþÃM‘S™š¼$Î/£\¸« ¢È¨¢T€Y“6Ñ 3ø}}ýÀ˜:¡?&+~BX“9ž"c~C=;¡ú¬hé±ò ñ{qÈD}ÎB´Õo+ÜÔ%Ëš¶¢¯^éye"É)qëÍÍ(¤„ò¼Üˆ‘;3FJЬ n.ÅÎÙyAšæè·lÍàmÊ|~õí+vµÐ@&uã2áª_b(޾W8‹csrµ›bxýá%|uÒü[ Å<çŒoˆ]¦‡Ó|Ó(r–·“Þ¬ëʲX¾ú¥¢wA¨¸æÂò¾4.îýo4;*Ë©šcÄÛлƒ†ìR”A[ç}~¬Ü–îÐ7Ç‹¶” ¿±vr?WŠc†2fÚZÖÿv%(í•Óís1kñ†,ùñhȉ,¡ìDm=š÷¤sŠàˆj™^Ä¢)¾Ù;WŒƒ—­k¢ïÝ?‘ „tH!Ðe¨&¨ âij÷»ø®Rv(¼Ÿ®o GbÄÔá¥!qÀ:VÀ £çç1ÑíGq\˜…/︽ ·û,îwõâ{=ð;úVt;3J'<ÌïÈÃí¨aöÓ°}´øu³Wëj¨Zò8Ày†•½Ál1#u0I´Êíɘ'‚Æ Œa }™…R×Ì –„‘˜¹*Èé-›BUã Ant’hMÒ´†gu"NE¹)d‹¶dIˆ/ÖN÷s>…‰ÜÓ¾ãŽUŸ,¯¶•fé;÷gœ—SG£fL9û?ÙUX+g90(º…Œõ¡krŽ>E䣬,ÝUˆ›-–“«nY‡{ cˆ»«F¬2•[š´gôj&ÎÉø˜q¿öÆ Ó³,Œ-Ìu@…h_×%ŒI«þ>¾^„ú-ΑËìÕ0¸Žˆu9䣮ö«ŸÇ¼àqå›ÿ_»¶µûÐw5! üä(Ъ ¥â³áÞÁõ"c÷†®/Mc°îÂJ_pô&îþ2c÷ï$URxÍo]Â¥¾"¥©MK(G¨¸Ä>ŽÂC«9„Ú3ÏS5Á«ÍË23ž€š¡¨^®³ô¹ÌLUÉš`Ržl››ŠTçžíËqÄïϋ⎵ö2¡AÔ>áš§º™µý·Æ< þLîÉ ¨ kÝÆT—\ïMPh…iÇG›K1‘t{~Ìt Ù ˜kq—n%I"M½b =ò<6µØè®Ü²Ñ%q4„Íu™Ò¹ÇáSÇáWÃð©€y),Gç+ê®^˜üeŒ0:…ÝyJßbfûå*bÕuÚdåÇûÖûäÌÉ<ø{Q釢Ãâðë¥îàÆtlFñÚâ yŠ~h³…/TùÀ#l{b‘_ýí.IÔK*ª4Ý}˜\!=96ˆpd^Žr.Í…iC@mì7×bÀ¶œc` ø—;yûXæyÛ+ýNP—Å›\.ùÐòpK@R€Be—ÝyÊYÇáд>ÝùƒíÞ‡h»ž™þKöE5ܯŽ÷ˆéš¶–%4\¾ÁR»×š `l.Ífu9Ü—×Ã’œz A>Wüz“1üÀ›¥Ž/na8½C«àš˜…–Ðø:Àíì·þß?n=¾Ooh•ÖW1ßI¡(9>«¦ÌgAò$A~yÑþ™95“m5¥æ¤¦ Â9ªw|g7^ÒûýTá´Æ½‹…Ê~>&yú½ô™µÁªcÌ5|6=L¢ïB×£œJå’f¸egž1€¨ “Tl0×#u†vȆYŠCÊkTò¹f}9î"Áý’°ˆˆ$=NSσik;hæLâ²U¹Ò޼N-èQ«ùÝyzû¦µÛ NþSU¦â$M§Q0œÓZjêÌÝ.‡J|Ä’´;I!CZîQø–i:Öüõ02gF&¼(5ß“ ÷rx|JÈfQŸ þôa²Ôë@º?`Õ‚¸¤ s{ ®æ·Gv£øLÊãñïRŠ·|`f–,•m̶K5bƒS±KÅÙIœ6ÎhÇ­ÔÖÔ"Å"vîÅz$ënêr¼Ôz»„¡)G Ï¡,Xé,*›)ϱñDÏýP Bÿ:™oEygxX2¼Ä®WE x%=¥ѵ©èL!½rÂ7_¦[>((¾ÿ@h A*'ÛsÄž:Þ âh@©`üÅh¯úÒÝN-žújù'æ$ ïì¢CÖÕƒÞmbÊñ gô@•(tsWÂ3TÇW×]µP[á@Ù³7çèxQD ˜.}ïL•¯Çö_Ÿ;©Ø°4žÒmÔL¯(/üˆP},%…P8DÈAŸß¡ì 6ÝÉH¼a2@£.¦·ÂaQ©åÉf_©l£#qRjœÕÎV™¢/Û¢!IÂý(†úÁ¶VGãïI¹Êc§íeifû³ÚW>r™{dìò) ɬ™3P>´Lh?¸äX_.JÃ!…¡gGÞbÖHžŠÐÝ÷ÕdB³NΑ'8}æˆè”Jéâ½JSÏêo ?¦o 67.Ò‚áäxÄkê0ÍÔ¬ÕV*ú8 ,Ú M~ƒ g½ƒ†ÑÍ“a¾‰]“>ÆO÷ëŸå*~Nø,ÖŒ¢×YÍ#—y&E;Ì`v4ÿ|Á5Û½—EëX®?*ÛZG‹J~8ÖŒm ¨àþ¦ß†Ñ®×m9 0D¥éælâ!Jÿl1ÑȾ?z]®-6žLCágwy@ðéî!U¬ãðÀ¼Æ4Lkc7Våô´Ï1—¨ *¬NÖt°¿“5›OV;„Iž??I‡$7l¿yOi§“ÅAÑÛØ`Ç^›¯ÛÙ•ž ‘E&È%'ç‡:â­“Bˆ8GÅWxDˆýß>SŒEýwñ¡Ï%%Û,à]Õà_ÐäX ¨0¹2#qÊaÅ7/U¢®šÁ89ÚŽ0ç:Á,áßÃíÝ(}»£Û·à¨U”ü-ãßÙM¥lv©úýz ¤ìu†éÀ3:ßö\»¼3“c}W‘•^þqù`Í—õÍe+¦!Ò…E^’zuû³&iÆ~éÅ( ç ¡‡B–sNÜæTå»ÄŸ(Öj`åD¬K¨Ï œÔÊ]y)Z\íØM æ´’2Wia‡VcI:H¾îev&Ï$ Vçâ DpOÛÂ÷AUÆØøI”Ë™BsíÝ^ˆ^µœOØßY÷‡=ó€ÓÕšúºPZåÁœ >8k&qböMù‡N9•nÆOeÙ´€ O^RzHVRN ÝSå1ûáþs3‰J$`¡Ò›“´E0/ A ç[«dRðƒ®+ïAGÐ=Q¿ë©ž:§ ý‘SAEØ-nA[êI€ƒ‚׳w8 îÔƒÕaLaGlSÑì§ÞLY¼ž—üPð@¡¡`"ö¥Ù)6¢xs5£`5ÅSgݤɜ×Píûžë<ˆn|Á,–´Æ7Q$söÓ’¡€ì œaXš·Ä þkŒ¬WÉJö£¢S Æ>ës4ÔfPï!l:ÓzQ¦ÜìÇšÊ=ŸRpÌè üçr)HΑHýªŸ8R(–¶Hãó_H¶6„¥•d»ÌþÒBÇh¿GÑ{¡Œ¶‰,À€¶óˆ¥W/ä‰?oš„ÅÌ0Y—)aCnªEù‰ÂO“»ëÔ˲VƒÄ÷$É1a.jÓ)Wp÷ßð=rfÖëmNÀ òN τޮ‹÷ˆˆþžpªÖ2rš-¢Û!aP"uís@nèļ ©Y£î‡Ç™‰x4NYa€&M#Öñ®D† H;¥CY3B-¹™LŽØçæ­ŒLw—±:»Z4;ŠðD"ïÌÿz[ú@ezÂ:4³Ø/ÔÚ­ÛˆÙ*XTÌŒNŠJÖUóZåsðû…ÇXÓúª†XN2KRú¼Jn²Ê#¾IÄ1Ó=z¹â0²Üîˆç€¦fE£2.Fù¿p{þû¢ŸÐyJ§™ïO*Üs±m IMܘ  Y‡4‚ßQUf±éúÊùPãØ8‡QÞÕ'ÌÌ«’ qiàKq!–x…OÉ~ë0G{Þg®ö† ‘ÿ¯õÞhÖÆ†(>µÏ6è?H¬šg—žü0·»&¯t/D^íVî´ºòöÊ-ØÀ›à„ñê0QdÀÅ•›ey†¸Ã¶Ñ`2,»áy³¼“Ò‰!úfÅ<œBa„lêˆqwÝœXŽfiË[D‹¼›îQ0˜;3sÒoü}}ѹµ´F¼š8`_G…¯ ‡EŽUî (Q›à¢™Óx73øpe¦×2ö‹Ñð\L»BgT…"imÛºHìô{©ÔøŸÞgÅÚ“?§²¶D¤Œ÷-x{qñÑ;éÆÏæYºŒC{ì™Gc}/×ýyYåÓí#6ÕMfþÚu~°Ç[1<äülEÛ‚¾QÁoÉ ¥OÌïÙRDÚUVʯð¢Þ£V\)Öjn[8æ'Ÿ_uïuòôa¸\ZöTÂ+ìñ?àê›f°\Ò‹!Ngx1õ¸ˆOYrW–qI¾p.ÿa^©iP?‚ð›:Px®RüP¥±r[Ho•7h¹òŽqkð4|QZYäY^F/²rR²þ=å¼x$Š  M­˜ j‹Án}Un4G)÷žçŠ,'°Õ)¹ahª—!k;ա‰ìˆœî¦‹#mqí+%`Do ¾ž§­šy¨†d`—)¾üRâMmÛ`$¥L8¸r¡=)¨ÙÖÕ…üj8TõH«/—©î¿MÒê¥H¥…ÿ9“ªÙÝò»‘¦0½ê](Û¢úÁ5*7+I¿Å>Ót‰†^Ü~AEX¬ÛÁ¯Æå2-È}M $ˆ%x✧õJ@Í‘ÕuP 4£Dó“ì~76ê‰VäüÃÈò-@÷<ïì»ÿ Ò/T +@h²ªjfÿwì>&ûÊvvœ<ÔÉBâ à<ƒ«›h‰0¾®*MÁ9ù>5Õ™‹HÚBlNxÕ½Bò–jìçq§ì¡è0´°=$àdºf<žÆ¯|B˜â¥?ÇŠÇ^™p›7b™†–É¢²Ú^5¹ù³±"H¢ž¶9»ËS % ‰z$Å£À¹V7ÙÄV$N½ÓS°Çáì ‡«\>ßR Ê@«`*ü9}Öæû‘ ¢Bâ§N“²8&Æô|NãܲvŸxqKœo ` Ÿú%I5ûŸóÍM¶Äß|V7ýã­Ôó¾Ù VÙ8BÉ%Pœû°…SèõÙ´iýb&'ÒZˆèÝUzÄ‹v[QÝvމ-¼4mÅýf–.n ØQ}ùä««;¶z4‰óúíiƒ¨ý®SrÒ_€<Xª}¼5•ýírÌ\É…“”™ž›Œ9N‚IVé6ÃL¥“,ÇÏòÊ4|ÈYáÓ?¿á™ùÞuЀý‹â¯vý ¿xwï¯]A¦õd$`´s|sÝù¿Ä9Õ½†¯XifÏT+=3Ú‘ƒ^JÿP›º-NîöƒÿMå÷\âár‡Ù°ˆÜu%È+[óo@m1píÊìðZHwi@ŸIKsŠ9bÚ…Ç”7} æ¥ñ´[b£oîyÔ ¯}dô˜É‹B(·OxžEqs^—éõ‰Å£>ðvèiËùpéÉx ’j4šð6¤¶q 3Oª`ÊV¦ŠF^T3BÿU×c(¶ïq1NO/skÀI¡»³^ôåÂÇM(@{t„¯¤ªá ø¥ä^3øg€(Ã7[;þ°±£ýîRì*´çp»6KÍ!P‰É»ó¨ÌÔ*9~àáÉZY[£¤"‡Q¤]H5}óÆ3°ne0ãàq‘ÂÀÈÅ]gÆœdÂËh“'yàÐ'”ݰ6£¡lÃU™Ëc8„à¿LÅj8ÀăýH¼5ÀwP-Šž¸O"`yot©,¾4í† –9ñ¤#‚…e¤á~Zú=%°/~·‚s³•ŒÚÙ@ ´ó‰ã=&Z À=º€­G¯e’ÌáåLA£4KVW´#˜´Nõû`æ¸lÌ(¤é¤j Kßç"}kɰ“°¨eU°%àùVÄb'œhÆE¬h¢ÉÜ_ŸJJˆQ„D¥% (ºÑ_³o¼¨Ý`˜YÆÑ-Vóª0º¤ÔÃè?ÝÒÙa¥ˆ°)ñ ¥dÄ3G“ÛÒfW]ðr‚ÜÝ¡‹9FÊÆv\rŸ¢ (°ø/AlŒ`Š•ÑJ!ËÇÊ‹£éšCwü8Vx}¶|êb•«PeD·܆_ÓÙlÎM)¹Ô9† b@C-7To°¨ÛÂá’«&Žøˆkðö?ŸÊOõ"Œay8¿ê÷1:p÷Ͼv”^Ö‚~×U\Ê÷‚‡¦/£ãà?6˜B¥ˆñ cD!¦µq~Û˜:º†®7¢îŸ[ìýôêz]ê ÔMéjF øâä€û`ô@Bñ³ bÁ–Œÿ¼šeBîif+¸ ÿmÁ(ÍÇ®†ReŠ!"ˆéOÛõ‚•ö7-6:ußÈî›ÂNï‹=‡!fáÙ È‘ëH×ø®#–Ó$cëÆì¬!"‰¢é0ýÙjÀj^‰a¶ÿ_c)°JÿJBCÀ ùDm OΫ¸¯YÚíÁËÕP¢Çf@4 ôåÇ­15ã[¶y@ós\{ßZɦ%2‘©­3õ EҚdz§ +… °R?®æ%¼ 0·Y*S3Ö™áf(ÿ ¢àç¶¡Ý4¯âa^;åöË\fÖ^¤@½iô ‡Ü´451]T!od’¦mÝõ=ÇÍ[î3¾¯—ƒ‘ôÜñ<¬ÁT`Ø< ªuŠrWÏj¶¸(;Œõå¢ÓQVðiiyÜö›HÕRëZ¶N~϶ èÙü<Æk9íMÈEÆ¢ R‡Ä%¬9ºO.HºàÌájhéóúG\ŽÙcÿ|í¸b­êcÁ‰ë`‰²ƒG¦1ŠXËùAG-3ðdaV§áwùë= _?KØg^£6ö¸Çµ’ÃZÅL=?ÛèÃ$FøÇ¯O†UzÓºÓæý,Ó9´Öõ€´Äc²¤Ðµ˜xyÐèfªvAËn¢zVm²1Pá]{º/dŠl1bÕÿ{›êP& …éªÁf±Ž³L÷×xt·ýÒlž‰ Iš“›7 =;ÍØ.l7ÓãgêßqSç“ÓŽ9Ÿ!©‰®ê"Õe®Õ½Î£ÕéÄÄm$õ±4–%S§û£_kò­€Ù&¢Á9ÀÔ·}T¬;|ï§ï¦/8Â…‰ÈÒ2nS”Œ+7kB’1¼ªœÝÙ–Õ;\ïT'—KÿeÛaP˜¥pžbâÒøxQ‘gU'·’W˜]ÏÍê[èÕ«Q£K?¯]J/M‰këëcÊÃ*AøòKýÐ$ðÍr…ÂmƒÚùzr¸ÀÅàõLgÕmýpëùt,Uf96¹t² ÚïS0»køF%,–E7P)ÖSÞN‚’ËN§Ã§ó?V€æêí²™»‚fóÏ2»Œ|(iK±Q£a*e˜ÆÈk¼@±6|f>a2iI¥Ò,ˆ‰bMBŠÁ«ýi"²“`½¤¢Å-cL¯a)\íˆîéú.‡e6ýÎ W*1ÝDÀá墹ÇéÑ‘ÀQ/@ Îø-²ÒƹÉ;[’¢)) 9È9ö?|0(ù»¬"‘è1_®Ävæ‡G‰|+"ÿe!Xv+ËÃâŽËѰ'?Úmƒ“— ùü)€D1ø»y§øõdX…®E8ŒmKn`>c˜pï;KH~¨•iÕ|¡HoÝ4ýæ‡óÊ Ùܳ,Ž9)C™§ïÆ"#ÑÓ‘ð±HëË=‘æ_|¼DVÉ¢ÖB‰m]ÿ[’ú´£4&O5Ró&›{ók p…Cçu¿uKT\9×ÓJüâ!©™:uÙþÃ$_I ãÚm}s%¡¹õS‰á……fyÞ®R*’Ø-ÜØˆ¥Áöÿw‘Ü{#F‹%\í@›Ò¢-æä ‘Á^ÂúŒÞîÖÎ>[ÝPk„ë¬\sÏÉÌRΟ„X·7øòRÑŠxÂïAuF2L(¢©ké°!ÅÒ醥ì`A¬ÈzZÒº×N QÓt˜wõû­bP:sÁW¬²B*r/|hHykW>˜J8“bØYx{%ë<À'‚£5'»…€‚—s|ç3orQ&ó~—û¬ÚæÈ,I¡@ø>ìÊúˆØÏË"ÿ¥ðW/о l6ñû_9>]Ó—“¦PJåú¬9Š¥åW¼ÌbQÞÀ-êªL Ýá1D&T”žN·Á]AÿID\Ä ½Ü³}ûòx)oÜ —×6¬@d¼¿ó·ñ©´‹ºy]¾Mÿ$•ü¹Z6Vï'Ü9–™|ÞGlüðwí gwW:ó@ \MJ€O5ÒÌÚÐó‡ÃŠ £¸F!ÚcÖ{ÉaT Mt[nß=¹5ÀàÞwH ÜO„µ…ZŠÂ†åá‘|° q›ƒˆˆ°ÏÙa)Ý*-œ÷aב Ö£a/½;âYEüR¯-«<¢'GÁpQñIÜôÜj‰f8eBŸf}âsXZß«„¯ Ègái²x^Õž?Xzã·©µÅî±´Yj¹øëÂA¡ XUVbŸóÙ]…ÿRUIoWIœß²­`æµ4R­ÐgŠÇe.Ì“ ˜¹ÖvŽO³gŒ| 玻¬Y›wI•›kV(¡_J :°Bû߬ã4Ïž#ß”!&¦:Ï•sT4®‰„ŒQvCŽã°Š§‹yâ~yià£á"!ok!^iQ꿹õÇFˈ“fì,P& K¦”WÅ5ûðΣß*júW„uap3!.DÀ>6’g¯Ä$ô8 p+\,äjšÑ¸Ž[Hmu Ô‹!ž£+8^ÊŽNͧñË7ÚgpâzJ 4ª2aÍ´¾hŸ¹×—îIîþ€kÕ °¿çªD1yÉÇ_À3 ^~ò«:¨°>’øxn#ø´îrÅîzîCɇCYE½â(Ú¨.ß&°@Ó£gÝu¹~ "1èÏQã6e—ô ȱql#GŠ©c™[fd¡muÐɳÕO…Ôt: mËNÙ±€äþgyEJE…m&ã„"ä@SJð#Õ1!…Ôå°(ô¾×¢·›ÊnNß`ù(áKmò¥‡W}Ó¡Ýœƒ-Ar œ©‘+Iª´¾Ôù‚°3‡JGx-6ò?D°/®LЧhˆ]QÙøŠÝ™AøŠ¨ð:ñϸ XÒ8'7½Ë?€\ Ôí½ðŠ?¹}Ý+s×é$d޶–aæ9CA®ÏD§ë Í®kÈÛ}´¬4tˆ¨Idõ`»é´½ÜK4²áÂ]p1@â”ê²²c.vî%÷Ro&îÓ&s¢8^w1O»ªa(ªðúŒLæGŽÊsY™ôݬeaX̾ÓUÛ}Ü6d•&õÚTÇÙM»äÙÔÖ¾³Ëž¤·]å9K÷F‰!·(bØ¡™ƒ ¥»µ=2U aÙÞ®², âÅ•r£*lÊâ´–÷¤Âø®„™4¨sÂÍõ Ùõõ‹aí4¢†¡6*ÝQC‰—G݉'µ uWUbÑëy|V[ãÝ1yz«¨¶˜Ô ‹ê‰‰r4îµ3+Ï.'éãØ„DuJ™9‡/•ÀÛ`ëÐvñ†*² ùÿ[F$˜öë: eŠ ©n1ì~JüA1Í Sm{k+Úe‚h*;±Ø }Y3ª…HË6ÅűͨïÈ£µ=‚œ¼N²2ë9Ä+–™éªqeÂF„G˜Å/þ$n6F²œù™ PPl±ñˆ°ñ„ž¸|wýöKð+wÌ€ ÎøÕQâ•áÛLlËóq¯ #Bá<±ìɈäA(_¡¥jÀF£ýѺ…öLb/p÷‰$“» ©o¡OwMìÄ*ötsbMO¡²=Yô2ׂM;3œ0‰û1Ÿ<ù~«'Þ2äûËU™¸y/ߺÎÈÊøÕEå"(<Ô8P!’ýàaðy´V7(”™ïeÙ/$Ö ï*N¬ýIBwŸËRWø!Žß²´åV?=pvïê«Ù­ûÍ$½àëÓ‚wÖÒIª™ÊéȰ±7ýñbIGüw)œ")Õ#ý¡'ž¤JgÍç 6w5Rì1,ú1×_¶¡ùLZÕ,äƒõ›w‘Ch’Ãã#Õ¥^§ÏÔr^ Åý Ìd³·OrãŸû硃­`s3QKû?ÍïŸArÙ \‡Ù>˜»2²~@Z|)óànaƒsçÍoÌ]í3÷+‡Žû£SÐ#$’]@R^DÒeá¢Púm2Lx_`•h 9»Á DlÓmÅ”$÷çOÍò•÷C >ÌO7hí­át*Æ?¹5LcV=¨ÁÕ¬¶,Àšb±Ñ”¨|ЉL„·8ånY èk~÷•+1åeºû?[èu‘»ZÕÙ^ìŽË„š^ÇÙ)M“^iî‘$Ë¡Œ †õ ºe†,¶ˆ×¹ËF¥X¤Ðéûø‚DuæÍ3}Hå„5OŽJZuí¿Ñص¿+дB³eãf9µQl¯oœcx° Ï®ÒÎù¸%$áÐóëÈþƒÈÍá*¡Dkq|!C IÎ>E;mÃ[q2½‘57õÙ³1Êð#Àtƒ@¿1I=mì »{YÛÈ®ð%Ïnï8³ƒ¼¢Õ_ºbbós*k”t[&€hù0kÂAÐaD.l€Q írÀ.hŸ!/æÁ¸µe‘½ûhÛft÷ ÷oó*$”ý¶ÕÕnXºT±ˆ½›q׌¢MtÏmSŒË"¿oÄö©ñô‡/=0˜ohEa;æ®lÊçóë·;`‰úGš2Ë­íëȦío1QrL8Œç9Bš¬?³®‹i¹`6óÅõ󤮨Xbhª6l9Ϊ1Õ lÙª«ÔÂ}Ybø4ff«Ù' ³ãÓ"ïH,³³rlÌ5öšÆ§Îî¹c¥ro$"3 ¾FQ@zúíÍCi…Çà )GÈ ;Ânº)„ÚŒU'†6M÷µJΟIì‰rÆrt¼béªHZéi  Õ¦Î"޹ RV ­fY†|¤¨‰9aQnhnQŠnå>£ŠüŽÑg´Ô¯çˆ…UCº;Ý_«·s–¢ 8U൞syB=—X`‰Ëö±Ë¯"âoH¢¥´’ÉMìG ê‰ò Á‰í§ë9[cÈüv®‰îûGÍ€²‚1œ×$®”ÔH]y î!:â³C‰cBwijö„ìüŠ'‡Fí¨ÌdžwA¯fµ=f+ëÑk\0D¸Â“´OWKM®u?±®ô´yòŽ–RåDsdà¯.m*´¸.µ‘:ÂõøÝ=M°é{aè™Ä ÄŸ‚^‡!!D5q©Ë¬Ù<àl™™Å7|¯ŒÊ»L‚nÔT©Ý¦ssÌä@mqܲ”ýßÝ <]ÌG7ü‰p—ýó³%ñ¤oŒ¦R䣳çÀЖ5ó´PA„ã×æÔŽl¾ÜÙ1ƒÞýÓÄÏŒôanÎîøßu?}%Ùg<À@ÑF¬’›Ãd¸Ìh»ºWêá²!c¼×óÄÀÚò·lô{÷Ûéåïi…ÀFbwHOÕtÙѨ}ú({p=÷x{Mµ\3è€ÖÏ™}rä—1*þ ^$Ù—U»8œÃ­ÝóÀbLNnà5â(Û¦ñã‚`úž· Ú­‚Ïqfl«Ñ\‘ÅÄöGr™q£ãpªäÉnX(ûÙ$ÞJ‘“Çí%´ðxÃw;’9ÉÞö†ÛÅÌÎLâÏ¢›LJÆæÊýáæ¤¯%t×éÜSL…£UV¿ŒyÛ ÒÇè!B:2Ka„8ÀÀx^)E¥X8²,þñ8<â!Üz\…×¶îç/Bÿ±h¥ Fúâ$kº_Ä WŸ›yWçû5³ŒDéðõ3«y`N‚ê›^?’÷B:„—õ+Ñ›?œmÉ,O$}‘OQ;ÆÁeù}ÞýÚ˜B‡ ø`²‘’Rã"[~.~x×Ê&þ\ ºÞx (òþvåÇl³¶È’O—6¤FÎ3ª ƒ@+_'‹ª†eB6Æ#E9Åη,äøK§î€5ñ“¶Óo—uÚ'd2™»8¿3-kŠËØP¹´KaL³Ÿãonéâhœ’¹ÅÎk?ÜFÃá|–°)ˆŠ)̉9¾ŽSïbá¨~&fH‰’I®nkôVNåU"ÂG€Žß£§ý# ŠfZ@ï…õ&ý€*!VÁ©Ozñ×DL ãk€?žõi1 ŸÕ'™™Ò|€ºµ`[î„¥©?¿´ýÀI¢0[_ºM»¹Âf²K›5±Ç£„xÈ'cÙíèàž¢Ø•;pì/ñà ô—!:V‹v“ÛGq±kÙª¡ø‚—ôôŸÎœ·]é+É­Î W&þ±€úµÅ`2jª/[w–:!'°!§°KâëÜ€{;æÞ¾Hâè²jhƒ5ê˜÷Â.4ÎᦇùÍ\<$Žb~ÒÖ\˜\Þ%T³ª[ÛI±€@çΩkZÄ¿%¦ÍÖá3Æé$uÄéqÛŒQð³\~ƒ\,‡oäº(Ô¬t°’’O?ƒ®è\©'ÎxeO’ÿŒã ¯CœÍ”ïÁÕll <·¦¥Lyú׃¼Gê Í9½å?Šºß sN' ªÜò[ZÌÎJ„b·QÉôÕ=¬pªò(܈"çäÝD}Ëö”Á4Î}ù=\†Ft¾‘¦#ðìÍ¿î+§3 œÊÝ”“‚¦‹×Íòëý§pìt>ÊRX÷Ì…X^lyÍSk^ü|äMIÁþáD69ÅÁªdã¥pµZ0gÔ[ëAg õ”®ÐA}1â4t´!$yùF¯|Æ%èWOŸï» ˆQYæ‡A(ýíN¶.ŠS#Œ…mTyJt~Ê-îj°is=æsŽ}Qeªýáž”4¼iÛ5!OöW†™8Þd–hrhñ‚Xº+¨†”£7µÀ÷HÖ#©³´p°ܹ°0h‡·°W»Q¼ud¤ª¡h ùÕ cá)z1:û7&ä§ú½>£æ®¸™iæmhM”Uw¤¦“ªæbæf(— æÊÕGO7¯ëglû›|ê{°$~ç—£ŠŸ'ÄRªIªØrœ‚tþy¿aûðøîcº¨}ûO_"ÉÌÜ2Ìø‚n „áWÃç…WšÖÖ|Qâó•ë‰);xà"¯zÔY«qÝrG6³3L–w4Ìü)×l³èÅ(ZŒo°€å]ÕûI¹¥eí÷Q_ÂZ6`.¢ŸXf.±Ù§Ä†¬v×5Ç –ñëoƒª»¿ìÔ×ð1ª¸µËŽ,µ’¬‰[ BÐá §óz[Ëδ\Þvòcf¬þqhF­¿|€l¡´@ë_¼;³“ž>KHZw }s¢&-ÙÍÿ6Gç!¸àÇiÊÌ¥0(k ¶l¾»É3‡ß'VBÄ(l‰V Ç™çËB|§Þʘòé€Ãíî®oxÐû{)à”>²ýÛ>¯ìÍüÁ‚ÓTÞ'^ùÆYÅõü¹]¼´¶ÊÅWù[‡j3xT“A„—‹/½³¹)x˜3äJh:‰ä¢Àí‚;Æ(ãåÞD¥ÜßLÿ„î‘Õ1œòUI½ôé@G9psW´W@«; Ï`}I5¾X8AŸ,stBuÓ²‹#ý¼´yÒªÃyý=J€1©yIl;D‚Ò¡ ⬇ßCÐÔð‹¿ÿG†W:ûâ /M0‹ƒ.¹Ý±ë¢¨¢ì {RÍ»ç¡í¯}™ÿa«ìžöo‹À+±¹>Ó:7>öþ†¡¢E àñ>\Ô7¯ÿLš¹Î1™ÛÚiBÂs?‡l”ÊÛ©cõxÎÊ=½ðTª*@Ôå;´.í´h~œ—y6àoo•£ÍyYð“J@¦›Mú÷ÉýÜ«çYÖ6Æ*pf©X`è `¦~§ÉÚ¬¤>êb– HTÉxÃ2LÍ„ÓÓ H˽€,>BânËBà»j$OQ@1‹ È&K €YõÛ%@Xó†˜G3O½ZÅ¡¬’AxÛŠá 5ëÓönÖ$ ã¯çÛïqô 5ݵÜ4ÝQþNïó~œ·Œ9f`ÅÁ$QÝpÍ–¨×E#ìeýlKúÏŠ~©G:»8 Ì6ˆ¹…*Â+?hF&= nM¯äcÉ*cázv¯ACì,JŠ!>D˜ƒo’Áú˜~Ôî ESbÊÔ6EÊmFãoLu&ˆÛºØ^mï—h”æÃ!¶Í½‡Á4عJ‘)*KQ‹É™g¥¶Uölq\­v±Šû«Ë™Š*½aêíCUr(ÔȦ;ßñAqÚÍŸ¡²Rºœê¾ÕêÞ?-ø:â"öò|‚?Î~8¹UtF*ïáB­’ö•«ã˜~†ó?HS96ÝMf– C2­ †:âÀ„ë@Rû±Nnïó£+÷wðX–‘"ÊL/8Ôj…? Ëá0çHKë÷、úšSoXîdhÍÈí{§ †a _!’K=]Ñc€Í†ì“5ìóH²)£.ÇtiTÒÝ0 3烋Úúêaº…[ýf‘Å"ftÜÖI…/æ/˜™ *¼8ÇçGm©9ºÔl€êkð?…»j²ÔЦeZÓ¼_k p­ágȳö”QWQL§6ÑR55Z^Û+]”Î ä)È/®X‘ÓÛÛöÁïíù@3ê¨}¡F`pÒ™ŠK3TÖ+3Jš£¡Ð¥²G-‹âUýº+žlkl¨ýÊ?¡çÖQcÍÑ©•1Û4Ì©§(Êsà Û¸\&­~°­‰/±–bíôÓ¼@|òw/ }ÕdlÛ>MŽW;LµH‘tÔD3¤”Ùâ+BÖÕÖñO^WÞ±¢ëð®ýŸì§Ìcú@É*ÆTzÏKÚç«ö ÙßïQNÏ“uã€cò;(·}ákjÿZïo܆ÐÍÏ[»€w>1Z±$ììTw¦z‚R¦ç¾¢"ÓMR9h¼G4wçëïŠÿ9-Æv%9ör‹5»í3À¯ë_ËvhÝÙçRÁ–s‹¬¬G•1ê…: A £þ÷›³Ï)gwXG‰;ýÉç‹ãþK©\w1“•öX8–êàÛ{|ŠÆ:þ¾“¢ÿZ•ý|̬¹ÊJ5tÙ}f›¿G6¼ùXÇ#dßt¢”X{â´WÂCº€Lð£õê V¶#Dø‚“íœ>k.UömŒû”+ü;çhDDö4$:äʧ\.Ì÷+ùF×í¹cjè6ì §ÓJÆý±÷àÞKÌVWæ øf&ü`=P-«Ê§Y^KlI ºüïM«£`ô^B´Ì“AÕ •jù,+AÓMTä¶5‹$Ÿ²2¿†Ž:§RBàé_œöMžÞ%}ðï@qø©²"è^ 'oס‚[eNvˆpÿ +0&1d«³˜}˦k|ÿcb_bÇ.³! ’Òä{Û,ó®ö•ù?Œ#ÂSzömÈ&1¨õÔò­ñ°ð%Ãþ-Ì Y!] xáåÕ‚ ‘ÿu C‹ãööY}^_·¿ÏÛè—‹êëïö÷C}]ì_Woø/ŸÕ/êì¦ùý¾~®Õ@ÁÑb§þ6çÜóg&êþ4÷"F>Bï“x)7Ó®èzíKÍs™rÈvïÙu烲yåp6 g¨¢ñ‚¨æ´zU±¡Õw ÖŠÍ1ǾiÅÌsß»Nãè‹-fLÑØ¦îö¨}. Kg$è@Q Ö˜}·oY천š…z“%ÜžÊ*…­2.ábÏœ¸Ù‘çiÒÅÎÆ»,xQ‰†ÄñÕž.ˆ¨‘ X%g°í$Gî·)1Zîb&­4w †óí€bmzõlðÂ¸íª¯ ¡¾uûoä=ËÜwÈ'T)ËÞ6¡œœ¦žÊƒ!±³·7æe£z÷¿ÕÙ¸låÛ¬NN蕉ˆè®pH†œ*+{ªü$LN¯Ò®&¡mßÙ ó.ÓØ0ŽvôäÇ·êE$ ¨¹Õ)²øFÿ_%^$ñŽ¡Äâà%¶\Í'‡ î.)èáÔw®…Èua¦sNCSŸ'þ.\ }¢žðœE)ѤÕS€üD ׂUÎ,%Äö ˆ‹¼Ät³Àa÷ྯ`³Jn…´“ã¿£“X$$^ÕØ¡ -â~ã ×VTB€}³b] ƒÿ-ý0© ëþð:¨[o§ö—6îçzòšô'² ”™âŒKÖ‚W‰’a_g[Án£Œ¾?|jJ¾ 80ìöîOœi0 ÅT/óUgôÝ ±3¹¤²ƒÜ¹Ý²…ucÊuoa9ŸqÇ2Ñ) ÿWðÞG jÈÅÚ‘d)úYHrMݾ>«ã,±ŒZJ` L¢ø´(üØ%l‡H÷E¿í˜ó ¥øæ~ÚDú G • ­ ˆäÓ?­5 ñød–™õt lÛZ0YÎ@#NºDLßkÀ}U€#ÝìõD H6ãË ì Ô•"­Qý.nË +\l¹­.ºŠ¹½\reU 6`/¾†rÛ-Ô‡_#Î×ÿM­3A7¥A]584šðúO q"Á\ ò¦˜)öóÕ|¾V²ŽŠ‘ÆìߨÄ'\e.²Ƹ‘ÝüVaN¾ÃÙ`%ü¹½Â·£«[uó„:‰-ðCC”©bŸwÕ §åõ©fµ”'»2á‡åDYCÔµú IH×µÜ|š…Q/Ì*õòˆ™VÕÿKòï6gN¯H|»ðâîÔlh*‘­ˆ¡IÕ. :VMwäϱ+ª§‘Ž ;¢»z¾õ7ØáY«?mR‹åQ"2Õdg±•X¾§f5°IÛæoªÇï´\ ¡W,ëÀEÉ,¬…¹–æ¾Ò<“ûÊ–ƒŽŸÁ–×%àÚ‚sÁ9Ò*¿9õÖM)„6h³‚ß9°;il*Ùb›•óuŸ¤ô­D¹’0%[qß‹ª¬nó½Œó6ß’‰Ó?Ë ,ÏýÝ÷¼eÊ¿¯œ€ÔÖ‰l.Ï"4ÕýDñjñ‚Ê-,vïDy²Ý7ÊŸ6q·D„œGÞ•z>5œ¾ƒìßN{|RiY¬þDÚ„Oå-€‡CƒZ‚”ݦ~0K[ЯÜ}6l‹ þn` °ÃçöôÏuë‘ÝpýHwá7žfãük®´92¶%%ʸ§v>Ó ì¢Àû£Ì{gŸM}š0 F6t,ñó Èõy¦Õö*@v´îKHæ+å¿ !å•X:X§§GKµKc‰ˆî%®ï¦‰8%˃Ø=êJO.˜›ëƒ^sY£=N#íó,(¬ Ô^¹¯­/‚…"¹¿¢0h<Ê¥0¢Gè¦õ ÜL±3aVã߇™¹ù“h~ qÖã¡ûRJ›°­ÃP踡šö¦­D–àP_ý~¢ÚKI€O?¨kßÈY¤ŸÔgÅcª©.û Ã8aD·ÐNEÛøjûJªÞ bâ×Ëò…k­ú1Ò¨Èuè˜pkþÊ4¹)ÀéÅSdÓí¹S**mÈzò ¼½h]ÐRö-§<ÐUç‘ÉðœÿÅæÌ<Ó™ÛOi.EZ^R›¿c¬‡…ãá0x¥ý\CŸØ"—AÏ a&è¤jE×zíÂeŽÜçcŽnÃ)¢ ã!¸Ò|{”BÕ ê^óÔ]ÿoj *»æ`!±áÊW%êá£:?¼~©¨áchú¯Ó ;/2÷5.©æQï”a0ðÞD²^>.¹bªÛ“f"¼¨vqþE‚¶¹ÑÓàO„ÏfµN“šYÈœ ¢Ô³y¬¶Ÿù¼õêäÿR>3¨öIO¸‘U²ÝhzƒdmOš’î˜.„ó´ªOœ‡Ùþ@À©gh©ù,‘·cVãxØ}… é€m*Z‚Ý1Ïþ' Ä5;ZF.)!)vÞ»æ•Õ‘Êr eA«]¡HdTín ¿çb ê›hˈ%µòžŒ”ú€×U 0±Â?<¨n™^ühÄÙ5yh îye쎂~U)þªHüÌ=e( ¿qÞ‡Û~ýåf#R·ÌÎÄuæªPÇkF`lž—Ô^ÛsÒ±rÚfÞêEÐQïÓ ƒªQbø¦Úm«ÓT¸yÀ`oÿ9Ð0’§‰ß¾>}Ü}:¼sÁ Uñ L[îöQMé ®‡É€:*é„eÆoŸÈŒ~´Ñu I„Õ%ùŽbιcØÈ¡çå!¤Â6Èÿ2Sš®¨VÿdOÉE€¶ë 柚~UH• ¤m1¯‘&ºÃ—cýÕŸ6'\ûØ2I †¬°f›¦¤®}Eµ°c¸KÅŸê©ïm¼Ã’·ìøª›_³,HþcúrœÓÓ°"‰ìýÔ‘ÃQKm çŠ[–Lb/^„ÝÑaqr¾ÅÍqÑ^5ppw¢K¯û¢¸÷©DN4†úUnÒ¿Š£v–(ꀞ‹Ü…Ë^2ivæ.ô,V,\&F›kˆòžÂ+ZD¡|Drå ]a”ˆEî³(Ž_5záÅÀ6;JjVDÛ‹Šó |±ünµ==t¶Ï™³wþÿbÿááq–åá6ÛñFôØÜ»*†Uhý^1PVâ°¹"G*½fÌ®™*Ð(›7oâÞÎb?ÛfÇÛæÁTµX%¡«~"Û#ÔD~òþ¯82bªpB%_×2¶eAog0:4Š×¾• ½¡t?Š,ïÊþt¯ÂÁ˜¨irjå n &²ò(©wïhKË$)¢ÏØŽ»?ÂG®‹g,"Ì` ²ÇÓw8•;~m·SÕ¶<#f¨À?z·+²‡Ql»uðˆ•Ã4½T¦ü«ûxJ Û®°,] î±P ÀBɧdÚ‘§©<Ä¡R²¥²o™#áª([¸2,^¾éÊô8vÆ5¼ÂºÏß)Åùtæ1D÷5kok*o~‰v~8"ÁØŽ0€@…ñ"!Ô¨j¸…·Òº&|†S~h´‰V/ºCÁ_ÚF÷ëâE¾Àk'ænJ]GË<¤[76¨Êå@‰Ë°ë+ʰ̖§oo~!‰ðYiÿOØk@º–¨®B ø¤…¾.nžýå*ÎC3›­ìoYgO¸r/)$£ÂåL»iÝ3•Ñd¬ž÷|3æ×U¾tô–m`ï’^30Àeø©Q›-aÍÁá]Ç0ëìÙ&öÌØØà®"°¯wCq Qf¬Ÿ€ ™K-˜ÁA¼zpÁK˜ppmo͆I­Þj› ÌW]—,ݼ/Ëêßs‡‹Uó3¾õVdlf J…’0¢/ÂWÎÝê%§&åל‡-¤=]|º){–E¿Þ¾F`ŽâþY_.ª#.‘íËŒÂ]wìß@¡G£qZ~Q÷ay‡ÃójÑÄ”iQÃ…å÷ƺ(qÀÇÃVÉ¢îÞŽ[aÉ*|ûkinƒ4XL(Á¨úÿy”/>îÔ󻔀*£JaíBšÖe0ôé-ðU‹©çÏbüœ½Uª¬Ãæ¹èjÏ#Ë멉£Â÷&wíŸdJïŽç]ë™ÊKuU‰ÔX¥9€|3c;çŠÈ˜E}6H}ØpÔ?¹2A” Ãb}ZÈ¡°ÕÌÅæl|+-W ¹RÁb R)ˆ³ÿstY:rŽRíZ›Ø¹ÿÈ­oÈvfÇnœ‚›–‹8Úe‘Mñ*Š/VŒÑ!]Iaâ°¥¨’#n)õ‰ ~˜ ùü5ø›ÙÉi2˜s£‚"’ëÎRüDQÜvo7Cbüÿ{ý@n>/šÌ žÿKC ¼”nñs/„ôÌÖŽg_. G 2æ®Ó– ÒÄÄX»XeøŸ²R+_˜]þòD´¹˜<í¢4-Pž;EÁ)káµÜ#à‰íf¢U…Ä”pëþ`¾"P—xˆi×* †é°ÝáD àÞÞ||^+}¨µ(}—ÛË }b(™¶çë7…¨)Z¬€1³ô 8ßâzzQ8¨1UUk…bx§Ñ«ÙÜB3Ða'ÍÛI:u¡a*Ô*µ‹¼á³™HMò„¨ÊvœÆ^ÌJyØ’é!—.$ÏH˜_W*ƒàÞþdæiÒI „c5¢WñQ9‡d7ïl¬Rêµ™Œ àì œ^T3d‡Gç¯Ë«“œHƒ bIiŒK3bWF›8|Gù!â3¿P&]Nó§§+æ-ØÚw.° Âugh™zc”<·ò‚KZ+²/y-¥Ütiè­™O ‚D= ¢…™/\*Æ÷Ÿôޏê“”à ¥ è‘Ìņï¶!â–•^«¼]}((ª¿Ï‹båz¶L«ä‡ë z¾‹1«TÂçáí6.ÕæQÑÃûïrŠ›üJê6“¿€ÿ“žšõ©åÅS§"^¿ŽÞ.ó†© ¬¹©Ð­4ôpy¶éªT6áL²ïôi°1nyÛ?Ýö¶qÐg6%Çí0÷HÛ±\•àó“…×T[Æ]?f*ˆµY ægTÔ¶“oVªŠÊH[OÞBz1°8l½;`£Ûd’_ôf|\IÎ#a† ‰,rýüp¡Ì€½ž)/¬EBåòÝ ‹`ª4¶Ö¤Ÿå[Ý_Œž Âá»÷aÝMWŽ/tHñ~© ‰h¨ÙäÞDG’hÙ,FÅâØLR2¿» Xd𛃀¬~©9}æ¥ñp³A5ž)n8\µ‘‘¥ôFkOOÆ€w Q€ºæà½ºÂqQöHþÈë›eŸŒ\o´[ŠRQ‘Î oƒƒÏÜ/Á²>2† »BGã@$ÔúÈI•_Iégâ.¼8lx ! C¹¾¬uÀû:D‡Õ¾î³Œõ­’3ŠSÄâ •ˆâ f—î¤õÐ7íšq‡;ö‚{ý £ÌÝЭn¡í–»µ è¿× ÏÀx‹bµÁuxc ïmáõ}+°¢ä*æ#{©¶ëï<ƒã8Ä>2Žãøuû·g×ý:K¥{’4QÓq*Eßnçþ/Õ]¢ÂÓªõÜ$וý5(UŽ˜â†A¡œ°1eE,Z”å{70XfvP¹7¤Ë£uyÒûý€à²·—+fÓNgá-.-I\˜_*µçB(Z~o \ÁþoQoð´("Ô÷ɺKÒF$©n¤ÞSPÕ_@UצÎÁÃç·öî=Pf^·Ð ŽÀÀmö˜V&Û Þ±Áíý=™”Ÿ‰ð U,vÕ&Ô½A¤Þ÷ôýˆ¦Œé$£qKýÏÍÄZÔª¬…l3NÒº ørežQ¶Æbͬ5N/ܶ%ŸÎ€ ½,¾`è»–ò‹íþÈ®BÉgS‡¯Â3Æ¢·SŠ~ôËŽ€î3ÿ±Pfæ¼vÿ ‡‰¢™é¼ü±ùCeQžÒ#;ñ8Í¡ Ÿ¸ϧ½w Ñ¢w¡´Ž%VûOP0$'.}¦¶Ü Û¡ñƒyØdk½“Ó®"'˜³{“<~pîÊ—ë¹ú+·ðæAM-×OéJ·&ZYÜÄ’:™‹ƒc$Iùæ(ÍwjÔhå<ìsì2ռϴòÄN?‚úá:Š4xOã?<&ˆÄ¶¼©~rãxpððì›o3-#N®A0'\ŸØ‚ 86óyÔκ”M+%Ǹ Æß}³x$fñmm9‰o¿O‰åšéZUŲ­-¡*(]ÉÎÔ§AÀ”½^…ÐRBI”:T2ò‡t"EÆ…$vôT†RQ>…oØêK`mŽêß è åo¥žš`sNZþ°ÚI©¢^ èšÆ`mXcJþcÜñ¥8Œêr¿tãv»¿] ]GèÃ¥ÄE‡Õà¥7ÎW¡çØŽÀDu†k9Zöy«½Æã~ì4ÐA]¿ÜâŸÑqÞöKð2NouDÁïÿiù†èà à(ðf*¢N9ø¹[þi/ÆÇÀ·tIôZ—Á_û•î y_`Áº¦ÁF1ÛQ¯^Oظ™á˜ô:vœkYK8ÞúUY).½=îÊ–iÁ^F¦\1é÷2ówÔXUc×ëtàîëK”i캡ÒWµ‰L–Ðïð(U¯ '|ôœ?Ú=ó%=üi9ÍX` 2t‡¦p*¹Ï}Ãyk4}ëñÏ=,Nloá&Eðþz¦Ï2]F`@ È·«y‚½‹Ç¥ÓëBÀcQaZg»¸]…ªDbeìà&|XÇSæKk!׌¶y£-Ýᢉ5ºb.ë7V¶ºSzoU}Œ{`Îõÿ%ô.‡h÷ôD¹Š´JµÉüÌZ´Nx M¼åÓØ$L>ötÑFrÔÚ‹0rmáÜÐ$ÌoÞa ápLóÜè¾§BdÜ^[³&3Æ ¹/ª¬ l±ôDeߢžïù¥[˘nâX g^*$D “±[ÒšŠžçÛæòÖ9®@·Ý5—š?#’´Ò;óʼnկ#‚ñ±5Tü‰£.ÖwÖ ;”ì’+ýˆ_ðÂ)͇ìïu–¼òd.|‡v‡9CÅi9 /¹~Õ$»y,´}”Šƒ7K:CŽfÿaaïmˆöÑù‘÷W³Âé6Œ'—[ýáéíh÷L'SŸN¿/23±6ŸëFú¢ÎýðâÉð PÞ¥SXŽX”Vƒ«SÊß{·eÂ&çzU @á ;×HçpËï'#æÈà VŃW’vÅþüF_.?ÁΤOÛ NÖüò*”¡LCÀƵöì½èñ’§QkD”êCP³ÍùUãT!( Çy´Mž[­RVÜ\Î#â7fÜ7Ðú,5m¶®0„Tºü×¥¡ÙèÕ'ï£LZ4H¢RE‰Z‹Ÿ,”‰f6ôšÏÎÝ­Tá8½¢›º…G˜Üi q«KsaéyÛjiÕ=ßîíˆhå(3x@ôg³'.ÑU¾ŒÇ†•qGA£³[ô7C³=ÜbÔ¾Oïsü­í<¡ˆÈh¿lWX(s˜<Î^KTÈ%ÄbN°ŠN…Yô~ãv†Uq?)áè¸vE©‡VøG”qž2‡3@†Ò¹ÌX‹Â`d¤Å[úﺿ²eÏê\³ŸðGȵRIïåÁ„óàÇ{ÊEèÑ.6 ¸ÜÎWª'õƒ¸7¿?*¼`}RËî(A7àåÞd«Ê~M"k{NÌ"£CNö H²ú·8áŸzö&™½¹:àž¥­¡ãüœgC|ð´šüa!9!G2GªWÕì!iÞ² ™^Á0\ŽŒ$F­@Q$aö.ݯ:`y–÷ZB®êî*`Š7\¦Ç6U\öýá¹(È‘ÂbQ—øMq§ /…>ÄJØ6UW¬Ž²—Aö!qfX‹Ù3‰—¾èDéw!ý™´5¯|¦Wx®ÐÁ¤OÓ!h&²-nïx¨Ølxļ¡^ø\H¹šµ*0ßQ~’š”1 Zx×5ˆç©±ôËäÆš¨K@C3eI{JçÒ“Ê…ý˜è ï/Êìì¢6q®¡ì½³þA>Ÿ3bVƒ£ŠÒ"œþ»üíÿi[ˆ¿+Ù¥Àë(3c»yG4šÞÂÆ!ÙÈ`Sÿx58K>Äèk¯{·$Ÿ3³p€@mÝæ-/[(ÑöqR-‰»â¤ýÎÞNÎÈٖʉ¨¯ždéûî(W÷3}íúbËÚ„ì{òÖu²C<ÆBwQ^”éx~©aÿ*7Ì Í~Á°œ´ˆPü¥@‡ÈÙÐ85$»^€HÂã¡­v”îQyŽZ[WÆ|·kL#eŠxÃMn¦Ô¯ i‡:ÔÍEõøSb‡jI§èÄætƒY—È,=G*Ù=FÇ{}ª1]—%Ü÷˜ù‘@ ùåCIøóŽP–Ÿ!²B³‘ì€EúF0-õ]Å$ZªjTç²pYÔ1}ì7‹ûʧKå–Tx¼hÆçµ`Ùoe ¼,¶Yü)„UŠp°Rþƒmg?h \‘¬íõ"§B˜äÎ^DD39t¨÷<‘LI!‰PŠÔWøg=ý”6^Í¡çÁŧ ¾½!+a6Œ„ñ£Áe32ñ+œçÓ¡‰²™>‹õ9 ŒÙ¢Éz\™Êœ-™•ÀÖB’Ï›l4ïŸw^Ž<x9"W…b… š+Ê—í6ú˜«TŠÎùWÕn:`› ?}¥÷Æ!EBÙÐá©ôÛ‡OòOSVÅÙ«!4·ʺõˆÑ‰ž´þ7–,Á#zÊáüÂæ dÂn`@ ÿ i°ûV–SØÁžp¶Ùæ²-Ÿ¦bJÒx¹ŸÙQþŒB8}«#¨xÛ«åµdˆ~ßv„=~7¥°sÄœ‹>x(æ=¯ÿ/µâ e0¤Ë…Ž;„<‚á~l Ù?3¨ŒôGBÁz‡×|O) ½ù„Êë¿Í4ÕHuhú nd‘÷*žGt/ˆêáòf6P)×Ú=Kø[~?È0䄵/R\_³ÒYF]K–‘žR ‚7,8ÜÃúåWLéLdÚH^y²D3µ¨ž÷Ë ×a½¯ùQýR¯µÒ^¦Ë’t™Ïþ†»K#c9ïs'†æ¢ È´Ó.GHxꚪi5ƒÈB0*xðXn,T,ë¨8ª²3Jîµ½~Õ¿ÀDQÜîªÝt(ÀÑ`8.èv"-Ø¡ŒØl‡q ž›¡ßXfe‹¸(0÷p`ÁrEAH7î·ëðÁÿ£æˆ Jïø *Ÿ‘Râòk| {Wëp+Voòâ»Ð¹~æ,IINaË”–;ˆ`ûO´æêT½ð-œá‹Jˆ¤s1ˆ‰ÿnåuü¢T–Êç]î3žmÛˆrI']8!„Ð_[èIo‚VwÜÛŽšN/â-Ž»zØlæ‡ð@‘IÑ£4,õË,±~õ'¿¶cÕïˆG¬Ã÷u£5S¼Ü(u dçm×þ ;²ì1÷–´bá™RÓxZž~OBO‰AÈ:öLt¨”ðì™°?ÛvN„SëÁסˆBé*Û„ÈMøÇâb¬¬:oýèÞ”Ä-WJ©ÿažZ³®àsÑj½›k„Ñ8Á-£?¸q¦-D“ÂL– ÄŠ‰lH‡B»‹nä'?l!ƒýׄÿuGílÆ‘[2ûr8—– iÍr-Hí\ .‘.åp*ÛžqÔÌ„Ô`¿{ßþ,ðõušOz²8ÂÙîâ:€ÍÎü”û‡²sÎôMbꦌoŠÌ¡¨¾_ë8r‚:\xÔåGÏUÁ]uÉAÊ/O! ãåâòXG¹*÷“<–j˜¹r¡ÏϦj‰—‚KÑÿx>1ÛͱG1ð'×Õb2¯dÇ{ I]ÍÓ)dÌ­ðºÒmác¢ï odÞ^Ïg¿œ…™‡:2ÀžÖŸß)ÃÞ%™Ò2pth] i§5M9Ù¾#X4Œ"DâéSn| ü”|b8Óàúƒ~méÆ9lày&v'‰ëÐÁ·W]b¯@´EHìRê9}h¶¿’œG]@qºˆõè:€Tu3ÞrbÔ­oìiþç•Æ=¬ðÛ4̚ͰÏPLG‡ËøÆ ‘QÑ´Q~ ú^^Tl­Ag ²ò£%ë]ðR /s_¼l¸‚!NC!]~y·öŠãÀ„„N@íeª„AvjŽ2VŸ*l;Ÿ¹gQÉò³…hÿôjØ`Æ(ýP_rÛÃsê[ç†øä®Œ#ó° A}ŒÀ®Ù¦°õz¾ÌØ ‰~Œƒ†<ÿ¢¯þly\SXÛü1ó•†Oº. jfR9Cïm7\ß(~ʲÃ9+Ô7è”ÀŠÖ¨sŸ à˜"ŒÛ6WurýV^14þoËFI_ŲÎadzMºÎØ>³p¼erº¿.?„êèÎþR•_… } öeŸ°‘cz ªz¨0…a¿gÀ¨ =@­-ïÅAÀ¼ƒœ…º{JÏ1%X*íº¦ñ¯ lÓ¬Äß³mp’Þ+­i K«çn2áÎûÙ†ª»WáFk b«ê Ÿáo°ÝýÞJZD~_©‹Â-°ààN|v@j-5ÃÐZ‹o†ìûvvùäÜÎQÒø×Þ-6¬F¼9Z˜3¿pN¸£à‚ Oe§ÍBô ã ¯lsij7ج)âA'üQK3 ‰ z(¤q&дj€È®°°ëgÁeï™ù7›tŽºŒ}!騟 Ý\Q5\IdÚzBìø‰Qì¦NüFs”³°×VRF°˜™©mægM¸QZ›®Ÿñ¦/Xç}òy&_2èÂ\¹±™ŠOj(éË‚žœ{TK>œ4¦Úªñ¤åòJBO¤cZ%«¶[ã- lUW®&÷p¹‰·—\ÚAwSÅX¬X?Ü’V¶Ô¸Ý”=Í`“Œ$¿ì13{‡Z Ãñ”zæ€Ñ+ Iwå.9HDýû ó<¶þÙkäcô†Í¢)–ðwM.–ï#JÝÇØ¦=Oؼxv¬‚>Vâòi£ï\¢®"Kæéï«!NG,Ôκ*Y¼¾5eT„WÓg=M¿ø‹—ÄÄ+çMâ"¼ ™»)§ñ/ÄÏ{(ó |MNv%Atú\XÏš”â#Pn|Rr1AÍšÜPa\Á?'iLß’öß„¶Ù©¶_× úã–¤Ó ÒÁÜyLú-ñÂ×"Ë`/ö§e9 –Ž1Óìú›ñÐØØÊ7[à qheÂîYúdt<ò=2øþa*EIšü3»ÕåR.œ¨ÑÔÀF |È,¡ *˜ŒÚÚÊV ³N¡qßô8 R5¾£-û–×;ÁX˜:ÕÛÎ2u²4ƒáÆg7õôž°/>­Î"°wÆ,èÍ”¿&¹ £û|°¸†.Æö˜ì#6I0"t^°UƒœÀ”7ÀJ¢Ch|œlÛÅþÊ‚œÅ"tüÎnšú ÷¼åì”ñMEw+ EþE“–:‚¨.I¬üþkuÀ«$5R0"ðJ ð|üŠW—¸ºY`tZ͹D‘/ç@;µÄ_'_ôSùdY—q]v±}.‹!L ¾ãð¬ûÐîØhù°Ã–`Ê\µ‘ûŽçbBK¦ËBn¶Gb´”•w–¯å97+3~ÕòÓ+·–¾ÿ,ZntË£†;Ô[mŠ¡¿ ¾6‚Z1Uµà }X7¦Hù ìÙÑ5Àk·-é‘Ñ-gMf;× æÁѺ–Ò5Üìv51}~éÚÔ0 5xζ"ÜÖ½×ót‡ã>ìigQÀ²Ë,Ÿ$À*w&0Zw™•ФlØEͳiä«õ6¶“: ¶Ýú7`.þ‘ô3€Ø"£Nž=Œ¹™à\F;ÔÖpü^UY@0i÷†žàðÞ²õJ5%,ð¡ìtjÀCª£ëðWènœš-Uî|Ú~³Îv’TW€o’aˆ…i<šÒ (hìíÆƒ‰ò†jp²@¯òumA2T¶*€¬K’|Æ©ÏT% •bx¥ijÈâ¼ô–”º¤1Ò'[0ÉZ¿îÕ; ã[U_ ÏÆh⪠ïÆúÑ GvQ LnHÃèq«º ïÇ5…ú®úœ†Dp›Ñçê@Sà!m¯¢]eYŠìõMP' 3¶*ªð¬SgpíYK3?6>Á€RÝTÊû]F¯Ñ!ÞC\¤š&õŒŠtGÉ0^”³ I­Bæ« ˆ˜XJ>>ËR˜->Ïcx¯“*<þòQë2]â»]òR‘YˆG§…§n™.j &è‚å~ I-iC¼SøQª ¯Ç yâ(ëN–B>C8”a`yº-Ì ;>±s“¬Ð…­Š¶»}¸Ç½ƒòÇÊij.÷R6ÌžLL@£5ù‹GgðÃj¬=uLõw(eæ).ÌáÏ#08ØþJMìÌ×\ÂO»^àyçÕ»—¥êSö±ÿlœ\aE3¯ÝPŽ“£”º8ü.Æ'áíp-±NÖà/Èö˜ÔŸß[w(®V sãÝÌñ¨%£·-Zê3õ ½RC›âgSñ¥Ì,Ã6}Û”«›;Ÿ‹—Àµ¡q¾ªžöžo3¨Où­ÁìØîQª®Ûµ¼qQO K—NÌhmFOŠ$n"L 7ú· ÌrcRjCÀL«ºÍZÑyqâž¿‡¦hf¢ËÊ'ÕýÜ3#‚^¬¤ˆ€±ã,(Ù°½ª‰k߯a`DjNa™oï~}Äì0JÖÑž§-ÊÅÏE%CFî(µ+ïVùô/‰Ut ;½)Èý¡Ú Y*Ü„;R4$ÅàŸrÞV#™Ôx£({ÕœØn‰UCßs\-+8Òc $…¹ˆ{®ú;$hâ×ÅÕ OºmÖ| ééhnL¬ï"^_¥MÅšÍøzî+‚s9‡²ú‹Ë@]lš&¹nøþäÊ©ùºËçûž¤Ç® ‚ÑnËá{{J+Ô'õ½Â33ôáW}ñ]–NGÓÓwVãÆºI{û)öÎR îÙû†´YnäÜÄFìFÈÜ Ÿ·“»6ÈÝÿg“|éøê›1q‰Hõ‹4Ö¤mbŸíÁ6ú_v3Å3ä׳ìl˜L–>p>]§uêš]OÊzV<ÿ2)¤6æ¿·l¼ÿ@>¥t\‰D=`6ƒí²ßy–ñ˦{%Qlì+ª{^á(¼ù´g ‹Eö^U2qÿ}ÿMio”¸´H¸ë#9G7}Õ–Áá•觬V­@#ªæéç¥=Âlè+þ&CÇÃÒ§ŽÜ¶ë©Îí¸@tî¸`v‘/Õaƨ 8áèŽÉÒõtou“l.Ítšd óÅËŸ`Æ®³âvj„Oú†šx3š!š7Ó  ‚ôÕ5Ã9Ò¨¼Æë91Ý[z*Þ)‹¿„Ðc#pÑë¦:Ú9Ž«øœ•f“Æ@ , ¾‚üh‡h?/lü…ö9ò”þ™òf'¿GŠ »o¼“ßÓåDUs B¾"œÿ1m°ÊÜšSÎ_zsi†¹IûØw>¯žÏjDØ8» 9‰ "˜L|O<~dR%ÕüEks-ÞÕO}™Ñ¥ Eç£IùËA‘·fмËBEB‰ñr%EK`C}1\—0êç ·t}ç<Ô¨Løª)/…æm>^™±/劃㇡ßdw¯É}û"©É@bÒ_…mX0¿¶Qà•MïDûИWêô_»Îª½7Þ¦÷¡øs3ìmómŒø_¿ï¢]‹a/Å’:IˆÆG¶Ü|÷ŒÇJtÛf³È¡¡®z&tî-8š@=i-ãü2—d«ØßîTÈ5–/b˜ï0,9¬ÝÉ%MkÑ ‘dX¡ÏHöI_\Q°Eh~ä(ñKâfkð"pw1E"Ѽ4¼Þ¬=ãƒ:ë¢>:w vuNUʹó›àûC_ ß>‚“䀦ãP€ÓË?òx6î4SÆ"«A¯îÄH&ÒS:Áñ¨j1±Ü}À€X8ˆÍ[¹T£Ú1ùêaD…: ytb‘•¤ë;áÑ.dW< ýMðôV n`.¡ñ&ú#ræZ@ÏË‘Ë5—Û…E"¸ËÏcü×=}°Öïèb´„óGøu¿¹5?²ˆøgZbœ?aZáß™ŒÅl –5£´}:!†”:ëÜÁ2@º%Âßî9•0û‚ŸÜB9.,ªÈ¼…8ÕùLú>Î-ÞÅTi°s;µn2SÌi€†?«Æéj¹±óKzë¥T .Ft6'c *¹NX?\¯–û|¿ŸuçWN1€:òe…¥ÐðÝÊaçÒÿ;Ör æJCVܤަº°ÖZÇÐA†ØyòÝTŠ¬Ê”Ô¢˜À$ã¡JC1Oå(ÿ:ÃÖI!y¹ˆì€”òÚÌÓVYu@Pmi‚3å1“w†Hæ!KP^XŠ+Z/mÄœ¬FPŸe°4ÑÖ4È/lb¥Bqáøtñ`'j¾WGøf8S66ð8‹ä,ÅnA=᥺„ëÍ}(oÇc€¶ZÅÐÑî>»)j ²:ðXGŽuX•vÀ®»°hÌ7ø²³€qi_.9fƶ‹ùÔ] ; w™± תdŸã=q"ÛþRð¼y¬±ÙF1VX·éF ' â5ÖúóË¿p;ÂÎÐ׳ât:µhø²Ó•QgÂ×$9ò »Ã\êÒ®]q.‡âáí¼®œîùéq’nǽŸÌNo¾°Œub·e³?Lt¦i{µ½0„®AÜWÓ9—âÇbS"úo¸ ó"à)t½ì‹Ä½æ¯[oƒ-ãú:èÂ/É¡jÁ À9fùp£E›²' MäÌf‹~I"s…h`ÇÕf2ÙðZV¢³±¸+.ª…1ïŰýFòÇuÐRÝmá|þÁWo«º?ÕÝöÏìõw-ú»²ý]Ëà~UÿOìcóûTüþ×À¢™;ù¦‰Š£ ±"v¶±ËÚr°m#j¬m¾ÁˉSÀ!,I즙jÖ ùâÙ!Od9V^Bêºkõy4˽ç©@Ü`ÿ󩙃¬6?ÑûQì_»wkÄÖf ¼ŠD_Q™h`Ÿ+8Î3^uX°E ñ/ Å|8)Äm‘iëÙœÒBTLðšŠØ-aä}ÑEàñœílt``KÏéyäX¶ˆ´ì*—ÊÍMÈX“Ðy]„)uM •¼b0yláq"ؼ©8 ¤Ù*-K2—è—gµÀ1"”.T.j¥,«kŸ"‹v!öa4íw°£:ËÕìeë~ͼé^ÈÀ¥]z ±h ÂÙÙrZÃ__!Wy&µ=¿^mŒ”-¶äËZªn\hùÚ.Öü¯®šl/mG¯EäÐX~}ðÞð±¡]~ؤU@ÞzøbÁ•úæS@Kâw}¸ó­¢Üë:/ÿhº¸U }ÂBRÝŸÏj–OþCmìÏÇeDf¸ëõÍùñLäyQ8G&q©¸tÿx¤ˆêNödþ|Òn â¿b/(`£¼t鑨CF]cî†)& ¢}6År9\~ª’(jæþâ̺³% L9354Ý[¤©eÌ¿ãýSø…Œöõnر; ØÛÿ2ß1u'()-Ö)bÝ„u64®ÎHùføwKî3{±b¾ÍHE+_lçÔÇ9ä×-"w¥X‚¹7O3!¹¢vrŸµËT¦æÊ-~¥Gõ€»è ;þ…U¶èÐ¥‹‰ky+ß0@»Cš8ÚŒ©ùþžhG¹Á.mjƃ/ÌÆüñþ‹­Ò—û¶)@=L¾ÄÍ^¡õ\ßî?¨|ÔßY¸)%ÉRÇÓQRÀœö¥ï°†8ÉHk4Aîñ…¢ÌH†#5g¹ñ§¼‹B–ë6;5Å!öÔ©{ÐyÍñ«á´ð4l<œ Fȸb@,TyXbYž€=25”’Úš>ABÕ•Óvgoˆ_DQûÒ0†¶v[„@5ò«ã´ÉØV²`aœlÇ¿N«=@UT›‹$Êè7Ré͉g¨ûg¢0ŒæÉ3Nåµn÷˜lºnK« š¿<×ICs¼Ý9Çòã f¦ÙÇg×l9ð›~v;zsGuù«zˆl±ÇºÎsÑ–óìÞÞâÿ#¯_ ƨ U‹r!ñkêÈ¢š®;:‚ªW¯d,ò¸ØÑA9Ý7øƒÅ¥=n¶)®I‚0ÉIÐôæðþƒ,G³6 E7¿½Èâ,Ù™ª\1¨¢1DÒŸ-?œ­CV» ù1„…‘ý}RŽki´=àŸ¦ð9«Æ²Y–ö†#×M$F_ýð·ÜÜ&½uù×ç½€± —˺ Ì9‹ñ‘ÃÒ¬#V[®"¾yÖ~Ë8a`Ђúlõ¦â#4é,¸/ëÑ\n MÃέס>p¢Ð»8òIà ¡•+°ÝùŨzËgFPUKëïè«Öã‚LJ(f–,jÓ˜š ñ¹ÄZû›ø?5ã=ªH· ¹2É&Ž^/ 5$³Oõ]KÖWÈ÷6hV¥ Q%ë øJá1¨›ªHÿ,¥Àâ§Í¼FŒ‘ý¹SÎȤœßˆÖ ÍEu“Ô¬Æâr=æR}–ÁGC\öb=tô·Ÿ’y`ô«+¦!}9ÊÊ+"ýÑOÀ¾f*êGÑÆn³¾bÿH=ãçjçö~ÅÊ Ž<`^†™éX«Å]±¹oÁ!uq‚ )sž*Ás_+éY!: LY2½LêYçU\oK>A‹¼“$ö[¸×±+²UÀŒ.¦±ý¢…rûÚ±o¦­£«(ú§*›ø4w¬CŠ{¢›hPý± zˆ÷DÍG w)†”¥l±ÜÞÌ,àUûæEwðnÓ)Ûÿ4ѹWÁ¶R£-yŒö"v¸Afˆ §¢/ #ÁÚÁCô^,} ùÜǰt8›úÑW'½Yµ—m? ÝÖÈL–˜°×˜g –ZíR~©98{'èôg©ÿ}¹m˜÷åå}ëœ*átT8Æú‡Û{/Oðbè÷î´Gä+Åé2#fF B.<0íXW±»¡ý“3?a繊~, ˆE)Ða©>B›zUN0)êªÌÙžÍ\(F¾txž‰ú¹÷w®ô@H‡§±•ÉJO[B.€ Dj€‘ܦ……z(M C·Hgºj¶;²C3{¶òÜÌc.T÷†wwxŒüz‡áàΞsH–Í(w®ïw.HÕU kß[ëîéRI/ÿe5§Û=ŸbÌ®_å–F~gLÿYP×ÛŠÏcqWÛKò¿y·PÞ2à?v¤"àwÂ4¯ûáPR\&©(¨°Ý«ölÓ<ìâµW.¥äæ"9˜†Nv÷5\×!-h¶¿äŠKÛæäº}¤ý£Lòòerùx_Ž"Y+œ’˜»¢#ã¾5Û:1?Â_’ašçvÆ®Î3ð p°Q"æ¥iÙ#_ºi®&fÝò¤lù‹ út¿ë43öˆQyNñ»Ö¡#Üê»bˆ¢gG¾]+=øÍ6ë¯è%±Y*1ZL»‚““ú$°ý„ëj ôßQÑÏúµëySI-õW~ytÆßn ¥LÑ&”H¢ùoËÇñœÄ…'wŠŠÿ<Æ­±Ü©¢Ç6$iô28a‚ÚÈ%ª‘B¤^û„°9ÉÖ`9ß™ÔU°šB°e›}ß~íAjó¾*Ûoô=Aòú…ª.+V4!Ÿ]P¬oÌ—AC^•ÓJËêR};,:ñáÝ”[H1hò*‘ ™áÐp#¾€›–™œ{ã½eZˆ!3Þ­ç¶ijÁ:ht¬µ[£€˜Ö01¸‘7ý `* fÕn&âf:L…›Ž> §»™¯ñw1^Þy¡›qͺ&¿v‡é§sÅê«?Q åru¢ög“ ù8éÀG]5øW-–ç³äþJüà_Ã~ºýÄÁcñ«èn_ú vLñÁtÈ-X};<¦—’‘ÊOhAïÕjy"Û• N·U7@9L°˜¨)à§j4vVþ®t¸óÐsCä,_ò@î@{Îu ±E‚clIÝ”ˆº3=fÆë ‹ú›4r˜Á`.?W Ðì·ËMÙæÉ\ÞðŠ}§ Œí“EÈû™˜ß¶s¤‹i,W®¯¬®$îŒÉÖÒÒ¸•æðö¤FdðÜÂÊγՒŒñ«PcEK ¥]ñSE»*“hYŽÛ ©óÉ];›]l^-@DºÊšØ©Ô¹ E”Ò8^Ê)ï™si^RTˆA­ E¯á4|Ë[âFbh»«:zîßaõót¢ûÿ,d**rs5툔)‡±„vQ¢ƒCÄÛ—ôÖãÉ׉3óÂW±SöÁ±ú\P=îê·­â`sðå¶êVO4oÍZ«h#І¶EçØ ƒ¨Ä¾É[Múb[kå‘S miÆÇð°¾0•+J½œpÎ#ÜÙÛÛk«ö? ƒû ¹OèâøÐC«¿6©¯q%%ô¦©ˆ:´ä§?ˆý¿$¬ŒloÎ2inà:6ÆÌR|¸sòý?Û<ªA‘DÇÇNø|µk*5_–z ƒ?íÙQçÅþus[!ì\ÎÕÉm_÷Ó}Läå=hcskð~•WãB*¿ó¹Q*ìÀòúÔ¼BÄOîß(è§4l;Í:>ˆÅ¶rå!Ñ­ƒÉ˜½”í|—:8iùÌÄê¶3û+ƒ¾åšž$Òhcñ÷{á<ê >‡ã%E_ xâÄÁøÉ(²Mûˆµx2îÃW5Æ' Y£C“Û›f±%pÆáÜð*'ùÿÛ÷7²*tÓm£ªüI¶Õ F&9qÅ–KGT1s¡Å‘~áÒÓÚÑžVOcðD'À©®RàOüú­i®‰øonzÚÿffuϘ|sï‹7÷À]Ä< !* e¨6V ”¯Ñ†-œÕ—z7;ã a±pl·àå·ÈSýÿþÊï«&+’®Úœ¥›ÒM3ºMó2hà D…v›ž÷X^æû­øôï7çwýA†\ Á«ÛBÉÒXŽ?N2º¬6¨B0¯×é‚gê K½ØOŸ§›ž&NyœÛñQ:×–§XÄŸqH{ BOId:Áðp„nüc*Ž(¨a*k âI«]²77åû®!ý^@5x}kpó¿±Nájµ_‹Ì?!i7¨\E†jÖ¾ÛÈt=Ïóôý¡†–Œm÷×7V)ÔcÙ#x=(¢$Ò*(ú\W)' Õú½IB¬ŠTºöVѯ‡±7#¡†Ao½‰e- zþúwOz ;ã°{CóQâ'ÅÙa„ɃV7,Ù÷òÍF ¬ûLŽëm„nðôp»Ž«ÔÛ%%n!ldE5ï$žƒ1kOŽöj€8t˜`[/VLŽU9EúY-ÔY }Ñn?XªAW÷‰ÌÈÜÚ®ÒÔ%`V~pO˜üó‹‚Ü'jPwÿ(àúM_x.ŸõÎŽ]lÂ<;¬ù¿AÕ0žàqš¡ØŠ„¿ÉN¢OvÕ­ê~‡€øúM|ƒq–<žº}xÕ©õª‘73®(DÑìÇø—ÒÕC:Æn:#ä@t$î;‡´©ç2NBdŠe]šqÖÓf iÐ{·õY6cü¬¾+èŽd€Ñç±¢ ôàãr…jx“f±÷÷|(óÊ=b»IÅÆ`:¹±]¢‹WFØiÙæAͽõLSËL(öt”#ÉýÙŠÖŸ½p+ÄȪ,Cíœ ¡˜Èš"ww?TÛùî$ÂÉHh´hª°—÷m¯§H]ÂL3ŸSMái3\™WÕ-‚¯hz~$šä±ÄDéU­ñå%ÂÑ]rFC狊OƒÔÑ…ŽhuózK`ö£&NwÕhb^ü ám~YÔ§j·fïLˆp„¾£ËXµ©V5¢ä ‡eš§Ò |g”ç,Ž%vé"Âl !H M±hÂ"¬IáD)püKñ°ÁÉa:ý©…sZIf„ Ç ¶iæÅ˜¼ú¨ƒ‡vµû¶‹®&P/HW,@ `ÕpÒž×ïIóOù9+݆ÞÌ:Ê ÀÛtH½‚ôä³Ï;–YõSèâ*Ô=S›ˆîݦ7°©Ô¨§³Óœ 3ùµ Šž®½„ïÚb¿³BÇØàÆ«©øÉÁ#ú¼ÃÍ^-ÍÉuÞhû[=‡ O$5fνq޽г$ Õý:ž4úéa†•À5+8v_[Q®üE‹¶v¬w=à¨é¬×,kYÈÚYxVóOª#Æ×:ªAÚÕ@O êÇݯi2Ìu¦ ;Æ#‹HÏ*Ç · ê» J0£ãfÇ ûyV¸¨ÎY~cBlôeu© z£'ü$G´ê©S(³åÞ³t–o©\Þ—ž¾B¼ÕâàïÆ=esZ$ë”Í4D‰i|Eà†H\” hDC’>$×C½Ö~‹¬š®d#w1P×ZÙ\x:‹#j$ÍD|DËwnü ^”¯íQhì3wc¹Ž"ßn)ëcñ»@[’£2úo©ƒP~Êøø¶àÇë"_Ø|õwu¡£*Áq>Åa1¸çèÉv¨Â”UôS”A󾲦¯’)·FvÕYVs‰eúÆ’þ¤•6‚ä_÷{4 rȂҧ” ±§ú5“_(3_¸Š·®Åõ§zrHwT¢ð3<4wÓhÜ ªO>  fEVQ³ESd©„eÌÌdG@´˜„äÀ )ÁÐSй³™”ƒ6¨ø'ö)ƒÍ‡‡•¨lM·Ê¾Íg1ÙÈhíK6¥…âÂçìÍÀ¾ÎE}r?˜b™î.êdÔ°UÜKª©Wû3Ÿ°#à;3R û×)‘4ꌹ¸NêZº #AbÒm'Âô&ŸWóZcƒ$hÂ}õ˜ÐÖ‹¥‚«°ö5©$æhãã=žº—üâE†£’šP-8É»J½m½Ê$ΕÂñ8™ÎÛWîùõy柺ûtø0­²°`Öû¸×ö—-âWgIrcLiŸ,¡” ¯DÕaú_!Ÿá¦äS€Õï²ÝxŒ:W„Õ0 ¦`ß$çû…æÄ aw••—åä ßÈn ×_TN½ÙÂIS´µ ­ž&ô¶•ÓáežÝ…I ™a3>Å/ ¶`þqœ—Ž.‘:|í³®ÕäÔ¸©wÆIèê4³àUNª*êÈ] ²ø[Q„&(0Óµ˜áD°Œañ8ºÔ&¨~î#­ÌÄd˜ÕÔ#Ô2q؉žZä°o¦Ø|è3° ±ÀŽ xVÓªr éÁε.¾`Õ‹£„<®* ‡ÉåòªkFRéî¼øsÁAMÔ£6¢ÐG@Ím |n#™+¡°uh„•XUÆ“’¡ë$Á‚Ð/Äqj5d—²Û²¥;Ð3UcçQfp üÒuæòkZ~žz@·Q¤‡›xhtxö±ã›q-QÊÛuÏD€:ê 𥞤xx·P‘Á)põŸ® J±½;"efÔœžH°;î/¼hAÉù!lóÛž!”‚·œ4ѯ¬HóƒÓÓÌ…G ù%K…È»aBÑ !m½¼ñ¯Ñ±8“ ³8+øµ™Òî|êÈXÂìhóÍ”0ì‚*PéL õT Ž@&9U‚áóÛcè2¬Û&ÆnM+qø¤~NúP-ø$…¸R>%.;:jîE´cí¯òa§6á=è¬`€?E³¥ ó_®QëiAV½¹É¤-NÛ—F®ƽ8ˆÀŒJqî|3TNw›oúü4°‡"í¶ÌS-Tar÷w1&DLôvQ*Ýꎗ–hÛß~HX)Æ–È[ß½×’šÓTלdŠÇÂXF&3Ò¨oüø];m·ù ›¦ 3½:¸,dH‚½ìÅJÉ‹äs¤‡Ñ¯1I©ñk pu a†çûxÒJ¨¸“·7ãB‰¼‰ú8‚(Þ‚:£3,’Íf@À#ÇwEêFYëPÑKAx!òåÕ`€ëôµéôëU¾à´ á|—§c®ûdøÄ ±Ù ××pú]°Ê8åÏh¬2­{²¹…-ÐáŽ^.ÊèÓ-ÔAІP”–¿`ŒU „w˜š ö ÿ­«÷ó)г=õ2„Ôb r¡Ô*Lžë* »DZ<ÕLd<=;6¬†u¿“|AÝ5ò!gSYˆÅ­ikm%¤Ï+R¦cÔïNUë¡–­äMÛƒ½·óÀ’hzÞœ!vY·¼¹:Cawð¾ö ÐèOt*<­²”ˆL=Ô³Çê{Ÿâè§qã,O.ˆ5&Å%ßÍÑñáFμYÚ׿Ñ+¯«Xîæó® Òsi½ޛ£e^‡˜GiTqk»$aÚÆWÌH|jvšµjpm€@^ —`ulü«Äñ}3X)Jp>¯4dɲ©ÖÁÜr8›4»´¼Ýû¸2et1É( ¬§³ëÊm%–}SÚfúD·´“X Ág™4¨i¹­ÝÛR°¹8·Í—•P!Ô¡ÕîHI)ƒ  :½£ìÕ‚Š—¬«Æ>Ó©^`@äkX“¨,³]¦‚CÕl~4¥èm™j…¶ßAW éçO˜{áî€gŸªpz¶IãqâóèXóä fá¼ó#  ßG·D±Â4ŠznFwWš/|ïÚÌÓ À¤X 1¹”ÐS¥h¼«Î‚Ys³àÏpÜüÝ Ö uéúOû8:¬c]0≡POfá¶ú5˜í.ÎE‹-s„Ÿ#¹5Ú¨/rC´ÄÌWÆè:nwnþéHA4âebN•Iï^ÁH¨‹õL'‘ ÎyÐ<ɯ&@W¯&+T;-Ë”‚BOržð-fh •¡W¸EÚB”sP]AÁó¬±Wïñâô×!Ïß)å[AO_aœÄ¶"p¤LÒq;7¥ðŽ|qYRŽ€/Á]›ýLö Ê$³æ$âö aq#ã¼—æ³ÍSÇì}O–I­Óñ°{tD.Ës†=°iî%¥Õ{.iÜ¡Ïcã)ºu1œg¯/£/¿ÞhjüÀbE$ìȧߑ‹ûßVî)Ï]¢=hIóÅŠŽÍÂέ¯+Ù,`Øõ›úЇáÉ97Ë)+V¬/o­õr±@aiq‚5àGsyÁÖâ™lqüÀèy[”JÕƒœÊmûE üÊÞG Ò«a,*«D Ì@¤Ä³”U» ©xB_Ësçþjo†lÿP¾›8 âðDõ£6í©ƒöƒ×ËVØ¢èÑžÓvQ™¤nö^”®Ø Îû©–o~gS•^U$Èʼb æ@Ì0§W¶R uÈÜUb)ƒyÅAãówOƒ»t#¿›.ÅÞC›´é:Qcëh…¤…¯,V;òö‚%§LÇ‘/{µÑÀ¤ÌÚXÞ9ã†~ÞQVÜ”¢]æ’õà0¯Å©®Å0Ðw!âüS>æƒAã¼£Óö‚:‚*(H´¥Êu’ææÖ™‰·MÒÏÊ7Ç&Sªz%D½g6¬C„Šf¢Ðܹë¦X1Ô4m G1¯õÕ|¥oWTÝG0¸¯Ó/®y•M¹A?Ô€tI9ržßXWç};$OáJ¯N™š™>ÊÅ„…$JûBáŸ+# àö‹üáÚ#ãÃjÙöûlQz®ÙQ'ÛJj…î ¸ò$Ÿ>_½À­ëC¹VŒö!r’:Q³…v"ÂX˜xFã¿ÑÑg×XÆ\Mø¥SÕÀ¢w¡&-¥6Ú xÒÖ²P:îŒ:z×^RÆ~A5jÊLd*›vî™d“ |gÓç`C×5쇅uJàQÇJîȯSfì=á‘›û–[oI7º·”ªj†ðYz®?±ñí/‹°ݲ…E÷1~à0” Œ13×Ë&J($é=e¤¾Å$@žù—PR}ó4}\>_½ÐŒÀrlSÈr*œ#ASâ úÔn7FñÖpnÿkÂןü “!l†Z+ÒÈ!Ur‹Ÿ‹‹×é{´QâÊÂv÷§µKVÉ‹lIJ?•g'ÔîpqüØ™$Z¤Š~µÄM…­%÷Š˜Ðü½‚æe x“ô\ã#€·+Â÷ßBúýYºï=q,ӂɱÿzßCzý ŠÉ#‹ügÈ3Yæänu>ïe)Ý’”¨ÔWè# Ä ¡²VŽZÙž9ðJ“l…XIP.èlQW¨÷|d' £z5Ù›±‰>U¨Œ%ó«”Ëwl5°‹8Mô9 ~2Ъœ®Š?Wðy‡ì9j~—Éâ:WF™Øâß^¼ƒ—1åšMvÄŽ'Ê?¹šh-Ä#léŸu3yw°¶òW}½ûTíP)pøÉóÂ52; ÉJÞ¢)ÕþU#£YØô(³+w6âÕ‰@Lddu¾¶MÚ<Âìe9™" ޼uÈ«“"¿–çµ´ýìæ-Çàq‘åœÙEêo+[¦¹ðRI¢ÍÁÚïŒÌˆ›i¶á[®ém,ßD3Õ ˜E¯F]ñEóÜh¨÷¾š¬ÿ룄[ÕÕÙ‚Nâî¨6Ÿ¥Ž­¡åƒ< uð0Lä»ÂB”’ûßiyÙ1éêw/"ÐôwÄcõ7þKxq™Í&î›nóe»½(}NPªI%–Œì®‡"¾Ä&¹¯/õd3Mm‰ ¼…èæ£yQéܳ™B5Ö'B,¹[©”ÁöÒtŸp÷s“K˜<Ünu_í8Ïl ñ!úHŒ¿,Ô5ò¡ÿ%4}ØéAÿ¬^XcR¡ÝÈá¼»‡^äÝR_qIBŽé©rŸ[b¿liàUj 8—… Ów8Fžvòô+È=î•Ë—èÐéå+FAüG³¦‚¹„pºî7ÓðÅÑYÞ ¢GGN¢íVóT¦,HâŸØå„°\H]´aJóx%ä$ptiåýæ‹_¹˜¥!éÜÄÜc ÎÞqSî#Zµh‘ãpQP*6²\˜?;£L9àwd|å^Ô±b_áú¶7õm/êé{õtׇêÙÕ»¿«¨ÕÒÖ çì7êÚÏÕÒóúJð«.]‚ߟfѤWµkây,Ù(›³3"a<’n’IÅ *ÀF|(PÕœ,•&CnÒÔîYwñ ª5Ÿ)3-Ö³ÇmÃU%&³˜*(Þѽ÷$ßRáÖtöFÑS§ dCƒ”—~Ìäëk>2 ã ú~óùjŸìò|³u}»iú.:ý$/¸#¤²ýe³2?îfÊO15¹ä Å6´©¿‘Ê#üBÿCÓè]Üp+Tö?ØþaÁÈâ‹$,å¨A„ÒGöaÇJ}ÞÅð2ÆIÄêê—Mþ_(ßÝ'ÔÊ:¸o”ƒìƒßšEê+Gl³·-;Ö|ÄûQ hKÃxب¡Ã†Sp™²øfqÙ;Û³†}æûJÒ ï"%Õ¿çÇéÝŒ¨Ú|ÁB©PP0ªï·1X7SäÉ"©š,ó(ªÊw½#¸PaíCÈy! ` IB¯Žy—ç¹-Ë7¥ók¤xÕÌ„¸§˜ŒXiÖB‘ªÓBiuûm\YÅÆÿ B~ šùW¢p‘°tNÁ†ýÆIè_y´$”õYlüB(¿Ä¦b û‹ŽÇE ˆ—kØIµB@¹PRÓÁUó¬WkK™~Bøý µ³HΰÐû¡øût¾þ¾Áó‹Î…^”Ö¯h~ß ixÀÅ¿övþåd…®¾¯ÀäVm{Œx˜… A‚Tlò`æbH6ü9SçØ2œHܲ4 [ƒ#Ž’n«h×SšÑû@,ç¿ÑuƒEÅÿ69oBJ#ÇËéÇ~ÿƒ8ôjFgýµÎwþo@Óø¬x:Àßïà›„ʪf‡.4¬ž àCmF☈R”áò’ƒ-[ ¸‚–c àÊ«]ná¡ý3¥éOTêöž/à7…&Å~Tålâ"Æ49õ(@G5z/ßbe=»–T\ÛdHÕFU‰‹œƒbWµâùnz B‡ŸÂ}ÜIO•ð6p©žfJ+Óå…ÈçµRl„. |Êj¤_bâé³ìÙj¼:Z£ãÜ*ÖÇZ嬠{-5…c.ÁáÛÚ‹_Oâ‘]¡)–}¼9žYCÁ¹}Cä-tª{(m;ÂhÎHOÑà¶ù¢’•ÆU~~-fì|艹‘-K‹ww>Ëqô÷uò”Ü¢´O¸ƒçN½¸ 8C×[º]FådžÐ[DÏ<®<à —ì@2pIªï·xªÅ"þ²‚ùZf£ø²õ¬Å—ÌµÜ ®çžЏŒ #f¬ÅÃóZ@[·ÁÛ:¤–qUÖ^iEü¦©¼Z–ÚËmJú·Ux³%.d´š«Ï#¸/,Ü:Y‡ÉgÌŽê‡bº¢;‹Øméþ#’Z <£ì‡V´ø×ß «_j°É°¯Ô‰mç„öHI£ù::ï¨:±>øfÄØ×ˆ‹O¯¿Dƒ[2G«öj;§§…’h_ —”“7¦5ȳM€& {Xf5ý~ô‹ˆGÙYUÞbŸûÈt NÙÃï¢)´e|òk..=}“bZêNëïlDÐ2‰jo˜œëhPŽÛÿ3}ç”vQåS nò÷˜„¢´²ÖT×Ͱž;Ý“¨IeAÈj«'U­F²²Í›;B=E‚H‰GÕþzÑÕüØD— ‡%+Ë/§>|®ÑT\ßíeµ>Iž©´ ˜i²Ôàè™÷CöìT`æÂŠI;æ•D^øÒ¢#Të‹ Ôîä›w(Œ ?‹êSôÁáС0*!^š¾>›>ªeiî4›ÃØÖr™svÛ‰ž* ë]Ö¶ð²+7G Î7äT®x[¾15þQç<$Ûg¨<çšÞ»ÛŽKÞ¾SÚRyÐÛ3 \mµá‡&’Ý£F²™L«iy(ÛB¥ûcoþíöëÙjÆ*(»|µ[zÖÈ4°­s;VŠÍ,æ%•Šd}@7I¾^Ï“ û¥–ZC¿™×ñÆ+¯*×HýÄßœÈÊ]Ì'õÅë-Xé ¤! /áÁ«b‘Ürt­SƵÐÛýo"G…wMïàqãùp¶h¥Æ„²AFÂ\àM£©#Bóâ_ÉLZkéÖ_}ûk9›ƒ‡ÌLæîˆ4ÜjN]ª®0õei6îƒ<¿—µŽŠÙèφžBiõvg1…uEˆ—š,?终ïÖß鞊s²`ÐÐÙ¨œ?¯V8þsáÿÃÔõ¬¬ŽíŠž(½˜°—áé}ô¦7 'ÉR ÌÙOÜôPÅÜÚ™àŒªÇÓú»IUãšÅÍþJaØáÜhÕô?ñþg¢, I¾‡¨TêÒÞ~Æp÷bÉ}HvàK"fÍ·î¢|ŒÝÿ~ã=ƒ’;”NVæ~·bküÏ$3ŒÍùÿÖ´;*?lîÊ›1ÅYÜ¡$ÌAPÛûk“®*>=³?™•hƇ¯¯M-XÞ˜-åœr ´ÉG´ÏåRÄ\p Ááò˜àìÀ0u˜#=´š½¬š¬ÈÚ@€§Ñqƒ«Æ–6ýeÁù‘!Ê SB\\?RN¼†%¡¯ ˜c™ p:ul,,ú¼p®Ãgöç臺O„”‹ò sÅž)_ ûeB÷l¶²Ìãr¨),DÆ_.nCÔ0¸|±ïkð—âÛ˜3k÷Œ%ÇÂÆ2ÆO<¹šÏU¿Ð¿¤J-ÓpÐË$ŸÀ`¡6ì…Íÿ‚fû¹•€kS%7çÿV=›h@Žóï®;Ã߯I-¦±|–M•¯„£^ñl1=ÿ%¯˜²]W)œ¨,Ìm¥ÙL”„3"ØD³èlî…·ìJzZÍä¨.Òªñ€L;B¼:ÜÉRÞcK -ì$"Õ•¾/S‡%þ¯äM°iî™æiÜo#(oF6ØúX©u®óÇœ8â–<šøgnŠbâù¼[§¿t¿Þ.e±!=¤ÎeÝŸjvl8sïÄ“\Z'¥`ˆ9†ÛsŒq1<.œ=$y×äæ|Å/×!ºkZ?GŒGX`±L@ÖaØÊ©_ô6(ÛV—KÞ‹¿–äEŒ»¡’Fªæü¢He2=Ï¡#f(05žlôë[#žåªª{Ñ@¬ùsøDsël,5ÝœÖèè„vò]>ÓÜ,—åõÖäÕߦç¹Kè—DS $9]CâAM`ð}úñX댬£éR6€Ù½Inegç“ úþsMVë¹þ¬\¢ý4:uv*­NN(lâ/Ê7#‡…1"Ø,»Þ÷ªäâêû\[´#Ç”Àt(“U·E™ëóS(ƒÀÝþ#-,µò ƒ_—ªc×zÈ’ÓwqK‘ݤ˜£f`ùSÇúÒüßœ¾£m&šÍ$Œ‹" O‚±@ÕFšâ2­ž“ VLþbQÞ;$F{NS Måí»H–:wI›TŸzÉ\Fb¨$OÈA­ysŸpí4ôƒvK³°rÖÎó(ÒõV=­r‡–Yf®¨l.™—.óF+6|G&+]7 DHÑó£4!ê®ñŸéS«ç—­eøWR ó^Û…¢¿Æà¯¶kÕ•jf+2CWjÌIÃ#g't˳)U[·ßçö©mŽûÁ/’fßžøû.K×i¡ùljF"'ÖGáŒ5ç2OÕ¡ ¦i‰´Óç€âhÝøDÆÌ.§¯&¶su)”âÏCÐeøóÂA‡ªX®¤Ûû×ôwoýœN7MkÙ•8Ïvb æ•§Þ,dï¼3‹Ìeª©Üàš)*ØL⾚¸u7êHð¨Kª*"òC´¤YŠ´ž4°RQ'ŽÐK¶A†tß9D"’4wÚSmýyä'Õž~Ë {ÑqÏFÓpí¤vü»ë&ã¨^ [úéÛ.¬~Öò‰°>rÁ%A7.ÔIg¡E… Ñ-–êÛC8j'ÜŒŸc°_3Øß‹Ò»`xeâSFx ÏÁଃÁM|O3Ž÷(!ÆóT’§²j[‹¶q’Û'*íô¸bµ¶@_…±Ô)|ŽtØì†`>—"Õ+ó>?”Ëü¥][F^ÑÕ2¢´†Ÿ`‹ä‡Î.2@4m NOjA<²ÅîÔŒˆ/K-cжO÷~ÛÞ-¤÷.YÂ`Ëx7lfÂúSókuŽÐdýÑ–vHÐÚ$"³ÕòÚj‰Éô€ð*¦.gIÝïyƒ-ÇØïHÚPZb>jQlüL ”N‹bjW†%h:[§«¼kQü~ê™~żӮx”è¹DóS‹6[´ïIP£´©nœã›§Ô¿›N-S1°ƒrÞ¬ÖibÓ,É Ya¯m/ñðSĬRßÉsA:\Ø«mX怰úŸpÇ€Œþ OMLBLâêýó/ñÖ}³>ŒÓ>ÐLœueKç¸löɰ½‘Aϲ.¦ótF6`„>$šï³^ÈµßµŽšáPnV¤÷b™Úä…ИvÖ( ’v‹Ý¼¦óÛÃæà:yÜb„WÃö#¥T¬íïEFG’Uñðt bùl1g6é4õJO±_Á:Ó=¹¡™†WV.Éà ˆ“yhbþ-‰ÍRU cÓ¤ôÐjªtgⶃH©ª3ëÐ*òÅîºá³H[Øè·ß{Äýé>oìFÜ~ êÏ.v1‘qlîdÀRM†úVþ>±ù(š€‹²êÕÌÜÅ[Nǵ÷iW,ŽïŒf‘ßf3Ö㩘٧¾l‹4TúRçë œÈs£ìŽ^‘ÝC—uÑQ[–“’X;-°iáM†¨ƒw!–ý"øÂód¹LŠ·‚Èëëp~íŸqTêi†lh QâqUZÎN:88çÕ•gßh,†_ßržž7í­)ëÀLmPYóPXµÃõ“*µnÂT¡ZŠÀ’¼î E³[òó¾è|-_T#2Wèi¥™z‘Èm圹²D¢*àíÊ‹UTÖzÉ_v(V_Å@–Ò½œÿA¾¢žî«8¨¡Èk,´|lÕg¦}Ðdÿ ¹\öVÚ´X:)2; toàvWjb':é´ ô }’):Y:€:¯+æ®5èÙ»J\IÜëA çîû˜ßÂw]I`QÛm’›ÃÖ9|nÿFËßõÌÓìe ”ˆnl)âèGW–†RŸž™È¿æ%¶š}ØÕòh‡lv½E3¨ÕdXq ã'A‘5&1(ótm? 3¾þÒá cõ¡`Ý/%a~O$ßóÍäÌóVôýO/äé™Msõ+SèÌ%ýH—G{bdZü™BÞvd²ëÂŒæ­ZÛZ!XäƘ¶€ñ¶¿‘…^ÔÙ{e÷¸AY\¿¨jnÚÎVW;³áL_Mk”„Áì½À¶w–9@\Eáryðß—K—Þx¬ÌÕHîŸzI]‘Z—¿)Ÿk‹.ƒ!ç C±9 \ªŽ ó›·ÍMU›GOŒý£mô }ŸQö.SÔpçPˆÎ_3}ÿO»½â-”°6ò“#ÿw«ˆ.µÕä™z¼‘[vo—Î}šAø¡{¸ „͇¦ü" Dž&?0\\GÝßm]⢡E?Ír c¶%)"‘¹!„¥þu#Zh"ëd,Š=btø±àlÎ[„o@¥™44п~÷I9Pc3Ìc˜Ó#9T‹i°Zù¯` «0ŒóÐn>Â2FÎncÙ¾¹;6Íß$6ø¶ZpÁî³Â92Ff\¿ ö‚W1Ìزаløs¶3Ç;Š>T]SZ-³<Š\Œ\^ËËΔÚÑþt7w'§ÚF'Þi‚+zmËaãÛH ´K–ØÊ¿Ú³R馸µ"äa†éCxõ-vå*—ÜôáöàþúÿQÿbÖËBaAŠâ“‡V0'áµ8_õƒ½±)MñÙeÏ«ÑT‚í¤R:_¼NŒ…æÙÑô*Þ¥VâöKÏ£[Vx "VsSÊ*oé‚Á6ôü Fk/T ÂJ¯Ã¨Ñö43´€œÒ÷Il׊ìTñxj˜j¾DC†çw 7èÇ—®Äb«´ëA¤öqb†rÊ¥Ò2=†”Rª[9>ïos¦îdðU>«Ä•8D |ûêkr$ᚘ³DÍr@}Îhdþ Ô‘‹‹Gðnl›(òå+Œ¸` ¶ÖIIéyô¡íyþêE-(ŽB´G:ƒu:Í}Ôs©%Ç ”ðQ‚iÝŠùþ¬õö—‘»ÆÔ…šOÍÁë—9Ë0é0¬í_¯8¸ …MHÃH÷qÛ^¦±šm°Sö1úuëù¦ûæë…î äá/ñx:Ù¾çÅà•XeØá_a0*̵¬‹1#{EJIµyüüVÈý·¢d,׫^‹o…J]Þ`«ˆ EPMM…Ûèö,Ø&»‰&ü"Nœ„©Y Eºõt¦\¸Kódð¹ÀþߘƒŒÖ_”°í}ž/ì=%y‹uþ6HŒYɼw΢›®ŽXŸœjÙ?5@§’ ¦= u\ò¸»€+wd¨½oÒ6iŽÀîʦ~ó=9)r‡5±ÿÙic09ä jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ ã"ÿ“ÏÂô”¡»É¬ §L|FJÙ$LŒÒ\"‚‹¢áÂ'wÁ@¤W=µªÀ¿ X=‹{R½Š‰òHH䆳艠 "×ÿ4BÃË\ƒ¹¯QvkD›®»– N¦%Ëf‡ôhû¤ g¶ÑòL¯Ñ—á5Ühë¾åÒ’ï#‘qXVÌpþ×å &¨um¸Y=í`0¾z<öQïžÊ5šBà¾3Êëe‰˜ì •mÆFÂÏ,C|þ#ó?«bßõ½´ ©ï¹ üNRTYÚ—íÉÁÁÕ¢l˜š‰³î©ISv–q‡£Ñ0ç\ÊØÜt¹›hÇN"9ÛÀ`ŠG»Qc×4ÇÛ^€(t÷;Hñ›|¾3­…yk9ËnO^Ù:¸?V(:éaŸèœ”¡æ0Ï8Ý›t~”ØBh¨ÜÑõÚa怃grN̳JÃy¡D/˜†H;Ã3­} 'Ì•÷V[k-Ó%iãCqË?S ù<°¿0§2A@˨ÇH6Vá-³š”Çr·¢CÄôF–)Fû€€‡!8çýõ%éõ%¸VÜ’Ħ¹­6ºÕÌ`j×¹‚ÝŠòÇc€-J¬$…Êàv1ÏÂìP>5¹h ïÙðHEí©R;«¨¿÷ìe2—HDÆ þÏl8²Ž@šy^uCɤð«µûQÍ8Õ9$‘8öô®æ¿© ê…kŸ\Iñ[‚†L‚6aŸLŸ÷¤Öh3NGȈÌnàáEµ®žÔ!ˆó©:³*¢sTÊxô_1§+Æýÿ!@gHe?X#Û°ˆµ_œKž)Óºó>÷.0|¥øUu¿\ ü|&N¨.Ì#—BXTTÈW0eBû©†'UÕDÉð£–]5Ú£ùÿ½‚AéÒW@C”0™•+êá—n}Ý,OR ±» Ô³Ö–]ì"D–-ßÁ…X~Rø* Í:-®¨¸æÂò¾4.î~¦ÿwÙ5¥²OcùwFAÕâÌ–¡å\!Ž£™{š?1-at[uð­ò—p´)(úÖáË€0ºË"ídNÞÈ©¯ŸÚëyL˜@ œ²9¨ÂMZ§ïr®ï’ ɬëke²®„2|k6ݺ<Íj8=M™ùz¸$±-Ö·?¨ÊêqQÎ,å­kÆ]”ç§9`Î@ÈÇ7nÜó§èwͨÀ Ø_:ˆ¥ß û¿—]B{%D¾FÚ7KTw/㔨[óŸQ/°ÉÁ§õQ~’CÃí¨áöÓ}´èu³WÔ~±GùúêöQÍ÷°w;6º²R2çqFÒ¶®ª+È»ª-ÖwkK0„½6CåYä{Û79*Jœ›—ÿê†M\­bw­Bœä'L2Ãz9Ú=§š|ÁcíìB䫪ä!Óp Þ¤[Ž5ÎÑuP0¿>¾7aÛW.|×q—sì€aíúù+Ü»“¢ |Q5÷ˆÂ׎“Ù¬õpºT«nY‡{ cˆ»«F¬2•[@'–°(>]œÿ$ᩳǿ/ÛX©a)¢Žë&‰xÚqÀa£Žg%à æœÝÅWp`ƒbòÂ@‘þ§:3VÂM !ËÈ4Qƨ˜š¹Õ6}´»–,ÏkuR¹zžÂÀâ®Qt´GpÝ~T@tCg½Ø‚?€²Æ]A‚{²H¾ßâQvF]J̈÷C‹wjñZø¨¸Ä>ŽÁFÎR·±j“YÛþŒ w˜QŽóº¹¬lö²?Õ¤„=%\P9tímšdÃ~jay;Kº'^ ½%Æf–Kh«ÊþX£lx¾©¨¾ àò;\á{ZèÚ¬á[f1éîž •š¤Nßy©õJÝEú¥j§ÐÐ1ÙRµi+0AÈLRЧ%äÚ žˆƒ£}‹ØCÎ)æ/ÇáSGáWCð©Ày),7kù[{KRŠ~ަó—x¤ wv .U×ñ6¼xåp&÷Éã€1k@hGG@¢殮ï•ÇNspó—$ýr‰±òuÍ$Þ.ÅÈ *ßˈo8P»W‘~Ç5`ð°5ì×Õ‹Gë<ÅŸ0ƒ«Snž˜¦©,kT#f«òFt˜¬jTŒøôuUŠ3¡rßþ”¯¶Îû¨»¬O~\«¼Coô ¿SWLŠšÄÉ(7WŸêb\îGÊLïÍ«öC×YîW7?,Uï5VéT°QÝm™0áTÅ1NG$¸¶Ì]×üõìoA7U×ùzïê.ÙV D“ø4¨†4î/«CP¢#Gç+ê®^˜üeŒ0:…Ü8çÿpE\ä³y Ø’g8T91u¤ÏD°à†ÎÊgÌÚRZ"Ÿ^ÙËé à ø2ŒF =.~Pg‰·^S·##©ÉÿcZ|òA\·‘Í,ˆxÏ2•BxޝwÓ“ãº~•UÃçZ@H2°IiP0©õ«2øjQPÅê¡Ê*ÿl,Îøìz…†>ЫnÃÂ69íVÝô’•súCœªæqx´fä]ÄkóHÉž¢ €zßQ¸‘©5ÖÈã=dûæ=»U¹ó~Љɰ"]…\v!{ñ Ân±änO lÆÄîË^ìé M©‰£¤DŠÜh ãUË``Ã}Sªé™$Ø!~‘ÏëÐ\lhƒ?ˆÍb8{k±Ø‹«˜Ž@†ÕKÄk;÷4ÎG®.™yD<}aºñ„/µ>JI"9Ü_;2Þúñ¬Pßg[ûæ“Û”ÝÛC¯_žÙ×»t‡:EˆÅ±½2QÍlVè&^Q, &Çèv„>tYJð“Ë÷ p!ZkRVfþ³œDÌ"‚æ'`¢‚Îi°C…Ž`rx¾×!0ãXðÆtƒwŸo§`‰ZQ~8ØòÃÁ» -æ•s|lÇ"³¡™ßÓ[ƒnaPº‡ óŸ3 ‹Í ÑyL(@Ý8çZ¾¯¦œ P"ÞÃHîÍ/Há‚i<§=~[(Œ!åw.‹/ýƒG¨Ï’°³è¢ÆH}^·ïqK»$uEÓœCt†º/±ô›tcð Ãíݸ}»©۹ਕyš('àn–Jrš€«ÆÆ©Í*ßû¥†ÃˆŽšÚï`mg(Ü`õ÷’‚E€_9½â·m›ª`»¥j§Mq¸kËÞöjW8ˆœ®Ð@…ôfX †¿-LGÇi¦¨¡žŠàcÙgoÌßzaö†­ûŒu,þ…[Ìá(2KÜç w^ñ”hm’ÈdýgKʭɵ5S Ç^¿ÞJõ—ùbHnUƒ¸Ú¨ .Q¿Ä?«ÐÁý@³2þ`S·Y²Tå]¬õ-¦<Çá;DB¬…d½æWnrΔ†•v¬žZaF7:ÚŒ×pÆiä çcªêµÕ‚Â$®'aH!xH8ÏÍŸ¨ÿ0íŽÆëñ[ì7S¼£húŽÝæýåq/´Å,­è&ª°c¿"qÛË,¿òڊ/>ÿ@8ÔfÌ4<ˆP.ª#ào ÃF_y‘°™ØÌÂ7ëO‰Å0?:a“šxI¯ …urZ’3Ò¾G:¥ jx°&)±¹y+r^ z ÇFS>ðû\éñ¤½;¯¾*>p&s´8ù!·³^‡W%°æ;S”<×#ôö¾ÁJÕ­Õñ˜žB*áy1†µ0Σ©u@²©Y”-Wt {kOm;-A…u>C¢Y«v/-š×ך Úw@K¸Ñbèc¾ÉŒ =sP+Fœ}‰ø-?_ÞÕ»±Vú`oºy!åTrc·Ô,V'‡§˜) šµ¼ ¿ ›bšøAÔ]ø1‡(YU€†á$x‡èöwx†ù[œ)‚êiàv*Ð+.;~a·àa/¨È—’Ð{–¸%²îíÀ9 j&yJÙÄ©ÿN­!nTƒÄO SpÎ7iDâ«pìXóõNL•) ½IÜ"6ÅÜÎÔ·í/yÛÑÚ1êëÿ0Il{ØÞðެÿ5*L:ýRæÆ?ÃýEÿRS£Ü+ß_¹ þ*Q'kýŸUväv0©­¼¨³(Î¥,«4NïŸY¼2,çƒBï9žßW‰ÀQSÊŸ†m„%¼@õØz«/[K»áy³¼“Ò‰!úfÅ<œBaÄ~é*÷³#ýVƒü²8_~sh7æ‘×?CÚƒ PdôÚhÚã*FÍ=x×±ýïê.$(_HµSù†²ó.ôœéÞ Œ .¨Ë€‹3{ì"°³ÇD§v ‰{“ê¼m‡ÕŽ ë– N8.K«bùÓÄ­cŠ:“'3Ìtæ 9Aç‰0ÿ'X™eØ»W* ÛUdu( îQÅZê‘e>ÔÏX=VSxëWaSÛoñùZpAÃd/zRöêØöŸm;"i!µ§Zf}d{š9"Ú(ÃùcýK¢îÉ%&Z‡f¹M¿+‘ßÊ(ðÞ`öÔ°ÖŒ öÇgJ§»R½o{OÐŽ±í0Åû&¢`ÊΜ™ú{hbk/¯HF{y3ánÖu+Rq꾺MN?¾zÆ·Ìë¿ÈUë¾Ø—™›¶ñ©ñ}-E2î0iH‰ù[òd¾äÅŸ(Žô´¨&XxÒ#Ö ûÍ×2ÄÌ“9ßJT¯jç 66Iáj÷ÃB´_<4ž´ç‰–¶ÿb&«ìýÖ•¼ùíQYAsÕ6ü nº÷À˱ª„­ðʲçX73’±òÔl0eÃíÚ}»WÛ®À–e¹,po뽦£¨´Nî :þxëR»Ýbo«h™@Õ˜_ÚzƒºÎtfƒ‹+üâÝ8í–ZÂvítö8An›Mp»Kå7ŠJuÔ)•î*9Ý ögÊ÷ÌQz}önn×ó±}ƒgjv—¤Kÿo½Räèà ãøN[‘ÛTO=\?XŠ»9C=±OB¬e_ldû¯ÍŒðlƨõp{­ïv ù‹€bC]O½` Šp!‹9›ªBE¿d–øú©½ú™ ŽÙ.«•,«’œ ¶ 9ÞŠ F¥Kƒý|®¶RSª’Ë<2ÓÕ)FÅæv`Lòœ„½c@«5’´#È@®å‚âÙÛ%DÐBk/Ãå'ïrÝíõ¡v ÌïÂŽ‘c¯T-®·ùºô¢fô¹»»ÀcÉnîÚöˆ ú‹o fÑ€ G-"æ½lF;0J@§0ÌÛÑz½Í¨>ݹ3'>†”#yúo{…Ù¬ªjä¼»5ؾ., úalm;~à$Úüî-™ê ëõ•¯öJ£°¼WõråœM±ÍmÞuyU.¢ÊK/ékü™‘v¬71“ Ï{뎽Rÿ?øžv³ˆU†5`zØ‘°±jÝ|¿ MoeMKië’a GPèK†ká´aLérZž ©â$ µá‚È•aA¥õä¡Ñ{?)Ü£ƒiOC˜7_¹ïÊ7i‡„Q@Qà!Ô¾º>˜ü¾5áÓ@ÿIÝ}ÒýAè ùåÑ¢)­]Ì®8ÃéÆM;˜RþªWAóôv¸ï„„¹ï°íNóg#ü€fØŒL%)gµl¸6ÀhqÀ»:à ±óð X9÷ËTRiÀ\FM F–¾d»k èc)S´Û¤å¹†:)e˲™ K×$žü|²±®f4Ä¢rÈÃ_;SÃä¯4Öý‘TPb›sp[ë{¸• H\˜u•¦çã®u¤ý° }»ÒkÖ¢ÞÔå¤ßªO& š(%«‘ÚHØ ¡êΖ®*4oHk­ßTòòq¿ð:9¶ó¬õ™—¹ð1Lò¹Iäˆí?8¯„ u‘‚Üg*¸­/kƒ®;‘a/F`e3™£ÿ?„/âmBèæ’,aŠÏÜ¡ý·!³•Z2H‘IyZJ¨Üå_8¯ì°nâ8ØÀµœÓéqãÆ5ÕÕN‰Û´On²kxôƉ[µIð•Èêâ0" ^Êæ¨™ð¿pË:צó45V#› dz·HT‚º¤x²I"­ÛrV:jv¿ÚyyTßñ¡WO›iy¥ZtäøßØ93½yo*¯pÑ5ô-Ñ>;–] QÄu&5Ê0]ö²¹W$ŽUô|w1éá#R1–[‘UÅÃ- _ñ± 0iY´úR‰òûj’!=Qž:ÍÛ“býA<΢Zˆ³Uk¶¦³»$¢.ëÆÚÊÒÞC8°§apãNä­¬>Eï':Ÿ¿6r,®hÏ Óü¤wûi;'õ£¾›7KB›ËYÎ×™\Ûöÿ=y˜1M»¬%Q¿‹]µò‘ø0LýƒÍoÛ'¿¹†àÕ=¶Q©™ÖcéåÌž•­Ð1¦é[Ùi’±¶²23CTÈq!ZÒÅ ½ç–ß!ZÀ3Zä·);]x¢Z×¾/š2zwÕðVâPžN[ÍØ;m¹æíÇ ô²ùu®½D2òµlÙ¶ÕÓ·¼›Š™(=dª0H1,÷”Âs·°ùñ ¸5¾ë!Ž7pßï½ÂtKt¿E* •5ÅQ|Úš%bxÓ™ä.h€–`(9»‡e¿s°8°nvÀ×…l"Î)´û©SºjšÎ¾ ÷Û ]J½žãµë[¶8˜HÛ|&ƒÝ_e°þ\ß9aì`U‚…Ö¸BÇn¾îÏV£€Ú‚ªÆÚ'³5ÁÄ»aíÙ«GI•Úp|æe‰Ä‰èOA­Š}3–XHžÃõeÜ£ƒ—LÍm8Ga6%qÓû>ñz9ón‹ÛŰp™ˆã¨>VÅæSF´~Ä[›zÑÍUæg 1Xñ8ÒÚ™‰heÌí칓ýÄsÄø0– Þ1¸o»~¿¶à!~iEì¶,-³ƒé®×¼µËDþãýJ·2‹?ÕALðÒ’[ñÏ…ü­üÊ‚uåðК4ÝH‹6 ¿|ØxäÌÑä|6wîMEH”Iô£´CJ¸\s™Ü~u_ܪ—à6.§¤ÚJ˜LÉI~RX“ïÒˆ•°}ÀðùDkgqöä}n29 Õg­ÔD*]µR÷ÕAekÅh̺€~«¬µ`\»„£x–ÚðfÉisî@R@ôZÙCä3õË6¡Ä¦³ ‹S>Öj µ ¦`¬‰Âh~êOöE,+Ö{Bį*Nå°ˆf¤ðOß‚CYÔ'«òÅi\{IøE©–üz3®P‹‹Æ7á¨ÌqÑm&šþ‘ÄÑfÒ§ ¯õq 2KÜÃ[ ä_í'‰JU { # Ä3X/¾\äñ×Ò9z¯øÅè½øok—h³$Ó±Žä‘ÛFÔ?š@tÉÐÙÙ0Ђӵ~̉Q[ø:š)ðƉÏ÷J bÕª%UTû™‚*RÂØÇðžt%ã(Kø­7ÙQò:Šª-%êÍïðæ@ýi¡M¹btP¨‰5o|>™49‡ëf‹Ïy*¯Nûs©jùÕ#aêÇëî-ÿOÕ9B”Ê’]欦Mù¾iþ¥‹ÝfÁìgÉt60<¨–q3…“êÜ-÷þ‰‰Œû®”Ö>c£g|†‹IJeõÝÈVaÏÝ‚+ØfM{GÀ‚­üFbí(¨.¾CF©t'>™Æðqè¥d&«mõPV|z·„ !Žç›çëãÓ ˆº,Ý•Xyf?Š)_dg¤ŒhŒ0?ØÄliJÄËÛçäfžVÚȲ…»ñ¥Î̯@ ¸r'xnœ™iß¹¡L‰5Þz™òº ®¿½~¸éO4ßUMÁÕ«wR¢¡£ø[TŸßí,õâiö«j+‡,hTíì‹ñj Övv¯¿ŽL°4º/¶;Ìž¿ìZ&¬Ïµ\gåKw—2¦kWáÔˆñ]aýz@ “ÁÕ¯nT¼ìU಩{›fTÑ‹%¯9Æ:–Þ®•i …wg5Vª@Ä‘ûôåߦ¸ A!™Qï‘UƒîH¡de¥:7çåIÛ,=`ä! ™{@x€,_7( K(ÿ8ƒ‡Î“;VξJwfWTuÌJ/Á/ÀGH.`9•ª:»¤3ŽDïCNTÆË¡sBBâ¢wÐR«ôlÉI© ÷˼!jZßlogVÈÙe1"¤{‡þOõ` 9XÉFƒÉå-µ ¹gÔQÝl@~ h$Cò©H4rÔ-¨DҀÕ)˜Ê{Š UÅk\BË-¸?ú¼ÐØ2¼ë›ð%œ…=?åëUuª®©¯ü—[°ÌÁ‘€Ÿšcè7kúS€<òX¶vTþY¥KÏíóeˆ’?æwXËÿwEZ R¼èd… üÊ5£•­¡—ÂÁàiú•‹_—¯gôE&;œQaWáÜ aŸ2ß3$}\Ý8{k n:øìs¢NcæÐ”²õv‘˜c3iç]%Xm~øÞª*shòðNEäþ®X6ÝNµ½ï b4ù4Tf0r IyáÙpÇ"¦Tì»äƒNx3“r ú+ßå"Koóèë½ß6@Ð…#b%\ g<× ø¢ûL´·¿ÊFÇÞˆœá¯óQm×âè×c²šÇï{ïŽï°p‡ˆ*¤¿›®ñyl,î†üBÞRàS-Df¦dar¥MÁGÄÄ!ŽC’aG›K…¸:5¬Å‰•n*r“ŽÊÄSxfÊð¼ÛÌ31þ}Ø,šw ÷”CÝÛΨá=ÙöyæÃUi¶D-ù“M“LÒÜ|µtH‘J„™tÆñˆá$‚h¾Wø¦Ó´ä+üøëxšu}1|UÉB€É‹ÅO}Í©â8V˜È›øaÈhr·w%¿«µŸßGc ×e]1z‹Õ¯q'qc¥£â^¥ïˆæ¯e½'‡ŒºOZ]  TÙGØ®íüœ>ܧ)ÃHŠ[/…Îÿ1!gdäç"UÜ k ÁföX3 ¬˜| _­ÔPáqHœ|t‰ÒÌ÷Éq¸z /À¸q£” ¡…·Î=(ܪüFÀåëw!ªÖoù™N{ⲃ z-æÔæ/›p©q›ž ¼Ç¨|"ìÂ1Õ(¹Í49 †šÓZ‹ľ[E˘Náß«{]Kc៵‘69í º¯¿m-„ß K$L‚¢AªþýÓõó§xÀnÏ ‹¯:ˆt”úýêÂæ¯þ\ÕZÑAKŠË£š‚I·ß¿ªÌùˆLyÙ¥‹!c½'ÔÍ®òòÔvírô×ÈA¶>r÷g-sU¨g}d2 º£Áé§\”ÿ7 =/¦MSMŒ-‡eIºp5^ÖuW¨˜«’:dÂ;gH×d9ß4óù Dv.®¬ö(ò@'E ÖXÆŸ¡°RK7Â¥½VErÙIJFilÐ.v®VË/éÿ`C|²–ÝøÓ¿]Ø©09•ç¤~ÖêyÌ”¨}Õþ[å tnR”CÅYaÖe4>s•€çüù‚ƒ€M€¼Dqn¾F¯OÎ)ï¥Ô9ÜAù&¢Ö5„:Àj͆ÈÐM"Q~>6ìÈRw³=lãËš$°æ/¢Ä!Zö…¶«8²ÛÙþ´Z%XU¢è‘…¶ –“-EmHØÏïoXÈz÷çžö…2}óòM«ÌÒ°ò«€Nno0=!þTE@_NC²Ñcå}ÄKŒhð‘$1Ì«^1%Y"öíÆŽ8é c‰â·Îã[ò!bþôš¸n“U­.´9–[\”H^ʯ¾®µHâ§ M:òÓq•ë þ~ûî/kàÑ !p‘íÍ¡ï Î (`„ÒÌ÷G7x·Ab•)‘v”ïHèḛ̂°|‘€Ü ŸGœ¬˜µÒ|¦ëQÊ~ Ó%¦*H%Ôa:.#Éd¥9cÒ­Ú+,Уà3ªÈvõ`Å“LRNQ#ºq'ÇÛù7k·é°‡UŽUù§r|ÙXÌàÈG‘3¾§¤/X6Õ_ —i.¬Ü/½p‹û»Æ ªÔÛ}»¿B=’¬AaGÈ#3µBˆ¥OGLp' ÇÄDÐ@ ÍŠ•7†Àus¢¸yŸ?°„o òX ~Döð©ŽOhøbx{ÜÓ5°øøë}½eŸÈ¸Myf­½+õ䥂F¤gqÉabi;m&Ï–Øñõ–诃Wý4‰pUv=$×Í™jÈéMTå㥶×êŧÆ,ΘòªÍ-ø=ÂÞ‚¯»Q@èÅÁü:#fz:<—"μyHåtÓî˜ÂºE¼í­M]÷´{¿>ý }8õ)&• ¹Û=äAzÕRsÉ,²C)<± ¾*hkœìdþÄOm»}"'Ôr1åX?€Â6/*9sKµ¸“IJ`Ðñÿ3 Çøæ”ª³Ý?AðºµÜ“ƒÚÛ_"j°ãÿNˆiê-ÊÌýÝ):NÅïdÆŠ9ÅEÆ"ݨ֌p€ö©›>ÒÉúdKØv4'ÊC³tÀ¬ó "Üh Æ{\Psf0 Œ¯ŸÛ%w` (@5›ÇNÊÔÂà˜/ÏN8ö!¶+–Me[[òmÙi—çô[àÈŠÅw 3q¥˜èRwz¨¿÷Ž@É6;WVMþäDœØGi’¨Z"›äBDq÷}ëÈÑ0Õ;„ðt¤ öFâAÙ›zþ—©ÀÕ êºxôb½„ÆP*="¡¦ÿ`>ãØ”6T°/Ý»éI®YæÉ)¹YÆÙbNuy½6`+å1vï2™"¼»9…ÙXÄÕdØJYZe:«älÒ<ÏIÍÃý2½dñ“º·4Óâ>9׃=qñmƒY©’*VKdØàPivg¼ 2ƒBÏ“WfÚZði>Kïå6ß6f!õÔ¥¨(Œ½LùÂs˜¤Ã¬¡˜í…ôÛJl˜,¼há†úç‘w2·T,sÆ} 'W鮫U_­u²n¤í¬ËÝnã¿ö]1+ œû"Å³ÚØÑï(2˜íP~N°?G\Ì9Æ\Tÿ,dÎp”Gˆîû­ÉÓÒ›1²…­œÌNYZ;Ûßß#zÿ`\ÏŒ#¿À9V #§«€\À…Å4í|ÍÄóU·ž0Éc– ¿ÈÙ¬¹ cÊde¨Uº ”¶‹X/Kdîùó XúC¯Fí i'vÖ?¬r‰¾7TÑí!¬ÙdDC‹P`D))4Õt¥×Ý/;ÄÆ[%å´¦Ý&à|q0ÛB\Ô™.äÈеÐF¼{KøZzˆ3‰´s®j3·š-ãæœz2xñKîa5cF+˜Â4Xr¥ÉV:ú¾¾ê±­Hº¦=™¨DYÓ:2û¡Õ=˜;¤óišè}f ”ú¯¥^ª–çéz=+Ž-®…gÛƒÜÐ Fu’¢âʵ~dEYö¸ca#'¢ac­D֣ɅW¡=mg9ÝQ‡ÞúŒYåx$­ÛàOÜÔŒ#¬+\7'ÀœÊz³òwÜwh ‘…¾pWç»Bó¾2ÂtŠAè8ójhI_x_ØnÈ“¿zÅÒÜ«XðLá‹ÒqÆò°y¶~»þÅ,ªýâÃÍê>5ºþy€äÈTÆfóâ´Ï…Ì@ÌM«?}ím—xÜ‚Mâ•ÕªÍ¥Š´1Ê–ÑÊ‹&×öãP\ááÇhrd®€Ì™/$^ì^zc—W¶ M×…Z§`­bOâ7¯Xc†×çWb“‡ê ßJ–c𳕼ò3Ñû²Ù`ÕEý”«„±bê ÏÆ6d£,29>˜Èó‘JØÛ í}FPA„¾.FÇJá˜MùqA! ¬Ë$îÈõlŠð`ï”îÔýåŽç üÇà{^I=œ¸^`Æû0£^tÝ}>£ÑÖcY–ÿz2ÁnÜ^Ê 9«pØvbÊ’B JJúnö*äj‹Í£ët$šÀ¹/?ƉB0·ÙÇLצtzœ ò—Á‡TG–øÇ¼¦¢N¾&ÄËϽ íõë§ç m6T²y§@9ï"XÜ6ÿd¯ß¶sÂTjâ4õ¢NCî.°Ymú%iÓô¾®Ïx‚´ ‰Ü_Ïä&$R‹óPíVy(Ùicœƒù"÷TîÊ’MæàsŠXþ—Ÿ–s¹Ž™û>Ô©•ó[¾lrËṞ†vmåK†ÛT¾ŠîÇ£|5¸W ‚¡^_`Ú‰~fÅJ6ÏÍp ¢€ïÓj®‡C÷kܘJ§?žNfZó%>Ç(™Mo£‚ÈTâ«è"ƒšôðÖÚîQše+Ö¬¦?õKâ>E\¢6唘 É[ùö„¨F"!Ë‘<ñ.ù˜ã`³ŒˆLU•‡—„ið ÛfIÿ}Øâézt¼Ék¾®¸ÞUÝ—‚|8=ÜtÀ†y»"eî Yo[88ã°ìÀ[dÎõ—WpBû¡TLÓÞNK~ÔýÎwÜÿC²¡;ï yšßè#-Ç™éî¿Ò¢ÂÓ*®Ç:ÒÛÆZÌ_Ÿ¯±öãH©eÚ(inÉ `\òú3zQf ‹¼Àk\ö›"õ<:½ n—)ª$¡¯\t×¼¼•5ÏÕíàGÄc: ¾[!×MŸÔ®3^nKGs²Ÿuæt´SWg…(JMâ uz€¼ó@No‡å¯ÚxëvÌ[a0<œÄß™÷ѧ`Ö yÂYW,ñ=n Î*9ü&cȼ’ôÞ ±3߯ž;°'ÅT÷v+voê8÷PTuŸ“wNGñä\¶Š!Ë& ¾>’RÐk‡œàÖWôq¦üùB¼ÃئýPˆz¨üa=üŽ©¤×ø’Zá*ºõAÑÆDãU-Ã`ºŽD⤯²Þ½¦¹"‘b¹bG|^CéØÛE*±Ÿ= u°µ&w#5K/!CÏ’ ¹ˆ6}ûØL‰Ðáf–™óú†ìN¶ÂæÀ3s»8±dïu…5-Á3ô¾Í‹€2ø%G"™Á=”=‚wfFÄÌ}°£÷p§_xf¸y|ʳ(¸¼lÿ&bbÂN6ߢ‡š‚“DgÙQÿv O³Àýõ›¬£5owW+¨GêSùO uK¯KrdBÙjÆrâ ö16Ô65™(:êÎíyFPù£žC;_åBªPi` î)W<áàïËêëùçblyƒa™©œÂr6êHw&)üŠ+€…°ü ø.:Æè9Å:g±?swOµœ1ª!Qe•ð³Q´xýz®yjK݆õNì)¸=ís6ÈT}…»1!Ì~´SIÞÁ†•9ð\ŒhìÁÌ.õ†A ,íNÊžüç8…Èk¿¦=W–¡gJŒ ]™ 6hENõ×Zú¬tO5®Úô&QÏ»êVƒñ«ûÛ&|‘fÓTÁ\b4ØÊ" OÄúºkŽXº2Ïü]¹6¬¤qo cJô‘šÁ=.Ø&ŒÔ/¶» <¦¢s§Ý@Á„oü÷ºÇf“2h÷†‘8Ø¿zˆõ:H¹³‘Û#Ô£ÜqÛUlòóóÜ+‚p&«VšÅEÌPö„Üã ª'Ä¢v™øû ’¬9Û ßcÆ“ã¥KGÏ~<Ñ3–Úm$’u1N‡õÀw_AÝìZ@7åÏÆÍ^-ÞÛ³"ý¦¬›£×°?pév[Wà‘ãØ3Ô~Þø>ìºK“æÒ‡¹ ÷AR¯#.GÚ lXóá¼Ø ôæAõ?EÉ{OÖ›*iUžROœÒû û°š  %Oß׫ W}âøë¦‡IkEÙ&@]Îr~H:c/ÅG¡ KIPp†xLçĪ˜‰›YçÛ«¸Å$±‰!z‹i @%–múã^ÒFõ+ ÷F€»ƒ­$ƒª†ZÇWá§gAeüÊi–ÇÙ$z/¢éh€|Trƪ~n¹žÉM»1YxÌ;[0ÅŸÜt'œ †¾º&Ï'GóGEÎ@¥èZÀB>v_#+æ¥è£P÷<‹*µ¨/µZðáZ•ÓM݈P2³áS ‰.»¾"®%m¨Ÿ •£:Aá—J€3ÖÌGº0סʱ´s—O¤¢îw’ã°PóLÇ IÍÅ7±?ÀOŒZ®—V:¤Z*§“P,ôþzÔî½L4ì’«© ¾ÿýÌ<£º? K ¡ ìTø kˆ,ɇÓmU‡0!¨ÝDÓÇÂÆÆ¬+£ÀòT®ÒçÅ×`ë@§ø¢1yv>ûË “TØþ΄b:¾Wå¼U€”#¼)_ëlXÑ1€Ç ëSU[꣦ ¬à•¬äæÁ[?¡ÿfÒð E¯‰À¿W¥’‰°Ä®çŒº k$E,N~j?2Ïà'ö%¡Î€}º§·þ}#*úzà-ÿyñ†…Ϙ0Î8*u÷Ñ)…,δ ãò­w;SóÜñäÓò}ä:³‘w8?rý§^-H$£wÂ/²OB/,÷šà.òû¥ï ¦¸¢ÐþaÂÒjwzÛ¹}^îâ¦ñÍ-פÆÍŸ¿%Xÿ)Æ´™c0d,xzŠpÛ;9P»`† â{¿&©¿´)ÐÿÀ©%Í W$.("ôÚ ¬C!\)s%͘øc»ù›™ÆçêIô°”© mü}Ç\¨eÚôðƒÐŠ÷^‹cÞ®A~ÐvÞá*7ùjÌ· ð¾ù-04¸Ù¼žž3îþÕ3å¿›„½ ÓNlx¯§·Úô~¡Æ…“î >àÌ6sÿw­N]n]3aY]Å”œ%mGŸíØ–“§†”!hØ Е ^¬35)Ê?ñï ˜j³Ö7þ] n')óM£¨ûâ=X²UÃiÂv‹ÀÈ÷ôõ=æöàÈ«¥ŠMé.E1¯ÔÞ"_œîIE“2çXøCµ »É«Û”ëíÀ×Ë<~û¹uN…AÑhý¾?‡ÌF&føïÕœˆâ»©Lø‘Ø×ÝÜaöZì¾çI{Û;¤ö]ÞHæk ?brÒÜ«DLÁñpZ‘œ ”üAeq˜®^ctg ‰W¨È}dõÕC‰:>ku†Ti£XêÐð}‹ÏñäoÇM-Òï›Ò/#y§)ž¡£Æ­NûT +°½€´ÏtöK—äÌ·ç«b…I‘ÀÑ®¥Y ¨aQ öU(ºÍná‹4>€˜]Is¢qÓ7¡âŽ'|O¿í/ŸÊ#q1ÊV¿ÕÁ=ŽÖQ‘ýªÄVéÍÑrò^x"Ë<)þ‡¢1)Gû~×™>žI0bÆ…ypPHLö¸kûÓ\a+ £ó¯Ž”é+x¥¦t.þ†Ëˆ7¤¶¥Ì3˜k!pÉŒ‚LË…û®.äO9OØ¡æúØ<à;r¸r¨Ì+Ù½ÉëØÄãËó~ü+÷óiÍ\¢9P£µmBáÝ, ÑWøÉÊ"à´ýeÖuN{·×ÝPr;Ó»tþ©0 Ãíï&o|P}½º€à”>CÛCŽ‚5Ó'ÑF1Š®v#O!²†² !Aئt_£nr·ÅÀ~…E¤õ)¡ŒÏ{Ç›?ñÙ†ô±@ÚuÓ‹ñL‰Y$¤¹óÁ´Êâiˆrk°…}±¼Ý&aý%;o>^ÙÔùуu0}q–˜^³|ÛFïþ 2‚ >̧UW‹‰ÑZ•´­ ×¼¡qð'ˆª¢¨f´>å¥Ün ù)<&ëxœÃТ2=³¶Äné(—³}¹f˜˜ûâ3¦³˜ãª-ê2a~ÝÙ÷Ýú \ ¬uã<©hþ[7 ¥ù_õÃH͈Ù"¹1Ð ÿlÈŒ6CŸ]´ð¸AÏ”îa?z-&e­Ýê†:ᘆUsuÉë¥2.ŸHˆò">¿‚ Xf‚2½hïï¬-ËÞÜ?ñ?‰e'ÛzlòÙ’PE^D–·9‘7Qí—ÿ>ò§EA*U‘'‰>oê/Fú ºjÖäYJâ´ ·ë·†9b¢ÿ5Øu°¿q'Œžþü¾Œ×(¬Ýü%—b»\Ðó˜¯K|ç‰ÈÀ{†È$/l{½ÐÍ{)ù†,8îÄ=\´‹?¨%6,µ*” bõ^ýhŠRföðòžÜÅ»«4©ˆÕ+¢¹ß7àüÏ1¾Hîœﱇ›jG!+xr˜ù bÑ%DÁ J^Ñ*…[þ¶Fy²?àYÓ1üﱨ[)DþŽŽ„ö{å:±†˜ùÁ0,ROõÍ\—NâSñ»à8‰B`m–4ˆ¯T 56'4%>ìn# ®Õíè:£Æ¶Õ,G¤ã>\¦,çVÔ÷&Ò¬60õáõe ½ÔêÎ¥ ½Øñ±î‰ÈÌZ«ǵ 3ªæ¢ø «•ª}iežTŽ8šÕçȇI£yŠÕƒü º”±D®å§·JÁSçXÇ2 Œ×WB9Íw‚˜Z@ éOüFH;&“šUhÙ¨ÞQ¯OnNqxl)Ÿt™…ÉthÀ}þ€ð`F’¹Ý.}'˜½ú²ç­ <½¥&eó‰å·Ï1–Ú/§˜AéþÞI$w Ѷk“*6}£xG»¾Œà!ÞmÈ8£—hEöG!ݸZç•úruÈBQÈ穚¬ýàeÆ„†+¬çƘ Û`Ò}>G$oÇ÷Cúl¢ÆAÿê’Œùj P!&“#Äm8õ-„ó¤Hõ`f3ËÜWÙl×ݬjŽ_ëÌòG¼ÄìàJ§WÔH†®QûºŸ>\¢™Xó*ŒÏUÔ¢µC`{ói™Wœ©¹¢¿ƒŽ¦V¹:ã=Ð<üÅœì]Å5_r!¿bS‹(•ùAYœ:{¥÷/qh-•r •”õ1Ь‚JvB,7°w/ m-n“I\ ðáïõ\McñÌÕƒCBú+Ï£w´ç¡tzmñšŠÎ×ÜÊ«± ,»î/½æÖ·ü¯TéÎüÁ³Œ¬y´T2µÂÙ½Z·u7ÒÄHžHkdg7À›Ð /gÄ57¾[çMƒÆÓ~ÐŽê‰ØÄˆL¹ÒÜÉq,›³€ŽfB¶§ðN/¨/98‘—•gv ‰îud*àxÌ'Ôä×ï-ê ß^($\?L™$y;ôƒ–JÞïLÄ9FMÍu£p;]:Y$¤„5Õ¡Ÿ¼´œ)*8(R&LÇ«œ×!YÓwd Ø­Dë=¼Í5å•h•Ò¦éc›î1ÿƒËsá+Ì1A0`xøˆíŸ ZÞ©zÃ#¹¸ðŸóÛè1BKj×ûòeŸdJ1áY§€D<°¹9ÚqÌR›ZCXyj>R¦“µVñüíKÊô• ü<—~›DdÏ#gx{G§9˜?ÓxêìžcÃ%w&Ýj&`T5´ !²|Ü Å§þ­ÀOé<ãÆ„©zÕ¥#UK£—o·c0énÿyKpŸËhx¼“.ˆ…·Ž±× „ò1êŸÐÀP5¶´uè¡ÿzAÞ+SBEÚ¿Kã^Yoä&Ó #!/l  r,–¿fµ*«ú/h_°úØåÔ"_½c(¨rÊù¶²N2VJ“¹±K3ÆõÃ'ì,¼ S¼ÈEf#…Ó-zm¡e0@)Ã+°™3ša'¢QÔ˜XC`@©Åæ;6^1,²îâæ\ î¡ÏòŽˆÉ$L(5HHáE±vÓÂýO$åÛˆê>f¤óÆÌ¢ugém{6™Å²lãøv™}¾†ßÃÑ6û}°ý½š~Þö¯«Ð¶ú»ÕÂú»ý½ÕßW —íïpÁÑb§þ6% ¡hçå jm8M@#€Þr ¼ý÷×sÂ}:ÓÁâÃ[¡Cİ-¬OæQ¬üïµplƒµø@9Ô/©‡O Ô¸š„Ô¥‚)uCo®¾×¤j‡×=f¼uGÔô?ÒÒÕiú±ÚR.†(Ta¹Â@£« Ó¤×á1æÈ Û=AÉÊÂ8ˆ?;Œž’'jï7¾-3[M;b­ÅU£CeÊÒµ†/†Œò uUÉ‘Žr¹˜<ݯ´YŠ0½ª}Lž30û£(CgÑŠöz÷“6iÓô])¿9É"Ðð_øÍmE\?ËâOO„y­ŸlØõ= Á#(L§:÷zìÄé7Æò¬O¢²êqf‚˜¹,ÓL¡å¼uÃc˜È{t‘Báì’õ¦73É]‹OØöÑ<^$_+z”ö­ìÑ 9÷R¿áƒÍÑkj2zÑJ"“²<»ºÖ›óÏ#7©iç!ö‘b¿SüÑn¼™ÝÞtj&Ù6N¤|K›]Q¸´¼{9|!­ÃRY[¥š£\…5ïüÿ]Ȩ÷»HÅÈ ¤˜i'2e²'—ªø9F¡óF°šjƒŸÊçd‚ƒ çÓ´ ¹R×uâµ ÀÏ ˜ 'ç ê(ÎÏ‚”S˜’…„EåCœ!¸úXÙHXí ¨=¯JªÈ&‹®²ë^ó Y¸P™Xþ|g:5+ðìÉû´¾ŸA–F,s…`€dIùâ›õRè—¸IˆuE `9©l|ìÿc3vy‘˜äA:¸Ç¦—|€zh~eV!ÙÝe,p¥cTé†úoäýåÄà-vÃi ®m’%¬ìÔGÌ’¾!É ‹­œUê«Ëö%@3k} ßö”ôßĪzÂ|6&Ÿ¾›Òí ïpŽ_Îâf^|É ~9¾Ž ?Ø«IC. o` ˆ#IËy d£‰ ·lˆ}@k&¬aYæò{5‰}á;Pí/’:†×À—™Õ³çµvתÓÖà:ÚA‰ÒZ DðÍ@ÒHº™ÎdzbXDÖÍ¥2³¤ÌuÖï.éx~¿°^2w4‡†?Ë­p³‚vK§€ý"‹réb ‡ç¯˜>€ Ž4)Ñ ÿ‚ŸaÞ@sd`jZ[qDï^Qjo+¡Ði¤Ë¤ø ,R2ÁpC ðއτeÜì"Çœ·5‰©cºª#ΧŒ7+1“©ÀqGf4î“CŒ´\%-ô[ÕÍn¡ ­Àð+ÿ<”–)ÙwGªfT†ÿ;U$uá>ê_ÁäHBôÛ¬Ì~Æí<ívÆoÙ–B‚GŠ˜—/ꊺ©Ëßñ[d+1m"K½Aþ”l* —ãÎNÈD§Ã&:n$+A©a±D Ž÷UnÌÅÅ¥#æÕ§jù*ðî°RGþÕ’êJ²)UÂðóöÿw¦ÐæUk…Bš .l,†”à83ŒB®xWÀ1öyô kÒbç·+8ü²}P{Ž85r©tuõ!8e6Ä:r6ƒ<¹Q*XD¯åVâŠuzHª¥ŠPa8,Q§°8>±æf¾\æI“u*®˜,âZ Ó˜ð¸|“}ÃȉuŠú#.Z¶Ÿs)yMèìW¥¹+mûy‹/Ž ÷ .‚'µ éƒæ¯ádÙV_Ÿâ±rç’Î kå÷O?6K†ÚLÂÏv ön:îÂõÓ)â\î ¼ ýÛñAìŒ×;ºzï¶*—äcÃëñ&tÒψ%yCσì èåNGhk§Û¶P?¥ _ä"mÃÖML,¹¹[1VŸ:ä¡$yG@××Ä~bPƹx£X ¸õÞÚ”§[ hÚkˆÝíj§•’¦?CìmÆ”ë;Ê»aìJ„=\€óÈ×è÷HRÎ¥¡±„ué#¹ƒéºU ­ƒ@R‰ô³âÀ"¡yaåÑtOú…¬p¡Tι“øÎ‡¤¾Ì|®âÏJ HÌpãe=ˆ…T¼ƒ4‹ªWŒ¶è–dæAµ«\>ûà¨y¦¼ÌܽժŸ4à^ÀÛæm\ª÷YÞõŒ8›ÍpØÔKj»¼ä¯¤-¡^åBðd0¼pô‚qbÏ_"‚°3‚’Ê]0°YjäÂ$ŽéIñð“¾å{bjOBÔ#ë“Üq,?€'ŠF^Ÿ›î¯$íÍÍ`¯Ü€´XV¨úÅnÜÜYiUÓ©}@†ª¦\jÈjs!Ú´¿?K•ïÄDª|_óˆûç TgŽà;xÝÆ5±5wê±B·z?Í£QÏŸˆéeJeó}eÖrP‚ØDÊ’‡¡ù.ü Àm­ZÓ¿žtA¥:šµF »LËÇɽ<ÍÙìˆ,‘û뻢ëmÕD¶xË¢¶ynI[xå÷{J0mëG*ÌWVzKfµbÍ_õñsY©鵑ÊË=Ž¼Ï³q^µ ë^8#ü)dǤÿ\¢‘Ø,|“I‘§ÇÐwïÕ,JwÝܰ=Lݶéé¬ûÏ÷ô¬Œ ”–¦ÑG‹{’åËéSÏ”b‘å(Õõf(GåíðíLj-å’W˜Ù/§ÿ*ÄPaèaŒàü¡ã$)°³eç,pE.M¾­Àˆ‘wc…øèe)Øœ =œ=úáÁýž¡R¸¤=c·qÄ%_†2‡Mµ· ië뼎+@°²¨,eF’×¹ž´rZß! Ó^"ŒÖU¹†üƒ¡¾Õ\ZøaÀ~œ[£g2· ɧˆ+ÔÄ>¸ B«~بu êÀŽ …\jÝìºwùãVl´ÂFo¹ýÌ„ÄoóÏaÕ¼:´ÈíŸki# 6"ŸõÃ2×Ì(è¡¢(ê ‹aÞw€}ôv±V™wß'(Sæ¤, •´ò´of@²£On4«Ð&Ôç0Ú©NŠ[}àá€+RS êÁI hÄFìÖŸþ8UÑÂŽgA…ö.žØ6ZB?猅¯)­É¤¯ÎyùR£:aär¢§²yœ yVØ,ðŠ/Rü®À¿Ï“©EµÍ¨¿ÓŽ8¬?Ñ´«ž(ðþo\ñ>²>ó'ic?2¤‚iÓh¿› ifÎÉþÛUúG8yçY·¶àýmÑ1¤ªÊ•"½„#’@™5‘¤¹Ýu3žéæ¢bXǦõÓ•ÛW™qÔ.æßÞÀ}¼µz~K>pÿA×Çûk:t„øÞ7¸©Ã„Ÿ´yMWîÍ®Å@²+Š>” °!c☺*=ŒäK»,㿈Ýo "«¾œÂÄ6HcÅM{^s³— ‡ÂõÌGï+“Öäì~SnX˜µŽ£b¨äYóú­gø_<^OOÖeƦ£5ã›éA¤LnÆË¶9=¾+²¥ˆ¥…àHÆ9N¯Ê?½GÜ ‡ß°44Øu(ϳ­ %)s(g*„ŒÓžf=ù/e[BËF>ß-DÈU^ƒ¡šØãê&6ÝaÝ)á#é$ÕnÉ©nñåÎ<{®Ô«"ŽÈ]c¦¶°ÌÀærú=¡Ð°3 £*OÔ_'üš¨äìr´ùósY$]½$¿°ÃáZ,Ò¬©ÄZ[D}Ì#hs¬DA{¯†¤#Þ|g|Í_Âx8<÷’óûn )šEÀ¶8œÚݨ¯þŸLuÚmÚÙÌŒMq¹fœpÌù=°Ëé>Ãö&=ß­•(ÖÞ7L³º ,ÄÓt¼‡C¯©TÙ†ÙÕæ¨ W6,ññÀ ¦èòÚR¯Óñî‹Bîi1Ç-£‰a´o‚ì3wN‰¾±Äy ìƒYÏ­!¦ÿ0/î‡T¶<‘~D¬¸29Óü]… á’ËC?J ñõ:Vhí±{>K¯µ†Æsl<`yÃâo¾`á[W@è‚Çeθ8Æ*èD)}nM0k¯Ôô_Ó­R<Òk„ "ôv`:6í!î"ö¢I… åoÛ±¢ŸµªÔê© ‹¼«5µ¿ç?[*Z#-2gf¶ÿK`e¸ÂEعú¹}Šij5ÌÈ·Èíæö gpÎgÈG:ƒÿfB ´G§ÆBœúª¦®.­9žuÏ|0•vœ6x"§%•“Á¼819XñFÚk0D7Ö [/²faºÙÖOœØF„ |ÃZ$CB9Ò'Âá»÷Ysl!„}ñëΔ™ü}÷äEU®mÙHëÕiS‹Žm±JPS.è‰À?8:]ôcY,¼ U¼Ð ia’ ¨ã'L,ˆ"ð%eð36‹>íº¾@Ë iÿkþF6èHOtŠûëà‰Í•ª\J-c@ÁË>R¥ÐéÅp $ W#¡©â?_ Ì n~]+QkÆÆ~`VŠøéQ"öåùýó²Uû¹é 3˜¹€'¹Á1%ôßíLˆe+þ°å¾îø"Ýsþ?ý÷(“j?„ú%QåB(­c =4¥÷„äš™‘Œˆm=©¥››ãŸÚˆ{;EGHª–úÞr‡ÄÀÿ—ˆj4 mþŒÈyœ:36Íž/›YJ 2íWK˜,$ ü>޳/ÍS„J=íEµHlgö²¢+$̧Åe’í„;RÑw(”v¦Éle´IÛÙ1Øô»ºàÓ‡6åƒ_w´¼eâÍYØó0=³Ëìʸ¿“ª¶_ƃ(a‹ÂƒU+€ÐB¡û¼qX; e‡“Ñ…4ÍC_I>ÛN!•m3»ƒ=ïQãÁ°*©Do”çø‹5õqÙü 2tQbiߨú.ìp_™ÂÑunèom>•¬4*;ܽsÂÍá‹¥«Ø`·»65½ÒŽÔÜTGáÀÂ>'„ÎÇ Éj[)h»…©…fsFÔM¿GDWBvûŽÝAL‘pšj»[­ÇϺóóÚrèH¢Œ{æDül×ÕòôEà±ÞÔ§ —¹Ä“ ¸ éàü+Ón³ãfáOÀŒçT§½€úkóæ™=mN¦iÏÖl˜ÞuºXùjS Ií“=Ævû‡)Ù8Ô’ÊU–Y8ËÞ1î åoH-£‚>ñSrd¦qT ùü–ûQo4­Š+8ÿoß½gsV¹0»Ë ƒëD"yYê-AÌí’ްhpYM”ìÿ ÂoEÚý¾Õ—ÒDŸÄžÊGä÷ÏüЄ¯SsÿZ’X•K¦"d:b[“Uàÿ0“jJ} ÎMއCÑÛ®Þ†îA¡s?Ë8¨ú wïÇÓER°WÓÊúnþ0©2_u…Û€oÕ¤Ùûyû:/Ÿ<¢lU|ã@P£?ÆnzåàÕ×=AÜUúϯDôÉÚÍ…}ª ¯rðgœòÒA?hw`ñY*ù#9lñó€l“§:9©#ÏLè¬ éÞ™+ÝC"2½INÎlçëèû”³jXˆR¶š*;»ù˜²)Íëò=QËÿaÐ'ªík“ïhýùÖ•Úö§Dq Å¦ø05ñ·õ8§só2'’x¯­~l|¦¼áI x‡*>ÕÃ(árƒŠCkþé3c³N @+ê—†?00‡P8àÁûS‘åR @%ÔO^2žDz£ù}pGx£ÍüÁ4€ëÊ«lMÐÕ>êåE—æ[ýi×óçAð—Í>£»§òìÆ9¡È|æjÂ7‰qô¯XlRó0Ïbˆ;:‚¸NKP§c.>xšêÁùÇ5¿rÞ-¡æN–)†«k͇ï ä-ä ô%!ÐlvãL£zö”ú }¡ÞCm‰"Ï^êî'¢Exã4oZE”0’Ë«/áü6æ®0|z;UgÞ€™Žk›ÓLÏÓÐCìÓ{túrà•Ø]ŽYÉÓÚ«Ü·<»Õ?VÒ¾|kÈ:Õþ†þ±–"P¿åK e”Be½m°qXQ¹pâ¸T]ˆÆä”}ìcçÚî“üá{ÔÆÅG µ•þUO‹vštÂw˜Gƒ¯–AÊ{@G«¿9ÅʺzI¡S&l£%@s€TCÖzëG±'øZ»ÚªïŒÕË$ ~4–ö·ñ’~£»‚6õíGž—¢‡ȉL9mb$’ˆºþ {RgªÏûHR)ÍìMìíð"= €ûîu:ò5õsÉ„k/ê"ÿZ'¸¥Ôq„ƒUúNgäá<Þ1kB<-£9 L;UõÒC/‘=—4DyÉ&bÊhÂàØ>¾H׬ÒÊ1 Â>.D”Ò¥ÔI`Æ‚½uY“­yØè;Ìñ¹t(90¶ŽÙÅä“Áœ=%žNcKp3ÜiiÏ?­(î§2Ó83z“àñê ò- wTYÀÚ³?žíï7ÉÞrLÂSoõ 1˜¦T‹•ÖU“ï?¸pù\® 5üÝèW¶ ÔW†ÙCЇKI¶ï®ãLÃ+gÈËØë‹é÷`ˇ›Á-È/Ï’”Ô‰+ê3¬¸!:Fâ#5†Òó0lÞøGô‡;€mö» rØYª0Ååˆú§¦j(¶ß?Qªr ûv”“Ö¨ï~F^qÃ?kb؃ä®T'N"ˆ.Öì•’ï«|T´Xo)d€ -ÄÞ»ý#ŽŽô4IU~0N<–*S(àH{#&¯£ðñöeª·Ý% FPcòÃ÷·òn=rjÚEìíÕœê°]ó…Ê–„à›óŠ×¾ëÜçñ÷þ¥Öj´ëV!Ó–›ÿOÊÓñ«¥(cÄ'£#ÇzRþ®ÂöÄ P”ä¬ÝA*Ù ŠYÁB[/”$ƒZ^Å5,PK×ü& ççZFú0ÏÎ^ƒ Õ ¢޽u`sÂhئdbbUYê®\+5ÀU7ÍÀúÉ%½7DmG¯‰‡mÅܰb¾Ó.ã쯈c(7¼¡s9Ìa²{µTÌiå>åÛ²s£Ð¿e™ÉL×Û7¶0›Ø5Œ%Ùwã Çê~RbÊxApµ—bà ö¥TÙZgå P‰&$pͰk.û²Ì¢9rϬ óÙªÃÌоµ½ú4_ö:”î&ÓOJÑ-C–ûìI}*GHm,š&)¶5Ï+´ý/×Ôÿájeå“óI‘(Û¸DØ8AEË!¥Ëæe Ïxʓܱ!`ô2\‚¸5gÞÁšd€­ãˆ|j›BÉRèoÈ·StéwkU»ñLpÿ1‰£Œ’[vI ¬Œ o£ï8ü>uCc"‰ˆEÐÕûÄŽ¯î®x&›1eÑaXz|G‰‡ŽŸÚuè Î ›èNò½c”BçG,TýÌ ´M‚øËÌÉ…ä#eû³\;̨̯¼ÍòÎu ”œ×¸‰haU—ðõœâ@O5Ï 3dx U™’m­¿Ô<&9wA &«ìwñåØyœ×äx‰¤“ÙGMÏ}G†5©ٔ˂õ: T¿–ÕX«¿ƒ–ã7-mÞ¶ÌY”øvG¥oûGý‹‡ôN<ØI¿­^_ Îa‡v°Ôbû«ºÖ´øN8L›šÖP¸Œï£u Ú$X1Ä)BL¡xùÛÔXZ}D\€¬3 U¡‚sc ,r«eA²Så[;އwGÕÙ)ÊnèÜè·¾ö+<ˆ§ÒFî)òÀÐù7ùÁQ‚»1ëäFRÃàì}yþu<íw¨ûñvsWHïDæ ¾HÀó¯Wdï ö¦_ë 8Õ„ô“3bqWí…©æãèMÂõÁ啨º÷RÃ.ÞÊç_€ci‚‹Æd Ë «xs8S¾­¾|z“]SžüÒ«VÌ•œuÌÒ¶É'?KéàÔížT~^Ö¢c4ÑÊㆯAg€+X£ß«5¬SFÌ­OVTØd*OZƒ]&çƒXÔò õfQsh~Z_¶3#ÅŸ5nYWHa'}=â #¿pe3ibÕm¤ 1`â0DÏK<mrUFZ¬—L“jƒð„Tᥢ!E—V,cËÿ=hÉ÷7£4çÛñÉ]›J3‹IÌ÷HkÐ×SA:á“ýáýÁŠÃ)ðg‘La­ʋۧb9ðñÇTÑt3`‡W:7-ûÿn1{‚ìUòÁª¾²ùÃYÃÓ´à H¦=S ÇÆP?Ý]†Ç™ªr[½•<9Ýuka Ú7CsøãÔŽÝ:aPà(ˆez•@4ףƊ»1s€‡;ÓÄÞÞKÔ l³’Ñn/ôÐ’¹°Õ•ÀÐB¶.?¢ ùR w§^/ª=VÔ!“ñ Ô'‡NwÕØz¬ÜgÞ©EA`©¶$iú{Š:-@œ+QW–ˆÚG69ÅäƒÈ\]ðÎøË æÕwüÛ'ýsxy^™Ô¬ÒBu ?ts@Hþ-~ˆ¾«{…Òåg\‘Ž}·] ÂEb::ä„~ñ};5Á׳î¿óùEW2ÍÊ„–‰ñ¡&Ùl9å.éOªKÝ¥bKµú®¢–þ­¢zò´£>£ci´ ™À† i7… ¢”äÆl?URÙ1€áèZŸˆ;(ðk cßDý (€·d¶)BÅ rÀ{ÑŒŽÔ@â¾×rQŸ*1?rƸo¸O=ÁJà}€… ­]~ ¬â‚OWè“»\¹>]˜»‘|úAƒX’> F , ã“7 !¼=¿ÛöÛú_|Ý÷« Å4¾áöeŸ°‘cxÿàÝ‚Ñô,cÚS­1àeptïêj¶ì·%xôfÊÉÑÄ.»Ž¢]!†–9LÊWD O¨)*zw:¨Kœs^ÏO¸«-\éVùCæ¾:q "Ô«R^y1ÎR–©œ9A DÔÂ6¤/ñökÇ%ëÁÃWd Gö›;é}‚'ÛY1˜:`SÏ%¯eö]µenèĹqe\V¿ÖÄ‚uŸkyìàë@ ‚,à; 7åÚ/HÂô<0hкðªã™n‡?ËfG€’ú¡žØŽû˜F¨@“ Ü h¢z$€Éïô°%§r!>‘™L¥Í䃒D®!¶sÿvM­*³ô¨H"‹gqZIc d‹—T/üœ xG7´TwRð:OEaØN Ϲ=2DE֢ńoròÞEn]ÅÓ#îCÏè7&µ”‘Õ"»=²{ô@3JRÑÕèóOkØ"~*”’—¼iüXS^ÒM”[u`lžÔ#Ì&#&ªÞ–ÅØ:âàLõtˆT$Ë%8]C¸)3ãä¿r0‘ѬwÎ!Aqjƒ¿sÁ¤ãž†(Û £(Å´FááÓ“þËaS~ž4‘…’¿«X]à NT¿+?Rm7 V¾éb¨ däR(GÂî2 êþöbŠlŠÖ]*ZðâÚ^œÜ¬·‹åޣĤ›¹²¹)u‘¢Í€¼súm-7€fñÈ jP.Rƒ¶„—È:ÊZ=O]ê½­[Q»ì¥kºEÖ4Im‘&_Í—5§”P)©?¨el[1#¶€èqë/B^òåotÔ}ÓE‹Íþ¦ñÖúfоõ)ë—CT„ H_¤¿1ß„oº¶¨ëûœ-³1ëRp/K4S;ø-˜í.²lK¾”K^öæÎ “Ñ ±|¯s·¡É.>3CNð”9]hŠW;ÕƒŠÀ¥â÷8©'pù¯á•œ¼Ã@­?ù®OË’ЙԎ;NWg©ó>­æ8;Ö¶üû#iˆÜj<³>Öâ—á19ÿ"dZðItaÖ¿²H†ŸmL‡Yím.‰]¾èó+3Á’L°uS~±Ð‡žyÔ 2ÕÝñZ¶öë Y“Yû‰L´VŸŸquáVøk?íxnßY ÄŸ+â Ï|*ÕÖê“”ÍÝŸ1'†é§…’V›w?Å <ÒrÒ¬iÉqsèK¸ÿoåWÛ7Å;Ñ…Ý3¿nD”«¶•úÄÊ5ÁÎYŸœ4wçèM™«Ù],—LSêô£ü„¢*;ÍÿS}^Y±Ñ£GzëÙåw@'Êk‚öŸ»[{U2œkÒ.ªnu¼¿ ©½µ#0l_éÈ®Ð"Iãî÷ÈRõ…Ó¨ï6xá†|ÕÏêøZàÃ@ã}OSüüY8è q}¾O5>Ã{ý1P¼ækV. "øH‰_Ic"V$‹Å4=Á3ƒÒµK‘V6tqŒx€<î/ˆƒç¦©¤ÐxšÌŽrœîõfYâ5TæìOƒ5üI˜%]Ïޝ‹ÝBcW @‰Äï3µâÀ×i¼Þ˾² ªe8¶¹;^¬ŸŸÊÌŒŠé—ÕÙ½ø­Œ`ˆÖ«Bžñµ‹í)}È9ؽpc–Ü’®Áz|3uÒîz•28‡CÅ ÉÎ ñ–š àþ±X3ý¥E~ü+ôYðåõZ&¥€‹è8±óù€Úf²`æ+¸O¨¾x,öP³ú6úLe¨ø+[Tú&ŽSœ¿ÔY€&ú´æ]Ä ž$±pžôŽ>úwí¡º]™„<2ž¿h|š‰ÿ ɯK‚YpcéXy¢ÞDC¨÷¹%¼ßGÁ¹`ÊÛÙÔb¡¡p{·gÜ5gÅ Ü”O¢îŽà ÷ÍþáSîHL,* šrI>eªñTl¼þëþº$?6õSNE4¥Õ l´Îˆ®“ÆÅâG}} t2øÐ¹÷F÷b½'ûgVºùÔ?R.jÍÑ1/®p\‡„ê4²¨+qt8­„öLé[œ5“ t?)ÀT‰9Øj$5S¶Q†á „ÉéòM'ôdÇ)¡¤ŽOñW Ýœ„ļ°ÍÓ• ›–P¼ƒLôˆg°…»·¯&¦Â[òr„®¾ëú|ÈEûâ^-…m©'èÕî:Z”ª¤–õôÐø_`uO:»ä¾k/è¢Åj â‡9B›jKW¿jf\ צG¿ªŽJwqÜÍN4üÐÊÛOI4þ õ¼¦¹ˆ‹Z;es ì&”«›C÷Ùå=r|} L¢Ì£Úq°ú¢k”½J2LÒ û<}¢væ•sjì¹Øœ´²@š¹ÜhŠŸ½˜)Òxð&¼(ö.*0) H¥Fa…*ÏJ (°ðUÔpKNúÇ¡hÔî®§U©Âr_vSåo6zéOÊþnÝ)7Ë>km›—C«†é”%&ñ!hÃ@@Fš—@#°~Þ¼Üéoü®úûCNf25—½6”ªßÛ°»VÉiœnf™$¯d’hµ“®ñƒáʨSÂÝW× ÷Ca%¢ ØÆ@/qƒùÀ˜RTdÌ;gÎ’MàR.ÎÂîüJ„ß7 Ù?T•ZêZ:RŸá ËÆYɱVf‘\F½®8¾+°äp~R¾Z%{ΙXƒ9¤ÍèìjM€ñêÕ®-’=…ãí2×8Ö{.bÅÜ%f™­ce`^– …çAnðç¿7U¯}ƒ:‰h=^)›4ø9<ÈIü…—·:¥WK‘æ®óÓ®Ub²£¤‡ƒéz_ÌéÌÁD ~Ff¨ €kÛÜ'{Üä ©äRqà,GA ‘¡Ó¶ýQΡwÂ8½ù¬ý05¯Ý Öɸ|ª‰¶î:ÎT L• +¾§ýªˆàVÆ5¨KðÄV¿y‹WÀk÷Lu‚¸?2#u{±ý ’P¤ß[õÅGk& a‚IV›'Qwȱ¦ŽÒü_Íaøö6Ì&$cf’è\ind•‡Þ®ôße®æ^›¿”Wu3n(Jåj†à¡w©v79ñÎñô!û»÷U‰&9ñøïH­¸U‹t‚ë`‹9ß@‡Þ&W*ÁÝÜ+õ <¼’ ·Ã0}º¬9 “­ 7IÒãGßÛ?=­¦:áõ“tHÇN­ù’r²PJ‹ €­*QáÎëy‘0·²úüÅRádÇÅŠ†€'åÍ3›W”ˆQÐxņ­¹>ù¡j‚nýÚ÷ŸKî‘àç¯$gWpå¢KâXút €7ƒjæ'ë¶ŽOqÍî(r‚?– ’D=†©,m?àõ|!Òð­ºÎo™û¢ºƒ~VùöëEŠ(ä9¬à~pnë'–ŠWý6¶’5¹N5¬ŒãiJÃ„È ~hjaå!•}UýKnÜÎM¸~[ -Ñ< E÷â:v°9C+_ÿ*¼Q”fóòdA¸ Ô_íßçÄ¿yW†Ë`JÆÔp´QÛpÄ«tÌ䩤A…Àøžu¦·<¬Z¢ØÃÔÔ®H˜XÝ…[Ã<+½™ÂŸ¸(·­TË…à ZOušôœéUOº—º¾ªi+Ó}Õ€øs…¯øpË@ÛsíÙt¾bZÖî'Ö~Š:U])|VÞïžC>ñO&ìîeKøHƒ G·i§z²BájÇ]ʲù;=áB`úT/`zuÃßÒ‘˜^ê*˜¨íÜU¤xHŠU¹T–9]0¿¦[bpÙ]=†Ñ 2b_³¨SÔ¢8Š-lÇçCóP– ‰1CÚ¯ç3aŽœÚ¬5³ÎWá¿HdÛXgd޵®žø—õ[tDˆÊøPéW{­ ¿—Nzƒ§Gºo?Ô©U>•}PàçèÜ›^`"âÓ¦Éãó›=I…)LpÓ˵ ur߆ր!Ûãn1_°jx'"‘fsÌqÏMŽ/þE»èj¿ðœ\¶iNSyïØ“¿ˆêø£q¬iáì^Ó}GG‚OÑén»[R»¤/„KÊ꯬\˜]>¯,Ú¯!»ÍƒÇÿqÙ'ä:Gå­öJuÏKàŸÏ y ¦×¦Â»S " ¸”×Ð(í‚Í«@Lž)=’Þº%ö¹QÈqôvú«ÿX†âá¥Ö ]ªÞ­-…a~º*ÙYÆß ‘·ô!LM;žä¸ÑØ]ø ¤Æ¸³ùÛ"wÔˆ­‡¿p•ÛE²5Wæ!îÅ3ñ’ø$¡c—Qƒ¯„¬©³˜¼³FoÉÕÑUÏÛ«pæª I%é<Æ(ó_}_ýÝ8À²õµ÷Ý«ýIJ/{üŒ0,î–6QºðÀó*;Z Õ _ ½óõÆ™åoõŠðK¬©[èÍ~ʸ3æ[õU+yî£àÂßl?£»&ÿhAÎQ Á­›’k²>´{"Ô}×Kµ«Œ"И¦{ˆ™Çnïå/òŽé'.Íì)û‡8¬/;V[µzi~žQE<-aaÿTG“m‰Û ™ ÀúÐ;¾ÎÙ­€O•˜<ÔDw:æFÒ»—›èÛ{x(ø×é­Tÿ#‰Aï‰0©ÏC÷gLhÏú—ÿcH:¨õ~ü²±ç™"G˜O)Å‚—ôKœ‚T‚ÓæÂŸ‰S/ÖŒ “OèQáí…ÞŒÔx|gè°VÔ¦]Øú|’­½A¶×YïÏôß´’·bódúèXb¦í±-#i3™þ,Ì ™w •YäRUlÚªàÌHÐ 8X^ˆq"y™«_¤CÒŽDñzy†Ç}»É­Èä–Ní4P¼=S(‹ž •€Ù¢ü®?#AT êVvi»^”·l…\b º7gLŠÆo^;HmÄO¶œŠBÍ&"¥o$õmù¿xÊ" NôÙMkköùgúj|Þ•¥$ðø³6wÁ^sO$æ#¹DófôkW½$ ½Z'Ïå2Hr6 ·TŒ 7ô„WyB®C¦CP»îµèº5Ð×\: Ìä þ(„ÚŸMÅÐ!¹|ŒBç¼ ˆ7m|H¿t`°õôóZ´ 4Y‡L(™ÿÚ]ÎkøS¦‡´ÔU‹!\µ4k9n1_lº„\ εJ±a ”€Â=ýx›»öSs ƒ5™kµãô3„”ñݧBÐÈÇ!,ÙΓ¬Þ…¾ö˪ÐGý6¼ÁéŽÛ¨ w™›­âb›8K×L$íߨÍÊ•@FÖÆXmO*表hšqß•ÕÀ1,àè}¸À”ÆÃäJ›’"@/¨„ê1‘uÈaÌ?ç™¶Žµ âÜÝ˲ µ63:½º IUÌm¬q øÂI¡ÉÒÛ6sgPÑ™´±6qŸïùò$, ƒ{¸B¢3öã KX§(XGBÇ*í; oZÇtA1ÑP¼ùŽŠs„rMXMûw1j2ë¶|ÆŽÿO¶^ ðÜý gGÖj§/ßKã! ‚®ý†ß¼)jìÚ5÷zˆ’éxÊØQÔM•ìHÀ迌AnÓ¼¼YåÈ_ï´àÅÍ{çúç¢Ïnn)íL¿5™-õQn抟[ïÌñõ[X†NÁL:[Ê?¬ÉE$&ìN V]«ïê]Ð厱…¼Š,о5ž˜T:Íß@c†Mä†a+6GWUArÿ'£áÙ¢¼h™íx¸ü¬-òï·Ã£¬ â¡|âG»-MÖ:¡ˆÜLÁñ’Š€È aéû/n·ŽÜ‰¡t»ÔÔ¬j÷z‚c“/†ÐôÞH}‹6‚q.¤[É „}2ê ³b¥dg=&„š…ÑíÃ9„ÛYÆÕÝ7d1Ë/'°é×-ñÚÓ-·4U-U *ч÷ñdÁq‚ƒÆ[u¾j'Pð’B>þuú= é£™ôEѵü„Åtz|SÇÇúU°µ˜8ĸ‚ /Òû&:“+kÄMQ¡ ÝxÞ»€9õ°$o÷á‹8¯Ú æ¦ûüÃàÞ]¸vEã/÷aÚ*CtÍ3š ¶ãÉ~Kçÿ4ïÓ¹q3?™Ð²—6ý®<²ÇjüÕÒ–YÈõ¼¼•÷Õn üæÓ¦ÛWËQ/£-8È3éGlO¬A&Ù™Èì,'@HùÊÝ—š Ú}ŽòS‚=íI"1’jÕÅn£“aâRÂ_uÏîõÎ%OcCްÒY˜Ž¶‘€µ*>udÛƒ@Å‘œT–AÀ¹ >×ìÑ«lZ«{»Þ¾H׬’ö,0DC/o› ^ 5GhÙ uoç¬ðµ“¹P[=y{pöKGá,Í¢±#0Ø-ÁÌ{yÁÞõÀ—¶GN´KígPo~ 0z,ã$w7_•)‡ë‹±éýë­# Ã¡†í.Òäc~ÀÎ# 3L:4¸÷–'bŽ ·ì#´J¹Ü¨¨·'eß«ÞEh @LkoV´AÜ–z vÊi„ѯš‚ܰíU®&»nãðdpHÒ –ÇÏež0"¦3÷Kþ¨KäH¤zìÜ–ö8龤'÷ˆ‹‡œÏÝËT]'À©ØQõä¢â¬€ác^•Qƒ]ì .xk¼U"}ƒƒ–¸§ædg¡`Áwi© eqSëDxaf3I0Ù|¤/ýN½úçÌu-0,ñalÂ+GÕ­¦ìm;‚'oÆï“LTOâþg y¤o¡´nÐÂD!ü aôË:É•9²&óÚØZÇ ÓGž¶(†uÏa¾žÈÖÊ8º°(W4SœÇ0ëìÙ&öÌØØßÄŸ]p.š *T²¸l%··åKF"ÉYèù¤!hpð¨1g†)¬¥¬=ƃ¡ÀäÔWÉõú¡úüX÷„[H"8ÞûGW„·ö¾þ …nê(JH‹­¤ ð¯õÒƒñV‹ÝÃwÿ!×VRh¤òÕ½P›T CùµŸ·i5nL²K”º¬q£­4qg é-$onL ð2O&s&òøMÑ8®q­‚??³Â¤e“¤BÑÔ G;ÿ&¢ô %Ì1s»näëÌÂõl°ˆ¢MÁHqªÒšìä 5,ûÓdœÌClãÙV͠ᬨ»8Κi‹‘rõÒÓìV!› Ó ˜;TË]‰÷$B‰’>Î'ÛC¯ó4`x4”JçMC;¬I,Z§Rüœ’m§û‰àä¤wYbPÁQþ`Óà–ÅøƒŽãË·˜Ì‚åDÒÒkeàp(•áãH¦FìžTÑNÕ«¿íâë˜?ÉMM÷§¼ÑÓ÷™Yî–›ÉcŠ*‘‘`ø€û,Z Epµ'½\~¦ž®ñ³ÿY,†Ïíúo/¥%øéºó~?`ûŸbUŠºá§Ø íRIk.\ý¡e¼Ë#KÝW…%”(Vn/q‹ù6¡uwnE ºW Ê»¸­9s1sIé„,¶Ò___gçÜ­D1ÖðªuF Œ}EØÜΊøG¸VKiÂg^¸¡ò=Glðš;Ô#}•Ôh|@ÙïI̲5ÉtBþ´u8ã]UbÜYɉ•M"Jøƒg¯úêm ½—t\wbÂ5?AÑ‚xÉ%W9]]œWå‹ûNzGÑôùƹ‹Îù"(ôE®¢Ö¥e:jæ¼Ì0qƒP¤*CÌõ‚¯ ÌØÝ}1˜=?&ÌüùìP*…|Ç4NÈC)€ =n*‚[¦âÔ-ZÓ·Wx½ˆ'‰^&®éD“¤™ Ò°\y¾ß:—âø;6âÉð¬²,z+º"ÄÙ”-æU*vOºx”¸[í?ó•óƒsPÇv¹5¢ÏØÙ"…jL+ép–éÓÜ£–×»¤ºì1š>Ÿá1‡dÐk„6WÚ‡\ñ5Î_èwU çÒªoVˆ/N²GšÉo ‹6oÎR,œ"fq*ÌÙáï-Øl„Y•†Üy9ËåÎQúpÐ=ë€)1[ä# ¸dö8s»¯áÆ“ÎVºhLr¤Ã÷ßþJ Ô²@ݪ<à”¥ÛÙ+ÑÝ3vIˆ5N°l]ë<RpóÜB\êÕ~¤,t¡=ìÝQþl÷˜HeÑ àNàûäÖzœCÞš—‘Uä„{‹„fõÑúâÇ®ú¬“âlx´©QRîVP¸„Ûݾ›ëñ«I“S‘‹«‘r‰U™D!i*¬›êMhŸ®„FæŠÕDAÛú’ë¼oî',vŒ“¿²j àŽ>™øQñ,%Q:;;}M­Qy'“3‘Í× ç—ô$kcÂÞªä!†÷y4©'F«Ä/Ê‚/1‘©²åý5+Œþ ï…2° Xáóç"˜Ú#lßµë$ûÊbÛ†QõÛŸ¿ñ­m»¸EÁÚJ·Q«†»lõÓnž¶éZ?²c(l”ã¥ßxs{T÷Á-T·ò4n–~¼ÀƒEff¼-8Ce7¥¬¦(sƒ]‡ÔÿF½x‹L®16ØC©Æºy!ÍØb< ÂÁ^1ɽÞ .ïBm÷{Z„fáÖH¿ñ-ìdÙš¼æÍv‹ïü"¯¯GÁÕ1úœ&PÜYruqß²WŠÎלAªµ¥Ù¾†zFÆcÁŽX¤¨O-r‘¿t¸lDX¥Q%:ö1¶}\©p_däÇ1O¤¦” Ñ G›l ¤_qžw­ EW°  ÷ô‚sÕIfÃŒìù¹ã1‹3Å`0B9oNg¬@-¾YÚìäÛR4=K¹hfs»™©@ù½Ö i÷u·A‰(jZÏÀ‹oßÿhÙÆ(†­Víãþ2ÿ)Äšº™n2Ãd;ØPÞ<<–4]!s`ò\ö“/ûUh½¥<:øÞÐU¼\]¤™é(4à(¸ñØ\;ù7wDC"V´ÄOR+„uÈh.¿`µmgÀñpß=ü5rLêZD`Àˆö:1îr1 žñ¿~*n„´]UaD{4°×ú‰Àð’É£ÂGGÊÑì {­^\!±ÕH–qhiÆïþ±vÍb ¯‰HF˽û4Þê$¢GRáäbl\Û}M­ üý {ú»·Kÿ[[fõnQFίââFƺâJ"¼µ®ô?­ ¡Ò(·ãø°ÉSI?µó'ðü!›æ¨x4·ã¨Ô½—šW]÷Dñë¼€£&bQÉ! ›l·CŒŽÐ³jl]ôœ™ÈqÖñ½ h¥ ûn#u‘Ë€kù¶/ ?b“ƒD½”ÒÃKüÖï¹î…nð‡žQ΋J{®B\€aŒ¸ðàèE+*Wì@º×EúÈxLŒîë>Üçƒâ$¸ã3RäÚÞ©‚ý_šûy XwÏ^ËFÃï巬śĔܤ»l°GTØÆ+téQ¬ëw9Ëиg ú±ÿuìø!ûÅWnÖž[¡ôHpK[~E„R…“|ȱl¶|-Á}ÍÜ«|_ÎàäY‚ù…ÔO›º€}æË28’Àµ¼‘mrO„k±=q̱?L_°‰”ÚVêÀ¡|]Xb+æ–úÀнsRÉqØ©(U ºh¿dÒ`†4?“ý!sr'o \¿ˆmpgžiìC uMùYãy &”Æ'b-¦‘ËvyÎ|¿îÚVëêÊU1<‚ŽÒÙ Dà>Hj-}[à ¹—Sâk¼Úˆ›ÆdËÊS…TÈP<iȼ 2tÇ……7çA<оsCùžÓî¦ ¢¡k”4‚»[ŒÆ¨×ºê7‚00“©· By•×3'tþU@ËÐðÈHh ÓDH…g4Œâ`³d¶] Okzò‰Ú`³©ûÌøŸ5'¡Á÷² bã4ÏTZ`UÚÝu?¾{~òj ½ J­¹Ýõ{&Yã §Ú}­X5*p©Ou^‰í>¦Mpk %ЩdYhÕw¼€3Ø´(9üÆ:œHqì ½Vk?zVO¬7ßî¬[‰õ^F)ÝÅ’–”™¶·Mº:/°ycé‹O€ÛK™›Î2?‰ñî2× wË9M‡“Þĺ¹zvÅ8A‰LñÆ@^Ø(v¿²`ÃâÚ,Á”©—º}^óHoÙý°¦çÌÈU3ÃkÃ"Ù'[¦^¨›]9Ü{ˆ³¼ÏP×Í4W‹ˆXìV›Ë)°ÎdQl^KªFó¡.-Lños°þÍT·Ûº?Ð@Œà»ó÷@§žÝÒXÍŽ0j¿'Êþ£S®„ù¤\Ï$ˆöRÇqÿ=4íÁcŸ¥áøn2ƒ7ˆÓt„ ‰”4P¾Fò.–ŽØ¦»ëK¬È…ªÀ¨d•×ç.Z\hIX}/ÛÑ*JÊkŒÔ³gç@c¢˜­Úáecžáà{(’!ãA€Œ8Ü(Áž¥eù·Çw­S´q1 îöU“tq\/EÀTÊ Mn6¢[p‹~>ž&†s\Ð=4ý71¿ûzŒ†/èJþÃÉvÐ8½Š tYÚ$.£*@Pš ¨æì­£‡r¼\ÊÏ+ƒ«¡1fiÓ|Y*Ñ_:‰VþÔä´G¯îs ‘V!9º0E^ðÑUc 7' ûì>°Æ{óVaU»yqʱ ]Ìźþiaf Iœ¢:–m²ÆåëaðBÏžÏ\+fñ¯âèÝdÛªpG3 -Ik’낯ÖÛ»½i9™_p©!¢_<*GI÷r±ëìâ ïæ7©üÒI2æhÈÁ¸G3šoNbÅwn{„†0ѹ+’*àúqHõ›€#}U;omÆz˜ XF¨b¦–CÚì x‹ÒhÙ/õúk8inR._x»œ@!® É|'©& oû h/0²#ìñÃõ¥I)I²ÚTUÖ•?å,^¦?ãývŠ´!ðú@œñ]rÈÌrŒ;þßlzÖ…¢‰”3R¤Zþi¸¬:)NSJä7Õos+£ˆœ]ÿ_ yšW(›ÃZ–ŵ‡æ9 ~ 8Ö®628¹7”vø“u¼n_Rð¡ÑYv¸dn"ö¬ÏhB&8 iÆUÃÞÔç¤Þn™Ì55Á)Œ›‘ƒEãâîJy5• ™hB…oí…(±T?/éÕÉÖ)Ç«õ»&6QcfDòÆ”è0-~ÏèPÄyY!ÍRLcz8]ƉòHä|©ÌpË—­DJO¬BÛáSHù©8Åo¯êh©G‡O^Á&ŸŠR¡¼i7pŠÍYb&”º™Êh¿RÎH4"æVwübhÌ@(s?›v’“Ž_ó€—T¬Bý)ðŽ…RÔÂ0WÖ³ápçÙ,í÷M¦gVB›È 3ç3ÄÑi„®VFChÍé ¢Dñ§É<âjO² «m³O¿2é$}•º0å—j¹ÂQçÖDU#¼ ËPÊfvñN‹Œ&™mà¿l¾¯òú¸YžÖ3;¨Z(Ñürˆ—ÓÏûo%BZ™¯š wÕj‘â­öx´Ç¯›õ~B„l¾`©Zx=ÆÃ:¥Ÿ;9.:–ÎRq €})I˜"SWüèŒ^¹€Æd/ŠV2¶¤”ÒŠ?îÿ#kT˜6\ìäšM{(Â, ¤T7~ÿ…'Æ…à¦UïjULÒtͦhhcáÄ¿¯¶™ù)m\Î5à|·áŽã´d™¹F—nr'È‘ÓU?錞¿öôÕ]9:V˜qö¹yœ'ÙR`‘ ¸#Д® WÈíõË¡‚C¯¶1‘±ƒJš^Ýâ u#ïÕî0[áÍ2Àã—ÿШu2±Y—˜àû#(u¢!èð3Ç×à5`žÌ8ê·{\ç&–—À"<¡§þJ‘©"uúŽ\åäXÙ¬%(Ø)¶•;ˆÒ`—ý_¢ײÜn½ðT k×.°9áSêA‹€¡—Ô@]õS®lÚég¾Â`¡XßJrÖbtrõ76ÿ2.ÆjƒŽ¤·/î6{5¯[Ëë½Þ½œöõ,ó ˆ\+ÁÀ4ŽK2—¼±X®=ÆÈzmÀ”ÇѼçO¡æØ°ñ•´"¼ÿD¤‡TJHÝgxƒ‘æ; Ãݼr̶’-T¦se¨F ¾³ùVº¸7a宯. Ï„× ”PKÆÐ£ÉT;?ra>ú$\^Ÿ§Ÿ7Òª£@·“H¬Ñ~1hò2Gíˆ,è’a'%æ.º-Kf%+UäÜ4óƒh<ƒäo -ŠMgqéJZ”¡œÌÁ«/?¼fàwrA¥¥)=I{HúG÷ndJj’ºAß@gäÈöŒC6=ËÎ5>O‘ZÉ0â""ŸüÍ„*ŸX±#þ©¢yZoj)'üâ-‘‰Ïn úÄrÿ{i9~• ôS1¹Áìc¦1Æ‹[£ £Ìn4*X.M.„­Gž¿•„êˆa'8ÞÙ„×:i«bky§Z.y!÷;I@ÃxmëAä߯¸#€ƒù\íA >¯Îd}É$®«– Í·k,™m?ÿSl‚ÙšZ¦ùÖÓÍ©qéúÆu{L_€ÅÙKlÿ_œ"ˆ®Þ.OŒ¸€z`ÞÒãMI ¹HÅWãUC`±¼íì •g´SÏÍ’¶>ÜŠUdÌb)7%®«Ðšm¸Èwjž÷Mêl%Ô÷îP«£è±ãP¹ÓAÕ¨ŽB\ÇÈ0ì|šÑQŒ>ï™ú+×;ñ9¦ðE©˜WÐ&ÑÆ»@v7;‹üSÐ0PœVUv`Ѳ'1¢¶„«¦"r’¥t)ƒ'Ç¥›m»Šè-„ß”TÅÈ ÜNZiŒ XJk,Á†ãI@%› ¤ôq ÕÏÜà³ ®m/öïR¶ӫصÐ;ž6œ¼ÉüW’WžÎÒ´†ïóï›Å#K“±ß§68¡s·A[O,z åu»"ÃgálsJ YÛ0¯°œ9„r.Ïž+‡ã>\”þ¥ó”J‡ÔWMaF<1Ù¥Bd ŽhÂÙ:8¼²’J `˜5<\èù¨h0È#Øóû®œžß¢Š¯8Ø›ªÙî^¯S„è|ÙÈs[(¯ì*ÞP1²áRÙ’ñÆ=ö؈„_Ž2ÇcŠU oÂ-¤{èò„'/ Ml±ÅÏ ©ÆE²gµ’XˆÑ_“ß8ç©æCçÊ)Êò`6ðêè’Ñ`¥Ã…×ýÛB«8¿øßÕãT¢ÖßÈ”¼zl`Ï $ÔËõ{‡/d`¦éžÀ8üµÄêïä’pQ "Äs ÌJÉçêæ ÜÉŒÖΊb¼%yr]&äÙ°ÝÝ×(T¤Øã,;æVLX !\ ú?Î^§ µÂ›Á´Ýª,±Ò;Sð0á$cöÉ&»l«"¨´B ªáˆõ$˜íz¥T'ÔýÏ8KݰWfÅù„íwc=D$¦Ë%d˜ë¥ptÎçmOf1’»|>¤©®k—l5ÿu^ß;EÛGéL³©{^C6ƒù ê:ħ€ú©úo¸ksŸgïÙÂÄÊ‘䯬'¼#´M»žC‰ú’øÉ$ÀrßTÚiF ª¡EsF ¥éçF>K5¤†y]0t‹Å»’:89|Ã/“··Ò·wЇnÿIdàßIÔ=®°˜'üÆÊK†%¯u¯y”•_%¹÷J* y‡ ÉÇ{ܦýø;ÒdÂÕE­ëCëmþ›Equp„Cò`ó³‹;ÿI£yº?Mr?ÞèŽ=ËÈ‹zß×=_·· YIŠd‹!¶'¸Ô¸x)å)÷YÂt¼_”1go4”¤É{ÎAÞšÔõ/«;Þ™ðF†ëR`˜l>=±Žaä‚@ŽîX½;Àð¦âÞ•I:wƒæíä+œv!˜tÁµ2•£Z+Ñúp•< [Hÿg6¯vÒ$r‘jõšŒÚz3§;³­Wû…zr¢‚3ÖT?l510q}rCÔûøíý” ÃÇ|Dr.€¯¿R„-èfŠ%1Æ[ªMÁÜ<õ„'âDt5¹E£$sÞÁ™å?À7Ù®tÅ#ú1T1Û$mh8t¶ÞGësâ .Þ&DC 9¯TbcM)g^êå¨Ü"æ6óÆ[}áBSr)XøN²üàž0à{›þ™{œ¾Çe‰ û+*¢ž]¬ôš„ÚÑRVn®É9Jÿ`ÁÖi¬ v¨®¶™#`³–½OV‘4TIPn±æÂ5¨¬.Mgæ3®æžwnenTd†_NîEFâñLd|Òä1¾zŠ’6f™á­),*ä ªkÞGXÉ}'ŃBë‡ò ÝÜ»(ë…×è?%½˜í|fí}ÆõÃ㉈0wŠY,^ce@˜XíºÂc"I*HÜ RÝí©æÃáÐ\b½ª¾më1Ô©}7áæ±˜|uÁ¶N¯G5ÖZû2Æ’Š{µa¦%½µ% X¯à«Ø¹¢ÀMn{WM×Î&ÿvRú ÒÔcz5Fº.ã ä‚nûè –6ÙhOKݰKkÀ_“É΢R6\žZ9y€­Ÿ—¶ÈÿŠE'§¸Ð`3U¿·oð£!G‰ÄƒJ1"E$ew⺷SXv"^_œïŸ…å+Ê$ÔÂŽŒ-ÿoÎNVëŠuìA Ú!™6\|‡Å^ëän…¼@,4¹^%éU î_ìHH&Ÿȉ ØêÎÂZnL·bÑ+Æ06`ø]mÐÇ[øVÂ…¶›EdÎoÔP¹˜¼6EÌÜÒÁ–7$¹ê(g’”éY‹¦îõü§ïBƒü=[&¸Å6µùµÐÒàZˆÊsÂûÛ?KHka‰è@®€ucJÙUŒ6×v5ih0ê¬EmXõȬË<’©A‡–dlôZ¿«›¥M ¡‚O®&YÙnÖäÉ1@8Š;õN‚‰j²*X¸:PUÇ$ç÷]]¾³)Ü×¾Ý88ýý×}È:o@±ÜÚeêåp’ˆ»Ýgwxæ}Ì\ƒöÓ¥3O‰f]Z]™‰°›Ô¤—Cõ|þ$ÆÞW*Õ¨v³Õ]M< øôgu–­ìf:ž´Èïà€1°çŽrM¢;ÐYÃ^P×í¹÷<é?D–~(‚KÔ’UFF„|”ªi"P‰ÓªÝ낤¬ žÞßm…F×÷2WæÒ©«ZŸ×­ŠS=öCyK ¹2÷‚Av9!Îl]-cvÀJÆ ¯ì«-÷‚þ/"¯BŽ l}Ìú6LÊZÑñÝzc£ί+æëÓFÎá`wF¹ø»2)H‰çvTA¤ÉÉûq ‹Âð¤ŠSmuÆÅ¡_îõ“„–Úñ(Gº»¤Töñ aWîž°XyëE‰›#(vOî ÛñV@àåA8+Àt=V[ÏZôéø! ÖÂÒ,¬î*;¹?ˆægÃÜt:Õ´´aõåøØƒýte2ÜXã•3åhsä(‡NPêžK•IºftjZL™R#°ÍGÉ7F(Œ7W!”±r÷Ý‚.yfW×SÄçq—ß|2Ï…™uòîRߪ“¸}ö±ÄÚœh— Uü!ºF!#®•Êü{¤ƒ=#8 3èÑ×Õd—ïõxêúŠŸ(`3›i‚ÔµB-“Aõ?GÈÐêNUáÊô"8X˜é‡%Éô=},~­66&®ÔS’.&¥˜ã€&Ò³b$œL,£w@æp£0ê’iGHÍÓAnrë½´Ð0ºEX©šÂ5¹ÙO»ú—[Zsv¬®B„P¤èfùÇ»¤Ü\ê#e|—]¬íB‰Ý S``„jçœÑAÔëã1óÈSã3ÚÛSs§¶ìkSFì…¶}»®kÔO@#³yRŠdõV,â*”9–Ń›ÃÇg'2ÇÄ”3h~HÑÍÃ1üM„˜_‚v…dÔ‰4’àW­ZoQYݹ½­¦gÔR$ÇëöÛy#4«ÍðèÜF\èÜe™>°¬ðû¹ãk;Vš†×,¬¬ö`Øœƒ SI^8é ,Ðn¯'oúÅ[,Õ%–ôr¹‰¨öRYmøæO™„Ï~`ñ Òø_À-ÍwOÊà’\4Y²h\D‰he¬z%Á˜X•ºH[ «ç‰9ÊÂüU±Á?äV3ÜT¿êv#;Þ'I¦R?ìj6Ͱ²RÚ°â=¿íóMAþÉ’Ît­ëÎÇF"ÞÆî†Ásζ†*ÇŽYmÚû¼á}[_ûwšúºœ¾®«°~­¹ý[ýúº¬ý]Ma}[wûwÎúº¦¾®«êEô?«©‰|Á±E(_ò2 2l%¢þÏÔ¡€àå+OÖJMÙÉÝÃáíxø+šGÅ…LçDH¨nä”,Šˆ}ÁZã™ëä3¿¼{·6ÈZ°ðaÚÝ{)ßW팩w:wb Ù8Õ\€â•ؤ¥™‘ÀdÁËmÎc˜|36‰ §ÑPû2¤îZÛÏ£ªüôÇèåŽ.¯Ï^”\¸*³' é”wózO7qÆèæ’öø ¯#˸Ÿ‹2©AÚš:p”üàpõEˆ&É{Õ£´Òa\dÓAƒ£žúKç[#a– P­~VdJ^Rƒp!ÈF=Ê«Ž*W}(P60ã;§Ñl}˜g¯`KVÆÞ§ÿNÎ<Ôø¶…M~GLeœ?’oÞ57©®£UARÙ©öœ_vw1(™Eaƒ°[@GŒ¬RÔxyøÇ.¼>”9v?(…ó‰ð$£ï©PЊü%û¥~þpƒÅÃæE ürÒ’&Ö1ƒmâ^S;»ÞygsÛB¤ ÒÁfjc¸Kð¼·€Ó ³A=Äü³„8D bÑ(•›ïÃèÅ•ŸõÈÅÐÂÌê’4Œ‘Bþƒ6ÜåûP?Üu™#úx¼Õû¥¹0\æ´Gq<³ýÿ"%“|*F™ýxåLýž’Ä_U®ÊFêˆb„ËžLB°×°ªÇ˜yùŒzFãŸážàBðâHaìÅÈ F8xë¶­“)ƒû$Œí¼Ý©„-ƒâýL@Rö¯÷Y3ë' 8ìIl³§Ã|F ð/«U:“X §}ZRâYT:*m<»Ÿ2ë4ërxàÌH|ÍVôp¡×*÷7U‚G¬’\—ë|`.³jdÅB•çHÎŽºbºÏvêÒ›dçÍ%šÙÔs‹>.ž©Kí$õ‹yÒŽƒöM‰á9•ä¬åÆÏŒ˜£yE…Lc¾Ì;çøÈl¿h' o¬SÑ›¶rããÕl$¹¨ Pzs•3¤€ ÊU]Ó[“ÉYàºSÌëPý(Í|lÊÿ bp7.ç«Z瓎‰÷Œ"X“ˆØÁŽ´3ÿu[¡ -xoC>Ú£Vâ‘ìï)÷Ý·ÿ×õ70Q1ŠçßiÑ3.]ƒ³¹¼¯ÈÉÍ4ÿTT~â€@|Ë_²Ãt‹(¨Ÿg´²ø2µœ’ iÄ…K6`ºÍ†v1ÏÀ¬\»P[eó¨4‹ÂS`3%¬Š5ÇᓜÆj¢/Sc(D™F••¿ŒÑÝ <еavz<üªu÷ФŒfšY&t§ÊT‡ÃªßFç"å-$ÈL‘|öCªÍŒ¼­MVß_qÅ ƒÆî”ˆÅtu±Éq8œþ¬0ðªÞ˜@2vΡ…y®3ºó „ƒc£†‚éŒ=H0¯¿©õ£å½öÖbÐy÷ßîýNÞã;À†îŸáL0%ëE™Ê«Gfu×>ô)Jƒ*,”ÌÇc0z­´·'ϽØÎÌpÉtb”øã¨”õuçp¡i¹Ä€GIãóü/‹çpkó4Pp¬îHj=R—÷‡9M“]@íV%DÇq„¸í¦ñññéK×[Ç1à ÿCw=Ù!g†ÏI“»Ä¦àx9ØÕ¥;ô_¦z™^’ʌڔ&­êk9š0I½f§ÒÝÒJuöÐ$?†°îÅ…–Щ¥àeÌð HĽ²Æ\)az&þ/ݶ‰Cµ±¼î#>žgÙËÈú†pr’=î2½¦PÖGkiõ€¸ÿaYÒ‡.1þÓÙ#ñI¿ ÓD¢Wþf;Gn½–ͦ›Â{àt”õÖâ·\üâ¨Á$ê#‚¶þL÷S- äÔÎU)$’©dx¥óy˜htÒäAÖ¢—ÏÇÛyÎÔ˜¬y$U%°eKª«ãLã ]ÝÅy*Xyðsim-²±f4-}bÙk„½p·'4cùGâƒT6žÅ\òTª^Þ h ¹v’&™ÚǼ…ô¢qX%æ@[$½X( N[ì¦å’‹Ûgž6×=ߢˆ³˜´˜ÈxÔlã@I"qÅÙà·Áí»ôú5Žåêb³œí’S›Ÿ\]P'qõáŽ(3«N'ì©we—PG{YÓyë—Ï.V P’¿Ÿï8höÍ·—²¸Ã¸È³ ™Ùo#íÚ(êóïS;~âg0; %—Çû‡s¸ö–Ç ¶¯ZŒ¾Ñð¯:rÖ/æ—rø š»›WA›Rq“³ô¶`ÇÀFðQìFr4µƦ—¿¶}„yŸ÷{ŠÖJƒ—rޝkªÝ™{£W=|´¸Ûb–•›VÁ¸„*ÊYËm‰ê[Y6]žñÙЉ>ôô¿¾ˆÇ¢ P6À ênCXn ¸Ñ<_ØêH`Dä친àˆÙ‚Å­ŠùÄj.ó;…8Úi3Ÿ{ù£sÚJ+Ëe×à-"u´ˆ™Ï£ú¾…fýÚÌÏ–4Új ò¡|Û‰Id¹ˆ3ßeþŽ pS{ð|‰sŽÂK`9Ù{ }Ëì€ìq5ËvGeð†;°waÒò{‰[k=}¨ÿsnõµèú©ÜOjQ(0£7òÜ=Âdö¥+‡šÇ!ÌÌÈŽš”·zΓKÝû9'ÔI¼a]¨qê H&g<¯ ˜ö0#ôlÃgèœI)Xº`=ÜpÓžüÙ¤»MVj¼›ÞßaéI\;s™9Ý®«ÜãCT‚U^n0÷Ñ»äãmB¤ÍOMªa‰ÇJµÿ:VÓ2“üÍÚ-J¯0÷ýÜo?=ªúñJÜ„¤î( žv+)ßô-|< #}„ ÷ÚÊû¹»,ç:Ëpj¿5KØï€þRx½ÙáÎN Àõ­uæq±ÈGÏ+&83ZgKÉ'$iUtú¿/œê”›¹u>–spã½ùqá,Ô÷ %Ä%±ˆÌW$$¨NU_MVù³èöüƒænßý‘Ã)™_éyœ´Ö9úô{÷ÇH9&¯Ëýh—çÒÔXú³5j®ûÁõX Ôõ†PR(Èŵ‡í× •#pByß·CA‰Ôm±ß. XV4È-™··5¢9DåàlY,YœÙå9X÷ðÚcœ^»¤Y¶>Í9AÅ»T”Fš¦‘PǾ…À¨DÓ{‘i9][èÅ«!1böúPœ P…n€>}0¼ÑzLë ’JÜÂ%ûæÙR!Â4•Ég„qŠÍrþììH¡?EADM®(>D~a}$Ÿ8‡‰ÏÌ~ŸÅË9{r1f0¾=¤<ÒAå™L&½»ý §'(ʸ2: DŽaÓY‚åöS\õ§l_¶šÙZ5/~#0©?sú†>¥c«»ù£p)x[bÆR6å¨j“7¹ìŽ ¯VQWÕô\^òÌÚU7+ëÃõz­ŒÜtº¦Ö,)¾mt9›ÐZQôB`‹¹"~¨l‹íƒ#rÄÆ‚JîÀ'[IVÄ1ʵßàçåÜ ”~ÁVÇ^dÕY(Q ažŒ¯D !HÞ׆®•Ö%BÛ-^‡X[*„ƒ%¨K½ØÐ]«?&`cÀyâø³“‹ËìáŠ%¬^zt¤u„¨_Ó˽ó@ªž¥ÙFöF´œ±¶St5Á«ãå44³Hr¬•ì4ó¶v6zð1á7x5ªc›ØäèRŸv‹g¢Ûõw1ÒôùCÂ'æ7c™“òi "Ë_ÅþŠDãå›òK;毨Ž|âww´gÎL&Ù\˜å{ÐIš„D–SÿLßV(*Hª0KtS•ØÑbsù ¨¿·Î™ßXäÔ`±Ó溵Ž£Úd[¨ñÿ‚¸ë!‡‘D¸ˆÿUþCid>œ»ìÍÎFÞdÀ—ä–ëó†g뎀 ã‡ÕÕ¯å4Y:mq1þ¾vË,MxÒCü3ß°Æ´yÒeà ½w±˜Z,¶4­€¯‹ú¯/§ßM–'¡®æ¡!4Læ°.¨‹˜¯öP’ ÑTÏÄkçêÚþã^”ÆRžb+›âÛjzx=ž*gŸÎ½D+ŠŒ«ÿ<õ<•S'™…éD4#m2Wg˜ ƒ>Dîl\àíMÔ¡qžÐ`'9êŽvÈÐSÝm€%ê ëÙ/ÚHC5’×?‚à}iêªÝìpºòн¡÷c§åçô{FkãX5yí¥|¶øø«f¤*âµÓ÷~t\oyõI3s± Ör¹ÈýÌœwU³´)¶ÁÆú© ŒR±À~¹ÄC7·å»T×Ê·Qý£I1ÉÕŸ‚«WeŽÔC¹¼«Â ´UÂóü:5·E÷a4e’»‘=t©¬©—aÕ\9X6Œ¶?”G¶5Àµöè?ûSòWÙ8±~ûô-b,Í;ï—Ûûk¨NѦ<îHƒpÁïE ͪbˆûHÇscÚÜ…Pqvïà©IšÌbÑj{ÿN§½LV_Õ¿¢;Cˆ‘.©iu&dà ‹ –pæû3 r¹(Pt«X>³œÅ¦²ï˜°'Öú€‚XݰÏõ蟾Ž<ïÔåNºÀ“p7I¼§b¸âSFx ÏÁà­/ ç2Cµ+:d*IzÛt €w {DÎÜ^òV‚2'‚ïJGë7—ÀD Ì.VpÁ·Ž+×Ç›Ó%§ÏÒÇç‘•8&í®ÈåV¬Ô¬ºÚ‰Ÿª ìçºo˜yþº¹–j½Duv×ò×ÂA¿ö’¯PÖqu£÷­‰2 9¸07¿–Œ¡ÏEåˆ*õ[XÖDf§#‰¼H²½a¼+o¹ô>=ÙôD]X^ÔðÖ1{ Š¥×{d#<æ(<\»Óª‘ßt>ž€#©cy®[}³†ò=Ú‹_DqY÷Ûò™uÔœÛ,¼öé¼ &Ôö“ÿ ·-y,9)µ×]ÖŽ T§ Ï-ç6TaâøWz»ìËãiÒ`y†ZjM­£Zü›™Ò[ƒ-9м&k²Ç’ŽMO–¾ö´O¶÷M¤wÒ~ßX嚀<·Ç®ÁzÄ’'‹MSx¿<활dþ @+Šùy ¤µ8¦²¥ÍnwΟýk0îuÿueƒ¨ò·,ARØ ×âvÕ2D„#öìÉ€».0öÑŸ…­³§h@?+¿õÂô—àØ êÙÒzª¼ôåÉÿQÚ‰ŽJF„ËD¤¾°àBæh‘\…[$#ÉÛ ¹'åÒ¿—8ud2ÂBªúÖ÷`jÚ’)ÌòöFVÚrlW9ÕxBÞ ížÐî|™-]KÞ¢ñȇøù8›m1V2¤äB‘6±HÈ\bª¿í¯ëXàVrZ9}½(TþoY«¼¾j=jð]‘ça@‘2½hûXì°ÏÙ½ì]Œv EÝø“ÊaàWIÚ7:*ãsT@¨>"¡Eô;ºê+U÷>ûŸ÷JBjó väBÏs ’Þ¿«ÂÔü âÑ˽FboF6ZI÷ѵQbiºê&²Žç Î(îÞÙ@ë†(Âr[¼ ×d\¯™gâ"Uéê\ÁÛƒh1ég_2Òš¸Ãïηw´iÖr»bŸc CK›ûýÖ0“VÞõ}çs¼å¡„ÓhëY0Žˆiˆ•Ñ3gLªÀÖpú¸¸ëèšúW*Ãê¯w½Ÿ,*á%ÇåPꔫå[Ó¸Œtw(ŸY\ûRÛìyÏÿsúÉÿ2qêQuÈ¥É4nù%¯Ž—¶­^…ó@‹M3~*Á«k.1ÔlAå|ÙFμsv’2w¢-º‹(Áõû£¥êþ_3A”ß™G¨ÖZ9‚ÎáÆê„dô}Ô]Cfœ|(çUë™Ì±W$-ѧå7¢©‚ý¼³¹Ÿ}ïî¹Àns8üv lšˆ™_ð< CÏÒÔ5ÀQƒÇ¬ K€+qZVkVvºgzÿzNÉOŒ({ˆ1G½M ýRÄxidÖÏx%z·˜;tÍ¡Ð|3‰=òûÄwÊ2g×(Õ·ºi’zÃ@áòÃõ»}FžƒåÅ%P+Ð@*&Ç,ØÎÓÖãýä}C0ú•‘½jÅŸ{Ñ&uFDòÚæIÐÐ=G¨ r¯»%,÷Ç—XPMª¾TîÒå÷ ‚ ­øNÎý–©´»ëÞ)\2Æü›æÌ’ÐÕË”†â;ôâ8"zÒ¢âž1m„“¬<¼Ætä¥~ô? ’#”úñV¯èey/§¤¥Ü›Uª»„€›Âzð½?³šÚ–Šc vXmÏZ*U…øÈ^›:•:˜2F`üá5 ~~¤ê¤ÀÌÍ-Ó¶À\¹àF‚…Îp¥ú î4KJw0uÅœÆÑ²Ï zµ¥4}ùg¸7]¦r A "|Ú”žÕëÛÉ··¿ºm³lLúÇ¥„™eÂËe¬ŽºÞaK4Š(UkçBr—¹€r°¨Æc§Ê4çKdptZÕàlC¿¤ ¶y¥@H—;ü{@:›’!ßÃø!ä*w/ÉsŠ-Ëí;õ£¿Î$^2Ü Gà47ŸÏ‘K@st‘ˆÑGõ@ qc¼(Îc±¬SK‰À  d\8– ÿ={äÈø©‘-TÔ•¯îÆ{Öσ·Ê?‹›«ˆ'Cú7ý†’8¿±’ï£F“ŒÙ O®j×WnÎQ®èóñ¬ÛýK§c¶!‡8@Ÿ—N-ß(ˆü -'ð¬ú=U `¸‘>~Šmƒ·:òƒ]0Ópßø&{¿¼†­;OáX×—ZjÍQA'.íI×—·°äËr²àÕÕŽ#íí¼4ýó„ШmäK¹Ü„=€”R¹¨¦~%-Î>ì“;Xo—Œb¼O%=ÔŽž0Åg«†ÐÈRÐñNTÚ”²íaS„l(󧺘s £ I»*.äðvKú=¦rt±Òïôò~žôá×)¸ß¤sóQÃÚ­¢1ä (]kH'N5…’âÿ7Ôl£ÐÛ~™ RÄ]Yº)µØºPé9l=&`aˆÝ)îÛD4ãòN-;ÎaØÌ¥6¯ž…M\óIetQP{F“œ„g\kƒCHûHäÚÀi‡Ú¿}àmR2=m€GÇ®h#wðc8uE'°‹ Ȉòmõý~Þz"s¥’¶’û Ùk,e‰P71r»+yœ+'0ÎÕ×RìÓˆåýÜ]ïßì½Ùù¶›Ôk·|IÔ¸£Œ­ùÂW&N&JÝÉj¶ óüãçõéÏ«¯ïá¥ÂÄŸWzSêôFþSÿ›O«ÓŸWzŸÃk†¹GÏí6}]’ ãûM¿on¿íí{öÜóçª_W Mõz OŸmëçÚ«Ô~®ä_«E¿Wy«ºÕ}ðþÓêìK¾®»?m›}J÷Õè }^wÕjoÕfþ¯Lú»ÁýZ­ú´Kõw ú»AýW@≋½ûQœ_~~W5©OÚ{Va—I‰HþU%¢¾6Ú†¿è ¥Œnœñ˜á~à^»ŸhøbRnbÅüÆ*õiÕÎIã!Ðt°lª´ðÈáhÖ¦ø ÈQ £­GÛÎϱóæ×ˆˆk¹íCŒëו ]åGÃlßÅúöëu)EáÄQK/_EüÔô04ÏÌe³'iõôô¥0£vs£nEó‰}AY§Ò6¾BÚ>¨IrKX+u¾Œ±ô’ô[ÕJ2ík{?„Ñ‹šŠyÎ{ãÞÍ–­?^±nE¸2¸‹ei®e º¢f¸Ã÷â†;ŽûÑdô%„yvGÕŒÛWÕòCŸåÈØmαxÿ?‚ãÊÊK›'„g«,ôloP(¸jÚ™öœ²¼­W¯3ÞâÑØ´C¿É{8Q ^{•ZEŸB«QÕ©”"ÐÔăÎõ™Prcê¼ò^zF Xÿ4!7ËAE9¤uw4qïžÊã&N}”€{c å}–y‡´û"ö6Mܹ³‹QŠ®ËÏ÷w)àš ÆQÄùzcƒ‚¼/zÉÿS2UVM=ÓüÛñìG5ƒ¨Ìÿ"Ì·PœWS¶9wV®o`Ç#IUÕW;EDP s®ê¬ƒO û-³èz‰×gàÇ~…‰î>r;2åܬz6¥¼[w3NÓ}ÓÀüJž0ÖA<󸿔[Zš±ÑÍ0-§a0Ií™@᯳F»q'‹j&qf5Yà1HˆqzÝÊx­¬‘4?Ý‚ÝY®5Y…ÞT¸µ‡îÁÌ0ZOrc€Ðtœn¯/èÆ_sÐRbªüJ™ý"ðì%eã¯t)kt°xÛ£n–ÍU­o>“±Êm߉{9¹vmt8"‘íÁ/¾.5ð FË®ùõ’8 Cüýe>0“OÎÚÙ²ð ¼õâ´ÍÑÂuÛ|.åN¼(áêø¹‡õ] 0ŒõN+Á ¾­“Ñ ŒõY]ž N‰—$»=«JÆ <´_À¼ÛxVEm….錻ÑEæ ¯#9±tÙU ‹Ðq–ætÉhD«E—Ñ‘¡ã‡EubwªT†-—›k ÷3[ê]A%¦ð°_Ø]†9s“ôZ <`Üà\í}xW<ÉU­Œè°FtKp7s!,ÁÆ4”Ù7ÍD‘¥úâ›3³s¤@œï÷w’åô‘eC:W sä µÖÀiÁéY枸zζûS_eò9‰VþEB›Þ¿~iÇÞ‰A¦¦X›ë®¯Ê­eøÑ¥*ˆ9ÛÒœq7oõN¿ï z¼PÿUüy' æ„¥þ:Ö8LÐ&G¥Ž,7[mU£–´ÒR±Fß´!‘_µå·29>øS¡´Gî\.->7ÕÞ%Ô&ÙÍÓ†½K úFOc“£•^¿ unÀ˓ٺš¦3¼l’dŠJMŸkÒßYèý:ºÏ‡§`í®ìarÑH‰Yƶî%ft#-#Ïô•¬˜ï3Ã%¢4c‘O†>z]ôÜûÂ/3¢¹GÉ OT«¸‘ OTÝ–Ü÷–R½oÏKãLŒªîUu»e™þïwl•Aލ+.mÓïRÑíú¹¿ÐÂNý2wÅ+±)cÁB™4*dˆãA5[„»uyZ$—V±³å÷â7¿ë¨Dç¾¿Ø4Mžž*÷ûtb½£dR)8¨­ìö\ɨ¶A¯ÜNr‘¦m$«¡ixÀá›Vš6ãŽè¶uäyዽûu» qÿjš·&]Þ¾rćQM6 ‚Ú­›/Gh°²îA:Y,ÿØàøÁ"çjL¿”² ЇÞ1àU/ü€ À0DÕñö Ñê¶Ã㨠UIå,挺 ¿åp·QîW'Ô8ZSce^ìIJ^]t0‡3Âè’ûðãÂè,I›]Âæ#phÐ$/TR \'çÄÈr¥g•àlD~Àþ*Gœ¡2Ë Ùø÷c<‚8WR;`&ƒÞô à°¢‰2fÒm}k}!Ïj3ÝS¯0~%mÔi´ûÐC¥5À/Ã^|s¾~‡+£ÙXÛG%oVdAÑ:à§nŸŒôSMŽ'µÕœ‹É/ ³Ø£¬EO÷D ”Üœi1Ïÿz€H€³Ÿ ûw ~åŸÏ9 ¬*îÔ:o:è¶ÞœpÙ_v¾¯üÄ1¶}’spª@bˆQØF­4ÊHq{ ð¿ ð«uñ¾ïTE¿ÿ6Ê”õظEI~˜Ïö±è?ÝsÒ¿åú’Bþó+«Ðý/ŽÑ1Œ8n1$5jÈy»DtiL ð¿ ð¿Äè‘L°Ô]‰œ‹IËäÚF™zü&-Ff›ŠMÒÐNëAU%}¢œñŒÀ„´bìéÜs ŸO![vE±ÌðžbÅѪDD"9øÉ¼=—ï}„²$º>hÊÚ³9ÿë÷8>2‹ní0( —Çà>{ úJF4$êvÉ"Ùd¤ùÍ]šïÄ̰Ï(òrtíîô-Ðû‚9öž¶H®÷¼?Cº·þ6Ö4Ú²Ó†Ú³GF.§€q£ÿDÂæQë „;ú9®ò¼¸­¡š¢‰ú)Ìî¦kÿ9÷ž+èe¸)­…v&l|ÁTÌŒó’2`M¾;Á}(°§uõ#¶¸ý§¤ö{OÈæ°o{ÕàÍ éì®8 o>•BGîZ™ý[n¼¼˜]™æ¸Ã¸&wÿYýwÉa}]°·­îqÿQ¾hF§½ÇÍF»*‹òßßÔ¿»¯ú˜-¼KÂÝV(N4ŠÞN¥Ê£è°â‘ÕUÏIÎx!caL^ÜÑÅm$ôæîµ(êÙ–“cFÑ8žÓÚ‰¿¼×;2ïÉ/TℎF)œ¼1›ŒlÕC´ñÛÂap÷­§IC…¯',ßú\˜_2Ê¯ŠŸ­ªN:˜ô̈3Sw>&h—åLÚüŠ{b³ jb’~îb(ºéx…Z%Q…OäÆÌÓ°"RÒeŒÏY6!EÓEÚë,b²©œä„ÚžuçÈ[ü²ÀoÏ‘GÇÒ.:¬¦²šSgÿ@VÙîKþ·ÚYZªÃ  .Õ†UWú“òI FÞ/@¢çÇ5–<¯|~àíû»*škxjܵͅˆ;Ø>n¸Í2# é-éÍÚ)•ð#D¤¶ %‚…_~29%Î& ƽ²ÞÆ‚tr9•î0w²êe‡ß MΓ(¸ѺºE*®#mëú²ÓlÍζÿ+¶¨Á¸û'ìQl]Ї_¤Âr@’,·Âô8ÚHb#ñW1 ‘>Ï£&îÏ9Šç¨‹5YZøQPmµ6¦ôùé„ÁIŽƒ3¹à¼‹¯fJ2w¯ì¡± p'ò™_òër¤Ð_ öv‰$žØ½ÔÚµ` šòÜ“ò_gÞTÄÉw°â4 –$ᾕÓ+´AûÓµOmøŒ £ž®{ýžfVïqqËç° bj{šö¨Zå’L˜üw¼gõ:;J„e¶Ö{ö1ƒÄ¬<G×ËÎcåÂÌ7lnA‹h+»ø` Ý…¦èJÐçDSŸz׎Fö»qçÏG‡X‹úH€·,;Ie¨½T„âJKð'œ)üì£Q³™Qñk•£›¯B_"N¾ªq÷ý×·âž„ ›¯á¢x¡Ö?«ÏHËük0ñ…½¿ê{½ ø™'WwdI¯¡kh.«`HΆ>-·WgÈ™‘‡A?beÉbE†ÇB~kÔ>bS‚‘v°º‰ùï™"Áq0©)bmƒ|ÝEu`bÙßœLøŠ[WŒU¾hB/ãt¿¯¢ÎÎb5ÛÎŽY'œ´(Æv=ÊÙ$6B•ëCÕî‰È»Z!v&ï@¬ !?#¾¯?“T†¯û y79@â,\A;Œ­'=ÂÌbÂà£hçS52.œ@ë £«Ì…-&G¡ÇËÑwž‚0‹Zû—h3£¸ú<µó‚6(*• V*)ßÚÖ²æ ï¢= ÞçßŸŠ­dÉcÕßU%Ô ¤ yG7Ñ&‘·¯w÷¸¹é#ÑÓgm½Çp“ñó!:%ñÙþ¹!›þG™h>¦^BhßÿL÷Z+ÔÇ 2 K‰üzzaØÖ-=zSy4Å@•™ûükQ7'‡ äJ§¦eqO‹ï’ï`Ä`œ$W~ç™°"TèŸ~ Ù¤~Øý Î:KÓÎ|‚ºâ»Á¨”£À¹{£¯~³DtÓ¯¶Ü%Bâl>/©èªùψtnˆšÙ¢ät¡ÉÀ§õÆC‰è“8›/ºI$kAõêHÁ˘퓜Ò ȾEàéé¿•=üF5÷ªz†à¸úÄþcr0á²V"è¶ 9ý{=Z¬súrüT¹Ê.h2ä­C”)¨ïRkÙ5dòÓ–òcO²²Þ[Gü8™{ç}ÏÛyÄU§°l_fT³˜sÀ¯××Dø3:;@YYwB¹È#¬)B)àPXG?p·¹ŒBÅ€oêñE£Ä³kX>è|¼'—Žì4¸Ò!’ìe¹GzÜr?¬vUö+—Ä’d¢áºP˜ìa½Ø«fȯٮ¥ »in°î_´4Ö­¶ÂhZ§É±ƒ‡Dú*žÞ6Q‹Ûáhøï}Åh­ç­a‹a1Ïÿ,'oýëÓ ­SÆQ¤hŸM¥ [©ur÷üNÁ±z§Zã¼Péx‡7“)d(uôÂ…§Ê4è/eƒ.`Øa¤ñr¬ã†ÿ PÕ®U¿…HF09oðKÕžÚX°$Ks»žîŸ=ÿÄK¸¡œi1Ïþ€ñìdš· ÔöÝPö#˜|‹ò Â\¼²¼7î³ÜjéÔ•˜è‘JOˆß==Y³DAQ)œ@­tPáÌ}Ï´÷_ä3Òꮃ*d Uúët˜-9{Ó¡Œ3k—Ü‘D¢ã-zó>ã˜)'sBŸvlŠMš2FéÄ(7Z¸8Xn<¬“öÆæ*É ’æø‘AäC~ Þçæk{¸¶±Ž?í¡íUÒ¬‰dÖ«fìéû•þ¸/÷rüìë@ôßw¢’­[3ÆM'qjJ­*êKÉ]®%ÊÕNç}*k2¨5]£ S(Ф+EåÒãð|²í£e’SK.ÿ$pËCsé²'_ÒcOèóh\^Âüä{ ý qtÛeO"Ôè9/ÙÔ=þ¯Ô¢4õÔÄòŽ6'¹!ÄÖæ¦ý0¢ÖÍ{TÐ4¡!Àc¡þœ€˜÷œêè¦ëCÑÐbv çþ"%lç%w'Gk<@Û¾ß鋯òÆ$£ø?®ÖÄB¡sÏf®ŽÎ®ùœ gÔ]A@==‚<Å«äºæAK: …å'ªŠŽ;x‘õÓ¯ë}²k:%Ævìý32Ã'Qc$þsØù®Œ+›1»é ÄåjôXp \.;Û6H{lÿBÊ-)¨§Ÿi´ë¿ËØèYN7“ã‘E3,mµk™jð“ßR§r@ã¯á™æ/Ø´ÊšxúyoÔå6ïZJžöu%4WòÆý‡VmJ1쿈êŽ^ÆU=AïFäg¾†ÿbÈ™E‰@c>pèéòÍÿ…›ê$pꇂÎúÒlaawÔïW夕¼×ã^šƒ3Û2O`˜Y«¢¼ [E¾¿ïÖe·;40àFŽ]ç* ,È#—åÀ(©ô 1¿ÃZïëY'FnÒ‡xñú\É–íÊJC™ŒÆuÿ/èüä9¤ïM8>·Ú/ºÂ¿?ks½ˆ¤Í^D#lüuR'Õ!wÿl}KúšUmuUt)(qjÝÈíÜ:Ô1š[ÇWVÝ­5Q°D¼Q<b¬@ž{JKC]¶ÉaPF "aTšô]M?bwï¾ÈY»Uf°¼h¿…”I­g&m{T…)fÊCXŽhQ¯*£06ɉ&,¡Ï®°qµ™±ÙÊÙ†! ­—q_à,ñ jLqînÓË·ÞÅPŽ)ó­Ã¨<þ2*y¯C㲬*n×P¶]tcÃ8¡xZ¨ŸÞ}/DyÅøþ&_hAï¡pU_³lýhñw®8¿5u4ñÛ$6çíèÅq’* î@uå§À¿†µ¸vŠˆóÛcù;„OI ÃPíxÑ&9Içu6MtZƒ| ˆ»òÙ ÆÄÕÖ%¦eü=xSiQÚzHRÌÿPMì?Ûk%œlº¦iC¥õ87}[ðR—ºDm˜´Ît³NèÕ M¶ØB²poué¤ë ^TJþ&FÿY/åc}Cƒ¿r–T>ÚŒa9KÚFu5^jÆ] òj`4aÃ;sü «]r˜ÎFwàè5XpÛ@ýUfO‚l˜£âùé{ôýaÁnd‹ÎQcë°çíèiÚêHR!Z±ùš Hù&ülrR¦WÓEY}m⻫%L|V‰m:ˆÁÜŠVj6Õð­­š³‚Ú+× Sˆ‰Ò–¿«S¸ö)CÍ»ÄøŽQAÑÛ°Õÿ(>—L+©1\öþ¿´8ÎS.Y]‹kýaÌ‹%úrç4ü®ôÃÿlIÿ2v7ÉãT˜1Ü—SpqÜüפÈKE»‹¦òÂþ–|@ “a@%š2ê3Søgj<™3^œgr'³­™Ë è˜qVPd­æ¡0T“>صþ×)«ŸaÝy5Fâñ óVä§O’ãYæ+5“®_™ya9ç’â;üÑ¿ †=’­Èh®;òý:¯É¾ý cœ»Ag eýAeÌûå»4SoӔʌ>{.ðô6Q=ð¼óöAò„Ú€Uó³-ÄmØõAøÛ÷þ «Ü ‘±ð`‚ñý6Z){ì'*žÛõɽ²Å޳K— a¦ËëœÂX•s7Èß Å>à߸ Ko­ãŠTYÊ„%r„Ô3Ø9ã&Ê]Íù!$«ô÷¶¸_î\}óþ¹g)tÍ‘˜Ââ½…è‘;Æq' LuiPßV¼ñÂsˆ˜žØ{˜¹·ªö‰ÝUÛ¬²a1ûÛjÅn,hó/ºXûzÏlxa˜zùìC¬®>ŒC¸;‚¼|8„äýoMÁ`§:b¢phXDÌþ8ÖB y=É{Püqv;ÐßÑd&M$ÕO–}`Óe´fÕ´{ùD¤—抺kD©׳UØÿó {é]Z‚ji˃¤¿mM…k½¨§ØìɨBŠòFjHR=ËúJ°ÿmµ1¯,ÎÚ9ÕìÝİ÷E˜œ ‰î&Ú¡ë&WÔ†]wps\p¢1 lÌ¿N[îœ ë >ºî À«hvNž¼ÊHWaƒ¾,fª R}ëå…ì‹gs·Ê!Ó\G–ž²²Ø&Àÿ/Ñ«õïŸlüø·›hÚi‡ÖùWŒéd; «*X)]¢‘Q«Í‹ ¢>qR³–pãE…mîqZ/f´Û^½ê­àVƒ£ RH| k»i+ÍBh^›¶å…±x R LÎH.kDÆžQ¸HäÃ2G­ZgïqÈÿ`l¿Íò¿ùxiî¡Ø†é:V͇¤Î–ô]£âÞ:n²|èÿ&åšBÏ´IÕƒVì\-/7.TѺ4Dúûä™LèÅ–² ˆH{]ÁùÿR†œ'µÃêYÒ7åyë#¯¥TŒÓ.Y®>|¡ÝÉØ¦œ|KR»}¿ŠT°¼¥†lÞ6Ì0t Áàé¼ÒBuéü!uª€!&*ÿjgibàÖ¥)/ÑàWì„.Ý{µS†˜ÅäÙÿ:H&7_ô†`,fЄòì9_¦ c^¤ß(â0u‰roÙVº#ÿ|¡BF 宇ë•b\:Øhø.3¼²d“ÏcuÞÈÅ0 )–]ÆrOmôF€< €©4í,:88TÊŽçšãØçÜ¥Eܤºçäç$ã¢JU«€Â›LŽÒ%ΠÓCvíY$pº²¼ºÆ¼º[¾14žærsBy(2ÆÃ&}o!ûœlTòqÀ'Dy ½ÃúÇê<”fæeÝÌÆ¨0ޱUiûk@@ nM¨*˜ñJ9"í`,wA§CͽìQhz‹“°4€þ§`d7ŒÎ³i‹a1Ïÿ(Â?š–ëŰà±Ml«&éF=»æ ÕŽýÂï Ø!CW;-ÍŸcï72C”(½!‡Ø&…õc°PŒUhzZ<¬äµ©×$hbð“GÃZ@ 9„‰Ê¬ÔÓ+x»:¹›µyPN=¼|¯»¸G ›å3“+_.yi»ú„i· hjoq°ëýMx7)À:Äbg)_w …͇=­R¿;¦nÛÉœu7W§s©£‡pôZ)ÈàÀ¡Á•+1à쟛ogp±Þ Ì0¢~é⥴`Oà,s} ŠÚ‡¡C¤â«#ïE蕆ˆ×FÎfgÒ‚¥Föa×—>Û†/õ* z}EGçI›æL¯Ë€}IæA‡”)Œ") H?Ì©Œ]Ï?Ìs7ž´b¼“T£"iÃþc¨ä+ ‡¤&CƒGÏ‚€B(A¢̘ˆ®ÌçÜgøä/ ÙǨ Ê™ìSqAz¶‘á¿a»úX©XøØ¤„)ÍòӤ樓[|< Á9×(ͯ¢ qEO«Ù°2ÃsÕ×.hÅ9êøwa»%œi1Ïüsb ¨6\Ó8þ,RRtAÆDí\aN{šŸ¡O“tþâBpIÅõ´?K±ß,n+·¥P-# ÚIe8þm‰˜Õ9’ÇxzYBYO ëH:ƒ&…Üï±IY*÷ßšé§wÅŠÃÜ–9$ǘò€„bä yÏîSÛHPôêMfg•UI&"*p^€«^¸±˜ ™d½3öû@·x¡mUrŸVÁžÖ²­àã¶idMºgÊI˜iÁJ^ܲ"±ùø.Šv&\Rm€&F‹©U#›Eõ ‰»ù(Ó@3ü ³€ñ{¥•]Mࣹʗ-{©¼SÝij ¯°ãô×ób‚ùXU0Žeg²åàs„çbóIFfuz&0×5 ¬.U¹é™v°R±¹atA@ë! öR©ZN-ä)ÝLq— 8 +Ê N ÉX>bœ£uåKºüéŽZÇ®i?‹cqU2òÃN÷7¶D4GóÓ¢4ßy8…§Í}_õâÑq †ÉÊô޼Šì÷TÖ_t-Fç$-"§fUcJ5Iƒj¾öù»îÐDREì ìs²O|µ×Mg‡åêí—C»³ÚWáÐ+¹aéTv¾I_n‘—EZ=˜e¾y ~"ÛK¯ê‡Ñ0¯ã°)ÙÈ~ ö âþ<Ô2‹5yÂÖ`>5dAÊ#|ücj R…"B î»>åÌ]£^²~-æ…[E͹Èb‘Že”€Í‘¯ýËËûÂ,ì/Ó¯­ZIöl_^ÇhPñ³d ÜK÷&€UÚ¯š«"ÿOukY]£&Ž‚G¿åh½A×À.ÀdI› ÐÙDQUÆÎg×€‰IšÇû…î%ý.%’d\\ßê’ç¥ä%çiÿ8Smgì^û$7x›aÄ…½Þk'q*"N]a;ÖÄß׆Ý‘!à¸y ÅnËþiZžôožC û'ãˆà-˧èkÚ*ãgÙÀ|¸ 1æ5)kÇ×ëHm¥kOÕìÌJ ¹¾B¶Xínš›coaÖ›b+>@g¸3FêÎpâu;€yñàð¹æüäÅØ…­ÈN{b[¡a}€ ªòn~,R“醨¨–BYËÔ`…ÕÖj§*9Õ‚^œ àýè¯ïó³¦Úd:ÝYSÜŠ‹uËzRÌΘ©ï€a—öî”Ú"Th_‡åYÖ[‰}뎴ž ØIÁÔYEðrYJ¬”þµµ·]ä7ÏdjèH? ¶Yß*œ|âù§D&5ÔÇ`«ï»­$×=¹ÈÌxDËÄÎݪ®·íÛ¯"~Ì+oä.†m m¾·ÝVlTI‰å*‹ª—v®Ä?„ÙÿMˆã]±;Î*ƒ£ÿXË1ý` n‘ÜR ©Î¯×=‘Ø‹a1Ïÿ)’¨<¢cäz¢()§4ÄQ1˜E43Ï ~ê“ÍÎR2;KëÞHˆÌëÒYíàÆÏˆtÒÒö­ì9¾­Ö }ožBL£Ø# |é‡]¹®±,¸p1pT!"g§èKîŸl/p±’’kêŠÙîx?_³ÀàkNƒ>8JÐÙâw¶òQ‹x ˆ"7—Û÷_íF›"Ï0î@°h OytiŠ;Uœ‡i NJ^KÚé·MxÁ ã¢Ôƒ±º9?Xw,¿ÿz1 fn%d9= áY¶§S=ÖSWyöÝ%r.ñ6ò¾-Ÿ6ëLS}Oyò!}†ä*ŒDü"dЬf”²RwÞ}Ô¢­âŒ˜EühÈ!ðÔBoÆÙ,K*³ŸmΆê«ð ü$jcù1šG¨@sV¸Àˆ ÊÝ£!ÿF™øõØuïÖXœŸ>ú«˜,†x<Ëü;+<·A #œG/]…>–ÿKîdK0óCÕ¨ýFɨžÛ Õéhï°Ò;ì;Àrò®HÏÐyú&²»ŒÀ:ø©Âc é= zõ_‚VÓ’Ú)£ôMW6B*ÖøaSqØG¦óêv,^‡Ý‘Øú·ûUôN¤4¨ FÕN‰iõu{Y„ï‹2r^0ÿOÿr%¥¬ ¾3@úÒ%ð ½,-f1UÂZw&hú ÞíSi¤\hÄüñ*žÅ÷áëŒ%–rY°äÌ»ßÚ›rWÕwµ·oÑ«òoü°Ù~’ .tBñ¨# ìöŠ;$Ìø–Ý!?®zêúÚ äpÏ=}¸u–œ ç÷³žZ‰zb6‡Çaþò<§ÿj˜ëƒyÄ)Öˆïv)#H]x( «Nù¬„=“ž…„(`_(Ñ(8«béhS¤9“ÁøUÓÁhÁÅ–ºÄ¡n@‡YRñÅÒ_”‡èV->¿~#cÓ8ï½ ¯Kå¬@Á4³cÁ3Ó Ÿ«KXÜõ-¢òkObz­±¯ýÒÒU,7“’¿!ôé¯iƒþÖû’á³Ntí!E‚0Ê¥@-3kx¤ÌBΗ¡ëÞdzx pXÄ.Æ1?‚€œCV B!ßùTÿm:®µîÏ É[©‚–Üç;Ébbz7EN֦ʙø»ncbN#±„±»io¤ŸCËN,¡|û¡”0yn íó¶¨oú»¹)RO¬*Mu{¼ze¨E®*çíÃè,ðrl¬_å©ò«m#à´\9ا­Ö· ]/~û,‚+ó︼èz]@§…l¢æ+šŸµy ÈÈ¢ŠKï畦jÁß´Sxžoî-&¢c5ÇÆD}ÎVkI ¦jJ§£Eo×C<ë|Èã:ú͈Îê8T0"EþÃr£."VPBº™h5ð˜Ê„ó˜uâ÷q|Ñ„[¡’Òò7‡ NÐÇÍÒÄhÒüßó‚›Ü͸­þǽm•Æv¬ `¤5KÍk’†ÏêáŒ|ŸôkÖCK{‘Ð;²j BhžtOÆÇÞ(9 6€,Tî UC»©©¼Y>O+C•`ëƒG+Nž•X F3=¥¼ÏÝ£!ÿFxM°0V°›# q|àGÞD ÿ{¨2ü+sá¦J_ÒûðCD,ËŒ˜Ï=ŠmƒEUsÿo"-ú»Vü7·qŸz&­ëõ]†iz~€›eˆC÷2ùgËPüahù —øêz­‚鸗 }›~tUÁ´…¥üËÍðc¬áúÔ:‘ô»5–‹Á-&†ªmV”ç¸*Ê­œÔó–:…÷ 8kw¾'»$Jr)ÑÄ>ñîÇÚ3ºˆP ÚÀ^Õç¼85y,Å4ÀdÐ'=§Ùp5+m‚ºg×ZD%CqTù䎕eZ¥A¹6Χ‡ ÊÔ)áüN㻾{ür,¼Ë#¢}Þbd”f¨ñдG•ÜU‡WÆ/0ÓÉÆÙ¬V<§TVçñp‘¾ƒê‚:Ó\¡ìW»”´u×=¥q3UJÌ­iÐ1iv÷ŸýŸÒ‡¼b7dݲ†0w‘àáøÎ[þƯIÂYI¸tÑîöjIñ„y ÷ånkˆnÄ«Lû.Ò«Ðÿ ?ý=H—|׋ 9+ߨŸ‰'Ž2ÍOtNTºÈñ]ðW/'q̰ÕaTÑ1vR¿h„ì^ÿRÏ ÿ0yæ QÅ÷ Š”¦)ÕLY\%W§h-[ïV4—«%\½ûÔ… “¤BYáð›lL+†C¤R¬AݰF½fó¿qk×ùG«%+P¨óüg÷U¯–4x#ì­é‹ûåéC4Ÿ$Gܬ¨–²¶ou6×2O? |U H0©Ð®½Ü±¹*¬öÄeTè"]ô·+7°µ¢rÇq[¥N¾‰´Àç n±cÏódÑZ¢«ð«ÙQ€“ _²¤­B€zõMZÓÅU² ¤âF/;øµ%~ôð´µõe ü§ìö\ËÈrk3‘$ƒdˆŸF¬òB#7 ØsWœ{‹©üÓ[ë)Ä*fð³¥  qˆZƒ%¬æÙ—{‹ý1b€rFm2d 9BÊgÇzôôÇþ¯r&•)µ"]Ñ÷=ÜZÐŒ"†Lûû¬›+)?ÕÎbNa·a4žÎÕRc?[és0ÜGPSsþïh䌵…;Ý£!èøî0gMúÇì‡öÉÇ×ÀfáÛo)3¦.€¦¿ÄüFï$'³|UôQJ%AÕƒ~‚Ãw–z™á³ÃDŒ_›l´)e•$qCÃÖà“.15ã# EÅCª–Ñõ«o´ÝÔ¥±&‘ä°"ÎJ—·•Â0ùkú&ä8&ä1„µIºA+îOˆJ‘¯øuœôÔd$( Ø#«Qt”³ôÊ„^²,T5„)ï…¨óŸŸï±5ñ™Æu¼ò•vŒÁ¿§™(|ŽÅ¾Õ$s–&¿3¢Ü,)L4ùpÂj/X~©õÕ9¥ÓÐäSbùf<Ó¾ZûcÑ¢õ-ÅqëŠnƒ­d‰f1F‚ÏEn6_V¨±\~I_Á@máoÛÀhÖÓª(MuIs2£²VËfñ•chëÓÂÀµW>\S£¤›§E¯üã¦fެCa($ûne‚»(JW¸±VüFˆâ£¸[Ëþ9)€ž·Søj‘üxëE@Bí¯¿ Jt³]Zßt£µ5ô“HzZÏe¸E§i©½dãÙÁxÁŠhË¿f­À]{–ÒïJÈvWŠÖ­«º¯˜Ö5»Ôa•l¾}aÝ‹ê@%Ïý+;n>÷¼‚¡zQÏ×å•…p•fhù; þ=U`|ŽŠÒ{GãjÞëå1ÇÃnêüpµYðŸ_iX.xüw ‘°f7¨<‡Ø±¹UÅÎó½çæD?ï¶Ž•‘œ ›ç¥xß´·W6BÇ råÚã˜jÑr•¾4@·@HÄsÑï⸵´9@".F¯#ŒæxüƒÁV‹äÁ y?)Ë…a?¡å0úÊ{…¹©sg±‡5¢Ľç·ߦ@î¦- ª°y™ñÀOËL"¸ÁÙ]°xêc]¿}lÄ*[¸Â`?vºÃû.ñ²gÊü>+å‰ä«³Ì”§FóX½Ås™RwíV+´¤É«NM Ãg³‰[J+b-Ñs¬×ó:D!n¸ìçž \(Y²–}Ðú‹g,ÑR*Â3X)‚¶ÍcãL¨FÃ`mlÝ›€ã'µmqqè©7R:Ã>S±J òdí½:sP?S³šþô(ä0õ'^Ì Â®×Æ5Û‹ÀÚк4"^°«§œI³ %\èN#´ ¼˜–¤MÆ@ÛˆëMOC—4gâêhˆ}Ô˺nÚz™)ìÆ¯È«´ÄE‘+6Û9}§¹Û³NÕÏHnÜM5ȶËJâ«ýtŠÖê`»¸²P´ÿNt<˜ÑíBôX¯J‡àg®Rn–$Ô)œ´Ö€„Ädîïǧi!Ïò¸E%lj_Ià‡ªê†CQÓ%ÓN…Éb–~<Úϧq˜–ÊYÉÒ—'•ªU(qаsïPüŸ:.õ‡Ä"ÝìVPÒ_)¯4Âïúq¼l"Y 1LR~W¯2½ß9¿.ï_¹â½X¸´§,rÂ,S邸úš&Cj° B6“΢ñúŽÿ‘AkýgÆÄ^~!ˆÐ¯FÃ¥»n9Û!éZ¶×ùÊÿpB"=ûc+ÿP÷«E±ÀõêSnaßÐÿ ñ¤{ øQ^æwŒˆ…äÓ&Ô@k?ŽZ%Mb·6°ˆu\æ{Y ú“yªJ§î·»dÑe™ç†D{ÚóÅ—PßXTwž€¸¡&—°™ä÷µIÉfLÇv;ìˆÆ3Š$2D÷È«.É4øàËB©S Ó6=vR ­ýψÜI†Öu‡Û‡ìP¨›1ÉÅŽîÊ:gáÛ]Õ·ühT¬Ô·0òh@Tï½ ²¨Â µœÅ[õ»]0‹@/³ *íãrÞâá9ã]ј¼©0úG´ïÀ»;ègÝTŠ~¾•kĘúS’Ó¶Šs»Ÿ4.)ÀÖÿ,:k´4†(úðý†p‡§‰ÆrÐî%Õ°Þ/Š;/د”ô¢‡Ž6b™L2~l·Ø]Ž»|RZµã&m®°÷L¦ŒŽ3zºÕ˜ûŒ|Ì„ø½˜¯°><ð˜ÓP0æPTnë(n¹Æ»pæ]z_ž}CFgĺM 3eiw±”E$¬„Á—e íIÒ²Vô.DX*­²,"ªûáû§µÍßëÞi¯vŠA„ÑË.wêâ%& ‘Re¬’¯×ÚLŽ,ïhkÎF]MŽp®¼>Xf TÑz]ævÌìÄy,`ràÀßËkêÙ%ܸÚÞÊ'®À“XuqªB¤©~½´ä>÷ëˆZ”%®'óCR4Ôz¢SA¨ã‘šÀ # ¼‡Šk¥×ÏÌ›ÊyÈ(Ÿ×©¤) MŠ#¸ž GqPT 4ÏtÍ Ü§m¶qT¨\€ídƒ åáø¤Qbô»¤”´Ìu‘öæƒðc6 Ïç<‡}Õads:‘¼›ƒN$¹Ïöi*œÍRHD–È(׆¾°§/'§t~œH¿Ž´¥Aú ¡Kl²¸‰ö°ZŽð„,þî#ÖV 8‘/¸:ui}kš¼ ªo5\€Õ<^Š÷ûÕ² ¼…àV²ÿ[âu´XëaàäÑŠµÓܳ¯þpK>¶lÝÌm6BKŒìºyÔôDïô¯ {ƤbÉ—QYr¸]µúV½­'¦8¡"Ê’9?ÖÌX¿Á6©B”½¨±ôY» ¢ž×WDuöáÁýZ9±ºo,ƒWÙb6Üh½±÷‹F:?H—îxÇö&Vð“B”.™@¾ c¹˜^ ò÷аÆxÖµ&ùKK2Þ'æ—ΈtgMG÷‡žJÓ!À6C02v* v¿SЫ[°Õ‚ñê7­i/W«ðˆ®xΕMÇ5ƒÛ½v/{ö¸mA[£¦mãjáld(ÇÅë3'Aú'Æ´GœGµ¹ð>½ø1VDïmY4†’'rÏ °Co—?‘|*ÖÊj„ýž)äbοÆÊÈ*“ëUUÍ­¿Ò8ZZ±èsÿlä`G\ž5DÇ@ƒ´ŽHee8µX#슚íÕñ=œÒ]¦êÄ¢ r=îf,ÈÜ7Ö2ÏDiycU«åB²‰š:ÿ MaZçZA;Ó“¨n®²Øx³j ËAêKl7 ¡xAÍÎ…fì“öiËù7¦€‡Ì?Fg ìáõ‚^Vèж|ß l¥HRar:߉‹ /~É‚W†Ÿÿt\óŠü<ª_¿Pø =“# Q_ä’)ÕŒjeí,%ÎYø…敳>:2>`ˆ˜šò)ô¨È±¨2H*)®–ÌAªöõζå4í£j%a§ëÑØ§n“Ñeoö¾,?ßq‡±õ½!Ë>t‰ÏpÇQ 븤,4žyª£¼Õ‡€KùHwIUÈ–B²×);ÿvÎ÷bÞ¶’gÑø,¡]íó¼ãdóCDî@D@?!óówð™(šÙ$϶ÆM©-P[^W’WFŽâŠtØÑú"Ãešgè,RÆcNÞ¯S.Â!ŒÒõ¶†F(åNת_9¥3Cíp‹6ÙÓ"6ªÂÓÌéšW‘ÊK;„&À¥m*¹HÑØÂëA·ç­ã-b‰fív²´ /×Ò|Q¦Uºvz/B>¯ÈH”‘w­¾®¦·Àhóîä-Þ_}¹¼Ì'q^îõ|þ}Y÷±lTAž¦ò²Ù}4 †vì róGy ö^¼Ó6ZIy9Þ_øÑf<Û÷à¨p‹/™|`‰w:ÈËœk¤dž/º¿o ×1:qùg*ouå»" öðlÁ àC]耫åÄ‚$ø¤ÙÕSv¶ÍÐA„|×êIJww,ëãpâë°|; n8Q·®èƺn'äîU1£F‰âßÁªî©n+²Nžâ}äQ‚þ¾Í…²ÙµÁ+ý¢¾´€€œÈBGäâTc4•c"“ŸÉ†€o¸î#ð@jà\6¨ÿ ÊDkx€H³°¶“¯|~£¥…O ø£cF°ÌÛ!óþæ¡+ï]z̳… Ðó4ý-ƒ£²f³)gã˜ì¨ÌÎøQî¤Ó”öe"òÃ × ,ÿ;ÜÕW»ø²q~4úáÍêékiŽì@• ·[²à¿HÄ3>àicˆNÝVû@fâﯸ‹…òoÓ/Q!zØ9xj±Ö0°]ªƒ±r7< Ÿ•@‚TäF ]È$ÆŸŸ³óïˆaŒ·”Ðd•ìIÊý’KèKv«˜”¨¹%»ë‹J…Zhïe6—x"6fW£ßbZ0è¬&Þ.¦†„¿nòˆ\ŃD ãgnp…™ý>!½¯Û¬è1¨øè«ByŸMí5Ï€3+Ä$V`Pç·Ð²ÕýŸ]˜9€Küµ/¸AwƉ5[} -Ù^ví‡i'¬¨ƒ~WJŽ’ÿ ÜŸkø± ‰ÇH‹[ršÕ±¯öc›»YfÐ×Ô<ÀBmyy³L¹ªþTÖ"7&$³²@M-^ûë …!ÔŸoÚ›Æ_wÁæ;´”t³ä²à¸°÷§,xùaïúšURàÿŸ0}`“—C/I&EÚkZGŠ%úy‹Ÿ­›ˤÁ÷ÜMÕ=œ#œ¬(¹†Õ³“{8ȩҴ˽~ç$¤[¤® ¤!˜Õ¯“ÏË nCûsd˜Ž *».dÇ(ÂÉô+fEsÀjÝÿƒªçó"yUEkîDaæT»+YÜA(Dý¯%ÝÔ!IýSÑ,eÎ (4¢áŸä,9©å*•F±ËSÞ6/Â’¶9ºÝ#œýºmŠÒÖN¾ã÷ñTól‚¿,hWæçà!žAÉÓ]d_ €]`Àš!Cçpµ‘í›2Û|Q–IÃójw׬@?ÊÂë `Ä7ª5^þÄ£€@4O0ÚFºð²+ ìÒ1Š×ä¸Bá42ýþA4‹J »ãi{Ó"‡0‚B#ËØÿj¥%°çVð2¡·±RÕ?ÄÚßô5{ÿ^y1‚YI¿kwÊ—k¦ËØ)$íåGâùÀgyJ½“Õ'³é@û›ª©…T£×†ÒŒD‘“dr2u™|%¦ázú&ëžù9]iÎ JENÕNwYÄè–äÉ­Uœ (Ð/™Ï¢ñ>f®ûPro»Q½}¼ëUÜ hØ„à ÒLŒ½O”¿BE@”ø·«/IŸ„BåéUWp:d• e5ü+&¹±‘~O†á¾iβ÷#¢S­Óšry^“~»†rÅxó¸°ÖÓ î^±½l;%òŽëçÓëÙr1$Óý¬&¢îÆÎ¶ŒµÓSŸAµ#]üÈ‚Hc(³ZttHÅjˆ€è ¼ÿ†ÝÏ„dm3ä¾&cŠÒù9­Þ\ðG-˜do_tóU@©G€íÒ«ˆt¹کuÝËŸã Yx‘2<÷uš„¶ìÛìß1q=Àhu-ËÝ3òÑ/«ñÿ~°ðð@†"Xpá ˜ç[t6´zE·Ö⟹@8 Ë¢B»9ƒßœµŽ•4»Ò'ýÛ¸R\ûª¯w/C§¯Á÷é7gá`ãƒ=çàU;N‰þ'k½à^ G‚†FŒ[º+,£&XÒ?‡oxãt³É£]dz¢Ì+[H´ ÜѾ£ªñ(Ðr&;hñëZ*Ѷ/gVB…^þÕ¿Ä]3¯LE6ôGláfFÙ‘xÜ.Õ$÷»¢8†g5v¸´&H ÷IgK$×%ÕçÛ.WÉxo-oäªbŸèa2¬DnU‡’¼;å"~á>Kgñ®¸]ÃY•äúð :3¶mÔô£fI¶*Kk ›£9%áç³Qé}ŸÔ"7°Š„|ô¬õø€-ÉWÑ$YÑús«04ô¸uØqrËzœK}„D6=*¡F#Qþ‹w·ˆŽÑͬ ¿¼K´K¿A‚¯ækvhC7ÊrWYl“°Î ¿úèõ«• ·™½‘§yþd ¢öl‘ ¥þ–êLJ CEÔ±Ÿª1hIg܇š×Ū>&)lS)òr{ð«’Mà½6WÏ>}Õ“«©Íë±ÕH iÌá:ÿƒÞèÏØ·âÄ™\÷”•PsnÛoMŽF³*ã² c&ö°/Ñ©¾á‰ipe[sxü”bõ§ÃÉ–M oóÔ ¦9—BA‰Kšÿ ”iµ¯ºÉ„Î&Oh¡Ûsiw†VkÄ0N°gY‚øÏù¾sÀÿSˆUò#ám7"˜põO÷ȵ‡ed­BP¬JL½ÁÅZ¾YKt'B‹ã›™ï=D ›Uɰh·ħ¡“‘IxU¹ké%ô$æ>ÚdÖܧ£lϽôä)G õpwysµ<EÉ…¦Žß£ fáhîeÔMÈ»ðÌ>ô–¡º×0k_J'©Õ£¸òýZlbÉhi?}‘ú=ygŠ¬Ï¡öG2»Ú}d»µ®Pá·Û~´,ØÒ ’Û£µa¢½‰Œ!¿VJdt¦à[EIë7‚ýR}>)¨<¥N-¡T“ÿVÐè^uÛÂÀ ívSq9¼éIU±ׇ‡¯Êf>‡e’'¤:™d|ëØÑ¤6…ï¢]öÊã¦õ7V1Ïôâ0ãÿ \É’ªT³ÔbÜžÏ(44ÅuÎm6±Õ°úvæ.z.2ŽþE6$†ëbÄR4&ŠÑ [‘ó‰£V@ >H¸ƒŽiÅ·»*ùsÍ}³C²‘ŽðÉ#UxdÿMJ Ù5J¦Ô›ß5—‘¹Ð)Ü’ÌÂÅzOQ}( õÓrw<Ò;®aG~ó ñ>½Úƒª–€N˜¹³˜ ¾DÞ#c1ázTç8ï8/6l)±•ýXä´õ"ÖRŠ}©™Ü³]Œ¼ÁüÌ\Šù÷“àñöÇ,‹­­~opW ñ‡4øF2ŠãŒ¬þ|ë ´„Áx‡Èuí¾ò0¾ßPFÛ4¸™ôâ§>«®—\ë/õ€¼ëÕD¾ŸãWb;ö ÇÒ_çX&»ê”4 ¾“d6yUáÊP ÜicÕßî¿-ÙÔŸã§jü@›Í„ØáeøzÉyzü ¸«*nRš¥|ö)WšäïWL<©Ïp黎ªéˆtB0A Þ^•¦­M•«€n¾ù$I™òÒëô„@ZYöËJwQ3±~úñžÉ–w]"Y(F5mÉñûp|ñÖ*Ñ‘¯®ðlË.ßFÏ+õò{êÅ:>?W¾”_4ò¡m¶¢ô±‘ªh qlèòC¹¤#wŒJðoGKžäùR5›ãÃAàý‡ÅWÕ™ —Uá÷,¼»nOG4ï«è9xþÖ¶š¨M'éù0¤*7?OÎ5Òâ’». dóöf0oþd@NŸC‡aå]gíùWb,ž¿âá‰ÔmS™†ˆçÜK’-_1¸\4ówÓµ9>ãøZfˆö罉8JIŒQ°šNhXµÖÁØ oñË[«Isz!L²Ý;¹Ü†o¨läŸs|¢Ó²Í¨â¿Þw«‡Wa …oíÙ=òïë–³k"¸èáïVÐÿ"‘Nã)讪™ÙÆûËV›¿**¸]Îf S&vÄ÷ÿCÌŠMsr·(Ã<3qoyÓoÖ̺yÏL‚~á;1å×±äaÑ7åÏôAÂ!»YÊè7ljÏj&¶û wˆì×ÖGÀ˜UC( pr^ÏTl¬ªÔöݺŠ£+” ½ÏôÈŽk‘ àØžÕ)ü©ìbÿµ„vxä¤ Ûrõqë`Øc¥¡Ÿë´ž° “ªEÜViØÛnwµ\©ç·™Mĉ–ßž9®jû–[ô^p5½—qhyXyî^ÇW½]cAb’}¨ßŸŒqîíééT¨›2Sj¡šæ‰ÁI2zÉÞ;¾ìÚÞ°[ÓE÷Œø¸&†_“ãóëÂ)þð¥¤þfÞø³fðIÄÅbËôªê#)z¥h°ÅŒ “Ý£VÔ‚~/ß6ã®Ê¹‘»+~µfÑ&ŠÝ_ÎÎOò—â èK‹tm3ÚýoTë@ÞûŸ¬Î¿ãü»\©ÌºËEðÖáŽÉùÍðƒt|HscàÖÊŘ[¶Šöß}e@jƒÃe“0NqF tH~ÖCo6y2/ñËÓQéöaa2&æ9ǺŽMØ75?ʱo%¢Ÿñ¤‰c£ÑÇÄ?§«ˆnµÐv㔜«Ž>+;ÍíûXnLäóÆ|Ï1Æ'?w¿pkÛ'†;œ¹|•Îüz9å÷þÜŀߺ©^Ù…Á3eÏKŠþúŊ?5ùÂm‰ó2b1MìpzëYiP“ÌÙ:¦µdÚ”Xô¨Êð¤JtÕ±Â:p5:.þF2 : —Ð>uâ+ÜF5]áÝ@‡]ÊóP ‘«¦dV˜LñÕúr’<ò¼Ï%-¢´­˜]ÄbMá!%Õ‘¸‹Y ‘Ä2HˆjΆâŒÄu»«ÞÀ+²è2Y~ºaâô'ÿމTK¬“-ç'x·ùï¹ ›9¿Ú.qŒg.èé%ö[äN9‘E ¾ªi(žXßÐÂòä;{‚×mayûFS"®Ìú•‚Tf‚1{âúÄ âêIzBR!jxšmº¸Ò=§/#`<0È`%_q͟ะ†yË2ö¦$}\"Å%£+â~ýÐØ’Éw]IýÆ›kvtÚz:E·Þ1ázcø ÀqÙG;f…-¡»Süª'ô „ˆ\Å~AP6û5£Õ‹Ò˜¾Â¼0“¦üÕRò‹GIžŸ,¡²KÚèÓÆ~pJFo¸0\3ùÁ·;q—‚íöQKaÿq˜vP'ðµF\ìÈHõ¡¶ýæ—ÂÏLÆ¢0^~7_:ÁäÕ‡l,ÖtÛ¤àU ¾QI _¬J`N¾¨/@Fð¾602zZi7G;$ÔžêjÖ\ñ I…LVŽÅY¢§‚£zâH ÓÀ7ëâ¢à ærÖÁ´+8±ÄÝE·¥ªÌùYx™¨5¹ò’}Nb¾•š(”Â-»MŽrkºü,,F)IfrÎxZG‡J*Õ]DÖdd,ü:zG¾Z>³&ÒhLûp{Ë_í©F•Ù8°Åô¤D:§iî×!ö²÷lO»–Ñäe·êj¶ØŒ(·°‰íÑèAšÙRBq8¢öI •CÜ*ÎŽwNmM³afiNÄå´!”³Š˜¦™âµ—yÕ^០@ ¹I´$¤?€~í03 J“æ]álzø‹ÂÎ8ÈÛ!¨žæ Ó‡EhY›Tçòv…KI.쿇ögd E<‚ AºXÔCu8ŠöUŸ ·¯âÿ«ªñÈv ÙNE#Û]ÙÏ¥Ñ-ÐŽÏ m²Æ¸zËDð€H0‚°?Ü|Z-˜ÕÓÉ2Áíi:-~‹µöQƼ\ZÔ*ùT&Aà Öy9?åé Œg%#G9â€ÿ[–$«GZ ›£ŽŒPщÁtÝ?O ’ý0Ò âÑÅcÝ*Gúòm3oÕE§\‰S#Pþç°,šÎ ÚöA[tnH^v’|؇ãM'¾â‚¥öß¡eY´£0ßzÖ¡ä—à½iŒ©M0ž¥>ŠìvDÝ—  1é¦mf郤§Û’ÜåéŸ .“úE”—DlRx»X‰·©óf)9éj…­ÆbpªÑXReû‹ßööºÔ<×(‰Š~ adÁ —¶ëŒ¯›¾0ûìöFÝ y<ù!Ñ‚hõ\—^¼~/a}tª[Îiz"¨®<µuŠºÖ k}ú? ‹™fè÷øåÒ'’|f»ŽàïeD`>´¥'Cà¨Æã /1á…Gg߯ø¢†¬BiNÌE9ò\ø\Éoý»¥=lbw­“û¥¤ù7æÐ`m»âˆê, ƒa+Ò:ŠB >FMP 4!±ZFñaÊÁñ†e‰Á9oYùš{1è÷â³öº„"¯}¹:•ðer¦Ì" gÈÉ$8ôǰ°ÔËrê÷&©ýNk9$L¶û†ke¨5¥+¿È³PF;—V€VŸÍý¦ëh‹R¬…ÁŸL0ïic¾Êª¶Lä]yÎ)_–E²3Ù+;Ž‚Òa®’+Ž[õu@PKÙè¶²»êY}¡©Gªh«úä5BäÖHÖjˆÒ©Â@äþiô«Ðü<²’mŸêQÊÈ\Þ‘9¨•l˜ÿ’òH<« ƒ×ÌE5o_›W&ÝOøO>\„1îñ==¦˜ÑãOr­•êOëñP=*Â3JÒ*ÄCø\Òxµ³ sÈ%ùN>Š7ywkÀ˜À“&»>•±}aäÈHß+÷:@¨ c{Ç_¸§|ê]y`Çòtj ¯ÌÉ~¸K>„ùîD ñ¼¼úÔpt[ÞA]‹8»ëj,çpê.¯Ù 3tÝf‡ÁE{Jm¤Á#ûó‘øºKŒðöàãëÁÌÓÔ,“Â/Xðå°ý€:ƒr»ùQ2õw¹&0b%Äâ@ƒV@7ÔsÒ?tœrË+ºpcȽop4#øt6®ZåFoÔ²Üäñ«R$:nátügvP+6©Cœœ7{eÚ×aÌ% XT!_3’R åŽá1'ÖL/1¶Õîš0!×sq¢§j¤E¹pAÙXµäê?@0^leO«‹Š ¼‘›Œ.dµ0šW²yj܃xJ]ö‹x*ªGBƒprIj)X7êù¼×¼šyS qìA]R«H ›àñ°¡f« fÚØ´¢˜.yisÐ æŠéÏ43ãs& —ÝÅAô†Çj°¤’;6ýÆÁ@"ñøï Ž×G:‚ËjS`ú&“1ÖAO 3cD¼T'©þêÚÄ3öNä5“ø#§sš¶Õƒ)W‹:ç~9[ä9·ÛÌÈFÛíV[IÑ3…ÍtEY•=«¥@÷¾^¨Úsò)ѱH¿Ïa ¬Ö¸Â¦‚”nã<Ö"9|õmM¡,[²tG¤æÙª»¸|%¡dÍ=‚Œk|HéÜ,é>gq<âØX£qЯ[¹†™?ˆÈÀRXÃÁÁ,r£} /­ËL½·š9úæ¡ðÝBaŠÄ8˜Æ¡ù(ªØµ¨º[1C{ÿ ïe÷QAŠ‘?QhdZÞÿxÀå ê2Ú²âÍbðTzG(VÖ-”¹dò6ºµatŸìXI8? i Á?²¹C/Î<å¯ÁÜpŸß„ï•zݸr’âÍO‰×’SÿV}`FQ»;’õHvàD[5Ù‹L‡lmR„+-·Ì<–¼(\›W½U‰+Aÿ(~%Ó Ïâê—Y+)®ìË›•ƒ?pÿgZ‚TN÷Õĵþy|¹J Zq=2bgóÞû2Go’i÷´±+CnvŠGã.6ü™¾.Ù+4Ýÿ3Oøø|dµ§vB^St*iCö3¨Ø…R_+5ú±ãž¤Î“œ[ÙÃMé䔚°©>§xef9þºsYdŸpšzÌ'ì„ SèE0]Ý_ÿf2U°­˜‹Ø‹¾(£ýÖÍ3lbÓW¤Ç*1“TÇè`;¶ŸfAO2=,b8äpiýŽÕx^ûtÎÐéF¸l‹ô‡ÑL²àN±®Ú±BÔ} |QDm¿EÙ›Ãs“â´lS±ÿHÍ<ï/‹ Øüšýs»VL"ÿwhŽÃ>E…*Ëèþ³xȸo”[xEŸÌ C“›1u˜hRü€¥cü¨j‰Ô¢ºIK…!RÉÆæ¢Ù RNF¯e•ÔZ†V¥ûE” ±š_!&}œÇxû@QXDØ‘±K96ýr¶waDÈÉ‚âDaVEÐÿg&ØöÊÖÔW“ø›!n8þ~Ä“ãÁú1ÖÔ}Þ9“³ŒÏÎv”ß\0½·"uy-½¶sµÊ~U^ä¦oÜ—kˆtZ)·UãCÞéxsÆ«Yw?ñq†Ù#zMÝt4¼ŒX!0vgs¢ÿiª¥D3îd2øKnè¶3HÊâ=9>^¾?#bÀ-Î×·­®û‚ø<Ô ®o“kn³ó¨…_€ó0· S8yVžBúÏà¨!ÓÌTÙi–±K ÀÑÐø£ï¡ÒÌëiÊÇ9å¿JY n€ƒ×LÊJ#ɕأ«S^¦–\§¥ ý5C44IbM»owö´a* •n%bU[Ûø•i¼YêáØa5¼¹_ß¿]²Ø;vÎÊm9m{ùTû“^ÔAY_Îõ‚ùˆüÆ‚³™ìC+ÿÓ„ ¾ÙäÃU÷•ûS¾(¼sOVù0.rOBK®%rðNä:¾Ø(ß.®JâìÜ®²IJ3 åïs\iqOFOB„ñ,ôMâúMÄ ŽÒ* IV|Ö!¿._oœ4 ¥…ƒU9a¶u/*|PyÝû×Õ|¨jV²«+ãG‰}šv¼xùž[•ƒÖ愆…*GÆõ?ðUÞ ©´æªê¥Âj€3ìÄØ‘¶c£à)VÞ|?-Ñoå‰Ã,~‹ »=ZœŸ6ˆ”`só”ÔhÐáRÆbÌ•„Æ”¤Kç>©_¤]FYo9›£8 ÌC6”–È|›fç R?ì5«a8*KdræÔ”÷HN b3±À„ÎìAh0dÝÞ³ÍË®uO×BÜ,fĺ ûÉ22vÖeOú¥.še}©„it¨ïŠ1´kW Yøæh?Û†2ûUõÏÝwÉ¿Éñ9?^Îüÿ[ª6DV­Á²l"À]NIÄUÜ£IÑÏ>ÌäÕ­²Ñçá‰A`â9A¹b˜+‘78v'æÏ-UàrÀ]_¾;JJ‰ý§=ÕÁ%½Û•‡v¾ %ììþ­ÕüDéøºmZ~’9„×Îs{€´R ìWßžªáƒŸ¢ðcB·Å£LS…·«"ç ìN ±~¾ˆÌ¬¼×蟳Av’¬ÇªP$‘rÊ m€º5{=CùR¸ú¸j’ȉpÖ½ OÔ‘bž=¯o\™¡Ã]ä^»;æèÉwv¹sK¹4Ü?¾×Dv´’—Îã¸!luþvø©ç©(rOó£5óXiH5“¥díÂ11ëF£ìû&QîN]I:ô\ï16ˆš~$?=?^F$i*÷J-‘Êþýé §õ/\9: sÂÈàî—|8.Y1õG½ð,"гbǽ•Ðm²þ´Œ®_‘‚ýŒ óÒ˜í7U00=²*+`õ– BIúBÇöfó3ZrÈ©fLEÖ QÑ<ÀÊÛ#¾ZVÓÖ}f…Ey–ÒÞ¯“?m9‹Á®Gµ‚>:ª*Œ<Æ…´¨ÝÄvôzþ.U>Y]89òÔ u\NF'56t‹ö}¡ÂëEⳤãß\6 5aYÿ.;¢bf¸5º¹OÛ ã¤íÿ~¦€n<Õ:õ0´Ò!ôŽEv®6­ô‚I‹ïã?AgØ¥¥h¦ø˜ñ@¦€eèætZãBä†~Ë>W á—Va‚)Ï×A˜€ ×@ᤇFÓõ ¸WmŸîe<­vRA|ÇL"Vë¤Y²”?AII» + ¹É?¼4ÂÿØé¨º‚9.§Îé&M“mºàïý»>RÅÖÏ)=³¹J4nç­JL?\D9‘BH±KÓ(ý¥ØçÆwŒ¸£MÊÕ21C‰HÓWƒ¬‹ž¬C*Á&ƈThw°Ùë¨ßvÜO¼Úž”+P‹ºfúž ö[²i‡6³™aE®wÒ«*oïDÕÛˆµÎ‡š« wAtXã·â%ˆ  ,9®" ‡¨ïD½„¨Œ™6ý7.(WÊÅ_NHN~,(‹‡–&«¹ÙW’²ºt3¨·v-Èúì™l;[e£!Ì¡Žç Îf6^€zÞ‰‘~9(:’zU)Õ„aÛ¿>ê—Ïáûé.Z~¦†pÜtKžÐ^T¤P‘ÄS@–dQžSaú¨lÁá'ÝÅ wT«±Œ¬É!ÔâZ8m6µ"§±,Z}V™šœ~U“†þé[*³¤Ú—DƒdaL ýÔ¥ÌZmÿé-6Þ\„æd8¿…g§ôÓžýz¹œcYíÔäöeòãÒ?=ÖÛT¡—7ÑšŒEPøLò•Fâ—ÖŽœ}ÃGÁ\¬ÄfÜMrY XŠ_w4€Ly0šò²ñ°qÒqÌqê’Oûõ§˜Ë<7—Ë¢/=ºÙ¼SZtVþØ” àGÉo î˜Xânøê‘“QEi.ék]m® ½{Oo™"Åô±ûPžgÙ»>uöä0ê:/ƒ¦í˜TúË 4‡)Mó!™–w4ä<Á:ˆÿ*Xº¯yÜŒBÚu¨$!jZû<áb»è÷Lüž8y àŸaÿ0ÅÒ•À3\Ý'øf†ÓÇ ‘Ø6—I¤¬Þ&DZ]_BÎ[*¯´ÒžøŽ(‘`¶ÖMkù^LÀ¥¹-v~h;CBþW¤ìY¶ —í½Œ gav”xŽîU6°|‡K˜ØV¥*¬Æhìè\Öà"æd¦prBñf³…,È"W’t¤ÚÔ ©)˜ÑJ’ìx«Ý"÷³º3ªÀšD¬€Æ$ö³F•‡|ð…J@½—n¹Dä3#‘äÌ{‰Y‘¦ uJ—ØEÍE‡c&˜ËS‡¿òhÊàT…`0Cº.ûÕ°ã™?oj)íRñçŽ,šœäüÆÿTähóûýH aºf*B—Èg‘Pˆ_eR" ]-Ô^¢HáýБZ°Û®aƈF ½HôÆâÔ‡#Š~R7ô±€n÷‹I®Sê2£®ž7ûBs³û”tácµIc‘™Ùíצÿýo„C;MjY­èß‘g×1£–î=À˜ÍßÍrIº™à¶Z³%mŒ½…2z»’ID«ÂôKk¶pà›t‡Ôƒ2hêJ9hÖcõb§-'JÌ{Iª‹®ÀVæÒ†ƒ]ÕÃ?ëHI‹Íç¨>°žmˆ–çWµœ‘ñBa/C%Ny"_í'aÍ1£¹Ï„‡MÛŽ«jáâ€E†V¡ìÒ¢RHXí®\ò(j˜aâ‰HQ.o^ $õùSPã…Ñ1 ìU1mƒ‡1:½r šÛ׿¨Êm ¨{:[Mm¨Ó‡Ÿ×=e‚ ÌÌE›Å£ö"i"án˜xÉÔ†g~ÞÈ¢Ú éfø¦¼lÖ2‚Ž d‡£t¹â¨J§dç_ÇÝ~¢Uñ†p¿Ï-ÒQ»^±šÇS ‰Tn®^‚‘¾Q& ¬ÿ:‰£6ª’DÝ} ¯Osç½>cÚéðLF5ÆØs ÌB‚K¿û¼/S/ÚsðPO>¿ÆòÜRØé!Ä’hß5¢„¥QÞ T\¢&?î H´Ò“×*/ã£Ö¦û´‹)+\ôI÷Ç_6éùWýy5ôƒöã‰ã:¹H3rw]Q¢Y´4´¯ÛA0­ã&îÝ ½P4•§¯£†å3;j3ÓöËVØö}¿3MÙæ›«®ƒîqܧB x&ó(VSðšõ‡Ÿ>ÌÀ£¸–¼ 7 qEþb™`öÊÎâVÖM+‡ÏOŸ$*Zï¥VÎt÷œ¶[ÿ 1u‚§ôG„[Äö)r„<½ (ZoiÙ·( ¯-1&vп–T Ã&ôEŸGÍ`”…Ò—ë4dH¥ê¾^-¥ýßÜS½ÿ$éÎÙ ™Öÿmóhíó•õ È)<¨6½Îþ¥2 ò)ÍyM_¡[Lž„kóÍae„¡Æ ˜Ý~ÊAÿmc°½¥]Ùi%¨±òygùõ=¼{ºíº¢/vÓï~rq÷? BˆþÌ-ueÇ™,d÷'ÂÇ—øÓiGômÁËYBtõo`k'syÿ/kôopãf ŽMPRï?¹X5„Oä6`¦®(V Ô óa£A.ÇìýE£•ìn³2þ×ðlzÄâ+ÓõÚMåf‚B8Ð,nôt“{Ó47·¨x--zÃâš÷IR(''‹¯$6ÕÀÓó½½x5]ÚÌû!ˆ£ ¾ ;¾‡®±2ç_E3mjq½GïF(ÌË*Àȹ™°05‘¡ñOâ~1nT7—B%B<_ºY.®áiY¦rEnÎËv{׬% ²‚ÙžWB\ŽÓª00ú‚„¨¬+KÆ¿¡¡¼‘tæ˜%â³™÷IãÝöøí‘Rxf©Ïýüçòáå3‡\âø#º8'õØsââÉó ¼IGðãë ö:Ê´Ò󿃡‡¯ÍÚ“V—×v ««– ¤‰½¯^ö etÄs"ê=Fs2C˜."öªƒõ¡%Ÿˆ!µžp„+IŒMò8ÅÊ„)B"~oy÷!D,† ´×¿ËHàŒ«ZÀÁ¯0{ñWÚ~3¾ß’Ý:«¶íÛÙá·vXMlæîÛ}¥gS%_e@âüóz_~®RLžåö|j:ãöC‚Î×Ú};4ûî%KEg#z´çÚ™© ¡ ”h÷¬»6Pn«34ÌŠ'öÕÜ_§ÍÝtA?šb¥ÏšCž oóŒn$Ã*—„vRø˜„ÍߊýWn+EJ'$x±ºs/CuiO­Å§XUÊ£ì>y“U¼tŒEt"»ðŒ³@ ›XÉŒ-ž@£šf{BæðØ··¹)¯™„ÈIMDÐ<¬L ¼³T勿Ÿ-8k¶.`úŽÌß:8 ü’i²½?Ì/˜•O½-žÚ~s×¥É &Aþï¼Íáw€Cvç¤aFïÒX+ÊÀJ2uo2};¨EèœWƒ—a¦‚_ ÛT³_˜1¿ÀL5×OñªGóàú+­H_ãMý÷•€kuò ™\§“[²Yö§$¸ÿnI†w¿¤ìøjG¬E‘ ,—^øÖë¢|eÜÎt-žç8Sa)fí/”ÉÑÛÆTì)îÆ¨ˆ_ø€ìÇ †W¯ ÇßØÓ¸Í¸ÇCtÈA ¡Ø5>¢GFTèaT}´5)MXlòÝŽ„wò÷ˆ…[;¼miþ™±Œ›}Lèmdñ“K!Ç^©4óäŠ Ö î (³Çy§e¾ê~!k!=PcÈ9¡Þnºd”ÂfK´]€þ Y"ý44nó?6•Ó.ý—¾„0&Båó &­zÔq±þ ñ“v…;#ŸZcç c%x "1¨¶ ]nkœÃvKªR^OYWºKkŠÆóô0!‘úÌ&/=Ð0¡ù*Ã×\,ûѬ{U&¯)¿M¾äçÐ55 tNߪú¥Þ°ÿüJ«Žàek_H%'M/º÷]6)Cl”±+z±tYŽù–ZÐÆ©#(Šg‡ ¡¦qu§ÉòÅ‘ÿ.¾Yk0_Þƒ3µ#ø<­ço|‘*<Ínö· qó9èV³€?(ðÿ¢ßªÚï« ~?0KCË%¾$¸ V=[ÞnÀÞŸA>¡ ÇТfÕgï·œÂïUÇuV øh~q¨ájéF‡Ìù6ÒåéÑTó ¿4ç{Å Q±nsøë¿EÍD²«¼ mÞW«ûÚ¹©ª*µ—Œé“0´ûí,K2âIòíV ²¢¶ÒÁû'Õ1°bqòÏŠP­¦o•Y˜Dì'èœiMüÍ€t¢7¯‰ºÈh¸hVOQ€.öÑP Haä ù° 3Ëðqiã(±ó #Bãøà­¥4.vàƒYŠéœâãz¤‹ÕKÌ™½¶XŒ½\Q®BÚSÍI8÷è†?ÿYJÈXMrTóe+ÄÓAî™|ˆ_L šw aØšä€XóØÝhW©íè»j¯öëwºìˆ´-S§÷dý¿õ:£ÝݯȀ-U™Õþì?ºelÕÕÝ×mZ€øO8øs“Â_2øÒ­r‚Pôkc“¸~W^ ê}ì EmZã>[§s÷& ýîh›ý§Ðã*0~Ÿ1©"tÁèA×¼‹³îtç’h³ÌÜÔ ;¦ñ×€M)üÀÛ{6x[KÑ}둵:ß}ا.mRr[ÒdSêÓ`ÒÊw1×›‘F|½rXŽ K鬀 ;ù¿5´³3‰-B™ÈË#T“¾¤ªëõ™*YÅÖ:›ý®‰œ5ú}¢…¸×¸@mè¬e@ —¯Ñè§E?åL[G9\ÿ9=ñ ô©°}üûS§<Çs \·(qž´Ð˜g(mÙÁPŽx*/eVi«ní™êV7å1\¾Q9ÿUœƒæˆM6:. ]Iê 8Ä+%;&ëïüp½‚<§-:¤%jygŒ&ÔGa˜÷‹¼g(Å£I|ÀÑEB¯ã#ÏgÔóÁ˜Ï«ø¾„!:Ÿw´•â(¸ø¾„îѶ Oóo§:+ŒÁS)½IKÜN- `ØŒà‚pŸüÏ¥!Z4ÎòÕ˜YÖ•ê‰8µPp È‹¤^W<ãB¬x{¦zµ8’-Äæ«ûwÞ¾¹ B`»NŸ°4K‹“çû„Év±º"µ[×§T}m%‚Òëøä‚ŽuôÏqb޸Ŷ. ;@<|*çïÐÅCTüAGŸ5TU¿72Z£G¬ók¯p‹6¯:ý ²û2a›l÷'HUƒ¦šºLäªÁR#‚Ë0i¿Ÿ‚ìbð@4™ôæÿZ‡Ÿý!Ë£Â0§׌å-l7€†žBòàÖgmðx ÁqmÎa‹t„~§ø6о Ù^ЉF¦èAZð5<¼¶¾Í{µSÖ΋7¹áM0Â=ËÖ…èû¸Zиø›l¹ÔÙ?™Æ0kÖÍWÀy†øb—Ty¤¸‰q#Ô>¾ýÏ©Z égÁvºøA8«[Âß´øC†mòNs-¸ðÖ&•.a1ëÎI.ó<êÿjc5öÅã4ÁZŒAM9æ¦ü¢¥:â@Fî ͬ¯‰ã>ó7`h÷P&êÒÍtÁô‹ÝüM.ö£Š"Ž€ 3As3¿Lkމo”‚‚í=C¯È‰ÿ=(Ìò†^Õ¿{2°£(眵Î;Ÿ/“lQx˘Q,:fPBñ£ZŠ®òïM i¨É3Qéy¯FÁ¯p­ù”QØ–aìÄóÖ×-­½Š¯ kLT}¯brý§ÁpìÃï’CŽ–©¬*§0àÓ¦›©œÍ"¼4TòNž{ë”EÅðÙl“j¹y%väé­,VÿYK É—Í-Hø0míÒf,Ûª+‘ýòf„ÄL>é_ƒ ¹‡vµ¹¡:â]ŒY_:¾e¤Xã¤Ë¨×!&µô ãÝõ'߉m'ûzÊ€ Æ\dxmn#Á Ò\ð“FÊAÈ3¯’î‡r¾ðþ¤Õ×ïúºèýW·ê¥ÿ+½ÿjô!ýZ%þ­ ý^“¿êïcõlWêÔ çöU|þÌ?UÝÃúŠ?WpßêîõZwÏLý^„«Ðvùöç|ûõz|ÿUÝÕóõ»õh‡êîïõw‰ú¯Îê)ý]ˆÿU×'ꮿR¯êï»õw¿ú­¯õZ«Ò§ý]à~­_ýZú»tý]°~«œâš+½öù}Õì‹êã£ËHZñ\ªž\RôB/¿ï5ø¸š öxæ‘:à $+ú2°0“æÍlFîýøø‚%€<”sT”ׂGQxøQ å¿ñ‚ÎRÔóÞxpôFˆm—ô ×ÄHžZ¨û žžWNíãàÞ…‰›¤Ã-çm~¸ß…õ…¥N¢Ðù‰ÙÖìyûZK°‚ËòF”­¢j ¶wgºF, å±û˜ãÓ_ѸVpOÖ89\øÿ.Ìÿ]‰]i¹‰±®d…˜¨'÷ùXFÏ—|fJª’Ú¡‘lÝvî>ê7˜Qºþ¨mî'¿óç!U@=3Êèd -ºYž„©Ã†ÏölÓþ†å ÖÐ鳪üüÔeýî:ÿAŸ›^.$ÜV‡Ý=rb}¡mK•Gk6ŒUO2»Y¿” q }}¬í‘¶òsñj«ÆµÐ&ï¾ò“œ”*#‰<=&QŸÇ!L7FGµùö‡©xšÏQCëÔg2p_›Eb“ØFK_U;vÖ.CHÖV(Ó·“]Å Ö’6¯zº:Ü=‰a2–Åãtñ%I‰×†2%G<jð;sÌJÖ‚à·’ðB[¿qߣŽåÅÀLA£Z¹ÂúdêQmÍØÎà‰î[å>†’½ÈpFwžrM7ÉLã¬è­º<ÍöyÐÃ~¼G B÷‘*—µ‡Òoέg©À©ùÎmníù¢²+@ }ÝÑ Ê”¡,H Ø´^sqP#Y ?Ö¤/ï6gÀœ/«¿p‹j22˜W¸òEá<®Æ†1šuºœuTgÿ@o«v1‰&¢ mSjéú…ƒ™µ6 LÔÊb=´FÏÁ#Ý©ö^ƒ2f`¥@Ÿúnþõ]ŒÉ–ËK nnù6 €¸$­ßQ%Žm œ1Ö„–òÕå¿`^´ªýÛ=mï¬yËôÏZg[ó?˜ eÀPAII¾ÍÄ·ùÛ”LóêEoU¦¡+*å¨íd{ ƒ~âýÄBš ¶!À $ò k«@Z•Ë ³¸Ë0Åè2ÂçOýíÔ^ŸBXpøx¶ÖÇi}>uæ<ê‰ÍSÊÅÀ(˜kÚ­ÆU¢z¿Ê-Aˆ*ø°+n!^„¼y?AÕ%óG–ÐÔñmƒÀ_ ë±g]òl…„`ª4îUjî…Åˈi-(M¤aÿGfO¤Dèë½—( Pëhgž„T|}kå3¢¦Ä4Åy¡jí9ˆÏÕ¸¤®t÷x·¤˜ÛÏêdéñHÆC½nœHüˆÍq“ì¼LÙn# ÓæH<…Ó ±­ŸDb&kdNP<°;[d99Î+T™ÿKº¢ÛFdÇ Ôð] ;â—y£°}7%‡âfÜJs‹‚p/1–¥eì^ñ¶˜ÌQQü“Ƴ„¼ÐÑ+3ï!sÇ›c§LÑ8öṃ”ˆÃd2ÌøÐSyìÐÕĨ!‹T÷ yeF€…~ËÜÇ·‹J0±Ìeuœ€ï“Œ‹@­ãòW=F`›EÀbQ¢y·ðíDƒuá5Ô3`Ð¥OÜnÿ;À#ìÙŸl‡N§œ¸<§a]AÉl·ÞdCî´ª5"¹ÞÝZ9jյޫ§Ö´+b+"Px“J_*Ê1‘²èi¡^ŸŒ;ÿeŒ\âU?»SL_’ZÙ-…‚é׺K•Ü»@B–P 5V7+‹¯”Ê+ç¥mT#MšvDßVª¿‚ÈS »hÜGÄäþß@dªt©}¼•t0ÂÄ£i Þ‡7äüguQàz`ØÝJòrùgÚ¤W[à£ôj¾Ù[pWzvG¡%³ÏžFï‰{Ÿ±F¦Å~(û¨B.¢¢¿Í¹¢tk&<¸ÒÝ$‹&m%Û¬ßN¾–Úé UÛŒ† À}7Ç«í2Dj6Àacæÿ]°¶(^€¬ ÝÈ"ñ¶â]!÷iÑLv:°Ð¨Óê ‰*/…úiµŠ÷½|…·ˆÄyr·eÖð»vêHÍÒ4bøé|" eŽÒl±Y2 šÚbÕ`sؤ#ñZ-U_ŠmY k]Ëùo½`uŸ=Ïe!DüͳF†&˜,œÄýy h“ÿ Êàƒh¢F¦XHRßg°Üw“íc–jÒ%yˆ½¬}âüLjòMÌ“±˜*$„‹¨X¹äü#ˆ§ÌCÊê‰w‚¸T) în˜Øo™€+6¾9ìʼnì&MíàÛpÆÌÞn‰pÈýkMjÉsÞQS]<+ô\;FQé$_«=‹š\¢â‘„íB¦¡{BYíGK(?Kürù)”Ü¿ž²Ö'±îgw^ŸîùõXi1“r5 ð)²öõ²óe Cˆg@Ä»õµ¹…7K׃Öp¹à™9çÈ‚ö0ÜÂn/Šü£±>YvYÒÀ'÷?f&Qqznn½ëa&Ù|±=Ø[¤˜Ê9ÌOIrì`{¬™f~FÓðýc9«ìàÐ,ÀÖjsëzýž–Ë^¢Âºa¼.Ýu—œŒ9LsqËUXmÄá§µÙ‚·ÄmÅƋȸùŽ—]œåï{ìò7¿.ñ WÌçYÖÕ¨ì`¯áKùw\/²—'åñ.Ø‚>[ &¡&Uã¡R‰Idãš0€çfºªFþ zƒŒ­=f@«XĶùáØÀ1‚F/t 诰¯£[±Ð—Ah6_O Áqf‹3ÁŸZÛ€ìf9!“ÚLv:èç‘ à¸R¢ û}òi8ñ]h}Ž–¡$à¾%Õš`›]¬¸Í¶ÊæiÔoëi†›a¾ÜªL⡤Π¦#ø?ÝΆÉZ¶Àõö°–6é+n3‹c4‚€XÊ&ËуÀ®¹QùšUôúyåü`–oY I€ˆá¸*oZ¶oº¶ìÏò%å\g„¢ú‹mÁä²A¢|’íÑØÑ¢(Žü>xtÛïn…12ú)ðˆûš>pìܱqž¹È¾©@ó/؇YJP\(E¯4H< ~"0¯ŠQá…;/L›w¶ïçÃóëØjÔ]£šÙòñ}QÐív‘›(_£Ó–#uÖÞzX8u—Øó Íg=ØqÛx!/ØA«ƒ³N‹%¥{*edï¬eÂc‚‡ ¯§ÜjjÀ ŽLªJKî¢åñ0XXšç˜:Ú‚ˆÈÁ„Ë QW!SÇ.¥?:EÍv›ûÙ£´Tö%Î.4@í…ü›\ n4¼,›Tüò8 °Ì|Š\ƒ€¶Å¦¤¤¯vOcn¼€ù·Š¾Pµé!º!?,¸pJÚnÔßÕò³’àYw¦ÛU–Ëvù0€Gf®ò’.Бx‚ã[ìô¶‹w…”$_þžHD?OùJºU l%Κ „S^ÜvçSÂîþì˜ïÝ"d~Y¥ [ȱ­ ¬’ÿV^Çíð¤X¡ÒÓkt&¿•Ï„NÞŧyÃÇ’H ¾Õ³À/Hh7ãXlÞ¡"˜ÓÃ\©6‚’7ŠØÿ\>òý®¼Ü ~š*lŽ+’ı8Ý¥ŠO·yaÐFþ⪠‚ƒ©`-á2tœWü«°mÄÀl¨ü JeäƒC©8ã0Øö~b+zB=–×*ÛçpRxÞ?0¬|¸Üjˆ _iQL±"ES†Ò¹žYG†DZ¨2/NŠÁô{%ö¶×Zj,¿s¶ºß1â+™~þÈFO€ß‡1[Äp õÞæ09¯¼Ô”é_ƒ‹7”>Qþö61…y€|'DTÃV­-Ù5•‘ ×:9–ÈÏV‹K[ùß[«‹S׺=jgÚô^ë;k"DÃÃÕoy&m*³Ó Æv7°“öÀ1“;™ãGíªy¼°ÌãÐÝÌKoH33”Òíg²[IœW!R`SÓ‹þ³u­Ä&ÃúÁ–È%ðtjøñ3ÞÉü —-mXk°‰HÏ€g …¿&áâ„ÎCŽ—Ñ°Õ‹Àû‚¹"[”‡¥£0(ÜG@& NA(VÖÀ—†ý¥mZRÇ%‚q§=‚½‡Æ/LëwÈÑëØÒ¼¶^S%ßÖ Õ5L]€l€€ˆ>êR ¡?rkš’ÝVP·§ãyŒø®òNM±ÜGúà.®v%ÝÚB%Qˆà"¢ žTÉÉÇ>¿«™°zDÓe— ^¦v»÷ÏÅ}hƒfk4ïÃ6(£p þa@Â\¥x<ÒÆÈ ùáQEÎ>zn»Ô–„–´•,qìòùñ’¼GÿJ¯]âO”Oî#@9–qt×[ Ç;Å® =ô«À! »3þ­î¼Ã=X!¢.¶§¬ã?í¥TX—ª«õ²/„üm|@NæÁûÃaºñ’%+\z,dŒz\Àu½Ê-Ø ˆŽîž« >¶-c°+æP;€ê¹å?}ãB I¨ZN×™7%”«± àµÏEúþE»wîã0ïÌ~ò/m'¢®‡E¼8'JÚ› õéšà€rÌ;›·¸XZ‰kêŒ?&ò¹ÎÎ(‰ÝÀïæè•ЭÉé¨{Øæ…Õîë×½F&uìJÝ ­rã° nßVdá᡽d¡ ^ 7 ÐlšTEù&}‚†µ•B\¿÷£ûµ¼`„‚α¨rÇ<ólÔDÇyΈ$9Ü!vqù(ÔFY€¯Vhyb‘*LW6Ÿï–O¢H§åwïÄ#]N~¦²-s! 'Ää[ǡߓ²þ¨7µY•b1ˆ~øqo …ãËDQÚ”óc–O™Š}³Ì(r-Ê=8›p@ ÄfÃå Xí㬣Cî¿SÑ36y±Ïãr°Í¤VÿU3j©á%¢ BˆjÃó\¢ìxºÔKxŒO³˜x ÷¯j×ö+í`Å[›ƒN ”÷ıó–6t$R@¼á¤ÄýKï&}+ÖõÓ=^p™dà‡;˜ñ8Z”UääHcÃßùC5»ŒÿnÞ0‘€ÑÄÖŠ|i}”Lú?d=r×2}ýXiøD`Ç”a˜ù!MÙ÷ç&µ1³ø½LtTÞ­\ uȺôbOÃ7K2œ9q6û²YÊœHêu¤˜À¼ûkÈû¸~:àá¸lY9v$Õ¦A¡Xv4Ä1oR̵þW>û5$™eýÚ!Êþè…É3 #÷cÄ »Ï\B¸V Š5ÝÄ69ŽËàñi¤Äj!ôÏq`w”®m;wŸ‰éHäb{g˜iÊ šv}£(ÕÇT&±jŠ^«Ððåu3n‰Û€‰ö 8Wx•’ ɽúWË.úAÎAÚäñ^}‚¾ñô¾Å ”DzŒwŸ ›ùûÅÈG Å;–>ƽ¿kSÿékX³âë‘ù„Pñ³#~Ö£Bí‹ï=ªGž£äaE/ò¢…<ÊÓ}Æ'u4ÝÒ-Ѳ05í"I]Ê¡¬ôÄ4«œú+°CUFu4vG”|2ë)ùÙ£zÿ“êož‰õà Þ:X@‹Ì-sè ÒÑÝ®ûdpç)¼×ëd—˜z±e4ÎËÖo'r# `ç  l6Ý89 0¢ R§Fù“•’‰Ë/xÍ”üHãs¬èNp,(ˆcúÿV<“÷`TÓ6kòÿwÑHI”×SùJDlúñ&ëŸÂAЗs2ŒR<È?ÈŠúCŠl•³S¬2Š3Áç,6éð0¥&†õ›=Ô€øßÁ÷œ1söà͈_.5~Ôu³+!VP árÐØ´Õs{ì­§h{_–.mЏ˜ "\‚ΧæøG[9ò¹9j¤r»«ƒ\W­åöþ‚Œ©G¥â®ÑÜ_°$Þþèêã{(.º:ù"k8M‘àüÑDƒ7–ˆÜ·‹šä¥ågZ7ÿ,ºÜÈOZ­0ögè<ç½ x£õÌS.Ž}ØPØæ±ml1+’íȦJ¯ïF¾Ž`HÄNa:šêŸ1ë:éh¹³KôåÀq5¯è½ÀPöÇjÕ p6špô? ŠŸé=¤O¬Šw'rÌR,g< ‰`VÎ/90¾ƒI¿¡×º½%±cô¡cÑú(kì?[5¸ÝÉЪ£»nf¢„ú´¨èè ±ò7²²j(lèAa¡×ʽÃV…Üdž öãh¾C»ÂÕM>§ìÍHˆEtŒÜûµ`tñT@£øÕÝÁÇtêiå%Dg‘Òd¥»PW%î<`“{âÉ‘(F/h­ô(¥°Û´CÀSû0•Ð<¢@ŠÐ¯cb\իȲÞ.ÚÊÀ¡tK>Óæ’Ñ2î¼lM½>Y¯ î8ru¦R~ùH~™b¢=Õö˜y±{éÚ®ëÁ¹YCeÿëÎŬ›nk!ÌýnÐÈÒ“æüÑècRôîûë,@ºÍ}ŽMÊ "Ù1óÇÜOEäß± ±Ìì­ÐWÝ4æÞ£›ÙËÅ}™?íÄ_˜s—ÍÄ:J™ú±~«|Ü{濎11ãmbí™øê)Ÿ! üDGªCM­¦Û*ò2T£ªCæmF!²ˆHW£ OWN »Qƒ{LˆÂ™ƒA ´¥j7Eé‘;ˆe*èâ§mà²ÏÑA—š~9ÛÇ–lÌHYTú’' kkÛ–éSÙ¿WÀ4*Ì$½!¹M†I@`£“_Ñ{z=ÑDé¨ÌÌx¹›ôÛE)Q`o°!õÀmœ…ËÚÿyÎ^·z¥ˆ»²ÙÚÄ<ÙŒâýù­˜ÜÿÛˆUý=-J]\|ú­9 B„&}ͼ†êö6êSÇ8ƒ€I’`þü+·`,Æ78F#9"‰yrÛg/¸Yãã¸ßší˜Óß{'uíOòã ê0ǨGóË ,í~½v»Æø´¡NTRÇ|÷÷¯#“+www½œ÷{3€6Ë"ÜOj*‰?®ÉpW}ÚuãE#ÛÆ Lñ?Wnˆfu+O»[ÂT?Û]g5Å2‰Wžà®Rï½cGIRòPDž±Ãx m¸q'ÇÉdñ'”õ_2)ü¼ï%ˆ@û.2᲎IÄ…ö µ”à‹5yÂÖÀCú]Ë”I´8;ØÖ5Eî4Ž>Ú´m{•*&¿B–d tÐæ‹ö#.WkèóX]Œ¬£¤ ¯Ú{]T ¾.23Ê)Oæu¹jìÖh3õ‡þgYx#Š«=ý±BF¢S˜Îœíle PÈtÕS>¶ØÀÛ*²K.Ï—œ»¯ ¤ ŽÊú©ä/!òX °•Oït)‚êÜݸ×ÝŠK€Ut„×+ù/&Íhø«—Ø„ÐÍõwË_$$­b’ÈëbíÁAÙÐ8WµÛÚy ˜ãχú²Ôþ“r$Ê<нÃh,TÉ“¯ø» ÚR« Õiý&Δ+žæõíµâ£ìÌ®NvvÇ Æèç<’Øáް¬×¹–?òGnk–&’˜‡ìÃ+4‡FFžóøuk÷°•ßÂm’ö‘G_‘XóVÖõ \:}©•í ‰Y8^!õ«$]©wŒíAþÒÜÉHâÙ‹"c5ááØPN:«8x€X«k·3Ñ!ÅT_à Âïæ.×cb²ÑêMÊ9ÆŒ!ñlß F4¾Õ¶ºàꦋ´ÎŽ=WM®òÔ7Èd¹>q ™Oº\¥ÓD߀f¤ŠÃ£{ÐMJ¥9N†;U®_W—sÒðc†¦«òä+-ð<Ú3äÒ'*Ih È_Ö¦eôQÞÝ·hôèê¾²²êFÏ,4<”¼æZhøÝ„¡ž…:<=D¶C‚ùºä™¤%e- ¸èÔã1&æ2Œ½›¹G’´ve¿ »&íÈšvˆ›1©¸,Ð¥$m×BþQhߥqT<”ºé7n9C‡þöÔb ³†^ƒŽ2$H8òaÝK%–×ú_ëøÍ;ʼnÌÀ¯ Åå@³•˜º¿OÃïï…jØ|›aJE±SlÜ]$Óf,G¥;W‡Œ]oÇÃ|,ôíÁO¡ÄÓKÉÊ¿“BrƒœÁ°õ_Ø™]O°íx"nê‚ðHwby6GúR#럄¼nÈÖ•§b-†$¿¸¦ÅÅŒy:#Ñ*ñ¬w¾º¦(©åÇNdWòrlC<å³íLÐUíŠ:h«öƒ³xcìL]njCL1pFÞÕh»¹ò|Í"0 ËÕV¢$ú6f¢ª&½Q`c­‹I¹ñŒÑèhDnÒ4Jgb>iß<ˆð®˜à=@I2(e&^FñØ GWÃöv"ï$Ò9Þè öMåûKB1&e.ë§›éð/ÿ,#ìàôþÈ«Ax:šnaOW%$­¾Œ‚Ñ_C5£¬=b²e~µq)#·mý']@ð>kµ0ªKF±ô„3ÿü-l/ƙ︹JhÛÕ0ž$ÿY»žŸ¿Bw¿ãÿi2S@þ“f!‰±ˆâŸèMï  Âœ”ƒ’+EbZhRñ>7ª; è´{ÞKµEÐó§KÝ­á;üg i~.P XÔw«ÜB.À0ٗΠãþ/_v ¾•\ A ån¹ãž Ÿì†ÊÌÖï]%O'š+l¿¹æþy6 IAÚj{)\ªÞdx8Ð7N¯¸›Y.¯ÅÝìÜÕW¥zÜÌúv‹þ߉“=ÛÚùìB •žúZO¯Ü#ÔvsVÏgïú@¯÷UœZƒÆ´ëĽ]õ)©h´öÚ,3ÚžŽ!Xh¥á‰‹é²ê?—*À& -O²Tì¨è Í /‰˜<þD~m²^uމ/\´Ü‡X’ËÝuaJû¿áÌù=¯M3(Q[þŽnñCàëþ @o˜§÷Kt…“Í%s%bÐq£árß}kðØÔÓGðO¸×ˆ¶)_øKh˜æ(p©¦ßƒ3»ìᜈõˆ2Þ¸¬ Öá"¨þyg˜Å„Œj€Çk„ï’f˜õì­¢Ù‹÷½#»–'ª HÙ:@ÑS¿š%Yä¦ÏòòBú¥aù¬ay±”Ö*5ù †Ÿäcb;èbdK¯èê -¹kg¯Y‡$­TmÆŒ ìn­®B×öÏC9²Ö/ Å•rðcØC+°¢OØ(%ýÔ.lì$ízƒjB8úÇ.x)͓װðV~AÖXäKúìhicÌñv .4ŒŒ©ñÑ#y8 /“°à7ÿ* =7a˜ˆ¯ëOjcG½M·œ'“£)}uÈË)£L–nd™&"±Ì;Šü;Ky‹“ô0°„JÏ#T øý 'CÀÇÖîÎ#ð‚dºÁsLrÂs©BdšCìY„Ø…ÓÅWáà%ñL:ã·pUgŒðGæÉêc©,íá)u ÿ7¥j¹rO‘0·ª–,“‡’zŽ~šo·»QyÉéŸ:w£îž’'6—ŽT›o)S4BcyyÞ-¶üwƒ’åÄæÿ?&ñ¡m$â – ‡€+ äzˆÒœ~`m+aP ú× Fÿkõ´ n> hÚÝ­á;ã¬BhH½Žà¸˜ÍÖÁý†ˆüN&þ|+òó½%p£?pµ«ødÌw^ÖP?Ë¿Ò%ùȵõÞ‡f¸±y§ç²p•”ÂsÀ–Gáçx=‘¦üTk¯?oÅ Á7n¨=2íoç¯PK%ÊgxÑÅ&˜ÄÑôÌ]Ï]r½“ؽ®°²Ù䬃?µsùf°†Y;¹<×7þ¨,]•v•19sñYßÂ;¿. ‡¾‰ .mx:ôc°*FcQTÌu>GýhE$yžs%%BJœ¨§¬½q¸Yàk»L–»sRÚ«\ÁXÍOü{$ô}&´–x†·î&´ÏÔ;Ótˆˆr´ÏœDx‰)}J9·ØÜr³ ‘Äf‡÷#í S[ Ïyoï EµïÂGÈ?OBãàzZ˜²q®w‡Ì6Í#Žbœ{(ã¹öÌÌü¹ÔèýwôUgšDæ¾ ‚ð*;²5Ã+on²:kBi pеܰuÁŸK ÕÇ{q-š¶Ö —ÉHÇ; =ý̰_ÚBE ¼”;ØÒÓÞÙl.W±.†­A^ù€ÚìkÜ¥Îhp[†Ï„³éÉ{3´O1pûÈ[)|Å­ú(ÖÌ?ˆã¶þsRÿJàLÂÏeç8ÈDÀ–L¿®â»1îÝß ‰-•²ÆÂ@€ížƒ[ö3§²sœÑvÁZ‰Q}W˜æ×Êõ榘èdŽgùUlªZÇwO*F—[Z·4Š¡æ\žÇ5O3µÀ;‹ž…œ;õ­ÝCÔ\Ó|=,ú‹Dw`¼%#¸á •S~¢lòFUö°ö‚Hÿ$ øä95(é®R4 ñ_¼… «—<°Ôê¡ ²ï’Ÿ:J©“-Ì*1dB¥bPQ¾ù»PÛòÀIF¹ç3¿ùVwüŸÝ3–;|°"Õ©V‘‰¿ÃzÐÆBb˜áí¸Xpâ-m8%8]qdÕ?M-•?‰ÀOÿ'?§íïi0'H¬ IT³%IuG´G6:êÿß ôùE¹ïÑT*t½Ék{?Ë®£@ÄU¼LÖÿsê)´½žÜe–(kŸùÆÛna?óÔ©¥™Ý­á4ÏN‘?%Dn7ÂË_)K騧P”KA³ûÄe‘ž Ù Í“kö íb¼ßpªYI¹V‡wÌuB ðœ;ÑŠwpýœëkr ½gwšÞ¯/?›I\GϦ£H1Ü“á¼MPžQ²öN uÔPöŸÐÝŠ<¯àÖš‡B[aÚóhj»«yŠÃ: ×Ûõm¥6Ø…qÅ èS©­ïâÀ¸{µw~½Î¸À''¼Lѣà ™ÙÎP“iL›¿Û-˜Mþ@¿wÑeqx¥Á`©õÕ9¥ÓÐ׬Ãÿ]ܧl« ™É^ ÚSQùãmXIÊ£> 3 ÑtáãS@4Ã6 ^)c?vIUNÜ+ÉF 4÷¸è‘çU:!ÚjÙÞ-bBdÐb «Ä°&B\¶K ØMRö±&7Þ2‘°2œèþÅÂK¹ŠäÞƒãù¯j5/WèQWXSL‘0=ìË "›=Ž6Èõ rJ—áAëyº¹ …•æeV`V\^;±O5f9¤Ð¢Ác0Êù 7oÞ oÈ\UޝÛCÓ~“©XKä9BªÑ ðbØVíÝhƒhŠÀŽn2Ö¹Xqϳ6j†Œº7åRž¨>ܽýp’¬«Ž9ÍGŽVÆþá‰ËK{¹¶a7ä²y×îyË‘ÍfÞO²¹°ê–W™EÊ3xÔ†ø“B€7 ¤t®ÇZñ䟃«Ç!ú:‡h1¦ŠP¯q–ç·>þ)ÉQ*\7DÝ&ÒýϕߟêÚ0âôx‹&«rýO˜‹ŒÍB¿­3y¡á Ê$s‹¢¨ÈðñÙôW/ÆBÄ6aaN&qàAÉ'ÃÈß•KÑ™\þ€Íyÿƒá§Í—šVsrô\¥~¼[‘ìç ù [þ`ñˆº¾ªí¼¯Š–«Mþ#E¾—ã±-ùߌT£q TP–¯´ô[Îj¥8ºÊäw÷Ä’üz`((M<÷7çaz¨ÓyUkß±±üZ˜â/÷«ó峿‰Í´ø°íÔ›9ãÑÂ}33©¨A´íF çV8ÀËsI†¡íˆ„¢É®5À(T*âmgÍ6Q-°½.œì‡jP°óò*iÜ ÿLP‚‘‡T$‹•7+M/"¬Z_ûø¦mØ{@])AJý0Øç£Jqä2ùG¸mŠu‡°ËºÜÀ¹ÍPì— ¹×†f¿ðiõźȞþ >k¢È¿Rx0ï¬ÝkãT2ƒŽgk6ÆB—?·_McŽ˜[úXZÝÆc_¤µ]øºŸV¡…À?ˆ:Ù•¹dþ!˜LI=¡&}L^Œbuë/x¦AÖ˜lQRŒ5-Wþ‰¬U‡6HÛ+ýÿÁ†P-›E–Mì ΔÀàX~¤„Š~Ùü97sôVG½‘½:ÆÅñ¡hÿ6¬8Š^°yîÏYò% ºÄw7³Hñfµ¥ÀT·”¸ÏÖ“,’]úÿH‹mÖ%çýåüškKÜÅU>A'³›UÉ´gºÒ­2]pã¬NqkŒãó…­qG×ë=®ˆéŸ¶Ú.`Ž¿“zat¤µr‰ˆkôqy»R@/žˆ3#ÀQ‰mza<»7A=#ìãdyP¤¶þé?ïæmì'áYQøæ{Y úˆö»ñUA˜à\¾|Īš}4 ôg‹Lž8h©³&< ²oˆÏÓÞec×>eÊG\#"Œ@玔ú2ØÝŠÕjU‘â~•EJ§Ôn›Ìˆ÷“ð¢<”fzÙѵšß<]pÑMÀ£?¼–¸_ùXQÒ „wÔz=C¶u™¾"FîBár'…N—Ëÿ(üºã ßAË™Yì’%S@–Çh&nmùñt‰¢áèy\`ñ˜¨h$"”[:ïÃ%ï”mKÀð©`Hb hN¡`ŸwhW{y©ù!ÖöÌ'QJLÄ.yþzÐçJ\–!@™{ñUÞ'yÌ. æR&•Û› &0©ßž‰$ñÅw\WG`„ðb¦gD«Y ?Á~>‹ìh,ï;«ª~“d Š•Y´2¹@x ×—qâ”Ë‚;é©çæ…R ‚óÓûV«Œ”L×ìßóS+2‰†O»Þ .k¸íKúèÆ”óÄyÜ™ÀÝS™%¥Ž¬ß,•õ‚Ó”™Ñí%íÓŽhUD;e%¨…ñfSÓ´çk]3Åj4ç º¢Ëëç\G§d3‡ÜÕ_NTĸпq³Í €ý/J²¢çãqftažd ¾öP½ž~¤”:ü5±´Àôãǯ5I6Žä ¿…e5~¢R/'“s…«3êÍÚwÊ1à]HÖ ò/>oótç”üÜ•iøÄ [:Úî•´Jü’aÃ>ÁI6.£)³]Éâæ÷ÿ~ðªÌÅ­ŽæIlJpb)èñðn}GC7¹ƒ_Ѹî‘i¸Èj€1JáúÑ’wr1Ü’NÐÉS°bA 7Q»=}¨FûXÁÖ(2ߺµR~?6]¡•ÔH‰±" ®†|½•÷-|vËG8Çô‡EŸ"å…9½Þ/žT/˜ßµÿ"Ì£ Ó7Ä—ŸÏÆ[!ÁÌY '‚a»–]çL6$b<‹;„ÿ#¢@I㌵sÿlä`G\ž·r=ym7Êë'â+¢:×»çnbˆÄí ¬oø¢oÌ‚)”ñ/+ i ”~úˆâ£q Uì,ºy{/ Ú:+dôŒ÷XÃnF?7à}¹~’`þgS™ë±¾I b–Çl0\ëV] JËÜ LÂUQ ïz!<.VòˆÇ©N”»BÇÆF"¹b YA‘xq/ ‚Ëš½a׃ÿl*l²ÖŽ´Ì±Iho²(»9VY1$‘½ˆ¹{P  Z’ÔHRôI2¸GÍôdÃPáq”¤sŸçÐ^É4‘ÞØõ…Ié¼;¯Ê‚Œt¢ŠFTئé”`yr¾Bi½z…‹Tp7:ÕŒ—¥:˜ÎÙ(޶ð¯îs•…·»ôiûŸ½J„X ›ê®ï>Ýg®™ TºOöu¯bÓÝIºàªš/(¹j¿n¨Ö×E˜ö‹‹ÊZ¾¿qÑÔž×;Þ;“•Š£ï:aâ`‚tùÔ±Îí±t1í£‡A2¹¶¡®D€P­Ý,Ô—ÀÙ]ËðG~ðÿ Pû·zZän8Óí7@¤XM;X½7)¼Ñ¥$ƒ…5vŠª IJ~é¤ç^RX½AòPÞ¿l,)B<£÷wÂñWplsì £qã– PìÀ`nz„ø0xà5¢P:*Ÿ’7·ÎßpÆöÓeYh[†°ÀqÖtËåCù^V“Ø{œ ‹àÀ"%êö…/Ðs’º'¹LÂC¡òµ‰×†«¸ñt«±^ëìÆÀ} :L´½2°=·•OúýÙtÙJŒdªÓWÒ²K…Çw7¦º9 mLè ÑÁ†a|$³®•=ÉœW3™q¯‡0ˆmÂŒTî³²_²ÃJÖêŠÒ÷·I%wªÍa@ßSb_`ÁIc^ ,?ÉŒIDH¥=ØB¤¬_úóꈉvb‹XТ\¬PF3¶]jˆ]"{rý «8Þ=[>üevkªŸOƒ‰˜:ŽñÁOËêd7m_ï¹²2¼m(ÉX×þ¨ñ›ïç$ëøZÛ+ÙFº†hTù–­¹ˆU& Ê°…¥ÈÍãÉF1¢!‘Ò~¼ŸÐ¦ÌôçaEL}ÚH¶áNJO†Oºòåú~Ú+)7-( ßÂã°ïÿM”MÍHÃdO6<¢ï"Ögô öêbBšÜP`Ñ–ާQJ BáÚ°trµä寰opD!k»?D†¿7yÒ2*F½ML§ûÎrö€!³Ý rC£0àËqÓ¹“®šÓ–‚âÝ ¶M~Œe \¤ÀÊá~ŸÁp\\Aågz¾JK6BÅÒMÁˆerÐÔºëª3üÖœ"ï'ИDÚØŒ4­ÅðMi|Ú5­T¹Rè‚âÖþ"ïmñ*wAŸK×ô{(qcu›ðnt¤Ù: ðâx-,†.‡Ï”„Ô†=e Ûõ ÙqŒ%âgǤTµŒge~^ÎI€.=Ãá"¬n)G¢ ÷2©ë …Y‚„s”»¤F¨ ‡C%œ…´:#¦a?቗¥ÛjI?§ÿÃäs+΀¿RåJq8YúÐG¨o YS«ßÂ((HŽSÊ´”CéTÚkU¹ 6ô‘ÿE–”]¨ªU ¨™«äB€Þ.b¾7ÂKa{¥DPàa+Q&~z·õNð¸P”Òyj\+¬—£·B×Vçù{âÓGU!7Çõû/’ª“©„¿•ˆL/ŽI«Lygb;º7¥x¼ƒ­Ûzö•Q‹öšêÒUŸ¿îõÝoEÖùÑô ¼ŸÏÿbÙá‹ø$¥Ñ"ôvr=x)’Y}˜â”pÊþôc­éñÖy«ÙbÂ3<¿°Œ¯™x((nÎW*² Ú3Ÿ‚%8ÌK×ô/qtÀ8úpvˆp jäÑ¢– ¥òíôjÛù^›;ÊÄ„@wº²¿\áO™qýv#é{ò§¸ÎDë÷¨J~ ,×ëú©Û÷Ç Ê¸|­Ý‰¾”þ&ýÉNn•¶Råô·÷/h÷Ô™wn‹ÄzÍõ}-lˆ1¹Ëõ«À"ü7øªÓV#þÎ<©ÄßÈ E×Ôolj‡™Ø÷ÒÌôÿ$jl -BhÁôÿ5æZ}4£ìSöô.íÊì¨ê Õ×QêÁùÿl¾ b 8/6”^Ëh ¥n{Sç3ãH TòcOèDöT1ót@³zêN-Ï7†PnþR*ÊO*ξm|Øâ¯4ú‚§ÑûðIW€m‡–S¯O;šYDè”é:¦[š]6¢¢Roí+‡Äù!¥vÍZ.÷k|-Ììíå6BCÂù„€©ºJø€/ÑÀ¢CR¿k¦¢†{.1,eÄJ¼Á^÷ï¨ùÇ’*’þ‘ºƒ¶c¿«†|Яà±MP1½…°[†£i#³Â;*á_@{NüF¹{󡨵©»}lìVXo¢Ã=7•„eèQë ß_K÷P^­¡ãàGGðÍæ¼AÈ~aFf9;iÒÖFÎKW$½!Ïêqñ– 2­»;¦àö ªÎÔ¯cUþ8ZD¼ð‘ÖþIãk/$ÂVïXÁ\ô«G»§j\3» ¸^?q~*¹ÆCq§Ãg8´òüêÆ‹Ãá,ý¸ë³ Ä5&Rv$A—ÉŽ¥0Ëóõœ_´tr-ï;߽ÖîÓÂÏd»@$KNÇÎfI5  ?מּÖäëCÔ‹–Dýºa”qæõ{"'ˆ•ûÁÓ fà'_ÿx޳²ÝîiÏìÙ=N.—ë…F¯•ÇZ Âæá“?]òØn<Í;–h»‰£”ïÍ[ÒNpêè©ÝºUp9Ñpø.W¥”ó»õ ÛBG 9œöy¤™Ú&®Ü}¸ ¨Ážž¢Vˆý¢XÆþ·4†Y·w{ê¿Å«Ò„)•~-H†ÎiÅýö LÆÓœLà+Æÿuå3ˆßѧéý¡G‡EÚôš€GÆ:Öó¬/Þ_´G\m–ÀpEú”éͥ˳’8‘…Öÿ~B?ç‡üœŠç†Lb†/óûøã†‰g[¿h´ì¤úÆ7(§Š*f9££’ã:/KÇq ÇtjŸÄ5¹'^g{¬Al~²Õi¶[ø;+#{¨øTéKÞ/m¸°h~3š û;=è0ãú&Õ¸ˆ,à‘¬àÜ P7ëúÔ»/¼=ç‰ÕØÂÛD"À&ÙWsÛ´©e?´»+C²d9R̦Øn Î8øÅ0 £SÄ& ˜ªÅ}Ç‹®Ñç=Ψêv3 ƒºTy¼›RΡÂKc¶E/Ä€XczÈß®F¤a•çœ.œÒöÚP¬ˆo+ÿ0’p­ÝÅ/zÓÕš“Ë ¤$¯æòs9¢„È<¡‹Ýç‹®ãe…Û£]\ϲ–ÐÏï rÿEX<‘Øó@PðÄÚc72aÓ³kA¨£–`E„GY}“Á wà4F3S× 9föŠŒ ‡u‹Œ™§(vønA,CQg?.« §(ÇâŽÿ0(y•éq9‚è#î´Â¨âkÿuȲY¼ÿm*ÿD"4à¶ŒX©9òk#@ÊôMªE¦sÈh“hRDëŠýeÉ ›sÈÈ4Hú2㔟"«¡(]׆= Üþ|m)!¹nTúCÈd#_åô™t|Õ7\ðfçâ9Ã!|QGÝ‹vÁÇ¿¬X šðª2 NŽ¢rœ$òzØ·>co"ÿ#ª»‚^d‡¸“ÞaýçÒ]ÉëzÏY€@Ç |ÄôÜËþv0fV W±°MÙåΧÊöù$ ÀÌÙÒQQ¶uò޳NIsBŠèQói‰\ì¤Qþ6‚äñ1Gl9Ì…â싳 ð½FÐþùðèrOU´P‚ôªr§Pic»‡¿¼ ]Ùf Šú‡$…°®'Ç8ìB}±]€/Þ0ȰõñÌÓÂLÐ;ùš•u¯ú_2u{ïgZŽ–²…@Lá“s«@5Æ'ó„èO¼h%É{ÅÊG+#""o7ÔhÅ.ÌQ2o°Ú¾FŠt75ÌãGC{Cî×Çôsð6iCÂØ‹ú§×¼€‚"bG9 ‹Ù£ßÚ·àÁù&éC¼M¾¬?Jú6Cgø.­>4ÒýLà ÙÙìÃ3rËÌLKݶw²Ò]TØáÃ\—( Œ‹fǧ£éh[õØÚôm “¬ÝV…¥±¨`°íÒ­ÈÈ’<`÷ç}1PÈjE€ VfnÓ¢–¥Ká_«¥ù‰¶ãÄö¸uàÈR`n˺^0ÒçôÄJÅ[VruZÏÊ)ßfÜóZAS û””¨hH&(³e× 9È9m¥ø¬ä}¹ÁúT{΃ɕ÷®¢ô~ IíM ±½joá{ sm ½Ò| u‡‡drF%fègAHȼ,Ûï!¯ãáœ8[PDñéË~ ¯2í©r‰HPÞ;\š)à à›Å˜£`‘CœJ¨Q‡éüiÅyÖào9”ñ-}ôϽvÖ°ÝZÞ(–#·ˆÞ„³—>VC Ï4s žº_–PÇæzy¯žgI/_íOî¢?<›cʷؘ{ÉCMô¨Êð§]Àl©? ËñÆê•áç5OÓ;Í®-Baˆ\ѵÊ„®óF{yn+RHåûón…tŒ‰[¶eÌ£z¼YXæÔÑ&ÈKÍå!YÿJuH´ÿDjz“C£³—:‡P˜¬ c?ÔÿÈ¿°ì2$Ñ¥7ÎStYÂEÆö^‚¬¾_ ‚Ç­Áì.-«zL ÈiD¶úÎ%L®vJ]pá‚i/õ“£‚7å>‘<„hé=²Ùß½­Ö‡sš ä›3b—ï×”ø1áÔ³Qð×ÿð&ª´ 訟wù£ë6£?ÊNœl¼»ÙLòö°‡¤EGýIàøLG/ ¦ôY×zi*#RUôj©jd…ª?{XwïTž•“¾ì·MJ‹÷ªźÎ9TÀßk©C‘ëÝ8Ï¥¯zl¦„¹±®B°¢›É¤18Bt|Œ§Aí'VËãÝÍuû™ {Zž¸Ý©î—°=œáäÀ=%oe»J K¢b‹,hJ)Ñ +Ö:KIoÅ%œ²6ÓÅì:ãóg§>^p‡qÆšVŒ‰ÐyN©0]‚tjÕgµÒj*0^±ÖkΗËîéLà¬Ü'~¾™ÜÍ‹–6|¡ìd#f5}½ß"ÛQMæWœÇw!„FU`×"Á@Ò ÉÅÚØ+ñÀA|%S²ç3v„qÇÄb´0Ó©c«k$;2µ-(ß)J·±ž¥Šžð-‹Rá½æ\vÖ +õ§”½ö*Mû`¿ŽyköÁ Ö:`xà9;E1Ó Á¯íq³“ Óý2*ô£U‹Á fã$~­Ìç wõæü–©ñ Í*mK8l ÜØu õá*‘û]¬_Œjp· wɱ.÷çâ´ Ûì¥àÈÕ¬$3 '›p/zLJIú•HP]×ö³%ñ¹ÁDaP‹“€@6f„`ÎÅyŠèN?™¤‹{‡Rç å ›¬`ƒ¤ F'Sáþ—PÐû8–-¦ç¢5W³©Nã}\¸ÆÈ1…UÝÓ‹œ¦ý`aðw}²Áxà˸²z .ø÷[ýGëÈóÊ¡K.'JDP-€»;:ø‡ ˆaÉååêÝûО¨3†ÀiE(ÿ[éÎZ™,Èð¡·oY¯«§ÐDÑ7üMÒd³ƒ‚ßt†R%itöAr(Ï‘„ðBÔã)œ²þ\¶ÏUÈQ4I*‡ˆöëO8CM˜6‰ß˜‡?®óó¥Þióæ=‹–Ä¥Pv/¬RŽDòr4ù@¸ýM¤Wu¸ý5bY¤‘ˬ âŒ°í,;ùÙúœÎ·Ã»ãoM¸ú°éÔˆ÷kñë â·ÁNYÞ2)¾Z’e¬TÀ;ð!—-tÃJkÙX×a¶²!åéŸ .“úEK¡ýª±Qƒ,úq#ØPØ`ß@‚ãfï ›6TdôqJï–ݼE‰lÙð~ABÑnFîŒmFÜ+m9éS vh–‹ôy‰’¨ŒX»ÉãäÇ܇Crɵá¡|§—D—«}UÜóeM½Ü„ç9ÚjÆ Vú¯Ïÿfw[ü§yÿ<¡Óð‡æºsS b;5íé9¨‘´³CÇ~} ¦Þp ÊHøJÓ…Eù©ÏøÔÈŒt©·0ªìùÇÁië@¼Qjt ÿK4* ÎiÆp Gp´,p(ñÖÁÁÓW*â‚ ™_ Sî4Íkز MÞc´P yŸ9ŽÁÉò"Ö<ƒµuUáìº · –‹)]Yî>“¨•ÀXˆ|JW~…£ìwwv}7õq³vuøÞ²ÞJõÂÛQ¯ä©Á:IG†Fq.—î§î¢ZÓt4Á‚O†‹Ç'ǹƮê+£±Î¼•výÕ€AˆXš§É¹~ó“!ªH­7Ñ.4ŒÎ³õåü‹êLVÇŒ´Y|Ìu9M_ká(I·ü-’S!|F¶3"?Qö u7Gf©³iC$ŽÙ“ïM.ŠKÁG’Ò…ý_ º(½˜¢Cüd¢÷o;½‚j¼[¤‰RÒ‹óûÍiñålý$#$-;žÚó^¥Ì룶CYEîˆQvp L“vLW—z½XbòªC‘"¯º àëñJ|0jS»âá‚›††](Z•»Ýq€rµÖ¡€ Dí‹·\¬\ø¼SeŒ±’s¤Ó^&'î¤yÇ¥•âzPòowÈÏ$#VøÞçp¥“®c±x:LÃh&&"H‘Ö¦F :y™f£ƒkzàPÚÈ)‰¿˜â³MK‘D¤dê–e³$ÝyðÏ-»BkÄë‚É5(íU°©Qéˆ`hœsÈLWeÒ9o•§„× zMi•´Ì©åèoè) $,½îÈ]Ïãs !j<ëÏR•О“E–¶p4îä²ÙðIóHŒ… ¡Âí©Å'©$ypÊæp°ÑK(Ð̬´*ìï¼ÓTZÅI©f—ƒT“ôO‡:W¥,6 Ö/ }{i‰:¡ ^l¬É¥ÞAì+«'=ÂÛ* = ‚üóÍéŒP ˆ(¹¶»¯“¾-8è§jT5žñŒÑæðrn:HÁú(hçÿ'µsß›—ùuËjWï0uN+{¡zSn©>é`™nûP«ë‡¬“p:\ÍÃÖ>[O*yò®ù)S[æS™V•Kîk­š¶Á §ŽÜü+‹æXp ç×9Ë&s9*¸bÂT»Ø+ìj/8 z.þƒæâñMáÕEî½GÂK׸™V¹8Ì–÷!C€Ùû„‰°êpŠP/+ß?t“Ûkþ'ÿ8¬Ö5NÍÆÅXy'o<4—3BÆAoÝk¢ì9у@žw•Áˆòþ\;‰âRÑ>·/ ¶À\<¨a´?*’-eJÌ\SR"!”‡9÷çC$X÷ó/肱@òh.ZânðØÚFãØ|6d°tBÊÉ÷Gøò´ßÁݦÈ%ˆŽ•^,q€LqÏ8ÆÝ?ìäq¼À.Å“MÝxĆ&!ºßnÔÜõº¦Çwèb&ª ¦ 5{L/xèâ¬ÐíÞQЮý)A„‘±RJšË.ÕQ![cãlXf©,•W—H?Øã ‰Û§Î‘yN`©ä秦ËKÐ=‘–§(ŽŒX¼}š_º±g`ùˆ·+ÐÞí5¸K*9oÄêBíCß ~±;My%™J'h¤0†4/ ‡0c¨¿Vhh‘‹í4ä’ai¸ÍfeíÄ0Xžßï5]þwcϤB…$ª 2Ù>†ó7&›¬Î‡âÎ?~½/Q|N²IÆó!üxŠÕ4¯0°w¹Ô¹¤Þr{ÀV‹ÃV`Ô;Ý[ú÷T/?5ÕxGÐñ4N0‹cL$ÐÂü=Ú¤o©¿®½&æz’4ú¹Œ‹áÃík[#,‚È'1Ú‚Td3¼’Ý“>Í3õàÅ,÷ rU¤íEÂ)V¯Øf`í]EL–l÷bùê®·î¯èÒ0m¯ 9ͯ¯TÐyžé•Ýšó|a±o¥i¸MÂOô©×MG¿ç@ËØAĄɤ³-ž^s¹Bv•B`ú*Yme2S2>§cÃbóëJ&®dõ¨1FU÷Q~ÌhÝ$ÛŠ—å^v‘'úñ&Žþ¸1G;#½˜ZŠx ¶8ã¿C­#‘ ÐÌhõÌ,ƒ°gZÅó’2÷âÈQx£Ô. #Ôýé.ž šõOx†BAO â š;ÀÌ€ŒtEº=7Ϻ2<)F¬çž;"ñ3¤?‚º ïwó±eÊä^Ý5•¾f$Ù¹DË n`âä±ç}pWÇ5ò¼¼k¼K x:£ôpSbï]V€htÀO ôôBR/ýOG —fÕK˜P®jk3MÐgéø 7€=ÔÐLή©Á½×àÞ¯HÑñʉéYÏIcU3‹˜­ ÿŸ©ü—ˆ«ÜðˆQè©6¢Þ—Õy4=+× ßVpò’ âçú€Æ°ó”ÓhžÍÛœÑzMQdX(ÝÂO/Y(˜ýÇ‹ؼºfâ¥Oì°‹Eú[CL@_ã&Æ5€25XŸ˜œ…hðéUûÝ*ˆ_bA8O7ä¬"BÓH,Ú‡Pÿʾë{^®Ÿ±­Gz7"ÚÝ Ûÿ~º5"{7µ7ð¡ñ'Òò•ö»OLYŠ@v¨ÍˆƒñI E­ ”Îè­WÉHþƒ¡ÑŸõXÅS½x&­Á½B°ÑHœ~8ŽÅ/ßêâqÍÅ7B?ähÔîÄKQ@å ±™Ò–ŸU×ѾÇ«ÿWä™p}B ×[‡wN‹iLÚïhdi–i°eÖJÖâºh¬8¤ùüù{[’ä퇷gYá»Æs•£@6÷QøÌº|ÿS8šú6Mžs øgÚb‚6cÜ +÷5öÝ©ƒ5îfˆN@’rý®8tž‚ åNÌñ—º ÔÕúSkJxŽå€‹y§'.°Z7 kõÏüɃ¼‡×‘$!âÞ`GÚóŒYs€dq†Nb5Cç˜ò‹û‚‹“f72ç5œ`ïÜ*ÄÑ|&'ø¡GÈÚñªFEÐ/¡zsØÂz¬ž¢J¢çì'â+€k _,“åøÀÛ€l Žû!p¬ŸAR9™.\Ç~ÊŽ‘ä±ÌM¤Am§“?(0ؼ ™TŸÿ&߯ ¯Á#UÅ×?öÕKÔ7j<`ÒаW£.ìJm0(L¿v+Ð(Ó×ö^Õ(jµfC²îŒµðE34Šo%²þ…@"Žr“' yÍh'5µÂ8m².„¡$i»‘ l' ïÊùˆà6íí‡ã§o°‰lC8ê+ÓßD«·˜nkª^œØ3Ÿñ±xp>cÓ@"Qù¡Gªunå%XM$OS1—¹Óz¿ÎLª ‰ûåH/kuZ<ŒEãÙzÓ êúäѸ‹hd¼¬È/rÊ%¬K>ô[íº;³‡åŸÇä"¥¥ ¬ìûÜÎïÐçM…?³ 'fñòx°¯Ï ~4mAɆeÊ—Ép‘j“¿·ahu©ß…ÂÙE¿ð¨ÔÛŒ¼éw7rî³ôÿoA+¦e:)|⸹5ªÕ~Øé9˜Ôåܳs,q¬RO O… ëgóêúÜ1°fH¹7•Vcƒ}V›MæW]¢Ü þä ͉©’s¤0ÿZbË…Ü ÿ þ¦ô%·ƒA ýÑ!„T¢B7Í1cgÖ½–(¸Ofrøòƒ·Óš…Ô·í^„¦Ë{K§ï ·é@*û’|Ù1)EÚ=õ-ò胓âJ™p8c,j•ÜÓ«>v7Γ=ØÕ@à¨7¶1fý4ì𤋡@å /¨pD3†¤†°ÈIª~äöÈ%ŸéGÁs–ã$>û&àœú5\DH ÕœNâáÄjRáÞÆÆ4çò0éB6&3 ºá©tï;rŒVŠþ’z¾1Å[5®TÿRóì>!ºDâõå%Ô™(U7bH4ä5B›Gþ£D8ÄÕ0ŒNz±H’#²OGžÐ8s)¿ÉsAvbºL<ÉÈ ÿxÑúì˜j( #j¢gÒÚ웕ñ&èÉÏÔ¾Úõ‚ù‰–uA&2Ë—¡0‹2ü%7¢xŽ𲤷€{­vbÚ3Ò';™ø6x™L¬=»Ï¤” ö^<ôÚÔr€>G/¡Ý×{,2Q+³ÈÖ¤FÉi¥íÞ±}/¬°4.âR_€s®dL–ø¨ÑŽïQLZÚ±ÈíÚgtL‚5d˜ˆ.2Ø`EBìº H Àñ<'Cb-´LÞ ßDO<ÚV˜ -þ‰2ï<¤¹#SFÛnõ#Ñ“óhG±Ëå™VѼΠÈ}@7Ìþ¶ã«@Y)†F kÅ[³zs?ö,°Ê&¶mÌ‚²}Ôì{†0fGø¡ þn7”töLPÍh;V1Àr´|t6ÀRmÉ {rx«¦ù ?|jMžö…%“ä¤h†oTY¦S”Ò•‚´z0ZçÑ  S–i]©áZj¦€ÚD6/wì‹Ãiltt³¼ìßäüç,ŸžÙèÙ³0‘¨£ÛMŸâWy\Çâ-=X¨y+ç|쬵àrÊHå ö޽ÔÛt†i„zfÑñøn]¾³wA¡B”LçÌ%÷3˜pŒí·Þ—ol÷»N/åì«þžÌP+Ð…¥'äù-÷5cµª–‰>,`ë:&T%ëqkGþ¨1RÓ€ôOõÝ—7$¯·vÔó–ar”tÚ` 3{ÜÙ²gµœÝûÔRyx褹jÃÓ05_YªÄ‹ýtoÄ{ÍxNdˆõë­ÌÊŸê9Þ¡¥†Š¯ã}Mtã?À𫘗ì·’ëˆìÆbQÊ;z²OáLgæã6>+)u³ØÇZÉø9JQ¦¿KÚbê¦=6€©³‡Ô údºñ6h'CºÛÀA&]¡Úý«€M JBÂö× 0òß4à=ºj;¡‰Ä{vÀÜD ÷V_9´5?À¤¤”I"¶Ge(è?¼Ç¡=ðe\,Ž˜Œ¬sH‰J+^Q`ãOõä_'¿(ß±¡ãM4BûîådØVÊ,ðC]YÂÑ;º®.¥x¼#u¹ }0câÝêN$WÇkž)dbR8›°.`øîjcªã«èô6¬ÆïØCE8µâUÌòhúä ÖŠXyÅòS½ù_ÔEö¢@ÌçÌÂsÔ*~2Brš“þó¤Ž#}}ý§7´ºîW âãï!1—¦²Ú8äʸa”†kÓp2†J@×Ôx×½ªR‚¿ëµ¡` {+ín‚uJcq|v´IœvïUô£¾TDƒí9¸´¥¾î*†ª™cJ±‘»Bt?ÌQ=4 ·tºíÃþ¨`+‚_Ï¢`µCSD\KüqÐdªâ¤±§’hiûUT^æOQWÒh@ä7u'¨¼ ZJw<‚ÓŒÆÈl¦%Gü b<«Ãþ– ¶2³ ÐÐ;×4Ž7Œó™žY¨>¤H>M9á4÷* 6·ŠéÀ ïyõÿ1×JˆY¡?QôóåÕ2mĘàÿdn%ìq¹ƒŒs£”D¯ž ‹|Q2viÇnÝÀ©[X«û´?NÊŽ†%8YuÎ{*$íùxû!'sZËnÆÏU£—MŸ¥Ž¬ÛöOåvµY£Rp¹’NÅZ[E&宨fpY˜íëG.îÝËÉ9lÛGj4Ýy¥ýnÔþoÒ¤éø©a“?‰sfX¾äÏP³ƒçÑdI“ÞØˆ«_Î@_ÕÃÒ§ÍÓ ­‰Œgµ_pgœ3Å~9ít¡"O%V›Q¹â [ú'“;9¹!´§¯<áRßDÊÍ ¼y§)"ŽÄ˜Ž›àÓo¹Äánö¿F·Hû&oÜø£Bæ!¯m ‰$4èÉÅÌ`.ñŹ"ïÛÓϘˆD¹TžêÚ)Óãž¶óŸ¼?¬‹;†«:ź,Í/¦²4ÉŒÇßþ¢¾Fµr‚ĵ8j´ “‚àË+W«Éõ2‚á£Ö}0;K‰UE*`‚ÐdÝ ;!¼©gž<ÉäÌHàÓT°w‘f\-̱6êšîÚ4·¹‘Žîi"–fh Þ±€º°Ç)¡ ;²à@¯°ÄXEíá+P"hf½ät[snÈâ h¼Ï† O€”Þ|{+ÏILy‚ŸuŒôAçv•níDÍÌséu½èŸ~hˆÚnÜ´ŠÚ®°9"”…Áwñ©A ³M6ÒÝ5ª%&e÷Å›#܈ŀ ‚³÷Tݦ,(*ME_ ½€žH¬ðó§,oox½·vPXÖ¯í#lg{À£ì²²Qä»f'‚èIì´žJkúww¬†')ÇúB||l4ó bW¢b¨Ì]ŒWì7åÊòáUÐv({@Ò‘0"ˬøK¸°žë’í~Èõ¿?6m›Zlê…S ”Ì\F e<öúÔðWwªcDp˜Áþ €Z˜¾Ê£ã–µ‚®ãT—š,‹Ý´Z°Û¯cê1þ•RˆÙV×^7Ž:¨+àÝ4Fî4 ¾2›BÕŽ…< ·tc½3«'üÌ÷Ü EóÉ]ƒ“@Q(Ï;Ù§€/ô7™Ðï‘MZ ^ÎÒšì\”£ž)>Ò,öT…È n~ _—Þò´µm®Ïú™Ô.ïÛ àa³Øý·OÀÍñr^”p8²ji±K°Ñ…µ´äûˆ”Ûÿ5ÙwQ·:ú‰Î;‰iâ|ð‚W¾¸p8uKÀ¦ÑUø>|â{%wÚ›Qà«é 'íVVd³‹ºi³¢¼ÎƒÝïZÜΘÍýõP/«ë²—iq$!=3Ú4ÚÐ)ZË„-96Óõíªo£Eª€hÛ筬̿Òâ¨PÇ@_w†’/ìâ&!92ÝÐâ:L.ùÜAÅiÎr²ùÕ… ìöRðvIØØøvC‹ Êò”ç¾}ˆá©šxüŒZ ¨‰¸W;½õ™˜¶µçoPå©Ê˜†ÛxA¶=Èskp#\Ýfý]ùð‹‘ _§™~0…BI¤ê;¸œÔ¶è»Í6È6]|à¨7¿ŽìJ"颼~A~!y£óãÇJÿ%­aZE¡’ºÓ½‡™«µ–2¸†Ÿ‘^h<~CIåÝ+°ß³}ƒ=ÕÅxåË3D¡èÌ=à`¤LÇ ûd=ÛV(üã`ÐÅíR;ûŒ´PÚï¥WÙõ¢ê5Ï2]g+:Ý¥zkÊ. ÄËÍBIVÑ=™k1éJ£æ)S^\3Eºñ^¯ð£²»kÕC"x0<£ogüÑi’# /SƒI6ƒ˜€-IžÍé·º=Ý b)]s¡v!¡ðä°ƒ €§ôàiüØÛexí…Ž 9lf‡ª¼‹ÂrÙÕ¸ƒÄ®ý íog9Ìèd/n$$„.•{s½®æ_bøP{Á›/27™“UÅ{Ú@Ml^ãa]~ZÁû6$Ä×ÔžJïôOËoCöÀñ•žWö¤™XG©Õ”¬«*Ø»!9H%ît ³ÚjEi¿>•¸ hËØ˜ý‘ß¼Ù1̹ÝxV ùÊ‹^y*ÛM®¥šÇ7¤YW£ý5‚æÎJj>?5yàcé®V×v²8®“ l¤ÿOIk[0àTŒó5/ÅSIfÖçÔñ£^÷¾ ]ݘzªP2Da›Äß>ûà7-'Ì%dŸÆ‡$ˆ)cÓ8ȵµéîŒ;âS]Gáž…ó±÷Ià5˜Ñ')Õ—ú¹ãÑ>1›žé †¨ =é/Žsù1“ÒH÷ЧÿáKÑ´hí+L]„%f ïæžü¯Žh5\a0}¹UÅ“”µ™ 8T™•‚eT„hO”f`üÀö”÷~Öò«V‚å=wh*ÓüÃËìWF" oþ>Éëw[õVÿ^Xˆ®wêóôõüM±]?Ü ÂprÐ1ÂFªÕ{„·V(9ÚÊ n¾èÇ.ä¼|Y£æÜ6^A¨WÁµï™w#瀶Œx<ÏiNˆ–)ëŸ7¼·¢$n’­Ê‹‰æMVYǓ鸤[-ì‚»muá—Œº ØWÇýáïXu^`Ÿ‹ 6ÍhC”P·Òµ…s“½é’è}hÇXÞ%¾œ`rê’­Šu'Ô_€ø–'é͹ÔYF[°»±ÎK ý´% 'Cª”EÅè}úLaì?žß†£K>#÷!ùߺÅzWˆ;çÌW«˜Z‡8„ç‚`óâ…ˆ[#ø¨úÜîöÕÜwûD˃•¥ÀÀ¬-jó9±FÎ÷ä}Ï–\õè1=-±þ.µá‘÷cüOýôÀÝ¡ù¯X®â¤“r„Eø $‰Ú­qHÍÍA,Œf‚ÃMÁC ìüU¯‚èêáÉê¥ œcƒ õÁg<ëlÑÑ–ob3DT^¹ ·{`ßLB›yÊŸz¨Ç™¨**†Í¡-.Í-÷ß B{n'@Ÿkt–.‘r†Z©j¸¸érG‘Ôœäü6ÎeËp¾àÃ#0ÛÞ½ðKv¢}m§nPFS¿nŸµ.§Ì9LÕ3¤ iÍM¥˜•š é(¯Žø‚$Ð7Ûú9S3òôƒ„mÓ‰ÒMRˆÙµh‹\¡‘õõA!Øf­´Z ¬};')LYl•ÞTÛ•™LtÌëô9\ „ûl3$§Ù¼Œ·Ö±ør×S¿Á޳Eu—%Pµ"wËx7ÓîÉYPFøŽ³ÚäЋï—`së–ýPã›j;™`ýxnĪM»êoªðþ2žè Ü8ࢣ Û…1¤k;•B ?“ïí!©¬9Þi;”=™GLŸ$Aø3XsÐǧ sÇ ßgÕYË”d•¥f“μ˜´«~…êìÇÞëÇú?ê<+mëwÙôá&¨éT]ȹÉ,ð°Ï#Í̲bÓÛ‚¦èTǹüõïÝéò0›=/+®~…nbè?¼Â3eè»ÊGÉ™©ƒpz¢îIÍ Ó ’Ñ å¹ƒN†(FˆíÐ÷µ}³g®DÔ.Õf· óÜÊn—°ÔyÍ5¿¿dÚŸù[”Ø XMz„M˜7äï­ö¼'¢ªŠ¾iæîg±1Ê›‚ã—lP•X©hºìZtYÖÝ‘T%Muu a²r í±jŠã²/*Œ@ ,4ãwɲÿnÌú¶>®L‘$“*ÐI-À·F|þñãü8ªš‘<$Iºúê¡·{P.ØNõZSHú.@•ÊÓlºÓ—S',„”6;‚êø¿¦dÜ ŽØ€-f¼­šÉ^NCè÷êxt\ðÆË/·*þ=Ü¢äE´äü€¦5¬ÿ7T‰csL_¸ ·yÌÿk9ewòà «rpŸéa'ÄõðgËn[µÙpp3Ëo«6šЂv­óš“×:Ù¡Y(¬'£º†þžŸØ^ÏšêI <&'œM%ïevÑMKÀ_ð{‘?žás¿»Âº‘ÔsNc³EÓê¹O82ÿsJðüÍÝÏÐ8¯mé6Þ0ijç˜bÏ N&Dð‹Êx´tvY ¶¬-(Ž(/  Íx]Ì&?ʉ¼»Ú"<—y•Ñâ?Œ]á†ö8¤RËpwi"SóïruÒ‹§ÿ2âo2ªev&&@Éӛ˛tl]Î?öœ´µö1ñC¦þ­ÎçÏØ»ê¬aÚÕ¾·s'Ϧ7ê¡ÿ+­ýúºe¾~þªšùý_?¤ çØ0T~­ðÿ+wïŸJÁj_?~¿VëGÃМ|;?ê뿾HóäܱðôêêõtíZð`©ý]wÏÜ{çÔpëwÏè³õo<ù4ß|÷¯ÕÙfüþ¢ÿ¡3äÓß«¨ÏÏêóìø—Û›Ö=‚äu1ø  •"_WSVÍžDž¶|Ž“‡ƒº“ŒùDw¡qùéNHãüÌŸúR½iiížT&@2Ê–-4ImŒÑ$‚SÓ´yx¿ Ю¾YýUÂø¦ñ˜®V£ó~øt÷Ubå%õ‡óÂÙ%}èí7¯°æSâÛD~yõS:w…òRê˜ïc«ì¥äò'd(ÇØúÇ¢iÑÖ¾ßs‘mKÁsœöÄÎ,âhª¡v=û{TD'No5‘/¸5í±if}x¡­Íæ\¶&¬AšâÇuÎÿ9" XvÁ·0te5+P‚žß‘8?âHQ²Î°uÇõ܈Ś¡%Éojwd¼Ô¸0˜7ýRëÏ®•J2 qïÛ•F_o6§ÿM•­ÎIÖÓZI[‚%oö †>ø–ÿ¥Õ/÷Z2ɨ’ ¹Ó°¶9G^ÆÓ&O1ˆA gwvÜ6k6;O''e?)Gï%hWä}Éæ. b¾N /ãº> ÕÒs!à’Æ<9=ÿ8fÿC7ϲ>!ú#¢*~¡Š2º' T»®™ù&Ü)R88ƒM[ÃÎË<ð«O´'[â–‘¶,€K*7Ö”L­dÄæA;ò1§œ%í¨K ”†¬j=ñºÂÕÓhQ<—M›‚X‚©˜þG”@o–¸LãÁØ,r%íß©yKg¦Izz´ø¢ê=OïÉnv¥Ï‡s e ×fqCÄ û·rîï⃶Y¹~Ó!mÄÖ{IyþŽíw1莜§´wåœîAzq.”öý~;k‹@¸v²@J²±Žq—7ïÂÍ3d¢È‰jéæTpnÚÉ!h–Ea üMd±V†•²3þm1÷ìÌ:³pˆq’øœÄtKãPcâ«w/óËùM’í³Ö?!Y8â{è`œ¶v8‰¼lÊxnœ´ðjí+§øº[uA¨è©A–¿ƒÜèQ@»ñÔY`§‚ë’0c±ŒV }1ú¢;ݶ޲ØÉÛ×q’U&ª:):͆-–ùÎ,yµ«®¡ÎxÅöqg8fæ§÷‰E—l¯²‰Êy“b•VÇ<Ðj<’K+´xË,ÀÉi0‚ ô1ž#Wžx OÑ)êÅ0â‹~·-„ÊÐ"*{eÃCÇ Éâ ¤ ¤ïìéQÖý<ÍtõTÝ9çð•ÛMI«ÿDQ¤†ÒòL¤Ù9tQÞ5…`Ôq×±Së•ÞËüD4Ûß ¨¶þìjOþ‘0·’L°,ÉFQñu·åßXä2 ÀÕh¾H½N®Z¹ ±÷ðÙ*shU14T&pÔÄâɳòV$ô.C_éH™·*Àܳj\ÖϤoèæÆ#v:Âò@‘*=k¤vé‚\(Q&£§3ºÑPÞ#QB‹–"•xËÂóÓp{°G©­éø¡D%Câgm×ò†^ŒOQh{ºÍ¼*šÅDOh_ FïbcKòäï“Bü„h×›ÌÒÊÅyh™¹á{kÈÞ“9’é!j²Ó¼Pñ~f=³)Ÿþ¹i²¥åö‰®Ï=wÕ˜dnŠ;UH›È|É./‘‹ih@óöq€0ݘy”:ãÁ™¦pÄrØÜŸÈ• B\…ЀܗnÏà êŒHëµq¯!»J‚°]_¼Ë¼xC´Ú³;òz?g‚m¢ÍݰÑNP ë–øì]å(ò0žç, ë„s pk*lW©Ž"Õ$tiZ°p«80+Èlη¹ºSŽ;dž>¯WÕA×1”¼^Š?úí­³° 2¾=ˆêÓæ”É»':VŠúHZª¿ý7ô JEž 르7Øù…§††ö×hGçŠè¿)³ÜS!‰Ã÷ ïV3IRñvÇ}vpéøÎ9}ySè'ï®kÁÅ%]4©Áæíì†- é<ˆÿ€¸ÉD*Þã謣Յº°M敉Xø‡'J;å+ ¾5áf&œòÐ1n ]‘7)]”±#¨+¹;ãmÅÿ±j~YÏùMx¥VxQÎqœJ[óü¡6½g#Èí¢N7ÅW{ÙkcÑ· SJ ]¢«¶A45Ë›ÏNãžŇºêF¬¡ç¿Å"µZQ Âÿz˜wÛ¡’*2$÷¦de¿f³y?¸élAK¿Õh¤zy*d îNÚ”zJ%ÀÄw‹ IÛ̶˜³2i}èú>hÑÐ ²‚°Ú ­ñ2"Z|ër|ÈO犰аª¹×( #ø¥äêf‡=jzc§¸‚j!h¿‰v8ë$¿J,O&qw—lqDñµ•qä\üöMú£B›õȺn/´- µ…¸:‰Éð†ý‘#`.`­0 §ÁmƒåßÚp(ŒKÛÜí?’^DJ'nLyçíýqm8zòè?7¢úóuv+‡›Ô«šÈ̉ՔÜ2èYYbÜl_?ý·ÎæøhšÔzÃ…ÅÈÛt°G4Ídu‘ZvvDi§«1K|ØÔ1ô]Óøíû^€Øº=ÀÑw®¥†¨¬ê|£ŽT¡«Ëƒ¸®ˆ'‚÷ÕD·¾-uqmÂ2¥K•aíÅ €eo¬%¹—ç/ ¹˜–:ì–ƒÿàmFIÊÌãúÒ~`ßj°VX[°ç¯™+7<6þ[Jêö.îIuÖN¸Ãmˆ=²ÎrÉ ' í¢`?ÞÍ–A‚IØ_y‚&éNêØÅEÔ¤5;=‰ŒZê\ã?ÔDaŒEYD„tÁI‚@ ‰Ñ Õ )*&AÄjÔGÁßvÌ ‹´\Ûܲ~N¦™@JëA¸´àŽ~œÊviÉMdaŒo0½jgÈæ«3Çí!þDj¤¶DØà‡ŽBJÑ;á"ó ˜F„´M„R‡vø /×Z#¸ bÒºÀ]bàz'ÂgŠ'ýp‰»ol%*о‰üD3âü‚‚qJ…ÚÞ‰|¬HÝ<™¡ýxzJ`6ê¶zÀXŽ-VGeÆ“‡ÓpgEÐé§EOÎÛšt¡4¿¼ZXT/ãhT§`´Ä÷È]>j+l¡µÆ²±Z³ýþÊÜ´¬i`ó/ºÿEI;®Tªñ—o) †Éj9H÷ÆÂ¿oã;ŠÿmŒ0Ø}ÚÉÿI;ÐBÉ–\îŽKsR °;,ú( ºÅ¸´×%ŸaàŽŠ¾@ÎÕ9y‡G¢±!á ô4üãy4±‚‰7D“8ŠøŽ;MB†,9×èÎ Â7Õ3O@}²$ÙÏéX¼yâi5ée“ "“yF ›nygý„îqp{Ó€Á»h§hDÓ®”>¢CKu4¨éAz´v Væe&‡ÀC3Ü5Y¡ˆ}@.íË)œÑÕX« i¬¥Z½<÷Ó®àbjšî_Q¢M˜ ÎcJ©=DÇ·rŽ®WøX´ë\\ý]ØÈ¾>”¢GQÎÀ?Æ,äÁ4Á+ºhkΦ(phxQDGänòrµûòÚM3¢íݳ¦ùµ¤s`Lð+Ä®t;K禞©Ã”<<¸çYs|¦YS‹jãÏ7ÆtÍùº¬Û¬õ 0ó5—ŠF¾5YÒz¦D+§Ê™Ú¼2+Ò½þÃÒdd…ø„ s'•K¹·œÚS¤8Bݤ¶@R¸Éˆ‡7ÌG›Ó‘´²Ë,% È’©öM< 6TµÑ#‹A t§†òCrnq“`æã¿¢O‘„ û=¥odëã?ä“$vvnÿù£‡÷÷'"øÛͦfœê¤ètvL×Ú}ƒ?VøöþÇ·frw3õð=ÖþdY½: ¿˜à[çцå~ÅÜN¾­¬Y^ûøå ³héÀ¸gR´E7#nr–®’RSBÂNÇëýÞ­µFEpé |5µ¤Ý´1t_×S§-èCiB){} 97¦›š³Ý‰÷Ö}ò!ÜH$—dR:+(ÙyB&õY¼{Ý1"Ofvœ<ÑtSägJÄø©¿™"ǘˆáïÌ] ?$“—Œ«¨Ñ,êÃ?¨œ†l& Oà ÀuÜš&t³èÊiÑýcg%– n²@ŸF6±Ã V„®Õh^ãté‚.vè+Єõˆ‘íjd" áÿ*^ób[+ygÆgiA›Ì%;Šˆøß‘± øœò9) úÞ·ËŸbóTÐôÏÊ;h„­ßúÓ›{ÃNŒ¥ÉáÓJxÅýRËÅ¿$E­ÚÐ~_ð?]ðÐêæ…wVVq\ÛRï›Hv×bmá> ‚0(¦"±ˆm^˜_?æ÷u¤IbæØþãÓ@UŒ¥=í=€)ò3Ýj—ªâ£®L#…>öb£†p‹{?j`æðΖy$€‚Ó Ï8œ`-AÂò^ü׿«èFfîʹ[Àþ½Å0z>>,4êˆOk-FŽÙ~ƒzTj?ƒ õ§µò7gK¤Ç»4Nßx\‡¡ŸÐ™F£[nö$é'jöލ =½jMVíÏñ¾^t%ø_¹Í‚Œ'ùF›z~ùÿ°àÅ6‘ ˆÇ¦¦ 2”ˆ"û÷.â©PÓQQ?t‘˥ѪûÀ¢óëißnVÖæ‹ «æ ó©©é¨y [wýÿAÀ.¿jO÷&›y\Æ=ªUš±CV 6^z¾“+Ãù ¸ ;&PúË ô4JàÖ×Jõˆ£qwî§§d±ÔÀÎUüCŠÿ=`Å[%IfÞ¥ŸKnIÏíÆ‰e}¡†ú…Û¾ýâÆä;½VØz¼`Åšá8VvrÌS›ålÔ<§ø¥âZÄL÷`mRàíÝÝK»9wR]â½–Üž·a/Ëä> ‚M`YÖ'Ú´5‘Ûœ¦zŸë]Ä‚/Òmdk™²¼° ¤e~ N:Ûuö=þªÈTü#B‚ ä7niÀ!hR© 1•¶ÊY5¡ð\;þQ€ä+ ºl®þØ¿_1·º­‚ÿ>E^óôëÂþ®€VÑ•0+a‹¡º/ÿH&azö’lÏÔ¿4 1`Š¥ðD¢Âµ gáÊ­Hck§<Ô÷7é“>@­Cør’À‚뵌ª‰Xýë«Ã1f+cQ¾9óÓÕSÝKÐ.Ý66¬y§Åc‹ó,ó+“9‘A+š˜=©w%xÓ:R8~£A/Ýõß¼L…ÁÂísV‰^\èz©I™ a¡ª¿‹çæªØï Â*áÔ ý'—ö7¢Q˜«˜¤®>{ÝPru}(gn@úuê>xÜŽkóÇ ­a•áÄ0X;_oÌm6ϰáŒÐð§þ߈ŠTÊ)üã,7—œvFÅÌζÛ@\«ÃågèÅ–f5]<º£^,5 ø‚rÚµ,î¦½Š£ôÐlʼBc÷}Ð.§DšÞ¼†ß\;?¿¬˜¹qhóŠBëù×vÞý†nl§±Ïú•Âa8­v% ¸\EïºãŽyË¥.SŽ› µ'¡åê £TÒk(y.øù/Rˆ·œyȈ´CJ³"&ʵ^$ñÍÓ”6²âÉ›cLš{ð›&iî6š±ìª·Í›±C};}MÆ å((bñ¥Û¾LJfW±cȇmÌ•©ßÙ%µSQR¥hÿF²¼Jß4,p³›­óZ©Z¯Œù¶„øËý#^V ƒNÌ$£ÕCCÝ÷Ln¢Rö †V)b ¢î8Šñ¬N7PöphÔmØÜÙn&ߥ<‘¤Æq×6&«K7^>£ÅBÓIï?ÖÚQÅÌÄ.ècá8q6ª¿rÞvà¥à Ù®†:RÌkÑ„*¥E›Ü"½ö&\‹Qª ÒÌŒkK±‘KÑbó§ßÌ"7ŠëÚóM¼üjñÊ ÌQÍUðì·U&£?Ül†“›Û3s"XÉ ÿ øÞÂÝ`¨~ í9qì‘æcg îð~`—‰ÞDà—Âì`‡ÆkðŒŸDÍa¤ÅÙ˜Â3~»~åt•È x`±ÅêÉKe‰ýöÙ€ =ia¼DÜ&$#vŽx½|BNµbzs+G™¼]§z˜s1íßw~>v"•–×Ù‡êÈn"dÎ’íãpǃ&i2¬"ƒ5âª~˜`±'<@Ô¶Fy)ž±÷yÖ³:5\¢ôwzãRÄÈyèkË~éÁý ¶ë2¾ÆY 'ù…^­¿UpfÄ?–Û¼‰UâyEÆÓ Y¿e¹‰‰ .µS…]ÊðèÞíXáÑ’aÞ0]tߢ l‡³ÐÕ;Ð2ûÂÓO#£ÛS#GÞKc´ ‘Îã,×J¯= Ž4q•!¢jØUµ:A=Öf^Wx³z›îadÌ”B¥BM›vlê‹ k˜fK¶Pç=(ä×> $²úeYáÑè›Nõ¹óûÿ^r0ÝQeb”Yßöͧ ^émR'Ís²îvN#ëcrfd]UNqÑg YëøPÿ~"™ÿ.+±ç‡‰¸“§Gì†kÐ=”>CÎ-ÈV:Ðõ²éú‰a_‰‡R`øÈÜó*< ˜3J¨(…Ó»Ÿ¿5k3ãš¿à-/ݧª×'?Á ù™vrÜ•õZFœËòoøTn× ’ž»FRÍ|úUƒ¶‰Æ‹zÁ™‹ü‘9˜u²¦àåI·:¾¬Z!BŠ¿zàêŽÑظ°‚‹Ì$H¢4ÊDE8á-AÙ ÿ.5Êà²M*NߨÉ.Qv]ÿõ7‡äwO=Æ05w¢çjÈK¶™c a˜3¨ÒHeÚU‘9-\‰Qˆ †Ì릦.£*ëølOH~éj% :`qÓ¸d94`9½zܑƗÎçG,0ª_áž(»"¡9UVs”ƒÄ)é>pa ž:ÕÙ@ù ‚ä.Áð¨èÓâ ˆ÷ŸüG–åŒæŽöfyç•ÒjÁâ28»û ]âðj°Òr­¤E²¶ñ.±ξ¡ÓÒ®¾$¯.–èãûú|BưuyëCO­Œ“ GÕHvyG²# JȦk+‹¸Ãƒ!ÿ_9Ôƒ…{1V"*ʲã  o æhóBDEˆe ^ˆÖ©T£5 ]ÿjaKà\È VûF]ùß+ï5n.ß—v ¯„¢MƒŒìÚ²E—f}õ^©tŸLY6«NíÖSuø£ÒWÞ É2HdúÑ=xŽ´V.ÇÕ”¼Úúîå°ºŒ8sý(! Žþ%q™ƒ51+äxG–b)+WK·/íj”ؘQ¸ÝgTw='7ajËès9­¬`ÀtŒ4Ç>Õôç>â+„¡3Ö¼–ô ˆ0¤ÆƒÁëõP~ð›LçÐåsta j89\$Pak*Wù^é屛ߊ£tlÍ¥–èhQ“ ÑÎBO“ ýè.²W…ƒÛ@Xpû9Ä;`»Hº@(UàÝV^¤j/}û9äLsDÀÃY׿JªPóm [é`5Œà,!…PÌ;õ—»\ÇÀUŒ¿ªi—•“ÿ$èON”¶Q³,ó°ÚxN†9µã$ÿz§7ÆÐS$Ç¥ë«ýoqª¥Œ}ù’Þ»èj¶`(ôúM¿€¦ä@G;µ *7SGéžWÝß:”/]÷JÁ¢Ù‘ŽTàÓéïäc<ÕÚßcm{¥®~AåëêA€”çÐØlLø Ëød}±‹E³…þ¼ºÑ*Þõ*ž„öÚb‰½P#ŸGÀ(µ”ÊÌó²æádÆí Z´?[A7åº3Õ²²3.‡‘ˆQÃÀ>Ëô =é©)öÁá•7ºî›ÆéÞ ¤P=eøÓS?²uýmHËHŠÛ²÷ÍÙ…u÷'ûÍÒ2/¡ç¡^‰Û^PP±8¨bz;¨™µZ'¼«¬z ·ùâå耄p)?Ø¡÷ Õ}Û^ Y/ôi÷Ùˆ1®ÙQ9û«o^p†Î/ iÐð$®^{Â;M4)ˆŸ\-°º­ð+8!ð j^å$ý€.yTmé傯ÿLª6—dÍPl„væ¬í÷œåZ ¸âÊ SwÃi‡ϳ²]?Àëå˹Ýâ»EÓVÛ r®<ôãbŽ|Ӳ㨞gP×óÓ\àšd_(êâß«È NŽŸ¡—1o1rn¾ìÙÍ4NŠå™"n¶d §ÍK™Z„mTix׬¡UH7®>H•›@+9“'¸hÀbuפC¶¼.29$ÿ!<ìŸè5“%Ãêv4Iž¬Ø_7AGBlÜo°JI»€ŽÃ_öœ0‚*¥\+Ru SîjÀü Íe”±l®ò;›ås¥¦0È£f“¿[ÝqÖ¸ÙꙀõœnáö2›fßXª¡/tø®ÁK\ ½³Šj‡l’žË¤‚‚Õ¦ s)ääŽoËŸX‰¶ûXt0€”¼Çó~9 {¾íŠ8$ÔŒ'5ú­ÂŸdÅŽEÜ0Î4Îà?7m]æªwТ/Š‘JÒF?rH©ùä+;¼ µúõ DÔådèŒ##¬æ<ÇöÁ[àßà‰Ü‰kßKÅ9Õ3›J¼ŸýWÿ0èÉ9ʪqHŒ5x¾§ÙŸ§É—ƃ©DÖdŸ¿ o0Õã\7À¾ÙtÈ ð¯ÜÇr‚|¾T•»2 )ÀZõy£}GÊž¨&ýêˆäI†ØÅK"JãÚÌJX¼ÓȽTÎIܱbØvdè$ÊX…ÌÂwËAtÖj­ÞC¦é‰ë`o‚ *JA)ó‡aã üȪûŽ)8’ ? ‚d‹ßóìXOþ2ä\ód†ÎÑùɰ–+åb*Ós¨)Vy0ò*Õr†7åtÆtjÇH,ýU~/®”ߣ¶œt𢔉±ÕghN³<¥¨bÕr¸"Úé«ÙèeŠ`yru¶h¶(¡ÑmÉXó3™h…“J]ÖÂcjïAð«Fü†<Ã>´-^ÄX 2²4ã."R_m¿(Q«ƒ·*¬XhÓý”£D¼uWzÀëUAšî øàäÎñ–0ñ}Yå¦ñÀ)õÉ·CYÜ*8D;Žg9q<«_I¼"¬«•ÐZŠxÑDìB¸ düóƒ$œ¿„?~DŽõ·0E!¿‰Á…¢om„Åâ7A,†#îxF{%ԗ̬Ü4ÇbBy O‘Ó¨¢t§Ò½|¯ }¾¼Ë–òø:”zØJªlfµU«ô›e…V1ÛÝøŸ(²A˜S fä ¸hé¡%=ÒÙ†ÞiÆÞ…ó%ñzKêÇNަ)ÈÁÇ™QãX‘K‹Ó|´Ýó×_úýÄ*j|'§¯ùуKˡëf—¯¾ÿQö±×e¹ Ð…à’RK´±¥‘qGÿr$C~vâò54…wk 2ï—z˜Ý¿·j=cüë¬j¡Œ’t'Í>Ÿ‘:ð)ŒCÄŽ7ª¹Žþž@Öd\»D]#…iά¥èB’=زÍäôX¸g,¸R™»¬ N–Kcaðé@Ý9 µq8«fÅ÷´gbÀ›^¬:V¹„ž• 6ÿXñ²Ð&SžSýî|ñ¤ Ç!.!ÚH±nùE£¼¬ù{,kÃÜJ9:Qxùzš¢£`MáÌô¶29ïøa½þ¯¥D¿8÷‘h£ªH–ÉXˆ¬U?ÖTº‡‹RÜäYf¹n*>XK}ã†ËWúñÈ{à–%¹Ð‰£®™˜jOG¥D¯]J²W? ú¬Ý¨—+™Yƒ) &©gד®äÜ~p«Øñº¥Ôt0Ч™.à*øjœJ7Ò!Ê\Æ/hæ°f@VvŠT7Éʵþ¯Éïy n5pÁ–'E´!ù&†9nKâä°”0t{¡¾×@¤c?–×gÄ»J¥DÑhdsž‹á–xCGŒ[œ*%ÈÄÏåQÐ'†pÙ\ÿ+7É9ƒó0&Ïi‘Ï9ß`CÓ‚»Ü#ß”îõQø'6âj'wfÅÏZü*¡*ã‡Ô™¶ä÷Œƒ»è,¥Or€8Þ:÷ÖúÈ8éâYcްA¤ì¬ü ž ÝÙœÍi H§dï­\’u_iYRÞö|¾U½@ù»É<²bG«#ÊÁ@ ”'€—â¢Þõßs>DÂõ‘µúQ%òe¨÷Ù†—®&‚ H­ˆ¯ëÝo:6Ûʢƈ³á©?Vî¶}GÌŸÔeýðª„úEB †Ô™0±Íè-Ú²ß]Zø Ôìdê,©ÿw29‘ZÑUš˜Øš m«ÜÝã™Ò:LwÕb¨g|nEq`­“ÃÀY;̼ôȵ¯í’ƒœeÎÌc0o4Ò›HR²Î2ªÄóv¬õÿ$TÿxøÀÑ"è¹FñFÎ~qò)ŒÑñ ãÆ´Ý÷dkn]só×i”ɨٻŒQ¼âyƒm8£qúMïÞ¾‹6†£sGÑxÄr.dÞ ÊI`µ7¼‚[ ršËéy'íP*·qWÅÍ¢…C͈ç"zTèO13 ðÓ[OàÐ0ošäބį.8ÀLŠ%i ‚ÍÓ¨¦™ üoÄë zbòÕ'úĘ¯Ò¶‹?d¥×º·SÉ„œºˆíVÒÌk'p; INÞûbñu-P‡åÈà-=ßêêäaŽ¢³sþ—äÓ›ži¢Ã9œ•ãDÒ©I¢`Ê5 c—ꊆ”ÙáËJ=ÖÊnáñkyäûs \ï‘Ûê»|´lU‚u&DÏl¯ÎÏï×P 8¨ý¹%àa’â¿€`R¸0çi®RŽÔÛƒ ŠQ‹ ëÔ´Ôl…ZÛÊÇ"ÖõIª±¥R[–´<‘´¨‚6ζ¿@óY­Ñ­åfÝ`2×°FÅ;LU ®¶Rð¡0znʱÅèœ[«%Êz^êçÓq£,Z6ßür³µe‚"p­vÀ è xÂ×R Q Ñ>*œi Ìz%áoÀ1vˆZXìf°ÿÆôÀù8ÏütÊj‚U Þ€yp4RÃ1Ö{k—:f_Á'ðl;•.a°øŽo¦®êôdÊñw{¸ùUÞS]€(,¨Klã‘ï¨ ’+ŠÕ­»ðŠðhù·Lsæýˆu°cßµóŠL@[â¹®ýü•O_¬ÂRaV\ˆŽîiqi×ú‰^Qrìj艀¶ ž±"¾ý‚Më ¹Ô¸"ëb®tÐÒ±< ÿ/ø–8^ŒWeIØLéùßu“Ó‘ßVR>\†'¸Þ ÆÖy"q#cËŸ6áÔ¯Mõg6¥b;¬É„pÛ8Äe:áå# °6q§¿Ø‚=Bi߯z„ql,û–ÆŽ-½!Š:›¦yv$j›fH¨07ì2$å â?jÄØêGîâ5}{”LôKž’•rÕ&&]k-•ï²–æÓkZMcáMb¦‚’v“¯SyO7®•Ÿ´ÃÅÙ9a>à’ƒ7”f¨öð¬¸ãùŸläVJ•ä«4­ c“æs8SËÏ:ÍûwÙÜY; [öÈ“¼©ñ,møJß[ Í­3ŠO_MŽþëh(O ælmÖßßd>¹á¨;𙚓jöÔoÑÀÅ9g"¹;lø>4úq& ÉÆËݧÐßW„§SŽWB†i +:z°^ArQ0ìáª~¿ÎÏ„ôÛd’Ø÷7õŠ,ŸçˆÜż¤„·«`²—oKÑÕºŒÓÐyUM¿J@ñÎË!OA#ïÍÂ)À‘– ±³…›Œ'ãÅÃߌ4¤-X|ÁüN¸Ì[†#¸n‘à7oy­ÌQÊ쬔,¶aÈ´Ÿ¬5¬S—–©Žå>™åê®´Ôh)î`\À‡·W~ÀÍJõ·¿KjZü#ÊD×ôw;|Ì. û?ÿ5[• ¸eɆFæ(‰ÑÂja 6ïþåÖP#ä 6¸?V¼àZ?à·¹Q´W!¤Ø˜¬n²qd£bÒ€]|@%šäI<É yuÁÈ Bl´'!V_n"|"¹!J^…#«Ò„“±¦âáJ”—t&ïú¤‡iÜ$s;±ˆ…ÁѪôì…Î|™•yÓŽ@€=Ì”Ž°B´­JèÊ£y•OÃnzãù¨ج¿?ÛX%šôQÊ*„ãéyIeËý7;2/£$†—“ [_øù²€ íí{¢¡;æ"RáYIøÆdõ™KŸò+›ý¬egxÎûö©jUÚ˜Ý:¨ù:¼óžµh|UÌÈ&Å©€ %'AÊ™}ähæÎ"¾ó0ý+2ãÛM\"OI¿JØUl› +·h¡d~V\¾+¨DwÒØ#p%·´¯’[~šy‰¤¿+«2ÒÒk‚õ»yéqpÉÉvü8²ö´==O²ƒ:»óìbËw$JℌŞ,¤ B²Uµ—ewŒ;,Ú_Židt[ÄÜdÖ×Ú×iüŠÏ׬,3¹—)›17|9××È×9¬~ö§ŠAѽ§›óQ±´¯žÒˆµ`Ëžª ~Xo¢82ý¼ã'£Úâç—”d…*®° bˬý³þzÝW+úÅ|ê×>kîá$7ægb:0ÅÉ…µtXÉß;m¡>*gùµ¦yÜ[Zw·l%‡^M‡ÒÃHUX*è%”B%Òv1o½;Û@U3q>>ld–åZóñ¬EÎSœM4÷ÅSàsu!ÊÿêE X%k`½ê<ʇ»æB‰„wa¡Õ’X‰D$–Í­få¸Ìû¡}£ º’– 9ЕëÜÖÉ,÷âQ8b@·ö÷Íß’Õ'Ò˜¥ó$ß;+6à5À£Ù*h²éè+5‡›´v‚ú]‡Í|&#jwZÂk:Ã4ÏŠfexŠÝsÝ*†ÊtÄŠجéòµ:§KQ$pëVæJg_?^+x[`C|y-`c/ pÕëÒ'A,F`šÇ®—g°XË6ž-<»kg¢òP\%üÑÅa}Y¸Û4oú÷‡Ïa.'ÍB ª“á2ù†Ú¦8dº¼šñr‰oóË(-Øó/ñ~”ZÎ#Á°0ê„ ît ŒÌ3ì©/ÚÆoæ·›0½ EgknUÓ$͹¸.\?Žštdi²'Øœ>SAw1´§Nõ[$w„Óv\‰’ë¡™‡¦3Ú/oò-¯+ ÖʘA~r ãoA>?+¿Œ×Bž¸à›…Ó€`F)‘¹,!Tòl ÿ!²*ò\áU^JTnˆ¨-4 ÇÕÿL"´V_OðÜ´ÏÒë9ö—ÐaǤÏd<=Ù`:nŒh®‚X®nž{]­tz­yvû“ËwdçÌí³ˆ¼DaI”ÒçzO?6è‘"ù¾¸’j :~ÂT¯^x÷·]Ùàm¿¨Óäu«ÝqWìŒÃ®kÍÃés¨b(I¼—+ÖUˆ+‰x‘);ÊŽä.é/z…6X/”¾7ÔnCƒPÄØª¥‹²YÍÕ1¡—V æö½ï<_Ʒ̲«ÕL3lrâ}bb(Åcÿ#®Õsíï/>…3Ì(VÁe!!û‘3’ãvËj/B>ôÿO / U•ýõ°’ #[ 8YBlüb®î {àŒYs5Á9-y+”`XD˜­-gø†G%IiñŠûÌHÈB¶Ô|Ù@ë¿þÔàOx{iÔ Œ¹Š/Äoó 5—ï’¦%åp·…7X¦¬é­™ˆÈ3`y(r_Ù¼è¦zÂÊ#½¥Ët%«™v XC™?ñ¨¥¡§CAÜ›¼ÕŽ –5‹ÆYZô1FòôæÊb}èëŠtée Î>欷¯½6ü´Å±æb"©ÕožÁ—ôd-aÓ€nŽøåÑh\Š\ Fz»Q Œ°…DÖ ¦as4ô'   áŠA´%µù––Ã1ÿPÀ$²½zõ,™¼ÿoÇ÷wé_œùgQÚPì&49Úüæ@ÔÍ¢,ùÿC±´/Oöé:è#ÞB6¢óiJŒUYvíËõ7[ECû ‰'køSÊßê÷ÙÆQÁ<×Ð×ÛIªQ~NµóGò±7üŸ[”b#Äñ ŸO×G¾_vž²1‚Gïôýë®tΫÀš¤'z{øøéu›$’ú23`\Ù0TàÙ€ôô|ê£nð`BBù¤8£¶|«ÛwŠlTG•½•d8ñ[N A]6gX =8Õ«0ªzêç`¹c/-ÛP%_ãxù$»ÇrHÿ¼«4<–¸1#ÅÍ#CÍ8„Ã/Éæ¹FÛƒMºð!'¾Qlc1? ?ª,f¯gcñÕ"YÙÇ`GŸÂàuh&Rß‘úÖ“c\:oÍÉN ìʹI¯JNG- #ô!4'+=÷ÆÀC– #“ÝÔ©yl>&·Òt;u¥¸¯àáÒÊ\3EˆäiÉ9ÖüKVõ#cñT€/—Åá `€•tõEÜyF´ˆðë¨ÿWVA/ U·3U›Lº”Êí ,ãz棼õÙp€,£ê¨‡Àö¬Pî¦{rFìN3 «ž<v ÃMÓôô·}"-’fÓeÖÕ—­ˆí:)ª½í)qË­‚•a¢ÈtÄdp¨éX”n{·ƒP™jI¶óER+¶›á°ÂIÄÞôÿ2÷ÃN/±É,ª*çMñœ\°³TÐ ²&%NkÞeAO*só~˜Š&Î5ŸúŽyoTÄK¶ÑÛÓZÞ«ÕñJíì[šAJÒ-‹ÑħÚ×zÿ&*rÏ Âü…Ö¸kÀ}FCÝ/—i§D%ÜDz(|Q~”–¶:•¬Býd:ãçĉÑ7[a{)S»šóS°ã# ¸õ*HŒ¤ÒÈ€Þî4dÇÉêàT=}Oþmm0Jc*\d¥§ —»ê’ȫҽVw¼+{²úÇFÊ:a™¨xÕJYZÓ.®m5M ø2“tê_•>e­ŒÞû•eàÞÉ ~?]­º™sÏÌ×Yl•BO6Yfû+‰î êäc<ÞvõŒëÍg¶×+Ÿ®£ŠS7-„3M&èÅ®FYÒ/(ç_c—ÍŸ3/ìH(}DÍž£Ù4ß°öCù‘_m J`9PyÝŒ–Õ† úèq§EàÎ=•è(+b¥b› ¿òáDĽA'¢ˆEËÁ=T˨‰†Y ­Ë¾ª²pN,uÏrd·ù@£1ŠûF[[R*?FŒ¦lØ*VöY^ÿ¹k©Såï ÃË”øÛ2Õ×`æ9Š÷›b)æ$±›ûacíš’g5§äíÛ Šœ§´W½”_ ²‘zLj.#Cu ÛC¬MòW¸7Ea'¦£¤¥¬}½„È2âœOæ˜ùHWÇÅ.I•§Èc“ï… 'özVÎ¥„ œ‚S€:=}a,ëÔ¬aËû<Ì#!wÈñýŠ,á57e€XíBvÐk*܉ ©G¢zËD¦Ó·§/bÛJ%¤]û™»C&|@»q·K ÄðÇæ¹jÏ)Ÿ"Ûz}ô †:¡h5!Ý*Bq`Õ@Y^mûû½ïù×ÓêžêÓTSLnÉa7™œ·Ü­¼ c•¥1=q÷ÄŽóƒòš¦sÃbŽâOY¹Íìð`lvf@†Ñf{x?ˆNJ-÷q´è”çÕ£Wç·J†û‡ ç„‹ÒäO¸ï¹CÛ½Ÿ@.LÓ]‰d´¦[_8ÌZ¿’îÕ[^÷ è˺Uô4lPÊ"_`¶Œª÷ò—¹é~Õä©8òt«¥òJXÛr¹ˆx` Æð©sö–9{Ž´ÝØuÐðçÈo¤¨X†Íí¿Y´ZzM|]Ÿ}½:PÆW›öæJOÐÆjHòÕ Åj}*€ÇY(¾>¶G¡.}-l-¡E+ÕQ€µ jIíˆ èÝT”—» zGkKNU×î‚­}öh‚ë_ÎÍ6‡ÿ0¾ ¶\c†ß½î0Ó¶´{Séâ…K?çk9Ò¦ÿ(Ao\¾^Øáü¸ZzèWßёɰ€gAÊtg3Å^K@¡X´­ë3!8y£FÍšöR­ ¶”P—»ùÿ4.À>ûrñD Q×΢Cáè?>ÕÌ%²;|¯°u—•«BíVÀG£ÏBea¿Âm™='[99î¶©Õã­ãô?K}É=âËBúK=ôMÿÇ&lÄG3Xá·¬8dQyw3#‹œ4¸äY4&4ò*³ÊÃ2¤7jÉoÞÛ ŸåøSª‘ޤƤÛw&¿\E%bHüB,ÇTÞ=¸Ô¨gÒàÊÄ=ûp—W̪Pžp‚Áþƒùî:˜ `ë²¼¥ïŠö×”P#ÑÈŸó—<‚AeþJ)ö Ñï}\mú\‹Ã ¾ïúM"ÌãÊsƒŠóe^òàu·ºÔ&œåоÄì1€¢'þÖ°lÎhûGذ,`òÔ@C-è-¸ñÈ`¶Y[v/VÉ2vljûh¦";ô.º) ²Šê Ð^ÐN°tc¾ÆÖå»§‹TqÝæ %Ú+Ù;0/ saP„ Ðÿ·™_1ÿq¡›9=ô+Ú|c!kýbV ¬±ûé@f Ì¦g_ô‘=Ç_­cØÌlÈŽûó2]…úýt@±tÄæ0v0^jQQõUDÞSm<³ÏÛûëxˆîŠ]Œðˆ†:¸‚r#9œ¡{aœ TӌҮeËHI;ÈOÝõÉ’2”f.CLÝãú+ü²„ºæO˜»õvϰŽ"e2B¥þÕ€ü·D¬Y×üÑÌeØAîÃ=-ruŒÜ§ô_4‹ä]Z è̳¦Ö\Á6À*;¯ÞüöÁ”¾ØËº ðÅzu®`)H Ù-w“ð&> ©ÈGéJ£ŽÙIöÝ”ßÜ®E•ñ'qÉ NQíôâ·šäq¨ðéøY’—"TÚb¤Ã$ôÒêZNÅô‚Ë[¶³¤$ w)¤}®ûö3'< ‚YÈc··£Ç%YŽgêQÈ·ÿ\NçüsjnÿxçØ;Ø#g‰ærxCùÍ~LiîÆ¦S)=-ß«ööƒ@™KEÀç÷Ó¨›aPF Cze˜Šïk1sy'&i„í²FwÓŸl¸pQt-É:ò±„*>„mÃf ±9±*| ¯éj`oy>ÄW™~îã`ñ™Á+'D íë´O' ™€Òh‹ }»†³c¤aN20¡±ÐÇu6‰OÈaãD]øtçÅnöò*%¥PݼîŽ2yåÙ585I"®ø¨Z¥eS0¹y÷BÃÈ)ïÿÙicnV BðSigil-0.9.9/src/Resource_Files/icon/app.ico000066400000000000000000012161011321676412500205150ustar00rootroot00000000000000 hV ( ¾ Áæ$  ¨ñå00 ¨%™ö(    ..[00_;11aL11aQ11aK00_A11aC00_;//^00_ @11aL'æ6æ é(Ò/¹.Å(Ó&&O‡00`1++U//\00a‹ ,ÿ '÷11d¡22dp11aS11aQ*+[¢õ##K//]%//^**Z¶6ÿ22f¸#$N 6Ç**Vi..[11`H%%SÔ )ï11aS//^))Z­ /ð44gƒHÀ#û9Ç00^/00^,))[Çÿ22dp//\//bq:é44hŽ33ev55j™:¾00`?22b\Hèÿ33dn @00_5%%[µ>Û;¹@¸""O˜44hˆ Mâ#ÿ9ð11aN//\00`111bW33fw66k¢ Oä 0÷'ÿ 6ü''Y«//]" @//]",,]}Iã*ü,ÿMÿ!!^ñ''[«//^7++U..[,,_€ :÷1ÿPü&&dê//g§22dh00`E//\00_;Qã8ÿVë00f‘11`G//\))[XBÆ11aQ00`11aL`ó Gô44g..[ @00`33fy8ÿ!!R±..[00_5))lÔ Ió33ev..[00^11aC**cÌ5ÿ""U»//^00^22b_^éNÉ**Ze11bTP½YüGÿ,,_|//\//\11aQ##c¤U¸S¸""d´22iˆ22b_//]% @//] //]%//^700_9//\*//] @àPÀCEÀORÀEVÀ=6ÀROÀSSà_RàISàN=à06àroàamàtað:\øog(              !"##%%&&&'((((((((((((''&&&%$##"!     "#%&'()*+,,...///000000000////...-,++))(&%$#"     "#%'(*+-./12345567778888888888877776655442210/.,+)(&%#!   "%&(*,./13578:<=?@A B C C D D D D D D D D D D D D D DBBA@@?>=<;:98754310.,+)&%#    "$&(+-/2479<> A C EH I K N N P R S S T T UVVVVVUU T T S S S R Q O O N LL I H GEDBA?>;:87531/,+(&#!   !"""""!  !#%&(+,0269; @ BF H M N RUWZ!]"^%a%b'd'd)f*f*f*f*g*g*g,h,h,h*g*g+f+f+f+e*d(c(c%a%a"^!][YW U S R OM K IGDB@>;:7531.+)&#!  !#&()**+**)('&%%%%%%&&()+.0369 = @ F I M QU Y"]%a'd)g,j-l/o0q3t5v6w7x9y9z;{<|<|<|<|=|=|={={={={=z=y=y===<;:8877788:< > A F J OS!Y&^)c,i/n3t6x8};>†!!A‰""C##F‘$$H”&&K—&&Lš''Nœ))Qž**S¡**T£++V¥,,W§,,X¨--Z©--Z©..\©..\ª//]ª//]ª//]ª//]ª//]ª//^©//^¨//^¨//^¨//]¨//]¦//]¦..\¤..[£..Z¢--Y ,,Xž++V›**T™))R–((P”''N‘&&LŽ%%HŠ$$Fˆ""C„ ?€<}8z4v1r,o)k$g c_ [ WS OLIDA=:73/,)%"   &(&(+'*-(4%:"@DG J K KL LLKIHGEDCBBCD EI K OT Y#](c,i0n4u8{<€ >†!!B‹##E$$H•&&K™''Mž))P¢**S¦++Vª,,W­--Z¯//\³//^µ00`¸11bº22d½33d¿44fÀ44gÂ44hÃ55iÄ55iÄ55jÅ66kÅ66kÅ66kÅ66kÅ66lÄ66lÄ66lÄ66lÄ66lÄ66kÃ66kÁ66kÁ55j¿55i½55h»44gº44f¸33e´22c²11b®11`¬//^¨..\¥--Y¡,,V**Sš((P–''M’%%JŽ##FŠ""C†=9}5y0t+o&j!gb ^ YT PMHDA<851-)%"  %, 14;#;+<5:=9E7M5S1X-[(\$^!_^ ^ ^ \[YW U T S S R T U XZ `$c)i.n2t7{; ?‡""C$$G”%%J™''MŸ))Q¤**S©,,V®--Z³..\·00_»11a¿22dÃ33fÇ55iÊ..\Ô&&NÜ Cä7ê8ì õ õ õ ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ü ô ô ô8ê7è!!Cà''P×..^Î66lÄ55jÀ44h»33f·22c³00`®//]©--Z¥++V **Sš''N–%%J‘##FŒ!!A‡;7}1w,r&n!hd ^ Y T PKGB?:52.)%"  0 ; @##F###F.%%I9%%JE%%JP%%IZ$$Gc""Di @o=q8s4t/t*s(s$q"qomki g gffh!j%m)q.u3{8€<†!!BŽ##E”%%Iš''N ))Q¦++T­,,X²..\¸00_¾11bÃ33eÈ44hÍ&&MÝ Cå8í öûÿÿÿÿÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú ô7é!!Cà++VÓ66lÄ55i¾33f¹22b³00_­..Z¨,,W¢))Rœ''M–%%H""C‹=…61y*s%ng b ] X RNHD?:62.)%  *7!!A$$H&&K ((O-))Q;**TJ,,WY,,Wg++Ur++U{))R‚((O‡&&LŠ$$H‹""C‹ ?Š;‰7‰3ˆ0…/„,‚+€)~)|){*{+|-~0€4ƒ8ˆ=!!B“##F™&&K ((P¦**T­,,X³..\º00`À22cÇ44gÍ))TÚ<é*ò øÿÿÿ ÿ ÿ ÿÿÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ô0ì$$JÝ..\Î55iÁ33eº11a³//]­,,X¦**S ''M™$$H’!!B‹;…4/x(r!kf ` Z UOJD@:61,(# *9 %%I))Q**T*--X:..\J00_^11ap11a11b11a—00_ž//]¢--Z¤,,W¥**R¤''N£&&J¢##FŸ""Cž @œ>š;˜:•9”8’8’9’:’=” @—""C›$$H &&L¦((P¬++U²--Z¹00^À22bÇ33fÎ&&Nß7í öÿÿÿ ÿ ÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú0í$$IÝ22cÊ44g¾22b·//]¯,,X¨))Q &&K™##F“ ?‹8ƒ1~*w#oi b \ V PKD?:50+&" !!@&&K **S--Y$..\411`G22d]44gt//^3Ç0Õ0Ú$$KÌ55iÀ44gÁ22dÀ00`¿..]¼--Yº++V¸**R¶((O³''M±&&K¯%%J¬$$Hª$$Hª$$H©%%I©%%Jª&&L¬''O¯))R³++V¸..[¿00_Å22cË,,YÙ Bç$ô ýÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿ &ÿ9ÿCÿCÿCÿCÿDÿ@ÿ1ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ò Câ22cË44fÀ11a·..\°++V¨((OŸ%%I— A:ˆ2+y$qk d ] VPID?83.)$  !!@**S..[//\*11b@33fV55ip11b’î ÿ ÿÿÿÿ ø*ñ=ê''Nà44hÓ22dÐ11bÎ00_Ë//]È..[Æ--YÄ,,XÂ,,XÁ,,XÀ,,XÀ--YÂ..[Ä//^È11aÌ33eÑ,,[Ü=ì ùÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿ !ÿ:ÿ#$Uÿ+,eÿ01mÿ01mÿ01mÿ01mÿ()^ÿ!"Pÿ"#Rÿ+,eÿ01mÿ01mÿ01mÿ01mÿ34sÿ78{ÿ89}ÿ23rÿ*+bÿ$%Wÿ MÿHÿFÿFÿAÿ2ÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿÿ ÿ ÿÿÿÿ$ò Câ11bË33d¿00_¶,,X­))Q¤%%Jœ!!C“;‹3‚+{$rj c\ UPHB<71,&" %%J--Y//]22c244fJ55id77n*Ü ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿû ÷7ð7ð&&Næ&&Nå--Zß44gØ44gØ44gÙ55hÚ55jÜ((Pè=î ùÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ,ÿ7ÿDÿ#$Uÿ+,eÿ01mÿ()]ÿ Mÿ"#Rÿ+,eÿ01mÿ01mÿ01mÿ01mÿ+,eÿ!"PÿJÿ*+aÿ01mÿ01mÿ01mÿ01mÿ34sÿ89~ÿ67zÿ01nÿ01mÿ01mÿ01mÿ01mÿ01nÿ45uÿ78{ÿ89}ÿ-.hÿ$%Wÿ !OÿEÿ5ÿ ÿÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿÿ ÿ ÿÿÿ ý*ð++UÖ44gÄ11a»--Z±))R¨%%Jž""C–:Œ3„*{"rk b[ TME@:4.)# ((P--Y00_$33e955jS77mq99q‘>ûÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ7ÿHÿ!"Pÿ%&Xÿ#$Tÿ Mÿ"#Rÿ+,eÿ01mÿ*+cÿ !NÿIÿ*+aÿ01mÿ01mÿ01mÿ01mÿ./jÿ#$UÿBÿ"#Rÿ01mÿ01mÿ01mÿ01mÿ34sÿ78|ÿ12pÿ01mÿ01mÿ01mÿ01mÿ01mÿ01nÿ34tÿ89~ÿ67zÿ01nÿ01mÿ34sÿ78{ÿ89~ÿ34sÿ*+cÿ#$Uÿ<ÿ ÿÿ ÿ ÿ ÿÿ ÿ ÿ ÿÿ ÿ ÿÿÿ ø Bã44hÇ11a½--Z³**S©%%JŸ!!A–90ƒ(z q i `Y QIC=60+%  ''M 00^22c(55h?66k[88p{45k«Fÿ:ÿ #ÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ÿ>ÿDÿIÿ%&Xÿ#$Tÿ Mÿ"#Rÿ&'[ÿ !NÿIÿ*+aÿ01mÿ-.hÿ"#Rÿ=ÿ&'Zÿ<=…ÿ<=…ÿ<=…ÿ<=„ø<=ƒñ89|ñ11kí33mã67tâ67tâ67tâ67tâ;;}â?@ˆñ=>…ñ<=ƒñ<=„ø<=…ÿ<=…ÿ<=…ÿ>?‰ÿ=>‡ÿ78|ÿ12pÿ01mÿ01mÿ34sÿ89}ÿ67zÿ01nÿ34sÿ78{ÿ89~ÿ34tÿ*+cÿKÿ %ÿÿ ÿ ÿ ÿÿ ÿ ÿ ÿÿ ÿÿÿú<ç11`Í11a¿--Y´))Qª%%HŸ ?–7Œ-%xo g] UME?82,&! *))R 00^33f+55iD77mb99q…11e¿Fÿ>ÿ>ÿ 'ÿÿ ÿ ÿÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ3ÿDÿDÿDÿDÿDÿ"#Rÿ&'[ÿ !NÿIÿ()]ÿ"#Rÿ=ÿ&'Zÿ<=…ÿ<=…ÿ89|ñ--cç23jÛ;;{Î==z¼==y²==y­==y¨==x¥==y¢==y ==yŸ==yž==y==yž==yŸ==z¡==z¤==z§>>zª>>{¯>>{´>>Ë>?‚Ó?@†â??‡í=>…ô<=…ÿ<=…ÿABÿ?@‹ÿ12pÿ01mÿ34sÿ89}ÿ67zÿ45uÿ78{ÿ89ÿ45uÿ)*`ÿHÿÿ ÿ ÿ ÿ ÿÿ ÿÿÿ ÿÿÿ ý6ë44gÊ00`¿,,X´((O©##Fž=“3‰*~!uk bZ QIB:4.(" *))R 00^33e.55jI77nh99rŠ22gÆGÿ?ÿ?ÿ?ÿ 'ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ.ÿBÿHÿEÿEÿEÿEÿHÿEÿJÿ()^ÿ"#Sÿ>ÿ&'Zÿ78|ÿ**_î00hà<>zš>>z¢>>{©>>{²>>ËBBŠÝCCé=>†ø<=…ÿABÿ?@Œÿ12pÿ34tÿ89}ÿ78|ÿ45wÿ78{ÿ9:€ÿ34tÿ%&Yÿ3ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿú Bå33fÉ//]½++U±&&K¦!!B›9/…&zp g\ TLD=5/)# *++V 00_44f066kL88ol::s22hÊGÿ?ÿ?ÿ?ÿ?ÿ "ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ:ÿDÿHÿEÿEÿEÿEÿHÿEÿEÿEÿ>ÿ&'Zÿ78|ü+,aë34l×<>z™>>{¢>>{­>>ÅBCŠÝCD‘í=>‡ÿABÿ?@Œÿ12qÿ34uÿ89~ÿ89ÿ78{ÿ9:€ÿ56yÿ-.iÿGÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ ø&&NÞ22cÆ--Zº))Q®$$G¢=–2Š(!t j a VNE>7/)# *((P 00_33e255jN88on::s“22hÍGÿ?ÿ?ÿ?ÿ?ÿ8ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ,ÿ@ÿEÿCÿEÿEÿEÿHÿEÿEÿEÿ>ÿ Mÿ()]ò22jÝ<<>zŽ>>zš>>{¦>>}¹BBˆØCD‘í>?Šÿ=>‡ÿ78|ÿ45vÿ89}ÿ9:€ÿ78{ÿ9:€ÿ78|ÿ/0mÿEÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ*ò00aÒ00_Â++Uµ&&K©!!A6,„$ym cZPG?70)# ***S00_22d455jP77np::s–22hÎGÿ?ÿ?ÿ?ÿ?ÿ?ÿ3ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ 'ÿ #ÿ *ÿ4ÿCÿBÿCÿHÿEÿEÿEÿ>ÿ Mÿ+,aë66pÍ;;v²;;t¡::s’::r…99qx99ql99pa99pX88pO88pG99pB88p;88p699p299q-99r)99q'::s%::r#::r#;;t ;;t <>z‹>>{™>>{¨>>À@@†á?@‹ü@AŽÿ?@Œÿ34uÿ78|ÿ9:€ÿ78{ÿ89~ÿ56yÿ()^ÿ+ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ý##Hã22cÊ--Y¼((O¯##E¢:•0‰%|q f[ QH@81*#  **S//\33e555iQ77nq::s—22hÏGÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ,ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ2ÿ@ÿ9ÿ 'ÿ #ÿ *ÿ:ÿEÿBÿDÿEÿ>ÿ Mÿ+,aì88rÈ;;u®::tœ99r99q}88oo88ob88nV77nL77mC77l<77l377l.66l(88o#77m88o77m88o::s99r99q<>z>>{==x!==y%==z)>>z.==y3==z9==y@==zH==yQ==y[==zf==zs>>z>>{>>{Ÿ>>|±BBˆÙDE•ø@AŽÿ?@Œÿ34uÿ78|ÿ78|ÿ78|ÿ78|ÿ34uÿ'(]ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ$ô//`Ó//]Â**Sµ$$H§=™1Œ(€s h\ SJ@81)#  ''N..[ 22d755iS77nt99r™23hÐGÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ 'ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ 'ÿ-ÿ@ÿBÿ5ÿ "ÿ #ÿ/ÿ?ÿCÿ=ÿ Mÿ**_ï88rÊ;;t¯::rœ99q‹88oy77ni77m\66lO66kE55j;55i155j*55h#44h55i44h66k77n66k 55i 88o77m66j33f33f@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ <>z>>{>>|"==y(>>z.==y5==x===yF==yP==z]==zj>>zy>>{Š>>{›>>|­BBˆÙDE•ø@AŽÿ>?Šÿ56yÿ89~ÿ78{ÿ89~ÿ78{ÿ./jÿHÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ý&&Nà11`È++Uº&&K« @4)‚ u h^ SJ@70)" +''M--X!11b744hT77mu99rš23hÑGÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ 'ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿ !ÿ !ÿ !ÿ 'ÿ3ÿEÿ@ÿ,ÿ !ÿ #ÿ4ÿAÿCù45mÕ::t³99rž88pŒ77ny66li66kY55jL55h?44g533f,33e#11b33f33d00^44f 22c ++U33f++U @ @@@@@@@@@@@@@@@@@@@ <>z>>{==y&>>z->>{5>>z>==zJ==zW>>ze>>{v>>{‡>>{›>>|¯BCŠÝCD’ü=>ˆÿ34uÿ78|ÿ78|ÿ78|ÿ78|ÿ78|ÿ./jÿ9ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ5í22cÌ,,X½''M¯!!A 6’+„!w j _ SI?7/(" +%%I--Z"11a944hV77mw99r23iÔGÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ &ÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ !ÿ !ÿ !ÿ !ÿ !ÿ !ÿ !ÿ 'ÿ:ÿHÿ:ÿ 'ÿ !ÿ0ÿ./dæ;;tº99r¥88o‘77m|66kk55iZ44hK33f=22d322c(11a00^00_//\..Z ..[++U++U @ @@@@@@@@@@@@@;;u <>z>>{==y'>>{0==z:==yF==zU>>ze>>{w>>{‰>>{ž??~ºCDé@AŽÿ>?Šÿ56xÿ89}ÿ78{ÿ89~ÿ78|ÿ12oÿ!"Pÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ$õ..^Ó--ZÀ((O²!!B¢7”,…!w j _ SI?6.'  %&&L,,V%11`=44fY66lz99rŸ11fÖHÿ@ÿ@ÿ@ÿ@ÿ@ÿ@ÿ@ÿ@ÿ@ÿ.ÿÿÿÿÿÿÿÿÿ ÿ !ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ-ÿ@ÿFÿ0ÿ-ö33jÐ::s¯88p™77m„66jp44h]33fL22c?11a200_'//\..[..[++V ((P++U!!@ @@@@@@@@@@@@@;;u <>{==y$>>z-==z9==yF==zU>>zh>>z{>>{‘>>|§AA…ÐCD“û=>‰ÿ45vÿ78}ÿ89~ÿ67{ÿ67zÿ67zÿ()_ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ù//_Ö..[Ã((P´""D¤8•,…"w j ^ RH>5-& + $$H,,W(00`?44g]77l~99q¤%&Qß2ÿ>ÿ>ÿ>ÿ>ÿ>ÿ>ÿ>ÿ>ÿ>ÿ-ÿÿÿÿÿÿÿÿ ÿ !ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ1ÿ Mÿ,-bê::t½99q¥77m66jx44ge22dR11bB00_5..[)--Z++U))Q&&K !!A''M* @@@@@@@@@@@::t <>z==y$>>z-==z9==zI>>zZ>>zn>>{„>>{œ??~»CCì<=†ÿ78|ÿ45wÿ67zÿ67zÿ67zÿ67zÿ*+cÿ +ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ý))RÝ..\Å))Pµ""D¥8•,…!w i\ QE<3+$ 0 ##E++U+00_D33fb66l„99r©>æÿ,ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ4ÿ &ÿÿÿÿÿÿÿ ÿ !ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ !ÿ $ü11hà::r´88o66k…44hp33e\11aI00^:..[+--X!))R((P&&K !!A3*@@@@@@@@::s <>{==y%>>{0>>z>>>zO>>zd>>zz>>{’>>|­@@†á?@Œÿ=>ˆÿ45wÿ67zÿ67zÿ67zÿ67zÿ01oÿ;ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ý))Sß..\Æ))Pµ""D¥7”,…!v gZ NC:1)"  2 %%J,,W/00`I44gg77mŠ99r¯Béÿÿÿ !ÿ %ÿ %ÿ %ÿ %ÿ %ÿ +ÿÿÿÿÿÿÿ ÿ !ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ !ÿ )ù//bÒ99q®77m•55i~33eh11aS//^B..[3++V'))Q((O!!A9 7 @@@@@@@@::s <>{==z)==y6==zG>>z[>>zq>>{Š>>|¦AB‡ÙCD“ü=>ˆÿ45wÿ67zÿ67zÿ67zÿ67zÿ01oÿ<ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ý))Rß..\Æ((Pµ""C¤7”+ƒ s eXLA8/'   9''M,,W400`O44gm77m::s¶Jó #ÿÿÿÿÿ !ÿ %ÿ %ÿ %ÿ %ÿÿÿÿÿÿ ÿ !ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ !ÿ-ö66lÇ88o©66k44gx22cb00_M..\<++V.))Q!&&K##E; 0 *@@@@@@@@::t <>{0==y@==zT==zk>>{…>>|¡@@‚ËCD“ü=>ˆÿ45wÿ67zÿ67zÿ67zÿ67zÿ12pÿDÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ý))RÞ..[Å((O´!!B¢6‘)q b UI>4,% ' ""B))Q#--Z:22bU55hv77n™;;t¿Kü>ÿ7ÿ.ÿ (ÿ $ÿ $ÿ &ÿ &ÿ &ÿ !ÿÿÿÿÿ!ÿ "ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ "ÿ3ó55kÃ77n¥55iŒ33et00`\..\H,,X7**R)''L##E=4 + @@@@@@88o<>{==z+==z;>>zO>>zg>>{>>{ž@@‚ÉCD“ü=>ˆÿ45xÿ67{ÿ67{ÿ67{ÿ67{ÿ12rÿ!"Rÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ý((RÞ--ZÄ''M² @ 4Ž'}n ^ QF;1)"  , ##E**R)..\A22d]66j88p¢55mÏIÿ@ÿ@ÿ@ÿ?ÿ9ÿ5ÿ3ÿ3ÿ3ÿ 'ÿÿÿÿÿÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ "ÿ<í99r½77m£44h‰22dp00_Z--ZE**T3((N&##E""B6 0  @@@@@@@@::t <>z==y'==y7>>zL>>zd>>{>>{@@‚ÉCD“ü=>ˆÿ45xÿ67{ÿ67{ÿ45xÿ34uÿ-.jÿ?ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿû//]Ö--XÁ&&K¯>œ1Š&zi [ NB8.& %=$$H++U000_H33eg66lˆ99q­"#Kàÿ/ÿ4ÿ4ÿ4ÿ4ÿ4ÿ4ÿ3ÿ6ÿ (ÿÿÿÿÿÿÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ "ÿ<î99q¾77l¢44gˆ11bn..\X,,WC))Q1&&K$ @;0 %  @@@@@@::s <>z==y&==y6==zJ>>zc>>{>>{ž@@‚ÊCD“ü<=‡ÿ45wÿ45wÿ12rÿ-.jÿ./kÿ)*bÿ6ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ù22cÑ++V¾%%I«;˜.†!t dV J>4+# + ""B((O"--Z711aQ44hp77m”::t¹ùÿÿÿ !ÿ &ÿ &ÿ &ÿ &ÿ &ÿ +ÿ ÿÿÿÿÿÿÿÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ #ÿ "ÿ<î99q¾66k¢33f‡11`m..ZU++UA((O1##F#>60 %   @@@@@@99q <>z‚>>{¢=>€Ù:;„ÿ12rÿ./lÿ,-hÿ/0mÿ23tÿ45xÿ,-hÿ +ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ*ó00`Ì**S¹##E¦8“+€ p ` QD9/(   6 ##E))Q(//\?22c\55j|88pŸ))WÓÿÿÿÿÿÿ !ÿ &ÿ &ÿ &ÿ (ÿÿÿÿÿÿÿÿÿÿ #ÿ #ÿ #ÿ #ÿ #ÿ "ÿ.÷55jÄ66k¤33eˆ00`n--YW**SA&&K0##D":6,   @@@@@@88o<>z…>>{¦78vá23tÿ*+dÿ12rÿ45xÿ56yÿ34uÿ01oÿ#$Wÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿAé//]È((O´!!B¡4'zi Y K@4,$ %=&&L,,W/11`G44gf66l‡99r¬1ìÿÿÿÿÿÿÿÿ !ÿ &ÿ #ÿÿÿÿÿÿÿÿÿÿÿ #ÿ #ÿ #ÿ "ÿ.÷55jÇ66k§33eŠ00_p--YX**RB%%I0""B#52$    @@@@88o<>{‹>>{­<=ƒí:;ƒÿ34vÿ45xÿ12rÿ-.jÿ-.iÿ/0nÿ#$Wÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ý((RÞ--YÂ&&K®=™0†#s cSF:0(  0%%I**S"..[622bQ55hp77n“77o¼>ÿ #ÿÿÿÿÿÿÿÿÿÿ $ÿÿÿÿÿÿÿÿÿÿÿÿ $ÿ #ÿ %ü55lË66k«33eŽ//^r,,WZ))PD$$H1 ?#5)$   "$&'((('&%#  @@@@88o<>z==y'==x;==zS==zr>>{“>?}ºCC“ø:;ƒÿ./mÿ,-hÿ./mÿ23tÿ45xÿ45xÿ !Qÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ù11bÏ++U»$$G§8’+~l \ L@5,#  4 $$H,,W(00_>33e[66kz88pŸ!"JÚÿ ,ÿ )ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #ÿÿÿÿÿÿÿ!ÿ//`Ö66l°33e“//^w,,W]((OF$$H3 ?%3)$  "%(*,./1110/-+(%" @@@@99q <>{œ;<{Ð34vÿ)*cÿ12qÿ45xÿ56yÿ34vÿ01oÿ*+eÿ2ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ6î//]È((O³!!BŸ4‰'v d T G:/'  !!A((O--Z-22bF44hd77m†::r«-ïÿÿÿ "ÿ $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $ÿ #ÿÿÿÿÿ!"Iã77mµ33f˜00_},,Wa((OJ##F7<'1,!  #&*.257:;<;;;8641.*&" @@@@::s <>{§89{å9:‚ÿ34vÿ45xÿ12rÿ-.kÿ,-hÿ-.jÿ$%Zÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿý,,XÚ,,XÀ&&K«<•.€!m \ L?5+# 7%%I++V//^422dN55jm88o‘88o»>ÿ #ÿÿÿÿÿ "ÿ $ÿÿÿ %ÿÿÿÿÿÿÿÿÿÿ $ÿ $ÿÿÿ1ï77n½44g 00_ƒ,,Xg((OO##F9;(1*  " ' ,2 7 < B E G I KLK J HFB@;73.*%! @@@@66j::t ==y==x#<?}¹CD”ü:;ƒÿ./mÿ,-hÿ-.jÿ/0nÿ/0nÿ-.kÿ>ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ%õ11`Ì**R¶##D¡6‹)wd T E8.& 9 ((O--Y$00`:44gW66lw99q›!"JÙÿ -ÿ *ÿ ÿÿÿÿÿ #ÿ %ÿ (ÿÿÿÿÿÿÿÿÿÿÿ %ÿ $ÿ/÷88oÄ44h§11`‰,,Xn((OU$$G?=.4 *     % , 3<B!I"O#T"X#\!^ `_ ] \ Y U Q LGB=82-(# @@@@77m<>zž::|Ú34vÿ)*cÿ/0nÿ/0nÿ-.kÿ,-iÿ-.kÿ&'^ÿ #ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ%%Mâ..ZÂ&&L¬=–/€"l [ K=2)! *!!A **S..[)22cA55i_77n::s¥3ìÿÿÿ #ÿ %ÿÿÿÿÿ )ÿÿÿÿÿÿÿÿÿÿÿÿÿ &ý.._Ö55i¯11a’--Yu))Q[$$HD=11"'!     !*!2#:)E+M-U0^1e2j2o2s1u.u,u)s%p!kg b [V OIB<5/*$ @@@@88o<>{®67{ô78~ÿ-.kÿ,-iÿ-.kÿ/0nÿ/0nÿ-.kÿLÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÷11bÎ**T¸##E¡7‹)vb QB6,$  &&K ,,V00_-33eH66jf88o‰;;t¯Eù $ÿÿÿÿÿ #ÿ %ÿÿÿ (ÿÿÿÿÿÿÿÿÿÿÿÿÿCç66j¹22c›..[~))Rc$$HK=73'%    $#-)7/B3M7X:c=m >u!!@}!!Aƒ!!Aˆ!!A‹ ?Œ>;Œ8Š4†/*{%tm e ]V MG>81+% @@33f::t ==y==y$<•0!j X H:/& 3''N,,X11a344gN77ln99q’55mÂJÿ>ÿ7ÿ -ÿ 'ÿ #ÿ $ÿ %ÿ 'ÿ (ÿÿÿÿÿÿÿÿÿÿÿÿÿ &õ77mÃ33d¦//\ˆ**Sl%%HR ?=4,(   '$,.1:7G>z¬78{ñ78~ÿ-.kÿ,-iÿ-.kÿ/0nÿ/0nÿ,-iÿKÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÷11aÍ**S¶##EŸ6ˆ)s_ M?3)! 7))Q//]"33e855iU77mu::rš!"KØÿ1ÿ5ÿ5ÿ3ÿ ,ÿ (ÿ $ÿ $ÿ0ÿÿÿÿÿÿÿÿÿÿÿÿ &ý11dÔ44g²//^“++Uv&&K\ ?E42(#    %-%51:= ?K##E\%%Jk''Nz))Rˆ++U•,,X¡--Zª//\³//^¹//^½//]¿//]À..[¿--Y½++U¹))Q´''M®$$G¦ @9”0ˆ)~!t i ^ T KA:2+% @@33f99q ==y==x";;v8<6‘,„$xl ` U KA91*# @@66j;;v ;;v;;u,<>z­67{ô78~ÿ,-iÿ()bÿ%&\ÿ%&[ÿ'(`ÿ*+dÿIÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ&õ00`Ê))R²""D›5ƒ'nZH:.& $$H --Y11a)44fB66k`88p‚;;u©Lò %ÿÿÿÿÿ $ÿ )ÿ )ÿ )ÿ ÿÿÿÿÿÿÿÿÿÿÿ !ø77mË22d®..[((Ps##EY8A+/!   #/8" @.$$F>''MO))Rc,,Ww//\Œ11a 33f±,,[É1êú ÿ ÿÿÿÿ ÿ ÿ ÿ ÿ ÿ$ô>ä//]É++U¾''M±""C¤9–/‰&zn aV KA80(" @@@@99q ::r;;u#<2(  *''M //\22c,55iF77me99qˆ;;v°Kÿ?ÿ8ÿ .ÿ (ÿ $ÿ %ÿ &ÿ (ÿ1ÿÿÿÿÿÿÿÿÿÿÿÿ!"Jæ55h½00^Ÿ++U%%Ie=L08!'   , 3;""D+&&K;))QN,,Wd..\z11b’44f§22dÀ,ìÿÿÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ù''NÚ--ZÅ((P¸##F©<™1Š'{m aU J@6.&  @@66j;;v <ÿÿÿÿÿÿÿÿÿÿÿý33fÐ22c¯--Y’''Nt""BY5B&/ "   ' 6>$$G'((O7++UK..[b00`y33f”55j¬##JÕüÿÿÿÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿý@ç//]Ê**S»$$H«=›2Š'zl _ RF=4+$ @@00_99q ::t::s%::t=;;v[<—2…'ue W J@5,% @@33f::t ;;u::r*::tC;;tc<-   *!!A ((O++U!..\411aI33fd66k‚88p¡>àÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ+ó11aÍ,,Vº%%J¦>“1%o` R E:1(! @@88o99r88o#99q;::sX;;uz<^/F 3 #  @%%J,,V//^11b044hG66kc88o„55j­üÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ0î00`Ä**U¯$$Gš:…-s a R E90'  00_55i 77l88n-88pF::rf;;u‹==x²$%Yø"#Wÿ)*eÿ*+gÿ*+fÿ()bÿ%&^ÿ$%\ÿAÿÿÿÿÿÿÿÿÿ ÿ##Hä..[½''M£ ?Š0r"[ G7+# ++U22c55h#77l<88oZ::r|;;v£#$UñAÿ;ÿ2ÿ +ÿ (ÿ (ÿ *ÿ *ÿ#ÿÿÿÿÿÿÿÿÿÿû55jÊ//^¬))SŽ$$Fq8W)@ . "  @((P//]22c!44g866kP88op::s“>Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ÿ""Hà//^½))Q§##E’7}*jY K >3*#  @00`44g66k'77n@99q_::t‚<88n[99r|;;u¡ ,üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿý,,YÒ..\´''N @‡3s%a Q B6-%  @++U22c44h"66l:88oW99rz;;v ::zÙ01rÿ SÿQÿQÿQÿQÿQÿLÿÿÿÿÿÿÿÿÿÿ #÷11bÈ**T®##E”7{(c M ;/% ++U33d55i$77m=88p[::s~<3*# *--Y 11b44h266lO88oo::s•<x/c"R C 6-% *((P ..\33e155jM88nm::r‘<l0S!? -! 00_66k 88o::r1::sM<?Žÿ45{ÿ45{ÿIÿÿÿÿ ÿ**WÐ11bª**T##Ey6c&P @ 3*#  !!A++U00_244fM66km88p‘;;u¸ QùEÿEÿEÿEÿEÿEÿEÿ6ÿÿÿÿÿÿÿÿÿÿ $÷11bÅ**Tª$$FŽ8u*\ F 4(  00_77l 88p99q4::sQ;;us<<>{–+,jû-.oÿ-.oÿ,-lÿ/0qÿ23xÿ67~ÿ67ÿ78ÿ9:…ÿ78ÿ34zÿ/0qÿ*+iÿ!"WÿLÿDÿ>ÿ *ÿÿÿÿÿÿÿ22gÕ;;uÏ;;uÏ78{ê9:…ÿ34yÿ./oÿ6ÿÿÿÿ**XÎ22c§++UŒ##Ft6^&J :.%  ""B++U&//\=33dY66jz88pž00gÔNÿFÿFÿFÿFÿFÿFÿFÿFÿÿÿÿÿÿÿÿÿÿÿ33fÌ--X°&&K•=y._H7)   @99q 99p::r+;;tF;;uf<>z†67xÕ23xÿ*+hÿ12wÿ45|ÿ67~ÿ78ÿ67ÿ9:…ÿ89‚ÿ67~ÿ23wÿ01sÿ*+iÿ#$[ÿLÿKÿGÿ:ÿ *ÿÿÿÿÿAç<î22cÆ++U«$$G‘8v)^ H 6*" @@33f::t ;;t==y%<>{•<<‡ò:;†ÿ34zÿ67~ÿ78ÿ78ÿ78ÿ9:…ÿ78ÿ67~ÿ01tÿ01sÿ,-lÿ%&_ÿQÿLÿJÿDÿ3ÿ *ÿ$ÿÿ 'ö<e-P> /&   /##E**T///]G33de66lˆ99q­Bæÿ3ÿ7ÿ7ÿ7ÿ7ÿ7ÿ7ÿ;ÿÿÿÿÿÿÿÿÿÿÿ44hÏ..Z³''M–>{0a!J 7(  @@77m99r::r#::s<;;uZ<>{~??«CD—û=>ÿ56ÿ89„ÿ78ÿ9:†ÿ89ƒÿ89ƒÿ56~ÿ01tÿ01tÿ./pÿ&'aÿ UÿMÿLÿMÿ@ÿ 0ÿ *ÿ ,ü33iÅ::s®99q¦99q§::s°;;vÁ::uÒ$%_ÿKÿ>ÿÿÿÿü66l¹00`))R""Bi2S @1'  3$$G ++U400^N33em77l::rµ;óÿÿ"ÿ )ÿ -ÿ -ÿ -ÿ -ÿ 3ÿÿÿÿÿÿÿÿÿÿÿ--[Õ..[³''M– ?{0a!J 7(  33f88o99q!::t7;;uT<>zg>>{„?@ƒ´CD—û=>Žÿ34{ÿ78‚ÿ89…ÿ78ÿ89„ÿ34zÿ01tÿ01tÿ/0rÿ()eÿ!"XÿPÿMÿLÿKÿ5ÿ ,ü..cÁ::rŸ88o‘77mŒ77m88p›::s¯<>{j>>{…>?§DE—î@A“ÿ?@‘ÿ45|ÿ78‚ÿ78ÿ12vÿ01tÿ01tÿ/0rÿ*+jÿ!"XÿNÿMÿHÿIÿMô./b¼::s•77n66kw55is55iy77lˆ88pž;;u»88|é78ÿ,-mÿHÿÿÿÿ''RÑ33d¥,,Wˆ%%Hn8W&B 3& #9&&K,,,WC00``44g€88n¤,,^Ö:ÿCÿ<ÿ 3ÿ -ÿ )ÿ *ÿ +ÿ -ÿ )ÿÿÿÿÿÿÿÿÿÿÿ%&OÛ..[³''N—!!A{2`!I 5' ++U::s ;;u;;u+;;uE<>z<>>{Q>>zh>>{€>>|˜BCÓDE™û<=‹ÿ78‚ÿ12xÿ01uÿ01tÿ01tÿ/0rÿ-.pÿ#$]ÿKÿKÿ Uÿ..gÛ88p§::sŒ88nv55if33e^22c_33eh55iy77n“::t²99{â01tÿ Uÿ<ÿÿÿÿ$$L×33f¨--Y‹&&Kp;X*D 2&  * @ ''L3--YL11aj55hŒ88p¯Cçÿ4ÿ8ÿ8ÿ6ÿ 1ÿ -ÿ *ÿ *ÿ"ÿÿÿÿÿÿÿÿÿÿÿ%&OÛ..\²((O•!!Az1^"G 5&  @88o::s::s%;;v?<>zM>>{a>>{w>>|Œ>>~¦@@ŠØ?@û>?ÿ:;‡ÿ01tÿ01tÿ./qÿ23yÿ78‚ÿ./nø./hÚ88r°<>{==y(==y6==yF>>zX>>{i>>{z>>{Š>>{˜>?‡Æ;<‚Õ66xØ66xÙ22pØ66uÆ==|¯==yš<X.C 1$  #6$$F0**SG//\b33d‚66l¤45lÎFÿ -ÿ!ÿÿ ÿ%ÿ *ÿ .ÿ .ÿ .ÿÿÿÿÿÿÿÿÿÿÿÿ55iÍ..[°((N”!!Aw3]"F 3% 33f;;u <4,$  @00_77m::t <>z==y$>>{0>>z===zK>>zX>>{e>>zq>>z{>>{‚>>z‡>>zˆ==z‡==yƒ==x|<>z©"#Zü"#[ÿ)*hÿ*+kÿ+,lÿ+,mÿ+,lÿ<ÿÿÿÿÿÿÿû55iÑ--Z¸&&J¡;‹*u b QC91)!  @00_77m::t <>{==y(>>{3>>z<==zG>>zP>>zX>>z^==yb==yb==xc==x_<,,WS00`l55hŒ99q®%&Uà;ÿFÿ6ÿÿÿÿ=ä55h©..\Š((Oo!!AU0@.!  !1!!A0''NE--X_11a}55iž99qÀ$úÿÿ#ÿ *ÿ -ÿ'ÿ"ÿÿ ÿ(ÿÿÿÿÿÿÿÿÿÿÿÿ44hÉ..[¬''N @s1X!B 0# @@88o99r;;u";;v7<‘.{h WI>5.&  @++U33f88o;;v <>{==y'>>z.>>{5==z;==y@==yC<ã44h§//\ˆ((Ol!!AR.;,   %6'##D9))QQ..[m22d77m®))YÚÿÿÿÿÿ$ÿ +ÿ -ÿ(ÿ#ÿ ,ÿÿÿÿÿÿÿÿÿÿÿÿ33fÇ--Zª''MŒ ?p0V @ ." @@33f;;v < ,  00_::s ::t<>{£67ô78‚ÿ-.qÿ,-nÿ-.pÿ/0sÿ,-nÿ9ÿÿÿÿÿÿÿ4ï33eÊ++V³$$F6ˆ'v d UKB92+$ *!!@++U..[22c 66k 88o77l55j66k55i55i11a..[**T''M @5)!  (+<;&&KP,,Wj22b†66l¥::tÆGÿ -ÿ'ÿÿÿÿÿ''SÎ44f..[((Ob @J-4 $    %5+""C=((OT--Yo11b66k­))YÙÿÿÿÿÿÿÿÿÿÿ&ÿ"ÿÿÿÿÿÿÿÿÿÿÿ 'ö33eÂ--Y¤&&L†>j/Q; * @@77m<61#     (-4 ?F''N]--Zv33e“77n²&&UÞÿ5ÿ>ÿÿÿÿÿ33f»33e•--Zx''N\ ?E-0 "    ,&;6$$HK**Td//]€44gŸ88o¿ .ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/ô22d¾,,W &&Kƒ>{¥67€ø78ƒÿ-.qÿ,-oÿ-.qÿ/0tÿ&'dÿÿÿÿÿÿÿÿ((Tã11bÃ**T®""Dš4†$v g ZPG>81+%         " ($25A""DT**Sl00^…44h¢99qÀ4ðÿÿ'ÿÿÿÿ 'ö77m®22c,,Xo&&KU>>++   %#51!!BD''MZ--Yu11a“66j±))YÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ì22c»,,Vœ%%I>z’::~Ó34|ÿ)*jÿ/0tÿ/0tÿ-.qÿ-.qÿIÿÿÿÿÿÿÿ)ô44hÍ..[¸&&K£<,o b XNG?82,(#  $ + 3->=P&&Kd,,W|22c—77l²11gÓÿÿÿÿÿÿÿEÝ66j£11a„++Vf%%IL:7)&    "!/.<>$$HS**Sm//]ˆ33f¥88oà )÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDç11a¶++U˜%%I{;_,H 3% @@66j;;v ;;v<>{¤67ô78ƒÿ-.qÿ,-oÿ./sÿ23zÿ,-oÿ+ÿÿÿÿÿÿÿ00aÝ22bÃ**T®##E›6‰'yl a XNG@:4/*&"# ( .6)@7N##E`))Ru//^Ž44g¨88pà /ôÿÿ%ÿÿÿÿÿ//`À44h—00^x**T\$$HD80&!    (+5:""CN((Od--Y11bœ66k¹Hçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&'RÜ00`²**S”$$Gv9[*D 1# @@00_99q <>z;;~Ç34|ÿ)*jÿ12xÿ45ÿ56€ÿ34|ÿLÿÿÿÿÿÿÿ $ö55jÏ//]º((O§!!A•2„$w j` XPHB=72.*&# "$( , 2:'D4Q!!A`''Nt--Z‰22d¡77mº%&Ußÿÿÿ!ÿÿÿÿ1î77m©33e‰..[k))QQ""C:2(    &*38 ?I%%J^++Ux00_“44h°/0bÒýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ..]Ò//^¬))RŽ##Eq7W'@ -  @@66j;;v ;;u<==xZ==zz>>{ž89è9:‰ÿ34|ÿ45ÿ12yÿ-.rÿ$%bÿ"ÿÿÿÿÿÿÿ$$Nå33fÇ--Z´&&L¡>‘/ƒ#u ka YRKE@;62/+(&#"  "#%(*-3 9@(I3T!!@c''Lt,,Wˆ22bŸ66k¶--^Öüÿÿ*ÿ ÿÿÿÿ''UË66jš22bz--X_''MF?21"    "*/6:G$$FZ))Qr..[Œ33d¨77mÄ /õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ55hÆ//]§))Q‰##Dl5R$< + @@@@99q <>z‡>?°CD™û:;‰ÿ./tÿ,-oÿ./tÿ23{ÿ"#]ÿÿÿÿÿÿÿý00aÜ33eÃ,,X°&&K =0‚$vl c [TNHC?;741.,*('&%%%%%&'(),.1 5 9 @"G+P5[ @h&&Ly,,WŠ00`Ÿ55j´55jÍ %÷ÿÿÿ$ÿ,ÿ(ÿÿ1í77n§44g‰00_k++UQ%%I;:))     ),67E""CX''No--X‡11b¢66j½Içÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ (ö44fÀ..[¡''Oƒ!!Bf3M!7' @@66j;;u ==y==y$<>{“;;~Í34|ÿ)*jÿ12xÿ45ÿ67‚ÿ01wÿHÿÿÿÿÿÿÿ ø33gÖ22cÀ,,X¯&&KŸ>3„'yo g` XRNHE@=:75310/..-.../24 6 9= BH&O/Y9c""Co''M,,W11`¢55iµ55iÌ %÷ÿÿÿÿÿ,ÿ,ÿ /ü55k¸66k•22cw..Z[))PD""D06!)    !+*64D @W&&Kl++V„00_55h¸,-]Úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;î33eº--Yš''M} @a1I 4 $ @@@@88o<>zz>>{99ä9:‰ÿ34|ÿ67‚ÿ67‚ÿ67‚ÿ,-oÿ,ÿÿÿÿÿÿÿ ø33gÕ22dÀ--X¯&&M !!B“6‡+|#tl d^ XROJGC@><:88766679: < ? C HM&T-[6c >n$$Gz((P†--Z–11b§55j¹55jÏ %÷ÿÿÿÿÿÿÿÿ((XÍ77nŸ44g00_e++VM&&L8>&/  ",&73F ?W%%Ik**S‚//]š33f´44gÐýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ Jâ22c³,,W”&&Kw>Z.C/ " @@33f::s ==y<>{„>?¬BC–ô=>ÿ45€ÿ67‚ÿ67‚ÿ67‚ÿ()hÿÿÿÿÿÿÿÿ ø44gÖ33eÂ..[²))Q¤$$G˜<3ƒ*z$rl e _Z U QNKGEDBAAAAA CE G KO!S)Y._5g$$G-8,     %.(93G=X$$Hk))R..\™33e²33fÍ &øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.._Ò11a«++U%%Ip;T+= ,  @@77m;;v ==y==y$<>{??·CD™û=>ÿ45€ÿ67‚ÿ67‚ÿ67‚ÿ()hÿÿÿÿÿÿÿÿ ÷,,[Ý55hÆ00_·++Vª&&Lž""D”;Š3ƒ,{'u!oi d ` [ XVT Q P O O O P Q SU"Y&],a1f8n>u##E}&&L†**S‘--Z11aª44h¸77nÇDçÿÿÿÿÿ(ÿ /ÿ)ÿ"ÿ /ñ99q­77l’33fu//^[++VD&&K0 @"4#   ! (0(<1I=Z$$Gm))P..[™22d°66lÈ +õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿý55iÃ//^£**S„$$Gh7M(8 ' @@@@88o<>zr>>{’@@ƒÁCD™û=>ÿ45€ÿ67‚ÿ67‚ÿ67‚ÿ()hÿÿÿÿÿÿÿÿýAé66lÌ22d¾..\²**S¦''L""D“>Œ8…2~-y)t'q$m!ifcaa_` `$b'd*f.i2m7q=w!!B}$$Gƒ''MŒ**T•--ZŸ00`ª44f·77lÃ((VÝ !÷ÿÿÿÿÿ(ÿ /ÿ /ÿ /ÿ8ö66m·77n—44hz11a`--YI))Q5##E&6/     # *3&>3L=\##Fn))Pƒ--Zš22c°66kÈ5ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿ7ð44gº..\›((P}""C`5G&3# @@33f::s <>z-==yB>>zZ>>zw>>{–AAŠÒCD›ÿ=>ÿ45€ÿ67ƒÿ67ƒÿ67ƒÿ()iÿ ÿÿÿÿÿÿÿÿ #õ,,ZÜ55jÈ11b»..\±++U¨((O %%I˜""C‘>Œ;†73}1z0w.u-s-r/r0r3t5v8w;z ?~""C‚$$H‡&&LŽ))Q”,,Wœ..\¤11b®44g¹66lÄ((VÜ 'ôÿÿÿÿÿÿ)ÿ /ÿ 0ÿ /ÿ 1ü66n¹88o™55j~22dd//\K**T8$$H(<1!    % .7*C3P=`$$Gr((P†--Z›22c²66kÉ6ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿ !Kâ22d±--Y’''Ns @Y1A!-   @@@@66j::t ==y<>z^>>zz>>{™AAŠÓCD›ÿ=>ÿ45€ÿ67ƒÿ67ƒÿ67ƒÿ()iÿ!ÿÿÿÿÿÿÿÿÿ/ð00aØ55jÈ33d¾00_µ--Y¬++T¦((P &&K™$$H•##E‘""C!!@Š @‡ ?‡ ?† ?…!!A†""Cˆ##FŠ$$HŒ&&K((O”**S™,,WŸ..[¥00`­33e¶55i¿77mÉ""Jä 'ôÿÿÿÿÿÿÿ 4ÿ /ÿ 0ÿ /ÿ 1ü./cÄ88pœ66k33eg00_O,,W;((N*""D5&  $ * 2"<+G4U>e$$Hw))QŠ--ZŸ22c´66kÊ6ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿ.._Î11a§,,Wˆ%%Jk>Q.:( @@@@77m;;v ==y==x"==y3==zH==za>>{}>>|šAAŠÓCD›ÿ=>ÿ45€ÿ67ƒÿ67ƒÿ67ƒÿ)*lÿ /ÿÿÿÿÿÿÿÿÿÿ #õ%%Nã77lÍ44hÄ22d½00`¶..\°--X«++V¦**S¢))R ))Q((Pœ((P›))Q›))Rœ**S++U --Y¤..[¨//^¬11b²33e¹55iÀ77mÉ((UÝ2ïýÿÿÿÿÿÿÿ&ÿIÿFÿ 5ÿ /ÿ 1ü./cÄ99pœ77l44gi00`Q--Y=))Q,##F<,  " ' /7#@,L7[ ?j%%I|))R..[£22d¸22eÏ ,öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ"ÿÿÿÿÿÿÿÿÿÿÿÿ )ø55i¾00_**S~$$Gb9I+4 # @@@@88o<>{}>>|šAAŠÓCD›ÿ=>ÿ45€ÿ67ƒÿ78…ÿ78…ÿ/0wÿHÿÿÿÿÿÿÿÿÿÿÿý/ð!!Gå33gÒ66kÉ44hÃ33e¾22cº11a¶00`´00_³00`²11a³11a´22c·33eº44g¾55iÂ66lÇ00aÔ!!Jä2ïýÿÿÿÿÿÿÿÿÿ&ÿ=ÿLÿPÿ;ÿ9õ77o¹99qš77m44gh11bR..[=**S,&&K <2  ! ' , 3<'G0S8`!!Bp&&K‚**T”//\¨33e¼33gÓ 'øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿFå33f³..\“))Qu##EY6A#-  @@@@88o<>{a>>{{>>{˜@A†ÈCDšû=>ÿ56‚ÿ89ˆÿ78…ÿ89ˆÿ12|ÿVÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿú*ò<ë%%Nâ((TÝ44hÒ88nÎ88nÎ88nÍ++YØ((TÝDç?ê 'õýÿÿÿÿÿÿÿÿÿÿÿ 6ÿ;ÿ 1ÿ 3ÿBÿNÿTñ77o¶99q—77m44hh22dP//\=++U-&&K <2$  !& + 2 9B(M3Z>z^>>{y>>{“@@„¿CD˜ø=>‘ÿ34ÿ78†ÿ78†ÿ78†ÿ78†ÿ/0wÿVÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 6ÿOÿUÿHÿ 6ÿ 1ÿ?ÿ..já;;tª99q’77n{55id22dN//^<,,V,&&K @6!   "' +1 8A&J-U7b>p$$H€((P,,X£00`´44hÇ!!Jçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ!ÿ!ÿ!ÿ!ÿ!ÿ$ÿ ÿÿÿÿÿÿÿÿÿÿÿ /õ55j»00`›++U|%%I_=G.3 "  @@@@99q <>z[>>{t>>|Ž>?­CD—ì@A–ÿ>?“ÿ56‚ÿ89ˆÿ78…ÿ9:‰ÿ78†ÿ/0wÿVÿ"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ;ÿPÿUÿSÿSÿSÿ>ÿ 2ü11jË::t£99qŒ77mt55i`22dK00^:++U+&&K @6& #& , 0 7 ?"H)R1^:j""Cz&&K‰**S™..\«22c½22eÑ3ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ!ÿ!ÿ!ÿ!ÿ!ÿ#ÿ#ÿÿÿÿÿÿÿÿÿÿÿÿ Là44g¯//]Ž))Rq##EU:>(+  @@@@@@99q <>{1==yC==zW>>{n>>{†>>| BCØCD›û=>‘ÿ34€ÿ78†ÿ9:Šÿ78†ÿ9:Šÿ78†ÿ01yÿYÿ 4ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ=ÿVÿ [ÿVÿSÿSÿSÿMÿ Zÿ--kæ66pµ::s™88pƒ77mn55iY22cG//]6++V)''M<3& $' , 2 7 ? H'Q/\7g ?u##G„((O’,,W¢//^³33fÄ++ZÝ#ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ%ÿ!ÿ ÿ ÿ ÿÿÿÿÿÿÿÿý23fÅ22c¡--Y‚((Ne!!AK46#%  @@@@@@99q <>z.>>z>>>{R>>{f>>{}>>|•@@‚·DE™ð@A—ÿ?@•ÿ34€ÿ78†ÿ9:Šÿ78†ÿ89ˆÿ67„ÿ45€ÿ-.uÿVÿ 7ÿ"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ(ÿAÿXÿ!"^ÿ"#`ÿ&'gÿ ZÿSÿSÿMÿ Zÿ()gñ44qÊ;;u¤::sŽ88py66le55hR22cA//]3++V'%%J</  %)- 2 8 @H&Q-[4fíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ&ÿ$ÿ"ÿ!ÿ!ÿ ÿ ÿ ÿÿÿÿÿ ÿ>ë55i³00`“++Vu&&KY=@--  @@@@@@88o;;v ==y>>{==z*==z9==zK>>z^>>zs>>{‰>>|ŸABŠÍDEø@A—ÿ?@•ÿ34€ÿ78†ÿ67…ÿ45€ÿ78†ÿ89ˆÿ34€ÿ34ÿ12{ÿ+,pÿTÿ :ÿ,ÿ%ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ%ÿBÿ !]ÿ$%dÿ !\ÿ"#`ÿ'(iÿ!"^ÿXÿ'(iÿ!"^ÿMÿ Zÿ&&eø12oÕ<>z==y&>>{3==yC>>{T>>{g>>{{>>{>>|¤BBŒÓDEœø@A—ÿ?@•ÿ12{ÿ34ÿ89‡ÿ67…ÿ12{ÿ45€ÿ78†ÿ89‡ÿ23}ÿ01yÿ01yÿ01yÿ01yÿ/0wÿ/0wÿ/0wÿ01yÿ01yÿ01yÿ()jÿ [ÿ"#`ÿ+,qÿ*+oÿ !\ÿXÿ()jÿ#$cÿQÿ !]ÿ,-sÿ()hñ55rË<>z-==z9==zI>>zZ>>{l>>{~>>{‘>>|¤BBÑDE™ð=>‘ÿAB™ÿ?@•ÿ12|ÿ01zÿ34€ÿ89‰ÿ67…ÿ01zÿ01yÿ01yÿ01zÿ01zÿ01yÿ/0xÿ/0xÿ01yÿ01yÿ01yÿ*+pÿ !]ÿXÿ*+nÿ-.uÿ"#aÿMÿ&'hÿ78‡ÿ./tø./là::w½<>{==y&>>{1>>z>>>zM>>z\>>{m>>{}>>{>>|>>€¶BCÙDE›ô=>‘ÿ>?“ÿ=>‘ÿ78‡ÿ12|ÿ01yÿ01yÿ01yÿ01zÿ01zÿ01yÿ/0xÿ/0xÿ01yÿ01yÿ01yÿ-.uÿ"#aÿMÿ&'hÿ<=ÿ78‡ÿ))hñ00nÜ<<|Â<>{==z)>>{3>>z?>>zM>>zZ>>zi>>{w>>{„>>{‘>>{ž>>~°>?†Ì@@‹ß?@ð=>ü<=ÿ<=ÿ<=ÿ>?“ÿ:;Œÿ01yÿ./wÿ23~ÿ<=ÿ<=ÿ<=ÿ<=ÿ89…ñ+,ké01nÛ;;~È==y¬<{""D†%%J’((P,,V©..\´11bÁ44gÍ''Sã (÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ#ÿ#ÿ#ÿ#ÿ#ÿ#ÿ#ÿ$ÿ&ÿ&ÿ,ÿ)ÿ#ÿ"ÿ!ÿ!ÿ!ÿ!ÿ ÿ!ÿ#ÿ#ÿ//dÊ44h£00_ƒ++Ug&&KL ?70&! @@@@@@@@;;u <>{ ==z)>>{3>>z===zI==zT>>{_==zk>>{v>>{€>>{‹>>{“>>{œ>>{£>>{ª=>‚Ã>>‚Æ>?„É;<„Ü66{Ý22sÝ67wÎ<<È=>Æ>>z­==z¨==y¢==yœ<>{==y'>>{0>>{8>>zA==zK==zT>>z\>>ze>>zm==zt==z{==z>>z…>>z‰==zŒ==zŽ==z==zŽ==yŽ==yŒ==yˆ==x„<>{>>|"==z*>>{0>>{7>>z>==yF>>zL==yQ==zV==y\==y`==yc==yf==yh==yi==xi==xg<{""D†%%J’((Pœ++U¨..[´00`¿33fÊ''Rà3òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ&ÿ,ÿ'ÿ#ÿ#ÿ#ÿ#ÿ'ÿ-ÿ 4ÿ 3ÿ(ÿ#ÿ!ÿ ÿ()YÕ66k§22c‰--Zk))QQ##F;:), @@@@@@@@@@::t <>{>>{ ==y'>>z,>>{0>>{5==z9==x===yA==yC==xF==xG==xH==xG<::s;99r799q377m/66k+44g&11a"--Z))Q##F:1   !%*- 3 8 @F"N)X-`4k9t @##FŠ&&L•))Q¡,,W¬//]·22bÃ44hÎ Hç $ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ&ÿ,ÿ1ÿ 3ÿ*ÿ$ÿ#ÿ"ÿ"ÿ$ÿ-ÿ 4ÿ 4ÿ-ÿ%ÿ6ð77n²44f“00_u++VZ&&LC!!A04 %  @@@@@@@@@@@@@@ <>{>>{>>|"==y%==y'==z*==z+>>z,<|""D†%%J’((Pœ++U¨..[´00`¿33fÊ''Sà4òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ$ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ'ÿ-ÿ2ÿ 4ÿ 5ÿ 5ÿ 5ÿ 5ÿ 4ÿ0ÿ%ÿ#ÿ"ÿ#ÿ%ÿ2ÿ..cÍ66l¥33e†//^j++UQ&&K; @)2#  @@@@@@@@@@@@@@@@88o99q ::s ::s ::t 55i 55i //] ))R &&K $$G 0 ,    !%* . 3 8 @G$P)X-`4k;u @##FŠ&&L•))Q¡,,W¬//]·11bÃ44hÎ Hç $ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ#ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ&ÿ+ÿ 5ÿ <ÿ 4ÿ 5ÿ 5ÿ 5ÿ 5ÿ 5ÿ 5ÿ 5ÿ 4ÿ)ÿ$ÿ"ÿ!ÿJá77n¬44hŽ11`q--YW((P@##F.8 ,  @ @ @ @**     "&+ /5 ; BJ%R+[0d6n=y!!Bƒ$$HŽ''N™**T¥--Y°00^»22dÇ--]Ø@îýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ%ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ(ÿ0ÿ =ÿJÿGÿ>ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ/ÿ'ÿ<í88p²55j•22cw..\]**TF%%J1 ?#/#   $' - 1 7 =EK'T,^2g8r>|""D‡%%J’((P++U©..[´00`¿33fÊ''Sà4òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ%ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ(ÿ.ÿ =ÿGÿJÿMÿFÿ :ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 5ÿ=ö55l¼77l™33f}00_b,,WI''N6##E&6'   !%* . 3 8 @G$P)X/a5l;v!!A€##F‹''M–))R¡,,W­//]¸11bÃ44hÎ Iç $ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ%ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ'ÿ,ÿ 6ÿ =ÿ ;ÿAÿGÿLÿMÿAÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 5ÿ=ö66m¾77m44g11af--ZN))R:$$G':1!  "&+ /5 ; BJ%R+[1e8o=y!!B„%%I((Nš**T¥--Y°00_¼22dÇ--]Ø@îýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ%ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ*ÿ 6ÿGÿMÿGÿ>ÿ ;ÿAÿLÿQÿLÿ :ÿ 6ÿ 6ÿ 6ÿ 6ÿ 6ÿ 5ÿ 6ü..dÉ88n 55i„22ci..\P**T<&&K* ?5&  $' - 1 7 =FL&U,^4h8r>|""D‡&&K’))Qž++Vª..\´11aÀ33fË''Sà/ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ%ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ(ÿ0ÿ <ÿOÿVÿTÿMÿFÿ :ÿ ;ÿAÿQÿSÿGÿ 6ÿ 6ÿ 6ÿ 6ÿ 5ÿ 6ü..dÉ88o¡66j†33dl//^R,,W=((O-!!A9&   $) . 3 8 @G$P)X/a5l;v @€##F‹''M—))R¡,,X­//]¹22cÄ00bÒ Iè ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ#ÿ&ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ(ÿ-ÿ 8ÿHÿHÿLÿVÿUÿQÿNÿBÿ 7ÿ <ÿGÿWÿRÿAÿ 7ÿ 7ÿ 6ÿ 7ü..eÉ88p¡66k…33fk00_T--Y?))P.$$G <,  !%* / 6 < BJ%R+[1e8o=y!!B„%%I((Nš**T¥--Z±00_¼33eÈ--^Ø:ðýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ$ÿ&ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ(ÿ-ÿ 9ÿKÿQÿQÿLÿHÿRÿWÿVÿQÿLÿ ;ÿ 7ÿ <ÿMÿZÿMÿ <ÿ 6ÿ>ö23iÃ88p 66k…44gk11aS..[@**S0%%I!<5'  !& + 0 7 =E!L'T._4h8r>|""Dˆ&&J“))Qž++Vª..[µ11aÀ33fË''Sà/ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ$ÿ&ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ)ÿ0ÿ >ÿKÿUÿZÿWÿQÿNÿGÿLÿVÿUÿVÿTÿHÿ 7ÿ 7ÿAÿQÿWÿCÿ>ö77n¼99pœ66lƒ44gj22bS..[@++V.''M!""C9'  !& +1 7 ?F$O)X0b5l;v!!A##F‹''M—))R¢,,X­//]¹22cÄ00bÒ Iè ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ$ÿ'ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ)ÿ-ÿ :ÿMÿWÿ]ÿZÿXÿXÿXÿSÿQÿKÿDÿSÿXÿVÿXÿSÿBÿ 8ÿ 8ÿEÿ _ÿ+,lë::t²88p˜66l44hg22bQ//\=++V.''M!""C=0   % + 2 9 ?!I'R,Z3e8o=y""C„%%I((Nš**T¥--Y²00_¼33eÈ--^Ø:ðýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ%ÿ'ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ)ÿ.ÿ :ÿLÿWÿ"#dÿ%&jÿ !aÿ]ÿXÿXÿZÿXÿSÿOÿDÿHÿVÿVÿVÿZÿNÿ =ÿ 7ÿ5ÿ/0oÞ::t¬88p’66lz44hc22bN//^<,,V,''M$$H=4   % ) 1 8A"I(S/]5h:q ?|##F‡&&K“))Qž++Vª..[µ11aÀ33fÌ''Sà/ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ%ÿ'ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ)ÿ.ÿ :ÿLÿVÿ[ÿZÿ]ÿ%&iÿ"#dÿ _ÿZÿXÿXÿXÿXÿVÿKÿ ?ÿNÿXÿVÿWÿXÿDÿ <ù/0fÉ::s¤88pŒ77lt44g^22cJ00_8--X)((P$$H!!A4   #) 0 8 A&J+S1^6iu##E&&J((P™++U¦..Z±00`½33eÈ--^Ù5òýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ&ÿ(ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ*ÿ.ÿ ;ÿNÿXÿ^ÿ[ÿYÿYÿYÿYÿ\ÿZÿ^ÿ%%jÿ""eÿ_ÿ[ÿYÿYÿYÿYÿ[ÿPÿ @ÿIÿUÿUù44rÍ::t¦99q77nz66ke55hR22d@00_0--Y$((O%%I!!A 0    # +3"<'F/R5];j!!Aw##Gƒ''M))Rœ,,W¨//\´11bÀ44gÌ##Oä +÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ"ÿ&ÿ(ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ*ÿ/ÿ ;ÿLÿXÿ""eÿ%%kÿ bÿ^ÿYÿYÿ[ÿYÿZÿ[ÿZÿ""eÿ%%kÿ bÿ^ÿYÿYÿ[ÿYÿYÿYÿFÿHü..nâ;;v°::sš99q…77mp55j\44fK11b://]+,,W ((P%%I!!A 7    ! ' /!8(C/O5[.I5V;b!!Br$$H€''OŽ**T..[«00_¸33eÅ..^×6òýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ'ÿ)ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ+ÿ0ÿ <ÿPÿ[ÿaÿ]ÿZÿZÿ\ÿZÿ""fÿ%%lÿ cÿ^ÿZÿZÿ\ÿZÿZÿ\ÿZÿ""fÿ&&lÿ`ÿZÿZÿSÿ`ÿ++më88uÁ;;u¥::s‘99q~88nk66lY55iI33e911a,//]",,W((P&&K !!A3*    %.$7,C3P:^!!Al%%I{((O‹++Uš..[ª11a¸33fÆ##Ná ,öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ&ÿ(ÿ)ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ+ÿ-ÿ5ÿCÿMÿWÿ""fÿ&&lÿ!!dÿ_ÿZÿZÿ]ÿ[ÿ^ÿ%%kÿ""fÿ`ÿ\ÿZÿZÿZÿZÿ]ÿ[ÿ^ÿ''nÿ!!dÿSÿ`ÿ++më88uÂ;;u§::s“99r88oo77m^55jN44h>22c211a&//^,,W**S$$H 7*    '!1(<1I9V @d##Ft((N†++U–..Z¦11a¶44gÅIä"ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ'ÿ)ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ+ÿ0ÿ <ÿPÿ[ÿaÿ]ÿZÿ^ÿ%%kÿ##gÿ bÿ]ÿZÿZÿ\ÿZÿ""fÿ%%lÿ cÿ^ÿZÿZÿ\ÿZÿZÿ\ÿWÿ cÿ,,xÿ++më88uÂ;;v¦::t•99rƒ88pq88n`66kP55jB33f622d)00_ ..[**T&&K !!A3*  !*&3,?5M=\##Dk&&K|))SŽ--Y 00`±33fÀ&&TÝ 'øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ'ÿ)ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ+ÿ-ÿ5ÿCÿMÿWÿ""fÿ&&lÿ!!dÿ_ÿZÿZÿ""fÿ&&lÿ!!dÿ_ÿZÿZÿ]ÿ[ÿ^ÿ%%kÿ""fÿ`ÿ\ÿZÿZÿZÿSÿaÿ--wü..oã::w¼;;u¥::t”99rƒ88pq88ob66lR66kD44g833f+00_!00^--Y((P $$H !!@*    "!,*61C9Q!!Aa%%Is((O„,,W—//^¨33dº.._Ò6ñÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ$ÿ&ÿ)ÿ*ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ,ÿ.ÿ6ÿCÿQÿ\ÿbÿ^ÿZÿ^ÿ%%kÿ##hÿ bÿ^ÿZÿ^ÿ%%kÿ##hÿ bÿ^ÿZÿ[ÿ]ÿ[ÿ""gÿ&&mÿaÿZÿZÿTÿaÿ&&kø00qÞ;;w¹;;u£::t’99r€99qq88na77mR66kD55i844g-33d"00_..[,,V''M %%J!!@*   ##--97GÿQÿZÿ`ÿ""gÿ&&nÿ!!fÿaÿ[ÿ[ÿ""gÿ&&nÿ!!fÿ!!eÿ%%lÿ##iÿ cÿ^ÿ[ÿ_ÿ%%lÿ##iÿbÿ^ÿ[ÿ_ÿ((qÿ""gÿUÿbÿ((mò11rØ<55h344g)11b 22c00_//\..Z ++U!!@ @   &"1/:>!!BM%%Ja))Rv,,X‹00`¢44g·++]Ö&ý!ÿ!ÿ!ÿ#ÿ#ÿ!ÿ ÿ"ÿ#ÿ"ÿ!ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ"ÿ$ÿ(ÿ+ÿ,ÿ,ÿ,ÿ,ÿ,ÿ,ÿ,ÿ,ÿ,ÿ,ÿ,ÿ-ÿ2ÿ >ÿOÿZÿ""gÿ%%mÿ dÿ cÿ%%lÿ##iÿ cÿ^ÿ[ÿ_ÿ%%lÿ##iÿ cÿ##hÿ&&nÿ!!fÿaÿ[ÿ[ÿ""gÿ&&oÿ cÿ[ÿ[ÿUÿ&&nÿ77‹ü++oë88vÃ<66j344g*44h"33e22c00^))R ((P''M**  *3)=9$$FK((O`++Vw//^33d¨22fÄ=ï"ÿ"ÿ"ÿ$ÿ&ÿ&ÿ#ÿ"ÿ!ÿ$ÿ#ÿ#ÿ"ÿ#ÿ"ÿ"ÿ#ÿ&ÿ)ÿ,ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ.ÿ3ÿ ?ÿPÿ[ÿ""hÿ%%nÿ eÿaÿ\ÿ\ÿ_ÿ]ÿaÿ%%mÿ""hÿbÿ""hÿ&&nÿ!!fÿbÿ\ÿ\ÿ""hÿ&&oÿ dÿ`ÿ((rÿ""hÿUÿbÿ''lõ11rÙ<6##FH((O^,,Wu00_Ž33f¨22gÅ /÷$ÿ%ÿ"ÿ!ÿ"ÿ%ÿ&ÿ%ÿ#ÿ"ÿ"ÿ#ÿ"ÿ"ÿ"ÿ$ÿ&ÿ*ÿ,ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ.ÿ3ÿ ?ÿPÿYÿ_ÿ]ÿaÿ%%mÿ""hÿbÿ^ÿ\ÿ]ÿ^ÿ]ÿ""hÿ%%nÿ eÿ dÿ%%mÿ##jÿcÿ^ÿ\ÿ`ÿ((rÿ""hÿUÿ&&nÿ77‹ü--pç99vÃ<3%%HE((PZ,,Xr00`Œ44g¦22gÄ /÷%ÿ'ÿ'ÿ%ÿ"ÿ"ÿ$ÿ&ÿ'ÿ%ÿ#ÿ#ÿ$ÿ#ÿ#ÿ%ÿ)ÿ,ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ/ÿ4ÿ @ÿQÿZÿ_ÿ]ÿ]ÿ_ÿ]ÿ""iÿ%%nÿ eÿaÿ]ÿ]ÿ`ÿ^ÿaÿ%%nÿ""iÿcÿ""iÿ&&pÿ eÿ]ÿ]ÿVÿ&&oÿ77ÿ**oî33tÔ<66k466k+55h#33f33f22c//\22c ++U''M @ @   ,:!""D/''NB++VZ00^u33e’66l°Pâ,ÿ.ÿ+ÿ)ÿ'ÿ'ÿ'ÿ'ÿ'ÿ&ÿ$ÿ#ÿ#ÿ%ÿ(ÿ,ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ0ÿ8ÿ CÿUÿ]ÿ[ÿ]ÿ]ÿ]ÿ_ÿ]ÿ]ÿ]ÿ]ÿ_ÿ]ÿ]ÿ_ÿ]ÿ""iÿ&&oÿcÿ]ÿ]ÿVÿdÿ..zø..pä99xÄ<ÿOÿOÿSÿ\ÿ[ÿ\ÿ`ÿ]ÿ]ÿ]ÿ]ÿ`ÿ]ÿ]ÿ]ÿ]ÿaÿ_ÿbÿ''qÿ!!hÿWÿdÿ((oò11sÙ<ÿOÿVÿWÿRÿOÿYÿ]ÿ\ÿ]ÿ]ÿ]ÿ`ÿ]ÿ]ÿ]ÿ]ÿ`ÿ]ÿ^ÿ`ÿ[ÿ fÿ--{ü++pë88vÅ<--ZV11as44h’88n²Að)ÿ)ÿ(ÿ(ÿ)ÿ*ÿ-ÿ-ÿ,ÿ+ÿ)ÿ(ÿ*ÿ-ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ1ÿ9ÿ DÿVÿ]ÿ[ÿWÿUÿNÿSÿ\ÿ[ÿ\ÿ`ÿ]ÿ]ÿ]ÿ]ÿ`ÿ]ÿ]ÿ]ÿWÿeÿ..zù..qä::w¼;;u¨;;t—::s‡99qx88pk88o]77mP77lD66l:55i055i(33f 44h22c11a//] 00`++U++U @  ! !!! $ ( ) ,.//.,+)&#  , <##F#((P4,,XK00`f44g…77m¥%%ZØ.ÿ0ÿ-ÿ*ÿ(ÿ(ÿ)ÿ*ÿ,ÿ-ÿ-ÿ,ÿ-ÿ.ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ4ÿ>ÿOÿPÿTÿ]ÿ\ÿYÿXÿQÿKÿYÿ^ÿ]ÿ^ÿ^ÿ^ÿaÿ^ÿ^ÿ^ÿXÿeÿ&&nù22sÛ<;62.)#  0 ?$$G"**S4..[L22ch55hˆ88oªJè)ÿ*ÿ*ÿ-ÿ/ÿ.ÿ-ÿ+ÿ)ÿ)ÿ*ÿ-ÿ.ÿ/ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ2ÿ9ÿ FÿPÿRÿUÿTÿNÿTÿ]ÿ\ÿ]ÿ\ÿQÿ FÿUÿ^ÿ\ÿ]ÿ^ÿXÿeÿ((oò44tÒ;;v°::tŸ::r99q|88ol77m]66lO66jC55i844g.33f$11b22d//]--Y ++V ++U!!@ @ @ @%%J((P ))Q**R**R)**T3**T>))RG((ON&&KU##FX ?Z9[/Y&VS P M IE@<50+%  %8""C((P)--Y?11`X44gx77m™00gÄ.ÿ0ÿ-ÿ*ÿ)ÿ+ÿ.ÿ.ÿ-ÿ,ÿ*ÿ*ÿ-ÿ/ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ2ÿ8ÿ ?ÿ FÿKÿPÿUÿUÿPÿKÿYÿ^ÿ]ÿ^ÿYÿKÿKÿYÿ]ÿWÿeÿ&&nù44tÓ;;v±::tŸ99r88p{88nk77m[66kM55iA44g533f+33d"11a11a00^))R ((P''M!!@ @++U..Z ..[..[//\'//^4//^B00_P//^[//\d--Xk**Tn''Np$$Go>l5i+d"_Z V P KE?92,&  + !!B''M++U2//^K22dg55j‡99p«Gì-ÿ0ÿ0ÿ/ÿ-ÿ+ÿ+ÿ-ÿ.ÿ.ÿ-ÿ.ÿ/ÿ1ÿ1ÿ1ÿ1ÿ1ÿ1ÿ2ÿ7ÿ @ÿ Gÿ @ÿ Bÿ GÿLÿUÿYÿUÿJÿPÿ]ÿ]ÿ]ÿaÿVÿ GÿPÿ[ÿ[ù11sÜ;;v´::s 99qŽ88p|77nk66k[55jM55h?44f433d*11b 00^00_//\))R ++U''M @ @00_//] 22c11b 22c/33dA33fR44gd44gs33f|22c„11`ˆ..[‰++Uˆ''Mƒ""C~:x0r'kf ^ X QIA;3,&   0 $$H**S'..[;22bU44gt77n—00hÃ/ÿ1ÿ/ÿ/ÿ0ÿ/ÿ.ÿ-ÿ,ÿ-ÿ-ÿ/ÿ0ÿ1ÿ1ÿ1ÿ1ÿ1ÿ1ÿ3ÿ;ÿ GÿSÿQÿHÿ @ÿ Bÿ GÿLÿZÿ[ÿQÿ GÿUÿ_ÿ]ÿ^ÿ_ÿMÿOü..qå77r¼::s£99q‘88o}77ml66k[55jL44h>33e222c(11a00^//]--Y ''M ++U!!@ @33f22c 44h55i(55j:55jN77ldF«!ø (ßAÄ55j¤44g¥11b¢..[))R–$$HŽ ?…5}+v!n f \ ULC;3,& +!!A''M,,W-00_E33ea66k99q¦Jç-ÿ0ÿ0ÿ0ÿ/ÿ/ÿ/ÿ.ÿ-ÿ-ÿ.ÿ/ÿ0ÿ1ÿ1ÿ1ÿ1ÿ1ÿ3ÿ9ÿ GÿQÿSÿVÿOÿ Dÿ @ÿ Bÿ GÿPÿ]ÿYÿJÿLÿYÿ]ÿXÿeÿ++pì88tÁ::t©99q•88o77mn66j^55iM33e@22d311a)11`//\..[++V $$H ''M!!@ @ @33f44g66k77l.77mC88n[!!S—+ÿ(ÿÿÿû7ä.._Æ44g·00_®,,W¥''M›""C‘8ˆ.~%tk aW MD;3,% 0%%I**S ..\422bN44hm77n77q¹Yü@ÿ5ÿ3ÿ2ÿ2ÿ1ÿ0ÿ/ÿ/ÿ/ÿ1ÿ1ÿ2ÿ2ÿ2ÿ2ÿ2ÿ4ÿ:ÿ?ÿ FÿKÿRÿVÿWÿKÿ Aÿ Aÿ Cÿ HÿVÿ`ÿUÿ GÿQÿ\ÿ\ù44tÔ::t¯99r›88o‡77ms66ka55iP33fA22c511a)//]//\,,W((P $$H ''M* @ @66j88o77l77n288oI99qd%%eÁUÿ0ÿ%ÿÿÿÿÿ4î..^Ï22d½..Z²))Q§$$Fœ<1†'zn cX MC;2*#  9 ''N--X&00`<33eX66kx99pœ!!WØ4ÿ Hÿ Eÿ<ÿ6ÿ3ÿ2ÿ2ÿ1ÿ0ÿ1ÿ1ÿ2ÿ2ÿ2ÿ2ÿ2ÿ4ÿ:ÿ?ÿ@ÿ Aÿ FÿKÿUÿZÿUÿ Eÿ Aÿ Aÿ CÿMÿZÿ^ÿLÿNÿ..qæ;;u¸::r£88o77my66jf44hT33fD22d700`+..\!,,W,,W((P $$H !!@**@@66j88p77m 88p599qN::sl22y¾$$oÿNÿ/ÿ%ÿÿÿÿÿÿ4ð00aÌ//^½**T±%%I£ >—4‹)} q d X LB90(!  ##F ((O..[+22cD44hb77mƒ::s©Cï.ÿ1ÿ9ÿ?ÿ Aÿ;ÿ6ÿ3ÿ2ÿ2ÿ3ÿ1ÿ2ÿ2ÿ2ÿ2ÿ4ÿ:ÿ?ÿ@ÿ Aÿ Aÿ Aÿ FÿKÿ[ÿ]ÿRÿ Aÿ Aÿ Aÿ CÿQÿ\ÿ]ö33pÏ::s­88p—77m‚55jm55hZ33fI22c;00_-..[#--Y++U((P $$H !!@**@@33f88o99q 99q4::rO::tn66sž!!iÿ""lÿeÿ:ÿ%ÿÿÿÿÿÿý""Là11aÆ++V¸&&Kª @œ4* q dV K@6.& +%%I,,W00_233fL66jk88oŽ88rºXÿ@ÿ5ÿ3ÿ5ÿ:ÿ?ÿ Aÿ;ÿ6ÿ;ÿ5ÿ2ÿ2ÿ2ÿ2ÿ4ÿ:ÿ?ÿ@ÿ Aÿ Aÿ Aÿ Aÿ Aÿ FÿPÿ`ÿ[ÿJÿ Aÿ Aÿ AÿNÿ..pæ::tº99q£77nŒ66kw44hc33eP11b@00_2//\',,W))Q''N$$G !!A!!@*33f88o88p99q4::rN::tn<55i[77n~::s¢Hë/ÿ2ÿ:ÿ@ÿ Bÿ<ÿ7ÿ4ÿ6ÿ=ÿ<ÿ3ÿ3ÿ3ÿ5ÿ;ÿ@ÿAÿ Bÿ Bÿ Bÿ Bÿ Bÿ Bÿ Bÿ Bÿ BÿKÿ[ÿ`ÿNÿKó66pÄ88p©77m‘55iz33fe22bQ00_@..[1,,V%**T((O##F 9 +*00_::s 77m99q-99rG;;tg;;v‹==y²!!jü!!kÿ((vÿ**zÿ]ÿ0ÿ"ÿÿÿÿÿÿÿ $ù''RÚ,,XÀ&&L® ?œ2Š'yi Y K?5+# *''M ..[22c+33fD66lb99p†;;t«\ùAÿ6ÿ4ÿ6ÿ;ÿ@ÿ Bÿ<ÿ7ÿ<ÿ6ÿ3ÿ3ÿ4ÿ6ÿ6ÿ<ÿ Bÿ Bÿ Bÿ Bÿ Bÿ Bÿ Bÿ Bÿ Bÿ Bÿ BÿNÿgÿ,,qê99r»77n¢66jŠ33fs22c^11`J..[9,,X+**S &&K%%I!!A 7 ++U88o88n88o(99pB::s`;;u„<((O-%%I!""C=4 + ++U66k 66j77n288oM::rn;;u“;;x¿cÿ\ÿ\ÿ\ÿ\ÿVÿ4ÿ&ÿÿÿÿÿÿÿ"ÿÿ!!Kä--ZÂ&&L¬ ?–1$m [K=2(  ''M..[33d"55h;77lW99py;;tžTë2ÿ4ÿ;ÿAÿ Eÿ Eÿ Eÿ Eÿ Eÿ Jÿ?ÿ4ÿ5ÿ4ÿ0ÿ0ÿ0ÿ0ÿ0ÿ1ÿ4ÿ=ÿ Cÿ Cÿ CÿBÿ Bü..gÖ66l³44f™11a..[f++VP))P<%%J-""D ?84  @44f 44h77l.88nI99rh;;u< >-8 1& ..[22c55i(77mA88p`::s„<77n[99q~;;u¥00uä%%rÿiÿgÿgÿgÿgÿgÿOÿ-ÿ!ÿ ÿÿÿ ÿ!ÿ ÿ ÿ&û11bË++T²##F™7)jVC5*" ..[44g55i)77mB99pa::s…<N3:&*   ++U//]33f$55i<77mZ99q};;u¤((iä]ÿ]ÿ]ÿ]ÿ]ÿ]ÿ]ÿVÿ1ÿ"ÿÿ ÿ!ÿ ÿÿ ÿ#ÿÿ!!Ká--Yº&&K¡=ˆ.pZ F 8+# ..[44h66l(88oB99qb;;t…<55i[88o}::t£((iå]ÿ]ÿ]ÿ]ÿ]ÿ]ÿ]ÿ]ÿTÿ2ÿ%ÿ%ÿ&ÿ'ÿ(ÿ(ÿ(ÿ(ÿ ÿ""Oá..[¹''Mž?ƒ0j!S ?1& 66j77l77n&88o?::r];;u<{0a!J 8*  0 &&K--Z*11aD44ha77m„::rª!!^æBÿPÿSÿSÿSÿSÿSÿSÿSÿ6ÿ(ÿ$ÿ$ÿ$ÿ$ÿ#ÿ#ÿ$ÿ'ÿ 3÷11bÃ++U¨$$GŒ8r)X B 2& 33f88o99q 99r7::sT;;uw<ÿDÿ Hÿ Hÿ Hÿ Hÿ Hÿ5ÿ(ÿ$ÿ$ÿ%ÿ%ÿ%ÿ'ÿ(ÿ)ÿ 3÷22dÆ++Vª$$HŽ:s,ZC 2& 00_77n88p99q4::tP;;us<00_Z33fy77m::tÂfÿ_ÿ_ÿ_ÿ]ÿYÿVÿTÿTÿTÿ7ÿ)ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ#ÿ33fÈ--Y¬&&K=s0YC 0$  @88o::t99r);;uB;;va<l0S= +  00_::s ;;u;;u*;;uD<ÿAÿFÿ JÿDÿ2ÿ/ÿ/ÿ/ÿ0ÿ1ÿ2ÿ2ÿ2ÿ1ÿ 6ö33eÁ,,X£&&K†>j/Q: *  @88o::r;;v$<>z¡66Žø77’ÿ,,ÿ((zÿ%%vÿ%%uÿ''yÿ**}ÿ++ÿ((zÿ Jÿ-ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ'ý44fÔ,,W»$$H£9‹)t`M?4,#  +$=4&&JJ++Uc00_€44h 99pÁ @÷4ÿ8ÿ@ÿFÿ HÿDÿ?ÿ<ÿ>ÿDÿ9ÿ0ÿ/ÿ/ÿ/ÿ/ÿ/ÿ0ÿ2ÿ4ÿ5ÿ?ô22d¾,,WŸ%%J‚4,%   *)89$$FN**Rg//]„44f¢88nÀ Dô4ÿ7ÿ8ÿ7ÿ7ÿ7ÿ8ÿ@ÿFÿ HÿFÿ3ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ)ÿNç11a¶++U—%%I{;_+G 3$ ++U88o::r;;u#;;v8<>z›88Šé77“ÿ--ƒÿ,,ÿ--ƒÿ//†ÿ//†ÿ..…ÿ..„ÿ&&xÿ?ÿ,ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿÿGí11`Ë))Q´""B3‡$r ` PD:1)"    $'25 @G&&K^,,Wx11a•66j´((aÝ8ÿ:ÿ8ÿ8ÿ8ÿ9ÿ8ÿ8ÿ8ÿ9ÿBÿEÿ4ÿ.ÿ.ÿ.ÿ.ÿ-ÿ,ÿ+ÿ+ÿ+ÿ$ÿ&&XÜ00_±**S”##Fv9[*D 1" @@66j<>{Ÿ88Šé77“ÿ--ƒÿ,,ÿ..„ÿ11Šÿ44Žÿ44Žÿ22‹ÿ nÿ5ÿ'ÿ&ÿ%ÿ$ÿ$ÿ%ÿ)ÿ$ÿ11eÛ..[Â&&L­<—-‚o _QF=4,%    &)33A!!AT''Mj,,W„11b 55j»Vç8ÿ:ÿ8ÿ8ÿ8ÿ9ÿ8ÿ8ÿ8ÿ8ÿ:ÿ;ÿ8ÿ3ÿ0ÿ0ÿ0ÿ1ÿ2ÿ3ÿ3ÿ3ÿ2ÿ+ý44hÅ..\§((Oˆ!!Bm5S$< + @@77m<>z‹<<»33Œÿ))}ÿ11‰ÿ44Žÿ44ÿ33Œÿ00ˆÿ--ƒÿ''zÿDÿ*ÿ$ÿ$ÿ%ÿ&ÿ(ÿ)ÿÿ!!Lë11`Ë))R¶!!B 3Œ$y h ZOD;3,%    ($21A=Q%%Ig**T//^™44g´11fÕ0ý2ÿ7ÿ9ÿ8ÿ8ÿ8ÿ8ÿ9ÿ8ÿ8ÿ:ÿ9ÿ7ÿ1ÿ0ÿ0ÿ0ÿ0ÿ0ÿ1ÿ3ÿ5ÿ6ÿ <ö33eÀ--Y¡&&Lƒ @g1N 9( @@33f::t ;;t<>{88Šé99–ÿ33Œÿ44Žÿ11‰ÿ--ƒÿ,,‚ÿ..„ÿ//†ÿcÿ1ÿ%ÿ&ÿ&ÿ&ÿ%ÿ$ÿÿ )ù44gÕ,,X¿%%Iª:–+ƒrb VLB:2+%   " *#4-A9Q##Ed))Q|..[”33e®77mÈ <õ/ÿ1ÿ3ÿ6ÿ8ÿ9ÿ8ÿ8ÿ8ÿ8ÿ:ÿ;ÿ9ÿ5ÿ/ÿ/ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ/ÿ3ÿNì22cº,,Wœ%%I~>zŠ==€¹::™ÿ11Šÿ..…ÿ,,ÿ..„ÿ//†ÿ//†ÿ..…ÿ%%wÿBÿ+ÿ&ÿ%ÿ$ÿ#ÿ#ÿ&ÿÿ((Væ00_É))Q´!!B¡3$| l_SJA92,%     # ,"6,B8R""Ce''Nz,,X‘22c«66kÄOî2ÿ3ÿ1ÿ1ÿ2ÿ4ÿ7ÿ8ÿ9ÿ8ÿ8ÿ:ÿ9ÿ;ÿ4ÿ/ÿ/ÿ/ÿ.ÿ.ÿ,ÿ,ÿ,ÿ,ÿ*ÿ''ZÝ00`´**T–$$Gx:^)E 2 % @@33f::t ;;t==y%<>{™77„ß22Œÿ**ÿ//‡ÿ//†ÿ--„ÿ--ƒÿ//‡ÿ33ÿlÿ4ÿ&ÿ#ÿ#ÿ$ÿ%ÿ$ÿÿ .÷44gÔ--Y¿%%J¬<™-‡w i ]SIA:3,&"   "' 0!8,E7U!!Bf''Mz,,W‘00`©55iÁ!!Zæ9ÿ;ÿ7ÿ4ÿ2ÿ2ÿ3ÿ4ÿ6ÿ8ÿ9ÿ;ÿ<ÿ:ÿ;ÿ5ÿ1ÿ1ÿ1ÿ2ÿ2ÿ1ÿ1ÿ/ÿ-ÿ%ÿ11dÎ//]­))P""Cs5X&B 0# @@88o<>z„>>~­;;˜ø77”ÿ--„ÿ,,‚ÿ..†ÿ22Œÿ55ÿ66’ÿ--„ÿ Kÿ,ÿ$ÿ%ÿ$ÿ#ÿ#ÿ'ÿÿ$$Qè11bÌ**T¸##E¥6“)ƒt g [RJA;4.)#   % + 3"<,I7W!!Ah&&K|,,V’00`©44hÀ%%Yä-ÿ3ÿ8ÿ:ÿ8ÿ6ÿ3ÿ2ÿ3ÿ4ÿ6ÿ6ÿ:ÿ:ÿ;ÿ9ÿ4ÿ4ÿ3ÿ1ÿ2ÿ3ÿ4ÿ4ÿ4ÿ3ÿ 3ø44fÄ--Z§''M‰ ?n1T!> -! @@33f::t ==y==x#<>{’<<ƒÈ33ÿ))}ÿ11‰ÿ44ÿ66’ÿ66’ÿ55ÿ44ÿ""rÿ8ÿ'ÿ#ÿ#ÿ$ÿ%ÿ$ÿÿ"û11dÚ//]Å((P²!!A 4&r f [SJD<60+&"  $ ( /8$B.N7\!!Bm&&L++V”00_ª44hÀ,,bÞ0ý0ÿ2ÿ4ÿ7ÿ9ÿ9ÿ7ÿ4ÿ3ÿ3ÿ4ÿ7ÿ9ÿ:ÿ=ÿ7ÿ3ÿ4ÿ4ÿ4ÿ3ÿ1ÿ2ÿ3ÿ6ÿ8ÿJï22c¾++V¡%%Iƒ>{Ÿ88Šè99˜ÿ33ÿ66’ÿ66’ÿ55ÿ33ÿ00ˆÿ**€ÿ Nÿ.ÿ$ÿ%ÿ$ÿ"ÿ!ÿ"ÿÿ3ô44gÒ--ZÀ''M­ ?œ1Œ%~r g ]TKE>83.)%" # ) - 5=&H/T:c""Cs''M„++V˜00_­44hÂ((]á0ý0ÿ2ÿ2ÿ2ÿ3ÿ5ÿ8ÿ8ÿ8ÿ6ÿ4ÿ4ÿ8ÿ:ÿ;ÿ;ÿ5ÿ1ÿ2ÿ3ÿ4ÿ4ÿ4ÿ3ÿ1ÿ1ÿ1ÿ&&[Þ00`·**Sš##F}8c*L 8 ) @@33f::s ==x<>z‡>>€¯CC£ø==ÿ44ÿ44ÿ11‹ÿ--…ÿ--„ÿ//ˆÿ&&yÿ?ÿ+ÿ#ÿ"ÿ!ÿ"ÿ#ÿ'ÿ ÿGì33eÎ--X¼''L« ?›1Œ%~r h_ VNHA;72-)%" $( - 4 <"D*O3\>zn>>{@@‡ÁCC§ÿ::™ÿ..†ÿ,,‚ÿ..†ÿ22Œÿ55‘ÿ44ÿnÿ6ÿ'ÿ"ÿ#ÿ%ÿ%ÿ$ÿÿÿ$$Qç22dÌ,,Xº&&Kª ?›3Œ(€u ja YRJE?:61.*'$" #&* . 5 :C%L,W7d ?q$$H))Q’--Y£11b·55jÉHì-ÿ0ÿ3ÿ3ÿ3ÿ3ÿ3ÿ3ÿ3ÿ4ÿ5ÿ6ÿ7ÿ9ÿ:ÿ;ÿ<ÿ<ÿ8ÿ2ÿ2ÿ2ÿ2ÿ2ÿ2ÿ3ÿ4ÿ6ÿ9ÿDô44gÇ--Zª''MŽ?r1YB 2% @@@@88o<>zw>>{™::‡Ù33Žÿ))~ÿ11Šÿ44ÿ66’ÿ66’ÿ66’ÿ00‰ÿaÿ4ÿ(ÿ%ÿ%ÿ#ÿ"ÿ"ÿÿý,,\â22dÊ--Yº''Mª!!A›6Ž)!w n d \ VNHD>:62/,)'%#! "$&)- 16 ; B!K*U1_;m""Cz&&LŠ++Tš..\«22d½22gÑ<ó+ÿ/ÿ3ÿ2ÿ3ÿ3ÿ3ÿ3ÿ3ÿ3ÿ3ÿ4ÿ5ÿ8ÿ:ÿ;ÿ<ÿ<ÿ<ÿ6ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ0ÿ2ÿ!!Vè33eÁ--X¤%%Jˆ=m/U@ /$ @@33f::s ==x<>{~>>{Ÿ88‹è99˜ÿ33Žÿ66’ÿ66’ÿ66’ÿ66’ÿ66’ÿ..…ÿ]ÿ2ÿ'ÿ"ÿ!ÿ!ÿ!ÿ"ÿÿý$$Qæ33eË--Z»((O¬""Dž9‘/…&{q ia YSNHD?;852/-+)'&%##""!!!!""##%&')+-1 49 > DL'T/_7j ?v$$G„((P“,,W¢00_³44gÄ++_Ý5û.ÿ-ÿ-ÿ0ÿ2ÿ2ÿ3ÿ3ÿ3ÿ3ÿ3ÿ3ÿ4ÿ:ÿXÿeÿgÿgÿaÿWÿ9ÿ.ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ%ÿ((\ã22d¼,,WŸ%%Iƒ;i-Q < ," @@66j;;u ==y==x#==y4==yL==zf>>{„>>|¤BB¡ô==ÿ44ÿ66’ÿ66’ÿ66’ÿ66’ÿ66“ÿ,,‚ÿUÿ2ÿ%ÿ!ÿ!ÿ!ÿ!ÿ"ÿÿÿ!!Lé44gÍ//]½**S¯$$H¢>•4Š+#vm f_ XRNHEA>;86420.-,+*))))))*+,-.025 8 = B HN&V-`5i=u##E''M**T..\¬22c¼66jÌHì-ÿ0ÿ2ÿ.ÿ,ÿ.ÿ1ÿ2ÿ2ÿ3ÿ3ÿ3ÿ6ÿ=ÿXÿ##sÿ--„ÿ//ˆÿ00ˆÿ11Šÿ00ˆÿ++ÿ[ÿ5ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ%ÿ44jØ22d¸,,Wš%%I:d+L9 +  @@@@88o<>{‰>>€­BB¡ô==ÿ44ÿ66’ÿ66’ÿ66’ÿ77”ÿ77”ÿ00‰ÿ\ÿ3ÿ%ÿ!ÿ!ÿ!ÿ!ÿ"ÿÿÿ7ñ66jÑ11aÂ,,X´''N§""Dš;2†+}#tm e _Z TOKGDA><:87544322222224569; ?B G M R'Z-b4k>zn>>{‹??€¯BB¡ô==ÿ44ÿ66’ÿ77”ÿ77”ÿ77”ÿ88–ÿ11‹ÿ^ÿ3ÿ%ÿ!ÿ!ÿ!ÿ!ÿ!ÿ#ÿÿ (ø++\Þ33eÇ//]º**T®&&K¢""B—:3„,|%tmg a \X S PLIFDB@>=<;;::;;==? A C G J OS#Y)_/g6o==zU>>zo>>{Œ??€¯BB¢ô==žÿ55‘ÿ88–ÿ77”ÿ88–ÿ77•ÿ66“ÿ11‹ÿeÿ7ÿ)ÿ"ÿ!ÿ!ÿ"ÿ!ÿ"ÿÿÿBì55jÎ22cÁ..[µ**Sª&&KŸ""C•<6„/}+w$q!kf b ^ Y WT Q N M K J H H G G G HI J L N QT X%\(a-g3m8t>|##E†&&K))Qš--X¦//^²33d¿22fÐHì1ý.ÿ-ÿ,ÿ,ÿ,ÿ.ÿ2ÿ3ÿ2ÿ0ÿ3ÿ<ÿdÿ%%xÿ++‚ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00Šÿ44ÿ66“ÿ66“ÿ66“ÿ33ÿ##vÿDÿ2ÿ-ÿ-ÿ-ÿ-ÿ-ÿ&ÿ))\Ý44h±//\’))Pu!!B\2D1 $ @@@@66j::t ==x<>z,==y@==zU>>zp>>{Œ??€¯BB¢ô==Ÿÿ44ÿ77•ÿ88–ÿ66“ÿ66“ÿ77•ÿ44ÿ&&yÿ<ÿ*ÿ!ÿ!ÿ"ÿ!ÿ"ÿ"ÿ"ÿÿ (ø((Wá55iÊ11b¿..[³**T©''M $$G— A:ˆ6‚1|-w)r%m"ifc` ] [ [ X X W W WXXZ["^%`(c-g0k5p9v>|""D„$$H‹''N”**Tž--Y¨00_³33e¿66kÌ!!Pç1ú,ÿ0ÿ2ÿ.ÿ,ÿ,ÿ-ÿ-ÿ/ÿ2ÿ8ÿ>ÿYÿlÿ%%yÿ''|ÿ++‚ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00Šÿ44ÿ66“ÿ66“ÿ66“ÿ22ÿ11‹ÿ!!qÿ<ÿ/ÿ+ÿ+ÿ+ÿ+ÿ!ÿIå66k±00`**Ts##FY6A"/" @@@@77m::t ==y<>z-==y@==zU>>zn>>{‰>>€­CCžì<<œÿ77”ÿ44ÿ66“ÿ77•ÿ77•ÿ77•ÿ88–ÿ))ÿFÿ/ÿ'ÿ!ÿ"ÿ"ÿ!ÿ"ÿ#ÿÿÿ -õ((Wà55iÉ22c¾//]µ,,X¬))Q£&&L›$$G”""BŽ>‰;…63{1w/t-q*o*m(l)j'i(h)i)i+j,k.m0n4q5t9w=| @€""D†%%I''N”))R›,,W¤//]­11a·44gÂ22fÐ!!Pç,ú(ÿ,ÿ.ÿ.ÿ0ÿ0ÿ-ÿ,ÿ,ÿ,ÿ/ÿ8ÿTÿ""sÿ""sÿnÿ""sÿ''|ÿ++‚ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00Šÿ44ÿ66“ÿ77•ÿ55’ÿ00Šÿ44ÿ11Œÿjÿ9ÿ+ÿ(ÿ'ÿ%ÿÿ:í77m¯22dŽ--Xp&&KU<>(,  @@@@77m;;u ==y<>z-==y?==zS>>{l>>{†>>|¡@@“ß??¢ÿ==žÿ55’ÿ88–ÿ77”ÿ88–ÿ77”ÿ77•ÿ..†ÿoÿ<ÿ.ÿ%ÿ!ÿ!ÿ"ÿ ÿ!ÿ$ÿÿÿ -õ$$Rã66kÌ33fÂ11a¹..\±,,W©**S£''Nœ&&L—$$H’""D""C‹ @‡=„<‚<€:9}9}:|:|;|<}=~ ?€!!A‚""D†##F‰%%JŽ''M’((Q—**T--X¤..\¬00`´33e½55iÇ//c×Bî ý$ÿ+ÿ-ÿ,ÿ,ÿ,ÿ.ÿ1ÿ/ÿ-ÿ.ÿ4ÿ>ÿ\ÿhÿ""sÿ%%yÿ pÿ pÿ%%xÿ++‚ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00Šÿ44ÿ66“ÿ88–ÿ44ÿ00Šÿ44ÿ66“ÿ11Œÿgÿ7ÿ,ÿ&ÿ'ÿ+ÿ 2ö88p«44gŠ//\m((PR!!A:+(  @@@@77m;;u ==y<>z<>>{Q>>zh>>{>>|›AAŽÍCC¦û==Ÿÿ33ÿ77•ÿ77•ÿ77•ÿ77•ÿ77•ÿ99˜ÿ,,ƒÿ\ÿ4ÿ'ÿ!ÿ!ÿ ÿ"ÿ ÿ!ÿ$ÿÿÿ#ú<î,,\Ú66kÉ44gÁ22cº00_³..[­--Y©++U£**S ))Q((O™''N—&&L”&&K“&&K’%%J‘%%J‘%%J&&L’''M“''N”((P—))R™**T++V¡--Y¦..\«00`±22c·44g¿66jÇ//bÔLé 0ø(ÿ+ÿ+ÿ(ÿ+ÿ,ÿ,ÿ,ÿ-ÿ-ÿ/ÿ2ÿ5ÿ=ÿ^ÿjÿjÿhÿlÿ%%xÿ""sÿnÿ""sÿ++‚ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00Šÿ44ÿ77”ÿ88–ÿ22ÿ00Šÿ44ÿ66“ÿ88–ÿ//ˆÿeÿ<ÿ1ÿ,ÿ-ÿ&ÿ..c¯55i„00`f++UM##F74% @@@@77m::t ==y>>{==z*==z9>>zM>>{b>>{z>>{“@@„·DD¢ð@@£ÿ>> ÿ55’ÿ88–ÿ77”ÿ99˜ÿ77•ÿ77•ÿ11ŒÿoÿAÿ0ÿ&ÿ!ÿ!ÿ ÿ"ÿ ÿ!ÿ#ÿ%ÿÿÿ#ú<í%%Qá33fÐ66jÆ44gÁ33e¼22c¸11a´00_°//^®..\¬..\©..[©..[¨..[¨..[©..\©..\«//]­00_¯11a²22c¶33eº44h¿55jÅ77mË((ZÝHë .÷ÿ$ÿ+ÿ-ÿ,ÿ+ÿ(ÿ)ÿ,ÿ,ÿ,ÿ,ÿ.ÿ3ÿBÿ]ÿhÿkÿjÿiÿhÿhÿ""sÿ&&yÿnÿlÿ**ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00‰ÿ00Šÿ33ÿ88–ÿ66“ÿ00Šÿ00Šÿ44ÿ77”ÿ88–ÿ22ÿ00‰ÿ$$vÿIÿ4ÿ.ÿ&ÿLÁ66k|22b_,,XG%%J18" @@@@77m::t <>z==y'==y6==zH>>z[>>zr>>{Š>>|¢BB•ÙCC¦û==Ÿÿ33ÿ77•ÿ99˜ÿ77•ÿ99˜ÿ77•ÿ77•ÿ00ŠÿmÿAÿ3ÿ*ÿ%ÿ"ÿ!ÿ"ÿ$ÿ#ÿ"ÿ$ÿ&ÿÿÿÿ )÷8ïCë((XÞ((VÚ77mÌ66lÈ66kÆ55jÃ55jÃ55iÂ55iÂ55jÃ55jÃ66kÅ66lÇ77mÊ++]×((ZÝIë=ð *÷ÿ ÿ)ÿ.ÿ+ÿ(ÿ,ÿ-ÿ-ÿ+ÿ*ÿ)ÿ,ÿ.ÿ1ÿ8ÿBÿ_ÿoÿlÿiÿjÿkÿjÿkÿiÿmÿ''|ÿ!!sÿcÿ&&zÿ<<ÿ<<ÿ<<–ñ<<–ñ<<–ñ<<ÿ<<ÿ>> ÿ==žÿ77•ÿ11Œÿ00Šÿ00Šÿ33ÿ88—ÿ66”ÿ00Šÿ00Šÿ00Šÿ##uÿJÿ7ÿ*ÿGÁ77lr33dW..[@((O-=# @@@@@@::t <>{1==yB==zT>>zi>>{>>|•@@„·CC ì@@¤ÿ??¢ÿ33ÿ77•ÿ99˜ÿ77•ÿ99˜ÿ77•ÿ88–ÿ00Šÿ""sÿ Rÿ9ÿ-ÿ&ÿ"ÿ#ÿ"ÿ"ÿ$ÿ#ÿ"ÿ$ÿ%ÿ&ÿ#ÿÿÿÿÿÿÿ .õ .õ .õ .õ .õ .õýÿÿÿ ÿ)ÿ.ÿ+ÿ&ÿ%ÿ(ÿ,ÿ+ÿ)ÿ*ÿ-ÿ-ÿ,ÿ+ÿ,ÿ4ÿ=ÿVÿmÿ##uÿ&&zÿ!!sÿnÿiÿiÿlÿjÿjÿiÿeÿ qÿ,,„ÿ**wî22xÝ<<}Ì==y¾==y¸==y¶==yµ==z¸>>Ä>>ŠÔ??’â??šñ==œü<<ÿ>> ÿ==žÿ77•ÿ11Œÿ00Šÿ00Šÿ00Šÿ--†ÿnÿKÿ5ÿ--d77me33fL//]8((P' @# @@@@@@99q <>z-==z;>>zL>>z^>>zs>>{ˆ>>|žAA‹ÆDD£ð@@¤ÿ??¢ÿ33ÿ77•ÿ99˜ÿ77•ÿ88—ÿ66“ÿ66”ÿ44‘ÿ))ÿ`ÿ?ÿ6ÿ-ÿ(ÿ$ÿ#ÿ"ÿ"ÿ$ÿ%ÿ#ÿ"ÿ$ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ(ÿ,ÿ+ÿ'ÿ%ÿ'ÿ*ÿ+ÿ*ÿ)ÿ.ÿ3ÿ:ÿBÿ Mÿaÿ%%yÿ**ÿ&&zÿ!!rÿ%%yÿ##vÿpÿkÿiÿjÿkÿgÿgÿ pü..wä;;yÃ<>{ª>>¼>>ˆË??“á??˜í==›ø<<ÿ<<ÿ>> ÿ88˜ÿ,,„ÿ##vÿ_´99qm77mU33fA//].**S ""B, @@@@@@88o;;v ==y>>{==y'>>{3==yC>>{S>>{e>>{z>>|>>|¡AA‹ÈDD¢ð@@¤ÿ??¢ÿ33ÿ77•ÿ66”ÿ44ÿ77•ÿ88—ÿ66“ÿ66”ÿ11ÿ&&zÿ`ÿ Mÿ:ÿ1ÿ)ÿ&ÿ%ÿ%ÿ"ÿ"ÿ#ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ'ÿ*ÿ+ÿ(ÿ%ÿ'ÿ+ÿ0ÿ4ÿ8ÿ?ÿ_ÿ%%yÿ--…ÿ&&zÿ!!rÿ%%yÿ++ƒÿ((}ÿpÿ""tÿ&&{ÿ pÿiÿiÿcÿpÿ--ƒü..wã99w»<>z—>>zž>>{£>>{¦>>‡¼??‘Ê77‡Ì44}°99v†;;uk99qW77lD33f300_$))R!!B' @@@@@@::t <>z-==z9==zI>>zX>>{k>>{}>>{>>|¢AA‹ÈDD£ð@@¤ÿ??¢ÿ11Œÿ33ÿ88–ÿ66”ÿ44ÿ77•ÿ88—ÿ33ÿ33ÿ44ÿ--†ÿkÿ QÿEÿ>ÿ9ÿ1ÿ*ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ(ÿ,ÿ0ÿ3ÿ5ÿ<ÿHÿ^ÿmÿ!!sÿ""sÿ%%yÿ**ÿ//ˆÿ((}ÿpÿ""tÿ++ƒÿ**ÿ pÿmÿ((}ÿ""tÿcÿoÿ&&vø11xØ;;yµ<>{==y%>>{0>>z<>>zL>>z[>>{k>>{|>>{>>{ž??„ºCC›ä==ûAA¥ÿ??¢ÿ11Œÿ33ÿ88–ÿ66”ÿ00Šÿ33ÿ77•ÿ88—ÿ33ÿ00Šÿ00Šÿ11‹ÿ**ÿmÿ SÿAÿ?ÿ>ÿ>ÿ>ÿ=ÿ=ÿ=ÿ=ÿ=ÿ>ÿ>ÿ>ÿ>ÿ>ÿ>ÿ?ÿEÿ Oÿ`ÿeÿiÿ##vÿ**ÿ//ˆÿ00Šÿ((~ÿ!!rÿ""tÿ**ÿ//ˆÿ**ÿ pÿmÿ**€ÿ--†ÿ""tÿcÿ&&zÿ77”ü++wê55xÊ<<>{==y'>>{2>>z>>>zL>>zY>>zi>>{x>>{ˆ>>{˜>>|§AAÍCCé==ûAA¥ÿ??¢ÿ11Œÿ00Šÿ33ÿ88–ÿ66”ÿ00Šÿ00Šÿ00Šÿ44ÿ77•ÿ88–ÿ22ÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ//ˆÿ//ˆÿ//ˆÿ//ˆÿ//ˆÿ//ˆÿ//ˆÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ((~ÿ!!rÿ""tÿ**ÿ//ˆÿ00Šÿ++ƒÿ!!rÿmÿ))~ÿ//ˆÿ--†ÿ""tÿcÿ&&zÿ<<ÿ77”ü,,wê33xÐ==x­<>z-==y2==y6==z9==x<==x===x;<>{==y(>>{2>>z<==zI==zV>>{c>>zq>>{€>>{Ž>>{›>>|ªAAÍCCšä==›ø<<ÿAA¥ÿ??¢ÿ11Œÿ00Šÿ00Šÿ00Šÿ33ÿ88—ÿ66”ÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ//ˆÿ//ˆÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ++ƒÿ!!rÿmÿ))~ÿ//ˆÿ00Šÿ..‡ÿ##vÿgÿ qÿ22Žÿ<<ÿ77”ü**wí00xÜ<<€Ä==x«<>z>>{>>{>>|!==y$==y$==y$==x#<>{==y'>>{0==z9==yE>>zP>>z[>>zh>>{t>>{€>>{>>{™>>{¥>>‚ºAA’ÓCCé==™ô<<ÿ<<ÿ>> ÿ==žÿ77•ÿ11Œÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ//ˆÿ//ˆÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ..‡ÿ##vÿgÿ qÿ22Žÿ<<ÿ<<ÿ77”ü00‚ñ//xâ44}Õ<<½==y«<>{>>|#>>z->>{5>>z>==zI==yR>>z\==zh>>zq>>z{>>z†>>{>>{™>>{¢>>{«>>‡Ç>>ŽÕ@@“á??›ð==šô<<ÿ<<ÿ<<ÿ<<ÿ>> ÿ::šÿ00Šÿ00Šÿ00Šÿ00Šÿ00Šÿ..ˆÿ22ÿ<<ÿ<<ÿ<<ÿ<<ÿ<<ÿ<<ÿ<<ÿ<<›ü<<–ñ88ñ33æ//xà66~Ñ;;ƒÈ==z°==y©==y¢==x›<>z>>{ ==y'>>z.>>{6>>z>==zG>>zO>>zX==za==zi==zr==zz==z‚>>z‰>>{>>z˜>>{>>{£>>{©>>~³==†Æ>>†É??Ø;;ŒÞ66…ß66„à66„à66„à66„à22~ß55~Ö<<ƒÌ==†Ë==†É==…È>>€¼==z¯==z«==y¨==y¤==y¡==yœ==x—==x’<>z>>{ ==y'>>z->>{4==z;==yB==zI==yP==zV==z]==yd==yj==zp==yu==y{==z€==z…==z‰==y==z==z’==z”==z•==z•==z–==y•==y•==y“==y‘==x==y==x‹<>z>>{>>|#==z)>>z.>>{3==z9==y?==yD==zI==yO==yR==yW==y]==y`==xc==yf==yi==yl==xm==xo==xo==xo==xn==xm<::s:::s5::t/::r+99q'::r#88p77m88o99q77n55i 22c 33f00_++U @@@@@@@@@@@@@ ;;u <>z>>{>>|!==y'==z*>>z.>>{2==y6<>z>>{>>{>>|!==y%==y'==z*==z+>>z-<>z>>z>>z>>z>>z>>z>>z;;v;;v;;u==z==y==y==y==x<kAŸȉ(‡È@ˆr Hd '` o“µD«–¤æ"» ÒC¢Mï}Ú8G²’°Þ ´®’,+u´XqJ-¬È€—èó{Ä8@z<¬Ž€FÛ]h@Ô@¤ÖD ‹ÔET ÐQ£ˆj(åh4‘ßÊsGDþÖÆF°!È?ùîwÃ~QH?…¶JWËàb‰Ö'Ÿ+¸j£Édm´üòK)šæäoká™Q[‹Y]ÃzÿÒt݇~xæ}çA.<ü¦„l‡¸º±[[Ø0H°eÙ À/K4Q’h(¢”€Œ!" 10 ¢!€1"à‡ Q|Ü ;ÆÀí ØH”ç"›Âl´ÈhùæD •‚Áq/å׉aF`£}lÿÿ:a 8 °Þcê\QyoÓ,›&IRUJ= A#@   ê.Q-"¥ˆT¤T%"•"ª¨­kil.7Æ%JE·b4âïÞeˆðG÷îÉ_|ôÑÈ}2Ç' ?•ú,Ö§B€ ïÜ‘áJJógÿñ?JA¢`Ì+Ià<Ë…'€ßÄϺªõ‡i £b°½Õú/_©”ˆ2Ž}À"Æ h¢"ðÇ š ½ž{[Zß)uÕ[;2-еRàPY‹ÊZð×9a‰Ð„€ƒÅâeÒyã¨(0­ªašâêÎ6ÓAå\8l𢙦I2WyþÄ P P"^TíåB€D…ˆ*•Q˜k­” ÌMfL¸9™x‚ÿóo}KæMº7ô—÷îÑÞhDìíëS£ºö>º=1J@¬u€ˆp d2‹°gæÊ¹Ð„ O··¹s?àO•y-Sž~é´þµ­Dð8ÏOEò kQ*íHÀˆ†"20QD6ØDTÈ6wµ~g¤Ô5²öŠÉr­¼ÇÑbq è©ÖÈ’y’ \£é]ñ!À3#5“Á¶%ÀŒ£¢Ð-1l\ÝÙÁ&ðAem¸?ŸO)MòñøI­ÔcYÑBDæÌ˜QÁ" ,D©R‰TJ©ZE÷ÁŒñ™1áöÆF­:ž¤) Ò9""Õ¦EzéÑ^ZT÷>JèôÒ.x­”§›[[þ÷ÞZ’Àÿͼ´þä5Ka^À¯(giýà«ÂÚD+e­3uü¥9ˆ¶ZÐoQ<6wµ~C©Û°v'LðÏZÀ'g,¥´RÌ/¼ï¯e¬HçggÆ@Ó‰5½ŽžN§8, }T;×67wÞß©¬ ÷‹âPeÙ# ‡¿‘¹ˆÌ˜hF"SÌB$ƒ¹ˆ$R* ‘FDlnŒNµæî³$JDª­…0ˆY€f‘mTºzˆÜdœˆØö¹› ÒfÛZ˜dYø`o?Ùß?UíøoZ+âu!‚Kø$KÜÜÚÂ;;ØWµ¾@³¦I­“Dë´>N€¿`“âåvw ˆn_3æeíµ>èµR/^Z¿>Ñz L¦e‰ç‹á°(À̯¬Õ=«I€¤I‚ašb{8D¢5ŒÖ˜äù©Ç­#×’Â0M‘Ó'„½k››{7ùû‹Å¡ï©,»ÇÀ1MIdÊ"SæŠh!@Á1vЈH£” DÄŠHT$ø¯L&˨ó³èëk´Z?‹ÀO 0&`,"[ Ú$`À€v7µ~ÿºÖß&ï7y è=ó)À`eÓàáÑcQ×h¼‡CŒÀ5ˆgù¯+Ú9ç`Š"~8ÄôÄ8Mquc›ƒRc@D§"ðžA–$ÐD§A+…{ûûú¨(öÆy¾—eÙïªÑèž”zN"Ç"2‘…Š.CCD5"V-0)jÓ¦? DR¥hS§h³"ªí|•X×Ð@¤&`ADS¥"¢ƒˆ ÌÔ„ ©ÖœhÝ/eîˆà܃¾/—ð5dUók¥:àu\×&‹Z?SD9‹Œ4јE¶Ñ"è÷Z¸²©õ·®iýmåý&;‡ƒÅ‰1/€>–ê JkqPxtt„ƒÅUÃìhktÛ÷ÙEÉ:säב®! #–Ð>瑵xòüy,?DDÚ[{{¸¹µ£53T°ú„ÀÌK—ÁzE]g“¦ùÖ®÷ï.ˆëÑègÐú€E¦*Æ  êTGD ¶Ô™b•dBôyw ¢ ±^" ÇÀÕ!ÑFYת áA“$ŸRÛÇ+‰õ"Þ…T›í}Œ ü€þôœÂ%|EY¿ÑχÃüzÖ4&7&UD™£Vëo°MD;¿GÀÕM­¿}]ë¨þóøiŠÀ| ô6¾xþŸïï£BÌ­u¥w}µ wgèY¦ýבŽDN9Âíu‡˜ðD„-ö÷ñéþ>r­1JS\™Lp}s,rŠ\€ZY’À…€ÀíÁlv#ÛØxb&“ÏE©cæ)qbØIºâ§œˆÒØÉ€ÍÑÕk摊µѲ"B¨ëÐý7ϼÿßwnÞü×måch •<ˆ|¢”ï}|n¯Ÿ"ó.—ðä%àï}ikògŒ5Ñ„E¶éDã_%àj®ÔÛ·µþÂî)ß¿PY‹§³>ßßÇãù ijßãôÙ§zÿÓ‰FT“m7ÏÊçÙËuŸsZU¹ai4D›:¾FßÂX%…îýØö=NCUW>{ö 767qmsy’€ˆ˜Á"Ë€dGZ)ˆŠºÖÜÚe¾5g>Ry~” ‡GžhÖÿXèŒh<¶r¢ØTÌ#ÑZ)03*k±XI‹úðl6Ã/ž=óºþ¯ocã³ÁpX#rk˜fn*ï]ûÑû mÀ\À+åeà?¬*“imŒR©RjЦó6Ed‡ˆv\#à:×oóGÛDo7Öšçe¹øEÓàþá!þæÁ̘—Ú¾`¿š¥; 5â™Û=ÓÆ`Pï ‡õ(ËüÞÆÆœmss&"^–Xâ‹epû”­?­ˆH/“Bz4›m,š&9(ˬ¨ª|)¬æ×:uY#¢u1âËéC¥ðÆî.¶†Ã% ‰hYdÓ!+OŒ² GEã²Ü¾¶¹¹ýÖpˆ fËßØèŠœ:°÷k ÎJ‹•%>{úMƒÀýýýßïÍ7¿d`Æ" Ò¶›Ò rn'«sν\xxÙ/ÙÿÎàO´ÎÑ@Dbþžè {®¸1PêÝ;Æüˆ¼ß´Ì˜×5Ò¶B°“О¼÷ññýû8bF‰“ žàDãöÿî@?HS÷æÖÖ|oss±·±qd´.³cÇ"žEü¬i|Wô‚X×ßÿø]RO‘RDʤ©N‰Ìh42š(QD©V*=˜Nwg³GGGãiUå9NÂëÝ“uê²»ÞÅJfL÷÷±©5nmoc”eP-NR”i›Uq̤)cðü¤Hi£»2ïÞ<°LfI‚ª;B/-ê™q°Xào<À~ÓÀ"¢;IˆÈEòÀœ¹ŒcN\]Uÿk½'ñÑGtž{.<œ%Y’àVüÉ øsc£TÆ"#йümö¸à7w´þÁu¥~·is\–HYš¹,ýýýùûä ~öü9æˆZ8 |Aü±jœ€þ­ííÅ[{{Ï7‡Ã#Ï\{æ¦ ¡)œ³,â=³e‘ÐéZ€Oê[E)j«å‘V‘Œ"2Z©D%F©t0>s<Îß¾};¯›fòìèhïÁþþf]UYßX >vᇀùóçÈÜÝÛÃ8Ë–÷›6N`½_þýšƒ³„znD¿BD€6 ñ‹gÏðÓÇQ R÷¬×¶·Y$gæ,ˆ¤ž9õ̺-êÿ§ÀÿÊ7uä’ÖØq}sÛ£ÑYàÏYd¨•Š&¿ÈÝ à&·®)õ'›ÌoÕ1ʣ߽À˜VžN§ø_|¢F÷½÷° | `g<.ß»~ýðÆÎÎSB阫i]×.€u!4,â<³óÌA˜}h{ú!ãñÑt‚bZZð+ @¥­”1D‰V*5Zg†(7Jå7ööž¾qíÚÐZ»õù“'×~ùüù¦ A­Z™u*Ô!Æ >ÙßÇwvw1Î2dI²$Gµ’Z|•t`_-‚*›Ÿïïããü¶}oÀx0¨&᯼O½HæBH³®œÓÖ{…hÈšãµKX#›Ã!®mnbs8„VjÏŸõÀ¿KÀˆn¸•ïÞI’ÿ‚›fwæ|§´¾´$ðt:Å_ýâxjíÜý>ϼ'ÀÿàöíýÉä© ¡˜5MåB¨š*Bí˜Çl}.0{'b³o]€ÀÌ!DÐ3dzˆ í ¨ @)¥È´CHŒR‘ˆb9³ÖY¢Tf”Ê­©Ö£Ôñ{o¼±ÿî­[ÏŽŽ®}öð᮳6éâÀépz‡¢€ÁgÏŸãöÆFY²â±ë©øªÒ}¿4Îá—ûûøøÑ#,p¢ÂÀ"þÖU1Ùxf혵 ÁfÃÑÐ8ñdhå8÷DpI+’% ®ŒÇ؃£ñ˜Ð~Yê¡1Æh±ÈH+µÑÿ-n'Dï¼­õŸkG‹ºF¢õ²¸Óþ.<Íðÿüüç8DÔúÀéswú:ãÁ ù½7ß|º3™´Rp!àÑñ1>~ð]Ú£oOx›£QÍ"Ê3+‚v!‚¶!hŽÀ.©ÒO¾6rI=éüþë››fYgFÒãù\O²Ì¥Rj¢±ˆì´à¿Ù¿wn4¯k¤Æ,MýÎì/­ÅÏŸ<ÁÇc†¨Ý׉C<Ó¾uóæÁ·oÝú² a>kšEí}ÑeBm½¯š‚mB°AĺøÌÞÇñ\,'q€œ ôD/ªÝ1 HDJ)RqÆ 2Ji­”Öq:‘ÑJ%-¤I$€<3f˜FfÆŒS¥æWvvæW···¿|òäöÓ§O·}jµ– ³± ‘jGGáÛׯãÊd‚¯OXZY?nÁß%ñû’ØêÀ /¢|$íEt`V–y9¬§ýà5±.<ôµÑvkúïN&0JuÚ_ÒÔ¥R††h±„·óùo'DïÜÕúÏœs£yUA)µŒhwš¿¶?~ð?ÙßÇ §sKÝûPˆ¤0 šÿìí· òüéÜÚyåÜ¢ò~Qy_ÔΕ÷UÃ\7Þ×6„SÚ?ˆxÇì$šý>´³û¤3ÿÛK¼èÏ  ´Š¶·nãJ)•Ä8€n{ŒiI Õ:ϼÏS­¹1Ã&„a¦õ8cÞH•šß¹qcúæõëÛŸ|ñÅ›Ï6VÝ‚îÅ»„»o/?~òÛGG¸»·‡›››H9ÉWœñ;vrPøøÁ9wfI´0Z!fÖÙ´åÀÚ_˜¼ŒõåçR.<t²Ùý:¿¿ÿq]›Ì˜D·~,²E1Õwƒ¢ÏÿöÝNó·àN€óºÆ<ÀOŸ?_ þNû €Û»»³ðÎ;÷*ç¦ó¦™•ÎÍKçæ•÷eå\Ù„PÕÞWÖûÆ2×6Ë"Î1Û‚ €gfXÕp‚«>ðû'ð© Ö’¸º#@µ¤@­ ­"Ò©ÖIcIfLžj×Þrc†¹1‹&„ÅÀ˜ Ç\æÆ”ܽ;¿}åÊ­O¿üòzUUYg_ËÊ›ëÌtà i0}ð÷ö÷qgwWÛ8½$3pT–øÉÇËTßËdk2± k‹(fVÜjˆ(VI {Ñׯ ¸$œøýÛ­ßßMÍÝ/K=J£‰2nK{‰h—€«µÿ­»ÆüW«àïDDpT–øñýûøÅtŠ9Î?øÁÝ»Ïníî>˜7Íqéܬ°vÞ@Ñjÿª‰¿Æu³eÀ·­­ãŒ¾Ð;xÍñU£Ú€ÚñáÄ!P R6e”ÒÖ{m´N2­“&„4Ñ:ÍÉ›†M‹<„Â…PäÆ,/‡£Qõ‡ßûÞó_>xðÖÃGvûÎu?SÐϵ9ûMƒÃG=z„[;;¸µ½íáF)H¼Gã~þä Ìç¯?Xç DŒšã”å8H•HC¤ü×ô}¹ðÐ¥üv' ÚʼùÖÖÒï×­ßßNåÙ!à ]pkÓÚT97*­…Y“®šÕ5>}ú¿˜NQà$êÖm @iÍp÷îÓ+››çMs\87-¬ÎÍKk•÷euâ÷×mÔß2à˜Ùð,Òµ¼œúÅzÀŠ °òöú— 'd lJ+¥‚ˆñÌ: !1J%Öû43¦´!ä6„Ò†PØüž¹tÌ¥g®Þ¼y³¾¶½}ã“O?½ÓXkº¨ZóÂÄÑBŸâËÃCÜÙÞÆd0XZZÖ{”ÖâË££3ã+/üF‹Å( ÚÊg$]€uoéµ"‚ Oé¿Óæûç@ ’D¥¢‘ÄÞý]]pkìýkç®=*KŒóŠè”PY‹Ïž>ÅO÷÷—A¨.ŸÔ!­ÿŸ|ç;ó4}²°ö¸=¦…µó¹µóÚû²ñ¾ª½/muè«{Àï Úºã7¥ý;YM}u‡ Ì*JÇVZc¢´Ù‰Ì&IåZðÌ•oÁDêÀ\çYÖüàw~gñ“_üâí£étÜw ^…2àÞÑÔÑÑ ¨ì¢u/{0`›&ŒFIÛM˜("£”2F)ÓeABœ¤^ñ”çR. `8ÄæpˆÌ˜N“,MÛI‡,²IDÛD´GÀ±Rß~k0x vu›ïOA¢5DŽð“§O1ÇIÕYgÞ b°üÁÝ»Ïò4}¶°öxÞ‚Ñ4Ó¹Egú»˜ò«=sãEjÄ_‹“¦À®] OŒÓ$°š‚N¬àl  »þ´—:0S`ÖA)DŒ&2wÔž¹vÌU[¨TuGH’:ˆÔcìï¾ÿ~ýˇßé\‚—•þ¬&áeå>à$lÿ²ÿïsxt4ÞÞÝMj¥RÕ’©Ä ï×qÉkCž¶h¥Ð8»»»jú@4&¢mWÜH€7okýGeÛx2LS¸`½_Á´ªðŸîßGŸ¿C^W¦|ðÆW67Ï­=^87]X;5Ítaí¬tnÑx_ZæÊ…PuZŸEºÚ øË¥8[û¯‚mð Y ~­#…H*0+­” "V%ŽÙæ&0×ÜB`®ƒHÍq—cÀÞ½u˳ìíÏ>ÿü:°À«/Ú}¯ëÞLWXýßÕØÂÓù|ðQªˆ2M”j­Ó6Í™¨8SPuéà5ߏ— Oƒ²$Yæü3c”VÊ0sNDcgõmSlé½>´öG…sYaí²L5iÍjkñ“GpÄŒ/V¿±øgos³xëÚµGó¦™ÖNçMs üµ÷EÍþÊ‹Téƒßá4ø×iÿ—ÿ,¿]Nÿï3ÝþÑÖ!h­”‘÷ÌËÆÇ£æøy,‹4˜þêîne™ýñ§ŸÞ!œ ©v/Ô'†îñD–•Çö «úÀï@Lj6n'Ãá3­TjˆC”¤1Õ©Rª9]BðZ¿“ O©1qBM«ý7²Ìh¢Tb‡ßqHç"º–3G;wíaÏï×JEס½|6›áÙb§ûå;ß¶¤©ÿý·ß~ÔFøg kçE{”Î-ª¨ý Ç\÷ÀßU ÷ `ïßO©¯rϺvÖu×WÍÿÕëgY}ëZfo½÷m,Å `Û}¡VDlh‡}J/€9ùßùNøÿ~úÓ7¹%åö>Äê|‚>«i"(‘œöîË8õ&oß3M”i¥Ò^¥ÈÇ8Àk~à’NiÿA’h­”a‘œâÈîM; ÚÓÀ­=‘ï{cƒÆ9„Öï7ZCaV×øÛ'O–5çý6²®©Gø½;w˜UÎÍ ç"øc±OQ:WØþÊ‹ÔÌ\ádÖFþ³¯ ö­Óü_ÅX½¾j ¯’@÷ñ•o+R bQ’÷m £Í\8iWˆ <Ïñ·ßNÿæÓOou[O;“¾þ>õ‡¼þUà÷݇€èÜŽÀORiKÆ(¥SctÂYæÇ=çV.<¬hD²¤îAm䟀½´i~°p.›×5ò$‰'$3*ç`Z"x2âiY.‹zú©-A4ý·ÆãúêÖÖóYÓ,µ}åý¢tnQ;W´~µ©˜¹›ïÙ}ßÿ«€¿¯ñðw²Î%èƒà,W¼K|Ïà} ¢¬õûºÏÀ°j ¶¶¶è{wïªÏ?ÿüF×CÐ}H¬¼Øj²ž{·­«¸ìž£û²êªÊ8„¡ŽàÏŒR‰iËž¥´ÑZù“Ý«d€ó<àÂ@û«uÚ?…8Ì3úþD{‰È[{Z¿5µ6²l;üúUÏf3|òøñ²¹gUûwIåoß¾}Ô«é/ªHEã}Ñ0—6„²þŽ: ଠßWIó­=Aÿø$ðo×k¹¾Â]%ƒî¾îý,crž™ïãêpk»ÍÂŒ¸w0Pœó]&¥ÔöÞž.Ê2¿ÿôév÷„ýÔ½ëßÓ·ú`ïýÛ€XP–åf:d†(5J%‰1©v.6CµÛ”±žϵ\xXÑþ©"ª8»“bðowèÜ÷Cè´C-­÷ðí KE„狎œ;ÕÖÛ÷Mk£ÁÀnÇGÓº.kïËÚû¢¡lB(kïKBÅ@ƒv‘&NkþUßü_ ø¯üª¬>þßž¶¬»ËuÐWÆK Þ…À˜”âÆ{!€©Õügý‹VJiïµ"ÒwÞzËÅ÷æ‹Åp5°êûw²®mOVîï„'/æóͽÑ(¦cVÀ¥’T)Cëݜנ¸ð€^äqÃî€bÈíæ;ʹ«»ÀŸÖHµŽ#¦Úí³‹¦Á/þúZÊxçúõY cª¶¥·ì.}Ló5#ä«ÀïÀ×ÿR¾.ðÏ’þó¬!ƒîú:ì2»Ø…s "&ç˜6J¡=´&ÒÝ(²Þ{ïÞ_üñ·)ÕÅÖÕt/Ðo4Zôßwg³áµ7RE§Å H†Úþœýk#º¼¿Ì©Š+¸G"²Aq]ו‘÷¿›ƒÔÔÎ-×M›¶×¿é5µvm௠þ%nlm—]çàïËòÇ/‚ÿ”ÖÇiâê>‡sq–AS‡PÕ!,ïgMÇ÷G.„¾g>¸qóæç“ñ¸ìZ{×1Î*¨ÏªÝíâ]4ÕhBP!„:€j0íÒ‘Õ¾€2ýµåçI.´ðÉþ¾º9™(Ïœh¢˜úkÍmœ[jÂ2ï`¹´cQ×xpt´Ôþëĸ2™tc»/R·Ë(k#þM[å·ügUø­FùüýU¾‚EÐoü[ŽAJçH+…Ô9•*¥›’DëÌ1 óøöíÛOæ?ûÙÛ¯²q´¸V ¶i^úå'Í‹b#E”h"“ĪÀ~Øáµ².2Ðvž«D©n³L®ˆ† ØDW>{¶«€åøjn—Ztc¦5Mƒ*„—Ί2¶†Ã&Äi=M`¶¾#ƒè÷¯óóÏÒú«~ÿR~ü»sò£ö}ýÕi"XM.ßã½€ÓµsHµV©÷&5&sÌÏ<öÌ“ÉÖÖýñx|íx±éÕ'iÿÎ[Âî¦0uÚþUÒfFƒÑ(QÑì=që°Z㧉à›ðÕm¹Ð.€Ñš”RºúfŒl°9fþöõ DP4 ïON(f8ïáB@Ñ4/äš×ÉÎÆÆ,0['ö6!VÂY±¾-‡EÏ4ÆÙ%¾/(°ò£oà ø£-€¾[Ð]¡ñÞ•ÖZÏÜ4ÞWŽyáB˜¹Ž=óa`> ÌÇo¼ñÆãþ¬n ¢o` 6òy;}¹r.Ž ÇJòšCæ®(î?!Š#¥•Zçœ{¹°ð—÷îQY=‘Tâ90 ` ¢I›£,Ãîh„AšBDP;Û#‚Ú9<Ï_¹…×hÍAćXëXÄ…Xëº:x¬ÿ«¦ù¬‚ì'kÈ©ŸŽ?#¨½wµ÷¶ñ¾®½¯<ó"ˆÌ=óÔ·°¹µõh0Ô]‡å:à×Î-· uc}Ï~‚¸T˜•eNq&€nC€i3DëÌÿsO–ÞÜÚR&ybç00Öνq0Ÿg÷ž?‡gFÖnìMÚ­·—%Šb9Äó,$N+̾]ÍåD$@W»NÛ¯Óú§ÜÙo:øûr†5ð¼‚oBp÷• ¡Ìó 2 ÌÓ 2eæÙÍ7ö3"\ÛØÀ$Ï!+ÀO´Fž$HµŽîÛÊ{éjѾ°Py¯ˆH·Á?ÓZšj§½v‚.l Óš4‘" emïÿÀ8 áM•¦(šEÓ K$Jź¥à˜áCÀQY¢ÁúI?}[8®ã - xñ¡â¹fšÏYƒ<Ð]þðâïùaûÞÿÝ‹AÂ%±•Îy%‰r1[R D ÌYdDf×ööžê¢xãÙl†²Ý¨ˆ`´>µK@ Òj›&+/Þ l¡8µ‹ü/w%b½Ö?÷Å@Ö‚¦èIäí1´u}%0ck8Dž$ð! rM·®ªµ¬÷kO¬~Š©k\iGqGˆ‡GKxQ㿬Èg ¤ó*?|…5@DÜ„àÚ4i˜KY°ÈœEæPêxBqTU°!À(…¡ áÔŠéUñ̯T„ ) #RD1@}ÔUm¿júKÿÆ×\–ŸÝ(Å"ÂšÈ àˆÈQƒv[ºeOçóS™€®g£¿9h5‡zÖïÖ>N –¥€Û¿{}mÜ€ idZS+Š-§@bëz˜±3as0À0M1h#Ì«ÇË*˺ ¶Öh"ÝíØëpv[lõ ô/Oɽæø_ã ÈaU1€ • šÈ‘à¨íá©B(ª î™à$;³ÚÔ°nÇõrsj¼\‚_^À¯Ê…$ €ødÿÛÒeŸW•y¾XÀz­T¬0楻èzÏyªÏÔyÓ,NtË65™ØþÚ‚­K]Yq€°³HPDž€Ð‚ß à“$ “,ÃÍMìM&Ø 0ʲŽÕ_®o¬¦¹[¡0D˜™_õ;œ[R¸.8fe”"9‰ÕIªºFÑf’^€ˆ–%¦ëйjÃwÚe¾XäŠÈèvÊŒÑÚ$ZëDkjM™ÖTžv7^8á.œˆ ’„5Q÷u´TÂ(ËäÖööW{¢5·uy»î‰³,sp -𙻎W“À¹” güÅG‘i]Ñ­€Îr×¾i6º€ß|%P´€Ê9Ö® áŸe^ÎËrÒNœu•J²nô4@F©¾9·åו5V´R¢”EÄmýDw¼R¤íÛÎv׺ɥYšÚÀì9.Y A$f¯1ÿ^8€i]“ !†å{+®°x‚ð«ÛÅ“¥µ§¢Ë«gFçôÓ€#óÙld”Ê¥òDë4Õ:MŒIIbI¢3c´9½^øµó7¿ªôã,ÂF)Q1“"h/é+‚²vîTCpÚUë~+°1!–hû‚Ìá+ºç– .$tÂÌ$1ÕÓu{½ôûX Õ÷T®Ó,Ý(°À“çÏ'‰Ryªõ Õz3ÈÉscÒa’$F)•j½ô}AÉ Õ’€jI_tóº^–d¯Zi}RP&Ãá"0;{4: 8föÌg¦gϳ\Ø­êWùU;ÆXN³š4ÄÙóιÍD©£Tëqªõ ×:wÆ sÊÌIEd<³²mIjï)Îe™éo@d$b” ­Ÿˆ…TËû_õ.„%øWÙµ»MÈÒÔ§I2¯›Æ†8³Áù¸â¬¿„¨ÿº¯E¡Ö…¶Våëþ’ý–ÒUÓµÈ]øüþý½ü£Ü˜Cïß×5j[¹`CÜÀm i×®ûÂÙ5æS'™ ‚ØnÊÌ8ø}wàùÁÁæôêÕk“ɤ êš\Q£•r‰R.ÑÚ—ÎñU¥¸Ésq!È~Qœ:áþ=@ˆó7äWµl¡ E±¢R`æ$Ï1Î2ØvFc¿Nǰ öõAß±ªèæÎÎ̆PYï«&„څд‡c‘¸×ðì.Mà[’À3³QJ¤ýQ%öé{“eóÂÚ‰ a¹¤ë èWú¶8´=Àú3 !f|ñÅí÷Þ}×åy—5ŠÈ*"o” ‰Ö!Óš›¸°–+"Ù°_¡ÿ´ ÐÉ:í÷ºHª5µ¥ÓJ¤m5éY]ƒ[ÎmH{sŽËæó徆>B»ß‹h­ùÍ«WUíÆ&BÕÄIDÖÅ£ã³:5Ïõ—a €»ro¢Ð–š‰ƒ)±?ŸÇBŸnÔ”R0ZÃôÀ´M'®]ÊÌ/õ€T)Œ² ¬>ýì³»ï¾û®ÏóÜ)"¯ˆ¼&âD)I”’F)$!H¢ÞËÀ(%çóS»þZ„~¤µøÖ"yä÷ޢÜÕ–O/§ôP[¹Ù8§«º~an‹àÁÑ*D ¿j… âïá¼½·wˆfuE»¶­¶qy‹ Ì>´EA81ÿ×XÛÏð— Iµ÷’j- °ŠftX_nÎ5‡U5QÀò¤Z×\’´«Á\`æÒt¾ÿ Išøu„Y}öé§ï¾÷Þ{œå9‘èØ$F)I´–Ô{dZ“KiBÀ fÜ* üUÜ_×ÑÐJ‘êæò%$Ô^ç†Òºh.PÓ@+…iUáY;¯qÕï@Z󽽇µ÷‹&nk.kïKB嘭m38=´åÒxÄ1sÆÌLä!âÐNê @I®ml¬ï*k;ĺ¶S§bý–S…h)¤-Yô¥í+П~úéûï¿ÿ>ò²Á€TJ)ͬRÊ„ ¥LnŒªœS¹1JÕµJ´ö7BçóSq¿ þl8”EÓà¼Ávž+M¤PÝÂ'7å:„Ý<ÇAQœúŸ£¢@húwšUj7wvæ»çÖÎjï•s‹Æû²ŽÁÀƶY>=´uufã¹'‚ IÏ ÙÉóà™ƒQ*àYÄ)‘z2™øÑ¥µ°Þ£rn þ6½ì ä6œXh­€.FÄlÃÙÒ’ÀÏ~ö³ïüàƒF*ϵbÖ*£ÛUY»Œ"2Žy¡‰š&;0Æí $"á“ýýîmàÿ(K€ÿµÌ‡…µÓÒÚiéܼŠq€²­hÚµmë`í¨öó*’>Ùß—kã1çÆMäÈDÅ\ Qõ¼if‡u}Eãô²Iœ÷Ë¡D„TkT-bŒ  Æú¢W’“~ø0ÖSãtóDç ¼±³3ûέ[¿ṫ k§ kÎMKkgU ¡ô!Ô,Ò òȺÕì«¥ÀßįíkÉE%)¬åÀjï½Qª1JÕŠ¹b¢Âh}´oíña]o½Ì œL^8¿Šº˜Â(M—VFåNö wnŸïïß ££­Ý«Wÿ6ɲ¡b)¢‘bj¥†Ì<"3M43J•,RfÌÎ…ÐÔÞÓÕñx99g•þ»Û·¥hÅ7Í*X~Q¿¼-X;¾¿¿K¡ñ?yü ļ>pÚä7Zóï¿ùæý½ÍÍG…µ³Â¹Yaí¬éܬò~Ñ„P¸*/Ræ¦õýÏr^ð—sk}nLq]w­ˆJ-R‘ù•íí§Óét«ïT=à§‹LÖÉY$И¦µ÷˜×õòÿQœFœ¦PD8œÍÓùüûïܹs-™L>V"cE4b‘q +æCM4H”šû˜%(‘ÉŒ±¹÷.×Ú×!¼@ÿ˃ÿôæM©¬Å7É=0Z䙡#sŠqêý[^k|~p€/ŽŽP"‚¿ëìë\€;»»Óï½ñÆgAd:ošEáܬpnQZ»(:Íïý¼ aaC(Û„Mkú[œ@Gë*Ïm`'Žþå‡Ê_|ôÝ;>æ­Á@³w!XCT+¥ÊÀ\h¢ÅÍ«W¿PUõîããcݹ«ÀïÿÝÕ¬’Á* ¤Æ Ñ™1 Äz‚ÒZøÖ…P-A ÚõÖ…µpÌ& ö÷÷oàà`÷úŸª4ý”E6”ÈMXdÂ"GŠhª•Z$" Ï\&Z7}"H´öpu4’îÝøß=¢~û¶ ÒU;öì·éüå½{ôÁÕ«X¥É,ÒM®ŸÏçúx:Å—=ðXvýÝÙÝ=úàÖ­/RcKï‹Ê¹¢p®(­]Ε¥µ‹ü… ¡°!=ðwæÿ*ø×U¾rá /.n]k”j4sˆAdªµ>˜ŠìÔõuÝûŸÕð> PïèK?0˜!íÆŒ¡ö>Þ,W\çI‚,IÐxÂÚ¸ï>MAq/a:Ýßÿîh<¾n&“Ÿ(¥6‚ÈÇcBDÇZäÈ3Ï5Ñ<ˆ”F©"ÑÚŽÒ´q!¸;››!ÑÚx÷®@„?ºwOþçÖøço¼!;£Ñr-ÚoË=ð!H`†QJ˜È“ˆ :ôþ“ŸíïÿIP!€ÑÚ¿µ³óôÛ7n|™§é´ö¾š[[•Ε¥seamUz_VΕ•s•5ÿeOó×·­ÿYæÿkAš«J¥B¦µ÷Z[Ï\j¥-x¦wnÜøìáÓ§× §·Ê¬žëb«ÒY‹&ê¬q–Á…€Æ{xæ¥æï\Aݺ£¦¹BnŒÿðî]^ÁýûËñß¿ý¶äI²†ú÷e|tïž¼¿» ÏÌx"²ñ>¿qõê˜WÕ¿úôÙ³?‡ßÛÚzø7îr!„…µ®r®)«+ï«ÒÚºô¾)«ïë&„Òzß8æ*ˆôÁßiÿŽ:"XköwržÍà‚Àãù\v¶!ø$„ZUš¨TÀÜçƒÁ“ë»»v;+ ï§LúsçÖZbTmQNã=2cÐx üƒ$p­e0HäI²¬æÓD(¬… ¥ô³ýý›PêÊõ«Wï'ÃáÏ‚È&‹ŠÈ!‹‘c%2c`Æ"…)™¹$¢fg0°AÄíäyÐJ¹?ÿÖ·dÞ4ˆ üŸ~ùË¥U°û÷l4!‹0/"5D”)fs÷öí}÷öí'"ƒ ’—ÞÙ¤öޕιÊ9[zo+k›:W9W[fÛNü©½H-±ØgøÏÊÿ¿VÚ¸Ø ĆÀ¥÷žˆMT¥J©©™æÃ·Þxãgþ!p:Ü外O„RX]$¿ú¢MpuÔdÆÄVãöbfÁ1ƒˆ0hMÿ®¨¨nÝ£õ2Hh½Og‡‡ï ŠâtcãçI–ý’E¶YäP‰2p,"Ç,2c‘-ŒHÉ@¥˜›Í”ιÊ{W{ïç¼m‹{,³ef Àö|þUð¯^ý‰ß ˆà"ÈÂZ%IÈ´•÷VªPD MtLDGyž?º}õêÓÏŸ=»Öº[øÙ?+ú.ðâð‰Ué\Bl;îê Ðõˆ,÷ܱH\5Öº.læ9’ž[ÐÄLB:išßo&ãñ=‰`‡C9âHS‰ÁBD MTŠHIÌõÎ``›¼gvc¼¡sàüùÏÿìÖ-Ù ÐYEÓ`Þ4¿Q2Ø/ &IHµöíRЀRh³¯"UÉ?8¸"!è/®”êÏʬnƒƒÔ4Œó|y{ç Ï Ï »âC„Ð'‚££É¤ª¾7 ÞJF£&Ï?e¢cI Æ€©ˆÌDdÁ" ­T!@ED5·uðŽÙÞœL<aÖ4üO¾û]Þ/ ù_ïÝ[~†ñþû2Ê2lµÄÔÕ,~.Bé½TÞ£”`QÑ~íž™k/’Ù¨ýµ ÁTÞS»Â=óÿÏÞ›tÉ‘egbß}ƒMî¦À”@& ‘«X¬,›Mn¨CiÕ -úh¥ E®´ÐJ+ý-´ÐJ‹>Òé–ú”ØÍnŽÅ*VV9˜“Ïfö¦«…™9,,<@Vò({ŽÁîîæv¿÷}÷Þw/Jï½óÞ{æàCð­Úþf•7­ŸÛ+·êïõVà˜@Ç`#)­q®PI¢¾$Z‰¤üÎk¯}òþÇ_Ø¿4Ëgh,0/v–Îa=Ë@M¢zõ÷!€k€¬–¨eoÅ–Á4ޝè~ÿ+•eÖ,`W0Ñ™G‚yÊÀ؇0#!ærBA@!ˆ W£¹},¥àÛ±‚†üw¯¾Ê½8Fö I„Ÿñ_^[ ki"!,ª6àM\ÀæÂz¯]ºô^Zïeá=Yïɇ@ÖûàªsêŽ> ^{ìwønÅ_Ûù—¦ý^ç^ÝL”ò±RÌ…"DQÉ€ƒ“'N|tbkkóáp¸ºøE9ÐA¢uUz\¯þ²®Z)Îa\ÑJY¾~ʹW °õû·ƒÛØã'²`"¤æ SI4—>„¢¯uiCpý(²‰RöDšú™µá_ݼé·f3þ_>ÿ|ñYþuK"˜ß‚|1†³Þ{%©'#Ôï«þÊx¯˜YÎ3KÇ,ó¡êÚ.ámOo€ ýÿ6©ëný]¼íÆûñã™1a¦µ•D*·6—µ Bì ¢>yß¿qåÊ/üò—¼—í‚Ýx@{ÉèÁQ©Â† ﱞeO †êÕ>jÉ‚e«?êç¶ï‹µ†õ_noG½(:Ÿ1oÎBØ‹ƒ ÔQ¥ ‡ ŒE hB3˜K¢¹gÎc) Ï\h)m`6qÝ0ãüÊŠÿók×B¢TØšÍøíH„§±‚£ìÁdÂÜJÃW“zC`öÌ,P̼ÃÈ€ð!,kÎÜ| Ý=Ýã° ßÂçß}±üÿø@;€wó<$ZûX)KU‹îœˆ&D”°MDY,eú½«WoÿííÛ7›ÙíxÀ²ö0)aý¬ IDATÝ­©ÏÂ\ç9rcFÖ³ªû•¢j=¶dõ? 3b¥Ð‹cìL§ro>?9˜NOöÒt¢Òôêõ>bæ!sD“À<ј˜sf`Ιy.€2Uª)uZˆŠN÷zaYàð_Ÿ?ÏkiŠ“Vð Æh\–Ëšp´O}»û7p°d£yNWt·øÚ÷ÿEs~à@Ë_ôܘ°'„[‰c#‰ ¦MŠÒ••OÞºxqå“;w.ö_AË^¸>x’E8êM5éBãýB´S‚ƒ‹ÚÁ¼¯¾ 2¥ª9!,âã½½ÁJžN{il'½ÞBʇ¹Š™y"ˆÆy*ˆf̬¯ßÒh?P9ÿ_ÓwÖŽ5t.´€ªù$OŒñººpsA¤ˆê#‘¾ñúë?,ËŸŒ¦ÓÞ²Õ¼{µ—¥&â¤ðl’Ø/ úqŒõ,CEÐO‚š-0ª-ÍÍë4AE`¿<èÇ1vf3ìÍ烳! ÎjýÚét/ê÷?“Zßcæ1PÅ  ˜¢i`ž³”óÀ\ 8Lµ6‰Rn%Ž]›üü‹/2숒Úöc£7÷7»[1º   G®úÀ‹íüÀ1€e6, ¿Ç4•Ò %Q`BD‹–ÔT øQßã_üõ­[?˜çyÒuâ¶,èN nŽ4ž 0ª‘d{ó9¦ey$tW[EÆŸß:êTc/Š …À§[[rg6;9˜NO¦q\FYö ëõ¾´B<UUá(QKfž`"™çuÎ>'¢B¬ 0»S½žkÇ þâç??ê£w­½â7a–§ýn›5„Cî_Ø‹îø½€ýÆ0.Ëà™½$2ÌL­˜êÉ4±RòG7nˆ¿¾uëûmX¶W ÙPÔæ´í+ïyØÀ3Ás¬þ]yhPÅõæ£IQÄgËëq|ù«ÉdO§é}™¦Ÿ‰ªÌx˜Gu°pÂUa˜çÌP× „"‘Òxf£„°M¬ ]dÔlQî|ܶhßלb`9t™Cû¾c»ê·íØÀÛÿzÿFÂÌŸjí|‚€9Wùe”ªÒO€d@ÄRŠݸA}ëÖ÷fyž4Áæ mkÿn– ù¹y~# ž… 4¿_z3ŸcÒ‚¨‚f¬™ñ¾)*BÕ˜$Ô·‚ê-ɦf Íó²š|¼µ…ÙlýìêêúE¥®ß›Ï·¢~ÿ%åÃ:N0 U¥a3˜R%æ‚h˜ Ì}E$„媨ÇùÜ©^Ï·w&v>j;ªß>=O?]Ý×Yö¨®…w¾àvì`‰5š2”Îyf¶JA•¨ÚTI‚™3S¤~xãßúòË›÷vvÖ€å•ÍÕ'±ÿŠnØ@’–­ãY`#hš6G¸µú‹îê_DSgà:ÏO´®oÖA=‘›ƒñx3K’y”ew“^ïsG´]׌¨ {æ)˜ç$ÄœëŠÃA—¥sÖ3Ûsƒ³Þ»?¿v?ÝÝ À¢ƒQÛñ—…Xžvzžöÿ…ãG{ 8À+ͤ,}/ŠH á„Æ3 "’µã‹ÀL ˆ¥äw®\±xïÁÎÎZ;Õ×vþ6Å?LØ6™‚F| ˜”%qŒ^Y!’rß”ãfŒv šýuÝ"¥ØŽ!0ó>0XH„á0;ËüÆz]¹û$pxGÔûêb£‘¨A€˜§Ì<RÎ|yªTá™ËPÉãCpoœ8á}UÆ  jç¾ä´uåÁÓNï>;ÎŽßØ±€%W@[†™1¾ž‡Lk—%…(¡€JgW+%æð½×^s_ ×n}ñÅņ›v%Á26ì_ÖÕNÂY ±_V<í3ï±3Ÿc/Ï+…•$A¿®Õ×õÌY˃²^ýukõob­÷‹–¤h6-ù–DødkKîÖÃ,IÞŠz½{I–}æ€A´*V0 À8M0À,3!D93çijrç¬õÞ¾uú´gÀŸî÷C»Ëñá_ár{«óÜcïýx { à÷–Ï­õ(0›žÖ4e&Ž"@­ZýfÇ™¿pò¤Ûèõ¦sûö5ë½öï<Œ ¶Œ5½‚E}4ÌàYwæÖ¢°{óù>yµVÿ¦Y©mbKVÿ$L-|K"4ÃÅf¤Š\]×úµ»Óé^<ÜVJ= ÌCb `˜GBˆ±gžJ)'\Íó<ÓºtR–.ãB°§³ÌÊ2ºß§%qÀSÏ>ø&v#{ Ëí@ôxn­gÀ23õ¢ˆØò!À3‡Úa‚g øÀlã8¶?{÷ÝÙ?|öÙõ­á°ß” ·Ù@3Rü0ço¿™&HؼÆ7!NôzUÀ°nRÚ8v¨P9vs¿¨w)¦–òpVð½4è4½¯{½óPC& æ¡gs•I˜2óÔÕóÈ£Úq‚eÃÿc{›þÛsçx^w9~ O·—в Ø'Pníbâ´‘ÌLMd½‘>ç•ržÙÅRÚß»zuþÙÇW¿¸ÿÌÓØÀaÖ}N#x›}¬_GXï±;ŸcØ’DÐR>ÓêHÉ ª-Ê×N{Ù[i¯÷iâ ©Ú™8d`ˆÆºJ%NÑÔ‡“”9ªá'¥ ²Iâ çܽúªoKƒÿíþ}€uæ k)1)KßÝ!©ÿ¬vì {IÜø7x²X#·Ö3³êö]¶ºÀÙ1³ Á;¥œ Áº¬SªôÌå¥Ó§‹óëëÛ÷Ùg¯§ÓTµ^ø¨ýpmX†L¦þ¹çI#zfÌë$[³¥0HôêiEý–ö§zP‰ñ®vrö¥—Ý_Ö¬ ‰DûK/¤!\(˜·u–}¥âøóP5-  º­Z³¥”“À<•Dy`žïóÕ$1ÊZ›(å2¥Üé~üïüW¼WWQ¾dûíØÀÖÎ ,|µ¨ fØJ¤D]\7ŸÖ{ç™g6>„Ò)UÆRpýúèÓ‡_ÿâÁƒÓÎ{ñ¼âa•.ØÚjŸ¼ÏLÇ^À¶D ,*Ç0Þ+eH”bã\“ð®Ùm•*Œ÷óXÊ<’rK9ÕR®ÆJMÖƒñ×Öî–Önܾwïüá°ïE—<ëêÎãÝI_O4ëYYÁó¬þ‡mQnJŽïoo·àHy—ªqh;D´BèÑÐ…ˆ"`@&J™“Yf2­ixŸ™šïûOÁ aÇžåÛ¾𭧃@Ó-ØT“¸YIà=›¼ñÞÆJ㽉•*”e,åÜJ9ÓJM÷-å ’r …¿}éÒöÛ¯¼²úÕööæ'­7ò 0\¦ýƒmÈ‹f6Ïkzb?ï&¤ök5»‡KXAwgbÙ¤ [­Â»YÕ‰P7NPÁ®®¬<Ôýþ¯¥(„Õ Ä 1oÑcT`ž×û8Ê¢šä/¯­…/†Ã}›4?èÆ1cÏjÏûüÌxÏ5ðJoœs6g¤´ÆûRK™'J奔³ÈûY$å,b)Õ×B ´”}-åèâÉ“»¯9Ó¸··ùÉ£G'†Ói²L,³Ã²Ýâ£&ÀØA»äø›`ëY†þ3ìLö€ê;Žý³cü& Q @k@SÝÍ©îò$àü`@l šŽÛüâ‚ÀKø-ì:`í¸€ÇÁ¿@pUîË£éCp’È8­¢ÎÍ¥²Hˆ™–2‰¥ì•RfZÊ,’²U`Ћ„èi)ý4þÞë¯?,YûäÑ£ÍOwvä½ôõäÁQ%Çߤyøðäãñ¨×FŸn:ñ¨óÒ¼éeMLº5Ï:ô¤ý:Ë: ZŒš=¾€îTfÖbf«ö)™Öè' çp÷Þ½“öîÝ?yïÚõÿ¬¤T¨›º¢’²ý^R­i#M€; ®½@ pìà›²æ¢øðp6Ð\DíØ[Í!]€3€e@ÙŒ$ÒN©Ry)¢(RjI™DR¦‘”Y,åD{ŸBôb¥ò ’²ßOÓQWÀ{!;òà°”aóØa5ÖÔô›Š4Û¯›€a{Hª Ö{LŠéÇT)LjI`œKùáíŸÜ¼r%ŽuÔdˆë×õÌÂ…€Ò{¬ÄqsZ–‚À‡/¼€oØž 4±n¦ Ë<çC°R噬ÒXZ{?¤L´q¢TZ<ƒ^é}¦…È"){µ<È¢º¦ +JkT{¬ùQAÃܹ OÛ‘ø¬Öô¢k­!©MöÀթ¹1p!@K¹ègPt$AQ–é/nÝúñ;¯_zYFšФd_MfÐÖ"QŠOõzx‘AàØÀ?Ç7øF}a|ôôØ@s15̺9º ©ð!8‚“Õ^陣ҹ2V**«²âT ÅJM#!ÒD©¬%z±R½VqØ•÷G£ž¢åiÃîÿ»AÄeñƒæ9M­÷uäA3$µðý(‰^oQ2ì˜Q:‡Â9()¡¥DE$Aõ† Yþê“¿ÿÎëWÑË20@ fAÊÀÌl¼çAs³É ¥\›í}§AàØÀ?— "¼«ÿÊØÃØá 4hƒAßx‚ óý¬@) Içæ‘RIé}[d5+Ø'´”½~šŽ~påʃÒÚõ;;Û§?zôx•Ãò½O[ùë>§ýÁšìÁוIêtaáÜBô¢ªþµ$Ø÷ž*àÿTƒ@–eÌÌ¥ô9x!8ÓÚf^MFQ`-IxXÍw±¾ëö¾AD‹Ö‰,ÃZ–á§QĩָŸ~ýþQ@ÐŽ ´ a ûuÍ  °’¨4ÞGɃHÊ'`PA?’rôڙͭëçÎ÷¾ÜÞ>ûñ£G³"žVS°,~еeñ´‰Ïb.ŒòscEâzÃP$%¢Ö„£Y- –Y~õåÛï½qm¦„ðÙ‡spJyë}èE¯×[; ø‹ŸÿœŽlú­¶—ð[Ú2§Ä1V“dÑ þÇþïñoþþžXV[а‚}@€åò ‘BD‰RiH#¥zàŠ‘RU1RD :Xv:6u­‰ üò£ôîÕ7‚–²jë(¥óÌ6Á…(b‚êÝkIÒ€À¾Óñ]—ð5Ma-Mqf0Àú§B, ZÚö?üÎ{ µ7Ü7ôqhâ¹µÕn¹j/}Ì4,Š6,$:ŒO—ù"{àýT?‘½&hX}-e¯—¦£÷.]êß8wnýÎÎÎé=úÆåðÛ1‚À\M%*KÀ Ž’à°Õ¿mÆ{ŒG£ô—Ÿö;¿ûúÕyÂyf£…°^JïB°©Ö¾ô>¸( sk—íûøNƒÀ±€çýÆÚŽ¿9àô`€¤n˜)k§o¦ðIÚ®«!TŸpúÙêš "TѨ Z5­¸JïÉ…À¦S¸hl æÖú™1ÄÌ\8×.ÌkÀÀ>‹<ÐR&¹I\ ³64Œ ’røÚ™3[×Ïë}±½}ö“G6¦-yð4ö@vÞ»i¦ºðY&%7[;~¬ kQŸÒ¥ÆÌ˜€{;;+YöîëgÏ™À\z)f6Q5ħJyÏV’„`\Nƒ]ßéxÀ±€gµeŽŸ*…¨Ö >Ìãä€Ãc„_ÎI‰LkÐTìÂ… úQÄÐ"¶Þ7mÇý¹Á…sœ[Ë3kyTç·‡E¹P?&SµºòGÉ-e¬…ˆc)§µ$¨äAY½ )«Á ¿¹¶6zå)ò kWï•>~üÊÙµõí4IJÍ\!J'¥Ñ!ØD)kªâ¬hÆeÙ®§úNÇŽ=õm€,ÃéÁg[+~¬\˜FqÛé÷ÑôÜ9%ID’ª[¥„(_U  jRä-&à«\4+)ƒ"8fN”ò™ÖÁDQØÁŸö>äÖ†¹µ!wŽ÷Š‚gÆpá\˜”% çU‹òCä–2’D‘‘2”šk!âÈû4jÊŸÁBDRöÛòà«Z„Z6ðäY½¢¡3Àþȳ¯S‚¼lK´½W ~ƒ™ñ›Ï?{ëw¯ß˜h!r/DIY¸ª£³M¼÷ÆûàB½(â™1 iùNÇŽ=<Í­qº×Ã¥ œ[YAªõ2Ço®M93F !¤ RÐZªM ¢¦]fÅ€¢ª$µ9ÎLõÕÊ5õ 8^ž‰¼$r‘”Î…àRf×"k¼w¥s~#MýÌ?µ6äÖò^žsé\˜X‹Ò¹`½÷xRS° ÆûHWŒ ‰«6 )•©Zh)ÓxIÀ0’rxessëFKL:òàYh|c]o—H>ë<Ä&.€äÖVcËðˆ$°ø>:PÑß~üñ{?ºvm¬¤Ì=s®…(´e¬”I¼7¥÷>QÊÏŒi“ˆÆ¾3ŽßØKXbͪve×Öª *ZÃ3w_sk•$ÒZJ-ˆ"¢Àœ Ú|QÌÌ ˆ"fÖTmIP_×ÔZä®X€'"O€cÀ1‘å*He`¥F a¥L?;ˆ"kB°ScüjÛ™µaj †yÎ…÷aZ]´ VÐA^ÍÜ‹JçJ«T¤¼Ï ïç y eVJ™vâKåÁö3ʃeö´ùÍLÅæD=ÍÚ Ðìl·JˆÅ<Än<àñh¸º5]٬̼s%Ä\K™kï‹H©2öÞõ´v¹ÖanmSoý»Ä^@ÇÚ«þÙ•ô릳'ú^ã²TZ%„ÐZMDIíô) ˆÒºUu ¢„ˆR 1€˜€D €B-ÔÕí v|TûD%3—‚Ù¢D¥gÎCEYËÒû"UÊ ¢ÈΙ™1nEnbL˜ÃSký´,Q˃C‹‹Úò@UÝŠÒg‘ý4ýÎ¥Ký7Ÿ"–YשÛñƒ6Çn€à(IЀ@;@díüQݺ¼hÞÇ?}öÙÕ?|ûí-UmÇž9æ¹–2B(")m¢”O”òuV`©ø®ØKhY¢5^Y[ë8Õï/VýÚùÚ~n­Ž«Õ>&¢„™STM(3®ûÑQ>õdz¨5Äà³I!HÂû¹±T8¥Õ(Ñ‘‚B z€ ÃÌ9ˆÊ@Tæ<͉yÎ@^7¾œæ<’²H•Ê3­Ë^™™1fXnbLH¤ …÷aZ–ÞTK—ÉÀ2Þk-eTJ™ÇÎÅmyT·Ùò _˃õFt [yXAãiíáÓØ@¨'7¯q~A„i](´,•™£?¹ÿàÚµ öœS]ö>O¤, !LªµÎœk³€}Å\ßpì ù†­qqm —76pz0@$e×ñÅÌ-«¿¡õ•sõX0Ñ*Õ?ÑÀ@ á‚&qBƒ×BÿÉ6T†"’3k B@LÀZÕ\ z‡sçÆ÷'“Bj=^Ëz;Vˆ» Ì ˜qÕÞj*€™rڌ̒DSUµËc¥ò2­íÜZN¤ä©1¾pn‘9À -y`Jç «TÜ–¥séSäA/Rª Ñ;·¾>¾tòd{29ý›{÷NîͪƦíèiã܇CS Õ|g Px:ð!,j2´”p!ˆ´_³ù²?{póÒ©SçµÖS'ÄDWmÚæFÊ"’ÒDRÚHÊ6 8ø.رààÊ/…hrø„Šîk-¥ÖRF‚(Ì=z 0° `•€ukÖXSÀÙU­®ô…8?/Ëž!yßoÚ`û/`"‚ñ§ÓÅ}Î{lÏf+Û³ÙÊùÕÕÓëýþë…5?ür4Gq¼µÒïßwD÷™hLÕ8í‘Æ’h,™'’h¢„˜&Õ‚`”Ø‘”«Ôê¹õõÙùõõ­÷ïÞ=ÿÙÖãµ®Ó7ç¦Yé»ç¥yüYƒ¾Žt#v@ÕKòzI›‰Ô,à±b¤¤+ïÇªŠ $RˆR á¥|á\û­~gXÀ±€W76pºßú²õ?, K©¥±¨¢ùV™yƒˆN0pŠ€Óœ^QòRÞ4ÎÅ¥õØšN)…LkØz¨…bÑõvVK€»£îF—%Jk÷I‚e&…Àŵ5øzLP±®;âÄJ¡Çتæè­ òüw{QüvÖï}g½÷)„m!ÄŠ ÚD¥’(V­•‰R…ÂÄJ¹ù< ‹"äUYò¡@€#äA¤Ô¼ô>‰ë:ãýÄx?H”Xï§V©i¢Ôì‹'Ö×ÏþêÎW›Ó<›?ÖuþeÑØ31öõFlž×œûn4ÜÛÙY»qþÂi©Ôž"ZÕBŒµ”-åßçøŠ_ìîâãímlÏç°¨–‰Àû£ÚÝ€×2«Y€¥'Q¦Ü{Œ÷öðéÞ€ó««8; v`øVŸüÉÞÞÊ Ï°>X¹ Óô¥R=ÔSs꺄µ3K!(!(SÊÝ›Lšª·vÄ2 ­ìÁBXï•2w!ä&„Üx?·JÍ­÷S[ÁÜ…0ó ̯Ÿ=›_X_?û7Ÿ|üJnŒZ¦ûŸfGÀœ[Мãî9o^ï³ë.lH!v¥Y@/®Y€ñ¾©Èl²”@ ¿þâç?ÿÖ2‚—°Äù°˜OÑ)ÎpN.mjý3öþDB5»®h¾ÝùŸïîâïïÜA‰*yß8}û6ÖÍA?‹5´Ø×‡ðÉh„/F#(çVVª˜FÝ7¯‚_ß½svZšÓ?ºví³4½MUýBU­(ªÇf­Æ1)¢\Š*6÷`:u“²lgá–1‚önD@šŠäÏï˺Õyn½ÏMÅr«ÔÌ1Ï]¹S*ÌEÇåß|kú‹/¿¼|gwg¥yágõ £bMq×¢^]6°/P轸¿³{þüÉ“•}EÔWU¦#©3CeÖm³ï€wXêü¨Ry§P9ÿyç!Þ:©äKcâÝù±ROÆZØ­ÿïjÇ·<ïÿCÝ ¸Ý÷kYLÛ$ª†ö }ÊUÙ °¿@Æø|<Æñ›½ή¬ ’õ!0Xþæ‹Ï÷æÅWNgƒÁ߈jP•Û+%¨]>—¦Æ†ð­]pÍGj€à€,@9 -à‚š™m`6ž¹´!”>„Â…{æÂz?÷!ä>„Ü…P$Jå?xõÕù™••ËÿøÅç›Ï ”Oc¡ŽËóþùî8ÔÍïßÙÙ>õÊ©S}I4Bô”™"¤LQ®¥TÆû¦;z—´´C ß*;ΰˆö·4ÿÀ:'‰hÀ9{R¼wRÊïÏQã¢@Z¯úÍ$š¶·uü¶‰úñæá,ŠìF–YVnôzy$¥=ÙïÏ"¥šv6¼5™ô¬÷z8›eÖ{ùp<îíæyb¼Ñ¯`TË®pw6ÃÃÙ ›½^•áð~Ñ·àîöÖ+Ñh´v~s󯤚ÅÌ €qµUޙד„% "?,Š®¯tÙÀ@p!x‚õB(Çl­÷ÆimlEì}a½/zQTæÂ…æ20 Ø‹'NØ,›ÿ¿Þ¾¼ßt20Och àÁtšÍLyBIµ]@O¥Š(Š•ŠRïÍ̘†pçøÖÚq€¶óGŠ(m­ü'œpž€‹+Rþx]Š·fÕ¦šÅ0 ØËsüêþ}üzk %öëû¶vuõÿµ”áòÚÚdseevyccGI™ûJ+ÛÀì³+œ ¹sL%QD‘\ïõ¤ Rož?¯$‘ž3x4­={_ ‡+ì½P-F@x²¯þÎl •gdõDý•{£áÏ~ïÚõÿ¤„¨eˆ˜Wóöö]¼ó*ÕêE]Ÿi³ Úò@º\3üDÎzo¼R&TeÇÆ‡P:æ"0—¾Ò3—i’˜?{÷½ùÏo}puRg žÕ“í7¿,ÅØFžìî¹|úô½Zô´”©"‘D:0ËHJa¼—ØŸ øV®üG b7ÏeZ­üq¨¢â«µóoÑ¡ÎTòÑd‚ÿøùçØ* >Xÿ)P9>œì÷ç7ÏžÝ}ecã±ó>w!”¥÷åÌZã˜mÁzfÇÌ«vŒ @QÕ+@*!” R²ê+ߨˆ/<ÿ¾éÃÑèä§[[ ´ç2ê¤÷x4™ E0ÞÄã\ö—¿þ§ù½«Wÿzõ„®ÏQ`æPÝÌ”bبÚdÛkgÏÐú¹ÝØ´#ð.ç¼’Ò²µ6TŸÝº Jf¶žÙ„ê°ÌlS¥Ü^¿áþËÇ]ÛNÓo‚ 4cÅÚØî²Ý‘'®lnö¤™ JQ*…H)ãH)Åhf¨~'@ภ­ù\fJ))DUÏO´`D§Q­þs~¸?ãÿº}sT[ôºi£Æñ/Ÿ81úÞÅ‹S­‡&„ù¤,sã}nC0Î{Së`çëÕß3{07 ‚pÝ2LH"!ˆ„B©êÐJˆH i!’µ^o燃AúûBdŸnmÿôñãµÝÙ´×\¼MTjê=>xü§z½ÅÀŒÀ,ññÇ?úÞÕ«¤X)!0¯uÌœjúÞóZ’,cÍÏíª¸eM*ð.¥„p5èY_9»ãªêÐpíü Xfv©Öîg7Þ´÷Ù§oÜÝÙY}è:5P•·½sÙsšÛ`'ÏãyY® )3%D&‰Òº (ÒD:UJÛ*Э Dëå¾U@pÜ&9ˆc¥„ˆs&…Ô>§PEû/¬áüÿçíÛÈQmÑk¬¡ú@µâÿðòåkiº]87—å¼ô>7ÞõQZï­g6.ëBpÙ3³@`æ€ÊùADDBT):’DRI©”JW k)£º×_I™]ÜØ¾vòdïñx¼ù«»w7 žÌñÛšÍi½±Õ€ÀOßz{¦„ð\¿/¥ó!x#Dˆ¥ô­6Ù®î ¬®m+ .#hß‚‡s>0;ã½ •L°Lä¸:Å ¨ßzøÁkWÀµgîsºo²ýc ØžŒOž]߸#ˆ2%D"ˆ)D¬¤ÔŒÂþ𥗠à[b@¤ZK%„@¦ˆzyMTe½›œO„¸¹*Å©1å9D]ÐíüRÊðîùóÛ777ïÎÇe9Í›–Þç…µsã}i¼/M¥õÞºl`ö-às{ NhBòU«¡êP5h!T$D¤¥ŒjHãºÛo$eo­ßŸüéÍ›FçþîË/ÏMŠøÉ¿õö\60[/„õBØHJ›iísèEQX‰ãÐéÛØ²Ÿ›X@< Öû`½÷ZJ§¤ ¹s!0{Q‘ˆˆ›[ðÃ×®`^–oïN§Ù2 Ön¿™6(<¯ ¸3¾W9R;"ˆ"!„ޤTSc–1€îÛúÖÁqª©¿”BDÌœh@DNѦ"\:¥äO¿¦ó—vóæçy{R–ùµã¹µÓ™µ³Ü˜yî\n¼/ÊÊùK‚ñõ¯¢ÿ!x_é`×ÐÔNEDUê®NÍ+)…„¨A •Ô, €$Q*KµîÙ¦®*¶É¯onçVW&ÿáÖ­×|­^€@^³°;®üêË/~÷W.™ D¡„(µ”e‚qÕÆ›j"¥ÊÒâðÒ×eÁööÊØè›â™`ëÖe‰R™}ÝÉ‹ê6ÞE$~ÿk·~냛ÝìÀaÞ×vî1CžÛF7뽘—媬òÿ© J”±´Bk)¥ á(øÖØq€}Ôß3'¢ÚÒ»`¡ýaì&Öö&Æ,FQUeßúüóÎTÜt5MË?{óÍO}[Sk÷fe9šY;™Z;3+œ+ ç S¯þ¶ þ¼e¶¨Vþ&p:ÀÌàfÄ¥ðžêr]ÒB霌¤TEÕ¯@'ÎűR± !1!ôŒ÷sëý̇¥Š~’šÿúw¾7û÷¿yÿú$Ï“¶6&|òàÁ+§WV·O¯®ºn©„(µ&’²”ÎùžÖ.¢PwÈífžæO]ZÜ[ï+ð‚ÁBw`ATeGjK•ÿâÍ›òßþòßvu@×ëKÆ/>{-–=§{_`k<^;»±‘¢XÅ’(’BDBY·`­£‰“|«VþÆŽ`k>—=­UCý™¹)ø9MÀYéý{Þšó_ÎçXIȺXff >|ü;ey ®ÓcáüŸ9æ­™1{c†“²ÍŒ™N™åÎÍKï‹Ò¹Òx_¸L\ÁðÙâIEoºŒ”Q¥ç¼ò!H%„pÞ‹‚Hj)U)¥Ž”ŠJçâTë¹ÕzæB˜ù&·ØT)÷'7ßòÿ÷oÞ¿9ÉóØßfkÇ€[_}ùom©º9¦’r®BÈ#)‹X)›iíc)Ãì s?íB_#hÇ&À„Të01†AÄÊZ¦Š@Q‘©Öê_ܸ‘ý»÷߿ڔ"Rç»Áˆvš‚Ÿ²«û;À(Ïûç+çê#–BDŠHƒ¹»ú«w ¾è@D,¥¬‹5"êÑ€ :¥Ï¥É;C0Šš ;ï+…ûã1Þü¸ªÞc@Ôñ"@IþäÚµ»Ø™3œ3ÅhbÌxjítní¼°¶‰ü—0!S;½kÏ ÝÏE™LÅ$aC6… \±«Km]…¡dfÀ‚ÙgZóŸÞ|‹þýoÞ³FÕ6 ¨6ÍLÊRþç?úÁO¯]ß«÷ÀOuÝ%W Q‚ÙdZ«Â9ß›µ¼RKÿjÿ¸t´~n;Éâñz<7§Zó´,YAé5!„”Dzfú{/Þ¿sg³qìvÏ2Êì³Ë¼³ðv泄jÇ@$ˆ´ RD$%Q;ð´Ìß {Ñ[ó¹ìk­Ýûƒç* h@ûóuÁ£a Šþ³tŽ”B;'T]©„ˆQòý+W>ýwï¿3x/ÚR ímËXÀQÀîý³²ìQ3ãA "-…P|Ptû[áø½È€^ -„ª©†'õþ'8Eξ×c¾rkakê?3Ÿïî. {OV0ðÓ×_Px?Í+ª?33›[;[ü„0ÍÊ[·ôÆþÕýo¯þÝë¶h^`‹ ¯nÐa¥ŠˆÕó‘“Bx%”¤„ÐRˆøüƉ»ý§¶¦UÁP,ÄbP¸3­OŠâL¢uµž¨™(<•*¥M,£Ýc è^õk@¸³Ÿ ´ävl’Ëj´4XA‚H(!´ö>RBÄ’(M£8}ëÜùSïßùjØOCŽbŒ%´e‰1€YYd+iÕR@  )ÑVêI& û}ëâݺˆÉ„B¢&ø—Q½ÛD'¤sïzï{ÆãªeW]÷ž[‹¶·±[–Õ•HXLït œ[[›ÅJ Kçf¹s³ÜÚÙÜÚ*×oí¼t.o9 }”K³ä°£Ë {¬9JT›kŠÒ¹¼¨‚‘³º6aX87,½ß+½ßu!ì9æ½½~õóæŠ-\}S(÷vw/ !ú’¨_·K긖Ã㙬Ó/;G»í/³£²,\¥©XÖ´tnX:·g¼ßµ!l[ï·¯;÷É M‹6 i^Kî{^o”ÆóyªkK51A¤@$ê@à²Õÿ[g/* “‰X‰cYkÿUŸþUª¢ÿ'„wWu½ú··ÉóO¨šë¨ê“j2XøVÁ _ ‡âd–I‚B$T5÷\!`ˆ6„w¯j¥tVï=vf³ýÓPÿ\^[›ÚzLÕç®4Þ6„<Mª­½ê7?7p”î_üÙ7O¢Óý>Ê2Ф¤D)‘(%•Ò3«‚¤j’¨€Â92Þsé—Þó¤,yf-¦õØðÂ9[·—¾ª ˜xægžæÉ¥“'ŽÇ£WïÇ\ûº[ìL§'N  UÎQµ?¦øú­«ß–€@#Ñ Pw+†B”ÞKãý̆ÛRBÏz?PB¬Ü¼pñÞ_Þ¾õÆQ,€dZWŸ·žÔ~nûõ›(¼ @ ¢f ¼ó·Þñ{€b)IIE¨¦òfõ˜®U áç}ïqgõ·ÞcR–x4î‹¶QýO``se%w!”¶ÚÌSÚzsOj³K‚~Ë‚˨ÿ>ÚÿG—/.­­Q/ŠD,¥Ôu/"Òž¹™B,³ µæLµF]Á†àçIâKçü¸,ý^QðÌZ* ŠÈ:æ‚™çÌœ4ö[|©ÖÒ… ¥1)€>êFŸÒ»ërÉê/Œ‹EUew²%›++“Ò{ãêZ~_Ý–žÙ¸ªƒMÛáŸùšóÓ©^Ö“D¤ZËz©ª‘Æ9QÕ犙¹)B‘ÌL‚È+!œf¶Zcµv‰Ö6ÓÚŽËÒÊ’™Ùëj¾a õpQò$ަôÏ­¬ ·[y¾àõÖùÊù‰4ªÕ_zf¢jš°rÕ(±vàŸ¨ôÞiïEá\Q:§c¥&q=ÂЇ°˜G7/\¼ÿ—·o]m¿®ãÛP8÷ÿ±÷&M’]Ù™Øwî½ï=ŸcÌÈ™  (àP¬*NMZ—µ©YÚÈL‹–6­E/dÚéhÓÿEfú Ò¦M2’Öj‘l²² ÅÂPH 9FF„‡»¿éNG‹{¯Ç O÷ÈDPLxÌ^º‡g„ûs÷wæs¾ýÈ·°®¸úسJ"iÙQ ¨G2ü¼šÿ¯F¯„!¸tàþt*÷nsŠÌ¼lhëçO÷aÜU…‹,±OÊr©¡Àùo¬Ÿç6“²©Œ1."ÖDC #xE·È·ªôÝcUùŽòßÙÞ“¢…”J¯_ˆ@=> À:Üó‰í83³Š8ž$‰,‡ƒ–ˆjé}#‰ÚLˆ:—²-”2µ1iÁÈ‹Ð&Ô ÖÎpØÞÙÙÁ0ÏÙÕõ™…"P§Ê.øŒC±ñ…iÀ—½Ú_dJ­ÁÌfeÒ„iÇÚy¿pÌ3Ç<µÞO¯mo?ìçùÝRëLàLñ%´÷0ÖÂyŠ(Á_¦(‚¦ @ÑÙ¦R^4ðKįK.(¤¤øÅd`Σ’ŒŒ¤soÝœLäç§§˜·-zJ!ÃI]ã“ããe΋έ0Èò´ºk¶c6XÂVá|{nÝ°ÏÆJÿªò«0aÖgæÍø˜™'q‹qÌá= (¢G& XbD­JQPÑ@)ÃvŸuÌ* ½ô´^kp{ÃQkêµaI漘ƒÁg“ˆÝc}ë—– F`©§Rß:gjcÚA–ŽïçŽùÔ3Ÿ:æÓï\»vøÓÏ?¿qu<†÷µ1(;ŠŸK‰LÊ@òeN®ëéƒ!”>£o@¸|€””d½Ï”9€^'‘w7ÇEƒá­µÐΡ6Y`ÁYjh÷jÊïö` #p§cfëH…áˆé÷‚ÿMa?€óÊßS*‹íµ¾g˜xæm"Ú¥ÀI¸ƒ0Ì4~Ë8·Ui#Pc-gJEñÄ0'`æ„80…R³øX­X&#"þ KAy&Ž­F î‡Â׺€¯äÂßО·­óÌÔWÊçj¥g^8æ¹÷~þƒƒ'¾mo<šÍ°Ð:à®(þê ¿Œ{¦ô~cþODDRÃðÊ*}W.•øóû÷é·¯]‚Hzf%Cÿ¢!€ÑGOŸîÀ¤( …@/tZç0‹ƒ?]YÆm*`äq\ßeï §þÍÓ}ëV|Ï)ÿ¿ýÑ€Žë:yþD?V–‰ö(€•pE7FBün~“™˜açé=¹!<«ëVŸ úƒ÷•RŸ8pä¥<ÑBaЉ=I”‹à½„¤`Xîðù“÷ÌLž™™™Üfo÷ÜÅÿ«Ä¼´½$ò­s¦u®ug ôÞ/<óÜ‹Bæâ IDATeϦ­®ŸÕu¿›ÿ'Å_ö^×…lУ<>æ1Âíó¹þ+\*pe8$§ÿä±ÐÐo´¾Qj-s(µF?Ë…‘Xgû¦oˆø€Úëx&òˆ`žx^é_Xé€ÿíßg`9´t†SH4Ñ.WH”d×v2õÏFB|wÖ4jf ª¸´³>=9A©õò¹=;ƒá!Í𞙣€õæù4à+/x­1€˜µ­c€&Ea÷­õ¾f â 0s9ôOizÒ¿1™,¿sϼ¤^w‘' P ÆÚµ¯¿*ÇU9÷úD @t¿› ­Ê+e.Õ(ðN¯'‘ð 2Q^õ ¥¸þÖþ>†y%Ä’¾±­sX´íK]¡/<<ˆRMWá×-ö¬BfáýÍ÷8 ¼„¢ŸeR†…¾ˆ8…̼Rúš"¼}³ÈÿÇÜû÷cÔiÓúy¾ä¼O’¨Ã¥D˜·->{vø>øïNÊÅïdBÜÉ„¸™Ky=—r_ ±#…ØDC"ês1. \1J…@„((—Rû€cà³¹ï®ñ®+z}¥²†j›°$ò­µ¶uNsèÈԱ͹ð@ysg÷äîζŠbùýׯ éÔ¤(”úR'S"€(¤S›>“WJ.•íœôÌ¡¼@Ÿ¼ßKöÞ`€IQ,QqML^Â$ ÍǪÇ_Þÿ7÷ÞâEÀÒÃaUÉ\J%ªÌadyéž ß¾–eÿªnÛÇó9N›}¥À¼öÝüLôdéQ%%ŸžÿúÃ~4],ÞSRÞVBÜPB\WB(¢=)ÄŽ z|4þùá!J­qR×çÒ¢½ÑpêÏ€L½óž=3\( ¬^à_Ûß1ËÏxÚ4ŽëB+RGf¡*Í:\™LóO |qzŠÃ²Ä¬maâàO*x~éBàÙy›[~¯¬\¦ Œÿ† ÁaMsi>>:²÷˜D ;ù¿ !ì‹_ݺq¬ž;Ú¬øÏ…ýÐÏ2˜ˆê“ !"XIŸ€AÜWØ%àjNôö¾R?^¥$#¢åÚ:Î.$zpçý¹”f¡uØîc/ÿê£ÿÙŸüÆ;jPOâ²ÅÑÞïý@0÷›_´->==]¶D3!]!U³p:¡;°ý½÷~UÖ}d_§xâYU¹­^ÏÚ€¸Ô2ÐÄù†Šº²nq‡œVëIºpp/’QÑÓ@ ñ˜Ýئ¶ß+)—&øóû÷cS–$3§A•´ Л7MqR×x8Ÿã¨®1ïZÿxlªd¥½òØç%P¥¿í*þEã½ø7oßcpóÚuz4ŸËLiC1®@(üm!ý®æÎýø¤®ÕQU#å7¼|bµI ¡Œ€âã™ÏúŲ̀­Å\ë%ÐiÛÊÿçgïO q;â5%Ä )Ä5"’µû{Ã!FEíÜYNÃÀ¤ß¯ãüƒqÌÎzo÷ÎF¨pwf6Ê…VñKÊJDl³©-ËÌ- ÛPSÅ®GöäI¯‡AžŸ;zYöÒç0. ½<‰ `Å:òÊ‚Ë@‘eNsÙëmQÕõ ú\ÌûE Ÿ3)á½_k¦»-Z­(¨Q Ê$Ä”ëÃý®,öÞ£‰³ìJJÎ+sÞ÷…#¶ˆhϵÍN­O›[EBT!ÂðR¼Ø(¢”¤hÆy rѰ9ïQiúÞZ£›ºîÿõ'¿¸ùÃ×ßx¸|ÏÌj;S§ÖàÚh„£ªZ~ÀÁx<‹CÆzo¬sÎ8çüyÅ_›Ÿ¿ÄW÷« ðÇuM7ÆcÎ0ÅiGÍîpÐÞí9m—ÕÒØ‰¥ÐØ ˆÅÑ_éÝüåÒDW–œpÞ óñ 1È¥èo'°Ïx‚‚4Æ<þw?¹ò…n3Š=^„ €C%ˆ+•ªÜërþåÅðßß~³vS=• ʉ¨‡0سEÀö¬,ïÕÆ ¥1(¶vXïϽßyk³µµ˜6 Nêz©üé½ýÃÇ×N«ªÇÌ‚™…rö:3‡MV"ÌšæÜïßÙÙyâ¼×öŒÔÄú 8¹ W¾’¯] ÖOÛÖ¹'ž˜…4š™Û½Á°¼2†Èí‚ãe%*þb\¤SâõaÿjWä•Kc€8‰–1$…È= ªVow{Ú«¡È²çzÞÝòþ\k%"?ŸBI!H A™”2v\ô¥2€%ËxÿðP¤óµÎ…ZóÀ¨mÛwµsê°ªP[ Ï íªèÉmôôi %i‰SnMTþòÄq,ä%'ƒÁøÛÏ>½ÎÌ‚ÝöÖ^ùt:…ñŸM§¸zÚe5v{£Ñ‘ -6m¼7ñ°:ýÊ{] }•)@’ktÞà6Ö:Iä<³¥4ŸÁ¬AdFýÞtÓ5íÜ…ÕÜ•Ã#xün[”_&zUäÒ¤ƒ, @ñ!LïMÈ,¤æùÚ\Í1/÷’¬þV €a>? Òƒp‘9?÷4Ú9$*™‘ì'žk ÏÀP‚¯NŠ ­±Ð…”Ai;ù~_)8f¨Øî#&¶çm‹YÛâ$ÎñáIà'µ`Ÿí̪rþîÎÎÍ2¦ g3üŸ}¶DBvnmoŸZï¸ Ò¤Õ1 è¼×ç6|œ_—°‚mà°Dä0 ²`¶BÊúEO c¤´îZèºõí~_sPü¥îÇ9ø2ÿ8"‰„c|¦XJõ¶{=Œ‹­µ0Λú*Y~ñÉIUŽ‹,W2nàI"‘ !•”¢RT/è$´Ö¢÷·ã­c–P&eÓfì Ëó­9«YD:+ÏŒ™µxVU8®khk1k[œ6 Nc?—åë/£;½rçn;ïQFTä“gÏÂ8#Ÿa ¾sõêç&b¶Îií½1Îãý’Î Ï{ý_›|kÂ{:;g‡‰Èà¢X¢/+)5¬ÝX°+Ž I÷s#™>q9ÆÙ„<D/2‚¯Œ¸4 ryYr\Ö8©ªBƒñš`R&Iº v“8­ªáµí"gôÜ™BæBÈ Q@·tîÉYFu€¶Bâp¾Š9mj´FO©³¢^§ðA=Áž,x<Ÿã¸ªÂx³RKŸ^ÜwÒŸt2»ý>^ßÙY åRâ³ÓSü燗€(Ž­~¿ÙŸ-Ú6ÀžYÛ¶ÖêÖ9c¬µî,ØTÿøÚ/öÎ0?šÏýo° -ZFœ×ˆcœIÕíF`–ÍÊk¤@ˆŒEa8LDº˜û{S¯ð­}íri ´ÎQ.yf!ÒÚ*‘hÃiÓ`•*­ƒXN€eR¢]3ÚmžTUqkw/WBä2™ÅCÒN²gQÀKz<@öꉙŬiññ³ChçK¶cÚÅz@Šbk—96îµ§èfõJLïc§ßǵÑ[½””`ó¶Åzðç½ÿÛµµeë\Õ:×4 Éç¬cöqðÂ}‡¯SV wï\¹‚LJ–B°ˆÝê|׎ýK5ú7}y„N óÜ$Fgç} Rsî‚À+g.E0͇ €|\QÅÙ,¶`ÅiÃiÛâ°,ñ¬ª0mÌÛ6ô¼WŠ„IRbë<œÏû’(WáÈ’!RŠ\Êîë®ûw/cÃÊ,™9*¬OUå§å‚« ³¶ÅBk̵ÆIÓàIYâÁl†Gó9« Gu½¤øN‡‰c­ëŠWJl÷ûØî÷1‰ÊoœÃç§§ø³O>ÁgóùrðÇ2ÐÏsóÖ•+Ÿ¶ÿ°i¬mcR`s6yÖ5°rÁEÀ\) ² ÿêõ»Ë§Ë„ H A"Žèƽ}Ñ3¸¨Ø-ª^$Ûý~å½·p.l‡z¿8è×f ¹T€öž²ð¥wå9cžÅÄþ*¤­þN÷>˜Öua½ıÝÄ ŸeVõ”¥Ö]åO·éXŽïÄÿ4Îq&¥sÁÆt/Ïع:Áq ,KûëÝ+¬{~]Kã™!;ƒCé=Ž‹Ã<Ç(ÏÑÏ24Öâï?ÆÏ—`…]þƒï¿öÚ絋ÆÚ² °çMëœn¶ IÓ€XlB8þJeeæ9zêìRî‡oŠ‚Â[Rô×{·NlˆEsÿXç½·q:²óÿd~rÒ4´ÕëâŽ:1½¸©›¾\J`%è~k„Px:Ÿí\OeRBÈp¨\E)!Vi¡Îɼm—÷M¸Pyï$‘%!4µãɳÃÙì;­µXĶ_÷\WÏ=ÝO/è:)@z,Á^÷ÿÓéÓ¦9[]ì<±eà`4ªnnm}¾Ðº¬©jcê&¤ºqN§p›•ÝÇø•K.%dgœ÷ÍÝ]‘I)"ΊÀÅqë=_³bÖu`g0˜ÏÚÖ¸ Y €s±¸òç«÷_¹4`UXNg=÷1N3ó©¢¾*ë\ø''ãk“­B™”½\Ê"—2WB¨~–eµÍš??'?-+ºR–œI‰¾RŽCBh0·ä}}gÿƒ÷|ñÓ¦‘é 6¥'Ï…°Ýß‹,€1˜uR³'¤ø‡‰øôîÞý¸±vQö£²¶¶®iu*zoˆÈù"̃åé^}¹ÈúKK?ËÂ~t÷.õ”JûRœ¡öæÈóÞ½¸ê¼îû6Þ/¦ºÒ}#À•ᨉ˜Æ2'¤¨TØ´þýJ¦—ÊtG2ÓC©|î"îm Ú¨üÀÙXw¦x^k“Â<šÏJˆ¾¢Ÿõ””E&eQ(•ÕÖÊ^–©EÛ¦?OϤ<œk=¯RUþƒ¦±VûèíüK*?Vø e0À(Ï—Ï?Ì2¡„RˆLÚ®ž êQ¼›Œ‹WÇãµíàiÓ ƒ@ëÎ7ÁÃo ­cNÊŸ—Ú¢ñsÙX y•äRÁ½3{Äâ¾±æóspPY¬ü'0ȲçPÖyÞVkuRUÛý<ª¤ìgÎõr!Š\ʼ2[0S&¥4έ+ž»´sÜ:ç0ÌÜP˜8}ïæ­ÿúÁÓ§wñG× %åßtÏÿˈcà­+WN®M&_”ZÏ*cæ¥ÖóʘªÒºn¬mµsÚx¿Êopæá×zñï˜ôz0ÎáN¯Ÿ°‚òyä0èÑàÏžíø ¡ž¥Ö•Ÿ€%AìÁx¼XÂC0"S °Îó¿’r)ºpΖ2"|×:_Õ5´sPB`eDD $…”ËŸÏõ|ãýÔR>yv¸¯„H‘@/¥JÕ˲, +‚´ò§çÒÈ?»ŸŸ”¥/µvµµÆxßhï+ëýÂz?Í¥|ü{wïþWtþ0)üªGßtu}™«Î¸³»;ÿÞ­[VÆœ.Œ™•K0°{ßê8 ìÂÀ*Ò¯]ù“çpeoŸ ))BJ"%uw/òÝ^M¡æs×5m ›`à‰.Ä„è^WG£©;[Š2&Eë½¥õ›¡ëÒWB.@_‚튓YŽg¼7àæd‚ƒØÿ^]͕²ˆˆçCîe…À§Óé(“r 1È„fBô ){ý,+zJe=¥T&e—"j­ÔÆøÊ¯sµ­ôb3ãÜÔxôÆþ•Ÿ¼{íú§Ý×NÊ.×ÿÅx}wwñûwî|XsºÐú´ÔzVj½(ùiÝZÛhç´;~zÒ¯E<3bg…úY&•i¬ºGa¹j €ÑPʃ·ö÷1ZA„ªã‚Um >ïଭ0,…¨â^Dk˜µóÞv–£.\Ç+¤üÀ%JæZóV¯—V2GÀN0»Q‘ë»;;ç ®ÖI?ÂA¥b°1 ÈNªjoçG™”Ã\ÊaŒz…”Y-„Ê¥ƹUïÿ\pÒ4ž;ÌóÖ1—sßK9e`ÈÌýß¹sç¯æºíz||ÎaÉ™Ý=xYÆxiIõ…»»»‹ß»sçÃRë“Ò˜é"YeÌ¢¶¶ª©[çó݈€|èi÷ôpð5P¼~å€ÍçrR2ÂÁè!Àœ‰hLÎL""Ô¦üÿÜÉw>Ï®¾¹½]&å·Þk{Fcã^ÄËü†àÒDO vÞsÀ§aGÁû{ÌõÉÖôÊp ¯×@ø6Ñ@t¯àU3ž4úg]QRŽ2!FÉô”ê÷”ê²,ë)¥ò¬3€÷Ù8çZÛYÛšÚ˜&öݧ­µG­s‡Ú¹Çü·þýÝý+ÖmÝtemájÃmZš¿³»;ÿ½Û·?Xh}²ÐzºÐzZj=+™×Æ,k+ã} äv.±­ƒ?ßXܤ _…,¡¼"¶32ý†‚h$€ yÓ87x0›!“£¢À°(Çî˜Çü? Ñ™aí>~s{ûØ„t(,FÅíHê"«ÀWVñ“\šZk}&¥“aAʈ Ó/ŠÙêï¦[í\‚rÂ0Ï‘ vÃBH×|6ŽèýV&å(÷~\H92J úYÖÓÎå¹”Ù0Ï ãZkÏuºr\×X30ú´‘£/÷Ì…cÎ÷ÒK)ÿàîÝÿpm2ùÿøéý·Sa0ÉsçºgÐÊy„VßïÞ¼ùôµÏç!䟖ƄCëÓʘE‡õ¸öç™^Zù¿n¹º…îO§r·ß—Þû‚ÌCA4&`BDröµ"ÒÁéH—K‰\Jèˆ}IaW£?ÄŸE`‡Úê÷Ogm›”¿51à0Ðe~ºhBò•‘KeL©ä¸¢i™È0  ¥f@˜•o­E·ÿlBŠóä‘FûÜEl¨¶;'¾89>¸½·”y?.”ïGF©¹É²Êx߀Y9fÓZ»‘.ëÑ|έµ.Â8¥”c®÷Ê*¥¬÷2—RXï)—ÒßÚÙ17¶¶ÿòþý÷>;9Þ[>ÑŠ²§ó\}éßî÷õoßþt”ç‡ó¶WÆœVAùO+cN+­ç­seë\ek|ÈsÛ5F`5ÿîb¿ò5†ÿI†y.2!T$ƒí#P¨)¨løôéጎ‰à½‡¹”xܶ8íWë?‚B(ùSã\mœ«íA¬6ÎIÿQ÷"~¹4àýÃC¾½µÅÎ{ï…pŽ9Eš–„˜?œÍÆ ­á"lv½€ŠadcmìŒxøë m]-þÙãÇ»o^9˜äBl9)· )g6°Ô–&ðÔé>`µR¶ F`mHx\×¾—e¾¯”å¹pÌÊz/RÒ†ñf6Þ»Ì{ ÑþÑ믟þö×Þòäõ/NO·‘÷®›otCýtÿæÖVyc2™ÞÙÝ}ÐX[ÎC‹o^3«BÈZ³h[´Î•ÚÚʃÔtˆO× ücy9 )¥eÎ%Ð#¢! šh‹œ{{œ‹უ£åôòYqÞ·¶¶Ž;ôðud†ç."~^QCpi ´Î± h ̆ãDtû¨,Û£¦w "SÛ/}3žã¢À\ëµí¶®ûf§u]¼ÿèÑí·¯]›;æ™Ujî˜ç.°Ò4̬¡µåy&ˆ|eŒï<Í9#PiæÈµó^X¥¨ð^))—¹÷^9g2!%e©”Z|ïÖ­'?¸}{tT–ûÓªÚªŒé·Öª“ºî1€«£QÅ_f[ýþLU­sÍiÛVm(î-k•µóÆÚEÂþEkmi½¯´÷37þŒò¼Ë}¸®xî¢ß'¬™·ûJ…«J޲L(8r@ØDÛD´goŒ‹W:tpU¤ƒSRâÁ|ŽG‹Å¹a«t'õý €[ÛÛU‘e§³¶­L0MLtœH­Ñ‹ö"€WÌ\&À•1œf²Yˆàý#2ìµÉäèóããý›+Ì0­sKhpK¼ÀÕ ÕAœä>ölÿõ½½ƒ\Ê…ó~î™çž¹rQq<³öÌÖ1["ò¥Ö«^0m7) òÌä¼×ý,£žs"޶úLJ›Ki2!Z%D¥„˜K!Æ’hÔ˲g7vvú"´¿Ç¢cJ‡¬÷¶±ÖXïµv®i­­[çê¨ðUã\ÕZ[6ΕÆÚÊz_Gåo×(ÿ&ú³_»÷4ŸËažK)DÎ@Ï{?BðüÛvÉ»7ŒsÃÇUê;qû1‚ÖZü"®(=pÖ î]¹òL‡•èº ŸWÝ:W·Ö¶&tG’ò¯~¯¬ò—Ä$Ê(É*ŒsV aQË@ËÌÍ{ûOÙ˜·Z_Xh¬E.%š4 Òy¤ø )ÄI]‰¿øèÃ×üλ'.²ÐDPh@¤*­`cApÖ¶~Èì}è) í\¥ãL—Iér)m&D›IYI¢2“r.Bµ{aÅs"ʘY2@v8-«hç´u®mÎÐ}šÖ˜J{_Çת­sšŽçO`ØXÜßÿús*”™”™cîñYáo‡€]"Úƒ±oôbñÏÄâ_ Asøl:ųª:?R½b£Qse4z6kÛ*”ÿ»àdÖD7!%­ÞÿG•Ka’U_œlô¼Ú‡ ¹.òüÈx¯Îfùº:!Ô´µØêõÐFXlà¼âÂØ°qeâx¶X Þôè;o_»V1sÙhjÄ€ã̸$òMž»¬îŽ€/µv%Bš2Ìó%(ˆ‚ó`Œ ßµ$ZH!”æÝC>U’ •>âø§©µV\¿F;—Z|µgÖÆû1m™âw‹yÿ_×…úþJ%,Å™ê.{äÝ›ÆÚIòþa$í>ŸÍðé ¼ÿ{{S‹¢­µ•¶¶nb!ІµhÓ™Œ|á^Ä«$—Ê ²Œ+c|O)k½·Jˆ–#)3WÇm;?nš½n ] ÚÚµ-ˆ}¥PY{.üÏ"mTÕ٨뤷¶·_Eå™kÏ\sÀ£oÊ" „?"ò³¶í>Ūwpqu—´”èI "r¹”. ‘M“+Õ¢2²ûöãÌ{†@Š¢.²Õ8ï½ Sj ÉÇÄ–‰±ö@ë¼×+!ÿjÞ¿Zý_·þûu{Ÿbæ™ ŒdûwìÑhóÖª÷—B, Á“Å_Ìfçç)6xÿ»»»f¡n’‘jŠËÑh<ßÙÔ |¥äR€÷y«×c†Œó¾õB4±·^] u€½«£Q Í0UGñ{‘+ÐzQž£ŽûóɬF¦T`TðìÅùìÓ×ôÝß8æÀKWsŠbÑLùÊZ?éõ<¬àL™Â“m¬åVJΤô6´9’R+k[˜}sATÐYø¯P )EqLÚ™P#±6NôÅÏÉ06ßê±Nñ7º~BÄq]«~–åž¹'BÕ‹Cè¿ODWÈÚ÷t'÷_õþó¶ÅÏ—¹÷ÃOw’÷ÿÍë×ç`”2ÎG´i4ÚoN^iå.™¨ªl!¥ñBhç}-‰*Ï\½upõ³EYÞ{0›¡›Qñ»ÑÀ¸(0Ês,bG`õÛK©@1ö[ç0==íýÅG¾û'o~'Õ4bÀ1%qÌvR.âÕñ´ižº#ÿÐΑv޵”ÌÌVIé‘ñÌm.eNQXåÂÿO&8¤ì8|˜V³|ëMÊmVn»'TÝU÷ÜŽ÷õUþ ±ê?PJI¢œ‰†Ì Ðц;óó‚ÈJ"¿ÐšR~0Xg–EÁ•Ç’Qðdœ<“”ó^Æû¢s¤S†çX·Ó¿ªø/Êküz”Ö¶Y.eîÆ߄½Âå¿ ï~ÃsãqUaÒ롈FZ Ö9TZã"ï¿ ô÷ |÷àà4“òxÖ¶i'bÑÆN‰ö¾»µ:õQ~àò~4Ÿû«£‘'"k—]#…¨s%™o]9ølQ–ouÓ€uI,!0éJav’ò ¢%åv÷÷S=€™ñÿ~øÁ½¿û^™Kynx&¢èz^ñBkìD|\×ëÚFévÝ`2g^Õ¬v2»».xYÅÿu*¿œ6ê)•K!úÌHT=Dt]n½ïNãjom ¬sKÐW*PžM§Ë•ßTìëVa#‚~ïÚµOçZÏ#,Ú¼ŽÀ¨mdH²¡Xº.RZ^i¹l¸ÔšZ;â¨J IDATI¤•mÚr•g^äRNçÎÅnÀòâ-áü¤ c†”ÌúÇZlÕXt눼ò/>üà½?~ëžÍ¥´TU^ăˆ8Yº3Cb7Õ–á¹b!Î À:åßdºF€q^é»?3^àѾFí_*¡T.‰z̤ÐÎáñ|Ž÷ñÇ¡³rÆÿIPè?¸uëÙ°(žÎÚvVÏ¿¨ƒ¨´µ•ŽËQkBÿ Q¯²\ЕGó9ïöûnTÎ3kï}ã…(=óÂ1—¯íì<äù½Rë|Ýn@Wd¤áZh½Ü=_­¬*’dþî‹ÏßùáÝ×5‚`qŒ "yEcm‰<Çí­-Þ °ÐÚ?šÏ»å…îýUC°ªüÀÅ¿ç5÷×ý |…ÊßÏ2\×ý×Rùgm›õ’çÊ¿CÀ>å¿IÀkøû})oGÖ§*Ò½ax ­µøÉÓ§K¾ÃMâx}ooq'®GÇ©Ym̼µ¶2ÎÕÆûÆ1·Îûþw‹§›:$¯´\FÀX;çs¦µVçR¶sí˜kŒÀâwnÝzôWŸ|rçæd²VñÓI!à¼Ç¬m—,¼ÝzÀ&åOBDx8îüÇûŸüÎï¾@Hœ#– Ù”$´¦ìŒËÀ^ý£ù<Êê©u AZ_è*üE`/›<ûªÂwS¥ü*Ê/ˆ°Ûïãæd‚;ÛÛ«ÿ ˜XhåR¦œ?x~`D×pÀ­Bˆïî(ùæ¢mÏø6֢޵€Ÿ<}Š/æó •ß#¬Hÿá;¿˜·í,)Lu,ÚˆÒ ýWS€‹Ò¥WÒ\F€_Nùzsq0ÀñWG£.D[:G @”Zg™¹è*Êùƒòß.„xwGÉß-µ–§M³\ð"£]jñó££ÐCÝpnÀ0Ïí¿¼wïãˆrQf±ò_ÆýÿÆ27.´þ6F£¼?py ËÒïöû>6hÏÜz ÍÔEžO‘óÞË6ò$åpŽ*,Uûaƒ0¥ !Æ_F¢Øýó~þ{ðÆ›ÿ%—R‘¤@\!‘TÞ+%„ÔΕ’ˆkµÍn¿oëšÍ盦ïVCý—9©U%ߨôÀ/¯ø»ý>®ÇØ 0. ìôzÄÁ«È`ô\¾ŸI™ ¢>3‡VÑ>‚òßðZTþï—ZËi]Ÿc’B@ƒÇ‹þîÉ“ó{þ+âúýÿü7>wÞ—é´ƒŠ•õ¾‰ («áÿE¨H ,ëS_öãûµÈ¥2ÝB >,K·ÛïÛa–Yjš…¨9D5“¨Ìç£U¾€<ÌÞ/ŸWÅ¥¡D"ÚX V yÜ xY#"WÕè/>üàûÿüÞÛ*—R%öé}.½Ï”÷™"Ê2!d.eÕSJÆPŠˆØéõüû‡‡ëR‚u—ù¦[÷»kÕd‡–u²—’äí·£·¿>ãÚxŒ^áHÊÊED'ä/µÎúJ储ða§Ì)ìg¾JD7¸• ñÎŽ’ß+µ–'Qù»çVƒŸ89¾sÅŽ»ãÉß ¢ž%ˆ°åÖwÞ÷=QÏ1Ï%Ñ‚™+ã}“KÙ²ÌVÆØ7wwÝÇÇÇþ`8ä?»yñýë·ïq?)F¥õeø—$À9Eï%HíNM¤û¼Ìœ¼=h%Ô!½É‰(ç°ÎÛ'`ÄÌÛ ÚAXì9pMÝÙQê{µn÷¦ÆÀ8÷œò?Y,ð—ŸŽÏçsØ—Pþ?½wï~?Ë/Œ™.Úvº8+þÍšÐö+­÷µñ¾ögyÿË@¢ß ï\BБe;P áp Jx–se8ªëº^Òf_$›æ—5Ã, À#Öâ?}ñÅÇü‡òæw>èÅÀy?pD#'ÄÐ{?ôÌ'JˆgžgÌ¥c®Ìív¯§sæÞޞͤô?zýufÿg÷ïóÿñóþçwßaA„a–a‹o½,;Wä|I£ÑÝ–©v­sçªl²×ïv"Òl‚¬ŒQ‚HeRfÑã÷p¦øc¶@´‡°Øs@ÀA_ÊߘHñn¥µš6Ír¶¿Á<˜Íðþüçh˜á_ üÛý¾þñ½{[棅֧ ­ Ê´Ò:ôü ke7+ÿE“¯üèïª\fœKÉŽ™Uˆ¬óø€—‚üËÆlµ›+<ÌÐ(íŒó›¨zr)1. ô”¬mQ‡mµþøÅÇ¿ýƒÛ·¶GãŸïG‚yì‰Fžy"™O˜ùÔ3Ï\ QÁKÈãÅ#q°¹­ À{Ý4 ãH6’ŒA.%FyŽaž£±³¶=·³þñááuqt´÷ÎõëYþ Ï<öÌÇžyâ™§ L™yîy‚c vÞ·JãÚ°ë)e&EÁ³¶uÿË÷¿Ï'Mã”%£Õxo{ë—òTƒ èñ]‚2€†+SˆµµJ’Δ>óÌ€¶»ÏÌ#c:Ë÷SØ¿?ÉÔoõˆîTZË£ªZ.ó0sðäÌ8®küçGðÓê±Iù“VþÖõëÇ¿uýú'¥Ö§¥1³÷ᬲvÞQþ…s®2ÞW+ÊÿÊ¢|Ur) @Gø¸®ùÍT1}‰/ìñb±„^½ÐÖúwŽWEL|Oµ†@0Ã<Þ?Ïá¼Gi *c ˆ–FAA[›ß?<|gw0¼±7™|¨¤|à™·™ùÄ3s0sfž3P1s¥„¨h=Ð*"CDVa†C'‰ìÁpè÷Î¥t5…ÙºÐ$»>¿èsXçá©¶V¦¥—™Š€Ì1ç¿` æ>²Î1€1ˆ¶’ò°;Rê½±wZk‹Æ{œ6 úY–±ÂrNê¿8>Æ_~ñŲÊÿ¢|ÿ_¼ùæç»ÃáãY˜ð;-µž-íù,-üèÀ~|‘ç_üY·?±”oŠ÷.¿@à´˜ÂÞÒû‘_lŽª 7(ÿ %^œih¦5Zã@½?¡r™Ÿ»XTk¬Å'ÇGÛÇUùÃýÑèÑø#%åCfÞņ̃ L=ó ÀœBZP‹páÖ ˜µÂxf«„p>0&Û\Ê€.%çRúÚ®ÃÆYïˆ"¢¥—'@€HdBH@H…k)óÌpÒpŸbo?Vù·ÖywGJ}7)~mž,ËE½~{þüþ}œ´í…Ã=I_ÛÞ.ÿøÎOp2oÛyä;œ-´=~cæµsecíÂz_GåOž‰ä„õUÿuPèߨÐ?É¥5) dY˜ bf^õþ¿¬…Öø|6»ðb{YYœ`˜e˜l\ZdÙÒÛ=^2?{¶·µXìíF϶ÃÏò,{à Áœ™ç Z0P¨Á\h „s+CçÃ*"C1Ù‹h ÷¡&KŠ¥:kÆ Ç‚Ç$˜s& ”Ü!ÔÏ9„ûýXÝOí½1[ ¸Vñz¾)ÙË®âóÆ{H"çð`>Çß>|ˆ/"‚ï&CÜõú|÷îÛ[[:óüó2° -Jcæ ÛO‡1ß*Vû›Žç_…~ÑÆß7Jé»ri @W$VŠâí:.ßïãH‘ÂLÚôË/)éo€¹1(A.®Å™øÄM(¢òX†¾C°¿Õ[ìo÷ûoûƒÃñ`pŸ™™hÆÀ‚™JUˆØþ¢³‘³¦X %,GäSÆâ}ÇÒ@`& Æ`Pz"f¿  ô9Å<@‚Ò÷Œ `o¨Ô¾ +­1»Î;œj A;’âÇׯI]ãž=Ã_?x°„î¾(Ü÷ÞÜÛ›ÿþk¯Ý÷Àt8Ié+c1eeíBÆãºÔg”Õó¿ˆúëçýo‰È¥dİ¿›`Cði ûñõ˜ö´ÞãóÙ Ó¦Áí­- ò|©ô6‚OONÆ·¼ïæÙ‹Åɰ×{6êõïsŠb:¢šD ˜5„0´ÂïGgøž¦°ñ¸šó'Å— vˆ—¿Y‰ú êÐ0TÀµa¦®DÛ•Ö»=0Œux4Ÿ”ž,C_)ؘç{ïñ¤ªð‹“üÕ_œMÙløRâ½Óï·¿÷Úk¯ŒFÓoGù•Öeë\YSµ¥´Õ§;ä“Bÿ.â¥Ìû»ò­06ø6ÈØìb LsørÏÉãÅÏê:|Ë_áWº®`˜®¦©Ö˜B¸½µ…ýáyD#ž7£<‡?;<”‡e¹kkk[©ï~>›Ÿôó|¶;=õD‡Ñ4ˆ E/îèý §zH4„tvQ§ž1F$ã}…àõÏ)ôü}\*µ›j£·˜¹È™a\ñ“Òó&îUdB 5¿˜ÍðÁÑ>J‘× >0Ìsó;7n~goï‹ÚÚŬm•1eʘ²¶¶¬G]‡ŸÆåo¢ò¯*þ:åßÔïÿF*}W¾ …ÖŸá€Ôk|à \~‹OV*þ)ôGçwÖ=ö¯{a‘®(ð‹ÓSÜ?=E_)ÜšL°Óï/ÏFèeYÀ¹÷>àÞ ÷qX–;¯mmí¼6ݵ³³G‹²*òl±ÓëÏYˆc*ļ–Ï”5¤MÅ¿„3(£Èd*Ào÷Ñ1†ž}æ!d`XçBÅŒ<Ö8Y׬Z„!žÇ‹Þú'm "ŸÿœÓç•B} lð½sppü½›7?i­-gm=*|eL^òøÙ€åW›è¹Iñ×ñ ¼Pù¿©Þ¸ä ý›»» À9f'’â3W¹’Ï€@øñd±ÀÓÈwQÅ¿«Ì_FV1HÚç,¬ÅÏ!ìöz¸½½\Êå¶bë˜ý,ƒ÷~IfR(…Ç‹ŒsxZ–“òœ¼¶µ…›ƒÁòhh[kqÒ´VQJž;¾Ê0ÌÔ–‹JKÌEôôEÞ{”±»‘¢”®Â/"ͺg†êÀs=^,ðÁÑž”åYL½bp»ŸsÒ¼až›w޾såÊCf³¶-k—ÊÞX[UÆ”µucL­½oÚÐâëzýM´g«“~›È>K¢üÀ%7I$‘7Î…I@"-„hs•«ìac­ýääD-ŒyNù7){7x™o_ðù¡À/k ž5 Ž?ã¸Râìôûë~ŨøB&btBG ç}qX–8ªkl÷z»7'“ó¯ïØ©sʽzΫʞ~+)|&%¦uYÛâÑb/NOqÜ4/¥ôÝÏ`§ßoß¹zõðÞþþ‰Ÿ¯u®ªƒ§¯këÚÚj©øÎ5sµ œ‡Môúç9W©ÏV}Ö)ÿ¹¯|ëë'@ýÚå[a´sÜÏ2©°ZË\³÷s¦ÏêæÓ¹1o2Ö{þU%æ¹å¹½>™´`ÆÕñ¸À£¢Ðã¢Hë‚çâá|>:*Ëü£gφÇu \l ÒcÝ×ìV›¬søé³g¡2àÖd‚a\ÃíuŠ´÷Ï…®ç`¼_"õ¬AôœrŸ;ÏX“Hà›'q¯¢²ÓºÆaYâ¸i–†ŒñòJŸIé_ßÞž¿{íÚÃÝ~ÿX;WÏÚ6(y0MmLÕZÛ$#Ð:×¶ÖÖÆûÖxß:çÚèõ~×ã¯æúÑŸ=ö_å¾% ²–ûÎyAdZçšœ¹‚3'ðúëÿ׳÷ßÿŸæm»œWø~¿Ý Ú½Á Ý ªãñÜzï<³wÌ·çã´i–NëOLŠBíôûê»YÕ¶ÃϦÓ펎ƫÆ`ÉF»æü“’$Gìã/yŸÌfÏ•ìSuýúxŒ›ãñÚϤØ=¥ÖKåVB`Ú4(µ^‚n¦–¡q§m‹ŸÃ¿^§ðÝ÷³.’zm{{~g{{zggç‰baœ«O›¦n«[k›60ó6Ñ´m¸mÚ@×ß{c™ »W½ýªâ¯ÛíïÚ¬K«üÀ·Äðµi Nkæ… Å\dRªÿö»ßýßúäÉï;ï'²›“ÉìöÎÎÂ3“óž­÷ì¼w§më#Ó®wÑøØYˆSv@§•&ÖŸ”B(%D–IY¼±¿ÿäÞÁA^i=y²XL>;9?Z,úÞ¹sK®¾cž‹=;Ò5 I´1˜ƒÃºÆß?}º±^!ˆp0b¯ßÇ`e%šj#§m‹ge‰iÛ®=‡®ÂwÙvžûpþÿºQÍí¨ôwwwŸH!JZu­Öº‰m»¦1¦ik›àå›6(½ÖIñƒòkËÜú3²Ó„೚ã¿L¡o­òO¾>îÃùV€§‹oõzn»×³ž¹‘D•bÎUPN’BØßº~ý„€ Ï\,´VÎ{á˜ÉxÏÖ¹4?ïãnŒBk1¶dÇdBdJˆ\ ‘gRæ™Ç·¶·‹»»»…"*Ïç;OóÉ£Ù¼ÿx±èçk«WÝ‹Š«a÷:!0¾X,ðà|}àÜs¤ÛužüùçÛü;]ã1Ìssg{{~}2™Þ˜LŽ” “òu­ÛÖ¹&*¶nKÊnZkÛÖ¹&>Þç´qNÛ÷fl(Ú{‘⿈ÍgmÁor‰<’o…Ïìk-‡ùøJyŸP9!…0jÏ<ÐwÞŽ9sÞKë=™PeçxÀzÏŽÙq¸õ¦è<˜=²Qžh¿JJ©ˆ²LÊ,;3E¼_(!òI¯÷lw0Èß»v½PBäGe9~<Ÿo×uÿ¨ªò“º.€³0?Éfå~±lš®Û$/ÓéF,I®ŽFåÞpØÜOwƒÓqQÌ­÷­ J¯K­[ãýÒ›kçÚÖ9ÝZ«Mº7Æ9m¼×Ö9c¼×Ìl,³ffÛ!ëØäí7íòoôLr•ø–€÷ùúx쯇n˜e6“²Í¥”H á)\$uôþ}ç}n½Ï³0Þ ë™ÐwçØróž–Ùs¤Üf YÔ·Bª€{§2¢<“2Sï¯'“A"—á(QÖ˲üÍýýüQ&…È$Qö`6Û®´î•Z÷Ífý™ÖY©õò;ìÖ’|ÕñêEQž›ažë“I9*Šzo0˜ ‡§.ÒhÛp«OÛÖ8ïuRfî]›³[ÓZÛZïvÎXfcœÓÎ{½¾Eõ×Qš¯R›¯Žó¾4õÙeU~à[b’”ÆXë=eR’$¢ˆëïâ‚LÃd£ç™së}f½—Æ9²ÌÂ9G:x|xïáB€9z`:Oàþ %¥”Bˆ<(»Œ)@–"”Ä£Aés%D&¢PDÙV¯÷tw0P‚H½wíZ@BÎÛv0kš^©uoѶ9‰G³Y?%°ÇuÝ3Î]Dr¡dRºÝ~¿I?ßœL*fö£^¯çy=)ŠzÒëU>xaã™­c¶Î{•ÝZïcÖÆ9k½7Ö{c‚bkë½ÕQáµs6«­ÕÖ{cœ3°Ö9ãs|× õ“rwCünqoâ¯æùkóý_ö3û¦È·Åð£ùÜ_©§”ë+e„4k[BXId™¹ñÌ…cÎ]ðþÊy/³´Î‘ ŠO.¢Û23;Às¬Y‘B "é)"%„¹”*"Ë„È"n®ˆr%e¦ˆ ~΄¹êx)„ŠÆ@I"%‰II$„j»ß»ƒAb’ï]¿.QØà#Š8eñþ¹‡ÖdÜQŽi§÷nm,€ZøYÛZÏìÜ™ò;ç}ºom¼¯36þlBoâ­‹žÞçŒc6Ö{ë¼w6¹ÚXl]ÍãWÃû— õ7¢ùßüŸ—•o‹>,K¿Ýë‰iÓØHóÍ’ÈS˜ ƒ"q§=æÿÒy/Ç,"‹/y>Xw/¢s^ĤŠ@–B m­3“DJECÓ€¤ð¹Œ‚ ZIñ3)„шP`”)ƤB„‘]!ˆ…M>Qã#àsXåûJG`iºû¾ÓíÞ: ÃRéƒ;ëœuÌÖDÃ#k:÷}øë¼wžËD¥ï*ôª‚¯+êu•~S‘oùþ°b¿-Ê|» `Ú4iÐàB)/pËáBS>•_â<ìU7Í^ÍŸó&±_NÞ9˜ ŒR !k…$’™”Á£GOAe2D á±D ## ¢•<¼Ñ哈F µ&£ X~Ô9W¬ÜçÔX€®ãý9µ@]g"µF£ç÷Ö{#Ÿ;Þú®1ðÌ>†÷..kù¥_wlªæoÊñ_¸ÇÿmRü$—Þ¬²ÅÛåÖ[kmÚ‹OG÷K «üÀùa½ /ªŽxf¡#Â0¡„ ÈdÈ\Ê\R$…B©ŽˆÊ.e  ž?¶ åèÒû“è¤Ë:ûq]{Ÿ€™‘f|0”H³±ÊÑû³‹‘€õÞÇ6©³ÌÎyï¬sÎ>R¹X4qÖ{Û§IéW׵ݚŸ×Ý¿[×Ïßîÿÿí]í²£ =†öý_wçv!ûÐ4MÛN¯]93ŽT>Ë9 ÑZàœäN õ –wª’QF A}Ž`·êô@nT<Œå'èÂ-§/èO&~@×® ÐuY.åU\×r›1 @”—aÉw6Šõ€âè¾ypk:•¾«˜—bv"¦ȤO)q&wâìp,$/"‘¢X.Â×§î´›n_[w™–mLâïÀ™ B{:¯NÂõx¸·üV[ÍI&ê>ˆ€:%æ¼1ÜʱŸ*Ħ* ´,ˆÌt! (¿?¸…Ä "¢Èýf^Ç‘³ìk“Ê”Png[´³zq[àoJq8¦Ä©®”ã",È®ÝrIzId˪[ëy+°7×ùƒ8›è/]NŽ:q÷àY~ÝfKd}Ý®-9èXEÐMÔ)Vž-ÿ–Þ^âY]?è LÄ:ëSŽÈVgyÝ#“Üò†’‘Ö¤FºEv/šß%>0É/q Ðÿ€ûIQSg±¯øÖ_¶ãí%t A €Þ[‚ðà5¤lÕ 9и¦o⥅lXŒñxãÕ‚j¿åX®|ÏÊ{K°IüœB$Ñõ1)U*<©Ÿu{­» ž Œì½ ØMeD<¨i9~)I=Єï‘Ý«¯“ø œFœ»5½é–å—u­ö,hÒiéž Xy#ä÷ú0 o¼š€ÞÖrÛ[eZ›î€IúQ,üü¸qç?ÝZ…-‹¸×2Ž^HK`Z„%u¼Eöñ-Ò¿º]xq/FÚ;g«‡Å¸wFú“~´ÁW.ž'2퉄GòVÞ9÷¢ïõ€¾PÀHëóé>}ŽÀ½Ó,ô•×DØûÍìµþ²ŽŽIX¤ÕÄöŽ÷DÅêË3€ðÛ"u«Žnß:çÄ 8«h|j2yÂãÅ$ýÙüKuIDATd‹°=Ò[åõ±gÑ‹ôˆí•ÕyÖ9'Þ„)¿‹QAy²ì^¢{ÄæN€w|0ìm{â͘p,XÞ…ú¹Ð|…ì£è¹æ£DÍŸx3¦)'U™Oc„Ä“èÁ€ïEDž@|“à_‚wî,¥XƒIEND®B`‚( @     "&&%@@''M%.CG+G=\$$Hx''MŒ))Q”**R’))QŽ&&Kƒ!!Bt0a F*@@(>®!"EÌ%%JÈ#$IÐ:é $õüÿÿÿ ó)é<Ð&'Mž3w L!??~Pÿ ÿ ÿ ÿÿGò+,]Ð67o•>>zm<>{0Iàÿÿ%%I¥%@@!..hÅ(ÿDé6€/((P??}K34q˜::t{&'Vµ8Ç##EJ 00`88n^:òÿÿ%%J @@ @@UQó%ø--Z£%g @!7$$HQ00_‡/äC¦""D-!!A--Z>&&UÌ!ÿÿ#û%%Iˆ@@88x˜Jû 1ñ##MÇ,,Wž,,WEÊ 2î9Ú//^M/2))QU''UÃ"ý ÿ ÿ;ñ##Ed @@@@&::yƒ"#[è,ÿ#ÿ'ÿB÷''\¶33eP##E1""CM,,WEé$ý!ÿ"ÿ ÿ!!MÉ!!@5@@@@@@>==|u66w£::w}88oZ..[M((Od((R Hä'û ÿ"ÿ(ÿ)ÿ 5ô--Zg8@@66k **S"%%HC((Or&&RµAï$ý!ÿ$ÿ'ÿ4ÿ ?ÿGö./b‰,,X''M ((P4,,W|""NÏ7ô ÿ#ÿ'ÿ+ÿ <ÿGÿRÿ&&bë22gz33e @22c 00`I##RÆ+ú#ÿ'ÿ*ÿ,ÿ ?ÿPÿ^ÿ&&dê33mš::sB==x@@@@55iFOÚ)ÿ*ÿ,ÿ9ÿMÿZÿaø))gÞ77r…;;v?;;u$ ==y(""VÇ,ÿ/ÿ=ÿ FÿPÿ&&eë00n·;;v`>>z.@@@@77l##E3=& @@<>{@@@@ XhDÃ""Hžf!@@--k¨Sÿ<ÿ4ÿ""\é33ej88o@@@@@@\2ÿ 4ø ?¥ E @@..o²[ÿ?ÿIó))Q4@@~`Pÿ/ÿFá(^@@//p«Wÿ6ÿ!!Sã2a@@==xjRÿ3ÿKì4i@@ 66vƒXÿ4ÿ Râ*s 11b..g¨;ÿ4ÿNì7f@@@@<))qæ@ÿEï @œP  ;%00_wHñ6ÿ3ÿMê7\ @@==~w!!pû:ÿQâ""D‘#b ? .-<##F^**Y¡Lï>ÿ>ÿ7ÿ""VÒ5G@@@@#88~™""mó=ÿJì""RÇ,,X›,,X—$$U¼Pä<ü Qÿ##vÿ""tÿ Lÿ Xª!!B(@@@@@@U22|ÄeïDÿ?ÿ?ÿKÿbø""kì..qÄ<´n- @@!((WÆ6ÿ +ÿÿÿÿ &ü00eÇ88oY<*@@**S%%JF##Er8|#f <@@<<{“&'^ÿÿÿ;ç)y@@!%%RË7ÿ .ÿÿ4ò((Po2;;u,-[t<á %ö)õ?×/ŽD@@@@@34qçKÿÿ ú ?Ÿ2@@+%%TÚ;ÿÿÿ##KË4:@@<78|ä45|ÿ./pÿ$%Zõ::t²)*_ä +ñ""Dw@@-.a§=ÿÿÿ?í5i@@88tŠTÿ$ÿ *÷=—*@@@@>;;}’99{£<>-.pûÿ@ì8› W*'$''NX((VÃÿGÇ$$G8//\11bTGæÿÿÿÿ !IÒ2@@@@@089}ÊWÿÿAë''M­73w8o""C{,,VAä$ü:è00_[%%J##E..[ZJßÿÿÿÿÿ''O¥#%@@ @@>9:€Ì"#_ÿ ÿü6ðBëCë2ò ü.ÿ&&]â44g^00_ !!A0--YxDéÿÿÿÿ ÿ5ô&&Ks@@ @@1=>66|æ#$cÿOÿEÿXÿ#$bÿ()cé..h°88pF88o:4''Mi((T¹ .öÿÿ!ÿ!ÿ!ÿ!ÿFÚ$$G?@@@@@@7@@b:;~¦9:}°::|==yc>>|<>>{!!A .""CE((P}#$MÃ8ñÿÿÿÿ$ÿ*ÿ(ÿ 3õ--Yr""B@@@@@@@@++U 1%""DR++UDß .öÿÿÿ!ÿ$ÿ3ÿ 6ÿ 5ÿ 8ý**\¤((O&:4&&Kf()T§Dê%ûÿÿ ÿ!ÿ%ÿ4ÿGÿMÿAÿ 9ü**]µ..\4''M ?$$GB))P{##NÃ:ñÿÿ!ÿ"ÿ#ÿ'ÿ6ÿIÿOÿLÿTÿ!!^ö**`©44h2++U!!A''L/--YzFÜ 0öÿ ÿ!ÿ!ÿ&ÿ+ÿ <ÿJÿPÿMÿUÿ `ù--kÓ99q`99q @@//\..\H&&U» .ø"ÿ#ÿ$ÿ&ÿ)ÿ,ÿEÿ_ÿ[ÿSÿ`ÿ&&hõ..mÑ::sh;;u+@@ 66k 33dOMÛ%ÿ&ÿ%ÿ'ÿ+ÿ:ÿMÿRÿPÿaÿ**tü))jê44qª;;uX==y(@@ @@77l@PÙ'ÿ(ÿ*ÿ,ÿ;ÿMÿTÿUÿaÿ''jñ..nÑ99u~<>>z@@ <ÿ.ÿJð3x@@;;tGUë9ÿ4ÿ.ÿKé9Z @@@@W,,÷_ÿ2ÿ@ô7”011a11h–;ü:ÿ3ÿ-ÿ!!PÓ1A@@(66Ê##sÿ9ÿ-ý%%KÁ c#*$$G11aw Bô6ÿ7ÿ1ÿ*ÿ%%N®*@@ @@L33„êjÿ1ÿ>ò!!A© e2  !$$GB**Y–Hð7ÿ<ÿ<ÿ5ÿ 7ù##F– @@??‚p55‹ófÿ3ÿ<ó%%N¿6'l K4 .1? @_((Oˆ##SÔ:û:ÿYÿlÿgÿGÿ ?ö$$Hˆ@@@@??‚m88‹æ))~ÿ@ÿ1ü@ðLÜ$$N½''N¤))R§!!NÍNë 9ø6ÿCÿhÿ11‰ü44Šô22Žÿ**ÿ Mü,,X` @@@@@@C==ˆ®66‰ë""tÿUÿ<ÿ2ÿ/ÿ0ÿ9ÿSÿkÿ))ÿ%%sô..tÑ;;us>>{W@@g::…£22v†55j%@@@@@@A>>€x::‡¼77†Û22ç**yð--vä11zÞ00zØ55{´;;{|>>zM??|'@@ @@@@@@@@@@@@ @@@@,@@9@@>@@6@@.@@(@@@@ @@ÿÿÿÿÿÿÿñ€ÿÿÿàÿÿÀÿÿÀÿÿÀÿÿÀàÿÿÀøÿÿ€>ÿÿ€ÿ€@ÿ€€ÿ€€€ÿ€€€ÿ€€€ÿ€@€ÿ€ ÿÀÿÀÿà ÿÿðÿÿøÿÿÿÿÿÿÀÿÿÿÿÿþÿÿü?ÿÿøÿÿÿðÿÿðÿÿà~ÿÿàþÿÿàþÿÿàþÿÿàþÿÿàþÿÿàüÿÿàøÿÿððÿÿðÿÿøÿÿøÿÿüÿÿÿ‡ÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSigil-0.9.9/src/Resource_Files/icon/app_icon_128.png000066400000000000000000000410751321676412500221360ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aËtEXtSoftwareAdobe ImageReadyqÉe<AßIDATxÚì½Y“$YvæK„Çâ±eDäž••™U]k¯Ó3Ó+fz¦ !‘F4’/|‘™Ìh|£ÑL⋞ô&3ýJ¦QfÚŒ&ɰ ‚`ˆ™Ætwuמ{Ff쫇ïÎïópÏòôŠìêº2«j:¬oGfV,î÷|ç;Ë=÷Ñó<á›Ç¯ïCúf ¾À7oðÍã|óøß<~ý‰§ýÿí~ðÍ,ÍñÑGÇ?ÿu£¸Ä¯Éœ‰á¨ RB–EYÅðÌ¢í8^G×ÝÆhä}´µåý7|à}ÃÏ©YƒeUQIIJH¢˜€€È;9+¥tZÆï>ð?Rö|EJ$\¼ÇYÊçWæç®®ÛxiY®ëô ÃNH’³Ýíº¿èEÉ‹q«Û•!ØD*‘P\ÏK—3™ $“Å¿ñYÒü HáYö'„ „®Ox­‰ŸM|މ×x¡Èò¸’Éèø›~cvV_-• €ËüE­f Ãyžqîø(bϦ=RɤPÍå„…bQ(f³B.•’²,´r9©='3úœªªÐÎTHˆb R(Ax%¼½)ðœÇÈe=oYšC†þ;À^€±$Aë‡ø]ÇCøc>ƒ9xÁŸßÇÏý¼(ðºþB.7ðÆ¿sõª>0M¶Ù|œ üw¯¼r Ó¿f¼G€©, >LÛ¼ùùo`ÚC–$A…°Ëª*,ÍÌøÏœH ô¬¤m;M&ó0=‹ÙžƒöÎã÷9høJÎó®AÝÏ+‰®›’=/õ«|ÿÀuû}MÆ¢ØO)JWV”ƒ±,oM€­ a6\×màç&¢[H¥ÿé•+£‘e™mnÚÿìÓOýÏù`mM¼X*Iª$Ik×Fð‰ôÞ(WÓ4 ~‡ó¿Þºå†ß}–Lrîðž õ…LưTwÆc%cÛ©t"A-¯`2ñò ˜Ï î‚ç}+ãyUÉqTqâÜ ºi cËòµn¨ë‚†ßm×=á=S;óé´Urü{WÓ ýñ˜ŒS˜-—WðÙ/ëxm4ꋊRO«êç†,ßP÷‚˜„#\WŸÝû‡¯¿nâï.þ&¤“I¬¤àÛRhŠf‚—ðý–íyþ6°G¿ýÒKÆ¿¾wÏŠzùg„gŽ(üÙ|^¸P. €€Zÿ ÛNÌš&ŸoÏbWðÒu<_ž“¤DqÍ1Œb(ð¡a…=ÆhFBk88»ÖÐÉt 8Åôÿ‚K%ÿZ èŸÓÁçôÆãÀY(ËòåÃáPKf³ªú§ÁvÒuðþ6Þ¯œÀ$á9‰ëÌàóÈVY™ß#Šc ì⽇Nà‹„LàâÓAâYþ (¿{?‚ÖoiZ¶–\/YÆ^ÆÏ×!øW$éšeY)P±Ð„€©¹üv«%ìt»½9Z[;Bð{<ûEáœy?H?kް‡-ö™¨ˆÁŸižöÚm‚!«êúË©Ñ芒Ëí¤2™Oñþ}Z\§…ë”!ø,FÌt1/ËKiI*ëã± 0Y»­Ö½ÙÕÕÿ¯õè|ÂŒ˜Œ6„GŽé¯D…?{¯—Ë"l} v3‡žÃ$­aÜÈAã$é]Á¶‹ÔLj7) êþÑ‘0ÀÏã@Óõ@àœEÄþœH4oæS)KŠ% ÀÉ¡i*CMK;‚àýü,ßÓÄPú}†ÂÕÅEA ;~÷È0”9Ï»¼˜H¬7 càÊòÈ7)’¤È®«"þÌú÷à¸xýÃFCø|_¨ézUÈåþRQÕ6À×F¸©—ëüZ9qáÿ¿ý¾ôZ6«`‚ Ô"´ã*´éõYþ›3®{u Їö'‚¿…É… ž9‹¥\N[œ™é—óùz.“94GÕ` Ë{D ¤{© ª†f§`·³øÜj§ÓYn¹z·›W‚Ï# L0Ã'B>¸æMV _·ÝlÊ` þV*Â|œBŸYB_ƒ¾H ìÔ‚?A†REEdPÐ'‹ëJF4ÿL€pî ÓE¡ÓÞ†š ŸÞ<„sSÅ÷%é' ÓœæéÌ~}Áï‚úGÁ¬éÁ¬-U*½«KK›¢,ïL³V4ºÝ‘eÛºéºøÏµÜGäàá{$_†-N¦d9 _CÍ …Ë•ÊÌ%ÇYi´ZkûGGeÌ@æ àȘ2ÇõÙY_Èt.É U'Ô"úà¦ÂG }–ÚìõükEdaf³Y»>fÀ@)obœˆ/ >m3pî çMŸ6ŸÂoÀægéì‰â2ÆËþ÷áæÿmÇ4Õ6&ZDÚÿ÷÷î LºÑøÙRixóÂ…Ž(n·u½{Ú­÷ƶ­é`hRû!0¢û cÍ´¡$#¤S2Éd× ªŠRÈ+ÊöLµzoavöÂa£qýðèh+…êÙ‚pGâzµêG€,IÇyz:“ü½1wj5áÎiðÞJ6«ãzd\ŸHâçD ;þ‹o(ø @@G®6$rŠ’ƒ<æ1q×á>¿OáÛ>µžZFûùñÎŽÐ 7_·dÙ}s}}?¯ª_´ÇãŒFO×Û>(xˆ Cøc_ó~óïÄ-)`DaÈ8g•B:}PªTvçæÖ¶kµë5!H‰×q¯ÙrÐö—æç?Ð ý \û0€ö¥àï¸w×%ˆr0øqÉà–¤_,€ú©9ŸA ×ÒiÆÈâ2Æë‹¢øûV |Úû;‡‡ÂÀ0pò82™ŒñÚÅ‹› ç/vz½ý¦¦Õ;ºÞ‚ðûºe@Ëc¦pƒ‰µíŠÒì1ð:Ñ…vC%„‰œ».ØNc£dGÅtúp&n,-,V‹ÅW6·¶ÖΤ|pfá—{{Âr±è'¯5´[ˆJš¸+¬L<ó¼çž“ÁŸÏLøÏ üÑp(½¶°ÄD” «´ûyÃø»R¶jj°›·!ü~ ½Pøo_¹òèþÞa¯· óqØ[šeõ!x¦nÇk`D0cÇ´ß‹€ œ| ï%5Ëpø]ØèöÀ4[`”–fÛr&Ó¹yãF}ksóµ^¯—“‚$ʶp­{`3?A‡Õ &[ ¾„£ÙéäfææTÜs#MæH‘Õˤ~¦JåI¼Lê¿’qÝ'-kùö’6íç_‚öOÄH ý×ÖÖvÚ†ñ`0Ø9÷! 64· áð -pŒNÓ~/2áQIôÌñ†DÏ0èG 0ú=0R6¼¿qéÒ`g{ûV«U”"h"ºðdŒPë£^/FS˜€ø5*ÂÝŒ¿Hu’Äišôf©ÄTé „¿ üB½ïÚÐzf̘ջ êïR”ƒY¹¾´Ô³wÿh0دFµ.ìþØq:îDø£úá;‘DK<-Æ™ dlA×`N˜Ãq†0Mu«/òó¿× @Ms{uöb´ÃXa<.¦R©<"l6™TÀ^R€âÓΞ;¨ýâdÉvž©Ý¤®ÿ4›b˜—a…ç¼~+âp%Åž¯TîÂæ×ZšvílÂ'NBŒcÔ?ö§M¬!8LP4óþ21Ì„PÏÀu;kkÌS ¿‚@о1X_pãô Ëùl6úÏreó,éÿÜ@tÿ“wÞIB Ehû²ìy¯È–uAgÖ-Hš4监‹¥$¯@ûûºÞèL¼}ÚüPøÈöŸfóýÇ»§ÄØ?=IÁb$ƒìg•¡ù6BL l`¸vB½$ÂÈ‹««êPÓÞ5Aír”î!ü áºÁ‡ÖƒLeqQÅýfS`F!Ë™ùç €ÿòæM†àYŒYÜéºbßá| Gðœ·^…¾Ð{ž/—w¶»ÝÎвÚ#Ûî".µ~±ýf °öþݯX _óÓ“LîF俀gs)6Ü…'•D"weuuñÎ;פˆ¡é ÚˆdœØ‡K>–å4^šQ8£‚ÝsÀB.Ç2­°Á_³F£eÙ3N´Ÿ+x:Â('â8s9} /žxÏ=Pr/z(øhÈw¼ºöî_!£ö ¸`(&ïÝ6—%¥*J¾šËUª•ÊB½Õ*É‘Ï2Xü\Tü¡iÚŸMpG®Žô´³ÒyÒ?SŸ"«v€¬ë~;—JÉ\»g^)bþlÇŒp%Ÿ×MÇ™GläLPÆ›oÆl¾ð“rSŒÿW|ÿ;'F¢&®Cšæ¦è¾Ë½¹´²rOŒP½ 3âˆç8ÙëED1M3uùzáÀJÜ $X¶5¯ØöÓ¼¾öÃfr-ŸŽ ™pÂ`SuØ| 6X‹„yfŒö½Pø_×5¿s2ltƒï2©Œ»ºÞÅ5×!ì&R©ûÙLFÁ çÎOvq5PŽ}&³?pt œ ØEš°²€øBš€YUád„IÍ^u§^W©ù¬þaâgÄBM;±ÆŸEYf:×d8朞áóõv ù_çãíà³ÿì‘‚û˜Œa–:ïÌ×ÁÜìlÛØÝ]šËç×xC€:w:Ž£(,xëRœþ_Låî¤N¯àÆm$½~?€Æ ˜ûŸò¦B6«ëm‘ÃóÂZÇ<ý·Ÿò*??[·m ÜW³Z*Õ³–µD6 üYO|N$!ÁZAV+Kg%üs3´i…”)Ù$Ì)’«gÌù3÷?ÀD9S.–:¤‰àa8S2{îYÝÇÛ1¿€þ+‡1ºŠªn†šÿeûQfÊóX«xRø/.Ày“½ ¤M]_t‚Z¼cz€? Ær¢,«kZ6™ÏsÓ‡„!Æ„ïÄ[OúŸððAÐÔ4S¤3*ŠC–’?–öž’}ò×}%É;¸þ¥³þ¹:6+c!gŒäÈ0d\žpŽ€Ðû§£¤ÏCMK!fÎÀ±Jg’IVñˆÂ9>ÞŠäv¸I×c‰§T‡38¦ä™ãS3¦•-p&åÊgvOçi²7Oæ¦,nÒˆ‡^¬¤a*8NYAæ /1æ†É`$§i‹w†ãw …cS@ß÷ÆXÖñbá'×5"”<€ã>Íü ~ó„Tõ‹¦;¹þîr ÄW£iSß'0Í„>]Ì+ÊìL:].g2êL&Í¡‹NVÏ…¼ÄdËÿvØôQŸ¿'! ý0Q‘R[J$š¬Xò×à 'ÃÍîdgŒ“Ó´Š™@7Ȇ‹(‰À lïï/Bó/”³ÙåÅ\n¶Ìçr©hüüg—¿çŒX bº>‰›RmËʆÿΜ†”‡ f<0S*ƶÝ8cÖ,:N4}ýÔAp~N ç;—µyša¸,œLÍŸ'"¿‡îöp8ÌtÚíWËårïÁ'ÐÚã± §Ðêã³0ü²?Þ•e:VOméé“mþ`~ÞûCMcm!÷$1”è뺀!<*ö ƒýåju³­ë\×h–¥ §”«½p0¹¦§‡[¤p·º;Å­NŽ`Ô{–‚‹nÖjKiYþr±¨Cë¬t"áp{wÂßëõ¼®®ûŠöSÿÃLÆóé÷)‹V¬jbù×µlVN28Å”ç8ÇŽsCnO‹H”W·\© ˆ¶52MV1±4öSÁ¹™Ðk±D?–òùó¤ìp˜ŠZr?qìããß÷öö.äç7á ¼YÍf_^Èå6`ª×ªUõB±˜ ÍÁŽÇâŸ:Ž˜æÞ¿¯Ù7ÈÎêÿðð¡ˆëF¦tUÁ¶—Â<€¿yEx´Á_¥’ewmaá 0Ã!ëߌ%¶| ½!¤jØn‹‹9éLfŸÎ“@:³‚ü9ØF-G&›ááqV@µÛ²¹ÜžÈçýðLlcÔg³ÙQm8Ôkƒ?™ÿÎ4ÅR)ùu±¯Û ²tF¢Èâ–B!‘XÈ•JÂgÙÈ}›o­­m,ëa{€öزF‘âU'æ¼x&à~»í@[ÇY×@« Ïöû=ØIã×Ôcr½ÀÎrÐ$„Bã~‚l*僥¶¿_v‰ßÝØØ(øùl"±™S”£R:Ý…ƒ¨ýe­æ3ðG†á¿ÿ‡_“YðÃS|·¸³HšÔ7DÛ.À‡ƒïì…ˇ¬e|uiéžÿ§‡Ãá00ŒW6…ÇËמz(xnhŒFîÀ4õ|*Õ³e¹Õsœ^Ç02Ñ¸É òèÌ¡Í× 2AÅ- L´i¹[·nýæë×®­%¥ Ì"Œ¼ŸM&÷r©Tô<Øë÷{­–„?‚YàgÿîÌŒÇu:¡Ö_ ¼& š‹[‰ÉÞÅ6Œê݃ƒ™[Ð~]xTšÄR¶7××ïØ¢xÀØÁìCûx?ÓÇáÊf¼åÅd>pó&âø>h»1_­~qpt´ ž“¶CÍg~€0&3}³Áh_î7›×TU]L©êÏ”dòçŠ$ÝÅçoå’É#„ŽõRi¸?·êuîÿÙéˆiÉc˜ö×B؆@u,ÓôkÃ2%Y–—ææZ‹•Êg}ÓÜ­‡5ÿ°kG,g³&Ma=ƒ€ð"€laP½ËÝÂøN{8Ìɱl^˜á¡¦I65ŸÅ"<ÞᅥÀàR2AqX«±Èä‡++7Õ|þ’Žsïyb&£ÓÐYÎçGàŸïíYÿš>~¿Zõ€þWهװóù<%äÞÃ^ÏÒiýJ¥R[›}§÷¨®iͦ¦µ[`¿^× bc´„=ZÉä½çð¦þÅGy d»˜N ø;«++·{·o[ŒÂaÌLgkØm¦U}Ÿ£IÈ&vÀàÉFcIl·ÿÖüÜܶ’Éü‰%I÷`vh¸Û§’ÍvæUUƒ0Œ£áÐú¼Ñpÿ·fÓ7 !+< Í´ÚÃgp [Étú/Þ~ýõÿ×[Æ¿§šã±ÝGþáhhš#î1p&%ìÀ(¢E¬g¶¢y®&“á´Y“Jµ€ÝB¡ðÀך`0ù/Šs­c¥-#5bè§¿`Y–Òkµ^J§R¹D›Ìfÿ=´tïÝI»îA&‘h"šh#ŒÔ.•ËÚÁ``ýüàÀ Yáï,,xa­Â40„GÎ|>xp6M¬‡ÏÞ…3¨ˆyh¹Â$PG×y¢˜©MÊÊÍ`×’6Eû³Òþs7`”Ìl^ ÷ðò¥KÞúì³<Ç‘£¥Õ^$#(Η_@˜=8ˆÂài,+wv0&ÀPr†q5=­§r¹íT:ý±)Ë>#5'™¤3ÖF(7X+•FÌ,’þ—ÃÃcmüƒ)¬à³R`>«×M8›ÃĤNAÓ‡Q$üúF×eú;Œ áÑÆ•Ç„ÿkÁB°„ &Ð@Ë  ”Jý⥥¥Ëvw/ŠÂã›å£+HÿZ |Ž’ ˆ06gâ‡@ ¹ X¸ásÞó^ªJÒÆ£ 5a"ZxOoNUG x#`…cRú{`ñËn7~‰ÑßC̺‘¿ÅïžµðÏ#豼݂/h`æ6™I»¼±‘ƒÓô»ÚxœŽnºŒ:†Â6 ˜`–‚I™Ãhü43ëó’!d<Î/äó×ç‰+µñ¸?áV2™¼…÷ìH5ó¯': ¹Üh}fFãy€d…ÿ9`…XàÝÿDôïNì¶Îü´Ñgü €fÐþ>FMœT gÞ¼zUýù;ÑÚ¯pɨW¸ìûAq)Í@G‘@ +ø;…)f0a…‡Í¦ ‡­ à|?—ɼ“H§÷³ªúsK–$]wŽê€PW“É—p£¬€"^2~Ú9?Ñ?7Á?ˆ²' ¾€ÎS7!Œ=ßvf2‰7®\îïí½ÐjOÛi+'7ø\Ëì`pV #!<°&ÂX>Cø÷ÐWv»Êl.·^–åõºa4“™Ìý¤¢|œð¼]˜‰}‰gû5È ˆ †ŠÅ1ZëV½îÄ4]œÂ'ò\çyÆð³rLœ¯)b¶Ãáp­lar¹7_‚Wî]¹xQdùÃíz½œˆhtÖâl0 =8l‚l@ñׂ53íB_Î$×"¶Ûm!`…*Xá[dø ?·%é®q—~K:‘8Ë´ÎöAÀtY`g«ÛuOËç¿üí÷?øà\'þÜÀ‰øìQˆï@û¬úhÄÓ=‚a¹µ±±´4.çrïÞÞÞÞ°‚CšN[œqcžWMBÚ&€Ð­d2¾y€²#æAx'X´žb‘ÊóÈQÛhc‚DfÍ`Ç=î«7ÇæZy1›½óÊ+7>ÙÜ|³ËrÚê~xB¨ <ÚU,G¢8~~,ß?…Â3ýâ„|’¾¯f³ßB±›Éf&˜0®=tÁjÃ|*¥‡@øÓ`5ò»Šâé–õ (õ›xºuÒ´ÛþnÚIѨ‡Ëx8ƒÆI}y}½>Ò´W¹µuÉ0Í„,<¾…Ö‹eØ+n ¡÷V˜Aç:<€p#§i—™Ì^:›ýBÚÛŠ$mâõ{øÜ#€«Ý7Œ!û„‹P?3M»?Ηž™ÓÂoàÇÏÉËPëÛã1“.4 6ìø>AŸ‹(ÅTªñþ÷ºÝWï,š‚4%ÞŠ¯.†Yé¡EX €}÷}ÐW0"¾‚M0õzJVÓ6ʺ~ÑS”Ôªþ﹕ÅÀ.Ø¥†ÏêÂiäj¤©œÅÐÏ‹ ˜ ?ßS­s³›,œ¦RÃQ:ݵÖóÙl @Xn÷û×öÚí¹F·«ÆÏb©d7›É1V0 „¬DÔ~'8j>d…0”äkɽžŒïXÎöû³P(¼Vøãü€á>^»ÀÁ”ôá+è÷Z-;Á¹EÏ\¿€ëøÓS@{ÌeZ¡› ³†.gÁaAQöá…ïÞX]]ð–—Wwõ­V^ }ž‡ÅMD<Ÿ ‹NÃ(ADY;7¨bâc ëòÈ0VDYþ/–æænfÒéÖøf€@`Ùæ‚ÑfÓ #Úó`ƒg²cÈÇÕpœ s &(Ê‚épiUfÕdr{ynîîÚü<{Þ¸sp0kÄ̃ œ¬3ˆFÓr:“,NE!\ª¶-Ké´Z¯åTõb"—ûÿðž¯âõ[øž:üí³zÝ#Û³Áù3À)nü5üÓmïDÈâœúÆ(‘кºÞgžWÆã3Ã,ÆN.›}øÞõë󃱶±U¯/õzª@|¦íÈ¿ÇÍƒÏ .À ƒ,ó¹àLƒÉÅz'–L&ݱ…ýÚAÉtÝß»¶¶¾M§¹ÜÂË’0)‡/ÏÍ üû;K<Ó]î‰>DáñãÝBÖf´`®w¼Ç²¿Ñ|¿¾Î" ‡9"î¦M$:`†:´³f¨UaevîîúÜürk8ظ ó¼Xô]΋ú â”èBβ³H„¸¾©„5Üoï:ñ43Sñ;}¯óØ[ >ž)žY0áMö'óª¢xŒÁÿÕþAÜs¢ &ëëI“{ìȦÙëFlÐÀç„r„\&ûð7®MÌÃf`¤'˜7–\’c@`âˆBÌ#ÓÉѺÅèãÞÞÞ•Kžð;3¥’î AÀÍ2ðmX#n"ò^ø“BOüL6+, +m™¡óäùyûÏÿÃ_„¾x >K»®~ í ÝD¢˜‡RÔ<Ü€y¸ó°ó° óàæáÔS½„“'EÁà‰…¢a¿Àiý}ù¾­ÚÁKj&ó}0ÇØL¥ô2|°KÇÜS–<^\_¸»4‰ôOÉå}æ=ÿôÝweö߃íL°ý+´N‚‰ÜÊ%à†¦±2ÇbÍ!´ qƒ£]w<ž˜‡ÌC{šy¸ó°˜‡/N‰Ü)À˜YA‘ ¯ß?ìbÊ–4šƒÛÛ[ß~õ¥+ €r€ûU³Y愵’áf"š‚§–#x&€T9—Ë +Å¢¯ù¡àm5'î öVl›çêsÛW*Åm×)îÃv%‘%ÙxŸaÛk33h×d&m9¹ÔlvP²ÁJàþ—™‡ïæá!ÌC=b„ ¢gÉ:1³à'‹‚õ„i 0'ÕÍÊÇüàË/ÕóŽÓÕÒéQ1Ö™ýdìi›‚s·„ÏçóÂz¹ìƒÀ¯ç _0M¶TE¬\z ”!ü™àlÁf#O+ɬFÆ~¿owA³ðÞ¿’y¸ ópæa3=Äއ(rÔàµéã(è„KÐõn·PïtÞ/æóM±Ã]LôðšÇÎ?zá°á¯±5,4Ÿ+r,;Q>š/óaLⓆ°A¸Žq ÁA.)~³H@ÇdötÖÓÑ2©t=£({¶$mPL2Iºç>€öb.×9F{½ž è̃þ$ó°:1+m˜‡Ïª4‰)ëÓØ@ˆ0Iùû#ïákîìî\~çúë𹃠`ÔÈ^8OƒÎÿ¸x¿¢ªB!Ñ‘ß$2ÃÍ•3˜´ELÖ&g#%˯dé×4«Þ¤½Šo_‡‡MÇ«¥iþ! 4¥râbÉK|5ºÞIg²·”dò3–€g‰]¼¦VÍdZ;ýþ¾‚Í’.Ê+b¦FxÞÅåmýðÆÍÅÃnçúç»»sa©Ó*•ŽŸ&¦ü;€˜Üª½ua~a3«(ÓÜcVM Oñ¬€s…ÿÐvä%]÷»…ñØX¿I¤(^S$ñ­Yþž`Ûs87”úyyÆÕŒ»™„­ûGÊû˵`öë¡F'ZêëúlêB2™|_UÕûà¿ß ¶Š”R©6ÛÃ<÷×—Dø¬}˜¦…bV­}ÿÆÍõ{G‡×á' ­[ŒÆªaáª9¶&þ¸W¯Ï_^^¹ØáÎf|_? Ãp^8lBø«ÅbJ¦]ÍS𰓯æá÷ÇÙà9ý¾¯Ý›í¶°Ûí Väì èZ‰ûð #ìÏCŸ‚ €OÊÆÍ\Z[Of2çÒ™ á Nè&|ð°ÓaÍAØ`‚@x,z@¤Ñê# „¨G—‹¥W>ÙÞZÃ,Äù‹.8…Žá©ÇƒMö7J…‚ kqçTL?ì V½Ÿ7áKÒ &ç"„3)ŠïVeé'š®» ÷=ü~«%l½€C´½ÓÒòÛo‰h\«Çû•ÀÜLYhâ{/_X]Íærÿ7I|¯Â:\GçA»m@àÑíÑä’†Ï ììqW/ž›ð=ZpÚÚï]»~ôñööëG½®/P‰&–¤H:Ù›’xP?Z|·\^(çÊC—'‡˜‘œ€óB0À¿ÝÚ’ÞX\d‡ŒaBù¯e$ñ·áâÿH7Í(Ù?,ú><îlB…»pG¥l¶ }˜GøºÏj†¡–•ïhZv§Ó)@+“\p"pîw:>8VJ%a¯Ù¸ê÷ÿ`~vöÿ‚½e$!MέºÛí±6É0&B €Æ`Š…ã7šÉdºo®¯wv[Í·àÌFÍ€0%‰$Nqíùw„ªi8˜kð{î``¦Ò`Mx´‰D|@|e~> .`â/¯@øÿ\þß‚í•Ùrí!´ö“££Ièàv«¹œ¶Q­¶×*•{ÐÄ.0d?àâý–®;<|’7ÔlV)çóêåå<„³°Ój®=l4K†e&9Éì,N6°ÇãüA¿÷“7.]fÃJ‘gô±u ªöv·«G¬Ë‰,c¸îÀ#]ÀÜé;´\—»}GËåÊ8%'ÞûÅÖæ’ œ^Ï0z4z½õJ©T…ðgà´ò„ÜAðÝÒ× ‚s@Ð!TÅ],H’t ´ÿ^(|Úxö¼ÝlN6Îyþ î»ëë{³…ÂíB4˜ƒ6;‚"œÒàðmïº6,@„ÝW0q)ØQvâ*¬TªŸ_[\šÛmµ^¾s°¿@Vx6àÍÞg>~pÿw^Û¸dƒI Øuc`Ì…¡^Q8ÙÞb3OöB$`°A%^hTŠEë[kkßûÅÖÖÊ´“Ÿ§‚Ý÷xÐí”+žrRr¸§¶=9tRúºÁÄyØýù\. e­ú]ÂDñ­²$þdxŠðó™Œþ›×®}'ì!´²§ˆŽmð Ànc¿8wÝŠ¢Ë¤²,ÁaS ügªPL¥*3ùüþo½úÚêÇ;;oÂÖV|ÊåæN]ÏxÛ[?~sãRÛ„9ë<<ï³qÑý{'€6b°Ï öëO«Å’÷íõõ~±¹¹,L ãì‚ ó—…™+)“¡Ð)Q‰ðºŠž9Ø'7UíûÁ=Óø]ð›ÚD8Lø""üB&cü7þâh4zˆIÙohZÓïÌaY,ì>ÖΔªôV' È ,,– 㨚Ͷ^^Yé—ÕìÛÎJEì´Z˜Aám¼§&lÑl\t)À/I3ˆø\¶ãàq±³Å’|}qéG·kÕèÊŽ“ä´b‡F¿¿šL$ )@–•ÑãDž?@í_)ü.aþK²ëþȳ¬¥ƒ 7à-Ø|;ðð3ŠbýèêÕO)ü½~ûp8A§5…œLjиë82„¨€AØÒ¥àøE—fÊ&Âï,ä`~ÎÛ•å™ò ÐnûÿÀ£ÀŒîêõbr;Ø„ÂwqoMý‘ÅÅt}Ðÿ­&´ZNzá|ô Çýõqy¦PÌ'' Nö¿.œ)–òy:á~@ÜÉUÁ4¾ËIàfÎÛõúñLóÎÞߨ8€Ð¶jÃáAm"|nÈìƒê£}¿ìXµãy†c—p ƒü¶}„?òtQa©RM´;…Ã^· L–rå{‡µ·ÖçnCøû`޶ w­;v¾VEÁÛñ¦úqì æÐZ™š á©o½t¥òÿ|òË÷Ȩú²ÂxšÀü”LU’r2›IIRJx¼:íkyœÙI¡ ûpÕì‹WöÃ>ÛþŸb’‡·m _…êÏ¥Ó›­ñ¸ÓÐèÁîs7.„ÏqýÈÏØ ÏÙ ûj‘ßùoþy<ŒÝfÕÁ*»0%@Û÷_][óK¹ë‡Ï[­ÖÙ…~ëÔy݆±‹ï¸'õÖËKËGÓ(ŸådRìƒ8Z𖆢°\619wø©4’:3¸R©°9Džn(rC°­+a‰õ®aœpkêõÙ²7qøº ý~Ð#ö8¦ýþœ–3aµTâ‘­Œ2¤`zÏìÇK55ÍÀ™bÕ>7Íãæó¹Üý…bé*XÀß}ŒW†¾Â5ÉfŽpÀ¬I"&ÜO→_ @°ç=&Wž L‚éã Ø¤¼¾°ð³{G‡¿­íæyßÌRæóãÄBCl!Iiž;Ìæ(±•æçË ä*ÖõÝï2ãÇöh ¢ã¼Cí§ÝÏð #v\¨æTžÜcÖ £;ÕæhgÐãC>X_/ÍÌ$áíg0iyØâ@£"¶Obˆ “SB3uøÜs؇9hã:³Å°5¹ÙÞ¾8«ª>ýs!«´Æ‹ ðûUø¤Ì%¥çÊð{ɸb®å/‰¶µ¡ÚM OgZí^Ïo×nNŽPž¦=PÑ׺üæ›2ây¿!~ŸÃ„-âyc3ÇBÚdÖ´¡-h]‹ß  ð\ùÁ…™™¾hYËŸÔjÁŠ­ÈŽ¦I<î}O} ˆžh#¶5M+(Jg¬ª‡àî…rå s<^Ùïve.fùIx8öiö×ÁVrÂɶòÏþ!zÁ<ógáA½^!tY¦Mèøʰÿ&C²Œ‹}¡ýãˆÃ?TÉû¯¿.CÃH•n» ›ù*T÷CÉ–\oÒ„²1÷R©ÔøÎ?Ãk ¸²…””~§coÎóWð™dz8î|‰ô²ø¸öñoûÞ‰:Enl¥ÉiÈ5O·º–Õkéz9jh¬Iǰ9~§7i¯'Æèÿùò0‘\%#*–e¾ Y&ý‡Â.tÃî:æÙ€“ƒªü›ë|I·Ó¸w 8xä8<úf^Uû–ª6 äC„™Z§SžÏåŽ7“°||k(|‡/xéñkøÚÒYØ ]OÑ–\oµgÍßD„€ÓVÅO‹l¾4ý4-7d¼PeÅ^{#'‰Æÿ7@¯ :}¤×°¨T„ºupPþÙƒûÜú>ÌÁ+ÐÀ Ñuóa{>‹Ežd“ŠÞ_iò—Ä“eë"zÀTkifæák‹‹~½B.({6ÇŠ?¼I;½Ó2ÊÏGˆ‰TXȉ+Î-+Ç •U8B<Ð1<> J¿ç’ü‚˜€yÛ²J?ÛÛL¼¶˜Éè 6pân#æú§*ûWì!䃀GÑò a6”Ä57@€fè²’i˜ÀÇFÐKÑ{ÔJîkï„u6aàÄø]B»Ú(¥CHù`÷L¼a$¼_W 4v߀bja$É„4qü–t]›¡=MFú Pðr°Cçh0ðsÿü·¾¾¦/äÔ™ìoߘ=îÄâ—Q ó!ð‘(|îyôÛkÅVŸ¿Õ@o’P‘ã§¶Ž AЊksó9hq‘‚ðXŸ·"«Áœ("åôûÇñuÔ´ˆ‡'ôbdÀÂVÐ¤š¯½±¸¸À4{†Ñïë:k ,áñS=¿ÚÄ›C£¿Ë“~‚r÷t}nίl6ƒ¯"­s'‹a)îh¢ï@óaOY4üZÀp&N 3‰cc;烤O*uÒcbAÄ`ÀæOE+¯‚ÒöâÉh)ob’ú ]g|íÇÓvP4jG֊ú®X⓽ à0èåÇlP5—/‹ŸvÆã†¿ä 'Ð}Ôžþ |•F’ÌñW²þ °†S¤¦YüšéjšB­§ðÃV8nl‰ÎèØbé™ã„Í$ŸJ;Ù3c×wi=7~aøå8P6MÅAS”|&‘PàÜÅÓ tøl°DZÕ¸<7÷Ëýn÷®ðxýq­þ”©ãßYqôÆ… Ÿ54m^y ðÀXú+Ùÿ°¯/,$pß_řަåÍ`'1Y€uÑ"$ŽB:Ýe±‹1é&j Ó·< €›d£P2›™J&5Þ4½õ&ÀÑľŸÈ•G½ÞL`,PKd¹°Y‘óÀæ`!&òp¡Xú)@ppÚŠiñS(ü^¾|ÇpÝ»¸žC˜„ËͬI?+¶àä~UúW‚H„É*ÄúŒjXÚU•<÷æ¥rù8Ò WA#êM¡¬ª5eo`" Sx¼ þùí3Q"¶v »ðÊë ŠÂã½6[Í„?ËíY9²@<'¿ÝëÙ°CLâ!€p÷Õ‹ÿû…r¥õ¤ Y ÿ—/߃to’w£Ñ¢›Ž„“¼œ_eâÕ€þ¹Kéb©$q žÝÏ Ž³Ää3ÜëFRÀa¹{5—çæÐ‹MáØ²äÍŽÛ×¶K謀͔˜ÖLKƒ“uÜò…‰ Ðˆn»æj´p “¹0“ÉTgU5¯²|;², y‘ÏŸ˜¶Z}öµµumaaW„pã'L àíIÍùáK/}Šëøäp0xXŸ´pcÑÉ hç]{86³â—ûÜéì ‘Æ¿¼{ɬ$ç¼óòƒFcöËÞ‚3v¡ qïr©Pè0 Æ,}ƒòÄ2¡Ï—À­Î\ØÁeS ›DÍÏb’Ÿ£Ù°P{±½}éíûz:ÍØ¼ÁŠ )ؽãÏÙ!÷ì¸.©ò# 0¹—gç4Œ«ÛíÖ+Ý^Uwv]™Ëåt†W ×ÖB¡p·=8 ýxÿuDm.+†p²‹§÷U¨NUY“à‡š\¨*¦ÓÌ€VaûWd×ù65Bçý%ÇArË].•m\Oߘø"vÌ =_û@ÏV-ˆ`°Rš9ôlû’´ˆ…P…DÐáà t6¼»ƒ^7‡éUPh Ó€ðYdÔƒ°- ;…“]˜µc¥°œ7M‘ƒß‚f®P¼¿Tš©ðX6šV¦uyú(+Š1ùöìíézs͇×߉j§ª(|iNŽž?·¸“¾ ¥7—J ^ÏcáVòËŽi,1ñÃ48ûr_cô¯ÌÍõ0_Mß/~4”¶c&àù´Ïf›X+‘è—TõîV£þ6„(û•0<š“⟧c'ÞG®ÿlwçÒ÷®^»jáµ, cËOàqX†‰²1ÆÐô®ªëì"®Ãì¤&¨XƒÀí`)“ãå¸DËí }mÒ´™;ò²°Þ0jÿŸ¨qôø«<+|˜ççB‹RÄÉÖöËžmýвísÿô¸f&Á„ˆó·V©<`9YÒO8êŒÆMÀsSìᆜ‹Åâ7Þƒšˆ×m]/…kâô åÇf@œL†ïICC¥?Û|ø÷.¿ÔÄ#n¾`rŽ[”m„Ú“˜Bx§k„Ïh1ôÂ÷dð…ÇÈÐi,AO§™„C?Mû¿Lø‹Á9¼#©$JÉ$A7Í¿”Å×K©ÔjvŸ‰(¦Áúŵÿ*´àÜÇ=7îxâŒF—ÁçÒ°›—D1Ù@c¹4S;ê÷K¤B7Xc¾žšA­à„úûÿ A|Ÿ¿u°ÿÁõ…Å«‚)8~¬5äv­6—SR®”Ëc߀VÛ Xîõz†prçlTÀIáQY—K::±dáÔÄOeŠö'‚C­èô!Ôóéÿ0ØêŽ—ñï!üWöý–iYefáúgü»ímÁŽIòíÕUVoƒHÿúÉhÄúUÌѳ·?`Þ4‡<Ò1ýNNn¶®ˆqe0lÞÔдcÁ3YBÚdð~û°¶6›Ï¿‰4A­n2‘ðØp¶~JÕ…G»«BÓöç“cI$Wxüx¹xÁ‰?Ñå˜ã žŽÞJpŒ?0­ã­îÁ¯¦$ñ7óròF×uü²4ø-ÂG››zñ]ȵ¹¹~JQnï÷ûû,[[vÉæcŠ/â=W& h %ôûö…Ba„ k[ÉdýÆâÒæn§S^ˆ”FÉA}€¡W2B4¡ó§î¿òî¥K<lR4"Š2° ¯  d¼5€ œÜ™íÆÆ‰ .G4?.ø™LÆ·÷¼¾še'ÖJ%Ö%ú{ðü®ë{Au’f;ï¶ZtF„ÏÐôÚüüÇÇ.ÂQ&´Z&w?MÚÉëÂSn'V àOjSÓŒ¥|~t·«¹Üö‹‹oê¶}â… 9Ù,çR¸¢_Xr]ù§¼öêòJq¾Tbñ—ŒÓÀ»‚w`[î4›–prk·8%#_*¢‚Îl^v›ËË3ÁÙ…¡àSjNjÇÉJ&ÉÎ,J]Ãó+Ðü¿¡Šâ;>KÓ˜îý¸Vó“>ÑM†¥LÆ|ëâÅOa÷·˜ˆêÃùƒçß…Ýû`?-û¦>€oF#žÃî`täúJ2ɲ«Lóû—.}3HÇo@ªQû!üprïC´|´ÕÞs¯?9•ÍrxæÃXž4Yž¶rè'ˆÆ;Р ¢þ¾×n-³Ùß+г~ZZ°¶ ¡GsÙl‡E˜\3ìÓÃ÷ýã—oza’ìCzN;t¢­f}œcê6_(úï!žç*%œÑ²Ì}¬H†Ã——åÿDñÜuÆøõÀÓÿ£‡'ô&káÿ%„ïh0ØnŽF5¦ö뺓PÚÓöþÏÑ‘Ð0yу_¢wuLZ¼!¡m‚]õ)˜Â"=lÛ~tTÔöö~üáKW®ä2™?¶dyZ¹e¹î˜ “Ó½^­r]Ý€`Ì?9ª{Ÿ7¾6ý£×½0ÏðÌ ª”Žk E‘‡YàóäT:£ :a ãûÍ7€tÂOËÒ÷TQzM·Lu€kÚîvæûo5oß ÔÏ•Êà[ËËã>¹ãy§É5Ólè–Õ‰ªíN ¥meÙ¯#ÆN¹ ðᇓ=\‰%%,)`]_x€4ó„"ïuÚ—‹zva&§ÞË&6Þ¶=oï9rÅ׬A]©TŒ÷WW-irvš›XvËåY|]J’dîÆ¿±å{&†+U¼"ÇT<ÓÖ/ârVÒ’ôFF’^v{Nwm®NúU¾Ÿ µùœe÷Û++‡óùü§ûpøhóáù´á·ÜÉÆ×x&ò©·“?#b\Qn_»é$E…3ÔQ·3òÆ:>l@V ¹èw;¹ÞX{{9ŸÉä³ê_ð¤|æ×ñ˜‚wMó#N 4ÃøÚ#ͳ]pÝ$­pOó3òd¡€ßKx=Ï5XËJÒ«pù—MÛ.XÖDðÜãG/×åF<ÂÄÓ¿µºz¬´‰HeZϺƒ#„{í€ö¹1øŽç™´Á‡ˆÃ­án¬‚Cô„Çêú„Ḛ̀ŒŒ@˜WUßSŸ¡›_vœ«¥DârCw2ŠÒ‚¯ðЛläíyÔ4&Y^‡@³41щ`#7²p%¯˜…+2w„{^Ñsœ‚,°UœûDÁ³ÈZ¿WQÕ;tò ñG`ˆzÏ0Úši¶ˆ¾ûh׳óü§-üs1¬ –†;½O÷:Q²%ÆâöNJÚ¹ý¤[2™€ËÌôÞýÄQ³)CÓªËù|u!“¾Ê5„1|‘ii¢$ú—’QRTB†ÚË’åØUPœI$Ù!RuÛCØ#&Ç?´×Ìr.¶ÔAùÇTüëKK‡+¥Òí.4}·×k-¼¯=à"ãômŒˆàµÓÖ ^¸Ž!ÁÉZ, kÌd³›{½^Eˆ„Gá$rÝôî¤&åQ~›MhO²­i ´'%š¹áz‹MÄNgRZoŸiZzý5øð Rгcz¦oQ¼˜’Ó‚ä:þ*ž¿ •œ”«Ó“§GöùeŽâ³zýñ3}Q½v©Ri¬ÎÌð4³ÆN·ÛCñðé¶?ZyŒfqjñÉ Ù3ˆ'jå¥z­]ªÎþkx‹–ãæré´ ÍÃ~1‘̆±,š%ÑôÑXO/\,—"=4Œ¹­N{n»ÓU¹PÏè„ÑývÛ_y‹n¦ggµX •á>ÄÉûƒ˜„!_=`•igû…ïM€jdƒkóóØ@÷×AлÐ~®í÷Ç“Fà ½Ýê>혛§êô;0±6ân¬ÈVª¿»¾ñßãÏ ˜VÊʘ,¦Á¶¹lþà ˆ“'Ò²Ì䋺V©æ¯Ï/àˆÍ¶´Ñ¢ˆBk¤)j*´²øhU(:£ÔèÛíö“S—fЬÙ;+ù¼¶Ï÷/‹{ˆFèÌõ å=°GôMs¸œ Á‚U½è0b¡Þ‰jŸ¹o u!¬ñÈ4›$3o#hÞéº9]MrO=[¬³]¬¯ýÜÅü4L Ì@óT¢ˆŸÁ™|UÍ©Ðlž¯—Åç/"´R5ËÌôú~¦š˜Äw&¿ê…ÎçrþNªªêII² ðl{—LÀéäþAÖ6Ž´ápT&3ÏÉá·°3'çê-×§þ±G/|çÐÚ`àa’L¦kyã³è´02˜4…gã°}¼3éÜ}¢UœäŸ—â³@"•L¦³‰D6Lòñ»ÿŒÏé|:.g³©õr…çó˜nQç˜þädŽ)Çúû{¸Ïöwå¸.¬0¸÷˜áž¶°õ+‘ð3ŸáØù¯ Î4ˆS˜~ÀÅ ÊÿuéÌ:>ž®vÊ´Z$u+ÂÉóð„(ü=…†$ÑöKRÚI“Æsš=„¸ á`Š¿sƒ)«r¹§€' ä/ž`úÐp'{±ù ûãØ€@_Ä »•²NŸ?l0¸ 'OnBŠëKnÂ?/‘œNTÈv %ñÕãkàþöL8w‡Y»‹Aý%ΣU&$ƒ’l…—üÕfÉ/áïâã¾]È8>pAœØx¦ÿ,0@ti<Ú•õ´5û8DádKß(äØïQÀD¿CüàÆ„= 2þ·©;yžÁŸ ¡) ˆ Å;E(qÄ»½Ÿ6â ð¤#W¼S0 Ó*‹N™øœ7I–aN€8r°ÚàNÎ ì»@T‚ç]Q1v;˜ÿ ~WTº¾÷_7IEND®B`‚Sigil-0.9.9/src/Resource_Files/icon/app_icon_256.png000066400000000000000000001344641321676412500221450ustar00rootroot00000000000000‰PNG  IHDR\r¨ftEXtSoftwareAdobe ImageReadyqÉe<¸ÖIDATxÚì½IpY–%æãŸÿÇ<àLɘsÎÈ®®Ì*«²6S[YmT -JCïdZHkiÑê´ÐFZ´i'ÉÔ -º7Zô¢M²V–Ô]CVUN‘Á28“ ˆôYç¼áãÁბUà»™Ãÿ„?¸¿sî¹÷Ýw¯e™5ÞÆÛx;Ÿ›=&€ñ6ÞÆ0ÞÆÛxÀxoãmLãm¼·1Œ·ñ6ÞÆ0ÞÆÛxÀxoãmLãm¼·1Œ·ñ6ÞÆ0ÞÆÛxÀxoãmLãm¼·1Œ·ñ6ÞÆðw¶ý·¿÷{ã+9âúޏ}Ô–s¼}…íŸýô§£Oøß#½ñ¥9·=?ÿÜ!2膡‰ö¬Q*¥9ðgÆnóØx;EÛ˜N7ØüqÇ.n8¶m³õëåc‡¶’çYq’Hc„=JqÄýT¡:¥™R‰#¶”ðÊ4Uw‚8¯_j6Ó9Œ‰aLãí o]ì}7\€w-yt<ÇGÓSàw5øÓ4=@­]`ͳV@@›hHÔýï“àŸS|¾à¼0Åg§¾ë&P‰&¼W rÉì½(ÊÞž›KÇ„0&€ñ6ôy ï8®C€K{8z¾º •, r^K ó2‚_C&w0¥*ï©|N[) v™G¼.Õà×·hèåíÄ’À&$>‹ð1¶o€ b¾Žd/œ€ÒÉJ%Þê÷…R !<ÞÙŠá§eÿô'?“˜ε¥×VÞ>Š<€G‚Ýu}|ËòS xßÚ¿]r|Ðšàø¼¸MP*ÀU÷‡*À6­¿$…Ô’D ¬»rRCj µŸññX=OÀÇxqŒÛ‘%çýoâÅ1^“ ð;¢L=bˆlÏK\ÇI®OO§ø²ñåÉÉìÓõõl½ÛÍHü"cBÀy±öZÖ»&è= ú@^V`.ó6PQË)x»x,“·Xò¶ G&ÉÃU.cºʯ–m veù•ßOKŸ +O‹/ A>“$â»ð¹oªÇ#ü_ˆßâ6£‹!þ?Ä x¿!ÂýÀª¾EI×|ŸÄÀ÷Nþ“?L© þìÑ#{Lcø­o?=bzæ«leß·fêukyzÚZhµ¬ î3È–¤©µV­²öð—=XCßW /+Ðs¯,ªšñhÛU®*·,qT¯)+"¨8ЏñµJ–ÍШÙöDÇ¥ Šì,7 Æ0Ü®Û÷Ëåž+@*‚ŽÓ ³¬-,»ôùXèr'Ð#<ðúˆÇ‹ Ï²Þ3Àoð1üΞðÅm Š€÷©à"âåV+aáOÞy'¡*0§Ðþë›7³Iœß2Î)Hcøx$ƒ˜ÔÒþïÂc|¼„Ƕ›ÍÂiÐÞ“'Y7öãZ pÜ xnŽœ¦ûÉO~2&€ñ&5Q«YóýÒä¤5…A Ç@›õ¢\>|øõ>½Oy KXS€®bÔÕq¿ŠÛ|¬aIÀתº-_WÕ;ž\[´|ÇiððÒ=ÿ?ürø  5³vŒ)¿á À€'Û´ÔkÍÿ üˆ3†Änuûq–Êå]ß÷û}ÇyI[üÜ v½¯øYÖÇwãôyÄã}¾çÏmTñ¼¿Eºõzú“«W©FR*‚ÿîÞ½!ÿù÷¿?ü‚¼±³òSŸÝâ©PáúÔ.]Êj¹)Í»¿øýË'Á€hŽ#1œâí븬y«_+•†ÖIYýÃÀwœ-w*-z•ÇŒ@Àq¿ŽcÓ‘ÀçcME unÒu—êŽ3‡aÝS@'ÀSX»>Î=}kÛV€ÿÝìtŽz• ÓÚîv­Ý~¿Åß8ß;#‰îK²] {·äûm§Ry í¿•ðØ-yì’ Ô±#·í.ÀŒ‚,l»W!àsø=!Ž,}r¡ÙŒé*üÑ­[Y;ý…þå«Wö\½n¿=7—w©†ÔAK·GF@muÍó`´“q 5SXý”¿Áɵ©©T»Ü~ÏqÄH6&€ñVdõrVŸÖcµR9ɧÔ)” à×hÉiá1¸ð&¬aƒ¬…Ç'”A¦I›˜qÝëü‚†³Šå $m«´ Àš@§Ô%ÑíèXú7ݘ+@yL—¦Y­ ‰MÒ {bp1´1XÖÛ ¢äi»½k—JÛ•FãåÀqVñ[;p':8¶Iø}{8¶qºø-‡Äà8=‡êÀqŽtªçÅ$ƒ¸‰2ÇMA R%¼5-êXÆô¨1-êæx_¸4™ \òçtb;I’Ë““ñO®\’ÀÿÃéSµýî›ÂÀ×lõsÀw|Ÿ>>$nÙÙ~´‘)Ã:M*Ðó8©@ÿVËqV¬0œ®pº€¥ï:lŸp„" 0ó[úRVûÙô¿]Û>’Övw­-ˆazabbúb£q]B·»å”Ë/¬ZíKAY¶—Úöž 倶—H2àã]<Ös¨à`éÐbƒèRý[„LèU.„gÉYÆA\<Ï£§§CÕuîAÏ÷Tï$ÜÓ4TÊÃj–Ë s8;a ÅÿW©ˆ³BcøŠà¿‹àŸi4òV_Hн þ=ö’¾µüIŠ[§ô‡eÁóÞvÂpÁ=Áœ|¦üz’&»½žµÿy±½MZP¶ÇæêÚG(ÈyAnSP:ü,{³R9–"E ü_ƒAs „¹ ž÷îÓNgË©ÕÑ; ‚]ÎÕ.UC¥•ÊØ*ȹ)žcbI@Xzaù x¸WœÕ³ Ü39Î÷ `?xÙÏ$ÁtðDîDqlÓêà<3qI2;úHgÆðàŸm6‡QçWÒ×wµÕ/Kà3©¾FßO60Ð&1@ ü¼nš;oOÀÚ/ºîm;Ž'ÒÐH&à5ÀzA`=Ð_ììXÁÀ ð¿Ù"Ü®Fù›nnYw‰«ØÃcP>°ø8=l3ÏïÌØIÁ$þŽGëë‚ •Ê\¹\~ߩ׹P‰ãl€v2’ÕÀ‘.g"0HPÀ´¥õ÷Ôô§g17ç]Í„” ”ùÕEZs¦f'züÿ._÷wAâ¬? £ÊÀïɯ…°­± 0¿¶üÈ øÂòï ^YZ}Êý ,Qƒ¿ã$îO*ÐÏ)˜ðo-øÑŸö¦<è3eñiý7DZw¾v³ß—avKåèªï™Üù‚¤ÚdêÏá{nã»¼ÜØé‡ iWææÄù¡J Œv Â2 ªD» Œ°ƒ¼ÊÍ ¸5Ç7€ÈU·^¿k¹î&•€#c€Ôü©tú-[¥:Û2KRäMXrŠTñ?b:U» Ëš¯Ùv«78½$yö©í8ÏÕëE†¤-Óžtdãp=„¡†$@ð{§œÆðÁÏA¾Q«ið»ü|T!÷1"êÊê·pœÂ šÎ$ð¹Ïø·añß¶ð74ða ôô§)ål××àûÖ~êé :F(<³N¾þ÷¸@§c/û:ZÝ&Â:ø~÷°3HYÇo¡BZœ˜¾ºIÂe`¬BÅ,xnùسÍM²ÅJuoo©Üj½ôšÍ‡™ã0_¸×÷ aÃ,ÄÌ üÄ)TÎKLùð·æñDÃMÓº#s+¤²Âç&ƒÁw‚íí?~ÇÿzúÂ…£2•¨D•ûŽ??U·Ó³¤Æðfà×¾’’ü#²‰4eï[üyîǹ¶âºßó’dæ€ÅWÀ7ÁÅ©¼µ½=úÕvÛê¨ÑçFŸSàÛ»ÊL†j´æG*~C¯èwîöû•†Oß÷Õqr #O úû„ê;îÌ6ÔÉ*öû¯^YK øýBÙÐró·ø: ©‰@ŽÝÁ€~ýòLš.·ÓtÛ©T¶ýZm;¶í=ógüs£jY“@~«Ð;;\WL‹âsx;¹iQ-_áÜ~‰ïöj0øÇ´Z÷«µÚ@q+§!üoÐãHýô4Ç«gÆ À€«ß§äÓ{°nU57ã4:eþ^¸È}Éó~)p-Co£×+>o3+íéÖ–õ›gϬ=à¡ÉÛ}ùˆ”«F®~§Vµ:˜Æ€®—Ëñ\«ÕÆã1¸ÇÜ|áË_k˜¬ÞRùÓ\4äît:M¨àÒöÞ^«þf¯Wî‚ ŠH!?¿¦Íå@¡µ³»k=Á^(/ÎÌX“µÚ$d£‘E¢ÀwçÔ¢µÓëMá»O]©Õ„jÁì ¯ gQqh°›9£¦E·qþﯭY›8×L@xº¾þ­›—/?ÁwÞãT$ÓªÕjJOqîpåˆXê˜Nã–üÓ#ÀI[b~9oÛ³”úxÍ"ö¥ªãܸäyQíÁ@DÖM‹”¨ÁKàÿúéSk÷{F/3,®y_ƒ¾Z*E—''Ûs~ß³—pUWãôÜá¢Ä:éÅ’yýæÏדz¢Žþ8^©ä–lÛ«×ë—ÐÐJ›»»Ó[ …ÛÛ *†Š^Ï ”ØÆmCèáwíBÑÀ²–§¦ÈE2ÿXWͪDx=~› Ëý$¥–¾Ñ6‰žåÞ×`§Ú0¦Ew ê"¹®ü¡B·ÿÁw¨áó+8oe¸#>ÛÇÑ5ø-3xoÈÁÿì§?µOóZ…±8üËøýøáïû°üœÞcj.çò)ùç0|ܾ0íºß^tœ÷ƒ ð`ÉDÐKË\[Ÿ÷×!ñ?ùÒº ?¿­¬fø™ºXôW¦¦:Wææ6&(Ót€=’$èFÝĸÏc¢vMɰ°Ç~~+§ÔÄraª.=v$ˆÅIøŽ"{‘JRyãr£Q¹¶²RAóÕööܳõõ‰A¿_6•€SKÈàv ÁÛø­$«ssVD Ÿ÷Tœ€ÁA}Ìœƒ‘± Ã0s ÄOT³”üŸ­® «(^˜šÚ"ø¡"Ê\^óÆÝUÉCæ%H ØXœµWZ°˜Ý7üŒò×0ؤäϲY 4|ú¯ Žó»ize £Ü2úm¾lés‹ùñ¿}üXèÚ¾¡7íà“@F½›‹‹[KÓÓkÔ=Xªþî`0ˆ$„xŒ™sns'Øã„59Ôš~±ž_UôQŸ£W W@ΫIàJ`6Hfò@TPeÜ®ð,ÍÍ­]\X¨…a8ùðåË…^’8yU ÉL›ÐHÅ >…"¨á³/Á5 ð0€ÿöÊÊút³¹&I’¾ÁÚ‡Åç‘`ñye3Úbåàf*ªôP@¤2€&*öT¡ËÙWPÍ×%‹)6¦ÓzRÈtf€sÀó€ÛUøÚUÜÞ¹yñâúååTÁÂýçÏg¢0ô=C ˜át"þv|Wë>ÁJ«%ÜÎ|èŒGsÅßIIÀ1C€kð€àñBRc>¯#¯uŸþ>NG«OðÓàýT*×ðdò[Ɖ@gQúÏBòO«%§Û†¸Øë½ž[ó<®Ó² nà_ÆqÅ·íë×\÷“0¬Óêsë¥ÀÚúSŠ2ºÿÿ}ñ…µ¥¬¾• 1ëáI |pùòÄ1ßÁ±Gà‡ÜãxüÊú‡Êò‹}hù±ë£ ZÙ~º€’¨ÄG»ÊÀ‘Ñt»ëKW@'Ñk|ª€rI’@ ÏÕpÜ›žÞ^ž›k>___~œ#‚87› 7’Ü3œ—Wp‡èz1àZâ„Þkn©œË¤ËsÍ$©_Ãçï¤:œ Ôëüƒóå€<øq^]î© êI'Þ+€³ê÷Sú×`‰”Œ´WÛm·Y. ëÇ`“{„ì—à¿`‚?Ž¢ºôøZêkÙÏHôðõ)E÷”u/Ú"5Òn]¸°y{yù ÀÞ&ðáNtÕNüTnˆ#«ð„‘>öX–çQ °Œ‚žfT[‰‘@‡«jXcPÔ$ ¸²:‘ˆ ( *8;¿Øq»Qrœöìôt{~jjêÉË—+kkkSœbÌç8F‘$0à4àö¶UÅ~{qQ䔾µÔ*ëcþ´ .Á¯sLDàÆÌ !„iê_1±WV>õ*`< `\Í)%ýg0è(=•õwꥒ?Óz=ÎñË^íó ð_ø#‚~=£Î:¢­-? Lp0~9º—›[2Á(«ÿÝk×^T+•µv¶ávà£røðùq„$Ãú³I “²?NTí¾LËu,ðg3M–TŽVÊ%p|pÕqNH‚â¸B%P€Œjp•å4m‘.--í^^\œúôñã˯67[y·À2"l©:7<þd9"` ð® IÕÌ£“´üÛp¢#®=‰‘Å zO¥»Ñ~ðPåe«8½bL§Ýï_4ü~ ~‘ÞëyôE†Ózm9ÕGðÓç¿vU[~~øbº Š€àÿ ~nøµõãˆZ™™ÙûÎõëúÝvìõ¢¨Íàïõ ~È~(JÿŠ ÊlÑÿOèÿ‹¬ÛTTîÑÅ; 6͹áV>¨5$.½Àç@‘‚­T€Cð38Àû%ðqŽH|7AØ;ø®ªçµðÝz¸ß{ûêÕöÊììò½'Oûý~Ù3"læ—s ‰Î¹ú]œ»G N çUœÀ>bf€óüŸ<>œê;j›l6ÃN:tpÞxÖ:ÉQ+M° ¼—1œ¿Jùýºj.ýþºïsœÕzDj/|DfŸ´þËW=ïåÁo¤8?~úÔúr´}ø9ø¿}õê«å™™gþ@¿×…õWÐUÖ_ý(û#½sªkÚåÒV1ݧ@_þ"ëTT[ zU>Ü)Ø L#ÜË2f\ÿ€ïD"(è*‚¿’$]|Ç.kõzÿûï½·ñàÙ³+Ï_¼˜Ir&ÕD›f'Zp‚yëÅ «ŒK°™G@ÅF¥–©Ø C1èG7ëY»m¤"BE¼à\LÄ5ÆT²*Ž$`WÇÎÚ”eUeæµ''‡~¿«ü~U•GH &ù,O„áÀ*×éÛ{ÓU¬)womM€¿kíGÝòà‡]M¿wõêÚìÄÄs‚¿ ëðïu þ0ìë¿ï÷TÔŸÀgÙ}‘ÏB`í×ì;ŠÌd=Ëݼ#oíƒ  ÐM`~³Ÿ$ úø~%hÏW°óØ øñ:N[öpì_¾pa°05µôé½{—˜™åtv‘™å¡?kËz‚ýH€õ´Òbî¯Å¸ Á ¯ÿ^§S¯Ôjž ˆÊˬ«˜I è+ƒ€gQúO«ùþv«%.z^.4KuÁï­«5ü,°ÉDŸåFÿÈ¢…°ðJE BS0馟Aºê ”›ÓÞü¿{çÎóJ©ôRtGí$€6ýðƒäç@¨@ßÀ¾Nh‹ àM¬>Øu¨g¥rŸ —Òzžô¡}5;Q}ŸS”‚úX¯aàmP)—ƒo¿ûnç“/¿¼¶½»Û0]‚ãPF¶{ ;Øó¨LN€T>GFƒÀ¯Öë¾ZMè‹ä'Æ:°ëYDVr΢ €;¥¿²$CéïÈå¤L°™égÛ\سÔpœÛWªÕ·èÏC–‹óý R‘D(ý¹Nÿ@ÛÚÏ:Óò6SÁ>¢–ÿÀÿŠÀo+ðw‚`Ö¿£¥$§üD¦_Ìêº2Å7´öêåqüÉßßÌÚµŽQ£H`Xçaà,[@"àlA&{ð;S­ôU¢R_ï‰ï“ÌUÏ ßë­Áƒçϯk—À=!åÙË”*î1ÿ¯_³µ½Ý˜š™a½‘êì(àDˆïy®ÇE\2Žœ•m’A?úŽáÌL^úWañ¿Å¨?ÀxyÅuÐS OXà‚þ'å§&føý ~×ðùSòiK÷öÅ‹›ý«øýÿÀ#ƒb¾?$x˜ì£¬>€¯sƒ4ð£XÿìˆÈÿI€u 8Š„*`¾• Ó‡EpÄE‹Ÿ*Bàm‚?•å¸8U^]^Žkåòµû.Z#lhòtÄ—qrì–wäula­Ý®Þ´m±’Óåz×-©iNºTŽž>‹ÀsO-ƒ€ú"s¶Ÿ`ãÚò†#kõM©%½‹µ0üֹ̎º:MÕWòŸDÀé¾O^¼ zëpö›p°ÏMLt¯,,¼`¤ïňÿðs¾?²¿«ßg³ üQüEÖÿ(ðòû³ƒû¸®Ã޹«<Êg6 a>Ë}3`Är'øCµ‹¢Ÿ\©8?3“ÔËåðã{÷VXÃ)°I ©r/÷åó‰Uù&ˆÃÿÃçìíîNùµÚ+‘æÌ5ØKrªS@p0…`8K›HØa"ˆ²þ-Z–ˆ’+üXŠ{Rþ*iz‡~ÿsÃï§z®ƒ:r9KzÖÁõò®!ýýR)þÖµk/T„ owÕNð÷¥õï Ù¼~1X~üæ”zž{Š–³fÇ€} Í“»š ŒbKa½Põ å‘.B f/†DVo4Òoß¹“üü³Ï.§Š†ohüˆ|}“Õ¸xÈá4¬u¸@šÿ’Ø·wv¦– *€² ýµôç°cÇÎÚfZþ„õϲŠ*ÙMë? +6‡Á²<—eÆ Æ è2$Êïç ÁϨ?Wõéœs'gruÌ—.mrí9€Þf¤_€_&ûté÷‡ü´ü”ý}k¿Ö†ÿ¨ÀßqÁ¾ìåŒ"k èŸÏÌ:‘‘HPY2))ŽU CÍ\ˆ.C™¬òC”eëk×J¿¹woÙ5Î[š¿É@fà0Í?|;G$tV$ðÅ®H€@×× ’d”ügžö-gýÄâBQÜCUíùþ¥ ø6üô2“zX`ÂQÿÛgÁLE/ww­5¨ƒ0gýõ%’'ÁüäääþÐÚ3ËOÈ~€_­ð–ï¯ë{Ä#üþã¦ú¾ ø­#\£\q=ñ‘pe¢Ǭè›$aÛr]‚þ ¢¡£@Äf&'í÷®^u>|¸ä?4-ˆä'ëSã±¢ŒË4çBp)3Ôwü\äD7@¤=³ 3Þ‰÷{Ê 8Í5Æ©Àê¢*ëO+Å5á,æ)}X?ˮ̹î•]ø÷¢¥ZágfýQúºº:\Ü“·þzRùöÊʶ‘ÓßíK ¿ß Ò”>ÏÿÀ~pDÐï$Ó|…ôGÇÀŸ[¹ì58L͘Sñ;eëp€ê,œZ²ï É!úú8¹Sssn·×«<][›² Àïæüý$§²Óùn ¼è½^o¢T­r™³p|Ï+ÁÝ“‹¡T7å³8pî gý ®9²v?ËwsàÍÔ¢èÃDúªª¨%£þ±*tIùÏŠ5Ì;­â©*"¹^­†SÆöî`Ðã¼¾ SÜg´?%ÐU#Íœå ÉëÿG¯)Yó¯ÿóÃ1²`ç €;~£8ÚŽC2Ë’meùmYë? ‹c%q/]¹âmv»ïµ;Z>`˜Æ(Z¶—åž7̹ÞN»=1W¯Ë©@9+@€©Îž]ìæœ 7`œ lDþ-Ùa·jËæüÏxizɉ¢ùUøã_ì¢Ä”ê>Û ëñææ¡ÀŸi¥ˆÚë‹‹{LŒé«%½=}Œå4‹QT´ß¾I¯þ¯ ü“ŸWÇÉFp`f’ËnÃÕM>ì(.ÓzÕîŠ$UŠìí›7ýì׿¾m3Ù*®RlZ|s¡Q>>`åÍ[{{µ…¥%_V?’<[­°Îh:ðy'=ïÏ9l^|Ö’¯‹ú~²]×l=ŽßgÐÒŸóüºÝ´§Öúë’^tŠ:øG™¹49¹ÓÓëøå.$¿Jô 2ø‹¬Ñ\ÿH‹ÿ£ß²eÒï"ÈÎdí0àçîs 2Ô”*@"\2Ö¨x^ù­ååé'Ož,ÍïRf?k„¯O`—%Í$øE€£\OfŠé@c&à̬pÎ9È\åÆëËeç´þLüÝ{`ýWhýéßë®<Ìò Œ¤]h2aYÄàÂ>19Ùƒ¿À¤ΉB3»Çô°Å¬Ãóýq.6*Áç·þ<üè0øXýqéßE²–A0à*Ç$áô'UÒŽÛxnçhçhséÂ…‡ÍF£åœï¢L@sa‘="î“ÑT`º€(©:ûP)ý=ÕtÄ-ÿf+€S¶}º¾î\h6Éìd~9õ§ä?vÖ£hhýiùõ¼¿Dªi+ÿ<ÛÞZÿ¢ƒl¶ÙÔe»D:¯jF)2ãb&ÃÈ,¿"ðÊð+ZÐów ü¯ œ"—…Õ-¨vùåù-Eë¬súMtYÂó5qceeåeûîÝkÇ©ÞçL ß+„{–@‘jhw»­r­&€ëD™è€ÿL(€óLöT¥Â"º³ Ë{sÕ“&0 矿z5ë®ËW§ª©….3Í„úÿ}Ö°;b4ð$OÖj|¤ÒbY¼c˜§öä¥þ(«Ÿ÷û‡ÛG¢rþßÿö‘ú^qòÓ…ÃïÏ`  J(,*+¸XN)Ž=/Á_Å9j`o6''Ÿ6…N§î޾"l]…)³¯Â,ÚÔL@ ƒ)ûåšÙuØ)p,ë Ô<×.å¿(y§rÁÙÕÇâš@#Mo/¶ZœÍ:(û‡ $±'€Ïçâ|Öt«µ'€/+ö²µ(áE««tXS[£S|0î£oàüèh· 3]œß¨†‚¹úÀïàüîaßÁc[8wÛØw.^¼¸jÖêÖ(¬ô­JEX~^'ægˆ2áV.O¹`çkª|?(AµHö?aytŽ®xtwÄ,À8p·?{ôΞ`u®ý.er ˆ×þW’ä2-ÿL½.êPòÓ:…ðþZ»}l^MÊR]‰Lƒ ;™é<øà?®šõÑ7ÜòS–sÕ‡1‚H{ÈRg¬z„kÓÁ9kã¸+˜˜œ|Q­VÑÀçuÑ-tYßQÀMÕí½^¯bËš®ÚE@ÍÙGìc8mÛåÉI!ëÔÒU¹òjßbo¿(º¸Ùn—mlˆ _YuìõU×[MlöÁÚs‘ut‘¸fµºĪ5ëõÉ’?WÈcTA|fß©ÿ ÔÀ¡za’Äðý#ªÖÀùnƒ¨žvqÜî]XZZgƒÏ…VËjüYø¼N¼^œ­î[Þ÷3H@3O|?ŽE[4üó”pE€¬tæ*Û@™Ñ\\°ÀE.«µÿ‚J°þ¬>å=w®ðœbÞ?Wý1}òŸå¾«¸ÒOAÞ9S_E‚ Uij šÏ¨BC úÃoˆ¿ÿ:ÛÕwÿËÃAÂ!±õ¢HxTußw"9[Ò­fY‡‚qž,ÌÍ­¹ÝîEÎÎôT/@1}À›½øæToN›–/Š  ¶èÞˆ*ò?ì•8ÂêŸúd s`íw[zDPíµp0˜¥¥gKZ‚&Ðíª”"ـ˜bÒ WT)nIr€ÏŠkø•ä3ÒiÝ~xŒ`rU€š&e·Þ^Fp·g§bØî÷ÅL ÏëQÅžo$"Væ˜4ÉEW5û´ûý²öTÛqÖä;²@hÑ4à¡5cp:6‘ýÇr×™,YreoyÆj»í6•€hU¥sþeõ¹{*Zý(aýõ¨& ¸ž'ÆžnÍ…],бУûiA ,;k€$ð—ÅiÅi7 Åi¨T8>0íø¬¬ÖÅõêâv ­®/ p褟KOðTktÑ)Sµm ~ºŠnÕ·¬S>p. €ÀEL &Ñ \½Jš$M€›b„¼ÔyÕ¬@ ËϪ?H!;FFñùIƸ3X·ÀU¼Ó:KÖÿЙ¼)Î73E°/à, S¤»xQ{wfzzÇî÷«GuR½_SæÚ™4I€FÂ|lœpú·¹z]T~dý:GÊ<± ¥œ†áœ°<©Êõ·áCº*O][Ö0kØçg©‘"{ñÉÔׯ«hçY"m¬½ H ë“ÙZ%ŶZ ËLw`ÐjµÖ­ÛÚ-Ó׌ M·bËûök’@z´µ?Û¹ âXÔ¶s¾YVâ½\¶íiN+1ºon©Êü³TÃŒ"€n¢õ–j¿m‰e¯´Lrùkôé(àÿðŒ’AÖ à³Ž@¬â%¿$vÃîø~„]åu5øéC^üVf¬cP®À¸*ðYÚj¾o‹˜ôï²L,;¥ À` ï8•J½ÎÜð-¦ù‹xî$¥§6XbI™#/½¸û¥ÄG-è9ðxv>.Ïð·ƒ 8¥; ªá´qçÄ‹(¦iÂ< s&@¯Ù°s`Î¡Žºn™?Õ_6ܤ̲¬ ÔsêÕÀ¹$Nª$@@$|à)? ê%€›}B•í—L¸Qj:#üÿ|•ÌAŠóºÇžnÀ©»Øª~öGîøÁÇ?ß_å–ðoõûé•ÉÉç‡Ó51ΗH•¶Õž~’ô¶û}nÆjFµ7S‚í÷Lô†l4ÃΩò8vF;[À–]nF1å£Üy¯Ýï{äd½` ;fæ=ott¯ÆºÙ¦˜”Ë_ók­÷ÏüfÀ ÙÌ”=«©LIº¾ï'M\'ºlGÍlõzÅÃÚ_œàî»z²…:+¾á% ?Ÿœºôc8M[”¦Œت¤§vö¸³úƒÕU3¾1@¬j(BgV0¸xlw:\h$fˆ5æ¬5çºì²Ë›6Iï »‘ÒÅçl˪¾OÀ\7*"` ñŒ=_ǯȣÖ|ãr¹LWƒiÛ‰~šêŽãIàTnç.ˆÉžrèÿg² ¬N wã hé€,·µÝ튌?eV h…@‚5Ÿg&˜èQÓîõšªâ¬ì¨‹cY—žÆX$‹ò¦ÛOLšúÄ9ƒTs2Q4TæO$ÖÉù ÂÎŒÁ^´@W.-—Jœq`f¦è¬,ˆ e5ӳ˿ç2pw0°#–z–QyÇ:X½ëå`Ào Or×)ÂE*ÀÎ ,Ê fµ÷öêy…AFvÑ…å/A]ø°p ’Bmˆª3ŹÛþtqÑlWÎRaLÄ5-u´OJÎÖ$92¶ H€µªÕn"S´áñ%<&'t²1œÂ VÌ÷2ÐG^eôfÊ"Ë¢K1UååÆF“àð«Üø*[ic/Õ|6"¤‹q™s|S ׌QÔƒ.ߘ‚µç£(š lè ’@Åu+ˆ€õ1¾ü¾m³Õ¶h½m¡Ê³oàt`¦b0:‘êÄ—³8‰u°ÉÐÒò?.ù~{¬Ó H –-Î’#Â=§žÎ}MÀ7!s0/ýóIî|ìáÓ§s üuXþVÅ÷µR©ŽA^©—Ëev¡aþ;ÔAa?úó¤´Pù ¸²d¸¥ˆ@îÇ„«fV Î/¬à}ÎLMLtbY°%dÂXVoŠY¹˜Œm™Â}æ€sŽÁÎ)[÷ÈTtß~²Ð3xùõåù<úþúæf Ÿ4 €Oªž7 ù_o–J ì•V©T.»®7]©06àZÍ7~&ÓT­³¼›[½T’À}ðEÖqH䌎®³f¶3›'êk6Õhì±#‹¶Æì]$‹•ŠåÚTɾ `Yg(Mûܺ¬ïV’Ý}3*ÞŸj:üY6ܽ"b°7¥ÐRóó‡ß¾qcã‰Ë[™oÌV‚Œkî¾SÜ ÃxD°Ùï'Ý0w@/ŠÒyvÏ©T2ÖÏ_ïv 8’À÷OaQ¯JÊø‹â*yËóӴ僸l;Ÿµ)fo¸|Û:Ø4ß® ÓÓ{¢L{÷aõ… P;K¶É¾†£WiZ§Y œg ¦—Ô2]‘ù‰¿±W.³[o“ƒI7ÑkÌüòX-NÔš€Q¦ Ÿ@ÎYg¯Ü¼q#ªT*²ùÀA2Û ß)$pXƒkãÓ>ÔÉ\½nómé|Ï¥g„åÛs6Tÿ&ÎŒ¨Ôi‘B­¦mE±Zø×H×m(Y›,×ö¢ÝökÈWÖþ¿‹ó|y~þE_ul]›d%" À['ë¸Ó„#ßÏЪÊÙ(O!û×[§] ˆ²^?Ý3aëaÝ]®—ÐuùlÛçŠM[“(ªeÊE3ë6°XË+U¯1ï÷k"às6¬ÿ¥¹¹çìHÔU […` T3ÖÁ¢-cp6&w”™ãËk±(§ªÔ‹«Üã aÅÙ"àëå¡zÙ©Fa^èÇ÷()²8@ r]{ïÞ½·°Y6•‰.ÒÌá›Aq8ü H‘*:N°ÜlZÓÕjL×àÑÎÎY­Ó®tÓU}žY¸…¥Û¹^ÃÑ+6m[To jEîV¤ñTYÿ8÷œŽÓ謯/]ZÅc;ý(j“Ø­YU#tÙvkt¡Ö3áwKh‡¡P”w®¬Í/¬?לÏMM­gýþ¥šQjŠÀsÀ|­­Ìa£ÀŸ'/¾øB@¹Zµ$’ Rƒ½$qRÕáÑ H ñR’$PI^ üa­–±cÑi"@Y[lìÜÄs‘2P5ì`Õ&<[q“d¦¨p ×n ”ôUd í™Vë9ÆÂÁsKÐÈ``ªY€ô`ÑÖ|ÍÆSOç’^u:Ùt¥"¢» ºQþ³4·“eƒf³¹×ë¯dd¹oTšQ¡èáªÀTM`) c¾œm½)¸{÷îo¿ývÝ©T\àˆ\<„ÏfBQ§žsðx— „KA 0•9ùt}}HÿWOˆëwJ¥,Pr¾éÏSYUõåùm\¸`ð;X¶+(-)ýË{8b÷ÓtjJnI“ô6 ýMëŸÂ2(بVÃ[ËËûq¼ÅÐîáHëûÝPv%b«vʳ\{QOFëˆøï˜¾á.;ˆ´pÊ=‚Š*Û#û¯íí•D PõôUÍy"Ö¡caP_IV­ôk%gGYþ"%ÀÝ­­Kµf³Zj6=¼Õ¯"(%²[m VS_lXÙu1P©°‡lªÉÂy—àß…¡ýûÕjF2û¦«:ã$z@7nÍt€ß–Ö_(€0ê8¢sS ¦Y¥90¬>)ðtóæ=\ã-\ßÝw@_Æz* PmÛŠ ÇNù†Á•-4)ÀÃJ3‘ ±[/,ï ³íþFìm ³yf³I*_7%p ô¾"Uÿ8”ùEÇ'rà“8WŸ=›Kç‡7oÜøUÉqس¾ ¥RÆgŠæ%<Â=ËŠA8½k 8§c€(Qj`80ÿm¿/¾À|ƒÝž[&õ°¸‡îÃÀ²mtpÎYµYÿ$ำ·ÇŽbV…çzuw×zß` Ô6\2 þ÷/]z €oüÛÝ(ÚéÂú÷ÃPÊZ¸L ÎYÿQq€ávgε* I8í»R°ÐdŸõç'Z­­­ÙÙFC€½¯Zià—T›0ÑÖpDl '3!IXÖ‘$à«öUô} PNC⳿þøã¾sëÖç~µJàW ªn–UbÜÆ€/{ ‚˜D¦]—‡p"vÖ¡$øÎ)ˆ`8HÿoÈéÿpv6cmæÇGß "ðU£WUI œý€¼gåG•lcñV0±ã—“deqbÂ%è©ÒxÞ>^]µÚJ⛿Ë9hù¿ø7 ü,?Ž»}Æ’Dñ\?VÝ›f­ùVm…åÚÇ à´Åº]*€ÀÑ :E ûòÂÂS»Û½MIiºeøZ äÝá ° ËU+°Fÿ—ÁFî$ަˆ1@ú>~ôèík—.MùÆoغ ¥Ê#>«æ$l”aÛb…L'Æíd¾ÑˆïÐDð¯66Ä— Ð-`"èzœ#±¿ë­ªúøé¾‹ž"]¸U·è¶Ôêë~ZE5neÎÆ¯Ÿ?—ùÔÖÁÅÚ¸8=½wgyù¾Eàcßéü8{}L’”{ŠGŠZ³gÖˆÍc8][Æi4.õó3û.`lë§¶ÝÅÜ^Ç 0y” ‹…ØçãH@Çèûj•ÁÝ”Å$–õõ%{{{rf~þs¿\& Ôñ\Çž¯¼UöËXöðD2ä+SYñÛl@b¸>ˆà?[YɨIÿûT¾1ýÇóV[\´wÛm}ÎÌ—V†§ëëËÌ™ y}ËOð†IÖVŸ]™¿uùòÓ¹‰‰¸Þ{°ø{üÑàHþùp< xúI’1­û>ÝVåáœ:#é;hÛ•JåÅÊüüÚÃW¯lã¤9¹Q‘æ@ŸA¦KÀçË*0訸€^qXU¹ñ¼m«ÿ¨´W€Vüv 9“PjÁ»µjõ²ßh<ò$Lã»Ql§’v3©:[nÛÂTË`EU¸\&­Ý~çÿñ‹/Äwÿ——³‰jÕÒª€j€MTÞ„ 4ðõT+ Õp]˜Ó š‚2æÇ¹9ûJùže"KßÁÅ÷vp>myJ ౄù‘üMb½G*!óCãcý-k\üìÌh7€S‹rp‘MŸ€}€l]¹t铇››³WæY‡[Je9éÒvÔ© r;AÏtXý¸v D°}ïY醫snXÞŠ×$&lo7›ýþ{ ‚+~½þÌ«TîÁêÓ ÈØ€e "Ȩ°“øD‰2XÚTåÁsMü…fSôäÛ ‚ôOÞy'%0ÿ÷G†¿ª€™Œ“Š˜t^Aç+¸ùó0g3HP¨œ“®:í PÆ—Ciý¹{x-ÝNÙ²Ž?•VÂlîÁœ#·?Î>oùóY‡¤ÿ‡ã à™S,È`O*€]ì ì-<ÞüÖµk÷sïÞ-'g,«¸Àqñ“ôÊC‚wªV Uˆ”õ¹Š¸Õ”[`)· 1âDp§Z._‡"xâÕjŸ+@×`—¤@2ÀíÞaS ¶ãÐÒŠàë²T™jÍM•$bÆ ´*øÏá2j_ÑEÈ+'ºW&'9U›–'²dp`ö&k÷ù8'ìçÈÕ’.|}Ññ ßÇ4–ç.U}RãÒE9àYþlԴ߇ãÀ™Š¹I)Îâ XCª€¶#Ý€&^svfæ‹™õõÅ—;;y‰oˆ˜±‚ãê¯Óç§Œæ‘ÙœŠ3ÝM"gž©ÇÊú»Ä9"`Ž=]€°Ô ‚sq| &o½ÔhÜMgßi;Ûw ÚŽë2FÐÆ»ˆd"W’³ã ßgä 'ØÛÞn¶úýæ|’\†ÞߨÔëà ¼Š€ñ€_¸8’ ˆãìP\<£’i\ë*âsâ ÍfÄÀ!ç嵋`ª‚ÿR©.«&ÉusªàˆSyÔsfØÅ¶/ÙMGìEþþ!ð¿F{0Œ ÀØvFŠYˆ2ÄÎäÖ¡+Ù² •$ì+.ü¦Óë5žmnN厪EJà¸Ù‚"·€dàµóÓ"HsÖ_—( Õ|»~­vml”…{¦Ë8nûµÚK¯Vû"“³bÆ@‘5¹ˆ@!t5•(‡ „ “jà"°¢Î¨Àáÿ¤T·ÿT%™ªà»Aý¬tœÄóÒÜ|¬(;+õEuýF¦ù¾†»0k0Ü=X|2k‡!så9pû¢¥e•Ô^¶x´mÿγ?ÚítêÎ1à·rfIGœ¼ºy·€iÄ$ºþQD Ô­¨òd±*lš¸|_îAs)M›K¾íi§³]j4¸¾ÿœ$€ß¾kɘ&ª1•ÈtÝÌu{"»ÎV}?dÊ1”UlªFúÿ7•dDUPW±þÆ¿ÙØ(Riæ‹ nÇ:¼£híVVàiõÏ:øÇ `„ À@µ;®Ëüs.J9èTº$µ-üxßyë­ŸÿågŸ}¯×ïWœßßÌ ´ F£&ÿ„j€ÿCKÉe»ô#‚¼õdd|_fç"US"c _®¯» +¨–ËA©V[­Õë#ÇyéȬBN%îYÊE k€wn3ÝXÍÙ‹¼ºSŒ¸kUÀÀá\½›±Sá¦YDpÜR 3[䙥çøc8b°0à$J†s.Ñ¢$ÊR©Î4°šîïÜq@ß1I h­€uvn低8¼†õÏ»"ÉH%•Õâ£ö`P^²¬+Såò•'íö¶_­¾p«ÕŽL3d ‚…íLÎ 0€ÈòÄ]KåPT@¬$|f¤cf’‘^¢œZ‡bÚ¹‰ûâHG(ƒs þ1`{ûãƒL`³ 7Ò•ƒY’Šé²b&/è39åÄ£× Ø owA¶u8;Ð1K oë×'F€Ð>!ˆØ ‚vŽJŠt[3QÚ\'Y²0‰j.@® ÂVK’C¥ôëjJÜ[_§›0µ411uÑón?ïõ˜WpÿóRÅ vS™i¨c[º BÐ=À§±î€ >™Lêáy¦*HÌ•‰#H oí“cNWv„g–åÇÂQ11œMû”i³5\±:­-]Y¦šmªx¤@…ÀˆúîÜÉ>{üøç››“šEò™fWÚü2b3$íûI‰ Hèb£ºðHfX'oýAè<ƒ8÷zª‚D©„T.Âbsoo±V©ôà"<«ÔëcÛÞPù»¶AT TP™Ê8l½À¹¦‹@UÀ-1ƒ†_nm «­*ež”u„õå>dEFà¼ö1VCKè5;³ÐbQ¡:ËD:|‡3ÛŠºnöþõëQhY®‚Ì©>üÎ [=Sà½P°Ì6§Å”›*ºiYÃŽDâ¶IzýÊ¢N)š1þŸICag§¶”eoM•JןíŸ:jÝJ6ÓŠ‰T\ŒÔq\·‹÷êW=SŠ"¯€Z¨Þš™+õï3ËçÀŸøÖøc8É(90mOW@õˆµêá¯Úi©Dð;BB«=UYjß¾v-~ÒlÞúìÑ£‹Z›æ]‚"5P䔆Ö~/;3“ð¤ÁÂMÁv¿/@Ê6Z •«ï«ž®reý}Ãúk€ ’ðýáãŽáRèEK‰á"܇*ØRC¨‚wKõúóJ­ö„¶É"%©TÂE`¶¡C…`Y v3k2p©/W&r9/+½;?/:7Ï7©Yåø¤@×Û»¹×ž{ô àààøÍáRqìE‘À2­S$Сå/•\}½â,Y™ay;u÷î- `Çt ²#ÔÀ(3Ñ.ÇP']qÈ‚¦,·Me`º5Ãúëb¥‘ŽXM¢rÃEÐÃáb$© nNùþ5ª‚r³y×ó<‘ddS X–X‡RªÀuÝv&“Ducn».«±ZS4_«Åsµ‰À.ˆˆíUïƒÎ7¬÷Á˜N¯0Ö†$À€}~ºYrÕ™%–šJ ð˜ÒRqÙi¹\Ž~üÁÝ¿}ðàöúÎNÃ+PŽu²*“™u°»mò5¹LÀ©*÷ ¬Ëžs¦@) lý¸£V)Ž"‰P¹îhUð;L=æ ‚_¯‹•‰bÁ¶é"ì°¼y&g„{«~Ì/()"0ãEÃÿscÃþ.\}ÆD0&€7Qù ^–tØq:Ä€'èȺvè»&žÇèaÌ,¸ïß¼Ù{ðòåÍG/^,¥Ž–sx##Nðºî±pìîvä“XÿQ$q¬*K”oÍ'É®L¬Öë_¦Ž³šqå¥\™ÈEI"¿À—S‰"шqÛuû–l~ÂVh¢”+Ó5ø?^¼§áOXUHÞà”4IÀßs à<ôI®Ç‡a¬)§EL ¤ÊwEr€g,\ÇnÃ1ÀO¹*vÏc©­àòüü`yjjã¯<¸±ÓéT½\ÀÏ:!1Sh¸®õzÓˆjO5$YïvE¾{ÖU·¢†áûÛªQ ­|¬@ž)’Ð1¢Ç¥ t¬ t0õx¥š¦+ƒ,Ûðkµ'^¹ü0•EKèÈ£,ͶG÷@.±mѾ Ÿ×Ÿ¨TB/Џ<9†;³ ŠIÿrmMœ†<=m«,ʱÀëòƒ™*,¶J˜¡PaY.vU|"¥<¥` ëÍ“¸”öwnßÞýòåËVWçc¨×ˆö1îÞ_—2èªåº´šT\Æ JªÍ¹iýu€°jXÿ‘ª`Dêñ,ˆ‡+o–¤{pW¹Ûx·mXþm‘† 5`«º†*§ Wõ¼~ ¥² GÁ¿ÞÚ§á÷›Íl¬Æpì–SE‰$‰&½ÅÒ ˆÂ"$¼ò¼0’$0` úË ý ÓÓ‹Ÿ=~ùÅæfË1Üã¬ÿ‰‚~ÖÁ|‚×qò±‚ÝÁ`¨ ¸_“Aj¸žá"÷¸="õ8ïÔºÝ+¥ZíE©^¿‡ÿy%J™Yë2ìª*Ç»©Aª7â f+×&'“<üÛv[œ‚ïø~Æ©Ë1 Œ `¤|O}:: \úŸ¢±‡ëf°x¿ˆÐà"˜XîQY‚ÇÅã¨þ‡W®l]𙹸ñÓ§ËÝ~¿ìX£W±˜¾¿©ÒœL9 ï ¡ýU-zG-×}PWT¼ Và"˜Ó†•ëä£áô£ÑÅ,nº7”[Apu>I.…¶½Zi4>·g…Mm© $¤éó ðE™OÀŠÁ¬b$¤²,83 uoD3‡ào£Hœ‚qÝλK0VGl98ÐÆŸ+ÜÄ Qrˆgy1y;Q$r:+‚PÉ2’AÒ¸Û¬×{?yç—OÖ×/¾ºº†¡WDvîX”Ä^ô?i‹ðºDpR!-šëòkôôcZ8\¢¼¹é6Œ8A¥Ùd”g¢Òq–m˜*¸mÉõ¬šÂU‰4ó"Ÿ€ EnG †Ù2}xú~)—[ïÚvv^ÕÀ˜^?PD”ÍÃÖô,Ø•(%_ŸÉ,€¶ÇŽy¹³³ü`mmŽB§À÷/ZHô:aÖÅr­ƒ5 ^‡ ò.B‘*H”õ×3îˆÔã4×V=' Álè8A§ó›† ×uŸÛ GÔ%ó *¬U J»Sƒ‰¶ƒôí¹¹$p@üý&ËìóJcx=0Š2EÜS›õñègêY*Ѳà°'Ý’Žbƒ½=Õlî}49ù,ˆ¢é»ÏŸ/?ÝÙ©[Iâ8_Ñú"3Ýø«¸¯« ^ÇúZ¢¬SŽ_ll˜Dð©E`Ëvh› žMJýÙ/oJ=D]¼W8[«…Ìæ,R$}½Ç0ŽØîàeŸMºZ¸œM.3ö§€3È}–Çb, ¤R`o¾]{]·²èúžÇÕm€¨Éä¾ãì½wùòÆ{—.M<ÙØX¼¿¶6¥ÝÇ:Ü´(Xôš|4S¿N×Ä~ÝEHæ{éU‰;ª ¿21ÐS†FQФ`‰²'°óqI¿;Ñj½ôaéWí4H§EBÀ÷¯±¯#a÷ÄÒd¹Ž#ÈŽA ËŽ³ò°yjHöwÆËÇÛW ;§2¥XÖ:õŠ Ù{J`ï(ýPJá(m ð ‰çØwál][Xh¼ÜÞ&ÌÀ=¨¹Gù,öˆÙ+`ÔD`¦ª€©Ç¬LµH©èµZÜ}útÑqœ¹·VV^@ü{ñb‰îm¸£¹¿A¥÷ +0Só+MßÔåQ¯5›¤®®¯_´67..-ýÆ-•>·§.T@–U6M’Ž>K¼eûNV«6{¬¶Û‰y*õu¾3. vÆ]ûõ^ÿr7+TÕ–5ºÀ$…X_€©q;W¹Ñ ¹PtŠÞ€*`8ƒƒ5¥ê%’I„€ãîûÒ=h®noσ fÂè°{ZG'2˜PT<Ϭxü¦îA˜&Öf¿gmöS›jeâ°÷!ÁWóz”|O|Hœ¥â11Qg,z:Hb«…–ç¹Vµ\²lǶ¢$.mn¬»Õl^pjõ_Â…¨Á-¨b¯dŽÃ˜€ÿökøªº±3U©„ c±Þ $p¨<‰à¶=. :ÞLP¢€²‚à`fªK& \1Yˆî3coTò€Ïà`®îW©p¿îK"¨ûRÔ§¦¶.ÎÌ46;Ùû/_ήïíÖ¿ª{P”rl>÷¦î¶Þù•‰ÓpÌ%ʦõOGXÿ|“ÔR®IêgÏž-âùßûúõ_6kõ{,ç†à³´›ªæ¤ª<‰S¶Üd(+2H`x]yÏ* Œ à ‰ Gv.(èÄÝD®€x^ËDL^‰}ŸÅ0n÷ jpºC…à@>I·K’ êxžÇf£ZÝùþ/áLÞ_[[ürs³)Üû«¹Ç¥î®`4]°D¹h–€ ?sMRu‘ïÇç¢8.ýâîÝïÿèöí9¿Vÿ¹•¦%¸¢ +Kº•²Ìcy·DEÿqîß;^ïvÍ>gšÆðÛ#|.Njí×ÿº|ŒƒŽU‡b–³mKÄ(ƒ î—˾/”@yŸjJ ÔÊûnÉ`÷ÎÊÊÆí Z«;;…îAQÐâ(ë?Š Šr \ë·'ÐÉE:³‹–41ðHàëå¿t)&¡vvv®6ã¸YiMüƒ–ªè̯[â×U* ¤ÞS+.Ž:$0Ž| ïq ƒâól¤Ë]4Kp¨ Ê"Œa·£§ ]7T³eܧ{PÈÄ!¡p¬ÒÇ-ÅqMÄ­rYŸ–Bøü ‘À˜~ DpŒH¬Ãõ@²E ˆ2˜«Û<.-vå4–° €e,W<¯:Ø'ƒ:p®o+÷@(„"÷ €{àæà(+íœ ŽZ‘øUã”û“F“T={«©BæÀ¿®g0ȹƒ ¨þü³Ï>zÿÆÍR½V_GåØ8G"}[µ·|³9çà’œe»¿…÷|K Œ/ŽŽ Ø9eíŠà@º¾¨2Ä@¡ìÀËÀcœ=(2­¸ŠçJ¸ßå¯2€h¸BÓˆ;y÷àÅînݳ­‘s›G*X’X¤8_Ñ=ÐMRá Y ›q2ÌŒBZx‚™ƒ$‚?ïÈ/,âî¯îßûHÀ ˆ ÆTÖvLS×%þ™À•ÁýÈô"¯WÎT{Ù˜ÆÛ¡A©|/ûURvkÆMBàíþAUà…®Ë%°%È\N!VÓ=¨)UpÀ=à‘îÁ÷®__ ¢hê鿯ük¯&²´xíÁQ–Ôì]0{ðU݃¢&©%5]Hðk·€ÖŸ[ »`Jâp­H V«e¢”ƒë&¢¤›ãd5h,2ÁD¥’YxIÙ2®ˆÆ `¼½`Í`€R²þÃR‰µ¬ÿáãßGÙU`)j¥ 4D¬“0 ŽsH C2D ’‹®-,®ß¾°\¼±±tommº;è—œ€ÛzM‚8jEâI6ZöÝ~_-}Y-"øKF‡£®r g1 |þäñ{¾u«Ë,MVsN ˆšž—0ƒ„’M©%‹9›Ë²Éì˜Æ ‚žÑk&¨è²XÜþû|_,ú§ó·'%‚4Gfü@«‚D0Â=¨Ð= ¨x@•3Ú=0ò D’ÑÂää®ræAÓ77›EîAQwŽ“D–S¯K:>Ã:ô"GæØj:0ÈUl*"Æ~ùÅç?üàæ[)~¿,ëˆ# µÌI€Ÿ±˜’ZÝ)¦% 8§™ÆðÀŸ¬V­…fSÈÑ<èÙ@C'´˜Ûó­Å@ù÷Û;ú€¾’&ö «åäZzZ#ƒÎ$ƒ¡KWǸýáìA’p ²vê:h¨v‘eX‡{ðáåË;.À=Ø„{°öµ»Ö*Z~Ñ•(Ä}^팲þæÆ×îíîVùðÁ·¾{ãf/uQÇç#J ¸„›K‡q=Ò¸TJqmŠÖ}œjßø‹Øç±WTÁLW^wáTªf^ØÕ ·<1éØ6{9¶” 4´:h¥KqaðÙ,8ºÖéð}í=®´‹¢Ï1p•a°ÛdÄ=`–aßqD^CÍ$­4¼¶°÷àBý܃ûp:†{p˜¡së˜À¢9 â2ç¸MÏD øTcœBT§´øšãxn9}ÈÏ|¾¹9ݪÕ>¸±teÄ€?ôA%Ù$©Âà A‹1Kt6¹ëTÇÆ à €Ïyæ’òAié{åÊ!Àç"ü©+׵؋Sˆ·VÁ`s¼Í#µ*;ž\Àçá³~e ‰lWÍosý=רç„ÊRWÉqH,J¢\éH"¨©EH5EE¸—ŽpFüu§ÿôìÁIÕ@Þ%`â£d~ø:>`¢—ŸóòÕ«KK“SÕJ%øPìJú8 Ë(”ÉYiÅ÷S@f^÷q*UÀXó<Qø%ÃâÓÒp0uJeôdz?Ž™†ë²…-žçˆZfW_N‘J ‘sÑ¢ ^ŸÒ9Åg& Œ4„!ÌÞ¬jCYŠÏɶƒ ›Š ¥¯¹òƒS”(á0åX¸¬N÷€d÷ ZÒéÆûD0t x4݃'Ê=H•{0ªáÉIQ¡åŒ•›9 $jJ0+ Èp LôòuLâ)ÿäáƒw¿{ûNõñkø­¬ßÈŠÎQ%IXÔE¬ã``çÚ*XtyÚH`¬ŽØ˜n:_¯[—§§­ ­–ðï €¯Ç¦ÛeÕœkήî3ÆSd¤‰´T.J‘£5s ÷cÛ¶€5Æ Õ†«YC%Ð2Ålc>]­Ò-H:$(„í~?ãòã6c 8OùÙ|6K”•|©*å8– ˜K ÜÆ ÊCº××ïîA;ç8¯q¾ó7S$OÚQÇ,ƒ˜Yªê¿™|/}=‡ñ€Á ô³{÷>üá­[{ ß>ÎOï1ÀNÕ‚B(§„dŒsŽˆoŽ]€Ó¾i«¿Ð_œœ” T؃+|a `…=féÌÔ㊳‹SZrñI¸.Óˆà%©û¹—ô¸¶ #§Ê_‰„5ÜNÄÒxî¶ÍÞ„ RqôÄâ6ë 4ê& Lj`¢\Žà*¤Œ%ì€ °^9h‡ª@A_öÜîA÷o@BÐîs Hã…îÁÆ ÝƒB7˽.A÷TtO@*& èÕƒæµe¡î‡˜¼ÚÝ™XßÛ½>Ýlu¡zx-‰±‚”X\ç®îûqj ×½¨Dã©Rc8ÂꓪhEwß¿À‡è ´øÂÒ¨z®$!Ø«ªT5×¢WðÂ=þQñ»€Žs 4 ˜q!ÓøKªt¹Ðßã×ÜüÝ÷Þ[÷ärì.\0A¥4å9fL@¨5+Pè ŒÀ)ÿ%Xü«ÿ\£1´ú ü¶añý²´ö´î’àfJ¦•‰zt¸]ÇHhðÈçø˜¥ˆÁR$Ïs o‹1i»V’ÌôÃÈ)­¾·[ñK!OË^UÀ²ã!Þ¿OÐüÏî¹ x¾¯ _²µ6+“úl± Ÿ•Dî ‚*®› EºeÃÒ"÷€N®‡ç}±<€{P6݃Š<ÖŽqÊ=˜ÒîS0Eh[£›¥-£tO0SªNÅúó4øÐí¨D¡¢©Ì~ú÷_¬Þºµ²²;NÇWDÐǹ P]pü\+CHæ:-*`4ÀO¹àg %| ò]iñµ¬—à¶íÞ§…ÛMÜž°Õm¼¦É#ë4ÞiÅ·ßʦ¬4mì/CÍ,Ïv¬€DÃW,7˜dJk¶‡^ï½h·®ïïMÖꛑã<Ã3lÝÍdy«¾d×µÖ-³0ø;ž,3Öhûš@ .sFwC=s`k¸!ëÀ=(›î«áÔYÒŒiǦ¦ö.ÏÎ66ÚíùOž?ŸÝîʦfôÔ¬R\D ùNHZxÇ(ÎÎèœ ® èóñó=õÅ~°úbñòÜÜ2pÞ 00HW¨Ç¼ C*ì¦ 84+0V§ÔòÓR¨9|[É}áßÓÒê`,8YØ›¸êx A?…ã$wâ'viÂ÷®7g¹uA.ðë©ùýÄhBa`JVÐWÎð1®xÛèv[Ü—'&槃(üÁãݽ½R¹¼Þj4^ĶýD h²mFâ`ÏÅ}Û°ÔŠìC@2ü¾ìf¿Ÿ06À©­@æPî88–uâ¸!H@Å šÕêÞoß^#üòÉ“æ¸ÖÁaË:\”Ä>"6ãdjúÓƒ¡(JÄ‚ó¯Ë‘úüÙo_»¾†s7ÉRí¾$‚.[½á·‘Hcûû*à@–àiPÞüÁ/ÚZUkC¹O«_RC§&d=v ªI u ·§-¹ÏàöÌ”ç½×p˃ ˜¨Ðeëm€Yç«3òÌ$pÒ‘¡Y\èÂübwWtËQ„ЪWÊ×ä``Y/ëõÆ—kä;ήÍ^zl¦iÛ;øþ»$ÜfÿN…ƒÖŒí³ð¾"Ùe$ÀzùœU°¦ëä"ª?‘³ÁqîPF•c›Qš6[µZçßygýñææÊ§OŸÌæ;%›>~QÖ¡ùxš›Š9I< ¨ÿ¿¬‚†tÃT‚ÐÔå•EÏ÷wñ›¸‹sÇóÆó‡óD%@H ¾îXœ†MËþø]øË.®çI«O?¿51˜&qŸÖ~û,wüÃܤç}0é:7#!ޤgð°¢Ï_†øhù)I©2òÖ(¡ t‹mQG)„HßëþƆµÕï—¥Òårš^îÂ]¨5š_øåòöÐ}ôl[ï;nšVHø.~£[ 6,%’^/e R.µ ˆ€C‡Dp÷€D¨ø@èy‚p»×OÀ5è.OM­ÿæÙ³åë¯&‹Ú”™Y‚ES…' &*؉)AE }Õ„ÄT"J¼àº{ø{žŒ pE€=f@‰XEÁoº 8÷@Ë?ð[¦©Oð3ȇ‹[vd4Ÿ…â&pœ€fp5çpž{ËsߟqÝw`aÊ€OkO+Íb¤šZìºêmW¹Ï`ÅiÉ™V€’cúÒñ=HV‰j“¥ÕK¦*âð1&´¬Ë>z­f¿ÿÝz©ü^­Qÿ²\«ÿÆNÓ E ¿g;–UªOÊZ¶Îj€­Í7A\ЗiÉ#‰à8÷€ÉE\š\Vyì~„½Y!$I$@%Ò}ÿâÅöÊÔÔÒ¯ž>Yì€Èlë`BQÞÊê†t¬`<À:\ýHŸû|4/“*`*`¦`îÁ„pXÉuY¸•Äu!Ò¬ƒK…OMzð¹' ~Óß8ˆ™øÍH>{ôëg•Å_ÀíEø¹×|ï£4Ž'Jæ à«b¬NQíä··­Ç;;âu¢ÔÚ…ï{ÌP_Ž)¬[[Ö}ìô›i±9M¹ –f=]»=”›að6È`¥Vo|î•Ë_Ø’ÌDÓ 1‹/ŠŒÉ&›*¿ ¶¶@=Iö("P±·Ð=H’’*]V‹!:"sø»lŠï*vÜîÁ-èýÁ;ïn~òüù•û«/¦ó‹îmëø&¦Ç‘ß‹ªÌVõG­lÌrÓ“÷_®^yçÒå—øß–Ç®MŽÓ q2çƒI_TŠ†Û”&w`Ì¿$ç¿+L”ü-¶¢à·í¼f·/ÌøÞ¶}½KV™À×;ç>XïAžCV  ™¸ó1O®1{0tØ9‚À¹é‡Üá"ðBH2è‘I½ÛKK}ª¿ºïR? ½ì„à?) ÉÙ €£H€ï÷`ssúöÊÊ4þo {Ó•À؆P\' 22Óœ·2Lþ¦Á˜ ÀO«OÉðÏÀ(Rî/ø®m]^ôýgI23`a 6ÂT¹úê²²íCÿož>µ¸f,4@_äßgÖëeË™ÑïDíüŒûp'açeÚ²ˆi¨ºyš>~öt©„ó?¼uëµjõ®-ód¶¢€Ë¶Yå²;} tñµW;¸iî+ç›wB)rD–!+«Rç}€¾JEÐJ ËHýÏáûªårðûï¼ÛùùãÇWžnm¶\ëè$¢Cþþ11]F<6¤WvÄ‘=^ln-/ÏÎ2ÐÀ¹!ÔÄÊJ# Ô´®©’± pJÁ¯¦òæ, þebªâ8ïÎzîGA–!…Ï=lk…l)àÿµ~$|˃”Àfݯì˜ÎÑå›þ©ì¤}€Rõ¹÷ö¬§Øëuá&ÐEP „Ø|ËýäÑÃï¾sñÒ|­Ùü+€R2Ý΀m¦ÏU«!,5ƒ‰± ÎTåi‘[ gxŒhx¡ ’(eɽ, ðžžçbæÜ¨Þ&àq6NýÞÕ«½…VëÊ/=\|]¢?ÁÏ©½Y``‘ÀçDAÝu>œuÝïô I÷`õ«ÊêëN4_@æ~ð‘1 à6DÓµÚ{0]¯3{/šm4º°ØºœM¶Þn×§Û­áè¾ÜÛ«oõûfð• P¡ÛxϺ]ë%v¯R_uÝ‚gë—J»»“Ë‹‹ÿž’Y¨XŠ/Šdʥʴ’ÙT¥’á·føßç+•¼8D\ÎÌâ‰ãxl~B·€]@ƒr’üƒz©4 õ'!pM>oÓë¹83ÃsÔû³Ïï^Iñ›¿6ÈÍÀ¥Ð2©‚jÝ0˜ñ\oC@ç¤Ê2í\^]Åo‚«äæø<³Æ1€o<øYk¿jX~ú–èVãöÅ–ë~4å:ïv墚a3 nlbñ«/¬××øMÿÞô]cu L¯LN¶[­î•ééM±âLúÊ´ŒìsúË{9GK\)•²w§êu±Êðíåe±ðß§¹“žìì´à–8ž}ÐÜèuõOA¼ÐUƒ†5ÕQgug»õ|wçÇß¿uûß1hÉ•‰V)ËœLöÛ;0x{rª+UŠŠ’öò•‹L÷@t@ÒÍO _Ø 5„ïÏ"L;.½åZ|å$ ŽÕJ%ü>ø°÷ÓÏ>½ÙV³'ÝF¹YQ=¯üÿ³÷fÍqœY– o±¯X $ÁÉLeJ©Ü*³J]SU9ÖfÝÖÝOÝý06oóæ¥lþʘÍO¨™±©é¶¬ìꪬ}SR)Qw‚Ĉ=|í{îw¿€Ãá H‰fn±ú¹÷Üí\°¯Ý½3——ŸJÀS’èyÀ÷µa2àf;Q x£+Î; ~‹¼(}{ŽnðAV¼!à_!Üe‚_SÈŽñßîß7¶ˆàì S¼½vãäÕû·VWw/ÌÏoúÿbÆ|D1qÏó\xÄÞ‘ÀÏê´J€Ï;0q“›Y+Àv0|DFÀVºùµùùÂúâbáwˆŠ>ßß_¼·µ5¯A|/`¤Äðº1à„êú \ß/ÿê_þùúðÚµ_×Êž_æ¢^Œ,Ý,;œ‹3æ•L¶' é$³v$&s`¾áû@ø?„¾2ˆ§ñy°a1²L}Wþï¾÷¾ÿ—w¿¸±Ûí–^ÐkÅ’‡É8',\YY!Kl¡‚‚µãc/m»@¬Í‰ðSJ‚§IÀ7üæV¿oÓIí ÎÏýü¦‰Þýyº^ï. ü¸<£øúÿýío¾¡Fô¢ à_\XØÿðüùç2´l}ŠÃ‘`Û츊ƒyK0@@×÷:‚àóP$Ã,½Å×duä`p )¥Y©ìü¨V+‘1(“!X»·¹ÙÜíu+Vìì »ü;››^è…ð^÷îɵR™žÔ2X#LRÙ¹/Ì ÷VÉ4‹Å4_ÆÂxÚC¼_Œž(°û‘ê:Äàƒ¡î§ç÷ïý›Þß|uïú“Æq•†’­Æ‘€? øñk¼èbýѨiÙ6A!† |ŽXЧòAFáâ3ïØètìZ¡À”Nj$rjÒà³d¨lÿ¹Æðÿ?þ¡FôâßlÜãÿèâÅf©´M”¾ÓÐðåщÂ^±1<"d©#HS3ÁˆB?”Á¯Jt¦ &€E29eЂ›­?ÔÜËççç[—+›íöÊ?=y²¢ >‘ñ:Ñ0„f%½bKŸßþËdGòz¨äX]Ë ¶Äd²}QÈ=’47&«ǯCÞ€Dlå´P… Ñ?RñØÈK?¾|ycV#Ö=héËL²Ø€¶;íÅÕ¹ùÇh¦ýG—( }'9F‡{–NÀ›DýÉ‹€JçÐ×O±\…[{U[/jükE˺հ­÷1. ýyKzf¿M^󃵵í[++ øm~—âù.À?ô¼>€Ïy~œè~Œ°>}Œµ†:%¯¤†ÔሀAÞ‡ €RAÔ~ÑzÛ¬V;xëÖÆæþþÙ¿yøðlg8(Ú±D!HqMEzkÎ_ñùÏ?¾~ƒ¥Èʘ ½/¨ãB²XõB!Œ À„“*hFúÐß¡ H0¬@ωéºPú¤ˆ%yòRY²›^£éÙÐ÷¦4 d$€d'Ö¤0`»Ó©Ÿ[XD%B€2ƒ_±08›¾ÛS#ÖoEðNŠûÐ4tÀ!'F_X­½†êî[Ë›æµeÇþ)²ýü³x~œ•õRiø»W®<«•J/:®»OéÐÉÜ%CÐ'#Чkë@âËEò‹(®§¨®/I@^Ja(Ú=Î$k¥a[4Ù@…DBÄž`Õqn£Zo±-8:t]›¯V{ÿæ»ßݼ³±qñÓÇVâ\]:ýØ 'ÐétJ¿úìÎOÿöwútràu!{Ϫ˜€Ãë$&À† ¡›–c‹km C íÄIX úüÐB€Ðç`)CÄF‘Þ~¤¯ñ ?º|Å JþÝn·lNðüÖïÜ0àq«UûP¿(à/rG }è$Ç‘ÆÞØ0à]1¦Pt©åY©Ç41¯)¾%”üÓX_r쟿$øGÿúÖ­ût¢nSœß"Pµ~ò°½ëÂ0ý)ð£ t&!ØD’Œ„– ÔFï€PcYbÄ8Eabx¼v…ž«ë«f›Á{++ózç¿~öÙå@e«ÇF` lªþOüà»Ö]( ÑIŽ5å£rjðzù!=whŒFž‘Ýúeäââ¾q6O¦×P(e¤ÀR×èGÇè"›ø;×oüö—ŸÝ¹•¬d¡/JAá´ˆqëïNF§a«ú?„aôa"À,Í4#pʾ-êO(ƒFz1»?Žý ×ûqÇó*ä½Ç«¨qAgߟ߿ü†pÓÀóæ=ôV×óöz£Ñ>¿Ó…pÝeˆÃïï©äŸ‹Æ l=Cy~?Vµ‹ì¢è‘^qi)íºf!ï£üä •^A®èû`òæE:*Üz=4Ø„Ž3¬Kî¿ýþ‡½?ýͧïhŠqÆ™_nl\X®7¶—aN2ÙXF`Gô¼kã…ÜiM/ÉUiŽ— Œ?.pÙ>ÔyU‘ 1:ë_ݼeÿÉ?þÃw|éHë‰&„: ÈÒˆ_Ð6¹Õn7Wçça0,V€t ¾‘`·72øÎ0dýédu4õÇtŸ¡~0Ñ·jÁ÷Ï]{H`ÇŠ/[šeü|sÓØ!š¤Ô—ü_‘wÝ¢¿Ý#ãÑêÀ¸n—¼XÔ´b›0äÐTî]ß3:z“ ÉH#)Ïq9·Ñwp'þ¢t£Èä¡ûO†€Œ^ßËåxà&еu²c(©ýÁ­ÛÁÿÿ›Oá9‹†qXf vpùìÑÃn݆6‹cûè;dH0OFá@­üÞQpGSòFJ¢0. &ÀL£CÀw<ïSË µÎ•›þÆùWï¿_þÿ>ýôZ|yü“Ɉx™"š0•ü<>1Äêš^Ž €åç(Jzÿ7zJÐy¼?¤¶4k@œ:}ðþ hõ%êþl©øÝ}/C¡ÂPàA«/¨ÿ§d¸{/R"þ¸ÿàÆ'ôÍîô|ŠûÛÃá>]·áý‰V÷éñtæÀs|½;f5GÊ™Xæ*FÀØ%faÓáäé Ð|iµÅ5šl ( "ÖAàþðÖm“˜ÀMm¤YI±äF#û/î~ññÏo¼·'3ð8X l€ª8DDk³±€ ².ýQ”&ÄA2þ½¬çFù1êŽF@VÈZ ¾oêŠ{]únk¥rîÃóçkŸ>~¼b¢Pééø(%I˜†Îd `VØÃyÄÀ§×„kä•0K×b'Àiðm{ÿ*¤äý`±ÑðS§/yÎR3ýg ×ýqËóPÿŠ4È`pfƒÀÿß<ó1#€ŸvéÒsÂyú}ðüm×íÐí$ýúâõ¹¹Å¦ÃjðÇé`•Ç ÓÀ7pA¨œ¢A`|Ÿ î¹÷U¯wÕ‘Áóø >ÿäÊÕÒùìÎuüð êŠd^ÀæþþüF«uu©Ñ€€È>]VË5ÍA1—‘±ó%„ S}è2Á„!Wp»œÏGè´ð¹4jK@7óWWÏÞ{¶·WßêvËñp& øñs’{ŽR*ôø¥±÷WÔŸ^r2ÄT,ɘy€7† œd`>hµìùR‰[hégžï7TÇš~–ˆú¿xÞ™1õ­xÐô÷°–K¾&]-B`©ZÅÈêf`§xŸŽnWÝÖq?ƒ_†]ÐÚê èÝø“ `ý7RN¢8ÍDH0ÆA¢ŽhôÈ'FªÕ–§‰qXºª€É¿rÙùéåË¥_ß½{„Ù=.;μx~e¥ÙüŠþ§i1´ÁB ÐTÞK3lQŠÒâ^^ƒ_‚˜HâÌJ–a”MEÿ#xÖíC”Œ#]‘HÄÑíâGW®Ü£Pàæì à§±€i‰Àäý½ÑLRïxȱ ø?:¤•BOÀ7q!Ιr¡þð ºßú}K¦ï}§ k¾@ý=¡þˆý1ÙçÇ­¿xüðó«W7†AÐ(ªÐ3ðévoÜð†ýP{^‘ôNxÿ4úM ÿÑï½7E ƒ•zè}ûz±¤>Ý`ŠóþHŠ¢”µ6¿ðd¾º±Dž† ô{½(Oúx®3ž!¯æá‰I‰p£6zûšI<ëÏ‹Ax¥¶'s“,å¿§ç5‘s@g$gÞƒ€ jó¥|¡tûìÚÊIú4DÆl’¾€a¹^*ç%ÈYˆ •1‚ŒœÁÞ¸<€u‚ñð[¼¦K%ÿP+æä¹óò$APÕgÉ.é{‡!€÷ß%OŠç×}õ8Ï6›P…mÑ ‰$_þÀWµ~º¡äwþ!ý[ü¥nÊá%Ž$ƒÈú>øqÁ@ðz†*Ù“Þ„ýÜ¢Ÿ÷èØ¥uB”½_½v_Ÿ±Ž—¿à%žîîž§Oã°U‘+JÔ7™ùžù¼:o¦ªs'óAïÅÛ8¬rËêŽð^|nï’ÑÚ&#¾}ãìÙ/k¥Ò0˜Pæ›V!˜t³h÷ûØýàÈù•“kDZR, ÍûŸæ¾)ú¿ÑéXõBÁ–ØÂ¨û³|7€ø×râýãc²hý½óâÅxlwü-Jìke'€Þ×à"60I›/@'àÄÁ˜Bÿ“Ôš÷¿7z_¦Üɉ@é@— n[¼oP݇ێO*²õðþX4jlÛ¡ë"¦D´R.wVÍýgû­†­Øç´~´³½Šáz‡£4s"‹eK¼fTâ¦ÇQæß3ò3X‰cS¬ç݆ͫ´CÓû©8aXýÞúŧÿí·Ÿ]1§Ðÿ¬dßĬ2¾À dÚoÊv'¹æ.M)Óž&¿M€n[-çDé¶dJüOǼåûß%Ð^PìÏ£±†šG¬ù¼ÛÅúÔ% ¹VÛk“‚ú-ˆƒ‘:”ç‡qÖøG)É¿,êŸd®ÑjeËŒùRÉ\®Tx{Ð_Ó“†òŠ&Ž!ƒƒÀl+‰o^* <$±iÂjr ®”ü (¶]§ßµ/-/ïn¶÷gdõù°Õâî@¼àíÁ Dï±f)ÏÏ‚¢¦*…±ˆ”c ²Ê^÷9s²!ÀïŸ5G’Ѝ|à@€X ú rd ô~П_¡÷R]n4ÏW«+ÛÖ˜3䦡4i öúý¢©ö::’crt% #ðF‚i´ZÖb¹Œ8Q¾(ˆ{ÖÑüƒî?òþ—àý‹ ïº;½Þáíÿ¹›MèØz\¥sÇ5~6†¡Km£$€iqÿøio.-™ËÕª¹T.›t’›ôz-xo @|“ðŒ\XxF”Î/#‰:dÐïß•µáH Ф8>ôtè¨á𣳾¸ø¼ÝÞ¿„ò'„OP Œ«[ìt» µò)?”„xãq,ñõµ»ßRŒ@rȵbä,zŸ`=zOf3Äè;­AÀóÖ¹óOõÛÏ®OcøƒQü~ekÐ$f€1 RQ´†Àâ¶^oñ¦ç7ø'ÙP`jsÛx µ•·,kºf^ ¯WÙLxÈf½ %¿x¡ÿ+õ:Ïò{j˜‡)µy)I¿´ä_õ?Dû?¹x‘Ÿ{½Ù4‘ÈDCN´y&Àê-Ä(÷!ÉÉÀƒR½î-¦ô‹E^òAl Øa LWÒƒxÞˆ°S0аV ûy§`Ϻ»ƒAÕLIµú½Æb­†çå5çx-23É;é5« –¡6„3]f4¶]¡Ï§ŽÜ±€' ÕêZ ÀÏE áȲC:/‚”Ìk˜’¤0$М1øé:Êfo\%àD2´ýÒ ÀnÛy £jˆÐ§øïÙ)Þß¼ÞPuÙ1ÙøvÉtÐÏïK/ ®G<Ö«lÜ”¤\ZæøÍ%¢ùsÅ"·/ËRG‘b-÷žCÇ@§›Plºm²À…i"ÎÇŸ‡¶]/—ó‹Äö± í?è.Ω9|”²ðrQÅBå½*„E²­Á`Ìë=?PàGÇ›òþ`" !Ø&ìøj•XZ÷Ûë0&}~]¾d'äÜ;bô:Zô½4é}í xF,àš9ø¨x ¬*ɾ…´R`ò¾m%J«ÝUEU©ñضúÙ2Ò7Éœ8€Ú?ÑKnqÂòf^€‹;ïnn¢Èí®¶ /ÛÀ7ñ‚迟(bëo¬Dñ?äþç±p…Ìò»bÜè Öï§€>~„”ŸÁO^Ÿ“—HÒÙÊë#ÎÆêñ²©¶—ˆÕT"\cí8+xEŽèx‚ù°ºýÍÈ„²/…,tzøÑ‹š½`Ë€ÆQ&tõöá¹Je´>7ÇI@¾[(d¹õ Ÿ‹T²qjpܳ}ŒÀÓ F€×«Ñ{%ã†È¡ˆŠvé»iÓÑ‚!Xi6ŸÑww+Þ¬ðyØ߿)*ÁÇ)Zj@ÓbEåƒM‹Û¤>€7ªxâ è¿|1èËÎ HÀªv\[«×íÇûûL÷q2äåd€¾jÿq´ùÃâ1¯Gw}½F› Z|E¹&QžKköÉÌô'Á勉O.ª5ã.©Ë#–’V¥´YlšJK só#B盃 Ëêášþ§ƒòµ­¦ûð>0EˆJײ2ÏB¥:òè³€G´Lóh. ñ­x8]qNÄ#I¯âûÌ0cœÒû! À¨È¨aˆÜÆ>®¯®¬lýæñã³Hn"܃ìÅ€á/”½ž=ØŒyzelSFoAð$Ó!úÁàÇ@Õ ƒ5xþåJ…ËIHˆádÈ©-8c„&ÓÐèHo–Ë®wòØn¨D*ø¡ëÔãŸEû€ŸŒRNÊkÐ+ȱœ„“—¦ÚIÈ[ˆÑÒL:ª¾ëqÓ2þ9ÇÙ- /ÓÜ¢¿éÐÑ,k!¼á8m¹oà*90„I¶VâN;Ëœ8È#¥Fþ¬CuÛŒTâ+­à•œø)F`üzÈc¨ Sè|ú*—ÑÊtNn’1¸º¼ü"΢ç¥MÖL?ù‚gqϦ~¿ÿs(€ùeÞèä߉4öàùÁÊ Oˆ!9f«ú?fÿQ¬~IôWýÇâNYЉ៶4þ¤–~àf¥‘Éø.të"=ßÝÝ—6â{üüÉ'ü)ϯ׫‘eÓ\±RL..Ñ™u¶jYæè Ëxc˜çª×Iï\4ï™(ÛèÞGåRùŽã8è×»H䇶½Kٵн§’‰PµÍ[Ê{YàOã]×B‰£Ã/Ÿ‹†â:Èövfm~ÙËY2ÏÒK„(…0 €Ðj ö ôø]T6è5w Nn»5r(eÆã ü´å¬Ó^+~?ôN À1€Üþ«€`‰1¦™P¼·³S¡¸ã|Év,þ…%éË °4U$#¶áº¤ŒŒðÃU–õRb%`*e™Wý?“7Ír%{+ã`ݵ6z=8ÞO<¤Á ÏÓ}QhÿÕ—wççïßtÊ…Â V2¥µjße‹^Ç.=׬4§PB›–œeÛvW«ãÚþ¸D ÿ¦€À¡Àv¿4ŠEȉr&z¤¿ûú~ÐÝ‘&§d@_ârpÓ.ÕBÑÇ"h·Vçù¶xÿe$ÈtÐ)g4«°è ‡èg0$ã-šõ-ÅE(eKJÿâZýoø“Ú{ÿ|ã:»Ëµ•U*E柼y.§–”TM5¯€¤ß™|übÏ÷°xrï{ºð:rñ\,õÍ êÙt ã±½ ˆØý_?»óý÷áGw"Ðd¥²ËÛ Ï[\¨T¸jGª"¡¤þçJ¥ô?ààí>è6ôE*<80SÝ䫸PlmD‡åý¡HÝ×eÙ[†0…©¶ …J¡ÕÕXà ¬Ùd‰QºmÉ“L’{SãÿtBê¾l€‰°B08«}š&cð:z XÇÜWwä:¦‚loìÑ!‘-àqäÜÇs ¥—%KKÉyå@%ŒÛFhW¦  ?Ù÷ýQ[£A¬…kò`.²ÎJ'ý Ùt«=¿/m͜ŧÛHrÝ›®Gr¿7”þúþWk_ºüÌ<(ð9Íœ³¼ï{ÆJµÊ`œüD ¢Vk‹Â«ÐÈx‡‡?KÝ븰½Û ̳µšÞ}ÂýÒäÄãØó•òèb¼Éék¢T*"’ •Z€$GßÌœ¤ ¦Ü Š©þxG3€¼m•šZìSS0&érŽ5d=Ê™Rãe(šJ‡ ÀÌ;Ž9!æŸ ÿîÂù(^nÊ)AOŽÿM•¯(ËŽÂf»×»àB¯=8\4¯Èÿèñ÷ÆîÇyŽ0 ˆå5øõ{ûí³g+ûý~‘›yèp;î™ÑÐã!äˆÿýúÜÜ t<úKM¸'ÂW, šdô^×eõèta´í JN\oâ.G°…r¥‡•h–$ü²Ž™­ŽTD¢Ø²ØÑœ’1O Àkb–Æàm1Nä6ã5íäOZ ° Yóާ÷‰F¨–¨Ð8,JItàea‡9ýê-C8îlmYúõ’P¹ ì)$Š:n­v¶È ÄšÊ÷Å“ûâéu"+Š%a4†~¬ÿÚ•Dž6q¶2Xü?÷èá*€Ào†¾¿ô°ÕâÇxD×(þm5ªÕ_•Øx¡‰¾«’a†×ÒèÀ«çIÙÜÄR0<~¼,͆¯øRÎå”P¼ˆøÈ{c#@Ї6S¿4vÆ¡Ìd¹¯¾2Ž¥úó•"­2“Ìy”¨PŒ×PÙyžE°d~Ü‘\Ö”Wl#:ƒd%ò8À´±x•¼n„1ú5xRDùU=éã×–^‹ŸÀ@àþG;;sí~¯sknn­'¡FÿòÑ£±2Œß¹fsÚ†žÚm § ±ËÀYúVØ€~žøj—€OŸmÀF€Øz6,ÛÌPEÊTc‰»õf©VÁËS5ö¥OÄO À·s ªíèXÄ"  ˜,âÒ“šð´om¯ß«ryÇ– <<ÑxìéÃȮ՟RIÀsëÊzóÀø`rĉD`8í ‡ËÄË…ryüzN'&]&IF›~¿MLž!€>}¡ðÚëëç `ÌÑg’‚ 0~=QEÞÛÞVíŒ1 Ä›gÎ<öDë·Áûö‘ÔëÌŒôÝ€ßÈå£F=ú»ýö!; ™®Ð(#0V_¦ïŠ(”Ÿ™ðŽ É^´ÈYv¨w9JoD¨ãÃ4§ÁÓqàW}ÁPìËG{&Œ'ë÷úý‚Kª¥”5˜8/0!wdRÌ\YiºëõÜÜKŸG%or>éH'Ë@I[q&!R¯—§Ê(n7‡H”ªÆI½XâOD=Õc·k<ïtx–Û›¡ä#@ï´‹…?úÅÌ—JÆ¥¹9f` (="ÚÿÏžQ`¥Òp®RÙîŽFJö ;}ßEë­çc­ï8Èʼö“Ý<ˆÛ£N'üÎò2ƒt‚–û5dÅX”³²Á£LàÁÄ/R Ä” O:"‰ýѾM ÀÇ褄P;úÔ9VçºI÷\W@¥ÇAõÉ£EAG)`ñB. ɹù(Т{Ž×Açä°ÔÒNÓ?`3'zB5ÉÇ bòöpdÜÛÞbV`òÔ¢Ô§ÉhÃñ¾T|™k×ì&Êx/s~dúĸQ92ÿô)Ïǽÿååçz¨󖣡RC@/@(€ç^sÞçPâîæÒ¾Kd3y˜¥Cù®ƒ(œ©Ð?©%&‚Ø’§7:£":è‹&äÞ8ãp"’€ÿÇ/iÊ›aðÇYÔØª‡ èHŽ6#CŽ€J& D`‹/ýY§ƒ†¬€â5PÚ Hµ¢)"ºñ|Ì ûÞxÓ`$€ uVy³×‡ÑB^+ô žRŒN^„ÆÑþ^l©g$‰@œèiÉ+°Š]ù¨ øaH0ýËû÷Gô¸Úÿ!…^¢“üÚÒÒÑÒ?ä‡CÏÓ À‡О՘¡ú:’€È@Îëß_º8~®gf NÌZÒ¢+sûÖÈóÊ“/žTt¡ÏÊϘ 5 KNx«§ àu_(65sêKŸhÌ5P<©ÿëDÚ¤€ Gk0Àº-¨äc{ás9µ²TÅÒf ýO™v¥¿~î€rFȲÊÆpݺ˜Ïï@½ø yi¦al~=Ìx}f‚òÛìí¢ñ À{D„8¿Jš¡Àþùùsã³­­±Xa|ÿÁGçÏ?¦¿ÁŠs^vB¯ƒs#¥-èénÀ ~øñžŠÎÁ©Œ÷–W²p¦.ÛŠhÇÔó=ž'Éd.)ûkÀá/Ý‘)áЩxò&(­$b”D¶9½¨;ö$ Ø‰ )‰<Àf§=·T«ohÕBHu8y,á€jû‡—BºÄl¿IàÇV"ÑfPðíRø¬ \i Ádcôû™`XR]ˆèØ¿½vØÜ¼¨˜)ÆÈ4¦ï?ÎaÀµ¥¥½•zýIÏuÛ},>%#€Õgd¬° @Ü h¤  ¤Åþ¯åäÇ÷6OàÇ„&À¼^,im~Â(5e¨v”¿ÚÞÆÄcêD(Î ôB„>K½ v¹VëŽa•!Б:ˆÞ–À‰i– 8QŒú³|NÌQö‘1À°—e"P_Ðm—KL&“AZ ÷þöÖ"=ŽfE €¤ •þ‘œÀ/<ˆÈÃCÙ6`“/Ž„!D-qrµèñžÿðâÅ:’E4ŽzôWQsµ>?ßùþ¹sw ðû]Ïk÷Ô.Aµí P¤8Psþ·~þ¾DÚ]©ÆÒÂ"ïƒ@I» mµº»({ ËCwt¡èŽ„3@ã²¾–ÇüÃMˆøyp¦Ze]ŠBI”"òfúdè´a±Sð*.ÁA;f(YpjÇ«ôÃZ½Žä׿±$~ œ4N"é †|£[­*¾Œ ¹t`Sn‰N¾"yŸD=é€N~|ETê…‘†qÚ€½«Z/Ö¦ªE¯yçòâÒ§·VVÆŸ;La'_÷‚Ǽ4?ßýÑúúÝÀïºû`¼õX-?eúï?¤„ôZ/UÉüÃsKe‹Q°5I·U³ ,úªÛ^†"þN@·DdÀ ¡áã˜þAêç©`b}™‹ucƒŽš8~šxMŠW#°É ´`'’TÕBÞÅhuÊ(úë ˜g‡9 ÈpìÐ+ä­+Ѝ õ˜ÝÑÉÕ tªù•|qe¯E¥Ð¶1´R¡×_úÞúú_uÜQéáîîr|OaZÜo“óëüÂEÿ~×Ý#À·ºÊ èrü@6*”xW”„&‰ž²£Ë¯8úc *$àêÒòX[Aäà †«”Ì˨›A°\ÏP„Òñÿ¡û<ãx­Ùìiðƒ ù‹b|™‹˜Uæ0'†lv»<…¥ôi"îÿ–QMoµÞha ÔÔò׉Ce1Q"ÖN >{¾±äØv•¼UòH%lÜ­RW, ÍðåÎÖVD'MH`óQR"  ¥îŽ•×;º-òºÏvõÚŸ_\\ÚH›º™Fù³Üšíÿá… _ÐkØ££…ƒ½?Ñz=x-}„'¾Ú¨·ùÆä-LJNöWÝü£“­“`h+Ñ„@Òº‡U ;!Ãp ‹CÑD…¼Oýtä¥z)r8ÿcÖøýd°†áŒ’éHWåE’ À7ø'2 ˆ½whª±Õ€†o‰2L©Ph¥sªÈãŸR@C ò£Œ¸'xÔjÕ>Ã=_5†5òüUÏqÊ䑊ô˜yl¬E»¨I"öóe…‹*aMµÑg$;ú \ F'£f#°|ñâ_¬ÔëïÿÍÃ7tb0óŒJðŒä z(¥¾×Ö6ÏÏÍ=î(Êß‚÷çƒ~†÷m=„‡7Í þוüƒ@§Ùœ3± j¾T²éc,DQ¢§P\­ÀëfàŸ×9WÖÁ¡‡+*Ñ[²6m/¤Ú¶¢¶C5J¥}l‡ðó©ߘ>I|Zx]O‰TF2¢éG¦É‚ôå³ð•$ÏÕ§)ÂÊí#òà©Ùö °žìí._XXÜÉÁ8NžF ãårì5¡²ƒ˜™ž3s]QWlóÅ®>/ Ö@õVŽO·éõaõ5‹°8<77çm4¶~ýàÁíG{» fŠH®¼NÒ}Ü8öã RH´Õèàþ}¾íºØÈýÿ>¨¿ŠsG)F ÿ9Ù—^1ýÇÓtp`¸1•éÈ2X4û(ꯨ4ïnn.Ç×Áa¬6¹Z瘠Œ%“ùK–þ¿¼ÜÂT$ÿ`A¬‹ÉHúüà[ž‹x§ èô…Fa@Z[caP„?ìrx[‹Ë,еG±-ÓUz_yšvûÙvB÷ûçνøÁ… Õ^o±Õï7èñKtB;{ƒA1Rå*¨áFKÕj›¨k›Nzžè#ojß—¿Û÷ý®Šöã@¢ ¥?Hjc+Ïã»Ó’€‡NúEÓxe³±øÀ÷£‰§zû›U¯ær8AÿyÀO¿oò*µÀ?‹ït)¶®/ëà0 õ´Ó16ºÝCÍVñîHÝüs®Ùìr9Ðÿ¾§ ÀPBWztitÒ\Äià5^"LØéžìˆ(5{Q†¥øyçñîîâZb3 :¿üXg Ö 3€oÄè5åñöö⥅…eiK)yÅñž'NLÎQ¼™Z†®}½PÀ4£ÉÌ!—3‹fHk+r>= Àˆ^ŸŽ±˜4ý‰=lŸ›+Yªüåè©Dá3!€£Ní²¨ºúȃ àûCŒúbàÌ^ŸØ‹€”þ¬õg¯ÕÃAå|£Á@FÏF¹VçÌÙ˨"ÙȪx~è­Ì›ap™ÀZyÞï«üŽL?jC€ë¯ôBØèã•tG^_ZÚvÕHô`¤>/þ éFÀ“}iáÐ þcþø“O"Œû²¬cª¼ÀϒЗ7#Ï»`Ra<îP7ˆ¤G^Bˆ½AßúÕ—w/ýâæ­½@¶Ðˆ€¬îØ5”@¥o)™$ïV".dÀ›X8áÐ-H ܤ×åÃÐí>¿G×Ke»1¡dt¾åX\ç­šuˆô° êødìFÃuŸáÈóàéò\Žù¡§àùµH3™¥®ÅWû¢þ’¹7d}9z7Õ‰¿9Þ«`š †ç_.JòÏ“ä_N‚âghb,üPKuÂj0jH,jÞ_ÿÊÉø3–E߸JÀ‰ vúýh¥Zå €x^Þƒ5Q…|~tíY»O˘’€¬jÌ#‘ÅNGY{ôDˆc»Û-S(p•BÞB#Ûh†0€HzƱ¾j˜ÏÂÂ”Ø DOÂx-- ­»¼2ž£V|èñºôÐé¦úÝÀÐ"–£š²¼3’1UßSR^®'%=‰eu‰3ýÈ]6Å€ïÎèý_ù‰ ð_l6ÙûƒÊÃ`×M]÷çŽ?Ci)Âû7e§âyÿ+ÄfêÚû#?ˆº >×Çí¶>âý//,´\IŠ‚1¡ak(‰@_E{±ÎÈ©s§ à5]˜B{<É(’¥åîhÔÙây}2ø¾xxŠÑÿœ¬êÇ&êb¡À2ʼnçË…ÊxƒP-ÝjŠæ0€e¢ó;tMÞ$9À·7Œîš.` Làçj=Î0ï8CºîÉvß’ô¼£ &§Ã€@¶Õ°P]jZÉÇ“–''1vþa³®› üɸ?™ýOÿ}eÞÌ’PÿUŠýºå+Õø>EŒøBà£j+Ú™¬U[2\ïZÒûã»Õ†RjOÈ„bíý/ÎÏo´UÞD+#üCú?i7äi𛪠ÐWÍ@—®È[Jm½FåXhK3°a7ü¢’àŸÑ58ùym’‚‘:@R*ŒBë=¼ôÉ{ïïFj/Ý Ò @’f`ô|a½X …ò'+vã·†bBìl£Ãðâˆé=[’‰9j³/&Þ°ÙGÓ¾ÐÊHšH›4Ú¢}i]åŽ>ùœà±2Ÿ7ð³Z]_yܺ¿ÿî`€ÑkôJ-•õoDŠúc¡ê’éû·ÝXìŸôþ¨@EÇþÉãFÌûguu‹¼}7&ŒÒ“þˆ‘n³C€7^èÄM†jU•_ ªLà‡uUfpmùÌ£n¯wý©,ˆÔa@A€g ›0]©¤éë•e=R£µ¿_üÕ—woýüÊU{p5ˆ$$A ü†qÆ6µ3åÒå=ÓoÖ[ ´!x@±ÿÎpÈÂ'G2Ér ïÌÿBµºI†º‹)—ÿÔàÖHú#ÒB£Iôÿ´ ð:/ö÷CfˆUÖ,C¡äHšµö\·Ea@sR€oSc%Y’¼ä¤„Á/c¤®Tìì4WêõëW—–9‘fÈfÔi#ƒâ|«P`åZ]È8Q´!àPUkµ§ï‰.|X/n¨mHvt0¸È ‰‹T&føƒ¸ã^>ú`–’Ÿÿ«Žû«÷ëh‹B3(2Ãû—¥Ï¿É1?4GLs9tÝÛ»žgwEæÜeýñ=·è{ýÍæfªÆ‚ ÆÀ¸>:wîéPUJzCU2Å5r¼#A–S€§ à›¾Åà ·ÃÀ462ôaØ=?7·õ|¿™$;6pâ€â»R)àLÀŸ—Lrœ!è|ÀoŸ=;w¦VïT•t´Åúçé$ô ÐÿEã„‹åršHëãI..²¥óŒ÷ eXn[±C¿$#ã1‚ŒcÚ¤ßk¿)´¥Z o¡îЊ÷·ÈçÀxB5áW7Õz…%Cÿ qš÷=Ï; ꀂi|g`hØ“ø[Ù{N þøÝ{ËËûdvé9õLš£úšÄ£Ü ¹‘Ó$à7Ý ]x7<-¯‰F²ã›(ËÁ\[ZFp-¤±89 ÂZ²aGƒ'¥^¹–+øïw¿¸þ‹[·{ÈÚÇbé@Ttù@€Ç‘;ìù´!@mãÀë' €™b¢`§e÷gŠi_ø¹ÔGtÿÒü<„_Ü“Q,ñÚ2]…k [”#µCqÁÀ°¡i®Z¦qa¹P|¯%£½8Ðß¡ ’º¼òŒŽÀ8œì3Ô¿Q*¹·WV¢SRdÑX ƒQ#Ùä«d©—a0¿±±èSbPf#`!éÆa@N•åè [ ØÙ‘j@20‹ïŽÕG&C}5×EZ,š0”"¯ý«»_ÜþÙµëhàað[r Ðb–Á!ñ3Œ@˜`+T+üY n¢è£D,;Ñ£E¯üëDù¯øÁÌ*ô3k5ÆÀ_øMõþsœéÇj@?]ŸÍ‡áG­á €Ÿ¦þ¨¤ô¤ëYÿ?{ð€c±0^ê“/PK§aHê§ëëO ðã6i©>‰V ´²J£i,îÔ¼Ž‹nÂmˆ›…¹ @ã̉@4Ï SïúÒòÅê “€÷s²…G7ÅÿljåÑY°„Ѩøçw¿ø.ᲥƵâ²Ô¥Kg-ª-à #`&ÀoÅn›)×Ó @d¤·­Î4Ó>ÿ5=’ò/ÀgЬç÷¡ÁŠG¤zü›œé'ÚO2Ö¾¯yîè#Ï›ÇL?fþõ÷‹ï ›“þôÞ=•„‰R2r1)ôœ;·])øk”ç‡&Ec6•á¨ê¼MÔÿDç0a7_*DÇþ²³YÀß…èÆù¹¹gå|þ:1…¼•|}±e ¨ºž=Oæ’àO~òøæÇ/¹bxwœ°<Ÿìð0y. 40bxÆQ±_3Ř)1ÿ$`¤xö0Å0dJY}]ðkÊ9FùÙ *¯?Žù‹Úó+ðs¶?Rà_£ÛçsFôQɶ/ìÊÖ§¾¬{/¨æ)Îã|º¹9Þw˜uÁï.-,t×ey}úù\Á²Þ›sì+‹·ø²Ô—äþ'Øx4áãMbDú'ëë_QÑÖà—€€ŒFëÙŽdÉt]ÄÓ*À7iˆFãJ€XíȲú¡jÐé]ž_Ø ]w}[¢÷€æk¹¨x’P÷ à2 øSŒÀ?¼x)’æ¼µÆChثò,:i­B.gåG£!Ų|rÅŒ@’˜Þ^ÿFºÂ¹a¤©NU°yðôEÑ\DÂól­Æ±¾ÖçÊoè$&13«BÔóü:æWà¿@à¿EàÿþÖÆÞG'&èŠï¥Ù{»»Æç;;ª†:üøœÿðúõ{"ˆ²/‚(mÉü÷dþ‰?ì˜ÔýVyÿ“l ð’§ ea·¸bÈE·éòù˜¨¤Ù#Ù Á¯OZ}ñb›y`t¸‰Äø1ŒÀüŸ}ñù|ùÊ?b†îƒ†°Û CÔ¸môãÐàwj5Þ’ƒ\áÈð*Iª?Ë‹ÊZ2”ê­^øðöhãEXƒæ*¬$/Kãïc,Ç”_ÇûäÉÑÝXâ&Õß¿(àGÌ^ÀÿÀ M|3Çýô]>ïv~ñâðœ øQïÿ½Ë—Ó‰°ÛSÊHû1}üÄäPDQ’ô?˜Vþ“üÔ©ø&øðÉQLô¿#à H›î 2­ÁÓN§šÜW½÷’ é%¢¼> Â20«€ßßí÷«¿ºûÅG¿wý4½½†˜@žŽœƒÃ4á¡ÔǾÁ‚ça×{tPˆ–ç JŸ–g›þ‰Éü9ó`ÉÐq¼}S¼=À!΢ˆph°Æ}Úë—ühkÕL-Ò´?ŠPç?K·ÏÑg~“Àÿ}€OÀmÈ|JÀÿÛgÏ2ãþ¸,yþ‡¥\nC´[PDÒzˆ þžï󄤧DQâà3€·Fè İܖ kèá>Ч? ì ¨ê @QjÆÉ‹¦û®Œ³ŽB1Æ1Œ€$Kÿå³;þäò•J£\F ¯Þb“÷å:ELƒé¹{ä1m \O‹Ífð Õ gˆ-_êDœ;†·×€‡w¯¥ÇµVìmŠ·/ˆ|7B(3æñ%Öç.FlW²T™߇.õÁóCÎkà¯×¯ZÖ•8øãÐþ¿#àÿ‹$ýÂ)àÿ£ë×Ñë{>CU»økC‰@i·/Fº ÊD]D8¥Sð-†kµZèÉ" éÊÓy.Ýè}Ž•3cy:yã‹=¿® ‘'&pón¼W/—JŸÊ +V´ (ö%ʉ壅„€ÈÐýz\×¥“Ö$J`¯±L ÿѹµH-óšqzýCÙ2|ܳ2 ôªlزŸOoÖ€{{<|N ðóŠîÐÚ‹pÜ€ˆ§šê[ðsÜ_¶¬Ðgq[’³Àÿ·OŸŸbÓq”M‡4øAàgÏïy{1°/M?Lý1ûÄqŠ0ŠŸ’ü{kJ'Ú$ÂÞÀk«Áµ„Ó4=ˆtÀ,TÊ£K3ì Àe”Øü*ŒÉ~º·»¾ä×Êóµú¿Àø÷PSn%N)„Aˆ¢fÿÑÌ*Šªͧ“Õ¿2?ÜÛÝ —+•Û†ôãÿÇ×£’$)õ ´ÂŽW†s‰€%¥; ô¢–ÔŽåDâËùåíõ~Ò1Õ·Txƒ!¦|¤Æy‘þ¯ÒmÄû?{–÷Óû^ŸsœïÜÑB %>2hIð£Éç×;ð™~òüJðüØ0a‚Nþµ‡ªìI4”ýáAÜ?‹$šñ6yÿ“ÎÆå@òà¼(ûE/+œ¼¥Ju@—ñÚìi€MM$½¤@é‹…GèÿþÉ“%æO~~åê¥B¡LÀ/¦Y%&P¡°Bϱ‡Udhb¢Ð ¯T¦“’(6+Ò^_Xð‘ÌúäÒ¥{aþ¯Ï¿àñ¿ÜºÉ Gx¾Š$ß0ölÓèÖèxÉ”mŲl¶*åÆáÞ›Œç: à#k˜4ð¡äÓ0 â£{àù—K¶ý~ݶn‘árÐä£{ûã -Ýòùç0bÊ? ü(õ‘ç¿G”~ÛØó«%(-zUóW‚®,‹–þIáÛ’àK¡žËŽbæ Lµ‘7´-63q6‰Ì ʇ¢¤g@“³Võ„ Òð¢è/¨iµÒ_|uïƒ\¸°Ü¬Ö>µÂ°JL F  J'aÝ&#@ocŸn·1Ú)é±yCèò\úÙZ †-ø·nq+/…@Ñ—½¾©™XÁײ¦"™žL0”ªµxrìí5è5ð¡Y~Yâý†LôÍêX"¯n.ç|Á2ª3{¿älG!6ó°Õ2~yÿ~j‡_2ÛÑÞŸ^¸ðV®!ΧpHÇüìù5øqªé!×XÐ%ƒþg6K½ ÞÿÄ€d9­PµßÆéšb3\PRz.‹#Œ e%m0¤çÒIËZô²lD€4ýê0*0ñ™õ{[[«ÖÎÎÂÍÕÕ/ ¹üW!Œ@íÂЕa­£†ÑÑÒc¨j DÄP sÿC½Pˆèñƒÿõ£"¬ {JÁ¹Æífã¥ÅÚÞr¥‚¡(Ÿ®yô3 jk ¤ŠU‘lµV›ö9¤yx“ÀnëCÞÆ‚€[ åñ!×]ÄÂŽH-ëDcOÍ€f¿€Þ¿ê8·k¶µN!QaHŸ š{JÒ!h«á*NþAÅ÷×OžŒ³üÓâýß¿råñ|¥ò¼­:üø]µö¼­~\µýx’çw§”ý¤:5oÈ¥ ä´¸÷>6Š«Ær£ÉèyøgáÌã‘::#Ûd@[/ÏÍñ¯âýAgÛVbÍ1ðz`÷wwš»ýÞÇ‹Õêå¹jíK:¡Ÿ¡˜Â†À0º† –:q|ÂF6Ù²êò ²1Ó‰J1œ>ܦ×e ^µ90ë6Ç^ §{°Ç” ËÊÛçDœsÑcº/zý5Éò7 5Î à¿§?ðNèéAžP¼þ@{0Í·GŸÙ¤æÆóÍfïgëë÷éo÷°ýHöÂû«?²ýäõÑí‡x_À¯=¿›áý'I¡GoøO´Ða„B åž Œ•ôþ™_À ÕØ`åŸ1~ÖgÌ—{{ öº(ݰÆ=ý¬½OŠÇÓ†àÞööB£Û] C°Ý(Wås¹§ôX{–2Ì T £Çà‡"1I üP&¶UåÃgf “y$/ åMKåDð…1àöV¬` øa=”ÇGë.yz²®j%·¢úùHÑý’d÷uywõøôÇ+˺”3¢5; í8ðÁ‚ðšàõ‘ñÇâÔöŸˆ‚o–!Ž{ýŸ]¼øl­Ñ؈õóÃp_?š|´¶Ÿ«Ú|û’íÆ<šú¤‰¿èmÅɉg¸hI,Íä:ÈúâÙ¾' #4Í4¿æ·<ž'€Ë&údáŠôÄëÝ„–€_™4‹bw±Y*]«•Ê[µrùA„À4Û`t»kÀ˜&ï$`I2Ë 0tmJ2Ô4Æ-ò:b ãë²ÙÀ^’€Ç×2c zž<¿ŸI#ˆ’JœÏ±¾=öô!ч-½ ÇY/YæFwƒ0àðÈÑ | fÐ}¨÷üõÓ§céîItÇ•……ÎΟ@·[mµó°«Aë¡çõ(æïºjã1–zðê³ ð'=ÿ´Õ_o÷g *šöÇÃ## ¸©iÿk2íš` 1XJ\ ^OnÇ @–!x¸·W;†µù|nýi·»W)·«ÅÒƒH³ €H"β F`&öûÅô ØÖ™jâ1ókàÛZvÜ!RCéòe+Q  7qMž¾’sV ¦Ùì»î|‘Þ¹ç×V*=`>ôž|‰ó‘<}Aa×WÄ’þŠâüq—Í„^~\æJ¥ÑÏŸ¶T­>×-¼1ðwé¹9»O¿cIox~_©úÄ›|†‰˜Z»ï[÷¿sÀW¾-RÊØ\ôei¨Ÿ–ôÛ&ï¾ê?-a¨Ï¦yÂöÖ»X(áæE(Íè)ºÏ¶¶ì­^oñ\£±Ø¤Xúq»³WÊçÛóÕê&Yº-1CC6‰8©+Þß‹t>D ¡™P#6µÄ†–D{ÐP^ÿøÅó—è«äåçs¦Yxnƒ>ãBž^/¨<(¾={{™«àuìþ"Cˆ%_jæ5åóǯ°~ý{gÏn]]XxÐC½—@ óÁ·‰ê”Ç` |†ÿPÀŸ~ø³êýÑÛŽwÂÄ@DêÄçNÀPí ‹/ÿ¤`¿¾6ùíÇgw£ ‰+üþ«ý}ãðŒçêux·C&ˆ@#ëÜÓÁº÷"´“1˜;ßh̯U×ñ¨ƒÀoot{ýB>×+–:‘eí¢j ãÚèüIJ«“ZgÐ#ïMœß.:ÈäGF%ŒB$üä3 £ ->fQôzó’ãàmJ2f\.šx`pïlnrr/ŒÅøÉÏ+¾¯MO7——w¿¿¶v]{|t<¿/?÷øùJËE=¤Á' øÞ I¿#à[½ÿ‰7’ ¯ÌÏ3ëÆh°¥OÞ1ïØÛÂü›²'nRÆ?9ˆÿ² ÍÄ¥xºDõ?'o΋ƅf“Á¤§‘§@mÔY/3A˜PÁÃnözu2 uÈk¯•Ëãgät  qo8B¹°_pìC/§ä sÐiZ“¼¹xzuâ˜?oOªš¥Äß•5ë ú˜<^¼ý‹^ï€SGGâJ'Úãðw®.-=CaÀ‡T—;nÃ뱺‹~†zïH•øâ^?kíY²Ó/kÙç‰ÿ;ÃÝ&@¨N@¢ÂtÂCÚ‰ @î¶ïÜßÛsºDC“àÏ»™ì´‹n <®1ØçÏU;. ¥D0ÞuŸ0Ž<‘'Úq£¯Ž° dŒ wšÅâ<¢=?3p;ùš“`Ë à1,„y}”;Á¬ž³Ù¥÷2 èãŸbü›gÎl]_\|¢÷óáz <=€zߟÀŽÝ}Úy8¯Ï`Ÿ°ú,ÙèStþæiðV\°U‡ÀÈ*¬'°C'Zk{0|Øñ¼+Q†çO‚ê1*µ^GvûêA©£j¡àÖ =.hJáÜzÖéTwz½ü—ÛÛ•ÝÁ€5'ƒ4ƒÏ6^ÿf{[eæè@˜P‘1ÜbL¡» ’F!~%×J=©†‹þ/ îC¯SrZ|sOæ*°gÀ‡àédÍzÐüKÍfçÖÊʳùRi1<öó àa†œÔóý¡6tX h>VvÓÁH¼¾Öïwà÷'€?œDûOøß@'dT Ô¾=œ8y¬î¶,4ÑìýøÒ¥ÿ{ûÎÿÔæ’€‡ç™/—G tÌ•Ëý³µZÇÇò(b¥¡P¡>ö‡Ãñ¿›JëÏÂ[zç½åå\4ª–žb+´’îNzû$ðÓfû£wüïR‹6uœëbK†Û(®%OãüÏï½÷þæÅ‹щœ#:ܾ07×ÅŠmô Š@×è¡lÚÅõü‘}¢èRš¥´þ°ÅR_Øg[¸¼¸øâúòr¾ïºõÝnýÑÞ^èq) ‚CC®aÌ Lê6‰R²åLjÓ±E^âYù xxHq/P8QNŒD›’¸·É“·èzÒ¢;Í ²ž+L8«¹  ¿8?ÿ‚>+Öàãõå®;”²Ý¨=ƒ|¨¼üp¤@ïºø ü.v„ËNGFú¢ÓY}©à¯›¯´8tj¾‰Ëf·‹­Áźè‚ã~hÍœ&þwWW±O²Ž~uô¯C°‚@Žíº¦#@a„ôÏzã®0UZ”2£¦Æ8ì˜È‘ÀN;м£ŸwÏ5›:é ô: Ï;¹ÝN}£Ý)Q¼^Jæ¢YæR* Ñ„rي͟Τ‚;Í“'A7Hæà;FµÎÖë;<½Ž×]w–&Àvq[À…gþÜÏ¿Çá+¹7xý‘Ð}o ð§móIMøÕOç×o FÂ/Rýñ}' µ*'h.N @~B¨ð`ßyAî%ƒo³Ø¨º†ãcc€Y|C ©æyQûul¢Ðù³m–ù#PÛü\/·)ÜÈß^YåŸwz½…… ¥~?OñuÁ0R„þ£Ùª©ŽWÈž¥b¦°•3Õjo¡RRµOïq¿V( ”ù ô.…ì½µ7Ç5¼;$Ý=}[Ýï1èáéqvØæØ²Ž,oŸ5Ë?uŸßIÿ;c ¢ ý3•JPÖjóh9!5ñþ0y:9ón‹N2‹N66`RrãÖ"„‘¬Ü榚 çXêJ¿ŽÒ½srÐû#Cà(½¿¢­ ¶:ÀrÅ\.eq1nÓ}Ë=m·ÑQW$À7ÚíRÛustÛ‰ƒoVñ²—I*yvòî.yõ^µP,”Ë 1öY£í«k— ,Öt5˜=uÛsÐ]ïàš½>}ÞøþŸ 4ÅëûBõÓVš'W›2üï$øß)€KÏó°0 »¬Ç-ºþ È Ed£H @Ž›N8“N6 UDWy|®*éé_eb'Úýg‘•1Áp;¯ÀnKÓL@‡r@0'†Ca`(ŒÙ$Ê·WV”š0=^g4*·‡C6 ÝÑR[ „`‰Eé}X/û¹A‘x¾TêŸ×êuŒ ‡ÕbqXËçu;1LÒùRi ³Ð Øñ¹c?@Í·qx ØXàê»xºöÅ(ø.1þ;ºŸÞ ä]½€Sã1ª¤Püxr/ øÉ8?|(ÿ»jXS©RÁþ½êº„G³=® ëº` Ô?(ïÏ+·±ä“€¾ˆº-þ€# uIñ"-L3èÿ(ãÀ€ !¯®Xry¬6Iý Ý<¾ÖÞ+ÆÀ±|ì@~Õº¯Y*Ydô¦!ûöê*®¹›OÆyÇú|IÉ23Mä(ŽHœH¿_uíKÙÕ>Küàg5f¹ Ðómöäò³§h¼'×xz¾ Gü?¸_ ¹ú’lMÆñIz?+ÕŸ¸úìmoð95)F*ÁÍb (|Yó¡IÈT]‚ªQDfÚ%þ·‘D>á€lñ5Ã(J[ªq$k*¥S„,9@^ aD1l®H• /F÷çma¶’ÔÒÀǵm‰°T‚‘ûô- 7,Õ²Ë%HSMòñ õ7R @ÌD‰`ÜÄç)ÂX 4~ °²aƒ^8 #ÊÀà L?o‡ê÷ü?‘z,O@ï'¼¹Ÿâݳ@Ÿ•äKõúïøß¹¿žä)S B9Á9ÉÏ$RŸ‹#à·ì»“öêE’|TF7 ŒÈXC(è#°•g€kƒÀ`W¬Aݧˆ°„QXŠ8Úó˵%.Ÿ‘Ú뛺¨3æQD ‰`óþ‘.±^]Ï¢gB@¨-×aÜà„Þ2¬&@Ÿvdeó³bü©süïðßÜ”°üæÈ÷ýÄ ?Á´°Œ£»÷¢ F 3F'¶årW²a…j ' éŸlm𜬗ÏQ„,!fìü?ÒtÄ×øˆjåèØûóž¤ëý˜¹i(bµ]•Ü •¡4t@#ñþ\a€«D){f]Ñ¿J#U Iü­/åS úä¸vòs0âgÕó'.ë|ÁÿÎ…)•ª0ãÄ׆ÀÊðüYÿ3ÍÒÕ†aº*Ag{ê6¾k¨€ÏÆUrä0Š«¤¸rRfT†”_… ÿ¨l0k±DÑGAj•ЊÝuc‚Hƒß¨d§Á4#×A8?à3æ£PÜ8ƒ\ŒDÄÂ…àã°`Rüáï¿ÿÔׄ¿Ó'¡• þ†1yÓî´UЦ‘.® ¯ƒo“Q`C À¶´a`ð[,™Ë,ÂùÜfu!Dêïô¶ŽñûP¿JÿlBQP2¤œ)Þ?ÒÔŸ ÀA8€´<( _2èäï"1Q ìIZf9Í«§ÅóáàŸÆù§ °FÊÉÅ€Îàù³Œ@ÚóÄÿßš`’Á–¤£6 |íÅþG¼<ÿ¬Áøöˆ§¦þÙÀ¬7ËuF±Vçàà‘È­Eò46¦ÜN‚6H¹= ìYÙü©À?ÿ;h’{Œ£ÃvIÍmŒ ÞßHü, ÀÈ0Éë4ƒp„5„Ê«[’hßöޝ—Y!>)Gvf„Eá„ë$ ƒ)¿ŸÔ¼3‘…ÿ”Fº8OH\‡" 0ÓÖsOZÕ¥5£A˜å:ë0bÍx CMø9 ¼0NÍb Ò? ìá¬á×)ðO @V5 þäms€DgL0YFà8!íw³€?ë5— L2Ñ„cmŽáá£iF÷ô³]Ìè 7sÓ­98_Æ3FÇ|þ¬pÀÈ0Æ `Ÿü4ÐÝP`Ö0 šúIÞ=˜èýÍ©85§à5ˆoÓœ^Þð?M•Ø}*Ø›nIEND®B`‚Sigil-0.9.9/src/Resource_Files/icon/app_icon_32.png000066400000000000000000000037731321676412500220530ustar00rootroot00000000000000‰PNG  IHDR szzôtEXtSoftwareAdobe ImageReadyqÉe<IDATxÚÄW[Œg{Æc{fìñegÇ®íõîflI²ÛJ$MDKÕÙX_OpÁà™ÏŸÑ[ùJcxþpÍãÙ‚çîºYØHß¶¿ ÂÓó««ŸÍn*8~± I7k¥RÑvñP,N2ÌxæÈ‘¥^ÿô\±ÁܼS^ï¤bš²µƒ8€ƒUç76šã$Ñãyk±\¾,Æ ¸×Óÿ)غ$Íçù«©Ô’eYßk‰b¤ëz‹ãÜngíå¥kÚ“AHvïšVòšv_„{%ÀtgDú®\¹{$5›ÉœPDñ‹ÂÏãñºä}àY{•a°kš“}gûAØÌ ˆ\J8|{!’eX¶eÙ¿ó‘È6íQì~ßí¬=!¡ò8ŽIÓ%’å¸Qh¤]Þ±¡4ǼåÙévÕÝÊp¯ t­~_3 ýVo4Ú4Ÿ=‘L~`H»ù¯  l¬ IÂ|eš$9[WÕÊ=_w@ ±ì¥ª¢Øj¯‡‘>&‹â°*?¶ºÝ—€ÝOXŽ“Þ!Hh‘…µ5&Æq³C‰Äïï¶Zï45 • qºûµT:}}ieå”Nàš†–Åhº~‹ÇÏ[õ^€¦ÿ0-ø¼^TjÆÏÿ¹Ùh\¿ÝhPÕN©bõAœÙ—žkñxü…C–õ‹÷76rMÓļ`!P?€e(œ÷û|ç@”Êt8üAo "¿*ŠùÍvsSßÛUåöÓ ·d9‚ó¸¬(?,lm=j˜¦p €0ŒÓ4¥(, N#õ`(ô'Òï݇ã‹~DÀûÝp_½ + •Ê;¸ÏW?–Ëmø¼ Š909QUU¬†œ ;Žn·Ÿ‰°ìç| óSÇãyu¹ÙÜüäè¨ó¡ºáG“I½¡iyÀ´ÕÅñ« žŸNqÜŒ¨ÈmÖëá®m{M]Ãp0OS׆ÀRÉ$›`˜_‚Hm´¡ ã`“Q¿ÿc †Mañ¾á8EpèW¶×{qŠ<®iÚ§V…*ov»D8ÒÂzT5Ø2Œ¯ç²£+§2™×`yPÐýñn·û• ¡úÌÍÍM^‡ ¯KE£ÆCñ¡Ëà óÊš$½ìÄÉ>Û’Ä «Õê AmTW:Ñé< ºY˜‡,8ƒ80 ã[·ÖV¿ZÇ2#sT0x‘ª%ËÇ—Ê¥SP¹ÌÈ·o ¬¨ë ÙHdîÍ|s¾x÷1œ@›´:Ê$f§árÉ\ö%DHnOÊ¥§–EÉ~8;úF^’~{iyùw×J¥Wp’|éø¡‰_k¶M•ZÍ/q•¢V@!ßô‘ä÷OŽº‚¡p«²LAÖ&à’D y¡ÕzþN­Æ€þ·AÑŠÀæ¹™±±• SSCGØ'áÐΑDâ¦j˜cpXÞ |"›5@;®%c±Ÿ)¨A/@ò̹Aí›Ãj×G=ÀÁú ¯ÄÑt}:‘8^k6^ïè:£Û¶ê!|u´ ÜÀ]IÖ$úKÓ-§Ù õï A~|ƒ8@¦AÔŠ»–í£ü~œgïV«õqN˜’,£ôÒÈŸ]EÄðÿ R®¦£±­Íf3 •à@™öÜñnßôÔnׂ†ƒmˆ-&NQãÚÀ0˾“~Áp»Ëd*U®B³)w:Mw »?GY½^fE, ë°OsБ¬éó‘-¯××CES?“ ‡ß®©êÕ£éô× ý:/@6Þª¨yÝŸ#»–õDY¦ã`<Ë®ÛmÔµA¨fãñ+¢ÚÉA&°•z=y2;ú<`Û’MsvKéÜjê: jÐ'Ð÷@j½›$éÙùr™HD£ÍqfA´P *ƒ8 s s6Ç@~·áº±±~æôØøÏaìúÉx4zؽOùÇ4Iò¨mÀ·ÂÌz½þ¿òIH½š`#[j4®E¤Kƒ8`‘*E˜ll·Aº½—î,;™J¿<­Ähú$“yÌq趦M Š|b¡T…h‰ÉäCët0ø×¥ZíÀ6‡&èªàžJµŸNg.ú}Ĉ'`:sm]O%‘y¯\:fÙöôýg£Aªs£Æ…ÙÂádr¡,+…|¹| º ·+;:P/Xc)ê»0ó€Â!LcÅM óièõC¡8éÀLaA™©@Ä6Ø\.•K…-€Op¹aôãÔx³PXA3‰[Z¶Û®ª‘;öè»U`ºlGx[jÁ;׿Üýê¹°|LAIEND®B`‚Sigil-0.9.9/src/Resource_Files/icon/app_icon_48.png000066400000000000000000000070531321676412500220550ustar00rootroot00000000000000‰PNG  IHDR00Wù‡tEXtSoftwareAdobe ImageReadyqÉe< ÍIDATxÚÔZyŒgŸñöx<¾w×ëÝì‘ì‘Í6É6iÓ¦¤´I[è%Qµ©Z…ªÀ¨ „Ä? JK+„Š ˆJ­„BŠP‚B j›’Mh.6ÇîæèfïõÚ{xlÇžÛsð>g–’c“l¢ÖÒ“³öÌ7ï½ï÷~ïý>wû4¿È‹}ùÜöíŸ(gŸÛ³çÿ>ó`Ÿò¹‚ká`~°XŒ£À4× 0Ñ5Ìù¤@ƒÕƒuâ¶}‹×4ïv,«µR©4Mc,‚H’40Ç1pŠÇhúCC%p|îSÜ5X7( ̼àn¦71–õ4®ë·ó¹\üT.‡Í—JU¯¬³…xOƒX"ìŽsÜ’iÊ8ÃLà·‹&ˆ4éñ„iÃØ&jÚ¬D¿{u``âÙ;ï´¯eÈùá8;]ÿ~Y÷Œ`¢Çc…")ÜÚš‹RÔ FóàajZìH˱B³Òi/Glg"±¡ ^Ä B#m›-köÑ̌Ŷ·ÂÚ `åk@œŒQ”Æ2™Àѹ9ŒÇWÅãGTuh^’Æ‹º>%¨ê"KÓF[( ù|mõ--=d¥òàüìl÷p&CŠªJÄX–­X6Ïc\[Ñ´µ°~ðZ€ u«G’~0µ¸ç¹x¼LpÜ;‡ççwó²|Ôvœy˺¡ªíØ@{$êŠÅÞkíèØ)d³_šÌåB³…BuQQ"A^Ç Â®QײZ<Šò#¡X¬;žNc&AØ\$rüßssïóýð}ùs $áÞ`v G”Y’Ìb¡ÐxrÕªCן‘Êew«VWºÁãI4ƒþ÷÷ãP—d*Ï0ÎF[QÖç$©šµX$¢æTõD^QŽÂŸé-@™[—8_{åÇóÖ»ããˆ}~ßÕѱ‹"‹p¯©¾›fg”aÜ?±• jHÒ΂$ù¦€mPÖü^ NËJl²ˆëk :ç±Zõ£[B¡¹€ßÿf²¾^pÜÏ‘A ÔûH²ÑMÖŠÖu½W7MÌãñTS´!‹¨1é7ƒcøœ_„—¢°ƒ‡9 IfHŠ! UG*ˆzqÜEí¿Vj¥B•u ø|ÕT]§€iXàs;[ˆUG틆ãA’439Ï¢µl·oõ–ʆ¡º²âTïTŸs¢EAð'fëmm­ëúúÈËbA†ÁH÷ûóíìt7¦šǃƒê z‚m‘äHNQ²îè±â°‚‚rÂã8!“¹§™a¾ØÐÞÓãEAÔqÜÑ£É*€2£yY®KMP Š2TÔ´ŒË¬+€àóû4 ¨(€¼êˆªiÞÙ©©GiÓ||°µ»;Ñ××G\(Ô¸$£š`ß±ññðtá–d2'Ä›éRéeÛ‹5D­t‚¡Ð_![åd9èq3à§i,DÓ4§[9Žû¼¬ôZGOÏÔFþäÉ“VÐïÇÀ1L‚úAx‡¹§ºžåõîN$„´$MLåóÐôŽ¡¯—Ó®$lhhøp¡\¾wÉZ†l†ÁA­RÁä|>ìÅ'£‘ȃv ð8øvOoïG0yΡî|úôi]cZo6çÏÇfDQ2Lupœ7—_‘”Pdt^UoK/,ü†¯.ÜÝd! Ã(ÀÆ °BŸ#va¦Dz½Ó^–}ªŸðxÆ(‡4ÓÅ"6|6‰´ ãb™?Ÿ"»’0`‰€nYw-òüK#©TGû=î–¢@`H«² @ ‹ÀîÄKqœÒýŠwà•rõÀõ•”q¿_‚BÞ ‡¿Ý×Õµ [·jó p>CÚ(ÏWá…‚˜Eb1Ÿ¯ƒ:y´Ìó¿•DñPÈ_Q*•^w@¼¾ŠlM$RÚ73ÓMl¾wÍšò‚ðTV“…r™ñ,éB3 næÀÐ.R`ßR?Œ ØRéW,ÇšÀÏáÒþ ×›¾5vÅZú‚©ÑM,­g(j«m÷æDqÃL.$Ý-®Í9KáðÁ,x6܇ùFõ0ÌÛ°“/B}\WWg,BW­‰·q[Ȥùኹ´Áæ`ðÝH4º)Yß^,•ïšÉñÝ0HÜ­RÞÐ1¬n[X¾g4Ëz¤£¥5ðì±ùù¡M•ë².ƒœ;8ÍóÊ?ÆÆ(.Éì0Ìg„’ø0À«!ïÂ˳d|F3aÈOlâeÛ~þÍ‘‘±3ÒŠ±ûì(Øj°^§bÜ ëø Ï[q8ÿ ¬:}`v¶:!TDzë8š¾Õ2+Ÿã^³/| ¼Pä´ËX 0•®Ö¶gey×í--¹kbŒn̶¾liúç ùFèʰ ƒBE]§¨,EÑÓ¯Âê‡uè ð ¼VÃ57{qü¡Ñ¹ÌíhGˆó(—Îææ1ÜëûŸýK›ÚJÔrþ&ÜÐzxóÞÉI 2n5‚ ø˜ o;˜/x åR,H’_ØØÒºÉ þð«}}ïÌÅbK8|ì`okÛ½¼ |w$“®w–ð9ÚA’“õŒÿ&(ðA÷ lEh%ªËÖµ—Fçæ6ïO¥°Î¦æ\€e÷eeyZ´¬,4.-‰:ššVóBáó''’õáðÏ:›WY½o;ãc%G,–÷‹C÷¬Y“iˆFSŸ §fÚjª zº(° Ô66®–+]¬;_N1̶Ÿ(ËòÈùަæ?Εkpé*íØØ÷~WSÓKÓ<ÿSÅÐÏÉHE×€R“.Ë™W«8YÓî›Îåê†0ÆK[%Ãȸ™_¸¯1œG‡Q·Ù•Ê󦮿Üìˆø|"Axx˜ÿQˆ£r>vªÛ‹~ŠÚ»º¾~Ñim®­A+.¥—»U×î0ažW@ÌT;,èYtzÖ„cæ–îµè£>KS_Ã,« Í?YEy8YWÿ¢‚è\î­ªÉóxB±¦‘ð~IUŸÈçkÊ ‡ˆK%y¹øAJFTpÞÍÓd5YH•!ØóìÌ Bšõ‘ÚYè4mÇÈ‚¯©®n¦ ªEoçüçêB">¸Ë=î¸u`9@ÔŽ}ÉÞ倦åºúð‚¢PˆÐþ³îà “Ã30ßO V{êt©Ä¢î E|lla jêÒ¢g…}õÁüáO’eUU•KýްÜp`V±+$æ5<¶in\&F5­!G¸àŸK¦Y2–ŒÕ:<º§1™žÅ !›Èµ#t®ÄÐçà×+Æ6Ôíÿ0»˜s‹®:MèÚ!‰hKb7tÖ›aè ¾º·ß¼¾±µõ…uÉTŒãÔd8¢l^µj¤h¯Ï•Ë@ÏלAņìGÎîÂùZÃ0¶£FÁƒ~®è¶=cÈ⥎W– !Àhðp*Ÿ»ÉrG©\Žk …Ÿl…Žƒ¸ÙL’Õ,{We‡AFÞP6 Z–³ÐäN—uý ÜRŠÿל‡ûjŠ™¦ùŒ‰áÅÅ*þW…#y¸oDþR;°ÜÊAó/¹RùzV’¼U©p]˜ß°eõš¯Á乸wzz¬zšGôŽŽÒ¹¸õˆØJá˜sEM¼‡á:9¢ÞíдKƒè)ÄœŽ“ä?ç …¡åœN,7 œžX,ÂàÖÐÁDÀïž³©ÇnlmÓ÷Êú††‘wN 낪Õ,”mpeœv3ª ëL6áî4»CQ”_f2uG ¿¿ÑïÉåöA9íþư2’x?gÙL{4Ú‚xh±:þB]x÷OŒ?uÇšŽõ^Ÿïå›6„:w&“FuQÅ;Œ×ÕÂìhL’®ãí0ß/+ò7û'&êÆ€¹ó=‰rþ-¥?D r9Ç+—3 ¬×+ &J—Ë稲;áÑuâølêÖöh¬7 ±ìŸ:’M“à¸àbØçþl”°,ó.ݨܙ‚1Æe}ÙÓý>߇àü{s’´ ~j¹G‹—€–•¥Ì8d q{œñW‹ T…)°±Bk ‡·”> ³€L“T™¥)ðâ…FÈ,–ËìG_KÈïo "ðáðjéàÀ¼ŽЫÝ* ÜŠIZà³Ùñì)4ú•¯„ s9Ž_‘"{´·×QpŠÕˆ~/θXGæu¥.¹äˆÈq›tÅý¯èpTƒ5,ì*^+q*qÝ^çÓÄÿ`£Æ$Ä"Æ>IEND®B`‚Sigil-0.9.9/src/Resource_Files/icon/app_icon_512.png000066400000000000000000003703721321676412500221400ustar00rootroot00000000000000‰PNG  IHDRôxÔútEXtSoftwareAdobe ImageReadyqÉe<ðœIDATxÚì½é’W–&v¯»Ç’‘‘€@ ¬®fUwWU/5ª‘øú£×Ìô³m~ÊLz™é)ô_52õLÏt÷ôVU]]E‚‰-äž±øru¿sÏq¿áéKf‚Á{,Ý<ÂcÉwÿ¾óMcT°`Á‚ ìûe:€`Á‚ ,€`Á‚ ,X Á‚ ,X°@‚ ,X°` ,X°`Á,X°`Á‚,X°`Á‚  X°`Á‚ @°`Á‚ ,€`Á‚ ,X Á‚ ,X°@‚ ,X°` ,X°`Á,X°`Á‚,X°`Á‚  X°`Á‚ @°`Á‚ ,€`Á‚ ,€`Á‚ ,X Á‚ ,X°@‚ ,X°` ,X°`Á,X°`Á‚,X°`Á‚  X°`Á‚ @°`Á‚ ,€ïõ µúËO? ;"Ø•VWô>áâì¶ÿË_^üàا’p ös}‰ç® öæ‚!\eƒ  X°`+€³n¸­/ðœ«VÌàn.ñü`Á‚,Ø÷ èu ¨¯º½\ÒTSŒi%¸ŸÕEΦ层·Ëz»ß75`7 ÈÄ"’B°` öûe€^Ï»?ʲˆï”ÛËÛ ôÚ{]EË|®Ypå æðH€GŒO,ñ0ò¸©=$¡ð¶ávÎ÷wƒ¢…è@ ‚  X°ï"àÏûÈ®ùØrZkBw;×3ÀÏË{袑Å*JÀŒgGf@÷“(*èéŽD¸Çùùü\ã Ÿ àöÉtª|‚ ä ËóòÿLìí¶·ÍbHA°` ö¾nÿs`o½äX€]ÝZ$ ¯Ýsq+ò?òÞ7²àèÞÛ®å}L3éPQC( p¯oNßÃ÷=ÿH€~Vð=û&°/fˆƒ»tíûÍ„:9H’R9èÙÛ¯F#åƒ ¯ÏÒÔ|²»k),€`Á¾i_7-˜€¿‘öq ˆØË<à°×èbí€=ò¼ÿˆA½ÜVàÏ¡Ïo[Å ™ ÄÙ«,E1ãÕ«ÙP@! o?_á½_Á7 <3‰°¿®Nè58ÎëÄ€^Ç%)!èÙûOŽK¥àŒC{§§æøàƒe’ƒ  X°`s½üVÿt:Øk|€µ;íìå¾çÍ ÐÇ%ÈÛç±çÎËØËÇýHÛE͆J% pɇl#/­ > ðÞþ‡’”±€íå6~ž½Ÿ{$âö›¹ƒñRI`²€÷’mE┢¨ž –@¢ÀŸ}ž}Éï@a øºdñðcð-*%è|ßû˜¥ýÈB`|îuöüÔNæ/äB;°§< hõ›Jú×Uq€÷=gcÿ% hPf½ÿÊÃwR¾ý׺w%2~Ý“÷ÁŸŸS”·íó@4“»ÎJr`LÎjB9Â@$!ǧäNÀû8b@ÛrQ \"!­×»Ý¢2€: áÿðða©œüòáCó—Ÿ~‚` ö–+èŸÀËg/j½|Iàsü¬‡Ͼ¦äýð‰$ØupwÞ?-L bìµ;?#<”ùÚ½¦ÌPUx æx½Öµd@S• 6yüÞMø+_ðB%˜kÿ>ñ»‰?ž³Ÿƒ·à1û<_Èy! 7Lìss&9 §0) mîÿå™KP€šà^cïEQ^8•¡$xHÀ Ó)KšÈÀ§| -!Ð ²k!@°`oè×ÁŸ–£Éùä­#†9`õA¿e–ôchóðù1‹nå¾;÷D5€¨j›æu"ósü°üòšH7'"Ê—œ›x.áï¼ÜoœàPÞ÷«êÁ@M€UD!'R€×3H+'á Èc»vä@ˆ@N÷E`"`Ÿ ¸nË8|@Û™€€)@î@ìÞ/ïÆ1åäL „ @U€J2€0ä X"Pî#¿÷| Á¾óÃ0á[þÂ0 7ÅÛ'@­Åô£r}ôf»½ôæ ø‰è‰ðäB:€ûÇ5²@¯×³ä`øëJ@™XÉý‹*êa?ƒßÔ€^)?î/dÀyåEÍ£7âÑ×¼|?yÀžù /¯¡ûxŽ# ™Üçç¹×ð}yëBQÅ E$€Õ¨¤ X2‹2‚ ØG±X¢€÷žQdgùª@ ßž…a@ì¢ÀO`éKüð;ùè'ªòò±-‡ÏÏÃýŽø Ÿ ðT $%ð[Ra¯Pô”‹õÏ„¼ð„f @­ÁP‹òQïê×ܺ×ËÖ÷‰€™õüýl_Ö/$Ö_t‰ûç)(àËûèg@¼§¤Æû¿.•€},(pÕD2‹ûP@hרÀ4ω XR€Û.¨W2@ Á¾³à——8¾iëu:êÆp¨ÞÙÞV777ÕF¿qe/ÒÈòVzq4£î£N§ øi9#dì×@?ò¼zŠÁ3è'¾§oÁ¡Ã O`Ï ïê Ð;Ê{Ì®»Š‰ƒ½òtø¶€|©ððîèY% ñ¼~"ö ×±t¢¨gÙ&büƒ$éGEÑo;¯Í Ísutv¦²$9Ä~•—L² r}Öé÷í+ãÿ'J½bO~ðìK ÷HAIJàwžÿyð÷@ß# õÌ{M¦à=àžç@?-@@ @ñçç‘BÀdÀîX¬, 5€Éºæ¢ Œ³¬˜rÓ!!óˆìû“?1õ–Ìše;ö}šeç¶ãØVJ5nÛ ôk8;S€Àå,äûNÀÀ÷Ú5µ3¨¾½PJ2H.Š5àoÌà—Ø~7&¥—Õ¸æí“Ή|Iä@?!Oßwîyøö±®q¡CäÀ˜®xövéy ïÈ€újçºÛH<°§eC©½(ÐìkÜ{‰1ÃÈ=σ½Míút2QÚÉétZ‚Ä*ÃýÓSu` €Ý×›»–`•ïoß«›$jGs _ƒÙÿ L&§gY–v;Ô’†#û»˜‘R‡•' ø…àdyã/ŸI w CÊ9´÷™гBÙÇS~o¬SÊpï‘i÷š”ɽ&Âû‚,¸Û¿Ÿb’ç9å Øm›½^!ªÀišºã²×3ý$)$i°Nþ׿ÿ{Úö¿ÿô§F› Ÿ7 jU°7o !@°·Èš¼~xû"i6;_u»ó<þø;äôW2¿ÛÇ_Àåwì…óÐ ¬î¯ÙóÇ?íR|Þ‚?Ýw€O·ñ:t=€ïòºãmKJ]DÑ<ú¾R[è‡ÚU ÀÃÎ,°7{ÌD(v-ˆY2°Ê•;³À1Я÷zçT*û‹““yo±î‘ˆÍµnWÝY«‘€ª% ' ÉÚÚ~§Ó™Žµ>P°‹*Í, öÊûò¶u L™T¤¬ ø§äÑ;À—çá5ÓHH+xlÃû¢åqbÿÈ… r€?òì+,È9OὈü/÷wåñùÌ! `‘i‘óÈÀ¼RÏ:)0ª¥iT°@‚ûV¼~í]¾žüãqìPÞ~Näãl}_HúˆÁG Ø$ñ[à/œßa¾Ëž>“íúx¼ÇàŽçtuð]Ù.ÛÖ,Øo$ÉöF]˦Óaǘõ:Пy@€ïX`8Ïwû<„AˆñX2°Š €€ã$•ü¿’ù$¿]i@9þ IH’÷wð»Úÿm Ád4šœsÐéõFn÷t¤õ^™ôgA™URægo>5Lö52àwÛRã©Ü&À?²?Ó‚I‘»XRE!„«± Äö˜*¦– X2"P8žNÍî``üêŸ üÏ– €$ÔÚÏû¥¦Eâ†LŒœ'õÔ‡0Éœ…úð¥Zò£ö–Ù›x6û^ÿ-ëõ9ÖkV$Àßë-þŽãg/_€?w ûÏÛï°·_;@€îäý.{ú}å¾®@~fáí ­o £èFט ëQn#©Ïzùª°¹o²`àè{Xì>1ЗYw-à^wßð> çF,{ äT•§Ý~¾àïf¾ ¾CË(b"B†I(œzгĠg‰Á&ÔƒmV6N³ìô«ããSÕ鯇£(zá¹[  »mS»mꃾqá +·¸çOD2 -ø.‘ˆýFê.KìÅql)Ùq½Ó:@Iƒ»ëë”+€ïð?þèG3»Õn×ÜñÇú ³ØëQšFõ!Rþýx¶ñÓùS]Z9WÃ˜ŠØk­Œ’Hû]TZ¸ƒŸMJ"ÿÃÇôM¹!ñ1€`Á®Äë¿Ã^ÿ6{ýºÝ럹8¾"þ¸žÑ/²¾$Þ<$}»Íóög\ë>“0õ‘€ÊëïúdÀÞÙºÞéÜj½SL§[ ’íõ^ý {öZ|7xÁu×Þ¨è—w"Jzùp0Þ ÐŽ/èý»²÷;sÞ#õHB⑨ø=O=xi‰È«““õW§§ë– Þ¼k‰aI NOu·ûª×ïLµ>pkßÛ·¯(ê@ž>”(&$ú øƒ,°b@Ï3._`»×S¢!ˆEÎU è@¹¾è5÷,¸FÜØýr74)¦þö·Øm¬è”?ŽLi<šL耕^ RŠÊ¹t˜ô‡HéÚ©s}~"ýjOUDG|Wà ”ÊÙ ös’" oB#!Ž: ø÷¿ü¥d €`Á.v ÚëÚŽ½¸¿·³£n[°áyýþ+¯ß/ã£5²úí…¸ôø#¯!?¼÷„?1Žt n—Ð'Þ¾€;-ö±:àÏ>nßóz’¼g=ý:MoDÆôúösÈŸ±^÷ì¹e/.€· Ð/R]˜gìì­D.B"æ‘„yÄ$D ªA)¸óÁÚ…ê~ÿy²¶¶g÷æƒÿ”Á}Â*€#îþ„•‚‰…ò¶{Ž#’O`ï'®DÂö;#i0£®ƒ– ®zÊâ¶™>¹¿í÷\K£ð«~Íå¤GíMzÔUo‡hδÈú¸èsà/KäÂT½Áƒ™bãª!(PpY¤_ý°ÎJ†€yÇB  ¶´  ÞÜTïY¯ÿÆÆÝ÷½þ¯–ˆó“ÜÏ¿üEAq}ñøøÜÆO¹˜~2÷þðq¿oØû€ßç ÿ.@;Šn«éôz¹ ødž‡?æŒqß³÷ºNæý²àŽý0.jïÛfx?}AïYÑFæƒ)~ìKÉM¨“‚gGG =Kn’J`Ÿûb4:=1æe2<Í“ä%rì>…÷/`Š„ ­-P.\0–Ç´ LX)py¬Hu‚ýÓÂU,Hò`†ÄA‘Ô¡î0ˆaDøì]NT81ÞüŽU—I²#¾/ß vš2%Ó"u5²QþçHŠ».Ry¦áfHÒ/Az$ 7BÂ3­r錪„5,0ÏOO ä74…šÈ@  Ö þï]¿Nà¿c½ xÉ>0Ô¼þRâ|5Ũã÷âü ÒW`Ü)ãûø%~ï¹»¯õH€}ÿpM@_»õƒ~ÿè[0èÔ|I¿îá×={QV8õ ¿¸çr‰€äÜ#¡¼ù³àóûûU[D"ÚHB1(XEÁ÷ízÛë¤À'P¾xñI†ëöþú­$¹gäÉ£““—ªß¦íb_:&0wá€üXÖ%1Ðz¬\‚ ”‚±a5¡py“Â…R/dhĉ‡®í°õ²yxÂ8(ÝÈb·¯qPJfKT¾#~kguŃ¡4…¢R³Ó&ë¹Õ 7!Šf#h&-‘«Œ¨÷V äÇIžG'=Ú߇éŒxs8ÔÏg“;—R X°Ò ó#ÖwgG]g¤_XS¬ïìŒ@¿AîO| _ÊúžÇ¯¸wYÖ ïüè×<5Y½~íÜŽãtšîìý&З,ú:àÃb/–/ž=AI bndÔôõ0ÀÄúÑhDË”ÿ/–‚ô°±:´ëTU]zæ‚·ší8„ü ”‚ áûà3úÀ Þ÷šýþTq ’ÐF 2 ļÚHO°ü\‚‘%AO ÜA¸àNOž¾ÔƒÁWºÛ}Áñ¨c&t›· ¨L  DœDÈ僔,h¤|äÀ)2×€f!Ð}™¡0 Îü¹S€còqÃi]Í ŸŠ'AÎL¬“d#àÌ“¹ûbÆ$€@߸äI s—?ሇ% 1µ"Ço1Ê2ìÛœÿWþÉî®ÆHeµd©`P¬1ޱǬڽ~JòëYà§!=Mr¿z.å#ð/8cßH¿’÷×ü=ÀÔ·YïñÃ8~7Îó-‘÷OZ@ßÔ$ýŒAIdÿ¢v…ôòÀØÕÓªžÖ‡÷8± .^üÈ.(¡³€F)ë™jnØŸ‹[ZCœhY¶‹%Z*Æ¢Ú Ð}Òóï âpÝþ¶×Ö×i¿À#_&³ ‘pþ‡¨“ì_ŸÔs ROÀó¿ØÛ#20ìõîôz½ ˆ@w8|2Õz¿$.T0ÂíÈ?B®pU.pÂSãuÔÜË ® ù3ð]Iô÷2öËqÎõÉ’²My!7=Ò̃™€v„³¤ªnŒ)7Q¢äâû€Tîý¦†«B¼Ê塨0vâKüÌ˳³zY`è@°`ó%?Þ 3_¨èªñ¤üë^äFì–™ý"÷GÜ|£Þ Húøûãø×A^–xÿ½(ºvMë6•º‹ìýÂz={øáQÎý˜cò¥¤ÏoHÞ¼nðü›¦AÎŒ’®=>#ôèj`š(Í4Nb%c‡ œ2œ[ ©&°ÿlÜÈdj„Ê”,Úýñ÷Ó5îH@ Á‚µƒÿõZ¼éX?ãA|Ÿú•8¹5V]ñò Çî•Kà0ð”ÿþx|;ŽßÛãûÝ¢¸ŽØþÇöANúv)ãï’Ô×úâÙ Å•·TöSE<úÀ>šÿ|ñò¥zaß¹a\l¾¸_°¯B–QÚˆ‚VçÇâ{ŽdêéÁú]¤72¡Û–  Â(T 2‡ø„€¼}àÅûu@æELæ©›iú׳ìÁ‘å¥zcã3ûNØë'eÀ¸Ûã§ ¦™‘>ÞˆbÎJ% àïi‰û» "çûÓeÂäÌÈh5;7"æ²Áhæqʃ?kz#p3$J|´ÿgDí®Ý{èȾ$/©OÛàÒ@»Oñaéç„BP;ÄëDà›:Tƒì»âùëñ~¯¡eøót¾s^?{ò=í<}ñø×Uåñ¯ó2ÐL,ðß½$? ø>[í P”‰gâöÖÃTÿúô©:¶Ï›z~±¦W%4½à}ýÀg¼öÕ—vé²B€c…–Á€Zöw)hª$ÒˆsHàãÏkRðûCùêåK$Ú½·v||§»±ñĬ¯?Œ’äT{ùL¤¤PšMµ7áP¹Že3G]¥æ>ÚçÀ_W } Ó#…tT•ŽAïeotìA¾½Ùélb¾Ät:À‹·ßµøúððÈ$É“ÞÆÆ?µ~‚Yí è#­ù€VeÕ€+,Ð]í~Q@b€Úózïô4÷ú:€@‚ð¯À_bá¸à?kÿVÉßzû¹óú»5¯r¿ÔëCK& øëóÀ?ìGÑuHýý¢¸Uï‹Ì¯Ø{—X]h}(ýÇûûê·ÏŸ“Ç+ZkVs“ôÀ¿lF•h´}íEˆ‚žóÙë.bT{ޏÛPUÇ.ø‘¯¯­©w¶¶(d€}.Þ¿z%AÁÉkºæýËo)&몕WòïŽõÙdŸŽÇwó/vwoßþZ¯¯?ïŸÃ)“Trx.Aî‰:eަ.ÓB´ò<öÒƒ÷ä}É T EíŒ&B`÷Í@Þ²ÜMKœ†"¹óBI»iT„Lym‰è;·67ÿàÎ`ðéçGGÿ”®¯ÿßq·+ ‰W ”i œ»³ÇƒðçB³ }mm-²çl±* a€@‚}OÁö¬ß÷±"zr|¬×:Ôöëüù¢‡ö½Hð‹ªÒ>éÌ'Ùû}–ûZÀ,øíûn¿Ÿ$dÿ¶ïñ ð À,)¯ª¼v¦žYÀú­õôì󩮬¦A2× ¿NVvÝðúeÀYù?jùŸ’«P´|?Ýp¿þÝ%éûðt4ROìÒ³ûvÍþ&ÛöxBɆ%mÞ¿‚6￾½l®äåj”¹YÖ›îïx=ËÞ?Rêi2îq|$3”K”D’hGò»Äâý¯á/ßWò¾Û6úkðê“dkMë “¦ë1…NøXô[MÃfšQYBêWC ïá‹—/<Êó[þð‡ÿWÔéðK¥€” ReCÁ³ÐÏ]þH,\Ùà<ð@°þà‰äoÁ?J¸©Oä$)íëשÏ÷ú%±oÈRÿÁëuQÞ‰ã?ÚTê=•¦ ÊÛßxöÀI|ðTýø±ÚKo?]ô›Ì,ñ¼e¯°Qbïuf¹h" QÃwYäýÏ#B&&LíoôüèH}e{PÞÊI×=²æ«‹¼ÿrê"{ýÒ™°ðÚP÷íñ"¡{ì¼»iÌ»Çy¾¯ƒ½hmm_Æ«jR¡“ÿàJ™dé_Uuõó½þØÀ7,ØoÚï7ÌÒ´×1f«ô꽎“B\š†Hùͨd_JÞƒT›F»ûOÿô?ýùOúR®€1~Cnd‚ë=€óC‘$äPx íÐ ¡€@‚ð?çõÏÄûþ1—÷ÕÀ_$€?$þ>wçÀW^¿,Cþávß»k½þÉdÒCVÎ1ÞÂsø—U7†Äÿ¹õ¢~ûìIÖþ©:?™o‘ç­~ÛÀ÷Èó›ò6×ÖÆn?kÁ!ß Æ«4úµàÐ9žLºrxyr2¨_8’¢µxóÑ Þ¿®…:yMûýÌþV‡êK» Oý»P¸¯Äe½åšà”Sñ8@Ç7r:ÏÎvneÙÎ{vÛã£}Õí­ ‡G­OU•}ï>®ä¸uÙê×þ&]{o µ†„¿ÅúŒ„o¹ìW"åw””j úêëý}Tظч£Ñ{/^½úàÚÎÎoU5<©Ëc•ã&eâ©èmŒƒ ó {ÎÆLt  À@°þóÁŸ’ý¼x¿½x‘×¹D¿KþkÜ­o“üçzÀ¿Á^?äþ÷“äOçÏ-XYo#Ný†2À¿„ ptv¦þÕ‚þ?XÿÈóöõÐ×sT€¦¸ð&þó,¤vÙÝÜ<µß+ßøéµáp¤XröǾÖu3‡øòt9”FJÌ^œ¬YðìŒÇãîØ’„ý³³þ¡]ŸF}Å2Œ\TŠ¥ `×qï_5|híý)—¼Ç?šL§$÷wkå|âݯ¢ v Yúüê+u¨\²ZZ·EÀß$ß/øðæïZ~‹úÛ[[G2ÎÕ¸á.y)¦y.à_0ø•?ËoiZ¦yéõåT:o:HÀÆ`pL8³¹ɰ~,¶ä`p|z:8:=í?>>€Ô•‚:xGðþ£rP(iæ¯Ô±õpÚew0 ÆS8.êý'ìýËë'\9à—úÓ ñÜ}»²Ñïoâÿ‹up¬Ùÿæý2¾ö«‘2ÁgøÛ×Lk¡˜ý““{\B Â.šD þS"ûÇ"­ƒk|o©dÀ@°ï)øó¿ØOö+ªx?šø`‘Ž}R·?d |xý&ÉŸÚ ì4M)ÆYÊýÜ8¦~q̨x>.š.ó”ðÁËT³ÍyÚ2ùç‘zL¼ ðïolœÝÜÚ:»µ½}l=Adç\’•ä ¯¥-yš<ç‘‚rþ{Mà»–è ø}à—ªéú´:ͽ¸/Íc°äàds}=¾k¿Ò¹›ÝÞááÖËÃÃõ½££Á3Kúµ‹Î2d Íûo ±Hò!µ»³ "xË“ï߸qyïï˵_FXŸV(ó0O¡  } _F¯ƒý*C¤G#õ«ÇÕï^¾¤ã,­½ÇõN·‹C»Ãž?Ö42ÛðÜ4Bâß®#üe‰¼èL[Kˆ`{“ì*ÎJ€ÿÝÀŸãýe¦?Fõ"ÓþèàÇñþAÄ’¿–?–ü5?noÇñûï%ÉOÄë‡tê_ÔK ¯x¾q»~\¼ñéѰÞÒ?~ý5Iý#øÛ²õ‹–+]}»aÜýÛèïìì[À?özhÎ’ñxV~Î÷ øef»|Q|Ðo"u" k…õ>ø—÷], *×  *2K«f‚mKdv66’Øß:˲ž%›O_½Ú°ÇÂÀL§¨a_6‘ÂÛ¾(ì^IdûòôT=³ Ê €·n<ï_ZQKÈG¼ÿ˜'7FB‚÷_¸Þøô8·Ê-ÃKx=€êB‚yxý¬Êâºâ&+QþwŒYqÈx»¿þùZ–\òç«“ͽ ƒÿßù¥úíþ>©V™ší¬xÛ;ׯÏŸç$…#Àß¾œ:ÐG÷Mÿ\HÀyþû:.1Áö&{þ÷.þÝø»î}{­×ìEhC;ÉCy <ÿ:?swÊ^½~Í ®ù_µïŽ=?‘Xø1pçëçÏÕß<|¨ö!ý³¤¬jrS¦{›·/ó{ÕAÿÞ‡v¿ÐˆYûý3 2´–ùì²x3Û ü /ÀÛŒ(âýû·ù³ÍÝõ‹·ž 8@9²6â¼éÐÈJ@Ud ѳÕ±El;»i¿ïík×:?³ÛNN†ööv¾Üß‚ Ä-H²Š÷_O<°”‘w('|n—ý¾º³½M3 Ìï_ú ˆ÷ŸûÞ¿ ªM€”îƒIËhdÃ@ß©Åê%D¥$|Ýð~2Dª­ÊãÀžßòn‹€£!E *ŠD/á`0úÑìÿÑýûÃÓÓß?~|í˃ƒ$Ï£¸Á«ZÜLÝò[hu~ZbοÅSK_=}ªîllPŽ@yìÖbÿ¦ûï?bO>ª3…øØk#m@ß&áû`_xô­i²d þöœøoÖóÿê䄦„LiU¸¹¾¾oÏÏ¿âû! Q­ ì­?pìn×^<ßáa. uþ Á?bð7<¦×¸Ò¾5–ù%ÞO ïyý›[qüÁ½$ùÉh2IPËÜæõ'|a” §Ôuû*üZÔò£7ÿߨ æ!Kóy°×ïGª½„/æ‹î”×ü?¸sçÕöúú±ý©ýœú©l+(Ä\äyE !èçEÍó7^€rÝÛ SBš °ÌLSÝT¨‡J𯩑»-3tä‡*@!ûÈ~ÙÖ¡µ=ìqÑY_[ÿäÁƒýŸÙãáËgÏ®?ÚÛÛ:>9Ä `ï_5„ ´ª:õ<<>VÏì»Ùï_ÊûWž\-nÔô²­N¦ÛÀ¾ üQ¢ú©GüÇÞþ¨[ÌdèÚææ!{ý4TÈ~ͱÿ¨$n2 æ@þöøÅóšNƒø{› ?Ú²¢æZâí¸pùÒ›ì_ÿ²¯×¹ß%û‰×°y§ÓùÑný€š˜X/nž×/±Å’k½©OÆ eþëÇêkKNU• UO]^¤èàâ¸øÁ­[¯~xçÎË8Ž×O§ý¢HíE4ÐçÛ9{ˆ÷_ÌÜgð/dÞ»Ë(x?Tyîqe–«(%ò<º¨Êˆ´gQU@ÛãYP*1E[è·ïø*@Œ5ŽT‚ÚçØ'á˜HÞÝÝ¿wóæž%xƒßš¼þ:ˆ‹ €Ö½häó×öby ª„¼¶Þüm*@] àÿøÖ­} ü/ø‹b à·Ò©ÝWäñg¼Î…X¯¿þ¼bÿö>!¯äÁOú›©ð<ý¢Ö޶M¢ DQˆ¼0€öü5q<·Í÷þ©Ì#r@O„ žU’àïÂØt·íña=ïñŸÿ÷'°/*€$Àˆ3ÿ#€eƒQëiž×wmê@ Á¾ëFÿ×®©[››t[ìÅ`0ãùügšü Æß5ø™ÿH’ýì[›ø‹×ßÑúƇοQiº%ñ~éÌVÀ¯?òä~@ä¡%HÿåÅ ’ü§j~gœ¦~ýu)•†ªWÀÿÒ~†3þ4˦x{Å:cÀOóŠdBü Vð؆û4Vá ¡Áë8î_p䂽~b ï1r.æ‘€rJMÙG7/C"D ú^’`WS…8ð·àNïA€—Ož¿„‚@ bí•„&]l·¨„õäã÷Þ;ûðν/Ÿ?¿öðéÓt:í$ R¤fëÑÚ¼ÿ¶òAüŽÈØòD½·µ¥îݸQö XÆûÿ6ÁÇtø«*‡àÄ[[ú¢ØŸ€ý4Kÿª¨në©}Ì‚¾¢PšT€yé2Áö]$ý½k½ÄýX_­¯ûàÏÿNÝó÷Á_»x?âüÛìõoYð¿ö Óù·Ùtº^÷ûyŒ:ß—¾~Âë ùÿçÏ>S_¡ºšmN3O«4s€!Æÿ³û÷Ÿ—ÀŸçÓÌyüSxûy%û§úÈœô_¯)È%þïÜ~/$À8ç…Jù_”Fÿ‚¿×Œà½Èï HÏ@WÞ~IXê—P€ö¤G`Ö[×Îë—Ü^>†¤$|;àÛÃ&vßÜm{Ü 4ÀëÉ·oŸ}ôÎ;ÏÿäÉÍ/¿þúFÿQóhývÁõ°@“ŠSW$9î³ÃCõÄ.÷ì1m}ýõþÑ–øŸ¾úJ}yrÒþªA‘ïx}0q®ƒæuä5ú‘liúSzþYåùGª¹±eÈ  Ø[s xI[ƒAé¿ô<ÿ‡QÞy­½/ñ¥:ÿ‚'ù‰ìïyþ› þzBË0ŠîZÏÿçHök‹÷ûuÔ"ý7yý¸p?zõJýÇßýNí«ó­uÕ¦ÿ !Hܺ‡û¹}Ìé½ÝÝWŸ=y²ûÕ³g;Êþ?Q²†/×<áeŠ×¥Åðo_¾T{ìüá;ÔñïMòþ1âuþÏÎÊrÕeF9K`¿×KËÙ¿ü…ìç¼xþ¤`;)ìý×äÿú<ÿ@‚½-VOú“&*¾saÁ_Fúº©~ö:“¹‹8À¿CÙþžç¯\{_—äg½ÿEàÏÞìL¼ßõ·5ˆ9áxÿ±Ê¾ð©%%ÿºEžÜÿÇ÷î=¿óæKûÿ§“,ÃóÏ*f àŸ1øgœÈ„€Ÿ”'é“—Ÿ;¹?/8Îoª@ ˆ¤Ÿ»íˆ pGÈg=zÕœ?sQ §~ÀË4·À.}”~õ‡çð€¨’ü™X`8` b{9±{<É#7 ÇKÂÉ ímûXÏ€)‚¢èÚí©}|úñÝ»£ßygDàñãÇ׋ð¯‡â%Ô1ì‹c»ëþöë¯iâàƒ›7)ömÛ¡}”­>að×ÑYÆ(pkëTª 7ö €O €–`q…@륀M]²øì»fmI{µ¸¿´øår°8ƒ‡g/âø÷üñÂ{ý›ú¼çÿžÿ¿¨ƒ‰ZµxÄÄ@š°hO ØÇEò«¯Ô¯^¼ ÚþÉ’ßÙ´?¶ßÞÚ:ùùÇ?Üo=û ¼1{‘œ¦LÒJÈÒ*@€ŸI8ÀIü'‚äeòðÛ¹íDX¶'@iêe€÷ ã<=¿hù&ПùºYý»{!È»ÐÇ’À á¿’î@äå 1ˆIDŠê€ßnBÌ_;ðgBüíŠ@Æ$À~ñI ` €õ¾» [‰1½ÂŠØñ½›7÷óèÑÍç/_n èëZX ð.z‹Ô€&Éùÿ䉺ux¨>ÜÝU û¦íd2Qÿòô©úÂ~މZyd¿ÞÈ‚üˆž¼ÿ©xþþNöŸˆÇ?uòZ‚>‡dÂnSù^žgè犓ý<àÏkx4\Fþ_Ô÷H/y_7¨´-«Èž¬œ»Ø”#Ð$ôÙ‚PR–p®{ö‰}&ª*Hà@j‰hæ+Ø5Ô»Ý)+HOp!Ú÷Øþãû÷'w®];iR´âõ€^ñ˜Ä{\êžòbþã){ÿ“* 0: õdÿ‰ÔüKé_^%úaÌ/€üŸÍþú²üW‘ÿ›”€‹’€6àW-òp.·ù»RçCDÈàþóÜOˆ®Mèî—Ù'ÇȰn)ªKÒNwì 7.'jAÇÞÎ(4`·w8'€ó°Ï³Ä©xnþÓ&67wQ)sKa‘\¢š*pY“dÁ/ŽŽÔ#»tðyúâ²Ó_‡œœô6ƒ3ðDÞ?>OzT.G€Ö2ùÊXA‡Ae.tQ2`ìM¶e¥ÿrÂ_-îoŸÓåeMsÒ{ÿDü7¶¢èýÖ×ph/~ˆmBò´ÀI½ÖÑhH/ÙXååɉú¯Ÿ^ô¹ÈÕFÀÿ]üáñ3è§³Ëd*ò¿xüUÆZÖú‹äÏÀÏ1þŒ=þ¬ü†nòüë …º\ì•róy€?èj@¹ä Lœ³­5ˆBYäÀÄФ ƒP.Hy€ºËÀ>2Ð¥’Ê8žòdÅTŸö»}^Á$€ Xöîîn¾³¾>þõïÿÎéhÔk \±Ç]’ JbåDÖe̯P¸¬á}p2NG£® ¢ÒÓw^¾Èÿ¤êEâýsYg­/„^â à@°7Ù."ý§HÖÂB)xÿ]{†wµdü³®yÒËþX6,3¸}¯ÓùÉÙdBò'ê¦SKÐWDÿ$d@Ôÿöå—êétZ&ü5µ6K‚ÿÏþ~çý8Æ?ž820a ŒýÓ6 0ö³ô©Þ¿Zÿjê_ÆÉ}¹'÷çð ¼þyà*Áÿ*’›H€RóÛÄÖ‰@Ì·I†æÆHD: v[âöc‚…ˆ€=öX@î uX´;£ÇÍ• ” pyåØe„c‹±6ä?ýä“iSHàuXÍ’dCT‰ËþïÈ{¯—ûûÃׯ¿b€§€Èr®A5ñQw5¿ö÷Ȫ†@ªEZº+`°@‚}KÖ$ý¯Ä à¬_úG,–2þáõ[@ÿ.ño‡ýˆç/Iïw:VÏø,ùÀmÄ< 1è1 h Œ-èÿöéSõùÑÑL“ŸúD¸y£ÈüonoŸZðJÞ~QŒ§YFÒ?ÀÞÞ&%€¼þ,#ï¿”þYàÞþNp™ýäõã¾vqþÌóúsOêÏç€6éÙøÿeÀY`Y°P ðˆö K.Iƒ®B€rh%PYÐ.0AR ¤ÜD¨À˜N—=ÈþÉ Ž¸p~¥R"— XüôÁƒégƒÁ­/=ÚÍ_ ð+ ä–t¥ýÞ»ý¿> #õìøxðÃ*‡!€’¨*þ±C󞤙“Z\ ÐöQ  Ø›äý£ÓÖJUw66|ï_ùYÿ"ýÛçâEÈèш_cúâùKÜ_¼ÿ­4ýYSÒŸæéjý¢ô ÄCÖX|5Ûíï«_?~®Ã_}ö{[ÜËöŸþü£ž¥µx?=ƒÿ„3ÿ§¾çÏqÿrГýSöúIî× ® ­{Ïë÷Á‘ô¿JæÿUyÿæ €Rós”šÍ±+KðkŠ‘{Ôa"4[@G…’]Ó$€wÐÏ“ª±À?e Olw„@Â1.Dcÿ¯=‹ïÜy²Ù륿þüóÛE\% hk$dÔrÕ!M®¸€Ù#:9>9ô×ÖN´þ„É€€>5k¢ÿÏ¡™IÇRå.¤û®zÿXúÖëF&2€8aÏûW{{ÑN¿_5ü©Kÿ.ö_&ýq“Éü—ºÿAžØIÓwÛ’þxÐ döG¬@Ðä1<³^ÿ_þ¹:bÆ—S}Ä+j^¯—üÑ×ÿÓO>ùÚ^æF~¬?­Àâƒ?õý÷šþLYò§A>{V´“ûÅë÷?Ÿþ«HÿWMV ,› ° ðÉø·¥<°Ee„‰ë%`™VNÏ /èÈ€¿Ã) “[òÐcÉ Ï_€_ÂôÿyÛõk׊ŸõûÓ¿ýõ¯ï] hÿ&&6Ð9bÌJ?R=,柟¸/_½Þ½{÷¥ÄûYþGîE$÷#îØ»ªñ¤Ç¼Jlúóæ% €`oŠ÷a&â•t9ö¯N›ô/Þ²?{0 é_¹¬ÿaGëk ?>†|?'éOH€½ì À}A/|&„ þêw¿›ékÔùÙ£Fµ÷v—‰~ÿî‡?|lñ¤~'ù'X€Ÿx‰sÿ$«úüOk’??¶1¸‹äï/ü¦% pѬÿy`©ÿ"Ø6{怶–²3d Ì à9>‰S¢b{ÜaRÏ.D%@™x©ÜmWÈž!;ð÷—‚3 Ì/~úÓôoÿùŸïG£ÞeHÀ"ð—5^D¼I—«¿©}_qx¶¿?|ïî]Šýk/@3ø+~‘ý1äiJlÁµ}ÎÚI@°@‚½éÞÿŽ]sG ÞÿäÚ5ÍÞ¿†÷/½þÁjÒ7r%ÿ>ú%@W±ÿáædòçGY£¶IS/é/ó’þ".‹¢‹”½ï—GMìk0þtÑÔù$*Sz-ÅÛIxý£÷Þ{¹µ¾~:õ:û•Ò¿ü÷·kÊö7fšU=þS”õ øÅ¬×Ÿ{^ÞâõÏóþ%üÕ¿ú*Í~^—Ðäõ5ÿÊ!Q¾A×.C‡ ž2hY?Ik,ðÃHãy!b¥×Ïj€UÀu_tkþð³ýè KÞ]DsÀØßAEíùºåÒµç·íxÓp0Ô‰²°PT?Øcºëõóˆ¹îß)ÜH¼~îþéÆ~·“¹eŽ—`û6 Þÿº]:ž÷/'®ÿÈ÷þíE"! Ðy”õ¯\Ãiú³ÆÒÿCCÔûë,Ûz|tDÍOö=NúË8éo\Kú£)ŠÆÐ–Ÿçùñ±ú×/(^yµHŸæ†¯½¹µuúñ;¯Ôç¿$øI·¿j›ÿ‰€?îS™ÿ”Ëûèç-²ÿeËý”Z>îÇV-xÕà¯j¸¤[ðŽø]Æa„ÖÐ?XÔ—4A1rU‰xû J†,¹Ž‹ü.Pk¿¬yßÚ×™‹’€¨˜Ûv¢OÔ]ÝÏh" ó€_5H8q_½zµ}ýÆã¨ $Üâ›îǼMÚ“ Råà ØwÉÚ¼ÿzâŸ$á"À ¨ãŸvɈýSÝ¿—ù¿Þ×z÷þúú‡ÇÐ',ýg,ý#Ü $ à¤¿ÂKúóI”ƒ/,øjÈØäñ×½þØ“þíe¬ø‹ö8–?Ù_@^¾xý2܇ûÌ‚?Åý {þ92Ê+ðÏZ<ÿ‹dþ7}¥«èôwUÒÿ¢vÁu`_E ¨÷’¯o3BPi‹Ô2àŸ¦y'I0H(·Gl¡, ˜—r¥È(åÂÿ­@ T5n™ÂöP«’€¦ùevØ2ï]ðK¯9GŽÖoìîÆ~"`äò|"©þ èU0µÛ²jþÃ<(Äÿö¦Y“÷ï'þ‰÷/‰þ H?'ÿ×íoeÿ5]Mû®O&?i“þû¿Nì‹9€ˆ€Ý^x$À>A½°Þÿ£ÃCJú«—P-"Ú“þÿôþý=ŽûÈÜ2•æ>^†Ùó_bþ>øs¼ŸÀ_âýðg à?/ñïÛÈöߦؿQ«%6&P†89Õ4MÑW”ŒQFÞBVìíœð§\Ò ý^ûWÕ<e¼ý´ ˆZ´p³[òwZ[>@Ô"÷¯üþc8¯ž>æúþ29?¤pZ5àJÉ´hÛŒ¶ÎÁã ØwÍš¼$þÑ…†?ÀŸ³q¼t´kúÓײpì_»¦?XËóû‹¤ˆ @ä5þ!2bŸ{4©_=~¬NY›¡ˆÛ ég8£áõðÝÔ>öò§.»ß~ÕûZŽøå˜¿þSNöðÏZ$ÿEòÿUzþ‹B¯øUnµƒ6%À¨ùyªAðI€Ü6¢ØcÇpn@sli¢"Çù-j"ýOî—Åx¿ 㼄@ZðA ˆÔù¤¿¦é‚ó˜“O^ÛU}dñ2ÀßôyäO§Éh2$Ωäp ‰Dýs¡$\F^9`¤“¹öïùKý—Ÿ~@‚}Ó6Ïû—²?ƒ1­öX‘šå†ý”ñoâeý'Zo= ~„¬ÿEÒ?®Ýtõ_®ö6”ƒß<}ª[0Qç3û¿*àÏ>úh/sýúKPç§`;·õùÊÛ2/ù=`Nêyþó¼ÿúzQ½ÿ"¯™þþË&ú]Eu›šãñ·ƒE¡ÝúM?oùóãGá$Aƒd@x®–àÑc¨€B€íŠ·ðã>Èrä7°DA7(-У@þôG?úòoþùŸïÕI€ßa¯$²ª=^?/c_«ö®e9ÄŠÀ¯¼í~!þ²u÷_½Úºuûö+Qàõg<ˆH*¬çω€1ƒ ñÆ•dÎËÐ*´ Ø›gó¼\ðìã˜Ëî&ýaèO¡Ý¯‹ÿƒhMàÏÒ?Mÿ[ŸN´ªô_'È@¯ÿÝÛ+þÔKý\بôÃwÞ9ôz£ 7ïaù_¼|™èG€_zÿRçÏ ~PFÖþi ôÛ¼ÿy –ÿUFû^Tî¿HÀ<•A/ùÿÚBQËϬTsõ§ä"èÇÆ+L($`Á½Ç7ÊM–‘"`H£ÈÓoeOÚÇÚm׬”Ío>yðàÉßþêWeŸ?Ô¤j?xÛ”œeJõtM ¥LsIà*À¯jd¥Þy·oßve€<(ðç&@eG@J ¢<€h$ûÅÞo( ñÿ@‚½É À"ïxÿÀ¸_´üåÄ?ÅñŽû¯'ÆÜ†?«HÿyD å1¿cUuJ+ÜÁEDÀ^¬‹wîú^?¯«$?‘ûp}RÎ À=ýÓàß–üW¯ù¯—û­âý+uñѾ¯+ù¯ ˜%IiQ»‹9!|Ž`fBˆÿDZ= …ú”J dÀ7^üߘ ø•çùÏ|`ßú` öÉ'ê¿üã?~³,5üèÑÐü‹\å‚E~Õ¢ÀÁüb4êý!ËþHŒ]f™ p%yÿ)‡œ,Ñ8áúøâÇH û¶-ç„»yÞ?Iÿ˜þ©5yÿF¼cÖ¸í¯$®o¥éŸô»ôW•þ}"ðüà@}n ÀdÔßDäˆ×~tóæ‘ý¿h惱NÊÐ燰ÎxMí})ÓŸAŸKýšÀ?S‹cÿMà2 ‹@ÿÂ×ÛòÚÿ¸|’—Y‚˜–P@S.€iÿ¶@] @ùªXð²Ç¤±Çc¤@ןº@Á €Ñ.L „ ËÄ7Gh= ¢ß¿ÿôóÏ?¿Õ~øº—­çüpMÀ_¬®ĵƒlYà÷·7ätF“ÉZÒéœp  T$ºL Ò~ì¿ôüómïœ÷_èÕ o©ËÍœ÷ï‘ÿIØÌ²wXò§Üé÷šþšôOÇéD`ÿôT}a½ÿTÍ6ôi’ùM‹¾ òpg{û Þ¿ý¿4&VZør\Êr¿€~© È}€¿á!2¦Jö«ƒÿ²M–ñþÉýJâûÅ7àeÕÿÇ „ Nô‚n ÔCåÚ‹$ u^½ H³Œ€¿ãªŒ pò¿èü†—êyy¨‹×Æh?þøÑ‹³³¾$JLÝÏ(Z$ø6à_FXÅãozŽ_(Ÿùôìl°[Åþ¥+  J¤ûŸ´Ö þc¯Ø¼ÿ@‚½I6ÚÞÖÿááCý¾]—]ÿ¼Nüëj©û¯Jÿ(peLž÷êÞ¿O¨¹OMú¯(ø3VçK¡–%rQûäîÝ}þÒû¯Àß­1Ú$€“ýJéŸA¡¡Ãß"ùQ§¿ye~Wü¿ø–/®þÿ_’ ´%÷©þó£š à;Îô˜„´#1ç¾”$@’Ñ (rÏ+ q$aj…g ÄÒ$Çø'?üá£ÿüÿð¡¶q¢fóêUËÿ<”ô'+¿Rç› •ãŽVÞ¿€²@q) È|ì&6RN„rŠ[Ô00ô Ø›l»ëëºgÁ_ºþ5yÿÊ5ýéy2ýT€uLûkðþW%‡ã±úÝóçeÙ_›1€nÈKG¿Œ½þšìO`ï%ýejµ¤¿º÷__« TsŒß|Þg½€*0øj{}~À¹°€„ðc¯% •bh³rÇJiD@ƒqn.,‡à¸\†Æ$–Ä·nÝÚÛßßßx~p0”Ÿ¨óŠ«ÿ< Rç3(Yý¹EÃs^lmmnžh¯ËÿÊÜ~y ‘€ª`ù_©öæQÁ¾!‹Â.Þ?¼ö¡±ìÈüÜõË¿«À ‰ýÏxÿ]Ïû‡´ pG¼Ͷm)WÐ…ã~G#õû½½rÔ¯jAEß•¨×]“i—÷®_?#Y>gò|?s·§|?ËÅû?Ÿõ¿ÈÛ_üÛâÿEƒ÷_¨åþJ0ýÅwôâ¹ägo"GMÓë%•‹r/01ˆÜ E™ù0β '‹¢S$Æ@xçn}f×g²Æb¥‘}³üu¾ þñycÙm~a¹ ïç÷@C ñÙÙ  ì®Z)°ç#!ƒ’‘jot¸TB Ã9(Á¾AóKÿÊn_ödÏ\¿xÿžú×ã¥Ïy}Žýß¿÷ß°íåé©ÚŸLÊ–¿jŽ+Ü6 å¤Éq õŸ¤{*ï󔀂CeX@‘,èM÷Sí“ýê±þeÀYÙÿ­òø—U¨Ë*¦AåŽZÔòV©†1e(’OÌ5r?zR €$—1R.’㊂Êåìûu~ðî»{_|ùå­è’ÿ" ^ú°´ì×¢$ ˜L§=-•É¢8$@íÁí¾éØÇ'nB`Û ‡6àÞ Á¾%#ùÿׯ—¥“<CÒ´'¹‘Ä?®ÿ÷äÿ‹ÅþçlCÏ€'ûW <#5‡àþÎööi^Éÿ˜“1èç…jíH{ÿ’ñÏ%ó2üÕü¯Zê·üñ–_,—˜% ¥šG û¢Q†IÌ+´Ä¶?:ÊU3Îü™ ä8ÇHl ø1&ýòÑ!“×ö9wß}÷Ù«W¯6ONñ™àêˆHÙ¼«ÞxUù·)ÐñÞ}—8ÿ/•Žùk‘ñÀm•ðö&äßû™íSétI€LýëëZ à…cÿ ÛÐ6øëÃC5]àµ4¹Í~W4|ØÛ[[ãÂyï4í÷p‚_Qyþ"ùSKXåGÆWn\'¹eäþ¶Œÿ&ð_µï÷ø/HÚTóy¤ ©B€ÊSU•¨÷ Hd­—‹&Bè‹oOŽ(å@€ÜuÈK@š#„͘¼÷Þ{{Ç¿þõûúŠ€÷1¸«ßéPïŽãñøÂ`Q" ˆK™( ¸ìOI€1î²áz†D¬,ªÐ¼Yr¾§ïò¿$ÿ!öº€÷ïâ{üìù»øÕø‡–~Q¼{‘ØÓ¶''þËô™­O5ƒ×2åÛýn7ë÷zÏ_€Þ;)¬ H‰oG.X.ê@V÷ôËöø_fª_ÿ‹}÷Uòš~Ÿs¿'b@8FPˆøÑÝ#¹…4FÙc9c{lP^âþûU¶·¶·_ݸ~ý ›#Y,³ ÷ûöÛì÷ ü1WÃXÝr`Í[ä‹Kf«t¶òwÞÙx¼Æ5ÿ¥ U¥€1ƒ>5HЏÐK œh,(Á¾!£ÎOþS|‚[`*ÇûÇÉOÞä¼~Iì÷òüN”e›Wáý£üêùÑQ«÷¿È‹‘ âÿw66Ɔ=ÿ‚AÝËìÏKðg¹¿ä?÷8†Æ¹›ßôm f«Öúà¿:5  ;íÃr¤0Tëaég¿–Ø;¨F±Þ?°.±ž¿ÿ8•2@•Ùƒ¨#r`×öñ.ÚeÛã­[Øõ½{÷ž¿xùrû"*€xüX³üLžA¸Ažå³u±À<ǽn§CNªÚÓ€ n†$aŠ$G"•皇µñö  Ø·m¾üo=êî… œ=mqáø#;°ÃñQÖ”SúkEñÞUyÿ'ã1%j6+y™%VUœ_èÆÆ<°‚—¼ 09È«r@ã¯Ùííc}‹ Àÿ5_,?ìhQµ@#y› ; Ö9*2§å)'‡¦U×H¬¡ R`L^Q8Ïß⦨–Œz½Þɪ*@ÝãÇùq6™¨IšÒsp¾u9Ðô^W±€åŸ¡À—üy­g'Òǧçê›$*@Ó ¤6Of[¨ @°×lõÚÿÒû†ï¦þaPÏ#2‚¥€H@”ç;LJ‡7ŸÛ‹Ò°×#/žÚùrÓÜO€=^QE’S§H{ q€ ÷‘Àzb8î_°"P85€rzýþñ<`Ðí’×?ó˜=Ï@”:ßið"‹¯¤áö«ã㪒Åû;‰87€þe,M‘¸P/éé«÷ @°oÅt]þïÆ±+ý㤾t¡°÷Û}"v™žž¾£íÅgk0 OEšúà‚$Ã~„èZ쿾mÿìL=ž“ý?ïê.d@.`õµ)Ïv/ØË'"@÷Y P0UXsL ÉXà骽™OScŸþo®Ðd¥:€W 5òTzÆ€$k»`¦À•2ˆýgö܉÷ß-U­û wïÜyQÏXäñ÷<¿é1#¹4—@ÓzÖž×P‹süJ!b€§þLø©PäŹs€¶ÁMÁ‚ì›0Èÿå/ U:Òí *@‡É¡ êI'Àµ<o»ßï¦Sz$ÂCÁ¨_òP 篠 ûßT­ÞÈD×t\šC•5…€»%Þ>‡¸Ã_IŠfÐoëçoZn7~ÿ7O ˜×E°Ü6Î2"†¤p?‰QšR;é¬jœ(¤ØNH °‹Ü¶MևãÍáð4»ŒÇï=¶f×17)¢årùÂ9ŸCRQóòädm&ö_Éþe°$âîXo-°ìé û¦LÊÿblf´½¨Q4À¸À„ã}!ÊÅÿiÝÏó»’„$ÍHà̓àþ*Šž‹ä¿ì ˜(.b»¨pÞ>¶©B{Sæp.]üa ç×äÿy%d« ö àÿf¨‹òÎM´$€ÀÃmì1Ï_Ûc8Ë#´ÿ71·šžp@§ˆ"äÌÙÛ¤Ø7›Ü¼yóàìädýÆÆ)a Ð8þ—õøñXâî6|Þá\A"|Ðä J" ³ùs‘†r8PhâèJ…\€@‚½&“ÿFY†9r‚GÜýBÚuôI@ßBéðѳg×q!’ä?˜ì«¨ÖÓ ïã²`Z]ÌHò/Ø {ó\XÀ«³ÿÜ?«†3¾Õò ~ó€_Í!ü¿"°DHÀÔHA”åÁq,w]»æI’hvƒÄÀI7Ž‘8µç„Ë pàU`ÂJÀš½=~çöí½ÎÙÙí§ñ©=î‹K?ÍϰKlÁç\=ëôªìðôt0X[;Rœ(¬•¤@Ïzü~( îÙ‡–Ào¨…À÷Èê%6’À“Cpq½„c|ü7B" ‘€ c>¸³½M IþÃÅJˆ?.^×÷/À{ŒìcWqæ½{½^j<^ù±{)¤" (\À>/_®¾ß, j  €ÿ7¬ÌqxUÃoæ;Ñåo8_pnàœŽæ€¿rR—Ò¯1€¤~ÇBKü®Oe¢"¡¨ìM’ÿ¼ÖÀ!ö€`¯ÛN¦S½Þéh¿ËÊš¢jàGÂSÀ$ €É([ þ7†Ã2þ_x?è¢å\·vƒTZc þÓ¢x-—,Ï…r!T0õ‹¹\àõüv¾óî/”`ß}% $,³ëN ffÛ…çG¤öàîp{iŠý+ü” ¸¼dàÆÎÎQÿî]ÿçäX™‘!½^ú3€_rêŠ]Dœ X—ô#Þi~(`Q;à`û¶,æœ]$2Ù‹™ðÇñÀe€2 ÐͰ·Ÿìï¯) üˆÿK¼RâÿâµÿL_@¦œx•¶»µu6Á,÷™0ªñÁ›uÕ+ÀŽÅÌõüÔrõý&xÿo hŠQªÈó¢Ç®±&MÆ1µš6Nð§ìN• LY˜ê8ÛÆÏŽŽú~€_*{óÙµç»"ö)Y‘â¤G¯ÄORqZ^ßo•K¶xõ¡éO Á¾-“  º½ˆE˜ÜeObjâAƒ€ÜmiäÂÆ WirzzºÙÿXâÇ{"€À«&~Ö?K–âáûÕòøÌvÕ\ ÖæÝ/Cø¿]$€n[Ð.L§“÷’“²P˜÷yr¤á™¼¤¼ø„€n¿LÓ“—ãq¿-à" ƒ>|î]ØÛW³}³‡¦öñ4â°ÀöÖÖñÞ³g7nom•¥³—TôÔ™%å'—$ÕüÒÛž£==›`@üÀTµ,Ìíjñì—) @°×iHD *ΦÓh½Û­¨;—ü3!ÅS-+Xß ¨mï̕ҞøTÖÇ@»èR&ÍÒHè*Qsg8ûM{`­k±-Þ?H,ó“Á–ì¼ÿ·‚4ýÆ%)°dÙLó¼èD žÎ”çù«ÊóÏJÏÑ:»¾µu†<œ;¾Q.€4ûYEù²¯AB®Lɼ¤ŠF‹„fð×½xí½¶ÍãoŠýë:± @°×h(„‡¥³ûùŸõqäĬH5ÝžL§]TÐoóøßzÀªñ:Ïxzïbjø¾ázåsÊ€Z-Ù/”ý}?I€òU$œö’­)þ¯]’i¹(—¯_ÚQ»£hôâädˆ*!Õn®u‘|}Þk¿4 ØÝܱGoZ$2 h³XþoÀÿ[¶Ðà{hÓ¢hêÕ-5¾>øÓl€ãÓÓõÇÇþHøëJÆòã—¸à¯é»Õ¯:œU]N-áä?ÍÛMâ2–›jü›®‹ÁÞb0ç7?GA@C©ˆsx u&c¦q_;%@ÔyYòãétúâô”¤{pRL×¼L2`âU\v‘& ±óöMåüŸÛEºTde·y*¡¾ài,(Á^‡I‰N™(.éÎS‘ZF“IÏ^¯(ÉÃK°HÀE$ËŒåÊ«DԣѨ«9É@Kz·-¥:i{ÔE!D@¼¸üáyñ…Ë,ðôçÞÿyh÷û¶)uE€Cì¹0ètÐõŽ”$$ÆÈ °‹rñ~ ˆ àoÜöÜ2`¹»±q%‰€köØEgÍ+>öÊcYÊi9ÆÁw(ò_æáÈ Ø›kûã±¾1PÀˆGÇNþ¢*pÆ ÀRäy'wÁÃ| [J Ò‹\¼¨þùŠ¿[–çe£’².©Ja–»Nà^Q5MÍÌñü)ÁÞnk P{àÍ^Ïp£©Mì9ùŠ@Nc§üËÆSØÞÜ<+ÎÎhêßÕ µQÑx|å_ܰ ÈWë{Žæz¹Ë”ÿµ©áü  Øë0é@Xªá³9QJ,Ëó46]lKpÑ„@tA{-g:{ý¾Â¡yZZäÈâû:ò.D ]­[þ–ù¨áÂõv«¾÷_æD.§Þ?U74ˆÛèÓ̉\WÝ(¥LˆÁúÚZ ‡ç*.qè_é~˜ª2¡°š®éšg cv´jY‚¹kĵðã†#íͰð–›1ëzspÅ(x ‡æßf6 èZgÙà»ò]ONzRÍP*|Ÿ‡ÈÐ’²ãZ|þÊÙ&û/]ì»O– {´ÎPNEò õÕ2ü]¹i!É^b …’8N_‡TqU†9 Fª ãéš¾*@“µ€¼^• Ì Å @°‹Ú8Ë0±Kio¶·©ú|Ïäa{/I"ôxUëpQ˽á%Wy†c~y–enb«Ln­òüvenò&Ùý€†ª’õŠªF ß««ê`<.n qf½Þ¨ÛP,Hú¯ZO]Ý—;EÒïŸ\õÔWü^]×â˜U#]4ýþÚÆÍݦ¶ÀÆž;fÁG  €`ß–u$Pbå.qGs2 Ãj€€l2ÙyÉ=Ñ.+úPŽŽÖxV¹#Îó¯5´?i AòXõâtn§ü<‚ï“ @Ë$ÏI`ð+øü¢†S¬2•Š€qýÜkœ~uìä’m€¯ ìK¯ŸÇf»x@C-0ÕCVD € ÁÞC@úÁÙûE&¾r9ŸÐ¹¾¤Çzïø˜<å«X î!๠ðwT5¸àt2é°ü3øÇB¸Á%?Æî¾„t7IÂylЈ±y- qwI¾ïýë ø‹«VФKä…e_’h³ÍáðÌnt$“´J5@î·8 øß` !€ï¡ ð«ÑHß\_× ñÄ.€¾fðçØ¸ÃU7 özzmc¡ƒK5ÿñ/TÚ… h¹È;úÍ üÎeûgg]ñøþÞ:.Õª ì=|g{ÁŽè3±B‚}“]ð{÷ÿ{ce qÀOÆ$€@QÏâ«á°ÀÌŒ s…Ç̘§k^äÈÍÕì ¬“8.||/ÜÚÝ5 J4¯»¹W°@‚]Å^`änGe“~¹x“¾’¢ØjhOð«è¨¦ÓRzŠÔÅZ—ÖgöÊúd4ê¥yÞÑÎówÊ>/1Ô¿“ý£ØÞ¦p€ý.ø£”Ê¢UÀ?”-}OT€ZBÚL;,±ÖþaéDâù»\DqøçÍe€jr°  3X Á.j–¹k>qK@¼ÿÚq¡íEjýµ|N}¸ðËE/RU(àëçÏ·´Hÿ‘uè÷ßá5-&öâMÊ@7Ip›TT¬u:Dº.0—ùò‚é&y¿Úf–:VTrïÍýܘ¨¦  è+D åÛõµi ø‹ÂWì‚ÈÜüU®ÀU?4ÎVA  Ød¹Kô+gzsOI¤-<ñ+~]ŸÁpÀe€¿žÀ„‹Ø/_nø-è–$ÀzÿÖKë&XÇqׂ}ׂ}Ç‚}à™À.1T$‚tXè͆O–nìí·Ìw¼(o ¥t Tf“åª?¦tæ l"Д¸1žðî98öÂŽH8@8ï![ìý/£   Øe­ÞO{œ¦zšç³I€Í˜ûœFµ‡–þ¦0@'Ï£¯ž>Ý*%KìÒ!°ê¶%N ÛPzvé 2 1îUÀ¿_5 Z¨àí´6YÚϯ‰=™_»Açî ÷@þ—æ>mîö"" @ €×77OŒS2Î(¸û u€À_£½Êe$€ Á¾57¦òúý³ñ1];/üMa€§{{[üØ~/vÞ?­;.,ÐóÀ¿ðO¬ÇÐÀZ’P•Z[÷üAH@#!$àûãý³ðÿ³÷&±rdY–سÁÍç?ü 28d ÉȌ̬̬®’ZªÔ€ E­´„Ö‚$HZ¨-´z)­…$H‚ @­n4z#­z!Ð" ÕYUUs0‚ 28þOþÏ?ùdfO÷ÜwŸûûF3wÿÿgÄ{s7÷ïît7·{î9çÞ;¾-S÷„{¹h§ßÆ‘¬½Þ˜ºJ"ð<@Àm\piyyÃÉü'ÀÐþŒ23þ8Ó P(œ&øÒÀS²|À÷pòÚ¶u.«ÐÑ,uÉÙ騥Eû¼*DÓ@½¬WN»/,9¡Á¸¹³Óê´Z}úwÖóɶAþ€þžoÓyk„ €Qˆyít.ƒ?``Ê›‚þ]z º­ÛIì˜*†@½ì¹z‰ ø…?É}§×›ÝnÐVÑüãÀ¸Þ›C¾>ÊtSµ·‘O ^.,þöÊ~O}º¬,.îä° Ño 3žA¶™³ (0ˆñoV÷ À3~½êõtggfÆQ&òJËÚ¢Cdü±ü}±ü ûî=|¸léÿÈdÿ °¸Ô̶AÙ2ÿZ_€aâÄÊF&ˆÐ5‘ÔŒcöItëõp ¡á×wx•ÉuÓ{;v{Ò]3(4¿:’c•5™Ú«ã—•V1Jí¥ÿ/.-mR@GÐ f6óßË  þ/ƒS¨Õl À|ü: ˶ôÕ{œ{~ÄQ­¶{œïÁõEàwo¯={¶Ø ¡‘1]4èv³@÷QÀoˆÍ ˜#ÚIÐÿÍZ ƒ@]+°`@@U)õxýÚƒ‚ïÍJÄ(ͤì¸m:¥µã1ÜGðzpÿ ¸ Á|?@ „þ_ÏLðϲI°wos°gƒ ]RÓ/Ô5îefUøu –—¾‡k<×ÛmJ–ü@·¶I¾Ôa]3é°ï“V–U¦ÍZíê/þMqÂí{÷Î}øî»†CÚß  øû¡lÑŠ“„‡A§AÆo.… bÌ+m£<‡t’ :¾Ð >‡ùj©Ñ7úý¬Àš¼ÄžüÚKßé…®‘è˜é’® ˜éå÷áîîòa_w³ß—ö·/¢ ûª¤\~ ÿ1Ÿ åÖ~†À63æ¿”µ{[Ê•ÌÈL61«ìOÏ %üòÀ¯ãXý4Õ5§s²ØÐíO² .P^ãÈ8ÐÄ'•^þÉbª†íD…Ùa‘XÛØØ8»¸8¢3´¹0Ò? çÏT›êAx˜FÙ¢‡;»¹éß­qÌÝÏP.ˆ&/ô™fgšÍðy¯——¼ ¾«[¯›Ò2ZºÜÚ1Ûv«ŽªpS €eÇý~€~{ð\=wnC‚þ(›ÿÔÑÿG™ÓÚj˜€²l¿ìâ—~ä‚fG'+Þ†N°/Aç|AßþÕím£5JðF½3ÚÇhŒ×Äß&À•²#üîs¢"`íáà +KK;ôž›ìó|H§âT…!Οüô3ÞRàGð €-wyÃa|v´X¨ÃRjú\ò•v;XÝÙÑ%ĆßáukeÅÌÑÒr|[µO…H°wâ.¤:Ìk÷ŨKسýüæZI’¾¹´ôle#ÑýGãàëNæëÜ HL¸ÑÑÄ0-Ë÷-‚=ðë,-S¾¸ŽWú–›°ý!ÓþgØÖvvL0cU§KÜ:‚I‚E  '­Ã~Kÿ'ô>Ûõº õ;wî\ºþöÛßjé~ªN¨ú Ò@®‡ð6 TבéŒèš—A@’DÝ$QþÐ;@?ÚÚʧØ<øÎ/ö˜4¬?Ø›ýG¶3P# kË­–¢ß×^d}w—5¬´$ª}Hð›gμ DYý03­þ™ °æ?VûGÐwÆ›Á܉¬*€iǾÿ]xà×Q¯OVWõùN' `Å5o‘0ᤃWî‚mÄ6»[[ Ɔÿ¼ÄÐs@Rº½÷©—}ZU8)Ûgƒ£VcS–•ŠÆ@»tŽúàÆL²ÿIts2c@¶¹°ØRô¹ÃÙHz½#ë‰à¥)øãu²íáP_ìvC”VSüܟ쾫%M€ö06ãw«ö²áh8le{+oöµlý^=gWÿ¢(ûÂ…§é^ú@`d³ÿÔá`ÿ0|ŽûÙÞ €|J0¯jä øuœkk0ÐÈVQä‰ àþ(õDv·3ÀÁ‡_‡²hdÒGµÀ”àQ@“Q}€Œß21ý»ÀT$òè{€Ì£§OÏ,t:½+o¼1úÒ@€¸¶ùBŸ´]–>\"Ú"Ë÷×é5¤³bŠ×èÐçK Ÿü…ü3<x½W›@uàÔ÷;Ÿõ±L.Rõj{æ´ð›Ü§™Á{4RÃ)Ù¿Rå#+ÝÇÙìÿÆÊÊ:ûÞ Ë†™ $ëY 0‘l_[þ—Wdù³ôì{à׫^Öé/¿@žðe{=FG‘ùOBS̃x[Ö°ßÀÏ™¿üá[°g'ëX}ðàR“î?{î˜Dö< ”P–Ï™¿i‹˜Ëu¦þé$ÉFôüü±Hý4&Æ¡c:%Æ2M°¨* àAÀë»`¢<”#}d‚|àÒþjoEë¸åxëV‹ƒ?|6©—s½æ£/صŸ® $Ú†%ivIö¿šN²þa*2€Hcý?uLnp‡VLÚ»L@•àwüzÕ ”u³V3?~3¹<€ÒÉOJùöÙÅÅ­²4=²÷VTAƒ®‡¿ Ÿƒ ÷ÙàÓ/†£¤B¯ZÓúð÷îÝ»„¿!À2÷m—­½Í,NÊÒ''h€„Lˆ^‹½èª¨¸<ª$²E°%I<ÙÞÎÐ$æîÆF^‘”yð/Èj˜9&@ƒqƒ±ó¿lÇ®±okw·¾E¿)“ÖsîT çÿ½ ÕSå’XPØŸ«r¿ 07)ûÃpwHÙ* 3ô#ãHSñ¤†öÏÅÀ-ü e€Uô¿g<ðë$(lè×6ãÏ%˵¿j\£%.mã8V€‰÷–ô˜—K@ þx/x_® ¸õhÓö˜ïö9·²ò-;£°¨i¶€ŸvÓß Ëψ'€ŸŸ|@'É¡ªˆRI¼æÞKþœNØ×––B¾[ë¯]› €Àš?°”¿0 öÃÁhõû}«0Öâøµ²\PqüÞ[_çà?𯲕¤ÛÅþÿhû›$IúÞ¥K$øèØHæ?aÄ €XŸfÙˆ‡ÑÏ33íÿ³9²þ*`å±^5tÉ/ü:àz¶»‹Ò5ÝVŽÐþ8Íu} 2©ÈãFã…ÍÎGÒ `xL½¦±eßHÜŸ@þÆž‹~€1ÀpÿþýËÈöÏ?ÿ@™ Ï "0@€>œÝÜ™™unNò9“&|¶—rJ¬ÐS@^`‚pûL³éAÀwtu“„€=Æ¿I$è³: äB×ASEÙhÔ±˜Êo ^O8ö«$78ÿŸììpð.K¡ÝÒ¾ $ÚZPmÛþþÎ[o=Dà€¥ß_làOµ¶@ 3 ÌÜ T°Pèÿ*çÿ4_€—<ðëU3 ®Í,OZQÄz·¶å° P€`ÿpu{;9Î^U,@Uà·Q4JÞ:ª‹’@Rf8t™€û÷¯à”ÍLʘÀð`#̨À¦€ÿí0!7¯.p£ "€3<²¦Z½ŽÑËYÇЈó{/^ä­ZM£*Cysàk¿08†À©?¬ C‘ÂÀµ§˜ η¡Î²zÉA9“Q»ûìÙ8û*@€RÓ=6û?¿¸¸s¶Û]w²ÿá[€aÄýo$ñŒ&e¹TËÔô@óèÿþx÷À¯ãZ<Ø¢Ž½fèðI{ übdú_â/Ë/ƒÁÚÎNrܽŠ,€šr2 Hh9qª9ƒ)¸wïJ·ÑPõn÷[œˆ‘ågÀôÓ%A=Á À‰Žzï à9øLR.Ôl ¤+›&¬Üquqæ@M™^~keEMž x½–Dü@9Ú¿ì¶?R“KœFÝý¾²ÿ>JZÕô6‚6ºÀÙu¢<„úzíÚ}ÉöMÐG€ þt•ـјa@©!ÂøÇ6þàÄ”Ùçøuš×îh¤ c›ãq>–Ìõ\€@&É úÁwÏw»î€ žk=¼³—HÐÁß>¯»æ þEáá·ß^¹~åJu:wÉæ“ý³€à?üôl#Ê3y ½ö¥s=ˆ)CD—8ºõÓTo·õSÅÎqX*3 €€ß5l?xOÑ‚þpÇž!+&àƒîG¦Oç×”¿dÿ–XŒãÖ}ÿ76æòÐà7ðtkkOö¯g×ü°ß}ûmø^véy ýO 5—¡ÝgeëÀe(Œ@Jà6ú¿¤ °*øïÛ à—~ñBC´¸­qü2€#à˜ú—^ù º­Öîå¥%®Yvƒ§-]š R¹_;a}Æ<4¡Þp¸žbð× þã烇€„þfmuõx{»væÂ…/嵌“§v¡ýÙ€ŽÀt'ýÜH p‡eŽÿȬ À$fÀB½I ˜— ø•)BPœ:F |·‘°@RçëPÆ™¿Õý´³÷ÿJ§ÃžšY%€ =Éþ÷s¸¼0þþ½ ž õ@ß§`ÞGзR€-Ï0L@¦Ú?ØÛ7d\5Te]1½þï€_'±t H‡<îhGÁŒ;Þ) úŽÊítyqq3î÷Œmó­.oƒ–i€nr.)4sf•1ã069Éß•ÿ–7æü<ð~&šl@áã==Y[;³ºµõþ·ß¾…âíFß$ÆÁ?7 ¶¸Ø}Qf@ƒ‚< q )T€F FÃ!Æg›ƒÁ46 ôíü®T"øurëïÿò—Á^»ÆÕÖŠï8ñáÏ¡þCÑý­þ ?|þ¼MG„Bƒ­X¼48Ö,¾ßç»»ê3:.¶ÕÄù?U;ªX`–:Þ;—.= ß߀3}ºPVß@  `$r@ÊÆ@ 2&û7rèÿý2eXÅ/ü:®…,óƒóçÇ,@MÚp»[ÓÀ˜Þ¥¯7kô»_ÝÞŽfm³Õå­Kß~.¤ûQš7Í0~>z,—:;ŠÌŸ;û‰ï'b”dØŒ¶¶?ýì³[ïÞ¼y;©×÷Ôr†Ú×sóøw ü(ä†é„ÆA€“(»ÅÛµ³gšÍtw4Ê ¨Ý$ ÐH¥G·1\fš$𫀌ï€c–cÙ0[£ÑŒ€ó~Þ:êòñ÷RZ8‹ÆÄsãoð<Çüñ÷ƒÑˆ;hàd< šòÉ­÷ß}÷‹V»ý4˜”tÅÚú(·[ôùÅ¡Ùjà ô3# °<@ïŸk6 ÇœI)c¶Œ0Víš 䳨€_fûW’Dƒ‘ñ@àdÖÎh.8¿Gˆc ž´úíV9[ìˆÃE l¸Ð1ˆ%]%ǯñíúºZ§ïxP‘õÏblðG·?ÿ wè÷Ö™ í˜þ—}6ãÙí¸û§¢ý»Ù‘þŸøËJýòÀ¯c^|þxÞë¡Wp .snc§ä¥bÄ™iD×GÚ7ŠF@´ rÀœßv<³2À<Ë2¸þ*øã}¢3"Þ?eäª'ŠÆÄ?þì³üüÖ­VØjÝgøVÛµ— ˆ$àǦP0ˆèÄ…fúÛ@ä”ryFÁfb°¬Ó0Ãû±lþÉJ9ÿ>ò‡çÀ«_¢ÿãö¿“®¡š¸þ-¨‰€%€…0\X\YQ66^¢û-0Àq¾±»ËÿvÕÞ‰U¥}Ó‚ÿß~÷Ýo’Zmk(z?¶CðAÿ÷‡"¤Ò€+è"mùz.Óÿœì?Ÿøçéà—~½êU3Z²Nͬ{ž|dL*FVÿ§¬ƒr†+ËËëùîiy‹ ÅAœƒ³éæ üû•,ÀóÛàQÿL¨Vб{“€€N£¡vž?«9v㥥ÏÔÄØ… r(ÐBûb?æhìÇì%z,ʵé eð–úi.Ö먯FÛàleØœXŸnoƒÅ$¨«€À-.ê^Oy ðj–Õÿ)p†‘tTÖügôþž•¡ý-`PÓz¡Q0Àè}ÊþwÕËÿʺcÎ þt o M¶`ß™Kßêþ™”JóŸñ dÿ¶7H>1Veÿ³AUÐ÷¬~½¢—nıFkÛˆ#|næÞO|iÍÏ€€¶KKKkÛ««êñæ&w-Ë%¸#˜ÖÄL7oà߯ àfGÒÃ`L™4øÇbDöÀYf®@Àdø>xpfðí·?}ïæÍ/’zÁžõÜ|Â@¨±,€î°„à  ±Eë¥( €0¢{ ’ ÈÀ?$tB”Þ!½~6ðÏ^¼à8àÀñ®?¾{7tõ;âÏ4{B¸ýo`ØŸ ˜ b`ðÍ“'ËÎ`ı €8¿yöL=§ï°¯öRÿó|£…à·ÓlnpÆŸ¦ ü™þZ€­  ?´ú¿l@€•2«ùË6;0 xýß¿Žy¡?ýÐL®ƒ8(0í<Ã0 áÄÅT ï7dèOŸ‡kýþšºøÊ‚{2%ð»÷ æ¬pSdì‰õ$ª @‰àH_¼\ŠÏ‚×@©€ Ì}ó¸æo?ùä‡?»uënØh<“z í?@ðÚ—n×ý#ÔVÿ Cf°2l À<&cV¹Adzª¢gœå(ŒŠlÞÛ4 ðo½ñ†Þê÷•Ç»Æ"Ü:G9à¤ó}¿üÃñ–.,[i/-ñ4?ž€ß‚¶à eþ÷·¶Øø—NÉú«¶Žáï.ýÖ¶‘ñÓoÐRý–°l²~ëþ·?àXPvl¶$ ª¼ô¯ (Ÿõ{à× , j”-½”IK?ïf£½WKÿmè>SÀ4¶Ø `¸Ôí®oll,­t»X`šë‰ 0OÆ_vŸ;mžeǧ*á `ƒ¿Í¶ba ð¡°ã_ÞG1ø£ç‚(*^ÏC9ÚZ[»Ñ^XèÆ _JзÁ ´h¿cûó¼&ÌÁ@#ÞC> Ï5¤/ZCŽa³ Å“V­–ïŽFÁ ËÂóNî”þòîÝ—þáÿôÉþ¾=8Æ“fÚö0¹[´šÐÿ{FÿÊ%Hò|¥EÇÔ°ÝÓÿØÚJšgÛÛê£Ç9ø» ”zyÀOÑh§ûétzëæÍ»t¬îp¶o2ÿqðNèÿ¾xL€í0 ø'çKý;A~VöŸ‚ý´ ~yà׫Xw76ôÅn—€Ê@Ö÷è„Æ½rã=ÚÃÐï\¸ð´6\/Ê üöŒ0@/5»³ÙA@@eðÇ{¡×ÅsðОBð‡´@žOÐð:ôä1ºV¸ÿüPëîÛׯßî´Û«"Ô$ëO(<$Ü3€®ÛýAöÀˆ7€a`ØÚˆ+ èuG" 0¥ P(èÐÝÛôy` nœ9“o ‡š€€’²ÁR6ÀãY0Úë©©ÿg€ÔïçVáÀÄ}hjUÛÚܼð„¾[ð¿à÷3”!VO_¼P¿yð@mªIÉ߬q¿.åu}eeýëWÑâwlôŠÛßÍþ‡ø÷MK`4üáÞÿ|)Pÿù„ ˜'ûÏUu;`zà×I-øàhÄ1˜€< C˜z²ÈôûN¹±-mC‡þÇ6N’Íû[[½Í~¿9K˜øU!» ÷yV˜ª‚?ÖïÇþ}IðGöÏ-}é~PµZd‡Žœ¸±O¤ƒægŸ~ëwÞ{ïaÔnßUNöŸÍ—„ö×·]Pðàz¬¥‡‚¿²íbÛ¶ Ì,‚>°l­8ÖÈG§¦ïÒ% àâÀѬÝá0l' †Aq\æ ™XÀ±ãëÍÑèfLÇŽKÿ'R†º¾³£>zø›ý Uy©ß´¬ŸŽí“ý../¯Êd¿þÈqü[`ƒ?[ýÌ©ÿkþþP '€ñL þEà Ù¿®b+ý‘å€_Ç»øGFÙ»N0ÓfÀ À”/”r%@ˆ€/AßÒÿ ©ÁÐþá…sçžôïß¿¶_ *ðWe:‡Sƒ¿d\¶§@1øckýø·áñ³$íõõ+­Á`)m·¿lÔëÏµÉø9øãÈ?£ ým-P`>ﺿŽÏ\2.H õz Æf¹ÑÈPƉ;u¾Ó±ÊJYà>xÀ«_¶à?0%%®ãw°³sÇéR«Åàq$ò¾‹ß"ó§ï¡¯^¦ü˾7ë?ÛéìþþÍ›wè·×-Àþ„omùŸ¹oLý‹e$Óþƺ¿cøË*²þƒfÿþÀóÀ¯“Z0öÓ4oלšÎSéÇ àPÿP`e€kóÊÓÿaY€2ÏüuEð·àÁ'êšTÌ”=êRf÷caî†ú¯kcD O”aj=xp¿T éuûbÀ?€ò¬½¤Y¼™é9ÏgèÐ2ï9W޲²À¼@¥[t± üùË4§¨Ûø]µ³ìf³Ù¬=£LÇ À$ŽÛUú¾~ýÍ7jK™½yEàw÷Ù¬ŸŽËü½‹Ÿ¾sá£Ô8ûm#{/Sß9`hA:ÙŽKÿr'ø;º*ÙV’ùWþ}gÿ~yà×+Z¶¶ô ˆÅzŒCX˜ƒ L«O.ÌÃlÀ(0%€6ûät=ªÕ^Ì#ì'ð†(ó›ùºÁß¾[€sû~$— È„ È! ¬üuaÀÔ5¤ÇÂhAÌD¼Cú·pAÊɸ@`¾'èÐò¢?`øßzK¯Ðg‚ÏgÐwÞ³Ó—Û ,4²âñÐ2`KÆlsÍ<}Ù×ðÁ±‚cõ¢×SŸí߯H‹‹†Dä+gμøé[oÝ“¬Yüxª@€uõÛ¬ßNùK%èË}ãšcا˃ZÂLÓ²¿<ðë„ÖXFD |tËØ¼f wöÐÉA²S–(*/_¸ðàö;7Ëd€ýþ£`\(9Hð·¥XÖ¡½I€£Èü l@§s'—`¯ f=wäÜøý[ÿÀÀa¬\0¤7ŸÖè{‹á:ljò€dj®?`ø_¿ù†¿†¿÷î»Ú–=zyà`K¦Bb„¶”—[VíÞÚÚ9`‘À–­Óçû«;wÔ:%µwt¯žøA÷ßzóÍGçŸ#`ÌÐüq ¿€€‘bò³#‡{ÿL‚?~s§ÿ!ø»?SÓ'ÿí§0/¯ÿ{à׫—08„5?¨HM—/T¤<À€ö° ´\zã'a¯wýÑÆFde€ÃþòXW¿ I“•YÁ+ Àþ>$l—šÍ—Ø€­õõ+Í~ÿlmqñ«0ŽŸJ Ká„ °ìÀŽâqƒÈH`èÛ„‰l¨@§6Ì H릂tÞ8Óè"ÀÇù‡×®1=[þÁ_ðÇýï_¾¬ñ™yy`®€¯™0™þ8àIC-°j\N‹VÚ½Á ‹cbäWkkœù÷Tumœø lŽ~~ýúÝó ‚“õ%ëÙþ¼u&ú‰þï>v(¦?—öÚ¬·Õ^Ó_õ_¤üs5½Ý¯?t<ðëÓ¨ 3@–GqÌ?|mZ‘ý¸@‹C ªéúö³ÑhýY¿.ÞgŸ¶oli?@€ïIвc~qÒüryL(m†í{œ& Lc¶66ZÝ^ïGí……'ªÝ¾C@kS¾ñŸ@ƒÞ nïâ6½NÞ¯ñ3!>{” à„‡QÄà,7ÞŒ¨ ¬´Z9@àvøß¿ýv ðþ½<0÷oHÛ–¹ZœóÚÄnê”>·Á£/ê/èØIà8™¿rŽýpoÆ¿ýí«gÏ®b/siÐ#Ù>ï™Û£áp-ÿpRÛg?_ÏÿüG6øÃ èdúU—Y=|öï€_§õ|e}”µ¢"€{  JÿrÓ«]Y 3Z÷ó ÐvpõÍ7ï?yöìœRçOPòkŸwß8«—k©pBæþ©Œ÷­‰ %øsûbÚêBð·2.Z®D‰$€¿ƒÃ G2¸¥#lÀ®°‹Í&›"sñ à=<¸ÿ^š.ÿô½÷¾‰šÍ þ¹àPY NÏÑ`à ˜ë€'ß ]` ÍÉóàŸ”ÐíašâËäJüûÐe¬€e`ÀÿüæMÈEFòðò/:®åk>F\½ß/˜h9èƒxÆŸÜÛÚº³Þ￯$°»þlàÇ—1’í…ÅÅçï^¸ðð"mQ™CÇOÊ-y'Áädùئc€~ÃC ÐÉÏ<À!µµþú ä¦Ú'•à_¦ûW¹ÿ§1>û÷À¯Ó°ªºZ`{0È)ƒe# K .Å €“GЬS|˜jgÌ€t}¡Û}¾HÊúöv': P<[ØÌ?,ù›ƒH©õÇ »>%óÇ F³$Lö»lF 7… pŸ²$ˆV'›kkï´Z­ I·{'HLùiè €à¿ã€‚]z7} è9û˜.¦E’$™®ƒC'¾düÒqœ`î}<ø©Ç] ¹bÆ}øïoß6U—/ó”B/Ø&:\3øÍ„¢ùãº6Ëš .]ºôÿ<ýòË÷ÃBT´Ù>nï];sæ!eü:F2‚iÇ—g© æIm Ÿ\Gð `ã‚tRߟÊx_ CiòãÿÔfþ%¦¿²¬ýföï—~ #  „²2§ÏwŠŽ€f>ÿr£AèÂÙ?·²¥`týòåo^|öÙA pÀ_ð*A€­T˜7øO“ÆïKÀá1©°lôrZ#[ÞvdPêOÖ×»ÝÝÝ;Vˆã:­wì! Ðõ†2à²@ŒA„ûè)c*(K(ø33@÷3[ƒ † Æ|‡ ˆ†è(˜$„ûÿP ¾ÏòÀó^/X¨×5¦V­Æ#µ ’Gjsù&eÜ`nÎ//uíÂ…ÿóÞÓ§Dûê#Ait¼ ßèv¿½´¼üðÆùóÁ#äf8?/„onÅ+84>“àÏ``(A~hÌ™¸üS;ØÇíðgƒ¿þÔ’à_Õ÷_—\Ÿg€§ÿ=ð뤿a"ä<¦%:©ÁÀ„ ¦F'qs6Ãf@ üÈhàPG6zöÌ™§õ$y§7&ó²³0å9  m™`îxª‚¿¤ñ}VÈdj[ËsÛçé9²@CdëKøâþý7¶ƒs?{ÿýq»}W²~ v!()! ÀLîHÈ©2`3-‡±Љ=1²Z½ŽÀ‘[ @Á `@ïüGׯ3ˆ…Uãñ}c0N»oúøsx¶Ù¿2³3xÞƒ2MŸÂ›W®üóß¿ÿ¯Ç´Ÿ‚þÊö¿Q¦5tHß O…´•4Y._ž äSÿôÝ Mvo€tdäTd+d8p°A‹Ëß¡ü«‚UÙ_YÀWªºÖßgÿøuš×îh¤kt™¬1JLÓŸ' èÿ ý3cQÁÀ‰®_»téþçwîܘÅì7ð¥`ƒñ.(î 'æ@ïiÁ¿x_8±l€}Nü½í‰0Kàjçϯ6wv.Ժݻð0Ðäê°AУ`²ÀÀ€T VÆ\FÒ|>nà”m7 €@5 ¦˜é=äh*ƒû\ °Òji·ó þ—;wøŸþŸÞ¸¥Š¬jÜ7ûýï p%4|6øœØp‰Ãž~?ÐçâË@ÍPFCÓ<XuZ­oïý÷ÿ‰‚ƒ¾ßáè1ÚtDö¿1Ódÿ¹)ÌÏ8û—ÀÏ¿UÉúS)‚¾ð äFóç’¾\žJ&}î1ûM þY0k°š‡ðÙ¿~&ÀJtÑ4‚LLì¾0™!èÐ]õ< ! ûlÀxùÂ…ûw<¸RÅ$ð«Šç Žà ªA Ak‚Väô ˜ü˲÷¶mØ{à×i[«;;œÉP@@ ™F’®áb†¦lÜæL/‹$ÐLǺáš`>»sç†*ar5]ãϧz{vÙ;^íðË:öñÜ‹€Ë$P*Ü÷äžíŠ·mà ÉÞ8&ä" ddŽ,€×Iï€bµÀÖúz·³»û«õ¥¥/(‹_ç@/~zЦ°fŸ`äP¦ƒãH$ƒ‘tDS!5ãà“}Ò@›xFY¥.Ê.+àÿíÞ½ñ×òŸÝ¸ÁÿR0nÁwE"À8fúX§Gð§4‡  ¥‹&<ô# *ÌÈí\îH¦B2È 3àQK  ºàek³Nñq7½€Éúùö.ÿy³þªà¯Ô>&ÿùìß¿N €,V;2Ÿ¤ÀÐÉ›3‡Ðèÿ0&˜YÈó>‚>íïx´ºú†[PL Â92þ ‚5È9 TGç ˜G°Ù?AîjÿÎíš“ý#ëµÀ&ó + ¤Ž,Ð*Èà9ž ð³v·»–t:wÃ8Þ `ÑDÀ°+ d¾xp (rƒ!‡QÏh3Ìõêø®%NeôoÕŒ6·ÈX3ÚÊ–CP%ü ü½÷ÞcÜJ "àß¿ñšJøw¢³"ú* ¿°9wÂâ>Ð)íà¶·Ã¥e°í8φ m€(5 ‘A€PÿÐý¹WÇÈdüÚfýÂàW Ó ¦öÀÀêþNMFøæüóCÿª’¿²~yà×iX…RÀ—Œõ”™ézq¬ kµ'L CO€LjÍÅý¿‘» %úõ÷ÜŠ€¬)—I³Yš& ØÎrÅÛ6È+J€•F²@x²¶v®³µu® ÐÃwƒ/@O)M…,*é`oãûUfü+3¸M‡nÍ:3fÝS ËbÊf Ñ/2`‘¬<à‚ðùç¼ïß½|Y[¹¤áH}C믡D6$0L:€à6ÀÎÝÃXþc@®1‚ ˆsñÙä¢ÿÓçýL€z7๹‡ƒYšK €Êä:sýü0æ&ëÏåbøhøUyw¿ªr¿YµÿUºÿLêßgÿøuz€'ð3ͦÞ5³Ð 'œüq¢á“NlÖÜ”!ó7=ì-€ T?»¼üôìââåÇ/^,…Œ}Õ_v¶˜6M à²pëkGìíÀÙ0@µ@»P-p@ °.&Aø1zöº0溙'y`˜ë0§q/@AÀt4š0e²â@«a¦­cSÊ5ï ¬´Ûæ/ þ©°¬·d¦ëG"x«Àš cò ÚhS2 ß :1† ²èE¿Û'€îãÌ_€~FÐÏ 52€¹Ì²Èà:è|-Ÿƒ~Æ$€ÙJÆ?âÊ™Ó?›‘õÏcþSžðÀ¯×H`=“Î%wçz( ¡ï  ØcýàI¨y”bÜ3˜®ý dÑþƒÔPv(²ƒ ü’ùk'ðÛŒ¿,Ï“ígjzƒŸ|Îàï©ü:Mk–'2{2³Œ²›ÍEh?Ž6ŽQô… D¦@:Õô( ÖpÚ›×®Ý~¼±qf»×k¸ÎýP•»‡ªªÊ‚¿*<ÇQš‹l¦âä Ié(²÷oöôçív{½Ön?ŒêõÇÚôhè“ëM5¦â€Ip$•<+åe°3Û8 ^štÌŒf͘K ÊX+ÌbN›qðÙî®n'‰†IRIFӗ6’‰–MÖ™F™cüCàgíßñ0#IeŠ[(_?o­î¯ª»÷Ùû³ŠÛz õ?oÏè=ðë5’øDý¼×Ë—èÄÍÙGMLè,†Ò&:ÆÑæ9"âÀV(#$P)üèÆ/ÿô£~äh÷¬RÌà‹g—`Fð/…ã8á"Ø ƒ °—Ø€“Èþ§JÏŸ/wvv–Q>˜4¬'@M²Û4hwO߸lß±6ÝÙ#€q¶Ê´æ^2±é™1;„ê nmº.åg`2Ë 8íȈfË ”I³XÓd pmi) ßŒîÂw ïU™j6 Ú†A¹¡åQˆ à¢ÚÂ%à„©aQ)ÏMr¯”~%A_Ià×Û äUÿNV J>Ã< ¼¥´/èߊã&>ú˜ªGïÆFïµYðµñpæçÍía< ,íkJЯÂÅU,€ÞGÐßOð÷¦?üz]VÅhà½2@£€ X0/€è”\+c``Å|Áß‚$ €N^|ûÖ_þù§ŸÞRYÅNÖï Žª"óÔ|ÃÅ‹íÈŽ Ùu œµè´6ûãÖKÙÿqý²}ÐÐñî>{µ’äRKëK;Z¯%ÝîÝ0Š6,+ L{ä:ËÊN}f@›îvè4È}!Ä8È@ œôŠÈ˜ @ÖǺÑå¶’ÀJ ¦šnw¡ý˜ÊX þgG"øw‰ yrÆAþÝXÕˆ~;!ªh2ä3 ðøfP^k¯çãŒ_@€2®>üõä«dB÷ÏS5[¦×çSXyL~UõþÞôç€_ß56”&ÎP”aqw@˜»ÐÖ”À@JÙ[Œ¹ãqªeðàì†à6³5€€ÅNgíý7ß|øÕýûWBIsµW¿/ÿyZ« y@ Ã#°Þdš0¦e¨ýÁqý=û„¡h 0&‰z¶³ƒ,ù\wkë\«ÕÚJÚíQ³ùPY€0®W@z ØC`¡ñLf `ÀìûÀ˜ÒøTÉàHH<)Í€«ƒ&Á+ÀhÉJ®q°L"øG"¸¬€k<ÿ X2 ¿ç° bJÓï @KðgP€ÇIà/ÚeöSèâ¾fñú<@  <¨Ã¿<ðë5•”Ô-÷(“Á¨`v1—wŠž'‘9 ê:ŵ ¥€MkjÉYPÞºtéÎúææÂiTü§™çý‡¸Üf¬Ž¾s`8²€ º'ýGâ @¾Y«Õx‹€èÎXì÷ß?¿°p¬€#ôE°m„û(³Êx†ÜXˆ®()!ÔÆ€ý©°©ôà²B(KÌ 4L§ö+œ"V ì)‹]¯1‚Y¹  @X•ÝžtE°žÆh5ß0Ÿ¼â5fý»}öï€_¯!Pn&CYš»äè¹didZ¦¡21ulHgs|L¦ƒ,гA?0ÇæÒcíƒwßýâÅGýh·×k„…3Û,Sà¼o¾ì³$°_YàUgÿ‚uÉKåµµº+ÄÍæã¨ÑxbÉdÁ¾ÓbxìPâ 2Bt¼XF@™j—¢³¤tÄc2W"€ó ÆêÂO[m%‚yƒÿÈ1þ%s^!+à’WaÅ>w[T½Ü¾WGæ øóÐýseý>ø{à×)^>5Àɹ$èuš`úÄ*Ïr"ã HÐP¦\ÇA†0üñ·ÿüÓO;]]S k¤ÛϤj©5ªWæ‘N,ûWfú¡­#wÂKò@½~®Y¯¿Skµ7ºÝoéóÛv‡ .+ •vüp`XJØ®…7€€½5:%…(%̤õ4Œƒ`´ie[iœÕqð¿ãà<¬À!™3]‘í+õ²¥ ¸ÁÞ=Lç¡ÿõ”ŸA^ ƪÀ@ñ±>ø{à×÷0ûŠ'5—hKY Ž¢€ ^fH šÅ’íÃÄr‰0Q°ˆÛíÕ]¿Þü«Û·oò ·?@¦ö/&Îj,dŸ3z Àãbµ‚öëBàNK‚ùQì³Õ x]ô-È¢¼øÀÈ(bȨ ïTmnnÖ/R²}®Ñxë›ííµZ³ù(n4ž 0öJ¶µ°ap?da” C;w 2©ѤŸ€Ùš~ ˜¸—½5RààG±¬è-0³ã`‘è•T÷ïh ;Pì“åv›Îæ<\§âÝÏ¥ʶ>ø{à×÷ Œì`pr¦“nÀsϳ,HHRÜIq¢‚P²ý(˜°±e2\§¿¹xö샯îß¿dÏrn»à£þe­ƒ]O@ø >DWÀõ °ößyÜÙ¿š#ûDä– *º½ºªÖvv,+0+Ð4¬ÀŽHC=?l<†Zé Ç öAn&ަÀ°´?rŒƒpÐï1ù —V·xçbþn8¢ßŒ* þ³@@L þÁ” ¬§dðóöõûàï€_ß•U"è²“Ìæ`‡v(RmG,`Š ’ÁÔ³ˆ;žÆ± üƈo$‚ÉmÄo½ùæíÝÝÖ·Ïž-ÇüÝÇŒäMμÚਗ+ 4z=µÜl?( îV°3 4„@¦œ8=,+pwssÀÀ“Z³ùP~Oš+œÞ} ™1ÀÝ¥Ãà07,þ&c† (¨2:¬@±ã༬À?.°Ç¤ÕPlxi/nðJ@U6>P–åçÏ僿~}O€='œ]A   bN@‚?ÀJ#Úøä̆n6w„Êì‹-GýÃwÞùl'M?xöâÅB¨¯ùÏ þ'a|Õ@à Ù¿ ¬ip8X¾˜¦ËoÆñ;÷wvV <Œ’äÙ0 r²­‡Å/  0€ À #©$P†5—"ø¿d”9ÅrÂDƘøüóƒ1­Êûeþ÷P Ïž+˜“=ÐS¶zNvàÀYÿ‡¾üÏ¿¾€=ÍÙ¨E ÈÑÁ°IV‡îe‘ŽØã‡A¨#©ÿ“wÞùâO?þø‡ÅÊ€ãþE®u¤&´DøŠ>ÈcG”ýÛK/ƒ"+`ÁÀW«« d/´šÍ]øšÝî}ú›1š^0`ü(•Û" ‚ +€ýièôLp‡ïdè²v ‘”ŠpÙ°Cf´zpëüU! ?ˆû_ÍÐgíS>ø{à×÷hM‘^r2[ÀJ¹H„Ò‘Ó¹ 'v ø!Ëè„îÂNo F@O'êð_úàƒÿäã?˜&ø»©šk<¬½B6฀À‘fÿfíøïЬ@©D°±Ñº¸°pí\£qí›ÍÍõ¸Õz\k68‡ìB;Œh ÇtTÆA512(@ðÏ Ø3‡¬@ ýìtBzL¾_VÀþ&æE ÊPÕÉoZw¿`Á¿ê'2«}ï¾²~ü=ðë{Êl x‚Yçúºn‡)Ø€z­içŠ4&›qGé_`œØDõÝ‘0¼m†æó5#øŸ'—7¿b6àÈÀ1dÿ©8äÝýØÎ+\Œã·¿ÝÙYO:o‚8~8²€TŒ{ XÀÈ&ÆÁ‘…‘3™A€-'+ #pÙ30žNˆ²ÕZ-+›Np04Ý÷æfŽ˜Ð˰켤شŸ€ü~yà×áX\Ao ZœAQ à@&ˆ>ç9>"¡mYþ>š,`KÀ!6 à·¦÷ŒªùÛÏâQqp@à•dÿ²M敾^]­³D°¹É¼vû!WL ™I„0˜®‚m{ ˜Î‚)9äƒÖ8˜£ ÊYÄ+À¬€ã(²('¬ê+PöÉ”€ªßÕ<Ù½Úçãg•îí›î÷Áß¿<À±Ô²üØÑªÕÌNÑ&£M³Œƒ|ÈX!à`ŸO€|‚쟀¼t"`Îfpç„jö¸àªà¯+ÎÖ'Í ¼Âì¿v‰ ÏožM’ë÷¶·×QA7OÄ8Ø·eƒÊ´.Ç͆´1"ø-+T° de¬€í+PdÜeòÀ>A€*ÑêeS`pÈßå<Ý~¿<ðkß4¦*d1¨o@5@^Ci © )»MžA³'€2}˜C6Âhµ‘øºb¥€Ç§¿ÿÁŸønð¯J³”ÚÛꬬ†ªŒ JöÛ× NØfB=MKд¦NÁtÜÙP‚zXèúÇÇBpÇÇŒûC§1P&lçý%ÝÝÛtT v?¶‰Ó[À¾?°‘‘"··@Òj=jw:èÀyQb4í†? ç”Ä$hM„{XÜŽÌ,‚·òB_|Ì(-ŒÍ°«ÜevFæ0>+0M篒5çhÝ0zŽûJ×ä~ý=ðë;¾ðcÿíüÇø„EJS¦¤)ãÇœR”¦P#S˜ 5Ê}6qçÛ‚À2a¸çÉ™ ¸uë“?ùäf‚BðKü¬n€Už€ªÛnÃtÛÖðUË–°@`£ÆŒ€÷²®6Û¹‰“ýkç1n–ŸUdÿ“ýç%àÁî‰  bŸKˬ„úÞÞ×Î4פ·€kt{ ¸å„ÖG`+¸ñP(ãŠÇ^©*à ¶ã 6M‡xT1À"Tä`è{ÎjtŒ"”¾[t¼¯´Z󰳌}jÊa¨*¬ýH³^SÏs>ðgEüò,À´^çð²ÐÀNÊÞÑ$ˆNîhüÎñ›¥Z8έù±rª>ýõ矿·¾½ÝrφUÙ}ÑE€A°Ï¸Ýf8 6`hJPÜg„bŸ7°$Y¶x¾,ïïì¬×;»AoÚ¡D ôœrBH=ñì))tYа#‘ØL(e…#‡@»jÛ”2­¼ì°ò@#޵ePz8…˜vÈé›eÜw6?/€ðß¿< 0ऀV­A  ÀŸQ ÐËU6ÁJéI€JâtàÜoe_44ªþâöíw={¶äßâÒeª‚ÿ¼Ù‹`û¤§ ´Z<åô4fÿeÏUÅ ´'½ÆÆÁv«µYk6Ÿ$íö7¶Õp¡œ°È „`ã`hf ,+š¾¨2`I9aî4‚‰¦Á(Ž!DÖ4ˆáD`ð5ð žnoë[++Áùv[€À<µüeÁù(‚°Þïoߟ=ð˯itfñ:Ÿ4vG#€ö IL0õQ t‡5­Q0,²rá'©MdztSàXüÙÍ›ŸR¯_¿óðáù@•ÏV-VYƒœ9‹Y\Y w.§à‚Icˆç•N"û¯ziÁmÛqp/+p_ü}w:¡°ãþª¤ ±°ÆC`ØfðÁ<˜ã`*£ŒÇ³à@ëa+Ðç¢é}g+­&@y@‡Và¨3}øýòÀ¯cM#¦™šÆ ·0Á@æÄ(»¢ €ñ«:Ž1'>Ô„è9^ç6ó߈‹´±¯ë«çÏß[j·wÿì³ÏnfYÚ©)y!ówÇ W9¨ô”à® ÏUÅ&dÎ%T{Û 'ð"°b¶=˜T` qבú’ýÛ±ÄnϦì¯9Î\FÀëŽó_•”æ5lB½¤œps}}áÍ,[x3IÐd¨ŒèKÀï)SAзL€Ì°m‡íCx†RAã*ªZG²fÁq_™s‘Iµ@¨sÖ¸Ž<à²Ö4¸žGº~X8t}ô÷Ë¿¦ž0>š¯”I9ñ—÷Pæ‰^i'I‚Ø´þÍ(C)g쪃À›Íšh¯tÍÿL˜€Ü^º­Vþ¯ýä'ý?ùä“÷¶z½zYe@Q8Êì¿4 —Kª&ŽìÄÁ“–ê%ò€v²ÿyJúØG%ÙÝÙ_›£<ð ¯1¬`0‡`UX΄¸g™‡°^~hM‚ÒoÀv¤ÏÁ¿Î^t"tf2¡¦Aî)`.3ð ÐECHi €Pú8À}\÷Ë¿^!aPÖê”ÁžŒ@@„6Áœ¬t 8štRÄI¿†Š4z9È2( “p.gd è„K'ký~øÑŸß¾}óá³g‹5U- ¸Ùû~jR˜í¾v,Ì€•^Åèá2 P%têõ=ü0}^pXð—tä²SzžGå¬À†˜ûNÀïI«a0=m £àÐé@ÈÍ…c´e…ð 3Ó,¥…˜E€r×”}Q”¢Çn`ca2a^ð |ÚþûýòË¿N’(cöÄQ BD'½¬‹0¦ÑËد¤:@™`¯s ¼µ^˜©Û6ž€<ÏÆlÝúÅ_Ü]Xxó‹{÷.æ" Øl3ñyÙ€ƒfÿÅǸJª&òÀI6bÆ…‚åö`À]7D€ÞŽÀ€œÒìÿYž­\ßÀÞ.„F60]ü¹”*S]0¢7\ ¥”½°/Ó:Ëâ™aXиöø,˜QB8^ÿö¥KßÓV¿ÏßÀœ~yà×I€²„¹ hî@ðË úµfc`3޹ý¯ÍTm  +Ø‹€„\K)–s={keåþ™Vk÷¯¿þújQÐû`›ý» ¬€íÜ—©‰4pÒÕO¶¶¸;_·^gF È œ¦ìÿ ¬ÀR¿¿p>Ë®îj½ÚètîÓqóBªŒ @×ÇS h:fÂAh@í307B'BÂxt&2K°Ç'@_wjŒ‚{}l ¡ÛX¨ ü“‚¿{ù²Æ¿ Ì~yà×I®*o]‘ àë( à©AE( %0æòøX4j~ &à#ÿ‡,à°¸P¦—ýÞ­[»¿¹{÷š•¬Ap6ਲ਼ÿªÌe\ pò?¢ ù‚‚ ‚ ä—ÀwvZ³ÿyYü›Rzìݵµ:ËM­/XKšÍ‡Q£ñÄõ¸Ue @10ÆCõÈm0$>i;Ì=b !ù‚nƒè=†Üep4½ÿCäe@àû-øå€_§˜§Õ©5æ}¡ýw à; ÊÖ(Œç”Õ•9ò Ò¹Ò2&øóÿ8øO?<©e0êõ7n|ù`yùüÇwî\¦8/p\Ùñ¹O«ÈŠÐñ[¯×¹rÀ_9ṵ́ `ûGgÏjLŽÜì÷=à—~üä_µ> »?žÎRWùöÄHx0'`˜™ˆßÒ¥qÆŒL?ŠÆú?º C;µÎÀ± `0il€@f}ÈÂþàÖ­O¿xøðÍ»9l€5 æS²ÿ"0( zJ–_ö¡”i%®!wÛ\è$äûÞQs?‰àŒ# ÆGT÷ŸUô8Ì~w<²í d/O&7JÚío1¦Xhÿž-!¤g…9°/ÆÀžôp§º}‘)i3± ¡0 Åñ*•`tpÛl̈þÙ³g|xü›o¼¡½,à—~˪Óü¹zÙ ˆ ÿà ˜›Æ/º† Ž2~Žæð€~-~žÛ‹@dÖYµ±rOw‚ȺÐÛ=½yñâ7WÎžÝøÕW_½µ^`Š Â)€(˜ìµÚ;£`Ö¢²!ñ Pl0tË•;Á’HQA"°ÝýòŠ®aIÓ 7›?ìþ¨0™™ÂxäFIƒ!´îîîÞjÖë7¬<@Ùâ™’ý‡Â¨ ;`¥¦0,ð…€@hαÜe]ÃŒ+ª€€t gÿëÉ>Œþåeíe¿<ðë$@@q_Y‰`Ž,’A9‘k[€Yì` ÆÁ'ääûsxr“ís“ ëÀ6Æ@:¡Æàö(§Œ+©Õ²?¸uk÷Áóç+ß¹sÉe´zYÈUÅÀU>z¸HñO îû©šxNZ°ï«L"X¨×UÛ‘fêšÓ2¸ $f¿Íþíëâx³-‘÷¼1 F ${Gß<ëÈamHÐï ƒ& ‡ùÄ<ÈAhÆ'2Œ¨&ƒ‰0g€‡áðŽOà% €QÛr fõø¿××ùú; ÚË~yà׫Р³ünlÓ˜“0¤3ˆ…|sDÆ,ò‹û_׌îo«´ù<ŸTà¶a‚ ˜€‹ËËéùÅÅÍßܽ{åÁ³g .½ªjÚÿUfÿUÏaMƒÅÙ'%ÁÀ–# E"¨bNKöï÷o­òý? øúY­¦<à—~(óÌìc†˜`*j™ÉüµœœuJ'?´\Í Kh,5Ø2À%ƒ`š‰'ÀúÎv»Ã¿ó£½øâÑ£‹w>#ôÁ™^¼]l4à ÈúibL1š@UWÁ¿‚ß­×¹bÀ³~yà×Ôàtˆ§)ŗذÅÉ5‘r.ÉäbñpToàAÒ0…VMÁœƒ´ f6@2~–"Ó#ÀÑ” †Á‘y{óÂ…áõ••µñÍ7—>{¶`³êi}rU­m”Q÷e@>åþý>‡Ë ¸lÀIM$t³éíá™G[[\‡¿P0òhbõrÙਢœpÖþ°àüÈôüP‰€‘Õ)Êe?ªªIy F@¿¹¹Y_®¿‘çWw”zÔ\X¸K·ådÿ°ð³@ßî4ÚUF"@À7­/çÒ÷—ÐûÒõˆ^·†ƒ~Ñc`”‚é;@Ç,¨þ0 “à`€Nƒ`rÕéð¼‡[++AÕâ_ ð#m=ðË¿ºnQÜùdzé{1†{áÌÖ`Û×à,˜Ð‰›*5€ä3h§"ð=ÿÙ£Gç‡Ãa\& œ–ì_ÍøàÝÙ§EÀ*à ¼êì¿øzlpu ƒÐX¨ÑéÜëõGÚxzRà†–FC0Òs%¡4ÊØ¢tì ±\>Èl–ÖA†ÂX0\1ê^2ÌÈÀÈí `7M5Þ€[++!]…eñûõ À¿ü:N  €`*Àƒ…ˆ-+9 0º¿– ’‡ú¨ÀÀÔQ:Å÷e”ùÇt┹ "³,Á(Ž¢Fdd wÁ—ÆÕ••áõóçŸ>ÝÜ\¾ýäɹÕvødÿeÏmÀi“ŽŠ8©ìß}=÷±Ãà‡¨ ð˜3~´Eã ö „ ÔCcd°@ßO"¥…8€V¾Nûø£À´¦ƒ8Ã<˜‚¿<„Öšy“€ØŒY«Ø€O<à€_~(‹oó‚JÙ34E‰è$‡!í92И€Ö¿tªËC3A0ì¨`iÙ®!P €t ýßà-eU´¯yþú™Ngðû ë½Á ýÅãÇ+_?{¶@ÙVª—+NSö_ö·§Y8(+pÒÙÙëÍ ŒФãu—¥­üëÜ;€“›J$6Õ bÃÐËè08DÃ+tÕ°P¯£Õv¾Ühd`0†L>ÞyÙ<ð˯£Lò‚€€q—^™À’e9©ŸÊ6@a à†ŽŒ6šÛ¨ÀÒ@J º)2ýÌxF|Ýl‡Ž1 \±iÔi Á>:Ù>¼zuû§×®%wž>={ûÉ“3;½^28 Ùÿ4Jæ´ÊûaNCöï¾^h¨Q½þˆiclHý:]OüCSZ˜À#@?áూ|†\>HŸ Ž_üNðõeÂv1Љ¢ÕÚü;u@‹‡×K@Àƒüòë(X€y@€½ß!°§7HÁF@{:GÙh¤é$›ãĈq@ 1cƒ # ÊQ% €Àfû±”gѾL™0ô÷u€¾Ï0É•sç×VVVŸnn.}³¶¶tïÙ³n<%pž–ì¿ì¹O³<0‹h‰þ~³ÿ9Àõz§ó5{Œþ€†ÈØ¢Õð‚?@× #! _v-7æBÌ$ÆøŠã,!×(€M†>'îÔëš>»àéöv&’€ àÙüò땃UÊ ün,ÿÝgqàh”ç|Ýf„)Œ€˜¹Ž:i˜ÿ‚€e€1€Û¦B ãŠs² dôtðØ—!ëÏs0ƒ8Šô1÷½FϯÀ@BMÎv»ƒ•……õ.]j8óÅ“'‹Jäðgÿ¯£Ì3? / jF`P€–©\ •¦0浘’¢ @330(G•`h*¤+`fš­°7Ò0HÖÏôfX‚]¯ (HX “r˜ç¸^ƒ<ðÞ¥K[·._¶òÀòv¯—Ds|ÖU]ÿôŒï¥x¿K›è) @Õ„&÷9Š-‡O“<`*hmô¸GùÝr³©zí6f´Ϊšú؆A’É»ª‚}l8G—Aû˜²¿/ۗئBR5 僟„QÔ À`’€2HN»œù£BR€9wó3hc„ô>C»üÕÑ¿3E3D¾ZúìB€Ÿg»»ð(ñÓ@À<ðÀ/¿ŽÌÍ;ñ‰ÿvdØ€@¥) ±íÃM  0z©ÎP.%}Ð&ÁØ” ¦¬õS0Y¾)Ìówgƒöšçƒ €P³¡ÙÖ òÀ¢•Â)wp6mðÏ´ûËÚÏónGÂ̹ï´É˜v‡Ë“ímÎæ1¦¸‹‹3ƒÀvtÿÎY@p£)oñ¼}§Ë`ñyËþ~Ú¾º0_ŸÑuT à±dPPFA=¦”‰MÞ±ÙÇÝ¥/— F†ê· ü‡‘ ü†¨ ‹PÃ`M ƒ,¼ùòö­+WjwŸ>= V`}{»M;Þpö?í9,#«IÁi’¦™1-;-Ù?@Þ/Fã=²l‘¦õçkk?è´Z—ãvû³z£ñ47}j’ùïèÉu€€ˆ%½Äg‡e[* 8@hD'W:ëEìÈ ˆ1g 7mƒc:)ÆÜ>8ϹI€eH5ëL V.¤mÛBS-ÀY¿¾íkâ °^f³ÿ³ë×7òÖ[/=:÷5t8Œ]V@«éf‰¢û–±oÚÃ>GQp{ œ*yÀ1 6Eè‹<;S Ë {ÖùŠaÐfÿ™3Ið &@Ë<@ª@À‡)€×+ÓLY€ŽÕóo]ºôY\¯?3tì‚öצ0fúŸŽåœçd…t8r»`örB@à/W ÐQ­FÃa°P¯g›ƒæð× I€€@0‹ øô`~¿<ðëT­WÀß¾/'‰Ïô‘˜]_@©$ L¶¶w?ÎÂ0§“y&Œ@NÁ‹KÐ ×1LÙ?‚Ô?@j­E2Ý¿7Ó7 €õ£^Å/@‘Xù=ßß¿tiòÀ+ìÌ–N2ûŸö§^ w¸3" ðb¨oOät„OËï`ó_iþ³î½›ó>† A!«ßǾL›gÑ‘‡çm&5ÅI:ƒ€÷ïÒ{­,lÔbÐ>®õg«O¼¸°p>jµ?‹£ˆ³mJc\"ˆÚ?=š„•Eˆ5HµøY†ã²C`c·<ïõÀ„óHÿ—¿ þë?üC<ð˯@ PzŸ `š/`ª$`ÿ¶r¡J1@Eç#°ÿaDg͘®§¦°!û7&A¾]3³9ÕBíÑÍT Ðýñ„ ¨Iö?HÅThÂØ#`a ®JõÀ‹îV¦gï¯2¸Ïû¯³<€žc  L¼ ýë#Òþí,tË4"9 ²aäÈ¹ÈØ÷Éýû{ivö‡7nüÍb»ýX|Ü@`Ð ¥0`ÂBd&†%-ŠKá`&Í‚°vDŸi6sʃüòëU‚¥/ %܆~‰ÈyÞjÄc…Ló h¨0LÅl4?²¬€ä™%€Î_zÀaÂÔ ÄðLšnƒ5+„Füüúõ?}ë­æXí•æ!mN ¼.ÕÖ4ˆ€ @`@Sº ê’®‡ÕþmãL¤x·Ï4y´=†Q€ÄT:à¾Qš&ùÙ§?ÿÛïÿàë¤Óù?´À}0¦ @ë0G£ #°-ö©ÂÓbîðÞ5¢»›qÌÍ!=ðÀ/¿^5¨bf1ãapƒ½Ûèd ¥¹) „+Z#ègl ÇSa¦¢ìhD[z<ë¬#ñ ’ 2,€ÉúÑHˆ¶q%tåCÉþk© ücß=çÀ²ÒiÐ\Gs¡[W®$Ey`Và=©ìÚs¼.ÕØ.ƒ Ž+ûçfVÔmöŸ3ï—Þý{䘷ú}ö à6z¬o¬¿Ý —kÝ…¿$ P¦@(7Û‘ø`ø0bpç\ˆûaÄÈm'ÌC†QR;¨²ß£øå×q€"˜& Ty´¸TÍ‚y­”¯ƒ@)!*Ä'!£‚Ókn)Œv«°4€à€fv 4¬@"òdƒ$¶€T Ðk FA)!›3#ô]y¬€y«:ûyyàð@àYI—A}ŒÙ ­‚Ëd색,ÌA@XøìáÃå¡~ð‹\»þéB»ý˜AeXHn9`À#4Q uˆ€{,öÙ¶É`Ê^ £Ìj.éA€~ù5?Àö€¾€2I Œ ˜×#€tˆ¢{ΉjlF ǹ#aRãàªî Hžþ¥‚0Æ™¡ú±Š0‘®l5ËXo@61r3¡Øx ’hÒip<ð“·ÞjÞ]]]¾ýäÉÒÀËÇʺ }G™ýÛ@_©ékÁô¿–Â0.B"°’@?M[¿ùâóŸüôÆÍ¯» _iù8Ñ(4Ô¿¹À‚?ú€ „ô ]•´ V.è$‰Þó‹Ýnðhk+÷ À¿üzl€žE;€ (nÇ3qÀ(#h¹n|8]šÑÄhµšé,KGt‚#´XËF´Ac!0qjʬb\MP¦Ö0Ù¢«`Íé€9è:hï«”n¼ñÆÎ»/>}ðüùò—/{yàøV±Ë`™að(²ÿ2`0âÃ;õñu ?Bc£¢$€lÿ΃oßy/¸Òlt»Ÿ*SÖŠýh¬õãÅìoÂÔ 2`A@dÙ€hKu@€šSžó À¿ü: pl€râJPøÛ2Ÿ@®l/sóQ±<€ûBÓp¿Ÿ46ýØ#¡üG"ÀH8BÃ%R€ûØúØWàÊæ1cy P5I¡fÙ KKý7——ŸõƒöGœ»¿±Ñæ–Ã^8V Ì08/Øoöo^϶5F`^ à_”¸wŒ‚tÿ£µÕËu„+çV>&Pj>>ô#Ùîý @Ú@‡l¼üDô'¦v€ÖÁ  ƒaÙF¿\ìvÕ£­-åA€~}Öiúu¾G àóé @Í‘T±e&Á $)uåÜIJm¢j€™+0®Œé*MÁ ˜> ÿ#ÉøÑ“Õ¸ss¡(ªI© aªäLÄߊvÀ¶NÐrøçׯoý$ÏYøòÉ“¥áh‡%h¨*pÏÓ}Pósäq› ¹…Ö @À¾ïâ8`ܹ’'Ü(gýJ ýNÿP&ޤI ˆx ²¾öm ã&E ¸ß]ÿvmíܽgÏ~ñ;ï½ÿ—ôZ&ø_€âXó~  l ´’€âÞÙt‡AbÞ»@¦!;€ ¹´° lnæxà—_ǰý|~6@{°Y ¸Í3Ñ„òôª‘bt`cc øÈ<>…<@'kŒŽ­<6`ÄÞø y}b™>ø’<à²3ä°@—ì7»×êðƒƒ<‡R§W˜ÆXºÉƒdÿþ¸¤¢Í'2'À¾.ž Á_Zû²'`04¾Ö_~þÙÏ>¼qó·Íz}U²¥Äü‡¬ße , ÄøHû‡`Fhˆ%¯¿Ôhè~_yà€_~66`VLš& p²”È:rÌgq?ÜÙr{üaÄ0" /6ò€¡ÿ÷ÈÙ|ò€a &­‰kEyàÞÆF;È2Sô5…:Á²™ƒÜN +0 DûÇsÙY6øÇ’é[IÀÒþ6øãõ ÕÛÉ‚\:8´~ýé'?ÿÉ;ïþõB»=¿(ù3x€}îWÌGäò˜Q! €n§xív­Æ²—øå×icTá$Tv2ª’\6ÁÊaŠ,¦jXR‘"‘X Û£ÔS剰J„Nå€-+tå;R=P”ŠÂiÈþ§=GªöJ§ð@!¥æÎþñ÷¶ïn'"-àó°¬Xüñ|¨R@Ї,Ñ%Ñ×hD¿ùò‹P‚~+ØÇrI ÞKj¼§ˆÛäšÌhÄ=^GÉû@µŒTxà€_~½6l@1ÖT]ô¼Û+`J Ã0ˆ1žÕ4‚<€¦+)ªX@%€‘âyåˆÛ˜&B1š¹ò@Á8(½X¸ùÆ;ï}ÇäÌ¡pìtÅ“E €òAèóódÿ¸ÞcŸõØë©ã (<öC£ßóY½ Š;:³¦ìÖ°•p[h7=0ƒè` #´ Þ iFa‡þmR0wó.<ð˯“`Ê78] ÐKÓ46cZ!dóÊRN˜Xy@|ƒÌm&t0y õу+¯»<ªÓg´@ÙÎ(XVeÿX ýmvoƒ¿ö`hÜùãà3¡e8¬Ü0|(Lþnü±jð骔¿hûï6À|yÊ¡°„^ X¡×Õ+ív¸º³3w‰ _øuJÖëöë|—€ÀûcŠ&Áª˜sP PœC€á+61ݳ_Xl<€$³Û]yÔ¿\K›™/É"TÉÉòÀ¶+”5ÊÕìÑÄn EÕýÇñºp=uXÓLY—— KWAëü‡ëãš~Üo?{ú»L˜ë `óŸSIÐi ’öš0]ã °Ÿ›OÿnD¶Ð2ƒàU£: 0 ðHà}$@ €‚¿¢àŸíxÀ¿ü:Àö‹ƒÉe€ÂC0.(^­WÀ©Èy -•ö_=P†²B=¶s 0påZh[ä§/^,@x²ù¢9Ȭ®~ó¸òú9ÊzÒjos¡´N¢z`lìšÞ•"©dïnæoƒ¿½ÏÍüí¿Yÿ¥Ùÿ&àG4€ÉGˆŒ?gG«¦cÂPú0Òþ˜ÿœ†È2€–"ÈôžÚI¢1b{ xiyà€_~' f$Ÿ. (›28/KÁàŽD1ĵ¢<€_ìxaö!ð¾³ÝneaaòÀçŸýêÙ³î´æB§ Ìê+V sdôó_l6¹ï.A¾*øk‘Üà:¬õ Ìdú rÀ ,`ô‹ñØÌ™1Øæþ [˜ÁÐ“ÄÆ(¨›bPÐë×E"(ÿJU›q=ðÀ/¿·ÞR¨ß †‡5 º÷„˜ÆŒe‘Âð(—öV0@p—LX&`ˆPd&&Ey@æì•&c‰WøñÕ«Û\¾ÜxðüùÒ'ž)“N[ö?íK-ö81 àÈÈÞ»õú^à2#øcñX`¼Ÿå‚€¿þò‹PÝVKK y@)<f›ƒ(ȱo@†c•^¿†ÛôÛðMÅæÀ•v;_ÝÙ)ûyà€_~nádˆ =ÑqòÄØVlÿ ^×Ȩþ›¿ùía€ ÌJM÷¸q©ØfušL0–渧@þÙóʘ=š ?,“èuê̘êÄ6ª’®ž;·{}eeõéææâi”fu&<ò€[ï0°Ôh°M‚3‚ÿØhœùû~m|üõW?üÅ­zôx&°Q¹e´dÿ¸N÷›ÁÙw FJ?À0g4«é÷Ñ¿EÓï0 :  ì·çƒ½~ùµÿ€¿ A¿+óÚ›ÒÅê£Xÿíïÿ;™ÿ«?ÿÕQªNƒA(„jo+ûi‹Ûiò¿6“ÝX8¨UȘ=Ìp&r@\-$¡sýl·;8 òÀ~³ÿyäXMÊ_90p@Çñl%y‚¿Ö£Ðó$õùg¿ó;ï¾÷—aYí?½Á?ÓævÎ À|t9{r É(ßÍñ0n1-6##P¨ù[w{àWp˜ɯ#øè‡Hÿ‰½þ?ýã_žÚ ®ÝVË­7U±—$ŠÆÝMË–5NMÓbDP²?(a‚)·§]ÂÆÀÝZVÀ„!|¨á†iÐÊê Àc‹eö›! `kî·ž€ØÉðÇòƒI×Á$ëáäñ¦ 1]§Ï¸R°Æ‡`ͪ@8Gö_ökõ²?Àí2žà1ã;–ÞÓ‚~çm[I°Üén|øÎ;E×7 H¾ `²‘ázžoÑå]ߦ׶—ÝîõG£>=~ÐOÓÁ ËRÚŸRöŸB¢Û9€üy¯Wñ K€øxx8ò €_~Ò ²)dü¶‰Êz ÔÊh9<¯<Ú^Æ/`å üÓäØTØi„¶„ðÄä£ÈþË„,'é°SþQ)pÜÁß@È÷ÖV—Fapëg7n~Ä3€ùº†lŸ¾÷L.,Íéo™ˆ¥Ný¸'­ƒ3Ífè€_à€_§mô¯ ¾7:u–ÿ¢ýŽýXš¢äÒ4e¿k§Þ$³àÛ|÷î8&¬8µÐæ¥óþÖp¸š&øaL…Sj<Vk5n ‚º èY!™=1y@: Öxl1LÝFHŠò@æx¤‘ÐTy`w0h}áÈaP^»_…¬ªæ3S€CU߀pŽç.%J• z AßF30CðÇÚ3"þ½ß<}za©ÝÞyûÂÅÛð3L` @€@KðC _rS×þöÞü¹‘+K»7$¸WYû&©´•zº_wO÷¼7Ó³>;Âá÷£ÿ‡íÿIÏáqÄxÞøy™ž¥{z•JRK*Õ^d±¸«ïw鉋d&²XRK‘… d&î÷ïœó{ê @ñ*ê –Z-b/Gì¨'çìÐlˆ›~Dü——— ø«@?—±§¶×¹ÊÕÇ}MXÜþùÍ›tçéÁ='ãRiþù1ЋçΙ÷vÓ¼G躟$:–ªç¡!r‰Ò4ù9ù©›ÅcTémZ›Öœó§ZˆÆ¤šSuäìóTuØÑÄX¤Íçn%i¹éš`h¢zL€O¥}К ÙZÛ1`Ó…: ¡î7Šîß>y²Vž=WÈ&ežE’Q3‚»šð7êȉ›Æøª Qx$ÿì˜_Ü?Kð¡ÀÿpCs|¾ÇϞݼ°°x°ÐíR­$?+ÿD±™ŸÀ¸Ÿ"€Z¨Rhiüožózæ+Ž·;¤5€ßÔ4 ÙþRÿ¼Œ3ÅP“2è['3»RLûºÜý1"Ðmµàx¦uiM×ÀB°w.†'Ú‚ÊÓ)j3‹j‹2pd¢5±¡QCÖ]a"@Ï›×ænî1—cSuöéñÑÄæyzŽóøUé pOÐsN÷@à #*ZE%ÞpÒŸ<{¶º¹¿×-&(U_¦_ܧ„IŒÑ%!¶k W_]Z Wb lˆ#Í ðý3~ôí'P¨¥ó º¡3à7_|þÞß}ïÈ\3ˆüQ2%D€”nL¬ `.[¤à_y†!¹J’Ä|¯s¨`†øB”jŠÐl ð—_˜€° úûakZAžRSŠò ðz¶r°Å‘ÿ8Ÿ¹ÏµE!Õ*—çÐþ¤Q¬E­Xæy(¥'€ÜåYîPh È/€˜eÒ ¤;4ò¤~Ž:¯å-X‚ #>.g‘ÈÊé­%µé´ò "7=@¿Û=`= ÒRz€~—k(=ðfHÔyþÕÑÕÿpÛ¿Ê´ð@l~íHàÓ®Ù¶Ãr$Æ\©8 Z?ýä“÷ÿô½÷~îq-@"€kÄ<Ž%@ä ãk ÀO% æzG½¡€˜›ü(Šêêfo@³5À¯)I>éæ¹Þñ(¿2’¯ÚMÄ õäŒ3¤‰{c¯Óö>£®.-¼ôû´æÎBe~†*|b)ZÜÐðó‚ﮉ|"V/ ÐïbqГ*`Ęó¦zÈŽnDmTP"ŽâÇÞÒ1¯ci‚³H˜ç1‘Чô@©{@ÒÁÌén;<“ôÀ×ýëš¿aI@0áo5 ri®µÓ€T<Ç.˜¦'š¿š¿ÙuÁ­ØÚÛ]¾÷èÑï\¹ò±Dþ¸)ð÷x'2Ðì·Y,)üÍPReÙ(•H@£4 Ùà÷è¹Ý Ô*gŠè±F¤nO´{f  ×†öÖܳ§ ÜXJ7Q1Ù”Ö{¯TJÞ^±ÿ9U9à ÅJ³9G@ÔMdƒ[°aŠ×gP ú\¨Z-€6Õ D\á ©4Çÿ™w¤YYÈ…$@fÕ²"¢¡rþÀ©Ó˜G`Öƒrz*@ QEz?CëàëN|ÑÕßÂA¿B5à4$ •šWå}>ßÿºz€g›Ï¯_^YÙYìvðò™á“ž{ìV™ˆöˆZê0߉,Gw€ù.´óO8àIAlÝP­JÐl h¶×¼õ7Îþ+üs¥¿~´þíôéJ Õ €H:ôj‰ö9âÅZÌ?󊵎žúèÇH}Q•Ÿ1È­ÿ™þQš WvŠDþTÕÇÔ`£gÕ¨*Ú‚ò?Ù¦pëêhl0^CÍqPƒXD<Þ•@Äžmˆ¬­©%u 2 N›HáìÊi$`ÀKà9È¿Nz`H€.él<=@‘ÿiÒ®¹.¥²tÈ+¢öY*ÿóškZôïæcÜþU¨ähH@{`Ý­[ û™ð{Àe\³0!ª¯P=øòÎ÷ï¼}ˆKÈg% Ê‘ @- ZOqi™[¤ÌïAiÂ÷!5ÿ›2&p Äw¨e®¢CsM/µÛÞ>ÄfÂ˱­QÐlß  m|×VVÔ͵5ªêŸ+EüžÌAþêhß«}€™æZ=_ä}_1”&öDrü\CÆD 0ÞÉíØÞQ`¬@W-P þékLO“±LT-–ªŠ'½¥yÛ)%ÓÖh‘!zR 2ÿ„`.Hî§Ž‚0Ô® ÔA$áø»¨'À"JMƒt'ŒEW–Ô¥ÄrXËD¤&=à‹å0Ú©…ÐIDb:ô*éÁwoÜèݽzµóÈ1ò~¢ÿ:òüUª³(eðw?—üqI f©ØÛ›ûå—÷ßüþí7 ÝS ©† à¾_×¶}›žS®¯š ãl‹wQ¨+"+=ô1¸²ÉŠÄÍ5SIE 0k$WK{´~g0Q!ƒç̈äQ3ȨH%Bpç@jÈUŠ–Â6Ò Òk_Æj‹DA!ÔEEWXà‘>HUÀ%§K`:!ÈËW™XX®/-í~påÊÜý­­µ77—ó,õ¼) ýUEÿ_§PEN%Õ ’ל¤ÀJq¿üüó7ÿê;´g!H@äAõ1·× úð'æ}Q—ZásE m‰®¹ž  ¹(¶Ž[5©€†4Û79êw “ÓÂ7øCÉçÛŸ@ÛÞ} Ð×hcÍs±À¨ñ1ðîóc¶ïú¸/¿e/U.´¹4êe6ò—çÓBúG€å~zNlU¡Û3à[rÀ$€*«=q[˰¶›ç™¸–"… YT³Nà~6Ç>¨¼ˆ“*ÐBJ M5ót°¯’HÝôB‚1Ä£ôEü§MøR$X¤äy¤Þ½zõðýkמ}¾¹yîÓçÏWzƒ~ë¤é­ê½Nýj€K´DÿuàoU‚º”~Þ+Õ¸¯DQëã'oÞ½~£Ÿñ´IÊ\ùœ t€(Dø€$Høº!âj{(„]j·µùÞO’ÿ !ÍöMŒúíV~åDzw0ðå ðû„Pü}'Ú‡ BôCýÐ,8¡}üÌ,pD Ì ”…2!Ð)ÈtÕ ”H@Å¢=’ÿ!ï³¥OG÷Xm[Æ ˜+ýœ‚ԼǘÖiÙå~BÎj˜N b€(ùUß§¶*DÝ)á{†Ü*Š Sp§ÞëN’øˆ´ðÜaS½EË!SêÜ¢ÁÓ¥2t}éŸÈË)ÒT  u{RzçæùóÃÓ¦ô…଺¬¼.AKpÞã àOrÕŒõU¨Œý‹'O.]Y;÷b¹ÛESd.œˆÔs]kö û( 4_F\óI(i-c\WsaPuš&Ú7*@Cšíë¾Xä|ü;óR‰ôC‰ô[rÍü[²¶Âޝ ©Ï‰ÿ D‚Æ$€{Eá þ"}nôĉ¨/œ…±›ª\ Qáç¹OÑ¿·’?ýØÀ‹"^K‹&Ô,˜tkž£ÞkäUÍžJ¡È@(¶«ˆÐQ;Ð6P*-‚])= Y`~”»uH%Ô¤Ž¥Ô¨#Œ%m“¯#= ÀIQ`‘ðFcŠ)=OÌßßÚZ–ð¦SrgýOR^§‹ ­³!ÊZ"eðWø—몆,ÙãImºæu¿¸ÿÅ­¿¼ûÁN.59Kþ”@{ ´&BPº "3ç>fr!˜ïý‘¹ˆÛmï`T P• hT€†4ÛïË·»KKKê–‰ú7ÑË>-ê¯~Îóû%à'ÐÀ-äb%Ñ~Α~K?ÄŸÀsæç-’x!<ß¶4Gÿ!=oùû’ëÜZ‘ù‰ës©#À.Bz¤dEÇÌ's¢~ºŸK4/ä€ÏàÎ5‰æ–ªØÞôWA  ˆŠÒæw@´Yhsð>ÈK¯H  •×IKˆ@ÇHÿùSù>Rå‚ACPgà•RÇz´Å긜 ¡C’ð^%=@÷yê`‹€TP J'§†ï]½Ú»{íÚóÏ77×>©I”[ù^ÜOJÒ 8ëÿi;kfKl=@Õ˜K»‡ü‘ÌåØíõ>{öìúíß™¿?€v "Rr ®¢øàšö[ÜMBm°P¬AV çRU©€Fh@³½†jð¿uî?¦öuFxå¨ <_öûø}þ"¿oÁ_d~š]¯àEâo#ʗȾ%?À¾­ü[öx¾­X-°à:J­Kt”:u²íyóišÌcÐY˜ôb,íÏU5†fÑÚMx“M±ï͵Ú}ø •zQRôY! ðWx³8æLby>–çbQ HFUWaÝ2ÀÑ~ç²°f܃|:Š¯Ðªe9×uHÀB6„3œ=òk®£(7Ÿ×„â> ‰|쉩PyQ]÷ÀXÑ ù]¤ |7=RJû`]z@Ú æQUz@¢þ€ŠíèâúîÖõóç·Ö×_lîí-þâÅ’MXXÌj®õºn‚|JÊ`Úã*ð:­„A§å6¯<ï‚bßU>zøàÚµóçŸØÀHEœà.¤F’áAhs%‹`©0ëŠEiÍÛhR h¶¯{ƒÌ\?dÈÿa)Ò8˜õ·¸‰€ßUìðc­€vŽ€nŸ@ß6Ï·íóö9ý–‘«XÒøà.J­.„Ár[{˃8êàX”€|rkTÕcí›ÔÞ·Ôöá¡Ú>:ZÁ±¸`ŽA[êœ7¾ì¦éþn¿Ÿ¥ÙÁ|»}Ôiµ ro)Žî! ø ,óÇ’Àó´ *úHaqåׯ Ñ–<¯9¿J;]A€üjH*­A (ƒøgÔ€`þ€Vm‰@Ç€…¶-ŒvÁ #ªDT“ qǧI¤2€¨œH„Hz`è}U÷@Û¦  œ_\ŒÖ——÷¾sõêüç››Ë÷·6— (z³ †žÜOþuj€:c`¿†TNÿºI­¦Oe4ÇÒÿøñãw¯_7„XÍy þ¤à\IágDç—GN'ŠU« @ ,“³úÎDLå\gåÃÚ¤Ðl_ù…aÖõ N¾Uþ¾, ø¦ö&Dý’ë+òüž?¤v(Ô"õ·œˆ¿%½#@€ï(€¿¾æçìkÚÅëøg-s1/-ÁúœïFÑ¢A¤.ÞÓV–,U;½Þ±¨Èµý¥)„æ1 Œ‡CZulžªÇb»M˜¤lš¿e7! K†$`„ëÚZ¸V„Ã49|tppáþò Ã^ŠB°çþ©°JsäÏÏ㱌ï3&$·âgDÌ" R`£®Œó° ^‰yï–PEvŸ á ˆú€ ŸmYx§da5[ ׎(vÈ€Ö逽,vFn×@É\hè1øãq;²€ôÀÝ«WßX_ßûå£Gç½Ü^œ&¿ë 9üu(nYé8+ÀJüª‚¤øOþIǃ Ÿ>¹xkcãé\»Mѿ쬘sb‡ÇæÜà|@@hj¾ì~d®A‰*uµt[-ÏQfªhT€†4ÛkÜÊù~<ÖŽ¤Xþ[GGú6ê÷8Ï?’úM”¦%¯GËóŽDþöþœ¶$€>'Q>w´ÿBà_\ô¼Kq¯ðñK™è—Ø£P ŽÏÑ`¯ñ- 4“qÄ ø;-ô\׌euIŠ!J– ๭^¯»uxؽ¼´´~~qáMèÝßÛÛoµ;[ËÝîV¬õKeÁ€.J€y&†TqmÀ?ÇâÊa`ÞÏÐ% Xx=žàK/¶Ý¡$ä="eæÜØ®ó^õ¡TcÃ^Ç(©§:¯ ¨Q\‘Ðnz€9–N‘@tOi›HjÌ…¤†Àù|¿m[ [aýøöíã«W»?»ÿÂsgî@Uô_î?«è¿üšòˆá³$åz€²ïÁ4àWÀ_.üÍÃ7~ôæ[û_{¼›ï¥Ù‡d8e…ÚŽDRð§€iu˜kÐÖ¸ÑSØ€fû:ÁÿvE¾ÛÑñ ÏFým.hëCÔïÈý¸EÁ¼XàWü’ÛŸàŸ³à.à_Ü·d gàïп´ìûד(:ß1à z.€_öZ” ,Œ!ÂM<PÈÂnh¢ LšÉ>FœÅ7æ~|z/8ŽOö÷A”!K†,BðÆQ§{½í°ÕÚžŸï>1ï÷ÀO¾YTœ‹20)0÷”ÈsºÅë A «Vú=ß'Âàs]œ€AbÎOšèŸOŒN¥HQvÈãZ•6ïü õ¢Ôu…MKdBßÈyBz)Œ€÷©ë#­épÓ).´¤ ÏÛ>Ôƒ âÂŽ!?yûíÃͽ½•_?~|îåa¯ã¶ç• _GÅ~9¢v=βK§Â½Îóš4Ç,À_Wød{{íð굕¹vÀÏÀóp=9•çpì;Ô½bÎ¥¦ÐljCH˲3*¸!Íöuƒÿ…R¾¿*×_Žú\?$Þ0“¨ß“œ¾YØ[¹DûRÌ7'’þ¼üsÊÙ…Ì…Z¯šHÿ–a—!-bl0À€ëþ4°f ôS©”¶«VÒ­! öÿàýáÿÖß‚u(—Z­w¿ÜßÙjwžÏw»OÌÊØ3 êDÀŸ3)è{Lð‹ì çã9€¢‚çR(-f1Vœ—E!à ¤ö6G^Hdþž—÷ÍBŒYmn$yÖ¼ŽîÃPHqúZרué|–ô€a~’¦4r…æE¥ô¥Jé–5²E‚ægT_ˆ@äs ¡Eêƒ9>çã¿~ï½ýÏ·¶Î}ôäñÚ0$Î&€¤ÿŠÑ]u›­ PgH<ì5éVsªS¿ýÝØ)´ïóŸ?ûÝ›y÷ƒ=µi:0稃5æÜ´µµR»'»†ð°˜í«æ±o¾$†8ÓgRš4@CšíŒ þ¨ô¿)‘¿ž’ï·àïTøû6×o+û5Gý%€?EïžDòðZÏ;@ïÿ¼}ÎDûWV|ÿvž$ç³<3 °ÂºtÞ¼g}¤²î"…ÇCÇä$u<Ðë&ÁåÏy<í¯ò¸‘+Ž“óÿIŠ_vÇ–ƒ¡‚Ž‚H>²µ¥6×®,-­]l·î@hwæµ;ghïWV`RÐÏ9EЗ½-)ƒ>GrÛÜ0˜2àñù‰c¨Œ=roñ¨c!b“!€2Y ãó‚  > Ïèrr«'n×@q?å©pž¤ —Ášô€àÚ9E÷=fÕÀ¦Z@á HÄ× Ï…iñÍóç£kkk{÷ž>=ÿéÓ'«ªÜ3'B¯Îiú´®ýòk\ýû,H€¶™;}þù Â꺂@÷3ìôzÝç;;ë–—ü ¡øg’»`:…IÙ6²òd&†ÎÇÉb£4 Ù¾®Èc|m1—ý‹…¿Vòçœ-Ëý&êÏlÕ>"–üú`óˆþEöŸww-·«aðƪï¿e"Ã6rúÏ%Ú0a§¶'ñÀ·«D(Q¶rÀ¾yÑ8Tçuµ ^gþ> ½ ò&ÿÇ/y"$BLù¤&!°CW\…¯µê^ÿéÖ–oÈÀúR»½Þm·‡sóóº ‹÷Íëz³÷A’2€¾ÙEÀ ë›33 Ï>Kʰ(ûˆ°•9PЖ5`ïþ ›ÐÆB9jã>î^)T®˜h9üŠéê¡ à1RÜH…€>§‹nƒ mÐܶáP˜ß͸J½Ï÷Ê•Áí vúÙg_öælZ UãùïIµ³Dý“À¿<úøÌ”I‰Y<ËûE%pÕŠ?ºö—++[N-©P¬°€WB™"âeŽ}ˆ¶Uö®`_€Œçeχ¡F+îIU€†$4 Ù^øc´;c¾ýOÐ+Yà?2ò ½Q®Q¿-æëXŸ•ùæÖ<×Ðï:Àßu¶ùø°NDm1^.‹hÛŸ —X^Æ\Œœ™È£Ç¹˜xà×,Ñ‚(‡¤ªº@°JðN“0Àa>¦T¥Ì1 3q”È?”iƒ¥ èˆOB”òcÛš‘*ÀÉǾ†H =zùríßî±¶A—Ù”óõª¡êüÜŸM³(™<`ûý§¡ä4àŸ”.€ p8,wÚíÒzØ=Ø:›=0<×*bä„ùdŒ•‰ò„bÀ!×›ä¥Cר h¶×¹Í þüáàˆ›ŸHÊü[bÛKr øç¥’¿K»ÖóÚÞgà§Ûå ¸}.ðß=ü†  šö%Ïø}©ÒÇ­–ö&ì{·õ¯¼h`Q™Þܘû{ƒíÃ!y­Ãõp¡Ý¦6À9™{`#~‹fxŸøê&¨×ZÒ®#[!ÐâÌV&¾›’*°±Ô;ØXY\Üì.DîªüŽù›GŠ^"æLe¬À<§ôAÊSé\ÿ|ksyV5@MÿY"õI€ýŽdYvfÀ_V~óèáµ?~ó­]‰þÛÎm››a»`œ³êŠ2çR XW[2)ãÒ¨ h¶ÓnSÀŸl›ï¨±Ÿ ÉKà?’ü9‡ßqrú]É_ë®Dù – üç|ÿòzÜͳt¹ ø=‘ã-èW©ž¥ücmOæ9€ün¿¯^R:áÙÁ=~/“×5÷g¢Á¿¿oˆ€‡ÚÅÝ/²€ã ßh×Üâ=Ô[Çò`É@êŒn­R¼x±¾tp°"0ÏD`Ûü½#Å5ÅŽsâ±9ÒQÆCxæ‚9|ÅõžfÅŒÔÇMZð~)úÇ-æ$£.ñžúã…[u)€IEƒ•éóñ|'=àM2BDÀ΀¸1M Èhl»<0BÙ äN± K,øŒ«TcD`añy«Ûý¤†Ûæov ZJa :/ZÖNYÚ213a@ØÌâ‹þ}´ý JäÿhéJÿóph=V,rt HÞ¶ì({läsA›D¨Æ-‡½òDBI¤uæB$TmÂ&™‰‚D ä"Ax$`?Òrަ×q±äf0€œ_ZŠÿúzøpãó­Í•:5à¬ÁÿuÛÉ¢¦žiñÞ>yúôÊwoݲ*€­èh}¤¢|×,%˜m¡…Ì¡€ŠGƒ¸´ªܤÐlg¹ÕÿÓƒíbfñÔ%ðç¨ÒÞ¸äB?ä¡Aº’ë'°—¨ÁއܿfÀ`¢«çGGS€Lw àôÑ^÷ÅË—”ç·æüYˆŸ¹Ó¦éÑÿ´ þ‰$Õöö¶úØì4ÂÐ|Ô7´D%°ŸÍNi³)‡²*P&>y¼aŽÍùw®\y´°¸ô¡Dÿ‡ƒ?Ôš‘Ù¶L((ÄãÑÉ~Æiï3¤õ¨½(JÍ­§¢¨8ŒBÔÑxԖϨ T Íš¹c Có×h"Nˆ(![–¨ò?Tü,ý“Ý}†Çsò˜~?à”Mµûþ͛ѵÕÕÞ$5`’ì_>úd—Ó™‘€Iùé.õbÃûûlûÅêû×®uÍ1Cô_ÔÀÆÛçbÌ¡íΠB@' ›ê41çAÆpD«Ä¶“x25[CšmÖ­ü‹A>#ð™ú0°tò‘Üo[÷Jà¨Q¢þÕKað}/ËÎG’kÀØ& €ßÃßx´·§>7Àúпý$Ÿ½Rû¬WŽ*°)†Ä‚‚yïæýÞ7;¾„æçÕååeJ!”£ÿ²*`£:K :à5ðÿ´µu#ñââ—¯ü6l·S &L"à'Àg`ô”˜ˆóË#˜5mt=C¨. Åcã}¡wæA=iôøç¨Q3¡¼Be®ëÈO“°ÝI’¤´ž2‹ÀB¬7×n%d³2ŒH€`¢øäx͈$ĹÔ ñÌç—–’¿¹ûÁ‘Ôj@Vñë@õ´–¿gEª _øÇNxšú··/Ü\_?У€–³‡v÷y§]!­hîÀw‚©S_R¥4@߀f{ [=øK¾?“|¿ÇÑ%ùxÜÊו‚¿E‘üðÇýEõ¿i£þ-õ# ¤`ލ)Àïª÷Ÿà„¬ÿáæ&yæ&"ëW7ýº¶|1 ÙÀLV@ZšcòÄìÓa'|óÄ¡¬ Øè[$Ë>€’‚×ÇIÒ~¾µùïÌïßè,.þ"ôƒ½œAßNF„@·ò9vÌ@ôíç(õȲ~ÎO…ŒüoùÇ#% DTMà{š®céu¼{À§šŒvFÁ ù? ·ûðcê@~_æ$ÐÏà!bBÀ…±%vÈ’(V þõܼ9ÜXZêÛN|¸çÈÁ×EÜ‚Àü®åòg³ íÞ“Ç—oml<–¡m %õ„4ÀÐc+p"i&ò§y9óu\XzÂu¡ªHb£4 Ù^=úŸþ˜Ø‡S—À_[ð×z>Ç”=­-ð/Yà ¸Ø ÿ]+ϯ %êïØ¨ßzï  qï•.ªX€ß>‡ßE¤ÿOŒ~Z£?O#UdáU]HtÍ"Yõ¿Ë¯µd``>ç‹gÏ1Œ i÷ý$V 0·Gæ˜â8-ÒÊD8H½¿}òä\oýÅOÞ}÷ÃöÜÜ}+ÿ;é(;»HN­€!ÔRêÜE5ß²@èßžì0+pJ,!¸²ºšžëv~úùg—·{½9¯âºÉÔÙöó»×HU;âIS'‘þ󚔆®¸~ûQ>ßÛ=ai¹oÓZ*ÄtT)¤¡PðÁ x¼v¦ªÍ !ÍöšÔêZðG±_ά½åºøivñãv¾<‡°è€?î/¶â,;ðO\„ŸÝßܺ°¾´¼)²¿MX"€ÇKP ð:­ Ói Òãi€“¨ÍÖ€f;!VÁàùS]þòemÃ9 }æ9çù­s_QØgbɉü—»¾c= ¾w4£¹Š¨ш–œ¾²³Êå¹:àÏNú³ö½jÊP©+@^©ã­Wzò`UD× ;67G„ö58¶6-`[̱C¡á’L'üÍãÇá>¸yó7+Ý…gŠ¥×@@`Ž{sU¶Or,"}HÅyNÎa 0KŽó;Ïù["8Rçê¦&H¾SM…O#ôœçRñ© È)-ÀΆðùÃí05d õÌY €Ä/ù~_Ò9+˜ÐH÷E€"€ÖÄ냫W­uç‡?ûâ‹ ó'=]ŠÐÏüÏŠ(©Pjr'À,À_&®öv—¾—¦³øœ @ðPLµiŸï'ä B–çèðòã# fåBЀf;iäðkõ«%þjdÙË9~­­Ô`î/û˾wÃyv ¢þıôµýüÈif€ÿïß'¿[øëÆÓå' z‚ `ÃÒ*¢±¾°pDÊ·YìwûýN9úñÕñ©r.1˜U-¨ mã³~©pspüRg€¥Ìíª! V 0{÷_>ùôöÎÛŸtææ?ËxvƒgÓæý£ªÞ®õP´·of¨!ÿ@güóÈoµ|eΤÿþ¨:Ìyϧ—u€¯T}û`]R¨a°#‰i” M Â̹P0•z¸Å]T(ˆZ€r?ˆeXè3¾O¿ƒûƒÀ?ùTd—WVÓµ» ýÿ÷“¯ì÷ûíªó:¶W!U*À«¹ðÑööúõõžf[…=™â(¦aÔy9—žB bÀˆ OUé]Œoú¨dtdHÁJ§£+H@>… Lk¬K)°Þ–$B0âD …T3º ø#U€(@H)‰Ur®  "Bf¢ c@I=_ÒyŠ”‚9Ù_¼û^ü/÷ï_zør{)P¯gœð™*NG@þŠÀ¯KŠÇÓÝÕ[ëë-‰ô©cˆÖ\FN'€L{D; ¼P¨Iž#PÚAò–LPš4@CšíLÁq<Ì'”ñ½ÇÀ_À¾ëHþ˸5_äsÃàOÒ8^¶ùþ–¥Ö{;© ›µê…Z€Šþ~ôˆ üòz´Èk$Ÿ $ÎïpŒMô<¸hÀþ|·;¸çE>£ e\)EÖ`çÇ%ÚÔúâ"€Ò[_Z¢µP¤gÒÇ{{K‡ƒAëåáaÇóù~¿ã©ãžòuᅫ XEˆ{o{›¢ó«Ë˪…¿yOˆÊqœ 8÷ÌŽ×w H¥=úÉßyç§O4mùËýŒ‹ítn išÞâyºMæ(:Œ£ˆj0ÞÕüob@!ÙŒ×æ4Á™Ý"@&G¨@t Ð÷ØÉ/H=äüÑ-€A¾å‚@‰öñ¦V °µ-IäBrN=¤ÿáÍ7ãŸÌoüöÑà ™új:PÜïÄIH€-$ÍKjW•z‘OøþU½~¹»»øá`q®Õ>²*€vÔÅ©(¸l)ò‡£#j2p¡ âÙ“JyNú|³5 ÜÞßÝ%Ÿwkï[€¿õôça>*ð×N¾_3ø/šÅòüå0øÓau!7£(-“<¿'V»JOàºQ?*û÷zcQÿ«l6ʧèÕ÷³[++ðMD¸Ðn÷iQÏ2Z¼#âßšÅ=S–0È¥l:Ïkx‡VEÛéósÖZß3ä ç--ùoÚ‰‰¨¹ØÛ[~¶·×}vpÐ)'ä¦%?]"ðÅÞÙýa¤3©ˆþÍù C @ :¥”ÀOïÝûñÝ7~µ²°øÔ*íÈðu‘ãTEV†ÊDÉæg|X̽ÜnƒD¤ kss˜™Ï n”Ÿ›4gÀ›D\"5'#hqßøÇq¢ârƒ!ûg9n`O¹Hóý(”ìŠßþ<ÒˆûÙ»—.a€Röˇ.dRðU­N^Ã¢Ïø«Ò¸¿|yî­K—_Úá`ÒH5þ¨Ô3Ä€'ftd|ž¼!Ïðjˆ¡j¢ÿ†4ÛéH€6ào§ú‘·¿Øª†Ò–cÁ¿cm}+ÀY¤ÿeÿVøïþhÓóÅÞÖFüž€‡ 꾤&Eý§ùf» (ÿ¶ý›çÎ\Y^>(ª¹Í¿1Ñåuün*‹x–€8ç…ß‹K´sÃ:€VÐ$ :FJ4àæÂââѺ!ßå(ÈÿâÅ‹Õgûû _îì,FQúÈ€žBðf÷ò%Õ 3 à¿ )A)%л?ûôÓ?þÁ;ÿºÜ] Ðýk¹ƒ eøQ®øüæèÖÀTwü¥VH@/Šˆ8$€Š…L `õU`V±‚A7-"€tx¯¨XÿÐCHò¿ym(i€P6þ. ¿U¬@òÖ… Ùj·Ûÿ‡{]ÿ}'^ ŸøÝ¿eOƃ/ÖÞ¾tÙ‚¨3 ýK+ Hö@j5è\Ùt’šÜØDý h¶JÿE»Ÿ'à ”ûoî~ü?Ÿ||­×ï·õkübë),ji°Å€ù”T›žròÊJÀ‹~¿s0,Ì…-²£¶sC¬‹¨æVTßL\ˆT¤—&‰nñp (S#›4@Cšíà/‘1Ò7—/'Ò¹ð÷¸×¿+¿.ø/ÙÈ¿ü‹…@Tkêãñ“´B>ÜÝUÿû½{ª‡ w§Œú]àG´ÿîÅ‹/ßÝØØ5ŸmàÇH[±tM„°lnÓ(@?g2¹J€|Ž,¯Xm ŸM*?ö´%X¬PôÉYTÿ@~ÆÓÑ1DÌÇÑß¼¹cÈ@`ÈÀâoŸ>=ÿ`wwѼkß׳#Û>ˆ°m"p,ðpêÃïÚ”€{žðý7/_ùøÆÆÆ§i=~A^,î}–ýUbÎk²„¹îÄ>ôÚ9)4$ 3ÿS¯ÍÍy/ûý¬&‚›µ33«‰ «Â«I äRø,LVèV °|­à3™™àó&jÔþ5 Ul>”Ú”€þ…,Ðûì´ZÙ_½û^ú÷}xóu€I’ýÌõ5Å€'þª4À‹½ý•.¼Ô\õOò¿MlIJ 㜃!œó¡¿á«--ªº%°ñh@³ü}ÛëOà?ªø'YNÀ¿#àoeÿEÿ5ÊùO»Råû¡˜›Ç{{ê?ôÍ­óÉQ>ðÿÑ•+[øwRïjó(µ o?½ Lå>/æä@œ¥cà/²¿üó ÃÓô( œ€UVÈE×¢eSBºì-IŸÔÆJ£fAôó<\évöÖ[;X,?~þüüg››+/{]Ýf!{ˆïmm©sóóDÈŽcÀˆÜ{ôð=ó2yf-œ 6B/E÷)ƒ|–ŽÀ}LÈljcjSG!w!ä†|aHÀ­³$“ì‡O’ Hk<N üUi€';;+7××m õ 5ÀgÂKu0 Åó,"Œz6$+S§Šø@7i€†4ÛŒk…[ôç¶û%NÅ¿Y²ÀÎÛþìò· à–¿m«ýµ>¿?˜þîfóýØïï쨿ýøãJð?iÄ/ÀÿÀ/ ÀÇnô ðS‰úmOxæ¤25"®ô¯òñ¹/x/e%@y® àFÿ܆¦ì=K|K°Ê}ÍQha¤±©ü fðæ… ƒ;ëëÏ·{½%¨_n¯ÌB, ÀkÑ2ؕɃu$$ üôòÚ¹Ï<Žþ‹BÈœ?—s ï@|vR¬R·©€<§Î€åv›°æ0Š´!JHÀ4ÐŸÖ QU àvÅ¥S¢Hj€âó“ÛNüÜ\#™yç™ÏcèPj1¢QHàÿ°àÎ|¢ëG Q²$àç_Þ¿üh{{éUI€žÂÓl¨ë¢„Wþª4Àƒ½ÝÅÿ 9éä>Í¥5 Ž”PÃ|;"{È4JMŸ ào@³MˆþQôg¥›—¶‘¿Íû[“òõ7àï‰ÓŸ¨ (ø;‡‚¿~µg›ïG/úï¶·Õýâ ÕW\ì7kèg?VXH²?¸~ý™DüC üf³'ÜÞå*cÀÂd6ßK–ÛÜ®UÀZ²|\z¯èXzæ)Á¯¥K™‡"0[0þ1%À’_R. ⨖­œ†*ð“·ÞÚí ¯/üüÁƒ‹³ÏA'´¶L´n«öëHÀ‡¼×mwúËÝîSYm¡Ç°IJ 7àO®?2ÂŽ:spó¹€——ýÁ 7× §x`P6ƒØ3«M}: _Gèq‘0Wù˜÷iÞ5ˆ”Q(F Û:¹U‹׊àŸ‚¢xÔ*H8N?~ãÍä§J]0 ü§åPÔ”käU€¿* ðèÅ‹ó—ÖÖäÙPæ‹è9 Ýÿ¾ùv-¨¤ŒT€I΀"Ѐf«‘þ=ü¢?bâÒë»NjûùÿKf¡_v"ÿ5þêVûϲAúýÅ“'êÏž•þ§‰úß^_ùÃ7^˜7~$À?ðøKÄŸX Ào €(™<¦EšnáoßlÈo3”©"@‹¼³®éÑíhñ”èß’i%Â~o¤hŸÏƒoÉ&8!)€w½<檞‡>õ05·s­ÖЈÀ¿"𠆔ÃcFªL¥æ.w:µ$Áû¿|úÉ÷𺺙r»"¤З™AT1/…“óÛ>ù¹›χa~$…‡æ”êÜÅ:Ÿ×´ªúX.t‰@V“Np}rLùSæ½âš Ø<(”k€?£¤ ¬ÜËŠŽŠï§¡úå0k!JÎsêÇo¾õà´$`Vð×'Tò å¬Ò›û‹—×Ö‘ÿ7T`'ŒÊîÉ÷ƒRe-Ïó#62Ì×÷„¸çTÍxm4[Cþ°¥ÿn«5Êû››RäOà¯ÙãßWGþ¸]^ƒü]w¿i,}öè‘úÕæ¦œ°¿ß‚?äþ?}ã§W–—÷Ì{GÔàb¬«Y¬‡þXH€€D€„ˆ€“÷—ûEñŸ•þÅ “JöŒÚÅÌâ*»•±@ÇSœdmâS ¥PŽ»bàù\èÙ”™ d¥&~A„Èãêˆdª§Û¨ 6D ú3&‹?ð`Ã%e=SãÆ/»Bt P¶0ðÓO~ð'ï¾ûóí›#¡_žIRš³ŽƒÙÅr¬ bHZÀ¬ã¶F€ˆ˜Õ-ØÓF5L jë «ˆ@o@N)ó^5HAèkøVÌéN è‘S"IÒ¶;À*I.¹1Ç$à•ºfHÀ²>Á÷a©¤ªb[âIFTù„÷1ÍèÁîîÒ÷n²õ¯%ˆö•È©ëˆÜ?ú-!xAž{1Û—Õœ& Ѐf›´VHÞ_»f?ZÚΜ¢?[ño‡ût _)üÃÆñ÷³ôz¼«òÇg þnÔ–¾?½}û¹–£˜ü9òÇmbUÜG @ 2`¥QFÒ?ƒ?Iÿ©5q‘œ¯vZ3ûxd4¶¾ (_ð¿¸Ï¹6:§þ¦Ô*c•"t#5 ø ü¡(À([­#C)Ú†(E?yë­Ã§{ë«¿xøp}û°×õ+åÜAA*¬!Ê) üùgŸ}ïGo¿óOfqÎHðà €Š‚Z€œûæóŒÕÈ¿~¨´7p¿"˜½Òéø†€¤êtÕÜ'Q½]"P5¨/wÓ žQ `€>ë„æ°c8¢PDôô©òÌú\¹“Iºšûù㖠˜ô÷oÞz²{tÔ™¥0°Ê#¹üëÆ,©€Ó¤êƒÝÃ(<æçÂV¯Ä*ƒ?”Hs­k§aëðÝÀóã_©ÉŽßÍÖ€Fú·y‰þÇl~1]qen[dÿ9‰þíd¿Âã?L’÷ó$¾ø`ÿˆldí¸Ù×þ6×ÿÃëן£È@ߺoÀÏÜF1?Eþ&j£¢?sK €Dÿ‰´ÿ‘YK2R2éÈè?ͯ·Eon—ä¼Däþ\"ý2 @zÄ‹95À)!GüE*ÀÖØ´€ÏÎhA,· [¤"â'ÏtU‡æ¶ €s£X"ðSßXZŠþ»>ØûõãÇ=y¼nh¯œð´ªbn `³ O¾ÿ'ï¼ûÿ)[øfÍo`•‹èÇÐPœ€ûç¡ÀsŸúêMj ìóœ‚ü(вŠTÀ,€?kÔWEÜ^5€~/Z¼ÿAƒðˆÚ8Î4ÚÍõ‘I vœ#Õ¨HqÒ8æaþ¦þë÷Þÿâÿü𷻪pªŠüô ÄY¤rU݆XNàƒ½ØÛ[¾qa}ÇsòýÖHŸ `Å `˜$š€?Ï«L€Ü4À´ÜC ÐHÿÀ7ïÏídõ›¤"þ‹ ¾wc£Ó½³sd@ I¨˜=åè(€»œ§/+xÍ/Ÿ<95øCòÿë·ß~|®Û=ˆÒt`Þw_¢~€>í ôþ±äýK)€ÔÞºJ€}–Ú37çŸIk[6r¤_Ðã9äÑ¢îÈ+)…Í™]©´L¥+¼}6¢AÛ µ´§à¬xšÈDúèÞ "ïzú)«æØƒ`XÍÝË—ã[çÏíÿý{7öeraÕ—YHZüïì,ÿôw¿ûÎÞ|󞀿'rÎÞúè’ä\H$Ùæ¶:°°\ÈNQxÄzB09MõžeLì¤bÁ‰v p<¤è)óý1×÷Ðk°ø›PPBâtKh;8ŠIÂØû£¶Qž^¨þæ½÷ïÿ݇¿­ô ðjö$à?-’¯SN üU„Åî[û‹7/¬…€ê °ó“|±Ñö­jfH4~ h€¿,ýÛ–¿DòÈÞÌZÜÊÙ‰kÎøçyWÚþl¿?åÿÛZo¬‡áwa× ç8ÉDð7`€‚.¸Ê`³D@ññÖüå'só÷zynnøŸîÞ} ’?"þ¾DÿCyL‘$D€ÀŸI@"uiìDþ ÿ$6ߟós6âO¹ @q€(Žõ/Ê»3wÝuó¹Þùs ð6u!‘?v¢tV=úqÀ)Rh„P6 àzÝtB´Ö£mÓœRó| €’cÀ¿-¦G1H±5og¾ÕNÿÓw¿×ÿ‡?¾‰Ú¿&‘€ƒ(¢s×|±µye¥ÛÝûÒ¥OGÿ‰‡ŽNø˜è†ÿë1à%>“2Ô†aA$±ào÷øxÖ¹þÍÅågHªLgþP2È8ˆLs’"¸ÓüIce .‹ŽZ(i¨².á¿§|ûÇÿåÞG7S± .5·À@üOš ¨KL~5AxÚ;èj.,Òú¾«xRp›2‚œÕ/N2j¶†üa“€¿5ü±-9é Q¿ ªøçÂ?RœÈùªøßh…?D¯¿[ôç…!ݨÁ@Ñ>tt@úþrgGýãƒjP!#æ'~Dþ~øH@’ø©èVú—çøYà‚?©ÒkW*øK]ãüTÚÕñ­15À®méìé6uÓÎÄ<Ÿ‰öLÄçIj`Ÿ²Ë*£ü˜¥ß’OŒQðzîˆþñ˜ÌS à‡ßRßoL"!¸M8ÂìNÿüÎÏ?~þ|ãg_|~%Ÿ`´0¦Åa¬¯›:xøüÙ¥¥ƒåùyô7y pÌ£š¹ø§˜Äg޵òG± }vtàvŸ‹³WXÈOKìc¯”« ø .DHó„ÄÂP „©j ¯ÉàHf‰Ô’‰A”+ÿÓÕ’h; ›ÿŸ!Uú¯Þ}Oÿ¿ùõ-_Ï<.Oë; øŸ4Uà¦fþª_®0ßW;8pü`ˆp ‘®Êsî ñ8z1„ß™ºqÑä߀f+EÿdøS–þ36úÁ—ÿtžüIúGß¿v¢/~o?MºÈåCÍéÒ¬ƒªÿð”íÏc![½žú/Ÿ}FàŸæÓWá*ð7ï³9À1ø"‘ÿ#ŽþIøG¢HÏ?EÿGù±-ô³€©µiå­x¬Æþ¸`ï]YÍúFóŽ}Tš9£,1@X£i,2l‘qNÐç ÜÜ"e`Ò%]CúGGçÿi@·^‡®ü!zÓ!ý£%ùÿŒgØ·Ý©u2¿žröw66Ò Ýnÿï>úð–‰4+G ؆ö]©ÒwWUóÔ‚!( üõ—÷ßÿÑ·lsÔKôDb/Ñüiš¬g>jH ¹¿¿£kxâIT€W%U5e AJß…8³ÈïQq ž‡¬`¤Pí{²n‘Þˆ°ND%•™·2?ïýè֭ο}ñÅ%û†25¹Ð/ŸuaPÇ+ü'Õ”IÇI¼RÇkp±=ßÝ]¾¼ººWôýCüÝÊÿV ÐN¡,ÒIjºõsÝÇhHACþ0¶·¶¼ÕNgdøƒùçÈ[éŸçpcç~–ýç”uü“êÿ Mo›zãÁþ>ÉÁµ$B¤¸êQ„Ÿìõû4ØçÈ€œÛç?käÿßüµ>¤¨ßìØQ’@ò â~då¾¥Ðæþ)ò­ñŒù•Èß }jåÙH?u@?+Eøc-]ê¸Mz^³æð?Oùº„@Iô‹' 1KRçSÎû{)Rh1; s ÍkAnJ œŸ‹3¾Osì3;µNnW»ÝüoÞ}/7$àv (+7x³saHu¶`o¯ûOŸýîýÎψhàÍÿÏApßÜÚT„·DZ¼pý÷‘BñшAAPö‡Ã¬F±>Í6‰ÔýÝ*£ 1%^ŠéüÌA.•#Üþ‡Çü[`wÛ ¢4óûسc—ñàæúƳÝãÎï6Ÿ¯Î"±Ïüª˜½)©€³v*¤5âè°{~#À¦l; 'äÀ³ùdàŸ”yh¶†üAEÿ“×\韤JaÛý‡ý¡˜EË‚?)Rõ¿ÐÖzýRwþîžy€¢?äú£Š¢?K@ 0^ö‹µiH@ø×­À.ø›÷ieÿ€?bQÿ`èFÿõG¶è/¶ŽüØþÌ¿ú…]k6nßZúu$ *Щ݄hQŠ}-uƒ$IPÍØ¼IªÚ%@„€•€À¼AÌn@¯4Rq‹Á>$ðç1¶”‡/Æ×²ïRá_oþ_.$@M"¹ÈýH÷ í³-­Ÿ¶?üòåÆç››×n]¸€Q þæVT€Ø\R|NEG€/*Œ]Ц†Îgâ[ü_5’Ë'ÂU-ón*¢|¿8TRè›ïÜQ¨„PJLÃG`T0öÞí°(¯-dJß÷nÝzøâè°ý²×›¯B¹Y¥øºè|špVas­Ÿtß—Ëʱÿ-,€…к¥y”0’ÿ¡h:…€M @Cš­ýkDÿ¶ð L*.r®ô¯àõŸçäýü±È,½ÿÑð{»iâCú_pŠþúRô×–|¿'#~±:î äô«éÓÄrüÑSþßy籛﷠?Ð'0d`h¥«8àoûûcK*€?s€?sÖ:ðÏ&Dÿ³¸ÕÕV€ íÈC@Q»òø½«kk[H›÷™Eeý± ðEA •ÿY“Ú[(­€h›ŒG)=C£Ùð‡ý'iJ=µÂ¬©ê_¤kúC@sÏ?†Iònš$ËVúGÄßC%Ñ …IÑ"C<éÿç“Åo–O¦ãåEå¯îÜylHÆQÄÕýÉñ÷-øôÝèsÁ_$Jd\žÂ@€?)ZúY ì§©uÒ~‚5Q;Ê@¡¤vü)†þbÑÃ|zDy\›‚L &hðÒå`AŸ£öR"2$Q(.­9wmÎ¥!ªLÜêsüÒf¯wLêðX Ðn¿ïÿýG~ÿ¿½ûÁÿmˆÅŠässŽÌu8ôDY˜°G> 0Rl• –šÏ…„sð8‰Ñ]±]×ãÏ=È'¸ÓÒ“ÔwÀe†+1” ƒn¬ˆ PÂQ«$ûµMг5:…"`;E áþÙ·ýÝo~}« üó)(˜OÑÇ݆úª ×S'síTRIöýšïõƒ9³¦Xé¿0‘käi;;Ã÷=Ž€Žb¢&5[Cþ0£»¨Èüy_ZþÐw »ßvιêûw*ÿ»-­/\^èÞÞ“~WúÇBï;E ƾšÛ ÒÿË—ê¡! ‰ª÷3Ôï\¾¼}eyùÀ‚¿ù}0ûÒúÇ•ÿfÑyø[üÚV?ý#jŽA3ð§Àlj[ UDý“¤ÿ| øW­ÇîÐäÿéyHüüé}{œ5>€Æ|FTD¡ÔÜoƒÀŸr¾½åFÿ…! ŽW§«1IÚ\%k /òÖÿïï}tÛSã ïLŸ+oë"i¥‚Á^oùÞÓ§·ß¾téct!˜× jÿ)„£t/$æÂL­Û,ð¹òQK`]€:ó"B0…œV p• :48¢b€ÈPW>ÊÀ)ôx8;BJ €ÏßQ®`{h_£”¿&¾!h;ï^º¼øñÓ'çÝ9Ué€üÀ_õ;Ç.R­ÙÍà€¿ü~€ì;‡‡ÝK««®ìÏM#U ˜”©¤Ð1ªúþLÊŽ4…€ øvGÿ(ü+Gÿ,©rÜ‚¿ÏÅTù/ Úþ°ÏÛè_‡ß$ý½þ2)à‘þ~ôˆ¥ÿü¸«>wߘ!˜t=DrM”]ï=}òÆ;—.}‰öR(– h ˆR6~I´t`§–GTe têV/« ¼5à˜1_Ä“qlb´6¢;µžHñø|Ë©8GÊquáMÑ ÈDʆ |pýúã̓ýùN=€÷ŠÀ_í—f–Ÿ+ëÌ„¤pþòêªçx¸·ž "¾õÆ`O W»6 ߀?ìÍšþàËb"ÊCJ#v»qbGï?õük.ü£Û MÞ2ºüà ^úO9Êá©wõ úÔhº_•]i•F÷“7ÞxæûÀÇã@œÑîç€ÿÐúý[Éßl±õ[p·àŸV6Cô?IPÒ']u ÀûMG’'f_tOæÕgTìèûaίŠŠqáC1š7P“sºvº:© Í{÷êÕ'[ûûÝÇ{»KªhàŸ\ UoEíŸ=½ùÖÅK›¿iV:€È¼Y"˜OYE€H*"?[ Ø ¢£Q=€šÑͼM!¯RkঔÊH@`@äXs#P  ¯­ ¥êFÓ"Qá[@ªàQãáÿèÍ·ýí¯õffHŸWó; ðOUÔÙ¾<êÏÙœQÀ;™‘g‰ ¤Ã´täœ*›¤¦©YREÍÖ€oMôÿÝ¿¯o¬¬Œ›þ°Í¬/^ÿ(þðŸ¶ü•3ô»YˆW®v»oïééÒ&npˆlîîªÏwv ýZ©ê¼dQ=åHÿçºÝÃHúˆµïHöçû‘“8þ)÷øSÞßæú¨?)EýY øg©€iyÿ“Öè€*"9©B¡"fI‚:ßDæ8´†yY„(š%ÿBé T€¸Ð‰A*fØ òüÑ;_þç_þâí(ŠZU.tUQ¡ 2=yrûí‹—îgÑ<!EÕw)ûP×.ô³¬þׄ$<<™àÖ¶VµzÎáÂ9¡¶Y=²™’T€Žà™$¦A6#†7(Üe;\CR.Œ 4{Ao_¹úìÉÎÎÒ¦“ ÐjöÁjŠ Peü*^um3;GýöX€ÍûÛvç`†:$´X‹ó¤ïQUä߃È_³}£ÿrî߉þiâ_Α¿öçv`¾\ó8¾ûÞD­Nª®ÙÅì‡âòW´~™%k§ßW[GG¢KŸ#~ÌcU^óÝ+W¶ÍûÀ½.aPd˜îc+ü‹[üLüû#q÷ƒüO=æ˜Ðš3è'þøIi+žsŸwžžrÏ^áwË{ù½Œ=¿j¢ÇC)ëŒh}hTr̵ÖQ±/C•ŽìyÞOù>nûæøÑ~quõåµsçvÜ¢NÏY$&õ¢ã¹ß={~ ¯EÐ2q’†ÀðêPÀ€ æ:QõÄíГ<¯§&›¾¼òvMOuTV·S—@È ¤<•’Èé0Iè|¡°5•sdR&ÄGæþQÊ禸s‚ûæš?úã7ßzH1§wVb È^aOKDÛv¯· @_ý©‘)­ g@\b]—*«#º‰Føƒ‹þþ9ZìM¤eS´sîŸSœûŸ’äýÀD"ý#gÊ_ V¿¶ÚrfÊÒ%Eÿ¿|ú´èù×¥x©*„²Ñÿ;ûâßI$i-ëôs¥d ~ð;YuäïZ!ù×¥Nbþ3I8I°¥'¨¤‹U…]­u Lx—ì$IÚ ‚P†ÖÐçòD¹A?zŒèÓj¯È'‹äL!9œó¼õƒ7Þ|ühww ­eP°¡® à~°Þ ßÝ:Ø?wnañ("0¶£6@ò½ŠÉª]èq>ábéF¦@ÓT€±èQý`?­p’ˆ’ÆFø,PÔZF9dèºÀóä¥!-mJ&>¢ €º;·|Nh7ç'D*àÎúÆö½§O.(5ÛˆßÓDìge¼PuÑÙÍ÷ÛòŠ@w ¨Sò¥†h¢Z`ùšO+2³œŸF h€oþ6)ú·s¶s®°2l‘ÿ×âàeéÕ,M–ŸîïSTo#~ªüç9÷´ØÛZgý'¢7çÎÄ?­+6úÿ£+W^¦,áGÁÒ}‰òãÂÚwdðSXû&úøÇ5àŸÖDþé+FøUD"UõµuÁPUZâÔï Ç~û2ñŸ75à%˜0ššÈ]<:¹o».RDüˆþ²`•€!•Gw66^T­¬¯K‹‹”ªS>ßܼ"×Iÿ€µ_ÐH#`íøc;üÈÖH1`Ù–àµEtÿÓ_üÅIÕ¥ŽûF#—ìÑ}‘¢Æ¡¹ÍBJR¾Ï»¨a¢ 29Ÿ#{^RQh¾sãÆã¶!ÓÙk: ^ jžÕŽˆdkoA;ŽzThåÿÀ~Ç&ÂyœðB.pÔ5 ?ëÂÿU’€"ê¯R–„ 83Mس­™ÉPT/2»’T@‚Ýœ9G…ü/)"xÝÞxãñëHTµºœð{"ùà¾ùìÖìÇz¦ˆòM\„ ’ú5ò¨ËD5€ß¤þÀ˜[á"ÂRšHhhkYÉUIÏ¿Dÿtk¢ÿ+ý›H…˜C“ÊõãÖ•þñø¥yý—»»cUZcò¿ÚŸ˜hrW¦õE’ûŒí­þ™î'9SùT¬~3¹Ô‚ÿ "úI•ÿ¯bù{>•öìpÄë·Áé))H¢°ÔõÍ1ÌLLMQµ˜Ò` /*rôQûY/Џ2„‚<ç y„‘PdÀ¶Ã776^Ü{òdvÀ …ðˆ°nv8TÕK¢¨½u°¿ºÖ]8§·–bÀ…˜àŸª½©í+Ÿå½VùÖ’€ÿåþ¡.%P÷>ªŠ‹ju('äï€O›`$¹iê9ns^Ìq¥n€”Ujÿƒìï™ó“`ïo,-¿\[X¸ð¢×뾎è äÎv|¼jy}Y%Â1ëH[¹¼”SÂ@zl €žékÕt4àÛýÛÖ?;ñÑ?Z©ÄïŸYØ«+¤Äû_Rm›0Hñf(½þô äKDÏùBLhHbUcj¥A+ÿc»³¾¾OŽ}ÅZ3Ÿ8å9öôó„ ÛègV2Åž8àoåî D`–Ö¿Óü™Å5®X”V:*¥<ŸoµŠµÛN—Í8ÒÆ8b ‚1úŸí/Ùç hò‘…°u`¦ÿI6´¾Ÿ›H=±R2¡Uèh'Dæßv@-Êx¤pà3ø„à~ôÖÅK/Ÿïìl =ào7€ÙyC ï﫸âCcõ~øòåÅs ‹›ÔÈN”v›‡I•‘ÀpÜðeæÁ@Èç_Õ¯¶øƒL jF€#àÂPÕð%l…!œq®àŒ¨3V=|¤R6}Âù!ýƒœ°-ËZ™ï·~üÖ[ÿ·û·;JM/P8Ísg5ˆ¡òË”Ѿ½\l-QÔ¯lÔﳓ•7E ª"ÕÍ  †|{6+ÿ{ì&bíD}e§l‰ìow´ÿ¡Ïcù¿ãFÿóNô» ï<—Ês;æõ¿xAh;‘¡8iëú·Ðn£ 'ö‰u¯¨Å_KÈÞ—_GÒ¿[ôWþÉ©½lý[u[–p_9òÇ9r_kI@·ÕÒsA eª¹ÄµüÑÏŽ f°¦û_Fù)À}üqšå,©â€D¤ç/``¡ÿƒs))MC„² •iÔ*jȤÐyuÛí^«ÕÞ{±·»ì ðwdÔ I&jó›+É…’Ó Ëý¡,öE! Çu+ ^62|™D^ûÂ>Ô©Uï¥ 8^8v8W9Ïî BJŸÏ5”˜˜ŠÅØÖHˆ РåÁÝÓœ§ùvgÿÚ¹s»_no¯¸³ªÈÀ,ϹÄãÖEö28#àn[½Þœ.µþ)¾¦m¤o#ÿ¢P0_0ͨü†|û¶²ñY@ÉYð×È›q«U1üGKûRnô_úUÏ!ÚKÕìn7¹Èÿoœ?¿ïúõÛ66}æ©•ýù>½Æ÷I¢?5êóŸþ'éýŸUöŸ©êÿÒâbqÖææèvÁ>Š5)jFÇwmÐctß—¤@&*Kì-l€ÙG\—¡‡ÜÙ˜|Úæg–À Õ˸9Žd ˆ¯Á0!d 2ž ~Ðø÷áåoþ8ÜÕµµ½MC./-ѵ€Ñϱ‡&WÈ’9=`›½Þ’â:_†½Øñ¯¾vÇÀŠÓ›Ç£«=Uý«)©€×²àŸ"%0 0ç(Áµ`ØP*õ.Z‰E°Ï!I™IFÊLËMÑ@@zïƒkן=4@ŸðÛ"O€ÿþpXù¥8« ¦¸RQ  ²“e8’Cwrâ´VÀºô@³5àÛ!ÿ[ ±Åˆ5/š¾äXÅÕÿEô¯l€¹ÕY¶~’èß>ÀAñ_:ƒæíZ¤a¿}îÜ‘V—ò·<Æ·Pä9ýò¿SôwÒb»“æýg‘üÇ~öÞ… Å:º¾°  èc‘džΠTËGÈ·[Í`o¯J´/Z(³ý£±ÈõŠŸ3·ÒG‘#Î )4æuG¬ Ð:óü}&RiÎcš3AÀ K É8µ‚¨ŸÀŸ€ŸS2xÝ^_ß^ÖëQ@<í©3d±Ý¦Ž´â‚ü=ÚyyîÒòÊr{¿‹k—‡‘웳á‹"£Æ£¾´æ;ñÚ#½))S‘´²µ‚€æ> 2ðGT£­‡>ßÐEáq­F…€Pà¶Øíœ^¨~xbsÓ=¯kÛ><œ_š›Û·õÂâ@KGnË›„H[Ž›é¢ÿF hÀ·Gþ§ÕÐ|iêµý›h‹ªÏ‘<¨õÊ%¶ÀO“7Z§ˆþ±Èo÷ûSǃfù( €7 ù¿Ûnc¼¯þc™àg÷$cÉ¿°ö³7ú¯­€WÓ ÿÒSÈþu€?ö¼?øYêCÏFöXØ„°Y×7,t)[ð¢ÌsAR:#€öœ'ûè2Cà礌Òóiªûæàs‡‚²œk9@²‚pôçh©f#%tY``µ£åã;28Iàyƒ^’ö¶´“@¡("źùôøp‡ƒaW-‘þ¨ÕËú¼ã1ÙXèÂóÝ1}Ѽ²ÊaöGpžÑ€'çͱDÚ˜h®ê€1Ç Ýèà¯ü‘²AwÏw®_z`ðƒœ.†NëïëØâ$)Æþ:çÖ^Eó€ä´jÇiŸ"úoAC¾ùò¿²•ÓRD“sîß¶þYùßÎè˜@cñ“çÏ7‘¢Ë“v?kì2‰ìðOgøÖ¸ù ôùÅžûø9ÚOe”-›û°“M®ËeL³³yÿY÷ª È25}̯šAú/^ó7oÒ"B‰¿-y|³˜Ò¹!c{-Óõhö;í!÷º{!¢?Û÷¬íýP<åS6ÝȉôaöƒƒA°™‘2uâ…ܦ˜ðu’JÔk øó}"x?Sxá$v«‡ŒÆÅÅEºV w¼Ê!^u4Îí^é+öRH¿P±DþõÙ×îyþ›…BŠª(÷/m€¶ €ˆ€Y=n^_Y!)¹=ôÿ·Pù/£JëˆÀ¡Y˜î;­“hw9ÿii©Ÿ€Þüã"-Àõ©XüýO뉯ëÓŸµê_M¸=&ù ðJÌj§ãÉ‚é?¢ÚQ>Ó3³Ÿpÿ;»›ñó¶íÉw¢[ñL9~úrâ\x^.’>ÚúrCâ¸H€l’}/7„!&I†Ùôæ"¨Т ŽÇ³âir¼•%<ÜÑîT{qyuõàèèè"ZFËÛJ§£¶ HT­¾;ý£®|VÛëMŸ×Ž{•j&P'dl.cgˆú*#»GgÐ ðU‘\ôæ&wg$)BúR€Ž˜!ŠÍq èÈ­ÝÛß¹~ýy pRà‡ºòÇ‚ѿ†\æóýýî¹Å%­¸êŸ/»®Y{`îv)ÌÎÔÈ  ÎòwÚ!h¶†|#7}Lþ÷}D\D%þêHH`Û‰þÉØËÒkˆü×»]úâðq À'Cö aHOðfíJee…D R:Š=¶¿Ù3ÉÿÓÏœè?©‰úgÿlBÔ?3ð—ÁßFýX1‹½®g_Fõz"}SŽ7’À[ô”cÐ ò™[Ô¥djÎjJŽ?’yB<®öGßšfR-i~šãbÐ 0?éÒš#‰: "„óŠÂ‘ŒÆó”À”Èó¸ˆü2p~añhaAÁ•q1"€Q#Ÿ ÙòÕ.êEowîFz® ŒÔ)Ç]ßl @U7ÀW¾À¿  еáüÐõ΂šÚzG*@HõÜ @ ŸK À‚…vgÿÜÂÂá–ø¼*ðG\[¢æd&H?MÏüÊòäýyÚ)u¼ ””d»|.¢Å¨©hÀ·Xþ‡ ª„¥e(çkõ·ÿõŽŸ¥³4mÛâ?HËRT6‘ùϔܞù(`À·ÚüT:ÇXà,èç£ÛLn)ÊÏ­·¿3ј²0IþŸüuÑô'öø[à·à_ŽúC¶±õÆ|͹ “Z¸4“´@šONܵá+;]"Ÿ|$ƒB;‚ „r~ÍR~ŠFrŒÿx›sGg$²Oòæ}%¨ ) ók + ™}­ŒQ¦c¨å¸Š2Àµæ| &OêPœWHìCÕÍò¢¥«{óqc8_” z^×Û½ªŠ¨ïk]ÜOAŠèß>”YM!x»†ÒR—øYcXRÂõÃÌvü–TÀÀ-Þ¼séÒ‹íO?ízj|œâi€kBüÜK"g©ð¡­i¨ç<-Ån; § C €Õ¥^“+dCší÷rsåÿ”%e€|ÿ­«Ç޶5m+^+ÿ@Z^(ÄÜ"ú· ¦þÝÛÚRÉ,««.L>hº0??$ §ö<+@ Ïþîý¬Ll}€ª06íùYÇûNÿiQ¿ç¹‰q µ¾A‘ e*@–a˜‡/…±üéÖ}XÃãm›7Î_xqÿùóËOö÷Ã2ð÷g~|çÛõÛZ³´Kut‰èÙ|¿ÓPäÿóÑõ¢&Èÿ hÀ·Sþ·æ?Vþ· ª7²þ¥â?§ÿŸoµî|º¹yye¤üRññ°† (S'›:†o.dÕ7Ú/@ŸgRØ— ÐCnNG·³øïW=W5œeð¯ÄŠIàðFwš° sîáÄÈÀO÷1”)·s¬?È 6%`«â ‰#vC4r„ŽÈ]©˜P9Î÷c »dõƒà9ë ³ÌK]Ò¡ù; Ú–*îã—¿¯E(ß\ŽñΠŸnªr'@èûµ×Â^¿?¯wYċܮZÙ·¸÷¨Šö~/¶S’€¢›(¸_,`÷ËTZcѱH{fKº6P¤9´;ÒžÌqX^XØ1`½ÊºyðwJÀ_¨E¢ J!ê©¿œ¤‰WR¬{¸'õ/^.ìP9~5ÀßÈÿ øöÊÿ„\ùc\¹…ª˜PA~Ðãb@Jøizåêò²â¿)þ %ÂwsþUD gÓN;×íb¡Ê$ÒϬPHÿò3yæÜ!`+þg™¸W7‹ýµ€ÿ˜ä_ŠúáÐf}îÅú‹5µk)‡œ‰2÷¬Ô„R ï^è#'<›'æÏ"r=ñ+òÈÓä©bJ‰çEZŒ•${$ëAì±Z‘I·ÙÙ.vâñ<,ä+×Ç{µ»p´ÔÞ[FÑŸ ^i* »-ÏÍõÕñ©~J²6ºãü.·)Î2üÇ]Ð/ú+æÝ?®)<­e‘H~f®1Ô¿ ^ÊuÆ Ùæ¸GNôOm€¢€ ßÚ¸øâùÎÎú Âºù¤ÀŸ‹Æ…/´Zjh‚3¶VRô§ôø5Rý±È^Wó ÕDÿ øÖnvô¯ùb{£DR²HÈ4$ÄãŠ@[K€—¥«Šÿ\©¿ŽXÒ}ÒoE‰¾ŸI~¿H(nÈ Àµû)\zœÌ’ëŸÅÛª•oøKÔ?6vY¢~;î–Ôé«§ô ‘°<§bL»3:–äò;øþÉ}®Àÿ``ä÷H?ªˆþQœ G @q»^äñ-™øD¹È2Vz±t‡€ŒQ@‘œ'N|´ÆJÝEè¼bEÍÌ5tkuu"•7,Iͬǔ©ÈßËGi‚LM¯ø½¨ô~PâØ£`. oO“”‡5Å!HÆ~ ÷¹‘(äÜhžæÛížöýÃý~¿ë¿"ð³šÇs@Ÿ?Iö/ƒüLàÿ?ÿè ðÿpkË[ítŠ–KüQ[‘J!¿òÅnÙæg(|ƒÎ<‘ÑW*9®ÙÇpd³…™8g]1sº·µ…¿we©×»²º°ðx¾»ðëvnã=škâPºØÀó†TÀ…—¹(ãz[~™0¹¤š“£Ã9(DPp áZ‚·`¹À–jã‡\˜ç–ü‰›¡â4ª8Ú×è´zÚÛ7®°ëÿgïÍš$¹²ô°ëî±fF®µjC…B ô2ìa›ÔtEãpÌd|’d’^d¦G=êM¦¡WñIÆW™É(Ê8jjŽzz4Ùit7€ªP¨5«²rÅ·«û{Žû OÈDwe–»™WDFde,î~¿ï|çœïÌ ¥©€Ã0LøB×FÌS?3§Æ”-›••þcR¬ 3Fw.^Ún§éUÊÿ›ãÓçv@r¿üjðûÞoä+wÓ²bLV{Ê­€OåùQ€z›¸!ÿÿã[·”ôÿ{Öù/à±™¨Š ¸P¦6ý¼²¼Ù5çÝ ÔW;;2/"ýK^ÆÈˆ€_²°/xeëb8¦p ç<îÍ.ô+>®æH Ðö?~ÿ{ä­O árO¤DÿY»“,xø (Òwë€ÿRþZ¯˜cB€o[ÁŽû«Æõo8lì"k^ ³ìÝzȬ°WÞ£º¸„ åãÖ¶ö±ê¿õùãk×?[]]ýŒ…æ÷ŒYè ÀÄȦùT¡ÂÌk*¤øüiPZ‡ ¤Ô;(Û;0äåp8´µ$æ5alþÍŠÐʱlsê@¸è3;Öcé¡üç¬ó *ÆÙˆòÊÞ7Î=Dþ)\ë ˜°¨BîÏð{àâ@·Àªfo5›‡æ—÷öºnHc1¨ üßpE]©  Ç§Vù*ݵ"P€Ó±‰ÿ¿äÿyq¸jfè°Í²¶àß刟ä}ó3HÀ Gþk~ó7/µš?2Ÿèj)v p¶Óœ›ªàÈÈÕâ‹©x©Mt øòãùŽð ò›(Ç»U’d~àðnëQ„éäÿ§Që>çuIçF<â;ï;/B³"úY‘ÿTàÇö¯n¿­<M£ýq)T)úŸ…6Ëù£ç_ÙèXzù—8úø#׿Z#¾k‘W%+R?]tü³¨Ó\]B ¹6 ŒcR0 @MH È ëáOØ~ñõÃàø{ûâ¥Ï¸å¢Çˆ¥â„ €Œ.FÄGfh„ç‚T¯tKÒI¢‰~¯Àn«Eîƒõ;*€fS(®D´O$Ç'§1â+s ÌTÐE¤|;ÇÁZeû~Âß+=;BFN+ íæüÎS0$¾/]&õë£F”òØ«è³|~ÔàMÜÜ@Æþr³é+1Á`(㎕md‘œÖ›˜æ_Í»y¿²‹ò„r}^f3Ëéo<Ýà øcT­Ï£ˆ••çõñŸZø÷O/^ÐÇ!Ç78—"àŽY–7lÀEsÖæ~ ¶+iÛê·DÒ¿SôWþ"¹,÷ùj–}ï$å³ î‹“&([¤EÂ9ò;†Éà>ˆ[Ÿ=àµüM³ýýÇàå øBê(ìL¥l§¤ÿ%"vž„úlëùЏIºé$ŽlV„Óˆ#¸Öíö9jM²è_\!-èËP¨Ì"2Ñg{}®˜ P® €4¥Ç0 Â*(Væg%€¼, ˆ%  ¬QT´F³êæ!ßÊ"'z¡mtž:‘z« Àéߘ؈ۂ¤pKIôOdàp4\ÁA=¿´4Þ³=3?¡¥˜<½]ÐWN¿³—KÿÙ4aÆÚD·³$=øK·6™$±áç+çÎ{û[[d÷K•”vÂoVüGào«á)÷oH•µõåÀ,ð/’-Då .æy§ ˜ÒšåY ߬HSl›©¾ùxsœñН-$àWÝÙXî 7——_0@ÕxœÙýZ‚)öÆ]Nwø49w½ÄMïgPPŠÜÀ¥¥CiõÔŽ„íì Wþ?ë!ÚŒTÀØá£n€8N&ê_j4l“-Úðµs‹Ýë>·`Ñí›p,’yŸZ>®›:z¯ À›·™ Ï3ÑéÑP³x Pv@å«Už ³/ÛéÙnrÏv’»®M݆ì°è÷üà «J¼Ä%êõ Q®7^ ¦Düs¿¥{Ë$ýkþ\>7-¼'[di£Ÿpȧ_qqUÿ³`ž£>ü­5ßÝseÿÂëcÅöùÖ˥̬ÃcÀsTíÔe¸Q¿˜©ã¿sôOP{<{ìƒ?ÿô×ýáÇßùO†lô‰X q¾ú̾ü©úÐOÓó8.°›dÄŽ‘ 0&š4 èÜòòAaàS’Eýi*ymÚâ”gàê“•~Sˆ¡OæOQÌ9¥WÛíÔìz˜$i‡8€NœiãàÏ~Ê×øÚÆF_EײŽÙˆ@¢àrŽ  qÎÉüÎtñ¾, BÒ£õ ÅûuÄ_€³·I ` þìyþ_|²‘Î E`8\Žœ‚7éÙЭJŽú;ƒ=ò!7ÙâÙÇõ¡¹®l™Tô7³ðÏ­yàEÌîÊÿ6ô÷Mþ©°Øp|DÏj°wtú{;ƒA…–YOÿ$"ÇÀ.µe*€ÏuäÓ¢ÿˆóüš£ÿâ"_$ Ã( þý¯uû?üö=äø,G­‘sHþc['Iïq¿Ÿ™ɸh™Õ\Ö—õÖÚÚ+±x–I©C¸ å–@:nI’è7!Ò»bÛ“Š*]æ{1$ŒÆ9›ëd)nØÔЧmI\ìªx|¹ÓÙ“ó(äã&)$oAÿMmæ\JÅ&Ú!@cpZ¸žç$ˆ51¨ ÀéÞ£È_ït<.øC1 õ¨kÇXç)R†£Ñº\ôÅží&û™µP àØ„9–4-æ#ßoÀ6#V ð&Dû³Šþ&noùžî°‹Þ`¦ï4ŒcXûÍæ9Z<rù_ö¥t4úÁnš¬"òG„Œ·?é»MUŽªRÍ_V àOù²p‹Wƒ˜ïÛºÊ6Eüžìì¬ÿõï.}ïúçžÌŽp#/—<¥ÉÊsÇjÈNÌ „ýLrÀíª»Ôj…ífshþORF’œèŒ ˜Ÿë¸¨Ü{ªˆC (Uhù>ü1´!‡Ùœ ó‹1v qv˜–UðÛûIª¼ÁÓƒƒ.‡rªÔqÌ›8I3 õnwäþ)§@f‡èâùXì_ë¯ëæ×_Áë³q ÈMR£I²óÌâHQ4ƸjëXì¨^[F.rÙÅÝOú€§íˆúÇ,Û‹ƒƒŽ`üùN! ÇùÏ=Í&<”ö˜åO³ÿÍ~†ú±Ä9ë²-sYäö?!Uèý'[e±ÒåÝãñ¾†¬{I|~ ø~!¿Ãð•ù“‚”„£yÊËsª }8-"*€øÌŠþq¼ù#_¶ôAPü=>I¾ÞÚº2Š¢†ë½/“úd8‹š%Çç0UN̈\æÌo «<™v‡y|…Ŧà/8^6˼?¡B¾8fYl–¥Þ+ XðÒäzS¤q.ª"Âdv©¶öÙן"z|(òdæ‚ã8v|“¦T\ÿ˜ôÄüéy® Sž‚ä/Ä@;»_苃ƒå¯··WD0ï'¸Òn¿}ŽLùCÔˆºi?„ ðÈ€$WióÈŸåÿÛçÏoe¹ƒï‰S àJæ5™@š‡žG‰ÖÇ•©“’ø¢†@Ìö$÷ï=«‰’T«½nçà¤Ú÷ô ¯Çl¥Õ—Äè|h˜Ê,£óbÊõŒ¨=jpæ·Wá·Ñí"ûŠœ-”Pÿ?æÔ»¹©ïò£ÑªÛ€¨0à(°jáÏ"WW±jo4jð{ƒß)¶ÀcÙ½Œ>%öÄöxñôˆc*t¤‹ÿæ‹/Ée‘#+;x„Õ &TY6dÔ2§P ÐüìÅ‹óH¬Ác£ÿ ôÙ͈ê˜ø À¯]q tjÜè_À_Z¸ŠàŸ8©€¢¯léï“'Oοµ±qˆŸ/¶šWÃ(ê pPRøq?béÿÁÎŽ-þóòƒ­ùÿöææÖ$VcÀß¼?ÜcÜg[[Ü­ð/ÕÿU÷3·ø_ö”~Z^ Eýü`jÇf¦&„ hV,!°Å §’À¢×èÈlPíŽÏF‡r䟦ø'–0ŽF©:·_€7"ú ­ÉŸ–ÃxŸSj¾ þª$£(âŠò]sÁ¡ÅDíóýƒ®´/ò-‘/W칿—EÿZ{Çõ†GÎzÝFùé-)_¢~oähÓ,¹Ý2\Ž“dù`8ì‡,IÁ_ƒ‹ìšE"`ÀJLKRLRÇ*XsUÿÎ` žÒßr0d‹ßiàïbrÕ…›ÚwwV£8n_[ê^4ÌkÝQ"ÄHi‹¥ÿ2û_ ÌZ·;Xét Y Cš$Ïÿ“×O¦@_âžI6IîQ¥¨ü©0ß»6„V›€€¾2ŸA øe¸–ÜZ"€[óû~¢\‡×àCm,/•Óª¬Dª¨_ßãÈ‘Mjpz7ô¦·¤€vTÿ3)@™§Ñ9Çào"çcWúˆì¬Oà*ÛÚfá øð÷À“ yM.È›StP“€YŠÇAzˆ$xy*Û—ïWÙú ±Z&0ÎñBD;9 J”Ïà.)|ië‹Ñ‹o~ÎW*#Ø ±P/ú}õåö¶z´·G’>$xòPlÎ4üõ«þîF§£¼(¼Ñö–:/ ù(+šÄûÇhãÿô䉒I Ú=)YþÿÖ¥KO%úg°I àˆ_¢°ì†ðÄÔÿov¡dú¨YªÏ©^ìKT€ñEÚ÷É"¤Öf®,0úã“3ݑڒ"ÐíVs0ˆÂÞ‰%'ðÿ1ÚX‹b‘çü3wH‘ÿÓùSBõV€Ó¹Á`ºt–“Ô¸ @ÐÖŽûÜŽ{5á͇íîÊ ·÷S}þ ³-€¾ëäÍ·ö”¾EÀi ‹s‡†-)ë¬h K èý·ƒ ƒî DèE•`Éæ‹n‰òq‹rï•aóY ×Gj4Šö«þH=üÛ…I޼ˆ âÿOîßW}Ô„è£_°ýpù2ŠÿDò·m†DùŽŸ“ÔæÿÑ@ÅÞQ÷ÇTUë8³‹þÖ×t yÕ-I0ø{þøHí2ðDˆk¼`]P±[&@2"‹þm@êþÍðjÀ¯ À›´aPœ·weë9 µtä­tÝ㨛ž€RÖ\À3¼lh7¼öžíîô®®oìùÖ»Àþa §:€¬M€ótbåàc1ª5±øe;dg<Ù~qØ?²Âg!5ß5¾oŸ«ò³/Õ#›¶Ôã–ªÍ^ïÅÖÞî݉ßçå‹Ç@ ‚"îãÇ}¼·tUz–Zæ»î‚‹Í¡ŠÑ¿û^¡Jü¿ª§†ìÄ%6lò…ƒœïõßZ[{a>SD‘?çÿcN âó€í€ìoþ‰l`V8EÜ8{èÓ¾õØÎ·im§=ªpž¨™áæŒáÉKÇ 8gšAd€o‡¥Ž `ªò:€ÔuŒyZ¤:ÃÝ 5¨7UåËâï±?§ÛN$PµЫð3·Jw_êŒ8ÎFó$ɬ«Aªÿ³¨ðkð¦‹ßÌÖdS›xN7¾²Õz§?h‡qÜ2+WÃω€ïKPhþ1¯˜‹sÈ °P åJ@i´_öó¯úïëùó‡ýìîÐÀRÓö½ëÀJ+[1qÜÓ<ò¯€už³ß:ò×ööz(ÜKØÏ¿ÉF@D*x_ðOÓ.%^…@ihÎ8>eàÿSÌýƒ¨|±½M­ˆ÷ww©ÚRÁŸû¾ H¿íÚ×qžû··LB& QGL²žÿ‰ëþ—ºí€%{:E8S2¾ºU¢ÈðªÀqÌ”1ÚÒe£²Ô…+BO$0VÔyQ·l0€9ï2ðOóñÐR ˜pñúE5[§S.¥7:5T€7h“4€{Âë&G#‹xјêövW®®oì›UªÉ)€ïúc¶Ð7`D:M ^t•?oÀ#zKAå‹I E§¾OƒU`[ëé֎]ž÷û{ÛÃaÏçhß–âi¿šþîóIE5*€",)–,7úÇ÷ñbŸ¼ýÑæ— ×åìj옲ëßû/n™hu?´€ìá …±½O?ßZðÏ#½"¸OSÞˆÿÂЮ C›,ýŽÅ¶rjgpý¨¼í–À¿ß_=‰÷V$GÖÇ5çô…^oH‘?ŸNÔŸÒ”Hé€C¤å‡îL€´âòS“šœ=àWàç'ðø‰6É&Ò~ Y¢P°„:Ï ø쨣†oë¨0Ð7Ñ>LИػeuÅÇô¤È%šÐQ#¤YR–±ì â0ÀbbÌ ¦ÝÆ×77½½}õòÊ }Oðè?4¯‘ŒRô+“ûÿ]5ÀŸpŒÜÖ,ùþ-¶A¦÷å³`ð= ‹À¹î22NO(ôso]é­ÛþεkC ü£ˆSqõÛÈŸIOýKDþO¤ðor À,ûß3×Ð`u¦ÉöѲýøÖ-Ò÷Ûl fH‚çå#µ[hÙ0+«H·M°èuìnRç² Pa^ÄêÒÒp¬êß‚~ÞÀ"@ši]N!†51¨ ÀéÚB´~Ù^y— Ø+ËôÎp@¶²«ÇhS£ÈxFî¼ p¯Î;;½ܲQ?À>FºUó š\ÐàšŒ"Ï s Vž¨òÒcª“dòý0Ôë&B†¼èÙ+¨öWÖ'“ûŸ»ù9¼sñÒWûß}¸³Ó4À,z^ðwµïiÅ® |n¡ÕÈ€þ^Mý?©žý~¼ ÇôGo¿ýÀ|¯#€?¤.ø Íñ ùVÚ©Ò_º²h‘œT£YþŸEÊÿ³ýóð*¼T ó+¶0su&jRgÊ]Až3­4›Kï_¸`§8.8` £ÅÝá͹À9·i€Hþíg÷™ H”Ï %ÒÉ  I¢j7ÀšœàçèÔUѸG;·ø´íiy׺‰T=Q{Ü­m#5¨ãŒß’«q4 ›£Q×D8‡X¤@@?K4@ÒÔ³à!÷% T¹ðï½–—ÆžûéýûúÇo¿Mß1€¿ÑjIÅq‚B@€bA)¢ÑªÌpHÌïbÄíè I½oºÒƒ.N5jMZ¹R•^U1öf¬€ÞœÇR3º` þèÊ•-³ˆï¢ðÏ“‘ú’ ÓÜ¢èÓ˜§F¢X;`]qŸùýÖü“x=LúqG  HZõ31ð‚ñqÚAæ°içWLdoz:]E*èr¯gÕ0¸<ÎIv HÕ|úzÄí¹¥¥¿-‘ûD S€Då’’ŠÆßâ!:³[íx ¶tv!”~kmíz£à;¿ÈŽžcïW›+M£à«íí5‹éHïûMG°h̉ܨÀL}TîŸVü~ä1¿D}~p Å#u ÔÞ©Šö¶ˆü±›õ&£Þºöyüµs1yUPjN‚°èj7ëV=Æ@Îõzýï_»ö¢»Û¨ß’"!+¡í q”Ÿ89_5ný;Kþ¯šûUOa¤83¢@êJ°AþÇ\Üøâ¡j?š íå†ZÊŠ„l®•uÜ€üúÙ³uÌr€„ÑeŽÔÀÐi_kÍÒã…æõÓsˡz<ߟHÑ]<(*µs#\‹h¥›Q{ÔàÔªÅj ±áªàžÖðOîPR1Ò‚ÿWÀQtHì_m÷Pèç @“w?¥¸*)š#?¡ iÊ‹©ÛßïxŸ”˜õã³jõÐ×!)’¢~m§Ú…©WÛöÕn÷åÍÍ'‰:*Á+5_iz•”AY6Æ›âU<ÜHÍ›N>©êÿŸÞ¹ó…ô¡ùΆ úD"ù‡bÚÔP ˆ@H~@6ïçÀ?¤¢þ3±§}…I·{£úŸƒå Ûe¶†—GþàÚMVuAš\¸±¾Nµ pœäó|."€/XRs¯"Ur²½Û YêàOü?™D¥Nq ö8±Ôœ‰À´€ªþõV€×3«Wþ² ‘ç eŽRؾâcå¬äÏ– h´9âozy @Z›\`wCH0 >cc¼©,àUÀÅ#›yOzd`*vÆÔÆì]/CmÌãÔ!P¾wýÆ/áhV¬Bœ§*é$J–õÇd&Ñ(ù=AáþÞ{_°è³ìOà4@È €€¾þÅ6ò%ªSÜî…[̳ŸýO[àÏÔâ.j¢s› 8©øOјeþùæœÌfe8m´Aþù+«ðR½eá’!øûÿ¡RU$ð‡xº¿?·à^>^\Yéë\aKÝû©Ó 32Ÿ˜FŸ/ǽê­&¯ïyzd€)Ɇb:#3‹Š€)&¹ks{Ûþ"SÁ_z°ýrƒ¥ÿ&Gý”œ”§ %œ7°ó¬ 0-®Ì[LTDß3 SéB¶­M˜ ÀáŽ#€?Z˜PÄ4€ ðÞÅ‹_?gªŽW޼()ð*¼†Wù«բȦ~xóæãõ¥¥]Šþ­0r‰Úþ˜Dlì’(2âÜRˆþ'íoŒõo—]cž ÙÉŸ¢ d‡¨)2Ö4‹Šÿ<{Y5ÙU“"~K°›÷^lmåÿ–õ¾¨Lزú8µ@r.ÁPÒk´sÀ%¹5DªãÜâ¤ys½Õàôm)ÏÎrƒk7Ðm·÷OêµÄ à¸Àï¦n¿B åÈÿH dà°Y€ɸ`ƒ¿7%êŸ+ú—-¶=Ç´EìWÛJÆÛŽœ}€Ý<7øÁ­·ÿÞÃdN¤šWÞUú¤ç<®³þ– úÁíGW®¼¼sþü3Lƒ8þaÇ#ÎÿCúÙ Pzÿ#&Q©,â;GÿU §IºgPü‡áRMötØ7€+¢ ÿFº`l‹,®­eŠf l:Í¿}´ ``@+ŒãÞþpØÞ Ôã½=õ¢ß'0“¬ÆŽ gƒÂÌŠÊ@/NÈÿ_Y]ÝcÐO àogDÈlVhÍcF &·†VI Õd¡&§oƒ F/:Ÿ¬)¶õÙ‰/]&ZOêµeòÜq€¿˜x¸»ÓCÀQZ¤0 à7?{œh!ø÷è—¨Õ ‹`,øØ>ÙÚÒ/û}Ý"|Ç”ˆ,`¥<ÀF€ •ÿTˆT@Â*€y|`öþOîÞý«†›T|UôËEÝ«ø7½ ¯‡¢¿››{ß¹zõkÊù[ÉȲ?$ÿ‘Sôf}ÿög;ÈFzÖØæþÝ–¿I‘¿RÕRG¶ÓVXVü‡öÛ«/QñŸÈÿ¬÷ûÞx忤Ò}Rð˜¹ízêüÝ èï7Ya€'„Ôxl[=àw0"­@Bœ—^>/"¶C£õóxè4¯µ¡ŸÝÙÚ©pÀ_©j5ØÏ¹Õm€¯sÔ¯,@ndÓv´uù®”¬Ë šdk_o†”\¼ê¦=ÿjûåÆíóö¥J$Ö ° @3Ìã±ïÇ­F#ð $'æö˜d 4ëí%N;W½Ñ  %@@ÄfE°°š%ׄ@éÈ„®-óG ÀïûmŸÜ•vçÅ?¼yëúŽU•ü†VªªÄ=†ºð%ÉÿÇYrkssÿ¿ýö}€??Éÿ|+‘¿¤"Vd@ZE =~öòÊÿDM–ú'žÉ…Ý-þKyÈäÿÿpÿ>€½f0 ‘?ÊVÜ6«lž? àgÉŸI@›”€4½°:¥ýO¦^ò Rð;Bü±ÃSDZ]%jšEˆWB°8]ZYésµâ´ÆÐÇL’Ä™H]#G[k€šœý ê`ã4˜† c|¾ h@ «ÉÛÅu»Ùì¢h Ã;†bO›$E{Ñ…äâEßE篶_­¼{ñRË|Ž¦Ç î¢° `"F6RÔ¤i`&?"ÍÓ§!A&bòx*ŸWx)½èwþÿÀÎ"Hcôÿ+š‹ÓÐæ%ÍJ;2ËÑÀÜoš•´O·fÁÅtÓw.\¸o¾çöÏÜ¿;íMè)ß×I¡œ§¦û±Ïú]ü„nÅ¿ü‡H„9)6@Éÿ[@´ýã+Ì ÿòÅÿy!/ªZÍï pªùbñ+~j}cÓSû$ÿ›sÜO­¶Í°Ù¶¹þ€€ÞÓ³àO{Ç«Ÿ?¾„×@f{dD€GWgj] ¸¿³c'Bê£òþ$"PVP ¹îÖÆÆnjÕüXZlãñvÛÄœp÷°ìNºFVÕêššœî-3mc@s…¬v ímÈØÉÓƒÊÝá"ÆEˆÂZ3g› œÉüÁ 4Xø‹W"Òfê˜÷Óàthù’ кe"pšذD ‘€ #À³Y^’@À° qË߯6³Àé+++ Yˆ0Ò•vVÚ€¡’‰´´mÿ³)[¬84«gKáý²Üj§–«÷/_þ¯iHÀ{e/®g|g'úúÛ; þÿá÷9úÏÒܹ²pBž?:¡Ñ¿Ö(‘œr4PŒúS5Ÿ÷©ÜŠÅÿ…ˆü/­°GÿùÓ>üž×æ[œ›ÿ©ýïáî®ýÛpä¡UU‰ªÿ!ÿOE× D@r’2§x©ÕŠ—ÛmœG¨«‘H?’Ö?mIAf%)N¬q :L§C)U·ÿ-´Õ5¯á†Ü4E,}¹í1– èĉ¦dOöÃpôüð¦Ò!Ç'Æš x`1 (£ÔUóÿÅç°Ä}öüù9)d"ЖT€Y Z ¶-6@JÀoX¿Á5PÔd_€Ê]f±Ó¢Œ œ\ j=²þõ2áóîx(ì£ ¶·‡²pïwoÞú¬ Œ‹à’Õl³|ü§½†Âàÿ£·ß¾/àÏ`/à?Ö?.Œb±ýµ•ÿ±ŒþÅwÆÒ¿~’æ÷«TýOò˜¸¶üYñßÊÚºùу @` a©ðO[ðñÌd/Ïý[ù_©ŽÈÿsµÿi‹±)ßî ‡Ù—/ùüiDÀU Šùÿ«ë뇒ëw|6$ÿŸdþ–<â7ÿ¯**?uá_­œ­ ÕéM; SûÜ ÈàoY±‰Ve †²sZRíyCü_ «9®1Çb߉I€¦¦€]ñ9Aë/^l­}ûêÕwÐbÀ7Ÿ³•Ø\{«¡5rÿPi ÔA ·ÜDm€¡‘UŠY7(®”0‹6ÑXFž‰V´¹ R³`&†8aA ­ ʼn($u‚J0ð¾¸uÑ,[þÝK—î!¦úÙƒw¼b¤ÔôrvoÎÕlÚïÍêŸò„ýáÍ›ÏÞ9þ9çø-ˆã~È*@VøgnG< ³ÿe"`NÂX¢~ké®§â?™úÓ¢ÿ™5¿ÍÕ~Þׯ5µÂÅ4¸‰#r7úGÛŸùÎQ‹@æš)­Ø}ŽúøÛD´^5Üuéy¿È[õ ØGœDä›[Q¬ˆäŸ8ŠÀ«Á ¥¼ÜÏ\’,\÷΃ž(æ±wÏŸ%-¡L¬2”§¨%0‘\N¸®‘jñ€z« ÀéÝ7E%UÃzüÛ*Y ü<7ƒ‹mÎ:¹´²º°Þ§Åå„^_m™ÅdÒÂçMILªÌÛ ÚÛ‡‡«˜*ÇQÛ|–vâÔ × %¤ ‰µÐnbÇ84Ÿ·©5œhð‰YÜf©ßÓòOö÷5](.kí6,B4‡Àü‡ âC;ï~„ÑÄäú¨ ¼¬ù¤ÀOñÀÊÌqº{éò½vgø'÷>ÿÀüµ@MH¨ ‘ûoä¼R¹ÃßïݼùôÚúú øÈñC þ’ ú'"`ž HòÖ?QG¢Ô:*“Ä«ÅÀFp´È«é•ÿÇŠþOÛvÑDæØ{}.þ»¹¾N§Dÿ2#ƒÛþ¤Ø/ À—êK:Øý$¹ÖDG!~¨€ˆø›"0tˆ=ï]ýÓð U|v-„` ÇùwÌgŒÏ--ެdœyØÔÚX+`:>"˜Ž}l ´"Y¬•šœþ -j^¼¨—šM-<ͪ7 ïÉ0@[ñŸ·Û21Xëv¢K½žâ¹l ìX6¯•'>&ðÁç³çÏ7~÷Ö­W>äVÌ‚Ô6ÑvÛ€h; (M"¾ßŠ @! j96€EF>Ô*e´T-h¯tÁ›×Ða˜"ÚòØy íXˆB»p‘1QjÓhÒRH³æ=h³^K¥v€Ê,¦WÖÖýчÿøÓϾ½7t'Í,ž6Dhފƪ¿/àoXhÀÿÑz·»ÇRÿˆ¥ÿXþJ! ÈA”·ÿb'ÈF!uóþeÒÐW‰þ'JÀN‘ü/­=.ÎSÊÿmllz/ÌŒèÅr>%v0¹ýQäo±äü•½ÅèÏŽ¤>±µUÁY" RÙ_•<”Ke–⑨L´]3\ù?ÍUÛûŸwdÑ’“E=e\´šrŽÔ _€Ó¿P“‰XäñÏ€•TýkÛ éÛ˜§h%ëKË/©Ù oÊý9óF™ÔžÄÅJÇþìo‚¼|±öÃÛ· ðSKˆ @£ï›E „AYœp? B_9ù¢›ˆ‹e˜ƒ¿W¢¢ÏJ@P¢˜˜ mÅ|Èü§˜"|¤ ðìð‘’@äbAß|ZHÍ¢­9ªÓË­vú/?þøg?ÿê«wùôÉ[ªbôÿM­^Ÿ,ØïÿÁõëÌç츺_€“óÏ ÿbÜ øó@®‹¯„XÀ_åyÿØød =«‹úEnýC^\ÿÄù¹‰þ‡I‚Xë¡e R©mV[uŒÀßÙŸS^š^¹º²Òþzw—üû¡´X]ˆ¿iDÚÿÒ’‹h."àYr–ÿ#'dÛ¹ P<6ØÔà(6ŽšR8Ö58½LjLDªÍB¡›âŽao´–ö?õçi^daiûôà 8‰N€Cäÿ9¹·(ð—æ»Í÷ëgO7ï\¸80`Ú1Ñõ0E[ÖÄÜGGäÔh{ŸÒX,Z¶# M¹RÄåP¶práV@X'­–î™…5@DªƒïÇPÌk €R©%6Ró}lá[ò˜hŠg|?1$%ùþµk¿º¹¹ñòg¾ºýâð 7óèñ¢+]1ê/~øâ}œ$pdûþ[o!ß¿5VÔ'yëŸDüÿQüöþ' …yÞ^àŸ&鞙ֿIÑÿêú†÷ÉÖ–¿ÑéPôß Ð=%ù?à[ðoŠÜ¯¸ÝOqÑŸ9Y ÿw½4¹ˆÈ?4£,¯BPù߈´üó„‡ÿœ[Z:²üÏs5¤@4#Œ©-¶MœÚ€|ÀÑsAO[VjÀ¯ À™R8FrXÚÿ$ží€‰½õ̰×[ÂEñ~õŸ®àb‡±æ‚Hãš‹X=eG°ãÑ¿÷ÞÖÖúÝ‹—^ø¹Ð1‹ÔÈ€R»¶ÃwÚìÇE ê˜ÏéqÄ€Ä|.¤F(€ÊDñ“ÞÖÔ:­ÃC½Ùíê~¦PÐ,ê±d½”¬27ÂQJ„‰üÍ2ç‘kÅïVÐ|‹BÄ‚x£»ÿ‹o}kçËíí+õðáÍA¶|çùê›Ix»Q¿‰<?¼uë¡ùžFqfÖ¾ ì¡c÷+Uÿ ˆþ#s,\ðù_¤] Qü%úOf€TÍ6šº Ÿ&ù¿,ú‡ô_Œþ}®ügc¬Ëÿ-öù~ þs)¬½ÜÛÛaÉÙ¹ 9ˆÀâý¯Ë{ú«ÅÑÿ;çÎí1Г¥6[kÓ­”çE¤–<Æz<÷O2¢[u‰,¶*U·ÿÕà¬n©´âz@M:î d€‹ÿ˜ТÛi·vÍ5¸rå:°¡Xé¹X‚øÝÇ_,™¨{i¹Ýè PÂqoh@µCCwÌâ"@à¯TØ2‘ŠÌ0 ÈÆ•úf¡DÛžYð<³ÈùË&‚GóJ€Þ ÒõN'xÙï'&zñ @«!²‰=›ã'ào˜_¾¹E…–•ÿ­` ›!& CȨvÃ’(ÑèíÍÍg_¾|yùWÏŸ_1Äj9(†Z æ¼ÐÇvuuõàîÅ‹/.­¬¼‚l?â¾Xrùí›E7ÌÌ~Ph~–á?‰Íù¢¼2§è/®(ý—EÿJMîç>õ û¤è[1úGõÓÖ–`máYÄý6‰ú)ÿ[C‡¯âoCú—Þ¨~ó(†Ÿ½|95úŸI¼|þÇ ¶Å’«ÿ3Å(á"@|\/ÂJ@ꕃ|Ù\¢3ïQ€7tãÊt\P¤¡UŶ¦žÍûS€ï ØXZÂÄíÐ\ „=ÓØ;4ÿ‹….ê9¯¸²ôÿïáW~ÿÎ{}³(uhÔ.ÒžÔlp…Ó^G£E߀‘þ¨i[òšX( Ë›H6‘éH—ðeoBį§d1hCK Y¨A&¨5PH€Ÿ$ñȬk ›÷÷cù7môÅ“T€Ä.¤`eiŒ¹5ä °à™[CBìHy\ߨÝÜÜ|j땯^7„àœ! XÌU0ç &Öý ½Þà­ÕÕ½wÏŸiÞ3fD#;¦ aÌ&>\Ì7äè~$÷IúI°)‚µ þùSÁŸ–¨î(øO“þ«8NË ÑvÞ›Û¢þÙª¼DþçÍ5.¬ý£ê›NYð÷<€.ÿÉNd`çððsi)s•)€m³ƒ@Í1@; XþLPù?D; ®þ9uÉâ)òŽsNÒEi>b[ÎIÉ  ÌPÍÿ§%äPÏ:Gê­&§z£éiTùC·ÂŒ§Ðúj€aßäòêÚîh8$3 “(Äÿ‡ ‡s-‚U&Ï=xùríñ…µ+kk#J"X"ÐÕ&JÁ?ÌÏ(T A„'°Ál¿ÙL1ȇj8`ˆ/æ>ªútÞ,¸ñm=-8ÔÈ$``Vͦ㕮Íc€ßª(Ö´ò¿‰þq¬3ý7lñ"ö ±D)¶Y˜‡\º´ûáåË_ÁNøÉîîÆ«~ùÙÁAϳ`g0hÏzóëÝîh©ÕŠ6ºÝá¥^®qq€Ù|'²Øfm{ î!GùY:€ Éý‰ö&rŠþB)øsÀ?*ÈþîžV$eýÞgBÖ]ïtÈ“ÿ¼gÈÿ “ñiÑ?¹^Úêÿ¦f·LŽþÛõ›ç»¶õ/¾nþF`èñO8Ú‡¬9D ;`­øåÖÖ‰\l½²GìÎùó»åGÙ­3"qòÿÒè9Õÿ,ÿϲ‚ž¤éⓚÔÛëµaP Z}Û–fÛÿÐrÎÒ?§².Œ{Î..蓲Í"EÅgw°ãñ÷þã÷®þçÃv´¿ðÃdÀ÷#²ä5·¢4°xø~l¾Ã<ßi€nn Ô°õ5ÑuRQ{žU¤´Y0SùA 0Û wÀIî7ß1VªÑ-]ªê¶0¿‡§ÖZ8ü†àøBxp‹ŒHÆbÿÖúúÁµÆÇ¶×[ªÀ}Œv5Ÿ§-F-0’sËËe}S³Ijˆ¤Fˆ§8·š:ò¼?ÜÄGýF¬ D‘z˜Uù³ øãq0©æžþi🴠Ï\¼ÏŸ’Ü?÷ÚÚsáÂ%Œ”Ñêìè¿ÅþþmôcÛþ ðî%ÉÔúàµäZÇy8øzoOH<Þç…zëßË««»!Gÿ©%ž–€:Ò˜rõ?·“&jr7È"ùÿôkpú6øÔxñ".^ÝDd i=gT|i"§,6ú·À›…#îÇÉþq Å; DÓÜæã‰þâïöðùw]ø7ú•ö¶@T*"'>{K­@ÈãB¡¾)DP½V‹üð½÷÷F#w¡ðf, Y!=þŸ!”Dú¤˜@^Ú‚¾Oòj'Ï«ÒXµ†Ž8f €O¤@Ìû±bK¬»½‰ë›Çm‡ˆ]ëc¼Ñ:ïÙ‚­¢ÅH%‘èJr­Ü§:D â€ÌêSý(òg¥@äþÄabqy²Ÿ þ1ƒYô_$Ó þªtœº …W ø›]±™W–‚«ý£8‹úUžóïfѿ֗Í1[~Ö·æ_®¡OU"€`êAzÌÏ*Ñÿw®^Ý©?ó‰àN:Ÿx\tÂ3#hd´% tþzÓ"U²Xo58õŠÒbäQ¿ ÐÏǧAž €øè´[{Ó É÷›oÝ ‹ÓˆÇ‡ŠLÙdC¼—¡YhªŒ®üîc¿|òøÂ­sçö6——ÑË—)(þÓvTøpI|?6‘TfÕdè“ ëXøK7q#€ úØãuA¨°h’!pšzH>À™@¨ÏÀ÷Xã&êl:*@äç{èFþ¾äÒà!C¸E)@ÀC‰(@dvâË1c ɜҞ¤–òP•¬Çše×x¼uOêr7?!6¿ŸEm©“·Å}œgð/}QÐS€´‚t«Ncô´:h¤Ç‹æsôˆ—yþ£ÿ€§M:í~ˆþ—œÈ)€%/Š®·Ùù/ç?Vùª-þ/œÞÿ…,M*czc}}GÎ1®ø§]Ô€$ß-°]t.°)P6ERUŸ 9í~½Õàto0¨5+õÈTØIý˜I+ äèúÆæ«ƒ~ÿ-·0wŽìË€_ª…=^HȦÔÜq®ð$_os[ÔŸÝûü­ùïî;År‘!6Q`Á| Lí ð7‹"lu­“TE W^³{ÍWPÊÚè1(ˆj P[ÐàšEâ8‚:Ccq| €@‚ÇlÔŸRÅ •ÿñ9УHŸž¾•w›¬4ØÒÀ/*€D>wVùLÞ2ßmSšÛ¨dŽº€¿(±“wøù1ëãÏ’¬äû¥º$@óï2ø'SÀ¿JÞ¿jĪ£\; ßP—‡ÔîÁño}Ãc…ÏÏDýæÐÐ«ÔŽÉÆ)EŽ"÷‹ôÏÑÿ’íûOMô¯Jô Å`U‰®ë_mm•Žý7ú‡u÷âÅr§‰U$Äi)ÞÿÔÂy™T ‡UæÔà_€³±Ñ*–i•'tC;`œõÿÛÅ8B„I¹r8z½í^ÆzbñÁ­€;6,Ü»ž‘‚˜s؈ ÷ ðËsX8Vî>àoÚH™"l»ƒAçç_=xëw®ßÈêR¡¡¨ŸsÍZ”¤¸ÂgWÄrõÍ&º²b¾õNÇÛçm´Ë?äZ ­‰ì0—_v›cÓ”¢@ó˜” T›®¡JfRÐkaCX° $ež»o¿áÛ oÒ÷ÝŠþÙ‡@Ù”}…<*å)nÖE}!DàE6s[“jl1î‰óH?.Dý±û¥Ø—üM+ü›¤”É»•dÝÓý£â¹Tÿƒà&ÎÀ;±ü•ès%ÈéÏúi)‰ü- À¾Ä=ÿý/›èÿF1ú§ªþ9ˆÀîÞžz9aä÷¼Ñ?L¦>¸téE’;Dæu&9ÁŒÇ&✲i%:7¼éã¢ËΙªùÿšÔàôÈÿNª—›M”ÏШ`´&lD‹°Î-#³ Ì/ííuQ˜ÀÈE¿ô_žÃÿ½Øn+Xçκš¦©„dæ5° éb*àñã WW×ö/¯­QôOІUPb0â.€X1¸4¹õb4OIFDáäÔÓm6ýaiC|CuÔØ›±p@Ò"zÜü=8,Æ­FC7ì0 J à³´ù¡&j6 Bü=?Tþ†D,û»i€ešø¦ìœw_YÀ¦,ð“tÌQ¿ÇÊ-•†jÊi€¬€¥ÔÔJö‰Cñï—\~âôôsÔ'òý:m~üs4#òŸÇöwž¯§bCÕÿÍõu…™¨½!EÀ\;K+«nôŸ ü‰ì@)Šþµ=Z^þ6ꇠõ²Bî ÀŒè¿ À㟿|™Oý;~ô¿+Ñ?׋ˆägõ$yJÖ*Ši˜¤–ÉÿÓÚÿÒàkpf7³HÐIh÷M¸«QAC…€¼È£ÀÇ  ´~õßwÂhw{8ìú*/œîÓ€ß}.ábÒ7k$Ÿü¿¢O£×ù»¯^¿Ð똌òͬDù«üÖú‡7V <쎨ìw¥WZ­À|~Ý·J@À$`&ñ*ù™îK=ZÍ ‹”€Y]}ª¨Æ ûæ5۶ו\ýc⌀"ZC j äyî!C¶)šôÆžï>Û¿RÀÆò?:ß½,úWJf¸çÅ€– ¤‰“ àÙê?–)\¥ QâDýqIÔŸªé¹ÿDMnõK§€‰„à4Dÿ8‡oonªk««jÅI¿5—–é<*þñDIs€?ùüüµcò£lï—‰Àíq\)úŸF›èÿ+³Ç“¦ú-ý»‘È…§¡Ó†Kîc¼7V9G¦Éÿ§ž8Ö ÞÆ6t\YYI×Úm@jÙ¶õ0hû¶mfh ŒüË$ÚS½pKÞÿ-þkÏBÒät7à3)t•PÑ_lN »ÂÄoeÏ’ü}1ýaÀ7·Ë¸¯ ý§é•y£ÿâc¸žÇFþHåVÞñèÀÓ!—÷¼õOT%>7 ’eòUÂXçÿkpö6ä”#Û[Nþ÷ˆ"¹Ñ$‘.$àçh9¼¾¹¹õÑåËÉW;;›Xøå9uPÑLhVé=P­á€?dvI ÏD²4§¼ŒØ®úl‰õP±ÿ0ˆkæ(¾ó(ép€?u¢þì;­Xé_üÝï9²pŸÊè_òþHÈd="¸Ë=:^"ý7-øSúp¬cLÀä)æ`f}þžþ—²ÈÅÑ»‹Fÿò˜Y(úO&\«U‰€ýo%â31¾K: ŽóN’„=*d@Ö&Z"ÿWq‹Tg%}T€7xûŸ~ücý?ÿô§¥×\ˆHÓ ºÐ|†ˆ7àœ-}‘´œ¥øvk8Üß×O2 aš.ü‚`þX @P´ŸðÉ×_¿uqeå ÛlY‚ƒš(œ n„(«Œ0§ûOL ­$¯ay†¢<ŲlI=€ F^ ø?‘‘EŒï•ÜÄ Ì?PÊæZ(ú„J|{ ÷¹?ä¶/ßàçêݲ< `S¶@q;@Þ @wc[@©×K ­¨ȧ€?"ó§Plù›UÀ5sá> à_ÌûÓqÂuÂÒ¿Tý£†D¤s\úibÖjA4[ûrîŸä~Šøüq?‰oÆIÒ>NôYýä‰Íãèñkv"àVþ›óc£C6ûÉŠÿØeÒ¶² ;〧¨Dé ùžÁQ5¨ À©ÜèÄ%[Ûf3»0HÀ€Žà|©þGÀJÌ¢D×76^<ÙÙYwÓ#' Оü“žh{€¤’">7´›D °Q„dþîOsÑäƒMÌBüŽ{·ÿóo}p(ÀŠ€‘Ç;^Šf•ý9ÃBŸ[A¢@úæ5T@•LÆ´4ýÐ$ùÊÖ' xAs[  É"‘^`§Y³®Á>Eþ(„¬®01ÿñ€,úÇ0"çý’#ašfÃÛh&@’¤|R}RDÄ'€kwfà—Ói _í'ª¼ßÖ"®T…–¿×}õ¿½¹IÒ?jäý¶üU¡êß•þAøìPKßÍýw]ù߃üoÀßüßµ«ËËo¿‚ZÆ-»>¢òÍuš: ?é1PÉ/_½Rû¨çÑGGIOúîˈ€¸þ}ï­·žrgIØH‹o„k%Í­¤b$-lýëžwóVÿ×òMÎæöd_ß9wŽî# ‰6¸Ò6#ýðʺfÀ/ Àísç·Õ£½=uÜ4€\i4QŒsÞUúé¼Âý)^±@9Ô@&Õ¼p=ÞÝíüé_¼ý£Û·?GêCÒÔ€<§гÃÈhPƒ>Ýâýúçm[ y²¿è÷“B=@•@qËR™Rc‰€nA#²•Ö´ha‚a@H›¤É#ߤӱC±bXEÇg 'ÀÁVàˆ#^š+ÙÉZnƒ}{K,àKz`l¼ªúòܤJþ²H¿ªÕï¬B®©‹ö¹Sý¿k®Ï[&úßèv³¼¿ þæÄð‡¥ÿ@¤sll¾ßÜ:þ²ˆ_ÙÜ?rË: oo'1¥óh6ÏøˆJ@ÒcÏÌZð öüŸ9k‚"à©Üõïׯo¹±SÈÑ¿¤böñ¿4¾|BÄ?«pV×bMjpv6xÓ£ý Éa-¤eŠ~Y Óöl7@ÈàOmsÌ÷îïvŽÑ PvEÁ'p@¯JG€ü•üMø ´Ìûjs‹"9©øìù³óW×Vß>w>VVòOXþ§ö:Tâ7¸:ÝñF°}Åy*pižï ‘o¢äs:€"w´ š¨z:ýósC‹šcÞ—[ä`l+ —Uþó­ó³td_k* wÈûvª«5ƒþØ¢[ˆºÊ¢ú2‰VÄ¿øëÓþØÞ1Ñ?úýöÕp:\(ï¿Üje†?,ý7DúW¹×ÿxÁƒ?%s¤.ÅQtå~¿Oé†×àº%W?ø Ì ‡æšþÛ§OǤÿià?éD×üÿ/özÃÛ†ˆŒ8òIîŸJ9…€®ó_:ýK‹i:G:@Í!ÿ×[MN­üOצÌqt—*nïâbÀ8u¼ñqß·…€™m.î¿sþÂÖß<üêÆ¼Ý“®(ˆe<²_訪£»’bà€?²Ã’z€_|ýõµîÒ`­ÛM;ïíwÙdG¦¦ÿêÉ:eÇ(³êM¯E¸¿Ôj!šÅÛƒê$ X¨ $@»Ç6*÷Ýÿ 2Û÷KàO<¤ÑÈæÞ3ÐoX`ßUäëãH¿T½MX pwW˜°ÈN"³rü' þ§iø‹K&Ìî’[ôGà_Èû7¸íyü-+‘ý-è‘Gw:<ðŲ¨¿é˜ë¥Á¾|ÍN#æý¨ç†@$zvèìÍ ô8È?¸qã™ôû³ÙŒ¦aRE# ö(DÿÙùSPŸ9—êa@58»[h­f}T¶Câ6~B*€õ@ åþ™„¬ðþ¥KÏÃÑðFÕ4À4àw#tù=‘ôçe6ʼ i£“ßiq=€Yd‚¿zpÿÖï¿wwØÞû„ë’Àv@ ‘ÅC†Ód Š¶ã„•Ô(óy7;J ÂáaŸƒ¤ §(ûÎÏîâä’ ü 쨺—ûIî÷¿ä(ø»ÑÿØZíFÿ%`[&³NÍ›V|ìÿÓý+>ÿ³ƒÛéÉûKËŸoÛ<þ­í~P<Ï:û±Å/ƒOòþt?Žßvþ¨ƒ`<5jf¨0„€¯Å"x9ª¿á¿yçc‘.üûøÊ•WÝî¢ó:CQ²â¿ÜøG€?t;bd©YÅuÄ_€7wC€(8â'IÞó Œªµ9^ÛÈÒjçÏãNs#ô{UÒU€ÈÅG ¦´Hàÿ‚HÈã³¶"øƒ i„b=~çÙþ~ç§Ÿ~úÎ?ûàƒ_jümJ ÑÜo¯la 9ñaAñ¹^ 9úG>>ûZ»M?Z%  pƒ _mms‰€¯Ž-y% ܘ¢À¹ù1ùÂ^Upqßäª*C{&EgÅûêMÿñ ¥#ÇÂ7׬Ÿ™ýpÞß\¤TõŸm¥Êùë\úïe‘¿½ßkzÞùK½å¯úlÁÇ@]Ùé“(úTì,XJ ¨ý’ýþç÷;­ðmN¿¿•ü¥P&Iæ…¡¸PRö²P_2¡ø¯ìüRΣ"á­·šœ¹TÍ@a[¯Õ‚ËU¼³O{”.äÙ!Ï¿uùò“Ÿ}ùåí²4À¼ÀïD›c÷ç!/bB>¦ÕäÉáÑîÎê_>¸ë7nÞSÖù/sD; Jâ=›2±ÉÜg‚[B@Dà$À ŽÊH€*€¿ç¨®  i„bŠ¡¨,L~¯„T–¢gDñUo'l­ÁŸûýQבØJÿ&»=¶=§ÚŸ#ÿeÏ~óØŠ¹¿ÒUúƒÁ`já®%d\y2¼Ë%÷÷Õ—;;*ÖÓIù¬^ ÿ~tëÖSó:sMŽ"ð£\îÏýÿ ;õÿç¹ÿy-£kù¿&g{›êÀiävÉ…mˆ‚MÔ›b` yÈÏ•€¬ÀÜŽÞ»xéùÁáám7 °(ðÁ‹M,RdÅ«Nþ÷°g‹[€çà8Xl5üäñãK+íNøþ¥KÈ@òÚÖñ3Já-  –»˜§òIt ßäψ½H€*u™B0 ´u è§%`ï—UQPSÊt"Pú“äÚtJâ,ƒ?*þ}·â­~ÒïQÏ<Ͳåå­~ð ø+ÿ$Ýy•$Ë;Ã!â‰-+üK¦íÁ@ýùW_Í”þgMÈ’Â?8þ]ZYÙAÏ?Uù3 ˆ¬ü/·D’ñ2í*DÿnWʬtS# ðkp&£ÿ¬·©õ€³EÀìõû ¶ doHo#ÏŽ¢íoÂÝ—Ãáš?iCj@Í~ã‹Q§ê]³HE\[0«Àgé²8€|ÊÍßDÔrèDýîk.ó¼€O?ºn¢þúÒ’Íñ³@¦ü|‹ ¥¿8³ñˆ`*]dkãÐ|§#óz ˜ÑnÀ?a «Ÿ’Ç]€/ª^á9·Þ1üÓ€iﯨTIÌøózµ—~§›Þ±æÑü6·#í~nÅ¿ÏN\ôðoûìí¯ípŸ%-Q?ƒ?nÍUxi¹Ù¼¾mÎK\g¸$ÕÖà1ÝSøçšþøL®AôÿÃýûYÏUÉ_M`³æÚ‹¿{õêsŽð‡,÷ù_†ýHíÜ•DÿE‰²sL©æFÔ[MÎÔÆu¨h÷a9K>÷9;H©+À&P ¼{ñÂóG»;kEÄZøQCÐtìNe´0òõm–Ö'1} œÈ_sz")(2/¿‡Düÿ?ùìÓwÿÉ÷R¸#&ãJ€æ[ ¾fÅîœFjòáh6ü>ÀßDN±¹õ ¨ÒsìMHxÔ€2"PöœrRÓrÿ³&–ÿ¬”À$iÒýcÿ)½,g‚?¢€¿ý!ï¯l¾Ÿ*ý=ŽüUþ«æ߸Ôj~ †U|(UñC‘kðøi{7ß/D?ÿÍÓ§ê錪ÿi*@ñ¤fé¿OÒ?Gþ¡-þ C&®@š;þ ðu˜¢ÿ*‘ÿ´s»Vjpö7Zp˜KZf¡èÖF¹1·ÒˆY.´ ]%û».>ûüÙ³›ööZÞ ¿lX ðLvÜžY|Ê:¦“%ÿ"qpçœnI`!øùƒûoÿø½»Ã†œ˜RMÀŸš+„@>‹Ö¦ ¡^`aÅçîòØVü]ŒÞìv\œ„\®«HÊÔTÐû¹rq-Ö%•è¿l¡¬R0¨9$ÿJ õ_dÿ"ø›s¬Åãž[æ>,~»ø÷¸å‘ÿйYÁ«ø¹£ô»Ãaû`4Êf Ð3À“zfn…`o ÿîmo«O1êW«R·ÎIHî»Uÿ—VV^¹àïTþSÿÄiˆ•€HR60IdÄ´;ZZU³žT ¨j &oR*@I*¨Žy-k”ò<€˜í#±vêh?×ëm?ÞÛ» #œ„£íEßv´ë øç˜ @ð'g@Dztøgï‘I€Y$;?ýô×ïðKŒÝ•¢?ú¨I@œÁ²?ŠÙ—a+EcÝ"„<+'s?Xïtä`1å­ PÔ]éOº_TŠ``Za`Yd?‹(Túßxð7ç* ý$ò—Þ~€ÿªþÈû÷âptw/I6qÎaê¦ôÑõƒÖ]ŽîÝ‘Úwã@ýÊ_=~œõÁN:IËNÖ"‹¸Ôë ¿wõê“‘ù1éŸûþCÊýçs"iD‘²y.b³²±]jz÷É´|mý[€7@Ž6•WÀQ¡ HìP DœÝ¹Ô h°-32ç·._yúõ«W—!%J/ÿ¢ÀŸ¡>q7HîˆêcÔËÀ¿Ém~Qü½)à_Bºvïó÷þàîû¿`àçñx©–ŽR&´¶D€o‘FñP*`nñZ£$ñ@Ì{ö„˜ÅÍ7$ @Ê:¥&©ºÞeŠ@ÉRô?mSþiQý´ÊëªíYgüÇHXUðgÿ%ßæûEöð_cð_i*}ËÍû#E•HÞŸÛüR¾.äš“Pš‰À‹~_ýéƒ4/;ÕÕ$+5AzJíõ™þÁ»ï>ŒÐ7dyÈ…¸Å ’þ#VĈqjR;S& C¦Ê€?­ :UU¾êmÆæ×_Á뵡`ÒÉ +[¤õc.}Denvœ«Ô¤RÀ H€fs ^»}Ðmµw÷Øm¯¸jãâècžùJ«5üìý@Ë •ú€2ð'5£¤ØoøIÀ«~¿÷_~qÇü~ÏÙWÌs+æ;[5Ï>†[ß_nؽkvx±wÌc­v4ÍÏÍv³Ù0ï¬a"°÷µvJ |ÒS]ž” ²>d2à1ÐûÎ,Q Pˆû—_­^ŽFG¤U‘zýäw›ÏÖÏß©ö¸×? ¯úðO¸ð/)þÍý§SεZþ¯€7w ¸#€=d: ˜mXÀì $ÀóBŸÓß¾zõH1à<Ù&Ezn_jÀpRà_$vv6 xï‡oßþÔR[ŸžôìÂi  ˆSy=O3D—¶ÏíSo!+æ½yaÍgJÐ!°Üj¥ööR(ØJRzB4>MP$~OMÏÿÏ“Pjr~^ó1U5êÁ¿k•ž…À_úüÑêçü¹àßõmÞßæúmΟ ýXö_S¶èïÜf³ñÞÁh@iš”÷hq+‘GUCýÍ'ÏŸ«{{•ÀÚÁ§Œß¹ví…“÷ŠüÏÒNP`{ü3€T‚3­ÊNU‰þkÉ¿&õ&€Ö´Ín75Ñ*]ÿÍNJ@Âãã¢!™Ù4@È]¼³Ôj…‡aØò ü¡‚Âb_±à¤Á øuöw±`ڔݧû¾0UÏ"€â@/W5p7Ô¼øãsáBÁÈWŒg>C€Á4¬BÊþOÙß›ã¼QS"óE«ø+Ëý¯+øc¨ÎÍõõyÀ9φ@þdªGþMWö÷ÙàGå=þ«j¼àÀÿb«ùÝA.»à/çs1ï/¤:« PÖ«ãóímõ·†”åýçZ`”ÍûßÞÜ<øâœ÷Dþð[ðY ÉB"§0*)ü+05IHUµš“Zþ¯ ÀC(òÁ Ø÷) °Ül¢6 =/1Q»ÏöÀ¬`€@äç­Ñ·._Þú믾zëúÚÚ‘‚½E ù” ’z€lQ;aðŸ@î‚xî‚`–kÅà¯,)ð™Ð{g@;Œ\¸Õ2F¡ !GžYüH±Pð×f€âc“ü<5Ù‡ÅSåuZj† P¥5jVÅþ<Àê¢þ+½žºaÀÿÚêj¥¨ŸÈw¿ï›ÿ›yû{ð÷&Dþø¯rΟîC8×l|XQÍä|.ËûÓùÊç<̽þãÇs[ý–}`¼ÖF·þîèbôS¶;€ÄúW@?Ir áè?.ýy;Nj¯ À›ý»ìFp¯£)w ­  <0·ÛP.O ´8N! HÀóö›ÜWìndÍËÞûólé© ;^v/;iðŸFDÕ”ïÐCðfÀŸðØÈßÏvÅ™€4õ(ʳ2'|—ifk³ÝFŠ é6)Ƽ>;8H¸.D ¤ªNQ¦)eJ7èëJ@e`Z´uª¢~~ø<€ønv»”kO*€ÿö`€fù~ê^5ào{ûþmöø_rÀ¹ü!ûãvý\³ùí0Š6‹à?‰øð+üÿ¯{÷¨è/9ð‡ÙÏÞ½ûyÿQ#‘ÿQìg ÁÐi´¹[€ 8".þóèÅ @M®C™ýWQ¨êè¿&go›f Œ4äKÞtQàê#@ã^SðKK jX ÔÀJ§ÓàFŽQ,ÎÒV4ïM! ®tùMÿ @OynŽÝ‚?¾øXðGM&˜{污 0:‰°â£ÂˆÛÓK½^€BLúÖú:FÀ–é)ëî4P­BªXOz¼ )Xø_'ð/? \üM‰ª'“+Wò'k_)ö3OüIò÷ìX_òöŸþ+%àÿQG'ÿ,€íùá¡ú??ÿ\…'þ¨øÿÉ»ï~Íà?ˆDîwrþØÃB`¡ð/KCò´?· Jä?« °ùšÔJ KÒˆH›(dÙ­aÉ€^ªnQ˜ø³y~pðôàUí€1WK‘Ñ"õbèMTœðM€ÿ$ð{·ßùÔ³ù~ª òð¡ô§i€¥ˆ€«ðMô˜¯Û¼_…” ,"A¯Ç©!±ÙQÔÀwýç”™T‘á§™¯é À_¥Ø{žçŽú¯ ðã¼Èô±Cêàoñ9Z ºU%ÿ€ÁßVû›K†]þ–¼£à¿Â‘ÿJü?®þÓHÀÿ¿øB hžÆÉ€ÿ?¿{÷kXì…RìgnCÞ©÷t€Lûs†é_À¿Ðö7©p’pÕè¿Þjðƪ@ m.\Wîp/2éà¢ÀÁ_ ãƒ( ±·@6rœB„H½@ÿ›ÿ2ðoñ÷ßùÉÝ÷ÑÄDv€;ü„èmJ K@  …žS˜)ˆÙî ¤$‰˜ŸQx9ŒcšˆŒCÒkµRC¦4 "àV=žAÕÿç-(…V¬N ðK´Þ€>T²n—ÚY»ð‹EèZí²î XA(´Í¢~+ùco¦’ó7—Dþ.øópŸbÁß\‘ÿ4€kÿÛÛýf?¶píÚ–ù®v!û›ó{`€ž¦ý…9 È?ä1À2ðG€?’ªÏi?-éù¯:ì'3ú¯ AMތ蛤°¡MÍ,pˆJ²v@çÜ"G Hˆ°ð<"Z³¡­-8B@Hãûƒ¡#õâëÏewßÔÕ‹EÓc³ ?þõ¯>üƒ»ïÒ´´Ø§lÁëÉ0B`Rÿ¬ø–€e~š’€!-”2h"¥¬¹‰§ uqyY÷[-ük&âÔŸlm§+KOùã,~ú˜Ïm|ø~[+°Dû9ÚG§€Ÿ tdvWÑã\@ªJçÀ?þ~ø–¾ïJþæVŠýZʺû‰½o—{ümá_nð#‘ÿª€ÿ+þ‹Þâ½?ÝßWÿîóÏ+÷úOÛaÿÑ­[Ïß=wî9üäEœóg #±ôÿ[ç?È~ÿTw4aØÏ,`šä_Gý5xó¶ uci€~“£]Ìieóÿr‘Á õ-è' ú Õ˜Ÿollìïõû—1gü$6€y8%ú—-aç?ßÏñ÷ÿƘ“€CCþÝ'¿øèGï¼óùÆÒ²O`Ï{j{ó‹fyvÇ,¤ägß·­_ÃJ€!OÈ€Š˜´a*óÌc‰£´Eþr«EjÀ.Ðû(!Ój~SÎBwã5Œö7h_\(µsüã)ÀÝDåã¹~'êO¸Çß³’‹ß:ü™ûZÀßÚü®:•þ«æÿmn4ïüñîí©ÿýW¿R#éêãtì?rÁ‘¿ùA$·’ïG›Gÿ¡3ò—Ì,àGÒû/-%Ñ•¿EÕÄ &oœ™2]×Ú[5@c.FÝÑšl·Z6-`Sœp¼¨=Ð,TñFwixÙ, “&÷-JªlTˆ×å´ÃoŠ˜ÏÚúé§ŸÞý½wÞi^^]{pçT¢ÿ€‚À~J4|ó|boñ»è¦¨IÀ,|ø%Ô@hÀh‰ÌwND€Õ€AxˆÀ©37^£Üþ¬h_"fÍ*u»3øÍuDyþ&÷örýõ»•þÊJþÙT?m‡û—¿£¾5póB³ù½a./ þ ÕwwÕÿñé§Ç®öŸþ!ƒ¿ñSÔ?­M … $%… §T¹ô?Ëö7UÓÝ%k &õ¦&äˆ0¨ Ím›ÛnÌB“Ðd<ÈÔ¶0a  Ûj &-81ùæÌo)2ª ü¶I"û?ùì³;ôÁ‡­^·û5€>µ×-úhï2¿‹ÙÄtë[b~ÞÞGjÀ|ÇXR~ðGnÔãÅ/XiSä™>?8Ð s¦ÞH°w¿×n«u³¯b¯íSï|£éérà'¾j¢~Ôw ü–ðñ9ò(ß,ê·àˆŸzý•Í÷/)+ùçE þ­À¿b"ÿ»Ç8ü}öò¥úéýû3ýýŽü‘ïg‡!ˆ¹×ßìYëŸ8þq—Q,ÅʦÃâ à_Õp.×?VIkd¨ À›I|Ï®oæBÕ& Ò\¨è‚²µ äàÖ(t šÇÍâšE¦5ú ´¾N$`Ӏȣí—7ÏõVzç×Ö>õà%`¯‹†fðW©0ÇeQðÙï«¿yòDýÝÖ]´Ç=®‚¢ÿèÖ­gNäO ?b𗢿‘¸ÿ±*ðÇs™Í/OûKmÞŸ:Jòþ‰š?ç_|»3ׯ!jðÆFÿò3»"ÿO!¿Ç›gÓ…c£ûLqŸ÷•Û ˆ¸ñ ·þ6I>#Àà‚ õPQøí?üàƒûKíÎ#Ï‚?©H!`àg€GÔß ŠpK  üC·¾YÍ-¥láÓ`^36·éF§ƒÃN‹Kæ½x~p ~|ë½ÇID d€P¢e3áA1óHµQ62ðÁçYH¸þuyñ‚@¤2¶džÃwß 9§Î8.Fû¦û_\à÷ÍwA-}mŽø=©ïpý<›î¡¨?µQÖæ‡ûõSÞŸ%ÿl²îû¾·q¡Ùü@§é9H÷‹‚ÿ3s.üɃêáþþ±+ýå»kAj"ÿ§7Ö×_d­} ÜöÉ}6÷‘ÊÇõ/ŠíПÍ~â)Eʼn•Óúþ뀚ÔÛ ¬ˆiþ¶È@ø60v^ZYݾ¿ßCD|R3æSZ[$ ÍÑ%äe,П €Äëp ¾xñÎ…ÕÕ•s+«Ÿ+|æ4©@"C–…ñ\`ëZ污ùý¡¶Î‹¾ö}(Ø#m’Oßúž!Úv h Ï…¥¥t¥ÕÒLô$"ðo>¿GÇû¿~ÿ®vÁŠ8L0ؚ鸞ïŒu·“" ÓÀ=û·g¬¥m‡ùÆÎ '=9&MŽö++ž“êû²¿ÏÀÀŠ´õ5éXš¨ß³€ßÙ_Û6?‰ú{Þ¸ÙÏŠ!7Á‡Ã(j#z †’–Îqþâ|ÍÖ¾{æø¤'þÿâî݇ëÝînVíoTÿ¡Ó0b• äˆ?dƒŸ(áǦ€à¯Rý¯ëè¿&u`Š-0/ÄÚ¹àa”W×Bv¶ò©)Ð…I\X´oolœèû¸.º}S$àE@…×òûtSõðáEÞ¬ügH ´Û |Žþ[œ ¢0_Ãóúˆ‘€ €k ·5_jÈP&t Uc¢wZ —zþùGYõ?•WüGª<ï_|l’Ý﬈¿ûšÔ[ɺ˜¹6`œ—e5¼¹‘ÂÉSºw†µe"–56:îæ©ãî&£³ j‡¨c˜! Òìó·1µP³!IêœrJàß~ò‹oÿ³»w¯--?à|°ä…¡ HŒnµ% }eAcˆêqƒ4#mûÅGÈ“z<…Ñ’O‘ŠÓ°×h¤-Ôp¦©o@€¬ IIÐp0¤ S\2ð¿þòWV0D@qÑf3] ønºìÉ0ï±عÊu”€û´ÆíižÉž}}ôe€>î„!À ðTÇLæW.ð£ÖëÞ8ð·ü\òoèk¨Ÿ,~µ­ø£rû3ŸûÂùfón?­½B »[Ⓣ}d8 ÇÁ)ß#ÈØß>{¦~öèûi]ÍæqÚÑ’©~ôþû÷Í—pÚb>1ù³øq±_fùk«üÅç]Òòºí~x¬$êO&ÈüóTýë:ú¯ @½Íu›¨Ñ"I‘‡qßžhø¢¢[Û€’éCNÂ0[¬NÈÒ—L[¡sô¸( hqäßf€CtŠô€ªU’9)ǯ^]ŒFëËKË÷ÌïlKôèPÛžðCVd Ì"GßðE ð7+~ŽÍó!;¥Q»&zÎÍI§Ó¡Ê*bcž  ìÀ±•ûE2ð¯™`ûï?þèT/ŽÍî’W¾"Ø—‚>Ò.¨êÐW.øÛâL¶€ ütÜlµ?ùù3ð·<›ï·»µ÷]RN»ŸHÿëÍæÛK³o^¶¾8Gqž%äÍϾýL¦)Û†|ÿùÇêóW¯lQNH»l_•"5`¹w_[°hóÞ‚9 rÆLà« Nqˆ"‡Ž €Aº¯È5ÙÄ–dãœÉCÝ÷AÚP(o"0v2ï fO†9$ú½sç0 cʶÿåoÿŽnÿÛ¾u*NðÕtÀÏöC€¾Ýúé[‰§Š-ò“h?`ûÞ€£}[ÝŸÛþ?™üxRðçDýÈõŸk6î°\r¡_ÛÉõ Q•´•t(Ø“>'›ûüñ—_ª}¤aæÌ÷{%Ä@þönÝzvçüù-äø£qÉŸ^ˆ€ÛêçÊþø‡ þ1·þEnä_¡âVÁß$éb @ý× Þ Xºux˜^\^2ö}ÎdÝýSq ¶)J˜è» &üØ®gÓ|Ê+áU aÛ…u‚*à‚¿®ø§EÏõœ”äÅ)b—€«l®¬>h5›/xö;EŽ^N: ( C  …† 3Àü^Èÿ/Ô¶C –´€g=Ô“†çŬØø§Övó0ù11âYDðù„ü—~èaNÄýþ Æïl¬§¿í“ÔsœøÚ¼—¼*Før߀>EùÊÚ.g•üJìœ9ê‡[£Ç>âáŸÚÇÀAÀhˆßoq¡Ÿ›¿ë?óŠkÆ;æÊºŠó•ú ‘2R¸8±Os‘£ ž÷ù„?tÌ}¤¿_O‰úµš=%J&úýÁ;ï<º¼²²¢u+ý1¾î`2ùáçC§Ú?ÿ$!{_(EÙJä_$eyUHÔÒMêm|ýÿÙû¶¹‘,½’•Y•Y×–Z×¾¨5ÓöÌή³ë‡ { üfÀOûûü#ü`À^Ø€v½6fìõLOw«%µTRÝo™$#'✈CÉd^J*©#™Lf3ÉŒï;ß¹ù9$ãŒz@òyšêV,Fÿ¿XÞ]m¼4ãf)k ¯—ü ‚58#ëÈ€3L¨'AnœÔÁŸ2lºœYÏã’AjÀw‡‡[‡~o{ûÕÖhü9þüǺFT®ˆ X×€Öký;"0ÑÎ=`»4 ìÕ!)€fNè°•‡æz™ó´î˜ä!М“%@à3BÜô€‚P{æ|À~ /¦y ¤ÿöɽþÛï^¿ZÉõ'€gà^Sò[¾Ñʇ^ ¶A“+¬ä,}gå'ÜÊç o/µó÷Û ŽÚm²ñÂ-\¯³SuÀïüý$ÿsÙÄåþ×ö~ƒØ ÛÏï!á~x®³¥À›'WÚûŽ./­¿ÿï_¾ôà?K/k“ü9A¸¿¹yõo¿þú{™$çSnÑc ßš0ÍCÊßóü›À?GËŸdº?›,ÿ>MJ€ˆÒ$q,îðÒÊ@*ÄÐ ]€ûÁAª ›¤ôªíßšÉ ÀUË:U$ mœ¡tip ç×ÁßʰPÝb Ì çq ÀJ΂“<¼ˆÀß={vÿt2¹ûï~ñËg[£Ñ3~³\h×Ö`‚¯c\À•™ü- ÀÇV a)¬*Á‚f…ÒÂ4É ÓµW…xsí,)0Û”9-ˆ(WÿÁ’»,S6Ýì5ò? )°Wäåé© ÅÖOîÝï"]±h] ßô\øÛÅ\‡ÁÞ~ŠÒ>B)~‚ÊÈûT´É×íWhùk ôCkŸ@@žßOþþ .ýo¯e_n§é滂ܾþ LµLѪ·ànî¥ÓK*AŒ€4€d>7ßýß«ÿ;ù©I¿nõóçiM¯ÿõÇùøñ‹"?·ú'ø7) ëߟR~?FøO]}ÊóÏkàOn*žî×'å¯óåýGé?€8UΧSͺú)‡R'.èj4)+ùaÁ÷ýññ‚ E&Ü3A`èÑ€ À›³úº€ŒQ ¬8îxvðöÉÖùÙ£»Û;ßl ‡¯µK»„µ€µ!´À¿Ãí » Yf×éÚ6ç8¹(RGl° (þ°+-®«øØÆZ øûì\›}ÆÎ4ˆ)¢È`@%Iÿ]ásuÐ×ðŸü×@Ÿ½ 6Ì(ë{°wûðeéú2ÐcëçÐWÎê·•Kö)‚þÊûÆ` øì­õ/Ø@àߨHÓ{kÙSëçgr?;z*›`KëŸb€xÂëÿþÅ è×ðûÐ-_žî`R$ùÿ›Ÿÿ$ÿCïÛ§V¾AòŸVÈVö£‚?hõWÀ¿pÅ~òø-²ðkÑ¿»_øHâXÊ PµÀcç÷?ư½Ô€¼î?4NnïäK@"øÍå%€š¸;YkžÀ|µ”í0Ë%c7¼>eo“[àùÉÉàt2ùÅÞhôxwsëùÆ`ð þA…HÀ•têÀÝ$SÒ?ç°‡€A`&66–Ì¿r“k“k‘Þ˜k2> ´°ýŒ%¤Š4„r /ˆ À×d>«WÈ;£™t>G'‰i’îÃúcò°Nm ~ü+ÀoÀ&µàïJ([‹?q •Y+?ÕJÙÒ½‚UeDðOô‡­~‚2‡ ÷ËP×ßþI´øÇIz¯Påùù¯ÉýP3ï RJ”øéÇhsÖ@ŠÿÏ›7¶ªŸ5™u;à7©]Vÿç»»ç¿ýê«g†7]NœÔ?ñÁ|hå“uùÿ9Öñ'©?wM~ò"äû[À/pÝþMÖÿ¬ô¿¦Â?¢1ˆÖ$qôpØF@dÅÁ¬Ç‹9“Ê6Ò²êÿËx1T/{_à_?š…^]\ˆ7fcëXžêØå(q?¨¤u±hî.·Æp"ðIÀ¶=±U¥ËˆÀ]6‰€ ÀJ±œ°uh]‚* ] U‘¡ùBà`‚“mâ >A¹aû8¥knî C„ˆð§{"«±#3ÑŸý5yŸ‘‚„=†öÈÖš×.rÎúú=Ø»@?8És÷ƒßúQc¦5œ»¬ÕÏj3d ôåï²/†,àÏ.ùo€ÿ ’úóò:ð×å~Rà9ß÷Bþ÷з†ÿ÷ï¿·÷!EøWЉîT¿.«ÿ_>yòò˽½/çW­~_¾×ÿ4§ ?çëϧèóÇê~ªí¯¨¾Ë¿ ü›HÀ/eDЧ¢ZÐqÈ øSê[ƒŸß¼{_y‰ ï-~–>÷i äëŸÀ_`­~ÀÞƒ>.)Êý>ØO;™È­ÿð¯›7Ý%ÉCó¢Ç8xU´]î—Ž`;¹3H€˜xùRüïý}OŠ›€¿Mêï²úïon^þ«§O gSgÅ_Qw>í?EŸxù:÷ávé¬|’ýs[é-Ï¿þ³|ÿmyþ ùý㈠Žþ*C|í‹u°kª°ðÏFüŸŸûêe·Ñ?"pÖzÙ #Pw P ,¶ Zÿþ]n."°}q±µ5\ÿrwsüÃÎÆèµAåSá2Àú¿’Á0åDR!&À ”+̵sø5MÆ« jF< ÀôOé2 4 ÛãJUÑntJ¸Íî y½ï„ 7’¬Züæ°íRá<&QÁï0”õØ ”û©€ÆîŒ(óg",D2"©Éýý,ÚöofÙ£qš<È‹âe¾†ã‰Ëb¥È6ào’û‰À1ûæwð­!šÿSûÊžÀ/[_³ú¿úê哽½·ÖÊw–}%uo÷x©@á@Ž‘þÞçOM} WáÏÆŸ,þmVÿ<àß:ÏÅÙ>€8zb‰`¥4Ô IÜNøšÕàÊÀ"ƒ"þË[ þõA³Å"P·þaõ_ ZÐæèCžŸ@ÒO? ¾|~~¾¿3Þ|n&ôcý+ œ ;`êIf h—6hÙbƒq¿~0î¦ Z7ªš5†¢ Uí‰Ã}‚÷ŒrÏ鎰îﯻêK‚âCŠÇК[ù¶m²•ø]À_ª °€/€ß§÷!ð7€¾Íó_“rg{-û|šçw B= ¸w¸×±fÁ"ûŸí¬51Ä„|sxèŸ~X}¿Mà¾þýôé3󛾘"°ÐÛ`>Ö­£ÿsF¬uÏ‹üP+_ˆ!µªkéÛTᯭàOßNu$úý#ˆã&G‚€/Ù°Áâ×Zˆ¹‹Ä¼ëˆÿEG€ÑìŠH¾_ììˆõõõFëŸZ7¹š@¿iðÿ~?}u~þ`ûääÁÞhtº¹±±¿3CÀà9‚þc V@NªË€€-äéX)è*(©˜Å €–©¤¿þ!ЦŒV‰)I²9­¯؇‹&% ¤ó¥¸Ïåð;ù?ÁúO%óó‹«_:ÀÏKïC‹Ÿ“hèc@íÞ(MîA4?Ôã µ#`Ééš§®†Ö,àç*¸ À⇿có{Xøëeaßx0(ŒÕÿüáööøê'ÆêÇ*}dñ{Ç ~9ÉüȇÏåÌß?õþ~ˆ €ûökÌ6™ÃêïÓíOÔ¸u ú‹ ްþeÃNÿ,ðs0З©œ¯ÀûŽø_ÅÄM“?"“˜åñÖ–•€›¬ÿ:1˜ú|æã‹)d0÷Àge¹ªÀ³³³ÃÑpý`kcãGž€RÿÝSúV`)ƒEEp*€B¢ ±†@áŠ'hÅ:BÚ˜IYýk³¬º‘¯[Ódõë@*Á}¾j_(æcå}¿íüüþ)³òSö -}}"TÑo`üdk-ûd”¦÷Î&“ñ@8NÝ·¯P¶×(åÓã>*Ôà7„κÀøï`Qà¯ËývïÞá?ÿì3›×OréüüÓ"Èüàa?­§ùŸc~Ne}5Iý!ÐÏZþ%G³­Qúg~Ú"ýgSÀŸjzýþ‘ıšÝãìÅÄ€.Ì × uõéÔJf&AÊÜëóóÙ2º™Ÿß’ˆÿE¬ÿ:àKÏNO-BÝÙØ°ª€hq ÌcýSƒê³Ð¢ Üýl{ûîµìgœ æNàEƒ¼€ ¦(ܦA$ˆñ̤epUóÕÉ9Ô¸ojBw­d¯ä²µYú.‹øxËÿºÕŸ¢¼OR扒óf£qš~º‘&w®ò|ª2Âúdíð[ÐgÈDé }Tþ?¼}+þÛ÷ßôÓ×ö~?»sçä/?þq A~.¸Ïƒ|ŽVþ4¿]È¿ß6ï¡×`?Šò'¿|…µ&zø™åóï[äGˆAÑú Ž£%ÊÄjÞžUãän¼8ÐÜeÔ?ž%o ø“ÜÝ5 ’ÙÑ-‹ø_Hi˜•hV{}yiãæ;üÌø.—±þRPQ¨«md໓““ñúúáÎÆºžzÀµ¦ÂvÒ–A È5<˜Ð],@‰ë0y‡˜%&lÉ3Gšy•”mú\\€þĸô’¿ÛŸ‘; üH2FÖ¸üo^¼€?L“‰|ó™Æ#óÎ åýÓ:9è+–¯‚X†×‰€ž@¹I€zJúÇÃCñ?_¼p?*>ÕA<ç~ˆîÿÍãǯmo–òd½£%ω€ tÛtlQóñ$ù+›õêjú[ðÇôRáêú×-ÿUƒ ú‹ Žw1Þ^\hÔæ&xA4 0X\^N ðVE°q€EuÐûXÿ²…âËío „uÇû랺cE"1@•Û±¾ÜÝcóÝÒD^4€~Ñfý²€ƒâhÿªëXOÈÀƒ çÈÀÞçÛÛ{ŸÇO/ó|òüüüp°¶v¾gr„€¬ÿœ¹ˆ”¾VÆñc“¸!…°¬%1è¸À•à¿„Éÿ\ ý© …~¸¿Ÿ?e~þ 0öFY¶½žÈóŒ ð¼÷ð ðO¡¡Ë×§ëY`a¨ÿ%^ øÐ ËþÈP€?bõ¾†ôòt¾®û«Ï>üæœó¿þâ‹WOööÞ€„?qV<¤é9)ý(˜ƒ èóœ=`NÛ\òW@p ¿ÿ¹Jq½›ß¬úþ«ÿè÷ Ž›þÅ )ßJ&‰ýñB9ɬ@í¬Èâ³ÝCc t¶† q߀¿j)>NGW¾9:²~_H|bÈXðº‡õ/™õŸc­x¾ß2)9*àvxvrÖí !_ŒÇ?BðíÉÉÅÆ`prw<>Ó29R®ÑWPæ/К/DS™Vw?T'ï†ÔQæh“ÿ½ÔÏ]$ï“*PóñsÉ`6vÇkÙÖ@ÊñEžͽjý0»×ødÙÀ“ŒO'›"ðñx,½F!1€“ƒ.“'æ‡.}÷üyðèÕÜß¼3 ÿo=ÚÿŽ{û> Á-wÿ8wÁyÎ÷apŸYÜêÏô1Ê¿ðV¿zð÷k·]Šn¿óûEð Ž[`8ë¹2ù.ïÛ?æCŽyêüÅ­ÃLÆâ;~RÐߪ‰ÍrpŽ^½²èvsS<ÚÚ²€Ôäû`Ÿ¢ÍËóý𸋠dXe®… A!xbÎÆeQLÞ^^N&JŸŒ‡Ã+s<ô$8±é…è¹ûºâ ’¨e…Èv±&a¦ ðü~žç?4Ív–ÈA&å&<6 =ÆH l(?€ý{ó¾¯Êê60kŸ$®€êrzyiÓøþ—¹®TÐJéÕ‘Ú6à‡ ¾ XûÎoïƒö –³O)}dñOé*⃠OV¬þ’Iþ–Hú=$ÿyÓüÿ8"ˆcc„]¡# MŒP^A9$š”×HƦ—A-ñú{Q Õ7¬‰î˜ä~ ¿lÍfÈç¤ ¾é'{{6xPbìE_ë0ƒ À˜  µªáõû†ì_\ ÍþííµOÄf1JŠscá–GWW“D&kIgÙ¹yÏhÑ;“pH%……ºè5=5Õé øT¡¯rÂøzÍš7P´ÇÜ×P§Ÿ”­R¯önþ×ÐàÇÁ܃:Y÷Þêw OKQ±öi?FòÎ×_b”¿³úÝsu«¿+º¿úÜM´rðÖ$q¬x˜IC%Yf»Ã)Wì…ÒÂ\L .(7Öâ+!œŸÀŸ¬ß#ŸËÚä¸*°ÿÐI'+ðGŒ€ ‚ÝáРõµþëdÀ@m!€1ERm¨Iæ=ÇP©ÀnÏ<osÓ^€M3¿º«¡µ µ9‡:À“J-›¼ØŸ!Ћ°Ÿâgí ø°Í`I€×¡€€¾ÿk@®•G²¿¬1$BƽɯtŠ+ídà Ì€\˜c^¹­f8¨+ðYà\ ìðí-k­Ïcýر!D®·$|ö}X×’ëu8A€@QÊ:IXÅ ÂÔX©ð•ï ÀY„ ¼:RpÐð%žƒv¿[ñÒ[Á¯jÍ*A¿Ëâÿ|w÷ìÏÄç;;b ¥ûYÖ?Zîös´¯D`}ú#5EÈ„¬å˜Õ’1Ù ð<çËÚóö²áø&À/Ð¥eyÁʇZß •¯W úmÖ>ðù§wîýúáÃ×›Ãáyé,þ‚ÉôÎÊGà/°[ë­þÒ»BpŸ÷óc¿µða»D™åÿ²§Õß&õóçtÃvÿHâ¸åŠ´4“ (zh&£ÂéŸÊfÀDi@®?|nÖTTƶ¨ýúÞ½ßÿéàí/êà¿ °—¢¹þ'L˜ÆBÎ ¨;£‘m@ÿp{{Bsõg;;—TµŸHXïùJ*ÚÇÇÐáMüãþþø»££‘*ˤ «ýÆ”ü§@ ~4À­a ¾ ðþxlIÁkÑs럢×´¦›>Gq¨ß³ÂMÝm¾í?[Ók럇ÿ²(lkæ#C® …õÙñ±µðõ ~ÓýÞ$ó?ýä“CÞ®Ð'Ea›í”˜‚ÇAÓüHîÁÉüEŽ-™2Pj"ø;å~ÿYÀ?+ØO·¬EÿH⸥ãÊL9YæJ»:W€’8˜õÔìkÂÖ™ÇåÒï{£W—÷Eí óó<*@Ýe`&È©±ˆ öÓ;ãñÔBùx{û¢R »Òaê‚ÅMøm¹gÈ|Ýù››WPböÑöö£}sp0þîðp4¸ir =#p›iûOÆRýÎ,@ ¶†CK »`¼¶f­uY!× ª<ù½Aê$7«ˆ4|!xeì­ûRôЇn‹?ØXˆŠYÚðû^ÿ.ÐòúÕîîé_Á:óæOòùîîå»»Éo“$ýöíÛmC®)JÏ7°rBÀZ3ÂÌ{)†fùGnôý‚;R ˜² ²¤¹oeÒî³ÂM«mO.ˆmÅŒ@O¾{(<R>øðÄÔåü6”iîyÕª¶{ÜÜW§_îîÿÙýûûØ=üû>ý® >ú%kñ£åOûฒIý^ €ýHJ¬Ùo#à—(÷+–×_~µ„ÅßèÁÿ#RëxmÞë0“ ù,ôZVX>1 ÷ÕÞž-®²9ØÎiÆêàX‡2ªÆzeRŽÌ„;6/ä_oš}[f{Ë<¿ùâääÉùÃÿû÷f²fY5ýÊw76®nm]Üè/%t©Ð’P÷À*’oñ+Â@$hý{PÃIþÁ?AI¤Œ¤©ÛŸ&lùöà`çû££­—§§ëÓi–Èë>]Ýø} Ñ_¸öÝÏUzê¢ü|X¸gHÚÙë±¾nç „1T$À‡Šƒ°Ð[Cü¹VM èý@i²¨m@}æS´èäÁªÀ‡ì“&Äá߉îaÍÏ"õ*•õëϬ«¯ïÞ=ü¥}CÈ& ëê—Õ€¼² àn­urp”Ìâ§è~´GÁ}ø‰@xðwA~–Ä#ð—(÷{ o±ú»,þ²ðçMñ»5àoæÀ¥Tª¨ÄñÑ ÌPfÒU`)±#\þ5å•"PÌ`[°Ÿ±4ÿôþâŸýÇxþü¯€ œN&{öI’Âþ™±ð?ÛÙ95–Ð Ì—fâ‘d¶OÊR3À· ®`jròµòæ?‚·‘üb‡~~”äKªÄÇ€Ÿ¬x"ìWzwä¡,Ãka]ªð~%~Jë?Ýêg~}¿Ü_÷÷‹ ‚$qÜÆ3³¤ (eÀŒ!© $LæD9Ð?,¬»”A!Ö±¸|W63ùØì.$Vðàï ßÐZ¡tçð.²üuÍ÷¯]´»Öõ²´Õ$k¤'aM1Djª o>wŠ=çSRÁþŸß¹söOîÞÍà¥oÎÏ7 ¿<9½<;ÛPHn›BÐ6æIß\%X•žJë¾Ëʸµuþh{ûÔ\û·6—-ñIQ”>Õ­ú2¬K¿-ùýóèç/1ˆø¼ @95 dïÿÀÊUà~~ÕÙßfåÏþ‹úû#øGÇmxpy ¥€õÀ@¤¤CÄ2ÖûÏR4$À€¡Dð—þð#Ní¦¤20y@¡ ¡pV?fvqÀŸj'ÿ'ÊhÀÎT*¸ [@xù¿êó‡¨Zoz×ÐÐÊ–¤P6úþÑ`ýÿV@oXòJ€9i ú ¨ÜUàÈA¶³¾ÁŒ‡¿ºß>gÁø%‚ÓÓ‘Y ·›| cÞ€>ŽdPŽ—ÿñöö1\c&ísÀ/UìC4~N¾zþÜï Ò~ÉIö¦€¯˜Å¯(Я øEû›¬ú¾WjßÊ$ÿþ‘Äñžd@å¹óéTgÃ!´€VõµD¸ š²L3׫=)¥ QsÚlÛžÛÈðk—.¸¦Q0“í⦠€÷–þhu:5 ´Î ÏÙ™c¸õ•b‘ÿš?M.:Ä؇ ±é‹¸ZÃp€îb ˜§DœµŸ$øIàîL"9 7=·³±q±7üêÁ ÉþùùæÁÅÅ‚·ƒÃËKÛ‡9’‚wôüx]³ð!@µø%¥ÍAô>‚½—áY‘² ‘¶r?Xñæ½à~ÎÑ]@²¿µðøcß»&õ7¿nûý6‹¿oaŸþ‘Äñ¡Kc‹¬™ÉdÀ?B9`cÝæk¡PÉZâ"Á<¦ ‚u]@­³=Äæ0@`IÑòOº,°›ué¬|k°£ @` Ÿ`nï#ÝŒ2¸ÿ¿6ùH¯þ»p®¯¸R[Ñ+)ÊýiÂãxLhQëøDPœ`B„àÒLúõÝ»>Óà‡ãc #³¬¿™A ügaäà§Œ¼ !jûµ4-?1€oÀ,ü“{››gƒ4µ}ïà[0ÕÁÊ/ñ¥ˆ{ïwgò|í¯¯)j¿DŸ¿bª*™ÜÀO„ÀÿoG’g¿êaõw5í™eõ‹ÚöÂþþþ‘Äq Æ0MõÙtª M @ü™™…¹4)ÕcåXÛb+è*€‰ qáˆa2ÉÉú7Éÿ–XÀ¿'ôAú'w@X \ûxRx¹HúWÕt@?ñHèƒÜ5Æ`ðþ%>ÐYÿVâ°ÎÈuŸb€ tÇ; wnO@ ŽxðGB‘²CÛþöþææùƒ­-ÛóžbžoM&ƒ·†  )0VbB@6ËWþ!„U«m$Á²ßsø‘b¶/ !»¢ 9 ò §ð¥í”¨‚[ÝÔf©P IóŠü•¡OŠ@A>zÐÿ¯ÝëÂñîV.ñP:_‰}ö·FÞ±àoîã¯oÏJé[Tòoÿü‘Äñþ‡MûöèÜÒ«‰ Ö‡IËöCwVrNEeR0ÀõŸ°‚¦ïŠÕÙf2‚¢õ üf3þAÞšm(:ƒ2¿ôÁ€ÎÀ÷Š;©2¸ªùÿAþ¯L. óÀ½MbHlP£99øt.¥ L çpŠ@YV!6^‚nz­ 0 g5R F"`,Ñóû†üœ)‚óüÁƒSC Q¾=?ë4}uv¶ÁÁoÞ@ºMMèêA=½Y¦wF£óíáðÊ|—gÔÖ•$+½O]Оkw€ªø‰ ø*Ƶí’Hæù_ÕU|NU‚ùHÖäAÑÿXŸ@Ÿüû]}‰^¿êañG«?€8>Ôqtu¥7˜¤$LNÃ,“¹øÂ6P1p¨•;ðs×V3»­ì¯B€†–jýÿΠUïT$Lòw%l…›µ+:E`O¹>#€¢þ©HžU:®õ š°¡óŒ}œ"@\¤3·/¥})³æ“PÜ Ö€ÀIˆ{HˆHJ5 ª@Âë0 A¢@„€ö%D ʾt˜öI(Tåùññ& :d"À‡7daíÜ,u•·èž««mý$Ì}™Ûÿáñöö9\çÇÆš‡ë•ö4qDç5ñ1¤ ãûý èQQâைà}Wú`;´ò¹­rU2kŸ='Ê[ýDàyJéÃså$à  ó# Á{šÒùšäû¾À¯Åü‘ýuÀW-RÿHâøP•€—§§úÓñX`&Z'¯ç9Äüu%!X (Á Àn¶a^ʰ@i“Ü•›É+þйPÀOø @ªâOÖ¿ JÅÿßO8ŠMFL hœˆ–`ÀÛ¢¯%N¡®S'é[% k,}·/A«?EÂàã(nÀ×I`$‚âx¥ANÈN *eЉ •@"iDlmÃc –ó<~LåŽ}ñ£gGGÛô¼8>Þ¢íIQ¤o..ÖùÍpxy¹>E·ÃªYê|”€^7ûIÆ`'Q‚À]ðú®¤{,(u üi[UÁ_¡åO•'ð"Ðs@&ë_LÖ}iIn«ªE¯˜ïžÞCQ€ Æ®¨"<ßjí‹öÚeñ«9¤ý>yüuK^«?‚$q|¨cÿü\œN&º 4€üZ’@þb˜eY >RtB¨gA‚1™òþÓJ [$‚¾ôÙþú°€SV ;‰@°üµ¾å_²IJ·RRN(É@á@\fJY5@•æ†8'¿÷ï_«@Ê+’”&¡¤pÆ€=Å´COx1"ö…úL `jE3…À) «t˜ðæGðœ!§ôZC~´Çboô`|§k¬Ç-t¾Ù£`§EH¥œ¹j#X‰çú>îŠ][å›A5­ø+F<Øc ·¸9)à Zߊ[óÜW_"@—L àUö˜"ùñýìg¢˜´öUÍÚç ¯{Xö}KõΓÒ­þ8"ø©¨0¿ …¦Ï €òÀÆT" tž[; ˆ@žçÖëßL¹ÈäÌ*P € À‚¾À,ò¾T½r1ÔøEzU€M(%FX_³Bêñâz€¤Y d¬lIA‰Â Ò?œ#pi.Âë6`A}Œð%!BP{÷úz À5w@¬÷¤m›[øþ2T;$â@Ÿ=á9éý"¡A’~ßFÀí  _#ÿ!Ûo¢æâ{téÿ)°—R3`¢€OÖ R1—x" ª¨ÐA’À–öUWÞ¾”ó‹p(_•ý•  ¯J ÞUúÂW¼v€Ìdþ.ù~^y–¿ ì£ÕG$Û€%k¤EÍ- …v××õEžÃ$•l0s EÒÕ¡©-ÒTð1rßÞ3zèEjd üoàö‘ P‚¬~'wØê†²$ ?€{R!LÒO™Ÿß>¥yà‹ø§çØ~"6UQ;‚‘ ‘˜ÖX!¨Hæ2ÄBòªˆé+pÏп¬/k ëgõÙѺjíbP/èÔöœ`)h¡˜µÏ_‡®™ï_s9ŸÞÇ»$0b Ê3 jмV¡‡œS)X{kÒSu ôõ P×3®J}‹äñG«?ŽHâ¨üÈ%›@, €ö­"ŠuYI KÝÈ”3@}ቪͨUœp …aݹS¼O„ a„ŽŒ)3 PÈÄSÖ(!å@TCP žO%IŠ! ¾É‘¨–;&ÿ@ÿpŒà ©²êëo$eI‹K@_wÓ\—þkÇé°+ôx¨’ªþÈ•…©£¾5´·ø‰ 4)Ôp ™,}«š Xkj¯àùqðàΚVyðUÌ¿ßÖ}À~–•ßüBÌççV‘üTåÿš k?þŠ" šS·›‚ŒèØŠõ?ƒˆÐÒ @Ùðk$þ‹*!H’6BÃ1X4Ⱦ±ìY€dФ€ upظ€žº/ËW€DÂP ð!æB Iàn€JydÁÔÙðÝ×,}]9Æ•ƒî¾¹ 4ñ†líì!ÓD)èz?0Å Ò6U;J@Þ[ïnÛ§’–6^Ïùù¡ Ÿ~8$åÁS²Þð­ùô»ÀyUëy%rÿHâø¸U€&°l"¢fýóÇ’R{Ü­RrO`Öä%7 Å%vþ¾˜Î"eJ È]àHABÁ…Sî߇DT jñ!ÝÏYã)Úò ÷õËêHçíÓ=è“Ù/ªµˆ@£ìßvêîzïæH1º¦¨ºüÏÜRVE†8zNc)æÕ ŸàjK*¼~%ûŠÈ{o§2Ÿ½RÌúo|Ýðçµæg‡y¢ùg”û㈠£ À-y>Úî&àV¾n±üåç8ïÄ¥;þ—ì õÇ»Pr%£‹ˆà·wM‡PºŸâ~$ö8rØ÷rd‚H€“ô]fÂ5U€rÿWIÐÿ`¾;” t0I_r¤nù‚dO¢ØuáxåFÁx‚âŸ:Xøþ1_O*ÀùîÍ‚uO~~fÙ{ÞP'ªèðÀÝQ:rÐø³|îóèõù›þþqDð1Z* zѰ?7‹Ȇ×q¹_·XØ]–y×¥{ÓõÛ7‘“&·WJ®L1˜“ü¡ª'+à ãã”åûklÇL ŒÀŽÅ¾þÿ‘»ÀŸ` Âzžð¾Ò"¡:*Š@ @M Á•€¦Ì‰íœy‰Š@Y',&€Iø^)P¬HTR 鵊Փ¨XöD ìué›Mº%¯=Ýuòû€ÿ¼Ï-Éß'M6‘ÄÑj)ë€T5ë¾îß—-„@´€EÝC˜5¡ÉÛu Z”ÙA *ª,‹:)!ýÔÑD fÍCzeê¤}‹ÑšŽ£c]çF¯’¹ ¸;>âÂãë‘þAQ˜ êÖ½]×âê N¯c±•âPš/¶ŽfAö5<@4”ŒFË^0°o k+‘Ûäo_ÄûüqDÇJ¿O^ ›À¿ÍÁ~zàö!&«ÿ®ÿÝähs $=?&aÁ…ÔUP ìþGÅÀ/B‹_pr`_€`oßß?enÁ”ýäzš DЬ*á=ë_˜œq‘‹©Za'üß‚—{Æ›Is`§çêÕ8q`ò¼ÿß5«¾‘ ÌÔ¶ º.ð_àgÕåŸ'¸o!ààG$QТ_ûv]ÿºõŸô´¼g›&]*@ýs¨BЇpµàú¾²,(m1¢²F@RiVݰNЪOðxÉ”„FW¿ï™P–Õ'ªjÀL¢ØV lÞ¯Uõµøe ÌÊZÇG´äû@Ìh5/˜Eú,‹¾NˆùÊôFà#€8ºàµ8€º ÐEdm²Ijj/ZÊÁ IèÐFº@_Õ>$ QUÀø‚k$Ê„Š ‚[¡ò9( °¨V\ô#e¯/ú¦E å,2Ðd¹·¾jH1ýªD.Kú*}ÈBÓ1mÖ~×¹Fà#€8nT h" mÀß ]–÷¢$ krÓsYø‹%cQBÐFf‘‚ëD€0jøî‘(T> (ggF,þ}®‡V³+ vÝ]À×7ï}–_½E¾¬E¿hSž¥¢ú#ðÇ @TÚÀ½+5“ƒ&à×-ÀÔ”gõ˜ôç±j»ª¶e2ÌKDOÐ÷ñ,Â%k¤¡í³Îø e,plßøE¿0 ðû*}ÈÆ<ç?ŽHâX¹å/[&’Yj€h RtËðKY ‚M—å¯û€¨˜#ÐD ’¼ìy^Btg]tÅ?,üË‚yÓ;—qÔ¹/ø/b½/ ú³HOþ8"ˆci  h›Œe X@±öuO›#0«†A—BP¬zÿ¼–¾³«+öqÃô)”´J¢¹È5ž§*䪕€›zÜî}K]GàãÆ‡ìîÖÇ_)Wþ–s>ß7˜oQ_ÿ<À¡o軘•(–e¹Âcú(]ç=ë:É%ïe€> ßü‹€ÿ<ê@ßÎz‹äè¯Dæ¿¡ßÉOrDì‹àc$ËLô‹‚Gß´¿÷1©õ!2}ävù÷õÙßôÜ¢Äí&ƒç½w¡,Jfí[ôûÞûq¢Ž €HVFæyÓ¿ÅOx³Î}Ÿú"„`Õ`?¯’чäÝäuÕs^ÛE›"}ßó¦A?$‘Dp£$`U„aU–â¢ÇÏ£zôqƒ,Jnb_°jõ¦éy½Äµêü}Á¿ |çÍ"˜ø}Î#‚~$‘Äq«À²Àý.NN¿§Ï>!è º}ɼ¯éøy%¹ä÷·*òÖ×>…½*r0•¿*ÐÀ @$‘ÜJ"ðQ}å3ö/°ó€øª-ü¾Aïú^è«ÌKæçežë{žô#ˆ Ž‚|d@¿ãÏuÓ„`ð7=¿(ø `Q –ôe?‚~$‘ÄñA€÷AôðYV‘!±L‘žeüú·üoЬJ1èû>³>GýH"ˆã£#í×½Â×Ì“i°ˆ¢ð¡Yü·• Ìûž«üú‘DG$?B°)xßVþûTzn‚ô!}Á>~$‘Ä @$7J úì—+øßïC X$@®õ­üˤ0FÀ €8"ˆ¤`%¯[…%¿L›ß÷8E¿A¸ °€ @$qD Á¾ö]Ôð¿ A€‹¿Hí|ýÏ?ŽH"ˆ#€H nôõòþÿ¢ï³ª ä}çÓlj0€H∠Ž[E Vñ>·å&» Öxœð∠€Hâø(ˆÁmü÷ÆqR‹#€H"ˆ#’„qîŽ_A‘D @q|ø„!NBqD @$qÄGqDð.Æÿ`ðˆV°XâÕIEND®B`‚Sigil-0.9.9/src/Resource_Files/icon/epub.icns000066400000000000000000002422351321676412500210600ustar00rootroot00000000000000icnsDis32ðýÿ­»ÃÁÂÁÂÀ‚«ÿüþýÿöAÏá€Ý ÜÚ{!îóëÿÿôCÛì€èéââU€µÿÿô@ÛìèéèééÏô‘·ÿÿôAÞïëêéëì×¢¬boÿÿôAàðëôùïíã¾ÚÄFüÿôAâ÷ÿšríüïkûßCùÿô@í©¡z¬¯iâBùÿôEÝjŽ}|ž•Ž–}»L÷ÿóEÞfÞuÓÅtˆˆÆJøÿôAö¦§Áê,懲«±íBøÿôCîÿþýüýÿþýÿéCøÿôCïÿûüýýúûûÿêCøÿôBìþ„úÿçCøÿôCðÿ„þ ÿëCøÿø3p~{‚|{m6üýÿ­»ÃÁÂÁÂÀ‚«ÿüþýÿöAÏá€Ý ÜÚ{!îóëÿÿôCÛì€èéââU€µÿÿô@ÛìèéèééÏô‘·ÿÿôAÞïëêéëì×¢¬boÿÿôAàðëôùïíã¾ÚÄFüÿôAâ÷ÿšríüïkûßCùÿô@í©¡z¬¯iâBùÿôEÝjŽ}|ž•Ž–}»L÷ÿóEÞfÞuÓÅtˆˆÆJøÿôAö¦§Áê,懲«±íBøÿôCîÿþýüýÿþýÿéCøÿôCïÿûüýýúûûÿêCøÿôBìþ„úÿçCøÿôCðÿ„þ ÿëCøÿø3p~{‚|{m6üýÿ­»ÃÁÂÁÂÀ‚«ÿüþýÿöAÏá€Ý ÜÚ{!îóëÿÿôCÛì€èéââU€µÿÿô@ÛìèéèééÏô‘·ÿÿôAÞïëêéëì×¢¬boÿÿôAàðëôùïíã¾ÚÄFüÿôAâ÷ÿšríüïkûßCùÿô@í©¡z¬¯iâBùÿôEÝjŽ}|ž•Ž–}»L÷ÿóEÞfÞuÓÅtˆˆÆJøÿôAö¦§Áê,懲«±íBøÿôCîÿþýüýÿþýÿéCøÿôCïÿûüýýúûûÿêCøÿôBìþ„úÿçCøÿôCðÿ„þ ÿëCøÿø3p~{‚|{m6üs8mk GHHHHHF,ýÿþþþýÿÄ.ûüûûûûúÿÄ.üþýýýýþúÿÃ.üþýýýýýþúÿ¹.üþýýýýýýýþø&.üþýýýýýýýÿø(.üþýýýýýýýÿù(.üþýýýýýýýÿù(.üþýýýýýýýÿù(.üþýýýýýýýÿù(.üþýýýýýýýÿù(.üþýýýýýýýÿù(-ùûúúúúúúúüö'/þÿþþþþþþþÿú)œ žŸŸŸŸŸž ™il32 ­ÿþÿýŸ—œ›†œ›œ‡©èÿþÿýÿÔ‚ÔĆÇÄœ!=Íÿý„ÿüÿ¹ üê…í ìêâÝÃ.¸ÿúùôûÿüÿ¹šõã†æäßÐÂÈ!ãÿÂxÉÿýÿÿüÿ¹›÷å†èçäÞ½áÐ ܦdÅÿýÿÿüÿ¹œøæ‡éçãÄÝûÇ#<Ìÿýÿÿüÿ¹ùæ‡êéåÈáÿÿÕ-@Íÿýÿÿüÿ¹úç‡ëêæÐ½«§·³% ¾ÿüÿÿüÿ¹žûè‡ìëçÙ´Œ…Œ‰cÿüÿÿüÿ¹ŸüéˆíêáÒÅ¿¿·¼\íÿþÿüÿ¹Ÿýêîíîíì€îíêãÝßÜÙè‚Îÿüÿüÿ¹¡ÿìðïðïõóú÷îïðíû­%àïçúÈÿüÿüÿ¹¡ÿîïòíûp.:ÅùîðïøÒ Ñøêÿ‘Èÿüÿüÿ¹¢ÿíúð÷ÿQV.ÿõóõúß!Öüðÿ’Èÿüÿüÿ¹£ÿü¢#ÿTcæ%«8õWˆî0?êÿ’Èÿüÿüÿ¹£ÿß;Ø*îZjâ,ÎñeWñÇ!ŠÿÈÿüÿüÿ¹¢ÿ² •Øg:Q„÷ñ†ZðÿlQÿ‘Èÿüÿüÿ¹£ÿŸ-º·ÿa%µÿçïZòúzLÿ’Èÿüÿüÿ¹¤ÿ©'ÿñû]cÿøèøz€_õÿrkÿ“Èÿüÿüÿ¹¦ÿåVUàaQÿøók?Aõ¬CÁÿ•Èÿüÿüÿ¹¨ÿÿ¸:—ÿ£¡ÿ÷ÿ›UÄbí­K«ÿÿ˜Èÿüÿüÿ¹¨ÿ÷þÿþûþþûüûþÿýÿüþÿþ÷ÿ˜Èÿüÿüÿ¹©ÿùúùúýúú€ýúùûùüúùúùÿ™Èÿüÿüÿ¹ªÿúŽþúÿ™Èÿüÿüÿ¹ªÿúŽþúÿ™Èÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ¹¨ÿ÷Žû÷ÿ—Èÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ·RwŽy wJÆÿüÿüÿ¶’ÄÿüÿþÿýŸ—œ›†œ›œ‡©èÿþÿýÿÔ‚ÔĆÇÄœ!=Íÿý„ÿüÿ¹ üê…í ìêâÝÃ.¸ÿúùôûÿüÿ¹šõã†æäßÐÂÈ!ãÿÂxÉÿýÿÿüÿ¹›÷å†èçäÞ½áÐ ܦdÅÿýÿÿüÿ¹œøæ‡éçãÄÝûÇ#<Ìÿýÿÿüÿ¹ùæ‡êéåÈáÿÿÕ-@Íÿýÿÿüÿ¹úç‡ëêæÐ½«§·³% ¾ÿüÿÿüÿ¹žûè‡ìëçÙ´Œ…Œ‰cÿüÿÿüÿ¹ŸüéˆíêáÒÅ¿¿·¼\íÿþÿüÿ¹Ÿýêîíîíì€îíêãÝßÜÙè‚Îÿüÿüÿ¹¡ÿìðïðïõóú÷îïðíû­%àïçúÈÿüÿüÿ¹¡ÿîïòíûp.:ÅùîðïøÒ Ñøêÿ‘Èÿüÿüÿ¹¢ÿíúð÷ÿQV.ÿõóõúß!Öüðÿ’Èÿüÿüÿ¹£ÿü¢#ÿTcæ%«8õWˆî0?êÿ’Èÿüÿüÿ¹£ÿß;Ø*îZjâ,ÎñeWñÇ!ŠÿÈÿüÿüÿ¹¢ÿ² •Øg:Q„÷ñ†ZðÿlQÿ‘Èÿüÿüÿ¹£ÿŸ-º·ÿa%µÿçïZòúzLÿ’Èÿüÿüÿ¹¤ÿ©'ÿñû]cÿøèøz€_õÿrkÿ“Èÿüÿüÿ¹¦ÿåVUàaQÿøók?Aõ¬CÁÿ•Èÿüÿüÿ¹¨ÿÿ¸:—ÿ£¡ÿ÷ÿ›UÄbí­K«ÿÿ˜Èÿüÿüÿ¹¨ÿ÷þÿþûþþûüûþÿýÿüþÿþ÷ÿ˜Èÿüÿüÿ¹©ÿùúùúýúú€ýúùûùüúùúùÿ™Èÿüÿüÿ¹ªÿúŽþúÿ™Èÿüÿüÿ¹ªÿúŽþúÿ™Èÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ¹¨ÿ÷Žû÷ÿ—Èÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ·RwŽy wJÆÿüÿüÿ¶’ÄÿüÿþÿýŸ—œ›†œ›œ‡©èÿþÿýÿÔ‚ÔĆÇÄœ!=Íÿý„ÿüÿ¹ üê…í ìêâÝÃ.¸ÿúùôûÿüÿ¹šõã†æäßÐÂÈ!ãÿÂxÉÿýÿÿüÿ¹›÷å†èçäÞ½áÐ ܦdÅÿýÿÿüÿ¹œøæ‡éçãÄÝûÇ#<Ìÿýÿÿüÿ¹ùæ‡êéåÈáÿÿÕ-@Íÿýÿÿüÿ¹úç‡ëêæÐ½«§·³% ¾ÿüÿÿüÿ¹žûè‡ìëçÙ´Œ…Œ‰cÿüÿÿüÿ¹ŸüéˆíêáÒÅ¿¿·¼\íÿþÿüÿ¹Ÿýêîíîíì€îíêãÝßÜÙè‚Îÿüÿüÿ¹¡ÿìðïðïõóú÷îïðíû­%àïçúÈÿüÿüÿ¹¡ÿîïòíûp.:ÅùîðïøÒ Ñøêÿ‘Èÿüÿüÿ¹¢ÿíúð÷ÿQV.ÿõóõúß!Öüðÿ’Èÿüÿüÿ¹£ÿü¢#ÿTcæ%«8õWˆî0?êÿ’Èÿüÿüÿ¹£ÿß;Ø*îZjâ,ÎñeWñÇ!ŠÿÈÿüÿüÿ¹¢ÿ² •Øg:Q„÷ñ†ZðÿlQÿ‘Èÿüÿüÿ¹£ÿŸ-º·ÿa%µÿçïZòúzLÿ’Èÿüÿüÿ¹¤ÿ©'ÿñû]cÿøèøz€_õÿrkÿ“Èÿüÿüÿ¹¦ÿåVUàaQÿøók?Aõ¬CÁÿ•Èÿüÿüÿ¹¨ÿÿ¸:—ÿ£¡ÿ÷ÿ›UÄbí­K«ÿÿ˜Èÿüÿüÿ¹¨ÿ÷þÿþûþþûüûþÿýÿüþÿþ÷ÿ˜Èÿüÿüÿ¹©ÿùúùúýúú€ýúùûùüúùúùÿ™Èÿüÿüÿ¹ªÿúŽþúÿ™Èÿüÿüÿ¹ªÿúŽþúÿ™Èÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ¹¨ÿ÷Žû÷ÿ—Èÿüÿüÿ¹ªÿûŽÿûÿšÈÿüÿüÿ·RwŽy wJÆÿüÿüÿ¶’Äÿül8mk­ÿòõõõõõõõõõôö×>¼ÿüÿÿÿÿÿÿÿÿÿÿþÿòC¼ÿûþþþþþþþþþþþûÿòA½ÿüÿÿÿÿÿÿÿÿÿÿÿÿüÿñ@½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿüÿñ@½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿð?½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿð?½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿê)½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿ˜½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ­½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¯ºÿùüüüüüüüüüüüüüüüüüùÿ­½ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ°y³¬®®®®®®®®®®®®®®®®®¬´pit32SýŠÿ ýÿÒ¥©×ݸŸ¤¯£¢£¢ „Ÿ€œš°¾½·æÿþªÿþÿ÷-ÁRŒƒzÑÿýªÿûÿ“‡”•‚”••”••”€•€”€•”“”€•””“€’|G 113(€¸®©áÿþ©ÿ þÿü**÷‡õôôõôôõôôõ€ô€õ€ôõõƒôòò€ñ ïíëèà¾n ‚LypÍÿý©ÿýÿÏ€'ä©âáààßßÞÜÚÙÖÕÕÞ³PŠxÐÿý©ÿ ûÿ 'è©æåå€ã áßÝÚÙÖÐÆÑÆ&€Sˆ€wÏÿý©ÿ ûÿx'è©æååããâàÞÜÙØÔÐÍÀÌÌ$BŒwÏÿý©ÿ ûÿ`'è©æååããáàÞÛÚ×ÓÏËÆ·ÑÊ!NŒuÏÿý©ÿ ûÿa'è©æååããâàÞÜÚ×ÓÏÊľ°ÝÀ"PÌÿý†ÿþ„ýþ—ÿ ûÿ`'é©çææääãáàÞÛØÔÐËÅ¿±¼á¸"FÖÿý©ÿ ûÿ`'é©çææ€äâàÞÜÙÖÑÍÇ¿µ®Õ׸ ‹ÿú„ÿþÿ×»À€¿À»çÿþ•ÿ ûÿ`'é©çææåääâáßÝÚØÓÏÉÁ¹©Ê×Óµšÿúƒÿýÿ©lw€uwlËÿý•ÿ ûÿ`'éªçææ€äáàÞÛÙÕÐËû«¹ãÎÔ²šÿú‚ÿýÿ±y„€‚„yÐÿý•ÿ ûÿ`'é«çææääãáàÝÚ×ÒÍǽ°¬ãÜÎÓ¯šÿúÿýÿ°w‚€€‚wÏÿý•ÿ ûÿ`'é«çææåääâáÞÛÙÔÏÉÀµ§ÝçÚÎÓ¬šÿú€ÿýÿ°w‚€€‚wÏÿý•ÿ ûÿ`(ê¬è&ççååäãáÞÛ×ÑÌù§ÕñâÚÍÓªšÿúÿÿýÿ°w‚€€‚wÏÿý•ÿ ûÿ`(ê­è-ççååäâàÝÙÔÎż©ËøêäÚÍÓ©šÿýÿýÿ®u€~€‚wÏÿý•ÿ ûÿ`(ê®è,çæåäãáÝÚÖÐǽ«ÃüñëãÚÍÓ¨šÿýýÿ´‰‡ƒ€‚wÏÿý•ÿ ûÿ`(ë®éèèææäâàÜØÒÊ¿®¼ý÷òëãÙÍÓ§' # "\‡€wÏÿý•ÿ ûÿ`(ë¯éèèæåãáÝÙÓËÁ±¸ýû÷òëâÙÍÔ§ƒP‰€wÏÿý•ÿ ûÿ`(ë¯éèèçåäâÞÙÔ̲µûþû÷òëâÙÍÔ§ƒQ‰€wÏÿý•ÿ ûÿ`(ë°éèçæäâÞÚÔÍô³úÿýû÷òëâÙÍÔ§„P‰€wÏÿý•ÿ ûÿ`(ë°éèçæäãßÚÕÎĵ³ùÿþýû÷òëâÚÍÔ¨ƒP‰€wÏÿý•ÿ ûÿ`(ì°êéèçåäàÛÖÏÅ·´ùÿÿþýû÷òëãÚÍÕ¨‚P‰€wÏÿý•ÿ ûÿ`(ë°ê ééèæäáÜÖÐǹµù€ÿ þýû÷òëãÚÎÖ¨P‰€wÏÿý•ÿ ûÿ`(ë°ê ééèæäáÜ×ÐȺ¸ùÿ€þ ýüú÷òêãÛÎÖ©€Q‡€wÏÿý•ÿ ûÿ`(ì°ë êêéçåâÝØÑɼ»û„ÿü÷ðèáÙÏשK~xÏÿý•ÿ ûÿ`(ì°ë*êêéèåâÞØÑʾ»íñíììïñöûþÿýöêÝÍÕ© hˆuÐÿý•ÿ ûÿ`(ì°ë*êêéèæãÞÙÒÊÁ¶ªœ‚}}~…Ž›«¿ÔâçÛÛ¨ s}Îÿý•ÿ ûÿ`(ì°ë*êêéèåãßÚÓ̹­žŽ‚|zxuspkhhly’³Ìä°pÐÿý•ÿ ûÿ`(ì°ë*êêéèæãßÚÕÎÅ»°¢’…~}}{zyywtomv‘Í­*Øÿý•ÿ ûÿ`(í°ìëëêéçåáÜÖÐÉ¿µ¨˜†„‚€€€€{pk¢• ¢ÿû•ÿ ûÿ`(í°ìëëêêçåâÝØÒËú¯£™“’‘‘Œ€‹ŠŠˆ‡†€kq!óÿþ”ÿ ûÿ`(î±íìëêèçäßÚÕÎÈÀ¸¯¨¢ Ÿž›€™˜——–”‘‰xŽDÿû”ÿ ûÿ`(î±í+ìëëéçåáÜØÒÌÆÀ¹´¯®«ª©¨§¦¦¥¥¤¢¡ž›—’Šˆ*üÿþ“ÿ ûÿ`(î±íììëêçæãßÚÖÐËÆÁ½¹·¶µ´³²±±¯­«©¦¢š¢Zµÿü“ÿ ûÿ`(î±íììëêèçåáÝÙÕÐÌÈÅ¿¿¾‚½¼¼»º¹·µ³°¬­Œiÿû“ÿ ûÿ`(ï²îíììêèçäáÝÙÖÒÏÍÊÉÈ€ÇÆ€ÇÆÅÅÄÂÀ¾¼¸»£ 0•ÿ ûÿ`(ï²îííììêèçäâÞÛÙÖÔÒЄÏÐÐÏÎÍÌÊÈÇÃȬæÿþ’ÿ ûÿ`(ï³îííììéèçåãàÝÜÚÙØ×ÖÖ„× ÖÖÔÓÑÏÍÔ²€Øÿý’ÿ ûÿ`(ð³ï îîííìêéèçåãàÝÜÝÜÝ‚Ü ÝÜÛÚÙØÖÞ¸€µÿü’ÿ ûÿ`(ð´ïîîííìëééèäèòòæáã‚âá€à ßÝÛ㾟ÿû’ÿ ûÿ`(ðµïîî€í ìêé÷ߦžÞí忀çæååääãâàèÄ ÿû’ÿ ûÿ`(ð¶ï€î ííìð”&Ùíè…é€è ççåîÇŸÿû’ÿ ûÿ`)ñ·ð€ï ìöÌ…þé„ìë êêçñÉŸÿû’ÿ ûÿ`)ñ—ð îììííîîïïìí”ð ïïîôVIùì„îƒí ëõÌŸÿû’ÿ ûÿ`)ò–ñð÷ÿüùöùÿýðï”ñíüË%†ð‚ï îìöÍŸÿû’ÿ ûÿ`)ò•ñïú¼V\WQI?5=]ª÷öî”ñðó($Œð îøÏŸÿû’ÿ ûÿ`)ò•ñíÿ}ƒ?Þùî“ñîýM%Œñ îøÏŸÿû’ÿ ûÿ`)ò•ñîý·&àöï’ñíÿc/ô‹ñ ïùПÿû’ÿ ûÿ`)ó•òñõæ„nJûð’òîÿx=ùñŠò ðúÑŸÿû’ÿ ûÿ`)ó—òõ+'þÿã5¶ÿï‘òîÿ}IýðŠò ðúÑŸÿû’ÿ ûÿ`)ô‹óòñò†óö/&ðíÿÒ [ÿð€óòñ…óòñ‚ó ïÿzTÿïñïñ‡ó ñûÑŸÿû’ÿ ûÿ`)ô‰óòïõûùñïƒóò÷2+õóîÿb!ïôóòïöúòò‚óïöûòò€ó ïÿx[ÿïýÿüñò…ó ñûÑŸÿû’ÿ ûÿ`)ôˆó ñõÿëÑÛøÿòòó4òø40÷òïÿ¬ÊüðõÿåÔøõòóóòôÿéÒõ÷òóóïÿu^ÿô¼œÈüöñ„ó ñûÑŸÿû’ÿ ûÿ`)ô‡ó ñøìp 2œûóò€ó5òø44øòò÷à¤ÿôìpTóôòòõô€?çöòóïÿr…Þ2Mèùñƒó ñûÑŸÿû’ÿ ûÿ`)õ†ô òøæ1cüó€ô6óù49úóóôö'ÿã.¨ÿðôõFÿðôðÿp`".éøó‚ô òüÒŸÿû’ÿ ûÿ`)õ‡ô9øCÿðôôóù4=üóóôõ(›ÿÝbÿðõó5Jÿòôðÿm‚Rýò‚ô òüÒŸÿû’ÿ ûÿ`)ö…õ3ñÿ¡ü›éøôõôú4Aþóôôû9žÿÿ¸\ÿñóþØ &€õñÿkZ“O«ÿòõ óýÓŸÿû’ÿ ûÿ`)ö„õIôøí bÿòÿ`›ÿòõôú4Dÿóôõ÷-¯ÿóò#\ÿñõñÿS$ôöôñÿivÿûÿ‚Eÿóõ óýÓŸÿû’ÿ ûÿ`)÷„öJóÿ¿ÿïÿÀUÿóöõû4Fÿôõöø' ÛüñÿV\ÿòöòÿ}%õ÷õòÿg“ÿíôþ8 Õýô€ö ôþÓŸÿû’ÿ ûÿ`)÷„ö4óÿOåúôûà*øöõõû4IÿôôýÕ6üõòÿe\ÿòöòÿ£%€öòÿfÿòòÿ¡¡ÿò€ö ôþÓŸÿû’ÿ ûÿ`)÷ƒö5õúåOÿñóòö0ïøõõû4JÿôïÿˆŒÿòòÿt\ÿòöóÿ·%€öòÿd”ÿòõùæhÿò€ö ôþÓŸÿû’ÿ ûÿ`)÷ƒö5óÿÃhÿûÿüÿYÖýôõû4Mÿñÿåæúõòÿ‹\ÿòöôÿÃ&€öòÿb—ÿòöõý9<ýõ€ö ôþÓŸÿû’ÿ ûÿ`)÷ƒöJòÿ{Ý´¡¤8Ïÿôõû4MÿùÔ7šÿóöòÿ“\ÿòöôÿÅ(÷ööòÿašÿòöòÿt+øö ôþÓŸÿû’ÿ ûÿ`*øƒ÷óÿj‚NÉÿôöü5 :1jÿõ÷÷óÿ—]ÿó÷õÿÄ)ø÷÷óÿ`šÿó÷óÿ›!óøö÷÷õÿÔŸÿû’ÿ ûÿ`*øƒ÷óÿ`… Öþõöü5„;wþöö÷÷óÿ—]ÿó÷õÿÃ+ù÷÷óÿ_šÿó÷óÿšéûö÷÷õÿÔŸÿû’ÿ ûÿ`*ùƒø!õÿS‚͸µ¯¨£ªßü÷ø÷ý5QÄÿö÷€ø5ôÿ—]ÿôøõÿÂ,úøøôÿ_›ÿôøôÿ¡çü÷øøöÿÕŸÿû’ÿ ûÿ`*ùƒøöÿF¦ÿûƒÿý÷øø÷ý5FÞÎëÿþõ÷ø5ôÿ—]ÿôøõÿ¿-úøøôÿ^›ÿôøõÿ®ðú÷øøöÿÕŸÿû’ÿ ûÿ`*ùƒøöÿA›ÿñ€õ€ôö€ø ÷ý5Qÿüûõõƒø5ôÿ—]ÿôøõÿ¼-ûøøôÿ^›ÿôøõÿ­&øø÷øøöÿÖŸÿû’ÿ ûÿ`*ùƒøõÿM†ÿô„ø ÷øø÷ý5Mÿóö…ø&ôÿ–]ÿôøõÿ¹-ûøøôÿ]›ÿôøôÿŸ1ü÷€ø öÿÖŸÿû’ÿ ûÿ`*úƒùõÿ^aÿõƒù øûùùøþ5Lÿö†ù&õÿ•]ÿõùöÿ·.üùùõÿ^œÿõùõÿOÿö€ù ÷ÿÖŸÿû’ÿ ûÿ`*úƒùõÿh;þøƒù ÷æúøøþ5Hÿ÷†ù&õÿ“^ÿõùöÿ³.üùùõÿ]ÿõùõÿÿõ€ù ÷ÿןÿû’ÿ ûÿ`*ûƒú öÿÎÿ÷€úöÿÍvÿ÷ùÿ5Cÿø†ú&öÿ’Xÿ÷ú÷ÿ²)ûúúöÿ^uÿöú÷ÿX¼ÿ÷€ú øÿןÿû’ÿ ûÿ`*ûƒúøÿÉYÿõ÷øõûÿ=iÿöùÿ5=ÿù†úöÿ1üøøòÿ£&€úöÿh`ÿöúúü*'öûù€ú øÿØŸÿû’ÿ ûÿ`*ûƒúùüð —ÿýþÿ÷e ÿöùÿ54ÿù†ú%öÿ—Úÿûÿã&íýùöÿŠ8ÿùøÿÒwÿöú øÿØŸÿû’ÿ ûÿ`*û„úöÿopÎÏ”( Õÿøùÿ5*û‡ú%÷ÿ´Zïã£Ýþö÷ÿ¢êûñÿ{ Ûÿøú øÿØŸÿû’ÿ ûÿ`*û„úøÿÖ  Tÿ÷úùÿ5&ˆú$ùÿá  u4•ÿúøÿÓ‘ÿÿÊ |ÿ÷‚ú øÿØŸÿû’ÿ ûÿ`*û…ú÷ÿ‡ Þÿøúùÿ8)‰ú#÷ÿ\3ÿ[zÔÿ÷ÿI sx;õûù‚ú øÿØŸÿû’ÿ ûÿ`*ü†ûùÿn€!Ñÿù€ûþ0%ûüú†û"ùÿÜ/âÿ¯‘ÿõÿÙ5èÿùƒû ùÿÙŸÿû’ÿ ûÿ`*ü‡û ùÿ¤(uìÿøûý}W`Zpõüú‡ûùÿÆ$ jîþøÿf$™€û ùÿèjöýù„û ùÿÙŸÿû’ÿ ûÿ`*ý‡ü ûúÿøÓ¾Íóÿüùƒü‚ÿ‹üúÿõÇÁèÿûú€üËÉ÷ÿü úüÿï˽Ïñÿûú…ü úÿÙŸÿû’ÿ ûÿ`*ý‰üùü€ÿýøû„üù€øùŒüùüÿÿþùûüüûúÿÿýø‚üûùþ€ÿýøû†ü úÿÙŸÿû’ÿ ûÿ`*ýŠüûúùúû›üûùùûƒüúùû…üûùùúûˆü úÿÚŸÿû’ÿ ûÿ`*ýÒü úÿÚŸÿû’ÿ ûÿ`*ýÒü úÿÚŸÿû’ÿ ûÿ`*ýÒü úÿÚŸÿû’ÿ ûÿ`*þÒý ûÿÚŸÿû’ÿ ûÿ`*þÒý ûÿÚŸÿû’ÿ ûÿ`*þÒý ûÿÚŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿ ûÿ`*üÒû ùÿØŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿ ûÿ`eÒdcgV€Ÿÿû’ÿûÿ`ÞŸÿû’ÿûÿ`€ÕŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû‡ÿŠÿ ýÿÒ¥©×ݸŸ¤¯£¢£¢ „Ÿ€œš°¾½·æÿþªÿþÿ÷-ÁRŒƒzÑÿýªÿûÿ“‡”•‚”••”••”€•€”€•”“”€•””“€’|G 113(€¸®©áÿþ©ÿ þÿü**÷‡õôôõôôõôôõ€ô€õ€ôõõƒôòò€ñ ïíëèà¾n ‚LypÍÿý©ÿýÿÏ€'ä©âáààßßÞÜÚÙÖÕÕÞ³PŠxÐÿý©ÿ ûÿ 'è©æåå€ã áßÝÚÙÖÐÆÑÆ&€Sˆ€wÏÿý©ÿ ûÿx'è©æååããâàÞÜÙØÔÐÍÀÌÌ$BŒwÏÿý©ÿ ûÿ`'è©æååããáàÞÛÚ×ÓÏËÆ·ÑÊ!NŒuÏÿý©ÿ ûÿa'è©æååããâàÞÜÚ×ÓÏÊľ°ÝÀ"PÌÿý†ÿþ„ýþ—ÿ ûÿ`'é©çææääãáàÞÛØÔÐËÅ¿±¼á¸"FÖÿý©ÿ ûÿ`'é©çææ€äâàÞÜÙÖÑÍÇ¿µ®Õ׸ ‹ÿú„ÿþÿ×»À€¿À»çÿþ•ÿ ûÿ`'é©çææåääâáßÝÚØÓÏÉÁ¹©Ê×Óµšÿúƒÿýÿ©lw€uwlËÿý•ÿ ûÿ`'éªçææ€äáàÞÛÙÕÐËû«¹ãÎÔ²šÿú‚ÿýÿ±y„€‚„yÐÿý•ÿ ûÿ`'é«çææääãáàÝÚ×ÒÍǽ°¬ãÜÎÓ¯šÿúÿýÿ°w‚€€‚wÏÿý•ÿ ûÿ`'é«çææåääâáÞÛÙÔÏÉÀµ§ÝçÚÎÓ¬šÿú€ÿýÿ°w‚€€‚wÏÿý•ÿ ûÿ`(ê¬è&ççååäãáÞÛ×ÑÌù§ÕñâÚÍÓªšÿúÿÿýÿ°w‚€€‚wÏÿý•ÿ ûÿ`(ê­è-ççååäâàÝÙÔÎż©ËøêäÚÍÓ©šÿýÿýÿ®u€~€‚wÏÿý•ÿ ûÿ`(ê®è,çæåäãáÝÚÖÐǽ«ÃüñëãÚÍÓ¨šÿýýÿ´‰‡ƒ€‚wÏÿý•ÿ ûÿ`(ë®éèèææäâàÜØÒÊ¿®¼ý÷òëãÙÍÓ§' # "\‡€wÏÿý•ÿ ûÿ`(ë¯éèèæåãáÝÙÓËÁ±¸ýû÷òëâÙÍÔ§ƒP‰€wÏÿý•ÿ ûÿ`(ë¯éèèçåäâÞÙÔ̲µûþû÷òëâÙÍÔ§ƒQ‰€wÏÿý•ÿ ûÿ`(ë°éèçæäâÞÚÔÍô³úÿýû÷òëâÙÍÔ§„P‰€wÏÿý•ÿ ûÿ`(ë°éèçæäãßÚÕÎĵ³ùÿþýû÷òëâÚÍÔ¨ƒP‰€wÏÿý•ÿ ûÿ`(ì°êéèçåäàÛÖÏÅ·´ùÿÿþýû÷òëãÚÍÕ¨‚P‰€wÏÿý•ÿ ûÿ`(ë°ê ééèæäáÜÖÐǹµù€ÿ þýû÷òëãÚÎÖ¨P‰€wÏÿý•ÿ ûÿ`(ë°ê ééèæäáÜ×ÐȺ¸ùÿ€þ ýüú÷òêãÛÎÖ©€Q‡€wÏÿý•ÿ ûÿ`(ì°ë êêéçåâÝØÑɼ»û„ÿü÷ðèáÙÏשK~xÏÿý•ÿ ûÿ`(ì°ë*êêéèåâÞØÑʾ»íñíììïñöûþÿýöêÝÍÕ© hˆuÐÿý•ÿ ûÿ`(ì°ë*êêéèæãÞÙÒÊÁ¶ªœ‚}}~…Ž›«¿ÔâçÛÛ¨ s}Îÿý•ÿ ûÿ`(ì°ë*êêéèåãßÚÓ̹­žŽ‚|zxuspkhhly’³Ìä°pÐÿý•ÿ ûÿ`(ì°ë*êêéèæãßÚÕÎÅ»°¢’…~}}{zyywtomv‘Í­*Øÿý•ÿ ûÿ`(í°ìëëêéçåáÜÖÐÉ¿µ¨˜†„‚€€€€{pk¢• ¢ÿû•ÿ ûÿ`(í°ìëëêêçåâÝØÒËú¯£™“’‘‘Œ€‹ŠŠˆ‡†€kq!óÿþ”ÿ ûÿ`(î±íìëêèçäßÚÕÎÈÀ¸¯¨¢ Ÿž›€™˜——–”‘‰xŽDÿû”ÿ ûÿ`(î±í+ìëëéçåáÜØÒÌÆÀ¹´¯®«ª©¨§¦¦¥¥¤¢¡ž›—’Šˆ*üÿþ“ÿ ûÿ`(î±íììëêçæãßÚÖÐËÆÁ½¹·¶µ´³²±±¯­«©¦¢š¢Zµÿü“ÿ ûÿ`(î±íììëêèçåáÝÙÕÐÌÈÅ¿¿¾‚½¼¼»º¹·µ³°¬­Œiÿû“ÿ ûÿ`(ï²îíììêèçäáÝÙÖÒÏÍÊÉÈ€ÇÆ€ÇÆÅÅÄÂÀ¾¼¸»£ 0•ÿ ûÿ`(ï²îííììêèçäâÞÛÙÖÔÒЄÏÐÐÏÎÍÌÊÈÇÃȬæÿþ’ÿ ûÿ`(ï³îííììéèçåãàÝÜÚÙØ×ÖÖ„× ÖÖÔÓÑÏÍÔ²€Øÿý’ÿ ûÿ`(ð³ï îîííìêéèçåãàÝÜÝÜÝ‚Ü ÝÜÛÚÙØÖÞ¸€µÿü’ÿ ûÿ`(ð´ïîîííìëééèäèòòæáã‚âá€à ßÝÛ㾟ÿû’ÿ ûÿ`(ðµïîî€í ìêé÷ߦžÞí忀çæååääãâàèÄ ÿû’ÿ ûÿ`(ð¶ï€î ííìð”&Ùíè…é€è ççåîÇŸÿû’ÿ ûÿ`)ñ·ð€ï ìöÌ…þé„ìë êêçñÉŸÿû’ÿ ûÿ`)ñ—ð îììííîîïïìí”ð ïïîôVIùì„îƒí ëõÌŸÿû’ÿ ûÿ`)ò–ñð÷ÿüùöùÿýðï”ñíüË%†ð‚ï îìöÍŸÿû’ÿ ûÿ`)ò•ñïú¼V\WQI?5=]ª÷öî”ñðó($Œð îøÏŸÿû’ÿ ûÿ`)ò•ñíÿ}ƒ?Þùî“ñîýM%Œñ îøÏŸÿû’ÿ ûÿ`)ò•ñîý·&àöï’ñíÿc/ô‹ñ ïùПÿû’ÿ ûÿ`)ó•òñõæ„nJûð’òîÿx=ùñŠò ðúÑŸÿû’ÿ ûÿ`)ó—òõ+'þÿã5¶ÿï‘òîÿ}IýðŠò ðúÑŸÿû’ÿ ûÿ`)ô‹óòñò†óö/&ðíÿÒ [ÿð€óòñ…óòñ‚ó ïÿzTÿïñïñ‡ó ñûÑŸÿû’ÿ ûÿ`)ô‰óòïõûùñïƒóò÷2+õóîÿb!ïôóòïöúòò‚óïöûòò€ó ïÿx[ÿïýÿüñò…ó ñûÑŸÿû’ÿ ûÿ`)ôˆó ñõÿëÑÛøÿòòó4òø40÷òïÿ¬ÊüðõÿåÔøõòóóòôÿéÒõ÷òóóïÿu^ÿô¼œÈüöñ„ó ñûÑŸÿû’ÿ ûÿ`)ô‡ó ñøìp 2œûóò€ó5òø44øòò÷à¤ÿôìpTóôòòõô€?çöòóïÿr…Þ2Mèùñƒó ñûÑŸÿû’ÿ ûÿ`)õ†ô òøæ1cüó€ô6óù49úóóôö'ÿã.¨ÿðôõFÿðôðÿp`".éøó‚ô òüÒŸÿû’ÿ ûÿ`)õ‡ô9øCÿðôôóù4=üóóôõ(›ÿÝbÿðõó5Jÿòôðÿm‚Rýò‚ô òüÒŸÿû’ÿ ûÿ`)ö…õ3ñÿ¡ü›éøôõôú4Aþóôôû9žÿÿ¸\ÿñóþØ &€õñÿkZ“O«ÿòõ óýÓŸÿû’ÿ ûÿ`)ö„õIôøí bÿòÿ`›ÿòõôú4Dÿóôõ÷-¯ÿóò#\ÿñõñÿS$ôöôñÿivÿûÿ‚Eÿóõ óýÓŸÿû’ÿ ûÿ`)÷„öJóÿ¿ÿïÿÀUÿóöõû4Fÿôõöø' ÛüñÿV\ÿòöòÿ}%õ÷õòÿg“ÿíôþ8 Õýô€ö ôþÓŸÿû’ÿ ûÿ`)÷„ö4óÿOåúôûà*øöõõû4IÿôôýÕ6üõòÿe\ÿòöòÿ£%€öòÿfÿòòÿ¡¡ÿò€ö ôþÓŸÿû’ÿ ûÿ`)÷ƒö5õúåOÿñóòö0ïøõõû4JÿôïÿˆŒÿòòÿt\ÿòöóÿ·%€öòÿd”ÿòõùæhÿò€ö ôþÓŸÿû’ÿ ûÿ`)÷ƒö5óÿÃhÿûÿüÿYÖýôõû4Mÿñÿåæúõòÿ‹\ÿòöôÿÃ&€öòÿb—ÿòöõý9<ýõ€ö ôþÓŸÿû’ÿ ûÿ`)÷ƒöJòÿ{Ý´¡¤8Ïÿôõû4MÿùÔ7šÿóöòÿ“\ÿòöôÿÅ(÷ööòÿašÿòöòÿt+øö ôþÓŸÿû’ÿ ûÿ`*øƒ÷óÿj‚NÉÿôöü5 :1jÿõ÷÷óÿ—]ÿó÷õÿÄ)ø÷÷óÿ`šÿó÷óÿ›!óøö÷÷õÿÔŸÿû’ÿ ûÿ`*øƒ÷óÿ`… Öþõöü5„;wþöö÷÷óÿ—]ÿó÷õÿÃ+ù÷÷óÿ_šÿó÷óÿšéûö÷÷õÿÔŸÿû’ÿ ûÿ`*ùƒø!õÿS‚͸µ¯¨£ªßü÷ø÷ý5QÄÿö÷€ø5ôÿ—]ÿôøõÿÂ,úøøôÿ_›ÿôøôÿ¡çü÷øøöÿÕŸÿû’ÿ ûÿ`*ùƒøöÿF¦ÿûƒÿý÷øø÷ý5FÞÎëÿþõ÷ø5ôÿ—]ÿôøõÿ¿-úøøôÿ^›ÿôøõÿ®ðú÷øøöÿÕŸÿû’ÿ ûÿ`*ùƒøöÿA›ÿñ€õ€ôö€ø ÷ý5Qÿüûõõƒø5ôÿ—]ÿôøõÿ¼-ûøøôÿ^›ÿôøõÿ­&øø÷øøöÿÖŸÿû’ÿ ûÿ`*ùƒøõÿM†ÿô„ø ÷øø÷ý5Mÿóö…ø&ôÿ–]ÿôøõÿ¹-ûøøôÿ]›ÿôøôÿŸ1ü÷€ø öÿÖŸÿû’ÿ ûÿ`*úƒùõÿ^aÿõƒù øûùùøþ5Lÿö†ù&õÿ•]ÿõùöÿ·.üùùõÿ^œÿõùõÿOÿö€ù ÷ÿÖŸÿû’ÿ ûÿ`*úƒùõÿh;þøƒù ÷æúøøþ5Hÿ÷†ù&õÿ“^ÿõùöÿ³.üùùõÿ]ÿõùõÿÿõ€ù ÷ÿןÿû’ÿ ûÿ`*ûƒú öÿÎÿ÷€úöÿÍvÿ÷ùÿ5Cÿø†ú&öÿ’Xÿ÷ú÷ÿ²)ûúúöÿ^uÿöú÷ÿX¼ÿ÷€ú øÿןÿû’ÿ ûÿ`*ûƒúøÿÉYÿõ÷øõûÿ=iÿöùÿ5=ÿù†úöÿ1üøøòÿ£&€úöÿh`ÿöúúü*'öûù€ú øÿØŸÿû’ÿ ûÿ`*ûƒúùüð —ÿýþÿ÷e ÿöùÿ54ÿù†ú%öÿ—Úÿûÿã&íýùöÿŠ8ÿùøÿÒwÿöú øÿØŸÿû’ÿ ûÿ`*û„úöÿopÎÏ”( Õÿøùÿ5*û‡ú%÷ÿ´Zïã£Ýþö÷ÿ¢êûñÿ{ Ûÿøú øÿØŸÿû’ÿ ûÿ`*û„úøÿÖ  Tÿ÷úùÿ5&ˆú$ùÿá  u4•ÿúøÿÓ‘ÿÿÊ |ÿ÷‚ú øÿØŸÿû’ÿ ûÿ`*û…ú÷ÿ‡ Þÿøúùÿ8)‰ú#÷ÿ\3ÿ[zÔÿ÷ÿI sx;õûù‚ú øÿØŸÿû’ÿ ûÿ`*ü†ûùÿn€!Ñÿù€ûþ0%ûüú†û"ùÿÜ/âÿ¯‘ÿõÿÙ5èÿùƒû ùÿÙŸÿû’ÿ ûÿ`*ü‡û ùÿ¤(uìÿøûý}W`Zpõüú‡ûùÿÆ$ jîþøÿf$™€û ùÿèjöýù„û ùÿÙŸÿû’ÿ ûÿ`*ý‡ü ûúÿøÓ¾Íóÿüùƒü‚ÿ‹üúÿõÇÁèÿûú€üËÉ÷ÿü úüÿï˽Ïñÿûú…ü úÿÙŸÿû’ÿ ûÿ`*ý‰üùü€ÿýøû„üù€øùŒüùüÿÿþùûüüûúÿÿýø‚üûùþ€ÿýøû†ü úÿÙŸÿû’ÿ ûÿ`*ýŠüûúùúû›üûùùûƒüúùû…üûùùúûˆü úÿÚŸÿû’ÿ ûÿ`*ýÒü úÿÚŸÿû’ÿ ûÿ`*ýÒü úÿÚŸÿû’ÿ ûÿ`*ýÒü úÿÚŸÿû’ÿ ûÿ`*þÒý ûÿÚŸÿû’ÿ ûÿ`*þÒý ûÿÚŸÿû’ÿ ûÿ`*þÒý ûÿÚŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿ ûÿ`*üÒû ùÿØŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿ ûÿ`eÒdcgV€Ÿÿû’ÿûÿ`ÞŸÿû’ÿûÿ`€ÕŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû‡ÿŠÿ ýÿÒ¥©×ݸŸ¤¯£¢£¢ „Ÿ€œš°¾½·æÿþªÿþÿ÷-ÁRŒƒzÑÿýªÿûÿ“‡”•‚”••”••”€•€”€•”“”€•””“€’|G 113(€¸®©áÿþ©ÿ þÿü**÷‡õôôõôôõôôõ€ô€õ€ôõõƒôòò€ñ ïíëèà¾n ‚LypÍÿý©ÿýÿÏ€'ä©âáààßßÞÜÚÙÖÕÕÞ³PŠxÐÿý©ÿ ûÿ 'è©æåå€ã áßÝÚÙÖÐÆÑÆ&€Sˆ€wÏÿý©ÿ ûÿx'è©æååããâàÞÜÙØÔÐÍÀÌÌ$BŒwÏÿý©ÿ ûÿ`'è©æååããáàÞÛÚ×ÓÏËÆ·ÑÊ!NŒuÏÿý©ÿ ûÿa'è©æååããâàÞÜÚ×ÓÏÊľ°ÝÀ"PÌÿý†ÿþ„ýþ—ÿ ûÿ`'é©çææääãáàÞÛØÔÐËÅ¿±¼á¸"FÖÿý©ÿ ûÿ`'é©çææ€äâàÞÜÙÖÑÍÇ¿µ®Õ׸ ‹ÿú„ÿþÿ×»À€¿À»çÿþ•ÿ ûÿ`'é©çææåääâáßÝÚØÓÏÉÁ¹©Ê×Óµšÿúƒÿýÿ©lw€uwlËÿý•ÿ ûÿ`'éªçææ€äáàÞÛÙÕÐËû«¹ãÎÔ²šÿú‚ÿýÿ±y„€‚„yÐÿý•ÿ ûÿ`'é«çææääãáàÝÚ×ÒÍǽ°¬ãÜÎÓ¯šÿúÿýÿ°w‚€€‚wÏÿý•ÿ ûÿ`'é«çææåääâáÞÛÙÔÏÉÀµ§ÝçÚÎÓ¬šÿú€ÿýÿ°w‚€€‚wÏÿý•ÿ ûÿ`(ê¬è&ççååäãáÞÛ×ÑÌù§ÕñâÚÍÓªšÿúÿÿýÿ°w‚€€‚wÏÿý•ÿ ûÿ`(ê­è-ççååäâàÝÙÔÎż©ËøêäÚÍÓ©šÿýÿýÿ®u€~€‚wÏÿý•ÿ ûÿ`(ê®è,çæåäãáÝÚÖÐǽ«ÃüñëãÚÍÓ¨šÿýýÿ´‰‡ƒ€‚wÏÿý•ÿ ûÿ`(ë®éèèææäâàÜØÒÊ¿®¼ý÷òëãÙÍÓ§' # "\‡€wÏÿý•ÿ ûÿ`(ë¯éèèæåãáÝÙÓËÁ±¸ýû÷òëâÙÍÔ§ƒP‰€wÏÿý•ÿ ûÿ`(ë¯éèèçåäâÞÙÔ̲µûþû÷òëâÙÍÔ§ƒQ‰€wÏÿý•ÿ ûÿ`(ë°éèçæäâÞÚÔÍô³úÿýû÷òëâÙÍÔ§„P‰€wÏÿý•ÿ ûÿ`(ë°éèçæäãßÚÕÎĵ³ùÿþýû÷òëâÚÍÔ¨ƒP‰€wÏÿý•ÿ ûÿ`(ì°êéèçåäàÛÖÏÅ·´ùÿÿþýû÷òëãÚÍÕ¨‚P‰€wÏÿý•ÿ ûÿ`(ë°ê ééèæäáÜÖÐǹµù€ÿ þýû÷òëãÚÎÖ¨P‰€wÏÿý•ÿ ûÿ`(ë°ê ééèæäáÜ×ÐȺ¸ùÿ€þ ýüú÷òêãÛÎÖ©€Q‡€wÏÿý•ÿ ûÿ`(ì°ë êêéçåâÝØÑɼ»û„ÿü÷ðèáÙÏשK~xÏÿý•ÿ ûÿ`(ì°ë*êêéèåâÞØÑʾ»íñíììïñöûþÿýöêÝÍÕ© hˆuÐÿý•ÿ ûÿ`(ì°ë*êêéèæãÞÙÒÊÁ¶ªœ‚}}~…Ž›«¿ÔâçÛÛ¨ s}Îÿý•ÿ ûÿ`(ì°ë*êêéèåãßÚÓ̹­žŽ‚|zxuspkhhly’³Ìä°pÐÿý•ÿ ûÿ`(ì°ë*êêéèæãßÚÕÎÅ»°¢’…~}}{zyywtomv‘Í­*Øÿý•ÿ ûÿ`(í°ìëëêéçåáÜÖÐÉ¿µ¨˜†„‚€€€€{pk¢• ¢ÿû•ÿ ûÿ`(í°ìëëêêçåâÝØÒËú¯£™“’‘‘Œ€‹ŠŠˆ‡†€kq!óÿþ”ÿ ûÿ`(î±íìëêèçäßÚÕÎÈÀ¸¯¨¢ Ÿž›€™˜——–”‘‰xŽDÿû”ÿ ûÿ`(î±í+ìëëéçåáÜØÒÌÆÀ¹´¯®«ª©¨§¦¦¥¥¤¢¡ž›—’Šˆ*üÿþ“ÿ ûÿ`(î±íììëêçæãßÚÖÐËÆÁ½¹·¶µ´³²±±¯­«©¦¢š¢Zµÿü“ÿ ûÿ`(î±íììëêèçåáÝÙÕÐÌÈÅ¿¿¾‚½¼¼»º¹·µ³°¬­Œiÿû“ÿ ûÿ`(ï²îíììêèçäáÝÙÖÒÏÍÊÉÈ€ÇÆ€ÇÆÅÅÄÂÀ¾¼¸»£ 0•ÿ ûÿ`(ï²îííììêèçäâÞÛÙÖÔÒЄÏÐÐÏÎÍÌÊÈÇÃȬæÿþ’ÿ ûÿ`(ï³îííììéèçåãàÝÜÚÙØ×ÖÖ„× ÖÖÔÓÑÏÍÔ²€Øÿý’ÿ ûÿ`(ð³ï îîííìêéèçåãàÝÜÝÜÝ‚Ü ÝÜÛÚÙØÖÞ¸€µÿü’ÿ ûÿ`(ð´ïîîííìëééèäèòòæáã‚âá€à ßÝÛ㾟ÿû’ÿ ûÿ`(ðµïîî€í ìêé÷ߦžÞí忀çæååääãâàèÄ ÿû’ÿ ûÿ`(ð¶ï€î ííìð”&Ùíè…é€è ççåîÇŸÿû’ÿ ûÿ`)ñ·ð€ï ìöÌ…þé„ìë êêçñÉŸÿû’ÿ ûÿ`)ñ—ð îììííîîïïìí”ð ïïîôVIùì„îƒí ëõÌŸÿû’ÿ ûÿ`)ò–ñð÷ÿüùöùÿýðï”ñíüË%†ð‚ï îìöÍŸÿû’ÿ ûÿ`)ò•ñïú¼V\WQI?5=]ª÷öî”ñðó($Œð îøÏŸÿû’ÿ ûÿ`)ò•ñíÿ}ƒ?Þùî“ñîýM%Œñ îøÏŸÿû’ÿ ûÿ`)ò•ñîý·&àöï’ñíÿc/ô‹ñ ïùПÿû’ÿ ûÿ`)ó•òñõæ„nJûð’òîÿx=ùñŠò ðúÑŸÿû’ÿ ûÿ`)ó—òõ+'þÿã5¶ÿï‘òîÿ}IýðŠò ðúÑŸÿû’ÿ ûÿ`)ô‹óòñò†óö/&ðíÿÒ [ÿð€óòñ…óòñ‚ó ïÿzTÿïñïñ‡ó ñûÑŸÿû’ÿ ûÿ`)ô‰óòïõûùñïƒóò÷2+õóîÿb!ïôóòïöúòò‚óïöûòò€ó ïÿx[ÿïýÿüñò…ó ñûÑŸÿû’ÿ ûÿ`)ôˆó ñõÿëÑÛøÿòòó4òø40÷òïÿ¬ÊüðõÿåÔøõòóóòôÿéÒõ÷òóóïÿu^ÿô¼œÈüöñ„ó ñûÑŸÿû’ÿ ûÿ`)ô‡ó ñøìp 2œûóò€ó5òø44øòò÷à¤ÿôìpTóôòòõô€?çöòóïÿr…Þ2Mèùñƒó ñûÑŸÿû’ÿ ûÿ`)õ†ô òøæ1cüó€ô6óù49úóóôö'ÿã.¨ÿðôõFÿðôðÿp`".éøó‚ô òüÒŸÿû’ÿ ûÿ`)õ‡ô9øCÿðôôóù4=üóóôõ(›ÿÝbÿðõó5Jÿòôðÿm‚Rýò‚ô òüÒŸÿû’ÿ ûÿ`)ö…õ3ñÿ¡ü›éøôõôú4Aþóôôû9žÿÿ¸\ÿñóþØ &€õñÿkZ“O«ÿòõ óýÓŸÿû’ÿ ûÿ`)ö„õIôøí bÿòÿ`›ÿòõôú4Dÿóôõ÷-¯ÿóò#\ÿñõñÿS$ôöôñÿivÿûÿ‚Eÿóõ óýÓŸÿû’ÿ ûÿ`)÷„öJóÿ¿ÿïÿÀUÿóöõû4Fÿôõöø' ÛüñÿV\ÿòöòÿ}%õ÷õòÿg“ÿíôþ8 Õýô€ö ôþÓŸÿû’ÿ ûÿ`)÷„ö4óÿOåúôûà*øöõõû4IÿôôýÕ6üõòÿe\ÿòöòÿ£%€öòÿfÿòòÿ¡¡ÿò€ö ôþÓŸÿû’ÿ ûÿ`)÷ƒö5õúåOÿñóòö0ïøõõû4JÿôïÿˆŒÿòòÿt\ÿòöóÿ·%€öòÿd”ÿòõùæhÿò€ö ôþÓŸÿû’ÿ ûÿ`)÷ƒö5óÿÃhÿûÿüÿYÖýôõû4Mÿñÿåæúõòÿ‹\ÿòöôÿÃ&€öòÿb—ÿòöõý9<ýõ€ö ôþÓŸÿû’ÿ ûÿ`)÷ƒöJòÿ{Ý´¡¤8Ïÿôõû4MÿùÔ7šÿóöòÿ“\ÿòöôÿÅ(÷ööòÿašÿòöòÿt+øö ôþÓŸÿû’ÿ ûÿ`*øƒ÷óÿj‚NÉÿôöü5 :1jÿõ÷÷óÿ—]ÿó÷õÿÄ)ø÷÷óÿ`šÿó÷óÿ›!óøö÷÷õÿÔŸÿû’ÿ ûÿ`*øƒ÷óÿ`… Öþõöü5„;wþöö÷÷óÿ—]ÿó÷õÿÃ+ù÷÷óÿ_šÿó÷óÿšéûö÷÷õÿÔŸÿû’ÿ ûÿ`*ùƒø!õÿS‚͸µ¯¨£ªßü÷ø÷ý5QÄÿö÷€ø5ôÿ—]ÿôøõÿÂ,úøøôÿ_›ÿôøôÿ¡çü÷øøöÿÕŸÿû’ÿ ûÿ`*ùƒøöÿF¦ÿûƒÿý÷øø÷ý5FÞÎëÿþõ÷ø5ôÿ—]ÿôøõÿ¿-úøøôÿ^›ÿôøõÿ®ðú÷øøöÿÕŸÿû’ÿ ûÿ`*ùƒøöÿA›ÿñ€õ€ôö€ø ÷ý5Qÿüûõõƒø5ôÿ—]ÿôøõÿ¼-ûøøôÿ^›ÿôøõÿ­&øø÷øøöÿÖŸÿû’ÿ ûÿ`*ùƒøõÿM†ÿô„ø ÷øø÷ý5Mÿóö…ø&ôÿ–]ÿôøõÿ¹-ûøøôÿ]›ÿôøôÿŸ1ü÷€ø öÿÖŸÿû’ÿ ûÿ`*úƒùõÿ^aÿõƒù øûùùøþ5Lÿö†ù&õÿ•]ÿõùöÿ·.üùùõÿ^œÿõùõÿOÿö€ù ÷ÿÖŸÿû’ÿ ûÿ`*úƒùõÿh;þøƒù ÷æúøøþ5Hÿ÷†ù&õÿ“^ÿõùöÿ³.üùùõÿ]ÿõùõÿÿõ€ù ÷ÿןÿû’ÿ ûÿ`*ûƒú öÿÎÿ÷€úöÿÍvÿ÷ùÿ5Cÿø†ú&öÿ’Xÿ÷ú÷ÿ²)ûúúöÿ^uÿöú÷ÿX¼ÿ÷€ú øÿןÿû’ÿ ûÿ`*ûƒúøÿÉYÿõ÷øõûÿ=iÿöùÿ5=ÿù†úöÿ1üøøòÿ£&€úöÿh`ÿöúúü*'öûù€ú øÿØŸÿû’ÿ ûÿ`*ûƒúùüð —ÿýþÿ÷e ÿöùÿ54ÿù†ú%öÿ—Úÿûÿã&íýùöÿŠ8ÿùøÿÒwÿöú øÿØŸÿû’ÿ ûÿ`*û„úöÿopÎÏ”( Õÿøùÿ5*û‡ú%÷ÿ´Zïã£Ýþö÷ÿ¢êûñÿ{ Ûÿøú øÿØŸÿû’ÿ ûÿ`*û„úøÿÖ  Tÿ÷úùÿ5&ˆú$ùÿá  u4•ÿúøÿÓ‘ÿÿÊ |ÿ÷‚ú øÿØŸÿû’ÿ ûÿ`*û…ú÷ÿ‡ Þÿøúùÿ8)‰ú#÷ÿ\3ÿ[zÔÿ÷ÿI sx;õûù‚ú øÿØŸÿû’ÿ ûÿ`*ü†ûùÿn€!Ñÿù€ûþ0%ûüú†û"ùÿÜ/âÿ¯‘ÿõÿÙ5èÿùƒû ùÿÙŸÿû’ÿ ûÿ`*ü‡û ùÿ¤(uìÿøûý}W`Zpõüú‡ûùÿÆ$ jîþøÿf$™€û ùÿèjöýù„û ùÿÙŸÿû’ÿ ûÿ`*ý‡ü ûúÿøÓ¾Íóÿüùƒü‚ÿ‹üúÿõÇÁèÿûú€üËÉ÷ÿü úüÿï˽Ïñÿûú…ü úÿÙŸÿû’ÿ ûÿ`*ý‰üùü€ÿýøû„üù€øùŒüùüÿÿþùûüüûúÿÿýø‚üûùþ€ÿýøû†ü úÿÙŸÿû’ÿ ûÿ`*ýŠüûúùúû›üûùùûƒüúùû…üûùùúûˆü úÿÚŸÿû’ÿ ûÿ`*ýÒü úÿÚŸÿû’ÿ ûÿ`*ýÒü úÿÚŸÿû’ÿ ûÿ`*ýÒü úÿÚŸÿû’ÿ ûÿ`*þÒý ûÿÚŸÿû’ÿ ûÿ`*þÒý ûÿÚŸÿû’ÿ ûÿ`*þÒý ûÿÚŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿ ûÿ`*ÿÒþ üÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿ ûÿ`*üÒû ùÿØŸÿû’ÿûÿ`+Óÿ ýÿÛŸÿû’ÿ ûÿ`eÒdcgV€Ÿÿû’ÿûÿ`ÞŸÿû’ÿûÿ`€ÕŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû’ÿûÿ`ÞŸÿû‡ÿt8mk@+¯®®¯¯¯¯¯¯¯¯°¯¯¯¯¯°°¯¯¯¯°°¯¯¯¯°°°¯¯¯¯°°¯¯¯°°°¯¯¯¯¯¯¯¯­¬‘U  Gÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿä†  NÿûüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüûûýþÿÕ1Vÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýúÿä<  \ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿè?  `ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿè@  bÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿç?  dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿç?   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿæ>   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿå=   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿã;   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿâ:   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿà9   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿß7   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿß7   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÞ6   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÝ6   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÝ5   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÜ5   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÜ5   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÜ5   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÜ5   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÜ5   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÜ5   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÛ5   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÛ4   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÛ4   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÜ3   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÖ+   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÇ    dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿ©   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿs   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿç2   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿŒ   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÏ   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿè0   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê6  dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê:  dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê=  dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê>  dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê?    dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@    dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!   dÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê@!  cÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê?   aÿüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüÿç=  _ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿé:E¥¬²µ·¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸·µ°®•/$,:DKNPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPNIB6)"  (28=@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAA?<70&   $()*******************************************************************************)'#    ic084ß jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ 3òÿ“ÏÁ$fÝ׺ y„_ùœú{oáØ”s{Ñ/›uAòÏÍ?ÈüÏ8jÒôDdJé>ZôE˜êÙòÉ­2P0^ÓÉ—£Ø¹Ž–#v¤S̼Уco®œAÉÃ=‹P¨yW ‘uR¿ï, ,¦tÌ_N¶½í¾”¢æs;AÏ3u¾·Ïοž΂øÔL³5NÖúN :á\î·Ûn¾¸U·¤Å"!bqh ¤=÷h„[ïrpÎ\hFúÒ•E^ÞfÛ!hQq6õ„ÊÉæ!ýâÝeLsÉ—w”&•­÷£?búL³7¨7È­öØ!v]kÄ{³Y»REEª1Óÿšï§?»:ÛÆû¬ä½*Õ÷N·YcFÒÕBn{®•Òîa/hÜ›*†^Á|ýÎB‹Âüy<€«Ï*áöœmë@ŒÁhÌÆÜhÛvÎjdZ3*Dõ#NÂgÏIÇìøPÍ0PD«‹lC¤ñâ+PXÞÕq4±e¥²{¢Ì“bÃx…¤ytò:Kî‚© +¤¼]à#]p£ÈÚ}íaX8JfQµ ¬Õæèá‡$ãøø[רµÛÁ~ÇuŒ¼D7&9QдÂ(Zl]ÝdØ;ÐìL§Ïqÿ9ÏK9'ùe¹ß¨¡Ý8ûQAóé§ «Ô™(éEìä/ÖH|³ÈF &ô؃i¡ÿ@b!˜Þ g@Vã(;ãYêÚÜ!ø?˜+­ZÁ{Œ$ ’ þó³?·s"™{IÖûQGºNv.¹VyòA H•<0¶&ŠÐÍv°•çòÙ~ÏÞ’‰± òmÀŸú ¸%Èôx6Ö²2jŒ 4Žj}OUÚºÉÍ…Æe©W§ÛüÓd*‡. ì÷Þm:Pe›gk×0BIm'yd-ü¿ÉFÄ GÑÇ´$~ÊàRÈF(:F »“àÙîцeßÅP£8yq ›¬¬HþI°¦±]²€bÖVFdÆå~*´ë29UÄâ?í=Ÿãy'zœßxd§\Àãèæ)àÌѤ2ÁÊÙµ]PßN³0 åb‡¤=:=®.€ao“²³Éº8_À¾†ýå¸Ï„}[ò Z^¤ã:4²þo7Ø(Ç<î\³ÚÙSÑŠ®Ô™^«—ÿr¼–éãyŽæo¤mÕXäšJ\’x╲û/{ÃK•fLâ7—Œdˆ*¸}p(‡l4ËÎSxÂþ„eC¿¸mæ*ùUû¶"÷ßcŽ>Ý‘)È*KYÚ×8ýÙ÷hu‘ŽÙàÎnk 3ñùÄÞÁfg…™õ >2»™ÒÙ†Ë1Þ¡¤TÆÉ;ÒØ‘Ø‚‚Zwí•l€€ÇáCÃíz‡àŽ%hÒ“‹=ºgX7CÖEðÓ¥3±Û²ýØ“"9‹æ'Õèj–t|fÌ&(H m‰+ªT{ '‡FTORø2]é„Aë6†"©®Ûðn,[0Dé²1øbw»x I- Žzê+›†6LYZÔ—™Òh£ƒ¢™±a’‹­ £e/»Â1ÆŽ˜å. Úë…5—.b¸MêgŽ+5Z¸b…kÞ¹ ú©°)iP ÂÌ”»¯ãhƒ¦ð@f»JUt·ÑÊ,ÿ?÷n› ó@úómÉ$’ITî ®GµŒ^ˆÈ*©‘¦Hœö{ÅJÛRñ»É{I·$’I%tw`´oèe×\,Ý¡ ‹®ù$ @¦ŒHõÀ'óf…dçÎåFÖátáD¨ðÛ˜0¯È4ß™ƒ9érÊý÷ Ãmæ„ÈŒ®ÌÄÕø·B½yhò¥æN6µ¡PÚº µ2& |V±ý2?E¶[=á£J8ëæîD¶]½qkÍK°XdÔTN n͸«” ¡e*I&`VZ[D@à¬pÐï°Lü‡÷¿t´èä-=?q0°36ûi †Ô†Ë…z¨‘,åΑK×ùŒ°×žåºaGᦨh-w”#µ5[o¶Æ=ÈWz{DÉÂݧælÕüÔÏl&ºÔÿ#wƬ§ÒÎd’ZáyK€ý( xЏJc_å°ƒª[Ž ìËÊÏóÒy+ûK-ú”¡Â‚pL0 ÊÖR'½n¦ãÔÔ•¸¨ áJ0A ²Ž~„ÖŸJ¥rEÒˆoP\ñš›$aò—”¼Gú¹€#àÚåàD6à“ü…mÉÍ­Å€gÛS®Î¶ÐÕîu¯Ìf¯½AñÔ M;0ªnöùÔƒ5“Ιn-$ßU4“",ÊAV óõul^¨œqMU˜ÄL*§×Üœ3}þž˜J3Œƒ¯ÝÞ÷TplØ1enÈ/¥(Ûò³çlÃ4ÜÒÔ;ä*'ŸCÙéÙôôXöàNPb0ø*@í©&ÿ/Ug€K4]DÒ©Õ0§Bå†!’wéŠãn/[á)3§db]ZJbÁÓdFdÃÏ’_¤ªõçÿ#ɦ*Jö ÔŸÒ­»¡}qâù’Š”äºã@é×,¿ŽtÆC×óíãúá&Ðy´"¼n¼‡SÌvK×4®#]RÌmø _ŒÖê(ªøä;Ïò±§(»PS€è Ë|†«"ªÆÇð5žhQÒØX!'zv-ÏbJΛùòã«Ã"Wm«÷vÌ]([‡¨ÂgZüà†ËŸJnC¬ÍÍXÒ ØïN$.Oœ|0™g‹Å­FÑyîÂFô:&a/¥ÛØC‰o~æÄ’ÆZXòõr\µá ±”ZZúv€J›z6¯ÜK,$\ 2±l-uqá(qŠb€øüuJ‰)Ëʉ”ŒÍÆuJQY*åìö[W’º– ÝFµÜv:—c·—ˆÎÈ|7#Ù^¿ é•áv5LfþéqK¦( †s/ªöBy]¦:ßKEž£¥È˜#ùJ-5¾L`V=Ñ´93©$®®¾ŸÈ@"_…¡S\™óD¼¥»myšµÓYÍ&¢ÌÞÔRñ"Y‡ž3][ºc¢ {ÞvήèÇÂ’Ï{º±ï¥ùº1+fQ•ç¨PPPLÆ90›‘Û·µr!ÄFjÝÂ)Ö=$ï0‘§Fåö!Å!;î?ÐÜ_ëØ÷”\U¬B†Df¾n²Û?F]uyÆ!=·ÕCÝìóÿHrE¹~/éÌTC|u'W^6q‚±Ê`ð#yÑ ÕTŒ #ØÆBÏ4ï8G΄íÀI`Þ& €ÿ}D¿Ü¹r‚™w²Ã,2˜•¾(—{I÷ÜûâTÞÖÄqUšOJÿ dR$‡ú¬?”¯ü©›?^IçÙÄ~J|Ë4J€C±]vƒF•ƒæ˜qæ¿´ž<úy[ér)$!u‡Ø^Ëò祄‚é¦ B÷îDo!z“ä&ßw=ôØïëÅÈŠ ú/˜KåM²qhš±„ÜškY©…ÃxTÈë ó2M´Í‘‡C®-SØ2-¸Ò}Z6[#åç ÷0öh';$†â Jxµ–ÊIÖ\¥Ó&Qå*ß¼ž¿*«w|)ùéêâõ]G=½ÖS`ödŽ%ð7£H¥‚¦>Ù2vSå4½ð~zÆt_µäÀ,0v«ÉvoäÈo=b‚önÄ‹9úœ;X´ ÙŸç‘~}åÃ=¸®©e‰ÚjŸô6÷gž¾½ ý5¼”‘Ü[ºØõ ÷9ö9A‡©AA¥=§ÆÖ††0otšwô=#­šå+ßèéªN ¢Cýc€"l øa—À†ˆ)<žDûè2RÇœy‰Êƾó^SÍTž†>Ò"Êui³ÉrÀ+µáЕw åwy@Ô RBäsá<¿6ßâé0¿õZFõð^ŸîÏ—À‡÷æÔiÊ·º‡ ³2bÖ7Ôa‹jýh~Í g±"†fp„ôª~çyegïŽ9’7ÌÜ£àLâ7*Q3· 0Qq1n³ÆQÿ Ȼ扇9 ¾ÙŒŒDÿdðÏ2¾øÞAŒ!^s õ”A}Žõ–ÌÈ:m :ä!FµÎ±…†DkyEmÈËà½ÍZRH5Ž}š?• šý’5ò·óS$†|âWðŠ hÛ¶G!ë+—Ø;M§‰÷“-Ü¡S ºÑøëU§Ry¬&X~9"ýn‡ùsqëЬÚ#ƒæ¬Š†*bEò§žN@c4ôgõ‹4Íú5P‰Ùé]D‰á‹sÍPNÛ Õ\Tú`p@ Ô¼ ]›üÎå_ wò1¥1&À3a–ÒHÝã©®IãSÌ­S¶hسù9°A ÏWàE»?¢Ç(iÛMä³öЄQ/i=Û!ºÅOvÉ0#³ý\üÑ' ×f…ì¯C÷™ g×,º=”a>íŸî9@Rršà€ÂY·÷¹¹ìU6Î.†Ã™|°¼;ÌÐð—ÍäÅøüE÷97 =Vçg—£SÅ .וØVñFU}´"çíjãWMt÷½sm&‹è7I…·;EµüG]?Tš¬oc¤2ÍM¿ÏDÝ.«X°C(ÓF_oº¿âAÅÉ51W5Éàܳ ‡‹»{ësUÜáoÔm^¢Ãûöaõ^4è-;¸²rìxZjˆ P‹îèÌáËÁŽÕÌ×ÀR§VÊ^}sTÐP´ýD®·þ-Ò‡â³{µ¨QUw»-¾²¨bPäêȇ‹¡q (‚†ÍS£0¶"ÂY!DÄ.‡t¦, ¯‚Õ¿ççü} »)o”ùïo+y5üo‚ßùÔzhÙpsñ2 í&¿£ÜúÇûqª–ã8þû0Àðôì#Â6ú…QúRÿ~»_íÍEî³*º’ A~ÿa}¨>(¿ßt7S›†ÇD{~Ob`ŽX•VÍ3U²º+N|ÅE²•îßíÈ2ÌöDíN8šÃ:›1)m •îJñÉó´ÝïÆ¨¿ Xƒ=Éžlp}L7Y$éKïxâ[.YþÛ8m–üb›T¸8û5€€ÃíÒü-Øü( >àø˜Ç3F˜ßÿ~•¾KrÏa`? Û¯›æù¾o›l˜;jå"¹†p7÷J?Aœ¶Ò '`B8™ŽS·h&y›n´L9irôÄËv%(ªvº [¯›æù¾o›ß¶ÎY‰å=W}ehÊ|ÒVÐG~ Z%8ý¿5¦Ø0C—ôE”Ï÷¼ %´aö"ŸmV ‚ÝHAWéd?—ÿÆÜæ©N EÝK´XúÖq_k¸—rEå}?OÓôý?yTV[w_.4úÎÉõ~—ë‘fÙÃ?8Ÿ>÷ÜlE!§$Y–,Øý<Ïà¤)ÚõÜcɲù¦‹‡Þ#BªŸ‹šË‹šË‹šË‹šË‹šË‹šË‹™Èä–~Ûpˆt\šù®P»’ŠàL¢ i)<ûnÛÝ–—{Eï.}HaîKru2ìÅ…GƧTW´li~q°',{ø$䩲T(|¥•g‚>Ö¥3X¯¢^ÿ,á~J€6¢®v ¶Mø½ùߤ¶-Ú9€”ÔºŸ$ft’ m'K6¹Ý–Q/4ÝÎ ©²&[ÿuw0EàO6jª¿ô Ÿœ#'šq8b ¦LÀŸO¼':k¼Ú!çG!Ð÷/³=úSÒB"Yj¬{âtZš[”[¤8Öfÿ8;&Ûm¶Ûm¶Ûm¶Í²­!”A}ŽõžM“¿ð#*tÒ ð-–"´t·F¨‹d¨<Êy—Ù 5ôIrj­ð[åñas$Á´”£e¨+NYGÝïl8ñoCIù„š$è-}«†nÖ¯‰‚‹ƒªïGF5Òðm?µ•.§&D“ì°á"êG>­Y=²Ÿ>Nÿ svCíÓøÏ\ ៞¯S®ñ¬kÀÈ…£S<Å(ñÂÁr"ùe¹Ø%NšÃ‹µÚ]ÁŸ OÓ­Ä8r…ê0`ðâ÷÷#<3Sî¦ï47½ì!`¨Zéò Uä`I„Í€Äq$…Û¥Ògñ!©göû™JɱÀ»#»´a­ÿJ>™¼È‡{L?Ìü/Ñ{›?NÛWŽ„™hÓ .;ÝlçœHš7u*óg¦a¹±àd ~|†)Ê6¹Z±-¿âʹeük@áøDåí„aÜqÛèÏòÔ®9c)­ò€ bÏþÀB]-T£yK<ÞœzœÜùî—P}‚#ÌÎw€Æ^–Z:9´á†ü]Z$ŸR ŠÍ(BGÕ¥ÅE¢Û®®(ù<óFCLà -‰µd+qo§³Ï*Å¢j„XÚÅÀ4^¹œŠ2Ó»˜ó¥\R6}k,•œ±ÅPá{Æi‹œ×Ⴊ w°x†~»Ôm«©}›àTÍ¥Iü†Â±‰=š8Ò}¬õêgõÐQ«/k¦ï‰ôe]­-öبþÚ¹ž5VB£k¬ vã¢Âò:Š1»t}Õž*½wÙ¯UŸ¸®ÍkÛÔ ˜Ö)dzèôSñɱA}¹XvLì½…ð_*Ì+;~Åö'¡MÇJLÇî¿Ò²¤ä ºÅ[»N Sÿƒawؽ!/i¨Ò$åÓé 5¢r°³Mñ(A[ɵDC™Í5z–FMŒ"©5nÉÌQy†èà2ý»î¼£y»£.¾ò˜æ?mL1²ÎÎÏQùé­Ï§`3P“! Am¿Ü6~Óù<~eºMû³:ˆM[/U°qæ%p ó·ú)'NHNœÖ‚à9š[5Ã)¹m(mù=úú[­‹îzi†‚k†õyåiã‰S}tõœèôSi¬o+?ÿp¼Œ1<ãd4¾ô=û¿«Ôg¹¶<ó‹FÀíË÷ÿ5-¢g|µs¼{øãÎF1}@ ¤@M˜&3W”/åä`¸e|†8¯G83Ö`F_(£fF”Fiƒ 6ÁJONüÀÉß~%º\ßlKîÓO›¼€zïeÕîTÜ—£KºÑ_Öj­±ðmÁ PÖš'êÇu<ú.éTE*ag)>]"¬~÷DÕëN/…xüØP¨ÉjèxšV-åIE€h#œÆÎ†åéÆªé-òˆSö Á~Såø½Pcô—ü-¨zT+o/¿w;Š÷ȇc©>Tlu?Y$ö|gyY:$hb‹ë«fì/Âü/Âü/Î7åÖï´p“¢JUGT%zÿdáŠi­²©~¼ÇÕ°cAå±ð¯¹Yú8†›ÿÿ|¼É¾çË$ìEÕÊï.öx¦íf\ŸÁa£ŽÇ™ š¬LŸÊàwŒ\L¿¢ÊqxŒë¨L-, ¿ ð¿ ð¿ 𙵿Üù:´˜#HÛfÇD LõýæÖŸ‰ ¯ž¤­ü/¯ÎJåA«#¬ó3Ããv6 ñTé$¡â X”œbqÎ6·0Nbw®SêìÂζ¯5”ôsŽÅT¢k+(Ö`qn¸Cõ|A4‚µrCÞþcðãÒK6(?´H ãŒêyÜj’0Râ62¿År3–JdWèâïÿÀÛ<º«+€1=ˆXGÒ€;‚ëÝWå´AˆàHy2¿À£¬Î@¼LõŽï ³ú_{‹´l–#ª&ˆ<áÁ)p‰êôÙI$’I$’I$’I$‘¯‘ð铉>äÄüç ¼5¬¥à‰ ý¸”XÕŠ´ÎóªØõæÅ;Db[$°¼ 6ä’I$’I$’I$’IQ4þ ±ÙñØCé Ø,¿™e¤ßç—¯rœr“áNµßƒkšt2§kJ‰§žë` 1¶ýF,TבHî§R í–6qºÊºO½N ‰–Ñpˆ21d¦¯‘uù`bs‚•iªÓo ²©ÚÁ×D|f³|ÓÒ‹&‚ïîÁ@¬Ô#,rVÓ°ÓRŒ\~^ÂK(NèH äü¥Œ£.Ê(ç£k94ÎO² }xfÊÏåÔÁ"̃~ Î cæîc^Ò^4bk%ƒ¬Óß;3Ð _X7ІZÖÂ8aY Þ¨êð +‘tËAåú ÚÄÿq#Þ Æ4U&!érmëlÚŠÜBgsIˆ€hölãªv8cMãô¨`¬–Á~7—5ôVÑó€F ÷¤¥¥—¼cmuu†¸ß6}^Ê Þ‰=ú¶gúgøè-Æ;;"Œ6‰ŒZÆz3K)Ÿu¦eŸí±´^1ôÛ«Á&9±òÃNôÛ3uBÓªÓç™> ]æ.ª¬áªÊG_Vº>)¹ª?h¶ýô7?­,®À|ÿ6؈ž¦c¡ÌQ¯1»s ¥±/üYáñ=_ÔéÈF<ðàî—r7ÚDº92ÊYb­ßߘ ¤‘8‰” ª¼ø>XUCcî™XÅÑH³w‰Þ§Pd ^®¢¯·O¼Ûê&1>4¬ü“âóFà Åà~ùÓ)ç%SÒØþ·Ô"qˆ$v^±VVˆñŠêã­NvI¨…»ˆbÁcˆ’ü¢’ži±J AU5ü¦RÔe¥žhƒ¯ºòÉ{îwxµJ;áo‚Ú 4ÿˆ†Í !’¯®ƒÜ[%LÒ4ªÁÕ>gös}Òæ«¡ÐªsJâN» >k)Áýò£Nàò—8’öu®XÍ´D›€,HoVʸ¡n™¦Q0$¡ÁLšÅuWÈ·• ‹þU Ó*ù×½éJDã)ÂeäX_îõ±S’Õõ0Ú‡’Ó y|xȦy?!' |d(.q›RcÑÍö<×+ª$î"~zW–“~ºÂU1hfÞ5 ÷Ok"Gͱ_¶šEr…8U¹Zíxg@´¯x³9‹”Zèf/)\mŸ³ß.|ƒ¤$«baÓíêfuƒÜ‡Ñ-!•ãä–.GálhüøPë8èàÃHh¥z¤ÓfËzt °Š…÷cwž¼Í&ˆÝÄôŸÆR´Ò°U#¿†ñQ!²Ý'ÖôJýøø›ËN=ƨ‡(Öùê,‰}q{mªK8ßóˆSØÙäfÍ4©–H± äž“²+™ÿRó@&¹ ›URŒ%fmçéúôC&ÄLìOÝ4v¦D@=©éŠÐ´{5xz³YÉÚ}s K³àvöFé#G:<àЋËÐOá–´­V~UüT“•Úyïí5ÐVî2ûŽhùд çz¢<ì×.8gÿuê©/+íB?ÿ}ûm–í`Ièü1‰o,áJ¹ÌÌü.È6ùDê”WZO„_F‘rVFúþ/ÁGî>”³L—Ú|Bq* §k6MêÍ`ü²ƒ~kG45þ6â"ùjï€Ó=~Œ÷FFß¡AÛѢâ &ü Ý¿»ésòÀÕ‰mØS“ÊîfËþñˆrHK ‘}óŽú&"ê©ËÀÄ;àÏÕÖ– (žtáõÔW¿þï!ÚfFí5_á"þ.ðcÃ÷ÓBH,Št1 =¢ €'7ÎúÇUuŒz\$'E»tÏÈr¸{6¥FRÊHLjC¨8ê8±ˆZ–qr"­…åÏÜõN0-)#󠤾OU˃™ÝÅzþ Œ$j2¡ýãu öå¶CŸXààK}R ˜XQ¹¤SÕè랆’–-£º"ƒ'ÐüFw¼ìÃöÄóûèåÇ£I0%Œš^ä¼ zbL;Üö@jolQZ© …õìºu%㈹¥3/ Xß÷a”ê>(àÇ~“} °^Všeƒ0ØD©¸Î #Žr ç~Æ;vo²Ck(‡èì A…7Lò²Z XkÃä¨ÚæC÷D§Õ×ï{Ô,˜’Ý*·ˆ,ö¶TŒŸÁ­ °.î§ô"–_*ðÐÑéOþ÷èä’£¿m·~(Ïl±Š€Vq”|rÊÜÈHü0PÔ'Y®ZÌP·úv'±k’B»ó`)¸œáHýÞm=(€™ =(Õ¸eÁšBÔz\¿ÿg¼Gî¨ÏF3 ¬3Ú²ëGkažêÚs¿H".ðº,­bA•:²Ã$¼i‹4AÛkÒÝÐz´—Š1W,eý¥ö¿îOo‚:f9ô0sÉÑ¿-†/Ý\J“ljëÝ`ùU ÝîÈ1ö•‰m)Lq›P0ZXÿ\ï%Ñ [yÔœ‘-Ý«ýÐ>`ô‹>ÅÏ“áÈœä·Ì õëž9+œ'ÛN^È)L­CÂ߈ÑÀ z ^|>àúÈ ¼=7|Èã$+ã¹Ü_É#Ç+Õ7Í™”¯ßd°Ÿ&ë&ýg~KÇŒ`X t§J“®œ#»^‹ú{Wøov$Ù’¾‹ÅLâ߃Îu,Nß-ùªæóylÈÉ4ó5éá7søFY@´cC´X¼àhdÃÅš!Ä:¼9ʽ™ø¯ á£MDv¯ªÐ8#±@Y (ä'?¶”=˔ڇõØ,Ç·ÔÊ Wu˜\“¨qðs•¹vht3\€uÖHÒDð6Ž€æšSUCã÷ò®Û¢º{Ðì5Ü«,.5Qä›#HèÝëñ¢ˆèÝÇIÐOIŽ:^7锉­Ø_»w½¤>wþ\EBÛUPŠ?Ñ’¹ÃêKqszþck©ÞÈ ‘]¾ÎW:ŽpŒª¤ûò³;bìÞ\†FΨyÍ…[%»v ìYä¶ÃoÉ7Ü^wé ØRlLÁÓa%sÌhBht/¥£4}Öf´QÕÏ !U @ZAt!³ÞúŽý¥üà“P yìùŸÀ “âØ‡|椫vGŸ…*vËó ìsN º,YG€¦‘óº9aÅc]ÜÛg ‹¢Lî" —ÆEÕb\[Î*î™Ë̉ìWyûËpxÍrq¤^¿¦ ÇÌ}.Þã'ˆ\œå8$iŠ.ûËäÊ+3‘õUL-cKÒ!oqŠÉùóÎ4à’¼­¡{öTž³µÔô m´ðtÄûÖú\’ÊF„ã\j¶‘5Sä_àë4XÓׇßѱ)ÿwJl~'ï±…»»;¡Pж©.1ŒxE;(O¹ -ÀÞx9¶~·—ÃO^MºJ>69áë'ø² Øó•{á•;¤aµ$k‘5 ü­ÌWœ^C)'ý“õ5M6½áփ̊ª@äÝ»ªby%iö™ó\‘©½´+Tp&à(À}9Ø ˜,.žèÝÔŸ¤]×OÂ3"sïâ—x4Ð\HBì¶+«döû—àŒX:½.¯Q &T2,\itÉ"&BßHc ÒÈÕFy¹\ÌŸõ¡å»# ÏU<: öGÓRG«‹”Ið#~Vùؤ‚VZ¦_S ôëÉzÚ!+ÂÎ5½ü³ØLÁ”ç£@Õ2dy7¥k¸,üÌ>>ÑI6C5£~Ž-RèÁ£U­ì ÖþU§[EÄ–èÄ…Ü/Ï€LeÓmÝåé…ªN3Ã|ZXO{õˆàñÒÍ]ªQ³é–m=vè+¼›£Ö4|ã¸$áÏg¼SlÚ¥.Ht  ¾F~ÌŽîÚ³•~‘Iæ!¶Ôley+#°G† x•`3©ý(uöK†ÅÜÛÛ‘$d)q•ô…U7ûk“5?ËLèŠÀÔ8ÿú›Ñ¬>Ä’³¿%­åŠr>GB›-¯•r‚¤Øç AZølc…øê­:'PŒêSŽ`˜PUjs¦ %¤ú-t`Œ½ÙÄ© R‹ÊzƒIèô*““õÎY‰¨J±z°µÕ×Vf\~L¹Â=ì¦HžÃýÁóò7È=NÏ"‡¬>3‘}d !"“šQŽ0ž$¸£©fÒr{‚+°3q­× §âÑîDKž6É–,j´p»5†kWÚ'^€€ãö¬~ÛOö§Ož…Ú™ûk»êO¾¥'ÎöÕ“ç?…ðv;ýý_ÿ%`AÉ3 °˜HŒ¨8̯ùû16‡ÿ„t3$ yÛ ¾X<49)¤—*=<¯§éú~Ÿ§éú~Ÿ§é­ êf¤ zÃßñä)m›Sq,a/ññ ä*°bҘϩýA¤@Ðÿ ƒÂ™l~–õÔòà<›ý&®=L¢Ä¼Ôl޼‡ýáé {Ð|DmLË›')Ÿ¬\bA€rê3åòé †·)l»©+ñe´ìäiæ:‘i!ŸAê.‰½h!•Ó Ý8N~ŠvV_-%¸T¬9Ÿu(d’¢½Ëº|)ù¨AÉk¾Èú;_šTY¯ÄÁ踼:Qп•N\X!iu}ÞäHÿ~5 z”ëåð‘}\´[jûçlx“³n÷>Å%s^íùû—õµÜ[Ê_Z¢Ê£)Ü`0€}5óm-A<ÎÎ,þ ÚͺÂO™º)#¿ñüÇñü~è:Ÿ°†NDw½Ô㙓[‰™ ±Oùº / Þꯔ*HE^Ç>+ˆè‹ªÇïžþ8*ö}CO8§UugdΗ€K„ a[³ˆ»mŒF¢&ùº‡Qwc¿þ³Â,]Œü(Ö”›Q‹º# •wËHý²’Á̯µ¸£„vu#ˆó8~Îí¤˜ýN…öÆèâîoQôA]ñ)†„ xLQk7œ_úe©ûKAkq°Z_ØH©œ€hÂyš«¿azmÄvÐfŠ‚ b\knéÖüálÁÎ&W‰1‰±.t»§s€­Ù¡ûCö97G°…³Æ‹¹ ïï×Ro§P1{#Ló4áþq_Ž~õ Áow“)±æ#^’¢ì® ¥ÄåÔ•û¯`àKOú RÆ¡ý|éRçcÐ&ê (ÙP ùpªíœ¤¬„)Óà\6 ¤ש y¾ïÙ÷C@ª6+.cÿGéܯÂA¥˜â0P•íá¡02|* “Vnª¨S‘ÈþäDT4°ÛNñF.~ˆY³t® bž*hˆÕÚ¼dþÿ‰öè©ñ·&»pp0p ¤²@ $ ãAF h?tß´Ù ÞRã´n•¿¸(÷(µÞ|÷+ü°ÙUšPF•ùÝýìa7í—ü«-qb†,rWõ®TC_º.Ó0%›tI$h=—ÿq›Œ&ãw¬Wuµ;ÇÞÎñBßŒÞ TØöNaé z¿A>áG·z—dô ¥`†¦%a0ÃÖβ*pY¨ø§$VYL‘ûµ(Ju9™Ý.%[êßD,uîGýé&ÏÞ ¯ä^ÔÄ¢LSŸlãôšI$ÿ6¬@‘Å%¡î%ö!f- Ñ”¹ø4Ô*†ƒøuN¥RÏïáø9c;S½±õ™Š‚óq>b [@&þ6¿ò‰b¸!ðÿÙic09iø jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ i ÿ“ÏÂ÷§4µõDøúÔõÊ©®׿õ¶Fkn 5Û=¨¢U*í‚ÇEt»ÇfAwKRU14î´‚öjUvi ܦ# ŽÆ®3Žr± ¥»±‰ œì5mà´Ú g Yâù[¡šcvÓôŒPWrÀJ¿¸Ô’œ]g¿îãBñý*"vÝ=›:B&u}"&BAº€RªCoQ&U&–Ä/q]CUdj/ ÑGîþÌ—ü‹JâL÷ƒþ\}Œ©³3’ù¥Ïv)à’{˜L†$×9àU‹ÜM~êþÕQ™™Ÿëv˜Á4 ’;ÞpùŸ¹¹hÅ z r7ú'"eAø(€€Ïº^›1A (ñ³’÷6–è`˜½ˆ„KdëÔªfhá)ÂdN$¡ýºb€RŒ E­^öü8ˆFef³ˆ¥æÈ*UøùŸÕ½p9ßÊLÒY¥¶ˆ9Ïx)I†q ´åDXf€~c~@Ö¡"ÅIýÇtK IÓÏ6Æ‹E¹ÔIZNs/[sìº!Š; »45¨ øÀà£ë±Ødœ´"îuìû18(G(ÓY}Õd é¨$VõÏÎÀŸ΂øÔL³5NÖúN/.þŠ!ÜP2Û²ÀÔEƒ?ÞiGy1ïÎ7¨«¬2ëí!PÜå&>®.=E¼“ÑZh¤Iˆ*ŸóUÙr àØ0‘þ¨Âí½e“‹{}Ó¡âY`^%ønUÛvKµ¸a›·-ÃÇx ¤r'kÚ£&-Y~°¬}hÓ­  ¥­ ÒÜ{?{ô®¾áœ.a=ýê±@(ìûàýCo›aµ|1 ÛHÕÛÒû}~ïöA eö¬gÌdéûÚwa볓‡Ï•s·Qó_•ý£ ÉXê3ÕkÅžfÔó pmi5÷müåÚîk‰êéÖkõ°A$ŽAE­­FNñ¶l!¤¡µ—¶Òâ@éÖИµØDÈØ²[‰‹Õ‘¹¤:gGuü]yÍ8 mSÇèöè!T·XˆêÇ'®Uˆ=€ n‘(^ÍuÔjÈØ·¦Õn{YÁÕV‡ø)Ÿi"¼GQè}jb@ ž$Ý cØbo;¾µÈ—0 kÃ-*®Àâ©ÇgÓ>Â×§ÓÇ‘5%  Ã-tïÕÌo:[îôw|š+`ãç"Ù`Qíûý^™B® Ëû:‹—½Y$3ãÚ²Ëü¿v† !½€á¦>Ö‚Áìß $/Õ¦¥±’}Y°A”d€6¼Îܾ©¡-j'åûÉÚäªoÿ#¼0X tŒRª†„S`Çá»sóÖ¨üõ!×^<ÆÚß hfúa_˜îÕ7Ö<¡Z|ɇ®ö·›I lØÏœÿ]%£u*E4ö­M¸à/ØŽ)=w–ZdÇt³åLj6úr·ó)vë£cû¡–j ô›ºhe–\•’ž…âÃFRù²0³@dâî0égTˆ•|„àûŽ‘èÆª†‘"«äµø¯wF,ð­GWî¢x¬a §‘^ùWX“”äè³áL>’ø?$;H—?l,R#*¶§“oN1,ÂdwíW-1lóSýS,\kXŸ¥2b*1/|ƒÕ )œuk€ÖÛuʤ¶¼Û †ot3OÌ0à¬BveÐÚ`‡)K[$#üéz6œ¼ï‹cqáõö¡WH¾Nº;ÃóqhpWþúgg% ­A íÈ€,·! 7ÈBÒgÉËVR‚Èè­=C«çeõ|8þ‘ÐÂöó÷÷Î9D²Œ}Dý Ê)ÄykÇ1½jýPʪ椮: Ôidï`têÄy@²EXÒçüÚ/h›æ÷«ÿH^âóÉ‚t¼c3xÎRËFD—6R´‹£PXÎÕÄlšÈàšp}OÐÆwÇ=[ïŸL•ÑN&+„]sÏK9&tÉ­sþïÜ2†‡1תos@†T¹ü¤‚Áý‘tÏæTÌŸ«êG‡E;«,‘ÜYÍ»; ©+Î$×®¼ðF•âFôîaÈx(úšw·o€?Š&9l¿‡ŠpeJt|L^Ÿ¥³>á„_-%4B?wsdF¤ÉÈ2 ÙvëÔäµ—\!מo¢3÷»çïãah(65ˆ~þß›Îx¼NOšÐŒß Z”4µ±dHNÐ÷ŠñK8 ´ƒ#Ïr?zF'alÃ}~(Â^(Tdûb¹‘ÂC9MPvövÁø#CÏ,6ëqò³gÑ=wûXmU7ÀE6_‘èçâþZÃ~Hõ²0e„Hit Tê‚^€wœK«X½Tår\µÚ‹Gh|òQ\uesŽÚçïþðLøméÙââõ̸ƺe=Õg 5깫°CŤÚWƒ@©¥Ñ†eßÅP£8ypÅî[(ƒŽúVϰ€[~ŠkÜH4œHWwÛÔÉÙ .æ>&ÍËIß#¼ð…¬±Úå ¬Ulr™*Õ9 ëÞ=SÊÙ¥C¿ÿ9çÉ0ˆ°z|+¥pCaJÏ¿µàép9ƒËK³*>›O9C˯eŸ_¼îñãÁ‹B”ɪìîÆÚ©ù O6ZúË!⣑7ìÄ‹•BJ0&rxcïݹX†òÍêIÐôw´€ì \JlXׄϾýq¤Ð>Ü®Æ D÷÷³~d0Ygx œé«‹‘í2{ºÝF2€ó#\ãú­™Aý¥Ë*BU"©Ø_0ÓÛrÐËaÐ8»×œÕAôÎu"DÍ^Xá„/((®­L'Žr­@'*àkŒèÕIX˜Mß`Z¥wÜ “©±$_Ïø€€Çà÷ƒì? %hÒ“˜Ë*ˆ4¬ÑIªÃl g—Væ1c€©ÄXeü!Ï2>4B£$ÔŒþæwrh§Q¡ Wä6ÑÍž ’a˜Sd ¿V:é«ó¶ƒþ$³ ¶bïÜê ­ý¼ç¡@ߪ.˜Šâ-@Óë¶.)Þ•@½ñƒü¸¥Us² Å#> R)¦-@T€°=¶ YFÿGƒ®+Pà0aCÏ$[£©5N’þñ_Ä­¹â™uRõÚ=«HçI-|?Q–ßrCæRI$’I$m÷5dÊ™ñæAž€j$c[…Éd· »”B"¾m®¿¤‰ŒŒk6w`´oèe×\,©Y 9Vú7§§;C˜óAÅ|‘`:X"]‰<´*;>FH×§g£ŽvqÊ+çë×ßX.ÒvèÇáé[‡l1ùõè3~Ù•¦‰¢^@cÏðÊK»Ót6t–6]:¹çwjf® “ ó½©3î=(]ó»u¶W¾Ê-`)f$Ó±‡yÎÿ}km æ"…EÈô3VºŸk?ü¯øò ø’âè÷DW§¾e¾c5¿M¶b$ÂM³·z1„½¹# ˆ®ý{jaÞD¤´Zœ‘W_¾öTÎ[Ä qÛ¬8ÿˆìïX÷,O¥ö+H¡í7}€ðÞbÿF Ôžxm‚cDýIû­”YÃÿ3¬hˆ4Nü-«|âwy›ÛÄ/¹Š“@Ý{¯ä“þm€Ü­d;ÃÒºË0þ~q#•™˜I´x—ùËÞÑáÐÇ g±Üø0 ørÌÖâ9=ª´v~6+„”ºÝTˆðs)ºpw ÅÈL«ƒóÓ (º ^Y:ç*´³b[0·ñ¹5B× f\ÆDµÉ˜J›úœ,DRçbM'šÝU6ïÉm\œ³EÄÕnaÔŠ—+y&Ð÷ÔŠ4©ÕhaÜ‹°§I!z—VÒêÚ][FÁ=‘Ɔ* †…"©Áñ1o!3X{6<½fŒåÃCNÁ™¿b^wéÇ?Qü‚ @í"ˆ\–èˆúã7bû°^á‘J¿ r7Ž Rˆ—e™ÖXÝÉCí¸2Öb®ée ýêu©°=T*<«:…'–4ä,ôÊz1µ)JrpeGç[C… ²õ.v Ùã'΃¯ZQ… C®âkpƒUççþtöÝÙÉì͘ŒÐc*êEHKü:xÀ-¾nŒ©Ø$&2²Ž˜·Ç@ô_?Ú¨›Pj5˵Aæ*(©\Rò4©[ÅÊgF&xb˜\E„ëb±¬§Ö\µJ-¨ 7¥¥^†ù‚72˜ýˆ¸Ûh2ÜÝ8ÙT;g™  h&ò– NnU¶4õГ>G̱¦@•°¶¶Úò•_#ãlá"ª"r `t‚­MS’{€RðWÙÊ‘ÀøÃ±Ù‰¾âçö| îq‘Õ !4ò‘{Q弈WÉœKÏPàüËɧØ,UïßäÉÓªÿhmº×“{ÔRÁ Ô=…Zû¹Ó/üÑdòD­îrdèÖb' Â`w7ôøÞHÚLûm‡ú5.QGù¹÷5aבlc³OòÑp?H)̘oO7€ E{ä.ØžlçòK»2Ëû3=G4“Y|§>­~'òÌuÈoæÊ¥Üœ|²ÈEÚ1÷w-ˆ‘s¼ Ù¹:Žr²\gkóQ¯€Í‹ &Bñ*¼§¤s¦œ…¤Ñlùg)¾5ük??êÒŒRam¹‘û\V¾rì›!Ê/ë‡IâJ'{Ìs­ À:øÀ¤6u íe.ˆãp©IªüàcÝ×ÐîAm—œWNI:ºd×ÉçK~¤1òfñdÇËzœ7Ù_;.–ÔÒ{ÅîJ¡ýqÑÃåÀÿy†!ЉVhWÈ"Ó+˜ÖÔSÌÊvDH%ïBí¼x{"¼%¯$¹û)Ûõ¶9z{ ÄóÌ´QRSYå*©cZ³÷V¾:sq—ôö9«> 0Yà{Ø=˜¾@}£è\˜#ù8täxñù‡®ßr·$sÐ'Çt®2K)¾ûzý²ÙÊ é4I7ÓP “Y6†¼‡Ã§Å6ª®YàÀR „,ŽbïN›þåäíGëR<âß¾@౯ÔåT`ÉÃk±Ý‰!:»Ÿm•ßÖT=ߨˆÖGaõ‘X/;Os@ˆ²Ã)8†Ö±PI¾F3!¯Qò¤³]$ë²bñß µ¼=Tè!þ'(å¯4á£i¢<…f¬háÙ§ùÁYŸF)6.W wwlý¡rŠâwÏ‹¡eÿÿN¹%ó.>ƒ®:Ï…‰ç§UV¤aE.²ån®ýø‘•CÓ5p}îÖ‰A`'ÏZ\‚W$S‰î è˵¦l×òAÚýJÔÜ6û°˜„õ[&±³•Kw ™3|ü`éxrwdÛrB{,g¬´²åϰ]W;µL&Í].ª·Ná-EëÇV£›5ؤ¿Õ½NÅ–  ’ÇÑÎ #Ë;æ½VÓq+h5ÙRŸ³±ëLfmò÷óØÐò4aÁ"<ê‚áN×Ú³^%p$íkÿj ;å¬$AuÏÕ7f@œgð$«Íffü)@ãþ˜$R+¢ªS~Šu«A¨x|óÒg&:›ïþ½ãà†äü%eŠkÂa„íµ ÀšÊ€¦œõæ_$œ=V»x))VÃþ‹Ø•@Tæ–[\K6m“rÏ~ kW¶à %‰­WvÁ–‘ÑauÝè“ê•èt8€“•QŠÎ"K3h·ä©m_°gc}Eï×?õˆòEyãH,Xé ¥‚'6Çwm.l¥_ãôÿ\>Ó…WÓ¨Ô£›ËŠCí"¦o¿/\ÈP·`vf¾*”GTb¥úá>i‰£à`áÑHèvª Þõ€Šº1 /§‚d&Xÿj*Ÿ½c=T(cå5¶ës÷ØÙE(¶ÓðoúR‚w½+Í嘡áÿk3[àLªJ;=²ÚTßJð¡íxƒ£ßU”£µ£»¢¹Å{[Ä m±'ì@âeÞOZ½‘Ì »o%ë­×(ó¤ ¶ÕòEI¯ XoÏ5Tï>KÂh*Ù°Õ½«ƒÆ¹oL¯˜¹Ç¦ý¿¥¿ŸÄ#kÄPP¹3Œ©ñ‰õVHσ*b•u‡9® Zàô…sl–¦©Öãn)W²gý¦£q# hXVR¶`¯=·¿®à6>´xᜊi‚e-±æÜ%o5/ÿo£üµ¥ý•ÇÛÝ·8kh  óU ^uÎNèú V¡\%ëµ±¿ÿe@o7Ðo±8láäEP–ÜŒ˜‹÷œ­Yöw¹Ë¿ZBOEIo¡éþD3éHΚZ[üü<çÆ½Zý„Ö¹\\ÜØ¯Ñ™@ÒÌý‹÷¬;Ú˜\%û“$#ÇsÒøw¥˜_ê„ކˆí¾œ±³ÅfÑLìKJÍäzSNܳµ‚ƒÞ&B+ç Ú EæÞý½¥§™êAä\p,7ɘ>ë Ö=©õEBtôx±ŸB&Èo£x0ßÍi:ðgÃ$sõQ€^†ZÇ–üÀÚ¥ÖWÙ“T¨[¢˜"ÿ\_‘ïµV& TE)}ŠÕÈEø‚¬ß‰J±i\t3bÌ7H¿L‹/ucìR»´F ¨KÓgÉ¢lw·¸tmkNà—¤{+ù0†MÚ;…Åõ9nùVÐÏ!Z¥3³¨f•´o$ÕW2_9ÂIÊŽgPåb…úÆ‚Ër`¦ÐÖéøSG!3°W“¥1m&½Qk|kÖƒ Ïfàè¢yá%SäÝõ»É'°b;Q›òËËï¾³y±. €7×e¤¥¾y)Èø.ü½—±,ÐÉ_¯._–iý}áe¥®a?® 뀀ÃíÒ(ü.h~ >àø˜Ç3F˜ßÿ~•“«?)’`BÖëæù¾o›æù¾m°:lQ¤RÊo7h[©á•?[ÐÝÖM‰êZY±íèÚçõ…­×Íó|ß7Íó¸šôØOÌ•“3!ßëÅ«â'ò¼=rñËcŠíæù¾o›æù¾o])d‘ë#X§/Îv0Ê|1KŽÚ:48¯š>"ÀªzÆÀ®:Ê‘£ªdÔ´öò*7ȈÀf|yטZxýM“—@[€< PÍà娘®cî°Ðµ{±uùAë§¹9}Õ!=Â}…¦RuÄ\ ó#=mRÄÍ Àõ[Ê{³î¹ “ð†œ/|> E9ŸODÝÙ`Ž»,×e‚:ì°G]–ë²Áv@%­ ‰ <âÓ}ŠÓÃY0.Åzº( æ‹¡ö)6ûüªÛ¦”LBž–ñh¸ûËí`¿ð+±ê¤à¤aB}C‰¸ßÑ÷h‹Öv0F½Ÿ„Ç‹'õƒ %‹2uk­d“¼$Ý1᳆J€TÍÖÜ¿ùŸy+´o©„‚‹K_“ Ž›æÜMdP€®Òñÿ•ô÷€ùì2Ñ8cK$nã«w»ÿjĈ½œ‘Sni àM5Zô2ɯƒng%@þ#ó´ÞÖè¬MTê ƒ@b¿y©›ýÁÙ6Ûm¶Ûm¶Û+§Ç¼;9y -”A}Žõž…6s慨۲L»mW¹6ÎÝKŠr³X’a ळö6¡ýä¸YõEó´È:kíTES€ò0p°Ì”-‡¾ˆ†’ê £áõsiÀt±¢ÚHV¬e/eÞ¦„…~ZŽ Hj`±Ó}}E¿ÙQŽì 迳Çãøoðï¿øl¯ðè«Ã`ÿC¶Oá¦_ÃYqü4³øv#ü./ᥠWHã¤ÿΤÈÉÀÞØFŸÖh_P™Øö¹|`™Dýêß ‚ƒjDÆ— Ê} ÿÿ~§&Ï#¾fèu þ+8ãEç•¥D [š«>cÈš>°/®¼ž6”)kUç窺BÎûw²ÚÜvÖÈ…¡µÜ}:gvžšË s} ¢»øw¶jÐç&µºù¾o›æù¾qùÙÍ@ ¡(ûuëK¾01A¸ÔýUxö…Rqÿ|+mõUÖ¸×ge^Ê(äÛÇŸ`Tq}Áåñg‘aÀP®hEïL@h8ýþŸ©è?›ü9œáW)C(>p+lã§lÁÑ=}Wš]]iÏ í[Ñ7È3Ó0ЕE;išgãêcoÿOXe@›~ÈWÔ*>…”F鋞ÔúÆú4ïÛ´ºk¥¤ÒëÈ&ÎmœToÚÑ‚ _vÚ`Ô¦çã¨6T»Aè–%cXÊtͦoÁ¸°1:!jéqû5ÇvUÚÐb,FmÀ:^ïiQ%™ï¹¨²ã ¾t҄嘅s¤»’·ÁL·'HôeÚÚJË>׫᧙Ù@ZÚ9’*Þ}ÈSv LjŸÞ[#oxeE~‘ªö I”#N$óFúíŸRx÷,¢‹z“þðæ,¡r’°ÃücA¯ 7yÆÂÝÞ¶%w f‚б”÷Z b)¹ul$í‹´Ã6ÍØf‹Ò/tÄág´¾Z¦¡öÀX–© 6ÕCäÁ:?DÁ§>±¼æÚd<®È~X= àü ÜsØmÛž¹r«=…rú¦[73LÉœŸ\”+2(çÙ;-Pl2Ú)*Éå¼m3ë”i\MO3÷j ‹=ÁuèÞ(‡\ÕzŸ¿ô£|ÝF$¢ì$Îv€[ój'¥›“‰;Á¨H&ý>…m;±ù ŒèH{ñ(èhKGVÕÍ,E_¿œêëͲÇàlÈ`·S­Uê訿ø È¿ßÂB“¡b6BÓ€ _0À±Æ<¹åvêØFï–K_«=-(pÝøË³R§S#ßÞo^YrÝ7ì*ËAC„{AtgÞñh+“ÎJÈX&ƒ³w>€Eø¯èÓïn¨ÖÜ8¨^è: =‚°"ÞÿkóY©W(7}ÕrpŸùý®’Ö˜.°¢±àåz؎ľÁž6\îC¼~]9×¢êÕ¶7˜•tÚÚ}«deJb~)ê`´bÿx |¤™ÕècãJ5íüœ'úM2B©^ÒûOJ$““³Ràl6> èx‹ËÕ½6ü]«üX½t”¤I 8m!Èž–6hy†L‘A‰‡¥z?ä2®¦–ãæúKƒéfoÌÙf;”õæ9à1¦æüp¸ç—â/ú«¸ËËÃ,Š÷¬û½‘ù>+¸u#.ýcG¾ ½ùxB¦G%_¨Ÿ hCðŧWÔܧóé•`°Â3¦ ²ó.<ĺÿPdPTïžZ^;3Ž@Òëv"°Ž!]…TgMÌGÚNrÉÿ è<ö4žƒ³"è`±d𠻀ðšZ³ÕÜ®ˆ0ƒ°)‚rÒè{bmúë;iâz¸çL’ãø‰è SDP¤7RþA§‡ šÕØ^AõÈ#R”a¢¿VtwŒtóÞ¯‰4œé80:oCzzçA8×BäK%6¼YË60íêE†Ý™^–WmÆ”„h Ïø Q¸8Nq°>pp’Ÿ£M6¼" `Õi$YGlMùQESA®MRë²Ùßa)TÁüm-‚ }B°„fòé’œ·û9Â{)[èüPµ:Ím2«Â\éé|«=m’ùœ6£öa=)q|E³"m…Ã.ˆh<ÏWèJX\œSd o¦…#›—-LQCûÿ>çñ<篽Xßimi+þ@Œ‚Ü$µÿáì¨}«Ñ³E ØÙër!ò%+ ‰PB³&>Ó /Ro'l⦹ˆ†1éÀ ÿrܵ(“‡pð[Dވ̊€ Ž†Ø ƒüjÙ±·Åšrþ›2†µí©Ó ½ ”vLZ ´kŒß Ωž&œ¾ÑØ…Z‘žô|x'Œ $–”Ô~’)q·­O‚ÿz6àcr‚FG`ž|!+Þ¾ÜCšffÇ+M»÷VÆó.›?àÆŧ0 0o=í? ¥tkÉNé/þ¸ BÙÙt(–…êÓ¬O^!áZ¨dRHÿ7ôNk@Ï ž6Øe¡Øš…J˜ì– ²;í¾ö“˜¶"A£Ûãl è# L¡ë<ÿwü‚ðjüW”UTÏðd·'í’˜ÄäÓ³‡A^aç)IŸ&}Ù5=ÌŒŸa~•µm›€­Ž€¿ôÔbŒmCD;ëdéÆ×W ÖúÚ][K«iumäåk‹Ý{ 0Æ,¹åšÛ8Òùq‡ÆâÃæ¡5<ò¬ä…¹šÉ™åÓ>Ç9ô£‰Û¶xXw?Ëh"`ŸÜßYTÙãæ-%¦p"ãcõ·•PŠ2Ôø°›.'‚‘ÍŽ•AC’Ï’VTAþænçùÊâ½íY8åb?¡k‹_ê߇e³Fu&)Q<‹Ÿÿy’\0޼”±·CVÙ9¨ôК.H.¦€>ÿ2/¯ÙÈ×WíÏ<§$+7NJð¤Oœlm›üZƒ’×Dßÿ5Ão!§È9)›“G !QÆÆŠV<ùTÇ¥•ÿ9ÇÿPÖše€"˜®xa#²WìAf×W:%Ï …ºâÀ~·z$4œ«•E1<é6FOÊKì7­" pG¶y 9Ï< ý—­þr¾jÑö%?þ2L©™óíÝù«¿Rl§eïWÊŸ”ødæ2Ï:"xñÊ€¤òùƒi¤¤y铨4Q $ü¿×¬Ù(C`ÌÝÀdw'v›\ Ð=²×ÕÐŽyxýKöŠئœãA®dñø- Á²ùÒöÎnÇqët%uTt¤ Z5RWë¬Sd‹W\›ê¨LF\uäIV©“z·ÒÉ(F¹ЖTóA¶&ÌÌSJÁî(F&‘ÅuÁc* ,'Ò»s•yö‚ª $⋎êñ¶ëæù¼ñ“$.F)y%ë^sÚ)ˆiŒé ƒV<ÐUœRK·ÐgYØõzÝž–ÔDmºmn÷ªÊj\ë]°sF#1äF <ÑL¼4P$mn¥uPŸÜÏeÄ äaE€¬Q¶ëæù¼ñ“$.F)yC»ô©_dWèâïÿÀÛ2;¸er½±÷– ÿ{Ïå”ò äIzç&0®W‚ýIólà\ FÄØŽÀÈbßÏ)YbJ¬g¯íb{›ýAA^<'#í¢ªà|¼ÇÚpŠÜyÇÇ´l„¬[LÐi–FÁÜÙûJÿè’ÛAM9Œ†‰ÖQ–ëú'”Å¥[ØÕÌרa(èîɱXýÖqéè‰hœßíßž•p’êi®t…IwíÀá¤2Úª%f4}ãˆõšËžÓ)z?=G¼oz0Ä(“lÚL#ÚšDz;™§u´çÜo¢m.X;È:Ë[ß¼ìR%ÊeÁñ®¼×9IVêû׌«ƨú?z„´Á,ZuâQ2#4!rgtœÑƒwWá¢ggeM±jH_pœ˜{8‹ó;ëõ1“ÒŒKŠò ~6˜Âò=ô3"G)º>æ Š›tçá4&Mc˜:• ÖÏ6Ÿ“êFò\ ý|yü~Vÿ=2ãÃ3êÿjã#¶fÀ÷ª˜8Û°c‚jQÁQQŒ¿m"éô¬=7ȵ[ .xáóÁq:†í©£O¦& –iZO—ûü&«s­wBغÿ=a”NoiSyˆ‹vþôì÷ ©àB~ ܿݛĤ””ÔH¿ù* +ØL×xÙof›ú[*Þm7 çaem$¯™ ¥'ÊŠ­K#mɦ¾¶G…dYÆã„éI.«ŽL†È73-w¦Œ¢^ÞÛ…ÁãPr_ÎaÎÌïe?°O. aÃElhà=:ø0Ð))IÁ¶Œ%~…S/cSŠE?©”!ýý¤{H™ žª›R8p™6•/üÌ5×hŠ·XÊ@¿Ñïßü˜p,jER3ú%\;ÈK\3fw£÷èìHLÏM\ŸÍ²>ß \’&JÍ©®ŽxðäShŸ¼.'<#(¹'×:po± ¬Ãžâ<ª ±±5 e†?Î[$ec˜p§×d±f%-¨;U·å!eλ æŸHß4uû=3ÌËcÉ5æðs~u8ü5#,\†cè)­mÀf”ËÉæc:2e¸Ã¢¹²Øýv}8FÌÝRÉZréºe™\Ôý  ÿYˆà±=9žØª wç…eUos_Ýõ¸í£÷p@?à¾õ”ÿ@öËBæÓ‰¾Kâtò®úÎsæ‘™³&¾è¯bÁL–ueNÃÏÅëó^õûœ'_š.~5²›ÓÿjT“CóåÕ‰BX9ù™)Ë™ƒn=CÖÀ|¯þ/éb’’~štÖqv3lZ~—õÚ›±Œb*C4Ð8(]ìå “uª¶TÒƒB=,PÌv ã$¨ÄäÅäfôFÒ~¶c6‘)fú؇ٺ:œ)¥o÷7¢á±iˆOÃ~Lé<:%m Ôí´ ~æÞMhû5‚ˆñÕûΗ©Ôä‹9MïD†äRC+ÜŠMIÿ¯äS7l‚²à22Û±0©æ]MÉy¸*6:’§¤ñÆMd¶ 7Ô?ÔògPªRÔ<Ùxx‰í7a¥¤5¢ËE_¶'ŸÍž ÊH›Ü#íeKBHTŸÿ$O`[hçƒl`üK#áÖ9˜EGÐ{TÄá½£Ld{. sÄçi¡R‚U^DêÇ1: \UwÕ+u¥Êâ5‘štÜ´oO´Ä}yñAÉDáÂ? X¿e ¹5´/a+I®1):1Î3ëòä—î¶=©ôØx_óã  ghÃk¶X%bLtŽÚµáó '(<,„ìªxgþvï›ÉÕ›£•±þ#sy}Û‡¥a¨ª€)(ÔiPª¨™V_á>rxdî-zÿ!\׊ÚF=.¼ª·«ö<¢ãW¾0|'›@Ÿ¦nB‘Ê rô¶D[u8=}†ÕÃÁ„„»²X~GXKêZ0úlJ«˜bcsÂrçlS¹›ä²á‰TÓÌ$Vô}|_ Š(ø;-¨û£¯Ì˜ žcâÁÁóOÞ;øbn>Œ$"ð1Áνu˾b`бa ^Èö ÷û ¨Ý-üS ñ?þñi&J„ G—ªñ¶».yQNñ3mõꀌÍ÷|®±¦@˜£·å_šÎ_Ô<Á¸vGPÿ,¨§ð|øÀö¿îOo‚:f9ø™vƒ¢¦y”Ô;wåZ‚uîGÏ;âžvV¨01¦ÐWc”Ϋ¢U/ÿL=.¢å_ ´ØÜ2qù»§_ôêD reu.ËÃWÅiÀ}¦¯HÒõ±*½ùMyvôþFéWØë%hëü õ¹/-ÑŒU›Éȶ¶æÇ§Ul¸:ö飃ÏÍ“]‰W³5E Ay=x]».ŠBþsó&¹î”2TY ùéœÁ VN4:Ñ¿¬ )ñ®•ºE¦s7&3P‘R„©­ÈWk‰Ìµ „V¿Þ‚ s‰B¼žÇÎ88ØbЇÿc’N¦;wÊ …p×M±d{T¿™·—Í*ƒË-;A’uOÿ1¿3Ë+ëTYc >)M;JU’êþ!p©G‘¾,6¿WuCkF|îJ‚Šì¨á>< úN¨å±iîVpH¾¥K1GCüØÓlf5 ›!1Õ J¦Ñ¨Ù;-¦Æÿ'ç%Âñš”ßÛDw×! Å? „Dz(Ô}‹Ì´à‡rw(Š’à?Ø™!õ¦µdDª’cQ’“±;ÛÉP¼Z¥AHˆÈ†t¢9Åê0Šs´Ã!ùoŒÜ h” ½qñØck…ïáÖFÚhíOG ˬ°ÒP¿(pÄ©.¯Ñ_6W†à%¦4Ã(|SÊ^9ŽdùÛk(Bºðõ9{¯IK+õP>\žˆK’G­·D¦žÊÖä ­€·¹qï…·ÿ)w_*sð0T…¨ñô1ÙNj\\ ý£H#›R\᩾)*wjdbæ([òKiügfR÷…=ˆWñÂvÁ'uMt -³i8׺5éK˱H÷Ѝõk{­²´UÙy£|í¹8êf©Œ[˜ø_E:zY¢1äqJÛhÖ^4±ÏŒã³ÇH#\]žÎÎb%Kîí0Šž´Ò‘µ,æ×¾¡èÉ qRg²ƒaà›%Q€=ÅÅ:5Îé;UUG]èu_žˆØ^Q”]zÉ&”úL3~ºle´ÌZ‘5ç½£lÍ8} `£´A ñW4¤|9„•ž‰yÛjnŠýõXó©æ H_€£ö!¨<† 0°Xö¡Ë¿¨º5˜‘«æ)z>‘4P³Äþ°´N2¸Ý0‰“µÉ^=ŒäqX÷9K³}Ÿ¬?rõ‡{à ™9ÏÞ"Cj¶†˜L‘o3†÷ ’C•,)þ)£WetTÏÄÞÍr‘1¯Mã\ÿPò•²‘N0‘ðÕæ¡äÀ‚ªáÏD>û EŒÈ)W¯­’ÙSE´[·Þ¼÷þ64ˆ} Ùü"1¤Éè ÁügäÆIS£m@ÿ/,¼ “K®ïSUûƒ€N,^†Fâ (‡Õ(0Éä×ÏBþ@áˆ3O{µC…UZhì¶—x4Ð\¥ÌÜϯÖî…ΰÐ{U¹›;ëç£ø Ijónû6LØì}Bð .ŒÞÊ錎Qzó& æÌŠh«Lˆí„ñÌïF¾>¹ŠR_#þ—¹÷ª)å¬×.©Æ¯fÆÁ×üASJÅ,¤õ.ˆò‡]Àþ˜Êàé9ć28†>Qf¶µ—ùÍ÷/l»lö§ìnÖm êqϵ³p68µ–Af¯Ã’û&éz·%¥ü{´x(j¬€ê]–L G¾‘ã«ÝœNÚ M)ÿ õ‡ÞÝ`éAýÓJÖbsêPÅ¥m2Ž9ÏiOÜV2h³€îÿ<ÉCþFe¤Èeú¯-B“5'Ú|1•ú4+\´V,À'D:`”Ju #\@º\ø¦I]#A­LƒZn™*Z×#SVt€uqÒÿ%Îg —:ß9YàñNt$æ³/p첄„Ÿ×N Lü@$½¨ø›BmB ºÈy3Ô¢&7SSp@Ð7#éññâ ˆ¿ 3ÈNF/ÿ`³Å t–*{[£+#±X®;%ÚUÌO®½L^ô÷ßžS´Š„1Z# N¢"y©(Ž˜CÏyLÁM¹ÈÕ)GPŸ»Ù™y”>Ih<¸Ãâ«\š`Qî;sÐÅŸ˜ZI§ëƒ œrDA—ü™uŸþH4Ýø]^¸Û´ÁK!Trð‚Ëkô,Þž/×°$¨;\v>Z윧~Y*¡Ü@6­ÐÆ÷<¬|¥©â°Oˆ ˆì/Є4ÝrKâhˆ·Z¸šG|ƒûEœ6G‰´½µV´ç9Kt*µ·ü¯wRÂ@¡ˆä&Þ)¼âP $! ÜÏFìÖ´nS<ÛõšOZM÷qä²®¡?µƒœ êv$ B00 SX#3v£y™ ±Oùº+»‰¼*ὊN€".« áZ%dXý—Ù}±T•àNqì¸Ê^>&upÊ 2÷_7Íó|ß7Íó|ß7žÆœÏÞ¼äµ Ò_²ú´ýC„/UþÚwx‘ÃYëÿnx*þá/ Èõ+ñwI²fäñ3œ¨.‚È$$‰ipžuÿ*›˜Á­i½nrw •Õ ÔcÛ‡ÓÈ à7'DL«šÏ3ò24D\åŽ!:õñ±%ô µ@Å9‹_ñë^à*À×í¿w7ž4‘Øw‹N\“Þ»rG5ôLâ”ovŽ‹[Àˆö÷¯ËŠ›Z#t291[dBÎ"¤üŒ•a©€ ìßヾõš@7¿êþ;£ð©\·‡j¾X].l$㣒 M7Ì?ÐYå0I¤ïn~ÒH•ˆŠV+Il0jœ‘5Ç€dù3h*3PÖæ51…±\‰‡û\Z®æwÚjá‹÷CUl?÷»Kˆºµ|1Ñ*rcà=Ž>‰?&n€ÂABU“þ˜¦ÝSæÐGÌ^møX‰ dx ¤¯)Ce A³£Qqý7ûìEªÉ@÷°Ô`Ê'\>…Gÿi¿µ øGvÞÊ Çm˜“•0=Õ-+ñ èÏ¡“°9ÄNÊÁ ¡»$窾ýt‡-ØnÇ­á8µ×É5 öNí×rW‘”üôëKL´h 1d\ÿ TmË3¾Jz<úãWu–‹¢¤ã“Gôº‘ÛŒ- Dí–DçÙe6¬ˆaúê·ž$%Tj`ð\¢§"†¤çú< ¦Ó®œ\…¦gCÂÀñW¼‹¹q{‡þzýl·Ö çÑÚÃ*c¼ n ݃ïF)9ƒ{Î`Êz'DÈæ¢Ïfïç?ZÎo¤<^&mõ¶k-C <›pÌ쮀@îÜ©¾iÛmP~.ñ¬ý¶V»fë·©ïxš@ÿ)öR”³ å+cŒ19^ô6X§±“²·U< 7µf÷>Æ›0Yéûûë÷þ1‡zUÑrÓ"­¸ö§÷MÔUÿúB¨J=!÷°+רx!‘ «ä¸ð’ÂE¶T­ôÑ€‘R]…Ôóü((s¾Þ»†ŠÿpØ¿áÓðÖÏøSÃYá»—ÛmÓø%uüïµSþ}›>'Ôw}»>Þ…'Û¤z}Iÿa©»øl$úœ¯´ŠûJ/´£øñþ|5ðë;øiµö“ÿ£ Úþßi÷ðЯøjWðXŸP1> ˆõ€šû•w6sC?í¦z½¬ý <² ”×½4êlK2‰Ç¨X[…ª¨ð^ìíë¢\µ——›û7¤Xm)¬ùâØbòófù/dKÀÿg#¯//Uê·síb}Á85¾o›æÕkþà? åªø¶7ï|ï7Íój³Ÿ{­æZ„ÜŽWqh2Ö¶sþYñ9»µˆa<ó3hÈ×%Ýà„r³›éø\аT$?Ñ?"Œ6WŸX–ú3·dê½»É95OjÌåS›´à^fWíM_µJë³É¬>É·¢‰¤ò„ͧøÆÖÙjEn6¿Zê.8iJ|GÌ|:() ,ªô‡a7¡ôzI¯VþþŒãÝùÜãdcídSv\vßS&f£°s²Ÿˆ| A*Sï»Jĉbn݈€\´rÔl}x°,¶$™×6Úé3À×ÕäPe«î«½ËL¸ø\ôӸ׽¾G‘'³™‡´K\µ¯T§U£;ÆÀû¢Ü5‘ýLLØõÁn½ }¢SiìXçu !ÌžCÞ8iç ŽÓ]9\;ù“Î}\›ž¸”5Ähjh‡Ò}ÞºI]îß±¥÷ù5Ê4­èÛmétÊ›*€qþ¸oW¨ÆŽÑ^jú-E xì»@©ÒéØz³!©Ëm¿yÉB¨,LeÏÉOMÔˆŠÊ¾¾4{ ‘Q©öÄe‘æ„C)0*‡4ÊtpÇl }²õ$Õ¶äÑÝþ»®ƒCSVÆ‹Þ %ÄÅÇP•{ÅqAƒ¹uî°SÍŽx‹ã‚ÙE+ö<Îס àÑùŒâ 1E\À3T¶náyù©ç½¦ÒñºótHx3—Ž4‹Ëh»éŒW³FnìŽ÷Pùƒ&¡ra]´… P’HAwä \Ôiu› tù†ò‰×ý«ÎÙÄÈÑ QÏA)ŠÊå@ŒkŸ)¬§O èÕ‰#ÁÒT… ³ƒ G,e¿ŽÔ Iš]…9Ž'š9+÷$Æ9,ê/ZJ¤×ä4âÙß/ÉÝ0…tzÿ/édŒYÁtyIéÔá­eºàd°Á …>šEë:ôÐÆn ×þ—`^†Esq÷T÷øÿj¶÷U[¬0':¿¥¬ÓÀé²Ä/íÀ®•ÖÄJ‹îG‚È̤»UTÛ² ØJȨaøP¥Â"ðÂ͉ødJGDÊ=ŽèøtZ'ŸÉÎ6<¸°|íZ7¶'’ò®Õ)úÍ<äâºõ—û*‰¥Rõû}ŽØ×H×rdõlÄYݸ‹Æƒc:ö7˜lh4èÙc‰¶ÿHW[ ðXN\¿Ì]Ø@|O0jÀCÍàŽôóø¼þ/vèU~› ìH¨@Lª’Èȱ.¨ðPÚo!÷­l1nèëŠ+0tD²€¼6!'êÑcšlÿo&Pi.® Е¬©çÇŠª›XÂpZÖÀˆ3‰oŽà@G<éåx«l4¼$É—5Ã!K»Pç±øéB ¸>³߃Gsí “fd¹ïÖÖ0‡Ü· ›.á8Øæù²@Èê£Ùm^îKw`»”3f_4Ü„þ1Ïÿ)Å|Ò1®cž:£Ù¸á!wE<A8gà«cF¸"ã—)NO`¯ÐݤWÈT8 ªZÝ|ß7Íó|ß95)ܰÈ#QùæÕ¶²°E²¡óut¯ÉùÛ‰ªŽüV“Ë9ø†å‹@oS÷v‘ó ݉ 38qÚþ¬­v9˜¦¦b/$0[¬%Æ¡~÷}ÙY‰G)r˜9\‰ 8ý ø1ý¦ Ù\5éŒÁ{ØŠÊT‚öúþúxh¹„Û3¼X^œÐ¬f'ŒÌÈ#ƒr\w£‚YàbüWúG_ÝPË©N›ù’rlŶ2ˆ¥êé>‘&NŽÔï¶*îFX=›Ü,ÁÆ»+Ù5ô‰(ô¯2ѱi™˜ÅHçÍm_uvÇ‘‘“㣠Bh@œHPS˜šÕvî÷@¯œäëÀ’ç{¯ñbÔU5G]k2ÁÝo„˼iÏ‹„Ú¡žâûżGüØÃÒü»J󵞒è=bžVZù»S¡$4ú˜•Eݽüú5øh0ÊgJÉÚÔH‹¡Ó]2ŠÔË¡û7"¶ÚÇ@ý2i†ìÜ•L®Ÿæ=œO†Ñx2>µa«âèšT¥[¡±ú0·®TÁã.q.%±¹ ôŸ¬Œó¸¶‘Bc×#â–÷!$è‰l8’ŠÝøˆR…+ôÒCi@9õÊÇzÁ*¤]‘ ËI¡Å óX‡we М<0j`ÊÊ«ø-¼õ¤˜âR!™˜mçÿ9¹KŠT•™É³ªl¶‘6]˜zyaä)û癞g?O³µ©“}v·Õ.äÄãó-Äþ‡: ÜñïaaÝí¿¤è,>žëT¸^'NÄ®`cƒºr¿‹ñ;û)aâ Õ£]i±¶¢²õ7 Èv¶ls~ZÃvQŽPrC~Þ5åuˆmUt¶³Ç×äJ)ñ4s­öÍ+'WA'!˶;°¼ü¡LzF©€Ï ýä}“!ÁâXMJç‘5\'Ô"D’ÿWcÛoòjÝ›ÿ„ånëß×’++ª‡¸~¬€PÒ„-õ¥3ÿ!gg´hç £ðÉQ¶–˜×íÀ›«ÆÇÊ  y!ÆÖ„B^œøÅùÙø¢Ö_ñ-:±Ä©÷éï$¯Þ¢OƒDk¿yƒîîsµ ÆYèî!¨žð©ô»6¢C$L|)²<® Äïä `)|ã Ö§ËN¬îš¸&s·'ë)·Ðñàû–`ñü<'³¨E©Üq½Ý…=Ý$‰r¬3¿ñ}`€V”!¾€ —ôÈðT‚‚ŸVUž½|Mývòcòñç'Èp´ &ã×t× ±±T Rg £è\ÕT1e»oò¬U?¾OMAì,HoÚ4ÎÛÍ™ÎÑï•èŽ=Ƴ}Ž*¿ý’íÁ§óMzØh¤¦½@ësà€yøj|¹Û‰m{¦¬µ8lSO»ß;™’ß=?ž¢÷éú°N¢ùa ŠùÔ‰p}ã2=3@iž›wŒNOýJá:XBüø„RÜGÚ¿þa@øP% ‘Œùa–^6ïS/Cl²êó‡`J}tƒs…å@Ò$dKu/]Ê·AÏÆ"L•üç2ô=ê0{k/‰pÝ|ß7Íó|áu>@LT¼Ô¥ÖÍ;¤]Ä,Ç‹O ‰ ]_=SE“º>AM¤tÁ•ÙNÍç-ÐæÓU®™€›ü›¾ÏщÏäêˆ zÏŒæsv)>¢M B¿å6o™=G»~ÏQƒ%K0/a~Šê˜æw‚.qÂ-• --~\Š¡,¬ð¨ tµ‡2†Œ ¢ä¶\Ûx2ãÓÇïÛEÙ?Gݰ²o¬³…µ5{ s)\‰ëóÆ+ch›ûŸ +hLgF@qÎÖ»Ž:›­ûÐ)gÀÁ7K$P¡ åaúKúHØãŃ'‹í; .Þ­$S£¥ªïÜ@RëeFo °ÀIEè_}pHÛе¢ƒ'rTâvJ€„þ1Îø•ÅSxÆDò0*^UÔt]Œw¹;¦š¿ÿ7` È„5F÷æ i?sIVc\†Ú±¶:–A´Œöz¦aÀ˽—¯E¸ø˜àØl6 †¾1xPkû’fKRZî–êðÅ­×Íó|ßË^ÿSEȶ©f|ú…ö‡%½L‘5«*¹Î·R7EFÛcùËAc"2a^` Z3Ç—ûP.Öí?sç¿‘Øû1¦í>OmÅgV? œåíT•Þ2Îd)ÄgíWŽ[ ¯Yû{ŸN`X™uÌNæ³~É£Z ËÃ|Sׂ•#<â¨#Øuà,ØÇçÜœâ8’'3æ4®|µ']ÖñcW=YƒÇZ³q*Ó+lWœz g¦@0]—[.-ƒSyÇdynS%' øbÌÑóþùJ‡¡z$ªÚféoÇ0=uû”? ËOÅfWñß6½ ‚L§À–"–F=„oH,—“}÷þO†ÝdÿuêÌF C˜z/8µ.T8ª¸yáþã<ôDÊQåZRÓ†±–C5…ò³„ì‘‹¿'ã|¨%âèÊÿk Žv ïšÃÃa°Øl6Èè&G²bž`òÖÁ±ºZù€'`[xŸû·\'|œê¸Ee]ñ:¦pµD $±ø{²_AõÕª­˜°ã#9«fì,5v¦] :@—”]5ò6k»ÀvÇjíË{ÂòS… ‘ž/ùçŒføa„þ1Ïÿ)Å|¼>' Ã?ÂÿwÖ@bzÁ·_7Íó|ß7ÍôÿBøVÝ|ß7Íó|ß7Ï£+V°W 0yˆð­ºù¾o›æù¾|bõ •GrÈNÿr?™‚¨÷-¥¢ÒFð­ºù¾o›æù¾o—Tᙓ°U¬N</0œ˜õPøÌ ð¿ ð¿ ð¹½1VŽÂ‹> ó6²à‹¾ÝùJ¾N|ó–å¨,@§:!ðŠ`†‚Èã ‹·Hθueó|¸†mFD›Ð  <•ÛÓ¹gDˆ'ü{Ǽøù[Aæž2‰üÀMqUºÙ9ŽÜÁæëu{Þ(ãyû$ˆfÿÿf´sf÷~ƒKÝus›Q ‘ÇD]><)öè@ß;?1íu-´6ZÔŒ~¤Y kAy˜ñeoD¼ºDýanpù}Df+âþk€×˜Âzg¤½ÖÅ ,¹_êmåsè1‹¹@3Zþ½(>õ“=ÚÝ߀a‚RôÉçÆ\ ‹‘3,V5“bYV¡yÛ §¼q~Éx-ZK†Ây³‚òúüQf@Ç ²™wÀ¦u‘gÉÆ.Ù^ÈS ùü\¶ Mއâb!'™^ïEÙÂê!Þ':ÒFÞ ~.¾×$—­š\Am]çÆ½á ·`U[ Æ“qt­ýâ“éÖ‰:^˜B_ðÞ®:5(8Þ™ô|‡Ÿ*Ú‘ (HR|KþE^o0Ž»7dã;V#…rs¸àˆ;b§JÚ ðeû•Ì¡–Œ((>pkžhWðã~5`Ÿ€¥ûP•%2:ÕiÐDZòÃR6ð´²YÓ0EÝö˜r¬ª~°WNÇ/§H,›ÁDGÀP¸µ…sšï´°\™wœ¹µ:{$ ³¥œÌt—gHÑŠ¡5¼˜pú2zöÍCÅóÏftêé‡;žLªƒ½]¤žŸ$5~}qaÊ_ œÌÜ®ôÄÖUf½#ÕÉáŽ×x(¬E'Î4 3Ýþ=œç”õsÐó}—Í·mÇó&£/mëTó‚Bl ¥}’ïä3Ï#‘…§ LñZ¼´pðŒ£ °É@E«»„ÙÃËŠËš~˜‘¤4¢4•T%ÍrE›yË¡q™5ñ¼Lb-4L·ºÀ/}²à†3 ))µÖøäÿmãCyRµò纶ÆMî#ˆÕƒm?ÈŠ90NÃ5¯RuÌ' Ê@rT’ EÞ&®Ø¸ë¿½5°²& ;é;±J&w0·‹^…-7dî' A¯_ OK:tê¼&®Š’ŒH¯2}|ž²!9>/׺d£š¬_‡ÚómCΆ–¶€Ž§'D÷U¿c:³'XIjt…Õú÷Kºu¸–6ù^|šY”SÓÅa}XŠ”rF:f͈è<Û¾¶å”6U“SÛ·bêáo”@œÓ¯B5 T?D,kWO5Ÿ#À„å²!h™ ªÝç*ÇfàW½'«V*_ž”*·Â‹ ö”ꈔ‰ë¡ïœÞHš—”s'uƒ¹©=Ü¥Ìé-hs¬WþÐ[î4ž-$@éÆç¼…:K‚}nƒWBéýñ¸Íy¡:ŠL_\ÔÇÄ0 9[xí`0„„ž€.Ì,;O5ãK”¤Þ}¡?)Ã5„€ $ ø¡ü7ÿpƒ‹G«üüÜüÂ]ð)·| aO*Ôu”Ñà¤_ @™§÷®ïq×(*ùûb{íÔU|<Óðfóç#¢ˇÿ`fÜZs`y5ÿÓqA‹Þ=¬¹Õ_5hå‰QïE`æØxyÚèчÒŽFÈS!W¤›ñ-Áðæ§ŒŽ´Nªâá*¹wú_À?Êè;ô;«‡[ýðoíÑÞúMöÍ£ësh§¬({q*ßÏG¡Ja:DÜÙÅþ ­ûÖŒ‘¾E/Îá>öA'0?Êç•zRNly.Œ€ ž ýº[°£ûuV=öéJc"ab50ÝeÈÕÕ4`~x©Ü{!/"ó"ù* "þW<«Ðò’pãcÉtdðoíÒ$ýa!_%ÎØS¹ÙÐÜ®\&¨túЦ7U5;—Ç©ñü-£µ:Å‹`A™¬ÎBRp•ÛNyJ:ÇJ¤Nüð© .€¡þW<«Ðò’pãcÉtdðoíÑT• ŒË­ –çoA@þ•¥‚|Öó« œº>¦*ü‡KÆ”A–qh/Ãgø•ˆ-K|¤2õ=O2½Õ%–È&u뤃í$a†éRÊò[êEËÓ€NÝ86‰…çdeà†Ü ‡Ž/¡ð›iÿ—j+äŠÌ[ÀÑ€f É<ÔÀ§ ˜ÝÏb§,œ~cÒJª“ï!‘|žõî´¡ëš@N’»WôÞ‚¸GleÙ…”öàöÅ ;®‰¯l :é<†ä^·Á3rAn"Îq'F/¥Ö[Ž]MúÂ`ÁžIn³!5&Ã÷_¤Ó¾i*”&&0~8ëéÈÌu4€ MR‹xtêk(¨ |WϦ‡½þÊ:5¤´0½ˆþEyŠ~}_bµÞ¶O`i’ü˜Ô"5±(E€ä…瘲"ÅiA;¥Ü@ì÷áSþAK¿|ïu;ºø•Žaûæ-þ«áŽû_L²ŠúŸ ùì\?Lc¼tš[z‚¹T‰Æp¥¨µ6·°],u•¦÷÷’±×^·¿\ìsJý˜íuígAýr®lÕ+€bä|g; ÔGT•õG¾9=2jmvžWE×ÙÇ%3\ÝãÝÀ×SÔÓº0<[yò¶ë¼8¤Fô/Tiÿü*Ÿü:«ù~äz’Í<åŸÖêvtªÏ¢{BXž¯«ñ–b¨V{²óÅ¡‡.-B,átþ&+µ¯˜¨€B@ë¼*&]gœO¹‹¦Ec‰»Q#¢¹Œ¡(¤T¼y±Âw°'4’(9eînÕPš| vq¿"›#6¢vJJÌjNz‡õ\,ýÍgžDÌ”´(¾ ¸¯a1¹ÕŒôˆ•Z2–oF§›µÌÙFÙŒ6cf©¼Àyf_´êÓ˜é¶j±5 F’>¡·ä•D|¹Dã2Tæ9£:w…?Û?XÝìS³«pâ¦ìûèk„ì¸øÛÖ.©|{&^òuÙ0™"à$Þö·HZz¶H¹|²8/öš/“u‰='fÅ\¼§§ ÖÓD3ƒFB­‘:xo_ÿ"yïPk[eD ,ÎêÓ4!úÛÆpÊ…q‘µ„ßSçS‰í^ZM½,°dæCß—WÆÏuÃÁW¶ž`œrÿe¥›w³X•z‡Çƒv·¨-<@„ÿ –a¶Es¿“«sMxßL±ÕGž¸Zyƒç3oÕëùãÊ2òÞ¹ ðë_Û7!éÆbÊ5\xK0Ó¯ ÜŽîå¢1¹®"Ã1pÄsàFRŒñ„?jÔ¡&†gIïyÉ“½D¼W~4ñKG#@üˆþCå:þòØ'®ƒlîç”$ÊM7‚ÅGìŠð€}‘¾¨wxovè”T:EšX^Ïû©|WXqúI7Ã$—3”¸ÑµSÊ”^­ˆS‡wÙ,B±×¢ª¥fÏ_41Ð3Òåcö¿<4\ÚZS¼xxBÄ©û+Z‘°°²ºØâùP‘Iõ]ð‚â‹ç36‘Ðk!)‚£‹Ö:x¢åܶÿ ©†jFQ^Ál€$~Æ$UÈ€.°»\tn£²|ÖU#tÚ¦FÛn’4)†r*²í|KM¥qÖó)úñƒð#ÀºŒköX‹·ø¤Wg« 3IÀ¦âQz$"¼WÓ ïÍJ¨¹†&ù?´§•*ãcÅnIº u¡Y@± ®kN$¼äÀ•}`'ö{›ù£ÀÂó×¹ûvfïÇ‹-J¶(i|š P 8µH¬j†ÃÒÞe×—¦ñ8u½mª³Sk§SGɼõ;Ñw2õѱ­}ï™ûÇŒÀ cúÔ½N?¹ñæuöB™Lê⎠EÙÃáù/!p6É&ìv°m Ä7Ü òêËYCs ÒËœ|ØctÆ-gì¡ÆÒ\”f²ùp(‚÷ìÆñífÖͯüPã;Dö3Ƀ0ø*jµ'{ûß;\.Øw3²Õn9¼üO?@½©WÍF)ÐsOöè@[Nˆ/»ßæ5-hE™Ñ°> Á9ížß%âr9òlr¡þE r”8ÛOåµ{ í E']d’2&l‡ÿW7W«_N¡½A«³—ÿF/8Úà¤Í#Ãfa³žïµ»šŒ>ù®¸è&´GóhßlÌ¤ØÆåäÛgZÞP6ûš4¨ˆ2Á£“â é'´ö~ãV±èJ3?š"õ’õy÷yÒ±ßèQJ9zç†Ûí©a迚¹ü˜AÅö1Áúcr!—oü0Ú]N)üZ¨&=QÚ1À<_€7ny÷¤%¢0u¥%Š`O@Mcl¶Oð^Ê3{Qd©gå$d`5„ÕQÀ§ŠVw_0q½¸ÔNì°UªQm„xÍL;ÿJ+IL0n*_¿¼"½´É¤ï€vÏ$0Æ<¸šÄX™ 4‰¼âÔm¥òZƒ¶¯à# îÅ´ì|éõÛAö¾ZÜ‘í%*SºuèÙ¾P8T·Ö‘Çù,mÛ ˜Ô`$wlzZ<²:±”:¥È„Š™ÃCœÜwà Æ‚| ï‹×Ó¨¢Äx©?š´ðûø ÈÝÔ†GÝ£<“èØ{"~þ·h´ÊIóù ¤ÒPëÝ¢§W^ÁÊÀB=šdÊ8=1ìÚ›z¦‘åj1•öá&Ÿç³­y8ëG“tä‚ÑfØÇê»É´r$Ø’i/žæOÑÛó'ÖB–õâ ¿{™‚T=ºàŸ§ŒvÂ’WÖ«Î^6A¯À·¯c…_×~¥§»ÄZ"²ÑRÜ ßáq¹°/¥"¦®U2Òü(t‰ñ”­´#ðù%ËQòìüýfjC 3tÉÕÁ’3 Iוc›ÖJ:u›{&u_j‰Õ9ï]¶í]çu¼7 Ô‹*›ÞÄæ-k¢|ã8{–ŒKgÄñra¹"Z ˆâú‘‹{®ÓGäJ µv§/îú?ܦHL-?{Ö~6“WÚÓ½*¸Þ:ñ‹›¡!]ýÒ—Gߊ$•jø6„È™ñTO{…—=-Fµ0 HÂU£C/r÷ÿ4l¦ƒ“ïŃnèÀ;•²+ÜÜþ-@/€Õ,¤àÒ°_5Úó`þèW–£ŠúCLk;ÍëßvrȇæO²ŽŸ™·Ý§i°y¬Ã!ƒ¾7.ºÊÀ6iÌË”$ŽÆÓ? À%jhÞWÒ0ç]Ë#5¨ŽG–%Ù$WObÕ‚\S'’_ºÿ&0öÓ˜v)$w×îÛÈB=¦T²û!°út‚NXÂw`“Z*xÝÕKCç0Ë èo™¦¸Kà“z¶[èÍ5þv¥`:óssKßÌ“tºªV›mÑÔP¦O´.ܸp=Viò(¨„¦Òsm€þÃIZ]tõJïW*cV áÊ}ú„bmv³î¢qÅÛêx¯ؼŒÇe˜Qù]{¿B©ãÅë3LÊv†Iñ™€=³ŸÒöˆRâq Âýžß»ÛaEgÔGÓâ+Öj¦ÚÜõ:üßw)'…V¶¤-ì±–ÃHœ‡i¯ßGÙ=[oÊÿ=¿A†‡.jÔ_QtFKgV¬#¥ãÑ ÚUMIªig»C$GÙ¥'ó»(¯îô?üwè$p\Pm§½”@à"´ÊpPqžÄ2áÛ=q¨ŒÁJÛÀµ\„åWRhËE?Ê”ï³1\çyFTRî­c5^ø“pQ‘íꌣ"ÅÎÌ»°èмç‘TL€gh‚ä:<]ƒàq:QÄãz…i /á@%¿î[nXĵbDÎÒÉŽ@±(âU|Px PÉ2ÍÞðàˆG,™ ‚"‘»D6ñ‚ôÀ|;}ºþ•ý¤/Ç >gbˆ%Õ†¼w«¨„xñ)½!8º•.)—J;Ÿ@.¾uÖ2[…ù"oºQøôý#°[zµhUWþ±pVúx¬Ì‘ ç2'NèÚþ&Œz7ÿ !Ñi†s¡·$¸Mòñ…`µð”}d õ#B P¢|2ßê.Öw„u\›ï’ï`ï0N£²và7òaÂòqÍVŒ|jFj|÷Õëõ ^7ô&ÈÈØD>õJ÷+o¤^%7Ü‚ؽ`«º½ë YN_½–¡Çhýû`-"÷b;Ö‚0ºrjýu&Ç&&jøJÑ®ùûŠ.\È· 1nžc)ÿ• £×¼$Yñ©¹;¦Ä,j,9šU†×^å½±ÏQ?VQßtÅË}¢šÆ­¥9ër.(K0íƒìÖãŠ"B|ÿ t"1ÛȺ$§2‰NA^¸5Av·Ä}á•öí)mµËÉ«æ_„ñl;²é4fˆ5…Öoa Õ!ú9_¶sù+ZjM9 =8¹ëÈgæ]¥b2׫BA'¹¤]ï Ï$劬²2\†µìtÒK’ÌÉj^©o*œ]'˜M­OÖI.L0An‰ ØâÛ÷ã +E0¥ÂpîÞ8ä=¬ZÈÙ8ï µš<©4™höY3òTiŠþÐì—uF¬DåìÕ9º‰¤g[OˆÍˆÎPï⊓°†O`ÛÄ~ ­n‡¼_ˆ¼ô54õõ††`4¢ÇÍyḖasTØ»ºx•çGÅ“ÙQ›9k®vöÈ[y F .HFžð%”°Ù¡áHŽÖ?îDÛ&¤ï 8mvcA­ZŒLjðbÑ&E 5¬S{³aVHPsË}&ùsƒž±UÆÈ@Œ[_;Tä+“…|Ä—UøÍ–ÑÉ$‚ÙoÂAUš\N Èo¹gvª9ªšÂ亄òãµ$&!o…ÀÌ IÝŠ?k¨.(#ƒX”çeÄú¶ ‚íÑÁg\ Ý„ÜoœƒD;­¤<ŸM·#½Íšöãú ½iJÌDYB¿ÉÄž«cµ ÄÚàn£”N Û»=„âJÍð¡yv*z¦©qȨû{jô̬UÂ/ºßà‹¥lgð®rI÷ÐÕ¬¹˜ßUñ^NKÔÊhQ)‡é•’Š`+<i+0xbâ¸XË»ÛK6³v›¨ÅmÙ9•”1šü}`%Úå3np…èÞCi͸E±Ÿ^Ì[ ’õM¸1õ •Ã-âŸ,Å€€ñý¬+»ê³ï©®ú†ÛPoÔ4¿´Ûõ8Ÿ¶ãûTÿ4ý·­õ7 êM’ýNߨ«}E_µó„ü÷ÕeþÖá}IROÏN/ԚŸ]Î_ýÍø>@Î~gâáî &RMu ­â×¥QÎB;=ËíaMµU*N¦¬‡©S^¼—i‹É‹%­7/ÌÃXfê¸C¢`UTÅÜ¥y/DÜ‹¼ï,”$¿=©f?Þ,±(E¿5s4¿Ô-ù¡e!ÀèÖ#>±$›#ÊiÈæefÏF0`iàÛÞ••✠Òùô02ÇÌXic ¿ž/Ü6ÉËž•¸F“ß ‡ºSZ¹srO9Îu!U.£ºWU·ž&ûÉÁ´ô3ô1?•wù"±0pF~oÃvbñ‘É0r¯ˆFÞ¢å7Cæ¼ÇߨÁã`£Þ¼dýV¦v(7<>ÀB¤;_Á1A¢ðeþº{z^'ZM^hJÂ>êaX¬P–ßmç¬e5—Rõ¬ðƒ¼ôŸKáÎÙ&‘ä,i»÷™‚-Ü;+¥åʃÒ/ÿ('qðq¤œ+¤™–å†ÇŸQ#˜ŒYYÉl!ˆ¯M+ÛšÞ[‡LÅSjÅìkž‘¤¼YæãGÉØÆ…Ÿsø‘ÔxŒcÃÙ¯DÐ’©±OÿÉgÂBJN JÙÅÝaÓ5~‘¬{yæù\zéý( ð€ŠÄç¾ ݧjp`·0*]¾ÿek.¸T1)+§{4Æ?~$(ÔMÅlmËw¢Ò/ýP#[ ÷® |/h¢˜lNIØ$ÚÉÎD‹¸¾L_)‡áÈqŽh­=ÖiÔ| áÚXq»ÍºL£è±܆‡¤z{²uA±h©yDp¶áÛGþ}G±Ùó|Èp5K˜4é$æZ…N'›È¸Oadz§5†Ÿ”ÊWq3 p6 îáCÙõ­I„„Jû;ð¯üžâºÐÃøÐYòó^8¢5Ô ùÐuÓË2]¯ ª©˜+V 1;›JÆp‚}E’ÜrÍ›¹):ŸµØíÔgeõ¨Y,š‚ÀÎáó'šï]è¹Êèñƒcg®êÏŒ´<éè{+óþ)‡rÜ‚÷Ú~£Höñ¦\ìVõQð©¶6y–ؾº¾ ª¹]lhÿ e󙸎(ÊÁ“uu€§)&vßϲªµÌYè®TŽÓŒïºÌû¾¡Òåm†:Ä艊ÂniYâÐ@ù‡”ÙY,Jž˜W¿iÊ ¼=Y]à8ù¦0V}Æ•‡U)ô ª:#‹NŽwå50”8ìÂBB@ø¿ÎtkÞ¦wix'>ô ª:#‹NŽwå50”8ìÂBB@ø¿ÎtkÞ¦wix'>õ ”̈¾B¿¬s¹éÐK Å]»Mb!^dÙP¼Ô!ãTQÞÆœd?æ½ÿ4&óãý”›ŒcèòoôH%MKÿ'ï_Õ :œA¶›Šƒœ-ÏM Ä´ÊyŽÞç/:&u„yêcéä çUDã7dþ6Í‘¼§%M“ ŠžBÜAbß®—ãÿVÇÃÔÛ ’ñ¦#7|T‹ÿ þ‚=î*˜IØUÊ™yÝT3™ƒtæoxoadGl–PÞWqhx’èꥃ)eâ³xrÉeö=DÂ,çé³5[ |Õ&³Àb¢¹Å©É©”oѰä©NH™o&J|øHvûó´湟ð&F†ñ»Ð¬‚èÁ{6 ä?KÑC “z£g†T¢‰+ò†öuˆ·T7‚jˆ)£Ã Ë‘i>dA•6ÔòB×z ù:lmžWÈvohÕýŸš ^iaµíŠ!°{„ƒÑ 3LÞ“Íã=¡¸5ŽÙçê¾eÖfêŒ`Êý¦¡> K²fˆGQë Ëþ–ÍLðÖø”v.%æ øe;ÆC€ð‚µVD˜êÅ.~…#D°CoÛé˜4™Æ‹‰ã¼e Qn¨Ž¥QWa:XJÎi¹Cð¼+‘>#·ð»¥òßù²‡'e ½­…>?ËZðæµ:0i’§æ-Yÿg8-EhÍxòx×Î/ÄÒvŸä ;ÃYo…Ÿ§§pÁ©ƒ.•K]goËLÇ´˜¯{ Ž—D¹hlLñbT¶·Ñ8ØaÅ+^²¡ÝoéÇè4uD/õMª<‡€´ÂËÇÍÏsøþ`,o)F¸¥Z¯÷Ø3ØZRv›at±„th§á#çH'ÛÑ£üˆÒºlÖ\*Qt–=zw`}Ùñ+WGÕ@‘ app_icon_16.png app_icon_32.png app_icon_48.png app_icon_128.png app_icon_256.png app_icon_512.png Sigil-0.9.9/src/Resource_Files/icon/icon.rc000066400000000000000000000000711321676412500205130ustar00rootroot00000000000000IDI_ICON1 ICON DISCARDABLE "app.ico"Sigil-0.9.9/src/Resource_Files/icon/sgf.icns000066400000000000000000006126051321676412500207060ustar00rootroot00000000000000icns…is32ÿ ýÿîñýúúþèåú‚þûÿÉÆî€æèàÃÆíì¹ûÿÉÈðæîïæîۯκ ûÿÉÉðïʆˆ~°ÿ²øáûÿÉÊ÷Öa¯à¾^‡Ð™ÃéûÿÉËÿ Pø÷ÿ“NéЮÖûÿÉÍÿ¹!w×ýÀµú驹ûÿÉÑùó—20lÁúõå¸ÿûÿÉÓûûÞ¥…:‚þè¸ÿûÿÊÓÿ´p¤M¡ëxØò·ÿûÿÉØþTÑ£RÝÿ;²ú¶ÿûÿÉÚÿ6³–€ÿðGÍø¸ÿûÿÊ×ÿ_µàÍo‡ÿð¹ÿüÿÊØÿÔ«‹Œ‘½üÿðºÿüÿÊÜÿýƒþ ÿóºÿûÿÌ£Á¹¸¹€º»¾¯²ÿ ýÿîñýúúþèåú‚þûÿÉÆîæåæéàÁÆíì¹ûÿÉÈðåòïáï߮κ ûÿÉÊðò²[eS‘ÿ²øáûÿÉÊûÃ,«á·,nÒ˜ÃéûÿÉÊÿ|#ûùÿv2ëÏ®ÕûÿÉÍÿªJÅÿµ®û驸ûÿÉÑùôŠ:«úõå¸ÿûÿÉÓüüÐ’w!iÿç¸ÿUûÿÊÓÿ›R“êiÓô·ÿûÿÉÙú3ц2Úÿ ¬û¶ÿûÿÉÛû¨‰wÿä&Ìø·ÿûÿÊ×ÿM¤×½N|ÿð¹ÿüÿÊØÿÏ¥}z¹ýÿðºÿüÿÊÜÿýƒþÿóºÿûÿÌ£Á¹¸¹º¹¹»¾¯²ÿ ýÿîñýúúþèåú‚þûÿÉÆîæåæéàÁÆíì¹ûÿÉÈðåòïáî߮κ ûÿÉÉïò²\eS‘ÿ²øáûÿÉÊûÃ,«á·,nÒ˜ÃéûÿÉÊÿ|#ûùÿv2ëÏ®ÕûÿÉÍÿªJÅÿµ®û驸ûÿÉÑùôŠ:ªúõå¸ÿûÿÉÓüüÐ’v hÿç¸ÿUûÿÊÓÿšR“êiÓó·ÿûÿÉÙù3ц2Úÿ ¬û¶ÿûÿÉÛû¨‰wÿä&Ìø·ÿûÿÊ×ÿL¤×½M|ÿð¹ÿüÿÊØÿÏ¥}z¹ýÿðºÿüÿÊÜÿýƒþÿóºÿûÿÌ£Á¹¸¹º¹¹»¾¯²ÿs8mk'+****-ìÿýþþýÿÙ ìÿýþþþýÿÜ!ëÿüýýýþûÿÞ#ëÿüýýýýþûÿÚëÿüýýýýýþúÿCëÿüýýýýýýüÿCëÿüýýýýýýüÿAëÿüýýýýýýüÿAëÿüýýýýýýüÿAëÿüýýýýýýüÿAëÿüýýýýýýüÿAëÿüýýýýýýüÿAèÿùúúúúúúùÿAìÿýþþþþþþýÿB ¤´°±±±±±±¯·.il32 ÿùðÿþ…ÿöÇüøÿýûýþüÿÿþÿâ}÷ë…íìÚÜÓßóþû‡ÿþÿâtñå†çêçÖÊÊþéíîë±²¸¶ÿÿþÿâuòæ„è ççææÜÈÇv­Ç¼¹á{€ÿÿþÿâuóçéèèêìíìêàÇÛÒi™Ï¸æçy ÿÿþÿâuôè€êéëìæ×ÐØäçÏáàÓf“ÉáñÏÎ6ÿÿþÿâvõèëëêìÞ«m[YYf“²íðÞÔiîúÕ÷¸ÿÿþÿâvöéìëîØ‡?o¡¯¢p;dä÷çÝ×j³ÿðØ­ÿÿþÿâwøêìîçœ9Ùéííæ¤;>g³¶¶¾iÈýâ§ÿÿþÿâwùëìóËb=€îííïŒ,C¼ÌÁÅ’‹ÿí­ÿÿþÿáwúìíö´I9Éõìîïíô»@DÒêâæ°—øé¬ÿÿþÿáxûíîø°;2zâ÷ñïí÷®%uäñíöɇذwÿÿþÿáxüîðõÓ8/Cq»è÷ô÷¬{ÉîñïûÅoÅ™`ÿÿþÿáxýïññô“'>V~ ¬×óóæíòñðý¿‹ÿû€ÿ<þÿáyþðóòóì‘.":OgÉõõòóñþÁ‹ÿúüÿÿþÿáyÿñôôóóðÅ}8,AQ‡èöóòÿÁ‹ÿû€ÿþÿázÿò€õùøíêÚ˜L+&mðõóÿ‹ÿû€ÿþÿázÿôööùÑzVYÞä¬W!¨ýóÿÄ‹ÿû€ÿþÿá{ÿõ÷üÊIV’™bLÝûæ€^ôöÿÅ‹ÿû€ÿþÿá{ÿõûïbIÓõîðtzþøôd =áùÿÆ‹ÿû€ÿþÿá|ÿõÿÉ,p÷ç—pzxö÷ÿ¼1ØûÿÆŒÿû€ÿþÿá|ÿõÿ°^ÿÆ"&¨÷øÿÔ86ÞúÿÆŒÿû€ÿþÿá|ÿöÿ´(Úøt3zÞúøÿº&]îúÿÇŒÿû€ÿþÿá}ÿøÿÚ- döúÜåøýÿëd¯øúÿÈŒÿû€ÿþÿà}ÿúþ÷\ dÚþþÿùÏd%éýûÿÉŒÿû€ÿþÿà}ÿúýÿp(<-_zv]AR§çüýûÿÊŒÿû€ÿþÿà}ÿûþþåÐ×Á–|w}‘¶ßõ€þüÿÊŒÿû€ÿþÿà~ÿüƒÿþúøøúýþÿþþÿýÿËŒÿû€ÿþÿá}ÿù€ü€ûüü€ýüûüúÿÈŒÿû€ÿþÿá€ÿüŽÿýÿÌÿû€ÿþÿæ_¹°Ž²±»ˆŠÿû€ÿþÿúŒˆÎÿýÿÿùðÿþ…ÿöÇüøÿýûýþüÿÿþÿâ}÷ë…íìÚÜÓÞóþû‡ÿþÿâtñå†çêçÖÉÊþéíîë±²·¶ÿÿþÿâuòæƒèçç€æ ÜÇÇv­Ç¼¹á{€ÿÿþÿâuóçéççìðòðìàÆÛÒi™Ï¸æçy ÿÿþÿâuôè€êèîñݺÆÜéÔâàÓf“ÉáñÏÍ6ÿÿþÿâvõèëëéðÒs-!!#`’çñÞÔiîúÔ÷¸ÿÿþÿâvöéìêñÇ: _œ¬›VÑúæÝ×j²ÿð׬ÿÿþÿâwøêìîæTyÛêíîé— H³¶µ½iÈýâ¦ÿÿþÿâwùëì÷³½îíóh"¸ÌÀÅ‘‹ÿí­ÿÿþÿáwúììú“Ã÷ëîïìùŸ)Ðêâæ°—øè¬ÿÿþÿáxûííü—PÞûòîìüŠgäðíöɆخvÿÿþÿáxüîï÷É7¡æûöø˜jÉïñïûÅoÄ™`ÿÿþÿáyýïññö|BˆË õøèìòñðý¿‹ÿû€ÿ<þÿáyþðóòóì~ &a¶ööñóñþÁ‹ÿúüÿÿþÿáyÿñôôóòòÁk aä÷óòÿÁ‹ÿû€ÿþÿázÿòõõôýôâãÖ‹4Nïöòÿ‹ÿû€ÿþÿázÿôööû´F',_×ä ?˜ÿóÿÄ‹ÿû€ÿþÿá{ÿõöÿ«C‰J*ÖþälIòöÿÅ‹ÿû€ÿþÿá{ÿõýå,6Òøìë\eÿùòK(ÝúÿÆ‹ÿû€ÿþÿá|ÿõÿ°bùÞXDVc÷öÿ«ÓüÿÆŒÿû€ÿþÿá|ÿõÿ–Lÿ¶ œø÷ÿÃ'ÚûÿÆŒÿû€ÿþÿá|ÿöÿ¢Òøf#pÝùöÿ”SíúÿÇŒÿû€ÿþÿá}ÿøÿÑLñüÚæùýÿØ/ §ùúÿÈŒÿû€ÿþÿà}ÿùÿô9FÊüÿþñ±2ƒéýûÿÉŒÿû€ÿþÿà}ÿúýýZ. ;VP4B¡çüýûÿÊŒÿû€ÿþÿà}ÿûþÿäÌÓ»Žphp‰´Þö€þüÿÊŒÿû€ÿþÿà~ÿü„ÿûùùûýÿÿþþÿýÿËŒÿû€ÿþÿá}ÿùüüûƒüûüúÿÈŒÿû€ÿþÿá€ÿüŽÿýÿÌÿû€ÿþÿæ_¹°Ž²±»ˆŠÿû€ÿþÿúŒˆÎÿýÿÿùðÿþ…ÿöÇü÷ÿýûýþüÿÿþÿâ}÷ë…íìÚÜÓÞóþû‡ÿþÿâtñå†çêçÖÉÊþéíîë±²·¶ÿÿþÿâuòæƒèçç€æ ÜÇÇv­Ç¼¹á{€ÿÿþÿâuóçéççìðòðìàÆÛÒi™Ï¸æçy ÿÿþÿâuôè€êèîñݹÆÜéÔâàÓf“ÉáñÏÍ6ÿÿþÿâvõèëëéðÑr-!!#`’çñÞÔiîúÔ÷¸ÿÿþÿâvöéìêñÇ: _œ¬›VÑúæÝ×j²ÿð׬ÿÿþÿâwøêìîæTyÛêíîé— H³¶µ½iÈýâ¦ÿÿþÿâwùëì÷³½îíóh"¸ÌÀÄ‘‹ÿí­ÿÿþÿáwúììú“Ã÷ëîïìùŸ)Ðêâæ°—øè¬ÿÿþÿáxûííü—PÞûòîìüŠgäðíöɆخvÿÿþÿáxüîï÷É7¡æûöø˜jÉîñïûÅoÄ™`ÿÿþÿáxýïñðö|BˆË õøèìòñðý¿‹ÿû€ÿ<þÿáyþðóòóì~ &a¶ööñóñþÁ‹ÿúüÿÿþÿáyÿñôôóòòÁkaä÷óòÿÁ‹ÿû€ÿþÿázÿòõõôýôâäÖ‹3Nïöóÿ‹ÿû€ÿþÿázÿôööû´E&+_×ä ?˜þóÿËÿû€ÿþÿá{ÿõöÿ«B‰J)ÖþåkIóöÿÅ‹ÿû€ÿþÿá{ÿõýå+6Òøìì\dÿùòK'ÝúÿÆ‹ÿû€ÿþÿá|ÿõÿ°bùÞWDUb÷öÿ«ÓüÿÆŒÿû€ÿþÿá|ÿõÿ–Kÿ¶ œø÷ÿà 'ÚûÿÆŒÿû€ÿþÿá|ÿöÿ¡Òøf#pÝúöÿ“SíúÿÇŒÿû€ÿþÿá}ÿøÿÑLñûÚæùýÿØ. ¨ùúÿÈŒÿû€ÿþÿà}ÿùÿô8EÊüÿþñ±2„éýûÿÉŒÿû€ÿþÿà}ÿúýýZ- :UO4B¡çüýûÿÉŒÿû€ÿþÿà}ÿûþÿãÌÓ»Žphp‰´Þö€þüÿÊŒÿû€ÿþÿà~ÿü„ÿûùùûýÿÿþþÿýÿËŒÿû€ÿþÿá}ÿùüüûƒüûû€üúÿÈŒÿû€ÿþÿá€ÿüŽÿýÿÌÿû€ÿþÿæ_¹°Ž²±»ˆŠÿû€ÿþÿúŒˆÎÿýÿl8mkbÑÁÄÄÄÄÄÄÄÄÄÃÄÅf~ÿûÿÿÿÿÿÿÿÿÿÿþýÿ{|ÿøüüüüüüüüüüüûúÿ}~ÿûÿÿÿÿÿÿÿÿÿÿÿÿþûÿ~~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿþûÿ~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿþûÿ‚~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþûÿ„~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþúÿt ~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÞ ~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿê ~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿë~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿê}ÿùýýýýýýýýýýýýýýýýýûÿè~ÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿêkçÖÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØÝÇit32fqÿþý©ÿûÿZ§ÿúýþýþ¿ÿýÿÔËÿý¨ÿýÿˆîÈÿûÿ™Úþ¨ÿûÿW†æÎÕØ×ÙÂÇñÿý‰ûý°ÿûÿ£éóð¦ñïú¬¤ÍÀÄÅÃÁÀ½ÆÚâìïêìòƒñðú°ÿûÿ¡)ç©æäóôìîìëèåáÝÔÏÕßöîñ¹ÿûÿ¡'«èååæååäáßÚÖÑÌÉÎ×ñõûýþ¶ÿûÿ¡'®èçæåãàÜ×ÑÌÄÈÌÑÖùÿüþµÿûÿ¡'®èççåãàÝØÒÌÇ¿ÍÍnÿüþ€ÿþÿþûÿûÿ¡'®èçææäáÝÙÓÌǾÇÏÈJiÿüþ³ÿûÿ¡'¯èçæäâßÚÔÎÇ¿¿ÐÉÎLhÿüýÿçÕÙˆØÙÓú¾H]cŒ`ÿûÿ¡'¯èçæåãàÛÕÏÈÁºÑÊÉÌJhÿûÿÖ¸¾ˆ½¾¸èýv‹ÿûÿ¡'°èçæäáÝ×ÐɹÏÑÉÉÍJhÿÿؾÈ þçÿêµG‰ÿûÿ¡'èéƒèé’èé‡èéèéèçæäâÝØÒËĹÌÖÎÊÉÍIgÿּˆÁ ½çÿö©Ãoˆÿûÿ¡'èé€èéèèéèèééè€éèééèéèééè€éèèéèé€èééèé‚èééèçåãßÚÓÌźÈÚÑÏÊÉÍIl伉Á ½èÿÿ׃Ĕ‡ÿ ûÿ¡'ééèéè’éèè”éèçæäàÛÕÍÆºÇÞÕÒÏÊÉÍIQËÁÀ‡Á ½èÿÿúµ‘¹”†ÿûÿ¡'°éèèçäáÜÖÏȽÄáØÖÒÏÊÉÍIOËÁÀ†Á ½èÿýÿΞ”µ•…ÿûÿ¡'±éèçåâÝ×ÐɾÂãÝÙÖÒÏÊÉÌHOËÀ¿…Á½èÿýÿé™›”´•„ÿ ûÿ¡'éêééêŠéêˆéêéêéêŽéèçåâÞØÑÊ¿ÂçáÝÙÖÒÏÊÉÌHOÍÄ¿„Á½èÿþÿþ³›£”¯º‚ÿûÿ¡'éêééêéêêéêééêêé€ê éêêéêéêêéé€êééêê€éêêééêééêƒéèçæãßÙÒËÁÂéåáÝÙÖÒÏÊÉÌG;¹Ç¾ƒÁ½èÿþþÿÍ¡¨–ª¯ÿûÿ¡'êêé™êéé„êéêéé„êééèæãßÚÓÌÂÂëéåáÝÙÖÒÏÊÉÌH*ºÇ¾‚Á½èÿþþÿퟘŸ­¢½Óe€ÿûÿ¡' ê-éçåâàÞÝÜÜÝÞàâãåçèéèçäàÚÔÌÃÁííéåáÝÙÖÒÏÊÉÍJ*ºÇ¾Á½èÿþÿÿþ±ËíùþýüÿÊÿûÿ¡'šê4ëêêèäàÚÓÌÆÀ¼º¹º»½ÁÄÉÎÓØÜàãâàÛÔÍÃÁïñìéåáÝÙÖÒÏÊÉÎM*ºÇ¾€Á ½èÿþÿþÿÅäÿþ€ÿüÿå+ÿûÿ¡'êëêê‚ëêëêëêêëêëêëêêë€êMéæáØÍÁ¶«¢š™——™“–š¡ª´¾ÈÐÖÙØÔÍÄÀðõðìéåáÝÙÖÒÏÊÉÎP*ºÇ¾ÁÁ½èÿþÿýÿÙ§çûÂÈØðûÿÍÿûÿ¡'ëëêŒëê…ëOêçßÔŵ§œ™›šš‘Ž…~x‡‹ƒ‡…ƒƒ‰˜©¹ÄÉËÈÀ¼ñøóðìéåáÝÙÖÒÏÊÉÏR*ºÇ¾Á½èÿþÿþÿðœÛÁ¡®ãÿûÿ£ÿûÿ¡(—ëPèã×ű¡™œ •}bJ5,"#,/:K[o}ƒ|xsƒš¬³´®ªðüöóðìéåáÝÙÖÒÎÊÈÐV*ºÇ¾Â½èÿþÿòìÿÇ•¼ÿøô×À¶ÅÆÿûÿ¡(–ëQçß礙›¢ˆX1#0:@@9/&"4Hdvujh••–îÿøöóðìéåáÝÙÖÒÎÊÈÐZ*»Ç¿½èÿþÿøõÿý´¯þÿ庾¸‰·(ÿûÿ¡(ìì‡ëìì€ëìëëì€ëRçÜÇ­–¡P"6Xu…‘““‘ƒqW8# (8Wkqr{„’”ïÿûùöóðìéåáÝÙÖÒÎÊÈÑ])»ÈºèÿþÿíîâþüÕñÿþÿýÿÌ¥Žÿûÿ¡(ììë†ìëììëƒìëçÜĨ™–¢q'=pŒ“”•—™›€œ1šš—ŒnD)'*9`|„…‘“ïÿýüùöóðìéåáÝÙÖÒÎÊÇÑ`)¼ÂåÿþÿÝîùþþ€ÿÕ¿ÂÄ­ˆ¿ÿûÿ¡(“ìGéÝŨ—–Ÿ[&bŒ—ž¥«¯²³´²¯©£™n<),+EpŠ™™íÿüûù÷õòïëèäàÝÙÕÒÎÊÇÒa*¶íÿÿçíÿþ€ÿ ýýé¶š¢‹·fÿûÿ¡(ìíì"êáʨ”•œR.x‹•¢¬µ¼ÁÅÈÉÉÈÆÃ¾·«Ÿ™‹X,€/Mtrèÿþÿ%üøôïëçãÞÙÕÑÍÉÆÒc%ÜÿýÚïýþúáéêþÑ”¢¤“š£ÿ ûÿ¡(ííìíììíì€í‡ìUäÒ¯•š` +|‰œ«·ÂÊÐÕØÙÚÛÚÙÖÓÎÆ¼®Ÿ—n413-.5«Á»¼¼ÎÔ×ÚÞßßáßÜÛÛÚ×ÔÍÈÑc7ìòúÿÿððÌÕØØùÍ© œŽ·ÿûÿ¡(ííìƒíì‡íVéÛ¼—‰–~!#!n‰¡±ÀÌÕÛàãåææçæåäáÞÙÒȺ¦›y407676-)+&Y}ˆ™£¨ª««­¯±´º¿ÆÊÍÓwF½üûû÷ò÷öØ¿ÿþ÷¹ —±ÿûÿ¡(íìãË¢Š’AJ‰‹¡´ÅÒÜâæéêë‚ì;ëêèåàÚÐìv4467<923-M„ŽŸ©®°¯­¬«©¨¦¥¥©°Á×l9ÙìÿöñþøîóÿÛ˜¢ ¤–“ÿûÿ¡(íîŽíêÙ¶ƒŽv"%$rŠ›³ÆÕàæéëì†í9ìëéåßÕǯžf09889/0,<¢®´¶µ´³²±°¯®¬ª§¤¶Ñ8Göýø÷ÿþñýÿð­ £œ“ÿûÿ¡(îîíî€íîí‚îííîîíåÌ ……L $8ƒ‘«ÂÔáçëìƒíîí€î9ííìêçáØÇ­•J4:=>/--1z“¦³»½¼»º¹·¶µ³²°¯®¤ÆŽÒÿýÿýñüþÿüÛÙ§ž¢¡ÿûÿ¡(îìÞ¼‹~„‚1%!J‹›¸ÍÝçëííŠî7íììèãØÂ©u7@BD0,.+r–©¹ÂÅÅÃÂÁÀ¾¼º¸·µ³°²¹¡ÿúÿøèÿýÿן⦥¡šÿûÿ¡(îêÖ«z{„n'+#S‘¤ÂÖãëíŽî5íëèãÕ¸–LAGJ1(+&k™­¿ÉÎÎÌËÉÈÆÄÂÀ¾¼º¸µÄ1¡ÿúÿíèÿüÿ̥ś¨ŸŸÿûÿ¡(„îïîîïîïîïçÏ›mqzZ#,"Y•¬ÉÛçí€îïîï‡î4íëèàÈ©dGMN5(+&hš°ÅÐÕÖÕÔÒÐÎÍÊÈÆÄ¿¼É8¡ÿúÿÓÊÿýÿæÚµ¥ž™ÿûÿ¡(€ïîïî†ïäÉimrJ#+!]˜°ÍÝéîˆïîîïî€ï5îîíëæÓ¶vJRT8%*#gœ³ÉÕÜÝÜÛÚØ×ÕÓÑÏÍÊÇÄÎD¡ÿúÿÇÁÿöñÿ䣢œŸÿûÿ¡(ŽïîáÄ„`dhE&,$U˜±Ïàêîï4îîíêÛ½†\_c>#)#nž·ÎÛâäãâáßÞÜÚÙ×ÕÓÐÍÓR¡ÿûÿ´¦þìéÿÑ›¢¢ž—ÿûÿ¡(ððî‹ïîà¿hlpF).)D“®Íàê“ï2îíß‹[^a4 %$y »ÑßæèèçæåäâáàÞÜÚØÖØR ÿúÿ·ªÿööÿ»› £’¢ÿ ûÿ¡(ððîïðï€ðï‚ðïðîß¾w[`a?+..0€©ÇÝéï€ðïïðï€ðïïðï€ð3ïïîâÅ‹Z_]( 0ˆ¢ÀÕâêìëëêéèèææäâáßÞÝPŸÿùÿÈÐÿûÿ£ ‹½ÿûÿ¡(ŽðïÞ¿qKQR>/.1+X¡¸Öæíï’ðïâÄŠY`Q!L“¦ÆØåìîíììêéèèçååßV¤ÿûÿùûýÿí®Ÿ›¡ªŽÿûÿ¡(ŽðïàÂuMTVB10054oªÃÜéîï‘ðïâÁˆer?v—°ËÝèíïïî€íììëééåLQµíèÿþþÿô¦ž£› ŽÎ&ÿ ûÿ¡(ðñððññ‡ðñïâÇ€DLK?3436?>x®ÆÜéîððññ€ð‚ñððñðñïß½~f`P»Ñáëï‚ð€ï€îíìíë=UžŸ›ïóÇå³ ¥¦˜Ëbÿûÿ¡(ññð‹ñðåÌ@A=;346?@KFkªÄØæíïðŽñîÙ²zs5=†‘¬ÆØæíðñðñ€ð€ïîïî1A¡¥›¯µ™š£§—ˆ£Ðeÿûÿ¡(ñéѦE896217AILFK`™½ÐàêïðñìÕ«†HG„¢ºÐàéïˆñ‚ð)%ž¡”“—£“ »¤3ÿûÿ¡(Žñðì×»b/301218KFOPLV‚­ÆÖãëïð‹ñêØ™82kŽž´ÉÚåìðŠñðññ&–§¨­«¯ºÇ¡;ÿûÿ¡(ñí߯Œ,0/-0102JQNUWTf‘¶ÊØäëïð‰ñêÝ©T|˜™–¢´ÆÖãêîðŒñò$j§Â²Ä–Z!€ÿûÿ¡(ñïæÏ²R%.++01/1CUUYYU]r—¶É×âêîð‡ñíàÓɸª¨¯ºÇÕáéíðŽñ (€àÛÞÝÏÇÇÐÛÛ‚Øÿûÿ¡(ñðëÛÁ“0*+**/0/.Rd]`_ZXSd™ÁÓäîòó‘ô)¡ÿûšÿûÿ¡)õ€ôõ‘ô,óðìçÞÓǶ§ž–€W,!&)*'$&4Ja]ZZSOMt´Íßíòóôõ‰ôõô)¡ÿûšÿ ûÿ¡)õõôõô‰õô„õ.ôóòîêäÜÒÆ¹« šŠg9 %()(%%/DZXQRI;_©ÉÞìòóô‹õôõõ)¡ÿûšÿûÿ¡)˜õ-ôóñíéäÜÓɽ¯£œ’uH""&((%#-ARLBG6J¦ÈÞìòôôõ)¡ÿûšÿûÿ¡)õö˜õ+ôóñîêåÞÖÍ´§Ÿ—‚X, %''$#1BE>6.L¨Éáîòôõ)¡ÿûšÿ ûÿ¡)ööõöõƒö õööõöõõöõöõööõ€ö5õôóòñðîëæáÙÐÆ¹« ›‹h9 %&&#'8557#Q²Íäïóõööõööõöö€õöõöö)¡ÿûšÿûÿ¡)–ö0õóïêåáßÞßàãåæåâÜÔʾ°¤’vG!"%%$#02'(!n¼ÓéñôŒö)¡ÿûšÿûÿ¡)”ö3õòëáÖʾµ¯«¯·ÀËÔÛàäâÞ×Îõ§Ÿ˜‚X+$$#%'$&#&“ÃÝíòõ‹ö)¡ÿûšÿûÿ¡)÷÷‚ö÷ö€÷€ö÷öö€÷<öóìàꤔˆŒz|ˆœµÊÖßååáÚÑǺ¬¡›Œe+"##$#!#M²Ìåðôöö÷öö÷÷‚ö÷÷)¡ÿûšÿûÿ¡)‘÷7öñçÕ¼ €lbSY[agfj†®ËØåéèäÝÕË¿±£œV!""# ! ˆ¿ÚìóöŠ÷)¡ÿûšÿûÿ¡)÷'öðãÌ­Œf; !8OPWоÒãìíêæàØÏô¥|2€ !"#! P±ÌæðõŠ÷)¡ÿûšÿûÿ¡)÷øöƒ÷ø÷÷øƒ÷9ñâǤ‰l(-FVZN:! !??j³ÏãîñðíèâÛÑð£“J ! &—ÁÝíôö‚÷ø÷ø÷)¡ÿûšÿûÿ¡)øø÷€ø÷‡ø+÷òäÉ¡†M $Z’™œžžš’{Q! (-P±ÎãðóôòîêäÛϽ©[€ !q·Óéòöøø÷øø÷€ø÷øø)¡ÿûšÿûÿ¡)Žø,õèÍ¡‚ŒA P˜˜šž£¦§¦¥¤¢‘['TµÐæñõöõóïêã×ǯ¢_€  K¬Èãðö‰ø)¡ÿûšÿûÿ¡)øù÷Šø<÷íÖ¬‡Hd˜“𥝷¼ÀÂÁ¾¸¯¨¦„&e¿Õëóö÷÷öóîèÝ̳£T/ž¿Ýíõ‰ø)¡ÿûšÿûÿ¡)ùùøùùøùøøùøùù€ø"ó༆~g W˜’¢°¼ÇÎÓר×ÕÑÊÁ²«‹$Éßïõ€ø÷õñëáÏ´Ÿ<‹¸×êô‡øùù)¡ÿûšÿûÿ¡*ùùø‰ù>÷ëЗv+-Ž’¤µÅÒÜâæèééçäßØÎ»¯sIºÒéò÷ùùøøöóíâÎ´Š x³Ñçòøˆù)¡ÿûšÿûÿ¡*Œù$ôà¶yx_ ]•žµÈØäëðòôôóñîìçáÕ¼£>" Éâïöùø÷ôîâȰ[h¯Ëäñ÷ˆù*¡ÿûšÿûÿ¡*ùú‚ùú„ù'îÓ—hx7 {—­ÅÙçïô÷ø÷ôíæââãäáÍ´h(‰ÃÚëõøùú€ù÷ôíÝÀ•%!% [«Æáï÷ùúùúù*¡ÿûšÿûÿ¡*úú€ù€ú,ùùúùùúøçÂ{im $ˆ»Óäðöøùöðáо²³ÄÔÙÓ¼{3ƒ¾Õèóø‚úùøôêдT(-# R¨Ãßí÷…úùúú*¡ÿûšÿûÿ¡*‹ú&õß®cf^-ޤÅÜëõùú÷ïÛ¿‰xgkŽÄÆ·ƒEˆ»Òæòùƒúù÷òàÂ',.# M¦ÀÞí÷ˆú*¡ÿûšÿûÿ¡*‹ú&òؘWcM-‘©Ëáï÷ùùóß½‘‚‡ydL,j°£~:–¹Òäñø„úùöêÍž7,1) M¤¾Ýìöˆú*¡ÿûšÿûÿ¡*‹ú&îшS`B&­ÏäñøúøêÍz…‡€^<(r”|+(¥¹Óäñù„úùøñÖ°I/7-O¤¾Üìöˆú*¡ÿûšÿûÿ¡*‹ú&ëËuJX<ˆ®Ïåòùú÷ä´biyŠrB%,‘pS®½Õåòù…úùôݸc@J:V¤¾Üëöˆú*¡ÿûšÿûÿ¡*Šú'ùèÇk?J8y®Ìäñùúöá¡EILLH1†­ÃÙèóù…úùöá½j@J8 d¤ÀÜìöˆú*¡ÿûšÿûÿ¡*úûù‡ú'ùçÄc@J= _«Çãñøúõá©2'1U4D¡¯ÊÝëõù†ú÷à¼e>I3 t¦ÄÝí÷†úûú*¡ÿûšÿûÿ¡*ûûú€û,úúûúùçÄc>FA <£¿ßï÷úöâÃ<  ‰¡¹Òâï÷úûúûúúûöÞ³mZa3 †§Èàîø‚ú ûûúúûû*¡ÿûšÿûÿ¡*ûûú‡û&ùçÈj4=;¹ÙìöúøèБ t˜©ÄÙèóù€ûúƒûò×¢_`f 2”«Íâðùˆû*¡ÿûšÿûÿ¡*Šû&úéÍl'11 g²ÎèôúùïÙÁ p’ž¹Ðâîöú†ûúìËŠejS U›²Òåòùˆû*¡ÿûšÿûÿ¡*ûüˆû&úíÒ'01# 4£ÀàñøùôèϹH?}š²ÈÜêóùú†ûöá·qao7 |ž¼×éõúˆû*¡ÿûšÿ ûÿ¡*üüûüüƒûAüûûðÖ˜+)$ j¶Ðêöù÷ðâË·¨’€}†’“Ÿ³ÇØçñ÷úûüûûüüûüûúïÑ™lma :“¤ÅÝì÷‚ûüûüû*¡ÿûšÿûÿ¡*üüû‡ü'ûôÛ²4‘ÀÜð÷øõíáн¯¦¡ž¡¬»ÊÙæðöúûüûƒüûöà¹|jw= r˜±Ïâðùûüûüûü*¡ÿûšÿûÿ¡*‹ü#÷áÄX7§ÇãóøøôíäÙÎÅ¿¿ÂÉÓÝçðöùû†üøêË”nwa @‘ž¿×éõú‰ü*¡ÿûšÿûÿ¡*‹ü"ùêΈO³ÌçõøøõðéãÝÙØÚßåìò÷úû†üùîÕ¨xsv!•¯Ëàïøû‰ü*¡ÿûšÿûÿ¡*üýüý„ü!úñÕ¯4&*"]·Ïçõùù÷ôðíëêëïòöøûû„üýüùïÙ´„sƒ5 k’¢À×èóúüüý…üýü*¡ÿûšÿ ûÿ¡*ýýüýüý€ü!ýüûöÞÀf'10!##]´Îåóùûúù÷÷ö÷øùûû€üýüýüøíص‰|ˆC Z™¶Îáï÷ûýýü€ýü€ýüýý*¡ÿûšÿûÿ¡*ýýüˆýüùçÈ|)12$!"!"W«ËÞïøû†ü„ýüúóæÏ¯‡}†? U”¯ÆÛëõúü‡ýüýý*¡ÿûšÿûÿ¡*Œýúìχ0890#!,,D’ÂÕæòøû‰ýüùóéÙÁ ‚…}- ]“«ÂÖçòùü‹ý*¡ÿûšÿûÿ¡*ŒýüðÒ’?AE" 56.Lvž»ÌÖÞãèéêêèåáÚÑijŸŒˆˆs9A†’˜¬ÀÓãïöûü„ýþ€ýþýþý*¡ÿûšÿ ûÿ¡*þþýýþ€ýþþý€þ9ýþôÚ•C4  ,ELNUh‚—¨´º¿À¿º´¬¢–Œ‡ˆ€g9 .q”“ž±ÃÔãïöúýþþ€ýþýýþþ*¡ÿûšÿûÿ¡*€þ€ý‚þýþ7öߦ !#9LU\bnrz‡…„†‚~|r`D 5n“—™¨¸ÈØåïöúü‚þý…þýþþ*¡ÿûšÿûÿ¡*þùäÊ^,J`q|‚†‡}\6€'4EKU€WVL@/(S˜›š¥³ÁÏÜèñ÷ûýþ*¡ÿûšÿûÿ¡*þþýŠþûîÚÉ´¨Ÿ˜•–——˜™•‡oS:$ˆ'De‚˜ ŸŸ§³¿Ë×ãìóøüýþ*¡ÿûšÿûÿ¡*þ4üõéØÇº³±²¶¹¹¶±ª¤¡žš‘‡|qf]WUWWX_kw„‘œ£¤£¢§¯¸ÂÌÖàéðöúýýþÿ*¡ÿûšÿûÿ¡+ÿ€þÿÿþÿ…þýùóêà×ÑÏÏÒÔÕÔÑËﲫ§¤££¤¥¦¦§§¨€§ª®´ºÁÈÐØáéïõùûýþÿ†þÿ„þ*¡ÿûšÿûÿ¡*ÿÿþ€ÿþþ€ÿþþ€ÿ0ýüøòíèåäåçèéèæâÞØÓÍÇÁ¼¸µ³²±±²²³µ·¹½ÀÄÈÍÒØÞåëðõùûý‚þÿÿþÿþþÿÿþ€ÿ þÿÿþþÿÿ+¡ÿûšÿûÿ¡+ÿÿþÿþ…ÿ þýüù÷ôóóôõ€öôòïëçãßÛ×ÕÒÏÎÍÌ€ÍÎÏÑÔ×ÚÝâæëïô÷úüý€þÿþþ‰ÿþ„ÿ+¡ÿûšÿûÿ¡+Šÿþ€ÿþþýý€üƒýûú÷õòðíëéæäãââáââãäåçêìïòô÷úûýþþƒÿþŽÿþÿÿ+¡ÿûšÿûÿ¡+›ÿ€þüüúùøöõôó‚ò óóôö÷øúûýýþþ›ÿ+¡ÿûšÿûÿ¡+ ÿþý†üýý€þ ÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡*Öû*¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡Ö ¡ÿûšÿûÿŸÖŸÿûšÿûÿŸÖŸÿûšÿþÿðÕÙÖØÙÕðÿþÿÿšÿþÚýþÿÿŠÿÿþý©ÿ ûÿZ§ÿúýþýþýþþ¿ÿýÿÔËÿý¨ÿýÿˆîÈÿûÿ™Úþ¨ÿûÿW†æÎÕØ×ÙÂÇñÿý‰ûý°ÿûÿ£éóð¦ñïú¬¤ÍÀÄÅÃÁÀ¼ÅÙâìïêìòƒñðú°ÿûÿ¡)ç©æäóôìîíëèåáÝÔÎÔßöîñ¹ÿûÿ¡'«èååæååäáßÚÖÑËÉÎ×ñõûýþ¶ÿûÿ¡'®èçæåãàÜ×ÑÌÃÈÌÑÖùÿüþµÿûÿ¡'®èçæåãàÜØÒËÆ¾ÍÍnÿüþ€ÿþÿþûÿûÿ¡'®èçææäáÝÙÓÌÆ½ÆÏÈJiÿüþ³ÿûÿ¡'¯èçæäâßÚÔÍÆ¿¿ÐÉÎLhÿüýÿçÕÙˆØÙÓú¾H]cŒ`ÿûÿ¡'¯èçæåãßÛÕÎÇÀºÑÊÉÌJhÿûÿÖ¸¾ˆ½¾¸èýv‹ÿûÿ¡'¯èçææãàÜ×ÐɸÎÑÉÉÍJhÿÿؾÈ þçÿêµG‰ÿûÿ¡'èé€èé‹èçæäâÝØÒÊøËÖÎÊÉÍIgÿּˆÁ ½çÿö©Ãoˆÿûÿ¡'éé€èééèéèéèèéèééè€éè€éèééèéèéèèéèèéé€èççæãßÚÓÌŹÈÚÑÏÊÉÍIl伉Á ½èÿÿׄĔ‡ÿûÿ¡'¯éèèçæãàÚÔÍÆºÇÞÕÒÏÊÉÍIQËÁÀ‡Á ½èÿÿú°‘¸”†ÿûÿ¡'°éèèçäáÜÖÏȼÄáØÖÒÏÊÉÍIOËÁÀ†Á ½èÿýÿΞ”µ•…ÿûÿ¡'±éèçäáÝ×ÐȽÁãÝÙÖÒÏÊÉÌHOËÀ¿…Á½èÿýÿé™›”´•„ÿûÿ¡'éê’éêéê…éêŽéèçåâÝØÐÉ¿ÂçáÝÙÖÒÏÊÉÌHOÍÄ¿„Á½èÿþÿþ´š¢”¯¬‚ÿ ûÿ¡'êêéêêé‚ê éêêééêêééêé„êéêêééêééêˆéèçæãÞÙÒÊÀÂéåáÝÙÖÒÏÊÉÌG;¹Ç¾ƒÁ½èÿþþÿÍ¡¨–­¯ÿûÿ¡'êêé£êéƒêééèæãßÚÓËÁÁëéåáÝÙÖÒÏÊÉÌH*ºÇ¾‚Á½èÿþþÿíž—Ÿ­¡¿É\€ÿûÿ¡'ŸêéèåáÞÚØ€Õ$רÚÝàãåçèèçäàÚÓÌÂÁííéåáÝÙÖÒÏÊÉÍJ*ºÇ¾Á½èÿþÿÿþ¯ËíùþýüÿÊÿûÿ¡'ë›ê2éæàÙÑÈ¿¶®§£¢£¥©¯´»ÂÉÏÖÝáâàÚÔÌÃÀïñìéåáÝÙÖÒÏÊÉÎM*ºÇ¾€Á ½èÿþÿþÿÅåÿþ€ÿüÿå+ÿûÿ¡'êëêëê€ëƒêëˆêMéãÚÎÀ¯š„p_TLGHBFPQYet†˜ªºÆÏÕ×ÔÌÄÀðõðìéåáÝÙÖÒÏÊÉÎP*ºÇ¾ÁÁ½èÿþÿýÿاçûÁÈØðûÿÍÿ ûÿ¡'ëëêëëê€ëê€ëêêëêëêëêOéäÚɵ—uVC:54//*&#+-&,)).6Hf‡¥¶ÀÆÄ½·ðøóðìéåáÝÙÖÒÏÊÉÏR*ºÇ¾Á½èÿþÿþÿðœ›ÚÀ ®ãÿûÿ£ÿûÿ¡(—ëçÞ͵bB784*€> "'(# %Dq”¢¦¡›îüöóðìéåáÝÙÖÒÎÊÈÐV*ºÇ¾Â½èÿþÿòìÿÆ”»ÿøô×À¶ÅÆÿûÿ¡(•ë êåØÁg>6;0€ €8$!;Zhg^åÿøöóðìéåáÝÙÖÒÎÊÈÐZ*»Ç¿½èÿþÿøõÿý³¯þÿ庾¸‰·(ÿ ûÿ¡(ììëëìëì‚ëì„ëêäÓ·†J3<44Pcntvwtm`K.€5 $+35âÿúùöóðìéåáÝÙÖÒÎÊÈÑ])»ÈºèÿþÿíîâþûÔñÿþÿýÿÌ¢Žÿûÿ¡'ììë„ìëˆìëåÒ³x=4?%Km|„‰Ž‘€”’Žˆ~lH€((-.58âÿüüùöóðìéåáÝÙÖÒÎÊÇÑ`)¼ÂåÿþÿÜîùþþ€ÿÕ¿ÂÅ­…¿ÿûÿ¡(“ìGçÕ´u77=>l}†‘›¤ª¯±³³±­§’†rG !1:9Þÿúûù÷õòïëèäàÝÙÕÒÎÊÇÒa*¶íÿÿçíÿþ€ÿ ýýé¶™š Œ·fÿûÿ¡(’ìéÚ»z67<Sv‘ ¬µ¼ÁÅÈ€É ÆÃ½µ§–†j-€$"Üÿýÿ%üøôïëçãÞÚÕÑÍÉÆÒc%ÜÿýÙïýþúáèªþД¡£’˜¤ÿûÿ¡(íí‚ìííìíí€ìíì&ëáÅ=1; Wv†šª·ÂÊÐÕØÙÚÛÚÙÖÓÎÆº¨’|F€,“²«¬­ÃÏÕÚÝßßáÞÜÛÛÚ×ÔÍÈÑc7ìòúÿÿðïÌÕØ×ùÍ¥žœ¸ÿûÿ¡(‘íçÑ¥N,9+It‡Ÿ±ÀÌÕÛàãåæ åäáÝÙÒȶ…Q€€)0j„˜¢¨©ª«¬®±´¹¿ÅÊÍÓwF¼üûû÷ò÷ö×¾ÿþ÷¶™¡•ªÿûÿ¡(íëÞ¼p-35&l‚Ÿ´ÅÒÜâæéëë‚ì ëêèåàÚÐÀ¥ˆN€€) l‡ž¨®¯®¬«ª¨§¥¤¤¨°À×l9ÙëÿöñþøîóÿÛ–¢ ¤–’ÿûÿ¡(íîŽíèÏ›>+4&Nz˜²ÆÕàæéìì†í ìëéåßÕŦ…9)d‡¡­´µ´³²±±¯®­«ª¦£¶Ñ8Göýø÷ÿþñýÿ𫛟¢œ’ÿûÿ¡(íîí€îí€îíîîíîíà½m*02d‡ªÂÔáçëìíî€íîí ìêçáØÅ¡u€'Y‡¤³º¼¼»º¸·µ´³±¯®­£ÆÒÿýÿýñüþÿüÛØ¥ž¡žÿûÿ¡(îëÖ¥C'/-"r•¸ÍÝçëíŒî íëèãØ½–I&Oˆ§¹ÂÅÄÃÂÀ¿½¼º¸¶µ³°±¹¡ÿúÿøèÿýÿ֜⤥ ˜ÿûÿ¡(îè̆)).",zŸÂÖãëíŽî5íìèãÓ­t Fˆª¿ÉÍÎÌÊÉÇÆÄ¿½»¹·´Ä1¡ÿúÿíèÿüÿˢ̧Ÿ—ÿûÿ¡(„îï„îïîïäÂm$(2€§ÉÛçíîïŽî4íëèàÀ- AŠ­ÅÏÕÖÔÓÒÐÎÌÊÈÆÃÁ¿¼É8¡ÿúÿÓÊÿýÿæÚµ¥žšÿûÿ¡(ïïî‡ïîïïîîà¹X""5‚«ÍÞéî…ïîïîîïï€î3íëæÎ¢CC‹±ÊÕÜÞÜÛÙØ×ÕÓÑÎÌÊÇÃÎD¡ÿúÿÆÁÿöðÿ䣢œžÿûÿ¡(ŽïîݱJ ,«Ïàêîï4îîíê׫T KµÎÛâãââáßÞÜÛÙ×ÕÒÏÌÓR¡ÿûÿ³¦þìéÿÑš ¢ž—ÿûÿ¡(ïðî‹ïîÚ«B!" u¥Ìàêîƒïð‹ï2îîܲ[Y“ºÒßæèççæåäãáßÞÜÚØÖØQ ÿúÿ¶©ÿööÿº™ £’¢ÿ ûÿ¡(ððïðï€ðïï€ðïïðïîÙ©:Z™ÃÝéî€ï‚ð€ïðïð‚ï1îÞ´[k™ÀÕâêìëëêéèèæåäâáßÝÜPŸÿùÿÇÏÿúÿŸ ‹½ÿûÿ¡(ŽðïÙª: (ƒ­ÒåíïïðïŒðïÞ´X+|¡ÅØåìîî€íìëëééèæååßV¤ÿûÿùûýÿí¯Ÿ›¢Œ¥ÿûÿ¡(ŽðïÛ¯A  €@‘¸Ùèîï’ðݯP$ U‰®ËÝèîïïî€íìëêééåLQ´íèÿþþÿô¦› ›ŸŽÎ&ÿûÿ¡(ðñðñƒðñðñððñðïÞ¶R F“¹×èîïðñðñ€ðñðñïØ§C0v—ºÑáëïð€ïî€íëoœ»Îßëðò–ó)¡ÿûšÿûÿ¡)ôôóô†óôô€óô€ó òîéßϵš~I€‡ !# "4d—¹Îáìñ€óôóôóô€óôóô…óôó)¡ÿûšÿûÿ¡)„ôó‹ôóòîêáÓ¿¥qEƒ€"! -bš½Ôæïòó„ôó†ôóóôô)¡ÿûšÿûÿ¡)”ôóòïëäÙɵŸŒvR&ƒ€ ! -p«Èàíòó‘ô)¡ÿûšÿûÿ¡)ôõ”ôòðíæÞÓŲŸŽ}_6…€!G˜¿ÛìñóŽôõõ)¡ÿûšÿûÿ¡)õõô€õôôõôƒõô„õôôóòîêäÜÒŶ¤“„kE…/‰»Øëòóô€õôõõôõ ôôõôõõ)¡ÿûšÿûÿ¡)˜õôóñíéãÜÓÉ»ª™‰uS(……¹ÙëòôŽõ)¡ÿûšÿûÿ¡)õö—õôôóñîêäÞÖÌÁ°Ÿ}`7…  ‰¼ÝíóôŠõôöõ)¡ÿûšÿûÿ¡)ööõööõõ‚öõ€öõõöõööõôòñðîíêæáÙÐŶ¤”„lF„  +–Ãâïóô€öõö€õöõöö)¡ÿûšÿûÿ¡)–öôñëäÝ×ÔÓÕØÛàãäáÜÔɼ«šŠvT(…  I¦Íçñô‰öõöö)¡ÿûšÿûÿ¡)”ö ôïå×ȶ¤•І™¨¸ÆÑÚáâÞ×ÎÁ± ~b8„ qµÚíóõ‹ö)¡ÿûšÿûÿ¡)ö÷…ö÷÷ö÷€ö÷÷€ö#òçÕ¾›tUE;:057ASr˜¸ËÙãäáÚÑÆ¸¥”…lB† +—Åäðôö÷öö÷€ö÷‚ö)¡ÿûšÿûÿ¡)‘÷&õï߯žhB972*'!!"##/V¹ÏáéèãÝÖ˽¬™‡l5ˆg±×ìóöŠ÷)¡ÿûšÿûÿ¡)÷ õîÚº‚F8:)ƒ#a¥ÆßëíêæàØÏÁ®™„Y…/™ÆåðõŠ÷)¡ÿûšÿûÿ¡)øøŒ÷+øöî׳o9;- )8:0  >—ÂÞíñðíèâÛÐÁª’r*„ w¶Üíô÷ø„÷ø*¡ÿûšÿ ûÿ¡)øø÷øø÷÷€ø÷ø÷€ø-÷÷ðÚ³j5=;_t„†„~qX2 )’ÁàïóôòîêäÛ͸œ8„P¥Ïèòö÷ø÷€ø÷øø)¡ÿûšÿûÿ¡)Žø-óà»o3<2j€‰‘™ž¢¢Ÿš“ˆo:.™Åäñõöõóïêâ×ä†<ƒ-”Ããðö†ø÷øø)¡ÿûšÿûÿ¡)øù‹ø/öéÇ‚69Bz†•£®·½ÀÁÀ¼µ©›Œ_C¨Îêóö÷÷õóîèÝÉ©†3‚·Ýíõ‰ø)¡ÿûšÿ ûÿ¡)ùùøøù€øù„ø0ñÖŸB3+8z‰Ÿ¯¼ÆÎÓר×ÕÑÊ¿«–f mºÜïõ÷øø÷õñëàÌ©‚l­Öêóøùøøùøøùùøùø*¡ÿûšÿûÿ¡*ùùø‰ù1öå½c,7 k†¡µÅÒÜâæèééçäàØÌµ˜O-¡Ìéò÷ùùøøöóíâɤf‚X¤Ïçòøˆù*¡ÿûšÿûÿ¡*Œù%òÕ–71&=~™´ÈØäëïòôôóðíêçáÒ±‚ ‚¿áïöø€ùø÷ôîáÁ—9IÈäñ÷ˆù*¡ÿûšÿûÿ¡*ùúŠù>êÂg&2Yˆ«ÆØçðô÷øöñæÞÙØÛßßÇ›>k¶Ùëôøùùúùù÷ôíÚ²s =—Ãâï÷†ùúù*¡ÿûšÿûÿ¡*úúù†úEùú÷ß©@(-h“¹ÒäðöøùõëÖ¾ŸŒ‘ªÄÑ˧P d°Ôèóøúùúúùù÷ôéÉš0 5’¿ßî÷ùùúùúùúú*¡ÿûšÿûÿ¡*‹ú&ôÕŒ()&oœÄÜëõùù÷é΢c?0*6i¬·ŸSj®Ñæòùƒúù÷ñܱ[ 2޼Þí÷ˆú*¡ÿûšÿûÿ¡*‹ú&ïÉo(r¡Ëáï÷ùùïÔK3:4)F€Ex¯Ñåñø„úùöèÂ| 2ºÝìöˆú*¡ÿûšÿûÿ¡*‹ú&ê¿Y'p£Îäñøúøä¸S/<;8& Kd7 ˆ²Óäñù„úùøðÎ’"  4ºÜìöˆú*¡ÿûšÿûÿ¡*‹ú&æ¶H#g¢ÎåòùúõÛ”(,4=0L.:—¸Õåòù…úùôÖŸ6:»Üëöˆú*¡ÿûšÿûÿ¡*Šú'ùâ¯=XžÊäñùúó×€=g ÁÙèôù…úùöÚ¤=F’¾Üìöˆú*¡ÿûšÿûÿ¡*Šúùá¬7?–Ããðøúô׊  "-‡©ÉÝëõù†ú÷Ù¡7U—ÂÝí÷ˆú*¡ÿûšÿ(ûÿ¡*ûûúúûûúúûûúúûùá­9#ˆ¹Þï÷úöÛ©%€i”¶Ñâï÷úúûû€ú"ûúûôÔ”5#( gÇàîøúûúûúúûúúûû*¡ÿûšÿûÿ¡*ûûúú†û'ùâ±A  n­×ìöú÷åÁrT…¤ÄÚèóùúûúûïÉz&(+ y¤Ìâðù…ûúûû*¡ÿûšÿûÿ¡*Šû&úå¹HHÊçôúùîÓ­` Q}˜·Ðâîöú†ûùæ¶X'-":†¯Òåòùˆû*¡ÿûšÿûÿ¡*‹û%êÀ^ ‚¶ÞðøùôåÇ¥r0 )_}”±ÉÜêóùú†ûõÖ—7(0\‘º×éõúˆû*¡ÿûšÿ ûÿ¡*ûüûûüûüüû€ü&ûûîÉw IžÉéöù÷ðàŪ‘vd`jz‡š±ÆØçñ÷ú†ûúé¿i+0)$xžÅÝì÷úüü€ûüûü*¡ÿûšÿûÿ¡*üüû‚üûü(ûóÒ” n¯×ï÷øõíà͸§œ––ªºÊÙæðöúûüüû‚üûóÕ™>+4Sˆ®Ïãðùûüûƒüûüü*¡ÿûšÿûÿ¡*‹ü#÷Ü­8†ºßóøøôíäÙÎľ¾ÂÉÓÝèðöúû…üû÷â¶`-5))v˜¾×éôú‰ü*¡ÿûšÿûÿ¡*‹ü"ùç¾g0”ÁãóøøõðéãÝÙØÚßåìò÷úû…üûøèÄ~524 aˆ¬Ëàîøû‰ü*¡ÿûšÿûÿ¡*üý‡ü#ýüúðÌ  ;™Ããôøù÷ôðíëêëîòõùúû€üý€üýüøéÉA1;L~¿×èóúüýüýƒü*¡ÿûšÿ*ûÿ¡*ýýüüýýüüýýüüýýûõÙ§A  ;•Àßòùûúø÷øùûûüü€ýüûöæÇ’H5>=w’´Îáïø€üýýüýýüýüüýý*¡ÿûšÿûÿ¡*ýýüˆý üùãµV  €  3‰¹×ì÷û…ü…ýüùïܽ‡E6=9tŒ¬ÆÛëõúüŠý*¡ÿûšÿûÿ¡*‹ýüúé¾c  !l¨ÈÞî÷û‰ýû÷îàʦn<:9@tЍÂ×çòùû‹ý*¡ÿûšÿûÿ¡*ýýü‰ýüíÃl  Cƒ­ÈÚçðöùû€üûù÷óíä×Ũ}N8=. Qx‹§¿Ôäð÷ûüˆýüþý*¡ÿûšÿûÿ¡*ýþ‹ýðÇo€0!Jx¶ÇÒÙÞáâáßÛÔ˾«nM<;5*e‘ªÀÓãïöûü„ýþýüþý*¡ÿûšÿûÿ¡*þþ€ýþþýþýþýþòÌsƒ* #6Smƒ”£¥£”…taM?:7/Sy†™¯ÃÔãîöúý€þýý€þ ýþýþý*¡ÿûšÿûÿ¡*þþýŠþ ôÕŠ '!#%(16>GGEB>:641* !Pv…’¥·ÈØåïöûüýŠþýþþ*¡ÿûšÿûÿ¡*þøÞ·M3CR\cge[?! !‚%! 9`|‰’¡±ÁÏÜèñ÷ûýþ*¡ÿûšÿûÿ¡*þûìÒ¸‹ˆ‰ŒŽŽŠ…zhP9%‰.Hc{‰˜¤²¾Ë×ãìóøüýþ*¡ÿûšÿûÿ¡+þ4üõçÔö±°±µ¹¸µ­£™‘ˆth]SJA=<==?DOYer‰•𢭷ÁÌÖàéñöúüýþÿþ*¡ÿûšÿûÿ¡*þÿ‹þ2ýùóêà×ÑÏÐÒÔÕÔÐËù¯¦ž™•’’“•˜šœ ¥«²¹ÁÉÑØáéïõùüýþÿþþÿÿƒþÿþÿÿ*¡ÿûšÿûÿ¡+ÿÿƒþÿÿ€þÿ€þûøóíèåäåçèéèæâÞÙÓÍÆÀ»¶²°®¯°²µ¸»¿ÄÈÍÒØÞäëðõùûýþþÿþþÿÿƒþÿ þÿþÿþÿþ*¡ÿûšÿûÿ¡+ÿÿþ‚ÿþ„ÿþýüú÷õóóôö#õòïëçãßÛØÕÒÐÎÍÌÌÍÍÎÐÑÔÖÚÝâæëïó÷úüýþþ‚ÿþ€ÿþþÿÿþ‚ÿ þÿþÿÿ+¡ÿûšÿûÿ¡+Žÿþþý‚üý üûú÷õòðíëèæäãââááââäåçéìïñô÷úûýþþ˜ÿ+¡ÿûšÿûÿ¡+œÿ þýýüûùøöõôó‚ò óóôö÷ùúûüýþþ›ÿ+¡ÿûšÿûÿ¡+ ÿþý†üýý€þ ÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡*Öû*¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡Ö ¡ÿûšÿûÿŸÖŸÿûšÿûÿŸÖŸÿûšÿþÿðÕÙÖØÙÕðÿþÿÿšÿþÚýþÿÿŠÿÿþý©ÿ ûÿZ§ÿúýþýþýþþ¿ÿýÿÔËÿý¨ÿýÿˆîÈÿûÿ™Úþ¨ÿûÿW†æÎÕØ×ÙÂÇñÿý‰ûý°ÿûÿ£éóð¦ñïú¬¤ÍÀÄÅÃÁÀ¼ÅÙâìïêìòƒñðú°ÿûÿ¡)ç©æäóôìîíëèåáÝÔÎÔßöîñ¹ÿûÿ¡'«èååæååäáßÚÖÑËÉÎ×ñõûýþ¶ÿûÿ¡'®èçæåãàÜ×ÑÌÃÈÌÑÖùÿüþµÿûÿ¡'®èçæåãàÜØÒËÆ¾ÍÍnÿüþ€ÿþÿþûÿûÿ¡'®èçææäáÝÙÓÌÆ½ÆÏÈJiÿüþ³ÿûÿ¡'¯èçæäâßÚÔÍÆ¿¿ÐÉÎLhÿüýÿçÕÙˆØÙÓú¾H]cŒ`ÿûÿ¡'¯èçæåãßÛÕÎÇÀºÑÊÉÌJhÿûÿÖ¸¾ˆ½¾¸èýv‹ÿûÿ¡'¯èçææäàÜ×ÐɸÎÑÉÉÍJhÿÿؾÈ þçÿêµG‰ÿûÿ¡'èé“èééèé€èéèéèèçæåâÞØÒÊøËÖÎÊÉÍIgÿּˆÁ ½çÿö©Ãoˆÿûÿ¡'ééèƒé€è€éè†é‚è‚éèèéèéèé‚èé€èççåãßÙÓÌŹÈÚÑÏÊÉÍIl伉Á ½èÿÿׄĔ‡ÿûÿ¡'ééè„éè™éè‡éèèçæäàÚÔÍÆºÇÞÕÒÏÊÉÍIQËÁÀ‡Á ½èÿÿú°‘¸”†ÿûÿ¡'°éèèçäáÜÖÏȼÄáØÖÒÏÊÉÍIOËÁÀ†Á ½èÿýÿΞ”µ•…ÿûÿ¡'±éèçåáÝ×ÐɽÁãÝÙÖÒÏÊÉÌHOËÀ¿…Á½èÿýÿé™›”´•„ÿûÿ¡'‰éê‘éêéèçåâÞØÑÉ¿ÂçáÝÙÖÒÏÊÉÌHOÍÄ¿„Á½èÿþÿþ´š¢”¯¬‚ÿûÿ¡'éêé„êééêêééƒê ééêéêéêêééêê„é€êéê€éèèåãÞÙÒËÀÂéåáÝÙÖÒÏÊÉÌG;¹Ç¾ƒÁ½èÿþþÿÍ¡¨–­¯ÿûÿ¡'êêé„êéˆêéê€é„êééèæãßÚÓËÁÁëéåáÝÙÖÒÏÊÉÌH*ºÇ¾‚Á½èÿþþÿíž—Ÿ­¡¿É\€ÿûÿ¡'ŸêéèåáÞÚØ€Õ$רÚÝàãåçèèæäàÚÓÌÂÁííéåáÝÙÖÒÏÊÉÍJ*ºÇ¾Á½èÿþÿÿþ¯ËíùþýüÿÊÿûÿ¡'ëëšê2éæáÙÑÈ¿¶®§£¢£¥©¯´»ÂÉÏÖÝáâàÛÔÍÂÀïñìéåáÝÙÖÒÏÊÉÎM*ºÇ¾€Á ½èÿþÿþÿÅåÿþ€ÿüÿå+ÿûÿ¡'êëêë‚êë€êëêëëƒêPëêêèäÛÏÁ¯š„p_TLGGBFPQZet†˜ªºÆÏÕ×ÓÍÄÀðõðìéåáÝÙÖÒÏÊÉÎP*ºÇ¾ÁÁ½èÿþÿýÿاçûÁÈØðûÿÍÿ ûÿ¡'ëëêëëêëë€ê‡ëêëPêéäÙɵ—uVC:54//*&#+-&,)).6Hf‡¥¶ÀÆÄ½·ðøóðìéåáÝÙÖÒÏÊÉÏR*ºÇ¾Á½èÿþÿþÿðœ›ÚÀ ®ãÿûÿ£ÿûÿ¡(–ëêçÞÍ´bB784*€> "'(# %Dp”¢¦ ›îüöóðìéåáÝÙÖÒÎÊÈÐV*ºÇ¾Â½èÿþÿòìÿÆ”»ÿøô×À¶ÅÆÿûÿ¡(–ë åØÁg>6;0€ €8$!;Zhg^åÿøöóðìéåáÝÙÖÒÎÊÈÐZ*»Ç¿½èÿþÿøõÿý³¯þÿ庾¸‰·(ÿûÿ¡'ëìëì€ëìŒëêåÓ·†J3<44Pcntvwtm`K.€5 $+35âÿúùöóðìéåáÝÙÖÒÎÊÈÑ])»ÈºèÿþÿíîâþûÔñÿþÿýÿÌ¢Žÿûÿ¡(ììëŒìë€ìêåÒ³x=4?%Km|„‰Ž‘“”“‘ŽˆlH€((-.58âÿüüùöóðìéåáÝÙÖÒÎÊÇÑ`)¼ÂåÿþÿÜîùþþ€ÿÕ¿ÂÅ­…¿ÿûÿ¡(’ìHëæÕ´u77=>m}†‘›¤ª¯±³³±­§‘†rG !1:9Þÿúûù÷õòïëèäàÝÙÕÒÎÊÇÒa*¶íÿÿçíÿþ€ÿ ýýé¶™š Œ·fÿûÿ¡(’ì"éÚ»z77<Sv‘ ¬µ¼ÁÅÈÉÉÈÆÃ½´§–†j-€$"Üÿýÿ%üøôïëçãÞÚÕÑÍÉÆÒc%ÜÿýÙïýþúáèªþД¡£’˜¤ÿûÿ¡(ííìí„ìííì&ëáÅŒ=1; Wu†šª¸ÂÊÐÕØÙÚÛÚÙÖÓÎÆº¨’|F€,“²«¬­ÃÏÖÚÝßßáÞÜÛÛÚ×ÔÍÈÑc7ìòúÿÿðïÌÕØ×ùÍ¥žœ¸ÿûÿ¡(íììçÑ¥N,9+It‡Ÿ±ÀÌÕÛàãäæ åäáÞÙÒȶ…Q€€)0j„˜¢¨©ª«¬®±´¹¿ÅÊÍÓwF¼üûû÷ò÷ö×¾ÿþ÷¶™¡•ªÿûÿ¡(íëÞ¼p-35&l‚Ÿ´ÅÒÜâæéëë‚ì ëêèåàÚÐÀ¥ˆN€€) l‡ž¨®¯®¬«ª¨§¥¤¤¨°À×l9ÙëÿöñþøîóÿÛ–¢ ¤–’ÿûÿ¡(íèÏ›>+4&My˜³ÆÕßæêìì†í ìëèåßÕŦ…:)d‡¡®´µ´³²±±¯®­«ª¦£¶Ñ8Göýø÷ÿþñýÿ𫛟¢œ’ÿûÿ¡(îî€íîí€î€í€îíîíà½m*02d‡ªÂÔáçëìíîî€íîîííìêçáØÅ¡u€'Y‡¤³º¼¼»º¸·µ´²±¯®­£ÅÒÿýÿýñüþÿüÛØ¥ž¡žÿûÿ¡(îîíŒîëÖ¥C'/-"q•¸ÍÝçìíŒî íëèãØ½–I&Oˆ§¹ÂÅÄÃÂÀ¿½¼º¸¶´³°±¹¡ÿúÿøèÿýÿ֜⤥ ˜ÿûÿ¡(îè̆)).",zŸÂÖãëíŽî5íìèãÓ­t Fˆª¿ÉÍÎËËÉÇÆÄÂÀ½»¹·´Ã1¡ÿúÿíèÿüÿˢ̧Ÿ—ÿûÿ¡(îï„îïîîï‚îäÂm$(2€¨ÉÛçí„îïˆî4íëèßÀ- AŠ­ÄÏÕÖÕÓÑÐÎÌÊÈÆÃÁ¿»É8¡ÿúÿÓÊÿýÿæÚµ¥žšÿ ûÿ¡(ïïîïïî‡ïîïà¹X""5‚«ÍÞéî‚ïîî‚ïîïîï4îíëæÎ¢CC‹±ÉÕÝÝÜÛÙØÖÕÓÑÎÌÉÇÃÎD¡ÿúÿÆÁÿöðÿ䣢œžÿûÿ¡(ŽïîݱJ ,«Ïàêîï4îïíêÖ¬U KµÎÛâäâááßÞÜÚÙÖÕÒÏÌÓR¡ÿûÿ³¦þìéÿÑš ¢ž—ÿûÿ¡(ðŽïÚ«B!" u¥Ìàêï5ðïïîîܲ[Y“ºÑßæèèçæåäâáßÞÜÚØÖØQ ÿúÿ¶©ÿööÿº™ £’¢ÿûÿ¡(ððïïðïððïððïðïîÙ©:Z˜ÃÝéîïðï€ðïïðïïð€ïð4ïðïîÞµ[k™ÀÕâêìëëêéèççåäâáßÝÝPŸÿùÿÇÏÿúÿŸ ‹½ÿûÿ¡(ŽðïÙª9 (ƒ­Òåíï’ðïÞ´X+|¢ÅØåìî€í€ìëéèèæååßV¤ÿûÿùûýÿí¯Ÿ›¢Œ¥ÿûÿ¡(ŽðïÛ¯A  €@¸Øèîï’ðݯQ$ U‰®ËÝèíïï‚îííìëêéêåLQ´íèÿþþÿô¦› ›ŸŽÎ&ÿûÿ¡(ðñðñ€ð$ñððññððññððÞ¶R F“¹×çíïðñððñð€ñ€ð€ñ€ðñïØ§C0v–ºÑáëïðï€î€íëoœ»Îßëðò–ó)¡ÿûšÿ ûÿ¡)ôôóóôŒó ôóòîéßϵš~H€‡ !# "4d—¹Ïáìñò†óô€óôóóôóôó)¡ÿûšÿûÿ¡)ôó€ôóòîéáÓ¿¥qEƒ€"! -bš¾Ôæïòóó…ôóóôôóôôóôóôô)¡ÿûšÿûÿ¡)”ôóòïêäÙɵŸŒvR&ƒ€ ! -q«Èàíòó‘ô)¡ÿûšÿûÿ¡)ôôóôõôóóðìçÞÓŲŸŽ}_6€‡ F˜¿Ûìòóôõôôõ‹ô)¡ÿûšÿ ûÿ¡)õõôõõôõõô€õôôõõô€õ€ôõôôóòîêäÜÒŶ¤“„kE‡.Š»Øëñóôƒõô‚õ ôõôõõ)¡ÿûšÿûÿ¡)˜õôóñíéãÜÓÉ»ª™‰uS'‡…¹Ùëòôôõ)¡ÿûšÿûÿ¡)‚õö”õôóñîêåÞÖÌÀ°Ÿ}`7€†  ‰¼Ýíòô‹õöõ)¡ÿûšÿûÿ¡)ööõõööõöõõöõööõöõ…öõôòñðîìêæáÚÐŶ¤”„lF…   +—Ãâïóõööõöõöõõöõõö)¡ÿûšÿûÿ¡)–öôñëäÝ×ÔÓÔØÛàãäáÜÔɼ«šŠvT(… H¦Íèñôõ‹ö)¡ÿûšÿûÿ¡)”ö ôïå×ȶ¤•І™¨¸ÆÑÚáâÞ×ÎÁ± ~b7„ rµÚíóõ‹ö)¡ÿûšÿûÿ¡)ö÷‚ö€÷ö÷ƒö$õòçÕ¾›tUD:9.46@Sr˜·ËÚãäáÚÑÆ·¦•…lB† +—Ååðôö÷ö÷€ö ÷ö÷öö÷÷)¡ÿûšÿûÿ¡)‘÷&õï߯ŸhB861)& !"".V¹ÏáèèãÝÖ˽¬™‡l5‡g°×ìóö‡÷ö÷÷)¡ÿûšÿûÿ¡)÷ õîÚºE79(ƒ"a¥ÆßëíêæàØÏÁ®™„Y…/™ÆåðõŠ÷)¡ÿûšÿûÿ¡)÷*öî׳o79, )8:0  =–ÁÞíñðìèãÚÐÁ©’r*„  w¶Üíô÷ø÷÷øø„÷)¡ÿûšÿûÿ¡)øø÷€ø€÷‚ø÷+ðÚ´j4<;_t„†„~qX2 )’ÀàïôôòîêäÛ͸€8„P¦Ðèòö…ø÷÷øø)¡ÿûšÿûÿ¡)Žø-óà»o2;2j€‰‘™ž¢¢Ÿš“ˆo9.™ÅäñõöõóïêãÖÃ¥†<ƒ-”Ããïö‰ø)¡ÿûšÿûÿ¡)ø!öèÇ‚48Cy†•£®·½ÀÁÁ¼µ©œŒ_C¨Îêó€÷ õóîèÝÉ©†3‚·Ýíõ†ø÷øø)¡ÿûšÿûÿ¡*ùù€øù‚ø5ùøøùøñÖŸA1*8y‰Ÿ¯¼ÆÎÓÖ××ÕÐÊ¿«–g mºÜîõ÷øø÷õñëą̀ƒ l­Öêôøùøøù‚øùù*¡ÿûšÿûÿ¡*Œù0öå½c+6 k† µÅÒÛâæèééçäàØÌµ—O-¡Ìèò÷ùùøøöóíâɤfƒX¥Ðçòøˆù*¡ÿûšÿûÿ¡*Œù%òÖ–60%=~™´ÈØäëðòôôóðíêæáÒ±‚ ƒ¿áïöø€ùø÷ôîáÁ—9IÈäñ÷ˆù*¡ÿûšÿûÿ¡*úúŠù&êÂf%1Yˆ«ÅØçðô÷ø÷ñæÞÙØÛß߯›>k¶Ùìõùú€ùø÷ôíÚ²s <—Ãâï÷†ùúù*¡ÿûšÿûÿ¡*úú€ù„ú)ùú÷ß©?',h“¹Óäðöøùõê׿ŸŒ‘ªÄÑ˧P d°ÓèóøùúùøôéÉ™0 5’¿àî÷úùúùúúùù€ú*¡ÿûšÿûÿ¡*‹ú&ôÔ‹'(%oœÄÜëõùù÷é΢c>/)5h­·ŸSj®Ñæñùƒúù÷ñܱ[ 2޼Þí÷ˆú*¡ÿûšÿûÿ¡*‹ú&ïÉo'r¡Ëáï÷ùùïÔJ293(F€Dx¯Ñåñø„úùöèÂ| 2ºÝìöˆú*¡ÿûšÿûÿ¡*‹ú&ê¿X&p£Îäñøúøä¸R.;:7% Kd6 ˆ²Óäñø„úùøðÎ’"  4ºÜìöˆú*¡ÿûšÿûÿ¡*‹ú&æ¶G"g¢ÎåòùúõÛ”'+3<0K-:—¸Õåòù…úùôÖŸ5:»Üëöˆú*¡ÿûšÿûÿ¡*Šúùâ¯=€XžÊäñùúó×€<g ÁÙèóù…úùöÚ¤<F’¾Üìöˆú*¡ÿûšÿûÿ¡*Šúùá¬7?–Ããðøúô׊‚ !-‡¨ÉÝëöù†úöÙ¡7U—ÂÝí÷ˆú*¡ÿûšÿûÿ¡*ûûùúƒûúûúùá­8#ˆ¹Þï÷úöÛ©% i”¶Òâï÷„úûúûõÔ”4"' gÇàî÷‚úû€úûû*¡ÿûšÿûÿ¡*Šû)ùâ±A n­×íöúøåÁrT…¤ÃÚèóùúûú„ûïÉz%'* y¤Íâðøûûú…û*¡ÿûšÿûÿ¡*Šû&úå¹HHÉçôùùîÓ­` Q}˜·Ðâîöú†ûùæ¶W&,!:†¯Òåòùˆû*¡ÿûšÿûÿ¡*ûüˆû&úêÀ]‚¶ÞñøùôåÈ¥r0 )_}”±ÉÜêóøú†ûôÖ—6'/\‘º×éôúˆû*¡ÿûšÿ=ûÿ¡*ûüûûüüûüüûüüûúîÉw IŸÊéöù÷ðàÆª‘wd`jz‡š±ÆØçñ÷úûüüûûü€ûùé¿i*/($xžÄÝí÷úûû€ü ûûüûüû*¡ÿûšÿûÿ¡*üüû‚üû€ü&ûûóÒ” n¯×ïøøõíà͸§œ––ªºÊÙæðöúûƒüûüûóÕ™=*3Sˆ®Ïãñùû…üûüû*¡ÿûšÿûÿ¡*Šü$ûöÜ­8†ºßóøøôíäÙÍľ¾ÂÉÓÝèñöúû…üû÷â¶`+4()v˜¾×éôú‰ü*¡ÿûšÿûÿ¡*‹ü"ùç¾f/”ÁãóøøõðéãÝÚØÚßåìò÷úû†üøèÄ~413 aˆ¬Ëàîøû‰ü*¡ÿûšÿûÿ¡*ýýƒüýýü úïÌ  ;™Ããôùù÷ôðíëêìîòõøû‡üøéÉ@0:L~¿×èôúˆüýü*¡ÿûšÿûÿ¡*ýýüƒý*üüýüýûõÙ§@ ;•Áßòùûúùø÷ö÷øúûûüüýüýý€üûöæÇ‘F4==w’´Îáï÷ûýüüýüýýüýü*¡ÿûšÿûÿ¡*ýýüˆý üùãµV  € 3‰¹Öì÷û…ü…ýüùïܽ‡D5<9tŒ¬ÆÛëõúü‡ýüýý*¡ÿûšÿûÿ¡*‹ýüûé¾c   m¨ÈÞî÷û‰ýû÷îàʦn;98?tЍÁ×çòùü‹ý*¡ÿûšÿûÿ¡*ýþŠýüíÃl Bƒ­ÈÚçðöùû€üûù÷óíä×Ũ}M8<- Py‹§¿Ôäð÷ûü‹ý*¡ÿûšÿûÿ¡*ýþ‹ýðÆo€5  Ix¶ÇÒÙßáâáßÛÕ̾«nL;:3*f‘ªÀÓãïöûüýþýýþ…ýþý*¡ÿûšÿûÿ¡*þþýþþýýþþýýþþ€ýòÍr„."6Rmƒ”¤¦£œ”†t`M>96.Sx†™¯ÃÔãïöúüýþýýƒþ ýýþýþþ*¡ÿûšÿûÿ¡*þ ôÕŠ '  "#'05=FFDA=9530) !Pv…’¥¸ÈØåï÷ûýýŠþýþþ*¡ÿûšÿûÿ¡*þøÞ·L3CR\cge[?! ‚ ‚$  9`|‰’¡±ÀÏÜèñ÷ûýþ*¡ÿûšÿûÿ¡*þúìÒ¸‹‰‰ŒŽŽŠ…zhQ9$‰.Hc{‰˜¤²¾Ë×ãìóøüýþ*¡ÿûšÿûÿ¡*þÿ‹þ4üôçÔö±°±µ¸¸µ­£š‘ˆth]SJA=<==?DOYer‰•𣭏ÁÌÖàéðöúüýŠþÿþÿþ*¡ÿûšÿûÿ¡*þÿ‚þÿ…þ6ýùóêà×ÑÏÐÒÔÕÔÑËù¯¦Ÿ™•’‘‘’“•—šœ ¥ª²ºÁÈÐØáéïõùüýþþÿÿ…þÿþþÿÿ‚þ+¡ÿûšÿûÿ¡+ÿÿþÿþÿþ‚ÿþþüøóíèåääçèéèæâÞØÒÍÆÀ»¶²°®¯°³µ¸¼¿ÄÈÍÒØÞäëðõùûý€þÿþÿþþÿÿþÿþþÿþÿÿþþÿþÿÿ*¡ÿûšÿûÿ¡+Œÿ þþýüù÷õóóôöôòïëçãßÛØÔÒÏÎÍÌ€ÍÎÏÑÔÖÚÝâæëïó÷úüý€þ‚ÿþþÿÿþƒÿþ€ÿþÿÿ*¡ÿûšÿûÿ¡+Žÿþþýýü‚ýûú÷õóðíëèæäãââááâãäåçêìïòõ÷úüýþþ‹ÿþ‰ÿ+¡ÿûšÿûÿ¡+œÿ þýýüûù÷öõôó‚ò óóôö÷ùúûýý€þšÿ+¡ÿûšÿûÿ¡+ ÿþý†üýý€þ ÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡*Öû*¡ÿûšÿûÿ¡+Öÿ+¡ÿûšÿûÿ¡Ö ¡ÿûšÿûÿŸÖŸÿûšÿûÿŸÖŸÿûšÿþÿðÕÙÖØÙÕðÿþÿÿšÿþÚýþÿÿŠÿt8mk@ O¢žŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ   ¡¢£¤§–j?  mÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýùÖM kþúûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûüþþÿþm lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿýüÿe lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþa lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýþn lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþým lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýn lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþým lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýn lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýn lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýn lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýo lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýo  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýp  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýr  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþt lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿw lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿz lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿ}  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿ lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿ‚ lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüÿ„ lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüÿ† lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüÿ‡  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüÿ…   lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüÿ   lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüÿƒ  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿi  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿó8   lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿœ  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÙ)  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿøI  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿ[ lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿi   lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿv  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿy  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿz   lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿv   lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿq  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿn lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿm  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿm  lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl kÿüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüÿk lÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿl \ÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏ\ $7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7$ ic08‘Ò jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ åÿ“ÏÁ$SÃP›9qsÆéŠy‰ (’²­÷XЗpÔ¬`yîfŸS‚º¦ÊŒ„jpwöÚP(óÅŸ¦ zF’ôí¿[ ÿgÊ‹îÀ:€œ0ãDzÅTfÅ&ÔÃê%#ZÉš,HÚ-b'ÆøŽC|~VÊfÄŒÈN[Tå3Bü®ö5ÏÁœ.TÚàõ†A¸ø§3Wh$ÿvíZ•[ý¯’osñ‹’ôL<‘zk‡8os㌵‰Í…!Ñî™rÿ‚zÒ-ùõ¤ÏÍ~gÐüÀD!H…èö½¡ñìJ{—4{?÷ýÕŒ$Q¿¹Ç•˜“–öñ…wÇ’Cq0?ƒãgÓI2±‘Î)]³ÛyHèú)jînûõ¤ÒJ%=d²I?(çÒMWÌ"7üóêýY>ÆáÒ„c°Æ¹©aGÚ~ »ºSÄÏ,hŠ8tK´¿‘ºå ˧ºU ä3æFìV½ùYKP_ʾìcóUV5J&÷En4ôŸŠ+Ðo° G­´«¦‹`Á1K(Áte‚c¸ÀBéЧRÙ´vÿIœšðõ,1: å¡—ÐKõKÚ/*3ž(AB3ªOF»a‚˜ÇpÁõÃí!ƒí$"íùð‰n ý$×Ttxû“6K©W,ºE ´Ê=ŸAZÓòŒ•U&r—.|XŸAªOéLf_{­˜.ö€Q3î©Þ î’•|F>å^åÎ^ô–ÙoAJ2Á‰”€$³¸N6.ð§>RÇàU€Ü~c@€Ëâz§ìa­Ku½css›^«sˆ:娛Ô#Abr<¬ec6µ=@o­Á[ $ÿq£›Ï¡J@!…R ©ë”ݬ+ÜìIa$Ê™¦D=KÑàê/ôÞÍ¥K{ÇáiÇá\ÇçXøþIis¨;"Ȫh:tÂë'°&ý\s¶36ÅÚ¿µQÚd× )=ÜÇy  &ð.%Éø_E©ì}èYa›ïð)¶PzŸ/8Ѿéîéw\a'üµ0+|ÌÈÈdZšÓörL]ð —~ú‚– mJ‘˜µ/A:­Ÿˆa2Lm›˜i¥Çq%º«Ÿà¸W7ßßÈODùzµjÊ#õ‚Wœ÷ãY³`·âH‚zÁ‘rÉ áS=¸w¥¸°àå¥ÜnilÔâ|-Âù²]GÔôêë¯_M4y} Ëú®šÞ¶Ä ÆèЪ£:±“µdèx/ø”7áÕË¢¢è—€Tè6ˆ²Ê0þ"‰apa€ÖËÆS ิ²¶µ¨Åá”âçÖ¨ž‹Ôn~Nð‰+/èšqÖ’QÚHѰL§‚†û»ÿ¤eߨBÃÚšñ赿m+aa@vŽW0|¾_²í-Ó8zHö·b#X¾O}ÍŽa½D°TfVXe¨{´s“Öô^_ŒVÇ`§A'[½ËF¿•è·V;"»¬œúÿkìGö^°+êÂZï™?$ƒè)ß­˜–¬è,æâÁ¿Ù$!ëèñݶ×Hh§ÉFÝÒ°À£€;K;P3‰Æ9ÓÑëY6îÇ!>™ë=Á~ìNåÐÉç  Ë9eÛŸ`&ôÈàAäŽûm¾¿Ø½*ÇO2Ñ Í ¶¢Ì8gyÞŠÿÀ^2ýÃý38Æë2Ðj[á¦Û‡ÂÁⳄªYèŠ)åV8¯æÍ­ Áõ1Ãídƒíh~Oô¦  e‘ «¿Jyñ}ø•îöÏÅe»4šY?ŸŒÔg¬¸µbØüÁ¨¼ˆÿ=Иš dPñ”†Nšœzªà Øÿ|[Ml`Ä’mýœÎÕâóÔëº!¿ˆ;µÿƒä­>K“ñLûXÜtéñ=„Zõ4Ú+è8}_Ý¿/¤µtÇïŒýÇXší^Ë*”¹°¯ìaåmMê`q.Á=ãÛa!×älñÌ$ìøuU¯Zëì_#¶mh+Öuÿ Å,sòñÔ¬¿/"‚—b±ù+÷Ç×gLiSpZnøâL› ÷xgÕ¨Ó÷ …è%íL OéÚ“·^^R/!mÿJ[(¯˜ßµ»MxÁyŸýÇòkæYö¼â=*?…Ï[°Þí8>¾ù$ˆ²Åjï£|%Çà?3x~ÀˆêüÞ“µW¬eÑ…°I†»ŒÅakf—ÎE©³ÛÐg(oÍÖ–;ìÄ/ä°¶òІˆüù¾WM„"RFϤªŽGC¿¸C{ì@÷‘¼ È$“÷œ"h8=1gŸÎ½*‰A/—A9a\D7«0‚ñX'Ó’·Z•»ÃÙBÙˆTÐçõAß;DØùÇu ©ê]Ù®q mƒq]Ý+~ɹ¸ýÝYBu¢ïêNeáó}––¼j¶ SÕÇáÑ4üú ‡á·€+üôTþfše[䬻EÏ?S(O£}’S£ŽîPŽE>š>Äì·Ïç* n²S¹GÌÇ]ø@ZqS=¶ÖQÁlH>~ $¨Äû°j¸õcæuÿV‰ŸÑXM¤½RJ* TÅÅ™-·âX0•,x¸ì"ž‡ ]B‘öÅ)â†B¥¥­á[-Šù’É ¹óx7fšXd–sRBŠ­ì‡?ÏP¤è‘{ñ…]`m8½ÍrÄ¡+ð8…Jä[·ß¹ ÑÏQs‘³ØqyŸ§ï9y°|þ7V-ÒkkŽî=9RïA%”$[i2û}*ñÀ?U¤)!KæPÄ-Lkª­K÷Ø`.hZ´5õ[ÖÜávªµX™[«(ð¥êÜ%NV…~µØ7€èŽ#W¤…®KÉd©¡2Ùâ/­¶j|®YÁ¯]’B'ÄÖ'¬ËŽFúÑ`¿mU &à»UìÐ'u­‹fÇØE3‹Zºâ>¯¦ð,IMüàîËn©%šWÊvåJûiPãëàÚšlu”ãV µš|H2…AÌK]qy îL±…1ùpvbá5¾Ý,È™ä¹;÷· ÔáÁyzóù­Æ>/¸uåœß[R†Yèò· œ©å½…4…ÝŽáß/´‹ª•!P”¶Ê‚|†ÈJ¢=_ÑŸepô³õ1²š]tî´G<ðÍªïŠ cáeuÚ…-mê&eÆnëiL\ÞQ"¸3áòìJ6ª<¶Yö/n$^®"o¢9Qˆp3¬Àˆ1)ô+«Ý!?ö>λe D`]2=`{—>‡M£ÎIs9E ¸¯8°d±=Ò·NÞʽ³è’.øŸJz Ž8Ž1ö¶Òa‘L ê’Ò†BWëŠÅZDÙÎFIôL‚$³iL›‘Nð„sSOãà+Š%8ÌYà“ 0Ðå~#.ýò+dsƒÞ$lغp–W*¦[— ‚æ0vŘHDZ_à EsúYÄ]½¹ ¸-¿kæ#§á|wm¬DÉ}Ï£·—¤kȯÅu]v'¦+–ÊûçÚÿ 3<^ÒÒßÚŽ ’øÎÕ×|™šN\§bºKç±5_ˆ€—Ñ=1›J Œ-TIŽ*ÎušU› \„^ÖDä’I$’I3ç·“%Z¸FwïûDõw„cRºº¤àJù?¡+ÎÜÅfIÑ-«<±•Ÿ™ÿHJYЍ–Ôr0ÄJR0ÿ˲,S·.lû:NæªWô›’I$’Haø¯ÒJ#ùJ-|/0ät·;eIe0…{hœ\jÄŽ‹-KóXtDpÍù×B{Öô^dÉ,/mçU­4*>r( $ùÒ fqXWÀûSÖOo}òAÂú«p-þH®Ø A·$’I ÿ1Q“Ù¾Rí¾3QEÑ/C.vL1 Ün0= .ÁAEƒÿ UûV°ñƒAB€mF©žß Æ8$¡ÎYøÃo1;&F”®¢©hŠÂd ”øÝø“ÈKõuf¦å(Ã<`d(^\a6Kæ• ö}Ýð1ÆÝg« r;‚ áÛ<û`NͦtEÉ}Gõ}PZ+0§KÆ6P—œÐ¾ÑÜö;{^73ŠQ@/9Ï3Â?º7=~:>`„üV*U&Æ7@“T莿—lé-v§|UƒøéÕ´Lk£Ï™o,hèôðØaä‚qD›âql;ßÍ?,N›Ì9äí†CÞ1´«S䘱Âmw´µ‰À}íæòGÿvagžÙ­ ßébY]z–ÈõbáÁÍiKÄ˰**U˜FsßúP[?EZøν­Q¤qÖåJiõëÁÆ_ß(€sÖµ‹Ðº¸‚fužrc¤ l¬?K“–ÜÃNÜD[AÙ«ð"ïæ]GqÞƒ¯$¹dÊLÀHìQ@~F=ä‘}E÷†ií¡ÔŽu?P¤ Ñ’“´ËF_Do[ÍO+5Šó‡ ÀÙàíP»M1¥-˜y¼róÆGqûG!Ò¼ÆÃâ7qü9ÕR ²¼`$ûÏÊÛÝŸ½j¯ã2 dhjËï¾é€%:¥Wº^2ÀLKóÃÿ{fÈþ™Õ¤e°Ê£2³¤×Xƒb6‹+A©à.§FfµááQ!6Ï ý‡4ÿ 'öšjã0ªOÉ~j¶_‹*v!CÀ©®ûê¿3)*̦+„°Ýô×߯+ŒE˜z:ïÀ$2¶ª«Q^Yî ú(ñh—®,¹`~Š2B+€SþLERž{.8ˆ2q¿wâ¼Ð7š” qÌ…uý±åF‚rXiû۬à ÂSBTŤƒX¦0Ç7E ° %´.*ʽphºÆ}ýSPè#`ðܳòXPz×€k'šbð\–¡“öÈTÊÁ£ jþáZ8ÓÁÍÍ®AÁõh„>ÝõiH¡ð\gAgÿ2ËöABe}à?0ýJ;CgÓqN¬¾€‰²ž,+A¸<œþ’n]žÀݺ"MºÒã]b¾©OŠ™ŽÅíÿphJ¨;BùÇ?ÿ|¥ <w÷ô°ñmÝ»e ÓÖSÌážv d¾ÅG³¾Ü(øûŸÒ†­{s‘²Èg/5ÈBã—ÅzO¼º»ŠC’yïÃ|*dR“µu–ųYÁºcçe˜øœÿtϲ#€ÖFÎÀÜ–ðý]Ymþ¿œ¢5ëôó~o2[KUéR­Aé ¡±!(¶­wgß±‘¹¦ó:ùÍŒÌqš ‚™Òæaì4÷ÝçýÇQ.Á ©R±|\/¦ba|ã°®ÿizšŠAðT¸ªXf†¿IOwyÈ/t¢REÛ²ª e™,,ž (˜Ä!ÿ$`ãÝÙµU«íØ!´ò÷Ù/5´r=nE•áó¶õ«XþŒÏÜãÇßÛ1 >_nzåfr½f+°/l¯DÄm‚4Ÿ–ШìïgÓ=Ï-¶²u€ÄÓrªcL¤cáÑóThaíl7¬ =º w¦¹êO³YÄôTs±,ÿWr-‡hA.Lp(¼1ü£±(ê¶»Hšö½ÅáqšáEÌì;rDü/ß[«bÌÿDŽî=Ä[¥Î§‘N~È °ÖÔ4¨'yÔÏŽÔðzÛgìÈ‚8¹«u¦ ÙšµÅ‚]ýRÿt¢::Œ8Œ¨ë›c°÷"Ãí§cð¤ ûVÀ)›Ó®®' Ç•W*Ãw&xáÏÕŸK†ôªWX„·^SåˆNÏÍoºCz¾ñ_bD]âJ©w諒T**ƒøáßîvÅ bTr~`2 rX(ÈfV¢KŒ#›[³áYãÛ·*ž"¯A[A¿D2-QµÂc'Màv͈$•3djin A­ÿ%»1¢¯ç+>S1ê½#°ñOgѪB½s±©çYÁ*€oœì /ùÈÀãüE@ýäáþf™¾hHlu0¬”ËäU’š5ü(}H@C™àØ hïé5 [S‚<ʹݿíá¯A^¼Stâ¾u:èDî·í#‹Hda‘¼íÚÔ2o×!1×÷  éËŒY (6ä’IEr?´nXòŠÑèrk1ÕO££Ni’9&ç¾éJ ŠƒÐ¢†å€1öB@úc×>;…r±„Í©2ÓÇ' Á}r–ˆúæ,¶õÛ×C¥c}3Íò–Ç yyÇáë%‡ª<~à>øsñèk­ê=ðKÚk|пÿO‚›8ÞßÝln?õ{ ãaMø±3²æ×±Œ-nÁzÅfÏ䮽®°¸j¾¢;Œúúz ŒÕÕ¾ºû¹ÿ~¦e‚;›æ^ ðDÉ\§ þy&d@óæ¤ô½4×~¼Ç·PÇí i…¥¤!uƒ-÷žÝ".©øØº/îÂÞÚ¾#ïLgïæâøvT°«Œ°i!:òRÓ *yA–ì;%6Z¾ë á.÷:aÅ–`¸Êa)݃~¬´~íoPžøÊöÉlW? 诼´“uÊ(Ðe{І ^W%¢ôÈ¡ž„ÙW–µy²°ˆR×FyÓýdZ„RBH5´@á,éZˆ'ës(å†|kb˜í‡·® Ûø}Î¥Põ<Œ&–«"Ó S{Ñ0£yÏYë”ÿD…6)­ÃÊú%öÍ|@#ðÑwÿtôƒNÀ¤Œ …8’06»9ÿmø™Ä“$»XßÈÛ§à, D©»( ˆvåX˽ kn³©*YÙ’DÅ-Ñ2„:KßÅë%@N·Õ sÁÔ¤ü ome¥ ’«Ž`á÷olb$/ ÞW±b‚vkæ&ûð'˜ZõG#¥ÙViq:¿DI|*¼9¶ØJ}Rg¯'1³­±äÊÂûJGØ(}Ïô=s‚_L×®%‚ aq „+*!|VNŒÑ Öm,äèà»ÇB{±t\ÃÅ e©ÕâY¤È’„wÇøë»ÈBl–!‘ÜSŽ/.GŸ`¢æ¢ó¶êKÈh-(6‰Œ2C±<8µQM0‘ÃýlÿVÏT.¾û9ìáôm=öÐqVq7¿">û¼Vô°´·²…Q;å´Àw™´DZ¢bÈ|ý8iÉE\‘L :¥ƒ˜µl!¶ôLås¨Ü±Šm@ÄÀd›J/›¡võ·:V0(ö”$6Ñ+‚µå¶ŸOØ ÊKÃô/°ÅÉ_üß©]÷Wðhrƺ6±¬ Þ3­Aûº‡àSµ}7äL ÿv?zü/~‚¿Øêý±,ãKM‰ñà”Î'ŸXÊ¢¦ØŠgÿmÎ®ÒˆÑØíÓŠs`‹.8ÀeRìlæ-\(wûžF.Çô”H$C·54+yŒÇ7,´^„ic˜“ù*µäÂ7ñ]ñÆÕkx‚ÁùÅ4³–HD ÃB*ÁéïK!SV-#ˆiq•Ò"¦Žü££ÐÛÖí·L"—ùz{6@X¡Ù˜B´ÈDæO¬]^_ÆëÝQúH^ú%­vBª(ò¼û_ÙØ ƒª¡e ô¿mD6p÷(À«…ÈÎjÙgl‡«iZÍ^×AÀêm2Ê£ççªs<~\¯=rlìøü){ŽvâJ„b÷°Ñì9X[-‰ºÿLǡŎ/çj‘†×§ÛÚ¾ÑQlW5s.¾A.éñˆÍ)âyî^NÐÌÏš;†Ã§*½ûÊNޏÆ9g\òHoõ~än½6A‰Y©õte½%7Ô& •æ,.c©²(ð•»Â¥Œ9yåÑœ5¦«htä›5‹RüÙê{¼Ò?5„§Ñ³M“*s›ˆ§Y<â÷”vSë*”- jò¨+RxQ¯b÷’–½²êð/ª47þðf0 X6³™š2#ªgŒø³Øç÷’ät ã%œQ°‘Ø"2;¹ÿGò-£pÎQÿ%g+áÿo"…²2;¡°÷{G`"ÿíJ(+xn3ÚóRã’|ãŒÔ©ŽÓ8¶²çTËÖâóËÍ^ɹYÓ¼}¢ÀvÑ%|Ž0ºDqX€Ï@ž!-:¤a˜èŒûÉÈ¥ÉÀü& ˆu¼Qq—hô~¢ÌIRZ¤a]šZ=;lçf»%…ž›ñ¢ÒxvÄXÁ¨‰ÄöT  £,OmËÐ<4{ÝÞfˆ_ÅÓê‰Õƒ‚vÂ5ãìÀ-µëtÀï°òXh׸z‡±ÕßÁÉbÏÒCêâc³1PñÖ H™úEð®›ÒœÎÈÚlM2<åÀƒº=Îó˜êÃs³lºc£°âýé·Lö¤x·WæPícͯÉMG H<¡¬EG™áŠÜ6s5CVqëlR*ç &d3ÆEzƒjÛ¼s5ÆBïþ†²¼ua®ãB']XÐvIñ{QüÉ¡´ÝèeËVÈqCXp„ÿ( ž«Ø…÷ÇÊqø¾ã^/@È(uxʱ@ “ÙŸe„M9ã3,É»‰ì}ò„¼Z'„5[p4™C ÑÏG ay„ÅË¿ÚJ/›õà5Öãj™Š9xÆwzÈÙ%£7¶ƒ3v=zàÌ+Àû‚žÑk^òÌ×8Ï´?ÏX -vóØer¸wDaÏf³Ïq¤cÚuÏeÆ1*Ô$Rü“Z°k|¦i’ P³è;é²KêoÍÚÛRµûJÆ‹D 4cÉœ’™)¬uC²Ðr'Å›d2VíÃM2û™gúߺp»JOÓ@ÿ$ò±×Ü+€uâ»oÄÆI2”ƒ¸—f1zK(Ë…lŸê놗SÑ(Ûê9ð¯:á«O"E I¬hd…Ÿð½ #·Azíg$ÒÁE¬§åX ¯#'ô¿Ö–YCg¥ÿ`±öbföH¶ÜF b]¹]Ð9cTN¾óžæd²ÅŽ ]KuME³§JÐZõ¿ßŠð¼kÆî¥ùŽúCª„’_}7¨ó](±¿®‘EÂb/®jÎmÞ¹ÚÍÓdx Ô3Ÿ`}¨DB¯ÄðÕ†ÛTÈ_&½1 Е0…iRȵ—„˜!±Ú2_ç‹/\ :›ÿUŠB•xæ{ôP"< ’¤b‹C1œ-Î°Ò †ÕLúØ‘…û_wíc$uMºr–o¡If·ÞO‚Ò¶òSP%pG‘îl<½b¤XêÚÔÛ,΃ZdâNº%?Þ=›ŽñNdƒv·kj¾)¢çH>,#²@ [Þ¶c÷À£Õsµ¦N ÎúàD Ÿ­BQ3°]ì¾(Œí˜¨uϺó©–xˆžÂãT®¤ôs)@0ƒöAßyªÅÎ<îѶx"ò“'ö‚#‰€þ•nâ?[~#Á—Øa^E‚eo²b*HâÖÈ#Ô—p³FéˆÅæ |j+O‹œ«Æèé%S¥»²™Žý¯Â_N2ównî¨o×÷®)`ìä-‘ßÌGrÕ%æ$¯l¸#'Ÿg V&ñŠ ‚`XK¡‡'1lÝBMtcNC«¢­ vÏ\&‘íwZªöœ>xô⨌P>zªŒ =£ûÇiË~ •áb^ÙÌ <‹{¬yq$Ýÿ6+‡¤æôb‹ñ¾°àgçñï‚dzzNÏtøîeõH@¨ }C>˜nrŒW\âC,ܨv”=É!Tç ·ÛYbïI“áÌá=ME–s»SÀ¸ }5A—EÜoicÅø†)D¦ÎŒ$\Ùf¦JáýJˆ(Ä3 =ÍòÛbÉQ†P ‹ônBšñ¡¡],‘Y v©È™;FøàS¨Rä <—w ™ï¬‡!jâqÔÈðJ ìoòa|îú ‰é ‡¶áÃZb*¯#uòduÆñÀôÆï¤}vÏQÉo€LÆÙ(×ïIÆGÃ%yÄ^$yâÐ……ýóIü¶S)°GÚVHˆOᓚ!?€¶ïJÈŸUùc¡wv¼ †c’ð‹JÀ×I¯“ž¢ónÌíðåž—¾ ‘-ó ~æðÑZA>éZS GÏÈr•ÔûËbÁ¿Õ}ûUn¶'mÉdú‚"ÔØØøÈg>ðO&oP jen fSÔæØú@á½íÕ?t¯Ãs&?#zLƒ?˜#Ö,}ÝP‘¬G¦÷/Y†“@ ®¤½ŒK ªe=³Ðmˆ,E f|èbMmDzÝÕ }¶>±ˆ']íÁá1OÛ`1•ÛÊìüí»ŠÚ¨¥²¬,“Åâp¾Õ  XÁR³É4‚Úf4²@øÒÜ@0Û\©9?-_¶-:…Ò/vÓ-ÛGEl8ƒ|ñÈ0–½J:Ìà¶k¡lBdžœ·‘„Û‡âÔ½ÂÁU^ùÁ3¦žûøYþŒEÂ܆Q³°"$ÎÛb–i?"ðg×mѼò–æ?¥0 Aw:åNÕ㚈‹3µ‰$Éü$Pæ×窌)Š<Ñ_rW¨Êüœ#‘[ hãõc0š†#†Êê{Ò(ü§_M–6j½¸ƒôÝrAA½°!I¿ð—a"öÑqÊX~U áŠt¸O4×d#åtûŸA&ûPòA“%å¬&Jêítã»+>;Zkæ ãXN…ç=Ë xë÷g:;ßm(<.åÜ7bðI°é4Þ$‚_:K ô4Èã±p"D}À¸,PTúS±¤쯀u#bLjß³IÅ#[ÙpÇ[‡Œ,eD\%æoãf¥–!ÒíÞá€ÝÞ’gÜ'CJP_5Áõv ÕÙÌWhâQ(!ê»ÔÀï…¨‹Ùa•R¿Š<ð~%–Ç!¨.å‡~ ·±ä%"V¢ Yëö^Ôöe®<%¼ðòÅ›´czdÆc,“c¹ûà/ø[ä‰UøÔž”AÙÜ3ò5Ѷ³î@j”K8¡Ð¼¢<l ‚þŸ¸ï“Gº@æ›-• ‚ß)0eßȰûG»WÜTgŒù³<¶ž´Å„È{gÃÇ5z$® r}^ I’ËA  f‹šìØVyqˆ'@'<,š|\wëvh‰&ÞW–÷{›ö[{÷ÂÔj¼ÈµQû6AÓ¢ÓÓO}=%j>îGÙò ©!}Ÿ@¤Ñ }ü,úã'ifÈBЦ&¨ÉÀVú<å)uYJ®b=©²ÞWãNòT:A•DÀpç?ÒêŒ×ïÙýzÿÂ… pz‡]˜¨ˆ¬Òô™–p$¾-$T“òñ¹ÏÀ·ŸÄHi¯ ä½ëÖ l,@¨ínµ'Áúž"ÐëÇìK1 ÈvÓíã0ccÏÐB=P1`)„M\ÌAq £³Ð9ʈKBæºAÞKø»t€¥Ëo¸sîA yjÄ&(ŒzJñËR (S†R¥Õ [‰$@¿ëú„¡N]’Ù7×Àè$JÔ<¥((¡lÙ=J–›_·b]«C@˜˜!Í%S1'f áº"fdú棭Õ½£a~$Ôà‚,¢«È—X EDå¡ÚÖ·¼ü³÷ßç{½4‰w‘9ä“oøvÛ;³¿¸–=AÅÈŸI9ܱÂ$P@§½§\BbM»¥Uà†¨P ÌåZžËq5çUwûŽÁEáû¥#㕊ÇâÚ 0Ì’Æø,œÆ_•ÙúF›ÛŠ(*zƒYÇÎì3ôˆYùÕgúvpjl/àØjEæ3@‚eOÕf^ykòìà˜Se<œ]S’À4âÈШ§U\€È©Ä£èL*Ë$‡D2–/%ãê 8“öÒyÅWIWêêÄ$ma|e6Ž3 t*÷ Ízng¦´ÈD¢úD‹E^ÖÇEE !êØAe¸éÛ§òl•ã¢] ç—ÿz;\ÿ”¿ç`&:6u Ø'e&1z³~üÑàéWy¦é=LY“yê²NktÇ´jCB4æi?ì œ9çåKmrb-~äAUág¹œœðƒI\{/’çcièþ”®ãëØç­…Ùæ,É÷•r}h JáPÂç:ü$*~MÑ&@-I%4B[›åþ¡œÔ.ÐøBƒõÏPiÝó’À ƒò¶r-²X·É$מ©â^üÏ‹QòzI4¤[¶AîÄð»æ¥gÿ0Fø}n"ïUÅ(»7>Öh‹@™T¯D¥ {æ$9ÿœJ=*m¡”IlnA¯Úã<ã»yá(}ÚYïåh@°Õ²Ï2*"Gï O‘v/“{é;Qø²|[hñ°Üf¿Ü5O+ÙÝ4¶=oϯ]B•‚¥2“:p¬ˆ½ÿIðp- à4‰vñ±Ä¬âmÞßv$ë¥Æº§Eà=—î/ç_µÉ§‡Á…½7Ÿ[s…D-mŠÜÜ=[Œzu&0ºEHñι;/»ðæøÈú„üój­¦vwÇ[qk¢Å*DŶÓýßs`ÝÑã@"4#0¶é Â©×@aû^£fŽ‘&Bwƒ¢ªÂï641%;aЪæ4ÀG^V 7íL`® =íÏëkò7ý}â2Hzåp{¦ €õ»㦩/GÑâ²Ä¯gÉ­fyôz|úˆ*"甎гw$ŽÍš„¿¶ÂyÒd¯¬œð&’§J–¼tÓDÖºfQÁ©âR¤fdP¥æÁÂî–*ÚÜ'æ7©CæøÛ쉂¬îX¬9ÈEgpIªÝ=ùR£­¹¢ +ð®qµÏnÄÛ Ÿå2Ÿ©oŠ~A*ý+è˜ÆW¬«zuùÛ0Òðÿ!¹JnìRJT%û_ŒYÈ3ÄIÒs&‹ï>!‡j•Ò+gó’„ïëÜ„[aèkE—Hà Íþ¤é]?ï$ÝNX¶öº;œ2ÜÙ ½ûÿ^›ìûôq³ühí¿qDCÃíÒØ}· >ÚlGG¹f¼âœ {·'ÀbÔàú•¼ÿÿcÑ<*aà•L³ŸÃè æ¾ë »գ?ñ(ßà(´ QEfS?ý/ŸlvÑaç<¯0ûÍ­¼zÛ•ˆ[K«ium.­¥Õ´º¶—VÒêÚ]r…ò´¤7{}_Àÿ éò‹Í½xˆcL€ñ¦«ÝdâådW ÖúÚ][K«ium.­¥Õ´º¶c ù¶"Î@ÚàöqlJ^As Âa8 ÷;u¦ÅL–HpðöÔ)DEIݰaÃ{VLJs9¥Õ´º¶—VÒêÚ][K«ium.’èHseœxÝÀÉ“† 3LOa:Z˜:h' ñUlœpZ¹öÀQ +àŸû®d Èa/Õêž =|ÖÛ;«=Û$©Í8=…j³²“k!A…t\Å)d¦*¢4·È;­°³HÞcÙÿ*â"€ÿ{aŸÍÿUÈ­ÿèè¨$yŠ xòËÞù8Xø—€?ÜØVØÕ—@LÕŽF!/ºXŠþ\¡-gO 8>L_Á )ÝêݪܺöèýPbèí5ì]üÌ(sGÀ*#þÐM§b´X‹7=ÃÖ¶ì¦äVF†€u*ÉÝ—<³îîè¡ù¦nQ¿ý–~)ò›V®ÞfÀ­õñæÄõÅ ùuñ¶&Äû`¯Ÿr¾†{uCßycp –“]*][¦ùoÞ^G1u˜ N@hDÁÜ;IðŒqõùˆZ/C­ ßgÓâ+ûØ»T²[(èlQ¢œ8y‡ hbv®8®vMÖœ?9X>mºÃÎ;þp÷L´æDÌ0Êj7 7õ”²|MÃÿ&¯0ßGm¦xÓ)÷;éçÎx½ÖsЫ²’ B^-Š÷‹1ËÖ‚åöõíü=m/·´ËíìÏ/·©Oáëi}½®_o`øŸWLÿaêc>®¥'ÕÓ m ÿgW:8­X¶z) ;ǺۼБ‡ÊO |Y9ô$ö/CšÕñÜ ØÖ¾µðÝ<ö2EÔOÊç8ÚÎÔG)4‹ãfàëåM×i!Û ¥‰êg6øµ%Cë}ž57¼,X5°Cr%}†ÐMl1ä;áQ¬ê^«_õíGïþ‰ñZ9äÃÕA÷&µFc)8àL5D:ùÐ;4ëFü}/î©´XStnýtÒýy5Ýt ºB€÷ìÜ0Ï!­ëW{edµcÊ»ÎcÂU,L' OšÜ~¦À#†ÁEîmG£¶ÆúM²MA›¥¨î;5”výcGd¡74mõ±LÜ|£ñ\Õ•÷#tut>y¼!úc­·é^2!ru8,§ûÔÙ~²FÕ=Îhò"j®øÜ:î&^ _ªÁ¼ÚøÓg²!­SAa[ëŵ·R4­¤ž#ÂÊ•ÀÍoô^t.û0L E!Û ¨p'üþ,] f?½f“Yö_ÿBˆý•0ÚF—ÒN¿¦@cÌÓ£»Äðáך¹oø[ßûÙñ*# Éþ˜wøžIQ׃ùz…‡B×È3Ï”Æs Y¥Ì־ϦzCYi´(óg·m%ÀUD’ÍWñŸr]˜"lódI(öcŒÙ j”«üÙ¼“A$ e­­,ú¸abv‹Ý1119å¦ö1s­àˆê¿ä⃕]T&÷Cx»t<’#ßÐó-ð©§~¦mD¶iº;´m¯˜ûdíBx¼õ¹yó>œ¬£¶†ð)7SáÅ’€J&~½»1)¨XÈÁU+ðª¶ù È¤þ Ä”W{­Ç£?PƒóhÙÓ ¢ÍC}ÁLBì“–Ž÷Ç0®ÍÖj®îŽÔ†*S¾Z¦Å} Æž&ÑEÄ æ±»±»ÜyÔÏÆê˜ïKŽBg'ö}•Djö•Þs±1!÷ÙR³G6€Mȃñoózk‹>òî£ðZHÆ-¥}S'‰¦[ý>¡#ò³Ðqfƒg^ €¤/¶©!™y×Sjäæ<0£Ua~Û}Wƒ/E£¤|½z+tÏùQm‰¬€ßÔ\\—¾ ÿ0?•õ3ñªd[¥DXOYVÇ®hTùi0‹Ù{¬½›Ï¥§Rj‘"îS‚Ég’rù0Ö,B’û ¾q¥¥Ç“î34w\> v{m{S¼>–~Z1×];¹@DtŠ ¨ëIJÂáµØžÎ:0Qâ?Ÿ×ϳוÊî–÷öœéX«~7¡½ìʘ36äÙT´†éœ‡Å”ÍŒDkÅ)[kñ%¬ìLP‰ë +&=#’"ÞJ—]Ùkå89;[êeÊn±¹H6‚Õç?b1Y›( äê\hGÔFŽÇF65æ'~ü¼™ôàR‰«ž{¥–à›eÐ #†ÑwL_¥¢àðŽ·¼‡ýÛƒ¯ˆÿPˆúŽj;½ƒdòÒ3îâÌò b’™òïÉ ºÉøG}„®.Í=Ú·N4zS+ák_t!q óñ(*9إܣ$®BA4ÍÅo»VÓÖÆQg^¯îÕ‰:;t¯t‰€èór£† cØ(™(ÑèÊ}Ïm­T.ê…jYÎ ÔÅu°™àÛýï 8_öFÅ'»Y§Aåâ úôYmS(Ž ™<•í'êØ!퓚 -œ·ß9’bbß )®·â–2PbC]'JԈʛ‹,sZk‹jئÖDaþ{Àä(ooÍÑu“ˆº<áÙzw‰Rß7¼æ] 6˜hšù$³/ÑŠë¨GKƒ½ä^Cü{[y=@¨:ÉC]Τ@J{T—Ùò‚j$›¼d°XJG—Á/AãÇ,Þt¯ï‚UíÅU¦×-ÆjqÂo}@³uÞ~0£ËÐ;èƒòà„n\é:^´õÍÖ 3;~×ÀÀ_‚/â×–:¿¨lã;0ýÉœÎãi[z'µ,SHQPËÏû¯’™w  ?xC›öiM¨`‰k…ª´Œß—N=Í· ¬(÷ %e±€Ð6—‚ÁeæG‚-ªWºÒhµÝ ÈÀ'ÅЕÁ® ZdÖ«{Œ¾šª.¬¾{Õ@’jÔU»Lµú%J¬rÔn£B:h¼¥nœS+¹ä|P §–R¨>/GKèÎc9ÒÇÛÇNµ¼ìøáAšù§ý3‰Má'€.WÍöÇI»`"ÍsS‡,µÕ Æ‘¾§€«É{¸¥á5ŒˆG;×b¦rél[«ˆuTÊ/G´Òí”4¯6f¼½°=`‘ÆK¼æ¸R²J1xƒP¤®­¥àÿ2—þÑï¸!aôlÛÅed4Þ §ïÔ%‹Ì!«ný"MWÑ›^;€¶€%´ç÷I:r<ôÌγ'FŸÒDñ(ÉþŸv*Ê3"jÜÛ W{ÿgBë:Å‚_Dk5!¢[¬ýŒÌ³¢i‰É™Î 7+^"‘n]³·éõI,Æ ôCX¶è-W&WiW‰è±õ(v§%v掎ĞE\“›öwŸÐÝ 9O y&A,ý«èOüB‡Ê©Á­·}Ê6«P…’‚¼·éû0ƒ ¨D ¶êJI§àĬvõŒH+’'Ãæw¦˜¾™&5`ŠÔû2J!…VXÝÒPq’Åf±Ó ˆ…‹²]¿y²ß³T ‰y¼¶êSÊ=Øàè~tïÏBxi)ž_ç¿­‹¬½iê„Ä•J~Në;¾ÛïUi/FO7þ•ü0<©×úÇzD'nf˜÷@Ðú_°  ³i‹á½UJYal¦¸Ã’Þ ï¸ÕN¸ï‡lcˆ¾¹ÒÜ9˜¥²²ÍZmíjuÐÀI*åjvËØM\à¾FÕ@ÍÅ&¢VPÎ’-SŸ3r†#UD¦¿Mjôödù>n[ñV“WıŮ֖ˆh)™Õ?æm‘Ï Éÿ›`Wq•Òèrm€ÍëïWwvÅák%ØëŸDþoç>Ç5>/ÃVz©È—ÔñÌQs²Ú:ÚcüÕ×=˜°¿8˜žôبìòéן)§[$²îA_„m@“Ê“l@eœç`Ÿ¦¦Òv“zNx¶zÌÚ&sW&ÿ;dBþB˜~\í=gï“{œÃȽԿ¯fX3‹S`¥ÞÜôL)>ÚÈ@ƒ‹ÏʆØˆÎæ3 (ý¶NS‚¢@ ÁelýŸ4ÅÃÈhWïm:9ÞF)¦¸ÓQÛŠyâ98óÓ¿µNyÛ®wmƒQ±’% Fþœï+[‰Gm|ž"éõŠ ¥‡­Vø ?ZíĨµ­'l¡ßÉ›‚™ê^?†Šluµ®3ò{~7H Ê@£`gíÉ ¦Ã㱎¯‰ÍCò€Æùì×ÎûÈChE „—…¾J¤µìÇÌx XÕf¹’df 8Ÿ{Å/wMè°µ üó­Ïæå‚æ#+wF߯Üoä¬B›½&£¬‰Â3vašLEœ>1O»3Bl´… žð­¿\Ct7˜*I%À›)/h$S~cáì¨Î²Ø¹¬3[¼Ì=Î[Àa= Èé6¤±Ay@†?“N—ˆN?×bÙÏTìiŠwαò‡-€GŠ8v&ËÙ»•kV–DqdŽ$úÝsQü)¢öáÍÅÔPöúb'Í7|Týç¿ ÊZ 'E–Ñ0@§Ð³ÜmœÂQ€ª5º¢2Qh¿º ¥¹ì˜#n¬É4€T“*¨ÐfÅw¸ZÅŽA‰Š°U Ž|žf[€àŸœÊÿÿýSÈDüžò\SZ‡9ˆžµÊ°ÁŽvØ¥G ™Îö‹D»`¶BÄ ÆZ0UI<ɯÆÓÆÿRc5W°¿ÜÏËKB4âôy4£D,ÂPH)•@Ï?x靖½AªeÆ¥¥¸g8à;ÖõÍ´g†Â3¹¶_<–1{÷UÐÕ°kû†lùTn ñ:ý–\ß6âuFŒ'ãMËã Ž[/Á%ê¯Æ! •ë‘4cA¤ÿaŽËÒŠ²»Ì“ËÖ“å+FRÈœ“« vV}ËVüë5 =뢃 ¦ÙkšébóqàüŒgrñ½LeM·ô¥”.Îrœ) ܉ÿ;[ßgå«Ê/ v¡;ï½þ í/‚f-ñ¥ )ʇ»ö™›ø_‹Æ™ÖÒ‡I{á%*@’ý²ªuz_F†‘ƒ |Þ[ÐÓææ8ÒåXUÀg£›¸=pH¡a’VTy™KwøY—ÄÓS1 ¡@6†¨ÅhI“7³¾lLÐXÎÞñGÛÇÔ BÑA‚Èuö¨[Z¢‚‚A­l®z(˜Þ˜ÄéÛsQ«{2éFà5ôÇb_YÎËŒÿGøƒ6{{“~í„8¤J ö›¥Ñ ¸Ärû2”ÿ6Öž«ô>¦äà—“ ÀJˆú«x6}Ñç{Cи*â!MÌ´ÐÝ4àþØéì¡W¹—„Ý>”>àÒþ3!7ûýø‚ì*/Þî"Yú2ÙI–M#¦æs]ç˵ïEʽí‘]ÍJfAøµmE$r±ýwdìï |ûöqàI¼fé9 øY÷‘Ô˜Ö¸2⽡¡á+#ª'ÓzÖåZÐu£Eož\ÑiÖ&aÇïß(®€ç›0>÷É~ƒ©ŸÃ{B²¦¼‰…¨ eI³53qûx“atrƒIqŒš­†p˜­bØEÿç<ªð×Ç›4<¿þ'çÇCþö~B`tå KbT[kñOÿA´ ¸¨­Í¸ílåÄA5t³dšJknLõÜ$\4C'8ëÈñål'³6^Q'óké!½À•UÏkÖ. s>@‰ûJγ•’j·=’÷1O‰5zÈaÖ†ã¡hrŒµ½Â?Átû÷²1úÓ×>^üÜK10(ôjX7vÓšH¤T# WœDTÁà¿Nh^)=}¤ˆˆ…µ€"†K™n²‘Óv[=Nÿ œbõ±/Ó¯C÷Ÿ“g @ÓôiD*âï>³%§Õ…ó~^'ÉÜPoŸËËH0n(®†Wèkz=)Ø„ ª c«>¥µdíÈý¾þtû‡”È%a•Ázg£ç'Ž,]öÁJJûûH£J3÷Œ:Cô^hâ¡0‚ZMªiì(U}}Øs=ĤµEѳþMB¨•Àe™T›ÿG} PCy[οýFzkHœ÷î—gfEÊ·C…9ˆŽ÷Nq”p[ž‹Â=Mr/€Â—ÏPÊ‘ëj,C –¿ANÅ‹„½“¦¤¾×àÛneä®Á'¹è#èDÚpõ€ý†×¬3øÑÁ5K:{ç¥JŒEÕð…Ç (¹–ß$¿©\×,µ‰ äòø+yĽÚká-*5à¨q×È\ÀÎõCÙ‡ÈÆÅííøâÜø‘aä"1ô—ú¸C F§.†lBCnÌã.“ZÜ1cÆçø «¹_7ìÅxèåºrû« aA'k~Ò`TLÐŽÌjî³®3ôð1ё٧úšñµß=pÄÈ“Rf9q0ŠNü›”‚@”/ž] 'òñ‹8j& c¬!äQ SÝÂ^Ìð¿L¯—@bÚ.Ž$ÈŽÑ#:fç±uB  Õ•gñï†a}ô¾\ïAœµ FoàD?± 1æ±rÜtu+®$øÝ&Tþ¶Ø”•§¶.W\ ‚$bº„!‰Hÿ]î Ê$*íöÔ4‰ÍÀ{;(å2 ±iGh Éá‰AU©8‹ú'—.“’®Ù§å¾´µTnõ÷ÚŸÚ I$lÿJ!@£Ç‚­ŽOÿ/'^Uæ˜,úïÍ©ª†*Ü­=÷ŠR¶õ¬P„›!HŸ?St¡Ðj9¦K¬+ó´‹ùkq&äT-d‚:9Xô`>:‘DS{F2mÝJô§ðÜöÇQø~ÜŸd>v ùÅJ܉ý©Î cøÚÁÊH=½÷6Ö˜gM„pÄŒ¦“-&fþÃuûVµJ+¨fÔqÞ¦Wƒyª®øÐ´Ž“sG„BìB­®3¦ÈÅù'.à·ê`™ÁÛÇíFm ‘oÂQáË 7XŠ®%WöaäåjI­ÛÑ )š«ëáÙY¯Æ.W¡°×Eä'°!W£³{½IŸÙ†Ê0ÍëM0.RΔá/‰?ûK‚m#Ô…åR-Zc5’ó´ü¬{‘Ž^I}c>h4†Ÿeé+Ó¬âKì&à/'îœ  ,²yÝ·Þ ·d+¼âÞ*©6æ$¨pÍ„œmÞúe,a[0ÖÛÙ—"Š:ýk ê­Öq\ÀF’X—7r…cLw.ÅÖ²Fß_slã®|^³äƒéw£ÔÜ•¤h3yÝñxÅ'ö/\¶œ ÒÚ¹ûwŸÕ;ƒ^éþ¡gsÉ;å-Š¥1 D;1Õ“x-:¥0a—üèsÎ’9ÜjwzÁˆå£ú©fB*ñ+»qd°V+öJ32ˆÙhA õ‚¯_Çâ±Ä¤}—s}?°Èn¥d<ïœP|NÞ]À„oðK˜ºîø¸Û »ˆb·]6ßXüø°ï_é´Gr>)L§D7¢W"ä°¤•üã£jbÇwàA`âõê¤Ìy‹ÅT¸v6Âú ã|ÐãÆ)9™TÙdmÞcîzþ>=ªxµkÛfn’kÁ눋 À8¸cZ›/H-°i UôíìØ‘ ¢«‹¬$$ÓMnÇ–PLÊ绵˘.ŒªÑÈ6.” ¹Ú… îfVh(‡îÉ&ܳ‹YçÆŠv«Ž2¥Ñþ]†š›7;#*a–‘¹8M25¦}ý%\cÔJ®£í­[îg¥#ê}=ö>1H{ja—E¢·ÃÌ&ë.]›¢5gºÒ×AÂR¦¹íÿŒlöSçgœÒ „*tR"YÏÇæ&ƒAÚúq7™,ï¢qÍ&µ#ÄbÌ!\­\ol×!UãŽ5ò\Xºà“{öˆÄõèÁ3ã¼¹þ]"ñõ™,©½iÈ´ñ¹(»{R4/8æ‚ét>s¶}ç•gìØÐ›Vgeãø"«`ÎzBÛ>ýiIñL-Y&XjV9\ðÌÙ’#ˆ´c³‰¤XTVá ˆ'F",o§A&"QüEÎQ0Ž{»Íy«/wP„{“‰žñÿÿÿÿ:ÍhsIõ’ÅÊ ?òÍzëè"xú’mT†¸¶°2/s Aàt·Š+v˵w ­­Œ—Z¼*øRlB&®w:Ã7E#KÑv¢Už®g8ˆáLùá;o ù(ƒvúgo²’I$’I$’I$’I$’I1 ŽÝîq§"F\r`~3Ò_ô™¤û‘v 4ºV¸ Sš/e>ÈàtÅ…Þeqˆ“êeP°ƒIdç“~Nh0pv ¡RÊo‹¡ñÚйR¿R›Â³êŠªUóÒ;"µD®¥/ÉuÕ¸²ÂøGÉœ4ÜS!Õc¬@mÉ$’I$’I$’I$‘îŠPdÄFžÍ•~òy4@œü•øÒË'Fòð‹ë©@`&ocˆðLl:…aÿCŒé|@¾y £ˆ¢ÞV^úzþpêJšó¹&ˆÉƒ‰»’Iºc¿ÅEw_oŠ?•¸­2ÄÐÜK@ƒ+qÅŒwtßÝ9h7¬Žáö-\èÏþdÐÃ×Öa§ V̓\Ðm…$ÄŠÃý7ÑO0œ’ß{{õÆmSíëd2ùÙ¶”¿áDa%p&Ûm¶Ûm¶Ûm¶Ûm¶Û6ˆ*¿×m³CÔöTƒq&è·òéN%Wª€M¢ÊOað)ŠêNÇoCó‡A½…‰^´“÷ ´â$xݶp#/÷Íø›,p Ëèæºé†¯9W ¬z³ó6¾öoš'¼FhUPwƒ6pþÝ·¯àتcæôÔ¾›¿‹Q‹óâkZ×̼N†Í,eÝô±0BaSXd}¿¼¬yzr%Týß³$}]»e=ç.ŒM¨×&ûêÔ =>Õ¸ïZ= Þwùé²ÐÈH Hä `¢Îø»¼æ¿ãt¹ xïæÕš¯xh ›‰¢(B}c€ÂI$’I$’I$’I$’¡ âóUø½þ>9–Î[u÷Æñ#™¤ìÿNT=¬‹zü:ˆ{¤Ð2|…eøæ‰vÿ 6–DÔ‚ ¿:ŽCc‚| EgŸy¬š¦dø“„nó" ã]D´¼…™>xp{ž× JÖæº `}úNâœ~æ0Ák>`}_ù¹Ô¹-´å.»ë ÖÑs€c÷ÿÿÿÿ€){Å#vá\Ä0Iæžñµ¯ò3— ÄЮÿUI›-¥r‹rÝ.ªaCÏýîo7 5SçÞÊ·¹ƒ$’I$’I$’I$’I$’I3¥R‡äZ<ÈÇy±‰”X7B’;Ñ7ª¤Ç ԒƒEZ>,E´ &Eƒjtý8ßg¯÷V¡ºb)úÖÚ*í8 Š”šîÉâÒ¡~Œø·^‹Paˆ\™””ì×× ¼’I$’I$’I$’I$’IK¦GUú <)Ž5)/6Æ.òÅd¢[àA‘^ârôªn}KùÓ¶·ÃÜ@•ëp‡CÞ ñò’‚嫌Þ4¼8Ì7Ë5hŠèL½“Ìϱóp‘ÙµóQ)²iŒéU.•Oÿ~Zž«w=ô—² €"ɰó£hdêÑ{WzUÇü6¯zT˳wùÿB 6ä’I$’I$’I$’I%>ßâtP€pÊÄCÈ;Tœ Ž<É~u²Í3ä$‘"ÑÅEsù¸?øXH`ÿOÊâ:Ïá7¥ ‰B¾ó§0κY„óá¯A!Ÿh Û‡uC!NLÛx¼òh/Uí•#ð ¥åÃüáõ‰"À—r‘:–B'e¦Ä2Ü«×èÊT¨2>ÈÍH–,g¾ä¸f ]‘ªCz”ëÁ$KéôÉ6SxÜ¡PQéÉÞ=ÿPFtpõ "Û7ίŽéhصõ ™îÁyÿk¦w·sbáë…¾›¤PID8R’”P-Aè"¿»¹fŽ‘Á–õ;tP„#h[³ÂJŸ;mÿÿÿÿÿÿÿƒ4PG‰ŸrTXPÀÅgézS-cÔL·{Bò Eà0­=è=lƒl}^Þ¤ûfvq7}8ôéÃ*½æ_`HsVÞƞÏUOQŠ“÷Öˆ,7Ó|ÚîðmñWp6î·ØkϹ8}q›‡!”dzÙtqTŒ@CïâO¸âp¹á'~à‰¯7þ ·Ï8Ð4j¶QЦq@†1NŸx×ʺáhl‡g@(ŸÓçóå•jv§fW¶Ù¿!ttß1<,xôKÈa· šÿÝàcsoí 5Jœ¨­°6¸:޵ê^ioEfú½²òŒ…¬ÁÆoÊñs6§5z.ï•42èq̆.á&` ¢KÍxØ!'ÐP\©:PwÁŽ1QZØ>b*t…oê^Y@[ãn,®ÛŸ†>Ð ‡cw­ëꎚ T¬Š‰Ã´ÉÈpÞ¾øç—,§#F§>ÉG¬e=“©îÝV“ÛŬ³Ë‰ØÕù½c 1™“D5•Æfœ¢àšî²—0[AÓ¢n¨z•í}tðî&”‹LÒ*ªç›ºÈÒþ´{ÁR_cB€o„Š‚ †ãpÖ%ðJ=q=ú‹¦™á]ç õ«ï4:#¿Íu”>"ã[ÂÂ}+Õh÷¸*—ž}â-NÉcþ½:LÑž Ad|9”ü¾ÇøL‹ÑÚ`&§òÐ!ôBÑù3yìñQX'Ðb›¿a¹ºÜLñèK¯®¨ JñÔþÆìÚú•çë0=àó§îÄOÌÖ—ã€8‰cÁ,²Ô£žã¹^•r½uÖ]œyOÃ!A/ öØ¥‚Üro´x«×|©Î™V :àšxÆÒä®ô(œö“HÝ%]å…ÍCÈ9XyDh-É÷у„ÃcÃO#O\­³J0ÁNupÈv^_ãÉIKE¡â)4æò›»ã°ÃŽ h=ä²BÈïbœ;2ÿ$“JNZû‚¾]„ݤ ¾âL¤à³ü˶œ‡õjHZæÙ€þ4“ŸÆ,–™FZŰïLDƆ2©bƒ ­{ŸBbÀÁ1/Î|´nÄ9ü|àÈ/?¸øRMŧê}ÑSO#W6B–n+æÑ„•Ÿ¡Ê+oPM²ï¿Œ2 –¯£uÞŸÞ5£ýBÍC˜­ç¤8!ª:×<.Œ8\³çÿ: ø_ß[Ÿq]éôü·} êŠ]›7ú8zqÓþ^AÔa¯!ûù„¸2Ä‹Šz(ákºé¿òêb*&”¼RÂØ›ñÊ6aKÞç ¤])zغ3ÔK†Ç sðE#}¬ý0ˆ}ùæugš¹ωgÙÇGùfžÚˆ"þϱö»,ÿN¿Íþ=^—¿òÅufã&·¨[\n‚S›aކ#5횉Ö74?N™ëxª‹’°z4=ÖFÄ@d Ýs!öBvfð”-ÌëHIžŠß¨¹z°A ç›±ÔqÛ‡ä¹îG ülXËÑ·ÁlmØ4T@“§RÜ…nµë7#Á:'¢ñß{ëušaªu}ÊÌAðX® aÎÖªÓçG Uôˆ/¨ŸPGd(æºF<ãJÙÖ÷YjÂëšèBÊ >‚»9gøØMñ ±èTíG@\vÇu,kBuýG±VœÍˆÝýî;ð‚Äúïˆ<(®FvF@Ì$]'xßš x¡®šUöf7‚D¨Y55¡I)yV;¤Â¢·KÈrHéÉÊ×È8ŸQûá·oˆl)Iµ€gù‘8†­ì;Ù#ѼmÞËÔB/›¤{oöÚXC¨c‘d[6óà>¯Ef $­yyÎG,HßÖM Íú[X.í µ¯—éÜ2¸âÖVg«ezÔÀÜï'b'ìW§©F¢õ²ÐÔ­U]—Saɘ?Zßc¨Í •%^D@J(ßepIÌ_Ƶ+a÷÷’AJÌþx£ó²m@¼› –Ng󮜺±â_%I{Ë­é”Éë´÷ o):†ÑÍ2ýysQjpøåØæe¼Î<ÃI 'î br<˜ƒ>›ÅÂT^r ô.œôÀÎæ÷ä“ã&„æ›Pø'¸I°] ·:æ×ù;Ýï;Úoñð¿1“^Ääµ#¿O•8BZÁ_ í½“a° $ŸSZLˆˆØ‡äâ ’ˆìôF/OR>ÉÝq¸îø.ªäªóäCo<âîcñKU&p™ƒØñcUš6þÒÐ*ã:@Š×ýÎìî0å3óÏBƒÝ Õ¦‰ï1~Èð”# {ÐÒÇV‰”Ö¿žÍ4AŒä´Àçß nb" › ‰ßÎŽÿwÚ x`Ç÷ñvš6YÇ!†¯ºÞq`@#2š`’Ò#zd¤¯Úƒt‘!V&ZqÿhöÊÀr; \çõŸ÷;>ï8Ÿ'ÀV+Ò±Ê~~ÜÇžDv µ1›úÿ/Q*©cjiî|Ëi Q˜ÿ(6Ês¸5à2†ËP#G¸<’žj·0IJւÀÑ+–|HO‚ iý72ª8òÏØT"QâNÊ¢Ån#>Ó«':‘¤“«'ÅÞŠ„Ùõ‰O"%ΕˎD_©íÏÚ]©LSɲý„;ˆ²ms:6;ÇsTë/÷œ½Ra„´÷Ê|Ì£ç¾ÏTôI´ÈŠrX|Á¾ÒìC‹˜¯U`ââìÔF‚æ'¾l·ò­=g}“bòFgfÀQ¼ ÜíÃî Z§”ótú›îÌ{OÛçMÆÍ{±Ó¡> Ú/°¸„²7DׇûŒ­•Ñ Õ¹ý„øÚSÄî#6ì“݉Å4FhØœ'û.ñôc`Ÿ2#߆…ìåÅ÷ÁT弡æì¢”FáÕ:1úÏ2ùôšåÎ~á%…bñü!Ì p ñ¦.9ùSÎáÉàcÜ„ЊO„]Œ½®ë[z¯Lÿ`+A­ø÷uä(ýqÿEÉĸ\¼ñ êÄA×6…S¹_ŸÍøRÊÅFò?ÞaÂŽiyQ'E»‹Íìµa&å’ì—Û¢Íé …a j£ƒibÁíF€œ±ÃÙÊ9`¯?P "°Ð×iCÍC}<·í@œ’Ó±@ò’µnŸåçeîƒ5²ëU ÷à«´ 5†Ìê›uOבnÍ‘«µ®lP¹îì3A<7Š^nb™»g1Ó HF0ä²`dµC!„íÙRä…/FU0µ9O¿p~Ļƀ5ý^ÐKñÌ-q/.%éÒú)óÀM9su±‹D. ÿY¹&®úÞ 5Uº:³Î"WëàiÝ(OØPßæjâ›çEÄ‘ò±é6ß¾pNcÝÿ~T¬Î)¦I©€ËCôiíÍ-}•ÁFJZ׸{‡¯Ä™>2͉?ßJ üÒÇÊèà*)!×VŽd OkPÉ­ŠPÜ6¬ÓÏþƒU‘~õÿvzn€"?«,¢j? Å%Ìòø…ñ?˜ BÀ%-2x4vË€£e§!×e<ê2[z !l»’¹­“Ög0 Eöîí¾xD о„½nM»6Ö£SòÖ·È4ÞPlhc¹sUÔÖ™°›‰zI<+ÄÙ¼®PŠÓO”DåõÐÊÌ9t|¸Î3wø>…(Y߯·ÎL\öÚNX£Áú[äÝöôƒ–}Zç /P's—á-4æ6ýïËó…° 'É€õµàþ\àÚ¨¤}ÅqŠQâˆÿ3A¹W‚–·7t*\ËKðÒ:hJHÏi½™¤›M¡ž ú6I0OB“ê¬gKyÞ’\q}ð¸àËT§éÒ˾— »485'M1‡ÓQ'¸*¶¬63—anÅü—Üx “¶&9ò98+·;™O¤µ/V»?²6-hS“üÕ~·ïvhÔ„þû‰/0( i€yÉÄsNÈ%]cÙã§ìLp…(Ž|Ÿ¯qÓTòŠ`×HמK5qÅ_›–ÒÖwó€2d 7ÎÙ3¡`ò–[=ñMÔÇÛ;X‡ÊöÁš’R9&ÈaY©TðÉW¨aî*B³§¬BŠ¿+á;Q–,Ü(¸¤lûNZ©ÿ5Ç$Q™ ŸEÇñð6]‡Dõ^ªâõÒqÓAìÍՔѯðPõ* =+rßäs½@l×hÀ˜ ÃØ¬?’/šZ‘%µš¦NA !é×ìLdo¾(„¡K¹¶$ŸÆúNÓ4ª€6™Ü/bÀ‚Ç¥ªÎßRvÄáC; ðClö/0=«oо££,¨QP¨aåD‡ä+ Oš~Ç<@EÚ¢”µïŒ³*’D¤`_>ë½ý×@¾^LÉH G›¬‘u`.¡à‹ªHq&­·‹ál+£†ÿVå¤^R8XŠ˜ß¦ÀÔ‚«‹ö$¼f¼šd¾-ý·nWYÁ  ëîðD¿jHÀ1ÈÑ¡†{X·“?¢~Neñ ¬–þîø¢¼ƒ½Ô“>ñÿHÒ}©îïNõõ¯Ë”Œ¬†ÿ+e0eÈ`À]¾Mb*‘4óû1z»ùû ’ҡߪ¢ m—F½Ð…mǬK×Ô÷ŽA/xã4ÂÓ7¹”Ç%[Á!•Ó÷´]Ä];gþäOhHé9‡K\S–‚nAåxCDå½£ÙÏiL…þÊ[<ØÒ"bXü"–$“`%[¾Zèɜdz4þ¼†Á =ÛOFtCír毜÷T¿ÇÓvAí[¢Ð•[ù³Ñ|I8µò$]t±þÛ€JtD')/è8ùšÔò ÿi\58õ»'5ÁÞw¤'÷o=©D ×÷xhÆFÕç8pC•vÝ-yCÕ€|7ßHQ«8…ålˆ'Q…mºV@&V­3¢Úr¸iW•âÖ¨ãOˆê½üœi”Ë©l$ÊË熟̄1å H£CAjÆ•±LMûŒZ †ç O=Ø ôTIñìZŸ³©¿ûëRÉr©ã.+¾ï‰Y_ÏËÂZVýh`Ð? [3ôYÈ©kÍŸïÎe·‡k§G.®Óå…1CõiÑ1”¬j‚CjKë ËéVƒ3ž@Í]YuÈî¿•Óþ×-»OM“ ÉÔàÓ.Ã3ª½Ú32ËGs žß"Xóªªñsx‡óÉLb!~š’&áK B·$WUUý†þ¾±:žJ¶ÿVõEÉ*YWlÝGÁJ £ú_—›‡t2rW‰äÚWÿ/éJ¤d²ß;ã]nܹÁ~âçŸ\™þó`wº»gz@Ìõýa'ðãú/t½ÂÖ&›ujXÔdààtþÉŠÙÁ ªÂì›!ëÌAz¨‚“›+¢²‹p’Í8÷€ÁOC(§2ÜK/‚ü Jø‰ÿ$àÒ¥hmRKSÕXp¤ÓÅ*/íG«Ô¥X®g8AäZJ%®ó°k _}´o];em=í¾åjÚf$IùÀÇ!¿!1 '^â Gü2³M% 1\Ú+§ÐëÏþ>½F«üЙøÅQÉ=B›_±"K,Å•r¾žæ9¶>xŽ >XkᓾDñŠÔ4*~ƒ¡Âºo3buðB΢\wJ™—rLG–×R`ûµ#^UHw7ÉXâa? ½<ÇUImÚWwqh»ñ OdZɰÙý–&æ@Êë9“ý—«-7~%s:½›TûâÎu·´0uýÛC-2õœÜ°²3ŸÆ‹wŸ`êçóðiNWi×Ù{ ÿcÞDþæ¸ôM5Ðfª¸º:—ի×ôõƒõá :eÃâvVœvqFÍÿ¸J¾:'Jªò÷á5¶'%†&Ò¬š&„qšþ¹-`8R J”Ž¢×£ø3rÞËdaBš6wb\sSâ#« {¥@xe¼]Õ  ò¼•U8üZäqö‘ñkˆŠÉ·a\ýÓ+¦/Œ·uô*²C·*ŸîèFcß|²áÒCÝ·æ“¥N•GcÈ;ßP^K|™'Ç 5ß«9:8·ˆ`  ®Y¿U5¿dBBŲ‘lj`\pÊ„/kÆ#GŸºV² ” )µ ðU¼ÿ|]íåRuhÖ©`™·Æ¹ö…åEP3Á@÷ôB5K“´dIʼ؃È)´/þ¼Ýµ-³,ø7F¨Ý±˜µúPVXñS¸¿_ðå{ ÐYGrVðÿ79éõÃÁ-¦ÅFéïq„]¸Ï­Žôäeyu¾7§\R³–QCu‡*°§ÜÔ£Xèk‘·ä5G4å JÓ„Z`"ÞƒzÄÐ@“QàµP°:tþ'?æìÃQ@¾yøOO¨È4H?áh‚<×7ÉûÙ^“®Ë&‹Ñ§Aøñ‚„ñØ’åÛÒD˜õ)–‡¸)ǽO§È˜„Üé Z \¬#Á¸ Ë0uó<‚5ä7ã®kð" g;XñŽÀ§~ þyC2ã([*/›³N7òJðžþ ŒB‡š¤lø‰\Ê\Òfp=z`HÛðõîy@“ Í¥îʓӴ?…¹O;ºú˜Í6¸å+¿O[ÓZý «îz_ÒäKGÀº z=;¸/—àKaòŠDÄÔž%‘bv5V¥H—`!´ˆhÞyEBò…êù•ÏsÖáÅz¢Ü;XÐÕq™lvÿ5ç„âp~Ù¾×d˜ÔGåÍï6=ìÁmoj{J¸b9¡Ï(en¸s üL]C ÁpVobwÑâQò/³Ü÷ýìŽÛ~žAã¤èeÕ—¼:ÏX}/n þ®O:THY&©_ÝKãá†-Ó¸šýÅkc žØ2¨HCÛB£Å¼=^goúáÜi[LW÷iNaðáQøºA¯=Hh°š“¦óõ7©]#FÇY€^rµr<¨W&½×eÆrôéoc¾íÈÊ@|kÌËî—çAÉtüýÔÆ äa¿åƒ+Ì™À(·3-lè‘&¢Ûj~yí+\Cnyx¤Æ¡ÚùªÂbdR½î[HÒ#ªÈKùå:erJXP¸zýzYŒ"`2é[¯ßÚ®iXŠå©~+S'æø×$¿˜°ÙUNË_¬c“Ùz³ø9š:x\޾¥Ò$Ï.º_£S\Ðâ/|—ýì­8›¡ˆUŸŸå]ºiù¶ Äæ1N¢ž#‘*L õAl+*Íß¿B3¨\@I4åŽ ãê÷T? 0Í!Íâu-o>Th&ùÒéO}|Ñ>ìëÃî]cUÖ>’9C7Ÿ_ˆA“wI'ÛËâºäuåÈ/Y\ߪæVVNà1î2´”¢{¾™–j޼/ñk†ê€Çàÿ=ùLdÖó‡Í‹!·`D3IÖ8}Ï%—2„·âlgn¢+6]ldz…Ûfyaa„£4Øÿ-=î½’ú”½©ÕÅÊL§ l;ïÿ2ÛYÔ+žŽyk2okñ“výÒÇùÆPHîh”'´ë ÷žðµßyI7e¬tÆUvR¢ÓùЎ”ŠQ×…9 j‘Ά÷‰ZV{‚ÙËV®àÏTu7bf1ÎM¶Ÿà#aÇuÃÖ@—˜Ø@> (¨‹èë“o (ñî-Jˆ¤ -«§@“Ú¤„eh_;ÆêWX|Aws³~°ð«³1¼Åø,+18c«âÛeÇü—;ºŸU Iµ×ç %‡$ï½®½áÄ€ö_Ð.ÑG%Ð6^ÚÛá|þ‹ÿ+©ûçô‹|þ°¾R×ÏëŸõuúº^Á|þ¯W^×ÏêBùý;ðÓÛ ‡ Lfh{4ã`YLƒ•“ÿ€ûcÕ8ÜMÆš›ùسÎËý¨¹À0â/OôD@’×Ë\ï®bªøÊÓ¨ j3ü ‰†!‚~+7 yò Èš¯ÆBçùk,r—‡ ¼éŠ’ŸÅ7_%[tØÿÛ·z¿ ˆ×A0€nIªRLAÁ‚Ð Á´½ó´‡5·—_ Ä.[2bœeü¡§9i ª“ô7nïûˆ7§1!¸jâ~¦ë4ƒI’pë4”´vV•Ï™«>',MI Œ¼°ù,§Ò˃ŠÇ»Aôß¿*ÝèÄ„áʺT³mø›HöGé‚áH ´ÍŸ:B½ç¼ton‡qe @N‚qü«"0¹¶Ÿ)òÚpNò 8„ë®`ÔIÒÝ+¥ߢw¸šüG-lPsE` ÖwvKŒõð%öI\òÃ¥.ø—$¹‚Èv¨Ód²7?b—·êüzC¾ðz¨Ó|!‚3ô'KŒ xÚä‚Såtê¿«2+­mA7¡0á\Ô ]—p»íI«œ>êÿfÒ™:?xu©è~ckõÉQ’ÿ,JI'@–}‚bÝ-+Œ‰‚ÇiÔÄËz,]M¥-¦üôL©±'$!þxƒÚÞ@b ¤ŠÏp¿2Yªt‡“†gqÅäêËY˥шºf5ò‡ïÂäs´œ÷PJЩ,¹Í}l;2ƒ‹-×ÁÛ´7J>Î oŠ!,ê…B<ÉÚF¶»ê* ¶2Š––†&S¤Ç Øî¬jÛ2bú$rIû&þ&ú’¦òÕ">D3› ímMœ8lð^Þ¥½ð´OÁ“„\* ÖÏ?l…Òʼn¥8NÖ~y:°_œß“›½ýȾwá÷¤¤`MagÅ‘Hí€=Ö¶…Ÿ|$î×6È;+ )ëË <¾Ñjn– Î/œv½EÅ,+Å6aA¯ËQ­Îkåé©ãôjáQQ‡ÜJûTðOÙzÁZÂZØßfŠê°¦H/Q\ƒËÈ/Ò8?‚µG‰os3I[e‹NFpˆ7)MƒÞä¢,Hñ…`Ü*Ì`I\ìÈ‹D³B…D+â»?ᨿ‘ü³;™¡þ—¬­æ4Ûö'ßÅ×^˜¡u&ËPÆMt)¦e¶÷”|5‡¤ªâþ+ÝNÊ73)‹zcKhrÈÿDìSW¼àßæ‹:.NJY‡_t ãNqÆ$áI wG,}tš¬8Ÿo»Á75xŒ„ oiæ·ž˜z©)Ïc>rÿYm> ª:{ê…y®8\@þ爖Àü¸Ìø“HCù¯Ï|‡–:²ÄEï»þàhŽkÆ„,Îîò˘ƒ×ûRŽŸ°-n¯eÏÉñóëœÀ!3¯y‹3fºSñF…‹Ž.^D†e¨@Eßt9LÔâ4ó”^•K6ñe•t„<¬òD»ƒ–íâé–@ÌdNúÍAw•*à.ºE¥-¼?j g€þ]ýABgúíù%õñîÿk-ûKsW—¡ìÖÎ,•µ k-\¹,bãBm¦wé©.é™=Îÿ~Brt°c6ÛôöMQ+TØÒëÿ#ŠUJ‘)è‡ó´¶1ßJ»jöÈŨ[{¯â×<Ç'¶vüguþ„µÊ98ëy¶Ö¢üúŠI]­*A]Ru¢Mªæi/̘â 9R€¸Š”€;²>x7’áŒhb˜ +Ñì'>àmLõ”Fl´¤3Q•ÀÊL`fy€Èè+LÄD:L:C˜ò~ššÖÐ>¯4izß:Àz&ÁºÅ׸(µßqþ‚Á²|QBïÕ³Ôáæ/oäËR;2ãäŠdGaa°ª‚¿ŸíØ(b.l³¦¦äà!ùGE—Í÷ V/ªS}@wöhÁt´SY4µËÆCa‘LÕÜ]Tâð~ÚÖ®:#W†~ʼn7lþº´’5vS`‡ë(‹'Š¿pÅß Çˌ硖g`=þ:$Cïf³ÙCVC¯Š%{œÍ͇qÑ{Ñ‹÷§âèü›[k;鞆_ôæº3$:`½9«- °ó¯ücÔH42$¢uÙj§½ 2ŸþŸã@9}Õ;áiq5Ã?]XÁBŠœä†g2íÜ= Áϸ×è9Q ³`0´ÈËõGæ3–CÈ&&sÃS\F$´ø±¿xî|Ó~6·|釙í6~Öí™íÌrÕHò±h·Ù…¨–%eóz`sœŽ¾ ƒQó˳´ÇQÎOó?gm•zêMpt–íÁŒ¡ûáXà´¢·Çyò­:ÙÆ¾l'ãÜ—§¾vÎejÜ÷Wÿd³TÁöÃWBÜŠ„*}`›1SvRhnå'ØK•‡ÍF•µûÓÝÖ-å³™5†õKðFÂ^¶Al”}:‹,(H ~üc—Qô¯éê ÔBÕçý¤¨•ðÿQl%‰ád¹ÕD„ºpã99õje“Ðÿ#‘çZ!º”® nó 6þT ³ áìów}ê¯åžy«ÛªÑ1¡R…“å…áÜWpH@s-HÛºu‰QKÊ‚\î Û]Ôô­1܇¯ÇüN„µdÄ}¹îU0®oâœìv't+HcV/½€$´í«èå?ò"çvp†ì|"׺ˠ[^Iì¯à³eDn ®ú˜SÝÜñ²ÑY…!bµÑÿ}ê»`ÝÓÛ¹äí‡2ÇNèSƒ£&bÔ{«Ä’xœX‹-íbúËÌežf ˆê|(?Ø®“ý’ þìD–È?ëüë+*2^Á(Ñ¡=(Än2°*„diæößÛlWƒ"¾‹*¿=»6yq¸_ˆyG,Üá¿A?Of )^ „äÁa/Ç}»Ð}õ²3yOGRëá*v(z45ÕÛh•±ºSžÓ(íòÖ³\¼êpú ÉÊ@Ió³£áß«ˆ9Æ>ìõ@pŽa•,òÂöô·½ˆúìò‚}Íí}gmo|wäÎ]–rÏC,µ*ƒ^ž¨Ã½e‚!Œá}©ž»ã=^ý¥ï'üùAì' qÙ¾¾®Ö|òïÍjš¾üž™çû‚¤ïNhŠåkïD¥伦øø°œŸ jÙ÷,l«(ÂÇß²@ð8þB€d©½-†—ã²2'ãOŒmãŠd!ótñ•"SŒ|= Ð >@,ž2'Â8^á(Èá.Ÿ©}á‚l”k…”DUÝJÜkqൌÐWëÅ&½+Üò#ß;o"¢ˆý>ô©^\“åø› q5äkJ¬XœØ¤'– :®‡•=Ó’r4!Ìü•7ºö¬Wu‹Ä:K»VV½]ÉãA°­±ÉÍŒa°>ZÿØ— G^ê SvDi55 %e‚ºN^Ć@hú¬Àß:E¡oö3´‰êyòðª›)ñp cX s†%¶€Ï}›·A »¼K‚£ÅUW7'YÔÿ@æU"gÙâýsGä GUš?¼*¦S5ó÷¨‚ú´gUg1ÿejØz Xbnô¿jÊ'¥¨Läžt¿åŠºoI¸~ÈÆU÷À Bòê (‘Lr8‡oÐ:qù¶ù–Á:háBVc<«0ÕE´ö»Ô†DÁÎ]<—e@ÍéŽñ]á7ûX½ËîÞE€ÄR.‚Žü“˜!3W‘©§¦\4â\cØŽ-¿ÜîÖ¾¡­.ñuÀKüÕæÉ^þ­x_Ø|!ã¸Ê&égº®rþ”ø ½´ÇI/OÜëÝPºPdÆö£ÊÊœìE”ØöŸô½t?a(fBügIw„d½ŽÓ$¿ý M;ü7†ƒ?#~1‘Ví+ëG +¬ Ø&D×h_ÜQª¸®L¢õS¹ƒp/ à…å;†…Ü¡q¯h`ÊÀÝ®£ 0d…— *ø2þùø|¿#`‹Ñ캘Ö­¯ó„º?h[G7½©¬DvdQ’m£ÞLW‰häÇå)©3¥Ô€yºOoIˆ½”%¦>û»âÿ.~ˆ®«,õtÆ2GgïUÈW˜¹†ê•ÀôÎqò.Ï ü1:C ”1ïœþ<É`ƒ×6®ØÎÃD´i„D{®êzêþ·ÓÐp}Ûˆ¢‡° ÁPRr³€33òXCÂOïÛh$øeV´ÿjªøIÀ~ìoG3 Ú¯ÂKÖœ<‹µ³‡ïó?߀ŸáBìj:$„î탨›vØåÉG9Ç ÎÖŸ3Àú[–FhêÄ­’ÙG¢Ï*6QêÞ쳃¢´ðžðúú7˜OH¿h¿?uµAS¼©&Õ´NŽ·Zá‰Øµ„†«ù% ò`9‘ŠÌȵì+*~¸ÓtŠOë–sÕ­¤Ã¢/Ùã dŸžds›ÑÇ£XäÏo+E$å»Ìˆë Uñ·Æ.u¢®æÚ ïÅ)çOB'cùe:à~5È'a-wçþñºwT¶®Xš8ÞÔ-Ç’>ŒÍ½€ëAÁ4"‚Ê×ÕªzŽŸ@ÿ$‘?wT.AÞ(Ļ蒄 âq•D{dx5œÚ×-;žØr-GøûE±¥çEÎÊÕï6†¨ëÞxb¶Í¿æ|“hA*Æ”˜>::ƒÉ7C©ô¯¬ O¦P»«—¤õHŽüäƒR¢Bè¥Àg ÷`ìLò-¾!¾» Lå嵃[õƒ9Êq‚Ÿoµ¯%™_üé@F\é¼)zàwÐ +*cÝ9­‰.¸EÃ➤U¯>惫ðOi!¢2}ŠŠ¢Qˆ.wC±PAxI3¦³@•^ák¿¸¥µ(a[öðŽ*™{ÄÐÿ(à ÿVÅ‘•±ði|DÅ£\)³rd˜©®-V÷ï€ Úñ]â½WædvLš”®[èî®÷×Ãmæó#P ¶®$6iÜyñxüõ›?>y©zúî³6ËiH-“˜z-2›YÍ]ÂÓ´Ÿ(¿'þG9Vj‹ÎûÉÿwO Ææ(aýô_YQ(„3ßâ·±$t™t;Ìÿü¢œ6 ˆný"ôÆT÷IõÕºk úß^ÿ;`æn»ÓÉÆdßG¬A1•ÈÃSÊ·œqÕEaâñégPfÏ…k©àwä,…á>Ÿ›ýŸ/ãk”[騅ˆIýû— åŽT=ÒwĈ …Çß|ºUìЙ¦à+<ß(¬uâÝ¥ü.÷Ö¸±›‘Ç8ƒ¶¾ ö—Y[xɸ—úY߬PrŸ6ŽÊ›ôŠ&ŠùãdUüOS¯RBhjK4- ß:Þ¾A? ’ ³ÌY,UÇ»ç Ë i ‚=¿]Ò°²Fáܦtdë-óIúPž,ëÆ"!Ü|à’[ ¢ƒÌò0»Ðük]¦Íû½]ÁQ}m‘V³mc4—|½Så×BËr‹ïZÒ|ÿuä<“‰EgRŸQ bõŠÁ4wú£Vbxv—‹ïîx!äÝUö#ElßáúV—þ£ßÔ{ÚuûtfúŒï¨× óŒý·ÄùÆOœ`{]üþÃùÏN«þ(„„HֵЫží@­üú­˜À;ÿ~Ìh€½JÑ1Di*J’¤©*J’¤©*J¿Kx¥èe£QtædiïÃôÈÕ.sDànŒrG¦ 4;$ª8.j Ç)qž<›QÊl”.†U LOóâ€Ç 1³/.óøy€ÓOÞnW“Å æ[äûØ+ÿw>}¬J$g1œg0“0âJ_"BúUa>b¢ Iœ©-µÌ”ÿê,gænàËæÇ<ÎBŸaB&€Dt¿ŸÎߘß@—G8y‹¸;,Ÿ´†™þdö¢4•%IRT•%I#cšH1Ïùí9_3”øöÀ $!AÔ1ã×”°d²@0ªÿQ¨ÙIhp0Ù¼Y3K/f¤æJ’Í(ÓGb2jƒ3¹eë}!"À•óÛ¾”ÎX*1̪ŒóùœP™T^¶Žc5šéVÕ«v¸0»õ}è°|*¾›œQ;䫯 ¹};Œcfzí‰ÉéW¿´E‰å¡)O˜á¶ºŽÆìêê7¼Så"Djѧ©¯Õ¤ñžyßòÌsD‡†Ñ©’,‡Òx"“É ·Á²)Õ±éÒš¤ÇÓZI§º£3±Wã>RO`ù‹nEiˆ˜s7×¾\šø¶õÎS’IÚø9žý É¹âfãS‘ÿÙic09Ê jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ Éÿ“ÏÃA€,ž¢ô°$êç£ Gœ–)¶ N–LÌ~½…ƒßÒd˜F[VDý7£ÿlÛYZi‰HìýE4IˆÕ|ŠH¨|ÛÇ®Ñ×БÐqk,0ã((mN×@3Ïñ‡¾íšûÖäÙ§0ñFþ¼Ž¦sdZÄá=w’Œ¸p®›„”X~Vî?¨]i¨ÈXv‰Õúáb$>$*é”Ô¨#SoÃÑ%²×š¼—rDL‡^Qì:†5Yc}ÄÙ¬ä†ÇŠ“Îµè¢ú3p=-¥JÄ¢¨6©Ð©f <þ:,'ß+Õ•–ÇŽiÔI<#9I)פõi~JåM©Õf¢€œ÷Jxr–éËAù ç€Üx À;P#T=`îp"Ïv”oÛ¿šŒÿMWž¡m’¹¾{¡õ !óÏœ)5æÇÚÞ8ˆO¨üp|pòmøþpÃ>»¸‹ï`ßs!LÓÕ’µÎKäOÔ×Äéœý³4xWdžû%^þ¬ˆlí>æµì^@‰É›êV3JJCp7â±’´´S„¨!¡ÑÖÓKßyèåØÎ“N*%àíw¾ñÏÂÊP÷ÄkÉ> {žôðÛ`–͹P˜&!ÎU0ÝÝfD+©Rð‹íŽQF‘œÔqþøYÀ“I_Ý@ô¡ hÜxà OË%É IÈ»±[xdJ!ÿmmxL{º4ÇÄE’$ë»& ¥¯¶Ê…–@Ë‘…­fUÈ¢ .R „iˆ‹6hgÔ)öjävP“I•²å¹qð0¼Zß9¼âÇDŽõͱ\±g¬Îƒ¨ýãnë2=.¦õbû„cze ï”Â:ÀŸKhZÇáhÇá^ÇçV€øþIis¨;"Ȫh:} ž;ª ÿ1Æí£ÿ ¶CÝ…PbVh³©óäÊ´¢…­mn»#3x© ÏNc <¿UÓÔ0…††™ÅÈyZnQ(_t’ —ªi>‚œÎ*ÈOÇ+úõ‰ü'÷Snᣩ ‡Ä`í–ÖPIY°fr^AbükŒ¾–S­³ €t8&È8:}Àa¨Œ^v%7»š›lK¨µN²]^#™àÊe>#ÿ(«`ß×óârFg°<ÂΡ¤zÔ]s¥{m´„ØKM4y} Ëú®šÞ¶ÃæeŒûb†0Mâïï‡ôÈΊ¶`ôMÁGÄ«ôº`(R…˜s ¦Í}¤Å`,êü1gæúm†ˆ?<¤$9õÔO0Ö»®y#£>¾ÜZŒyz$!ÜŠaJ7$ò›Flz,žÎJe®4Ç2ŸŽ¯^ÏuýSžvG”¯ov¶¹KsKƒe´Kžé«*/e9q}fþÈ[FR`§A'[½ËF¿•è´M;"»¬œúÿkìGö^°+êÂZï™?$ƒè/ÞXŽc €KWk…ÜÄ0–Ðãâ½K0\••iG§§.²€}¨ ;>÷1d:p£ôµ¥ƒ.™Ïã¬4?*|Xrt Ë”Ž®JÉë¶·x«¨Ùwþ"¨a)'«sÅÁ söwG¹Ü7"uÎ\Å\²Hþ»sÓ¾æ˜ou(ñ1¡À¨€;S;^‰s•M°ŒuDê˜I ‡ÃÆfäP –z¸£|TƒÍ~Ñü„&*våN½ŸºÌŸ+þzªHÓúÁ˜p4t¬Ç ²’ÂE_í3+_ ´.™ý'ò¦ï‹Ž=õø¼@:I›qjAþH¾F¢v ˆk;ÕàdÙNQ ÄG+°OÁõ1Ãíeƒíj~Oô¦  e‘Æö+‰*Ã2£ÌzWd]ÃÛ,å³ÄÉÔ㉟2¢Bjx•“g…T¯;3b©2{=÷4„à‡Íˆý¼ñÌ΄ý¨m’a±àÕæÊ]RÍžèpÇ®:K—ÿ”ø®@’äccú„oÓWXrý¸?ùÈ?pX/=ýµêi—Æê8X}V”Wv?^ÜÜðÙ´àÿ( çƒ]È«ðMÏ'ZT.ØB|æØ­§¾®1W#ѯÖÙÈéqß®4š›-(¤/"‚—b±ù+ÌZò#C´ pà¾,Þ„¬ Îù“í6›x@ð†L$/ÑA»ò£D=¶ûV¼áðœBkƈHÜ?%C‡§âxýg[£¾DÆ+O'Œø³<>³4‡ž²ŒÄ]üÃÎŒÇà¡?3¸~àˆêüÞ“µW¬eÑ…°I†»ŒÅakf—ÎE©³ÛÐRhÎrçv£u±æ%yÄ]Òúò,þc]Bé¼âzœóè@R˜ùˆÓïö˽u° ô•P È$“÷œ"h8=1bo©c/%O÷ÑñnŒÍÉg°Ï…Ú:÷$•ÍjDB´\OÈMȹ:¼ÏÌ6DØùÇu ©ê]Ù­æc 8–Ím‚•ÛŸOýE¨pwºá8†L°gK¤´{TêjwÇáÑÄüú‡á¹+ü2ë}èdLµõ=[ÖDãm² ˆÇÆ û š Z¨åi[П¢ßg+¶eó“¼µB˜•Ѻ‚Ñ +úÁT‹VÙÖȳ—…ž³; $0ˆò!T2ÁÑÃD[Z§_@âï+Ò{‡çÚPtC»ÉB„›3"{Çì¼1ýßlMµCIeZN?#²ªü‘e¤%£mÔ•þŠÅm×`È*á8o9¢Â©’z‚÷Èø>ë™Ñ¿\ó[C ¨I‡ßõÍŠ¥ü–ær8ƒP‘Üb’ eÏåòÿg¸Æmh1 <öà 4{Iñ{÷Öm[ˆgœêÃò<<¡µŒãYÙxü®[ø3m8€•/îH_=£ÙÖføéÇg å¹­Œ†Ã«CeÛ‚Ü/ŽÜl©‰ÓKvk¬’×|ûÉ‚ á­LY¾®NÕÒW"i“™èBÆà'‡ùÛ±–i „‘¿’©â;Š9Ï”iö­¢Ÿ­· Tàý‡švÜôÎ +™€¬:©fkþX/R _/g÷ùî®)²ÊÂrE]{óÏLŬoS”Ãõh_s0Zó«´¶[® ?]³yý¡‚Ì;';ìž¹&4×ÈbfŽí'l–qδÏ|r y¬Ï¬EÜJzÈBàµr2?˜ä7­¨E!×{Òæ@-Z ÿq7ó ¾>ƒÐ±#5š…8Ö-=ë÷5Ì•2X;²Îð¦NsÉBüE°r—_VÞ ½)sˆ[nåN%cËa P$ •W·ÉèÄx·@Lßà§’^]T×3äb˜]÷¢Z¯"; <…~éïÑKQø‡z¾¹î.â ;?{ª¡Šß”HhôÐò#t¾“”{mã…( ÜHÖƒÛ…ÌéçL¶ÃnIa,•Uq‰º3+ÒXÍCãnÑ¢BŒ°…zœPò Õ™ÝÛÅëÃÞe¯úv8í‡N+2ÓeôØDeqL®“ø÷ñùf 5¿éŒHú+œvƒ ‹r»Y?Ö"šð?- ¬žsy~’”}pÅKÉkžeb”ˆ®Šáܧ¢+—³•¤{§--³âÃ'#@ì啳9äq·£Î2÷·çã )ZàYà ¹Š ¬;X«&ÿ (¸wýøl_@Èù5s$œú.'a ž¶¿D“*øN-© ’Ÿù#~«½{0úþ´OùÞU ^n¾Qãv+ØKK¡mŒáT8çäêä® Úƒ"ÿFsL¼ÜÌO5{Œ€Û’I$mT††šÐjÔ¤ïìb$;ÖüoøRú3뿚€ªð¶É¤OÞD5õF=;KÿB?*¥Ë º•ò-eAåù‘»ÆT ‹®;f ˆˆÎt!^é!¤Užëé'Ž$+lñv¯\ç@÷ ^q 3JÿuBFÅœÎÄ’I$’N %‚/C.vL1 ÜmcVÛ…‡ŒÄ΄QΖW7u yÑ©ZC´‚2F‘FØBÙ¡ºi5Ö{׬¦§s¹K’ð}0ß‚ éÜob,[Q©æñ1¿ñÕ@â0ÞÒ<_¾¤b&Ÿ¥/6Edð&j¨è¯º^‹ÜD=;™È2ô–b©›c:j†8ŠÑO„³œòa}jáÁÍ¿w‰@–éjÂrï*̘ï/Zó:7ªq„®jšßo÷ÍBÍw#¦ø­µÄ)ÀW‹Ý¡æ°It’¾n íò5£%ç‡'VÞl™€Þ¢}$òR(vãÞ(çàÝ£ŠÙÀû3Ç-’ºÛö'â,ë«6z„i†äû¸„¯Àk¯ü™ãɳ),yÿLŸsYäž^+&¬ûÚ€üA¾TÕ ¨¿”,&ÐéOaßá;-Æ…!å†,’{•€AJÂîaÇÅ­ŸµÝ´CвÉGÍ;‚tˆ}y–~]‹dG!¿¸9zܤ‡tÀ`sæ]ü¼mn_©ô0P©L—Ks¬o“>SÐàz`š¢@${½¢ƒ 3SHÀ©£G³>OˆÕKåƒ[P̈7°ÅSÌG€pªWÀÞ`ô ïJH !(ìÝ‘÷+zÂÖaÐ͆ ‹‘ºã)ïéiDqBˆ¿ þg°ûeþV! À¥ -¿ÞI[‘¡mû»MN×leíg¯5vu,X%½ªï4Ó¾ÖY|3ÏËÑ4?Gt¥|)}Ê|$u”ä©‹ÑLa!tb’ÊÑŒ±•ø®N'~5#ËÉcÆ4{pOIò…Y›ªK¸Lw@¨>ñM¨’#Ay×~3x$µEx¦‘±@Oe©È™ O<£GéÍK~ÇýŸ¦ 3âÐ'UuãY3Y¶ÉùúÝØ¿ŸoNÎ:°··R?Ð(4œ.f} ~33Wø‘}Iöñbsä š¨µ&ˆv3' ÿ1sÇç‹[$×Ã{Ä» àóJ ›@d_S£³ßaĪ vä ãM‚%~ê%„…–õüÚ¡B-éòöZUT:ïæÓîòø ë‘‹h>Ë^§ òS¦~ª"ð÷8ãò<ÌI$Qªç5 œ" Åëƒ#¸§~Ô"j";fÁõhä>Ý3õiСð\gAgÿ2ËçØæZ½tù¥î#¼A4ºæ¹£tÓòÃ]ð‚)Vópcñ’ƒ_¿–âAlÚ;Ï Ø™Vƒ{eDÇ J;xÚö¢VP÷ÆpðÀYp¥+;Éq£ÙéV÷×Û-ÀèÇÅ…d¤ï¾ P¦ú¼–;È7\¿îVuʧ…}'S2~Yb;¼(\SÏ­š9ŽÃÉoúží¦!ZW:ÎÇ`(˜²RGA|ÎÚ4] ˜ã›TÂ-÷DçIÄÌúñ»@J›òŒS÷%r®~6|……ÆPsWêÈÀ1 ³Ïbo‡‡À‰ÓbAݰ“÷î)UÔã¨èŠ3ÿ;ýCÝBcÈ—ù=j¡†PÇçmU ¢H ç‹øSœø o*͘s8«„@>xì&µ-챇%¹´gªyÀAB3ÎõÀnÞ§Œ]Ì–áH Õ3•ç%ð)ín‹E}ÙRç”Xñð¿Â§ù¬×¶,]r`A¬N &â]˜€8yb]Kß\\!!ýEO§™Oä¤êWý™ƒÜÑÅX¯–:#R1 ƒ@uÊÂiÙÈÔT`Î¥D†­é;în ·ìë7É(R(w¢Kðd|Ý~T;wýçœ6ÀØ1¢Ê¦Õ)–õЧ<¸­t;«I_±²Ìòu¬$¯ óPM80_Ž|Ù à°tù§Ý1¢%RlU÷"¸e¯¬Èön¹jÞ»n°Ôˆ¼/ŒC‚|±  "ÊæŒ)ßdÏæÇì³¼=9˜bgÈ·?Vw`ý´QÜ2ý„Ç¡™6Â×@yM<¨ÜGŽúºvåݲlê•0xÝ ‡áÞ~Ó¥õçIfGbï 85H‹×R‰ÍñA~épøó,þ¢æ`ÃÚBe„Þ¢)3ö„ú´ >½•þõמ¸Ø'£—áJ,p(Èhh¤—á}:¤¹Êf3îüƒ9u¸À-dEC| :xêµ¥ƒs¤û¾Büf*âzã܈"v ð©Ò†I”)Œµ*ÿUÖå¨L$$õj{§TTLëÛÑ‘Çz¢î0Û¤øŽîvQÈ®Ètˆx¢J‰‚°þɇ“Àï©JŒ\ç¼þ-÷uË_ÉÄÉNÖzµ ¬:Ý­2‹+ëq• /µÚÍ“>9vør¥½ýÅC¹í€ŠJ4ÁG4lgPµ'= ÔeHÃí¨£ð¤àûVÀ+@ŠuIŠƒ˜†Óퟠá=k‹|OˆÖ-p$“žr!é«… ;Ú$36÷ÿ2º¬ºž[<"hrˆØ±¯z’ù:"µÖ?Ôš ¥Š¯=¿kµIqØ`>iÙ ¯^0ÒüzØdìÕÅå‚|!f, (&ß», ©vAÂâE¯7~UæukûëMAÕÕ2%š(l­Ó¸´ ¾]eººƒŸ1êåVázBÝeØ"àtªC*]C!ËÂÞ,`г˜ØEšP¯«(Ñèi‘8ÁßNúê»øÜ½òtŸì.a®íLÕ.·ìÃO±» Q€-t†¹ôîª%02¶¨PG°vÕC5ÉS²U,ƪžUV»JUVĆ—4€½{qR<ÙÀ›ÑsøsñßV¸(?ôøæßžpîä/7œs\Ä[|ñÞô (ˆ <ãSZçë»¶_Žhû"®åœÇèd¬ï¯µžàþànÄ”98ùL„ßdI!m^È-”ýnãów”Œ7ÈÖ+·=ù/‰ Œ3'ê€ud\xƒ˜]$SrF†sR"Í—¹‚šÂÈžãÍÓ– ‚ÆÜ œ ýê·i·àO®µFB²@'°©¬:\•rE¤€ÓRBWëhC¶ÇG:þ¿1cúyU¼Â U䦨9Œ‚òô\ ¥ñ)Îå3%›‡Z­©`h“N?&³0Í@Tfj“kMlýz£|òàMÙ—jmm[ò©ÒÖ!d{]ëì`+²Ç³'œåÀ]†?FãÈ“äsN9¯ücŒÖZ/aç ­?uœøî6¢1roâ=ØÅpžÆ†-¸öOÓQzòÇ^Ñ0Fg`Ú«+ƒ°mé…<ýŒù`>Ø*¹Ï¾*OÕ ‘ŠA*Êñ&FRÜ2PJp5 ]ÌÒrU}×î]Å|mñLÏe˜†oÊ *&çJ4'ŒÞy{=ãÊÐ,ÎP6þHTã§Zñ<ŒUlð²w¨ñ4NTäa4̱ùÑ3è‰,‚¨ù ©IÖCRy‘ïΕ=lè!ƒ½r¢•ÿzóп‡t°kºåÞŠ'ìoÝš3S„‘çÂlj2rÐ-Mj›µ~øß°¬®Ž÷7™Èr°Íþú® ÷ Î;.6 8ê°FzlŽúP‹¨²‰É{¹+±’…Æï˜gœÖB{û#L—£ÔIÐ:˜Aú¿€¹Vfè×¹wÏ'){’Hü(£$—• ªxRáX%cç‡Yl€—ÆÇB_ÂÛ0²¶¶Šb|€,ÄäéÁ7náõ€ç·àcÞ«´ø ®æq|F#Qx|;Ë"‹ ZnŠÏý7žêÔLjÕºÇ@QU+or-76&ùhšÇ†’oàÐÙ]D'aè;Y5#[ÍÆ†\××8•…^ü£ê•êÈ»âl‘ò©úI×AüÌÚ7Õ,ã/|§r”¹ËÏö= !õ$ÁYÒk"o+à$󱉒Y„šþÏ`'£^égG÷¶#HçaÇý<Æê£áàdPÁ»{ÔÌ{Kº5ZÿE·ñ {Ð]ìÖ™·ìë+à ¦Â6hˆ°‰CQšsXØÎ¨‘Bó83ešã‡nþ+ï ƒŽ+t! m³Hþà& ºÓ±Þ  )™Ñøï–„‡Ž…îÅ„²W­ÎwŽk°¸rèÚŠC“1ÐÝ=[vQlæ_‡ÉIóƒ>x†²/“€vå2Qä«’`¤?IpžC±FÙuÎ"Ú.©Æà½…BÂBXM.ý ] Œ0©ÿ!ŽÇ¨kDp¿ :o }Ôy©Ö,ç~¿!ýíËAþÛt£rœ—¦"³é^#Ae…NilJ¢*’nÊ)cÚ ÆïÄó!G =€f\NYïÑlÛ¥EߦÏaÉnŠÛsÍéC³¨ã?kDÒoÚ¯ð8ÆÇ g61p–оøßK¡~a¾ÙHÁ‰ú…Á38³€K· ¼¦]g3¡V¨Ñ~p7MÖ„šn†Å@wB¬\.{±‚GH¹Kì™Ò±Ñ£µ˜üGv:)ƒEKÑî ÆJ3l¿å—:v¡îô3ñá)]¶k/¿ácï#ˆ鈋ݗÊ_­ë¹ëŠ’Ó¤ôDÚWøÅýÅ+¤6qJPÍ·°£IêùÌ|ä»5?ê·jªjl͉xq†¨iŒ\\Z‰D,¹F%÷B³&¡qDâ i•OžÈv? 4 Úì¸WävòF†NƒEóŒS±‘DÏl­`8«¡s·« ·®®eCOu P™?Sè¶f§µø õ"è&ò²ç,õéFå_aÔ=––ð‰‚X¹J§;X@E¸¦³a62,ßÄêÁwð‰#T*±Ò*‰ ¨ÔT$)šˆ½ç>…S½QeiÏ:Žº‰xã6w_"íØplcãÄ™b0®Ûd§&ˆU4‰YÂ#+Tâü‰Ì˜”¡ÆÊݵÚïGÙ¸Äm$Eè3-@^Û_'¤g&ÞHô[Š¥o±‚±É­²PÈ´gQ“ÜkŒÊêz|” ´ó™·å¶õ]x,–ïh¥çÖd ɶìSºq)¹Š«,œÎä­ Ž·œUfõõ‰eñ–!Õ¶äå›]áO8ˆ]Iš‹nC´É¿®§²ù_5ët@ÈA4±÷Ï„ãRìÊ8nŸŠìü‘ý'hP]û“­#*FÚŸ£gX´r—îÆï¢r2uL"6}œ/ñ·']Ý${Z©‹ó bûLM:ΤæÓ H'e6Yq{h¤!+])¶š;XdûÖôGG&OýÍ”‡¢à»Èˆ½úøMv)3“àºòs<—‚‚Š`Çn‹ÿBoŒÓZÛ†ö<Âëÿ H/ÿ4q#%µaý!‹¦ùˆ>©©Ã;JçU´ÅÎí†æÞÃÔ¥WžЈE:îßVS³ÿAYÎwn±Ýípv#¥X…,‡$£Ñõ F鹎™ !,19VjñF»ºš˜…<ºòdé(¤™ý95íé :‹·Ö¿§w8‘Ømä©Q¤—cÁˤÅa¸ì”¼ $+áš»RžTIR:·J}À:\á2¤_¯ »žÕB-æ¿Ð f#º7Æ00ØVØ3ìýë¤Qµ BÔøûè` ½6VX®wþÀ‚’Pó0ÎR+±­‚gÈlw»»ÇLÖí(ÔqÐ \–ûcšÝu €UÅ5)ðÐõgɪÑÐ|dÏ7÷¨ÈM)Ý᧬²a­AMý^ïÒ½Éä\èP°÷#Ž÷PŽï¹§!EG)ÜõB°t{àä3Çبáz/íH5¹Äz8ÙQþ?•2ÇB…{ö°y]^}ø¸ZGˆÛÚjа`©¤Å;S}AŽƒF?‰ÐWèm¡ºøƒrà-EÝšHª€>“uÍN¡i\’è"ãdãxiS¤”‰·¶ûð=§]ʼBÍ}|ê%wF Kí&ŠNGýFÝ €«ð*•5êŸ(”Ãe)ãJÞ€U’§L·ùZ-É˹«“JÔ"ã{Ÿ‚N_ž3+Žlß~ú½ï2§¹!è=”å°uh€Ò­PÜÇÙšVtI‘®¸ì­ãîd sA«ÔqTÊî÷­ÇnNæU¡H@îè+Ð×½Æ+Ò)¥zf‡ÎšK3+t ë9/JE©˜;‰|ù“¯³âOqn=¨}ÿ?íR¾)RReHë™»HÍÊ@ˆBÒ¥Iáu´ÐY`HôË›ÄâgêRƲ«RÈ{8ÿMIrÛm¶Ûm¶Ûm¶Ûm¶Û…q ŸÛ½žÇá4“®²h<Í0¨ÀƒHý˜†jÐ×Ýâzvk1‰–õ&¬¤ãÈêE¦*pþÊ7’ £µ¾ƒnX,Î;¼;DÕ8]­üjˆLˈ§Ç•$sfô£;“M? %JNµ˜ `Õè=Òʃâqí^º²Ä)ÆPØË³"ÍÂhêÕtŸ:µü=mý²­4îclÍ:ç°µ>z€‚¶bO9†M9öQã ”bXê´Fr1ó\Ó¨ë™3á¸8Ø,W -öà×zÜ%7•Gkùu¬Çvûi²G^ï\æ öÆsW§òßFÉìùŸÂ?}è¼döéøõ©Áœ²2;•;†‰<óJ†³¡¿ö +Ÿ:\õ=ùàHˆ§Ì—,ˆÚ÷7m5–1̤­™(°“äcrí²V4fD‹ócaY³öšHà7ž|¿6âÛ½¶6f+qíX " X%ø…äo®šVË×E°}:ó•°óváÂpñi iȵ%oûÕ¤˜o‰Ä)½@,Ûf05Sü\2UPzu¦]“OkßäÜùB¥w¼ŽuñK†HÐÃÜœK1/ó=u! äD˜«´x[OX·CèœEú‹EÒòP<»B6+FF?‰H¿îf;œBà¢ñrî$/br¥Ð‹x÷ÌÀ˹ÿ{M&Þ“¹Äó馗Mi %øÝanÂ/hdAü/pÉjÕ»æ‰þ«X%‘š†çK&ó˜Èm/Ðv^¹.-ß¼ÙrV¨kà8/®…^±Xl/Šú§ÜWÔD”`ò@…&šâ./|ßùG]¾ŒV ‹'çÊMVj„¯Å8q»¶Œ¢QO‡àÇ¢A²ìt¦ŽMô \ùõ’¶áIq`ŽÆ„ŠióÇŒÑ2BÖ:ŽÖbI\TÚíd´ÔHJð )µ E¨ª&‹eØz `†ÛOü.8•|—?H“ÀFÔÛª+ õs©=kÍ‚ùr©¶ë«v‰ û9;<¦#¤±e âf2³¼B`ŒNmÔˆ-'$Ø 9Ž¡™wÆÓTùÑÇÝþ>lË˶3ÂK(ÇVlõ«m‹ÈõIjžÕ%ÜDdÆý.“ïNdÓêøW/ûšy ñöð†½Ÿ¡­Ù´´öøzxfã~wYš(`´#;ò²fÀ“»àt^{Þ(‰iC›`6æ#óÝ5>R’mæ2¹nŠŸ@ ­˜màÏ‹·Æ¤lƒÿÚn\æ(.“Õ0õZ;ï„©qÅ”øD#ÀÂÀöﰾ‹‚µ.ƒCw• @]æñ1¸jÌX·š=˜ 7Šóü² ‘_÷¾{è¢ËX(¥øqú'@FÙ  †,q„O¼ BâÍô@\Fîo)|«…i/Ž™ìæ.‹µ Òn½U@K¦ØnûPδ'˜¥ l•»Ù, QÈåoU ímÉo·íPfdz‘6ï]‹¾†p„A”C[á7ÄM¤‚æ*©.3¤û9o|VÀÉÐ!Z)Ny³ìDß6l¿¬:vZ[.Ù7ÜA•Ót±¯¼{óÈ–üüŽk”öTQõ4ãç>)6„©«3ãByº7rç}IH¯Ëi’VÌ ën'1ሚ‡qi|zOŸ´ëB]x q9·Í½ÕX«Î í\̘ÈÙ¤å&²Ïˆ¼Y¡J‘s6út`ÿw rÞrû­ÕP¾ö¾¾kZDÖNãi#¡i€¶;<#]èÍ9ü'Ú^BG =°¬Ö#zå·Ý]èxToÄ^Û#ðd?Ïã§ß¢ºwNoÀZÒè´×ž•JOöFJ”°")ç9ëh­M;éÇiO\Ú&™‡“ÿ#£Û›à#loFâ¯ÛÊß‚V$qþ789¬"¦“ÖÐêü_ôPƒ¦#·¾+îŠ'/7Ö¦Õ_s¶Lú’6òÙ—Ûø›IÌÔ­/FW|:¸ÉTµ’2°„¹LÇ9§Çɘ\9ÏÏŠþ™ yÏÒ~82¿yB…;] Ìý!wƒœuÚ†LeÏÅÝ7ðûõÕ!ïUBa#æò>¬ï§š |o_–†ÉÞ¦§^¤7v—TçÙçÝjÖ·á»"¹¥|ÆÙtm|Ñ 54 ç(Z‘æm¤xÌb šà¾ª¢NFÉ3=;`x÷ñx¨³Œwf è½^K4§ö¶ðâûœ7#ë)7QœCFõ„b|8L«^ÙN?;CY‹Â^@}• .ÒD³¢®w1ÓïP78w¯AÜ͇º¨Z äóªÐ:“Õ€,e1Í„Å-Ç<+¦Lí_©¸×E«—šVGAÍcõÛê¼B‚ÖÏüžRZ Û?°PkõKi®­ú ‰Mê:™‘—Û²¾?“`çw&K{W¦8Y¯é©0‚fÚŸ¦D‚‘/˜Šžét¹§¯o#îí×K*àZÍ‘dq5†l9¦è—¶1¼1 ÂØDæ|LÐÖëÆOéÚÐ;`–ÐpÍZ‡Ñy}ž¦P(˜²Šžcç*ÚGÈ"õÙ*j<}£¤5ð¹ôŸ9ñç<°ºmQû5l°áµ†¹â1·evóóÖcËE¿0íÃ_ L3P-B)Ãaj$RËÌÁ\ªÕN¦Œ4—£œù6Õ†xÍ=m¡7¡- ÉÎiŸÚÇ–.:$XüÖ•iÕg¸Ä‘(­©KFES¬/ŽUEöA£! Ô³™Y¦î_«Ë Yì”Ì”½îdº àþdt|¿µ©Ö¸µï¾›^9 ÆË”à8ºí™ ˆ-ˆÀ»Ð7±p0 ÊHH\ü^D'žj‚®U…eÁ$ø´òScêm eJ¼—¹’2ÌE8ÇxûdõØœçãYßnàÏISÈ ‡»._nrL |÷’)i:õÎT?õÈaBä%ÛYbCŒÁõvÏÕÜ«º âQ(!è4…2Ž^B7få¸<å¯¶×’Õ 'I©ÆYxUD¦fÕÚ¾+Ä­é³,”ÖH¶—´Á†Îb”W'Œ!0›åö­äGuzD€Ü%3u6•ß¶?j&€,‹HpEL<&õå€ð6ˇaŒ{š"Å#ÓÌ·‹u¹Ùõvθú‘‹o ÁÙgeü@C\8¦ê Ü<¡žño!Ù{±xôjHÑÆ®eÌú";U0ý6²'á¢õ€€&Ÿ— yYØY–¥¬`XágP]Œ@*» ìk:{€[×.]_ºãLù\„q† Z7VÐ@RÇüô.OwhÎf¿ë˜°ÕÊ›"Dpáfâ¥c„Ç5ˆ£RÝÃTjwp’ŠqÔÞCܬ0û'oæüQ#ýëG¤¬òªS¢¦Œôqµ4zõ¿iå/\n:ÍJŽÃÒ—¥éY¤ØM™†ï7£.o´·¡u|–23 ½îNQý/Ò}¶3Ëöñ>ŠkÀeÐÓÄ!'Øãz‹ä* i.ô/ O|>³{Î(hÑ&¨rMÍ‚k¥ø8`œ›â;#o^‚ßtd1OŸ\¶¨? 0é㱡ŠèFL?±Â#öiŠ=ä|üËlãHlß ¬½ ©î½â­ôœì+kË| i89X¢JšBë¾ù%ñFNžd#ܪé ã ±Ë.2pµƒnÀX€³ ¤áøžÒ#Äö€aƒ„ªõáb4†€‰Ü•ì~¸í¬<· )ö$|R4¸fi«,ÆRï1@ëVŠ<Ž&{ƒiD=ùõ—kîö KËWµ)LZ¨Ü€É\yvÁdšiŽÛƒAÏ|íÖ¡€B{L·Â¹½“h;TÁUWhmnÇ]wÅÐWjÛ¯ª®Kt“xI11×Q9ÃL(à!poÕAq\{#4sÿú†i<`AéÏ>ùP«ÅÒ@G&Òû4mެ*ö쀒«W»d²´"Jø XÆfrÓ«tZ4þyöe¢:ÂÚ€„àiú¹Êƒ•"¦a°f%DµT¤ó'×®ZU ž0Ó¢Ëy¥_4ZHp PŲ¯6:Ïû.›òÒ Mô-U!µÁ{È£ÍüºjÙ]ÿLꕵC–é²âzˆ ¨0i:¤æî=2GéôjýØÝŸ°¾#—0€(Ô5F\?ÅA%àÃJÎø³‡áBï«~æF>`vrÅ/ÿ(-K›Î¶YTòUÜÐ?´Âª„@–$)iæ2*d.΄¸%,—¬`Œ;…@Ø1´&ížM«ÁY0‹waÓ{'è>6§!,k*@×½öØÎa ÞYøáå¯X‘B±âZ¡Ã¡¶Îî…y®°BlS+“ʱ”Ë37ÒÅ$§ëãB¼ã<Ç#õwß²/5›¶ ‚N]²jß(ç˜áöT•¶4 „Dx´¾3â9œù²#èÕ?@Ÿ&¼eNô)œ°':WÐ\‹…‘&9ÎmˆÒ‡Ìè³Ñ‹Î£Å:ù mªFÖžC\~¬Xþ¼fôœY¬ÁÎ+t£&Ñb rëU< F3§V x릡zxrX|Š#'§ÇnbTök'{Vçm´G¢™¬c§™,ŸOàÎÂæß‘c$ÆÁ}E.ÖŠCîÈ< ]M‰….»B®ÒY:~û urñ½uöòù8Ò˻Ñxð¸lÈþ)ÄðÃ; <"àû˜'i;ÿ,̤‰ŸÅCsà7çõÁ»áí:ßÖ YâPza.€Ï"ðæDjZð»ôŸ Cv:tl6ÂËææÊƒbkæ2H°:Œ´ÛÂbªL)+[–­ËZ—¼äjo‰Á7ÇÌíó>øÅøÔY²©BÉ7 ‡Lçr½e³HÁ>ÐT¡ «RϦÐZƒró(À˜ìd‘eF鲯cg’R¯;¼¯Tw\Òñ¹2<|”€cÌ ­ì Ë¡¨ð=§Ó¡Ü3è}iª± 9çH—Ó .½•ˆùØ—ŠI^•…Åz¹áÛê'¡vŸi;‚`݆“òrZ+;¬BªìA#c:xÈEXóÓ·‹Z.ÅLôcß­ª¾¬u‚ÁpÔYÈkwÉ`‚(KCÿQqwqÔÁ¹U~¿¯TKŃú›ÏO ïE¤Px"3Ï ž<ÉB¿Œ3¤uF}éç´ó¼yH$ã’«ŒÌI(íÓÜ`A²Ÿ[Ù w|žQÕ Î A”dÄ@‘xžì‘–èu1²Ú$S»Â”Ÿ˜vçôµX‚·ù’vIúèùöÓž›p\‚ùÇÕ‘¿¥”HsçÑÑ^åXî#ü´ßa3dbÃíÑ}·mBGG¹f¼âœ*ÚÖ8ÔL|œ¥7¦ßÿÿipÀ*+PÓå7ÀDâ–öîa !‹GëÝ1öAŒÚçpŸš]å%7jÿ'¶é';˜l$û}D«¢f¸Àrƒùc-eŽßÿERͪR²½nFíÎ|õ²°ßY‡]<‚Á(§*Š&‘¢^7äñìBŒ/ùQÒ¾›#¯ªÛ·ÌËæº…ÌV´3?Q«HæÐæ4 rêb¾RؽðOÍ %߉„0®­õ´º¶—VÒêÚ][K«iuký“×imEÁ“¡ Sš—³êó×cka̳«[êîÈ Ãu¡ïÿ­ù?/y²Ê ½B>wÌöt@:ÊsÈøSÎë“IæƒÁâöÄñH3XW#—“â¸è·‘îu1ÿ~=úÜ–&ñI8ì—ÇA¡Š˜ÆYO§Â.š¢UÞñÍ`{%¤ÐÇÎ$M‚ê# ÞÈåàÏ%õ™ h¿i’õЂ™ÊÅÁ‹_`lR•Ñ YT©#µýzw†ÔðCœcÙ-ÇX(”Úè{F€˜_Œ2T÷ &Nˆ‚㪮vų´x( ÓúûâØ Ó‹¯? ´Tî¬bÑœòÍ>ö­ìœ³[?ûÏ31ÓA(%ryrAqF­ŠÐ“]*][¦ù>~} Fó²Æ!J¼Ò¶MV&ûøá›=Ìõ\eq!»˜«öÛF3Êö8‘ÂMfáäIØïü›×3Ü°ØÆvb90õ«¸†µ€~#rr×Zý¦x92ðŽö#ESãv›€§¼¦H‚'¼„(߉B˜íü©¡Ï¶ åÕƒžÏFÁÞ¤eÁø“ôû„jôÜÈúüÉŠŽáõ:2åøv1üýƒïøðís/ìOçìQ~½_‡ey>Þ¯Ÿ¯Œû{ŸoZo¤Ðÿ:DnB÷Ñ:dü(' ü–ŽÂ ,ŠHÆgÌ ŽEü I-˜'E!éd%~ƒ.MKÊ„ÀI ZãÔE5UKW/þ‡ò´•£[j·âÓE”{QÆÏ.—DÈDî5d_ÊXŠùúŽ•ˆñ¨ø»öJ—ÞË8·K.ÌÜà%²ð±y¦”aýæÇ½Ò‹yfzÆùqÎéôÕj8xýù¶HJUW†¥y‡ˆÆÉqá14Úy¥Ý³IHȈÁG×fÊ^’ؽÍhÂlxj ÏWdžٯ¿¸x3JCÌ0¤_/T·^ ÄŠÒ’ó„J.–.ÏRl³?¤Ëèõ[E,v×£Þ³â¦çèµUL­ÈLd58Cá^¢'²Ó/°V'¶EYã¿”¤–kÖã€i~šk‰%@áuŒ«ô4ƒ¸üÇÔü˜Z½oÅ;ûD[öŠ—·šuª T= ÿ>¢^Œ›XŠu/|Ôt³3£é1ˆvЭ›þŒ6M?BOÝg¥vzQˆOLþÁ@¯ÃÞ<Í'ˆþ¢”c ”æK{Ç7J±nU¼zw-ž!¬8^8nÎíIŠˆäàíè˜}Á/™>°éõñ&SÝÔtÝgþ!ƯO19Y²dep‘ˆq¸Ïwu¯¢V§RJªÊsëÒïXrC8ܘlò—‹â¤@;p¡ƒˆÓñý~D…¬½Õ„p…B”´ceÔÃ(ß­Ë÷¾¬šº7X$À¦€ 7[”~uEÉä0N, <åb“ì;³kú¤"×l•¿dé^]5~´†·~b=:ßbƒ—7Mh¾î‰³&@òÞñ'úúËNüÔ®8xX$€ÜÏ©·ü[x$!]ïú¤ÞmAê!›‡«VìÓwÊ3Ÿ(Ç`%žTŸ@Âíå¥÷©Ÿr“Pr"­ 'XT¦M-‚D«ØÜ]{ʘ˰)wq:²?œnJfÐ<…äÕ–µ'~ÚáÑÉ2µeŒ¨8‰×†×¨ÿ€Ùö< ƒ¢AqAó>K÷Eb}\•#bFÞ2.cf†0q}”7œo™_ñ*$œà6G‰H ¹Ä\æ>4>Ø«`ú"y!вc6jU]‰ç¦d°Æ4äD+~W‰pÖ&„Àê]O°Ë;"áiÕÂRuLj€"m–vŒÝ¬pÔ÷fZG<‰ª~%ºáÛ‹S³è¼§n(^.©›þÍ{‡ ¥˜Ü±®BÿX¯r¦Å,ëdž7àýnõlÓñøÂj—*Ñ4‘ը’床k%áâ¨Ré5tõœxÍØDwkQv/Nó:©ýGö†Ç0Ífp¼bˆ•é[v…÷~¤dž`õ^!TomÐüW%q$ “L}Fï×`®#§d[ mU÷ ©å•ÈFÏa˜Fdç¶q-Lçt{¯ÔÿqÏ¥_|Ûÿ~ðé¥?×”ã\Æû€Æy qTÄÉ8bŠÛ~Ýî2ÜúA¶@q„:õ¡­GÊ’yÙž^qKUo—òƒLõH:œ›e±² 7Ur“6H‰:Ëy Gî¹?{³Þ¨ Ú¢;‚Ú³xAÙJ†‚O_ÐÌ›ìÚ0GOr…@†Od¡9øjø™³j¿DÚš•²cVðÁšX1¨aÈÞŠÎJ øíä‹s»Ã:*ʉîìÐŒãÆ”*.äÚØ¨ëgõó„…Ö‰b¢ƒOÉèMÑsÞÜ*-}í8.ˆ%Þ«‡&éÀœ¬€¾Õ¬mï ËÓ´Ðõz 3xäét—ï“å²ñ†õf¿¿jb2ÊÜç,?ƒh”;wjž\C_#‚C8__®§¦Rb™,±â’Î0¡r¥|Ä6¨Ï…iq ‘0å1Jȶ„΄„›A{oª'Saÿ þÊæ-½á¨­UÁ—÷~mÀ}V`¬Ú ¡ÿ>ÎÌžÒÄ5 $éuKêоy,€ðŇ49ÑW°U¸N~ܵ—Y‡ˆÉ{Š}¨Cæ%22)~]î6?ó2×7æ 4$p9Œ†Mì¡>³^¦Aaæ{CgJ:„ùQRöP/qaš`ãW[φ±O¶}`C)y(ÖMEúJO*HOíIÜ$”TNáÊ.6%—ž÷6Š;7ÙV µ3ÙP/£H+måÓfffûd!þ/ûhóXki†€%PM‘Â) 72)Ýz¢ÖÖB°³*1ì0w- ûcÈlfeäÓ X+/tY5Ƶóʘ£yÝ,QY¦®éafèÀJ.J'ï}O ªLè·Ë’ÜT3 €|¦ÊBEnµ7 ‰÷üê?u½û·´ì÷]«¾ÕŒÑ:zXR!·¼Cê1‚dx"Ñ^M+N2k¡‡\šbJ/ãžŇpíe^Û¹ÔÙ{Óý½´œ ²D'Õ¾VeúÙ¢%ŽFbÈÑþ'òº á v–Å뮓ÃÄ…æ)«j 1Ža0¯çf\HUE(ñÐS='†ÞÎè£cUº»UÊ@sad8amŒ•AC4%·ÒS§ ÈgÞÔæw];‚%’µ›,•Þ[¾Ð꾩wyê„Ê3R%`ºWÐi€b:qØ2 ïå ÍH§Œ{¸ÓU¯T×ÎÈ“ùeýª¼O+JòÜe"”þ0cÛ&¶ÏAØùlqæŽÙä‚縻s2$v2>jæ1Û÷ŸÆF+ª/~Ľ «iÊM™±äÓG °ÂÓáãæ¬èˆ¡¬ö/~t-œ’Ù5NÜÀ8-óc–Œ±!ÍPÏö·õæ °o¿or½Öçøµ œÉáœÉ ©±‰í¶‚ßH™ñÙ½x2Ûd,§q%¾)½niöNá|}{†Â\óŸ£ø….# ÃÍ QÞmhT+œOoOiŒß˜?F-R…}Õ µJaÄLCAï˜ÓLIÑØœƒÌIJªË=¦Ÿ3éj¡º—Ëùå|)Ëc£óÏsθܼª§ N…Ml úŠÐƒI¾–Cûg]ßá]ö­ðZ ‚Ë"ÿq²Àå4ACRqÔ§58xí3aÝð0Îáò‚ <¸ë!Åd~±]EJÔåÿ%Xn]³·ý¡wPgÿUè‡V^ ôôê‹"Oúx¢£B‚pÍeé¤4¶SŽÖ,v†ž(Ñ­š#Ÿ²Níš¹ã:&etï­ÌJòÐõ!|–ƒEë>gÍM9ˆ97?«8´mY£ƒÓ }™ã?`— [5ºa‰2µZù RM.×E"þ‰¨†?ôqòÚµ:hÅjÎãu¼ªûöÇ?ÞŠWm·W?­6î†ßÓâVÛÝc1U5,‡F=Ôk˜Ñ¤Õ±–“ñ[[9Òødõ€\EÞ°^s“Ï/õº;cVÜI£ËïR}(#=¢DK~÷~§QQ©æãØÌ9øó¢9Tïñš u>RYÅ¥aP7Œ³F¾xtäþÂÅû‹<“BÐ ;á˜åLV’rŸ ÒÞ“‹,zH^—&PŸØSñÜ.ÐÙu|nû•w¸ÀÄõ³šAêÝ5?`Œ>Ròó‚’igäÉžnWg,ú Ú#ùyæ:SÚ4åå{$Ö?LÄU.›'—®3‚þGM'³¡#^ÈXá˜ý¿¿Ôª‡‡z}n’C ¾¥Þ﹈ÚAYí+Ô©6nüà£nMÅ+D¡ »$ÂÏgÕ'†[?Sq;«´âî‹Ç”^:ý¾µiÊDŒú]ÌTØû>ëIƒîŽ-”»C•ž³ÔŠÄð§mÆ›Å/ê#†ÅÌx•n×?f޹J¤kæ>ÈÑɰS¢]X<¯Væ¾ÒU.¶ÉGv( GŽC´ä‡áçðÇ2Dɧe8ÊÓJfHN¡b‡ö¦RÎ×òßOCRZh ¨!ˆê«»¤·ûbJÇ¿0m¬KCó´Š![Ù¿+„Ñ!@m ‡š£ÍÄâÞt´„lÚƒ­¬ÙNdZž¶–‰7 äà.ZYq¼VôíeeÔLå#bå¿XÃÅ\öûàsn1¨M6?pé[jA"ÃùÎ!hÿUž¯t3AÜ-v~ƒK{Ì#Xó?ªR»?«5»ÖŒ8|’ªxð5íÒ*’ øÀ+? ;õch딼˜®œ¶Ê,B€ Ì”—¸ÌRæ×ê-èåÄH7.mé‡,Y]tîæzƒÃÞÌË왿=tÁ¼H|?œ>1Oû½úDºÈP0îl5‹mR‚ƒzF§§Ðt«†Ó` ¨¦S­õèçe«Y%¦ Ø=ä³'[ï gâ°  @æàItpéÃûA‘ •êvZ #ü‘ÀAèÆGq)¾ú¯Ê‰½êK Îi –@ 'ˆ‹(ÕFJ‚‰©’5Ï0kI)§´Ílh ¼) ¤ú!òvdž:I Š âÖèS> ]¢U„E øêù¼B·’ßÚ*[Oé-9²0S8/ødÇqqþ Ü8oÙ”š=tªElÕsç˜gÎQÄtK>i·uã(ÊÁC!4ÎAùûµÅ™ èyZz·ûOa_<]“¦}:‚ê/¨¸ò†R%YœjÑ·å’àa™>émÅãùd•ð?ó øwÝùð-WKчɳiDôÎòTôXý§“ªèëæ–˜,·t`ºŽ=„%0šeª¬@pyà YDðÓ¯«ìc°…W¤’@aÛáÍ‹>39Þ©þÁ_•ÑŸ"•ѸT¢¦ßx¯ºéGebþP!uÿ_ðÃ+9¹¸.zû»„ñÖ¥éë,³Ž3p{UÔ5“š(ú3pØÿ@¥z×_wÏžKÕÎ;ʲ!ß’ ÊH£¸xëÚ;Ú$.F%Û"z¾Iñ);JÄÀ†¥ýñÖš²HùŠŸÒª*óâ纹Mp*(¸ÄŠó¡¦äŒNœ4|{ñ<õ3ÿ_¯äÍ”wZ= ·]ÖÉëÚ?X€fŠú¼ ¿ð·é²°HXpÿlB+4gÕàQMûÀ\h¡¸~„zªT%ínkÍ‘×Åg¼ªŽ!v •'¡.ZÞLÖ:™ºã*ö׫“4ü¿(‰6QRªC>ûÙ ÉÜ1'*5þBð¾Æ ŸpœèµÇƒ}ZGô“BGî‡hÖÚ‰ª;—6FÐ:Õ<þåîTµÔ4óÈQf«»ÁbLlH Û^ÄP1y´;‰Ïô  Té!î¥åý+šÂ“ÀŽÑJ†êUDH ´ZMþ]¢¥"ó¼kÿ'€1@ ?H? #“ûVû &£ÞLøƒˆaüª±p]–ø3ʫ݇^ò¿d˜žëEý 2ç ÿ ?Ò? òŠÎÕZGæêëIz(˜ß6‹Pâámâz¥d/ '¾2IÊŽvÿyö§õû ‚&—Çڦܲ®ÀìÚ´«UûÉ:†|Á]‹hÞ,R¢k­œA¢16½ ÏDj9¹HIÿp‹C O ¦YvrÂÍ×·kì¡ÌÝ/¸Xí€ Jdŧ&âl‹-æ§—yïýËÙ–°—(C˜Š½qáw°¥õˆÛº7¼–­„ºYHâŠZBڥɑaQ74ÄåI"±hQ ”áKÎ0¼´éÐÎíV´á2åó‹+ 28ÒÛ¬,ßÅÆO_úÄœ´½H KŠàñžÆQyí®—³Š<,Á[<ƒu€Œo¾6‹cu´{Ϥù¾êcÔýͲœ[$ËA½r6’8FÇDãôÕôeÎwGϲ3—´Ê!^Z“ ÉdW«¥‰ê“íî×D®aÛÜú@B¸­YuÌÆþCEg4ÀŠˆãµøª¥ÊÙmÐë h"Rú .Eo‡è'+™ÿh«†3Výä·XLw}Áùæíâ;íúߣÆÈ™cØ?ÿzA‡².ÖðT™yf4ª_²¥©Ãœ H ¿ÊUËߦ¥«çÏ߯*ö½È\Z$±1ËX2‚øQbÕ„ÿSºš|Çþ<^À †zÒýJTΓ¶]›ö3¾&©›RDv³æzõ Ÿw€Øº{7]WM/ø£*ÐØEeÅþU¡u&õ6ä³5½mS%'€ N!ZñÿqjÈÁUñß§¥R¬ÁÌÐèNIçdK$ãÎzWKHQðË 6 Bq@‡­Rµssâi@{TäF´zÐ|5ÊI¿2âTY¹WñJ,gŸ±†€ÁÂéáå\&tž¬öDùÔ÷ü8š˜{ZÓê¯#Ë7[y]•â´nœ0XçHXDìÊ#,ŒoØïsö¢:Hþ!?X¡FH¶8Mkk|¯Î>ú~KµÑ…ƒ­ˆ@|Ú/ Ö-¦×d€T£-=ï–’Åb§‰²øºõ„OÖg¢ð•f^‡Ä%Ò¾âPÇJ¯Cp>ëÓ}ÈÓ*L.‰ ø|]I4'Þ¿`‰.(3¾8Ï^Vjäçç§ nW± Sc`Xh{7€YŽMC«³¾œàοt%Ö`yWZ¨ÅpšEÆ@>ã7÷ÎÐõmóSr¶/ªú™€dSW–Zl»ÞA3"´ înÊ:õq z1 †ßaO6 ëªoz£¶UúŸHXm óDnözÝïûf*¥7#8œb¼¾wDñE®JË©äšQÅ_.Ç a&îktmnëv éËW¤#ÆâÝf”‚¼ŒÆhÄ·^Ê£N&ÌðÏYLxâz‚õSÍr’ŒÃõïÃ0IV F¬it_®,?ÓE¹-ð©œ/‹H/%£-o‘†lÙ/…¤0ô(–Áy° ;· UHyG0~ÏjÚw’¥žZeu!ØúÜR7ÀÞ¦Û~s-ûúÊUÌ*Ù`âêòïaL<Ò KeíJ§» p6a6³~R¯á6œoR–¶øð¦à}'`70}ÃjŒÅ‡ËOÛ{…!Þç ßIž$»M¤€R6Ïãíz'ªt»°<¼sf<+½î¼Ä©°¨âðQÊfæòmJeƒ‘A¢=\©ÜAdz ÂRtÿ(È_ù9įˆlzÀs %ý$¬íâ¢ã8Ê©¢q Z;S¨§]ÍâÙ­3•`«æñÓ ÅÛ?­æ;*|¬‘ˆÖäá.‡7GíϵìÑØCý]\®(©+Š*r›‡ˆ´WÛ2š“;Ö“ Aš= §e­àQ²‡ã”EúmðZi„6øÜ5 låÄ)Ålƒ/¸ÔÆ_±q9Æ æ Œõìå!ðö› Œ.r[gB¥`{¡Ù]›ú”¸rÁRùŒ7c‹L–:‚¸ƒðéTœÿ+.kOà⩾¡ƒ^ĪÝäšƒÍ \{Y# ’¨wgskyR@0ž­s|óß$d‹6š²‰Gû¼?1—¾ùÖ¶¦©KÏl2ÀKþ hb{›&bŽytŸ~d‰²Ôvépâðñ¶ßk(Š? FV‹ß5—„^!@Z s…Ñ=cÅæMÐÊö¢V¡&ÝÓ?ÈJ‹zÄI"Á}ì3bùèâÎZžæfåûïDÜIK®ÊãQÅÞˆ[®ð|ÌÚÅûïü ãÑ2Ù+S ÕäîµCÌ›Ò6ive>Ôk[WS=Ô¼õaá§þ'®j»-ñìLï03 ò„Uh䀳ˆ‡t(Ö•ßÉL­¯Ï×ZT%òíá³½Z¾U{›J k/V‚c;†»|5݉¹fTá®(£µîû÷¸íÄIOtÔ.~üeg2/%ñ–]o³)ů-«J\€Ïh0³Á•™eCÒUÍ}Là+VÌcÛƒ  ·†{?rˆÅÓ¥¥ 9%sQC f¬ø‡mn°»{üÙ¼ãëÞ[C;ZØj_. í®1ZŒ üæ›ñGïÉìÿ1%.…e¿Éë¥í¬ks´5A¡œ,«k×èÕš I¨÷¢ÄtÎz°êÈ9¿öZˆn2H*·…aØIºPåÖÜÑÄ?È[CåM’Ñ©óÐË$ZZ4!‰‡4wþÕt¸vöUÊÿ?ëÑÞ˜‹6û%i›7@õAÄ•óÝBã×@]‰§H9,ÄœæD3n c6rdÏ €Àí—†=IË·p]}×¼pmfb:ZØ”7¥xÁíûJú*‹À`è\ÄÍâ§° 7Ñ2WBä]> ö¦¹ÍLª£¸f£‡ñŠb«òy©†åSà|Ø Þ³ôõ)ä("{d‘*s „ˆ2‡’×Ìä3õ¼*¯d­Ë^Ul=~ÈOÄ›1k†ØÐ‘¡Óó «X•ìšš|"“üó&Trã|Þ”iÜO¬vwjwYz;v0¬ÍŒÆŒ—s•®œ60Gv6š–ÝŸ`à…ö/ÐÿÒŠøÛ„mëS( ³ »×õ¿öîk%6c!Y9Δ©½I_úÛŸVøäܳé§ÃÑ1¶cüï•!@s@¶#¼Mì!BG9˜gࢫýQABDM8aS‹_+ã1+ŸLÒfÍÝ©COk0hf)g_Gô“qÖj‚¡ƒ°F\U!ùÍd—4k³U †Y¨P&ƒ,ðdB‚±:ßDH’5!l:®”“Æ"Ð<+qK‡Ü¡‹VŒ´|AD•³ÁµðR¨O­`íµAÖbûPñ %ásÿêE¿‡ G#Iÿþlòͨ+ <áøú ¾—„_Ò#}Fù\¢#V­®ž#h" c¡›$ À-Vït\ù› ³Xæ„WÀ˜«½ÅÜr4Oä ÐN5?_+VÒ†tO°?šËw†drXÙüüà“pXý×ô˜~å&˜·‰’TÖ:¸»W¯[²þДNÅ›m¶Ûm¶Ûm¶Ûm¶Ûm™æBÝ^wSQž¼¶<ÏÇd¿ì†|›Ú™ÄN&NÍk@8\BŽ’jsÚxgz|dÊ;mÃñ®Íe×d‡”{u[ƒä8 2wRºÞªEWÖþË©/ljžD9átbnƒ¾6ì[²=•õk~ÞÞ :­I!NÀBvú•á7›rlІYÈ[Un¼í€cESKü•Ãø€{êCCl0×êa:ce2I$’I$’I$’I$’I.ÍãÎÁ“ „|X‹÷%‹%62!Ê9âÛuë­î59µÚ†tÿtóò‰[cÛç&º”÷Z7ç~<ão>§‰Q´‚ië"Ž€£LÞPvBál]šì¥vãTÇxß<(^µmÕ»&e\@“È<ퟠ˜?’ƒ9³=¸4ó™EÆ[[ø0´o¯Œ„2c'ºò‘â°hŸiÒ"¤‡Èrçœ1¼uìcc˾ù},$)WbXûú1蜿aE ¥jÍYÒʲ…¾ˆR.ÚìBwÑ;ŒÉÚÚ ‰~!”•9S\ö{Ÿrzð}–•í ]W³ìŒm ŠE‚Uñ˜ÙHðà£mÉ$’I$’I$’I$’:¤r©©ë’) ?Ó­ÍæÆœ‡vá¦'j¨;žàN!ܠХl³O<=Lªíþ^—lÆÕ‘0“ ÄÝ£ø“„neŒŒgJšª|:¢­é†²ñ¦|¨H”ÙK)ÐBäRô÷9›†X{Øàë†pî:$)ÄËH—V±(rË|¸ú—6 Ó*Vs´_¾Àë"Uÿs!Ç)!­!)y9ª:i 7ðÖÙ¬µz?=ë­­résÅÓ ¿Â}iœ4š©OÖƒNv–2«bùéÎîäêènÌb”Þõl•ŸwIö‚Ë=ã §oÿ=M™„¸W´äØ—ú¥ ö–}/×í~£Áj%Eªf1œ>3öb)°V›,´;ÙdgK\ÝÌ;™»À}—è–¾¸0ú:ÌsDÿd?[{?å†]•ú32Ô÷ºöÉFêè€Û’I$’I$’I$’I$’j«HDä#t¥™U<Ñ’cEºÜU–V1š |¿â¤½Ä è¾…I„yýÖþÜí>»MJx[±±˜|ÕwkÈ=°=-ŠÌhLZl gøÑ¯mG>”L<Ê&]l¯Ùþ¢T(ÔvP5ë8 ¥Ø•ÌÚ¨ŠØk3]aé+º&gë+’ÚÉe™qо Ü’I$’I$’I$’I$§Ùï] u4õ`ºñ"MZevHÖŸÖ®Ô[çcAº·7a=ŒZŸ¼ÞÄ3a}ÀÙ ìƒÄz’â:á-ËIÁ ÄO@'eTç·þÙ³$£'ZœPà6í(*·Óþ‰ÒÞ'D€ £É2cÙœ*Õ93½µ¦u ö©£¡Ú éJá#0ð¯lÕ¸h®G˜ÓÈ‚7Nßs–ì:ÿCAp&/MÕSè‹ytÏ´ôjAâ(Œ>¿5}b×ÕÓ-§~(kÙ|ðyÿR%ôC$Í#Ѷ0‡@B9é 5~«Ü¬—eãxÆíkŒotd…»ë‘ý`óéV¦pÌde.e^ ‚ô«"ˆˆ´3fè®P˜?zå‚5˜â+ù¼…I°žJ©ã¿m |Ag˜õ‡µ,¿zµÞkØ;lõPp>3ª ¶”*v”‘ÎØ<ÌÔÛ‚{ªX줥kDsÿCvnÅ>¢1ëÛ+µì¾(:Œ&ek½Qèü:5b!õ‡×àÕRzœãhºÇûÊK0Mœˆ†."[âå =cÆm˜£E {e¸ÐUœiÌÝ9Ö5ÈÒ­ ¢ÚøÒäå§ðÒè(»üOiù‘×}áÐwtD˜ÿxVÉ–d“–)Y„œØ\KDç"yXÊæí]±·Ä›&V´ 6+þ)*ÃÓ&(7`müeœ[·ÉÁÝÃ'Y¸AÌ 3lóÞØPbRlH ò8dÏ­ElzεÒî‚Ög¾$¸KýG¿§£ó×ëëÍÛH%âó³ë#“Ì(}ØoGίšpÆ×fIÕMíOæñ:ÁsW(YÿEÙ²®àGgŽeD=å‘ûLÉ¿d"Sù‘HãÏÇ–¦ó·1âL˜¸ 8`î ÚÙbÈ ”5çµ.T•¬ƒ¨P?•ãd%Ç<ÆÅͬ†ü½ÔG¤a| í ÝÍ1_9‚#hgNT¶&$\-¿®ãÇ©«C ²®je —¦4\5”v\´¸>ÅÃÏ2 Ó?˜¾?ÛÛ¶!€2ˆ‚Ó3fFžc“ÌkòtI=Ä–Y}1NÛBÞA¯ÚcÆEsµÃ^¶DÖøäH¯!Á3~º<@Az<Ÿÿ* Û#jK#¿ªoR­_3‹ßÜþñ]U¦ø’„„¬í„n¢(ˆ†Ö#ÙÑâ´ã€#°#v1øÇÒB6Ήâöz]´w;‡¯ôX]‰¡r/hÙ =i#B¾¹5C{Nš|Ýÿy)VóØßøÑ‹6ú_ &3ê¹ZºØ ©;—üw5RÚ=È ß[£P¨ðÎ%Êqø €¯;¥Š¾z]ƼÕ1ô¶šüÏ^ˆÙé«>C)L$Ø7׋ ¹&i4·¯Xß°/¨æ'ê%‰Aåãi‰ÔÜD0Ö!%`³¾âb’`ä—õb.ýcºS.PþÛ°›< F(jGŠë0Y ¤’}¤Ó›Û™8ŃJ,tš¤<¨¼LcÂŽQeÝ÷&+Ó¹ªùPåÒVY•êV^GH2àu•@ÖÁ¿ri]T*„§;TŒõ® ZÇZÌÔà³Çx«2¯½D[â`øX–R¦@i‹á¯©Óf¢0¼ší½žñËYÑñr'Þ꜇Ö^Îwµox œì$R¡¶°+w%ý¹xµÌÃZêZʪóø£ îŸþ„fœN³“fÉû-}û…ÎI¾c ëU“6µ!“Œlrxj\vÖ†?{¬Ñ\ݤa0>»"HöŠ?_Ôµ™ÉÝ{cè&Ö¡e3¥§"Û+?%õQ‹÷#´ý D+pæ ®¾q;Yw‘FMš ÕÖûs‹£C_l~-p¿í…úoâ³ÔFWX»9ánl"•dœ¤–*޵¼9±=Ñ>é1†ðýø>,@«²jØÕ­²€¾è¦Òµé6î_׫°Kä-Tû§Ùg÷fAr^TBZïá ½³Ïžþ[M-¼J”±ø/ yÕÕ¤jÅ¥H8Ý[?¡ ‰ØkVÁ;š ܪÈvI¦§^#¶Dt ž™5>Hžqhàq W›efÂÝ|è¾· Ѷ"sRÉWÝÖ¶•ž*€Ç þмb}ÀeáKMr•Õ`|vĤ ±'Q„ªYc/þx½ÕF:wôúâ>Z!w×»­øoL>gÜPΑhc߸üò·A‹Õ¨Áe‹¼h$p% Ž)"‘–yQú®€h{îáµ&œ ,½ôëœèŸ@0F ç8p²f1^ݦ º´O<@r;~ž)!¤¥%gŒ2ü¦è§ý§ÔÐÒ-óÊN ÜSTsz0Ùtj gÑpv~r“Nh†Éø;ë+Ùí-ãÇ€Ãæt B1ÛÕHÕºÔDÔVTðËÞs|Àu_q\Ÿq¼zó ˆêNþ1½ëÆNåY&}_¤ÆÎzKò§»gDYÌm&’v‡Q‰…öÍIû}û²ìy 1GÿO™±Ýð¼äÈUÑØ¥qà5“ØãNÐÓÌ£{@DˆôQ¿˜%Ø…MrL@´5)³}‘h;¼Cⴺدœ{pMS•ø¤º—Wý¨P´$ ¾—Á2åÊàœ—Ä0xQÚ‰’v+и|CÆ/ޏ¹‚AOâ§2ÓUqk&×V­¤*Ší‘oëö?êÊ¥¹`È (ûÌ0fl>]$}Õñõ‘ðx—4¥¦ ¹ïàË·p©ã€ý gºe'ó[SàÀŒïÉ­G¯cõWí±ã®‘wT'“t/Ï®£L<#Cû(¶ã÷8mßÁº ó+ÕA9‘óL…{šB³b|¤_;Žª£÷ßq,ÀŠ`Zb¥?=ö“Å·¼ÉÂC$€ßͧÇê§”ÝïRqø¥¶‰Ó~ª×£DÜ\xÖ˜¸…1»óÕdÛ‹.äÂEdhô ‹Ò}mï]‹„øÕä¿Ð,ì÷œ­ÈŠL“êù6Ê©þïð„§ÇÓ—gI½¿ÝÓÄ:ÇŸÀnùeºæ-a¾¼A/JKlje‡s‰!—sÏW»ÔK0á×$ ˆ¦üŸE2³q \Å«OpA¢´¬ýëÜmQQF8P 7ôJTáÑï¨ÛEöÈn27ùŽsÁ•{¹è´œFc+8ú‚ç‚“öïù//×N;ÎÇl|t¥%ÅÍ?6RÚ*P‡ð!¯*Ù^·#Hes2ŽKäÎê`ÃâØ×žwµo±žƒ‰Å6ÁUY‡Ï‘“³M÷º!Êé¹2eq¨>GmÇ;ž)¸2Šî'GD j_éˆ:¨vt_^@­2,æwY'l¹.œdÖÝ¿?š¬I·ô‚lȦO°.=9F'¼Á‰7è«lTŒ¦3MoZL»=±ZŠv•kæÉ¾"©=ÿà}r÷¾ýõ/ßSð¾²{ßúeï§Xá÷ï§w}ˆü>Á€Ô¾M¿E!÷á¨L Ü2øÄ!a…Ym>8ˆð‘§âï'.œ“ ­êH´Ì†MóÁoo [„'Ÿ1“Cb®©Ò3¡‘æõ¹Ãb¬&”]{îGß~ÜÅC„ÑI_n€°Ëë¸ÀIõýOî¢,‹0ÉZTc°nû~p~e+fØQÜ´‡:=…rg\`bæ¥æ@å¯w# ¼¯¸ÄË ­mÝÝ)zÇvHYY‡=`ù‹¡î’Í-¶Ó°‘ù±Ò#UÆå_³³”NìŠÍ›W|Åß42|Ö`›±)ã £¢ædñ™ yW_Òpi ‹v›¾1[¬a„É™ ÖI¶ùIDÑ„‚&3© W£›S­ùõ@,JQPfŽ– è6ã ŒZicÿ%9–#O‘µzlÒE‰Źêö º’ëÎpkÅù`ªâ†ìîþÉê™Ì‘¿ÂfµÚÒZ’Ƚúig?à— î8›Ž²Vµô^±¸×QLAmX?0T¸Mæyó$y¢v¤<_šE+^TÝ9\!Û(tAwþ"ä› Zñ!5¦Žhåmµ¥ì¹hºJ‘òÐ8qÀÌÌ•÷©Áw”‡¯‰2PTõt¹>NRNy%è<ßã;ˆÈ¸©;¯§»8 $z³Ì¦i(°² ðÖÇF)Sêª=[úÔúë®/Ô‘‚3IjPˆúc‹û}Ë^’ ìõœ*T¶üÌÃÖÒeE7äˬÏÅŸ—”¹Úܬ6ß FÊ$sFHl*tnO@ÓL˜ÀÕ#Q[ɧ»á ľp }Àveù,rØ™ÛщìeQoáÚ¹ÁzØ#j0% x^2DÓ…#™3†½ã'H) yŒÌô“ÎéËt*_!£Ô¨”ÕÎñÖsÍìüÔîXÇÚkRÓD4÷ŸiYÌÄ›NËvvÓÌ|¸^ùÈC?“^ÕF…=~.ƒj_Î&rÙd§ ‡ÍÁÛ,·âýhs·vú•£`˦Ën€«õB9êÄü´çOE××vb J/>õ’H25¬UDþs§îC~7–ç0ØÍ“^êdyÆ49‰,ï]tl< öŸg5í •qÞéí áGÉá}ìÀç)ÏSrJéJ³WvE#_ú¦J†Ú µ‡Y¯Ò‡ÔЏ¡bÞùꊷ¶hsi»Yd„ÿå,'·}°nèòè9¢Ó­”ðm$žË—ÕH߉µ”G&xZÌûÂE–ùÒtô­ê> zvæh”ì3m®K"°zËýÚ_ÒÌÀ¬¨‘àXiÜ&´<¨´¹  @1åÃ8UÎW$|f'vNÐã$sOÇSË:¯xö&& §,ûŠ|¿;úŠBز…º_@æxÐQ‚Ý?úÄ>¨ŸAÔù“Cûé G&éêC£w6[ºíÐ@ý8#„wÓ‹·GsvW¨2:zÙ¦èNŽEáä"BxC¢‰^A§ó¬*¶G^Û`â]÷9ijoúÄm¢À”ÛÈV¿·ab<èkº´PE³ì½ÜC?µu°´ÁeiÏtUKî`ï+Ò~üÞ~`}#­¤Ð‰†éŒg žSe¡|VŽÝQ •Ûa"ûïV«zÞé”s=×úÛÛ$pÈãt¡rÃ’íä¯ú©?³1Ùñ ê·Z`‚:ýãì–|mæ!Ç4Œƒß´Ì‹cÈB*XÝj·Ž{ X€½D©ú•Cþ †¥‹žÚjÐNv0I\QS‚嘮¦0é…Ü*¶º Ä/D1`þK?ué7?‹Ì²±áÏÞxeÐY¦¤/ »ø¸–75«5ËÎôG6ÜGð?ºåFÉŠFÿ]ú‡bY?ÊCiBU; Å oÊêi0ÅFF;#²ÈS炯œ+&ýÀÛƒ²Í2HXEþpŠÔý|?=%¼è][>«tD¯g\š&l§®wºwÉpCÝW6›ûIo8µÚØtŒŽ$¿×1˜éÄÈÛDóEƒê®Ñ.ՇǷši“ÿNl(û°INø½×ácn…í•VיةX¥õÒøK¢ëÀö,ÙÈé:©owG)ÅjwK›Á¹—†ÈÞ Ý3’Zäï–U„‹Å­áIA³Óꬔ[:‰GµÃy™ó)^, ??ðí.!u2îèÉá^cµµÝ_ãÍzó*¦p5Õ—A€ç ŠjM…}y£“}âÌæoÛçn×|!'y ßéƒ$8bh­~AÁ܇-B–ç–&;çk«g¥EyæÑj/ýGJ®4óZY}¿,%ý#Zy-6 +1/¬¨R¾ O$¸çÚÕœ•'½5®fB¢?›ÆžîeâI‚‰q[|­÷ bû™SÃ@)¦6OÇ7kÜ™jÌ1¹WZéö?‹„̰ò¬ÿmc£õ¼Õa[³&—€}‚MÂòJEÐ] ïA™Íİxú —Ó7½wRpP+çèpMØ%-;žNȽcDmMµÔHE‡ˆœš¢ýÓU ¡Û1=;0¢pķȨ 3†\|ZC*˜üoa5òÈ.ø>Ñóg€4n?ð‡²#ó˜­í‚Á>¬§íÊiI™bÛ“PƒÌÒ¡’Z¤ªû®ËÒÓ4R@QŽÓWã>„Bö,O½íU ¡m.€‡L ÉoCe8owöSBÒFÞÛ^g`a|þ¾ÞhUey°)7ó݈ûlÊÕ!§º§U÷M÷/ùðrÇÊ[ÓoßÁ3l•R.åûNíW,FK5-3VàÌÃò¯CZå]ÐJ‹Mfä!JƒæìEŽäs¯›‹ç”9ªV9o¾X|&™•@šEüq?ü=d£åê†lYzÀqÓåé ÐÙ‡(8Obxêé2û„Ã4¤MÅûµIyÙLèMÛ.y\µPÉXC)*ÚÚ(÷+M¯Þ“òæ…“*%û?ï¶óƒ&:‰²ªMU"N¼z@ÏÛçSˆkNø$ܾ•öJ’$?d~ÛÏX߃ÅEKÚVجdÈ4’T óÑœz©rFóe¼,Ô[­M,Œm-Äa¹¿:û@@“öìÈ~%N½xÅ®…+- ¹ÜD›1õììÍŠqHžløŒ:~wc(GÀ¸‚êN£pßGÝ¿a‰ Ï­+KúJ[ò)ß 3ÀÕÛ»C€paÒc•÷öyfÎ÷ŽžwLMø¢ùÌŠ†Vнu’¦7J§\öÆeìqO»+ÁÜw¯èöÈOJXFÐäzâ‘&kÓ•ëáð³ßÎÕyó§ð\w<¹ÓDŽ<ÅQêø˜ü uJ©1DuYRZÉK”LØG ]Òá¿Ôq cô¡3\”€[S4E²ÑMèDë„ä­º&N¤WŒ¬=« {™òhH›üÿi¬èæ6¦TÜ8‰ÿaœù»ûFÔ–?)‚|Z—¨Áü¹<ÐÅdÔsæìɉ¶ð8Êd"ýº.x±ß+áj4"d޼€À?e¹ü1æ(ÎðÚ1¹îpI+‡WFTŸüpv¶ ¡B;8= N5vôzpuäo% ½~%‰+t¬ø 3€tTB„ÙjTA$§0h=q“¶Fëb(9•{4Èn9IðË–š„«Ôÿ \ü0ºçÂû×DZ_Öo£ EÓiF”ëË)â*?r¸ô¬ìM6€õËÆµXµÝU"cì¾__ËdŽ#à7L–4M<7vÚF!á‡êãD6ÿaª Òµ;Í!žH‹NpíúéÅ‚î¾;—ÏÓ|‚-ZЮ#[yAÛFÂ%¢ðv¿'ÿ‡±È3¬+h›!ÔĶl«Ç¨JÆ®óýUe]^3 éx¸B0õ©Ì³rQbÓ’ÕŽÙefýÅQ«§8œKÔEQÕÊRW­Ò®úž¢õªkÊs¯X+e¾ôUÌP¿~\] þf\󈦳rT%4š ~¯õ1Ž­mÛÞŽÕæJp—ßÈ…l·S*î~µ§×ÖûN)8ë÷Í)ÉlÉœû#ÄAŸ¬QŽeS¶L?Y˜l¢Ã(I°Ã?®7Äi\µSÛ4ù’§5’oäŠW/ð¸Ýµ‹­š¡ñ‹AȈgº”ñ~eHâ#3¼—¤Š^B¿Óæ¿O(ˆ¡×o#X©bØ×äó1per»]AE1!>ƒMF­]l—±–J]YæC2‡NêcE¾{h)Õ>wâ¯Aç\$bÚÝmœ„¦Q†ÙúRà’È*J^ˆÛ©Æ”NÆÖ6èA_\¼ÑµzâN³YmÐ\5(ntAÕ™ÞÔ%-%[VŠàÛá?M2_Š-Û$ô¥ì^`Á![_÷BA½øŽí±Â€~¾NÝ9ÿnG[Ž4’‚]179¢„)'˜)¦už¶Ôk)?2§Íkètp@²æ¨¦#Óß³…ƒ½XÇö‹z‚Á¿À|á}]@~޽﫩)óú{Áúº²ý]‰þ®«¿WO8_Wd_·µ;êë†úºÖñôPȦß1ŠZ—~Ù,-ŒÏbZhg¶§€¥÷¦t× (‘ü˜áÿ;">Èø%ÂY5¼¶Æî ZÁ—¤JÕ›Gž7-Y֑ͩghÞtíÀð)~ɬ€Q‚¸c~+ï…Œ†¢¥S÷½Æý›i/ ]u†³6[7€Kf„ôY£]¼>¯¨†™Gì¿3€¾êÇà*Í£»â% Åb/ðÜè_Ûj¥ª].}‹­åeH¼1dÂðYB­ûä_Šj­˜UÄ×Â÷aÊc⚪…f²‰6?z¿qž¶áSÒ»z2PÚ¡éKN'Pøäõ¯wĤ|ÿ/Jê+À˜Â~÷ m“Ò¸/cã‹Ë#Ž*åÓ[×m'-2#ÌZT^ú6€«˜-Kà ÜL˸Û1S4VÌO‹Ã$„µœ³õ,c¥Eïçp\6J|«ôí-ƒñ«Ñkö“©{–0¸ÔHÂ&MÆØñ·«~¤}1ëa¹Ù}4ÂB·Ç¬° *mêB=(È“ÿ.ðˆ\Ae^2¸¼¹@8?#jùðöÃDö‹ÔDV CÑ0È©ü\$ݦZÔ_¢8/!GB’“9U!ó0]˜HW.>ˆuÉ¡õìûÓž/ß„x>lÛ3ºMr–›š´ø˜ƒž †m0¿o©åWaB„Ûj/-Za{f=öjÂÛ±F–ËkD> Wbo•àLòJ#xòÞ~Üë#mF²'­Íc‘´KÛ¬‹)™å|ôÖ«£ˆäì¢u˜ß°g¹Š5ØèÍámjl-ç·Ûݘ>Þ&á¼Üáyl Ýt»TYÿ@v@Êú‹²µfnú9ÇÀ}8P³õûÿx™vö½b¦cOÉçD¥à¬Bk#ø'f¾‹ ÙV±ÁÌÿKÑĹšmÙFd“J[ÕYA£ËZ g´•‰K¡…O àØâV7=æÑYIèÈ@öõ–°‡ô"[*iÇ£s AÙLÈ!(Oøa²(Án1.ú,I\ÇÌáõ3sTŸ›eÄÛ“ˆ¼•$n© ê6'¢V“//ޱ(Éß=EàÁ‘Þµ8¢z(‹@ùI+×–A#n ¿Ð4ô’ï¹¥Ÿ¶xí6YÌoÜèÄ+µmX Yd…o˜¼ôÆ»ÉmÜ^…5~™kpÊrVR8ÃÝ#Ñôžï7—“A­†FpÇ´Ñ÷šW@ò[NšôkhqU¾k:¾ˆ–áò¤âåì++ZDÿXÇtÀ÷®Øÿ ò W]¶,Côçj±8° =ëW¶©$p£ˆê>P¢PM‡@?¨ƒI+~û”"È‚Óò•j2_Çò_Õ;’?4ÇÕõv»!à’¾îþ?(j6:{Eë=„˼²F©šÉŠ4ת}3)¡´Èö]˾؅5•Yš2Íí‹{+9â; E¤qmTþÍ."ô¬ÄEÅ–©DU\Ç—™ﻫ°_]S•á]~ZѾ¡×C/™>c»ÆÌ…¿kÆÐ÷Cïÿµy¢§ªR5mð´2Ò%è,ѽ=˜›"Õ¾r(êÏÈFm«0Ô><$% û1þÈ«rU× ïäylƒ§k¯ö•)ƒˆŽš¦bÃT7oÚD±pïm`Œ_5†oRèûGo‘#¾QüljöÐëæoæ×C© Ûùß^9Mù]cÿÍw3þ–è¡ãÕÎ¥b»¼í#£Þ±­ƒÚ.î¡[ 8‰Æå÷µø-~J&hõ‚ð£à¦ñçñDˆ®õ1ãȺ7Ÿ<éz†.rô‚mïQ B¥ë\$ëtþÓoráë¥>=]»AC3? ŒÃ¥ƒ Èõw„_^MÀÆÈ¬ ×­µëÕ,u@%¢Ø‚Øg»ðì}âZý6°s¤+†#=Wi·$Êÿ;0Ûd€Ò?ó·‹ó‰ž ×ï7'¥I} ³ÏIw ×s¯Ý'US °úç¡‹-4zÌà øËòÒhvØp¼˜Ø¥ëíD?>-MtQk†äGÆž·ú¶¹´O(÷5`¶Ô{4öøCÊ}cIEÒ¼^Òe|}kÙ2{J)°Ãîl`Õmùø’>Ç‹`ä“bÛ„ñã"YºV OsÙ›vvÞdöš0 'I¤URr¬Ð ½ì<IÃ7KV¹ó‡(¯G„S—ìëM/·È6{Ÿ En+*¼lI™.  "òˆx9ÿnAÚÿ"ÂÂyVï`çÙÞáæ¢ØèÀ¥-ù )דíGb¡µ­.Û(ô–Ћ ß ê:ûî\©ˆ^4Ôh]­Q6¥Î0«ãO*ŸSdúRª…ûGt¿ò¬¯S§GXœ?¨Ö(ìÁ€ÁC’tY|‚Œnó’›Ôµ úx¡®º)í\q‰7PŸ6fðªƒS[C½&h—ÒüfÖqi6Àì’ú 8ü׈32â;‹–ÙË¥Øú¯\¿½_ãÂn¤¼NñæhaÁÑŽ{NI92;ïh¹ÁYú©„ìS#»¡…­ûKUqÞQãö‚^‘‘Í«”k3ü]UZ±òÆ÷zqòÁ¦+ýnùê6ÀroÞϘ8Ôö.“®.²Ÿ|˜ºÕˆb Fy×v°Ä¼iÑ•Û]ž‰H“U´Ôazé]"°B€ÈSÎÂÆD ÒÞÃZ¦g²Üp‘ ÒifÆÿ‘zû/ûýõOr®$`–°¿Øþ$¡±|P^L¹ÿJæÐ.œôž²¯$€$pðÕGB…~ˆŽÝ Óo¨ð )õ#…rDÿ\¢ƒ$Ö“ÈUÃp=úšˆº×Kžp€Ë$Cý5y¯”d2¿UÚª(êÆ a‹Æ¹úÕ>J烫¿#tÏ5²"a uÇ!ù{tÝð”P)Ы ½ܤwû³É‹ÓÙ?ý-bI®¯5½æf­LúF)ˆr¡j2­H§qT$ŒðÖhýôÖ—³5Ù=~ÐÌ{Vìæ?2IJI§5(xU)’Ñ[[Ißl“ô ãÕÕ¶Ê=Œ*»©XôÆ…H'ϽQ5Ú§$ÒD•Û‚×D™Kà T¿šì&R9îü"ÉRÀx¼®ÆÍì×¹›¡F”{LU]x®ç=•P!fók˜ÿÕiK¤ÿxý:K$*Â>Q‘·ø-K´x-æzUj¡Yî·‚L•<¶°dàÔA7·ÀÐòS7áËYŽ9'¹N¬¢>8ôÒY©½Ó[uåÞ]¹ÅiõÚSŽuÑ￸õ`•6{ K“šú(€ìÙé}mH™y»ã/Cº|_81ÞfÿùpÚ§IZQ²l(aíõrÞT&YF¢™1¿ê€Ú1 Ní °nò‚†V±´|ê‘ìsPZsÒ”ÂÖuô“,¨ž‰FjjûrâHFq Ü1—’þ9V÷üæx©ÁÇ€•…ÕÚšJÚ\÷)ú)oA+uÙöq©9jäiF!)žêòºH?Ôã@T\ëK$cTâ<ï ¦¦º}îŸÚl{ŠZŒæ¤41¸e5²m?A³Ê¸„Ôb¯mh\í æîkþ´É Ñ^èVXÖå~&T©ÅŒõ\xÉÕÑ‹Æ7mÛ‰bßD„DÐ ÝŸZŠôŒtøEJNwºîëª$YyÐîAC”<-ïà{‡ÅÄ,qÝÝÄûÒéÜN_™1Eú¦áq6³‹}]ü£–ïIá€7«SŠÀ5G…nO_bo_zd EìÎ:GDÓÊïÛýá£YŽÓÜEƒ¨H€ÿw%®—@*<<ëÿi%€ »4kÕ¿ŸeVzXÌ¥^ðc˺€ÂC°“j˜‹™©ÿ`·‘ XH%ßç ÉNÔ·m¸÷Ëýéw'D«h éˆíÚê:‡7³¬Â\]…’]2~Rê4f‹–„”çÛ É.‘Ú*YV’5ΩGÙ*š@Ÿ‡3l–Žœr=Ëo™’ÊèB¢ôÃ#ÒP+M,‹Æk»ßC^àÆºWÌ!˜ÓÌJhMJD&Ÿ¤â¢ÉŒ¤¢*ç19šaö÷‚¨62¶3½ƒTGa¢ Ë]8jùƒÉ¸î/Ù[ߣ&'õ¬äýÝ FÃVù›b³ª‘,ÆY`’y–qûa*X6ßу cv´H¯ u‚§SoÞ&yÜ…§‚žVÀ‘jä¤W6ÏùIFÜà/ja€¿ídâ⳩Éw5Ìï£SÔ÷ÁÈf Þg²™‡øï{±ò¶DÑßu¨\.|ÇùȬhàù#•£„_øï1wWóï¤3ô;³¸¿²@ë´At é÷ŒdŸEœbVîú¿F¥ywDIPgá7Åê)…úÕ¥Ø Ê‰îŸ°E‚ý çÑK¼õÛÝ#Œ5=Qk¹‘¾ò’x“‰ê%@ؤÔÙîÀýVÞ!†SÆ@¤8\8˜âåUcVøFŸîì?+ƒ-ç‰ Ûù·ŒySŠR1ëIÜtz³58Æî~M*.?V1R êbŒŒ/ÙGÖ•¾~PÉì²*yGbTPBžÑáä¯ãâ`{k\b6m‹3toàÄç£ nl]‹t^ªÐ$æÙž¦ëLÔ>Êvè7§QE3Ø6ðÌÃubÕÕÌ€põÔÖ¬fŒ †—¹1m€Ê³>ŸOV5l4,ÚaÃÙQ,ÎÛ;*¯TS® 4E·OM¸ìAÏ•Rü4>XGm(0‰×ÔÊ«æN€5[·£®¦¯±sûDØã¥M£âðª´kF‡ªè²¿ýcµ—áüt:)æbkc¢ìŠž"Gm¼_ÀÎ7{€ /Âfr˜Hê:˜—€ØÙá©CÍÄ@!3ÎdŒÚ (£¦å+¼Ê°Á+jÏ a§ÚfPÂl1d;ò¥ƒV®=” ²|]$žYû²ˆáÌ7sNÇþ׆â2 é˜ràà‚'ô‰SZ3E6L9ró"d!aœrj t {Öì@?0Ö(g®Cø Qeë©J"›TB/õSt²ÂÔÈйþé#‡w¥Ý›6ÞÉc–je ß:|€EÎbô[‰ ƒ¶q³gþ–pd›¬·ËñTÕVê¬àCÒyBU+³ š, ‹ýÅåÛ/k%qOÍÁF ÈÚ0ö6¡MêÓlE¿ñj†^¥‡ÚZ/¦ d¹ÜÅSjÂXá¿{Ñgè8»c¹þT‹Ü%õÄÛ2¬¿£MÚÁÏ ŠˆfO´×g($Ýò˜è8R¶#úÍ~u‰µ3š.¯ŒõC— {sëÚ câˆ:ûãt­”›ÉCÓC¿ƒ¢UÒµˆUÚ³¥Ý Ò ÉãÞKëÉ%Iâ/âÏCÍýeë/¡ÊÕ|øqÖˆ>áZŽ”s0‚jb¦LÈ·#u_€ø~"¥Ç,l0ýáÓH&ýŸ\º&}B´ƒ½þ“'{̤á±ÙŽ5•}ƒîÖò¶WêQâc¼J”àK¼^{\õ}Œ‚ÒgK¾ÇöýíÙâÕTP‘ï?!Þµ¤ ;–¶ U’ùÚ'ÜnÁºÂ ÂýX?´â牉@ñºTØKrQJw%¾³GÓà¨r(¿ˆi§®›DÃÇ€ü4M® ¯2ݹØY¥ vúBJmUÅ;Ï w? öoàXQÈ’î:ø¨é^÷ßèsé·(BÜ1E‰YH½ôÒB_iàQ¨H>—i2&ÐtýÝOˆ°K$éGÅx ¡˜9Õ䥑=Їc>”G«]–g“ŸGŸ°IƒÓ*’a1Àª?ÐùéŽy9Áà¾=Ùñ^b‹Z:bJBµ”Ô¿ìöž¹ÓÖmŸ¨/¶kK™+pnOò2¬Ädž§·ä(P¢á¼—²¢2°¿>‰Œ½qS3Sh:¦óïrÈåpÀŠÜ§=yo  OÌcÔÕý?–Ë3)F¤¤1{Fô¤ÏjnÓç—(Fóü!:ŠÆýŒ»½>Õ.ñmÔ‘7EŸ¦RŒ$kœy`^Ì ¢–gÚ1˜lsQñk ­`°ÂU@¤îíƒÆ1)ÞÅ+N*ÒfÄ‹˜H•É­æÛ &ðÖºlãFñ…°x(WÑy»¾µåâ5“¬í"-†œ" ’ŸyS»¤ïåBÛŽâ‡>o,±‡ j á7R«³”2^ö¨wŠU1*ŠAþð æá=ºh ÖïýNº¹´5žbðƒá†7qŒ‡:` [‰£X+wå§|UïÔE­ŸoÀ•û»ÑYê¢Äc†c³ý{ab07¸‹³áv¢û…ŽF†ª`ÖÂÓ{S)éžÄ^{nE6Ëý7áõ‡ŒkÕtï‰7-•Ñ öuö&ô?O¸ Ét2÷syë&ÂÀŽí,­g¼Ê±õÆ;Éx@ÀKÜØsö1 J¦ßݧî4î—ÛûÈ¢þß.TŠà¢¡ÚÕ3¥Ðó[Õ‡puH'¼·)ÞFý{ئççk@d?>.»jlÍ„ù) ’SCs¾s|!äÙ#^  ÖH4ê b™Ïß|¹iÊ›K ‹slƒE,»ad™^ÿz ¸H¼Õ˽ܪNk4ÓxJÕ²ÄÓQ³åþkõ‹úª²÷G¾ˆ ˜qöa/§':Ï„ö›ë- 7¤µÏj:›TÞH‹oPìuq@· |á‡MÌ)-ç.{1ØNY^Ÿ¶ÿmгÛÌ­_âûMÝäïé;C†!lÂ;Xu/‹Cݺé5NzÿHp_³ò3öÍ8ÓìÿYjG?žî\s]z¼m·½©;ï.æoÖEXîïyNô‹5.®BÀÑûÎ öaTÆy:ŒOõ«…S¹û®æö¦`p5”rpñkÉsýs>L@Ú`þ1¬©š§„¼›LTsÅÕŽ:ÑM2ª•~bW™ n™ø§©]Ôš×`U|È?$Ñ#(±½ö5Ñ^͉”&~ 7?e×·1ߤœŒÛbpUGt^˜_£pºˆ4d²6Ù\媮 ÷¥š7(½€äÒ-Ä»rÿ§’î‰.-U¹×Wñƒ•­¯ïÿEݺnàȲØÀ˜¸ÿ?⸢½é°©çEÎÉ—å5oQKŠIð#ô3ò“F Ó|$›HðÇXƒÊìŸóƒù–¸†iNüv<ÑÜ}’µ¥ö žJ63–0IêÞŠ!œCc¿;Lìr §äÍ9[ BÙg0Ê/úDÇáX‘O›QJ®ïXo¯î¢¡Áú €{™\Ö[ XàM+Îâöb ­Íúf}»C÷Î}˜…+„“–±.ÿ ƒñK·¬i×­é•yvMçþÙ„‹¼çšYú΄ÒãS‘ŸÌw[Õ7±þ÷…ÁÃî\ý8‹M:2™ ÂHÿ$M—©ío¼ªO“IZñ¡•Ç þ^ïeœÑfú¯ãã«. d×IH¬SÑæ[ã©æH›å ³zØ=º|šö<79pàRHü³CÛÞ€ 0âx@UéI-føcÞ“!Ç"T+r'G k˜6¡‘ Ö®Eáò1äm!M%Á>~õÐÿtk#f£aAá·aÂà6 þ¹œq¯ÉH€‘£w,¾Ÿá]3ÒíeždÐþÀf»»áH ZH;úBoŠ«W³WT_æø"³ùzÛXÒs«HŸórÁÌC5µsJEA9Ì€çAsßø-Ósà`ªç—Ï×Na1Í0K²}‚Up¶DN>AÆO&d÷î.àÈØäÈùfâŸÏT1}ëot7ÎÀB{#u'¯¦r¬ÒÌb¥”°õEëÍ„8ìÀ…íÙ&g(¤Î¯¢¨Gé¢nœ&ï ŽqZK1 Àþîj™{)¹¬ŽT=ó¹c¢ÍBX½õ¢†`”&í’¹•åAcßë½? Gn ßí&¹^õL¨¨ žV…½ô‘mÔeàK 퇠®„cIÁaP]_Fó•²õð “DþÜ{¦¬§Ï91êJw[äë[LãýsÓRûÃ|ÚÈ”ÂMõêè(…Î[ë‘…›dÉŸdò A˜¬3Âó#å$Ø¡ güW t¸ÃùgPw¿–±N¿e/d2šv Ó̧GgžC}UÅûŸöG!­º66UæW›L#fà6 ª A­ÃÀ–ƒ%‚îY-tì]Ært‹Ë$¯€~(ôó*ª£ü&4ÆùÎæ˜ k5Î!¿¼Pâ×öJ8æò‰åªõòéG Ød¼\—óUû€ˆ¢$ËØLÎ]ñ¹Qá¥VLí–=] ØÆS2ÅuÓö6¤ÎO•9`¿Z.Ýýü™Š n~ŽøØeRKÏOmc#ç²oê¨t*7ÓÌ$$V)°´ØšÃxÉž+X¹0zþHUŒ:ìík…Ø@Ê&ŸqJ¬™1Y<ªxqµ¾Ix7¦ LÛßa(ÂDÒ ot÷º6ˆ£ #­ÝÎö!Èt¹8!õVÏ-Q­Ü =N{¶aýæÐ‹ìnFP VÑŠb>ôÜœÙPIïÑ^ž&h§½æ>tàboÆè¾0¯»R|ÊñkX¬†Yå YÆáÀZ“DMÿìmKƒíÿuW‹!ÝYƒÎÊרÔçW²a˜v×Ôy…ÀǤP/G4ïêàg£¯µ1»U¶0â×sÒ#¦H_ƒ9ª@–JЃØSIívã Èñ*‰ø =ôöݺ¹1KXè!l>{jƒ^º”6%åpÚ„(eʳÆ<5ÅÜ™ít’6æV}_‘â{-$ó»ïÁ<`e6~’ãŸÍÓÐ%jì$4ñPÛRÐÆÛÅ­+€ éø›òôò^oVŸDµÆ}<ã©îüT ç­v³u¬*Žõ4ùT|M¦‰_K„sÒ›-ˆqŒºÄ$éJ‘‰»§9"D·Q¯÷1c:*ÀÝüÎ\¦X/Lñð Pí6v"¢þ]('€‹ýˆI÷AyÉô éj³&(ÅÜa>88£K¿9i§Ë¡ÿª ²…æY ™çGôt6¾~ÃrØýŸ(mÅn© f!K'i |Çr’¸ -tè@<ãø„‹[]q–Haç zÅ1v¡®)ø-͚˄Ÿœü2ïí1’–7 ›0éhrÞ‘£šV n5¾ŠÈîöDìÏ|$–ÂA1š¡ôE[‘;´á·XÎŒâ¤ó¦`&}lŠ$F8\ïIÃZ€%Š|(׽蠫þX¯!%& ‰GÿH‘Ý+€ei¡lû!í¶Uú^°ìa9J8KTðÀôý‚m‚-Û½,¨ß/ï}ñ½& sÊ“r·g¹J¢ãÕê±v{w À¿#ÅžXÛ{ïž²ÍЂKß¾âLÂþ™X ãL>VnŽR_Šq“æ$Uʦ³œ§ )¬ÔdË›ë È·uÕØ^þóÞ%îñÚÞü‘§†¶<å{Ü@iMÕ«‚©¦­FÆM GµSUžû šNÿB…e><þŽÕ Cd8ƒÜC‡ó‘¾´ÄD˜1±Øî'¶cÖŽõÌh;Rƒ.…3œ!~xâĤ %Ðy~$=^¦—V“/sì n–Üòã6DQÀçî`RÊÑÃÚn®¤²÷aÅØø+³C‘<"â/PC·ÿ'N=~4þnC*·¨Âå“1ñ÷i cÃn"áûIÿ7Si7í(Çð>þC}¨÷Ú™‰õÿˆÏ¨2}A€Àö«€¢³‰½³ÓS0ŠñŽ0ñð·d¦MűN©>ZÜö¹ ÀA‰Iéër,Ó½¶?Q¦rã)!:-‘&-™ã’«Í×Їæ4ä1ìÐVš~£}èÉP öT¾\™Ua݃ò<œ­ÚÊ|î/@»D¹ÚLÔÁrCIìÔ@Dn¬ ¯yd@_äAXHú˜«^]Ùׯ”@Η.ç €>™¸÷¼V›Ód,™˜ö(WM+ž^²Óì3/ž:Ijfú굤Þ@Á¿YÅÒû#\Ù´ËÛ`gëSò^ës«‹0µeÙá¢Ü|èÏüä²Û¢†ëþ6 Þƒ5óÀš’KK+¡è#‡JËÕ³&®a¤±q‘®¶ äÚvPô×'õþŒ—MÛ”« ò­o¦-€4e#åh É.ƒÐðæfº[˜)´«ÂšYé°QYbÚ¨3£s% \6¥Ã¾ìȸµËPÿ'9˨†yKµ·üÀ~ñ¶÷‘ØÂB1hD¯€?Q¨•ŠJ9å[=õLäÄšH1ÏùÓ·®4·µ<À $#*¼=Ä€ @Å%òÀºé¿ºÖa¡Í«4¿þµ~eªÇýo°$TÏi?¦âá1à •‡þZ´ ©†Øå0BBÐÿBÕ3"!‰È÷q&ì–X j+ ]eâØe:Wà…%–ÂS€¼éýž°¤¢:†µUù*ç×ÏȦÍLH.Æ©¯¢%^Á×¶í{““9É-à!ÜLî™Ë;&övRUµºíHÄÑs¢êÊŸ§ÿ>4è‰ýäš[XÕ1ŒcÆ1ÚMEÖg\F}—o=$’I$’I$’Òø9žõég"]ëýî†öÁŒ”È­žÜÛiAÓŸÿk!Çò.s¾¨Á³ú®Ò•UUUžÑI*„œÇI èŒ2û.ÞzI$’I$’Idz(˜bþXô»y"3¿mk;ìÂWUÁNš'wMãÁÜ6{²aùÔ‹å¢bÄ”dΌæÞ|À û}Õ*üVÛñê¨C[Ç|»\ÖìØC.湚Ÿ§ÐuÖ¦ø˜>!¬­H / ­HTØUÛa~}ut¬ŸïCªî³\Þ –]z¤†æÛ8œ ü¦ñ /ñY´’dn•X€/?ûCtÃŽ®ÌÆVý• ¶rk8~Ηî‰,¶üœ´qQ}ñÀ;N=)ŒGq×#Òž¯9ÊÀ¾ŠO<25I¸ãþ$ü™û㜳ë(¢h¨iUñ‘×v/q1ê#:ÕF¾NÉ*-É?óM/R>æÅç‡þÞ“P;_DÂÐ'Z‹Ýj€£m¿Ú«ø¸q);ñß”ùîyø9 q—åÖxšQÜ^óü.ùýþoáÞöÚÓêïŽ}^‚?ÃÑ+~Ûfú½OuõzPþÝ'ý®—Õ¸ñòvÃö¿óü)ÉõtÉÿþøéÉõz O«Ðøzð;ÓÓêõxçÕèǽÑü(_áÓðé·øS<…_?¥øwIü;¤Þ¿ŸW}Sêô-þºöõz–kêôƒ¾~Õùó÷†ú·“ö·€Õ¨Æt:bÿ|¨4/æ±J†8ôvÄïÅwÁ àÁ_&¬p@] [¯›æù¾o›æù¾o›æùɘք]fþ(Äp4Ñ6 †Ãa°Øl6§†¶®íÂgPZ5…Çäp½àŽç¨ _7Íó|ß7ÌCyÎŒcUÛ?ÎNWR&E4Ö2X0CÕ˜Yšƒ­6㆞éùß2+H´Ø´ÊŠä}Õ Þ8átêw² Ôy™Ùwºe}•ˆ®ÜïxÅ XÔÏP§‘Ý É¥¼qâpDßekç*Nz pcÊø+@B ¨^šO0µË ztsýø}A~¿\½»ºQ|éT“¥›i „-@|ÍJ ;Þ¥—4,‹õ%|ƒ2ÄxrÓD«ÓöbëMÛ§³fœ"I½H€ßò®éz²F,‘DÌÛž,zÝ\V'ž~øÀô„ûƒD scŒG’*Z/HˆY«>E‡2Á„bÚºù“I/|uŒˆÐù…u•‰%þÕ;$r»mLpFVØÙVÃ۵ߋ˜^äGŠë­;ZÎ8Å5j™‘¼Øwv›ÿ R)áâÚò‘“TDgÏnbD‹Æj]—‰¼ó´gû®àᆵ°<ëÊ.Øo$ –)†*Ø?[îbÈ,]•U78ŠÃ3žqÌþ{Lò”æyOp­AR¸ìròžîro¡$„¯øùPªZ—-:ªB­k)£­õë±?ë³nÿ$¦§r÷(|å›»^K÷»ù†±2ÿ~@ÚlÓ…^`:µÎ‘˘óÂÇü©kŽÜ îgê9ÈHA-Ö_"°MgAA,x¤©n Âe:0'Ý9ˆ<ñ`A³YMÑ{Ó~d#³²!nö„úðUT15èÑxƒè^-בd.ëëvÔ0Ç â¹¾2Xov?HÈyY„Óµ“ *#?GÄ–F,áÁ¸Ü»í-8¨IåÜ?¬HAÜèv“ $þy",\«-©öÓ €Þm15èˆß?ߩؘ^yÖ‡ûPtÂ$Ò±1ƒV«å«¸:.k9’ÿ|‹/°Œ§–ÀKS›÷„åë[$ë;±T´ù ·2âG oÌ­ã_´9Ë„(¶<£ùŸ³¥„ §èë|U\¾ï‚àᣂ%“w½³üAG"b×`w±t{”¹­ÐìÜ<Þ/Ûjé‰RPoƦ†Àv¨³*µq-'c„Š‘O?B r·ëã†|4, ?ƒßÊ^ÍGŸ·ùµb“ÎH{lÖ¼…ÂY0v•ÅDÿDH2Ü•)μ$œÂ?^~)B3ºÒ¦†04«–-‹÷2 8ˆ·ðI "~3ÆGæð²Å4X†ùˆ ÃøÿnL.0[ÏuTl¾K½ñ‹e®E&È ÿ5oÍm/­mQ[®œò–Y-SàÚª~ñš®)ðåúà ¨|ÍRÉ]úôT7âú¯ÔóƒB|05ïÆóég&ðšÚcÓ ÖÌ­óV·),Í Af•š„Ž?º«µ¯XV)½)èÊ÷;{+P@6®¼k‘w¥øÿt=~OE›͇ä5‹$“@ŒK]Ú'ßÅÖÛ¤9…šøeJ“›Â}’Wdì!!þÊ»:“•ÝQnšóf¨7%íŽ#Ž_¡¾q¨¯X… žL”/Жî_­áa×ó2¸]äJ ´u«§È ®ïçëÿlKuþäDTƒÖ1ÅÔ Pxkƒ ¼Ãg ¦Æw%«Ýcæ›M¥ç§Q¥ ÎLéìß þ€pÑ å`‘®6À½þËçcߘ hI÷oKï! Všj.¡QÒ¬þoñèQöÀÐäÊ߬{»8h‘¦8"ñèý=ÇŒ ÓÔû{Ÿ>âýÑö¸ý«tþɾyJ²ÜÄêh€L'¯ôŒ}™_öES¸Nll)R’H‹ùÀÓD¯³¦ïšrý+:ÿ[ER犜î!"€|E/›)-϶6k o”¶¤½nä“ÓŒÍÑZ#}=ÚE[Œâ[<z{·Ô„2¡¸½Æn.LF턉ٜéÎô“k>sk¼¢GÑ)®¼pî÷ÔÛÓËH†[Q~ž]'r4qBY~Húí¤E"¯ÅÒ$¬#b—hXóÐ¥¦—Å÷mÀøSœ»¤Æ…ÌdЈâ1ÞÏÁ½€ÁÁt„{Î|^”eÐÒø«²¥y¾­ºÉ+3‹ÞáôwÐã6ôz`.óP—íúè–¬0‘#® QÊõiasÂþ|…ç>OÏÅ+Ù?-«…Ëb Gô‡=£Ÿâ ã~aª“ XW1„eî°ÍìŽû&»øq¾Îe4ÈÖ0©ýâ[| |›=Ïto˜î ù}XoÚ{C`ð²t*Ó’—´úh—HX…9ÈóèGÛ ™òR˜ rÛ…hní-ÆxR¯Ø®­Õ&£ÄB¼½„Aq=•·Ã(èW48\ýbó:É®ÁÆ Ù1êœÚ%ôXÂðQp²«µÛZN• TBŒŸ’5о™ÒÙ“=Q¹tû§2ïͱûéÑÒ.p.ð3.ĵõ8ù%Ûv©9¿éÃ+l—"¥*?&K)åºaV&¬@k;…`Îx©Ñ#k@€”i¹êä\‡ÊO Ú§1ݪú²_QŸê°ÖÛŽJ¼-$ í${§ÕF’oe§A›ˆr%û ³>eªÄIª¯9zØÝ€YsPU Ç‹!6”Ï7šÕ&F ô±>Ï]†Ý…ËüZ£Yé£Õ³uHW‰÷YÓó!ñºOÈNpãŒec«Û£TùIê^eøa&mÇ®1Tò=ÿd#\€¼ÆcSübœrËïc¶öÍ/Ûƒ KGy¹/òg¿7ƒþA^Ò¡>(°¸— øßÌyÆ#áïÏU D#ß 0ÒöéètWG ³¡g6JZÅê€2)¹‹ìÖíh5¾éDb,YĆ˜Úx½ÐLûmCï5Ø€½ÈRh›ú…Ûèæ¬íÉ%A¥‘Š×—© 8ÑEõ_5ý‡ # ÃÚý+èW@¹öUþy8©ùk;8\µòoá'Jœ†Ì‡|ÒQ™ë,iéºtKO§«¥Àùhö¬`˰G‰Zg+¬°ÕøçA’?ÀþÔÓÍËÓÑ‘Y¿åÛ³Màa³ÎÂ)–pOjc[,’êû4S7sÀéô4?a’Š÷ºÉ%31ÿ'ÒÛ>ƒP±ú³7Ê”>Pàš_‹á“²"¹Ôƒî>Ï Tuè¼Áñ¬®•ãªF¾M; ;«ðz—ü…I5S]Xă·ày°[–Žh ›“MðûÈL¸wã䇬/[šFËày#$íd^Bjß F#É…«9øfos2ì ýZψH=ÌÜ;ß{¹žØ!%ô‚°©ÔÜ7ú9˜èÎÙ?7<_NoqD:Líçö!üD´^‹·_0<0}¤Ž“º$SŸ2‡æAÿ"dÄ–@ ø‡ìz¦‚{·_7Íó|ß9 /¡10Å­×Íó|ßdYbZOù‚8jb † Ô^^=n‹êŸÜÈÏÜ ÄI†-nµTçJXUz™øí#¾B\CèÒö½¶V»³òŸ¿‘“ÈŠübâgæZ«^—Exž›P×ê÷Õb¬Åø·€[•!²!Ó¿´_%·¶_c k*qÄ™çÑô/¨êïKå³Ã¿Hh/¼Ò"eàv³z&}2Dí—›ÏÇ"Œäc¿â‡ëÈWÞ&$t¼íÁ+\' ø>+‹úfëÅü8†áßË/“-4êÌ1'ÿLˆLem§u¦ŒV”2O&¨DøGQûE/U£Ü£aV6Ópça7Ti”*+’°úHT´~¢Ûn¸0‡ŒO–vƒL2F~ãjy<úPê'.zÍ•tˆéçp;A誴Ró¹TÈï¤>柩ðÎ&fѲèðòõÆ4Í©³hËg‡PiÿHa:™{|l ìb–ÔÔYx`/h@…Xaƒ ç‚ôŶy ÷ìª#êH*£ã.ÿ=b"£Á­JC*0”ªc*{1R™³òøz·Þ.”ŠÂå¿J\UHHˆÙTŒÊÄ õ¿tÑØƒ3Uà&Æ‚,‰Äþð³åÎÆðu%Ô,·z„2):qÔ-uû+2Î[…£™âa‚”ä¦ÐbOTQ^ö”aN2¾êIJl.Íkîì~}BmÄß(=Ó–ƒ!ûæ®Â¾›¸WÓ}s§:Ù<ò¥Í:‰TáX7„ýƒÍ=þä¿ÝF†Ùä[38„ù:Îoا¯Ý¢°¦Ý8[/‚$ÞFy:þ—£‡³œ(»‰nªk¹cÛ͉'Ĥ_„~¦°ª¶ä1!B,Î{ª¿}âN~‚»|Ì…»2ÿñðê¾=ÀgÖÁ}Ñ {D·jè_*Ïvg® jŽçÊ!ò5™ö¹šðâš³Øú”v(€‡ = WDË"6cµº‰ÎÕýœf®CÒÑ@;?a+× ñ¾–Ü"û¿~¶xnÛõDOÉ`¿TÖC¬ÿs®‰«49-½Ïü²‚ùÐP!Ù.5&åâün½*ª&.Ê%9†ä§à½O#|uÏy •áôpzó5?‚ÇÜŒŠàkv<àÈ}Rë?z»LNu|Ú ¯½ÞïË#Ã8y‘'A°0¢ù˜zëß—d UÃyU¶Þ$>ŪéêÃfH ·\€„ú ¤k¨¼FÀR„s(¶~9ÑÉZ4`Xh‹–êـƭ¸¢¢ÓB«FoqÇMÌ Ã®i“‹M„5)Ñ_7Ç–DûS´?V䚢 iâe×}C Po÷¡Ü2n`!üÞ—¡·¥¨´-1vrx}?@6¯ ´«W@ÏlC=“ðeߟ•Õfž¿ÛVX@õ¹2S„|Ú4„¾k¶fÜø­^J¤t xRù0îÌÿJóMR)F‰iyðTÌë a  D+í¯P¹ñd/N e߬aêk‰"ʇŽüE¸4e¾ì½Ê+¦S,|&!©|Þä¾h<VûXá©eúR™KLM®€|ÈÜ$W/ªþ²ÍL¾ÞX'µ»RZ„Ê®Csà6‘œil&w›)9zp@ò=D²M¨häY|¤yn\\ ì;>@‚æz ×ëD y¤áyɰ¼‘_^È’¦«ÈÏŽÕQlõÁ33Ó[Bµ²BSO V`ŠÔQb2rÚ‘°S=ønS€äÙR‡‹òWåx¢ÚNÔ:_ˆ=¾_Ÿžð”l)HÖÆaÓb'gÂʽãR“´)*séñ…øÒKœìr@ÙGn‡ünB;öItÀ´ Ñ‚2“·DÊÉU½¼¨Ÿ°œv”–§Â×É„G؈xAgóOL½^’añFùx*§-ÀìëÙæc·‰&[x9b®êfsmÒ€>¸²i(jäÖî~Ñã ˆ€ª^›È5§èsüÆ÷×ÈG¡ pl*Û¸é×ê½ûçT¦-$¢J{Hhˆ£%ÓÅ|3b~àºR³,°(½ U´23šºÆî˜E9«Ïá¶—7§q:‰¸\Mðg5-vV‹:+ݰz´Ë=./½àV›×”z/O°‹œeVÏâWv×Õ­(95:½žºè`6iæªÎââwøôÒëD°…ÅÑrôOÜ"îÜÛŒþÚ¥6D6ÝF¹y Š #ùª?¬¡R.ö㜻£cW¯gž“Âô§‘QË †äÀãrÙc<©#<Ú-S×Õ.¾'õŸÈí4âîä # @±SP"(°úwF³6ðîÝâÚ1L„œµõþÖj…ô°^‰v’Œ °¾TóºY»w/«hà2ÞSå¢UDOPh”ÇŒxÈ}9ÈÙÙÚ ?µŠ£ÇŠºïê¯Ié"ƒʼnўÂÌÀ;]±:á ³*’Ò™xD&+*G'Ømæ9¡˜‚‘'ÜÁ ôiðü¯¿Èþö¡X"r -FÈVbp ¸ýüúËDgüáÈu«(  ߨù@”¨§ˆ¸s´ª¶ù[Ìñã@\‹KvqVãäÃÔÓ1;“r»ØâÕ’ E¬¦XåHîm9Ì&±P ºî5Sx4}ØPkö˜"bò:s#%HnÈé0}vÏ8;4=§ª¶iÊH{f}øò)".wA `ÑÅf¤8Ý8hÖ„zú:•º ÷X´4®nh"‹ƒþ½õ-,¦–åQD9bÍwD€‘ÍôóGÿ5Ú"Ô¿î|*Èí8§*žcçð^„ã8†¶š'ùÅ_¸N •lVËÖÛÀÚ@hCãþ5È%çùŒ ¾#w DÑ‘·_7ÍótŽ®Üº“Ì!Ñ6{I]=Â1¸ÊQû»ýÒtÇáÀµª¯kµùö+…`“D “d5X¡¿þGUß^ô-&¦[,oz!óQž ÞD02/¤Ý–Hj—ڻѴ:81Ïê¼ÑC"®—æf¥Ò!BOx€”üž{î_OEf|H®Ì·”¸C»Ôž?ç1ÙkødÁøVµÃ¬e)ÆÖPPžèîNOHDB´|0:*Œÿ€¨E£X±Ødj3În²ß •d.«ÊEÎriyx;`»”¤†¹A¾·Àpñ0õ¿ þüU3>w ¯€»Œþm™÷E‡®Žj€‡¦õƒªiïdøn†ý@› 0;¢P ÇØÎâH_xMw^eùM2 X=až"\ž |qR×" Áºl§)6¥¿dqÍӳȢ\Xðüý@»âåAÿ£G<£Ð»š9•1¨%¾ylc5‚Ø“¸ôLøP"ØÄ‰ÞÏÇLÚ Gsô çõè^“L).3‘ÆrêhS®G™õ#Aq „è(ÄÒ¸{7eª"~××—ÿi œ ¾G(Ëñ6¹g„Ž0·iÐ+~ Vü±ªa±r€X„·K4<2/³qùíhÖG‚ ‘_±µ»R <ŸØêßîQHhe+JÄÅœy@hÍ}¨ý{ròÂ.´ÚÓõDŒ—8/H‡qB¯JQÑ8ô>w‡æAÿ"eÙ' Á(haÍ-l€ð­ºù¾ëœëO" «ES(!ÇI³¼”ežÅÒåDuÿ¢$Ð`4)ZÍšè­€ü+JR|l¸öÊÚ-Ä\nÿª|Vʰ $—ô d!¹T‡'WO›ÉƲº Ô#Ñ9°Ù¥XJ_{ÑÚy&ž¤º7û’Hkµ fÎqŸ¤Û÷ €/Æ é#¿A11J 1fSµ4í¯ÇÎȪH"Ž0>°§—%70¡D‹}§óÀï‘«.•A΃`ì¥`†5éWøÄºƒ".ïäæN¬ŸÞ+ô”gA˜\Œç`+”Ò?õwÕ›†æv͸TUúýeùhiÉáŒ?%uü†¤'¹[RÊÂ2iÐ %dt·œ2ô]J•–eê(ýä–d\¯ïÍ…w±gš?¿"í_>~óµ~~ëú½f«OÖV9N¿¢óo¬ê¥\ëH|4ôþÀ«]ps]OÛô uļØÉZ8Á>do§ÀÅ)S¼ðqvuW”åÃy“&G |úÈ}J6CÉ Y‚’!Ú{=ˆgV\Øã:k­êM++`%w’Á¼´ÙãS¶1¬Þ™QN½f¦ÎÂÉ>¢3Ÿü0ÂXÉê‚$ý*i¯©H31¦ÄÐ%7ÂiëöÇm-k±qM+ôŠõŽÒð’iK¢Í†õ§xéÆN“îèÏ»ÚðDØB:Ótw´=*$0^rö ¯Ù]OmC8úúðŠÆçêŒ=N"¤\™<$¦ívân×Î_¿EùÒ®‚i}E)5v务V"¶#.=´l…?sÅ.‡p‡ÝŒI߯ï郇VŽDÏüãÆnî¨ÏsœÝþ[bÁ¢áó‡Qh¤eÌ;úêÂ~ŒÚ4´"tõƒ¶í­}ÝæaØ»ÁøhÅÜøî×S×#‡þ¼·p…Ø:­WáHµÜâúžÕÙ,R:!é\¡pͬz_«Ö ̈ýJ«Cg¶:ÄëÊû.»cÄcÔà2@%ý6®À x.<…¶ñ¸Ÿ“Àm©Ð@gÞ­œ'ò†Î´´¢|§µó{¸òþ·µ%ó¤^ñûé`J-øÐ5övæ0и:oÃ2_%Duq„ulDèñØãŠª=O¶á†qœÙÞ¥¶!Ÿh[4\†#KXôŽ‹(®€Ùý÷ä“ÃR &8tš»n‚Ïýç×éC(g†#]g¡Îrõ×Rn{P›×‚› ì9t._·ï•+õ A¶$•\WŒÛ ã ‘Eo’ÓCØêN>áOxŸ›1I¨Pº•hâƒKh3ïÚaó}íì.õúìêÐ;\wHQXÙ'¼  ^óÏê³1^mG‘V|Æê;Br#Aø~áECÙ¢ ðÖ&)q€õãÇÔù‘ÿ]ŽKY¦µÐ]|é§È(6!ǯ+HL;˜R(–HeJY&1£q^xÓ 1ïIÔÌ5ÓØ× ÜO}Ÿ%Ùþ!ðÁýäÙµ–vÑê„A/ ¨Z§O Ueü³UYÎhœˆ¨Ç®¢Ön>èÛŽÇ1ÓÓ„²žøÀÕ¥a¦³•º .ù =Ñ¡j*qBÐÚbÏôèS(…;h~®’Ó*ºTuOm¡1©ßig¥ô[r\ò_1=3a9^ÅQ&Ì '¦BFp}÷§`{ÊÛÇøŽÙQ=Y²±|¨à£ÝƒÊKp]À†-¡FÿLf#ûØ'ïÊ” ÊþpZcŸâG?ül¦Bÿ±ÜSV8ÌnÆÜ®4‚[Ši_“BPqknôÛh’cÐL ¡)I÷®f¢º[ÄlÀ/¹ll¥8´åø‹Á¥õ^ã§Ì‚.؇¦õw4Í MåìpßÀp)_¿Iü· $ðηÏÆ‚E¬ªcú­«4o'χ— §³äP ‡ˆ½â48)@ž"éfÒYì"Â@BC÷Š+ÃÃí«zm௯nÇ(k%|E;Z÷ÑzP 5o2EŠÑpLYFÁ”-Ãû@¬üò÷-^NrêËì{± ÍX8Î\g`E…|åã« ¡³1ž_ JŠVH4ÿÖÁâá±úo¾Øá±âNÕÚ^qM›aß.‘èŘ:ò¥tG’6ûôµØ£bRß9šW£.cuïoÿTлºÒt3Ûƒ¤¿ñ &|‰k¢n8Ü})¬úÚOÆa8êx¥[úÆ¢¦îÖïÂÞ¸`ZÑ|Í3öî@Å I¶¹ïòxËÁǺŒó¦æ½HÔpìCé·Ny‰UN§ƒ1v«bQe½[®ÂA­£Ln}É=ÑÒÞu{× ìÙ†÷ÖÚ© ¤Ûƒ•ù‡4;ÕîDO´ËHà2ìd¸*ÜcªB§•°àfegcõ<‘vBñÄ¥~VÕwìêÙn:ôk˜ãj—£Ävš‡‹ôíËifÜ€85’’lœÅÙ›Š;š‰“Í?ÑЕ¾¡…Zc 5±“ÛM€;¥¾{HÑYVƒv\õžÃÛö’Zè–@m{ãpNx¹(®›"#Gà%¤Òÿî¨Æ ‡==aÖPv€:ùÚà™˜ñÆ÷Fù s2ÍÚ?ºþ Ê9ƒ™ç<äÔ »ÄW% qO°}®‚(¸! ó`;#Zìô?sk€€ìVd®P’_ ‰¢»Ó™Ë<æxÍ‚|û‚ÝÃwZ.ñ ð³j%œðYÓ¨Œ¹åa<ê¡ú‹évýV¢†²QàH^ÒŒhˆ¬}cè€ oNVa†f=gL 7¼#˜OAÜ7 ,Å!Û_ èµCÔ8žéÍ%n`/q¥EøÚˆ‹ 7”°TþËK¶}ªg ¶—QÓ?ĨÔÅ‚ÿ…Ã{dz]lûºKÀż8ž”ìÏf)×Ä<³€|hÈ£ž ïîŽì;¬Í¿M4eNfàÕVÝì€u@{Ìš'Ö}œN`$‡T÷„„õsõû‹g=-*K·ÒìD|(2ûð͈Mî!ø°§åùaFŸ•¢G\qx5GÎÆÌ~? è£ÄK*0ݨtv3 ÈØWÇ:ÛaSN¾ÐKßN…ÕÖ¯Àèøø dšCV¹Ÿ ?îVï6G+á;ñE"Ú*Ö¬QƒZpî†æ.çÒ‡ÙþW‚É­¾Ì<Ô>G¾@iøÜT6#ð´ù-þϳªŠQ¯·úÚ³„ô{‚êri e¶hûjU‚Xß™†ºº–ÉÓf¬[þ~{‰zXBgV€à‰gÈýÔ·!­¦ÙßË©¬©âÉ•Pë÷/h1)slrT~N\5ؤfÖÞû,#×íÆÊÿC5´Œ)-0†_V ’3ìçÖ4­7wkÜ3)cØ¢ ›9¾-žåaÒ1q &¹  ;gðÃû5„½ðóG”80ýã>ÛEš_PŠbÚüû¼ý` $Õû7ÿà±¾³&ïÉÉ0Á©”I¥’nÐì}ÐËã+̨¸ÔJ'>þžï÷DPk…s…;ã…@{hÕÒ7†ófAÿ Ÿ× Á(haÒÀ¬€ð­ºù¾o›æÔe¦P^ä“\¤°D²—½>Kðè™dc³fÅ?~ÿ!ÿO±¨îq^{ˆîÞµpÂà,EÌ?çZé¿ìyî#'é½ÁêÍ8¶èrå,—äD¯ë­p[uÐmèÉgnüø°T£ÓæÁêCÓ‡_ë— féOß4¼¬Øî‘„Ý4Ș‘#ðd'U̸q°£YVêáÔÄB—†$}"mÉâôQ.¢™(Ú¬^2SÕÒ„c®w{5¥Iv£¦Ó#£FRŸxICðö¯?| % d®/ ׃D(Smþ»†åŸÝEž ãæ"ˆ/:á³IiÊaTŸb^¢6@L¨Çɾð<Ù <ïò?šC]. tP(ki/Q—O–kQT¹A²UÃ#üÏqÇ€_tir[î¥Çrf–d ¸Q<è1̧?lîÑ í¸"Çõ¢NËŸŠìrªìF訜áÓÅ';³v(ø¸ÿ %-¼£Ž²hðl Å œºbãrºcÂf´‹{EY Ì5Æ÷°†íd"–œƒh=ÕÕþd¿Á¸4ó©wÝF|…œT‹Âûä~DËy3 sÝÓÁç^dçÇžp)§†]:ž¶Ú^ßtPlrG{ñ:Z)›»†µ§Ë¿!a4J½… ê\Ϋü¦¬Me2ඇ” =ÝÓ¤F&²nÀŠûO¡‰Bñ?OßÏj5çã/ü„·T„qŠƒVÜ4‹ô·Z–DòIÞ6ðµîÏÏŽžpxrïŽZ®JáÐÕTѺÖgØÀTO z!¼²hk‚P0Îz3ôqýiÉÁBˆnR ¤d”km2N{O›,Å­úta{#)»é:YöjÛÜ€a¸è)vûÎçß2È"<-Ò²Ä}Á‹ÑFwwut|˪hzd¶iX÷©¡ØŠVdàfù_´º~ÛhšpÏ|Æwàþ©ß Ù:æñ:j¨=m?tÏrbVVð~øž⣵Ùd†w|ÒA p…¿kjüyº”Ô;á~ê/]N :´Ê|섉H<êü$™^³í'=–òedÙäºÄj1×5qhD»¶È#O Áèp‡”åKGËmV%‹Å÷ÅF †œÀ—­×ÀI?¤÷„¦d†ïZ´€@41<®%R¡‡©ŸŸ`ŒÕîÞ†ù‚6„ÅBõ`ÎþÕÑÝ*oyþò:áìN Äv¶¸ËP #Î^1pï;C0øA_½ÎüX›VØqr°ã$Ïuåáâ‡kuÏ$é9Li]-ˆÛ­:•gw‘]ë¾¼iŽ ß×T”öP—/l‹W †}"w×?ygbFo÷ð,ã ›\RÉL@IКïzT8Ú<1´Æô7ƒ­K9ÇÆ12ÛpŸ¥‡øuµåZ u@ßⲩ·ëÕ 2-Äø%˜\dÊåw´ÒX67‡YK‚< í{wáO1’Qké»A0û£÷}—jw!&å ºeË{$͉׬Ò볌¬ÿ9@å)"ÿtßqäöH‚1pÏa‘gð Uß,j›•îºÍ¼¾ŸZ¤JʧŽü gfJßí ûAÔ¦¬.GC½ö­ö3¢wXD`\xŒi¸þõþJŸ\ÁÕÄ«ùK£"]îÅhê³®UWòOž»øˆö¤Ïó ÐM||,Fwñ¶€I—@ôn¬‹ƒµ\/2_f¥?¹¢rœ}ˆR3.¹DR5™âp”PQ 9Þ–^ÎOØÝñêw^¦Ë&Ž(º´ ”‰¦_rªx7ð!ÀaäcÍÑ!#L(:§A?E5 û¦ƒÊ‡’áwÎ äóN+úÓ±8ݨçgqt'Ñ=ØùÕ }—c¯Ýk…ºé0 WÖ¬Å8—N©«nÅìöYÆúJ†ÑŽ6âÐf]ÞŽ+¬˜Ò "sÀ‚Êx“ZhЬ>âŸÜ-Åm¾Ç8[šV£ŽjlÆ„-qº¬é~áñ1w?îódw³EZG§º:§éD\ãp“&ÖÐ&“vI2ZÆü·4óÂY½Ò;¥ÈDz©<©êéç! ‰O¯rUJòKGtA¨jºÍJâ´$\4XžUÙ"…ºð~æ©%ò[ö"áïŠèa7ˆ’òïgîÖ`9•’[œäÁŸƒpo¤GôjÒBìnb-¦£-+ ¯¬*,Y2 ¼ž™ôÚ_5A};%nñ¤€ùó¿"¤ 6­„3ô`ú­Z=C9"/¨ÜÆ~ªlÉ Ž›‹½÷?µÝØ^Â9{}CýƸ¶Àšùeíä ŒZê˜~Šö”À Ó(êÛ~CÆŒƒÑ‹R¨žbÎ+£ÂO ùpîÿ'‘‡†ì.#_)gÊê0ZÛª˜—Ì£µ‘ a‰éÅ$™ìØÄ‘•—ø`K7jdì\«™u2’-³¿!¸¼ÌÝ èÔÕß=•LE˜´ßÁ€ù\h§|x‚6í» q0"’?Bµo'f¢bÕ÷€À‡<%Ç%vŒáç—7­f×¾’ÜÙ®ìYôšÍ²»—ßI³L "²•/ß(hÃAž²ìxâ½IÿYD"Ýäç ,à‰Nƒ)qrnѹ?­2ùk.k ñæE,䮄 %?êî?ú'ƒ!XÊ¢ø©žC›´›ÕâÝ~!í°¼€Öð¦:Â,Èäÿ> [sÒ£* WñþöáS SZ/d™mà$?oæô»0_:« €¸½[ŒìºxñC³¥/Î=ç ¬í²#´¹JSŸ Ñ>ú1+¢û‹¸}¥þE$0\áµî#˜Ë¦sB»Ë‰‰"* :ð–wvwv8ü+œÚCôN-w¼£. ÆNñõpµP«ñUáå2{ÂÜí6_ƒ]eŠ pkÁõí×rûˆÔ‰ïßâ&ÊhË9‚oä753†Ð;cLŸ¯!›…ÔNG_Úªå»1§æ7v‡.SÍK¥¡>º{xÌÆA.=‹”þ}€,¾½D¸ŸbìLÔŸ@{û¥¶Q ¸âð:,™Ó¾3J‚à±é¯úÖË*¯Æ!“¢ÎV%Þo)FJ`ß.W›Zkd•P–Ó³—n™D£vúH}‹°°ŸäÎï×BÖïõBþ(ü™m÷ð@¿5äèÎâ×oÅRé¨;Ê­[ó2ùvÜù¤¡D|*˜W‚¼ãD6p‚êï˜ZeZñl¿`cÇ1Ä ‡aÅZ쟚ä-_z3º·€AQO/¦P2-E'SíÎiÒFI`p ¿ ©ôH¹ö×;·„6èÛ亩gòR×U:Zõؘ€G½:‡ôÆÑ¿J 剗3Mj?N>³C÷qg'°`žÙ{e$–ÖûWñ Ktè”èv#2†öÿ9JX”Ñs‹?ª\Cº¦?°m )NàÞóÂWÐÊFÔVÞnµË– µºÿN F~rc÷»*Ô*BfXÎË"µ^€Ú1…š‚†-C=ʧt°O#ÊÓ4ÄfÓ†" ®;ŠÊ,{»bG±×À7ÝMeoݶæ…ìF}µU¥[¼vr¡U¦aqÈÌbL¨àÈî€J+¬éc¿¾¶äʽRµm,Aõö)m“P7Ûm0›QÌz£0Ýòªk† Ë×á §”{º[knøTû®ØwÉiÞŸ”½M¤ùné¶ùŸ)^ƿ}çºÛd%…Å73XLUm)Ë¢<Ÿ¼ég6ÀQ—Ñðú ˜_ÎÿgRq·¸¼Ç×ú'þ«æf§-©ÛP“&Å7,2ßÿ6%$*}Õh.gÏ/«5 ¸¹Ð¦ÐTæÅÌ ‘é{Ë2æï=Qª%¯´ÎÙ½J¡Ÿ°V$¬€vo(Ç1:Æqü²÷~ó,¨þs¼±~õ’whŽôHLÕ²Ð)þÝAT¡þÎ4€nÑRBA@¯*éh!¿.[7”‰HŽía<pÿïvïufïºJÅ%ÙÊÄ)ïƒÝ°uöL¨±çÙGORYÕÏw±{àM—ûü¹)¯³{V¡‡¯äÒ!#h[×5þ´RÚy++Ö²`æ&RÓü(wk…c1,AíZ‰)d>²¦¶hªêzÂùþîÿX^ª wi¿îÜÿJ¸"‚*_=tç’æh£ÿ)œìR¸úúÌj—D¼u'ëwÊ¡&ü¥œÑ‹¿5ViĆäHõq^½Ž fÿ 0I›dÀ„þŒäÈ3¶»w…3”ëÖ-òíÒZ-7V‰u±ÍÄÀƒ›½¥ÂM,Ç¥ðkŠÃéì¼ã¨a¹>úÜêì…ØÃȹ+à.~0?RDyߣŠc ž’· ŸR3 )-"§í†óN@M¿‹AÉÐíúrø»/@?ÊÏ&Ô¢(Ý åQ²"†Í̘⣵ÛfJ â×bªÔMìÑXmÐàÛÉ\ÃyË2¤þìÇTÏ€)ôTA'T< ÃÈ&øg´X„u¨Q—cd{Z# ³îšC˜ù{3h½àY¢ÚEv¯™ ïK¹m€–ñ9t\‰2UÁ÷]ÍPh~$¾CEU,:2øôõÎŽR¾+V¶µÇox%8·Q éæY•Ô(BÖ? 9_½ãG©Ì阂Ѳ&à@gÝo4ËY)æ¼;à?Éb?"ò~Nœ#YnÕ”),:qÅS1æÖkÀ«äÜü”~i]ª|'z¡±SŸÚñ¨„vÛo*Ã÷™A€j/›½ú–TæÓštó„Á6O•Ô¢gîîí6‚ ÁDÁ¡¹Ugt¯šØØžîëŠë³°-XûþOµ¥4ŸÒo'}ÿ*¼wZ8h¹ÿ1@¬¸V”ù¼2´kŽâ´¿¡2ÍÒäeÕ +Ÿ…=Óa›ñäìÃLù³· ی׬é\â¿7sêÐçõ«åiB.¥jPãµ~hÊZç·æ¢2Ê©}Êнi×Ã#) }¢ÿ©¤L[Î+¯g¿ kå|¾{O×=Û[5ôÝûÖN»ð²å‡©.=šcšc™ò—º+š2{âµ­Iå ÷8_ܱ#]Ç3põ…žë‹u@Ø*Ú`‰ô›­‹Ekq-rÁðvn³@èBj­z´yªšDƒ½'cQÕóѳé“Eظç Ó]º€ f¨+c$¯*õ‰[ÖǼäú§tÎÌ_ïÄKzIIR,a ½‘K„â,_F·Pƒðn÷o>¨p_ò¤wX@jUYŽø2'¥Ù|ïÀ¡·O]4ÞŠá (ùn©DxY4£+£ˆËb›¾ÍJ 0ž'†‘­,zžpl¬Cçn¯Þb,œ)çÊ-™*åDgÍtØvChGЮ+¸Ö­æȹûPoúÿ-ÔÜȱ‘g-â Än"%{ØÞ…áÌùuz<¹;íUöm깯a‰ ®áÅ9w†œ¡øiA*40ì\žˆV=·ƒ ˜iÜ!ß–lbjý7Eï®sø9ž[@qPY X¬áÀ)g|æÞ( aró[]|Ãë§Í¥î¯»OŸñµ¹j×÷¥Û|lR@!Öˆû®–<2KVˆ'Ûë!e(Ò˜zãðT¸ÈéyxY!«²óÓfU°y6fSļÜ$ÂþÎKjOé¼rvtÒ!PR[ãÚf•S#½CD^oÝp@Ô \˶Ôõ7”)’FÀlˆcKšÕ‰=:=:p¹º1~Í…fâйJZhP\S›Iëì"ÊI8²aü+j¯ðxZ7´Z(âŒ6Q (›ÃÿDá¨ÕàÇ"†N½O“dþE>¯½­x´/Fk3úð׳Ká£ämT@FvG üÙĘ4KCÉÇ5 õwth%/б±ÆTدÉxC‚ G A`YJ¦æ5@šr wÈ<¼ª£*&è „{{†ÄÅý4LXú_al9A«³èsrÓÝÇ*ÍêYP¨ûˆŠúF•ªÞI;ßÿS¬¼Pƒ|ͤ÷>\&ˆûNiôº p¤M`V}àØViG°:º¨ßàôÄH4–3UÑ eåUmM§hH±0…ðßq7[»rÊ”á-ùbßsò h Ú•' B[;Kê›AõŸù—RDV;i´W榿QÆ·£_7tIùù¤§3ÄOI¸#O"¯Îíx{-&Mkø06Ô‹nXîµ4oˆÖÌèCÕuœT«D.K°Jhñ¬†ÎtüÀ$eà!LçΩÅ[AäØ)鍿Þ5Kº§rß«$Ê^ ÝN©Âœ†& PH$ïÆã¤Ûfì°ô}X.{¼-˜~²`>ex†o¡ù´[$í¤ƒóZ¯Œ4ꚬ92+*‰¡@!KæÛ.~»™Q£áûZão­VF<•Ð1ÜÖ‚¹Ø‡ÉÖÃÙwmQ6ÚíL½kÚ“©ûºn·@WÏ€Á–\fY7t…Ïö0ôj"äTMNçñ) À4a訽ËóvÂôI‡ÂŽN2Æ\´â{}2…”·#tÍÆ—N4˜r¤oY™ý$;?ùG•ú(R½qoH·Ü2áU%—Qf<æ™lGÇ—h3þ¹OR.½uÇ#@f˜I0Ž»3ø'U™Xµt¯†J ¹>æÐS: H C(aKz )Åèù}vWê¼ZÆæ•dðò¨ß«Ü_‡¿:âf"s×)öS¦ôí2uÁ6ÏÙèD±÷HB.GÄÀ¸°‹²ò ¯ÝÁiÿg©¨‚Cô9kÇPDF ÓŸK‹È–ÿ@•Þ£é²/8ì?¨ž{ÿÁ¿ÿØ'0Ž ~4!erð·<î1ü\\Üñã—á¼ÄÚÚÈê=ÛG‚¨"1Š1Ò´±~zXÆÆ§s]¬u ¤µ›ž$ÚA6ã’i‚¼ž‡e½Ý ³“:ü!ëÛ`¬;´hFï> i”®1ÑÔõ· ‰{ÁICPÙ;÷óuœ!³;…%TÈjÚPânZèíð\ôS¾ÕÜU~#‰=Øùq)„3ÃÝA%L–úŸÝ“z˰Âq޼U>:øýzAÐcÇýëä ±z“ÃL¤$ íÛæ¥==/~H‹m-ýI^˜†ÑïR…HøŸ×:ÌìÃ4—Áé¬lŠ“þy£âÙ”«ê?E;^ì5¸ qB bŠ:°„X-5Žvv ¦§t˜33É«ÂÚ—øLPQ²zù>— ¥éŒ1%Š‘„Ã7¸™HÍDŽÇ[z8Œ¶Ò¨˜©ÍC‡^–ÚAI«]Ò Éùšóöµ®$Kg(k:Ä~Çeø$ýÈ…JPBRžr"é=(‚æˆJ¯´äÄlvR3µˆè›dÅùMwPýØø)ñ%E¶¿eÃÛ´¼¬/Fßç·ÝR_ØWw²Ú€~|&…àxÆÕz±'È$ée@Í×@ñ4Þt_5sòXûµ`»œÛ2ì˜'x'‰q’)¹ç¿mS´Qûȧ¿“Må×r—j‹(>8MHY³#S 5’‰øJ£ËàÑ.ßÑH4«8¾]Bޤ9ùUD*`.Ib:¥ðtú¿D«î(×Ïrúo¢* t)¹Êl)1ªÒm’:¡%—uÅ œE÷L¥Z4äBë“Ûá÷‚¹½ò<ü1HdL|RÇWù¡,>ólÏsl#h±Ÿ]%;öeõþµ}Öá‘ åÈ&DTÿkâq`2¿°dWΪQ'ÚqiUÞ ¡ÜRëÃu~ºB)WÍÄCŠ€Ö\-JˆŸ ÑQÖþR>«:ÈÍ!ÉÈïíÚH$¼ŸL§:ýy^®­T׉ܥržÈBÄ|q3•CCˆnEBZ€ðögRmî#¡†Ö :ýЫϰâ…q>îÑ®j›Ã«d'è#q^e^Â;ó³ <ŠøIžQ”Ö‘Q4ñpåÕg¡œ… =E²?M2_¸ÑfAÚŒy@]s`Ò)~´ÜÆiŸÑ®Ë +6Xl˜•(çÛYå  ü0jµñë¸3*@¯Á:…3/ZÎPHJXê@º½p\(ÎqP€n…Ù0TFMµÒ7ö(,Û‰èÂ3Pk®? ’‹çœ¨Ü؇-,cvÝž=ؘü(˜™EŒÝÙjè32ÅF^P Kfk,-v2­Ùýíàë:Ï eSïu¯úɯÅaa-ï•ßœ ¦tì&úaϱÒõ\CÛ«r¢ñCìÊQA˜â¢ª‰* ÷Ъ55‘Îb4ç€a ÒÄZR>3QP‹¹‰v‹º¬~)Ü»ªÇŸpê·º±²¼ÞŠŸCr)È9õ23È|H¤åp@#\^ˈ_*Wa òߤÕÞ‡7hæÌƒMW‰fúˆ)šÒ®¡ ¸†òÚ Åûƒ Ù,s¢ƒ©ŒkBj¼±{¡›ð $#ïERA‚E‚$ªù™â¯È• ·ùÑ’pá†L…Œ>tɢ޿\É(„ú%îIðóŸðæ‰GŸÝÀ.øE'ê jÖ¹œcÿxۺݜOÖ¾wQ‹R•ö¨ÿ^2X…˜²ù_,ö‰–þlè ›Fɧ~KXÓé«g ¤}íeS3 -^dæßÿ½¸‡†ÆR;øóÍÒ +UÜ]]úòX£‡¦nÀtùBóþWüw8ÝTÈoû >Ý/)–$± =Gö¯r ‘ª1¸Î‰žžPq°ÖZ™ŠÚÜêÂ3tž¯½Á°©r‚ Ü«Ž÷Jåí…0ÉÿNNpb¾T ű®ˆ;óª’Ôè+êWÊ·P$¾h>Í$³ÀN mHEÆD$‹¾ øûŽ)Âx%’‘s¦N‡øËudÝþ.2ŠËÌÛöèª:q”‚ã %eæeY¢òÆÅƒ‘ʬâ¹âš`Ö*²Qõf¬a„éÄM B4ŠMƒŒèÂ5„Ð Õ HHcL4òøRP Êeñ¾(hÀÜ Êá!¥^7Ч„tÎã’9R¯}ÖN9A—&êÂØŽ´„$v< 3ƒB)&Nqm©´B>âÿ0# [ÔN¾²¸ëOÿ>‚¹¤•âœâ_=ö~à~Í0óP÷yžwÎT42¤ÿI¦Àa!$Ì à#-½7M3áÂ[öð¦O$\|#»¼Kèqùö!É qv>ýŸú×q5º¦súèB8]q»ÒËe@\"l·ÑÀ0x¬)4r@ ÅfEÏ¥n6-Ljv¢¼³  L6çe°IA½Â¹Km9g[iæŠÔp:ä¯"jëìùø_eq¨ï<#]t~–§X/úÃ{u©»üK~ñ•9&ËÔÉ»€.G´Ò›»E¥üè@ùB膟}•”“.޳ÉýÐï"T¢2`°Ç½Xßó^0.臰‚ÒõÊdõÍ'¡—`M@z-IôH†ˆÁSü Èo²ìûwd周$:nB[ú-’uGañG-Û–©«#ÜWlÎÊ|+±0Ò)à½w.† ¦3ì±Ö ¯Œáºä~,˜#캴̎›õL¾V xô”Ï ‰/¸+3z`ó“ã¨@ñú‰je˜Aí}¹–£@‡Éӯ¾Fý÷!î,Ö?ωPŸÃѵd.T SÙí¢÷ñê_e>×À9—jfoµGS‹yV7[ÖÖÍ‘´^FFɦė€+×ã‡ë­š& ØžÁ:µ©±±™WÊ~«N3éão1å¡ÓERMãN¬ð&ˆ8B–ͺ C"ÈîþlªÓ²Û>Ñ2²h¾µA`ˆY·Oé¹eÍ…¶UŽñÕ÷Š™ BСx !Þ골òâJýª„:¡¿òCeO6ªÓ[/)Îöë]Žr~AFö‹IZ­`jUs£ H³Aä õ¥)U¬`Žx5é#òSÕMÛÃÞ$_g –t öIãkWÇ Vû'4[¤â–ÿ g} áU` à^ÿ1@ƒáÅX6äg!…WX-µL‚p­UÐyŽœÙýÞ±Þ,’ÇÿEÂçë’´SqoEÜùÞ_1sÖ¡²yÏ‘[˜=ïRIioÙÌ¢gŠÏxN J%r‘üØÄW˜«1eòçךϥ6Ikw]Ú]Ë@1B›`gÝ0ýô@&6#Ãøˆ§Æzsè‘QGd=VSõV!Ùü(7ÆzÎ'Ä‘ûG›ÌOÚÁ¹ëvÒl=·¢CÜy)w¦Ôë3ûAÞƒbèUŒ³k7QM 2'tUÖB6¹£•!´#§E8ÚáB÷ÙµV /Ù¡Ü[¾z6tŠ wû‰És|ßF|‡uh¬¯y•`F£hõ—ß¶rÓì\ÄCRÔh×{’Ó5n¾E8Ø3Å ¡½[›îஞù6Gù8 JÏŒq6·Dz>ÐÔS9o³ ‰m••õ÷À)Oõoí•OŽƒz¨Eƒª×LKÙÙ4gùõf—9}l±:Y¹Yy7{Î}ω §!ìR¢Ø'¤‡œ1xGÅ¿Ô+ÐCÈéãYáóû\“߈¦- @5ö/€p¸»¤"dýsåŒ!4 'â9æšÛ®z$ã@ñRTÜøýzH{šÍõþ†w>óêƒ v#fìÅ)ößI낞à2߈(¨n¦Æ0úè=!A^¶ è‰è¦qëh¥¬ûq4évt®Ømu(£²Še&½’hVûc¶ÒVì þ5ýx$ ‹•Ì)]Bà×HpÌF÷v¦ž_¾„V¯¤Æ¾[3›rÓ *]s\§­¯U/Í~tÀ(F%ŒÑý”—WÉÛ*þ·èþ/}m[8¥ç1»Ã /Éðfïzdj®Q;WîÄyŸe1‘|úyŃOÇšÄ:åSy†Uz ïmj—îó¬\"“ Gâ®#;C‚@ø¿la‡Å´dÓãB ‰+€õá;4™Á˜åAî5â£y“Þ!®|¨kkõ "r)Ö3óÝ/M3å÷R”¢3Ò8ÜPa—¿ÿc¼‹ÏFàÊÜÕéÅ"Ž*fë§ìH®eÒÉç$Ò(Gðt<•;‚ÑæÕð<ë}~ÔtRèfegNé¿RUʪ¾‰,mÿƒ„zP)Ösb˜ÃpbС8ë)å•l|øÑ4½ŠQ™“ ˜$‚ÑlÕÝ«_ž š‚‡ÐäA˜‚ nŒL‘M€ôóÝÂd£€Þ+G»~_Q’T ë°Ómd¯éy5&—† ]pwIã È`³`Õë8Zú"¾¶˜ÛÁoMÆ —|Gš!M£¬sšNr„xÉ[xïís'dÚÐâ:?ôÅy­i~î5O‰qpHE~VûGÍFþ+ÉAìÔö•VíJÓëÝ÷ 7U:\–à'Zâù„ä&š`|^Ñœ6ó¡X,£¼ èv G6¶†¿á~èäψã)=´TîUÿcƒyÛ‹€ÆÀR¨9ƒLD äT Š jWìæ%M½(I²Å(kí¸¥ºC/1‹µØn…5<èsÁ¡²¬-銮»/]îgb~HäaËå`Ykö–qýV`tzÜÙC‚Žä·—Ò¡‹w¨‹Ø¢‹p‡8&×þ0jC4aËrMf7 ÐcÀðŸÚ=«¥\EÅyÈJX†Ã4›\N”” ¥•ÂNlvr ˜æÍ›UVtùPbcÃëõê(úË*ü $ý“W%‚[ßW|géeZy®-÷ÿ®Ç´ û±Ϲ5טo_µøÔ'à¬̷ëBD‰œê­µÖ29/—•í@½NâÎIlI|ẖ#^Dm€¸5zÒ”™Ùüv4=îf—»LíyãÍŸàã2†¬9· Š8‡Ò±Tÿa_›R‰L‰ü/­(Õ~HÃþ)…í‘#XU^Œ¨.}Æ Ÿì…ͽ\› «5€WþõÁk‚>n ¡K—<á‡rC7Ê ¨q=ËôTÕZcÀã®6®l`:àô&îP)"÷X ŒZDDù»LÆ{9^È »\#úõ¢sÅ/<[¤£DÜ—×…½=aÔ"ONÑoAŸ!Ž\”êM/í)»Èô.d´ö+_Çô·ž\¢òÉ­¡¥–@‰>ãf:½ §—§ÆÀUÚ«-«Mì›p ‘–L×)¥Û9𕵠¨é­2A‘YQ£»’Ø™‰Ž'䧯ïÍc<™HˆT߸>ik•¦}œáH;>]‚oVG¡„ŠˆœT6Bíÿc2ƒÃ†9ÔqVÂ`)Kz‘rDĮλ쀔AMIg?°Y²þºÌøEÖ ‹+e2]·®wS×rPû–YÆ”ûM\ M=ó´š&2¦%J»ù¾dIÖj_"»„ý8óóGòÆ2/E¶So*P†hTßXyævÀ#~“Ó?WRfî+ú_2ng^0—Ä8¾ó .‹]ÎNä}#FCQêÆRHU¿o‚ ¡O· Ðá,†þD³ë½ptÞUæ” šlpäNŸŠŽ¿Xts XÂÈñÝVŽÉ¡ÄÛ4zX"?ª‡TÖÐ5¡^9¥\Ó–ËF9lö„SÖòp'æ#0£cÛ.¼Å>3²"ýzv%ª8øûë«ÖÜÌ‹‰.ÊÖ×MR—•QÇO¬r¼ˆFr —Eü Ð j}٩Μj•…JœÇCÿ@dÃí¾ Ÿ€22Ç:VÎֽȭȓŸ©¾ÁAõØ|ÀmPäyŸñ ­‘½³×‹$:¡Gø³z®–)¬›ºTÅŸ±ÁaÈ8"‰ÿ8£Ô°¸Þ%ά;Åxǵ{ Я;`ú>ÉÉ b”¡A^æ÷çÓ!ô Æ­õž8©àÝM\eiÛ½%¦]¸á_¹ñJô[çxv³»Ÿ·£žV”äRŒ9¥ÛÎpdo÷ÒñΠ‡*h™öT±Uêå ¿ÝPoW`1 w5e'¢'Ý#—âÔš$¯þ¬UJ,›%h} º‘Å1nÒš¾Ç.rcõ&EVê/=~ïrè9®ô€EGÆœâp¼íXñlSf’0V·“cŒ¼2„ºw©Ö5ô´agrß¼DLøÃ³‚Ùý°AÞ]­sô¿›ÙlÔ1êY)É£ŸÈÄugíàËýÖK³Ï[…í¿?ж:[•Ó—nM÷) JEžØ– "ðZlV1´QE AfcÝ"_P‘.Á±á1ùæé²0:#J#7å¬b6žËÎ5\˜øå'éµ<0r“ëÈæ3_ÑëYGÞØÓùîÜ !U#¹E[瑇\ëçg¡ç°˜(©šÕXwèÉÎËIhW£¢ÊËH©¦t@ª\ÛYÖ>„ #‰ÓéÅòÁÊa¹ƒlöi¥e ³l›'º€û-¼®åÖç¶4¦08O]~m^ãzèø^r!/L ”>.˜+?Ž%.Äó0gÕ8}©6÷ÔòofuƒÅ|˜Èíª_ªœNÓkÇTüóBŒDk÷Ýo>:¹äòÐ{X‰~û|^'mÓ7-y&µõ/¡"Å碥XG¤kx$˜Üâ±yëRJ¿æçýÀˆiÄñò—ÆãH XG$>~¨\,)¦*Ÿ&Á£û”T‹j©ø-ÌñµBÒ>4в-»PÁB þ×o¤â—5>ón®‘î«#™©5ÒICtñž»èjÜd¤cg]tª#ô°ãú"Ål¡z¸Rd£†½ævol½_Ù$Oi¼Ó‚Þ¨c…8Hq½GDŸÈÜ)Ç¢ßb:ÃJ©Ìeb¦? :ž òU7´Nq ˜ µÇ“fEÉ¢úq·ºì½£4)9akÕ§ö«¥­¾Š¶ÿ¼ ÇŽ)©T:¢Ð©š¨wŽ ~Hþ§¼"Ú‰Pp=Ma|·×ÎE –¬ÖáÑ}÷%þ»ºÝv©T'[Úl ÑåVû° ¶„—»òŠ’ç[’QTR¾Ý\¨ ‹Ÿt<_Æ Ó7AT÷Ò¦#œiªl¿¨«Ê!ÕjÃ›çËûa<×ÿfe[šâbM:¦’ºWˆ×ôÓŽ1²&¯Úk4Apdɇ>"ûª˜ñ yâtÒ_Þñº,àq¤Ž7,q˜¤›^Ð=æ>N~Ÿ£ÍWÜ|cl¦äÒÞï ð¯\i¨ã>°¸üYlò¦½LÈÿ LÔÞâÜòkx¹8õ¤—ª¸—Ñ[&?ìËxé+ˆÈ#DƒbÛŸ#«ÖÚ•‡iŸÓÞvµã‰9ƒÐÐÙ) «Ä0Ú©‚o—T·a’j„¼‚ dðO¹Ã .ñî›ì…<òÔ±ìµ)p§ª!lØcí¡ôŽ;¼[™ºÀj9;Sý¯A([º«'ó^C G4Xxi/½‹7‰EžLêåN*¹%ȈÄooÁú‚dɨ…®O­R!œ–¼‘R1++¼_(²•o©ù¥ñÈ"0Ž/ÀŽªìÁ©ÀΆn‹?( †z¤"ÁL@×_£te΄·KHÞÉÉ»õ*W;?uºví¾Æ{Þ¸=72N¨·!^×&ˆ‹¤NGFñÔ Y¡”òr*Åþ’´œ6W&ª?Oò@óóL³KB9ìÇYP¯“'+ ÃA—>FY6Àëô¡<>\Gc§ýÀy˜4©ëI­Šq¬Z¼Õ÷*•Uõ¸°Ç`Øù>Iâ%K¸)äØë“ í9€½À‹6¸‘È#+0TÅàœÅà*sádèÍíE“žÍt¨‹M¯›i%ý6y½ «,À<.÷”1FÍÎÔÖp?GI"¨¾¥Tp¶ß”°ežô«Â˜É1*ªð¼¬’cÒŽÌÖü=îOïá<&R‰ö7ëÀÿm—Fþªdä÷ÿF57‚×±;n±tÿ;BͿ㈢ ~àJe¬0‡Œ+-ø&fî¼Õ-î—!+·Û3?2~wT7öp –甚×ÐŒ!T7êb½£Œ'›²j÷>ûÏZµ‚ý·™~z]&"øÀ3“±PI+Âʦ hdìÆ/ƒÿ w¶*†¾)Z 4ΰ_—‡Õ‡î°Ô6›¯ï5üË!7›„á­URí’W‰kvpIò 1ÀR”M‰7ø÷6Ò5ç\Ø7>â^ËÕ%û‘ðÙâܯö¨«€ü¾Ã¬=Ï ôwL\meÐé0`àE†„VÕtÚµ ø™Æ¹ ðé,Ÿ5"Ø5Ò.e•ü<@€ç,L¬FÍB]·r~Ô0ð€,Jxyd…Ï%‚‰KÔÏæ&=ŠÊEå.àz ¾²r(\žv2q*öÁTZ¢p\¼:`gõ¤áòæâ2"¢¬7Šæë|¼<1eºI¹olΞ7Å!RÄö阺°Óù^`.ý² Ýc](§¸² ‘Qñß忣¼D„ìì鯤0î=ÑÆUtév¡6KK{„8} ¥Qu”Ä ‡ï"™è NÖ}R‚ìå<î[¡°Î&æö;/ƒ ¼G”ŸY=*¥wFÜ`\ÈRÞÂ+q'IP¬vÂqEkN´­©<°ñf ¤«kü"º}¬{{)—Ï|¼¬âr}Ue˜V).ü ¦eZÜ{­ÎkéV톂2ÔùËY\’¥þšˆ*—·ÓŒ˜¾ÙÊRa#ˆ¬Y/ìáÞ¿3̲v$À!x†Ö´EY>_Û«ª¯[§µ$5”^ìBOÑ„ )°•ÙEáçȶ ƒTˆëx½yÏ'FM¤»F{ŠZ%Ñýନ7—eñŽ/Ð"Û‡ÿpènËusƒî—eLhÄ›œ75ñž¢Ã¦úÍ=áóל½º@ÄŠ9Z «2ìo#0ÿ–¸%Ìz-z¬G¤H@€LRX *°_>rdw£<\¼ðR˜O/¿mH¦Šlæ46T²?(vþ5Ö@ŸùÖÍdtç-€:–¬–2ÝQiæ,„ûkßS¦Ò .MŠ ³bì¡5ƒ­o­†ÄËżyW‡+žÑ›s3œ÷íYÒÂpsôºÖE2IƒVçÝà«(ÕuE„~<@µ8ÆÕöã¶0ØæÏX¿“ÿV§Iá,iñå ”%1@Ž¿Qx`!DÞ=Ó,ó´„Ÿ7ÄW¿eR9Èé*Wèå– "udÃBº+äw@Ä’t Qw‰ïmÑÖ³)'§6{é²'8²éçz¿Ž¥!0-‹µLZYÈœÐØ™7¹ãØXˆc£8DH¡ÑŒY0iÜ £¿N‚Èë†ô×SÂ߇žr1Óe0ÏÍïÐÖ".èñR3ÚUDsz ×Ž"½¦ø+ßsœh˜èÛb átÄZ:+>Ž(Þó w;GôøPìÇ·¾a®…2í(4!Å~:ÞÓsâ¾ ×z6uÄ" D¿µOŸÑ÷]•$Çl~%‚—‰¯¸/SŠ94f×WŽ|:DÄœ‰ÃX`¶õ={uÇŠ• n„D\æô&W“ùOKDÁÙ'û»£R†½x‰3†Ý‘.0J·¦Ãë*—þúæšÎ•ÎÁýJÍrlO²þA,`\.9,˜ÐÜ‘Z#)WbÂ''hÑ‚¡úñSWñqãzþ†0äÅ0 ´;yÙÀÆ ÷¹ÄG$r‚£½ä®jްĨŠâ²43°ÈmúÀ^'À&,Ä[ Ú¼*p'” üä`TžÍásj&Òä;%QGE…mû@ÖsÚ6¾¶ê壳œ YíôCœþ‚½Û¬LvzY¥õ lg€¿¦¹1u!Ðÿo@¿:¥4Ô<È‹ÙÔM%\=FºEÐí5ùóÿ‡WˆÙÍ$éDh*rš>MQµ¨DÑ ÂÎ@ܳØN{ÿœ O˘åsƒ—º= •$†ÌxR½N•CGVbðHa4lüä’Z#âZhl0ZËøb­ Í0¶<¿NÒ΃Ro: !½3Ð…õ¾;öÙ5OÎÝï ª|=åyÝÚ„¶ôU¹-^ d“ôßžÚsê­ £VÇÖ ¹{8ÙŠæ<ö©Lèˆìô¬ÜOLt'qF ==ãëÖº™}å&⛣A›nqUõù/öb‡Ð†äÚws™ALuÓ˜–è›þa súÜ$;+%¾t´o)HIÝ)ÉÈÆ~´ÒçÐ*5h—3[þ‰¬#êKtºÆ¸/÷èãÛ¦HKöé¶ûnP‘ø#¥ ¿øwx¥_´ àžaˆßxQüYì« £cášþ¤Õ0¹²h Ôhp‘iÇÞnË ÷Ó+q62L¨¢BKòÈp›÷ÏŒ13úÌ'xÁöùbÈDê_[jÝ8ê íúȽq¡JÎÂhÓpÂKZrÍñàë×"Ü®¬»‹žs¥/¨ê»¤h–‚©G>×Qv¹pE':úmƒ–€N±d]ö;]™ xùý„„ ¨½V¥qŠ8þü1'x?K£š¼îݺ ,;ªÃùw¨AyÝñre)sÏ £¢mäëªÚþ rÕKÓdevÄ”éÍ6ºdÍ@ŒÉµ¥—Z÷ªQ–ó’ø€9€kÔX5’[_åŒtTÿfëß%v.]¥X¢Ë¹-9q.|úo *X7³®çŒù«“QÅ#Ê c½ŠÁÁçºùRj”ÃMÌ…Ì%eBðɉŒe–€À0·ŒÑnÜ*çRã±@˜q,yGÝ’\$S‚šsѺÄ¿ëÛ-UƒO&HÏ‹XÝ’.ReL·Ó_ï¬ï#Ý“tˆ»9Á•_°pÊ…Ž À¾ä³}ê ÌUd•ÿQwhK;YÍr<ÔœXGèñåˆq™FÉçz•ô(:`ú ™_•ieéM^‹³Ôù êÒZ§ÛÛ’#~i$þê©¿cýW’¹BP^6;¾û Q¸<£qT†¶0ï}­ã¹›Tñ 5`ÚÙ–V÷§øò‘ÒKž_ÓÃ] Hˆ»ÕÃgˆà=Й€¶ÝÕO$7òû{³ò xYÝøÍ¥ÈÎÍü¡«"yC{èE08ê¤D4dôèðZºøô¥O+ÕG ü á#Îk}Kf>ÕŽÍYB×BíS§r¢ ÄúC0Çãª+ŽÜΈ×V‹Ý—ýÌ#9É!•<ޫîGà‚Õ&Õ K¬ëfÛ­[êƒmA©˜@íZâî݈Øó܈% q1ï¬a’>:Í>zœá謞g×€qRÀE“2À3£$ >RÎöÏNà>YI…<ë‡4S+™v¢‚;²ãxÃRÔED½Ö§Ç™©E·Vwç@¸Þ£°…NR®IjÌæ_<Ç {‹%yd…Sd±$NWíO˜Ê_p¤³*¿²”v|¢=ÊIœãökœï(ö{/Äûƒm1Æ(êä°(ˆ¢1–ÚóŽÝÞ\A*OW•$zŠéÐõ¦`È) ðÀÇy ªðñÅ{ÌÁ²ÃŽ•³Œ¤ªR†]¬_ 4Å×äDµÈôúp­C"¡§—Ø(ç‚Xeðöè-³ç?„å¤ò„Îh’hB”¶…mjBÏÛ}ÛŽ,ª!‰ŒHŸJoîk+ÃlM€:4ç»…I“Qõ (Ý´˜{N—¶õ";UÛq ê9+nüE[q”tØFB Óü;À¦ WFk«DŠÃÐ^)GuVâ­Cà þ«7Ä$þ)ob“(y«ÔôýYþ’`èÒòµ¹­ZlŸˆóÁĉÉ"‘­êÏú€fF¯„ ůÆ-=ͨ²³GÉfà X µÄÖcÝ4¾i¥jÿ&6_¦¸É d‰ž¬sÖŠ²Ü}),Vú HxoÐ=æ½'+°ÁS ¹ &‚ÇyF˧äÝ1_K \$Ø)š¦&…ÛQºB6ÂámDë‚a'[)N™› p=¼†Ë‰Ñ@»ë”WY»Ë…ưüâáìþXM%ËÚ9½7%çø£ÈH&üeóâÒÖŒ¸þN9· ÏË/ÉEƒg ¥—#ú†µŒ÷mºØøF©Lúá„®ÑÂÀÈ1ðÌ-„zê†î®KD¬YÁŠ&ŠÊýT˜n× À]þ秃ýÁNøšð]Ÿžˆ[yÍíÅÀo¨Øþ”ìdsΙ{©n¹-x$Âu]CTSMY­ŠÞÆ• 4’òßüTaµi’ ÷4ŹšY‹çpZÚTk×{=Yå²"s¸©è+“PÆÛA½XXÝ8ãJ ºà†3þ_5 })<ÇÈ`êzK/зã 8¯^âÚ*¯v†#Ú†)Ÿ³ Öot闿ܴ€ho׆rÒ(“S#í"º“øüÀI˜Å°àèK~;òÏ{ynRYtGiHÇÀúxZÎaS‘@—ò`У֞‚fcÆ&Ô&îi‚R±Ó@ÑÒ-tJK<Ç©2¬9OàÙXÄòÏþዬ ñÁkF oq–<'p3m§šCþ¢õ'…øFkú)ûè¿¿B¾õ{ê/»·½Çï|{Ñ|ïpûïŸï~Qûég¿A>ûý慨‘ûôgûô﫾ô7¾€{èo½'À7}ü?NýßM¥gáõîïÔoáúˆ»ëö÷Öß~±{¿RÿCí_½Eï¦W}]»ÖÀê”zg±·”%s@UÈi>’,Œ¤%m‰ÚA/÷S é\bø0§oˆJûWRÌ&†g«ò)2~L¼\º7jدþ2 R˜Q‘¼¤qo²wËy;k_6¬\«“IF5W*íïì/wT;w @ÿ`xWÃ2ÁÌ|2YɾÖcT ¢bà÷\]?ÛLO«Ì(n*{PqBõ‘!£®{Æ&‡)yÒ>>Ž fŒ…v¬õ^r5åô}þwáÛŸ3–f‘KW %-2œJ ‰“Ť…òïÒNhëàâêk …ܯnp¶Ü¥•UÃ'·l(Ýu*6Lj7•W)ŽÜvÄû¬Û7ðÉC4õ?{ Í.™&wÒ¹©>?š›ŽZ?ýЭ•Ö~J§ÄÉÛwMG¯®}®pÐ?rT2ó¶ü)oiݵTß[öŽ™×Í…VG1æj—»k:#ö i™-¡f>›ds³Nð[{G*d\XFOk›,Ý™¦JbZ)s\0Ü£üÉwà¼Æ¯õRNÕË=uk™í¶Ó3Z. `fJ2·žDü†)îŒ p¸ÙM‰zå¡ÄÔûã®þ‹V³Vç2\T¢¢çh1 C«Š*Œý¤T×!lo¾<”÷_…“Œ˜ T²'Î_BKÛ]øMøž2l)ç°ÁãB2[Š`äxìNÇçEØFÇÝÈš‡•Õ ãyr'åSvÔtPµ÷˜6CYT— Pð (áïé.øbZ`d'–²™ÏLm€eH*AG,®}ŽZw,êöU2M ÖûO…§0HDøUˆA³†1§D€£qÿ %W®jH²Â¥Zç#LŽÈ9;I°þ“M Ci*Ü^ÿâ#”y©<%y×òäô’híã^} ¨ðlDJ§È²3öÖšÄÈâI'CœQ®½¢N“¿Þ—㾑èÌÒ¾—³Ñùeád,1¾ïõÒE{cYW´z]B*P$¤/TåŸa49'úO€2òÐ ½Æm!±oTvà¶¢ß&Ó y*‡Ê–݈ã Åþ’£êy‘//‰lÓM8´F¤2ØëÂìüº\™³9eªÝêpxÁ Áëà ïò/)¢ÙÏmrnŸW<-© äñMïÌ82 ÜÄü±ˆ«W£ºÒT¼••1Ï]ÿwD•£¼ã=Ë=”±¸ö>9·LŸ”R»ÂÔaŒír`Ãè ªÐ¦^~úSgE¯pÝNÓRM#A€sñp—A3¡Ø–*ðÖHnæÊô‘ !x4@½LU#F ord@¬U÷Ï¿ÆØ›œfö øú8™zá–n’ÿLþÅÖC·˜aÆt? œíæÛ./®‰LšÑ;/à`<¢þÕ K¼ìNÂ'jѱ{ê=ç¸Î«‚€a9ûÑ 9´¦J–Þ*áÏ=§›"ŽdÍì"¼Ã6—%nÍqß—?©°°+ú7¢O┹+b¢ Ž"‹÷ÅÇ$ï- Ús{Ð2ç4y¶²Û‚º^L”©ttAwƆ]-ŒÃÕê †·aïh­i¢Tïkï¥Äö*;ÿV¨ÄÖ±*(Ña<;¢b'â¼®Tßî-Ô á•ÍÔpMúI¬†‰©WMažf Ü»Í\^­»UXU›1g×Ôæ1šÞÈ}úK[  ’R„Èyywp ƒ1cëg»‚¸¾sŸš²ùбY¾*Ú`¦µïüÌ‘hö‡O…ªã³"Uµ‹ÂºcÑJ#DdÄÉ>ìÇ’ô£ëŒÃº¦ˆ %³#õ Qžûy#P0oZë?½ÒS™ùƒíÀÀÊÀ£[‹¶–&w{Ù™PãEÏ RÿjW@³†H¡@ÈøªŒÉoû~gd—Ìì²›CZÊ‘›.EÎC¥1‚×ýœ’%DÊ"êÔ'Xkß‚÷|¹;¥b~$ÇnîpT[åy¡ÜiÞ­Ðp|Fû¥wLX8ÞØÿI9R`pH«H´^ˆu:þ'² »oöõÀ•ü'H2<Å´V8i‰D”.ùÝVŽ’T„Ý$b–A‰^”¤<†µ¨|µÅÓŒ„ÜÀ?. Å³Ÿòh;ÐÞòj£ƒh‰Žô’Yéa”%inó·­Ì¶ì¼‡ CvIÞ@v©ìŸž6‘ÝAˆò‡Ækh¥ô޲ç1¸òiƒSgÈt ãhkÂ9š«bP« í™üiYü²8Êtìâ[’½¿Nª#¡e?jñ67pôêatõ{f$få¶õ×Ü–ðCïÎÇqÐÇÃê'œà䥕G)ˆhˆ‘Ñ:h? AÀYqÕ=)ÈÆ¸øˆö3© •ˆÍTeÁ´e…±D© (Frd1W@ ë–YÜXþ°÷÷­ú.£uáÝX±5$ÊÑ ®O ‰Eor=u‚¥ÄWaÕúý3.#îÍ|-±!Ô¸‘vC“óº;!rT>Ö¨Ö9è®ð+aK­ÐÕ̼B…æž$fÓÚä0Ï›ÔvzùeZ¡8GâFO,eÅÐÔ%²\Ó(9¹F+ª±k: z®˜^/”£Æ˜“00¬öþ6eÄ9Ïžãy¬Jªe¸âÜdXý!O*ã†#ì÷ôÿfY5Us)õ&|šê©LÁ4¤L~¿aO/ƒ¢•n¶Q?Bh Ù@èTã5•¹¤=õÍÙÎk(ïùI[}z\U56³ŸªóT5 ±ó¬Šøþ‚ÖqBGÚñü)«åG,L°ÈA¶)e’¶wI§€}tOqŒNòL«·¡rK=sÈIE€Ò¥Z¤cÆEÚ×àœÿueC¤“4q™^£­Ë·'&Ñ–¶ç¨Kⓜ0é4³“~AÈ¿"ʉ!ça6Þ‹,8Ì Õ>¾i‰Æ,-d¡Ó£ÏcY7Þ¾f³·+¢ ö60·J4“2òNú¾Ó.¯¬Opd¹O ûK¨–9ÊŠŽçö¬ôr´¤—ë 1÷Å0,ÊßÌÖV¼¯LÈ‘)$WðY/@ kn'L37wâ‡Ú£Û+ˆoô‘²{"/CEꨊCþÑ“òª¼™>£b?¬2×7ñR9«ëvoG †¢b ÔSTt´÷ÌfÕnån} ¯àùfJ¹Ç4\V7ªÄD† ÙÞËá€Ê NU¢JýMßÔ\>obЙ nW@_/2RÜ{4ÕDqD|ÒêäqRz³Qwîy¤ö{âÔ@€™Ÿã5«Rú€ŽuI`À± ‚¬ìÄ…‡ó´ÿo"3Dwù[A[¼â_ŸÍG%v±pC®FÓ61¹¡<©ÍŸª}Ir\ûê6|Þ:±€/LÉ<1±|i`ÉmFÒJ00ËØ )µ‰ã’£÷Ÿ5rÛ~<."‘ÞCÁìh_,®Œañó_W§k`œ-n¨Súè ŸM²¤¦õÀ¨hÑ Ê˜¿ÏSZ~ëM }o&¸HHŒPi)"QƒŒo¢™r§…¶òi¦Çå ‡y‚mV’%«>³zGùü£Ó¡d˜]<×1ŠnX¦þs)½b;28„B?ÌK£ŒgÞ°c)é°´d‹LÒ/ò囥ÿ:ý—è£WêÜéÓwÂÓ•Hó2¨UËk]“*ˆËƒYö_> •ÏÓûY¦ƒ›;F±GUÑU–5%³}"¾8P\,¼hüŠ{{›WóJüz0œLÖ´F3¤’‹Oõç“#‰ŠEqúÔàƒ1W´B}*l?ñ* ß½‘×Ρù¿!m„YSMYùl’€Îl ]Ô’ˆ(_YŒ—Föj=9‰Ò jÉQü<œ‰$Ô3eଇ…‚óá5à'P7+ÙSWó hš¶O6ÁJ•sc­(Þ,d>Åz™4½Ló*–m¿¯Üûå\ òĬIY2{ᱤóŽ$¤¾q·´©àÐET}Žg'R"ð⨵ a«¯G R™8k?§àòûc¸©]Y]‹bíSpG„.ÂÞü(D³Gfn‚³ã™*Dv ð¡ÀiÄGt®Ô™ÑÛ„jäÓd ‡Ÿ†ö˜¥#<ÄÈŽÛ\Õ[”¸§kY1Ì[ߨqÙV#ì áê¤-,˜îÅ„‘hú³&iž~´¤±XùƦ˜î+²\ÜeE¦èåý6ëØÿ¥ËÁ¸ ïQÿBä$gùù˜Ýº=ÜŠ WÔ\Áq9„Ö JZ¶kÅb·­¦1Z6ú oü!ÔÆð$7K[j%,ã'´¦§ãÎfÙt]¨$SˆØE„Ÿ` º*™ÙŘÀ ØŽ07Êòz2éøt˜empFä²Ä©fÑf® ê_PvÚ,b«J¹ƒ•ͧa‘\“íÁ€"Õg§zÔÆ1ƒT^yÑUJJ½²•¬ÍîèŸ@s~U4 ¦ýb`ÅSýáö÷m\£Œâøöÿ¾MŸ‚W%Ý>ŠD¨âŸÛp.•ð.® $*ÍØ @ì®Üâ·Ïò€Z¶áív[ˆ‹ÉÉÅÛe´ZJLdà lTÔu–ÉH’­…­æ‰!œ{h&M·—=ýt/ÍÕÅgída|°(³ïuÊWZ4å± Ò©ÆBN ­!“ådä!‚h3”i›MÜÛ|ð5‰‹õàÑIJsPùƒª(´8`̺2ÊÌ×éjõ®UÇR˜'Îc:7ù@ˆðnM ÏÅFìžÅÌ>¬]Äí£_­Ô.êÒJˆ6B¦ò};/Œ-KïÒKZ@z&ø\¿%B:Ê—Ÿ›ktÿ 1€ï°ÇDÿ¿’2ýˆWÛ!gê…z+³Ïï×Ö®éH?-\Óa¡ùë@£V±ÙÈ㹤"3ˆ-Aøëe8¹&rj$Å& eBøº<ÍȲñSåG³Í­´Š/5¡dܤß^Ä.Œ ì6¨Œ4¢Ë’[,²Ô×gç‚;$¶žtOÂ\/Èól/.n•×l9}ÊIB¯ÚëA9QºãW™<ÙYÚŽJÈÎo £!¾•¸Ì46W¢”ÁR£”˜Â“¢]\Sí{ÀMÒå“{t÷½aWµ/”÷Âaš.D/ÿ ñlB_͇bI–d©¸Ä š‡âZ8«Yè=Ç¢¦ïB‘¦èâ¼ñ“ Äð”ÁS661@hƒ»Ä/Œk’Îyç òÍ%ròȽÁ楦(¯ï`–ŽÅäÃÞwEó"z§îZÈ|Æ$æˆ:½¼R¬CÊ©uwÕÂ6ÅÂO÷ úþÕ2³ží×[Hóꊚ´Ø£@%¹\h!8+œwyéÕ‘A¬Ñ{sÿ‚ô-ÓØ™Ý“ Â_!ÏÈ×Rðc ÑgÙù!3•ÝÁ]ðK/¢*òa‡´& Ç`c°C~Á¯'ùZbE'h[\@U)¶¢ÂûTnLüá=[ß&4œèýŽ¥ºcã‰\ü[ –Í~ú_bÈçmƒB4-HÕÉ\T› ̬¢bÊÅ÷¶Ý‘Z—ºÍ%®Š*ʶÝ:m‘é<áá°tݰHhzà È$LqÝJOýŸ-ê±®´´`ÛüMIàÀŒœ¹Më– ²–eævó3™¨6—#cX:áùõÕ=œsÀ$@Ï3ð÷—ÑÅpUYá?Ÿ/å õ;¥8™›‹T¸œ+2¬þ²¤n’‹Û¯ÿi›¼2xúÕ …¹%¤q[Vܤ—fì;:ÓÃyÚNÝUòƒd~£|$cåm¶ÂøoNŸùhݸgÙ­‰ É÷?†ÛCCVe²([ÚÑ`Bµ]¨eù¾V–Ç‹ì„zˆ}ÙÝÆÕSË-Ñ:š÷ºÁ‰fõ-YŒ8t«Srã^ÅÛºoH8ˆ‘ „ÂÙu¶ƒ â )¨tmC€Òyôd:`&öj³éSóA«€<´‹’€:ü±P|Ú {éÞc#¿ñJ”ª\ÍüÆÕ²UÎZÚ“Ú^Çà {“º Û|FžQO9/®áM¶“FÑ !‡NC»ý¢7:«°}×ÖDtJó¦Tn.Yyþs›éÉ…syZ2QÈ/ þÞ°¢)lôwâIvN¨ÿLìÊ_*ä@ Šý) $ <´yQÀùÙW*Q:̶‘y_¡g&&ŸS_÷" hf)„åg FÜ–Û3'˜0Z:p ‘›³«¦fé4+* Uì›ÿ'‰ ö¬ÃDô;´Ìz•*rÒ…)}G)Yßy§øå»Ç&dÉ髉ë y&µè½±0•µ*ök®§1«ºI—U@%lc±¤*¢uÎ)<Ûüøùe;‘E°ã;ÅHYóâJƒ4 Ô[jxhŒúÚ„¯…T¸ÄHå³+z–ÔÛ½ïÆ‰UèkÕšç"$0‘fŠÖZ<ú—¥V%ºèL]ÙVEø+BŒ¨·†0$Ø­Ž†ÿT’þàQú+Pmeh¡ qìw_Áûñ÷20²s•aR‹µüDvU†$-™vÍÃòh ØÛË}’™ÐˆÑÿƒ?Êk|@ÿG»Ø(óº¿%ŽT[ ²GñœKû…C]c Ä7Ú T"§"X’?-*Pÿ „ö,+ÅšsftŒ•pu{âXå÷æ~›¿ÆÅ2¾PÄöZG¨—Uó"„!3¸ŒÄפhoZ@ù帥܇‹>Ê.ÞtNòuŸïέÏ9â§*ÛB,Ôø»=³$0ã¦j7óÊ) NË“”"ÑÌТ‡«¥j· ÓÿJ" üõßñÏf¹×p³Ê ­‡Ö{õÄË«': Ôš )=33©¯|¡"(aU‚Ô˜À¾Xct_ª¡!¤ù –£§þ<>8CÜ_@iØÉpj—àå$›z-õ8ÚNeÝ{ÕuøHCÏS-ê­’¸•ë†áy‡e‡sgÀÅ<ЊŸ8W?w f-ÎÞcRËE|>Õ÷¿?aÕ"ÝݨebOfs×q„H§ÈqÊ®·BX¿ û†.:bwldõáž—ñá;„Ž0d?p‡‡~g`o×Øá¨™êÔŒÎ>ùs—¤,ÿ—¼Wy ’µIÿ#^†Øe>ðªÊâ€âŽ ®½×X)c‰8£s´¦˜ãª‚šâ×jöó±œóA—mZ£zófädäZ륂ÿ*?Ã,wÎz‚-šôÿmà<Ú,1cìÂUíш&I00ã…¾sö~b=Kú X*ú,æÐ;*N˜)Câ6BQcåRGµÄ}}3]ÿZÃC¢m¦![ü›Q'&_,‹ª•Â*;1ÕšzN>õÇH¡ŒÊÓÌOË´Z÷  ´%Ò…ŠbTJÃjø^ã#'Y§òÎ÷þ¦úc¼kß¡v®ÉÑŸ£_Ôãÿ_Z?Läå8MÝ¿va€ydæêì¿k@1WsiØlwüáÏ’z hŽs’NÿC¯ÚÉ9—JAÇ«çD }ù‡U´]ð°”°Joä‹‚#Û*Á°ã·f¶1¢rWo91Nöe± xÃLªsj ,™m¼ïVä¬;­T‡§Óœ˜|ÐüŸ¦ÐK‰s¾ªõ#[VCRºùgQ‰0Vn‹pŸÕÈ”SiÎ3 ¶yäsØ  ᵃ=[û++×—\)äëô¢9cvVh[ Ã0çwÒF1+ul·çk_+úž€÷$a«wt\K_Dôv#Ë;ãl6ëžîÁĸÜL%¾|ìÅ]ˆ¹Bê˜0l«ð?!ó\©¼Çÿ(d3Oø^Ñ¢'í­ 'WJŠNPÙØ©ÐÜ-·J-ª+ÏÈówÀ±†ÁÙ5­lY¿5?°ôµÓ3üè.Qò‘~þ§~uª¸V&Ú*}.*| J0‹…%)q}=lM*£'Î6‘®Ð-“4;Zœ­éw€Yˆ° ³jëç_?«-‚sük5”§REe„‰MJq[”#<1ôÄl"ž˜ð™Dôñ}Pêi92y¬ô Öuý.7ݳ+{bt îÆ9.ª¬WfyÑË¢ër@dPDz7.^áUs#ã62"ÌŠ¬ÐýsÑ Î鄼ð´æc”¼oÅø´‡˜†q†8° Y„|ø-°€'+ÂÚ¹’JK%¼%5¡Wd!¢¥®vlÀG YxûC3xmÇÍC‚¹eÏ~(‰µÀp_ß93Eó4;¤1ý€Àù"³5i´¥Ö{ˆ_œÑëð%QŠ=pf«·í†µ×&w? χl;J›€n‡ËY¢µÍR'cÓu§xM(­Úسҡ’Èø á¶®ŠŸ9ð-%É'k:¶Ž7Y²…ÒÕ¼NoØÜ¡„.¹ªÞ Ú ¶ÇŽ-ä¾r¦¥öÞ–DT·®V1Ã@]WñÒ<⯧y³:Üdæ§ÞÌCJõÈ;=%ÌãSÛ®Îú…©T]Ùý*j%zæ%à #-<%ßiëUÔ ÁÖy"îªáYžÝÖ˜”S¡M¡ú%þ7aŽÿT é»c§#"_î¶|°{¨­¦l #ÆM©wÓ×”ÕÄCÖöÖõ•~›Ö#¼¤Hª,±ÅËóÐñ;OB¥žš Ð-Åå‘.|Êù–|ЊúWr[è¢ÓŠ]üùð^9…®ÍóþÅcDL×É êD!(Fc€`…s“œßi«A÷“ª®&ö8\-Lõ¡ŽöÎòjQ]Ù«ÛQQÝÁ±îÎ).ù#„ŒuO|€j ?›V PF#ÉÂŒ )-Ix§/‹™O9OßÏ òÀg¤å„Nª)‹6'’u¶Sv‚¨YáýÙ&CIÛBÃÌ*kÕæ·C$²· L²€÷ÜÁ‘F R…×bqeÆw“~fÀÞÙ‹`Cd±Ú¢2!C}vÌ»<3QM¼‰dùNV°•nNB$ †¬A_^®D¤]è±jÆ»Õë`JIñÚH¼Jìø©X/Ê e9êáG§Ý R ‘é'ž‹ÿP^h\zmîö ƒ P ʽºÇnfÉùZwWÛà“¶ôivCçxn”ƒÁÙÚ£—ÁúŸ¬¦õ :‰¦–“7vûTx€ñµâz"‘v{–¨¶æR~‰úKí) ÿ¾&Nê.žµ<°hGBÈ&© 9#ùwyriU?þñòARw?ÄiÐêv[¶&¥ã-ݗ¬ÊÈ+X‡W9vÕ¬¿{õóãtíPa÷kòàç{¬Ò¼-<Ú í¥L±©t"wS>fiÙ¼,?Šd9Ü6úH+ÂÒëÂò­#|_+§Vll©FÊünÅŒïŸ:³}ÉI½Ä…lú` Bèå+>\`ŠI—ž`ûÔcx± t„¥ ì·¦hòĚÅ’UúL³ ³ %_bÇ;e†‘_ j©cØðP©¦ºZzªö"àó¦­€þn;3Þ1h)ðÝ CÅ+©•DãÙñÆ5/óŽ÷ºoÜ* ŽÒF…}{à €GkC–í×ñËpñÊÔIwC%$­c '¦ã£,¯ëœÁL 0uϾî@ÄܤªdºµÆƒ“5Pmvg€q$¬ˆ9´Âv«·ö~7£Ò½³°j¿uL¶Í=~ÒŽ›?Kº‰,ƒb#'É]&¯ØŒbþ‚Í[R“ÛE%0¼cáz¢Ã;Kxs½´ ãnÑ{"aÈE£ãwA÷~5â´œà¾mhP òvp‘S[ê€kKÄnõ{\Ù¯EázR]Kú‹B’¦™Ûû'8-?IWSÁùà& 9®¨º6®‰D` H©LySξÍïòú½z¦?‡S}„!ð€¶‰£íÛ#R/ílÎ1Z`.ÃO Uf¤·0H»c3l¸½tHa®áRˆ‚aJÓãÌÒÈuYŸ·8Z¾7‡ q}xixÚ|Ò5ð#¿O}eVvºÅþ±KÐ>g”$E'¥Ó8¸dA‰Ókæ| Ðv‰5Ë¿¬=Öac`(„;†?úÌPœ›½ØÕ…‘@EªŠ…W]­«ú˜[ Y ÛœÎ\Å®8àÖ¹™/îHæŒ"òïÃý^t{4ìÏò™OÃPBvà=ö8lA~‰DXE†Ú\V"Ë/sök=;~"JÈïNÿhC½ŒÌƒC“Nã„Ù‰ÛRí Ñ*ÈÅÁ› nv°!;t{ó,Í&’œcyû)À–L­Ò Võ¦€?ÅÜç™ûp²ÅÊðŒ4¥`zìP‘–ÈÇëµTrïÔc_ c‚Ä×…« o>²[9{þEú‚rñ¸©Pƒ«ŸúÕÐHbS›uL5]ö+¦,eZé0eùJ 8~Ñ¿òéÖâ$y*Ö6d{¥MSÁ÷ðõs°MT„RøÓÁU§SÜ·O¿Cù¨6 :2˜öC) Ѳo3«/391T×ÏɺÔi>&çÁða‰¯ãUîÄ\}i· V}àv棨^¤‰²Õ3Ïáô›÷–™–ñ @4Þ{s%”½(­{õõCU‹O6u†Ÿ Å¿G>T7‹ûA_èC™T2WN­,Dê³z†Ü ¸ nÌ“°ýÑ09)Lì(R¢Ìƒª?±C;0PX=wÇ”S®ËÃÀ²µ\Ø|j3)ÂÏ+ _"·Hí—0bê=2”h½ jîÝ‹! Ò7A•ûœŽØõPaaH^»šX ÈÅH/°tÄT9:ÖmÖu[=çÛÆy·°Û[ 8wÜ&qt}£Æ)) Ê+a°çÃ[¦3éJ9DÃsü9ÔT9ê”±…[ÅRÂ&’ìÈûbŒùB/eÇ6”¶R¹›ËüHä%¨*âÓZT`‘gù„·æ™m–({¹úl±Œ‡Âè˜V“ÒI <‰U¬N—”·§ª-L 5½¯Ö©¤&[xýVI>x;‹´cóªîÕˆÈRœ”¸“$î]µ=aŸ7MY)d¨QÚþ0²Çw÷5ø k>­ºLp°´†æÑ}“Þ¤8«3)¬Î’W¥€ ËɨŒFöÑz7›Òž.m<•„ƒ“d9ôŠý4r­2³‚ñò€lÔ¥Ûü8‘걉ë›°K®Ü© {Q8DZ ˜êAS^êorÛØÀÉ:Ëå›|yŽ\{e½µô¤"„qU¸z‚ì·Ä•ÿgs‚EÔ“Ã’#,ƒ`d Q’„AÿYcÜ̽c_©³ßéÝnØÑϽ \“ƒ{®/ì¶ÈýÒsr[h a Ÿë785Ïî«8£–VÙTd7(ÕŽi)k_u6f¿âo%€¢%œµ³B"ðÉ»~»g´ŠL·lYKác#SöL[¨ÛþñƒIž/]4é¾L ®?n鿀t7ŠÅ™¼·HÎÒuy‰¹)T+ øŒö§fƒµu‚nNnÖ¯}Dû¢…P½!"…§má®ão¤¼øà¦Nsëë+äìœE7×êÄußý3¹1¯FTs×T¥%BìÐ{ˆŠœÄ”"C¡—¨ãïßÖïF6¸’6ÎD¢d}1œÄC#‚%´Η§æqm»Özóõ×â È+.¯ì„ÇäJý$"ØâTž^Êeg»Rò{ÜÇ!ØÐž-QÇÍ ”SÀ'äwž­ôNÞo±M‡C(z’%Ö\”‰#v±æ˜íæ®ýkR9’2‚«s28ÛsÝ~)]'Ùß‹û½+Ã@7fܦPRAÏqÂm¨Ñ8ó^H’$—ïx51åœúÜí;¶ø'Æ•x¯5Q¶á‰D«ŸË Ôº0üõìíU+úÈ4jr[“ZÞ<^¦kÞÍ&‰šº:À>T Ý §a?Ò ¢Äüßæ2œ«¹lñÔL"€žýd•ÆBoׄ"Ý£u} ú^ÕÝPŠj˜éḈ€È¥Tßìÿ8~c³…G--ÏœÒñEoD¾ƒ}ñ|Åw ^TÃ;‰êž6&¯ ÔræR숅%\vųíI±4¬U®ªµÝŒS¦$ÁãwIÙœ ¬’O#%˜³ÙêVG(=*ùQáš|Åýÿ‚ç+ä£v²#ËÇ»þ‘?]Ük¾n ×ÿ\|ì?v)uʬÐŽ°eäU4JvZšècx@ÓO§Qã±Y»-´¨åC^ݹMü ÝCÔ¹rˆ‰²aü»vÍßÇÚàÁg’W¯=ýmãkй¯X)æx; ö¥5Ç,fà^L\i ŒóT1Ü*¬ø¬WK‘ºeÜü"y¸@ê×8ÓA¢óÈú '¨R27x˜sË„Œ ˤ€mg­ ökÈh€‹ZºX‡1ž®ZÙ}mæú—…–ÉÕù½U’ó·¾N8¥¾§N;y@G:|2ƒå/Èó@¼ åF3èײG¦'aß÷êÑË®ø!¡EÔ©a¿÷výŽõ³îX¥Šâ£?ÿ€Eà˜Wƒç¡ûêÃÚeúÇç3e€<º€STH’`4ˬNט¬ÿTEB,· M<ÏMQÂ}æBŽÉ°kðÑc{}d´„/YTiÓ¢nþB²¼>˜´í€œ®UíŸC*wuww(yіጠN¿ÜaKµ° Wì–‰8ó‚pŠöó— =¸#hèçÚ ”ÃTÌaÍ{/ßX²ºª ò»ômúÒˆúŠÇt5 þ˜™2 â´ñÛzѲ ÙÎî*ËA}l ˆôk¼‘ˆÍ„†ûtf  Z>bÿiéf’bª/Œã{^‚êç‹!Èœu —æä¢ lj¤<6¬A!UY'h›]]бí“ìtPþE,ŽýâŠLÆPNQºÞ—âÒ%û0 jè²vK>tMG`»å:¿]¦*®sŠc7g]|§§¢~‚‡< üI/ì¸ñ 5é^z‚3mXâ© j:†zD>¿« zóå¿%Q»›» #ÄŠsºp~8©WmÓ½$#9{ÛÙÊÓ·ytqãDÙ¿'R(бZÐU¾¤™e¡XI ’—½ 9(ÿwdµ‰]­Ì#ùaÔì}NLTòÒ ±Ø3¾#ï€ÿOÿ€î$XÝ„‡MØ1ÚëCþ®ŽÁw%¿¦2^…¿–Ú ã8íGm¬at¿ yØÛþA¹IôL”‰ÖeÅÄoiÅd³½¥ãâ‚hÎAl­g)âíÜäÛ˱’˜£gãaµdÁI!‹#T¢ß’êÿP¥X ¯ÄŒÏµ0%©Ç„û¢2ÔÞê"=XÆÄ„Ávƒ0Jã.Žg0‡´WÍN(29àåe<¥×F àz€ºÔ:9~ªœ¸ÒGŽÙÜÒµ[ö3µ¬hMÙ‡?×ï®g%¾½-—ý—¢· 2còÊFl½ÎÚ‹# Eö²ÌÚ¸Aj'ðó¾er°Ð"™~ÇÛ26çf;jC£³&‡ã_šè'ÃjÔ’<¡Že’<¡¬†P"wç~´ú´”?N¹Øé³”¾ÿ^fPŽÙc@ï ª W¶qÐRî¤ü®+à!ûûæ_çýß a"}ìdîHg¬}w¡8ç—0+÷º`>D|Zp òZdâ®±lÀ|5ÝŠ/Ùè'Jô¾!:•H³ _n õN.ÌÍNÜp6¸Çep®RP¯÷Þ =z±²ñoôøo–)Ò{¸¾²ÒÝÉK ^~ˆ9þÚ®âIdM|"gO—ŸW"C+{­Ÿ=½•¾G8éR„JrÞ’Î{ؽ¬=y2øè& ”›‘„_}ªÚä=ÝÝ[ÒÚyˆüv£}c…£LQ]Þ³?4!5Ù)ÚÙ•Óvtg© äýçÏá ó쇤ð.}ï4´.â߆â›7R^cp­]i™ÖþäSV[ZéÀÿ;%f›E»çBm. Ù¨ngyyÛâeA# ñS“4kÁûÿJƒ»TR“éN<ç¨ëÓx’ÍBt<—áò žeYø¸¬%CnVØæÍu½àm™1Ç|pŠßz”’€ÿ„¥~ñ{:O+·M–_$ô»]lT$ÉŸé`ï+W½#ŠŸ • _ ¤â z)à ký)Wàí¶ìï¢#,Oåêçy­…M™ò/Dn'«Å­©= 89éI†Êà³®ðJæ‰ÎujGû«'@ÀmÝϲVç®°Oë)L[Í»3žûŠô¢2LW[az–¬JÙA“¯IÑc{¤$òàqÏ+9C«ÖÿvZ£Þpü§Û¬¯Ó”s:QjÉí½•S!á„ì4Æoª‹¨r–D¸k±÷›FúÈŠ¶Âàz¶?ìÚµ¹Ûh$!“0È‘¸«y"—Võ™öݧ‹–ÝÔîÊ××ýÁcÛ‰Þ~îðhYê…'ÓóhU—AõÍ¢ÞÒƒhë¼zŽ®\Ç„»É½˜–YÞiáiˆcN_i+¹¥}‘ÂNª:WIJµÓØlÌxˆb¯ÁÇ g®¼ž8êÏzþ)Y8žó§I¥.Ô4¼Mìª=["ÇéAD@2øôÆÈ¨ì!"àNPi„§ ÇÖêíåþ¼u']A¸·ãnsZÚä[k€…&¤žö„Sì,Æ^Ä.I;öŽ5oäñá×>²œßÐÅÜ(œÝÀŠ4³ŸL9oE˜¤¦¾¥îéëb«ÍhN( ¬¸‹ =`Ø¿(õ«Ð”- ¡ñq,X…±®¨Å»ªöÀ–æÅ’¶j¤Ü¦n@ÚŸæe;僴“¡U. á§£Gª²ò¥íxÔ°eA(?o-dfpY#ÞW"úW¸¾CEŽì38…>Ûµç3å9ì°-»›àKC$פ‡F¯Ï¢Ùo²žRå$ê}¢*޶ӒìÓæVVø(†Mö…^ ÌÛ½u!zv4Ý‹ KæÎX…³ÜÇ×Õ˜ÎêuWØ'Œm8 ¾¿Ã6¢Ížóûö@S%lÃüÒ¡®¾Z!;/Ý'I8UÚ ·¹ßÎÜdÿj®¡mÞ?Zƒ™iƒY—‚镬4Ìo˜Æ#}YNA ¡¹Ã‡Ì½3ªÆ½t3ˆW»dËõCõ|+1—·¨fŠšzßóAìþýMºÀ¦d©äê—ãÄIÉòÁÃ?1»$(ÙÔp fbù«ïÖq;ú]-»°Ij•îMr”¹P²ok‹Ü4Kyו“Núî=÷¡f—”ŒP«zïÖ¿iËÖë©w_3süUæ`äøöx¸¥ÙÚW.6Êýá…‚þ7´cvî6œ(¯ž^ê£{³Õwň ÓŒZ¢?•‡žpX…Ö‹7t°æ„³ „FØÖ…[;BÞ?V…‘ŠZ5Àå¾yc“GÏà^à,tSŸñôñƒ 8Eh«äRW` â1Æ5›ÄYfµ½f>^ty¤ª¤€‰“…õOÊ« é¼ì›óþn©GËZغÿY¬ ƒÃ©¸õÁC =Y{¹³&O(Iþ⺚'EóžòL5@qŠ–t¼¿Eaû†ßf³TëXÓ'šøs>}ö}lØwEyJY¢O„IÊÿÍYãš]¾wÙ*~€ÿC×E²»±a”0qò"}·kÿ-$4ýAƒNP6QQ•äPNì§ñ¢À }iWGô·µß™Jù ŸYé~ÒB$@‚Çj!N™S¢<9Zc¢Çmn[‚×÷¿ðÙ©Ú°ÑBšï!‚ÿj–É^yøë´B˜Æ'.6ûªýrô1¸áY¶:üU¯±áL|i¾Mú²|´ÖiKc_“h>܉Ìh6¯9ÕSS±‹ØßXŽE$†Juÿx€3åüfÀK G¹ ¾©[Ÿì›¥e™ë <ýs wÇJ„ìµs[ºûˆg\Ó÷ [Iä/·»Û\¥÷“‹Ì´Hsº„eYž–š%ÿWãZŽ•j/›Õ¾vìh^´lÈòBO4úâûUo†~žò>OOÚ_ç—‰)iÍaÃ*-ƒñW`ÃYë3þ‘¹Ð‰TüÉÚwˆ—àG»Zò¡Ö«WÌì×ÐóÞ#Æ#QÃ5u¢"·Š·Š&,ë¬Ìä[VþËHzˆ&$Àn‹q,»;ç`"ý³@ÇÀ&.Mý =ˆ…Ñ«ZZ*ùŒµÓQ.Å(&ÈAƒ/ÄjmY]ª g7›ºmjhÄúê>æù•¦…²â¾[´VÛÁüèÔøk%nžªÙè#7µfmy'œR §LêL‡šWé6¡¿ÿzö4gå fÜ,(ü:ºÿ ª÷ ¶ízW%´¾îSá˜êËë+ˆÐ^6=ëð`ˆ]tç²DUk"Ve„Ê0Tb ÷Qž–ûGŠ8ž{¾BXÔ:;i¨‡"ÙïON—ã!ù±ô·îTý +Þt b2ˆ*fη@;Éz2ªà_ñ#½ùýT÷ÕÑ7í§c¾Š~ ´ùþ€Ÿ· ¬Žúùþ—yùþбßQ#»Íòv¶ù;Mè¾Dw¹ÿØW?¦ïáTÇ}üÿ"œ|ÿ!ßðèëßD??ÔŸŸè§õ^;Ð?Ÿ¾_Ÿ¿Þœá#¾þi<|žœmgõ®ù>1ò}?oQ9>Yÿê=ŸŸéQöª;Ó÷ÉÝŸÏÞxïWês ®`M,éÖ—nw›{!vÎVÈcÓ¯íÒ*7ÍÞ°êàRÈ+`¸^×2oŸ(^GL¦eCdÞl›VYà4Ý%Ì2áŽ;ìÔñeKU0îLdŸ¤ÉŠT!Â)¿hÌbý^èâh¬ÎËÈ&"˜ÞèX¬1âøÒj1 ‹¯ÑÔý~yŽNM46¨´¡ÅEë‹§"º.…ÏÄÏn2P%E\¿Ã T%IÕØ5vβXι‚@!?óQ‰F›f€V¤3¥½ 4.ˆ°–竬¨ÞõÆGø#Dƒ…fÝpà‘êÒJé G-ÌIK$Yb‘óW³‚™>Î3*Ü'šæÏL.˜ÝëAíHã;Zxòf°`y­«¸ÐMî {È&7³á¥‰É]Ïê¨%ÑV®ØWB‚Àơ̞êAaxD»éOŒQ·Ø‚_9}ÝÕ¬Q€` íKÁ\Èsç>hUð Ì’±f‡ Ô):IÉ1KÃ9i•jžn…òâ ¾bŠ7`.É{‘åð¿éS,|ôWÄr¿ªYû¯™½ä¡ú´ýt&ÂN­ßdH…}~G$¼=§«JÀNÒâ2³¬ñ0¾b\ë±õxüqPBámÕ™pQÅÜdŠäˆµ©Ù¸»ð~«‰:Ù!2Àv&.Dr£éeÞ·b í!–ͳÐGÑ›þ©×»ëœ8<˜[ÑF@îw#$Ðõø oÕÈY÷¾E°?›Ó¬¹¸¢Æ#"Çþ_Êï0”bE·|*Ð*Á¦t&œY‰:#ÏòÅb¢€ã®¦Hîºëw~·K+Æô0ÑíÕk¶,~#˜¯õ€ÜBÙ Fø‡úrqõýÒµD:ˆN.óVSòã<ª›ßN!&„ÖÛgË6î\iÍ@À»¡ÁCQ«ÝÊÈ.óe8wÀ6Ùˆ[å“Écµ üÔ”ÚÝH#Zô%Š?\Ú“_2¼>F$ôLÊ„X`¸Çs~—WœïøæiÍ ³„c< B?µÈEÂÍÈ£•E.”dÒ–½âA -@D"„L~¼©Ñ€¸fT;µAœ®‹Z#d"VêÛÍRŠogˆvŠd) ´U†ôbü²œÇs¬K> ÔËò,̤ÚÒ7*ëÌÿagÎÕBöXP}Y·ÈQ¯Ý]"·ºŠÔÞÎ'ûĹ5“휷ú)¿(ùo©Ëmþ§²îÉ£ölŠdmA|Ω¢šè“œÄ©E_•dZ´šiƒ~ùå+Øöc»º°¸Ñû•+M§Æ¿‘Í‚i^s 4¶âçî'cË jdæ.R•e9‹'`ó¨%¦3£*KŽzÕò«¥Þ„§ôˆÝ›rÏ‹ÑÚèÌUšÒC`VùvðºוnÕyz7)ªŽù·—¥³…þŠx:îøŹ•Š_>Cá²1ZòÎ…÷›˜TóS€Pod’{ QàE–_—ÈSìýo(ýpÅ1$J`›²á;Ÿ;¢x'ˆÁ[¤<&N^ÁZæ;ŬkLã àª2!V:Dck¦±6&¼0x🻇›ÅÇ벯¦OLÕ‘b‡É(w4!ÄF˜›‚2OµX󮲉žœª üÜó3ý6 Òa_רvI[QŽÊ*“l>×¹Òÿ†èoÙŠePê‘@šX©“ýl ’S§ª/ÜLÉ\¸rGÆOqª IŒ2Ü=ú°KÝ=vӽô…Ì–žëÿjk1žéP4BòN-…¥ `~ä ¸[xaÉuº=G·$‰Y;Šú¡öðþýÛLtLêl Q§¢ÌJb×É|9Û—uÆ’WÔ(@Ó»¡bEQ$5;VÑÁ¤ >k»Úõ&ºÿ-X^B25Ü¿×{åҷ¶¹›*<¢cåŒâÊyôgIÛŒê:Àò™ZÖŠY³]>hUÖ`‹Úqrr´,¨~iÎJ}ç~‰äJÚú(£1 wŽ Î¨›rjSô ÕKÊÇ·,7ÊmöÑsȧ¼’Oi§=Í.»îä_Y–­Ô9ìï ).-‡³¾#ðæ‡èä“äŒÓþ¿<–1áeF Æ[¡Nq]U–²µc,ƒXùÊdf¨²¼J(ã¶1O9‚et-»–e^g¤iŸ* 8®Çñø¡¾éxÃî†=+üŠ )®@ÌuOž³òï“êsmUÜà.{­ë{àÁ¹ú+‹b›×ƒ“¤§`· é³QwÎEd ±%ò÷¡ i4CFµÕøÕº ¶KJWî¼X<æ‰cãö€áu¶²Èð³ –&e´}ÂAZBÕvt 'H<®¼ruè°Ò,äS`¤ qŽQ¸‹¬7î·@/%×ä1ó…ùÈ‹\°½>C¹ž•çY°¨³aS‡C^¼;¡5:ƒÜøZ(ê'²i»€€ñ*!M/9±$xODkÒ!Ì:&—Ï[\„òÖØXyÜ¢i9V±¼b«”&ÉÌõfß?ÎZnI ©©÷: ìÎ;ëCV;qv¨A­ëñ3ÿšºM“;ŠFô×¹-A£Ë ¹šŒb<úÛ¨,ÝsÁÁoK™ƒA™äVݼŸÝø£óσK»´êΦ½ÒÓ+ë€v_Âòpw]Sµü<׳>ó'¹’[Ú…ûJ'r„“µŠ„Ùª ƶŠ@üïM…œ8r¥…Zî8׌½:lâJxy›©[³‡aôÀYF£üñ‘ºòâªÈâ ná‰}b7y3H­"ÿ-/ «”êc$Ù”ÿ öD¨þ³6„ýõ˜ÏŒŠF}ât9¦V“à.ìÝ$hnEUó¼nçóD‡bb¬&ÁëTx5JÙ²õ4û¾kZô·“ë-Ä…Bµñ¢`®7×0#«ng!•ç¤Þ$ðlfûˆI3.®_ت1¿K¾÷`DÏ ¦÷ä>à@ê¬íXèÓ¹·à~‹œ\õdÔ™Øpßø1Þ*m#̳Æp1¾û‘}¹<º½ùýÚλc¿“ÿ$ +5ߥÙ…›!3&‡˜{e'zçš:?v¦”HnŽO,rMˆ+9–ÓÉ{ÀµP ìëÑÏi|DtÄPM«\¨¦ù÷7zžÜÇÕvrü- ·•ÏTþ?òL€vŸµˆ1Ë%‡;{º¯¼²$$½ .”3ûc¬?ZŽÍy v³œfŠ˜­à Ë8‚‰ÈöíË‘¥×ÉeòG’¸ÿmOÜÆ¶8Kˆ âpð³™ÑÜ­d?Zàò‘úD¢j/{|Ú±·<;|bñ$,ôz­gÑ£½yǰAÞÊANtx¦;Qº%KE¯‡Ÿr+Ú&p$A,QëÇ@Êô„.k†‘ƒÕ­lÉºÊ /‰ÛÍ8Œ•Ü‘F{Pñ~)ñK•á*‘a%·»†Ë\[¬„ÉÕxE¤²Ð`k×3vg)ãÝÐﳎU<42³·"·"ÕT¿“Ú²í¹°Ñò ·Ù.ýöh1Ûdä’2E vðºcâZ™ªˆü"ŸGØø¥Ö¼Õ¹\fb§ìǯ­S®Ó=eÑžqÛ©êqn^ª¤ó*ec$±Z°L:¤Ñ!(?Æî½]gÖ:K¬ûË8Vð´qo.6Oû¨E.à‡VhûÉâÖ˜ZHy“"dô¬ µ°»é¼ «l…ö$ª: ) aá¬÷rŒt1ólœÊaÿI“[°P^ 'Ù ^JFð]àœíýÿêÚ˜¡ÔÆ\bÎUù ·h*…—Ç$èÜ*õHSLªfØËˆ}Ä6 ĪO •9³ÝˆÇ™ÃÖ`¿=âi ·e_ŠÍTNÍœ=ìÈ/tIš+‚ç4`ŸÆ¼ Ãöâ˜aÐt2y©oŸŸ‹`ó#ýb`¢ž‡‘ïxêÇÉ>9([‹7r;»Rþ—"wßµØVüd”]“OL”éxßâîÅMœï~WÇÀ¾a5¢d4W®û(æá#ýÛÆXYa‹\þ€§þ =0‡‰0õwDЩàrMx©Áç+Þ¼‘ü¶zÕ¦å>ù£e÷Óï8µïTÒr§¼üÓÅãÓcïËs0u’ži½@u€ì SµH˜f=IMÜ”d蹉kò|@›¨nŽ}_ÍÚ®dÆŠ žè>Å2ì¶À{[:ë Wñ3‚k_¢&ùGûH4úôm+Ý·0–ºÅÒ±âqûÌA ¢Ã˜D»§¾-ù¬’«µow»ìädtøÒókéÏEŠZj½_ð"i.¹ýñ‹±èãêÄÑ}„f5ðÃÇÇÇ ðÊšJÒOÿi »Ó%ݶmaYcV\p;.©ëï$1ŽÈ陵‹;W{ÉŸ#,ÿ„G²»Y¶4ƒ"gðÏÝ AÞ0LtTÿ0fë›çη¼‰ü3Ö©_¤†¡ªD˜°ŽIáÌéPÉõMëYìªK‹W‡Õ£¤„ê4ί<<°+:i?‹¾:‚›†›1ð0jT)V@×´ßõ¸Qh¡Õ•1—Âþ6ë92gZ9ÁÖ†^¨Á  ˦tÂKN@wÝ3 ËÔ®¥+í•…Ô0çdŽøÌ2ýÓ+b 7Š‹0¹!V55sLÙœä½r Î(¤6\›$ÿP_×EÈ1ÚÝpŒ»kõ® BzPà·•~ûp06|Á®<èª)»5€+!¯H+OJV‰™NœõÁ¡I i¿ ÖOйª`ÀmIN·cóHKK«RdѪÖÅšrª½ò?ض8²£q½•qñŠË+陕T &¼·{1ѾÿçÎo35_Ú®-@«“,>Xn’ˆ¹/*pGü*¸žtÅ\‰äå.Ì¥xòuç‡ÈuS) åø¹²jû®¼É^Mw’¾é™åáŒÑJ²„üÞc+ž‰©FØU’Ú7¨ùtUk±géü¿ˆÚ´^ÓýkÕVF!óÚ?"Ò–PTüpjÇÄë•g`z-u!I¹uyç}„ç̧.»³É…œº,¥…uMý¯•_ͽûAq,Ïú×¼äyNQµ­²5À£ö­üèÄIÐnÝ—ÕgES)¶-’ ðßs“¹V›Á“¹ô¹áxüà «šY 5X3e˜OˆºB$©ƒW}B5ëÎa²š?l¦1 ÃbC[Ž3Â`„…eU»€0;åiÌ÷7*zÍ#õ _N]Ödã8Q¢#¬H$½:©©î“Ë•qdfç#Ø¿XÈÁ“?{èÙÔPA>&å;Æ•ó…2Œ"ñÖ³zoDt»=‘¡”#äæøN µx¾Ydk ðÔË…îè€R¨0'˜½3+X`-ñEm#ŽSœþµë2ã«*4Úß~«…įb·CTXÝ lZe+¬}ælùÐB‚1gqÁû—5)ŸHù¢TîRÊö +kVw3èýª¤£" ”jºµät½ Qý’¿éLß©Pµ?ñL•X4æ¡Á•‰æ>|çØäµµnRÞ˜£7ù톯ÏÄ<[´WN÷»~ÔÆÙˆ3VÜØ;B&ø[x½•xd?ŲáŒÏNåŽlá¿SÝ*¦ð /LkBä©N¢íÓYÑ"&Üõ°7Ä®œ3òsó' $à”>»ç]¢ÂÖx›ém¹@‹dk뫬iïèGý9Å1»Y¸(0ÀRÊ›°ãþÙáZ_ ¸áè—²¡©Öq}4öbã³29°ãóÕuÉÀ´“²Q%“†þ]HƒÙÓÜú‰ÉSM 5àæpØUÓÚ]ýÇ8ãQ@*ìûD0P¬Ì„2±QŒª@îÞëÀêŽ=µ­J§^ÜFJÙ[„£×Þ§‰}FýQêç'ŠüáÒè+„4lÃ33àžkÍÛðŸÌ ¤Öc´¡’{ü”¶¡žxé¹_Û± =Ù.ß48.‡·+wF;PSË‘„]®xªÄ1/j¥•UÈß™XË;nœlÏ¡Ðz²·¬*–rˆ@9FêöÝ]o£/†NÞ‘ i³æã¸¾UŸ'!â7&žk´â•·6SÃÍÛEð *c1·¥[mp†íŸá ¾À¯EŸóéIÁ¦ªÌÆ`ûäZ–rÀt«ÆqU!C»J #±™]ÖDFìŒcÑuÊäµ|èÑÑØ÷UšÁüNK%œ8Õ§¶êQä…÷]ûÈ};ws>à–4š£ñ×È«ò¼¡»ÃB ÊÚ«^…¡þ°¾àUï`KµºZ_¾2y¤Wƒb0 –’¼ŒtôÖÀ:¶ pE´½'-—o‡æ¥8kñvµ³™õוs­ôX7ñ9’ü»ZŠü0.—°ÕŽxco²8¨¶ªg¯ªÁn(ó’!“Áwi¿t‰o&U<ȦB}*ˆy,œG¨º&É00%xÔyÄœ/j4Ж=!lò ¢ã8wá:Û"|S[a„©M_Œx–Y}]‘µs–_q>´s‰%"šo‰,Ód$ÃnZèÝt }DQU(ÑŒ6à}kQ9à#Õ>t|¦-{¡zoÊ¡§Ï|a….$QO¬þNõ­¸º¨qÖäp”‡×ƒ¢ºËSz†”ïRî—†–ŽGËŠ Íc–åÝ«C%Ý—WM#à2>vG9R?¦å=3À™¡ø‰°*þú͵zËc[uÐ+}Aü@ñï‚dMP,EçïÑñz«éñ>0AÙœ3ÎKï´˜e‰$¬Jž$i·Ô ?uØ“/‘= l„Êà^‚"‡Š»µé¶pd†2³òÈH¸zV6²e£j(§ŠÆÒŒXÖšÚoñ“²­XIŽä£Œ*¦%CÓÉý°˜äÂ'Ðf-96Ÿå¥nà{Cò`ëý´ Â[Qàûä1ç…ÉD¾…QI[ãm£_0®u0j¦séÅ5ÍÞ#)> Lè§ØRUéÎ\‡Î'À{iÄД•VPŽˆœ—‘ÜZbZ\­Q¯Ü7W•kqç0ʃ¬gK…›TG]PZ«½Ï"¶­Ó¡½‚ƒμ¯$+8âÄýéôÉ¥Á§Oc¯ó—wÅϹ–Ò·ÑßÐó[vÒà%Ø{œ^Î1‘ÆlÁIK5l¢š¶‰ÑþMz/ˆ‚*A W\•îàûØ¿µ%HkI퇡ç,‚ñ-{òŒö ü…˜~8¶ñÕÉœrá­…M6@öÖ*å']twHqc8tmRçÛýðP ÃÉ[óØŠçÓßÙ’fát\*Ôwi Íû;Q®“@«Pê.mCþ\œ_‡Þ3öðêþñ—Uþ°·™¡µ÷zVl‹—±¬:Õ£lë~·;á%d y ‚.½y©bg ²~ÿ tV•.¿Fê;¶(O³¾øO\XÐÍÕÍ9c…#½ÕE,›à3© ¨ƒö»ŠL•­Œ¸Øl¦WšŒÙ!ì|”e;›N‰‹$/9¦äÑÕ"8Á“6kmYQ¡›gðÿ}W‰šRÑ-"OÜd²¨%B´|È5‡Â¤=ÕêîC‡gœ›Lì‹TQM¡,J(‚ ÷:¨žÿ*Aq§Þÿ„¸™üšÆCO cô‘4ž.+¹P 0ý¸¶– ±«‚PºAÅc˜o¸§$ ¿}€J3ë¡ ¶æ +YTšA_ðÑ‹ÙOúæËŸù&˺PkAŽšR¬›{&.ðëª0Rxc˜¹®³RdÀôUÎ" !¢D†¿+Ì=À,‹˜>mvq"à‘â–ïüæ"žêÔ à±‡ÉA%s¡…‹eêü›_ÜZu¾ð˜¼k¡êƒ¦E‹üÇÍ7S’¾Ž¤Þ ëF¤ËJÆkf™ßõÇÚÙÄT)±¸k¿TZã)ë[VËÈÊ"O“¦P =Ë^'õCjÞ g&Ëœ»ø“và5J…ßE#è"DÈQ¿ *oÎ0:À•Gÿ4õ8DƺˆPLÍÆÉœ:~=ø[WÓ!-Ḭ̈fY ¬…iLÚ“•FÖ Zr+ 4ž3ƒshժ˶¹„†mrÕ™1m6¿‡°”¶_Èr~¹ X«‹-™`³LÓ'uÞÍ™š$ñ®Ç(\B¹:£ô{$0ü¤=i̱Þä ³·O‚®e] ÈZQ—p =ÑDÐx’Ç’3ˆ¼ví´ÎÕ÷¢ñ¤Ûý‰” QJBµ…ò”Œµ¿çÑ Gíž|H9x¥_ÏÂÜaÚNýKÌõ-Çi\m-HÓ¹"#hõÌöM0nY g©›½®·M Ý…ÜJ.&®ðª5_ËÀ¥U7¦<^òç79dþ¥Hêóij©b~Œ] /2÷¨—†懎DC ûX®.¼WW ç}•°ë3šmÇ%1ÞÆîä¸i;Ñp Êl3hAìþ°Õ+{ c‘¾Ï)×­boÞéP\'m!½j!Ác¨۷jvRSÖËêwåýÙùè·˜1 ·°Üi¶v€Zâmþç@’¡ïx­#<„³Jp€ Òñ]ÝsîTâ™h3WÞG¿¢Öh‰')àÔ´›õ‹o_ó©€j~Këñ 3Îbö늂.Š4VZ*h‘\·- ñ†!–ñ.ÅäRLx0‚4ÂwkÕv çÁñ¶Rvç‘÷š·­S¸qÐ&Ðd±êW°¯¼D¡¤¿é⸷à¬AÙÅE9! çÈK}üݱ£YVp‘YDµÇ†ï|ï0¬ÛÌ*!—ŃÅfdU*t¯å böúlÑOÀ¶É"&©:åDОFE´CeËÖ®ë{=ª˜´.~ýôâʽ”B4¬òùpÎÕÝ2ï$vÆó"j®ô„gð u‘Ã1n܆z‘šÉí‚fÒ~P¸¶ŠÑƒ-¾ƒê>D’𘗒_ ¼‡ÚâõžQ«ûø? €æŽPú)L?°’„šÊ¿DlÎPꎟéI(“óçÛ£ê¤Sà¤Qäyl˘ãÓn|OU©e>?”çìèò±.cns‹.R@äˆëc y[ïwãÓÛeAþ7ÃŒkÍ32OK°ü£&µYéžZ£rÕËáG®éc EÝD(ô¨b¦˜~„˜ 5þ³Cç°î€¼ß`kÝ‘Îm$ŠâE?A¬ª4»ó’tFkáÙD‹ q‹j·ùä”ÏÖ²-|ë k ÿ:”QœœŠ8xmÔ£("ͧÔïãÒ9$ ¨‘¥æÅoa°VÂôš@ñkó€1•Wîä  VÞ´OöCpÉ·ú¬ãÈ䎒¿ >f§µ#6Ïr,öqc„Ï0:kÏæzy–RÙsa¦ÙÌš*ÍÑ!0·ÈkþCm¿BÔ®ÿáÂ{Å\e×ÿ^­’:ÅÁâÿU’+›‘s]аFq÷¸‡eª„¹Gvãu¦‡ži¤ú×á€Cìí!B}D÷ÛÈrßLþC›1Ë›3ï“6Òôò…}«ßåYV¿ÏÂ*³,pa8Ú¶µÅ33=¶S¯ŸÆ‚+ ÷öqÜrÈœcð'®¹ØÄ åU0‘ô¢üÝÿ ;|ÔVWžVˆK糑! U-O­!xTá :ì«‘¢Øx4“H9Dý ©ñ æ—…nÕê"E`J_¹é÷ÈïzÜðóÁ ÇI+Ò#ÕoœJßͶ‰¾ôY˜E¡ÚÚÜ\œu©S>¦¬é|£ü5D "Ü@óîf¼æ®Â:ùñ-ïËöæ¶•\Ѷ‘çÏRS/ׯ7«¼s‚~‘Ý“«Á!qF¤w½òí}Ò‹6ÍC¦ó©ŽF¿©c+§Ð>$nã÷ëq>Ä×äLòYGh‡ïÚði bvÉt5$èË\‰§ïQiÿ\fE×¥«xÌö4oÍ‹¬½1R(4X¢*IÙio"Ô;ûH©®uxBD`ðGŸ:¯P@¥©ZØ·ø«o°®1ñúÎúê(ácaŒõëSE? Ô«”%§mkÅGwJ¯«| ©Þü@ó èð :-ý;õ ÁÔ3e¿p¦Y§§EŠtjn­¤Jü÷­ðB„™ŠÚ¼ÕÄr¿¾!JÞKQþ8 ýé’‚ât¤h~ûÐ÷<¶;lâôÕ®ŠáaRum‚“[– ·*ë¢Ý¥ºŸxŽ_²ÐB·]ÀH4Æ#ø®xᎽ!žõ\;´ ¯¤#M™jµ%ˆQưµwŽ®^í]î¤åÏÛN]Ä×8/üçY¾òÚ‹oÓ+3@áØ½ý\¸Ü¹-¢$UíJŸ|ªä~hÌ‘ÙÇ甀&µ)Šg­Ùü„XC¹ÏÍ;ô<Óhž•–z[! ’´®*]‘n¢X)P0J+‹ò:’'Ä¿ŠP@]”`OŠÏ*ê(£RÞ%Õw0ÄkvyòǹÔ.)½zµãa {¥ À_íöóŒt è¹&­½qã}¢oêDÈÙ(g¦ñBHŽK+£7Á*ÃÜÉ«“ö‡ïÍY£–Ö ¾nNgí# H ŽB©ù X?]Î:ªcìJ9|bµ¦x‚|aƒ¬¤±£Í¤}í@•Æøw<¦h÷N®þûÄ;Pš%ì ši££ùEVx}ýM¤œ?ITBØ–…ïëñ¯áÍÈçµ²~í:óýÖ&S½uC®J»µJU\!|Vª{ŒÖª&žàEôº~ p1_›Ç7íü,BZ*6¥`kss\’¢_æìMÔôç6×uQN–j†¥ÖšZžr´móppTezy!¤¡ÙÜ<‹Ó”OEËVŠÍ/f¼*ØSî¶R[‡¿(‡æ}Ë“Ë YdÅ7>êkÜàjÏÜéù])=SaáÀ¬gdD¥KP½BŸÙ]oYÚ™‰¯rê¥n¦ök˜ÇI<)Ó>š?Š™Îp¥ôóƒËFv Ýpn dW+ä»sjoSS¦¥“ï„kšÎ1x-›Á†Ø@XäU—vФº*§«Á–rNPÿ=ULæ&îë®q`˜NšžSÅ,&×Þ R"éñÜóa°¡¢¦jÛQ¬ä"Taii… ã¢?ÖÓR¥× ¢ {µ´ІƆ!Š0Èv ÇT¹³±ÏŠÎïÁ»½x›¿Ò¹j옞¯¬S99ɺã­&âb†æ+×WV&¥‘â×YíÏVýPO©°ÿaIɰÒ·D€€²í×j“VØû¦hï T/F½ŒOÅ’çÚÀÌB¶!J~GD—mŽËíÚGoDQ½àŠUÀ2:ƒè'/ò‰Ä¶Š±Ê~Ç¥€ávzVÉž‰Ú‹;)9Õ™Ø{™×,/ûˆístË1DãµsÝM5¨Ó,þò<¯kÏš.9ÍÞ© ÜœÙ,\“”âϱs13H W¿3(&5l‚6"–‚~æ2'”ÖÞX 8ecºÍÝÎX;kÄæà óBĈÊÉ+—êH®0ºŸoTºN gmâ­‹iZ’.‚h»—‰ešÂ^ö··ü<ü€r…œ{~¬,CæòÚKÅ1jsXë«#’Ë¡C%JøDNŒØìtÛ#2Ú<ã]i„ÜÞÅ~µ”óXY‡J¦eh*þ—, ¹}&=¶M ùS^Ìú^åOÕÒYNóÜ¥ÿpd¯„µ€q}\¸“~ÿt-'sÃd#íÃß~Xù'AKÅÝfÏÇ1RáÿHüw¼±xãewµ@SYt¤bòב±(’¢oË—.Ö.EŸ#ƒ{‡4¥¨‘0 i&¬úÄ›ä Ò(.Ÿ Ô-™ÒTØ ˆ…ŸûÑMޝgœ^%ÚÞæ#ã=qçÔ©POYÃ×.Ùž`ªŽ—´4¹œ°^ñŽzh‡"iwàâi| &úLR´ÓÿP°U6Qzv¥±é\”-¿9lªJ Ò;G—ä{E@gÊó·{_C´Rÿ0{²²S]¿NÌEËθœB"-¼§M^bñ„ðû•à?ÎìÃ(PìÈÚÈ«üFº4Ø€ÁN‡-´SÜ $ºËMu8ÃgkCи© ô¢îìÈÛ¬ësž¼Ý;öí¹ÙoW dõCèžø_g`M~Y‰U¯·¶ìþ4æ}! O´Z®gY{ 2ò¢ß³§¬Î2Ì(p9¼Í:ŒÜÇhºœªÈ  µ±’ñîz"{Ðl‹*z‡òàÔÑñÚ¹ú]J­Y&É:ͪpðÙ pøàŒÉA¸ V*I”Ìî}Ìòèüî/¨®ýö<á&î&¯×о9îÈO_ÞÞ¬” _¬š‡ÚzŸ›_—Ä©tçt5Ô;àÃÛË Rd‚š%®žv}n„ìC3ô¯Mý¥-8ì¬Th³ý«7O+‚¯Ixˆ{ÌÝ¡”vØþ’ëÈïwÀ(ãŠÀéëV¡™ |sJå @[³‹Ô&ÈR«ŸlÚÌ$ í  èþ¿0èSÁ€C4üo©±îábðΚ8Ax¯ Ó€™+ H¸-éQÞtòØAÖŸGŸØ-[s4ñSY-€–µm.E8ë4~ÑìG³ì¨ÄP¡hªA£Œ)Eû_)}6œ \¤&u«Bµ£y©þ ‹0EÜäâ4]è ‹ÞŸÈáKæxߘ᳕HEÂ0Ò7`¶={ ó,Ô<øî7:IL"ê'!ÑþñÑšd·ðDNC¹8Ë~br$³ÈˆsЈcz:§'¤Ó]ºL?=÷7ùRÝ••µ´¹5¯ÃAŽÖÔ~ø $AäÝ\yöPM»Ä(Ñhæ taÎ1Ӏؔ²8ÂÏËd;È®6QÛ“5Õ¤ÛT EüMs—¶P¥¥½ë®èùœf`²dTL¹‚v½Å‘ܘ923dÃÕ¨È"Br¤È­4\Œ˜S&bž=‹Ò·0sA}à ¾<”ÝÀÄÌs#Eíô'¸·~Jðˆ•´WÎðwß÷7¹\üæN{ÈJ%>ùôÈ~= Û#F—¦BœãBíÉ_A׊PÓàÏñ Æw¦¸ë++`±šÙÉWUÚ½¾`V‡ÛQZ.+`A}~¡ÜÁ$÷Kž¯ú-¾ÕPF®à]ôb¢Áü1Åe+KúŒï•öOØÚr¶öo¬G¶É¯N¨lšÅ$AŒÓZ#VoqmÀ}¥‘¹ í5Œ_›7UŽV1y³ÝßšzB?!×§U¦´‰)‚>_„˜o·Š9OR¤²4ç&Ž#’åÀ¶¶ïÿìù¾@È󌃮æ`”k(쫳ÄhšRc|+½˜ñë9¬âˆ…,8qsše@–W¦èä ÿgDaQx· zÕàê•Ò·y9ڤɽ ßšàÂhÜ~ƒ]JŸ.N'`æ¨;† “á·:žI¦w{sb¬Ü·cU™ <Íð &9ò…§/Áëbà ²ƒ@-Rž£{EîñÌ&Àü=U ­­±FJ­W¼%¨VÒ%0n?höJ¢úŽ+/ú—LøK°þXB¿ˆ“å¯ÜÿT'½q²ºh‹~Žäå–qD4Ú¶W¾uÒZ…¤™`Åÿ0¹b¯¸‹ÈVKì’MõRq2UŽe8¢(/“åîoŒ£Üi­Rv&ðþß|°«JYå‚dŽ“qC$œæëZbüA០ñuûÒ–Ô<3h#0d)€‚"§•h€úùŸÄŒ#¥¥œÎj Á[yCK¬1Ñ1g–KÓ¾´,€d56‘åvq2¡–1Õ³é+µTv<Ôc«†o þz¥²ÜïHÓtvmÆ…w8»Éô¤Þ¨ÅÙÄxêFî&JJ©«¡Ž¯L¿t[sÜîUR€¬añ°ž1Ô]8ý¢Äw3kÇŽ„ݾk˜~ó)xÝ“½þ¯ ÇX4Q¶:LdB(m>æŸä|ßɨ¥×ñýe¯$¤¨>ÏS”TŒ¶ií0€ùµ¹fÇ_õK;ÞYY96r0(ß…o:Ç0¢/ñ.,ûÞf©ÄÈ‹”,™#< ŽÀóï%FÙ ›GT^BÔSzCsøƒs¡¶‹lÀdÙÄ„ °È—aÒÀM¼Ff¾wŸ ûéTµZZ|ÅOMœ™énåà›¬®!Áüâ|®-|Áb'yg­c,Šð”eGã>7Q”ìr잌h è—K•‘¥{@ôá¹¹g“.ÑÃæ…áùž7áI!%YPÌ줽á׿ÿJ¦U¿ôà“[b—÷ÂpKJ­@¨åµö ׿<å',ÙÖ"ÒÌeY7!…ýkR_ü7å³›OÖòódw>ÞÈ™Ž}BBlãL§1ª â‡}2™•ÖéÆþPG[€ÐÑëöVAv¦×΀JÌà Qk#Šdk™o:H¢¶KÎÁÌçƒ/´gÌ+"†²+ΉARY FüŒ-äÑezmº“k@º^pgR¡BG¬ÊÙfi$ºïY€Y0à òC‡ŸcŽ @­?<€çÿ,Ÿ8©.Å6 z\êOÌÜòE@¤•l›2íꥰÅäz`~¾‹-Æ«²¼ê»Lm懫%%›:µSÜÛ‹êD›£­ÏØÔ=õ´ÊÚ¨Á}(¶š^â3Ú½î¢5é$™}uñ¼fJfÓfË´y[/é,+†÷C „©c´¢vb‰‡âÌSq™b¢k—Ü €²ú::׸™pK=fx¹Ev!„uhaSqUOÆ>ø€Q ’Œ|–]¸ÁøD©Øë]„zkœŸæBz"àûè¹Ñdƒ¬¦9ꑊwÂÕ?IEVô³šÉáfËUé"=J¾/‰êÊ)…©Aóp¸Þ¬>¸Ñýì ‚|PHTÁ_ÿÍ+ûKUÌYtQ±emN#šS±´t)ÛÒqò)^ªdê0Š:ZãÍ‘Á_76€5´QrgXȸ¬G1ûnzó©j†îžJ· -}%²,¡sO̰“]µ¯x}º„\z@©4|Ž…M™†ŒšÛ:Ž3i(ü;ضDûR!‚biœÜ<’H&f\÷,3zŒçW)A¯à༡àéå}£9Wœò:Û¯Q- ;hžEÂâwúRgp¨5,X$’删BŒ©Ú:¦0 ⳨¨Lz²ÔÌ @­ðT(§“ö°ê+Ýz:_[3Ù¬ÍFÔhBŠñòBjN A‚7þÞ«•¼õ£is~²ö[—ÃZDWÍg¹u- æ.¼Þ¡iœ·Ä$ÀEö†eC•[tUŒÒŸªcJìH_ä6»gƒ»M‰Žð&H^ñ¹t¾R3ÈaL¶tÌmñãÿSˆÃûè«UKÛõ²DçÌ%2¢è:àÝé†^Uè,êÓþ/bKçÊþamJìÉÇŸô!Šê¦ìƒT®KÚ´KÆ€>Ÿlñ¸–¡W2HÚØ×io«eÇ5g9ÛbÔ»@5E ó3Ë÷s¬óI™%âv5 ä&NÚp¿]ý/ÖÔ£…8ØÄg\ÄM½<Uèxœîp<¨õ™îQö½Ñ«núTŸq½¤h5têÕÐH3Þg§*©‚Þ¨ñ’Z`k=Ó6k(G"†õh3ݦcc6_Àê%{4û¥_tJ´õðØÐ¬MtmuÿS®Gþ |¢e†¿Ú½b@šëö#5ßßœÁ)Y ¼wòpæ5ðƒ‚g…fÉ—ønŸ‘›eMy—{n ïÒ!³äž¹OŸxÇÏÂaL®v¶õ}ÁH}Ž89 t‘œ5pàð¬¥{Z~*ÎR.‰³ÉÓn¦I„‰KE/qÂZ¯ÇJêÔ üo:ï:º—Ò4žœ”¹†7y7÷`®WöÜ*Ì€w\tÕ)"꺠ïq"¹ÐnnlÍ~6“€è|¥|âÁ;©¦–ÔbUÃû—¨Ý"¤”3؉Q#Aò¡1x–ãcé¦ÕæV‘LR¥Õµ(&‡Mtöÿ1!Q‹¤ÑÈ6uNþŠNÖ\+MÜ„˜¯„†jêv‚•ż.)ÈØ ºu ]kcûóôhÙ©Ä©’/ È[Î!Šaz3wÝ5ÕFSnuw2Hs‚ :—”~8¨^’âÛ/TŽPòàû¾ÁÈ PBdøTbµòã?u3šG¥ÁY¿¿Ÿî¢Å¡¦6Rá+g Ùjxf¸ƒÈȪ?,ü”±1úÎh8Ãã´hns/ô1ôçÞ÷CÒä¦TÍì—€;º !Û>@”6›è±hô»m¦ƒÞÇcjÛQå @¤¬2’<ª,‚ßjömt5dnXÑe1Òîx5V@j;ñwJÿ]̧<íøß¶>‚náú™ÞB-zÄ©8ïýô“à ùÍ£Ðã`<ç¾"nQv8%ÏÑø£¥åL¤ï¼rQn9hV¦¡™”ãƒêXæÄÚ~Ný­3ÄÉÖ˜}šPHYõõ„m´ìKC`ßÔ‡åŠg1¾eF!ú<™1ˆséÂLñb˜°&£`Z=N%ß!Áú»zG_nuVvy3¬¦¾n] ENÆD·ë¼¼µ»}™qgâ E;d‡þõvûñ6·`¡­ MOƒÝ@@íŠëêmù†„x¸3Arb±ån˜pa»3ïö·£ˆ—7PsO§¬/ êvÈôVëCƒÉDէ牧ýÁ›“®Å7hz% MøžñÂrôSÓ͈Âlþ€,VkÂ~5Ú’FÜ“ÂxZÓùi Úß»‰œ(`%û·8Ò㔣 h€F)¾ñR±‡$…p} Ôú»ùåô4÷IÛ(m}#3 ës!Ó‰ùþ¨íÙÔ¢"B­é“[æ”]ápßËln_¦÷ŒÈ‹¸õiµk²cª!œÄ•š Á!ŸšåC>x‚®µøat°Kb²zEªËHTߤSÿLv4¾D¥»¬[\ã¥y¨?/ûôB¶û!Ÿâv–îž´[sÉù NÜUšÜ˜¾n6…£•lÒsëw‘hý`—oìÞ§@ƒíR`ÏúF/ `ê_¾*Ê=éÁ3¯‘«5pWÜ´3tà–-X˜˜H¡Žhc@‡~k"€©bäÕŽ™þ°01žaBô‰”áùPcy'ŠÇ“È$œøWVÂ)höÛ½ïÇ–qÕ&(áÁ.%F5k‚gÔ3Ô;GôuûD¶ÛÜJÄÿg4– Kd '  ÝöÔ:‡£.Ñ^m4_©Bœ²zIgÜŒ9zL„–6& ™ ÷@¹ƒÄ¶6ñú1éCtèWéÆñ;SëŸGvñó(@Ð$$ «^: Uѵ׀mÂ-Û¦ÌS>°1K[qkc‡ÝˆŸn)¿·#G3<ÍÀ¡´›‘{ ˆ~b›/¦Á âH=çc,b\ÚªžZ›Xt{j~2ø[=*!ñóCêô­Ú〸°°Xñ5ˆ/˜fÚ•;‰ùò¯R$ ¶Nt½òñÆ'#„NâוºøøeËKӺ܎ûìc¿Ð''ù'É‘2ë6ÇêuŸê2Ç>Ó³$Ó}O­  +îðvž·$C$YF¢GÕ#Jõm‡±¨ ô8¿oPSÑ-'øRÊœ¨z¢CM Bç°ù¬ÂEhìám„C=…Nf“q¸(1fŒ à ÖmáC0ÑÚ'‘…5q6‰Z&<`‰£.ˆ,Ø(€2¼¦a£ÐŒšÿNñj¡mp"Á[%oì½åÕI±jß^p):š½äÑíƒÅÆOk[Ä_Ìí×(pOóü Z¯éA…wõœù“\7BsKö:V3ÔÿVƒ÷ÅßÞ/ÖDÓ’-0¢÷1)…œÄ.™œÚÔJÜ9báTQlSØ>‚¨©4vè.¶ÜR€xØZÃÜèjD›cûPM1Í速t©öZ)ˆZ¨ùHy>Þ¿Ö×ëXÒx.ÏJì¬;¦0NÑHáÞúV?žM%;ÌȈù®Ý!ñc&u Ã5£Ë ’»ØùLê6_~½ŸÉÑ-Õ©õöÄ®dPN6>•— ‘þ#Ëÿ1$¸Ýüpš¼%p}ݬ<¨Þ!Î.ÄTèÛ\§AÓÞÀ“é]z=¸O+óýC@ÙbÚ{Vž9y ›Áú_þ®94uʼaAùvÃAµ0+Ö(¶¥ BÖâÌZ죷²ì7€VX¼€1‡ªÐýNFlÄ=g?ÍÓÊÂTzwýPÆ}PÁWÏ™â}+?ÿ6E*4_='79ÆÊ!¡Î¢!~ÀPëO%O7<‡ô"ÇV ú«a9/ý{"ÁÏõÈ´ø^ÒÇiY¶Û¶Œ²ä| gDÿù”CÎlÓÇšågÂÉÉTtÒkïzàó¶¤Wª%ª¦ÜqmËKmì¬Èi’Sa•Ø &;™„üÓHV\I}Ò\±Ô˜ìÛŠìêáþeò¡@å–hiþªñy·»AúM“ÚqíaúL¨z_Õ¢ÜGgÚÕÁv^ÝÈzÂ.÷©DYT£QHØŽ{aJ¼C|ªg¬XŽWüäŽTà)n–0è"h‰ò?œT„aÎÄn<‚5üÞNý£–„jÔŽ8'•~™)ðº`/Jæ2"vô´ä^ßñW,ÿRŒ?äiv€›ð²È(󈫔èF ¿O›Ðï͸êÛßr‰¡ÎÄZÌ=‡·¯©±?¾˜£¸*¢sqø'¸¹PM~}W!ÀÊïçWïÕÂ(aÀ¦+YöpK¡•c¢ðj?ÌOd‰Ô_Ü@£`Lݬ ]nƒ!u+¥è1WOÿ_€XƖ®÷s?oÛÊ T¢p~w‚’»¡ ‡òVåƒiÌÂéòšnçvÅå=Ç—2᣽+¬z©/5aC²á…™6Ÿƒ{Å%EöØ×C ´¬Žƒ±Ž]K–’hä´ïsGwÛì˃؈c‘ªÿƒüOX¿é%¶.z6Vš5è§ôÓk®N °«šö#]œæ8ö…N4éól»X± НaUE†Lp¿i„7}g‰Ԇ!úo”—£°|RDÏ‹$i¬ßu¿æ¦j€.]bž_YEôSl`©ˆÊRþA¨O®™‰ÜõÉŒîƒVì1eÒvÈÕâЊ^{…¬‘ñõt‰½›9ô¼£ì›—þVØ™ŸáåÇ’ÏíЕe×P]JUN†#W²IlT>«KÓÖº"¼fó Àe÷µÃ`æ¦7††ÍH[^H—×5n[M¨Ñß5˜"¬8¶/v==ç˜/yä ,t€ éËz}õÊþw[é 1Õt…vÁŸ8ÇYÆJ´ Ö§}wêáAm²¼¸FÖT0¢zìEI£aNéóð±xG‚°êoÕ–Jßòa$h Ì‰ÚÌ~²Ú—ñl=ß OäîoöjtÁùu·‘Ôhfžj»Êmǯ7ËaãϪæ/­PhW…·l‚Ç–vˆ³Ú˹1*³‰î9Þ—aÏðY«P'As=L—’ š$X-BUÚ-/ëï‹…»T@ôšt›=@Ð!Kœ÷BLØ2æO1ä$º†mƒO¯¡`dªÄ¢ºˆ¼ðGh"®ŒjNW*ܸ«þ’ bA´'FÂX•)¦2a¼8K› rÐ#Q©ê•W!k;ð §ùŒ8J2¦3öc®jêKÒñÑÎ4Ú#5ØDQ4‹ ®óáþ®Âz÷}Y½‹cÒŒ‘»úyO/›%„s ü£%cé“}ÕêJ¢Ó âZY÷¥Ÿœ– @îÓºd±ÙéììÛ”ä¹JDÚº_Þ÷ÓìÌÿá÷‹x’|)ÕÊå‚ð[å_òH¹.“äð5I@"‡Õ |´Ï=z/ | +Ì7ò©ñ)7ÉŽƒ)0£E„Ï`)©‰‚JNñv~)Ô_*’ ²žæIÍpž=™5+×söÛ Â±Ìï­…¥oq×8U†ÈÌñáj…ãµAÑvüõ‹rÇ^ÒùÜ ùEµ¦°Ý¿Ü1÷­¸«7¬‡hùÖÅS.¥²3κ ¿Y®ÙÒîRW¥0`JuÅ×·M2J¯Q¦-΢®¾P¹ÀîS´YB|<Ô¥¤^<Ù\'@†ï’½Ä„Bj®ç©œÛøµ·´IþÇæ+•i;^V$X‚%°»€ÖÙÁ‘1s€ é£â<ó®Õ^€Ë$dŽÙƒ®·c?VF1q>f‚wžâeÑWMÌ2~|ÆU4] ©£¾ W3ÏÒ» ³-[t¯¡FDç߀>­;HkzP° q}KÇ¢ôc—dª7’C'h>ˆ¸R좣¨bæÿz“Ýõn(ÛYXÜ3Eƒ8ç¢å-m_ ¨ý©^ÑA‹€”2’2c¤)9œ²d²à“yóß©K“s=³ëÞ€ÿAäó)ø~˜®…†Ràç¯1ëÀ€émN„ öè¶½¬ƒ|¾OÙìh©‘QY¨ÑÃW ðiR¹(¥0PØl¬+¨Ž¶$v8/i¾7´Ê! ä0"W8 1¢G•~Ð$ïT­Á*¢Ìv¢©DЍŽá6öϨßþþÄç±SFÛ»¡ÜîgZ¶Xs¾›•^@´¼°ÿvÈŠòJ<\Ú\cnU~gNM¨=å$ˆjºÖ¥$ø:ì¸AXDd%•€ÍÇc'ð ùδE€LÞ4§µeOÏÙ¶évn;᛺¬T@ã BK"bóC§ßKQŒ¤H#`ðz~—?¢½ŽûݲasVå btê½]ºÏÆ-]Qß@´Át­E5­¢Ì”¸Uµ™¦ò3™n{ÂrœØ2?Úô×árñÅï ,6“‘B¥Õ¾Ê\¼Âj”uOâ=>ºsÖÂ_Y*e`óN¯=hºÚ?f÷ìmµ#ù?Æ37é–ç—ðÞ`Ç}kÿiréß8£n.×û _…n˜x_NR×çwEl#¼…OõÉNÅÿyÀ$Ë"˜×˜äY^„xKÎï¨boÈ|ðì&½ø"õOß}1€p=ÙÛ|ÛõìÛ°s§pH%‘ÛÝâsr=²!IaƒN ê‘÷þb3ÍfÂR!¤ÛAv†­!G%?Àòžá1JwÝuÃ4îÅÌp,ryíLT§ ú‘Ñh7lÏÎ^K?{OÝ‹‹¨ ónàã9õx#·…TËAGR.jÖËà`ãWöP¨CѵŸ–¡f…·°&›òˆÅG¿Ý‚=@QoÛ%/&ØIÓ;Ñ M ³ìÉ ’÷Ì(ÉSuG¯m“FÀ¨º†úÚ À=™‡frûf†q€(ÃÐ^ªpݸdéx_.ÎLYE´J×d"I!oßx)ÍýÖÊ=bx ü[Uè®­‰ÚrÀNy ?°×=ñÕÂߺbþ™pM‹i"b6Çœâqs›(SEôþ_žÕàп!¨áã3Ý¿Ú [_¢ÐõŒ–®¨Œ6rU)4 ÁŒu°ôxTÏö² ¼%4C™—Œ+ÑŠÊydJe„Lgȶ†ï½Z¶E0ªo­u>©¨ãdJ æ&›Hp¼÷2þ8Øè>®8I±_9d…’SÕéÚr÷ۚěжn¦íÄé³LAI /8ˆŸæ+<ÍÐkñç“B!ú‰_>{¼µÌ+7½F‡ËyùÌïi˜t:*ðâÚ€)û ,w`-ârLÔV‘¯š†ŒzÇ&\LæXìa¦ÇѲ/ \IÉÇêùÎËÇØO0‚º½ÁíœL átR£ÍGw¿ñ 6õ¯kõ¡4€;p="¡†’0T:"Ú4 o„}ä6„…/ɾÔèdnاÿbïÍ­ í,΂ Ö¾ÛH øe˜?èn¦÷Æ+û¸üÈ<õì81üj:<˜b=ÞÛ·K+cÊ@n­`#!øt°z^º¨ÝèQhã¾&ýÚàÙ%L"M½ƒÆÒã&j ½×‚:ÞcZT ¸œ¿žs´bnG9ŸmÉÝí‰׌vÿ[œÏÄa¤æì4æœûgd[æ|›*y®éæK#e|w·µ«¿^¼ºÉ²-dÃ@‹,>2 Â>îû%|.Gå­ª;jÙfóxlF³‡Û‹_¶`³á x³YfÝøc ª¾¿73M§ìr¢s*ž¾‡w;‹Ç<åNà"–Ù{˜‘mýˆì/¬!¹ÿwøâÇ?‹L³“b•wz™+¾ß’I'[u¼äWí¼hkØzÆ.üã…9„b}òþ€^”X­É^tb®Š×›þ·¶ïõéý·àXp©® qÙÞ%7ŽëÍìøz µ©ßMA Ö…œŸÚí€S¨`öª&J¢Z+رó%}QŠùÒ‰«ÂQGûÞæÌ‚¦¶Iˆ ™~œ%Ž…}sЀÓ5%3±ÿ[š|˨ ¤d:eûÛ$SS-NåC©<ý¯èV¦ð©€Ãƒ·úå;÷=ŒïÞ D$ÂùºuïÙ5(´·³ƒI'õ_ʤÒ;OÂÖ{‚0惱;'ÞÚ n{Dj)*ö)2˜ h#Á)M2}nƒG§Ó8 Ö‡Ýì™°)sîÙs}ž(Ïø#¤õr™WƒWBŸ8Ñò&Žº§o61¿ç«š§×„ì²î®«N»14B hhÖ>$ ‘41ŽÆH/–‘¯¡ñ@I4à%Ž4\¶-Œ$æ´Çéjó}¬]oÔAaN®¸¦…¡gªÛo‡Àë²73ùTís®7‰s«øŠ™‚ã@½~wv¿pû¤ NÓÛ…ú}j­R¦6ñ¿Lp^½ÃéDë¶Y­¬Â ¤î”~ö0 ÃjEçI7ÀD6)LnÛft,Wàêè…îŠýÑÜ/oμ˼éŸ5xóûtp5cÜOÆ'mÞ\Ü`”†nÿ‰f‰â;îÓùâ_BŠª¡ )›5Z¿ [TLíñŒ`,s|ÚÞ-ôìY›«ý"º¹†?Mvø–¨ -×"NâU©ú?éÖ`ó|·„\‰¼ìÜäøz.ÎDo7†Ž¡ ÎxÖ¤ÿ=Ù±À¯çß-¼=O[‡:ó’å*Q,É"ºH<|‚2½&\¤c6þŸ €Zr™ìöU­}ÏVÈvêf˜’ý÷¼!“:?E£2]|\Êc?[à­–±¼ƒ¶•†,~¶ýE:€à§zÂ|s)m?(¾‘é³JQ«°LiäF,º¬G¹ÁCÌk~š%‰ƒR»Î2Xpm‹1Ãç« µC SQJ©åÍI'\l•­åWú°}-Ýo1†øÒu Õþ[Aóœr…"P3ý•eç;`$7É}fTËfí.|>¾#®c­pf~ DOÀ0Iç‘ï)å˼¦T?mÁö9 â¿Ãø†ö«@d½ø[ ®[&ý‹áŠòÜ·[ˆH¡š’•Ï.J$¾®÷àB* 2Ñw(À‰Ÿ†Xc´VêÒà“(L”’øÊŒ‚ËK ï:Ü%ð•(}êþÀ—UëþJö™ r̓`E f“ÿyD¥ƒÂßyNëš!’à¾MpIŽásß!ž•”D¤+Ä&œáÍ«aívÛ§= &FëÿOÈR©ÅÇø£7)i¬gýüû/¿QfÁ0ìDBMn#¥˜KÄN‰¶AUR8‚„å[^Eìøƒ„P j-{ãÎè…ašuV] ;çÈæ¶z†]´´´œšAýFÀYŒ›¬¬³ØæÎÈvž98t1¡˜ðY£ïݾÈ›±àG|8˜<Ä«+8s–ðgAœ:¼ÑÐ ±;LªBo’%†cÏ«^–¸·ç3ËLëMOÐ]UÁ{2O=Ï4pwq<“øýe†9äöÔ¹°DžG>ÊÍœØÑáþî9[ž–ë!/ig gû¾kÅ™ñ ‡˜þyTºVÚ5|ó8¢,aŠÆñ!hÔ`¡‘UF­OÐ5ÂGsèwÏáx~àYIÚ:5«cn9ýcjËÖš Çù³½}jÏNåÏ1°¢Ö­ö¬r¸HéâÒÊlá²-Hwý¢Åeÿ+é3G•–j&> +Ïo»™óƬù¤ú#/©é^æ‹¥z A ʇŸPî’æ¯ØßŒdjbÉ‚À ”´ ©õ$'vüªø/j.æy°U¦**Äø×û~ú=U±ÑCÂ\)x!í§<[d]ÅÆÇuX :Ï Ý†^ÔÍd :JÕ¬ÏNšÝP1²·*/Y89ûàìá ÂO›îhy‰6^ÓàxâÖ¶Uj4jóÁ7»È°¨@˜Ý¸Äè;’ŒŒuëZÒYíò>¼Ñ9çåóIÕͱ[BØ3Ùß=Ð5’Ñp4ü4AU­ªÌŽ£‘€±Q™FáCd`& HO£É·ÿe×Õ×Âç!›z‚ö;EüzŽ‡Þæz1$`<*‚ü„Ö»Á#gd ›aÒ®CLn÷µqÝ käeÈüáêè œS5(væ ëÎè8Ì™!• û“ïMP¬Ü!9m·ï®3rKýnŸÞ<€¡A8áß/“"× jTÄ:ò÷ kŸÇüs<—3º˜œ×ei‘µ®a6™d;ÚM([ú9»ñÄ%‰ÕíaЫ[Ÿ’_maYèt5N)µ‹ºíŸnùþyâÜxǶ½„ó1ûxË!R£%ÖçõT( ®q«–ˆ0ê´_ùYÍ©µn¯ ÷`˜†‰@-Àü§ §;%ËPc\ÛaP€Üü]{9÷»xÐLò \æÎU߃ðˆ„9¢­0? N’w^ç§ŠX] Zï7|oZºÝ8±G—*.R¡¤1*¢üQž§ý.µÈI²1 ”)s‘´^•Ž+VyhBn½pTÔF #}cÅ «o„~þ ! ×f{ºvŽä¼n ñ÷ây˜Òì¥th—NÆ Úfë1áêh­;MóŽØs±âfžìQ½j—­C`ËwfRD‰ªZQ;´T²ÔO;"pbd‹š Fä“òÒ†ålLlÃMÏÖ›XeÏ‹d¼ÔÂ4 2¸o85à)‚' -a»¸›Ô"¦³‹[Nˆ[»5½˜˜éèh³%€åòïùs‘1ÙÜ{ž§,Ùä%“) 5©¸"¹8šmí2B_Zø<Žl}LZþ[|‰œ_qI124¸³çÖS%Ú¹ÛJØU/­êÓ†LzÕ•ÍØ=4[4 „k†Lzæ´t[#ì8©Õ>†Â \#²µ¾ˆ£¬nlMg€ªŸˆ% óG…Á$·åœþõZh²½ñ kKÔ_D® v»=zÆßi>Š@%N&(™ó¥erÔ#¥äÞé€yÛÞ†Ãj!N¸·›p˜‰öŠlªJ‡†ß¼Ò ¥êuî[ò^H˜zal+w¾êP‚ÿ´–fÝÆŒÃåŸE í‹Ã×õ.B ªãÒðïè^ðôn‹q½y}}F)«Ñî1*Ø4’Ô=.2Æã±]ÞÙ^+KæëE—§O¸³å÷N*}š.!†mžpúã R©’×››ì#±â]…!§Ê?ÍR%š%ùÈ$VZø4¦²éRF³£NR–´ÿ YÈPÉüXò&gp»õ{ª)è^—*« [±ËÇn»ÒêǤ>¤.ÒYÈB™I+vi«;:-Kk"@iFâ1 ì;UGF îú|·:ÝsªT…þäd¡åüe*á_ᔃzʾÝ"ß6¥}(pÐ&¹‡Ì棡F ÁºÞÄlÞ”…]m´ê.wbÍs+Ù*Íi{ñò±ÍöÖèö½Þ!z»Ñ#É?£é[äM¿z[$l]¸±óÁOÔ­õ«yBpÐמ¨ciðÀùxu`ÓÚÎwÈ]¹ã<:F˜ãe¶ø*Ÿ9›ÇùrÀÐõZ^Pk3€ƒýq²ÌÊ(, ZŒÑ£iz…áLÀ˜ÓŠH‡Å^k‹X íI•,æ€YÕo¹ìŸ·DÈ¢îÙ ³Wr)›kô±?>6N)—çs~ Æ'*ùfâÔ¹cs äËð3ÔO7¡–œ@ΛipŠ=.;¡1²$D¸QÅ—âÌ`Ü[ÜÞ¬7÷®ÆêB«¸ÊB¡S.›,.@þ‰½ÿaYC_Aú«Ý¿Ùè¿s8¼õä' ½`¹>#PÇ #ÐZpçTÅ]ŵñ¢°ãJüDÊ0©Ùð2Í9`rˆ§M©=ïùS»¤5Ɔ $Å$Åz€êwO©Ÿ´fó\Ǩ{þ|Tδ‰ß¾Å¸ö…Y8=Ýî]ûe¤ÔõZ lÁR„‘(÷!—9#‰!§ý14,)rá:á’#Ø­?^3R“ˆ~¢‰äß4«œv¯ëÀöHÉGâ»-£‰ð¡<¢ýǸü(GD•+£G’ƒEpr;¾möÊ)•Öé麎ÅlÞú·¼Øþ$.7hÙ–¸ s åç7Íÿy¬¾³Îª Ä 4 ½½ÖŸZ ‹Ïû²ÎõFI‘¨òÞ%唬k“Ñžü¨Ò­øêv­ÿ6ﯴ$Ý…<‘‘Å 0,‡ÛH5sòS¶ 0 »AÛ>[N¥#r㔳„,ÑÅùpš—'ñhõs†Ý˜{}ã’àÓj}tXK ÏÏ'G¹g¡+ØË8{3™Õ èe2'å4%¬£þ F]õRþ:@[æüâLK|óÈ]D©¢´# Ê‹ƒå”€”%d]9‡§! Ë[f†Äu`1üØÁŒš·¯Eiá/ªÞŽ[àwÿ ]Î>ö @þ¾»q"ðˆAä/r ~²ýF «(©äŽqOl0»›€í^ mˆ=«Cg¥f7ˆšë¦ÑHÙ…$¡ÛØžì¯;#IJ›¿é´&`G–¦üÃLðÙNeë|_Øßø L ¦ša¦·×°µÆ¹7’q•pO¯‚¬5ÀD§Ç Cà ð³[=ý&– 5â!ñê2„yd¦efuçMÏIà0ˆ  €Æüp—ؤ"¤rj#×B na®xðòÌŠ¶+ûf ¥G¢ð› *ôò7EýÉê0§N÷AZ2è È6ØÒ/ÎÂ÷žY¾TcÀ¬®¥µÚÑE0ÑQGåÅÏ9;á!ú÷hiu“•eg3eÃúïU–[Žÿ|£¤Ì I'å>kÜlUеRQªÉǰoÊÊü/˶f%;®üüˆ¦ë¶|''4¿¨&Í oCWé’+ý\{ª™ÉÞCKð.úƒ~#°ûrHÒò©;™Ê*9GLp9âJÅ5)$î_ÚÃÞ2œD\k û³<Ú’¬ZCac)üŒ˜M à"~FºñŠ)“ª ñ/ÜUœ¹×Ù¾‚@^WYÉ ?kSI„ÏzŠ´I¦/Ѩq•Ý8…œreF('êB&ß6` CGXñ™H=Úü"šþU›‘µö¯Í¥¤DóÓ?ÊÁ4¼‡7j¯ÑÚØAZn+¿vf´Ã䆥OÓ«‚¬÷4gáþÊ;6ôÏz¥ë±[†IÉä—]¤G6~Í*:¥Fç†YTÒHÎ\H$Îz0‡'˜UÔ#œ+‘16ûFcµò‹ έuáçÊkÉüõ,¤¤7>ñ~¢w}T­õ]¿¨Pý·®ýBŠýBŸ¨˜ýDÜÿÝö„oÛWßUÖ'Ï©$Ÿ¨—õÏÔ;ú‰¸_¨9þÚ_öÝ#öÖ_¨L¿P¨Æ^çû ×ä¶F½tTêZÎ;yeÞŽW=:f3ê*‚gXÒßÕ•‰{JÔž|ätõŒ“۾惴\õ/)‘BšÔ¨àªÓ·ù£@¶@xuHÆmÏ%ýÿWØ…7”ª{øyuU‹:O<”¸{]•GSÑÌGçÎМ £ÎÊý¬¸(X–¸Ö€~Ϧµ0Œ Cã¾irŸbÒ´ÿuöw¥„Î~ÈalðFgYý*2šäz`#@¿õã:æÕ¦Œ¨3­ ÙmÔèÏ¥ÔvÀ '|<²)êåö” u}=kÕçñM|“óøt‰~ 6†Ýñÿ.•^D-Hsce±o¤´ö2*_wÿ%§È´ŸÊŠ!ø3 ÅLÑ|äDNˆM3°Ö‡÷W#ŒˆÎázl½ãÆ¢eÂ1Ð)“íí«Yˆý?‘dÓÿ"ƒÿxùÐt”öK©Ú¯òÏšÔ•¿)§Ý«ÜóÍ ×c±ÙäÇHλ¢÷ˆÍcÉšRŠß…,Rj]µ«9Aæ×T9£-õÝO¬RsêË`½íõ§ÒY”ʱOÿuâÆ“O¬f6QЗÓÇ5äp ‹vb˜''7ÿ}éézÕç¹"+ºü”zÅûµ\Ÿk,Ø”s‚ù†Œ\ú5RUKóùJ±ÀÚØÝ1@‚_ÿyjí"['lj²’—tÆÊiw‘Ÿ+¡‚Øð#mpÝ©„ãp¡[Õ-ï+í@1ÍjPm‹ø5‡OŒ¤¬FK/)8úàr)I™´Eu,QÞÏ–©þ½™[6ÏX-æHÚ.ˆ#Ѳɷ÷„ç~lúèbe´&Ú¢ÒCòsñ±)µD©NžÃ‹°^&,âï<ˆUYmþ†¦Âx5˶¸˜”ʱOÿuâÆ“O¬f6QЗ†ô1OÿtÞÔF“Å×$GB_”ʱOó°í‘!ÏÇ7Ot‘„12 R£S‚Ý…‰K@J y'†ô1Oó°QÝ‘!Ï¥9­ÅåýÇþÃ{çU±t .Ïx5è‰A/A„ƶólK¼Š›)Ø·th¦ÎÙ5BITAB‹WÝ¢!®„oÿß®„YjGr=Ôg©9t”!#®”zÀâ"Ì–OM}ŽñuÙÐDÁ÷™Œ¬_OšöQ‡¯Ë£‹=J›û•sø´Ç;쿽ÿCÄÜâÿoÿ]2âêVtÃõ=S<º¸5ë<´b'DÀá™À£ßÉ»\Âs:¨Ví%T‹Y£žJÏŽve﨔?ë¶ÙÓÐÙˆ3á±âžLyþË9?% °Ø ó â/i‰^›°^WõçÊæ«hÞ“w7Ü!(¬kèŒõ˾Ð/OgÜy[E3Š•£4íÚ帓!7v³ÖÃëõn§ÀVÖóyÈJØ /‚ÌóÎOÊï-æécŽM”bÎþ]ס7w*ôDÀ¯¥¯ÔM¹û· õ5\G_e¥ÊÈk‡ƒíÿq&?>·CˆF¢”¯ýGš¤³ñ,:dמÃÄQ…•!óëõ‚ÆKSZ°fJưý™\Éä4â&¤2µ%§ÂZá‡ü {Ñöñ¨Õ«‚dDê3s‚ EŘeÙBªpW¢Œ+N„’“Áîž ƒ $Ñ¥¬¢Üïqë“—½50½ Øþ4QÂ#‡™>-}›Í›}¼Å‚DxSD ã@KsÙÎ3ŠÂ­´Mx'åÓ§þdYÿ„ìÕ«‰ÇPª§/œW Iš>I¡í:š!zÛÖ§ÎýÖ—¥×íö+:ÖS}4õ†–©fg‘ +§À§"€™œç‘P†"ã{ͱ£ÉÑ‹ ã3î¥gR(6ðá*ßSžö€s¼{Õ¬DKY>ŠÖäÑ”<›ë užîDF õÄÿŽ_ÿrcIÀ $$¨=ÅqFP¿¬àJír¦õÄÿŽ_ÿrcIÀ $$¨=ÅqFP¿¬àJír¦õÄÿŽA­Öh ÔÐ #6ȹ§šnšìÂ3-ù"'XÆO)•Jœµ˜Æ946ÍIíc ]¿ÑCÔùÔãÊ$ÌŠ€P1ÙwÓB|+éÙÝ‘câoIù<mCpPÙs¯Fú©i8F(þùÖ¹)CNö#‹Ø¥=¨~ŸaH½<ýÆn}wèW Yc à“µø´en­°ä+æñ)8™Ú®†çcö@¿Õ¤ñyú¦!…¤è4i‚Þà›QXÁ!#›ˆÅü¨™X\+k§H8ØåOóz¸‹²¾…ãÌRÇ™7Ù$0mªWà—àY4WØÑBÌÜUen.?–Ò|VfÄ]éç•»iœà¯j;=ÏòªB¾F«Æþ?4ª&fW›!ø%NÙ (QLž'š¨72—C¨M­|žªá3$ÙiM€À_z‘C‡Ð Uµ³Ø¤ð4ãݦ<Ç^Î{úDp0 /Ý’N|ÏãÏ$1Y¤Úrk¯ ìØ'ˆŸ4X+ƒ9yëÙ·ÜÓ4z±$rÍ1:›úæÄ#–U_ì§x‰QµÄtÍE7<ÜÎo¿7qëd僣ÝÞ@V.¬i XÐÎ2 <†81’ªÓ[¾øàÞ¾©Ê¯%ËÎ…¢4}KWh}ì-úÀg•Óå¿×’©œÆŽá;#œšlüõäà–œýz˜Í柳T[ZéO÷ ÀþëfÛrýOL¡2 “g¥#T½Ï³±ÀuÒ¤ò±i¾õá’Yž^ A´\ëcˆS³ç<ï“Þ`¨ž~´ø©‹øï=ùö{?”öìîÍÇÆOy>3¦¨Dö?ï$»a.[²±tÁG•û›µÿÙicnV BðSigil-0.9.9/src/Resource_Files/icon/sgf.ico000066400000000000000000012615361321676412500205300ustar00rootroot00000000000000( V€€(~ 00¨%¦( ¨NNhö^(   #0577777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777773*  #>LXZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\[ZSF1 1S´´´¸ªªª»ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿ªªª¿«««¾´´´¿www‰> 8]ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³³³µB# 9_ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿ²²²¶D$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþþþÿþþþÿþþþÿþþþÿþþþÿýýýÿþþþÿýýýÿýýýÿüüüÿüüüÿüüüÿûûûÿûûûÿúúúÿùùùÿúúúÿúúúÿúúúÿùøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿùùùÿûûûÿûûûÿûûûÿüüüÿüüüÿýýýÿýýýÿýýýÿþýþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿÿÿþÿþþþÿþþþÿþþþÿþþþÿþþþÿýýýÿýýýÿüüüÿüüüÿúúúÿúúúÿùùùÿùùøÿøøøÿ÷÷÷ÿ÷÷÷ÿöööÿõõõÿöööÿôõôÿôôõÿôõôÿôôôÿôóôÿóóôÿôôóÿôóôÿôôóÿôôôÿôôôÿóôóÿôôôÿôôôÿõôôÿõõõÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿùùùÿùùùÿúúúÿúúúÿûûûÿüüüÿýýýÿüýýÿþýþÿþþþÿþþþÿþþþÿþþþÿþÿÿÿþþþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþÿÿÿþþÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿýýýÿýýüÿüüüÿûûûÿûúúÿùúúÿùùùÿøø÷ÿ÷÷÷ÿöööÿõõõÿôôôÿóóóÿòòòÿòñòÿðððÿðððÿðððÿïïïÿîîîÿîííÿîíîÿìííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìííÿîîîÿîîîÿîïîÿïïïÿðððÿðððÿñññÿòòòÿóóóÿôôôÿõõõÿöööÿ÷ö÷ÿøøøÿùùøÿùùùÿúûûÿûûûÿüüüÿýýýÿýýýÿþýþÿþþþÿþþþÿýþþÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿÿ²²²·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿþþÿþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿþþþÿþþýÿþþþÿþþýÿýýýÿþýþÿýýýÿýýýÿýýýÿýüýÿýýýÿýýýÿüýýÿýýýÿþýþÿýþþÿýýýÿýýýÿþþþÿþþþÿþþþÿþþþÿýþýÿýýýÿýýýÿýýýÿüüüÿüûüÿúúûÿùúúÿøøøÿ÷÷÷ÿöööÿõõôÿôôôÿòòòÿòññÿðððÿïîïÿîîîÿìììÿëëìÿëëëÿéééÿèèèÿèçèÿçççÿåæåÿææåÿåååÿåäåÿäääÿäåäÿåååÿãããÿäääÿäååÿäääÿåååÿåååÿåååÿæææÿæææÿèèèÿèèçÿèèèÿêêêÿëëëÿìììÿíííÿîîîÿïïðÿñññÿòòòÿôôôÿôõôÿ÷÷÷ÿ÷÷÷ÿùùøÿúúùÿûûûÿûûûÿýýýÿýýýÿþþýÿþþþÿþþýÿþþþÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿ²±±·E$ 9`ÿÿÿÿýýýüÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿÿÿþÿþÿþÿÿÿÿÿþþÿÿýþþÿþþþÿýþþÿýýýÿýýýÿüýýÿûúûÿûûûÿúúúÿúúúÿúúúÿúúùÿùúúÿúùúÿúúúÿúúúÿûûûÿüûüÿüûüÿûüûÿüûüÿûüûÿûüûÿüüüÿûûûÿúúúÿúúùÿùùùÿ÷÷÷ÿöööÿôõõÿôôóÿòòòÿðððÿïïïÿíììÿìììÿéêêÿèééÿæççÿååæÿãããÿãããÿàááÿàààÿßßßÿÝÞÞÿÝÝÝÿÜÜÜÿÛÛÛÿÚÛÛÿÚÚÚÿÚÚÚÿÙÙÙÿÙÙÙÿÙÙÚÿÙÙÙÿÙÙÙÿÙÚÙÿÚÛÛÿÚÚÚÿÛÛÛÿÛÜÛÿÝÝÝÿÝÞÝÿÞÞÞÿààßÿáááÿáââÿäããÿåååÿçççÿéèèÿêêêÿìììÿìììÿïïïÿðððÿóóóÿóôóÿõööÿ÷÷÷ÿøøøÿùúùÿûúûÿüûüÿüüüÿýýýÿþþþÿýþþÿþþþÿþÿþÿþþþÿÿÿÿÿÿÿþÿÿÿÿÿþþÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿÿþÿÿÿÿÿþÿþÿÿþÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿþÿþÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿþÿÿþÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿ±²²·E$ 9`ÿÿÿÿýýüüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþÿÿþÿÿþÿþÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿþÿþÿÿÿþÿÿÿÿÿþÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþþþÿÿÿÿÿþÿþÿÿÿÿÿÿÿÿÿþþþÿþþþÿýýýÿýýýÿüûûÿûûûÿúúùÿøøùÿø÷÷ÿ÷ööÿõööÿõõõÿõôõÿõõõÿôõôÿõõõÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿøøøÿø÷øÿøø÷ÿøøøÿ÷÷÷ÿöööÿöööÿôôôÿóóòÿòòòÿðððÿïïîÿíííÿëëëÿéééÿççæÿåååÿãããÿááàÿßßÞÿÝÝÝÿÛÛÛÿÚÚÚÿØØØÿÖÖ×ÿÖÖÖÿÔÔÔÿÔÓÓÿÑÒÒÿÑÑÑÿÑÑÑÿÑÐÑÿÐÐÐÿÏÏÏÿÏÏÐÿÐÏÏÿÏÐÏÿÏÏÐÿÏÏÏÿÐÐÐÿÐÐÐÿÐÐÐÿÑÑÑÿÑÑÑÿÒÒÒÿÓÓÓÿÔÔÔÿÖÕÕÿÖÖÖÿØØØÿÙÙÙÿÚÛÛÿÝÜÜÿÞÞÞÿàààÿâââÿääåÿæçæÿéèéÿëëëÿíííÿïïïÿñññÿóóóÿöõöÿ÷÷÷ÿøøøÿùúúÿûûûÿüûüÿýýýÿýýýÿþþþÿþýþÿþþþÿÿÿÿÿÿÿþÿÿÿþÿþÿþÿÿþÿÿÿÿþÿÿþÿÿþþþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþþÿþÿÿÿÿÿÿÿÿÿþÿþÿÿÿþÿþÿþþÿÿþÿÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþþÿÿÿÿÿ²²±·E$ 9`ÿÿÿÿýüýüþÿÿÿþÿþÿÿþÿÿÿÿÿÿÿþþÿÿÿÿÿÿþÿÿÿþÿÿþþþÿÿþþÿÿþþÿÿÿÿÿÿÿÿÿþÿþÿþþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿþÿÿÿÿþÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿþÿþþÿÿþþþÿýýýÿýýýÿûûûÿúúúÿùùùÿö÷÷ÿôõõÿóóóÿòññÿðððÿïïïÿîïïÿîîîÿîîîÿïîïÿïîîÿððñÿðñðÿòñòÿññòÿòòòÿòòóÿñòñÿòññÿððñÿïïïÿîîîÿíííÿëëëÿèééÿææçÿäåäÿâââÿßàßÿÞÝÞÿÛÛÛÿÙÙÙÿÖ×ÖÿÔÔÕÿÒÒÒÿÑÐÐÿÎÎÎÿÍÌÍÿËËËÿÉÊÊÿÈÈÈÿÇÇÇÿÆÆÆÿÅÅÅÿÅÅÄÿÅÄÄÿÃÄÄÿÄÃÄÿÃÄÃÿÄÃÃÿÃÃÄÿÄÃÄÿÄÄÄÿÄÄÄÿÄÄÅÿÅÆÅÿÆÆÆÿÇÇÇÿÆÈÈÿÈÈÈÿÊÊÊÿÊËËÿÌÌÌÿÎÍÎÿÎÎÏÿÑÐÐÿÒÒÒÿÔÔÔÿÖÖÖÿÙØØÿÜÜÜÿÝÝÝÿàààÿãããÿåååÿèèçÿëëêÿíìíÿïïïÿñññÿóóóÿöööÿ÷÷÷ÿùùùÿúùúÿüûûÿüüýÿýýýÿýþþÿýþýÿþþþÿþþþÿÿÿÿÿÿÿÿÿÿþÿÿþÿþÿÿÿÿÿþÿÿÿþþþÿÿþÿÿþÿþÿÿþþÿþþÿÿÿÿþÿþÿÿÿþÿþÿÿþþÿþÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿþÿÿþþÿÿÿþþÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿþÿÿþþÿÿþÿÿÿþÿÿþÿÿÿÿÿþÿþþÿÿÿÿÿÿ²±²·E$ 9`ÿÿÿÿüüüüÿÿþÿþÿÿÿÿÿþÿÿÿÿÿþÿÿÿÿÿþÿÿþÿÿÿÿÿÿþþÿÿÿþþÿþþþÿÿþþÿþÿÿÿÿþþÿÿþÿÿÿþÿÿÿÿþÿÿÿÿÿþÿþÿÿÿþÿÿþÿÿÿÿþÿÿþþÿÿÿþÿÿÿþÿÿÿþÿÿþÿÿÿþþÿÿþÿÿþþÿÿþÿþÿþþýÿüüüÿüûûÿúúúÿ÷÷÷ÿö÷öÿóôóÿðððÿíîîÿìëëÿéééÿéèéÿçèçÿçççÿççæÿæææÿçèèÿèèèÿéééÿëêëÿëëëÿìëëÿëìëÿììëÿêêêÿéééÿéééÿæææÿäåäÿâáâÿàààÿÝÜÜÿÚÚÛÿØØØÿÔÔÕÿÒÓÒÿÏÏÏÿÌÌÍÿÊÊÊÿÇÇÇÿÄÄÅÿÂÂÃÿ¿ÀÁÿ¾¾¿ÿ»¼½ÿ¹º»ÿ¸¸ºÿ¶·¹ÿ¶¶¸ÿ´´¸ÿ´´¸ÿ´µ·ÿ´´·ÿ³³¶ÿ³³¶ÿ´´·ÿ´µ·ÿ´µ¸ÿµµ¸ÿµµ¸ÿ¶¶¹ÿ¸·ºÿ¸·ºÿ¹¹ºÿ»º¼ÿ¼¼¼ÿ½½¾ÿ¾¾¿ÿÀÀÁÿÁÂÂÿÃÃÄÿÅÅÆÿÇÇÇÿÊÉÊÿÊËÊÿÎÎÎÿÐÐÐÿÒÓÒÿÕÕÕÿØØØÿÛÛÛÿÞÞÞÿáâáÿååäÿèçèÿêêêÿíííÿðððÿòòòÿõõõÿö÷öÿøøùÿúúúÿûûûÿüüüÿýýýÿþþþÿþýýÿþþþÿþþþÿÿÿÿÿþþÿÿþÿþÿÿÿþÿÿþÿÿþþþÿþÿþÿþþÿÿÿÿÿÿþÿÿÿþÿþÿþÿþÿþÿþÿÿþÿÿÿÿÿÿÿþÿÿÿÿþÿþÿÿÿÿþþÿþþÿÿÿÿÿÿÿþþÿþÿÿÿþÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþÿÿþÿÿþþÿÿÿþþÿÿþþÿþÿÿÿþÿÿÿÿþÿÿÿÿÿÿþÿÿÿþþÿÿþÿÿÿÿþþÿþþÿÿþÿþÿÿÿÿÿ±±²·E$ 9`ÿÿÿÿýüýüÿÿþÿÿþþÿþÿþÿþþÿÿÿþÿÿþþþÿþÿÿÿþþþÿþÿÿÿþþÿÿþÿþÿþÿÿÿÿþþÿþþþÿþþÿÿÿÿÿÿÿÿþÿþþÿÿÿþÿÿÿþþÿÿÿÿÿþþÿÿþÿþÿÿÿþÿÿþÿÿÿÿþÿÿþÿÿÿÿÿÿþÿÿÿþÿÿÿþýþÿýþýÿüüüÿúúúÿøøøÿôõõÿòóòÿïîîÿëëëÿçççÿäåäÿáááÿßààÿÝÝÞÿÝÝÝÿÝÝÝÿÝÝÝÿÝÝÝÿßßßÿßàßÿâááÿáááÿâââÿâââÿâáâÿáááÿàààÿÞÞÞÿÜÜÜÿÚÚÚÿØØØÿÕÕÕÿÑÑÑÿÎÎÏÿËÊÊÿÇÇÇÿÃÄÅÿÀÀÁÿ½½¾ÿ¸¸ºÿµµ¸ÿ²²µÿ®®²ÿ¬¬±ÿ©©¯ÿ¨¨®ÿ¦¦¬ÿ¤¤¬ÿ££ªÿ¢£ªÿ¢¢ªÿ¡¡©ÿ¡¡ªÿ¡ ©ÿ¡¡©ÿ¡¡©ÿ¢¢ªÿ¢¡ªÿ¡¢ªÿ££ªÿ££«ÿ¤¤¬ÿ¥¥¬ÿ§§­ÿ¨¨®ÿ©©®ÿªª¯ÿ­­±ÿ¯¯³ÿ±°´ÿ³³µÿµµ·ÿ¸¸¹ÿº»»ÿ¼½½ÿÀÀ¿ÿÂÂÂÿÄÄÄÿÇÇÈÿÊÊÊÿÎÎÍÿÑÐÑÿÓÔÓÿØ×ØÿÚÛÚÿÞßßÿâáâÿæææÿéééÿììíÿîîîÿòòòÿôôôÿöööÿøøøÿùúúÿüûûÿüüüÿýýüÿþþþÿýýýÿþþþÿÿÿÿÿþÿÿÿþÿþÿþþÿÿÿÿÿÿþþþÿþÿþÿÿÿÿÿþÿþÿþþÿÿþþÿÿÿþþÿÿþÿÿþÿÿÿÿÿþÿþþþÿþÿÿÿÿþþÿÿþþÿÿþÿÿÿþÿÿþþþÿÿþþÿÿÿþÿþþÿÿÿþþÿÿþþÿþþÿÿþþþÿÿÿÿÿþÿþÿÿþÿÿþÿþÿÿÿÿÿþþþÿÿÿÿÿþþÿÿÿþÿÿþÿþÿþÿþÿþþþÿþþþÿþþÿÿÿÿÿÿ²±±·E$ 9`ÿÿÿÿýüýüþÿþÿÿþþÿþÿÿÿþþÿÿÿþÿÿþþþÿÿþþÿÿþÿÿþþÿÿÿÿÿÿþþþÿþÿÿÿþþþÿÿÿþÿÿþÿÿÿÿþÿÿþÿÿþþþÿþÿÿÿþÿþÿÿþÿÿþÿÿÿþþÿÿþÿþÿþþÿÿÿÿþÿÿÿþÿþþþÿÿÿþÿþþþÿýýýÿüýýÿûûûÿùùùÿöööÿòóóÿðïïÿêêêÿæååÿáááÿÜÜÜÿÙØØÿÖÖÖÿÔÓÓÿÓÓÒÿÒÒÒÿÒÒÑÿÔÓÓÿÔÓÔÿÕÖÕÿÖ×Öÿ×××ÿרØÿר×ÿ×××ÿ×××ÿÕÕÕÿÓÓÓÿÑÑÑÿÎÍÍÿËËËÿÆÇÇÿÂÂÄÿ¾¾Àÿ¹¹»ÿ´´¸ÿ¯¯³ÿ«¬±ÿ§§­ÿ££ªÿ  ¨ÿœœ¦ÿšš¤ÿ——¢ÿ••¡ÿ““Ÿÿ‘‘Ÿÿ‘‘ŸÿŸÿŽŽžÿŽŽŸÿŽŸÿŽŽŸÿŸÿŽŽŸÿŽŽŸÿ ÿŽ ÿ ÿ‘‘¡ÿ’‘¡ÿ’’¡ÿ““¡ÿ••£ÿ––¤ÿ˜˜¤ÿšš¥ÿœœ¦ÿ§ÿ¡ ©ÿ¢¢ªÿ¥¥«ÿ©¨­ÿª«¯ÿ®®±ÿ±±³ÿ´´µÿ¸¸¹ÿ»»»ÿ¾¾¿ÿÂÂÂÿÄÅÄÿÉÉÉÿÌÌÍÿÐÐÐÿÔÔÔÿØØØÿÜÜÛÿàààÿäääÿéèéÿëìëÿîïïÿòòòÿõõôÿöööÿøø÷ÿúúúÿüûûÿýüüÿýýýÿþþþÿþýýÿþþþÿÿþÿÿÿþÿÿþþþÿÿÿþÿÿþÿÿÿÿÿÿÿþþÿþÿÿÿÿþþÿÿþþÿþÿþÿÿÿÿÿþÿþÿÿþþÿþÿþÿþÿÿÿÿþþÿÿÿþÿÿþþÿþÿÿÿþþþÿþÿþÿþÿþÿÿþþÿþÿÿÿþÿþÿþþÿÿþÿþÿÿÿÿÿþþÿÿÿþþÿþþþÿÿÿþÿþþÿÿþþþÿþþþÿþþþÿþÿþÿÿÿþÿþþþÿþþþÿÿÿÿÿ±²²·E$ 9`ÿÿÿÿüýüüþþÿÿÿþþÿþÿþÿþþþÿÿþÿÿþþþÿþþþÿþþÿÿÿþþÿþþÿÿþÿÿÿþþþÿþþÿÿþÿþÿþÿþÿþþþÿÿÿþÿþÿþÿþþþÿÿþþÿþÿþÿþÿþÿþþÿÿþþþÿþÿÿÿþþÿÿþþþÿþþÿÿþþÿÿþþÿÿýýþÿüüýÿúûúÿ÷÷÷ÿóóóÿîîïÿèééÿããäÿÝÝÞÿÖÖ×ÿÑÑÓÿÍÍÎÿÉÉÉÿÇÇÈÿÅÅÆÿÅÅÅÿÄÅÅÿÆÆÆÿÇÇÇÿÉÉÉÿÊÊÊÿËËËÿËËËÿÌÌÌÿËËÌÿÉÉÊÿÈÇÈÿÅÅÆÿÁÂÃÿ½¾¿ÿ¹¹¼ÿ´³¸ÿ®®³ÿ©©¯ÿ££«ÿžž§ÿ™™¤ÿ•• ÿ‘‘ŸÿŒœÿŠŠšÿ††˜ÿ„„—ÿ‚–ÿ”ÿ}}“ÿ||“ÿ{{”ÿ{|”ÿzz•ÿzz•ÿzz–ÿzz•ÿ{{–ÿ{{–ÿ{{—ÿ{|—ÿ|{–ÿ||—ÿ}}—ÿ}}—ÿ˜ÿ—ÿ˜ÿ‚‚˜ÿ„„™ÿ‡‡›ÿŠŠÿŒŒžÿŽŽŸÿ‘Ÿÿ””¡ÿ——£ÿšš¤ÿ¦ÿ  ¨ÿ¤¤ªÿ§¨¬ÿ««¯ÿ°°²ÿ³³¶ÿ¸¸¹ÿ¼½½ÿÀÀÁÿÄÅÄÿÊÊÊÿÍÍÍÿÑÑÑÿÖÖÖÿÚÚÚÿßßßÿäääÿèèèÿìììÿïîïÿóòòÿôôôÿ÷÷÷ÿùúùÿúúúÿüüûÿýüýÿþýýÿþýýÿýþþÿþÿþÿÿÿþÿþþþÿþþþÿÿþþÿþÿþÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿþÿÿÿþþþÿÿþÿÿÿÿþÿÿþÿÿþþþÿÿþþÿþþþÿþÿþÿþþþÿþþÿÿÿþþÿÿÿþÿþþÿÿÿþþÿþþþÿþþÿÿÿÿþÿÿÿþÿþþþÿþþÿÿÿþþÿþþþÿÿþÿÿþþþÿÿþþÿþÿþÿþþÿÿþþþÿÿÿÿÿ²±±·E$ 9`ÿÿÿÿüüüüþþþÿþÿþÿÿþþÿÿþÿÿþþþÿÿþþÿþÿÿÿþþþÿþÿþÿþþþÿþÿþÿÿþþÿÿÿþÿþÿþÿþþþÿþÿÿÿþþþÿþþþÿþþþÿþÿþÿþÿþÿþþþÿþþþÿþÿþÿþþþÿþÿþÿþþþÿþþþÿþþþÿþþþÿþþýÿûüüÿøùùÿôóôÿïîïÿççéÿßßáÿ××ÛÿÎÎÒÿÆÆÊÿÀÀÃÿ»»¿ÿ·¸»ÿ··¹ÿµµ·ÿµµ¶ÿ¶¶·ÿ··¸ÿ¸¸¸ÿºººÿ½½¼ÿ¾¾¾ÿ¾¾¾ÿ½½¾ÿ¼¼½ÿºº»ÿ··¹ÿ³³¶ÿ­­²ÿ©©¯ÿ££ªÿ¦ÿ——¢ÿ‘‘žÿŒŒ›ÿ‡‡˜ÿ‚‚•ÿ~}’ÿyyÿvvÿttŽÿttÿrs’ÿss•ÿss˜ÿrršÿoo˜ÿkk“ÿhgÿdc‹ÿbbŠÿ__…ÿ^^†ÿ__†ÿ__‡ÿ__‡ÿ``‡ÿaa‡ÿaaˆÿccŠÿffÿjj’ÿnn–ÿssœÿxx ÿyyŸÿzzÿzzšÿ{{˜ÿ||—ÿ—ÿ—ÿ……™ÿˆ‰œÿŒŒœÿžÿ”“ ÿ——¢ÿ››¤ÿ  §ÿ¥¤©ÿ¨©­ÿ®­°ÿ³³´ÿ¸·¹ÿ½¼½ÿÁÀÁÿÆÆÆÿËËËÿÑÐÐÿÕÕÕÿÙÚÚÿßßÞÿääãÿèèèÿììíÿïïïÿóòòÿööõÿø÷÷ÿùùùÿûûûÿüüüÿýýþÿýýþÿýýýÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿÿþÿÿþþÿÿþþþÿþÿÿÿÿþþÿÿþþÿþþþÿþþþÿþþþÿþþþÿþþÿÿÿþþÿþÿþÿþþþÿþþþÿþÿþÿþþþÿþÿþÿþþþÿþþþÿþÿþÿÿþþÿþþþÿþþþÿþÿþÿÿÿþÿþþÿÿÿþþÿÿÿþÿþþþÿÿþÿÿÿþþÿþþþÿþþþÿÿÿÿÿ±²²·E$ 9`ÿÿÿÿüüüüÿþþÿþþþÿÿþþÿþÿþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþÿÿÿþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþÿÿþþþÿýýýÿûûûÿö÷÷ÿððòÿççéÿÝÝáÿÓÒÙÿÆÆÎÿ»¼Äÿ³²¼ÿ««µÿ¦¦¯ÿ££«ÿ¡¡©ÿ¡¡§ÿ¡¡¦ÿ¡¡¦ÿ££¦ÿ¥¥¨ÿ§§ªÿ©©¬ÿ©©¬ÿªª­ÿ¨©¬ÿ§§¬ÿ¤¤ªÿ¡¡¨ÿœœ¤ÿ——¡ÿ‘‘žÿ‹‹šÿ††—ÿ“ÿyzÿttŒÿqrÿpqÿpp”ÿll“ÿddÿ\\ƒÿMMqÿAAbÿ22Nÿ""8ÿ)ÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ*ÿ!!4ÿ//JÿCCcÿPPtÿ``‡ÿmm•ÿuuœÿzzžÿyy˜ÿzz–ÿ}}”ÿ—ÿ†‡™ÿ‹‹›ÿÿ“”Ÿÿ™™¢ÿžž¥ÿ££¨ÿ¨¨«ÿ­­°ÿ´³µÿ¹¹¹ÿ¿¾¿ÿÅÅÄÿÉÉÊÿÏÏÏÿÕÕÔÿÚÚÚÿàààÿäääÿéééÿíîíÿñððÿóôôÿ÷÷÷ÿøøøÿúúúÿûûûÿýýüÿýýýÿýýýÿþþþÿþþþÿþþþÿÿþþÿþþþÿþÿþÿþÿþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþÿÿþþþÿþþÿÿþþÿÿþþþÿþþÿÿþþÿÿþþþÿþþþÿþþþÿþþþÿþþþÿÿþþÿþÿþÿÿþþÿþþÿÿþþþÿþþþÿþþþÿÿþþÿþþÿÿþþþÿþÿþÿþþþÿþþþÿÿÿÿÿ±±±·E$ 9`ÿÿÿÿüüüüþþþÿþþþÿþþþÿþþþÿþÿþÿÿþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿþþÿþþþÿþþþÿýýüÿúúúÿóóõÿëêíÿßßäÿÑÒÙÿÃÃÎÿ²²Àÿ¤¤³ÿšš«ÿ””¦ÿ¡ÿŒÿ‹‹šÿ‹‹˜ÿ‹‹—ÿŒŒ–ÿ—ÿ˜ÿ’‘šÿ““šÿ””œÿ””œÿ““œÿ‘‘›ÿ™ÿŠŠ—ÿ……•ÿ’ÿyyŽÿss‹ÿoo‹ÿnnŽÿkj‘ÿddÿUU{ÿBBcÿ()Aÿ(ÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿ)ÿ**@ÿJJlÿ__†ÿpp™ÿvvšÿxx—ÿxy“ÿ||“ÿƒƒ—ÿˆˆ™ÿ›ÿ““žÿ™™¡ÿžž¤ÿ¤¤¨ÿªª¬ÿ±±²ÿ··¸ÿ½½½ÿÃÃÄÿÉÉÉÿÏÏÏÿÕÕÖÿÛÛÛÿáááÿæææÿëëëÿïîîÿóòòÿõõõÿøøøÿúúúÿûûûÿüüüÿýýýÿýýýÿþýþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþÿÿþþþÿþþþÿþÿþÿþþþÿþþþÿþþþÿþþþÿþþþÿþÿþÿþþþÿþþþÿþþþÿþþÿÿþþþÿþþþÿþþþÿþþÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿ±±±·E$ 9`ÿÿÿÿüüüüþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþýýÿüüüÿøøùÿððòÿääéÿÔÔÜÿÃÃÏÿ­­¿ÿ¥¥¼ÿšš¶ÿŽŽ¬ÿ‚Ÿÿzz–ÿvvÿtuÿuu‹ÿuuŠÿwwŠÿyy‹ÿzz‹ÿ||Œÿ}}ÿŽÿŽÿ~~Žÿ{{ÿwwŒÿrr‰ÿnmˆÿkkŠÿkkÿccÿRRxÿ55Tÿ0ÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿÿ ÿ%%:ÿEEfÿddÿttœÿuu–ÿvv‘ÿ{{’ÿ‚‚•ÿˆˆ˜ÿŽŽšÿ””žÿ››¢ÿ¢¢¦ÿ¨¨«ÿ°°±ÿ¶¶·ÿ½½½ÿÄÄÄÿËËËÿÑÑÑÿ×××ÿÝÝÝÿãããÿèèèÿìììÿñññÿôôôÿ÷÷÷ÿùùùÿûûûÿüüüÿýýýÿýýýÿýýýÿþÿþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿ±±±·E$ 9`ÿÿÿÿüüüüþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþýþÿþþþÿþþþÿýþþÿüüüÿ÷öøÿììïÿÜÜãÿÉÉÕÿ°°Âÿ¡¡¼ÿLK_ÿ)ÿ""1ÿ==ZÿPPtÿ^_‡ÿddÿihÿgg‹ÿff†ÿee‚ÿgg‚ÿgg‚ÿggÿii‚ÿhh‚ÿffÿeeƒÿff‡ÿeeÿ[[ƒÿBBeÿ""9ÿ ÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿ ÿ #ÿ=ÿJÿGÿ&'[ÿ)*`ÿ)*`ÿ)*`ÿ)*`ÿ)*`ÿ)*`ÿ)*`ÿ&'Zÿ"#PÿFÿ.ÿ+ÿ ÿ ÿÿÿÿÿÿ ÿ ÿ ÿÿÿÿÿ&ÿ<cÿ1ÿ ÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿ ÿ=ÿGÿ')]ÿ)*`ÿ/0mÿ+,eÿ22qÿ45vÿ()]ÿ12mÿ34rÿ34rÿ34rÿ34rÿ34rÿ34rÿ34rÿ34sÿ78|ÿ>?‰ÿ67{ÿ9:‚ÿ<=†ÿ34tÿ67zÿ'(^ÿ!!Oÿ,ÿÿÿÿÿÿ ÿ ÿ ÿÿÿÿ+ÿFFhÿii’ÿrr”ÿrrÿyyÿ‚‚“ÿˆ‰–ÿ‘‘›ÿ˜˜Ÿÿ  ¥ÿ¨¨«ÿ±±²ÿ¹¹ºÿÁÁÁÿÉÈÉÿÐÐÐÿ×××ÿÞÞÞÿäääÿêêêÿïïïÿòòòÿõõõÿøøøÿúúúÿûüüÿýýýÿýýýÿýýýÿþþþÿþþþÿþþþÿþýþÿþþþÿþýþÿþþþÿþþþÿþþþÿþþýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿýþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿýþþÿþþþÿþþþÿþþþÿþþþÿþýýÿÿÿÿÿ±±±·E$ 9`ÿÿÿÿüüûüþþþÿþýþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþýÿþþþÿýþýÿýþþÿþþþÿþþþÿþþþÿýýþÿþþýÿþþþÿþýþÿþþþÿþþþÿýþþÿþþþÿýýþÿûúûÿóóôÿäãéÿÎÎÙÿ°°Ãÿ——¶ÿ&ÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ ÿÿ9ÿ!"Rÿ%&Yÿ()^ÿ'([ÿ)*_ÿ)*_ÿ$%Uÿ/0kÿ$%Uÿ-.gÿ01pÿ!Pÿ()aÿ01qÿ/0qÿ/0qÿ/0qÿ/0qÿ/0qÿ/0qÿ/1qÿ12uÿ34wÿ,-hÿ23rÿ78|ÿ01mÿ:;ÿ56wÿ<=†ÿ<>ˆÿ<=‡ÿ34uÿ'(\ÿ6ÿÿÿÿÿ ÿ ÿ ÿÿÿÿ22Mÿ``Šÿoo•ÿop‹ÿwwŽÿ€€‘ÿˆ‡•ÿšÿ™™ ÿ¢¢¦ÿ¬«­ÿ´´µÿ½½½ÿÅÅÅÿÍÍÍÿÔÔÔÿÜÛÜÿâââÿèèèÿîíîÿòòòÿõõõÿø÷÷ÿúúúÿûûûÿüýüÿýýýÿüýýÿþþþÿþþþÿþþýÿþþþÿþþþÿþþþÿþýþÿþýþÿþþþÿþýþÿþþýÿþþþÿþýþÿþþþÿþþþÿþýþÿþþþÿþþþÿþþþÿýþþÿýþýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþýÿþþþÿþþþÿþýþÿþþþÿýýþÿÿÿÿÿ±±±·E$ 9`ÿÿÿÿüüüüþþýÿþþýÿþþþÿþþþÿþýþÿþþýÿþýþÿþþþÿýþþÿþýýÿþþýÿþþýÿþþþÿýýþÿýþþÿþýþÿþýþÿþþþÿþþýÿýþþÿþýýÿþþýÿýþþÿýýþÿþþýÿþþþÿýþþÿþýýÿþþþÿýýýÿûûûÿññôÿààæÿÇÆÕÿ¨©¿ÿ‚‚¦ÿBÿ?ÿ+ÿÿ ÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ÿ ÿ7ÿ!"Pÿ&'[ÿIÿ%&Wÿ#$Uÿ$%Vÿ#$Rÿ+,cÿ !Oÿ#$Yÿ'(`ÿ-.hÿ34hÿMMŽÿLM„ÿONÿa`—ÿfg›ÿllÿllžÿmlŸÿllÿee›ÿbbšÿXZ’ÿQQÿKK‰ÿFGŒÿ89|ÿ34xÿ67€ÿ/0pÿ78|ÿ56vÿ67xÿ9:ÿ9:€ÿ>?Šÿ<=‡ÿ01nÿ9ÿÿÿÿ ÿ ÿ ÿÿÿÿ))@ÿ\\…ÿnn“ÿnoŠÿwwÿ€‘ÿ‰‰•ÿ““›ÿœœ¢ÿ¦¥¨ÿ¯¯±ÿ¸¸¹ÿÂÂÂÿËËËÿÓÓÓÿÚÙÙÿáááÿçççÿìììÿñññÿõõõÿ÷÷÷ÿúúùÿûûûÿüüüÿýýýÿüýýÿþþþÿþþþÿþýýÿþþýÿþýýÿþþþÿýþþÿþþþÿþýþÿþþþÿýþþÿþþþÿþýþÿþýýÿþþýÿþþþÿþþþÿþýþÿþþþÿþþþÿþþþÿýþþÿþþþÿýýýÿþþþÿþþþÿýþþÿþþþÿþþþÿýþþÿýýþÿÿÿÿÿ±°±·E$ 9`ÿÿÿÿûûûüþþþÿýýýÿþþþÿþýþÿýþþÿþýýÿþþýÿþýýÿýýþÿþþþÿþýýÿýþþÿþýýÿþþþÿþþþÿþþþÿþþýÿþýþÿþýýÿýþýÿþýýÿþýþÿþýþÿþþýÿýþýÿýþþÿþþþÿýþþÿýþþÿüýýÿûúúÿðïóÿÜÜäÿÂÂÑÿ££¼ÿop“ÿ5ÿ=ÿBÿ &ÿÿ ÿÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ0ÿFÿ LÿHÿBÿ%&XÿHÿ$%Uÿ#$Sÿ Oÿ Qÿ.0hÿ>?qÿ\\’ÿhi•ÿ~~¨ÿ……ªÿŒ­ÿ““³ÿ——·ÿ˜™·ÿšš¸ÿœœ¹ÿºÿºÿºÿœ›¹ÿ™™¸ÿ——¶ÿ••µÿ‘²ÿ‰‰®ÿƒ‚ªÿwx¥ÿkkÿ[[˜ÿIJ‹ÿ?@‰ÿ23wÿ56|ÿ45wÿ89}ÿ9:€ÿ:;‚ÿ>?‹ÿ;<„ÿ+,eÿ*ÿÿÿ ÿ ÿ ÿ ÿÿÿ))Aÿ``‰ÿllÿnn‡ÿyyŽÿƒƒ‘ÿŒŒ—ÿ–—ÿ¡¡¥ÿ¬«®ÿ´µ¶ÿ¿¾¿ÿÈÈÉÿÐÐÑÿÙØÙÿßàßÿçççÿìììÿñññÿõõõÿø÷÷ÿúúúÿûûûÿûüüÿýüýÿýýýÿþýýÿþþþÿýþþÿýýýÿþþýÿýýþÿþýýÿþþþÿýýþÿþýýÿýþþÿþþþÿþþýÿýþþÿþþþÿýþþÿýþþÿþþþÿþýþÿþþþÿþýþÿýþþÿþýþÿýþýÿýýþÿýýýÿýþþÿýþýÿýþþÿýýýÿÿÿÿÿ±°±·E$ 9`ÿÿÿÿüûüüýþþÿýþýÿþþþÿþþýÿþþýÿþýþÿþýþÿýýþÿýþýÿýýýÿýþýÿýýýÿþþýÿýýýÿþþýÿýýþÿþýýÿþýþÿýþýÿþþýÿþþþÿýýýÿþþþÿýþþÿýþþÿýýþÿþýýÿþþýÿýþþÿýýüÿúúúÿíîñÿÚÚâÿ¾¿Ïÿžž¹ÿppšÿEÿCÿAÿIÿ ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ;ÿ?ÿ?ÿHÿFÿGÿGÿ"#Pÿ !Pÿ?ÿ-.cÿHI|ÿii–ÿ¦ÿ±ÿ””³ÿœ›¹ÿ¢¢¼ÿ©©Âÿ¯®Æÿ³³Éÿ··ÌÿººÎÿ½¼Ðÿ¾½Ñÿ¿¿Òÿ¿ÀÒÿ¿¿Òÿ¾¾Òÿ¼¼Ðÿº¹Îÿ¶¶Ìÿ²²Éÿ®®Çÿ©¨Ãÿ££¿ÿ»ÿ––µÿ±ÿ‚‚ªÿss¤ÿYZ”ÿJJ‘ÿ9:„ÿ78ÿ67{ÿ9:ÿ9:€ÿ;<…ÿ?@Žÿ67{ÿ:ÿÿÿ ÿÿ ÿ ÿÿÿ55Sÿgg’ÿji‰ÿqrˆÿ||Žÿ††’ÿ‘‘™ÿ¢ÿ§¨«ÿ²²³ÿ½½½ÿÆÆÆÿÏÐÏÿØØØÿàààÿæææÿìëëÿññòÿõõôÿ÷÷÷ÿúùùÿûûûÿüýýÿüüüÿýþýÿþýþÿþþþÿýýþÿþýþÿþþýÿþþþÿýýýÿþþýÿýþýÿþýýÿýþýÿþýýÿþýþÿþþþÿýýýÿþþýÿýýþÿþýþÿþþýÿýþþÿýýýÿþþþÿþþýÿþýýÿþýýÿþýþÿþýþÿþýþÿýýýÿÿÿÿÿ±°°·E$ 9`ÿÿÿÿûûûüþýýÿþýýÿýýýÿþþýÿýýýÿþþýÿýþþÿýýýÿþþýÿýýýÿýýþÿýþþÿþýýÿýþþÿýýþÿþýýÿþþýÿýýýÿýþýÿþýýÿýþýÿþýýÿýþþÿþþýÿýþýÿýýýÿýýýÿýþýÿýþýÿüýýÿùùùÿìíñÿØØàÿ¼¼Íÿ››¶ÿnn—ÿ>ÿAÿ@ÿ?ÿEÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ2ÿ?ÿ=ÿFÿ2ÿGÿGÿHÿAÿCÿ>?uÿ``Œÿ€€§ÿ¯ÿ—˜µÿ¢¢¼ÿ«¬Ãÿ¶µÊÿ½½ÐÿÄÄÔÿÊÊÙÿÎÎÜÿÓÓàÿÕÕáÿØØäÿÚÚåÿÛÛåÿÝÜæÿÜÜæÿÜÜåÿÚÛåÿÙÙäÿØØãÿÕÖâÿÒÒßÿÎÎÝÿÊÊÚÿÅÆÖÿ¿¿Òÿ¹¹Îÿ°°Éÿ¨¨ÂÿŸŸ¼ÿ——¶ÿŠŠ­ÿyy¦ÿ]^˜ÿDEÿ67ÿ89€ÿ9:ÿ9:€ÿ:;‚ÿ>?‹ÿ89€ÿ8ÿÿÿ ÿ ÿ ÿ ÿÿÿNNtÿjjÿkk…ÿww‹ÿ‚ÿŽ–ÿ™˜Ÿÿ¤¥¨ÿ°¯±ÿº»»ÿÅÅÅÿÏÏÏÿØØ×ÿßßßÿææçÿëìëÿññòÿõõõÿøøøÿúúúÿûüüÿüüüÿüüýÿýýýÿþþýÿýýþÿýýýÿýýýÿýýýÿþþþÿýýþÿþþþÿþþýÿýýþÿþýýÿýþýÿýýþÿýýýÿþþýÿýþýÿýýýÿýýýÿýýþÿþþýÿýþýÿýýþÿýýþÿþýýÿþýýÿýýýÿýýýÿýýýÿÿÿÿÿ±°±·E$ 9`ÿÿÿÿûûüüýýþÿýþýÿýýýÿþþþÿýýýÿýýýÿþýýÿýýþÿýþýÿþýþÿýýýÿþýýÿýþýÿýýýÿþýþÿþýýÿýýýÿýþþÿýýþÿþýýÿþþýÿýýýÿýýýÿýýþÿýýýÿýýþÿýýýÿýýýÿýüüÿüýüÿøøùÿìëïÿ××àÿººËÿ™™µÿll—ÿ?ÿAÿ@ÿ@ÿ@ÿBÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ/ÿ9ÿ,ÿ9ÿ5ÿGÿ>ÿ3ÿFÿCÿ=>lÿml™ÿ†‡ªÿ“”³ÿŸ »ÿ­­Äÿ¹¹ÌÿÃÄÔÿÌÌÚÿÓÔßÿÚÚäÿßßçÿããêÿççíÿééïÿìëðÿîîòÿïïóÿððóÿðïôÿïïóÿðïôÿïïóÿííòÿííñÿëëñÿééïÿççíÿäãëÿààéÿÜÛæÿ××ãÿÑÐÞÿÊÊÚÿÁÂÔÿ··Íÿ­­Æÿ  ½ÿ––µÿ††«ÿllŸÿNP•ÿ9:†ÿ89€ÿ:;ÿ89ÿ9:ÿ?@ÿ34vÿ $ÿÿÿ ÿÿ ÿÿÿ++DÿdcŽÿhh…ÿrrˆÿ~~ŽÿŠŠ•ÿ––œÿ¢¢¦ÿ¯¯±ÿºº»ÿÅÄÅÿÎÏÏÿרØÿàßßÿçççÿíííÿññðÿöõöÿøøøÿúúúÿûüüÿüüüÿýýýÿþýýÿýýýÿþýþÿýýýÿýþþÿýýýÿþþýÿýýýÿýýþÿýþýÿýýýÿýýþÿþýýÿþýýÿþþýÿþýýÿýýþÿþþýÿýýýÿýþýÿýýþÿýþþÿýýýÿýýþÿþýýÿýýýÿýýýÿýýýÿÿÿÿÿ±°±·E$ 9`ÿÿÿÿûûûüýýýÿþýýÿýýýÿýýýÿýýýÿýþýÿýýýÿýþýÿþýýÿýýýÿýýýÿýýýÿþýýÿýýýÿýýýÿýýýÿþþýÿýýþÿýýýÿýýýÿýýýÿýýýÿýýýÿýþýÿýþýÿýýýÿýýýÿýýýÿüüüÿûûûÿ÷÷÷ÿêêîÿÕÕÞÿ¹¹Êÿ——³ÿkk–ÿ?ÿAÿ@ÿ@ÿ@ÿAÿ:ÿÿ ÿÿÿ ÿ ÿ ÿ ÿ ÿÿ ÿÿ *ÿ;ÿ-ÿ3ÿ7ÿ 'ÿAÿ1ÿ !Lÿ +ÿ45`ÿonœÿˆˆ¬ÿ••²ÿ¥¤½ÿ´´ÈÿÀÁÑÿÌÌÙÿÖÖàÿÞÝæÿããëÿéêîÿîîñÿðñôÿôõ÷ÿööøÿøøùÿùùúÿúúúÿûûûÿúûüÿûûüÿûûüÿûûüÿûûüÿûúûÿùúûÿùùúÿø÷úÿööøÿõõ÷ÿñòöÿïïóÿììñÿççïÿããëÿÝÝçÿÖÖâÿÍÍÜÿÃÃÕÿ··Îÿ©©Äÿšš¹ÿ‹‹®ÿrr£ÿNN•ÿ9:†ÿ78}ÿ:;ƒÿ89ÿ9:€ÿ?@ÿ%&[ÿ ÿÿ ÿ ÿÿ ÿÿ ÿTU}ÿhhŠÿmm„ÿzzŒÿ‡‡’ÿ””›ÿ¡¡¥ÿ®®°ÿºººÿÄÄÄÿÏÏÏÿ×רÿáààÿçççÿîîîÿòóòÿöööÿùùùÿúúúÿüüüÿüüüÿýýüÿýýþÿýýýÿýýýÿýýýÿýýýÿýþýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýþÿýþýÿýýýÿýýýÿýýýÿþýýÿýýýÿýþýÿýýýÿýýýÿýþýÿýþýÿþýþÿýþýÿþýýÿÿÿÿÿ±±°·E$ 9`ÿÿÿÿûûûüýýýÿýýýÿýýýÿýþýÿýýýÿýýýÿýþýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýþýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýüüÿüüüÿûûûÿöö÷ÿèèìÿÓÓÜÿ·¶Èÿ••±ÿii”ÿ>ÿ@ÿ@ÿ@ÿ@ÿ?ÿBÿ3ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ÿ $ÿ ÿ,ÿ<ÿ 'ÿ=ÿ+ÿ2ÿ1ÿ !Hÿcc’ÿ„„©ÿ’’°ÿ¤¤¼ÿ¶¶ÉÿÄÄÓÿÑÑÝÿÛÛäÿääêÿêêïÿððóÿôôöÿ÷÷ùÿùùûÿúúüÿüüüÿüüýÿýýýÿýýýÿýýýÿýýýÿýþýÿýþýÿýýýÿþýýÿýþýÿýýýÿýýýÿýýýÿýýýÿýýýÿýüýÿûûüÿúúûÿøùúÿööùÿóóöÿïïóÿëëñÿååíÿÝÝçÿÕÕáÿÊÉÚÿ¼¼Ñÿ¬¬Æÿœœ»ÿŠŠ­ÿmn¡ÿEFÿ78ÿ9:ÿ9:‚ÿ78|ÿ=>ˆÿ9:ÿ !ÿÿ ÿ ÿÿ ÿÿÿ??aÿggŽÿiiƒÿxxŠÿ……‘ÿ““šÿ  ¤ÿ­­¯ÿºº»ÿÅÅÅÿÐÐÐÿÚÙÚÿááâÿèèèÿïïîÿòóóÿöööÿùùùÿûûûÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýþýÿýýýÿýýþÿþýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿþýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿÿÿÿÿ°°°·E$ 9`ÿÿÿÿûûûüýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿüüüÿúúúÿôôõÿççêÿÐÐÚÿ³´Åÿ““°ÿ__ˆÿ7ÿ@ÿ>ÿ>ÿ>ÿ>ÿ?ÿ5ÿ ÿÿÿÿÿÿÿ "ÿ #ÿ !ÿ !ÿ !ÿ ÿ/ÿ>ÿ ÿIÿÿBCpÿyy¢ÿŒŒ¬ÿžž¸ÿ³³ÆÿÃÃÒÿÑÑÜÿÝÝåÿææëÿííñÿòòôÿöö÷ÿùùúÿûûüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿûûüÿúúûÿ÷÷ùÿóóöÿïïóÿééðÿááêÿØØäÿÌÌÛÿ½½Ñÿ««Åÿ˜—·ÿƒƒ©ÿ]]œÿ89ƒÿ89}ÿ9:‚ÿ89~ÿ89|ÿ=>ˆÿ@ÿÿ ÿ ÿ ÿÿ ÿÿ--GÿddŽÿgg‚ÿvvŠÿƒƒÿ““šÿ¡¡¤ÿ®®°ÿ»»¼ÿÇÇÇÿÒÒÑÿÚÚÚÿãããÿêêêÿðððÿôôôÿ÷÷÷ÿúúúÿûüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýþýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿÿÿÿÿ°°°·E$ 9`ÿÿÿÿûûûüýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûûûÿùùùÿóóôÿäãèÿÌÌ×ÿ°°Ãÿ®ÿXX€ÿÿ +ÿ-ÿ-ÿ-ÿ-ÿ.ÿ )ÿÿÿÿÿÿÿ #ÿ !ÿ !ÿ !ÿ !ÿ !ÿ !ÿÿ=ÿ.ÿ+ÿbb“ÿ„„¨ÿ••±ÿ««Áÿ¾¾ÎÿÎÎÚÿÛÛãÿååëÿííñÿóóõÿ÷÷øÿúúùÿûüüÿüüüÿüüüÿýýüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýüÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿýýýÿüýýÿüüýÿûûûÿøùúÿõöøÿññõÿëëñÿããëÿ××ãÿÊÊÚÿ¸¸Îÿ££Àÿ±ÿpp¢ÿBCÿ78~ÿ89~ÿ89~ÿ78|ÿ=>‰ÿ$%Xÿÿ ÿ ÿ ÿ ÿ ÿÿ3ÿccÿffÿuu‰ÿƒƒÿ““šÿ¢¢¦ÿ°°±ÿ¾¾¾ÿÉÉÉÿÔÔÔÿÜÜÜÿåååÿììëÿñññÿöõöÿøøøÿúúûÿüûûÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýüýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýüÿÿÿÿÿ°°°·E$ 9`þþÿÿûûûüüýýÿýýýÿýüýÿüýýÿýýüÿýýýÿüýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿýýýÿüüýÿüüüÿüýýÿýýýÿýýýÿüüýÿûüüÿûúûÿøøøÿðïñÿááæÿÉÉÔÿªª¿ÿŠŠªÿSSÿ1ÿ+ÿ *ÿ +ÿ +ÿ *ÿ -ÿÿÿÿÿÿÿ "ÿ !ÿ !ÿ !ÿ !ÿ !ÿ !ÿ !ÿ $ÿÿ,-Xÿppšÿˆˆ©ÿ¶ÿ´´ÆÿÆÇÓÿÕÕÞÿâãèÿëëîÿòòôÿöö÷ÿùùùÿûûûÿüüüÿüüüÿûûüÿüüüÿüüüÿüüüÿüüüÿüüüÿüûüÿüüüÿüüüÿýýüÿüüýÿüüüÿýýýÿýýýÿýýüÿýýüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüýÿûûüÿùùûÿööøÿññõÿêêðÿààéÿÓÓàÿÂÂÔÿ­­Æÿ––¶ÿ}}¦ÿLM•ÿ56|ÿ9:~ÿ89~ÿ78|ÿ<=†ÿ-.kÿ ÿÿ ÿ ÿ ÿ ÿÿ)ÿaaŒÿffÿvvŠÿ„„‘ÿ””›ÿ¤¤¨ÿ³²´ÿ¿¿ÀÿËËÌÿÖÖÕÿßßàÿçççÿíííÿòòòÿöööÿùùùÿûûûÿüüüÿüüüÿýýýÿüýýÿýýýÿýýüÿýýýÿýýýÿýüýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüýüÿüýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýüÿýýýÿüýýÿýýüÿüüüÿÿÿÿÿ°°°·E$ 9`þÿþÿúûûüýýýÿüýýÿüýüÿýýüÿýýýÿüýüÿýüüÿýýýÿýýýÿýýýÿüýýÿýüüÿýýýÿýýýÿýüýÿüýýÿýýýÿýýýÿýüýÿüýýÿýýüÿýýýÿýýýÿüýüÿüýýÿüýýÿüüüÿüûüÿúúúÿöö÷ÿííïÿÛÛáÿÃÂÏÿ££¹ÿ†‡©ÿ;;aÿ8ÿAÿ>ÿ>ÿ>ÿ>ÿBÿ !ÿÿÿÿÿ #ÿ !ÿ !ÿ !ÿ !ÿ !ÿ !ÿ !ÿ #ÿÿ,,Mÿyy¢ÿŒŒªÿ¤¥»ÿººÊÿÍÍ×ÿÛÛãÿççìÿîîðÿõõöÿøø÷ÿúúûÿûúûÿûüûÿüüüÿüüûÿûüûÿüûûÿûûüÿûûüÿûûûÿüûüÿûûûÿûûüÿûûûÿûüüÿüüüÿüûüÿüüüÿüüüÿüüüÿýüüÿýýýÿüýýÿýýýÿüüýÿýýüÿýýýÿýýýÿýýýÿýýüÿüýýÿýýýÿýýýÿýýýÿýüýÿýýýÿüýüÿüüýÿûûüÿøøúÿõõ÷ÿïïóÿçæîÿÛÚåÿÉÉÙÿµµÌÿœœ»ÿƒƒ©ÿSS–ÿ56|ÿ9:~ÿ89~ÿ78}ÿ:;‚ÿ46zÿ ÿÿ ÿ ÿ ÿ ÿÿ*ÿaa‹ÿffÿwwŠÿ‡†’ÿ——žÿ§§ªÿ¶¶·ÿÃÃÂÿÏÏÏÿÙÙØÿâáâÿéêéÿïïïÿôôôÿ÷÷÷ÿúúúÿûûûÿüûüÿüýýÿýýüÿüüýÿüýýÿýüüÿüýýÿýýüÿýýýÿýýýÿüüýÿüýýÿýýýÿýýüÿýýýÿýýýÿýüýÿýýýÿüýýÿýýýÿüýýÿýýýÿýüýÿýýýÿýüüÿüüüÿÿÿÿÿ±°°·E$ 9`ÿÿÿÿûûúüýýüÿýýýÿýýüÿýüýÿýýýÿýüýÿüýýÿýýýÿüüýÿýüüÿüýýÿýýüÿýüýÿýüüÿýüýÿýüüÿüýýÿüýüÿýüüÿüýüÿýüýÿüýüÿýüüÿýýýÿüýüÿýüýÿüüüÿûûûÿøùùÿôôõÿééìÿÕÕÝÿ¼¼Êÿ››³ÿ€¨ÿ''Hÿÿ ÿ #ÿ #ÿ #ÿ "ÿ %ÿÿÿÿÿÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ "ÿ %ÿÿ88\ÿ€€©ÿŽŽªÿ¨©¾ÿ¿¿ÍÿÑÑÚÿßÞåÿêêíÿñðòÿöö÷ÿùøùÿûúûÿûúûÿûûûÿúûûÿúùúÿùùùÿùùùÿùøùÿøøøÿ÷øøÿøøøÿøø÷ÿøøøÿøùøÿùøùÿùùùÿúúùÿúúúÿûûûÿûûûÿüüüÿûûüÿüüüÿüüüÿýýüÿüüüÿüýüÿüýüÿýýýÿýýüÿýýýÿýýýÿýýýÿüýýÿüýüÿüýýÿýýýÿýýýÿýýüÿüüýÿüüýÿúúûÿø÷ùÿòòõÿëëðÿààèÿÏÏÝÿººÏÿŸ ¾ÿˆ‡¬ÿUU–ÿ46|ÿ9:~ÿ89~ÿ89}ÿ9:ÿ68€ÿÿÿ ÿ ÿ ÿ ÿÿ.ÿddÿhhÿzz‹ÿŠŠ•ÿ››¡ÿ««®ÿ¹¹»ÿÆÆÇÿÒÓÓÿÛÛÜÿåääÿììëÿñññÿõõõÿøùøÿúûúÿüüüÿüüûÿüýýÿýüýÿüýüÿýýýÿüüüÿüýýÿýýýÿýýýÿüüýÿüýýÿüýýÿüýüÿýýýÿüüüÿýüýÿýýüÿüýýÿýüýÿüüýÿýýýÿýýüÿýüýÿüýüÿüüüÿÿÿÿÿ°°°·E$ 9`þþþÿúúûüýýüÿüýýÿüýüÿüüüÿüüýÿýýüÿüüüÿüýýÿýüüÿüýýÿýýüÿüüýÿýýüÿüýýÿýüüÿýýýÿüýüÿüüüÿýýüÿüýýÿüüüÿýüüÿüýýÿüýüÿýýüÿüüüÿûüûÿûûûÿøø÷ÿññòÿåäèÿÏÏØÿ´´Åÿ’’®ÿttŸÿEÿ@ÿ6ÿ2ÿ3ÿ3ÿ2ÿ4ÿÿÿÿÿÿÿ "ÿ "ÿ "ÿ "ÿ "ÿ $ÿÿ=>cÿ©ÿ’‘­ÿ¬¬ÀÿÂÂÏÿÔÔÝÿââçÿìëîÿóóôÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿùøøÿ÷÷øÿøøøÿöööÿôõõÿôôôÿóóóÿóóóÿòòòÿòóòÿóóóÿôóôÿõôõÿõõõÿöö÷ÿ÷÷÷ÿøùøÿúúúÿúúúÿûûûÿûûûÿüûüÿûüüÿýüýÿýýüÿýýüÿüüýÿüýýÿüýüÿýüýÿýýüÿýýüÿýüýÿýüýÿüýýÿüüýÿýüüÿüýýÿüýýÿüýüÿûûüÿøøúÿõôöÿííòÿââêÿÒÒßÿ¼¼Ñÿ¡¡¿ÿˆˆ«ÿTT—ÿ56}ÿ89}ÿ89~ÿ67|ÿ45xÿ34wÿ ÿ ÿ ÿ ÿ ÿ ÿÿ''>ÿddŒÿjjƒÿ}}ÿŽŽ™ÿ  ¤ÿ°°²ÿ¿¿¿ÿÌÌÌÿ×Ö×ÿßàßÿçèçÿïîîÿóóóÿø÷÷ÿùúùÿûüüÿûüûÿýýýÿüýüÿüüýÿýüüÿýýýÿýýýÿýüüÿüýýÿüýüÿüýýÿýüýÿýüüÿýüüÿýýýÿüýüÿüýýÿüýýÿüýüÿýüüÿýüýÿüüüÿýýüÿýüýÿüüýÿÿÿÿÿ°°±·E$ 9`þþþÿúúúüýýüÿýüüÿüýüÿýüýÿüüüÿüýýÿýüüÿýüýÿýüüÿýüüÿýüýÿüüüÿýüýÿýüüÿüüüÿýüýÿýýüÿýüýÿýýýÿýüüÿüýüÿýýüÿüýüÿýýýÿüüüÿýüüÿûûüÿúúúÿöööÿííïÿßßãÿÇÇÒÿªª¾ÿ‹‹ªÿXXÿÿÿ "ÿ (ÿ &ÿ %ÿ %ÿ &ÿÿÿÿÿÿÿÿ "ÿ "ÿ "ÿ $ÿÿ<=aÿ€§ÿ’’­ÿ­­ÁÿÃÄÏÿÖÖÞÿãäèÿììïÿôóôÿ÷ø÷ÿùøùÿùùùÿùùùÿøøùÿøøøÿ÷÷öÿõôôÿóóóÿòññÿðððÿïïïÿìííÿíííÿíììÿìììÿíííÿîííÿïïïÿðððÿòòòÿôóôÿöõöÿ÷÷÷ÿøø÷ÿúúúÿúûúÿûûûÿüûüÿüûûÿýüýÿüýüÿýüýÿüýüÿüüýÿüüüÿüüýÿüüüÿüýüÿüüüÿüüüÿüüüÿüýüÿýüüÿüýüÿýýýÿüüüÿûûüÿúúûÿõõ÷ÿîîóÿããêÿÓÒàÿ½¼Ñÿ  ¾ÿ„…©ÿOP–ÿ78~ÿ56zÿ12qÿ45yÿ89~ÿ,-jÿÿ ÿ ÿ ÿ ÿ ÿÿ99Wÿfe‰ÿoo†ÿ‚‚ÿ””ÿ¦¦ªÿ¶µ¸ÿÄÃÄÿÑÐÑÿÛÚÚÿääãÿêëêÿññðÿõõõÿøøøÿûúûÿûûüÿüüüÿýüüÿüýýÿüýýÿüüüÿýýüÿüüýÿýüüÿüüýÿýýüÿýüýÿýýüÿýýüÿüüýÿýüüÿüüüÿüüýÿüüüÿýüüÿüýýÿüüüÿüüýÿüüüÿüüüÿÿÿÿÿ°°°·E$ 9`þþþÿúûúüüüüÿüýüÿýüýÿüüüÿýüüÿýüüÿýüüÿýýüÿüüüÿüýüÿüüüÿüüýÿüüüÿüüüÿýýüÿüüüÿüüüÿüüýÿüüüÿüüýÿüüüÿüüüÿýüüÿüýüÿüýýÿüüüÿûúûÿùúùÿõôõÿéêìÿØØÞÿ¿¾Ìÿžžµÿ……ªÿ&'Fÿÿÿÿÿ #ÿ (ÿ (ÿ !ÿÿÿÿÿÿÿÿÿ "ÿ $ÿÿ55Yÿ€€¨ÿ«ÿ¬¬¿ÿÄÄÐÿÕÕÝÿääèÿîîðÿôôõÿ÷ø÷ÿøøøÿùøùÿøùùÿø÷÷ÿöööÿôõôÿòóóÿðððÿîíîÿëëëÿéééÿèççÿæææÿäääÿäääÿåääÿäåäÿçççÿèèèÿêêêÿìììÿîîîÿñðñÿòóòÿõõõÿ÷÷÷ÿùøøÿúúúÿûûúÿüûûÿûûûÿüüüÿýýüÿýýüÿüüüÿýüüÿüýüÿüýüÿüüüÿýýüÿüüüÿüüüÿüüýÿüüüÿüýüÿüüýÿüýýÿüüüÿüüüÿúùúÿööøÿïïóÿããêÿÒÑÞÿººÎÿœœ»ÿ§ÿ<=€ÿ/0nÿ89ÿ45yÿ23tÿ78ÿ#$Wÿÿ ÿ ÿ ÿ ÿ ÿÿNNuÿee„ÿuuŠÿ‡‡”ÿšš ÿ¬¬¯ÿ¼¼¼ÿÊÊÊÿÕÕÕÿßßßÿçèçÿïîîÿóóóÿöööÿùúúÿûûûÿûüüÿüýüÿýüüÿüýüÿüüýÿüüüÿüüüÿüüüÿüüüÿüýüÿüüüÿüýüÿüüüÿüýüÿýüüÿüüüÿüüýÿüüüÿüüüÿüüüÿüüüÿýüýÿüüýÿüýüÿÿÿÿÿ°°°·E$ 9`þþþÿúúúüüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüýüÿüüüÿüüüÿüüüÿüüýÿüüüÿüüüÿüüüÿýüýÿüüüÿüüüÿüüýÿüüüÿüýýÿüüüÿüüüÿüüüÿüüüÿüûûÿûûûÿøøøÿñòòÿååéÿÑÑÙÿµµÆÿ””¯ÿrrœÿÿÿÿÿÿÿÿ %ÿÿÿÿÿÿÿÿÿÿÿÿ)*Kÿ||¥ÿ¨ÿª«¾ÿÂÂÎÿÕÕÜÿääçÿíîðÿóóôÿø÷øÿøøøÿøùùÿøøøÿ÷÷÷ÿõõõÿóóóÿðððÿííîÿëêêÿçççÿäääÿáááÿßßßÿÜÜÜÿÜÛÜÿÛÛÛÿÛÚÛÿÛÛÜÿÝÝÝÿßßßÿâââÿåääÿèèèÿêëëÿïïïÿñññÿôôôÿöööÿ÷÷øÿùùùÿúúúÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüýÿüüüÿüýüÿüüüÿüüüÿýüüÿüüüÿüüüÿüüüÿýüüÿüüüÿýüüÿüüüÿùùúÿööøÿïïóÿâáéÿÏÐÝÿ¶¶Ìÿ——·ÿvu£ÿ:;…ÿ01oÿ34uÿ45yÿ01oÿ34vÿ8ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ^^‰ÿhh‚ÿ||ÿ™ÿ¢¢§ÿ³³¶ÿÂÂÃÿÐÐÐÿÚÙÙÿäããÿëêëÿñññÿöõõÿøùùÿúûúÿûûûÿüüüÿüýüÿüüüÿüüüÿüüüÿüüýÿýüüÿüüüÿüüüÿüýüÿýüüÿüüüÿüýüÿýüüÿüüüÿýüüÿüüüÿüüüÿüýüÿüüüÿüüüÿüüüÿüüüÿÿÿÿÿ°°°·E$ 9`þþþÿúúúüüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüýüÿüûüÿúúúÿ÷÷÷ÿïïðÿßàåÿÉÉÓÿªª¿ÿ°ÿFGjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #ÿÿ)ÿvv¢ÿ‰‰¥ÿ¦¦»ÿ¿¿ËÿÒÒÚÿããæÿììîÿóóôÿ÷÷÷ÿøøøÿøøøÿøøøÿ÷÷÷ÿõõõÿòòòÿîîîÿìììÿççæÿãããÿÞÞÞÿÚÛÛÿר×ÿÔÔÔÿÓÓÓÿÑÑÑÿÐÐÐÿÐÐÐÿÑÑÑÿÓÓÓÿÕÕÕÿØØ×ÿÜÜÜÿààáÿåååÿèèèÿìììÿðððÿóóóÿöööÿ÷ø÷ÿùùùÿúúúÿûûûÿûûûÿüüüÿüüýÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿùúúÿõõ÷ÿííñÿßßèÿÊÊÚÿ¯¯Çÿ‘‘²ÿ^^“ÿ45|ÿ34uÿ./lÿ01qÿ34vÿ79ÿ ÿÿ ÿ ÿ ÿ ÿÿ&&=ÿee‹ÿpp‡ÿ„„’ÿ——Ÿÿ©©­ÿ»»½ÿÉÉÊÿÖÕÕÿßßÞÿçççÿîîîÿóóóÿ÷÷÷ÿúúúÿûûûÿüüûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿÿÿÿÿ°°°·E$ 9`þþþÿúúúüüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿúúúÿõõöÿëëîÿÙÙàÿÀÀÎÿ ¡·ÿ…„«ÿ:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ #ÿmm™ÿ……£ÿ¢¢¶ÿ»»ÈÿÑÑØÿááåÿììîÿóóóÿö÷÷ÿøøøÿøøøÿøøøÿ÷÷öÿôôôÿòòòÿíííÿéééÿäääÿàààÿÚÚÚÿÖÖÖÿÐÐÐÿËËÌÿÈÈÈÿÅÅÅÿÃÃÄÿÂÂÃÿÃÃÃÿÄÄÄÿÆÇÆÿÊÊÊÿÏÏÏÿÒÒÒÿ××ÖÿÛÛÛÿàààÿæææÿêêêÿïïïÿòòòÿõõõÿ÷÷÷ÿùùùÿúúúÿûûûÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûüÿùùùÿôô÷ÿêêïÿÚÚåÿÃÃÕÿ¥¥Àÿˆˆ­ÿEF…ÿ+,hÿ34vÿ45xÿ12qÿ/0nÿ)*cÿÿ ÿ ÿ ÿ ÿ ÿÿKKpÿhh†ÿyyŒÿŒŒ˜ÿ  ¦ÿ³³µÿÃÃÄÿÐÐÐÿÛÛÛÿäääÿìììÿñññÿöööÿùùùÿûúûÿûûüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüûûÿÿÿÿÿ°°°·E$ 9`ýýþÿúúúüüüüÿüüüÿüûüÿüüüÿüüüÿûüüÿüüüÿüüüÿüüûÿüûüÿüüûÿüüüÿüüüÿüûüÿüüüÿüüüÿüüüÿüüüÿüüüÿûüüÿüüûÿüüüÿüüûÿüüüÿüüüÿûûûÿùùùÿôóôÿæçëÿÓÓÛÿ¹¹Éÿ——²ÿnn–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿÿVV~ÿ¡ÿšš±ÿµµÄÿÌÌÕÿÝÝáÿééëÿññòÿöööÿøøøÿ÷øøÿø÷÷ÿ÷÷÷ÿõôõÿñññÿíííÿèèèÿâáâÿÜÜÜÿÔÔÕÿÎÍÏÿÆÆÈÿÀÀÃÿºº½ÿµµ¸ÿ±²µÿ¯¯´ÿ±°³ÿ±±³ÿ³³µÿ··¸ÿ»»»ÿÀÀÀÿÆÆÆÿÌÌÌÿÒÒÒÿÙÙÙÿÞÝÞÿäääÿéééÿîîîÿòòòÿôôóÿ÷÷÷ÿùùùÿúúúÿúûûÿûûûÿüüüÿüüüÿüüüÿüüüÿûüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûüüÿüüûÿûüûÿüüüÿüüüÿüüüÿüüûÿûûüÿ÷øøÿóóöÿææíÿÔÔàÿº»Ïÿ™™¸ÿttŸÿ78€ÿ23sÿ./mÿ/0nÿ./mÿ34vÿ:ÿÿ ÿ ÿ ÿ ÿ ÿÿbb‹ÿmm…ÿ‚‚’ÿ——Ÿÿ¬«¯ÿ¼¼½ÿËËËÿ×××ÿàààÿèèèÿïðïÿôôôÿøøøÿúúúÿûûûÿüüüÿüûüÿüüüÿüüüÿüüüÿûüüÿüüüÿüüüÿüüüÿüüüÿûüüÿüüûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûüÿÿÿÿÿ¯¯°·E$ 9`ýþýÿúùúüûüüÿüûüÿüüüÿûüüÿüüûÿüûüÿüüüÿûüûÿüüüÿüüüÿüüüÿûüüÿüüüÿüüüÿûüüÿüûüÿüüüÿüûüÿûüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûüûÿûûûÿùùùÿñòóÿããçÿÌÌÖÿ¯°Ãÿ‘‘¯ÿPPvÿÿÿÿÿÿÿÿ #ÿÿÿÿÿÿÿÿ!ÿÿ:;_ÿ~~£ÿ’’ªÿ®®¾ÿÇÇÏÿÙÙÞÿççèÿððñÿöööÿøøøÿùùøÿø÷øÿ÷÷÷ÿôõôÿññòÿîîîÿçççÿààáÿØØÚÿÏÏÑÿÆÆÉÿ¼»Àÿ²²¹ÿª«²ÿ¤¤¬ÿŸŸ§ÿ››¤ÿšš¢ÿšš¡ÿœœ¢ÿŸŸ¤ÿ¤¤¨ÿª©¬ÿ°°²ÿ¸¸¸ÿ¿¿¿ÿÇÇÇÿÏÏÏÿÖÖÖÿÝÝÝÿããâÿéééÿííîÿóòòÿõõõÿ÷÷÷ÿùùùÿúúúÿûûûÿûüûÿüüûÿüüüÿüüûÿüüûÿüûüÿüûûÿüüüÿüüûÿüüüÿüüüÿüüüÿûüüÿüüüÿûüûÿüüüÿüûüÿüüüÿúúûÿ÷öøÿïïóÿááéÿËËÙÿ­®ÆÿŽŽ°ÿTTŽÿ+,kÿ/0pÿ./nÿ/0oÿ./lÿ12uÿÿ ÿ ÿ ÿ ÿÿÿ<<]ÿhhˆÿwxŒÿ™ÿ¢¢¨ÿ¶¶¸ÿÆÆÆÿÒÒÓÿÝÝÝÿåæåÿìììÿóòóÿöö÷ÿúúùÿûûûÿüûûÿûüüÿüüüÿüûüÿüûüÿüûüÿüüûÿûüüÿüüûÿüûüÿûüûÿüüûÿûûüÿüûüÿüüüÿûüüÿüûüÿüüüÿûüüÿüüüÿüüüÿûûûÿÿÿÿÿ¯°¯·E$ 9`ýýýÿùùúüüüüÿûûûÿûûüÿûûüÿüüüÿûûüÿüüüÿüüüÿüûûÿüüüÿûûûÿüüüÿûûûÿüüûÿüüüÿüûüÿüüûÿüûüÿüüûÿûûüÿüûüÿüüüÿûüûÿûûüÿûûûÿûúûÿ÷øøÿïïñÿßÞäÿÆÆÓÿ§§½ÿ±ÿ))Jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6ÿvvŸÿˆˆ£ÿ¦¦¸ÿ¿¿ÊÿÓÔÚÿããæÿííîÿôôôÿ÷ö÷ÿùùùÿøøùÿøøøÿöööÿóòóÿîííÿèèèÿßßàÿÕÖØÿÊÊÎÿ¾¾Äÿ²±ºÿ¥¦°ÿœ›¨ÿ““¡ÿŒŒœÿ††—ÿƒƒ”ÿ‚‚“ÿƒƒ“ÿ††”ÿŠŠ•ÿ™ÿ——žÿ Ÿ£ÿ¨¨«ÿ±±³ÿ»º»ÿÃÃÃÿÌÍÍÿÔÔÔÿÜÜÜÿããâÿéééÿîîîÿóòòÿõõõÿøøøÿúùùÿûûûÿúûûÿûüüÿüûüÿûüûÿüûûÿüüüÿüûûÿüûüÿüûüÿûüüÿûûüÿüûüÿüüüÿüüüÿûûüÿüüüÿüüüÿüüûÿüüüÿùùúÿôõ÷ÿêëðÿÙÙãÿ¿ÀÒÿžŸ»ÿ}}¦ÿ35wÿ/0mÿ/0oÿ/0oÿ./nÿ12rÿOÿÿ ÿ ÿ ÿ ÿ ÿ ÿbbŒÿmn†ÿ„„“ÿ™™¢ÿ®®±ÿÀÀÁÿÏÏÏÿÙÚÚÿããâÿëëêÿñððÿõõõÿùøøÿûûûÿûûûÿüûüÿüûüÿüüüÿûûüÿüûûÿûüüÿüûûÿûüüÿüûüÿüüûÿûüüÿüüüÿüüûÿüüüÿüûûÿüüüÿüûüÿüüüÿûûüÿûüüÿûûûÿÿÿÿÿ¯°¯·E$ 9`ýýþÿùùùüûûüÿûüüÿüüüÿûüüÿüûüÿüûûÿüüûÿûüûÿüûûÿûüûÿüüüÿûûûÿûüûÿûüûÿüûûÿûûûÿûûûÿüüûÿûûûÿüüüÿüüüÿûüüÿüûüÿûûûÿûûûÿúúúÿöööÿììïÿÙÙáÿÀÀÏÿŸŸ·ÿ¥ÿ9ÿ<ÿ0ÿ .ÿ )ÿÿÿ!ÿÿÿÿÿÿÿÿÿÿccŽÿÿœœ°ÿ··ÄÿÍÍÓÿÞÞáÿêéëÿòñòÿö÷÷ÿøùøÿúùúÿøøøÿöö÷ÿôôóÿïïðÿéèéÿßàáÿÕÕØÿÇÇÌÿ¸¹Áÿ©©µÿ›œ«ÿŽ¡ÿƒƒ˜ÿ{{’ÿuuÿrrŽÿqqŽÿooŠÿno‰ÿoo†ÿuuˆÿ||ÿƒ„‘ÿ—ÿ–—ÿ¢¢¦ÿ¬­®ÿ·¸¸ÿÂÂÂÿËËÌÿÔÔÔÿÜÜÜÿãããÿêêêÿîîîÿóóòÿöö÷ÿøøøÿúúúÿûúûÿüûûÿüüüÿûüüÿüüûÿûûûÿüûûÿüüûÿüüûÿüüüÿûûûÿüûüÿüüûÿûûûÿûûûÿûüüÿüûûÿüûüÿûüûÿûûûÿ÷øøÿòòõÿãäêÿÎÎÜÿ°°Èÿ±ÿVWÿ+,lÿ/0oÿ/0nÿ./nÿ+,hÿ,-iÿÿ ÿ ÿ ÿ ÿÿÿ;;]ÿii‰ÿz{Žÿ‘‘œÿ§§­ÿ¹º¼ÿÉÊÊÿÖÖÖÿàßàÿèèèÿïîïÿôôôÿøøøÿúúúÿûûúÿûûüÿüüûÿüûüÿüüûÿûûûÿüûûÿûûüÿûûüÿüûûÿûüüÿûüüÿûüûÿûûûÿûûüÿüüüÿüûûÿûûûÿûüûÿüüûÿûüüÿûûûÿÿÿÿÿ°°¯·E$ 9`ýýýÿùùúüûûûÿüüûÿûûûÿüûûÿûüûÿüûûÿûûûÿûûüÿüûüÿûûûÿûûûÿûûûÿûüüÿüûüÿûüûÿûûûÿûüüÿûüûÿüûûÿûûûÿûüüÿûûûÿûüûÿüûûÿúûûÿúúúÿöööÿëêíÿÖÖÞÿººËÿ™™´ÿqq›ÿÿÿ 'ÿ 'ÿ (ÿ *ÿ $ÿ $ÿÿÿÿÿÿÿÿÿ=<`ÿxxÿ§ÿ««»ÿÄÄÌÿØ×Üÿååçÿîïïÿôôôÿ÷÷÷ÿùùùÿùúúÿøø÷ÿöõöÿññòÿëëìÿááãÿÖÖÙÿÆÆÍÿµµÀÿ¥¤³ÿ’’¦ÿƒ‚šÿ{{šÿrq—ÿ``…ÿRRtÿGGgÿ==[ÿIIlÿQQtÿaa‡ÿhh‹ÿkk†ÿpp…ÿ{zŒÿ†…’ÿ’’™ÿžž£ÿ©ª¬ÿ¶¶·ÿÁÁÂÿÌËÌÿÕÕÕÿÝÝÝÿäääÿëëëÿðððÿóôóÿ÷÷÷ÿùùùÿúúúÿúúúÿüûûÿüûûÿûûüÿûûûÿüûüÿûüûÿûûûÿûûûÿûûüÿûûüÿûûüÿûüûÿüüûÿûûûÿûûüÿûûüÿûûûÿüûüÿúúúÿõö÷ÿììðÿÚÙãÿÀ¿Òÿžž»ÿyz£ÿ45wÿ./lÿ,-jÿ)*cÿ*+eÿ./lÿ?ÿÿ ÿ ÿ ÿ ÿ ÿÿddŒÿqqˆÿˆˆ–ÿŸŸ§ÿ³³¶ÿÄÄÅÿÓÓÓÿÝÜÝÿææåÿíìíÿóóôÿ÷÷öÿúùúÿúûûÿûüûÿüüûÿüüûÿüûûÿûûûÿüûûÿûûûÿûüûÿûûûÿûûûÿûûüÿûüûÿûüüÿûûûÿûûûÿüüûÿûûûÿüûüÿüûüÿûûûÿûûûÿÿÿÿÿ¯¯¯·E$ 9`ýýýÿùùùüûûüÿüûûÿûûûÿûûûÿüûûÿûûüÿûûûÿûüûÿûûûÿüûûÿüûüÿûüûÿûûûÿûûûÿûûûÿûûûÿûüûÿûûûÿüûüÿûüûÿûûûÿüûûÿûûûÿüûûÿúûúÿúúúÿõõõÿççëÿÑÑÛÿ´´Çÿ–—µÿRRvÿ -ÿ<ÿ2ÿ2ÿ2ÿ1ÿ7ÿ #ÿÿÿÿÿÿÿÿ(ÿmmšÿ€€œÿŸŸ²ÿººÄÿÏÏÔÿßßáÿêêëÿòñòÿöööÿøùøÿùùùÿùùùÿ÷ø÷ÿóóóÿííîÿåäçÿ××ÜÿÈÈÐÿµ¶Áÿ¡¡²ÿ‹‹¢ÿŸÿmm“ÿ87Uÿ"ÿ ÿÿÿÿÿÿÿ0ÿGGhÿgg‹ÿhgÿttˆÿÿŽŽ˜ÿœ¡ÿªª¬ÿ¶¶·ÿÂÁÂÿÍÎÍÿ×××ÿßßßÿæææÿìíìÿñññÿõõõÿ÷÷øÿúúúÿúúûÿûûûÿûûûÿûüüÿüûûÿûüûÿûûûÿûûûÿûûûÿüûûÿûüûÿüûûÿûüûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûüÿøøùÿòòõÿããêÿÌÌÚÿ®®ÅÿŽŽ°ÿLMƒÿ%&_ÿ+,gÿ+,gÿ()bÿ()bÿ/0pÿÿ ÿ ÿ ÿ ÿÿÿKKqÿkl‰ÿ“ÿ——¡ÿ­­²ÿÁÀÁÿÏÐÐÿÛÛÚÿãããÿìëëÿñññÿöööÿùùùÿûúúÿûûûÿûûûÿûûüÿûüûÿûüûÿûûüÿûûûÿüûûÿûûûÿûûûÿüûüÿûüûÿüûüÿûûüÿûûûÿüûûÿûûûÿûûûÿüûûÿûûüÿüûûÿÿÿÿÿ°¯¯·E$ 9`ýýýÿùúùüüûûÿûüûÿûûüÿûûûÿûûûÿüûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüûûÿûûûÿûûûÿûûûÿûûûÿûûüÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿóôõÿäåéÿÍÍØÿ¯¯Ãÿ’’±ÿDEqÿÿ"ÿ (ÿ 'ÿ 'ÿ 'ÿ +ÿÿÿÿÿÿÿÿÿ>?cÿww›ÿ¦ÿ¬¬¹ÿÅÄÌÿרÛÿååæÿíîîÿóóóÿø÷÷ÿùùúÿúúúÿùùùÿ÷ööÿððñÿéèëÿÜÜàÿÍÌÔÿ¸¸Åÿ¡¡µÿ‰‰£ÿ}}¢ÿ?@_ÿ ÿÿ ÿÿÿÿÿÿ ÿ ÿÿÿ.ÿ\\„ÿee‚ÿqq†ÿŽÿŽŽ˜ÿ¢ÿ«¬®ÿ¹¹ºÿÄÄÅÿÑÑÑÿÚÚÚÿááâÿéèèÿîîîÿòòóÿöööÿøøùÿúúúÿúúúÿûûûÿûüûÿûûûÿûûûÿûûûÿûûûÿûûûÿûüüÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûüûÿûûüÿüûüÿûûûÿúùúÿööøÿëëïÿ××âÿ¼»Ïÿšš·ÿqpžÿ)*hÿ()aÿ)*dÿ./nÿ./nÿ,.kÿ8ÿÿ ÿ ÿ ÿÿÿ""8ÿiiŽÿxxÿœÿ¦¦¬ÿ»»½ÿËËËÿÙØØÿááàÿéééÿðððÿõõõÿùùùÿúúúÿûûûÿûûûÿûüûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûüûÿûûûÿûûüÿûûûÿÿÿÿÿ¯¯¯·E$ 9`ýýýÿùùùüûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúúúÿùùúÿòòóÿââçÿÊÊÖÿ««ÀÿŽŽ±ÿ/0UÿCÿ@ÿ<ÿ<ÿ<ÿ<ÿ<ÿÿÿÿÿÿÿÿÿeeÿ~~›ÿœœ®ÿ··ÁÿÎÎÒÿÞÞàÿéééÿðððÿõõõÿøøøÿúúúÿúúúÿøùùÿôôõÿííîÿââæÿÓÓÙÿ¾¾Êÿ¦¦¹ÿ‹‹¦ÿyyŸÿ2ÿÿÿÿ ÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿ ÿPPwÿee…ÿpp‡ÿ€€ÿšÿ  ¦ÿ¯¯²ÿ½½¾ÿÉÉÉÿÔÔÔÿÝÝÝÿäåäÿêëëÿðððÿôôôÿ÷÷÷ÿúùúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿøøøÿððóÿààçÿÇÇÖÿ¦¦¿ÿ‡‡«ÿ;;vÿ-.mÿ/0oÿ*+eÿ()cÿ*+gÿ#$Zÿ ÿÿ ÿ ÿ ÿÿÿ^^‡ÿpp‰ÿ‰‰˜ÿ¡¡¨ÿ¶¶ºÿÉÉÉÿÖÖÖÿßßßÿèèèÿîîîÿôôôÿøøøÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿÿÿÿÿ¯¯¯·E$ 9`üüýÿùùùüûûûÿûûûÿûûûÿûûúÿûûúÿûûûÿûûûÿûûûÿûúúÿûûûÿûûûÿûûûÿûúûÿûûúÿûûûÿûûûÿûûûÿûûûÿúûûÿûûûÿûûúÿûûûÿûûûÿûûûÿûûûÿùùùÿððòÿààæÿÇÇÔÿ¦¦½ÿ‰‰¯ÿ<ÿÿ$ÿ 'ÿ &ÿ 'ÿ &ÿ 'ÿÿÿÿÿÿÿ ÿ#$?ÿttšÿ‰Š¡ÿ§§µÿÀÀÇÿÕÔ×ÿââãÿëëìÿòòòÿöööÿùùùÿúúúÿúúúÿøøøÿòòóÿèèëÿÚÛàÿÆÆÑÿ®®Àÿ’’«ÿ||£ÿ"ÿ ÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿIIoÿffˆÿrrˆÿ„„“ÿ”•ÿ¥¥ªÿ´´¶ÿÂÂÃÿÎÎÎÿÙÙÙÿáááÿçççÿîííÿòòòÿöööÿùøøÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûúûÿûûûÿûûûÿùùúÿôôöÿææìÿÐÐÜÿ³³Èÿ’’±ÿ\\’ÿ$%`ÿ)*eÿ*+gÿ()cÿ$%\ÿ)*fÿÿ ÿ ÿ ÿÿÿÿEEhÿmm‹ÿ‚‚”ÿšš¤ÿ±±µÿÄÅÆÿÓÓÓÿÝÝÝÿæææÿíííÿóóóÿ÷÷÷ÿùùúÿúûúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿúûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûúÿÿÿÿÿ¯¯¯·E$ 9`ýýýÿøùùüûûûÿûûúÿûûúÿûûûÿûûûÿûúúÿûûûÿûûúÿûûûÿûúúÿûûûÿûûûÿûûûÿúûûÿûûûÿûúúÿûûûÿûûûÿûûûÿûûûÿûûúÿûûûÿûûûÿûûûÿûúúÿùùùÿïïñÿÞÞåÿÄÄÓÿ£¤»ÿ…†«ÿ#$RÿBÿ<ÿ:ÿ:ÿ:ÿ>ÿ $ÿÿÿÿÿÿÿ ÿLLsÿzy™ÿ””¨ÿ±±»ÿÈÈÍÿÙÚÛÿæææÿîîîÿóóòÿ÷÷÷ÿúúúÿúúúÿùúúÿø÷÷ÿïðñÿããçÿÑÒÚÿººÊÿ››³ÿ††¬ÿ)ÿ ÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿJJoÿjjŠÿwwŒÿ‰‰—ÿšš¢ÿ¬«°ÿ»»¼ÿÈÈÈÿÔÔÔÿÝÝÝÿäääÿêêêÿðððÿõõõÿø÷øÿúùùÿùúúÿúûûÿûûûÿûûûÿûúûÿúûûÿûúûÿûûúÿûûûÿûûûÿûûûÿûûûÿúúúÿûûûÿûûûÿûûûÿûûúÿûûûÿûûûÿúûúÿöõ÷ÿììðÿÙØáÿ½½Îÿ››·ÿtsžÿ,-lÿ$%Zÿ$%\ÿ&'^ÿ&'^ÿ,-iÿCÿÿÿÿÿÿÿ&&?ÿllÿ||ÿ”• ÿ¬¬²ÿÁÁÂÿÐÑÑÿÜÜÜÿååäÿìììÿòòòÿöööÿùúúÿûúúÿûûûÿûûúÿûûûÿûûûÿúûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûúúÿûûûÿûûûÿûûûÿûûûÿûúûÿûûûÿûûûÿûûûÿúúúÿÿÿÿÿ¯¯¯·E$ 9`ýüüÿøùùüûûûÿûûúÿúûûÿûûûÿûúûÿûûûÿúúûÿûûûÿûûúÿûûûÿúûûÿûûûÿúûûÿûûúÿûúûÿûúûÿûûúÿúúûÿúûûÿûûûÿúúûÿûúúÿúûúÿûúúÿûûúÿøùùÿïïñÿÝÝåÿÃÃÑÿ¢£»ÿ~¥ÿIÿDÿEÿEÿEÿDÿLÿ "ÿÿÿÿÿÿÿÿgg’ÿ€€šÿ­ÿ¸·ÀÿÎÎÑÿÞÞßÿéèèÿïïïÿôóôÿø÷øÿúúúÿúúùÿúúúÿöööÿííðÿÞÝäÿÇÈÔÿ««¿ÿ••¶ÿ99Vÿ ÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿTT{ÿmmŠÿ~~’ÿÿ££¨ÿ³´·ÿÂÂÃÿÏÏÏÿÙÙÙÿàààÿèçèÿíîîÿóóóÿ÷÷öÿùùùÿùùùÿûúúÿúúûÿûûûÿúûúÿûûûÿûûûÿûûúÿûúûÿúûûÿûúûÿúúûÿûûûÿûûûÿûúûÿûûûÿúûúÿúúûÿûúúÿûûúÿ÷øøÿïïòÿÞßæÿÆÅÔÿ¤¥½ÿ††¬ÿ33gÿ&'_ÿ'(`ÿ)*dÿ*+hÿ()bÿ""Xÿ ÿÿÿÿÿ ÿÿffÿuuÿŽÿ¨¨®ÿ¾¾¿ÿÏÏÏÿÚÚÚÿâããÿëëëÿñññÿööõÿùùùÿúúúÿûûúÿûúûÿûûúÿûúûÿúúúÿúûúÿûûûÿúúûÿúúûÿûúûÿúúûÿûúûÿúûúÿûûûÿûúúÿúúûÿûûûÿúúûÿûûûÿúúúÿÿÿÿÿ¯¯¯·E$ 9`üüüÿøøøüúúûÿûûûÿûûûÿúûúÿúúúÿúûúÿûûûÿúûúÿûûúÿûûûÿûúûÿûúúÿûúúÿûûûÿúûúÿûûûÿûûúÿûûúÿúúûÿûúûÿúûûÿúúûÿûúûÿûûúÿúûûÿùùùÿîïñÿÜÜäÿÂÂÑÿ¡¡ºÿz{£ÿGÿDÿCÿCÿCÿBÿHÿÿÿÿÿÿÿ ÿ$$>ÿss™ÿ‡‡žÿ¥¥²ÿ½¾ÄÿÓÓÕÿààáÿéêéÿðððÿõöõÿøøøÿùúùÿúúúÿúùùÿöõöÿéêíÿØØàÿ¿¿Îÿ¡¡ºÿxxœÿ ÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿfeÿrrŒÿ‡‡™ÿšš¤ÿ¬«±ÿ¼¼¾ÿÊÊÊÿÕÕÕÿÝÝÝÿååäÿìëìÿððñÿõõõÿùøøÿúùúÿúûúÿúúûÿûûûÿûûúÿûûúÿúûûÿûûúÿûúúÿûúûÿûúûÿúûúÿúûûÿûúûÿúúûÿûûúÿûûúÿûûûÿúûúÿûúûÿúùùÿòòôÿããéÿÌÌØÿ­­ÃÿŒ‹­ÿRSŠÿ%&aÿ,-jÿ)*dÿ%&_ÿ%&_ÿ()eÿÿ ÿÿÿÿÿÿXX€ÿqrÿŠŠ›ÿ£¢«ÿºº¾ÿËÌÌÿØÙÙÿâââÿééêÿðððÿööõÿøùøÿúúúÿûûûÿúûûÿûûúÿúúûÿúúúÿûúúÿúûûÿûûûÿúúûÿúûúÿûúûÿûûúÿúûûÿúûûÿúûúÿûúúÿûúúÿûúúÿûúûÿúúúÿÿÿÿÿ¯®¯·E$ 9`üüüÿùøøüúûûÿûúúÿúûúÿúúûÿúúúÿúûûÿúûúÿûûûÿúúúÿúúúÿûúûÿúúúÿûúûÿûúúÿúúûÿúúûÿûûúÿûúúÿúûúÿúûúÿûûûÿûúûÿûûúÿúúûÿúúúÿùùùÿîîñÿÛÛãÿÁÁÑÿ  ºÿtsšÿ7ÿDÿBÿBÿBÿAÿDÿÿÿÿÿÿÿ ÿCCiÿvv–ÿ¤ÿ«¬·ÿÄÄÉÿ×ÖØÿãâãÿëëëÿððñÿöõöÿùùùÿúùúÿúûúÿùùùÿóôõÿççìÿÒÒÜÿ··Éÿœœºÿ>>aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ##7ÿqq–ÿ||“ÿ‘‘Ÿÿ¥¥­ÿ¶¶¹ÿÅÅÆÿÑÑÒÿÚÚÛÿâââÿéééÿïïïÿôôôÿ÷÷÷ÿùùùÿúúùÿûúûÿúúûÿúúúÿûûúÿûúúÿúûúÿúûûÿúúúÿúûúÿûúúÿúûûÿûúúÿúûúÿûûûÿúúúÿûúúÿûûûÿúúúÿúùùÿôôõÿææëÿÑÐÛÿ³³Çÿ‘‘¯ÿfg–ÿ!#[ÿOÿPÿQÿPÿ !Vÿ $ÿ ÿÿÿÿÿÿCCfÿopŽÿ…†—ÿŸŸ©ÿ¶¶ºÿÉÊÊÿØØØÿáááÿéééÿïïïÿôôôÿùøùÿùúùÿúúúÿúûúÿúúúÿúúúÿûúûÿúûúÿúúúÿúúúÿúúúÿûûûÿûûûÿúûûÿûûúÿûúûÿûûúÿûúûÿûûûÿúúûÿúûûÿúúúÿÿÿÿÿ¯¯¯·E$ 9`üüüÿøøùüûúúÿúúúÿúúúÿûúúÿúúûÿúúúÿúúúÿúúúÿúúúÿúúûÿûúûÿúúúÿúúûÿúúúÿûúúÿûûúÿúúúÿúúúÿúûúÿúúûÿúúúÿûûúÿúúúÿúûûÿúúúÿùùøÿîîñÿÜÜãÿÀÁÐÿ ¡ºÿuuÿBÿFÿEÿEÿEÿEÿGÿÿÿÿÿÿÿÿ\\†ÿzz•ÿ––¨ÿ±±ºÿÈÈÌÿÙÚÛÿååäÿëëìÿòòòÿöööÿøùøÿúúúÿûûúÿùùúÿòòóÿääêÿÏÏÚÿ¯¯Äÿ••¸ÿ=ÿÿ$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 0ÿAÿ$%]ÿ!"Uÿ4ÿÿ ÿÿÿOOrÿww•ÿˆ‰œÿ¨ÿ°°µÿÀÀÂÿÍÍÎÿØØØÿßßßÿçççÿíííÿóóóÿ÷ö÷ÿùùøÿúúúÿúúûÿúúúÿúûúÿûúúÿúúúÿúúúÿûúúÿúúúÿúûúÿúúúÿûúúÿúúúÿúúúÿúúúÿúúúÿûúûÿúúúÿúúúÿùùùÿõõõÿèèìÿÔÓÝÿ··Éÿ””²ÿmm˜ÿAÿDÿCÿCÿBÿGÿ +ÿ ÿÿÿÿÿÿ..Lÿoo‘ÿ‚•ÿ››¦ÿ´´¹ÿÈÈÉÿ×Ö×ÿßßßÿèèçÿïïïÿôôôÿøøøÿùùùÿûúúÿúúûÿûúúÿúúúÿúúûÿûúúÿúûûÿúúúÿúúûÿúúûÿûúúÿúúúÿúúúÿúúúÿúûúÿûúúÿúúúÿûúúÿúûúÿúúúÿÿÿÿÿ®¯¯·E$ 9`üüüÿøøùüúúúÿúûúÿúûúÿúúúÿúúúÿúúúÿúúûÿûúúÿúúûÿúúúÿúúúÿúúúÿûúûÿúúúÿúúúÿúúûÿúúúÿúúúÿúúúÿúúúÿúúúÿúûúÿúúúÿûúúÿúúúÿøùøÿîîñÿÜÜãÿÂÂÑÿ ¡»ÿvvŸÿKÿHÿHÿHÿHÿIÿCÿÿÿÿÿÿÿ)ÿii’ÿ~~—ÿœœ«ÿ¶¶½ÿÍÍÏÿÜÜÜÿæååÿíììÿòòòÿöööÿùùùÿúúúÿûúûÿùùùÿñòôÿââéÿËËØÿ­­Ãÿˆˆ«ÿEÿFÿ;ÿ:ÿ7ÿ ,ÿÿÿÿÿÿÿÿÿÿÿÿ *ÿFÿ*+eÿ<=‰ÿ()eÿÿÿ ÿÿqq™ÿ€–ÿ––¥ÿ©©±ÿ»»¾ÿÊÊËÿÕÕÕÿÞÞÞÿäääÿìììÿñññÿõöõÿøøøÿùùùÿúúúÿûúúÿúûúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûúúÿúúúÿúúúÿúúúÿúúûÿúúúÿúúúÿúúùÿùùùÿõõöÿééíÿÔÔÝÿ¸¸Êÿ——³ÿttžÿJÿFÿFÿFÿEÿHÿ3ÿ ÿÿÿÿÿ ÿ4ÿllÿ}}“ÿ—˜¤ÿ±±·ÿÆÆÇÿÕÕÕÿßßßÿæççÿîîîÿóôôÿø÷øÿùùùÿúúúÿúúúÿûúúÿúúúÿúúúÿúúûÿúúúÿúûúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúûúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿ®®®·E$ 9`üüüÿøøøüúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùøÿïïòÿÝÝåÿÄÄÓÿ¢¢¼ÿ}}¥ÿNÿGÿGÿGÿGÿIÿ;ÿÿÿÿÿÿÿ$$?ÿqq—ÿ„„›ÿ¡¡®ÿ¹¹ÀÿÏÏÑÿÝÝÞÿæææÿíííÿòòòÿ÷÷÷ÿùùùÿúúúÿúúúÿùùùÿòòôÿããéÿÌÌÙÿ­­Äÿ¥ÿ=ÿGÿFÿFÿEÿFÿFÿBÿÿÿÿÿÿÿÿÿÿÿ *ÿ$%]ÿ67}ÿ>?ÿ$$\ÿÿÿÿKKmÿ||šÿŽŽ¡ÿ££®ÿ¶¶»ÿÆÆÇÿÒÒÒÿÛÛÛÿãããÿêêêÿðððÿõõõÿøøøÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿúùùÿõõõÿééìÿÕÕÞÿ¹¹Êÿ˜˜³ÿvvŸÿ OÿFÿFÿFÿFÿHÿ7ÿ ÿÿÿÿÿÿ#ÿiiÿyzÿ”•¢ÿ®®µÿÄÄÆÿÔÔÔÿßßßÿçççÿíîîÿôôôÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿ¯®¯·E$ 9`üüüÿøøøüúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿððóÿßßæÿÅÅÔÿ¤¤½ÿ€¦ÿKÿGÿEÿEÿEÿHÿ 0ÿÿÿÿÿÿÿ;;_ÿqq“ÿˆˆœÿ¥¥°ÿ½½ÂÿÑÑÒÿßßßÿæææÿîîîÿóóóÿ÷÷÷ÿùùùÿúúúÿúúúÿùùúÿóóõÿääêÿÍÍÛÿ¯¯Åÿ‰‰®ÿSÿFÿJÿLÿ !Tÿ%&]ÿ+,jÿ78ÿOÿÿÿ 'ÿ!ÿÿÿÿÿÿÿ /ÿ89„ÿ67~ÿ>?ÿ<ÿÿ ÿ*ÿyyŸÿ††œÿ«ÿ±±¸ÿÃÃÅÿÐÐÐÿÚÚÚÿâââÿéééÿïïïÿôôôÿøøøÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿøøøÿôôõÿèèëÿÔÔÜÿ¸¸Èÿ——²ÿuužÿ NÿFÿFÿFÿFÿGÿ>ÿ ÿÿÿÿÿÿÿeeŒÿwwÿ’’¡ÿ­­´ÿÃÃÅÿÔÔÔÿßßßÿæææÿîîîÿóóóÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿ®®®·E$ 9`üüüÿøøøüúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùúÿññóÿààçÿÈÈÖÿ§§¿ÿ‰‰®ÿ !NÿCÿJÿLÿLÿOÿ8ÿÿÿÿÿÿÿMMuÿssÿŒŒžÿ§§±ÿ¿¿ÃÿÒÒÒÿßßßÿçççÿîîîÿôôôÿ÷÷÷ÿùùùÿúúúÿúúúÿùùùÿóóõÿææìÿÒÒÞÿ³³Éÿ——·ÿ()Zÿ&'`ÿ*+gÿ./oÿ/0rÿ45{ÿ9:ƒÿ89ƒÿ=>Œÿ01sÿ Tÿ;ÿ (ÿ"ÿÿÿÿÿÿÿVW’ÿ78„ÿ89€ÿ45}ÿÿÿÿdc‰ÿœÿ˜˜¨ÿ­­¶ÿ¿¿ÂÿÍÍÎÿØØØÿßßßÿçççÿîîîÿôôôÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿ÷÷÷ÿòòóÿææêÿÐÐÚÿ¶¶Çÿ””¯ÿqqœÿHÿFÿFÿFÿFÿGÿ?ÿ ÿÿÿÿÿÿÿ\\ƒÿvvÿ‘‘ ÿªª²ÿÂÂÅÿÔÔÔÿßßßÿåååÿîîîÿóóóÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿ®®®·E$ 9`üüüÿøøøüúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùúÿòòõÿääêÿÌÌÙÿ««ÂÿŒŒ®ÿ33jÿ)*gÿ()eÿ&'cÿ&'cÿ)*hÿ<ÿÿÿÿÿÿÿWWÿttÿŽŽ ÿ©©²ÿÁÁÄÿÓÓÓÿßßßÿæææÿíííÿóóóÿ÷÷÷ÿùùùÿúúúÿúúúÿùùúÿõõöÿééîÿ××âÿ½½Ðÿ¡¡½ÿPQÿ+,mÿ/0qÿ/0sÿ56}ÿ89‚ÿ89ƒÿ:;†ÿ:;†ÿ67€ÿ'(cÿMÿ5ÿ *ÿ&ÿÿÿÿÿ11Rÿii–ÿPQ“ÿ./rÿ23wÿ:ÿ ÿÿ::Xÿ€€ ÿ‘‘¤ÿ¨¨²ÿ¼¼ÁÿËËÍÿÖÖÖÿßßßÿæææÿîîîÿóóóÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿøøøÿöööÿññòÿããæÿÍÍ×ÿ±±Ãÿ‘­ÿffÿEÿHÿGÿGÿGÿGÿ@ÿ ÿÿÿÿÿÿ ÿUU|ÿvv‘ÿ ÿªª³ÿÁÁÄÿÓÓÓÿßßßÿåååÿîîîÿòòòÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿ®®®·E$ 9`üüüÿøøøüúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿôôõÿååëÿÏÏÛÿ°°Æÿ’’²ÿAAzÿHÿMÿOÿOÿSÿ2ÿÿÿÿÿÿÿ``Šÿttÿ ÿ©©²ÿÀÀÃÿÒÒÒÿÞÞÞÿæææÿíííÿòòòÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿöö÷ÿîîñÿÞÞæÿÈÈ×ÿ¬¬Äÿ~~¦ÿ)*mÿ23vÿ78ÿ89‚ÿ89ƒÿ9:†ÿ:;‡ÿ:;†ÿ45|ÿ()dÿ#$[ÿAÿ6ÿ )ÿ *ÿÿÿ !ÿee–ÿ^^ÿccÿ99}ÿ./qÿ)*hÿ ÿÿ,ÿ||¡ÿŒŒ¡ÿ££°ÿ¸¸¾ÿÉÉËÿÖÖÖÿßßßÿæææÿíííÿòòòÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿøøøÿõõõÿîîðÿßßäÿÈÈÓÿ««¿ÿŒŒ«ÿUU~ÿÿ +ÿ -ÿ -ÿ -ÿ -ÿ *ÿÿÿÿÿÿÿ ÿRRxÿuu‘ÿ ÿ©©²ÿÁÁÄÿÓÓÓÿßßßÿåååÿîîîÿóóóÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿ®®®·E$ 9`üüüÿøøøüúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿöö÷ÿèèíÿÔÔßÿ¶¶Êÿ˜˜·ÿHIvÿ Wÿ'(bÿ%&aÿ%&`ÿ'(cÿJÿ ÿÿÿÿÿ ÿeeÿuuŽÿŸÿªª±ÿÀÀÃÿÒÒÑÿÝÝÝÿåååÿìììÿòòòÿöööÿùùùÿúúúÿúúúÿúúúÿ÷÷øÿññôÿååëÿÓÓßÿ¹¹ÍÿŸŸ»ÿ[\›ÿ56ƒÿ9:‚ÿ89‚ÿ89„ÿ:;‡ÿ:;†ÿ:;†ÿ23xÿ()dÿ()dÿKÿ@ÿ 3ÿ'ÿ /ÿÿPPyÿll™ÿjj—ÿee“ÿVVÿ+,nÿ-.nÿÿÿÿqq˜ÿ‡‡Ÿÿ  ¯ÿµµ½ÿÈÈÊÿÕÕÖÿßßßÿæææÿíííÿòòòÿöööÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿ÷÷÷ÿóóôÿëëìÿÚÚàÿÂÂÎÿ¤¤¹ÿ††§ÿIJxÿBÿ:ÿ6ÿ6ÿ6ÿ7ÿ 1ÿÿÿÿÿÿÿÿNNsÿuu’ÿŽŽŸÿ©©²ÿÁÁÄÿÓÓÓÿßßÞÿçççÿîîîÿóóóÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿ®®®·E$ 9`üüüÿøøøüúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿ÷÷÷ÿëëïÿØØâÿ¼¼Îÿ¹ÿef˜ÿ Yÿ Uÿ"#[ÿ#$\ÿ$%^ÿOÿÿÿÿÿÿ&ÿeeŽÿuuŽÿžÿ©©°ÿ¾¾ÀÿÏÏÏÿÛÛÛÿãããÿëëëÿñññÿöööÿøøøÿùùùÿúúúÿúúúÿøøùÿôôöÿëëðÿÝÝæÿÊÊÙÿ®®Çÿ••´ÿTUžÿ56‚ÿ9:„ÿ:;‡ÿ:;‡ÿ9:†ÿ:;‡ÿ01vÿ)*gÿ()fÿ#$]ÿ?ÿGÿ -ÿÿCDjÿ„„«ÿ……¦ÿ„„¥ÿwwÿdd“ÿ,-kÿ/0rÿ;ÿ ÿÿaa†ÿ…… ÿœœ­ÿ³³»ÿÆÆÉÿÕÕÖÿßßßÿæææÿíííÿóóóÿöööÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿøøøÿõõõÿñññÿççéÿÔÔÛÿ»»Éÿœœ³ÿƒƒ¨ÿ()Mÿÿ .ÿ 1ÿ 0ÿ 0ÿ 0ÿ /ÿÿÿÿÿÿÿÿLLqÿuu’ÿŽŽ ÿ©©²ÿÁÁÄÿÔÔÔÿßßßÿçççÿîîîÿôôôÿ÷÷÷ÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿ®®®·E$ 9`üüüÿøøøüúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿ÷÷øÿîîñÿÝÝåÿÃÃÓÿ££½ÿwwŸÿ !\ÿ+,hÿ&'aÿ&'aÿ&'bÿ!"Yÿÿÿÿÿÿ%ÿeeÿttÿŽŽœÿ¦¦®ÿ¼¼¾ÿÍÍÍÿØØØÿáááÿèèèÿïïïÿõõõÿ÷÷÷ÿùùùÿùùùÿúúúÿùùúÿöö÷ÿññôÿççíÿÙÙãÿÄÄÕÿªªÄÿ“”³ÿZZŸÿ56‡ÿ9:…ÿ:;†ÿ9:†ÿ89„ÿ12vÿ'(dÿ()fÿ&'bÿRÿ<ÿ 6ÿJJnÿ’’´ÿ——²ÿžž·ÿ˜˜²ÿ‡‡§ÿttžÿ55lÿGÿ6ÿÿÿPPsÿ……¢ÿšš¬ÿ±±»ÿÅÅÉÿÕÕÕÿßßßÿæææÿíííÿòòòÿ÷÷÷ÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿøøøÿ÷÷÷ÿôôôÿîîîÿááäÿÍÍÕÿ²²Âÿ’’¬ÿuuœÿ8ÿ6ÿ ,ÿ *ÿ ,ÿ -ÿ .ÿ&ÿÿÿÿÿÿÿÿLLrÿvv“ÿŽŽ ÿ©©³ÿÁÁÅÿÔÔÔÿßßßÿæææÿîîîÿôôóÿøøøÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿÿÿÿÿ®®®·E$ 9`üüüÿøøøüúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿøøùÿññôÿââéÿÊÊÙÿ«ªÃÿ‹‹°ÿ./hÿ Uÿ%&`ÿ&'aÿ)*fÿ+,lÿÿÿÿÿÿ&ÿddÿrr‹ÿŒ‹šÿ££ªÿ¸¸»ÿÊÊÉÿÕÕÔÿßÞßÿçççÿíííÿòòòÿöööÿøøøÿùùùÿùùùÿúúúÿøøùÿõõöÿîîòÿääëÿÖÖáÿÃÃÔÿ¬¬Æÿšš·ÿrr§ÿBCÿ34‚ÿ89†ÿ67ÿ34xÿ&'`ÿ)*iÿTÿYÿ&(Tÿqršÿšš¹ÿ££»ÿ²²Äÿ³³Äÿ¨¨¼ÿ““¯ÿ~~¤ÿ;>fÿÿ /ÿ /ÿ -ÿ ,ÿ -ÿ /ÿÿÿÿÿÿÿÿÿMMrÿww”ÿ‘¢ÿ¬¬µÿÃÃÇÿÖÖÖÿáááÿèéèÿïïïÿôóóÿøøøÿùùùÿùúúÿúùúÿúúúÿúúúÿúúúÿùúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúùúÿúúúÿùúúÿúúúÿúúúÿúúúÿùùúÿúùúÿÿÿÿÿ®®®·E$ 9`ûüûÿøøøüúúùÿúúúÿùúùÿùùúÿúúúÿùúùÿúúúÿùúúÿúúùÿúúúÿúúúÿùùúÿùúúÿúúúÿúùúÿúúúÿúùúÿúúúÿùúúÿúùúÿúùúÿùúùÿùùúÿúúúÿúúùÿúùúÿùúùÿõõöÿëëïÿÙÙâÿ¾½Ïÿžžºÿhh—ÿ%&gÿ)*fÿ)*hÿ-.pÿ34{ÿ:ÿÿÿÿÿÿ]\ˆÿmmˆÿ„„•ÿš™¢ÿ®®±ÿÀÀÀÿÌÌËÿ×Ö×ÿßßàÿæææÿíííÿòòòÿöõöÿ÷÷÷ÿøøøÿøùùÿøùøÿùøùÿ÷÷øÿóóõÿîïòÿååíÿÛÛäÿÎÍÛÿ¿¿Ñÿ¯¯Èÿ§§Àÿœ›¹ÿ‘‘´ÿ±ÿ³ÿ–•¶ÿ Ÿ¼ÿ¥¥¿ÿ®®Åÿ¼¼ÍÿÇÇÔÿÐÏÙÿÐÐØÿÈÇÑÿµµÄÿœ›³ÿ¥ÿBBnÿ@ÿIÿÿÿ--Jÿ……§ÿ——«ÿ±±¼ÿÇÇÌÿ××Ùÿâââÿéèéÿïïïÿóóôÿ÷÷÷ÿùùøÿúùúÿùúúÿúúúÿúùúÿùùúÿúúúÿúúúÿùúúÿúúúÿùùùÿùùúÿùùøÿøùøÿøøøÿöööÿôôôÿïððÿèééÿÜÜßÿÇÇÐÿ®®½ÿލÿwwŸÿ6ÿ#ÿ#ÿ!ÿ )ÿ /ÿ ,ÿ 0ÿÿÿÿÿÿÿÿ ÿTTzÿwx”ÿ““¤ÿ®®·ÿÅÅÈÿÖÖ×ÿââáÿéèéÿîïïÿõôôÿ÷øøÿúùùÿúùúÿúùúÿùúúÿùúúÿúúúÿúúúÿùúúÿúúúÿúúùÿúúúÿùúúÿùúúÿùúúÿùúúÿúùúÿùúùÿúùùÿúúúÿúúùÿùùúÿÿÿÿÿ®®®·E$ 9`ûûûÿø÷øüùùùÿúúúÿúúùÿùúùÿúúùÿùúúÿùúùÿúùùÿúúùÿúùúÿúúúÿùúùÿúùúÿùùúÿùùùÿùùúÿúúùÿùúúÿùùùÿúùúÿùùúÿúúúÿúúùÿùùùÿùúúÿúúúÿùùùÿö÷÷ÿïîòÿßßçÿÇÇÖÿ§¨Áÿ„ƒªÿ-.nÿ./rÿ/0tÿ*+jÿ)+iÿGÿ ÿÿÿÿ ÿRR|ÿkkˆÿ~~‘ÿ““ÿ§§¬ÿ¹¸ºÿÆÆÆÿÐÐÑÿÚÚÚÿâââÿéééÿïïïÿòòòÿõõõÿöööÿ÷øøÿøøøÿøùøÿøøøÿ÷÷øÿóóöÿððòÿéêîÿááéÿ××âÿÍÍÛÿÃÃÕÿ»»ÏÿµµËÿ±±Èÿ²²Éÿ´´Êÿ»ºÎÿÂÃÒÿËÊ×ÿÑÑÛÿØØßÿÚÛàÿ××ÛÿÈÈÑÿ´´Âÿ˜™¯ÿ€€¦ÿ44^ÿÿ +ÿÿÿ**Cÿ‡‡©ÿ™˜­ÿ´´¾ÿÊÊÎÿÙÚÚÿääåÿêëëÿñññÿôõôÿøøøÿøùøÿúùúÿúúúÿúúùÿùùúÿúúùÿúúùÿúùùÿúúùÿúùúÿùúùÿøøøÿùùùÿøøøÿöööÿôóôÿðññÿëëëÿáâãÿÒÒ×ÿ¼¼Çÿ¡ ´ÿ‚‚¡ÿ]^ˆÿÿ$ÿÿ#ÿ$ÿ!ÿ)ÿ 1ÿÿÿÿÿÿÿÿÿUV|ÿzz•ÿ””¥ÿ°°¸ÿÇÇÊÿØØØÿâââÿéééÿðððÿõõôÿ÷øøÿùùùÿùúùÿùùúÿùúùÿúúúÿùùùÿùùúÿùùùÿùùùÿùúúÿúúùÿùúúÿùùùÿúúúÿúùùÿúúùÿúùúÿúúúÿùùúÿùúúÿúùùÿÿÿÿÿ®®®·E$ 9`ûûûÿ÷÷÷üúùùÿúúúÿùúúÿùùùÿùùùÿùúùÿúúúÿùùùÿúùúÿúúúÿùùùÿúúúÿùùùÿùúúÿúúúÿúúúÿùúùÿùùùÿùúúÿùùùÿúúùÿùùùÿùùùÿúùùÿùùúÿùùùÿùùúÿøøøÿóóôÿååëÿÐÐÝÿ´´Éÿ––µÿQRÿ&'gÿ'(fÿ+,lÿ//sÿ,-pÿÿÿÿÿÿCChÿii‹ÿzzŽÿ˜ÿ  ¥ÿ±±³ÿ¿¿¿ÿÉÉÉÿÓÓÔÿÜÝÝÿãããÿéééÿîîîÿòòñÿóóóÿöööÿ÷÷öÿøøøÿøøøÿøøùÿ÷÷øÿõô÷ÿóóôÿíîòÿèèíÿâáèÿÛÛåÿÖÖáÿÑÒÞÿÐÐÝÿÐÏÜÿÒÑÝÿÔÔßÿØØàÿÛÜâÿßÞäÿßßãÿÞÞàÿÕÕØÿÄÄÌÿ­­½ÿ’’«ÿyyŸÿ./_ÿKÿ=ÿÿÿ00OÿЉªÿœœ°ÿ··ÁÿÌÌÑÿÝÜÞÿæææÿìììÿòòñÿööõÿøøøÿùøøÿúúúÿúúúÿúùúÿúúúÿùùùÿùùùÿúúúÿúúúÿùùùÿøøùÿøùøÿ÷÷÷ÿöööÿõõôÿññòÿíííÿååçÿÙÙÜÿÆÆÎÿ®®½ÿ‘¨ÿ{{¢ÿ**Lÿÿÿ#ÿ#ÿ!ÿ$ÿ#ÿ%ÿÿÿÿÿÿÿÿÿ]]„ÿ{|–ÿ˜—§ÿ²²»ÿÈÈËÿÙÙÙÿããäÿêêêÿñðñÿôôõÿøøøÿùùùÿúùúÿùúùÿùùùÿùùùÿùùùÿúùùÿùùùÿùúúÿúùúÿúùúÿùúùÿúùùÿùùùÿùùùÿùúùÿúùúÿúúùÿùùúÿùùùÿùùúÿÿÿÿÿ®®®·E$ 9`ûûûÿ÷÷øüúùùÿùùùÿúùùÿùùùÿúùúÿùùùÿùúúÿùùùÿùùùÿùúùÿùùùÿùùùÿúùúÿùúúÿùùùÿùùùÿùùùÿùùúÿùùùÿúùùÿúùùÿúùúÿùúùÿùùùÿùùùÿùúùÿùùùÿùùøÿôôöÿêëïÿÚÚãÿÀÁÒÿ¡ ¼ÿssžÿ)*mÿ01tÿ/0uÿ./sÿ23|ÿ +ÿÿÿÿ ÿ&&CÿhhÿssŠÿ……“ÿ˜˜ ÿ©©«ÿ···ÿÃÃÃÿËÌÌÿÕÕÕÿÞÞÞÿäääÿèèèÿíííÿðððÿóóóÿôôóÿõöõÿöööÿ÷÷÷ÿø÷øÿø÷øÿöõ÷ÿôôöÿòòôÿíîñÿêêïÿççìÿååëÿããéÿãâéÿãâèÿããèÿääèÿååèÿãäæÿááâÿÛÛÝÿÎÎÓÿ»¼Æÿ££¶ÿ‡†£ÿoo›ÿ -ÿ)ÿ /ÿÿ ÿAAcÿŒŒªÿ¢¢´ÿ¼»ÅÿÑÐÔÿßààÿéèèÿîîíÿóòòÿööõÿøøøÿùùùÿúùùÿùùùÿùùùÿùùúÿùùùÿùúùÿùùúÿùùùÿøùøÿøøùÿ÷ø÷ÿöööÿôõôÿòòòÿîîîÿççèÿÝÝßÿÎÎÓÿ¹¹Ãÿ Ÿ²ÿ‚žÿddÿÿÿÿÿÿ"ÿ$ÿ!ÿ"ÿÿÿÿÿÿÿÿÿccŒÿ~~—ÿš›ªÿµµ¼ÿËËÍÿÛÛÛÿåääÿëëìÿñññÿõööÿøøøÿùùùÿúùùÿùùùÿùùùÿùùùÿùùúÿúùùÿùùùÿùùùÿùúùÿùúùÿùùúÿùùùÿúúúÿúùùÿùùùÿùùùÿùúùÿùùùÿúùúÿùùùÿÿÿÿÿ®®®·E$ 9`ûûûÿ÷÷÷üùùùÿùúùÿùùùÿùùùÿùùùÿùùùÿúùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿúùùÿùùùÿùùùÿùùùÿùúùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿöö÷ÿïïòÿááèÿÌÌÚÿ®®Åÿ²ÿDE‡ÿ-.rÿ/0tÿ/0sÿ12xÿ Wÿ ÿÿÿÿ ÿ``‹ÿllˆÿÿ™ÿŸŸ¤ÿ®®¯ÿ¹¹ºÿÃÃÃÿÍÍÍÿÕÖÖÿÜÜÜÿâââÿæææÿêêêÿîîîÿïïïÿñòòÿóóóÿóóóÿõõôÿõõõÿõõõÿôôôÿóóõÿóóóÿññóÿïïñÿîîðÿíìïÿëëíÿêêìÿééêÿææçÿåååÿáááÿÜÜÝÿÒÒÔÿÄÄÊÿ¯¯¼ÿ——­ÿ}}žÿTTÿÿ ,ÿÿÿ ÿaa„ÿŽ©ÿ©©¹ÿÂÂÊÿÕÖÙÿããäÿêêêÿïïïÿôóóÿöööÿøøøÿøøùÿùùùÿùúùÿùùùÿùùùÿùùùÿùúúÿùùøÿøøøÿøøøÿ÷÷÷ÿöööÿõôôÿñòñÿííîÿéèéÿààáÿÓÓ×ÿÁÁÉÿ©ª¸ÿŽŽ¦ÿxxžÿ-.Qÿÿÿÿÿÿÿÿ%ÿÿÿÿÿÿÿÿÿ ÿll”ÿ€€˜ÿžž­ÿ¸¸¿ÿÍÍÐÿÝÝÝÿæææÿìììÿòòòÿöööÿ÷÷øÿùùùÿùùúÿùùùÿùùùÿùùùÿùúùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùúùÿùùùÿúúùÿúùùÿùùùÿùùùÿùùúÿùùùÿùùùÿÿÿÿÿ®®®·E$ 9`ûûûÿ÷÷÷üùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿøøøÿóóõÿèèíÿ××áÿ½½Ðÿžžºÿqq ÿ,-uÿ01uÿ./sÿ12yÿ67‚ÿÿÿÿÿÿHHqÿhh‰ÿxxŽÿ‡‡”ÿ——ÿ¥¥§ÿ°°°ÿºººÿÃÃÃÿËËËÿÓÓÔÿÚÚÚÿàààÿãããÿæææÿêêêÿëëëÿîîîÿîîîÿïïðÿðððÿñññÿñññÿññðÿðððÿïïïÿïïïÿîîïÿìììÿëêëÿèèèÿæææÿããâÿßßßÿÙÙÙÿÑÑÓÿÆÆÊÿµµ¿ÿ  ±ÿˆˆ¢ÿww ÿ&&Hÿ ÿ%ÿÿÿÿzz ÿ•”¬ÿ±±¿ÿÉÉÐÿÚÚÝÿçççÿíííÿñññÿõôõÿ÷÷÷ÿøøøÿùùùÿùùùÿùùùÿùøùÿùùùÿùùùÿøøøÿøøøÿøøøÿ÷÷÷ÿõõõÿôôôÿòòòÿíííÿéééÿââãÿÖÖÙÿÆÆÍÿ±±½ÿ˜˜¬ÿ||›ÿ``‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-ÿpp–ÿ……œÿ¢¢¯ÿ¼¼ÂÿÐÐÓÿßßßÿæçæÿîîîÿóóóÿöööÿøøøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿÿÿÿÿ®®®·E$ 9`úúûÿö÷÷üùùùÿùùùÿùøùÿùùùÿùøùÿùùùÿùùùÿøøøÿùùùÿùùùÿùùùÿùøùÿùùøÿùùùÿùùùÿùøùÿùùùÿùùùÿùùùÿùùøÿùùùÿùùùÿùùùÿùùøÿùùùÿùùùÿùùùÿùùùÿøøùÿõõõÿîîòÿßßçÿËËÙÿ­­Æÿ‘±ÿEF‡ÿ,-rÿ45ÿ23{ÿ56ÿNÿ ÿÿÿ ÿ0ÿff’ÿmmˆÿ~~ÿ—ÿ›šŸÿ¦¦¨ÿ±±±ÿºººÿÃÃÃÿÉÉÉÿÐÐÐÿÖÖÖÿÛÜÜÿàààÿâââÿååäÿæçæÿèèèÿêêéÿêêêÿëëëÿêêêÿêêëÿêêêÿééêÿèèèÿæææÿæææÿãããÿáááÿÞÞÞÿÙÙÚÿÔÔÕÿÎÍÐÿÄÄÈÿ··¾ÿ¥¥´ÿ§ÿyzšÿ^^Šÿÿÿ%ÿÿÿ))Hÿ‹‹¬ÿŸŸ³ÿººÆÿÐÐÖÿààâÿéêêÿïïïÿóóóÿöööÿøø÷ÿøøøÿùùùÿùùùÿùùùÿùùùÿøøùÿøøøÿø÷øÿø÷øÿ÷÷÷ÿõõõÿóóôÿñññÿíííÿêééÿááâÿרÚÿÉÊÎÿ¶¶Áÿ  ±ÿ„„žÿtsœÿ>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>ÿtt˜ÿŠŠŸÿ¦¦³ÿÀ¿ÅÿÓÔÕÿáááÿèèèÿîîîÿóóóÿ÷÷öÿøøøÿùùùÿùøùÿùøùÿùøùÿùùùÿùùùÿùùùÿùùùÿøùùÿùùùÿùùøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùøùÿùùùÿÿÿÿÿ®®­·E$ 9`ûúûÿö÷÷üùùùÿùùùÿùùøÿøùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùøÿùùùÿùùøÿùøùÿùùùÿùùùÿùùøÿùøùÿøùùÿùùùÿùùùÿùùùÿùùùÿùøùÿùùùÿùùùÿùùøÿùùùÿùøøÿùùùÿö÷÷ÿòòôÿççíÿÖ×áÿ¾¾ÐÿŸŸ¼ÿww£ÿ56…ÿ01uÿ45}ÿ23|ÿ45€ÿÿÿÿÿÿJJsÿggŠÿuuÿ‚‚‘ÿ˜ÿœ› ÿ¦¦¨ÿ¯¯°ÿ··¸ÿ¿¿¿ÿÅÅÅÿÌÌÌÿÐÑÑÿÕÕÕÿÙÚÙÿÜÜÝÿÞßßÿàààÿâââÿâãâÿãääÿäääÿäääÿãâãÿâââÿááàÿßßßÿÝÜÝÿÛÛÚÿ×××ÿÓÓÓÿÏÏÏÿÈÈÊÿ¿¿Ãÿ´µ¼ÿ¦¦³ÿ””§ÿ|}™ÿsržÿ2ÿÿÿÿÿÿee‰ÿ‘‘¬ÿ¬¬½ÿÅÅÎÿØ×Üÿääæÿìíìÿñññÿôóóÿö÷÷ÿø÷øÿøøøÿùùøÿùùùÿùùùÿøøùÿ÷ø÷ÿ÷ø÷ÿ÷÷÷ÿöööÿôôôÿóóóÿðððÿííìÿèèèÿááâÿÙØÚÿÊËÏÿººÂÿ¦¦´ÿ¤ÿwv™ÿHHqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ11Qÿxxšÿ£ÿ««¶ÿÄÃÉÿÖ××ÿããâÿéééÿïðïÿôôôÿ÷÷÷ÿøøøÿùùùÿùùøÿùøøÿøùùÿùùøÿùùùÿøùøÿùùøÿùøùÿùùøÿøùùÿøùùÿùùøÿùùøÿùùøÿøùùÿùùùÿùùùÿùùøÿùøùÿøùùÿÿþÿÿ­®­·E$ 9`úúúÿ÷÷öüùùùÿùùùÿùøøÿùùùÿøøùÿùùøÿøùøÿùùùÿùùøÿùøøÿùùùÿøøøÿùùøÿøùøÿøùùÿùùøÿùøùÿùùøÿøøøÿøùùÿùøøÿùùùÿùùøÿøøùÿùøùÿøùøÿùùùÿùùøÿùøùÿ÷øøÿõõöÿîíñÿááèÿÍÌÚÿ²²Èÿ•–´ÿWX”ÿ13€ÿ01xÿ34|ÿ67‚ÿ !Wÿ ÿÿÿÿ ÿbb‘ÿii‡ÿyyŽÿ……’ÿ˜ÿ››Ÿÿ£¤¦ÿ­¬­ÿ³´´ÿ»»»ÿÀÀÀÿÆÅÆÿÊÊÊÿÎÎÎÿÒÑÑÿÔÔÔÿ×××ÿÙÙÙÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿÚÚÚÿØØÙÿÖØØÿÖÕÖÿÒÓÓÿÐÏÐÿÌÌÌÿÇÇÉÿÂÁÄÿ¹¹½ÿ¯¯·ÿ¢¢®ÿ’’¦ÿ}}™ÿvvŸÿ33Wÿÿÿ!ÿ!ÿÿ""=ÿ‹‹¯ÿœœ³ÿ¸¸ÆÿÎÎÕÿßßâÿéèêÿðïïÿòòóÿöööÿ÷÷÷ÿ÷÷øÿøùøÿùùùÿøøøÿø÷÷ÿøøøÿ÷÷÷ÿ÷÷÷ÿöõöÿóôóÿóòòÿïîïÿëëëÿçççÿáááÿØØÙÿÌÌÏÿ¼¼Ãÿ¨¨µÿ’’¦ÿxx–ÿbbÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEFlÿ{{™ÿ–•§ÿ°°ºÿÈÈÌÿÚÚÚÿååäÿëëëÿðððÿôôôÿ÷÷÷ÿ÷øøÿøøùÿùùùÿùùùÿøùùÿùøùÿøùøÿùøøÿùùùÿùùùÿøøøÿùùøÿùùøÿøùùÿøùøÿøøøÿøøùÿùùøÿøùùÿøøùÿùùùÿøøøÿÿÿÿÿ­­­·E$ 9`úúúÿöö÷üùøøÿøùøÿøøøÿùùøÿøøøÿùøøÿùøøÿøùùÿøøøÿøøùÿùøøÿøøùÿøøùÿøøøÿùøøÿøùøÿùøùÿøùùÿøøøÿøùùÿùøøÿùøøÿøøùÿùùùÿùùøÿøùøÿùùøÿøøùÿùøøÿøùùÿö÷÷ÿòñôÿééíÿÙØãÿÃÃÔÿ¥¥Àÿ‰ˆ¬ÿ>>ˆÿ45~ÿ01wÿ45}ÿ=>ÿ /ÿ ÿÿÿ ÿ#$;ÿhh–ÿjjˆÿzzÿ……’ÿ—ÿ˜˜ÿ  £ÿ©¨ªÿ¯¯¯ÿµµµÿºººÿ¿¿¿ÿÄÄÃÿÆÆÆÿÉÉÉÿËËËÿÍÎÍÿÎÎÎÿÏÏÏÿÏÏÐÿÐÐÏÿÏÏÏÿÍÎÎÿÍÍÍÿÊÊËÿÇÇÈÿÃÄÅÿ¾¾Àÿ¸¸¼ÿ°°·ÿ§§±ÿœ›ªÿŽŽ£ÿ}}™ÿuuœÿ>>dÿ ÿÿ"ÿ(ÿÿÿpp—ÿ‘‘¬ÿ®®¿ÿÅÅÎÿØØÝÿääæÿìííÿòòòÿôóôÿ÷ööÿ÷ø÷ÿ÷÷øÿø÷øÿøøøÿ÷÷÷ÿ÷÷øÿ÷ö÷ÿõõöÿõõõÿòòòÿðððÿíîîÿêêêÿæææÿßßßÿ×רÿÌÌÏÿ½½Äÿª«¶ÿ”•¨ÿ||—ÿoo™ÿ6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\\ƒÿ~~šÿ›œ¬ÿ¶·¾ÿÌËÐÿÜÜÝÿæææÿìììÿñññÿõõõÿ÷ø÷ÿøøøÿùøøÿøøùÿøùøÿùøøÿøøùÿøøøÿøøøÿùøøÿùøøÿùøùÿøøøÿùøùÿøùøÿùùùÿùøøÿùøøÿøùøÿøùøÿøøøÿùøùÿøøøÿÿþÿÿ­­­·E$ 9`úúúÿ÷ööüøøùÿøùùÿøøøÿùøøÿøøøÿøøøÿøøøÿøøùÿøøøÿøøøÿøøøÿøùùÿøøøÿùøùÿøøùÿøøøÿùùøÿøøøÿøùøÿøøøÿøùøÿøøøÿøùùÿøøøÿøøøÿøøøÿøøøÿøøùÿøøøÿøøøÿ÷øùÿôôõÿïïòÿääêÿÒÒÞÿººÎÿœºÿwx¥ÿ01|ÿ89„ÿ9:ˆÿ34}ÿ01zÿÿÿÿÿÿ**Fÿjj–ÿkjˆÿyyÿ‚‚’ÿ‹‹–ÿ””›ÿ›› ÿ¢¢¥ÿ¨¨ªÿ®­¯ÿ³³´ÿ··¸ÿ»»ºÿ¾¾¾ÿÁÀÀÿÂÂÂÿÄÃÄÿÄÄÄÿÅÅÅÿÅÅÅÿÄÃÄÿÂÂÂÿÀÀÁÿ¼½¾ÿ¹¹¼ÿ´´¸ÿ®­´ÿ¦¦¯ÿžžªÿ““¤ÿ‡‡žÿww”ÿtsÿ<Žÿ)*nÿ ÿÿÿÿ ÿ ÿ99]ÿfg“ÿmm‘ÿoo‹ÿwwŽÿ}}‘ÿ‚‚“ÿ‡‡–ÿ‹‹˜ÿšÿ‘‘œÿ“”žÿ••Ÿÿ–– ÿ•• ÿ•• ÿ““ ÿ‘žÿŽŽÿŠŠœÿ……™ÿ~~–ÿww“ÿtt•ÿppšÿQRzÿ2ÿ ÿÿÿÿ)ÿ 1ÿ-ÿ9ÿ}|¤ÿ’’®ÿ¬¬ÀÿÃÂÏÿÕÕÜÿââåÿëëìÿððñÿóóóÿôôôÿöõõÿöõöÿõõõÿõõôÿóóóÿñòñÿïðïÿîîîÿëëëÿèèèÿåååÿáááÿÚÛÛÿÔÓÔÿËËÍÿ¿¿Äÿ²³ºÿ££¯ÿ‘‘£ÿ}}–ÿoo“ÿKLvÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿWW~ÿ€€ÿ®ÿ¸¸ÁÿÎÎÒÿÝÝßÿçççÿíííÿòòñÿõôõÿ÷ö÷ÿ÷÷øÿøøøÿø÷øÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøø÷ÿøøøÿøøøÿøø÷ÿøøøÿøøøÿøøøÿøøøÿø÷øÿø÷øÿøøøÿøøøÿþþþÿ­­­·E$ 9`ùúúÿöööüøøøÿøøøÿøøøÿ÷øøÿø÷øÿøøøÿøøøÿø÷÷ÿ÷÷øÿøøøÿøø÷ÿø÷÷ÿ÷øøÿøøøÿ÷øøÿøø÷ÿøøøÿøøøÿøøøÿø÷øÿø÷øÿøøøÿ÷ø÷ÿøøøÿ÷÷øÿøøøÿø÷øÿ÷øøÿ÷øøÿøøøÿ÷÷øÿøøøÿøøøÿöö÷ÿòóóÿîíñÿãâéÿÓÓÞÿ½½Ñÿ££¾ÿŠŠ«ÿNO›ÿ56…ÿ9:†ÿ78…ÿ=>ÿ23}ÿÿ ÿÿÿÿÿ ÿ==_ÿaaŒÿnn•ÿooÿqqŒÿvvŽÿzz‘ÿ~~“ÿ”ÿƒƒ–ÿ„„—ÿ„„—ÿ„„—ÿƒƒ—ÿ€–ÿ}}”ÿxx’ÿvv“ÿuu–ÿrršÿccÿBBgÿ-ÿ ÿÿÿÿÿ 4ÿ 0ÿ-ÿ5ÿxxŸÿ‘‘®ÿ©©¾ÿÁÀÎÿÓÓÛÿáàäÿêêìÿïïðÿòóóÿôôôÿôôôÿôôôÿôóóÿóòóÿñññÿïïïÿìííÿëêêÿèèçÿäääÿáâáÿÜÜÜÿÖÖÖÿÎÏÏÿÅÅÈÿ»»¿ÿ®­¶ÿžž«ÿŒŒ ÿxx“ÿoo•ÿBCkÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿ &ÿoo–ÿˆˆ ÿ¦¥µÿ¿¿ÆÿÓÓÖÿâáâÿêêêÿîïïÿóóòÿõõõÿ÷ö÷ÿ÷÷÷ÿøøøÿøøøÿ÷øøÿ÷øøÿ÷ø÷ÿ÷ø÷ÿøøøÿ÷øøÿøø÷ÿ÷÷÷ÿø÷÷ÿø÷÷ÿ÷øøÿø÷øÿ÷ø÷ÿ÷÷øÿ÷øøÿ÷ø÷ÿøøøÿø÷øÿøøøÿ÷÷øÿþþþÿ­­­·E$ 9`ùùùÿööõü÷÷øÿø÷÷ÿ÷ø÷ÿ÷øøÿ÷øøÿ÷ø÷ÿøø÷ÿ÷÷÷ÿ÷øøÿø÷øÿ÷ø÷ÿ÷÷÷ÿø÷øÿøø÷ÿ÷÷øÿøø÷ÿøø÷ÿ÷÷øÿ÷øøÿøøøÿø÷øÿø÷øÿøøøÿø÷øÿø÷øÿøø÷ÿ÷ø÷ÿøøøÿ÷ø÷ÿ÷øøÿ÷÷øÿ÷÷÷ÿø÷÷ÿ÷øøÿöööÿòòóÿìëïÿààèÿÑÐÝÿ»»Ïÿ¢¢¾ÿ‰‰«ÿQR›ÿ46…ÿ:;ˆÿ89ˆÿ:;Šÿ56„ÿ *ÿÿÿÿÿÿÿÿ%%@ÿJJqÿabŒÿkk”ÿoo”ÿqq“ÿrr‘ÿrrÿrrÿssÿss‘ÿss”ÿss–ÿpp–ÿml–ÿ\\…ÿBBgÿ9ÿÿ ÿÿÿÿÿ /ÿ 7ÿUÿ(ÿ;ÿ|}¤ÿ’’¯ÿ©©¿ÿ¾¿ÌÿÑÑÙÿÞÞäÿéèêÿîîïÿòññÿóòòÿóóóÿóóòÿòòòÿñññÿîîîÿìììÿéêêÿèèèÿääåÿáááÿÜÜÜÿØØØÿÐÑÑÿÉÉËÿ¿¿Ãÿ´´ºÿ¨§±ÿ˜˜¦ÿ‡‡œÿuuÿll”ÿ::`ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ!ÿÿÿÿÿÿÿÿÿ()Gÿ}} ÿ’’¨ÿ¯¯»ÿÇÇÍÿÙÚÛÿäååÿëëëÿðððÿôôóÿöööÿö÷÷ÿ÷÷÷ÿøøøÿø÷øÿ÷ø÷ÿ÷÷øÿø÷÷ÿ÷÷øÿøøøÿøøøÿøø÷ÿøøøÿø÷øÿ÷÷÷ÿøø÷ÿ÷÷øÿøøøÿøø÷ÿ÷ø÷ÿ÷øøÿøø÷ÿ÷÷øÿøøøÿ÷øøÿþþýÿ­­­·E$ 9`ùùùÿõööüø÷÷ÿ÷ø÷ÿ÷÷÷ÿøø÷ÿ÷÷÷ÿ÷÷øÿ÷ø÷ÿ÷øøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøø÷ÿøø÷ÿ÷÷øÿ÷ø÷ÿ÷÷øÿ÷÷÷ÿøøøÿø÷øÿ÷ø÷ÿøøøÿ÷øøÿø÷÷ÿ÷÷øÿø÷÷ÿ÷÷÷ÿøø÷ÿ÷÷øÿ÷ø÷ÿ÷ø÷ÿøø÷ÿ÷÷÷ÿ÷øøÿø÷÷ÿö÷øÿõôöÿñòôÿêëïÿßßçÿÏÏÜÿ»»Îÿ££¾ÿŒŒ­ÿWWœÿ78Œÿ89„ÿ89ˆÿ:;Šÿ?@•ÿ Zÿÿ ÿÿÿÿÿ ÿÿÿ)ÿ+*Iÿ;<_ÿLLrÿXX‚ÿ\\‡ÿZZ„ÿRRzÿBBgÿ12Qÿ<ÿ ÿÿ ÿÿÿÿÿÿ ,ÿBÿOÿ9ÿ 7ÿ01bÿ€€¦ÿ““¯ÿ««Àÿ¿¿ÎÿÒÒÚÿÞßãÿèèêÿííîÿððñÿñññÿñññÿðððÿïïðÿíîíÿëëëÿéééÿçççÿäääÿßßàÿÜÜÜÿ×××ÿÒÑÒÿËËÍÿÃÃÅÿ¹¹½ÿ­®´ÿ  «ÿ‘¡ÿ—ÿppŽÿhh“ÿ*)Iÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ ÿ!ÿ ÿ!ÿÿÿÿÿÿÿÿÿTT{ÿ‚‚Ÿÿ¯ÿ¸¸ÃÿÎÎÒÿßÞàÿéèèÿííîÿñòòÿõôôÿöööÿ÷÷÷ÿø÷÷ÿø÷÷ÿø÷÷ÿ÷÷÷ÿø÷÷ÿ÷ø÷ÿø÷÷ÿøø÷ÿ÷ø÷ÿø÷÷ÿ÷øøÿ÷øøÿ÷÷÷ÿ÷÷øÿø÷÷ÿø÷øÿø÷÷ÿ÷ø÷ÿ÷÷øÿ÷÷÷ÿ÷÷÷ÿ÷ø÷ÿ÷÷÷ÿþþýÿ­­¬·E$ 9`ùùùÿõõõü÷÷÷ÿø÷øÿ÷ø÷ÿ÷÷÷ÿ÷÷÷ÿø÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøøøÿ÷÷÷ÿø÷÷ÿ÷ø÷ÿøø÷ÿ÷÷øÿ÷÷øÿ÷÷øÿø÷÷ÿ÷øøÿøø÷ÿ÷ø÷ÿ÷÷÷ÿ÷÷øÿø÷÷ÿ÷÷øÿ÷÷÷ÿø÷÷ÿ÷÷÷ÿø÷÷ÿ÷÷÷ÿøø÷ÿ÷÷÷ÿ÷÷øÿôôöÿñðóÿêëîÿßßæÿÐÑÜÿ½½Ðÿ¥¥Áÿ¯ÿde¢ÿ89ÿ89‡ÿ9:‰ÿ89ˆÿ=>ÿ68‡ÿDÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿÿÿ ÿÿÿ ÿÿÿÿÿÿÿÿ(ÿDÿMÿ Xÿ:ÿJÿABjÿŠŠ¯ÿ——²ÿ®®ÂÿÂÂÏÿÒÒÚÿßßäÿææéÿìííÿïïðÿðïïÿïïïÿîîîÿëììÿêêêÿèèèÿæææÿããâÿàßßÿÛÚÚÿ×××ÿÐÐÑÿËËÌÿÃÄÅÿ»º¿ÿ±±¶ÿ¥¥­ÿ–—¥ÿ‰‰œÿxx‘ÿlmŽÿ]]ˆÿ0ÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ!ÿ!ÿ!ÿ"ÿ!ÿÿÿÿÿÿÿÿ &ÿssšÿŠŠ£ÿ¨¨·ÿÂÁÊÿÕÕØÿâããÿëêêÿïïïÿóóòÿõõõÿöööÿ÷÷÷ÿ÷ø÷ÿ÷÷÷ÿ÷ø÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿø÷÷ÿ÷÷÷ÿø÷øÿ÷÷÷ÿ÷÷øÿ÷øøÿ÷÷÷ÿ÷÷÷ÿø÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷ø÷ÿøøøÿ÷øøÿø÷÷ÿ÷÷÷ÿþýþÿ­­­·E$ 9`ùùùÿõõõü÷÷÷ÿ÷ø÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷ø÷ÿø÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿø÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷øøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷ö÷ÿôôôÿññóÿêêîÿààèÿÒÒÞÿÀÁÒÿ©©Ãÿ––´ÿtu¥ÿCD–ÿ67‰ÿ9:ˆÿ9:‹ÿ:;‹ÿ?@–ÿ45„ÿOÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿAÿ"#aÿYÿ YÿCÿGÿ&']ÿgg‘ÿ‘‘³ÿ·ÿ³³ÆÿÅÅÑÿÔÔÜÿßßãÿçæéÿëëìÿîííÿííîÿìììÿëëëÿéééÿçççÿåååÿáâáÿÝÝÝÿÚÚÚÿÕÕÕÿÐÑÐÿÊÊËÿÄÄÅÿ¼¼¿ÿ²²·ÿ§§¯ÿ››§ÿŽŽŸÿ€–ÿppŒÿjj’ÿHGpÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ!ÿ"ÿ"ÿ!ÿ$ÿÿÿÿÿÿÿÿÿ45Zÿ¡ÿ——«ÿ³³¿ÿÊÊÐÿÛÛÝÿçççÿììíÿñññÿôôôÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿø÷÷ÿ÷÷øÿ÷÷÷ÿ÷÷÷ÿ÷ø÷ÿ÷÷÷ÿ÷ø÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷øÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿýýýÿ¬¬¬·E$ 9`ùùùÿõõõü÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷öÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöö÷ÿõôõÿððóÿëëïÿááèÿÕÕàÿÅÅÕÿ±±Èÿœœ¹ÿ‡‡«ÿZZžÿ:;ÿ78ˆÿ:;‹ÿ9:Šÿ9:Šÿ>?“ÿ<=”ÿ./vÿMÿ ,ÿÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿ ÿÿÿ7ÿKÿ !^ÿ()mÿWÿ&'fÿWÿNÿVÿKLzÿ‡‡¬ÿ••³ÿ¦¦½ÿººÊÿÊÊÕÿÖÖÞÿàßäÿççéÿêêëÿëëìÿëëëÿêêêÿèèèÿæææÿäääÿààßÿÝÝÝÿØØØÿÓÓÓÿÏÏÏÿÉÉÊÿÂÂÄÿºº½ÿ±±¶ÿ¨§¯ÿ§ÿ‘‘ ÿ……˜ÿvvÿkkŒÿaaŒÿ%%Eÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ"ÿ"ÿ"ÿ"ÿ#ÿ#ÿ ÿ ÿÿÿÿÿ!ÿÿggÿ††¢ÿ¤¤µÿ¾¾ÇÿÓÓ×ÿààâÿéêêÿïïïÿòòòÿõôôÿöööÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿýýýÿ¬¬¬·E$ 9`ùøøÿõõõüö÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷ö÷ÿö÷÷ÿ÷÷÷ÿö÷÷ÿ÷÷÷ÿ÷÷öÿö÷÷ÿö÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿö÷÷ÿ÷ö÷ÿ÷÷÷ÿ÷÷öÿ÷ö÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿö÷÷ÿ÷ö÷ÿ÷÷÷ÿö÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷ö÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöö÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿôôöÿññòÿìíðÿääêÿÙÙâÿËËÙÿººÍÿ¦¥Áÿ””²ÿzz§ÿPQÿ9:ÿ78Šÿ89ˆÿ:;‹ÿ89‰ÿ9:‰ÿ<=ÿ:;Œÿ9:Œÿ+,qÿ&&gÿ!"^ÿIÿ<ÿSÿ YÿUÿ$%eÿ*+pÿ+,qÿ*+nÿ+,pÿ%&eÿ%&cÿYÿTÿ'(fÿKK}ÿ¦ÿ’’²ÿŸŸ¸ÿ²²ÅÿÁÁÏÿÏÏØÿÚÚßÿááäÿææèÿéééÿêêêÿéééÿæçæÿåååÿáâáÿßßßÿÛÛÛÿÖÖÖÿÒÒÒÿÍÍÍÿÇÇÈÿÁÀÂÿ¸¸¼ÿ°°µÿ¦¦­ÿœœ¦ÿ’’Ÿÿ……˜ÿyxÿnnŠÿhhÿEEnÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ$ÿÿ!ÿ"ÿ!ÿÿÿ ÿÿ))Kÿ£ÿ””«ÿ±±¾ÿÈÈÏÿÙÙÜÿååæÿíìíÿðððÿóóóÿõõõÿöööÿ÷÷÷ÿ÷ö÷ÿ÷÷öÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷ö÷ÿ÷÷÷ÿ÷ööÿ÷÷öÿ÷÷öÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷öÿ÷÷÷ÿö÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿö÷÷ÿ÷÷÷ÿ÷÷÷ÿö÷÷ÿýüýÿ¬¬¬·E$ 9`øøøÿôõôü÷÷÷ÿö÷÷ÿ÷÷÷ÿ÷÷÷ÿö÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷ö÷ÿ÷÷öÿöö÷ÿ÷ö÷ÿ÷÷÷ÿ÷ö÷ÿö÷÷ÿö÷÷ÿöööÿ÷ö÷ÿö÷÷ÿö÷÷ÿöö÷ÿö÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷öÿ÷ö÷ÿ÷÷÷ÿ÷÷÷ÿö÷÷ÿ÷÷÷ÿ÷ö÷ÿ÷÷÷ÿ÷ö÷ÿ÷÷÷ÿö÷÷ÿ÷ö÷ÿö÷÷ÿöö÷ÿõõõÿñòóÿîîðÿççìÿÝÝåÿÑÑÞÿÃÂÓÿ²±Èÿ¡ ½ÿ’‘°ÿvv¦ÿTT›ÿ:;ÿ67‰ÿ67‡ÿ56ÿ9:ˆÿ34~ÿ9:‰ÿ23}ÿ34€ÿ::‹ÿ;<ÿ*+oÿ22{ÿ56ƒÿ,-qÿ+,qÿ-.rÿ'(gÿ#$bÿ)*oÿ[ÿ `ÿ89vÿWW‡ÿ‚©ÿ““²ÿ¸ÿ®®Âÿ½¼ÍÿÉÉÕÿÔÔÜÿÝÜâÿâãæÿæåçÿçæèÿçèçÿæææÿããäÿàààÿÝÝÝÿÙÙÙÿÕÕÔÿÐÐÐÿËÊËÿÅÅÆÿ¾½Àÿ¶¶¹ÿ­¬³ÿ¤¤«ÿšš¥ÿžÿ……—ÿzyÿmmŠÿiiŽÿWWÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#ÿ"ÿ#ÿ#ÿ#ÿ"ÿ#ÿ"ÿ!ÿ ÿ ÿ!ÿ!ÿ!ÿ!ÿÿ_`ˆÿ††£ÿ££µÿ½¼ÇÿÒÒÖÿááâÿéêêÿïïïÿòòòÿôôôÿöõõÿöööÿ÷÷÷ÿöööÿ÷÷÷ÿ÷ö÷ÿ÷÷öÿ÷÷÷ÿ÷÷öÿ÷÷÷ÿöö÷ÿö÷÷ÿ÷ööÿö÷÷ÿ÷ööÿ÷÷÷ÿöö÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷öÿöööÿ÷÷öÿ÷÷öÿ÷÷÷ÿ÷÷÷ÿ÷ö÷ÿö÷öÿýýýÿ¬¬¬·E$ 9`øøøÿôõôüöö÷ÿ÷÷öÿ÷÷öÿöö÷ÿ÷ööÿ÷÷÷ÿ÷÷öÿ÷ööÿ÷ö÷ÿö÷öÿ÷÷öÿö÷öÿ÷ööÿ÷÷÷ÿ÷ö÷ÿ÷ööÿöööÿ÷ööÿö÷÷ÿ÷÷÷ÿ÷ö÷ÿö÷÷ÿ÷ö÷ÿöööÿö÷öÿöö÷ÿö÷÷ÿö÷öÿ÷÷öÿ÷ööÿö÷öÿöööÿö÷öÿ÷÷÷ÿö÷÷ÿ÷÷÷ÿ÷÷÷ÿöö÷ÿ÷ö÷ÿ÷ööÿöö÷ÿõööÿóóôÿïïñÿéêîÿããêÿØØâÿÍÌÚÿ¾¿Ñÿ¯¯Çÿ¡¡¼ÿ”•³ÿ‚‚©ÿdeŸÿLM—ÿ::Œÿ34†ÿ23ƒÿ35ƒÿ./yÿ01zÿ78†ÿ56ÿ"#aÿ-.uÿ01{ÿ()oÿ _ÿ12ÿXÿ23{ÿ=>zÿXYŽÿxy£ÿŒŒ­ÿ——µÿ¡¡»ÿ¯¯Ãÿ»¼ÌÿÇÇÓÿÒÑÚÿÙØßÿààãÿããåÿääåÿåååÿäääÿââãÿßßßÿÜÜÜÿ×××ÿÓÓÓÿÏÏÏÿÈÈÉÿÂÃÄÿ»»¾ÿ²³·ÿ©©°ÿ¡¡ªÿ––¢ÿŽŽœÿ‚ƒ•ÿwwÿmmŠÿiiÿ]]ˆÿ++Nÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ#ÿ#ÿ#ÿ#ÿ#ÿ#ÿ#ÿ%ÿ!ÿ"ÿ"ÿ!ÿ!ÿ!ÿ#ÿÿ()Kÿ€€¤ÿ””«ÿ±±¿ÿÈÇÏÿÚÛÝÿååæÿíííÿññðÿòòóÿõõõÿõõõÿöööÿ÷÷öÿ÷ö÷ÿö÷öÿ÷÷÷ÿ÷ö÷ÿ÷ö÷ÿ÷ööÿö÷÷ÿ÷÷÷ÿ÷ööÿ÷÷÷ÿ÷÷öÿö÷÷ÿ÷÷÷ÿö÷öÿö÷÷ÿö÷÷ÿ÷ööÿö÷÷ÿ÷÷÷ÿöö÷ÿ÷ööÿöööÿ÷÷öÿöööÿýüüÿ¬¬¬·E$ 9`øøøÿôôõüö÷÷ÿö÷öÿ÷ööÿö÷öÿöööÿöööÿöööÿö÷öÿöööÿöööÿ÷ööÿ÷ööÿöö÷ÿöööÿ÷ööÿöööÿ÷ö÷ÿ÷ö÷ÿ÷÷öÿö÷÷ÿö÷öÿö÷öÿöööÿöööÿ÷÷÷ÿ÷ööÿö÷öÿöööÿ÷÷öÿöö÷ÿöö÷ÿöööÿ÷ööÿö÷öÿöööÿ÷ööÿö÷öÿ÷÷÷ÿ÷ööÿöö÷ÿöö÷ÿö÷öÿöõöÿôôõÿññóÿííðÿçèìÿßàèÿ××áÿÌËÙÿÀ¿Ñÿ²²Éÿ§§Áÿ¹ÿ’’±ÿ„„¬ÿss£ÿcd¢ÿQR“ÿJK“ÿBCÿ=>‰ÿ9:‡ÿ/0tÿ33rÿFHÿNO“ÿJK€ÿggÿtt ÿ……ªÿ°ÿ˜˜µÿŸŸºÿª©Àÿ´´Èÿ¿¾ÎÿÈÉÔÿÒÑÛÿØØßÿÞßãÿââäÿâãåÿããäÿâââÿáàáÿÞÞÞÿÛÛÚÿÕÖÖÿÑÑÒÿÌÍÌÿÆÆÇÿ¿¿Áÿ¸¸»ÿ¯¯´ÿ¦§­ÿœœ§ÿ”” ÿŠŠšÿ€€”ÿttŒÿll‹ÿiiÿXXÿ00Tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ#ÿ#ÿ#ÿ#ÿ#ÿ#ÿ#ÿ'ÿ$ÿ#ÿ$ÿ!ÿ!ÿ"ÿ!ÿ"ÿÿii’ÿˆˆ¤ÿ¥¦¸ÿ¿¿ÉÿÓÔØÿáàâÿêêêÿïïïÿòñòÿôôôÿõõõÿöõõÿ÷ööÿö÷öÿö÷öÿöööÿöö÷ÿöööÿöööÿöööÿ÷÷öÿöööÿö÷öÿöö÷ÿöööÿöö÷ÿöööÿöööÿöööÿö÷öÿ÷ö÷ÿ÷ööÿö÷öÿöööÿö÷÷ÿöö÷ÿöööÿöööÿýüüÿ¬¬¬·E$ 9`øøøÿôôôüöööÿöööÿöööÿ÷ööÿöööÿö÷öÿöööÿöööÿö÷öÿöööÿ÷ööÿöööÿöööÿö÷÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷ööÿö÷öÿöööÿö÷öÿöööÿöö÷ÿöööÿöööÿö÷öÿ÷ööÿö÷öÿ÷ö÷ÿöööÿö÷öÿöö÷ÿöööÿöööÿö÷÷ÿöööÿöööÿöööÿöö÷ÿöööÿöö÷ÿóóôÿððòÿììïÿççìÿààçÿØØáÿÏÎÛÿÅÅÕÿ»»Ïÿ²²Éÿ©©Ãÿ¢£½ÿœœ·ÿ™˜µÿ’’±ÿŒŒ®ÿŠŠ­ÿˆ‡¬ÿ‰‰®ÿ‹‹®ÿŽŽ®ÿ““±ÿ™š·ÿ››·ÿ¡ »ÿ¦¦¿ÿ­­Äÿ¶¶Éÿ¾¾ÎÿÆÆÓÿÍÍØÿÓÓÜÿÙÙßÿÞÞâÿââäÿââäÿââãÿáâáÿßßßÿÝÜÜÿØØØÿÔÕÔÿÏÎÏÿËËËÿÄÄÅÿ¼¼¿ÿµµ¸ÿ­­²ÿ¤¤«ÿšš¤ÿžÿ††—ÿ{{‘ÿqq‹ÿkk‹ÿgfÿNNwÿ##Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ#ÿ&ÿ#ÿ%ÿ%ÿ$ÿ)ÿ"ÿ!ÿ$ÿÿ99^ÿƒƒ¥ÿ™™¯ÿ´µÂÿËËÒÿÜÛßÿæççÿíííÿðððÿóóóÿõõõÿõõõÿöööÿöööÿ÷ööÿöööÿöööÿö÷öÿöö÷ÿ÷ööÿöööÿöööÿöö÷ÿöööÿöööÿöö÷ÿ÷ööÿö÷öÿ÷ööÿöööÿöööÿöööÿöööÿö÷÷ÿöööÿö÷÷ÿ÷ööÿö÷öÿöööÿüüýÿ¬¬¬·E$ 9`øøøÿôôôüöööÿöööÿöööÿöööÿöööÿöööÿ÷ööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷ööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷ööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõöÿôõõÿóóôÿððòÿììïÿççìÿããéÿÜÜåÿÕÖàÿÎÎÛÿÈÈØÿÂÂÓÿ¼¼Ïÿ¶¶Ëÿ²²Éÿ¯¯Çÿ¬¬Åÿ««Äÿ««Äÿ­­Äÿ¯¯Æÿ²²Èÿ¶¶Êÿ»»ÎÿÀÀÐÿÅÅÔÿËË×ÿÐÐÚÿÕÕÞÿÙÙàÿÝÝâÿààäÿââäÿââäÿááâÿàààÿÞÞÞÿÛÛÛÿ××ÖÿÒÒÒÿÎÎÎÿÈÈÈÿÂÂÃÿºº¼ÿ²²¶ÿªª°ÿ  ¨ÿ——¢ÿŒŒ›ÿ‚‚–ÿxxÿnnŠÿkkŽÿaa‹ÿAAgÿ/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ#ÿ&ÿ 2ÿ&ÿ#ÿ%ÿ%ÿ#ÿ.ÿ'ÿÿ-ÿyy¡ÿŽŽ¨ÿ««¼ÿÃÃÌÿÕÖÚÿããäÿëëìÿðððÿòòòÿôôôÿõõõÿõõõÿöö÷ÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷ööÿöööÿö÷öÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿüüüÿ¬¬¬·E$ 9`÷øøÿôôôüöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöõöÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöõöÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõööÿöööÿöööÿöööÿöööÿõõõÿóóôÿññóÿîîñÿëëîÿççìÿããéÿßßæÿÛÛäÿÖÖàÿÒÒÞÿÐÐÜÿÍÍÚÿÌÌÙÿËËÙÿËËØÿËËÙÿÍÍÚÿÐÐÛÿÒÒÝÿÔÔÞÿ××àÿÛÛâÿÞÞäÿààäÿââæÿããæÿããåÿããäÿááâÿàààÿÝÝÝÿÙÙÙÿÕÕÕÿÐÑÐÿËËÌÿÅÅÆÿ¿¿Àÿ··»ÿ¯°´ÿ¦¦­ÿ¦ÿ““ ÿ‰ˆ™ÿ“ÿutŒÿllŠÿiiÿXXÿ0/Qÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ$ÿ#ÿ&ÿ 4ÿ 3ÿ 3ÿ'ÿ"ÿ)ÿ(ÿÿ 2ÿ$ÿ\\„ÿ‡‡¦ÿ££·ÿ¼»ÇÿÐÐÖÿßßáÿééêÿîîîÿñññÿóóóÿõõõÿõõõÿöööÿöööÿöööÿöööÿöõöÿõööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿüüüÿ¬¬¬·E$ 9`÷÷øÿóôóüöööÿöööÿöõöÿöööÿõõöÿöööÿöõõÿööõÿõööÿöõöÿõööÿõõöÿöööÿöööÿöööÿöööÿöööÿöõöÿööõÿöööÿöööÿöõöÿöööÿõööÿöööÿöõöÿöõöÿöööÿõõöÿöööÿööõÿöööÿöööÿöõöÿöööÿöööÿöööÿõööÿöööÿöööÿöööÿöööÿöõõÿöööÿöööÿöööÿööõÿöööÿöööÿõõöÿõööÿõõõÿóóôÿññóÿïïñÿîíñÿëëîÿèèíÿææëÿääêÿããéÿáâèÿááèÿááçÿááèÿââèÿããèÿãäéÿæåéÿåæéÿæçéÿççèÿææèÿååæÿäääÿâââÿßààÿÜÜÛÿØØØÿÔÔÓÿÏÏÏÿÉÉÊÿÃÃÄÿ¼¼¿ÿ´´¸ÿ¬­²ÿ££ªÿ™™£ÿÿ……—ÿ||‘ÿqq‹ÿkkŒÿeeÿNNvÿ!!@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ$ÿ'ÿ 5ÿ 4ÿ 4ÿ 4ÿ 4ÿ*ÿ!ÿ+ÿ4ÿÿ::cÿ††¨ÿšš°ÿ´µÃÿÊÊÒÿÛÚÞÿååæÿììíÿñðñÿòòòÿôôôÿõôõÿööõÿöööÿõööÿöööÿõöõÿöööÿõõöÿöööÿöööÿöõöÿöööÿõööÿöõöÿöööÿõööÿõööÿöõõÿõööÿööõÿõööÿõööÿööõÿõööÿöööÿöõöÿõööÿöõöÿõõõÿõõõÿüüüÿ¬¬¬·E$ 9`÷÷÷ÿóôóüöööÿõööÿõöõÿöõõÿõööÿõööÿöõöÿöööÿööõÿõõöÿõööÿööõÿõööÿöõöÿõööÿöööÿõõõÿõõöÿöööÿöõöÿööõÿöööÿöõöÿöööÿöõöÿöõöÿöööÿõõöÿöööÿöõöÿõööÿöööÿõõõÿõöõÿöööÿõõõÿõööÿõõõÿõõöÿöööÿõööÿõööÿöõõÿöööÿöööÿõõöÿööõÿöõöÿöõöÿöööÿöõöÿöõöÿõööÿöõöÿõõöÿôôõÿóôõÿóóôÿòòóÿðñòÿððñÿðïñÿïïñÿîïðÿîîðÿíìîÿíîïÿììíÿììíÿëêëÿééêÿææçÿåååÿâáâÿÞÞÞÿÛÛÛÿ××ÖÿÒÒÒÿÍÍÍÿÇÈÉÿÁÁÃÿº¹¼ÿ²±¶ÿ©©¯ÿ  ©ÿ––¡ÿŒŒ›ÿƒ‚–ÿwwÿnn‰ÿjjÿbb‹ÿ??eÿ/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ%ÿ#ÿ)ÿ 6ÿ 4ÿ 4ÿ 4ÿ 4ÿ 4ÿ 6ÿ1ÿ#ÿ!ÿJÿ€€¥ÿ‘‘«ÿ®®¿ÿÅÅÎÿÖÖÛÿããåÿêëëÿïïïÿòòòÿôóôÿôôôÿõõôÿõõõÿöööÿöööÿõöõÿööõÿõõöÿööõÿöööÿõööÿöööÿõõõÿõööÿõöõÿööõÿöööÿõõöÿõööÿöõöÿõööÿöõöÿõõöÿõõöÿöõöÿõöõÿöõöÿöööÿõööÿöööÿõööÿüüüÿ¬¬¬·E$ 9`÷÷÷ÿóóôüõõöÿõõöÿõööÿõõõÿõõöÿöõõÿõõöÿöõõÿõõõÿõööÿöõöÿõööÿöõõÿõöõÿõõõÿõõõÿõõõÿöõõÿöööÿõööÿõõöÿõöõÿõõõÿöõõÿõööÿööõÿööõÿõõõÿöõõÿõöõÿööõÿõöõÿõöõÿööõÿõööÿõöõÿöõöÿõöõÿöõöÿööõÿöõöÿõöõÿöõöÿõõöÿööõÿõõöÿõööÿöõöÿöõöÿõööÿöõõÿõõõÿöööÿõööÿöööÿõöõÿööõÿôõõÿõõôÿôôôÿôõõÿóóôÿóòóÿòòòÿñññÿîïðÿíííÿëëëÿéééÿçææÿääãÿáàáÿÝÝÞÿÙÙÙÿÕÕÕÿÑÐÑÿËËÌÿÅÄÆÿ¾¿Àÿ··ºÿ¯¯³ÿ¦¦­ÿœœ¦ÿ’’Ÿÿ‰‰™ÿ~’ÿttÿlmŠÿihÿWW€ÿ01Tÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ÿ'ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ#ÿ.ÿHÿEÿ 6ÿ 5ÿ 5ÿ 5ÿ 5ÿ 5ÿ 5ÿ 5ÿ 0ÿuuœÿ©ÿ©©»ÿÀÀËÿÓÓÙÿààãÿèééÿîîïÿñññÿóóóÿôôôÿôôõÿõõõÿõõöÿõõõÿõõöÿõõöÿõõõÿõõöÿõöõÿöõöÿõõöÿöõõÿõöõÿõõöÿöõöÿõööÿõõöÿöõõÿöõöÿõöõÿööõÿõõõÿõõöÿöõõÿõööÿõõõÿõõöÿõõõÿõöõÿõöõÿõõõÿüüüÿ«««·E$ 9`÷÷÷ÿóóôüõöõÿõõõÿõõõÿööõÿõõõÿöõõÿõööÿõööÿööõÿöõõÿõõõÿõõõÿõõöÿöõõÿõöõÿöõõÿöõöÿõõõÿõõöÿöõõÿõõõÿöõõÿõõõÿööõÿõõõÿõõöÿõõõÿõõöÿööõÿõöõÿõööÿõöõÿöõõÿõöõÿõõõÿõööÿõõöÿöõõÿõöõÿõõöÿõõõÿõöõÿõõõÿõöõÿõõõÿõöõÿõõõÿõõõÿõõõÿöõõÿõõöÿõõöÿööõÿõõöÿõõõÿõõõÿôôôÿõôôÿôôôÿóôóÿóóóÿññòÿðððÿïïïÿíììÿêêêÿèèèÿæåæÿãããÿàßàÿÛÜÜÿØ××ÿÓÓÓÿÎÎÏÿÈÈÉÿÄÄÄÿ»»¾ÿµ´¸ÿ««±ÿ££«ÿ™™¤ÿÿ……—ÿ{{ÿppŠÿkkŒÿeeÿNNwÿ!"Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#ÿ'ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ'ÿ%ÿ%ÿ ;ÿEÿ =ÿGÿEÿ 6ÿ 5ÿ 5ÿ 5ÿ 5ÿ 6ÿ2ÿkk•ÿ‹‹¨ÿ¤¤¸ÿ¼¼ÉÿÎÏÖÿÞÞáÿèèéÿîîîÿññðÿòóóÿôóôÿôôôÿôõõÿõõõÿõõöÿöõõÿööõÿõöõÿõöõÿõõõÿõööÿõõõÿõöõÿõõõÿöõöÿõõõÿõõõÿööõÿõöõÿõõõÿõööÿõõõÿöõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõöÿõõöÿõõõÿööõÿõõõÿûûûÿ«««·E$ 9`÷÷÷ÿóóóüõõõÿõöõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöõõÿõõõÿõõõÿöõõÿõõõÿõõõÿõõõÿõõõÿöõõÿõõõÿõõõÿõöõÿõöõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõöÿõõõÿõõõÿöõõÿõõõÿõõõÿõöõÿõõõÿõõõÿõöõÿõõõÿöõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõöõÿõõõÿôôôÿôõôÿôôôÿóóóÿòòòÿñññÿðððÿîîíÿìììÿéééÿèèèÿåååÿááâÿßÞßÿÚÚÚÿÖÖÖÿÒÒÒÿÌÌÍÿÇÇÈÿÀÀÂÿºº½ÿ±±¶ÿ¨©¯ÿŸŸ§ÿ––¡ÿŒŒ›ÿ‚‚•ÿwwŽÿnnŠÿjjÿaaŠÿ??fÿ.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ÿ'ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ&ÿ'ÿ&ÿ#ÿ0ÿJÿNÿFÿCÿ <ÿGÿFÿ 5ÿ 5ÿ 5ÿ 6ÿ/ÿccÿŠŠ©ÿ¡¡·ÿ¹¹ÇÿÌÌÕÿÜÛàÿææèÿììíÿððñÿòòòÿôôôÿôôôÿôôôÿõõõÿõõõÿööõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöõõÿõõõÿõöõÿöõõÿõõõÿõõõÿõõõÿõõõÿöõõÿõõõÿõõöÿõöõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿûûûÿ«««·E$ 9`÷÷÷ÿóóóüõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿóóóÿòòòÿñññÿðððÿîîîÿìììÿéêêÿçççÿåååÿáááÿÝÜÜÿÙÙÙÿÕÕÕÿÐÐÐÿËËËÿÄÄÆÿ¾¾Àÿ¶¶¹ÿ®®³ÿ¤¤¬ÿœœ¦ÿ’’Ÿÿˆˆ™ÿ~~’ÿssŒÿmm‹ÿiiÿWW€ÿ..Rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ'ÿ(ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ(ÿ'ÿ"ÿ)ÿBÿZÿLÿRÿCÿJÿDÿ :ÿLÿCÿ4ÿ 7ÿ1ÿccŽÿŠŠ©ÿ Ÿ¶ÿ¸¸ÆÿËËÔÿÚÚßÿäåçÿëììÿðððÿòòòÿóóóÿôôôÿôôôÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿûûûÿ«««·E$ 9`öööÿóóóüõõõÿõõõÿôõõÿõõõÿôôõÿõõõÿõõõÿõõôÿõõõÿõõôÿõõõÿõõõÿôõõÿõôõÿõõõÿõõõÿõõõÿôõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõôõÿõõõÿôõõÿõõõÿõõõÿõõõÿôôõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõôÿõõõÿõõõÿôõõÿõõõÿõõõÿõõôÿõõõÿôôôÿôôôÿôôôÿôóôÿòòóÿòòòÿðïðÿïîîÿìëìÿêêêÿçççÿåååÿáááÿÝÝÝÿÙØÙÿÔÔÔÿÎÏÏÿÉÉÉÿÂÂÄÿ»»¾ÿ´´¸ÿ««±ÿ¢¢ªÿ™™¤ÿÿ……—ÿ{{‘ÿppŠÿjj‹ÿeeÿLMuÿ =ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ÿ(ÿ(ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ'ÿ#ÿ)ÿCÿYÿNÿSÿRÿNÿPÿ >ÿNÿ?ÿ ;ÿTÿ 9ÿ3ÿbbÿ‹‹«ÿŸŸ¶ÿ¶·ÆÿÊËÔÿÙÙÞÿäåæÿêëìÿïððÿòòñÿóóóÿôôôÿôôôÿõôõÿõõõÿõõõÿõõõÿõõõÿõõõÿõôõÿõõõÿôõõÿõõõÿõõõÿôõôÿõõõÿõõõÿôõõÿõôõÿõõõÿõõõÿõôõÿõõõÿõôõÿõõõÿõõõÿõôõÿõõõÿõõõÿõõõÿõõôÿõõõÿõõõÿõõõÿõõõÿõõõÿûûûÿ««ª·E$ 9`öööÿòòóüôõôÿõõõÿõõõÿõõôÿõõõÿôôõÿõõôÿõôõÿôõõÿõôôÿôõõÿõôõÿõôõÿõôôÿôõõÿôõõÿõõõÿõõõÿôõõÿõõõÿõõôÿõõõÿõõõÿôõõÿôõõÿôõõÿõôõÿôõôÿõôôÿõõõÿõõôÿõôõÿõôôÿõõõÿõõõÿõõõÿôôôÿõõõÿõôõÿõôõÿôõôÿõõôÿôõõÿõõõÿôõõÿõôõÿõõõÿõõõÿôõõÿôôôÿôôóÿôóóÿóóóÿòòòÿññðÿïïïÿíííÿêêêÿèèèÿååäÿáááÿÜÝÜÿØØØÿÓÓÓÿÍÍÎÿÇÈÈÿÁÁÂÿ¹º¼ÿ±±¶ÿ©¨¯ÿžž§ÿ••¡ÿŒ‹šÿ•ÿwwŽÿmm‰ÿjjÿaa‹ÿ==cÿ-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ&ÿ)ÿ(ÿ'ÿ'ÿ(ÿ'ÿ'ÿ'ÿ(ÿ(ÿ'ÿ#ÿ)ÿDÿZÿ\ÿYÿTÿLÿWÿKÿVÿJÿ <ÿVÿ 5ÿ ?ÿSÿll”ÿŒŒ¬ÿ¡¢¸ÿ¸¸ÇÿÊËÕÿÙØÞÿääæÿêëìÿððïÿòòòÿóóòÿóôôÿôôôÿôõõÿõõõÿôõõÿôôõÿôõõÿôõõÿõõôÿôôõÿôôõÿõõôÿõôõÿõôõÿõôôÿõõôÿõõõÿõõõÿõõôÿõõõÿõôõÿôõõÿõõõÿõôõÿõôõÿôõõÿõôôÿõôõÿôõõÿõõôÿõõõÿôôõÿõõõÿõõõÿõõõÿôôõÿûûûÿ«««·E$ 9`öööÿóóòüôõõÿõõõÿõôôÿõõôÿôõôÿõõõÿõôõÿôôôÿõõôÿõõôÿôôôÿõôõÿôõôÿôôôÿôõôÿõõôÿôõôÿôôõÿôôôÿôôôÿôõõÿõõôÿôõõÿõôôÿõõõÿõôôÿõõôÿõôõÿõõôÿôôõÿôõõÿõôõÿõõôÿõõõÿôõôÿõôõÿõõôÿõõõÿôôôÿõõõÿõôôÿôôôÿôôôÿõõôÿõôôÿõõõÿôõôÿôôôÿôôôÿôôóÿóóóÿóóòÿñòñÿðððÿíîîÿëëìÿèèèÿæææÿâââÿÞÞÞÿÙÙÙÿÓÓÔÿÍÍÎÿÇÆÇÿ¿¿Áÿ¶¶ºÿ®®³ÿ¦¦­ÿœœ¦ÿ’‘žÿˆˆ˜ÿ~~’ÿsr‹ÿllŠÿiiŽÿVVÿ..Pÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ÿ(ÿ)ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ)ÿ'ÿ$ÿ1ÿEÿ[ÿ\ÿYÿZÿZÿYÿMÿUÿTÿMÿZÿ ?ÿFÿJÿJÿzz¤ÿŽŽ¬ÿ¥¥ºÿº»ÉÿÌÌÕÿÚÚßÿäåçÿëëíÿïïðÿñññÿóóóÿóôóÿôóóÿôôõÿôõôÿõôõÿõôõÿõôôÿõõôÿôõôÿôôõÿõõôÿôõõÿõôõÿõõõÿõõôÿôõõÿôôõÿõõõÿôõôÿõõôÿôõõÿõõôÿôõõÿôõôÿõõôÿôõõÿõõôÿõõõÿôôõÿôõôÿôôõÿôõõÿõôôÿôõõÿõôôÿõõôÿôôõÿúûúÿ««ª·E$ 9`öööÿóòòüõôôÿôõôÿôôôÿôôõÿõôõÿôôôÿõõõÿôôôÿôôõÿôôõÿôôôÿôôõÿõôõÿôõôÿôôôÿôôõÿôôôÿõôôÿôôôÿôôõÿõôõÿõôõÿôõôÿõôôÿôôôÿôôôÿôôôÿôôõÿõôôÿôôõÿôôôÿôôõÿôôôÿõõôÿôôôÿôôôÿôôôÿõôôÿôôôÿôôôÿôõôÿõõõÿôôôÿõôôÿôõõÿôôõÿôõôÿóôóÿóóóÿóóóÿñòòÿðððÿïðïÿìííÿêêêÿèççÿãäãÿßßßÿÚÚÙÿÔÔÔÿÎÎÏÿÆÆÈÿ¿¿Áÿ¶¶ºÿ­­²ÿ¢£«ÿ™™£ÿÿ„„–ÿzzÿopŠÿjj‹ÿeeŒÿKKtÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&ÿ)ÿ)ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ(ÿ)ÿ%ÿ$ÿ2ÿOÿ#$eÿ$%gÿXÿYÿZÿYÿZÿZÿUÿMÿYÿJÿUÿ[ÿ,ÿDEyÿ„„¨ÿ’“¯ÿ©©¾ÿ½½ËÿÎÎ×ÿÛÛàÿååçÿìëìÿïïïÿòòòÿóôóÿôóóÿóóóÿôôôÿõôõÿõôôÿôõõÿõôôÿõõôÿôôôÿõõõÿõôôÿõôõÿõõôÿôôôÿôõõÿôôôÿôõôÿôõôÿôõôÿôõõÿõôôÿôôôÿõôõÿõôôÿõôõÿôõôÿõôôÿôôõÿôõõÿôôôÿôôõÿôõôÿõõõÿôôôÿõôôÿôôõÿôõôÿôôôÿúûûÿªª«·E$ 9`öööÿòóòüôôõÿôôôÿôôôÿôôôÿôôôÿôôôÿõôôÿôôõÿôôôÿôôôÿôõôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿõôôÿôôôÿôôôÿôõôÿôõôÿôôõÿôôôÿôôôÿõôôÿôôôÿôôôÿôôõÿôôôÿõôõÿõôôÿôôôÿôõôÿôôôÿôôôÿôôôÿõôõÿôôõÿõõôÿõôôÿôôôÿôõôÿôôôÿôôõÿôôôÿóóóÿóóôÿóóòÿññòÿðððÿîîîÿìììÿéééÿååæÿâááÿÜÜÝÿ×××ÿÏÏÐÿÈÈÊÿ¿¿Ãÿ¶¶ºÿ««²ÿ¢¢ªÿ—–¢ÿŒŒœÿ‚‚•ÿwvŽÿnnŠÿjjŽÿ``‰ÿ<ÿQÿ]ÿ[ÿ[ÿ$%hÿ[ÿYÿZÿZÿZÿZÿZÿLÿTÿZÿ Aÿ [ÿdd’ÿ‹‹«ÿ™™³ÿ¯¯ÃÿÁÁÎÿÑÑÚÿÝÝâÿæåèÿëëíÿðïðÿòòòÿóóóÿóóóÿóóóÿôôõÿõôôÿôôõÿôôôÿôôõÿôôôÿôôôÿôôõÿõôôÿôôõÿôôôÿôõõÿôôôÿôôôÿõôõÿôôôÿôôôÿôôôÿôôôÿôôôÿõôôÿôôôÿôôôÿôôôÿôôôÿõôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôõôÿôõôÿôôôÿôõõÿôôôÿôôôÿúûúÿªª«·E$ 9`öööÿòòòüôôôÿôôôÿôôôÿôôôÿôôôÿõôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôõôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿõôôÿôôôÿôôôÿôôõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿõôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿòòòÿñññÿïïïÿíííÿëëëÿèèèÿäääÿàààÿÙÙÙÿÓÓÓÿËËÌÿÂÂÅÿ¸¸¼ÿ¬­³ÿ¡¡«ÿ––£ÿ‹‹›ÿ”ÿttÿll‹ÿiiÿUU~ÿ,,Oÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ%ÿ)ÿ*ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ*ÿ'ÿ$ÿ/ÿCÿVÿ##gÿ$$iÿYÿZÿ[ÿ bÿ""eÿZÿ[ÿZÿ[ÿ[ÿ[ÿ[ÿ DÿTÿEE{ÿ~}¤ÿ‘‘®ÿ¢¢ºÿ··ÈÿÇÇÓÿÔÔÜÿààäÿççêÿííîÿððñÿòòòÿóóóÿóóóÿóóóÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôõôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôõÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿúúúÿªªª·E$ 9`öõöÿòòòüôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôóôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôóôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôóÿóóóÿóóóÿòòòÿðññÿðððÿíííÿéêêÿèççÿâââÿÝÝÞÿÖÖÖÿÏÏÐÿÅÅÇÿ»»¿ÿ°°¶ÿ¤¤­ÿ——¤ÿ‹‹œÿ”ÿrrÿllÿeeÿKKtÿ<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ&ÿ*ÿ*ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ)ÿ*ÿ*ÿ&ÿ&ÿ6ÿPÿ]ÿ))pÿ[ÿWÿ%%kÿ^ÿZÿZÿ\ÿ$$iÿ\ÿ[ÿZÿ[ÿ\ÿXÿWÿ44lÿnn™ÿ­ÿ™™´ÿ­­Áÿ¾¾ÍÿÍÌ×ÿÙÙßÿââæÿêéìÿîîîÿððñÿòòòÿóóóÿóóóÿóóóÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóôôÿôôóÿúúúÿªªª·E$ 9`õõõÿòòòüóôóÿôôôÿóóóÿôôôÿôôôÿôôôÿôôôÿôôóÿôôôÿôôôÿôôôÿôóôÿóóôÿôóôÿôóôÿôôôÿôôôÿôôôÿôôôÿóôóÿôôôÿôôôÿôôóÿôôôÿóôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôóôÿôôóÿôôôÿôóôÿôôôÿóôôÿôôôÿôóóÿóôôÿôôôÿôôôÿôôôÿóóóÿóóòÿóóóÿòòòÿðððÿîîîÿìììÿééêÿæææÿâááÿÛÛÛÿÔÔÕÿËËÌÿÁÁÄÿµµ»ÿ¨¨±ÿšš§ÿžÿ•ÿssŽÿnmÿaaŠÿ;;aÿ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#ÿ(ÿ,ÿ+ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ+ÿ)ÿ%ÿ*ÿCÿUÿ bÿ&&mÿZÿ""eÿ!!eÿXÿ aÿ##hÿYÿ[ÿ\ÿ dÿ""eÿZÿ\ÿXÿVÿ11mÿgg•ÿŠŠ¬ÿ••²ÿ¦¦½ÿ¸¸ÈÿÆÇÓÿÓÓÛÿÞÞãÿææéÿëëìÿïïðÿññòÿòòòÿóóóÿóóóÿóóóÿôôôÿôóôÿôôôÿóóôÿôôôÿôôôÿóôôÿôóôÿôôôÿôôôÿôóóÿôôôÿôóóÿôôóÿôóôÿôôôÿóôôÿôôôÿôôôÿóôôÿóôôÿóôôÿôôôÿôôóÿóóôÿôôôÿôôôÿóôôÿôôôÿôóôÿôôôÿóôôÿôôôÿôôôÿôóóÿôôôÿóôôÿóôôÿôóôÿóóóÿúúùÿªªª·E$ 9`õõõÿòòòüôôôÿôóóÿôôóÿôóóÿôôôÿôôóÿôóôÿôôôÿóóôÿôôôÿôôóÿôôôÿôôóÿôóôÿóôôÿôôóÿôóóÿóôôÿôóóÿôóôÿôôóÿóôôÿôôôÿóôóÿôôóÿôôóÿóôôÿôóôÿôôôÿôôóÿôóôÿóôôÿôóóÿóôóÿôôôÿóôôÿôóóÿóôôÿôóôÿôóôÿôóôÿôóóÿóòòÿóóóÿñññÿðððÿïïïÿìììÿéééÿåååÿßààÿÚÙÚÿÐÑÒÿÇÇÊÿ¼»Àÿ¯¯·ÿ¡¡«ÿ’’¢ÿƒƒ—ÿttÿpp’ÿZZ‚ÿ,,Nÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ÿ*ÿ+ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ+ÿ*ÿ'ÿ'ÿ1ÿRÿ^ÿ$$iÿ""fÿYÿ cÿ""fÿZÿ&&lÿ[ÿYÿ%%kÿ^ÿ[ÿ[ÿ]ÿ%%kÿYÿVÿ22nÿgf•ÿ‡‡ªÿ““±ÿ¢¢ºÿ´³ÆÿÂÂÐÿÏÏÙÿÚÚàÿââæÿèéëÿííîÿððñÿññòÿóóóÿòóóÿóóóÿóôôÿóóóÿôôôÿóôóÿôóôÿôôóÿôôôÿóôôÿôôôÿôóôÿóôóÿôôôÿôôôÿôôôÿôôôÿôóôÿôóôÿôôôÿôôôÿôôôÿóôóÿôôôÿôôôÿôôôÿóôóÿôôôÿóôôÿôóóÿóóôÿôóôÿôôóÿôôôÿôôôÿôôôÿóóôÿôôóÿôôôÿôóóÿôôôÿóôôÿóóôÿóôóÿúùúÿ©ªª·E$ 9`õõõÿòòòüóôóÿôóôÿóôóÿóôôÿôôóÿôôóÿôóóÿôóôÿóóóÿôóóÿôôôÿóóóÿôôôÿóôôÿóôóÿóóôÿóôóÿóóóÿôôóÿôóóÿóóóÿôóóÿôóóÿóóôÿóôóÿóóóÿóóóÿôôóÿóóôÿóóóÿôôôÿóóôÿóóôÿôóôÿóôôÿóôóÿóôôÿôóóÿóôôÿôóôÿóóôÿòóòÿòòóÿòòòÿðððÿîîïÿìììÿéèèÿæååÿßßßÿØØÙÿÏÏÑÿÄÄÈÿ¸¸½ÿ©ª³ÿšš¨ÿŠŠÿzz“ÿoo‘ÿccŒÿ..Pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ'ÿ+ÿ+ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ*ÿ+ÿ)ÿ%ÿ,ÿ <ÿ[ÿ##hÿ aÿ$$kÿXÿ&&lÿ\ÿ\ÿ$$jÿZÿ""fÿ!!dÿXÿ aÿ##iÿ[ÿ[ÿWÿcÿ::wÿii—ÿ‡‡ªÿ““°ÿ¡¡ºÿ²²ÅÿÀÀÏÿÌÌ×ÿØ×Þÿààåÿææéÿëëíÿïîðÿñðñÿòòóÿóóòÿòòòÿôóóÿóôôÿóóóÿóôôÿôôôÿôóóÿóôôÿôóôÿôôóÿóóôÿóôôÿôôôÿóôóÿóóóÿóôôÿóóôÿôóóÿóôôÿôóóÿôôóÿóóóÿôóóÿôóôÿóôôÿôôóÿôóôÿóôôÿôóóÿóóôÿóôôÿôôóÿóóôÿóôóÿóóóÿóôôÿóóóÿôóóÿóôôÿôóôÿóôôÿôóôÿóóôÿôóóÿóóóÿùúùÿªªª·E$ 9`õõõÿñòñüôóóÿóôóÿôôóÿóóóÿóôóÿóóôÿóóóÿóóóÿóóôÿóôóÿóóóÿôóóÿóóôÿóóóÿôóóÿóóôÿóóóÿóóóÿôóôÿôóóÿôóôÿóóóÿôóóÿóóóÿóôôÿóóóÿóóóÿóóóÿóôóÿóóóÿôóôÿóóôÿóóóÿôóóÿóôóÿôóóÿóóóÿôóóÿôóóÿôóôÿóòóÿóóòÿòòòÿððñÿïîîÿìììÿéééÿåååÿÞÞÞÿÖÖ×ÿÍÍÐÿÁÁÅÿ³³»ÿ¤¤¯ÿ””¤ÿƒ‚™ÿtsÿmm“ÿ@@fÿ#ÿÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#ÿ*ÿ,ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ,ÿ+ÿ'ÿ)ÿ5ÿVÿ##jÿ''oÿ[ÿ&&mÿZÿ%%kÿ`ÿ!!eÿ""fÿ[ÿ cÿ##gÿZÿ&&mÿ]ÿZÿ&&mÿVÿ]ÿ@@yÿppœÿ‰Š«ÿ“”±ÿ¢¢ºÿ²±Æÿ¿¿ÎÿÌÌ×ÿÖÖÝÿßßäÿæåéÿëëìÿîîïÿñðñÿòòòÿóòòÿòòòÿóóóÿóôôÿóóóÿóóóÿóôóÿôóóÿóôôÿóôóÿóóôÿôóóÿôóóÿóóóÿôóóÿôóóÿóóóÿôóôÿôóóÿóôôÿôóôÿóóóÿôóóÿóôôÿóôóÿôóóÿóóóÿôôóÿóóôÿóóóÿóóôÿóóóÿóôóÿóóôÿóóóÿôóôÿôóôÿôóóÿôóóÿóóôÿóôóÿóóóÿóóôÿóóóÿôóóÿôóóÿôóóÿóóóÿùùúÿ©©©·E$ 9`õõõÿñññüóóóÿóóóÿóóóÿóóóÿóóôÿóóóÿóóóÿôóóÿôóóÿóôóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóôóÿóóóÿóóôÿóóóÿóóóÿóóóÿôóóÿôóôÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿññòÿðððÿîîîÿëëìÿéééÿåååÿÞÞßÿÖÖ×ÿÌÌÏÿ¾¾Ãÿ¯¯¸ÿ  ­ÿŽŽ¡ÿ{{”ÿrr”ÿYYÿ8ÿÿ ÿ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&ÿ+ÿ,ÿ+ÿ+ÿ+ÿ+ÿ+ÿ+ÿ,ÿ+ÿ(ÿ'ÿ1ÿDÿ]ÿ&&oÿ]ÿ$$jÿ$$jÿ`ÿ!!dÿ!!gÿ^ÿ%%lÿYÿ&&mÿ]ÿ]ÿ$$jÿ\ÿ$$hÿaÿTÿ))mÿOOˆÿww ÿŒ‹¬ÿ––²ÿ¤¤¼ÿ³³Æÿ¿ÀÎÿÌÌÖÿÖÖÝÿÞÞäÿääèÿééìÿííïÿððñÿòòòÿòòòÿòòòÿòòòÿóóóÿóóôÿôóóÿóóóÿóôóÿóóôÿóóóÿóóóÿóóóÿóóóÿôóóÿóóóÿóóôÿóóóÿóóôÿóóóÿóóóÿóôóÿóóóÿóóóÿóóôÿóóóÿóôóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóôóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóôÿóóóÿóóóÿùùùÿ©ª©·E$ 9`õõõÿñññüóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿòòòÿññðÿïïïÿíííÿêêêÿåååÿßßßÿÖÖØÿËËÎÿ¾¾Ãÿ­­·ÿœœ«ÿ‰‰žÿww’ÿnn•ÿ99_ÿÿÿ%ÿÿ!ÿ ÿÿÿÿÿÿÿÿÿÿÿ"ÿ*ÿ-ÿ,ÿ+ÿ+ÿ,ÿ+ÿ+ÿ,ÿ,ÿ+ÿ'ÿ,ÿ ;ÿXÿ$$kÿ((qÿ[ÿ%%lÿ^ÿ""fÿ##iÿ$$kÿ[ÿ&&nÿ[ÿ%%kÿ`ÿ!!eÿ""gÿ]ÿ!!eÿdÿWÿ99}ÿYYŠÿ~~¤ÿ®ÿ˜˜´ÿ§§½ÿµµÈÿÂÂÐÿÍÍ×ÿÖÖÞÿÞÞäÿääèÿéêìÿíîïÿðððÿòòòÿòòòÿòòòÿòòòÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóòóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿùùùÿ©©©·E$ 9`õôõÿñññüóóóÿòóóÿóóóÿóóóÿóóóÿóóóÿòóóÿóóóÿóóóÿóóóÿòóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóòÿóóóÿóóòÿóóóÿóóóÿóóóÿóóóÿóóóÿòòóÿóóóÿóóòÿóóóÿóóóÿóóòÿóóòÿóóóÿóóòÿóóóÿóóóÿóóóÿóóóÿòòòÿñòòÿñññÿïïïÿííìÿééêÿæææÿßßàÿÖÖØÿÊÊÎÿ½½Ãÿ««¶ÿš™©ÿ……›ÿtt“ÿddŽÿ:ÿÿ"ÿ"ÿ!ÿ"ÿÿ"ÿ ÿÿÿÿÿÿÿÿ%ÿ,ÿ-ÿ,ÿ,ÿ,ÿ,ÿ,ÿ,ÿ-ÿ,ÿ)ÿ)ÿ4ÿRÿ##iÿ''qÿ\ÿ$$kÿ##jÿ!!eÿ`ÿ%%kÿ\ÿ$$lÿ%%lÿ`ÿ!!eÿ""fÿ_ÿ%%mÿ\ÿ&&mÿUÿ dÿBB€ÿjj˜ÿ††¨ÿ‘‘°ÿ·ÿ«ªÀÿ¹¹ÊÿÄÄÑÿÏÏÙÿØØßÿààäÿäåéÿêêìÿîîïÿððñÿñññÿòòòÿòòòÿóóòÿóóóÿóóóÿóóóÿóòóÿóóòÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòóóÿóóóÿòóóÿóóóÿóóóÿóóóÿóóòÿóòóÿòóóÿòóóÿóóòÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòóóÿóóóÿóóóÿóóòÿóóóÿóóóÿóóóÿóóòÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóòòÿùùùÿ©©©·E$ 9`ôôôÿñðñüóóòÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòóÿòòóÿòóóÿòóòÿóòóÿóóòÿóóóÿóòóÿóóóÿóóóÿóóóÿòóóÿóóòÿòóòÿóòóÿóóóÿóóòÿòòóÿóóòÿóóóÿóóóÿóòòÿóòóÿòóóÿóòóÿóóóÿòòòÿóóòÿòòòÿòóóÿòóòÿòñòÿññòÿðïðÿîíîÿëëëÿçççÿààáÿØØÙÿËËÏÿ½½Ãÿ««¶ÿ˜˜©ÿ‚‚šÿuu–ÿTT}ÿ ÿ"ÿ!ÿ"ÿ!ÿ!ÿ"ÿÿ!ÿ!ÿÿÿÿÿÿ(ÿ,ÿ-ÿ,ÿ,ÿ,ÿ,ÿ,ÿ,ÿ-ÿ,ÿ(ÿ/ÿ @ÿZÿ''pÿ]ÿ%%kÿ$$jÿ cÿbÿ$$jÿ%%mÿ[ÿ%%lÿ_ÿ""fÿ##iÿ$$kÿ[ÿ''oÿ[ÿ""jÿYÿ11tÿTT‰ÿyx ÿ‹‹«ÿ••²ÿ¢¢»ÿ¯°Ãÿ¼¼ÌÿÇÇÔÿÐÐÚÿÚÚàÿààåÿææéÿëëìÿîíïÿðððÿññòÿòñòÿòòñÿòòñÿòññÿòòòÿòòòÿòòòÿóóóÿóóòÿòóóÿóóòÿóóóÿóòóÿóóóÿóóòÿòóóÿóóóÿóóóÿóóòÿóóòÿóóòÿóóòÿòóóÿóóòÿóóóÿóóòÿóòóÿóòòÿóóóÿóóòÿòóóÿóóóÿóóóÿóóóÿóóòÿóóóÿóóòÿòóòÿóóóÿòóóÿóóóÿóóóÿòòóÿòóòÿóóóÿóóóÿóòóÿóóóÿóóóÿòóóÿóóóÿóóóÿóóóÿóòóÿòóóÿóòòÿùøøÿ©ª©·E$ 9`ôõôÿñðñüòòóÿóóòÿóòóÿóòóÿóóóÿòòóÿòóòÿóóòÿòòóÿóóòÿòòòÿóòóÿòóóÿòóòÿòòòÿòòòÿòòòÿòòóÿòóòÿóòóÿòòòÿóòòÿòóóÿòóóÿòòòÿòòóÿòóóÿòóòÿóòóÿóòóÿòóòÿóòóÿóóòÿóóóÿòóóÿóóóÿòóòÿòññÿñññÿððñÿîîîÿìëìÿèèèÿááâÿÙØÛÿÍÍÑÿ½¾Åÿ««·ÿ——©ÿ€šÿuu™ÿBBjÿÿ#ÿ"ÿ%ÿ"ÿ"ÿ"ÿ"ÿ"ÿ ÿ#ÿ ÿÿ$ÿ+ÿ.ÿ-ÿ,ÿ,ÿ-ÿ-ÿ,ÿ-ÿ-ÿ+ÿ)ÿ1ÿHÿ`ÿ''qÿ\ÿ##jÿbÿ dÿ$$kÿ%%mÿ[ÿ$$lÿ$$kÿ!!eÿaÿ$$lÿ\ÿ%%lÿ&&mÿ^ÿdÿ !eÿ>>{ÿhh˜ÿ‚‚¦ÿ‘¯ÿš™µÿ¨¨¾ÿ´´ÇÿÀÁÏÿÊËÖÿÓÔÜÿÛÛáÿââæÿççêÿìëíÿîîïÿðððÿñññÿòññÿòññÿòòñÿòòñÿòòòÿòòòÿòñòÿòòòÿòòòÿñòñÿòññÿòññÿòóóÿòóòÿóóóÿóóóÿóòòÿóóóÿòóòÿóòòÿòóóÿòòòÿóòòÿóóóÿóóóÿóóóÿóòóÿòòòÿòóóÿóóóÿóòòÿóòóÿòóóÿóóóÿóòòÿóòòÿòòóÿòòóÿóóóÿòòòÿóòóÿóòóÿòóòÿòòóÿóòóÿóòóÿóóóÿòóòÿòóòÿóòóÿòóòÿòóòÿòòòÿòòòÿòòóÿóòòÿóòóÿóòóÿùùøÿ©©©·E$ 9`ôôôÿðñðüòóòÿóóòÿòóòÿòóòÿòòóÿòóòÿòòòÿóòòÿòóòÿòòóÿóòóÿóòóÿòòòÿòòóÿóóòÿòòóÿóòòÿòóóÿòóòÿóòòÿóòóÿòòòÿóóòÿòòóÿóóóÿòóòÿòóòÿòóòÿòòòÿòóóÿóòóÿóóóÿóóòÿóòóÿóóòÿóòóÿòòòÿòññÿñññÿïïïÿìííÿéééÿãããÿÛÛÝÿÏÏÒÿÁÀÇÿ­­¸ÿ™˜«ÿ€€šÿuušÿ33Yÿÿ(ÿ&ÿ"ÿ$ÿ$ÿ"ÿ"ÿ"ÿ#ÿ!ÿ ÿ%ÿ+ÿ.ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ-ÿ.ÿ,ÿ)ÿ7ÿSÿ%%nÿ eÿ]ÿ!!gÿ!!eÿ_ÿ%%nÿ\ÿ$$lÿ$$kÿ dÿcÿ$$kÿ%%mÿ]ÿ&&mÿ^ÿfÿfÿ11vÿQQ…ÿzz£ÿ‹‹«ÿ••±ÿ  ¹ÿ­­Ãÿº¹ÊÿÄÄÒÿÎÎØÿÖ×ÞÿÞßãÿääèÿééëÿìíîÿîïïÿððñÿñññÿòñòÿññðÿðððÿñññÿðððÿðððÿðïðÿððïÿïïðÿðððÿðððÿððñÿñññÿñññÿñññÿòñòÿñòñÿòòñÿóóóÿóòòÿòòòÿóòòÿòóòÿòóòÿòòóÿòòòÿòóóÿòòòÿóóòÿòòòÿòóòÿòòòÿóóòÿòòòÿóóòÿóòòÿóóòÿòòòÿòòòÿòòòÿòòòÿòóòÿòòòÿòòòÿòòòÿóóòÿóòòÿòóòÿòòòÿòòòÿòòòÿòóóÿóòóÿóòòÿòóóÿòòòÿòòóÿòóóÿòòòÿòòòÿùøøÿ©©©·E$ 9`ôôôÿðññüòòòÿóóòÿòòòÿòòòÿòòóÿòòòÿóóòÿòóòÿóòòÿòòòÿòòòÿóòòÿòòòÿòòòÿòóòÿóòòÿòóòÿóòòÿòòòÿòóóÿòóòÿòòòÿòòòÿòòòÿòòòÿóòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿóóòÿòòòÿòòòÿòòòÿñññÿñññÿðððÿîîîÿêëêÿååæÿÝÝßÿÒÒÕÿÂÃÉÿ°°¼ÿš›¬ÿ›ÿvvœÿ..Tÿÿ%ÿ#ÿ&ÿ%ÿ"ÿ$ÿ$ÿ"ÿ#ÿ"ÿ#ÿ)ÿ.ÿ.ÿ-ÿ.ÿ-ÿ.ÿ-ÿ.ÿ.ÿ,ÿ)ÿ7ÿSÿaÿ`ÿaÿ##kÿ]ÿaÿ%%mÿ\ÿ$$kÿcÿ eÿ$$kÿ%%mÿ\ÿ%%mÿ%%kÿbÿ^ÿ&&nÿAAzÿkk›ÿ„„§ÿ¯ÿ™™µÿ§§¾ÿ³³Æÿ¿¾ÎÿÉÉÕÿÒÒÛÿÚÚáÿààåÿææéÿééìÿííïÿïððÿññðÿñññÿñññÿñññÿñððÿðððÿðïïÿîîîÿîîîÿíììÿíííÿíííÿíííÿíîíÿíííÿîííÿîîîÿïïðÿðððÿññðÿòññÿñññÿòññÿòóòÿóòòÿòòòÿòòóÿòòòÿòòòÿóòòÿòóòÿóòòÿòóòÿóòòÿòòòÿóòòÿòòóÿòòòÿòòòÿòòòÿòóòÿòóòÿòòóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòóÿòòòÿòòóÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòóÿòòòÿùøøÿ©©©·E$ 9`ôôôÿñððüòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿóòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿóóòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿðððÿîîïÿìììÿèèèÿààáÿÖÖØÿÇÇÍÿ´´¿ÿŸŸ°ÿ„„žÿwwœÿ//Vÿÿ(ÿ&ÿ"ÿ%ÿ&ÿ%ÿ#ÿ$ÿ$ÿ"ÿ'ÿ.ÿ/ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ/ÿ-ÿ*ÿ8ÿSÿbÿ_ÿ]ÿ]ÿ_ÿ##kÿbÿ^ÿ!!hÿ!!fÿ_ÿ&&oÿ\ÿ%%mÿ%%mÿcÿ`ÿ iÿ99}ÿWWˆÿ{{¤ÿŒŒ¬ÿ••²ÿ  ºÿ®®Âÿ¹¹ÊÿÄÄÑÿÎÎØÿÖÖÞÿÝÝãÿããçÿççêÿëëíÿîîïÿðððÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿîîîÿííîÿíììÿëëëÿêêëÿéééÿéééÿééêÿéééÿéêéÿêêêÿëëëÿìììÿîîîÿîïïÿðððÿñññÿñññÿñññÿñññÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿóòòÿòòòÿòòòÿòòòÿøøøÿ©©©·E$ 9`óôôÿðððüñòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòñòÿòòòÿòòñÿòòòÿòòñÿòòòÿòòòÿñòòÿòòòÿòòòÿòòòÿòòòÿñòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿñññÿïïïÿíííÿêêêÿããäÿÚÚÜÿËÌÑÿººÃÿ¤¤´ÿ‰‰¢ÿzzžÿ33Xÿÿ)ÿ&ÿ&ÿ%ÿ#ÿ%ÿ&ÿ%ÿ#ÿ$ÿ,ÿ/ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ/ÿ-ÿ*ÿ7ÿSÿbÿ_ÿ]ÿ]ÿ^ÿ^ÿ^ÿcÿ$$lÿ]ÿaÿ%%mÿ\ÿ%%lÿbÿcÿfÿ..vÿGG~ÿss ÿ‡†¨ÿ’’°ÿ››¶ÿ¨¨¿ÿ´´Çÿ¿¿ÎÿÉÉÔÿÒÒÛÿÚÚàÿààäÿææéÿêêìÿííîÿïïðÿðððÿñññÿñññÿòòòÿòòòÿòòñÿñññÿðððÿðððÿîîîÿíìíÿìììÿêéêÿèééÿçæçÿææåÿäääÿäääÿäääÿäååÿæææÿèèèÿéééÿêêêÿëëëÿíííÿïïïÿðððÿññðÿñññÿñññÿòñòÿòñòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòñòÿòòòÿòòñÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòñòÿòòòÿòòòÿòòòÿòòòÿñññÿøøøÿ©¨©·E$ 9`óóóÿïððüòòòÿòòòÿòòñÿòòòÿñòòÿòñòÿñòòÿòòòÿñòòÿòòòÿòòñÿñòòÿòòòÿòòñÿòòñÿñòòÿòòòÿòòòÿñòòÿòòòÿòòòÿòòòÿòòñÿòòòÿòòñÿòòòÿòòòÿòòñÿòòòÿòòòÿòòñÿòòòÿòòòÿòòòÿñòòÿñññÿðððÿîîîÿìììÿææçÿÞÞàÿÑÑÕÿ¿¿Èÿªª¹ÿ§ÿ}}žÿAAkÿ#ÿ*ÿ%ÿ&ÿ&ÿ&ÿ%ÿ#ÿ$ÿ&ÿ'ÿ-ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ*ÿ4ÿTÿbÿ_ÿ]ÿ^ÿ^ÿ^ÿ^ÿ^ÿ^ÿ_ÿ""jÿcÿ^ÿ##iÿ eÿZÿ&&pÿ99tÿhh™ÿ€€¤ÿŽ®ÿ——²ÿ££»ÿ°°Äÿ»»ËÿÅÅÒÿÎÎØÿÖÖÞÿÝÝãÿããçÿççêÿëëíÿîîïÿïïðÿððñÿñññÿòñòÿòòòÿñòòÿòòñÿñòòÿòñòÿñññÿðððÿîïîÿíííÿëêëÿéééÿçççÿåååÿâââÿßßßÿÞßÞÿÞÞÞÿÞÞÞÿßßÞÿßààÿâââÿääãÿåææÿéèèÿêêêÿìììÿíîíÿïïïÿððïÿñññÿññðÿñññÿòòòÿòòñÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòñòÿñòòÿòññÿòòòÿòòñÿññòÿòòñÿòòñÿòòòÿòñòÿòñòÿòòòÿòòòÿòòòÿñòòÿòòòÿòòòÿòòñÿòòòÿòñòÿòòñÿñòòÿññòÿøøøÿ©¨©·E$ 9`ôôóÿïððüòòòÿòòòÿòññÿòòòÿòòòÿññòÿòòñÿòòòÿòñòÿòññÿñòòÿòòòÿòñòÿòññÿòñòÿòññÿñòñÿòòòÿòòñÿòòòÿòññÿòòñÿòñòÿñòòÿòññÿòòòÿññòÿññòÿññòÿòòòÿòòòÿññòÿòññÿòòòÿòññÿððñÿïïïÿíìíÿééêÿâããÿ××ÚÿÆÆÎÿ²²¾ÿ™™®ÿŸÿYY‚ÿÿ*ÿ,ÿ+ÿ'ÿ'ÿ'ÿ'ÿ&ÿ#ÿ)ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ0ÿ-ÿ/ÿKÿSÿ^ÿ^ÿ^ÿ_ÿ^ÿ_ÿ_ÿ_ÿ^ÿ_ÿ_ÿdÿ$$mÿ[ÿ`ÿ//tÿNN„ÿvv¡ÿ‰‰«ÿ’’°ÿ·ÿ«ªÀÿ¶¶ÈÿÁÁÏÿÊËÕÿÓÓÛÿÛÛáÿààåÿææéÿéêìÿííîÿîïðÿðððÿððñÿòññÿòññÿòòòÿñòñÿññòÿñññÿòòòÿòòòÿñññÿññðÿðððÿííîÿìììÿèééÿçèèÿäääÿàààÿÜÜÜÿÙÙÙÿרØÿ×××ÿ×××ÿ×××ÿÙÙÙÿÚÛÛÿÞÞÝÿàààÿäääÿçççÿêééÿëìëÿíííÿïïïÿðïðÿññðÿððñÿññòÿñòñÿñòòÿòñòÿòñòÿòòòÿñòòÿñòñÿñòñÿòòòÿòññÿñòñÿòòòÿñññÿòòòÿñòñÿñòñÿñòòÿòòòÿñòòÿññòÿòòòÿñòòÿòòñÿñòòÿññòÿòòòÿòòñÿòòòÿòññÿñòòÿòòòÿòòñÿñòòÿñññÿòññÿø÷øÿ¨©©·E$ 9`óóóÿððïüñòòÿñòñÿñòñÿñññÿññòÿòññÿñòòÿòòñÿñññÿòòñÿòññÿñòñÿñòòÿñòñÿòòñÿñòòÿñòòÿñññÿñòòÿñññÿòññÿñññÿñòñÿòòòÿòòñÿñññÿñòñÿñòñÿòòñÿòòñÿòññÿñòòÿòòòÿñòñÿñòñÿïððÿïïïÿìììÿçæçÿÜÜßÿÎÏÔÿ»»Æÿ££µÿ††¡ÿoo—ÿ .ÿ-ÿ'ÿ&ÿ+ÿ+ÿ(ÿ'ÿ'ÿ'ÿ*ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ/ÿ+ÿ @ÿPÿ_ÿWÿQÿaÿ^ÿ_ÿ_ÿ^ÿ_ÿ_ÿ^ÿ_ÿ_ÿ\ÿ jÿ55tÿcb“ÿ€€¥ÿŽŽ­ÿ—˜³ÿ¥¥¼ÿ²²Åÿ½¼ÌÿÇÇÓÿÏÐÙÿ××ßÿÞÞäÿãäçÿèèêÿëëîÿíîîÿïïðÿððñÿññðÿñññÿòñòÿñòòÿñòòÿññòÿñññÿñòòÿñòñÿñòñÿñòòÿñññÿññðÿïïïÿìííÿêêêÿæççÿãääÿÞÞÞÿÛÚÛÿÖÖÖÿÓÓÓÿÐÐÐÿÎÏÎÿÏÏÏÿÏÏÏÿÏÐÐÿÓÓÓÿ×ÖÖÿÚÙÙÿÞÝÝÿâââÿåååÿèéèÿëêêÿíìíÿîîïÿðððÿðððÿðððÿñññÿòòòÿòòñÿñññÿòòñÿòñòÿòòñÿòòòÿñññÿñòòÿòññÿñññÿñòòÿòññÿñññÿòòòÿñòñÿññòÿñòñÿñòñÿòñòÿòñòÿòññÿòòòÿòññÿñòòÿññòÿñòòÿñòñÿòññÿññòÿñòñÿòòñÿññòÿñññÿø÷øÿ¨©©·E$ 9`óóóÿïðïüòññÿñññÿñòòÿñññÿñòñÿñññÿñññÿñññÿòññÿòññÿñññÿòñòÿòñòÿñññÿñññÿòññÿñññÿòñòÿñòñÿñòñÿòòñÿñññÿñòñÿññòÿñññÿñññÿññòÿñññÿñññÿñññÿòòñÿñññÿòññÿñññÿðððÿðððÿííîÿêêëÿââäÿÖÖÚÿÄÄÍÿ­­¼ÿ‘‘©ÿ~~¢ÿ%%Nÿ'ÿ+ÿ.ÿ*ÿ(ÿ+ÿ+ÿ)ÿ'ÿ-ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ1ÿ.ÿ3ÿLÿ^ÿZÿQÿ`ÿQÿ\ÿ`ÿ_ÿ_ÿ_ÿ_ÿ`ÿ`ÿ[ÿ`ÿAA}ÿmmšÿ††¨ÿ®ÿ·ÿªªÀÿ¸·ÈÿÂÂÏÿËËÖÿÓÔÜÿÜÜáÿâáæÿçæéÿêêìÿîîîÿîîïÿðððÿðñðÿñññÿñññÿñññÿñòñÿñññÿñññÿñññÿñññÿñññÿòòñÿñòòÿñññÿñññÿñññÿðððÿíîîÿëëëÿææçÿââäÿÝÝßÿרØÿÑÑÓÿÌÌÏÿÉÈÊÿÅÅÆÿÄÄÅÿÄÄÄÿÄÄÄÿÆÆÆÿÉÉÉÿÍÍÍÿÑÑÑÿÖÖÖÿÛÛÛÿáááÿäääÿèèèÿêêêÿììíÿîîîÿðððÿððñÿñððÿñññÿñññÿñññÿñòñÿñññÿñññÿñòñÿñññÿòññÿññòÿòññÿñññÿñòòÿññòÿòññÿòòòÿñññÿñññÿñññÿòññÿñòòÿñññÿñññÿñññÿñññÿòññÿññòÿñññÿòòòÿñòñÿñññÿñññÿñññÿñññÿø÷øÿ¨¨¨·E$ 9`óóóÿïïïüñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿòòñÿñññÿñññÿññòÿñññÿñññÿñññÿñññÿñññÿñòñÿñññÿñññÿñññÿñññÿñññÿññòÿñññÿññòÿñññÿñññÿðððÿïïïÿìììÿææçÿÝÝàÿÍÍÔÿ¸¸ÄÿŸŸ³ÿ„„£ÿQQ{ÿ#ÿ-ÿ,ÿ+ÿ,ÿ*ÿ)ÿ+ÿ+ÿ-ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ.ÿ>ÿUÿVÿQÿaÿQÿ\ÿYÿSÿaÿ`ÿ_ÿ`ÿ`ÿ[ÿaÿHG€ÿrrœÿ‰‰©ÿ““°ÿ¡¡¹ÿ¯¯Âÿ¼¼ÌÿÆÆÒÿÐÐÙÿØØßÿßßäÿääçÿèèêÿììíÿîîïÿïïðÿðððÿðððÿñðñÿñññÿñññÿñññÿñññÿñññÿññòÿñññÿñññÿññòÿñññÿñññÿññòÿñññÿñòòÿñññÿðïïÿííîÿèçéÿââäÿÛÛÞÿÓÓ×ÿËËÑÿÄÄÊÿ¿¿Åÿºº¿ÿ··»ÿ¶¶¹ÿ¶¶¹ÿ¸¸¹ÿº»»ÿ¾¾¾ÿÃÃÃÿÇÇÇÿÎÎÎÿÕÔÔÿÙÙÙÿÞßßÿããäÿçççÿêêêÿíííÿîîîÿïðïÿðððÿðððÿñññÿñññÿñòñÿñññÿñññÿñññÿñññÿñññÿñòñÿñòñÿñññÿòññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñòñÿñññÿñññÿññòÿñññÿñññÿ÷÷÷ÿ¨¨¨·E$ 9`óóóÿïïïüñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿïîîÿëëëÿããåÿ××ÛÿÅÅÍÿ¬¬¼ÿ§ÿxxžÿ 4ÿ+ÿ-ÿ,ÿ+ÿ,ÿ,ÿ*ÿ(ÿ-ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ/ÿ/ÿHÿRÿUÿSÿSÿZÿZÿRÿaÿOÿ\ÿ`ÿ`ÿ[ÿaÿGG€ÿvvŸÿ‰‰ªÿ””±ÿ£¤»ÿ³³Åÿ¾¾ÍÿÊÊÕÿÓÓÛÿÛÛáÿááåÿææéÿêêëÿííîÿîïïÿðððÿðððÿñðñÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿïïðÿëëìÿäåçÿÜÜàÿÒÒØÿÇÇÏÿ¼¼Æÿ²²¾ÿ­­¸ÿ©©´ÿ¦¦¯ÿ¦¦­ÿ§§¬ÿªª­ÿ®®¯ÿ²²³ÿ·¸¸ÿ½½¾ÿÅÅÅÿËËËÿÓÓÓÿÙÙÙÿÞÞÞÿäääÿçççÿêêêÿìììÿîîîÿðððÿðððÿðñðÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿ÷÷÷ÿ¨¨¨·E$ 9`óóóÿïïïüñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿíííÿéééÿßßâÿÐÐÖÿººÆÿŸŸ´ÿˆˆ§ÿ>>jÿ'ÿ0ÿ,ÿ,ÿ-ÿ-ÿ,ÿ,ÿ,ÿ0ÿ0ÿ0ÿ1ÿ0ÿ1ÿ.ÿ6ÿPÿLÿOÿRÿUÿUÿSÿaÿQÿ[ÿ_ÿKÿ^ÿ_ÿEEÿvvžÿ‰‰©ÿ••°ÿ¦¦¼ÿ³³ÅÿÀÀÎÿÌÌÖÿÕÕÝÿÝÝâÿããæÿèèêÿëëíÿîîîÿïïðÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿððñÿïïïÿééëÿááåÿÕÕÜÿÈÈÒÿ··Åÿ³³Äÿ§§ºÿ˜˜«ÿ““¦ÿ““£ÿ““¢ÿ——¡ÿšš¡ÿŸŸ¤ÿ¤¤¨ÿªª¬ÿ²²²ÿºº»ÿÂÂÂÿÊÊÊÿÒÒÒÿÙÙÙÿÞÞÞÿäääÿèèèÿêêêÿíííÿïïîÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿ÷÷÷ÿ¨¨¨·E$ 9`óóóÿïïïüñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿïïïÿíííÿææçÿÚÚÞÿÈÈÐÿ¯¯¿ÿ‘‘ªÿvvÿ4ÿ0ÿ/ÿ0ÿ/ÿ-ÿ-ÿ-ÿ.ÿ1ÿ1ÿ1ÿ1ÿ1ÿ2ÿ0ÿ AÿOÿOÿQÿLÿOÿWÿSÿTÿ[ÿ`ÿKÿcÿSÿ55nÿppœÿ‡‡¨ÿ““°ÿ¤¤»ÿ´´ÅÿÁÁÏÿÍÍ×ÿÖÖÝÿÝÝâÿääçÿééêÿììíÿïïïÿðððÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿîîïÿççêÿÞÞâÿÎÎ×ÿ¼¼Êÿ²²Åÿaa|ÿ^^wÿƒƒ¡ÿ††¥ÿ~~šÿ~~•ÿ„„—ÿ‰‰—ÿ˜ÿ••›ÿœœ ÿ¥¥§ÿ¯¯°ÿ¸¸¸ÿÂÂÂÿËËÊÿÒÒÒÿÙÙÙÿßßßÿåååÿéééÿëëëÿîîîÿïïïÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿ÷÷÷ÿ§§§·F% 222………vvv¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿýýÿÿÿÿ}}¿ƒƒy‚‚‚===9`óóóÿïïïüñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿëëìÿããåÿÕÕÛÿ¿¿Ëÿ¤¤¸ÿŠŠ©ÿFFpÿ'ÿ1ÿ0ÿ0ÿ0ÿ0ÿ/ÿ-ÿ0ÿ1ÿ1ÿ1ÿ1ÿ1ÿ/ÿ;ÿ GÿSÿMÿMÿSÿIÿQÿSÿXÿLÿdÿTÿ##^ÿgg—ÿ……¦ÿ­ÿ¢¢¹ÿ²²ÄÿÀÀÎÿÍÍÖÿÖÖÝÿÞÞâÿääçÿééëÿììíÿïïïÿðððÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿïïïÿççéÿÚÚàÿÆÆÒÿ»»Ëÿ``€ÿÿÿÿ''CÿYY~ÿss™ÿqqŽÿuuŒÿ}}ÿ……’ÿ–ÿ——œÿ¢¢¥ÿ­­®ÿ¸¸¸ÿÁÁÂÿËËËÿÔÔÔÿÚÚÚÿáááÿæææÿéééÿìììÿîîîÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿ÷÷÷ÿ§§§·F % [[[±±±°°°©©¨¤¤¨{{{|||§§¦   ²²«­­¯ÊÊÊÿÿÿüüüÿÿÿ€€€???9`óóóÿïïïüñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿïïïÿêêëÿààãÿÎÎÕÿ··Åÿ™™°ÿ€€£ÿMÿ6ÿ0ÿ0ÿ1ÿ1ÿ1ÿ1ÿ2ÿ2ÿ2ÿ2ÿ2ÿ2ÿ3ÿLÿLÿ>ÿ EÿTÿOÿJÿZÿ Bÿ\ÿNÿYÿQÿSS‹ÿ}}¢ÿŒŒªÿœœµÿ¯¯Âÿ½½ËÿËËÕÿÖÖÝÿÞÞâÿääçÿééëÿììíÿïïïÿðððÿðððÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿîîïÿççéÿ××ßÿÁÁÏÿ¶¶ÇÿGG~ÿ]ÿ&ÿÿÿÿ1ÿQQxÿll‘ÿjj…ÿuuˆÿ~~Œÿ‰‰’ÿ””šÿ¡¡¤ÿ®®¯ÿ¹¹¹ÿÃÃÃÿÍÍÍÿÕÕÕÿÝÝÝÿâââÿçççÿëëëÿíííÿïïïÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿñññÿñññÿñññÿ÷÷÷ÿ¨¨¨·F & XXXššš‘‘‘““““®ÏÏÑÐÐÑÔÔÔ¯¯¯’’’œœ˜££¤{{{xxx   ÐÐÐÿÿÿÿÿÿ|||9`óóóÿïïïüñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿîîîÿççéÿÜÜßÿÈÈÑÿ®®Àÿ«ÿeeÿ5ÿ:ÿ<ÿ7ÿ0ÿ0ÿ1ÿ0ÿ2ÿ2ÿ2ÿ2ÿ1ÿ4ÿ AÿMÿTÿJÿ?ÿ EÿWÿLÿMÿWÿ AÿXÿ**eÿppšÿ††¦ÿ••°ÿ©©¾ÿ¹¹ÉÿÈÈÒÿÔÔÛÿÜÜáÿääæÿèèêÿììíÿïïïÿðððÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿîîïÿççéÿØØßÿÁÁÏÿ««¾ÿjj ÿ--„ÿ''uÿ"ÿÿÿÿÿ##?ÿ__ˆÿgg…ÿmmƒÿzzŠÿ††ÿ””šÿ¢¢¥ÿ¯¯±ÿ¼¼»ÿÆÆÆÿÐÐÐÿØØØÿßßßÿåååÿèèèÿìììÿîîîÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðññÿðððÿñññÿñññÿñññÿñññÿðððÿðððÿöööÿ¨¨¨¸F'$$$bb`¦¦¦ººº——˜ŽŽŒŒŒŒŒŒŒŒŒŒ‹‹‹———ºº¼¤––”   ¥¥¥–––‘‘‘xx{   ÏÏÏÿÿÿ{{{9`óóóÿïïïüñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿîîîÿææèÿ××ÜÿÁÁÍÿ¥¥¹ÿŠŠªÿ::kÿ3ÿ;ÿ9ÿ9ÿ<ÿ7ÿ0ÿ2ÿ2ÿ2ÿ2ÿ1ÿ4ÿ @ÿ@ÿ AÿKÿTÿJÿ=ÿ Dÿ^ÿ @ÿZÿ HÿLL~ÿ€€¤ÿŒŒªÿ¡¡·ÿ³³ÃÿÂÂÎÿÐÐØÿÚÚßÿââåÿççéÿììíÿîîîÿïïðÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿïïïÿççêÿØØßÿÂÂÐÿ¥¥¼ÿ††¨ÿ++{ÿ--|ÿ%%tÿÿÿÿÿÿÿKKrÿee‡ÿjjÿxx‰ÿ††‘ÿ––œÿ¥¥§ÿ³³´ÿ¿¿¿ÿÊÊÊÿÔÔÔÿÛÛÛÿâââÿçççÿêêêÿîîîÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿðððÿïïïÿöõöÿ¨¨¨¸H(///qq{¦¦£¢¢£ˆˆˆŸŸŸŸŸŸ   ‰‰‰£££¢¢£‰‰‰›››†††““‡‡ž™™—~~†††ÞÞÞÿÿÿ||| 9`òòóÿïïïüñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿíííÿããåÿÓÓÚÿ¼¼Éÿ›œ³ÿƒƒ§ÿKÿ8ÿ;ÿ8ÿ;ÿ:ÿ9ÿ>ÿ6ÿ2ÿ3ÿ2ÿ3ÿ@ÿAÿ@ÿ@ÿ AÿKÿWÿ Gÿ>ÿLÿYÿJÿll›ÿƒƒ¤ÿ””¯ÿ©©¾ÿ»»ÉÿÊÊÔÿÖÖÜÿàßãÿææèÿêêëÿííîÿïïðÿðððÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñðñÿñññÿñññÿñññÿñññÿðññÿñññÿñññÿñññÿñññÿñññÿñññÿñðñÿñññÿñññÿñññÿðññÿñññÿñññÿñññÿññðÿðððÿêêìÿÛÛâÿÅÅÒÿ¨¨¾ÿ‹‹ªÿFFŠÿ%%sÿ..ÿ!!mÿÿÿÿÿÿÿ;;^ÿdd‡ÿii€ÿyy‰ÿŠŠ“ÿššŸÿªª¬ÿ··¸ÿÄÄÄÿÏÏÏÿØ×ØÿÞßßÿåååÿéééÿìííÿïïïÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿñññÿñññÿñññÿñññÿðñðÿðððÿðððÿðððÿðððÿðððÿïïïÿïïïÿïïïÿîîïÿõõõÿ¨§¨¹I*??>{{ƒ ©©²¬¬«¥¥¥ §§§ ›››››››››¦¦¦¤¤¤¬¬¬¢¢¢•••­­­”””¤¤¤šš›ŽŽ‹‡‡š““‰‰‰ooo‹‹‹ÕÕÕÿÿÿ8889`óòóÿïïïüñññÿðññÿñññÿñññÿñññÿððñÿñññÿñññÿðññÿñññÿðññÿñññÿññðÿñññÿññðÿññðÿñññÿñññÿñññÿðññÿñññÿñññÿñðñÿñññÿñññÿñðñÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿðïïÿëëìÿàáãÿÎÎÖÿµµÅÿ––°ÿoo–ÿ?ÿ Hÿ@ÿ?ÿ<ÿ9ÿ;ÿ=ÿ4ÿ3ÿ3ÿ4ÿ5ÿ2ÿ@ÿAÿAÿAÿ BÿMÿZÿ Aÿ7ÿ44oÿwwŸÿ††¤ÿ›œ´ÿ°°ÁÿÂÂÍÿÐÐØÿÚÛßÿãâæÿèèéÿììíÿïîïÿïððÿðððÿðïðÿðññÿñðñÿðññÿñññÿñððÿðññÿñññÿñññÿñññÿððñÿñññÿñññÿñññÿñññÿðððÿñññÿñññÿñðñÿññðÿñññÿñññÿñññÿññðÿñññÿñññÿñññÿñññÿñññÿñðñÿñññÿñññÿðññÿñññÿñðñÿððñÿêêìÿÞÞãÿÉÉÔÿ­¬ÁÿŽŽ¬ÿ[[”ÿ!!pÿdÿ##oÿLÿÿÿÿÿÿÿ88[ÿdd†ÿllƒÿ}}ŒÿŽŽ—ÿŸŸ£ÿ¯¯±ÿ¾¾¾ÿÊÊÊÿÓÓÓÿÛÛÚÿâãâÿçççÿëëëÿîííÿïðïÿñðñÿñññÿñññÿñññÿñññÿñðñÿñññÿðððÿðððÿðððÿðððÿððñÿðððÿðññÿñññÿðñðÿððñÿðððÿðïðÿðððÿïïðÿïðïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîïïÿíîíÿôôôÿ§§§ºK))),PPP‡‡‡ ¬¬¬     ¡¡¡ ™™š ’’—¡¡Ÿ   žžž©©©›››£££œœœŸŸŸ­­­¥¥¥””ª£££’’’†††žžžyyy§§§ÿÿÿ¸¸¸9`òòòÿîïïüðñðÿððñÿñððÿññðÿñððÿñññÿððñÿñññÿñññÿðñðÿñððÿñðñÿððñÿññðÿñðñÿððñÿðñðÿðññÿññðÿñññÿñññÿñññÿñññÿñðñÿñðñÿñññÿðñðÿñññÿððñÿññðÿñññÿðññÿðððÿïïïÿëêëÿÞÞâÿÊËÔÿ¯¯Àÿ‘’­ÿ]]Žÿ Hÿ Aÿ Fÿ Eÿ Aÿ Aÿ<ÿ:ÿ2ÿ3ÿ3ÿ6ÿ4ÿ3ÿ2ÿAÿAÿAÿAÿ@ÿVÿ Lÿ>=oÿ|| ÿ‰‰¥ÿ¡¢·ÿµµÅÿÇÇÐÿÔÔÚÿÞßâÿååçÿéêêÿííîÿïïïÿðððÿðïïÿðððÿñññÿñññÿñññÿñðñÿðññÿñññÿñññÿðððÿñððÿñðñÿñññÿñññÿñðñÿðñðÿñðñÿñññÿðñðÿñññÿñðñÿðñðÿñññÿññðÿññðÿñññÿñðñÿñññÿðñðÿññðÿñññÿñññÿñððÿððñÿñññÿñðñÿðññÿðïðÿííîÿááåÿÍÎØÿ´´Æÿ““±ÿkk–ÿfÿ))wÿ&&rÿ))zÿ5ÿÿÿÿÿÿÿCCjÿddƒÿqq†ÿƒƒÿ––ÿ§§ªÿ··¹ÿÄÄÄÿÏÏÏÿÙØØÿàààÿæææÿêéêÿíííÿïïïÿððïÿðððÿðððÿðððÿðïðÿðïïÿðððÿñððÿððñÿññðÿñññÿðððÿðññÿðïðÿïïðÿðððÿïððÿïïïÿïïïÿïïïÿïîïÿïïïÿïïîÿîîîÿîïïÿîîíÿîîîÿîîîÿîíîÿíííÿóôôÿ¨¨¨ºN1110YYY‘‘‘™™šŸŸž œœ  £££ ŸŸ ›››œœœ¤¤¤ŸŸŸžžž¤¤¤¦¦¥››£    ¤¤¤§§§£££ššš†††©©©ˆˆ‰ŠŠŠÔÔÔÈÈÈ9`òòòÿïïîüððñÿñññÿñðñÿñññÿðñðÿñññÿñðñÿðññÿððñÿðððÿñððÿðññÿðððÿðñðÿñððÿññðÿñððÿðððÿððñÿðñðÿñððÿðððÿññðÿððñÿðñðÿñððÿñðñÿññðÿñððÿñññÿðððÿñðñÿðððÿðïïÿêéêÿÛÛàÿÆÆÑÿ©©½ÿ‘‘¯ÿ99gÿ?ÿOÿKÿKÿLÿ JÿJÿ?ÿ2ÿ4ÿ6ÿ4ÿ3ÿ6ÿ3ÿ4ÿBÿBÿBÿ Cÿ@ÿSS‡ÿ||žÿŒŒ¨ÿ¤¥¸ÿ¹¸ÆÿÊÊÓÿ××ÜÿàáãÿççéÿëëìÿîîîÿïïïÿïððÿðððÿïððÿñññÿñññÿñññÿðñðÿñðñÿðññÿñððÿñðñÿñññÿðñðÿñññÿðððÿñðñÿðñðÿñððÿñññÿðððÿñññÿðñðÿðððÿðððÿñððÿðññÿñððÿðñðÿñññÿñððÿñðñÿñðñÿððñÿððñÿññðÿðñðÿððñÿññðÿðññÿñðñÿîíîÿååèÿÒÒÚÿ¹¹Éÿ™š´ÿxx ÿ//~ÿeÿeÿeÿ`ÿÿÿÿÿÿ ÿÿUU|ÿff‚ÿxxŠÿŒŒ–ÿžž¤ÿ°°³ÿ¿¿ÀÿËËËÿÔÕÔÿÜÜÜÿãããÿèèèÿêëëÿîîîÿïïïÿðððÿðððÿðññÿðððÿñññÿðññÿñððÿðððÿïðïÿïïðÿðððÿïïïÿïïðÿïïïÿïïïÿïîïÿïïïÿîîïÿïïîÿíîîÿîîîÿîîíÿîíîÿîîîÿîíîÿíííÿíííÿìííÿìììÿòñòÿ§¨§»Q::94ddd’’’¡¡¡ žž  ¨¨§ žžžž¤¤¤¢¢¢£££ŸŸ   ª žžŸ     ¤¤£²²²ƒƒƒžžŸzzzÏÏÏÌÌÌ9`òòòÿîîîüðððÿðñðÿðððÿññðÿðððÿðñðÿñððÿðððÿðððÿðððÿðððÿððñÿðððÿñðñÿððñÿðñðÿñðñÿðððÿðððÿðñðÿñððÿðððÿñññÿðððÿññðÿðððÿñððÿðððÿðððÿðððÿððñÿððñÿðïðÿîîîÿèèéÿÙÙÞÿÂÂÏÿ¦¦¼ÿŒŒ«ÿ66sÿ Gÿ Dÿ Fÿ Fÿ Fÿ Fÿ Iÿ7ÿ4ÿ5ÿ2ÿ0ÿ2ÿ3ÿ8ÿ3ÿ2ÿBÿ Dÿ<ÿNN~ÿ{{œÿ¨ÿ¦¦¸ÿ»ºÆÿËÌÓÿÙÙÝÿââäÿèèéÿììíÿîîîÿïïïÿïïïÿðïðÿððñÿððñÿðððÿñðñÿñððÿðððÿðñðÿðððÿðññÿðñðÿñððÿðððÿðñðÿðððÿðñðÿðñðÿñðñÿððñÿñððÿðððÿñððÿðððÿðñðÿðððÿñððÿðððÿððñÿñðñÿðððÿðððÿðððÿñððÿððñÿðñðÿðððÿðñðÿðñðÿñððÿñððÿïïîÿææéÿÖÕÝÿ¾½Ìÿžž·ÿƒƒ§ÿ''eÿYÿbÿdÿiÿ @ÿÿÿÿÿÿÿ5ÿdd‰ÿmm„ÿ‚‚ÿ•–žÿ©¨¬ÿºº»ÿÇÇÇÿÑÒÒÿÚÚÚÿáâáÿççèÿëëìÿîîîÿïïïÿðððÿðððÿððïÿïïðÿïïïÿðïðÿïïïÿïïïÿïïðÿïïîÿïïïÿïïïÿîïïÿîîïÿîîîÿîîîÿîíîÿíííÿîîîÿíííÿîîîÿíííÿíííÿíííÿìììÿìììÿëëëÿëëëÿêêëÿðïïÿ§¦§¼VDDE8lll‹‹¤¤¤››¡£££¡¡¡¢¢¢¤¤ žž¥¤¤ª     ¢¢¢ ””š ©©§§§§ž““£¡¡ž²²²tttÿÿÿ|||9`òòòÿîîîüñððÿðððÿðñðÿñððÿðððÿðñðÿñððÿðððÿñððÿðððÿðððÿðñðÿðððÿðððÿðððÿðððÿðððÿðððÿññðÿðððÿðððÿññðÿðððÿðñðÿðððÿðððÿñððÿðððÿðððÿðððÿððñÿððñÿïððÿîîîÿççéÿ××ÝÿÀÀÍÿ¢¢¹ÿ„„¦ÿ''fÿ`ÿ_ÿ^ÿ^ÿ^ÿ]ÿ`ÿ7ÿ4ÿ5ÿ/ÿ/ÿ/ÿ0ÿ1ÿ<ÿ8ÿ.ÿ8ÿNN}ÿxx›ÿ‹‹¥ÿ¤¤¶ÿ¹¹ÄÿËËÑÿÙÙÜÿãâäÿèèéÿììíÿîîîÿïïïÿïïïÿðïðÿððñÿðñðÿðððÿðñðÿðððÿðððÿðððÿðððÿððñÿðððÿðððÿððñÿðððÿðððÿðððÿðððÿðððÿðððÿñððÿðñðÿñððÿðññÿððñÿðððÿðððÿðððÿðððÿðððÿðñðÿðððÿððñÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïîïÿèèêÿØØÞÿÁÁÎÿ¢¢¹ÿ…†¦ÿ;;~ÿ((zÿ((vÿ''uÿ''uÿ$$tÿ!ÿÿÿÿÿ ÿÿAAhÿhh…ÿyyŒÿŽŽ™ÿ¢¢§ÿ´´¶ÿÃÃÄÿÎÎÏÿØØØÿßßßÿæååÿéééÿíìíÿîîîÿïïïÿïïïÿðïïÿïïïÿïïîÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîííÿîîîÿíííÿîîíÿíîîÿíííÿîîíÿíííÿìììÿíìíÿìììÿìììÿêëëÿêêêÿêêêÿéééÿéèèÿèèéÿíìíÿ£££¼YJJJ;ggg„„ƒ ¥¥§¢¢¡¦¦¥žžž ¡¡¢ žž«   ž ››š¡¡Ÿ¢¢¢›››‘‘‘ÿÿÿ:::9`òòòÿîîîüðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿððïÿîîîÿçæéÿÖÖÜÿ¾¾ÌÿŸŸ·ÿ¦ÿHÿ JÿNÿNÿNÿNÿMÿQÿ6ÿ5ÿ0ÿ0ÿ0ÿ0ÿ0ÿ0ÿ/ÿ?ÿ9ÿCCpÿss˜ÿ†† ÿ  ²ÿ··ÁÿÉÉÏÿÖÖÚÿááãÿèçèÿìììÿîîîÿïïïÿïïïÿïïðÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿððñÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïïïÿééëÿÚÚßÿÃÃÏÿ¥¥»ÿˆˆ¨ÿCCƒÿ_ÿaÿaÿaÿgÿ >ÿÿÿÿÿÿÿ-ÿddŠÿoo‡ÿ††”ÿšš¢ÿ¯¯²ÿ¿ÀÀÿËËËÿÕÕÕÿÝÝÝÿäääÿèèèÿëëëÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿîîîÿíííÿîîîÿíííÿîîîÿíííÿíííÿíííÿìììÿìììÿëìëÿëëëÿêêêÿêêêÿééêÿèèèÿéééÿèèèÿèèèÿèççÿæææÿéééÿŸŸŸ¼^LLL;VVWbbb£££    ¤¤¨ œœœ ––– ––– šš›žžž‚‚‚¡¡¢~~yÒÒÒËËÊ9`ñòòÿîîîüðððÿðððÿïððÿðððÿðððÿðððÿðððÿðððÿðððÿððïÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðïðÿðððÿððïÿðððÿðððÿðððÿðððÿðððÿðððÿïððÿðððÿðððÿïïïÿïîîÿåæèÿÕÕÜÿ¼¼Êÿž¶ÿ~~£ÿZÿ Fÿ Fÿ Gÿ Gÿ Gÿ Gÿ Dÿ4ÿ6ÿ-ÿ-ÿ.ÿ1ÿ1ÿ1ÿ1ÿ)ÿ,,]ÿoo—ÿ}}šÿ™™¬ÿ°°¼ÿÄÅÊÿÓÓ×ÿßßàÿææçÿëëëÿíííÿïïïÿïïïÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïððÿððïÿðððÿðïðÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿððïÿðððÿððïÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïïðÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïîïÿééêÿÛÛàÿÄÄÐÿ§§¼ÿŠŠªÿEE~ÿZÿ]ÿ]ÿ]ÿ^ÿRÿÿ ÿÿÿÿ!ÿÿHHnÿkk‡ÿ~ÿ””ÿ©©­ÿ»»½ÿÉÉÉÿÓÓÓÿÛÛÛÿâááÿçççÿêêêÿìììÿîîîÿííîÿíííÿîîîÿíííÿíííÿîîîÿíííÿíííÿíííÿíííÿìííÿìììÿìììÿëëëÿëëëÿêëêÿêéêÿêééÿèééÿéèèÿèééÿèèèÿççèÿææçÿåååÿåååÿäääÿãããÿåååÿ›œœ¼$#$`@@@6113¤¤¤¦¦¥¦¦¦ ¢¢¢žžž ••– ¨¨¨ŸŸŸ‡‡…ŽŽ¨ssuÿÿÿ:::9`òñòÿíîíüðððÿðððÿðððÿðððÿïïïÿðïïÿðððÿðððÿðððÿðððÿððïÿðïðÿðððÿïððÿðððÿðððÿðððÿðïðÿðððÿðððÿðïðÿðððÿðïðÿðððÿðððÿïïðÿðððÿïðïÿðïðÿïðïÿððïÿðððÿïïðÿîîîÿååçÿÔÔÜÿ¼¼Êÿœœµÿz{¡ÿaÿaÿ_ÿ^ÿ^ÿ^ÿ_ÿUÿ2ÿ5ÿ-ÿ-ÿ-ÿ-ÿ.ÿ0ÿ2ÿ3ÿ^^Šÿss’ÿŽŽ¤ÿ§§´ÿ½½ÃÿÎÎÑÿÚÚÜÿââãÿéééÿììíÿïîïÿïïîÿðððÿðïðÿðïðÿðððÿðððÿðððÿðððÿðïðÿðððÿðððÿïððÿïððÿðððÿðïðÿðïðÿððïÿïððÿðððÿðððÿðððÿïððÿðððÿïððÿðððÿðððÿðððÿïððÿðððÿðïðÿððïÿðïðÿïððÿðððÿðððÿðððÿðïðÿðððÿïðïÿðððÿïïðÿððïÿðððÿðððÿïððÿïïïÿééêÿÙÙßÿÄÅÏÿ©©½ÿ‹‹ªÿON„ÿYÿ^ÿ]ÿ]ÿ\ÿ_ÿ'ÿÿÿÿ ÿ ÿÿ!!Cÿii‹ÿwwŒÿŽŽšÿ¤¤ªÿ··ºÿÇÇÇÿÐÐÐÿÙØÙÿàààÿæååÿéèéÿëëëÿîíîÿíííÿíìíÿíííÿíííÿìííÿíììÿìììÿíììÿëëëÿëëëÿëëëÿëêëÿêêêÿêééÿééèÿéèéÿçèçÿçççÿçççÿæççÿæææÿååäÿåääÿãääÿãããÿââãÿááâÿáááÿãâãÿ¾"""^***- ———¢¢££££ ¢¢¢œ   ž ¨¨§žžŸ‘‘‘‘‘’ªª«ÓÓÓ9`òññÿîííüðððÿïðïÿððïÿïïïÿïðïÿððïÿïððÿðïðÿïðïÿïððÿïïðÿðððÿïððÿïððÿðïðÿðððÿðïðÿððïÿïïðÿðððÿðððÿðïðÿïïïÿïðïÿðððÿðððÿðððÿïïïÿðððÿðïðÿðððÿïððÿïïïÿîîîÿäåèÿÕÔÜÿ¼¼Ëÿœœ¶ÿzz ÿ_ÿ^ÿ^ÿ^ÿ^ÿ^ÿ_ÿUÿ4ÿ1ÿ,ÿ/ÿ/ÿ.ÿ.ÿ/ÿ)ÿ++Xÿmm’ÿ€™ÿššªÿ³³»ÿÆÆÊÿÔÔÕÿÞÞßÿæææÿêêêÿíîîÿîïïÿïïïÿðððÿðïïÿïððÿïððÿðïðÿïðïÿïðïÿðïïÿïððÿðððÿïðïÿððïÿðïðÿðððÿïïïÿðððÿððïÿððïÿïïðÿïïðÿðïðÿðððÿðððÿïðïÿïððÿðïðÿïððÿïðïÿïïïÿðïðÿðïïÿðððÿðïïÿðððÿðïðÿððïÿïððÿïïðÿïððÿïïïÿïðïÿðïðÿðððÿïîîÿîííÿèèéÿÛÛßÿÅÅÐÿ©©½ÿ‹‹©ÿPP…ÿZÿ_ÿ^ÿ^ÿ]ÿbÿ4ÿÿ!ÿ!ÿ"ÿ"ÿ"ÿ%ÿaa‡ÿqq‰ÿˆˆ–ÿ  §ÿ´´·ÿÄÄÄÿÏÏÏÿר×ÿßÞßÿåååÿèèèÿëëìÿíííÿìììÿìììÿëëìÿëëìÿëëëÿëëëÿêëëÿêêêÿééêÿéêéÿèèéÿèèèÿèèèÿèçèÿèèçÿçæçÿææçÿååæÿåääÿãããÿãããÿâââÿâââÿàááÿàààÿßßßÿÞÞßÿÝÜÝÿááàÿ¡¡¡ÁY'   ¢¢¢¢¢¢¢ ¦¦¦ŸŸ¨ŸŸ« ””š ££¢£££„„…¦¦¦wwwÿÿÿ;;;9`ñññÿíîîüïðïÿïððÿïðïÿðïïÿðïïÿðïðÿïðïÿïðïÿððïÿïïïÿððïÿïïðÿðïðÿïïðÿïðïÿïïïÿïðïÿïïïÿïïðÿïïðÿððïÿïïïÿïïðÿïïïÿðððÿïïïÿïïïÿðïïÿïïðÿðïïÿðððÿïïðÿïððÿîîîÿåæéÿÕÕÜÿ¼¼Ëÿ¶ÿz{¢ÿaÿ]ÿ\ÿ]ÿ]ÿ\ÿ^ÿSÿ4ÿ.ÿ,ÿ,ÿ-ÿ/ÿ.ÿ0ÿ)ÿSSÿppÿŠŠžÿ¤¤¯ÿ¹¹ÀÿËÊÍÿØØØÿàààÿçççÿêêêÿîíïÿîïîÿïïðÿïïïÿïððÿïïïÿïïðÿïïïÿïïðÿðïïÿïïïÿððïÿïðïÿððïÿðïïÿïðïÿïïïÿïððÿðïïÿïïðÿïïïÿïïïÿïïïÿïððÿïïïÿðïðÿïïðÿðïïÿððïÿïððÿïðïÿðððÿïïïÿðïðÿððïÿïïðÿððïÿðïðÿðïðÿððïÿðïðÿððïÿïðïÿðïïÿïïïÿïïîÿíîíÿîîîÿééêÿÚÚßÿÄÄÏÿ©¨½ÿ‹‹©ÿOO…ÿZÿ_ÿ^ÿ^ÿ]ÿbÿ Fÿÿ#ÿ"ÿ!ÿ"ÿ$ÿÿPPwÿnnŠÿ„„•ÿ››£ÿ±²µÿÁÁÂÿÍÍÍÿÖÖÖÿÝÞÝÿâãâÿåååÿéêéÿêëêÿêêêÿêêêÿéééÿêêéÿéééÿèééÿéèèÿèèéÿèçèÿçççÿçççÿçççÿåææÿääåÿäääÿäääÿãããÿâããÿâââÿáââÿßßàÿßßßÿÞÞßÿÞÝÞÿÜÝÝÿÜÛÜÿÚÚÚÿÚÙÙÿÞÞÝÿ££¢ÃW$ ¡¡¢  ¢žžžŸŸ£ŸŸ ¡¡¢¢¢¢     ¦¦¦’’’’’’¬¬¬ÊÊÊ9`ñññÿíííüðïïÿïïïÿïïðÿïïïÿððïÿïðïÿïïïÿïïïÿðïðÿïïïÿïïïÿïïïÿïïïÿïðïÿððïÿïïïÿðïïÿïïïÿïïïÿïïðÿïïðÿðïðÿïïïÿïïðÿïïïÿïïïÿïðïÿïïïÿïðïÿïïïÿïïðÿïïïÿïïïÿïîîÿååèÿÕÕÝÿ¾½Ìÿžž·ÿ}}£ÿcÿgÿ!!mÿ!!nÿ!!nÿ!!mÿ""oÿeÿ4ÿ-ÿ,ÿ,ÿ,ÿ,ÿ,ÿ.ÿ<ÿeeŽÿuuÿ‘’¡ÿª«³ÿ¿¿ÃÿÏÏÐÿÚÚÚÿâááÿçççÿëëêÿîïîÿïïïÿïïïÿïðïÿïïïÿïïïÿïïïÿðïïÿïððÿïððÿïïïÿïðïÿðïïÿïïïÿïðïÿïðïÿïïïÿïïïÿïðïÿïïïÿïðïÿïïïÿïïïÿðïïÿïïïÿðïïÿïïðÿïïïÿïïïÿïïïÿïïïÿïïïÿðïðÿïððÿïðïÿïïðÿïïïÿðïðÿïððÿðïïÿïïïÿïïðÿïïïÿïïïÿîîîÿïïîÿïîîÿíííÿççèÿØØÝÿÃÃÎÿ¨§»ÿ‰‰§ÿUUˆÿ[ÿ_ÿ^ÿ^ÿ^ÿ`ÿSÿÿ$ÿ$ÿ%ÿ%ÿ(ÿÿ:9^ÿmmŒÿ’ÿ˜—¢ÿ­­±ÿ¿ÀÀÿÊËËÿÔÔÕÿÚÚÛÿââáÿäääÿççèÿèèèÿéééÿèèéÿèèèÿççèÿçèçÿçççÿçççÿæææÿæææÿåååÿäääÿãããÿãããÿââãÿâââÿááâÿàààÿßßàÿßÞßÿÝÞÝÿÝÝÝÿÜÝÜÿÛÛÛÿÚÚÛÿÙÙÙÿÙØÙÿ×××ÿÖÖÖÿÚÛÚÿ£££ÅV#   £¡¡¢ ¡¡£¡¡¢ŸŸž žž£ššŸ    žžž ¤¤¤£££‡‡‡›››ŒŒŒÿÿÿ9`ñðñÿíííüïðïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿðïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïðïÿïïïÿïïïÿïïïÿïïïÿïðïÿïïïÿïðïÿïðïÿïïïÿïïïÿïïðÿïïïÿïðïÿïïïÿîîîÿææèÿÖÖÝÿ¿ÀÍÿ¡¡¹ÿ£ÿ..{ÿ''vÿ##qÿ##qÿ##qÿ##qÿ##qÿ""oÿ6ÿ,ÿ,ÿ,ÿ,ÿ,ÿ.ÿ&ÿ**SÿiiŽÿ}}”ÿ––¤ÿ¯¯µÿÂÃÄÿÐÐÑÿÛÛÛÿâââÿçççÿëëìÿîîîÿïïïÿðïïÿïïïÿïïïÿðïïÿïïïÿïïïÿïïðÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿððïÿïðïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïðïÿïïïÿïðïÿïïïÿïïïÿïïïÿïïïÿïðïÿðïïÿïïïÿïïðÿïðïÿïîîÿîîîÿïïïÿîîîÿíííÿëëëÿåææÿÖÖÛÿÀÀËÿ¥¥¹ÿ‡‡¦ÿPP…ÿ[ÿ_ÿ^ÿ^ÿ^ÿ^ÿZÿ"ÿ#ÿ#ÿ#ÿ#ÿ"ÿÿ&&JÿmmŽÿ||ÿ””Ÿÿªª°ÿ½½¾ÿÉÈÈÿÒÒÒÿÙÙÙÿßßßÿãâãÿæææÿæççÿçççÿææçÿæææÿæææÿäååÿåäåÿäãäÿãããÿãããÿâââÿâââÿááâÿàààÿßßßÿßßßÿÞÞßÿÜÜÝÿÜÝÜÿÛÛÜÿÚÚÛÿÚÚÚÿÙÙÙÿ×××ÿÖÖÖÿÔÔÖÿÕÔÕÿÓÓÓÿÒÒÒÿÖÖÖÿ¥¥¦ÈT" ¡¡¡¡¡£¡¡¢¡¡£¤  ¡  ££¢ŸŸŸžžž     ©©©‹‹‹ŸŸŸ{{{ÍÍÍ9`ñññÿíííüïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïîÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿèèéÿÙØßÿÂÂÏÿ££»ÿ……§ÿ,,sÿ_ÿbÿbÿbÿbÿbÿdÿ4ÿ*ÿ,ÿ,ÿ,ÿ,ÿ-ÿ)ÿ==kÿjj‹ÿ€•ÿ™™¥ÿ±±¶ÿÄÄÅÿÑÑÑÿÛÛÛÿââáÿçççÿëëëÿîîîÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿîîîÿïïïÿîîîÿíííÿìììÿêêêÿââãÿÔÔÙÿ½½Éÿ¢¡¶ÿ„„£ÿMMƒÿ[ÿ_ÿ_ÿ_ÿ_ÿ^ÿ_ÿ*ÿ'ÿ'ÿ'ÿ'ÿ(ÿ&ÿ?ÿjjŽÿxxÿ’’žÿ¨¨®ÿ»»¼ÿÇÇÇÿÐÐÑÿ×××ÿÝÝÝÿáááÿãããÿäääÿäääÿäããÿããäÿãããÿâââÿâââÿáââÿáááÿßßàÿßßßÿÞÞßÿÞÞÞÿÝÝÝÿÜÜÜÿÛÛÛÿÚÚÚÿÚÚÚÿØØØÿØ×ØÿÖÖ×ÿÕÕÕÿÕÕÕÿÓÓÓÿÒÒÓÿÑÑÑÿÏÏÏÿÎÎÏÿÍÍÎÿÒÒÓÿ¨¨¨ÉO ¡¡£¡¡¢¢¢¢   §§¥¡¡¡¡¡ žž¢ššŸ¡¡  ¥¥¥ ™™™””””””¨¨¨ŸŸŸ9`ðððÿíííüïïïÿïîîÿïïîÿîïïÿïîïÿïîïÿïïïÿïîïÿïïïÿïïîÿïïïÿïïïÿïïïÿîïïÿïïïÿîïïÿïîïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïîïÿïïïÿïïîÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿéèêÿÚÚàÿÄÄÑÿ§§¾ÿ‹Š«ÿ33uÿ[ÿ]ÿ_ÿ^ÿ_ÿ^ÿbÿ1ÿ&ÿ(ÿ(ÿ(ÿ(ÿ*ÿÿNNxÿkk‰ÿ‚•ÿ››¦ÿ²²·ÿÄÄÅÿÑÒÑÿÚÚÚÿáááÿçççÿêêêÿíîíÿîîîÿïïïÿïïïÿïïïÿîïïÿîïïÿïïïÿïîïÿïîïÿïïïÿïïïÿïïïÿïïïÿïïîÿïïïÿïïïÿïïïÿïîîÿîïîÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïîÿïïïÿïïïÿïïïÿïïïÿïïïÿïïîÿïïïÿïîîÿîïïÿïïïÿïïïÿîîîÿîîîÿïïïÿîîîÿíííÿíííÿêêêÿèèèÿààáÿÐÐÕÿ¹¹Åÿœ²ÿ€€¡ÿCC~ÿ_ÿaÿ`ÿ`ÿ`ÿ`ÿaÿ,ÿ(ÿ(ÿ(ÿ(ÿ(ÿ'ÿ4ÿeeŠÿvuŒÿœÿ¦¥¬ÿ¹¹ºÿÆÆÆÿÎÎÎÿÕÕÕÿÚÚÚÿÞÞÞÿááàÿâââÿáááÿááâÿàààÿßßàÿßßßÿÞßßÿÞÞÞÿÝÝÞÿÜÝÝÿÜÜÜÿÛÛÛÿÚÚÚÿÙÙÙÿÙÙÙÿØØØÿ×××ÿÖÕÖÿÕÕÔÿÓÓÔÿÒÒÓÿÒÒÒÿÐÐÑÿÏÏÐÿÍÍÎÿÌÌÌÿËËÌÿÊÊËÿÉÉÉÿÐÏÐÿ««¬Ê H ¡¡£¢¢¢  ¡  ¢¥¥¥     ¤¥¥¤žžž™™™ ¯¯¯¨¨¨”””¯¯¯~~~9`ðððÿíííüîïïÿïïïÿïîïÿïïïÿïïïÿïïïÿïïïÿïîïÿîïîÿîïîÿïïïÿïîïÿïïïÿîïïÿïïîÿïïîÿîïïÿïïîÿîïïÿïïïÿîïïÿïïïÿîïïÿîïïÿïïîÿïîïÿïïïÿïïïÿïîïÿïïïÿîîîÿïïïÿïïïÿîîîÿêéëÿÝÝâÿÈÇÓÿ««Àÿ‘‘¯ÿ<>gÿee…ÿww‹ÿŒ˜ÿ¢¢§ÿ´´µÿÂÂÂÿÌÌÌÿÕÕÕÿÜÜÜÿãããÿçççÿêêêÿìììÿíííÿíííÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîíîÿìììÿíííÿìììÿëëëÿèèèÿæææÿäääÿÞÞÞÿÕÕ×ÿÈÈÌÿµµ¾ÿ­ÿ€€œÿmm“ÿNÿ@ÿBÿ>ÿAÿ Jÿ Iÿ Jÿ=ÿ)ÿ*ÿ*ÿ*ÿ*ÿ)ÿ'ÿ>ÿff‰ÿttŠÿ‰‰–ÿ¤ÿ­­¯ÿ··¸ÿ¾¾¿ÿÃÃÃÿÇÇÈÿÉÉÉÿËÊËÿÊÊËÿÊÊËÿÉÉÉÿÈÈÈÿÈÈÈÿÇÇÇÿÆÆÇÿÆÆÆÿÅÅÅÿÄÄÄÿÃÃÃÿÂÂÃÿÂÂÂÿÁÁÁÿÀÀÀÿ¿¿¿ÿ½½¾ÿ¼¼½ÿ¼¼¼ÿ»»ºÿºº»ÿ¸¸¹ÿ··¸ÿ¶¶·ÿµµ¶ÿ´µµÿ´´´ÿ³³´ÿ²²³úÍÍÍûˆˆˆx!¢¢¢žž£  ¤¡¡¢ŸŸŸ ¥¥¤¦¦¦ ¦¦¦ ššš¡¡£‘‘¦™9`ïïðÿìììüîîîÿîîîÿíîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîíÿíîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîíÿîîîÿííîÿîîîÿîîîÿîîîÿîîîÿîîîÿíîîÿíîîÿííîÿêêëÿààåÿÏÐÙÿ¸¸Éÿššµÿllÿ++„ÿ,,ÿ((zÿ,,€ÿ..…ÿ//…ÿ22Œÿ ?ÿ!ÿ%ÿ%ÿ%ÿ%ÿÿ22\ÿdd…ÿssˆÿˆˆ“ÿœœ¢ÿ¯¯°ÿ¼¼¼ÿÇÈÈÿÑÑÑÿÙÙÙÿßßßÿæææÿèèèÿêëêÿìììÿíííÿíííÿîîíÿîîîÿîîíÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîíîÿîîîÿîîîÿîîîÿîîîÿîîíÿîîîÿîîîÿîîîÿíîîÿîîîÿîîîÿîîîÿîîîÿîîíÿîîîÿîîîÿîîîÿîîîÿíîíÿìììÿíííÿëììÿêêêÿèççÿåæåÿãããÿßßÞÿרØÿÎÎÏÿ¼¼Âÿ¨§´ÿ¤ÿvv•ÿPP~ÿ3ÿDÿ@ÿ@ÿAÿ>ÿAÿ Iÿ9ÿ-ÿ.ÿ.ÿ.ÿ.ÿ/ÿ+ÿ!!GÿhhŠÿtt‰ÿŠŠ–ÿœœ¢ÿ¬¬®ÿµµµÿ»»»ÿÀÀÀÿÃÃÄÿÆÅÆÿÅÅÆÿÆÆÇÿÅÅÆÿÄÄÅÿÄÄÄÿÄÄÄÿÂÂÃÿÂÂÃÿÁÁÂÿÀÁÁÿÀÀÁÿ¿¿Àÿ¿¾¿ÿ½½¾ÿ½¼½ÿ¼¼»ÿ»»»ÿºººÿ¹¹¹ÿ¸¸¸ÿ···ÿ¶¶¶ÿµµ¶ÿ´´µÿ³³´ÿ³³³ÿ±°±ÿ°°±ÿ°°±ÿ³³³õØØØðKKLR ¡¡¢¡¡¡žž¢  ¤¥¥¦     §§¦ ««« ——˜ˆˆ”——‘šš›9`ðððÿìììüîîîÿîîîÿîîíÿîîîÿîîîÿíîîÿííîÿîîíÿîîîÿîîîÿíîîÿîîíÿîîîÿîíîÿîîíÿîîîÿîîîÿîîîÿíîîÿîîîÿîîîÿîîîÿîíîÿîîîÿîíîÿíîîÿîíîÿîîîÿîîíÿîîîÿíîîÿîîîÿîîîÿîîîÿîîíÿêêëÿääçÿ×ÖÞÿÁÁÏÿ£¤¼ÿ††¨ÿ55„ÿ**~ÿ//†ÿ//†ÿ//…ÿ..…ÿ22Šÿfÿÿ(ÿ'ÿ&ÿ(ÿ&ÿ""Kÿ``…ÿmm„ÿÿ––ÿ¨¨ªÿ·¶·ÿÂÂÂÿÌÌËÿÕÕÕÿÛÛÛÿãââÿæææÿèèéÿëêëÿìììÿíííÿíííÿíííÿîîîÿîîíÿîîîÿîîîÿîîíÿîîîÿîîîÿíîîÿîîîÿíîîÿîîîÿîííÿîííÿîîîÿîîîÿíîîÿíîíÿíîîÿîííÿííîÿîîîÿíîîÿîîîÿíîîÿíííÿîîíÿíîîÿííìÿììíÿìììÿìììÿêéêÿèççÿåååÿãããÿßßßÿØØØÿÏÏÐÿÁÂÅÿ°°¸ÿ™™©ÿ™ÿnn”ÿPÿ4ÿ6ÿ:ÿAÿAÿ@ÿAÿ@ÿ4ÿ,ÿ-ÿ-ÿ-ÿ-ÿ.ÿ+ÿ++[ÿgg†ÿvuŠÿ‹‹–ÿœœ ÿ©©ªÿ²²³ÿ··¸ÿ½½¾ÿÀÀÁÿÂÂÂÿÁÁÁÿÂÂÂÿÁÁÂÿÁÀÁÿÀÀÀÿ¿ÀÀÿ¿¾¿ÿ¾½¾ÿ½½¾ÿ¼¼½ÿ¼»¼ÿ»»»ÿºº»ÿ¹¹ºÿ¸¸¹ÿ·¸¸ÿ·¶·ÿµ¶·ÿµµ¶ÿ´´´ÿ³³´ÿ²³³ÿ±±²ÿ±±±ÿ°°±ÿ¯¯°ÿ®®¯ÿ­­®ÿ«««ýËËËùÁÁÁÆ2¡¡   ¡˜˜ ¥¥¨œ ¨¨¨ °°° œœ›””•±±±9`ïïïÿìëìüíííÿîííÿííîÿíîîÿîîíÿîîíÿîîíÿîíîÿíîîÿîîíÿíîîÿíííÿîíîÿîîíÿîîîÿîîíÿîîîÿîíîÿîîîÿíîîÿíîíÿîíîÿíîîÿííîÿîîîÿîííÿîíîÿîîíÿîîîÿîíîÿííîÿîíîÿîîîÿîîíÿîîîÿìììÿççéÿÜÜáÿÊÊÕÿ°°Åÿ““°ÿ^^›ÿ,,‡ÿ//†ÿ//†ÿ//†ÿ//†ÿ//†ÿ++ÿ%ÿ'ÿ'ÿ'ÿ&ÿ#ÿ2ÿ^]†ÿggÿzzŠÿ–ÿ  ¢ÿ¯¯¯ÿ¼¼»ÿÆÆÆÿÏÏÏÿ×××ÿÝÞÝÿãããÿçææÿèèéÿëëêÿììëÿìììÿííìÿíìíÿîîíÿíîîÿííîÿîîíÿíîíÿîííÿîîîÿííîÿîîíÿîîîÿíííÿííîÿîíîÿíîíÿîíîÿîîîÿíííÿíîíÿîîîÿîííÿííîÿîííÿîíîÿíîíÿíìíÿììíÿíííÿìììÿëëëÿééêÿçèçÿåååÿáââÿÝÝÞÿÙØØÿÐÐÑÿÄÄÇÿ´´»ÿ  ­ÿЉŸÿqq‘ÿQQÿ2ÿ:ÿ9ÿ8ÿ7ÿ;ÿBÿCÿ?ÿ4ÿ+ÿ,ÿ,ÿ,ÿ,ÿ-ÿ ÿ==eÿfg…ÿww‰ÿ‹‹•ÿ›› ÿ¨¨©ÿ°°°ÿµµµÿ¹¹¹ÿ»»¼ÿ½½¾ÿ¾½¾ÿ½½½ÿ½½½ÿ¼¼½ÿ»¼¼ÿº»¼ÿ»»»ÿº¹»ÿºººÿ¸¸¹ÿ¸¸¸ÿ··¸ÿ¶¶·ÿµµ¶ÿµµ¶ÿ´´´ÿ³³´ÿ²²³ÿ±²²ÿ°°±ÿ°°±ÿ¯¯°ÿ¯¯°ÿ®®®ÿ¬¬­ÿ­­­ÿ¬¬¬ÿ¬¬­ÿ¬­­öãããÿŒŒŒ„ °°¨™™ž¤¤¤ ššš ³³³©©«   ƒƒƒ9`ïïïÿììëüîîîÿíííÿîíîÿîíîÿîííÿííîÿîííÿíîíÿîííÿííîÿíîíÿîîîÿîîîÿííîÿíîîÿîîîÿîîíÿíííÿîîîÿîîíÿíîíÿîííÿíííÿíîîÿîíîÿíîîÿîííÿîîîÿíîíÿîííÿîîíÿîîîÿíííÿíííÿíîîÿíìíÿééëÿáâæÿÓÓÜÿ½¼ÌÿŸŸºÿ~~£ÿ66Žÿ..„ÿ//†ÿ..†ÿ//‡ÿ..„ÿ22ÿ Aÿ"ÿ&ÿ%ÿ%ÿ)ÿ ÿQQ|ÿbbÿtt‡ÿ††ÿ˜˜œÿ¨§©ÿµµ¶ÿ¿¿¿ÿÈÈÈÿÑÑÑÿØÙÙÿÞÞÞÿãããÿææçÿçççÿêêëÿìëëÿìììÿííìÿìììÿííìÿîííÿííîÿíîíÿíííÿííîÿíîíÿííîÿíííÿíííÿîîîÿíííÿííîÿîîîÿíîíÿîîíÿííîÿîííÿîîîÿîííÿíîîÿíííÿìììÿíììÿìììÿëëìÿéééÿéèèÿçççÿäääÿàààÿÝÜÝÿר×ÿÏÏÏÿÆÆÈÿ··¼ÿ¥¥¯ÿ¢ÿvv’ÿjj‘ÿIÿ6ÿ8ÿ8ÿ8ÿ8ÿ9ÿ6ÿ<ÿ;ÿ3ÿ/ÿ/ÿ/ÿ/ÿ0ÿ3ÿ-ÿKKtÿffƒÿxx‰ÿ‹‹”ÿššžÿ¦¦§ÿ­­­ÿ²²²ÿ¶¶¶ÿ¸¸¹ÿ¹ººÿ¹¹ºÿºººÿ¸¸¹ÿ¹¸¹ÿ¸¸¹ÿ··¸ÿ···ÿ¶¶·ÿµ¶¶ÿ´´µÿ´´µÿ´´´ÿ²²³ÿ²²³ÿ±±²ÿ°°²ÿ°°±ÿ¯¯°ÿ¯¯°ÿ­­¯ÿ­­®ÿ¬¬­ÿ««¬ÿ««¬ÿªª«ÿªªªÿ«ª«ÿ¥¥¦ý×××øÈÈÈõ6667 ¢¢£  ¡£££žž¡¡¡¤ ››› žžž     ’’‘œ­­®€9`ïïïÿëëìüîííÿíííÿíííÿîîîÿíííÿíííÿíííÿîíîÿíííÿíîíÿííîÿîííÿíííÿíîíÿîííÿîííÿíííÿíííÿííîÿíííÿîííÿííîÿîîíÿííîÿîííÿíííÿîîíÿíííÿíîíÿíííÿíííÿíîíÿîííÿíííÿîííÿíííÿëëëÿææéÿÙÚßÿÈÈÔÿ®­Ãÿ’’¯ÿYY˜ÿ++‡ÿ//†ÿ//†ÿ..…ÿ//†ÿ44Žÿ$$uÿÿ'ÿ&ÿ%ÿ%ÿÿ55]ÿ``„ÿllƒÿ~}‹ÿ•ÿžž¡ÿ¬¬¬ÿ···ÿÁÂÂÿÉÊÊÿÒÑÑÿØØØÿÝÞÝÿâââÿæææÿèççÿéééÿëêêÿìììÿíììÿìììÿììíÿíííÿíîíÿííîÿîííÿíîíÿíííÿíîíÿîííÿííîÿíííÿíîíÿîííÿíííÿíííÿîîíÿîîíÿîííÿíííÿíììÿííìÿìììÿìëëÿêêêÿéééÿæææÿæææÿâââÿàßßÿÛÛÛÿÕÕÕÿÏÏÐÿÅÅÈÿ·¸½ÿ¨§°ÿ””£ÿ}}–ÿmlÿ;;mÿ+ÿ8ÿ9ÿ9ÿ9ÿ8ÿ8ÿ9ÿ:ÿ;ÿ0ÿ.ÿ/ÿ.ÿ.ÿ.ÿ,ÿ*ÿWV~ÿgg€ÿyz‰ÿ‹‹“ÿššÿ¤£¥ÿ««¬ÿ¯¯°ÿ³³³ÿµµ¶ÿ¶¶¶ÿ¶¶·ÿµµ¶ÿµµµÿµµ¶ÿ´´µÿ³³µÿ³³´ÿ²²³ÿ±²²ÿ±²²ÿ±±²ÿ°°±ÿ¯¯°ÿ®®¯ÿ®®¯ÿ­­®ÿ¬¬®ÿ¬¬­ÿ««¬ÿ««¬ÿªª«ÿªªªÿ©©ªÿ©©ªÿ¨¨ªÿ¨¨©ÿ¤¤¥þÑÑÒúÓÓÓÿ¥¥¥™  !444¤¤   ¢¡¡¦¡¡¡ ¡¡  žž¢¢¢¢««« §§§”””ŽŽ‹¢¢¡|||9`ïïïÿëëëüíííÿííîÿíííÿíííÿíííÿíííÿîíîÿíîíÿíííÿíííÿííîÿíîíÿîííÿîííÿíííÿîííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíîíÿíííÿîííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿììíÿèéêÿààäÿÑÑÚÿ»»Ìÿžž¹ÿ€€¤ÿ55Žÿ//…ÿ..…ÿ11Šÿ44ÿ33Œÿ66“ÿ4ÿ#ÿ$ÿ%ÿ#ÿ!ÿ1ÿ\\†ÿcc~ÿuu†ÿ……Žÿ••™ÿ¢¢¤ÿ®®®ÿ¹¹¹ÿÂÂÂÿÊÊÊÿÑÑÒÿØØØÿÜÜÜÿàááÿäääÿæææÿççèÿéêéÿêêêÿëëëÿìììÿìììÿìììÿìììÿîíîÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìììÿìììÿìììÿëììÿëêëÿêêêÿéééÿèèèÿæææÿäääÿáááÿÝÝÝÿÙÙÙÿÓÓÓÿÍÍÎÿÃÄÆÿ··»ÿ¨¨°ÿ•–¤ÿ‚‚˜ÿlmÿWWƒÿ,ÿ:ÿ4ÿ5ÿ7ÿ9ÿ8ÿ8ÿ9ÿ:ÿ9ÿ0ÿ/ÿ/ÿ0ÿ0ÿ0ÿ1ÿ@ÿ^^‚ÿhhÿz{ˆÿ‹‹’ÿ™™›ÿ¢¢£ÿ¨¨©ÿ¬¬­ÿ¯¯°ÿ²²³ÿ²²³ÿ²²³ÿ²²³ÿ²²²ÿ±±²ÿ°°±ÿ°°±ÿ¯¯°ÿ¯¯°ÿ¯¯¯ÿ®®¯ÿ®®¯ÿ­­®ÿ­­®ÿ¬¬­ÿ««¬ÿ«««ÿªª«ÿªªªÿªªªÿ©©©ÿ¨¨©ÿ©©©ÿ§§¨ÿ¨¨©ÿ£££ÿª««þÖÖÖüÑÑÑÿ»»»á...($$$¢¢£¥¥¦žž¡££¤¢¢¢£££  ¡¢¢¡ŸŸŸ˜˜˜ §§§™™™”””§§§9`ïïïÿëëëüíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿééëÿååçÿÙÙàÿÈÇÔÿ¯®Ãÿ““°ÿ__šÿ++†ÿ55ÿ22Œÿ22Œÿ33ÿ66“ÿhÿÿ%ÿ"ÿ#ÿ'ÿÿCCnÿ__€ÿmmƒÿ{{‰ÿŠŠ‘ÿ˜˜›ÿ¥¥¦ÿ¯¯¯ÿ¹¹¹ÿÁÁÁÿÉÉÉÿÐÐÐÿÖÖÖÿÛÚÚÿÞßÞÿáááÿäääÿæææÿèèèÿéééÿêêêÿëëëÿìììÿëììÿëììÿìììÿíííÿíììÿìììÿíííÿìììÿìííÿíííÿìììÿìììÿëëëÿìììÿëëëÿêêêÿéééÿèèèÿçççÿæææÿäääÿáááÿÞÞÞÿÛÛÛÿ×××ÿÑÑÑÿÉÉÊÿÂÂÃÿ¶¶ºÿ¦§¯ÿ––£ÿƒƒ˜ÿmmŒÿaa‹ÿ?ÿ6ÿ1ÿ6ÿ7ÿ6ÿ6ÿ9ÿ9ÿ;ÿ;ÿ9ÿ1ÿ1ÿ1ÿ0ÿ1ÿ2ÿ,ÿ$$Oÿ__€ÿiiÿ||ˆÿ‹‹‘ÿ——™ÿ¡¡¡ÿ¦¦§ÿªªªÿ­­®ÿ¯¯¯ÿ¯¯°ÿ°°°ÿ¯¯°ÿ®®¯ÿ®®¯ÿ®®®ÿ­­®ÿ­­®ÿ­­­ÿ¬¬¬ÿ¬¬¬ÿ¬¬¬ÿªª«ÿ««¬ÿªª«ÿ©©ªÿ©©ªÿ¨¨©ÿ¨¨©ÿ§§¨ÿ¨¨©ÿ¨¨¨ÿ¥¥¦ÿ££¤ÿ¨¨©ÿÄÄÅÿßßßþÉÉÉþÀÀÀòffgC $$$  ¡  ¢££¢££¢¡¡£ ¡¡£¡¡¡ŸŸŸ¢¢¢¦¦¦ ¬¬¬ ———ˆˆˆ“““ŽŽŽ¨¨¨9`ïïïÿëëëüìííÿíííÿíííÿíííÿíííÿìííÿìííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíììÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿíííÿìííÿíííÿíííÿíííÿìííÿíííÿíííÿíííÿìííÿíííÿíííÿíííÿìììÿèèéÿßàäÿÓÓÛÿ½½Íÿ¡¡¼ÿ††§ÿDDœÿ//‡ÿ33ÿ22ÿ33ÿ33Œÿ66”ÿ6ÿ!ÿ&ÿ%ÿ#ÿ!ÿ/ÿ]]‰ÿbb~ÿrr„ÿ€€‹ÿ“ÿššœÿ¦¦¦ÿ¯¯¯ÿ¸¸¸ÿÀÀÀÿÆÆÇÿÎÎÍÿÓÓÓÿØØØÿÜÜÜÿßßßÿâââÿãããÿåååÿæççÿçççÿèèèÿéééÿêêêÿêêêÿêêêÿêëëÿëëëÿëëêÿëëëÿëëêÿêêêÿëëëÿêêêÿêêéÿèèéÿèèèÿçççÿæææÿååäÿãããÿààáÿÞÞÞÿÚÚÙÿרØÿÓÓÓÿÍÍÎÿÆÇÇÿ½½¿ÿ²²·ÿ¤¤­ÿ“”¢ÿ‚‚—ÿnn‹ÿffÿFÿ,ÿ6ÿ8ÿ3ÿ4ÿ6ÿ6ÿ6ÿ8ÿ;ÿ<ÿ4ÿ0ÿ2ÿ1ÿ0ÿ1ÿ0ÿ+ÿ::gÿ]^|ÿllÿ||‡ÿ‹‹ÿ——˜ÿŸžŸÿ¤¤¥ÿ§§¨ÿªª«ÿ­­­ÿ¬¬­ÿ­­®ÿ¬¬®ÿ­­­ÿ¬¬¬ÿ««­ÿ««¬ÿ««¬ÿ«««ÿªª«ÿªªªÿ©©ªÿ©©ªÿ©©©ÿ¨¨©ÿ¨¨©ÿ©©©ÿ¦¦§ÿ¤¤¥ÿ¢¢£ÿ££¤ÿ¦¦§ÿ¶¶·ÿËËÌÿÙÙÙÿÏÏÏÿÃÃÃýÃÃÃûwwwV"""¨¨©¡¡¢£££  ¡  ¢¤¤¥¢¢¢ŸŸž ››š        §§§‹‹‹ŸŸ yyzÿÿÿ9`ïîîÿëëëüíííÿííìÿíííÿííìÿíííÿíìíÿíííÿíííÿíììÿíííÿíìíÿìííÿííìÿíííÿíìíÿííìÿíííÿííìÿíííÿíííÿíííÿíííÿìììÿíííÿíííÿíííÿìííÿíííÿíííÿíííÿíìíÿíììÿííìÿíííÿíííÿìííÿíííÿíííÿéêëÿååèÿÚÚáÿÊÊÕÿ³³Æÿ——´ÿoožÿ55–ÿ00‡ÿ44Žÿ33ÿ33Žÿ::—ÿ**ÿÿ%ÿ#ÿ"ÿ#ÿÿ55[ÿ__…ÿgg€ÿuu…ÿ‚‚Œÿ”ÿššœÿ¤¤¥ÿ­­®ÿ¶µ¶ÿ½¾½ÿÄÄÄÿÊÊÊÿÏÏÐÿÔÔÔÿØØØÿÛÛÛÿÝÞÝÿàßàÿâáâÿãããÿåååÿåååÿæææÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçççÿçææÿæææÿæææÿåååÿäãäÿââãÿáááÿßÞßÿÜÛÜÿÚÚÛÿ×××ÿÓÓÓÿÎÎÏÿÉÉÊÿÁÁÃÿ¸·»ÿ­­²ÿ  ©ÿ‘‘ ÿ€€•ÿllŠÿeeŽÿIÿ,ÿ2ÿ0ÿ3ÿ7ÿ4ÿ5ÿ5ÿ6ÿ;ÿ=ÿ>ÿ4ÿ4ÿ2ÿ3ÿ5ÿ3ÿ6ÿ2ÿQQwÿ^^zÿoo€ÿˆÿŒŒÿ––˜ÿžÿ¢¢£ÿ§§¨ÿªªªÿ««¬ÿ««¬ÿ¬¬­ÿ¬¬¬ÿ««¬ÿ««¬ÿªªªÿ©©©ÿ¨¨©ÿ§§¨ÿ¥¦¦ÿ¤¤¥ÿ¤¤¤ÿ¡¢£ÿ££¤ÿ¤¤¥ÿ¤¤¥ÿ¦¦¦ÿ®®¯ÿ¼¼¼ÿÊÊÊÿÒÒÓÿÚÚÚÿ××ÖÿÌÌÌÿÅÅÅÿÅÅÅüÅÅÅÿˆˆˆr!!! ???¤¤¥¡¡¢››¢  £žž¡ žž ¥¥¥–––——”““®‹‹Žÿÿÿ9`îîïÿëëëüíìíÿíííÿíííÿíííÿíííÿííìÿìííÿíííÿííìÿìííÿííìÿíìíÿìííÿíììÿìííÿìííÿíììÿíííÿíííÿìíìÿíííÿìììÿíííÿìííÿííìÿíììÿíííÿíìíÿííìÿììíÿìíìÿíííÿíííÿìíìÿìììÿíííÿííìÿíííÿìììÿèèéÿâáåÿÔÕÜÿÃÂÐÿ©©Àÿ®ÿVV˜ÿ22’ÿ00ˆÿ44ÿ99—ÿ55ÿ88•ÿJÿÿ#ÿ"ÿ"ÿ#ÿÿNNzÿ_`ÿkk‚ÿww†ÿ‚‚ŒÿŽ”ÿ™™œÿ¢¢£ÿ«««ÿ²³³ÿº»ºÿÀÀÀÿÆÆÆÿÌËËÿÏÏÏÿÓÓÓÿ××ÖÿÙÙÙÿÛÛÛÿÝÝÝÿÞÞÞÿàààÿààáÿáââÿâââÿãâãÿãããÿããäÿããäÿãããÿââãÿâââÿáááÿàààÿàßßÿÝÝÝÿÜÜÜÿÚÚÚÿØØ×ÿÖÕÖÿÒÒÒÿÎÎÎÿÉÈÉÿÄÄÄÿ»»¾ÿ²²·ÿ§§®ÿšš¥ÿŒŒœÿ|}’ÿjj‰ÿeeŽÿJÿ,ÿ3ÿ1ÿ2ÿ1ÿ4ÿ6ÿ4ÿ4ÿ9ÿ8ÿ7ÿ5ÿ+ÿ,ÿ-ÿ-ÿ,ÿ-ÿ-ÿ9ÿUU|ÿ[[tÿmm|ÿ||„ÿ‰‰Œÿ““”ÿšš›ÿžžŸÿ¡¡¢ÿ¤¤¥ÿ§§§ÿ§§¨ÿ§§©ÿ¦¦§ÿ§§§ÿ¨¨©ÿ¬¬¬ÿ¯¯°ÿ³³³ÿ··¸ÿ¼¼¼ÿÁÁÂÿÈÈÈÿÎÎÎÿÐÐÑÿÕÕÕÿÜÜÜÿåååÿßßßÿ×××ÿÒÒÒÿÌÌÌÿÇÇÇÿÇÇÇÿÇÇÇÿÆÆÆüÅÅÅÿ††‡r >>>‹ŒŒÔÔÕšš›¢¢¡¡¡¢  ¢¤¤¦œœ¥  ¡ ¢¢¢ ˜˜˜———–––­­©¢¢¢ÈÈÇ9`ïîîÿëëëüìììÿìíìÿíìíÿìììÿíìíÿììíÿííìÿíììÿííìÿííìÿíìíÿìííÿìììÿìíìÿìíìÿííìÿíìíÿíììÿìííÿíííÿìíìÿíìíÿìììÿíììÿìííÿììíÿìììÿíììÿííìÿííìÿíìíÿìììÿìììÿíìíÿìíìÿììíÿìììÿììíÿíííÿêêëÿæåèÿÝÝâÿÏÏÙÿ»»ËÿŸŸºÿ††¨ÿ@@•ÿ66“ÿ::˜ÿ44ÿ22Œÿ66’ÿ88™ÿ1ÿÿ"ÿ#ÿ"ÿÿ $ÿYY†ÿ``ÿllƒÿww†ÿƒƒŒÿ’ÿ––™ÿŸŸ ÿ§§¨ÿ¯¯¯ÿ¶¶¶ÿ»»¼ÿÂÂÂÿÅÅÅÿÊÊÊÿÍÍÍÿÑÑÑÿÓÓÒÿÕÖÖÿØØØÿØÙØÿÛÛÛÿÛÛÛÿÛÛÛÿÜÜÜÿÜÜÜÿÝÝÞÿÝÝÜÿÜÜÜÿÜÜÜÿÛÛÛÿÛÛÛÿÚÙÚÿØØØÿ×××ÿÕÕÕÿÒÒÒÿÏÏÏÿÌËËÿÈÈÈÿÂÂÃÿ¼»½ÿµ´¸ÿ««±ÿ ¡¨ÿ”” ÿ††˜ÿwwÿiiŠÿ^^‰ÿAÿ-ÿ3ÿ2ÿ2ÿ2ÿ2ÿ2ÿ5ÿ7ÿ8ÿ5ÿWW~ÿªª¾ÿ¡¡µÿ¡¡²ÿ¡¡²ÿ¡¡²ÿ¡¡³ÿ¡¡³ÿ¢¢´ÿ¡¡±ÿ±±ÁÿÂÂÎÿÅÅÍÿËËÐÿÐÐÒÿÕÕÕÿØØØÿÚÚÚÿÝÝÞÿããäÿääåÿæææÿæææÿèèèÿîîîÿïïïÿíííÿêêêÿçççÿåååÿáááÿàààÿÞÞÞÿÞÞÞÿÛÛÛÿØØØÿÕÕÕÿÑÑÑÿÍÍÍÿÌÌÌÿÌÌÌÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÅÅÅüÆÆÆÿ|||g ¸¸¹üüü¡¡¡¡¡£¡¡¡ ¡¡¢   ¢   ŸŸ¦››¢ žžž ——— §§§’’“““ÜÜÜ9`îîîÿêëëüììíÿìíìÿííìÿììíÿííìÿììíÿìììÿìíìÿíìíÿìííÿììíÿìììÿíííÿííìÿììíÿìììÿìíìÿìììÿíììÿìììÿìíìÿìììÿìííÿìììÿìììÿíììÿìììÿíììÿííìÿììíÿíííÿììíÿìììÿìììÿìíìÿíììÿíìíÿíììÿìììÿìììÿèèêÿäãæÿÙØßÿÉÊÕÿ³³Çÿ™™¶ÿ{{¥ÿ?? ÿ//†ÿ22ÿ88•ÿ88•ÿ99—ÿ//‹ÿ!ÿ"ÿ!ÿ ÿ ÿÿ,ÿ]]Šÿ``€ÿll„ÿww‡ÿŒÿ‹‹‘ÿ“”˜ÿœœÿ££¤ÿ«««ÿ±±±ÿ¶¶¶ÿ»»»ÿ¿¿¿ÿÃÄÄÿÆÇÇÿÉÉÉÿÌÌÌÿÏÎÎÿÐÐÐÿÒÒÑÿÓÓÓÿÔÓÔÿÔÔÔÿÔÕÕÿÕÕÕÿÕÕÔÿÕÕÔÿÔÔÔÿÓÓÓÿÒÒÒÿÐÐÐÿÏÏÏÿÍÍÍÿÌÌÌÿÈÈÉÿÅÅÄÿÀÀÀÿ»»¼ÿ´µ·ÿ««°ÿ££ªÿ˜˜¢ÿŒŒ›ÿ“ÿoo‹ÿjjÿPP}ÿ .ÿ.ÿ3ÿ2ÿ2ÿ2ÿ2ÿ3ÿ3ÿ-ÿ,ÿ5ÿ+ÿ€œÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿýýýÿûûûÿúúúÿøøøÿ÷÷÷ÿõõõÿóóóÿòòòÿðððÿíííÿëëëÿéééÿèèèÿåååÿãããÿáááÿàààÿÞÞÞÿÜÜÜÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÅÅÅüÆÆÆÿ‚‚‚pöõõ¡¡¡¡¡¢  ¢  ¡  ¡  ¢ ¡¡£ŸŸ¢£££¤¤¤ŸŸ¢ŸŸ£ ¢ ¥¥¥••–||Œ««§yyyÿÿÿ9`îîîÿêêêüììíÿìììÿìíìÿììíÿìììÿìììÿìììÿììíÿìììÿìììÿìììÿìíìÿíììÿíììÿìììÿìììÿìííÿìììÿììíÿìììÿìììÿìììÿìììÿìììÿìíìÿììíÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿììíÿìììÿìììÿìììÿêëëÿççèÿááåÿÕÖÝÿÅÄÒÿ®®Ãÿ”“±ÿkkœÿ55—ÿ99”ÿ88•ÿ88•ÿ77”ÿ<<›ÿ&&|ÿÿ ÿ ÿ ÿ!ÿÿ+ÿYY…ÿcc…ÿjjƒÿuu‡ÿ~~‹ÿ‡‡ÿ”ÿ——šÿžž ÿ¥¥¥ÿ«ª«ÿ°°°ÿµµµÿ¹¹¹ÿ½½½ÿÀÀÀÿÂÂÂÿÅÄÄÿÇÇÇÿÈÈÈÿÉÉÉÿÊËÊÿËÌËÿËËËÿÌËËÿËËÌÿÌËÌÿËËÊÿÊÉÉÿÈÈÉÿÇÇÇÿÅÆÆÿÃÃÃÿ¿¿¿ÿ¼¼½ÿ··¸ÿ±±´ÿ«ª®ÿ££©ÿ™™¢ÿŽŽœÿƒƒ–ÿvvŽÿkkŠÿffÿ55`ÿ&ÿ2ÿ+ÿ2ÿ2ÿ2ÿ3ÿ3ÿ,ÿ3ÿWÿ''zÿ oÿ Zÿ„„¥ÿÿÿÿÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿüüýÿüüüÿûûûÿùùúÿøøøÿ÷÷÷ÿöööÿõõõÿòòòÿñññÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÅÅÅüÆÆÆÿr¡¡¢  ¢¡¡¢¡¡¡¡¡¢ŸŸ¤  ¡ŸŸŸ    œœœ  ¡ ¦¦¦ ——————……‡}}|®®®ÇÇÇ9`îîîÿêêêüìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿììíÿìììÿìììÿìììÿìììÿìììÿìíìÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿêêëÿææèÿÞÞãÿÒÒÛÿÀÀÏÿ¨¨Àÿ‘‘¯ÿhh£ÿ66›ÿ88“ÿ88•ÿ88•ÿ77”ÿ==ÿ))ÿÿÿ!ÿ ÿ!ÿÿ "ÿMMwÿddŠÿggƒÿrr‡ÿ{{ŠÿƒƒŽÿ‹‹’ÿ‘‘—ÿ˜˜œÿŸŸ ÿ¤¥¦ÿ©©ªÿ­­­ÿ±±±ÿµµµÿ···ÿ¹¹ºÿ»»¼ÿ¾¾¾ÿ¿¿¿ÿÀÀÀÿÁÁÁÿÁÂÁÿÂÁÂÿÂÁÂÿÂÂÂÿÀÀÀÿÀÀÀÿ½½¾ÿ¼¼¼ÿ¸¹¹ÿ¶¶·ÿ±±´ÿ­­°ÿ§§«ÿ  §ÿ˜˜¢ÿœÿ……•ÿzz‘ÿnnŠÿiiŽÿVU€ÿ?ÿ%ÿ/ÿ0ÿ/ÿ-ÿ2ÿ3ÿ-ÿ0ÿXÿ..ˆÿ88—ÿ<<›ÿ66”ÿ11—ÿ››ÉÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿýýýÿüüüÿúúúÿùùùÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÅÅÅüÆÆÆÿ}}}t¡¡¢¡¡¢¡¡¡žžž¡¡¡ ¤¤£¡¡¢££¤ ŸŸŸ ¨¨¨‹‹‹   zzzÿÿÿwww9`îíîÿêêêüìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëëìÿèèéÿäåçÿÜÜáÿÏÎÙÿ¼¼Ìÿ¤¥¾ÿŽŽ«ÿdd£ÿ77œÿ88“ÿ88•ÿ88–ÿ99˜ÿ==ÿ++…ÿ$ÿÿ!ÿ ÿ ÿ ÿÿ66\ÿeeŽÿee…ÿmm†ÿvv‰ÿ~~Œÿ……ÿŒŒ“ÿ‘‘˜ÿ˜˜œÿœœŸÿ¡¡¢ÿ¥¥¦ÿ©©©ÿ¬¬­ÿ¯¯¯ÿ±±±ÿ³³³ÿ´´µÿµµµÿ¶¶¶ÿ···ÿ···ÿ···ÿµµ¶ÿµµµÿ³³´ÿ±±³ÿ¯¯°ÿ««®ÿ¦¦«ÿ¡¡§ÿ››£ÿ”•Ÿÿšÿ……–ÿ{{ÿooŠÿkkÿbb‹ÿ..Wÿ)ÿ+ÿ.ÿ.ÿ,ÿ1ÿ/ÿ*ÿ-ÿSÿ,,…ÿ,,ÿ//ˆÿ33ÿ99–ÿ33Žÿ--ÿ™™ÆÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿýýýÿüüüÿúúúÿùùùÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÅÅÅüÆÆÆÿ}}}u¡¡¢¡¡¢¤¤ ££¦¡¡  ¤  ¥ šš¨ ©©¨”””‡‡‡›››‰‰‰ÿÿÿ9`íîíÿêêêüìììÿìììÿììëÿìììÿëììÿììëÿëììÿìììÿìììÿììëÿìììÿìììÿìììÿëììÿìììÿìììÿìëìÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿììëÿìììÿëììÿìììÿìììÿëììÿìììÿìììÿìììÿìììÿìììÿìììÿììëÿìììÿìììÿëëìÿèèéÿãäæÿÚÚàÿÍÍØÿ»»Ìÿ¤¤½ÿŽŽ«ÿdd¤ÿ77ÿ88”ÿ99™ÿ99˜ÿ77–ÿ==ÿ55•ÿ7ÿÿ"ÿÿ ÿ"ÿÿ3ÿRQ|ÿhhÿhh†ÿpoˆÿww‹ÿ~~ÿ„„ÿ‰‰“ÿŽŽ–ÿ“’™ÿ——œÿ››Ÿÿ¡ÿ  £ÿ¤¤¦ÿ¥¥§ÿ§§©ÿ¨¨ªÿ©©ªÿ©©ªÿ¨©ªÿ¨¨ªÿ§§ªÿ¦¥©ÿ¤£¨ÿ  ¥ÿž¤ÿ™™¡ÿ””žÿ›ÿˆˆ—ÿ”ÿyyÿppŠÿllÿddŒÿ<ÿ$ÿ#ÿ+ÿ*ÿ+ÿ,ÿ-ÿ+ÿ)ÿ1ÿUÿ qÿjÿfÿoÿ##tÿ$$vÿ##uÿ00‰ÿ$$uÿ00Šÿ33Žÿ88–ÿ22‹ÿ//“ÿ¡¡ÊÿÿÿÿÿþþþÿþþþÿýýýÿüüüÿúúúÿùùùÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÅÅÅüÆÆÆÿssso  ¢¡¡¡¨¨¨zz|ØØ×{{{9`ìííÿéééüëëëÿììëÿëëëÿìëëÿëìëÿëììÿëìëÿëìëÿìëëÿììëÿëììÿëëëÿëëìÿìëëÿìëìÿëëëÿìëìÿëìëÿëëëÿëëëÿìëëÿëìëÿììëÿëëëÿìëëÿëëëÿëëëÿëìëÿëëëÿëëìÿëìëÿììëÿëëëÿëìëÿëëëÿììëÿëëìÿìëìÿìëìÿëìëÿìëëÿëëëÿëëëÿëìëÿëìëÿëëëÿêéêÿççèÿãâåÿÛÛàÿÏÏØÿÂÂÐÿ®¯Äÿ››¸ÿ‰‰¨ÿcc¤ÿ<< ÿ77™ÿ::˜ÿ99™ÿ99™ÿ::™ÿ>>£ÿ00ÿQÿÿÿ!ÿ"ÿ!ÿ#ÿ ÿÿÿ-ÿ$$Hÿ;;aÿQQzÿ[[„ÿeeŽÿii‘ÿkk‘ÿll‘ÿll‘ÿll’ÿll‘ÿkk‘ÿii’ÿeeÿ\\†ÿRRzÿ>>hÿ%%Jÿ7ÿ#ÿ"ÿ'ÿ+ÿ*ÿ-ÿ+ÿ+ÿ)ÿ&ÿ4ÿUÿ$$yÿ""uÿjÿmÿgÿkÿ$$vÿ""tÿqÿ,,Šÿ%${ÿ..…ÿ77’ÿ55•ÿ33”ÿ++“ÿŸŸÈÿÿÿÿÿýýýÿýýýÿüüüÿúúúÿùùùÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÅÅÅüÅÅÅÿpppm   £  ¡•••ŠŠ‹ÿÿÿ9`íìíÿéééüëìëÿëëëÿëëëÿëëìÿëëëÿìëëÿëëëÿëëëÿëëëÿëëëÿëëìÿëììÿëëëÿëëëÿëìëÿëëëÿëìëÿëëëÿëìëÿëìëÿëìëÿëëëÿëììÿìëëÿëëëÿëëëÿëëìÿëëëÿìëëÿëëëÿëììÿëëëÿëëëÿìëëÿëëìÿìëëÿëëëÿëëëÿëìëÿëëëÿëëëÿëìëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêëÿççèÿããåÿÜÜâÿÒÒÛÿÅÆÒÿ¶µÈÿ££½ÿ’’¯ÿ{{¥ÿOO¡ÿ77œÿ88˜ÿ::™ÿ::šÿ88—ÿ::šÿ@@¤ÿ//ŒÿTÿ&ÿÿÿ!ÿ"ÿ#ÿ$ÿ!ÿÿÿÿÿ%ÿ/ÿ5ÿ@ÿ?ÿ?ÿAÿ=ÿ0ÿ$ÿ"ÿ!ÿÿ&ÿ$ÿ+ÿ+ÿ*ÿ*ÿ)ÿ'ÿ$ÿ)ÿCÿlÿ((€ÿ%%xÿiÿ%%zÿiÿnÿjÿgÿnÿ''wÿCCˆÿWWŒÿff”ÿgg‘ÿgg‘ÿee‘ÿ__”ÿHHŽÿ¬¬ÍÿÿÿÿÿüüüÿüüüÿúúúÿùùùÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÅÅÅýÅÅÅÿlllk ¡¡¢  ¡  ¡   ˆˆˆ©©©yyyÖÖÖ€€€9`íííÿéééüëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëìëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìëëÿëìëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëìÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêëÿèçéÿääæÿÞÞãÿÕÕÝÿËËÖÿ½½Íÿ¬¬Ãÿ››·ÿ‹‹ªÿpp£ÿJJ¢ÿ88ÿ77˜ÿ99˜ÿ::šÿ88˜ÿ::™ÿ==¡ÿ88šÿ$$wÿHÿ(ÿÿÿÿ!ÿ"ÿ&ÿ$ÿ%ÿ%ÿ#ÿÿ!ÿ!ÿ!ÿ ÿ(ÿ%ÿ%ÿ&ÿ,ÿ'ÿ+ÿ'ÿ(ÿ$ÿ!ÿ&ÿ3ÿ Hÿoÿ&&|ÿ++‚ÿ''{ÿ''{ÿ&&zÿkÿ$$vÿ!!rÿjÿjÿ""lÿUUŒÿpp˜ÿzzœÿŸÿ‚‚¡ÿ…„¡ÿƒƒ ÿžÿ~~›ÿrr‘ÿÁÁÎÿÿÿÿÿûûûÿúúúÿùùùÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆýÄÄÄÿhhhh ¡¡¢££¢¡¡¡ ¡¡¡ ¡¡¢œœœ   ¡¡¡¡¡¡“““›››¤¤¤………€€€˜˜˜ÿÿÿ9`íííÿéééüëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêëÿèèéÿååçÿáàäÿÚÚàÿÑÑÙÿÅÅÒÿ·¶Éÿ¦¦¿ÿ——´ÿ‡‡¨ÿnn£ÿJJŸÿ88œÿ77šÿ88—ÿ::˜ÿ88˜ÿ88—ÿ;;›ÿ==¢ÿ66—ÿ''}ÿ]ÿ <ÿ*ÿÿÿÿÿÿ ÿ ÿ$ÿ#ÿ#ÿ#ÿ$ÿ!ÿÿÿ!ÿÿ#ÿ%ÿ3ÿ Hÿgÿ""tÿ//‹ÿ--…ÿ--†ÿ((}ÿ''{ÿ$$wÿ**ÿ$$wÿ##uÿhÿ""yÿ((qÿYYÿxxžÿ„„¤ÿ‹‹§ÿ””¬ÿšš¯ÿ°ÿžž°ÿœœ®ÿ™™«ÿ––©ÿŠŠ ÿÏÏ×ÿÿÿÿÿúúúÿùùùÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆýÄÄÄÿddde ¡¡¢ŸŸ¤¡¡¡   ¡¢¢¢ ¢¢¢œœœ   ¦¦¦ŸŸŸƒƒƒ´´´vvv„„„9`ííìÿéééüëëëÿêêêÿëëêÿëëëÿëëëÿëëëÿêêëÿëëëÿëëëÿëëëÿëêëÿëëëÿëëëÿëëëÿëëëÿëëëÿêëëÿëëëÿêëëÿëëëÿëëëÿëëëÿëëëÿêëëÿëëëÿëêëÿêëëÿëëëÿëëëÿëëêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêëêÿêëëÿëëëÿëëêÿëëëÿêëêÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêëëÿëëëÿêêëÿééêÿæççÿãâåÿÞÞâÿÖÖÝÿÍÍ×ÿÁÁÏÿ´´Çÿ¥¥¾ÿ——´ÿŠŠ©ÿut£ÿWW¢ÿ>>œÿ55™ÿ55•ÿ99—ÿ55’ÿ88–ÿ77–ÿ99˜ÿ==Ÿÿ88šÿ99œÿ++„ÿ&&zÿYÿOÿNÿ:ÿ)ÿ+ÿ*ÿ+ÿ0ÿ ?ÿMÿOÿPÿ^ÿbÿ''~ÿ11Žÿ--‡ÿ..ˆÿ00Šÿ((|ÿ..‡ÿ%%xÿ..‡ÿ%%yÿ))}ÿ$$wÿ vÿ!!yÿ))|ÿ=>~ÿiišÿƒƒ¤ÿŒŒ©ÿ””®ÿŸŸµÿ§§¹ÿ®­¼ÿ²²½ÿ³²¾ÿ²³¼ÿ°°ºÿ­­·ÿ©©´ÿžž«ÿ×ÖÜÿþþýÿùùùÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆýÄÄÄþ```c ŸŸŸ¡¡£¡¡ ŸŸ   £¦¦¦9`ìììÿéééüëëëÿêëêÿêëëÿëëêÿëëëÿëëëÿëëëÿëêëÿêëëÿêêëÿêëëÿëëêÿëëëÿëëëÿëëêÿëëêÿëëëÿêëëÿêëëÿêëëÿëëëÿëëëÿëëëÿëëëÿëêëÿêëëÿëëêÿëëëÿëëëÿëëëÿëêëÿêëëÿëëëÿëëëÿëêêÿëêêÿëêëÿêëëÿëëëÿëëëÿêëëÿëëëÿëëêÿêëëÿëêêÿëëëÿëëêÿëëëÿêëêÿëëêÿëëëÿëêëÿêêêÿèèéÿæåçÿááäÿÛÛáÿÕÕÜÿËËÖÿÁÁÏÿ´´Çÿ§§¿ÿ››·ÿ¬ÿ¦ÿll¢ÿQQ ÿ==šÿ66šÿ33”ÿ66–ÿ44‘ÿ77“ÿ22ÿ88—ÿ33Žÿ<<œÿ77•ÿ55”ÿ;;ÿ::ÿ00Žÿ11ÿ11Žÿ--ˆÿ++ƒÿ55”ÿ44’ÿ55’ÿ55“ÿ55’ÿ**ÿ--…ÿ22Žÿ++ÿ((}ÿ00‰ÿ$$uÿ22ÿpÿ--Šÿqÿ++†ÿ..zÿHH‹ÿggšÿ}|¡ÿ‹‹ªÿ’’®ÿ››´ÿ¦¦ºÿ°°Àÿ··Äÿ½½ÇÿÁÁÉÿÃÃÉÿÃÃÇÿÁÂÅÿ¿¿Ãÿºº¿ÿ¶¶»ÿ­­³ÿÞÞàÿüüüÿøøøÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆýÃÃÃþ\\\a ¡¡Ÿ  ¢ ¢¢¢¡¡¢ £žž¥££¤¨¨¨§§§¨¨¨9`ìëìÿéééüêëëÿêëëÿëëëÿëëêÿêëêÿëêëÿëêëÿëëêÿêêëÿëëêÿëëëÿëëëÿëêëÿëêëÿêëëÿêêëÿëêêÿëêêÿêêêÿêëêÿêêëÿêëêÿêêëÿëëëÿëêëÿëêêÿëêëÿêêêÿêëëÿëëêÿëëëÿêëêÿëëëÿëëëÿêêêÿêëêÿëëëÿêëëÿëëêÿëëëÿêëêÿêëëÿêëëÿëêëÿëëêÿëëëÿëêêÿêêêÿëêëÿêëëÿëëêÿêêëÿëëêÿêêëÿééêÿççéÿääæÿààäÿÚÛàÿÔÔÜÿÌËÖÿÃÃÐÿ¸¸Éÿ­¬Âÿ¢¢¼ÿ——´ÿŽŽ¬ÿ¥ÿpp£ÿ[[ ÿHHšÿ@@ ÿ11’ÿ44–ÿ22”ÿ//Œÿ88™ÿ00‰ÿ11‹ÿ77”ÿ55ÿ11‰ÿ11‹ÿ11‹ÿ00ˆÿ%%vÿ22‹ÿ11Šÿ00‰ÿ00‰ÿ22ÿ##xÿ))‚ÿ//ÿ++ˆÿpÿ33”ÿtÿ77Žÿ??ÿKKÿccšÿssžÿƒƒ¦ÿŽ«ÿ““¯ÿ››µÿ¥¥»ÿ®®¿ÿ··Æÿ¾¿ÊÿÄÅÍÿÊÊÐÿÍÍÑÿÎÎÑÿÎÎÐÿÌÍÎÿÉÉÊÿÆÆÇÿÂÂÂÿ½¾¿ÿ¶¶·ÿâââÿúúúÿöööÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆýÃÃÃü[[[_ ¢¢£¡¡¡   ¢  ž¢¢¢¢¢£¨¨¨§§§§§§žžžŸŸŸ9`ìììÿéèèüêêêÿëêêÿêëêÿëêëÿêêêÿëêêÿêëëÿêëëÿêêêÿêêëÿêëëÿêëêÿëêëÿêêêÿëëêÿëêëÿëëëÿëëëÿêëëÿëëëÿêëêÿëêêÿëëêÿëêëÿêëëÿëëëÿêêêÿêëëÿëêêÿêêëÿêëêÿêëêÿêëëÿêëëÿêëêÿêëëÿëêêÿêëêÿëêêÿêêêÿëêëÿëëêÿëëëÿêëëÿêêëÿëëêÿëëëÿêêëÿëëêÿêêêÿêêëÿëëëÿëëëÿëëêÿêëëÿêêêÿêêéÿççèÿääæÿááãÿÜÜáÿÖÖÝÿÏÎØÿÇÇÓÿ¾¾ÎÿµµÈÿ¬¬Ãÿ¢¢¼ÿšš¶ÿ““¯ÿŒŒªÿ€€¥ÿvv¢ÿfg¡ÿVVšÿMMŸÿCCšÿ::”ÿ77˜ÿ55˜ÿ00ÿ//ÿ//ÿ//Žÿ11‘ÿtÿ--Šÿ,,‰ÿ77•ÿ88–ÿ<<–ÿ99ÿ88ÿOOÿVV›ÿXX‘ÿkkœÿxx¢ÿ¢ÿŠŠ©ÿެÿ”“¯ÿš™´ÿ¡¡¹ÿ©©¾ÿ±±ÃÿººÉÿ¿ÀÌÿÇÇÑÿÍÍÕÿÑÑÖÿÓÓ×ÿÖÖØÿÕÕ×ÿÔÕÕÿÓÓÓÿÏÎÐÿËÊËÿÇÇÇÿÄÄÄÿÀÀÁÿ¸¸¹ÿäääÿøøøÿõõõÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆýÂÂÂúXXX\  ¢£££££¡žž››¥¤¤¤§§§9`ìììÿèèéüêêêÿêëêÿêëêÿëêêÿëêêÿêêêÿëëêÿêêëÿëëëÿêëêÿêëêÿêëêÿêêêÿêëëÿëêëÿëëëÿëëêÿëëëÿëêêÿëêêÿêêëÿëêêÿêêëÿêëëÿêëëÿëëêÿëêêÿêêêÿêêêÿëêêÿêêêÿêêëÿëëêÿêêêÿêêêÿëêêÿëêëÿëêêÿëêëÿêëêÿëêëÿêêêÿêêëÿëêëÿêêêÿêêëÿêêêÿêêëÿêëêÿêêëÿêëëÿëêêÿêêêÿëêëÿêêêÿëêëÿëëëÿêéêÿééêÿèçèÿååçÿâáåÿÞÞâÿÙÙßÿÔÓÛÿÎÍ×ÿÇÇÓÿ¿¿Îÿ¸¸Éÿ°°Äÿ©©Àÿ¢¢¼ÿœœ·ÿ——³ÿ““¯ÿŒŒªÿˆ‡¨ÿƒƒ¥ÿ{{£ÿvv¢ÿrr¢ÿqq¡ÿpp¡ÿpp ÿpp ÿqqŸÿssžÿssžÿzz¡ÿ~~£ÿ‚‚¤ÿ††§ÿŠŠªÿŒŒªÿ¬ÿ””±ÿ——³ÿ››¶ÿ  ¹ÿ¥¤½ÿ««Àÿ²²Äÿ¸¸Èÿ½½ÌÿÄÃÐÿÊÉÓÿÐÐ×ÿÔÔÚÿ××ÛÿÛÛÞÿÛÜÞÿÜÜÝÿÛÛÛÿØØÙÿÖÖ×ÿÒÓÓÿÏÏÐÿÌËÌÿÈÇÈÿÃÃÄÿÀÀÀÿ¸¹¹ÿåææÿ÷÷÷ÿóóóÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþÂÂÂùVVV[ŸŸŸ9`ìììÿééèüêêêÿêëêÿêêêÿêëëÿêëëÿêêêÿêêêÿêêêÿëëêÿëêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëëêÿêêêÿêëêÿêêêÿêêêÿêêêÿêêêÿêêëÿêêêÿêëêÿêêêÿêêêÿêëêÿêêëÿêëêÿêêêÿëêêÿêëëÿëêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëêêÿêëêÿêëêÿêêêÿëêêÿêëêÿêêëÿêëêÿêëêÿëêêÿêêêÿêêêÿêêêÿêêêÿêêêÿèèéÿææèÿääæÿááäÿÜÜáÿÙÙßÿÕÔÜÿÏÏÙÿËËÕÿÄÅÒÿ¿¿ÎÿººËÿ´´Çÿ°°ÄÿªªÁÿ¦¦¾ÿ¢¢¼ÿ  ºÿž¸ÿ›œ¶ÿ››¶ÿššµÿ™™µÿššµÿšš´ÿ››¶ÿœœ·ÿ¸ÿŸŸ¹ÿ¢¡»ÿ¤¤¼ÿ¦§½ÿªªÀÿ®®Âÿ²±ÄÿµµÇÿ¹ºÉÿ¾¾ÍÿÃÂÏÿÆÆÒÿÊÊÔÿÏÏØÿÓÓÚÿ××ÜÿÛÚßÿßßâÿààâÿàáâÿáááÿàààÿßÞßÿÝÜÝÿÚÚÚÿ××ÖÿÕÔÔÿÏÏÐÿËËÌÿÇÈÈÿÃÃÃÿ¿¿Àÿ¸¹¹ÿæææÿôôôÿòòòÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþÁÁÁøSSSW¡¡¡¢¢¢9`ìëìÿèèèüëêêÿêêêÿêêëÿêêêÿêêêÿêêêÿêêêÿêêêÿëêëÿêêêÿêêêÿêêêÿëëêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿëêêÿêêêÿêêêÿêêêÿëêëÿêêêÿêêêÿêêëÿëêêÿêêëÿëêêÿëêêÿêêêÿëêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêëêÿêêëÿêêêÿêêêÿêêêÿêêêÿêêëÿêêëÿêêêÿêêêÿêêêÿééêÿéééÿçæèÿååæÿáâäÿßßãÿÜÜáÿØØßÿÕÕÜÿÑÑÚÿÎÎ×ÿÊÊÕÿÆÆÓÿÃÄÑÿÀÀÎÿ½½Íÿ¼¼ÌÿººÊÿ¹¸Êÿ¹¹Éÿ¸¸Éÿ¹¸Éÿ¸¹Êÿº¹ÊÿººËÿ¼¼Ìÿ¾½Ìÿ¿¿ÍÿÁÁÎÿÃÃÐÿÆÆÒÿÉÉÔÿËËÕÿÎÎ×ÿÑÑÙÿÔÔÜÿ××ÝÿÚÚßÿÝÝáÿàßãÿááäÿããäÿääåÿåææÿåäæÿääåÿääãÿâââÿàßßÿÝÝÝÿÚÚÚÿÖÖ×ÿÒÓÓÿÏÐÐÿËËËÿÇÇÇÿÃÃÃÿ¿¿Àÿ¹¸¹ÿçççÿóóóÿðððÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþÁÁÁöOOOU££¥¥¥¤9`ìììÿèèèüêêêÿêêêÿêëêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿééêÿèèéÿèééÿææèÿååæÿâãåÿááäÿÞÞâÿÜÜáÿÚÚßÿØØÞÿÖÖÝÿÔÔÜÿÓÓÛÿÑÑÚÿÑÑÙÿÐÐÙÿÐÐÙÿÐÐÙÿÐÐÙÿÑÑÙÿÒÒÚÿÒÒÚÿÔÔÜÿÕÕÜÿ××ÝÿØØÞÿÚÚßÿÛÛàÿÝÝáÿßßâÿááäÿãâåÿääæÿååæÿççèÿççèÿèèéÿèèçÿèèèÿèèèÿæææÿåååÿããäÿââáÿßßßÿÜÝÜÿÙÙÙÿÖÖÖÿÒÒÒÿÏÏÏÿËÊËÿÇÇÇÿÃÂÃÿ¿¿Àÿ¸¸¹ÿéééÿñññÿîîîÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþÀÀÀõLLLR ¢¢¢¢¢¢9`ëììÿèèèüêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêéÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêéêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéêêÿêêêÿêêêÿêêêÿéêêÿêêêÿêêêÿêêêÿêêêÿêêéÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêéêÿêêéÿêêêÿêêêÿêêêÿêêêÿêêêÿêéêÿééêÿéèéÿèèèÿçççÿææçÿåäçÿääæÿââåÿââåÿááäÿààäÿààãÿààãÿààäÿááäÿááäÿááäÿââåÿããåÿããåÿäåæÿååçÿææçÿççèÿèçèÿèèéÿèééÿêêêÿêêêÿéééÿêêêÿéééÿéééÿèèèÿèèèÿçèèÿææçÿåååÿäääÿáááÿßßßÿÝÝÝÿÙÙÙÿÖÖ×ÿÒÒÒÿÏÏÏÿÊÊËÿÆÆÇÿÂÂÂÿ¿¿Àÿ¸¸¹ÿêêêÿïïïÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþ¿¿¿ôGGGP   žžž¤¢¢¢›››žžž9`ìëëÿèèèüêêêÿêêéÿêêêÿêêêÿêêêÿêêéÿêêêÿéêêÿêêêÿêêêÿêêêÿêêêÿéêêÿêêêÿêêêÿéêêÿêéêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêéêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêéêÿéêêÿêêêÿééêÿêêêÿéêêÿêééÿêêêÿêéêÿêéêÿêêêÿêêêÿêêêÿêêéÿêêéÿêêêÿêéêÿêêêÿêêêÿêêêÿêêéÿêêêÿêêêÿêêêÿêêêÿêêéÿêéêÿêéêÿêêéÿéêêÿêêêÿêêêÿêéêÿêêêÿééêÿêêéÿéééÿéèéÿèèêÿèèéÿèèéÿèèéÿèèéÿééêÿééêÿêééÿéêêÿêêêÿééêÿêéêÿêêêÿêêêÿêêéÿêêêÿêêêÿéêêÿêêêÿéééÿêêêÿéééÿéééÿèèèÿèèèÿèèèÿæåæÿäääÿããâÿáááÿÞßßÿÜÜÜÿÙÙÙÿÖÕÖÿÒÒÒÿÎÎÎÿÊÊÊÿÆÆÇÿÂÂÂÿ¾¾¿ÿ¸¸¹ÿêêëÿìììÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¿¿¿òCCCN   ¡    ™™œ ™™™¨¨¨˜˜˜———®®®€€€¦¦¦‹‹‹w9`ìëëÿçèèüéêêÿêééÿêêêÿêééÿêêêÿêéêÿêêéÿêêêÿêêéÿéééÿêêéÿêêêÿêêêÿêêêÿêéêÿêêêÿêêêÿêêêÿêêêÿéêêÿêêêÿêêêÿêéêÿéêêÿêêêÿéêêÿêêêÿéêêÿêêêÿêêêÿéêêÿêêéÿéêêÿéêéÿêéêÿéêêÿêéêÿéêêÿêêêÿéêêÿêêêÿêêêÿêéêÿéêêÿêéêÿéêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêéÿêêêÿéêêÿéééÿêêêÿêêêÿêêêÿêêêÿééêÿéêéÿêéêÿéêéÿêêéÿêêêÿêéêÿêêéÿêêêÿêêêÿéêéÿêêêÿêêéÿéêêÿêêêÿêéêÿéêêÿêéêÿêéêÿêêéÿêêéÿêêêÿêêêÿêêêÿêêêÿêêéÿêêéÿêêêÿêêêÿéêêÿééêÿêééÿéêêÿêêêÿéêéÿééêÿêéêÿêêêÿêêéÿéêêÿêêéÿèèéÿêêêÿéèéÿéèéÿèèèÿèèèÿçççÿåååÿåååÿãããÿàááÿÞÞÞÿÜÜÜÿØØØÿÕÕÖÿÑÑÑÿÎÎÏÿÊÊËÿÆÆÆÿÂÁÂÿ¾¾¿ÿ··¸ÿëëëÿêêêÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ð@@@M ¢¢¢¢¢¢ ¢¢¢ŸŸ  œœœªªª§§§§§§˜˜˜®®®‰‰‰ÿÿÿ>>>9`ëìëÿèèèüêééÿêêêÿêêéÿêêêÿêêêÿêêéÿéêêÿéêêÿêééÿéêêÿêêêÿééêÿêééÿéééÿêêéÿêéêÿêééÿêéêÿéêéÿêééÿééêÿêêêÿêêêÿêêêÿéêêÿêêêÿêéêÿêééÿéêêÿééêÿêêêÿêéêÿêêêÿêêêÿêééÿêééÿéêéÿêêêÿééêÿêééÿêêêÿêéêÿêêêÿéêéÿêêêÿêêéÿêééÿêêêÿêééÿéêêÿêêéÿééêÿêêêÿêêéÿêêêÿêêêÿêéêÿéêéÿééêÿêééÿéêêÿéêéÿêêêÿêééÿêêêÿêêêÿêêêÿêéêÿêêéÿêéêÿééêÿêêêÿêêéÿéêéÿéêéÿêêêÿêéêÿêêêÿéêêÿééêÿêêêÿéêêÿêééÿééêÿééêÿêééÿéêéÿééêÿêêéÿêêêÿéééÿêêéÿêêêÿêéêÿêééÿêêéÿêêêÿéêéÿêêêÿêêêÿèèéÿêêêÿéééÿèéèÿèèèÿèççÿçççÿåååÿäääÿãââÿáááÿÞÞßÿÛÛÜÿØØØÿÕÕÕÿÒÑÑÿÍÎÎÿÊÉÊÿÆÆÆÿÁÁÂÿ¿¿¿ÿ··¸ÿìììÿéééÿçççÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ð===K šš¢¢¢¢¢¢ ŸŸŸ        ­­­¦¦¦ššš¦¦¦™™™‡‡‡ÿÿÿ8889`ëëëÿççèüéêéÿêêêÿêééÿéêêÿéééÿêéêÿêéêÿéêéÿêéêÿêééÿéêêÿéééÿêêêÿééêÿêêéÿéêêÿêéêÿêêêÿéééÿéêêÿéééÿéêéÿééêÿééêÿêéêÿêééÿêêéÿéêéÿééêÿêêéÿééêÿêééÿééêÿêééÿêéêÿêêéÿêéêÿêêéÿêêêÿêéêÿéêéÿêêêÿéééÿééêÿêêéÿééêÿêêêÿéééÿéééÿééêÿéêéÿéééÿéêéÿéêêÿééêÿêêéÿêéêÿêéêÿêêéÿééêÿéêéÿéééÿéééÿéééÿêêêÿêéêÿéêéÿéêêÿéêéÿêééÿêêêÿéééÿêêêÿêêéÿééêÿêééÿêéêÿéêéÿéêêÿéêêÿêêéÿêééÿêééÿêêéÿéêêÿêêéÿêêêÿêééÿéêéÿééêÿéééÿêêéÿéêêÿéêéÿêêêÿéééÿêééÿéêéÿéêéÿéêéÿéèéÿêéêÿèèéÿèèèÿçççÿèèçÿæææÿåååÿäååÿááâÿàààÿÞÞÞÿÛÛÛÿØØØÿÔÔÔÿÑÐÑÿÍÍÎÿÉÉÉÿÄÄÅÿÀÀÁÿ¾¾¾ÿ··¸ÿíííÿæææÿåååÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ð===K ¡¡¡¨¨¨£££     ŸŸŸœœœ¢¢¢ššš¥¥¥www¡¡¢ÿÿÿ8889`ëëëÿèçèüéééÿêêéÿééêÿêééÿéêêÿêéêÿééêÿéêêÿéééÿéééÿêêêÿêééÿéééÿêééÿéêéÿéééÿééêÿééêÿéééÿêééÿéêéÿééêÿêééÿéééÿêééÿéêéÿéééÿéééÿêêéÿéééÿêééÿééêÿéêêÿêéêÿééêÿéééÿêééÿêééÿéêéÿéêéÿééêÿéêéÿéééÿéêéÿêéêÿéêéÿéééÿéêéÿêêéÿééêÿéêéÿêêéÿééêÿéééÿêéêÿééêÿéêéÿêêéÿééêÿééêÿêééÿééêÿêééÿééêÿêéêÿééêÿéééÿêéêÿêéêÿêééÿééêÿêéêÿêééÿéééÿééêÿêéêÿéêéÿêééÿêêêÿéêêÿéééÿêêéÿéééÿêéêÿééêÿéêéÿéêéÿéêéÿéééÿêêéÿéééÿéêéÿééêÿéééÿêééÿêêêÿéééÿêééÿéééÿéééÿéééÿéééÿéééÿèççÿèèèÿèèèÿçççÿååäÿäääÿâââÿàààÿÝÝÝÿÚÚÛÿ×רÿÓÔÔÿÐÐÐÿÌÌÌÿÈÈÉÿÅÄÅÿÀÀÁÿ½½¾ÿ···ÿíííÿäääÿãããÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ð>>>J§§§¨¨§˜˜  ŸŸ œœ£££›››¥¥¥uuuËËËÿÿÿ8889`ëëëÿèççüéêéÿééêÿéééÿéééÿéééÿéééÿéééÿéêéÿééêÿêééÿéééÿéééÿéêéÿéééÿéééÿééêÿêêéÿééêÿéééÿéêéÿéééÿéêéÿêééÿêééÿéééÿêééÿéééÿêééÿééêÿéééÿéééÿéééÿêêéÿééêÿêééÿéééÿéêéÿéééÿééêÿéééÿêééÿêêêÿéééÿééêÿéêéÿéêêÿéééÿéééÿéééÿéééÿéêéÿéééÿééêÿéééÿéééÿéêéÿéééÿéééÿéêêÿéééÿêééÿéêéÿééêÿéêéÿééêÿéééÿéêéÿéêéÿéééÿéééÿêêéÿéééÿééêÿéêéÿééêÿêêéÿéééÿéêéÿéêéÿééêÿééêÿééêÿéééÿéêéÿêééÿééêÿêééÿéééÿéééÿêééÿéééÿéêéÿéééÿéêéÿéêéÿéééÿéééÿéééÿêéêÿèéèÿéééÿéééÿèèèÿèèèÿèçèÿççèÿææåÿäääÿãããÿáááÿßßßÿÝÝÝÿÚÚÚÿ×××ÿÓÔÔÿÏÏÏÿÌÌÌÿÇÇÈÿÃÃÄÿ¿¿Àÿ½½½ÿ··¸ÿíííÿááâÿáááÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ð>>>J§§§¨¨¨˜˜˜––—ŸŸŸ¢¢¢›››¤¤¤uuuÑÑÓÆÆË59`ëëëÿçççüéééÿéééÿéééÿéêêÿéééÿééêÿéééÿéééÿéééÿéééÿéééÿêééÿéééÿééêÿéééÿéééÿêééÿéééÿéééÿéééÿêééÿéêéÿéééÿééêÿéééÿêééÿéêéÿéééÿéééÿéééÿéééÿéééÿêééÿééêÿêééÿéêéÿéééÿéééÿééêÿêééÿéééÿéééÿééêÿééêÿéééÿêééÿéééÿééêÿéêéÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéêéÿéééÿéééÿéééÿééêÿéééÿéééÿéééÿéêéÿêééÿéééÿéééÿéééÿéééÿééêÿéééÿéééÿêéêÿéééÿéééÿééêÿéééÿéééÿéééÿéééÿéééÿéééÿêééÿéééÿééêÿéééÿéééÿééêÿêééÿéééÿéééÿéééÿêééÿééêÿéééÿêééÿèèéÿéèéÿéééÿèèèÿçèçÿççèÿçççÿæææÿäääÿããäÿáááÿßÞßÿÜÝÝÿÚÙÙÿÖÖÖÿÓÓÓÿÏÏÐÿËÌÌÿÇÇÇÿÃÃÄÿ¿¿¿ÿ¼¼¼ÿ¶¶·ÿìììÿßßßÿßßßÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ð@@@J¬¬¬———–––¢¢£“““¦¦¦¡¡¡uuuÑÑÑÆÆÆ9`ëëëÿçççüéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿééêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿêééÿéééÿéééÿéééÿééêÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéêéÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèéÿéêéÿèèèÿéèéÿçççÿèèèÿççæÿåååÿåääÿâããÿáààÿÞßÞÿÜÜÜÿÙÙÚÿÖÖÖÿÒÒÓÿÎÎÏÿËËÌÿÇÇÈÿÂÃÃÿ¿¿¿ÿ»»¼ÿ¹¹¹ÿëëëÿÝÝÝÿÝÝÝÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ð@@@J˜˜˜ –––¡¡¡‘‘‘§§§uuuÑÑÑÆÆÆ9`ëêëÿçççüéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿééèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿééèÿéééÿèèèÿéééÿèèèÿèèèÿçççÿèèèÿçççÿåååÿãääÿâââÿààáÿÞÞßÿÜÜÛÿÙØØÿÕÕÕÿÑÑÑÿÎÎÎÿÊÊÊÿÆÆÇÿÂÂÃÿ¾¾¿ÿºººÿ½½¾ÿéééÿÛÛÛÿÛÛÛÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ð@@@J¨¨¨¡¡¡   ššš›››¨¨¨uuuÑÑÑÆÆÆ9`ëêëÿçççüéééÿéééÿéééÿèééÿéééÿéééÿèééÿéééÿééèÿéééÿéééÿéééÿèèéÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèééÿéééÿééèÿéééÿéééÿéééÿéèéÿéééÿèééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèéèÿéééÿéééÿèééÿééèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèéÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿééèÿèééÿéééÿéééÿéééÿéééÿéééÿéééÿèééÿéééÿéééÿéééÿéééÿéééÿééèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéèéÿèééÿéééÿéééÿéééÿéééÿèééÿéééÿèèèÿéééÿèèèÿçèèÿçççÿçççÿæææÿäääÿäääÿâââÿàààÿÝÝÝÿÛÛÛÿØØØÿÔÔÕÿÑÑÑÿÎÎÎÿÉÊÊÿÅÅÆÿÁÁÁÿ½½¾ÿ¹¸¹ÿÃÃÃÿçççÿÙÙÙÿÙÙÙÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ðAAAI®®¬§§§£££›››¨¨¨uuuÑÑÑÆÆÆ9`ëêêÿçççüééèÿéééÿéééÿéééÿéééÿéèéÿéééÿééèÿéééÿéééÿèééÿéééÿéééÿèééÿéééÿééèÿéééÿéééÿèéèÿéèéÿéééÿéééÿéééÿéèéÿééèÿéééÿèééÿéèéÿéééÿéèéÿéééÿéééÿéééÿéééÿééèÿéèéÿéééÿééèÿéééÿéééÿèééÿèééÿéééÿéèéÿéééÿéééÿéééÿéééÿéééÿéééÿééèÿèééÿééèÿéééÿéééÿéééÿéééÿéééÿéèèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéèéÿééèÿéééÿéééÿéééÿéééÿéééÿéééÿèééÿèéèÿéééÿèéèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèééÿéééÿéééÿééèÿéééÿéèéÿééèÿéééÿéééÿéééÿééèÿéééÿéééÿéééÿéèèÿéééÿèèèÿèçèÿççèÿçççÿåææÿäääÿäääÿáááÿßààÿÝÝÜÿÚÚÚÿØ×ØÿÔÔÔÿÑÑÑÿÌÌÌÿÈÈÉÿÄÄÄÿÀÀÀÿ½½½ÿ··¸ÿÈÈÈÿåååÿØØØÿ×××ÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ðAAAI³¢¢¯££¡»»»rrrÑÑÑÆÆÆ9`ëêêÿççæüéééÿèéèÿéééÿèéèÿéééÿééèÿéèèÿèéèÿéééÿéééÿéééÿèèéÿéèéÿéèéÿéééÿèééÿèèéÿéèéÿéééÿéééÿèéèÿéééÿééèÿéééÿéééÿééèÿééèÿèééÿééèÿéèéÿéèèÿéééÿééèÿééèÿéééÿéééÿéééÿéééÿéééÿéééÿéèèÿéééÿèééÿéééÿéèéÿéèèÿéèéÿéééÿééèÿéééÿèééÿéèèÿéèèÿéééÿéééÿéééÿéèèÿéééÿéééÿéééÿééèÿéèéÿèééÿéèèÿèéèÿéééÿéèéÿéééÿééèÿéèèÿéééÿéééÿèééÿéééÿèèéÿéèéÿéééÿèéèÿéééÿèèéÿéééÿéèèÿééèÿèèéÿééèÿéèéÿéééÿéèéÿéééÿéééÿèéèÿéèéÿèééÿéèéÿéééÿéééÿèééÿéééÿèçèÿèèèÿèèèÿçççÿçççÿççæÿæççÿæååÿäääÿâãäÿáááÿßßÞÿÜÜÜÿÙÙÙÿ×ÖÖÿÓÓÔÿÐÏÐÿËÌÌÿÇÇÈÿÃÄÄÿÀÀÀÿ¼¼½ÿ¶¶·ÿÌÌÍÿáâáÿÖÖÖÿÖÖÖÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ðAAAI  ž¢¢£‘‘‘wwwÐÐÐÆÆÆ9`êêêÿçççüèéèÿèééÿéééÿéééÿéèèÿééèÿèééÿééèÿéééÿéééÿéèèÿéèèÿééèÿéèèÿèééÿéééÿéèéÿééèÿèééÿéèéÿéééÿééèÿéèéÿééèÿèééÿééèÿéèéÿéééÿèèéÿééèÿèééÿéééÿéèèÿéèéÿééèÿèèéÿèèèÿéèéÿéèèÿéèéÿèèéÿééèÿéééÿéééÿéèèÿèééÿéééÿèèéÿééèÿèéèÿèéèÿéééÿèééÿèèéÿèééÿéééÿèèèÿééèÿèééÿééèÿèééÿéèèÿéééÿèéèÿéèèÿéèèÿééèÿèééÿéééÿèééÿèééÿèéèÿééèÿéééÿèééÿèéèÿééèÿèèéÿèèèÿéééÿéèèÿééèÿèèéÿèéèÿéééÿèéèÿèééÿéèèÿéèèÿèééÿéééÿèèéÿééèÿéééÿèèéÿééèÿèéèÿééèÿèèèÿèèèÿèèèÿèçèÿçæçÿæççÿæææÿååäÿãääÿâââÿàááÿÞÞÞÿÜÜÜÿÙÙÚÿÖÖÖÿÒÓÓÿÎÎÏÿËÌËÿÇÇÈÿÃÃÄÿ¿¿¿ÿ¼¼¼ÿ´µµÿÐÐÑÿÞÞÝÿÕÕÕÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ðAAAI›››ƒƒ„ŸŸŸ‰‰‰ÔÔÔÇÇÇ9`êêêÿççæüèèéÿèèèÿèèèÿèèéÿéèèÿéèèÿèèèÿéééÿéèèÿééèÿèéèÿèéèÿèéèÿéééÿèèèÿééèÿèééÿèèèÿéèèÿéèèÿèééÿèèèÿèèéÿèéèÿèèèÿéèéÿèéèÿéèéÿèéèÿéèèÿééèÿèèèÿèéèÿééèÿéééÿèèéÿèéèÿèéèÿèèéÿééèÿéééÿéèéÿéèèÿéééÿéééÿéééÿèééÿééèÿèèéÿèèéÿèèéÿèééÿéèèÿèèèÿéééÿèéèÿéééÿèèéÿèèèÿéèèÿéèéÿèèéÿèèèÿéèèÿèééÿéééÿèèèÿèèèÿéèèÿèéèÿèéèÿèèèÿèéèÿéèèÿèèéÿèèéÿèèéÿéèèÿèèéÿèééÿèèéÿèééÿéèèÿèééÿèèéÿèééÿèèéÿééèÿèéèÿéèèÿèééÿééèÿèééÿéééÿèéèÿèèéÿèèéÿééèÿçèçÿéééÿçççÿççèÿçççÿçççÿæææÿäåäÿãääÿâââÿàààÿÞÞÝÿÛÛÛÿØÙÙÿÕÕÕÿÒÒÒÿÎÎÏÿÊÉËÿÆÇÆÿÃÃÃÿ¿¾¿ÿ»»¼ÿ´´µÿÓÓÔÿÙÙÙÿÔÔÔÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ðAAAHŠŠŠ¡¡¡‹‹‹ÿÿÿ¸¸¸9`éêêÿççæüèèèÿèéèÿèéèÿèèéÿéèéÿèéèÿèèèÿéèèÿèééÿèèèÿéééÿèèéÿééèÿèèèÿèééÿèèéÿééèÿèèèÿéèéÿèéèÿéèèÿéèèÿèééÿèèéÿèèéÿèèèÿèèèÿéèéÿéèèÿèéèÿèèèÿéèéÿèèèÿéééÿèéèÿèèéÿèééÿèééÿééèÿéèéÿéèèÿèèèÿèééÿèèéÿèéèÿèèéÿèèèÿééèÿéèèÿééèÿèèèÿèéèÿèééÿèèéÿèéèÿèèèÿèèèÿèéèÿèèéÿèèèÿèèèÿèéèÿèéèÿéééÿèèéÿéèèÿèééÿéèéÿèéèÿèèéÿèéèÿéèéÿéééÿèèèÿéèèÿèééÿéèèÿéèèÿéèèÿèèèÿèéèÿééèÿéèèÿéèèÿèéèÿèèèÿèèèÿèèèÿèèèÿéèéÿèèèÿéèéÿéèèÿéèèÿéèèÿèéèÿèééÿèèèÿçèçÿèéèÿèèçÿèççÿçççÿæææÿåååÿäääÿãããÿââáÿßßßÿÝÜÝÿÚÚÛÿ×רÿÔÕÕÿÑÐÒÿÎÎÍÿÊÉÊÿÆÅÆÿÁÁÃÿ¾¾¾ÿ»»¼ÿ´´µÿÙÙÙÿÖÖÖÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÇÇÇþ¾¾¾ðAAAH¨¨¨¦¦¦xxx‹‹‹ÿÿÿ9999`êêêÿçæçüèèèÿèèèÿèèèÿéèèÿèéèÿèéèÿéééÿèèèÿèèèÿèèèÿèèéÿèéèÿèèéÿéèèÿèéèÿèèéÿèéèÿéèéÿéèèÿèèéÿéééÿéèèÿéèèÿèèèÿèèèÿèèèÿèèéÿèèèÿéèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèééÿéèèÿèèéÿèèèÿèèèÿèèèÿèèéÿéèèÿèèèÿèèéÿèèèÿéèèÿèèèÿééèÿèèéÿèèèÿèèéÿéèèÿèèèÿèèèÿéèéÿèèèÿéèéÿèèèÿèèéÿéééÿèéèÿèèèÿèéèÿèèèÿèéèÿéèèÿèèèÿèèéÿééèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèéÿèèèÿèèèÿèééÿèèéÿééèÿéèèÿèèéÿéèéÿèéèÿéèéÿèèèÿéèèÿèèèÿèèèÿèèéÿéèéÿèèèÿèéèÿèééÿèèéÿèèèÿéééÿçèèÿèèèÿèèèÿçççÿææçÿçççÿçæçÿåååÿäããÿââãÿààáÿàßßÿÝÝÝÿÙÚÙÿ×××ÿÔÕÕÿÐÐÐÿÌÌÍÿÈÉÉÿÅÅÆÿÁÁÁÿ¾¾¿ÿ»»»ÿµµµÿßßßÿÒÒÒÿÐÐÐÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþ¿¿¿ñCCCInnnvvvÉÉÉÿÿÿ7779`êêêÿæçæüèèèÿèèèÿèèèÿèéèÿèèèÿèèéÿèèèÿèèèÿèèéÿèèèÿèèèÿèèèÿèèèÿèèéÿèèèÿèééÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèèÿèèèÿèèèÿèéèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèèÿéèèÿéèèÿèèèÿèèèÿèééÿéèèÿèèéÿèèèÿèéèÿèèèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèèÿèèèÿèèèÿèèèÿéèèÿéèèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèèÿèèèÿèéèÿèéèÿèèèÿèèèÿèèèÿéèèÿèéèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèéÿèèèÿèééÿèèéÿèèèÿèèéÿèèèÿèèèÿééèÿèèèÿéèèÿéèèÿèèéÿéèèÿçççÿèèèÿçççÿçççÿæææÿçæçÿæææÿåääÿäääÿâââÿààáÿÞÞÞÿÜÜÝÿÙÙÙÿÖÖÖÿÓÓÓÿÏÏÐÿÌÌÌÿÈÈÉÿÄÄÅÿÁÁÁÿ½¼½ÿºº»ÿ¶¶·ÿâââÿÎÎÎÿÎÎÎÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþ¿¿¿ðDDDH{{{ÿÿÿ···9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿéèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèéèÿèéèÿèèèÿèèèÿèèèÿèèèÿèéèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèèÿèèèÿèèèÿèèèÿéèèÿèèèÿèéèÿèèèÿèèèÿèèèÿèéèÿèèèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèéèÿèèèÿèèèÿéèèÿèèèÿèèèÿèèèÿèèèÿéèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèéèÿèèèÿèèèÿèèèÿèéèÿèèèÿééèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèèÿèèèÿèéèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèéÿçççÿéèèÿçççÿçççÿæææÿçççÿæææÿäääÿãããÿááâÿàààÿÝÞÞÿÛÜÜÿÙÙÚÿÕÕÕÿÒÒÓÿÎÎÏÿËËÌÿÈÈÈÿÃÃÄÿÀÀÀÿ½½½ÿ»»»ÿ¹¹¹ÿáááÿÌÌÌÿÍÍÍÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþ¿¿¿ðDDDH ÄÄÄÿÿÿ7779`êéêÿæçæüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèéèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿéèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèéèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèéèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿèèèÿçççÿæææÿçççÿæææÿåååÿäääÿãããÿáááÿßßàÿÝÝÝÿÚÚÛÿØØ×ÿÔÔÕÿÒÒÑÿÎÎÎÿËËÊÿÆÆÆÿÃÃÄÿ¿¿Àÿ¼¼½ÿ¸¸¸ÿÄÄÅÿÜÜÝÿËËËÿËËËÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþ¿¿¿ðDDDH ¼¼¼9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿçççÿçççÿæææÿçççÿæææÿåååÿããäÿâââÿààáÿßßßÿÜÝÝÿÙÙÙÿ×××ÿÔÔÔÿÑÑÑÿÍÌÎÿÉÉËÿÆÆÇÿÂÂÃÿÀÀÀÿ¼¼½ÿ¶¶¶ÿÏÏÏÿÖÖÖÿÊÊÊÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþ¿¿¿ñEEEH CCC9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿçççÿçççÿæææÿçççÿåååÿäääÿãããÿâââÿáááÿÞÞÞÿÜÜÜÿÙÙÚÿ×××ÿÓÓÔÿÐÐÐÿÍÍÍÿÉÉÊÿÆÆÆÿÂÂÃÿ¿¿¿ÿ½½½ÿ¶¶¶ÿØØØÿÍÍÍÿÊÊÊÿÈÈÈÿÇÇÇÿÆÆÆþ¿¿¿ñFFFH 9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿèèèÿçççÿæææÿçççÿæææÿåååÿäääÿãããÿáááÿàààÿÝÝÞÿÜÜÜÿÙÙÙÿÖÖÖÿÓÓÓÿÏÏÏÿÌÌÌÿÈÈÉÿÅÅÅÿÁÁÂÿ¿¿¿ÿ¼¼¾ÿ¸¸¹ÿàààÿÈÈÈÿÉÉÉÿÇÇÇÿÆÆÆþ¿¿¿ñFFFJ 9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿçççÿçççÿæææÿæææÿæææÿåååÿäääÿâââÿáááÿßßßÿÝÝÝÿÛÛÛÿØØÙÿÖÖÖÿÒÒÒÿÎÎÏÿËËËÿÈÈÈÿÅÅÅÿÁÁÂÿÀÀÀÿ½½¾ÿÀÀÀÿßßßÿÅÅÅÿÇÇÇÿÆÆÆþ¿¿¿ñMMMI9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿèèèÿçççÿçççÿæææÿçççÿåååÿäääÿäääÿâââÿàààÿÞÞßÿÜÜÝÿÚÚÛÿ×רÿÕÕÖÿÒÒÒÿÎÎÏÿËËËÿÈÈÈÿÅÅÅÿÁÁÃÿ¿¿Àÿ¹¹ºÿÕÕÕÿÑÑÐÿÇÇÇÿÆÆÆþÁÁÁò[[[C 9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿèèèÿçççÿæææÿæææÿæææÿæææÿäääÿãããÿâââÿàààÿÞÞßÿÜÜÝÿÚÚÚÿ×××ÿÔÔÕÿÒÒÑÿÎÎÎÿËËËÿÈÈÈÿÅÅÆÿÂÂÂÿÀÀÁÿºº»ÿßßßÿÆÆÆÿÆÆÆþÂÂÂò€€€; 9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿçççÿçççÿæææÿçççÿææçÿåååÿäääÿãããÿáááÿàààÿÞÞÞÿÜÜÛÿÙÙÙÿ×××ÿÔÔÔÿÑÑÑÿÍÍÎÿËËËÿÈÈÈÿÄÄÅÿÂÂÃÿ¿¿¿ÿÈÈÈÿØØØÿÃÃÃþÄÄÄó®®®9zzz9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿèèèÿçççÿçççÿæææÿæææÿæææÿåååÿãããÿãããÿáááÿàààÿÞÞÞÿÛÛÛÿÙÙÙÿÖÖÖÿÔÔÔÿÐÐÐÿÍÍÎÿËËËÿÈÈÉÿÅÅÅÿÃÃÄÿ½½½þÞÞÞþÆÆÆýÅÅÅóÏÏÏ<ììì§§§9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿèèèÿçççÿçççÿæææÿçççÿåååÿäääÿãããÿââãÿàààÿààßÿÝÝÝÿÛÛÛÿÙÙÙÿÕÕÕÿÓÓÔÿÑÑÐÿÍÍÎÿËËÊÿÇÇÈÿÆÆÆÿ¾¾¿ÿÓÓÔüÔÔÔüÀÀÀÿËËËQÿÿÿÍÍÍ9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿèèèÿçççÿæææÿæææÿæææÿåååÿäääÿäääÿâââÿààáÿßßßÿÝÝÝÿÛÛÚÿÙÙÙÿÖÖ×ÿÔÔÔÿÐÐÐÿÍÍÎÿËËÌÿÉÉÉÿÂÂÃþÊÊËùÜÜÜû¿¿¿ÿÍÍÎTÿÿÿÑÑÒèèèèèè9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿçççÿçççÿççæÿæææÿæææÿæææÿäääÿãããÿâââÿáááÿßßßÿÜÜÜÿÚÚÚÿÙÙØÿ×××ÿÔÔÔÿÐÐÐÿÎÎÎÿËËÌÿÅÅÅüÓÓÓõÝÝÝüÄÄÄóÜÜÜ@íííÕÕÕçççèèèèèè9`êêêÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèçÿçççÿèèèÿçççÿçççÿçççÿçççÿæææÿæææÿäääÿãããÿâââÿàààÿßßßÿÝÝÝÿÚÚÚÿØØØÿÖÖÖÿÔÔÔÿÑÑÒýÎÎÎöÍÍÍëÞÞßõÖÖÖÿÃÃÃÙÝÝÝ,ÝÝÝÖÖÖèèèèèè9^éééþæææ÷èèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúèèèúçççúçççúèèèúçççúçççúæææúæææúæææúåååúäääúãããúâââúàààúÞÞÞúÜÜÝúÚÚÚûÙÙÙú×רöÔÔÕìÓÓÓÜÒÒÒåÕÕÕõÉÉÉÕÇÇÇbÿÿÿ®®®èèèèèè6\éééÿæææüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿèèèÿçççÿçççÿçççÿçççÿæææÿåååÿäääÿääåÿãããÿáááÿàààÿÞÞÞÿÝÝÜÿÚÚÛúØØÙãÕÕÕ¹ÑÑÑ™ÏÏÏkÍÍÎ,ÿÿÿ¹¹¹èèè&"999^^^ttu€€€ ‰‰‹‡‡ˆqqo©©© îîîçççèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèçççééé¾¾¾ÞÞÞåååÝÝÝãããáááãããâââääääääÞÞÞÞÞÞáááßßßÖÖÖÍÍÍÌÌÌÕÕÖââáãããØØØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(€ "####################################################################################### 999???gaaaŽ\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]UUUz(222œœœµµµ³ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää-———“““³³³³ÿÿÿÿýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýÿÿÿþâââã.‘‘‘•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿýýýÿüüüÿûûûÿúúúÿùùùÿøøøÿøøøÿ÷÷÷ÿöööÿöööÿöööÿöööÿö÷÷ÿ÷÷÷ÿøøøÿùùùÿúúúÿûûûÿüüüÿýýýÿýýýÿþþþÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿþÿÿÿÿÿÿþþþÿþþþÿýýýÿüûüÿúúúÿøøøÿöööÿôôôÿòòòÿïððÿîîîÿìììÿëëëÿéêéÿéééÿéééÿéèèÿéééÿéééÿêêêÿëëëÿìììÿîïîÿðððÿòòòÿõõõÿ÷÷÷ÿùùùÿûûûÿüüüÿýýýÿþþþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµµ´ÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿþþþÿýýýÿüüüÿúûûÿùùùÿø÷øÿ÷÷øÿ÷ø÷ÿøøøÿúùúÿúúúÿúúùÿùùùÿø÷÷ÿöõõÿòóóÿððïÿìììÿèèèÿäååÿáááÿÞÞÞÿÛÛÜÿÙÙÙÿ×××ÿÖÖÖÿÕÕÕÿÕÕÔÿÔÔÔÿÔÕÕÿÕÕÕÿÖÖÖÿØØØÿÚÚÚÿÜÜÜÿßßßÿãââÿæææÿêêêÿîîîÿñòñÿõõõÿøøøÿûûûÿüüýÿýþýÿþþþÿÿÿþÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääää.“““•••µµ´´ÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿþÿÿÿþþÿÿÿþÿþþþÿþÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿþÿÿÿÿÿÿþÿÿþÿÿÿþýýÿûûûÿøøøÿôôôÿïïïÿìììÿëëëÿëêêÿìììÿîîîÿïïïÿïïïÿííîÿëëëÿèèèÿãããÿÞÞÞÿÙÙÙÿÔÔÔÿÏÐÏÿËËËÿÇÇÇÿÃÃÄÿÀÀÁÿ¾¾¿ÿ½½¾ÿ¼¼½ÿ¼¼½ÿ¼¼¾ÿ½½¾ÿ¾¾¿ÿÀÀÀÿÁÂÂÿÄÄÄÿÇÇÇÿÊÊÊÿÎÎÎÿÒÒÒÿ×××ÿÜÜÜÿâââÿèççÿíííÿòòòÿöööÿùùùÿüüüÿýýýÿþþþÿþÿÿÿÿþÿÿþÿþÿÿþÿÿþþþÿÿÿÿÿþÿþÿþÿÿÿÿþÿÿÿþÿÿÿþÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿÿÿþÿÿþþÿÿÿÿÿÿäãää.’’“•••´´´´ÿÿÿÿþþþþþþÿÿþþþÿþþÿÿþþÿÿþþþÿÿþÿÿÿþþÿþþÿÿÿþþÿþþÿÿÿþþÿÿÿÿÿÿÿþÿþþþÿüüüÿøøùÿòóóÿëëêÿâââÿÜÜÜÿØØØÿØØ×ÿÙÙÙÿÛÛÛÿÝÝÝÿÝÝÝÿÜÛÛÿØØØÿÓÓÓÿÌÌÍÿÄÅÅÿ¼¼¾ÿ´´·ÿ¬¬°ÿ¥¥«ÿŸŸ§ÿ››£ÿ˜˜£ÿ——¢ÿ–—¢ÿ––¢ÿ——¢ÿ˜˜£ÿ™™¤ÿšš¤ÿ¦ÿ  ¨ÿ¥¥«ÿ©©®ÿ¯¯²ÿ´´¶ÿºº»ÿÀÀÀÿÆÆÆÿÍÍÍÿÔÔÔÿÛÛÛÿãããÿêêêÿðñðÿõõõÿùùùÿüüüÿýýýÿþþþÿþÿþÿÿþÿÿÿþþÿÿÿþÿþþÿÿþþþÿþÿÿÿþÿþÿþÿþÿÿþþÿþþþÿþÿþÿÿþþÿþþÿÿÿÿÿÿÿþþÿþþþÿþþÿÿþÿþÿþÿþÿÿÿÿÿãããä.“’’•••´´´´ÿÿÿÿþþþþþþþÿþþþÿþþþÿþþþÿÿþþÿþÿþÿþþþÿþþþÿþÿþÿþþþÿþþþÿþþþÿþþþÿþþþÿûûûÿóóôÿèèéÿÚÚÜÿÌÌÎÿÃÃÄÿ¿¿¿ÿ½½¾ÿ¿¿ÀÿÃÃÃÿÅÅÅÿÄÄÅÿÁÁÂÿºº½ÿ±±µÿ¥¥«ÿ™™£ÿœÿ‰‰›ÿ……›ÿœÿ||›ÿxx™ÿrr“ÿnnÿllŽÿmmÿmmÿnnÿqq’ÿvv—ÿ}}ÿƒƒ¡ÿˆˆ£ÿŒŒ£ÿ ÿ’’Ÿÿ˜˜¡ÿ¡¡§ÿªª®ÿ³³´ÿ¼¼½ÿÅÅÅÿÎÎÎÿØØØÿáááÿêêêÿððñÿöööÿúúúÿýüýÿýýýÿþþþÿþþþÿþþþÿÿþÿÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþÿþÿþþþÿþþþÿÿÿþÿþþþÿþþþÿþþþÿÿþþÿÿÿÿÿãããä.’’“•••´´´´ÿÿÿÿþþþþþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿýýýÿøøøÿééëÿÑÑ×ÿ¹¹Åÿ¥¥³ÿ˜˜¤ÿ••žÿ––ÿ™™žÿ¢ÿŸŸ¤ÿ£ÿ––Ÿÿ™ÿ……˜ÿ}}˜ÿppÿ^^€ÿGGeÿ00Iÿ 3ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿ!!4ÿ44MÿNNkÿgg‰ÿ{{›ÿ††Ÿÿ‹‹œÿ’’œÿ£ÿ©©¬ÿµµ¶ÿÁÁÁÿÌÌÌÿØØØÿãããÿìììÿóóóÿøøøÿûûûÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿãããä.’’’•••´´´´ÿÿÿÿþþýþþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿýýýÿóóõÿ××Þÿ³´Çÿjjÿ[[vÿhh‰ÿooÿrrÿttÿvvÿwwŽÿuuŽÿppÿ^]€ÿ??\ÿ1ÿÿÿÿÿÿÿ ÿÿ#ÿ+ÿ1ÿ1ÿ1ÿ0ÿ&ÿ ÿ ÿÿÿÿÿ ÿ''=ÿPPoÿrr”ÿ‚‚›ÿ‰‰—ÿ••ÿ¤¤¨ÿ²²´ÿÁÁÁÿÏÏÏÿÜÜÜÿçççÿðððÿöö÷ÿúúúÿüüüÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿãããä.’’’•••´´´´ÿÿÿÿþýýþþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿýýýÿííðÿÈÈÖÿggÿÿÿÿ ÿ)ÿ$$;ÿ00Kÿ22Nÿ//Kÿ$ÿÿÿÿ ÿÿÿ $ÿ;ÿ$%Sÿ')]ÿ)*cÿ./qÿ&'aÿ23yÿ12vÿ12wÿ01vÿ56€ÿ23yÿ45yÿ24tÿ--dÿ Gÿ&ÿÿÿÿÿ++@ÿ__ÿ{{˜ÿ„„“ÿ”“›ÿ¥¥©ÿ···ÿÇÇÇÿÖÖÖÿãããÿîîîÿõõõÿúúúÿüüüÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿãããä.’’’”••´´´´ÿÿÿÿýýýþþþþÿþþýÿþþþÿþþþÿþþýÿþþþÿþþþÿþþþÿþþýÿýýþÿþþýÿþþþÿýþþÿýüüÿèèìÿ»»ÎÿBCiÿ:ÿÿ ÿ ÿÿÿÿÿÿ ÿ ÿÿ ÿ ÿ:ÿ$%Tÿ"#Sÿ!Sÿ#$Wÿ45hÿLLÿcc’ÿppšÿ}}§ÿƒƒªÿƒƒ«ÿ~~¨ÿtt ÿiišÿWWŽÿGH†ÿ;<ÿ56€ÿ89„ÿ9:€ÿ'(Yÿ$ÿÿÿÿ/ÿ[[}ÿyy”ÿ……‘ÿ™™Ÿÿ­­¯ÿÀÀÁÿÒÑÒÿàààÿìììÿõõõÿúùùÿüüüÿýýýÿþýþÿþýýÿþþþÿþþþÿýþýÿþþþÿþýýÿþþþÿþþþÿþþþÿþþþÿþýþÿýþþÿþþþÿÿÿÿÿãâãä.’’’”””³´´´ÿÿÿÿýýýþþþýÿþþþÿýýýÿýýýÿýýýÿýýýÿþýýÿýýýÿýþýÿýýýÿýþþÿýýýÿýþýÿüüüÿãäéÿ±±Çÿ@@jÿ=ÿ=ÿÿ ÿ ÿ ÿ ÿ ÿ ÿÿ ÿ $ÿ@ÿEÿGÿBÿ12aÿ__Œÿˆˆ¬ÿ££¿ÿ´´Éÿ¿¿ÑÿÇÇ×ÿÌÌÚÿÎÎÜÿÏÏÜÿÍÍÛÿÊÊÙÿÃÃÔÿººÏÿ®­Æÿ››ºÿ€€ªÿ__—ÿ?@„ÿ67‚ÿ=?‹ÿ45tÿ.ÿÿÿÿ''>ÿhh‹ÿ{zÿ—ÿ¦¦©ÿ¼»¼ÿÏÏÏÿàßàÿìììÿõõõÿúúúÿüüüÿýýýÿýþþÿþýýÿýýþÿýýþÿþþýÿýýýÿýýþÿýþýÿýýýÿýþýÿþýþÿþýýÿþýýÿÿÿÿÿâââä.’’’”””´³´´ÿÿÿÿýýýþýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿúûúÿááçÿ­­Äÿ>?iÿ;ÿBÿ4ÿÿ ÿ ÿ ÿÿ ÿ !ÿ4ÿ3ÿ=ÿ4ÿ12]ÿrr™ÿ  ½ÿ¹ºÌÿÍÍÚÿÜÜåÿççíÿîîóÿòòöÿöõøÿööùÿööùÿööøÿôô÷ÿñðôÿìëñÿääìÿÚÚåÿÍÍÜÿ»»Îÿ¡ ¾ÿww¦ÿHIŒÿ56ÿ>?‹ÿ01nÿÿÿÿ ÿLMmÿuuÿ‡‡‘ÿ¢¢¦ÿºº»ÿÎÏÎÿàààÿíííÿöööÿúúúÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿþþýÿýýýÿýýýÿýýýÿýýýÿýýýÿÿÿÿÿâââä.’’’”””³³³´ÿÿÿÿýýýþýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿùùùÿÝÝãÿ©©Áÿ9:aÿ=ÿ?ÿDÿ ÿÿÿÿÿ "ÿ %ÿ5ÿ/ÿ5ÿccÿžžºÿ½½ÎÿÖÖàÿééîÿôóöÿùùúÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿþýýÿýýýÿýýýÿýýýÿüüüÿùùûÿôô÷ÿêëðÿÛÛæÿÅÅÖÿ¦¦Áÿrs¤ÿ<=„ÿ78ÿ>?‰ÿ9ÿÿ ÿÿ22MÿppŽÿƒƒŽÿ¡ ¤ÿºº»ÿÑÑÑÿâââÿïïïÿ÷÷÷ÿûûûÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿÿÿÿÿâââä.’’’”””³³³´ÿÿÿÿüüýþýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿûûüÿöööÿ××Þÿ¡¡¼ÿ,-Qÿ )ÿ-ÿ/ÿÿÿÿ "ÿ "ÿ ÿ "ÿ ÿ*+Pÿ††ªÿ±±ÄÿÑÑÛÿééíÿõõöÿûûûÿüüüÿüüüÿüýüÿüüüÿüüýÿüýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿøøúÿïïóÿÜÜæÿ¿¾Ñÿ’’´ÿMNÿ34yÿ>?‰ÿ#$Tÿÿÿÿ$$9ÿmmÿƒƒÿ££§ÿ¾¾¿ÿÕÕÔÿæææÿòòñÿùùùÿüüüÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿýýýÿÿþþÿâââä.’‘’”””³³³´ÿÿÿÿüüüþýýýÿýýýÿýýýÿýüýÿýýýÿýüýÿýýýÿýýýÿýýýÿýýýÿýýýÿüüüÿûúûÿññòÿÌÌÕÿ””³ÿ>ÿ2ÿ1ÿ4ÿÿÿÿ "ÿ !ÿ $ÿÿ66Xÿ••µÿ»»ÊÿÞÞäÿððòÿùøùÿûûûÿûûûÿúúúÿúúúÿùúúÿúúúÿúúúÿûûûÿûûûÿüüüÿüüüÿýýýÿüýüÿýýýÿýýýÿýýýÿýýýÿýüýÿýýýÿûûüÿööøÿééïÿÌÌÜÿ¡¢¾ÿVV“ÿ34zÿ<=…ÿ+,eÿÿ ÿÿ##8ÿooÿ‡‡’ÿ©©¬ÿÅÅÅÿÚÚÚÿêêêÿôõõÿúúúÿüüüÿýýýÿüýýÿüýýÿýýýÿüüýÿýýýÿýýýÿýýýÿýýýÿüýýÿýýýÿþþþÿâââä.‘‘‘”””³³³´ÿÿÿÿüüüþüüüÿüüüÿýüüÿýýüÿýüýÿýüüÿýýüÿýüýÿüüüÿüýüÿýýýÿüüüÿùùùÿêêìÿ½½Êÿ{{Ÿÿ #ÿ-ÿ ,ÿ +ÿÿÿÿÿ %ÿÿ<<_ÿšš¸ÿÁÁÎÿããçÿóóôÿùùùÿúúúÿøøøÿöööÿóóóÿðññÿððïÿðððÿòñòÿôóóÿöö÷ÿùùøÿûûûÿûûüÿüüüÿüýüÿüýýÿýüüÿüýüÿüüýÿüüüÿüýüÿüüýÿùùúÿîîòÿÒÒßÿ¥¥ÀÿTU“ÿ34yÿ78}ÿ'(]ÿÿ ÿÿ//HÿssŽÿ‘™ÿ³³µÿÎÎÎÿáâáÿïïïÿøø÷ÿûûüÿüüüÿüýýÿýüüÿüüýÿüüüÿýüüÿýýüÿüüýÿüüüÿýüüÿüýüÿþþþÿâáâä.‘‘‘”””³³³´ÿÿÿÿüüüþüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿö÷÷ÿßßäÿ®®ÃÿGGgÿ ÿÿÿ !ÿÿÿÿÿÿ44Vÿ——µÿÁÁÍÿääèÿôôõÿøøøÿøøøÿöööÿñññÿìììÿæææÿâââÿàààÿàààÿãããÿçççÿíííÿòòòÿöööÿúùúÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿúùúÿïïóÿÐÐÞÿ»ÿBCƒÿ24uÿ67|ÿBÿÿÿÿGGgÿzzÿžž¤ÿ¿¿ÀÿØØØÿéééÿôôôÿúúúÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿþþþÿáááä.‘‘‘”””³³³´ÿÿÿÿüüüþüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿûûûÿòóóÿÐÐØÿ››¹ÿ1ÿÿÿÿÿÿÿÿÿ9ÿ°ÿ¼¼ÈÿââæÿóóôÿøøøÿøøøÿõõôÿîîîÿæææÿÝÝÝÿÔÔÔÿÍÍÍÿÊÊÊÿÊÊÊÿÎÏÎÿÕÕÕÿÞÞÞÿçççÿïïïÿõõõÿùùùÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿùùúÿììñÿÇÇ×ÿ‰‰¯ÿ12tÿ12qÿ67}ÿ ÿÿ ÿ ÿdd‡ÿ‡‡“ÿ®®±ÿÍÍÍÿáááÿðððÿøøøÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿþþýÿáááä.‘‘‘““”²²³´ÿÿÿÿûûûþüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿúúûÿííïÿÂÂÏÿyy›ÿÿÿÿÿÿÿÿÿ ÿ~~¢ÿ°°¿ÿÛÜàÿñññÿøøøÿø÷øÿôôõÿíííÿáááÿÒÒÓÿÁÁÄÿ²²¶ÿ§§¬ÿ¤¤©ÿ¨¨«ÿ°°²ÿ¼¼¼ÿÉÉÉÿ×××ÿãããÿîîîÿõõõÿùùùÿûûûÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿüüüÿø÷ùÿääëÿ¶¶Ëÿab–ÿ+-mÿ//mÿ,-hÿÿ ÿÿ**@ÿwx‘ÿœœ£ÿÁÁÂÿÚÚÚÿêëëÿõõöÿûúúÿüüüÿüüüÿüüüÿüüüÿüüüÿüüûÿüüüÿüüüÿüüüÿüüüÿýýþÿáááä.‘‘‘“““²²²´ÿÿÿÿûûûþûûüÿüüüÿûûûÿüüüÿüüüÿüüûÿüûûÿüüûÿüüüÿüüüÿûûûÿùùùÿææêÿ··ÊÿRRvÿÿ #ÿÿÿÿÿÿ ÿ]]‚ÿ¢¡µÿÑÐ×ÿëëíÿ÷÷÷ÿùùùÿöööÿîîîÿßàáÿÈÈÍÿ¬¬µÿ——§ÿ‰‰Ÿÿ˜ÿ}}•ÿ€€’ÿˆ‰“ÿ›› ÿ¯¯°ÿÂÂÃÿÔÔÔÿããâÿîîîÿõöõÿúúúÿûûûÿüüüÿüüûÿüûûÿüûüÿüûüÿüüûÿûûüÿüüüÿûûûÿóóöÿÓÓßÿ™˜¸ÿ56vÿ/0nÿ12sÿ4ÿÿÿÿ^^ÿ‰‰•ÿ´´·ÿÒÒÒÿæååÿòòòÿùúùÿûûûÿüüüÿüûûÿüûûÿüûüÿûüüÿüüûÿüûûÿüûüÿüüüÿýýýÿáááä.‘‘‘“““²²²´ÿÿÿÿûûûþüûûÿûûûÿûûûÿüûûÿûûûÿûûûÿûûûÿûûûÿûüûÿûûûÿûûûÿøùùÿßÞäÿ­­Åÿ11Tÿ (ÿ -ÿ .ÿÿÿÿ ÿ,,IÿŽ«ÿ¿¿ÇÿââäÿóóóÿùùùÿùùùÿòòòÿããåÿÇÇÎÿ¢¢²ÿƒƒ¡ÿMMjÿ))?ÿ.ÿ""6ÿ::TÿddƒÿxxŒÿ—ÿ©ª¬ÿÁÁÂÿÖÖÖÿåååÿðððÿ÷÷÷ÿúúúÿûûûÿûûûÿûüûÿûûûÿûûüÿûûûÿûûûÿûûûÿûûûÿùùúÿèèíÿ¹¹Íÿ`a“ÿ'(dÿ*+cÿ()bÿÿÿÿ..Fÿ}}•ÿ¥¦«ÿÊÊËÿàààÿïïðÿøøøÿûûûÿûüûÿûüûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿýýýÿáááä.‘‘‘“““²²²´ÿÿÿÿûûûþûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿ÷÷÷ÿ××ßÿ¡¡½ÿEÿ2ÿ1ÿ3ÿÿÿÿ ÿggŒÿ££²ÿÓÓ×ÿëëìÿöööÿúúúÿ÷÷÷ÿêêìÿÏÏÖÿ¥¥¹ÿii‰ÿ ÿÿ ÿ ÿÿÿ ÿGGfÿttŒÿŽŽ—ÿ­­°ÿÇÇÇÿÛÛÛÿêééÿóóóÿùùùÿúûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿóóõÿÏÏÜÿŽŽ°ÿ+,hÿ-.kÿ./oÿ 'ÿ ÿÿÿmmŽÿ—— ÿÂÂÃÿÜÜÜÿìììÿö÷öÿûúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿýýýÿàààä.‘‘“““²²²´ÿÿÿÿúûúþûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿõõöÿÒÒÜÿ——¶ÿ8ÿ2ÿ1ÿ -ÿÿÿÿ/ÿ†‡¥ÿ¸¸ÀÿÞÞßÿðððÿøøøÿúúúÿõõõÿßßäÿµµÆÿllÿ ÿÿÿÿ ÿ ÿ ÿÿÿ>>\ÿxxÿ—–Ÿÿ··¹ÿÑÑÑÿãããÿïîïÿ÷÷÷ÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿøøùÿààçÿ««ÃÿEF}ÿ$%]ÿ'(`ÿLÿÿÿÿRQrÿŒŒšÿ¹¹¼ÿØØØÿéééÿõõõÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿàààä.“““²²²´ÿÿÿÿúúúþûûûÿúûûÿûûúÿûûûÿûûûÿûûûÿûûûÿûûûÿûúûÿûúûÿûûúÿõõöÿÐÐÚÿŽŽ¯ÿFÿGÿGÿ6ÿÿÿ ÿAAaÿ––ªÿÆÆËÿåååÿòòòÿùùùÿúúúÿññóÿÎÎØÿ™™·ÿ ÿÿÿÿÿ ÿ ÿ ÿÿÿÿMMmÿ„„—ÿ§§­ÿÆÆÇÿÛÛÛÿéééÿôôôÿùùùÿúúûÿûûûÿûûûÿûûúÿûúûÿúûûÿûúûÿûûúÿúúûÿúúúÿêêîÿ»»Íÿff“ÿ$%`ÿ*+eÿ'(bÿÿÿÿ11Lÿ„„šÿ±±µÿÔÔÔÿææçÿóóóÿùúúÿûûûÿúûûÿúúúÿûûûÿûúûÿûûûÿúûûÿûúúÿûúûÿüüüÿàààä.‘““’±²±´ÿÿÿÿúúúþúúúÿúúúÿúúúÿûúûÿúúûÿúúúÿúúúÿúúúÿûúúÿûúúÿúûûÿõõõÿÎÎÚÿ‰‰ªÿ>ÿEÿFÿ +ÿÿÿÿdd‡ÿ¡¡®ÿÐÐÓÿèèèÿôôôÿùúùÿúúúÿííðÿÆÆÕÿbb„ÿÿÿÿÿÿÿÿÿ8ÿ $ÿÿÿoo‘ÿ––¢ÿ»»¾ÿÔÔÕÿåääÿñññÿøøøÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûúúÿúúúÿúúúÿúúúÿïïñÿÄÄÒÿ~~¤ÿJÿIÿNÿÿÿ ÿ-ÿ}}˜ÿ©¨¯ÿÑÑÑÿåääÿòòòÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿûúúÿúúúÿúúúÿúúúÿüüüÿàààä.’’’±±±´ÿÿÿÿúúúþúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿõõöÿÐÐÛÿ¯ÿIÿIÿLÿ 'ÿÿÿ ÿyy™ÿªª´ÿÖÖ×ÿêêéÿõôõÿúùùÿúúúÿëëïÿÂÂÔÿIJrÿ>ÿ>ÿ6ÿÿÿÿÿÿ ,ÿ56}ÿ$$Xÿÿ22Jÿ¤ÿ¯¯µÿÎÎÎÿàààÿîîîÿ÷÷÷ÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúùÿððòÿÇÇÓÿ††©ÿGÿFÿJÿ ÿÿÿ ÿtt“ÿ¢¢«ÿÍÍÎÿãããÿñññÿùøøÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿüüüÿàßàä.’’’±±±´ÿÿÿÿúúúþúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿöö÷ÿÓÓÝÿ””´ÿFÿJÿMÿ!ÿÿÿ7ÿ‚‚žÿ²²¹ÿÙÙÙÿêêêÿõõõÿúúúÿúúúÿííðÿÆÆÖÿVV‚ÿPÿ&'`ÿ01tÿ56|ÿ:ÿ +ÿÿÿÿ&&Qÿ@A’ÿ4ÿ ÿzz›ÿ¤¤®ÿÈÈÉÿÝÝÝÿëëëÿöööÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿîîðÿÅÅÑÿ„„§ÿJÿHÿLÿ %ÿÿÿÿkkŒÿžž¨ÿÌÌÍÿâââÿðððÿøøøÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿüüüÿßßßä.’’’±±±´ÿÿÿÿúúúþúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿ÷÷øÿÙÙâÿŸŸ¼ÿ*+bÿ"#Yÿ$&`ÿ"ÿÿ ÿ-.Lÿ††žÿµµ»ÿÙÙÙÿêêêÿõõõÿùùùÿúúúÿññôÿÐÐÜÿ††­ÿ()nÿ89€ÿ9:„ÿ;<ˆÿ23wÿGÿ +ÿ!ÿÿ[[†ÿEFƒÿ()eÿÿUUtÿ­ÿÃÃÆÿÛÛÛÿêêêÿõõõÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿ÷÷÷ÿééìÿ½½Ëÿuušÿ 1ÿ;ÿ=ÿ!ÿÿÿ ÿdd…ÿœœ¨ÿËËÌÿâââÿðððÿøøøÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿüüüÿßßßä.’’’±±±´ÿÿÿÿúúúþúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿààçÿ­­Åÿ77lÿ"#Zÿ&'bÿ +ÿÿ ÿ99Xÿ††›ÿµµ¹ÿ×××ÿèèèÿôôôÿùùùÿúúúÿöö÷ÿááéÿ··Ëÿ[\›ÿ23€ÿ;<‡ÿ:;ˆÿ-.nÿ$%]ÿ?ÿÿEEjÿ{{£ÿee’ÿ,.qÿÿ33Mÿ˜˜®ÿ½½ÂÿÚÚÛÿéééÿõõõÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿõõõÿááåÿ²²Âÿ^^…ÿ+ÿ3ÿ4ÿÿÿÿ ÿaa‚ÿ››§ÿËËÌÿãããÿñññÿøøøÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿüüüÿßßßä.’’’±±±´ÿÿÿÿùúúþúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùúÿèèíÿ»»ÎÿRS„ÿ ![ÿ)*hÿ9ÿÿ ÿ::[ÿ„„˜ÿ°°´ÿÑÑÑÿäääÿñññÿøøøÿùùùÿùùùÿððóÿÖÖâÿ®®Åÿde ÿ56…ÿ45ƒÿ')jÿ !^ÿJÿVV|ÿ¥¥¿ÿ¥¥ºÿ……§ÿ*+bÿ 'ÿ2ÿ““®ÿ»»ÁÿÚÛÛÿêêêÿõõõÿùúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿ÷÷÷ÿðððÿÔÔÚÿ¢¢¹ÿ;;cÿ%ÿ +ÿ -ÿÿÿÿ ÿaa‚ÿœœ©ÿÌÌÎÿãäãÿñññÿùùøÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿüüüÿßßßä.’’’±±±´ÿÿÿÿùùùþúúúÿùúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿðïóÿÉÉ×ÿxy¢ÿ"#cÿ-.oÿRÿÿÿ43Rÿ~~•ÿ§§¬ÿÉÉÉÿÞÝÞÿìììÿõõõÿøøøÿùùùÿ÷÷øÿîîñÿØØãÿ»»Îÿ••¸ÿhhŸÿ^^“ÿll˜ÿ˜˜·ÿ¹¹ÌÿÊÊÔÿ½½Êÿ‘‘®ÿ-.aÿ .ÿ%ÿ‘‘­ÿ»»ÂÿÝÝÝÿëëìÿõööÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿùùùÿø÷÷ÿóóóÿææçÿÀÀÊÿ‹‹«ÿ6ÿ'ÿ ,ÿ 0ÿÿÿÿ ÿcc…ÿŸŸ«ÿÎÎÐÿåååÿñòñÿùùùÿúùúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿßßßä.’’’±±±´ÿÿÿÿùùùþùùùÿúúúÿúùùÿúúúÿùùùÿùùúÿùúùÿùúúÿúùúÿùúùÿùùùÿùùúÿõõöÿ××âÿžž»ÿ12sÿ+,lÿ()gÿÿÿ""<ÿxx“ÿš™¡ÿ¼¼½ÿÒÒÒÿãããÿïîîÿôôôÿ÷÷÷ÿøùøÿ÷÷øÿññôÿääëÿÔÔàÿÊÊØÿÆÅÕÿÉÉ×ÿÐÐÛÿÛÛáÿÛÛÞÿ¼¼Çÿ‹‹«ÿGÿ$ÿ(ÿ””°ÿ¿¿Æÿààáÿîîîÿö÷öÿùùùÿúúúÿúùùÿúúùÿúùúÿùùùÿøøøÿôôôÿìììÿÖÖÚÿ¨¨¸ÿbb‡ÿÿ$ÿ"ÿ(ÿÿÿÿÿii‹ÿ££®ÿÑÑÒÿçæçÿóóóÿøøùÿùùùÿùúùÿùùùÿùùùÿùúúÿùùùÿúùùÿúùùÿúúúÿûûûÿßßßä.’’’±±±´ÿÿÿÿùùùþùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿ÷øøÿææìÿ»»ÎÿZZÿ*+pÿ34|ÿ $ÿÿ ÿllÿŠŠ•ÿ¬¬­ÿÃÃÃÿÖÖÖÿãããÿëììÿñññÿôôôÿöööÿöö÷ÿôôõÿððòÿëëïÿèèìÿççêÿææèÿáââÿÑÑÔÿ©©¸ÿrs˜ÿ*ÿÿ##<ÿžž·ÿÉÉÎÿæææÿñññÿ÷÷÷ÿùùùÿùùùÿùùùÿùùùÿøøøÿ÷÷÷ÿôôôÿîîîÿßßáÿ½¼Åÿ«ÿ!!@ÿÿÿÿ!ÿÿÿÿÿss”ÿ©©³ÿÕÕÖÿéééÿôôôÿøùøÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿûûûÿßßßä.’’’°°°´ÿÿÿÿøøøþùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿððóÿÐÐÝÿ””µÿ/0vÿ45}ÿ#$]ÿ ÿ ÿNNrÿ{{ÿ™™Ÿÿ°°±ÿÃÃÃÿÒÒÒÿÝÝÝÿåååÿéééÿìììÿíîíÿîîîÿíííÿëëëÿèèèÿäääÿÜÜÜÿÐÐÑÿ·¶¿ÿ‘‘ªÿ=>aÿÿÿMMlÿ¬¬¾ÿÕÕÙÿëììÿôôôÿøøøÿùùùÿùùùÿùùùÿøøøÿ÷÷÷ÿóóôÿîîîÿáâãÿÈÈÎÿœœ®ÿ]]‚ÿÿÿÿÿÿÿÿÿ #ÿ~~œÿ°°¹ÿÚÚÚÿëëëÿõõõÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿûúûÿÞÞÞä.’’‘°°°´ÿÿÿÿøøøþùùùÿùùùÿùùùÿùùùÿøùùÿùùùÿùùùÿùùùÿùùùÿùùùÿùùùÿøùøÿùøùÿöö÷ÿääëÿººÍÿde›ÿ,-wÿ78ƒÿÿÿ&ÿoo”ÿ‚‚ÿœœ ÿ®®¯ÿ½½½ÿÉÉÉÿÒÒÒÿØØØÿÝÝÝÿßßßÿßßßÿÞÞÞÿÛÛÛÿ×××ÿÐÐÐÿÅÅÇÿ²²¹ÿ““¦ÿiiÿÿ!ÿÿ‰‰©ÿ½½Èÿââäÿðððÿöööÿøøøÿùùøÿøøøÿ÷÷÷ÿöööÿòòòÿìììÿááâÿÌÌÐÿ¥¥²ÿ||Ÿÿ*ÿÿÿÿÿÿÿÿÿ5ÿŠŠ¤ÿ¹¹ÀÿßßßÿíííÿöööÿøøøÿùùùÿøùùÿùùøÿùùùÿùùøÿøùøÿùùøÿùùùÿùùùÿúúúÿÞÞÞä.’‘’°°°´þþþÿøøøþøøøÿøøøÿøøøÿøøøÿøøùÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿððóÿÕÕàÿ¤¤¾ÿBCˆÿ56ÿ-.qÿÿ ÿ++Fÿut—ÿ‚‚ÿ––œÿ¦¥§ÿ±±²ÿ»»¼ÿÂÂÂÿÇÇÇÿÉÉÉÿÊËÊÿÉÉÉÿÅÅÆÿ¾¾Àÿ³³¸ÿ¡¡¬ÿŒŒ¢ÿll“ÿ ÿÿÿSSuÿ¬«¿ÿÔÕÚÿëììÿôôôÿ÷÷÷ÿø÷øÿ÷÷øÿöö÷ÿôôôÿððïÿéééÿÞÞÞÿËËÎÿ©©´ÿ……£ÿ++Kÿÿÿÿÿÿÿÿÿÿ11Pÿ••«ÿÄÄÉÿãããÿïïïÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøùÿøøøÿøøøÿúúúÿÞÞÞä.‘‘‘°°°´þþþÿøøøþøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿöö÷ÿêêîÿÈÈ×ÿ´ÿ56ÿ:;‰ÿ$$^ÿÿ ÿ''Aÿnn”ÿ}}’ÿ‰ˆ”ÿ––œÿ  ¤ÿ¨¨ªÿ®­¯ÿ°°²ÿ¯¯²ÿ¬«°ÿ¤¤«ÿ™™¤ÿ ÿŸÿPPuÿÿÿ)ÿ//Rÿ  »ÿÇÈÑÿææèÿòòòÿöööÿ÷÷÷ÿöööÿôôôÿñññÿìììÿåååÿÙÙÚÿÆÆÉÿ§§±ÿ††¡ÿ;;^ÿÿÿÿÿÿÿÿÿÿÿRRsÿ  °ÿÏÏÒÿçççÿòòòÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿúúúÿÞÞÞä.‘‘‘°°°´þþþÿ÷÷÷þøøøÿøøøÿøøøÿøøøÿ÷øøÿøøøÿøøøÿøøøÿø÷øÿøø÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿôóôÿääêÿ¿¿Ñÿ„„®ÿ67‡ÿ<=Œÿ'(dÿÿ ÿ ÿHHjÿpp“ÿ}}—ÿƒƒ–ÿˆˆ—ÿ‹‹˜ÿŒŒšÿŒŒœÿˆˆœÿ„„Ÿÿtu—ÿPPtÿ1ÿ ÿ$ÿ)ÿ#$Kÿ˜˜¶ÿÀÀÌÿâáåÿðððÿôôôÿõõõÿóôóÿðððÿìììÿæææÿÞÞÞÿÑÑÒÿ¾¾ÂÿŸŸ«ÿ‚‚žÿ==aÿÿÿÿÿÿ ÿ ÿÿÿÿÿss•ÿ®®¹ÿÙÙÛÿëìëÿôôôÿ÷÷÷ÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿøøøÿø÷øÿùùúÿÝÝÝä.‘‘‘¯°¯´ýýþÿ÷÷÷þ÷øøÿ÷ø÷ÿ÷÷÷ÿ÷÷÷ÿø÷÷ÿ÷øøÿ÷ø÷ÿ÷÷øÿ÷øøÿøøøÿ÷÷øÿ÷÷÷ÿ÷øøÿ÷øøÿ÷÷÷ÿ÷÷øÿññóÿààçÿ¼¼Îÿƒƒ¬ÿ9:Šÿ:;‹ÿ12xÿÿ ÿÿÿ**EÿGGiÿ[[ÿfg‹ÿeeˆÿWWzÿCCdÿ%%Aÿÿÿÿ8ÿ ;ÿ./Xÿ˜™¶ÿ½¾ËÿßßãÿîîïÿòòòÿòòñÿïïïÿëëëÿååæÿÞÞÞÿÕÕÕÿÆÆÈÿ±±·ÿ““¡ÿzzšÿ00Rÿÿÿÿÿÿ ÿ ÿÿÿÿÿ7ÿ«ÿ¿¿Æÿâââÿïïïÿõõõÿ÷÷÷ÿø÷øÿ÷÷÷ÿøøøÿøø÷ÿøø÷ÿ÷øøÿ÷÷øÿøø÷ÿ÷ø÷ÿ÷÷øÿùùùÿÝÝÝä.ŽŽ‘‘‘¯¯¯´ýýýÿ÷÷÷þ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷øÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöö÷ÿññòÿààçÿ¿¿ÑÿŽŽ²ÿEF‘ÿ56ˆÿ>?’ÿ#$\ÿ ÿ ÿÿÿ ÿÿ ÿ ÿÿ ÿ"ÿBÿJÿKÿPQ{ÿ¢¢½ÿÂÂÎÿßßäÿëìíÿïîïÿìììÿèééÿãããÿÝÝÜÿÔÔÔÿÇÇÉÿ··»ÿŸŸ©ÿ††›ÿiiÿ8ÿÿÿÿÿÿ!ÿ!ÿ"ÿÿÿÿÿLLoÿ¢¢´ÿÐÐÔÿéééÿòòòÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷ø÷ÿùùùÿÝÝÝä.ŽŽŽ‘‘¯¯¯´ýýýÿöööþ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöö÷ÿññóÿããéÿÇÈ×ÿ££½ÿfg¡ÿ:;Œÿ78ÿ=>“ÿ12yÿ!"Xÿ;ÿ/ÿ ,ÿ3ÿ@ÿPÿ#$aÿ _ÿ]ÿ:;nÿ‚‚¦ÿ°°ÅÿËËÕÿááäÿéêêÿêêêÿæææÿáááÿÚÚÙÿÐÐÐÿÅÅÆÿµµ¹ÿ¡¡ªÿ‹Ššÿyy—ÿGGkÿÿÿÿÿÿÿ!ÿ"ÿ"ÿ"ÿ ÿ ÿ!ÿ#ÿ‚‚£ÿ¶¶ÁÿÝÝßÿíííÿôôôÿöööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿøùùÿÝÜÝä.ŽŽŽ¯¯¯´üýýÿöööþ÷÷÷ÿ÷÷÷ÿ÷ööÿ÷÷÷ÿ÷ö÷ÿ÷ö÷ÿ÷ööÿö÷÷ÿ÷÷÷ÿ÷÷÷ÿöö÷ÿ÷÷÷ÿ÷ööÿ÷÷÷ÿ÷÷öÿ÷÷÷ÿ÷÷÷ÿöö÷ÿöööÿòóôÿèèíÿÔÔàÿººÍÿ——·ÿgg ÿBCÿ44…ÿ35ˆÿ/1ÿ78Œÿ()qÿ-.|ÿ'(rÿ%'jÿ45sÿTT†ÿ„„¨ÿ¬¬ÃÿÂÁÐÿ×ÖÞÿããæÿææçÿäääÿÞÞÞÿÖÖÖÿÌÌÍÿÀÀÂÿ°°µÿœœ¥ÿ‰‰™ÿzy•ÿYY~ÿ6ÿÿÿÿÿÿÿ"ÿ#ÿ#ÿ$ÿ!ÿ!ÿ"ÿÿ@@cÿ  µÿÍÍÒÿèèèÿñññÿõõõÿ÷ööÿ÷÷÷ÿ÷ö÷ÿ÷ööÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿ÷÷öÿ÷÷÷ÿ÷÷öÿö÷÷ÿ÷÷öÿøøøÿÝÜÜä.ŽŽŽ®®¯´üüüÿöööþöööÿöööÿöööÿöööÿöööÿöööÿöööÿ÷ööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿõõõÿïïñÿããêÿÒÑÝÿ¿¿Ðÿ©©Áÿ³ÿyy§ÿiižÿ_`˜ÿZ[ÿllžÿxx¡ÿ±ÿ¥¥¿ÿ¸¸ÊÿÆÆÓÿÕÕÝÿààãÿããäÿáááÿÛÛÛÿÓÓÓÿÈÈÉÿ»º½ÿ©ª¯ÿ•• ÿ……˜ÿtt“ÿRRvÿ=ÿÿÿÿÿÿÿÿ$ÿ#ÿ$ÿ#ÿ%ÿ$ÿ#ÿ"ÿ )ÿ†‡§ÿ¸¹Äÿßßáÿîîîÿóóóÿõõõÿ÷ööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿö÷öÿöö÷ÿøøøÿÜÜÜä.ŽŽŽ®®®´üüüÿööõþöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿôôõÿïïñÿççìÿÜÜåÿÒÒÞÿÉÉ×ÿÂÂÒÿ¿¿ÐÿÀÀÑÿÂÂÒÿÈÈÖÿÎÎÚÿ××ßÿÞÞãÿââåÿââãÿÞÞÞÿØØØÿÏÏÏÿÃÃÅÿµµ¸ÿ££ªÿœÿ€€—ÿkkÿBAdÿ,ÿÿÿÿÿÿÿÿ!ÿ%ÿ$ÿ%ÿ#ÿ1ÿ)ÿ$ÿ*ÿÿ[[ÿ¨¨»ÿÓÓØÿêêêÿòòòÿõõõÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿø÷øÿÜÜÜä.ŽŽŽ®®®´ûüüÿõõõþöõöÿöööÿöööÿöööÿöööÿöööÿöõöÿöööÿöööÿöööÿöööÿöööÿöööÿöööÿöõöÿöööÿöööÿöööÿöööÿöööÿöööÿööõÿöõöÿöööÿõõöÿóóôÿññóÿîîðÿëëîÿééíÿééíÿééìÿêêìÿééêÿççèÿãããÿÝÝÝÿÕÖÕÿËËÌÿ¾¾Àÿ¯¯´ÿ››¤ÿ‰‰™ÿz{•ÿ``„ÿ//Pÿ ÿÿÿÿÿÿÿÿÿ%ÿ%ÿ%ÿ%ÿ$ÿ1ÿ 5ÿ 5ÿ-ÿ"ÿ22Yÿ¶ÿÆÇÏÿääæÿðððÿôôôÿõõõÿöööÿöööÿöööÿöööÿöõöÿõööÿöööÿõõöÿöööÿõööÿöööÿöööÿöööÿ÷÷÷ÿÜÜÜä.ŽŽŽ®®®´ûûüÿõõõþöõõÿõõõÿöõõÿöõõÿõõõÿõõõÿõõõÿõõõÿõõöÿõõõÿõõõÿõöõÿöõõÿõöõÿõõõÿõöõÿõõöÿöõõÿöõõÿõõõÿöõõÿõõõÿöõõÿõõõÿõõõÿõõöÿõõõÿõõôÿôôôÿòòóÿðððÿìììÿèçèÿâââÿÛÚÛÿÒÒÒÿÇÇÈÿ¹¹¼ÿ©¨¯ÿ•• ÿ„„˜ÿtt’ÿRRvÿ=ÿÿÿÿÿÿÿÿÿÿ$ÿ'ÿ&ÿ'ÿ#ÿ)ÿ?ÿCÿ4ÿ 6ÿ3ÿGÿ’‘¯ÿ¼¼Èÿßßâÿîîîÿóóóÿôôôÿõõõÿõõõÿõõõÿõõõÿõõõÿõöõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõöõÿ÷÷÷ÿÛÛÛä.®®®´ûûûÿõõõþõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôôôÿóôôÿòòòÿïïïÿëëëÿæææÿßßßÿØØØÿÎÎÎÿÂÂÄÿ´´¸ÿ¢¢©ÿŽŽ›ÿ—ÿkkŒÿ@@cÿ-ÿÿÿÿÿÿÿÿÿÿ$ÿ'ÿ'ÿ'ÿ%ÿ#ÿ ;ÿOÿEÿAÿEÿ0ÿEÿ‹Š«ÿ··ÅÿÛÛàÿììíÿòòòÿôôôÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿ÷÷÷ÿÛÛÛä.­­®´ûûûÿôõôþõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿôõõÿõõõÿõõõÿõõõÿôôôÿôôôÿòòòÿïïïÿëëëÿæææÿßßßÿÖÖÖÿËËÌÿ¾¾Àÿ®®³ÿ›š¤ÿ‰‰™ÿzz•ÿ__‚ÿ./Pÿÿÿÿÿÿÿÿÿÿ"ÿ'ÿ(ÿ(ÿ(ÿ$ÿ$ÿ :ÿVÿSÿQÿKÿHÿ =ÿ!"RÿŒ‹¬ÿ¶¶ÅÿÙÙßÿëëìÿòòòÿóôóÿôõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿõõõÿöö÷ÿÛÛÛä.­­­´ûúúÿôôôþôôõÿõôõÿôôõÿôôôÿõôõÿôôôÿôôôÿôôôÿôôõÿôõôÿõôôÿôôôÿõõõÿôôõÿôôôÿôõôÿôôõÿôõôÿôôôÿôõôÿõõôÿôõõÿôôôÿóóóÿñññÿíííÿèèèÿááàÿ×××ÿÊÊËÿ»»½ÿ¨¨®ÿ”” ÿƒƒ—ÿss‘ÿPPtÿ<ÿÿÿÿÿÿÿÿÿÿ%ÿ)ÿ(ÿ)ÿ(ÿ$ÿ'ÿCÿYÿ]ÿZÿTÿSÿTÿ @ÿ9:jÿ––´ÿººÈÿÛÛàÿëëìÿòòòÿóóóÿôôôÿõôõÿõôôÿõõôÿõôõÿôôôÿõõôÿôôõÿôõôÿôõôÿõôõÿôõôÿõôôÿôôôÿôôôÿôõôÿôôôÿöööÿÚÚÚä.­­­´úúúÿôôôþôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿòòóÿïððÿëëëÿåååÿÛÛÛÿÍÍÎÿ»»¿ÿ¦¦®ÿÿ€€—ÿjj‹ÿ??cÿ-ÿÿÿÿÿÿÿÿÿ ÿ'ÿ)ÿ)ÿ)ÿ(ÿ$ÿ.ÿIÿ^ÿ]ÿ!!cÿYÿ[ÿ\ÿLÿVÿddÿ¤¤¼ÿÃÃÏÿÞÞãÿììíÿòòòÿóóóÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿöööÿÚÚÚä.Œ­­­´úúúÿóóóþôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿóóóÿòòòÿïïïÿêêêÿâââÿÕÕÖÿÃÃÆÿ««³ÿ‘‘ ÿ™ÿ__ƒÿ--Oÿ ÿÿÿÿÿÿÿÿÿ%ÿ)ÿ+ÿ+ÿ*ÿ'ÿ'ÿ8ÿVÿ""fÿ^ÿ""eÿXÿ!!cÿ_ÿWÿ[ÿMM€ÿ¯ÿ´´ÆÿÏÏÙÿääèÿîîïÿòòòÿóóóÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôôôÿôóôÿôôôÿõõõÿÚÚÚä.ŒŒŒŽ­­­´úúúÿóóóþôôóÿôóôÿôóôÿôôôÿôôôÿóôôÿôôóÿôôóÿôóóÿóôóÿóôóÿóóóÿôôôÿôóôÿóóôÿôôóÿóôôÿôôóÿôóôÿóóóÿòñòÿîîîÿéééÿßààÿÐÐÒÿºº¿ÿœœ¨ÿ„„œÿ^^ÿ=ÿÿÿÿÿÿÿÿÿ ÿ'ÿ+ÿ+ÿ+ÿ(ÿ&ÿ-ÿGÿ_ÿ##hÿ_ÿaÿ!!cÿ `ÿ`ÿVÿ""eÿKKÿЉ¬ÿ®®ÃÿÆÆÓÿÝÝâÿêêìÿñðñÿòóòÿóóóÿóôóÿôôôÿôôôÿôôóÿóôôÿôóóÿóôôÿôôôÿôôôÿôôôÿóôôÿôôôÿôôóÿóôôÿôóôÿôôóÿôôôÿóôôÿôôôÿóôôÿõõõÿÙÙÚä.ŒŒŒŽŽŽ¬¬¬´ùùùÿóóóþóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿôóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿîîîÿéééÿÞÞßÿÌÌÏÿ±±¹ÿ‘‘£ÿtt”ÿ--Pÿÿÿ ÿÿÿÿÿÿ#ÿ)ÿ,ÿ,ÿ+ÿ&ÿ*ÿ <ÿVÿ%%mÿ""eÿ cÿ cÿ bÿ""dÿbÿYÿ**lÿUU‡ÿŽŽ¯ÿ¯¯ÃÿÅÅÒÿÚÚáÿèèêÿïïðÿòòòÿòòòÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóôóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿõõõÿÙÙÙä.ŒŒŒŽŽŽ¬¬¬´ùùùÿòóòþóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòÿïïïÿêêêÿßßßÿËËÎÿ««µÿ‹‹¢ÿZZ~ÿ (ÿÿ"ÿ ÿÿÿÿÿ&ÿ,ÿ-ÿ-ÿ*ÿ(ÿ4ÿQÿ!!eÿ$$jÿ!!eÿ!!eÿ!!eÿ""eÿ""eÿbÿ]ÿ55sÿii—ÿ——´ÿ³³ÆÿÈÈÔÿÛÛáÿèèêÿïïðÿòòòÿòòòÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿôôôÿÙÙÙä.ŒŒŒŽŽŽ¬¬¬´øøøÿòòòþóóóÿóóòÿòòóÿòòóÿóóóÿóòòÿóòóÿòóóÿóóòÿóóóÿòóóÿòóóÿóóóÿóòóÿóòóÿóóóÿóóòÿòòòÿðððÿëëëÿááâÿÌÌÐÿ©ªµÿˆˆ£ÿAAgÿÿ#ÿ"ÿ!ÿ!ÿÿ"ÿ)ÿ-ÿ-ÿ-ÿ)ÿ+ÿ @ÿ[ÿ##hÿ%%lÿaÿ$$kÿ dÿ!!dÿ##jÿ_ÿ$$hÿJJ‚ÿ~~¤ÿ££»ÿ¹ºÊÿÍÍ×ÿÞÞãÿééëÿïïïÿòñòÿòòòÿòòòÿòòòÿòòòÿòòòÿòóóÿóóóÿóóóÿóóòÿóóóÿóóòÿóóóÿóóóÿóóóÿóóóÿóóóÿóóòÿóóóÿóóòÿóóóÿòóóÿòòóÿóóóÿóóòÿóóóÿóóóÿóóóÿôôôÿÙÙÙä.ŒŒŒŽŽŽ¬¬¬´øøøÿòòòþòòóÿòòòÿòóòÿóòòÿòòòÿòòòÿòòòÿòòòÿòòóÿòòòÿòòòÿòóòÿòòòÿòòóÿòóòÿóòòÿòòòÿñññÿíííÿääåÿÐÑÔÿ­­¸ÿ‰‰¥ÿ22Xÿÿ(ÿ#ÿ#ÿ"ÿ#ÿ+ÿ.ÿ.ÿ.ÿ*ÿ-ÿDÿcÿ eÿ!!fÿ dÿ dÿ%%lÿ!!fÿdÿcÿ77wÿee”ÿ’’±ÿ®®ÂÿÁÁÐÿÔÔÜÿââæÿëëíÿðððÿñññÿñññÿðððÿïïîÿîîîÿïïïÿïïïÿðððÿñññÿñòñÿòòòÿòòòÿòòòÿòòòÿòòòÿóòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿôôôÿÙÙØä.ŒŒ‹ŽŽŽ¬«¬´øøøÿñòòþòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿñññÿïïïÿéèéÿרÚÿ¶¶ÀÿŽŽ©ÿ33Xÿÿ'ÿ$ÿ%ÿ#ÿ)ÿ/ÿ.ÿ/ÿ,ÿ-ÿFÿ^ÿaÿ\ÿ!!gÿbÿ""fÿdÿfÿ((jÿSSŠÿ€€¥ÿ££»ÿ¸¸ÉÿÊÊÖÿÛÛáÿççêÿííîÿñññÿòòòÿñññÿðððÿîîîÿìììÿéééÿçççÿæççÿèèèÿêêêÿììíÿïïïÿñññÿñññÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿôóôÿØØØä.‹‹‹ŽŽŽ«««´÷øøÿñññþòòòÿñòòÿòòòÿòòòÿòòòÿòòñÿòòòÿòòñÿòòòÿòòòÿòòñÿòòòÿñòòÿòòòÿòòòÿòòòÿðððÿìììÿààáÿÃÃËÿ™™¯ÿDDjÿ!ÿ*ÿ&ÿ%ÿ%ÿ-ÿ/ÿ/ÿ.ÿ,ÿ >ÿ^ÿaÿ]ÿ^ÿ^ÿ dÿ_ÿeÿ==zÿoošÿ—˜´ÿ°°ÃÿÃÃÐÿÔÔÝÿââæÿêëìÿïïðÿñññÿòññÿññòÿòòòÿñññÿïïïÿëëëÿçççÿáááÿÛÜÜÿÛÚÚÿÜÜÜÿàààÿåååÿêêêÿíííÿðððÿñññÿñòòÿòòòÿòòòÿñòòÿòòòÿòòòÿòòòÿòòòÿñòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòòòÿòñòÿóóóÿØØØä.‹‹‹Ž«««´÷÷÷ÿñññþñññÿñññÿñññÿòññÿññòÿñññÿñññÿñññÿñññÿñòñÿñññÿñññÿñññÿòññÿñññÿñññÿïïïÿèèéÿÒÒ×ÿ¨¨¸ÿggÿ$ÿ,ÿ*ÿ)ÿ(ÿ/ÿ0ÿ0ÿ-ÿ5ÿSÿ\ÿWÿ`ÿ_ÿ_ÿ[ÿ!!dÿPPˆÿ„„§ÿ¦¦½ÿ»»ÊÿÍÍ×ÿÝÝãÿççêÿííîÿðððÿñññÿñññÿñññÿñññÿñòñÿñññÿññðÿíííÿæççÿÞÞßÿÔÔÕÿÌÌÍÿÉÉÊÿÊÊÊÿÐÐÐÿØØØÿáááÿèèèÿììíÿïððÿñððÿññòÿñññÿñññÿñññÿñññÿñññÿññòÿòññÿñññÿñññÿòññÿñññÿñññÿñññÿññòÿñòñÿóóóÿØØØä.‹‹‹«««´÷÷÷ÿñññþñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿîííÿààâÿ½½ÇÿŽŽ«ÿ;ÿ,ÿ,ÿ*ÿ*ÿ0ÿ0ÿ0ÿ.ÿ BÿVÿXÿWÿWÿ`ÿ[ÿ""dÿXXŠÿ®ÿ­­ÁÿÂÂÐÿÕÕÝÿããçÿëëìÿïïïÿððñÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿééëÿÛÛßÿÈÈÏÿ¸¸Áÿ¯¯¶ÿ®®³ÿ³³´ÿ»»»ÿÆÆÆÿÓÓÓÿÞÞÞÿçççÿìììÿïïïÿðñðÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿóóóÿ×××ä.ŒŒŒ«««´÷÷÷ÿñññþñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿëëëÿÕÕÚÿªª¼ÿPPxÿ'ÿ/ÿ-ÿ,ÿ0ÿ1ÿ0ÿ3ÿJÿOÿSÿTÿ\ÿVÿWÿVV‰ÿ®ÿ¯¯ÂÿÆÆÒÿÚÚàÿææéÿííîÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿääçÿÌÌÕÿ  ±ÿ††Ÿÿ©ÿŒŒœÿ““›ÿ  ¤ÿ°°±ÿÂÂÂÿÒÒÒÿßßßÿèèèÿíííÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿòòòÿ×××ä.ˆˆˆ:::ŽŽ‹’’‘žž™}}œDDB«««´÷÷÷ÿñññþñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿççèÿÆÆÏÿ••±ÿCÿ0ÿ0ÿ0ÿ0ÿ2ÿ1ÿ8ÿ DÿOÿOÿNÿUÿRÿ>>vÿ‡‡©ÿªª¾ÿÅÅÑÿÚÚàÿççéÿîîîÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿÞÞãÿÃÃÑÿ$$Uÿÿ8ÿTTvÿww’ÿ€€ÿ––›ÿ­­®ÿÂÂÃÿÔÔÔÿâââÿêêêÿïïïÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿòòòÿ×××ä/’’’žžž¥³³µ´´´œ²²±®®®ÀÀÀ’’---«««´÷÷÷ÿñññþñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿïïïÿááäÿ¸¸Æÿnn”ÿ4ÿ;ÿ5ÿ0ÿ2ÿ2ÿ6ÿ EÿQÿ@ÿRÿLÿUÿkk•ÿ¡¡¸ÿ½½Ëÿ××Ýÿææèÿííîÿðððÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿððñÿààåÿ¸¸ÇÿSS–ÿeÿÿÿ;ÿee†ÿxxˆÿ••›ÿ±±²ÿÈÈÈÿÚÚÚÿæææÿíííÿðððÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿðððÿñññÿÖÖÖå1ŠŠŒ ªªªŒŒŒœœ›‘‘‘  ¡••˜”””ŠŠ‰‘‘™´´²(((«««´÷÷÷ÿðððþñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿîîîÿÚÚßÿ®®ÁÿBBrÿ8ÿ;ÿ:ÿ9ÿ2ÿ3ÿ>ÿAÿ CÿTÿ<ÿ22kÿ‡‡¨ÿ­­¿ÿÍÍÖÿááäÿëëìÿïïðÿðððÿðññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿñññÿääèÿººÊÿmm›ÿ##tÿSÿÿÿ "ÿ^^ÿzz‰ÿ¢ÿ»»»ÿÑÑÑÿàààÿêêêÿïïïÿñññÿñññÿñññÿñññÿññðÿñññÿððñÿñððÿññðÿðððÿðððÿïððÿïïïÿïïïÿðððÿÕÕÕå4••–¥¥§ ¡¡¡ ™™š¡¡¡¦¦¦ŸŸžŸŸŸ££¤••Ÿ‰‰ˆ¿¿¿ƒƒƒ««ª´öööÿðððþññðÿñðñÿððñÿñððÿððñÿññðÿðððÿððñÿññðÿññðÿððñÿññðÿñññÿñññÿðððÿîííÿÒÒÙÿ££ºÿ%%[ÿ Fÿ Fÿ Dÿ7ÿ4ÿ5ÿ2ÿ>ÿ DÿBÿDDxÿ’’­ÿ¶¶ÄÿÖÖÛÿææèÿííîÿïððÿðððÿñññÿðññÿñññÿñññÿñññÿñññÿñðñÿñðñÿðññÿðððÿñññÿññðÿñðñÿññðÿñññÿññðÿððñÿñðñÿééëÿÄÄÑÿ„„§ÿ kÿ$$rÿ/ÿÿÿ)ÿhh‡ÿ††‘ÿ««®ÿÇÈÈÿÚÚÚÿçççÿíííÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿíîíÿïïïÿÔÔÔæ:™™™ ŸŸ¡ œœœ£££¡¡¡¡¡¢ŸŸ¤ ¤¤¢žžžŽŽ¡¡¡“““ªªª´öööÿðððþðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿñððÿðððÿðððÿðððÿìììÿÌÌÖÿ——³ÿ^ÿSÿSÿUÿ5ÿ4ÿ0ÿ3ÿ7ÿ6ÿDDtÿ’’«ÿ¹¹ÄÿÙÙÝÿèèéÿîîîÿïïïÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿñððÿììíÿËËÕÿ““°ÿ%%lÿ""lÿgÿÿÿÿ--NÿxxŽÿ››¢ÿ¿¾¿ÿÔÕÕÿãããÿìììÿïïïÿðððÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿîîîÿîîíÿíííÿìíìÿëììÿêêêÿëëëÿÐÐÐæC™˜˜ŸŸ¤¢¢§¢¢£ œœ¡ ££¢ššŸŸž¦¦¦qqqŒªªª´öööÿððïþðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿëëìÿÉÉÓÿ®ÿ JÿLÿ Kÿ Kÿ5ÿ/ÿ0ÿ1ÿ/ÿ66fÿ‰‰¤ÿ³³¾ÿÕÖÙÿççèÿîîîÿïïïÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿíííÿÏÏØÿšš´ÿ++oÿ^ÿeÿ1ÿÿ!ÿÿbbƒÿŒŒ—ÿµµ·ÿÏÏÏÿàààÿéééÿîíîÿîîîÿîîîÿîîíÿíííÿíííÿíííÿìììÿëììÿëêêÿêêêÿéééÿççèÿæææÿçççÿÈÈÈäGƒ   Ÿ¥¥¦ œœœ ˜˜— žžžˆˆŒ¹¹» ŒŒªªª´õöõÿïïïþïðïÿðððÿðððÿïððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿïððÿðððÿððïÿðïðÿêêëÿÈÈÓÿŠŠªÿ`ÿ^ÿ]ÿZÿ2ÿ-ÿ.ÿ/ÿ7ÿrr•ÿŸŸ­ÿÊÊÎÿáááÿëììÿïïïÿðððÿðïðÿðððÿðïðÿðððÿïððÿðïðÿðððÿðððÿðïðÿðððÿðððÿðððÿïððÿððïÿðððÿðððÿðïðÿïððÿïððÿððïÿðïïÿìììÿÐÐ×ÿžž¶ÿ--mÿ]ÿ_ÿHÿÿ!ÿÿ==_ÿ‚‚”ÿ¬¬°ÿËËËÿÜÜÜÿçççÿìííÿíìíÿìììÿìììÿëëëÿêêêÿêêêÿéééÿèèèÿçççÿæååÿäääÿãããÿáááÿáááÿÆÅÆç>```  ¢ŸŸŸ¤¤¤ŸŸ¤ ¡¡¢““”˜˜™€€€ŒŒŒªªª´õõõÿïïïþðïïÿïðïÿïïïÿïïïÿïïïÿïðïÿïïïÿïïïÿïððÿïïïÿïïïÿïïïÿïïïÿïïïÿïðïÿëëìÿÉÉÔÿŒŒ¬ÿaÿfÿeÿcÿ0ÿ,ÿ-ÿ)ÿ11\ÿ„…œÿ³²¹ÿÔÓÔÿäääÿììíÿïïïÿïïïÿïïïÿïïðÿïðïÿïïïÿððïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïððÿïïïÿðïðÿïïïÿððïÿïïïÿîîîÿìëìÿÏÏÖÿ´ÿ//oÿ]ÿ^ÿWÿÿ$ÿ!ÿAÿ||”ÿ¤¤ªÿÇÇÇÿÙÙÙÿääãÿéééÿéééÿéèéÿèèèÿçççÿææçÿåååÿäääÿãããÿááâÿàààÿÞÞÞÿÜÜÝÿÚÚÛÿÙÚÚÿÄÄÄê7ccc¡¡¢    žž¢    ¡¡¡ŒŒŒÁÁÁŒŒŒ©©©´õõõÿïïïþïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿëëìÿÌÌÖÿ’’°ÿ$$oÿjÿhÿjÿ/ÿ,ÿ-ÿ'ÿOOwÿŒŒÿºº¾ÿÖÖÖÿåååÿììíÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîïîÿïïïÿíííÿèèèÿÊÊÒÿ˜˜°ÿ//pÿ^ÿ^ÿ_ÿ%ÿ&ÿ%ÿ 1ÿttÿ¥ÿÃÃÃÿÕÕÕÿàààÿåååÿåååÿääåÿããäÿãâãÿáááÿàààÿÞÞÞÿÜÝÝÿÛÛÛÿØØÙÿ×××ÿÔÔÕÿÒÒÓÿÑÑÑÿÁÁÁì5hhh¡¡¢¡¡¢¡¡¡ŸŸ¡žžŸ¡¡¡”””ŸŸŸ‹ŒŒ©©©´õõõÿîîîþïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿììíÿÑÑÚÿ·ÿ%%kÿiÿgÿlÿ,ÿ)ÿ*ÿ$ÿ^^‚ÿŽŽœÿ¼¼¾ÿÕÕÕÿããäÿìììÿîïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿîîîÿïîîÿíííÿëëëÿããäÿÂÂËÿªÿ]ÿWÿWÿXÿ)ÿ)ÿ)ÿ-ÿmm‹ÿ˜˜¢ÿ¿¿ÀÿÑÐÑÿÛÛÛÿàààÿßßàÿÞÞÞÿÝÝÝÿÜÜÜÿÚÚÛÿÙÙÙÿ×××ÿÕÕÕÿÓÓÓÿÑÑÑÿÏÏÏÿÌÌÌÿÉÊÊÿÈÈÈÿ¿¿¿ê*¡¡¢££¢  ¡¡¡¡¥¥¥ •••›››ŒŒ‹©©©´ôôôÿîîîþîïîÿïïîÿîïîÿîïïÿîîïÿïïïÿîîîÿïîïÿîîïÿïïîÿîîïÿîîîÿîîïÿïïïÿîîïÿíííÿ××Þÿ¨¨¾ÿ88}ÿ nÿ!!oÿ$$vÿ3ÿ)ÿ+ÿ&ÿ^_‚ÿ™ÿ¹¹»ÿÒÒÒÿáâáÿëêëÿîîîÿîïïÿïïîÿîïïÿïïïÿîîîÿïïïÿïîîÿïïîÿïîïÿïîîÿïîîÿîîîÿîîïÿîïîÿîïîÿïïîÿîîïÿîïïÿîîîÿíííÿëëëÿèèèÿÜÜÝÿµµÀÿ~~ŸÿQÿNÿ Mÿ Mÿ(ÿ)ÿ*ÿ-ÿjj‰ÿ–•Ÿÿ»»»ÿËËËÿÕÕÕÿÙÙÙÿØØØÿ×רÿÕÖÖÿÔÔÔÿÓÓÓÿÑÑÑÿÏÏÏÿÍÌÍÿÊÊÊÿÈÈÈÿÅÆÆÿÃÃÄÿÁÁÂÿ¿ÀÀÿ¾½¾ãšš›¡¡¢¢¢¢ ¢¢¢ŸŸŸ žžžœœ›ŒŒ‹©©©´ôôôÿîîîþîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿÞÞãÿ´´ÆÿPPÿ""tÿ))zÿ//†ÿ Dÿ'ÿ+ÿ%ÿXX{ÿ‡‡•ÿ³³µÿÍÍÍÿÞÞÞÿèèèÿíííÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿëìëÿèèèÿãããÿÎÎÑÿ¢¢²ÿ``Šÿ@ÿ Iÿ Hÿ Gÿ(ÿ+ÿ+ÿ0ÿkkŠÿ“”ÿ¶¶·ÿÆÆÆÿÎÎÎÿÑÑÑÿÑÐÑÿÎÏÏÿÍÍÍÿËÌÌÿÊÊËÿÈÈÈÿÆÆÆÿÄÄÅÿÂÂÂÿÀÀÀÿ¾¾¾ÿ»»¼ÿºººÿ¹¹ºÿ¼¼¼Øªªª¡¡¡¡¡¢££¤ŸŸ ªªª ”””›› ‹‹‹©©©´ôôôÿíîîþîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿååçÿÁÁÏÿvv£ÿ&&}ÿ,,€ÿ..…ÿ_ÿ!ÿ)ÿ!ÿOOuÿ€€ÿ©©¬ÿÅÅÅÿ×××ÿäääÿêëêÿíííÿíîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿìììÿèèèÿãããÿ×רÿ¹¹Àÿ¤ÿ22dÿ<ÿAÿEÿCÿ*ÿ,ÿ-ÿ 4ÿoo‹ÿ’’›ÿ²²³ÿ¿¿¿ÿÇÇÇÿÈÈÉÿÇÇÈÿÆÆÆÿÅÄÅÿÃÃÃÿÁÁÂÿÀÀÀÿ¾¾¾ÿ¼¼¼ÿºººÿ¸¸¹ÿ¶¶·ÿ´´µÿ³³³ÿ´´µÿ¶¶¶± ¢¢¢ŸŸ¢  ¤¢¢   ¡ ¨¨¨ ””˜››Ÿ‹‹‹©¨©´ôóôÿíííþîîîÿíîíÿîîîÿíîîÿîîîÿîîîÿîîîÿîîîÿîîîÿîíîÿîîîÿîíîÿîîîÿîîîÿîîîÿîîîÿééëÿÐÐÙÿž·ÿ66‡ÿ//†ÿ//†ÿ++ÿ!ÿ)ÿ ÿ=>šÿ77“ÿ==ÿ$$rÿÿ#ÿÿ99^ÿnnŽÿxx‰ÿ‡‡ÿ••™ÿ ¡¢ÿ©©©ÿ°°±ÿµµµÿ¹¹¹ÿ»»»ÿ½½¼ÿ¼¼¼ÿºººÿ···ÿ°°²ÿ§§«ÿšš¢ÿ‰‰—ÿ{{”ÿ\\ÿBÿ'ÿ2ÿ*ÿ7ÿdÿ44‘ÿ99šÿaa­ÿÿÿÿÿúúüÿýýýÿûûüÿùùúÿ÷÷øÿõõõÿòòòÿïïïÿëëëÿèèèÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÈÈÈÿ”””„|||¡¡¢¡¡¢¡¡¢¡¡¥ ¡¡¡µµµ//.ŠŠŠ§§§´ñòòÿëëëþìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿìììÿëììÿçèéÿÚÚàÿººËÿ‹‹­ÿ@@›ÿ66•ÿ==ÿ..†ÿ!ÿÿÿ7ÿVV|ÿssÿ{{Žÿƒƒÿ•ÿ””šÿššŸÿžž¢ÿ ¡¤ÿ¡¡¥ÿŸŸ¤ÿœœ¢ÿ••žÿ™ÿƒ„•ÿyz•ÿaa…ÿ((Rÿ)ÿ-ÿ-ÿ.ÿWÿ**€ÿ,,„ÿ11Šÿ44‘ÿ``©ÿÿÿÿÿüüþÿþþþÿüüüÿùùùÿöööÿóóóÿðððÿìììÿéééÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÈÈÈÿ’’’„€€€¢¢££££ŸŸ   ŸœœœŠŠŠ¥¥¥ŠŠŠ§§§´ñññÿëëëþëëëÿììëÿëììÿìììÿëëìÿììëÿëìëÿììëÿëììÿìëëÿìëìÿëëëÿëìëÿììëÿëììÿëëìÿëëëÿëëëÿììëÿëëëÿëëëÿææèÿÙÙßÿ¼¼Ìÿ““±ÿMMžÿ44—ÿ<<šÿ99šÿHÿÿÿÿ=ÿIImÿggŠÿvv”ÿ||•ÿ”ÿ‚‚•ÿƒƒ•ÿ‚‚•ÿ–ÿ—ÿyy•ÿjjŒÿLLsÿ Iÿ'ÿ(ÿ*ÿ*ÿ Hÿiÿ%%wÿ$$vÿ((ÿ//Œÿ11‘ÿcc¬ÿÿÿÿÿûûüÿüüüÿùùùÿöööÿóóóÿðððÿìììÿéééÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÈÈÈÿ‚¡¡¢‰‰Œ˜˜jjhŠŠŠ§§§´ñññÿëëëþëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿìëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿççéÿÛÛáÿÂÃÑÿ¢¢¹ÿjj¤ÿ::šÿ66—ÿ??¢ÿ11‹ÿCÿÿÿÿ#ÿ8ÿ))Mÿ99^ÿBBhÿCCjÿBBjÿ99_ÿ**Qÿ<ÿ+ÿ!ÿ!ÿ&ÿ/ÿRÿnÿ##uÿhÿjÿ((xÿBB‰ÿKKÿGG’ÿjj«ÿÿÿÿÿùùúÿùùùÿöööÿóóóÿðððÿìììÿéééÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÈÈÈÿ€€€  ¢  ¡Œ±±°ŠŠŠ§§§´ñññÿëëëþëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿèèéÿßßãÿÍÍØÿ³³Åÿ¯ÿ[[¢ÿ88˜ÿ55™ÿ==¡ÿ66“ÿ""lÿBÿ)ÿÿÿÿÿÿÿÿÿ"ÿ*ÿ =ÿVÿ##sÿ**ÿ**€ÿrÿoÿ))sÿ]]Žÿ„„£ÿ‘‘¨ÿ““¨ÿ‹‹¡ÿ¢¢´ÿÿÿÿÿ÷÷øÿöööÿóóóÿðððÿìììÿéééÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÈÈÈÿŠŠŠ||||  ¡¡¡¡    œœœ”””œœœ___ŠŠ‰¦¦¦´ñññÿêêêþëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿééêÿääæÿÙÙßÿÆÆÓÿ¯¯Âÿ‘‘°ÿhh£ÿFFšÿ55”ÿ55šÿ88ÿ77˜ÿ11Œÿ&&vÿ&&tÿ]ÿ\ÿdÿ%%sÿ%%vÿ''{ÿ//Šÿ,,ˆÿ))„ÿ$$~ÿ##zÿ,,|ÿHHŠÿpq›ÿ——±ÿ©©»ÿµµÂÿ»»ÄÿººÀÿ±°¸ÿ¿¿ÆÿÿÿþÿõõöÿóóóÿðððÿìììÿéééÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÈÈÈÿ‡‡‡yzzz¡¡¢  ¡ ¢¢¤¨¨¨‰‰‰¦¦¦´ðððÿêêêþëëêÿëêëÿêêëÿêëëÿëêëÿêêêÿëêëÿêëêÿêëëÿêëêÿëêëÿëêëÿêëëÿêêêÿêëëÿëëêÿëëêÿêëêÿëëëÿëëêÿêêëÿëëëÿêêëÿêêëÿëëêÿêêëÿèèéÿââåÿØØÞÿÈÈÕÿ¸¸Èÿ¤¤ºÿ‹‹®ÿoo¤ÿWWœÿEE•ÿ;;•ÿ44‘ÿ44–ÿ00ÿ00ÿ''‚ÿ11ÿ55’ÿ,,ÿ<<ÿ@@ˆÿRR’ÿhh›ÿ€€¦ÿ˜˜³ÿ««¾ÿ¸¸ÇÿÅÅÏÿÏÏÔÿÒÒÔÿÐÐÑÿÉÉÉÿ¿ÀÀÿÌÌÍÿûûûÿòòòÿðððÿìììÿéééÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÈÈÈÿ………vwww¡¡¢¡¡¢¤¤¥§§¦œœœ‰Š‰¦¦¦´ðððÿêêêþêêëÿêêêÿêêêÿêëêÿêêêÿêêëÿêëêÿëêêÿêêêÿêêêÿêëëÿêêêÿêêêÿêêêÿêêêÿêëêÿêêêÿêêêÿêêëÿêêêÿêêëÿêêêÿêëêÿêêëÿêêêÿêêêÿëêêÿêêêÿéèéÿääçÿÝÝâÿÓÓÜÿÈÇÔÿ¼¼Ìÿ±±Ãÿ¦¦»ÿšš´ÿ°ÿ‡‡«ÿ„„ªÿ„„ªÿ……©ÿ‰‰«ÿ¯ÿ——³ÿŸŸ¶ÿ¨¨¼ÿ±±Ãÿ¹¸ÈÿÂÂÏÿËËÕÿÖÕÜÿÜÜßÿßßàÿÝÝÝÿØØØÿÒÑÒÿÉÉÊÿ¿¿ÀÿÎÎÏÿ÷÷÷ÿïïïÿìììÿéééÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÈÈÈÿ‚‚‚stttŸŸ ‰‰‰¦¦¦´ðððÿêêêþêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿèèéÿååçÿááäÿÛÛáÿÕÕÝÿÏÏÙÿÊÊÖÿÇÇÔÿÅÅÒÿÅÅÒÿÅÅÒÿÇÇÔÿÊÊÕÿÍÍ×ÿÒÑÚÿÖÖÝÿÛÛàÿàßãÿääæÿååæÿçççÿååæÿãããÿÞÞÞÿØØØÿÑÑÑÿÉÉÉÿ¿¿¿ÿÏÏÐÿôôôÿëëëÿéééÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÈÈÈÿovvv¦¦¥‰‰‰¦¦¦´ðððÿéêéþêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéééÿèèéÿççèÿææçÿååçÿååçÿææçÿæçèÿççèÿèèéÿéééÿêéêÿêêêÿêêêÿêêêÿéèèÿèèèÿåååÿâââÿÝÞÝÿ×רÿÐÐÐÿÈÈÉÿ¾¾¾ÿÐÐÑÿðððÿèèéÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÇÇÇÿ|||lrrržž  ››šžžžœœœ““”‰‰‰¦¦¦´ïïïÿéééþêêêÿêêêÿêêéÿêêêÿêêêÿêééÿêêêÿêêêÿéêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéêêÿêêêÿéêêÿêêêÿêêêÿéêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿéêéÿêêêÿêêêÿêêêÿêêêÿêéêÿéêéÿêêéÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêéêÿêêéÿêéêÿêééÿéêêÿéééÿéééÿèèèÿçççÿåååÿâââÿÝÝÝÿ×××ÿÐÐÐÿÈÈÈÿ½½½ÿÑÑÑÿìììÿåååÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÇÇÇÿyyyilll¡¡¡¡¡¡ ŸŸŸ ©©©   –––¸¸· ‰‰‰¦¥¥´ïïïÿéééþéééÿêéêÿéêêÿêêéÿéééÿêêéÿééêÿéééÿéééÿêêéÿêééÿéééÿéééÿéééÿééêÿêéêÿêééÿêêéÿéêêÿéééÿéééÿéééÿêééÿéêéÿéêéÿééêÿéééÿêéêÿéééÿéééÿêéêÿéééÿéêêÿêééÿêééÿéééÿêééÿéêéÿéêéÿêééÿéêêÿéêéÿéééÿéééÿéééÿéééÿêééÿêééÿéééÿéééÿèçèÿçççÿäåäÿáááÿÜÜÜÿÕÖÖÿÎÎÏÿÇÇÇÿ»»¼ÿÒÒÒÿèèèÿáááÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÇÇÇÿzzzh¨¨¨ŸŸ  ŸŸžžžž–––ÂÂÆ‰‰‰¥¥¥´ïïïÿéééþéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿêééÿéééÿééèÿçèèÿæççÿäääÿàààÿÛÛÛÿÕÕÕÿÍÍÎÿÅÅÆÿºººÿÒÒÒÿääãÿÝÝÝÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÇÇÇÿzzzh|||­­­›››šš›¡¡ ˜˜™˜˜œˆˆˆ¥¥¥´ïïïÿéééþéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèèÿçèèÿæææÿãããÿßßàÿÚÚÚÿÔÔÔÿÌÌÍÿÅÅÅÿ¹¹¹ÿÓÓÓÿßßßÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÇÇÇÿ{{{g{{{ŸŸŸ›››››››››˜˜˜ˆˆˆ¥¥¥´ïîïÿèèèþéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿééèÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿèèéÿèèèÿçççÿåååÿãããÿÞÞÞÿÙÙÙÿÒÒÓÿËËËÿÃÃÃÿ··¸ÿ×××ÿÙÙÙÿÖÖÖÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÇÇÇÿ|||gzzzŸŸ·¨¨«¢¢¢œœœ˜˜˜ˆˆˆ¥¥¥´îïîÿèèèþéééÿéèèÿéééÿéééÿéèéÿéééÿéééÿéééÿèééÿéééÿéééÿééèÿéééÿéééÿéééÿéééÿéééÿéééÿéèéÿéééÿééèÿéééÿéééÿééèÿéèéÿéééÿéééÿèéèÿéééÿéééÿééèÿéèéÿéééÿèééÿèééÿéééÿééèÿéééÿéééÿééèÿéééÿéééÿéèéÿèééÿéééÿéééÿèééÿèèèÿèèèÿçççÿæççÿååäÿáââÿÞÞÝÿØØØÿÑÑÑÿÉÉÊÿÂÂÂÿ¶¶·ÿØØØÿÕÕÕÿÒÒÒÿÎÎÎÿËËËÿÈÈÈüÇÇÇÿ|||g{{{–––˜˜™•••ˆˆˆ¥¥¥´îîîÿèèèþéèèÿèèèÿéèèÿèéèÿèéèÿèèèÿèééÿèèèÿèèèÿèèéÿèèéÿèèèÿéèéÿèéèÿèèéÿééèÿèèéÿèéèÿéèèÿèèèÿèéèÿèèéÿééèÿèèéÿèééÿèèéÿèéèÿèèèÿèèèÿèèèÿéééÿéééÿèèèÿèéèÿéèéÿéèèÿéèéÿéèèÿèèéÿéèèÿèèèÿèèéÿèéèÿèèéÿéééÿéèèÿèèéÿèèèÿèèèÿçççÿæææÿäääÿáááÿÜÜÜÿÖ××ÿÐÏÐÿÈÈÈÿÁÁÁÿ¶¶·ÿØØØÿÑÑÑÿÎÎÎÿËËËÿÈÈÈüÇÇÇÿ}}}fxxx¬¬­ŠŠŠˆˆˆ¥¥¥´îîîÿèèèþèéèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèéÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿææçÿæååÿãããÿàßàÿÛÛÛÿÕÕÕÿÎÎÎÿÆÇÇÿÀÀÀÿ¸¸¹ÿÙÙÙÿÍÍÍÿËËËÿÈÈÈüÇÇÇÿ~~~g€€€‡‡‡¹¹¹UUUˆˆˆ¤¥¥´îîîÿèèèþèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿæææÿåååÿâââÿÞßßÿÙÙÚÿÓÓÔÿÌÍÍÿÅÅÅÿ¾¾¿ÿ½½½ÿÕÕÕÿÊÊÊÿÈÈÈüÇÇÇÿ~~~f}}}§§§ˆˆˆ¤¤¤´îîîÿèèèþèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçèçÿèèèÿæææÿæææÿäääÿáááÿÝÝÝÿØØØÿÒÒÒÿËËÌÿÄÄÅÿ½½½ÿÄÄÄÿÐÐÐÿÈÈÈûÇÇÇÿf~~~???ˆˆˆ¤¤¤´îîîÿèèèþèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿæææÿæææÿãããÿàààÿÜÜÜÿ×רÿÐÐÑÿÊÊÊÿÃÃÄÿ»»»ÿÎÎÏÿÉÉÉûÇÇÇÿ‚‚‚g~~~ˆˆˆ¤¤¤´îîîÿèèèþèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿæææÿåååÿãããÿßßàÿÛÛÛÿÖÖÖÿÐÐÐÿÉÉÊÿÄÄÅÿ¼¼½ÿÔÔÔûÄÄÄÿžžž]xxxˆˆˆ¤¤¤´îîîÿèèèþèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿèèèÿæææÿæææÿäääÿâââÿßßßÿÚÚÚÿÕÕÕÿÏÏÏÿÉÉÊÿÂÂÃÿÉÉÉûËËËÿÁÁÁYÎÎΈˆˆ¤¤¤´îîîÿèèèþèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿæææÿæææÿäääÿááâÿÞÞÞÿÚÚÚÿÕÕÕÿÏÏÏÿÉÉÉÿÄÄÅøÑÑÑÿÂÂÃkÃÃLJ‡¤¤¤±îîîÿèèèúèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûèèèûççèûçççûæææûæææûäääûáááûÞÞÞûÙÙÙûÕÕÕþÏÏÏþÎÎÏþÓÓÔÿÈÈÈVÐÐЖ––£££´îîîÿèèèþèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿçççÿæææÿäääÿáááÿÞÞÞÿÚÚÛþÖÖ×áÑÑÒ³ÒÒÒ€¾¾½µµ¶îîî [[\uuu’’“˜˜˜ŸŸž››œ ``YÄÄÄÌÌÌñññèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèéééßßßëëëéééêêêëëëìììïïïñññööõÞÞÞÐÐÐÎÎÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿðÿÿÿÿð?ÿÿÿÿð?ÿÿÿÿðÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿð?ÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿð?ÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿð?ÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(0` $LLLƒƒƒ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€‚‚‚111pppI¹¹¹®µµµ¤¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥¶¶¶¥µµµ£···­JJJ.---¡¡¡nÿÿÿÿþþþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüÿÿÿÿnnnC---¢¢¢mÿÿÿÿýýýüþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþýýýûÿÿÿÿoooB---¢¢¢mÿÿÿÿþþþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüÿÿÿÿoooC---¢¢¢mÿÿÿÿþþþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüÿÿÿÿoooC---¢¢¢mÿÿÿÿþþþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿûûûÿ÷÷÷ÿóóóÿðððÿððïÿðððÿóóóÿ÷÷øÿûûüÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüÿÿÿÿoooC---¢¢¢mÿÿÿÿþþþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿïïíÿèèçÿëëëÿììëÿãäâÿÖÖÖÿÉÊÌÿÀÀÆÿ¼¼Ãÿ¼¼Äÿ¿¿ÆÿÅÅÉÿÌÌÌÿÖÖÔÿååäÿôôôÿüüüÿþþþÿÿþþÿþÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿþýþüÿÿÿÿoooC---¢¢¢mÿÿÿÿýýýýþþþÿþþþÿþþþÿþÿþÿèèëÿ¬¬¹ÿ  ¬ÿ¨¨°ÿ¤¤¯ÿ€€“ÿUUiÿ88Iÿ&'7ÿ 1ÿ 2ÿ''8ÿ99IÿZZiÿ……–ÿ««µÿÄÄÃÿàààÿõõöÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿýýýüÿÿÿÿoooC---¡¡¡mÿÿÿÿýýýýþþþÿþþþÿýýýÿÿÿÿÿ¥¥ºÿ ÿ ÿ*ÿ ÿÿÿ7ÿ23cÿPQ‚ÿZ[ÿNO„ÿ45kÿFÿ ÿ%ÿbbwÿ¤¤¬ÿÎÍÌÿðððÿüüüÿþþþÿþþþÿþþþÿþþþÿýýýüþþþÿonoC---¡¡¡mÿÿÿÿüüüýýýýÿýýýÿüüýÿÿÿÿÿ©ÿ;ÿÿÿ ÿ4ÿXYÿ¸¸Íÿççîÿ÷÷øÿúúùÿöö÷ÿèçîÿÂÂÙÿyz¯ÿ-.pÿÿ""3ÿ‹‹šÿÇÈÆÿñññÿüüüÿýýýÿýýýÿýýýÿüüüüþþþÿnnnC---¡¡¡mÿÿÿÿüüüýýýýÿýýýÿüüüÿûûûÿww’ÿ)ÿÿ "ÿ %ÿ““¬ÿóóõÿýýüÿúúúÿúúúÿûûûÿüüüÿýýýÿÿÿÿÿûûúÿ¶¶ÌÿBCÿ)ÿÿŠŠšÿÒÒÑÿ÷÷÷ÿýýýÿýýýÿýýýÿüüüüýýýÿnnnC---   mÿÿÿÿûûûýüüüÿüüüÿüüüÿîîòÿ01Kÿÿÿÿ˜˜°ÿ÷÷öÿõõõÿççåÿØØ×ÿÚÚÙÿìììÿùùùÿüüüÿûûüÿûûûÿÿÿþÿ´³Éÿ34|ÿ ÿ""5ÿªª±ÿèèçÿûûûÿüüüÿüüüÿûûûüýýýÿnnnC---   mÿÿÿÿûûûýüûüÿûûûÿýýüÿÌÌÚÿ *ÿ ÿ ÿffÿîîîÿ÷÷÷ÿÛÛßÿŠŠœÿ`atÿ††•ÿ¼¼¼ÿçèçÿúúúÿüûûÿûûûÿúúûÿûûûÿmnšÿ#$]ÿÿii~ÿÕÕÔÿøøøÿüûûÿûüûÿúúúüüüüÿnnmC---   mÿÿÿÿúúúýûûûÿúúúÿþþýÿ®®Áÿ 2ÿ ÿ "ÿÀÀÌÿööõÿñðóÿ]]tÿÿÿ ÿllÿÈÈÇÿññòÿûûûÿûûûÿúúúÿýýýÿ¾¾Ïÿ'(hÿÿ**>ÿÃÃÈÿóóóÿûûûÿûûûÿúúúüûûûÿmmmC,,,ŸŸŸmþþþÿùùùýúúúÿùùúÿþþýÿ¥¥»ÿBÿÿ9:SÿÚÚÝÿùùøÿÖÖâÿ .ÿ #ÿÿ5ÿ&ÿ¥¥²ÿååäÿúúúÿúúúÿúúúÿûûûÿßßçÿ+,]ÿ,ÿ ÿ°°»ÿððïÿúúúÿúúúÿùùùüûûûÿmmmC,,,ŸŸŸmþþþÿùùùýúúúÿùùùÿýýüÿ··ÊÿUÿÿXXqÿÞÞÝÿùùùÿååëÿ>>ÿ67†ÿ0ÿ**Jÿ*+_ÿkk|ÿááàÿùùùÿúúúÿúúúÿúúúÿÕÕßÿHÿ *ÿÿ¥¥³ÿïïîÿúúúÿúúúÿùùùüûûûÿmmmC,,,ŸŸŸmþþþÿùùùýúúúÿùùúÿûûúÿÛÛãÿ12rÿÿVVnÿÐÐÏÿôôôÿúúúÿÉÉÚÿhiÿjk“ÿÇÇÕÿ?@hÿMMcÿääåÿøøùÿúúúÿùùùÿ÷÷õÿ¤¤¸ÿ%ÿ #ÿÿ§§µÿññðÿúúúÿúúúÿùùùüúúúÿmmmC,,,žžŸmýýýÿøøøýùùùÿùùùÿøøøÿøø÷ÿklŸÿAÿ..Dÿ¬¬±ÿØØ×ÿîîîÿôôôÿóóòÿêêèÿÇÇÑÿ2ÿiiÿïïîÿøøøÿùøùÿõõõÿÞÞáÿAA_ÿÿÿ ÿ·¶ÂÿóóòÿùùùÿùùùÿøøøüúúúÿlmlC,,,žžžmüüüÿ÷÷÷ýøøøÿøøøÿøøøÿùùùÿÐÐÛÿ:;‡ÿÿ]]vÿ¦¦®ÿ¾¾¾ÿÈÈÈÿÄÄÇÿªª¸ÿ@@[ÿ (ÿÇÇÔÿõõôÿ÷÷÷ÿññðÿÛÛÛÿuuÿÿ ÿÿ8ÿÏÏÖÿõõõÿøøøÿøøøÿ÷÷÷üùùùÿlllC,,,žžžmüüüÿ÷÷÷ý÷ø÷ÿøøøÿøøøÿ÷÷÷ÿøøøÿ¶¶Ìÿ9:‡ÿ%ÿ""6ÿOOcÿZYnÿ<ÿWÿaÿ^ÿFF{ÿ§§¾ÿëëíÿóóòÿóóóÿôóôÿôóôÿôôôÿóôóÿóóôÿòóóüôôôÿjjjC+++šššm÷÷÷ÿòòòýóóóÿóóóÿóóóÿóóóÿóóóÿñðñÿÝÝÞÿzz’ÿ&ÿÿ&ÿ(ÿ3ÿOÿdÿdÿ''jÿaaÿ´´ÇÿêêìÿôôóÿòòòÿòòòÿóóóÿóóóÿóóóÿóóóÿóóóÿóóóÿòòòüóóóÿjjjC+++šššmöööÿñññýòòòÿòòòÿòòòÿòòòÿòñòÿééèÿ„„ÿ ÿ(ÿ,ÿ2ÿQÿ^ÿcÿCC}ÿ­ÿÑÑÛÿñññÿôôóÿïïïÿææåÿáááÿêêêÿñññÿòòòÿòòòÿòòòÿòòòÿòòòÿñññüòòòÿiijC +++™™™mõõõÿðððýñññÿñññÿñññÿñññÿññðÿÃÃÏÿ 6ÿ-ÿ.ÿ >ÿWÿYÿTT…ÿ²²Åÿççéÿôôóÿòòòÿðððÿñññÿææèÿ¯¯¸ÿ°°¶ÿÅÅÄÿåååÿðððÿñññÿñññÿñññÿñññÿðððüòòòÿiiiC+++™™™mõõõÿðððýñññÿñññÿñññÿððñÿòòñÿtt”ÿ,ÿ2ÿ @ÿ Iÿ//gÿ««¿ÿëëìÿóóòÿñðñÿðððÿñññÿñññÿñññÿÛÛãÿPÿ##=ÿ„„“ÿÆÆÆÿëëëÿñññÿñññÿñññÿñññÿðððüñññÿkkkEÿÿÿ››œ‡‡Š+++™™™môôôÿðïðýðððÿðððÿðððÿðððÿíííÿCCsÿFÿ3ÿ4ÿEEtÿÓÓÚÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿðððÿèèèÿJJŠÿ.ÿ5ÿ¡¡©ÿßßßÿðððÿðïïÿïïïÿîîîÿíííüììíÿuuuPÿÿÿUUU¢¢£ŸŸ¡ šš™+++™˜˜móôóÿïïïýðððÿðððÿðïðÿïïïÿééêÿ;;uÿWÿ+ÿGÿÀÀÇÿìììÿïïïÿððïÿðððÿðððÿðððÿðððÿðððÿïïïÿìììÿNN‚ÿRÿÿnn…ÿÕÕÔÿëëìÿëëëÿééêÿçççÿãããüßßßÿqqqKwwx¢¢¢žž  ‘‘‘***˜˜˜móóóÿîîîýïïïÿïïïÿïïïÿîîîÿìììÿJJ„ÿeÿ!ÿBBeÿÍÍÍÿìììÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿïïïÿííîÿãããÿCCxÿSÿÿQQnÿÌÌÌÿààáÿÞÞßÿÛÛÛÿÖÖÖÿÐÐÐüËËÌÿvuvB¡¡¢¡¡¡œœœ***˜˜—mòòòÿíííýîîîÿîîîÿîîîÿíííÿññïÿqq ÿ%%~ÿ&ÿ<<_ÿ¿¿ÀÿççèÿîîîÿîîîÿîîîÿîîîÿîîîÿîîîÿíííÿéééÿÁÁÈÿOÿ Dÿ#ÿPPnÿ¿¿¿ÿÌÌÍÿÉÉÊÿÅÅÆÿÀÀÁÿºº»û··¸ÿvvv,£££ŸŸ ***———mñññÿìììýíííÿíííÿíííÿíííÿïïïÿ¼¼Ìÿ..ŒÿGÿ?ÿ¢ÿÑÑÑÿèèéÿíííÿîîîÿîîîÿíííÿìììÿåååÿÏÏÏÿ``ÿ3ÿ5ÿ"ÿ\\uÿ¬¬«ÿ³³´ÿ°°±ÿ­­®ÿ©©ªÿªª«ÿ¹¹ºÕåå墢¤¡¡¢ œœœ***———mñððÿìììýíííÿíííÿíííÿíííÿìììÿëëêÿtt§ÿ++‰ÿÿWWtÿ££¥ÿÄÄÃÿØØØÿàààÿááâÿÞÞÞÿÔÔÓÿ¼¼¿ÿff„ÿ,ÿ5ÿVVzÿUUvÿ  «ÿÀÀÀÿÅÅÅÿÃÃÃÿÄÄÄÿÆÆÇýÃÃÃ€  ¢ŸŸ  ˜˜™***–––mðððÿëëëýìììÿìììÿìììÿìììÿìììÿìììÿÜÜßÿ``¤ÿ((ƒÿÿBB]ÿ‰‰—ÿ¦¦«ÿ²²µÿ´´·ÿªª±ÿƒƒ–ÿ00Tÿ+ÿ_ÿ..ÿûûüÿüüþÿþþýÿòòòÿçççÿÛÛÛÿÒÒÒýÁÁÁï___ÿÿÿ¡¡¢ŸŸ ‚‚***–––mïïïÿêêêýëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿëëìÿÝÝàÿ~~°ÿ99˜ÿ Pÿ3ÿ!!Cÿ11Oÿ..Oÿ?ÿ5ÿNÿlÿKK‹ÿYY•ÿ÷÷ùÿññòÿëëëÿâââÿ×××ÿÏÏÏýÀÀÀî[[[ÿÿÿ¡¡¡***•••mîîîÿêêêýëëëÿëëëÿëëëÿëëëÿëëëÿëëëÿêêêÿëëëÿêêéÿÆÆÐÿ»ÿ__§ÿ??Žÿ//|ÿ22ÿ@@‹ÿYY›ÿ{{©ÿ²²ÂÿÒÒÓÿÃÃÁÿôôôÿëëëÿâââÿØØØÿÐÐÐý¿¿¿ìOOOÿÿÿ¡¡¢¨¨©***•••mîîîÿéééýêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿêêêÿééêÿëëëÿííëÿççåÿÝÝÞÿØØÜÿÙÙÝÿàààÿèèæÿììêÿæææÿ×רÿÂÂÃÿíííÿâââÿØØØÿÐÐÐý¾¾¾êEEEÿÿÿ  ¡ŸŸŸ)))••”míííÿéééýéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿééêÿêêêÿééêÿéééÿèèéÿççèÿâââÿÕÕÕÿÂÂÂÿäääÿ×××ÿÐÐÐý¾¾¾é===ÿÿÿŸŸ    ‡‡‹)))”””míííÿèèèýéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿéééÿçççÿáááÿÒÒÒÿÁÁÁÿÚÚÚÿÏÏÏý¾¾¾éAAAÿÿÿ   )))”””mìììÿèèçýèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿæææÿÞÞÞÿÍÍÎÿÁÁÁÿÓÓÓý¾¾¾èAAAÿÿÿ–––vvv)))”””mìììÿçççýèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿäääÿÛÛÛÿÈÈÉþÅÅÅýÀÀÀèCCCÿÿÿ)))”””lìììÿçççûèèèýèèèýèèèýèèèýèèèýèèèýèèèýèèèýèèèýèèèýèèèýèèèýèèèýèèèýèèèýèèèýçççýãããýØØØþÇÇÈÿÉÉÉæˆˆ‡ ùùú'''‘‘‘gìììùçççêèèèìèèèìèèèìèèèìèèèìèèèìèèèìèèèìèèèìèèèìèèèìèèèìèèèìèèèìèèèìèèèìæææíâââî×××çÏÏϯÐÐÐÜÜÝÈÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ ñññŸŸŸg¨¨¨k§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§l§§§kªªªqƒƒƒ:MMMÿÿÿòòòõÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿÊÊʈ|||ÿÿÿòòòóÿÿÿûþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþýþþþüÿÿÿÿËˈ~~~ÿÿÿóóóõÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿÌÌ̇ÿÿÿòòòõÿÿÿüÿÿÿÿÿÿÿÿþþþÿùùøÿõõóÿööõÿëëëÿÚÚÜÿÏÏÒÿÎÎÑÿÖÖ×ÿââãÿïïíÿúúúÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿþþþþÿÿÿÿÌÌ̇ÿÿÿòòòõÿÿÿüþþþÿÿÿÿÿååéÿon|ÿÿqq€ÿ99Hÿ.ÿ5ÿ<ÿ<ÿ88Lÿwv€ÿ¾¾ÃÿêêèÿýýýÿþþþÿþþþÿþþþþÿÿÿÿËˡ~~ÿÿÿñññõþþþüýýýÿÿÿÿÿ··Éÿÿÿ ÿ%&Jÿ•–³ÿÎÎáÿØØèÿÁÁÙÿ€€ªÿQÿ'ÿ‡‡”ÿááßÿüüýÿýýýÿýýýþÿÿÿÿËÊʇ~~~ÿÿÿðððõýýýüüüüÿÿÿÿÿ––©ÿÿÿMMjÿòòöÿÿÿýÿùùöÿýýüÿÿÿþÿÿÿÿÿååðÿEF„ÿÿˆˆ–ÿîîìÿýýýÿüüüþÿÿÿÿÊÊʇ~~~ÿÿÿïïïõýýýüúúúÿÿÿÿÿEE`ÿ ÿ()?ÿóòöÿïïðÿ˜˜¥ÿ’’œÿ×××ÿùùùÿùùúÿÿÿþÿÎÎÝÿ Xÿ"ÿËËÐÿûûûÿûûûþÿÿÿÿÉÉɇ}}}ÿÿÿîîîõüûüüùùùÿúúûÿ./Wÿÿ™™©ÿÿÿÿÿnoƒÿÿ ÿll{ÿééèÿûûûÿøøùÿÿÿýÿST†ÿÿ••¢ÿùùøÿúúúþþþþÿÈÈȇ}}}ÿÿÿîîîõûûûüøøøÿúúúÿ89iÿÿÁÁÊÿÿÿÿÿYYˆÿRÿ5ÿ)*QÿÑÑÓÿùùùÿøøøÿÿÿÿÿYY}ÿÿuu„ÿùùøÿùùùþýýýÿÈÈȇ|||ÿÿÿíîíõúûúüøøøÿÿÿþÿllÿ"ÿ³³»ÿõõóÿééðÿ´ÿÌÌÚÿ))JÿÇÇÍÿúúùÿøøøÿêêîÿ;ÿÿvvˆÿûûùÿøøùþýýýÿÈÈȇ|||ÿÿÿìììõùùùüøøøÿûûúÿÒÒáÿNÿQQ^ÿÂÂÄÿÛÛÛÿààÞÿzz‹ÿ%%Cÿóóõÿöööÿòòñÿii€ÿÿÿ˜˜¦ÿûûúÿ÷÷÷þüüüÿÇÇLJ|||ÿÿÿëëëõøøøü÷÷÷ÿöö÷ÿüüùÿ´´ÑÿXÿ:ÿ00Mÿ;ÿ''OÿÙÙáÿññîÿÐÐÔÿZ[sÿÿ$ÿ!ÿÓÓÚÿ÷÷÷ÿö÷öþûûûÿÆÆÆ‡{{{ÿÿÿêêêõ÷÷÷üöööÿöööÿõõöÿûûøÿããìÿ¡¡Åÿ‹‹°ÿ¶¶Ìÿêêêÿ¾¾Äÿgg{ÿ/ÿÿ'ÿÿdd~ÿúúøÿõõõÿöööþúúúÿÅÅŇ{{{ÿÿÿéééõöööüõõõÿõõõÿõõõÿôôôÿôôõÿùùôÿèèäÿ¦¦¯ÿFF_ÿ"ÿÿ!ÿ 7ÿ>ÿCDkÿííïÿôôôÿõõõÿôôôþøøøÿÄÄćzzzÿÿÿèèèõõôõüôôôÿôôôÿôôôÿóóóÿííìÿœœªÿ))Fÿÿÿ,ÿ BÿSÿ,,jÿ‹‹ªÿòòóÿóóóÿôôôÿôôôÿóóóþ÷÷÷ÿÃÃÇyyyÿÿÿçççõóóóüòòòÿòòòÿòòòÿññïÿss‹ÿÿ!ÿ7ÿOÿcÿIIƒÿŸŸ¹ÿêêìÿ÷÷õÿððñÿóóòÿòòòÿòòòÿòòòþöööÿ‡{{{ÿÿÿåæåõòòòüñññÿðññÿõõôÿ¤¤¶ÿÿ3ÿ Fÿ`ÿppšÿËËÖÿööôÿ÷÷õÿëëìÿ»»ÁÿÎÎÎÿìììÿñññÿñññÿñññþõõõÿÁÁÁ†xxxÿÿÿåååõòòòüñññÿïïïÿøøöÿ>>iÿ1ÿ>ÿDDvÿÓÓÛÿùùöÿòòòÿïïïÿïïïÿèèìÿJÿLL_ÿÎÎÎÿððñÿðððÿðððþóóóÿ¿¿¿Š”””––˜ÿÿÿäääõñññüðððÿîîîÿïïîÿ,,jÿ5ÿ11Zÿëëêÿðððÿîîïÿðððÿðððÿîîïÿññïÿ>>~ÿÿ––¢ÿììëÿìììÿêêêþéééÿ¶¶¶Žyyy  ¡ ——˜ÿÿÿãããõïïïüïïïÿììíÿòòïÿ@@…ÿ2ÿll‚ÿëëéÿîîîÿîîîÿîîîÿîîîÿíìíÿèèçÿ++gÿ,ÿtt‡ÿßßÝÿÙÙÙÿÓÓÓþÊÊËÿªªª„Ž¡¡¢    ÿÿÿâââõîîîüîíîÿììíÿõöòÿ²ÿ OÿII`ÿÕÔÒÿììíÿîîîÿîîîÿííîÿììéÿ™™ªÿ3ÿÿooÿ¹¹¸ÿ³³´ÿ®®¯ú²²²ÿ¦¦¦C¢¢£   ÿÿÿáááõíííüìììÿìììÿììíÿßßáÿAA–ÿ0ÿ~~‰ÿÆÆÅÿÚÚÙÿÝÝÜÿÒÒÑÿˆˆ—ÿ6ÿ44kÿ¡¡³ÿÇÇÌÿÓÓÓÿÌÌÌüÈÈÈÿ···ƒµµµ  ¡  ¢››œÿÿÿàààõìììüëëëÿëëëÿëëëÿíííÿÒÒÚÿRRŸÿ Hÿ++PÿNNhÿKKgÿLÿ>ÿ++uÿ¸ÿÿÿÿÿïïðÿàààüÐÐÐÿ±±±„±±±žžž  ¡  ¡ŠŠŠÿÿÿßßßõëëëüêêêÿêêêÿêêêÿêêêÿìììÿêêçÿººÔÿ}}°ÿ\\•ÿ__—ÿ||¬ÿ­­ÇÿÓÓÔÿÓÓÐÿðððÿÜÜÜüÏÏÏÿ¯¯¯³³³  ¡¢¢£ÿÿÿÞÞÞõêêêüêêêÿêêêÿêéêÿêêêÿéééÿèèéÿííëÿòòìÿóóîÿóóîÿòòíÿììêÿ×רÿÌÌÍÿáááüÎÎÎÿ®®®~°°°   ™™šÿÿÿÝÝÝõêêéüéééÿéééÿéééÿéééÿéééÿéééÿèèèÿççèÿççèÿççèÿççèÿæææÿÓÓÔÿÉÉÉûÑÑÑÿ¯¯¯}¯¯¯  ¢™™™ÿÿÿÝÝÝñéééùèèèüèèèüèèèüèèèüèèèüèèèüèèèüèèèüèèèüèèèüèèèüäãäüÍÍÎùÆÆÇÿ²²²|¯¯¯ÿÿÿÜÜÜöéééüèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿçççÿáááýÍÍÍÿÇÇÇz¾¾¾ÿÿÿÙÙÙ3ééé4èèè4èèè4èèè4èèè4èèè4èèè4èèè4èèè4èèè4èèè4ççç4ÝÝÝ8ÔÔÕ»»»ÿÿÿÿÿÿÿÿøøøøøøøøøøøøøøøøøøøøøøøø?øøÿøÿøÿøÿÿÿÿÿ(  ’’’¨¨¨/§§§,§§§-§§§-¦¦¦-¦¦¦-§§§-§§§-§§§-¨¨¨-$˜˜˜¨¨¨ÞÞÞ{ÿÿÿÿýýýþûûüÿûûüÿýýþÿþþþÿüüüÿüüýÿþþþÿÿÿÿÿïïïÎççç­­¬áááxÿÿÿÿþþþúÿÿÿûÿÿþûääãûßßßûúúøûÿÿÿûþþþûÿÿÿýñññÊéé鬬¬àààzÿÿþÿëëðþ11Aÿ%&;ÿ``{ÿppŒÿDEeÿŒŒ”ÿÿÿÿÿþþþÿðððÍééé«««ÞÞÞzÿÿÿÿ½½ÈþÿÔÔÝÿÝÝÜÿüüûÿÿÿÿÿ66_ÿ’’˜ÿÿÿÿÿíííÍçç窪ªÜÜÜzÿÿÿÿ‰‰¡þSSdÿÅÆÖÿÿ““¢ÿÿÿÿÿ²²Çÿ,,@ÿÿÿÿÿêêêÍååå©©©ÜÜÜzüüûÿÎÎÞþ23Rÿëëéÿ  µÿ{{ÿÿÿÿÿRRhÿ22EÿÿÿÿÿèèéÍäää§§§ÚÚÚz÷÷øÿÿÿüþ©ªÃÿRSwÿ{|”ÿÊÊÎÿJK]ÿÿŸÿÿÿÿÿèèèÍââ⦦¦ØØØzöööÿòòòþÿÿýÿ¼¼Áÿ>>Sÿÿ:ÿss”ÿûûúÿôôôÿçççÍßßߤ¤¤ÖÖÖzòòòÿüüùþ~~”ÿÿ YÿŽŽ²ÿááèÿééæÿòòòÿóóóÿåååÍÞÞÞ£££ÕÕÕzïïðÿ÷÷öþ Bÿ[[ÿøøöÿööóÿññóÿHÿØØ×ÿóóóÿÞÞßϸ¸¹¡¡¡ÓÓÓzííîÿùùõþ""dÿªª«ÿúúùÿööõÿåååÿ*ÿŸŸ¤ÿÅÆÆÿ¶··¾§§§    ÑÑÑzíííÿïðíþ½½Ôÿ%%[ÿ‚‚“ÿƒƒ—ÿPÿŸŸ¼ÿââáüÅÅÅï   ÿÿÿžŸŸŸÏÏÏyìììÿéééýïïìÿääêÿ§§Áÿ§§ÁÿÓÓÚþááàüÌÌÍíÿÿÿœœœœœœÍÍÍzêêêÿèèèþèèèÿææçÿîîëÿîîìÿÙÙÙþÄÄÅî”””ùùù„„„——˜šššÌÌÌPêêê±èèè¦èèè§èèè§ççè§èèè¦ÖÖצ¼¼¼åååÿÿààààààààààààààà?Sigil-0.9.9/src/Resource_Files/javascript/000077500000000000000000000000001321676412500204555ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/javascript/book_view_current_location.js000066400000000000000000000026521321676412500264360ustar00rootroot00000000000000var startNode = document.getSelection().anchorNode; if ( startNode != null ) { // create a reverse function for jQuery $.fn.reverse = [].reverse; var hierarchy = $( startNode ).parents().reverse().add( $( startNode ) ) ; var hierarchy_string = hierarchy.map(function () { if ( undefined != $( this ).parent().get( 0 ).tagName ) { var first_part = $( this ).parent().get( 0 ).tagName + " "; // Webkit and QDomDocument count text nodes differently for some reason, // so we count non-text children until we reach the caret text node if ( this.nodeName != "#text" ) return first_part + $( this ).parent().children().index( this ); else return first_part + jQuery.inArray( this, $( this ).parent().contents() ); } }) .get().join(","); hierarchy_string += "," + startNode.nodeName + " -1" ; }Sigil-0.9.9/src/Resource_Files/javascript/format_block.js000066400000000000000000000024711321676412500234610ustar00rootroot00000000000000function format_block( startNode, element_name, preserve ) { var nodeContent = startNode.innerHTML; // Because people will moan like hell if these are left in nodeContent = nodeContent.replace( /xmlns=\"http:\/\/www\.w3\.org\/1999\/xhtml\"/g, "" ); // Create a new tag with the desired name. var newBlock = document.createElement( element_name, "http://www.w3.org/1999/xhtml" ); if (preserve) { // Copy over all the attributes from the old block-level tag. var arrAttr = startNode.attributes; for(var j = 0; j < arrAttr.length; j++) { if(arrAttr[j].value != "" && arrAttr[j].value != "null") { var a = arrAttr[j].nodeName.toLowerCase(); var v = arrAttr[j].nodeValue; switch(a) { case "class": newBlock.className = v; break; case "style": newBlock.style.cssText = v; break; default: newBlock.setAttribute( a, v ); break; } } } } // Inject the content from the old tag and replace the node. newBlock.innerHTML = nodeContent; return newBlock; }; Sigil-0.9.9/src/Resource_Files/javascript/get_ancestor.js000066400000000000000000000007461321676412500234770ustar00rootroot00000000000000// From the current node, walk up the parent hierarchy until find a matching // element matching one of the specified node names. function get_ancestor(startNode, targetNodeNames) { var found = false; while( found == false && node != null ) { for( var i = 0; i < 1; i++ ) { if ( node.nodeName.toLowerCase() == targetNodeNames[i].toLowerCase() ) { return node; } } node = node.parentNode; } return node; }; Sigil-0.9.9/src/Resource_Files/javascript/get_ancestor_attribute.js000066400000000000000000000007651321676412500255630ustar00rootroot00000000000000// Uses get_ancestor.js // From the current node, walk up the parent hierarchy until find a matching // element matching one of the specified node names. If found return the value // of the attribute matching the specified name if any. function get_ancestor_attribute(startNode, targetNodeNames, attributeName) { var ancestorNode = get_ancestor(startNode, targetNodeNames); if ( ancestorNode != null) { return node.getAttribute(attributeName.toLowerCase()); } return null; }; Sigil-0.9.9/src/Resource_Files/javascript/get_block.js000066400000000000000000000012761321676412500227520ustar00rootroot00000000000000var block_elements = ["address", "blockquote", "del", "div", "dl", "fieldset", "form", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "ins", "noscript", "ol", "p", "pre", "script", "table", "ul"]; // Obviously this assumes that the input is well-formed and there *is* a block node somewhere up the hierarchy function get_block( node ) { var found = false; while( found == false && node != null ) { var i = 0; while( node.nodeName != block_elements[i] && i < block_elements.length ) { i++; } if( i == block_elements.length ) { node = node.parentNode; } else { found = true; } } return node; }; Sigil-0.9.9/src/Resource_Files/javascript/get_parent_tags.js000066400000000000000000000012551321676412500241640ustar00rootroot00000000000000var node = document.getSelection().anchorNode; function get_node_html(node) { var html = "<" + node.nodeName; var arrAttr = node.attributes; for( var i = 0; i < arrAttr.length; i++ ) { if( arrAttr[i].value != "" && arrAttr[i].value != "null" ) { html += " " + arrAttr[i].name + "='" + arrAttr[i].value + "'"; } } html += ">"; return html; } var totalHtml = ""; // If we are in a #text node jump to it's parent. if ( node.nodeType == 3 ) { node = node.parentNode; } while ( node != null && ( node.nodeName.toLowerCase() != 'body' ) ) { totalHtml = get_node_html(node) + totalHtml; node = node.parentNode; } totalHtml;Sigil-0.9.9/src/Resource_Files/javascript/get_range.js000066400000000000000000000002771321676412500227540ustar00rootroot00000000000000var start_node = $START_NODE; var end_node = $END_NODE; var selectRange = document.createRange(); selectRange.setStart(start_node, $START_OFFSET); selectRange.setEnd(end_node, $END_OFFSET); Sigil-0.9.9/src/Resource_Files/javascript/get_segment_html.js000066400000000000000000000061231321676412500243420ustar00rootroot00000000000000// uses external get_block.js var node = document.getSelection().anchorNode; var offset = document.getSelection().anchorOffset; var splitNode = node.parentNode; var splitOffset = 0; function get_child_offset( node ) { for( var childIndex = 0, e = node; e = e.previousSibling; ++childIndex ); return childIndex; } if ( node.nodeType == 3 ) { // We are in a #text node. Will want to split it at the caret position // if we are not at the end of the node text. if ( offset == 0 ) { // Splitting will mean the parent tag will become an empty tag. // Keep walking up parent nodes until either the left side will have // content, or we hit the body tag. This is to prevent leaving // an empty tag like or

which if user does // not have a Clean/Tidy turned on will be left behind cruft. var parent = node.parentNode; while ( parent != null ) { if ( parent.childNodes[0] != node ) { // We are not the first child of this parent, so can split. break; } node = node.parentNode; parent = node.parentNode; if ( parent.nodeName == "body" ) { // We are going to split here rather than keep walking up. break; } } if ( parent != null ) { splitNode = parent; splitOffset = get_child_offset(node); } } else if ( offset <= node.length - 1 ) { node.splitText( offset ); // Our range will be up to past this #text node splitOffset = get_child_offset(node) + 1; } else { // The selection should be treated as past this node. // We will walk up the hierarchy until either we find that: // (a) we are not the last child node of this parent, or // (b) we have reached the block node, and will split after that instead var blockNode = get_block( node ); var parent = node.parentNode; while ( parent != null ) { if ( parent.childNodes[parent.childNodes.length - 1] != node ) { // We are not the last parent so will split before the next node splitNode = parent; splitOffset = get_child_offset(node) + 1; break; } if ( parent == blockNode ) { // We reached the parent and must be the last node within it splitNode = parent.parentNode; splitOffset = get_child_offset(parent) + 1; break; } node = parent; parent = node.parentNode; } } } else { // We are not in a #text node (such as between
tags) splitNode = node; splitOffset = offset; } var range = document.createRange(); range.setStart( document.body, 0 ); range.setEnd( splitNode, splitOffset ); var serialiser = new XMLSerializer(); var contentForFirstFile = new String( serialiser.serializeToString( range.extractContents() ) ); var extractedText = contentForFirstFile.valueOf(); contentForFirstFile.valueOf();Sigil-0.9.9/src/Resource_Files/javascript/get_tag_html.js000066400000000000000000000005261321676412500234540ustar00rootroot00000000000000var node = document.getSelection().anchorNode; var parent = node.parentNode; var xml = "<" + parent.nodeName; var arrAttr = parent.attributes; for(var i = 0; i < arrAttr.length; i++) { if(arrAttr[i].value != "" && arrAttr[i].value != "null") { xml += " " + arrAttr[i].name + "='" + arrAttr[i].value + "'"; } } xml += ">"; xml;Sigil-0.9.9/src/Resource_Files/javascript/javascript.qrc000066400000000000000000000011411321676412500233270ustar00rootroot00000000000000 jquery-2.2.4.min.js jquery.scrollTo-2.1.2-min.js book_view_current_location.js new_selection.js get_range.js get_segment_html.js format_block.js get_block.js jquery.wrapSelection.js get_ancestor.js get_ancestor_attribute.js set_ancestor_attribute.js get_parent_tags.js Sigil-0.9.9/src/Resource_Files/javascript/jquery.wrapSelection.js000066400000000000000000000545031321676412500251570ustar00rootroot00000000000000/** * wrapSelection jQuery plugin v0.2 beta-2 * @copyright Copyright (c) 2008, Crossway Books * @author Stephen Smith * @author Jeremy Peterson * @version 0.2.0 */ (function ($) { /** * jquery getRangeAt function */ $.fn.getRangeAt = function() { var selectionParent = this;// element from the mouseup var range = $.fn.range;// Reference to range object // Initialize variables range.ClearVariables(); range.setRange();// gets Selection range // Verify what container the selection is allowed in. // Check if First node Selection is in selectionParent // Assume mouseUp is in the selectionParent (or last node) if (this[0] == document) {// Skips check if called like $().wrapSelection // Do nothing } else{ var checkFirst = $(range.startContainer).parents().index(selectionParent); var checkLast = $(range.endContainer).parents().index(selectionParent); if ( checkFirst == -1 || checkLast == -1 ) {// restrict range to a specific container range.ClearVariables(); return false; }; }; // // set commonAncestorContainer // var commonAncestorContainer = $(range.startContainer).parents().filter(function(){ // return $(range.endContainer).parents().index(this) != -1; // })[0]; // selRange.commonAncestorContainer = commonAncestorContainer; return range;// returns range object, no chaining when getting Range }; $.fn.wrapSelection = function(options) { var range = $.fn.range; var selectClass = 'sel_' + new Date().getTime();// Unique Class, created on each highlight var defaults = { fitToWord: true, wrapRange: false, selectClass: selectClass, regexElementBlockers: new RegExp(/^BR$/),// fitToWord Var regexWordCharacterBasic: new RegExp(/^[A-Za-z0-9'\-]$/),// fitToWord Var regexWordCharacterFull: new RegExp(/^[A-Za-z0-9':,\-]$/),// fitToWord Var regexWordPunc: new RegExp(/^[:,]$/),// fitToWord Var regexWordNumbers: new RegExp(/^[0-9]$/)// fitToWord Var }; // build main options before element iteration var opts = $.extend({}, defaults, options); setWrapRange(this, opts.wrapRange); if (range.startContainer && range.endContainer){ if(opts.fitToWord) FitToWord(); SplitText(); var myCount = doWrap(); if (myCount) range.ClearAllRanges(); else range.ClearVariables(); // return opts.selectClass objects return $('.' + opts.selectClass); } else{ return $([]);// return empty node }; // Creates the range object function setWrapRange(element, newRange){ // console.log('set-Element:', element); if(newRange) $.fn.range = newRange; else $(element).getRangeAt();// test without parent call }; function SplitText() { var range = $.fn.range; var myIsSameNode = (range.startContainer == range.endContainer); if (range.startContainer.nodeType == 3 && range.startOffset > 0) { var myNew = range.startContainer.splitText(range.startOffset); if (myIsSameNode) {//if they're the same node, we want to make sure to assign the end to the same as the start range.endContainer = myNew; range.endOffset = range.endOffset - range.startContainer.length; } range.startContainer = myNew; range.startOffset = 0; } if (range.endContainer.nodeType == 3 && range.endOffset < range.endContainer.length) { range.endContainer.splitText(range.endOffset); range.endOffset = range.endContainer.length; } }; // Adjusts the range object to go around the words function FitToWord() { var range = $.fn.range; var myStart = fitToStartWord(range.startContainer, range.startOffset, 'normal'); var myEnd = fitToEndWord(range.endContainer, range.endOffset, 'normal'); range.startContainer = myStart.container; range.startOffset = myStart.offset; range.endContainer = myEnd.container; range.endOffset = myEnd.offset; }; function fitToEndWord (myContainer, myOffset, myType) { var myChar = ''; if (myOffset > 0) myChar = myContainer.nodeValue.substr(myOffset - 1, 1); else { var myReverse = getPrevChar(myContainer, myOffset); //if the prev character is also a word, then assume it's part of same word and it's ok to go forward if (opts.regexWordCharacterFull.test(myReverse.character)) { myChar = myContainer.nodeValue.substr(myOffset, 0, 1); myOffset = 1; } } if (opts.regexWordCharacterBasic.test(myChar)) {//go forward if (myType == 'normal') { var myNormal = getNextChar(myContainer, myOffset - 1); if (opts.regexWordCharacterFull.test(myNormal.character)) { return fitToEndWord(myNormal.container, myNormal.offset + 1, 'normal'); } } return {container: myContainer, offset: myOffset}; } else if (myType == 'normal' && opts.regexWordPunc.test(myChar)) {//possibly go back or forward, depending on context var myNormal = getNextChar(myContainer, myOffset); if (opts.regexWordNumbers.test(myNormal.character)) return fitToEndWord(myNormal.container, myNormal.offset, 'normal'); else return {container: myContainer, offset: myOffset - 1}; } //otherwise go back var myReverse = getPrevChar(myContainer, myOffset - 1); if (myReverse.character.length == 1) return fitToEndWord(myReverse.container, myReverse.offset + 1, 'reverse'); else return {container: myContainer, offset: myOffset}; }; function fitToStartWord(myContainer, myOffset, myType) { var myChar = myContainer.nodeValue.substr(myOffset, 1); if (opts.regexWordCharacterBasic.test(myChar)) {//go back if (myType == 'normal') { var myPrev = getPrevChar(myContainer, myOffset); if (opts.regexWordCharacterFull.test(myPrev.character)) { return fitToStartWord(myPrev.container, myPrev.offset, 'normal'); } } return {container: myContainer, offset: myOffset}; } else if (myType == 'normal' && opts.regexWordPunc.test(myChar)) {//possibly go back or forward, depending on context var myPrev = getPrevChar(myContainer, myOffset); if (opts.regexWordNumbers.test(myPrev.character)) return fitToStartWord(myPrev.container, myPrev.offset, 'normal'); } var myNext = getNextChar(myContainer, myOffset); if (myNext.character.length == 1) return fitToStartWord(myNext.container, myNext.offset, 'reverse'); else return {container: myContainer, offset: myOffset}; }; function getNextChar(myContainer, myOffset) { if (myOffset < 0) { var myPrevContainer = $.fn.wrapSelection.dom.GetPreviousTextNode(myContainer); if (myPrevContainer) { myContainer = myPrevContainer; myOffset = myContainer.length; } } if (myOffset < myContainer.length - 1) { return {container: myContainer, offset: myOffset + 1, character: myContainer.nodeValue.substr(myOffset + 1, 1)}; } else { var myNext = $.fn.wrapSelection.dom.GetNextTextNode(myContainer, myContainer.parentNode); if (!myNext) return {container: myContainer, offset: myOffset, character: ''}; var myNextElement = $.fn.wrapSelection.dom.GetNextSiblingElement(myContainer); while (myNextElement && $.fn.compareDocumentPosition(myNext, myNextElement) & 2) { if (myNextElement.nodeName.match(opts.regexElementBlockers)) return {container: myContainer, offset: myOffset, character: ''}; myNextElement = $.fn.wrapSelection.dom.GetNextSiblingElement(myNextElement); } return {container: myNext, offset: 0, character: myNext.nodeValue.substr(0, 1)}; } }; function getPrevChar(myContainer, myOffset) { if (myOffset > 0) { return {container: myContainer, offset: myOffset - 1, character: myContainer.nodeValue.substr(myOffset - 1, 1)}; } else { var myPrev = $.fn.wrapSelection.dom.GetPreviousTextNode(myContainer); if (!myPrev) return {container: myContainer, offset: myOffset, character: ''}; var myPrevElement = $.fn.wrapSelection.dom.GetPreviousSiblingElement(myContainer); while (myPrevElement && $.fn.compareDocumentPosition(myPrev, myPrevElement) & 4) { if (myPrevElement.nodeName.match(opts.regexElementBlockers)) return {container: myContainer, offset: myOffset, character: ''}; myPrevElement = $.fn.wrapSelection.dom.GetPreviousSiblingElement(myPrevElement); } return {container: myPrev, offset: myPrev.length - 1, character: myPrev.nodeValue.substr(myPrev.length - 1, 1)}; } }; function doWrap() { var myRange = $.fn.range; var Spans = []; if (!myRange.startContainer || !myRange.endContainer) return false; var myNodes = myRange.GetContainedNodes(); var iLength = myNodes.length; //myNodes is arranged by level, so everything at the same level can be surrounded by a var myNodesSurrounded = 0; for (var i = 0; i < iLength; i++) { if (!myNodes[i][0]) continue; var myParent = myNodes[i][0].parentNode; var myParentName = myParent.nodeName; if (myParentName != 'DIV') { var mySpan = makeSpanElement(); myParent.insertBefore(mySpan, myNodes[i][0]); //Firefox has bugs if we don't attach the span first; we can't just append it because we don't know where it goes in the parent Spans.push(mySpan); } for (var j = 0, jLength = myNodes[i].length; j < jLength; j++) { //this works assuming there aren't any block-level elements contained in the lower element; so it should work for P, but not for UL if (myParentName == 'DIV') { if (myNodes[i][j].nodeType != 1) continue; var myChildNodes = myNodes[i][j].childNodes; var mySpan = makeSpanElement(); while (myChildNodes.length > 0) mySpan.appendChild(myChildNodes[0]); myNodes[i][j].appendChild(mySpan); //it's OK to do here because we're replacing the whole thing Spans.push(mySpan); } //appending automatically removes them else mySpan.appendChild(myNodes[i][j]); myNodesSurrounded++; } } return myNodesSurrounded; }; function makeSpanElement() { var mySpan = document.createElement('span'); mySpan.className = opts.selectClass; return mySpan; }; };// END wrapSelection $.fn.range = { onlySpacesMatch: new RegExp(/[^\t\r\n ]/), containedNodes: null, selection: null, commonAncestorContainer: null, startContainer: null, startOffset: null, endContainer: null, endOffset: null, collapsed: true,// default if null is true setRange : function(){ if (window.getSelection) { this.selection = window.getSelection(); } else if (document.selection) { // should come last; Opera! this.selection = document.selection.createRange(); } if (this.selection.getRangeAt) var range = this.selection.getRangeAt(0); else { // Safari! var range = document.createRange(); range.setStart(this.selection.anchorNode,this.selection.anchorOffset); range.setEnd(this.selection.focusNode,this.selection.focusOffset); } if (!range.toString().match(this.onlySpacesMatch)) return false; this.startContainer = range.startContainer; this.startOffset = range.startOffset; this.endContainer = range.endContainer; this.endOffset = range.endOffset; this.collapsed = range.collapsed; }, ClearAllRanges: function() { if (!$.fn.range.selection) return; //Firefox has bugs if you don't do both $.fn.range.selection.removeAllRanges(); $.fn.range.ClearVariables(); }, ClearVariables: function() { this.selection = null; this.commonAncestorContainer = null; this.containedNodes = null; this.startContainer = null; this.startOffset = null; this.endContainer = null; this.endOffset = null; this.collapsed = true;// Defualt is true if collapsed }, GetContainedNodes: function() { return this.doGetContainedNodes(); }, doGetContainedNodes: function() { if (this.containedNodes) return this.containedNodes; if (!this.startContainer || !this.endContainer) return []; var myStart = this.startContainer; var myEnd = this.endContainer; var myNodes = new Array([]); var myNode = myStart; var myPosition = $.fn.compareDocumentPosition(myStart, myEnd); var myParent = myNode.parentNode; var i = 0; while ((myPosition & 4) || myPosition == 0) {//while the current node is before if (myPosition & 16) myNode = myNode.firstChild; //the current node contains the end node else { if (myParent != myNode.parentNode) {// we're at a new level (either up or down), so we need a new span i++; myNodes[i] = new Array; myParent = myNode.parentNode; } myNodes[i].push(myNode); myNode = $.fn.wrapSelection.dom.GetNextSiblingOrParent(myNode); if (myPosition == 0) break; } myPosition = $.fn.compareDocumentPosition(myNode, myEnd); } this.containedNodes = myNodes; return myNodes; } }; // DOM Extend $.fn.wrapSelection.dom = { GetNextSiblingElement: function(myNode) { return $.fn.wrapSelection.dom.getElementOrder(myNode, 'next'); }, GetNextSiblingOrParent: function(myNode) { return $.fn.wrapSelection.dom.getSiblingOrParentOrder(myNode, 'next'); }, GetNextTextNode: function(myNode, myParent) { while (myNode = $.fn.wrapSelection.dom.getNodeOrder(myNode, myParent, 'next')) { if (myNode.nodeType == 3) return myNode; } return myNode; }, GetPreviousSiblingElement: function(myNode) { return this.getElementOrder(myNode, 'previous'); }, GetPreviousSiblingElement: function(myNode) { return this.getElementOrder(myNode, 'previous'); }, GetPreviousTextNode: function(myNode, myParent) { while (myNode = $.fn.wrapSelection.dom.getNodeOrder(myNode, myParent, 'previous')) { if (myNode.nodeType == 3) return myNode; } return myNode; }, getElementOrder: function(myNode, myType) { myType += 'Sibling'; while (myNode[myType] && myNode[myType].nodeType != 1) { myNode = myNode[myType]; } return myNode[myType]; }, getSiblingOrParentOrder: function(myNode, myOrder) { var mySibling = myOrder + 'Sibling'; if (myNode[mySibling]) return myNode[mySibling]; else if (myNode.parentNode) return this.getSiblingOrParentOrder(myNode.parentNode, myOrder) else return null; }, getNodeOrder: function(myNode, myParent, myOrder) {//checkCurrent should usually only be called recursively if (typeof myParent == 'undefined') myParent = document.body; if (myNode.hasChildNodes()) return (myOrder == 'next') ? myNode.firstChild : myNode.lastChild; if (myNode == myParent) return null; var mySibling = (myOrder == 'next') ? 'nextSibling' : 'previousSibling'; if (myNode[mySibling]) return myNode[mySibling]; while (myNode = myNode.parentNode) { if (myNode == myParent) return null; if (myNode[mySibling]) return myNode[mySibling]; } return null; } }; // Integrate Internet Explorer Code if (false) { $.extend($.fn.range, { ClearAllRanges: function(){ if (this.selection) this.selection.empty(); //clear the current selection; we don't want it hanging around this.ClearVariables(); }, setRange : function(){ this.selection = document.selection; var myRange = this.selection.createRange(); var myText = myRange.text; if (!myText.length) return false; if (!myText.match(this.onlySpacesMatch)) return false; //if only whitespace, return var myStart = this.getInitialContainer(myRange.duplicate(), 'start'); var myStartIndex = $.fn.wrapSelection.dom.SourceIndex(myStart.container, 'string'); var myEnd = this.getInitialContainer(myRange.duplicate(), 'end'); if (myStartIndex == $.fn.wrapSelection.dom.SourceIndex(myEnd.container, 'string')) myStart.container = myEnd.container; this.startContainer = myStart.container; this.startOffset = myStart.offset; this.endContainer = myEnd.container; this.endOffset = myEnd.offset; this.collapsed = (myStart.container == myEnd.container && myStart.offset == myEnd.offset); myRange.select();// Fix Hightlight for IE that get's reset by getInitialContainer start node (myNode.insertData) return true; }, getInitialContainer: function(myRange, myType) { if (myType == 'start') myRange.collapse(true); //collapse to start else myRange.collapse(false); //collapse to end var myParent = myRange.parentElement(); myRange.pasteHTML(''); var myTemp = $('#range-temp')[0]; var myOffset = 0; var myNode = $.fn.wrapSelection.dom.GetNextTextNode(myTemp, myTemp.parentNode); if (!myNode) { myNode = $.fn.wrapSelection.dom.GetPreviousTextNode(myTemp, myTemp.parentNode); myOffset = myNode.length; } myTemp.parentNode.removeChild(myTemp); // Get's offset and merges adjacent textnodes together if (myType == "start") { if (myNode.previousSibling && myNode.previousSibling.nodeType == 3) { var myPrev = myParent.removeChild(myNode.previousSibling); myOffset += myPrev.length; myNode.insertData(0, myPrev.nodeValue); } } else {// End node if (myNode.previousSibling && myNode.previousSibling.nodeType == 3) { var myPrev = myNode.previousSibling; myOffset += myPrev.length; myParent.removeChild(myNode); myPrev.appendData(myNode.nodeValue); myNode = myPrev; } } return { container: myNode, offset: myOffset }; } }); $.extend($.fn.wrapSelection.dom, { SourceIndex: function(myNode, myType) { var myOut = []; do { var myOffset = 0; while (myNode.previousSibling) { myNode = myNode.previousSibling; myOffset++; } myOut.unshift(myOffset); } while (myNode = myNode.parentNode); if (myType && myType == 'string') return myOut.join('.'); return myOut; } }); }; /** END Internet Explorer Code **/ // compareDocumentPosition - MIT Licensed, by ob. http://plugins.jquery.com/project/compareDocumentPosition $.fn.compareDocumentPosition = function(node1, node2) { //Gecko, Opera have it built-in if ("compareDocumentPosition" in document.documentElement) { $.fn.compareDocumentPosition = function(node1, node2) { return node1.compareDocumentPosition(node2); }; } //Internet Explorer else if ("sourceIndex" in document.documentElement && "contains" in document.documentElement) { $.fn.compareDocumentPosition = function(node1, node2) { if (node1 == node2) return 0; //if they don't have the same parent, there's a disconnect if (getRootParent(node1) != getRootParent(node2)) return 1; //use this if both nodes have a sourceIndex (text nodes don't) if ("sourceIndex" in node1 && "sourceIndex" in node2) { return comparePosition(node1, node2); } //document will definitely contain the other node if (node1 == document) return 20; else if (node2 == document) return 10; //get sourceIndexes to use for both nodes var useNode1 = getUseNode(node1), useNode2 = getUseNode(node2); //call this function again to get the result var result = comparePosition(useNode1, useNode2); //clean up if needed if (node1 != useNode1) useNode1.parentNode.removeChild(useNode1); if (node2 != useNode2) useNode2.parentNode.removeChild(useNode2); return result; //Compare Position - MIT Licensed, John Resig; http://ejohn.org/blog/comparing-document-position/ //Already checked for equality and disconnect function comparePosition(node1, node2) { return (node1.contains(node2) && 16) + (node2.contains(node1) && 8) + (node1.sourceIndex >= 0 && node2.sourceIndex >= 0 ? (node1.sourceIndex < node2.sourceIndex && 4) + (node1.sourceIndex > node2.sourceIndex && 2) : 1); } //get a node with a sourceIndex to use function getUseNode(node) { //if the node already has a sourceIndex, use that node if ("sourceIndex" in node) return node; //otherwise, insert a comment (which has a sourceIndex but minimal DOM impact) before the node and use that return node.parentNode.insertBefore(document.createComment(""), node); } }; } else { //Safari and others; will work in IE //inspired by base2: http://code.google.com/p/base2/ $.fn.compareDocumentPosition = function(node1, node2) { if (node1 == node2) return 0; if (getRootParent(node1) != getRootParent(node2)) return 1; //contains() only works if both are elements if (node1 == document || ("contains" in node1 && "contains" in node2 && node1.contains(node2))) { return 20; } else if (node2 == document || ("contains" in node1 && "contains" in node2 && node2.contains(node1))) { return 10; } return compareOffsetStrings(getOffsetString(node1), getOffsetString(node2)); //takes the sortable string from getOffset function compareOffsetStrings(offset1, offset2) { //they're siblings or at the same depth if (offset1.length == offset2.length) { return (offset1 < offset2) ? 4 : 2; } //the first one is either a parent or at a shallower depth else if (offset1.length < offset2.length) { //truncate the longer one var offset2start = offset2.substr(0, offset1.length); //if they're the same at this point, we know node1 is a parent if (offset1 == offset2start) return 20; //call itself again now that they're the same length return compareOffsetStrings(offset1, offset2start); } else { //flip the order of the arguments... var result = compareOffsetStrings(offset2, offset1); //...then shift the bits to get the correct result return (result & 4) ? result >> 1 : result << 1; } } //make a string that's sortable to determine a sourceIndex function getOffsetString(node) { var offsets = []; do { var offset = 0, prev = node; //count preceding siblings while (prev = prev.previousSibling) { offset++; } //get the total number of sibling nodes (before and after) var padLength = node.parentNode.childNodes.length.toString().length; var offsetLength = offset.toString().length; //zero-pad the offset to make sure the string compares properly if (padLength > offsetLength) { for (; offsetLength <= padLength; offsetLength++) { offset = "0" + offset; } } offsets.unshift(offset); } while ((node = node.parentNode) && node != document); //reverse the array to start the string at the top of the tree //return the final delimited string return offsets.join("."); } } } //node.ownerDocument gives the document object, which isn't the right info for a disconnect function getRootParent(node) { do { var parent = node; } while (node = node.parentNode); return parent; } //now that we've redefined the function during the first run, run it to get the actual value return $.fn.compareDocumentPosition(node1, node2); }; // end of closure })(jQuery);Sigil-0.9.9/src/Resource_Files/javascript/new_selection.js000066400000000000000000000002261321676412500236510ustar00rootroot00000000000000 // Has to be run after the code in get_range.js var selection = window.getSelection(); selection.removeAllRanges(); selection.addRange(selectRange); Sigil-0.9.9/src/Resource_Files/javascript/set_ancestor_attribute.js000066400000000000000000000007701321676412500255730ustar00rootroot00000000000000// Uses get_ancestor.js // From the current node, walk up the parent hierarchy until find a matching // element matching one of the specified node names. If found set the value // of the named attribute. function set_ancestor_attribute(startNode, targetNodes, attributeName, attributeValue) { var ancestorNode = get_ancestor(startNode, targetNodes); if ( ancestorNode != null) { ancestorNode.setAttribute( attributeName, attributeValue ); return true; } return false; }; Sigil-0.9.9/src/Resource_Files/mac/000077500000000000000000000000001321676412500170475ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/mac/MacOSXBundleInfo.plist000066400000000000000000000034321321676412500231660ustar00rootroot00000000000000 CFBundleVersion SGVERSION NSHumanReadableCopyright Copyright © Sigil Authors 2010-2014, GNU GPL v3 CFBundleShortVersionString SGVERSION CFBundleGetInfoString SGVERSION Sigil Open Source ePub Editor. See http://code.google.com/p/sigil/ CFBundleIdentifier com.sigil-ebook.Sigil.app CFBundleDocumentTypes CFBundleTypeExtensions epub CFBundleTypeIconFile epub.icns CFBundleTypeMIMETypes application/epub+zip CFBundleTypeName ePub ebook CFBundleTypeOSTypes EPUB CFBundleTypeRole Viewer CFBundleDevelopmentRegion English CFBundleExecutable Sigil CFBundleIconFile Sigil.icns CFBundleInfoDictionaryVersion 6.0 CFBundleName Sigil CFBundlePackageType APPL CFBundleSignature Sigl CSResourcesFileMapped NSPrincipalClass NSApplication LSApplicationCategoryType public.app-category.productivity LSMinimumSystemVersion 10.9.5 Sigil-0.9.9/src/Resource_Files/main/000077500000000000000000000000001321676412500172335ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/main/back-to-link-style_16px.png000066400000000000000000000011131321676412500242240ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÜ " äRìŸØIDAT8Ë“=hSQÇçåMß3­VD R\|8X*Îâ-%CÔÁ% AEC:mq§G‡â"ââ CQ„T*‚)”ˆ?ëâ"ØI(µÏ¤Éë»×á‘&­O‘ü§çþþçpι°IŽãÄÆÿ­&´ÍnÞÙc™}Òù ÷þÉH+ìû>™!Ç {f––~Ü=y¾zàð™»ûÜõ÷ʼn‚‰­œbðË7¨?m¦Z1¥›Ü«)[6t°c»=0û´ç­ëö› (—K¢”ÚÄC?[Që…aŽæ.ô•¸‡t½V³D„À"B­¶ŠR”˥ʉsU@eÓ[O]º¸º·w  CªÕ Æ´ÖÑÀDZ›&÷°¦Š«Ïg^.x¾¿‚eYFkÖß_Ak1¡a,MžâDpù#µúœŸÍ¼Õݽˬ­,~û*bY®-2ëlt ©®.~./0v=9:œsï$“óó¯ï!êªJ˜D4}A0 ‘PËþªnpN¥RÀ€LÞNÜ_üØo^<ê˜l¬­qLé¼g¥óžÄWdíúæµ-£sÏìÇ­ùVè¯×ÙL8Î^ÚQëüðþ´eòyáSl§ßvѬ©ñIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/back-to-link-style_22px.png000066400000000000000000000007341321676412500242310ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÜ 5R›³@iIDAT8ËÝ”?kÂ@†ß»ØVÈqùݺªCA°]„ÒÌÁ©ÐÕ¡_ øº)…|€ œ3‡þ¡R0ÎÒ¡»I:T¼.¹r* Ñââ³$7Ü“÷Þ ?`¯`ŒiŒ±ú.ÄõÀÓÅ6{IžÔwÅ+<<ßSèwÚ…?RÊ“6&ƒ(€… cÙŽ–®Ì”úöw®X•*,Ûǀğe€e À4· ÆXÍwÅ»*M¼‰Éš˜1vì»âk%i.Iÿ½‡/KâR*­ø®‘ª²ÜËËètk¡„FQôÖl‘jV—I–Z¶s°Ö17Œj¯;eòM®v¬Š)€³^wÖj—K¶ù+Öàœ×O³‰)fSž.,Û¡ÿžœsÊ Ã”r9+,Û9Tº$铪½¢r~zxºLL \ÜÒ©2xr}÷Ôl‘‹¬«ô;íÅ&c“ìdKÆáˆŒÃ‘†½æ…ÔôÉ›ÓÎIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/back-to-link-style_48px.png000077500000000000000000000036271321676412500242500ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d,IDAThCí–{lS×ǽîöß&mÒ´©ÕÚiÝV£Ä6B -:ëú‚I³2iÚºvݦ,¡!ÍËyÙÆvbÇvlÇŽCœ—ò๶Œ±W)ÚZuk‰RIH“@žöµ}¿ûžëk¢ÍªI ù+}unαœßç~çkRJ)¥”RJ)¥”RútòVWd´zJ^g3Ý£NÝÚfÊYÔd*ÉmwTÍž>ìAÃþRƒºtûËgÍûNÈl9Öc àׄ#¾ýðZ ÷«Ë··\%{šªœ—C•!¼ÿÎNœÎ@›Í‹Fka¹ú‘ÛSåí¯~µÑlò75#ä6¢d€t¼5œ‰€!ˆÆÚw}eÑ=«)Íé(_ì²ßÂb]±a±«ÊJ[TóYÌ©óŽÊ²ûÜCÚý'7~V-ãSÐRº¥¹Êzö@Iû"гø‡é xóÜ&”ìé#Ï=mË«ªÍwÔäÑ¿v]³•_ç\a®í­±%ï±å9é:Î;F\ŶÑãõµ#Í•Ðh>£–óɵ՘³¨Ý^Vî/ôÅšjêqæ½²è%t&ßÈq#¤øz¼sfξ·½ìFÿ¹]èï#­Žç{wÑbÜÞ, pþü¹l:úwa°?‹Î¦wb°÷úÇÈÁ¿ßÏÁÑF/zü¥oéÖ_X NKÁŠ£íd[e'ºCû0Y΂—*ÅÇåLÈò#„mô(ý½FµH†kLGÑÓß§@‹—ðý#ú)z;½ƒ~ŽÞMg«þ ÆùyŸ³oØrOh p—ZÚÇ+h5¼ØhðL´Ûðæ_ŸƒŒ{ù…+è5ˆ±@‰ŽD–×sÅÊ,VÞÌuZf±Qe±Ñ­4 Ž>I³`‰£ô4y–fáaÞÉ5Éâóót0Ë?ŦŸBƒÝS¶üš¼Oàª.¾7hªho)éD³ÇŒ>z_”¦Á*.œ¨bÃ4T+ 1‘߸¼ rœ01aÂÄ·q$LLŒ|û1Ä·/= #F"ŒD‰0QÂ`g¶Ág«Å_lÅøå­üfÃŽ¦ û`¨ºÇŽ¿„)ÜÇ/ù&Â1=f%=Âq"²–EëKXMˆ‡ø,@Öb½b™0åHxq¦"@¤-ü{>S Q‚DU‘Š€Áó €×f'@òoà îûÜÚb{§Ó‚ß(Ç»}ëÆÝ˜Å2ŒÏéq%¬ÇdD‹iI‡Ù˜îˆ„• D$™ˆh­u‰DD{‰}¢´×F>$™HŒí¥$Âö ¢½’ "‘0GpCÏ<>àÕ›Ôº_ù|«£äíS¡ Žü.â‹,$ ÓéÒc|V‡‰9A´˜$ÄL” ˆ–E‹$„W©ÉD¦ P@ØZ*â7‚0 Y¹–÷ 7öÀÔfÔÝ@ÈRñ›¯­%õ-Õ~4×ÕãoÿÚÀºS‘ïbtR‡&õ›I‚è09·3„™S@Òç%"@V³x²V‰ˆ¶J¤‘HDæf—Ŧ±µâl«ø ‰Hâ„zÎl$€ëã’j²ïn5:/´™ãà^ÀÅH¦¹.Oi1z• ÓZŒ‰Dh‘È”¤Å,I´V:‹×BÀ$@"Låzu³‹Db‘K´VTìD±G¢L…ÇlÿÔ†…¹L/~£Çl>tÜÔoþù!û_cË1rEǶJg"b"cLdœ‰\U`ôl/nø¨a™@„ˆ¨âä ÉãWœ^Â"Yi-B(›&ÊTxôO?B÷­7ñMõJÁ]Ý΢ÜPeÃd—¹ ‡þø4†e¶TìÛ"DDËDô¸:§e‘ßã?—œð²FqŠ;$ÖÒâgÈj:ƒN^|ëh)—¢¸øÄ%¸ ƒÒ8ðgqŒæ¿¼U!÷Þ•Íæý§»-=è ”âÝ‘%Lãë„ÐâÒ[jfƤÐ7±}“KùÆ–âüÌR Ì-Ã`Òáå¸0·gÄ¥p:.ñDfjC=ow.GVa˜¬ÆX4c±µeáWØ7‘‰öz/NyòOiŠpÏ×Û·|¡Ým5 Áh»½:½CÜàã³KpUZ‚ßÿc3̿ü|Õ!4¯·ÏÈyºAØTì›g¿)À1ÀùF¿âÚgò¡­Ö“Í.¼ÞðòA ÿ17_^{Þ֦ꚳ¦tu¿„Þño±u¾„×O?‰Ö²V4™‹û«Š¶7ʳ|t=í™çú²Ú`ÈòK²;û¶‡ü{«e|:ÕTýêË-6£¯­¼-NÞz'zW¡Ëηh-,S?vû+`)Ùªr]>ê  ÃÿŽxjౚÔå;CµÖ‚û;ìæ#oø{ æÒuéÎѶg³í…¹žê£Ók™êtJ)¥”RJ)¥”RJÿwi4ÿ;:L[y¡7SIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/chevron-down_16px.png000066400000000000000000000007761321676412500232420ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA± üa pHYs  ÒÝ~ütIMEÛ.©ŸS^tEXtSoftwarePaint.NET v3.5.100ôr¡gIDAT8O“Krƒ0DCÅÛ,“¥/ê;dálœ›`ƒ@}`2-!‰8•©êröëMË/ι·ïëõóðÄóz<~¾.³®+­ËJ˲l B ï=yçÈBÖFÍóLÓ4Øh¸‚ ùÀÐ:— Ë@32ÆÐhÆjPà°Ðù|ŽŠ©6¥Î³-ï#<ŽQe‚dÀ#ûP~“œœMñ™a¥U5ÀYFöާîGXs²R*ªLç|É&1YëJ%i†j€…Ù¼¬Ý–³ ` ˜Ç,þeÀw¡T”!,Ël˜߄ú¾¯¤msMÜíŸ3ï`|—aщ½Aº)Õü»DÀ¢¸íºj0sº1+õ‹e=.1& ÀµmUZÀµÌ0jÒJ“”ª˜à¼î6ƒûýV ò튛Þj’2UÕ= ÁÚ%nš¦Œ|v=n51˜kB2àœŠ±#|kªÿßq–gÄìéÉ?i´âBÈIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/chevron-down_48px.png000066400000000000000000000071271321676412500232440ustar00rootroot00000000000000‰PNG  IHDR00Wù‡gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< éIDATxÚbüÿÿ?ÃPÄ8Ô=@CÞ4ä=€î©·Œ—,Di =èLDk…ÆÄùÞó(’»$÷.ÉïR9¡Eh Q‡Z@„T…½fÔ{˜oD¤° ÷[Ÿ å½áJFh(®é_Pxd+뙼‹Ë×§bÁã¹b #›XXY€æÁÈDL ÿ4ˆý÷?Ã¿ß 6 LŒ@‹ê_“xl@Ü4, èx°™HŽùWÝ5ËÄÉØ  ÜøÏäÇÆḚ̂´BƒAL„“áæ†?@Õÿ&ÿúÃÀðùû†E[^2ܹ÷Ý›ƒa?PG,Ÿ'Òñb@¼h‡ 0@t-ÐK\ìÌ Œ õ Wíý ( €˜pZÁÌ|î÷oF†5GÞ1èɰ3xp2(‹q2HŠr0HŠq0(Êp2d„É2hjç£60̶u™áx9 ÞÁð‡ÉME–™A_‰›@ÇS'0¨¹DF ñ£ôÃß¿àÔv—a„ÛLLÍÿY˜w¬Üõ†!¨åÇ÷?ÔX~10|ýÊÀðî3(¹33„¸I0è%þ1JmÚ Œ£<Ž·&·­ ÿ˜ -µY”Ęn>a``9âÜP°Cþú#†§¯€¦10\ê«Áe @áöÀ†'ÀôÄÀönÿÙÏ -÷Þ¾ýÉ`, ! ü?†_ F¸[‹0˜ õ0‹ÓØR `*z6½­dÁ -Äİï Ão 9|@Gó/ uf ‹®=æà÷à,~Hzñ9\Î ÜùýÿÿïÀè gàa{ûÉ/†Àö‡ ï|cЗ``Päc`à†Ôç _€ØP“ÁH‡˜òXØ€ž˜Ô—‡d˜0‘oà`eO²gšÌİæ¤9žò€Éå:ÐñŸ¿‚¿Hzñ|é €XˆH³À!ÊÉrïñ›¿­ÁO:Ä‚­ù€© bém`ùó¨JU\Œ^¼õ”®'BÓ;°øclåcfÍvae8õˆ‘aÛE çAɘlx¸ !ÿå;Ã§à ŠÔ¹@²ˆ?r@±Yjü9‚åÛ÷?Œ}% Þ2¾ÿÆÀïÌ.Þ=qhù7`þdcÐP¦íßþüc,å@`1é¬ËÊpä#Ã`Šæ:˜—âxPȆøýgÀ ûìøé@2’H €b!¾ØWx€eÛÓßÿ™&5¬ú(ñ˜R]y˜Ái÷è c€ã¦-I.†—ïþ0ü–0ll, /32|ÿŽp<¨˜eÜ·À0~ô\Þƒ’kÐŽR*€b"£ö^ Ò0`QñxÊæ¯ Mk?3HrkEU`‰ ’÷_A雉AŸ ʬ ÿ€žøñèx.ˆãA™äøÀŒúðØñ߀ŽO!Õñ @Ld6AK(o.æÛkþb(\ü…ùïKWmHÚ•PßIêÿ:T΃Ï©¨ž+Æç¯Á.xt<¨è]FŽCˆ°ÀU<#6™ËÀ\ìÄÀɼߥ¿ És¾1|þüÁV‰!ÌŒAV’œ@!ÏÎI2 ôªmï?VRïÁ¶ß’î@¼»Ý(É+ Üøñ Xc½À`úó Ú@cf@i°€ê FÆp '6ß:*gÑ/†/þ3XËžHK=9ˆ ÜìǃòɃÐb’\Añ Gƒ\õX2|úò#°ýø §3wkÔy3¤ÿ´í?°@àÖ¶|’@ZØHaƒØkq2³p10²´›ù¢‚L %ž, FÀêHÇÔ@u…D.<ÃpÿÖ+g`Ãn'tdâ 8ÔþCýõm`à±@b‘iD‚qïÿÞÒò¼ rr 7Þð€[± ö¨wê¥qé§>S8vp¶%OŸøoÃ?FÆ‹3¦eȬÚÏðçÛonH*ýl]¼áB"¼ Ñ Ö ÊºÀFϯ ñ¡@Öˆ,Fô’F ¨fÈñü Ææª O¿ð€ .^ ƒyÙ!­UN¶ÿ w€!ÿÐŒL/úp9 €ð•awÁMf>ŽS[7ßeH.?lý`Pöºø!n{¬ Jbàa›}ãú†ÄÂà §/¼fÐz@ ˜r„ù Iê°°ÒÆ‚–©&È `Çœ1Hû¿™Q"7X–_JŽaù Fp!r47(Í=ñççO ã_0|úøäø=@;Aœ{„@¸ÛB&³ +VXK“ ˆ[é·BH„‹¡¶À€ÁÃIšáþ+`[îC:/€Æ=¸ûŠáî•;À|üï?°äùÇÄÈÌìï,ÏÀ)$ΰì$°žcƒôÀ '¾þÆpÿö[†Ÿ?ÿ‚¿h}:ÐîÈ•åÿ…RXÝ @¤ÔÄ j©’“õÁ»¿û [Îs~üö‡!ÄK˜T!£i{]`6acùÇÆðüÞ#Æ¿ÿþ3sˆJ3|%ÂðX(±³CúÄ î%Èñ_€ið.0ÂúÍ@Çwí(#¥& 2šŒ38X>1üeœÑÐwïý'`w2L‰X €ëˆíÀ:ì0s³ñ 0ˆKšï¿þ3üúËÄðþ Äñ¼Hû÷¯?1<¼ Eg"fÐða©® r[RËX™Ý!ölâ¼» µ®3p³þc°6HƒÌ!™äàŸ˜‰á;0Y³±@ŠHyâåã· ï¼ææŸ@ÇGãx Jš‚'€éÆX}ÞØ¸ýCaÇ5p“ÁB!ÆXÔ3æ»/J”Ä`¡ª¨žÜ{ÅðüɆÿLLTЬUä: €È÷8ïÿ¿l ƒÿÐñS€ž¸Éðìåw3`rÊð–J2ÀŒó# ôÎÆô‡áÑÝ o_‚†¶Yî -rÉDYcnë ? 'Öž¿ô™¡´÷Ãíûߌ}ð\`¿Ø^2lÎÂø›áñ ^Ë\ÖS@=^à>… €¨áy@O,~ôô7Cqï}†Ë·¾2¨ëŠ4`l,÷‡áþ _>3Ãa`©ª]oSÃb€¢ŽþÃF±ã€%Tûÿ€žxİïÔG†~1œ9û صþ ù…@5žḑáÄÂ@}Ðlмÿþ›qbûâ× ìlÌ _¿}ÈÆ< ZÆÿ¤¦eD €À$`1ûØŽOûó—èø5 ©RZX@C~¢ €†¼hÈ{ €†¼ €-,îez šIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/chevron-up_16px.png000066400000000000000000000010351321676412500227040ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA± üa pHYs  ÒÝ~ütIMEÛ.&œ*û¤tEXtCommentCreated with GIMPWtEXtSoftwarePaint.NET v3.5.100ôr¡aIDAT8O“ëqƒ0„I©'. éÃÍå]Ø)ÄKB/¸Ü:$;“ 37¶»«=x€÷¯ëõ³ªªWœ?]o§ÓGu½\ ihn Üï7hÛ–§ë:Pª‡¾ïaiƦy‚YÏ bV FpœžžÖL) 0»âôJ±s]×<ãˆà4£³N°†eYr‰-0EX>õáLî Xg vV zÅç}†å·Ñ†£[kÁ9—–²JXÎ[޳ݡ»s> \ºe¥ÂD„œi¼/Ž5QÓ´¦t^¨0‰ÍÞA!'`´&)ë¹q¦èÞˆ1fÚ/ï8­é·=Â!xˆèþ(€±éá )a—Ú.ïÅa]iÖœ@`Z‘üÙÚ½,а0¹¿Æ•áG³?šfI;NΞÊB˜ 1 ÁÛ¶å?[Þ] ¤³Jd×aºøeÂ}žéˆØoriÔ´î÷ÞIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/chevron-up_48px.png000066400000000000000000000070011321676412500227100ustar00rootroot00000000000000‰PNG  IHDR00Wù‡gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< “IDATxÚbüÿÿ?ÃPÄÄ0Ä@ yÐ÷@±à’`´\ a€ó£d—ÿP9$>œV ÿþÕð001Îf`b^ÇÀ /Ff& c3Bh0²™˜!r0ŠÿowÄêN€b¡QÀ¸3üý·è~FfF†ÿþ{001dÅgPÛ"€¢EÊbøówÐü¹ÙV m­Þ "b¼ @±éÀ ìA‹FŠ@QÛU ?O:[uµ#Ch¨.ƒ–4ƒS„#;Њž˜ TÇL- ˆZ`ân†o?[ED9™[›]<½Ôî¿b`X¸‡áü[E'7!!'’€j—±5, jxè*†%@Ç—HÉð1t¶¹38¹(1ÜyÎÀ0sÃú“ ï?20°‰1(Ø»0p‰‰ƒ’S(0&6õ©Rj9@Qê `)³ŒáËEUa†É¼´õ$.߇8þØ ˆ¢o?>~b`øÇÁÇ hïÄÀ#!Š `~XÌ”8 €(ñ€Ðñ{Žw·sT`˜;Í—ARVáÌm†9Àdsó)ƒ 0m±20üøÅÀðùÄ¿9”œDÔÕ€]@¯28“ë€"׿@Ë·1|ú®å¬ÉÐßLß¼\ çî20¬=ÎÀðò=ƒÐñlÌÌ!ßžøòáÓW û/+ƒœ©ƒ¤ŽÐE±°hf(9 rê†ß¦2üý#–eÊžbÂðõ3Øñ».@BZˆŸáíó· ¯]¦”? lÒ ì2 _¿A QFPU÷‘AB×€•“‹áñÅ+|ÿÿýŸÏÀÌÊØ“Iq @‘à°µ™ b’…ù?Kq±%CJœ>Ãc`hŸ½ÃÀpü0Y]'tü‹‡¯žÛÏðûëWp­ûïÃk†p[†×l2 {/"*lÓPz‚áÁ™KÜÿüT¯.b ²Â R’P01O& –¦[†t ã½‘À¿ò˜L€A!È,q?a¸¾wÃïÀœËÆ>…•­öÏ¿ÿ÷n9Ê`Ëÿ€ÁÓ’©?…$©Ÿ1¦(Ï biÌÀÂÎÊÀ&ÅT ó¹ˆq@1ôS¾þè•”àbX0Ý›!,P“áÎk†‹in`çãf`¸{þÃùûþüþ ¬ªXJúr¸…™9ôõçÿß;fœbüz!Xþ|û ÌÔ_€ž&«÷x¥¤tœ­¸€¡ðû/¨Ù±ˆ 9 €y$Àbòó÷,yE~†…@Ç›K1ÜVP rþ#0y9èøË'®2œÙs˜'ÿý:äð$sÖ3°²ÿøËøfÞª+ ŒÏ®2›Ýù ˜³À˜`åãgж7càÕž@}ۀᇷ &üeü¿Õ ¿EXXK3,žêÉ  (Èpë%ów ?¥ ?¨Mð‡a÷†“ ÇvžµßÔ;Ó¸ÿÛ1”¿¹nËu†gÏ08©ÿb`a†”L äªðþ±q=a ,'Š  Æ-@¬‹Ë‘„ÛÿþÕ2þúíçí¯Ê°`’'ƒ¬,?ÃS`†ýt80½ 3ëÿ?¿Ö.=Ìpîàe`UËò èÀh38 ̤^ l¬—}ÄpïÌu±o ?þ=LJ_Bbõ/ ƒ¦µƒ¤šãc`žhÇe @á.…þþ1cacdõ×`xõþ'Ãã·ß~ý #úú›aÁÂS 7/>a`à⸠þx ®“¨¦³CÚøÿþ"ÇÄ=`Ly2p±-¹sëµË‹Ó ÌÒz ?˜9€†ÿgøûƒ‘áÐ3|<Œ ’*r ¯Ÿ¿cøóë/Î&@áöã¿­¿ÿü7I+Þ 4`‡˜—ÿ L`GýºéÏÏ?@dzë]ãŸ!ôÍ í”0BÚž1 j`=Íà,¡&ÿùö%™á>(ù±0|ªaF0 ,‚ÿýÅ'p9 €p{àÿÿ^m¿~üõz†ä#HïèØFÆß ¬Ì{j@Ñûáx V s0L ˜ä€ÑS LõÀN0O•…óÐÌ ‡ÿëa¦`cb:T׆˙ĈkX…Ñd,4Y`‚8ê JŒŒ¿Ps 4Ù0#ê!˜zPl€ÌRÀ`…v+aÝK`ðƒ@Cîi° vüßj‹ÕDLMü›°P4³BBRcc‹Qˆcœœ@ù‚.ûŠID…>1Ða̬‡¡ ŽרŒ kQ28È£ÿ@bä1FF²m JÝN2,lè26@¹Àä. Ji@Ó:c±>ºÒóhý¿_Hy›t@Ld¹jЌɌîøÿ> ÿþo`øùW:ÀM‰!=F‰(¶(™ƒs@°rAóÇr:üD| À¢”ÖAIDÃK8H¦ä :þ”(m†`o5†—?nâdØ¿ó"óÿ'+;`û¿–5àâØÌ€˜ÿÿ/´Î Þ#ÄDThƒâ”TØyÕ07$Ô12k1°"šÍÎÊÄ_–¬Ç¬Îðð##æó ÏÅäM ÆÁlmVƒ‡ÿ8PÄ@Š ^H~α@¸=mPè+$`_–ƒÂÇŒjvpÃí÷ÿn.V†ÚlC†@wE†«À6Óê3 [Ï+ `k“SD”AÎØè yÿƒZ›Ë€XcdX @yœ¼Xðfr€Â„¸„¡‹ iˆðÕ,døñ/HLœ‹¡¯ÔŒAAIˆá,°u± XwžöAéWÐH!°¡ÆÏ'È liÂðð܆o>–š Äw1bìܨnÀ ÀËt¬Žúa÷?AjÊü 3k-”U„οòןBšÚ †ßw`#í3¨? l2ÿƨ’©Ÿ8PûŸ¦&3ƒÎ|«@q€"·S¯ ôÈñŽVÒ ³ê-$døŽÝ&`—ñ!°§ÆÏ jãA0++¤Sÿ :2ñ‡‰AÑH›ADA ÔSºp+ÐLr@äxÀèxP1ià¡À0©Ü”™‹‹áØ=†½×Þ{YB |ø÷×û׾߿ÂÀúû3¸ô ÐÎË?, r:j ’ª² Vš ê‘ê€"ÕžÀD½Ø{W‰ñWbè-2fxtÈɇ §€šÚᔿ?¾1<¹tžáóÓ‡ ?ßôT[=a`bô…4— ‚£À"Ǩçô¹‹¯®Ÿ»ÃÀüç÷ïÿ€ˆ¿ücx÷áÃïÌ *šRÀ<j,0šá2 €p7%˜˜NS³IDÓ`€1ó#Ððþ*x„âË'ðË ?¨ã %Ú  `r[ôýËwwÆwÍÌðhî ~Í@õdÿ@:õ·p@xF%›ëû÷¿ÌÁWF¦ÿH}V o˜€™•Xï26n“Q!¾ê†Jíÿÿ€­kPûüÿðˆ´Íî;ߪmÀe@1õµ4ägêhÈ{ €†¼ (tXxp±w IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-add_16px.png000066400000000000000000000007341321676412500231670ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ  87–oáRiIDAT8Ë’½N[AFÏÌ]“kCHŸ:@y+y"¥I˯(Ò%"tPB“žW ± ¥ˆ C„ÊTH±…ÄÝIa]Û×±GZ­v5sæÛoVö¾åÎß·à ±8kݧPäõ×í­Nèv;Ÿ›ÍßUt)€‡˜—ç»À×RZZ[}G‘žwŸ¨"Æè­_g‹GG_ò *ˆ Ðßû]Í*gUæV–‹²€*¨*e™³~ÜàäcsT„ 4nnß,€,d€¢*¨ˆ`§š™’®µ6È&F–a}»+Ðý\ëŠÃO?ðÎÑÚôlfn®¾wúe*¯ëy‹ ªåÛAQbˆô¡9$ÆQ}EoLÀQEÃkMrA>DT”UÑ %¢Z‚óaÀ!).ëÍ‹ŒnRÞ>¸;5û¯Iý¢ž.—j´vâ¢hãÑ®uÅ,d6ïõzXc'>ßÞ"Ë6–ƒ—E~ñg*/ŠKnîÜj^¥§³a¹¢¸2pÕnG³“WëÀ~ýüýlîŸ7÷õû¿Höù ˜„Õðró‘ IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-add_48px.png000066400000000000000000000034531321676412500231750ustar00rootroot00000000000000‰PNG  IHDR00Wù‡gAMAÖØÔOX2bKGDÿÿÿ ½§“ pHYsHHFÉk> vpAg00ÎîŒW{IDAThÞí™ÍEÀÕÓ;û!ËòáîÆý"àA½z㤑‹h¢ Ę01xӃѓÆh\þOÆxñŠ4ÊI8^@]Y\d€Ý™î®*U5SÓÛ»Ì,gH¬ä¥ª{ª«Þ¯ê½W¯{„Öš¹ÝVà~K؉A}ãääøè{»wÌlBHI„ì5ü>¿@¹Z;pêýwÎuà‰ÝÍõ„-õ/ ,Ü,°\Z¹ï¹;°uë&''[î_,‘R’$²7”T|ô ä ?€¼­];Àãðs“yFJI"“Pàç»°¹sÍ2`ë‰AÓ_kݱèHr‰‚D¯–Xƒò"¶T’$é‘@¬!T #9O–b全W|Àˆd³ÒW߉LŸ† õÈø54 „«¸Ñ­wªÒ(-¤QÚ @d»™P$½bBR¦<¥´•š§¯TÙ+ç@©Ü8Q˲¡°Ò môQªÊå{fæþø«xN€ÕW)c>=ä•\I@R{˜³ b»%IbE>œëÀÈ®ý;€Ùñí[_èÏ{™d`2Ì 0í@ˆF{xóH}ŒŠ´J+{¨)Hræ|pRJöîÞÉÌ#ã³ï~ðñ¬¨gæ^»>¯üzeŽÏ>ýP¬ 0351÷ö‰c<:1¾*^KöìÙSCcB©;}cm¢Ï€2æ011Á‹ŸÈ/ëz~~žk×o¬¿3“yù¥NXRC%1±? ÄbÕü655Õöxsss™NŸéG~ì(.àɯm–j3T?[í uŸ°uŸ€g>¡ðÚ1¡ÿªhì;ƒ4©†°ix˜iBñªç»†Ñ"z¨Ѓ;Ð @Eí9ññMÚÉèå—¶và‹g66ɽÎé!¸ðìÆÆ.­”¹½´¼>ÀŸ×8|ü$#ÃÃm ~ùê5¾ûêó{ö›2õÙ³g¹<ƒR¥ŠÀ|©kNVßûòÌ÷wK•Ú¡u~9w¦µOk©rðÈѶ¾Ÿ>}šo~ºÄâí¥·î^¾tª•gÞ<öZæý®|Ü¢­5ZëK÷;V×ü÷è@«Îü/Ñ€8ŽQúÞN–ÿº]êç€RŠ8Ž)WÊÜ.øçÖ-ŠËE„ؾ}£££LOOgžÏ~}c³k-Äê¿uZön­µÐZ#“„bq™¿Ù·w_zÐôǶŽ­uäÖP:íå™`!˜÷Ír¥Ìèè˜S2Ë´„WÞõ†ÍPˤ°ÊJ«¤\c\Ôäóù,e„×Çí€[±è³íüFTTy"  Ä@B㣞ƒòukñs!×Á)žó$´Òg% Cv륕4<–’âJu¥vçfØ, lajÄ¥AêæzN¤SnuôýV6›¬­§áWnQ^*|+k•mvž! 1h!ª¶öWÜ›©ëz7|'u¦âÄ­º[y·úCÀÐù Ùµ¿5íGW+7çÏÛyœ?ùµoM+ž.BkÝõ “q«Ÿ³Š»p2`¥/5©+éÕÒ®fÕŠ3Š•*Æ„"+‰7ŽÛ­µn 5±ï°¾/8 Û3ÏŠí*%N±ØJä]Ë”ø‘§îÄu¥Q188¸V4r;”ç+iÌЩ¶SÄ)Y_Y²Éò¼çs×j5J¥ccc~Ì÷;K¹,ÅÓ‡ÎZ§ëz÷ï9†ÖšmÁÁm—?qW%tEXtdate:create2010-03-04T14:16:51-07:009!oò%tEXtdate:modify2010-03-04T14:16:51-07:00H|×N6tEXtLicensehttp://creativecommons.org/licenses/by-sa/3.0/aì¯QtEXtSoftwareAdobe ImageReadyqÉe<tEXtSourceecho-icon-theme©L·S4tEXtSource_URLhttps://fedorahosted.org/echo-icon-theme/ˆ2.CIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-new_16px.png000066400000000000000000000007351321676412500232310ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDüéO4×± pHYs  šœtIMEÕ&Ó¶)jIDAT8Ë­OK[QÅsïV$}%‚ÐÊ[ÜÔî\f©ó ²qY¿EÞ²Ýw#Ä‚ßÀM7Ý*…RJ²RJIZ„ÿEb›ÞwÇ…&Æ“Tz63 sæœ3R.—·kµZ‘˜ýËÜ\›gÑoòËŸßå¢oáϾdÃ¥RIÇáüxS/Oßhç¼ —'+‹Æâ®¶²ëÚ23®«Òl6 ! "=õŒÙcÚ~!ã¾"f ëL&ØöjÇ·[SÎW{ÉÝjäkêˆy…¸`1*FÓ_‹à^ºþ¬ƒäë^o: L8 ‚n4Y:OÐçØPEÓi@д¢Þ›zƦ÷Ð织¯ñá'à±Zï_èéYëÓÌü÷ƒ‘Då)]Cu4ýI‘§DL-÷O]abIvù^NA)N6™j ¢Ñ}’ ã¹qÏÞ½;•‘H(E Íj,± {——ÎS­VÓÖÈD42NÕl—h1»ÝîD»1ñžä€le…4NOÑŒyxÄIô/ N²ÑÔ¸ˆ[™N£I¦ fœ¸6“Æ…UP,cÏóø+ApçÁ£{·öû²Õº:õÍË«ðìäcú #û“£M˜¶àIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-new_48px.png000066400000000000000000000062251321676412500232360ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒW 2IDATxÚí\ÝŽ›È®n`Œ ÆžÁÉL¬dµÚ‹<ǾH¤\æ*´R”ÇØ‡Ø½Œ””Iv<™ñ?؃±Á@×¹(•;ëµ±™Ÿ“sê"5Õྯºªºi"àÿ²"¦iš¦Y©T*º®ëºŽˆ€¸\& ÀrEQEiš¦iºïõÄC?ðC‰a€a´Z® Ðj9N½.„ãX–eXV¥rt$DN€RJ(•$I‚˜$‹E,AAày¾èy77Aps³ë}è Ä}‹ëžœ¸îééÓ§Bœž¶Z®+D«Õl6B4›–eYBX–iV*B˜¦®ëº4ãx¹ˆãÅb±@\,nn‚@©›Ïó}ÏG#ÄáðúºÛ¸¾N’$H’M÷S˜€—/_¾|ùò×__¿~ýúõëß~«V«ÕjÕq¤”RJMÓ4MBqk|)Å>´ªé±²,˲lóyE5÷ÇýÛ¶eÝÜHY¯Ûvhšm×jó¹”–U«Å±”¦išQ$D¥rt”¦R꺮§)=‡RBp?I’$B FQK‰A DÿñÇŸ~þüîÝÇý5ýþ»iV*ˆ¦Ùé\^"v:'íyÔ>i pvvzªëgga8Ÿ+†ÓétªÔtêû“‰R¾rr| prrsˆ{°) |Y!HÓ¤$„˜ÏWuÒñÙŒì销?9!àÏΨÓÓÛDQ« *E‘[ˆ ¸M ¢–eYý>€ëº®®»®çù~–y^³ÙlfY³é8õº”ŽS¯×ëYV¯sy{0 À&@‹(œ<… P!„‹Ùó9ÙaHš« 5B¸.Ùí6óìõ]¯¡iD%mDHBPn“Òq Çz½^—²^·¬ZM˪V«U!ªÕjÕ4ªUÓ¬TL³0Ûwõȇ "M)eÙ*Фó„¡ÿæä|[3„B¡iüÒd ÁÅ#t|œŸƒHI@ŠˆRABPh£y<Þ¾O!h¶$%Ÿwpô‰``okDDLJ˜<šªDªûg3j÷<Ä,ûü™lžççɘۓ M³ 1MÓ4MÓ”fGYÆ6WG¬ï<”MÄöv)ÙsM“î—ljgQ)*S©îÒ÷é kµÕ>©ÚAä0™¬þ>”Ê2Z ‚4 ‚ù|±Pj>ç% žÄñr‰ÇqÇq|o9ྈ@$ªU:ò¨´¶MÇ@D^©£#(ÔN yÊ3bŽýã1]q<&CߟL²Ì÷¹ü ‚ÙL© Ã0D Ã0 C€0Œ¢8ˆ¢ƒ Ø7„Ü ,€Ž“Û¬•Bl6ó* @)š˜Ñ @©å’ˆ¢‰"/=ÐÈçd @e,èûÓ©”ƒÁp˜¦ƒÁxìyi:{žç)åy“ÉtŠ8™pýÏ÷]zÞ'i–] u|LšBÅl!„ˆc²W×(•â‰Z·KW`ÏçbŸ;ŽWsʳgã±ç…!@·Ûë%I·ÛëõûYÖëFã±R£Ñh4#’ ©ß^lʾïû¾`Û¶mÛùªhYÀ%V)ÄVkµþ"r z}B¡€=¼Z¥ç£ºŸ“nNK!ŒBš¦ÑDn8.../¿}˲ËËëënW©ëë^o0Pª×ë÷Ä~ÿàŸM#`>ŸÏçs€F£Ñh4îø]ÚuBI»M„Ðjm^Pr5ÄÉÚ¶oOÔòê†ßwq¹IžO¹EJ*S‡ÃÑÈ4:ËË4ít®®®¯•ººººº¾F¼º=³Æm)€v»Ýn·x•”ÓÍc ‚<[ˆŸ~"Öu"„’4-+ór4€|&Í‹Š”c˜JöšprÐë ¦ ðõëÅ…R_¿v»½b·Ûï¼ðýORr¸Àº«òtŸœÀR­Rÿùgò\Û&»Ñ àù=U?ˆ”¤yäбÛ#€‰u]Šý¦ p~þå âùyÌfëžÂK­V«Õj~ce%ñ]‰* |YD”‚Çq'Ù¶/ ‡qW!¨ìÐÃrp*KÊ"bSû¾!h×ûÛWJ_ Ú°C²6=çÿÌ(Kö÷ó×¥0E·¡ê®ú®€g)­ z¬Rvh*[ ðØ€?¸}sUYò_Ÿ¶9ĦãÛïËÑŒ€»~À]}h", o“C={[û¦/w à=4¶M7"eÙz¼(ðÛúßDÈnDð–®í²e"ÆÛTëuÒ¶M!(ÿló¾dÛ‹mí›ìm×ÛÕ^•§OIóËyÖßÇŽ ð^1&€>]pºpÞ¯­ ç þ~øG"–÷Q°Ãr¶d¼¾ß-±€unÙFüðáÇÞ¿õêÕ«W¯Þ¾½¯rí¡êômÂáüüüüüüýûU¼X6•¶2ä#€u­Fží8´!‹Û×?‘øQ…÷v"RQDí§Î?ýàO=Øó¿¯wô)–¾ Í‰áÝ•ëߤüèA''`ÕæÄ[»¶ÿ/*%êÇ$îBÊ+?þW'_³ öÒ%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:44-07:00 ¨â2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖutEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/document-new-2.svg:>ߨIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-open_16px.png000066400000000000000000000007261321676412500234010ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDùC» pHYs × ×B(›xtIMEÕ õ¯€ cIDAT8Ë¥’¿KBQÇ?¯žú$h^/\ ‚Ф¿¢1£¶–¢¨(È-ZZ¢­\І(§Ûú/r³!Ÿ†Òóù_ƒ&æÏ¤Ïrï=ç|¿÷ÜÃ|~oÈét†iÂ0ŒêZ2Öo®o#t@ØÚÙ4‡Fæ:åɦ_Éçó˱hü¾«š+0>6ˆK–èEî3{º±¶á½yÂçO¸d‰¥Å•žwG@P4 ƒÕ…I®"—8íÃhÚWG±Íf¯ïE‹El[˜L¾µÄÜî‰_çšRhkÐ\ÜQ×õŽÉÆ$É¢(­š¦&jV¥XÔHg>H$^Úš¦ èzŸß¡ú„ãÐ ý8Ü?«Ï` f’Ngj7uGQF‡ÓS3 …¾º¨HŽêï+—˪j«ÕZ5PUÕôÌz„TêJ¥ÒS,Ë2‰Ä3¥Ré@ðù½! Lÿ\Ä¢ñ]þË7zx ŽƒIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-open_22px.png000066400000000000000000000017511321676412500233750ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÕ /4°|´vIDAT8˵•_h[UÇ?çæ6½InÖ¦Ù²¶ëªsE§í:dÊd ‚ૠΉA|Vaø¦‚úª¾ù ƒéÔ²u ¸‡>ø îÁþYlk»?v¥%IÛ,¦iÒ6ɹççÃMÒÈ¶È ~á~ü~ç~¿{~Žâ>8÷ÍÙÓ(F=í!­ P‚Ÿ¼ùÆ[ï·<|áÒwò ( rîüÙFöÈÈÈqƒwY)ËwŽ"YºêàyÚW߯´® z»PÈùö;ïîo>¼²š¦·÷“““¤Òi,¥|~Ù¹Œ±X'CƒC '¶At±Xdb|€p$L_/'Ÿy–|>ÇÀÀGŽ<†e|"#ˆHCÁ¶mRé Zë&bϬ·;Äã{ˆ':9yâ9J¥‹‹‹ü>>Ž 5ÅHƒ =ä¡þ~‡X]Ëàºî±P‘Êv¡ê8NÛêZ†=±¡Pˆ……›TµæèðJü;V–BŒ ,PJam;Ž“LgRO‡C"®Ë Ï¿H6»Æ_ ·Ù(n€à—›1H=–¶„œ‰D‚?f®ÑÕûìå—NidàÕ×^yïØð±ûú†p±¾½’d6¿¯e9:¿j¶½À]¶GÝ•«6p;—û»zèðÃ<9üc?\fäõÓ(U+1¥üPþòÇŽýøü«‹Û@®\®T=Ï#ruÉáhÅ0›*±ôÆŠeÑ0“Í®V=­IeRæ?[¸ ¹;²­Ëօѱ´ã„$í ¸Qàø]òv„Û(m•M_éç3@a}½lDóý¿Ò“ˆ“ßò#‚1`ŒÔµi¶ÑЇÛ,¥³U`ƈ¸‘ñ[7õôÆÝ×O*_a[×Ú³ÖeR›aÔ%U·ùèrÛОœ½¹ôËèXÚö?f²X,žê~ä ¹¢&+7ÍDñÇ¢ªÉ¾®fEÅ&&’ÕÄæoØ@ûòr*Ý5'zÖ̪މ¶æµ¾«Íß[¢£ªg˜›M®ý4:öuxïôôt¤»§ÛºòçæÝÿhÚU#RߦµÀFÆcså"`Æ6²ÙìõkSSEÜÙv[fúÎõS—¾8¸@¡þw®)Ýš×`È[÷êK«å“Ѧù)ø_ð¨9Ñdò^жIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-open_48px.png000066400000000000000000000071111321676412500234010ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒW åIDATxÚí[Ïo×Ûëßvˆ„$ä‡òC‰¨Uˆ”KQåVNôÒR‘¸TUÿzAB*‡Þ«Ò §F*R[Q‰ªª(…–%“ÎÆvü{ýk×öþðö06Y³ìÚÄäË·Éí¾·oß›Ï̼™yk€#:¢ÿ2ÙzÀþþþþþþ÷Þ›ŸŸŸŸŸÿùg›Íf³ÙÒéç/´Ùl6›Ýnû—ÌÆ³Ûív»žs:ñš¸ÖnƇÃáÐÞjÖû1Œþ}úçÍ®¯]»víÚ5ãu2 @©T*•JýE׋‹‹‹‹‹ƒƒõz½^¯kýTUUUUãzj6›ÍfS»Fj 3"£ñè¾v£þô>§Óét:Íûï_?Àõëׯ_¿žÏ›ÉëÀ$I’¤bʲx=>îr¹\.×A¿­ûd&p#Ò+=`jjjjjê£Îœ9sæÌ™Ï?'ìtâ¨9ƒƒ4ý„ÌP§í¯:î«’(Š¢((Š¢(J£aÖÿ¹€Ïž={öìÙ7®\¹råÊ•ãÇ{zzzzzÚŸ™ì‚¶àF£ÑØ;•••••–eY–íž@ºE.\¸pá‚vMë,—Ëår].Ç™óBŒ\E*•J¥Rù|>oîÉZ‰|¡hqÆã–%˜µ“¦ë‰ã8Žã*•J¥RÑ‚SpÀLÆï÷ûýþ±1rµZ­V«Y<=G–@×-lmmmmm “Éd2ëã¿.:wîܹsç†a¦½BQ{¡P( ¹\.—Ë­¯[@AâñD"‘H$fgi@BÔ*‹Åb±0;;;;;«MT¯1ããããããcccccc­ãt[ƒÍÚIqŒ4Ýhœ­­­­­-AH&“ÉdryÙ2è»X– `¬°½½½½½­ùH4ÅÖ…¬®®®®®¶jÒa“ÕMšgxxxxxX»¿³³³³³#Ihÿm6ÎsPP±Øîîîî¸Ýn·ÛípXµ ×âñx<˜œœœœœˆF£Ñh´5 ¢öNaUPÝŽ¶H±dY–e™ÙíÎf³ÙlviÉ2¸k§ÓÈ‘‘‘‘‘Ÿ‘4<¹žÓ§OŸ>}Z³ÚChÂäói“>hêv˜IAƒÏçóù|šàIñPOž`P³7õ´@ê_j6Ió,@Ÿ Ð¦zùòåË—/ %µºž`0 5~ؾ¾ÝvÊÄõAE$‰D"<ü믭úÔÔÝ]ÒÜ¡¡¡¡¡¡Ö8]/xDZÛý§§§§§§X yÒú777777‰ß¼Ù6ä‚Pã†\m¢XRh£&€óçÏŸ?^ËHàúâT( …BÖÞív«ýŒ¢!RP”× e m€æóø"§“…ÕMM D¤Ù>|øð!ÀÕ«W¯^½ªe¸4aÎ,œ{ÝD™¾QqÏj‚·´´´´´T*-/////߸Ñîþøý÷yÞ|Ž6›ÝÎ0,ûûïß~ûé§-ÐfŒtò$¹ G ò}333333÷îÝ»wïžÀöv¡ ËŸ|òá‡óó^¯ÇãtâÄ_§ ºK¤Ræ¶}ì˜Ïçr|÷Ý/¿¬®*J:ýøñÀÀÔT ÕjµZ­ÆãtM1í˜`h‚§MZ Ïd@–Ñb††Âa¿`e%/—Ñ’ôtã1÷·XígÖ_oÝÔÖûöÛ““n7Àöv<žÍò|±¸³‰üøc èÃ76pWWUt=6UEIó/]ºtéÒ%-ê!ÍÏåŠEY ‡žGHªÕZíEQ”¹ ­ÁÓŽÀ_|bv°€5›t‡¿rןϗˆÇÃó™Ìúúýû-û?º T y£AQP ZK!ZŒÇ ‚ªôõ…B ^QÌlÄõËÓ¸¾Ÿv½÷¨“~¸Y{~?×+ÂËû‘àA ôù ÛÝ-•D±RÉdÖ×›MYEAh±ÊˆÑçKîöe¶”‚“À‰år<¯ªápo¯ßÀó¢(ËÆšÜ‰ ØÛò:]ÑYóÞëZ O®'ôzàñc G8Že=Ò¢¥0¼L&ÑT•ö ÛææææææZ5Ÿ(®TšM€·Þ÷zjµFCQ^4ùN]ëù2‡fEÀFíµš$í<í ~¿ÛÍ0Ñèúz"Áó¥R"±²rç=ßâ‚(#FÛíäû©ÔpêÔ©S§Nµ@<ŸG‚AŸÏí¨×Q#ô®\Bû®Áj?­ÿÞŸvOïªÌ\Ð~NÑœ  …ëƒ ¯×ív84‹(*IòxªÕT*½{—úº ?=ž¾¾¾¾¾>­2HJÄHðôúRI$ Àçð“ã¡^ß«]¹†ƒÖ\ãg_îúdYQT@’d™”çEx< Hd³å2€,×j+Š( ‚V 3È„ëuŒ~D}?Ãèk;zדÍ‹’ÐßßÛëõ48QE1ÚN­ñ ûâc×·ß$IQšMëyŒ×ër1 ÀÓ§[[©”¢‹,‰Ü¾­ïgøÙ Ö¹‹E<ÛõùöÔ @<^(ð<@( îw=í©[škõ= œÈn·ÛQA±Â´¹¹±W«…ÂÖÖŸ..Z‹sé4æ'N¯$èè’ˆeóyIcÇ44!¬æ Øú{°…$èWÍÔ=§Ón(•x^¡ÑP·»RÙÝ}úô×_[3ˆ¢!½Ë¡âÝ'¾¾žJÕj½½==>Ÿ¦Aæñ¼^pûãyÚÜH0”aÓø’$˪ ŠÈµûÈE}5ñz£âtÿ J$.ÃØíñx&S*B&³¾~÷®ª*Š$µž~ZfıUý¨Ô°±±±±±¡PB½.I¹\¹,ŠXu» yc$ÍÛ«{ï«* äM«1 :ŸííX,•âùLæÙ³»wh À0“e1’eÌ„æÖ­[·nÝÒ²zÝåèí=qâw4Ò‰"Ô›x·‹r~ÓÙþ{ö ž\o6ËqÕªÃQ*±l$òÃm@% ´€Zmttttt4¤=@û `t ‡C!Mó â`mÎvK°Vû8’¤Rù<ž ÇÅãȓɠ3bE¡s<€@ n68®Ñ˜ž…ŽÓŠoíê_»›o7ÛÙl´™#,˲©T­–N?yrçÎ7ߘ=o%dXnv8¨DT«6[(àrõ÷»\Í&†_”¨X_ðÁˆ¤{öðò,ÿjP­¢âåó…B¹ ÏG£¿ý¶°`6ºP«¡8ZÆ‹.…㙀ááãÇǨ¢Ý*•%wßï/9´KTçâ¸|¾TRUžÏf·¶"QäyŽ{ÙUHx½áœNª%“ª:: àñ„B@OO0ˆùA;‹xÓ¢³uÄã;;‰D½Î²÷ïß¼ùå—$GätÒú— Tã×áÀM·R‰FEqjª··Ñèí …Nžœžž˜À3ÎÃÂaEyÉäÎÎî®,W«™ÌææÓ§Õj*µ¶öèö¢T•äi €v¬€\Qð#Ú7FGÞ}÷‹/Åã …ìö'OVW76[ ‡IxZÈóéôÚZ$òìÙíÛ_}õÙg؆Dzè ^$x"í%Äè?2r¿9™F“ìý;Ûÿ#éUéš¾˜¢¯"ˆW*ûÛ[ÉÄ}Ð'K$x¹ÛœLŒúuþŸ²7ƒ4ϰŸÓ'gz ÌOÁÛôߤé$h½û¯ w1Æ›ìÑÑÑýÒ?¤~`|)~ý%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:47-07:006ã²2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖvtEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/document-open-2.svg îLjIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-print-preview_16px.png000066400000000000000000000014131321676412500252450ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  d_‘tIMEÕ  2ž+N˜IDAT8Ë¥“[H“Ç›s«– ]ZÓ­‘,5+§V³ÌÌ.ô •ùPXa](l’ôÒ›EõÒCÚ]­(Ñ.v!i‰ˆ•º©av!u­Ø–nß7·}=ˆäȇ¨Î9pþçò?þSdcꚪ€ù/òÊ6mÜ\úG´º¦JEQºt¹R*Þ·Gºuû¦$Šbˆ ‚ U×TI£9б^¯—#GS¸¥Å‹3ùævrèÈAr²sˆŒŒÀh4†•¥'JÒ;¬mì.ÚË«"g9° ³¿øŸ6 ÓéHMME’¤ñ\.÷³=EÅÔ¶~¥çÇd L tMânËgöîÞÇ™³åØl6d²µŒPb>v8inr¸Åö» fçŠYLQ+Y¯¡¹W†õã72Ò3ðx‡ÆïÀåržJ[˜ÞüÉOfâTä2öéíD‰«Œiéܹ{{|ËN–öe-ËÖ?ïSáýþíÄ Ã(Ð(Þ;ýÄL‹Æ43À‹& ýLÞöö @™ Dÿòu+ëVçSÙäBg˜Âp´j9ïÄAòæGQq¡œ˳É2-ÇãY‚\.çÜù³f@ÀÀápÐcm!7i;=¸v´ÓcÉOQÐø¸–i1ÓihxH¬.Žöövæ¥$‡²°kç.,–F>¶=¡(;ŽŒäìXÃÕ‹çIˆOÀð£T)©¼\ÝÞ úB)::†œ•¹Ÿ½^L&Ã`08{aaaèt±Ä½‰£òR«rr‰ˆˆøMãqsÉu à¾ùÆ/Ú_ó©1¬IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-print-preview_22px.png000066400000000000000000000021531321676412500252440ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ  'ÑçÁÉøIDAT8˵•}LÕUÇ?ç—×ËK D®jkeÍDd“5ÿ(È? È )[[Œ$ÉæJ¶%mõGÿØ\FJs®” ds´ÀœÖPLò*…x½Þ W.Ü{¿súƒ ñrÇX­³³çœ}žsž=ßçÿiFk}ÝI w‰ŒSÏ?—“·¤›Öú:¥”Rµ_S%o+k}2 cÁTJ)k}òÇôgãíÝ¥äçç“–¶ ‡ÝFéîRžÍÊ&&&!‹…¸¸¸Ù?Ÿã@›Ý_¹/õr{EEÅ´õLðÉÙ®öºÙU²‹ÆïN„ÅbAÓ´E9 6Û½‹‹Jø¦m˜®ñH^ÎLâúh8 ¿ô³³xŸ9L?Bˆ¥ƒ÷UìÝ“¾éIÓO×ùk2„7¶¬beœ™´5ÑÜq…Òñ‡©±Ì{Ûl#Õ)ëSLÿÔI8MxuÉÝaa‚ŽØ’Jõë9¡(¯(KY{``•ËÂèésp©sæ_{yÌf3mm—ØY\½{6Îoe{~>²ÇCcS#;^}ðp3‘x<^ìv;¾,„@)Ū*¼ºÃH)1 ƒÎ]3Š•Rrôh 2${ËÞÃ0$¡¡¡èº°Ãá 99‰åqËpŒ:ÐåË¥^ÝË}§—k-@ „@ˆ©HjšFpÉÒu…Âl'8$˜ÉÉIP`H9õRà :úA”R(i •œÚ+…”¥n·{&§ÁŸ6ÿp¶ð™§³9ó}Ó¿*ì­N¤»§ ·ÛÝ4öx½Ÿ™L…cc27?…b¾²0 }–°Rÿ ¯ŽË5AÏï·þPb–ò…ÿ¥y½ú‘ƒT^á§U…Ñ@,Da¾)}w$à;Àà ß™ÿžçN`ò­!¾ý4Øð•Ê ß*çw¿UäÅá¾oÃIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-print-preview_48px.png000066400000000000000000000116661321676412500252650ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWIIDATxÚí[iPTÙõÿõÞ Ý,*È"«Ê"¨h9¥¨EPu±\gJª4V¬ÒøÁÄQS•”Ñ‘I%©2–I•Iif¦\?Xp`,q¥4bPÁZ@Vi–Þ_/ÿgN=lDÀe¶¿çËå¾~ï¾ûιçü~çÜ ðNÞÉ;y'ïäÿ«HÞô€sæÌ™3gÎöí‹/^¼xq~¾D"‘H$*Õ÷ý¡¯*.—ËårÙlEEEEEE;v”–––––>ü¦Æ—¿é /Z´hÑ¢EùùÛ·oß¾}ûWñ,Çãñ¨ÕÔûÓŸ~ðJ¥R©TT|kkkkk+ÐÞÞÞÞÞ<}úôéÓ§@WWWWWàv»Ýn7 Ñh4 ÐÓÓÓÓÓøøøøøøaaaaaa@xxxxx8ðöOß2™L&“ùø¼é÷¼q°ÔÕÕÕÕÕ7nܸqã‘‘‘‘‘ÌŸ?þüù€¿¿¿¿¿?»¸h¹\.—ËÅ~[[[[[p÷îÝ»wïŠãEEEEEE~~~~~~¯?߈ˆˆˆˆˆ·¥¡å@©T*•J­–ûf³Ùl66lذa`±X, ðôiG‡Ñ|ùåÕ«ÕÕ@GGOÝØí‚àrz½V«TII:’ääääää&“Éd2çÎ;wîàt:N'’’’’’æ ?_ -ß½Â߸ÔjµZ­ÖévìØ±cÇŽ»w×®]»víZÑuoÞ¬¨¨«þõ¯óçëê€GZZúûqゃµZÀÇG£Q*Éå%@Z[­V °°¬¬µp8œÎ‡U«Þ{/<X±"++!X³fÍš5k€ .\¸p()))))’’’’’’Fn– &L˜0AìsúÁ€&(“­[·nݺu§NmÚ´iÓ¦MQQz½^¯×Ÿ^TtçðÅ—/ Àôé“&…‡øÃ¢EééÀر  Ñ(•r9àrQÈéë³Zèè0m6àþýÆÆ®. ¨è΃¸víÁƒ®.à÷¿ÿðéSìììììl °°°°°èëëëëëÒÒÒÒÒÒ^]1lÀÑò;3@zzzzzú‡æååååå-\œAþG™¸Å‰"ÐÛÛÛÛÛ;ô÷ jøùïÝ“Íf*–4ကÄĈ½(..+“Jýýƾ>³Yô ™ p:A pì–JÉ#œN§S€þ~“ÉbL&‹Åf#ÄVÈ“\. iܯ¯ok³X€˜˜P( …B,…‚ PYYYYY9´Â½kAŒo;#5 "ZWRÒÝÝÝÝݽreFF||H… ¹\«5›ív— hlloïíœN›Íl¦<@"”JZóŒ „€BAŸ©Ñ¨Õ*Õ`Å"O Ï¡~ssGGg'– pˆ4 ƒA,‰0ij¥F£Ñ(þΊgƒ~ï LwÆŒ      ¬¬ššššš`Á‚ ,V­š;72R*½páÎÖV`òä¸8b5V«Í‚Ýîñ‹ÉÔÛ H¥ËÈdä ”œQ(DãuW>=tvšL.ÐÓÓßoµ99Ó¦M˜@,‹J÷ïß¿ÄÄÄÄÄĵµµµµµâ÷xbìØ±cÇŽü;‡Z–Í›7oÞ¼yp.M`_UUPPPPPðóŸ÷÷÷÷÷÷74¼¶hzýÒ¥K—.]úõ×[¶lÙò«_\ºtéÒ¥K"ËX¹’Šd%%wî´·ååÕÕ­­@\ÜØ±*àrh*J¥Z ÈåÄÿ9I¥"’è/ÑTJµ"·¸q£ªª»øÍors“’½^¯×éÄ¢{-˜á‡·¼K‡:tèÐàç/_¾|ùÒ¥ÄDzîÂ…'Nœ8qbÒ$"+ÇPï–Ð ÿç?ׯ_¿~ýú©Sg̘1#3S&S©T*µ¸uëÖ­[·¨ø•š LŸ«Ó_|QRR[K )€^¯ÑÐ ¦˜Ï±Y¤ê;‚àtŠ`l·;.ÐÜüì™Í\¼XYi4k×feEF|0o^r2ÐÒÒÒÒÒœ9sæÌ™3"{ñõõõõõó öï–É·|‹{Ü&&&&&&ŠÃ÷Oœ8qâĉÉ“'ƒÁ V“h4”‡\¼8jŒ7nܸqYYTmÜ·\O­æ•1f̘1cÆŠ:;;;;;ÔÔääÉ“yóRRBCë×>lknܨ©ééé©LFP(b…[­„!ÍÍÝ݂ܻ×Ôd³µµ­­v;ðë_¿ÿ~R°zõÏ~––&&^ÌÿCCCCCCŘ~ýúõëׯ“‡èõ¢á‡2ÄP-?7}úôéÓ§‹zòéiÓ¦MËÈP(jjjjª«32êëëë¾þšæÙÚê­ç!s<ª·ÿï}ú4˜;wîܹsÅ ^»vçN}=P\|ëVSp÷n}}OÐÛk6  PÈåj<`âİ0__à½÷&O rs)ÄètâÖ&g´¬èŽŽŽŽŽQá¼ÅY^^^^^ìÞ½{÷îÝ¢¡F+œ¡%\sjjjjzòسgÏžßýîÖ-òÌ3FlZñ‚pøðáÇËåÃ¥älÞ©â•I§$DcV!®0»J”@ùûûúªÕ"ø±‚É¥²²²²²2€6ÇÕ«W¯^½xðàÁƒÄÐÃÉ{Èì!Œ{öìÙ³gÿü· Œù¯²oÆ¥·غuëÖmÛœÎ#GŽ9rd0Ÿ„år¨³³³³½]%^Ù¬ –¬¬¬¬9sr=àüùóçÏŸ÷ny/—ëï¼ÏûâÖ%­pf/D'}}E3Ûá=f=lp> ÀïçòôÞ½{÷îÝ ¬Y³zõªU@j*•Õ‚îóª§_ãüÅdêï7™ƒuBBb¢¸3'RÏò .³b؃‚DCØl”`FcOm &&Š+¬©©©©¹hlllllÇ㲇±Á<9¤åæææ®XA¡#$DEAyŠxš‚ïçÌvÉ’%K–,¾üò?ÿ)( 2·Ù,nì åÜc,{öŒNwx³(A êíp2¬¼c~CCCƒÁ¨ÕÄ‚œN2¦¨è«¯Š‹mÛ¶mÛºÈíâããâbcÅÖ[øyoÞ=”DGGEEGŸ~šŸà°oßþýŸ|Lš4iÒ¤I@lllll¬è¼cdžáÄ[š7oÞ¼yó&`4vw@^^^Þ† ÃgƒÁðä y˜V+Îßé$67œ ›dó† ƒ×V::(=zôèÑcǨ:ù*µ“‘*Þ[8ÆïÛ÷Ç?îÝ ´µÑJgzÌ`Ì ×ét:NÄ"Æ–™3gΜ9ho§ïûóŸÿò—¿þuðô–ÆÆÆFƒapÑŽß÷Úðž€FC ®¬¬¬¼wÈÈHOOO>ùdÿþýû_þrÓ¦M›F¯Èׯ’]»víúøcÀÏJ ºŒê8Qã·7nܸq£H;/^¤„Ó[[Ø`<Þ@ÂðóQhÙÔÔÔÔ”     °øíowîüøãïîÇh…CÐÙ³gÏž= PF?xCÆû8˲eË–-[äççççç“!¦S|_FFzúÔ©ƒ¿¤0j à‰/_¾|ùûï‹+…_ÈlÀ»eB'^§ñ†ºÿEÏ=ÿ`ºø²ç««««kj€S§N:u X¹råÊ•+EVæ½_À´:2’ØZNNNNv¶8¹\.x¿7 „7h€—mHx¯¤·i€·#3@rrrò”)"œ¤òïÙ³³fÍš•™¹|yRRbbl¬B¡T*J%m1*€R©PÈå”âÓuîÓï …\®TH[c¸¸åvó,îsëñОñó×]. ‘| fàsû=ïv?ÿ9|Ÿøþç[ñ9ïßùÌ*=Ï!§¶¶®®¡Áá(---½~ý³ÏHUU¬Wo}{£<·Œß•ÿþwN§ó÷Ÿ0¡³³³³«+5•H >ê$î¼è¯7+/c'¯Æ]^ýýŠ\®ÖÖÖÖ¶¶²²ªªªªªªÏ?g=>¯WF—ËK5 ¾¾Ô²ËpËàÌ!‹-ù*gÎ~JâM8¹o³QkµRk±Pk6óõ!Ö&+”1 ÊçßÅõ}«àû•îöyåÛíÔ²!D~4ÊàÀŠ÷Žeï @­®Ô¾#ðïä¼\þY*ºO»ƒÚ %tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:44-07:00 ¨â2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖtEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/document-print-preview-2.svg7pIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-print_16px.png000066400000000000000000000010401321676412500235620ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  d_‘tIMEÕ  /Ÿí…Š­IDAT8Ë¥“ÍŠA…¿{3‹¼@v Y©«Ðã&DŸwÁÐg@tD}†IòÉFFÂl²LVw*:$éN§ª\hÛDG´ ÷R÷Ôá|UðŸK~.Íú!üÅÜÑÝ;÷¶ºfÝÅqœÙÏ_<ËÔQ¹F³î63{»ä»Ý.³S^¿¤VÝ R©dÎê.R©”oVçìß÷qÎeú[¬µôz=jÕ}T•ܪÝFDè÷û”Ëå? xž‡ª"ò=ãb±ˆˆ "—;pÎQ(ÒúáƒG),‘ß`|<>‚|>ÏÕ+×°Ö¢ºµaðéœ(ŠŽ6‚ƒà)Æ’$¹ôÌç5T•wïßé5"Â`0 ŽcÚí6Î9Â0d:2™L&ŒF#†Ã!­V‹¯_>g3X,DÌf3|ß' C’$I­cB¢x•PUæ‹ív‹år Àz½FE°Ö°6Õ{¹ÕÚÍÝŒ1\¯ÜHiüà‚µc ªšâÝ„œ ¬V+<ÏK­þÊ{CAUqÎa­Íœ¿y}ÿ~óÉ7Á#Ùgý ÃÃIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-print_22px.png000066400000000000000000000015451321676412500235710ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ D¶™µòIDAT8˵•ÏkIÇ?Õî$3ë Q4ÙíŬ1N9è!â„]aÅ“ºŠˆzCHÀ¨¨ÏzQ$æ ¢™à‚¬ˆIv‰$o9úcaM”3ɘéîé®z¦§$ÃÄøàQEWÕ§^U_=øN¦ê}ÌŽŽÜþüLƃ£GŽÿ¬™ÙÑÑZ7t‘ìèˆÔcüÐhƒÙÙYr¹ããOQJqàÀA”RضM[[[íÉ—l`­}kk+SSÏH¥R$“I¦¦žaÛ6–e5ä¬ ¾wï.¾ïãy^ìÃÃC(¥r^…RŠS§N£”"›}À‰'±,k98X5âþ¾žxвpÇqH$¬_¿!†Ö^E횺àþ¾3ÀóÚˆmÛÆ¶m¶oßAgg'–eÅ^cÏ£µj8¸3xþ"Åbc ZkÚÛeóæv<ÏÃu]ã9]™ Àþ¾ÓU¦Z]˜Ï361ÁøØÆè†?öÛ&“ɰgï>Þ½{Ëÿœ½0xi¸­TÍu]ùRsGÇ‘™™éè“%ª˜/䙸ç_vïÞÅÆ›˜žž¦»»‰ïSkŸBŒ ¬OʺMOÏΕr{3;ÇÜÜétšÉÉI::¶N¯* ‘Xb: c€ˆ¡\Èçó”ËáJ°R áÂà AXFkó & QÆŠ˜ˆX‰º)Ù„Ö†T*EÖ ºº2üÔÖJa¾€H¤!>‹”J.Ö…R ¥¬XïÍM‰ú™†!‚N¯¥9ÙŒçy  M%B£5--ÄhŒTN$"cQø¾˸ ¾ñtìIï¡?ó÷ãG_õ°oíØÆ«×/ð}ÿQ .Á­¦D¢wa¡Àï¿í_‘²E„5‰%K4!¥’Ëëÿ^’˽¿ˆªÉ¼ë@ï·”£ o^¹|õ¨:¥*´›€ŸuÀ‘›hŽŠ€ü䀠£±ú5/Ê÷5@"j“Q¿ ÖÑSéF­Y^A>"”®‘o¸…·IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-print_48px.png000066400000000000000000000050721321676412500236000ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWÕIDATxÚí[ËO]¿¥í´åÙF£òQbƒ,º€°€DþD ÅIÜ6,¶7$’®J—h$!`(`tA[Ê£–vfÚoq=™2e˜)}ô·àrßÓß¹÷œsï™A(H « Q¤¬«««««ëëkjjjjjJJJJJJ"ˆxÿÐóÂçóù|>¯wzzzzzúÙ³ÙÙÙÙÙÙ·o#5¾$ÒÜØØØØØøæMÿå%þ$Âï÷ûýþ¡¡ /±X,‹årÈïìììììÄŠ¨È#''''''øwE ¶·····c=+?òóóóóóc?oÔ ‰D¢KSPPPPPþ¸4MÓ4Á`0 ••••••!$•J¥R©ðq°j‰6 ܈º$‰D0‹Åb±X,ç'ÚÙív»ÝŽÐñññññ1B++++++eggggg‡þœ‘Z!óí °îdòÅÅÅÅÅš᭭­­­1Ä ;vÄEGÌÀµø`³Ùl6BûûûûûûÜí¬V«ÕjEˆ¢(Š¢JOOOOOgê¹vÚ?»Ø*¨¤¤¤¤¤D¸Ê1F£‘Ÿx6@EÁŽc ⢠æ;Àl6›Ífþ~@øy½&|€Bh~~~~~¡ÒÒÒÒÒÒàçF›`Ä\°¸°»»»»»ËèúpA’$I’̸Z­V«Õ{gñBÌ`2™L&Sp;·Ûív»ÚØØØØØ`Vp¤X_____G¨¢¢¢¢¢â º¡\Þ İ¡Óét:]èó·¶¶¶¶¶—s©"6À«Š?шåÛòøÒ.òó+ …Bqþþ—^N§Óét— ÕÁáêj˜Ÿo®z¹\.ü ƒ¨ ŒßÞÞÞÞÞÿZ*¸€Ðù233333£ÅRàr¹\.W0¡®@Â]áª0>@VVVVVVMMsssssó‡2™L&“qµâŽŽŽŽŽÂ'>77777Wx{Ì/´=ltwwwwwûMxž_¿ôz½^¯oi9<<<<<4ÃAA(•Ø›øôipppðÕ+•J­V«¯_n?<<<<<ÌœDÃ% ÞíÙå######Áõ››››››7oâüçÏ·nADíܨ¯¯¯¯¯éèèèèèHMå"ž .?^‡ Ÿ­Â Þ´+*****‰>liiiÉËÃyýznnnnnîåK®y8 V«Õju}}uuuuuõãÇ ÂoÚ¢GP¼ñö€ƒd[[{{{»L¶´ôóçÒR_„N‡‚?~°Çã\C]]]]]]óócccc££UUJeè'T8@?ȳO ìóW}¼áõz½Ü ¡äääääd„° @¨§§§§§çû÷ÉÉÉÉÉÉšv{΀o5 JÑ:0]¤¤¤¤¤¤ð·ƒ“¶R©T*•••\íxl€D÷ê‹Åb21+Q,‹“’ÀHãòÀž+§ðv@`[¦¿~'˃ç‹Ô8g=7ì§ÛöüZmm탰£%œ<óaŸÏç <ŠÃ+---íÚ5¬%‘r»±‘r:™G(ŠƒM vBÚŸÞï$ñ¡ö£i¬RI ‚ííQE‘$ÿØ‚¨óF£ÑlFH.—Éär„(Ц)ŠYÓÓ?ÎÌ ÔÛÛÛûô©Pê//Ìf³ÙbÁ 25•ÑE’ÅߟW›Ó4M ü{˜Øív»ÃÐøøøø»wÉå E4ïN.L&“Él¾´Õ͇w€B ^^^^^YA¨³³³óÉ„ª««ªªªâMGì1j› /ÈÊÊÊJ†©¨ ”¬F£Ñܹƒ^¯×OM!ôüùÀÀ‹WÏ;w¹ªêîÝÊÊàßO’QÚ`ikkk{ôˆ1ʰåØ~>ã°Ëñx\íOëw²}°Ñ6/Wzrœ³ú¶QtV@~o4 „¸XàôyNB¨ âU‘ŽÍ^DÍ J@H2±â ¡6€C2üÇg8§ ø„Ä2ÂÉÉ8MMõx<ÇjÝÚÚÚÚÚÊ˃Wü¸¼¿ßï‡ÛNȳïTÎk„O¶cwö8|Þ ûy¸Ÿ—? dÒbÁ'düÒ°ÕŠKáåHðŸ\®¿€O‰ ø¦Pào¢pHîý{¬Š$1ÿ ãrƒ$gfffffp8(uŠúK(! •Hð•ÃÚÚÂÂÂÂÂÂÔÔýûµµ÷îý÷_yyyù‰L†ï<¤R‚J"¨€»\®—J¥R‚`òà¶‚Ë-Ÿ}(çKi«ÈÓêãLН N'”yá9¡¨ƒÁ`øý›$¿|ùúõÛ·‰ Ìã¯_À+›ï¿ å!ûíõ......ŽŽªT*•JUV¶³c³9·oã“àU:û M;‡Ã±¼¼ººººº:>ŽË!„¼‚u iVD Œ„`Ë@ ÆT@ÈK~ÿ2Ø'äá·§þàÔå‚rŽ$ 6ÄC=£²âMA|+ 1äaå{<8A0þQˆïñl]–NãŠÓ„Ÿ@gãÇJ© 8j%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:44-07:00 ¨â2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖwtEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/document-print-2.svg°p½ªIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-properties_16px.png000066400000000000000000000007201321676412500246260ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÕ  ÆÒ+T]IDAT8Ë­“½jÂP†Ÿ¯º ‘l‚"Þ‚fuèØ¡×à-8(qÈ%ˆ.]tiéÚÁQpõNDè¢dМÕ)vƒ1¢}§ÃûqžïïÇßA¼ñœÞûýþ®ëŸ•ëºG€ì%r¿ßE"û糈Éd0M3Ž%Qáû~âÂ¥D„z½žð²×Õj5z½^ìu:J¥R ðrÁ÷}V«ív­5Zk<ÏC)…Rê>`:bÍf“n·‹eYXVjµWwpθX,ð<A$Ëvû{s—©N-f³Åb1ŽFAð¸‚ËÞÃ0$ C´Ö†Ã!»ÝîþZ­ŽãÄm6&“ …B\.Ç|>§R©ÜˆJ©Ô;p‡õzaäóùÇïà4¸$¤Ñh°\.ï.‡v-Ó4)—Ë)? `ÛöÏ`0x}æ+Ú¶ýÉèàŽ£æm1›$IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-properties_22px.png000066400000000000000000000012601321676412500246230ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÕ  (`{=IDAT8˵•¿kÛP€¿÷”Lµ4#'xʦÄ'qŠíŒ“9C÷¬¥whë’º{O^ó7x $¸?0„@ìà%Ðv–D¡IéP”ס–*Gqì’öàÐÝ{â»»w'=øO"Bc¿QÔSJ½|ötïùØâ~£®*ûº ys·£^^^¢iJ)„ñ»¨¸ú±LÉf³cœ88??O@nËÚÚJ©Äú½àÕÕUææþ¼Á˜WöSÁBÎÎΦ6l}})ål`)%J)òù<óóó=! ðÇîÊÅ-„œžžŽí5›ÍÈÞÙÙ!NS.— ‚ NÔP|\bqq!cZ«Õ°,‹……:ÅbqâË»ŽÂq„ ƒ»»»s}}MµZÅ÷}|ߦæ®3–÷5϶mlÛÆ4MÚí6†aÐn·I§Ó‘J)gË8^ZØÈP›Í&š¦EþÁÁŽãÌ–ñ»÷Úï÷éõzT*<ÏÃu]\×e82¹ººâððÏó¦OE¹´…eYxž‡mÛ¬¬¬P©T¢JÇ¡Õj¡ë:†apttÄÒÒÒô9v]!ç´T*qrrB6›E×õéÇeyy9ñq„•R²¹¹I·Û%•JÍKî÷ûƒ LÓd{{{¶ŸP\r¹ÜØd„vü©”š œÉdþÉÕonn^½yûzï!°ÏŸ¾ vpAg00ÎîŒWOIDAThÞíYMo=~¼Éæ‹”¥¼BU%M¡Eˆ3‰#\ú3ø\zá'pç€Ä¤J¥-)‚‚Z"’ViÒ쾇yçµ×±wlàÄHÖzwÙyæí ðWþJ*¶7o>|øøñóçÅb¥ây@&ˆÿFla Ñg¶6ÐxSßö›~ÿøøõëÕÕ½½—/GðìÙÖÖ“'ssÕ*}À$a˜þyÜ3!€ÓSàéÓVëÅ‹óçM:³6ÅbµZ*_¿½)  X”÷ÿ{ÁÒ7ÝÛÞ™€\¸ÕªM‡@JŠMý0”Øú¦{¦TIc²@²’8Ϻ2a{ç@ɺ(H2~ÔŠ¢Æ¿ àDª"½››ÉFâùÛ·ãé ÌFè ܘˆëoœØBFàãÇÑ>˜ô¾V‹²ŒÉgš$*åIÞUlzFÀJâØØ°hœY\´Û2€¸9 ^kµacÕ~ûûr=8w(—ãAè!'‰L†é ˜ h ²±t:ò½´šÿóÏðú†@½>üÔ ˜r²p¡|úÕ“É''@©ÌÍų06•ÆŸ?‰öLfØØ’'m»»€çQÛÙ¡6=-ÇÖëÃNKÍÀñ1Å®ÉÓ<éâÖ‚zXh4ÈðLF¶\Ž2Y6qS“ÀÌ Ñ}tdfÀæy]|Ÿ€0¾ÀÔYZ’^Ÿ³¦”jcÀÄĵk¤'›%|½|9š>ÙøÔ ™*¶lôþ=õ¼a:#GG4ÔÊfVKnÕïÜÞŽ§b i»|ëÅö™3Ôg &&º] Ù$£Õvé®;0ê12Ä›7äUÎùóóÃlAïß¾£ pxò$¾{wB!d[‰õþÂ<ÐùµßVV¤AB¯^Ñvý:Mfß—!´¼ \¹b_u[œ˜bÏbw—r9W¶·wïÈXß§4™Ï¿~E³bÀvÈJl!€¨ßíÌ„ZJét¢i“pÿûwZ±çç‡OàÙ^¸†ç³³Ñ– ã¾ïË”©>çZ“Týh6¥~×9à Äì,­Ôªñl0Ç:Ç;7/_ˆ‰œÔ4º¹ \½Jû!D£!½õã… ÏÓ¡HÝÐé xkáû\J €?>3\¼Hq®ËÒ’4jy™¼¸³C™GÕáû´…>8 jH© 1¾T*` E§§æðY_~~ö,vrB÷…±×í’‡÷÷éÊ©Õ$ˆl–t¥'̈+Ãpe…R-ƒPçZH>l•Ú*c2}Á1'V)öÅù"ˆ¸_û0E(>8-Ö : ëf;ê2“6—¤ù{s“ëCÓk»ÚUÁ/\Îßùžï=çüν?-xåݳöåBXÈd5€ xB‘Š/¥®kX¬6Vo/ã GY½½ÌôÛ/ìëæbê³qñ«Ÿ;|ûâóGŽ ë5ÑÚÑæ°~ýãO´Øì @B«”ð…£h•{ÁÚµ|³²v%•o\›Ón,^wêZ­¦¸=‚šHĺºù½™m>›!·úç=…E€®;äû}Ö@añŠ4à¿ÊÌÄéâãÑY½–û£à GY/pBäÕ ¾ptÏŒEµ$Õ,õBþ‰®•ìù×?­\8óy£?²"óY³|‡$SÌg÷^<÷ÚS1{Í“W_nuÚ%ï²Qöu'w.ý6Ç€´t÷öÙɦ.š=Ž´­§Jk¶+ο¿CàÉñ©{g+wóß8wæ=à¢ÙŠÒ[ÐíòS*m”[,Íg•òßkK‹mïÖÊ-ŠÅ"~¿ŸÑ±‘Þ­ãÖ †( (²ò™nÂh4xæ/Ð5ËožÀív“ÉdâÀ¼Øäžè{$I¹\F@03Mô'Ñœv·€jµ²aËë<Øû(û{úpJN<pÈlðt8ܱ-«O^bñ—ïH­Üà®×¨”‹¬çTnþ:Ëǧš1‘Hà-qtl¤W’œØl6¼^¯I ù£L fav?LÃ0š}0hsyYœ¿ÊÄða¢á8²,7Ûáetl¤Wâ÷‚¨ªŠ,ËȲŒ(ŠÄ:0yjÐ¥ÝÃâüU&O ë8`òUu£Šö¶v€¸zè`7µZͰZ-är9TUE’$dY¦'žäÒø ³3¸|!–®Íqi|ˆžxÒTU•z]§P(û;Åjµúp0DQA×ë4š'¾ ª*žÖ/÷³0;Ã/%ñ´†L@½®ƒn·[ˆD R©¶Zívû‰x¿ß¿ý¬i^¯—ééiìv;²â¤UiCE$IB$IBQTU%N§wØMaqëÛt]Çb±`¢`¡Z­¢i†aÐÒÒrÏÌw½AA \.Ó×׋®×±X,èºnm6ÿV€t:mƒÁæýåÝ3Èår‹ÅvØT*e‚ðÜóÏž …‚—ù‘JÝ9ú¬Œ'”{6sIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-save_48px.png000066400000000000000000000122631321676412500234020ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWOIDATxÚí[ilT×õ?3óæÍfϾgÆñ6¶±m¼@ƒƒS ˆ¨”8%%A•©•Bƒ’¨jšªjû¥RÛDQ>Uj%$ MZB¦º³˜ÖŒ7¼ÏØ3Ïxöåÿáötð3Oc0®«þs$¸Ü÷îÜ{îùížûøŠ¾¢ÿÏÄù-ÄáñhZ"d2“©ºšÏ—HÔêÂB‡Ãáü›d2 =žpØë»v-‘ˆDüþ™™ÔºÉe½&‹uºââ}ûŠ‚‚gž9y2+K©4KKM&N&‹DŒF½^«•H€¦)*™L&‰xÜëõz}¾HdrÒåòz9—kvvnÎëõxœÎ/¾øàƒ@àÁƒ7>ü0•J&ãñpx£¸VzjðxB¡Tj4j4••Ÿ|b4šÍv{YY}ý–-EEAAA^žÉ$‘Ð4ŸÏã½H&“ÉT ‘H¥R)ò7¾_Z #€»wûûGFB¡7zz††Â቉7NŸ~ñÅPÈå8~£ùÄr[ë4­×——çä46¾ñÆÕ«µµ¥¥¹¹ñxSSuµÍ ©TJ¥\.s8EÓ"Q*…_ÞÆã‰D*Æã‰@(Æã  'ÇhT«ùüŠŠââÜ\‘( ­ÖÃa•*r»Î¿üe£ú€Ï‹U*»Ýbij:vìÂ…ººü|šþÛ߬VƒA* …(ŠÏ$>_ ‰$>Ÿ¦…B‰„Ë}Øã?lÉd2™î“@_,6™^{í‹/*+M¦hôÓOU*™L ‡#G*ݼùþýÉÉ@@§ëíu:gfÄâžž±±drddllz:ŽD¢ÑxœËÕj•J™ŒÇ£(Šâñ"‘X,‘H»¤‡!–'“~(˜L|~$ÂåÊåÇììÌÌÌŒË..NMݺµÑÎ(ÏÇýB±iÓ®]|àpÛíz½V«P…>߃¡^øðÐÐÀÀ­[/ãã7nœ:{<##W®¤R$lËÉÏÏÊ2›««;;5š‚‚ææãÇŸ}¶¥¥¢B,¶Û­VŽÇózýþH ‘H$’Ib [J"A,€Ø“Á PˆÅüûß_¼¸°Ð×wîÜ~d³%“±X(äõn´ ÙhÕ@Q"‘\n±˜Í¥¥;v¼þºBAÓÁ`oo_Ÿ×«V>|ÿþ•+§N:´¸82ríÚ/ƒÏð0@*•J%d–T*™ŒÅHš97çt^¼èóß¼yúôäd0(—·µ©TjµF£Tjµ*•TÊå.-E" mË2›õz…‚Çs:'&&t¹úûÿøÇôšÈÊÊÉ©ª:rÄlV©¯w|<ÔhÚÛ'&ºº>üpÏž'5y’Lú|ÀädOÏï~çñX­GŽ8¥¥6[vv,F4ýpÌx¸  Pv»Ù¬Vóx££nw2YTäv;]]}”J%Ñh °Ñl¸\Š e2Æb).nmõûãqšÖéffþñsç~øÃX,˜íí]+#Ä6B¡pØç›šº{W,Öj7oÞ¿?/Ïb1h:c±´À“ÉGLJËåp²²D">`hhxxtÔåŠD¼Þºº6ZàL¢2 àñD"™ÌlŽF£Ñh4$âþüóhtqqzúÎ'•J¥RiqqIIIIIɬR©T*Uc#9çR×a’ÓùàË%75ÕÕ••‘ L|ÿr3-Áë%‰in®Ù¬ÓÑ´Ù\\ÜÜüÓŸ67—”Èåo¿ý¤‚òûý~¿` ¯¯¯¯¯ïw\.—Ëåúüóu€X€T  nw0èr ¦>DÀ\nkkkkkkoï‰'Nœ8PVVVVVÆ,4ˆ@‚çrb>?yò׿¾pÀïB!j9œ•é*¿?ŽF6o–É”J@*Õj)êôéßþöôi…×a®ÇÖçr¹\.Àív»Ýîúúwß}÷Ýwß={öÌ™3gΜ), …B¡Phbbàp0‹ˆD&&nÜ ¾ti GhµZ­VÛÚZSSSSSP^^^^^@4äQ3.„M:\.¸Ý>Ÿ¢€Pˆøú‡5ÿQ€àyËåp¸\€™™ÙY— €Ç#.йn&@ˆ…ttttttˆD======ÇŽõöööööž<¹N¤RÉd4º´47ÇV{±Z­V«õå—÷îÝ»wï^€¥¥¥¥¥%€û÷<˜ŸøÁ~õ«K—°!—K¥BafÆúú†‡Ýn€½{wì(/ i±X(|8/(p|Žã(Š¢8€cÇ~ö³ Ò|d¢ÑÑùy€o}kçÎM›¾ýí}û€ÊÊÊÊÊJ€¼¼¼¼¼¼—_&.é½÷`ñøS€è»ÛÍ|NÓ4MÓ E~~~~~~{»Ýn·Ûíhª‹JðÌ355 À_ÿúÏÎÌlÝZQQX@ιdÇãrÓ5 ††êê¢"‘H(¤i€‰‰¹¹¥¥å‚FÍ'|.·€úÈ‘ýû¢ÑX,™$ -†¦ÉApxx|Üí& äñ´·77çç“y“I¡P( M¦›7oÞ¼y³­mzzzzzúܹ§åääääättìß¿ÿþýBa<×H$Dó( à»ß=t¨¦†¶»```hhj  ¤¤¨Èjw»ôÁ ÿ  ‘Pðì1`¹E\¾|çÎÄzyÐNÏ“Jäå R)@~¾Á ðå—ׯœ:õÖ[­­R™ ‹Åb±@0 ƒÛ·oß¾};ÀÙ³gÏž={ôè“À}RÐõ455555@ öjÎñãÏ?_]  RI¥08ètNL J¥X ‹‘"\$Bj>X”þG×ÂÌ~Ò'fÒâ¹Àç#'jÌŽ¼^¿?‹…BаÙôz©àøì³în€÷Þë쬫05𬬕û‡Ãáp]@aaaaaá׿N,C¯_wH0*)Ù²eË–-[jk•J¥R© ÙÀÊñh Xëyë­—^jhH¥âñH`jjzÚí0›u:©4]Bg8>Db1"襥h`nÎç …Üî……``q1ŒFÓ€ àkk7mÒéÎûòËÛ·Ž?pÀá()±Ù4â+†d… ¹îàBííííííi“d¦m|>ŸÏ秇ï9âÞÿõ×[Z¦§ggççÈÅ €V+—‹D>_ ‰¤ÛùùÅÅPÀåòzƒA€Éɹ¹@`vÖã ü~"èXŒë˜$ …|>À×¾VYi6\¾|ýz_À7¾ÑÐ`³Ô×—– +³"ÌÚ˜€à¾««««««rsssss_}•¼å¬ºÆ¶jð@EzñE‡Ãáp8Ò®`j úÒD"ÅÞÿµ×îßšðz=ž…ƒA¥’H<â2‰†cÊŒlDÓÅå´¶VW[,äbgt ¨ÈlÎÎسgÛ6«5»O¶ó î÷!“Éd2IÃívF£Ñh¶oêèõz½^ÿÜs»víÚµk—N‡šŒ †° œ­Å¤ð'?9z´®`pphhb€¦¹Üx ¸87W¥Z-—mŒKòý;ªª,€ÉÉÉI—  ‡ƒA€W^yî¹¢¢•ü Øâ~˜€ Â¡ëmiiiiiaZÂS€LüÊ+;wîܹsg:ßg]R²H÷Ù€`7©T"¡i€Ÿÿü7º»{z††T*‰„Ç(,4›ŠÕ°m[Y™Ñ  ž˜øþ÷¿ùMRÚH$–[ärÁ3-‚©X¨€”‹ŠŠŠŠŠHZ~à¦ék@ †,°{·Åb±X,idgÓ,‡ÄtU2™DBQï¼óÒKUUW¯þýïýýV«F#Øí&“\ÎÎoE…ݮшD<^*píÚÍ›ƒƒo¿}ø°ÃA,Ž”4­éLg>GB‹Çßãx’žŠDf³Ùl6>¼fÈD/¼°oß¾}ûöÑ4"ÎdœÉ“1$Œ옿3™Ôj‘àÍ7Ÿ¾¸àÂ…«WïÞ(.¶Xär‹…dMH6›Ñ(“X,¨Ï>»råî]€'::JKIu”¢Ø] “¶ÀÇ¡\jkkkkk1M=ztÍ ë©«««««K]$úDd û(pfŸ©alýü|£1;à;ßÙ³§ àüùK—îܨ«Û¼Y«¨¬,( m~¾Z pöìÅ‹·o|ï{ètJ¥H”^7S-Ší=’X,‹Åi#¡ë%A‹‘åå …B¡PÔÔ<6r¹\.—WVÖ×××××;‰D"‘D"‘H$²RS0á8<²cÖ æs& ee6›R pèPs³Ù ðé§—/÷ô”–ææ*úÓåËwî9ÒÚš› PP“#“±¯Ï¶.Ûs,Æ1],0¢¹¹¹¹¹¸³ó±@Íß½{÷îÝ»W]&ƒ¨¹h!$v¤aæÑlg G‚@KKE…ɰcGy¹V ð›ß|òÉ¥K­­••z=ÉçÆôx¦Ebÿá"E­‡šN48-pfÚÍ$´ r/‚®è…È:É W¶.—ËåÒô¶mÛ¶mÛöñÇ"Ñ»©2BFpcYYYYYYiË`óµ™4ÛM›H,(-ÍËS*ËË †•‚džOð=΃@¡¢dggggg§Ç‘‹˜´å³Y2¶h!¸Oò{`pppppÐé$rL_d­(Æ ƒÁ°gO[[[[[›RÉÌnðà ¢ëaúD|Œc‹Œá†q>4]fšÊ,ò1+/'1€©(p|Ž'sf‹ï‘?8ÓÅ0çÇ>ZZîgëÖ­[·n8þüùóç_}utttttô£X AdÇŒælù> †IlYÅ´j¤H$‰D+5:ÓüLbæóØ2ÍV‚Ètƒ‡‚ÆñÌul6›Íf0F£±¾žìG$"|…B+ 7™ÈM×JÍF„3e LMÉ$ l™ë1çak™ÙÓã*F¦1¶ç‹‹‹‹‹‹ìü¢Å¹r¹¤o0Å^ÆœÓ*µZ­V«3 |µ´Z Þ¨y×:*ÀØØØØØ³Æ”ö!¬2èûûûûûûÓ®ˆA¶ƒL¦;×§5~£ù`#RCcÏš†®VVËÈzÿoáãqåÈ ³öÁœƒ×ððððð0Àøøøøø8ÀÔÔÔÔÔTú«ˆùùùùùyŸÏçóùÒ1„™=±é2i`¦“-³%ç›´ïÆ›-äûøƒ(öI±-=žÜˆ± ˜mH¬.hµçñx<ÏÊ“/3Ýcf;̃S Ì<‰í;£Õj&®‚aë£Ï4žíælÍicÌÉjéIMx½\Özñ½Úß­ÚØL"Ìtr­Œ¯UÀ;þqƒë:Àå®–rÀXùïL1›b‹)«e|µ¾~µó®wðEÊ´obñ¿S™4]Ég3oƘ% ¶{¶{…Õ ìigOKžåüohš´"A,•BÁ`Pe›pnnnnnî¿'OÏ$ˆ‘‘‘‘‘‘tÑ ³8ì ¥‹‡ØÇ÷N§Óét¦ËÓ÷îÝ»wï^æu—+`,FÞ ê3¶$m¼u««««««ëÙgg»:ÌtÕÈö{,bÀñP&…À“0ùrîöm"~¿åý/¯Š_ðdg“´J­®ªªªªªúÅ/HÞÜÖFê㙿óÚ¦ü¤šþ´éI] ñƒƒÝÝÝÝÝÝo¾IÊÑׯ“Ñ#¬áwËxq Ÿ.—W$“‘çè²0,®æ{ãÿeb~‹ËYZ"®gnŽ<I‹EPˆ%ƒGŠD¤E`Pðø]×ãÿ˜ÿ-BÐF°’6!-~¼™ì1ÿ›* žbÄŽ¯ -Fì?ª ¾œþùGeù‘EQ%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:48-07:00À«Â–2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖvtEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/document-save-2.svgÖô’îIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-spellcheck_16px.png000066400000000000000000000010561321676412500245520ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÜ 1/„KÍ‚»IDAT8Ëc` !øÏÀÀ AHyARmüÏÀÀ`ŒÆÿÏÀÀ Sddd„,ޏ$þC‹ÂÄ4«£kTa``XÍÀÀ0Ù†8$6²@Šá²Óf``ˆa````Ðf`122úÏ&ÀðŽá;#)¹HÀY]Î`ãßßß>{÷ÐqQø‹{LÄjÖnd—Ь”•“åæãde````!J·£¶F„Œ´´õ‡_Ïþ½zófÉ£çá5 x¾ˆ“îÇo·s±ññÈJɧÿbÇñóÃÃGÏÏÛ”úý;NÜ'2¨˜¨˜o’U¹óøêô÷ßÞ± óüøõùÿÓgOV¬Izw¦«¿Yÿ2üýÃÇÏËlÀkžùíÇ·?X_0|xôõÒÎsצ"G%36îocx÷_ïÎA6fVN^6å¯lOؾ|úöóÊÍ U‡ ~FVËŒ+ ìdxýßòá>¦ŸYÙ™¹ ß½ú°ÿÜù'M¯üûó))¡§V6(fåS`à6”–þòéÛ›ã Þ?døËð‹áÌðø¥ÜF ÒIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-spellcheck_22px.png000066400000000000000000000014321321676412500245450ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÜ 2íÔ-§IDAT8ËÅ”MLAÇÿ»ÛvÛJ¡©PеEƒh"‘‹Ñ ñ+A=y%šx šOêÁƒxgcŒ\LÔ1ñ“D©H¢ ˆ -j‘°ýÚ~ì²Ûew½ì¡Y·j1ê$“™Ì{ï7ïcæÿyhå˓֨"dCòÂ:ŠÎÛ¼ ý*e$€.ï ö` x]$ 8€.ìÓ=•uЪìÐ÷ ¡H&èg%G@€ G aiNêð~ƒÇ¿òø<À7LÀCx“oÕár± ±–Šï»A0U Ý­2Ÿ_=@Ö¨C• Ýy „W«Ûðli¬ó÷¤VÏÜ-HÅz–rÁ GÔº×{Ž·x~ÚF£ ˆ=´> Ìgÿ\ï¨>ê©k>¤Ñ"Ø‹œÀ¥2qÞ¨WxÏ0‚-žö.wE/§À¥ø6¹t3*sÂoƒw\…sƒØ%*Úì“D èõ÷zš:b o婸h2=üñÇ™‚÷£fóÆös^wðTFH¾p_s)ç]¾†Öc–JÉ" q)~zÜ "oÆ0»k]¾úÖ¾6ÿöʼ=h·Vø³+i±¹Ñ×”Pç•·'cìüèÃ.±)XÐÄOi!>¾Ìź]Õ.G[ë¶M’TÐòT 6ɹº_œx»»‡kPJMßñ‡1…µw~y'ËE‘6?åP˜ ù™(¨‘‰‹ñðÇЕg§ÕñŸºä‰<Ëìf'e%«)jÐagjHÉŽè׹щùÄHê)ä5`á>ø´+=m!ùE”/‘JäÂS³—§.jQ‚€Eo ¦=˜(Z)V=ïV}Ú6',:+ÚI¬Î=Ï%Ä$D½­ó<36 „¾2rwIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-spellcheck_48px.png000066400000000000000000000045231321676412500245610ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDùC» pHYs11·í(R vpAg00ÎîŒW0IDAThÞåš{lׯgæì.˜ÈĸÁ„‚ÒÆB6µwZ[âQUUªªÚHUš4- /iƒyC¶Ð˜—!¥Q£*jEü‰,0•ÕD`©õny)ŽÈЀœ%k01{û‡wœñxvw/ªéhîãÜ3ßw¿{ïÌŽ-Æþ—Íú¬üßÀ3ÌEd›ˆ—oÌg2øU9iYÖ/{üÆ`¹eY¯‹È9Iyóø†Áo„Ãá3@…«éï7oÞ|À‰D‚l €Ú¾¾¾„Ó0zôè/¤R©7iÙöõõI®äÃŒ3¦8í{2™ìòÄ=N%“É*€Q£F•Û¶}(É5(™Læ$0l¨ê\U%í­®ò\ŸØAO&“’L&¥··WC¡ÐƒªºÇÕÿ¥’’’û"‘ÈzU-qõVÕG-˪îíí 9y‚€÷U ´´ôm`Fº:8š.ÿ¥§§g¦'vppOOÏŠHxܸqç ©Tj¶ª^N¥R§;ö»âââÅ]]]7*™]²²²{Uõ¡ôÌœïéé9¦ªçÓõº²²²{2)൉'«jqºÿFQQÑ Û¶ŸPU[U±mûbQQÑ’‘€rgU}pfòXºíðxšì÷€ƒnŽMž#Ï튮AxÁ/‘³ùêÒì—\–-¿?xyåç㠼à} Œß]°%[BÁlþ þöHŒß]ÁÁ ¦ùJý?úF`|S¬AŒÙ$±A^¸²¤c]>à'ì®6dŸÏ]š¯,É #€ûöÇLJ`ØzaQ|õ/GW<Ðtqa¢>(ø¬¾Øk0y(a`ëù$ò ²÷ýõyÍM ¼9?% f›…u-/õ0{Þ{*ñt¾àpHˆä(/Ûýî“ñ¥·;8€)ò;‚˜]ïÎþŽGT„vžûY|ùHóäE`êX#\NÆHã™ùÏb"ò&P}0Ï#Ö}C¤1ñÓ€¿m‰ü•—Ot¬ÈoÌ"{5Ÿ=a~Óñ“ij…?b¼H‰{Üÿ³ÈgNà+¯e~wØÞþXüw|ÁLÍ÷Õá×íÅŸ»Sà JÀ!!ƒ{B~uâÇ+G–ñ¿Là¡?ÄĤî~çÑDÃïK@D,¾Z;n»®NÙJ—«¤Ë§cs›qyÊuM1ð=6å©ßò”Ýž2Æ ~“•ô¿ Ø@§¯A\3´[žög¸móöõŸ8í~ á¸{¦½e·2¶'ÞQŸYíǦýâ^¼ÿC:>•V¿%D%tEXtcreate-date2009-11-15T17:02:35-07:00…¦%tEXtdate:create2010-02-20T23:26:18-07:00gì=A%tEXtdate:modify2010-01-11T09:31:17-07:00F>ßšgtEXtLicensehttp://creativecommons.org/licenses/by-sa/3.0/ or http://creativecommons.org/licenses/LGPL/2.1/[|ž‡˜¹Þé{ŽYXÜðé_€rxýª7?¯àaeEu^0òÍl>g9¼~U!‰¢Žï,qº ›¾†‡¬X<:)åh©x«ËYîªFÊŒ#KKXXžÏ2£{S¯_-"Âä‰Ãg¶H³FzŠ0<2<ÍžM ˆÐé)ÛewØñ#óy´ ¡ÑH†Ú>]ÿ/ÀëW˺¾Oƒc"ó…Š ‰Ä´Ð²éá€OïåÏc£$Ó#añMw>]IÔUW]/r ¦i €K166b ‹}+†-Ýv›$K¡CµÍžñD(“HŽÇ„ÅdIyw¶ù²}T{BÙ…H0fħâ÷{Zµ€BDí;J<Û몢¶²!/6ÚÝ÷éYoÆX\¬ßwDÖ( ™ËŒx"žeæŽÕ1’è|±Óm7YGFÌÃívÓ¹¦+ŽÐÔgµªl/…Ó½(’Kñ18”aæÎ€OO®HÂ'¿„ߟÁ5fò—UY /ÔÈjKŠ(Šë7t–Ì`}#gµ¬© q†Cª¬}·zÅ/–zË 7ú‚H3´Î·Õ50ÙÓÒ7|ᜤˆžU%E,%¯´wý2?†„~eÎÍp; @®~¶Oãt5`JIw :hó¸ŠpÓ˜ã .Rˆð÷¡yÎpV –1hÄŽí5{ìS™ÜÔ¯£ÜÝ€ÈÄE]72g¸"°¤ˆ„ äx[c—˜dqLf.ã.»0ìŒö™œáÐí­V(xïOIÅ}¥Í$òû'8ªòZþ2ÍÁ©²6½Ð¸èx’"ÚÔQeM_RóJº;šŸuÿ˜ê…Áu”»š˜‹a*~5Ž£Ö~j\G©ðsIá½ßR JЏÁÚH(9\çovzò 0­ ÀI=(sÖ£7òEš3Te-ó7°¤ˆyT =íÉ;ˆ»šž©Û ¤ˆ{sõõµh¯Ú9–<¨toÅhì2KfæFUY;µÔ3=¹©²ÕßXñ Ó#¨+ Åõî/¾þö£ï:;¨@ŠÛ7ï±4_³WP`[‹|âÅ¥¡÷ufry¹cüi×W¼Þ‘…Æ Ä´A˜Ž$öï|ÕÙR½«³(ßÛÒàD˜H‡plpoC4¤›ÜøX•µÈr`Â9‡¤ˆ[(%¡jwä·ÖtÚgŒ ¤ÌYØà„O @ "âú†n©ð:ªPÈü8ÕóVšsT¨²–¸#8çãZ*ÐÓëî©ÚØÕò‚K'·ÈŽƒs·°ã©o`r[ ž„>‘¾1;¬îÓŽ-ýË ª¬Ý`& NÇÇOÿêH&“™‡×^‰„E4‚ÁÓð;ïÇäÌ(â³?ýŽî;A)¶†¤ˆOJO´5u:«Ëd4‚ÁtÔåíÆ{_¿–Ne’O¨²öùŠÁ9x-¥äL?à}hS—hBÇðµK¬äBøÓçæ·ÿt‘KC•µãµÑÉ¡ó{#“˜‹¡¸Wg&þß ‹B({.m–×¶ã¨ã ûn²?=Ëß ½¤¿ €0¹ÌZ^sέ`’ÛÀfÉ¥Ÿ 0kßNÎ9€?@Üœùe\’„IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/document-validate_48px.png000066400000000000000000000075661321676412500242470ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDùC» pHYsHHFÉk> vpAg00ÎîŒW §IDAThÞí™kŒ\åyÇÿïåÜæº³3;»ãµw×w‚¹¾¬íPH*%UBQ%¤*j¡R¹¨R«ôK•ýP•oý”¨2]§ªRRÚDm'JCB¡!¡$ð.—ã{×»;÷Ë™s{ß÷é‡qm\î•x¤‘æËœóû=Ïÿ=óžs€Oꓺ¬b5À›UúÁ‹ßý?ý$?À¦Ï`Á4¤ÃÀƒÎ×ßü7⣆¾ÿw@¸ÆÁb,Î`ù,މì€!N,LòßH–Kœs–Õ!®U]ò¸`§ŽdL‰ yâc({`6Àbp–a–+ñ'©8÷û»7îžš™>ûÚúRÝôØŸä€zác"?2\„dÀ9XŽ íá$î¿fäº[o™¼-wÕÄU[\éÛ~k©ÝëÔ"Å ›º±@þ@€ƒ Æs0˜\‘ÚuóÜMvŪ€²u7×:kåžß©šX×)A"§/Ná#Èý-0€sv>6$îÝîí<´/óYÛŽmt‚6Q€(‰dµ¹4So׊”P•ÔÉG"·rûG ÿÀv>6D{9‰û·º;ïÍpR*HGPPˆT„f¿F·.ý¿9‰’"4ªÐ¬‚‚ø5 äÿ Žal8vÞˆû·z;ïͰ3&;„'E V{+øåÙgPÔ‘s³REfK$c08 :¨w˜|8‡ìízD—Ÿû&€6ÀÒàœ_ŒÍVoû¡½¹ƒvІפP‚µþ*ŽŸ{µÁaC~£D—Ïø­À!Âq&Жou‰‡=p0¦!-ŽÉïdA¤±rÇà=ÃÌ10MÐp–…¡½ŒÄ}[ÒÛíÉí·S”BdB(((¦°®âùÆqÔõXš$2F)[?cÛµ°Q†ƒ41bü­Nºúg€Û‚YYɸÍ`ŒFñÞÛî£üˆƒ„´vž ö3#ØšÞ~x÷Ȭâi„,D"(+Áš^Ás½gQãk`9Ë"Ï19²3ÎV]νɤ¾+8[Ó ô† ä¿ WÀ²%ȉûf4ìhOX¬Î¸è.|‹£u—yGøÊwRЮ†Ýçœ8å(Á,#~ïtfËM7÷Y)ñºÎS‚õh /øÏ¡Á×1€ ‚Åæp›v”wÂv9˳~ì÷M“}ÉÈ<0 AÌ–Ë…¼BGtwÜ×_"añU£M”f)â_L~ï­á7ýs‚âA̱œÑf#þÀtzóá=ãûœ¬“EÄ#h¡ „º^ÃBïy4L Üáà‡íÚH‡X'=£k´°R[>úÚê©cݰ[UJGŒ—L@¤˜dÒ3À•’p÷ÕÅkn÷òÙÜ‹ññéžî8 âXßøÍ8&½ñÛYœ½³÷øÿ> @qŹ„%³\Šû¦³3‡w—÷YY;‡ˆBhhhR¨Çëx9X@‡µ`§lpÆ!„€Ýö0x>ÖíåÚBÇê=D cA,õ{Il; ¢ó—ÑÔ×ï6ÀŒ[ð¸dWjè{&ÜÊ—¿ºýž‘ÏOý&«ú§ÆÏøÕiMªÎÁW¥dᤙ vg‚Þ?%à·þ[ ¯€nÒ岯˜ýœñ{§³3‡vOÌÚ9/Ån`¸FS5ðJÿ%tM–eÁ’lÛÛKÃ&ÒÝjï„!sT™äÑ(ŽªQ¬cÏ#˜W¯#‰^b“pÓ®»Ë€þ°äŒ}å‹“¿“¿!¿–±•#|=\X V§‰L] ¹Ü“~tëÍŸ§îþU´ÿ1Äöù2ˆ½°ËXÖÙÇ»:³ùðî±Y'ïæ¡˜q1ƒ¶náäàetMRJX–Çqàt]t>0í×: šãZë%c(â ¥‹©)~ˆ1bp·Í\5™›º{­Üñ…_ÊÍ–Bk…¾ò‘’)T¼IÖˆ¸>M@ÓÖòéê©H I“_-" 3ÃXÐ~†!ücûìœ3„ˆ:º‰Wƒ“è½Þ¶mȦƒÆS]Ý:Ý^ ˜‡Ã1ÒTs>Ü?铯‹=;&¥ðnÜ´ûÊ›nºgGáŠÛ÷”gó» Wƒ@ˆ)‚BÂxV ã© ÖQíñvÒœ£†ráȆ %AÄÙ~–1~ïdjÓ¡ÇöÚ97Íp¾ó]ÓÆká«èQÒ:oÙ`u‰õÇ[ºy¶}–™c`ÇŒ¢*€¢c—€HÝÂ- ø¶’]¾çº 7üî–ÂÖüDº2„G Å4SP\A±i;…ñôï&‰VÒœbœÕ¥+¡'Ê &ö€á©‡oÛãäÝ‘‹ðœÐ5,E§ÐGï’Σ&°òXçš‹ßy‚ÏzX1g1`þÅK¥mCµ“OVM­¶¾èlæGd‰ÍëHW'I P'Þq·aí£uGa ?è·ýþ „RÙ”x}¬&ç"@ÚNÃî…XN%ãf°«|` @>úX¥e„,¸$6ª üêçKº^¯/z3Öœ=Îç“HUuh"éý¿~wð ÔOûÐëi+?ˆuÜuØn÷ÚcUò…Á²„65Ñ¡6,a!e¥À9 8 ¹BmD,8‚0`}¬Ò¹Kàmˆê¼rü5ª5ꋹiwηæ£8®j¥CôþüÝ_õ_€sÚ¤5‚@KU‹yÜjõÛ¥hUJÅ’tò6B Wp¥KX€FÅpsAhÀ}¬c¡@J )%lËB2Ðxiñ”it‹£›2GÒcî|'K“&´ïyçî› €þ>¨Z³$„cêÌ¥ŽJ‘¯6ŒæGEªà,}<€%-8Âlx$|€u¬"âáëàm„…ÅWNêV¿µXšÈÏåFÓóI’T£ Š ¬ÿÞû»ã»d;< Ø7† É1H£Á=ÖòûƒrÐŒ+Å|QdŠ)p‹#á1ÜàBpÜG­!!„ç­Àpâå—¨9h-VÆKG #¹ù8‰«J©(ŽcT»ó¾àß êÀÞ 0 —žf5™-¿”z«A¥X•ÙRÒ>ˆD€DÄ0‚Ð-Dâu—6½Ï-¾h:ýöâÔdåHqdd>I’j­Ñ¥xñs+ïþM.Lâ³s IRheEÃJËö ”zkÁ†ÑBA䯲–€ZjD" ‚laÁ.‚n„gtwÐ]Ü<µñèx±8'I5ŽãHp¥VçÚ¼$OîÍ4s89»îdœv¿é—;+ýJ±X#å<,iÁâlaÃá.<æ!ÅÒtCü÷ÂsÔ‹z‹;¶lž›ŸO’dIkÅqŒ'?óÂeÿ­D?œÛ²IK)/ïÔÜŒÓîÔûÅÆr§R.–åXa .÷àƒ‡RH£×à©…_˜ ¯ÛqÍ‘©Ê†ù@ÕåÖ¹Èf~ð©Ÿ]6ø»€ø@êKÂâšs¦ ^Ã˺­N«_j¬µ7ŒŒ‹J~KÁC½ž'ŸÒI’,Ø1;·söù¾êU»q'r˜ïN?öÁ¿+ÿ•ù²ç\K!ƒÜh¦‘ñÚÍzklõt­2žS…)t{}üdñ?)N’oÝyóÜg&®Ÿ÷M¿Ú¡Nä'}úöø£(<ðnêß®Öî 1õ/´6±Öæ\a"û˜mÙTýÅ}ÿGÿ±ÏVž½ÐY0͸µø¹OÝräêò®G ÌR=iD:ßs>œ·YïéÙhçáå»r°m[s&ÂÂX¾îå¼N_õKŠ'%ßê½453yôÊÊŽy]µàF1 ñHò÷xê/ŸýPÞW[nxb,i!—ÏÙéLz¢ß ÷¸Ì½>;’ùÕD¹üDAΤ‘&1Cw°»>ðË€Ù§w!N#N[ŽçdÁY:í¥Ã¬“í2IÑ6lÁ³¿øPááÆ÷}ÕOw/ Àyˆµé¬&†LlÃÁþÐá/K~¸ëicŒ&"€l8¸—}í×"ðI}R—Yÿ)ÏòÇ?–5Ð%tEXtcreate-date2009-12-08T12:47:42-07:00¹—¶W%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:49:07-07:00mîSö5tEXtLicensehttp://creativecommons.org/licenses/LGPL/2.1/;Á´%tEXtmodify-date2009-12-08T12:47:42-07:00æ&ÀctEXtSourceCrystal Projectëãä‹'tEXtSource_URLhttp://everaldo.com/crystal/¥‘“[IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-clear_16px.png000066400000000000000000000014051321676412500226300ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<—IDAT8•’Kh”g†Ÿï›™èL›ÛHB“H¼Õ¨+&‹ Ò‚‹JKv‚—…‹Ñ‚"ü ]R„ŽÆ…`Ku¡ é1-´i41Š1šqFI“ÉeÌ?óOþÿûŽ+Ec!ø¬ÏûpÎËQG¾`s8ĢƲ÷Ô ù‘÷@‡4߯mŽ­Ú°¢¼1¤¹zt›Úú^`qET³´*ÂÇ-±XHsöô~¥SIÕ™JªÚVè|Rt}#Ô×”]¬ê«éŽKˆð뙋·óîLɧ©Ê•­7ÄãM/€º…JDèÚ§NÄWrü“¶ÏUsK;=§»½éÆrìT“ÆÈ%Î'ÿ_A*©vi­¾ýtsG´®®¿þ›§W²þìvj×U‘í÷îßýCŒõ¾3FŽ%ÉÎìÑšdS}k9—$j&]¶toeQ…P5~PνÁ_ýþß âÿ` )àæëRIµ(rŽ;͵«:.iýB `ÆÀd±A϶àÍÕÉ Èã‘wj2[Ô¯VI8RòwÓU{°±¤#e`g!“ó^á³¹ëÌŒ#^ÚÔþU…VJÂo5RÁÏÙLZ[«Pþ">þœ‡Wš¥X˜¡P˜FDÐáJÒOz”ü¦ßÌ'yæÏM¤Ów™qcLLŒ’Ë¥™ÌepÝ)D„Xõ6 EÍЃþ’18o #‡úz)ú¬Æu=ŠÅ<Öèp •ñäݘܺy%oLðe‘ÌëߤûŒêYýQ{Ûò­/ÿ'e±5èÈ2 ÷CC}ãÖòY‘‡áwÒ€1t =øëvå’†?¨jÓ££÷üááŸk¼ëÖr áÈÄ;Ÿ8ŸTR-SŠ>¥àšµœL8òxþÜK~C(„ÚIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-clear_22px.png000066400000000000000000000023251321676412500226270ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆtEXtSoftwarewww.inkscape.org›î<gIDAT8¥“}hÕUÆ?ç÷zïýÝÝ;·¶¹y§m¾ÍérXbC{“b%F‚4ÈòjP©D!Í\…•˜SJ!5QRhŠ`fŠºM§ÓÍ—ME×r/mso÷ÞÝ—ßïôGWÉZ ø…‡sàp>çáá9bÝËŠX¤±\ ‘*¤³ai•½‚ûEÞÍSøñ¬¹ÁÀ“¥¯x=¾Ë*ËÔ÷ VU=XX<Û _;H¼÷ Sc)‚u•eª~_`ÇŽÇœDE5l;‹eyÈ5Ö,ÙºR¼°ã#óØWKÄ=?¢ÛÏÕˆøògceM¦¿¥†‚¢™ÆÕò­”L9äÝ»cÉŠîök•Gö3¤˜€™ö -GH›îš·p¹;;w\T$xø^ÁBJ @e™:_Óµ¯Ó'zݾ ‹O=‡Ëðræ­=ôüÔl [l*µí7ïÚñ­¢Sç΋õ=0eÑŒÉD~?EͳÛàp'…#ª­È×6—‹…›Ëï.o`k¹˜)¡®p긌IS Dom óÎ’Ö­°R¹øç Rh9¹¹UM\ß\.æßUÛV‰½RèsRÓüaOcÌãìi£ŠÇ¸Ú×ŘOÆ“õLwJ1}=íÔþ¶?Ü×ÓÑ;eÁ yùÁ[V‰“F~¦|7!mdjw4D·%o½Ä3ZÅ4=膅Ëûš§ˆ?®]Çî Ç¢ƒ«G~¬‰aÁ·f¯ª¾o«òƒ”Yù"çëBqI4ÍÄ4=¦M3Ñ5/º5¸Ìçtõ/‘+ Gzc±è*`{°BF‡lY)¢¥e¯¡®H'„¦˜¦…aZèzÈ(n·UO³ˆþ‹úê}á«jãR:k‡5ʨ€¢ÒìF52R"ùÛ€¢ ¡™"¡(ÒŽ!¢'ñ»êyüéRÏóeËüR(+n·âß#vwµµ8†k< IÄHÛLì„®†Ð=éíéÇ‘ QT/—«£šBU°B v¾o>&¬»' „ )b±RJl'…H¨—[Áå+¤³­[/ábýñDÓ¹ê–xÜycXÇBeñ‡ÔGBáK­MÒðNAQ!·‰†{Ñ]é E$áÞ+xüù¸ü%ÔÚ?ñë—zzí’`…ŒÜB(Bd>ÉÚ³µÕQÓ*FÕ31<™„‡ˆ…¯’’1în•~ÉñÃ{¢§ëO¬Ü˜Xðöç(BŸB(I¨¬¤R_ÕÏÜhïèi¸Pw a¥ÏÅqâ¸}cé» ª‘‡acÿ®õ±“§šö-]/oíÀLÞµëvÝ„Þä7©”@Yï½ÊÍz"#;7S®lúÚi½Þl_<ßÞwÔÙ°ûÇ€A` ¹]wôXáü€')wq!£ƒ/‰m3çÌK‰EÚ8S]ëìrŽ®¯’Úº¸ D’ 7)¥=ìIFd.ÀXô"S¦?Äq›S Í|¹i5@ˆC@HÈÀþ¬Ãæ(Ì\ ŸIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-clear_48px.png000066400000000000000000000133351321676412500226420ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒW|IDATxÚí[wpÕýÿl»½¦»ÓédùÔ‹eÉ–dìÙX®”Á%›!à$Š™ ™@&Í´ÉdÂ$8!ÌP<’IbãÉÛ˜6à"Œ-Ù²ªUNít½íÞ–üñ²£ŸÅï"7rN&Ÿ?ôfß½ÛÛý~Þ·?ÿCFA]ðBŠ¢šÞ¸qñbŠzú醆²2š¾ï>öŸH&A’¢ÑO>éïW”×_?pàäIUýéO“ÉT …2ý¢W+.˜€5k, éýhëÖåËÎÇ«¯ol\»Öh„dR½Þd²Ù€žžŽŽ–AhmmkkoïéùÕ¯öï—åk¯EYâñL¿ðÕf¶EþÞsÏõ×3ÌÞ½MM7ܰe‹ÍÖÚzäÈ@( E£@gç±c@mmCÚ5,Ë0Š‹Y­’”HLMÙl§O{½À™~á« ôl ¬V£ÈÏ·Ùl6»ÝfK&£Ñ©)€eõz› ¸óΧŸîè²³çÎ]°>uêï,X¼xÅ ž_¶¬´”açY0›3ýÂWf%@–$Y–eQ”e«ÕáÈË’Épxl xå•ÌÏB!¯÷Ì€ãd9(JUÈËËÏ/*–.--¥¨»ïÎô _m˜•€H$™ÆÆ@ ñùâñD"ª««ªJJ€¼<“)ÊÊrr`Y†¡( õzÛÚ€òòªªª*“iíZâC4gžé¿Z0«Ð Š’Äã¹¹<¬ZUQQ[»f Ç)J(ÔÛKv¼$M¯—$A‡‹%'§¬ ˜œΛ˜H&;:&&Âa «+ÓÈ4.˜€¡!¿hm-(°X"‘¦&—Ëfãy'7×ã™7a ¿¿¿ÿ‹ßSUUU +ËjÍÎæy ™/+;z´§GU_~9ÓÈ4.Ú¼öÚÇ+ÊwœB€ª©” Àó&“ÕJÓ4JƒeeÇ÷öªê«¯ ‚$ÑèâÅóæ+W¾ùæÎ@*%I€(¶·Ÿ= |üq¦v¥Á^î öîmiQÕ‡ª¬t»½Þ5kl¶¬,“©°ç §“¢$)š˜ á¬(’Ä. ƒçUuÆúúDâñÇ««—,aÙ¼¼¥KkjL¦µkŽ9sJKªª’’ööÚZH¥2-®+Ë& •’e ‘xùåÇeyãÆ‡6z{+//--(0e™¢t:²NUÅx(,¬¬T½¾¦¦©I§»ÿ~gþüe9?¿¼|íZ–ÅÀív¹:: ÈoeZ\W—M€¯7ÚÛ÷íko—¤'Ÿ¼å–}â‰üüœ‹ÅdÒëŽX p¹ŠŠ$ p¹ êëÂÂêêÛn£(Žãy’-«j00 Çét€Í–•¥ª.W¦õeáŠ'D|ÐÙ©ª;wF"Š’Lö÷;••SSªZT´hQn.PS³zõ÷¾”•Õ×oÙpËF£ Ë (±À0 ãp££| I÷ßOQßz+:IJ`0dZ€—‹KvÂ3‘›ëp=vÿýõÚkC}}yy]ݺu:]qñÂ…7Þð¼^¯( (~?¨ª,“°•¢€'öîíè^zék_{å@¯Òéhzõj‹%;›ãb±D"‘ÈÉI&UUUuºáaxÿýL òRqÁåètxä‘mÛ€çŸß¸±©‰eï½×fËÏ//§i—kîܲ2†á8–U€çu:† “)/ôx:y2Þ|ó‘GÞ„‘‘DX¿~îÜâbÀn'Å‹p8€ÑQ¿ßïÞz+Âá—^«5Ó‚¼T\¶X¾¼¶Ø´‰¦†ã«Õáp»F’DqjŠ8]¿ŸT\. ( 8pàg?;}èìúøíoE1•’ÉL öBqÙ&è§ibJŒF"øXÌh4C‡H£GUά,àöÛ_|ñ¡‡€’’ÚZ%IÒ¹s ËSS€,K’ß$‰D4 H!BQhº¤èéimÝ»7?r¤¹yhèС;ž{¸í6AE ‘È´à5\±<@ƒÖ¤þIíÌ>“eY>ù$‘…€ÑÑT*6løùÏïº X¶ìŽ;**@Q"èh`¢9ªJFš¦(–%á*·µ’¤(@iéâÅ›6z½Ù|øðêÕ99v{{{sów¾óÔS@Si¤NMeš€+†jE…rr ¾žã ¬,¦(€¢Ž%3[·VVRÔöí{ö|ã@QÑ¢E~? ª’Ó4LÆbÁ )â) ¡6•DQˆfP”,“âŸ(’>„ßOéê޹sׯgY§3''/Ïá¸îºÊÊ®®¯ýðáO?þüçh4‘Èä©+N€†¡!xï=¢ ¥¥gÎ@gçæÍO>IQÏÍ7ÿà< ×ët óé§Ó-LE!ÖZ–eY’ÈgY  GG½Þ`ày’7)òÅãdE‚L  ID³!?y°Zss›šhÚåš3çšk²²ÊÊ>ûlÛ¶cÇÚÛ}ûp ©à¿_Zk‚>ß¾}°eËþý°u«Éär²¬ªŠ¢(d独ª±ÙùÉ$ Љ„ÏG2eE!¥ –B!Ÿobà8N¯'‚V@–ɨәLZ~l6“ûD£¤gýÒK€Á`±Øl4½hѪU?l·¿üòOpÜ‘#ÕÕ@cã é@Ú4ª*I’”HOÚþ䚢Èé!ŠRÕd’ìè©)ÀlÎÊ2™€xœ˜¤D‚DKFcV–ÁÄãĘPÑ ž7y`–%‡ A‘‘çž8ŽçY–¢®¹fÕª;,–gŸýñÍæV¬¨«6oþwÉãK3Aé°aÃÊ•À·¿]PPV¶p¡ÃAQª:1AˆÑj@@<HD"‘9øe0(Š¢€ÉÉáá¡!Àfs8,@’DQ A±À²—JÅqF#)xde‚dý‰D#jk·»¤äæ›uºE‹<žS§n¹%‡#‘h´³³¯hnþ¯!€ì°M›ÊË++ ‹‹†eIçL|>"xš8Žã†ØþPˆ”0ôz€çyžãÈBL0HæKK“);›h”×;4Dþß!?ÈÎÎÏÿêWPhlìøqUíînnÞµKž}öõ×ÃáçŸÿÍo~÷;`çNÒy#¥Çé¨Õ€©eþtóm‚´°ìù£FÀÌq&A_ûúFF€ááÍ›|¾ÛoÏÉ),¬¯ç8ŽÓë­V ðz;;‰fãïÄDpÏgeÀèèÐq¢ÚáG“  i–µXHÅóD €ÑhµšL„ˆùó»ÝãY·˜˜èé9|˜œlm•¤Ï?okëêüþ÷wîTÕŸü„$bGÎ&P‚™6?½/¸H4¦g iÄÌùt£FËJ9ÔN*84=ožÇ -Xàtz< ,+бØð0J‘þÇéõ¤ÕiµVV299]ýd–B”ÇC|‡Õ Äã¡P0Hœz^Ѥë®ÆÆúú”$¿|¼«+•zã¿þ5•úË_ž|ò…€_þÒï‡@à_ T3b³Íñú5`¦“I7j„;ŽÔ\Ξ]¿~É’@àÆssóó Ìf‹%'§¶˜œìïon&q~,F4¢¸˜A¢›áa’ÉÌf‡£¡Ðë-–eËH˜ZT µ·ÿþ÷€×ÛÝýøÚk{öô÷<¸cdzÏO?}üx{;ÐÒBD¤u¦gŽš g^§›O¿î" И›Ž<ÎgªæÌù™ÑÀô¼V%=sf`èíýÊWÊËûû›šrsKJÖ®eYŽ3œNR:ðùƒÁf³Û‰`ëê‹%7wéR`b¢¯¯­åpÃÃgÏ:$Š'O¾ù¦ ìÙóî»ÀÁƒ>úÜsªúÌ3üÙg@s3±é±yí_M´šv}©c:"%é°FÄLÏfÓÝgz$qôØX<žH¤R‚PZêtvuÕÔx< ~ó›,KÓe·“h…tÀR©XLUÇÆúû[[!™ ‡½^U=vìøñÎγgŸyf×®±±7ÞøÅ/ví^xÔrZZHoX‹^HùnÚ©Î5"f^§g#P›—åKì k*¤=Ðyþºt*ªùíZ{0–ݽûw€7Þ(++(-.aûö›o&™t4J~AU÷ïÿè#àwZ[OŸ>ÿ¼¥¥³hk#Ö;“ðÙžkz‡þÿ×éÆÙø"aWøTÄìN÷üq¦óNwΧ¤3yép¡%½Éø×׳™,íóéDìŠK9š@4.Wàé|N:ßr±h×éœèlĤ#$})âK& f†³ºÓgsú—î{È8›išÍT¥t:dˆ€Y+iIgzÒež31[‚”Nà/Øÿá?ÿ„©Ÿ x?˜%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:44-07:00 ¨â2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖstEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/edit-clear-2.svgë™t–IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-copy_16px.png000066400000000000000000000007621321676412500225210ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDùC» pHYs  šœtIMEÕ /ƒ4›IDAT8Ë•“KKQ†ß#3cÚ€ý ÏÝýZ¶ˆ uðB¶°E‘vÛDDD±6þ1³6e0£¿ š07Íí´itFG±oõÃyÞ÷ã;äè$3¯ëú,F(ÁϽm®ÅïœwœaÓñèÖ(z¤ö&¸vÓj5ÁëB¡Ð„'”sjµ^«•…Æwcf‹ýÌnÊîyž¿u$IB±T˜úG¤E@Q”NŒV«9TlGr(¥(– ³,ËžâH$Ò?ÆdYv ÒùpP¹”R”ÊÅ¡z¡œ-¶,EÍA08Žv»ÝèºÆÂaŠòSi¨J%˜¦ÊK¥ дc°,6ÔîåÕïÝž¯žŸº‡1ËÓ¶(ŠXY^…e™P¿T䮳à6Ö£yyÇrl†áë;KUUän²ðìó’¦éðûý¢(‚‚z½€àãóݧ±äé§³¦i.y}¬¿*($bÉøBY¦ˆ÷ØIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-copy_22px.png000066400000000000000000000013251321676412500225120ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDˆŠ… ¥©Õ pHYs  šœtIMEÕ 3 –EZbIDAT8Ë••MOQ†ßsïL¿t×_Ðv¦þcˆ+W&.]³(Q0×&€•D‰!qíÆ­+C  ‘ $@k]ãXX"¦ÓÛÞãâ2Ó™ÚNÛÙ´é9óÜç¾÷£Tyµöµv1åCB4ž”>Žª[ªÓqž-,OËÅë7ëN\Ý‚­Ö33YQlWdfêt:rà7$I03O n6F ‡Gnnþä„ "3ÀËõ•a}Ž€‹ÅBðÝó<ùuçK~ñé13M¼¨D¨l¬ÎŽ4V]…[Sº¾nM•?iÜn·±WÝ™j§„cblŠJu"õz},ÔuKÃÁ…B†ÅƸ¶Ô\×µdæáÆÌŒf³€•R‘ÆF£1Úoa”Jwú`¿ÀÌÈçCÆž‡Úþ^ÐX*•FXš~"Š3633”êþgšOPÌ@2™Œ‚µÖ±ž×Æþ·jÐè8N`7hL$`YJ)h­ûà^¯™stë03ÎÎêA–á¾L&ƒl6 Èår+öa¾EÀŽSŒ†RJh­!„€?ûÛÅ3; N‘lÛX,Qض "aì,+X¼jmZkXv"ñãíÖ¦;êÜûƒ…m… ÐZãýö»a¯Yqÿ+k/–ó÷§ÏÌ&0fïÞ\^]àðû˜°e;ÿáümÛ‚”æcMÒ\×ç¿ÎqrzŒT&³Yž›ß VJ!•JEެ”}ë^Oãòê'§Ç€ Çå¹ùæÖŽy*«ŸºÝîƒÁ›«ˆ hªjð½åÅçýÚ?Æ” š}DWIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-copy_48px.png000066400000000000000000000041271321676412500225250ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒW÷IDATxÚí[KoÓJž$N›nˆÛ†e䔈 ´ þB%öHtBb+$Ä$$DUH°Q*±€"J’e»h +Hóò+qü¾ kn‚ã±ÇØNïý6®=öÌ™ïœó;à„ŠücvöȑÇH’$ÓéƒÃ6,(PEÑôÏŸÅb¡P*­¬=>ÿ€ÄŸ8qüøÉ“aÓÖ׿~ýü9¼€#P ‚ ÝnXf ãããã©TØVÛ€ÿ:ï]Œ4MÓ¶Á »ÖQ%܈]'A8ÄGÉ5#Ÿ£F¸#範GMšþ݈ÍÍÍÏŸ:uý:ÜØ-Cëõz½^w>àþýìÛ·°@É$A:6A¡R©T*•=ZZzüøìYx=ð €Ä_½zåʵkaÓnݺ}ûæÍ3gøpÛa&“Éd2Þ £iš¦¨P¹*Òétš$Ñí»n4jpnkINMíÙö´‡MsVæ«Q[}ø9//3Z Ø­„÷ÏÏl†ýWqð-F}C„3?»ý…›ùy®N‰ŸœœžN§‡K–ðJ8®;;vl5€]j:Áöööv¹ìæI÷p#-¹\.—Ï£ÛQ°uЏþà'áF¨ªª*Š=¡çç&ÒÍÒŸç p«é~ß|>Ÿ‡‘åœH‡“L0ëÕ÷"Üß¡“ÐÿüÔT&ã¤$‰D"áÄJÔØîV-~:Ä –ðë­¢—œðRü’«vc†:Uì 0vlµp (8­~Gº´ Ú©¸y] ð³ˆâ´»qˆ<íj5çOOïÝkõvÐc šp«ùÙEúP‹pP¯úk@ؑܯù¸± b°“ÞV9ùàDv(Š¢È2º—p»v\ûŒÏÛe€cX ˆOž{Âè87ë÷aQ«v£ªªªªŠ¶™N‹°[I²‹äx<ÇÑí¸„zm·zãÄ!FNÀØ-Œã—Ëår¹¼Ö[µ›!—Ëår¹Þy,‹ÅböÏ9.ÂÃ&ÜY–e¸ærÐn~vvBÂaÆ¢2×Û"ì•phnD˜í4û#+*Z‰†Ëeßà7ñ(ØIK<Ã}@Òâ4ÒQÄã]àùöE E8N„É8gG´o€@A`¸Ç8êÜxÝiQ•Ü£ƒl@Q­MÿøQ(‹ÃûÉàÜÜüüéÓKŸ[¿‹(.Á¨£¢(Š¢@Û,P,‹¥Ò³gÃ"þoܸa•~ŽÓ€w‚ÏÃW£ÑhÔj¬­}ú´¶†~/Ú¯£ÍŠ}¥åÞ½¥¥;wû“L&“É$¼¦¯ªz».=º=‚ ¢HÓ‘s€Wb½J‹]$INNpôèÌ̱cŒõ¤¥Ýn·Ûm8Žã8Nÿ·WŠ€çyžç¨ÕšÍjUÓ^½zùòõë "㘪AEº×UŒ(Š¢(À²,˲½sI’$Iê9¢Óét:šMŠj4¨Vÿü©V77·¶67·¶Þ¼‰ŒüÊá^µÜ(1<ÏóŽùªªKŠ ôˆ‡ÇV‹¦[-(Ц›ÍçÏWV^¼8ew$3Àè 3àJ‹Ó €Ò"I’$ŠÈ²$É2,Ëq,«[‹ OQ ÓjÐjQT³ùû÷ýûwï>x03Ón·ÛÎÎNä`F°‘îTjย(Š‚Ð“Y–e]bô£ t»°]–`–¥ihše)JÓ*•Jåׯõõ§OŸwN¿Ÿaìx=R©T*•2ߘiÚ`¤Ûí´÷¡Îá‡H8ŒxH0t,¦4Í04 ÃpÃÐív»wÄÄÄÄD*¥žÇ{Oôb˲zÆš}õ†Ä߯[Äàœé%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:48-07:00À«Â–2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖrtEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/edit-copy-2.svg·Ë3¥IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-cut_16px.png000066400000000000000000000014471321676412500223430ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDùC» pHYs  šœtIMEÕ 1hAd^´IDAT8Ë…“]H“QÇŸsÞw¯¯ÛÔ}¥ÛløhxÑUta”IWEÞd"hi–X¨i•¥}ˆ”èôJ$º µ0m36òcï6u›îu_ïvÎÛMÎaZçîüÿ?þÏóœƒ å<ë}rÞó<ïmºy»t×ϲì¥;Í­ºT§^†»ÕجF£Ë}ý¯;S=«¸pæt¹æÅ«žO!üO‡×ÕÖWBŽíèO{—™sͦíˆ(¥'`ŒCKK¿€OKC±X¬t'˲S………àq{(¥Ôñ¯6› V]+¨®¶¾8‘HœêyÞ=PRR¢@€ÁátXÜm½÷c¼¼¸h>G’$×ëô×d °¾±F`¢­¥ãáJiåÂymÍ7šTñD‰bæææ$èÚ[ÿ ­¥cc„€´I_¥6­ôAK‹…@’´!¤!!?‚±†’S‰iе5%&i¤cÕm4«î÷Ý{gîô!+Ȳ®¸ ÜsøÍ9ÿ9‡ I_Ÿ³,«Ü4ͪ¶–ö;Ø@§ÏžjЩiŽùæ?õ$Çir2¥´ìÀ2äæä#4Mûêí·Þ¥Ô}úì©kiÁN§óÃ7^“x ŸƒÚ´o/žïHý¦»«Ç½ËͲ¶gãPÕaìÌÛ¹/-˜sîÎÍqª€öÅãñwËË* „€¦iˆD#iÁñx|jèú5Ën·Ca òòòmW¾»<²>'33sð`y8 ”âÖèÏ…B­iÁŽ-=]"ºƒ”%ûö#YWm¥¢Ôã.„”OŸ 7VÛZÚ»Ò‚ÛZÚ¸484 N'¤”xyÿ«èëïy?=RÎ9c½=‚X,Zšê’+F[K{½®ë‡Ý—„äæº w_¼t¡kû¶¬­šê€”wÿ€ªª½‰b6'ÔøÛøÙ²åä`y%233?)(,‚””ÌÍÏ'›šßÛhS‚ÛZÚ{-ËýåÎmËf³AQ¨ªÁ9!øiøG„B¡êtsNÓÄ>øgúo "!¥Dñ1=3 f³=H·•`Û(psx$P]sÔñßÔTeqI)LÓ„að?|€M;°‰ÒUŒâÏ:ŒøÌ &ÿœ@qq1‰…BXšz„A»½c30IþqðnÓ´JHmœsmïÞ—ˆßáÀ¿ã¿£ ì5äÄb˜œ¼/UÆtKÊþ€®Q̤ÚíŠÍöyQVV¾¦(P賆Ægge"W–0- ºiâñÊŠÏâËc†q>¥w²uË•¿‹ù'}¾4ŠÅp†gXíñ †gÃaø£QLú|+«±˜Ë•/¤lð¸kR{ÖWx½^$‚Åp¸Ï¢Û¡(Xaw÷ô7˜XáPBt/†Ã}þH^¯Ñh}j°i>¯1†ˆað%!†TÆœv;(!ó'€ë´:à{JȼÓn‡ÊXÃ’CÃàc†ñÂzkÙÚÄäž ®c«¦¡„±žìlL,,,ÍrÞÀ @À,ç½ðùê^ñxvÌ-/ßPãA]å @`4q µ3vy.@†¢0‡ªâžÏ‡e)ýˆó~Ù‰ÏÕÄùÕ§RŽÝóùàPUd( › `1Ö@Mì!ë…]Õ´*eµ%%ñIyó¤i$bVR‡¼“±Ú]”V3BDœ[ïëú9|­b’4z$á;M@”¤‘\ëÐJ@ĺ »,ø§ëÕŸ„î´¼IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-cut_48px.png000066400000000000000000000152011321676412500223410ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒW"IDATxÚí;ypUÕÝ¿sï}÷íkò¶²/,!@ Y²°ˆ‚¥jݪuZÛºT;ÎØªZ§GëXeÔv‘U‘EÅR @€–„$$„,/¼}¿ïÝ{¾?NÏ—ÌÖDœÎ÷ûçÌ[î9¿};¿ ðÿp]«•J¥R©4Ÿ}ö·¿}æ™óç0Ƹ«««ëâÅ#G®7áá `„üü›o~üñ_übÕªºº¦¦ÆÆ¦¦mÛÂáp8v¹Æê\f¬6.++/Ÿ=ûñÇ­V«Õl¶Z-Z¼xáÂW^Ñéôznܸ±:÷Û‚L&“Éd*Õ|ç+V¼÷žÙl6›Íz=Á÷ÅÇúüQ·½^¯×ëSSò“{î¹ë®>¸ãŽåËW¬P(0ÆX’$ cIÊÌà~úÓûïÿè£ÊÊÊʪªÌL«ÕjµÙ&Fc1“Éd2™¼^¯×ã‘É‚ÁP(ä¸ööööóç¿új´ð5 ¨ªZ° ²òÙgËÊJKËÊ´ZA„D‚^Œâñx<‘ÈÊÊÌÌÎFÈáp8ŽÔÔ3fÎ,.~ðÁï‹ñTQ²²²²23§O/,œ<¹°e)ã)D"‘H,0{viiY™JEbÚOŒ6>£&âû£Ñh4$I’DñÊÿÅb±X,°`AUÕ‚Í-·,]ºdÉ«¯*•J¥Ba0ŒÓ¨ ¹ýö+–/ûíêꪪ… 5šX,‹Ç‡…®¢(Š¢ ÕjµZ-˲,˪T£íŠFM—/_ºtéRkë¹smmmm‰Ïó<Ï_IX"‘Hˆ"@NNvvNŽ\~ÓMK–,^¼zõX  ªªºº¢âùç32ÒÓ324‹Åb±XˆeÆãWþ_&“É8 »»§§»@b1Aðû‰D"‘ˆFpظqÆ͛|°¡áäÉ'ºÑ(Õœ+ÿOM¼¼¼¬ìÆŠââ3¦O¿ï>³Ùb1›óóG /“Éd232n¼qΜòò_ýª²²¢¢²R¥ŠD"‘HäJ¡ÀóGÂ1€Z­V+•,Ëq‡ÐôéuuGŽ;öÞ{߯ûî#YLeeEEUUV–ÕjµÚí #‚ðMš¯R©TJ%ÀéÓgΜ:•H ºóæMŸ>mZq±LFŸÎxšß#„Ƈ9rè lذaÃæÍ=ô}ñƒÂ˜[bÒá0 Ò‰„Z­V«T¥¥EEEES§òyüñëE?…ï-›6mܸyó£ÖÕ=zäq“Êù›šy>ŸÏç÷”–Κ5{6@ggW×… ~ à÷íK®iaF]N,¶aÃúõ7>ø M“¯7ý×Í(„Ãáp$âvœ¬Vk4juQÑäÉ“&Mž<”ÍP l£®…äÿMM§O8©©iif³Ùœœ ðÕWûöíÝÖÔÔÔ|ùå9røp]ÝÚµ×›n ×Ý(|þùgŸÕÔ¼ðB{{[[[[,æñx< žjõãC¡pØïˆD¢Ñp 77''7w¨ïr¹ÝƒƒCÁ¶¹¹¥¥©Ivìøä“;ž~úzÓ9®»P YÉb.]R«µZ•ªªª´tÖ¬ÒRž§­Ï ú|Dz4Ý”$Òz8x°¶vÿ~êóƒAÒ&òÉ®®Î΋ºÞt‡ŒPhh¨¯?qbݺx¼§çâE•ªµµµµ¥…äï@R’Á`6ðüPÚj0èõ&€ÍfµÚí.—Ë58;vôèñãï¾{½é ~0@áŽ;,ƒáµ×&Ov:{{KJÚÚt:½`ÆŒ’’Y³H¡¡ +Š—.9ýý»wïÚ‹mݺq#ÆëÖ½÷žJ+•*U4ÚÞ‹Åã^oú†ºÞP0HM]½Z«eÙöö¹s޼<¹üÌ™êêŠ §süø´4€qã‰xÀåúÝï~û[žW*U*£Q¡P©,–U*8ŽécÇ\®ÞÞpøé§QLK …0»I·o ? X¹R¥b˜M›ŠŠt:“)335U¯7™XÖnïîîí0™œÎK—$©»»»Àçëìlk()1›ÓÒˆårµZ.W*t:…B©ˆDâqAEŽK$b1»½¡!‘øä“ëM/n¬6&·_rùäÉ Ìœ‰B·Þ:nBåç³,BqéÑ ‚Àдiyy&“Í&“‰")¼H àp¸\n7@cc{ûéÓ¡Pmm<°q£\îrõõÝqGq±Ñ˜’B¦þ}¼dÒ$“ÉfS(úûC!ŸoÅŠ®.AÀ¸¾¾¨!–;×ba†IO'—4¢ØÓ#I’ÔÚZW'Š¢øñÇgÎìÞM*”ÑoOš "Mc†©ªX¹òöÛBèÅ•Jžçy–MK3 ­V£Q( ô¿ç†Ã„a^¯×K‚+Ëä奥¥¥Ù:€'º»£ÑC‡<çÈ‘W_ …D±²òÐh¦¹yÞ<³yܸìl¹<‘@ˆaH&—“‚np0 zzÜn·;+*JMÍÈËU*Zð|‚AR77;N§ßïó…B¡$mÚ$I’ô 55cüæ›D9¾éní{™ä±ÛŸ|!„>þ83S&“É&MÊ˳Z­Vµš2€N”P*ú™aÈï}}.—ËH¼^’´ZžFõzÝî³g׬ …DñÆc1Rde±,@ié3ϨT ³woEŸq99r¹ÛMšr_(´s'!täiêóçEàÐ!¢ÍJ¥\{<¥¥……v»ÃÁ0¢H.ãyžTÖûö>}ú´ß¿n] üùÏ;w†ÃáðÚµnw H’ \¾|ùrV–Z­T*•§Ñ¢ c4’æIn®×ëõÞyçþýcüøCÄ1&øÍoBèÓO'NÔétº¼<›M¯×ëe2êb::"‘ÖVÇãéë[³cŒ-Ú½cŒßx£¯€4˜9!€Ûns8ÔjÆfcþUR ôûý~QܳcŒßyçjøµ´ˆ"ÀW_UT0 Àc™LJ¥J¥Õ $]õxB¡P ®Îår¹Þ|S’$éž{(^GbŒñG81Æ»vçóù|ÕÕ‰D<+•‹N§ÓÉdƒF£Ñë!™,%% …æÌÙ·cŒßÿZùyÍ•pI Àí·çærÇ͘‘šj4õÆO˜ÐÑpüøHûvua pê” yjG.Í9@.ÿ¶Š B}}Z-Ï“IN²_$B‚þà Æ_¼8Òóä—S§žyF’$©°°¾ÞãñxΜiiéëëë‹Å$‰à;iRzzzº\ž—§P(……³gÜ}÷¨ €f7÷݇B¯¿N‚«FC]M$BZ==>ŸÏ ­Y#I’´hIÛ®nŠf3B¥§Ëå$8"D“ØA‚ÑÏoÄ;’$Š$c!‚•ɈkKNF¡´´«íCé t-^ÜÞ>000øýD‚@† fÏž0aÂæÞ{Y–eÿòbìU=ÌU0i@e¥FC^å¡°,aT[ÛåË—/ï¿1Æ«V‘žüåËWÛ—ç”ÊôtI’¤âb*ºº\¡P($’$Iß~ÿÔ©D"‘س§·×ëõz£Qšmét$Œ'I’4e ±æjûƒ.×;ïH’$=üðñã.\¸ "D«Ó‘àNbÏ,\øPV†BwßMîmµZªI‚@îjD"‘‡¸r\d$¨¨@¡G!¾”t< —“¼¿¿ßãñxâñúzŒ1Þ¾§cŒ;:|¾H$!Øc @@©”$I"êö0T¯jµa›ÌÕR‹eu:„²ÙÈÿè›#tU*SS¦M[½šafß¾¢¢¤¤¤¤ŒŒœ›Ífã¸!ÆwuuuÅb§O‹¢(9rö,éÄhµ__¯ÝZ[ZZŽEQüç?Ïœ¹xñâÅh”VÞÙÙv»Ýβ“'''''ÿÊ+Ož‹‹¿®XtU(Ôj„2›‰ÉdtÔ‘z†Ác„GÆ#4ã(ãYÖãA¡žâròò ¥R©°Ù ƒe+*Ün·ûþûÏœÁãÚZRˆÄbåå!´|ùüù!t×]……$]KKKJJJb˜D‚0¾³s```@ÛÛ=Çåzã I’¤çŸÿº%QW6|îû©ƒ +u‰’ôÖ[’$I/¿œ‘áñx<“'›LFc·§§“pÊ2•m6kµZ­Ãa0ttttlßNòú Àã-[ˆ3â¸Å‹Y–e~855)))‰eÉ› ~0 x½Çq==d$mÈ…‘•ö0A2C„]ÖérsJK­V½^¯ç8­–˜šZÍó<¯TÄb±Ø‚óæñ<Ïßv[U•Åb±””geeeÉåIIjµZ})¢½Ýét:‰“'ûúúú\®^$Izà2Tåó}]sèJ éópÁ )!9‘ uMM~~ TWKV(’’t:Žaôzë²²RRRR8.;›ã8nâÄiÓ$I’–,©¬T*•ÊeËæÌÉËËË3™ rE¤R‘Á²ÆÆÎÎÎÎXlýzÇãyûíæfŒ1Þ¿ÿ›äªÍ8†!Fg4¾öÃ0LssIIFFF†Ùl·“w¼hV1Ôd#&H›Zt<0$YÂÉ“áp[[$‰tu­^-Š¢øÐC„ån÷·Óx4þ#YÂÐg⤌ÆgŸeY–ýÛß Ôjµ:+kÖ¬üüü|¥R.'tIÒ×G‡N¦ÓÕ¤wåõ’¤dÇŽ£Gu»ùËD"‘˜4‰¤¯ƒƒ_×|ŠÏU[“Ã#‘–âb²³}>ŸïöÛ£Ñx<gbz¤2`Y€H„ L²€³gûúúú"‘ææîîîîx|ófA„×_'.á‰'H‡6±(©ÔNèJG‡¯´ó?Ò:òsä>ßW_aŒñúõ¡ B,&“õ÷÷÷OŸî÷ ‚ ˆ"™”ÉèÛ’ ™ªE¢hMM]]]]ñø¡CMMMMáðÿ(Š¢¸t©Ó ÐÜüuÆ_9‡ô­ÛÑF#@JÊM7!„ÐSO•”0 ÃÜz+É–’’!„"’ž?ð (ŠâæÍµµ7’>&¡®Ù#iúpýéóâ|ó端$êhµ¥¥Ë—Ï+“Éd+VX­cœ™Éqc¬R…à Ã0n7 î;vlß.I’ô§?‘ËÎîîkåçu¾‰¡ÃW†¹¶ç‡3|8 wEWúäÿûùчÿàh%¼ó%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:47-07:006ã²2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖqtEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/edit-cut-2.svg|ò,IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-delete_16px.png000066400000000000000000000012501321676412500230020ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDŽ‹!ô£~ pHYs  šœtIMEÖ H³ËÆtEXtCommentid logo†Æw¹IDAT8Ë¥¿OqÆŸû¥w-´¥×ÖZ*¢ ´nnP(ƒìš8ij€MMÜé`R“BÔ4ÅF7'u11¶ùd0ºµ‹©8®rWîzwrC‰Q|§÷ûæy>ïû| ìÕâýÂ;Y–ÆñÅq¶Ú¹Lhs(ËÒølúE±„†at™ ÃÀ“å²µˆMççä’$A„.£ùf$IBÓy@ŽËf. ¾ºQÑl64EQ ¢("›IáNáyΊð±Ñ‚ h4Œ`j‡Çö"˜ÃºDün¥KL!‚Vg"gc8LY€ØþÿŸ¾ˆÿd :~E Ë×@`ìPë ¬Z_4wýªqùR\}T.)““SÌÚÚ{&ÐªÕ ‹MiµZ•šˆÆô·•7äâª+˲ªÚQ·y¯Gkµ~C¡á^]7äÁÁ!ZÓtÉápøi†Ùä8›í÷#H³áy~‡$É×6› #§F íî('t—Ë)»ûÜmˆ„ÃG½^¯Ú(,Ü+Ð"áÓ}ß±o_}dž÷$IÔ{=þþ X–Óív»T,>Lï¿ q3s‹_^y¬ø¼µµ)ðnÞïr:é]¥Í¬¯8 +Ïž:Ó©Ù¶ÚQÎï”KKEøýÇ$éÑd"ݧ( ^¾zÑCQtàJ°[ÁŠüh…à‰œq³DÔ{{/€ ëfB9¸À‰ŽóÇŽ>qm9±ŸùôtzÿþƒÒØØ¯hoßK½^oª««Ë4~é÷ÌîÖ=&ßE_ªíÎ6i||<ÝÚÚj ‡—Øå?.eŸzòi‹,ËÑóýÎ7^{‹ÐÍñ!ÙL6³¢T:WãñÕXMµË`Œkn÷6Ã0X¤¢B6DIйªÝ+zBɲ #Ë–\.·Ù¬›Ã¾b6—¢©ÉýyäGEV556avΟ®­½…E£Ëº\!'ãqÍRSSÍÖÖÖXMM5!D­W…ªª*:˜e²,3‹Ù"å ÍÍ€¡­ãžÎˆ³Ò™QëêuEqRJÉŒÕVž•+dÝfµn·kYQœ„qÆì6»QVVÆʼnÉÉ 4[& AÐÔܬ^º2©Ö©‡Ý.†#¡qEq–ªªºj³Y¿掱±_¶™L¬Örcêê”åÈCÔ‚¡ÐbªœÐaI”x_ÿÙh:›šÑ´X´à+­¼´¼m9²4KI|÷÷ôö-عk’ÉT*¼Îú§1:êÃY‰ÅbîâµÉ‘njiº˜ÔõÀôÔÌýþ¿Qç©ý\E><2|çœÝÖÒ|Šsþ.!eÖÒó^ßðò›©Ä”ýú›swwvvè(3fdXŠY8ç´¡Ñ3¸u.omlÃ0„¿‚ã`6›PïQ)¥ÜjuT676—¦’©ÔÖŠEðú¼¥MbÊŒd*¹¾<Ö—9¡”€€s`=&àœƒR AQf.…¾¦Ó¡ CÉ×,( ßðNû]íB`‰ÇãÈd2àœCn3Ö…PÂ&XE˜L%棋¡…¶h4z€‹°p?×ý챆Ï ×[ðÿü®U’?áðÒ`ßÙþÞùùÀ€0PØs1ÍùC¾1 ¹˜0r¹‹ I×èŠËÊì-­bKIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-delete_48px.png000066400000000000000000000125471321676412500230220ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWIDATxÚí[il\Õ¾oŸy3o6o3c'c{'iX JMU%vZJ+E­ŠZU¢E¤H´Šº¨D«¦í¤–R •6âO£JD”%qÀ! @RT¨ìŃãeìñloæíkœžíÄØ!´Àù‘—;ïÞûî=ßÙï5!ŸÐ‡JÔjMôÓŸþüç?þñÛo'‰D"Ñ×÷aolµIQšME9þW¿úå/÷ìÉåVk^vµ&BÆïÞýýïÿð‡Ë÷÷}ß÷ý«Ã¬«ñßÿþ‘G~xíÚÕ^ߪ°xÃF£Ñh¬>ƒ>èþ X«Í¥€®žçyžGÈÔÔÔÔÔ!¶mÛ¶}å ºÒu-Ë–eY–l6›Íf¯þºV$ “Éd2™ÕcÐûw¹óãú¯¶€, ˆÉD.×Ñqà wÜñ׿rœ$ut\s !4Í0‘!„Pó\9.Ÿ““““““„8Žã8Îê1h©þÇq·´_éwº»¿ð…={æÿâû¾ïº¾oYF¡P*8ñÔS»wëz©têÔ3Ï\1éôM7}ë[ûöuwoÞÜßãmmÙlg'àª"Ù¶mïìܺµ³3N¥›™QB ö?" 'ŸÜºõž{9ztxøé§ I$fg_xf3•Êf )¶l¹óNB4 €°mUÕ4BÚÛÛÚZZh:nkëëÛ±ç›ç„)Šae}ß¶ QUEi4ÑOHÓ(Šç ©TnºiçÎ÷ê ücY†¡iB$)‘…ËAÜô.®k²<>^­Öëõzo¯$ ‚ëR­Öj+)+B—¦pXX–Ç`Æ÷=ÏqLß¿ @½~úôÐÐC½òÊk¯µ·?úè-·Ü|ó5׈b__6ÛÙyõïæÿ´1­º¸¾÷¼…¥±KÏ$hóÿ]X<Äßöò¼… ÞRýÿ®ª†aÛ„T*•JµêyšV*½ývP¤»(ÆO&7l¸õÖ_ÿ:ëîîïÿÞ÷@e¢QŠZ¸¤ùÿ§Ví`óÿ‡h2$†³˜Çu]7ĶevvddfæØ±ÇÀ"Ý’¬ƒ¼­mãÆM›6løÁ~ñ‹ûî»ï¾o|ãÀƒŸ{îìYË2MËÂz£sæë_ÿÚ×î¸ãæ›Qr¹\.—K&GGGGGGK¥ë¯¿îºë¯Ïd~é¥áá±±mÛ>ûÙmÛº»=dì҇_xal ª¨áð† }}6´¶=úê«Gž??888¸cǺuCCCCCCccƒƒƒƒ½½CC‡ôÐ  ‚ ð¼a´´´´´¶Šb_ßúõëÖ¥RP§éOzëÖþþlöî»wíúîw÷î=yòĉ'öìZR¥rKຮ뺺ODZ,Ë2MÛ†¡Úb}Ó¶!ܲ¬Z­^¯ÕT(Ëõº,ë:Çq˲⺞çy®Ë0 ò4=777W*)JWWggW—$áw)Š¢(Ê÷e¹Ñh4…ãX–ãhÚ¶mÛ² 7nÛŽcÛš´]×q‚¶ã,l[ÖÂñ¦iÛ–ešÁ{Ëšÿ^’$)eXe Ïó<„'å8ÈEà—iº®ëzÞÒ™Ô2ØH×µ,˲mÇž` Ea|„Œ²m¨Ã›¦(†Ã¢Èqº®ëšfY°ÀÀXI j"º®ëºnY’‹Åb‚À@<íû¾oº®iPÝò}Ï â3ðó=É{·á·àˆÖÌa?ÁüÑh4R”³- 4Áó(Ц)Êu9ŽçyÞ÷Alò×E>^6Àx\ ëž–Åóh@>áÃŽ ¥(\E£.|˜¦(† Ú†aš†aÛpÂq`Š`¶ #çñÅÊÛ‹Ç¿÷|°~ÇAM‡sσ¶ãÇñ¼ï—0Ê1Màc h+`!À~ÓÔu< €EáQrG’¢QIâ8PaÓŒÅâñxœçÁä8Žg–eßǶë:Žë£=Ïó$I’$‰çEUE×qìÏópôˆmެ´½xür󩪦iú<ÛfY09( Ð†ƒ]·,˜åOV€ç™¦®›¦a,å9ÐïuvvvvvF£õz½^«5›Ùlg'Út4ExÔGQh1á'OšÖÚÚÒÒÒ«ªª*ЦÁá~4Šý‰D"™äyl·´´´´´„BpòfY©T*•J ¾O&“Éd2h/ŸJ¥R--‚&äâñš¦ªª*˸_–eYŽC.!¥iš¦ë†áyÀ·+œˆaX–a†i‚ BgºØôx^6 ‡ScÏ …B¡Pˆ¦MÄYaáP½.Ëõz³ÙÛ›Ïçó--ÅâÌL±X­¶¶¶¶¶µ…ÃúÊd2™l6m4 YVlƒÓo6»»s¹îîD¢Tš›+•j5pæ±X¹\©”˲¼Ôx”žžžžÞÞd²\.—Ëåz½½½­­½]kµZ­Vk6) Lî‚ ôi®Ëq`raµ¦ ½|sE¸®®kš®ëºapÏÎ5£ BÚÛÛÛÛÛE1ŸïíÍç“ɉ‰Éɉ‰R)™‰C†g³ %:•J&S)A8yòäÉ' QEQdŒF°¿,˲,ã+•J¥\®×{{á{³³³³33Õ*OQ.ãkµz½^o4°]­ÖjµZ£ÑÛ ”J¥R©T«±,DZ¬ïƒõ‡ #0µ¶Í² ïj€ªjšªê:äšvŃýº h€ïÏ×€XL’b1áQñò˯¼räÈÈH,‹Åb<ßlB8™LÃ;:ÚÛÛÛ#8£UÕóç'&ΟŸšªT*•JE–Át„ÃØ¿ÙTEÑ4l¨µµµµµU‹ÅbqzºRØ6„<ý!JÓul/4aápµZ­–˲Œ’ŸÉ¤Ó™Œ$A4æy@(ˆžÇq,˲`‚TÕ0 z¯{+À¶-˶UU×UUÓÐ0 "ÑRoooïºué4^ã¨×ëõz]QŽ?~üر‘¸Æ‚‰¿ëŠ¢(†Ã,ÛÙ ¦â…^|ñСÿüú)ÊÈÈèè[o½óN_ßúõ}}íí,˲…S”ça …ð¶ÃÔÔÔÔôt©¦FUÁÔÄbK‡xÃK8¬WUM+‹Åb±\†ùEN$`}Õ 4.ñ†eÙ¶m/N¸lÛ¶‘и®$IR<žÉìÚu÷Ý»v}îs°AB†‡_zixxd6¦ª˜Ð`B™dà4_zéȑÇß|úiÚ믿þú¿þuêT.—Ëuw·¶"ëxžç9¿ïû‰D<uF éébqjªTªTªÕJ¥Ñçãºp>ÁÔ7œÐéŸ={îÜ™3ããøûöí·Ü²}ûu×á*.€e9ŽadY– UEËqÅ@øhF³Ùlª*€ vÝf³Ù”åZ nAØ6ÞŸ™œœœœ˜¨T0ASHÐx^ãjµZ­Z5Œ“'ßzëäÉb| JŒëNMMOOMŸ;76vî\±ˆ‡CržSbYѨ$I’(V«Õj¥¢ià3¥P( …©)<†PT4F"hŠ, ,Q„ïc ÇqÀ×ÌÍ—Ë 0±¬/FÓ³ÐÑ48uEAß¹ 8Žëjš¢(J³©ë<Ïq<îeJ–{ìÏ~ì±C‡ðö¨v¨5›Íf£aYÑ(Ü+ …Z U.cÉûƒ&˜æþýû÷?õÔ«¯BfÌqét:N·µAiÂ4†¦†ãfgK¥R©Ñ€‹Rž711111Q,€¥R³Ùl* 0\’"(Ë ‡ÃaQDM ª£`j,ë/Ù»÷ñLJ†}ôOzä‘ü#‰D¢ÑKÜïa9ŽeQ4m¹ øÝqËóÃ(ˆe¡Ü9yòìÙxðÁûïòI§§A5=ïðáLJ‡Oœß ëÏ?àÀsÏ?nÛ¶í8˜¦‹ïÎ9söì™3gÏîßÿôÓû÷=‰ˆb$?ÿüÏ>{ì8}ŽCÍ iš¦((8ަýö·¿ûÝž=O<aêš5k×®]›Ëut€IÓD£EÕj(¥R©4;[(@TeÛ V­­àþPpW ]Fy¨8f´<mB`šaæ¹sÀ˜@¢ggK¥ÙÙS§ž}ö¹çžyæìYÈij*K',ð^×9räðááa0)4 ’J_ Ã@ ÆDo>cXÖ²àû££ÓÓÅâôô™38ßãUJØ/Ë¢S†÷` £± ˆëñ}UUUMC¶´<Ïu dŠ`¸mó<Ëò<–°xµtÍ%jñ†VJÀ¬1]îè‹çy¿ïAÿ úaY;¡hiš¾¿j>Àó œ ÎË´ŽÃq¡PPúøË.¼ìgYÛÊЖ˜îåæ[a&làž(ʺ@P¼š¯ì‰tØU[ðm¬~.¬&¿Ç|Ëu˜_N…sÓ´,Û†sAÀeÁó£8 Ǽc3Ž ÊæP=^é|+ü¥P‚3†r+$D|»4?ƒ|i‰"B¨Bè "ÈL3™®®®®®®È€ÛÚ€éˆôû·ñÿ?äû„@‘^ÓfgáÒòýÜôA›O,6%Še$ ‰^}J:2ÃçÇB[¾Ø¶cŠÑÏâg@—©êÈXtº‹%ž½jyÿ¿I‹M ¶€åóÿò“U9‰·¦%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:48-07:00À«Â–2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖttEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/edit-delete-2.svg<×oIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-find-replace_16px.png000066400000000000000000000014101321676412500240670ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖõvh‚•IDAT8Ë­“Ml aÇ3³³µH·Ì,ÁVЉࠉƒ ¸4q RI‰¯cKŠZA¤D‚Š"q­DÄ6уK}´DH‰¥Eb[•Ônwg?º]»;¯;i/NþÉ“<ï›üyž7ÿWbœöhÔ4M‹ÏÑhT¿Úz-Ê?$ÿ¡kK½e]KVÔˆS%UŒ‰¾—¤„_w©¥õÑ?û÷jºî‹,¬ªa íaåâY˜áéd+ԉ˥ (²cRU5ào:¼À ë¾Hùâ•|±J¨[]Î$·‚ªÈt‡3–l`ø}'ÇŽ6;€óÏÖ{—s;ÙǼé¥lA6W ›³ñ•–ðuh °¬8^o%oŽsy«,€Î\j!Áàp‚p$Cmç9X¦•Mïª(ŸOøÕ=*|%ô„~’Í2üº]ÓM:æ'7y×eÄìP€*éÌ™Sbî¼r|ºNÐ ’J§œgY¶tÕkªikÐØy©›pO;o?E‰™€ª¦[v¯ pÌ›üXVÜÙøcnyJÿÃ6>~O3üZTÏ‘“×{Inn>!Í ùÂ/»h2 Ã0¨¬¬ä›¼‚àóçôYÄ‚w©;ýÛ3ÛÉ à?xHÂa „àÆÏ?¢Ü ˆ|è`U}“´är¹b„<.•v>ŸŸhºe³~ægj6ïfyÃcÄä9$“Ir¹<€21H€ªºñzÝ “ÉH$Èf³(Š‚ªªË`O(ŠrûB˹íBˆ SK’œ‡ÇãirüýyÍ ν­YIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-find-replace_22px.png000066400000000000000000000021001321676412500240610ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDùC» pHYs × ×B(›xtIMEÖ7弸ÈÍIDAT8˽”ML\UÇ÷¾7o`FJhÒj„"òÚD¥F7THjÚ…ÝILŠvI¨kLLˆÂÂ’ FctSCÓ ¡ ¦Al¢6ÜØÆ *±P•a:0Ì×½.æÍ8èNoòrïyïž_Î;ø–H>üèƒ_66•±XLÇãI™}Éá0”eYz7!ÄȹŽWOlÿ`¦ëë¡Ê§›ÅðȰ8üø1"ÂEBI,åÖWdsS#>Ò°Jç§w‹8ŽÅbzxdXT5c&”OCU N‡‰w~•ºã|52ŒÛíæÀþç={ ô.YЙ_V YQÿ$·CNN>QNíý{)+uq¨ì^†›}‡Ž3py ã­õÎÌxZ¤ö´H•1€Î/¡lo[Ñ*!ùÃÀHDø}S`>Ÿ­555µ; ­½cÜÀC¯Î;Q­ÙJh¤ÜÄ(,pSiåqóöÕÕÕh­s"ö´Hýü{?°ðýE&|ËIÀÈx3ÀbØMd}—ZAžC±LPœ—Gðù¦MmmÆ×Œ t&ÀªwÐèèW"ÞÜØàÖOßòÀ‘“¬FL ó, ‡I0&ß-YâhãQjjªB µ¦÷9“ÖÞ1æ®õqsòOÂ3_Òѯ€h±mº¾þ0dþÆçTíw1ë¿ËøÜJi–LJ(**B ÆB_{i úMãÓË9PÑÝÝ¥ËÊPZR”wŠðF8§0UUÑÜÔŒÖ`š&Ÿ´Óêcî»>¼w‚,O ä@sº" =ýÂi¼^_:ë¤j¤ñù¦q¹\\?„Vϳ£Ÿ15»J`òòhì÷/á÷/ñÒÙB¡5ª««2Àô.¥ÁÅ3û8Õ3ʯW/àûmÀä ‘‡» ¿sGOËÎÎ׏—_IWRJ»Bdk…#=™«˜œ ˜äì¥Ä?Š™=IJ)»GÿŽVRšYãçÑQ悬z‡8õ¾¥J)Hî t2™Ì !‰Çã|Üv“Kå¬]ú” 9Á³oû…B†A<(Öm¸Þ1Ò)p*z‡ÃDI8æÍ/4gšæ8Ñþ5‡ƒ••,ËBJI4(¢@d;X¤FÚ‰ÓéÌ˲X\\dkk )%RJLÓÄ0 ÃÀ²,l`"[éÒ`mÆ•w{Þzf»r¥uAi…ÒZ ‘*«½ÑõFw°ijÁb—bºû¹Ç¶¥] m"@ÐÎë†m«§ßönfÙÒvLÃÛ`šÿcý\È’VtDÔIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-find-replace_48px.png000066400000000000000000000115051321676412500241020ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDùC» pHYsIÒIÒ¨EŠø vpAg00ÎîŒWKIDAThÞÕ™YŒÇyÇU}L÷ܳ¹œ=h.—¢,S"%9:,ò!Ùˆ$[R|E‰lÉ1#@^qž yH<ä)@ìÈ–mI¦ƒÄˆ#ÈÎC$Ù²i[£ƒ¢xìE-¹$÷˜cçèžé£*={‘\ú€‘ 4z¦ª»úÿÿ®úê+øÞÄvO~÷[!0 !z˨fsÇvc[úµFkMÇ(¥z_ìîzè‘ß-o|ëëX¡Š úë2—ß®Ôq)9¥•öµV ¥U+í¤# `š<ü©‡w¾ùíÇ„m™¿çºîŸ¥Ó™¤”öº\õ%°„¸dÖ=‰o~Rk´R*ŒÂf§Ûïv»/ÆQôc!Äq­µoHÉÿÑ£¿=þO¥b±ô{&ÿ°<\6„kÖ! @iM†A@F$Â4±mÓ2bƒob>Ý  ÝnQ­V:•Jåd«Ýú·8Šž”0k­ùÌç#æ6ýýi7}Cy¸l8®C¢(¢^«³¸¸D£Ñ$Žâ-/†$—ÏÑ?ÐG>ŸÇ0$Jk´V˜–A?CƒCN­^=8v~ßòòòMÝn÷ïÑúÈc-~ô7 ±KHi !À G ^_åÌÜ« …"#å2ÅB;eƒ† ¨×ë,.-qüd²iFGËdsYtÏ‘½8Æ4LúúH§3i'åÜwþüù]žïýµVê™Ç¾õõðчÿä×"`\©ó¾Ý3˜Ïå?±k¸<ˆ(£µfiq‰S'N‘²8ÀÄÄŽ›¡áG¬¬vix!B ô166Â@ÿõZ ç/bÛnÚM"šÖxžG… E2™´ÐZïò;þ;¢0¼ÌÞûÑ{âüûÓ¿¥zާшžý.-.qê䣣£ìÛ7IËøÉ«oñÊt•…ªO'P)SPîOsho‡&wðΛoæôÔs³gÐZS*•RÐh6p—|®À®rY€>pnáÜ—ÛmO¡õ|íŸÿ1úüç¾ð[kà“»v•…T«UN8ÍÈÈû÷ïgv¡Ê÷žŸáÙc+t´d°?Ç®¡<ƒ¥ –ms¾ÖåèT…sK vRLî%Ž33³˜–a˜(¥‚¥5ý}ý†Ä²L„Cžç_†áZÍÝóûÑO?ýÌo¦Ý hȹÙ3d³9öí›dæÜ O<;ËR3æ–#ì-)emÛÄ¥4µv—7ÏTyéľóì4½_3¹w/õz•• ùBÓ41 #!¡4i'C7è288D«Î=÷Wžç-ÇT»õñ‰µ0˜4!(ƒCH! ù3³(•„b˶H§Ó ›íVû¾åÊÊ‘Lcõ°¶¬{ã|þaiÑé¼D&ž¹² õ"~4V› ãw^™®’N§ÈgÌžô,Э@+P ¢Þ»‘Ò¸¶dr¤ÀñÙe^Ÿ­rÓä ¥R‰™ÙiZÍB¢(" ÃäŠBT¬p]—¡¡!†vîèo×kµÓî.·¿ÿ3Áää§TÂ^XøSS£4›_Þֺ݀(ŠÈf2TW=.Ô: •òØ–I%QGö.Ð(­A)´†X'¤JY‡YVV©·:¤]À²,ì”MHÃ@J‰‚@4MÂ0¢¯¿¡ômo\»ÿ¦B¤rýC;ØQ,¡ûûÓf¥ò!³Ùü×m$€¢0D)…”’f+ ƤlV!­¶¢1°d -QJ&郆X%ZM:eà1íN@!e ”Âó<b¥0¤Äp]\×@)E³ÙdfzÃͤv}ìTee™©ÙYâfƒþN‡‚)Sg[@ƒIE!Z'¶m›ŽmaàuBr®…mˆžßIÄ*ù/„D°‘I)q—L&Y…H¾%„À4M”ÖTëuê««ºáFö_³ŸÙ¹Y^Z\dzq‰ÂÌ4rueVYñìöaTk ÓD£ét»¤SYR¦¤íuQ±M¬4ÍVˆ)b é„(%ˆ”&RàuíŽ-ɸZuÐ$ù”ïû›ü¤”XRК?†?õ*Cé,ççŽÑj5X^ªÐly(£ªçç´®|½>OoëÄZkR)CJVWŒïîg¸äp±`&)K`›‰ xÝCÚ˜† ˆõ4:Ö¯Qkv)÷9³.K‹u,Ë$ŸÏcYæ¦Ä\ ´BMý˜ÜÑ'¸}´Üp?g–NóËãT‚¦i§Ì·.9_j/þËȉ‘î¶©„ÖË´( ,..²wï^Nôñ½ŸÎsa¥Éè ‹PbPQÏ“X¦…aX($a¬ñØés«´Û®?8‚ëXÔj5lÛ"ŒBâ(ZÃŽŽ#ôìÏpŽ=ÅΑ"…‘"ºu–1í±heYó £ù@ò·§'ÞvøíÓÇý??9{µ•Xƒ€ááÌÌÌR©T¸aï ¯ÎT95¿J_Þe°Â’` ˆ †8Šˆ” ˆ4Ë.Çg«ìÎppržç³ººÊèx™\Ïþµ¥ˆ¦žG½þ$ƒ£E c;P­ót-¢8ˆØ?)ñ7fä?.•òÊ?_€<ÈíM(!R,Ù±s'OIÜwÛ8ý“#Ç.0»P§ÙîâwB¼ÞÕöV›>3 5~qìYƒ{o§/—fffÃ4°L ß÷ð;üV‹öë?„—¿Éα>Šc;×Áª@³ÒÆ;ÿVݼ¿“q÷ñÐÌ´¿ð•¯­cÝ>EÉʪTÌ‹/¾H!_àÖ[náÓwîáé_ÌóêT•ù‚Ëð@†\ÚBkhz!çWÚÔög¸÷Öq&F˜žž¦Z­°wr‚l6“Ì®b©Ÿ Þø.ƒ#E £C[À·+mVWViå-š¹¾ÿ <¿ÝמÙõª ™0;;Ç~øŸø¾Ï‘Ÿÿ Ã0¸éÆùì‡3¼rz‘×çjÌ_X¥&ïØ¦d¸”âF9´oÅœËÌÌ Ó3ÓìØ1„”Ïï UŒžyûõ'Ù1Z¤0ºc+ø•6F÷¶Ïu‡Tg¹ñK_º ë ¬m:æææxî¹çÈr öãû?üÑ3œ;wŽwÝ~;ï98ƭו©5}Ú€ŒcQʹ¸ŽE«Ùâå—R«U™Øó6Jý}Éü:&<õñkO08RHÀ7è6Ûq"ùV­Iþ}ŠuàÄ/_D‡¯¸¿ŒÀð1 ÓÔóógyãã”úŠì»v’S'NS­Ö˜››§íuˆUÌðÎaÊå2}}}”2i‚0 ©V–Y^^¦R­ ¥ <² Çuèt:è8DMÿëµï04ZHÌf|žv¥M{µ{û#¤o¼Ÿc==ù•üøýxžÇÑ—;Ž›ÙwÍ$»wS¯¯’ËçX~½F:›å®»?È®;Y^ZæÄÉ7BbȵÌ\# ƒl6ÃØØHoSo$å­ O!zõÛ ŒôÀ·.l€¯z4« Òïz”ÌÍ"m‡¸öÖ}u÷?øQ C ÇqnŒ¢ø/&öî)ïÞ½›j¥J³ÕæÄ©)R)—Üù^†ˆã˜R_‰\>GE(•„]Ë4I¥lÛFJI»Ýî¥ 5ýöO18R¤x©ä«­JyÓC8‡îGÚîFͧ—lKàÁßO8”Ïç¾|Ý;®»k||ܨU«4š-Ž¿yŠn7äƒï¿“Ýãcô’ i`ZRH¤”F’QJ)‘B"¤H2M­ˆg~Ž~õ úF äËÄÍ‚f›®ÊãU<šµ&ö-ãº3•îUÅÖ ¸)¥0Móúl6û•ýû÷ß=>>fÖëuVWœ8yš¶×å½wÜN©˜§ÑXÅ西k— øôÚG"¥@£çŽ`½q˜ÁrÜÈ qëíZ}ý'‰ö~N ¶Va²VóÓ¿Jq9ŽóÅÉɽ3« jµ:'OOÓé¼ûöÛ)ïêe‹¦i&€å%W@2f ÑDÓ/¿þ]úË9 åtó^½ ?E°çNºí.Zw°m Û¶±Ì^PôÒûí ¤^{õXóÚ·_ûÜkÇŽ_?¼sGáââ2ž×á#wßÍøØ¦iJ9†Ä0Œ^É]®Ki#Ÿ_#c •‡ÙX!sˇș Xz‰nÛ#Òüz‡úR yèÓÈk?B$?±L“”Â2‰Z½âêZv¼{áÜ‚ Ãè™Z½‘;sæì{•Öæí·¼óm{vçrùloû—"èh­Ö·ZɆ„RÞE²Ù4…ýŸ@úKt[UâÕüz‡Úb…Êè]D…°*Izm[–m£5¸®‹4ä&ð\uˆpiqñb³ÙüF¾PüÁµo¿¦<:Zþêàà`.›Ë"e²SJÂ¥êÙ¦è ±®iÑ‹NBG˜:nf¡BÂÀ#ÊOàÏÌP¹X¡6~ÑÄ0SiLÓÀ¶,l;•˜Žm¡´"Žb„¨X¡”QmK Û#Ññ=¯î{Þ™¸§Q*•‚R©„㦈cZãû>a&Ñ¡~s¸B ¬,¾E{ö׿ã:Ä‚ÕyB¿BÛégaÇ^š¥CX”òH)§÷î†I¦R©d®X%~Ç„a(Ù8Зj ÖJÐzddÄOÙ)mY¦i¡ Ak\×Ŷí à="k„„¨8æÙçðýÇùÒçÞÏ¡ý»h…&¾.ãí¼³ÜÇp:O6›Áu]R©†i$L$ÛJC‰Í÷*„JëÍ%ü-$ÌMlÖY%K?z]²½IºÝ€ è^•€ïûø.ßùäÐÍ4‹(+GÚÎPL¥HÙvrbšgoúRÉì› e†aè+aÝ>Þä5º§Út:ã8ë¶¿f>›ï¹l–Ï>òN*…㦓õ@n>†ê9eï0PoùŽ^Û†ôiöjFB›¦yøí \ºlh,b–‰`“Ä7ûÂú]ÉdX+mÂÓkrcv½ù‹¬ç kݲ·XnÌe'¾¬uüŽÔZ‹õƒ‚MD¢')Arx„OÍÚ]ë­Î½fj¬Õ€Ö(‰ °B ´Hè ½U„ZkÑét¯¸ý½”€Œ••G)%ׄ²±C½ß!ôzì×kå8Á&B[ušt¬\z»9aÖ÷ lZ)¹²Rq ˆ¸ŠHÀY¼¸˜ º]¥âÛ´Ö™])ö¯Kw]à›Æ6é}«\ ·þê0L“XÅtƒ@/^\rð{$¶%`ž:yÚ¿éæ‹³Ó3ÓûöNLʵUñÊMl¹]IÖ~éË߸TG—üÄqÌÔÔiuñÂ…Ù©©)¿‡w‹)™W˜G:5U=úòËOi¥ä‰“'&MðÖ؆ȕdyi—Þ^ WlQEKKKS¯}å©é©™*$•Ë+ˆoËH›¦™ÝwÍäΡ¡¡AÃÖf­_Ævƒú×/Ö×Äq---/MOÍ,FQÔ$1Ÿî毈m¦°zDÌmžùßlšÄæƒÞýªØÜ$ÛTîþšâ²˜ž´ÿo5ÔÌ‚ Ö«%tEXtcreate-date2009-12-09T07:37:00-07:00­1ó%tEXtdate:create2010-02-20T23:24:42-07:00‰¼V%tEXtdate:modify2010-01-11T09:15:35-07:00ÂÐu4tEXtLicensehttp://creativecommons.org/licenses/GPL/2.0/lj¨%tEXtmodify-date2009-12-09T07:37:00-07:00ò€ ÇtEXtSoftwarewww.inkscape.org›î<tEXtSourceGNOME-Colorsª™Dâ1tEXtSource_URLhttp://code.google.com/p/gnome-colors/PµëIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-find_16px.png000066400000000000000000000011511321676412500224600ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDððï4g pHYs  šœtIMEÕ %ý­/öIDAT8Ë’MkQ…Ÿ;É$Mšf†JR µ]hEÁ…¸ Uwâ&¿Ào©ôˆ¶$ADtYwUÅM¨;Aì¢T(¤‰V«–P5ÍG'M23×EHIBRªgwï=ïá¼G¿¹ëvMÓ;òN!ÄÎ#™Lv …B]…w´f2f_̘Kдkwß¾¯’J§9zjŒmÅ‹i+¸d…Ôük&nߌĢ÷Ÿ5þ(í4]#•NsèäŸ ^ŒR>´Ñqüš>síÆ•ã]$æ ‡O³Rpsé̾ӶQ ï–%Á#ã6Ko t Kz èX¶dÛ4©Ô,ÊU‹~Ÿ›_eµ% EJ‰”vK0n· „ \µ¨Ö$›[5ܪƒýý¤-]p¶iš-Nlcƒ5£Šß£¢÷¹°-‰ßãäÓF}=–kr®Ô+êBÓt4Mç¹ó¤Þì|ù™'›+‘7*|\Y§T®[zå,‹?"Ÿš±,+Ò| Ã0p8TNœ°¼VdËT앬/¾døàæß§>xtXtkØÕë—§àd3çëõ ó;›­÷eõ+‚D,• ‘ÿ”Xç¹çœ üO‹,}Ü16?Û€¥0ưÜ'€rþø±×ž\õ†–wš)cŒQJ×¼cìLk‹ž OH³"˳kN×jµ­– ¸´œÖ¥aJžU—)Ðçóý+¨Û]¼6àtÆn·ûž,cÿñèèè]Þ~/&ý ”‚2 APYY½>ÆÅÅwÒôOúqöÜY9|uµû¡j:tH<ÁœAwwÿƉ×+š›ÞîYcÆfg£8ÿÃ÷h|ñ(º†na,‚dÊ‚¦3èJ;62;zmíïþÜtúTÙ‰7O^¹'c—ËÆ€·NŸBã /ã›)ü•°âٚ͸ßnB’Rø2º®N!ê â¥ÆW¸¶öÖK,Kü’ñøÜ]±‡$ ñ¡¯ß‹-[ò103áùš|l´ayè0˜†o©0иš›c$;ôÄ.þtÉ»¬ŽÓ%q¹ŠÐsù”>\Š^¿†Ý.'DQ@’ Me ZRG`f“£ÑH÷J`ƒ‡N§ìª@(ÂÍ‘Aì-±bhBFÏð(á1§0|÷ë¸0<ƒ/|Ë ò ͱ¹ùWŸ9tpÓ²A¦µåk]ן^Ù,@Û¶a_ýaüø[“·U¨ŒÃNUît¼×DŸÚ€¼2ˆH$LeYž‘Di/ÉÐâæT¡[l¨®©ò¸ÜE-»CÍα‹åeåæÂ¬ί:ÿ¼9~]ŠÉñæÜ vpAg00ÎîŒWIDATxÚí[ÙO”WÿÍ>#Ãð#£àÂ".àVYš6R±FEL%5¡‰š¦6imlúØ»¦^Xõ¢Zo$Ÿ¤X["hŠ  ‹(ËHXe¶Y˜í»8yzìkßÎ 3Š>srÎ{Þ3ç<¿g;Ï9/ðŽÞÑ;zGKF’@_ÈÈÈÈÈÈ(*:räÈ‘#GΟ×h4F§“J¥R©Éd2™ H$ÉK£{<Çójéõz½^/àv»Ýn·x¿@KÆ÷·=Ðÿq:N§Ójmhhhhh8qb````` ¦æµpúôéÓ§O÷ô;vìØ±c&Sddddd$_€¿D Xêþ‹íGær¹\.püøñãÇ[,—/_¾|ùrT”¿ó”û¿$FLâ##—-[¶lÙ2`xxxxxXXXXXXà# aý_}.¤@Ûý}è{þBïëõz½^O­‘‘Î#`h‚Bö·J!m÷÷¹¯u,–èÿ‚'`Ä&"V_lÿÅjD ý¥`.¤Ek@  öÅø×m‚ ˆ˜íÀA 6!_íDÏž={öìYðŒz]¿fÍš5kÖÎ)`ȶûË_@¬^½zõêÕ¡Óˆ@ûKÁþOÈÔÄPýéÓ§OŸ>}} öýµk×®]»V\ó‰Þ˜£_ öUSñ`{¨)ÐùøK¯Ýøªwttttt¾ 7eb233333ç‹¿ôÆ|€XT\ìùbÛý}î/ù2A‹¥ ð—1¾4 XÆ…Z#ˆáYYYYYY¾×³äào|¨,µä IŒÑoÜ :55555hµZ­V˳¢¾ûäÉ“'Ož,½“#Òá<Þ: °Z­V«ˆˆˆˆˆˆgœ°.trÁjÀRµX  eIççççççÅ#Ô!ùËHž4pzzzzzš¿¯T*•J%0;;;;; ¨ÕjµZ DEEEEEñl&õRvvvvv6¯ûJ.dr‡Ãáð?< TÆÇÇÇÇǦ¦¦¦¦&Àd2™L&`óæÍ›7oæŒfci~ì¹éÜ´iÓ¦M›¸ ‰1~É7bbhTÔÞÞÞÞÞî[âéÜ!<<<<<8xðàÁƒùHGÇóç/^?ÿ\[ÛѼx19i·VëÂ‚Û DGëtJ%°n]ZZT°ukVVRP^^^^^°“,àÚµk×®]ÒÒÒÒÒÒ€;vìØ±Ãw:|É4 X-æäˆ>|øðáC`ùòåË—/çúàA[[o/pö쯿>} NLØl€É””¤×±±z}X©ÕÊdÀð°Åb³Õ×÷õ?üpýú³g@yyAAr2PQ±sgNPYYYYY \¹råÊ•+@_____šššššú˜ ±£ÇÅÑÖÖÖÖÖöj¿‰‰‰‰‰ n6nܸqãF ªª®®µ8{¶¦¦³ز%++1øì³={rs””ØØðp@*eã9n·ÇØl‡Ë ŒÏÎÍÍ££@M̓CCÀ£G== púteå–-\3.^¼xñâE`ÿþýû÷ïçAF¨úB ;a_í¤TRnˆLNqqqqq1ÐÐÐÜÜÝ œ;÷Ûo]]À§ŸîÞ½~=ðÅee6ÙÙ&Sl, Ó……©Õ€J¥R)€JÅœkX˜F£Vii z=°k×Ö­ééÀ'Ÿ|ôQn.0?ïtJ¥À÷ßÿò˃€\.—ËåÀÎ;wîÜ Ü»wïÞ½{âëðÅ—à¯Íóò¤ ·oß¾}û6PPPPPPX,Ëô4ðãÿû_GðÁyy©©Àöík× ;þï«K¥/·Ëå2™DÄÇëõ PX¸i“Étu½xa·õõMMÝÝ@zzzzz:¶ÆÆÆÆÆÆÞB Xlê€$ŸÂ= ““““““›7ïßïíe¦ˆ1jÆ´4@­V©XØÈXër1SC¥ÇóO†H¥lvdš¤RÖB&J.—ɤR`ëÖœœÔTàÒ¥ÚZ³™3~ýúõëׯººººººÄsÉð„¯vb<…äkêë[ZFF€ôô”ƒˆŠÒj•JÎh·Ûãñz—‹•T÷xXÉXC¿Lc¼^„Ý΢$•J¡J£1&F«,«ÕíÌæñq .....èííííí} 5 X ,‹Åbáa&]c1›‡‡çæ€ää¸8Ž-àŒv»ÝnbüË’ÏM%ÿß—Kb<¥P0“¤T2M0õz­èèè뛚â>æEû‰`)da(íÆÇÇÇÇÇóèÅ­­­­­­|ƒÆãûùy½86›Õ ÌÎÎÏ[­œadËÙ/75¿yÇm·³ñº»™dÛíN'3]^/»hÅV'‘H$.0==?ïtrT©T*•Š›&á†í T9JEDGGGGGv»Ýn·ûlOOOOO?Iâ4•J.¤R…B­ ¥R¥â&C¡`K%¥ÉÄü.—Ëåõ ^¯Ý$%%&&$ LƒH#ÖO*í蘜´ZF.ç/ÜYK!KEèt:NÇ%WHbš@ÑÏÌÌÌÌÌ WqÊÍ$&FGk4@_ßÐÐØ`4jµ`0DD¨Õc; —3Ù'M¼^˜›³Zm6`jjffnp:ƒ].¯W*˜üó’ÁŒŽNLÌÎË—))|¾”ã"M}kX,‘pW¯^½zõ*   3Ó`š›{{çç…‰D¥ffœN¹ÐjICär׉ˆ‹Óé""€ØX£`îñp‰'d³±úÐÐø¸ÕÊMYFFr²^Ï÷%”kZ2 ôvòD$YäÊÊ V®ª«ïß¿sèííëaÑLÆœ&s¢\„u6o6>Ùz§“I:×·["~ÿ½©ih8|¸¸85•ÛüÇ?~üX¹råÊ•+ߢ#É`‰4€ܽ{÷îÝ»<%pôhIIFpþüôô‡ïÚ•“DG‡‡«T€Z­PÈdÌ7Èd\ ‚€… ÷;dû7o66šÍÀ²eJ¥\|üñ{ï­ZŒŽŽŽŽŒ------ÀÞ½{÷îݺõ‡,( £ a»Íf³Ùl|§¼woqqv60449i³/VW77EEëÖÅÅ))ƒFÃ|€×Ë%Ÿä”ô–%Ò€¹9‡Ãíþü³¥elŒçŠÎžýòËÂBnÊêêêêêêø9ÃóçÏŸ?¬ZµjÕªUK€X´Xj•”篪ªªªªè;„Ï??p ?HIaîø§ŸX6´½í”33M&ƒˆ‰ çqýô´ÕêpÝÝýý““@KKW×è(ðÞ{™™11À7ß”—ççZ­Pp†çææææærÛæÌ™3g·:tèPXXXXXøõí`1 "›[]]]]] ¥¥Û·gfï¿¿q£ÉÔ×?|h6ýÕÖöâP_o6³ï˜ÓÕëÃÕJ`Æ+bb€'öì),V¬HN6ø‰ZOOOO_ß™S”FTZZZZZ \¿~ýúõë<7ôÆxÝ>@ìÄ)'''''¸uëÖ­[·øQæ¶mÛ¶mÛ|øa^žÉìÙSPðò ÍWx"677777ܹsçÎ;|ܼ¼¼¼¼<¾‘¤ô3…Ÿ´O!AhnnnnnæÿÃæ-—3Aý·€ü- Ð+ˆeeeeee@wwwww7ÏžÒþ!66666–÷ž ONNNNNò_JJJJJ ?a;wîܹsçxš¢2Z·B¡P(|:§ 9:::::z㋚`áõì¬ØºŽdÙmæS§öíÛ·oß>†âw!C©N;Z1†û’|±ç´ã¦3e:B$F ”2 O¥ˆá%%%%%%ÜÆ ƒÁÀok_¸páÂ… <+K ¦q ÒÊ0“¹bËm•–2USÃø43³H( cüúkŽ©Õb%Æ×R/üŠ¢221 夣Ñh4¹fÐû42MÄX2Et4IIBÊŠ°äœ ª³4»ÑÈœyy9Û×ÔÕ1GFþæì3žÒL+F6q‰$ÔÎXHÄXb å–|•¾ƒÄJ²éä ¨NïS’íÔ©S§NâW(É)ÓuºB¦Æ£úÉ“'Ož<™À½qƒ ŠFãCè† Ë», èt,þ­¨`g¤ I Ý·–dƒiGI%µS)ü¾XL3ˆÄ¾3–B –ôœJáû4¯üüüüü|îtɇ°ï¦9pdʨ.0Ñé˜ohme@µ·‹8a¡lSÝëepéREEEEEʼn¡Ú’‹}M)Ô4±:+¹fú;Q`¦Ðëe¥TÊÂW™l÷îÝ»wï’’’’’’8p$EUìƒv•ŠF€ŽènÏ0šÍf³Ù|é;ªªbDšBý›¦¾ÿrá庰|õ9òïý„¥aœçñãYÝá væ[6ofN÷«¯Ž=zôèQ¹œ|E?P[[[[[;;KN™þ×OÙ¥‰ªÕ¬$¦Pü“aBÆK4žB Å€–þ×ü–ª3ç»n3=ß}Ç¢¦œ®66vvvvvv~û-sÊMMs64Œú{¸7t-VL²}1>Tã…¥°Ÿoú?“¥òÅX%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:48-07:00À«Â–2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖrtEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/edit-find-2.svgMÀ_|IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-paste_16px.png000066400000000000000000000010611321676412500226540ustar00rootroot00000000000000‰PNG  IHDRóÿa pHYs  šœtIMEÕ ¯âñÐIDAT8Ë•“±kSQÆ÷½4‚$1Ô” …"\\´jbÑpvÐ!8EmÄÅA—‚8Žú4ƒ»›¨KÕ.º8)‘R¨ÑHB^olÐFï9¡1/m ~ÛýÎ=?ÎùàT*•Œï{Ï“Ù~ß÷½ÎI±\.k¿onΚ+*Œ+vò¹Ü<Ï ¢¬¬|`_í)hªê­Ç/Y2óg‰øž .œ9ûÒÉð.ÈÒ´¦§§0f ¬­­“LD9šṳ̈¿Î³×«VTS æyf,ñy_ϲxÿAP©TB«ÍÍ"•Jqïîm.f¾!ª1 éÿÔÞ‚D"ª03sl0âñ8[À©éy=€j(–ß¼ ½ ù»)Â>•ç\qúKa{UEEÈ<þò9DAU°Ö21‘ Ðß(Òmnýh>ˆëAª_«4õ!‡5纀VËÒ¨×)ÏÛoØÖnPû^CDzþõù«\žZ¾ÂÞ1¥4I§3¤Ó²ÙÃX»ªpcáZ¯Ù7lŠèïö/·çDò#ïðÓ팦°ÿ«í$µŠ1fSU;`á\÷1Œ3‚T»×øäKOæá˜xiÄÚIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-paste_22px.png000066400000000000000000000014051321676412500226530ustar00rootroot00000000000000‰PNG  IHDRÄ´l; pHYs  šœtIMEÕ 6?³âè¤IDAT8Ë¥•MHTQ†ŸsçΔå4ê8þ$B (¹ sá&,rDZdÖ&°»ÈmÓ"j6Ù"  ‚·µÑ]¹( Ò…BA fè̘νs›q<§Åü댃yár¾óó=¼÷ý÷Tx†‡‡?½û–g'''/–' '~?Úò,€dãõ ú‰3ï¥Tž®®„HUJ±°ðM‘T"6ä½›8×KÒïGöÙî(äs)©ø[Û£5¶÷ˆÖÖÆ’ŠVW#¬ÿ˜S'7ç¤4¥¤vïŇ½·zVéÖgùlèR›+´ÛÀW³“s·ÛC[[{NCZtzL$`}½CTµœ·uŸYÂEÈ5=÷sȃ—gq8ujìvùÍN|Ÿ`D ÆÇŸ²¸¸TR±ÓYÏ÷€ÚºZÆÝg¨i©D=(ràœ/J`%À]çF·Ù¤R©’`]×BàrÕOŠâbí¨¬Øíö²ûJ©‚IpáþÌÌÌ!Pèï÷–Ý?TñÀÀ@I•éW"¥<X•Wœ‡*@Ñ××w<Åy…é1 7Mƒ††¦Êà}þ3==¨¢Ï÷z½¹ØŒ™esõr>H)éï÷)”2íkv-ŽÝŠB@¡kk¿±¬mâñ8JÉã‚eF±be僃7sç #zTð^4gEF¥aD1MËŠýâ|‘¶-‹p8ŒÊÜ]Ó4 …Ö™x=Áµ¦…òàlÙN;$‘ÍÍ-¹C-û’ #Zu;¶++n•ß{ì#žÔ*5nµ|á”-YÞŠ7³$F¯²ií¤<Ït«Ov¿Kõ¡¨•Tø@¹{…BÓ^¢”§DÛåþEù@lɪÆÀnSï«`pjç@ÂÈÈí* ¨êЉ@Ø6€ðØÌŒ±`pJü^a‡‹9&PkIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-paste_48px.png000066400000000000000000000054751321676412500226760ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWÜIDATxÚí\MlãÄŽç»ùjºb¥^Úe8À i+¡¥BB°•v½pq¡„„Ð^9rà„„R…€ G„ |,¨—åPÁ…+$´JAÙt“Æù²cc;ÿÃü»;vl×ÍJ¼ËÈ~ã™7¿ß{ofO˜3ÙØØØØØøá‡J¥R©Tž|2¬v[­V«ÕúþûÝÝÝÝÝݧž:ëqáÎÚZð—.]ºôÈ#ét:Høoo8¸}ûöm€+WÎz|´Ì Ã0 Àó<ϲ†ašæ¿½x<gY³Ýy“ÈMZ^^^^^ÞÜ\_____ÿøãD"‘àù…… ú?P.\¸pþ<B ‡þûK$‰t`ÿÞ=€ñx<M½¢( B½ÞÞÞÞÞÞÞ /~ýuTx¸FÀ£./§R/¾xõêcårÛÛ<Çb™Œßóùõu€gžyî¹§Ÿ>é™ ƒ¯­Dˆ¢(öûömY=ÚÉ¿³Ùlva`eeeee`­o†aù|23ÌW_U*ýþ­[þUUÕuQü曟~ê÷_zi¿Ñ@è³Ïf&‹]½úøãÙìööóÏ_¹R,f2±X°@þðÃß~K$Êåryq@’$Ië‹Åb¹<{ ñZ?“Édr9†á¸dàúõË—s9–}¤  ªš6g³†a}ôÞ{F«åƒžgY†ÉåâqŽ‹Å8ÎÉœýýDâÙg:–Å6ÝÈX,»s P(Êeœë­“¬lÓ€°Ö÷]?N§3lW,ðã©ÔË/pÇqSòC"!I¹\³ùí·æ¸WWÏ‹ÇâqŽc˜BÁÍžÀ“p«¥ëçÏܸñúë7nLæXZ¶¶¶¶¶¶pj z½^OL½ÝÓÖ;V½]?Ný;=W( ¥ÖÀ«¯¾òÊk¯á¹ÃnõE"ëwÞ}÷í·²Yg»½H« “~×ï÷û½žsmœsÚív»Ùh4{÷¦:yÏX¯úÑh4Ò4Ó.b¿ ùüdû†1nžî$xÕƒ#`84SÀY B!L&“©ÔìÏàýÁß777777vvvvvvH›þÚ CHJ¹víÚµë×X–eYvr¼Îxx«ç$>0;ô3൵µµµ5€ÕÕÕÕÕUMÓ´ ­ BÈf³ÙlÖ$À+ ¦CF”‚HG~;$\ZZZZZ Ì 2ëäž  =ßo‡ó"î©Å{Xñ™UD@0…'AwÒMÉ‘Ïõz½^¯ûyÒŸøM-ÕjµZ«9ëév"Ÿ c>“_O·#Äi¿a÷\d)ˆog¤©Õj5âYaJÐI”Ö»mé{Ì24, p7ý´#Ü Íy~ç€0SË4=¡nã4wÂ~ú‹2µ8éçfÚ¡Û•§ÛÝ÷ª·«Aœ>¬ˆp;½µÞ4kÎt'lסŸ.É0/ž\«ÕjÕªwBL»Oá*ÈßË'ësaüâ¦÷jý¼[ß ÈRÜ׬Hb a˜¾<£…̳lýOsuÓÓvN^;÷ëE|ïœÖ½óZ¢ Ä)Í*¾v³tHbì³ÎOj¡u{ž¶³Z­V«UóÚé+‹È–¡“¯£êE—Z¼ØìpZàäk R:ÙáNx6@ìvšVÏš—\O„œ. 1„À3Ý Ï{®Ÿf'ÚÓÉ/vn¸õtó^–¡Ó€©×ëõ;w‚ ÀKÿ/^¼h4'Àg-é*¡½Š°[®y!$,Àƒ¦¯à4DH€=^6Z'ß…¹>§ÅÍÓ½M—ƒÁ`0hšaè:@,FRR„;a»îÈ‘®çÐ0ôþu"h4T ^ÿõ×ßøòË›7¿øÂZ 2·è³M²Q¥1Ÿ~úùçŸ|‚¿ÐK&1À£‘©'_Ê!¤ªŠbê“IžO¥ÌÈb˜p^F†¶¶¦„³L-n)¦Ñ8:j4._~≵5|‚†ç±Þºº%I–:N§Ó„nWR©d2™@HQ:¬ë^+Pvàp/z€à¹›.—–*•sçÌœ®(Š¢(²,˲Œ¿]EAèt ß—¤n Ýn6 \^\,‚NÈ¡½ µÎQ¦¯@"‡Ü'€K’$I’ <¹&ßï‹b¯ Íæñ±ù #ï™@@¤ï;E€•8'™u}î5t]×5ÍÌå8âùpâñ­þl^–e8ètÚíN ŸÏçóy|b§X $i0¾ONAÄ0&߆øñô )†ô«ªªŠ ˜ÁóÊb}¾ˆXfñ-#Cƒjf÷ùÆFö>\à•]'”]ýº¬ ;¤Ÿ>wùÒÓ¯?~X _:ߦlSÜŸ™0ŽP³6=aô~ÊèW®c,—‹•\¬A¦lÜðÖöuð–:câVú{ÉKgUÏû´—úœñ/ïçà$×`Ië5àIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-redo_22px.png000066400000000000000000000014521321676412500224720ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÖ #K(‹O·IDAT8Ë­”MkQ†ßsç#­©­ý4ÖŠ"¢T V…‚X©(m•,Á•Èü—þê.ú fáG¡  Ŷ ±Ôkiš&˜‰ÍG373÷ºIÂd˜¤µxà0pÏá9ï¼sæÿ±¸.cqýàn} û‹íX\ïüïà+ç Ó ¾_Å»Âi?Ãxî‡n—Sh×úðéÝ"t™·öŽÅõIo&õþE÷òÀÙb[I­ÖÊeyžˆD"pj½ àýíñQZ]üÉZàrŒH%pÛS V²b@4­ÂæÁ‹àX\?`åú­Q”ei+Y“  ¦¤fÃÎIØyª|%\3 _\½tÚ&P(emBºõE—l¨ Á±EíÌí2 î@xJö†Ì¯BQº;`Ð(Yip±-– ‡ ‘Á@ƒÀШ ©èèi‡¶UÄÌìr]ýÚÔE¨-hm²Ç„¶ŽVl¥rfv9 àŒip2 N ÖÚ¬@ED’KŸ³.€»¦Á¿{ë¶[¨BAZaËœ[’ª t*Á¿ù·ÇÝØë/MVλ¹?¥4àé$+}TÀ ò¸ið„÷¬™b@RÊ/¿­… °¨9ã ÓàºO”ôe]±:™å7ñxzGét\.ÕR(;ùL»_«¾Ô*OÅÿF^5T)²ŸDñä –J¬ebÆ£"¹‘³Ve¼˜Uú½ÉÅ€–ߊ¯ƒcl.•´ôwXorïa?Ö>Š„V* ðÚ¡ø.£|eZ¬ŠÒK®:DŒr‘af‡{ÉÉþ’¶pj&ò™Ç–šï#”î¾sì1ôI[ ¯Üו¢G("ÒOj¨EŠu¹3?ç:Õ!°nAÙèŠõnCò:›cIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-redo_48px.png000066400000000000000000000066011321676412500225030ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDùC» pHYsIÒIÒ¨EŠø vpAg00ÎîŒW ”IDAThÞÕ˜kl×uÇÿçÞ™ÙÙ]r\R¤HŠ"©‡eŠ‘ä‡b¹uRÇAY± ñçK’Â…e b ýÐNâÔ…Qh m$M€ š¤h ËR ¹–m=GJ$;¶D‹zXâcÉåk¹ïyÞÓ»”—+r—’#>Ä`.wîÜûÿsîk€O¸ÑÇÑÉžÆõò‹9iÛâãÀÐQ@;€­DdìÞ¯"z<¥”ÿ°b?ôÅ}„]ûä'€Y‰p º­-²æM_·=n|ìÙo|è¶?Oyhöð¿Þ7йã©f3ø-O¡Íõ<ú?ÿø@‰õíÛ°sË_®Þºæþ'#ÈßQïÄø0Ü÷ G•n2ñùÁ¯Æ·÷}á±æ`ü{J`àÍkÀCû´?~ig *PÄŸm~8|߯/µ­¹ó¹{zpƒåîý7qkØËØ— X¡ X@ ð•Çàr†BÖDDgìØ¸ÓÍ;O ¿Ð<•yÖWÞ«»öÁÕ„±âï#™ËùI}_|åH`lÎŽÃñ¹ÙñTD6µE:v vïˆ9¢Ÿx°AR¡7ñ)5Wõ¤ ©Á¬57k»|I’ò?ûWqöç³øì9` çX“p}ÕFPëº[äfSo2pO@[„«Z«;¤(O›DD–ʂ轛ÂfdÛÑsÿùìåé·žç>ŸLgVÒÿ-/ñí×@Dð|W#BŸúMfìó­Í[Û#k»Z›;ƒÑPB„Œf蚉p = ñ“`0¤ $`È¢²©™ ¼zîg'÷¯%§x@׌)¥^zÜûhÚ¯!fš˜Îç; ]Û µ=ÒÛ6pgû§¢m±NL.|¸`(‚‚ ")4 ’•; É@TëDf>‹×Îÿ<ýÎèñŸæ¬ü?† ñ•ÄÁ½KCÜ4Àîý:˜•¦Ø¿»)ÿfÿªkvÄ[ã«`Ñ<òþ4¿€ IB’ h„!ƒ0„ )t’¢œJ &H"";àÞúïÒ™«¯üW¶˜~®ÙŒž+¸>´ÄM â]?"`ÑîÖHÇßÞµî?ßÚoˆC$w0çŒÀQ…Š×é/ RhÐH‡¬”EÅû ÂÂCÁQAô'îдMéÂdo¦4{•äí»5~IÝÀCû%|OBНtÄ×~oÇÆÛÖtöˆ¤÷6RÖ¸lPÎéëâ@`0 >\xlÁálÎÁæ,Jœ¥2°8 [åáª<¶`©,¤NèOlÑZÓút1u{ÉÍhtø%åWëZÑ,ÄÌØs@“R¶ÇÖ|gÇmq[s‹‰ Å£°ül9M`‚áÃSå)RÁ«”€@ !¤$A´Å 1(ÃKÒ! cu`›û¶ËÉìû÷Íæ'ŸPì_põ¦îý'B"$ïˆ7µ}ûÎõ÷o Å5 ç_‡¥rÐ(K°9íÊUÀ‚4¡CJ4è ‹[·aÙ ƒÿ Ì^RÊÿ€©Úê >÷CÀÔ‘0 óÑMkîÚÑÖ– ÷ ¯ ïÍ@#\¸Ê‚Ï.üŠè²2*{SH!+Z^Ÿ>ëYT[n};ÆÇ’ü›á#gRó#ÏøJÖ¥~ÃòÜ@1Hñ@wbý—6tj£ö)dÜIIxlƒ¹¼mXìÎJBTf"ª¤Ocñq}-ºä¸rõ²jø•“sù‰ï{>¿.¥ðîuo¨_às?¤@¢9{x}ç–Ž¢L!U¼X‰´~Íå-€„!ƒhadšÔ!HÀ#«¡@Hè}è[páÊ9÷Ìå׎Î妞&¢SRÂ?üøÒïÕxþ›À£ûhkk¤ëOZã«èª}; šåƒÁ eQ£ q­a™€NA—-]Ó‘¥Q$ßÃgoÑÛ‰UÆ´ñf¼;ü[ç­«ÇÍfžég%—òüоñ/ÐBÀ}-½íž^@Æš\¢#(#Xm !×Á+Òs³*Y¸X,X™¼íY%ÏwõŽèÚö;vè3â Š~ºâ† ÆbÞ:œ>Yúýµ“¿Ì—2ÏOà½Ûº|Ü«êI¬ %ÅL#¼¥5Ú¡åü ¸ÊºÁûQ½ ýÁ{át M¼›Ÿ¹<”)Μ¶=ëœRÞ3Ò |;€§|{·€ÄÂx‘@g`a»§/¼ž=?zêù‚•û‡€|S·ƒC{}4²Fƒ8 4u‡‚a÷¦«ö5eÏGôl ÝéÔ¿õþñw§3ã?µ\çeb\c /%X1;RH«:j:ÑØ£´ ¿z%=œ<ûïE»ðÆ€‰¾Vj(¾!£¦ŠJMÀvò‹žé"ˆ¾à=˜Ê¨SÃGNLg'¿ë8ø•i’#PÞ"xñ1þ¨zÅg"ŒžÀ§Á¹N žº4ñö?ÛŽ½ Ó~ñµôŠÄ¯ ¤ ¡é µhà1q£šŹ‘—/ÏäRï* ™R !뜦¦Œ`µÜ'­áÍ÷^úãÚ?Ö5m8¸÷æ>=6J!O)ÏóÙѹ/ Óº0==©¦³£G}ŸOèê¥Ç}Kç-ƒaˆ&ôŸF*•¯‡^›½øœë»?#¢ürÛå µÝRÎóc¾äÞžÍLíZIè’ øì€Ù‡ÍY„‚M¦®n³§éO¿ƒìÉï/Ó‰˜ÍN¨ùüô›E;ÿ]Åüš²…÷ò“êC‰|:v®ãZÇRéÑ”tCk-`”?d¼ Ä¢1ojý¬ØrâéxH’ëzöÿ¬Ü_g&¼W¿¼WóŽí—O;\À-žÏëÌžwÃÒM×U¬î[ï‹Bó`ùY€ŒÎÈziÛn®4+›ý¡Ñ“(Õ@hW_Wö¥#~6}…«ÁêPÕý¦–XhT$ßµoå”2JQIÚ]-ýº'Jð`Á‡ à;¶!àzî #²‘Ä€{-yYö‰”(·êß] :ê‚Èå„Wu&GŽÃ鸋G‘ë1´à†ŽX¯€ôà‘ —‹0ƒ&ºâL!ä §åúâîØÔ;˜ñ,ÐBKˆ§šr£«!€XBüõ4HžæLËf÷Šl_@ ®íˆõ ©•÷ø6ç $:ýº¡™ë þl»lvÎNžål¥ÂÒ^®M™¥<_7­dÍËTS¾Þ‘r!FÅÓ±Ûí E5߯>­m¬ÕÂf>UJØhôŠl.ŸÏϾ{í ¾\å<»Ò2ê,%~ÑhìML7­qß±hŽŠvam“ž·„; IL ƒšJMZcÓÇ®ã‹UXJÔ²ÂØõEs Ö;Ky ã§8­àUáÌD¦8“pl¯5$cš®š15••‘Kç&Η~9q†g–êtåzÏ­øµùG ÊÕÿ#Ø mðZßºÎØ‰…?cèF¼T*%gFŠÿñÛóŽå'kÎŽ‹ªªßªËõžÕÖ»!”Ä߀aô|†Zf4§½ô¿<[Jß°7ª¿’«žp®]k¢ê^-¸r©ôâª:¢¦íåÒ`%¨XdË  ÚWOøJår¹¾R˜ºBë-q_nz[I{¢Q[^‘¸›µz^¿™T—oéTóÿj‚BñÒ¡E%tEXtcreate-date2009-12-08T12:51:21-07:00‚€ Ê%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T09:11:39-07:00 H{4tEXtLicensehttp://creativecommons.org/licenses/GPL/2.0/lj¨%tEXtmodify-date2009-12-08T12:51:21-07:00Ý1|þtEXtSoftwarewww.inkscape.org›î<tEXtSourceGNOME Icon ThemeÁù&i tEXtSource_URLhttp://art.gnome.org/2ä‘yIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-select-all_16px.png000066400000000000000000000006711321676412500235730ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<KIDAT8•“=NÃ@…ßX¶”Ž  …Å.‰ ÷ Á ¢@ I.A  „Ú‰ä)±w÷Q„5þ‰2ͬ½3ß¼7Ò I<> FZ«Kl®ëŽo®ïº ‰þàÞh­iŒ¡1†Zkj­©”¢RŠY–1Ë2¦iÊ4M¹X,ø0ì’p/ï Ddù£’‹qv¸“÷XD"‚$IJžïc:–¾KVìäÊi"‚ šwÑxSØ8Ùß*Ý9ÿQÇ1â8Îm6*ø¾ŸÚâN§ó7ÑqšRl®æFIÀd2©Ù°EÇÉkWZh·Û%Ç{xýøÂùÑ.Þ>¿×+¨mól6[¹äµÂ0°ô."µAµ%AP[dQQU­¤œl×$¶Z-Ìçó<@!‰áó`¤ÔfÏÙó¼qïê¶ûF2—®ót ªIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-select-all_22px.png000066400000000000000000000012051321676412500235620ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDAT8•=Ó@†Ÿ‰£$|(5'¤(qRP ÁIQQPÀ F'èŽDáhè(ù\K´¶ã(´´§(‰×Š`ãO8n¤ÑzǻϾ3;–EU‰íõøeNgúüÙ‹u<©Å“ÃÑ;` Ç"ò_,ß¼øsŒ*ªÊÁh_Ã0TcŒc4Š" Ã0ñ8nŒÑ 4Ýl6‰¯×k_£ý‹ªJ=‹ˆ°X,h6›„aˆˆ "É»ô˜·N§ƒÔ$$Ü–²ž_ "|þ¶$Š¢JX~~kç|á R0Àl6ËÄ{½®ëf ªJ¿ß/Í"VÕLúy³m»4^«Õ ±JÅUñüûÝëJ×—‚Ëà"‚ã8™Ø`0(U[Ç¥€mMó*ƒAe&'R EQfž-ËâN÷R)ô¯à|Wäm8:¤œîЏUŠE$©oZª8¶t)Ê:BDøäüIJ,îö®ög®4}y¾ïãû>ÓéÏóð<×uy´»ƒëº<¼} Çq*»¨RqüE¥ÕŠ¿|çÁÍ«}ý‘Q"°ˆ`Œ)€ëõz’ö=»Sè Jpúæóya±mÛ… Òåû§b€n·›l.k«´ˆ2x¬ª*ív›û7.WG«ÕbµZ%#n»H|òäp41ÆìqúFãýÞ“§3༉H8œÎýö°fûoŒ}¥ª«üþ_ a ~¤ËIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-select-all_48px.png000066400000000000000000000032401321676412500235730ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒW:IDATxÚí[;O*A^®/Ô šl6ŠšÕ……^ŒZk¥Áè/11&ÆJãÏÐÒÊÞbc¢Ë&X‰/ñÞbîdaÜyíÌÂ|ÍqØ3¯ïœùffÁFÁîîÞÞÎÎÅÅìl293³±Aóïàññááééòòììôôü|sÓwC‡‡ûûûàäÆï o@êõzýó³Ãé¥Ýn9‡GGÙës ×Ž–yÑ8‚e¢ h7—ú+@üfºh „puU*=?·—,™ð¢Gp3Ö×—–¦¦ZýúÄM4â•– |>Ÿ/ä‘Íf³™Lðýà`Y–•N»e”øŽKP··bH{~]ÐáEÌÏÏÈÏýø‘V~]~’A&œÕÏO`zR‚de0«|¾¶¶¸89é–{N‚Ú%-8?ZæwmЉ …B§ T*•J¥Ð1¸¶'%Häœ-Ú/*9¸•ص+À$˜ eY–e¹GŸ{×e÷#½’@ýpe(Qíg!†æ‡ ŒR$z>gõ â¯iš¶ºjÑ(¦+ÿ}@§åm‡GãeBùwAAÃ4MsiÉÁJHØì „W€j§ ’¦émÑÜ¡iš¦i’'‚kGÄ• 2½#÷Ü€U:.Òñ›é¬›4„%heea!ÅOŒU ‚ØDý¼:`!^¦I»x•Ñûz Õ£B’Žx<O$4Íq§\Ö´D"‘˜žÆê%­^ãEÇÑö{€×ĽÈ’ù¬õpõIíCâáçŽã8¶-¾ðø–Ì÷CpÐ#™í“úá…”›p'3Dh§Y `x˜e^Éôvƒ|ÅЊ` ô ø/Æãã­?¿{Bpõƒ\Ir ëÀ¾½ûú l£ñ?##­„G"­ÖE,‹Åblô11l(,d¬V£îå²m;N>||rrt”Ívz*¿¶mÛ¶}sCó µÇÆ€E%JS8 ,Ü`D•ÿi0øújå–ëu`?>€…Òóþl­l£òn6‰†ýà罆ïo`áæ -.?7át<ìDN ñË%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:47-07:006ã²2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖxtEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/edit-select-all-2.svg!õUüIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-undo_16px.png000066400000000000000000000012111321676412500225020ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÕ .:u¤TIDAT8Ë•’ÍKTQÆçÜ{çŽÓ8æø™d5˜DQmf#ÖÂpÝ*p.‚ ÿ`nRœmÿ@!D-ú!ÇfcDb¤B~Ðä”åõ[ï×9-td¦’¦ßîðò<œ÷}Áo¼~B£e°Ð=€àÈòÇ`ƪ· ÖÒ·/S-¢\Ü×鯧{SL/à‰†b¨d™ÍÍ­=ñvÿ0(ûaS:@€÷ð\R;ÎôÛº¯–DŒÜìÊú_JÆ`ÆŠõuú[éÞ+øA!%® ˆZ<¿†Ím—0ܯéèp›…´›mûnû¥`b2¯VŒ‘ûÊ;K¤4]M ­5J…(¥²–@űíÂ0íDCäÔŽ.ïùd^ùrlÎJNÏ`™ €0ôXüüå¥Y ……Šƒ¸6õ ;DcÖÕ›§s棬ï茕„™õtoŠ•åERϸKG²â±ÁþžÅÆ– QçÚÞÝ` e}‡Œ•„…ãÞ½ñ+󪴶ǵm+‘ˆoòó{“Yу¡¬ï¼š³’¥øJE:*ÓõÝ }§8ïL×Å`g?†ÐÚ®èA9ùQôßš˜{J›…¦³Íº0{Žà™~™PŸ&ãáÄ‹ Îñ ª%?Ê5# ·6ÀãW8A|xÖ’:wkuy;èéw¢UýàHØ<Ô‘Ö¶o+Á¼ôœþÒ¼šZ€FáG±îÞ—†¿€¹Ø| ¸IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-undo_22px.png000066400000000000000000000017631321676412500225130ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÖ 8Ÿ?T€IDAT8Ë­”_h[UÇ¿çþÉM{›´©Í]ìŸté\u>Ì—"[…Õ¢¢ÈŠú2‘1Ê„>íQñEA¦>ŠŠ>8(¡/¡¢ Ä-[ctæaÓÉݬڤ’uÉBþÞäž{Žž[.Y¡xàǽ÷ÜŸó=ßßï Ã¸tnìd2Ž] i§K CG4óÏ3Øåv‚H™øä³ÏàoCgÆ{m×`e'¨ÅG *Ý~E2Þ°pôðSƒ‘ó×7ÔÄé÷šÕN`¹”ÓUÀó8¡Ø3ª#<F0l„úür¥˜/í}äAûÅð„úC"ÉJÁG^žœG݃ä=àPɤ(Úè=lxtßêÝ?Àï=žP¯%’l³-øÒÙ½Çuú×W“3ã¨Y#ˆYÑ\)6¬fz™ôUpx¡ûýÄ{«i{ô€z%‘dV+˜À— CG6˜4 ÀˆµÊò[¿Ü_|èi\ÿþÇŸëåBê¹yÌ··zœ»ÓD©´ŽñhCÓ¬£Zɬ@O×Ö~¬\[ºùÔI<¶cWÌÎe./- M_oÆŸ˜6P5O}óÝvr‰÷ d óÞ¾u‚F z<ÁQ`«sÏÎe.h`:uñ6"‘Èöüá ‡O€ÊÞcÅüÝ­zuÛÔ‡‹É=4wÔ ¹£FÇ2;—¹²V7žO]¼ (cî<éÕSwÏg äµõõ"´®^N­‰-Û"š"¨øfŽÇx嘇tuqi*äÖ-Æl›pØ/OYz? ®¤­ôß+¸ññYÜPu̵€ãñ}ýGÚxMZîçÉ]ÁÜ…€Õ½u1×AE,IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/edit-undo_48px.png000066400000000000000000000062341321676412500225210ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDùC» pHYsIÒIÒ¨EŠø vpAg00ÎîŒW ¯IDAThÞÕ™k\ÅuÇÝ÷Î{´oI»Ú•Ð#–)Œ ”A’)“`;ql…¸ˆ“X1Z'qlW…Ø$Æ.»*T°Cñ!¶?ÀÊNª\.—«ŒB‚Ë@ B"&r@ôˆVíJûžÝÙÙç½·ûäÃÎ.³ÃìKH*ÒU]Ó·oß¾ÿ_ŸÓ§»ïÀÿó¤.WGG¾UÞ}÷ÕÐW ÏË6(W à…>¢Àõ@óÕpßÉÃGûÀ"Ä»”âw€ñw=Àó}@XçFŸ‰ÄÛþÆø³9¯~÷»Ðу ,(¡-‰}9Ù±÷ï6îúóÎXc&@ÞÕ‡ƒXòºCñú¿]ßuÇ_v^÷¥–ú¦Pʽªâa.tø1(fPðò®HlÝ}Í›?~gû¶OÅ¢‰u²é«­}mGúÀø8ÑF>­o¿¿¥gßíí[? …Š`&¸2ù2<ß7çï"D´ËoÆ»ïo½önjÙüaÇÕ³ˆÉ tb@ʰ2 @k¸õ³Wàè÷Á †¸ ©;ë’Û¿Ú±ãOv­ßp“Òj ±Ù·"AK[)O‹%k(Eü†m­±éíÂ-û¯€1`-nØ=ÐÐü¾¿êع¿+Ùú`'[¨hiÑNœH¼cCCËôƒˆ™0AqÊøÙÁÀÏž2=pN+RF°G^¾íF͘}ø1Юƒ5¦Ýq#Ÿ_×öÁ/tìÜßÒpÍ&°ã ^Õ¢›( ¥iLP$ð2xùq)Ìä ™óC…ìàq¿˜~ÆyáMå`°ûÀe8Òn”¦éÇ_In¸mÿ†ûã s“U‚Ý(…Ra™»F8£(²äÒç˜;–žxíåRnü‡A ‡T"6¡Kö¼ˆEGû |vEâÉû›6ìÛîŠEã!$˜`nãP+YÀñ Êå`¡½ÒQD5afRçH ü"?~È/Îþ³Ò¼,B°·÷~48·DêZ¿ÖÒ³ï·Ú¶ün(öÁLÁ’ ¬€ÀGÄGP2"þÜ5¨8m”J&©g_*ÌŽ>$–§”ÂÛs  /Å… T8UÊv ê·Ä“ï×Ú)•׃*A*Œß‹ q¶¡ÜèðNœÈvœPJGç"”–1݉ëT>3ZïåÓ¿¬?Çùï½p •:Ïp ¥WK¹‘fkÃ[ãÉ]ǵتEM»ë!ü!ÆÞ<é¥_ž™šÊ¦'J…ÙI†tx» Åv Ý(b3µA¤€ÛŠWrb¹ÌÀÅFyéà¡%WÎ…´äfnÏ8ò8ƒÄIJ¹oL^x)k÷é–Í7×¹±AáØ[B”ƒ5†ÂÌ…áÌØÙ¿Wš7”"©´Úè¸Ñ]‘xÓ×ôìL¶½7Mta ‡±þÐbý¶ÁEâ íQ7ße¼l0yÉ»{áØs¤'éGòL]üUÖ¯·µç¦†P"‚Ÿ? ¶8/¥t^„W”â¸/Êø…z¯pas~fèc¹ô›ŸmîºuGcÓGòïØ`¬1c„¢×âFê;‹ÙlãjV“ºøù_½ÎÓýÈB—dEåyqé\ ó¶Ai¬ƒoßKÏ–®ÐÖ·wÿQó¦-uZNaü@¡CíX¶:—›™ý×—~Í/ï{táÝR‘W +~«!æëj‰¯¶†¤9‰þÖ½| §+~OSGÏmM;c®îÇxgA»mˆóRG¼É‘sO¾y1ø—û¥XÖ5/ܲ H%@¥À•ʵ ª­!_¼‹®îÎÄWÛ»wÜ–l[¯•=‰)]N¸ËV&‡&Ìøàÿ>sn ðÈÿ‘¡*ñó‚«aT»E-ÁšÚVÐ,í^vë&uú¦–“­ë´ Žcƒ ”®C‡ºð¼fRC ãCOê/=|ÏCœô|t•Øù­.K%@¥ï®Vœ^¡´@T)¥>(ÞŒÐÆÌ´arøôèÄèÄÿçDÐ÷õG9_~¦RøRójÁµæÀü UñË2mX¢r~HNoíI«K5¼7V¿ßó™IÒããLJG²ßÿ·çyúO’®xŸ,ñ®ZåE4µFu5sb¹èÄæ ¸|IÝÞÙùt$é¶5¼~k‹@*¤+™>{Þ›ŸLÅ»ápÜÍÀxëÁTy¤Bx7㸉9P`l¸¡é\>Ñ/­ÙÑràYQ.Ú@¯ £UVaÎ%Ô艾iÇ“‡ºa@ô Þ­ïì8Z»ùÝúó÷ì”ÿðG£ixó3¸ó1”Rù*(ÚxS#SræôÙ¾—¤êŸ–Óºžh0¬Ä"1†,¤€ƒR·—f†PC3ç¾IÙ¶S¡¤ÓVCE$Lf|®@eþ`^\vOÙnâ^ÚDšÊv²ÛZ9Fi±¨²R=wÄqQŽ»D‘Zœ«¼R'–À™©n+1½fRþ¦šPUW3½01ÙtÝ|&”òK&«X¹öTiÙ«Ön2v]ÓOCBj⺅Ѩçgé+÷’)œÙøŠ* Í4m Çù 23/N|}¯²é¸9W–áDçï ly”©¡ ˆdêpüT³—‘¾ïðfÿ~e¿«z kÝNÊZ ñ˜`_¨+û:ÕPÄPCC]}õ€êõŽ&Ž÷M@¨B‹ m´Ô÷2 òK0cúèµ]›¤¬}—NõñY:õƇR]‚>#PP Sô¡%J€’=°ùeøà˜àè âÀR@Ú÷Åy|9x9¼( „úvPç`ÎWåø¹ÍøA€äb®Wûx?ˆáç-è»ð¡nØò׊ÿÃþbË¥e{sYIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/emblem-favorite_48px.png000066400000000000000000000066631321676412500237150ustar00rootroot00000000000000‰PNG  IHDR00Wù‡gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< EIDATxÚbüÿÿ?ÃPÄÄ0Ä@ yÐ÷@ y ˆ`dd$¨0ÁÀ@¨Îâ/ƒÕ&& &% Â?†÷ÿÿþ}øïÏŸ‹þþ=÷âóçG=z ”ûÄàR"ÍØ˜ë÷¿¶Íÿ32šõª±È ý ÿ>ê¿üûÏŸ3~ü8²çÞ½û@¹ß0ý¸@>ÊÞa ¢,G±•¿* ˆž.ÓÐÐAÇL4LÐ3EÊ„9ø‹q„¡‡þtï^sÁç…þ ,Ërâ/1èóó3èÊÉ1ðËÊ20Ù ,À:‚á͆÷î1|»~á&ÐqgDE® 3¼cfþL£ß¹$Õß¿g0yñ‚AèP>55fUU1`=ÌôÄ? ù_Ÿ>†OLLW¯¾|Ytåõëã@ç}AŽ €Âð@ªŽŽÈ?fæeß¿»zÅÝCC˜âã„„ Ž%…È H?ƒbä°gϦLa`X´f?!/+c`ÐЀx„q™ À$ưnéyóV“ìsNÎ×_½*>ÿêÕ6 ê0Oвuu9€!¿‹ãëWÛT ݪ*]]ˆÃÿü!¾hÅ0©0> /`€¹ºBÄþ$Þ PÌ€b«OZZf\¾Ìð˜Ÿÿ=°pH¹÷éÓ>˜'ÅÚÚuŒþ4&`ÒÚÊÀ ®ÎÀô=Ù’ % r›, O¼~Í𸦆a"Ð3™™¯nºw/õ׿²ßîL ã?LLG½?}b÷/-e`°·‡„Þ`À Ípû6éêj†À˜¹ôáÃü£/_¶eî L 0|Jž|aw±¶f`06—, ÕÐÅ(‚òÈ À’AI‰Á4(ˆáÈŠ Ÿùø.¿{·ëÓïßïì55ÝßÿÿY5rÛÚB’ )é•ZêèÿÀ’èçÝ» ?¥×¯—/~KBn`ž†¾3°Ô»ÇÄ$¨ÎÇçwúíÛ«öÀßÿÜùÿüaµ•4Àò›áãGú†>´HþsëÃ÷Ó§¾:Äðãñc` 2ü…Vç šLXQêó• °ø}ÀÁ¡’ °€U»µ°”6°bŽæ 0þ{ó&Ãw £¿<ÈðX|þ…DHJAéáУ\ÀXåÜ,,¢@!I€‚äÿ´D@å;($@Žy‚–¥q`’ø¬™ý}÷n†ßÀ¢d##F O}º‹ X*‰“'337PH € ¹ÿĸAE)È  VYQ€ì0ý9s†áÇ®] ¿ß¾eøu0!ÿ€j} çù€æpþû4ˆ €À`:ö?(T@™VtRÛ Š hÇ¿+W~îÜÉð˜Æÿ£…ô4öl1Ç MX σ €`IèÍffp;ب×¢Ôò,Ô%Éï}ûþœ;´îÜ‘ÿÐû‡Gþƒ³ ØŸ)äç¿à¦@A2ñß¿7€-G•ÿÀäÃjÇHI‘ÖtÀ—IAé÷Ò%†ßÀfÅ_`Ýò‹ÃþcñÌ?4OÂT+cá-È¿ƒ ¦_¶Ø 9ý’‘Ñç-0ÔE€5ƒ€fc‹ŒŠèßóç ¿gø,eóƒ±y ”9€E'77˜ÿƒÀJ Ôú @`|úóg7SÍ™ÿÿY=@50ÈÀ¦0Ãß¿¤'`ƒbò°Lÿ ùÿHm)l¡ýHƒšãÀ½¬`_SÇ“Ÿ?A=¾wöÀŠ7oÎgЉí=ÏÈèa¬(¸<€8T/€Ò+¡˜€:äá_À×w`:ÿ ¬ ™°dPdG3 ±‘ñ_$6(!ó{jB@·üºã°˜ÿû÷—ß¿C™á@ÁÚB?žýü9X”:øù“Õ XãýVã?m6`ïŠ ä¸ÿp;(÷ Øbüì€ü&FèhÁ_À è¡ÿ\I³2H‚ò$0ôÏcóÐg¿~½þãß¿»@éGóÀÿ?NdbZxäß¿i &} ¯™^½bøLR<À.$+¨i ‹ P:þ?0:»߀ÝÀŸ Ìu8®2WÇæPožXÊ)*2°ÝòØ$ß,!þüùò·oçÒW@1@ÈýF ùP~þm‚LLšÀ(Ójü ¬!¿ÊìJ²KÀ&ÇO`Hü&‘¯@GÿÖŒHÇU“’âãy€©@Z^ž˜qŸí[ ÈÇ¿~}_üñãîÿî*áû„Þ¥dÓeg7wàâZ Ê̬äl؃:ïÀ$òèû·ÀdòH3B37´xƒ9˜ ÉáÄzà?–´/L¶R@ǃ’ÍC`­Ú{ÿçÏï[¿~=yï÷ïý@%;ø2¨y@Ø:õÜR,,ÆœœÝÌÌfÚÀXðv/y€Ñù êOïÝv°¾3°"9˜ Íñ Xbá?Ž ¹¨d:X˜døA…Ð]û? ¬\ÿùóaó·o'€¥hˆå _â í„Í 7+#£š?'g…* K°4S¨Œ ƒ0Zÿ£ó °­þ h0 š'`ißp²'K`ò”QUeà—?€Év#0y^Øý¿Ÿoýþýø§ÿ@Ž?Ä× Ž—*„o` ˜kd98’ XX²$ØØx}¤¥4@ý`9üXÔ¾™L8Ò?¶v#ކ¸”²2 °ëøXòm¶“|ýúÿÔŸ?·öüøq¨ä,ŸâÛèÃ*Dhd”RÄõYY½ÙØ%]€ž°k@=o€¥Ï3`’µmXÐ’ ®<£ÿBi1`ÌJª¨€‹ãëÀ$³hæ«_¿~íúýûü¥ß¿O•€Bþ4?÷è@Z„æSAffK'VÖ*9&& C`ˆ930Ú?-} ¬¹¿3 ‘%v`±, uII`„þa8úô)ÃQ`rïÏŸ·{~ÿ>÷ؼ†:¨È| -œ0@ã˜{xX%”­T!TŽ——9P]AØnú Ì®]—RÌHy€‡ãùé\AK‹ XÂ}z|°Ùq˜§®ýÿÿpï_‡€±sê×AÍ´:±€¹‡”/ÜYYS 3%ØÙy½OŠ ¡ÁGÀFÛs` Έ%#ÃÒ¼0ùÉkj20cï °lß tü£/_þû÷ïÆ?ŽA ù‡èé R<€<$/aÌÌìíÄÈØ¬ô$ì•”,˜˜Ž_3÷½«WApOüWÞL òÀ“&¸Lë»Iï °Y¼éß¿37þý; Mïg€ø)¶\l €Èñ,_)21Yú015‹þÿ¯g ÌŒÎÀe†ì`z¾ ìy}uOÁƒkœ JÚÚ Â@5€m™ƒÀP?~ÿ>Ã3FÆwþþ=ùüÿãA· ¤óšÒˆD®`IŠˆUƒ™™ uÿý “`ñÐÕe6;~‹Ã›çσªëëƒÓû`’Ù~ù2Ãwïþgd¼µ X¶ÿ…TJ ¿Éšè@4T‰D‰`žÕ2LL‰¦ÿþ剰³s{2(€ÿØl`gä>°ÎØzáÃëïßï`d¼têÿP:?M2@"úõ €(õr¾7edôuøÿ¿Jœ‰IÖ˜œÌ% œº~á0?ùû÷ã&`¥t’QC‹È縊Hb@QËð|!ËÀ`ÌÀÐ,—tu@±4ÿ*0ô÷W+DÔªW¡E$Eo€¢¦àõ0M©‡10T;¥ÎÀ4Î|‰áÁ`:²Ï!5 >‘“dÐ@QÛðQ}и%ë±2Ô¡w¡MàGø&íHD+ÀÚQ ŠÊÿmEþ¦¦%Ä8Ô{П© !ï€hWÉuÉ ×½IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-capitalize_16px.png000066400000000000000000000007631321676412500251510ustar00rootroot00000000000000‰PNG  IHDRóÿa,tEXtCreation TimeWed 29 Aug 2012 20:02:08 -0000®Z·{tIMEÜ8p>ã… pHYs  ÒÝ~ügAMA± üaJIDATxÚc`ò€™E555ÿMLLŽ?¾]Ž™“žžÿýû÷ ^±zõêJ˜øÇ~ÿþÕp&dÎçÏŸ=€š ~üøãááwÝ·oßÀ€» **Š¨Ùˆcþüù“Ô^‹d€€——×n í´hǯ_¿B._¾ü• Év  æ;vìø T´àëׯ)h.pyÿþ}PÈ¥@œ€â f—OŸ>± 7|ùòÅF\\\@þ` žÙÄ oÞ¼1@1hƒÐÖMMÍÿ@Å?Þ½{ǤS ®cxûö-Xæñr_àŒ"a ÆßÊÊÊÜ01VVVg õÕjjjÿ%%%× 3³±±Åþ±9Ü æhYYÙãXd€7Pãvž÷P×8$illüŸ¤T7L¥Á%¨—Ï-IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-capitalize_22px.png000066400000000000000000000014421321676412500251410ustar00rootroot00000000000000‰PNG  IHDRÄ´l;,tEXtCreation TimeSun 26 Aug 2012 21:59:13 -0000¯ÇtIMEÜ65û&? pHYs ð ðB¬4˜gAMA± üayIDATxÚ­”ÏoAÇ¿ü Á &¤Ö±p±0Å5ôd¥‰I‘Xú/´=cOõj‚M{©G’ª'S 1± p‚ pæJƒ ?œdù±KáÀKf罙ϼùfÞH@ìðçÃ0O0S*•ŸŸ?ÛJ÷›WÝy™ç­»Ë1åûµZ-Ú“q¾‘è¿A<ð{±V«åY#àÞBÌ÷üaƒ¦A»|BÁàaب<âÐq¸t4cq:ÄãñàìÌ'€ŽƒRô¡‰Äwøý~˜Íflo?âÇÊå2¦)r’K3LÊd2p¹\‡Ã`Y–ϾV«¡ÙdFæÎæ²å@Ùl‹z½Ñh”×–_\ü‚Ûýšœä1^¢^¯_îëšËå Óé ‘H°¾n§šöÇ8p2™¢òìï¿@(B ˜MŠt:“ÉH}›Í†x<Žb±Èkl±X`4aµZQ©TJýÜc0‹ÅpròkkwÉâ;Èçó8=ýHÇ9PµZ!~FƒÆr¹lú­à2J$8?ÿ•JEÿG"ìììboo—‚J¥Úm^¯—lR…Ó霎Fc0 ÚŸl·Ûi ±²r‹èÆÒÒ "— ÇÇGX]½­­‡Dûä$0°¹é€Ãq_pO3™4Õqcãžè#åó}™œñp©ŽßkaEŽ¿3UÞt¨øFSÀâå:;TÖé®a^FÁ …"ðþèðÁ<€¤Z¿Òžû,/ß”/^_¼ZúYR×êuu‹aÔív[Ͳ…N‡%­{…„†œXA6I«J¥R®ý•ÉdU¹B^S*5Í‚¦Z(~—ËÿìäË•˘1IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-capitalize_48px.png000077500000000000000000000031701321676412500251540ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d IDAThCíZmL“Wö‡KÄiÁÒ*….*$XY;˜ÂRùˆ‰8Q\ Lø1Ô,¦ã‡ Y2‘%šh`¨(q.[ÄH"úCCbt?Ī¢´b¢†€èªA_å¿Ïúz›Ú½ –JIÆ“œô½çÞ{Þóœ{î¹·Mç¸bGffâ†ää?4:]dÕ V[ÿûש©?ÛÝ:]¾±¾žz­VzððáŒG Yûûé«Í›ÙÝ2…â§ÛwîÐLÄ— v7ǯ_ç ===dµ­„7¥··—FFFØŸÏccß ôۖΛÒ××G£Ïž±?³¼!³¤ŒN§Ì2:2cÀ؃àYjŒ”ÌoÞ¼a›ÀóçÏ'MÂëàÀëׯ©µµ•.ÿ}™.]ºD]]]ôâÅ‹I‘ð:ØJ~-!›y–«5WY7ûŒ £w|ŽMô'+H $¹¿œÌf3ëÐ'5ÇY>E;cttTr¼ P^^N ¥‚É‘ÉdbÝDâqÂylÊ}ûöÑþýû©¨¨ˆÇãÖèº@Æã=xƧë|€¨®®æ|†Søl05°ÞuÎDÐï Ç™ˆG ÀØðð0÷%%%‘*HEúµz TRæw™¬ãÄW~r?jh# ´··Ó…óètåi1`ppíx”€ˆ~SSG}[ú6:qâ;   îîn€¯Ÿ/uvv²nûöíŽÊ™ÿñ|Šˆˆ ã5#÷ µÏê"€!ÛÀ/¬:[ÅmáXá/…Ü€\!§à`jii¡èÕÑlC¯×SÚ7i´1y#R:ˆæùÌs¬|@¦LÀ3ÒåP|ÕKKK#…?…­ã66¸ áLÀo‘ÅÅÇq”•Jå[©TVV2åÁË)**Šup~Ä“äÈeggs¸Rs…“ùÊØQ Ïú_ ùY$EmcÉjGù}ùò%·Ó3Ò)$,„ÈÐu»SþN ç_½zźððp&pïÞ=n ãkÖ¬¡ÅK“>NÏm8†yÎü•þ¼WîÞ½Ë:ôaŒó¸sgÏ‘J¥â=vìëDáp›€0^u®ŠGP)ðËp´ì(¯öB±Žu˜ïL@”ÑÆÆFÖ9¯°gj0ñ^Yºl)íþq7ë¦DÑ›(!1 ¸æ®@¤6’W!55•Ûƒ’¤Nb<f“™|å¾´lù2Êú>‹uS" ߺu‹«ÃÚ¸µtÿþ}2ß6Sm]-ëŒT[[KídøÁ@šUÞ‹…ç‰zAÁÁ^Áf.((`Û`µÈÈÈàè"‡mÃ$Åg¾EEGñ˜œœžçº¨`H@ŠÀù çiIÀ’ùÉèÔ©S¬s›€ˆ^ÇÓ’Édº"”ÊÊʨôh):rˆ9ì’Ã%T~²œÖ'­§àOƒ9‡Å ‹dùglupð‰UÚ™µ“ÔŸ¨y·=mcÛUHD%//#¼k×.nO„‹/òFFª`c €œ ¥½¹{íÚ·ñ å;UJß–Î:sû Ã7)/ûÑ\Gîbe@ÎUD-_©YÉ'îê˜ÕÜ***˜@Ll ©V__oï%ª¹ZÃE`¡l!©UlÀê¸}•öäîq¼õ]䮳@䌭¤´´”uÇç¶V§¥k7®‘·±oà´BÍÍÍžóA ½­òóó)77×q9s†Ôj5ŽÝ—ˆPâºD¾Ñ¦¤¤ðÅP@8?%bc  =ˆ á ‘Ã®mW mÄ{¦DyÎ'#bŽ˜'Dô A?t >¥Þƒ¶G®ÓÞ’YRF§Sf HN™% et:åÿM Çv„7‡é{_§gê_ b&óWƒp¦àÆÍ›444D–Çéñ“'Þ›mmmìφM›ÞýgowìX·!9ù/Vû‹Nçu‰°ùÿç–­[sínÚ1gο(Ðï…¦ IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-lowercase_16px.png000066400000000000000000000007221321676412500250030ustar00rootroot00000000000000‰PNG  IHDRóÿa,tEXtCreation TimeWed 29 Aug 2012 19:55:22 -0000 pw@tIMEÜ73 ^K pHYs  ÒÝ~ügAMA± üa)IDATxÚc`ò€™E555ÿMLLŽ?¾]Ž…>~üÈðû÷o¬rDðíÛ7â ÈÌÌüÿë×/†/_¾€ð ;a÷îÝA±€——×n íòùóç@¹Ë—/E1`úôéŒ ÚÛÛ[þëׯ¾ÿ^äB pêÔ(4` Èp ÜT¸áááî@Á " f†wïÞ1¼}ûV?þ\ ijjjjÌ@€ØÅ @ €m8yòäGiiéÿ C@ªÌÊ4 ¤þ Š@Í<@ o€ü*úô)ÜkP„……A¶g€Â V „¦ªªj:ÐÖÏœœœ «úø1ÏÉ5nçááydþâë@ML쎀»Üˆ PÖIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-lowercase_22px.png000066400000000000000000000013641321676412500250030ustar00rootroot00000000000000‰PNG  IHDRÄ´l;,tEXtCreation TimeSun 26 Aug 2012 21:59:13 -0000¯ÇtIMEÜ3 ®SÜä pHYs ð ðB¬4˜gAMA± üaKIDATxÚ­”OlAÆ?`’µDÒÒ¤bH°ˆ Ó3‰={@*!Ñ{ål›X{³1Y%6š–D<ØñXcâµÞ)ž*©Gjà ‚A–-,°8;Ø-¶]0¼äíÌÛÙùÍ›ïÍŽĶ^ÆR’$ÝÅÌl6X{ðð øçO;“²Ø ¾£0™ÞÕšÍ&mɸê$ú×ÇP|ÖïÆ6›Meõ»1tÜí÷šx¤í¨ îõÂúåцÂýkË ËgX,†½½CP°¾¶•J’ÔÐØ‰ŽÆzÚŠ¢ˆFC| Z_D2“ œN'¢Ñ(fgí\*ýÏ?C:†ÇãÁÆÆcX,½âuçy‹E¬¬Ü‡Ý>Cá øà CaKK7±ºº¿ß‡p8¬/Åáá7¤Rïqtôþ4årÇÇ?TÜn7\.ªÕ*2™¯|G Äãq ÜÝ} ŽãàóùQ« t\ B•ôeÔëu3Œi´â•J%ªðH$Þ ŸÏS½OÁŠ<­VÉd’Ö  ŽrÜ€H$‚l6 ¯×‹\.‡Ã¡ž’……ëØßÿBÞ]%àwØÙÙÆââ ºƒ 2îpy9„Pè¶ºØææõÄ$¯Ï¹¤.bð£^€6¨3î¢+c­‹å CàééLÊ(˜eÙO¯¶·nMh0>ÓVyÌÏ_cæ®Ì].þ,râÉ ×”$®Õjqí¶<%ËmâKä8YÉŽY2±A\0Š×L&“À°Œh6³¢uÊ* …ߕʟú_~uÐÞ¹áIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-lowercase_48px.png000077500000000000000000000032231321676412500250120ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d(IDAThCíZ[LTW¥bByŠHQ†Q‡Zy P´”–AQ‰± ™Fûcmc}|k•hE£%LJ•ØXþ,µ‰‰±ú$Öˆòˆ‰^*«³öp&Óé–2„!)+Ù™sö=gŸ½îÞgßs'×Ëæ­[WgçäœÑ'&ž ,¢7N¤ffžÎËÏß5â¦k迹vã,ÝÝhnmÒvÿ>º{{ñQnnÛˆ›®áôe}c#&#Œ«V5Œ¸é$píúu™ÐÕÕ…nk$<)‹ÏŸ?ÞIMýoh ×:OJOOÅŸ)ž)ZF'R¦hH™èmQØÖãJiÿî8’’“0Óg¦½¢(ñžî°a(..–±tŒ ;ð ðCyy¹è}{³ç̶ÛðññÁü°ù8uú”\' Úp‹ÃÜßß/í¹~se¡Õï¯ÆÞ½{Qýc5jjjpàÀÄÅÇ!2*R®_ü颌§óŽBBCÄÁÚKµØ¿¿Œ‹Ç¦M›°1#E-BÄÂx½á…ÒÒR™7n`ÞŸ_Ä Ì ')t¬ô˜è”]ÇHµ··#üípDDF ??_t’BÖ=EŒ‰ 8:Î;^[[‹Ý{vcûçÛQPP€_ì@Æ{ˆ]‹TcªŒs& ªPé1[~ó†ÐyEäÅ‹¢Ž‰Æ’¸%HO·E’뙡q‚FŠŠŠà3ËÇ^9(¼ë\p¹a9ô H1jG@())3ááaÑG-Ž‚.A‡ï®>SÑ-DÇ“DFÚªLLL ªªªÐÛÓ+×ÌŸš%MÒŒiÒwE@ë(¡"Àb½8QÑQÈÊÊ’qÜc& î¾)×$•UB‘"x×”ñõÖK4ÒÒþ™€VÔ¸ÇOK5 …ÙlÇyó©Êç+C[¸µPô$ÆJDãý}¶çÄ–Â-B@å.C¯ÈªMÌÓ¨z9þëÇ6qîÜ9„Ì Áß9¸PsAtn`I@¿T/u\ –N©>Ü jª<’€ØHÐcÝÚu¢Sp<[­\¹R*Ull¬ôU™3{ ™Lðð—Ü,ÜRˆ‡JèÛZÛ°sçNÙtp™a™T‘ŽŽ™§Î6|PÑ™5{qþÂy Û^5›[š‘»6~oùÁûMoys#è<}3•4bH4`ÆÌrîáãÞ:Ô.ÛŠ¶‰Ó< LŸ1]Ò€z5ˆÛÜ–>Ï>W~»‚ŒÌ û\ÿ@{›xD!˜‚\×m* Ä™ïÏ o}žœ‡Ö|¸ûöí“ôPh¬oDöÇÙHNN–1·nßý;w¯‹G^^žô‰Šª ˜Öš`L3bM–Í–Šœr^U¨1P!ä¯óÙÝÜèŽD¡ö+—zhiA9­*”Û ©>â/ûФ5^KïØW×m©kʆš3.<%S´ŒN¤LÐ2:‘2E@ËèDÊÿ›@—õ(AžgønAŒšÀdýÔ e4ŸÄéõ{~¿yS^¦ï?x€Ö£³GÅêãGÄŸl“éß?ö(0›?ÈÎÉ)× e"‰‰ÕÔÌ̳ë6løzÄÍxyý ÌDì|«ÜåæIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-titlecase_16px.png000066400000000000000000000010011321676412500247630ustar00rootroot00000000000000‰PNG  IHDRóÿa,tEXtCreation TimeWed 29 Aug 2012 20:02:08 -0000®Z·{tIMEÜ€¨y pHYs  ÒÝ~ügAMA± üaXIDATxÚc`ò€™E555ÿMLLŽ?¾]Ž™“žžÿýû÷ ^±zõêJ˜øÇ~ÿþÕp&dÎçÏŸ=€š ~üøãááwÝ·oßÀ€» **Š¨Ùˆcþüù“Ô^‹d€€——×n í´hǯ_¿B._¾ü• Év  æ;vìø T´àëׯ)h.pyÿþ}PÈ¥@œ€â f—OŸ>± 7|ùòÅF\\\@þ` žÙÄ oÞ¼1@1hƒÐÖMMÍÿ@Å?Þ½{ǤS ®cxûö-Xæñr_àŒ"a ÆßÊÊÊÜ01VVVg õÕjjjÿ%%%× 3³±±Åþ±9Ü æhYYÙãXd€7Pãvž÷P×8šÄô†0"§6P`Áâ„Aü0RbíܳҎ³pFIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-titlecase_22px.png000066400000000000000000000014461321676412500247750ustar00rootroot00000000000000‰PNG  IHDRÄ´l;,tEXtCreation TimeSun 26 Aug 2012 21:59:13 -0000¯ÇtIMEÜ6¹”S pHYs ð ðB¬4˜gAMA± üa}IDATxÚ­”ËoQÆ?ž!X"Á„Ôº 6v¦¸ †®¬4qAˆu¡ÿBÛEkìªnMP"jÚM]’Ô²¬˜Ø„@XÁ"°fKƒ Þ¹Èð Nræž3÷Þßœûåܘû£ëŒa˜ç˜ƒÉårï˽ƒ4q¾{Óž—¹Þ;ÛSÚÿµF£AG2Ï;ÉþÇÉ{q'W«Õ‰D¡Óé(´»ØjµÒ1`eåÑ5„¥¥;D.ްºzŸž`ØÜ´Áf{<Ò§©T’긱ñhÌOjBÅÝEn÷* ×]çr¯÷l4¾oÞþþÞ˜ 0ùÝT°ðu:Öhna^FÁ2™ÌÿéÈýd@r[¿Ñ‘{,/ß•.Þ^¼YøUPVªUeƒa”ÍfSɲ­…V‹%Þ¾AÚIEN,#ëÄËb±˜ó‰¤,•I+r¹¬¢ZP•s¹ÜŸbñoíkêͰ`’kÐIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-titlecase_48px.png000077500000000000000000000032631321676412500250070ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dHIDAThCíZmL“Wö‡KÄiÁÒ*….*_¬¬¦°T>b"NÔ-&ü˜ajÃøáb–8ùZ¢‰† D%Îesá#’ˆþИÝ1ª(­˜(ñcU¢B”Oõ¬Ï±·©Ý[(-R~ð$'ï{Ͻ÷¼ç9çÞóÞ·é4glÎÎNY–ö§F§+‡,™¢ÑjË’’þø&=}§ÍM׈Öé Ôe±Ð½&…<4›Éòò%}µnÝC››®!S(~¾~ãMF|™œÜlsÓ5@Àpù2Oèìì$‹5¾”®®.êëëc–&$Œ ¼´¦Î—ÒÝÝMýìÏ_È)£)S¤ŒN¤Lpö ¸—#%“†À»wïØ&088è6 Ÿ€oß¾¥û÷ïÓùÎÓ¹sçèùóç444ä Ÿ€  ä·²šg¹Xw‘uîØÿh`ý8«àê*šèª*«H¤$y œL&ëÐ'5ÇQ> Å:vD¿äxA ¢¢‚JÍ‘Ï!£ÑȺ‘$dÜ ç±)wïÞM{öì¡ââbS£s&F"€>ŒÇsp«óüq'pæÌ^Ïp ×&cëçŒDýÎ@p‰Œ+{ýú5÷¥¦¦’*DEúz VSö÷Ù¬ãÄgòjjzOhoo§Ó§NÓ±šcvb@oo/ÛW"úwîÜá¨oÌÜHGŽaÇ‚TAôâŠ€?={öŒu›6m²W&ÈÌOgRtt4.¸¿§§‡,Ý–ñ! ¢ääæðkOÔr[8Vôk·]+äJ­­­·,ŽmèõzÊø6ƒÖ¤­¡à` Q‡Ð ¿ö,ÁÀkî± Pŧ^FF*)rQ$·±Á Gs(1)‘£¬T*?XJ@MM XºbccYçûÆ“À¾â}¹ÜÜ\nê.°s2; t[þO¤c>¡¸/â¬,Ym/¿ÃÃÃÜÎÌʤðÈpš%›E—m~xýM çß¼yú¨¨(&pëÖ-n ãË—/§¹óæ’>QÏm8†yŽ•¼WnÞ¼É:ôaŒã¸“'N’J¥âŒ:tˆu¢pxL@¯=YËΣ¨øå8X~3€½Ð`h`æ;e´¹¹™uŽãŒMFÞ+ó̧í?mgW±‰’S’™€óÚˆÑÆpÒÓÓ¹ÝÓÛ#I@êMŒ{Àd4‘¿ÜŸ,\@[ØÊ:¯Ã×®]ãê°"qµ´´éº‰êêÉÐ` úúzêhï œsH³DÃûÁl6ó<‘¡Ñ¢ö 6saa!ë<&£¨Å@VVGkØ:LRüfúQl\,Ù±cÏsÎ*– EàÔéS4/hÉdT]]Í: ˆèu<í ™LF‹"¨¼¼œ<@¥e¥´¿l¿]Jö—PEe­J]E¡a¡¼†Å™ sdþ÷}vðâYÚ²u ©?Só&n{ÚÆ:«ˆJ~~>GxÛ¶mÜ gϞ匥‚-p*"2‚òvåÙ´â^ë=vYÊܘÉ:óøE†/)þÉtûÚEf@ÎYD-_¬YÌoÜeñ˸ TUU1ø„x–Zcc£­—¨îbٲ٤ V±=Ùñø(ìüe'?P·TÇm¤ÆEêE<4/?Ͼ/ÊÊÊXwøðankuZºtåùùùqûN‹ñáát÷î]ž#Þ^8zô(Ðí–Û6ÍèÀ÷./-)¥ÊÊJÖ?~œÔj5½?/aYìÝ·—RV¦ð‰výúõ|0Î{E@|xóýÀ=yò„Ëãh‚ª" *ˆ#ÄšvdÏ…¯MF{j=•°°0¶%Ê¥ˆ*ŽB‡Š«£ãŽã=&0<8,Aw"€=ƒs”³cîŠW`ËÕ×±ˆ˜3`}¸³Sc¯ ªÀ€·"嘻‚ùkÔ—2E@ÊèDÊ)£)^ètqæ™HA%óqz²þÕ Þ¿Di4…W®^¥W¯^‘ùÑ#zôø±oÅêC[[û³zíÚÑÿìñÝæÍ+W§¥ý­ÑjgÑé|.ÑV?’’þúzÆ]67m˜6í?ðÍİ&4»IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-uppercase_16px.png000066400000000000000000000007531321676412500250120ustar00rootroot00000000000000‰PNG  IHDRóÿa,tEXtCreation TimeWed 29 Aug 2012 20:02:08 -0000®Z·{tIMEÜ5á¿ð pHYs  ÒÝ~ügAMA± üaBIDATxÚc`ŒÈœôôôøïß¿7ñŠÕ«WWÂÄ«ªªþÿþý›áëׯ @únY¶lÙ\²Ÿ?öj.øñãGŒ‡‡3LüÛ·o Í €4ˇîé)09¸QQQÌ@Í@C¶é+Ÿ>} €ÉljÑ,@Ìd_Á0¨Ñ¨ñÆŽ;þmXT˜‚lP,¨ñ6Òs0 jvÚzÄ~ÿþý†/_¾Øˆ‹‹KƒøPÛìÞ½›ÈÎâñ(Mö*jÐÔÔüÔüãÝ»w<@:¯_¿«»páÂ\@lâ³€a ­&¿~ýâ¹{÷îW++«30Ä™-P `888â¡ì=ðÐÚ-++{K4?bo ‰ÿ@'ÿ²Aø:gH¢¤|Ôê…~ÙUIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-uppercase_22px.png000066400000000000000000000014451321676412500250060ustar00rootroot00000000000000‰PNG  IHDRÄ´l;,tEXtCreation TimeSun 26 Aug 2012 21:59:13 -0000¯ÇtIMEÜ27qD4 pHYs ð ðB¬4˜gAMA± üa|IDATxÚ­”OLQÆ¿–n%µ­¤&ü95"‘[9À¡èÂÍ61‘¹h‚rÆÄ»IHAâ oZ=4kb" ´IÛÔC·¼ôJH#ÛÚ]´e·¾÷*kénYH:Étg:»¿ýÞ¼g±å7Á•Jå!Ú`V«õ㳧ϱd)°Xk—_/Õ(ÓÒø¶jµÊ®¤®:ÉþÅÐäÿãzÞÕÕ¥²Î€ëâÐfp=n4p3ÈZSj n5ÂÎÊ£m†7ul,ƒv  ÛµFŠSH:ý ÑhSSÔZ d‹,Š"ìv;ÆÇÇàõz5`³˜º ˜œœÄÞÞdYV»—$ ƒƒ·°°ðW°¾þ^·c ˜vKAÙlCCtww#‘H¨ÚÒNEQ‚¢(( p:ÆàSs¹\.L&ÆÆxlm}Rk¼»»‹ééÇØßÿž¿s±Ž©g2n²˜ê—J¥ÏçYN»F8ÂÌÌ"ÉKlnnjæX $“I¬­½Ãèèm ààà¡P˜Õ©Æ¥Ò/+ðûýìEñxÜx*ŠÅ"™ˆ4¶·¿’ÅédÿÇb1ÌÎÎa~~Ž$Id÷F"–S¹ ¥H$’p»Ý z* Ï󬾳³Ã$ÙØ¡§§++«X\|…‰‰ûì ÎÝ ~¿>ß]Íð B†é˜ÍfZRçHÑ|S#@Ôú¼h±óŒ¡—ê¸ÕpY¨ìr]G»Œ9Žû¼úvù^;€d·~aWúÓßÃÒÛ×{íèÇ‘M:>¶U+ÛÉɉM–»¢ÈÄkWÉ89ÈsäÁ?ÄËf³™ºØÑÑQ¶pÉjå$‡ÝQ><<üY,–~ÿòèÆþƒ_IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-case-uppercase_48px.png000077500000000000000000000032161321676412500250170ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d#IDAThCíZmL“WÖj7-¥R'ƒ!(b5TƒR³D\Ðl1g¢ˆ†-¦ãÇĹLºD] Ž‚ˆE£˜ðå–¨å#AP㢶†IÂ7ȇ >ë9íu]÷vj­-Éú$O^îyÏ=ïyî½çÞ÷%d‹]IIk×ÇÇŸRk4yÄŀꨨ¼èØØ_¿LHøÑ’¦}Dj4µuuèéíEÛƒ‚ ôö÷ãóZÒ´¹¿ÿ¾¦Û·1±J«m¶¤i$ öÆ îÐÝÝ^ÓL¸“===æ|–FG¿ Ðoš:w²¯¯#££œG€;è Ô•ô êJzHu%=¤‚º’ïM¦ûô®BWjKù ZûK‘îIÅy/(è³gÏØG`ddÄ®?ñMAqzz{^ qº‘üË—/qèÐ!>|™™™ìOoâÁÖþ„ºú:¤¦¦"';Y¿dAŸ¥‡^¯ç¿Ož<‰óçÏ£¥¥…} ƒƒƒÜ×éÈF¸xñ"LîðWù󵡱í¶}„ÿ©Ó§ØO â«e24 *++¹ÏÀÀ€sP°¡¡!¾‡À³:sæÎAÒÎ$¶ ?чÖ7áBù(g*±0r!ÊËÊa4ÑÒÜ‚«•Wq¶ð,ö|·Á!Á˜4^>^¦/±6îG98M€Íû÷ïóˆmùj xfÎFWWß—PVV_¥/û¶¶¶²ÍçÎCPp Ý÷Ã>¶Q§ ¤ˆ]ŠŽ—s›’òUøâàO¹mO€B©`ßkUרF_|t¿³³“Û£#£_Î’¿Nf›SèoJ„">õ6oÞŒ™þ31Á|nS ’®ÿ-€|ÆÇǹMk_å¯Âd¯É¨üÝ\N[BBÀÑÌ£<ú)))Ü&Ð:Vø) ÷•£°°m}½ÿàëç‹€Ù0Œl³FÅo}(ãØ©ß§²êžûÎ(ÈóçÏÙÁ¹{÷.·Å,¬X±³f!fM ·i?§~ÖHàÒeK±mû6$“ŒÄ‰\GêÅj¨f©°3i'šn7±ÿøØ8÷uŠ‘Dqi1'O;öjZ„ܼ\Nj¡¦¶†mÔßV@ôªhÌ ›¥¿ÓåÓáíåÍ1ƒCƒ‘——‡¶6óîC ä‰£ï"€GÀ4šíZ-?¬¡Á¼çÛbIÔž…„„n üS€BÎÛäÖ;l# ö¢ª¦ ;’vpl"‰ìê4ïhÔ_<ß!DB}}=¦É¦aõšÕ¸wïn5ÝBuM5jkjQ]]Ž'Ð}«ãå@õ`0¸Ÿ˜!®Ë6*fH,?zFHhf(f rQ$ÛÆÆÆ0ì¨RO§!aëÖ­<º´ß›Ü$)û@†eŸ.cŸ½{÷r?ë®W]gÝ£"‘´ G~>‚OB0eÚ”——³mÈÑl‰Ñëø³r¹œ÷hZ§ÇsCŸ£GvNö+feg¡°¨ëâÖ!t^(Ÿªâ‰@¤Î1Ëâ,¸|é2‚>âzÉÏÏg›8ýšBzz:ðîÝ»¹ý_¨¨¨àBöSúqa XÏ€u Ø‚°°ð0øLñÁ•+WØæð¿_¼xÁ×ðùáðöñFcc#·iäHœ-Å´H½¡a¡X¾r9· ÖïB¥¥¥xôðëÑÜÜŒK—/¡ ¿€‹?pN ¦Ê¦B«Õr?*`‡k€°?m?>­m‚ØßÅgM²Ò˜gŒ˜{Ü< ¯ÞFMû½¸'EÚ¹Æás€Öï±cÇ ÓéPSmÞ9ì%Ož´?AFFÒÒÒpâÄ ¶ÑC…M‚è; ;ÛT;&Ò÷]‹ŠŠPRR‚öövö'PmPL‡Ï± ˆ÷s©ä…kØn—¯ƒø˜ñžš> FÂ6Y{}D?Aj[׌-­ý­c9åeÎ]ô êJzHu%=¤‚º’ÿoÝ–ÃŤî­ßF'êO V¾ÉO "Ôêܼ‰§OŸÂ`4Âøø±{iÊ^ð(Ÿõ6¼þÇÛwíúl}|üuTT>S£q;#MyDÇÆžþbÓ¦4KšLšôåéß±ðgtIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-direction-default_16px.png000066400000000000000000000010111321676412500255000ustar00rootroot00000000000000‰PNG  IHDRóÿatIMEÜ&îÚ» pHYs ð ðB¬4˜gAMA± üa˜IDATxÚcd‚Þþ®U¿ÿe °²²®.., s:ºZÿ“ º{;þƒô² ›úçÏ ÿcø÷ÁÑ >Ã^^>¸`š3ròÎ]8Ï`¨oÀpþâE#C† Ý]pƒŠÿþALØÇRçäáÉpdßn¨KþÁ-@Lè.xóæ Cqq Ø0N°æŠŠ †ÏŸ¿À½ƒÓ€Ë—/3¤¦¦2ìß¿¬ƒƒlˆ¿sç.~”•—2|üøAPP¬äA >H$¿k÷Üa ÀÏÏð“ó4<€p²ƒC]h°³±1°²°à6 ®®añ’E /_¾€zì ÄÅ%bcâ$%Åq ¤¤È“ tæN°œÐ0°µµcpsugàââÀDŒt²-,4ÌæÇÂ?†À€”Ä…×¢µëÖ2ýÙݦÒmƒ7ëeû è^À¥@rCBA ‰Q±©ÕÔ‚ÒB|¹RchÂ(>BodM$¡`êV·íÔ9³»ÓýéßE'99sÎ|ûõ›sÆtìí—Þ꺾 #¢(¾{ø`-Éœíâf{T£´»ÝFÌ ýkFƒÍ4Îzæ<~gmø±XŒc9€ƒ0¨ØXÛGàPúé3øòí+[¿ÈfÙÑÜÆK ­›°µ‘·‘€ÞÀvP4QAX(=Q`À’$9@Ýà.ÆNòϳ|oqi‰­O>¼wÝteíwKaײPØâ>2G¶„±Ri§ËE¾¸¨B&“rùÿ­OCÓÇX.—M«¬þTa}=§ßOAŽÊ½)(ÓÛô1†9˜[½¼ìŒlßÀÙÙe™™$ 0emXqÌÅ3§Ÿ¤a‚–R”2ŠÚ›[¾ÇÜÕ•UOwÑàñ£5˜ššæŒq0M)!,†9©û+\÷¾ b%$—“ ( ß·êת’™™Y¸=9I}2¸AÜ­:MÙ¥0þ®á ÎòìÛ ö÷àèø*• v^í²¼D<wçù=ÝI¡Ä/la~‘ÅO>3Þ!ÚÒÎGiHqž½3çyBS÷RÜÇ.Šq¯7Àûdz÷ú^ÞøøuÕ`À‚ ”^ïÍÐçó}f3þ$ñ rC‰žÿ:kõz¸¡ëáf³nµÈ!-jík´^#ØÙôà?j5¿ßö'Ô‚BP£—¬EÆ"5UU«WW¿ÿþŒc~Tž%™IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-direction-default_48px.png000077500000000000000000000025431321676412500255230ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨døIDAThCíZíK[W÷Kq hkƒó¥¶Ô1$ºÜh5©˜èV‡ÓJŵ(è H™¢"È`„m_ü(”}(Œ±áÿ Ø*:‹_4F©±Ð}‘Ä¢E‰ï/Ñúò,¿Ç¶e7¹±ô,–ùƒ¹9ç9ÏóüÎË=ç^nB8Z<¨¬®­ýŤ(Á‚s@“ÙüØæpü\ïÞ·¡4##_Q¾÷xhm}|óó炯h}s“¾¨«{J32Rôúo¼/^ÐyÄ­ŠŠÙPš‘ãn77X]]¥õàHÄ“kkk´··ÇùXl¶³ €ƒÍàÐÅ“Øßç|¤ @³RÍa+UÀöö6æXØÐÎÎŽª¿pJÇHâððmÏŠ££#®5RcccdÌ0’í–l6m–••QNN9ÛÜ>nPLLLÐ¥.QñÍb²Y˜ŠE¡B¥ ¨ð“B2+f.SŠ*)-¡Ëi—éá×¹½Ö4•.`tt”‚Í(;7›²²³(3;“®æ^婨¬ »ÃN7ònPfV&×ç^Ïeûû÷¹}܈)äõz©áËêèè vg;ÿº¾sQÉÍQèìì¤îînr:ÔÑÙAôèÇGÜ>nSH0Êíå<}2>Ì•ü±Ü‰¤ @ØaÇQX,žûzƒž|~—ag‡ ìÑN«÷Aé‰^ŠŠŠX€!Ý@þy?—½¿ jN£ñ½€@ –a§æCÒˆ„NNNøx°»»ËmÕÀÀù)VRÀùÖÖÛú|>àk@MÎ>333| àŽ¤%DŠ8Ep$lJ½½½¡u€Éd¢¶¶¶Ð?âˆ&BŠÑë€Ë墔” 5@SSÛÚívš››ã2L½hõNÀ!0<21O¡ææfJLLäµ€“¬U‹#Eœb°ÝÊÊ O‡žžþDŸŸO555t||Ìÿ±oDJ”6 ,l=_j0Mù@›hɃR€»7oÞðÚˆ¶‹»l,¾AéÄ. ¨ ¨æCÿ™Á‹Óh/¨9Æ÷NÀ D ž‰!À7NŸ‰á<Ò«ÅRk)¿•0¦ikû¯Ãßß¡æ3œÒˆä———éÉÓ'äžtÓ„{‚<“òûýT^^Îoëò>Ê£‘ázùûKwsýÈo#ôÜûœch‚4¨°³›‘N¯c^Ñ]á7p–b 9*dµYéÚõk”¦O£4]O)Ø×××sûXFYª€ééi>‰Þ®ºM•ŸV2ñJÉãWPÔU}^Å‚ð†ˆ»€Á§§# Oןö²`°·ÿÁPYº1ýtâ<pÌkàe¢©©)>ÌivÏFŸ‘wÖË1àGÍ¿ 4 ñ¶PóN©@€ÝÚúéý=Vjõ¼ t²ùÿ°ÚöãI=ðÄ,à¼~j`åSƒM¦&ƒ·:œ*iñõëø2˜ÃÒÒçS}çŽöÇ_µ¶~V][Ûg2›b*JÜ™ÌÃæpüz·¡ÁJ3„„„?"jñûˆc¦IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-direction-ltr_16px.png000066400000000000000000000007271321676412500246720ustar00rootroot00000000000000‰PNG  IHDRóÿatIMEÜ Ù<Ž pHYs  ÒÝ~ügAMA± üafIDATxÚcd‚Þþ®U¿ÿe °²²®.., s:ºZÿ“ º{;þƒô² ›úçÏŸ@À”gÒ @š‘á?É‚h›‡‡®Å€´¬¦sÎ3ê0œ¿x‘ÁÈЀar_/Šf 0}òÄÿ ›Ý=Ø‹a3Œ ˜90gsrp h(++gøøñ#†f `~æà`G±yÿþý ©©© 7oÞÂïX€A\ðŸÁÍÍÁÝÝAPPè‚ eå¥ Û¶oÇ0gsr²ƒÙ@È€•…·0gs]b¯X¾,š™•Á ..ÁÇ   €Ï0/°Ãý ¢mmíÜ\Ý^Ä0/@\À7$"<g4¢°bå2†G1h¨«3t÷v1ÈÉÉ3„‡âÔŒa@xXŠÍØ^ðòò1Q eÍž¾N’²3##Ój )0û)•@IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-direction-ltr_22px.png000066400000000000000000000013151321676412500246610ustar00rootroot00000000000000‰PNG  IHDRÄ´l;tIMEÜÝw † pHYs  ÒÝ~ügAMA± üa\IDATxÚ­”ÍNSAÇÏ´{›Ò–!Áe›tQ£¾€©&К°Ð7â˜Ф)1¤„~ìe¥ ¤‰a¡éBS ÌýgÎp?k{‰0Éܹsçœßüçœ3—€hÕ·Œ±{pMÓ´wÍÞÇÉJ}™_T[][á’™ðïfpnƒmÛbä8:ïò;GŽs|󲌌º¬˜|¨\ó·€b ªTçàË·¯hü´VCóù¥g’×®^å…'>¸PäÁÒHÓ5Ð(Eàóz]}Ó(‚u]ï å—ƒòdÉÝ,œ“Š’IÝ-³É‰2:ì|ÚF·¤¸Òý “'‹·ŠâÖÙ8ÇUÜg—»46|ðó Õ=:JŒ¥LÓLY–¶mKt>$þ#qZ*ODïÄb1ÙÿÄãñN‚&º"áÝL:Ói·Û¿ÿXI:;çý¢úIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-direction-ltr_48px.png000077500000000000000000000025611321676412500247000ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dIDAThCíZ]H[g– »”5ÍÔ5®KœQq'11º&qþΖµ¥·–bËdþ\L‡s»VPVÙZo¼sÁ ­à•PBÕÞ9˜Š{§&*Æø÷î<¯9ãì4YwðÚG>Ïû½ßû½Ïù~Î9IP¢þþ}Oumm¿`·÷–8 `³õ9]®ßnݽû]0ÍðȱÛx>;K[ÛÛô×ÊJ\pum¶}>ª¹ys5˜fx$éõß.¼|Iñˆ"·{1˜fx@Àó™n°¹¹IÛâHhÉ­­-Úßßç|òœÎØ €O:-éõzÉpÀù¨"c¥2F,D{Õìíí‘ßïç!–ðG;yœX¨Š²ï§ã£c¶ÇŠããcržÑPEJ ÿI?é?ÐSII 9Έ„ü{zz¸}¨)‰ªÀN Ð¥ÄKt½ð:ÙóìdwØÉ–g#«ÍJ«…¬¹V¾†õðK|/‘ýôˆÛ#Ž2ÁHTuz{{It!Sº‰Ò>J#CšŒéF*þ¼˜Ü7—F“‘í¨‡ü;;;¹½f#€ ÀØØݾu›š››©±±‘ZZZ¨­­ù¾ÛùùÔÞÞN-Í-\?øs{ÄQ&‰ª ØÙÙa[(` §M8 ½fäÁ`Ã\y«4gšy deeQÀ`»äÿó$.QUr"ðÉÉ ˆÁ3³2É’k¡ììl: ò¶ù’–ó€PAÁ·Z^-¢]Ôq%6,züH‹]é'g\ @< »»›Z[[ùöPþ f¤¶ð“( |ÂO臿æk Ü”‚íÂÀ8F(LMMQJJ*&²X¬´¸xö {ttôFŸš|>/ÕÕÝ£††ñ•¢‰ššÀo¨£ã{ª¯@G>ÕÔ|I‚`!î õõýÂíe?+ààLì:žRS?¤ôôOÈdJgâ®çæÚ¨¢¢’ÊË+¨ªªš<ž2žRµ»»Ëßò~4àõú(99… eНf³™222DŸ,*(øŒJK]œ|YY9]½j ÂÂ"šžž¦ÓÓS!ïç§Щø‡5ðúõo“ðxúôwqTÌTTTLIIïó[«yòR?.»ÐÎŽï¦ðFGGϾ+Ä)522Â6@«ìGh 9‘ ÐÕÕÅëCºÆÃ õáúÑD@¨„`&''ùÐ €-”¯DÔÅ,ÔK{þ%Æu‘——bá;Ê`°a÷1ñÔ”¾‰! p§ßĤÜ×%ä|šÃ§‚ -oBžT,TE‚ËËË|64;;KÓ3Ó´°°@/æ_ðyPž#ËùÅy¶¡~ããã´´´ÄíÏ3ª@ àCDt¡”ÔÒ]ÑÑeýeºöñ5NÜåvq‰kØQ?øãð h´TE€ôÄŸ :ª¬ª$O™‡‰#Ew™›J]¥\âZªƒŸ>YO~ÌíG™`$ª;=ÿ^$J%ƒöF ]ã@`ue•žM<£¹¹9žß‘¿‰‰ ZúSã5  · EyR±P5R0Øbåyî¼DUhÁ·[ÀfðU@Kbëŵ€xý©Aa4?5È„ÿ·?À®­¯Óú«WÚRÌaccƒó©¾q#ò=êê뿨®­l¶_™v»æÌópº\_ݹÓL3ˆ„„¿g)ÞkšBS¡IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-direction-rtl_16px.png000066400000000000000000000007261321676412500246710ustar00rootroot00000000000000‰PNG  IHDRóÿatIMEÜ @5Á4 pHYs  ÒÝ~ügAMA± üaeIDATxÚcd‚Þþ®U¿ÿe °²²®.., s:ºZÿ“ º{;þƒô² ›úçÏŸ@À”gÒ @š‘á?É‚h›‡‡®Ålšs ‹οÀ`¨¯Ïpþâ#C†¹3§c7›Í“ûzÀâ.^> ‡÷š Àšß½{ÇPRRŠâlN ÍØ\ÀxõêU†ºº:†À5ƒ âà`‡»§7md˜5k&ÃÏ?ÜÜÜÀâ;vì ά,, üü ?9a(ää$žžž ÊÊ* ‹—,bxùòÃôi3àš8 .@wJ ‚¨¨¨0ädç2ØÚÚ¡ØÈ Xxà1¢@DD˜!*2 ®æX¬àô²½jÍ*†G2h¨«3ôMèe“•cHINÃÐé P¬c5€——ÀÈȈj(köôu’”™VƒhBœo‰h“ÂIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-direction-rtl_22px.png000066400000000000000000000013321321676412500246600ustar00rootroot00000000000000‰PNG  IHDRÄ´l;tIMEÜ/ugÑã pHYs  ÒÝ~ügAMA± üaiIDATxÚ­”MoÓ@†ÇIlG¡qR8¦!àLÔC ‚"øq! DEB‘´q©ø¼ÓPU‰?ˆžÊ^h *MlbÇ^vÇõwìH´+­Çc¯¿žwÖбòT~£iÚe8‚!ÂÛjåÖL› rTC~²H3å}›®ë@ˆ ¦iÒH0Úçì:ÁGæxæ‰lNNwX /ø0PvÏ;|Šã óõøüå+ÇÁƒÚ=àèú…Fƒ¦œ,NCmþv48N©(ŠÔÁ––H¢à|A¤â¨Ï¯Ý½CA"®+_¸Èøðq}sEé…º#»P²¼|[/ TœL¹Àó ª}T0Ï‚îï÷¡^¿íöÆHÓ,#cJÁ »Ý_ 7›°õ} ¤œåÙ²óL«õL-«±6ouõ5ììüI’Fì+ ÀÔ2×üÐØRܬV¡8]„UëL=»ï”‚ªöBc»Â^X¹Qwkk°¹ù {ÌbD(-…:¦îÂKssÏçin8JÝRX`?t¬b×é3§O… h烎5Ïm;+½oµàÇö6 x˼ç¯^ÒÀA¡P€™R)Nñh( éƒ-Í pnö<*Þh·°íÒi1Þ¼((‹¥³%zn÷®×®]½Ž¹ah¡ÆŒ,…¿•lsLß5BôÐot$Øû£þŸaïFÌó|ûÙ‹•™CQ]ø'Œì05UHåOäsÝÝnFQÕŒ®i™áp˜1 sÂ4 :É1úÉÒ¯åéƒ:{‰D‚Í~2™ì¥ø”BU²Ù^§Óù½·÷çï?À2å ŽIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-direction-rtl_48px.png000077500000000000000000000025051321676412500246760ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dÚIDAThCíZMH\W–]¢c D­Ž:6:ę̂'©ÎŒI£ÖhT’n¤\¥ˆ?‹jKB+ÚàBP0RÚºrá.%«[!± qÌJ‘¢hpáÂÿ¿qüùú¾“ya"NÕRæ½Ò|ðñæÝ{ιç›óÞ½÷½™°ã¨¹ß]TRò“Ùjí!Óu@³ÅÒãp:,¿{÷[šÁ‘jµ~÷|l +««øsvVœ›ŸÇêú:ŠKKçüiLJC“çÕ+è×\®IšÁAÏGGÅayy«J%´äÊÊ vvv$›Ãq> °®”NK®­­a×ë•|B.€ƒŸ—'ÅÐDÀÖÖvww¥üg%íé'äd@%‘ƒƒ‰q^ìï!@¢££QQQÈË˃Ãá8•´‹ŒŠD__Ÿø«c‡\g ¢½½á„Þk‡Õf…5Ë ‹Í‚ŒÌ ¤g¤#Ã’!çlg?í.„_@ß/o0ãiVGA ‡cbbcp%æ ŒF#®z.·KŽñÆxig?íhÿ¤ç‰økVH  ¢¼ ¨­­Ecc#š¿iFVv–|Û<677K;ûiW^^Ž¡ß‡ÄŸqÔx!°±±!þ'ÁbµÀœn–c0Ð_3$%éÏk™ôù|ðîxa2™äH6%ë$ÆvÕ†öjâ±B.à8™ÄÁáö¼{HII‘Ù”b‚oÏ'Óíñ¤ù^ÀIAÏKÝ `pr{{ûÄ~•ºÀÀ\ò‰ÍÍM¹!ƒ%¢+ ÈãèèHlz{{Q]]-Ÿƒ Ö#U´µµÉêùàÁWrN{Õ† ôÑ\€Rv™ÄÒÒ nàҥˈCww·´ƒPÕLƒìííIÛ³g¿!..‰‰I(**†Ýž‹{÷¾@KK êêêP__ïg***19é?n“5 n ªªªä’Éͽ†ââÏqóægÂììOŸ€„ã[‰b;66&¾¾}Ÿ¶ fffPVV†ˆƒ²ÏGaaÜî©ÂÕ«©JUŒ “‘”ô†J8ŒŒŒˆ¯¦P©¢³³S ›- ©©ixüøi_Y ¼‰×±¸¸øöqQÓ{@ Äé“ß$áñL 3Ó"ßrkk«´Ê1Lžqtµn—ív;JKËä3²ÿ$êj%fPö©xúôWYØ‚%¢;*ÙÏ-ÁªœdCêVÉþ.R×ÎÂ÷´Àé¯>ïr%öîúŸ‰3ÿÏÄÁ––&o%ÒÌiþ–wq|6 ¹HLMMÉ;î…^Œ¾ÀKÏKLLL ;'¶,›yîñx¤Ÿvƒƒƒ˜›SThø^ˆ>DÓ×M²JG_ŽFDd.."î£8äääÀérŠž³ý´£}gW§ø«c‡\¯e‚û%C´· oÁ]àò•¢«À…|g¾y®öÑŽBúûûÅŸqO7ˆ0(äñ8ýíjºººÄ_³ p@bzzÃÃ×ëû4Ònhx³³³ïÜÈ! òŸBóYH%¦ÿy˜¼Gÿÿß–ýË»–ätª¾<³½þÕ ÷,5øØlþþeJãïµó XxýZ[*9ðåó)º}ûô?{|YSs£¨¤¤Ïl±ô ­VÍ™ªäáp:¾SYùП¦aaιÝKö&óìIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-indent-less_16px.png000066400000000000000000000006641321676412500243400ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDììëƒGƒ• pHYs  šœtIMEÕ  . €‡¿AIDAT8Ë•“ÍNÂP…¿kèqn,I+ u¥>޾ƒ!Ä#n,¥1ò§hŒñ%ä¡,ð’…òS¨aV÷ÎÜsæÌÏ5½÷î÷d2¹d ³,«w[» Ý}Ö¶öÒk ·È:ÿ¦2 A$@"ŸßMâ¹UÀç×GФr]ÅdF˱AµrgVür4!D|•,ÚκIBá ¤Õi&`Š”M ÅÃ်ïMHHQ¢lm Iæáš­&vÉÆ>,Q²mŽON7(¬€Iº¿pÞTÂÏ0œËNSüOPvË~°vóf;€2š( ×=¢ák¤´;ÕD×uð½ÁS€ÚýC²H÷²Æ! Žãà=ÖçSœ‚•¥ PØ[ žŸ]à׊Åâ’ß³L`YVÿõ­³Õw6f§ðvjÈgûÉ:qIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-indent-less_22px.png000066400000000000000000000012531321676412500243300ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ  ) g?’8IDAT8Ë­UOoA}³°øªAXu!±ÇO g#¶¨‰1ѬE/¬6ÄÆÆ†¢ñèÝÄï³p°Sƒ-E˜çaþ°KaíÙ–™áÍ{ï÷fFÀáǃ¯Óéô6Ðr¹Ü·çÏ^Ütß¿ã¦ÚÁ‡. _íb2„ùEPÔHPT#€Ô#$@ÕW._³X `Úë­”¹ÓlÔ  ZϾÇ[XÍ!·žjFP@öÏ †1-ö}-° !ô?õR ôðAÓ`+‹hX­–ZfkçÉ‚P‚z†1‰ø³Ü²Ë”Äç/ýõLcÅJ.žb)AìÚ")£a„†_·}q¿mb–H8I`1 *1FÃŽfJ2VDÍ^ù”b…–hâ ÃNRĭDäÒ¬v2 ßvìØ£Ý& …<σWóP­UáU=ÔjUT*7Òãf* “ +UéoiíIÝ ªPa¦Ÿ4D" ¼Jñ~oÚ¯ÿ‹Oò™iÀj‚ï×Ñ~Õ^ kùq±¡Ósl2I¯ûØ ö°ßÝô{Ç1fæ¤S^K^vVÏdÔ÷o#‚…ôøÇ(ÄŠƒâòÎãB¬T}þ-Á˰j’§™!!Ó¬ØÚº¾Ò×J¥z¥kI‘v]÷ûQïðî&î vpAg00ÎîŒWlIDATxÚí\KL[þÊLC_ÌÔ¨ÁD×FšH6¾]²¸PÑ…1D£ 1º×øH°\€Ñˆï .À„… $"K(FtS$©)-–zÇI{Ë<ÎL§¹|›“sæÌ™ÿ|ßþÿÌéXCJaPêpölCÙ3ùùùù7îߟjƒÿx<Ïììààƒíín÷šºyóöíëׯA%Þ”øeÕ  ƒ@ŠÝ+@èŽÔM&“Él¦¿_µÿwÄ[W‹5 E°^Bè.@OOOOoo2)Gaaaá¦M@eeeee¥úû•Ž®­­ ÕÓãBwœN§³®.±dé ­§mJwèEpÚ† Tç!æ 9@ ¡Z…ëG‹U»hC„Z!ä„ÑbçªÉz'QµB¤ÉF²V;>-VM¨­­­ýçŸÿ“‚Ó>¥ zífhNë¤WÐÓ•ˆÑ;ÆËO‹´[‰z1J„§ÇãùVMˆEAAAA~>PQQQQQiWK°–ûÔ íV€^I¤§§e’Ê©|1J¤§K̓úÒ¿Ò0Ú#€èR¬ŸÏçóù|À‹/_>.MŒØx4IZʹûbÇM‹ ÷‹Ñ·oß¿ÏÍÍÍ--ÍÍ€Ýn·ó¼ôÄõ %4žž!(Q¡äÓ§ÉÉÉIÀår»;:¿ßï÷û#HyªV!h Ö;i QÛÅ¡¡¡¡¡!àÉ“§O?–—————Õ£ÕÓµ ª é´Â„Ãáp8 ôõ={Ö× ¾{70 ÿ|Zb‚âõ|]ˆ6œÖà@ ·»«Ëå&&&&>~T~¾ßï÷/.SSSSŸ?¯$2#ƒaX0YÖhX–e`–eY€eÉu–%u†®gd0L¤]¸/ÑB$=y½óóóóÀýûmmÍÍÀìììì—/ôÏ›››ûú¸w¯¥åîÝH»Á`0 Ïó<Ï<Ïq¤äy»ày’;ìv¡ÎópÇ‘:éÏq¤=+ËfËÊRGxRCÚÝŒÇãñÌÌ­­mm­­ÀÂÂÂÂê Ž±öËmW•ˆOÉi¨ÚÝÌøø‡cc@WWwwW°´´´´´”LÊ¥ ».—cäæ©º† hƒúûß¾íï^¿~óæÕ+ý’–ž Ù>Çö“#>¥!( …B! ·÷Ñ£ž`xxddx8YT*Û+e<žž’ÓP)Ïw»;;].rÆÇMküótµÄ'õ,HÌs~ÿŽ;zôøq ''''77¹dJÙ©f÷"5¯èëj6´Ðt'f°Ãáp8ÀÕ«W®\»'pµö‹Gëéz¾h^RZ­V«Õ 46^¸ÐØ”•íÜYV–b¥Q“Di=]é9´Ð$Í1/Ã7ÎS§êëOŸ:xððáÄ/g/ AZ<]ãhÝBœç @uuUUu5PWW[ëtF^ùS­ž.æpI?ŠP A±æÄX^¾kWy99V^·èî~ø°³3rܬŽã8޶lÙ¼yëÖH»pa2™L™™€ÙL~*d2™ÍK¤Ýb±X,r=3ÈÌ$ý,³Ùlw Ú]OZœ†Ò SZZRRZ 45]¼xéÐÑárµ·^¯×ëõJ??;;;;;¨©9q¢¦&þí¢žÛQ-ˆ+ÉmÓ¤–xì„ssss ©©±ñòeòm†èo5KÛßvQÉq¤vGrã'- ‹,E°œ0Ñýl6«ÕfÎkh8ؾ}Û¶;hmÒ'‰Š &5/­„ë"€O—&š£ÑhdYàäI§³¾Ø»wÏž}û”í"\‹§+­$=Ï´r@f¦¸Ú?¨Pò$á:I©@UÕ‘#UUä ;'•&‚f|±v±yéG4Ã2öÃÕ˜L¤ÌÊ"¥Í&6A¹‰* £•a÷TRR\\T$?>-¡RITÿSÛõëIéó‘òçOR†ÃÈøŠ„Xù›oÁS…¼¼¼¼ R÷|møüõ‹”Â'"ÀÂa¡”F#)fffzÚã¹uëÎ7vïNõTþLOOOÏ̼Oj‹‹¤ø …~ ÿ–"!¬AI6fåuƒâ¿¯¬.1]pàPˆ”‚§Ç/ô‹à_e¾ ¶|«H%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:45-07:00¡|£V2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­Ö{tEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/format-indent-less-2.svg°‰^IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-indent-more_16px.png000066400000000000000000000006631321676412500243330ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDììëƒGƒ• pHYs  šœtIMEÕ  æŒ^ @IDAT8Ë•“áJA…¿ ÷‡éº>‚½IÔz… ¢ ?¦ë‰Y½D>T«’ë#$œ~¬®-«+†™{Ï™s¹w Àà­ÿµX,ÎØŽã oëwçôúÚσžrÿUçóßÔKB`…Häó‡q<—eóãó=uwyq•8oÄÉñ)år!dW~”È;ØF–D·×%(ò-»C@Ò*¯Ýb< @B²Q|S ³ÙŒ øfþ0 CÂp'y¾‡×jãVª˜ì´Þ’yø6ãÉ« ‹Öõn@çÁg<g8PÜùh6š¸7£Z:PÚC³ÑJ‘¥R‰b±@­v„¬c¸©_Gäû&îrØÝF‹0Xkcr¥\ÇXÛ ÅDÐkùTÝjʶ1&)à8Îðåõi¯ïlÌÁà‰"ÇPI¤5IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-indent-more_22px.png000066400000000000000000000012721321676412500243250ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÕ  …mŠùGIDAT8Ë­UÍnÓ@œuâB¢H¥“½–'á àT‘ÒPñ#!ÔüÜ««Jy¸#ñ>8QbÒ*rÓ4$;ì]Ûù1—näC¼«ùæ›™o-àèÝá×Édò×°2™Ì·×¯êöA›×µßÚ€t´ÚÕx õ ü@‚’ ¿È`‡è¿+nj¬°¥†)OŽ—¶þ¤ZóK1þ>Ì(;Ÿ,vkÏ@†  ©k+€ TðA5oœœ~J4­ºµ½X* "dtñtgRÑgXTéL&0JmO¬ÍÓ/Ÿ—2}¼UÕÅWkL 2<¨$ÝÙ®ÁqÜ­T|Ô£3WЈc4Ô@ûí}8Îψ‰J’«UµnJw†¶;m8]'ÔXï3Ù¼áðƒ®ÿ¸®ë»ðô¹Î›Z­*VE…t!nsŒ‘Aåuù²mÝnR¤\¸Æz|¥å’ðkð½^/’÷óô.io~5êMX–õõÀÄ$Üf½Ë*Ç.©„»‚X/®£x»ˆÍû›zÂÔýñüå‹´lÍ‘Hš¼H„‰"6ö‘ö•p‹­¥5¦¾‹£ºDs¯Ž²eÅÌRÉ$Ækk·Í*K‰ûBˆ8°išßß8zpß vpAg00ÎîŒWiIDATxÚí\ËOSM=}¥µ¦Ä&ˆ‰°Ñt#²DVÕŠD1€HJ‹ˆ…ÿ ‘§1‰qeâ4Љ`LÜðØ`À]ÁP Ò°-´ôûãäÖö¾{Û öl¦3Ìû»çüzæÑ œB%ÔáÞ½û÷ÛÛ''‹‹‹‹OŸ®¬ÌuÀ++++ß¿øðìÙÀÀóçW®È¨««§§£ã¿<$‚ò&įVª »»»»‘HŽÓë/¡›© ƒÑ(þzÉüëH&<¹.yÀE°RB:‡†27¾Ëår55Âi[þE°e>óZúx‡N€æææf·[|!+á"8oA2¡Áy â@¦æ€ššššëדÉd2™˜ö¼e ”h¾wŒœqÔ"Ün·ÛåJmç«3¯Å÷ã«KÁ [K_,œB£áááá—/•»ŸÃáp8€Õjµž8ñ[”LÏÔý™×ÿ€É=p:N§“›(¾qû±Õ“ãá_,þ:2µ1’âñ|ý”Ê|Šœ  4Á######™‹·¾¾¾¾®îXB哸ã80$öì$]+illl¼uKº•ˆ_©3 u¦ ›é‰%_¿±±×¯GGÉ's{{©D±GÇá‚+1BpMÒ9 ]‚ùˆ€™™ÙÙ™ §§¯¯« @ ssÅÁu]ÖšéBóeVâx^¯×ëõ««««««ÂBÈ!˜-¾ë²"€’™.U˜Dlnnnnn’ootv _¿.,¤o%R„á‹Oqädz:ÄVgC$‰D"ÀÓ§ýýÀÔÔôôÇÜs‚aøB.ñ’WAl%F£Ñ(‹Åb±SgÚ÷÷IûÞiÿ³_,FÊý}Ò/yüX,Ÿã‹Çãñxxõjlltðù|>Ÿ¨¯¯«»yP«Õj•*UP6"Ù„W*óe ÈÎÎÎÎö6à÷ûýÁ  ƒ~?à÷“É2ü~fòLnƒÁ­-`kkk+”ÿ`ÓÓŸ>MMëë?~¬¯wïÞ¹ãñF£Ñh0H'˜ð¬Z+¡u¶RnÀr±´´´´¸ôõ=zÔÓllllüüÉ¿\"žË2³"@ò¹¼•‹h>!2)ÌښϷ¶ôööõuw3«))Ï·j˸‰ŠÝàðÊf™£ŸÁö6±Ê'Oúû?æææççæ¤eº‰£¨‰ 0WĺXzñxÿ~ròÝ;g<Ο@\«*)PÜ‚„ú%þ=—Äs=×›7oßNLããããLüöoµBµ M¾1[;—0üc+M«t””””””v»Ýn·§>W¼r—£²–¡b<Ÿ¯ß'W(+;¾¬ hjr:].@§Óé´ZaËÌÉF,1 .‚ùVG._v8*+«W«ªªªH[òF-“û€´vÂ|$eœlB£ÑhÔj²3nh.\(///——é‚خËñtçÛÒrûvK pöì™36›´LO'Ḡ¸iµZ­NG¾Cyä9{Q«½Þ`0€ãÇÍf³…Âa«…B¡_¿€p˜¦…áP$B×ÂáTBæææçggÉ2»»ÂñX,€Çãñ´·'Or'´ñâ#<ëÄV7™L&£‘dý­”˜C-±ý––¾}[\€üªhmmiikÌf³ùèÑT¢ÒÉt%æ6Å-(]‚ÓäJKÏ+-\®¦&·›Y͈?ݹ@*2² ’C°”LdÃÅ‹vû¥KÀµkÕÕÕÕ€J¥R©TòÆ›éJÌeŠ[WÀb¯C@V3 P[{ãFm-PQQQQQÁ?>W|Ù$<èõb@,Á\íR,È`Ðëõz ¡¡µÕãl6›Íf“6>¡™;«ÒhH¹¿Ÿü—$ R;FJ:m¥>€ÜÌO‡hk#«‹Åb±XJ¦Óu×ö6)wvHÿ@ýûPŽf<"õ7ßV«Õjµ* x:•»ûËå3%%ýFS$ò[€xœ6R§#¥F³¼ìõ®¬|ùÒÝÝÛûða¢ËæÁ¯×ë]^þü™Ô莆òË, þ[ ‚¾¨’Ú¤w­«ÿûÊáõtšÀôë4Ó“‰§ýü^{ƒ@Â2¹%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:47-07:006ã²2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­Ö{tEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/format-indent-more-2.svgÁÕ”IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-center_16px.png000066400000000000000000000005121321676412500250560ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<ÜIDAT8¥S[ ‚@=“ZPÛKIIÝB-!¨,i ¦ø‘,„9}ȈSf#]˜û8¹0‚$Òkr¯ëÚňp§ÚnvHâpÚsl$—IÂî²>Ÿ#õétÖÞí÷fžƒà0\kùAøF.¾X–õŠ,»iyG ’fqi¹ô›£÷{ ò¼€”ò£þo$áû«eBJ9ì@ !:U€ v H¢,KmÐóܶ÷ÓI¸î²4ö•úÁ|¾x_IotŸhÍ×<§ÇQßYˆI/+äÉf`kÐIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-center_22px.png000066400000000000000000000007721321676412500250630ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆtEXtSoftwarewww.inkscape.org›î<ŒIDAT8­“ËjÂ@†Ï“XR¥¸³Ûú6- BQC}„Rè+¤W¤O`-Ú«BÉE]Kê%Õù»s1‰­†dæ›ïüÃ0zlßõÇ1i¥iÚëåÅUPëæûªÛû²¹Û|>û³)ÊfÜw%fnj @Dß÷Hp§ó¼ܲ¤7›ç± •¥7¤D:p2ˆ¡ RÓÆašæn`Ëj,=[än`!ÄÆd&æ œ`7ßDðzêv_bB 2 ƒ¼¬ýÿ|à`Ûõz-¢õíc+XJé‚¢!Q™{&÷zýØ‚U©T(öæ­ Ãˆ°Þfë=…`÷ÔW ü ™9•IûmƒAlåò™ïÆK_ëÕj5¢mŽ#¥qøÔàTàB¡ÛzR1³¬ªê[ûéáô_TþNDĨT:QŠÇÅ£ÑÇHŸL§úãè‹ÅB_.eNÊeNJ2ÊÌsf¶…¶â;“ÉØŠªL4Mäsy{8~ŽÇ_³_·cP¢IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-center_48px.png000066400000000000000000000027051321676412500250710ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWYIDATxÚí\½Nó0 "H0Fb¢ïÁÍ*%"â9@üÌ1–¢²ä `Dâ5Òð ÑðS¾ÁXô $¾¾¹vâ’³\’¸®}Îõñu$:3S£TÌŠìïìíÝÞ6›ÍæÚÚÆFÙ6qÇwwçç——››èŽŽOO?kH‚ó&âw^V$I’ѨäôªÝß×–eYKKðÏK ðב&<}-‹Z²¦¢ "‚'¯ê@l¦âÏ €%¸¶ $¨®¼õz½ÞÕ•ªÞõ#‚`g§¶ ÒÀ‰Ï[1˜~• Ðív»»»ú Ý/bA“íò®e`ü ÐE°lÿP'U¦«3cPU.b6Ê‚L­†<Ïó<ýEpž`P³Ê€(Ó‹d>‡rDÕꃶš™ú*B¨êjJèTXôÝI›f‘LǾâP&@•FE­Då^@.@Áý~¿}Mýmôh·ÛíímX¦W‚ ™n Œ± Y+ét: (÷`µÑ^E)„´˜êE×Ë/ÊjFD0Õ 'Jh•ÊEŒÇ«B›a…PY.bÎ#\«‰ ƒ›ùUŽã8Ž“æâÿycú%· 3kYŠ—Ÿ¤49 ß÷}ßX…•PZÐäxEÄWÊ‚°CÚéÚD!„]ñJ-¨ ™žEp^¦ÿ6^Ñ8´ @A0¤]Õ3¢Eí‡a†!æÛiÑjµZ[[ðyþl£ù@u0ª"ŠfºöWE,Èu]×uÅ=A¼›éF[ ¡²å"žE(6Ó¡ýË@©A U½‰B•oÖ8dAþ6K°l»ÉçYPY ´ ”Y‰å"åJ‚B»•u0R½g`¡Å‚d>GEˆê•D‹‹ @ κ¯Ó"Š®$ ?>ÒORX‹++,./ÿ6Á¼‰V¡\„ª/ÓWWY|zbñù™ÅñøK€¹9yÆs!~þÏ·mÛ¶mSpÚÁù|{cñõ•ÅÑèK€ñ˜ß`qaÅFc8Œ¢8~x899;;:Z_/{*¦ Š¢h8¼¿gW//,r~“„·üZ ‚¯®ä|jåðëYᯯL¸§ó~g‘gzšxÞîÿ +SE%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:48-07:00À«Â–2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­Ö~tEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/format-justify-center-2.svgP‰u\IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-fill_16px.png000066400000000000000000000004751321676412500245340ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<ÏIDAT8¥“ë ‚@…Ϫ[`¯g5ó"è‚îô ¥ýÉL„=ý$5§¤]†ó9 «Hâ|9<Š¢£Gi­³Õr=Il÷ö­ÃiK’pÞ©yþüÉ}0Vg§9L’TGѼvo‚Àÿi‹N€mÛÿ®×›(ø!Ž…$«’°ìú¼wߟɀ0 :œË6Fˆ@–e5r*@(E¦`ŒAšÞÅžçÉL§“Úƒµc¸îHt¯B)Uh­³ãy×ë;+eeðz ±z8¼IýIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-fill_22px.png000066400000000000000000000007571321676412500245340ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆtEXtSoftwarewww.inkscape.org›î<IDAT8µ”ËNÂP†gN/˜ 1ìp+O£DD䌉¯`B¼†ø˜ †­‰ÄBR¹T8¿‹h+=4'iš3=ùæŸ&eôм}qç˜6¦i¾^œ_žj\_aSqs×Ò½Õ&“ql¥(‘ØZœuÅÝÈ@€ˆ¾ü/p«õ«@¥rª×ëgk!®JïC$åÅÑ€DDAø?YQ.—Õàjµ¢r©v©Ð›—j°¦i> LÌA8ÀänÖ{׊B¡@µZ5bëþoR*¬R..¯šºÜåV vû9–ùü¡Zq©T i=L-<]* Á+§îý0³¯°ûVz êt:±¬ÈåöUŠ%‹G¡­ÏÛö+¨X=õ 0˜§ÓéX6̃™ý`Ã0Þš÷¢.áïDD €²Ù==³›Ùé}ô¬áhd};Ž5N­ÙL&¥œ%¥Ä6 SÌ vpAg00ÎîŒWHIDATxÚí\ÍJ31U«8‚.\Ù÷p¯ © S˜bíRÄçPüY‹¸¬P¡>‚._c:¾‚‚ê·HCûÍä&¹™$ΜM̘I“sî=s3bçæJÅò"Xt~(œ+Òu#³gÐU.Êl¥­ j6›Í ( ÙšIj¯â,¨‚tŒTª§,HBuW3PBYgÍEn@ߘxhªDºì; mØt0RµÙ ÉU€¢UAF£±·g©¦ « »6fAén·Ûíýýß $?³ïËó`$c%³¦ãŒü=@¦zÉëåf5Ã+óQ€jS¹(é:…@³ Û«,‚³ÏÕ‚Òîõz½»;ñ¸Šz½^ßÝýŸ™yP-¨HP-?)Ð,( Ã0 ' 2i%˜Ä[/kœ6XÄÚ€ åbÖ8ž§óWuô*ȶHg¬éÆ,‹`È8Û#ÝÈAŒµà~¿ß¿¿—™ÍMÔjµÚÎŽú9`AôHd< ƒBé0ýAA0¹nËÁâÕqg†Q ’ñx(¡:ÊEO‡Î/凰éj†5߬uC,º^Ö:Dþ6T–`ÑqÓ¿g€e-Ðùe Í‚\,13 ŠÜ-ÈÔÁH÷3C¹XÈ}X„èÎ$,pX^†lJ0ëzž¡šIr¨THûýþMJÏ#íÚiWWgm0k£6”‹PBó‹ôõuÒ¾¾’öí´£ÑX€…ñ‰˜F<â÷ÿ|û¾ïû>öÿ:(ŸŸŸ¤ýø íp8`4¢H»´DÚJe0ˆ¢8~~>?¿¼<=ÝÜ4½WEQ4<=‘Þû;i)¿IBÇq¾-… A3*¹˜ÊÚŸç~ûÊßõtÀ__¤¥‘ž&žŽ›à0~ñ€D%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:47-07:006ã²2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­Ö|tEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/format-justify-fill-2.svg[ð³IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-left_16px.png000066400000000000000000000005041321676412500245310ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<ÖIDAT8•“ý ‚0Åï–+°çëË$_!‚!°OzûC!_0Qï鯅Í9õÀ`l÷üvîÆz<¯ï²,4BJ©ü°?. Å—Æêz€¼&µ(>ƒNŸNg¿¹gn&É«ÓE»ÖZ `+rIŽª¶hP :àtµ Í½€º®;RJ2üm@šfÄÌÖA°éO†ÛÖÉz0³;ªªÊˆ=iôÞsÌLišý¬×«Ü¿>µÆ 8¾?7¯Ä*!Ä?@)•ßçQßY™}ÑÒƒgŽÿÁIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-left_22px.png000066400000000000000000000007561321676412500245370ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆtEXtSoftwarewww.inkscape.org›î<€IDAT8µ“ËNÂ@†Ï™^0bØáVÞÆ !òÄÄW0!^C|LPÃÖÄGb! ƒ©\*ÌïhJÛAñ$Íd&íw¾ùgÊè¾uóìy^™vP¶m¿œ7.*€šW—ØU]ß6€ÌÕn“ɸצ(•ÚóçfÌ»Ú@€ˆÊzÜn?n®Õª x¸^?Ó´œ?RJ(¬$"‚Ò ¼M•JÙ·MW«§–mxMl†œó:œHʈ¢T*-`«¹G€(×g}ëêÉP,‘`õêlÊqs¾K©XãNçI+Še _$Öx™]Ø:ê6Èä_ Áþ©¼ø@5bf¥q0FƒºÝ®Ö¶ƒ‘’Á€¤bñ$fër ´…qü©‡AZàl6ƒN1³ ¶,ëµõpwü'j#"b”Ï™¹ÃÜAÿ½ï G#çÛóœétêÌf2-å,-%ö™Èbæ 3»BWñe†kZæÐ¶­a&q{½ÞÇ`ð9þ.`_ìx"ÏIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-left_48px.png000066400000000000000000000027001321676412500245360ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWVIDATxÚí\ËNë0 "H°ŒÄŠþ{ØfCDC)]"Äw€x¬bY¤"•O€%¿‘†_‰†Gï]«‘©“ñdüHÉÙŒÜÚŽ}Îød©›«aóEŽŽŽšÍfscckËö‚«‚$I’——ÇÇëë««››ímôDgg''ÿj(‚óVÄ i𦣑åôrŒîIÛó^Y€¿‘p±­ŠZ€È¦¢@‚"‚³­ú›ée…øó` ®- *‚³ ^¯×»½ÕE›=´ÛíöÞÞ¤][aˆçÌüdt»ÝîÁ’8”7Ñl¿iÄçµUPù@yÍöÃŽSEå ÊtÂ`öSt•‹‚´ Y©‚Z­VkwFpž`PT昂J¦—É|ëUî#UË«•qÞ¬¡º«(¡3aAÐw'6nše2ûˆC›:ŒL ߺUµ Ã0ÜÙÁeºTöÚ_=”`g,H¼p§ÓéìïÿÞ_¸lœÉ#HÕƒÉü2B( €©^t{<´vd_X%Ô¥r‘*Ó± ׫*‚ó7jAâ†ûý~ÿîN}®#‚ äfyÁÌOjA³]å'™EQE‘|&­„ºšX+V2 ’mÀT5£ã&Z”éVÞ†š¨f „–!¸l¦[³ *‚!ý\ÏtŠru˜¶àÁ`0¸¿ÇÌF ^µäC%LÑxJŸ×ª Jk‘wâ9@¼`†aN߈Í#ˆWc3Ý) Âx<”På"&Ó¡ó«€Ô‚lT3²ù¦­R·C×+[‡*È߆b Ví—ý^F•µ@çÇ@›U±\¤õgœÏÏO?>X~ù,.-±Øh ‡qœ$ÏÏçç——§§››¶·RÄq‡OO¬õþÎ"ç7My¿‚KáBð“À•\NoÏþûÊl{:Oà¯/y¦‹Äó~üzÉyKÊ»Î%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:47-07:006ã²2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­Ö|tEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/format-justify-left-2.svg ¼]IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-right_16px.png000066400000000000000000000005261321676412500247200ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<èIDAT8•“oŠÂ0Åß$­ îéúamã)Dð‚»þÁ;(.ê•Òy~è¶›–´µI˜ùͼ’8··<Ï¿0Bqß—‹Õ $±ùYs¬¶û I"ò©Ïçã­ê“ÉG}B—Ë/Š¢&Ïç®ñÒtÖYÝZ; hõ)¨²’eéð *ùVH‚$Œ1ïw`­­+©²œNg¨jê\Ö 粺rûôvP‰ˆ÷+€!Hí¨*Hüy.a×ë­a'I’áþO™àÿ#Ý€éô³=’ |‹P®æîð=jEÌ^ìx¾[%©½IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-right_22px.png000066400000000000000000000007721321676412500247200ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆtEXtSoftwarewww.inkscape.org›î<ŒIDAT8­”ÝJA†¿oÜ]cSÂ3;Í«)q¤MÉKˆ [¤_¤+0 =‚.Ƀ<ÃüÙtÞüÛÝÜiL?–ùžyßwf–Ðcí®éyÞ)í ,Ëj]^\¹€ª7רUÝÞW€ ÿnãñèßJP<¾·œеÚ@€ˆ~$¸^ÞhƒRéL\©œGBf*ýƒHJMÅj Q¾x“8ŠÅ¢>¸\.­µ½RèïK=0bæùŒ‰9 '˜f·g¼Èji4^T¦–•Ïç£Á¿mƒ\×°ŒEJERÊåâu§î…oƒòVø7›-­å89=Å…B!¤:J-|.5 ÁS÷ÿ ˜9×ì«ÌX­¨ÝnGF‘Í«K¥uÇÉžóVŠƒ§†ûàT*iU§V/u6Móµöôp²u#"b”ÉéÃôA÷½k†CûÛóìÉdbO§2!å4!%ö™Èdæ13÷…}!ÄW,ë¦1°,sL$ûNç£×ûý’=n\ߤIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-justify-right_48px.png000066400000000000000000000026571321676412500247340ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWDIDATxÚí\»NÃ0 "H0Fb¢ÿÁ*¨D)èˆßâ1#ÄXTʘF$~# ¿ Â`®(¡Ž_×vÜæ,Wn]÷úœë“› :5UÀ*¦Y÷÷ïîÊåryeemÍv® Žãøééþþòòââêj}]z¡““³³££¯‚ÞXüΊ ’$IÒï[.¯Ðý;ö<Ï[Xàÿ¼°“Ž4áé±(  Œ%D!,‚‡GÅ @€l¥« 1ñÈ\X$°vÆ‚ÚívûúZ÷·˜G³Ùlîîd Y'BÚhµZ­½=ó„Ð^W± áyYc8L,º>/œ«Òu#³gÐÕ.Êì´KWT¯×ëÛÛhAyœ$µGqHwEºoŒTº™±´ Buw3¼„ÒÎZŸÆà}vb㢩Ré²Ï€ÚÈÓ‘ª•Èž+ˆÜét:77ØYèG­V«mmåÀ‚0*ÝE@þÖ,ËJà©"ís¶­dÁ0ÏÊßdºS¿0»–ª•*/¡yjE*]§Ö-Èf»(CpáF-ˆ—àn·Û½½O,ï¨V«ÕÍÍ¿û–YÝ‚TÛ2W€µOT NÆF£±³cÖJ0-ˆ•/mž6D-(íbÖ<–§³Wí…ŒY­J§¬ZéÖ,‹`žyy¯t+7bº fÍ Ã0 C™¬qQ©T*îDûvaà{0.rº€•ŸÒ5ÀÆQAd¯“•‡ì<žk†s4*qSí¢Œ§ó®/­ÄK¨î‹(¡¢ùÒòúÓPY‚Eç ¿O#ËZx×—6 r±]Ä^]µ½WEQÔë=<Ñë+‰Ào’À<Ư¥€p@ÉÙÔÉñ4ó×WÆ àéPÀ$B¥§‰‡y¿ø«*câÆÔ%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T08:57:47-07:006ã²2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­Ö}tEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/format-justify-right-2.svgÆ0ÕóIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-bold_16px.png000066400000000000000000000015251321676412500240120ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<)PLTE#M‹#MŒ"NŠ#MŒ#M‹#NŒ!L&N‰#MŒ#MŒ#M‹#NŒ#MŒ#N‹%JŽ RŠ#M‹#MŒ!M‹#MŒ#MŒ#MŒ"LŒ#N#MŒ%P!M‰#MŒ#MŒ"N‰#MŒ#MŒ#M‹#MŒ#MŒ#NŒ#MŒ#MŒ#MŒ#MŒ#MŒ#NŒ#MŒ#MŒ#N‰#MŒ#NŒ#MŒ#MŒ#MŒ#MŒ#N‹#MŒ$MŒ$MŒ#MŒ#MŒ#MŒ#M‹$MŒ$MŒ#MŒ#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ!KŠ#N#MŒ#MŒ#MŒ$L#LŒ#M‹#MŒ#MŒ#MŒ#MŒ%P"M‹ K‰!L‹!I$KŽ"MŠ LˆK‡ L‰"L‹#MŒ#MŒÿÿÿò ƒ`tRNS „S'à¬lóì;l ’R6=ðß(ŽSRÒyHf98túΓ!ÓþnR™I2‘¬#0Ó+}bKGDb+¹< pHYs × ×B(›xtIMEຊ) ƒIDATÓc` 0ÊÈ2!ó™åäXX•”UØ|vU5u N„—¦–v‚Ž.7\€GOßÀÐȘÆç3153·H´ä€ ZYÛØÚÙ;8 ¹Â"NÎ.¢b®nîžâ  /o_?ÿ€À àI€ThXxDdTtLl\¼4±>CÁæ’+Ê%tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-bold_22px.png000066400000000000000000000021211321676412500240000ustar00rootroot00000000000000‰PNG  IHDRójœ gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<¿PLTEG–$NŠ#MŒ"M‹#N‹"C–#†‹#M‹#MŒ#N‹#MŒ!c|#M‹#M‹#NŒ$MŒ#M‹#MŒ#M#M‹#NŒ#MŒ$N#N‹#MŒ#M‹"N‹#MŒ#MŒ#OŒ#L‹#N‹G$OŒ#M‹"MŒ"NŒ$M‹$OŽ"OŠ#L‹#M‹#MŒ"M‹#MŒ#MŒ#N‹#MŒ#MŒ$M‹'R‡#M‹#MŒ#NŒ#M‹#MŒ#MŒ#MŒ%Oˆ#NŒ#NŒ#MŒ#MŒ#M‹#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#MŒ#NŒ#MŒ#MŒ#MŒ$NŒ#N‹#MŒ$MŒ$MŒ$MŒ#MŒ#MŒ#MŒ#M‹#M‹$MŒ$MŒ$MŒ#MŒ#MŒ#MŒ"O‹#MŒ#MŒ#M‹&M$MŒ%MŒ#MŒ#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#MŒ#MŒ#MŠMŽ#MŒ#MŒ#MŒ#MŒ$MŒ#L‹#M‹#M‹#MŒ#MŒ#MŒ#MŒ$M‹%Q#MŒ"M‹"M‹#M‹"L#LŽ#M‹"M‹"M‹"M‹"M‹#M‹$L‹#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒÿÿÿÊ$±‹tRNS ŽM2礈ç5#ÌþŠhÝØ$Ž•ýq\d@ìÇK&5Æ÷ZMª€£÷² ‹4ÇïEN¨ zÿ¦ <¼ËV(ˆèêÞm **& ()()%_"y8bKGD”gJ pHYs × ×B(›xtIMEຊ) ¾IDATÓc` &`dÒÒfÆfÑÑÕceCeçÐ704âDæ26é65ãæAæ5·°ì±²æCå°±µëµwDrtrvésuAu÷óôê÷öG•ðõó š"‰,,=1&V!*Ÿ˜”œ’:)-].*'Ÿ‘™¥À ¨”397O*ª’_PXT\¢ZZV^QYU]£V¯­«ohlÒhnimkïèìÒ¤j r'*s|_÷%tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-bold_48px.png000066400000000000000000000035761321676412500240270ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dIDAThCíXklUF#¢ñ@A Fý©&5Qc#–îîÌììl·° ;ïÝín·-j‹)ÐíÎk·Z å)Êä11%ñ‡‰? ÿ#š˜ ¦>@‰‘G ã93·eöQhéÒ6†/9™ïÞsÏ=gÎ9wfÝÄÿ uªþÂòæ>•r9V¾"ËÓ[uNê^Eh3”h‰¾wÈf›vÚ¡Ô.GXpË~ÛÏùÖêÌŸézÌ'˜çR/,Ö´ý‚å oÙ>¸¥wÙõªµšÐgB‚¯kÞ ‹ÎÛ±P$ø_(½Ó¦yã(¡ÏŠvž(ÁøŒP§P€nõŬ¯¼Ù¯X |¼ñS{J»“PGaô‰7Ü\0rŒ*\XѤ=E¨7¬Òõ4äýa .#/&. Çô~B++v¯ÄÓY±î8§Cöµê%ç;ÃeáÕUî³#ªö:¡¡­£c^@€”«À‹[4ÎíP—¬Ür|J:ÔÞlæ¶@Ìü–I\é<ñŠáX£T Î&Ô2ÀË}°Rùu`8$m~ŽPo8I…V±ŠºÊG Àšá5‹Ð*"¬t1¯Ò¶Çs~RÏïPi!ß_ÜyâlZî·ƒRîEB«ˆÆ„y@´†0Œ¼^ÀßèA?ožlU"s½úHg3wCøüìx€,ÀQžÜÅËøf3„¡Ž F2vân{ pæ &캤Yñª ÂqÓÏ&‹C‚Í+iB»*V§s‹ƒñþË¥m¶;ôP¢5H¨ÕÇñ€ºª¯¹jÃzßZs=´eR Ϩ˜™ ÄŒón‹]lv¨ÞRßí¼¨¬bJ~žŸ7þòvž£Êy *ꀣâµ$œ Ë9Î<0/ÖŠå²î4‚UEX1Vqž¾¿’r4äšâŒ{§CåõCDmõ­ÀÑ²Ž²Ús£‡¢yVIêó‰êÉ#Öôþã””?çô-e»÷hÔDå*^À¤g ž¨Ÿ<8ÑhªÔãWRêõJ鋌‚:°C…³Æ1¢~ò x:Oï7OˆwH¥>!?àóÔ =Ö ùÓµBa|ÂçOƒ~÷ñÖE7z7ÆíPÁãð4G–pý¨OÏ2rïeï7O4„ƒ]b$óp<Õ±@\·i¡¸nãB±mü"¯7ç‡d­?¹—zÖ™¿x¿yâï)Á:…Ï uÒ€Ê{„K—Iܬ D@½¢/!Ôñ£^2)÷ÐîÐ=x°’ÑGhU+ë•Ú”}Œ M¼CeDýc÷øg‘ ݃K^èåI³ª_•[6=DñÖYZ)#çjÌz'kŒ?a4¤Úøxó<ƒ}dá§6“Øë‡öTCÙg“É‚Ši‡qà8}®øxôÂ><®6êµ!§µ¹þ˜õ]]f¯ÍB̳‡ÁxŸ]¿î¤OK#´ª‚“sÑúÖ@Ï6GŸ+ývF(Ñw‰Ssoêø @‘Y,ø"j¶&¢v×D”lÍÊ”Y+§ºçJU±jÓþ;¢r÷Òr×2ÔW:AV*†/"u¼Dh71Ã0kÖeÂÝ3YPÞIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-italic_16px.png000066400000000000000000000014521321676412500243360ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<PLTE#L‹"NŒ%LŒ#L#NŒ#MŒ#MŠ#MŒ#N‹#MŒ#OŒ$MŒ#MŒ#NŒ#MŒ#M‹#MŒ$MŠ#M‹#M‹#M‹#MŒ$MŠ$MŒ!KŠ$MŠ%LE–&N‰#L‹#M‹#N‹#MŒ#MŒ#NŒ#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#OŒ#M‹#M‹#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#M‹#M‹#M‹"M‹#MŒ#MŒ#MŒ#M‹#M‹#M‹#M‹#MŒ#MŒ%M‹#MŒ#MŒ$MŒ#MŒ#MŒ#MŒ#MŒ%M‰%L%L%KŽ%LŽ$LŒ%LŽ&K%L&M‰ÿÿÿ”\®éYtRNSQi'ÍjkÏWSD¾G?NÉ5"Œk}Õ$a% MÉkD[ÊD–<x BžáCCbKGDYš²ô pHYs × ×B(›xtIMEຊ) zIDATÓc` 0ÊÉ+ 󙘕XX•UTÙøìjêš>§–¶Ž®œÏÍ£o`hdÌ à3153·°ä‡ñ¬¬mlíì!\!aG'gQW71q°€„»‡§—¤·¯Ÿ¿X@: 0(X&$4,10 ./0#N “ŒbKGD‚‹³ÿD pHYs × ×B(›xtIMEຊ) «IDATÓc` 6`TS×ÀeÒÔÒfÆfÑÑÕcÅeÓ704bGå06153çDå²°´²¶±åFåáµ³wptræCåpqut÷ðBöòöñõóA  ˆG–ˆŠŽ‘”Š‹OFÊÈ&&%ËÉ+¤¤¦¥+ÂE•22³²sróò ‹ŠK”aÂ*¥eå•UÕ5µuõ ªT"Å Âod&’%tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-italic_48px.png000066400000000000000000000035071321676412500243460ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dÜIDAThCíXyhUmQl¡¤þ¡‚è_VEA)R¥ ¥GšÍ;³»Éæh“윻›ÝìFémµÙcföH6I¤i,¢R¡ˆÖ"RAÄ*TÑVK)*U¤Ôƒ*¢íóûfÞ&›4•›f…þàcØ}ßÌ{ßï½ïzU7qÿpjj•vÌa—dÙO!:8̪=U©\ä±EµôÉÆ­‡ˆ·s?ñƆígÓ–C„Wsçøu+RÕÊ„KNû…è0qIYR'Y ûɪø/÷›Òñâ]Tµòprí‘…5ŠqZˆì#ur–0JnTêÔáCý᛫©zåÓmîø]üä ñÄ.`©ze¡1žXÂÊ™o„ðÞkØ/ ‚/0íÉWè+•¯šT}à°¸PN/Vï-1 K„޽¤¦Õ8qòãw*Ë‘ý‰ÜRF2Ïó¡ÝÎ⃄WÌs ß³Z?aè‘bµ©i3/7„¶ÜC_­ Š÷Å^eß"Íát#§š#žNô‰Œ½ ¬š‡é'õZz}uþѶªÕúÁfB&ú§˜_ã˜KÎnöÅGF À§Ù£˜ûåJ€ X;|ñRö‡‰(wÛ·Aïö‹‘1§vÆ!)ÖûåùFS{üNVÉ]ÄcìóÀ>#›ç¶EÛq¼AK<Œ JˆqŽìVÌÏìÌ7ÙJxâGÙ÷vŽAJŒÖ;›™jFΜG§¶w„ ö¡±[Ÿßu7U›´¶ÜËh¹ß9 ‹çÃ{°Îê‰øbªb£N6y"Åä»Yï&¢j¬¤*ó·’¶|]cì «Xõtx‚fô‹Ñý¶NÑÄèñª©ùËÈm¡—–sjþOÙ·#Ô>ëT¾»kU… gZ0ò”`;²”¤*7¼œÞ[÷E`väöõ¡äÓœÚ{u¢#³²u"Ÿˆ_cðœ£EI>Ài=pZ¯Ã>Vž’u*7 ûá…îeë7e/qAš‘©#ohÏ^j eª©Úƒ[±â(²gþ›”}Ä©ã+Ö¶æ?u륎 µÒÕæhêªvc „ðjÏߌÖã,¾Øo³¾„³+U™µÜ°w‚ _°ªµ‰ªÜpJê5oÌ) Pðì3퓟ýRˆZªË ]Z©™`熨ÊÜ£9œxÒ,ÀöÝ4ò\ïì—‚‘’Ï 'êä±ÒÚ¾SÈ~Ø“èZ@ÕæŒ’zS,9ûÿy&¢Â.«d.c9mwjÔ‘k¥Ì/àö¹ï‘5c¥;Ô‰Šž};ò˜_L÷¯xw¡èÈyèzÁÒOP•¹§ۂÉ=‘A"êÝ ž €;,Ú%EѲàÈÃÄ´4ª27hÖŒgÅ0ctRÏKÆûtxÊàåTÌ×…Éî‚‘‰S­^ª27`¥ôGsôìÂ9æ”ô^1Þæ¥ôÑ)‰œ:Ê+éÓøî˜˜‘÷aopœNU~íÝ5»!ÁèáLÌ(ØóölÅ) êbIÍ@æv¾¸±´X”hü:eùpòø‘…5íéO„’RØ‘¬ýÛöXДuÇ}Ãtd^ï#¾¨Q~GfiÃL[Â>«bÔ˜äÇFai-hÙòfä\w|+`|î\:ìñ:Æð±Ég$ržâHё״úèÔå[Ï4 ‘bÒ–:÷N6Þ­ dܰf$ëAø Á&ß®Jm0ªí#kš> ¤ê:ýìÐ¥7ÜåñYK0KLb~m×STeÆh e—»Ôü_,ƒÎŽ8yuÓÀÏÌÆK©ÚìÀiF«hlŽ£z!¹¥Ô:<+lô¼ºxusïvD¢»€”Wš‚ÉTmæØO.adó[¼)e¿A3fÍ>Éê–¾c¥×ïøÄ»$N7üTmæeS÷ÄñìSöÁÁÜRú. Ö6&öb JkÕÌS•™aS8^ ü®xA‹ìCÛx¥!l>FUÊÈà †Î1`:aGÚ§_žŒƒ ¤6]“dý`ßx— ¢f®Ä{!LbElŸP¬ Ñm;—Qµé!ر¬NÉüÄë%ìë…»ÊÊ>"Úy_lýŠu‘“ ‹W=¤QÝñ(U› ºÜŽgß%Y¶`Óÿ•ý"Éü oòp.$Ì"FI½šš~FöGŒû…«^8>x5Ž!#Ϧ9`¿V6Þòo}愊tÈnO›·†]0vS•©ccgò!_8ßáSRŠOO*þpîÑwM«Y™.êõÌãÍñ‚îÓöœ^x6„ózS$¹ŽªÜÄM”UUÿ¥2I!ô:{IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-strikethrough_16px.png000066400000000000000000000016221321676412500257720ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<MPLTE#NŠ#MŒ#MŒ#MŒ#M#N‹#M‹%QŠ&MŽ%MŠ PK‡)[š#MŒ#MŒ$P”#MŒ#MŒ R‹$LŒ#M‹#NŒO‡#M‹#NWs#M‹#N#M‹#M‹#NŠ#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#N‹#MŒ#MŒ#MŒ#M‹%QŠ$N‹#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#M‹#MŒ#M‹#M‹%MŠ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒK‡$N$N#NŒ#MŒ#MŒ#MŒ#MŒ#MŒ#NŒ$N$MŒ#MŒ#MŒ$M$M#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#M‹"O#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#NŒ#N#N#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#Nÿÿÿ­•ÙœntRNS  }?ç[r´¯ )>%{¸¶Õ¿³àæ·¸o *¤mbŸÞ4 T^#%5ÎrƒÉe§& wÜp UlX×bKGDn"Q pHYs × ×B(›xtIMEຊ) ŽIDATÓc`Àdåä‘ùL ŠJÌÈ,Ê*ª¬H|65u M-v‡C[GWOßÀÐÈØÄÔŒ(ÀenaiemckgïàèÄ àqvqus÷ðôòöñõã…èâó  å€ðÃÂ#„„E"£¢EÁ|±˜Ø¸xq‰„ĤäI°@jZz†”tfVvN® UF‚µ÷·%tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-strikethrough_22px.png000066400000000000000000000022701321676412500257670ustar00rootroot00000000000000‰PNG  IHDRójœ gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<òPLTE#M‹#NŠ#MŒ$MŒ#MŒ'IŒ$MŽ M†#M‹#M‹#N‹$L#MŒ"T‹#S‰#N‹%N‹$MŒ#LŠ$MŒ#MŒ"N‹$NŠ#MŒ#MŒ$M‹#MŒ$M$NŠ K‘#N"LŒ#MŒ#TŒ"O$K#MŠ#N#M‹#M‹#NŠ#MŒ#MŒ$MŒ#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#MŒ"MŠ#MŒ#MŒ#MŒ#MŒ#M‹#RŠ$N‹$N‹$N‹$N‹$N‹#M‹#NŒ#NŒ#MŒ#MŒ$N‹$N‹$N‹$N‹#NŠ%N‹#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ$MŒ#M‹#MŒ#M#M#NŒ#MŒ$NŒ#NŒ#NŒ#NŒ#MŒ#NŒ#M#M#MŒ$MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ"N‹,cx#MŒ#MŒ$L$L$L$M#MŒ#MŒ#NŒ#MŒ#M‹$M‹#MŒ#MŒ#MŒ$M#MŒ#MŒ!T‘"LŒ#MŒ#MŒ#M‹"O#MŒ#MŒ#MŒ#MŒ%L#M‰#MŒ#MŒ#MŒ#MŒ#NŒ#NŽ"O#NŒ#MŒ#MŒ#MŒ%L#MŠ#MŒ#MŒ#MŒ#MŒ#NŒ#Nÿÿÿ@CÑ´¥tRNS0ª~øY¸ö® _Ÿí: )¥Lb÷• ¦×ÔÔÛï×ÙúôÕÔÕÓQWpntÆŽpožü¹non*/Á‚tsŒñ¿yq),,*˜õOŸ<î¦n„ ¿ë;OÐ¥/<Äô°9'10"101!..‚bKGD¥.¹J/ pHYs × ×B(›xtIMEຊ) ØIDATÓc` 0ªkh2a 3kië°`ˆ²²éêé³s  s›p¡‰r󘚙[XòòÁEø­¬mlíìœ]\ÝÜ=<À‚^Þ>¾~þAÁ!¡aá‘B`aá¨è˜Ø¸ø„Ĥä”Ô´ôŒL¸A¢YÙ9¹yù…EbHŠ—”–•WTVU×H KÖÖÕK10H7465ËÀEeåZZÛäÚ;:»• ¢ÊÝ=½}ýTT'NšÊÔêp²Á/Úrb›íï,Rñulµ½þíiÍ­bjõ ^±,+o»•,ü.F7Øs““Ç=7…©Öz’‰ÛÁØ…H¿íVs¶GË3ÉÙn=¿m°ý y©×|áô,>² ->(èÜù¶-è¹S¯?ð:Ùâ#‡®þ tg”ì™æDË]¬Ký +jÝã ’_øðzj¬ŒÂ}`|¡Â‰¼-Å6ÛHv6ëV?ÂYÙßÂVD_k{ òõ|5±rp‡D•lgÝ꼚ðvÁȬ 9¸ØïžÉ©Ö)±´+ |¸×ö(Ö¯Z<}ë:þhëèšæÖ²çx£—¦M©}³ÍiÖØÆ+¤¿ò\à§vÊk˜M´s=À²T,g•³m¶A˜˜Ø&G¬YRlü>F¸Spà?¦ë|0sÐÛñ«Ï=B¹u¤žÀ¶p2q§G1O—kg@ˆ©ÖycYîA:Àx¢9b=Åk…K0¼>ªyˆ5Sj¦à‡]F´&¤ÃLeüÀs+äÆ8Ð0 ‹•?”ÑY3E@ëeQ_GSkÉtÔ­˜G˜Êøàø±ç§ÌkË}+E!Æaõ=œ–û»%Jf*âÑ}Søó!V¢Fj…Ë "ÉLíÖÃßb6ÌWûÁ Øz8•Ì'¬y¤`:é»*Œ±ºÂùñc¨‚nyévj< f"ˆ,fÍC ég=Ú:Xu #§&Ñö«zþä‰9ãÀPWÆ3w@ ³ì‚Ù Ô=´zØÌÒ“\:Ù´¾‘bHöœ0Â3áš-FÉ‹LíÖAÖ»g‹íó¤áʼnÓÍYó°Uk¹¯wl0Œ°ÈñZöÖ3TѰŠN…u²ê€3Yó°h'gpFá2g¦F°ƒž uëS»ù/Y}·KæBŽ“µùP¯íR³gé©LeDpšyˆ¦Ðò. CÝdË™ÇTn>¼zFÆ{.á¬~Ñ–´ôfÖ|]4EÓ­~¬Úeœ0òjæN¦RøµtBnïÝ#hé]¢–Ù%ê&oˆl¢vš®Oáu¶`¯Dì(é‰:ö©üÍÚ!hæ~çŽÀî ПR Å:'†¬w%5½óšþ8?ˆîÙ çhc´kõ½ÌÌ‘Á3‡›V¼G·WjßBª7¾Õ¡Ä.4€Æ²es¡>Ú^ÒQ ë8«ïì€#G>5ò›myé ç}Ùš‡˜™#ø<°|ܪúmî¹(B¯„Ϊ Nž‡6L…LàPŽ(ÐuH¥P…‡Œcâyàî B{iÎòÜ0‡( 8piT4jÝI9¶ö„ÐAQG!$ƒp)Ù¿<“C.¿"æA$ÍÚ;ñêæ> :Ÿ’8fΆPùRÒÈ6ï xÜ!QÍĻ޸Ÿ™ycˆFÖ<Ìó§ct&æ”ÜIO}ˆZzT"é™Xíß+ ‡B¨)b*lºÚCP³Pˆù DÄs—õ‘«CÇÄ8÷(ä0›®¶($HŽcüV:P*HNA­8}*Àq°À!C]3ŸfÓÖ £d&f7«¢8)®"†A5Ré:…äPT¬Ú3TA'9¼¬à V_iÀX¤2”ÐÜaWÐü®'™¸M]=(ól#?•™'ÎëùKMÑÌœ¹AëÉycì'¶æ§ó*9…iØ )-t*Ôo7FÉKlúê!éÄažt•ðÞ»É4r”5WÑÈd¯yv¿á÷>¦R=8 ažôÙÄ0c¬¹*àJó°â¸8¥„@ªjý^R†N¦¦º‚ä,2N>À[ÜZîâBuÕcL¥*8Oòä{¼Uî‚èƒOKÏgjc‡l˜> Eð;¯YŸ²æš@PÌn¼qvœÓÉ;Leì€CV~óÄñ_FÀ(kZ-ýífò$| )æqvœü6š;ƈhíLMã´ÜyÃÀO`Ž(Ú›0•š@„K=Ìsbð¾\:Ì[mŸ‘ö‘`TÔLÈÉýNø8Ï&d/k®)D=¿êêl„ôÈ~¦rãàÔôä9øO:—W÷…ÓÖ\S¢Ö3¼Þó/2]|$£ï¬@ÝŠuAÓ»aj£Ç‚Hw}Çë"/?\& &χª‰Éÿ§’“e»áƒK |6¿ö¾ ·´•Leôhí螈÷EäPJ“CI­)Ö DRÕ§µë 1š™¹0ÞÂùp^?|ào8¯0• L ö˜4é?T/)Jì‰Ü8IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-subscript_16px.png000066400000000000000000000017151321676412500251110ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<nPLTE$PŒ#OŒ$OŒW”$OŒ#OŒ#OŒ$Q"NŒ#OŒ#OŒ#OŒ#NŒ#OŒ#PŒ%O‹#OŒ#OŒ"O‹"NŒ#QŒ#OŒ#P"O#OŒ#OŒ#O"OFr#OŒ#OŒ"OŒ#NŒ$NŒ#NŒ#OŒ$PŒ"OO#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#O#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#PŒ%O‹#OŒ#OŒ#P$OŒ#OŒ#OŒ#OŒ#OŒ#OŒ"OŒ"NŒ#OŒ#OŒ#OŒ$NŒ#OŒ#OŒ#QŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#P#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ$QŽ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#NŒ#NŒ#OŒÿÿÿßìAaytRNS $zlã0…ȃKRcÍ uÐb7žZY½¶ nH&#KÚB*y³Ÿ&+ˆžÓRH2 J36_L"EFk1rbKGDy¡ÜÔÐ pHYs × ×B(›xtIMEຊ) IDATÓc`ÀUÕÔQ˜44µ˜‘ø,¬Ú:ºlHìzú†œ.#cS3n8ŸÇÜÂÒÊÚ†.ÀgkgïàèäÌå ¸¸º¹{xzy B„||ý„Eüƒ‚CBÃDÄÂ#"£Ä%¢cbãâ“$¤’SRÓ¤eÒ32³²esrå,Ÿ—_ €ÄW,,*.QBP.-+¯PÁð9—‘]Ú.0k%tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-subscript_22px.png000066400000000000000000000024651321676412500251110ustar00rootroot00000000000000‰PNG  IHDRójœ gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<7PLTE$OŒ!O%OŒ#OŒ#OŒ#M"OŒ#OŒ#OŒ$PŒ"NŒ$Q‹!KŽ#OŒ#OŒ%OŠ$NŒT#M#P‹"PŒ#OŒ#OŒ1b›.L„#OŒ#OŒ$N#OŒ#NŒ#O#O#NŒ#OŒN%PŒ#OŒ$PŒ"QŒ#O‹%PŠ E¦$P‹#OŒ0Ë#PŒ%OŽ$N#OŒ&LŽ SŠ!OŠ"OŽ&Nˆ"QŒ"PŒ!O"Q‹!LŒ(PŠ#OŒ!O$OŒ#OŒ#OŒ#OŒ#OŒ#OŒ"L!OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#O‹#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ$MŒ%BŠ#OŒ#OŒ#OŒ"QŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ$P$P#OŒ#OŒ#OŒ#OŒ&R‹%N#OŒ#OŒ#NŒ#OŒ#OŒ#O#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ;U#OŒ#OŒ#OŒ#PŒ#OŒ#OŒ#OŒ#OŒ#N‹#OŒ#OŒ#OŒ#OŒ#PŒ#QŽ#O#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#N‹#OŒ#OŒ#OŒ#OŒ#OŒ#QŽ$QŽ#OŒ#OŒ&LŽ#OŒ#OŒ#OŒ$OŒ#OŠ#OŒ#OŒ#NŒ#PŒ"QŒ!QŒ#OŒ#NŒ#NŒ#OŒ!PŽ"Q‹#NŒ#MŒ#NŒ"MŒÿÿÿ4“D†¼tRNS ¡FAð˜ŠèÞ)-—mövtbÏÉœ}÷U\|4é« §£{|‚Ùê7C•3,,$^õЉJÃÛ#8ª~ÿvdc/­ÍL "šóÕ\CFŽr21(001, =zP3$:.b1/ fˆƒa—Dþ~bKGD¼JÒâï pHYs × ×B(›xtIMEຊ) ùIDATÓc` 0ÚØÚ1a 3Û;8²` ³:9»¸²¡‹²»¹{xzq  szûøúùsq£Šòð‡„ò¡ ó‡…GDFE !‹ ‹ÄÄÆÅ'$&%‹" ‹¥¤¦¥gdfeçˆK D%¥róò ‹ŠKJˤÂ2啲 rUÕ5µòpQźú%e•ƦæÕÖ¶ö5 °zgWwO¯†¦V_ÿ„‰“&O™:mº6PXgÆÌY³çhhêÎ7ÁÂE‹õ–,ÕÇ ƒeËWbˆ¯\µÚ]ÔÔlÍÚuë7˜£ [lÜ´yËÖm–hÂVÛwìܵÛW$RWDüti=À%tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-subscript_48px.png000066400000000000000000000037771321676412500251300ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d”IDAThCíXml[Õ6 cšº ñƒ¥ë¤ý`ý1‰¨[Ñ4þŒFlß{mßë¸&ñ’øÞs?lÇŽK’&i“&±ï—ç úÝ2Q•Ä—Œû1 Hh“Øø1¶~ • ºž½çø×()-m“¸tdû¾ïñ9ï9ïÇóÞÀטù‘Õ_oöz-êÀøz’¹E͘áJ±üžSA­òI˜TOÉÔ'’9s<‘¸ Uš‚ê</>NÃÆ,ŒyþÙþð4B<Ušjÿô÷šZ4æhH«P¸þ)e¥¡nÿƒ®RñfTmNHš£Çû¦«°ù©ÆÁˆfvSÅpZQµ9!ªÞ£½{—¿•¾CàFþATm>¤z½¢>ýE˜Ôø†%bÀœi šš÷±µ}lNi.Èfu(^|Œ†Ô ­G¨D¼÷Rù»h±x`±0EåüËø1œÒ<ˆÜ¿é°Ùw¢Ù=ܹï0•-WÞ$sºUˤ¢fÃi̓d¦²‰ešºÏ×hX¯}A²þírÖÛ,eXL,¸Ñ tåt*ï´àÔæ@ĨTevÒªOY š÷:{^ƒ´Ù–ö?àio!zQË&|b3À*o «þ‡|“`sŸ¨ágQˆS[äF½û©@¼ß£xíÑnù[¢YpR§1C½öY"7úCâmfA"ÓÜÁ˜f:ÿÙšõ„*k Q«b'„ÓöS¨¯ ˆcºT¼¡-í¾ÉA€ŸçFÍD•µC~hô»aµò/–ãÙÇô57Ö܉óÝ(šÛKƒiÿ-0îzTYÄ,;ƒÜÎs?¸Ë0Isl=Š÷ìºkK—{N@7bî¢×n8›Pem jÞó±ÂAtÈñªûŠRzÝ}ɉ?³“_¸eÛ!H·~UVÝ…ò÷⟠3æÉÜ ˆ~Š— µc|€§Z4 žµÜ¿í,–¾…*« Åtõzî÷1ç €UN¦ÍáÛP¼R÷ìÆ_v>z¶áFPÜ"½{¨¢•ïC•Õ…Ðã¾…œÎÜGaî£ûO£hYP¸®µc¾ÁV¹ÁˆšUV[‹¥;E³ö9gžÿY ËzYAññ`j>+c¿À†hCMûÿì*yßA•ÕH¼‘8¤Ìºû0š\ùØÜ¾ë¢4¹»`ÿ ¬M}&°Œ…FÈp‹qÃmG••Çôdñ ïJœy‚û€„UoŠ/ AóŸgtbÁž½4ûw(^y(À0V¸X£#–ÛMY§› ޝ7¬ñ FæBcbC¦0Ò¢^QîÝÇ7†Áê‡@ªŸ¦òöê0ÔˆZbT€o€nqpÄ@…ÓsEu–e¨Öà躶÷‰'©L¼>^)yÛÍA­úQ¢ÿäý½tëö§Á{Ñk“+Em²xSHõþ’èŠE¨ô[‡ŽR¨9ËR‹¨:9ÜþðJûŸvX£ ×ZÆÐĺ˜å«²áèŠY"ɾ#I쟠øªAÖ{…i3kÔǔϔ“(n ªN#™GÎÆ·=F#Úd'>¾64F1çÿÝ)5FJøøÚ@g¯ÝÄï£$¸p„”×îUÌåBP’ÃÇXú~ ];ˆY^‚UkÁœ;­FîÀÇ×ȯ£7B§÷+žÁûL„دIªóº¤–ßhÏͽ)èe U›~*z˯´ÚÉöþ'xmH ¯£“³ Ÿ«›;?T€‡§—· Â8!_?ÿ€@a¸€HPpHhX¸(Œ/&+! Š‹OHLJNI•†ðedÓÒåä32³ÁJÙ9¹yÊ*ù…EŪ µ’Ò²rõŠÊªêšZUÂâ écsž%tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-superscript_22px.png000066400000000000000000000025261321676412500254540ustar00rootroot00000000000000‰PNG  IHDRójœ gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<IPLTE$PŽGy#OŒ"P#O E#PŒ!M‹#OŒ$OŒ"OŒ#PŒ#OŒ$OŒ!N‰#OŒ$O#OŠ$M‰#P#O‹)L‹#OŒ#OŒ"O‹$O`‡$NŒ#O$OŒ"PŒ#OŒ#NŒ$PŒ"QŒ#OŒ"O‹#OŒ#O!QŒ PŒ#OŒ#OŒN‘&OŠ QŠ$OŒ"OŒ&NŒ!OŒ'N‰!O#O‹ M“#OŒ$P!N‹#OŒ$Q#PŒ!UŠ$MŽ#O$Q W‰#OŒ#OŒ#OŒ#OŒ#N#OŒ#PŒ#OŒ#OŒ!M‹!M‹#OŒ#OŒ#PŒ#OŒ#OŒ%OŒ#PŒ#OŒ$K†!N‰#OŒ#OŒ$OŠ#OŒ#PŒ#PŒ#OŒ$MŠ)c™#OŒ#OŒ#OŒ$P‹#OŒ#OŒ#OŒ#OŒ&N#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ$OŒ#OŒ#OŒ%PŽ#OŒ#OŒ#OŒ"PŒ#OŒ#O#OŒ#OŒ#OŒ"O‹#OŒ#OŒ#OŒ$N#O#OŒ#OŒ#OŒ k—#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒRŒ#OŒ#OŒ#O%RŽ#PŒ!MŠ#NŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ#OŒ"OŒ#O#OŒ#OŒ#OŒ$NŒ"P#OŒ#OŒ#OŒ#OŒ#O#O#OŒ#OŒ#OŒ$NŒ"PŒ#OŒ#OŒ#OŒ#OŒ#Oÿÿÿëtk\ÂtRNS<”¥/4mzE^ T5"$.W_V…¡EWX9Óç0`Àô˜BÆÑKˆs÷^A(à´ 4¥$«ð@}·‰…ƒ¨÷“ % »Þ'gtgûu"¹C4ìÒ(Áz"mÁÈ‹)  õbKGDÂýo¾Ô pHYs × ×B(›xtIMEຊ) IDATÓc`@ŒLNÎ.®Ì, ¨€ÕÍÝÃÓ‹M˜ÃÛ‡Ó׋›ðøòbˆò‡„†ñ#‰„G EFEÇÄÆ #DEâ“D“SRÓÒ3ÄÂâ™YÙ9è†JJåæåHË  Ë—”–É¡ŠÊ+”WTVU×(*¡+×ÖÕ«4465«¢«µ´¶µwtvu«#‹jôôöõO˜8iò”©šHÂZӦϘ9köœ¹óæk#Dut,ÔÓg`0X´x‰¡LÔØdé²å¦f æ+V®Zma ¶Z³vÝú Ö 67mÞ²u›­DØ~ûŽ»v;0ØìÙ»oÿƒŽv ÔùÊIœlF–%tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-superscript_48px.png000066400000000000000000000041071321676412500254610ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dÜIDAThCíYil\W6TIK ùAI ª€ĪP$ Ò ²'3o™íÍdÆ/ó¶ÙÇ3väऎíYÞ2KflÇKbšVm!(B ?BC[ Q ¨©E@$Hâ\Îys;$NÛ3±Ÿtå™wÎõ{çÝïžó;mÿÇ ñƒ3ì¶§ð Orf[WTû½¼>ÀŠšÂ¨“/Û•q&OV-ÿÃ=þŒ¤ÝG]Ö6 €×:Ž }sÄ.ŽP·kà k67¬®^èŽû½Üz m±Iæ.\#ŒT\@‘ðÑ)üü›H³º[zúï²KÆ/=™' Ê¿Ø/ì`…˜iëˆml"÷~êÚ|R¡Óo˜‘q”iE‹J|ôñ†õG©»QýÚGmRñª+y’p‘ âJÍ7Žä >Cì½¥ÔµùàDã‡õL܈°‘û «àñª6AÝ-ôÆ Ø×cþlo¨r~oùÊžÞÒù½¡2|.ÿŽN¾â”Œ‡©ksŽ´Ûeó£ÂC+%b •þ.DôY»´€ld¾!Œ¼N³ð½oÌn¨æîÖõoÒG6£‡6 ¦Ä»%ºßC]𷬥„¾¯»hGø.š/$2¹{Ùø3©À`ÜÉ"Du;¶vÒ÷çÎÄ4 ƒx2H=‹×9Ù8í±²PŽC¶‘̧¬Ik5ÿ ®\©oÚ2Ù˜·§+ŸA›SÉÀº€oߢQ¤S¿ØÝ?úAkòZ§F„¾Ç­·ïLL‘‘êK¤­í]hKG+›íP™yàcܰ".%ßeM¾Ý¨ìIo´ÉÚo1Ï#ÿ Ï®ØÄj¶À+ú¤2Ðh”˜%œ¬?GÍ·Þ„ñe>1 Ù¦Lv§®0Áñ©Ù‚?Røª#6]—f*F)_ ÅôvêrûàPôqÌïøöqïꨞ%¤NŸúþ;!ÅþžB tpΞÎZšºÜ`>‡ ù:ªÓ.šÀí9²¯{²Ÿš¯«hE+P€l vm)|ªfsÆ!È(¥K¾%há å¿àPª 4’+dwpvž_R¡6¬lŒä¶¤áö€üø¡¿?zô³ #Þ´:4f6}z»ÕÅ@¶¸Ù&éâÂÐYAnèÀЦSó² úåE 56…Q{©r“3ÔeÃ+ë¬UA¡qA ±ˆ?œÿ"5/ ‚ªíwÆq?Õ³‘2£V¯úc£«ÄJúÓ.J>fµ¿¶¢à°ú2¢þžÈ5V3´›9ê²:ˆ§³÷ÚDý"ækL…î4È`Ù¼áAí­‚•´“‹iÄ㊄ôóýáÒÔeåp«¹`ãÄ ØÎàô<+V¯é{— ŸlìvF¡šcJµh d¶;^X=…ÊIús å‰û`‡¿öÂjµ‚]Ð 0¢ñZ½_®:\VÕ§©ËÊЕÊoc”òÌ>ð×úµeogí†}ïrá”qÅÁ¾›…ª¿)'µ•­;ÃZÆm¬A±Ëó¨$¢¾šWUßîŒÖ.…þeE¹tÙ› ÃO]–_Âø¯wì¿ôX»ûxGtä¦]×rá Þu(vµsPìü±ìløèjþ_G[Û¿Ÿ'ï`ÐiIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-underline_16px.png000066400000000000000000000016661321676412500250650ustar00rootroot00000000000000‰PNG  IHDR(-SgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<_PLTE#NŠ#MŒ#MŒ#MŒ#M#N‹#M‹#MŒ#MŒ"OŠ'J“#N#MŒ#MŒ#MŒ#M‹$O‘#MŒ#MŒ R‹$LŒ#M‹#NŒ!M‹#M‹#NT(HŒ#NŽ)IJ“(;œ)8ˆ#M‹#M‹#NŠ#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#N‹#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ$MŠ#MŒ#MŒ#N#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ$M$M#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#M‹"O#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#NŒ#O#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ)I#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ(;œ$M$MŒ$MŒ$MŒ#MŒÿÿÿ¨DÖ7ttRNS  }?ç[t·° +n?Ú=d8¯”œ_Q˜Ù%T_$&5ÎsƒÉc¦% uÚn 7:,"7:9~¾¿ÀÀÀ¿Âz'&'³F»lbKGDtßm¨m pHYs × ×B(›xtIMEຊ) šIDATÓc`À””U‘ùLªjêÌÈ,šZ¬H|6m]=}v„‡¡‘± 'œÏÅmjfnaiÅ൶±µ³wpäƒ ð;9»¸º¹{BøBž^ÞÂ"¢>¾~b`¾¸@`„dpHhX¸/-Ÿ˜$ KNIMKÏÈÌÊNËÉ• (äåB@Q±">'Ž@[n%tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-underline_22px.png000066400000000000000000000024121321676412500250500ustar00rootroot00000000000000‰PNG  IHDRójœ gAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<PLTE#M‹#NŠ#MŒ$MŒ#MŒ'IŒ$MŽ M†#M‹#M‹#N‹$L#MŒ"S‰#L#NŒ#M#MŒ"N‹7,ÿ#LŒ#MŒ#MŒ"N‹$NŠ#MŒ#MŒ$M‹#MŒ$M$NŠ K‘#N"LŒ#MŒ#TŒ"O$K#MŠ#N"OŽ$MŒ#M‰#N"OŒ#MŒ(I$MŒ"<¡#N#M‹#M‹#NŠ#MŒ#MŒ$MŒ#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#MŒ"MŠ#MŒ#MŒ#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ!QŠ#MŒ#MŒ!PŠ#M‹#MŒ#MŒ#MŒ"N‹#MŒ#MŒ#M‹#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ"N‹,cx#MŒ#MŒ$L$L$L$M#MŒ#MŒ#NŒ#MŒ#M‹$M‹#MŒ#MŒ#MŒ$M#MŒ#MŒ!T‘"LŒ#MŒ#MŒ#M‹"O#MŒ#MŒ#MŒ#MŒ%L#M‰#MŒ#MŒ#MŒ#MŒ#NŒ#NŽ"PŽ#NŒ#MŒ#MŒ$MŒ&M#M‰#MŒ#MŒ#MŒ#MŒ#NŒ#NŽ#NŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#MŒ#M‹&K#MŒ#MŒ#MŒ#MŒ#MŒ$MŒ#C˜$L$M$M$M$M#NÿÿÿlÀÈ´tRNS0ª~øY¸ö® ` í:š/GôG½Û#Jjùn0„vvñÂyq),,*˜õOŸ<î¦n„ ¿ë;OÐ¥/<Äô°9#-,,+-\xuuvxxxxvuuuw1£ÙÕÕ×W ä$³ÆbKGD´D jÝ pHYs × ×B(›xtIMEຊ) îIDATÓc` 0š˜š1a 3›[X²`ˆ²²YYÛ°s  sÚÚÙ;8r¡‰ró89»¸ºñò¡ ó»{xzyûø   úù‡¡ˆ ‡†…‹ˆFDF‰‰# KDÇÄÆÅ'$&%K"‰J¥¤¦¥gdfeçäJ# ËäåÈ20È—ÈÃEKËÊ•”+*«ªUT¡¢j5µuõ êMÍ-­míša­Î®îžÞ>mþ 'Mž2U,ª7múŒ™³fÏ™;oþ‚…‹/Yª6X¶|ÅJ8Xµz!XØhíºõà`ã¦ÍÆäE&‘Kb€Ã %tEXtdate:create2016-08-24T11:23:37-04:00àõ³œ%tEXtdate:modify2016-08-24T11:23:37-04:00‘¨ tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/format-text-underline_48px.png000066400000000000000000000037771321676412500250770ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d”IDAThCåYilTU® qI$jâòG£Qã5¨‰ÆHÜ ¥¾eæMWZ¡óÖY»º `Áé›÷Þ,e)C ÄšÚþñq‰¿5׸ ?\¢}žsߙ΂…™i'ñKN¦Ó{î½ç¼{–ᄅ«ºŸ¸¦;lÞÚN-í[K;b›ni™7kû'JíBï5/âTç[Qßê6«’¬+EòÓ~ÙæH­váלÕÁÞÝ`ô¨Ëi›™àßÁ½.§ÚÏ‘Zí‚×R¯zw¹>%Íž<ŠOS0àDäôY¾ŒTk¡˜u•Ou~çtxêh49PpBê›tƒQ{-©×DÍŠµôíöžx‰ñ‰Fo’zíŒ{Û/: åŠNàÿàdx%û›¤o¸†¦Ô:õ 7rzîO+Œµ $1~/žBKß·¡kx¦ÕxÃFãŠÉ»Åm‰˜›šäÌ,'Ð)pÀwïé~×uÝ3hêüctEÿ9Mªõ‘ÙÁàÃc®Ovo9·Yu¦üñ +88¡ú5ÎtCçð-4}þÑw– ñí`$†IÚ B"7kÎ+⌗øØírŠ“b“k¢foC£Ñxt¹UKÖãXgòJNËüŠ Œ‰Œ‘íncÈ:4šì_ĘOÈCÏ÷õ؇ù† „~*ö—½ÊÀy¤RÇËökÞÌxï²àD{Âݤ2hÓ­& c¼>¢jçi˜!¨šk¥ÞÉ Œ@ל¤2àûÙ tX>>Ù1·Õ0—Ó0C÷cæå0þ ˆ7X¢3dô_@jsˆïK8%ý3ò b»)d g’Ê Õ~)pÌ)»\ÉHúIeîÔGº[(¶gªjeiøðëV«TCmÆpˆW¬Ieî!*˜œ>`¯¹mºy ÿjÂ\!óöÂÌ= …`îjG”GÅ+è€ÛáóáhràlR9¼fï À]¡4Œ0¹¥°ÕC*s_h4Q`žè€ÍŠWí$ ÿ+‚Q§QŠ—–S ðæM‘ÊÜàƒ·o?«qMöò4Þ#l›ÝÕ†¹”TþPq8ÙùÊëè„Fœšù£=ºñZR«>üºyS£¼•^ çƒ\²ÿ„áS”ݼ׵‹§€TƒWÒC¤R}ˆ†¹1HüEê‡æ¥9ëhø¤h‹X÷Šá<Ì+V#NÀû?g’Zõ~`bA³’ú°À<‘]rZîÏî˜u©œëÆS‹{¬Cȇ¼S€‡€whrqë6R«ZCær!¶•MtóªËžxÅÌIÇ„~‡;…E*Õ¯¤Æ 1ŒL@32¬54<+¬Ž:×óÆ–? ·5\‡ˆl2hßÅ+†¡dæ‚&Åþšñtî¼¼žîD:äªÚ•tGRÍœb}ÇÛ˜Ì 1ºzBòÚ®òhUmλ´{›²åÌ´ÝÕ›û£c³1!¨¤§ k°uð4ádÕÙIÛU0Ï@IìÎl®æØi°¼øOñtKç³5`Mž½ü²¿O<²áBÚ²rˆól’í#J\¸¤c"Ï0ÒYÉÌoR'CÕ­Ê3T ˜g€ñþbåÀ „ž®HÀd½w§%7âdûÚ¶ràTëã1Þk“F;qúuø¾‡W­}‚vj"jÖ“~=µß§8¿zÕ 8€lÕ§¦qëRÚº|„ú¿Öoæé½6É~õâÞÖ²K\t^9þº9錅TÊÇÊØÖ^d›¸8:€ÕZÿ.. Í|àXð=0Ô·H¥<¸uugÜÞzÀ+Ÿ˜xX¯ó®¹TÊ^fšåô/Í…‹2T`¶@O~ÏP}ƒc7ÕÇÇÿB΃PÇüb]"µ˜TÊ&mð˜Shñ~yTN‚n'ƒÀ6KÇל W-zŠîË%a„½Ç~¯,†Š¼Ä§Ú ÐeYøÀâøBªE1ï"•Š çÑÌÅ>?±FÆœÀ·ÚPZ¡çHêðé3Ô¶¨½L€ÖÏ:(†O  ¥?4Ú*N¸5µ¿´Ë³0‚Â!èŽC*§QIåY…ÖA[ ”x5}Ò{ïé¢5bs ™:<ì'@¹†»Ççëâæ©ç[(a-iT²?@°`!1:î6„v»õí¹ª¼Wâ©%@U¼ý P0›[ ¯ë8>R›=sY³±å³zeôàJ9{ð¾5“ŸÞ)ìzÙuëªöï:i>š?„û­PsW(Ùƒ\lâ3Nɬ'•ÙCîš\`'‡=­¯^¸OëZ¸þዪi|NòA¶çSF×§Aúã=‹ÓO CÃÿ´_±JN¿ñ?Õ ;LVö¤§V†@೤Q¶+.«h?O`&ðwÈžâ#ù)NÉ™'F{tÓµ~¨õRPÞè7€”yžÅÔ¥í¡gà¶–z‡Ì<1‚Úc×!ï ìq%ÆÙç_ðòÎGžwEÕ|Ì<1Öë/´Ìf^MåE55V "(æ˜ÎMHº%3 uuÔ²­&ΚIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/generate-toc_16px.png000066400000000000000000000015051321676412500231750ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÐHäI pHYs  šœtIMEÜ  8غ¢öÒIDAT8Ë‘Ïk\UÇ¿çÜûÞ¼4*Ú4)̤C15T:Ñ4AZèB\ •b\ ¢¸’¶¡¶ÝëÖn¬ Å¿A\J¢Åˆ2‹šd:õ¥ch›Á7ÆdÞ¼÷îÓŤҒ ÞÍïá|øœsÿñšÍ›ÿݼxñ®ìÞÝ»»²••åWÖÖâ÷WWW¢f³ñhóÒ¥O?>7­.×ÇþlÝþìA>… –®]ÿ°ÝÞØHÓn¯ÝžyxV@½^û…©c—£’Æ@`½ŸÉ‹y’½çÃèxùsÅ k¸¼sý·_qW¾üš’$©jØÞÞö'Ž÷¥RÈ* äÉ'Jô8@_ ¥Ä{€+ÿ V{^U*cˆã˜t_„ç,D ^:Kñâ­‡-©_µ—§ñÚåSðÞ"Ï3?0É@ a2ƒ_?‰jí3 ¥4@£òÜ!XcÀ¬à¼fîßÀ{AHEžcöÌ2“™àEî†íˆ,-þbï¼gfyPa¨¡KŒjï Y_ÝõÁä‰iœº2ÃygE¤°Ö‘R&Ï0;?‡¿Zm(f€D ÖÃGaò€†wÞþk`Œ!¥LÑ¿A/K‚³B†P¤±øóU€sÖQ "¤µ†gÓ“ï¢qcò˜%ŽNÛ_½µð†™ýÎ –£(‚É|ðÍ<îÄ-AA¼Ca ¼³?„-iCpέuß M{b¡;í6†Gb¼rÌJ´IÄÁZ、Ý.Åõ[8<1ÁÁA÷w'éff¦zuvöÛ‘ý{Oæ½îÓÕjϦÊXD ›››hÜlÐòßQXï¯^ëÝÛèüX.—SZødãQÚíV’$™ÜÚÚÚ—õÒ‘N'yc}}½bŠŒ‡÷n -•JÑwÖºFaŠÖ¾á½œ?w>½xVØ,[ÒIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/generate-toc_22px.png000066400000000000000000000020441321676412500231710ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÐHäI pHYs  šœtIMEÜ *)e¨±IDAT8Ëå•»oU‡¿sfvvÇ»k{wÛ1$ä!d!:¡@B@0ÿP$QRÒ)HI$  &‰”" i(Dˆ +R Qˆl’•Ùu^ŽíÝ™{/Å®í¬Iaj¦º£¹sæ»ßùݹð¿¹ff¦¿žŸŸ›¾yóïƒ{.kƒ#G>ã¸yìØn\¿r|°<º8<<üÀ;ÁEœ¬âÄZ5•ϯ}ua°TÞ700P¨×£é8^Ý·wïÓÉ£…ýµÁÜÜÜéR¹òÚõk—Óvk9×_,0?Wýdq1jŒo÷?~êÐsr¼zº‘ ûh6W]!ŽÇ+ÑÊ/?ÿÔ˜üJõÔ©É—Ö §i|pø°¿w׈?5õ;IÒÆ÷¼pddd'À—Õooáx¸¾NÖéBe^yõÍ1GÀÑ£G¥‡ÈÔj5*¥A€·áL¤€PX»²9TU H[Mêõ:¥R©ÕSØ9‚ È`L "|X~{KM<»úÎ9D…v»Ýáô‘9ïg°Æ ¢[N‡ëR‰(©1ˆˆÛDl³¾ïcŒAD9×¾HT_ ó±Q!“Éáù>Ö‚L@6’$ Ö9TuíÝ´‡Ø9—õ}k-¢ªzkLXc1Öü›ØÙÎULš"Bº‰Øy¾ïamŠˆr0˜Ø’ŠÉ‡X³šƒs.é!¶Ö‰çyXkQ•-;¶ÖuÓãaRƒª&=ÄÆUõ°Æ®;¾{'Â÷=@D× qdÉfs¬¬,ƒs@DZs®ÕClŒUí8–^bÆ<Þ±ÛØdˆˆÙ¼AÄ÷<ÚÆ ž¿eÇßÜ9¿ÞànáÖ&ÇVÕS¬³¨þ‡[‹µ®»êU{ˆ­µ†}´ã¥Ò6ε/ÒˆnŒAˆ³)I’$ ÎYF·?Ƀû òùü:±ªönéf3Îf¥û÷Èdúi§ ݃¨‡uÞ[ÀËø8çh,Ö™­Þ¤Õ„*©¸xé’ž=sfebbb°¿R,d)æC^xñeÆÇŸ¡<4ÔùÇf ùfggˆ¢:W¯\æv­F'üquš_›bÇŽ*fffôõžjõýÅè£z-Ú?]íûóúù\_è®O°{Ï.šÍ&÷îÝeii•¨q‡å•Øù~ûV›Éúî=»¿ªTN®Ÿ 'Nœô ÅbØŒe l·ZCó óo-Ì/<_­Þê³&ÑÁòPkllìn¥R™Þöcæÿê@Ãó¼¥÷ß{7ø;4¼kF*íVIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/generate-toc_48px.png000077500000000000000000000053711321676412500232120ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d ŽIDAThCíZkL”Ù¶Ý6MêŸÍ›þZS“z©©u¬1YccQÃ" àpSTä6ãÌÃ讕·ëÑ¬ŠŠx´”ÊÍ€€ƒ€ˆ"‚wDÅ»€oßçÌwpf`\mc“}’7ß÷ï;ç¼Ïy/ç=c~‚““ÓØM›6U?~äää|vùòå¯?~¬{ðàÁžÞÞÞæ‡~«¼þxqþüù?²¢»^¿~}‡†àÙ³g;”ÏÞÑÑÆ¿DF¦EŽ;óK~ü¬««ó÷µµµ‰ýýýßµµµEutt|µ}ûöñæ¯ÇÍ›7#XñоÃpïÞ½3]]]QOž<Ù\UUÔØØ8Ž»ýÆÉ)Ø)&&3,22y¢y¤ V'Ç/YC ¬¦èèºx±¡‹'}ÚÝÝ­LcÆË—/o÷ôôä_»vMWTTô¥»]\¿~=TéJoÞ¼{`²ü¾ÿf^ÞÑ;*ÕÖ'Œã{ÿögeÈáˆÍüJý2::“z{(CÝ¿Ÿ‰\Tž†ãÅ‹/™à“éÂe(+ÔÔTO{þüùk|k©¼=b¾W¯Dö ˆ'?¿ô"¢1?S†¶FBB†Ë¢EjÊÌܪt#b¥7n›Siy«»”‰¾¾>zô¨gOPÐÚ)ʽ½Žâ½=…%äû§OŸ wïÞåñ‰6ÀÛ[C‹§7íÝúKehk¬[—êìêNññD(‡:;;©¡¡A´Y »¯Ö+qtvv< ÔUŒ7s£·w¨ŽGê/FÁPÄñ Ú€E‹"Èß?©>//È¿:»»ƒ@–è`I ©©I´½ ¨¤ÒÒvåitŒFÀÃCM¾¾ õ,³MÀ`HÿÚÍ-œÿ.:Hœuˆs¶h°âžžž< ¯ˆ?û¥ŸÜËçUÎHAAË¿±”%K–³³3………‰q!àí_ßÞnü…¢²5@Jhnnm[¶l’=(œZiëÖ­¢× 6pûvâM‹vîÜ)÷RvíÚE¼ûÒþýûŘ–ಶxyê[[Ólàp±EJÀܾ}[¹s ¶à^<= õW¯¦Ú#é∠˜Ì2€y_@:ß#{@*++Å@†’ Úƒcˆ¿ØÚj‡»ÐBK ôõÙbIŠILŽM{GMMPxo˜Àòñ1ÔwtØ! ×§/´´€9¯› Xî€$`i6!L áºG> 5of†‹iivÄÆ¦º:J`$Hw‚ÕpuŽXº4¶.==Ñ>³ m],³ÐP¤¸r9,„Kc¼lÿ¸ÂB\J‘–’‚¾’¤#üýuuååEŸ(*[C¯Ïpss‹ÕPdâĉ4aš:uê L›6¦OŸN3fÌ ™3gÒ¬Y³è‹/¾ï¦L™B“'O¦I“& žÇOsæÌQF6JßÞ»»š÷MÝÙ³§íHrsw ¤$kCk!àÎ;¿±â¸b2ªH®<‰«Tâ’XÜ#.Ø\½ŠÚJ ÆF–Â{@ZJÛ²øøŒ@ 66ÍÝLÀìB?6d`#õb GሠùùiMv ètÉ‹%€É…'–Yq ­ È,„車ö`‹îÍ` DŒL ..I!àxÅ7–ûVLîÕÕÕâÀwïK`T ÄÅe0õ;Y`´J?–,jÆ .Ø%“êá(Gðak!K:3p+ȶlÞ¼Y*Ì;vˆJ²mÛ6Q‰âš••%îQuZV­RÐÕèÁƒ•QÍ™@ì…ââÛ#9Œ€´€e-wá ƒ.\Èõ¹7ó Q©TBÐæëë+Ú|||ij——×0Á{'''Z¹r¥2²¶ ô \Ì](,œc/Ò=ÍAlMÀV5ê`½wÁÈ.Ô/Ž”nn‰µDé?WT¶Æºuà `“––Ñ6HønhQ‡Ý›J Gágçx&f›€Áá5”V°³Z“É,d©<–õQkkë`yÿ} ŸW_HµkÅ–  ´@{»õá\€bCS©$ÐÖÖöA À ŒBÀÕ6‰.–J@B’®$]$`5¸’£@~8×L |dìB*X 9ytr°Ê»`tÒ)¶ èt©L@mEÀVcUçÏŸOóæÍ#WWW+AjEŠåªP<Ë+Ú!...ƒ‚öÙ³gó!e©2²˜Ó¶œµ5D±¶ èõ©*77k°€­r:77WH^^žØˆ:$DÞ£}ïÞ½âzøða›räÈÚ½{7:uJŒ9šÞ Û¿2³ÞÆVÃÿ ÛúØš ÁÔv]H!ðÖr#³Ü‰±R¸¸ÊL$¯ÈF·nÝ b¹ºúàp#‹>æAðèh—^)ÔÕühÛ¼ bd(‚SbоBP"ïA¤R]]]âçX‰«,ÏÄ ‡=ÊËþ `v¡•ö ð‰l),™¹MtPUVVQAA;vŒ ©¼¼\²Üe±Â£¨««£’’¡<¬*£HÑ8Ÿ={–òóóéĉTTô/nk–‘@rw½À·¶ ÄÄÄÍåC3¥¤lâUéæUhäI«ÈdªáÃÉy*++ç‹DÐ}Z¸¾‡Kž;wN,ÌñãÇYé“|_HÅÅÅTQqŽjk«yÞjª¯¯f’|Önàðñ‰ªPÔ—âOBC ÁÁFNqø“Žž¾ùf3g›Œ4ÃÂŒE~~ú»žžkù(§%OO-çëu¤Õéûïw w2™Î³71©«‚PYY 9óOQ¹ÂÝÝ=‚@ii©°XEE…p?“©–¡…³Ûºr¥ž¢ŒÓêQ2³H­Nf…u\6ëXéµ<¯¦? ¶=,,ýhxxìrEMǰ~}ò§:qnTTJtpp‘åËãš¼¼¢û½¼ôì‹®ýµ´bE,}ýðÃ>V´˜­€­åÕïà:¨¹¹‘+Ó&{™W»Šã¨@,‚N—NþþZ¡¬‡ÇZqe埬Z•PžšÍó&&¦ÿiýú”_+*½rs³mœ¬Õ¦,‹ˆHݸjUâ¹€Ã=•JÏ“ƒT4~9£ˆˆDv½о}ûxuKiÏž\&¹AU©ÌÅ÷>>:vSCûêÕI'##Sõú g&ùseºÿ ââR~•+%„„¤ÀJí¾¾ú>oïv-+¬c7Ð11¯®áÉŠ©¦´­6=X£IøÒ`øîãú÷˜Û`øvzTTâ²5kÒ²ÃÃOk4F&ÅC­6~^U5×öqð'ü_b̘ÿ‘2|S;èIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-1_16px.png000066400000000000000000000007151321676412500223570ustar00rootroot00000000000000‰PNG  IHDRóÿa+tEXtCreation TimeSun 7 Oct 2012 13:03:23 -00000pž…tIMEÜ  9L<â„ pHYs  ÒÝ~ügAMA± üa%IDATxÚcìíïZõû÷ïP++ëêâ²0†Ž®Öÿä€îÞŽÿ ƒX`&þùó‡(Åÿþýƒ°AıAb@//Ü%p°i±ar±pCa€ ư Nb° If€È#¡kÆiBÄÿþýƒâÿ ï>|`ͪ`p˃» à 0€ì|˜íá9Õ(.Â낦‰³üS‹Žž¹wúŽ…,ø‡ß€ø`o†/_¿1ÌZ¾ê\T4@ZBL?}ñ®YˆÿÐÄþoÀß¿Áø$—ÀÅÒ+±ÇÂŽ…¡Qø—aËܨíÁrfv@c…w4"¢íJŠD—Cp…ˆŒŒŒ@Ù²§¯“äìÌÈÈ´D'7áo˜—¸IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-1_22px.png000066400000000000000000000010601321676412500223460ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÜ Å.í½IDAT8Ë­”;KA…ÏLv·ˆ -Œ‚þ;[ÁB ±²EQDQA°B‚ïF°ð¢…XˆXiiåÏH¡øˆ‰‰n6s-¢É>furaáÞeæ›Ã™{‡ÀævêL×õ8š¦ÏÏ-ŽÉujT¤6Šù´r¹ ¢ÚüæpÔõ¼ZG"‘Ë®n„¨\ÍÍ!ÛAÿA©&Èl™aV{äP;ܦè‹MnÏ÷¥68ïRÕ\æq}±Ó!/o9ŒL¯ lÖÕÅìîm|fÕ&À‡âã‹4bÓ+žZÆÝýƒÅÛë£m`sËôõö`mn¹|û§—åv1¾¬èìhƒa€ç×7W€¹ƒ ¯¼Äl`ò¿ „«Ã÷€x×í´€Á`à½PÖ§YŽÈ~`AôŠ|àNE}EÓÓû¿„C9òª««9†¿¯Bp¤w@ˆkmm¥ŠŠ ªø¶‚GwUn׈sŽÄÖ¶V®'F°¿¿ŸŒF#ÔÔÖÖî±fïXSS³ï"Ïøµ‘ë i ÐußçRˆÄ5âr žÈÃÆî(@½c½râ‘rïIŽ(ÈxJÑ–W (E?Ö:à®Q_Rnà­€%0à®Q_òÿm`V¶˜(E,h‡þG·¿þÔ Ã“ŸœONþÞÒÕÅ_F#v;Ù¥-®¢”4Œ±ž‚ÂÂ×ÿØã^iiN^ÿ[rZZS§SœI’ŽÌìì_¿¸yó‡L‚‚þ­·#nݼIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-2_16px.png000066400000000000000000000010371321676412500223560ustar00rootroot00000000000000‰PNG  IHDRóÿa+tEXtCreation TimeSun 7 Oct 2012 13:03:23 -00000pž…tIMEÜ  /¡óf” pHYs  ÒÝ~ügAMA± üawIDATxÚcìíïZõû÷ïP++ëêâ²0†Ž®Öÿä€îÞŽÿ ƒX`&þùó‡(Åÿþýƒ°AıAb@//Ü%p°i±ar±pCa€ ư Nb° If€È#¡kF7€…  »`ÿñ³ ›vd¸q„Cr˜ƒ«½5¦ `Y3ˆÞwì4Cun"CoMÃ'Ïzf/Åîhš8›Á?µ˜áè™K`ÃêóSøx€ì¿`y>nüÄ{3|ùúaÖòuÐ@üÏðâÕ[†Žé‹¸¹8Š’"ñ‡´„(˜~úâ5XóåwZ¦Ìg`dd`h)NcP•$ˆ¨1PÖ9•AQF‚¡*+žATHµDð÷ï_†ÿÿþ1Ü{ôŒ!¥¢.~bã"Lv,œ¿ [æö@ãÿ/æÙH逷 ÉõJŠD—Cp…ˆŒ …Ê–=}$ggFF¦Õ Ò*6$Ë*rMIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-2_22px.png000066400000000000000000000012441321676412500223530ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÜ Ø6>‰1IDAT8Ë­”KhQ†¿™<”4¡¡.lEKZÔ…à¢Tº0®»º°4º_Ô…H­¸v¡‘jH«!b¤X,‰ ŒDÄ•îtc7*ÄÁ 56&i23×EÈc23…8‡™ùîÏιÀô­P¼X,ŽÑ†p:‰É‰Ë¦nE»"žöúÓJ¥Bˆê•C]Ë˵×ë­²tàòX€6‚Ëy}˜€A­ ¢*¨)¸TÓÛcm„7(ÿèYÞ$¢¦6{€©jSkmxxÆÒ—e>ýÎæMvv÷õrjô0¾í=:°Ülîíã¯ØåÛA"r• 'Çx¿ô‰àÝYëŠ>Iòüõ[TMãü‰£Ü7‘ žöìô/ `¹±y•ðäÊÄi2kkDçªÊ+PUU‰>Z@Æ#Ö÷nÛŠ¢(üZý­kX¾°Nøþ<ï>|äÜñ# îµ2ǵ\–å†f –¿­pãÞ+?ÒŒaøÐnb,N…±¾xm€Kgø÷ „ÖzA¬€E ‹ŽÅ«ïŸF¯ÿA^ÎÝÑAggt›˜Œ…š\R¢ÕJ›o˜9¨ù}a°Â*tCŠ›Ý…À]][hWØGòvdz¸@I’$€þþ>{wOwgúgÚ•Ëç]¥bÑ¥(ŠKU5·¦©nMBh!pH’´.IRV–å¬,Ëm6[Öî°çœNGÎãödS©Ôj&ó§ðm 5 øôIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-2_48px.png000077500000000000000000000027751321676412500224000ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d’IDAThCíZ[LTW¥6"/+áÑá!"c 2~•Úˆ !` Èš‡4ô£b+Ój)”öD &д4Åúà M¨‰ˆüP- ¥Ly gx¿ß°{×f½Ž3唬0wŸ}ö]ëœ}ιw;sKOK{/6>þ»Pæ¶~#"2òÛÄ””MëvT£¹úðñc!]gçŽ@WOŒQÜ™3]&šÖí •ê“–'Oh'Ú;§Nýn¢iÝ àá£GÜahhˆF¤™°%†‡‡izzšùˆØ˜$“¦Î–¥™ÙYæ³+ÀØ`)évbW€¥¤Û Å ®|–ßd+¡˜¹ÍÌÌü'è#”ÀZ³iHkmm¥úºzº_wŸ&&&hVJjé†Ö€Xô[ËÐŽ8y^|Þ”v!óIÍŒNé ¶^ˆ[^^æ>“Ó“ÔÐÐ@•••TXXHÅ׋éÖO·¨££ƒÛar›€)†ååç‘—·y©½h €}h7'k˜ŸŸç²‹‰‰!'‡ÕÃÙÅ™Èh4rn!B1¹y¹äéåÉ"úûûÙ·^°g½Ï˜hð[Átåꪩ©¡ö¿Ú©þ×zÊú(‹ÜÜÝè€ëRû¨ÉøüE[*7qâÚ\ÀÜÜŒº}÷6÷³däãëCîžît6é,ûÆÇÇ·F€˜fÜÀÜ^‚ÏXô0”Úqq‘ÛNFž¤#!äïïOSSSìGŒ¢£aEL¯×SíϵTUUE&/­—‹>Ü–’’BAÁA¤R©H§Ó±OQž,@XbR"Ù;Ø“ÝkväèäH.û]è`ÀAjjnâvô7'kšœœäø¸Ø8:tx‹fàË\Ry¨Hs\C=Ò;*n$…S@`Ž;MÁ!Áq2ñlîy}Uß]!—xäùb8h¦§V¾%å¿0ƒÁÀ"—ŸŸÏ>s"ìÒ§—VNa©lêêêØ''('@l£ÞÒ6j:6*@N>##ƒÉãðjÿ³}ØyääÅ€ ù£Äz€ˆ¨ù‹_dòþ~þÔ­ïfŸ¨y9yÑÏæ@B,ô’’&çž§Ñ&€køå&vóþë1A^‚ ®Å¬Èɯ'F´‰f-Èûã¯"l…]–’n'vXJºØ`)évâÿ-`Èt¨Ø8Ø6üîúSƒ·×óSƒ#¡¡_457óãl^OúÞ^ÛBâÐ××Ç|b^ýcóééQ±ññ?„†‡—34›ã¨Ä#"2òû’“?3Ñ4™Ý?ä!•uͰIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-3_16px.png000066400000000000000000000010451321676412500223560ustar00rootroot00000000000000‰PNG  IHDRóÿa+tEXtCreation TimeSun 7 Oct 2012 13:03:23 -00000pž…tIMEÜ  þöîœ pHYs  ÒÝ~ügAMA± üa}IDATxÚcìíïZõû÷ïP++ëêâ²0†Ž®Öÿä€îÞŽÿ ƒX`&þùó‡(Åÿþýƒ°AıAb@//Ü%p°i±ar±pCa€ ư Nb° If€È#¡kF7€…  »`Ã΃ ûŽb¸ýà)ƒ”˜CLƒ¯«#¦ `Y3ˆ>}ñ*CM^2C_MÃÃg/&Í[Ý 0Ð4q6ƒj1ÃÑ3—À†5¥1ðr3|ÿù,/).Šß ñÁÞ Nœe˜µ|ƒ¹8<¼‹Àr\ !žø] -±áé‹×`Í ol™ÛÃ0¡&ŸáÛ ݳ—á79”Aì¦Is>~þÂð¨ØÙØÅ€¿ÿ2ÈKK0”¶Ofxýö#ƒŠ¼ CJ¸vv,œ¿`'Câÿ/C”Ÿ+C„ 4Và‰ ÃDrý‡’"ÑåÐÜAAab###ÂP¶ìéë$9;322­ÑØ0ÕfïIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-3_22px.png000066400000000000000000000012571321676412500223600ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÜ .jü2‘@òòA!š¦!”Œ®†íîµÁ…-Ó~À‡oÏ..\~ü‚¶Ö¤”‘uõ àqÕÐßë×ËZQïq±Ó[ÀåŸE&¥dêþƒ—D¿3to¢’>ÎçYu¥õ~w“€¯ÑÅv…¾\¹IÇŹžnf>ÌÐÒ¼ãÿÁ‡úøøyž³Wƒ¨ê&:í§÷x'RjkÈ«Gw‹ ÓoýþÉcGðwuì¹ÞHO˜1¨ü¾ÐYQ)tCŠËí€Bu`§sÕ 3€Åb‰ŒŽ…ŽV¨(Ê4€ÐØè5׺k·,}[²ÆWW­ÉDšJ¥¬é´fÓ´´MÓäf)5»”XEù«(JLBü6™L1³ÅWUKÜn³Ç¢ÑèòÊʯ?ÿÚ*ƒ©ZõÏIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-3_48px.png000077500000000000000000000030441321676412500223670ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d¹IDAThCíZKL”W†F@)íFž*oÂhƒ  h 5îÀ*D¢§cbv'椩ÛKÎÎÎÒÒò2çs `/x ÀRP[ò@€¥ ¶¤beßå|J*&@Ž¥¥¥6b p@ɹÕÀX-€×¯_Ó‹g/èé³§´°°@ËRPKnG´Ûïß¿ç˜ò¸V ;YwHªfH,`§à§×ë¹ D´ÿÕNjQii)•””ЃÊôüùs®pu±­€é´EZòðô •MŒO° õæÉZ¢„¶¶6Ó Xb@@ÕÕÕ±¯¡˜€Bm!¹{¸³ˆññq¶íV@mm-'šŸŸOõõõÔ××G¯^½¢Ê‡•tR}’c£¾±±‘ým"?Q6Ûêê*ŒŒ˜Ä˜cltŒ‚CƒÉ×Ï—NEœb›Þ ÿ4ÆÆÆØ6??ÏŸr`!Z‚òÊÊŠi¡ ÁÂÈÎÉ&ooò÷÷'âÁKQ FK@§ÓQë“Vª©©¡ŽŽ£•LI›‹°dÃ{p÷Û»äêæJÁ!Á\;bÜÜÝX€Àå+—Éñ°#ÙÙÛÑç#äò… ð=A]=]\öòdEÂ".(’¢¢¢Èþ3{º•y‹Ë˜aåüRÈ££9­¡aé5 0€œ¯¿/]¸x‚B‚(0(üüýÈÓË“ŸùõõõM#né±ngÝæx¡a¡<òÚ**3ŸOáááÜYEE}øðë´ëiBÎ.ÎÔÐÐÀ6ù,  ¹¹™ê¯§†Æº÷ë=ЉŽ!çÏ)''‡VVWØG´STF6"2‚Ç}(-5ÍdÛðèˆÇÄwa‡Y§Ô/ÚƒÙ¹ÙlSN€q³€±í¸y¸m`¾xqXáPÓ/n¼')WR((8ˆœ;ÑË?_²M1xÀ„ËÖÄĿ߄C=üŠ‹‹Ù†öeà~Ù}ªªª2•&§&éÆ77xBò©©©lÇ;b[%@$—•e:x†††Ø& €ÁÁA“Onn.Ûä1ÎFŸå:l•jµšØvÈáÉžžžÎ¾Ú!¶UDr---TPP@?ð ˆk±€2ìì#±¥µ…Û¡NÄxüÇcJJN¢Ø¸XÞ.q}À®sþÜy~æ»{ºÙ@ß"¶UÄü†‹šH^eØå@;Q¿é'mýXò»€k‰X7"®ÕD ”Ŭ»œÛù ,ê‘$Ä®­­ñ'ÊÛµSD€Ò‚Ì6ç¾°S°Ô–<`)¨-y ÀRP[Ò*SÒ‰{IœÊ»þG÷~ý©AôN~jªVÿÜÕÓÃÇû°NGºwïö–Rø£0òILNþï{\ÏȈOLJúMYÁÔhöœaR1±±Õ)W¯þ`LÓ;»í ‘P¨·IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-4_16px.png000066400000000000000000000007621321676412500223640ustar00rootroot00000000000000‰PNG  IHDRóÿa+tEXtCreation TimeSun 7 Oct 2012 13:03:23 -00000pž…tIMEÜ   z‡ pHYs  ÒÝ~ügAMA± üaJIDATxÚcìíïZõû÷ïP++ëêâ²0†Ž®Öÿä€îÞŽÿ ƒX`&þùó‡(Åÿþýƒ°AıAb@//Ü%p°i±ar±pCa€ ư Nb° If€È#¡kF7€…  »¤D¯Ø²›aÞÊM`5'6.Âmªfˆí7îÞgذ}?ÖØ`Bhš8›Á?µ˜áè™K`ÍŸ¿~aèž±„¡2;8⃽¾|ýÆ0kù:°+&Ì[ÁæëÄ ¥ª@œÒ¢`úé‹×àÀþ3`pv,œ¿`!1ð)fþ1¬›ÞO\ ¢íJŠD—ÃéAAab###ÂP¶ìéë$9;322­ÑG3[Ú?nIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-4_22px.png000066400000000000000000000011451321676412500223550ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÜ KHÆ$òIDAT8Ë­”?hQÇ?ïåîÀk‚¡VÁNN‚Ô©-ŠnŠNµ›`)dvBKkÔÁf¨Å¢4ƒ”BKÁA:—ºtqt2X´©¹»¼çz¹ÜŸöÄüàà÷ãî}Þ÷¾ï÷{`¶4½ä8Î]z–eU&' ÷(N=Õ½Šé™¢0‚»¹® €ÖÚà0'RwòvÏç}V¸½Ð0¸#Õ¾ Dp„uÛ ÃCŠaäÎ8•¹X¢g@¬jçqç㨠JuòÍ­mFÇÿ+øho¿~«2U^LTl$ß¼_eíã&-¥x4v›áË—|èϽ[Û_h:n:+‚-3ruˆ'¨íï3÷nÙ‡6—Ò|…kÃWB¶¥T|îìi<ÏàÇîž¿¸ôz‰¡‹è³ODÚ4õáI)#ª6>}æÕÛenÜŸôßÝ/¤Wþ½Ãzm~Æ·åæÃ+åâÿƒƒ]Ò=XÇ È‡Å] מÅBµÖ¬”‹ ÅŽtü„Å+N¾/"V¤…mM8þNH€ûûOÑ«0LÓ\}þröz/€Bˆu08xÞ83prçûŽÝ88°]DZ=ϳ[-•Uª•UJ÷i­rZc !šBˆº”².¥üÉdê†i4,Ëlä²¹zµZÝ­Õ~ýù R,Ÿ²ö3IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-4_48px.png000077500000000000000000000027571321676412500224020ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d„IDAThCíZ]L“Wf.’É_âÚ™ˆLKleKÖIRò£Òvd‘…‘]ÈÏ%$6»v鮌°°,áFw?‰D.¸MPcô†ñS£B‘_ù ï¾çå;MýÒNH[J²>É“~ç=ç¼ç}ÎùÎû¯ù”(+-ý:'?¿E«×_3¶µ:ÝƒÑø‡éܹŸä0½ã^ÿKWOMLNRÿÀÀ¶ààð0MNOSî™3ƒr˜Þ[Ó÷ø1mG|•ýHÓ;  ëÞ=î0>>N“ÒJ“4??Ïñ56'¦¥¥ &§¦¦haq‘ã C<9ÝJ†xrº•ô›8Bĵû ¤ß¸caaÁï"àOPi÷IOŸ>¥»íwéNûzûö--JN•ƒù••Z[[£ååeš™™qÙ}Ë/’TÍX€¯ÐÁ³³³<Ž/#|û,gÀf·‘J­"•FEcÎ1¶¡^Ôf(&çÉã'M;>ÜAYYYlmü&Àj³R¼*žE8N¶ù" èô:JNI¦äÔdÊÍËe›ðp@´ee°JrPR"Ê~,£á;éXÖ1JKK£³gÙP£££l÷¯;° ÿKˆ°×ÿ¾Î{Êd1QEeÅÅÇÑYS€€£#ë‡ÃA7nÞ ÖÖVêîî–­ë÷°'Âßë‘×Ma„q»ºú:ŠˆŒ S×DfLf…ÎAìŠØEQÑQ´/iÝï½Ïõ"A#`È2ðì_þý2—-ßZ¸9P~µRl\,éêiXzGMIMá’’“èTî):pð¥H¥ýÉûIý‰š–––8¯‹UÀïÜÜûª©©á¾yyy\0X‘€ À ?qœ2228€¦¦&Z]]åzàBÉ:˜~"¢"èÚµklƒ·oßæ¾jÚõªXÌ–À ÀÌÑáÁŸ?Îv! ÿŸ~Òh4´'vY­V¶¡¿ð€âãâY@GG‡ËX,[ (ñÓDêëëc›@´yóæ ‹Ä>±ÙllÓ·pâ›<6,€,&úšÍæuò&†]¬Ž-€Ï˜&ACósëK/f ¿ÀÈÈ‹D;»ÝÎ61׬—8øâóÅ\V¢ø»bÎBEÅE²…\{H<3| Ò¨ZJ£òs`#€gÏžq–:¬=L]Ý]ôêÕ+êéí¡ÐÇéÅ‹Tt¾ˆö&î¥ÂÂBrŽ:©½½†††X„O«((ŸÄpëæ-ž}d1¤\\+™’–BÆl#¥¦¥ºlõ?×sÿ  À b*+*ÉÞh'»ÍN Ôð›LéújÓUÊÉÍ¡ôÏÒéä©“ÔÒÒBå•åÔÙÙÉ>‚*@ôJ(¥È¨H*ù¾D¶¬þý³äM̤{ð& N÷ŽlDáKIÔÈBQ1Ò“XÎBÈ^~ÍBx@JØ›@ccニz´klldú£7âíÀæÝýñn2[Ì\¾9 ù"@W^QîÚ\Èœ‹A€ÁÁAW›ªª*¶‰@¼QÈü<“ûe~‘ÉåéÉõzŸˆàÚÚÚ¨¶¶–jëkyplv€2ìÜFbÛ6î'Úx£8’ãXR]]MÍÍÍ\v÷í“÷ApPS†2ìî@?÷6Þ(yXQçÂÊbU„Ýiã‰Ê~î}qíÁbH€'§[ÉON·’!žœn%ÿ߯¥ƒD“8 nú}`»~jðåF>5H×j/Ýïíå¿J†rHï«A¥ÃË—/9žœÓ§ßÿ±GIYÙñœüü¿´:]S¯:IqŒÆ? ,–:9LaaÿËÐJŸ.ÀIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-5_16px.png000066400000000000000000000010011321676412500223500ustar00rootroot00000000000000‰PNG  IHDRóÿa+tEXtCreation TimeSun 7 Oct 2012 13:03:23 -00000pž…tIMEÜ  ÖXc pHYs  ÒÝ~ügAMA± üaYIDATxÚcìíïZõû÷ïP++ëêâ²0†Ž®Öÿä€îÞŽÿ ƒX`&þùó‡(Åÿþýƒ°AıAb@//Ü%p°i±ar±pCa€ ư Nb° If€È#¡kF7€…  »À%:#Ol\„ÛdÍȶíX8¿` iâlÿÔb†£g.A < RÊÛ.^½…߀ø`o†/_¿1ÌZ¾l㎅¶ÌíaÈ‹axúò5ÔEkñ -! ¦Ÿ¾x L“ìÍ Áâo>|Äo²Aì–)ó>}þÂpäÌE°˜¶ª¡X@ð÷ï_IQa†ÜÆ~†Ï_¾1é¨1dFb7Êÿþýûÿâ‚<bÜ¡1ÀO\ ’ë?”‰.‡à 3 @ 7”-{ú:IÎÎŒŒL«A4-DúÑÂIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-5_22px.png000066400000000000000000000012001321676412500223460ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÜ  ¿œsu IDAT8Ë­”=hSQ†Ÿs’{Á˜`¨ƒÕ¡ÐlE­ƒ¦ƒ"ÚÅÁ_Šu±P,ÄÁ©´L«"«E±ƒu°”N™Ü\œ h4?¦šŸsÂMs’&.œ{ïsÞóžó›¾*‹è€LÓ\¾91u€Ù»ÓºSŠÞ›ÕþúÙJ¥ZëÚÖW½9®Öáp¸Æ²«?ÒÔ ®Žëåv‚¶‚êš¡†àzP=Ì7Ô w8†È¹«¬-/xÆàÞ<]{f¼ù±w 'FÇ]Kÿ4Ö*¸q¶–><›o˜sCðó׫¼ûœ ¢7.ŸåèÁ[ÎHœ`éÜÒÙ\ëŽË¶êë·gxüb…õlŽøZ€Á½ýí7w}~äŸ_¸25M0¸“ǹtú8Z«æ òqé _œ³uâðÐ ‘C÷‰Þª¥½;̤[?Ç­BÛrÜèhêwuí¤Sò†±zÿaìT'€Bˆ8€èëëõwïîÞ‘ú• 66¥b1P.—•Š *U *¥·k­BZc!þ !òRʼ”òÏçËû Á4B(Ê'“Ét&“ýû|½ŽÅÔû½ IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-5_48px.png000077500000000000000000000027771321676412500224050ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d”IDAThCíZYHœW¶)Ugjµà¸ÔÝdÔDF2R褡n•ÔhÕ§4 >Äâk¡¶´vÄPI ¥X ¾øæ‹ö%!¦¾ÄlÀFh\g÷}_ÆÓÿ;z§‡qßÑ‚|8ÿ¹çÞ{¾{Ï]þqÜì‘wï^bjZZÎ`x ÆêôúÇÆøø_²rs¿Ù swÄ ß¿xõЦgf¨§¯ïT°pfææèfFFÿN˜»Ã[£ùºóõk:¸–ðçN˜»^¼|ɦ¦¦hFš‰“äôô4-//s£'OŸÐ­JÊ;:çççiss“ÛÛ ì‹:N û÷I*föI,à0à‹à'&&ø3®KKK´¼´ü/%|'''Ù~N À]0•˜( 0€‚hb|‚mòÛ˜5Àø©‘T*……‡QPpÐBî﹓ñš‘}1 Š (6“€?‹gÛQ¤§§ShX(éât´¯Ÿ/ùùû1ýýy†¯~|•}]"?ñ¼—€ìœlòðô ÊÊJÚ²n‘Åb¡¡¡!æðð0õõ÷qŠZ­VnëXŒ± #d,@GBlr³y”kjjøy7(¶ˆí€c£Û³ÙL¿7Rmm-µ´´ìXÉÖ¹½€œÜPQQÁÏŽÞ9äõÀy* Èú"‹Ü=ÝÉí7R©Uäõ…G„Sk[+—£¾½1UUUü ;ÊíTNÀŤñÓእwÔ Ú HÄùºqóEÅD‘6JK‘ç#)ð£@Z__§­­-[PòðTy:L!Ô9¾`’?O¦¸¸8¾ººš›À»w(æb ©½ÔTWWÇ61 BÀõÏ®“»‡;Ï”V«¥K±—èö—·©¾¾žË-D(*#{Y™ƒ©»»›íÀââ"ÿíéí¡  ikÔøRqq1ÛPˆŸŸŸO)))¼FDFZ¥æÁ8÷î9Þ>{zzØOˆPTv ìál#$|p‚B$Ö‰Édb›®¬®°MŽ‘‘zðÓGšZÌ.S\Ãáƒcé¿Àèè(‹„_II Ûä@ÌÒ \[[c ±±‘‚C‚9MoeÜb|” ¶Qé´çÀQŠÑE]܉€Ì¬LÞ4¾>Ø”+*Àþ$F0G §èãQù# !/o/zþÇs¶¡ì#àáÏù’çíãMMMMl;UDÊ€"…@±ÅfdfPtL4ù|èCoÿ~Ë6ø*ºˆYÀØÞüü ¿Ìà… ‡ÐÑÑÁ‹›D|B<Û°6 Px@ãèdBz)ì@˜¢´´”m¨ p*÷ööRYY™mhnn¦èèhÞÿoþzÃv1CN Á|UÀ800À64.Rèïï·ù² õEy{{»­¢Ÿ±ˆ­›V ¡{ÕQD€ÒD`‚ŽÊO­€ƒòL€£F]É3Žu%Ï8jÔ•tJÀ”tƒˆ“$.ƒ‡þG÷iý©Á'ù©ÁEî‡Ö¶6þªdÐl&³År²”bÀ—¾ˆ'5=}ÿ{ÜÍËKNMKûM§×W3 †g¬‡1>þ×ÌììowÂÜ›Û?¢ˆ¾šT"IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-6_16px.png000066400000000000000000000010231321676412500223550ustar00rootroot00000000000000‰PNG  IHDRóÿa+tEXtCreation TimeSun 7 Oct 2012 13:03:23 -00000pž…tIMEÜ  +³ñN pHYs  ÒÝ~ügAMA± üakIDATxÚcìíïZõû÷ïP++ëêâ²0†Ž®Öÿä€îÞŽÿ ƒX`&þùó‡(Åÿþýƒ°AıAb@//Ü%p°i±ar±pCa€ ư Nb° If€È#¡kF7€…  »à÷ï? Ó—¬aØ}ä4Ãï¿¿6ÏîÁo²f½lã†M{3ä%„1xØ[àö 4MœÍàŸZÌpôÌ%°a{Ž‹o=pŒ!4«’aÿñ³ø ˆöføòõìåëÀ®xóöX¼01œáë÷Ÿ ‹×oÇo€´„(˜~úâ580™ *$D…Áô»Ÿð€ìG[_S Ì>qþ ˜VU% þþýËéÇðùë†I W5gF`7`ljÐ(ü˰en4þÿ2ˆ 0´—fBc…ž¸0 @$×()]À f 022" eËž¾N’³3##Ój }G3|¬ßIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-6_22px.png000066400000000000000000000012531321676412500223570ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÜ 6R½ù8IDAT8Ë­”KhQ†¿¹ÉŒ&5Ö…ÕE¡Åß»¯ Ô¢TT²¢‹"¨‹.DP,-¶õ±(ˆ-j} hK¤‹"".ì¦ BA•øˆ’Ħ©&3s]„¤É̘&çpç~÷ç¼€¾Þû©Tªƒ ˜¦i#§:O碬”õ^î–îü×Òé4RÊÜY[¼àgb¿ßŸc€3)jgü|s[A‹AeNÐÁù |Xazœ¡V¸E1´ì;ÀË‘AÇ4Øk€£jÇ/ü윆דSÜ{>ÎLø xv£§°3tòÝ.\bÓÚF†ûÏSí­*OñíÇ£ŒM¼Á0MNö²sëf@ò(4@ }WÔ Öâe­e[3ç:Ÿeðò™ðw†ŽÑçÖ­ZAS}¿¢±œªXb€®Îñåk„›l},ŠOa)¦dYµ7sQ(l\ÓÀÏX´tÅÖ¼eãÍxõvŠ÷ÓXß´ºÜv³ÇöVt]gøé Ý`û–uíØ”fñ¿sµºÕ_0‰K4•ã÷pì@›­iç ³/&Yt_ØRQ*Ôù¡EÀÎ;¡t¨ \S³œJ™@UÕÑ+×úZ+T% 44Ô»kWÖ.üˆx’óóžt*åÑuÝc¦×4 ¯iÊ*)MŸ”¨Š¢üU%!„H!æ\.W­º“š¦&}^_"Gãñßþ8ãŽÝ6rIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-6_48px.png000077500000000000000000000032261321676412500223740ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d+IDAThCíZiLTW¦ 58‚2,£3 #DŠCdÜéh ¢AZ5.Ð*iØ$Ä4)mZBH ©1H2E›*ÜþâHŒˆ¤†jM0ÑŠ`PvpaQ–ÓùÎÌ}yUœÃ¾äËÌ;ïžsÏwï;÷ÞyG¤8ðÙ–ää“F“©Œž4ÆÄ”ÇÆÅUlßµë[{šS#ÊdúáæíÛÔ?0@?žlmk£/hkJJ«=Í©¡ ø¦ùî]š‹ø4>þO{šSnÞºÅ}}}4` w²¿¿Ÿ†‡‡9Ÿ5±±Ó€/¬SçNÒÈè(ç3/Àœà,èlr^€³ ³IÅ ®A|—w2“TL€###Šˆƒ‚ÍJP ˆï²îß¿Oׯ]§«×®Ò«W¯hÔTt2]Š'&&8¶3 Im]™Y™d½Í|l=`"ñÆÇÇÙ|lœ®\½BÇËSII Uœ¨ Úßk©§»‡ï¿yó†Û»$Ó ˜ ÍDAš ©Üw–äTƒ”þTJ˵˥AqdFf·CÿŠ(0P`P ‹èîîfÛt`¶öîÙËIz~ìI©©©t©ê=hy@uõuTZRJÁ´9i3·qHL´×Î’ýú5ûÊ9ĉ«Õtáü¶9SÔb*. ««‹m/_¾äO9ÆÆÆþ#DŒþ7Èk¡ùûûSQqÛ°8ÛGGF9yøŠ »:m€öövª®©¦ÊÊJjhh°[IJBS¾HaÿÈO"ù@|ùìÉ)b(&ÓŽ¶ïØN ¼ÇG´Ð{!ù.ò¥P}(565ò}1¢@OO…„„Pˆ&D*Pg3ˆ%zf) u™Ö˜¨ÍúuEø .D½AOI[“(be…G„S˜!Œ‚C‚éíÛ·499)ù_¼x‘T~*.гgϲ xòä Õ××S]]uttØ­¶%ZP1˜„ÄŠŽŽæä-Ë¿6£Ô}©´2r%yûzÓ™3gØÖÛÛËŸeåeìA@\\»~­´l‚*•ŠvìÜAÏ;ž³€:\€‘]³š‚5ÁÔÒÒÂv@¬0þ~D†–,¥‚‚¶ ‡æu•q]®½L^^^´$` 1!K……Ò3ÒY çO~Ì>|È~èGÀeX´:-577³M<£¢ ’…HÔ‰Ùl–l@FzéBuO‹T‹h÷žÝl—ãÎwȰÂÀýD­ŠbfjX)HL³LCÃC¶·¸ø:;;¹s´+,,d›Í6nÚ(%` E(^ ¬¬Œc`Q8wþÛ\z+! ˨µÅ>08ë@¼!Â@999lƒfPcp` ažÉ´¯Ó؆ƒ ˆ$èx”x§N"??Òéu”›—Ë6Ć?(/ÖuÖ±€Ä„D¾V¦>Puƒ¢Õét”—›Ç6á/àô ¬ß°ž‚ý_íçk·ÎˆÄðìkCµ”ø¹mdaGâ ˆ å8qòÛ†©{³€®ÿ RKàââbòöñ&µZM5U5lÃoìÈ““|c»¯÷5ØoóS¤ˆE¸lù2>Ž ÷Ñ®¨ÈvX°+Æh#©«H¯×SUUÛNWž¦Å~‹m›ä/¶Á×¥ÉeegI;&¶ÁÅó ´¶¶Jmä+\䳎g|˜íð=))‰wpa;úóQn‹¢†ŸKG ‘F+??Ÿò¿ÏçÀ±Y.×°s+«ªm£+o#bÇŽãc‰V«åÇ ¦¤{ÝãûØÀ„Kйã©QÇ=A\Ã.üÛˆ™À£%žqø‰øŠw.fEØå|Ÿ6 h‡D!… Î|ñ]3E$(8Õý9-à]œà,èlr^€³ ³Éy΂Î&]Ðg=ˆA„;‰Ãà´O£sõ¯›Þ篑FãMMüª¤­½ÚŸ>u/­9à…òÙ²mÛ»ÿì±/--aKròoƘ Ódr;£¬yÄÆÅýúåÎßÙÓ´ÃÃãOÓ”lIMIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-normal_16px.png000066400000000000000000000006721321676412500235110ustar00rootroot00000000000000‰PNG  IHDRóÿa+tEXtCreation TimeSun 7 Oct 2012 13:03:23 -00000pž…tIMEÜ  <¸j pHYs  ÒÝ~ügAMA± üaIDATxÚcìíïZõû÷ïP++ëêâ²0†Ž®Öÿä€îÞŽÿ ƒX`&þùó‡(Åÿþýƒ°AıAb@//Ü%p°i±ar±pC1 ø÷ï\H ²bdÍ8 Àf;L-²f˜«°€Ðì• ÓTQ`xøäCVl0ƒ‹V/0!¼€iC^B÷?­Û†8]€HrRb`úݧOð0ÂiDÂß pÿñ3ˆAâpÍx3”›&ÍeäçcHðG‰%<^@U0¯«IKD‡jÔ"Ò^/€œºyN7˜ÿ÷ï_ 9t7@PP˜XÀÈȈ0”-{ú:IÎÎŒŒL«A4ݹpýaã[IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-normal_22px.png000066400000000000000000000010671321676412500235050ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÜ ;'MpÄIDAT8Ë­”1HaÇßåî¤1Á4jÀ¡ºY( ÇNNvp •.%nN­(ts¤¢Tºj§.-®Nus‘.B!bJ$æ’Üs¸^Lî¾äȃƒ÷8î÷ýïÿÞûÀΧ­#Çq^3€°mûËÊ»µE6?nÈ bk{SÌÖÓjµ"Ò|ÀÏ Õ¹W§R©&« ì}HÐ ØË[C‚¢ ÒÔÜ j…µÛ£‡áÅÑ6„{€VuÈŠ~¼ÕÒØ«çÞ,ðrv†³ó F3ù°ü–§ãÙ®`Cß·Àû¥E Å+¿† ]ë~Ùì“ é‘$?BÐHÅ:ýwÎÿz4dk ‘·+÷ã®Zåäô/ž?CÄÕNLDóÂ#´º±ÇïË+f§§Èç^uµ¡/Å»ë+šÑ“ŽŠà‚è á‰Ñ]R=NEpMõ éwAò;‚zVÜéè§Ó&€eYßv÷wæTJ(€ÉÉ s,;6rýç:^¹½×'^¯×㆛pÝFÂueXÄMŠ`)¥ªJ©²aeÃ0þÅb±²i™Û¶*ÉD²\,ÿ–J7w÷ ›³Ê€}7êIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/heading-normal_48px.png000077500000000000000000000021551321676412500235170ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dIDAThCíšÍOSYÆ1&ƒµI)ÐV:2 ¥¥¶$Á„¶3‰))D HŒÑİôc$b‚aÇ?`bŒ¬©.À.ÆüƸ†L¨ÅÀ Z¾iKá™û¾Ó‹‹mƒ=½&}’'ä¼çëýõÞ{Îi¹EûÕsó¦Ëíñ<1ÛlÉu °Ùj}Øèp~ú%ªÉéœL¤y°àÍÛ·ÜaqqaéJäÓ¡PœO}ccv4À²téò饥%lF"œO .¤T¤ ©é@ªAEºjP‘.¤T¤…Ð$Ô–þ’“cÉ–ë²1õÉ)M°½½ÍíI«««|^__OD¾ŠbT— HNhðx<ŽùùyÌHßž¢Ñ(÷%MOOcll £££˜ú{*÷Ë"§TOjoo‡ÔÅÇŠ¹^ Ãõ»‹cì#EP«Õpºœ~r›L!„ܾs'ËNÂÓêA8ÆÑ_Žrâî7®t_a˜J}%**+`Ðvû) ÀpÊ€KîKÐéu¨³ÔannŽëd ÀPe@yE9®]¿Æ±•••´Bnݹ…êߪaüÕˆ®î.Ž‘ÖÖÖvÛì ¨5Õ2,%OR]A“ÉÄeý @““åv½½½ ©)Ñ`bb‚céæ -×ÂRgv€X,¶ç“¥¥“ä{îãO¿´´Þç^ŽQ]ò˜û- RË·G,ã¥5Àë¿^C§Ó1ìȳŽ) Àü}¯×ËW@£ÑÀçóq,Ýâ¯@ä[¹]ß½>^‰Ê´e˜œœä˜bhy¬¯¯ç2iaaëÉòîìrºø!>k:ËeŠ'ƒ¦²0c•555æigGz¢òûý|ïWÇÐÐÇÒ%OpÚ»ÝÎ;pGG¦þùÿìC½—/^¢ÊX•Z…óöó'8EÐ}Ýv¹ ããã»g ’%P©T»åfG3÷#¥[¶P€sÖs\¦ºþþ~4]l‚£Ùî«Ýð¿òs‰’ÊäÓ' W¡häëqz¿è¡¥>™&O @û€´ŒnmmíÙ ¨]¶‰Ëp÷ϻПÒÃb± ‹#¾½w8Œ…tvtòCZ¬*æSæþì0Î) Nò½ðñ.;88ÈGèÍÍÍŸ€L_â“‘&ûQÉ“s@©-ùG&OÎ9@®]H5¨H `QÚŒä{;_¦ 1ët+õUƒ ™¼jpÆl~ðîÃ^σ³³˜ýò%¿–r ß˜(wkkú—=nôôüáöx†ÍVë#¶Í–w×Jy4:O/wvÞO¤™PQÑÌ9ôPIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/help-browser_16px.png000066400000000000000000000016441321676412500232350ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<6IDAT8m“[lTe…¿óÿçZQÀ†N¡ô6í€N©S‚MS.F-ú¢¢†Ä„˜+IL'AŒi¢­$ñA ‰Òøàƒ  G#‚ŽÕ iZÛ‚c§b¡-P{™i§vÎïCKÁì—½WÖ^YKSJqcok Ïu@p~ÜD€Ö¸î»q_»P¼­E‹rÌWw>ºÎ¾'à•åùœ¿˜¤óBÂ;tì×Ìdz¦ x;€ùã¶ûªŠB-/=윊p¢=FOÿ0kJòx ÆÏƵ«¿ÿõÔO@mÜ {ú<“ÆMëJCoîzÈÙ³ÿK®¥ÙûÜf*ýù¤§fø¡#N«ÛÉñ_b¼»çç•nõñF ™¢úæ@pû{©¿‡ÇÔÓáOUQ}³z±åˆÊf=ÕÓ?¤FÇÓJ)¥NžŽ©š©†·¾P‰‘qܾ?]Tß¹þ­/¿ðä†M£ãiíб³†ÎgÇÏsØ=G{÷_<¾ånV.Ïåóï{MQºb %+–ÊSÑ?'PWUáÓN´Ç°LK—ÇH^Ma[U>®þ“Æ0tr‹Î߇­.Rˆ:Ë–½˜Ä0$¦i`Y–i °{ÇF”R<Úc[¡‘¸2Éêâ<<¥‚×ED C×1¹¶Lƒ½ÏÖbê’Ã_Eé»4JŽc"„À±L444@]]±Ë„†œcaè,¾Ýf 9Æ™ÞmÑAÛı-r“òÂeį!¤è@äÜ…„·e}º.Ñu‰aèhBðs÷ §{“H)±mc¤ÒŸG÷C^6ëEÐúñ‘3™ kW±þ®•èR¢KAî"‡ÝOÝKÃcÕä8&–ebÛ&kŠï¤Ì—ËÖHF)Õ*ân¸o"•iÚ÷Á7S¯?¿™PÀ‡”)µ¿óº —ðDm)¯}øíôD*ÓwÃ}7Yyk¿ú†íhl˜hl˜Ä•Il{îçÊÒe”ä/¦éàÉi·­çìÌ¿³µq7ìݦ;n³÷íÚq¿]UáÓÊ —¢iñÄ(¿õxï|ò]f|rº)ëy7‡éÿâ,¥¨SJ¤”]³³ÙˆRê–8ÿf÷L”¢ÛŠaIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/help-browser_22px.png000066400000000000000000000025171321676412500232320ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆtEXtSoftwarewww.inkscape.org›î<áIDAT8”klTE†Ÿ™3ç¶m‚m—;»l-—-wä* $² &CT"((&F¤^eIHЈÈøQ#!lÁr¤%”–Rèe[ ”6E(´Ý¶ÛsŽ?vÛ €8É›ù3óÌ—y¿÷žçñ¤ˆD Üjâ±¢'^"ÑÀ:`60èdZ—ÀÖx¬èæÿ§«Û ¬ ‡üs&Ž$òS˜ï ¼º‰²êFN_¨K–W7%€·â±¢ïÿˆDÇ1ÛT¹›^[±xV>Åçj(¯m¢¢¶)$…!?áPó§8ôûU¢»µ%º’'€ñXQÇCà@$j•ã‚y#¿ùðEq®¼­{£;é ”†¦I¤”!2mƒwWÎf|0‡w¢û»Êª÷ÆcEo< ¼Í¶ô5·¿îÛºç$'Î×1}üp^Z8ž !?9Ù${o·qèLûOV⸠¦XµdϯßÕžèJ.‹ÇŠŽõÓF¶n±O×5>ßuÓÐÙ¸êYV,*|¤¹?þz‰=±R×录3i¹ÛÎÇ_löpÅ3ó™Û`õÒI}à‹µ-Ø–‰eX¦A]ã] C~!¥˜×[ñD Q˜ï§²®¥4t]õÉ0Rß²vùd&?Àµ¦{ÄJê°-Û40Mú¦ûŒ•ƒçycÐH!R“(MCi=ý€¡+^˜bÚ˜T@ê›î³÷èUtCGH‰”èJ¥ZÑÙ[ñe@UÔ6æ!¥DÓRRš†RC¹}_P\z]×±-ËÔ1 ])FËæêµ„Tü}ä°ÁsItvÓÓãàº.žë±tVSê½ó•7*€Ã}àôè[ÿé·¿tÌ cJÁ`\×Åu<\×M½’^]Ý=$]tv%éNöP0¬?}ëpwEï¬þÇt .™Q8rÞ¶÷—ç¯Üâ§ã•MÃ2{R(¥!…@i‚ÅS‡ð÷cýæ}\jØX{`ÓŽ^Ö¿Çf¦b{V†ùò–dL7”óWnq­ù>7ZÚÑuQþŒÈË¢00ˆ3e Þ¦/t´wtð ô!0)Ã2ý³ÞŒØÙ#vÌ™ôÍŸ2ãóDþˆAT7üEyÍ-÷è™+ɳ¥5µ·«Žmh­>vhõ<¯í‘`!D60¤gä 阻ÐÈÌ ›YO 2rŽët¶6'Z«º[/·Ö? Þmàp¸éy^âq+À|@VZý€Ì´Ù Ri½ŸÞÛÓêô€ý Â"ç ÷>Œ@IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/help-browser_48px.png000066400000000000000000000102221321676412500232320ustar00rootroot00000000000000‰PNG  IHDR00Wù‡gAMA¯È7ŠébKGDùC» pHYsHHFÉk> vpAg00ÎîŒWŠIDAThÞíš{Œ]WuÆû<îûÎÜñ¼lgj;Çñ#Nâ@x˜8 J’†TˆGÓ"„x”@Zµ©-ÿPˆZTQB Е›¨ ‰H€@â<ü ãŒ=±Ç3ž{^÷ÞóØ{¯Ý?Χ=†ªª*[:sÏ™;gïõ­õ­o­³Ï(çÿ—‡÷¿mÀÿ{ÁÒ µûŸ~õ;]ëGÆÀ"W!² #»°²çPªŒD4ÎB©#(ïi”zÔã8w8—Ò:·ø)çRÜýéù¼øá.ƺÛÐæÂpg±­æwtuP«U)– „a€s`´¡Yºê³õ3gfÞR?;4›ã ¾…ïß <ü‰À‹}ó~„?.ÔÚÛ7nîcdzic/íåj‚¬€µ`¢f0SO™˜œaðÀ`ÏÈàðû¦ÆÆßKª÷øŸõ£kˆZªB¿…Ä}T¬ÚÛÝwíž«xù•lìÍ“@, ZƒÁ‡‡1 Ea­‡q - LÍhŽ äÐOždüèqƒ¸ûðý!nü‚BU¬½ ¼wn{ånn}Ã.¶o*R Ö€ˆÃYAáðœ JˆàŒ 6‹ˆµbóT !—mÝÄÚþ~Ÿ=zä'o‹ÎLm'Þ<ö›¤ÐZ´þ· XÞû»oº7^7@W ŒíJ9|”ç74¦&5±?ð½c b b,ÎF ]‰Bã²+wPëíåÉ¿¿}jè…ƒwü&l"Õ_oëé¹öö7ï妗u“WM–…Õ)>7ÊÃ'IãˆBJ6Žfâ/O_7ý}]8<´1ˆ‰q6º†*=\}ë-úá#§ž=ôe”z¨ÿ˜—º— ˆÖwW{z®ý£w¾‘ë¶—q´7:3rz&æž}?§`æ¸eÏnÙs í_®|àŽwÞÊë®®]Ì)×*gg"þùërÇ =|èíÛ ýÕk£ˆãKûŽðé¯ ²s×6ÖÔÊıÁXÁÁXHülP"jÌrð?÷1=tbˆ0| 0²íÓ‹I¼újÎ݆qïÍk¯åÆ«j¨¥ÆÆ:Œ¾qÿ~Þ¾·›þáNBD„‰é˜h˜}`‡~~ m,àPJx÷í[ùÒŸíæ©§05#ŒqÙ|Ö"Ñ:ŠQ¹66|GûfŒùÜjª´€[8ÚHõg/¾j›wë—ìÏ“]§âÇ|ìWàÄ¢Åó<¾ñƒã|øñÍŸ&|ü‹CÜüчŒpNaaïîõ|ä-›Ø`cÚ8tëÓh4FÐQJؾþW¼¥Ô›±ò†…н*€ÅX¿=(W6½þuW³®m çç=oçàøÈ Û6×0Vnïë*ÒÙÓΕ;6²÷Õ;k–¸ë›Ïáyâb-ïûýËXßn95>ƒ8—Õ “Õ £clsœ4ò†m¬¹d3hóIœ+üpU´ùÈÎkvrÕ¥¬Yb¼q |ÕF|Ÿ(•VdóùT)…$©¡¥Ä‰æÊm<þ\(6x Œµø¾Ç »{9=Ó¢‘`D²Âg&žÆDs¤’£¶å T.|â^»RÎ¥u¯÷K¥K®¹úÊAÖÌÓfÞpcqbÙÔßÁãÏÍrr¼A.—#—˧–ùÎ0k»× Ö‘jKàyLGЉéÏS- ŽWíèF9CšJ¦H­5²ü²ØÆi ª½Ÿro7hó^Ä-³ù\ÕæÖn@•ªÌFPÉeZnŒ çÕ¢‰îŽ2ýxë§ç­{ûøÞœ˜ xÍ5k‰ƒ¶‚ˆÂ:‰™„µÅVÄ,÷U|HR‹•Vdí<…1u¬7C®(´mì§>|êõ8w9pàüœ[îµ6nÀÏœ®» ×™w²k‡I4»·õñ|{‰{~4ŽÇúžµì½¸F¢m‹nk¨–BœHçð}Ae çç4²8¿uØæ ”Ÿ§¸v-A¥˜zã«Ùé‹Õ¾M`áÁƒ1õ¦Ç[¢–R,†8󖵆u]z;«XãˆSKœfÚ®CÄ1ÛДò°¾«ˆ1A©€±³1ÚÌ7-zZÁ˜Ìi‰¶L5'è+ôâ!¹övÌÌì«ç€u[«m*m-LÎîûiÄÁMàÍst>²sm„8µ4›šF¤IS‹‡(ÈðØ3üuo•b€6­(ŸŸž¦ždÕz>·æé™hË™¹9â("Šbð}¶ ˆ»lõ°²¹\­¢<$’Tˆ–»Øä]{ò¬o÷ˆçC+-ZÙÅEu4Ãl]391y¶N£Ñàƒ·­çÎÛ7Ç1Î9|OŠïï?K)_@›ùÖ{>ºŽ©Æ©ŽÁYâ8¢T­”+ TßêœlÈòxžG36¤ÆBà˜œ±Üý°åm×äXã‘è–ǬËò¢ÅÛ8µüìà túìØPbë+:¹áÊ-lßT%ŽcŒÉ J¡Xàû'øñá&ë;»Ð&‹šµ p¶^'Š›™,:‡Ñ±¿˜Ïï¼WVžâTp"àÇÙYË—¤¹éòÛÖ(qËÉZhD†þî<ßþË” ;ÅhêõÆB¨VòŒO>ü…_P.Tp.ó¸G§œ­Ï‘êtÁxœ Ö`­€òò«Ä "²08ðÍØ²ï‰GÖ\»9dMÉÃ9YP m~àã{Šf#Z¨Î Èåò…ƒ§"Þ}×!FϬ­H´%1–ÙfÄl³“Ý0¿v«@:q™q+ÆÊ:еXëð=P®•p´ÀxY3õÜÉ„ã1Ûׇlî ¨äj~§–T†O±‚ò93gùÊC§øô½ÃÔ›!ëjIÊl”0Óh¢Ó”k/KÛH°Æ‚8}!£I£SC!€@9R±çN8’Txâù&OC_ͧ¯à9¡*œƒ0ðI]ž}Ÿå©£u¾õè$ã)••‚cdj–ÙfŒ1:›S-z|q­ŒFžò²&¡µS«Pj°1;‡ÖßSs¦ó`qR”€—QgxÜ0<áiÃî-¾§}xæXƒÛÿú® A) ôàäÔ,Ö¶Ž—´¿ç7>£`æpΡgçÀØ“«×¥Ž6¦çˆM|OQ-¨loD\Ê¥tZhmxbeKð<Bc,Q’fÆ;É¢Š[>—“åçbñ26ôIªém)æ½,ƒVáìâ¹r4áÉc1O³<#N­ðòjt±ç¹vä eœòINO s Añèê‚ï}òÄèM™:¥j‰ÞZÀñ‘¤u©:È"°ùßûpàù&×ÿÕaJyé¦ÅÆ”]’Crç$‚æÈªˆ1$/œ1áO­ç@yßIëõñÑ¡aP}yü€¬ã:B,/Z¸õU]<ô©Ë9ðÙ<ø[¹zû0j‰‡ÝùçY D,…R;Ê 0õ:fb”ÿEfuÙ®ðxŸzòs3uÚË!¿Ó]È »ÜûØo‘ ¯¼ªƒ{>r»ú¡åú­|b ]ڙ퀭¤Ü2.a a¾D¾ÔŽ8!9~—ÄC î_YÈ΀sà©lŽŸúù3X`cO‰ÎZÆ,ÙXÂU<>pó:JAÊätƒÔãgæX[ƒ7¿ºìÒ\ZI›%*'¥¥jøéÄ$ñÑ!Àûs`ê—?RfÇÿ7Ãû0>t?réú6Ê¥ ¥ß+¤ÔYðU+ámËóÏÈB1ßJµej³R6]ë^G©½?_ÂÄ Ñ³‡À¤¢øö¢¢Ð‚‡Õç1 >ö3š³u …Ëúkäs*Û‚^êE€Xó½gɇžr” òèsuÀ¬¢6²ÀyœPjë!WªeÍÝÃØ³“³à߉ÜÇþU(”m» ~ðžúØÄþCÿõ0Ñ\“r)Ç–ªå\‹Nv±ÙSš/>0ÂgœAr5J•³ÒƇ¿:É; jy‡¹¬ˆÁSŠr{/ùòDA|d}l(ÿ½À~VË·ûÿîÜ¿p\A’Üß¶a}ÿ%׿š|¥L'¼06ÍÄ™Y\‹2 YÕΕٸ©ƒ ]9ŽŽFŒ=?z¶Õë,õø|4,a®D©­?WŠÿâ(ÉÁøÔÎ1É}òE°r5©¾·ÔÝyÑE×½Šbg¢5S3MNOÎPo63Z©–"Ù •d5·„ÒËÀ0ŒåÄ- žËå™ íýÕ2 d¶} &9|¸èâq ,kˆH‹ÂäªÌ­#~"‹3¨Õ>¼ ¸ 6Ž ©x #] ˜Î Båõe&ƒLfoÕÍ2C/ý¥Òé´XËŠ»ôTU­ïo3ëü ò&vn) +¡­Ðfë³¥»Ý®þ‹±> ô~‡%Iê°õ#ËrGQWÓT7h;Ífó«Ýþîý 0jŸý>-¢)IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-bullet-list_22px.png000066400000000000000000000012001321676412500243470ustar00rootroot00000000000000‰PNG  IHDRÄ´l;tEXtSoftwareAdobe ImageReadyqÉe<"IDATxÚ¬UKNã@ívl3 D(;ØÂ r ˆìHÃÐHs…‘Ððâ X6H\#9Ed@™@L\=Uí¶Ý ÂŽD•œŽ«^½ªWs!;=;ºÃÐgs¸\×½ùµÿ;`|ð÷˜×ux|@7fëÙ&“73=G³1%°……éÙÎ÷ž PˆÏΟ€¯®®Y¯×cµZ¾¯Ü! –‹+Æ9—ÏÒß¾î÷ûÒ™ÀƒÀg——…¬Ûív101M“óÞÞOÙlÌ¥ÊÎJÏÎP ìû»Ò€EÀEÖoY²…@@`¸Lš$ÈÖEI‡$?L¦@!fȹP=žXo·ÕŠƒ¸J 2Y¦Z#“ͬ‹·³ÓbN§P¼Fc›}À5)«.õ8âí$¦ £U;4ñ@¿&ÁšÍ&2hH:CR&0}2²ßR¹Œc ”WÆÌQ“> ”>Ôz«ˆñím7m…çyñ˜3«P3HbF¬€±.wﺅâyÞf~+H]<š©­­mc»Ð…þ"ðÍ0ä0Ì^gõú¦ Ü.C,Zm’ c¥“﹌uµÓ‰ËPJ×—„Ú4W«Õo½–HØqœû³ó“y¼óüAÞ©„õõ5{eueyø8,__ËïaXžN§å(‚%€M,bÿ+èê`àmdYÙ¿R©4²{ìºÎ¸²T ƒ§çç—·ÿ P-„"KHIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-bullet-list_48px.png000077500000000000000000000026611321676412500243760ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dFIDAThCíZÉK¤G÷ê%x˜?"hG»UDãÒjpm— *îˆûî@ˆ&.àE^Ô#.¢ŠˆÛÁa24‚ËEf°GEÁ}ß_ü½tMz:ãÌh}ŸzȃÕ]_õ{ïWïUÕ«¶²”´”Ÿ@ƒáN×|÷  ÑjÜôúߌŒüÉäæÝb«ÓýòêÍÚÙÝ¥å·oŸÞ­¬Ðîþ>…†¾3¹y·|óâÅËÙ¹9zŽò½·÷_&7ïxõú5ÿ`{{›vo#!°³³óæýj¶NNNØG7·û€‚ýÛÐíííq{}}Íý———õ« Ø8=;c»"\\\ð÷ÍÍMšžžæYœÝ*$Õ‚8zuuÅŸëëëÉÏÏ<<<(((ˆ:;;¹$`Di(B ÕÕÕäêêJTPP@ééé¤Ó騥¥…ŸÐññ1§ØC´@Ä¡OšFòòò¢œœÊËËãV õõu ƒ[[[txxHGGGŸÆ`¼9ÉóósvŽŸžž2¢&%½^O………ì¼@QQ§S?«­­%kkk²··'[[ÛÏB£Ñ0ììì>úÈÆÆ†šššX¯4ùùyŽf=77—­¯¯/-,,𸉉 ªªª¢ææfjll¼7> ²²’&''Y¯„’ššJþþþL‘@*Tyy9?û´Ò‚µ%µÄv‰YHIIá”Á¬»»»3‘››†Ø90Nö¿‡>éE eP dvv–iqqÑÔóïa§¤ç Ä2M°›ˆYRŠŠÞÇpPŒÀSAQbæköE§±pÔ£},"Òól™(„ P›„l£¢”nkk£ˆˆ®¢££©¯¯ûÕ&!H]]9;;󉜕•E‰‰‰äèèH===ü†pjZm2€>i¨FQm¢˜ƒã¢B›––Æ÷\;!âÞ ” ]EtLò¥jt``€ÇánàääÄiÎ ½7ÂÂÂH«ÕRkk+ëEH˜››#OOÏÿT£(è|||¸¼€tww“Á` ÌÌLŽ–9ð›ììì;}ÅÅÅGÃÃìWŠ€¨Fããã)$$„g‘u%%%ü5D±j—ù¨¨(òöö¦àà`N)¬,6Œ`Æd!tI/bËj´··—***hhhÈÔóóbËSR0P‚÷Us÷UKƒJCB`bµ¡§Âÿ„Àò»¹!µ M °Jƒˆl£â0[^^¦ššÊÏÏçânccƒû…KÃJAšdllŒßRLL ¿#Âa&ÞNÀ¢²he!ôHÀ^ýw€¤¤$.%PF ŒŒäš‚JÕ£Ò‚“^ŠdjjŠß™W£(º@ýããã<®½½£’œœL & %KWWëÅ:TÊi”ÛŽŽ6 Pü=¸,¡ÊU„Rxä<^-"uPF£Åµë¢F AŸt =ddd„\\\ø²FiE=33ÃÏ1‹±e¡Ø•Ò|]ZZ¢ÒÒRŠ¥²²2Z]]å~aDl{JC:P€Ùø” _MçiB‰ ‚ˆÇÕv"°}›B ñ”@‹7ã_Mà¹þÕÀõkþjð­FóëŸÓÓ¼¬d|ÿþiqëÃÚÚûòå?{$¦¥ýh0´i´Úß:Ý“ÃöÖ7½¾5<"âg“›&±²ús2) DTh¨IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-hyperlink_16px.png000066400000000000000000000005421321676412500241270ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÜ "+AXYôïIDAT8ËíÑ=JaÆñŸ‰ (b%!Þ@ÒXF›ÁBA,$h¹l%ÚX¿n'‚x€`¡…éü@­lD‹ˆ°±ÒN°y1rü›™y`†gf1$ ÿâ Æ’4Lâµ}·È³‹ža xêëmcµ\©ÖšXÂ9îÐÂA¥Zûê<¶Ÿ“4Lãøˆqó%,ã¨È³:®°ƒYœ$ièà%¬`®È³í"ÏöqˆµRŸ­W¼ X·Œf’†r¬gº7¸Á"Îð‹Oc³È³F’†©¨b"6þ`·ãØÂeºÔ‹DòûÅöƱÖÃ¥‡a±7] µ3ý³hI˜›äö!W4‡h.û ë©ÖLÎ?/T‘lÿŸTx?$5Ú -"ü‡ctt¹¹dk]¬ü¡;>q<¹>f†n±ÔæÑçž(®ÿ¯'Ø5³Å¨iV‘¬zYÛõ€4iÀÊ “EÎi쇄£S XKñâ^ob tªntx±n¦öî¨iaî©…HÚÓ&õ×DczµfúNPœrÀ=õ]ÇFô'¡^ƒ$m`Ö”uú¥‹?xÙË¥^K´ì~ÈL_Çõ®ï¼ ú¡†³8×e"¤kª¼©Â&{ªðtEª°á¹ðl¹\xÑ&¬#ç (ðpñŸrM÷šôäŽD®xذ­£µIXiJ¿èu‹KGÕByÈÇ"5êSmÛÚ—wuJe]bY×N±¬{§TÖÐݸkiN”ÜP£ ÇæI.ýs0!3 [ÄݻIJ= éhSÊÎ~n[Šº!IãàOâ²]­z|äÆŸ8äoK·/׉\Œü.ö‚=is@~GPú½y«ð°fƒ ”“€z ü¼4ÒFx^¸8é ~´8¹#¤¢êàÀ-wTöái¨r+k*‰ÞÇ*qƒ×Þ䔉y^NcOú"TDÁw¦F挰ÅЉítdD3IGG = Z[\ŽœwñÃP«)(›!´Ù+]ú;'-3“èh;RZAe¿%Ùì?Pf7 YÜ´úÄsŒïÔRcÈœðñBc±¿PÔi„-–@$Ù1}À(òpB³žŽ ò5˜tÓÉdn[ƒÊ±dÛŒžå¾rGÿy' 5 ‹%ùý¨Ê+üp8×;c±ÅðEä­îÈè”?ðˆˆ»Œ0îý=£„X錞ázi•o‹ø„+.¬péǽlßZ#4 ”?c«tÜ  Ì° ’ÝF:k„çÅI'‹K(OFŒ0<ÞVáA"¨ü†_@}•ŠvÂ’Œr8Z+®ûàDké‰÷ÚJ"þÿ7RLÃØˆTrâXkééýRIg‡\æ‹)¤‹é»€7iª›ä‹“ñøCÉû“GZKsŸH%>KrŸJ%ò±í¥ÑúÌj+å°ݼþ~éjÓŽ¾GµÉ&@²Ê!Ü¢´AÚà´Ñ!dõ©¿¯¢SùbÚ|jÞTòЭònŸ$¼6¿’¯ò(ùjŸÁŒz›‹u¯¥Ãj˜fGÎ[i5o¥•ñjJ·Òò8z§^¡Âø\‚6ª-2,| ´Ò;†í)Dê„5øÐ;Š~x`âÃÄÉ Üñ4aÀ0‡^Îê»ïIßQ‘0`Óµ2ÃÖêe§^©oÖk¦‹AE'Å \ÓOã‰ÝºwêÆñ÷²ÆPµ[<…çóòâÜ0ô§œS ï ܉(.{ÃÃÍÞ¢'á ÷Ÿ§ñeŽÅµ7×eîîif sŒ‚TM§Ž"$,©¤d® ·ìð„õæ1›6à†'D²}çýÑ$eØœo¾ºÂξ'ê—°k·µë-¾ÿ†àÆÊ*W½‘ôq_T"q~gPæ6S™[®ÈÄ¡¥Bþbâ9mp…þŠŽd;·÷$Wj惷sBI]Kßó\­P­—Ëc@ü¹ñ8L¾N×µìH=i¤ÔL¨Ï±q™×ö”ó;\'Î _+VDÄM½ß2k§3a„ &L˜0aÂÄ=Âbù"¶Ñ¤$œé¶IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-id_16px.png000066400000000000000000000013051321676412500225140ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÜ 2ÂzNÁRIDAT8Ë“]HSaÇÿï9gçÃM'‰[Yè…¥aeŽaeD!Åœ:AMC£"CtDÑç2B‹0¨›& •PàEˆ#+/vQ2¬ a•Žtmgçœsº[®Žés÷þøÿŸ¯—XaT5Ÿ3ädICÓYg]Ý¥ÊñГ['o/¥£ ûX“¹Êv“bøz†3oÈ/vªSÃFZÊR„¦MìNU•êEºdÉÎ볯ߌex¼~À`O»_˜íbMüN½yv7kæS¯Ÿ,»ƒºÓ L˜ÀÈ$¥ð_ôü£gþº’2¡Œ=ë8ì—ª`æàÃæÖ¶odXV”Å:Úº·¬Û²«”VÚZ£¥‰Sa®ßxóÃŒ\]Ÿ¹ì&Çaétj¢>~¿jA¦NŸÔ-+WORæµXâ¬'”mbnݪU×õÐ0Œ6ÇíŽB1;¿P>ï§rx~bT¦'â%jåQîÅfÛÖùÓ?…UãvsïþfBÙ“Äá;-HÌh9Ç ’£„̺Œˆ@ÈVB)´ ¿ú­XxÚÓÇÆNÑЕf_|𜪚ãî»öeAÙí îCœóNPÀ¹ƒHˆ ˜¢ÊAjõ{áÜÏß~?þ‰þË»¾w¿§´–‹äÆÍw0å®h†ãµúNkÉnÎÝ1ˆ×­±§â\œùìèr5oW~˜ÔlÞÚ­߯ó(c±r©$bÅ—ÇGô?yºòÄÕ4bˆ?Ï¥ŽýOþ»D*‡ßrºD…'9‰zIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-id_48px.png000077500000000000000000000044141321676412500225300ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d¡IDAThCíY}Œ\U«(ÐP,5Q ”6HlH¬Æè?BŒ™±¡Ø´;ïcÞ×}÷}Ì›™ý¤Å~ÍÒÏÝíÎÌî̼73ûÕm»;ívK ‚V#…¨ h0B¤A¥¥FSúò<ç½;»Ûv·»…'†_r’3÷œ{Ï9÷Þsï¹o"ŸblO'n'öÖ¥ÄÎ,ÝžvngÍõNÝu`¹i‘VÞŒê¥KH"-¿)Y^šSŸº‡©Õ'$Úõ¨d÷7ZÇ}Éö£? ä–Ã¾ä ½Ã™0õú±ÚÒ5UõÔ8;ì+Ξ€Ç65YõEÃ;m%;³nõƒµZ9c´ö£œ‡çhñ•É®ìÜ ž^•ãà W‚£ý»Y·úÀïŽ~ë³k”òïegŸÏ?f–Î7®k€‰#†³e©`ö]@ê4hÕ×¶m‰Ìcâÿ=қ歖ʯ*Î~Ÿ§€ÕwA¥;¾ÆÄ#Þ¹ Ú.ò´ä+ÉýÀ+[Óu‚'=;ŒÖ#Á6ÁíÂÓâë’‘JÆî(GÝ×åøž@F[Æý˜1°•u«¨Î–{!‰O‘ƃ0ÃÄŸ4Žø1à± e¼áLÚù»Y·ú‚hf¾)9ýR’#0Û®ÏT x51 É=øFÌîøS¯OÈüú;åx©OIîó9Ý yÙñ*¶n/`jõ ™î6HÓpVyÙÈ&¾ùð}ÿ3²°ù~l\b¥:[©]‹­ä,èu,¶S›ËV®SKŽN¬òš•Ûe¬¦7íS m dÇEØt?úÄÜ›"Ÿ^ð„9.Z•‹Q½pþFˆ#…¢Ô»Äé%8‰BB>hCÙ4}f¦üyŽßUb柹;˜{³c]kfaƒæ^Ö[ŸóÕÔA_KÍÇ‚›·ò؆²iûÌ@hÛ8ͽèЧ¿ÈÜ›ÍÉÍó³w\¶Ý£‚ž{Y s§˜Ùó"”'³ßçaû <é=²éúÌH`[²ÝßÈ4wHnÏr%¹ddº®Nb¸Ð:˜¸þ!éÙÒ4Æî `Ìõ\–‰ë’ž)¦ƒPà!€^&®Di¦<5ä£$ç1qýƒ§ù¡«sÚ˜¸þ'Ȩ–š yhÛÏÄõpö *щ€çInœ‰ë°]žWƒR‚¼@óÏ1ñÍDw?*šÝ?d??x­ø¢ %u-,¯9­ð+&þX´Ž‰vþ»ìç$bzï’ª^”hö{¬é#c7ô[5åt€šñW‰ƒG™ø#ƒ3;¾¯7U/‰z~”5…pÖïø2OògU¨?böÀ¹í~œ‰n¾™·’~MNìç±u}äWòûŽlîåUPHvUÌ<‡5’ çÏ ÏL‰@Ùº$J¼ËÁƒžŠ3ä+FO+ß*knYÙ0üG9¾—àA{ý #x«mÉç˜Ú A´zžÄïK±øÇ?ª{—Lð™‰#‘¤¾¯A-| šƒ`°è‹f¼_«ðŠ*év×Ä瑹 TŒ~aµÔÿç+þ§Êà6=òy¦6'HtÛÅö¡/èSèÛ ¼¯‹çÐg¦‰ŒU ·ð¤ç× ìÕpߢáRp‰få=Ù,6™Oî\ÄÔ¯ 7/ܶF«üUгq<ù­ï/í[Zoej×…’Øô%Å.4KVÿ{á…ˆoŠp;â¾¾„>3õÐHi3` Öñ¡ñ˜5èëPÇszá¤bV2Ôêú:ë2-§çsÄûÛ5襷·¦S×-‰IbÇrÅ.gR8… ÚÆþèKø0‚º |„;åÚç)q:ïã ÷?âD§ÚkÊ $XψFù´˜èxu™mïà¨{"ø¼8%ȱãMÉöùLmZpVæ«‚Y~ŸÀC&øªq•è› {ÿVâÝ÷².W‚7{³zó!PÆU˜ÚŽÂÔÔô™(Svzׂ()¾+ÙCÑ ä©wª­yó¬ÏBÁÈðØšÜ µÝ€³?Um¶›©^‹ÔSÙ»ÁМ=Lž–Y%¸M÷û’Õõ¦:#ä¶Âlÿì=WÀï]›&gý¬"Ù™hkòM]|‰O¼áž¦_aªÓC°r†ÙvËà‹xl… ÉãŒø1£øs¦6#âtç8§ÿƒð99±¤ôw®yã¬+3z_@[hm>€/´å0äDVgj3£1ž¾M°»Vêñ®eœQt t ÷#V•° v©ÏT[f<‘LÒ±(ª»ÿíÁ`鑞ÏÒu™…Lí˜êÎE’å  Àù ïÀ¶V(«k™D:WnKWætŠM`ûãέ¢éýRo‚˜’Ìo© Oktòw1Õ Hf÷j%¹×Œpû!!¯8{!‡ºŸ`jÀã™$K$f–ÞÆ#³fG‡ýΛî/¶µ'nèî¸êúŸ-Œ™ÞËzË300l ö††Ã; K^–ììZÙÊ<#½)A/œÅÇ­S ùpEÜ÷%šKêfÇc’[+ê=z'I#<úa›á×k´«.š¥—âFbîŸR®[wÄL÷€g0þç…Aàã9ÒTõU˜õðÆ p~’Ü Ô t¡ö Îz ÇıÔ­¶5m˜û‡¬¹B²óëD«ïr°Ôx´†Ãü˜¼-'gþjªÉkC­?ŽÞú—T+߯ÌÝh´ë;²YzA… g¹0€+ ¨é—ƒ1p,É®9õ1àQy>ˆòšMäÏ! ‡F˜Ù¡ÙÐz@: ,VÁGȵg•ÏÂI>|þ?ðQŒ)[@oÿeÈXGm#ö?ÂŒžØ½`žIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-image_32px.png000066400000000000000000000033671321676412500232120ustar00rootroot00000000000000‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEà!á?YîæIDATXÃå—K$GÇ‘ªîžÇÎì<ÖkV–, !s@âh‰ g¸">–âìž#a $,¬Ýõšg=ûêéytwuw=2ƒCU÷v{×sò…”¢*«23âÿˆŒÊ‚ÿ÷&þîÛ@höÇÀÈ¿UÕ€Ÿá2n}ù«‹}çÍ;·v¶wZQcMË54èÜõZM_®1ÆÒ=í¾wüøxË¡üh}}Û·ßÔgÝžL&U¾NW£P_3¡îL»ªŠ³–$ñÜÚÛ&Ïó]”]cäâr wÿ¼Ïg‡'t{}ŒÈ« ª¢ºh\µ¾ÄÙœzþt^Tec}•;oìò›_}@Y–8¡(+îzLL6¸yûkç"ã‰¡Šµ'1Ö2¯<ÆÚ‘¨q6£6cJˆÊy1!~ù‚² Hã ›Æ<ÆÈùå›·öØÜÚ!ñ‘­°ÒZ‰á¤[p9P†#!DmŒ5"‘@µ±ãÌpˆ Ž{ ³óöܬ'‚³B;õl®{¶7s~ú^ÊwöÚ´[«|ôÉ Ÿ~^qpœ56 æPb¨ßUBx   ¹z´2 ¡só"†Ä;6Ö=ß{+çÎÞÛìlì"by÷­’úœž+eI­xÆ€µ ATb¨å„h¢š€¬JÌ\Ò4ô% $ÞÒJ,©¼³8ëGâ…V"´S‡³,æ@œc!FB)ÊŒ² &ŤDJgÉE^Á€*‚8Kb=ÙØ2Îä•ÇH‹A6¢("-߯[E´©µ÷ ¡¢Ô¡¼ öÀ¯‘®n¡*L¼Ed±Î,†H½Åš”ÓóMþóÙ7V»tÚ‘ÇÏ<ƒU:-_{NYDu .»ÏÈ/ŸB »8ElŸöÚ.k›oPµSúÖÔ;`~Ì#ðÞ&UÃhl¨ªŠa˜LZŽVjjêu±È„™Œ3†çOœ?§½¶‹j@« F¬´,yËc­Ì¶àW x+¤Þ¢‚g\)ã¨(Þ‚7sO‹«*%ýìŒËÞ ƒ‹SÖoÞ˜¬¥¤Ö¹e–å€6•-„@9É(Fçį@{¹w§×%[¨B öùï'ÿ`<¼À{O(†¤Õak{FT“>!”u\ ª’ç9Ž8=»\Rj€U (+B„0ýxEB5aØëª1†a~L– A N'±Î“O&ùU%•,9:~ÊñIwÁ0 Q#eÈó‚ɤ Ä8iâM¤å"ªÑHïbE(~ù•:Û:y—1à¼Çùm Kˆ‘"!Ö‹’Ô’¤ËÎ. )óU1¡*rœOP'9­•ï°Î!"W˜~ÝŒuX›ÔÉcÁi]ñ¦ã¯nubÆÎJ] «‚*Z‰a{£CÒZ!I,«mOžOƈÈb%Á9Oš¶¾’õè5Ž*R3W9E>fs=åï|›4m‘zK»åûŒÇ£>pææWcè´;¬­ßX ອª*Q1Ʊ··Åû?~—µNJâkú>? (Š:gïÍxoyûηx~–ñüY¹Î¹lÞíù`¨ªŠ”2OñN0FȲŒ³‹³PUå¿Tã«JïÍ$+í?ùá;œ¼8£?×t_„,!Ô¨›«ÄP2UdÙ0ëõzOEø ððØÑ#ëòË_üü•ŽÉâõrCDèõxðà>ƒÁ€a–Ÿv»úøßÿþîÝ{'€8àGGGï?yúäûÚ0^çùµñJ>ŒÆ#=<<üÛ““'û<üûÇ_ ¦Ñrªzï²y|·>PDÓˆUU™@ší(JýNDTDTEÐÙs#ƘhŒ©^¼x±pxpÿ0¢ù‘™c`€ðÍ=¡þ˜Šy…ÄFY¼Ò@ÕH”sï"ÍîŸ W NNç,Û—2÷þê¸62VÍõu^Á|ÊÄü%¾®H\6¢W×Ê’…Ófæ,k¯!Kæ.ÿ?Äþ⛲Èz%tEXtdate:create2016-08-21T11:03:29-04:00^U¬ˆ%tEXtdate:modify2016-08-21T11:03:29-04:00/4IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-image_48px.png000077500000000000000000000102721321676412500232150ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dOIDAThCí˜yP–W–Æ¥{’Lue¦SÓ“î¿ÒÕI§c4wPQDAYDPDDÜÀ5FÁAQd_dßùØPùÍy?’™twš8SS5ÝSžª‡{ß{ïûÝóܳÜó2켓wòÿG~.øÁ‡åPt|OðGòp®¯¯/·££#û íííÿ#¨Tª?BKË`ÛÜÜœ-zæÆÆÆn•ÿOù7™¨üMHTTTŠèüËAÕE!P28 ýýýòw࿉×Òÿþùûþ÷x%è§¿§›Ú:uM*^vvÊÒÚ[ÛhçšUtÈswôvÒ×-èé’wáðáà ¢óHÉ,aØÎ|4:H°_þ$ÛQJ?PZ?“þ‡#¶ò‹?láýÏùÙˆ û2„&îÃé`’ …Ñ®ùpîQ>Y‰Ýñû$UÔ‘RYO]o}B6âq n—Ò'Ä’@Nq ÿðycŸb̨·ÂׯQŒ3‰dÂ’ÓjŒ1Ž”qÁ¢H™‹dì“h:Ä0ÏïfÁIDgTPÜ@xVu¯_qèq9!wé‹¥×·q:»šgÍxøŸØç˜G>bé±T+(2$‚²:>𰇙+£Ñ^qvÖßÍé¬8‡®Ýf9Å`䋞ôgÚF3Ó&=ÛóÌÛpÓ饔ˆ«(”«j'&¯šGÕ-Ê–”wöp!»Šó¹ÕØ|ó€Å{“ º‹QX˧â{-›ˆûùâJoáBùBà×S™»ê³ì.2Ûþ"³úö¢ }Œº¯Œé ôd^ig;Æ0Ûé®W0ÙpBÂÀå2s\d|U “—ŸçZV%k[Ù›T€ýéÇìK)âJA²%åíÝXŸÉ 8!—øçØHÁdO;åyob>Ûnå³#áô´«×m ünÖ®»Æü5±Ìq¼„öÊó讼€®­Àî<ú1ÝcYà‹‘ÇUŒ×^ÃÔ;3ß›,ò¾±¼¿ÈK°ù&¾}ÀÑE8ŠâÇà})‹M$”4Ð..”\ÞÈÉÇeÄç×°p_f»ï`u(…tO+o`Mt¦Xâ¼|‹(®hdäâ(–o‰gɦ8L¥ ¸ø”g30 NÄCüÑ<øº¢ø"¯ë˜ûÝdéñmiW%`/'g½ó®ôo³bûlvÝeÇõlˉ»Ëol»žCDj1‡î—‰2ëZÙ—‹]T:;ã 8û¨ÙcÙÁdÎf”“&DwÜÊcÃÙG’¨Z‚€°osû°–‡‹/Þ|Nvsªþ>JZ;)éè¢SÒaÌ“r–ïKÆqß=ö$ã{ò1þç2ð8ö€µGÓð–Sw?œ†ëTœ¤=p'¨G¥Äˆ+±¹5¼x£lI~c'gžVÒ3ðZbd€ð;x ÙS7 a—3O¼ö”7]oA WL6SNóÀÝ’Kë¹&%Öóíƒ2ö$r!³’"É÷+šùæa 'ÒJÙ|ö !W²8™ZÄ®ØlÜ"îãyä>>r’›N¥³U,èõˆQ²F6[b¡²£›;Åõœ”S.hhçEK'eªNÜ+ÆRÞõ‹ÍÂ/&Sµçžàq毻߂@s[—³+yÑÖÅóúV‹ Ý+bï|É$ŠŸÖ‘XÔÀ£Êf ÛÈdT¶p,¥„ ’oJ <’P€Ÿlêu<§|5›qÏÕ¿sZRf¸´9’.¯äTã)ñ`}2M×rÔ‡sV,)ûœxXÆ:QÞ_2B*øfýíƒY+""bhqùÕ<,o"YN(±¨N°DÌ_ÂÙ§åêMd¼BÊ© º^½¢²½‡›…5Ü«Ý)¨çª¤ÅÈûÅì¾ñœ}âGÓJ8”RHÀ­\ÂÄ…ªäý†®^Jš»hìé7j§´µ›v©Úû_Ñýæ u2_ÜÜÉÅÜ:I«ÏènmTTÚª®>.•tÞØ/i®‰sٵܭê&C÷*;I*m EýqŠq¥ŒšV2ªUÜ–ñs™âËâçÕ’=I)k$6¯†b­39U„Ë©¦U6‘*î—PÚÈMÉB)2×ÖÛÇ…ÜZ2kÛ¨ê7BuÝ/©î꡹ÿ ·ò«hi¨WÏI ¬º£Ç¸WTNRI5/¤|¹ú4ÿãá<ª«'O2Y’(—PÖÀó†6ÒEù«5\z^­&pþY7 j‰y^%s-j+Õ÷ôÑò²²Ö.) ÔÊ]–5׋j¹©>fõ(±uO,³H,ÿB ¼Y}XµÝý´É%ØP_£¨8´ åæñ›šÌu±ÃÀi–=Ð4YÀsCìBÉV5RÒ·e£k¢€¢Èe¹âä4…Ø]Ù4¾¤ž[R*¤×´ð¨VEEk9ÍíbÕ6yn%AÞMr÷©? îW7sOˆ(¿‘,qw¿J”dÖµQßÛOMk;õ5oA ¸¨„‘ a² û]¡,ÛìÇ’õnx† !;Öì_MVs•²6½½—49Í´:Q@ò¹Ò¦I›*Ufš$€Ôz%í]4‹ÏZ:Èä¨:xÖÔ.µÎ![#c¹-íäI&ÊWuI¹ÑEžX¯TbK%.TÓÚJmuµ¢âÐJ^¼à·ZÚ,òpÃ|“7vÁÛ±Þ² çP?ƒüåÙÛ'®ŸÕö[˜\`îºx„Çq ö‰²µZ+¶ ¥úÞ^!Ð/mŸÚ…êÚÚ…À[X °°aïÿœñ‹ôÐ÷´fîz´Ëó ÆÍ›Î¸ùÚŒ1˜ÎLLwXbìcÊÊÐ ¬ Ù†åúuBz)³½Í™åmÅ<¯¹ûë³b¯•ÔIÇñ9quçØr"‘m'äR;žƒëž,\{…UA‰Ä§©È,’ÏH……ˆ$;Ú$Î:ä¹^>/+^”«Ç‡$PP >ø'>Ÿ4ŽÏÃu4e0“Ñófò•¡_ÏŸÁ˜ù:ŒÔÊSC&Zè£i=]ç™, µf¾Ÿ9zk 1±cIˆ3Fþ6BÈã@æè2Ç_‡UÇ,¥FÚ+Uëzlö¹âpØ–Å{V`èã‹¾Û æyœâö“ÁÓþ¡Ô¾M *Þšã>cŠºÿÅT †kið¥Ü_èLáË™šŒ[<mg+f¸Ú2e…Ó,™fkÆt3ô×Zaàe·-ó6;¢¿~%zžËd“¬fc,Ö YŽž—†[-1Ùm®çt,-eÑ>s¦˜`lÊÚ3 ‹f{ä-Zš‡&_ϰ~áÓEY­ÉjE•þpéŸ*D¦i0BO‹/t¦òÕ,mFÏÕcì"Å‹„Ð<Æé£eoÅ›¥LZ¶Pbi):ŽVâ†Vh9Y2ÆH¯çÌàkÃè®^Ž®£93ºÎK1ô¶ÇØoÆ[Waèo¦‡)S6šñ{wm4ÖšÒÙ2XM ¨”aÿ>¯ôDA{FÏvPãë9NŒëÌ„ù®L^àÎDCW4 œ™,cSç¹0ÍÈ-c5¦¹3]0kÉŒl·²xUF+ýYêŠoÎßâr§Y½ý$>G®H<Ü ðÔmö\~@dB&îåp;½¹Ñ³‹šÈ*,GÕØ ¨ø ‹ùûO¦2Þxµ­#ãDic'&/vc²‰(¿h5ÚKEQ OùÌÜ„ÎòMò¼…9ÎAò¹¹…ùî;°Úzùn;0õÙÏÁò€#Ø„DaæÛÐH\žÇfÇIV‡Eã¼'š Ó·8ŸÆÁ˜D¢ˆŠ»O\J&÷žððYw¥MÊxNcí[\dÏó%>Ö`Ô\9ñyBb¾ ã„Ì$3w4Ì<˜dî!Áë.íZ¦XmDkåf´¬}äã=#÷P̼ñÝz ¯ý˜y…³Ì÷æÞpÚ~‹‡pÚv § ã¬”ñMûNã~ÿƒ ;sÍÎqá6áÑ·Øþ6qi™œO|DJv!Çã’å&þ.ˆ‡ªF³såøX“.Œ˜ëÈ(!ð•¡3£ÅEF¯a¬‰;šË|˜iˆ¦œ¾¾Ó6æ¸c¸:„9ŽÛ0”gC—í˜xîf±G(¦ž»°Ø°—¾û1•g ï0)I¾ÅcÇq·a•² 8†÷Áh6E\dשì=s“ÐSqâB9Üz˜ÍÞs œOx@sÃwÅÜò yo¤!šV¾hXz1Öl\^^舛h¯ôcÚŠMhÙlÆÐu³бöS+>Ï5ýUÛ˜ëÄ|™3k,ôØ%íNLÖîFÏ!@ê«P™Û. Á>ð¨”&'Ørô"»O^#üÜMq£ûl"ß\Â+ìŒXë8Aß^aÏ™xöŽ£§m0 9rä/ÈÌÉcØog1Âd-_.pã3ƒÕ|!;|¾£L<…7#$PG.t— „†…ôAc¹/S,7J „²@žiÈL‡@´m0X‚ž[芮ÃVf;±Üÿ0Ë|`»å({ÎÆË{»pÞ%–:ÂᘻXú*ó‡X‰­½Sðq:¥”WdH©ŸòŸhñé +~¯½ŒO¿ÓZÊg:Ëø\o9c]1Ë–Ou,1ÛVÒ¡£Œ\9ÛNÒ¨“½+8£kãÃt‹ L”à×X쎶Å:æÚû±H²Ñl»­Ì7\æƦ°³èI¶Z»û$΢¨åºÝbs¬ð;ÄÎS× :~•¨Éă.ô£Ô^÷÷Ju%øQQîx¥ÒQ ”`Jɦô•ÿ:Kÿ\þ¯_ zxÝÛÉ@_·_K{S=- ò9YKåw¥Ä}RþJÆsÔ߀DGGß?T}P>ÌÈȈKMM­KNN®úSܽ{÷Ï””T• nlþ{ ®»3ØÞlÜ‘þŸ!1±*Qû¶ú·e>>>¾*++«.00ð˜èü‹AÕE„ÔßIó±`¤àË¿r(:þæ;ßÉ;y'ïäÿT† û¢^w•¨—–IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-numbered-list_16px.png000066400000000000000000000007471321676412500247030ustar00rootroot00000000000000‰PNG  IHDRóÿatEXtSoftwareAdobe ImageReadyqÉe<‰IDATxÚ”“ËNÂ@†O¯˜¦Ä-.pKžCLV6‚ð @⑤ñV‰O€»Á‰>¾ Y r©mÇ™)T+¶Ê$“3'™ÿ;ÿœ™aB 5/î ÃØ‡†(Šz¹x˜PÏhÕq~©’üwªªª4–Ë%ßÊD ­¹¹@„švíæ­Öí PÈ{r`!&±T,Bþ`¾™±a\À¶mÀOë,ãXFˆÁBD$÷躽Þ3]7§0sUº=eùw@4º 3,J&·À2-¸o·—z°§ìø;èt:4~ärYP”]ZÑÇ‹û`¡^?q´[[9b!+;¸•ʉD2™ àrXˆè-8: ¨Vñ¬¹Íê>>,õ •ÚÔ¾^¾o%Æ&,ø§MÓþõ‘È£òAè6o®R«üF y¢‘XŠÇc|d#²>xHãÉDÂ×(™¦)á7cYv„ç;Çq#^àÇ¢(ŒÃrxÔï÷_‡Ã·é§—þõÛ3¡CeIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-numbered-list_22px.png000066400000000000000000000012711321676412500246710ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÜ -4 Z‚FIDAT8Ë­•ÍNQ†ŸoÚ)¦B ;ÜÊ ô:¼d[@!Ó˜x &Ä¿¦)M‹íWº7ñB¸²0˜ÊOí|¯‹i§„–DNrgæœ÷<ç{ß“c’¨Õßé÷û+ÜC+ __U_?Cûoßè¾Ú»û’D~r·««Ëìöèn¤’˜›{Žó×'”˺ÝÎD%!ñAp}b·ÛI¸@ ä¸;î1‹xàIHžþŸlùÛH,0šÍ™ÔÛÛÛHš.<*E¹\¡ÓùÄîîKÀ0{|ôñØg JáîÄrl4T–@È…ƒ °tƒ;¶K„pŠzBh&Ìn¾Ñ¼R©4L›%¤–Â%‹Ì†¸+íS‰[­6•J™0 q‡v»=Ó¼u®g…%q||LU‰ã˜f«ÅÖÖVrLK‰i.4ažÇ· »;FcX/%ÙÕO™LÆøûj*ñÎÎ J¥Ï77²Q“”Ð+!5 ˜EÜl ØÙ‹"b÷ļLfÇ›ø0ƒ13ˆ%±Ei2Ž>Í4ouuez)Üáz½NµZkkë™Ûås 3Ïœ` ±EÕ´Æ®8k†á$×qÂ@4›¸V«S0¼aH¹ôú—O¤a†ðâââ=Kf–Ãð[½ññé}¼yföÀ$±¼ü$¿ôxéÑéÓâùÅEñO¿_ Å8öy÷xÞ]%_ÍìÊÌzAô‚ øËåzù0^(„ç ó ½“““Ÿgg¿.ÿ71*r?p«(IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-numbered-list_48px.png000077500000000000000000000026251321676412500247100ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d*IDAThCÍZYKdWö_$gÞ“Åm\f`·Î8í¨ Š¸ï‚>¨¸'­¼ˆ‚¢*úâú5£(舾¨3¢¸ïû®•þ \u$FëÆ.øèÓÝu«ê;uNº·Ûê¶l Ÿ>ýîøæM¾“«kþk7·g‡½9ŽwÞÞ¿ŒÆÈ«0ï—_lmã{z{i}cƒ¦¾~¥éoßž3³³´²¾N†®Â¼_~|õ*btlŒ,Q~5ÿº ó~ùáÅ‹ˆþÏŸù‚ÍÍMÚÚÚºƒ³³3:==ýîwzàððãyïåõ0 ð¸xggç £££411ÁD¶··ïèHöÙï;OÏÇØÝÝ¥óósþ¨V« nŠÈµJ¥ò9I’ßÚb™‚ä=CY‡3™Lš†\OÇ­”¾1uƒAœ¶mûW\D®Ÿ‹E>?uºÝîQ¸×ëõJ‹'Àý~_+ïOýR©´˜. ó†ìœÖŠF©å,p>Ÿ_ž5o&Xký”¤>.o5 ¬µ^9ÎÓ$Ÿe^·$I¾º®ûÀ €+®ë¾Œãx˜ž¤”ºà•ˆ,ØlµZo2w¬”bµÖk"2GòRê–™S¯×k$wäIÞ Ã°¡”â©/ÏL‘%ïͧoÛö®‘¾¥”ÚšÕ*ëìþí'O\®§îF‚‹IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/insert-special-character_48px.png000077500000000000000000000033101321676412500255000ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d]IDAThCí™kˆUUÇ-é¡FE%†¦TT8Zör¬H jœš¹ó~?¹óôÎ06DÔ‡ š™êËXꇡ ‹"²/}ÕÊbÊh¡–&™)2 f¦ßÿ¶Žœ¹÷œæÜs¯ƒXœs÷ùïÿZ{íµ÷yÜ9pçZ[[o.//¬ªª*VVVöZiiéfYEEÅ«jÓµX,¶Ìèç¢Ñè¢ÊÊÊ®’’’ÝÅÅÅ#œOÕÕÕM577Oq-n:W›®2¨=ꣾ&3û ¨ëÈè+~²ººzŠ OÕÖÖ*@ÙAó>Ç-2‚爫>ÌÒIiHËdg8‚²8¬`ALämoÜ====óŒzjcVÃÝÊ L¨3 iIÓ¨ç8îÄa<è‚‚‚ø‘ßÇdQfÁ>DŸã ²£œàèeŒ ÆK…ýÞÐÐp»Qƒ>w¡sJÒ’fMMôž7JfÁt·É¥âÔy|Qâx½QRh-8zÒ–|E’•5šf'ó29ÆÑ.£„ZŸ¸!øšd-=`”ô ÅGföÛÏ’ŸjVµl´Ð àuJŽ£­£ùú¾¿¿ÿr£…ÁvªîÝT·´hll¼Äh¡100pi$9˜8•ƒk3Z8ôöö.@ìeÛC|ÐhiÍ-ÒtûOîG8_`´ÔÁT>å.G\7"-m U.ÍD?ZXŽÑR{ôÛÎs„UÿZh8\a´´A‰®”¦´Ý°™2Zjž›——÷ƒ»|dr”ŸŸª££ãF£¦öööÅhŸ–¶{òM÷³˜/6jp•e,®1Ñ¡D}““3mÏdák”d-5jp0€ûÝ;ƒ{¿2ZÆ@°û sÅ@)Ýk´à@l­ßØF÷-c@ó ¿0¸l£bzí@6€ÝFËÐüÔkŠöGŒì>Ù^‚6€ÏŒ–1°}î7v¼Üeï#P¿ -c@ók¯¨„xr]m´àhiiY„€çÖF¶ö-c@ÿÛÄÈ7¿ÿhjjºÁh©Îß¹EuTF¸Åÿ´aÆùFKzdAóg÷¦¡£%룥2°ÕýŒ"³»åYɨׅ¶¶¶å `ÌçNü†ÑR èéÄg9ÑÔR—YFKøY%ÍÄØ3W®ÑRGww÷B2sܽ˜u´­-¼pÐÊ“¦Û‡ù<¶qãÆ+d¥OßtÜâšZœ¾h”´ÖËîRÕQï â%£„¥²”AècT\X¦'Tff‡QÒAïtžzeòEÛ™ÖÖÖÅFI  ß™™³mß¾ý2£„ƦM›æ¡yÔ eŸ¤Ÿ}l™×"|v-h±1€¿™ú;z¯ Ø iJM”ûÐÕFÉ ÈzS§2Ûâírhp³´HH¼þÓÚyèx»A6Ïßž¥A–vhzåL5Ë>´K¡AÐÛšrJç-»4 Љ X ÷VkJ=ÇME5žoMÓÀóÑU\;¨-Ϧüt4 ýa–Ez=g”yirÜOÛvyð[È5Åö¬5%;4…·Óš’@îf ãZtâò»À.¥ úKCZØ(Ùõ}ÏæÍìq)7ÿϘzM„xˆŒ ¾Ðš“@©¡õï'r‡.#²ÿ‘4dø+µæ$P×Óïâ?öõõý÷«,¢¯ë |Üš<Ã.¦ý/„Çy.ºÉšý%Ìô¸4Ðê´fOp=W”[Ÿ5ùƒl¬ÓžO§÷¨ùÜÈV%šÚÉÊ*8Q__¯’ë±îþ3Ö÷7°ݬD?fYpwi3ó[wtuu-ŒD"' kÄ“ØÙ­ÓmìØ$âZ|‡½þÔ𠘯>ê+ Î}ý`“ŠÞ¯Áž‹ÈÊ»ªK„㻟麜ˆËïbë>#¨Äý쓨ë6]—ów¬ûÌ .é3ý=ÀÏÄÑÈâßä[‘m_ªOP}Û0|yb±Ø²ô§tƒ‘ˆŸéºLÓÌŽô¤Iø‚>ë­$ik8e]¦ô%ð"œ k7ÒLÌd*!¢2v„;¦oêF稸êã¥å6q´û˜=&¬þ\¶Ñy0ˆØfî’CìËM" ,Ú[°!²ª?À=uÜoRÛF³óæüÿ0gÎ?”¡‘Ã"lõ§IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/list-add_16px.png000066400000000000000000000005031321676412500223160ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDùC» pHYs × ×B(›xtIMEÖ ”Dx¡ÐIDAT8ËÍ‘½Á`†ÒÅ`·rÒºÆ`6[;tqDÒÄd±Z &ƒ„èg7Z,Viâ§ß1Šú‹ïvò¼ùžçÀ¯“¸÷`9=0£ò»+n/ù Üô\ϵ‰½UðR>.0î0Ç9‘ÈxrbD™[Õ"[-$€mxÞ÷\9X¯wÆæÍVëù2@´´@°ÂPØiAkÈeRñ€jt&åR€ÁÈ¿&ROåXNO†Ó…4û3¹âÿòóÙôkgŒ‰ªµO¶›=TrK ‹²wŽIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/list-add_22px.png000066400000000000000000000006021321676412500223130ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÖ ,ôû+¼IDAT8Ëí•1KA„¿;OPl´¬,¬ìïJ‚þŒ4!… þI ±ñÛü[-,lr½…µ…Šâí s!1»Á Xd`afç=v†·°À¼…²V¤Ãc>¸jf¾;q`i·Ý Ón0V á™ñ?„57ñ5)ªçw)C“*£.Où2"Ç1o\P˜@ú‰ÕYï&õv ðúéxz~G3agÂΉ„ìl­†=wz·Sœ6÷É_¸»¨ÒɽÂUáÏZ}E“œ¨¶T¬¯-cšG܆fÕ%¼Tn¶7WØÛÝž5‰GØ•æ_§Fé/Ó-[¥˜->†`|ð^4lée'IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/list-add_48px.png000066400000000000000000000034531321676412500223320ustar00rootroot00000000000000‰PNG  IHDR00Wù‡gAMAÖØÔOX2bKGDÿÿÿ ½§“ pHYsHHFÉk> vpAg00ÎîŒW{IDAThÞí™ÍEÀÕÓ;û!ËòáîÆý"àA½z㤑‹h¢ Ę01xӃѓÆh\þOÆxñŠ4ÊI8^@]Y\d€Ý™î®*U5SÓÛ»Ì,gH¬ä¥ª{ª«Þ¯ê½W¯{„Öš¹ÝVà~K؉A}ãääøè{»wÌlBHI„ì5ü>¿@¹Z;pêýwÎuà‰ÝÍõ„-õ/ ,Ü,°\Z¹ï¹;°uë&''[î_,‘R’$²7”T|ô ä ?€¼­];Àãðs“yFJI"“Pàç»°¹sÍ2`ë‰AÓ_kݱèHr‰‚D¯–Xƒò"¶T’$é‘@¬!T #9O–b全W|Àˆd³ÒW߉LŸ† õÈø54 „«¸Ñ­wªÒ(-¤QÚ @d»™P$½bBR¦<¥´•š§¯TÙ+ç@©Ü8Q˲¡°Ò môQªÊå{fæþø«xN€ÕW)c>=ä•\I@R{˜³ b»%IbE>œëÀÈ®ý;€Ùñí[_èÏ{™d`2Ì 0í@ˆF{xóH}ŒŠ´J+{¨)Hræ|pRJöîÞÉÌ#ã³ï~ðñ¬¨gæ^»>¯üzeŽÏ>ýP¬ 0351÷ö‰c<:1¾*^KöìÙSCcB©;}cm¢Ï€2æ011Á‹ŸÈ/ëz~~žk×o¬¿3“yù¥NXRC%1±? ÄbÕü655Õöxsss™NŸéG~ì(.àɯm–j3T?[í uŸ°uŸ€g>¡ðÚ1¡ÿªhì;ƒ4©†°ix˜iBñªç»†Ñ"z¨Ѓ;Ð @Eí9ññMÚÉèå—¶và‹g66ɽÎé!¸ðìÆÆ.­”¹½´¼>ÀŸ×8|ü$#ÃÃm ~ùê5¾ûêó{ö›2õÙ³g¹<ƒR¥ŠÀ|©kNVßûòÌ÷wK•Ú¡u~9w¦µOk©rðÈѶ¾Ÿ>}šo~ºÄâí¥·î^¾tª•gÞ<öZæý®|Ü¢­5ZëK÷;V×ü÷è@«Îü/Ñ€8ŽQúÞN–ÿº]êç€RŠ8Ž)WÊÜ.øçÖ-ŠËE„ؾ}£££LOOgžÏ~}c³k-Äê¿uZön­µÐZ#“„bq™¿Ù·w_zÐôǶŽ­uäÖP:íå™`!˜÷Ír¥Ìèè˜S2Ë´„WÞõ†ÍPˤ°ÊJ«¤\c\Ôäóù,e„×Çí€[±è³íüFTTy"  Ä@B㣞ƒòukñs!×Á)žó$´Òg% Cv륕4<–’âJu¥vçfØ, lajÄ¥AêæzN¤SnuôýV6›¬­§áWnQ^*|+k•mvž! 1h!ª¶öWÜ›©ëz7|'u¦âÄ­º[y·úCÀÐù Ùµ¿5íGW+7çÏÛyœ?ùµoM+ž.BkÝõ “q«Ÿ³Š»p2`¥/5©+éÕÒ®fÕŠ3Š•*Æ„"+‰7ŽÛ­µn 5±ï°¾/8 Û3ÏŠí*%N±ØJä]Ë”ø‘§îÄu¥Q188¸V4r;”ç+iÌЩ¶SÄ)Y_Y²Éò¼çs×j5J¥ccc~Ì÷;K¹,ÅÓ‡ÎZ§ëz÷ï9†ÖšmÁÁm—?qW%tEXtdate:create2010-03-04T14:16:51-07:009!oò%tEXtdate:modify2010-03-04T14:16:51-07:00H|×N6tEXtLicensehttp://creativecommons.org/licenses/by-sa/3.0/aì¯QtEXtSoftwareAdobe ImageReadyqÉe<tEXtSourceecho-icon-theme©L·S4tEXtSource_URLhttps://fedorahosted.org/echo-icon-theme/ˆ2.CIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/list-remove_16px.png000066400000000000000000000003671321676412500230730ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDùC» pHYs × ×B(›xtIMEÖ ;"\„IDAT8Ë푱 ƒP†¿iÜÀ:+è#­mF ˆ­sÄtˆÔ¶"DóîO!ʳ³3…ÿwûãæ&ÍÊH6暺¸¦§`˜áøþ?ñ¬S-ÛF䀨IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/list-remove_22px.png000066400000000000000000000003741321676412500230660ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÖ ;w(®{‰IDAT8Ëí’± a Fß6n`í w#8†­­#ˆ¸ÀaëºÀÝÖ¶"È]òY؈Æâïó ÍGx !$É_ÊwÐnN=ÐTz†þ¸n?ƒYÐÔ¶+FM¡IzWvÝùg‘HÌýi\o$p.0æ09˜‰É…;,ópp$öÝ¥úùUIRÁ Wb1ÛO“IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/list-remove_48px.png000066400000000000000000000045641321676412500231030ustar00rootroot00000000000000‰PNG  IHDR00Wù‡gAMAÖØÔOX2bKGDÿÿÿ ½§“ pHYsHHFÉk> vpAg00ÎîŒWÄIDAThÞí˜[o\WÇkïsÎÌØã$Ž]â$E¢7 „”¦-P©¥¨PJ¥äè7à ð/R%ÔO@+ñÀ P¥TB´¨¢PõJš6EUBZ7¾f<·sÙ—ÅÃÌØc“˜Þ­H^òÖ>gÏŒÏÿ·þgo­½EU¹’Ãì´€]€° °ÓvvZÀ.ÀN ØØi»;-``§|ÐH¶<ö»?ülj¢þUö}´ÖÑ,ÅÞëz¯Q !àƒ'ø€÷/†‡¸_. ðû“~áØõŸ>65Qÿh¥«2ÚHm½õ!œsë­ª*Ξ= ©Ë;pxîÀ±›ŽùhÿâÑG¥‘lNî&€<ß{æÝýÃÄ@Ý@Ýn´š…Ì@Í úÌ@:Ö4kÀÊ À ²ùª°/ƒ›÷ÃÚÚºÞþ¶üî³bd r" ±¶e ³c@2€O†@FÀÅCèpŽn Z­éÞÙmBx϶F…"@ 3tcP3›]ÙäÆ'Æ]`ä n·­V‹æ'òíðï`ÝjÀÅAëù¸Ì Ä¿NÙ0óéPøºcÙ‹¢Bs¨2Ïsʪº<@x\ΕJ¡ÂŒ&Ã̧c¯Ïú<ºp©90SÛ¸wÎmçÀ‡°Õ™ ƒVÅq<ê…† Ällü®ÚàÃrà])„áÿ 7¾ÕM¥Äû™ÄwTÛ„0‰?®¸²¡ ´Æ‡.9æïßi¥—ŽÒ6ˆÞÿ|ÓøéôOñK]ët ‰7}y,Ûýï­lùîvãÂ%~Š ¼|úõ§Ÿüͯî¼,À•Wü†f`§ãŠØ´ŒŽ¶w1ÆM½ŠjÄ9Ož÷ñ!’÷ºtz]Ëd½Isïšõb >м`ii‰"/±©!IRŒI‰±„(8WRVk‹‹¸0¿H»Ó¢×éÑë÷±Ö2wpŽ#GŽpôóG™;8ÇäÄ$Y–a­ÝX…œsôz=zÝ.í^ÔŠPáóï*.®µéöú´–Vh_\à•5–æéôssæøäÁÃÌͦŠI3^;}ç«‹‹”U ©LD*§ ÌD8_öX\YañÂkW©œCcÄûˆÌÎÎrü–ã<ñ§'$K ‚5 b̺çß>Ï›o¼É©S¯2?Vw…~¯D£bL¤,µ«­U–[Kt;e§À»œ"FI©5jìÝ3ÉôÌULÕSJ±í.+ù*½…¾·ö‰Ïx[ÃùB4JÎé©&}_jžWÂXy7ªJÛíˆò­oß«·?ÎŽÝă~WI¦2:xüñÇ8yòI^|é%VW–©ÊA]”e†Ê;ô+"~O +¾ØêêËË"“Õœ:{Ѧ­iÝ·ÿ]ZºJúKK”Yª Ò¬Yfg&¹úPKü©=Ò¼ç=Ý|N¿ÿë6øE*Š(èØ^lÐ `¬•ɉIffg¸ö†¹óË·ëm_½ƒ‡~xBDUi·Ûœ8q‚ÖÚ*§Þ8MÏõe&ÝÇÄÔi#3öc´÷³wÑÉáài×066HŒAÅ"Å„ô« =W¨j‹h¦qaX%âJ/«ËkôuZ—Ü›ÚÕ>“ÎV{úˆ"¦•h¢h)•Ð*”.ˆA5Šw*Í©Œ‡~Dï¾ûëΜ9Ãÿø#só¹&ÿ>°@³ŸH÷Â^a¡™”ý"i6ëV5#¥¨Ô$F5ª‚%U£ˆ-=ä…•#Æ‚¾Œ”š‡’*ª<Я”N!¨•Hè ¢¢"ª£úCPéKëE´êhP!1kt° UÕ$?ØsÏåÏ'Ù©©´*°Ö‰ ÒOê‰Ió¼c0µšÁ8‡A"8q@i'AòXQ%±t(´À)ÄíÅ@è”ZFW¨UQt€ÈXM£ 6BB$`€GqAT‰ACM–_—¿?÷jR¼Ó­Çʦ!FMž“¥E¼j!ZRµF4Px¤RU Ð+׉äÞÉÀñ€H¥È ¹RSj%RQC)ÕE R!Ž^û\·Ì8¼ŸŠ¨hLöNïg*3ñ­ÞªIó,Õš ˜Òd&ÄhD„A¶Ò"•¨‘hã„I#DCèkMJ5Ƒڜ¢©²@ â(½Õ^Zá½Cñüà`\Üæc½Z_¤€®~J›µCñ•œ¬z\yÓL5Ñj$ZiK›˜L­MH°5ÁŠ×ˆºša¢È#£øB‹V? *ª1RHE¯Žj”Áq„¨âС¨M+Âèó0v­ã°¢ªœ;w–§ÿòOýõ)ž?÷‚|îµÿÈügÛ¦êÞ"½þ‹"bI¥®©ßg“47!½Š Ù/«-T”¢.ø<“UNkáíøvÚŠïåz67Êüi”‹è%„oÝ ˆŠD ®×ë\wýu|ç¾ûâ7¾y/7Þpà×ï³¼´Ìü[çyù•ñì³ÿäµ7^¥Ýj‹±VÓ$A‹JznE¤ßçÐg®åõgÛäz7‹e¿>ht 63”g‰µ’!J$ª¢ ‚A#˜4%±Õ„ºÉR«Ö&š&–t"ãš«¯‘/Ýv»Þõµ»8zä³33ü<‘lŒSù™~%tEXtdate:create2010-03-04T14:16:51-07:009!oò%tEXtdate:modify2010-03-04T14:16:51-07:00H|×N6tEXtLicensehttp://creativecommons.org/licenses/by-sa/3.0/aì¯QtEXtSoftwareAdobe ImageReadyqÉe<tEXtSourceecho-icon-theme©L·S4tEXtSource_URLhttps://fedorahosted.org/echo-icon-theme/ˆ2.CIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/main.qrc000066400000000000000000000212001321676412500206610ustar00rootroot00000000000000 back-to-link-style_22px.png back-to-link-style_48px.png chevron-down_16px.png chevron-up_16px.png document-add_16px.png document-add_22px.png document-add_48px.png document-new_16px.png document-new_22px.png document-new_48px.png document-open_16px.png document-open_22px.png document-open_48px.png document-print-preview_16px.png document-print-preview_22px.png document-print-preview_48px.png document-print_16px.png document-print_22px.png document-print_48px.png document-save_16px.png document-save_22px.png document-save_48px.png document-spellcheck_16px.png document-spellcheck_22px.png document-spellcheck_48px.png document-validate_16px.png document-validate_22px.png document-validate_48px.png edit-clear_16px.png edit-clear_22px.png edit-clear_48px.png edit-copy_16px.png edit-copy_22px.png edit-copy_48px.png edit-cut_16px.png edit-cut_22px.png edit-cut_48px.png edit-find-replace_16px.png edit-find-replace_22px.png edit-find-replace_48px.png edit-find_16px.png edit-find_22px.png edit-find_48px.png edit-paste_16px.png edit-paste_22px.png edit-paste_48px.png edit-redo_16px.png edit-redo_22px.png edit-redo_48px.png edit-undo_16px.png edit-undo_22px.png edit-undo_48px.png emblem-favorite_16px.png emblem-favorite_22px.png emblem-favorite_48px.png format-case-capitalize_16px.png format-case-capitalize_22px.png format-case-capitalize_48px.png format-case-lowercase_16px.png format-case-lowercase_22px.png format-case-lowercase_48px.png format-case-titlecase_16px.png format-case-titlecase_22px.png format-case-titlecase_48px.png format-case-uppercase_16px.png format-case-uppercase_22px.png format-case-uppercase_48px.png format-direction-default_16px.png format-direction-default_22px.png format-direction-default_48px.png format-direction-ltr_16px.png format-direction-ltr_22px.png format-direction-ltr_48px.png format-direction-rtl_16px.png format-direction-rtl_22px.png format-direction-rtl_48px.png format-indent-less_16px.png format-indent-less_22px.png format-indent-less_48px.png format-indent-more_16px.png format-indent-more_22px.png format-indent-more_48px.png format-justify-center_16px.png format-justify-center_22px.png format-justify-center_48px.png format-justify-fill_16px.png format-justify-fill_22px.png format-justify-fill_48px.png format-justify-left_16px.png format-justify-left_22px.png format-justify-left_48px.png format-justify-right_16px.png format-justify-right_22px.png format-justify-right_48px.png format-text-bold_16px.png format-text-bold_22px.png format-text-bold_48px.png format-text-italic_16px.png format-text-italic_22px.png format-text-italic_48px.png format-text-strikethrough_16px.png format-text-strikethrough_22px.png format-text-strikethrough_48px.png format-text-subscript_16px.png format-text-subscript_22px.png format-text-subscript_48px.png format-text-superscript_16px.png format-text-superscript_22px.png format-text-superscript_48px.png format-text-underline_16px.png format-text-underline_22px.png format-text-underline_48px.png generate-toc_16px.png generate-toc_22px.png generate-toc_48px.png heading-1_16px.png heading-1_22px.png heading-1_48px.png heading-2_16px.png heading-2_22px.png heading-2_48px.png heading-3_16px.png heading-3_22px.png heading-3_48px.png heading-4_16px.png heading-4_22px.png heading-4_48px.png heading-5_16px.png heading-5_22px.png heading-5_48px.png heading-6_16px.png heading-6_22px.png heading-6_48px.png heading-normal_16px.png heading-normal_22px.png heading-normal_48px.png help-browser_16px.png help-browser_22px.png help-browser_48px.png insert-bullet-list_16px.png insert-bullet-list_22px.png insert-bullet-list_48px.png insert-hyperlink_22px.png insert-hyperlink_48px.png insert-id_22px.png insert-id_48px.png insert-image_16px.png insert-image_22px.png insert-image_48px.png insert-numbered-list_16px.png insert-numbered-list_22px.png insert-numbered-list_48px.png insert-special-character_22px.png insert-special-character_48px.png list-add_16px.png list-add_22px.png list-add_48px.png list-remove_16px.png list-remove_22px.png list-remove_48px.png metadata-editor_16px.png metadata-editor_22px.png metadata-editor_48px.png plugin_22px_1pips.png plugin_22px_2pips.png plugin_22px_3pips.png plugin_22px_4pips.png plugin_22px_5pips.png plugin_48px_1pips.png plugin_48px_2pips.png plugin_48px_3pips.png plugin_48px_4pips.png plugin_48px_5pips.png process-stop_16px.png process-stop_22px.png process-stop_48px.png split-section_16px.png split-section_22px.png split-section_48px.png view-book_16px.png view-book_22px.png view-book_48px.png view-code_16px.png view-code_22px.png view-code_48px.png view-split_16px.png view-split_22px.png view-split_48px.png widget-close-16.png widget-close-22.png widget-close-48.png wrapindicator.png Sigil-0.9.9/src/Resource_Files/main/metadata-editor_16px.png000066400000000000000000000014041321676412500236620ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÜ  ;4$Kã+‘IDAT8Ë­’OHTQÆ¿sï}ÏycŽ£O,# ÍÊÕΈ²E´+RÚT»¨]›,¤­\¨iD-ÚHR´iQä:GHSÇÌFrÔ3gœ¹ç´xJ‘³ìl.î÷ßùüÏH-®ÐÈȇ¢õüœ9vä,m}z¿/”HLöÌÎ&‡&&&bk ´µ]l©3?æF ¶Tnmø2x7Ðñļï~}‰ˆrÅ›J¦|ßߪ…ÔL׋çñ¾þÇ(/÷ïH&“õ·Û}¿X)8ÆÜÞ´C†Ô[""íì6Æ@k™™é“Ç[N´ÇGippð­I¥Rð£."%Å0öŸ:D¡ˆ— …=»¯å@d Ù8°«+”ɬJ,c"âzžk-¸²ùüz‹ú—Ÿ fÖÈÙœ T`À®ãº`kAD`–|3&`fh¥À,¬HÌ츎C–-@ë yõaˆÒ`›³ ˆk™ŒcÀÌ ‚¼ ]@4,³UJÙlVie Â$Ÿ^ þ@ƒ­ÍÂk–ŒÑ°–ADkµþ ª‹µö3“Ö̬Ê1ôÙì*Ö‡¼6«µ Òé´*--A$RÏ+ÄÕÊ  Ú¢§¡Á­5”ÒY" î ªª:tãú5rE™_‚öW—QW·S”1äº!°µHÎ~‘î®»4•˜ÄD"‰¹¹TA$ vó}yI?ê}xx||ìÖØØ§ÆÅ…o…eQ§io#­¤W0?¿€älŠ.g2E‘èRyyÙ窚ê›w:_ôôözŽãVxáp… EÓéŒ?2oŽÇc¹Ü*U×ÔþªÝVû±¡¾þMUuÍøžÆ†¯D$ð®Ïîš IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/metadata-editor_22px.png000066400000000000000000000017731321676412500236700ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÐHäI pHYs  šœtIMEÜ :’˜°ÊˆIDAT8Ëå”ËoUÆ¿{f<öØqÇŽm‚åŠØ**¬JìX@P7­ÄcƒPEwtűAí¢ª„E]€„ (bEBBUy…à!5ñ¤~%©¢Øã±çÞÃblÇ“¤áà.FçΜóÓ§ï~w€ÿͲ¬â%Û.WWÿ~áÐÆóçßÎ;÷V¬âòÙbqe0°h<õìbèDeQ?ñÏsƱg¬âÊõÆ]Ïëz¶m/[Ö_¡½<êårù#©¸±üÇMÇin¾77÷àU»\jýòóO%Ò´d!I&¾H§ÓG£Q3¡iº–Ëåæ!wš×¿ûÖ. w––Ný{žgœ9}Z`n&Òl¶º¦™Ùlv*3w_¢ß7‘ÏÿÑ:úÄ““…B!gÛëÓ ©U*¤’†`0àäå×ð廟¹¡°Ñ}þ¥Ø0•™a<×AµZE2™t`ÿ{Rz€èÏùàÌl§.¿6Âb˜ f† N§!ü¡aņ®‡ ¤ Ä›SgûKO5÷àB<)!„à=ŠUX×uH)!z`¥øÀ‰¡š™¡˜ADýY/pxÌÖuJ)û÷ZÌÊ×MéyûÀš®kPjW1cÈî{èfV=?|+˜¹+ÅBÓ4(¥@´{xâ òÐ+¥¸— Ò“ ¢ XJID>x ˜Q+ú`Õkô=ffw/XQŒÛyÌ»— Bº¦A ¥ ðAÉ`K¤¢/ v÷x¬ˆ4‚b"òPíã¶wÚpZþµg¥±”Òµ9VJ ÓŒ¢ÓŽ ™œœ}åÀȽ1}`àªû”t‹ÅЉ(x¥§¶ïn!EÇ[Çûåõ·Þ¨b­´Šz­HŒ%t௯]£¯\i.,,ŒÆMÄGˆÇL<úØã˜Ÿãé´ÿ· ‰%°¶f¡V«âÖ¯7q§RA»ÝÅo·Šøþ‡Èçó»VX–EÇŽ¸V©©7j¯V+µ#ÅÒZô÷åO#QÓ é©û13; Çq°µµ‰ííjõ ì4Û¬ëF;>šh9Ý•êÌìÌçéTêâ ê.\ÔGâñ8€ 9ãÌŽë¦íuûéu{ý‘RévTÉ.§ÝÉÉÉÍT*u#“™øÆ4c¨¨kš¶ýòK/zð/uo¨S&DmIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/metadata-editor_48px.png000077500000000000000000000056341321676412500237030ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d 1IDAThCíšyPÓéÇm·ÎÔvìtÇ¿v¦ÙmÇÝvÛiÕõWD#á!œ"WH 1 BÐÕ®uÜêîŠbW\dz  E ŠTD±²¢Üxr†óéó¼I ‘„C¥¶3û̼C~¿_Þ÷}>Ï÷y¯_Xô½½&³¶¶^¼gÏžÅúË7oA!¢wÒP^Ô6¡³T¸D{ÒÒÓӗܽ{×þùóçòÇgôööþûÙ³g;ô߬I„Á²ÈÀŽhi0DI·‚…ÊÉ®©3êxttúûûYg(9{ÖÛ7n›&„A)ô3ðóâB€¯û™9j“ŒÚ%€®®.ÀñÂ»KÁÍ-¹îÈ‘Ðë]6µ¨(µ‡#•ê3V"B <|øjjjØ==D¥zÒ«££Ÿƒ|ÀÇ}lo™ÀA \ÛÕ+7ic6Tv28dÎÎáàåµ½úرK²sr"€]¬‚1À‹ à4Èrvdd rrÎÀÚ•Ëp{3r>ÈŸ+ÿ>*ÙÂÚ08?_xxÄUgem6 T&Ûs¹Bˆÿ «0›CCC“¤Ahâ‹¿îÛõ¾³Øo\«ÿøk8w&›Õ'{wwUus³æGz—MHs³)ÐÙÙÉÆ •þþ!¸~ý_”¨‚#Gþf’ÇÆÎÏ@3Àã)«’Ìàp°0Ó YŠÀõêëïN­Ð|ÿ>Ï>‰pOY½¡¡aL±‘yÐgƒ€««²ú»ïÔ–Ræ“B@³PÿhqÊÒà :Ú70„û œ>}žõNEl.uË ¨n74XÀr4V`ttæÂÅ †1ªPUY‰iS‚ƒøïpüX&d|êìÚ¡8¥4 JVŸl6ó)4 («[Z,(ÉŽÆ Pƒ3ä=tð+øà½¥àâ°¬—Çfð¸ëÀ›¿ <ÝlÀÃu#üæý¥pâøQöý—áb¦¼”d &FÍ™€®ñ“ÙYà¸ñcPàæ¦NC¡-„T€ºàØ®‚¯Ó÷³ïÏ`>…t>>1UÉÉñ–t)´›U13)p4ó0|²úCt:€96µ SÙ&G›á(ÎHd¯àå%¯*))xKﲩ))\.7|Þ)tüÛL°Ý°ܸ0uÖãÔÇd+!‹ÐdÌ`ú:0NN"Ü I«Š‹/YØÎur ‡íÛMÌí…€ñÀÀ N‘ƒ8#iáñ“'pøPx¸l|es €@0@LL’“@—B³)`XhÃG‹M£ý"p±A¼_;¥§§¬Ò"€\žà<€·]Ð;HWŽK£×`HS¬… „Ï »]0·1`¼• €®®n„èWîÂ̪@ll ˆæ•B´› ¯€¤³InYˆŽV»ÌÀ @'`‡ ©ÀT åÏ 4 :h:;>…t1· ‹,¤N˜‹&4ˆ`ŒàfîV^Þ:Kc ÙU7ˆ_"…&J1v¤ärã+’¨wÙÔ¢¢,ÔÕÕ±{ÚÛLâT€ììTd@©Lá™0·¿ ÚæèÔp3 4™k M,l ÙÚÎÀáÀVe. L[LÎ €)Ä'¦Rˆ´´™{Q¶•Àý9›•© º/`P Ñ<€\®FÑKèÞ¢=‡ÞçÀsÚ€^“t¸!€3§O°6 6_:lÙÙÉnĘP(Ô|.×ÀÒ«EÒ–º ½Zlll_£‰ôjÑÇÝR4qئîý§9›;˜7ŠSc`&h7:€Ú!-ù ð@cŶÒÁ|<•霧Bg*ž®6ÀÙ´Oo¿ƒ¼Üó“í·If`2G‘ÅÒ˜N£ô¾Ç°QgôLw €Ñ± ¸Ú‚ŸgÒYƒóSÅ7i<¬Çãç78ÆÆÇðW«Õ²öIY û€ñña=€¨/Í+ TÀÔ &G)Ê”ãõõõ“2EŽž`Zðœ¬0uìÙ»PIxKs…~ü°ZõLÛCÃ#Ð…ƒžÚ0¶'x²khh`Π@—B–ðDæC ¤¦~Å*‘ÑpýzäææÂÙ³g!//JJJ˜"$ñðð0û^ÑåX»b{êl¿Ü8ëñhi Îvk0mV¯ùx^¶Y÷næC[{;‹4µÑÜÜÌÎÀÅÅÅpñâE8þ<\Æ{5LƒÑ,ääz ?šˆŽŽµÂC3$&îÁ¨<Â(ÔBUUTVÞ„òòpõj 6\.\d0 ªª*<ð46ÔÕ±RX_|±ë\¶¶‡pòÄqÈÉ9 /œ…ÖÖv6ÝR (0çÎC§sðsµk¥PQQŽý–Cuu9ôô<Ä6ØAä5½»ÓÍÁ¡ð­ÐPenP8úIGŸ~º23³ ´ô ܽ[‰Š4`ÄpãÆ (**Bγ¨UW×ÂóÞ~À”hGýF1 µÚ¸\X MM÷¡©¹Û*E˜¸té\¹r½‰)Z‡c­ž•ÚÚ T>¤§g€Jµ<<"1ú–Ê@½»æM*U¾-k4aašOOE—«ë6<ÊÉÀÕU>>Q “i`ïÞƒèôYŒÐ tª¡™¥¥%ŸŸ7Ë+جµÿ~–———j\e…mjªÇL/‚«1E¯Bvö)ÐhvH”€ËqÛ,G§·a¿Ò1_ߘ氰äSBaŒŸÞ͹ÙÎ oËå«ÈÈDIPPÜ ?¿Ø:O2Æã)0¥ÀçË`Ë–ôŸÁáÃß`Â;·¦g6ÅššÛèp´·7áq£]†0¹,ry2xyɘ³..ÛØ_t¾oëÖ¸ëB¡úöëŸüÑΉ?Õ»ôj–™yà'‰æW2Yâæðpõî­[ãK}}•Ý|¾;'( ½9ƒððxؽ; NœÈf©—‘‘jõ.Ëçë¥ï rLSespðö±X¯P¤ØI¥ ïê»ûïXllâÒÈÈ$R).$$‘TjöðPŒòùÑ,¢As‚]e_` º2$$)]&K’Jã–+•Ÿÿïü{É­TîømDDüf; ÿjÄâD[ï–•Y™?~oÿ—¶hѳ† ž}'AKIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/plugin_16px.png000066400000000000000000000012731321676412500221200ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<MIDATxÚbüÿÿ?% €˜(D±ÄcÅ3prqòèºï44áàýó—áÿûŸ>>»þøñ#ÜÛùþý»¿ÿdØ»w=Ìë7àË—w W®Üçzúøña^^±s¢"¢²2²2**ʆ~.üü\ {÷îÛ½jÕÊ òK0}Ä‚p #ógžýú¥èÿÿ+ LLL ¿ÿf`fbâabú¯œ7iÒ„”ÿ~o:xp›PÃ+.€bAö³³/ƒˆµ‚²j˜¸”œ!7ß¿¿ß¿w÷Ö훙Ϟ½Ç ¬¬,ÏÈÈ 3 €à½Ä%,¤Ò‘˜¯«¯À (ÀÀÀÂÊÀðó7ÃÇ /^þe¸qóþ݇¿³°°þé ¸?|Q ‰ÉWÓS`xóò ýÛR@C™ØØxù8Ù™عDÄ%½8 /´µ¸ƒô<¿zóèñ­íߥ2È=qc`düÊðŸ“áï·ó 7/½a8qì;ÿXþð3üýË Ó@pB”_m+Ê—]Ö6çoH£Ú­cG3èÿHgÐûìÃÀÍüŠAH”“áÓ»o 'O/ú{ùòÖf˜>€Ç'‡©³ Wb:ËÀÀêd,Å8ý^%Ãÿ¥ ?ÍTtŽút=/.ÙóßÁ¡ø {<²>€B0 €‰ACˆ¡$Pžá4ï9Ùˆ Ð- FJ3@Qœˆb 7RÜ»°½G§IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/plugin_22px.png000066400000000000000000000022621321676412500221140ustar00rootroot00000000000000‰PNG  IHDRÄ´l;gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<DIDATxÚbüÿÿ?-@11ÐÍ  š @,0FXX+++ï_?¤¥Å„í³YØY8¾}ûûïã»ßÞ>ûôéõß^úüùÓÙ_¿~_baaýÆÈøŸáë×/ ;v¬›‹3€‚üçÏo°¡ÿÿÿ3‘—W¨aeaåfåáäãçe×àädpúû÷Û7OÿݼyùöùógwݹsgáŸ?΢» €a6pqñ0˜›;2?¾‡h‰<ó?v6v^n!>>~  9yy%U}MKK5 sF66F†Ã‡ÿ>}ÆÄu땃Ü3 €ÀN‡q¼¼"ØÙ9„„ÄäåUTT´45 ÔTuddD„Å89¹¸8yLM-Ë9ù¨÷ÿ™37þKKË"›@ð ¹ ÞÞ ¬,ì ÿýbae3åäæÕcçà–bbfáüûç÷÷ïß¾<ûôáÍÕ“'öm9~ìx®µµ·¾¾:ƒ––NàÓ§ûaæÜ`;{/¨~Ë‹Š•š[Y†ihëH Š3°°r%˜¾ÿüËðéÓw†W¯ß38yÄ2|þø†aöÜ- 2R Ý{…Æ7øÆ«@/k:Ë˺/ •’•åaàæú„›d!Ã_, Â<¼ Ò¢¼ Z*r ïÞ30ܾû„aç¾ ŒLÜl@cXø7È<€B¤Š¿ÿ‹•'JI)20¼jzô‚á×7 ¡¸20ðð100230üûÇÀÀÌüŸ•“_H—ÁÌ2Û÷ãÇÆ  QÍ ón0###Ãû¯Ž¿|Ïà.)õA (ÿûÃ-ÆÙ ŒÜR Þ20<» ú ôû_n¾ÿ ß¿axùô+ë>qA=~~)7˜Á7ø×_F†gonýúv©„AMxÃ»Û §ïØ0|Òâd`æOvο ¦óÞ?ýÉp÷c ÃÃÿÞ½á``gbcxûõ5ÃG§ž=»qf@Á Våû¼¶Ýã]€ø%†ók€ÖîûüVÂõ›ÁË›â>&ŸÌ$¸>cxË”Y2A^…áË—O Ê´0`l,Ë€áˆè–}„¹¸i$ºD³Ä,Æh$Ó Ì/ÙÅ–,.q7&~pav±‹[¨„†„naLê€ÒÒÚ·=Þ ÜÀ[Œþ¯Nrr~ç9Ïóž# !Ø Ø$ýÿÀòꢵõ$Š¢J-Sä+ëpç5ŸB’UÙœLf²ñèrr6œHÌ„âñÙÁùùD*•”e%)I‚ÅÅ®^ý€Õš­u=M*µŒÙÝ~ÙG®Ü|EV4œ6›ÓisçØÕJ‹…}™LŠHd2;2òûØÀ@ÿ¡PèK]×û×G,­Þ`µÚhhxž`ðG‡®§ýcÖ¬šT»Ù¬¹Žo~¾·Ô謁¦¦¶ª±±©bÏžÉd’¸y3˜9þBWw÷åÓ€¾æ2!ÄZø--¯¡ªf\.7~€@`U•;©(¯¡¸x ùy, «ÅVVW×xúÖ­Þ!„¸}{Xùß{œ·– «Õ†YŽyEVÉd³.Y1ÕY4ûÕ¬ù FÙ’ÑÓKKÉ…pb.2Ôûëõ+Ážà;{÷Ökµµ[©®®9>9yÿó Å{¶¹åÑ ÒÅyg[+·Õx]N²badi%C"±ÄôLŒ}‡_g>áâW(öåò`âÞô?ºbxxˆŠòªýþ’C—¿ôН¤Ä†f«&„€å”LžÍNQê@)ÑŒÝýƒk×o 4 é']‘Ñ‘„»íØËoú|[ ƒ‰‡J‚ÐAÓ × 6HFÈfÁh(ª…×vêOÇ;>:ŸK’Dln:8ãP¡oŽ k'¤‡•."i>æf!<é°ª4‡àA,ÂÔä"ŠîÀãÜANŽïàp*#ŽŒ¦’ƒP‘÷=DÇè 5‘¨¶`4€jÉPWy‰Øä wãoq\˜Q &fgŸè#nÈq¹cþ»ÏG5yø:¯¹çg½’;§FšO…ŸÂ\Ü4]¢‰‰Ybc4’éf—ŽìbK—¸?¸0»Ø‹[¨„†„naLê€ÒÒÚ·=Þ Ü@/Ñø\““ó;ÏÇÿyŽ$„`#ÌÀÙÿ,¯,ZZN ( ©ÔE¾Òvw^ÓI$Y•ÍÉd&.%g‰Ät(Ÿ˜›Kô¥RéYV’’$XX˜çÊ•¯X©Ù*X×Ó¤RK‘Ýå÷—~äÊÍWdEÃY`³96wŽ]­°X؛ɤˆD&²Ãÿö÷÷] …B_êºÞ·Öciå«ÕF}ýóƒ?8t=í7³fÕ¤ÚÍfÍåpäxóó½›üþ§Êª«k*Ëwï®—L&‰›7ƒ™sçÎwvu]:è«*B¬ºßÜüªjÆårã÷¶RY±ƒò²jŠ‹7“ŸçÁbѰZl¥µµ §nÝê™BˆÛ·‡DQ‘ÿ½Çy«©°Zm‘åðáWQd•L6ë’S­E³oWÍšÏ`”-=½¸˜œ'f#ƒ=¿\¿ì¾³gOVS³…ªªêc÷?_W¼g›šE.Î+p·Ö?ÓÐR±µÚërz #‹Ë‰E¦¦cì=ô:sñ¾¸L±/—ã÷¦þVCCƒ”—Uîó—¼tì¥W|%%64+X50© ,¥dòlvŠ ìT6ÁèÝß¹zý’A3 ~RI¸[¾ü¦Ï·"1©$4 r`s€d„lŒF¢ZÈqm£®áä‘x¼ýC ã °$IÄf§‚“1úf)·v@zˆé’æcvÂÃ^«šAsÄ"LN, è<Îíääø¬§2áÈH*9ðåyßCt”ÞP#‰* F¨– µ‰M,s7þ÷ÇшÕ`bfaš±ñ^Âá¡àº—9æ¾ûìPôh£g€þo¡ãª{nÆ»?¹crØó®uÞv¬³ÝÄFj1žÀ01?Ÿ`|ì¦"ÃtÏþGϬ£¼ñ¤¡í¼Bç¹k.ë(zxºõMŸß¿”bügèüi KÓ”‹y‹Ts¡{ßÐÓ{öÎÔäÈq ¼*‹¿ĸMÆÐ†–Gó©ð“ç Bÿq¦ á– ?‚ñE$ùm»½è«@`ß`UÕ‘ “I»x×ñï¼5f´Ë¼û´™Àû€ºæ\ Ö^ZáIÿúÒ¶Ó$ÚvšÄ?íÿ³A¿a©ø—¹•šÈIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/plugin_22px_3pips.png000066400000000000000000000020571321676412500232340ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEà*21j¼IDAT8ËÕ•]L“WÇoû¾}Û¾m¡JiÁâVÅ™dl?‚3Ó-#›É–,YL³,[FÜ.X$lÙå$^hbf2o–샋Š5›3ÓÐ$L>ªA@iiíÛžÝSØÅn0ÙsuNNÎï<ÿç9’‚0dÿ?°¼²hi9¢(¤RKø¼¥í“H²*›“ÉL6]J΄‰éP<>307—èK¥Ò²¬$%I°°0Ï•+ß°R³U°®§I¥–"»Ëï/ýÄ•›¯ÈІ³Àfs:mî»Za±°7“I‰Ld‡‡ÿíïï» …¾Öu½o­ÇÒÊ V«úú rèzÚo0fͪIµ›ÍšËáÈñäç{6ùýÏ”UW×T644–ïÞ]/™L7o3çÎïìêºt ÐWU&„Xu¿¹ù TÕŒËåÆïl¥²båeÕo&?¯‹EÃj±•ÖÖ6œºu«g^!nß>ŸÿƒÇy«©°Zm‘åðá×Qd•L6ë’S­E³oWÍš×`”-=½¸˜œ'f#ƒ=¿]¿ì¾·gOVS³…ªªêc÷¿\W¼ç›šE.Î+p·Ö?×ÐR±µÚãr"+F—3$‹LMÇØ{èMæâ.|u™bo.ÆïMý«*††)/«Üç/9xéØ+¯yKJlhV°j`RAXJÉäÙìø ìT6ÁèÝ?¹zý’A3 ~RI¸[¾ú¶×»"1©$4 r`s€d„lŒF¢ZÈqm£®áä‘x¼ýc ã °$IÄf§‚“1yg)·v@zˆé’æevÂÃ^«šAsÄ"LN, è ÛÉÉñXNe$‘‘Trà#Êó~„è(½¡FUŒP-j+.›Xænüî ¢3ªÁÄÌÂ4c㽄ÃCÁu9.sÌýðÅ¡èÑÆÂú¿‡Ž«î¹ÏþäŽÉá—v%¨ó´cí&6R‹±èþ€‰ùùãc1¦;xö÷xpxÏó¼Ïû{Ÿçy¿(Y–±¢Ú h•ùÿÓJ)O€aB .gÛ°ÍÚÍÒÚBAªdÓ¥B*žË-G²ÙÔL>Ÿ›„ò M3Š’±¶¶Š«W¿ª¡”5«ƒE±\ƒÊre—ÇÓö¡¥¡‘¡æ&½ÞlÖÛL¶ƒã°W’$“±ÊÜÜï ÓÓSßG"‘/DQœRTZJ™A§Ó£§ç9„B?É$•º¢e5¬A«å-F£ÉÑØèhõxžhº:{{û|»w÷P …›7CÒùóFÇÆ.Ÿ"PQá¡ú£(¯‚eµ°Xlðx¼ðz·¡³c'|í¸Ý[Ðhµƒãxè8}[0Ø{êÖ­‰U2V¾};,»\žw«Ñ*¼z)ª“2àðáWÀÐ,¤JÅB3š Çv°ZÞ©RÓœ$–‹ÅÂj<·’œøåú•Ðxèí={ºù®®­ðûÇb±ûŸ)¥¨ƒŸé¨Ùd¹ì¶6Ù†zžîìØpXÌvÐ GBQ£¸.!—+"±œÁÞC¯!ŸMââçWàv6àAô^BVÛ:8ž%)wîó´¼|ìÅ—--zð:@Ƕš"PhXõ¸š ð{[‘Î wÿÀµë7@©x á1ä+o‹’J¶ }é §s $ƒ¢¡@ "À“ Ì€ÞPj RÔj ËÁdÙŽîÞ“G²Ùátd˜¢(dV¡¥ 6;WàÓ‘þróÔEP¼+) >GLë$ Vo”ñ “ÄRl Œh„ݼ&“óÀ?À‚D!žœ 3ïÃgýH/`2Ò‡œŸƒš|–“츄Llw³oâþ¢ŒtR V¥Ajm‹ÑIÄãáP5ÚªÔkÜnÌûé¡ôÑ>û ¦¿!ù\³åSŽý…KsöçwåÐí†ne™ù ÔÍ'àñj°ºšCtñO$’sû-›MŸ}„} ìV§8²Õé FïÐcùJfÄõðÌÐë­Ÿß_ýýi+JÞ3ðÉX‹v°Z"÷¾ÆÄä¹;‰¥ùãWÀõ M–b; Õ0¹ðuªš?~V%‹A>ÛÙF«~$>/ûã-ƒÁõ¥×»oÖï?ÓhøKÄß¡•òX骷jwžÔâ±¼G>²é6HUoÚ`!Š®ßwø¯z}ñN?UÝß5QÞ*êßè#¿ Šmئ½ ›VŠ¿f[•G­æ&IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/plugin_22px_5pips.png000066400000000000000000000021311321676412500232270ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEá ûÛŒæIDAT8Õ•mh[UÇÿ÷-777/MÒ&iÒ6¦]›u넵]\±º±:‡›bÑ‚ "Še *+UüèÊ>l0¸/‚/ý û°‰ÎáFcéj]¥Ð´Ùè2×4Í{“öæÞ\O:nXõãè8œó<çœßyžç¼Qªªb3„Þ h…ùÿ³Z*N€ã8HÒ*<îæ!‡½ï$(–gõ…‚RÎ$W ˱lv)œÉ,OçrÙII*M³,W (++y\¹òÍ:JÛ³*X–KëPU-ïòz›?´ÕÔr,'ÂZg4Z­F‡ÅÄ· ö*Š„D"Z…þœŸššü1%Ëò¤æ VSÚ ƒ==Ï!üÉLñÒLYÏëx“^/ÚÌf‹«¶ÖÕäõ>ÑÒÑÑÙô¶îÞÝCétnÜ*çνtŠ@e‡JCSúû_Ïëa³9àõúàómC{ÛN´¶t ¡a jíN‚ƒ`lîê œºys‹ÈÂ߈'B žý#“Ižyˆ}ÜÀ$¸2úãóFn³£¹rjØóàôàëMŸß¿*!ò+0òËV¬úN£UMÁ^t‚×[¾û-Æ'ÎÞŽ/Î'И®h²ÛYÐCäÁxØI×ú,­ÊŸ@=ÓÕÁÒ?“1/÷ã-“ÉóµÏ·oÆï?ÕéÄ‹d¼Kjä°ÖU­‹wžÔã:±¼G 9t¤¢×m°EWߊx\úè©Ê™^í¢Gþ]ZŸ¿i?Ȧ¥â2v–AËùs¾IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/plugin_48px.png000066400000000000000000000074171321676412500221330ustar00rootroot00000000000000‰PNG  IHDR00Wù‡gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¡IDATxÚbüÿÿ?ÃPÄÄ0Ä@ yÐ÷@ yÐ÷@ yÐ÷@ºÊ@†¢MªÁÕƒ9vröˆî½‰DD©IkœÔÀ#ðáýõg_¡µí¯ »Q…Ƙ¢Ö:¯¦7a‘–È4Ä^æeÀ½üf„¯NÅÌJ|Etq¨‚°ßùsÎu/÷@,¤øhÐÁ‹-Ìí8Y"¼ ¬lX9~102gøÏø•á÷¯O ß¿}`øñãÃï¾|ùðçÓ§_¿}ûzóׯŸÇ~ýú} è¡«,,,מùŒÍC¤€"ÉÀ) ñ ‘ðg¸yá´gaf`ààbn æ``àdg``ee``º‰ñÐŽü?~|4{÷î¹Ù›7O>¼÷ïÁƒϾ|ù|ú÷ï?;žY ôÇr<@X=ðû÷/ ±¿ÿññóóDËÉÉ3|þð˜AF‘èHV6V fa`egd`:üÿ? ç€1Ïø’͘™¹¸¹¹¤¥%ØØŒ@f1}üøFè™;wn^»vµöÙ³gÛÿýû»’‰‰y?È:b=@ŒØÚB¾¾ÑØÔj033µÓ4 Ëvf «˜™y™Y˜yyxøø…9„„„Ø„…EøùøøDÀ˜““3Œ  ä LÚ +YX ±Å,FÞ½{ÏpêÔ)†0ܽ{w0?UñíŸ? ç€Âá(¬%PíÿÿÀ@ú˜èŒÿÌÿþýãZ$ Ä2@¶<Ðs ¬¬,’ll¬²\\Jrr²¢jj***Ê rr BB’@dz€=ôû7Ä3ìÀd÷þýg†mÛv0lÚ´éíû÷ï3€ñ¸†ˆ@32œfƒôÿ¥‚‰3iŽß¿K±ÐSzœœœ®’’b–úúº\î ššjàXùñâ Pž>þ ôiÓþߺu#‡••u>Éø͹°ÒB3‚=„ðÄS µÿþÓü—èùŸ?:ñðp[[›¹æäd²JKË0|ý ‰ f`¡pæÌE†ŽŽ¶7ÏŸ?·zâÈäãÇ÷b¸ €Hò°øÎ Ä,`Ä'T BÌÿL*¿@iTÎÿþýƒáû÷ï`þ§OŸõô´Ï;›ƒƒll ¤õaѢŠ3fLm–R {Î;Ša>@a­‰å5ƒ,9”X¼°³sÓ.'Ðv°'8(ùŸ¤¤¤—Ÿ_˜þEÄĤ$%elQ y¬ë/^¼´ãܹ `‡ƒü ´˜¹™´´´€bl~ß¿cy ¢ê;AŽ@ U8›Xü©üûû×H«…ÄE¡Ðœ@M,À¤ô¨æÇÿ?=󒉑ù.#Óy` \—úòöíKÎ?~ªJKKƒóÁ¿P‡]&,, ô8›Ê»wßø ›Ûˆ…Ì óïŸ?®¿ÿüv†¬•ˆ¤¿°$ÐBN>6.`}À¬Ä!Í‚Ÿ?µò7†o_>2|ÿòáÛç·¿}y÷üÏïø›šê°³‹“$ù€bF djNüúŒ•{Õ@¤z€ hh0#VHJË*«ë2¨i2H‹F.V°å¬,ÐZbý•ý@ý¦í/ßøËo†/ß~2¿yóVæéÛ2/2|ÿôœ¡¾¾AMM™ÁÜÌšAGW¿®_¿ÊðæÍ«À¶×çÿÿ±{ €ˆô#¨TQüùó÷DI))_+;'k;Ga!vN £™ …ÐHó” @Å7ÿúäPÁ?` -¬¸~ó²C˜•á§Ã'y†7~0¼|õŽáÉ£Û wna¸pi>ƒ˜0ƒ®žÃÓ§Þ¾}s˜4¿ƒò6@,„Ó?¨ý dNô÷ dà``Dif1Ìáÿ¡M $÷"jZ€b–}X€îä6Õ±”ƒªœ$ƒ¶¦íÛwîÞ<˰{ï †¯Ÿ€MÅãàâ–9Ð@ô0* ˜…{µT™ø¹¬ön…TÿÀ¦ ƒ 00ÇJCH 'pf%Ÿ¿ÿ¡UÞâè!hLÚL\Àv”œ/ƒŸƒ¼¬"ÃÍ›º ·¯î¶v¹ê±Ø~ڇ̀ÂêXõ ¬ŽŒ€±UU!ÉÂÚ”A]âøïž>d`¸~ƒáÔI`Æš"ôˆ˜–b`––àR„ ä fäÚ£œe€¥>pì1;ƒ ¯ƒ ˜¨>y÷æø2 j[ ²Ûèf Žf34”þò02òrŠ‹©1èš3(;$Ä$¤€RZ€®¯_20<}á<0³c`g`e`ªz˜öA¥0(¯üÃáf üO`åuÿÑ+`2zÄðùÓ þ0pój1||_üû·‰@eUèúðYÆ<ÁP>eM$$%ñKlþÿ$6•˜4S×2Šñm÷î]¾{¿ï4Ð"rgœ$Ò#νx ޽-è],é¾¢Xר0zò–â/S7@Ψeò¹"{08îcçg³žg‹mÝI-Á¦Ì–L Tª…žæîKë-€X°×Äp¼cbúòèÝÛWÚŸ>(2pñ@,y€Ÿq?ƒã4`È}bxø,„á3o2 0úA¡­¨ÆÀ  Ê 9 gž00¼ÆÐããÿjÿ1[Û âRÌ`Ïp;@€9þöã÷ ž¾ÖÀòXã³ýçÆ+Ã_Pj~cþ¿86·þ`øÿóßß÷7_¼º¢ýæ¥"ƒ0ãþVéRÿû¤ê¡LjÀdÅ~{ÃÅ—ì q ¾#̶”Ô!žùú•‘áÑ=F†1ܹóØÁa6)ØØùþ2¼ùñ“̼ ì,ÂÀ@bdøöë3Ã÷ŸÀŠïç7†Ÿ_+¹oß°¹ €°zàÛ·ÏÀ¨e7Øþþý~þþ£ýAW®ú2H ^fPû“ÃÀûï4á‚| ŒþËÀ Ší'8?üþ‰VŠý%“ÿ ¬ÌUY”48>¼úËpïÎw†{÷߃+ >`®çv€˜þ33ü¶¿¾ûÔß¿fø Ä?©áåËË >öuln ¬öUU7+¨ÁÆòý‹"ãÛý JßÃô^í“Ю+0tÿ~b`ع•ƒá™p+ƒ²W*Ã×H%ÎH¿‹ù9ƒ2O ?ûI`±(Ïp÷s#ƒˆ– ƒ®ÃO-.`ðƒáò¹WÀ¢TXHü;þ+0A…þç/ož>;jTnÃæV€Âêpæ£Ã·?ÿ›=Ô?Ú:½a0R¼ÀÀðšs!ýÚ“¦ ¿4Ûôìœ~ý†TN €š Ƕ˜A…½–ó?°ÌÆŽ¦ÌU†SÓ¾00 `ààf&)ÍÅðõˆWžó8Ô¿}ÿôÀplÜ»·áãLJǙ™ÙÖ`s+@a/Fÿ3øs0þZ[dõ‰¹Àá3°ÀðÔ†*°Ó±y#CÛ~>†×¢< òÌn¼~Æ +§Å #/ÏÀÅ/Ì /ü„A«‚AšX|UÀ¼òXÌ~û«Âð@@·A<ûT2ܸöØ7þLr?ÁIø°!÷âùy†‡÷md(V¨Ÿ±¹ €°zàëß…å¶Ÿ™ ­€z>A õ'ÀTØ·ƒ•aÕs>†/<ûY¿]ÛzùÒy#f&;&V)1qs†h{ë… ¼LÀrôÔ`Zºv‘ƒaÿƒ|Ïzp¥õã7’#X€íЇkÞÿ`Ç¿z}áÊÕE Öh133ë1\„½ýý““ëïoH’•ý@‡¬=ÎÈÐ}‘“áÒÎ/¬ŒuìÿÿLùûçßo`‰!ñþÛÏEê¢7elÎ1¨ïñêî00,Þ©ÀpW¤…AÓ%’‘• œÑAå?È# Xö4µ·Ãï;71ÀÌðäé)†‹çKžÍììÜ3ñÍ"VüÿûknÏqf3ÖwÌ ’lÿ6ÜbbXû‚á#Ë–¿åÌÿ™/zHÀ2Zæ/ÓÖT“ßzõ?¤@%õghétÜ> §[v03\úÃÍ &¿á³+ RRÚÀf‡*°%+ÉÀÃ#ÀÀ ¬ ØÙ˜!ýØØûÅpëΆ«WVüøóç[5Ðñ}„Új„µOÌÉÉÅüçÏÿ6`gŠïã3fVÆ^6&æ‰ÀÒé/¨sênþþÍTã©ö¯ykâopˆ‚ŠTp¨+®‰;&^aaxÏÄ|€™ùÏòþ{j¶,,ìj||ò,ââ:À.¥2+0HûƯ®^]¬#v¾dffLeeåÜÌ ì0¬ëúòåS ·®Öè_&¦ÿå™þN¤,°Qv‹ù?Ë{Pf —û¨°n%ãP‰óâp`Ò8̨%;öz‡ñO°dªcfbùóȶëYýú®óúõu 6êÐzHŠ……“íïߟÿÿþ~ØîÏddd½@l €pÅØ¡ =¬O êă:ö ÐGê`[A û"4ü€í3À|»Xb¾e`Õt@çYX # ó@Ã+ áÛ l„ +`ë ·€jìabb €Höd襺ÕâZ 6:b¨óÃ.@x³U TKŠˆq¨ÏП¡ !ï€ò !ï€ò !ï€ò0ªtÏÜsÆIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/plugin_48px_1pips.png000066400000000000000000000062341321676412500232430ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIMEà¦7Ì )IDAThÞíš{Œ\ÕyÀçœûšÙ÷Ìzwgw½ëÅöÛx#,0© 4!%!•“ µµª¨‚„ThSÚ‘HMRYjôZKiSAR 8-˜¦‡ú½6Þ]?Öö®w×ûžÙ™û<§ܱk‚‰Œ!ù“Žî«sïý~ç;ßãœ;ÂÃÇY$s¹ pà*ÀU€ß¬X—ºxß}½ï ƘÚ8ÿØq2÷(e/ÂHcô‚1º¤u<£“x"Š“c˜BŽI)G„§…ÓBˆXq©g’$ ZÇÄqLG„aHú$Ir¡ßoìXÀ¯P>+„ÙþÉ›nÝœ±?Ôa; ¶"T#ˆÂy*åY|¿2G©4ÏÏÏ.”Ë GÃ0x3 £BÈ~˲Ž!Š—ºb ¼ŸÄqô—÷Þ{×æÎ¶»9zt5‰[ ¼ZðjÀó ã‚mƒ …¶Àoðý¹ ÓÓg7LNŽ0<|\ŸR]õÜóÑ#= À\–BimH’øÂ1m‰ˆ¢¨;‚Ûjkk¾¸iÓ†Û~ø!»££“……ÔJÁÛoïç[ßzzòìÙ³›lÛصëÕ+B¢”B) ¥BH.Óç¢("|â8&Š|*• Aà3?_¼§¯oÍögžù^ç5†à8EšgŸÝÎ÷¿ÿ÷_³,ëI!{öüÏâ2qZÇ!±,×õ𼠎㢔u9å!„@‰ëz444‘Ë5ÓÒÒA¡°”\n žgÿdÿþ¯ìÙ³ÇI§hƒ”’5kÖà8Î]•JÙÿÃç!ÒÑ÷¨^8·´NVè$¹EëdÐ*¥j”RfÂ2FûÆßèdV1.…:&¤Üë8î‘ÖÖöÒÔÔx&Žƒ•ø>h]UÌ‚|>ë:+¦§+M–eO\q"»H2IßÅÑç\×Û˜k.\Û/xÙúqœZ"Š"ÂÐÇ÷}l;á£p¢(Úœ$Éã…Ž¥×/_µŽÞµ×ÓѵŒ¬gã8`[Õ \Xqa A¥ ”J¥r &'§:G†v¶S™?Ë–-OÒÛ»œ›6lâºu}hqäH?““cq¹"1º'¢­…öö;7Þz›ný4ùœKÆE5™´¼Ð’$mZ‚V mÈyÕÙıMÐ^ËüŠn&g}Æ'¦9sj¡·ÙwàŸhÉײ®ï:FFN255ùßZ')å‡B$á[ï¾{sÓæ/ÞC®ÑC¼«Ì€ä¼â¦ZJÐ@¢Óë:I­qÞ}, MY¨ó<Úsí¬ì*°võzqìèÿò¯þœ…ùÓtvöìB€9ï@ëè)òßY³òÙÝÈ«/¥é¿& Myh-@.^&uv%RÄå*[ˆ«–²® «­Ž\}ÝK{8ztƒý;±ìcôñ$ѯ-à|ú6˜õRˆo¬\ö§ò“›ndU_ªüì Œ Ñw`÷[àXÐV€–6hk‡†¦4ŠH¨‹³÷{â,çgŸÖ©µ,alFGáà~ÈxÐÚ…NhÌCm]jEe¥#.Dú{t²ÄÀ‰1¦&çã©Rê²yÚZ728tâÓ‹žBax`ZÊҩ驉µó³=dkÓ— Aì¤YlCÉy†Gï¥X÷'X®Äñ §–­„¹;“ãpz—AIM¾ZÛyÈÖ@l4ƒ§g852_ñ±-ÇÔ#¤Mb¢(†8 ILë^ÐL “™£c‡ÖNŽ÷Жø´›¿¥-"pÁü)ûÇ]®½çˆ+ÿÿ׃kV¥0 ‚SÇc§C††|jj$--.n}¤!OÕáZy-(‡E*Á• Ì\qŒ (— P.B¡”"I*{OœÚù…CýwÒÞtÞøaêôϪˆ`ô ”œ€(„(ø¥(f@ƒ­bzVZ\s­ÇìDÂñ¡ ÇOÌ€VÔ74QÓЈ4 ? (•g©TŠ,TŠaÈøøA|þÈ¢J¥"¶m£”eUb«GLíäšÊïÑ7ñS”¨.]=HæaÇK£ùo°üwdaö¢ˆcÒuaVeyíWhpßb°¿›cůѼæÖ­¯%X“åܸÏÁ=“Ãv#JåYÊE*•"• L±4ÅÈèωãøåEH!ˆµøT96OݱjîæGo›d}Ï>(V=WÁ‘7๷n$\ýMúný a”&'cÒÒ ËÙÎ ÷ 2fBXÝÙÏîm%dîu¼H YJ>ï!ßœe¡R¤\™§R)á‡Ç¿ÌÜÜð.¥œç îöDøüŸoœW|je3€É¼øšàéõœ[RK·ú/Þ97ÊÒ®5tvw“mÈÓ?C_öq:ø!”ª¡Ê…±½PNV … ª°´´5ñÎá3LO—Ñ& \.Fcg÷2<üêðe­£â¢üèÑÇn)ªG7a¾ª€‚3G໯ØüëÙzJµÞN»|ø¥ƒö®WÒ»UÚí-­7qÿo7ró¦P'G¡\}C‡÷{ì<ùg4~ Zƒ]¤„-hlÊ2|ò¶c£ˆ‰sG8Ôÿ,aèÿ…Rö›ï·Qqé0™l¥S&S†çw þf†&S²=ñU×Ä—Ä:J´h›)Ï®Zr´óÉ›÷°ùz>à§£>;Ûw,ãXó×Yý;÷!lI¤ñ_ëÔ I MDCGÑFqfd7û÷ÿ#A0÷”ëÖüïúŠtI“„Ï|{—Ú`O+ Žæß$ϹÌyÖ+ž•<¦Œ:>Qw&È—¼!êÛrG@{+)´J3Ýk»_Eq ®¡¥ûeö¢½}-m…•äsjkÉdkpEâ$d`è?é?ô/~—ÿÚuk¾û¡ö…2™¬Šcótë/ ¨×RŒ*[|Ç‘j«mÛI’Ä„a@ɯ|¾W?õÒB¤!fÇaëÁÖC3R½®TüÏ:Ž×K©n±,··¾¾Ûjm½Ž\n9¹Ü2 ÌÏOÐßÿ††vŒ+%´íÌ‹¶í`ÛÎ…¥ëøøÈ¢«ÑDJóX"“­–JÁ€2Ö ´ÖT*åóËJab`.Uœöì…/ï€ DˆøÛ–ä«JZ±¶$Z'vV®;wîÈçÎÙôY–ÛnY'IE•_H)ÂÞwE;s™L­5q_X+eaY6IsÑ»¼öû=\{W¼= ?†)øðˆ½–•î`hn³£«Íd€ µ: J©Ð²l,Ëf1øÀéÖ÷»ÒíZà à†ª?¶%\à½U©R\1ÀÇþÇ/Ëëv/¹“ ç^|ñS{BqqŸKÉS{BÛçê7²«¿n¹xKürí³ŸýÂêÿëhâê¿U~ÃòîØ»ŒÂÄ—IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/plugin_48px_2pips.png000066400000000000000000000062361321676412500232460ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIMEà¥ö)þ +IDAThÞíš{Œ\Õ}Ç?çœûšÙ÷Ìzwgw½ëÅöÛx#,0© 4!%!•“ µµª¨‚„ThSÚ‘HMRYjÝôZ¤4‰ ©@PœLSŠƒCý^/Þ]?Öö®½ë}ÏìÌ}žÓ?îØ5`â£"$éhf®ÎÜù}Îïü¾¿ß9w„1†Or“|ÂÛ€+W®|¼ÍºØÅ{îyà}¿`Œ©ãð's—Rö!Œ4F/£KZÇ3:‰'¢85†I!ä)å¨ò¤bZ !.vO’$Aë˜8މãˆ0 CŸ$IÎ{ýõí‹ø Æg…0Ï|ú†›7gìÏuØN‚í…UÁˆ¢pžJyߟǯÌQ*ÍÆóó³ åòÂá0 ÞÃh¿²ß²¬!Dñb@—í÷kqýåÝwß±¹³íN]Mâ–¯¼ð<ȸ`Û H¡-ð|nÃôôé ““£ŒŒÕÇ+•Š¿Ž¢x»eY?‚Ù ŠÂ÷\K]ßÐP{oWW7ÅÙ“tö(lÛö<,ÇÆr,lW`Ù`4è„IÃL©,55Y:: 8Îz’D˹¹ÉΑ‘£ÃÃw:ÔÿØØØØ¿iüDJµH .V Ý~û½{µRòÛRJϲŒ«”Ê*%ꔥêjkërMM^.—sòùfšššhhh¤¾¾™úúf2™Zh]5Ì‚|>ë:+¦§+M–eO\v"» e’8¾5Š£/¸®·1×\¸º!_ð²õyÜL=ޗŲ¤iYø•2åÒ•Ò,åâTR.MŸŽ#ocCStýu×^ãºÍAº|â8õDE„¡ïûØvÂGàDQ´9I’G K¯]¾j½k¯¥£kYÏÆqÀ¶ª¸ªXqa A¥ ”J¥r &'§:GGw¶P™?Í–-ÓÛ»œ6lâšu}h10ÐÏääÄ™8‹Æ\€ÀÝÑÖB{ûío¾…M7–|Î%〢*B&-/´†$I»– hrDu6ql´×2¿¢›ÉYŸñ‰iNbxð-öîÿgZòµ¬ë»†ÑÑãLMMþ—ÖIEJùá„$Iø‡ÀÖ;ïÜÜ´ùËw‘kôï(3 9g¸©–4èôºNRoœ KBSê<ö\;+» ¬]½žÁ¡#9ü?üû+¿baþ$=;`ÎÇÐ:zHŠü÷Ö¬¼O6d7òÊ‹iú¯ÉBSZ ˃—Iƒ]‰q©Ê⪧„¬+èj«#WßG÷Ò^ÇPÿl'»Å}4Iô«‹8—¾ f½â[+—ý©üô¦ëYÕ—?;£#0ð6ìz Ú ÐÒmíÐДªˆ€º0{¿Gg9·ú´N½å¹’¦ú,õu4µl Štçôäθ Z@GÕYJj…¨Ë´¶ô²î:°ÝtÆÚ: £+U‹(„³ãp|öîà XÒ ÍK ÐM9p<2ý>0JBiŽ˜`pèÅù˜˜šº5ÌÍk­”ßüÕ*§I†¤ˆJʲꂢª¼Òõ-«³Ø\€Ö}X(™Qƒû ãAk:¡1µu©••θéç±ÉƒÇÎ059GGH¥ÂP—ÍÓÖº‘¡ácŸ]ô ÃóÓR–NLOM¬Ÿí![›þ¨ÄšÅ6”œgdìnŠu‚åJzzaÙJ˜›3§`rNî4(©É7Ck»¢1Ùˆfèä 'F§ñ+>¶eã˜z„´I,CÅ$‰iýÀƒ t2søÌÄÁµ“ã=´eA>íæoig ‚\p‡~Á¾q—«ïú#âÊÿÝÇõàªU)Ì‚àÄQÁ™“!ÃÃ>55’–·>aÒ€§êp­<‰”Ã"•`ŽJPf®x† (— P.B¡”"I*{ŽØñ¥ƒý·ÓÞt€ÞøAêô/« ˆ`씜€(„(x—ŠÂ`«˜ž•W]í1;‘pt¸ÂÑc3 õ MÔ44"ÂJåY*•" •"A2>~ߟX4@©TĶm”²¬Jlõˆ©\Uù=ú&~Õ­«ÉõÝjƒ=­(8š”dÞ944pÏ‘#‡Ÿýw­Õ,KîÔbÄ¥j¡;ï¼ÿRc¯•Òú¦eY¾mOJ™•RÔI[ÖÕÖÖ7äššü\.çæóÍ455ÑÐÐH}}3õõÍd2µø¾@)ˆ"0l;õ–eÁôô »wïæõ×_çØ±c?6F?nŒ ÃËÇÀûüÁ%Ëc´6¦ú=iŒ±ÁH­uF)Õ¡”êÔZwK)—9Ž]p]gi6ë_ÓÕµtIoï ÅŠåtu-#—+àû6JA§0ž33E^~ù^xá…©™™™/~ò…w“*ˆ1ú‚šœïZkŒÑ–ÖÚã¸Çq¯ãØ}™LæöB¡å·>ñ‰uÙ;îø«W÷E)„°wï!¶mÛfÞyØqœm)€®FîyõH_`.K¡´6(•\xM»qw‡ax[mmÍ7mÚpûÃ?ättt²°zCJxûíý|ë[OOž={v“ã8»v½zeBXH)‘ÒFJ‰—“Áôþ†8Ž Ã€$Iˆã€J¥BÌÏïéë[³ý™g¾Wãû D¸.ıæÙg·óýïÿý×lÛ~RÁž=ÿ³¸LEá…ž$ BXضƒçùø~×õÒ¾œñŒB „…çù444‘Ë5ÓÒÒA¡°”\n ¾ïüdÿþ¯ìÙ³×M—h’€eY¬Y³×uïªTÊN>‘Îþ»gõÂ{[kµB+u‹ÖjÐjY²Ñ²¬ BØÆèÀ­f…ã–Ç„eíu]¯¿µµ½455žI’peGGAZW ³!ŸÏãyîŠééJ“m;WœÈ.j•$·ÇIü9Ïó7æš ×6ä ~¶>—©Çõ³ØŽ‹%DZ„!A¥L¹4G¥4K¹8¥Ê¥é³IìklhŠo¼áúë<¯™0L—O’¤žˆã˜( ‚ÇQ|nÇ›•R:–^¿|Õ:z×^OG×2²¾ƒë‚cW3pU±Qa¥ ”J1¥r(''§:G†v¶S™?Ë–-OÒÛ»œ›6lâºu}hÓߘÉɉ±$‰ŠÆ\€À݆ñÖB{ûo½M·~š|Î#イ*B&-/´¥Ò®-д9â:‡$qÛk™_ÑÍälÀøÄ4gN 24ð6ûü-ùZÖõ]ÇÈÈI¦¦&ÿ[kU±,ëÃ!P*úC`ëÝwonÚüÅ{È5úˆw• Înª¥„ (^×*õÆùð±-hÊBïÓžkgeWµ«×30xŒcGÿ—ÿxõç,ÌŸ¦³³gÌùàø ZÇX"ÿ5+°²yõ¥4ý×d¡)­ÈåÁϤÁ.E ¸\e IÕSÂ@ÖtµÕ‘«ï£{iG®cððN7»Å}\)ýÚ¢ΧoƒYo ñ•ËþÔúä¦YÕ—?;#ÃÐÿì~ \Ú ÐÒmíÐДªˆ%yqö~Îr~õizË÷,šê³Ô×5ÒÔ²8ÖÓ“»~â`pQIWgIÕ Q—iméeÝ àx錵u@GWªqçÆáä ìÛ á›°¤š—@¡šràú ¬4VôûÀH ÂXsâÔƒ§(ΗÀ$ÔÔ­anæDk¥|òà¯>P9mŒ´D\’¶]†WåÍ®o«:‹Íhí€(€…"ŒÀè(ÜZÛ Ð y¨­K½(ítÆ…H?N–81ÆÔäQcI‰% uÙUNÌSw¬š»ùÑÛ&Yß³ŠÕÈ•Ðÿ<÷ÖD«¿Iß­Ÿ!ŠÓädLZ:t¹ÛYá=AÆ C«;³{[ +÷:~, YJï!ßœe¡R¤\™§R)D!Ç¿ÌÜÜð.)Ýç îöEôüŸoœ—|jé3€ j^|MðôÎzÎ-©¥[þïœei×:»»É6äéΟ¡/û8üJU©ò`l/”Õ ´Da6„–¶&Þ9r†éé2Ú„”ËE¢8fìì^†‡_]¾¬u\\4ÀB?úØ-EùèÆ"ÌW p¦¾ûŠÃ¿ž­§TëïtÊG^:x`ïziù·ZN{gKëMÜÿÛܼéÔY£P®þ‚‚#û}vžü3š?¿­!ˆ/2Â46e>y Ç5DqÌĹ~~–( þBJçÍ÷;¨¸´ŒÆa&«âtÉ$`Êðü.ÁßìÏpÀdJŽ/¾ê™äïT¢c¥EÛL9|vÕ’£OÞ¼‡Í׃A:ë³C°}Ç2Ž5Õ¿s±ˆÃTÿµN½ hhj$:Š6’3#»Ù¿ÿ ù§<¯æ~ÕS¤K=óí]rƒ3-)¸š°x~Ìcη_ñmõ˜4ò@ÄqÒ©°^zð†¸oË!í­¤Ð2Ít¯í|ýɤ†–î—Ù7zˆööµ´V’Ϩ­m$“­Ás%QdHTÄÀÐrøÐ¿IRþkÏ«ùî‡:Êd²2IÌÓ*Ñ_P¯-1*ñ×’[ÇQJ%DQH[_ù|¯~ê¥b„H%fÇaëÁÖC63–|]ÊäŸu’¬·,y‹m{½õõÝvkëuärËÉå–ÑØX`~~‚ÇÂÐÐŽq)ÅƒŽ“yÑq\ǽ°uYt5ª,Ë<¦,µUÃRK0 =­5•Jùü¶R˜˜K '„={áË;`ç1"ù¶mñUiÙ‰¶-´VNU®;w®ÿŽsçú7}¶íµÛvÆU*4q\ù…eY á컢“¹L&‹Öš$I.쉥´±m¥.Ú`€×~¿‡kïjƒ·GáÃ0?±×¶Ó ­Ócctµ€ дV§a@JÙ¶ƒm;,Æ =ú~Wº] <ÜP5âÇÀV ‚˼·*•’+øØ?àøåöÄz€ÝKîdùßEüÔžH\<æ¢=ʇsõÙU€_w»øHürý³ŸýÂÿëèâê¿U~Ãíÿ©N½ÂõIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/plugin_48px_4pips.png000066400000000000000000000061031321676412500232410ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIMEá 8-Ÿ•‡Û ÐIDAThíX pUÕþîòÖ¼¼¬$yI$„„°,µ¥‚e Ëh§¶Êhé”™ŠíŒ¶ÕBG‹±Ë0ãÐeZjÕZd¤Ž2 0Å ¶R)1²²‘•lo_î}ïö;/bˆ ØÑ©Óüóþ9÷½wî9ÿ÷ïç“4©I Lj`RÿÏ®üúõßrèzäf³mµ¢˜¦H’!FÌOöÅbú`,ª÷jz´Ã0Ð'Ir·,ËÛ%IØ»÷wúõî7Ñüë@áíøÏ7•ÜVf3Ýŵa2Ga²F )A’Ză``¡¡ >ßîñ ù}$~_Ó´ÓT£ªj-y'p¢ÿ¯ ÀÚµm[·nÕöܬûQˆ\ž+XÈŽ‘Ñ Ø,€É(üO–bœ" 7ºÐ××ÖÖó±–––NŸÏû/MÓÌ«ûöýah"aÇúÿš”•}Ó™”ä8ùÈ#›fx‡Ò(¸B!­0©V¨fY…É"A¥àeŽE9E$)  ªHpf3Æàv÷ 8w®gÏÖttvv¾‹E_•e¥|ÿþ—ùöµÑ5¸÷Þ¯ÎRùYú´UU ‹¢(vE‘UIt8œI©))ÖÔÔTsZZ:RRR”” §3=Î6›ƒÂKˆDÀ.’eÐ2ƒ8qâŽ;†¦¦¦¿2žž8rd_ãµ@¸¬†qàÀcåÊõ2õj(±XÌFsȹ|Î#¸i&“ê2›M7ØíÖéS§Þ0¥¨¨ÐZXX€©S§!5ÕE@j¦ ƒ±Ðí½8xðÞ|óÍþÁÁÁÍï¾{൉@\3€‰ëÿ¥KWÉdeàºÈE5ßf³-s¹2n»ñÆyö+–cö좸UB!@€(Qee5víÚe44Ôm9q¢|×Xk_úíSpi“+ÇÒÒeÁä…Ãá¥GÂÚE‹nY¶eË·M99¹ðû‡­!bæäÉ*üìg;úºººUT¼×påÿSÏ……7®^³f£oppÈ Ãí6â£Ç5žþ£¸øæíã L¬ŸmذY*.¾Iª®®wƒžºHÄ(Y¸ð¦9ÓO—e‰®¥áèÑ¿%9©»ûû{D>¾Š„ÿ±¸©L…±hôŽ3¹Z&SarT×lthuݺ‡B ö‹±÷È’Ò$Ér¥¬¨µ{öüÆ·`A©-ôÎÈÉÉa­`úSd©´´4Æ…¹p` ˜Âu{Ç’ô vmQ]_¦éÚr.Zššî𕔿²ÚÜÐæ„Ùjg=0³ˆIÐu ª5 às#èBÀÛ øºÖ¯äToO‡vóÂÅKz\û¢Nèl8Dªe¬Ð ¢ÙÇÐuX·n“™Ú, …‚O¸rnXP0sŠæ.@S£ÝjŠ)WŒW`n(„ÐEî§@aæ_ìÓà „•¾¾þÜŽÖúܬžV=]ضm;ŠŠ pë-‹P-¡¡¶¶†•»·›½×Ƕ×  ¬ìüp8´Ó•}_éâ¥X´x ÒR-°Qcñ@¢° ‹öB¸(Z‚c,T1Nˆ±B§²k‰&jØ„p¶žÂ<ô …ÐÓ;€ m8×p§NÿiÌ›_ŒŽŽô÷÷½çó¹ }lº¦4zÏ=_ù:SÛÎU«ÊRÊÖ®Fj²U´@—).ìHû%€x+!@Œ€Dk!¬q%81O'Ç­0ÐÛïCCcšê+0Ð{ ~O;ZÛZ®«;õûË›z˜0 -_¾úQYJùuñÌÍöü¼»q¾AE] À6ý}ÂOÿÓëˆ"$X¸?ãxaaËÏ# ðˆJ¿s&X1%S2 ¡˜sØÕêH°GKf̘[ÕØXÓjƒHœ÷`sf0Ðò ßûáèwÇ i‘FYÒ|Šª&Š£¤7!•î…t“?…eƃŸùBX£³sØ:6 Ÿ™E0¹@2»pG"ß`¸³ˆa!ñ½³þßÜM·t3kit2ûñD{²2KÑx®yÉháÅ÷qD"‘Yöµ ô÷Îõ åÃÎC‹ØTH’Ê‘.í‚"{ÐÚ¹ÞÄMP-r\ÛùEÀ´ ææÐG µ787vÛÈÌVâ`ìtEÐØ>ˆ¶ŽÖŠÏLdž“3!ªŒ1jMÓòíz5  ¢âáââ’úîÞê¹}=ùȲSóá²_!Û¨}ÁOãTõX0kõЯHxj:k³ã÷Kh;/¡»=ÂCL 222,°8£è iqKZ•DXÔ4*IB€©?fá àöv³ÈW‹?Ä ‘H ²¹­|MuÍ}ÈN9ƒ"} cï¯%œš:Ä>s˜ça~ée†' û<ÏÑ0):òg¨˜>ËŠ¡Þ(Ο â|3MÄ"áLJA@²¡0pÃ,tC`{?9ÌPOÏqÆ®½´æ•ã¸ÈÏŸ©z‚J¾Ô_ŽéÁõ˜ß{„UväèJíF=ÀáVt¦ýw? ?ÿ™%Nï°+](p<‰$Ëh¬ÉC“÷'HŸ³óJϱ3„pæÃ^?S™$D•‚?@íSx¡}¯¯ÿdñÓެü‘ácdçÞé O¯˜é¾}ëÒ>”䟠ñÈ¥ækÿ¼öÁ͈Ì~óß6ŽPŒ€hM5¿„BËS°­ü˜[ƒ»|Sñ"€ÑËÅ\9vø}!ÔUw0>øLÁAÞl}qkœ?ççÖãŠbót6&€LWÞý&)²ï±RòèCPLÜ‹ÖÛ†(ûß–°£Ü‰‹SÈSÞAÝÅNÜ0uróò`OJC^ÚÌ·?¼Bßâ{BVÆJ7Ól ZˆS=e,ÇŒ¬Ô½À³q€i6Œ-a…ìîªäÁÿ(wÄ÷ÛÛ„ú®¢1øCÚÖÇïð*[KùÝ$.µ~^øËC&ìírÂç°–›gœ9]Y¢ÈÖŲ);7#óV|íKɸ}ÑŸ(3а;ЗÎVYQÞò]¤¯Üo'·—I5IHN±£µ¥÷LF\øÞ‹µ¨®yQt£ßcC÷þåÉ£ÆÑÂ6{”;Ì"÷S}Ç%Û-ÝçŠÅóøÏ)x®ÎŠE=ÄëŸ>÷À¼i‹Y­ ¹‘¨ñÖ¦…áÒÝB¸¥€ÆZ1@o•ðTìmw¡›i±¹¡]Ýp{‚Ìù1æx‰¨CC†×ëgñkfÁ:ÄCýnÜûýþW 7êáW‘ÕjStÝØÕc›9Á“¥NÅ$ýÂ,+;ƒA¿H.#dyreQìé2‹•„[­³pí<,agµŠAY9¦(ú_bº^“Úªj)r:óÔÌÌb^¯§!9Ù§55¯³Fîá}Óш¾ÿÒ.Ÿx”d%›5ýV–uq¤ƒ¤§VL—x EEn#s¬XcI‚(Ö/L¥ª*Ž8ÃÄû"•t2ü€ü:¹‰€‚VkrÔd² »çÅÙ8~fäâNµòa¼rŒÇò`¤Ñ!øÛ;d!èDdã„Bò"r1ÙLþÌi.wÜCf¸B\AüˆÌ®i’®IcñXo>¹À$\ãJŠ¿ûL¥ˆÜaú,ç\Ú“ÅÿóM“>ßö›”~Rø7çH\]½ŠIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/plugin_48px_5pips.png000066400000000000000000000060771321676412500232540ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs  šœtIMEá 9(öäB ÌIDAThíX pUÕþîòÖ¼¼¬d‡Â°DÔ” –\0,S Ú*£¥Sf*¶3ÚV -:c—aơ˴ԪµÈHe@`ŠAm¥Rb$d#d#+ÙÞ¾ÜûÞíw^BŠ!&`GG§ùçýsî{ïÜsþïßÏ&iR“˜ÔÀ¤þŸ5 ]/ø ¾ãÐõð·ÌfÛE1M‘$C6Œ¨ìFõhDïÑôH»a W’ä.Y–Û9¶I’Ô¿oßïõëÝo¢ù×€ÂÛ)ð_n,¾µÔfº“kÇÃdŽÀd CR0$´°ÿ ‚A7‚¼ÞAÝíôùý¾ºp8ô¾¦ig¨ZUÕòL$àDÿ_€uëܾ~ýê9÷¡î5¸*dêÕP¢Ñ¨-‰d“søœKpÓM&5Ól6MµÛ­3¦M›:¥°°ÀZPiÓ¦#99“€Ô Mc¡Û xpèÐa¼ùæ›}[Þ}÷àk¸f-4ÖÿË–­– ÈÊÀÍ$ԛͶ<33íÖn˜o_¹ræÌ)ŒY%‰UTTa÷îÝF}}íÖ“'Ëvµöåß>U—7¹r,)Y.Ln(ZæpÄ­[¼øæå[·~×”ŸoÈ"fNªÄ³Ïîìíìì\\^þ^ý•k|®ž nX³ví&ïÀÀ †ËeÄF·;b<ÿü FQÑM;ƘX?Ú¸q‹TTt£TUU>îýýݵá°Q¼hÑsóó§#š.Ë]KñcOp:“÷ôõu‹||1ÿ7bqS™þ ¢‘Èígqµt¦ÂĈ®ÙèÐêúõìA#d5î–%¥Q’å YQköîý­wáÂ[ à™™ÍZÁô;,¦ÈR)))Œ sA ‰ëöŒ%é'@íÚ"º¾\Óµ\´$95svBJ¦Õîä†6'ÌV;ë™EL‚®kS­Á€~¯ ï üž¾ˆßÛß¹aÃç{ºÛµ›-,²XRcÚuBgÃ!R-c…VEÈ>†® Àúõ›ÍÔfi0x<3{êÂüYóQ8o!²™íVS¬H™¸b¬sC!„.r? 1ÿ{d¯¯?¤ôööå´·Ôådt· àîÄöí;PX˜[n^Œ¢ù h 55Õ¬Ü=]ì½>¶å¸f¥¥÷ç…BÁ]™YY÷–,Y†ÅK–"%Ù5 $ ²h/„ˆ¢%8ÊBå„(+t2+±o¢†Me9à.ÈEï`Ý=ý¸ØÚ€óõ§púÌŸ–âÀüEhooF__ï{^¯‹ÐǦkJ£wßýµo2µíZ½º4©tÝ$'ZE 4B1a‡Û‡ÄZ bˆ$Z a+Á‰y:9f¿ž>/êÑXWŽþžÓð¹ÛÐÒÚòPmíé?Œl6êaÂ,´bÅšGd)é7E³¶ØórïÂ…zµÕÛôõ ?ýo¯#Š`á:ü ây˜…uFž‡…à•~猳 mJ¦¤@1g³«ÕgÏœ9¯²¡¡ºi”챯ãXvçêbJòòÌéÛÌK–~s‹Ìi¬˜ì>Ø;^lÎV5g®vÀíPdfÁ˜@r4æ#.7 D¢Sº= Þ°á æô¸›VΘ1û¦¦ºþÑ Æ] 9$)Þ–žVˆù‹Ø"³Ô edƒ;”-4ç¥n ¹8]AwxÔ :…`9/)™(}_b,m Ç"…ÿ‡´(šZ{èF­ð¸½Ô-?®¦ô€¿ù¾÷ãÑïŽ @Ó ²¤yUFNoB* Ü3 ©™Lþ–>æ aŽŽ!ëØ(|zÁä‰ìÂñ|O€áÎ"F„…Ä÷Ž^úSÝÒŬ¥AfÐÉìÇãí)ÈH/AÃù¦¥£…ßLJûeÙÛÚß×3Ï=˜;-bS A*Cª´ŠìFKÇzxâ7CµÈ1mçÓg‚š#˜‹@/-ÔvÂàÜ(Øm#=K‰±Óu@CÛZÛûY+‚<_0NZÌ„ˆj0ƨ5=DË´ëÕ4.€òò†ŠŠŠëºzªæõvç!ÃN͇‚È2~,l§ö5? GQÙmÁì5÷C¿"áY¨ý¬ÍŒÏ'¡õ‚„®¶01AÄÅÉHK³À⌠7¨Å,iUâaQS¨$ ~¦þ@ˆ…/ä‡ËÓÅ"ç÷_-þ/„ÃþЦֲµUÕ÷"+é, õ­ˆ¾;´–pjbè`{Í!ž‡ùu¸—š0äó€ M4‹„3! q<ɆÂÀ ±Ð ‚í|äO@ÝÝgÅ»æòšWŽãZ /o–ê(yR_f6`AÏQVÙá£+µqGZÑ‘òsäßõ|üKd–qd¼Ã®t"ßñ, ¡:žŸ!uî"Ì/v 4×ÎÄÙ{xüLf’Uz>?µOá…ö=Þ>´wü‹ÅO?4¼òG†•Sp‡'d<µr–ë¶mËzQœw`€Æ"—š¯ùðÚ7!<ç,Xr'Ø8Be0 ¢u4Íü ,OÂf´ðG`NN5NîöBN>΋F/Ë̶Ãç ¢¶ªñÁg îðf#àYãÂ…C%´.b€Þ>&á{/¨Ø×–‰.¦Å¦úrtvtÁå0çG™ã%  ů‰ë0õ{xp=æóùv^%ܨ„w^EV«MÑucgDnágT–:“ôK³¬ì |"¹ “å‰U…ѧ>À<.Vn!´Îµ누]U*d帢èêz1Oj·«ª¥ÐéÌUÓÓ‹x½’OžŽÄÄL¸Ý=¨®~5âH7ï› ‡õ—wùÄ£$+Y¬é·°¬‹#Ý$=¹r†Äk(*r;™cùZKãD±–xa*íTUqÄ"Þ™x¬¤“áGä×ɰZ#&“MØí/ξÄñ3£LîT³1Æ+·Âx4F ‚¿½C‚ND6N( /&‘ÍäÏœæqǽd†+ÄÄOÈìš&éš4 â'ŠJ5BÂFèé ¦ ÒçmÎeYü¿Ø4 à‹m¿Ié'5€ÿI `]ð 7<IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/process-stop_16px.png000066400000000000000000000014641321676412500232650ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÕ - kÀœÀÁIDAT8Ëm“»OSa‡ŸsémÆÈà%†Æ@+xij¸ ©6ˆš˜¸±Xü\:8iLŒ qÐÁ»1¸˜P$š°ˆÁÄ(µÔJi¡á´ç;Ÿ¥‚ò&_¾äMžß{ùåUØÂa==1ñDÀUv Æ\ŽBe3§ü?kôù.]¼vÍ­hRJiY|xøÐü23ó^À•(X5*üÂïóõF††Üóãã˜ùü¶êN¯—úŽ><}j&’É1}Q°´‘PÈ‘œ|8v¬728¸¯®‚emªÊZ:M ÑWçæŽ,•JgÃáçZg&óæxccÏùw6Ǫ¯GÅ ™Df³³Ÿ8ÁÞ»w©$_¿r<ÖTêèD"¨õ¨êãþë×õÌ»w” Ô¾>Ô–”Žøþuÿ~ö ãÚ·EJJããü.h‡õ©ÏŸº¢( %åBa£Õ‘p¹põöâ¾q]Qpz<˜ñ8ù;w°uÃ@ ¨ÿy%%âþ}äÔÎ]»pz½XÓÓäb1„mc6 «;Rwô»¹w(„®ë8vƒÔ…BÈ*,ÊeÄÜÜ_)D V[ZðÞº…Óëe=gut§ÇƒïÞ=<í혹Æ·oÈ•t)冚a ,‹º¶6\UxqxÛ4Ñ€ýýÔ:Åúƒ iØÕ¢Ú)»+Åâá@[›VJ$(½~MåçOnÞ¤œÉP^\$÷êk³³$oßFÑ4|~?é¥%ûÇòr^‰Sƒ·'º[ƒAW*g­X¬-këSššH âc:½`C§6"OrÅb—i‡­­zi~žŠinƒU‡ƒ¿ŸÙ|^Lþú•²¡= ©Ú1mvâ?x°ûìéÓ.ElËBZVíO$“Ö§lvƆ®(,n»Æ­"zv²W…iÎEay3÷ÇMRö׆÷IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/process-stop_22px.png000066400000000000000000000023701321676412500232570ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDùC» pHYs  šœtIMEÕ +C+Gû…IDAT8Ë•[hTGÇsÎnö’lâ µµjH[M ÜfÅ •R ¾DÄ”¶ØB)¶T‹Ñ•ÄzúЇBû¡PA©­¶ ¥(Ú‚¦sÑ´I›Ûº»IÜÝìÙë9s¦»®ÆDéÀÇ<ÌÌo¾ù.ÿß®öû›·ïÞí‰Þ¾M:!êv#ªªÈ˜&v6[„'„ áóá]»–x8Œ#ÃJ¥xÅïwF‰µµ ;àŠ Ž÷¶77{¢]]dB!rJ‘µ,ìØÁÒ}ûHù|L ¡iee¬jmeÅÞ½˜BV #áÁà [·lñhÏ'€®ëhB¾ O÷Z¡3gB°ìÀRå奥¼ÜÚŠ³´”¿Âmš¸¥F8Œ®i¨B.źT*Ÿy!@)*l›øÔÁÓ§Yqð /?Ž®ihJ1pø0ƒør9”R(¥°•)‹IÖU¼*–ÓÃ’*Ïå`r’© pz<8½^"/b¡¶mc?„ËG½äxŒmç=×ò÷%tév³¸±M4à¹ÆFâ·naI‰êîFš&¶i¢4 JJòÎÍòXÊ|3HI0<^:v gYÿœ:EßþýhBPsô(SããÄ¥$ÙÓCòÞ=Œþ~äð0¶iÎ?„*)ÉHIrÞ^ﯯwæ’I²ñx¦æ˜Ë*+YY[ËïÙþ±±_mx³²³Ô­®Õe2æh0¸É8s™ Ùtt¥ë i¨‚•WU±ÜïçÚ/¿d†b±mx»¬§é±Xò1|Vãó}øÖ† %Îùóeeùâ/h²’åõÒyþ¼Ùÿö%²!„ô“àR`9ð<°¬ v¼ oBå÷ B䣠¨èo‡sÀ8þSÌñUyP,‹€y…@xP°(0 Ä(Äà?˜—dð¢yóIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/process-stop_48px.png000066400000000000000000000120041321676412500232620ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDùC» pHYsHHFÉk> vpAg00ÎîŒW5IDAThÞ­šypÕ•Æ÷v¿EÛ[e˶$[–7ÙÈ×!c‹` a’ªLR8CR• ®0©@BUHHð?üþ÷ùÑ}÷­Y^«>´lÙŠÛ ÚƒLM!´@Jé!…+ îéw´vÐÚÁq´b1rcgœÁûw—òáÿ\»öÏÙ¿ßÙòä“;ÿÞ÷È/X >¹{÷ê¥ÅâÃˉ[:¯øP°±%¥* „t)äÌ“…|8Ç= Q-ëïwÇÆv …¾ùÆüù¯èRÉþɶmåf\ì‚{7mâÀòåâvî\³8—{hI4Ú×¹re°ÉVˆ±qÈ _„BqÆŠP(@¾àÚB y9(z6Ÿ‡lÓq%B í*•ê 'NF£#·vv:¯8ð× øÜ¦Müäç?矷o_ÓÏ?´$¹mñªUÁÇAdÒ`[ PÊ…£À±]( kf_Õ\8–wlƒm»÷•ˤ$œL òù+^Èç‡~½víðsæèþ ˆ8o]þµ¯Qîì·ïرzY©ôí•Éä­Ë{{ƒ1­ù¼{‘” ¦k¥1BBœBBÍìk=óc^•¢¡¢” ¾ý¶sèôé׃ ´·ÿEårêù§Ÿ~ÿ#p×M7q¸·WÜñòË—vårßì‰ÅúV¬XŒ["v=ç8.”çÅiOÛ|¯[àÔfýMÍxß·–• A 1‘‹íÕÉÉ%©©á‘x|äÚ–gïððÅÜxóͼðâ‹|æá‡×xäo[ÕÓLÔjÈtÚ#[6N1Ÿx=üP¹yÛžA¹LhL&¥*;+Ý2›|ñê«O^gúð,çXzÏ=d/½Tô=øà𮩩o¯ŠÇûV÷ô• "“ËB(…ðˆ+ÛÆ±mä´ {êÈù^®;§, DzÞ9mÛî»fQvê¡Þd¢ïÒžž`¬VƒLí‡RÇ!W,òúÐGÆÇ‰š&M†13*>|â>ùºã\¡ÀÎcÇxgt”–@€Ãp'7¥°•®V‘ZÓœL U(tÆÇ—J ŸnmYnÛÎp6;#`íš5œyë-Ö~ñ‹kf2õÆ·ýÝ%«‚ÑZ Éà(…v´ã€ÖL•J¼zæ gºº¨¶·szx˜V­i’ò½Cc–çóÅ"¯ž:ÅXg'åùó"&aÓĶmW€/ˆ$“ÂÎå:¦ÎœéV©ÔÐk¯=Ù](è3™ ÆUwÜ‹èý÷¯™ŸÍ>¼6‘軲·7±,T&ƒ®'ï8d‹EvNN¢×¯gãƒrÉÇ?NÚ²8ÒßOB)WD}ØÌÚÏ‹¼:6†½nx€Þ[n!kÛ¼30@³m2M—¼'ĪVZmm•V>ß99>¾ÜLµ´œj›?ß1:/¹D¨={zã…·.ÇûÖ_rI0fÛØÙ,Úní!_.óF6‹ñѲ~óf’ jl¤­§‡Éj•cûöµm Ã5/Gïþl©ÄÎT µ~=×lÞL¢£ƒ`Cm==d-‹#{÷ÒdÛ¥tÉ{B¬jÄZ[E­\nOçóÝÀP©¡á”ÊdÝsæüËUK—~暎ŽP¤ZÅššš&­½¸ÏW*ìËç ^=×Ü{/‰ÎÎéD „ôõôªV9úæ›D,‹°(Ç™nÞ¦Êeve2èë®cÝ—¿L¼½ýÜûW¬`ʶ9:0@£mc qŽˆZµŠ‚Ö¶6H&;òˆØd:½Ûˆ‡Ã :îùð¢EË’ÅålÆíµÆqܦKÙ6C¶¹q#ë¿òïªÇ†ÚV®$cÛ}óMš-‹'bªR¡?ŸG^=×lÞ|ùzóV®$§§¤Ùsžååƒå‹Ð#”GFG+þl$ššZÓ™Û:”ê Õjض풮ƒeÛ4\v—Ýw‰E‹Î;­Âaæöô±m÷ï§±ZŲmö•˘7²nófb œ÷~3bÎÒ¥¨ñqìãÇq”Âö~ßaU«d&&84:š×úw¦ŽÂ¶,ŠB •"(˜¶&Ð<9‰>~½hÂ4ÏK¢1ãÊ»ïf°÷é§‘¥‘¾>>|ï½$¸íöð0££äk5ª€ÒØ€­µÛˆÔjCL´&îPÛ6†R€G>ÊÑ£T·og‰ã0wÃd pa›6ÑPÊdøÐç?QòÚqÈ 0òä“äöïGií ¨Û×Z£m›€7˜ÂópÍqÈ*…´mBBôˆêP:r„êöí(Çaþõ×#ƒA´ÖÓ¯Žõ[C4ʇ6m±mB‘Èy=ŽhÇ!×ßÏðOpI 1ã}O€­5ŽXJahÐÚ XZSRj:„‚@HkW„/Hk*‡c?þ8hÍün@†ÛRûêšL3†8Jsá]'@A¾¿ŸÁÇ#Ûß]GºXlß ÏÀÔZ#€ªã„R„€ð,Ø€Â}Ÿš8|˜[·¢µ¦mÃ)ÑŽž!w±Íu~x¶¤5e &%±pØ­H¾Ë ‘Ï«­1½0 x¯½!®1SDìd’î¾>Vîs4´¶b½òfc#=wÞ‰­Gž~1:Šá8øÎ´´ž®<~nø9)ê"A× 0€ˆ¦g`ßúyazbI$èúä'YýÙÏN&©U«ï‹¼¿ ôÜq8ò‹_ OŸF(å®àÕö7è‘÷ç&Ës¶©½ñG@sîäeÖÁwâI&Yxûí¬úô§ Æb.ùÙ…GsîÚ¨ï¾ú¿‡B,½õVlËâØ/‰E*…é]j0Ó Øu¤ƒ^$ØÓ¼¹ 2KÀ4q!0„@µD‚޾>V}êS„âq/lô»ÉKI<Ç0 Òé4ʶ߳ºÊp˜%·ÞŠ­CÏ<ƒ16F¸n!x:Á=Žǩꅖ©¼ä@‹÷Ð@iéA A9cþ­·°ü®»Æãç iH‘æÈª\&¶d “Ù,ví½sD†Btß|3pò׿Æ'ä8îbd¿™³„ ìˆ©p3  ÐRN7„»D.…ÀN$˜{à ,¹óNÑ(µjmVj¹®—Ò âðÖ­Ô2V|õ«$.¿œñT Û²x¯¾C„Btm¼G)2Ï?OpllfEÛƒéÍA¶Ç¹áP"‹õ­^°`q¼P@Zà `˜¾•’…×]Çê/} ÝÜ‚U«M¿ìL¿ô(Z[“4Ž2¼u+Ù×_GMLP9vŒäâÅ„/&_,bÕ¬wßo+ŒPˆ®K×Ð\,RÍœx 4Ôj5,ËEÍr%q¢§O3öƒPÚµ‹&)i2 Ô;ï0úƒG í}“¶D! fÍÜoY5GE‰OM!!¬5aÓ$äq˜&@3‹i3™ihh˜0z/®¤²ÙôЩSÝ5¥:67ËÇqXÊéQÐÙ,Õ£G™ÓÝMxÑ"rŶçI€ymm´žgò±Ç(íÚ5ÝÑ¥$(¤SØÇŽïî&ØÕÅT>mY8Êmsægô±Ç˜êïŸÉA陼A-e¿ãðê™32•ÊcM»Œ…sçjSˆS¹Ri0S./#è\‰ˆF¯œ ƒ„„€T ûØ1Z—,!¸¨‹©|Î}7˜?Ÿ©¹íÛ©ìÚ5C\JBð¬N¥PÇ“Xº£«‹©\å8Ì›×FÛä$“Û·“ß½Û­ý^Øùj4ÊÛJ±'›=˜…- --ÿ#¤¬#$[ZôºGFGFS…Âbm £QÙì·Öž€”N£cNw7-+WK$˜wö,…ǧºgKØ0H‰)å´5…À”R)Ô‘#$—-£qÅ bÉmccäŸx‚Òž=Þ[–ÀôK·aPŽFÙ¯”îÏfäC¡- V­znðСêÐä¤;7š¢29©»V­:•ÏçO¤ …ÅŽ” #±mBZ’’"“Á9~œD2ItjŠÒÏ~F­¿ÿ¼äRbx" )!“Á$žHÉd(üô§Tf<ï…6 ‘oÚ6{2™ù††G¢]]/Œ=ZýÒ7¾ÁŸ^zéÜ©eÃ5×Љ§öï_Ìå¾{yK˺"97ŸÇPÊRo†4€@$‚ašèl¡õtË-ê ¥¨/–^¹ö[a‰  +›uK¥79)¯DN´´ðz­ÆkéôÁlCÃwâ==/r¹ÊŽ™–¤^ÀÐÉ“´57ë«ï¾ûäÈ¡CÇǧ¦—¡sq,&cJÍij” £VìV§^˜ø!ðBaþHxÕ*¢ZÅð½îŽ6 2‘;j5ýz&s ÐÒ²¥ã꫟;¶sgõº•éw >s1:ªW_{íèäää‰Ñlvq:»¢Q™ðExaô‰×%«Y!Ü*æ…Ž/`šì,H)AJR‘¬TØ‘N¨D£´_vÙ 'öì©Þóøã¼øì³029Éš•+®ÞÞ‘ñ³g‡3™e9­;—Äb¢Õ¯N³<í‚9[Ĭø¯Ã;çCHÉDK ¿-•x9>X‹Ç·¬¼æšÊ¥Råï"^oîßÏ¢dRÿã׿>²wÏžÁãét÷„RËãq9Wk—¸a¸£à2 דÞGo1 Òÿšï]ç_ï—ʱ¦&~U,êÿK§èdrËúO|â¹?>ûlõOûöæÅ×n¼òJ>zÓMæï~ó›õéÓ§¿uu$²~sk«±²RA:Âë—ð׆fï×o~[í[ï{ƒ ‡Ãü<—ã÷““ûÃÉä#W¬[÷üÀŽ•?=úžëNþv‘7pøýîÝTŠEûïïºë/ÑŽŽ‡_Êç_Û–J9Gš›¡»Ì€oë÷MLíÁñ LÛ0°L“Z0Èp$¿ <—J”sæüëGnºéyG©Ê_Ž» ù †Pýöòk¯±pÎýíGyåÕW¦R‹³ÉdghÞ<9bÛŒ™&)Ó$0ešäL“\À$g˜2L²¦IÚ4™4LÆM“Ӧɩ@€ÓÉ$0 žÙH&·|áž{ž{îW¿ª>ûÒKï‡ÚûgÛ?ö1îìë3ÿû™gÖÍM–µ²2:*[´&*!h‚&!á®èùó‚ÒPÃ]ë)iMQkŠ€9·J,62V,üÇÊ+®øí+/½Tyõ­·.êù¿JÀ“ßý. .4^|ñ¥'ζ[å² IIØ0Ü–Ã+¯Áº÷ ´F£±µ»„i95F¸A·´¶N¬X{Ùàñ'ªÛ~üãÄçÿ®ÙgåH%tEXtcreate-date2009-12-08T12:47:42-07:00¹—¶W%tEXtdate:create2010-02-20T23:24:27-07:00Þšv%tEXtdate:modify2010-01-11T08:49:07-07:00mîSö5tEXtLicensehttp://creativecommons.org/licenses/LGPL/2.1/;Á´%tEXtmodify-date2009-12-08T12:47:42-07:00æ&ÀctEXtSourceCrystal Projectëãä‹'tEXtSource_URLhttp://everaldo.com/crystal/¥‘“[IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/split-section_16px.png000066400000000000000000000016001321676412500234110ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÜ :‘úÇ÷ IDAT8Ë}“?l[UÆ¿sï}~~&ϪRÛ¤iLQ¨Tœ¨Q+YV"BQ†ˆ™0PÚgdK™(*‚:€P„ ˆNH• (0¢"3á„ð¬Ø‘Ÿý.×ï\!ñï[Îwþþä+¯]w»ð¨ýa{Zk(¥„ã8(Ü_@»ÝÂhyyÊè¾9–É`ooBh­n~ø•ÎÌÙr¹<ÚétjÙlÖZ†!ŠÅâgõzý}À¹sçÿán­¥n·KóóóÅÍÍM«µ¶QÙ(Šl»Ý¶ÓÓÓ¯€ZZZº·Õj•fggcf†1©T +++¿Ôëõí™™’Rbw· fsŒBa®ëT#kkkõJ¥`f ¬¯¯¿ àYÏóHJ¥ÔQlØ¡1fh`Œ¡ÉÉILM´ÖZbfd2Yh­ $™c4›M är9@ÇCƒ±±1xž‡V«Eà ™LB×u{B4 ´Ûlm}‡d2 f>½¸¸XU­V Zk„aˆ8Ž1>~`-ð{Oÿ¹Ìt:«W_Ä­[¡Ûí€]]]­T«ÕŠÍ"‘HàÄĬe„ãX^¸ôÜÜbâ7ïîÇïmll4¥”ã™LF„aDD¾ïÃq¨ #nBáú»Ÿ ßïÃ÷}¤î¡¤#-3×z§.¿½q%¿°°HEQ"‚Ö¾ïCdS*z¹VÃí­‚‘°Ã÷mž9K'fJ–æò#Õ7žŽÃØßßGð}Nê‹OoJS‡HI¥@D°ÌJÒÉÓgíÏÛ[ï@H  y„~¿s—jþÑó›J9° IHÇÅnãG‚J¼ Ž#ÈåòÈçóð<Dô(sϼXfÏÑ#'ÅÃ[ÿôÍ+§ÊårÀÌ^:F¯×Ã`0@2™&?ýÂ[ô7¥‹×léâµÏ?ñ¼ÄÿˆîÜùÒµÖ*cŒBHf_ßý5}ó«ÆÛ——~òüCÇ»PK"êþtäµaèe}Þ"IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/split-section_22px.png000066400000000000000000000016221321676412500234120ustar00rootroot00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  šœtIMEÜ 2_ܲIDAT8Ë•ßk#UÇ?÷ÎdòcËT«UŸ»/®(¬lwM¡º(EŸÚúè"ŠUŸ–âº²Š¯ú?ÑZöAJ‚±+u¡+bW„}Ùt“à6N2™9>$“MÚIêËæž{î÷|Ï«.^º”0ôé/>XùHjø__Ô.óóóÃ{#büN§­µÒï½»"Žã¨!‡!À¥/>ÓoŸ{'Œ9kW«UÄó¼îðF.—Ãh­6› ",•Jü²½zž§ED.\\•ÍRåÊB¡0ЋŢPŸ|zžo¿Yc’”J%«Ùl„³³È‚‹ÅX»B¡@±XT¹\syýÇ{=€D"@§ÓÀq<ϰ€`˜ãZíÖˆÓ™™ûF9öœG_x†r¹|°!ÆåÅÔjµqˆ•Öh­ñ}óÄk¾Ô¸¾~ ]×ÝŸ”Ó:~ö~÷V€åÏ¿G[Z_Æ2˲Ⱥ3ÜiîŠ|×:~öÅ­¯VÖ#Ôãòb¢®+ è©“<6ÿ,AЛ9–e†=½Ónó÷ï¿üpjyuúÁ#òbRÏŸ³‚@ŽÉ•͆ˆ JÝ]"`l›G?Å-D¤~TÙ™~7…–¥Úƶ !a”‚Žßån™«Xc9²×¯þܲ–eÑníC:;Òn‘ÜØÙ`muY--õÆç™3OÇ#¾òõûu€§Ï·nþõÛ€× ÛÅN$H¦2´ÿÝÎœŽ›ÃqTôžÛæá'ÅûÇöO2ìtmu¹ Ðh4@4kúãuð5•JÙŠ^™‘®ˆLi­Ã·¶¹ <œ¶m»šL&±ú% P¯×ãW*å4Б{|ßÿGk}[DLwúþõ/ß|îjÿâ©k×vÚ@6*ÓqòÓegž pÇñIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/split-section_48px.png000077500000000000000000000047721321676412500234360ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨d IDAThCíXyP”çgÚªÓ#“iéT£H¢’LŒV# AXv9XdYeW[\DM´:ÚŠ€ˆŠâÓzE„„€ëÕñšiªŠŽ*‚"ŒÊ¯Ïóú­©‚,u©Ó?øÍ<óí÷íó¿ï9ßÏ¢}ø?EVVÖÀI“&9ÙÛÛOppp°³%ÐoGGÇñô|œ——×X¹\>ÆÇÇg´B¡¥T*?öööþˆ~[;99pssîîî>Lšîí#>>þÐÖ­[±fÍš²zõj¬X±K–,éX´hѳ <¥ëº¶ †¶¹sç>ÎÈÈxDׇtß²pᦘ˜˜5Ò”o:î"z*•êÒ”o!!!ç¥=˜r±“Ҕݣ¢¢â§®®®#Ù÷d2Ù¾?eÊ”÷ƒƒƒ­âââ†%''[²Y‡¦¥¥ 7oÞÔÔÔ÷Óý 2ÿ`i:‹°°° ÒÌíá´4e÷ MQÜe=¡M´§§§·Íš5ë1mªuÆŒ­IIIˆÀÃØØØº²4O›6í^¯o"W¹}—îÉïïÒÙø5ø»´³Ðcô¦«¤1f¬ JexxøwÒ#³@Y©g|}}Ë:::¤ao²geDDD¯ tÛ3¤XöäÉiØ›ƒ\óçÏÐjµ‚ÀÇqõêU466âÖ­[&…õX¿µµUÌGµ¡gÈT¥OŸ>ƒÌ[€r¸ŠâB(,,ä·º‘2)¬G™7nóõØ,%íííb9` ¤¤¤P€¿]êm”•M›6Ò3¨.€Ò±Ia=ÖÏÏÏóQlöœÀ³gÏÄ sÀ.Du¡×,@•ø„´ÅîÁx@MM ¨ùBPP6)”~1yòd~ëbÁÙ³g¿äBåååÈÌÌÄþýû±}ûvÿf˰pŒlÛ¶ ;wî²{÷náðáÃ8þ<ïã*‰N£Ñh)³éÖ­[÷ž´å—Áz#2²B8Aàòå˨®®6Q#–.] jÒ@Mœ¸RÀ‹1TÑAES\©Ú a}nþrss‘““ƒ-[¶`æÌ™•VVV?“¶ý#( œýEª5ÄÝà@GKÑLåææ‰,Ó•ð7o ²¿…›¿Âé3GÅéé³8‹)ˆÀnÖ®]+*(µàvÓ®³³3¨5è±°G°el.]ÈH€s5/|ðàA”••”v-¥%øîh%>_œ ‹Á˜›!Xœ•‰Ô™© "8D§Ó§Qð&S‹°ˆ®­|¸1sæÌièß¿gœ…ÚÚÚ$µžãÞ•|h›Qvó±:} ‹²ñ§Ü¥þÒ´”Þ!÷Yÿĉ ó²p5N¹¦„õ¸UYµj•X-0`À€Î”J¿r¡Aˆ ]7Û(¸ÆÀßY=üX&êàç¬âë`Ï8øÙ(áê½ á;€Qãç"ÀÎës–¨¥iŠ‹‹-©×o2ž7®_¿.²µ)a=îîßü_O@«*ª¬,Gm]5>(LJ®ðiHÆíƒæìBK`v"Ã>ꢿ£þ[x$ÖBe8ƒ Äf7Cùg8[ʾ÷íí$MmQRZbIhâàÞ‰[æ#GŽˆVÛ”p[Í­ ·-F]q~~îи„ȬĔ˜·1êv·©{á[O]ä±ðš^ïø*ø$} ßäZ(gÔÁoF=Òþ†€Ôzø§¥ëq¯n„fÁqxþ>¨Õs˜ËTžû_?ûxÀ¦+W®ˆo¤Üóó·SSÂzܲ0 Ç@—­„V?Ïx×k|ø× ]p,Ƥ°¯09œÈDC] ÏèÈõeðŠ)‡W‹«„ob5”É5‚„_JÔË®Býù?á#3ÀfHв ›vŠÔ†5¶µ=ÿÒ`NÁ|m3g„vÚ‚aÞö‘ÍΪíp ߃I!»áF$Üè÷äÈ}ωèKàI$Ó=· ‘ðŠÿ¾ID$±ʤZå´B³ð$Æ V=Š×¡‰ŠбcÇ T*Åù€ƒÓ”°Ÿ•9µ3¸tK JGl"›ü7Ã)øK8O)‚«fÜ4d&Bâ>u<´_C¦%‹èJ¡ˆ9HDŽÀ›Ä‹6¯\úüËàn­<3ÆÚçZw`hhHSKË#± s`Ò‘Ñ ‡ùØj[ì”E°QïÁõ—°ù ÃöÃ)¼#Êà}.ú ¸ÆTÁ=¾†b¥rr/EB5¼3.ÀË}dƒ&–ù÷ù ÏY^^f©V7ñþ³Uéê»Ð«ÂmŸ½Í¢I h"æZ)>K€§"î¾yùæ@æ“O¿õðôχ<`ªPn‚"¨r¿µpÞ ÷äzx&ÿ>®³!êüÇ<à'Ò”¥e¥–t&h2~m»wï¸æ<~üؤ°§Rc4iƒçô*¯´©7ý¢§`Cˆ“Ú v4¨íYTµ­Ÿ!ÐViPñÕ&pŽê#Ç}Š?À-ù8¼íb;”cýfJS½UnK:Ô7q^7L Û,ôß"Xž¨W‘¥äŸ%7j¦(¥Ç/R¡YÀü^@练 zGšÚ|øÉÒã}]æ|¯qþDzÔ Ô_ý‚²É:j¡ŸÑø-v°ÐáGˆñÞ”ð'j¿ÎÌÌìüYåM‘šñndŒî·Òm·ˆŠŠK}Ч”Ç%22òÅoSBg ›‚‚‚ÞsŸ>ô¡}0ÿM/F¸N8áIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-book_16px.png000066400000000000000000000014321321676412500225210ustar00rootroot00000000000000‰PNG  IHDRóÿatEXtSoftwareAdobe ImageReadyqÉe<¼IDATxÚTS[OA>;³7J·—å^° ¼@b &Ƨ’˜øî“1þü;M|ðÁ@bb5!)µŠ–¶‘n)–²»twÆ3»­àf¿3s¾óog¥ÝÝ÷9AŒ"â!Ax„Šˆ¤R©õhÔH½ÂyQETd| ïì¼~ÐhXž?{:45}/Ùºh[çç͞绸®e3éu#–HéúÌÌ8Åâǃ½½_¶¶ oD…áZ­¶Z(..Ì.û>›2“«f\}òíëáÊÙÙïüÈèxŠH¡¨–UËmÞ_{lYÍ8‰X,nt./Áu]Pd9ØØét़?ßi_݄̇GEUÁ0 ¡ÎQJILÆDÆq™Y°Y×t0ÍdÖwEB%Ýn<Ï£85†á•qÞ#àŒ›}Æz•ù-_Ã5Ü*^tA@9gŠPÀ1*zc„ÒP@/C=ð€Uß÷‰L{-`ˆ-ðà¦Bü…äL.$Æ%+ Éÿˆ|¡€„%oÒûêXŸ€a¯œ¢T(Â{F©¯à¦‡^öƒŽzBº ÑT-¨H"BdPåV ̹‚ í:n7žÁï+ƒãØH˜ßó KÂU§õj9HŽ Ümãô85Í+ûªõr{bƒTUüÂdÓÓÉdáôô'ì~‡fR°]–Õ€ÜÜ’¯1×’ðgZÑ/—¿o”Jë•Ó_“õj%¢)D[ZZÛ¶¡^¯C³uÉ©¬ØF4ÞÒuýhcsóíÊÊò® H£“øQòhàœLiÊó}³Xü4~P*™Ýî5¼;ÕžÍe­L6[a¾‚BDOUA`¢SqÇqÆÐ›”Ò!’‰'rýS#9÷p­ƒc“j²LkXLüÒMS®>ÆÀ´IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-book_22px.png000066400000000000000000000022031321676412500225130ustar00rootroot00000000000000‰PNG  IHDRÄ´l;tEXtSoftwareAdobe ImageReadyqÉe<%IDATxÚ”UÍoUŸ÷Þz½klj;k'Ô‰í8|(qAª)pªpHUO‘ÊkÕ#Uÿ¤"qà€\z@EHåD{@*4-„D• H$j QÇv>ܦõW¼»™g{½¶Äg=­wwæ7¿ùÍÌ[&¥Z÷î-ÃÿYÉdêsÃ0Þ=99¹²·W¼æW(œÞ»¹yóVêÆïÇ”“•¸dYÖùÿµ¬Ÿ£Ñè¹d2™Ñõàe¼†m´ÞŸ¯cãñ·Ç£a»Q;2æ_)€i¿88¨ì ÁÏ?mÜ%»ül® “z0BhJ¥^ØÚ|Psìæþ—_]㜳md|ÚclÛ¶þá… Z~6kÔjõNT!LÎ4—õåµÕ_¯o¬o\œ°&'Ñ[>R7Þ|kjii)µ»[Ì 0Æ(•J ëºz ñÇ‘ÕÑQJ;ë‹xz¤;2ÕˆìíVÊå2Äb±=ç}zDZ‘L ÖUÜÌ ¹lŸ8Š-ó98ã °ä*€qéš×q€3ÞóQ›¬Q*h·í z¡Éˆ¡¾Œ19ÄØ jš†Œeä˵ÃÊ• 40Ml]ÜXµž¯=,°ëº*-ԇϹâ«ux0fEÉ  ¹nŸ±ì°§£@à~(Öî&OR ]{Øu%B(ÆœûŠ'»(]!`X ô댒dõᔪ’Â_¼>odÌ»ì˜NöÉ:#Ö00£t€ýíÖõS-Žg~eÈÈ×n7¦‘þ®½>í8S`ÙU‚yK/X¸Ï˜"STKWô&Ov GåVýMEÄi¤³BÙ`†¤s'k›|›ðé×Ï03ͦ‰Ä„2 …BžsgÐAè*dÇ\bŽÅ {Œ¸åW?½ W>¾ êŽWaå—Èå_‚H$á‘0´aU˜ñ¸[ÿ¬ÃýßnCÂJAd4ÓèÀA¥¤€Ç¢Q€mh{ÀOªUžHÄk Ñш ‘‘ DÂ?ÀÌÌ d29ÈåÒpêÔ4lmý ?ýøFFBppX…ýJöðàj6ÛðûŸáÎÝ5H§ÓMxss“¿söìË•R¹°Pù¨\ªn? ýñ×##d®ðÌôsÍedªÕ#8>®CeÿžÕšRÓôfdt¬Þho”³¹ìw‰xü3˜ecV2¹‰û“ùy§í¤ÕJìwß+î_»}ç~ÈuÚ<:žhMM¥ò/¾ºfY·L3¼Ž¶eÜøAÇsù¬iFÿæú·¢^{fâ-Ф@éjÒÝ îoK:È™´l’؇X×ÇXÄÆï/:ãççæÜµÕÕŽìl=rxŠ›úI÷3ï€î“žuì˜:·5›Ë{_›`ýJ–Ùç½IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-book_48px.png000077500000000000000000000044611321676412500225360ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dÆIDAThCíškL[çdzuÓ¤åKÕiÓ>UݤiÓ¦mŸº/“ZeH¥˜[…„–À°c|0Ö²fˆªÕ.“JE(!’”«¡ îC Ü‚!7’pI¸?{ž×ÇĆsƒÙ2©ɲÏå}ßç÷üŸ÷œó8ð|$??¿ƒùùùùÍW_ÅÅÅo ¼÷ìÙ3ÝãÇKfffn=}úôþð««ÖÖÖß?yòä_ S°Aóóóüi{“Zmý‹J•¥:xðOoãæÇį:::L+++ŸŽŽ&ÿ¹  à§Î³w.l§X\\|ÁÇË´¶¶Æ>¤Ô8ŽäÙÙÙ/ZZZ>ìëëû 6û™Ÿ_œ_jjN¢J•ùKgO[H©Ì4~ðA*>|Ôj3ôôô:–––æ=zÄq ³u¬ÔUVVþ–o.ª‘‘‘¾)¬®®®ÜÜu÷î]Ü¿r·´ôâ”Tš„ñ$BLŒq:&æoïò]n–Áó ©T½ VçÀÌÌc¾+€‡"H¿µY²066v³öß•‡ÚÛÛ÷âÅ‹%:×=øè0ûÆyÁÆ[\dM˜° :Ú¶Z€ßã»öTzzv@p°rrþÁ7Àz…;wîÚɶi0xyyæææØ`h9;vïÞ=˜˜/IHÐü†ï’ivvæ"G'· >IÔ/Ü¿pb³}¤£G5p䈭ÿ«¯~Èwí©”‹` ŒÆOYÊu011½½½lŸ €Ž=þš*/²œ>¤ÞÞî9™LÑøÖ[~yaaÇukkK,2oÐÙõ䂃™a/-ýP à¯þAApš5pØè€;^ajjŠ9544„m¦1˜ç8˜äòtÖKˆ¸€%„‡§ÛÏ;& Àq¶÷$9˜Lg ¶s€‚r óp²Â­[·`ttÊÊJáÆfÖŽ`}pô¨Ñ>6fý²§€؉tÞíÛ·axxnÞ¼ ÅÅE€“›µó€&ÆÙGF²„pˆl7„ ¡¿€µÛ-ýv‰BC9ûð°E 'À›ÚÊ|L€¢¢"öMò€².gdDKè}w–—÷VBäÀn„Kh ’@&ãìãã"z½í}w¨Coh» šÐ$ß(ñfÆõde‰ –À½øÂárDEºm6“8€³„òX÷9à-€ïç€ 2R×ÝÐPû²§ôúl‰D¢ð™øÄºk€Í÷5 R⳦»¾¾Z C¤€Œ O¡g¡8°Û9 æÈd[ YANg ¹v뀯¨„""´]¢:]f°7BKh¯/od«è€bk€´´ ÀwsÀ—Û:––J¯JˆÖ¸P‚œZw S 5Õâ-ÀF\û[B5[È=hE¶€ØÃÜþ:ëꮉäl؉îûçÀ À‡¹ÎªªwÄæ€-Ô9‰w_BûçÀ [RJ$¦Û÷ù=•’"ÐßßÏö¹h}+°Ÿ€¿¿²„8.;L@èNü¿ Ç'€EÔ#îT&¯Z >¼ @` ä³&;q@ì>@t ·¤½,!€|k,!)9™ù²„(@oæö¯„Àå€Y@§³ €rW“““›JÈ×ÐbËß_Û`Ðë-R‰Ä@ìÕ¢ `¯%䮀ð»Q9x9¶r@ìÅÖV®l»Ë½O’0À2ÞÈ@JÑâfåf¡º»[0kíÐÖÖŠƒ7`ǵP^^Á`\@ííí¬$‚æ‹ àÌ™3,Ë$JÀÕ«WÙ~‚¤455±ý—/_Æ ¿ÆßUPWWMÐÑц㶡Sm9ý°?pÈdÉ|¸›P÷ZBWg…À@ú“Ž>þø 8{öö-.Rº0Ë#˜±A  Z[[áÚµklp ¢¡¡‘G K´]VV¬„\™®®®†o¾ùƒmG§úÑ•!öéëëÀDÕ@qq ¹žŒÙO‚ÄÄlˆåbùp…¥Ñp¯«TVkb¢µ6"B?4ô.å´ª…¨¨Ðj­ðùçEð% ¦3ÜP£,€7š˜C$­È Y©”——³ý”q*¿®®L‚ Âà Kô:œ?¬ÖÓ TfbÀ:|lÖaЧp\ÍJt´a,1ÑvQ.7çÃÜ™rs3_×鬇’“Í길ô ǧõ‡…©WÂÂôX‹JµðÑGœôŸÂ—_þ3[‡%Ò‰0}xq°,ööö°€''o£;˜íf,»J–Α‘ZlHÈ)öÁÏž8‘Þ,—[ qÜ“ÉöÇÜ\óùö¦³g ¤V[­Õš)–¼'LMÑÑÜ©Tƒ”šÞœBa‚¼¼¸pá<+½’’s`±œf°R©ÓQ:_&Óa™rc'Of|­RYLz}¶¿F“ù&?ÜGiiæŸ''g‘Kéññfri,<\¿,•¦²ŒÊd),`\ bv¹ÙØXKW||V±Vk‹ÓhÒßæ¸Ï^­/ »9î“?$%™Ž!Xa|¼©¿­*•9çÖ›--‡„—ƒßéÿRüò¯€ŽMzIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-code_16px.png000066400000000000000000000011541321676412500225020ustar00rootroot00000000000000‰PNG  IHDRóÿatEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbüÿÿ?%€‰B0 `ÀˆÓæ,]ÖÒ51ƱAbØô³ sªêÛd%åÕ·ø/¨Í+ÂmZç‘ïÿðŸO~ò¼µzÏÞôlk¬zŒá…ƶ¾@qÕs/¾°isÿ}q"?)@&bóþ}¶$Ç%¦q ¤Å€¾©s–½ÿ'¼òÕ»oü|OÍO‹²DwjnZŒHîÍûÏì µ =p^¼ûiõìå[V毷ž=}Ú‰+¼@r`5@µ^~sÍ/©–e"###CesÿñW_Y(Hð¼ãù—§®$»ý?ÃŒ °¾yï‰çë/L¼ø"b©-v¢­¶Ð% Œ5åì­4øçÞ¾ÿBàèåW‹½x» h°&k<|úzֱ˯€äìt„7)Hð¹:}† ë7nd|ûæ-—²¼ÄD&ÆÏÎßz™ÿáó7E9Ia% >û©/ÀÃôÝXCbº¼´ÈV ˜ðÍ›·~é¿`þþþr(È©LŠrR§ùyªøù>ù`[tÕd[eÅøøyŸAŘþýûËw'7Ïÿß~ûöíûs “5¿ ³CåA ÿ5ÿÒßøãŸ¿Þ©«©ý…8 º;;¤¥d±±²½ý÷ïßC Ð- ¾Ä×^Ñ >}ç÷¯_O¥¥e>_¿yó/H/@€'`ägâ˜;]IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-code_22px.png000066400000000000000000000017041321676412500225000ustar00rootroot00000000000000‰PNG  IHDRÄ´l;tEXtSoftwareAdobe ImageReadyqÉe<fIDATxÚìT_HSQ¿wîfÛîîÖʉNÓER´ QŒÞÂÀ§"´§@* R¢I0µ)f®0-K„ E zJÐH¢@B2©TÖ–Ó9·µµÍ¹»íÞÓ9×¹œ³èŇ ß¾s¾ïœß~ß÷ý6€mÄâa´þÿÃÀØŸäÖd¼Wglëj]G±ÍwËÿ„‰s8žl{ø¸Ûƒ§” ½Ð7Y¯¯:]·eœA{ Øz*ÊŽ—®œÐŠ 5MsÇS³=¤,¡iKbœ.—³s%?o›m1ß-(‡î´tô}DoÖâÄ1®½~ó¤= „RtN“úzªÊO”®W®±½«Ûê—q‘¢“ñͬ¿|þYã†[m­VÕ»àJÃAX¼d:ú;P´PNÎZëÑÝ9WH…Þ^k4ÖÅ1n¼ÝÑÿÁBr}“ðýmÛel2ÌüÍðõ—êóyªÏ"ÃU¹/ƒèÑWž* ƒË±pŸ$’ö[A•׋Iów¦4¾:î÷ûñÅ@g"<a ÁBãóÐóD"c¦ºOŸÝË­S‰6›óN\+*õR™Ò÷nÜ–‡»23ªML¡v›f>ªw4 Šé˜ÌVµ3À{9ñÕÍ ®`OÊpÕsù r{?6†ŽŒ¬o÷ó7ÓǸ¡HD‘º­ç·g¦ ­ú1é¯Öâ·ã ÕÞE𫏍 ³3+]}~kH§ÛÍääì±áM}™ä ±(3uKUanªG"³v— wð“Ñd±U£J¡iÌ3vŒ]B9¥L¸T”¯¹¨MW7ã !MÂùÝÍIL°ìóùx8ŸOÀ¨,[›>¸u³Ü<8<Õ‚rJ…t9ÔŠÜôj‡Fq”ŠéÜÝéµ Šüã ˜ Ãâ—v{žÙ0øU+Ú² Jî(>œSæùáM¦H™¢%—¹åg×@ï€çpô~ÔÀyÜ~™ñƒÎ.Œ’“,dM#òÐøÑGb÷DϼUà4 ± @óB4?z“¬VƒØ¿[ß“'˜6KËB9Ñp˜* [â ˜c˜¶`°¬— CI¢$6<Ðÿkok:Ý^FDÁMCÖ¸ ¦ 3`ƒÙŒE=gH††»é`ÀG)(zÛv-sÍp•ëçOÕÇœºj–~ÆIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-code_48px.png000077500000000000000000000024771321676412500225230ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sRGB®ÎégAMA± üa pHYsÃÃÇo¨dÔIDAThCí—mh[eÇë ºÉP2qŠŸDDhÙ¤Iî[š´Í¶vë¶.¹/Ï}išfíÖº47yž›´é².ήj™âpü&Ê` ë' ¿øAaQ'Eeß&sn>ž'}ÊÔ°¹­M‹p÷þ¹7çœÿsÎIƒÏâiÓ³b³AŽ5ëÙÃ}ƒðË5ÄPF&KÇ£Èí9ZÁ÷òË+‡šÌ>Fø¸¨{TIVhÛÞIëÎÆøíDuh6ºg’ è•4r¦¹~ky¡´á®¦Ò¡¸wA²Çh@õ¨ ß!Õý¶ÍÊ?Ée5(ÚÐ[ŠS¦A½X "¤‘?›u÷5×qIýã¥M;ʧ7%ÆiP+RѪþ9 aœÎ½¶šËnHÌÌv†ÔÜ \ó(K€¤{3-&F\RÌ$^+#2RÉ5 ²Ô‡©d ²?îBûŸç²["9€×DôÂþ»Ï`ÏRìQFdª#‰_â²¥#f{š¨çgªvaYë>DÁ÷?¶˜ùÝ\rGt¥Ü Í:ù\±YPMFTÉå°+vzàa.»sÚ{ÜÃ:þT®¾`xÞ.:¹ª ü+™ZËe‹¦ å AÅ¿Hö¡j‚gŒÊ:ùlµ“Knt¾ouØ"£¡¾2_┸LÈV§…¹lIQÓ{ÖÉ™t|” U‹ŽÂ;ñ °Õ³\ößÄ ·=¤áiÉ™Ïë.’^ø9†°Ã%uE´qSc‚œÙhA·bM'êä¢bx¤œM=Àeµl·ŸŽXÞ2¡!c¤š2z7žÊ<ÎeË­à»(ß/¨ä‚l¤œ;H(Tç›V“´rÙušnFÐ sLÜ”ÈÑ ëë¨ðÙf”ßÄ%+Âkïú°U˜ŒÂoÝ9Hj‰Š`!î~èô•¯OüPÂ=é}"¡M»Ý…Ì¿×=h¯á’cK·gKZaŽT UºÓ`Üý¾áõ\2O ¹[…>+3ïƒP4ËPñ¼„ˆ3ݸ‡Ë–Í&-÷• g σ…BbñEyî¾Cø~.û'Ù ^A^ ¼w‰µLÖ›PÈ,žnqr¹¬®8û÷?¦ø(s³Œ` SÙ*±¶zb§3ø —ÝœÎäÐ 0u?‘ù”äëÂUá#½ý7Þ6KÌÂŽ æÎK0ª³zp½éVƒlã’Û#æà8Tã{`ï-‚A~Š8Î%KB‡én`Æ0»T['$V–ËDÊÉkqçôˆYœ5ò‡Èw 6™ÃzîÔ–^|[;пéËà‡¢‡g_Y°,[+¨pª£ÇÝÀeKC»ÙSñ‹ðß²$ªÞTc”ôã¹ì–i3r» Ëçö+ÖÂaÏ´è9KêCÔÄ)I%³ìÅ,f/°ÕÙˆYØÊ%7e‡1øœly'%»T­&Ûlá|]S wrW/~”Ëê ›Ìa= ï#°·À'ž}?“«¸¬†°á¾ v¹ÄZtP+Ð|7éÞ—Š™y…K–—6Ó“`Où:hAù ¤Çé6Ë}™ß®!Ð5ôktÏÕž.éÅYAwû.WÈÊþ7>ÙoÜ'#o_È™jêÊ}´ý&mVÒ²oÊÎØTXÃowôì{Š_öñññññññññùßÑÐð}UÅŸ¡ûrIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-fullscreen_16px.png000066400000000000000000000012121321676412500237250ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs  šœtIMEÖ 5âwßš5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPÙ‹oÖIDAT8Ë“;h“QÇÿ›5iÓ%Hñq‚ ”*v*_PÅÉÇàÐÁ*ÕÅAppHùšà¨`ÁAPíà³VQtPq -Š%-EjMSMLûuø’ؼràÀ…sÏïþϹçȉEoý4g œXÔmÖœXÔµ%ÔîþÛè'ýHpé¹ø¨"þ.qS­ÉýK$ÄÓø~ŒQM ¦:yCÀÏ…ëo¼—ePÑO9/hYk±>ÕH0æô²±=@¸£•{¯g<wždÇÖvBÁãñƒøV))÷`ž2| Hý»Jå«<æÿQIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-fullscreen_48px.png000066400000000000000000000054041321676412500237410ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWžIDATxÚí[ëoU?3»í죻ÝW †´Ô¦hdSl Á úÉÄhŸHAÔ1Œ_)~lH¡"Ðb±TŒ1FÒ*-R,"´MÖÚî³ÛîsfÖÇãݺÝ×ìƒÐ_²9™;wî=÷wÎ=÷¹kXÃã .Ó ›Íf³ÙZ[÷ïÿðÃ}û††ìv»Ýfs:ñ-ÏWZñG²ìõz<^ïääÉ“}}ýý]]>ŸÏç÷ÏÌdýôÈ‘Ï>;|øÚµû÷gggfä‘\CŽˆÇEQ“ÉË—ûmdD–ùôÓC‡FG•íêŰPƒvرcÏž'J§ø¾}o½år¼ÿþ®].—úåŸ:uáÂø8@ÿ7ߌ—®7o> ÀóÇýèW†îª‰å¥&ž@åS}•FÅ P.╨CTÌD@¹‰¯6=´¹fä¸\s®Љ:]m­V«^¹Å‚ô!ýpÆW|¹ÙÚW¶ Ñð<ÇX,f³NðÃÃÃýpñâåËwï–K‹• úIÒô-5òè©£yîÐh´Zž°Xêêt:l ^`µ¢½yÓí°Zëë €íÛŸ{®©©ô ™˜p»Yý6ÖOí$,-E£’$ŠùL¿‰«druÞr6@¾ÐjµZ‰F¼Åb2¡!ÒÓ§¦¦§ççÙûgžimmhP_¯;w¦§X}äŒ$ =ôL2XZŠÅDQ%IEž²eÈ×ëkjjjx"Úd"â5¸¾Ó­VÌW_rnÎë]Z°Ù0¬_ïp˜LÅ7ôáC'bå“á•ÏózÈoÙ{LB¡h ‘H$r1D6þTë}ôöÛ6›Åb0\¸ðÓO·n1C¤O†IOÇaµ"ñ±60ÇE‘ ’ù‚¾§òȰL2‰ª•Ä3 °ÿ®]>_ œ8ñõ××®Î[ѳ ?~çÎN€îî7ßܲ…¥›ÍF£ üúëØØÌLzOÐéd«•Þ3C €^_ñúžzÏc[˜$ÏgíLýºº^yeóf€;;;Ÿ|’¥“ùz{ÏŸO5T2ó"þÝw·n]Iî(ûfÜã‚\Ç€µPaTl x\·µPa¬%BÕ‰„ºÛºª>e<¿y ‰ÇSw'F½¾œ+aÂòr$ø|‹‹Ñ(nÞi4Ga+átÆT\ùgÏ~÷ÝÄÄÊ‹lrzÚíöùn߯ƒ@`q1ðûƒÁH`i)ŽÅò/·PIõQý¤éGúæ[.ñ£ä­hzzΜ¹ràÌ™o¿½q#{þ7¦¦<¸téúõÙYô´HÀçÆӳ߸¸¸¼‹å«Uî ò©¾Lú¾¤6ÄO®(xîé9{vx˜¥ïÙóúëÏ?ÏÞ_º4>>; ð㣣÷î±ÝPºa‡÷èÒ“I–ÀjŠE0ˆGŠ~?<"Ï' ôh”=âÁR(„ß¿ô’ËÕÒòÄ#J¾Jv@8v +&éDl`àâÅ?ÿdG‘¤·2‰å’¤_2‰µ ÆdN Ù«‰Fc±DÀçCƒA"x¥LítôH†èíX\ÄÐE'b==çÎ]½š?oy [,#Et:AÐjñ F§C?—åT°A)]¦æhl´ÛF½¾0â ô½ àYµÏGcM=õ€ÿï šŽíëûå4¬(ϛꯤ˜$IR$‚³F+^rgÏLbúÓO·´8644˜ÍêéEåQ¬¿ÙLDSP†(µ§«%[ˆ‘¢^/zóüôkô¼}{{{SÀ³Ï¶µ­[§^• òiöóý÷W®LM1C( §Ð%Š…Þ Z=_³ ÂÖ¤¸×›îa^o0lۆĿürGv§–NR}T?éÃôC™/ñùò•÷: PH’$É2†€pàµ×^|ñ©§vï~õU§³|ó¥¤úIÒô-Us7” IëËu÷2W>¤_¹P±Í¸ãÇ®^Å™L|ðAWWGGùNèëøüó‘õÊU}Pªój8ÇqÏ£!ÊqO¿¯ohh|\}â•xdÎŽ?wnx˜S*PùT_¥‘¡ÐÒ‡†!öç²[·ÎŸ?t¨Òjêa¥îiäù’$IlÝ äS– FãüüüüÂÂä¤Ûý÷ßnw{{ssSSss5 ›Õ ü_5ÀÄÄÄÄÈòÜÜÜÜü*°š®Z•RHÒîP<Ž2F¹¼œ.C!ÊŸ%¤±:J"žÎ®èõˆJ^2¬h’IÄ“! ”JCÐ3ƒÊ1]£©4%•AáÛsÿ0h&AÑ!Í%tEXtcreate-date2009-11-28T22:45:02-07:002#[%%tEXtdate:create2010-02-20T23:26:18-07:00gì=A%tEXtdate:modify2010-01-11T08:57:44-07:00 ¨â2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?ýêÏ%tEXtmodify-date2009-11-28T22:45:02-07:00m’-tEXtSourceTango Icon LibraryTÏí‚:tEXtSource_URLhttp://tango.freedesktop.org/Tango_Icon_Library¼È­ÖxtEXtsvg:base-urifile:///mnt/ogre/privy/docs/icons/open_icon_library-devel/icons/tango/svg2png/actions/view-fullscreen-2.svgän IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-refresh_16px.png000066400000000000000000000016201321676412500232240ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<"IDAT8mRMlTe=÷{ï•ù­3m[¨¶ †¦¡¢3јF7Ä`X¨¼DŒð³a M ta¢à£1L%˜47ü!’Ô«qÑÐ’ÔÒÆF;´èÌ´óÞû¾ë¢ó’Yp’›ÜÅ=''ç\bføHe²Ï4èÚÞô¤jÕ„˜'¸ãÊ.Ø–éÖÝp‚|t&»EÓÄ@O×*}]g³ÑÖ˜Q(V02v¿|gú¡'ï¶-ólzW6ÃŒïĈ™‘Êd׺ÙÚ׊ǂЉÐ Ð 3ÅEÏW ÅŠ 5ô>.W f43ãÕ=gOõ¬kû40ĭѪ®C×äšÕ±Å¾ôóáÞõ­¤ ‚„_®M¨·^l¾¾ê8®lÑ€™?¼3]®§X1/2ã3Ç•gƧg“÷æ^ïhîÚ·uS( áãw»D- H©ÂUÇó’/<ûƒ”ê€AÛ2ó¶e^ùãÛ^,ìÝ}ìî?,az¦ © ,¯ªé©Hc$ðUgûÊnSuiëº&vn{'év>E¢q4A¾Ökwñ_?ß¼€'ã´'Õk‡'«Wí©%ß¼ãªö[¨0j®›ßìà>AX·-óž/à?ú¾˜íÔ©óå¤T=¶eëY‡³c«J奎ßGÆoˆé@îþW†!'ÿ$_Ô“S™l˜ˆîön\{&?3— ¨ D‰V·„ñåþ·©­%rì•=?ßJe²éšÆö†®çò³ò…âëšF®m™®Xv@x\qqahŠ=Ѿ2ŠÃ;Þ}З|¹µ9r-½kÀ5tñT2>÷hMAÒ„ÿ‘¨ÿÇ¡¥‰ÜÜä¥áÉÎÌ–MáD,ˆîµ z®=*–]ü;[‚ãx 8wy´âIu–I1MäæNß<¹-ù °ðIÿ÷7æÜ, ßÎ#?[FÕ•D(Ì—ä¹Ë£‹R©Œm™cà·ð€í¶er-0À{ †¶W1oRÅ ]›!ÂPÕ‘‡lËüÛ÷.UvjeÌÆIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-refresh_22px.png000066400000000000000000000025241321676412500232250ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆtEXtSoftwarewww.inkscape.org›î<æIDAT8µ•iLgÇÿï;3;»³K9–[äk‘ E¨hš&­1iÚ‚š˜¦ÖO¶M“&ýÒ415iÒZ$5¶€¤4iµ±Gbý¦5ØÖ3LNUÂÐxO&Öç§3Eæ°,ÙžÃkÓÌã]žzC×M/ >€›5Þöúж+5åå†nmüýJ_û‰;‚ñŽÌ$ —nB‘8,!Xd¡1 ¨šCÊÌH®Õì `¼Ï"›wáÄ´ÕUté†yh* K1Cã!v…òˆ)B0ÛcKˆ`¢ËñeŒÃþ³®«)ÂNÅ,MžZ.ªj\¥ÈÒÙê·ŠÔ¤x i‰Nl.H†ªH01›µìHKÏ9‹ËâÌÞ7 rÅ¢ù.ªjHcij,ÒŽ¶´GHˆÂô^²éV@s>⪦1¸ÑÁǸØþÄæîqùFO«… ¶ŸÚ;J’çkød‡l“9Æ€°nâãºÖÈý‘É÷¯ßÝ­‹LÛ×)@¼VZPvÇèñÝÿ>,}\G„Äy­³Ûd\¸5Bi^šÎ߉ Œú޶ßÕ°ÐNÎIÇT‡ï§É°Hšðû«l²lÍœŸ3nÓ–†)‘èÐÝ?Fœ±UÅï4/]ôÜž³,±aÒÜ}ûÞà‡¾@8›qܽñ¬0ˆ1krâ08Ä—ãÈ-ö¦ó=ÛÎ]éï)©núJXÔb\±d"éˆCUâzîm¶)¹c5Ã;ª_ž–f†tä/‰EÄ´ÐyÏ‹W 3¥âüt­ãÎðžÇ¾°gÌÇÆ'‚NÉÆâÖ—“ŒÄ8'kü¥+¬™zã"0gŒÝ4…C5—&8ß±i¹m˺,»7`Â" 0/M.°R]ŒM÷ÏÓ˜ðGÐøë ¿e/žÜž•$"0Ƥõ• F¬ÓèﺸÃÓqæQî–Êî%¹Õ«ŸOËÈÏMQ2Sc™ÓaCÄ0L “]½qõæC=81r¸ûôÁaa"ÒgÀöuû¼~Ïí²ÞsŸýÀ=}íÎ5)+·•+ZüZp¦:UÅFL‰ߟ£}­Ç®6uE$¢à ˜­Þ}ìÍ› û/°PçD‰F’œn%!£ !èöFû¼ôè\G¢P€Ñ¢¥‰1&ÍÍD aú7oEcD£0‰ÈšËù)i\šrÜß`IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-refresh_48px.png000066400000000000000000000137271321676412500232440ustar00rootroot00000000000000‰PNG  IHDR00’%ÄbKGDùC» pHYsHHFÉk> vpAg00ÎîŒWtIDATxÚí\kp”Õù?ïý}÷¾Ùd¯É’+Ù «Å¦:RE‹ S[:Ckm«V[§utªN/Žc©ÓiQ§j •2Hp¬"Þ€Š$@BBB ÙÍ^³÷Ë»ïõÿáüÏl²Éš ~¨Ï—³çÝóÞ~¿ó\Îsž]¾‘oäY°¯û‚¦5“I§³Ùêë—/§i­Öb©ªb½Þbq» ‚¢F£Å|>—K¥EóùL&ŸO§#‘‹y>óùº»y>‘ðûûúTUQdY¿î÷š®\5H’eõúòr»½¹ù;ßùñgÕª-[ŒF³¹¢Â鬬´ÙôzE©¨0™ Š2M&½žã0 Ã0 E‘eU “áù|^–ýþ`0Íf}¾H$•°D"–$†Éçc±K—Nž …úúÞ½;»té‹/Þ~;ŸO&ƒÁÙ~O“iΜÖÖ R©‘‘îîC‡dYy>•ºêÃhµfsmíªUßÿþsϹ\ÏŠ›6­]»xqm-M/XÐØèr1ŒÁ Õ²,ªZ8WUPUEmá`žEQTU†‡ƒÁD€3gúûGFxþÔ©ÞÞ‘EI¥Âááá³g‡‡?ÿ|ÏžgžI$ 1ª uæJßW¯w:çÍ[·®±qýúÇ;xð‹/þñýÈd’eAÈf‰«F€ÁàrÍŸßÖÖÔtÓM?ÿù®]7Ý´rå¼yzýÊ•‹UWÓ4Aà8Ž (XUUU ÜàŽo~Bç5… PKV ¬¿ßëFøàƒŽŽsçR©áa¿?áù¡¡ŽŽÝ»ýëp¸·÷£^y^=ÝÔÂqeeUUÍÍóçß~û“O=ªªFÓZít ¾*à-–ººåË7oni¹å–ܵë'?¹ë®Õ«Æùól6 4%ãGð¡Oc5OÀdc Ê2ü$’¤(ˆ"4]‹ÑÈq,_ÞÜìv3LSS}}e¥V›Ë±luõ 7°lUÕ²e÷Þ›ÉD"CC§O ô1¥Þ—a ›­¾¿aúu­­z}_ßà` ~gg{û³Ïªª,‹b>?k˜Ln÷¢Eë×77¯_ÿ³Ÿ½þúÜsϪUÕj6kµgn1|ãáùÄÑcÏ›œ°‰}8N$IUàyQ”eôzŽ£i®»náÂ9shººÚív¹,–xœa¢ŒÆÊÊææDbx¸³ó¿ÿUUE‘$A I–5**š›7mzê©ãÇÛÚV¯ni±X<žš«Ç;::;eyÖ @6~þüüÃï¿ÿî»×¬1l6üäà•€ñö]UaOQ Î ë%jüõ Dû“bB@!!¹\>/Ë”—›Í «V-ZTSCÓÆqååsç ‚Å²dÉ˜ÉŒŽ >ÝØxã¿øÅž=kÖ¬\ÙÒârÍ›WWg·M“$ŽpôhgçÅ‹Ó'€œ)µµ«Wß{ïŸÿ¼víâÅõõZ­ËUQ¡ÓM¨.š†h4™ÌåàyA¤‚é`’$X–eIƒA£apœ pY–edZ0 ú EkÚ @™‰C-2]@4Êóär¢(I,^ÜÜ\[KÓååååf³ÍÖÞÎqFã»ïΟ_WWQ!Š‹y<••$yîœÏ—JÐÒRSc2]>Ž—MI2ŒNWVf±ÔÖ.]zûímm+VÌKÓ a›Éð¼$ðÙg==>Ÿ,?~æŒ×‹a±X:-†ãÈáb†r|ˆ¨±sV–%Éb1&ŸŸ;×í./'§¶Öá`ÙÊJ»Ý`(hJ>M šá…«Œ¿*2E££Éd>@&59÷ÑÑTJp8ÊÊôz »ÿþ»îºî:pÃpœ¢zz|¾d²àkp|â“Ï «WoÛ¶dIS“Ó‰ã,KQQ˜Á}ôŃƒ²|ðàñッ8.Ið’$Iš&ŽcY† •J$âqžÏfc±‘‘Þ^ŸïóÏ÷ìyòÉdrd¤»ûƒEy>F¤°¬Ñh³54;ærÍŸÿíoÛl+WnÞl4Úí K—.^ÜÔäp¨êŠ--55g4êõ@2™Í ‰D&#Ë$¹œ(&Hq45Ög) ÃÑH6 @Y™^OÓd2¹œ$Aͼ"øUÃpœ ¦2=3&ÀáhjZ³æî»—-[° ¦†ã À¼új{û©S’Ô×7<b˜VËq †1 Ã$I¢ð3ƒÁTÊëýüó½{ŸyÆï?ujß¾ßÿþËªÊó‰D ÐׇÚP¨»ûý÷_|iäùó +WnÝúé§‹oÜøØcUU.—ÕªÕ®Ysíµ:ɤ×k4PS&¼øž…{«*áp"‘Ï%lüø±€ã$ ×ã<ÿ•@’:ÝÞØèpX,:o¾yðàÙ³’tþüðp4 €ÃQQa±A@› ¡ ‘H¥2IŠÅ††ººÞ{o:ÀOG$)ŸO§£Ñ`ðÌ™wß}áDÌÅ‹0,öz}¾-[ž}Ö㩯¯ª2×®]ºÔãá8ú˜`‹¼ÁTÄ” #ff€.ƒ”£Ñh8Çeyppd$WÕÎÎóçC!¯ª²Ù,Q@U!•RA„\.Ÿ—$AÈf#‘P(•Òéüþ®®wÞyþù+¾”Àu­$Žž?øð?ÿ‹ ž8±gO ÐÒrË->:0àõnØðË_¶µ­XÑÔIJuuUU8>44:šÍÍæó’4ðRaïXfÕ °“e)Š$åÀ#Gz{UU£¡(E‰Dx>‘ðù¼^hù²Y5çr¨/Ëa·ß|s6_¸pâÄlP,è9¼ÞÏ>{ë­'žˆDΟ?rd×®\.•zôÑêêêêjjÜîM›ÚÚ.$ÉK—Âál€x<“„‰QS)ÁñYÖ‚ iŽ3âñ\³9•Êç3IÒhx~hè“OÒiQäùlV–Eq,ð’$I‚ в¬Ó±ì‚Óµ³%0)×ß/0²×é4§ª EQ™ Ô€b0³®H$I–aèÈóñøà`*‰\¼xö¬$¡™Ç’$< Èçs9YÎf1ÌåB‹^îjP[{ýõÛ·ïÜÙÜÜÒríµË–µµ­XáñPT NÃðæ¡ÆÃþµk€(f2Ѩχú™L(tîÜ¡Cù|8 €€#D[UeÙTJ’pœ H’a®¶&¸\K–ÜvÛoÛÔtíµmmwÞ¹aúuÍÍ78 e2…°rºN·Xf]!›Å ¤ÓáðÐPOO:í÷_¼ØÓ].¼@4HÙ¬ªªê… ==0§2ÞÍͦX­óæÝpÃŽ+VÜqǯ~õ½ïÝtSk«FãóÁ•/29Å€Oåt‹eÖ5®Gõ#‘‘‘³g“IŸ¯¯ïôé«ètmŒÔׯ^½mÛ³ÏnÛ¶qãòåFÃÏÚZŽ£¨Âx_ñÙÑqµßÉgŸýýï[·NMÉe°dÉöí¯¿~%ÎSUe9Ÿ‡‰´R‹†¢Ã`€a$)ŸÏdb±®®ýë§?­¬„áe6{5A ™A6TQD1—{Z¿žãÐTq´P¾ÏI2LÁ¾Nü^Uèììï‡Uõõ×÷í;|89sæ7yäškfx‡«xE‘eYžþV¥Ñèv·´¬_ßÐpã?¼ÿt5`Æéhoo¯ßŸJ²‚3¹Žª`·›L, @<žNó<»w8püx:ÝÓ³oßÓO¯['I¹\2 Íìašf–å8­V§ÓëãñXlt4¾\B %I´2/5Ÿéƒ¢¤ÖL_V¦ÓÑ4’ÓÇ;w¾ùfGG.××÷Þ{ùËÖ­¹\4:<|õœ<ŽÓ4ÇiµGUUmmCƒÕj³9••,˲§Ñ”:¦9Îh´Z }­Öbq»§¼ßÌœéyx” Óh†$عó?ÿ9z4“¹páÈ‘]»~ó›xüÒ¥“'÷í›]¸' APËj4v»Û][ëñTTØlv»ËU^n³9.—N§×·^ÊÊjjZ[o¾õ)J«5›Î©îwE&h&$0 ܺ³ÛM&ŽàoÛ³çØ1Aèê:|¸½Ýïïê:pà¹ç®âEBQ§×›L&SEEUU}½ª B&“HPM3 ÃÐt¡¥i†I$‰X,Õëa5,<Y„\.™œU`;ýñª ËEÆnàX­eez=ŽëõGSÓõ×ët6[CÃu×¥ÓÁàùóG^mt:³Ù鬭…åbUU$)ЉD @QEÓ4MQðì1ŒÝ¾`Áúõ<@Q ò…R2c1š%.x$hå‰Ò¿7Þ¸bEc#I^sMCƒÃaµ¾õ–Ùl4¾ÿþ… }´{÷ÐБ#¯½öÐC°¾&Ÿm*+,¸þúÍf£Q¯×éXVQœÎÊJ¤~†¡(Îb©¬·{ݺ´ÙœN»e½ÞÁÁK—dY³ÙxÜïŸ5 3M¨¡¤—× ‰0™ €;6o^¹R£Ù¿ßå²X¶l9}º¦féÒ;îðùNžÜ³ç©§B¡îîƒÿú×±[–“?Ùå‰^o·Ï»h‘ÅR]ÝÚºfËeµ ÂÀ@"AÓ²ìr¡™ã £Ó•—ŽJ’dz}»^¯ÓéõA4MÓ°„R’DQ’x>•ŠDfTu†¶è&B0yyHq} ]ýþh4— …yø¦¦†·›aÜn—Ëfc˜“'ív³ù‰'üþÅ‹o¿ýñÇC¡îî>xùåpøÜ¹C‡^}•çãñ‘‘ÞÞ/'bbí„Ng·{<­­ nÙòüóíí6¬\év“¤V @2™Ï3ÿ/Ï ½½Ñ¨ª.\¨Õjµ £(‹ÍfµRT:Í htx¸«kº8^‘L&Z-Ã4MQ8« àÆÆx0Pé!ú>N&y¾PÝ&“‚€NÇq$ Àòå­­M&7Õûû««Î;.]jnnkÛ¾=ŸO¥¢Q¿tôÂ…cÇÚÛ‰áá®®C‡òùt:¾xÃpœ$1L£)/¯©™;×í^ºtÓ¦üÀhœ3§µuÕª­[¿õ­êj†±ÙÊÊXÃ>ý´³3“aÙ£GÏœÉç««óyAPŠª¨°ZËÊÐh´ZŽ Ð{$¡P(”NG"½½üÚk³N@ñÜb¸Õj00L¡Áá0›Y€@ Ïça¼¯(øý±ÏHÀq“\©*¼Ž(ZŽ£i‚ ¡¡¶Öå¢(§¡Á墨H$ËfkkƒÁÆÆ¦¦;‚Á`0Ú¶MT•¢ôúBR e `iŒ ¤R££ªúÒK{÷†Ãð9dYUY–¦) “©¼Üh¤(­V§s80L–Q-+ "$I’džÏå  =º{÷WLZR’gÈÄ$Ì¢•ì›oßÙyþ|$Â0ßýîÚµ¢,\X_o³áx__ JM~bAÕx¢Ñ¸t:ñT f‰Pv’a `sæÌ™c·“dmmMá×KÔ©\ŽçEXÜ ¼ ù CÑ\¿ Iªª(…ˆ(j[Æ‘ˆÏ72’͆Ã==~øÊ+0U‚V¾8^Ð÷€G-IŽ'¤0Ãîì’¤cÇNœèì¼t©¿ÿàÁ_|ðÁ|>™¼ÿþ^èéijòxœÎ¥K-ª¯gY‡Ãlæ8‚Áxœç E´Å€å‡@ й2c‰,”‹ÀÃH’$džÃpJ¤( ¬Œ<ÙÄÈfÓél€T*M&½Þ'þýï§Ÿ†ß¢B5D"dbJ¢D:¸x”9'I§³µõ¶Ûy䆖.­¯'ÉþþááXLQÞxãw::¢Ñ3göìyüñM›òùT*ôûaÔòÖ[É$Ïc˜Étñb<Î0ƒNDz8îv;&Ú¢„;Sc,hAé2ÝÉû…2vØÂO² 5b¬)OðÄ뎽Ïg2<@08<<4”Íöõ8ðÇ?nÙ«©½^0-)hDŦÍøBßélmݸñᇪ«m6’|ùå½{;:r¹³g÷îýÝïî¹GR©p8(œ¯ªªŠã‰„×ÛÕuüx4:8xâÄ'ŸÄã²l6Ï;<‰ð¼ÑX^^Vf0P”Ói±hµ… ®Bý˜L#ŠgêLWq—N'“™Œª†B^¯×Ëó}}ï¼ó§?Ýw_: öõÍ´ÊCU‹@*SŠ‚p:—,¹ãŽÇëêêíõù$éìÙýûÿð‡ûîËdB¡”4+eºÆÇét8ÜÛûá‡ï¾›Hýý.Äb’ S)šæ8†¡i’´ZËÊt: cYš&ɱE¾Èd~I3ù:&^<«áÔŸVEhŠ‚A¯×ëÍåFG½ÞÁÁ@ ··½ý™gî½7“ ‡Nµ‰¥¿S}_”¯F ÀŠ[Š‚2‘ˆ×{üø®]O=tv¶·ïÜYjü—_ob«ÕVTÔÕ]sÓÙÚzë­›7›Ln÷‚K–:È¢Ãáp8Ñh2iµPE‘dAS$©`j` u§`ÖqQ„¥•™ 4-±X(d³™L*•N‹"|¿W_…9ª—^‚5Ÿh?¢Ø¶£:”¶Fýâq…¶Ä†Ai ívø˜@àÔ©·ß~ñÅËxr͘¨iè8ü¥ÁúÔÚj±Ô×/_¾f ì/\³—H?eY–a0 Ã`|†ãFQpƒE’d™çs9ž‡µJ‚ ª°ÜdzÙHdp°»;>wîãÛÛGGûûÝ¿är“;} 'o'hä ¾j`§ê›Àâã…òWô¤ ŽãÌf—kΚÖéÊË­V‚ (Žã8¸1BŠà*Š™L, A§éóårñøÈÈ… ÐH‰.Õ/n§ú¾xÜ”{Â¥œòå[Ê'^Ü/¼P»0¾ERÊÂ#[\ªE€÷‹Ûb/—‰ëËÜ”ŸÚIO¯-|©v*à‹¥”Ó+vŽS2ÓvâL/%WX–R¬!S>]à§šùÓ•éF'WªÅã.Á™B?Åe‹¼RÀKPÊËt5¡øx)¾ºšÖ¯ù¿"JNÃrÀ¥°“$Ò–rºþÌV~GZ—­·¿uÑ?Ïk44W±¯œßOƒkv¾‡£2—ÆK‚±0œ¡ËxìóùlšS\\2`Ú]dǃÊ÷z=§‚ÁàQ1ºÂ…åsºÌ×z}¶¦i?ÞŽ77'w ƒ_ î•*ñ¢2x/IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/view-split_22px.png000066400000000000000000000023051321676412500227170ustar00rootroot00000000000000‰PNG  IHDRÄ´l;tEXtSoftwareAdobe ImageReadyqÉe<gIDATxÚ´T{lSUÿ½mo{ÛnÝX cC‰f‚Ï€sÆ‘‘M‰ÉFâb¢L³ˆLÓlÁÃ4þQÿ “md.Yd›dŠØË¥•­+ëÚÞ§çÞu˪üÃiN{zÎw~ßïû¾ßw0EQàA ÔPÿ{.5v7¶¸÷hÛºxÿ¡Ï÷¤ÃŃa¶àcsk±%+¿#F“kÛY÷Ú6u¿íø7?Í*öb363äû½¬¥i÷Ä}§¢yßá­—×Žá‚ŸÝ OÞ; þÜ'&æ„©yºÀ’•w­iïÁM÷ÅøÐѧÇ#ÆWÕuŽ9ÞûNÝ–’ÅŽë>rsΕݡå¥E`•`KCýv-=XOÏÕÆßž¹à¶:=?Œ…”šÁÅòÇ6o*õ¦ÇœÎ,ÏR‘í?òŹ>¥T]¯ÎÆÎ×oýl×®wŸ§(ê©—«*Ö°ÛÊïÏwÅ®ü*Rñ2½5•ëg쎌gXÖj˜˜í¸ñÛ¯;/]îôK’Ͷðÿ;é³Ñ‘`Ü«®ó3Ä:2 ¾U[[»‘³Àj·Aeùs`1_å¿»<Œw†‹CTW•Ë$b‘ò5?T~áâÉçƲõ Ås’©£Øï0Ò¤ŸMìhÞóÁQ¢°°ð¥’’âG zŒ&x>ŒN$#ýøÝ =ƒ£Ðûóä¯p¢J àr¹`br ‹Ì†#Oo(gûoß=>î ›]:ä £‡[›/©¬ITÏï} ‚ÿkÍ“&¿¬I7ø+Sƒ¸[ÊUmä'ÕG,MSÅ«Mânÿ~¤f¢=eÆîPýVðŒH­án+"Åø¬›„qÜð–™«BTŒkúm5_£ÛGj<æ¯Ë_møÊ؃!Ф7¹æa¯fE¤,ð’™.ˆcׂ—bˆ¦âÅ:ãó\—_Wêè„©~JSŽ—ÌLv•$c;‚Œ‚kU*2Î_a.ð’ÚÆyÊXkÂ0î¸*±’ ÷”éNzËWYªZþ×êÕà•Gve̖닸¦q%‹=qâÄ3Î.ž•ø”Hn¨õP¬„ øõ0s^¼%T7…kvN1Ê%ù*Ms¼•æz_Rhî2óM9SºDÍLçºØë¡îînŸk×®e÷÷÷I·Ü½{·’k›|oEÚW ²ûªUädcöH ÷Éê¬,{Ä`È›Ì] ÊÊʦ_¼xqFbbâãÜ-ªwÿéû„Ÿ’Yáa¼¿ŽÔÛã¶8)†ßÝ[CWÞ"ß“ÏÏtóæÍó¥¥¥SÉœoЉ8mÜ”:¼&*L›ü¢Ÿœ)©VÒ£U$15+Ù…\óÈŠ‰1½¬­1÷sî\åÖöö¶ÒÆÆÆ>Ûº7ÛþÓÛÓ­½Ðj™Á ü+Pýº—ÄpÐ'ò}pWeÃôwÃ+ÖmÙ¥%cnЈ‰È®Ã?þH¿ß¾}{èÎ;Ý}}}·-–†ã6|TôòËÕï¼#éŒ^ª_nݶá1a˜AAž—cדSˆÔ˜ŒÉ‰MfŸæ–YƇCB–•'%å€ÅÒJCµµµqß~I‰¡ÞÞž}ÖöVn¸@8/!B¸p¹u†ü=0¶í9Ìõ¶ x€žžî  l_9Ì Ž¡ÄPëFj Ÿ>2¶<4Ò8“[bl­]›÷„››´}óætBÜ5b3Ô××Ók\ï ÂÐн‡AX­—vo_Wò*ΡèždX]rl†—O΄Ys–A}ƒ…öå…s ºººàܹsô;ê@ÅIxE¤wmxÈLAr£†6QçIKvö&:!iµZ¡¡¡^£~øázÿî»ï ³³îܽƒÜší/=5ù‘× H·ì›‚ç„ ˜.‚¸´"²¶ÀyRÜp¥§ ¾mháü¼o…§Ál¥±bQTÊ‹\X:àé)kÉÉÙLp@x’BÔ~lojj‚þþëâ,,\„5ü“*O~¯‹” L…9²z¸Þwšš›@0m¦Ìyr.h4iǤr!9§Œ v²‡‡¤5'§„.0¦ÐÑÑ­­­ÐÒÒÇWBYÙÚûØ«t×gPßh«+ ··ÚÛ/ÂŽ½GàôÙ&zov@$è¢Ø4.$çTZº‘H[ssÇpt‹!> Û·o§}‡€œ4tŒ£pTI!KS#ýŽB…B hµ×>üpýd¡0¼m<{ìÊËËaÇŽ´/9ri_þƒ»Žãù9PXXÄW®^¥×ßÿ=¸»K ::ÕÌ…äœ ·=éæ6>ï0öAì!ð¹q.” @ê:@IÉÚ)nnrs·Ð ǰ¯àã?¦}]¸rÅæ€V˸ ÀN À9x¬gÀñö½½6€ÈH½‰ É9}ðÁzâ€ôb~þtÂñƪ‰8:`RY.$çTX˜ý9…î8þ<½æw…‹?ãØRè>Ö¬yŸÈÀ‡tB< ;:¬Ã{G>…ðààºX.dfšžöôDx€AºÃ£¥ã)täÈ‘ Ó\HÎ)+«øiò$nÿ¹÷8:€Áã‡üÝpŸ= :ša¸œq`¸äè€} aP¼|€5àjëtz× E<•ñ¥‚‚Ñpq¼o£c¥àÓ×ÜîAæš«V™¦ Çu€àO¡‘Šx,þeî^€^@oàBrN7‘аÚ;péÒ¥QQtF:FǪÿžøy Ý'@~~Ö3îîŽ)4€ý1:ÑSh4ÞŽÑs!9§ÌÌ‚gÉ»(¥ò£=ŸÄ=…Æ oäU"Õ5€¬¬‚gmü0R ñ§c;ÖÀ¯À²YÏ‘c´cÍš‰Œô*±k×.Úw"E<@T”Þµ?) Þ{ޤP§=ÀH)4–;wÚ~ѸÆE€ü|¿`¬—¹ÑRûا½ppýúuzÍÄÄ蓹œSffþóä9py¬ÀÝãO!,b>…°}à8]¹uëC!º‹Ï”] ¤p!9§¼¼Ì._¾ .\ ×¼0À‘} Øði‚ô§Ü >]P7nÜ‹Åbç@` ¸æø“PÖU\¼Nˆ²Z;àĉpæÌÀÀÀ½nàÂèÏð5€ª©©ŠŠ ºËŽíïï§àTUUõõçhM¡úú®QŽu­ WO%¯Ó]%%ŸÐ ;:Ú ºú+8zô Ø·o?ÙÝO`÷îÝpèÐ!¨­­¥îØ~Z´Aà}¾ª««áàÁƒÐÜÜ<üóä±cÇÈ<ûè{÷î%À‡áøñc¤ê蘫W{!0PG`⹜WDDòFµ:äòåžž{öüNª"iÔDm&–Ÿ‡¯¿®¡ÁbG~Ij •þĈE¼ÿ~šbèÄéÓ§‰ _Ã矂>‡ÊÊJâÆ·ÐÞÞLÜl³gká‹/ŽÀÚµ›!6Ö R©–,Iº’˜˜þŽóJO×?®R“,H(÷ñYÚáç§…ÐÐxXºÔ,›[¶l%;y”v ÂBw¯¦¦Šìt#y•(‡Ï>;'OVQÀººÓdçOšˆCçà›oªéîçæn$¯$Á¦€X "‘j0 @[§T²›”Êä·l‘<­~*!Á8K­6¥ÌŸŸ¸;00ºÝÛ[!!ñtñ¤¤L(.ÞBw½¶¶šk:Cv¸‘ž!î­[wÙœd˜3'ž¬ooõµyó–}%•./ŒŽ^9755ýoÜ’¿¬Þ{ÏôG½~Õ¿U*Fž¼=88öŒH¤¾ë﯃ŋSHñ¥C^Þ&`˜÷!,,™ìë»óúò‚ñ‡"#iË–™³²r›ÿÂ;jÏží“ ã_ãâL¥’)$©v* úzppt»D¢ÿD£a’RR2ß6›³žá†üþe6¯ü3þŸ»ü$üt#™›g ¹IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/widget-close-16.png000066400000000000000000000012401321676412500225500ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆtEXtSoftwarewww.inkscape.org›î<2IDAT8“½J\Q…¿}ïq†‚?Äf ÁDò¶Aí}›Â4b£•…•>€]ê€ØØú¢E` ãA±ñwŠ™8÷Üsï9;ÅÜXdÃboεÖ>‹#_A@˜#ÊñrŽ^Ýç=ŒÜ÷Ýݰ08ˆˆ€sh–¡Y†ï!MqiŠOS’V‹øáï?¶¶\P">îìðåà€@ä}çºêÆ …ã㌭¬•J„å267y75" 9AD! YÖU³–æö6#««*Æ66Pç¨VéÔëœ-.ˆàU饄€¦)š¯ <®­a¯¯)V* T«˜Fƒ³ùy²ÇG@zQ†ÐÌÄZ°¶ç‹Ò Èýç¼ïÀ[‹ïtº(•ÞܤX©`NO1çç”'&ø´¿O42‚æ$š§×%HS²§'²N‡ÑõuŠÕ*æä„ßss\ÌÎ7”''ù¼·‡ªv‘»BÀYKÇØv×nÓ9:âbaäþžäîŽÆÜŽQçðªxè;‰B m·é\^¢­§33Ï»«âUIonø9=ËÕ}Ž>AÒlb›Í~Æ/ ðª8ï»ý-/Âp­†/ß__)öœ*’'#ß@ àþç+¿Qá_+/]D ›ZYIEND®B`‚Sigil-0.9.9/src/Resource_Files/main/widget-close-22.png000066400000000000000000000016461321676412500225570ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆtEXtSoftwarewww.inkscape.org›î<8IDAT8µ•=oTG†ŸÙ]ÖëÄi ËÒ¢F¦AX š¤1^Z:ÊH©øÐÑ!„EEa$ºDHTttˆ–#!E^#cï®ÀËF‰Éz;3;礸{×6¤b¤£;ÅÜç¼ç33FUù£ð»1? ܨšÏ,þœªÐ,Â/—TŸ”¤P¸îîÝï¿=}c´*"H"‚†€&ßÁZÜÇô£ˆ¿Ÿ=;\_ZºüP0årõ»ÙYþyüTQçPïQçÜcX>s#ƒÍ]Èf!€µY˜R‰‘£G¿z•âÈHfAØÚâØƒŒ:!ìQ= Výµ6üyû6®Õ¢\­2qíÅÑQ´ßgri‰¯ffø·^gåâEŒ1qìj¿!+Ò Â{B¯Ç‡…^¿Nyr’‰7ÀZ*ÓÓD««¬ÌÏÓo·slâØ£8„XqÒbX‹t:´¯\ÁµZTŽ¡2=][£^«á77Óƒ1`ï§XC@¬Å¤íæ}¼‘ªÈÎΠ°^éõØoäOf!¬X¬E¢(> å2ã7oR™šÂ5ØFƒÑ“'9öè…±1”Oó¬+4$ŠÐ˜¸u‹Ñ'poßòfnŽÕ¹9ìÆ_ÏÎ2µ ®ª±¥»=–~ŸEYŒ/,Äž®¯óæÂl«…k6Y9ÛhðÍÙ³üøða K€{¬È+Öâ;Ô{¢zÕZ¨ÙDTUl£ÁóóØ FÊÔfª‡6O•~aß½Cº]tg‡z­·OúS P%Z[ãùñã˜Je_hÖð[[Ø÷ï³f7I´DM-Kôû„n7«$M0¬TTÑä–Úï²ÏÀ9…ù¹ ˜B“,MÁÍ¿–—WïÜ—‰ÉmˆæÕç "’U´õê ëFUù͘ŸîIrI§Ð!µÿ3’§i½¿^R}b¾Ôcú8+hÒEZ[IEND®B`‚Sigil-0.9.9/src/Resource_Files/main/widget-close-48.png000066400000000000000000000067621321676412500225730ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDùC» pHYs¯¯^‘ vpAg00ÎîŒW ôIDAThÞÕšyŒU×}Ç?g¹o™å½y3À€ÙÌ>0Œ ãÔ1K ‰%µ’b¥u’¦V.(nKÕ*Vš]ÊU›Ô$®ˆIýGTá"ÇÂ1`36T‘j &e³²Ì¼7ïÝåô»¼{ß{#%-í‘~ºïnç|¿¿ýÜø>DíŒ ž[ ð `!°Ìœ€ç€«µn²¬ŒijJ‹TJ«[LÀD>¡RqrrZ9޳¨ÀI§3òSŸºÏ´´(?ßSÐ7šÜÜà|6÷f{­µ»ÛmYµê,ããß4?ùÉ¿éryznpO‡^B»ŸøÄ}­÷Þû´í8–Y´59 ¢ÎËf z¶Ï܈,ÆÐ|ûí*[(Üa®^}j´¿ßœãÇfŒqDH`*nRùüéÖVˬ^Íä;ïà”Ëü_×´Æêê¢Ô×—rs¹SéôÏóÓÓ×" \¡„ÈŽ¿ùFOvÁÊÅ"Æuo5îh¸ÀèÙ³Ø##Œö÷ß±Bˆì¸ 0¸ zôõ_ê–¹óH/Zô›¬÷?2*““TŠEFÎÓË,KÏ®kð©¸Æ(Ûqð·R¹Õxë†!%¶ãàj­®Ç \ÚAÀs]<Ûn8IÉq8rñ"SžÇ¬jkû­€ëŸ˜àµñqZ¤d÷’%dT}òRb0 .Ä Â3FÀó¼†({§‡Ï?òù|žå|?K³Ùßü…b±v-vìàÊ•+ùéOÙ¤5i)ë-àƒÇ3Fâ—?2>3éÍ`Š1¼™Jññ}ûhooà#»vñ’eqñìYj}S Æ€m£{z¸gûv”RtvvrßÞ½<ÿ쳬·mR5d`d&¸.n XÅ Äåb¡ÀžÏ|& ”bÛŽX7òžãÔ½s3¹dÛ¤Þÿþ|8:::ØýéO3P(Ô½ºgŒ¼-NÀõ<Ÿ€çáÚvB¶ìc´Õø»1![ﺋô–- CÝ{3ÉecÈlÙÂ[·FsÅG¡P`ÛG?Z÷×ó"Ü èO"" T* ?vŒ”e%À‡"„`ÓæÍ4mÝÊ„eÕ½[7—Ö4mÝÊÆM›|@ž‡çy )Ëbâøñä»L€µ<«Áï>È™²ÐÈ™3` Ë￟Šã$„$z6là?µæú‰4_¹ÒÐç'óyZî¾›®uë"ðRJ<Ïóµ)%iËâÝgŸeøÌ™d».¤R¾@ŽÆ d€é@àBµcèÔ)<ÇaÅg?Ët¹koÍÚµ¼£S/½Hvl,ñ~©½ƒÖmÛX¾rexô[éTŠs½½\>}ºnýš4±Æ b1C!zõUŒë²â(ÅH„°|åJþKk¦ŽþœÔå÷¨Ì›Onç‡Y´di^¥”¤S)Î<ÈЩS ×J”¾Œ‘ÓqvàB»†Ç¥“'}KìÛ7#‰…‹sy׊/<‡1»w $À‡"¥$“Jqþé§yïµ×f\WzBŠÈvœTë€sê{i\nÿ܃LK W IÌíìdb÷Ç1 ‰{q-MMüúàÓ õõa¼™[r<„Œê@Øäk€2 Œ0rfBb`¸ï—Å{?Ïd±ØÐmíu×âò­­ zŠá“¯} >‰BJ ëÖáVʾ‡#ÜZ™ Œ3öBJ‚¾0ròÒ8ܶ÷¹>UO¢ø@[.ÇPö½Œðˆ$$!SiòË–‘3‡éñqÎ>̵wÏE…¬'P‘\L] @J_ó¿xã_ë{ ‰Kç_àêõÉ:w ÁÇݧ-—cì_ÿ…ñ“'žŸþt¶…Ìü…è\ÊÔ×.qþðaÆßz Ïqh^0/Šb°ÖÍ_`rpñ·Ï‘.Hçrèæf¬´…J[ 훀D@f¢ï( ‡Üï?ÄT©4£Œ1äZ[)?‚}yÖ%‹±KÓØS%Šãã œ>ÅÕ‹ƒ”K7Rë(šãpð±yA LOL0=1á?`)ÒMi2M)2­M¤›Ò¤²i¬Œ…•²)HiÎüòuæwßÅ¢%KnèF—9ßû$m¿z§âà¸Db;¾håÇgÀõbž UÔN;µY(,"ö!Å×¶‹)qÜ"åÒ< Ž­ÁRþb—,§¼÷6.\˜Ðv£ì”ij‚O~‘ËÃt¾ø°cLØ.'% !¡eH j•¸¯ð…7¥¸J‚Ž‹ªÊЕ¸~•ïú=tÐV×’¨%³¶§‡ÌÃ1ºx¯›3XCŤêBª.Í&xËxà* JTþ1­`xñøƒ¿fÇGvEà«Ú4‰ßu$Ö÷ý“¯3¶t­86w\qRV¿ì„.tc– ²…ÿ²” DR#JÂØÒ.äþ†{vî¬f›ö|Žö¶|D¢Öºº×Óü•o0±¬;9¿ª‚—¢Zµ„%oLÀÄ,½,“¢$\YÖõGLJ¶oDz¬De ¥Ï!ŸxõÄW™Sh«³LøÜÚõ=ö‡k+{’ kÖ¤–³°€–QÅ• äÚª;hzä1îÞvð¹ôûqŽÄ}¹—Ô“2¯½€”2!J)¤”t­ïaÞ_}Ÿ©®õàEÕ…nJÀ"ˆš¨m~õ•Šk6ÐöçÏÖß½­uCðm­-¨'öãž8DÊ‚”ï•^2Oý%s:°, ­u^)…RŠ®îõ,þ۠ܽ)]'JÎ"ˆ­Àq@yÝFæ<ú->p×j^JI¾¥ñ£¿À=qK㈑H?ù(sÛ ‰Z"«×­cÅ×ÿ §gKxW³r!%ª²‘wÇfø›?pg¤ùZwhÍfpÿS*ÇžñÓ®Æ'¤H%Á>qõãý´çsx¥Tâ÷Š5]¬þÖà}¿­b‘ZÌ.ª©Ä?løö?ò¾M›£¯Rʄ曳J?ø ¥_LÄO˜à ¦õâ>þg´µ¶$¬ ”Šæ\¶r¿ûÃ-ê\H׈—FÿÐáV°,+Ú»ÆIXJråû3ý‹ƒ¤tPMƒ êx½êuc`êÅ^W’ÛÿC*®ÍŸ;_.&0X v4H£þCaY7@ßC÷S9߬ùZ–ÖŠÑïþ1WŸ¦ ÜóûÇñ{›JД¹^•ˆçÁÕ2ö½‡ÉZº¼}áúº?öÂÿ1+R‹*øÔôè'÷íÁ~·J"¥ƒßø2cGF ]Ï׺ã‚íBÅöÅvüsÇ×7 1þü!¿ùeR1×´/¼Mß¾=LW­`Sê&âA7¹1PæÕwS郬0¼ûµ/1ò\ |ØUš·m_û¡Ø%œàÙÐ"£ÿ~ˆ _û"Ya°ûßäÔçvS¹íÌâÒÈ b ªý¨#ôüãôÈ}Ÿü V-í·¿ÒáV Ž1àÊä¹gb$Ý* ׃¡çz¹ø³ÞÈ北\7j«$ éʘ ô žg"& ”.¸‚DÁ‰Ü0/k®'ÜÌMŠ#ãyUóbq¥#!ÆQCÀ „[~»kæ©ìÜJÃ×q=PÁÄá1Ô¸îaÝj¦ 5­d ±˜%CnÌNŒœSTt4Ð_;Ä>%tEXtcreate-date2009-11-15T17:02:35-07:00…¦%tEXtdate:create2010-02-20T23:26:15-07:00;\%tEXtdate:modify2010-01-11T09:31:25-07:00_.ÉPgtEXtLicensehttp://creativecommons.org/licenses/by-sa/3.0/ or http://creativecommons.org/licenses/LGPL/2.1/[÷ª[-ˆ(=ŒäXV9%…3 ù ³À&••·³Me›­WùS–ÃzÊUÙÄUƒ“ ,U\3RÁ@X­n¤î–úqga+aH?nK@2ßNêsîù¾¾¯sÏmD3xð bfŠ. Y__êjÚC„Ð* „®.ó·y„BȺ—a­®®Êçáó? …œªëÆ÷¯CË0žOWVRÔ¡Bãûª®?. sçý*¤P(Ì}Å.—®5R33£SÑèèüìì´+G„bBßœƒÞ'àK¸ÐCWd29¹uk*™H„\ºcàËõõõ! «iÆ÷ÄX8ìO&£¡Pˆóûý¬ßçcý~? ÐétTEQTYQÔÏK§''­ñ±±`Ï÷Ã……žçËâÙY‡: B±®¦=€¯Q¡PHë„úÃÇÞÎfß‹MOrçï§DQ”ž~÷ÝŽ®ëµ!ăУäûÁ2Œ'ŸËEÓ©TÔãñ\Ê ƒÜâG%þùüù¿©B:@žAYºµï7¤S©ð\>Ÿðz½ŒKWGÄc±ñl&Ó.ïìœÐú €,C # ˜þ….ÌÏOßzÿý©¾XR"ŸËÅß4ÒñÉI›ÆžFBic–að§++é«€1FË‹‹)¿ÏG×ã¥1mÚ±¼¼<3ŽÄÐü~¿÷“ååªé‹K5¦æç§¯SD‘Hp.Ÿ§Ú,».J…Ý'UUõ“ÓS±Õj)ív» ¼###þ©Éɰ›¶ng2SoÞ¼iïíï vv¶BX†ñÌåó Ú ‚(J?½zu¸¿¿/&iõL29êVÀ‡wïÞà›Í²xvÖµ²±Zù\.J³Ä†A¶^¾ÜûÇÓ§å½ZM0ð[Jâ,Ë2Ÿ,-¥=[NK’ÃǦS©¨SN·«=ÿá‡ýR¯Û.•^¯×3ºÊ§ Ã0ij3åLå¦ ÈCCCL«ÝVÍl-…ÜÎfßsÚ± à 4"fnÜcl¹aI’:‚(Ê‚ ÈMA¯—Y¹w/ÓÏ0Ëf2‘•{÷2>Šãt¥Z­·$Ér5µm X*Õo$“NçvŒ1š›M¦R© »âÀÛ%6?¸sgÚiNôÐívµb©dûRm ªš¦o‹µ¿Ü½›¢  ¹¥?¾©.,˜–ƒ†‡‡ý‘ˆã{[ÅbÍé@FÓ¥|xtôÈMm‹eYÏôÔ”ë²^ïîUªUÞÉŽªÒøbsóð¨^w\Å.GõzóÅæ&ÕI!¶éH?_§˜£z½¹±±ñ3•1!*BLï­/BÕ4ãûgÏ*¯wwbH×»»Gß?{VQ5®²BH…yw›6È‹ÍÍC¾Ù”¯â¢§Ûíj[ÅbfNœ¸Ì€2üÕc¥ZåkµšxYWoº®•jµ^,•êý”‹@™ñuBˆÛ{DUÓô››‡ÛÛÛ'ý^†J’¤6·Ëåc»ÍÎo/C‹ˆüøoãû}5tv×ÓŠ¢¨Ê»+jA¤½Z­i•ºÒaß~þÙg_3^†y¤êúâ _=4x^iðü/ƒ’£!^†yðnY]]•1ÀW0Pýõša`€¯z×ü:I×ÖÖ¶0!_!7Jr€ ùbmmm«÷ןá3'zØ|æô;!=ü¿}xö_êQ5íwöIEND®B`‚Sigil-0.9.9/src/Resource_Files/plugin_launchers/000077500000000000000000000000001321676412500216515ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/000077500000000000000000000000001321676412500231725ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/bookcontainer.py000066400000000000000000000310071321676412500264020ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab # Copyright (c) 2014 Kevin B. Hendricks, John Schember, and Doug Massay # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this list of # conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, this list # of conditions and the following disclaimer in the documentation and/or other materials # provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import unicode_literals, division, absolute_import, print_function import sys import os from quickparser import QuickXHTMLParser from preferences import JSONPrefs from pluginhunspell import HunspellChecker class ContainerException(Exception): pass class BookContainer(object): def __init__(self, wrapper, debug = False): self._debug = debug self._w = wrapper self.qp=QuickXHTMLParser() self.hspell=HunspellChecker(wrapper.get_hunspell_path()) self.dictionary_dirs=wrapper.get_dictionary_dirs() self._prefs_store = JSONPrefs(wrapper.plugin_dir, wrapper.plugin_name) def getPrefs(self): return self._prefs_store def savePrefs(self, user_copy): self._prefs_store = user_copy self._prefs_store._commit() def launcher_version(self): return self._w.getversion() def epub_version(self): return self._w.getepubversion() @property def sigil_ui_lang(self): if self._w.sigil_ui_lang is None: return 'en' return self._w.sigil_ui_lang @property def sigil_spellcheck_lang(self): if self._w.sigil_spellcheck_lang is None: return 'en_US' return self._w.sigil_spellcheck_lang # OPF Acess and Manipulation Routines # toc and pagemap access routines def gettocid(self): return self._w.gettocid() def getpagemapid(self): return self._w.getpagemapid() # spine get/set and access routines def getspine(self): # spine is an ordered list of tuples (id, linear) return self._w.getspine() def setspine(self, new_spine): # new_spine must be an ordered list of tuples (id, linear) self._w.setspine(new_spine) # New for epub3 def getspine_epub3(self): # spine is an ordered list of tuples (id, linear, properties) return self._w.getspine_epub3() # New for epub3 def setspine_epub3(self, new_spine): # new_spine must be an ordered list of tuples (id, linear, properties (or None)) self._w.setspine_epub3(new_spine) # Modified for epub3 def spine_insert_before(self, pos, spid, linear, properties=None): self._w.spine_insert_before(pos, spid, linear, properties) def getspine_ppd(self): # spine_ppd is utf-8 string of page direction (rtl, ltr, None) return self._w.getspine_ppd() def setspine_ppd(self, ppd): # new pagedirection string self._w.setspine_ppd(ppd) # New for epub3 def setspine_idref_epub3_attributes(idref, linear, properties): self._w.setspine_idref_attributes(idref, linear, properties) # guide get/set def getguide(self): # guide is an ordered list of tuples (type, title, href) return self._w.guide def setguide(self, new_guide): # new_guide must be an ordered list of tupes (type, title, href) self._w.setguide(new_guide) # bindings get/set access routines # New for epub3 def getbindings_epub3(self): # bindings is an ordered list of tuples (media-type, handler) return self._w.getbindings_epub3() # New for epub3 def setbindings_epub3(self, new_bindings): # new_bindings is an ordered list of tuples (media-type, handler) self._w.setbindings_epub3(new_bindings) # metadata get/set def getmetadataxml(self): # returns a utf-8 encoded metadata xml fragement return self._w.getmetadataxml() def setmetadataxml(self, new_metadata): # new_metadata must be a metadata xml fragmment self._w.setmetadataxml(new_metadata) # package tag get/set def getpackagetag(self): # returns a utf-8 encoded metadata xml fragement return self._w.getpackagetag() def setpackagetag(self, new_tag): # new_tag must be a xml package tag self._w.setpackagetag(new_tag) # reading / writing / adding / deleting files in the opf manifest def readfile(self, id): # returns the contents of the file with manifest id (text files are utf-8 encoded) return self._w.readfile(id) def writefile(self, id, data): # writes data to a currently existing file pointed to by the manifest id self._w.writefile(id, data) # Modified for epub3 def addfile(self, uniqueid, basename, data, mime=None, properties=None, fallback=None, overlay=None): # creates a new file in the manifest with unique manifest id, basename, data, and mimetype self._w.addfile(uniqueid, basename, data, mime, properties, fallback, overlay) def deletefile(self, id): # removes the file associated with that manifest id, removes any existing spine entries as well self._w.deletefile(id) # New for epub3 def set_manifest_epub3_attributes(self, id, properties=None, fallback=None, overlay=None): # sets the epub3 manifest attrobutes for this manifest id self._w.set_manifest_epub3_attributes(id, properties, fallback, overlay) # reading / writing / adding / deleting other ebook files that DO NOT exist in the opf manifest def readotherfile(self, book_href): # returns the contents of the file pointed to by the ebook href return self._w.readotherfile(book_href) def writeotherfile(self, book_href, data): # writes data to a currently existing file pointed to by the ebook href self._w.writeotherfile(book_href, data) def addotherfile(self, book_href, data): # creates a new file with desired ebook href self._w.addotherfile(book_href, data) def deleteotherfile(self, book_href): # removes file pointed to by the ebook href self._w.deleteotherfile(book_href) # iterators def text_iter(self): # yields manifest id, href in spine order plus any non-spine items text_set = set([k for k,v in self._w.id_to_mime.items() if v == 'application/xhtml+xml']) for (id, linear, properties) in self._w.spine: if id in text_set: text_set -= set([id]) href = self._w.id_to_href[id] yield id, href for id in text_set: href = self._w.id_to_href[id] yield id, href def css_iter(self): # yields manifest id, href for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] if mime == 'text/css': href = self._w.id_to_href[id] yield id, href def image_iter(self): # yields manifest id, href, and mimetype for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] if mime.startswith('image'): href = self._w.id_to_href[id] yield id, href, mime def font_iter(self): # yields manifest id, href, and mimetype for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] if mime.find('font-') > -1 or mime.endswith('-ttf') or mime.endswith('truetype') or mime.endswith('opentype'): href = self._w.id_to_href[id] yield id, href, mime def manifest_iter(self): # yields manifest id, href, and mimetype for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] href = self._w.id_to_href[id] yield id, href, mime # New for epub3 def manifest_epub3_iter(self): # yields manifest id, href, mimetype, properties, fallback, media-overlay for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] href = self._w.id_to_href[id] properties = self._w.id_to_props[id] fallback = self._w.id_to_fall[id] overlay = self._w.id_to_over[id] yield id, href, mime, properties, fallback, overlay def spine_iter(self): # yields spine idref, linear(yes,no,None), href in spine order for (id , linear, properties) in self._w.spine: href = self._w.id_to_href[id] yield id, linear, href # New for epub3 def spine_epub3_iter(self): # yields spine idref, linear(yes,no,None), properties, href in spine order for (id , linear, properties) in self._w.spine: href = self._w.id_to_href[id] yield id, linear, properties, href def guide_iter(self): # yields guide reference type, title, href, and manifest id of href for (type, title, href) in self._w.guide: thref = href.split('#')[0] id = self._w.href_to_id.get(thref, None) yield type, title, href, id # New for epub3 def bindings_epub3_iter(self): # yields media-type handler in bindings order for (mtype, handler) in self._w.bindings: handler_href = self._w.id_to_href[handler] yield mtype, handler, handler_href def media_iter(self): # yields manifest, title, href, and manifest id of href for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] if mime.startswith('audio') or mime.startswith('video'): href = self._w.id_to_href[id] yield id, href, mime def other_iter(self): # yields otherid for each file not in the manifest for book_href in self._w.other: yield book_href def selected_iter(self): # yields id type ('other' or 'manifest') and id/otherid for each file selected in the BookBrowser for book_href in self._w.selected: id_type = 'other' id = book_href href = book_href if href.startswith('OEBPS/'): href = href[6:] if href in self._w.href_to_id: id = self._w.href_to_id[href] id_type = 'manifest' yield id_type, id # miscellaneous routines # build the current opf incorporating all changes to date and return it def get_opf(self): return self._w.build_opf() # create your own current copy of all ebook contents in destintation directory def copy_book_contents_to(self, destdir): self._w.copy_book_contents_to(destdir) # get a list of the directories that contain Sigil's hunspell dictionaries def get_dictionary_dirs(self): return self._w.get_dictionary_dirs() # functions for converting from manifest id to href, basename, mimetype etc def href_to_id(self, href, ow=None): return self._w.map_href_to_id(href, ow) def id_to_mime(self, id, ow=None): return self._w.map_id_to_mime(id, ow) def basename_to_id(self, basename, ow=None): return self._w.map_basename_to_id(basename, ow) def id_to_href(self, id, ow=None): return self._w.map_id_to_href(id, ow) def href_to_basename(self, href, ow=None): if href is not None: return href.split('/')[-1] return ow # New for epub3 def id_to_properties(self, id, ow=None): return self._w.map_id_to_props.get(id, ow) def id_to_fallback(self, id, ow=None): return self._w.map_id_to_fall.get(id, ow) def id_to_overlay(self, id, ow=None): return self._w.map_id_to_over.get(id, ow) Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/compatibility_utils.py000066400000000000000000000225001321676412500276340ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab # Copyright (c) 2014 Kevin B. Hendricks, John Schember, and Doug Massay # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this list of # conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, this list # of conditions and the following disclaimer in the documentation and/or other materials # provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import unicode_literals, division, absolute_import, print_function import sys import codecs PY2 = sys.version_info[0] == 2 PY3 = sys.version_info[0] == 3 iswindows = sys.platform.startswith('win') try: from urllib.parse import unquote from urllib.parse import urlsplit except ImportError: from urllib import unquote from urlparse import urlsplit try: import html except ImportError: from HTMLParser import HTMLParser if PY2: _h = HTMLParser() if PY3: text_type = str binary_type = bytes # if will be printing arbitraty binary data to stdout on python 3 # sys.stdin = sys.stdin.detach() # sys.stdout = sys.stdout.detach() # sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) else: range = xrange text_type = unicode binary_type = str # if will be printing unicode under python 2 need to protect # against sys.stdout.encoding being None stupidly forcing forcing ascii encoding of unicode # sys.stdout = codecs.getwriter("utf-8")(sys.stdout) # alternatively set environment variable as follows **before** launching python: export PYTHONIOENCODING=UTF-8 # NOTE: Python 3 is completely broken when accessing single bytes in bytes strings # (and they amazingly claim by design and no bug!) # To illustrate: this works for unicode in Python 3 and for all Python 2.X for both bytestrings and unicode # >>> o = '123456789' # >>> o[-3] # '7' # >>> type(o[-3]) # # >>> type(o) # # Unfortunately, this is what Python 3 does for no sane reason and only for bytestrings # >>> o = b'123456789' # >>> o[-3] # 55 # >>> type(o[-3]) # # >>> type(o) # # This mind boggling behaviour also happens when indexing a bytestring and/or # iteratoring over a bytestring. In other words it will return an int but not # the byte itself!!!!!!! # The only way to access a single byte as a byte in bytestring and get the byte in both # Python 2 and Python 3 is to use a slice # This problem is so common there are horrible hacks floating around the net to **try** # to work around it, so that code that works on both Python 2 and Python 3 is possible. # So in order to write code that works on both Python 2 and Python 3 # if you index or access a single byte and want its ord() then use the bord() function. # If instead you want it as a single character byte use the bchar() function # both of which are defined below. if PY3: # Also Note: if decode a bytestring using 'latin-1' (or any other full range 0-255 encoding) # in place of ascii you will get a byte value to half-word or integer value # one-to-one mapping (in the 0 - 255 range) def bchr(s): return bytes([s]) def bstr(s): if isinstance(s, str): return bytes(s, 'latin-1') else: return bytes(s) def bord(s): return s def bchar(s): return bytes([s]) else: def bchr(s): return chr(s) def bstr(s): return str(s) def bord(s): return ord(s) def bchar(s): return s if PY3: # list-producing versions of the major Python iterating functions def lrange(*args, **kwargs): return list(range(*args, **kwargs)) def lzip(*args, **kwargs): return list(zip(*args, **kwargs)) def lmap(*args, **kwargs): return list(map(*args, **kwargs)) def lfilter(*args, **kwargs): return list(filter(*args, **kwargs)) else: import __builtin__ # Python 2-builtin ranges produce lists lrange = __builtin__.range lzip = __builtin__.zip lmap = __builtin__.map lfilter = __builtin__.filter # In Python 3 you can no longer use .encode('hex') on a bytestring # instead use the following on both platforms import binascii def hexlify(bdata): return (binascii.hexlify(bdata)).decode('ascii') # If you: import struct # Note: struct pack, unpack, unpack_from all *require* bytestring format # data all the way up to at least Python 2.7.5, Python 3 is okay with either # If you: import re # note: Python 3 "re" requires the pattern to be the exact same type as the data to be # searched ... but u"" is not allowed for the pattern itself only b"" # Python 2.X allows the pattern to be any type and converts it to match the data # and returns the same type as the data # convert string to be utf-8 encoded def utf8_str(p, enc='utf-8'): if p is None: return None if isinstance(p, text_type): return p.encode('utf-8') if enc != 'utf-8': return p.decode(enc, errors='replace').encode('utf-8') return p # convert string to be unicode encoded def unicode_str(p, enc='utf-8'): if p is None: return None if isinstance(p, text_type): return p return p.decode(enc, errors='replace') ASCII_CHARS = set(chr(x) for x in range(128)) URL_SAFE = set('ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' '0123456789' '#' '_.-/~') IRI_UNSAFE = ASCII_CHARS - URL_SAFE # returns a quoted IRI (not a URI) # modified to be scheme aware as external resources are possible in epub3 def quoteurl(href): if isinstance(href,binary_type): href = href.decode('utf-8') (ascheme, anetloc, apath, aquery, afragment) = urlsplit(href, scheme="", allow_fragments=True) if ascheme != "": ascheme += "://" href = href[len(ascheme):] result = [] for char in href: if char in IRI_UNSAFE: char = "%%%02x" % ord(char) result.append(char) return ascheme + ''.join(result) # unquotes url/iri def unquoteurl(href): if isinstance(href,binary_type): href = href.decode('utf-8') href = unquote(href) return href # unescape html def unescapeit(sval): if PY2: return _h.unescape(sval) return html.unescape(sval) # Python 2.X commandline parsing under Windows has been horribly broken for years! # Use the following code to emulate full unicode commandline parsing on Python 2 # ie. To get sys.argv arguments and properly encode them as unicode def unicode_argv(): global iswindows global PY3 if PY3: return sys.argv if iswindows: # Versions 2.x of Python don't support Unicode in sys.argv on # Windows, with the underlying Windows API instead replacing multi-byte # characters with '?'. So use shell32.GetCommandLineArgvW to get sys.argv # as a list of Unicode strings from ctypes import POINTER, byref, cdll, c_int, windll from ctypes.wintypes import LPCWSTR, LPWSTR GetCommandLineW = cdll.kernel32.GetCommandLineW GetCommandLineW.argtypes = [] GetCommandLineW.restype = LPCWSTR CommandLineToArgvW = windll.shell32.CommandLineToArgvW CommandLineToArgvW.argtypes = [LPCWSTR, POINTER(c_int)] CommandLineToArgvW.restype = POINTER(LPWSTR) cmd = GetCommandLineW() argc = c_int(0) argv = CommandLineToArgvW(cmd, byref(argc)) if argc.value > 0: # Remove Python executable and commands if present start = argc.value - len(sys.argv) return [argv[i] for i in range(start, argc.value)] # this should never happen return None else: argv = [] argvencoding = sys.stdin.encoding if argvencoding is None: argvencoding = sys.getfilesystemencoding() if argvencoding is None: argvencoding = 'utf-8' for arg in sys.argv: if isinstance(arg, text_type): argv.append(arg) else: argv.append(arg.decode(argvencoding)) return argv # Python 2.X is broken in that it does not recognize CP65001 as UTF-8 def add_cp65001_codec(): if PY2: try: codecs.lookup('cp65001') except LookupError: codecs.register( lambda name: name == 'cp65001' and codecs.lookup('utf-8') or None) return Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/epub_utils.py000066400000000000000000000145461321676412500257310ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab # Copyright (c) 2014 Kevin B. Hendricks, John Schember, and Doug Massay # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this list of # conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, this list # of conditions and the following disclaimer in the documentation and/or other materials # provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import unicode_literals, division, absolute_import, print_function import sys, os import struct, array, binascii, re from itertools import cycle from compatibility_utils import text_type, binary_type, utf8_str, unicode_str, bord, bchr import zlib import zipfile from zipfile import ZipFile import unipath from unipath import pathof import hashlib def SHA1(message): ctx = hashlib.sha1() ctx.update(message) return ctx.digest() epub_mimetype = b'application/epub+zip' def unzip_epub_to_dir(path_to_epub, destdir): f = open(pathof(path_to_epub), 'rb') sz = ZipFile(f) for name in sz.namelist(): data = sz.read(name) name = name.replace("/", os.sep) filepath = os.path.join(destdir,name) basedir = os.path.dirname(filepath) if not os.path.isdir(basedir): os.makedirs(basedir) with open(filepath,'wb') as fp: fp.write(data) f.close() def epub_zip_up_book_contents(ebook_path, epub_filepath): outzip = zipfile.ZipFile(pathof(epub_filepath), 'w') files = unipath.walk(ebook_path) if 'mimetype' in files: outzip.write(pathof(os.path.join(ebook_path, 'mimetype')), pathof('mimetype'), zipfile.ZIP_STORED) else: raise Exception('mimetype file is missing') files.remove('mimetype') for file in files: filepath = os.path.join(ebook_path, file) outzip.write(pathof(filepath),pathof(file),zipfile.ZIP_DEFLATED) outzip.close() def build_container_xml(relative_path_to_opf): opf_path = unicode_str(relative_path_to_opf) container = '\n' container += '\n' container += ' \n' container += '' % opf_path container += ' \n\n' return container def build_adobe_encryption_xml(mangled_fonts): encryption = '' if mangled_fonts is not None and len(mangled_fonts) > 0: encryption = '\n' for fontfile in mangled_fonts: encryption += ' \n' encryption += ' \n' encryption += ' \n' encryption += ' \n' encryption += ' \n' encryption += ' \n' encryption += '\n' return encryption # mangeled_fonts is a simple list of Font file names (no href or path needed) def build_idpf_encryption_xml(mangled_fonts): encryption = '' if mangled_fonts is not None and len(mangled_fonts) > 0: encryption = '\n' for fontfile in mangled_fonts: encryption += ' \n' encryption += ' \n' encryption += ' \n' encryption += ' \n' encryption += ' \n' encryption += ' \n' encryption += '\n' return encryption # mangeled_fonts is a simple list of Font file names (no href or path needed) def Adobe_encryption_key(uid): # strip it down to simple valid hex characters # being careful to generate a string of 16 bytes in length key = utf8_str(uid) if key.startswith(b"urn:uuid:"): key = key[9:] key = key.replace(b'-',b'') key = re.sub(r'[^a-fA-F0-9]', b'', key) key = binascii.unhexlify((key + key)[:32]) return key def Idpf_encryption_key(uid): # remove whitespace changing nothing else key = utf8_str(uid) key = key.replace(bchr(0x20),b'') key = key.replace(bchr(0x09),b'') key = key.replace(bchr(0x0d),b'') key = key.replace(bchr(0x0a),b'') key = SHA1(key) return key def Adobe_mangle_fonts(encryption_key, data): if isinstance(data, text_type): print('Error: font data must be a byte string') crypt = data[:1024] key = cycle(iter(map(bord, encryption_key))) encrypt = b''.join([bchr(bord(x)^next(key)) for x in crypt]) return encrypt + data[1024:] def Idpf_mangle_fonts(encryption_key, data): if isinstance(data, text_type): print('Error: font data must be a byte string') crypt = data[:1040] key = cycle(iter(map(bord, encryption_key))) encrypt = b''.join([bchr(bord(x)^next(key)) for x in crypt]) return encrypt + data[1040:] Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/inputcontainer.py000066400000000000000000000054321321676412500266120ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab # Copyright (c) 2014 Kevin B. Hendricks, John Schember, and Doug Massay # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this list of # conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, this list # of conditions and the following disclaimer in the documentation and/or other materials # provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import unicode_literals, division, absolute_import, print_function import sys import os from quickparser import QuickXHTMLParser from pluginhunspell import HunspellChecker from preferences import JSONPrefs class ContainerException(Exception): pass class InputContainer(object): def __init__(self, wrapper, debug = False): self._debug = debug self._w = wrapper self.qp=QuickXHTMLParser() self.hspell=HunspellChecker(wrapper.get_hunspell_path()) self.dictionary_dirs=wrapper.get_dictionary_dirs() self._prefs_store = JSONPrefs(wrapper.plugin_dir, wrapper.plugin_name) def getPrefs(self): return self._prefs_store def savePrefs(self, user_copy): self._prefs_store = user_copy self._prefs_store._commit() def launcher_version(self): return self._w.getversion() @property def sigil_ui_lang(self): if self._w.sigil_ui_lang is None: return 'en' return self._w.sigil_ui_lang @property def sigil_spellcheck_lang(self): if self._w.sigil_spellcheck_lang is None: return 'en_US' return self._w.sigil_spellcheck_lang def addotherfile(self, book_href, data): # creates a new file not in manifest with desired ebook root relative href self._w.addotherfile(book_href, data) Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/launcher.py000066400000000000000000000262471321676412500253600ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab # Copyright (c) 2014 Kevin B. Hendricks, John Schember, and Doug Massay # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this list of # conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, this list # of conditions and the following disclaimer in the documentation and/or other materials # provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import unicode_literals, division, absolute_import, print_function from compatibility_utils import PY3, text_type, utf8_str, unicode_str, unescapeit from compatibility_utils import unicode_argv, add_cp65001_codec, quoteurl # Sigil Python Script Launcher # # This launcher script is aways invoked by the script manager # for python scripts (both Python 2.7 and 3.4 and later). It is passed in: # ebook_root, output directory, script type, and path to target script location # # This launcher script will parse the opf and make available # a wrapper and a type specific container object that acts as an # interface to be used by target scripts to safely access the ebook files. # # The Wrapper acts as a record keeper of changed files while acting to # shield the original files # # The Launcher script will then invoke the target's run() routine # All target output to stdout and stderr is captured # Upon completion simple xml formatted information is passed back # to Sigil before the launcher script exits import sys import os, os.path import codecs import unipath from unipath import pathof from opf_parser import Opf_Parser from wrapper import Wrapper from bookcontainer import BookContainer from inputcontainer import InputContainer from outputcontainer import OutputContainer from validationcontainer import ValidationContainer from xml.sax.saxutils import escape as xmlescape import traceback add_cp65001_codec() _DEBUG=False SUPPORTED_SCRIPT_TYPES = ['input', 'output', 'edit', 'validation'] _XML_HEADER = '\n' EXTRA_ENTITIES = {'"':'"', "'":"'"} def escapeit(sval, EXTRAS=None): if EXTRAS: return xmlescape(unescapeit(sval), EXTRAS) return xmlescape(unescapeit(sval)) # Wrap a stream so that output gets saved # using utf-8 encoding class SavedStream: def __init__(self, stream, stype, ps): self.stream = stream self.encoding = stream.encoding self.ps = ps self.stype = stype if self.encoding == None: self.encoding = 'utf-8' def write(self, data): if isinstance(data, text_type): data = data.encode('utf-8') elif self.encoding not in ['utf-8','UTF-8','cp65001','CP65001']: udata = data.decode(self.encoding) data = udata.encode('utf-8') if self.stype == 'stdout': self.ps.stdouttext.append(data) if PY3: self.stream.buffer.write(data) else: self.stream.write(data) else: self.ps.stderrtext.append(data) def __getattr__(self, attr): if attr == 'mode': return 'wb' if attr == 'encoding': return 'utf-8' if attr == 'stream': return self.stream return getattr(self.stream, attr) class ProcessScript(object): def __init__(self, script_type, script_module, container): self.container = container self.script_module = script_module self.script_type = script_type self.exitcode = None self.stdouttext = [] self.stderrtext = [] self.wrapout = [] def launch(self): script_module = self.script_module script_type = self.script_type container = self.container sys.stdout = SavedStream(sys.stdout, 'stdout', self) sys.stderr = SavedStream(sys.stderr, 'stderr', self) try: target_script = __import__(script_module) self.exitcode = target_script.run(container) sys.stdout = sys.stdout.stream sys.stderr = sys.stderr.stream except Exception as e: sys.stderr.write(traceback.format_exc()) sys.stderr.write("Error: %s\n" % e) sys.stdout = sys.stdout.stream sys.stderr = sys.stderr.stream self.exitcode = -1 pass if self.exitcode != 0: self.wrapout.append(_XML_HEADER) self.wrapout.append('\nfailed\n\n' % script_type) return self.exitcode if script_type == "edit": # write out the final updated opf to the outdir container._w.write_opf() # save the wrapper results to a file before exiting the thread self.wrapout.append(_XML_HEADER) self.wrapout.append('\n' % script_type) self.wrapout.append('success\n') self.wrapout.append('\n') if script_type == "edit": for ftype, id, href in container._w.deleted: if ftype == 'manifest': bookhref = 'OEBPS/' + href mime = container._w.getmime(bookhref) else: bookhref = id id = "" mime = container._w.getmime(bookhref) self.wrapout.append('\n' % (quoteurl(bookhref), id, mime)) if script_type in ['input', 'edit']: for id in container._w.added: if id in container._w.id_to_href: href = container._w.id_to_href[id] bookhref = 'OEBPS/' + href mime = container._w.id_to_mime[id] else: bookhref = id id = "" mime = container._w.getmime(bookhref) self.wrapout.append('\n' % (quoteurl(bookhref), id, mime)) if script_type == 'edit': for id in container._w.modified: if id in container._w.id_to_href: href = container._w.id_to_href[id] bookhref = 'OEBPS/' + href mime = container._w.id_to_mime[id] else: bookhref = id id = "" mime = container._w.getmime(bookhref) self.wrapout.append('\n' % (quoteurl(bookhref), id, mime)) if script_type == 'validation': for vres in container.results: self.wrapout.append('\n' % (vres.restype, vres.filename, vres.linenumber, vres.charoffset, vres.message)) self.wrapout.append('\n') self.exitcode = 0 return def failed(script_type, msg): wrapper = _XML_HEADER if script_type is None: wrapper += '\nfailed\n\n' else: wrapper += '\nfailed\n\n' % script_type wrapper += '%s\n\n' % msg # write it to stdout and exit if PY3: sys.stdout.buffer.write(utf8_str(wrapper)) else: sys.stdout.write(utf8_str(wrapper)) # uses the unicode_arv call to convert all command line paths to full unicode # arguments: # path to Sigil's ebook_root # path to Sigil's output (temp) directory # script type ("input", "output", "edit") # path to script target file def main(argv=unicode_argv()): if len(argv) != 5: failed(None, msg="Launcher: improper number of arguments passed to launcher.py") return -1 ebook_root = argv[1] outdir = argv[2] script_type = argv[3] target_file = argv[4] script_home = os.path.dirname(target_file) plugin_name = os.path.split(script_home)[-1] plugin_dir = os.path.dirname(script_home) script_module = os.path.splitext(os.path.basename(target_file))[0] # do basic sanity checking anyway if script_type not in SUPPORTED_SCRIPT_TYPES: failed(None, msg="Launcher: script type %s is not supported" % script_type) return -1 ok = unipath.exists(ebook_root) and unipath.isdir(ebook_root) ok = ok and unipath.exists(outdir) and unipath.isdir(outdir) ok = ok and unipath.exists(script_home) and unipath.isdir(script_home) ok = ok and unipath.exists(target_file) and unipath.isfile(target_file) if not ok: failed(None, msg="Launcher: missing or incorrect paths passed in") return -1 # update sys with path to target module home directory sys.path.append(script_home) # load and parse opf if present op = None opf_path = os.path.join(ebook_root,'OEBPS','content.opf') if unipath.exists(opf_path) and unipath.isfile(opf_path): op = Opf_Parser(opf_path) # create a wrapper for record keeping and safety rk = Wrapper(ebook_root, outdir, op, plugin_dir, plugin_name) # get the correct container if script_type == 'edit': bc = BookContainer(rk) elif script_type == 'input': bc = InputContainer(rk) elif script_type == 'validation': bc = ValidationContainer(rk) else: bc = OutputContainer(rk) # start the target script ps = ProcessScript(script_type, script_module, bc) ps.launch() # get standard error and standard out from the target script successmsg = '' for data in ps.stdouttext: successmsg += unicode_str(data) successmsg = escapeit(successmsg) errorlog = '' for data in ps.stderrtext: errorlog += unicode_str(data) errorlog = escapeit(errorlog) # get the target's script wrapper xml resultxml = "".join(ps.wrapout) resultxml += "\n" if ps.exitcode == 0: resultxml += successmsg if _DEBUG: resultxml += errorlog else: resultxml += successmsg resultxml += errorlog resultxml +='\n\n' # write it to stdout and exit if PY3: sys.stdout.buffer.write(utf8_str(resultxml)) else: sys.stdout.write(utf8_str(resultxml)) return 0 if __name__ == "__main__": sys.exit(main()) Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/opf_parser.py000066400000000000000000000311511321676412500257050ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab # Copyright (c) 2014 Kevin B. Hendricks, John Schember, and Doug Massay # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this list of # conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, this list # of conditions and the following disclaimer in the documentation and/or other materials # provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import unicode_literals, division, absolute_import, print_function from compatibility_utils import unquoteurl from unipath import pathof import sys, os SPECIAL_HANDLING_TAGS = { '?xml' : ('xmlheader', -1), '!--' : ('comment', -3), '!DOCTYPE' : ('doctype', -1), } SPECIAL_HANDLING_TYPES = ['xmlheader', 'doctype', 'comment'] _OPF_PARENT_TAGS = ['package', 'metadata', 'dc-metadata', 'x-metadata', 'manifest', 'spine', 'tours', 'guide', 'bindings'] class Opf_Parser(object): def __init__(self, opf_path, debug = False): self._debug = debug opf_path = pathof(opf_path) self.opfname = os.path.basename(opf_path) self.opf = None with open(opf_path,'rb') as fp: self.opf = fp.read().decode('utf-8') self.opos = 0 self.package = None self.metadata_attr = None self.metadata = [] self.cover_id = None self.manifest_id_to_href = {} self.manifest_id_to_mime = {} self.href_to_manifest_id = {} self.manifest_id_to_properties = {} self.manifest_id_to_fallback = {} self.manifest_id_to_overlay = {} self.spine = [] self.spine_ppd = None self.guide = [] self.bindings = [] self._parseData() # OPF tag iterator def _opf_tag_iter(self): tcontent = last_tattr = None prefix = [] while True: text, tag = self._parseopf() if text is None and tag is None: break if text is not None: tcontent = text.rstrip(" \t\v\f\r\n") else: # we have a tag ttype, tname, tattr = self._parsetag(tag) if ttype == "begin": tcontent = None prefix.append(tname) if tname in _OPF_PARENT_TAGS: yield ".".join(prefix), tname, tattr, tcontent else: last_tattr = tattr else: # single or end if ttype == "end": prefix.pop() tattr = last_tattr if tattr is None: tattr = {} last_tattr = None elif ttype == 'single': tcontent = None if ttype == 'single' or (ttype == 'end' and tname not in _OPF_PARENT_TAGS): yield ".".join(prefix), tname, tattr, tcontent tcontent = None # now parse the OPF to extract manifest, spine , and metadata def _parseData(self): cnt = 0 for prefix, tname, tattr, tcontent in self._opf_tag_iter(): if self._debug: print (" Parsing OPF: ", prefix, tname, tattr, tcontent) # package if tname == "package": ver = tattr.pop("version", "2.0") uid = tattr.pop("unique-identifier","bookid") self.package = (ver, uid, tattr) continue # metadata if tname == "metadata": self.metadata_attr = tattr continue if tname in ["meta", "link"] or tname.startswith("dc:") and "metadata" in prefix: self.metadata.append((tname, tattr, tcontent)) if tattr.get("name","") == "cover": self.cover_id = tattr.get("content",None) continue # manifest if tname == "item" and "manifest" in prefix: nid = "xid%03d" % cnt cnt += 1 id = tattr.pop("id", nid) href = tattr.pop("href",'') mtype = tattr.pop("media-type",'') if mtype == "text/html": mtype = "application/xhtml+xml" href = unquoteurl(href) properties = tattr.pop("properties",None) fallback = tattr.pop("fallback",None) overlay = tattr.pop("media-overlay",None) self.manifest_id_to_href[id] = href self.manifest_id_to_mime[id] = mtype self.href_to_manifest_id[href] = id self.manifest_id_to_properties[id] = properties self.manifest_id_to_fallback[id] = fallback self.manifest_id_to_overlay[id] = overlay continue # spine if tname == "spine": if tattr is not None: self.spine_ppd = tattr.get("page-progression-direction", None) continue if tname == "itemref" and "spine" in prefix: idref = tattr.pop("idref", "") linear = tattr.pop("linear", None) properties = tattr.pop("properties", None) self.spine.append((idref, linear, properties)) continue # guide if tname == "reference" and "guide" in prefix: type = tattr.pop("type",'') title = tattr.pop("title",'') href = unquoteurl(tattr.pop("href",'')) self.guide.append((type, title, href)) continue # bindings (stored but ignored for now) if tname in ["mediaType", "mediatype"] and "bindings" in prefix: mtype = tattr.pop("media-type","") handler = tattr.pop("handler","") self.bindings.append((mtype, handler)) continue # parse and return either leading text or the next tag def _parseopf(self): p = self.opos if p >= len(self.opf): return None, None if self.opf[p] != '<': res = self.opf.find('<',p) if res == -1 : res = len(self.opf) self.opos = res return self.opf[p:res], None # handle comment as a special case if self.opf[p:p+4] == '',p+1) if te != -1: te = te+2 else: te = self.opf.find('>',p+1) ntb = self.opf.find('<',p+1) if ntb != -1 and ntb < te: self.opos = ntb return self.opf[p:ntb], None self.opos = te + 1 return None, self.opf[p:te+1] # parses tag to identify: [tname, ttype, tattr] # tname: tag name, ttype: tag type ('begin', 'end' or 'single'); # tattr: dictionary of tag atributes def _parsetag(self, s): n = len(s) p = 1 tname = None ttype = None tattr = {} while p < n and s[p:p+1] == ' ' : p += 1 if s[p:p+1] == '/': ttype = 'end' p += 1 while p < n and s[p:p+1] == ' ' : p += 1 b = p # handle comment special case as there may be no spaces to # delimit name begin or end if s[b:].startswith('!--'): p = b+3 tname = '!--' ttype, backstep = SPECIAL_HANDLING_TAGS[tname] tattr['special'] = s[p:backstep].strip() return tname, ttype, tattr while p < n and s[p:p+1] not in ('>', '/', ' ', '"', "'","\r","\n") : p += 1 tname=s[b:p].lower() # remove redundant opf: namespace prefixes on opf tags if tname.startswith("opf:"): tname = tname[4:] # more special cases if tname == '!doctype': tname = '!DOCTYPE' if tname in SPECIAL_HANDLING_TAGS: ttype, backstep = SPECIAL_HANDLING_TAGS[tname] tattr['special'] = s[p:backstep] if ttype is None: # parse any attributes of begin or single tags while s.find('=',p) != -1 : while p < n and s[p:p+1] == ' ' : p += 1 b = p while p < n and s[p:p+1] != '=' : p += 1 aname = s[b:p].lower() aname = aname.rstrip(' ') p += 1 while p < n and s[p:p+1] == ' ' : p += 1 if s[p:p+1] in ('"', "'") : qt = s[p:p+1] p = p + 1 b = p while p < n and s[p:p+1] != qt: p += 1 val = s[b:p] p += 1 else : b = p while p < n and s[p:p+1] not in ('>', '/', ' ') : p += 1 val = s[b:p] tattr[aname] = val if ttype is None: ttype = 'begin' if s.find('/',p) >= 0: ttype = 'single' return ttype, tname, tattr def handle_quoted_attribute_values(self, value): if '"' in value: value = value.replace('"', """) return value def taginfo_toxml(self, taginfo): res = [] tname, tattr, tcontent = taginfo res.append('<' + tname) if tattr is not None: for key in tattr: val = self.handle_quoted_attribute_values(tattr[key]) res.append(' ' + key + '="'+val+'"' ) if tcontent is not None: res.append('>' + tcontent + '\n') else: res.append('/>\n') return "".join(res) def get_epub_version(self): (ver, uid, tattr) = self.package return ver def get_package_tag(self): (ver, uid, tattr) = self.package packout = [] packout.append('\n") return "".join(packout) def get_metadataxml(self): data = [] tattr = self.metadata_attr tag = "\n') return "".join(data) def get_metadata_attr(self): return self.metadata_attr # list of (tname, tattr, tcontent) def get_metadata(self): return self.metadata def get_manifest_id_to_href_dict(self): return self.manifest_id_to_href def get_manifest_id_to_mime_dict(self): return self.manifest_id_to_mime def get_href_to_manifest_id_dict(self): return self.href_to_manifest_id def get_manifest_id_to_properties_dict(self): return self.manifest_id_to_properties def get_manifest_id_to_fallback_dict(self): return self.manifest_id_to_fallback def get_manifest_id_to_overlay_dict(self): return self.manifest_id_to_overlay def get_spine_ppd(self): return self.spine_ppd # list of (idref, linear, properties) def get_spine(self): return self.spine # list of (type, title, href) def get_guide(self): return self.guide # list of (media-type, handler) def get_bindings(self): return self.bindings Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/outputcontainer.py000066400000000000000000000233031321676412500270100ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab # Copyright (c) 2014 Kevin B. Hendricks, John Schember, and Doug Massay # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this list of # conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, this list # of conditions and the following disclaimer in the documentation and/or other materials # provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import unicode_literals, division, absolute_import, print_function import sys import os from quickparser import QuickXHTMLParser from preferences import JSONPrefs from pluginhunspell import HunspellChecker class ContainerException(Exception): pass class OutputContainer(object): def __init__(self, wrapper, debug = False): self._debug = debug self._w = wrapper self.qp=QuickXHTMLParser() self.hspell=HunspellChecker(wrapper.get_hunspell_path()) self.dictionary_dirs=wrapper.get_dictionary_dirs() self._prefs_store = JSONPrefs(wrapper.plugin_dir, wrapper.plugin_name) def getPrefs(self): return self._prefs_store def savePrefs(self, user_copy): self._prefs_store = user_copy self._prefs_store._commit() def launcher_version(self): return self._w.getversion() def epub_version(self): return self._w.getepubversion() @property def sigil_ui_lang(self): if self._w.sigil_ui_lang is None: return 'en' return self._w.sigil_ui_lang @property def sigil_spellcheck_lang(self): if self._w.sigil_spellcheck_lang is None: return 'en_US' return self._w.sigil_spellcheck_lang # OPF Acess and Manipulation Routines # toc and pagemap access routines def gettocid(self): return self._w.gettocid() def getpagemapid(self): return self._w.getpagemapid() # spine get and access routines def getspine(self): # spine is an ordered list of tuples (id, linear) return self._w.getspine() def getspine_ppd(self): # spine_ppd is utf-8 string of page direction (rtl, ltr, None) return self._w.getspine_ppd() # New for epub3 def getspine_epub3(self): # spine is an ordered list of tuples (id, linear, properties) return self._w.getspine_epub3() # guide get def getguide(self): # guide is an ordered list of tuples (type, title, href) return self._w.guide # bindings get # New for epub3 def getbindings_epub3(self): # bindings is an ordered list of tuples (media-type, handler) return self._w.getbindings_epub3() # metadata get/set def getmetadataxml(self): # returns a utf-8 encoded metadata xml fragement return self._w.getmetadataxml() # package tag get/set def getpackagetag(self): # returns a utf-8 encoded metadata xml fragement return self._w.getpackagetag() # reading files def readfile(self, id): # returns the contents of the file with id (text files are utf-8 encoded) return self._w.readfile(id) def readotherfile(self, book_href): # returns the contents of the file the ebook relative href (text files are utf-8 encoded) return self._w.readotherfile(book_href) # iterators def text_iter(self): # yields manifest id, href in spine order plus any non-spine items text_set = set([k for k,v in self._w.id_to_mime.items() if v == 'application/xhtml+xml']) for id, linear, properties in self._w.spine: if id in text_set: text_set -= set([id]) href = self._w.id_to_href[id] yield id, href for id in text_set: href = self._w.id_to_href[id] yield id, href def css_iter(self): # yields manifest id, href for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] if mime == 'text/css': href = self._w.id_to_href[id] yield id, href def image_iter(self): # yields manifest id, href, and mimetype for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] if mime.startswith('image'): href = self._w.id_to_href[id] yield id, href, mime def font_iter(self): # yields manifest id, href, and mimetype for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] if mime.find('font-') > -1 or mime.endswith('-ttf') or mime.endswith('truetype') or mime.endswith('opentype'): href = self._w.id_to_href[id] yield id, href, mime def manifest_iter(self): # yields manifest id, href, and mimetype for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] href = self._w.id_to_href[id] yield id, href, mime # New for epub3 def manifest_epub3_iter(self): # yields manifest id, href, mimetype, properties, fallback, media-overlay for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] href = self._w.id_to_href[id] properties = self._w.id_to_props[id] fallback = self._w.id_to_fall[id] overlay = self._w.id_to_over[id] yield id, href, mime, properties, fallback, overlay def spine_iter(self): # yields spine idref, linear(yes,no,None), href in spine order for (id , linear, properties) in self._w.spine: href = self._w.id_to_href[id] yield id, linear, href # New for epub3 def spine_epub3_iter(self): # yields spine idref, linear(yes,no,None), properties, href in spine order for (id , linear, properties) in self._w.spine: href = self._w.id_to_href[id] yield id, linear, properties, href def guide_iter(self): # yields guide reference type, title, href, and manifest id of href for (type, title, href) in self._w.guide: thref = href.split('#')[0] id = self._w.href_to_id.get(thref, None) yield type, title, href, id # New for epub3 def bindings_epub3_iter(self): # yields media-type handler in bindings order for (mtype, handler) in self._w.bindings: handler_href = self._w.id_to_href[handler] yield mtype, handler, handler_href def media_iter(self): # yields manifest, title, href, and manifest id of href for id in sorted(self._w.id_to_mime): mime = self._w.id_to_mime[id] if mime.startswith('audio') or mime.startswith('video'): href = self._w.id_to_href[id] yield id, href, mime def other_iter(self): # yields otherid for each file not in the manifest for book_href in self._w.other: yield book_href def selected_iter(self): # yields id type ('other' or 'manifest') and id/otherid for each file selected in the BookBrowser for book_href in self._w.selected: id_type = 'other' id = book_href href = book_href if href.startswith('OEBPS/'): href = href[6:] if href in self._w.href_to_id: id = self._w.href_to_id[href] id_type = 'manifest' yield id_type, id # miscellaneous routines # build the current opf incorporating all changes to date and return it def get_opf(self): return self._w.build_opf() # create your own current copy of all ebook contents in destintation directory def copy_book_contents_to(self, destdir): self._w.copy_book_contents_to(destdir) # get a list of the directories that contain Sigil's hunspell dictionaries def get_dictionary_dirs(self): return self._w.get_dictionary_dirs() # functions for converting from manifest id to href, basename, mimetype etc def href_to_id(self, href, ow=None): return self._w.map_href_to_id(href, ow) def id_to_mime(self, id, ow=None): return self._w.map_id_to_mime(id, ow) def basename_to_id(self, basename, ow=None): return self._w.map_basename_to_id(basename, ow) def id_to_href(self, id, ow=None): return self._w.map_id_to_href(id, ow) def href_to_basename(self, href, ow=None): if href is not None: return href.split('/')[-1] return ow # New for epub3 def id_to_properties(self, id, ow=None): return self._w.map_id_to_props.get(id, ow) def id_to_fallback(self, id, ow=None): return self._w.map_id_to_fall.get(id, ow) def id_to_overlay(self, id, ow=None): return self._w.map_id_to_over.get(id, ow) Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/pluginhunspell.py000066400000000000000000000121211321676412500266120ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab from __future__ import unicode_literals, division, absolute_import, print_function import sys import os from ctypes import * from ctypes.util import find_library import codecs PY3 = sys.version_info[0] == 3 if PY3: binary_type = bytes text_type = str else: binary_type = str text_type = unicode range = xrange class HunspellChecker(object): def __init__(self, hunspell_dllpath): self.hunhandle = None self.encoder = None self.decoder = None a = c_char_p() p = pointer(a) self.pp = pointer(p) self.retval = 0 # ctypes interface to hunspell spellchecker self.hunspell = None sys_hunspell_location = None try: # First use bundled hunspell location. self.hunspell = cdll[hunspell_dllpath] except OSError: # No bundled (or incompatible bundled) libhunspell found. # found. So search for system libhunspell. self.hunspell = None sys_hunspell_location = find_library('hunspell') if sys_hunspell_location is not None: try: self.hunspell = cdll.LoadLibrary(sys_hunspell_location) except OSError: # If the system libhunspell can't be found/loaded, then # then punt, so plugins that don't utilize libhunspell # can still function without error. self.hunspell = None if self.hunspell is None: return self.hunspell.Hunspell_create.restype = POINTER(c_int) self.hunspell.Hunspell_create.argtypes = (c_char_p, c_char_p) self.hunspell.Hunspell_destroy.argtype = POINTER(c_int) self.hunspell.Hunspell_get_dic_encoding.restype = c_char_p self.hunspell.Hunspell_get_dic_encoding.argtype = POINTER(c_int) self.hunspell.Hunspell_spell.argtypes = (POINTER(c_int), c_char_p) self.hunspell.Hunspell_suggest.argtypes = (POINTER(c_int), POINTER(POINTER(c_char_p)), c_char_p) self.hunspell.Hunspell_free_list.argtypes = (POINTER(c_int), POINTER(POINTER(c_char_p)), c_int) def loadDictionary(self, affpath, dpath): if sys.platform.startswith('win'): # Win32 bug needs a longpath prefix to trick hunspell into always using _wfopen instead of fopen. # Only matters if library paths contain non-ascii characters. affpath = '\\\\?\\' + affpath dpath = '\\\\?\\' + dpath if type(affpath) == text_type: affpath = affpath.encode('utf-8') if type(dpath) == text_type: dpath = dpath.encode('utf-8') if self.hunhandle is not None: self.cleanUp() self.hunhandle = self.hunspell.Hunspell_create(affpath, dpath) encdic = self.hunspell.Hunspell_get_dic_encoding(self.hunhandle) if type(encdic) == binary_type: encdic = encdic.decode('utf-8') try: self.encoder = codecs.getencoder(encdic) self.decoder = codecs.getdecoder(encdic) except codecs.LookupError: self.encoder = codecs.getencoder('utf-8') self.decoder = codecs.getdecoder('utf-8') def cleanUp(self): if self.hunhandle is not None: self.hunspell.Hunspell_destroy(self.hunhandle) self.hunhandle = None def encodeit(self, word): encoded_word, encoded_len = self.encoder(word) return encoded_word def decodeit(self, word): decoded_word, encoded_len = self.decoder(word) return decoded_word def check(self, word): if type(word) == binary_type: word = word.decode('utf-8') return self.hunspell.Hunspell_spell(self.hunhandle, self.encodeit(word)) def suggest(self,word): if type(word) == binary_type: word = word.decode('utf-8') self.retval = self.hunspell.Hunspell_suggest(self.hunhandle, self.pp, self.encodeit(word)) p = self.pp.contents suggestions = [] for i in range(0, self.retval): suggestions.append( self.decodeit( c_char_p(p[i]).value )) self.hunspell.Hunspell_free_list(self.hunhandle, self.pp, self.retval) return suggestions def main(): checklst = ["hello", "goodbye", "don't", "junkj", "misteak"] hunspell_dllpath = "/Users/kbhend/repo/build/bin/Sigil.app/Contents/lib/libhunspell.dylib" hsp = HunspellChecker(hunspell_dllpath) if hsp is None: print("Error could not load hunspell shared library", hunspell_dllpath) return 1 affpath = "/Users/kbhend/repo/build/bin/Sigil.app/Contents/hunspell_dictionaries/en_US.aff" dpath = "/Users/kbhend/repo/build/bin/Sigil.app/Contents/hunspell_dictionaries/en_US.dic" hsp.loadDictionary(affpath, dpath) for word in checklst: res = hsp.check(word) if res != 1: print(word, "incorrect", hsp.suggest(word)) else: print(word, "correct") hsp.cleanUp() return 0 if __name__ == '__main__': sys.exit(main()) Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/preferences.py000066400000000000000000000073301321676412500260500ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab # Copyright (c) 2014 Kevin B. Hendricks, John Schember, and Doug Massay # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this list of # conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, this list # of conditions and the following disclaimer in the documentation and/or other materials # provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import unicode_literals, division, absolute_import, print_function import os import json from compatibility_utils import PY2 if PY2: import codecs file_open = codecs.open else: file_open = open class JSONPrefs(dict): EXTENSION = '.json' # json file in user plugin directory. def __init__(self, plugin_dir, plugin_name): dict.__init__(self) self.defaults = {} pfolder = os.path.join(os.path.dirname(plugin_dir), "plugins_prefs", plugin_name) # in a plugins_prefs dir (/plugin_name subdir just to be safe) self.file_path = os.path.join(pfolder, '{0}{1}'.format(plugin_name, self.EXTENSION)) self.file_path = os.path.abspath(self.file_path) self.refresh() def refresh(self, clear_current=True): d = {} if os.path.exists(self.file_path): with file_open(self.file_path, 'r', encoding='utf-8') as f: try: d = json.load(f) except SystemError: pass except: import traceback traceback.print_exc() d = {} if clear_current: self.clear() self.update(d) def __getitem__(self, key): try: return dict.__getitem__(self, key) except KeyError: return self.defaults[key] def get(self, key, default=None): try: return dict.__getitem__(self, key) except KeyError: return self.defaults.get(key, default) def __setitem__(self, key, val): dict.__setitem__(self, key, val) def set(self, key, val): self.__setitem__(key, val) def __delitem__(self, key): try: dict.__delitem__(self, key) except KeyError: pass # ignore missing keys except: import traceback traceback.print_exc() def _commit(self): if hasattr(self, 'file_path') and self.file_path and len(self): dpath = os.path.dirname(self.file_path) if not os.path.exists(dpath): os.makedirs(dpath, 0o700) with file_open(self.file_path, 'w', encoding='utf-8') as f: return json.dump(self, f, indent=2, ensure_ascii=False) Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/quickparser.py000066400000000000000000000165671321676412500261140ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab # Copyright (c) 2014 Kevin B. Hendricks, John Schember, and Doug Massay # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this list of # conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, this list # of conditions and the following disclaimer in the documentation and/or other materials # provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import unicode_literals, division, absolute_import, print_function from compatibility_utils import text_type, binary_type import sys import os SPECIAL_HANDLING_TAGS = { '?xml' : ('xmlheader', -1), '!--' : ('comment', -3), '!DOCTYPE' : ('doctype', -1), } SPECIAL_HANDLING_TYPES = ['xmlheader', 'doctype', 'comment'] class QuickXHTMLParser(object): def __init__(self): self.pos = 0 self.content = None self.clen = 0 self.tagpath = None def setContent(self, data, codec = 'utf-8' ): if data is None: data = '' if isinstance(data, binary_type): self.content = data.decode(codec) else: self.content = data self.pos = 0 self.clen = len(self.content) self.tagpath = [''] # parses string version of tag to identify its name, # its type 'begin', 'end' or 'single', # plus build a hashtable of its atributes def parsetag(self, s): n = len(s) p = 1 # get the tag name tname = None ttype = None tattr = {} while p < n and s[p:p+1] == ' ' : p += 1 if s[p:p+1] == '/': ttype = 'end' p += 1 while p < n and s[p:p+1] == ' ' : p += 1 b = p # handle comment special case as there may be no spaces to # delimit name begin or end if s[b:].startswith('!--'): p = b+3 tname = '!--' ttype, backstep = SPECIAL_HANDLING_TAGS[tname] tattr['special'] = s[p:backstep].strip() return tname, ttype, tattr while p < n and s[p:p+1] not in ('>', '/', ' ', '"', "'", "\r", "\n") : p += 1 tname=s[b:p].lower() if tname == '!doctype': tname = '!DOCTYPE' # special cases if tname in SPECIAL_HANDLING_TAGS: ttype, backstep = SPECIAL_HANDLING_TAGS[tname] tattr['special'] = s[p:backstep] if ttype is None: # parse any attributes while s.find('=',p) != -1 : while p < n and s[p:p+1] == ' ' : p += 1 b = p while p < n and s[p:p+1] != '=' : p += 1 # attribute names can be mixed case and are in SVG aname = s[b:p] aname = aname.rstrip(' ') p += 1 while p < n and s[p:p+1] == ' ' : p += 1 if s[p:p+1] in ('"', "'") : qt = s[p:p+1] p = p + 1 b = p while p < n and s[p:p+1] != qt : p += 1 val = s[b:p] p += 1 else : b = p while p < n and s[p:p+1] not in ('>', '/', ' ') : p += 1 val = s[b:p] tattr[aname] = val # label beginning and single tags if ttype is None: ttype = 'begin' if s.find('/',p) >= 0: ttype = 'single' return tname, ttype, tattr # parse leading text of xhtml and tag # returns as tuple (Leading Text, Tag) # only one will have a value, the other will always be None def parseml(self): p = self.pos if p >= self.clen: return None, None if self.content[p] != '<': res = self.content.find('<',p) if res == -1 : res = len(self.content) self.pos = res return self.content[p:res], None # handle comment as a special case to deal with multi-line comments if self.content[p:p+4] == '',p+1) if te != -1: te = te+2 else : tb = p te = self.content.find('>',p+1) ntb = self.content.find('<',p+1) if ntb != -1 and ntb < te: self.pos = ntb return self.content[p:ntb], None self.pos = te + 1 return None, self.content[p:te+1] # yields leading text, tagpath prefix, tag name, tag type, tag attributes # tag prefix is a dotted history of all open parent ("begin') tags # tag types are "single", "begin", "end", "comment", "xmlheader", and "doctype" # tag attributes is a dictionary of key and value pairs def parse_iter(self): while True: text, tag = self.parseml() if text is None and tag is None: break tp = ".".join(self.tagpath) if text is not None: tname = ttype = tattr = None if tag is not None: text = None tname, ttype, tattr = self.parsetag(tag) if ttype == 'end': last_begin = self.tagpath[-1] if last_begin != tname: print ('Warning: Improperly Nested Tags, nesting: ', self.tagpath, ' but parsing end tag: ', tname) yield text, tp, tname, ttype, tattr if ttype is not None: if ttype == 'begin': self.tagpath.append(tname) elif ttype == 'end': self.tagpath.pop() # create xml tag from tag info def tag_info_to_xml(self, tname, ttype, tattr=None): if ttype is None or tname is None: return '' if ttype == 'end': return '' % tname if ttype in SPECIAL_HANDLING_TYPES and tattr is not None and 'special' in tattr: info = tattr['special'] if ttype == 'comment': return '<%s %s-->' % (tname, info) else: return '<%s %s>' % (tname, info) res = [] res.append('<%s' % tname) if tattr is not None: for key in tattr: res.append(' %s="%s"' % (key, tattr[key])) if ttype == 'single': res.append('/>') else : res.append('>') return "".join(res) Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/000077500000000000000000000000001321676412500250515ustar00rootroot00000000000000Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/AUTHORS.txt000066400000000000000000000033231321676412500267400ustar00rootroot00000000000000Behold, mortal, the origins of Beautiful Soup... ================================================ Leonard Richardson is the primary programmer. Aaron DeVore is awesome. Mark Pilgrim provided the encoding detection code that forms the base of UnicodeDammit. Thomas Kluyver and Ezio Melotti finished the work of getting Beautiful Soup 4 working under Python 3. Simon Willison wrote soupselect, which was used to make Beautiful Soup support CSS selectors. Sam Ruby helped with a lot of edge cases. Jonathan Ellis was awarded the prestigous Beau Potage D'Or for his work in solving the nestable tags conundrum. An incomplete list of people have contributed patches to Beautiful Soup: Istvan Albert, Andrew Lin, Anthony Baxter, Andrew Boyko, Tony Chang, Zephyr Fang, Fuzzy, Roman Gaufman, Yoni Gilad, Richie Hindle, Peteris Krumins, Kent Johnson, Ben Last, Robert Leftwich, Staffan Malmgren, Ksenia Marasanova, JP Moins, Adam Monsen, John Nagle, "Jon", Ed Oskiewicz, Greg Phillips, Giles Radford, Arthur Rudolph, Marko Samastur, Jouni Seppänen, Alexander Schmolck, Andy Theyers, Glyn Webster, Paul Wright, Danny Yoo An incomplete list of people who made suggestions or found bugs or found ways to break Beautiful Soup: Hanno Böck, Matteo Bertini, Chris Curvey, Simon Cusack, Bruce Eckel, Matt Ernst, Michael Foord, Tom Harris, Bill de hOra, Donald Howes, Matt Patterson, Scott Roberts, Steve Strassmann, Mike Williams, warchild at redho dot com, Sami Kuisma, Carlos Rocha, Bob Hutchison, Joren Mc, Michal Migurski, John Kleven, Tim Heaney, Tripp Lilley, Ed Summers, Dennis Sutch, Chris Smith, Aaron Sweep^W Swartz, Stuart Turner, Greg Edwards, Kevin J Kalupson, Nikos Kouremenos, Artur de Sousa Rocha, Yichun Wei, Per Vognsen Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/COPYING.txt000066400000000000000000000023571321676412500267310ustar00rootroot00000000000000Beautiful Soup is made available under the MIT license: Copyright (c) 2004-2012 Leonard Richardson 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, DAMMIT. Beautiful Soup incorporates code from the html5lib library, which is also made available under the MIT license. Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/__init__.py000066400000000000000000000522041321676412500271650ustar00rootroot00000000000000"""Beautiful Soup Elixir and Tonic "The Screen-Scraper's Friend" http://www.crummy.com/software/BeautifulSoup/ Beautiful Soup uses a pluggable XML or HTML parser to parse a (possibly invalid) document into a tree representation. Beautiful Soup provides provides methods and Pythonic idioms that make it easy to navigate, search, and modify the parse tree. Beautiful Soup works with Python 2.6 and up. It works better if lxml and/or html5lib is installed. For more than you ever wanted to know about Beautiful Soup, see the documentation: http://www.crummy.com/software/BeautifulSoup/bs4/doc/ """ from __future__ import unicode_literals, division, absolute_import, print_function import sys PY3 = sys.version_info[0] == 3 if PY3: text_type = str binary_type = bytes basestring = str unicode = str else: range = xrange text_type = unicode binary_type = str __author__ = "Leonard Richardson (leonardr@segfault.org)" __version__ = "4.4.0" __copyright__ = "Copyright (c) 2004-2015 Leonard Richardson" __license__ = "MIT" __all__ = ['BeautifulSoup'] import os import re import warnings def _remove_xml_header(data): return re.sub(r'<\s*\?xml\s*[^\?>]*\?*>\s*','',data, flags=re.I) from .builder import builder_registry, ParserRejectedMarkup from .dammit import UnicodeDammit from .element import ( CData, Comment, DEFAULT_OUTPUT_ENCODING, Declaration, Doctype, NavigableString, PageElement, ProcessingInstruction, ResultSet, SoupStrainer, Tag, ) # The very first thing we do is give a useful error if someone is # running this code under Python 3 without converting it. 'You are trying to run the Python 2 version of Beautiful Soup under Python 3. This will not work.'!='You need to convert the code, either by installing it (`python setup.py install`) or by running 2to3 (`2to3 -w bs4`).' class BeautifulSoup(Tag): """ This class defines the basic interface called by the tree builders. These methods will be called by the parser: reset() feed(markup) The tree builder may call these methods from its feed() implementation: handle_starttag(name, attrs) # See note about return value handle_endtag(name) handle_data(data) # Appends to the current data node endData(containerClass=NavigableString) # Ends the current data node No matter how complicated the underlying parser is, you should be able to build a tree using 'start tag' events, 'end tag' events, 'data' events, and "done with data" events. If you encounter an empty-element tag (aka a self-closing tag, like HTML's
tag), call handle_starttag and then handle_endtag. """ ROOT_TAG_NAME = '[document]' # If the end-user gives no indication which tree builder they # want, look for one with these features. DEFAULT_BUILDER_FEATURES = ['html', 'fast'] ASCII_SPACES = '\x20\x0a\x09\x0c\x0d' NO_PARSER_SPECIFIED_WARNING = "No parser was explicitly specified, so I'm using the best available %(markup_type)s parser for this system (\"%(parser)s\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n\nTo get rid of this warning, change this:\n\n BeautifulSoup([your markup])\n\nto this:\n\n BeautifulSoup([your markup], \"%(parser)s\")\n" def __init__(self, markup="", features=None, builder=None, parse_only=None, from_encoding=None, exclude_encodings=None, **kwargs): """The Soup object is initialized as the 'root tag', and the provided markup (which can be a string or a file-like object) is fed into the underlying parser.""" if 'convertEntities' in kwargs: warnings.warn( "BS4 does not respect the convertEntities argument to the " "BeautifulSoup constructor. Entities are always converted " "to Unicode characters.") if 'markupMassage' in kwargs: del kwargs['markupMassage'] warnings.warn( "BS4 does not respect the markupMassage argument to the " "BeautifulSoup constructor. The tree builder is responsible " "for any necessary markup massage.") if 'smartQuotesTo' in kwargs: del kwargs['smartQuotesTo'] warnings.warn( "BS4 does not respect the smartQuotesTo argument to the " "BeautifulSoup constructor. Smart quotes are always converted " "to Unicode characters.") if 'selfClosingTags' in kwargs: del kwargs['selfClosingTags'] warnings.warn( "BS4 does not respect the selfClosingTags argument to the " "BeautifulSoup constructor. The tree builder is responsible " "for understanding self-closing tags.") if 'isHTML' in kwargs: del kwargs['isHTML'] warnings.warn( "BS4 does not respect the isHTML argument to the " "BeautifulSoup constructor. Suggest you use " "features='lxml' for HTML and features='lxml-xml' for " "XML.") def deprecated_argument(old_name, new_name): if old_name in kwargs: warnings.warn( 'The "%s" argument to the BeautifulSoup constructor ' 'has been renamed to "%s."' % (old_name, new_name)) value = kwargs[old_name] del kwargs[old_name] return value return None parse_only = parse_only or deprecated_argument( "parseOnlyThese", "parse_only") from_encoding = from_encoding or deprecated_argument( "fromEncoding", "from_encoding") if from_encoding and isinstance(markup, unicode): warnings.warn("You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored.") from_encoding = None if len(kwargs) > 0: arg = list(kwargs.keys()).pop() raise TypeError( "__init__() got an unexpected keyword argument '%s'" % arg) if builder is None: original_features = features if isinstance(features, basestring): features = [features] if features is None or len(features) == 0: features = self.DEFAULT_BUILDER_FEATURES builder_class = builder_registry.lookup(*features) if builder_class is None: raise FeatureNotFound( "Couldn't find a tree builder with the features you " "requested: %s. Do you need to install a parser library?" % ",".join(features)) builder = builder_class() if not (original_features == builder.NAME or original_features in builder.ALTERNATE_NAMES): if builder.is_xml: markup_type = "XML" else: markup_type = "HTML" warnings.warn(self.NO_PARSER_SPECIFIED_WARNING % dict( parser=builder.NAME, markup_type=markup_type)) self.builder = builder self.is_xml = builder.is_xml self.builder.soup = self self.parse_only = parse_only if hasattr(markup, 'read'): # It's a file-type object. markup = markup.read() elif len(markup) <= 256 and ( (isinstance(markup, bytes) and not b'<' in markup) or (isinstance(markup, unicode) and not u'<' in markup) ): # Print out warnings for a couple beginner problems # involving passing non-markup to Beautiful Soup. # Beautiful Soup will still parse the input as markup, # just in case that's what the user really wants. if (isinstance(markup, unicode) and not os.path.supports_unicode_filenames): possible_filename = markup.encode("utf8") else: possible_filename = markup is_file = False try: is_file = os.path.exists(possible_filename) except Exception as e: # This is almost certainly a problem involving # characters not valid in filenames on this # system. Just let it go. pass if is_file: if isinstance(markup, unicode): markup = markup.encode("utf8") warnings.warn( '"%s" looks like a filename, not markup. You should probably open this file and pass the filehandle into Beautiful Soup.' % markup) if markup[:5] == "http:" or markup[:6] == "https:": # TODO: This is ugly but I couldn't get it to work in # Python 3 otherwise. if ((isinstance(markup, binary_type) and not b' ' in markup) or (isinstance(markup, unicode) and not ' ' in markup)): if isinstance(markup, unicode): markup = markup.encode("utf8") warnings.warn( '"%s" looks like a URL. Beautiful Soup is not an HTTP client. You should probably use an HTTP client to get the document behind the URL, and feed that document to Beautiful Soup.' % markup) for (self.markup, self.original_encoding, self.declared_html_encoding, self.contains_replacement_characters) in ( self.builder.prepare_markup( markup, from_encoding, exclude_encodings=exclude_encodings)): self.reset() try: self._feed() break except ParserRejectedMarkup: pass # Clear out the markup and remove the builder's circular # reference to this object. self.markup = None self.builder.soup = None def __copy__(self): return type(self)(self.encode(), builder=self.builder) def __getstate__(self): # Frequently a tree builder can't be pickled. d = dict(self.__dict__) if 'builder' in d and not self.builder.picklable: del d['builder'] return d def _feed(self): # Convert the document to Unicode. self.builder.reset() self.builder.feed(self.markup) # Close out any unfinished strings and close all the open tags. self.endData() while self.currentTag.name != self.ROOT_TAG_NAME: self.popTag() def reset(self): Tag.__init__(self, self, self.builder, self.ROOT_TAG_NAME) self.hidden = 1 self.builder.reset() self.current_data = [] self.currentTag = None self.tagStack = [] self.preserve_whitespace_tag_stack = [] self.pushTag(self) def new_tag(self, name, namespace=None, nsprefix=None, **attrs): """Create a new tag associated with this soup.""" return Tag(None, self.builder, name, namespace, nsprefix, attrs) def new_string(self, s, subclass=NavigableString): """Create a new NavigableString associated with this soup.""" return subclass(s) def insert_before(self, successor): raise NotImplementedError("BeautifulSoup objects don't support insert_before().") def insert_after(self, successor): raise NotImplementedError("BeautifulSoup objects don't support insert_after().") def popTag(self): tag = self.tagStack.pop() if self.preserve_whitespace_tag_stack and tag == self.preserve_whitespace_tag_stack[-1]: self.preserve_whitespace_tag_stack.pop() #print "Pop", tag.name if self.tagStack: self.currentTag = self.tagStack[-1] return self.currentTag def pushTag(self, tag): #print "Push", tag.name if self.currentTag: self.currentTag.contents.append(tag) self.tagStack.append(tag) self.currentTag = self.tagStack[-1] if tag.name in self.builder.preserve_whitespace_tags: self.preserve_whitespace_tag_stack.append(tag) def endData(self, containerClass=NavigableString): if self.current_data: current_data = ''.join(self.current_data) # If whitespace is not preserved, and this string contains # nothing but ASCII spaces, replace it with a single space # or newline. if not self.preserve_whitespace_tag_stack: strippable = True for i in current_data: if i not in self.ASCII_SPACES: strippable = False break if strippable: if '\n' in current_data: current_data = '\n' else: current_data = ' ' # Reset the data collector. self.current_data = [] # Should we add this string to the tree at all? if self.parse_only and len(self.tagStack) <= 1 and \ (not self.parse_only.text or \ not self.parse_only.search(current_data)): return o = containerClass(current_data) self.object_was_parsed(o) def object_was_parsed(self, o, parent=None, most_recent_element=None): """Add an object to the parse tree.""" parent = parent or self.currentTag previous_element = most_recent_element or self._most_recent_element next_element = previous_sibling = next_sibling = None if isinstance(o, Tag): next_element = o.next_element next_sibling = o.next_sibling previous_sibling = o.previous_sibling if not previous_element: previous_element = o.previous_element o.setup(parent, previous_element, next_element, previous_sibling, next_sibling) self._most_recent_element = o parent.contents.append(o) if parent.next_sibling: # This node is being inserted into an element that has # already been parsed. Deal with any dangling references. index = parent.contents.index(o) if index == 0: previous_element = parent previous_sibling = None else: previous_element = previous_sibling = parent.contents[index-1] if index == len(parent.contents)-1: next_element = parent.next_sibling next_sibling = None else: next_element = next_sibling = parent.contents[index+1] o.previous_element = previous_element if previous_element: previous_element.next_element = o o.next_element = next_element if next_element: next_element.previous_element = o o.next_sibling = next_sibling if next_sibling: next_sibling.previous_sibling = o o.previous_sibling = previous_sibling if previous_sibling: previous_sibling.next_sibling = o def _popToTag(self, name, nsprefix=None, inclusivePop=True): """Pops the tag stack up to and including the most recent instance of the given tag. If inclusivePop is false, pops the tag stack up to but *not* including the most recent instqance of the given tag.""" #print "Popping to %s" % name if name == self.ROOT_TAG_NAME: # The BeautifulSoup object itself can never be popped. return most_recently_popped = None stack_size = len(self.tagStack) for i in range(stack_size - 1, 0, -1): t = self.tagStack[i] if (name == t.name and nsprefix == t.prefix): if inclusivePop: most_recently_popped = self.popTag() break most_recently_popped = self.popTag() return most_recently_popped def handle_starttag(self, name, namespace, nsprefix, attrs): """Push a start tag on to the stack. If this method returns None, the tag was rejected by the SoupStrainer. You should proceed as if the tag had not occured in the document. For instance, if this was a self-closing tag, don't call handle_endtag. """ # print "Start tag %s: %s" % (name, attrs) self.endData() if (self.parse_only and len(self.tagStack) <= 1 and (self.parse_only.text or not self.parse_only.search_tag(name, attrs))): return None tag = Tag(self, self.builder, name, namespace, nsprefix, attrs, self.currentTag, self._most_recent_element) if tag is None: return tag if self._most_recent_element: self._most_recent_element.next_element = tag self._most_recent_element = tag self.pushTag(tag) return tag def handle_endtag(self, name, nsprefix=None): #print "End tag: " + name self.endData() self._popToTag(name, nsprefix) def handle_data(self, data): self.current_data.append(data) def decode(self, pretty_print=False, eventual_encoding=DEFAULT_OUTPUT_ENCODING, formatter="minimal", indent_chars=" "): """Returns a string or Unicode representation of this document. To get Unicode, pass None for encoding.""" if self.is_xml: # Print the XML declaration encoding_part = '' if eventual_encoding != None: encoding_part = ' encoding="%s"' % eventual_encoding prefix = '\n' % encoding_part else: prefix = '' if not pretty_print: indent_level = None else: indent_level = 0 return prefix + super(BeautifulSoup, self).decode( indent_level, eventual_encoding, formatter, indent_chars) def decodexml(self, indent_level=0, eventual_encoding=DEFAULT_OUTPUT_ENCODING, formatter="minimal", indent_chars=" "): """Returns a string or Unicode representation of this document. as pretty printed xml""" # generate a correct xml header declaration encoding_part = '' if eventual_encoding != None: encoding_part = ' encoding="%s"' % eventual_encoding prefix = '\n' % encoding_part # remove any existing xml header pi since its encoding may now be incorrect # before adding in new xml header pi with the proper specified encoding newsource = super(BeautifulSoup, self).decodexml( indent_level, eventual_encoding, formatter, indent_chars) if newsource.startswith('\n' % encoding_part newsource = super(BeautifulSoup, self).serialize_xhtml(eventual_encoding, formatter) # remove any existing xml header declaration since its encoding may now be incorrect # before adding in new xml header declaration with the proper specified encoding if newsource.startswith('\n' % encoding_part newsource = super(BeautifulSoup, self).prettyprint_xhtml(indent_level, eventual_encoding, formatter, indent_chars) # remove any existing xml header pi since its encoding may now be incorrect # before adding in new xml header pi with the proper specified encoding if newsource.startswith(' 0: feature = features.pop() we_have_the_feature = self.builders_for_feature.get(feature, []) if len(we_have_the_feature) > 0: if candidates is None: candidates = we_have_the_feature candidate_set = set(candidates) else: # Eliminate any candidates that don't have this feature. candidate_set = candidate_set.intersection( set(we_have_the_feature)) # The only valid candidates are the ones in candidate_set. # Go through the original list of candidates and pick the first one # that's in candidate_set. if candidate_set is None: return None for candidate in candidates: if candidate in candidate_set: return candidate return None # The BeautifulSoup class will take feature lists from developers and use them # to look up builders in this registry. builder_registry = TreeBuilderRegistry() class TreeBuilder(object): """Turn a document into a Beautiful Soup object tree.""" NAME = "[Unknown tree builder]" ALTERNATE_NAMES = [] features = [] is_xml = False picklable = False preserve_whitespace_tags = set() empty_element_tags = None # A tag will be considered an empty-element # tag when and only when it has no contents. # A value for these tag/attribute combinations is a space- or # comma-separated list of CDATA, rather than a single CDATA. cdata_list_attributes = {} def __init__(self): self.soup = None def reset(self): pass def can_be_empty_element(self, tag_name): """Might a tag with this name be an empty-element tag? The final markup may or may not actually present this tag as self-closing. For instance: an HTMLBuilder does not consider a

tag to be an empty-element tag (it's not in HTMLBuilder.empty_element_tags). This means an empty

tag will be presented as "

", not "

". The default implementation has no opinion about which tags are empty-element tags, so a tag will be presented as an empty-element tag if and only if it has no contents. "" will become "", and "bar" will be left alone. """ if self.empty_element_tags is None: return True return tag_name in self.empty_element_tags def feed(self, markup): raise NotImplementedError() def prepare_markup(self, markup, user_specified_encoding=None, document_declared_encoding=None): return markup, None, None, False def test_fragment_to_document(self, fragment): """Wrap an HTML fragment to make it look like a document. Different parsers do this differently. For instance, lxml introduces an empty tag, and html5lib doesn't. Abstracting this away lets us write simple tests which run HTML fragments through the parser and compare the results against other HTML fragments. This method should not be used outside of tests. """ return fragment def set_up_substitutions(self, tag): return False def _replace_cdata_list_attribute_values(self, tag_name, attrs): """Replaces class="foo bar" with class=["foo", "bar"] Modifies its input in place. """ if not attrs: return attrs if self.cdata_list_attributes: universal = self.cdata_list_attributes.get('*', []) tag_specific = self.cdata_list_attributes.get( tag_name.lower(), None) for attr in list(attrs.keys()): if attr in universal or (tag_specific and attr in tag_specific): # We have a "class"-type attribute whose string # value is a whitespace-separated list of # values. Split it into a list. value = attrs[attr] if isinstance(value, basestring): values = whitespace_re.split(value) else: # html5lib sometimes calls setAttributes twice # for the same tag when rearranging the parse # tree. On the second call the attribute value # here is already a list. If this happens, # leave the value alone rather than trying to # split it again. values = value attrs[attr] = values return attrs class SAXTreeBuilder(TreeBuilder): """A Beautiful Soup treebuilder that listens for SAX events.""" def feed(self, markup): raise NotImplementedError() def close(self): pass def startElement(self, name, attrs): attrs = dict((key[1], value) for key, value in list(attrs.items())) #print "Start %s, %r" % (name, attrs) self.soup.handle_starttag(name, attrs) def endElement(self, name): #print "End %s" % name self.soup.handle_endtag(name) def startElementNS(self, nsTuple, nodeName, attrs): # Throw away (ns, nodeName) for now. self.startElement(nodeName, attrs) def endElementNS(self, nsTuple, nodeName): # Throw away (ns, nodeName) for now. self.endElement(nodeName) #handler.endElementNS((ns, node.nodeName), node.nodeName) def startPrefixMapping(self, prefix, nodeValue): # Ignore the prefix for now. pass def endPrefixMapping(self, prefix): # Ignore the prefix for now. # handler.endPrefixMapping(prefix) pass def characters(self, content): self.soup.handle_data(content) def startDocument(self): pass def endDocument(self): pass class HTMLTreeBuilder(TreeBuilder): """This TreeBuilder knows facts about HTML. Such as which tags are empty-element tags. """ preserve_whitespace_tags = set(['pre', 'textarea']) empty_element_tags = set(['br' , 'hr', 'input', 'img', 'meta', 'spacer', 'link', 'frame', 'base']) # The HTML standard defines these attributes as containing a # space-separated list of values, not a single value. That is, # class="foo bar" means that the 'class' attribute has two values, # 'foo' and 'bar', not the single value 'foo bar'. When we # encounter one of these attributes, we will parse its value into # a list of values if possible. Upon output, the list will be # converted back into a string. cdata_list_attributes = { "*" : ['class', 'accesskey', 'dropzone'], "a" : ['rel', 'rev'], "link" : ['rel', 'rev'], "td" : ["headers"], "th" : ["headers"], "td" : ["headers"], "form" : ["accept-charset"], "object" : ["archive"], # These are HTML5 specific, as are *.accesskey and *.dropzone above. "area" : ["rel"], "icon" : ["sizes"], "iframe" : ["sandbox"], "output" : ["for"], } def set_up_substitutions(self, tag): # We are only interested in tags if tag.name != 'meta': return False http_equiv = tag.get('http-equiv') content = tag.get('content') charset = tag.get('charset') # We are interested in tags that say what encoding the # document was originally in. This means HTML 5-style # tags that provide the "charset" attribute. It also means # HTML 4-style tags that provide the "content" # attribute and have "http-equiv" set to "content-type". # # In both cases we will replace the value of the appropriate # attribute with a standin object that can take on any # encoding. meta_encoding = None if charset is not None: # HTML 5 style: # meta_encoding = charset tag['charset'] = CharsetMetaAttributeValue(charset) elif (content is not None and http_equiv is not None and http_equiv.lower() == 'content-type'): # HTML 4 style: # tag['content'] = ContentMetaAttributeValue(content) return (meta_encoding is not None) def register_treebuilders_from(module): """Copy TreeBuilders from the given module into this module.""" # I'm fairly sure this is not the best way to do this. this_module = sys.modules['sigil_bs4.builder'] for name in module.__all__: obj = getattr(module, name) if issubclass(obj, TreeBuilder): setattr(this_module, name, obj) this_module.__all__.append(name) # Register the builder while we're at it. this_module.builder_registry.register(obj) class ParserRejectedMarkup(Exception): pass # Builders are registered in reverse order of priority, so that custom # builder registrations will take precedence. In general, we want lxml # to take precedence over html5lib, because it's faster. And we only # want to use HTMLParser as a last result. from . import _htmlparser register_treebuilders_from(_htmlparser) try: from . import _html5lib register_treebuilders_from(_html5lib) except ImportError: # They don't have html5lib installed. pass try: from . import _lxml register_treebuilders_from(_lxml) except ImportError: # They don't have lxml installed. pass Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/builder/_html5lib.py000066400000000000000000000327201321676412500307340ustar00rootroot00000000000000from __future__ import unicode_literals, division, absolute_import, print_function import sys PY3 = sys.version_info[0] == 3 if PY3: text_type = str binary_type = bytes unicode = str basestring = str else: range = xrange text_type = unicode binary_type = str chr = unichr __all__ = [ 'HTML5TreeBuilder', ] from pdb import set_trace import warnings from sigil_bs4.builder import ( PERMISSIVE, HTML, HTML_5, HTMLTreeBuilder, ) from sigil_bs4.element import ( NamespacedAttribute, whitespace_re, ) import html5lib from html5lib.constants import namespaces from sigil_bs4.element import ( Comment, Doctype, NavigableString, Tag, ) try: # Pre-0.99999999 from html5lib.treebuilders import _base as treebuilder_base new_html5lib = False except ImportError: # 0.99999999 and up from html5lib.treebuilders import base as treebuilder_base new_html5lib = True class HTML5TreeBuilder(HTMLTreeBuilder): """Use html5lib to build a tree.""" NAME = "html5lib" features = [NAME, PERMISSIVE, HTML_5, HTML] def prepare_markup(self, markup, user_specified_encoding, document_declared_encoding=None, exclude_encodings=None): # Store the user-specified encoding for use later on. self.user_specified_encoding = user_specified_encoding # document_declared_encoding and exclude_encodings aren't used # ATM because the html5lib TreeBuilder doesn't use # UnicodeDammit. if exclude_encodings: warnings.warn("You provided a value for exclude_encoding, but the html5lib tree builder doesn't support exclude_encoding.") yield (markup, None, None, False) # These methods are defined by Beautiful Soup. def feed(self, markup): if self.soup.parse_only is not None: warnings.warn("You provided a value for parse_only, but the html5lib tree builder doesn't support parse_only. The entire document will be parsed.") parser = html5lib.HTMLParser(tree=self.create_treebuilder) extra_kwargs = dict() if not isinstance(markup, unicode): if new_html5lib: extra_kwargs['override_encoding'] = self.user_specified_encoding else: extra_kwargs['encoding'] = self.user_specified_encoding doc = parser.parse(markup, **extra_kwargs) # Set the character encoding detected by the tokenizer. if isinstance(markup, unicode): # We need to special-case this because html5lib sets # charEncoding to UTF-8 if it gets Unicode input. doc.original_encoding = None else: original_encoding = parser.tokenizer.stream.charEncoding[0] if not isinstance(original_encoding, basestring): # In 0.99999999 and up, the encoding is an html5lib # Encoding object. We want to use a string for compatibility # with other tree builders. original_encoding = original_encoding.name doc.original_encoding = original_encoding def create_treebuilder(self, namespaceHTMLElements): self.underlying_builder = TreeBuilderForHtml5lib( self.soup, namespaceHTMLElements) return self.underlying_builder def test_fragment_to_document(self, fragment): """See `TreeBuilder`.""" return '%s' % fragment class TreeBuilderForHtml5lib(treebuilder_base.TreeBuilder): def __init__(self, soup, namespaceHTMLElements): self.soup = soup super(TreeBuilderForHtml5lib, self).__init__(namespaceHTMLElements) def documentClass(self): self.soup.reset() return Element(self.soup, self.soup, None) def insertDoctype(self, token): name = token["name"] publicId = token["publicId"] systemId = token["systemId"] doctype = Doctype.for_name_and_ids(name, publicId, systemId) self.soup.object_was_parsed(doctype) def elementClass(self, name, namespace): tag = self.soup.new_tag(name, namespace) return Element(tag, self.soup, namespace) def commentClass(self, data): return TextNode(Comment(data), self.soup) def fragmentClass(self): self.soup = BeautifulSoup("") self.soup.name = "[document_fragment]" return Element(self.soup, self.soup, None) def appendChild(self, node): # XXX This code is not covered by the BS4 tests. self.soup.append(node.element) def getDocument(self): return self.soup def getFragment(self): return treebuilder_base.TreeBuilder.getFragment(self).element class AttrList(object): def __init__(self, element): self.element = element self.attrs = dict(self.element.attrs) def __iter__(self): return list(self.attrs.items()).__iter__() def __setitem__(self, name, value): # If this attribute is a multi-valued attribute for this element, # turn its value into a list. list_attr = HTML5TreeBuilder.cdata_list_attributes if (name in list_attr['*'] or (self.element.name in list_attr and name in list_attr[self.element.name])): value = whitespace_re.split(value) self.element[name] = value def items(self): return list(self.attrs.items()) def keys(self): return list(self.attrs.keys()) def __len__(self): return len(self.attrs) def __getitem__(self, name): return self.attrs[name] def __contains__(self, name): return name in list(self.attrs.keys()) class Element(treebuilder_base.Node): def __init__(self, element, soup, namespace): treebuilder_base.Node.__init__(self, element.name) self.element = element self.soup = soup self.namespace = namespace def appendChild(self, node): string_child = child = None if isinstance(node, basestring): # Some other piece of code decided to pass in a string # instead of creating a TextElement object to contain the # string. string_child = child = node elif isinstance(node, Tag): # Some other piece of code decided to pass in a Tag # instead of creating an Element object to contain the # Tag. child = node elif node.element.__class__ == NavigableString: string_child = child = node.element else: child = node.element if not isinstance(child, basestring) and child.parent is not None: node.element.extract() if (string_child and self.element.contents and self.element.contents[-1].__class__ == NavigableString): # We are appending a string onto another string. # TODO This has O(n^2) performance, for input like # "aaa..." old_element = self.element.contents[-1] new_element = self.soup.new_string(old_element + string_child) old_element.replace_with(new_element) self.soup._most_recent_element = new_element else: if isinstance(node, basestring): # Create a brand new NavigableString from this string. child = self.soup.new_string(node) # Tell Beautiful Soup to act as if it parsed this element # immediately after the parent's last descendant. (Or # immediately after the parent, if it has no children.) if self.element.contents: most_recent_element = self.element._last_descendant(False) elif self.element.next_element is not None: # Something from further ahead in the parse tree is # being inserted into this earlier element. This is # very annoying because it means an expensive search # for the last element in the tree. most_recent_element = self.soup._last_descendant() else: most_recent_element = self.element self.soup.object_was_parsed( child, parent=self.element, most_recent_element=most_recent_element) def getAttributes(self): return AttrList(self.element) def setAttributes(self, attributes): if attributes is not None and len(attributes) > 0: converted_attributes = [] for name, value in list(attributes.items()): if isinstance(name, tuple): new_name = NamespacedAttribute(*name) del attributes[name] attributes[new_name] = value self.soup.builder._replace_cdata_list_attribute_values( self.name, attributes) for name, value in list(attributes.items()): self.element[name] = value # The attributes may contain variables that need substitution. # Call set_up_substitutions manually. # # The Tag constructor called this method when the Tag was created, # but we just set/changed the attributes, so call it again. self.soup.builder.set_up_substitutions(self.element) attributes = property(getAttributes, setAttributes) def insertText(self, data, insertBefore=None): if insertBefore: text = TextNode(self.soup.new_string(data), self.soup) self.insertBefore(data, insertBefore) else: self.appendChild(data) def insertBefore(self, node, refNode): index = self.element.index(refNode.element) if (node.element.__class__ == NavigableString and self.element.contents and self.element.contents[index-1].__class__ == NavigableString): # (See comments in appendChild) old_node = self.element.contents[index-1] new_str = self.soup.new_string(old_node + node.element) old_node.replace_with(new_str) else: self.element.insert(index, node.element) node.parent = self def removeChild(self, node): node.element.extract() def reparentChildren(self, new_parent): """Move all of this tag's children into another tag.""" # print "MOVE", self.element.contents # print "FROM", self.element # print "TO", new_parent.element element = self.element new_parent_element = new_parent.element # Determine what this tag's next_element will be once all the children # are removed. final_next_element = element.next_sibling new_parents_last_descendant = new_parent_element._last_descendant(False, False) if len(new_parent_element.contents) > 0: # The new parent already contains children. We will be # appending this tag's children to the end. new_parents_last_child = new_parent_element.contents[-1] new_parents_last_descendant_next_element = new_parents_last_descendant.next_element else: # The new parent contains no children. new_parents_last_child = None new_parents_last_descendant_next_element = new_parent_element.next_element to_append = element.contents append_after = new_parent_element.contents if len(to_append) > 0: # Set the first child's previous_element and previous_sibling # to elements within the new parent first_child = to_append[0] if new_parents_last_descendant: first_child.previous_element = new_parents_last_descendant else: first_child.previous_element = new_parent_element first_child.previous_sibling = new_parents_last_child if new_parents_last_descendant: new_parents_last_descendant.next_element = first_child else: new_parent_element.next_element = first_child if new_parents_last_child: new_parents_last_child.next_sibling = first_child # Fix the last child's next_element and next_sibling last_child = to_append[-1] last_child.next_element = new_parents_last_descendant_next_element if new_parents_last_descendant_next_element: new_parents_last_descendant_next_element.previous_element = last_child last_child.next_sibling = None for child in to_append: child.parent = new_parent_element new_parent_element.contents.append(child) # Now that this element has no children, change its .next_element. element.contents = [] element.next_element = final_next_element # print "DONE WITH MOVE" # print "FROM", self.element # print "TO", new_parent_element def cloneNode(self): tag = self.soup.new_tag(self.element.name, self.namespace) node = Element(tag, self.soup, self.namespace) for key,value in self.attributes: node.attributes[key] = value return node def hasContent(self): return self.element.contents def getNameTuple(self): if self.namespace == None: return namespaces["html"], self.name else: return self.namespace, self.name nameTuple = property(getNameTuple) class TextNode(Element): def __init__(self, element, soup): treebuilder_base.Node.__init__(self, None) self.element = element self.soup = soup def cloneNode(self): raise NotImplementedError Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/builder/_htmlparser.py000066400000000000000000000231011321676412500313660ustar00rootroot00000000000000from __future__ import unicode_literals, division, absolute_import, print_function import sys PY3 = sys.version_info[0] == 3 if PY3: text_type = str binary_type = bytes unicode = str basestring = str else: range = xrange text_type = unicode binary_type = str chr = unichr """Use the HTMLParser library to parse HTML files that aren't too bad.""" __all__ = [ 'HTMLParserTreeBuilder', ] if PY3: from html.parser import HTMLParser try: from html.parser import HTMLParseError except ImportError as e: # HTMLParseError is removed in Python 3.5. Since it can never be # thrown in 3.5, we can just define our own class as a placeholder. class HTMLParseError(Exception): pass else: from HTMLParser import HTMLParser try: from HTMLParser import HTMLParseError except ImportError as e: # HTMLParseError is removed in Python 3.5. Since it can never be # thrown in 3.5, we can just define our own class as a placeholder. class HTMLParseError(Exception): pass import warnings # Starting in Python 3.2, the HTMLParser constructor takes a 'strict' # argument, which we'd like to set to False. Unfortunately, # http://bugs.python.org/issue13273 makes strict=True a better bet # before Python 3.2.3. # # At the end of this file, we monkeypatch HTMLParser so that # strict=True works well on Python 3.2.2. major, minor, release = sys.version_info[:3] CONSTRUCTOR_TAKES_STRICT = major == 3 and minor == 2 and release >= 3 CONSTRUCTOR_STRICT_IS_DEPRECATED = major == 3 and minor == 3 CONSTRUCTOR_TAKES_CONVERT_CHARREFS = major == 3 and minor >= 4 from sigil_bs4.element import ( CData, Comment, Declaration, Doctype, ProcessingInstruction, ) from sigil_bs4.dammit import EntitySubstitution, UnicodeDammit from sigil_bs4.builder import ( HTML, HTMLTreeBuilder, STRICT, ) HTMLPARSER = 'html.parser' class BeautifulSoupHTMLParser(HTMLParser): def handle_starttag(self, name, attrs): # XXX namespace attr_dict = {} for key, value in attrs: # Change None attribute values to the empty string # for consistency with the other tree builders. if value is None: value = '' attr_dict[key] = value attrvalue = '""' self.soup.handle_starttag(name, None, None, attr_dict) def handle_endtag(self, name): self.soup.handle_endtag(name) def handle_data(self, data): self.soup.handle_data(data) def handle_charref(self, name): # XXX workaround for a bug in HTMLParser. Remove this once # it's fixed in all supported versions. # http://bugs.python.org/issue13633 if name.startswith('x'): real_name = int(name.lstrip('x'), 16) elif name.startswith('X'): real_name = int(name.lstrip('X'), 16) else: real_name = int(name) try: data = chr(real_name) except (ValueError, OverflowError) as e: data = "\N{REPLACEMENT CHARACTER}" self.handle_data(data) def handle_entityref(self, name): character = EntitySubstitution.HTML_ENTITY_TO_CHARACTER.get(name) if character is not None: data = character else: data = "&%s;" % name self.handle_data(data) def handle_comment(self, data): self.soup.endData() self.soup.handle_data(data) self.soup.endData(Comment) def handle_decl(self, data): self.soup.endData() if data.startswith("DOCTYPE "): data = data[len("DOCTYPE "):] elif data == 'DOCTYPE': # i.e. "" data = '' self.soup.handle_data(data) self.soup.endData(Doctype) def unknown_decl(self, data): if data.upper().startswith('CDATA['): cls = CData data = data[len('CDATA['):] else: cls = Declaration self.soup.endData() self.soup.handle_data(data) self.soup.endData(cls) def handle_pi(self, data): self.soup.endData() self.soup.handle_data(data) self.soup.endData(ProcessingInstruction) class HTMLParserTreeBuilder(HTMLTreeBuilder): is_xml = False picklable = True NAME = HTMLPARSER features = [NAME, HTML, STRICT] def __init__(self, *args, **kwargs): if CONSTRUCTOR_TAKES_STRICT and not CONSTRUCTOR_STRICT_IS_DEPRECATED: kwargs['strict'] = False if CONSTRUCTOR_TAKES_CONVERT_CHARREFS: kwargs['convert_charrefs'] = False self.parser_args = (args, kwargs) def prepare_markup(self, markup, user_specified_encoding=None, document_declared_encoding=None, exclude_encodings=None): """ :return: A 4-tuple (markup, original encoding, encoding declared within markup, whether any characters had to be replaced with REPLACEMENT CHARACTER). """ if isinstance(markup, unicode): yield (markup, None, None, False) return try_encodings = [user_specified_encoding, document_declared_encoding] dammit = UnicodeDammit(markup, try_encodings, is_html=True, exclude_encodings=exclude_encodings) yield (dammit.markup, dammit.original_encoding, dammit.declared_html_encoding, dammit.contains_replacement_characters) def feed(self, markup): args, kwargs = self.parser_args parser = BeautifulSoupHTMLParser(*args, **kwargs) parser.soup = self.soup try: parser.feed(markup) except HTMLParseError as e: warnings.warn(RuntimeWarning( "Python's built-in HTMLParser cannot parse the given document. This is not a bug in Beautiful Soup. The best solution is to install an external parser (lxml or html5lib), and use Beautiful Soup with that parser. See http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser for help.")) raise e # Patch 3.2 versions of HTMLParser earlier than 3.2.3 to use some # 3.2.3 code. This ensures they don't treat markup like

as a # string. # # XXX This code can be removed once most Python 3 users are on 3.2.3. if major == 3 and minor == 2 and not CONSTRUCTOR_TAKES_STRICT: import re attrfind_tolerant = re.compile( r'\s*((?<=[\'"\s])[^\s/>][^\s/=>]*)(\s*=+\s*' r'(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?') HTMLParserTreeBuilder.attrfind_tolerant = attrfind_tolerant locatestarttagend = re.compile(r""" <[a-zA-Z][-.a-zA-Z0-9:_]* # tag name (?:\s+ # whitespace before attribute name (?:[a-zA-Z_][-.:a-zA-Z0-9_]* # attribute name (?:\s*=\s* # value indicator (?:'[^']*' # LITA-enclosed value |\"[^\"]*\" # LIT-enclosed value |[^'\">\s]+ # bare value ) )? ) )* \s* # trailing whitespace """, re.VERBOSE) BeautifulSoupHTMLParser.locatestarttagend = locatestarttagend from html.parser import tagfind, attrfind def parse_starttag(self, i): self.__starttag_text = None endpos = self.check_for_whole_start_tag(i) if endpos < 0: return endpos rawdata = self.rawdata self.__starttag_text = rawdata[i:endpos] # Now parse the data between i+1 and j into a tag and attrs attrs = [] match = tagfind.match(rawdata, i+1) assert match, 'unexpected call to parse_starttag()' k = match.end() self.lasttag = tag = rawdata[i+1:k].lower() while k < endpos: if self.strict: m = attrfind.match(rawdata, k) else: m = attrfind_tolerant.match(rawdata, k) if not m: break attrname, rest, attrvalue = m.group(1, 2, 3) if not rest: attrvalue = None elif attrvalue[:1] == '\'' == attrvalue[-1:] or \ attrvalue[:1] == '"' == attrvalue[-1:]: attrvalue = attrvalue[1:-1] if attrvalue: attrvalue = self.unescape(attrvalue) attrs.append((attrname.lower(), attrvalue)) k = m.end() end = rawdata[k:endpos].strip() if end not in (">", "/>"): lineno, offset = self.getpos() if "\n" in self.__starttag_text: lineno = lineno + self.__starttag_text.count("\n") offset = len(self.__starttag_text) \ - self.__starttag_text.rfind("\n") else: offset = offset + len(self.__starttag_text) if self.strict: self.error("junk characters in start tag: %r" % (rawdata[k:endpos][:20],)) self.handle_data(rawdata[i:endpos]) return endpos if end.endswith('/>'): # XHTML-style empty tag: self.handle_startendtag(tag, attrs) else: self.handle_starttag(tag, attrs) if tag in self.CDATA_CONTENT_ELEMENTS: self.set_cdata_mode(tag) return endpos def set_cdata_mode(self, elem): self.cdata_elem = elem.lower() self.interesting = re.compile(r'' % self.cdata_elem, re.I) BeautifulSoupHTMLParser.parse_starttag = parse_starttag BeautifulSoupHTMLParser.set_cdata_mode = set_cdata_mode CONSTRUCTOR_TAKES_STRICT = True Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/builder/_lxml.py000066400000000000000000000257331321676412500301760ustar00rootroot00000000000000from __future__ import unicode_literals, division, absolute_import, print_function import sys PY3 = sys.version_info[0] == 3 if PY3: text_type = str binary_type = bytes unicode = str else: range = xrange text_type = unicode binary_type = str __all__ = [ 'LXMLTreeBuilderForXML', 'LXMLTreeBuilder', ] from io import BytesIO if PY3: from io import StringIO else: from StringIO import StringIO import collections from lxml import etree from sigil_bs4.element import ( Comment, Doctype, NamespacedAttribute, ProcessingInstruction, ) from sigil_bs4.builder import ( FAST, HTML, HTMLTreeBuilder, PERMISSIVE, ParserRejectedMarkup, TreeBuilder, XML) from sigil_bs4.dammit import EncodingDetector LXML = 'lxml' _standard_epub_prefix_map = { "http://www.idpf.org/2007/opf" : "opf", "http://purl.org/dc/elements/1.1/" : "dc", "http://purl.org/dc/terms/" : "dcterms", "http://id.loc.gov/vocabulary/" : "marc", "http://www.idpf.org/vocab/rendition/#" : "rendition", "http://www.editeur/org/ONIX/book/codelists/current.html#" : "onix", "http://www.idpf.org/epub/vocab/overlays/#" : "media", "http://www.idpf.org/2007/ops" : "epub" } class LXMLTreeBuilderForXML(TreeBuilder): DEFAULT_PARSER_CLASS = etree.XMLParser is_xml = True NAME = "lxml-xml" ALTERNATE_NAMES = ["xml"] # Well, it's permissive by XML parser standards. features = [NAME, LXML, XML, FAST, PERMISSIVE] CHUNK_SIZE = 512 # This namespace mapping is specified in the XML Namespace # standard. DEFAULT_NSMAPS = {'http://www.w3.org/XML/1998/namespace' : "xml"} def default_parser(self, encoding): # This can either return a parser object or a class, which # will be instantiated with default arguments. if self._default_parser is not None: return self._default_parser return etree.XMLParser( target=self, strip_cdata=False, recover=True, encoding=encoding) def parser_for(self, encoding): # Use the default parser. parser = self.default_parser(encoding) if isinstance(parser, collections.Callable): # Instantiate the parser with default arguments parser = parser(target=self, strip_cdata=False, encoding=encoding) return parser def __init__(self, parser=None, empty_element_tags=None): # TODO: Issue a warning if parser is present but not a # callable, since that means there's no way to create new # parsers for different encodings. self._default_parser = parser if empty_element_tags is not None: self.empty_element_tags = set(empty_element_tags) self.soup = None self.nsmaps = [self.DEFAULT_NSMAPS] def _getNsTag(self, tag): # Split the namespace URL out of a fully-qualified lxml tag # name. Copied from lxml's src/lxml/sax.py. if tag[0] == '{': return tuple(tag[1:].split('}', 1)) else: return (None, tag) def prepare_markup(self, markup, user_specified_encoding=None, exclude_encodings=None, document_declared_encoding=None): """ :yield: A series of 4-tuples. (markup, encoding, declared encoding, has undergone character replacement) Each 4-tuple represents a strategy for parsing the document. """ if isinstance(markup, unicode): # We were given Unicode. Maybe lxml can parse Unicode on # this system? yield markup, None, document_declared_encoding, False if isinstance(markup, unicode): # No, apparently not. Convert the Unicode to UTF-8 and # tell lxml to parse it as UTF-8. yield (markup.encode("utf8"), "utf8", document_declared_encoding, False) # Instead of using UnicodeDammit to convert the bytestring to # Unicode using different encodings, use EncodingDetector to # iterate over the encodings, and tell lxml to try to parse # the document as each one in turn. is_html = not self.is_xml try_encodings = [user_specified_encoding, document_declared_encoding] detector = EncodingDetector( markup, try_encodings, is_html, exclude_encodings) for encoding in detector.encodings: yield (detector.markup, encoding, document_declared_encoding, False) def feed(self, markup): if isinstance(markup, bytes): markup = BytesIO(markup) elif isinstance(markup, unicode): markup = StringIO(markup) # Call feed() at least once, even if the markup is empty, # or the parser won't be initialized. data = markup.read(self.CHUNK_SIZE) try: self.parser = self.parser_for(self.soup.original_encoding) self.parser.feed(data) while len(data) != 0: # Now call feed() on the rest of the data, chunk by chunk. data = markup.read(self.CHUNK_SIZE) if len(data) != 0: self.parser.feed(data) self.parser.close() except (UnicodeDecodeError, LookupError, etree.ParserError) as e: raise ParserRejectedMarkup(str(e)) def close(self): self.nsmaps = [self.DEFAULT_NSMAPS] def start(self, name, attrs, nsmap={}): # Make sure attrs is a mutable dict--lxml may send an immutable dictproxy. attrs = dict(attrs) nsprefix = None # Fix bug in bs4 _lxml.py that ignores attributes that specify namespaces on this tag # Invert each namespace map as it comes in. if len(nsmap) > 0: # to make later processing easier, remap epub namespaces to use # epub standard prefixes new_nsmap = {} for pfx, ns in list(nsmap.items()): new_pfx = _standard_epub_prefix_map.get(ns, pfx) if new_pfx is not None and new_pfx == "opf" and pfx is None: new_pfx = None new_nsmap[new_pfx] = ns nsmap = new_nsmap # A new namespace mapping has come into play. inverted_nsmap = dict((value, key) for key, value in list(nsmap.items())) self.nsmaps.append(inverted_nsmap) # Also treat the namespace mapping as a set of attributes on the # tag, so we can properly recreate it later. attrs = attrs.copy() for prefix, namespace in list(nsmap.items()): attribute = NamespacedAttribute( "xmlns", prefix, "http://www.w3.org/2000/xmlns/") attrs[attribute] = namespace elif len(self.nsmaps) > 1: # There are no new namespaces for this tag, but # non-default namespaces are in play, so we need a # separate tag stack to know when they end. self.nsmaps.append(None) # Namespaces are in play. Find any attributes that came in # from lxml with namespaces attached to their names, and # turn then into NamespacedAttribute objects. new_attrs = {} for attr, value in list(attrs.items()): namespace, attr = self._getNsTag(attr) if namespace is None: new_attrs[attr] = value else: nsprefix = self._prefix_for_attr_namespace(namespace) attr = NamespacedAttribute(nsprefix, attr, namespace) new_attrs[attr] = value attrs = new_attrs namespace, name = self._getNsTag(name) nsprefix = self._prefix_for_tag_namespace(namespace) self.soup.handle_starttag(name, namespace, nsprefix, attrs) def _prefix_for_attr_namespace(self, namespace): """Find the currently active prefix for the given namespace.""" if namespace is None: return None for inverted_nsmap in reversed(self.nsmaps): if inverted_nsmap is not None and namespace in inverted_nsmap: return inverted_nsmap[namespace] return None # To keep the tag prefixes as clean/simple as possible if there is # more than one possible prefix allowed and it includes None use it instead # This happens when a namespace prefix is added for an attribute that duplicates # an earlier namespace meant for tags that had set that namespace prefix to None def _prefix_for_tag_namespace(self, namespace): """Find the currently active prefix for the given namespace for a tag.""" if namespace is None: return None prefixes = [] for inverted_nsmap in self.nsmaps: if inverted_nsmap is not None and namespace in inverted_nsmap: prefixes.append(inverted_nsmap[namespace]) if len(prefixes) == 0 or (None in prefixes): return None # ow return the last (most recent) viable prefix return prefixes[-1] def end(self, name): self.soup.endData() completed_tag = self.soup.tagStack[-1] namespace, name = self._getNsTag(name) nsprefix = self._prefix_for_tag_namespace(namespace) self.soup.handle_endtag(name, nsprefix) if len(self.nsmaps) > 1: # This tag, or one of its parents, introduced a namespace # mapping, so pop it off the stack. self.nsmaps.pop() def pi(self, target, data): self.soup.endData() self.soup.handle_data(target + ' ' + data) self.soup.endData(ProcessingInstruction) def data(self, content): self.soup.handle_data(content) def doctype(self, name, pubid, system): self.soup.endData() doctype = Doctype.for_name_and_ids(name, pubid, system) self.soup.object_was_parsed(doctype) def comment(self, content): "Handle comments as Comment objects." self.soup.endData() self.soup.handle_data(content) self.soup.endData(Comment) def test_fragment_to_document(self, fragment): """See `TreeBuilder`.""" return '\n%s' % fragment class LXMLTreeBuilder(HTMLTreeBuilder, LXMLTreeBuilderForXML): NAME = LXML ALTERNATE_NAMES = ["lxml-html"] features = ALTERNATE_NAMES + [NAME, HTML, FAST, PERMISSIVE] is_xml = False def default_parser(self, encoding): return etree.HTMLParser def feed(self, markup): encoding = self.soup.original_encoding try: self.parser = self.parser_for(encoding) self.parser.feed(markup) self.parser.close() except (UnicodeDecodeError, LookupError, etree.ParserError) as e: raise ParserRejectedMarkup(str(e)) def test_fragment_to_document(self, fragment): """See `TreeBuilder`.""" return '%s' % fragment Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/dammit.py000066400000000000000000000743221321676412500267060ustar00rootroot00000000000000# -*- coding: utf-8 -*- """Beautiful Soup bonus library: Unicode, Dammit This library converts a bytestream to Unicode through any means necessary. It is heavily based on code from Mark Pilgrim's Universal Feed Parser. It works best on XML and HTML, but it does not rewrite the XML or HTML to reflect a new encoding; that's the tree builder's job. """ from __future__ import unicode_literals, print_function import sys PY3 = sys.version_info[0] == 3 if PY3: text_type = str binary_type = bytes unicode = str basestring = str else: range = xrange text_type = unicode binary_type = str chr = unichr from pdb import set_trace import codecs if PY3: from html.entities import codepoint2name else: from htmlentitydefs import codepoint2name import re import logging import string # Import a library to autodetect character encodings. chardet_type = None try: # First try the fast C implementation. # PyPI package: cchardet import cchardet def chardet_dammit(s): return cchardet.detect(s)['encoding'] except ImportError: try: # Fall back to the pure Python implementation # Debian package: python-chardet # PyPI package: chardet import chardet def chardet_dammit(s): return chardet.detect(s)['encoding'] #import chardet.constants #chardet.constants._debug = 1 except ImportError: # No chardet available. def chardet_dammit(s): return None # Available from http://cjkpython.i18n.org/. try: import iconv_codec except ImportError: pass xml_encoding_re = re.compile( '^<\?.*encoding=[\'"](.*?)[\'"].*\?>'.encode(), re.I) html_meta_re = re.compile( '<\s*meta[^>]+charset\s*=\s*["\']?([^>]*?)[ /;\'">]'.encode(), re.I) class EntitySubstitution(object): """Substitute XML or HTML entities for the corresponding characters.""" def _populate_class_variables(): lookup = {} reverse_lookup = {} characters_for_re = [] for codepoint, name in list(codepoint2name.items()): character = chr(codepoint) if codepoint != 34: # There's no point in turning the quotation mark into # ", unless it happens within an attribute value, which # is handled elsewhere. characters_for_re.append(character) lookup[character] = name # But we do want to turn " into the quotation mark. reverse_lookup[name] = character re_definition = "[%s]" % "".join(characters_for_re) return lookup, reverse_lookup, re.compile(re_definition) (CHARACTER_TO_HTML_ENTITY, HTML_ENTITY_TO_CHARACTER, CHARACTER_TO_HTML_ENTITY_RE) = _populate_class_variables() CHARACTER_TO_XML_ENTITY = { "'": "apos", '"': "quot", "&": "amp", "<": "lt", ">": "gt", "\u00a0" : "#160", } BARE_AMPERSAND_OR_BRACKET = re.compile(r"([<>\u00a0]|" "&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)" ")") IS_ENTITY = re.compile("(&#\d+;|&#x[0-9a-fA-F]+;|&\w+;)") AMPERSAND_OR_BRACKET = re.compile(r"([<>&\u00a0])") @classmethod def _substitute_html_entity(cls, matchobj): entity = cls.CHARACTER_TO_HTML_ENTITY.get(matchobj.group(0)) return "&%s;" % entity @classmethod def _substitute_xml_entity(cls, matchobj): """Used with a regular expression to substitute the appropriate XML entity for an XML special character.""" entity = cls.CHARACTER_TO_XML_ENTITY[matchobj.group(0)] return "&%s;" % entity @classmethod def quoted_attribute_value(self, value): """Make a value into a quoted XML attribute, possibly escaping it. Most strings will be quoted using double quotes. Bob's Bar -> "Bob's Bar" If a string contains double quotes, it will be quoted using single quotes. Welcome to "my bar" -> 'Welcome to "my bar"' If a string contains both single and double quotes, the double quotes will be escaped, and the string will be quoted using double quotes. Welcome to "Bob's Bar" -> "Welcome to "Bob's bar" """ """ Robustness fix for bs4 But many other downstream processors of both html and xml really don't deal well with single quotes instead of the more standard double-quotes. So simply replace them with their xml entity regardless """ quote_with = '"' if '"' in value: # if "'" in value: # # The string contains both single and double # # quotes. Turn the double quotes into # # entities. We quote the double quotes rather than # # the single quotes because the entity name is # # """ whether this is HTML or XML. If we # # quoted the single quotes, we'd have to decide # # between ' and &squot;. # replace_with = """ # value = value.replace('"', replace_with) # else: # # There are double quotes but no single quotes. # # We can use single quotes to quote the attribute. # quote_with = "'" replace_with = """ value = value.replace('"', replace_with) return quote_with + value + quote_with @classmethod def substitute_xml(cls, value, make_quoted_attribute=False): """Substitute XML entities for special XML characters. :param value: A string to be substituted. The less-than sign will become <, the greater-than sign will become >, and any ampersands will become &. If you want ampersands that appear to be part of an entity definition to be left alone, use substitute_xml_containing_entities() instead. :param make_quoted_attribute: If True, then the string will be quoted, as befits an attribute value. """ # Escape angle brackets and ampersands. value = cls.AMPERSAND_OR_BRACKET.sub( cls._substitute_xml_entity, value) if make_quoted_attribute: value = cls.quoted_attribute_value(value) return value @classmethod def substitute_xml_containing_entities( cls, value, make_quoted_attribute=False): """Substitute XML entities for special XML characters. :param value: A string to be substituted. The less-than sign will become <, the greater-than sign will become >, and any ampersands that are not part of an entity defition will become &. :param make_quoted_attribute: If True, then the string will be quoted, as befits an attribute value. """ # Escape angle brackets, and ampersands that aren't part of # entities. value = cls.BARE_AMPERSAND_OR_BRACKET.sub( cls._substitute_xml_entity, value) if make_quoted_attribute: value = cls.quoted_attribute_value(value) return value @classmethod def substitute_html(cls, s): """Replace certain Unicode characters with named HTML entities. This differs from data.encode(encoding, 'xmlcharrefreplace') in that the goal is to make the result more readable (to those with ASCII displays) rather than to recover from errors. There's absolutely nothing wrong with a UTF-8 string containg a LATIN SMALL LETTER E WITH ACUTE, but replacing that character with "é" will make it more readable to some people. """ # ignore already existing entities pieces = cls.IS_ENTITY.split(s) for i in range(0,len(pieces),2): piece = pieces[i] pieces[i] = cls.CHARACTER_TO_HTML_ENTITY_RE.sub(cls._substitute_html_entity, piece) return "".join(pieces) # return cls.CHARACTER_TO_HTML_ENTITY_RE.sub( # cls._substitute_html_entity, s) class EncodingDetector: """Suggests a number of possible encodings for a bytestring. Order of precedence: 1. Encodings you specifically tell EncodingDetector to try first (the override_encodings argument to the constructor). 2. An encoding declared within the bytestring itself, either in an XML declaration (if the bytestring is to be interpreted as an XML document), or in a tag (if the bytestring is to be interpreted as an HTML document.) 3. An encoding detected through textual analysis by chardet, cchardet, or a similar external library. 4. UTF-8. 5. Windows-1252. """ def __init__(self, markup, override_encodings=None, is_html=False, exclude_encodings=None): self.override_encodings = override_encodings or [] exclude_encodings = exclude_encodings or [] self.exclude_encodings = set([x.lower() for x in exclude_encodings]) self.chardet_encoding = None self.is_html = is_html self.declared_encoding = None # First order of business: strip a byte-order mark. self.markup, self.sniffed_encoding = self.strip_byte_order_mark(markup) def _usable(self, encoding, tried): if encoding is not None: encoding = encoding.lower() if encoding in self.exclude_encodings: return False if encoding not in tried: tried.add(encoding) return True return False @property def encodings(self): """Yield a number of encodings that might work for this markup.""" tried = set() for e in self.override_encodings: if self._usable(e, tried): yield e # Did the document originally start with a byte-order mark # that indicated its encoding? if self._usable(self.sniffed_encoding, tried): yield self.sniffed_encoding # Look within the document for an XML or HTML encoding # declaration. if self.declared_encoding is None: self.declared_encoding = self.find_declared_encoding( self.markup, self.is_html) if self._usable(self.declared_encoding, tried): yield self.declared_encoding # Use third-party character set detection to guess at the # encoding. if self.chardet_encoding is None: self.chardet_encoding = chardet_dammit(self.markup) if self._usable(self.chardet_encoding, tried): yield self.chardet_encoding # As a last-ditch effort, try utf-8 and windows-1252. for e in ('utf-8', 'windows-1252'): if self._usable(e, tried): yield e @classmethod def strip_byte_order_mark(cls, data): """If a byte-order mark is present, strip it and return the encoding it implies.""" encoding = None if isinstance(data, text_type): # Unicode data cannot have a byte-order mark. return data, encoding if (len(data) >= 4) and (data[:2] == b'\xfe\xff') \ and (data[2:4] != '\x00\x00'): encoding = 'utf-16be' data = data[2:] elif (len(data) >= 4) and (data[:2] == b'\xff\xfe') \ and (data[2:4] != '\x00\x00'): encoding = 'utf-16le' data = data[2:] elif data[:3] == b'\xef\xbb\xbf': encoding = 'utf-8' data = data[3:] elif data[:4] == b'\x00\x00\xfe\xff': encoding = 'utf-32be' data = data[4:] elif data[:4] == b'\xff\xfe\x00\x00': encoding = 'utf-32le' data = data[4:] return data, encoding @classmethod def find_declared_encoding(cls, markup, is_html=False, search_entire_document=False): """Given a document, tries to find its declared encoding. An XML encoding is declared at the beginning of the document. An HTML encoding is declared in a tag, hopefully near the beginning of the document. """ if search_entire_document: xml_endpos = html_endpos = len(markup) else: xml_endpos = 1024 html_endpos = max(2048, int(len(markup) * 0.05)) declared_encoding = None declared_encoding_match = xml_encoding_re.search(markup, endpos=xml_endpos) if not declared_encoding_match and is_html: declared_encoding_match = html_meta_re.search(markup, endpos=html_endpos) if declared_encoding_match is not None: declared_encoding = declared_encoding_match.groups()[0].decode( 'ascii', 'replace') if declared_encoding: return declared_encoding.lower() return None class UnicodeDammit: """A class for detecting the encoding of a *ML document and converting it to a Unicode string. If the source encoding is windows-1252, can replace MS smart quotes with their HTML or XML equivalents.""" # This dictionary maps commonly seen values for "charset" in HTML # meta tags to the corresponding Python codec names. It only covers # values that aren't in Python's aliases and can't be determined # by the heuristics in find_codec. CHARSET_ALIASES = {"macintosh": "mac-roman", "x-sjis": "shift-jis"} ENCODINGS_WITH_SMART_QUOTES = [ "windows-1252", "iso-8859-1", "iso-8859-2", ] def __init__(self, markup, override_encodings=[], smart_quotes_to=None, is_html=False, exclude_encodings=[]): self.smart_quotes_to = smart_quotes_to self.tried_encodings = [] self.contains_replacement_characters = False self.is_html = is_html self.detector = EncodingDetector( markup, override_encodings, is_html, exclude_encodings) # Short-circuit if the data is in Unicode to begin with. if isinstance(markup, text_type) or markup == b'': self.markup = markup self.unicode_markup = unicode(markup) self.original_encoding = None return # The encoding detector may have stripped a byte-order mark. # Use the stripped markup from this point on. self.markup = self.detector.markup u = None for encoding in self.detector.encodings: markup = self.detector.markup u = self._convert_from(encoding) if u is not None: break if not u: # None of the encodings worked. As an absolute last resort, # try them again with character replacement. for encoding in self.detector.encodings: if encoding != "ascii": u = self._convert_from(encoding, "replace") if u is not None: logging.warning( "Some characters could not be decoded, and were " "replaced with REPLACEMENT CHARACTER.") self.contains_replacement_characters = True break # If none of that worked, we could at this point force it to # ASCII, but that would destroy so much data that I think # giving up is better. self.unicode_markup = u if not u: self.original_encoding = None def _sub_ms_char(self, match): """Changes a MS smart quote character to an XML or HTML entity, or an ASCII character.""" orig = match.group(1) if self.smart_quotes_to == 'ascii': sub = self.MS_CHARS_TO_ASCII.get(orig).encode() else: sub = self.MS_CHARS.get(orig) if type(sub) == tuple: if self.smart_quotes_to == 'xml': sub = '&#x'.encode() + sub[1].encode() + ';'.encode() else: sub = '&'.encode() + sub[0].encode() + ';'.encode() else: sub = sub.encode() return sub def _convert_from(self, proposed, errors="strict"): proposed = self.find_codec(proposed) if not proposed or (proposed, errors) in self.tried_encodings: return None self.tried_encodings.append((proposed, errors)) markup = self.markup # Convert smart quotes to HTML if coming from an encoding # that might have them. if (self.smart_quotes_to is not None and proposed in self.ENCODINGS_WITH_SMART_QUOTES): smart_quotes_re = b"([\x80-\x9f])" smart_quotes_compiled = re.compile(smart_quotes_re) markup = smart_quotes_compiled.sub(self._sub_ms_char, markup) try: # print("Trying to convert document to %s (errors=%s)" % (proposed, errors)) u = self._to_unicode(markup, proposed, errors) self.markup = u self.original_encoding = proposed except Exception as e: # print("That didn't work!") # print(e) return None # print("Correct encoding: %s" % proposed) return self.markup def _to_unicode(self, data, encoding, errors="strict"): '''Given a string and its encoding, decodes the string into Unicode. %encoding is a string recognized by encodings.aliases''' return unicode(data, encoding, errors) @property def declared_html_encoding(self): if not self.is_html: return None return self.detector.declared_encoding def find_codec(self, charset): value = (self._codec(self.CHARSET_ALIASES.get(charset, charset)) or (charset and self._codec(charset.replace("-", ""))) or (charset and self._codec(charset.replace("-", "_"))) or (charset and charset.lower()) or charset ) if value: return value.lower() return None def _codec(self, charset): if not charset: return charset codec = None try: codecs.lookup(charset) codec = charset except (LookupError, ValueError): pass return codec # A partial mapping of ISO-Latin-1 to HTML entities/XML numeric entities. MS_CHARS = {b'\x80': ('euro', '20AC'), b'\x81': ' ', b'\x82': ('sbquo', '201A'), b'\x83': ('fnof', '192'), b'\x84': ('bdquo', '201E'), b'\x85': ('hellip', '2026'), b'\x86': ('dagger', '2020'), b'\x87': ('Dagger', '2021'), b'\x88': ('circ', '2C6'), b'\x89': ('permil', '2030'), b'\x8A': ('Scaron', '160'), b'\x8B': ('lsaquo', '2039'), b'\x8C': ('OElig', '152'), b'\x8D': '?', b'\x8E': ('#x17D', '17D'), b'\x8F': '?', b'\x90': '?', b'\x91': ('lsquo', '2018'), b'\x92': ('rsquo', '2019'), b'\x93': ('ldquo', '201C'), b'\x94': ('rdquo', '201D'), b'\x95': ('bull', '2022'), b'\x96': ('ndash', '2013'), b'\x97': ('mdash', '2014'), b'\x98': ('tilde', '2DC'), b'\x99': ('trade', '2122'), b'\x9a': ('scaron', '161'), b'\x9b': ('rsaquo', '203A'), b'\x9c': ('oelig', '153'), b'\x9d': '?', b'\x9e': ('#x17E', '17E'), b'\x9f': ('Yuml', ''),} # A parochial partial mapping of ISO-Latin-1 to ASCII. Contains # horrors like stripping diacritical marks to turn á into a, but also # contains non-horrors like turning “ into ". MS_CHARS_TO_ASCII = { b'\x80' : 'EUR', b'\x81' : ' ', b'\x82' : ',', b'\x83' : 'f', b'\x84' : ',,', b'\x85' : '...', b'\x86' : '+', b'\x87' : '++', b'\x88' : '^', b'\x89' : '%', b'\x8a' : 'S', b'\x8b' : '<', b'\x8c' : 'OE', b'\x8d' : '?', b'\x8e' : 'Z', b'\x8f' : '?', b'\x90' : '?', b'\x91' : "'", b'\x92' : "'", b'\x93' : '"', b'\x94' : '"', b'\x95' : '*', b'\x96' : '-', b'\x97' : '--', b'\x98' : '~', b'\x99' : '(TM)', b'\x9a' : 's', b'\x9b' : '>', b'\x9c' : 'oe', b'\x9d' : '?', b'\x9e' : 'z', b'\x9f' : 'Y', b'\xa0' : ' ', b'\xa1' : '!', b'\xa2' : 'c', b'\xa3' : 'GBP', b'\xa4' : '$', #This approximation is especially parochial--this is the #generic currency symbol. b'\xa5' : 'YEN', b'\xa6' : '|', b'\xa7' : 'S', b'\xa8' : '..', b'\xa9' : '', b'\xaa' : '(th)', b'\xab' : '<<', b'\xac' : '!', b'\xad' : ' ', b'\xae' : '(R)', b'\xaf' : '-', b'\xb0' : 'o', b'\xb1' : '+-', b'\xb2' : '2', b'\xb3' : '3', b'\xb4' : ("'", 'acute'), b'\xb5' : 'u', b'\xb6' : 'P', b'\xb7' : '*', b'\xb8' : ',', b'\xb9' : '1', b'\xba' : '(th)', b'\xbb' : '>>', b'\xbc' : '1/4', b'\xbd' : '1/2', b'\xbe' : '3/4', b'\xbf' : '?', b'\xc0' : 'A', b'\xc1' : 'A', b'\xc2' : 'A', b'\xc3' : 'A', b'\xc4' : 'A', b'\xc5' : 'A', b'\xc6' : 'AE', b'\xc7' : 'C', b'\xc8' : 'E', b'\xc9' : 'E', b'\xca' : 'E', b'\xcb' : 'E', b'\xcc' : 'I', b'\xcd' : 'I', b'\xce' : 'I', b'\xcf' : 'I', b'\xd0' : 'D', b'\xd1' : 'N', b'\xd2' : 'O', b'\xd3' : 'O', b'\xd4' : 'O', b'\xd5' : 'O', b'\xd6' : 'O', b'\xd7' : '*', b'\xd8' : 'O', b'\xd9' : 'U', b'\xda' : 'U', b'\xdb' : 'U', b'\xdc' : 'U', b'\xdd' : 'Y', b'\xde' : 'b', b'\xdf' : 'B', b'\xe0' : 'a', b'\xe1' : 'a', b'\xe2' : 'a', b'\xe3' : 'a', b'\xe4' : 'a', b'\xe5' : 'a', b'\xe6' : 'ae', b'\xe7' : 'c', b'\xe8' : 'e', b'\xe9' : 'e', b'\xea' : 'e', b'\xeb' : 'e', b'\xec' : 'i', b'\xed' : 'i', b'\xee' : 'i', b'\xef' : 'i', b'\xf0' : 'o', b'\xf1' : 'n', b'\xf2' : 'o', b'\xf3' : 'o', b'\xf4' : 'o', b'\xf5' : 'o', b'\xf6' : 'o', b'\xf7' : '/', b'\xf8' : 'o', b'\xf9' : 'u', b'\xfa' : 'u', b'\xfb' : 'u', b'\xfc' : 'u', b'\xfd' : 'y', b'\xfe' : 'b', b'\xff' : 'y', } # A map used when removing rogue Windows-1252/ISO-8859-1 # characters in otherwise UTF-8 documents. # # Note that \x81, \x8d, \x8f, \x90, and \x9d are undefined in # Windows-1252. WINDOWS_1252_TO_UTF8 = { 0x80 : b'\xe2\x82\xac', # € 0x82 : b'\xe2\x80\x9a', # ‚ 0x83 : b'\xc6\x92', # Æ’ 0x84 : b'\xe2\x80\x9e', # „ 0x85 : b'\xe2\x80\xa6', # … 0x86 : b'\xe2\x80\xa0', # † 0x87 : b'\xe2\x80\xa1', # ‡ 0x88 : b'\xcb\x86', # ˆ 0x89 : b'\xe2\x80\xb0', # ‰ 0x8a : b'\xc5\xa0', # Å  0x8b : b'\xe2\x80\xb9', # ‹ 0x8c : b'\xc5\x92', # Å’ 0x8e : b'\xc5\xbd', # Ž 0x91 : b'\xe2\x80\x98', # ‘ 0x92 : b'\xe2\x80\x99', # ’ 0x93 : b'\xe2\x80\x9c', # “ 0x94 : b'\xe2\x80\x9d', # †0x95 : b'\xe2\x80\xa2', # • 0x96 : b'\xe2\x80\x93', # – 0x97 : b'\xe2\x80\x94', # — 0x98 : b'\xcb\x9c', # Ëœ 0x99 : b'\xe2\x84\xa2', # â„¢ 0x9a : b'\xc5\xa1', # Å¡ 0x9b : b'\xe2\x80\xba', # › 0x9c : b'\xc5\x93', # Å“ 0x9e : b'\xc5\xbe', # ž 0x9f : b'\xc5\xb8', # Ÿ 0xa0 : b'\xc2\xa0', #   0xa1 : b'\xc2\xa1', # ¡ 0xa2 : b'\xc2\xa2', # ¢ 0xa3 : b'\xc2\xa3', # £ 0xa4 : b'\xc2\xa4', # ¤ 0xa5 : b'\xc2\xa5', # Â¥ 0xa6 : b'\xc2\xa6', # ¦ 0xa7 : b'\xc2\xa7', # § 0xa8 : b'\xc2\xa8', # ¨ 0xa9 : b'\xc2\xa9', # © 0xaa : b'\xc2\xaa', # ª 0xab : b'\xc2\xab', # « 0xac : b'\xc2\xac', # ¬ 0xad : b'\xc2\xad', # ­ 0xae : b'\xc2\xae', # ® 0xaf : b'\xc2\xaf', # ¯ 0xb0 : b'\xc2\xb0', # ° 0xb1 : b'\xc2\xb1', # ± 0xb2 : b'\xc2\xb2', # ² 0xb3 : b'\xc2\xb3', # ³ 0xb4 : b'\xc2\xb4', # ´ 0xb5 : b'\xc2\xb5', # µ 0xb6 : b'\xc2\xb6', # ¶ 0xb7 : b'\xc2\xb7', # · 0xb8 : b'\xc2\xb8', # ¸ 0xb9 : b'\xc2\xb9', # ¹ 0xba : b'\xc2\xba', # º 0xbb : b'\xc2\xbb', # » 0xbc : b'\xc2\xbc', # ¼ 0xbd : b'\xc2\xbd', # ½ 0xbe : b'\xc2\xbe', # ¾ 0xbf : b'\xc2\xbf', # ¿ 0xc0 : b'\xc3\x80', # À 0xc1 : b'\xc3\x81', # à 0xc2 : b'\xc3\x82', #  0xc3 : b'\xc3\x83', # à 0xc4 : b'\xc3\x84', # Ä 0xc5 : b'\xc3\x85', # Ã… 0xc6 : b'\xc3\x86', # Æ 0xc7 : b'\xc3\x87', # Ç 0xc8 : b'\xc3\x88', # È 0xc9 : b'\xc3\x89', # É 0xca : b'\xc3\x8a', # Ê 0xcb : b'\xc3\x8b', # Ë 0xcc : b'\xc3\x8c', # ÃŒ 0xcd : b'\xc3\x8d', # à 0xce : b'\xc3\x8e', # ÃŽ 0xcf : b'\xc3\x8f', # à 0xd0 : b'\xc3\x90', # à 0xd1 : b'\xc3\x91', # Ñ 0xd2 : b'\xc3\x92', # Ã’ 0xd3 : b'\xc3\x93', # Ó 0xd4 : b'\xc3\x94', # Ô 0xd5 : b'\xc3\x95', # Õ 0xd6 : b'\xc3\x96', # Ö 0xd7 : b'\xc3\x97', # × 0xd8 : b'\xc3\x98', # Ø 0xd9 : b'\xc3\x99', # Ù 0xda : b'\xc3\x9a', # Ú 0xdb : b'\xc3\x9b', # Û 0xdc : b'\xc3\x9c', # Ü 0xdd : b'\xc3\x9d', # à 0xde : b'\xc3\x9e', # Þ 0xdf : b'\xc3\x9f', # ß 0xe0 : b'\xc3\xa0', # à 0xe1 : b'\xa1', # á 0xe2 : b'\xc3\xa2', # â 0xe3 : b'\xc3\xa3', # ã 0xe4 : b'\xc3\xa4', # ä 0xe5 : b'\xc3\xa5', # Ã¥ 0xe6 : b'\xc3\xa6', # æ 0xe7 : b'\xc3\xa7', # ç 0xe8 : b'\xc3\xa8', # è 0xe9 : b'\xc3\xa9', # é 0xea : b'\xc3\xaa', # ê 0xeb : b'\xc3\xab', # ë 0xec : b'\xc3\xac', # ì 0xed : b'\xc3\xad', # í 0xee : b'\xc3\xae', # î 0xef : b'\xc3\xaf', # ï 0xf0 : b'\xc3\xb0', # ð 0xf1 : b'\xc3\xb1', # ñ 0xf2 : b'\xc3\xb2', # ò 0xf3 : b'\xc3\xb3', # ó 0xf4 : b'\xc3\xb4', # ô 0xf5 : b'\xc3\xb5', # õ 0xf6 : b'\xc3\xb6', # ö 0xf7 : b'\xc3\xb7', # ÷ 0xf8 : b'\xc3\xb8', # ø 0xf9 : b'\xc3\xb9', # ù 0xfa : b'\xc3\xba', # ú 0xfb : b'\xc3\xbb', # û 0xfc : b'\xc3\xbc', # ü 0xfd : b'\xc3\xbd', # ý 0xfe : b'\xc3\xbe', # þ } MULTIBYTE_MARKERS_AND_SIZES = [ (0xc2, 0xdf, 2), # 2-byte characters start with a byte C2-DF (0xe0, 0xef, 3), # 3-byte characters start with E0-EF (0xf0, 0xf4, 4), # 4-byte characters start with F0-F4 ] FIRST_MULTIBYTE_MARKER = MULTIBYTE_MARKERS_AND_SIZES[0][0] LAST_MULTIBYTE_MARKER = MULTIBYTE_MARKERS_AND_SIZES[-1][1] @classmethod def detwingle(cls, in_bytes, main_encoding="utf8", embedded_encoding="windows-1252"): """Fix characters from one encoding embedded in some other encoding. Currently the only situation supported is Windows-1252 (or its subset ISO-8859-1), embedded in UTF-8. The input must be a bytestring. If you've already converted the document to Unicode, you're too late. The output is a bytestring in which `embedded_encoding` characters have been converted to their `main_encoding` equivalents. """ if embedded_encoding.replace('_', '-').lower() not in ( 'windows-1252', 'windows_1252'): raise NotImplementedError( "Windows-1252 and ISO-8859-1 are the only currently supported " "embedded encodings.") if main_encoding.lower() not in ('utf8', 'utf-8'): raise NotImplementedError( "UTF-8 is the only currently supported main encoding.") byte_chunks = [] chunk_start = 0 pos = 0 while pos < len(in_bytes): byte = in_bytes[pos] if not isinstance(byte, int): # Python 2.x byte = ord(byte) if (byte >= cls.FIRST_MULTIBYTE_MARKER and byte <= cls.LAST_MULTIBYTE_MARKER): # This is the start of a UTF-8 multibyte character. Skip # to the end. for start, end, size in cls.MULTIBYTE_MARKERS_AND_SIZES: if byte >= start and byte <= end: pos += size break elif byte >= 0x80 and byte in cls.WINDOWS_1252_TO_UTF8: # We found a Windows-1252 character! # Save the string up to this point as a chunk. byte_chunks.append(in_bytes[chunk_start:pos]) # Now translate the Windows-1252 character into UTF-8 # and add it as another, one-byte chunk. byte_chunks.append(cls.WINDOWS_1252_TO_UTF8[byte]) pos += 1 chunk_start = pos else: # Go on to the next character. pos += 1 if chunk_start == 0: # The string is unchanged. return in_bytes else: # Store the final chunk. byte_chunks.append(in_bytes[chunk_start:]) return b''.join(byte_chunks) Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/diagnose.py000066400000000000000000000155121321676412500272200ustar00rootroot00000000000000"""Diagnostic functions, mainly for use when doing tech support.""" from __future__ import unicode_literals, division, absolute_import, print_function import sys PY3 = sys.version_info[0] == 3 if PY3: text_type = str binary_type = bytes else: range = xrange text_type = unicode binary_type = str import cProfile if PY3: from io import StringIO from html.parser import HTMLParser else: from StringIO import StringIO from HTMLParser import HTMLParser import sigil_bs4 from sigil_bs4 import BeautifulSoup, __version__ from sigil_bs4.builder import builder_registry import os import pstats import random import tempfile import time import traceback import sys import cProfile def diagnose(data): """Diagnostic suite for isolating common problems.""" print("Diagnostic running on Beautiful Soup %s" % __version__) print("Python version %s" % sys.version) basic_parsers = ["html.parser", "html5lib", "lxml"] for name in basic_parsers: for builder in builder_registry.builders: if name in builder.features: break else: basic_parsers.remove(name) print(( "I noticed that %s is not installed. Installing it may help." % name)) if 'lxml' in basic_parsers: basic_parsers.append(["lxml", "xml"]) try: from lxml import etree print("Found lxml version %s" % ".".join(map(str,etree.LXML_VERSION))) except ImportError as e: print ( "lxml is not installed or couldn't be imported.") if 'html5lib' in basic_parsers: try: import html5lib print("Found html5lib version %s" % html5lib.__version__) except ImportError as e: print ( "html5lib is not installed or couldn't be imported.") if hasattr(data, 'read'): data = data.read() elif os.path.exists(data): print('"%s" looks like a filename. Reading data from the file.' % data) data = open(data).read() elif data.startswith("http:") or data.startswith("https:"): print('"%s" looks like a URL. Beautiful Soup is not an HTTP client.' % data) print("You need to use some other library to get the document behind the URL, and feed that document to Beautiful Soup.") return print() for parser in basic_parsers: print("Trying to parse your markup with %s" % parser) success = False try: soup = BeautifulSoup(data, parser) success = True except Exception as e: print("%s could not parse the markup." % parser) traceback.print_exc() if success: print("Here's what %s did with the markup:" % parser) print(soup.prettify()) print("-" * 80) def lxml_trace(data, html=True, **kwargs): """Print out the lxml events that occur during parsing. This lets you see how lxml parses a document when no Beautiful Soup code is running. """ from lxml import etree for event, element in etree.iterparse(StringIO(data), html=html, **kwargs): print(("%s, %4s, %s" % (event, element.tag, element.text))) class AnnouncingParser(HTMLParser): """Announces HTMLParser parse events, without doing anything else.""" def _p(self, s): print(s) def handle_starttag(self, name, attrs): self._p("%s START" % name) def handle_endtag(self, name): self._p("%s END" % name) def handle_data(self, data): self._p("%s DATA" % data) def handle_charref(self, name): self._p("%s CHARREF" % name) def handle_entityref(self, name): self._p("%s ENTITYREF" % name) def handle_comment(self, data): self._p("%s COMMENT" % data) def handle_decl(self, data): self._p("%s DECL" % data) def unknown_decl(self, data): self._p("%s UNKNOWN-DECL" % data) def handle_pi(self, data): self._p("%s PI" % data) def htmlparser_trace(data): """Print out the HTMLParser events that occur during parsing. This lets you see how HTMLParser parses a document when no Beautiful Soup code is running. """ parser = AnnouncingParser() parser.feed(data) _vowels = "aeiou" _consonants = "bcdfghjklmnpqrstvwxyz" def rword(length=5): "Generate a random word-like string." s = '' for i in range(length): if i % 2 == 0: t = _consonants else: t = _vowels s += random.choice(t) return s def rsentence(length=4): "Generate a random sentence-like string." return " ".join(rword(random.randint(4,9)) for i in range(length)) def rdoc(num_elements=1000): """Randomly generate an invalid HTML document.""" tag_names = ['p', 'div', 'span', 'i', 'b', 'script', 'table'] elements = [] for i in range(num_elements): choice = random.randint(0,3) if choice == 0: # New tag. tag_name = random.choice(tag_names) elements.append("<%s>" % tag_name) elif choice == 1: elements.append(rsentence(random.randint(1,4))) elif choice == 2: # Close a tag. tag_name = random.choice(tag_names) elements.append("" % tag_name) return "" + "\n".join(elements) + "" def benchmark_parsers(num_elements=100000): """Very basic head-to-head performance benchmark.""" print("Comparative parser benchmark on Beautiful Soup %s" % __version__) data = rdoc(num_elements) print("Generated a large invalid HTML document (%d bytes)." % len(data)) for parser in ["lxml", ["lxml", "html"], "html5lib", "html.parser"]: success = False try: a = time.time() soup = BeautifulSoup(data, parser) b = time.time() success = True except Exception as e: print("%s could not parse the markup." % parser) traceback.print_exc() if success: print("BS4+%s parsed the markup in %.2fs." % (parser, b-a)) from lxml import etree a = time.time() etree.HTML(data) b = time.time() print("Raw lxml parsed the markup in %.2fs." % (b-a)) import html5lib parser = html5lib.HTMLParser() a = time.time() parser.parse(data) b = time.time() print("Raw html5lib parsed the markup in %.2fs." % (b-a)) def profile(num_elements=100000, parser="lxml"): filehandle = tempfile.NamedTemporaryFile() filename = filehandle.name data = rdoc(num_elements) vars = dict(bs4=bs4, data=data, parser=parser) cProfile.runctx('bs4.BeautifulSoup(data, parser)' , vars, vars, filename) stats = pstats.Stats(filename) # stats.strip_dirs() stats.sort_stats("cumulative") stats.print_stats('_html5lib|bs4', 50) if __name__ == '__main__': diagnose(sys.stdin.read()) Sigil-0.9.9/src/Resource_Files/plugin_launchers/python/sigil_bs4/element.py000066400000000000000000002415421321676412500270640ustar00rootroot00000000000000from __future__ import unicode_literals, division, absolute_import, print_function import sys PY3 = sys.version_info[0] == 3 if PY3: text_type = str binary_type = bytes unicode = str basestring = str else: range = xrange text_type = unicode binary_type = str chr = unichr from pdb import set_trace import collections import re import warnings from sigil_bs4.dammit import EntitySubstitution DEFAULT_OUTPUT_ENCODING = "utf-8" PY3K = (sys.version_info[0] > 2) whitespace_re = re.compile("\s+") NON_BREAKING_INLINE_TAGS = ("a","abbr","acronym","b","bdo","big","br", "button","cite","code","del","dfn","em","font","i","image","img", "input","ins","kbd","label","map","nobr","object","q","ruby","rt","s", "samp","select","small","span","strike","strong","sub","sup","textarea", "tt","u","var","wbr","mbp:nu") PRESERVE_WHITESPACE_TAGS = ("pre","textarea","script","style") VOID_TAGS = ("area","base","basefont","bgsound","br","col","command", "embed","event-source","frame","hr","img","input","keygen", "link","meta","param","source","spacer","track","wbr", "mbp:pagebreak") NO_ENTITY_SUB_TAGS = ("script", "style") SPECIAL_HANDLING_TAGS = ("html", "body") STRUCTURAL_TAGS = ("article","aside","blockquote","body","canvas", "colgroup","div","dl","figure","footer","head","header","hr","html", "ol","section","table","tbody","tfoot","thead","td","th","tr","ul") OTHER_TEXTHOLDING_TAGS = ("address","caption","dd","div","dt","h1","h2", "h3","h4","h5","h6","legend","li","option","p","td","th","title") EBOOK_XML_PARENT_TAGS = ("package","metadata","manifest","spine","guide","ncx", "head","doctitle","docauthor","navmap", "navpoint", "navlabel", "pagelist", "pagetarget") def _alias(attr): """Alias one attribute name to another for backward compatibility""" @property def alias(self): return getattr(self, attr) @alias.setter def alias(self): return setattr(self, attr) return alias class NamespacedAttribute(unicode): def __new__(cls, prefix, name, namespace=None): if name is None: obj = unicode.__new__(cls, prefix) elif prefix is None: # Not really namespaced. obj = unicode.__new__(cls, name) else: obj = unicode.__new__(cls, prefix + ":" + name) obj.prefix = prefix obj.name = name obj.namespace = namespace return obj class AttributeValueWithCharsetSubstitution(unicode): """A stand-in object for a character encoding specified in HTML.""" class CharsetMetaAttributeValue(AttributeValueWithCharsetSubstitution): """A generic stand-in for the value of a meta tag's 'charset' attribute. When Beautiful Soup parses the markup '', the value of the 'charset' attribute will be one of these objects. """ def __new__(cls, original_value): obj = unicode.__new__(cls, original_value) obj.original_value = original_value return obj def encode(self, encoding): return encoding class ContentMetaAttributeValue(AttributeValueWithCharsetSubstitution): """A generic stand-in for the value of a meta tag's 'content' attribute. When Beautiful Soup parses the markup: The value of the 'content' attribute will be one of these objects. """ CHARSET_RE = re.compile("((^|;)\s*charset=)([^;]*)", re.M) def __new__(cls, original_value): match = cls.CHARSET_RE.search(original_value) if match is None: # No substitution necessary. return unicode.__new__(str, original_value) obj = unicode.__new__(cls, original_value) obj.original_value = original_value return obj def encode(self, encoding): def rewrite(match): return match.group(1) + encoding return self.CHARSET_RE.sub(rewrite, self.original_value) class HTMLAwareEntitySubstitution(EntitySubstitution): """Entity substitution rules that are aware of some HTML quirks. Specifically, the contents of